<?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>16826</bug_id>
          
          <creation_ts>2008-01-10 13:55:20 -0800</creation_ts>
          <short_desc>[Gtk] Implement WebKitDownload</short_desc>
          <delta_ts>2009-03-03 11:54:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>16562</dependson>
    
    <dependson>17066</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</reporter>
          <assigned_to name="Gustavo Noronha (kov)">gustavo</assigned_to>
          <cc>christian</cc>
    
    <cc>cosimoc</cc>
    
    <cc>gustavo</cc>
    
    <cc>jonathon</cc>
    
    <cc>marco.barisione</cc>
    
    <cc>martin.sourada</cc>
    
    <cc>uws+webkit</cc>
    
    <cc>withsmilo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66804</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</who>
    <bug_when>2008-01-10 13:55:20 -0800</bug_when>
    <thetext>Implement the mechanism needed to download files.

I&apos;m working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67398</commentid>
    <comment_count>1</comment_count>
      <attachid>18479</attachid>
    <who name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</who>
    <bug_when>2008-01-16 12:10:02 -0800</bug_when>
    <thetext>Created attachment 18479
First attempt

Ok, this is a first try.  

This implementation does have the pro of providing an API to download files but has cons.  One of them is that the curl backend it use is separate from the one used to download the page the file was on.  So if you need a cookie or authentication to get that file, it won&apos;t work with this version (ie. no cookie or connection reuse).

There is also a bug in the UI (main.c) part of this patch, for reasons out of my control, the UI thread seems to lock while a download is in progress.  The download itself will finish without error, but the browser is blocked.  Known workaround: to revive it, just hover a link.  A Gtk+ master knows what&apos;s happening here?

This patch require the latest patch in http://bugs.webkit.org/show_bug.cgi?id=16562

Reviewer&apos;s suggested checklist: 
Could we better integrate the actual download (curl) part into ResourceHandleManager?
Is the wording of the API function correct?
In WebKit/gtk/* should we use Gtk Coding styles or WebKit&apos;s?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68042</commentid>
    <comment_count>2</comment_count>
    <who name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</who>
    <bug_when>2008-01-23 10:09:56 -0800</bug_when>
    <thetext>webkitprivate.h should only contain private data that has to be shared with other files.  In this case, it should be moved to the .cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75461</commentid>
    <comment_count>3</comment_count>
    <who name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</who>
    <bug_when>2008-03-27 08:15:38 -0700</bug_when>
    <thetext>This patch might no longer have a reason to be with the introduction of a libsoup backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79891</commentid>
    <comment_count>4</comment_count>
      <attachid>21021</attachid>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-05-08 11:02:41 -0700</bug_when>
    <thetext>Created attachment 21021
File downloading

This is the same patch as before but updated to be applied to the current webkit revision.

The main problem of the patch is that it uses curl directly. How do I ask an HTTP back-end to download a file somewhere?

Another problem is that it&apos;s not gio-friendly. Probably we should add functions accepting/returning GFiles if webkit is compiled against glib 2.16+ (always the case if using the soup back-end).

Other things I would like to change:
 - I don&apos;t like error handling
 - Most things should become properties instead of having just _get_foo/_set_foo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92717</commentid>
    <comment_count>5</comment_count>
      <attachid>23795</attachid>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-09-25 07:43:12 -0700</bug_when>
    <thetext>Created attachment 23795
Add download support

Updated patch depending on the new patch for policy implementation.

Before being ready for commit we need to update the signal names after a patch for #17066 lands.

The patch was mainly tested with CURL so it could have some problem with the soup back-end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92976</commentid>
    <comment_count>6</comment_count>
      <attachid>23795</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-09-26 15:02:42 -0700</bug_when>
    <thetext>Comment on attachment 23795
Add download support

Assigning to Alp for review...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99772</commentid>
    <comment_count>7</comment_count>
    <who name="Ravi Phaneendra K">ravi.kasibhatla</who>
    <bug_when>2008-11-22 04:08:52 -0800</bug_when>
    <thetext>Marco,
I have tried the attached patch &amp; below are couple of comments from me:

1) File: WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
   Function: FrameLoaderClient::download

We are calling g_object_deref on the created WebKitWebDownload object at the end of this function itself, which would cause failure in the downloading of the file, because in most of the cases, the download would not have started or atleast completed by the end of the call. This is because, download gets underway async from this function using the main loop of the g_object. So, that deref needs to be removed. Instead, we need to move that g_object_deref() call to the else block of if(handled)-else block, since we are canceling the download in the else block. Hence, we need to free the object. 

2) File: WebKit/gtk/webkit/webkitwebdownload.cpp
   Function: webkit_web_download_class_init

Currently, we are storing the signal info for both &quot;progress-update&quot; &amp; &quot;error&quot; signals at the signal index of signal &quot;started&quot; itself. The index is needs to be changed.

3) File: WebKit/gtk/webkit/webkitwebdownload.cpp
   Function: webkit_web_download_finished_loading, webkit_web_download_error &amp; webkit_web_download_cancel

We need to deref the download object created at the time of sending signal &quot;download-created&quot;. Currently, we are not deleting the object in error &amp; cancel usecases. 

If I find any more issues, I will update. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100805</commentid>
    <comment_count>8</comment_count>
    <who name="Sung-jun, Kim">withsmilo</who>
    <bug_when>2008-11-30 23:30:00 -0800</bug_when>
    <thetext>I have tested some sites with recent patch, but I found a bug that download-created signal is automatically called when we are loading webpage having unknown MIME type.

example site:
http://media.daum.net/society/nation/seoul/view.html?cateid=100004&amp;newsid=20081201161910429&amp;p=yonhap&amp;RIGHT_COMM=R5

In this site, &apos;http://clixad.daum.net/clix_ad/Find&apos; link has unknown MIME type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103165</commentid>
    <comment_count>9</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2008-12-22 03:40:21 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; We are calling g_object_deref on the created WebKitWebDownload object at the
&gt; end of this function itself, which would cause failure in the downloading of
&gt; the file, because in most of the cases, the download would not have started or
&gt; atleast completed by the end of the call. This is because, download gets
&gt; underway async from this function using the main loop of the g_object. So, that
&gt; deref needs to be removed. Instead, we need to move that g_object_deref() call
&gt; to the else block of if(handled)-else block, since we are canceling the
&gt; download in the else block. Hence, we need to free the object. 


Yes, but I disagree with your other comments on unref&apos;ing:

&gt; 3) File: WebKit/gtk/webkit/webkitwebdownload.cpp
&gt;    Function: webkit_web_download_finished_loading, webkit_web_download_error &amp;
&gt; webkit_web_download_cancel
&gt; 
&gt; We need to deref the download object created at the time of sending signal
&gt; &quot;download-created&quot;. Currently, we are not deleting the object in error &amp; cancel
&gt; usecases. 

I believe what we might need is a default signal handler for all those that does an _unref on the object. Does that make sense?

&gt; 2) File: WebKit/gtk/webkit/webkitwebdownload.cpp
&gt;    Function: webkit_web_download_class_init
&gt; 
&gt; Currently, we are storing the signal info for both &quot;progress-update&quot; &amp; &quot;error&quot;
&gt; signals at the signal index of signal &quot;started&quot; itself. The index is needs to
&gt; be changed.

I have fixed this, will post the updated patch soonish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103167</commentid>
    <comment_count>10</comment_count>
      <attachid>26200</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2008-12-22 04:35:32 -0800</bug_when>
    <thetext>Created attachment 26200
reworked to apply on current webkit

I am attaching my unfinished work on this patch so that people are able to look at it. I believe the approach taken by the patch is flawed: the download should already be started when FrameLoadClient::download is called - it is called only as a means of letting the application know what is happening, not to perform the actual download.

I&apos;m still not positive about where the download is actually started, but I&apos;ll investigate it.

Also, we should probably implement FrameLoaderClient::startDownload and make the download item in the context menu work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107222</commentid>
    <comment_count>11</comment_count>
      <attachid>27079</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-01-27 11:37:33 -0800</bug_when>
    <thetext>Created attachment 27079
proposed patch

This patch is an evolution of (pierlux/barisione)&apos;s patch. It implements more download code paths (context menu, and policy decision for navigation action), and ports the file saving to GIO. This allows the user to save to a &apos;mounted&apos; sftp, for instance (tested! hehe).

I am not sure if there should be any kind of code dealing with mounting the &quot;volumes&quot; in this functionality, but this is an implementation detail we can work out later. There are probably other weak points, and errors - download_get_total_size seems to always return 0 on my tests, for instance. I would like to have feedback on the general idea, though.

The previous patch handled saving the downloaded content to a temporary file while the user was selecting where to save to semi-automatically. I decided to simplify this and let client applications handle this (since you can esily emulate the same functionality by using set_destination_uri).

I tried to follow our discussions on how to handle progress, replacing start/progress-update/finished signals with a single &apos;progress&apos; property.

Clearly missing functionality: download doesn&apos;t happen when you navigate (click) to unhandled mime types, such as an ISO file yet. I&apos;m still trying to figure this out.

Fire away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107276</commentid>
    <comment_count>12</comment_count>
      <attachid>27090</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-01-27 16:28:04 -0800</bug_when>
    <thetext>Created attachment 27090
simplified approach

A very simple approach to handling Downloads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107280</commentid>
    <comment_count>13</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-01-27 17:29:20 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=27079) [review]
&gt; proposed patch
&gt; 
&gt; This patch is an evolution of (pierlux/barisione)&apos;s patch. It implements more
&gt; download code paths (context menu, and policy decision for navigation action),
&gt; and ports the file saving to GIO. This allows the user to save to a &apos;mounted&apos;
&gt; sftp, for instance (tested! hehe).

That sounds great. I think if it includes an optional file chooser it would be perfect for clients that just need to handle downloading with minimal effort.

&gt; I tried to follow our discussions on how to handle progress, replacing
&gt; start/progress-update/finished signals with a single &apos;progress&apos; property.

And I like that :)

(In reply to comment #12)
&gt; Created an attachment (id=27090) [review]
&gt; simplified approach
&gt; 
&gt; A very simple approach to handling Downloads.

I very much like that simple approach, from the point of view of Midori I actually prefer it over the WebDownload. If there&apos;s a way to obtain a SoupMessage or a GFile depending on the source, that would be perfect.

Now I think both the WebDownload and the &apos;direct&apos; access are attractive depending on the use case. I tend to think WebDownload falls in the category of what could be in an extension library of libSoup, rather than tied to WebKit, we might give that some thought. In short, something that generally abstracts away GIO and libSoup could be used outside of WebKit. But I don&apos;t have a concrete idea, so for what I want, we can have both the WebDownload and the manual access.

Btw maybe call it simply WebKitDownload?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107294</commentid>
    <comment_count>14</comment_count>
    <who name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</who>
    <bug_when>2009-01-27 23:16:41 -0800</bug_when>
    <thetext>I called it WebKitWebDownload to be consistent with WebKitWebView and all, but a download is indeed web releated...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107320</commentid>
    <comment_count>15</comment_count>
      <attachid>27104</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-01-28 06:35:13 -0800</bug_when>
    <thetext>Created attachment 27104
follow-up patch

OK, so WebKitDownload; I didn&apos;t add a file chooser yet; I have an idea regarding SoupMessage/GFile/blah: after adding my patch for NetworkRequest we will be able to get the soup message from it; if we use GIO all the user needs is the URI. So I believe we could add a &quot;handler&quot; property to WebKitNetworkRequest with WEBKIT_NETWORK_REQUEST_HANDLER_{SOUP,GIO,DATA} as possible values (see ResourceHandle::start in ResourceHandleSoup.cpp).

If SOUP is the handler, you then grab the SoupMessage and keep going; if GIO, you get the URI and create your GFile and go on from there, if DATA, then you do what you like (you are probably getting some private data from your browser), the only thing you need to do to tell WebKitDownload to not handle it is return FALSE.

If you decide to let WebKitDownload handle it you only need to return TRUE when handling the download-requested signal, and you&apos;re done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107321</commentid>
    <comment_count>16</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-01-28 06:37:34 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; OK, so WebKitDownload; I didn&apos;t add a file chooser yet; I have an idea
&gt; regarding SoupMessage/GFile/blah: after adding my patch for NetworkRequest we
&gt; will be able to get the soup message from it; if we use GIO all the user needs
&gt; is the URI. So I believe we could add a &quot;handler&quot; property to
&gt; WebKitNetworkRequest with WEBKIT_NETWORK_REQUEST_HANDLER_{SOUP,GIO,DATA} as
&gt; possible values (see ResourceHandle::start in ResourceHandleSoup.cpp).

It&apos;s worth noting that by doing it this way we are making the &quot;normal&quot; page loading more powerful, and we could probably close https://bugs.webkit.org/show_bug.cgi?id=17147 too.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108456</commentid>
    <comment_count>17</comment_count>
      <attachid>27353</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-05 10:27:13 -0800</bug_when>
    <thetext>Created attachment 27353
proposed patch

I believe this patch is correct, and fits the requirements of the stakeholders I consulted. This patch allows clients wanting to handle the download themselves to retrieve the WebKitNetworkRequest and go on from there, or provides a simple interface for them to follow the download progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108543</commentid>
    <comment_count>18</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-05 15:54:38 -0800</bug_when>
    <thetext>I did a basic implementation of this in Epiphany. I figured the patch I proposed is not really ready for review while doing so (some GObject problems and some fault tolerance to investigate). Here is the epiphany bug: http://bugzilla.gnome.org/show_bug.cgi?id=570735</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109416</commentid>
    <comment_count>19</comment_count>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2009-02-11 20:09:00 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I have tested some sites with recent patch, but I found a bug that
&gt; download-created signal is automatically called when we are loading webpage
&gt; having unknown MIME type.
&gt; 
&gt; example site:
&gt; http://media.daum.net/society/nation/seoul/view.html?cateid=100004&amp;newsid=20081201161910429&amp;p=yonhap&amp;RIGHT_COMM=R5
&gt; 
&gt; In this site, &apos;http://clixad.daum.net/clix_ad/Find&apos; link has unknown MIME type.
&gt; 

Well, I didn&apos;t notice any unusual behavior on that site (possibly the error was triggered by an ad that is no longer running ?), but I have found some weird behavior on another site while testing this patch with a patched epiphany:  If you visit http://washingtonindependent.com/5517/predatory-practices, a file chooser will automatically open after the page is about 2/3 loaded. and it will offer to save a file with the suggested name &quot;?u=http%3A%2F%2Fwashingtonindependent.com%2F5517%2Fpredatory-practices&amp;r=http%3A%2F%2Fimages.google.com%2Fimgres%3Fimgurl%3Dhttp%3A%2F%2Fwww.washingtonindependent.com%2Fwp-content%2Fuploads%2F2008%2F09%2Fwolf.jpg%26imgrefurl%3Dhttp%3A%2F%2Fwashingtonindependent&quot;.  If I attempt to save this file, I end up with a 0-byte file saved to disk.  </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109534</commentid>
    <comment_count>20</comment_count>
      <attachid>27618</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-12 12:26:56 -0800</bug_when>
    <thetext>Created attachment 27618
download support and API

This is my proposed implementation for download support in WebKit/GTK+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109539</commentid>
    <comment_count>21</comment_count>
      <attachid>27621</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-12 12:35:57 -0800</bug_when>
    <thetext>Created attachment 27621
download support and API

Last patch was missing the API files. This is my proposal for download support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109551</commentid>
    <comment_count>22</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-12 13:58:06 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Last patch was missing the API files. This is my proposal for download support.
&gt; 

Here is what is different from the previous version:

This version cleans up some issues xan and I discussed on IRC, and adds tracking of elapsed time; it no longer includes the GtkLauncher test code, and includes ChangeLog entries, since I believe it is now close to getting ready for inclusion, so I&apos;m officially requesting review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109553</commentid>
    <comment_count>23</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-12 14:04:50 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Well, I didn&apos;t notice any unusual behavior on that site (possibly the error was
&gt; triggered by an ad that is no longer running ?), but I have found some weird
&gt; behavior on another site while testing this patch with a patched epiphany:  If
&gt; you visit http://washingtonindependent.com/5517/predatory-practices, a file
&gt; chooser will automatically open after the page is about 2/3 loaded. and it will
&gt; offer to save a file with the suggested name
&gt; &quot;?u=http%3A%2F%2Fwashingtonindependent.com%2F5517%2Fpredatory-practices&amp;r=http%3A%2F%2Fimages.google.com%2Fimgres%3Fimgurl%3Dhttp%3A%2F%2Fwww.washingtonindependent.com%2Fwp-content%2Fuploads%2F2008%2F09%2Fwolf.jpg%26imgrefurl%3Dhttp%3A%2F%2Fwashingtonindependent&quot;.
&gt;  If I attempt to save this file, I end up with a 0-byte file saved to disk.  

This problem is unrelated to this patch, as I understand it. This looks like a policy decision caveat being exposed by we now having download support =).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110372</commentid>
    <comment_count>24</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-02-20 02:22:53 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=27621) [review]
&gt; download support and API
&gt; 
&gt; Last patch was missing the API files. This is my proposal for download support.
&gt; 

+        Reviewed by NOBODY (OOPS!).
+
+	Make the Soup backend able to handle requests without a frame,
+	since we may have such things now that we support downloads.
+
+        * platform/network/soup/ResourceHandleSoup.cpp:
+        (WebCore::ResourceHandle::start):

Tabs vs Spaces.

+    if (handled) {
+        webkit_download_start(download);
+    }
+    else {
+        webkit_download_cancel(download);

braces? (and same thing in FrameLoaderClient::startDownload, which is almost the same code)

+    // we could reuse the same handle, but our replacing of the
+    // client seems to make this impossible; the main load fails
+    // and is stopped
+    handle-&gt;cancel();
+    startDownload(request);

Mmmm.

+    /* We don&apos;t call webkit_download_cancel() because we don&apos;t want to emit
+     * signals when finalising an object. */

s/finalising/finalizing/

+WebKitDownload* webkit_download_new(const gchar* uri)
+{
+    g_return_val_if_fail(uri, 0);
+
+    WebKitNetworkRequest* request = webkit_network_request_new(uri);
+    WebKitDownload* download = webkit_download_new_from_request(request);
+    g_object_unref(request);
+    return download;

_new functions that do something else than g_object_new (...) (or equivalent) are evil for bindings. Maybe create a property like URI_FOR_REQUEST that does this automatically?

+    WebKitDownload* download = WEBKIT_DOWNLOAD(g_object_new(WEBKIT_TYPE_DOWNLOAD, &quot;network-request&quot;, request, NULL));
+    return download;

No need for variable.

+    gboolean handled;
+    g_signal_emit_by_name(download, &quot;error&quot;, 0, WEBKIT_DOWNLOAD_ERROR_CANCELLED_BY_USER, &quot;User cancelled the download&quot;, &amp;handled);

I wonder, what happens if you do not pass a variable for the return variable? If it&apos;s OK you could miss the dummy variables in a couple of places.

+/**
+ * webkit_download_get_destination_uri:
+ * @download: the #WebKitDownload
+ * @destination_uri: the destination URI
+ *
+ * Defines the URI that should be used to save the downloaded file to.
+ *
+ * Since: 1.1.1
+ */
+void webkit_download_set_destination_uri(WebKitDownload* download, const gchar* destination_uri)

The doc says _get_destination_uri, but the function is _set_destination_uri

+        if (error) {
+            gboolean handled;
+            g_signal_emit_by_name(download, &quot;error&quot;, 0, WEBKIT_DOWNLOAD_ERROR_DESTINATION, error-&gt;message, &amp;handled);
+            g_error_free(error);
+            return;
+        }
+
+        if (downloading) {
+            if (!webkit_download_open_stream_for_uri(download, destination_uri, TRUE)) {
+                webkit_download_cancel(download);
+                return;
+            }
+        }

In these two cases you don&apos;t actually set the new destination_uri. Shouldn&apos;t you?

+ * webkit_download_get_progress:
+ * @web_view: a #WebKitDownload

s/web_view/download/ (happens in a few places)

+struct _WebKitDownload {
+    GObject parent;

parent_instance

+struct _WebKitDownloadClass {
+    GObjectClass parent;

parent_class

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111035</commentid>
    <comment_count>25</comment_count>
      <attachid>27983</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-25 14:17:05 -0800</bug_when>
    <thetext>Created attachment 27983
implements download

New patch with Xan&apos;s suggestions applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111036</commentid>
    <comment_count>26</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-25 14:20:04 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; _new functions that do something else than g_object_new (...) (or equivalent)
&gt; are evil for bindings. Maybe create a property like URI_FOR_REQUEST that does
&gt; this automatically?

Just to make clear how I addressed this: I removed the _new function, and renamed _new_from_request to be the _new function, since all it does is call g_object_new, and there is no point in making things too complex in this.

&gt; I wonder, what happens if you do not pass a variable for the return variable?
&gt; If it&apos;s OK you could miss the dummy variables in a couple of places.

In my experience not passing the boolean variable makes it crash. I&apos;ve been hit by this elsewhere.

&gt; In these two cases you don&apos;t actually set the new destination_uri. Shouldn&apos;t
&gt; you?

I am setting it now, but only emitting the signal when everything goes right. I think this is the correct approach.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111595</commentid>
    <comment_count>27</comment_count>
      <attachid>28111</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-02-27 18:46:51 -0800</bug_when>
    <thetext>Created attachment 28111
implements download and provides a nice API

changes needed because of recent commits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111868</commentid>
    <comment_count>28</comment_count>
      <attachid>28189</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-03-02 11:45:42 -0800</bug_when>
    <thetext>Created attachment 28189
proposed implementation

This work has been reviewed by almost all major WebKitGTK+ contributors, and we have a consensus on how the API should look like. This version of the patch fixes some issues raised on IRC (removes the unnecessary download_requested virtual class member in WebKitWebView, mainly) and contains some minor style convention corrections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111869</commentid>
    <comment_count>29</comment_count>
      <attachid>28190</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-03-02 11:57:44 -0800</bug_when>
    <thetext>Created attachment 28190
proposed implementation

[I am resending the patch because there were some errors in the automatic merging git did to the main changelog, and I took the opportunity to remove a rogue modification that escaped my eye]

This work has been reviewed by almost all major WebKitGTK+ contributors, and we
have a consensus on how the API should look like. This version of the patch
fixes some issues raised on IRC (removes the unnecessary download_requested
virtual class member in WebKitWebView, mainly) and contains some minor style
convention corrections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111870</commentid>
    <comment_count>30</comment_count>
      <attachid>28191</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-03-02 11:59:44 -0800</bug_when>
    <thetext>Created attachment 28191
proposed implementation

[I am resending the patch because there were some errors in the automatic
merging git did to the main changelog, and I took the opportunity to remove a
rogue modification that escaped my eye; sorry for the mess]

This work has been reviewed by almost all major WebKitGTK+ contributors, and we
have a consensus on how the API should look like. This version of the patch
fixes some issues raised on IRC (removes the unnecessary download_requested
virtual class member in WebKitWebView, mainly) and contains some minor style
convention corrections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112019</commentid>
    <comment_count>31</comment_count>
      <attachid>28191</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-03 09:51:30 -0800</bug_when>
    <thetext>Comment on attachment 28191
proposed implementation

Please add bug URL to all ChangeLogs.

+    // The frame could be null is the ResourceHandle is not associated to any
+    // Frame, i.e. if we are downloading a file.

I think that&apos;s &quot;e.g.&quot;, not &quot;i.e.&quot;

+    // we could reuse the same handle, but our replacing of the
+    // client seems to make this impossible; the main load fails
+    // and is stopped

I don&apos;t understand this comment - there is a setClient() method in ResourceHandle (and it is even used elsewhere in this patch). What is the reason that makes reusing the handle impossible?

Also, we prefer full sentences in comments (starting with a capital letter, ending with a period).

 #include &lt;webkit/webkitnetworkrequest.h&gt;
+#include &lt;webkit/webkitdownload.h&gt;

Please keep the list sorted. This problem is repeated in several files.

+extern &quot;C&quot; {
+
+class DownloadClient : Noncopyable, public ResourceHandleClient {

How can a class be extern &quot;C&quot;? There are no classes in C. I don&apos;t think extern &quot;C&quot; is ever needed in .cpp files - API methods should have it on declarations, and everything else shouldn&apos;t be exported anyway.

+    WebCore::ResourceResponse* network_response;
+    RefPtr&lt;WebCore::ResourceHandle&gt; resource_handle;

There is &quot;using namespace WebCore&quot; at the top of this file, are explicit namespaces necessary here?

+static guint webkit_download_signals[LAST_SIGNAL] = { 0, };

I don&apos;t remember the standards precisely, but this trailing comma is either forbidden or discouraged in various C dialects, please remove it.

+    PROP_TOTAL_SIZE,
+};

Same comment here.

+    if(error) {

There should be a space after if.

+    priv-&gt;timer = g_timer_new ();

But no space here.

+    /* FIXME can we have a better check? */

A FIXME like this should explain what&apos;s wrong with the current check.

+        GFile* dest = g_file_new_for_uri(destination_uri);
+        GError *error = NULL;

Misplaced star here, and NULL instead of 0.

+    } else {
+      g_free(priv-&gt;destination_uri);
+      priv-&gt;destination_uri = g_strdup(destination_uri);
+    }

Two-space indentation here.

+WebKitDownloadState webkit_download_get_state (WebKitDownload* download)

An extra space again (and in other functions below).

+    if (priv-&gt;current_size == 0) {
+        priv-&gt;state = WEBKIT_DOWNLOAD_STATE_STARTED;
+    }

There should be no braces around single line blocks.

 #include &lt;webkit/webkitwebframe.h&gt;
 #include &lt;webkit/webkitwebpolicydecision.h&gt;
 #include &lt;webkit/webkitwebnavigationaction.h&gt;
+#include &lt;webkit/webkitdownload.h&gt;
 #include &lt;webkit/webkitwebsettings.h&gt;
 #include &lt;webkit/webkitwebwindowfeatures.h&gt;
 #include &lt;webkit/webkitwebbackforwardlist.h&gt;
@@ -44,9 +45,13 @@
 #include &quot;InspectorClientGtk.h&quot;
 #include &quot;FrameLoaderClient.h&quot;
 #include &quot;WindowFeatures.h&quot;
+#include &quot;ResourceHandle.h&quot;
+#include &quot;ResourceResponse.h&quot;

Please keep include lists sorted.
There is a number of C-style casts, Ñ-style comments and NULL variables (instead of 0) in C++ files here. It is a bit of border case, as the implemented functions are very C-style in nature, but our coding style asks for C++ style in C++ files. Are C-style comments necessary for documentation generator to work properly?

A number of misplaced stars, too.

Obviously, I cannot adequately review some Gtk-specific parts of the patch, but from the above comments, they have been extensively discussed, so that&apos;s OK.

I had many comments, but they are mostly style nitpicks, so I&apos;ll say r=me anyway. Please fix as many as you can when landing, and you can even consider submitting an updated patch for another quick review round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112038</commentid>
    <comment_count>32</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-03-03 10:44:58 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; +    // we could reuse the same handle, but our replacing of the
&gt; +    // client seems to make this impossible; the main load fails
&gt; +    // and is stopped
&gt; 
&gt; I don&apos;t understand this comment - there is a setClient() method in
&gt; ResourceHandle (and it is even used elsewhere in this patch). What is the
&gt; reason that makes reusing the handle impossible?

When I tried implementing that, the load would always fail and stop, so I decided to simplify the approach. I modified the comment to make this statement instead.

&gt; How can a class be extern &quot;C&quot;? There are no classes in C. I don&apos;t think extern
&gt; &quot;C&quot; is ever needed in .cpp files - API methods should have it on declarations,
&gt; and everything else shouldn&apos;t be exported anyway.

As discussed in IRC, I am moving the extern to after the C++ class, and I submitted a bug report for us to handle this for the GTK+ port as a whole, since this is repeated in all API implementation files:

https://bugs.webkit.org/show_bug.cgi?id=24322

&gt; Misplaced star here, and NULL instead of 0.

As discussed on IRC, I will remain using NULL in API implementation because this was decided some time ago, and I have seen commits replacing 0 with NULL already.

&gt; There is a number of C-style casts, Ñ-style comments and NULL variables
&gt; (instead of 0) in C++ files here. It is a bit of border case, as the
&gt; implemented functions are very C-style in nature, but our coding style asks for
&gt; C++ style in C++ files. Are C-style comments necessary for documentation
&gt; generator to work properly?

I&apos;m fixing all of those that are not agreed GTK+ port convention. The C-style comments for the documentation generator are really necessary, with the two stars starting them, even.

&gt; A number of misplaced stars, too.

I believe you are talking mostly about webkitdownload.h here. I decided to put starts to the right side in this file because of current practice in other major public headers (webkitwebview.h and webkitwebframe.h, for instance), though there are smaller/newer files putting stars to the left side (some are mine, even). I guess I&apos;ll just keep it like it is for now, since it&apos;s following the major ones.

&gt; I had many comments, but they are mostly style nitpicks, so I&apos;ll say r=me
&gt; anyway. Please fix as many as you can when landing, and you can even consider
&gt; submitting an updated patch for another quick review round.
 
Thanks for reviewing! I am available for fixing any issues post-landing, too. I believe we will actually need a task force to clean up style in the GTK+ port =).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112059</commentid>
    <comment_count>33</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-03-03 11:54:54 -0800</bug_when>
    <thetext>Landed in r41401, with style issues fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18479</attachid>
            <date>2008-01-16 12:10:02 -0800</date>
            <delta_ts>2008-05-08 11:04:44 -0700</delta_ts>
            <desc>First attempt</desc>
            <filename>download.patch</filename>
            <type>text/plain</type>
            <size>29505</size>
            <attacher name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyw6l2
aXNpb24gMjk1MzEpCisrKyBHTlVtYWtlZmlsZS5hbQkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTIz
NCw3ICsyMzQsOCBAQAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmggXAogCVdl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAlXZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2ViZnJhbWUuaCBcCi0JV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZp
ZXcuaCAKKwlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIFwKKwlXZWJLaXQvZ3Rr
L1dlYlZpZXcvd2Via2l0d2ViZG93bmxvYWQuaAogCiB3ZWJraXRndGtfYnVpbHRfc291cmNlcyAr
PSBcCiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC1tYXJzaGFsLmggXApAQCAtMjU3LDYgKzI1
OCw3IEBACiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHNldHRpbmdzLmNwcCBcCiAJV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHdlYnZpZXcuY3BwIFwKKwlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZG93bmxvYWQu
Y3BwIFwKIAlXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgXAog
CVdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKIAlX
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwIFwKSW5kZXg6IFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShy
w6l2aXNpb24gMjk1MzEpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcAkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIu
aCIKQEAgLTY4Myw5ICs2ODUsMTYgQEAKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFt
ZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93
bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiByZXNzb3VyY2VIYW5kbGUsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViS2l0V2ViRG93bmxvYWQq
IGRvd25sb2FkID0gd2Via2l0X3dlYl9kb3dubG9hZF9uZXcocmVzc291cmNlSGFuZGxlLT5nZXRJ
bnRlcm5hbCgpLT5tX3VybCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IGdldFZpZXdGcm9t
RnJhbWUobV9mcmFtZSk7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKworICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZSh2aWV3LCAiZG93bmxvYWQtY3JlYXRlZCIsIGRvd25sb2FkLCAmaGFuZGxlZCk7
CisKKyAgICBpZiAoaGFuZGxlZCkKKyAgICAgICAgd2Via2l0X3dlYl9kb3dubG9hZF9zdGFydChk
b3dubG9hZCk7CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxl
ZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Vi
a2l0LW1hcnNoYWwubGlzdAkocsOpdmlzaW9uIDI5NTMxKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdC1tYXJzaGFsLmxpc3QJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0xLDMgKzEsNCBAQAor
Vk9JRDpWT0lECiBWT0lEOk9CSkVDVAogVk9JRDpTVFJJTkcKIFZPSUQ6U1RSSU5HLFNUUklORwpA
QCAtNSw4ICs2LDExIEBACiBWT0lEOk9CSkVDVCxTVFJJTkcKIFZPSUQ6T0JKRUNULE9CSkVDVAog
Vk9JRDpPQkpFQ1QsUE9JTlRFUixQT0lOVEVSCitWT0lEOlVJTlQsVUlOVAogQk9PTEVBTjpTVFJJ
TkcsSU5ULFNUUklORworQk9PTEVBTjpPQkpFQ1QKIEJPT0xFQU46T0JKRUNULFNUUklORwogQk9P
TEVBTjpPQkpFQ1QsU1RSSU5HLEJPT0xFQU4KIEJPT0xFQU46T0JKRUNULFNUUklORyxTVFJJTkcs
U1RSSU5HCitCT09MRUFOOklOVCxJTlQsU1RSSU5HCiBJTlQ6T0JKRUNULE9CSkVDVApJbmRleDog
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmRvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZG93bmxvYWQuY3BwCShyw6l2aXNpb24gMCkKKysr
IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJkb3dubG9hZC5jcHAJKHLDqXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0
ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAid2Via2l0LW1hcnNoYWwuaCIKKyNpbmNsdWRl
ICJ3ZWJraXR3ZWJkb3dubG9hZC5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitleHRlcm4g
IkMiIHsKKworZW51bSB7CisgICAgLyogbm9ybWFsIHNpZ25hbHMgKi8KKyAgICBTVEFSVEVELAor
ICAgIFBST0dSRVNTX1VQREFURSwKKyAgICBGSU5JU0hFRCwKKyAgICBFUlJPUiwKKyAgICBMQVNU
X1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF93ZWJfZG93bmxvYWRfc2lnbmFsc1tM
QVNUX1NJR05BTF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViRG93bmxvYWQs
IHdlYmtpdF93ZWJfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX2Rvd25sb2FkX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRX
ZWJEb3dubG9hZFByaXZhdGUqIGRvd25sb2FkUHJpdmF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIGdfZnJlZShkb3dubG9hZFByaXZhdGUtPnVyaSk7
CisgICAgZ19mcmVlKGRvd25sb2FkUHJpdmF0ZS0+ZmlsZW5hbWUpOworCisgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X3dlYl9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX2NsYXNzX2luaXQoV2ViS2l0
V2ViRG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKK3sKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJWaWV3OjpmaW5pc2hlZDoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBUaGUgZmlsZSBoYXMgYmVl
biBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Rvd25s
b2FkX3NpZ25hbHNbRklOSVNIRURdID0gZ19zaWduYWxfbmV3KCJmaW5pc2hlZCIsCisgICAgICAg
ICAgICBHX1RZUEVfRlJPTV9DTEFTUyhkb3dubG9hZENsYXNzKSwKKyAgICAgICAgICAgIChHU2ln
bmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IHdlYmtpdF9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCwK
KyAgICAgICAgICAgIEdfVFlQRV9OT05FKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZp
ZXc6OnN0YXJ0ZWQ6CisgICAgICogQGRvd25sb2FkOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBz
aWduYWwgaXMgZW1pdHRlZAorICAgICAqCisgICAgICogVGhlIGRvd25sb2FkIGhhcyBzdGFydGVk
LiAgSGFwcGVucyBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgcHJvZ3Jlc3MtdXBkYXRlIHNpZ25hbC4K
KyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NpZ25hbHNbU1RBUlRFRF0gPSBnX3Np
Z25hbF9uZXcoInN0YXJ0ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZG93bmxv
YWRDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8
IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19WT0lELAor
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDAsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSk7CisK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpwcm9ncmVzcy11cGRhdGU6CisgICAgICog
QGRvd25sb2FkOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAg
ICAqIEBjdXJyZW50X2J5dGVzOiB0aGUgY3VycmVudCBjb3VudCBvZiBieXRlcyBkb3dubG9hZGVk
CisgICAgICogQHRvdGFsX2J5dGVzOiB0aGUgdG90YWwgYnl0ZXMgY291bnQgaW4gdGhlIGRvd25s
b2FkZWQgZmlsZSwgYWthIGZpbGUgc2l6ZS4KKyAgICAgKiAgCisgICAgICogSW5kaWNhdGVzIHBy
b2dyZXNzIGluIHRoZSBkb3dubG9hZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Rvd25sb2Fk
X3NpZ25hbHNbU1RBUlRFRF0gPSBnX3NpZ25hbF9uZXcoInByb2dyZXNzLXVwZGF0ZSIsCisgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhkb3dubG9hZENsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1VJTlRfVUlOVCwKKyAgICAgICAgICAgIEdfVFlQRV9O
T05FLCAyLAorICAgICAgICAgICAgR19UWVBFX1VJTlQsCisgICAgICAgICAgICBHX1RZUEVfVUlO
VCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpwcm9ncmVzcy11cGRhdGU6Cisg
ICAgICogQGRvd25sb2FkOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqIEBjdXJyZW50X2J5dGVzOiB0aGUgY3VycmVudCBjb3VudCBvZiBieXRlcyBkb3du
bG9hZGVkCisgICAgICogQHRvdGFsX2J5dGVzOiB0aGUgdG90YWwgYnl0ZXMgY291bnQgaW4gdGhl
IGRvd25sb2FkZWQgZmlsZSwgYWthIGZpbGUgc2l6ZS4KKyAgICAgKiAgCisgICAgICogSW5kaWNh
dGVzIHByb2dyZXNzIGluIHRoZSBkb3dubG9hZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Rv
d25sb2FkX3NpZ25hbHNbU1RBUlRFRF0gPSBnX3NpZ25hbF9uZXcoImVycm9yIiwKKyAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKGRvd25sb2FkQ2xhc3MpLAorICAgICAgICAgICAgKEdTaWdu
YWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19JTlRf
SU5UX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAzLAorICAgICAgICAgICAg
R19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9JTlQsCisgICAgICAgICAgICBHX1RZUEVf
U1RSSU5HKTsKKworICAgIC8qCisgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0
aG9kcworICAgICAqLworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShkb3dubG9hZENsYXNz
LCBzaXplb2YoV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKSk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
ZG93bmxvYWRDbGFzcyktPmZpbmFsaXplID0gd2Via2l0X3dlYl9kb3dubG9hZF9maW5hbGl6ZTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9pbml0KFdlYktpdFdlYkRvd25s
b2FkKiBkb3dubG9hZCkKK3sKK30KKworV2ViS2l0V2ViRG93bmxvYWQqIHdlYmtpdF93ZWJfZG93
bmxvYWRfbmV3KGNvbnN0IGdjaGFyKiB1cmkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
dXJpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9X
RUJfRE9XTkxPQUQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9ET1dOTE9BRCwgTlVMTCkp
OworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0gV0VCS0lU
X1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICBkb3dubG9hZFByaXZh
dGUtPnVyaSA9IGdfc3RyZHVwKHVyaSk7CisgICAgZG93bmxvYWRQcml2YXRlLT5maWxlbmFtZSA9
IGdfc3RyY29uY2F0KGdfZ2V0X2hvbWVfZGlyKCksICIvIiwgYmFzZW5hbWUodXJpKSwgTlVMTCk7
CisgICAgZG93bmxvYWRQcml2YXRlLT50b3RhbF9ieXRlcyA9IDA7CisgICAgZG93bmxvYWRQcml2
YXRlLT5jdXJyZW50X2J5dGVzID0gMDsKKyAgICBkb3dubG9hZFByaXZhdGUtPnN0YXRlID0gV0VC
S0lUX1dFQl9ET1dOTE9BRF9TVEFURV9DUkVBVEVEOworCisgICAgcmV0dXJuIGRvd25sb2FkOwor
fQorCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfdXJpKFdlYktpdFdlYkRv
d25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9hZFBy
aXZhdGUqIGRvd25sb2FkUHJpdmF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUo
ZG93bmxvYWQpOworICAgIHJldHVybiBkb3dubG9hZFByaXZhdGUtPnVyaTsKK30KKworc3RhdGlj
IGludCB3ZWJraXRfd2ViX2Rvd25sb2FkX3Byb2dyZXNzX2NhbGxfYmFjayhXZWJLaXRXZWJEb3du
bG9hZCAqZG93bmxvYWQsIGRvdWJsZSB0b3RhbF9ieXRlcywgZG91YmxlIGN1cnJlbnRfYnl0ZXMs
IGRvdWJsZSB1bHRvdGFsLCBkb3VibGUgdWxub3cpCit7ICAgCisgICAgLy8gVGhpcyBjYWxsIGJh
Y2sgaXMgY2FsbGVkIHdheSB0b28gb2Z0ZW4sIGl0IGNvdWxkIGZpbGwgdGhlIG1haW4gbG9vcCBt
ZXNzYWdlIHF1ZXVlIGlmIHlvdSBzZW5kIHRoZW0gYWxsCisgICAgLy8gYnV0IHdlIHdhbnQgdG8g
c2VuZCB0aGUgZmlyc3QgYW5kIGxhc3QKKyAgICBzdGF0aWMgaW50IHJlcGVhdCA9IDA7CisgICAg
aWYgKHJlcGVhdCsrICUgNTAgPT0gMCB8fCBjdXJyZW50X2J5dGVzID09IHRvdGFsX2J5dGVzKSB7
CisgICAgICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0gV0VC
S0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICAgICAgaWYgKGRv
d25sb2FkUHJpdmF0ZS0+dG90YWxfYnl0ZXMgPT0gMCkgeyAgICAKKyAgICAgICAgICAgIGRvd25s
b2FkUHJpdmF0ZS0+c3RhdGUgPSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX1NUQVJURUQ7Cisg
ICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJzdGFydGVkIik7Cisg
ICAgICAgIH0KKworICAgICAgICBkb3dubG9hZFByaXZhdGUtPnRvdGFsX2J5dGVzID0gKGd1aW50
KXRvdGFsX2J5dGVzOworICAgICAgICBkb3dubG9hZFByaXZhdGUtPmN1cnJlbnRfYnl0ZXMgPSAo
Z3VpbnQpY3VycmVudF9ieXRlczsKKyAgICAKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KGRvd25sb2FkLCAicHJvZ3Jlc3MtdXBkYXRlIiwgKGd1aW50KWN1cnJlbnRfYnl0ZXMsIChndWlu
dCl0b3RhbF9ieXRlcyApOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCAqd2Via2l0
X3dlYl9kb3dubG9hZF90aHJlYWQodm9pZCogZGF0YSkKK3sgICAKKyAgICBXZWJLaXRXZWJEb3du
bG9hZCogZG93bmxvYWQgPSBXRUJLSVRfV0VCX0RPV05MT0FEKGRhdGEpOworICAgIFdlYktpdFdl
YkRvd25sb2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9H
RVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICBDVVJMY29kZSByZXM7CisgICAgRklMRSogb3V0
X2ZpbGU7CisgICAgZ2NoYXIqIGVycm9yID0gTlVMTDsKKyAgICBnY2hhciogdXJsID0gZG93bmxv
YWRQcml2YXRlLT51cmk7CisgICAgZ2NoYXIqIGZpbGUgPSBkb3dubG9hZFByaXZhdGUtPmZpbGVu
YW1lOworCisgICAgZG93bmxvYWRQcml2YXRlLT5oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwor
ICAgIGlmIChkb3dubG9hZFByaXZhdGUtPmhhbmRsZSkgeworICAgICAgICBvdXRfZmlsZSA9IGZv
cGVuKGZpbGUsICJ3Iik7CisKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkb3dubG9hZFByaXZh
dGUtPmhhbmRsZSwgQ1VSTE9QVF9VUkwsIHVybCk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZG93bmxvYWRQcml2YXRlLT5oYW5kbGUsIENVUkxPUFRfV1JJVEVEQVRBLCBvdXRfZmlsZSk7Cisg
ICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZG93bmxvYWRQcml2YXRlLT5oYW5kbGUsIENVUkxPUFRf
Tk9QUk9HUkVTUywgRkFMU0UpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGRvd25sb2FkUHJp
dmF0ZS0+aGFuZGxlLCBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04sIHdlYmtpdF93ZWJfZG93bmxv
YWRfcHJvZ3Jlc3NfY2FsbF9iYWNrKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkb3dubG9h
ZFByaXZhdGUtPmhhbmRsZSwgQ1VSTE9QVF9QUk9HUkVTU0RBVEEsIGRvd25sb2FkKTsKKyAgICAg
ICAgY3VybF9lYXN5X3NldG9wdChkb3dubG9hZFByaXZhdGUtPmhhbmRsZSwgQ1VSTE9QVF9GT0xM
T1dMT0NBVElPTiwgMSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZG93bmxvYWRQcml2YXRl
LT5oYW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCAxMCk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQoZG93bmxvYWRQcml2YXRlLT5oYW5kbGUsIENVUkxPUFRfRVJST1JCVUZGRVIsIGVycm9yKTsK
KworICAgICAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShkb3dubG9hZFByaXZhdGUtPmhhbmRs
ZSk7CisgICAgICAgIGlmICghcmVzKSB7CisgICAgICAgICAgICBkb3dubG9hZFByaXZhdGUtPnN0
YXRlID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRDsKKyAgICAgICAgICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImZpbmlzaGVkIik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBkb3dubG9hZFByaXZhdGUtPnN0YXRlID0gV0VCS0lUX1dFQl9ET1dO
TE9BRF9TVEFURV9FUlJPUjsKKyAgICAgICAgICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgICAg
ICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9X
RUJfRE9XTkxPQURfRVJST1JfTkVUV09SSywgZXJyb3IsICZoYW5kbGVkKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZjbG9zZShvdXRfZmlsZSk7CisKKyAgICAgICAgY3VybF9lYXN5X2NsZWFudXAo
ZG93bmxvYWRQcml2YXRlLT5oYW5kbGUpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQor
Cit2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfc3RhcnQoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25s
b2FkKQoreyAgICAKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQo
ZG93bmxvYWQpKTsKKworICAgIGlmICghZ190aHJlYWRfY3JlYXRlKCZ3ZWJraXRfd2ViX2Rvd25s
b2FkX3RocmVhZCwgKCh2b2lkKilkb3dubG9hZCksIEZBTFNFLCBOVUxMKSAhPSAwKQorICAgICAg
ICBnX3dhcm5pbmcoImNhbid0IGNyZWF0ZSB0aGUgZG93bmxvYWQgdGhyZWFkIik7Cit9CisKK3Zv
aWQgd2Via2l0X3dlYl9kb3dubG9hZF9jYW5jZWwgKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9h
ZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQoZG93bmxv
YWQpKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0g
V0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgZG93bmxvYWRQ
cml2YXRlLT5zdGF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVEOworCisg
ICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQs
ICJlcnJvciIsIDAsIFdFQktJVF9XRUJfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIs
ICJVc2VyIGNhbmNlbGxlZCB0aGUgZG93bmxvYWQiLCAmaGFuZGxlZCk7CisKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfZmls
ZW5hbWUoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreyAgIAorICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAg
IFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0gV0VCS0lUX1dFQl9E
T1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIGRvd25sb2FkUHJpdmF0
ZS0+ZmlsZW5hbWU7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9zZXRfZmlsZW5hbWUg
KFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIGZpbGVuYW1lKQoreyAg
IAorICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChkb3dubG9hZCkp
OworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBkb3dubG9hZFByaXZhdGUgPSBXRUJL
SVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBpZiAoZG93bmxvYWRQ
cml2YXRlLT50b3RhbF9ieXRlcyA9PSAwKQorICAgICAgICBkb3dubG9hZFByaXZhdGUtPmZpbGVu
YW1lID0gZ19zdHJkdXAoZmlsZW5hbWUpOworfQorCitXZWJLaXRXZWJEb3dubG9hZFN0YXRlIHdl
YmtpdF93ZWJfZG93bmxvYWRfZ2V0X3N0YXRlIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChkb3du
bG9hZCksIFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfRVJST1IpOworICAgIAorICAgIFdlYktp
dFdlYkRvd25sb2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0gV0VCS0lUX1dFQl9ET1dOTE9B
RF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIGRvd25sb2FkUHJpdmF0ZS0+c3Rh
dGU7Cit9CisKK2d1aW50IHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3NpemUgKFdlYktpdFdlYkRv
d25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX0RPV05MT0FEKGRvd25sb2FkKSwgMCk7CisgICAgCisgICAgV2ViS2l0V2ViRG93bmxvYWRQ
cml2YXRlKiBkb3dubG9hZFByaXZhdGUgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRF
KGRvd25sb2FkKTsKKyAgICByZXR1cm4gZG93bmxvYWRQcml2YXRlLT50b3RhbF9ieXRlczsKK30K
KworZ3VpbnQgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplIChXZWJLaXRXZWJE
b3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9ET1dOTE9BRChkb3dubG9hZCksIDApOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2
YXRlKiBkb3dubG9hZFByaXZhdGUgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRv
d25sb2FkKTsKKyAgICByZXR1cm4gZG93bmxvYWRQcml2YXRlLT5jdXJyZW50X2J5dGVzOworICAg
IAorfQorCit9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCShyw6l2aXNp
b24gMjk1MzEpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAJKGNvcGll
IGRlIHRyYXZhaWwpCkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNyBDaHJp
c3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEs
NiArMjIsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJ3ZWJraXR3ZWJk
b3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXQt
bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKQEAgLTc3LDYgKzc5LDcgQEAK
ICAgICBDT1BZX0NMSVBCT0FSRCwKICAgICBQQVNURV9DTElQQk9BUkQsCiAgICAgQ1VUX0NMSVBC
T0FSRCwKKyAgICBET1dOTE9BRF9DUkVBVEVELAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC01
NTMsNiArNTU2LDEzIEBACiAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJQYXN0ZSIpLmV4
ZWN1dGUoKTsKIH0KIAorc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX2Rvd25s
b2FkX2NyZWF0ZWQoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkRvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7ICAK
KyAgICAvLyBSZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUgaXQgd2Fzbid0IGhhbmRsZWQgdGhlcmVm
b3JlIHRoZSBkb3dubG9hZCBpcyBkZWxldGVkCisgICAgcmV0dXJuIEZBTFNFOworfQorCiBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewogICAg
IHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwpA
QCAtNjMxLDYgKzY0MSwyNCBAQAogICAgICAgICAgICAgR19UWVBFX1BPSU5URVIsCiAgICAgICAg
ICAgICBHX1RZUEVfUE9JTlRFUik7CiAKKyAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6
ZG93bmxvYWQtY3JlYXRlZDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2gg
dGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGRvd25sb2FkOiB0aGUgbWVzc2FnZSB0ZXh0
CisgICAgICogQHJldHVybjogVFJVRSBpZiB0aGUgZG93bmxvYWQgd2FzIGhhbmRsZWQsIG90aGVy
d2lzZSBpdCdsbCBiZSBjYW5jZWxsZWQuCisgICAgICoKKyAgICAgKiBBIG5ldyBEb3dubG9hZCBo
YXMgYmVlbiBjcmVhdGVkCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbRE9X
TkxPQURfQ1JFQVRFRF0gPSBnX3NpZ25hbF9uZXcoImRvd25sb2FkLWNyZWF0ZWQiLAorICAgICAg
ICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2ln
bmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAg
ICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGRvd25sb2FkX2NyZWF0ZWQp
LAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAg
ICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwK
KyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgR19UWVBFX09CSkVD
VCk7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXN0YXJ0ZWQ6CiAgICAg
ICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApA
QCAtOTEyLDYgKzk0MCw3IEBACiAgICAgd2ViVmlld0NsYXNzLT5jdXRfY2xpcGJvYXJkID0gd2Vi
a2l0X3dlYl92aWV3X3JlYWxfY3V0X2NsaXBib2FyZDsKICAgICB3ZWJWaWV3Q2xhc3MtPmNvcHlf
Y2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY29weV9jbGlwYm9hcmQ7CiAgICAgd2Vi
Vmlld0NsYXNzLT5wYXN0ZV9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9wYXN0ZV9j
bGlwYm9hcmQ7CisgICAgd2ViVmlld0NsYXNzLT5kb3dubG9hZF9jcmVhdGVkID0gd2Via2l0X3dl
Yl92aWV3X3JlYWxfZG93bmxvYWRfY3JlYXRlZDsKIAogICAgIEdPYmplY3RDbGFzcyogb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpOwogICAgIG9iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZTsKSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJkb3dubG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJkb3dubG9hZC5oCShyw6l2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJkb3dubG9hZC5oCShyw6l2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV0VCS0lUX1dFQl9ET1dOTE9BRF9ICisjZGVmaW5lIFdFQktJVF9XRUJfRE9X
TkxPQURfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworI2luY2x1ZGUgIndlYmtpdGRl
ZmluZXMuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9ET1dO
TE9BRCAgICAgICAgICAgICh3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9XRUJfRE9XTkxPQUQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBXZWJLaXRXZWJEb3dubG9h
ZCkpCisjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQURfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBXZWJL
aXRXZWJEb3dubG9hZENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9X
RUJfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0RPV05MT0FEX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9ET1dO
TE9BRCkpCisjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBX
ZWJLaXRXZWJEb3dubG9hZENsYXNzKSkKKwordHlwZWRlZiBlbnVtIHsgICAgCisgICAgV0VCS0lU
X1dFQl9ET1dOTE9BRF9TVEFURV9FUlJPUiA9IC0xLAorICAgIFdFQktJVF9XRUJfRE9XTkxPQURf
U1RBVEVfQ1JFQVRFRCA9IDAsCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9TVEFSVEVE
LAorICAgIFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVELAorICAgIFdFQktJVF9X
RUJfRE9XTkxPQURfU1RBVEVfRklOSVNIRUQKK30gV2ViS2l0V2ViRG93bmxvYWRTdGF0ZTsKKwor
dHlwZWRlZiBlbnVtIHsgICAgCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9DQU5DRUxM
RURfQllfVVNFUiwKKyAgICBXRUJLSVRfV0VCX0RPV05MT0FEX0VSUk9SX05FVFdPUksKK30gV2Vi
S2l0V2ViRG93bmxvYWRFcnJvcjsKKworc3RydWN0IF9XZWJLaXRXZWJEb3dubG9hZCB7CisgICAg
R09iamVjdCBwYXJlbnQgIDsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViRG93bmxvYWRDbGFzcyB7
CisgICAgR09iamVjdENsYXNzIHBhcmVudDsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF93ZWJfZG93bmxvYWRfZ2V0X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkRv
d25sb2FkKiAKK3dlYmtpdF93ZWJfZG93bmxvYWRfbmV3KGNvbnN0IGdjaGFyKiB1cmkpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZG93bmxvYWRfc3RhcnQoV2ViS2l0V2ViRG93bmxv
YWQqKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF93ZWJfZG93bmxvYWRfZ2V0
X3VyaSAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBn
Y2hhcioKK3dlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X2ZpbGVuYW1lIChXZWJLaXRXZWJEb3dubG9h
ZCogZG93bmxvYWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZG93bmxvYWRfc2V0
X2ZpbGVuYW1lIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBmaWxl
bmFtZSk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3NpemUg
KFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtp
dF93ZWJfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZSAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25s
b2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2Rvd25sb2FkX2NhbmNlbCAoV2Vi
S2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJEb3dubG9h
ZFN0YXRlCit3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9zdGF0ZSAoV2ViS2l0V2ViRG93bmxvYWQq
IGRvd25sb2FkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2Vidmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJ2aWV3LmgJKHLDqXZpc2lvbiAyOTUzMSkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJ2aWV3LmgJKGNvcGllIGRlIHRyYXZhaWwpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC03Nyw2ICs3OCw3IEBACiAgICAgdm9pZCAoKmN1dF9jbGlwYm9hcmQp
IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAgICAgdm9pZCAoKmNvcHlfY2xpcGJvYXJkKSAo
V2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogICAgIHZvaWQgKCpwYXN0ZV9jbGlwYm9hcmQpIChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisgICAgZ2Jvb2xlYW4gKCpkb3dubG9hZF9jcmVhdGVk
KSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkRvd25sb2FkICogZG93bmxvYWQp
OwogCiAgICAgLyoKICAgICAgKiBpbnRlcm5hbApJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJp
dmF0ZS5oCShyw6l2aXNpb24gMjk1MzEpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJp
dmF0ZS5oCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI2LDE2ICsyNywyMCBAQAogICogVGhleSBhcmUgdXNpbmcgV2ViQ29yZSB3aGlj
aCBtdXNuJ3QgYmUgZXhwb3NlZCB0byB0aGUgb3V0ZXIgd29ybGQuCiAgKi8KIAorI2luY2x1ZGUg
PGN1cmwvY3VybC5oPgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorCiAj
aW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0
LmgiCiAjaW5jbHVkZSAid2Via2l0c2V0dGluZ3MuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJkb3du
bG9hZC5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vi
dmlldy5oIgotI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCi0jaW5jbHVkZSAid2Via2l0bmV0
d29ya3JlcXVlc3QuaCIKIAotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgdm9pZCBhcHBseShXZWJLaXRTZXR0aW5ncyosV2ViQ29y
ZTo6U2V0dGluZ3MqKTsKQEAgLTg3LDYgKzkyLDE3IEBACiAgICAgICAgIGdjaGFyKiB1cmk7CiAg
ICAgfTsKIAorICAgICNkZWZpbmUgV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShvYmop
ICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9E
T1dOTE9BRCwgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKSkKKyAgICB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViRG93bmxvYWRQcml2YXRlIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZTsKKyAgICBz
dHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSB7CisgICAgICAgIENVUkwqIGhhbmRsZTsK
KyAgICAgICAgZ2NoYXIqIGZpbGVuYW1lOworICAgICAgICBnY2hhciogdXJpOworICAgICAgICBn
dWludCB0b3RhbF9ieXRlczsKKyAgICAgICAgZ3VpbnQgY3VycmVudF9ieXRlczsKKyAgICAgICAg
V2ViS2l0V2ViRG93bmxvYWRTdGF0ZSBzdGF0ZTsKKyAgICB9OworCiAgICAgI2RlZmluZSBXRUJL
SVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCBXZWJLaXROZXR3
b3JrUmVxdWVzdFByaXZhdGUpKQogICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXROZXR3b3JrUmVx
dWVzdFByaXZhdGUgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlOwogICAgIHN0cnVjdCBfV2Vi
S2l0TmV0d29ya1JlcXVlc3RQcml2YXRlIHsKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXRkZWZpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmlu
ZXMuaAkocsOpdmlzaW9uIDI5NTMxKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmlu
ZXMuaAkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC00Nyw2ICs0OCw5IEBACiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVl
c3QgV2ViS2l0TmV0d29ya1JlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1Jl
cXVlc3RDbGFzcyBXZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViRG93bmxvYWQgV2ViS2l0V2ViRG93bmxvYWQ7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0V2ViRG93bmxvYWRDbGFzcyBXZWJLaXRXZWJEb3dubG9hZENsYXNzOworCiBHX0VORF9ERUNM
UwogCiAjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmgJKHLDqXZpc2lvbiAyOTUzMSkKKysrIFdl
YktpdC9ndGsvV2ViVmlldy93ZWJraXQuaAkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDx3
ZWJraXRkZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXR3ZWJkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdHdlYmZyYW1lLmg+CiAj
aW5jbHVkZSA8d2Via2l0d2Vidmlldy5oPgogCkluZGV4OiBXZWJLaXRUb29scy9HdGtMYXVuY2hl
ci9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCShy
w6l2aXNpb24gMjk1MzEpCisrKyBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMJKGNvcGll
IGRlIHRyYXZhaWwpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDcgKzI1
LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgog
I2luY2x1ZGUgPHdlYmtpdC5oPgogCiBzdGF0aWMgR3RrV2lkZ2V0KiBtYWluX3dpbmRvdzsKQEAg
LTY0LDYgKzY4LDE1IEBACiAgICAgICAgIGd0a19zdGF0dXNiYXJfcHVzaCAobWFpbl9zdGF0dXNi
YXIsIHN0YXR1c19jb250ZXh0X2lkLCBsaW5rKTsKIH0KIAorc3RhdGljIFdlYktpdFBvbGljeVJl
c3BvbnNlIAorbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWQoV2ViS2l0V2ViVmll
dyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVx
dWVzdCwgY29uc3QgZ2NoYXIqIG1pbWVfdHlwZSkKK3sKKyAgICBpZih3ZWJraXRfd2ViX3ZpZXdf
Y2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpCisgICAgICAgIHJldHVybiBXRUJL
SVRfUE9MSUNZX1JFU1BPTlNFX0FDQ0VQVDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXRUJL
SVRfUE9MSUNZX1JFU1BPTlNFX0RPV05MT0FEOworfQorCiBzdGF0aWMgdm9pZAogdGl0bGVfY2hh
bmdlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFt
ZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBncG9pbnRlciBkYXRhKQogewpAQCAtMTA2LDYgKzExOSw5
OCBAQAogICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkICh3ZWJfdmlldyk7CiB9CiAKK3N0
YXRpYyB2b2lkCitkb3dubG9hZF9lcnJvcl9jYiAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2Fk
LCBndWludCBkb21haW4sIFdlYktpdFdlYkRvd25sb2FkRXJyb3IgZXJyb3IsIGNvbnN0IGdjaGFy
ICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX3dhcm5pbmcoIkRvd25sb2FkIEVy
cm9yOiAlc1xuIiwgbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkCitkb3dubG9hZF9maW5pc2hl
ZF9jYiAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBncG9pbnRlciBkYXRhKQoreworICAg
IGd0a19idXR0b25fc2V0X2xhYmVsKEdUS19CVVRUT04oZGF0YSksIEdUS19TVE9DS19DTE9TRSk7
Cit9CisKK3N0YXRpYyB2b2lkCitkb3dubG9hZF9wcm9ncmVzc19jYiAoV2ViS2l0V2ViRG93bmxv
YWQqIGRvd25sb2FkLCBndWludCBjdXJyZW50X2J5dGVzLCBndWludCB0b3RhbF9ieXRlcywgZ3Bv
aW50ZXIgcHJvZ3Jlc3NfYmFyKQoreworICAgIGlmKEdUS19JU19QUk9HUkVTU19CQVIocHJvZ3Jl
c3NfYmFyKSkKKyAgICB7CisgICAgICAgIGdka190aHJlYWRzX2VudGVyKCk7CisgICAgICAgIGdk
b3VibGUgcHJvZ3Jlc3MgPSAoZG91YmxlKWN1cnJlbnRfYnl0ZXMvdG90YWxfYnl0ZXM7CisgICAg
ICAgIGd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jl
c3NfYmFyKSwgcHJvZ3Jlc3MpOworICAgICAgICBnZGtfdGhyZWFkc19sZWF2ZSgpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQKK2Rvd25sb2FkX2J1dHRvbl9jYiAoR3RrQnV0dG9uKiBidXR0b24s
IGdwb2ludGVyIGRvd25sb2FkKQoreworICAgIGlmICh3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9z
dGF0ZShkb3dubG9hZCkgPT0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRCkgewor
ICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3co
R1RLX1dJREdFVChidXR0b24pKTsKKyAgICAgICAgZ2RrX3dpbmRvd19oaWRlKHdpbmRvdyk7Cisg
ICAgfSBlbHNlIAorICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZG93bmxvYWRfY3JlYXRlZF9jYiAoV2ViS2l0V2ViVmll
dyogdmlldywgV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBncG9pbnRlciBkYXRhKQorewor
ICAgIGdib29sZWFuIGhhbmRsZWQgPSBUUlVFOworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3Rr
X3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a193aW5kb3dfc2V0X3Rp
dGxlKEdUS19XSU5ET1cod2luZG93KSwgIkRvd25sb2FkIik7CisgICAgCisgICAgR3RrV2lkZ2V0
KiB2Ym94ID0gZ3RrX3Zib3hfbmV3KFRSVUUsIDApOworICAgIGd0a19jb250YWluZXJfc2V0X2Jv
cmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKHZib3gpLCA1KTsKKyAgICAKKyAgICBHdGtXaWRnZXQq
IHVyaV9sYWJlbCA9IGd0a19sYWJlbF9uZXcoTlVMTCk7CisgICAgZ3RrX2xhYmVsX3NldF9zaW5n
bGVfbGluZV9tb2RlKEdUS19MQUJFTCh1cmlfbGFiZWwpLCBGQUxTRSk7CisgICAgZ3RrX2xhYmVs
X3NldF9tYXJrdXAoR1RLX0xBQkVMKHVyaV9sYWJlbCksIAorICAgICAgICBnX3N0cmNvbmNhdCgi
PGI+VVJJOjwvYj4gIiwgCisgICAgICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF91cmko
ZG93bmxvYWQpLCAKKyAgICAgICAgICAgICJcbjxiPkZpbGVuYW1lOjwvYj4gIiwKKyAgICAgICAg
ICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X2ZpbGVuYW1lKGRvd25sb2FkKSwKKyAgICAgICAg
ICAgIE5VTEwpCisgICAgICAgICk7CisgICAgZ3RrX2xhYmVsX3NldF9qdXN0aWZ5KEdUS19MQUJF
TCh1cmlfbGFiZWwpLCBHVEtfSlVTVElGWV9MRUZUKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQo
R1RLX0JPWCh2Ym94KSwgdXJpX2xhYmVsLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgR3RrV2lk
Z2V0KiBwcm9ncmVzc19iYXIgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOyAgICAgICAgIAorICAg
IGd0a19wcm9ncmVzc19iYXJfc2V0X29yaWVudGF0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jl
c3NfYmFyKSwgR1RLX1BST0dSRVNTX0xFRlRfVE9fUklHSFQpOworICAgIGd0a19wcm9ncmVzc19i
YXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3NfYmFyKSwgMC4wKTsgCisg
ICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHByb2dyZXNzX2JhciwgRkFMU0Us
IEZBTFNFLCAwKTsKKworICAgIEd0a1dpZGdldCogYnV0dG9uX2JveCA9IGd0a19oYnV0dG9uX2Jv
eF9uZXcoKTsKKyAgICBndGtfYnV0dG9uX2JveF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGJ1
dHRvbl9ib3gpLCBHVEtfQlVUVE9OQk9YX0VORCk7CisgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBn
dGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19DQU5DRUwpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QgKEdfT0JKRUNUIChidXR0b24pLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGRvd25s
b2FkX2J1dHRvbl9jYiksIGRvd25sb2FkKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WChidXR0b25fYm94KSwgYnV0dG9uLCBGQUxTRSwgRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFj
a19zdGFydChHVEtfQk9YKHZib3gpLCBidXR0b25fYm94LCBGQUxTRSwgRkFMU0UsIDApOworICAg
IAorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7Cisg
ICAgCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChHVEtfV0lER0VUKHdpbmRvdykpOworICAgIAor
ICAgIEd0a1dpZGdldCogZmlsZV9jaG9vc2VyID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3
KCJTZWxlY3QgZGVzdGluYXRpb24uLi4iLCBHVEtfV0lORE9XKHdpbmRvdyksIEdUS19GSUxFX0NI
T09TRVJfQUNUSU9OX1NBVkUsIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUws
IEdUS19TVE9DS19TQVZFLCBHVEtfUkVTUE9OU0VfT0ssIE5VTEwpOworICAgIGNvbnN0IGNoYXIq
IHRlbXBfZmlsZW5hbWUgPSB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9maWxlbmFtZShkb3dubG9h
ZCk7CisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZmlsZW5hbWUgKEdUS19GSUxFX0NIT09TRVIg
KGZpbGVfY2hvb3NlciksIHRlbXBfZmlsZW5hbWUpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0
X2N1cnJlbnRfbmFtZSAoR1RLX0ZJTEVfQ0hPT1NFUiAoZmlsZV9jaG9vc2VyKSwgYmFzZW5hbWUo
dGVtcF9maWxlbmFtZSkpOworCisgICAgaWYgKGd0a19kaWFsb2dfcnVuIChHVEtfRElBTE9HIChm
aWxlX2Nob29zZXIpKSA9PSBHVEtfUkVTUE9OU0VfT0spIHsKKyAgICAgICAgd2Via2l0X3dlYl9k
b3dubG9hZF9zZXRfZmlsZW5hbWUoZG93bmxvYWQsIGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVu
YW1lIChHVEtfRklMRV9DSE9PU0VSIChmaWxlX2Nob29zZXIpKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZ3RrX3dpZGdldF9kZXN0cm95ICh3aW5kb3cpOworICAgICAgICBoYW5kbGVkID0gRkFM
U0U7CisgICAgfQorICAgIGd0a193aWRnZXRfZGVzdHJveSAoZmlsZV9jaG9vc2VyKTsKKyAgICAg
IAorICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChkb3dubG9hZCksICJmaW5pc2hlZCIs
IEdfQ0FMTEJBQ0sgKGRvd25sb2FkX2ZpbmlzaGVkX2NiKSwgYnV0dG9uKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0IChHX09CSkVDVCAoZG93bmxvYWQpLCAicHJvZ3Jlc3MtdXBkYXRlIiwgR19DQUxM
QkFDSyAoZG93bmxvYWRfcHJvZ3Jlc3NfY2IpLCBwcm9ncmVzc19iYXIpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QgKEdfT0JKRUNUIChkb3dubG9hZCksICJlcnJvciIsIEdfQ0FMTEJBQ0sgKGRvd25s
b2FkX2Vycm9yX2NiKSwgd2luZG93KTsKKworICAgIHJldHVybiBoYW5kbGVkOworfQorCiBzdGF0
aWMgR3RrV2lkZ2V0KgogY3JlYXRlX2Jyb3dzZXIgKCkKIHsKQEAgLTExOSw2ICsyMjQsOCBAQAog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJsb2FkLXByb2dyZXNz
LWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9ncmVzc19jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7CiAg
ICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtY29tbWl0dGVk
IiwgR19DQUxMQkFDSyAobG9hZF9jb21taXRfY2IpLCB3ZWJfdmlldyk7CiAgICAgZ19zaWduYWxf
Y29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FM
TEJBQ0sgKGxpbmtfaG92ZXJfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAo
R19PQkpFQ1QgKHdlYl92aWV3KSwgIm1pbWUtdHlwZS1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVk
IiwgR19DQUxMQkFDSyAobWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWQpLCB3ZWJf
dmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImRvd25s
b2FkLWNyZWF0ZWQiLCBHX0NBTExCQUNLIChkb3dubG9hZF9jcmVhdGVkX2NiKSwgd2ViX3ZpZXcp
OwogCiAgICAgcmV0dXJuIHNjcm9sbGVkX3dpbmRvdzsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21021</attachid>
            <date>2008-05-08 11:02:41 -0700</date>
            <delta_ts>2008-05-08 11:04:54 -0700</delta_ts>
            <desc>File downloading</desc>
            <filename>download.patch</filename>
            <type>text/plain</type>
            <size>28177</size>
            <attacher name="Marco Barisione">marco.barisione</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNzI0MDQx
OS4uZjBmNDQ2OCAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTI5Niw2ICsyOTYsNyBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnBvbGljeWRlY2lzaW9uLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRp
bmdzLmggXAorIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5oIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKIAogd2Via2l0Z3RrX2J1aWx0X3NvdXJjZXMg
Kz0gXApAQCAtMzIwLDYgKzMyMSw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vic2V0dGluZ3MuY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5j
cHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIFwKIAlXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgXAogCVdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggYmQ1M2JhZS4uNDc1
YmUwNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNzIzLDkgKzcyNSwx
NiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJl
c291cmNlRXJyb3ImKQogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1k
b25lIiwgZmFsc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZChSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93
bmxvYWQoUmVzb3VyY2VIYW5kbGUqIHJlc3NvdXJjZUhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQg
PSB3ZWJraXRfd2ViX2Rvd25sb2FkX25ldyhyZXNzb3VyY2VIYW5kbGUtPmdldEludGVybmFsKCkt
Pm1fdXJsKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2Zy
YW1lKTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworCisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KHZpZXcsICJkb3dubG9hZC1jcmVhdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAgIGlm
IChoYW5kbGVkKQorICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3N0YXJ0KGRvd25sb2FkKTsK
IH0KIAogUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2FuY2VsbGVkRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JikKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dC1tYXJzaGFsLmxpc3QgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQtbWFyc2hhbC5saXN0Cmlu
ZGV4IGE0OTgyYmIuLmRlYjlhMjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dC1tYXJzaGFsLmxpc3QKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LW1hcnNoYWwubGlz
dApAQCAtMSwzICsxLDQgQEAKK1ZPSUQ6Vk9JRAogVk9JRDpPQkpFQ1QKIFZPSUQ6U1RSSU5HCiBW
T0lEOlNUUklORyxTVFJJTkcKQEAgLTUsOSArNiwxMiBAQCBWT0lEOk9CSkVDVCxCT09MRUFOCiBW
T0lEOk9CSkVDVCxTVFJJTkcKIFZPSUQ6T0JKRUNULE9CSkVDVAogVk9JRDpPQkpFQ1QsUE9JTlRF
UixQT0lOVEVSCitWT0lEOlVJTlQsVUlOVAogQk9PTEVBTjpTVFJJTkcsSU5ULFNUUklORworQk9P
TEVBTjpPQkpFQ1QKIEJPT0xFQU46T0JKRUNULFNUUklORwogQk9PTEVBTjpPQkpFQ1QsU1RSSU5H
LEJPT0xFQU4KIEJPT0xFQU46T0JKRUNULFNUUklORyxTVFJJTkcsU1RSSU5HCiBCT09MRUFOOk9C
SkVDVCxPQkpFQ1QsU1RSSU5HLE9CSkVDVAogQk9PTEVBTjpPQkpFQ1QsT0JKRUNULEJPWEVELE9C
SkVDVAorQk9PTEVBTjpJTlQsSU5ULFNUUklORwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRleCBkNzA2MjFhLi45
MjE2MWQyIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAorKysgYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdGRlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVl
c3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGlu
Z3MuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZGVmaW5lcy5oCmluZGV4IDk2OTk3NDMuLmQ3MGQ4ZWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZp
bmVzLmgKQEAgLTYyLDYgKzYyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNldHRpbmdz
Q2xhc3MgV2ViS2l0V2ViU2V0dGluZ3NDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJW
aWV3IFdlYktpdFdlYlZpZXc7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdl
YktpdFdlYlZpZXdDbGFzczsKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkIFdl
YktpdFdlYkRvd25sb2FkOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkQ2xhc3Mg
V2ViS2l0V2ViRG93bmxvYWRDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRwcml2YXRlLmgKaW5kZXggYjA0MDAyNi4uMGI4MDJjZiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHByaXZhdGUuaApAQCAtMjcsMTAgKzI3LDEzIEBACiAgKiBUaGV5IGFyZSB1c2luZyBXZWJD
b3JlIHdoaWNoIG11c24ndCBiZSBleHBvc2VkIHRvIHRoZSBvdXRlciB3b3JsZC4KICAqLwogCisj
aW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9u
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmJhY2tm
b3J3YXJkbGlzdC5oPgogCkBAIC0xMDcsNiArMTEwLDE3IEBAIGV4dGVybiAiQyIgewogICAgICAg
ICBnY2hhciogdXJpOwogICAgIH07CiAKKyAgICAjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQURf
R0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBX
RUJLSVRfVFlQRV9XRUJfRE9XTkxPQUQsIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSkpCisgICAg
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSBXZWJLaXRXZWJEb3dubG9h
ZFByaXZhdGU7CisgICAgc3RydWN0IF9XZWJLaXRXZWJEb3dubG9hZFByaXZhdGUgeworICAgICAg
ICBDVVJMKiBoYW5kbGU7CisgICAgICAgIGdjaGFyKiBmaWxlbmFtZTsKKyAgICAgICAgZ2NoYXIq
IHVyaTsKKyAgICAgICAgZ3VpbnQgdG90YWxfYnl0ZXM7CisgICAgICAgIGd1aW50IGN1cnJlbnRf
Ynl0ZXM7CisgICAgICAgIFdlYktpdFdlYkRvd25sb2FkU3RhdGUgc3RhdGU7CisgICAgfTsKKwog
ICAgIFdlYktpdFdlYkZyYW1lKgogICAgIHdlYmtpdF93ZWJfZnJhbWVfaW5pdF93aXRoX3dlYl92
aWV3KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuY3BwIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmVlN2VhODYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkb3dubG9hZC5jcHAKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXQtbWFyc2hhbC5oIgorI2lu
Y2x1ZGUgIndlYmtpdHdlYmRvd25sb2FkLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2V4
dGVybiAiQyIgeworCitlbnVtIHsKKyAgICAvKiBub3JtYWwgc2lnbmFscyAqLworICAgIFNUQVJU
RUQsCisgICAgUFJPR1JFU1NfVVBEQVRFLAorICAgIEZJTklTSEVELAorICAgIEVSUk9SLAorICAg
IExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X3dlYl9kb3dubG9hZF9zaWdu
YWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJEb3du
bG9hZCwgd2Via2l0X3dlYl9kb3dubG9hZCwgR19UWVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfZG93bmxvYWRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdFdlYkRvd25sb2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0gV0VCS0lUX1dFQl9ET1dO
TE9BRF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgZ19mcmVlKGRvd25sb2FkUHJpdmF0ZS0+
dXJpKTsKKyAgICBnX2ZyZWUoZG93bmxvYWRQcml2YXRlLT5maWxlbmFtZSk7CisKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfd2ViX2Rvd25sb2FkX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfY2xhc3NfaW5pdChX
ZWJLaXRXZWJEb3dubG9hZENsYXNzKiBkb3dubG9hZENsYXNzKQoreworICAgIC8qKgorICAgICAq
IFdlYktpdFdlYlZpZXc6OmZpbmlzaGVkOgorICAgICAqIEBkb3dubG9hZDogdGhlIG9iamVjdCBv
biB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAqIFRoZSBmaWxlIGhh
cyBiZWVuIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJf
ZG93bmxvYWRfc2lnbmFsc1tGSU5JU0hFRF0gPSBnX3NpZ25hbF9uZXcoImZpbmlzaGVkIiwKKyAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGRvd25sb2FkQ2xhc3MpLAorICAgICAgICAgICAg
KEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAg
ICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05F
LCAwLAorICAgICAgICAgICAgR19UWVBFX05PTkUpOworCisgICAgLyoqCisgICAgICogV2ViS2l0
V2ViVmlldzo6c3RhcnRlZDoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2gg
dGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBUaGUgZG93bmxvYWQgaGFzIHN0
YXJ0ZWQuICBIYXBwZW5zIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBwcm9ncmVzcy11cGRhdGUgc2ln
bmFsLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfc2lnbmFsc1tTVEFSVEVEXSA9
IGdfc2lnbmFsX25ldygic3RhcnRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhk
b3dubG9hZENsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9M
QVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxM
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1ZP
SUQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05F
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnByb2dyZXNzLXVwZGF0ZToKKyAg
ICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CisgICAgICogQGN1cnJlbnRfYnl0ZXM6IHRoZSBjdXJyZW50IGNvdW50IG9mIGJ5dGVzIGRvd25s
b2FkZWQKKyAgICAgKiBAdG90YWxfYnl0ZXM6IHRoZSB0b3RhbCBieXRlcyBjb3VudCBpbiB0aGUg
ZG93bmxvYWRlZCBmaWxlLCBha2EgZmlsZSBzaXplLgorICAgICAqICAKKyAgICAgKiBJbmRpY2F0
ZXMgcHJvZ3Jlc3MgaW4gdGhlIGRvd25sb2FkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfZG93
bmxvYWRfc2lnbmFsc1tTVEFSVEVEXSA9IGdfc2lnbmFsX25ldygicHJvZ3Jlc3MtdXBkYXRlIiwK
KyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGRvd25sb2FkQ2xhc3MpLAorICAgICAgICAg
ICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAor
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAg
ICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fVUlOVF9VSU5ULAorICAgICAgICAgICAgR19U
WVBFX05PTkUsIDIsCisgICAgICAgICAgICBHX1RZUEVfVUlOVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9VSU5UKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnByb2dyZXNzLXVwZGF0
ZToKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBl
bWl0dGVkCisgICAgICogQGN1cnJlbnRfYnl0ZXM6IHRoZSBjdXJyZW50IGNvdW50IG9mIGJ5dGVz
IGRvd25sb2FkZWQKKyAgICAgKiBAdG90YWxfYnl0ZXM6IHRoZSB0b3RhbCBieXRlcyBjb3VudCBp
biB0aGUgZG93bmxvYWRlZCBmaWxlLCBha2EgZmlsZSBzaXplLgorICAgICAqICAKKyAgICAgKiBJ
bmRpY2F0ZXMgcHJvZ3Jlc3MgaW4gdGhlIGRvd25sb2FkLgorICAgICAqLworICAgIHdlYmtpdF93
ZWJfZG93bmxvYWRfc2lnbmFsc1tTVEFSVEVEXSA9IGdfc2lnbmFsX25ldygiZXJyb3IiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZG93bmxvYWRDbGFzcyksCisgICAgICAgICAgICAo
R1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVk
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5f
X0lOVF9JTlRfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCisgICAgICAg
ICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAgR19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdf
VFlQRV9TVFJJTkcpOworCisgICAgLyoKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVh
bCBtZXRob2RzCisgICAgICovCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGRvd25sb2Fk
Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUpKTsKKyAgICBHX09CSkVDVF9D
TEFTUyhkb3dubG9hZENsYXNzKS0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX2Rvd25sb2FkX2ZpbmFs
aXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX2luaXQoV2ViS2l0V2Vi
RG93bmxvYWQqIGRvd25sb2FkKQoreworfQorCitXZWJLaXRXZWJEb3dubG9hZCogd2Via2l0X3dl
Yl9kb3dubG9hZF9uZXcoY29uc3QgZ2NoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCh1cmksIE5VTEwpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkID0gV0VC
S0lUX1dFQl9ET1dOTE9BRChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBO
VUxMKSk7CisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBkb3dubG9hZFByaXZhdGUgPSBX
RUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgIGRvd25sb2Fk
UHJpdmF0ZS0+dXJpID0gZ19zdHJkdXAodXJpKTsKKyAgICBkb3dubG9hZFByaXZhdGUtPmZpbGVu
YW1lID0gZ19zdHJjb25jYXQoZ19nZXRfaG9tZV9kaXIoKSwgIi8iLCBiYXNlbmFtZSh1cmkpLCBO
VUxMKTsKKyAgICBkb3dubG9hZFByaXZhdGUtPnRvdGFsX2J5dGVzID0gMDsKKyAgICBkb3dubG9h
ZFByaXZhdGUtPmN1cnJlbnRfYnl0ZXMgPSAwOworICAgIGRvd25sb2FkUHJpdmF0ZS0+c3RhdGUg
PSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0NSRUFURUQ7CisKKyAgICByZXR1cm4gZG93bmxv
YWQ7Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF91cmkoV2ViS2l0
V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkRvd25s
b2FkUHJpdmF0ZSogZG93bmxvYWRQcml2YXRlID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJ
VkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIGRvd25sb2FkUHJpdmF0ZS0+dXJpOworfQorCitz
dGF0aWMgaW50IHdlYmtpdF93ZWJfZG93bmxvYWRfcHJvZ3Jlc3NfY2FsbF9iYWNrKFdlYktpdFdl
YkRvd25sb2FkICpkb3dubG9hZCwgZG91YmxlIHRvdGFsX2J5dGVzLCBkb3VibGUgY3VycmVudF9i
eXRlcywgZG91YmxlIHVsdG90YWwsIGRvdWJsZSB1bG5vdykKK3sgICAKKyAgICAvLyBUaGlzIGNh
bGwgYmFjayBpcyBjYWxsZWQgd2F5IHRvbyBvZnRlbiwgaXQgY291bGQgZmlsbCB0aGUgbWFpbiBs
b29wIG1lc3NhZ2UgcXVldWUgaWYgeW91IHNlbmQgdGhlbSBhbGwKKyAgICAvLyBidXQgd2Ugd2Fu
dCB0byBzZW5kIHRoZSBmaXJzdCBhbmQgbGFzdAorICAgIHN0YXRpYyBpbnQgcmVwZWF0ID0gMDsK
KyAgICBpZiAocmVwZWF0KysgJSA1MCA9PSAwIHx8IGN1cnJlbnRfYnl0ZXMgPT0gdG90YWxfYnl0
ZXMpIHsKKyAgICAgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBkb3dubG9hZFByaXZhdGUg
PSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgICAgICBp
ZiAoZG93bmxvYWRQcml2YXRlLT50b3RhbF9ieXRlcyA9PSAwKSB7ICAgIAorICAgICAgICAgICAg
ZG93bmxvYWRQcml2YXRlLT5zdGF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfU1RBUlRF
RDsKKyAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgInN0YXJ0ZWQi
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRvd25sb2FkUHJpdmF0ZS0+dG90YWxfYnl0ZXMgPSAo
Z3VpbnQpdG90YWxfYnl0ZXM7CisgICAgICAgIGRvd25sb2FkUHJpdmF0ZS0+Y3VycmVudF9ieXRl
cyA9IChndWludCljdXJyZW50X2J5dGVzOworICAgIAorICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUoZG93bmxvYWQsICJwcm9ncmVzcy11cGRhdGUiLCAoZ3VpbnQpY3VycmVudF9ieXRlcywg
KGd1aW50KXRvdGFsX2J5dGVzICk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkICp3
ZWJraXRfd2ViX2Rvd25sb2FkX3RocmVhZCh2b2lkKiBkYXRhKQoreyAgIAorICAgIFdlYktpdFdl
YkRvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9XRUJfRE9XTkxPQUQoZGF0YSk7CisgICAgV2Vi
S2l0V2ViRG93bmxvYWRQcml2YXRlKiBkb3dubG9hZFByaXZhdGUgPSBXRUJLSVRfV0VCX0RPV05M
T0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgIENVUkxjb2RlIHJlczsKKyAgICBGSUxF
KiBvdXRfZmlsZTsKKyAgICBnY2hhciogZXJyb3IgPSBOVUxMOworICAgIGdjaGFyKiB1cmwgPSBk
b3dubG9hZFByaXZhdGUtPnVyaTsKKyAgICBnY2hhciogZmlsZSA9IGRvd25sb2FkUHJpdmF0ZS0+
ZmlsZW5hbWU7CisKKyAgICBkb3dubG9hZFByaXZhdGUtPmhhbmRsZSA9IGN1cmxfZWFzeV9pbml0
KCk7CisgICAgaWYgKGRvd25sb2FkUHJpdmF0ZS0+aGFuZGxlKSB7CisgICAgICAgIG91dF9maWxl
ID0gZm9wZW4oZmlsZSwgInciKTsKKworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGRvd25sb2Fk
UHJpdmF0ZS0+aGFuZGxlLCBDVVJMT1BUX1VSTCwgdXJsKTsKKyAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChkb3dubG9hZFByaXZhdGUtPmhhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsIG91dF9maWxl
KTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkb3dubG9hZFByaXZhdGUtPmhhbmRsZSwgQ1VS
TE9QVF9OT1BST0dSRVNTLCBGQUxTRSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZG93bmxv
YWRQcml2YXRlLT5oYW5kbGUsIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgd2Via2l0X3dlYl9k
b3dubG9hZF9wcm9ncmVzc19jYWxsX2JhY2spOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGRv
d25sb2FkUHJpdmF0ZS0+aGFuZGxlLCBDVVJMT1BUX1BST0dSRVNTREFUQSwgZG93bmxvYWQpOwor
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGRvd25sb2FkUHJpdmF0ZS0+aGFuZGxlLCBDVVJMT1BU
X0ZPTExPV0xPQ0FUSU9OLCAxKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkb3dubG9hZFBy
aXZhdGUtPmhhbmRsZSwgQ1VSTE9QVF9NQVhSRURJUlMsIDEwKTsKKyAgICAgICAgY3VybF9lYXN5
X3NldG9wdChkb3dubG9hZFByaXZhdGUtPmhhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJy
b3IpOworCisgICAgICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGRvd25sb2FkUHJpdmF0ZS0+
aGFuZGxlKTsKKyAgICAgICAgaWYgKCFyZXMpIHsKKyAgICAgICAgICAgIGRvd25sb2FkUHJpdmF0
ZS0+c3RhdGUgPSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEOworICAgICAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZmluaXNoZWQiKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGRvd25sb2FkUHJpdmF0ZS0+c3RhdGUgPSBXRUJLSVRfV0VC
X0RPV05MT0FEX1NUQVRFX0VSUk9SOworICAgICAgICAgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAg
ICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VC
S0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLLCBlcnJvciwgJmhhbmRsZWQpOworICAgICAg
ICB9CisKKyAgICAgICAgZmNsb3NlKG91dF9maWxlKTsKKworICAgICAgICBjdXJsX2Vhc3lfY2xl
YW51cChkb3dubG9hZFByaXZhdGUtPmhhbmRsZSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9zdGFydChXZWJLaXRXZWJEb3dubG9hZCog
ZG93bmxvYWQpCit7ICAgIAorICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dO
TE9BRChkb3dubG9hZCkpOworCisgICAgaWYgKCFnX3RocmVhZF9jcmVhdGUoJndlYmtpdF93ZWJf
ZG93bmxvYWRfdGhyZWFkLCAoKHZvaWQqKWRvd25sb2FkKSwgRkFMU0UsIE5VTEwpICE9IDApCisg
ICAgICAgIGdfd2FybmluZygiY2FuJ3QgY3JlYXRlIHRoZSBkb3dubG9hZCB0aHJlYWQiKTsKK30K
Kwordm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX2NhbmNlbCAoV2ViS2l0V2ViRG93bmxvYWQqIGRv
d25sb2FkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChk
b3dubG9hZCkpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBkb3dubG9hZFByaXZh
dGUgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBkb3du
bG9hZFByaXZhdGUtPnN0YXRlID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQ7
CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3du
bG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllf
VVNFUiwgIlVzZXIgY2FuY2VsbGVkIHRoZSBkb3dubG9hZCIsICZoYW5kbGVkKTsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2Rvd25sb2FkX2dl
dF9maWxlbmFtZShXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7ICAgCisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOwor
CisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBkb3dubG9hZFByaXZhdGUgPSBXRUJLSVRf
V0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gZG93bmxvYWRQ
cml2YXRlLT5maWxlbmFtZTsKK30KKwordm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9maWxl
bmFtZSAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZmlsZW5hbWUp
Cit7ICAgCisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25s
b2FkKSk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIGRvd25sb2FkUHJpdmF0ZSA9
IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIGlmIChkb3du
bG9hZFByaXZhdGUtPnRvdGFsX2J5dGVzID09IDApCisgICAgICAgIGRvd25sb2FkUHJpdmF0ZS0+
ZmlsZW5hbWUgPSBnX3N0cmR1cChmaWxlbmFtZSk7Cit9CisKK1dlYktpdFdlYkRvd25sb2FkU3Rh
dGUgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfc3RhdGUgKFdlYktpdFdlYkRvd25sb2FkKiBkb3du
bG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FE
KGRvd25sb2FkKSwgV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9FUlJPUik7CisgICAgCisgICAg
V2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBkb3dubG9hZFByaXZhdGUgPSBXRUJLSVRfV0VCX0RP
V05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gZG93bmxvYWRQcml2YXRl
LT5zdGF0ZTsKK30KKworZ3VpbnQgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfc2l6ZSAoV2ViS2l0
V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKyAgICAKKyAgICBXZWJLaXRXZWJEb3du
bG9hZFByaXZhdGUqIGRvd25sb2FkUHJpdmF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BS
SVZBVEUoZG93bmxvYWQpOworICAgIHJldHVybiBkb3dubG9hZFByaXZhdGUtPnRvdGFsX2J5dGVz
OworfQorCitndWludCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgKFdlYktp
dFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgMCk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9h
ZFByaXZhdGUqIGRvd25sb2FkUHJpdmF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZB
VEUoZG93bmxvYWQpOworICAgIHJldHVybiBkb3dubG9hZFByaXZhdGUtPmN1cnJlbnRfYnl0ZXM7
CisgICAgCit9CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRv
d25sb2FkLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NmE5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5oCkBAIC0wLDAgKzEsODkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VC
X0RPV05MT0FEX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9ET1dOTE9BRF9ICisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorCisjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FEICAgICAgICAgICAgKHdlYmtp
dF93ZWJfZG93bmxvYWRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9ET1dOTE9BRChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9XRUJfRE9XTkxPQUQsIFdlYktpdFdlYkRvd25sb2FkKSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9ET1dOTE9BRF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfVFlQRV9XRUJfRE9XTkxPQUQsIFdlYktpdFdlYkRvd25sb2FkQ2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfSVNfV0VCX0RPV05MT0FEKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9ET1dOTE9BRCkpCisjZGVmaW5l
IFdFQktJVF9JU19XRUJfRE9XTkxPQURfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FEKSkKKyNkZWZpbmUgV0VCS0lU
X1dFQl9ET1dOTE9BRF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfVFlQRV9XRUJfRE9XTkxPQUQsIFdlYktpdFdlYkRvd25sb2FkQ2xhc3Mp
KQorCit0eXBlZGVmIGVudW0geyAgICAKKyAgICBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0VS
Uk9SID0gLTEsCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9DUkVBVEVEID0gMCwKKyAg
ICBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX1NUQVJURUQsCisgICAgV0VCS0lUX1dFQl9ET1dO
TE9BRF9TVEFURV9DQU5DRUxMRUQsCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9GSU5J
U0hFRAorfSBXZWJLaXRXZWJEb3dubG9hZFN0YXRlOworCit0eXBlZGVmIGVudW0geyAgICAKKyAg
ICBXRUJLSVRfV0VCX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLAorICAgIFdFQktJ
VF9XRUJfRE9XTkxPQURfRVJST1JfTkVUV09SSworfSBXZWJLaXRXZWJEb3dubG9hZEVycm9yOwor
CitzdHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkIHsKKyAgICBHT2JqZWN0IHBhcmVudCAgOworfTsK
Kworc3RydWN0IF9XZWJLaXRXZWJEb3dubG9hZENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFy
ZW50OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfdHlw
ZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViRG93bmxvYWQqIAord2Via2l0X3dlYl9k
b3dubG9hZF9uZXcoY29uc3QgZ2NoYXIqIHVyaSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X3dlYl9kb3dubG9hZF9zdGFydChXZWJLaXRXZWJEb3dubG9hZCopOworCitXRUJLSVRfQVBJIGNv
bnN0IGdjaGFyKgord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfdXJpIChXZWJLaXRXZWJEb3dubG9h
ZCogZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9kb3du
bG9hZF9nZXRfZmlsZW5hbWUgKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9zZXRfZmlsZW5hbWUgKFdlYktpdFdlYkRv
d25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIGZpbGVuYW1lKTsKKworV0VCS0lUX0FQSSBn
dWludAord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfc2l6ZSAoV2ViS2l0V2ViRG93bmxvYWQqIGRv
d25sb2FkKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfY3Vy
cmVudF9zaXplIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF93ZWJfZG93bmxvYWRfY2FuY2VsIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxv
YWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkRvd25sb2FkU3RhdGUKK3dlYmtpdF93ZWJfZG93
bmxvYWRfZ2V0X3N0YXRlIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggN2YxZGI5
MS4uYmMyNjAzZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTQsNiArNCw3
IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDggSmFuIEFsb256byA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgorICog
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMjIsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJ3ZWJr
aXR3ZWJkb3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3
ZWJraXQtbWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKQEAgLTg3LDYgKzg5
LDcgQEAgZW51bSB7CiAgICAgQ09QWV9DTElQQk9BUkQsCiAgICAgUEFTVEVfQ0xJUEJPQVJELAog
ICAgIENVVF9DTElQQk9BUkQsCisgICAgRE9XTkxPQURfQ1JFQVRFRCwKICAgICBMQVNUX1NJR05B
TAogfTsKIApAQCAtNjczLDYgKzY3NiwxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
cmVhbF9wYXN0ZV9jbGlwYm9hcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBmcmFtZS0+
ZWRpdG9yKCktPmNvbW1hbmQoIlBhc3RlIikuZXhlY3V0ZSgpOwogfQogCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X3dlYl92aWV3X3JlYWxfZG93bmxvYWRfY3JlYXRlZChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIHdlYmtpdF93ZWJf
ZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsgIAorICAgIC8vIFJldHVybiBmYWxzZSB0byBpbmRp
Y2F0ZSBpdCB3YXNuJ3QgaGFuZGxlZCB0aGVyZWZvcmUgdGhlIGRvd25sb2FkIGlzIGRlbGV0ZWQK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyhvYmplY3QpOwpAQCAtODE2LDYgKzgyNiwyNCBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFz
cykKICAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSLAogICAgICAgICAgICAgR19UWVBFX1BPSU5U
RVIpOwogCisgICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmRvd25sb2FkLWNyZWF0ZWQ6
CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1p
dHRlZAorICAgICAqIEBkb3dubG9hZDogdGhlIG1lc3NhZ2UgdGV4dAorICAgICAqIEByZXR1cm46
IFRSVUUgaWYgdGhlIGRvd25sb2FkIHdhcyBoYW5kbGVkLCBvdGhlcndpc2UgaXQnbGwgYmUgY2Fu
Y2VsbGVkLgorICAgICAqCisgICAgICogQSBuZXcgRG93bmxvYWQgaGFzIGJlZW4gY3JlYXRlZAor
ICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0RPV05MT0FEX0NSRUFURURdID0g
Z19zaWduYWxfbmV3KCJkb3dubG9hZC1jcmVhdGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05B
TF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0V2ViVmlld0NsYXNzLCBkb3dubG9hZF9jcmVhdGVkKSwKKyAgICAgICAgICAgIGdf
c2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKKyAgICAgICAgICAgIE5VTEwsCisgICAg
ICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZ
UEVfQk9PTEVBTiwgMSwKKyAgICAgICAgICAgIEdfVFlQRV9PQkpFQ1QpOworCiAgICAgLyoqCiAg
ICAgICogV2ViS2l0V2ViVmlldzo6bG9hZC1zdGFydGVkOgogICAgICAqIEB3ZWJfdmlldzogdGhl
IG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTExMTUsNiArMTE0Myw3
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdD
bGFzcyogd2ViVmlld0NsYXNzKQogICAgIHdlYlZpZXdDbGFzcy0+Y3V0X2NsaXBib2FyZCA9IHdl
YmtpdF93ZWJfdmlld19yZWFsX2N1dF9jbGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5jb3B5
X2NsaXBib2FyZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NvcHlfY2xpcGJvYXJkOwogICAgIHdl
YlZpZXdDbGFzcy0+cGFzdGVfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfcGFzdGVf
Y2xpcGJvYXJkOworICAgIHdlYlZpZXdDbGFzcy0+ZG93bmxvYWRfY3JlYXRlZCA9IHdlYmtpdF93
ZWJfdmlld19yZWFsX2Rvd25sb2FkX2NyZWF0ZWQ7CiAKICAgICBHT2JqZWN0Q2xhc3MqIG9iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViVmlld0NsYXNzKTsKICAgICBvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfd2ViX3ZpZXdfZmluYWxpemU7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmgKaW5kZXggNGRiMjQxNC4uMDE0MTk2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
aApAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgdm9p
ZCAoKmN1dF9jbGlwYm9hcmQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAgICAgdm9pZCAo
KmNvcHlfY2xpcGJvYXJkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogICAgIHZvaWQgKCpw
YXN0ZV9jbGlwYm9hcmQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisgICAgZ2Jvb2xlYW4g
KCpkb3dubG9hZF9jcmVhdGVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkRv
d25sb2FkICogZG93bmxvYWQpOwogCiAgICAgLyoKICAgICAgKiBpbnRlcm5hbApkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jIGIvV2ViS2l0VG9vbHMvR3RrTGF1bmNo
ZXIvbWFpbi5jCmluZGV4IDhlZDI2OTAuLmY2ZDgyYjQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L0d0a0xhdW5jaGVyL21haW4uYworKysgYi9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjUsMTggQEAgbGlua19o
b3Zlcl9jYiAoV2ViS2l0V2ViVmlldyogcGFnZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBjb25zdCBn
Y2hhciogbGluaywgZ3BvaW4KICAgICAgICAgZ3RrX3N0YXR1c2Jhcl9wdXNoIChtYWluX3N0YXR1
c2Jhciwgc3RhdHVzX2NvbnRleHRfaWQsIGxpbmspOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4KK21p
bWVfdHlwZV9yZXF1ZXN0ZWRfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIFdlYktpdFdlYkZyYW1l
KiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIG5ldHdvcmssIGNvbnN0IGdjaGFyKiBtaW1l
LCBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogcG9saWN5RGVjaXNpb24sIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgZ19wcmludGVyciAoIlhYWCBNSU1FIElTID4lczwsIGNhbiBzaG93IGl0ICVkXG4i
LCBtaW1lLCB3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHBhZ2UsIG1pbWUpKTsK
KyAgICBpZiAod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZShwYWdlLCBtaW1lKSkK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGVsc2UgeworICAgICAgICB3ZWJraXRfd2ViX3Bv
bGljeV9kZWNpc2lvbl9kb3dubG9hZCAocG9saWN5RGVjaXNpb24pOworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkCiB0aXRsZV9jaGFuZ2VfY2IgKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLCBjb25zdCBnY2hhciog
dGl0bGUsIGdwb2ludGVyIGRhdGEpCiB7CkBAIC0xMDYsNiArMTE5LDk4IEBAIGdvX2ZvcndhcmRf
Y2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQogICAgIHdlYmtpdF93ZWJfdmll
d19nb19mb3J3YXJkICh3ZWJfdmlldyk7CiB9CiAKK3N0YXRpYyB2b2lkCitkb3dubG9hZF9lcnJv
cl9jYiAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBndWludCBkb21haW4sIFdlYktpdFdl
YkRvd25sb2FkRXJyb3IgZXJyb3IsIGNvbnN0IGdjaGFyICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBnX3dhcm5pbmcoIkRvd25sb2FkIEVycm9yOiAlc1xuIiwgbWVzc2FnZSk7Cit9
CisKK3N0YXRpYyB2b2lkCitkb3dubG9hZF9maW5pc2hlZF9jYiAoV2ViS2l0V2ViRG93bmxvYWQq
IGRvd25sb2FkLCBncG9pbnRlciBkYXRhKQoreworICAgIGd0a19idXR0b25fc2V0X2xhYmVsKEdU
S19CVVRUT04oZGF0YSksIEdUS19TVE9DS19DTE9TRSk7Cit9CisKK3N0YXRpYyB2b2lkCitkb3du
bG9hZF9wcm9ncmVzc19jYiAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBndWludCBjdXJy
ZW50X2J5dGVzLCBndWludCB0b3RhbF9ieXRlcywgZ3BvaW50ZXIgcHJvZ3Jlc3NfYmFyKQorewor
ICAgIGlmKEdUS19JU19QUk9HUkVTU19CQVIocHJvZ3Jlc3NfYmFyKSkKKyAgICB7CisgICAgICAg
IGdka190aHJlYWRzX2VudGVyKCk7CisgICAgICAgIGdkb3VibGUgcHJvZ3Jlc3MgPSAoZG91Ymxl
KWN1cnJlbnRfYnl0ZXMvdG90YWxfYnl0ZXM7CisgICAgICAgIGd0a19wcm9ncmVzc19iYXJfc2V0
X2ZyYWN0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3NfYmFyKSwgcHJvZ3Jlc3MpOworICAg
ICAgICBnZGtfdGhyZWFkc19sZWF2ZSgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2Rvd25s
b2FkX2J1dHRvbl9jYiAoR3RrQnV0dG9uKiBidXR0b24sIGdwb2ludGVyIGRvd25sb2FkKQorewor
ICAgIGlmICh3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9zdGF0ZShkb3dubG9hZCkgPT0gV0VCS0lU
X1dFQl9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRCkgeworICAgICAgICBHZGtXaW5kb3cqIHdpbmRv
dyA9IGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVChidXR0b24pKTsKKyAg
ICAgICAgZ2RrX3dpbmRvd19oaWRlKHdpbmRvdyk7CisgICAgfSBlbHNlIAorICAgICAgICB3ZWJr
aXRfd2ViX2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgor
ZG93bmxvYWRfY3JlYXRlZF9jYiAoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRG93bmxv
YWQqIGRvd25sb2FkLCBncG9pbnRlciBkYXRhKQoreworICAgIGdib29sZWFuIGhhbmRsZWQgPSBU
UlVFOworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1df
VE9QTEVWRUwpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwg
IkRvd25sb2FkIik7CisgICAgCisgICAgR3RrV2lkZ2V0KiB2Ym94ID0gZ3RrX3Zib3hfbmV3KFRS
VUUsIDApOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVS
KHZib3gpLCA1KTsKKyAgICAKKyAgICBHdGtXaWRnZXQqIHVyaV9sYWJlbCA9IGd0a19sYWJlbF9u
ZXcoTlVMTCk7CisgICAgZ3RrX2xhYmVsX3NldF9zaW5nbGVfbGluZV9tb2RlKEdUS19MQUJFTCh1
cmlfbGFiZWwpLCBGQUxTRSk7CisgICAgZ3RrX2xhYmVsX3NldF9tYXJrdXAoR1RLX0xBQkVMKHVy
aV9sYWJlbCksIAorICAgICAgICBnX3N0cmNvbmNhdCgiPGI+VVJJOjwvYj4gIiwgCisgICAgICAg
ICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLCAKKyAgICAgICAgICAg
ICJcbjxiPkZpbGVuYW1lOjwvYj4gIiwKKyAgICAgICAgICAgIHdlYmtpdF93ZWJfZG93bmxvYWRf
Z2V0X2ZpbGVuYW1lKGRvd25sb2FkKSwKKyAgICAgICAgICAgIE5VTEwpCisgICAgICAgICk7Cisg
ICAgZ3RrX2xhYmVsX3NldF9qdXN0aWZ5KEdUS19MQUJFTCh1cmlfbGFiZWwpLCBHVEtfSlVTVElG
WV9MRUZUKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgdXJpX2xhYmVs
LCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgR3RrV2lkZ2V0KiBwcm9ncmVzc19iYXIgPSBndGtf
cHJvZ3Jlc3NfYmFyX25ldygpOyAgICAgICAgIAorICAgIGd0a19wcm9ncmVzc19iYXJfc2V0X29y
aWVudGF0aW9uKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3NfYmFyKSwgR1RLX1BST0dSRVNTX0xF
RlRfVE9fUklHSFQpOworICAgIGd0a19wcm9ncmVzc19iYXJfc2V0X2ZyYWN0aW9uKEdUS19QUk9H
UkVTU19CQVIocHJvZ3Jlc3NfYmFyKSwgMC4wKTsgCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1godmJveCksIHByb2dyZXNzX2JhciwgRkFMU0UsIEZBTFNFLCAwKTsKKworICAgIEd0a1dp
ZGdldCogYnV0dG9uX2JveCA9IGd0a19oYnV0dG9uX2JveF9uZXcoKTsKKyAgICBndGtfYnV0dG9u
X2JveF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGJ1dHRvbl9ib3gpLCBHVEtfQlVUVE9OQk9Y
X0VORCk7CisgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2Nr
KEdUS19TVE9DS19DQU5DRUwpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXR0
b24pLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGRvd25sb2FkX2J1dHRvbl9jYiksIGRvd25sb2Fk
KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25fYm94KSwgYnV0dG9uLCBG
QUxTRSwgRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBi
dXR0b25fYm94LCBGQUxTRSwgRkFMU0UsIDApOworICAgIAorICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7CisgICAgCisgICAgZ3RrX3dpZGdldF9zaG93
X2FsbChHVEtfV0lER0VUKHdpbmRvdykpOworICAgIAorICAgIEd0a1dpZGdldCogZmlsZV9jaG9v
c2VyID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3KCJTZWxlY3QgZGVzdGluYXRpb24uLi4i
LCBHVEtfV0lORE9XKHdpbmRvdyksIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUsIEdUS19T
VE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsIEdUS19TVE9DS19TQVZFLCBHVEtfUkVT
UE9OU0VfT0ssIE5VTEwpOworICAgIGNvbnN0IGNoYXIqIHRlbXBfZmlsZW5hbWUgPSB3ZWJraXRf
d2ViX2Rvd25sb2FkX2dldF9maWxlbmFtZShkb3dubG9hZCk7CisgICAgZ3RrX2ZpbGVfY2hvb3Nl
cl9zZXRfZmlsZW5hbWUgKEdUS19GSUxFX0NIT09TRVIgKGZpbGVfY2hvb3NlciksIHRlbXBfZmls
ZW5hbWUpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZSAoR1RLX0ZJTEVf
Q0hPT1NFUiAoZmlsZV9jaG9vc2VyKSwgZ19iYXNlbmFtZSh0ZW1wX2ZpbGVuYW1lKSk7CisKKyAg
ICBpZiAoZ3RrX2RpYWxvZ19ydW4gKEdUS19ESUFMT0cgKGZpbGVfY2hvb3NlcikpID09IEdUS19S
RVNQT05TRV9PSykgeworICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9maWxlbmFtZShk
b3dubG9hZCwgZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZW5hbWUgKEdUS19GSUxFX0NIT09TRVIg
KGZpbGVfY2hvb3NlcikpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3kgKHdpbmRvdyk7CisgICAgICAgIGhhbmRsZWQgPSBGQUxTRTsKKyAgICB9CisgICAgZ3RrX3dp
ZGdldF9kZXN0cm95IChmaWxlX2Nob29zZXIpOworICAgICAgCisgICAgZ19zaWduYWxfY29ubmVj
dCAoR19PQkpFQ1QgKGRvd25sb2FkKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyAoZG93bmxvYWRf
ZmluaXNoZWRfY2IpLCBidXR0b24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChk
b3dubG9hZCksICJwcm9ncmVzcy11cGRhdGUiLCBHX0NBTExCQUNLIChkb3dubG9hZF9wcm9ncmVz
c19jYiksIHByb2dyZXNzX2Jhcik7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGRv
d25sb2FkKSwgImVycm9yIiwgR19DQUxMQkFDSyAoZG93bmxvYWRfZXJyb3JfY2IpLCB3aW5kb3cp
OworCisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKIHN0YXRpYyBHdGtXaWRnZXQqCiBjcmVhdGVf
YnJvd3NlciAoKQogewpAQCAtMTE5LDYgKzIyNCw4IEBAIGNyZWF0ZV9icm93c2VyICgpCiAgICAg
Z19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtcHJvZ3Jlc3MtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0sgKHByb2dyZXNzX2NoYW5nZV9jYiksIHdlYl92aWV3KTsKICAgICBn
X3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3ZpZXcpLCAibG9hZC1jb21taXR0ZWQiLCBH
X0NBTExCQUNLIChsb2FkX2NvbW1pdF9jYiksIHdlYl92aWV3KTsKICAgICBnX3NpZ25hbF9jb25u
ZWN0IChHX09CSkVDVCAod2ViX3ZpZXcpLCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19DQUxMQkFD
SyAobGlua19ob3Zlcl9jYiksIHdlYl92aWV3KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0IChHX09C
SkVDVCAod2ViX3ZpZXcpLCAibWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLCBH
X0NBTExCQUNLIChtaW1lX3R5cGVfcmVxdWVzdGVkX2NiKSwgd2ViX3ZpZXcpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJkb3dubG9hZC1jcmVhdGVkIiwgR19D
QUxMQkFDSyAoZG93bmxvYWRfY3JlYXRlZF9jYiksIHdlYl92aWV3KTsKIAogICAgIHJldHVybiBz
Y3JvbGxlZF93aW5kb3c7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23795</attachid>
            <date>2008-09-25 07:43:12 -0700</date>
            <delta_ts>2009-01-27 11:37:33 -0800</delta_ts>
            <desc>Add download support</desc>
            <filename>download.patch</filename>
            <type>text/plain</type>
            <size>44212</size>
            <attacher name="Marco Barisione">marco.barisione</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggZDRlNDQ1
ZC4uOWZhZDU5ZSAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTMwOCw2ICszMDgsNyBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2VicG9saWN5ZGVjaXNpb24uaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
c2V0dGluZ3MuaCBcCisgCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmggXAog
CVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAogCiB3ZWJraXRndGtfYnVpbHRfc291
cmNlcyArPSBcCkBAIC0zNDEsNiArMzQyLDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZG93bmxvYWQuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAogCiB3
ZWJraXRndGtfY3BwZmxhZ3MgKz0gXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAK
aW5kZXggNDk0ZmU3My4uYmY1NjAyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwCkBAIC0yMDksOSArMjA5LDEyIEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpjb250aW51
ZUFmdGVyQ29udGVudFBvbGljeShQb2xpY3lBY3Rpb24gY29udGVudFBvbGljeSwKIAogICAgIGNh
c2UgUG9saWN5RG93bmxvYWQ6CiAgICAgICAgIGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5kb3du
bG9hZChtX2hhbmRsZS5nZXQoKSwgcmVxdWVzdCgpLCBtX2hhbmRsZS5nZXQoKS0+cmVxdWVzdCgp
LCByKTsKKyAgICAgICAgLy8gQ1VSTCByZXVzZXMgdGhlIHNhbWUgUmVzb3VyY2VIYW5kbGUgdG8g
ZG93bmxvYWQgdGhlIGZpbGUsIHNvIHdlIGNhbm5vdCBjbG9zZSBpdC4KKyNpZiAhVVNFKENVUkwp
CiAgICAgICAgIC8vIEl0IG1pZ2h0IGhhdmUgZ29uZSBtaXNzaW5nCiAgICAgICAgIGlmIChmcmFt
ZUxvYWRlcigpKQogICAgICAgICAgICAgcmVjZWl2ZWRFcnJvcihpbnRlcnJ1cHRpb25Gb3JQb2xp
Y3lDaGFuZ2VFcnJvcigpKTsKKyNlbmRpZgogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFBv
bGljeUlnbm9yZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmwuY3BwCmluZGV4IDQ1Mzk3MGIuLjc4MjZiNTEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAt
MTAzLDcgKzEwMyw4IEBAIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogCiBib29s
IFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiB7Ci0gICAgQVNTRVJUKGZyYW1l
KTsKKyAgICAvKiBUaGUgZnJhbWUgY291bGQgYmUgbnVsbCBpcyB0aGUgUmVzb3VyY2VIYW5kbGUg
aXMgbm90IGFzc29jaWF0ZWQgdG8gYW55CisgICAgICogRnJhbWUsIGkuZS4gaWYgd2UgYXJlIGRv
d25sb2FkaW5nIGEgZmlsZS4gKi8KICAgICByZWYoKTsKICAgICBSZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OnNoYXJlZEluc3RhbmNlKCktPmFkZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3Bw
CmluZGV4IDJlMzkzYTYuLjhkNDA5M2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtMzExLDkgKzMxMSwxMiBAQCBi
b29sIFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFk
LT5tX21zZyk7CiAKLSAgICAvLyBJZiB3ZSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgUGFn
ZSwgdGhpcyBtdXN0IGJlIGFuIGF0dGVtcHRlZCBsb2FkIGZyb20gYW4KLSAgICAvLyBvblVubG9h
ZCBoYW5kbGVyLCBzbyBsZXQncyBqdXN0IGJsb2NrIGl0LgotICAgIGlmICghZnJhbWUtPnBhZ2Uo
KSkKKworICAgIC8qIFRoZSBmcmFtZSBjb3VsZCBiZSBudWxsIGlzIHRoZSBSZXNvdXJjZUhhbmRs
ZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkKKyAgICAgKiBGcmFtZSwgaS5lLiBpZiB3ZSBhcmUg
ZG93bmxvYWRpbmcgYSBmaWxlLgorICAgICAqIElmIHRoZSBmcmFtZSBpcyBub3QgbnVsbCBidXQg
dGhlIHBhZ2UgaXMgbnVsbCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkCisgICAgICogbG9hZCBm
cm9tIGFuIG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQuICovCisgICAg
aWYgKGZyYW1lICYmICFmcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBLVVJMIHVybCA9IHJlcXVlc3QoKS51cmwoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggN2VjZGI1Ni4uZWMyNzZmYyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFy
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNzI0LDkgKzcyNiwyMiBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNl
RXJyb3ImKQogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1kb25lIiwg
ZmFsc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIGluaXRpYWxSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIC8vIEZJWE1FOiBVc2Ug
aW5pdGlhbFJlcXVlc3Q/CisgICAgLy8gRklYTUU6IERvbid0IGNyZWF0ZSBuZXR3b3JrUmVxdWVz
dCBmcm9tIHRoZSBVUkkgYnV0IGZyb20gdGhlIGZ1bGwgb2JqZWN0IHdoZW4gdGhlIG5ldyBBUEkg
aXMgbWVyZ2VkLgorICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBuZXR3b3JrUmVxdWVzdCA9IHdl
YmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9kb3du
bG9hZF9uZXdfZnJvbV9leGlzdGluZ19jb25uZWN0aW9uKGhhbmRsZSwgbmV0d29ya1JlcXVlc3Qs
IHJlc3BvbnNlKTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZSh2aWV3LCAiZG93bmxvYWQtY3JlYXRlZCIsIGRvd25sb2FkLCAmaGFuZGxlZCk7CisKKyAg
ICBpZiAoaGFuZGxlZCkKKyAgICAgICAgd2Via2l0X3dlYl9kb3dubG9hZF9zdGFydChkb3dubG9h
ZCk7CisgICAgZWxzZQorICAgICAgICBoYW5kbGUtPmNhbmNlbCgpOworCisgICAgZ19vYmplY3Rf
dW5yZWYoZG93bmxvYWQpOwogfQogCiBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50Ojpj
YW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRleCBk
YmUyYjUwLi44YjYxMmEyIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXR2ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmlu
ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vi
ZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4
IDk2OTk3NDMuLmQ3MGQ4ZWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRl
ZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTYyLDYg
KzYyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNldHRpbmdzQ2xhc3MgV2ViS2l0V2Vi
U2V0dGluZ3NDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZp
ZXc7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdlYktpdFdlYlZpZXdDbGFz
czsKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkIFdlYktpdFdlYkRvd25sb2Fk
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkQ2xhc3MgV2ViS2l0V2ViRG93bmxv
YWRDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRl
LmgKaW5kZXggODIxNzk3MS4uOTVkMjU2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApA
QCAtMjcsMTEgKzI3LDE0IEBACiAgKiBUaGV5IGFyZSB1c2luZyBXZWJDb3JlIHdoaWNoIG11c24n
dCBiZSBleHBvc2VkIHRvIHRoZSBvdXRlciB3b3JsZC4KICAqLwogCisjaW5jbHVkZSA8Y3VybC9j
dXJsLmg+CisKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgogI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2ViZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4K
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CiAKQEAgLTQxLDkg
KzQ0LDEzIEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAogI2luY2x1ZGUgPGdsaWIuaD4KIAorY2xhc3Mg
RG93bmxvYWRDbGllbnQ7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdFdlYlZpZXcq
IGdldFZpZXdGcm9tRnJhbWUoV2ViS2l0V2ViRnJhbWUqKTsKIApAQCAtMTEwLDYgKzExNywyMCBA
QCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2NoYXIqIHVyaTsKICAgICB9OwogCisgICAgI2RlZmlu
ZSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBXZWJLaXRXZWJE
b3dubG9hZFByaXZhdGUpKQorICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEb3dubG9hZFBy
aXZhdGUgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlOworICAgIHN0cnVjdCBfV2ViS2l0V2ViRG93
bmxvYWRQcml2YXRlIHsKKyAgICAgICAgZ2NoYXIqIGxvY2FsVXJpOworICAgICAgICBnY2hhciog
c3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgICAgIGd1aW50IGN1cnJlbnRTaXplOworICAgICAgICBX
ZWJLaXRXZWJEb3dubG9hZFN0YXRlIHN0YXRlOworICAgICAgICBHSU9DaGFubmVsKiBvdXRwdXRD
aGFubmVsOworICAgICAgICBEb3dubG9hZENsaWVudCogZG93bmxvYWRDbGllbnQ7CisgICAgICAg
IFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBuZXR3b3JrUmVxdWVzdDsKKyAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSogbmV0d29ya1Jlc3BvbnNlOworICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU+IHJlc291cmNlSGFuZGxlOworICAgIH07CisKICAgICBXZWJLaXRX
ZWJGcmFtZSoKICAgICB3ZWJraXRfd2ViX2ZyYW1lX2luaXRfd2l0aF93ZWJfdmlldyhXZWJLaXRX
ZWJWaWV3KiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kik7CiAKQEAgLTEyMiw2ICsx
NDMsOSBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkCiAgICAgd2Via2l0X3dlYl9wb2xpY3lfZGVj
aXNpb25fY2FuY2VsIChXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pOwogCisgICAg
V2ViS2l0V2ViRG93bmxvYWQqCisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9uZXdfZnJvbV9leGlz
dGluZ19jb25uZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgV2ViS2l0TmV0d29ya1Jl
cXVlc3QqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisKICAgICAvLyBGSVhN
RTogTW92ZSB0aGVzZSB0byB3ZWJraXR3ZWJmcmFtZS5oIG9uY2UgdGhlaXIgQVBJIGhhcyBiZWVu
IGRpc2N1c3NlZC4KIAogICAgIFdFQktJVF9BUEkgR1NMaXN0KgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJl
MTE3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkb3du
bG9hZC5jcHAKQEAgLTAsMCArMSw2MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgor
I2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJz
aGFsLmgiCisjaW5jbHVkZSAid2Via2l0d2ViZG93bmxvYWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRw
cml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitleHRlcm4gIkMiIHsKKworY2xhc3Mg
RG93bmxvYWRDbGllbnQgOiBOb25jb3B5YWJsZSwgcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIERvd25sb2FkQ2xpZW50KFdlYktpdFdlYkRvd25sb2Fk
Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50KTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxl
Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBXZWJLaXRXZWJEb3dubG9hZCogbV9kb3dubG9hZDsK
K307CisKK2VudW0geworICAgIC8qIG5vcm1hbCBzaWduYWxzICovCisgICAgU1RBUlRFRCwKKyAg
ICBQUk9HUkVTU19VUERBVEUsCisgICAgRklOSVNIRUQsCisgICAgRVJST1IsCisgICAgTEFTVF9T
SUdOQUwKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRfd2ViX2Rvd25sb2FkX3NpZ25hbHNbTEFT
VF9TSUdOQUxdID0geyAwLCB9OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX05F
VFdPUktfUkVRVUVTVCwKKyAgICBQUk9QX0xPQ0FMX1VSSSwKKyAgICBQUk9QX1NVR0dFU1RFRF9G
SUxFTkFNRSwKKyAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICBQUk9QX1RPVEFMX1NJWkUsCit9
OworCitHX0RFRklORV9UWVBFKFdlYktpdFdlYkRvd25sb2FkLCB3ZWJraXRfd2ViX2Rvd25sb2Fk
LCBHX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2Fk
ID0gV0VCS0lUX1dFQl9ET1dOTE9BRChvYmplY3QpOworICAgIFdlYktpdFdlYkRvd25sb2FkUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOwor
CisgICAgLyogV2UgZG9uJ3QgY2FsbCB3ZWJraXRfd2ViX2Rvd25sb2FkX2NhbmNlbCgpIGJlY2F1
c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgICAgICogc2lnbmFscyB3aGVuIGZpbmFsaXNpbmcg
YW4gb2JqZWN0LiAqLworICAgIGlmIChwcml2LT5yZXNvdXJjZUhhbmRsZSkgeworICAgICAgICBp
ZiAocHJpdi0+c3RhdGUgPT0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9TVEFSVEVEKSB7Cisg
ICAgICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+c2V0Q2xpZW50KDApOworICAgICAgICAg
ICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUtPmNhbmNlbCgpOworICAgICAgICB9CisgICAgICAgIHBy
aXYtPnJlc291cmNlSGFuZGxlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBkZWxldGUgcHJpdi0+
ZG93bmxvYWRDbGllbnQ7CisgICAgZGVsZXRlIHByaXYtPm5ldHdvcmtSZXNwb25zZTsKKworICAg
IGdfZnJlZShwcml2LT5sb2NhbFVyaSk7CisgICAgZ19mcmVlKHByaXYtPnN1Z2dlc3RlZEZpbGVu
YW1lKTsKKyAgICBpZiAocHJpdi0+b3V0cHV0Q2hhbm5lbCkKKyAgICAgICAgZ19pb19jaGFubmVs
X3VucmVmKHByaXYtPm91dHB1dENoYW5uZWwpOworICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm5l
dHdvcmtSZXF1ZXN0KTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfZG93bmxvYWRf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9kb3dubG9hZF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJEb3du
bG9hZCogZG93bmxvYWQgPSBXRUJLSVRfV0VCX0RPV05MT0FEKG9iamVjdCk7CisKKyAgICBzd2l0
Y2gocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ORVRXT1JLX1JFUVVFU1Q6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfbmV0d29ya19y
ZXF1ZXN0KGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT0NBTF9V
Ukk6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYl9kb3dubG9h
ZF9nZXRfbG9jYWxfdXJpKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TVUdHRVNURURfRklMRU5BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwg
d2Via2l0X3dlYl9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKGRvd25sb2FkKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJSRU5UX1NJWkU6CisgICAgICAgIGdfdmFs
dWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfY3VycmVudF9zaXpl
KGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT1RBTF9TSVpFOgor
ICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0
X3RvdGFsX3NpemUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwg
cHNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxv
YWQgPSBXRUJLSVRfV0VCX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0V2ViRG93bmxvYWRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7
CisKKyAgICBzd2l0Y2gocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ORVRXT1JLX1JFUVVFU1Q6
CisgICAgICAgIHByaXYtPm5ldHdvcmtSZXF1ZXN0ID0gKFdlYktpdE5ldHdvcmtSZXF1ZXN0Kiln
X3ZhbHVlX2R1cF9vYmplY3QodmFsdWUpOworICAgICAgICAvKiBUaGlzIGlzIHNhZmUgYXMgbmV0
d29yay1yZXF1ZXN0IGlzIGEgY29uc3RydWN0IG9ubHkgcHJvcGVydHkgYW5kIHN1Z2dlc3RlZEZp
bGVuYW1lCisgICAgICAgICAqIGlzIGluaXRpYWxseSBudWxsLiAqLworICAgICAgICBwcml2LT5z
dWdnZXN0ZWRGaWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUod2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfdXJpKHByaXYtPm5ldHdvcmtSZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MT0NBTF9VUkk6CisgICAgICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfc2V0X2xv
Y2FsX3VyaShkb3dubG9hZCwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TVUdHRVNURURfRklMRU5BTUU6CisgICAgICAgIHdlYmtpdF93
ZWJfZG93bmxvYWRfc2V0X3N1Z2dlc3RlZF9maWxlbmFtZShkb3dubG9hZCwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfY2xhc3NfaW5pdChX
ZWJLaXRXZWJEb3dubG9hZENsYXNzKiBkb3dubG9hZENsYXNzKQoreworICAgIC8qCisgICAgICog
aW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcworICAgICAqLworICAgIEdPYmplY3RD
bGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhkb3dubG9hZENsYXNzKTsKKyAgICBv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX2Rvd25sb2FkX2ZpbmFsaXplOworICAg
IG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9wcm9w
ZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kb3dubG9h
ZF9zZXRfcHJvcGVydHk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpmaW5pc2hl
ZDoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBl
bWl0dGVkCisgICAgICoKKyAgICAgKiBUaGUgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZG93
bmxvYWRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NpZ25hbHNbRklOSVNI
RURdID0gZ19zaWduYWxfbmV3KCJmaW5pc2hlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyhkb3dubG9hZENsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZP
SURfX1ZPSUQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnN0YXJ0ZWQ6CisgICAg
ICogQGRvd25sb2FkOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAor
ICAgICAqCisgICAgICogVGhlIGRvd25sb2FkIGhhcyBzdGFydGVkLiAgSGFwcGVucyBqdXN0IGJl
Zm9yZSB0aGUgZmlyc3QgcHJvZ3Jlc3MtdXBkYXRlIHNpZ25hbC4KKyAgICAgKi8KKyAgICB3ZWJr
aXRfd2ViX2Rvd25sb2FkX3NpZ25hbHNbU1RBUlRFRF0gPSBnX3NpZ25hbF9uZXcoInN0YXJ0ZWQi
LAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZG93bmxvYWRDbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisg
ICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDAsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSk7CisKKyAgICAvKioKKyAgICAgKiBX
ZWJLaXRXZWJWaWV3Ojpwcm9ncmVzcy11cGRhdGU6CisgICAgICogQGRvd25sb2FkOiB0aGUgb2Jq
ZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBjdXJyZW50X2J5dGVz
OiB0aGUgY3VycmVudCBjb3VudCBvZiBieXRlcyBkb3dubG9hZGVkCisgICAgICogQHRvdGFsX2J5
dGVzOiB0aGUgdG90YWwgYnl0ZXMgY291bnQgaW4gdGhlIGRvd25sb2FkZWQgZmlsZSwgYWthIGZp
bGUgc2l6ZS4KKyAgICAgKiAgCisgICAgICogSW5kaWNhdGVzIHByb2dyZXNzIGluIHRoZSBkb3du
bG9hZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NpZ25hbHNbU1RBUlRFRF0g
PSBnX3NpZ25hbF9uZXcoInByb2dyZXNzLXVwZGF0ZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyhkb3dubG9hZENsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lH
TkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X1ZPSURfX1VJTlRfVUlOVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAg
ICAgR19UWVBFX1VJTlQsCisgICAgICAgICAgICBHX1RZUEVfVUlOVCk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRXZWJWaWV3Ojpwcm9ncmVzcy11cGRhdGU6CisgICAgICogQGRvd25sb2FkOiB0
aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBjdXJyZW50
X2J5dGVzOiB0aGUgY3VycmVudCBjb3VudCBvZiBieXRlcyBkb3dubG9hZGVkCisgICAgICogQHRv
dGFsX2J5dGVzOiB0aGUgdG90YWwgYnl0ZXMgY291bnQgaW4gdGhlIGRvd25sb2FkZWQgZmlsZSwg
YWthIGZpbGUgc2l6ZS4KKyAgICAgKiAgCisgICAgICogSW5kaWNhdGVzIHByb2dyZXNzIGluIHRo
ZSBkb3dubG9hZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NpZ25hbHNbU1RB
UlRFRF0gPSBnX3NpZ25hbF9uZXcoImVycm9yIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NM
QVNTKGRvd25sb2FkQ2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxf
UlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
IGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKKyAgICAgICAgICAgIE5VTEwsCisg
ICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19JTlRfSU5UX1NUUklORywKKyAgICAg
ICAgICAgIEdfVFlQRV9CT09MRUFOLCAzLAorICAgICAgICAgICAgR19UWVBFX0lOVCwKKyAgICAg
ICAgICAgIEdfVFlQRV9JTlQsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIC8q
CisgICAgICogcHJvcGVydGllcworICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX05FVFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibmV0d29yay1yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJOZXR3b3JrIFJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlRoZSBuZXR3b3JrIHJlcXVlc3QgZm9yIHRoZSBVUkkgdGhhdCBzaG91bGQgYmUgZG93bmxv
YWRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9O
RVRXT1JLX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1Bh
cmFtRmxhZ3MpKFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZ
KSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTE9DQUxfVVJJLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbC11cmkiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2FsIFVSSSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiVGhlIGxvY2FsIFVSSSB3aGVyZSB0byBzYXZlIHRoZSBmaWxl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1VHR0VTVEVEX0ZJTEVOQU1FLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWdnZXN0ZWQtZmlsZW5hbWUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1Z2dlc3RlZCBGaWxlbmFtZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZpbGVuYW1lIHN1Z2dlc3Rl
ZCBhcyBkZWZhdWx0IHdoZW4gc2F2aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ1VS
UkVOVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50
LXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkN1cnJlbnQgU2l6
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGxlbmd0aCBvZiB0
aGUgZGF0YSBhbHJlYWR5IGRvd25sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidG90YWwtc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiVG90YWwgU2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhl
IHRvdGFsIHNpemUgb2YgdGhlIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShkb3dubG9hZENsYXNzLCBzaXplb2YoV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfaW5pdChXZWJLaXRXZWJEb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICBwcml2LT5kb3du
bG9hZENsaWVudCA9IG5ldyBEb3dubG9hZENsaWVudChkb3dubG9hZCk7CisgICAgcHJpdi0+Y3Vy
cmVudFNpemUgPSAwOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFU
RV9DUkVBVEVEOworfQorCitXZWJLaXRXZWJEb3dubG9hZCogd2Via2l0X3dlYl9kb3dubG9hZF9u
ZXcoY29uc3QgZ2NoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh1cmksIDAp
OworCisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X25ldyh1cmkpOworICAgIFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtp
dF93ZWJfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdChyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91
bnJlZihyZXF1ZXN0KTsKKyAgICByZXR1cm4gZG93bmxvYWQ7Cit9CisKK1dlYktpdFdlYkRvd25s
b2FkKiB3ZWJraXRfd2ViX2Rvd25sb2FkX25ld19mcm9tX3JlcXVlc3QoV2ViS2l0TmV0d29ya1Jl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7
CisKKyAgICBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfV0VCX0RPV05MT0FE
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRE9XTkxPQUQsICJuZXR3b3JrLXJlcXVlc3Qi
LCByZXF1ZXN0LCBOVUxMKSk7CisgICAgcmV0dXJuIGRvd25sb2FkOworfQorCisvLyBQcml2YXRl
IGZ1bmN0aW9uLgorLy8gRklYTUUgVXNlIFdlYktpdE5ldHdvcmtSZXNwb25zZSB3aGVuIHdlIGhh
dmUgaXQKK1dlYktpdFdlYkRvd25sb2FkKiB3ZWJraXRfd2ViX2Rvd25sb2FkX25ld19mcm9tX2V4
aXN0aW5nX2Nvbm5lY3Rpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgV2ViS2l0TmV0d29ya1Jl
cXVlc3QqIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViS2l0V2ViRG93bmxv
YWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9kb3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0IChyZXF1
ZXN0KTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJf
RE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHByaXYtPnJlc291cmNlSGFuZGxl
ID0gaGFuZGxlOworICAgIHByaXYtPm5ldHdvcmtSZXNwb25zZSA9IG5ldyBSZXNvdXJjZVJlc3Bv
bnNlKHJlc3BvbnNlKTsKKworICAgIHJldHVybiBkb3dubG9hZDsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF93ZWJfZG93bmxvYWRfb3Blbl9jaGFubmVsX3dpdGhfdG1wX2ZpbGUoV2ViS2l0
V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdjaGFyKiBmaWxlbmFtZTsKKyAgICBnaW50
IGZkID0gZ19maWxlX29wZW5fdG1wKCJkb3dubG9hZC1YWFhYWFgiLCAmZmlsZW5hbWUsIDApOwor
ICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGdjaGFyKiB1cmkg
PSBnX2ZpbGVuYW1lX3RvX3VyaShmaWxlbmFtZSwgMCwgMCk7CisgICAgZ19mcmVlKGZpbGVuYW1l
KTsKKyAgICBpZiAoIXVyaSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgd2Via2l0X3dl
Yl9kb3dubG9hZF9zZXRfbG9jYWxfdXJpKGRvd25sb2FkLCB1cmkpOworICAgIGdfZnJlZSh1cmkp
OworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dO
TE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcHJpdi0+b3V0cHV0Q2hhbm5lbCA9IGdf
aW9fY2hhbm5lbF91bml4X25ldyhmZCk7CisgICAgaWYgKHByaXYtPm91dHB1dENoYW5uZWwpCisg
ICAgICAgIGdfaW9fY2hhbm5lbF9zZXRfY2xvc2Vfb25fdW5yZWYocHJpdi0+b3V0cHV0Q2hhbm5l
bCwgVFJVRSk7CisKKyAgICBpZiAocHJpdi0+b3V0cHV0Q2hhbm5lbCkKKyAgICAgICAgZ19pb19j
aGFubmVsX3NldF9lbmNvZGluZyhwcml2LT5vdXRwdXRDaGFubmVsLCAwLCAwKTsKKworICAgIHJl
dHVybiBwcml2LT5vdXRwdXRDaGFubmVsICE9IDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfd2ViX2Rvd25sb2FkX29wZW5fY2hhbm5lbF9mb3JfdXJpKFdlYktpdFdlYkRvd25sb2FkKiBk
b3dubG9hZCwgY29uc3QgZ2NoYXIqIHVyaSwgZ2Jvb2xlYW4gYXBwZW5kPUZBTFNFKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVyaSwgRkFMU0UpOworIAorICAgIFdlYktpdFdlYkRvd25s
b2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxv
YWQpOworICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfZmlsZW5hbWVfZnJvbV91cmkodXJpLCAwLCAw
KTsKKyAgICBpZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBwcml2
LT5vdXRwdXRDaGFubmVsID0gZ19pb19jaGFubmVsX25ld19maWxlKGZpbGVuYW1lLCBhcHBlbmQg
PyAiYSIgOiAidyIsIDApOworICAgIGdfZnJlZShmaWxlbmFtZSk7CisKKyAgICBpZiAocHJpdi0+
b3V0cHV0Q2hhbm5lbCkKKyAgICAgICAgZ19pb19jaGFubmVsX3NldF9lbmNvZGluZyhwcml2LT5v
dXRwdXRDaGFubmVsLCAwLCAwKTsKKworICAgIHJldHVybiBwcml2LT5vdXRwdXRDaGFubmVsICE9
IDA7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfY2xvc2VfY2hhbm5lbChX
ZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2
YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7Cisg
ICAgaWYgKHByaXYtPm91dHB1dENoYW5uZWwpIHsKKyAgICAgICAgZ19pb19jaGFubmVsX3VucmVm
KHByaXYtPm91dHB1dENoYW5uZWwpOworICAgICAgICBwcml2LT5vdXRwdXRDaGFubmVsID0gMDsK
KyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9zdGFydChXZWJLaXRXZWJEb3du
bG9hZCogZG93bmxvYWQpCit7ICAgIAorICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9ET1dOTE9BRChkb3dubG9hZCkpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0NS
RUFURUQpOworCisgICAgaWYgKHByaXYtPnJlc291cmNlSGFuZGxlKQorICAgICAgICBwcml2LT5y
ZXNvdXJjZUhhbmRsZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkQ2xpZW50KTsKKyAgICBlbHNl
IHsKKyAgICAgICAgLy8gRklYTUUgdXNlIGtpdChwcml2LT5uZXR3b3JrUmVxdWVzdCkgd2hlbiBX
ZWJLaXROZXR3b3JrUmVxdWVzdCB3aWxsIGJlIGZpbmlzaGVkLgorICAgICAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdCh3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocHJpdi0+bmV0d29y
a1JlcXVlc3QpKTsKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUgPSBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKHJlcXVlc3QsIHByaXYtPmRvd25sb2FkQ2xpZW50LCAwLCBmYWxzZSwgZmFsc2Us
IGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+bG9jYWxVcmkpCisgICAgICAgIHdlYmtp
dF93ZWJfZG93bmxvYWRfb3Blbl9jaGFubmVsX2Zvcl91cmkoZG93bmxvYWQsIHByaXYtPmxvY2Fs
VXJpKTsKKyAgICBlbHNlCisgICAgICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfb3Blbl9jaGFubmVs
X3dpdGhfdG1wX2ZpbGUoZG93bmxvYWQpOworCisgICAgaWYgKCFwcml2LT5vdXRwdXRDaGFubmVs
KSB7CisgICAgICAgIC8vIEZJWE1FIEhhbmRsZSBlcnJvcnMuCisgICAgICAgIGdfd2FybmluZygi
RmFpbGVkIHRvIGNyZWF0ZSB0aGUgb3V0cHV0IGZpbGU6ICVzIiwgcHJpdi0+bG9jYWxVcmkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfY2Fu
Y2VsIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXRXZWJEb3du
bG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25s
b2FkKTsKKworICAgIGlmIChwcml2LT5yZXNvdXJjZUhhbmRsZSkKKyAgICAgICAgcHJpdi0+cmVz
b3VyY2VIYW5kbGUtPmNhbmNlbCgpOworCisgICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfV0VCX0RP
V05MT0FEX1NUQVRFX0NBTkNFTExFRDsKKworICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBXRUJLSVRfV0VCX0RPV05M
T0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLCAiVXNlciBjYW5jZWxsZWQgdGhlIGRvd25sb2Fk
IiwgJmhhbmRsZWQpOworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9kb3dubG9hZF9nZXRf
dXJpKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisKKyAgICBXZWJL
aXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklW
QVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJp
KHByaXYtPm5ldHdvcmtSZXF1ZXN0KTsKK30KKworV2ViS2l0TmV0d29ya1JlcXVlc3QqIHdlYmtp
dF93ZWJfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChXZWJLaXRXZWJEb3dubG9hZCogZG93
bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9B
RChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJu
IHByaXYtPm5ldHdvcmtSZXF1ZXN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25s
b2FkX3NldF9yZXNwb25zZShXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIC8vIEZJWE1FIFVzZSBXZWJLaXROZXR3b3Jr
UmVzcG9uc2Ugd2hlbiBpdCdzIG1lcmdlZAorICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHBy
aXYtPm5ldHdvcmtSZXNwb25zZSA9IG5ldyBSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30K
KworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFt
ZShXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0
V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFU
RShkb3dubG9hZCk7CisgICAgcmV0dXJuIHByaXYtPnN1Z2dlc3RlZEZpbGVuYW1lOworfQorCit2
b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfc2V0X3N1Z2dlc3RlZF9maWxlbmFtZShXZWJLaXRXZWJE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBmaWxlbmFtZSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQoZG93bmxvYWQpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKGZpbGVuYW1lKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIGlmIChw
cml2LT5zdWdnZXN0ZWRGaWxlbmFtZSAmJiAhc3RyY21wKHByaXYtPnN1Z2dlc3RlZEZpbGVuYW1l
LCBmaWxlbmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdfZnJlZShwcml2LT5zdWdnZXN0
ZWRGaWxlbmFtZSk7CisgICAgcHJpdi0+c3VnZ2VzdGVkRmlsZW5hbWUgPSBnX3N0cmR1cChmaWxl
bmFtZSk7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInN1Z2dlc3Rl
ZC1maWxlbmFtZSIpOworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9kb3dubG9hZF9nZXRf
bG9jYWxfdXJpKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sgICAKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisK
KyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FE
X0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gcHJpdi0+bG9jYWxVcmk7Cit9CisK
K3ZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9zZXRfbG9jYWxfdXJpKFdlYktpdFdlYkRvd25sb2Fk
KiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIGxvY2FsVXJpKQoreyAgIAorICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChkb3dubG9hZCkpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwobG9jYWxVcmkpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0g
V0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgaWYgKHByaXYt
PmxvY2FsVXJpICYmICFzdHJjbXAocHJpdi0+bG9jYWxVcmksIGxvY2FsVXJpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRklYTUUgY2FuIHdlIGhhdmUgYSBiZXR0ZXIgY2hlY2s/CisgICAg
aWYgKHByaXYtPnN0YXRlICE9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRCAmJiBw
cml2LT5zdGF0ZSAhPSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCkgeworICAg
ICAgICBBU1NFUlQocHJpdi0+bG9jYWxVcmkpOworCisgICAgICAgIGdib29sZWFuIGRvd25sb2Fk
aW5nID0gcHJpdi0+b3V0cHV0Q2hhbm5lbCAhPSAwOworICAgICAgICBpZiAoZG93bmxvYWRpbmcp
CisgICAgICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2Nsb3NlX2NoYW5uZWwoZG93bmxvYWQp
OworCisgICAgICAgIGdjaGFyKiBzcmNGaWxlbmFtZSA9IGdfZmlsZW5hbWVfZnJvbV91cmkocHJp
di0+bG9jYWxVcmksIDAsIDApOworICAgICAgICBnY2hhciogZGVzdEZpbGVuYW1lID0gZ19maWxl
bmFtZV9mcm9tX3VyaShsb2NhbFVyaSwgMCwgMCk7CisgICAgICAgIGlmICghc3JjRmlsZW5hbWUg
fHwgIWRlc3RGaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGdfcmVu
YW1lKHNyY0ZpbGVuYW1lLCBkZXN0RmlsZW5hbWUpIDwgMCkgeworICAgICAgICAgICAgZ193YXJu
aW5nKCJJbXBvc3NpYmxlIHRvIG1vdmUgdGhlIGRvd25sb2FkIGZyb20gJXMgdG8gJXMiLCBzcmNG
aWxlbmFtZSwgZGVzdEZpbGVuYW1lKTsKKyAgICAgICAgICAgIGdfZnJlZShzcmNGaWxlbmFtZSk7
CisgICAgICAgICAgICBnX2ZyZWUoZGVzdEZpbGVuYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdfZnJlZShzcmNGaWxlbmFtZSk7CisgICAgICAgIGdfZnJl
ZShkZXN0RmlsZW5hbWUpOworCisgICAgICAgIGlmIChkb3dubG9hZGluZykgeworICAgICAgICAg
ICAgaWYgKCF3ZWJraXRfd2ViX2Rvd25sb2FkX29wZW5fY2hhbm5lbF9mb3JfdXJpKGRvd25sb2Fk
LCBsb2NhbFVyaSwgVFJVRSkpIHsKKyAgICAgICAgICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2Fk
X2NhbmNlbChkb3dubG9hZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgZ19mcmVlKHByaXYtPmxvY2FsVXJpKTsKKyAgICBw
cml2LT5sb2NhbFVyaSA9IGdfc3RyZHVwKGxvY2FsVXJpKTsKKyAgICBnX29iamVjdF9ub3RpZnko
R19PQkpFQ1QoZG93bmxvYWQpLCAibG9jYWwtdXJpIik7Cit9CisKK1dlYktpdFdlYkRvd25sb2Fk
U3RhdGUgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfc3RhdGUgKFdlYktpdFdlYkRvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05M
T0FEKGRvd25sb2FkKSwgV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9FUlJPUik7CisgICAgCisg
ICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9H
RVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIHByaXYtPnN0YXRlOworfQorCisvLyBG
SVhNRSBkb2N1bWVudCB0aGF0IHRoaXMgY2FuIGJlIGRpZmZlcmVudCBmcm9tIGV4cGVjdGVkQ29u
dGVudExlbmd0aCgpLgorZ3VpbnQ2NCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF90b3RhbF9zaXpl
IChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChkb3dubG9hZCksIDApOworICAgIAorICAgIFdlYktp
dFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZB
VEUoZG93bmxvYWQpOworICAgIGlmICghcHJpdi0+bmV0d29ya1Jlc3BvbnNlKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBNQVgocHJpdi0+Y3VycmVudFNpemUsIHByaXYtPm5ldHdv
cmtSZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpOworfQorCitndWludDY0IHdlYmtp
dF93ZWJfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZSAoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25s
b2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQo
ZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHJldHVybiBwcml2
LT5jdXJyZW50U2l6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9yZWNl
aXZlZF9kYXRhKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIGRhdGEs
IGludCBsZW5ndGgpCit7CisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICBpZiAocHJpdi0+
Y3VycmVudFNpemUgPT0gMCkgeworICAgICAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9XRUJfRE9X
TkxPQURfU1RBVEVfU1RBUlRFRDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25s
b2FkLCAic3RhcnRlZCIpOworICAgIH0KKworICAgIEFTU0VSVChwcml2LT5vdXRwdXRDaGFubmVs
KTsKKyAgICAvKiBGSVhNRSBNYWtlIHRoaXMgYXN5bmM/IE5vdGUgdGhhdCBpdCdzIG5vdCBwb3Nz
aWJsZSB3aXRoIEdJT0NoYW5uZWwgdW5sZXNzIHlvdSBidWZmZXIKKyAgICAgKiB0aGUgZGF0YSBp
biBtZW1vcnkuICovCisgICAgaWYgKGdfaW9fY2hhbm5lbF93cml0ZV9jaGFycyhwcml2LT5vdXRw
dXRDaGFubmVsLCBkYXRhLCBsZW5ndGgsIE5VTEwsIE5VTEwpICE9IEdfSU9fU1RBVFVTX05PUk1B
TCkgeworICAgICAgICAvLyBGSVhNRSBjaGVjayBlcnJvcnMKKyAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBwcml2LT5jdXJyZW50U2l6ZSArPSBsZW5ndGg7Cisg
ICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImN1cnJlbnQtc2l6ZSIpOwor
CisgICAgQVNTRVJUKHByaXYtPm5ldHdvcmtSZXNwb25zZSk7CisgICAgaWYgKHByaXYtPmN1cnJl
bnRTaXplID4gcHJpdi0+bmV0d29ya1Jlc3BvbnNlLT5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkK
KyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInRvdGFsLXNpemUi
KTsKKworICAgIC8qIEZJWE1FIHRocm90dGxlIHRoZSBudW1iZXIgb2YgdXBkYXRlcz8KKyAgICAg
KiBzaG91bGQgd2UgcmVtb3ZlIHRoZSBwcmV2aW91cyBnX29iamVjdF9ub3RpZnkoKXMgaWYgd2Ug
YXJlIGdvaW5nIHRvIHRocm90dGxlCisgICAgICogdGhlIHByb2dyZXNzIHVwZGF0ZXM/ICovCisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAicHJvZ3Jlc3MtdXBkYXRlIiwgKGd1
aW50KXByaXYtPmN1cnJlbnRTaXplLCAoZ3VpbnQpd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfdG90
YWxfc2l6ZShkb3dubG9hZCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2Fk
X2ZpbmlzaGVkX2xvYWRpbmcoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIHdl
YmtpdF93ZWJfZG93bmxvYWRfY2xvc2VfY2hhbm5lbChkb3dubG9hZCk7CisKKyAgICBXZWJLaXRX
ZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRF
KGRvd25sb2FkKTsKKyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVf
RklOSVNIRUQ7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZmluaXNoZWQi
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9lcnJvcihXZWJLaXRXZWJE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIHdl
YmtpdF93ZWJfZG93bmxvYWRfY2xvc2VfY2hhbm5lbChkb3dubG9hZCk7CisKKyAgICBXZWJLaXRX
ZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRF
KGRvd25sb2FkKTsKKyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVf
RVJST1I7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9ORVRXT1JL
LCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksICZoYW5kbGVkKTsK
K30KKworRG93bmxvYWRDbGllbnQ6OkRvd25sb2FkQ2xpZW50KFdlYktpdFdlYkRvd25sb2FkKiBk
b3dubG9hZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCit7Cit9CisKK3ZvaWQgRG93bmxv
YWRDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfc2V0X3Jl
c3BvbnNlKG1fZG93bmxvYWQsIHJlc3BvbnNlKTsKK30KKwordm9pZCBEb3dubG9hZENsaWVudDo6
ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9yZWNl
aXZlZF9kYXRhKG1fZG93bmxvYWQsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRG93bmxvYWRD
bGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIHdlYmtpdF93
ZWJfZG93bmxvYWRfZmluaXNoZWRfbG9hZGluZyhtX2Rvd25sb2FkKTsKK30KKwordm9pZCBEb3du
bG9hZENsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQoreworICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfZXJyb3IobV9kb3dubG9hZCwgZXJy
b3IpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50Ojp3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxl
KikKK3sKKyAgICAvLyBGSVhNRSB3aGVuIHdlIGhhdmUgdGhlIG5ldyBmcmFtZSBsb2FkZXIgc2ln
bmFscyBhbmQgZXJyb3IgaGFuZGxpbmcuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBEb3dubG9hZENsaWVudDo6Y2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopCit7CisgICAg
Ly8gRklYTUUgd2hlbiB3ZSBoYXZlIHRoZSBuZXcgZnJhbWUgbG9hZGVyIHNpZ25hbHMgYW5kIGVy
cm9yIGhhbmRsaW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmggYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmE3NDQ1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJk
b3dubG9hZC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1dFQl9ET1dOTE9BRF9ICisjZGVmaW5lIFdFQktJ
VF9XRUJfRE9XTkxPQURfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9XRUJfRE9XTkxPQUQgICAgICAgICAgICAod2Via2l0X3dlYl9kb3dubG9hZF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RPV05MT0FEKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9ET1dOTE9BRCwg
V2ViS2l0V2ViRG93bmxvYWQpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RPV05MT0FEX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dF
Ql9ET1dOTE9BRCwgV2ViS2l0V2ViRG93bmxvYWRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19X
RUJfRE9XTkxPQUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FEKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9ET1dO
TE9BRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9XRUJfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBF
X1dFQl9ET1dOTE9BRCwgV2ViS2l0V2ViRG93bmxvYWRDbGFzcykpCisKK3R5cGVkZWYgZW51bSB7
ICAgIAorICAgIFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfRVJST1IgPSAtMSwKKyAgICBXRUJL
SVRfV0VCX0RPV05MT0FEX1NUQVRFX0NSRUFURUQgPSAwLAorICAgIFdFQktJVF9XRUJfRE9XTkxP
QURfU1RBVEVfU1RBUlRFRCwKKyAgICBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0NBTkNFTExF
RCwKKyAgICBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVECit9IFdlYktpdFdlYkRv
d25sb2FkU3RhdGU7CisKK3R5cGVkZWYgZW51bSB7ICAgIAorICAgIFdFQktJVF9XRUJfRE9XTkxP
QURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIsCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJP
Ul9ORVRXT1JLCit9IFdlYktpdFdlYkRvd25sb2FkRXJyb3I7CisKK3N0cnVjdCBfV2ViS2l0V2Vi
RG93bmxvYWQgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJE
b3dubG9hZENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50OworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICAg
KHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkRvd25sb2FkICoKK3dlYmtpdF93ZWJfZG93
bmxvYWRfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBnY2hhciAqdXJpKTsKKwor
V0VCS0lUX0FQSSBXZWJLaXRXZWJEb3dubG9hZCAqCit3ZWJraXRfd2ViX2Rvd25sb2FkX25ld19m
cm9tX3JlcXVlc3QgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1JlcXVlc3QgKnJlcXVlc3QpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZG93bmxvYWRfc3RhcnQgICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJEb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF93ZWJfZG93bmxvYWRfY2FuY2VsICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJEb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFy
Kgord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0TmV0d29ya1Jl
cXVlc3QqCit3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QgICAgICAgICAo
V2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
cioKK3dlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZSAgICAgIChXZWJL
aXRXZWJEb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93
ZWJfZG93bmxvYWRfc2V0X3N1Z2dlc3RlZF9maWxlbmFtZSAgICAgIChXZWJLaXRXZWJEb3dubG9h
ZCAgICAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKmZpbGVuYW1lKTsKKworV0VCS0lUX0FQSSBj
b25zdCBnY2hhcioKK3dlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X2xvY2FsX3VyaSAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJEb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF93ZWJfZG93bmxvYWRfc2V0X2xvY2FsX3VyaSAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJEb3dubG9hZCAgICAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKmxvY2FsX3VyaSk7CisKK1dF
QktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZSAgICAg
ICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkg
Z3VpbnQ2NAord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplICAgICAgICAgICAg
KFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2Vi
RG93bmxvYWRTdGF0ZQord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfc3RhdGUgICAgICAgICAgICAg
ICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVj
aXNpb24uY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3Bw
CmluZGV4IDAxNWEyODIuLjY5M2I5MzMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnBvbGljeWRlY2lzaW9uLmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJwb2xpY3lkZWNpc2lvbi5jcHAKQEAgLTEwNywxMyArMTA3LDggQEAgdm9pZCB3ZWJraXRfd2Vi
X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNp
b24pCiAKICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvblByaXZhdGUqIHByaXYgPSBkZWNpc2lv
bi0+cHJpdjsKIAotICAgIGdfd2FybmluZygiRG93bmxvYWQgaXMgbm90IHN1cHBvcnRlZCIpOwot
ICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2lnbm9yZShkZWNpc2lvbik7Ci0KLSNpZiAw
CiAgICAgaWYgKCFwcml2LT5pc0NhbmNlbGxlZCkKICAgICAgICAgKGNvcmUocHJpdi0+ZnJhbWUp
LT5sb2FkZXIoKS0+Kihwcml2LT5mcmFtZVBvbGljeUZ1bmN0aW9uKSkoV2ViQ29yZTo6UG9saWN5
RG93bmxvYWQpOwotI2VuZGlmCiB9CiAKIHZvaWQgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25f
Y2FuY2VsKFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAKaW5kZXggZGJmYzg4OC4uMDA0MmIzYiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CisjaW5jbHVkZSAid2Via2l0d2ViZG93bmxvYWQuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3
LmgiCiAjaW5jbHVkZSAid2Via2l0ZW51bXR5cGVzLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hh
bC5oIgpAQCAtOTMsNiArOTQsNyBAQCBlbnVtIHsKICAgICBDT1BZX0NMSVBCT0FSRCwKICAgICBQ
QVNURV9DTElQQk9BUkQsCiAgICAgQ1VUX0NMSVBCT0FSRCwKKyAgICBET1dOTE9BRF9DUkVBVEVE
LAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC03MTAsNiArNzEyLDEzIEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19yZWFsX3Bhc3RlX2NsaXBib2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiUGFzdGUiKS5leGVjdXRlKCk7CiB9
CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9kb3dubG9hZF9jcmVhdGVk
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOyAgCisgICAgLy8gUmV0
dXJuIGZhbHNlIHRvIGluZGljYXRlIGl0IHdhc24ndCBoYW5kbGVkIHRoZXJlZm9yZSB0aGUgZG93
bmxvYWQgaXMgZGVsZXRlZAorICAgIHJldHVybiBGQUxTRTsKK30KKwogc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7CkBAIC04ODIsNiArODkxLDI0
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdD
bGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgR19UWVBFX1BPSU5URVIsCiAgICAgICAg
ICAgICBHX1RZUEVfUE9JTlRFUik7CiAKKyAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6
ZG93bmxvYWQtY3JlYXRlZDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2gg
dGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGRvd25sb2FkOiB0aGUgbWVzc2FnZSB0ZXh0
CisgICAgICogQHJldHVybjogVFJVRSBpZiB0aGUgZG93bmxvYWQgd2FzIGhhbmRsZWQsIG90aGVy
d2lzZSBpdCdsbCBiZSBjYW5jZWxsZWQuCisgICAgICoKKyAgICAgKiBBIG5ldyBEb3dubG9hZCBo
YXMgYmVlbiBjcmVhdGVkCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbRE9X
TkxPQURfQ1JFQVRFRF0gPSBnX3NpZ25hbF9uZXcoImRvd25sb2FkLWNyZWF0ZWQiLAorICAgICAg
ICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2ln
bmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAg
ICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGRvd25sb2FkX2NyZWF0ZWQp
LAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAg
ICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwK
KyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgR19UWVBFX09CSkVD
VCk7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXN0YXJ0ZWQ6CiAgICAg
ICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApA
QCAtMTE5MCw2ICsxMjE3LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2lu
aXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5j
dXRfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3V0X2NsaXBib2FyZDsKICAgICB3
ZWJWaWV3Q2xhc3MtPmNvcHlfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY29weV9j
bGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5wYXN0ZV9jbGlwYm9hcmQgPSB3ZWJraXRfd2Vi
X3ZpZXdfcmVhbF9wYXN0ZV9jbGlwYm9hcmQ7CisgICAgd2ViVmlld0NsYXNzLT5kb3dubG9hZF9j
cmVhdGVkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfZG93bmxvYWRfY3JlYXRlZDsKIAogICAgIEdP
YmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpOwog
ICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCA4N2NkYTllLi4zOWVlMGRhIDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5oCkBAIC0xMDAsNiArMTAwLDggQEAgc3RydWN0IF9XZWJLaXRXZWJW
aWV3Q2xhc3MgewogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICgqIGN1dF9jbGlwYm9h
cmQpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwogICAgIHZvaWQg
ICAgICAgICAgICAgICAgICAgICAgICgqIGNvcHlfY2xpcGJvYXJkKSAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg
ICgqIHBhc3RlX2NsaXBib2FyZCkgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3Zp
ZXcpOworICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICgqIGRvd25sb2FkX2NyZWF0ZWQp
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkRvd25s
b2FkICAgICpkb3dubG9hZCk7CiAKICAgICAvKgogICAgICAqIGludGVybmFsCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMgYi9XZWJLaXRUb29scy9HdGtMYXVuY2hl
ci9tYWluLmMKaW5kZXggOGVkMjY5MC4uMTQzODVkZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
R3RrTGF1bmNoZXIvbWFpbi5jCisrKyBiL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpA
QCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNiArMTA3LDEwNyBAQCBnb19m
b3J3YXJkX2NiIChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKICAgICB3ZWJraXRf
d2ViX3ZpZXdfZ29fZm9yd2FyZCAod2ViX3ZpZXcpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4KK2Rv
d25sb2FkX2Vycm9yX2NiIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQsIGd1aW50IGRvbWFp
biwgV2ViS2l0V2ViRG93bmxvYWRFcnJvciBlcnJvciwgY29uc3QgZ2NoYXIgKiBtZXNzYWdlLCBn
cG9pbnRlciBkYXRhKQoreworICAgIGdfd2FybmluZygiRG93bmxvYWQgRXJyb3I6ICVzXG4iLCBt
ZXNzYWdlKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2Rvd25sb2FkX2Zp
bmlzaGVkX2NiIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgZ3RrX2J1dHRvbl9zZXRfbGFiZWwoR1RLX0JVVFRPTihkYXRhKSwgR1RLX1NUT0NLX0NM
T1NFKTsKK30KKworc3RhdGljIHZvaWQKK2Rvd25sb2FkX3Byb2dyZXNzX2NiIChXZWJLaXRXZWJE
b3dubG9hZCogZG93bmxvYWQsIGd1aW50IGN1cnJlbnRfYnl0ZXMsIGd1aW50IHRvdGFsX2J5dGVz
LCBncG9pbnRlciBwcm9ncmVzc19iYXIpCit7CisgICAgaWYoR1RLX0lTX1BST0dSRVNTX0JBUihw
cm9ncmVzc19iYXIpKQorICAgIHsKKyAgICAgICAgZ2RvdWJsZSBwcm9ncmVzcyA9IChkb3VibGUp
Y3VycmVudF9ieXRlcy90b3RhbF9ieXRlczsKKyAgICAgICAgZ3RrX3Byb2dyZXNzX2Jhcl9zZXRf
ZnJhY3Rpb24oR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzc19iYXIpLCBwcm9ncmVzcyk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZAorZG93bmxvYWRfYnV0dG9uX2NiIChHdGtCdXR0b24qIGJ1dHRv
biwgV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGlmICh3ZWJraXRfd2ViX2Rv
d25sb2FkX2dldF9zdGF0ZShkb3dubG9hZCkgPT0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9G
SU5JU0hFRCB8fAorICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9zdGF0ZShkb3dubG9h
ZCkgPT0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9FUlJPUikgeworICAgICAgICBHZGtXaW5k
b3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVChidXR0
b24pKTsKKyAgICAgICAgZ2RrX3dpbmRvd19oaWRlKHdpbmRvdyk7CisgICAgICAgIGdfb2JqZWN0
X3VucmVmKGRvd25sb2FkKTsKKyAgICB9IGVsc2UgCisgICAgICAgIHdlYmtpdF93ZWJfZG93bmxv
YWRfY2FuY2VsKGRvd25sb2FkKTsKK30KKworc3RhdGljIHZvaWQKK3NhdmVfZGlhbG9nX3Jlc3Bv
bnNlX2NiIChHdGtGaWxlQ2hvb3NlciAqZmlsZV9jaG9vc2VyLCBnaW50IHJlc3BvbnNlLCBXZWJL
aXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgaWYgKHJlc3BvbnNlID09IEdUS19SRVNQ
T05TRV9PSykgeworICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9sb2NhbF91cmkoZG93
bmxvYWQsIGd0a19maWxlX2Nob29zZXJfZ2V0X3VyaSAoR1RLX0ZJTEVfQ0hPT1NFUiAoZmlsZV9j
aG9vc2VyKSkpOworICAgIH0gLyplbHNlIHsKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95ICh3
aW5kb3cpOworICAgICAgICBoYW5kbGVkID0gRkFMU0U7CisgICAgfSovCisKKyAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kgKGZpbGVfY2hvb3Nlcik7Cit9CisgICAgICAKK3N0YXRpYyBnYm9vbGVhbgor
ZG93bmxvYWRfY3JlYXRlZF9jYiAoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRG93bmxv
YWQqIGRvd25sb2FkLCBncG9pbnRlciBkYXRhKQoreworICAgIGdib29sZWFuIGhhbmRsZWQgPSBU
UlVFOworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1df
VE9QTEVWRUwpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwg
IkRvd25sb2FkIik7CisgICAgCisgICAgR3RrV2lkZ2V0KiB2Ym94ID0gZ3RrX3Zib3hfbmV3KFRS
VUUsIDApOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVS
KHZib3gpLCA1KTsKKyAgICAKKyAgICBHdGtXaWRnZXQqIHVyaV9sYWJlbCA9IGd0a19sYWJlbF9u
ZXcoTlVMTCk7CisgICAgZ3RrX2xhYmVsX3NldF9zaW5nbGVfbGluZV9tb2RlKEdUS19MQUJFTCh1
cmlfbGFiZWwpLCBGQUxTRSk7CisgICAgZ3RrX2xhYmVsX3NldF9tYXJrdXAoR1RLX0xBQkVMKHVy
aV9sYWJlbCksIAorICAgICAgICBnX3N0cmNvbmNhdCgiPGI+VVJJOjwvYj4gIiwgCisgICAgICAg
ICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLCAKKyAgICAgICAgICAg
ICJcbjxiPkZpbGVuYW1lOjwvYj4gIiwKKyAgICAgICAgICAgIHdlYmtpdF93ZWJfZG93bmxvYWRf
Z2V0X3N1Z2dlc3RlZF9maWxlbmFtZShkb3dubG9hZCksCisgICAgICAgICAgICBOVUxMKQorICAg
ICAgICApOworICAgIGd0a19sYWJlbF9zZXRfanVzdGlmeShHVEtfTEFCRUwodXJpX2xhYmVsKSwg
R1RLX0pVU1RJRllfTEVGVCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCks
IHVyaV9sYWJlbCwgRkFMU0UsIEZBTFNFLCAwKTsKKworICAgIEd0a1dpZGdldCogcHJvZ3Jlc3Nf
YmFyID0gZ3RrX3Byb2dyZXNzX2Jhcl9uZXcoKTsgICAgICAgICAKKyAgICBndGtfcHJvZ3Jlc3Nf
YmFyX3NldF9vcmllbnRhdGlvbihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzX2JhciksIEdUS19Q
Uk9HUkVTU19MRUZUX1RPX1JJR0hUKTsKKyAgICBndGtfcHJvZ3Jlc3NfYmFyX3NldF9mcmFjdGlv
bihHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzX2JhciksIDAuMCk7IAorICAgIGd0a19ib3hfcGFj
a19zdGFydChHVEtfQk9YKHZib3gpLCBwcm9ncmVzc19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CisK
KyAgICBHdGtXaWRnZXQqIGJ1dHRvbl9ib3ggPSBndGtfaGJ1dHRvbl9ib3hfbmV3KCk7CisgICAg
Z3RrX2J1dHRvbl9ib3hfc2V0X2xheW91dChHVEtfQlVUVE9OX0JPWChidXR0b25fYm94KSwgR1RL
X0JVVFRPTkJPWF9FTkQpOworICAgIEd0a1dpZGdldCogYnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdf
ZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0IChHX09C
SkVDVCAoYnV0dG9uKSwgImNsaWNrZWQiLCBHX0NBTExCQUNLIChkb3dubG9hZF9idXR0b25fY2Ip
LCBkb3dubG9hZCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYnV0dG9uX2JveCks
IGJ1dHRvbiwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WCh2Ym94KSwgYnV0dG9uX2JveCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICAKKyAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpOworICAgIAorICAgIGd0a193
aWRnZXRfc2hvd19hbGwoR1RLX1dJREdFVCh3aW5kb3cpKTsKKyAgICAKKyAgICBHdGtXaWRnZXQq
IGZpbGVfY2hvb3NlciA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldygiU2VsZWN0IGRlc3Rp
bmF0aW9uLi4uIiwgR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9T
QVZFLCBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLCBHVEtfU1RPQ0tfU0FW
RSwgR1RLX1JFU1BPTlNFX09LLCBOVUxMKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9jdXJy
ZW50X25hbWUgKEdUS19GSUxFX0NIT09TRVIgKGZpbGVfY2hvb3NlciksIHdlYmtpdF93ZWJfZG93
bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZSAoZG93bmxvYWQpKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0IChHX09CSkVDVCAoZmlsZV9jaG9vc2VyKSwgInJlc3BvbnNlIiwgR19DQUxMQkFDSyAo
c2F2ZV9kaWFsb2dfcmVzcG9uc2VfY2IpLCBkb3dubG9hZCk7CisgICAgZ3RrX3dpZGdldF9zaG93
IChmaWxlX2Nob29zZXIpOworCisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGRvd25s
b2FkKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyAoZG93bmxvYWRfZmluaXNoZWRfY2IpLCBidXR0
b24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChkb3dubG9hZCksICJwcm9ncmVz
cy11cGRhdGUiLCBHX0NBTExCQUNLIChkb3dubG9hZF9wcm9ncmVzc19jYiksIHByb2dyZXNzX2Jh
cik7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGRvd25sb2FkKSwgImVycm9yIiwg
R19DQUxMQkFDSyAoZG93bmxvYWRfZXJyb3JfY2IpLCB3aW5kb3cpOworCisgICAgaWYgKGhhbmRs
ZWQpCisgICAgICAgIGdfb2JqZWN0X3JlZihkb3dubG9hZCk7CisKKyAgICByZXR1cm4gaGFuZGxl
ZDsKK30KKwogc3RhdGljIEd0a1dpZGdldCoKIGNyZWF0ZV9icm93c2VyICgpCiB7CkBAIC0xMTks
NiArMjIxLDcgQEAgY3JlYXRlX2Jyb3dzZXIgKCkKICAgICBnX3NpZ25hbF9jb25uZWN0IChHX09C
SkVDVCAod2ViX3ZpZXcpLCAibG9hZC1wcm9ncmVzcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAocHJv
Z3Jlc3NfY2hhbmdlX2NiKSwgd2ViX3ZpZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JK
RUNUICh3ZWJfdmlldyksICJsb2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sgKGxvYWRfY29tbWl0
X2NiKSwgd2ViX3ZpZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmll
dyksICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLIChsaW5rX2hvdmVyX2NiKSwgd2Vi
X3ZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJkb3du
bG9hZC1jcmVhdGVkIiwgR19DQUxMQkFDSyAoZG93bmxvYWRfY3JlYXRlZF9jYiksIHdlYl92aWV3
KTsKIAogICAgIHJldHVybiBzY3JvbGxlZF93aW5kb3c7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26200</attachid>
            <date>2008-12-22 04:35:32 -0800</date>
            <delta_ts>2009-01-27 11:37:33 -0800</delta_ts>
            <desc>reworked to apply on current webkit</desc>
            <filename>download.diff</filename>
            <type>text/plain</type>
            <size>38847</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggN2FlYzA2
MS4uNDk4MmMwNCAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTMxMiw2ICszMTIsNyBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnNldHRpbmdzLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2Zl
YXR1cmVzLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmggXAogCVdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAogCiB3ZWJraXRndGtfYnVpbHRfc291cmNl
cyArPSBcCkBAIC0zNDYsNiArMzQ3LDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93
bmxvYWQuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuY3BwCiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDNmMWNhMjcuLmYzZGI3YzIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcApAQCAtMjEwLDkgKzIxMCwxMiBAQCB2b2lkIE1haW5S
ZXNvdXJjZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3koUG9saWN5QWN0aW9uIGNv
bnRlbnRQb2xpY3ksCiAKICAgICBjYXNlIFBvbGljeURvd25sb2FkOgogICAgICAgICBmcmFtZUxv
YWRlcigpLT5jbGllbnQoKS0+ZG93bmxvYWQobV9oYW5kbGUuZ2V0KCksIHJlcXVlc3QoKSwgbV9o
YW5kbGUuZ2V0KCktPnJlcXVlc3QoKSwgcik7CisgICAgICAgIC8vIENVUkwgcmV1c2VzIHRoZSBz
YW1lIFJlc291cmNlSGFuZGxlIHRvIGRvd25sb2FkIHRoZSBmaWxlLCBzbyB3ZSBjYW5ub3QgY2xv
c2UgaXQuCisjaWYgIVVTRShDVVJMKQogICAgICAgICAvLyBJdCBtaWdodCBoYXZlIGdvbmUgbWlz
c2luZwogICAgICAgICBpZiAoZnJhbWVMb2FkZXIoKSkKICAgICAgICAgICAgIHJlY2VpdmVkRXJy
b3IoaW50ZXJydXB0aW9uRm9yUG9saWN5Q2hhbmdlRXJyb3IoKSk7CisjZW5kaWYKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY2FzZSBQb2xpY3lJZ25vcmU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAppbmRleCBjYTI0ZWM1Li4w
NGY5YTE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmwuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybC5jcHAKQEAgLTEwMyw3ICsxMDMsMTAgQEAgUmVzb3VyY2VIYW5kbGU6On5S
ZXNvdXJjZUhhbmRsZSgpCiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBBU1NFUlQoZnJhbWUpOworICAgIC8qCisgICAgICogVGhlIGZyYW1lIGNvdWxk
IGJlIG51bGwgaXMgdGhlIFJlc291cmNlSGFuZGxlIGlzIG5vdCBhc3NvY2lhdGVkCisgICAgICog
dG8gYW55IEZyYW1lLCBpLmUuIGlmIHdlIGFyZSBkb3dubG9hZGluZyBhIGZpbGUuCisgICAgICov
CiAgICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLT5hZGQodGhpcyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCA1ZmQzYTRkLi42OTkzYTQ0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291
cC5jcHAKQEAgLTMyNiw5ICszMjYsMTIgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJh
bWUqIGZyYW1lKQogewogICAgIEFTU0VSVCghZC0+bV9tc2cpOwogCi0gICAgLy8gSWYgd2UgYXJl
IG5vIGxvbmdlciBhdHRhY2hlZCB0byBhIFBhZ2UsIHRoaXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQg
bG9hZCBmcm9tIGFuCi0gICAgLy8gb25VbmxvYWQgaGFuZGxlciwgc28gbGV0J3MganVzdCBibG9j
ayBpdC4KLSAgICBpZiAoIWZyYW1lLT5wYWdlKCkpCisKKyAgICAvKiBUaGUgZnJhbWUgY291bGQg
YmUgbnVsbCBpcyB0aGUgUmVzb3VyY2VIYW5kbGUgaXMgbm90IGFzc29jaWF0ZWQgdG8gYW55Cisg
ICAgICogRnJhbWUsIGkuZS4gaWYgd2UgYXJlIGRvd25sb2FkaW5nIGEgZmlsZS4KKyAgICAgKiBJ
ZiB0aGUgZnJhbWUgaXMgbm90IG51bGwgYnV0IHRoZSBwYWdlIGlzIG51bGwgdGhpcyBtdXN0IGJl
IGFuIGF0dGVtcHRlZAorICAgICAqIGxvYWQgZnJvbSBhbiBvblVubG9hZCBoYW5kbGVyLCBzbyBs
ZXQncyBqdXN0IGJsb2NrIGl0LiAqLworICAgIGlmIChmcmFtZSAmJiAhZnJhbWUtPnBhZ2UoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgS1VSTCB1cmwgPSByZXF1ZXN0KCkudXJsKCk7
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCmluZGV4IGI5ZDRlODMuLjZhYTdlMzQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0zNyw2ICszNyw4IEBACiAjaW5j
bHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5o
IgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
QEAgLTc0OSw5ICs3NTEsMjMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRG
YWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9mcmFtZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1l
KTsKKyAgICAvLyBGSVhNRTogVXNlIGluaXRpYWxSZXF1ZXN0PworICAgIC8vIEZJWE1FOiBEb24n
dCBjcmVhdGUgbmV0d29ya1JlcXVlc3QgZnJvbSB0aGUgVVJJIGJ1dCBmcm9tIHRoZSBmdWxsIG9i
amVjdCB3aGVuIHRoZSBuZXcgQVBJIGlzIG1lcmdlZC4KKyAgICBXZWJLaXROZXR3b3JrUmVxdWVz
dCogbmV0d29ya1JlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyhyZXF1ZXN0LnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYktpdFdlYkRvd25sb2FkKiBkb3du
bG9hZCA9IHdlYmtpdF93ZWJfZG93bmxvYWRfbmV3X2Zyb21fZXhpc3RpbmdfY29ubmVjdGlvbiho
YW5kbGUsIG5ldHdvcmtSZXF1ZXN0LCByZXNwb25zZSk7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsK
KyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUodmlldywgImRvd25sb2FkLWNyZWF0ZWQiLCBkb3du
bG9hZCwgJmhhbmRsZWQpOworCisgICAgaWYgKGhhbmRsZWQpIHsKKyAgICAgICAgd2Via2l0X3dl
Yl9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBo
YW5kbGUtPmNhbmNlbCgpOworICAgICAgICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7CisgICAg
fQogfQogCiBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRleCA4Yzg2OGEyLi5mZjUzZmE5
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAorKysgYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXR2ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
d2ViZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
d2ViaW5zcGVjdG9yLmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZp
bmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggZjk0ZTcxMC4u
ZGY0Yjc3YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisr
KyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtNjgsNiArNjgsOSBAQCB0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViV2luZG93RmVhdHVyZXNDbGFzcyBXZWJLaXRXZWJXaW5k
b3dGZWF0dXJlc0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2Vi
VmlldzsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2ViS2l0V2ViVmlld0Ns
YXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRG93bmxvYWQgV2ViS2l0V2ViRG93bmxv
YWQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRG93bmxvYWRDbGFzcyBXZWJLaXRXZWJEb3du
bG9hZENsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaAppbmRleCA4ZjczNGYxLi5kM2UyYzU5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CkBAIC0yNywxMSArMjcsMTQgQEAKICAqIFRoZXkgYXJlIHVzaW5nIFdlYkNvcmUgd2hpY2ggbXVz
bid0IGJlIGV4cG9zZWQgdG8gdGhlIG91dGVyIHdvcmxkLgogICovCiAKKyNpbmNsdWRlIDxjdXJs
L2N1cmwuaD4KKwogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KQEAgLTQ0LDkgKzQ3LDEzIEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGll
bnQuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCiAjaW5jbHVkZSA8Z2xpYi5o
PgogCitjbGFzcyBEb3dubG9hZENsaWVudDsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2Vi
S2l0V2ViVmlldyogZ2V0Vmlld0Zyb21GcmFtZShXZWJLaXRXZWJGcmFtZSopOwogCkBAIC0xMTUs
NiArMTIyLDIwIEBAIGV4dGVybiAiQyIgewogICAgICAgICBnY2hhciogdXJpOwogICAgIH07CiAK
KyAgICAjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUob2JqKSAgICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfRE9XTkxPQUQs
IFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSkpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YkRvd25sb2FkUHJpdmF0ZSBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGU7CisgICAgc3RydWN0IF9X
ZWJLaXRXZWJEb3dubG9hZFByaXZhdGUgeworICAgICAgICBnY2hhciogbG9jYWxVcmk7CisgICAg
ICAgIGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZTsKKyAgICAgICAgZ3VpbnQgY3VycmVudFNpemU7
CisgICAgICAgIFdlYktpdFdlYkRvd25sb2FkU3RhdGUgc3RhdGU7CisgICAgICAgIEdJT0NoYW5u
ZWwqIG91dHB1dENoYW5uZWw7CisgICAgICAgIERvd25sb2FkQ2xpZW50KiBkb3dubG9hZENsaWVu
dDsKKyAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIG5ldHdvcmtSZXF1ZXN0OworICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBuZXR3b3JrUmVzcG9uc2U7CisgICAgICAgIFJl
ZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gcmVzb3VyY2VIYW5kbGU7CisgICAgfTsKKwog
ICAgIFdlYktpdFdlYkZyYW1lKgogICAgIHdlYmtpdF93ZWJfZnJhbWVfaW5pdF93aXRoX3dlYl92
aWV3KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKIApA
QCAtMTQyLDYgKzE2Myw5IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQKICAgICB3ZWJraXRfd2Vi
X3BvbGljeV9kZWNpc2lvbl9jYW5jZWwgKFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNpc2lv
bik7CiAKKyAgICBXZWJLaXRXZWJEb3dubG9hZCoKKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX25l
d19mcm9tX2V4aXN0aW5nX2Nvbm5lY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBXZWJL
aXROZXR3b3JrUmVxdWVzdCosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKwog
ICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVpciBB
UEkgaGFzIGJlZW4gZGlzY3Vzc2VkLgogCiAgICAgV0VCS0lUX0FQSSBHU0xpc3QqCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5jcHAgYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDZmODQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmRvd25sb2FkLmNwcApAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUg
IndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJkb3dubG9hZC5oIgorI2luY2x1
ZGUgIndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2V4dGVybiAiQyIg
eworCitjbGFzcyBEb3dubG9hZENsaWVudCA6IE5vbmNvcHlhYmxlLCBwdWJsaWMgUmVzb3VyY2VI
YW5kbGVDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRG93bmxvYWRDbGllbnQoV2ViS2l0
V2ViRG93bmxvYWQqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50
LCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhh
bmRsZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVz
b3VyY2VIYW5kbGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3Vy
Y2VIYW5kbGUqKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFdlYktpdFdlYkRvd25sb2FkKiBt
X2Rvd25sb2FkOworfTsKKworZW51bSB7CisgICAgLyogbm9ybWFsIHNpZ25hbHMgKi8KKyAgICBT
VEFSVEVELAorICAgIFBST0dSRVNTX1VQREFURSwKKyAgICBGSU5JU0hFRCwKKyAgICBFUlJPUiwK
KyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF93ZWJfZG93bmxvYWRf
c2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK2VudW0geworICAgIFBST1BfMCwKKwor
ICAgIFBST1BfTkVUV09SS19SRVFVRVNULAorICAgIFBST1BfTE9DQUxfVVJJLAorICAgIFBST1Bf
U1VHR0VTVEVEX0ZJTEVOQU1FLAorICAgIFBST1BfQ1VSUkVOVF9TSVpFLAorICAgIFBST1BfVE9U
QUxfU0laRSwKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViRG93bmxvYWQsIHdlYmtpdF93
ZWJfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rv
d25sb2FkX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJEb3dubG9h
ZCogZG93bmxvYWQgPSBXRUJLSVRfV0VCX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0V2Vi
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShk
b3dubG9hZCk7CisKKyAgICAvKiBXZSBkb24ndCBjYWxsIHdlYmtpdF93ZWJfZG93bmxvYWRfY2Fu
Y2VsKCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGVtaXQKKyAgICAgKiBzaWduYWxzIHdoZW4g
ZmluYWxpc2luZyBhbiBvYmplY3QuICovCisgICAgaWYgKHByaXYtPnJlc291cmNlSGFuZGxlKSB7
CisgICAgICAgIGlmIChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX1NU
QVJURUQpIHsKKyAgICAgICAgICAgIHByaXYtPnJlc291cmNlSGFuZGxlLT5zZXRDbGllbnQoMCk7
CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CisgICAgICAgIH0K
KyAgICAgICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUucmVsZWFzZSgpOworICAgIH0KKworICAgIGRl
bGV0ZSBwcml2LT5kb3dubG9hZENsaWVudDsKKyAgICBkZWxldGUgcHJpdi0+bmV0d29ya1Jlc3Bv
bnNlOworCisgICAgZ19mcmVlKHByaXYtPmxvY2FsVXJpKTsKKyAgICBnX2ZyZWUocHJpdi0+c3Vn
Z2VzdGVkRmlsZW5hbWUpOworICAgIGlmIChwcml2LT5vdXRwdXRDaGFubmVsKQorICAgICAgICBn
X2lvX2NoYW5uZWxfdW5yZWYocHJpdi0+b3V0cHV0Q2hhbm5lbCk7CisgICAgZ19vYmplY3RfdW5y
ZWYocHJpdi0+bmV0d29ya1JlcXVlc3QpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dl
Yl9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9XRUJfRE9XTkxPQUQob2JqZWN0KTsK
KworICAgIHN3aXRjaChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05FVFdPUktfUkVRVUVTVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dl
dF9uZXR3b3JrX3JlcXVlc3QoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0xPQ0FMX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
d2ViX2Rvd25sb2FkX2dldF9sb2NhbF91cmkoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NVR0dFU1RFRF9GSUxFTkFNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93
bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfU0laRToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9j
dXJyZW50X3NpemUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RP
VEFMX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3dlYl9k
b3dubG9hZF9nZXRfdG90YWxfc2l6ZShkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rv
d25sb2FkX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworICAgIFdlYktpdFdlYkRvd25s
b2FkKiBkb3dubG9hZCA9IFdFQktJVF9XRUJfRE9XTkxPQUQob2JqZWN0KTsKKyAgICBXZWJLaXRX
ZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRF
KGRvd25sb2FkKTsKKworICAgIHN3aXRjaChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05FVFdP
UktfUkVRVUVTVDoKKyAgICAgICAgcHJpdi0+bmV0d29ya1JlcXVlc3QgPSAoV2ViS2l0TmV0d29y
a1JlcXVlc3QqKWdfdmFsdWVfZHVwX29iamVjdCh2YWx1ZSk7CisgICAgICAgIC8qIFRoaXMgaXMg
c2FmZSBhcyBuZXR3b3JrLXJlcXVlc3QgaXMgYSBjb25zdHJ1Y3Qgb25seSBwcm9wZXJ0eSBhbmQg
c3VnZ2VzdGVkRmlsZW5hbWUKKyAgICAgICAgICogaXMgaW5pdGlhbGx5IG51bGwuICovCisgICAg
ICAgIHByaXYtPnN1Z2dlc3RlZEZpbGVuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZSh3ZWJraXRf
bmV0d29ya19yZXF1ZXN0X2dldF91cmkocHJpdi0+bmV0d29ya1JlcXVlc3QpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0xPQ0FMX1VSSToKKyAgICAgICAgd2Via2l0X3dlYl9kb3du
bG9hZF9zZXRfbG9jYWxfdXJpKGRvd25sb2FkLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NVR0dFU1RFRF9GSUxFTkFNRToKKyAgICAg
ICAgd2Via2l0X3dlYl9kb3dubG9hZF9zZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKGRvd25sb2FkLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9j
bGFzc19pbml0KFdlYktpdFdlYkRvd25sb2FkQ2xhc3MqIGRvd25sb2FkQ2xhc3MpCit7CisgICAg
LyoKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCisgICAgICovCisg
ICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGRvd25sb2FkQ2xh
c3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfZG93bmxvYWRfZmlu
YWxpemU7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF93ZWJfZG93bmxv
YWRfZ2V0X3Byb3BlcnR5OworICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRf
d2ViX2Rvd25sb2FkX3NldF9wcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZp
ZXc6OmZpbmlzaGVkOgorICAgICAqIEBkb3dubG9hZDogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUg
c2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAqIFRoZSBmaWxlIGhhcyBiZWVuIHN1Y2Nl
c3NmdWxseSBkb3dubG9hZGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfc2ln
bmFsc1tGSU5JU0hFRF0gPSBnX3NpZ25hbF9uZXcoImZpbmlzaGVkIiwKKyAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKGRvd25sb2FkQ2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0
X21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwLAorICAgICAg
ICAgICAgR19UWVBFX05PTkUpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6c3Rh
cnRlZDoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBp
cyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBUaGUgZG93bmxvYWQgaGFzIHN0YXJ0ZWQuICBIYXBw
ZW5zIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBwcm9ncmVzcy11cGRhdGUgc2lnbmFsLgorICAgICAq
LworICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfc2lnbmFsc1tTVEFSVEVEXSA9IGdfc2lnbmFsX25l
dygic3RhcnRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhkb3dubG9hZENsYXNz
KSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdO
QUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAg
ICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAg
ICAgICBHX1RZUEVfTk9ORSwgMCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FKTsKKworICAgIC8q
KgorICAgICAqIFdlYktpdFdlYlZpZXc6OnByb2dyZXNzLXVwZGF0ZToKKyAgICAgKiBAZG93bmxv
YWQ6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGN1
cnJlbnRfYnl0ZXM6IHRoZSBjdXJyZW50IGNvdW50IG9mIGJ5dGVzIGRvd25sb2FkZWQKKyAgICAg
KiBAdG90YWxfYnl0ZXM6IHRoZSB0b3RhbCBieXRlcyBjb3VudCBpbiB0aGUgZG93bmxvYWRlZCBm
aWxlLCBha2EgZmlsZSBzaXplLgorICAgICAqICAKKyAgICAgKiBJbmRpY2F0ZXMgcHJvZ3Jlc3Mg
aW4gdGhlIGRvd25sb2FkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfc2lnbmFs
c1tQUk9HUkVTU19VUERBVEVdID0gZ19zaWduYWxfbmV3KCJwcm9ncmVzcy11cGRhdGUiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZG93bmxvYWRDbGFzcyksCisgICAgICAgICAgICAo
R1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19VSU5UX1VJTlQsCisgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9VSU5ULAorICAgICAgICAgICAgR19UWVBFX1VJ
TlQpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cHJvZ3Jlc3MtdXBkYXRlOgor
ICAgICAqIEBkb3dubG9hZDogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKKyAgICAgKiBAY3VycmVudF9ieXRlczogdGhlIGN1cnJlbnQgY291bnQgb2YgYnl0ZXMgZG93
bmxvYWRlZAorICAgICAqIEB0b3RhbF9ieXRlczogdGhlIHRvdGFsIGJ5dGVzIGNvdW50IGluIHRo
ZSBkb3dubG9hZGVkIGZpbGUsIGFrYSBmaWxlIHNpemUuCisgICAgICogIAorICAgICAqIEluZGlj
YXRlcyBwcm9ncmVzcyBpbiB0aGUgZG93bmxvYWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl9k
b3dubG9hZF9zaWduYWxzW0VSUk9SXSA9IGdfc2lnbmFsX25ldygiZXJyb3IiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZG93bmxvYWRDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAg
ICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX0lOVF9J
TlRfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCisgICAgICAgICAgICBH
X1RZUEVfSU5ULAorICAgICAgICAgICAgR19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9T
VFJJTkcpOworCisgICAgLyoKKyAgICAgKiBwcm9wZXJ0aWVzCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfTkVUV09SS19SRVFVRVNULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJuZXR3b3JrLXJlcXVlc3QiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk5ldHdvcmsgUmVxdWVzdCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiVGhlIG5ldHdvcmsgcmVxdWVzdCBmb3IgdGhlIFVSSSB0aGF0
IHNob3VsZCBiZSBkb3dubG9hZGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChHUGFyYW1GbGFncykoV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9MT0NBTF9VUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2Fs
LXVyaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYWwgVVJJIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbG9jYWwgVVJJIHdoZXJl
IHRvIHNhdmUgdGhlIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENs
YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVUdHRVNURURf
RklMRU5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Z2dlc3Rl
ZC1maWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VnZ2Vz
dGVkIEZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUg
ZmlsZW5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmciLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImN1cnJlbnQtc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiQ3VycmVudCBTaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRlZCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ1VSUkVOVF9TSVpFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0b3RhbC1zaXplIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJUb3RhbCBTaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGRvd25sb2FkQ2xhc3MsIHNpemVvZihXZWJLaXRXZWJEb3du
bG9hZFByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9pbml0
KFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXRXZWJEb3dubG9hZFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsK
KworICAgIHByaXYtPmRvd25sb2FkQ2xpZW50ID0gbmV3IERvd25sb2FkQ2xpZW50KGRvd25sb2Fk
KTsKKyAgICBwcml2LT5jdXJyZW50U2l6ZSA9IDA7CisgICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRf
V0VCX0RPV05MT0FEX1NUQVRFX0NSRUFURUQ7Cit9CisKK1dlYktpdFdlYkRvd25sb2FkKiB3ZWJr
aXRfd2ViX2Rvd25sb2FkX25ldyhjb25zdCBnY2hhciogdXJpKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHVyaSwgMCk7CisKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9
IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHVyaSk7CisgICAgV2ViS2l0V2ViRG93bmxvYWQq
IGRvd25sb2FkID0gd2Via2l0X3dlYl9kb3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0KHJlcXVlc3Qp
OworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworICAgIHJldHVybiBkb3dubG9hZDsKK30K
KworV2ViS2l0V2ViRG93bmxvYWQqIHdlYmtpdF93ZWJfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVz
dChXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChyZXF1ZXN0LCAwKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCA9IFdF
QktJVF9XRUJfRE9XTkxPQUQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9ET1dOTE9BRCwg
Im5ldHdvcmstcmVxdWVzdCIsIHJlcXVlc3QsIE5VTEwpKTsKKyAgICByZXR1cm4gZG93bmxvYWQ7
Cit9CisKKy8vIFByaXZhdGUgZnVuY3Rpb24uCisvLyBGSVhNRSBVc2UgV2ViS2l0TmV0d29ya1Jl
c3BvbnNlIHdoZW4gd2UgaGF2ZSBpdAorV2ViS2l0V2ViRG93bmxvYWQqIHdlYmtpdF93ZWJfZG93
bmxvYWRfbmV3X2Zyb21fZXhpc3RpbmdfY29ubmVjdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAg
ICBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2ViX2Rvd25sb2FkX25ld19m
cm9tX3JlcXVlc3QgKHJlcXVlc3QpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcHJp
di0+cmVzb3VyY2VIYW5kbGUgPSBoYW5kbGU7CisgICAgcHJpdi0+bmV0d29ya1Jlc3BvbnNlID0g
bmV3IFJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UpOworCisgICAgcmV0dXJuIGRvd25sb2FkOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl9kb3dubG9hZF9vcGVuX2NoYW5uZWxfd2l0
aF90bXBfZmlsZShXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ2NoYXIqIGZp
bGVuYW1lOworICAgIGdpbnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAoImRvd25sb2FkLVhYWFhYWCIs
ICZmaWxlbmFtZSwgMCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor
CisgICAgZ2NoYXIqIHVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1lLCAwLCAwKTsKKyAg
ICBnX2ZyZWUoZmlsZW5hbWUpOworICAgIGlmICghdXJpKQorICAgICAgICByZXR1cm4gRkFMU0U7
CisKKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9sb2NhbF91cmkoZG93bmxvYWQsIHVyaSk7
CisgICAgZ19mcmVlKHVyaSk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBwcml2LT5v
dXRwdXRDaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGZkKTsKKyAgICBpZiAocHJpdi0+
b3V0cHV0Q2hhbm5lbCkKKyAgICAgICAgZ19pb19jaGFubmVsX3NldF9jbG9zZV9vbl91bnJlZihw
cml2LT5vdXRwdXRDaGFubmVsLCBUUlVFKTsKKworICAgIGlmIChwcml2LT5vdXRwdXRDaGFubmVs
KQorICAgICAgICBnX2lvX2NoYW5uZWxfc2V0X2VuY29kaW5nKHByaXYtPm91dHB1dENoYW5uZWws
IDAsIDApOworCisgICAgcmV0dXJuIHByaXYtPm91dHB1dENoYW5uZWwgIT0gMDsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF93ZWJfZG93bmxvYWRfb3Blbl9jaGFubmVsX2Zvcl91cmkoV2Vi
S2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogdXJpLCBnYm9vbGVhbiBhcHBl
bmQ9RkFMU0UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCBGQUxTRSk7CisgCisg
ICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9H
RVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgZ2NoYXIqIGZpbGVuYW1lID0gZ19maWxlbmFtZV9m
cm9tX3VyaSh1cmksIDAsIDApOworICAgIGlmICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBG
QUxTRTsKKworICAgIHByaXYtPm91dHB1dENoYW5uZWwgPSBnX2lvX2NoYW5uZWxfbmV3X2ZpbGUo
ZmlsZW5hbWUsIGFwcGVuZCA/ICJhIiA6ICJ3IiwgMCk7CisgICAgZ19mcmVlKGZpbGVuYW1lKTsK
KworICAgIGlmIChwcml2LT5vdXRwdXRDaGFubmVsKQorICAgICAgICBnX2lvX2NoYW5uZWxfc2V0
X2VuY29kaW5nKHByaXYtPm91dHB1dENoYW5uZWwsIDAsIDApOworCisgICAgcmV0dXJuIHByaXYt
Pm91dHB1dENoYW5uZWwgIT0gMDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9h
ZF9jbG9zZV9jaGFubmVsKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBXZWJL
aXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklW
QVRFKGRvd25sb2FkKTsKKyAgICBpZiAocHJpdi0+b3V0cHV0Q2hhbm5lbCkgeworICAgICAgICBn
X2lvX2NoYW5uZWxfdW5yZWYocHJpdi0+b3V0cHV0Q2hhbm5lbCk7CisgICAgICAgIHByaXYtPm91
dHB1dENoYW5uZWwgPSAwOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX3N0
YXJ0KFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sgICAgCisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXRXZWJE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRv
d25sb2FkKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPnN0YXRlID09IFdFQktJVF9XRUJf
RE9XTkxPQURfU1RBVEVfQ1JFQVRFRCk7CisKKyAgICBpZiAocHJpdi0+cmVzb3VyY2VIYW5kbGUp
CisgICAgICAgIHByaXYtPnJlc291cmNlSGFuZGxlLT5zZXRDbGllbnQocHJpdi0+ZG93bmxvYWRD
bGllbnQpOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhNRSB1c2Uga2l0KHByaXYtPm5ldHdv
cmtSZXF1ZXN0KSB3aGVuIFdlYktpdE5ldHdvcmtSZXF1ZXN0IHdpbGwgYmUgZmluaXNoZWQuCisg
ICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0
X3VyaShwcml2LT5uZXR3b3JrUmVxdWVzdCkpOworICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRs
ZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUocmVxdWVzdCwgcHJpdi0+ZG93bmxvYWRDbGllbnQs
IDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChwcml2LT5sb2NhbFVy
aSkKKyAgICAgICAgd2Via2l0X3dlYl9kb3dubG9hZF9vcGVuX2NoYW5uZWxfZm9yX3VyaShkb3du
bG9hZCwgcHJpdi0+bG9jYWxVcmkpOworICAgIGVsc2UKKyAgICAgICAgd2Via2l0X3dlYl9kb3du
bG9hZF9vcGVuX2NoYW5uZWxfd2l0aF90bXBfZmlsZShkb3dubG9hZCk7CisKKyAgICBpZiAoIXBy
aXYtPm91dHB1dENoYW5uZWwpIHsKKyAgICAgICAgLy8gRklYTUUgSGFuZGxlIGVycm9ycy4KKyAg
ICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBvdXRwdXQgZmlsZTogJXMiLCBw
cml2LT5sb2NhbFVyaSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0
X3dlYl9kb3dubG9hZF9jYW5jZWwgKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQoZG93bmxvYWQpKTsKKwor
ICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9XTkxPQURf
R0VUX1BSSVZBVEUoZG93bmxvYWQpOworCisgICAgaWYgKHByaXYtPnJlc291cmNlSGFuZGxlKQor
ICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CisKKyAgICBwcml2LT5zdGF0
ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVEOworCisgICAgZ2Jvb2xlYW4g
aGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAs
IFdFQktJVF9XRUJfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIsICJVc2VyIGNhbmNl
bGxlZCB0aGUgZG93bmxvYWQiLCAmaGFuZGxlZCk7Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRf
d2ViX2Rvd25sb2FkX2dldF91cmkoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQoZG93bmxvYWQpLCBO
VUxMKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJf
RE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHJldHVybiB3ZWJraXRfbmV0d29y
a19yZXF1ZXN0X2dldF91cmkocHJpdi0+bmV0d29ya1JlcXVlc3QpOworfQorCitXZWJLaXROZXR3
b3JrUmVxdWVzdCogd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0KFdlYktp
dFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJEb3du
bG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25s
b2FkKTsKKyAgICByZXR1cm4gcHJpdi0+bmV0d29ya1JlcXVlc3Q7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfZG93bmxvYWRfc2V0X3Jlc3BvbnNlKFdlYktpdFdlYkRvd25sb2FkKiBkb3du
bG9hZCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgLy8gRklYTUUg
VXNlIFdlYktpdE5ldHdvcmtSZXNwb25zZSB3aGVuIGl0J3MgbWVyZ2VkCisgICAgV2ViS2l0V2Vi
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShk
b3dubG9hZCk7CisgICAgcHJpdi0+bmV0d29ya1Jlc3BvbnNlID0gbmV3IFJlc291cmNlUmVzcG9u
c2UocmVzcG9uc2UpOworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9kb3dubG9hZF9nZXRf
c3VnZ2VzdGVkX2ZpbGVuYW1lKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgTlVM
TCk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RP
V05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gcHJpdi0+c3VnZ2VzdGVk
RmlsZW5hbWU7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9zZXRfc3VnZ2VzdGVkX2Zp
bGVuYW1lKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIGZpbGVuYW1l
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChkb3dubG9h
ZCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlsZW5hbWUpOworCisgICAgV2ViS2l0V2ViRG93
bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3du
bG9hZCk7CisgICAgaWYgKHByaXYtPnN1Z2dlc3RlZEZpbGVuYW1lICYmICFzdHJjbXAocHJpdi0+
c3VnZ2VzdGVkRmlsZW5hbWUsIGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19m
cmVlKHByaXYtPnN1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICBwcml2LT5zdWdnZXN0ZWRGaWxlbmFt
ZSA9IGdfc3RyZHVwKGZpbGVuYW1lKTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93
bmxvYWQpLCAic3VnZ2VzdGVkLWZpbGVuYW1lIik7Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRf
d2ViX2Rvd25sb2FkX2dldF9sb2NhbF91cmkoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQor
eyAgIAorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQoZG93
bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHJldHVybiBwcml2
LT5sb2NhbFVyaTsKK30KKwordm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9sb2NhbF91cmko
V2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogbG9jYWxVcmkpCit7ICAg
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChsb2NhbFVyaSk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9h
ZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2Fk
KTsKKyAgICBpZiAocHJpdi0+bG9jYWxVcmkgJiYgIXN0cmNtcChwcml2LT5sb2NhbFVyaSwgbG9j
YWxVcmkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRSBjYW4gd2UgaGF2ZSBhIGJl
dHRlciBjaGVjaz8KKyAgICBpZiAocHJpdi0+c3RhdGUgIT0gV0VCS0lUX1dFQl9ET1dOTE9BRF9T
VEFURV9DUkVBVEVEICYmIHByaXYtPnN0YXRlICE9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVf
Q0FOQ0VMTEVEKSB7CisgICAgICAgIEFTU0VSVChwcml2LT5sb2NhbFVyaSk7CisKKyAgICAgICAg
Z2Jvb2xlYW4gZG93bmxvYWRpbmcgPSBwcml2LT5vdXRwdXRDaGFubmVsICE9IDA7CisgICAgICAg
IGlmIChkb3dubG9hZGluZykKKyAgICAgICAgICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfY2xvc2Vf
Y2hhbm5lbChkb3dubG9hZCk7CisKKyAgICAgICAgZ2NoYXIqIHNyY0ZpbGVuYW1lID0gZ19maWxl
bmFtZV9mcm9tX3VyaShwcml2LT5sb2NhbFVyaSwgMCwgMCk7CisgICAgICAgIGdjaGFyKiBkZXN0
RmlsZW5hbWUgPSBnX2ZpbGVuYW1lX2Zyb21fdXJpKGxvY2FsVXJpLCAwLCAwKTsKKyAgICAgICAg
aWYgKCFzcmNGaWxlbmFtZSB8fCAhZGVzdEZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAoZ19yZW5hbWUoc3JjRmlsZW5hbWUsIGRlc3RGaWxlbmFtZSkgPCAwKSB7Cisg
ICAgICAgICAgICBnX3dhcm5pbmcoIkltcG9zc2libGUgdG8gbW92ZSB0aGUgZG93bmxvYWQgZnJv
bSAlcyB0byAlcyIsIHNyY0ZpbGVuYW1lLCBkZXN0RmlsZW5hbWUpOworICAgICAgICAgICAgZ19m
cmVlKHNyY0ZpbGVuYW1lKTsKKyAgICAgICAgICAgIGdfZnJlZShkZXN0RmlsZW5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ19mcmVlKHNyY0ZpbGVuYW1l
KTsKKyAgICAgICAgZ19mcmVlKGRlc3RGaWxlbmFtZSk7CisKKyAgICAgICAgaWYgKGRvd25sb2Fk
aW5nKSB7CisgICAgICAgICAgICBpZiAoIXdlYmtpdF93ZWJfZG93bmxvYWRfb3Blbl9jaGFubmVs
X2Zvcl91cmkoZG93bmxvYWQsIGxvY2FsVXJpLCBUUlVFKSkgeworICAgICAgICAgICAgICAgIHdl
YmtpdF93ZWJfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX2ZyZWUocHJpdi0+
bG9jYWxVcmkpOworICAgIHByaXYtPmxvY2FsVXJpID0gZ19zdHJkdXAobG9jYWxVcmkpOworICAg
IGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJsb2NhbC11cmkiKTsKK30KKwor
V2ViS2l0V2ViRG93bmxvYWRTdGF0ZSB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9zdGF0ZSAoV2Vi
S2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJfRE9XTkxPQUQoZG93bmxvYWQpLCBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRF
X0VSUk9SKTsKKyAgICAKKyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gcHJpdi0+
c3RhdGU7Cit9CisKKy8vIEZJWE1FIGRvY3VtZW50IHRoYXQgdGhpcyBjYW4gYmUgZGlmZmVyZW50
IGZyb20gZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkuCitndWludDY0IHdlYmtpdF93ZWJfZG93bmxv
YWRfZ2V0X3RvdGFsX3NpemUgKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgMCk7
CisgICAgCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9E
T1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgaWYgKCFwcml2LT5uZXR3b3JrUmVz
cG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIE1BWChwcml2LT5jdXJyZW50
U2l6ZSwgcHJpdi0+bmV0d29ya1Jlc3BvbnNlLT5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSk7Cit9
CisKK2d1aW50NjQgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplIChXZWJLaXRX
ZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9ET1dOTE9BRChkb3dubG9hZCksIDApOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7
CisgICAgcmV0dXJuIHByaXYtPmN1cnJlbnRTaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBj
b25zdCBnY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBXZWJLaXRXZWJEb3dubG9hZFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsK
KworICAgIGlmIChwcml2LT5jdXJyZW50U2l6ZSA9PSAwKSB7CisgICAgICAgIHByaXYtPnN0YXRl
ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9TVEFSVEVEOworICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUoZG93bmxvYWQsICJzdGFydGVkIik7CisgICAgfQorCisgICAgQVNTRVJUKHBy
aXYtPm91dHB1dENoYW5uZWwpOworICAgIC8qIEZJWE1FIE1ha2UgdGhpcyBhc3luYz8gTm90ZSB0
aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHdpdGggR0lPQ2hhbm5lbCB1bmxlc3MgeW91IGJ1ZmZlcgor
ICAgICAqIHRoZSBkYXRhIGluIG1lbW9yeS4gKi8KKyAgICBpZiAoZ19pb19jaGFubmVsX3dyaXRl
X2NoYXJzKHByaXYtPm91dHB1dENoYW5uZWwsIGRhdGEsIGxlbmd0aCwgTlVMTCwgTlVMTCkgIT0g
R19JT19TVEFUVVNfTk9STUFMKSB7CisgICAgICAgIC8vIEZJWE1FIGNoZWNrIGVycm9ycworICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAgIHByaXYtPmN1cnJlbnRT
aXplICs9IGxlbmd0aDsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAi
Y3VycmVudC1zaXplIik7CisKKyAgICBBU1NFUlQocHJpdi0+bmV0d29ya1Jlc3BvbnNlKTsKKyAg
ICBpZiAocHJpdi0+Y3VycmVudFNpemUgPiBwcml2LT5uZXR3b3JrUmVzcG9uc2UtPmV4cGVjdGVk
Q29udGVudExlbmd0aCgpKQorICAgICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxv
YWQpLCAidG90YWwtc2l6ZSIpOworCisgICAgLyogRklYTUUgdGhyb3R0bGUgdGhlIG51bWJlciBv
ZiB1cGRhdGVzPworICAgICAqIHNob3VsZCB3ZSByZW1vdmUgdGhlIHByZXZpb3VzIGdfb2JqZWN0
X25vdGlmeSgpcyBpZiB3ZSBhcmUgZ29pbmcgdG8gdGhyb3R0bGUKKyAgICAgKiB0aGUgcHJvZ3Jl
c3MgdXBkYXRlcz8gKi8KKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJwcm9n
cmVzcy11cGRhdGUiLCAoZ3VpbnQpcHJpdi0+Y3VycmVudFNpemUsIChndWludCl3ZWJraXRfd2Vi
X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKGRvd25sb2FkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfZG93bmxvYWRfZmluaXNoZWRfbG9hZGluZyhXZWJLaXRXZWJEb3dubG9hZCogZG93
bmxvYWQpCit7CisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9jbG9zZV9jaGFubmVsKGRvd25sb2Fk
KTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9X
TkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX1dF
Ql9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93
bmxvYWQsICJmaW5pc2hlZCIpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2Fk
X2Vycm9yKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCit7CisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9jbG9zZV9jaGFubmVsKGRvd25sb2Fk
KTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9X
TkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX1dF
Ql9ET1dOTE9BRF9TVEFURV9FUlJPUjsKKworICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBXRUJLSVRfV0VCX0RPV05M
T0FEX0VSUk9SX05FVFdPUkssIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRh
dGEoKSwgJmhhbmRsZWQpOworfQorCitEb3dubG9hZENsaWVudDo6RG93bmxvYWRDbGllbnQoV2Vi
S2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQorICAgIDogbV9kb3dubG9hZChkb3dubG9hZCkKK3sK
K30KKwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgd2Via2l0X3dl
Yl9kb3dubG9hZF9zZXRfcmVzcG9uc2UobV9kb3dubG9hZCwgcmVzcG9uc2UpOworfQorCit2b2lk
IERvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICB3ZWJraXRf
d2ViX2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEobV9kb3dubG9hZCwgZGF0YSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSop
Cit7CisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9maW5pc2hlZF9sb2FkaW5nKG1fZG93bmxvYWQp
OworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9lcnJv
cihtX2Rvd25sb2FkLCBlcnJvcik7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGllbnQ6Ondhc0Jsb2Nr
ZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIC8vIEZJWE1FIHdoZW4gd2UgaGF2ZSB0aGUgbmV3
IGZyYW1lIGxvYWRlciBzaWduYWxzIGFuZCBlcnJvciBoYW5kbGluZy4KKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNl
SGFuZGxlKikKK3sKKyAgICAvLyBGSVhNRSB3aGVuIHdlIGhhdmUgdGhlIG5ldyBmcmFtZSBsb2Fk
ZXIgc2lnbmFscyBhbmQgZXJyb3IgaGFuZGxpbmcuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTc0NDVlMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0RPV05MT0FE
X0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9ET1dOTE9BRF9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorCisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9ET1dOTE9BRCAgICAgICAgICAgICh3ZWJraXRf
d2ViX2Rvd25sb2FkX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQUQob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfV0VCX0RPV05MT0FELCBXZWJLaXRXZWJEb3dubG9hZCkpCisjZGVmaW5lIFdFQktJVF9XRUJf
RE9XTkxPQURfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBXZWJLaXRXZWJEb3dubG9hZENsYXNzKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1dFQl9ET1dOTE9BRChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfRE9XTkxPQUQpKQorI2RlZmluZSBX
RUJLSVRfSVNfV0VCX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9ET1dOTE9BRCkpCisjZGVmaW5lIFdFQktJVF9X
RUJfRE9XTkxPQURfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBXZWJLaXRXZWJEb3dubG9hZENsYXNzKSkK
KwordHlwZWRlZiBlbnVtIHsgICAgCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9FUlJP
UiA9IC0xLAorICAgIFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRCA9IDAsCisgICAg
V0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9TVEFSVEVELAorICAgIFdFQktJVF9XRUJfRE9XTkxP
QURfU1RBVEVfQ0FOQ0VMTEVELAorICAgIFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfRklOSVNI
RUQKK30gV2ViS2l0V2ViRG93bmxvYWRTdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsgICAgCisgICAg
V0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiwKKyAgICBXRUJLSVRf
V0VCX0RPV05MT0FEX0VSUk9SX05FVFdPUksKK30gV2ViS2l0V2ViRG93bmxvYWRFcnJvcjsKKwor
c3RydWN0IF9XZWJLaXRXZWJEb3dubG9hZCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitz
dHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnQ7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF90eXBlICAg
ICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViRG93bmxvYWQg
Kgord2Via2l0X3dlYl9kb3dubG9hZF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IGdjaGFyICp1cmkpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkRvd25sb2FkICoKK3dlYmtpdF93
ZWJfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdCAgICAgICAgICAgIChXZWJLaXROZXR3b3JrUmVx
dWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9z
dGFydCAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9h
ZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9jYW5jZWwgICAgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJ
VF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF91cmkgICAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQ
SSBXZWJLaXROZXR3b3JrUmVxdWVzdCoKK3dlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X25ldHdvcmtf
cmVxdWVzdCAgICAgICAgIChXZWJLaXRXZWJEb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJL
SVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2Zp
bGVuYW1lICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9zZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lICAgICAg
KFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAqZmlsZW5hbWUp
OworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9kb3dubG9hZF9nZXRfbG9j
YWxfdXJpICAgICAgICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9zZXRfbG9jYWxfdXJpICAgICAg
ICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAq
bG9jYWxfdXJpKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfd2ViX2Rvd25sb2FkX2dl
dF90b3RhbF9zaXplICAgICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2Fk
KTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9jdXJyZW50
X3NpemUgICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRXZWJEb3dubG9hZFN0YXRlCit3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9z
dGF0ZSAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2FkKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJw
b2xpY3lkZWNpc2lvbi5jcHAKaW5kZXggM2EwNzdkMi4uZGI0ZDEwZiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwCisrKyBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmNwcApAQCAtMTEzLDkgKzExMyw2IEBA
IHZvaWQgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoV2ViS2l0V2ViUG9saWN5
RGVjaXNpb24qIGRlY2lzaW9uKQogCiAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb25Qcml2YXRl
KiBwcml2ID0gZGVjaXNpb24tPnByaXY7CiAKLSAgICBnX3dhcm5pbmcoIkRvd25sb2FkIGlzIG5v
dCBzdXBwb3J0ZWQiKTsKLSAgICB3ZWJraXRfd2ViX3BvbGljeV9kZWNpc2lvbl9pZ25vcmUoZGVj
aXNpb24pOwotCiAgICAgaWYgKCFwcml2LT5pc0NhbmNlbGxlZCkKICAgICAgICAgKGNvcmUocHJp
di0+ZnJhbWUpLT5sb2FkZXIoKS0+Kihwcml2LT5mcmFtZVBvbGljeUZ1bmN0aW9uKSkoV2ViQ29y
ZTo6UG9saWN5RG93bmxvYWQpOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRl
eCBlOThkM2Y3Li45MzVhOWI0IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJ3ZWJraXR3
ZWJkb3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJr
aXRlbnVtdHlwZXMuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCkBAIC05OSw2ICsxMDAs
NyBAQCBlbnVtIHsKICAgICBDT1BZX0NMSVBCT0FSRCwKICAgICBQQVNURV9DTElQQk9BUkQsCiAg
ICAgQ1VUX0NMSVBCT0FSRCwKKyAgICBET1dOTE9BRF9DUkVBVEVELAogICAgIExBU1RfU0lHTkFM
CiB9OwogCkBAIC03NzQsNiArNzc2LDEzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19y
ZWFsX3Bhc3RlX2NsaXBib2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiUGFzdGUiKS5leGVjdXRlKCk7CiB9CiAKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9kb3dubG9hZF9jcmVhdGVkKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgd2Via2l0X3dlYl9k
b3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOyAgCisgICAgLy8gUmV0dXJuIGZhbHNlIHRvIGluZGlj
YXRlIGl0IHdhc24ndCBoYW5kbGVkIHRoZXJlZm9yZSB0aGUgZG93bmxvYWQgaXMgZGVsZXRlZAor
ICAgIHJldHVybiBGQUxTRTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKG9iamVjdCk7CkBAIC0xMDE5LDYgKzEwMjgsMjQgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xh
c3MpCiAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKICAgICAgICAgICAgIEdfVFlQRV9QT0lO
VEVSKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpkb3dubG9hZC1jcmVhdGVk
OgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVt
aXR0ZWQKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBtZXNzYWdlIHRleHQKKyAgICAgKiBAcmV0dXJu
OiBUUlVFIGlmIHRoZSBkb3dubG9hZCB3YXMgaGFuZGxlZCwgb3RoZXJ3aXNlIGl0J2xsIGJlIGNh
bmNlbGxlZC4KKyAgICAgKgorICAgICAqIEEgbmV3IERvd25sb2FkIGhhcyBiZWVuIGNyZWF0ZWQK
KyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tET1dOTE9BRF9DUkVBVEVEXSA9
IGdfc2lnbmFsX25ldygiZG93bmxvYWQtY3JlYXRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUKFdlYktpdFdlYlZpZXdDbGFzcywgZG93bmxvYWRfY3JlYXRlZCksCisgICAgICAgICAgICBn
X3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAg
ICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgR19U
WVBFX0JPT0xFQU4sIDEsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNUKTsKKwogICAgIC8qKgog
ICAgICAqIFdlYktpdFdlYlZpZXc6OmxvYWQtc3RhcnRlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCkBAIC0xMzI4LDYgKzEzNTUs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3
Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICB3ZWJWaWV3Q2xhc3MtPmN1dF9jbGlwYm9hcmQgPSB3
ZWJraXRfd2ViX3ZpZXdfcmVhbF9jdXRfY2xpcGJvYXJkOwogICAgIHdlYlZpZXdDbGFzcy0+Y29w
eV9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jb3B5X2NsaXBib2FyZDsKICAgICB3
ZWJWaWV3Q2xhc3MtPnBhc3RlX2NsaXBib2FyZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3Bhc3Rl
X2NsaXBib2FyZDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmRvd25sb2FkX2NyZWF0ZWQgPSB3ZWJraXRf
d2ViX3ZpZXdfcmVhbF9kb3dubG9hZF9jcmVhdGVkOwogCiAgICAgR09iamVjdENsYXNzKiBvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X3dlYl92aWV3X2ZpbmFsaXplOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5oCmluZGV4IGQ3Mzc2NTguLmIzYjg2MTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmgKQEAgLTEwMiw2ICsxMDIsOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAg
dm9pZCAgICAgICAgICAgICAgICAgICAgICAgKCogY3V0X2NsaXBib2FyZCkgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAg
ICAgICAgKCogY29weV9jbGlwYm9hcmQpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3
ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgKCogcGFzdGVfY2xpcGJv
YXJkKSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7CisgICAgZ2Jvb2xl
YW4gICAgICAgICAgICAgICAgICAgKCogZG93bmxvYWRfY3JlYXRlZCkgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2Fk
KTsKIAogICAgIC8qCiAgICAgICogaW50ZXJuYWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27079</attachid>
            <date>2009-01-27 11:37:33 -0800</date>
            <delta_ts>2009-01-28 06:35:13 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>download-stand-alone.diff</filename>
            <type>text/plain</type>
            <size>41038</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggN2FlYzA2
MS4uNDk4MmMwNCAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTMxMiw2ICszMTIsNyBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnNldHRpbmdzLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2Zl
YXR1cmVzLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmggXAogCVdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAogCiB3ZWJraXRndGtfYnVpbHRfc291cmNl
cyArPSBcCkBAIC0zNDYsNiArMzQ3LDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93
bmxvYWQuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuY3BwCiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4
IGRhOTY4NzMuLmIxMzc1MTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtMzM4LDkgKzMzOCwxMiBAQCBib29sIFJl
c291cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFkLT5tX21z
Zyk7CiAKLSAgICAvLyBJZiB3ZSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgUGFnZSwgdGhp
cyBtdXN0IGJlIGFuIGF0dGVtcHRlZCBsb2FkIGZyb20gYW4KLSAgICAvLyBvblVubG9hZCBoYW5k
bGVyLCBzbyBsZXQncyBqdXN0IGJsb2NrIGl0LgotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKKwor
ICAgIC8qIFRoZSBmcmFtZSBjb3VsZCBiZSBudWxsIGlzIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBu
b3QgYXNzb2NpYXRlZCB0byBhbnkKKyAgICAgKiBGcmFtZSwgaS5lLiBpZiB3ZSBhcmUgZG93bmxv
YWRpbmcgYSBmaWxlLgorICAgICAqIElmIHRoZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBh
Z2UgaXMgbnVsbCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkCisgICAgICogbG9hZCBmcm9tIGFu
IG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQuICovCisgICAgaWYgKGZy
YW1lICYmICFmcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBLVVJM
IHVybCA9IHJlcXVlc3QoKS51cmwoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKaW5kZXggNDkwMzcwYy4uZGM3NWE3NiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAK
KysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAK
QEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgor
ICogIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5v
cmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSAiQ29u
dGV4dE1lbnUuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgogCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTE2Myw3ICsxNjUsMTcgQEAgdm9p
ZCBDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJ
dGVtKiwgY29uc3QgQ29udGV4dE0KIAogdm9pZCBDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRV
UkwoY29uc3QgS1VSTCYgdXJsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViS2l0
V2ViRG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9kb3dubG9hZF9uZXcodXJsLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsIGRvd25sb2FkLCAm
aGFuZGxlZCk7CisKKyAgICBpZiAoaGFuZGxlZCkgeworICAgICAgICB3ZWJraXRfd2ViX2Rvd25s
b2FkX3N0YXJ0KGRvd25sb2FkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdlYmtpdF93
ZWJfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZG93
bmxvYWQpOworICAgIH0KIH0KIAogdm9pZCBDb250ZXh0TWVudUNsaWVudDo6Y29weUltYWdlVG9D
bGlwYm9hcmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IDFiNDEwYzcuLmI2MjBhZTgg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4g
RHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
OSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0zOCw2ICszOSw4IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIK
ICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTc1MSw5ICs3NTQsMjMgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikK
ICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3
ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICAvLyBGSVhNRTogVXNlIGluaXRpYWxS
ZXF1ZXN0PworICAgIC8vIEZJWE1FOiBEb24ndCBjcmVhdGUgbmV0d29ya1JlcXVlc3QgZnJvbSB0
aGUgVVJJIGJ1dCBmcm9tIHRoZSBmdWxsIG9iamVjdCB3aGVuIHRoZSBuZXcgQVBJIGlzIG1lcmdl
ZC4KKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogbmV0d29ya1JlcXVlc3QgPSB3ZWJraXRfbmV0
d29ya19yZXF1ZXN0X25ldyhyZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtpdF93ZWJfZG93bmxvYWRfbmV3
X2Zyb21fZXhpc3RpbmdfY29ubmVjdGlvbihoYW5kbGUsIG5ldHdvcmtSZXF1ZXN0LCByZXNwb25z
ZSk7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUodmll
dywgImRvd25sb2FkLXJlcXVlc3RlZCIsIGRvd25sb2FkLCAmaGFuZGxlZCk7CisKKyAgICBpZiAo
aGFuZGxlZCkgeworICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3N0YXJ0KGRvd25sb2FkKTsK
KyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7CisgICAgICAgIGdf
b2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAgICB9CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVM
b2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkBAIC04
MzcsOSArODU0LDIxIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVy
cm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvCiAgICAgfQogfQogCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0KiBuZXR3b3JrUmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHJlcXVl
c3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgV2ViS2l0V2ViRG93bmxvYWQq
IGRvd25sb2FkID0gd2Via2l0X3dlYl9kb3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0KG5ldHdvcmtS
ZXF1ZXN0KTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZSh2aWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAg
IGlmIChoYW5kbGVkKSB7CisgICAgICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfc3RhcnQoZG93bmxv
YWQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd2Via2l0X3dlYl9kb3dubG9hZF9jYW5j
ZWwoZG93bmxvYWQpOworICAgICAgICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7CisgICAgfQog
fQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0LmgKaW5kZXggOGM4NjhhMi4uZmY1M2ZhOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTI0LDYgKzI0
LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmVyc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdz
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5oPgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZGVmaW5lcy5oCmluZGV4IGY5NGU3MTAuLmRmNGI3N2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
ZWZpbmVzLmgKQEAgLTY4LDYgKzY4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYldpbmRv
d0ZlYXR1cmVzQ2xhc3MgV2ViS2l0V2ViV2luZG93RmVhdHVyZXNDbGFzczsKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViVmlld0NsYXNzIFdlYktpdFdlYlZpZXdDbGFzczsKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkRvd25sb2FkIFdlYktpdFdlYkRvd25sb2FkOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YkRvd25sb2FkQ2xhc3MgV2ViS2l0V2ViRG93bmxvYWRDbGFzczsKKwogR19FTkRfREVDTFMKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggYWNlOTk2ZC4uMjQyMzgwYiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwb2xp
Y3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9u
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYndpbmRv
d2ZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5o
PgpAQCAtNDQsOSArNDUsMTMgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNl
LmgiCiAKICNpbmNsdWRlIDxnbGliLmg+CiAKK2NsYXNzIERvd25sb2FkQ2xpZW50OworCiBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRXZWJWaWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktp
dFdlYkZyYW1lKik7CiAKQEAgLTExNCw2ICsxMTksOSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAg
Z2NoYXIqIHVyaTsKICAgICB9OwogCisgICAgI2RlZmluZSBXRUJLSVRfV0VCX0RPV05MT0FEX0dF
VF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfV0VCX0RPV05MT0FELCBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUpKQorICAgIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEb3dubG9hZFByaXZhdGUgV2ViS2l0V2ViRG93bmxvYWRQ
cml2YXRlOworCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4KICAgICB3ZWJraXRfd2Vi
X2ZyYW1lX2luaXRfd2l0aF93ZWJfdmlldyhXZWJLaXRXZWJWaWV3KiwgV2ViQ29yZTo6SFRNTEZy
YW1lT3duZXJFbGVtZW50Kik7CiAKQEAgLTE0NCw2ICsxNTIsOSBAQCBleHRlcm4gIkMiIHsKICAg
ICB2b2lkCiAgICAgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25fY2FuY2VsIChXZWJLaXRXZWJQ
b2xpY3lEZWNpc2lvbiogZGVjaXNpb24pOwogCisgICAgV2ViS2l0V2ViRG93bmxvYWQqCisgICAg
d2Via2l0X3dlYl9kb3dubG9hZF9uZXdfZnJvbV9leGlzdGluZ19jb25uZWN0aW9uKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiwgV2ViS2l0TmV0d29ya1JlcXVlc3QqLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJik7CisKICAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSB0byB3ZWJraXR3
ZWJmcmFtZS5oIG9uY2UgdGhlaXIgQVBJIGhhcyBiZWVuIGRpc2N1c3NlZC4KIAogICAgIFdFQktJ
VF9BUEkgR1NMaXN0KgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93
bmxvYWQuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTY1NmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5jcHAKQEAgLTAsMCArMSw2NTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJOb25jb3B5YWJs
ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgorI2luY2x1ZGUgIndl
YmtpdHdlYmRvd25sb2FkLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2NsYXNzIERvd25sb2FkQ2xpZW50IDogTm9u
Y29weWFibGUsIHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICBEb3dubG9hZENsaWVudChXZWJLaXRXZWJEb3dubG9hZCopOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgV2ViS2l0V2ViRG93bmxvYWQqIG1fZG93bmxvYWQ7Cit9OworCitzdHJ1Y3QgX1dlYktp
dFdlYkRvd25sb2FkUHJpdmF0ZSB7CisgICAgZ2NoYXIqIGRlc3RpbmF0aW9uX3VyaTsKKyAgICBn
Y2hhciogc3VnZ2VzdGVkX2ZpbGVuYW1lOworICAgIGd1aW50IGN1cnJlbnRfc2l6ZTsKKyAgICBn
dWludCB0b3RhbF9zaXplOworICAgIFdlYktpdFdlYkRvd25sb2FkU3RhdGUgc3RhdGU7CisgICAg
R0ZpbGVPdXRwdXRTdHJlYW0qIG91dHB1dF9zdHJlYW07CisgICAgRG93bmxvYWRDbGllbnQqIGRv
d25sb2FkX2NsaWVudDsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogbmV0d29ya19yZXF1ZXN0
OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UqIG5ldHdvcmtfcmVzcG9uc2U7CisgICAg
UmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiByZXNvdXJjZV9oYW5kbGU7Cit9OworCitl
bnVtIHsKKyAgICAvKiBub3JtYWwgc2lnbmFscyAqLworICAgIFNUQVJURUQsCisgICAgUFJPR1JF
U1NfVVBEQVRFLAorICAgIEZJTklTSEVELAorICAgIEVSUk9SLAorICAgIExBU1RfU0lHTkFMCit9
OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X3dlYl9kb3dubG9hZF9zaWduYWxzW0xBU1RfU0lHTkFM
XSA9IHsgMCwgfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9ORVRXT1JLX1JF
UVVFU1QsCisgICAgUFJPUF9ERVNUSU5BVElPTl9VUkksCisgICAgUFJPUF9TVUdHRVNURURfRklM
RU5BTUUsCisgICAgUFJPUF9QUk9HUkVTUywKKyAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICBQ
Uk9QX1RPVEFMX1NJWkUsCit9OworCitHX0RFRklORV9UWVBFKFdlYktpdFdlYkRvd25sb2FkLCB3
ZWJraXRfd2ViX2Rvd25sb2FkLCBHX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9kb3dubG9hZF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2Vi
RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX1dFQl9ET1dOTE9BRChvYmplY3QpOworICAgIFdl
YktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BS
SVZBVEUoZG93bmxvYWQpOworCisgICAgLyogV2UgZG9uJ3QgY2FsbCB3ZWJraXRfd2ViX2Rvd25s
b2FkX2NhbmNlbCgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgICAgICogc2lnbmFs
cyB3aGVuIGZpbmFsaXNpbmcgYW4gb2JqZWN0LiAqLworICAgIGlmIChwcml2LT5yZXNvdXJjZV9o
YW5kbGUpIHsKKyAgICAgICAgaWYgKHByaXYtPnN0YXRlID09IFdFQktJVF9XRUJfRE9XTkxPQURf
U1RBVEVfU1RBUlRFRCkgeworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5zZXRD
bGllbnQoMCk7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOwor
ICAgICAgICB9CisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS5yZWxlYXNlKCk7CisgICAg
fQorCisgICAgZGVsZXRlIHByaXYtPmRvd25sb2FkX2NsaWVudDsKKyAgICBkZWxldGUgcHJpdi0+
bmV0d29ya19yZXNwb25zZTsKKworICAgIGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkpOwor
ICAgIGdfZnJlZShwcml2LT5zdWdnZXN0ZWRfZmlsZW5hbWUpOworICAgIGlmIChwcml2LT5vdXRw
dXRfc3RyZWFtKQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vdXRwdXRfc3RyZWFtKTsK
KyAgICBnX29iamVjdF91bnJlZihwcml2LT5uZXR3b3JrX3JlcXVlc3QpOworCisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X3dlYl9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9XRUJf
RE9XTkxPQUQob2JqZWN0KTsKKworICAgIHN3aXRjaChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9Q
X05FVFdPUktfUkVRVUVTVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfd2ViX2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QoZG93bmxvYWQpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU1RJTkFUSU9OX1VSSToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmko
ZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NVR0dFU1RFRF9GSUxF
TkFNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2ViX2Rvd25s
b2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1BST0dSRVNTOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUs
IHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DVVJSRU5UX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vp
bnQ2NCh2YWx1ZSwgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplKGRvd25sb2Fk
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT1RBTF9TSVpFOgorICAgICAgICBn
X3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3RvdGFsX3Np
emUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kb3dubG9hZF9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjICpwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQgPSBXRUJL
SVRfV0VCX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICBz
d2l0Y2gocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ORVRXT1JLX1JFUVVFU1Q6CisgICAgICAg
IHByaXYtPm5ldHdvcmtfcmVxdWVzdCA9IChXZWJLaXROZXR3b3JrUmVxdWVzdCopZ192YWx1ZV9k
dXBfb2JqZWN0KHZhbHVlKTsKKyAgICAgICAgLyogVGhpcyBpcyBzYWZlIGFzIG5ldHdvcmstcmVx
dWVzdCBpcyBhIGNvbnN0cnVjdCBvbmx5IHByb3BlcnR5IGFuZCBzdWdnZXN0ZWRfZmlsZW5hbWUK
KyAgICAgICAgICogaXMgaW5pdGlhbGx5IG51bGwuICovCisgICAgICAgIHByaXYtPnN1Z2dlc3Rl
ZF9maWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUod2Via2l0X25ldHdvcmtfcmVxdWVzdF9n
ZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfREVTVElOQVRJT05fVVJJOgorICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9k
ZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1VHR0VTVEVEX0ZJTEVOQU1FOgorICAgICAgICB3
ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBw
c3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX2NsYXNz
X2luaXQoV2ViS2l0V2ViRG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKK3sKKyAgICAvKgor
ICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKKyAgICAgKi8KKyAgICBH
T2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZG93bmxvYWRDbGFzcyk7
CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3dlYl9kb3dubG9hZF9maW5hbGl6
ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kb3dubG9hZF9n
ZXRfcHJvcGVydHk7CisgICAgb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF93ZWJf
ZG93bmxvYWRfc2V0X3Byb3BlcnR5OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViRG93bmxv
YWQ6OmVycm9yOgorICAgICAqIEBkb3dubG9hZDogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2ln
bmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAY3VycmVudF9ieXRlczogdGhlIGN1cnJlbnQgY291bnQg
b2YgYnl0ZXMgZG93bmxvYWRlZAorICAgICAqIEB0b3RhbF9ieXRlczogdGhlIHRvdGFsIGJ5dGVz
IGNvdW50IGluIHRoZSBkb3dubG9hZGVkIGZpbGUsIGFrYSBmaWxlIHNpemUuCisgICAgICoKKyAg
ICAgKiBJbmRpY2F0ZXMgYW4gZXJyb3IgaW4gdGhlIGRvd25sb2FkLgorICAgICAqCisgICAgICog
U2luY2U6IDEuMS4xCisgICAgICovCisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9zaWduYWxzW0VS
Uk9SXSA9IGdfc2lnbmFsX25ldygiZXJyb3IiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1MoZG93bmxvYWRDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
Z19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX0lOVF9JTlRfU1RSSU5HLAorICAgICAg
ICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCisgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAg
ICAgICAgR19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgLyoK
KyAgICAgKiBwcm9wZXJ0aWVzCisgICAgICovCisKKyAgICAvKioKKyAgICAqIFdlYktpdFdlYkRv
d25sb2FkOm5ldHdvcmstcmVxdWVzdAorICAgICoKKyAgICAqIFRoZSAjV2ViS2l0TmV0d29ya1Jl
cXVlc3QgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3dubG9hZC4KKyAgICAqCisgICAg
KiBTaW5jZTogMS4xLjEKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X05FVFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
bmV0d29yay1yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJO
ZXR3b3JrIFJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRo
ZSBuZXR3b3JrIHJlcXVlc3QgZm9yIHRoZSBVUkkgdGhhdCBzaG91bGQgYmUgZG93bmxvYWRlZCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ORVRXT1JL
X1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxh
Z3MpKFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOwor
CisgICAgLyoqCisgICAgKiBXZWJLaXRXZWJEb3dubG9hZDpkZXN0aW5hdGlvbi11cmkKKyAgICAq
CisgICAgKiBUaGUgVVJJIG9mIHRoZSBzYXZlIGxvY2F0aW9uIGZvciB0aGlzIGRvd25sb2FkLgor
ICAgICoKKyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfREVTVElOQVRJT05fVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXN0aW5hdGlvbi11cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkRlc3RpbmF0aW9uIFVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiVGhlIGRlc3RpbmF0aW9uIFVSSSB3aGVyZSB0byBzYXZlIHRoZSBmaWxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisg
ICAgKiBXZWJLaXRXZWJEb3dubG9hZDpzdWdnZXN0ZWQtZmlsZW5hbWUKKyAgICAqCisgICAgKiBU
aGUgZmlsZSBuYW1lIHN1Z2dlc3RlZCBhcyBkZWZhdWx0IHdoZW4gc2F2aW5nCisgICAgKgorICAg
ICogU2luY2U6IDEuMS4xCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9TVUdHRVNURURfRklMRU5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInN1Z2dlc3RlZC1maWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiU3VnZ2VzdGVkIEZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJUaGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmciLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgIC8qKgor
ICAgKiBXZWJLaXRXZWJEb3dubG9hZDpwcm9ncmVzczoKKyAgICoKKyAgICogRGV0ZXJtaW5lcyB0
aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgZG93bmxvYWQuCisgICAqCisgICAqIFNpbmNlOiAx
LjEuMQorICAgKi8KKyAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xh
c3MsIFBST1BfUFJPR1JFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY19kb3VibGUoInByb2dyZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXRlcm1pbmVzIHRoZSBj
dXJyZW50IHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLCAxLjAsIDEuMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICogV2ViS2l0V2ViRG93bmxvYWQ6Y3VycmVu
dC1zaXplCisgICAgKgorICAgICogVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBhbHJlYWR5IGRvd25s
b2FkZWQKKyAgICAqCisgICAgKiBTaW5jZTogMS4xLjEKKyAgICAqLworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY3VycmVudC1zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDdXJyZW50IFNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYWxyZWFkeSBkb3dubG9hZGVkIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICAvKioKKyAgICAqIFdlYktpdFdlYkRvd25sb2FkOnRvdGFsLXNpemUKKyAgICAqCisgICAg
KiBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZQorICAgICoKKyAgICAqIFNpbmNlOiAxLjEuMQor
ICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ1VSUkVOVF9TSVpFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b3RhbC1zaXplIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBTaXplIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGRvd25sb2FkQ2xhc3MsIHNpemVvZihX
ZWJLaXRXZWJEb3dubG9hZFByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9k
b3dubG9hZF9pbml0KFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXRX
ZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRF
KGRvd25sb2FkKTsKKworICAgIHByaXYtPmRvd25sb2FkX2NsaWVudCA9IG5ldyBEb3dubG9hZENs
aWVudChkb3dubG9hZCk7CisgICAgcHJpdi0+Y3VycmVudF9zaXplID0gMDsKKyAgICBwcml2LT5z
dGF0ZSA9IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRDsKK30KKworV2ViS2l0V2Vi
RG93bmxvYWQqIHdlYmtpdF93ZWJfZG93bmxvYWRfbmV3KGNvbnN0IGdjaGFyKiB1cmkpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCAwKTsKKworICAgIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcodXJpKTsKKyAgICBXZWJL
aXRXZWJEb3dubG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2ViX2Rvd25sb2FkX25ld19mcm9tX3Jl
cXVlc3QocmVxdWVzdCk7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisgICAgcmV0dXJu
IGRvd25sb2FkOworfQorCitXZWJLaXRXZWJEb3dubG9hZCogd2Via2l0X3dlYl9kb3dubG9hZF9u
ZXdfZnJvbV9yZXF1ZXN0KFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViS2l0V2ViRG93bmxvYWQq
IGRvd25sb2FkID0gV0VCS0lUX1dFQl9ET1dOTE9BRChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
V0VCX0RPV05MT0FELCAibmV0d29yay1yZXF1ZXN0IiwgcmVxdWVzdCwgTlVMTCkpOworICAgIHJl
dHVybiBkb3dubG9hZDsKK30KKworLy8gUHJpdmF0ZSBmdW5jdGlvbi4KKy8vIEZJWE1FIFVzZSBX
ZWJLaXROZXR3b3JrUmVzcG9uc2Ugd2hlbiB3ZSBoYXZlIGl0CitXZWJLaXRXZWJEb3dubG9hZCog
d2Via2l0X3dlYl9kb3dubG9hZF9uZXdfZnJvbV9leGlzdGluZ19jb25uZWN0aW9uKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1
ZXN0LCAwKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtpdF93ZWJf
ZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdCAocmVxdWVzdCk7CisKKyAgICBXZWJLaXRXZWJEb3du
bG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25s
b2FkKTsKKyAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUgPSBoYW5kbGU7CisgICAgcHJpdi0+bmV0
d29ya19yZXNwb25zZSA9IG5ldyBSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKTsKKworICAgIHJl
dHVybiBkb3dubG9hZDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfZG93bmxvYWRf
b3Blbl9zdHJlYW1fZm9yX3VyaShXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdj
aGFyKiB1cmksIGdib29sZWFuIGFwcGVuZD1GQUxTRSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCh1cmksIEZBTFNFKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIEdGaWxlKiBm
aWxlID0gZ19maWxlX25ld19mb3JfdXJpKHVyaSk7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
CisKKyAgICBpZiAoYXBwZW5kKQorICAgICAgICBwcml2LT5vdXRwdXRfc3RyZWFtID0gZ19maWxl
X2FwcGVuZF90byhmaWxlLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIE5VTEwsICZlcnJvcik7CisgICAg
ZWxzZQorICAgICAgICBwcml2LT5vdXRwdXRfc3RyZWFtID0gZ19maWxlX3JlcGxhY2UoZmlsZSwg
TlVMTCwgVFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCBOVUxMLCAmZXJyb3IpOworCisgICAgZ19v
YmplY3RfdW5yZWYoZmlsZSk7CisKKyAgICBpZihlcnJvcikgeworICAgICAgICBnYm9vbGVhbiBo
YW5kbGVkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIs
IDAsIFdFQktJVF9XRUJfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIGVycm9yLT5tZXNzYWdl
LCAmaGFuZGxlZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl9kb3dubG9hZF9jbG9zZV9zdHJlYW0oV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9X
TkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIGlmIChwcml2LT5vdXRwdXRfc3RyZWFt
KSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm91dHB1dF9zdHJlYW0pOworICAgICAg
ICBwcml2LT5vdXRwdXRfc3RyZWFtID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X3dl
Yl9kb3dubG9hZF9zdGFydChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBX
ZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9Q
UklWQVRFKGRvd25sb2FkKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmRlc3RpbmF0aW9u
X3VyaSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfV0VCX0RP
V05MT0FEX1NUQVRFX0NSRUFURUQpOworCisgICAgaWYgKHByaXYtPnJlc291cmNlX2hhbmRsZSkK
KyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5zZXRDbGllbnQocHJpdi0+ZG93bmxvYWRf
Y2xpZW50KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUUgdXNlIGtpdChwcml2LT5uZXR3
b3JrX3JlcXVlc3QpIHdoZW4gV2ViS2l0TmV0d29ya1JlcXVlc3Qgd2lsbCBiZSBmaW5pc2hlZC4K
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qod2Via2l0X25ldHdvcmtfcmVxdWVzdF9n
ZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCkpOworICAgICAgICBwcml2LT5yZXNvdXJjZV9o
YW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKHJlcXVlc3QsIHByaXYtPmRvd25sb2FkX2Ns
aWVudCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgfQorCisgICAgd2Via2l0X3dlYl9k
b3dubG9hZF9vcGVuX3N0cmVhbV9mb3JfdXJpKGRvd25sb2FkLCBwcml2LT5kZXN0aW5hdGlvbl91
cmkpOworfQorCit2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfY2FuY2VsKFdlYktpdFdlYkRvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9X
TkxPQUQoZG93bmxvYWQpKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworCisgICAgaWYgKHBy
aXYtPnJlc291cmNlX2hhbmRsZSkKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5jYW5j
ZWwoKTsKKworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9DQU5D
RUxMRUQ7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9DQU5DRUxM
RURfQllfVVNFUiwgIlVzZXIgY2FuY2VsbGVkIHRoZSBkb3dubG9hZCIsICZoYW5kbGVkKTsKK30K
KworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3VyaShXZWJLaXRXZWJEb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2
YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7Cisg
ICAgcmV0dXJuIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShwcml2LT5uZXR3b3JrX3Jl
cXVlc3QpOworfQorCitXZWJLaXROZXR3b3JrUmVxdWVzdCogd2Via2l0X3dlYl9kb3dubG9hZF9n
ZXRfbmV0d29ya19yZXF1ZXN0KFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgTlVM
TCk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RP
V05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gcHJpdi0+bmV0d29ya19y
ZXF1ZXN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9yZXNwb25z
ZShXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIC8vIEZJWE1FIFVzZSBXZWJLaXROZXR3b3JrUmVzcG9uc2Ugd2hlbiBp
dCdzIG1lcmdlZAorICAgIFdlYktpdFdlYkRvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9X
RUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHByaXYtPm5ldHdvcmtfcmVz
cG9uc2UgPSBuZXcgUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSk7Cit9CisKK2NvbnN0IGdjaGFy
KiB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoV2ViS2l0V2ViRG93
bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkRvd25sb2FkUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOwor
ICAgIHJldHVybiBwcml2LT5zdWdnZXN0ZWRfZmlsZW5hbWU7Cit9CisKK3ZvaWQgd2Via2l0X3dl
Yl9kb3dubG9hZF9zZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKFdlYktpdFdlYkRvd25sb2FkKiBkb3du
bG9hZCwgY29uc3QgZ2NoYXIqIGZpbGVuYW1lKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9ET1dOTE9BRChkb3dubG9hZCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmls
ZW5hbWUpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dF
Ql9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgaWYgKHByaXYtPnN1Z2dlc3Rl
ZF9maWxlbmFtZSAmJiAhc3RyY21wKHByaXYtPnN1Z2dlc3RlZF9maWxlbmFtZSwgZmlsZW5hbWUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnX2ZyZWUocHJpdi0+c3VnZ2VzdGVkX2ZpbGVuYW1l
KTsKKyAgICBwcml2LT5zdWdnZXN0ZWRfZmlsZW5hbWUgPSBnX3N0cmR1cChmaWxlbmFtZSk7Cisg
ICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInN1Z2dlc3RlZC1maWxlbmFt
ZSIpOworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfZGVzdGluYXRp
b25fdXJpKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisKKyAgICBX
ZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9Q
UklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gcHJpdi0+ZGVzdGluYXRpb25fdXJpOworfQor
Cit2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShXZWJLaXRXZWJE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbl91cmkpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChkZXN0aW5hdGlvbl91cmkpOworCisgICAgV2ViS2l0V2ViRG93bmxv
YWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9h
ZCk7CisgICAgaWYgKHByaXYtPmRlc3RpbmF0aW9uX3VyaSAmJiAhc3RyY21wKHByaXYtPmRlc3Rp
bmF0aW9uX3VyaSwgZGVzdGluYXRpb25fdXJpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
RklYTUUgY2FuIHdlIGhhdmUgYSBiZXR0ZXIgY2hlY2s/CisgICAgaWYgKHByaXYtPnN0YXRlICE9
IFdFQktJVF9XRUJfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRCAmJiBwcml2LT5zdGF0ZSAhPSBXRUJL
SVRfV0VCX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCkgeworICAgICAgICBBU1NFUlQocHJpdi0+
ZGVzdGluYXRpb25fdXJpKTsKKworICAgICAgICBnYm9vbGVhbiBkb3dubG9hZGluZyA9IHByaXYt
Pm91dHB1dF9zdHJlYW0gIT0gTlVMTDsKKyAgICAgICAgaWYgKGRvd25sb2FkaW5nKQorICAgICAg
ICAgICAgd2Via2l0X3dlYl9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAg
ICAgIEdGaWxlKiBzcmMgPSBnX2ZpbGVfbmV3X2Zvcl91cmkocHJpdi0+ZGVzdGluYXRpb25fdXJp
KTsKKyAgICAgICAgR0ZpbGUqIGRlc3QgPSBnX2ZpbGVfbmV3X2Zvcl91cmkoZGVzdGluYXRpb25f
dXJpKTsKKyAgICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19maWxlX21v
dmUoc3JjLCBkZXN0LCBHX0ZJTEVfQ09QWV9CQUNLVVAsIE5VTEwsIE5VTEwsIE5VTEwsICZlcnJv
cik7CisKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoc3JjKTsKKyAgICAgICAgZ19vYmplY3RfdW5y
ZWYoZGVzdCk7CisKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBnYm9vbGVhbiBo
YW5kbGVkOworICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJy
b3IiLCAwLCBXRUJLSVRfV0VCX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OLCBlcnJvci0+bWVz
c2FnZSwgJmhhbmRsZWQpOworICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb3dubG9hZGluZykgewor
ICAgICAgICAgICAgaWYgKCF3ZWJraXRfd2ViX2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmko
ZG93bmxvYWQsIGRlc3RpbmF0aW9uX3VyaSwgVFJVRSkpIHsKKyAgICAgICAgICAgICAgICB3ZWJr
aXRfd2ViX2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ19mcmVlKHByaXYtPmRl
c3RpbmF0aW9uX3VyaSk7CisgICAgcHJpdi0+ZGVzdGluYXRpb25fdXJpID0gZ19zdHJkdXAoZGVz
dGluYXRpb25fdXJpKTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAi
ZGVzdGluYXRpb24tdXJpIik7Cit9CisKK1dlYktpdFdlYkRvd25sb2FkU3RhdGUgd2Via2l0X3dl
Yl9kb3dubG9hZF9nZXRfc3RhdGUgKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwg
V0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9FUlJPUik7CisKKyAgICBXZWJLaXRXZWJEb3dubG9h
ZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2Fk
KTsKKyAgICByZXR1cm4gcHJpdi0+c3RhdGU7Cit9CisKKy8vIEZJWE1FIGRvY3VtZW50IHRoYXQg
dGhpcyBjYW4gYmUgZGlmZmVyZW50IGZyb20gZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkuCitndWlu
dDY0IHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUgKFdlYktpdFdlYkRvd25sb2Fk
KiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RP
V05MT0FEKGRvd25sb2FkKSwgMCk7CisKKyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBpZiAo
IXByaXYtPm5ldHdvcmtfcmVzcG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IE1BWChwcml2LT5jdXJyZW50X3NpemUsIHByaXYtPm5ldHdvcmtfcmVzcG9uc2UtPmV4cGVjdGVk
Q29udGVudExlbmd0aCgpKTsKK30KKworZ3VpbnQ2NCB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9j
dXJyZW50X3NpemUgKFdlYktpdFdlYkRvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RPV05MT0FEKGRvd25sb2FkKSwgMCk7CisKKyAg
ICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0RPV05MT0FEX0dF
VF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICByZXR1cm4gcHJpdi0+Y3VycmVudF9zaXplOworfQor
CisvKioKKyAqIHdlYmtpdF93ZWJfZG93bmxvYWRfZ2V0X3Byb2dyZXNzOgorICogQHdlYl92aWV3
OiBhICNXZWJLaXRXZWJEb3dubG9hZAorICoKKyAqIERldGVybWluZXMgdGhlIGN1cnJlbnQgcHJv
Z3Jlc3Mgb2YgdGhlIGRvd25sb2FkLgorICoKKyAqIFJldHVybnM6IGEgI2dkb3VibGUgcmFuZ2lu
ZyBmcm9tIDAuMCB0byAxLjAuCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2dkb3VibGUgd2Vi
a2l0X3dlYl9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRE9XTkxPQUQoZG93
bmxvYWQpLCAxLjApOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgZ2RvdWJsZSB0b3Rh
bF9zaXplID0gKGdkb3VibGUpcHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKCk7CisKKyAgICBpZiAodG90YWxfc2l6ZSA8PSAwKQorICAgICAgICByZXR1cm4gMS4w
OworCisgICAgcmV0dXJuIGxyb3VuZCh0b3RhbF9zaXplIC8gKChnZG91YmxlKXByaXYtPmN1cnJl
bnRfc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX3JlY2VpdmVk
X2RhdGEoV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKK3sKKyAgICBXZWJLaXRXZWJEb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
V0VCX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgIGlmIChwcml2LT5jdXJy
ZW50X3NpemUgPT0gMCkgeworICAgICAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9XRUJfRE9XTkxP
QURfU1RBVEVfU1RBUlRFRDsKKyAgICB9CisKKyAgICBBU1NFUlQocHJpdi0+b3V0cHV0X3N0cmVh
bSk7CisKKyAgICBnc2l6ZSBieXRlc193cml0dGVuOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxM
OworCisgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChHX09VVFBVVF9TVFJFQU0ocHJpdi0+
b3V0cHV0X3N0cmVhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBsZW5n
dGgsICZieXRlc193cml0dGVuLCBOVUxMLCAmZXJyb3IpOworCisgICAgaWYgKGVycm9yKSB7Cisg
ICAgICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShk
b3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElP
TiwgZXJyb3ItPm1lc3NhZ2UsICZoYW5kbGVkKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByaXYtPmN1cnJlbnRfc2l6ZSArPSBs
ZW5ndGg7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImN1cnJlbnQt
c2l6ZSIpOworCisgICAgQVNTRVJUKHByaXYtPm5ldHdvcmtfcmVzcG9uc2UpOworICAgIGlmIChw
cml2LT5jdXJyZW50X3NpemUgPiBwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKSkKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwg
InRvdGFsLXNpemUiKTsKKworICAgIC8qIEZJWE1FIHRocm90dGxlIHRoZSBudW1iZXIgb2YgdXBk
YXRlcz8KKyAgICAgKiBzaG91bGQgd2UgcmVtb3ZlIHRoZSBwcmV2aW91cyBnX29iamVjdF9ub3Rp
ZnkoKXMgaWYgd2UgYXJlIGdvaW5nIHRvIHRocm90dGxlCisgICAgICogdGhlIHByb2dyZXNzIHVw
ZGF0ZXM/ICovCisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInByb2dy
ZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZG93bmxvYWRfZmluaXNoZWRfbG9h
ZGluZyhXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgd2Via2l0X3dlYl9kb3du
bG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQcml2
YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7Cisg
ICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEOworICAg
IGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJwcm9ncmVzcyIpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rvd25sb2FkX2Vycm9yKFdlYktpdFdlYkRvd25sb2FkKiBk
b3dubG9hZCwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgd2Via2l0X3dlYl9k
b3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0V2ViRG93bmxvYWRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7
CisgICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0VSUk9SOworCisg
ICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQs
ICJlcnJvciIsIDAsIFdFQktJVF9XRUJfRE9XTkxPQURfRVJST1JfTkVUV09SSywgZXJyb3IubG9j
YWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpLCAmaGFuZGxlZCk7Cit9CisKK0Rvd25s
b2FkQ2xpZW50OjpEb3dubG9hZENsaWVudChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQpCisg
ICAgOiBtX2Rvd25sb2FkKGRvd25sb2FkKQoreworfQorCit2b2lkIERvd25sb2FkQ2xpZW50Ojpk
aWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX3NldF9yZXNwb25zZShtX2Rv
d25sb2FkLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGllbnQ6OmRpZFJlY2VpdmVE
YXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxl
bmd0aFJlY2VpdmVkKQoreworICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YSht
X2Rvd25sb2FkLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRG
aW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICB3ZWJraXRfd2ViX2Rvd25sb2Fk
X2ZpbmlzaGVkX2xvYWRpbmcobV9kb3dubG9hZCk7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGllbnQ6
OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sK
KyAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2Vycm9yKG1fZG93bmxvYWQsIGVycm9yKTsKK30KKwor
dm9pZCBEb3dubG9hZENsaWVudDo6d2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopCit7CisgICAg
Ly8gRklYTUUgd2hlbiB3ZSBoYXZlIHRoZSBuZXcgZnJhbWUgbG9hZGVyIHNpZ25hbHMgYW5kIGVy
cm9yIGhhbmRsaW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRG93bmxvYWRD
bGllbnQ6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIC8vIEZJWE1FIHdo
ZW4gd2UgaGF2ZSB0aGUgbmV3IGZyYW1lIGxvYWRlciBzaWduYWxzIGFuZCBlcnJvciBoYW5kbGlu
Zy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJkb3dubG9hZC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDVlM2FiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZG93bmxvYWQuaApA
QCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21l
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0RPV05MT0FEX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9E
T1dOTE9BRF9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBF
X1dFQl9ET1dOTE9BRCAgICAgICAgICAgICh3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQUQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RPV05MT0FELCBXZWJLaXRX
ZWJEb3dubG9hZCkpCisjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQURfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RPV05M
T0FELCBXZWJLaXRXZWJEb3dubG9hZENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9ET1dO
TE9BRChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfVFlQRV9XRUJfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0RPV05MT0FEX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBF
X1dFQl9ET1dOTE9BRCkpCisjZGVmaW5lIFdFQktJVF9XRUJfRE9XTkxPQURfR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0RP
V05MT0FELCBXZWJLaXRXZWJEb3dubG9hZENsYXNzKSkKKwordHlwZWRlZiBlbnVtIHsKKyAgICBX
RUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX0VSUk9SID0gLTEsCisgICAgV0VCS0lUX1dFQl9ET1dO
TE9BRF9TVEFURV9DUkVBVEVEID0gMCwKKyAgICBXRUJLSVRfV0VCX0RPV05MT0FEX1NUQVRFX1NU
QVJURUQsCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQsCisgICAgV0VC
S0lUX1dFQl9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRAorfSBXZWJLaXRXZWJEb3dubG9hZFN0YXRl
OworCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9XRUJfRE9XTkxPQURfRVJST1JfQ0FOQ0VM
TEVEX0JZX1VTRVIsCisgICAgV0VCS0lUX1dFQl9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiwK
KyAgICBXRUJLSVRfV0VCX0RPV05MT0FEX0VSUk9SX05FVFdPUksKK30gV2ViS2l0V2ViRG93bmxv
YWRFcnJvcjsKKworc3RydWN0IF9XZWJLaXRXZWJEb3dubG9hZCB7CisgICAgR09iamVjdCBwYXJl
bnQ7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYkRvd25sb2FkQ2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnQ7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2Rvd25sb2Fk
X2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0
V2ViRG93bmxvYWQgKgord2Via2l0X3dlYl9kb3dubG9hZF9uZXcgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IGdjaGFyICp1cmkpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkRvd25sb2Fk
ICoKK3dlYmtpdF93ZWJfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdCAgICAgICAgICAgIChXZWJL
aXROZXR3b3JrUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dl
Yl9kb3dubG9hZF9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkRvd25sb2Fk
ICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9j
YW5jZWwgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9h
ZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF91
cmkgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2FkKTsK
KworV0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrUmVxdWVzdCoKK3dlYmtpdF93ZWJfZG93bmxvYWRf
Z2V0X25ldHdvcmtfcmVxdWVzdCAgICAgICAgIChXZWJLaXRXZWJEb3dubG9hZCAgICAqZG93bmxv
YWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9kb3dubG9hZF9nZXRf
c3VnZ2VzdGVkX2ZpbGVuYW1lICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9zZXRfc3VnZ2VzdGVkX2Zp
bGVuYW1lICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAqZmlsZW5hbWUpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9kb3du
bG9hZF9nZXRfZGVzdGluYXRpb25fdXJpICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpk
b3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9kb3dubG9hZF9zZXRfZGVz
dGluYXRpb25fdXJpICAgICAgICAgKFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciAgICAgICAgICAqZGVzdGluYXRpb25fdXJpKTsKKworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJr
aXRfd2ViX2Rvd25sb2FkX2dldF9wcm9ncmVzcyAgICAgICAgICAgICAgICAoV2ViS2l0V2ViRG93
bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfd2ViX2Rv
d25sb2FkX2dldF90b3RhbF9zaXplICAgICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAg
KmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfd2ViX2Rvd25sb2FkX2dl
dF9jdXJyZW50X3NpemUgICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAgKmRvd25sb2Fk
KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJEb3dubG9hZFN0YXRlCit3ZWJraXRfd2ViX2Rvd25s
b2FkX2dldF9zdGF0ZSAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViRG93bmxvYWQgICAgKmRv
d25sb2FkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCmluZGV4IDBlYTZlZDUuLjE1ODhiMWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1
ZGUgIndlYmtpdHdlYmRvd25sb2FkLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgogI2lu
Y2x1ZGUgIndlYmtpdGVudW10eXBlcy5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKQEAg
LTEzMyw2ICsxMzQsNyBAQCBlbnVtIHsKICAgICBDT1BZX0NMSVBCT0FSRCwKICAgICBQQVNURV9D
TElQQk9BUkQsCiAgICAgQ1VUX0NMSVBCT0FSRCwKKyAgICBET1dOTE9BRF9SRVFVRVNURUQsCiAg
ICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTgxMSw2ICs4MTMsMTMgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X3JlYWxfcGFzdGVfY2xpcGJvYXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJQYXN0ZSIpLmV4ZWN1dGUoKTsKIH0KIAor
c3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX2Rvd25sb2FkX3JlcXVlc3RlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRG93bmxvYWQqIGRvd25sb2FkKQorewor
ICAgIHdlYmtpdF93ZWJfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAvLyBSZXR1cm4g
ZmFsc2UgdG8gaW5kaWNhdGUgaXQgd2Fzbid0IGhhbmRsZWQgdGhlcmVmb3JlIHRoZSBkb3dubG9h
ZCBpcyBkZWxldGVkCisgICAgcmV0dXJuIEZBTFNFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhvYmplY3QpOwpAQCAtMTA4NCw2ICsxMDkzLDI2IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFz
cyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgR19UWVBFX1BPSU5URVIsCiAgICAgICAgICAg
ICBHX1RZUEVfUE9JTlRFUik7CiAKKyAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6ZG93
bmxvYWQtcmVxdWVzdGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0
aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBtZXNzYWdlIHRleHQK
KyAgICAgKiBAcmV0dXJuOiBUUlVFIGlmIHRoZSBkb3dubG9hZCB3YXMgaGFuZGxlZCwgb3RoZXJ3
aXNlIGl0J2xsIGJlIGNhbmNlbGxlZC4KKyAgICAgKgorICAgICAqIEEgbmV3IERvd25sb2FkIGlz
IGJlaW5nIHJlcXVlc3RlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjEuMQorICAgICAqLwor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0RPV05MT0FEX1JFUVVFU1RFRF0gPSBnX3NpZ25h
bF9uZXcoImRvd25sb2FkLXJlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
Uyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVO
X0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdl
YktpdFdlYlZpZXdDbGFzcywgZG93bmxvYWRfcmVxdWVzdGVkKSwKKyAgICAgICAgICAgIGdfc2ln
bmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVf
Qk9PTEVBTiwgMSwKKyAgICAgICAgICAgIEdfVFlQRV9PQkpFQ1QpOworCiAgICAgLyoqCiAgICAg
ICogV2ViS2l0V2ViVmlldzo6bG9hZC1zdGFydGVkOgogICAgICAqIEB3ZWJfdmlldzogdGhlIG9i
amVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTEzOTMsNiArMTQyMiw3IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFz
cyogd2ViVmlld0NsYXNzKQogICAgIHdlYlZpZXdDbGFzcy0+Y3V0X2NsaXBib2FyZCA9IHdlYmtp
dF93ZWJfdmlld19yZWFsX2N1dF9jbGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5jb3B5X2Ns
aXBib2FyZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NvcHlfY2xpcGJvYXJkOwogICAgIHdlYlZp
ZXdDbGFzcy0+cGFzdGVfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfcGFzdGVfY2xp
cGJvYXJkOworICAgIHdlYlZpZXdDbGFzcy0+ZG93bmxvYWRfcmVxdWVzdGVkID0gd2Via2l0X3dl
Yl92aWV3X3JlYWxfZG93bmxvYWRfcmVxdWVzdGVkOwogCiAgICAgR09iamVjdENsYXNzKiBvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xhc3Mt
PmRpc3Bvc2UgPSB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZTsKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuaAppbmRleCAyYmI4YzYxLi41ZTc1OTYxIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5o
CkBAIC0xMDIsNiArMTAyLDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIHZv
aWQgICAgICAgICAgICAgICAgICAgICAgICgqIGN1dF9jbGlwYm9hcmQpICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICgqIGNvcHlfY2xpcGJvYXJkKSAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2Vi
X3ZpZXcpOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICgqIHBhc3RlX2NsaXBib2Fy
ZCkgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOworICAgIGdib29sZWFu
ICAgICAgICAgICAgICAgICAgICgqIGRvd25sb2FkX3JlcXVlc3RlZCkgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkRvd25sb2FkICAgICpkb3dubG9hZCk7
CiAKICAgICAvKgogICAgICAqIGludGVybmFsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9HdGtM
YXVuY2hlci9tYWluLmMgYi9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKaW5kZXggOGVk
MjY5MC4uNDVkMDc4MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5j
CisrKyBiL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpAQCAtNjUsNiArNjUsMjUgQEAg
bGlua19ob3Zlcl9jYiAoV2ViS2l0V2ViVmlldyogcGFnZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBj
b25zdCBnY2hhciogbGluaywgZ3BvaW4KIH0KIAogc3RhdGljIHZvaWQKK2Rvd25sb2FkX3Byb2dy
ZXNzX2NiIChXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIGdfbWVzc2FnZSgiRG93bmxvYWRpbmcgJXMgdG8gJXM6ICVkLyVkICglZikiLAorICAg
ICAgICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLAorICAgICAg
ICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQp
LAorICAgICAgICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUoZG93
bmxvYWQpLAorICAgICAgICAgICAgICB3ZWJraXRfd2ViX2Rvd25sb2FkX2dldF90b3RhbF9zaXpl
KGRvd25sb2FkKSwKKyAgICAgICAgICAgICAgd2Via2l0X3dlYl9kb3dubG9hZF9nZXRfcHJvZ3Jl
c3MoZG93bmxvYWQpKTsKK30KKworc3RhdGljIGdib29sZWFuCitkb3dubG9hZF9yZXF1ZXN0ZWRf
Y2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJEb3dubG9hZCogZG93bmxvYWQp
Cit7CisgICAgd2Via2l0X3dlYl9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpIChkb3dubG9h
ZCwgImZpbGU6Ly8vdG1wL2Rvd25sb2FkLnRlc3QiKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRv
d25sb2FkLCAibm90aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FMTEJBQ0soZG93bmxvYWRfcHJvZ3Jlc3Nf
Y2IpLCBOVUxMKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKIHRpdGxlX2No
YW5nZV9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJh
bWUsIGNvbnN0IGdjaGFyKiB0aXRsZSwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBpZiAobWFpbl90
aXRsZSkKQEAgLTExOSw2ICsxMzgsNyBAQCBjcmVhdGVfYnJvd3NlciAoKQogICAgIGdfc2lnbmFs
X2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLCBH
X0NBTExCQUNLIChwcm9ncmVzc19jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7CiAgICAgZ19zaWduYWxf
Y29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtY29tbWl0dGVkIiwgR19DQUxMQkFD
SyAobG9hZF9jb21taXRfY2IpLCB3ZWJfdmlldyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCAoR19P
QkpFQ1QgKHdlYl92aWV3KSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtf
aG92ZXJfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdl
Yl92aWV3KSwgImRvd25sb2FkLXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sgKGRvd25sb2FkX3JlcXVl
c3RlZF9jYiksIHdlYl92aWV3KTsKIAogICAgIHJldHVybiBzY3JvbGxlZF93aW5kb3c7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27090</attachid>
            <date>2009-01-27 16:28:04 -0800</date>
            <delta_ts>2009-02-27 18:46:51 -0800</delta_ts>
            <desc>simplified approach</desc>
            <filename>download-simple.diff</filename>
            <type>text/plain</type>
            <size>5832</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAKaW5kZXggNjg0ZWUwYy4uM2EzODU5ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyUGFydC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBy
b2dyZXNzVHJhY2tlci5oIgpAQCAtNzUyLDkgKzc1MywxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQogICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1kb25lIiwgZmFsc2UpOwogfQogCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIGluaXRpYWxSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZy
YW1lKG1fZnJhbWUpOworCisgICAgZ2Jvb2xlYW4gaXNIYW5kbGVkOworICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZSh3ZWJWaWV3LCAiZG93bmxvYWQtc3RhcnRlZCIsIHJlcXVlc3Quc291cE1lc3Nh
Z2UoKSwgJmlzSGFuZGxlZCk7CisgICAgaWYgKCFpc0hhbmRsZWQpCisgICAgICAgIGhhbmRsZS0+
Y2FuY2VsKCk7CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxl
ZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkBAIC04MzgsOSArODQ0LDEyIEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VFcnJvCiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpz
dGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3
RnJvbUZyYW1lKG1fZnJhbWUpOworCisgICAgZ2Jvb2xlYW4gaXNIYW5kbGVkOworICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAiZG93bmxvYWQtc3RhcnRlZCIsIHJlcXVlc3Quc291
cE1lc3NhZ2UoKSwgJmlzSGFuZGxlZCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnkoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCAw
ZWE2ZWQ1Li5jNWJhYjJjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMTE1
LDYgKzExNSw3IEBAIGVudW0gewogICAgIENSRUFURV9XRUJfVklFVywKICAgICBXRUJfVklFV19S
RUFEWSwKICAgICBXSU5ET1dfT0JKRUNUX0NMRUFSRUQsCisgICAgRE9XTkxPQURfU1RBUlRFRCwK
ICAgICBMT0FEX1NUQVJURUQsCiAgICAgTE9BRF9DT01NSVRURUQsCiAgICAgTE9BRF9QUk9HUkVT
U19DSEFOR0VELApAQCAtOTQ3LDYgKzk0OCwyNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CiAKICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJW
aWV3Ojpkb3dubG9hZC1zdGFydGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3
aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAbWVzc2FnZTogdGhlICNTb3VwTWVz
c2FnZSBvYmplY3QgdXNlZCB0byBkb3dubG9hZAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVu
IGEgZG93bmxvYWQgaXMgc3RhcnRlZCBmcm9tIHRoZSAjV2ViS2l0V2ViVmlldywKKyAgICAgKiBi
ZWNhdXNlIG9mIGEgcG9saWN5IGRlY2lzaW9uIG9yIGFuIGV4cGxpY2l0IHVzZXIgcmVxdWVzdAor
ICAgICAqICh0aHJvdWdoIHRoZSBjb250ZXh0IG1lbnUsIGZvciBpbnN0YW5jZSkuCisgICAgICoK
KyAgICAgKiBTaW5jZSAxLjEuMQorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxz
W0RPV05MT0FEX1NUQVJURURdID0gZ19zaWduYWxfbmV3KCJkb3dubG9hZC1zdGFydGVkIiwKKyAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAo
R1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVk
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5f
X09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgU09V
UF9UWVBFX01FU1NBR0UpOworCisgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6d2ViLXZp
ZXctcmVhZHk6CiAgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWdu
YWwgaXMgZW1pdHRlZAogICAgICAqIEByZXR1cm46ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxl
cnMgZnJvbSBiZWluZyBpbnZva2VkIGZvcgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvR3RrTGF1
bmNoZXIvbWFpbi5jIGIvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCmluZGV4IDQ3MDRh
YjkuLmFmNjUxZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwor
KysgYi9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKQEAgLTY2LDYgKzY2LDI1IEBAIGxp
bmtfaG92ZXJfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGNvbnN0IGdjaGFyKiB0aXRsZSwgY29u
c3QgZ2NoYXIqIGxpbmssIGdwb2luCiAgICAgICAgIGd0a19zdGF0dXNiYXJfcHVzaCAobWFpbl9z
dGF0dXNiYXIsIHN0YXR1c19jb250ZXh0X2lkLCBsaW5rKTsKIH0KIAorc3RhdGljIHZvaWQKK3Nh
dmVfZmlsZV9jYiAoU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHRmls
ZSogb3V0cHV0X2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoICgiL3RtcC9kb3dubG9hZC50ZXN0
Iik7CisgICAgR0ZpbGVPdXRwdXRTdHJlYW0qIG91dHB1dF9zdHJlYW0gPSBnX2ZpbGVfcmVwbGFj
ZSAob3V0cHV0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwgRkFMU0UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgZ3NpemUgYnl0
ZXNfd3JpdHRlbjsKKworICAgIGdfd2FybmluZygiU2F2aW5nLi4uIik7CisKKyAgICBnX291dHB1
dF9zdHJlYW1fd3JpdGVfYWxsIChHX09VVFBVVF9TVFJFQU0ob3V0cHV0X3N0cmVhbSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+cmVzcG9uc2VfYm9keS0+bGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc193cml0dGVuLCBOVUxMLCBOVUxM
KTsKKyAgICBnX291dHB1dF9zdHJlYW1fY2xvc2UgKEdfT1VUUFVUX1NUUkVBTShvdXRwdXRfc3Ry
ZWFtKSwgTlVMTCwgTlVMTCk7CisgICAgZ19vYmplY3RfdW5yZWYgKG91dHB1dF9maWxlKTsKK30K
Kwogc3RhdGljIGdib29sZWFuCiBuYXZpZ2F0aW9uX2RlY2lzaW9uX2NiIChXZWJLaXRXZWJWaWV3
KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBXZWJLaXROZXR3b3JrUmVxdWVzdCog
cmVxdWVzdCwgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLCBXZWJLaXRXZWJQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24pCiB7CkBAIC03Myw3ICs5Miw3IEBAIG5hdmlnYXRpb25fZGVj
aXNpb25fY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUs
IFdlYktpdE5lCiAgICAgZ19tZXNzYWdlICgiU291cCBtZXRob2Q6ICVzIiwgbXNnLT5tZXRob2Qp
OwogICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKG1zZy0+cmVxdWVzdF9oZWFkZXJz
LCAiWC1XZWJLaXQiLCAidGVzdCIpOwogICAgIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfcmVmcmVz
aCAocmVxdWVzdCk7Ci0gICAgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25fdXNlIChkZWNpc2lv
bik7CisgICAgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQgKGRlY2lzaW9uKTsK
ICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtMTE5LDYgKzEzOCwxNCBAQCBnb19mb3J3YXJkX2Ni
IChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKICAgICB3ZWJraXRfd2ViX3ZpZXdf
Z29fZm9yd2FyZCAod2ViX3ZpZXcpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4KK2Rvd25sb2FkX3N0
YXJ0ZWRfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBk
YXRhKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFD
SyhzYXZlX2ZpbGVfY2IpLCBOVUxMKTsKKyAgICBnX3dhcm5pbmcoIkRvd25sb2FkIHN0YXJ0ZWQ/
Iik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyBHdGtXaWRnZXQqCiBjcmVhdGVfYnJv
d3NlciAoKQogewpAQCAtMTMzLDYgKzE2MCw3IEBAIGNyZWF0ZV9icm93c2VyICgpCiAgICAgZ19z
aWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtY29tbWl0dGVkIiwgR19D
QUxMQkFDSyAobG9hZF9jb21taXRfY2IpLCB3ZWJfdmlldyk7CiAgICAgZ19zaWduYWxfY29ubmVj
dCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sg
KGxpbmtfaG92ZXJfY2IpLCB3ZWJfdmlldyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpF
Q1QgKHdlYl92aWV3KSwgIm5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsIEdf
Q0FMTEJBQ0sgKG5hdmlnYXRpb25fZGVjaXNpb25fY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWdu
YWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NB
TExCQUNLIChkb3dubG9hZF9zdGFydGVkX2NiKSwgd2ViX3ZpZXcpOwogCiAgICAgcmV0dXJuIHNj
cm9sbGVkX3dpbmRvdzsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27104</attachid>
            <date>2009-01-28 06:35:13 -0800</date>
            <delta_ts>2009-02-05 10:27:13 -0800</delta_ts>
            <desc>follow-up patch</desc>
            <filename>0001-Implement-download.patch</filename>
            <type>text/plain</type>
            <size>43398</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSBjZTYwYzc4ZWIxNmEyNWE0NWJlYzEwZmQzNDYzZjQ3YTBiMDY4ZDdjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUdWUsIDI3IEphbiAyMDA5IDExOjQzOjQ1IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkCgotLS0KIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAgICB8ICAgIDkgKy0KIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIHwgICAxNCArLQogV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgfCAgIDM3ICstCiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICAgICAgICAgfCAgICAzICsKIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcCAgICAgICAgICAgICAgIHwgIDc2NSArKysr
KysrKysrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCAgICAg
ICAgICAgICAgICAgfCAgMTA0ICsrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
ICAgICAgICAgICAgICAgICAgfCAgIDExICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwICAgICAgICAgICAgICAgIHwgICAzMCArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmggICAgICAgICAgICAgICAgICB8ICAgIDIgKwogV2ViS2l0VG9vbHMvR3RrTGF1bmNo
ZXIvbWFpbi5jICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICsKIDEyIGZpbGVzIGNoYW5nZWQs
IDk5MCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgKCmRpZmYgLS1naXQgYS9HTlVtYWtlZmls
ZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IDdhZWMwNjEuLjlhNGM2ZjkgMTAwNjQ0Ci0tLSBh
L0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMDIsNiArMzAyLDcgQEAg
ZW5kaWYKIHdlYmtpdGd0a19oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Lmgg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBcCisJV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jl
cXVlc3QuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lvbi5oIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCkBAIC0zNDYsNiArMzQ3LDcg
QEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5h
dmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lk
ZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBc
CisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwIFwKIAlXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2lu
ZG93ZmVhdHVyZXMuY3BwCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IGRhOTY4NzMuLmIxMzc1MTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cApAQCAtMzM4LDkgKzMzOCwxMiBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFkLT5tX21zZyk7CiAKLSAgICAvLyBJZiB3ZSBhcmUgbm8g
bG9uZ2VyIGF0dGFjaGVkIHRvIGEgUGFnZSwgdGhpcyBtdXN0IGJlIGFuIGF0dGVtcHRlZCBsb2Fk
IGZyb20gYW4KLSAgICAvLyBvblVubG9hZCBoYW5kbGVyLCBzbyBsZXQncyBqdXN0IGJsb2NrIGl0
LgotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKKworICAgIC8qIFRoZSBmcmFtZSBjb3VsZCBiZSBu
dWxsIGlzIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkKKyAgICAg
KiBGcmFtZSwgaS5lLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBmaWxlLgorICAgICAqIElmIHRo
ZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMgbnVsbCB0aGlzIG11c3QgYmUgYW4g
YXR0ZW1wdGVkCisgICAgICogbG9hZCBmcm9tIGFuIG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdz
IGp1c3QgYmxvY2sgaXQuICovCisgICAgaWYgKGZyYW1lICYmICFmcmFtZS0+cGFnZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBLVVJMIHVybCA9IHJlcXVlc3QoKS51cmwoKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsu
Y3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAK
aW5kZXggNDkwMzcwYy4uZDI3YzcwNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKICNpbmNsdWRlICJDb250
ZXh0TWVudUNsaWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKQEAgLTE2Myw3ICsxNjUsMTcgQEAgdm9pZCBDb250ZXh0TWVudUNsaWVudDo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiwgY29uc3QgQ29udGV4dE0KIAogdm9p
ZCBDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0
X2Rvd25sb2FkX25ldyh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZ2Jvb2xlYW4g
aGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3LCAiZG93bmxvYWQt
cmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAgIGlmIChoYW5kbGVkKSB7Cisg
ICAgICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7CisgICAgfQorICAgIGVsc2Ug
eworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgZ19v
YmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIH0KIH0KIAogdm9pZCBDb250ZXh0TWVudUNsaWVu
dDo6Y29weUltYWdlVG9DbGlwYm9hcmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IDMz
ZDBmYmIuLmMwZTJjYTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdodCAoQykg
MjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0zOCw2ICszOSw4IEBACiAjaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJl
bmRlclBhcnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTc0Niw5ICs3NDks
MjMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBS
ZXNvdXJjZUVycm9yJikKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQt
ZG9uZSIsIGZhbHNlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRv
d25sb2FkKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICAvLyBGSVhN
RTogVXNlIGluaXRpYWxSZXF1ZXN0PworICAgIC8vIEZJWE1FOiBEb24ndCBjcmVhdGUgbmV0d29y
a1JlcXVlc3QgZnJvbSB0aGUgVVJJIGJ1dCBmcm9tIHRoZSBmdWxsIG9iamVjdCB3aGVuIHRoZSBu
ZXcgQVBJIGlzIG1lcmdlZC4KKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogbmV0d29ya1JlcXVl
c3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyhyZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtpdF9kb3du
bG9hZF9uZXdfZnJvbV9leGlzdGluZ19jb25uZWN0aW9uKGhhbmRsZSwgbmV0d29ya1JlcXVlc3Qs
IHJlc3BvbnNlKTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZSh2aWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKwor
ICAgIGlmIChoYW5kbGVkKSB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9h
ZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBoYW5kbGUtPmNhbmNlbCgpOworICAgICAg
ICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7CisgICAgfQogfQogCiBSZXNvdXJjZUVycm9yIEZy
YW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQpA
QCAtODMyLDkgKzg0OSwyMSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1l
bnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJybwogICAgIH0KIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogbmV0d29ya1JlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyhy
ZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCA9IHdlYmtpdF9kb3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0KG5ldHdvcmtSZXF1
ZXN0KTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh2
aWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAgIGlm
IChoYW5kbGVkKSB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7Cisg
ICAgfQorICAgIGVsc2UgeworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2Fk
KTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIH0KIH0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeSgpCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4
IDhjODY4YTIuLmQzMzQwNDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdHZlcnNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVm
aW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJm
cmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaD4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApp
bmRleCBmOTRlNzEwLi5iMGFiNWU5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC02
OCw2ICs2OCw5IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJXaW5kb3dGZWF0dXJlc0NsYXNz
IFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzQ2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
VmlldyBXZWJLaXRXZWJWaWV3OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyBX
ZWJLaXRXZWJWaWV3Q2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCBXZWJL
aXREb3dubG9hZDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdlYktpdERv
d25sb2FkQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Y2VkZTcK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAK
QEAgLTAsMCArMSw3NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9t
ZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJOb25jb3B5YWJsZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5o
IgorI2luY2x1ZGUgIndlYmtpdGRvd25sb2FkLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5o
IgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2NsYXNzIERvd25sb2Fk
Q2xpZW50IDogTm9uY29weWFibGUsIHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CisgICAg
cHVibGljOgorICAgICAgICBEb3dubG9hZENsaWVudChXZWJLaXREb3dubG9hZCopOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgV2ViS2l0RG93bmxvYWQqIG1fZG93bmxvYWQ7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CisgICAgZ2NoYXIqIGRlc3RpbmF0aW9uX3VyaTsKKyAg
ICBnY2hhciogc3VnZ2VzdGVkX2ZpbGVuYW1lOworICAgIGd1aW50IGN1cnJlbnRfc2l6ZTsKKyAg
ICBXZWJLaXREb3dubG9hZFN0YXRlIHN0YXRlOworICAgIEdGaWxlT3V0cHV0U3RyZWFtKiBvdXRw
dXRfc3RyZWFtOworICAgIERvd25sb2FkQ2xpZW50KiBkb3dubG9hZF9jbGllbnQ7CisgICAgV2Vi
S2l0TmV0d29ya1JlcXVlc3QqIG5ldHdvcmtfcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlKiBuZXR3b3JrX3Jlc3BvbnNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZT4gcmVzb3VyY2VfaGFuZGxlOworfTsKKworZW51bSB7CisgICAgLyogbm9ybWFsIHNp
Z25hbHMgKi8KKyAgICBFUlJPUiwKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50
IHdlYmtpdF9kb3dubG9hZF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworZW51bSB7
CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9ORVRXT1JLX1JFUVVFU1QsCisgICAgUFJPUF9ERVNU
SU5BVElPTl9VUkksCisgICAgUFJPUF9TVUdHRVNURURfRklMRU5BTUUsCisgICAgUFJPUF9QUk9H
UkVTUywKKyAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICBQUk9QX1RPVEFMX1NJWkUsCit9Owor
CitHX0RFRklORV9UWVBFKFdlYktpdERvd25sb2FkLCB3ZWJraXRfZG93bmxvYWQsIEdfVFlQRV9P
QkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQoreworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9B
RChvYmplY3QpOworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dO
TE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICAvKiBXZSBkb24ndCBjYWxsIHdlYmtp
dF9kb3dubG9hZF9jYW5jZWwoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZW1pdAorICAgICAq
IHNpZ25hbHMgd2hlbiBmaW5hbGlzaW5nIGFuIG9iamVjdC4gKi8KKyAgICBpZiAocHJpdi0+cmVz
b3VyY2VfaGFuZGxlKSB7CisgICAgICAgIGlmIChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfRE9XTkxP
QURfU1RBVEVfU1RBUlRFRCkgeworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5z
ZXRDbGllbnQoMCk7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgp
OworICAgICAgICB9CisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS5yZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgZGVsZXRlIHByaXYtPmRvd25sb2FkX2NsaWVudDsKKyAgICBkZWxldGUgcHJp
di0+bmV0d29ya19yZXNwb25zZTsKKworICAgIGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkp
OworICAgIGdfZnJlZShwcml2LT5zdWdnZXN0ZWRfZmlsZW5hbWUpOworICAgIGlmIChwcml2LT5v
dXRwdXRfc3RyZWFtKQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vdXRwdXRfc3RyZWFt
KTsKKyAgICBnX29iamVjdF91bnJlZihwcml2LT5uZXR3b3JrX3JlcXVlc3QpOworCisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2Rvd25sb2FkX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05FVFdPUktfUkVR
VUVTVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRf
Z2V0X25ldHdvcmtfcmVxdWVzdChkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfREVTVElOQVRJT05fVVJJOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TVUdHRVNURURfRklMRU5BTUU6CisgICAgICAgIGdfdmFs
dWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5h
bWUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BST0dSRVNTOgor
ICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfcHJv
Z3Jlc3MoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRf
U0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRf
Z2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfVE9UQUxfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRf
ZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25s
b2FkX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworICAgIFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworICAgIFdlYktpdERvd25sb2FkUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAg
ICBzd2l0Y2gocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ORVRXT1JLX1JFUVVFU1Q6CisgICAg
ICAgIHByaXYtPm5ldHdvcmtfcmVxdWVzdCA9IChXZWJLaXROZXR3b3JrUmVxdWVzdCopZ192YWx1
ZV9kdXBfb2JqZWN0KHZhbHVlKTsKKyAgICAgICAgLyogVGhpcyBpcyBzYWZlIGFzIG5ldHdvcmst
cmVxdWVzdCBpcyBhIGNvbnN0cnVjdCBvbmx5IHByb3BlcnR5IGFuZCBzdWdnZXN0ZWRfZmlsZW5h
bWUKKyAgICAgICAgICogaXMgaW5pdGlhbGx5IG51bGwuICovCisgICAgICAgIHByaXYtPnN1Z2dl
c3RlZF9maWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUod2Via2l0X25ldHdvcmtfcmVxdWVz
dF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfREVTVElOQVRJT05fVVJJOgorICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rl
c3RpbmF0aW9uX3VyaShkb3dubG9hZCwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KFdlYktpdERvd25sb2FkQ2xhc3MqIGRvd25s
b2FkQ2xhc3MpCit7CisgICAgLyoKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBt
ZXRob2RzCisgICAgICovCisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKGRvd25sb2FkQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9kb3dubG9hZF9maW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2Rvd25sb2FkX2dldF9wcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5
ID0gd2Via2l0X2Rvd25sb2FkX3NldF9wcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktp
dERvd25sb2FkOjplcnJvcjoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2gg
dGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGN1cnJlbnRfYnl0ZXM6IHRoZSBjdXJyZW50
IGNvdW50IG9mIGJ5dGVzIGRvd25sb2FkZWQKKyAgICAgKiBAdG90YWxfYnl0ZXM6IHRoZSB0b3Rh
bCBieXRlcyBjb3VudCBpbiB0aGUgZG93bmxvYWRlZCBmaWxlLCBha2EgZmlsZSBzaXplLgorICAg
ICAqCisgICAgICogSW5kaWNhdGVzIGFuIGVycm9yIGluIHRoZSBkb3dubG9hZC4KKyAgICAgKgor
ICAgICAqIFNpbmNlOiAxLjEuMQorICAgICAqLworICAgIHdlYmtpdF9kb3dubG9hZF9zaWduYWxz
W0VSUk9SXSA9IGdfc2lnbmFsX25ldygiZXJyb3IiLAorICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1MoZG93bmxvYWRDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05B
TF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX0lOVF9JTlRfU1RSSU5HLAorICAg
ICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCisgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAg
ICAgICAgICAgR19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAg
LyoKKyAgICAgKiBwcm9wZXJ0aWVzCisgICAgICovCisKKyAgICAvKioKKyAgICAqIFdlYktpdERv
d25sb2FkOm5ldHdvcmstcmVxdWVzdAorICAgICoKKyAgICAqIFRoZSAjV2ViS2l0TmV0d29ya1Jl
cXVlc3QgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3dubG9hZC4KKyAgICAqCisgICAg
KiBTaW5jZTogMS4xLjEKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X05FVFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
bmV0d29yay1yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJO
ZXR3b3JrIFJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRo
ZSBuZXR3b3JrIHJlcXVlc3QgZm9yIHRoZSBVUkkgdGhhdCBzaG91bGQgYmUgZG93bmxvYWRlZCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ORVRXT1JL
X1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxh
Z3MpKFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOwor
CisgICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpkZXN0aW5hdGlvbi11cmkKKyAgICAqCisg
ICAgKiBUaGUgVVJJIG9mIHRoZSBzYXZlIGxvY2F0aW9uIGZvciB0aGlzIGRvd25sb2FkLgorICAg
ICoKKyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfREVTVElOQVRJT05fVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXN0aW5hdGlvbi11cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkRlc3RpbmF0aW9uIFVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiVGhlIGRlc3RpbmF0aW9uIFVSSSB3aGVyZSB0byBzYXZlIHRoZSBmaWxlIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAg
KiBXZWJLaXREb3dubG9hZDpzdWdnZXN0ZWQtZmlsZW5hbWUKKyAgICAqCisgICAgKiBUaGUgZmls
ZSBuYW1lIHN1Z2dlc3RlZCBhcyBkZWZhdWx0IHdoZW4gc2F2aW5nCisgICAgKgorICAgICogU2lu
Y2U6IDEuMS4xCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9i
amVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVUdH
RVNURURfRklMRU5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1
Z2dlc3RlZC1maWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
U3VnZ2VzdGVkIEZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJUaGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmciLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgLyoqCisgICAqIFdl
YktpdERvd25sb2FkOnByb2dyZXNzOgorICAgKgorICAgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50
IHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZC4KKyAgICoKKyAgICogU2luY2U6IDEuMS4xCisgICAq
LworICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9Q
Uk9HUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2RvdWJsZSgicHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJQcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRldGVybWluZXMgdGhlIGN1cnJlbnQgcHJv
Z3Jlc3Mgb2YgdGhlIGRvd25sb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLjAsIDEuMCwgMS4wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpjdXJyZW50LXNpemUKKyAgICAq
CisgICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRlZAorICAgICoK
KyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfQ1VSUkVOVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjdXJyZW50LXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkN1
cnJlbnQgU2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGxl
bmd0aCBvZiB0aGUgZGF0YSBhbHJlYWR5IGRvd25sb2FkZWQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAg
ICogV2ViS2l0RG93bmxvYWQ6dG90YWwtc2l6ZQorICAgICoKKyAgICAqIFRoZSB0b3RhbCBzaXpl
IG9mIHRoZSBmaWxlCisgICAgKgorICAgICogU2luY2U6IDEuMS4xCisgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInRvdGFsLXNpemUiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIlRvdGFsIFNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZG93bmxvYWRDbGFzcywgc2l6ZW9mKFdlYktpdERvd25sb2FkUHJp
dmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfaW5pdChXZWJLaXREb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgIHByaXYtPmRvd25sb2Fk
X2NsaWVudCA9IG5ldyBEb3dubG9hZENsaWVudChkb3dubG9hZCk7CisgICAgcHJpdi0+Y3VycmVu
dF9zaXplID0gMDsKKyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVB
VEVEOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9uZXc6CisgKiBAdXJpOiBhIFVSSQor
ICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdERvd25sb2FkIG9iamVjdCBmb3IgdGhlIGdpdmVu
IFVSSS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3ICNXZWJLaXREb3dubG9hZAorICoKKyAqIFNp
bmNlOiAxLjEuMQorICovCitXZWJLaXREb3dubG9hZCogd2Via2l0X2Rvd25sb2FkX25ldyhjb25z
dCBnY2hhciogdXJpKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVyaSwgMCk7CisKKyAg
ICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rf
bmV3KHVyaSk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2Fk
X25ld19mcm9tX3JlcXVlc3QocmVxdWVzdCk7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7
CisgICAgcmV0dXJuIGRvd25sb2FkOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9uZXdf
ZnJvbV9yZXF1ZXN0OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdE5ldHdvcmtSZXF1ZXN0CisgKgor
ICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0RG93bmxvYWQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4KKyAq
ICNXZWJLaXROZXR3b3JrUmVxdWVzdCBvYmplY3QuCisgKgorICogUmV0dXJuczogdGhlIG5ldyAj
V2ViS2l0RG93bmxvYWQKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2ViS2l0RG93bmxvYWQq
IHdlYmtpdF9kb3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0KFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAg
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9ET1dOTE9BRCwgIm5ldHdvcmstcmVxdWVzdCIsIHJlcXVlc3QsIE5VTEwpKTsK
KyAgICByZXR1cm4gZG93bmxvYWQ7Cit9CisKKy8vIFByaXZhdGUgZnVuY3Rpb24uCisvLyBGSVhN
RSBVc2UgV2ViS2l0TmV0d29ya1Jlc3BvbnNlIHdoZW4gd2UgaGF2ZSBpdAorV2ViS2l0RG93bmxv
YWQqIHdlYmtpdF9kb3dubG9hZF9uZXdfZnJvbV9leGlzdGluZ19jb25uZWN0aW9uKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1
ZXN0LCAwKTsKKworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtpdF9kb3dubG9h
ZF9uZXdfZnJvbV9yZXF1ZXN0IChyZXF1ZXN0KTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcHJp
di0+cmVzb3VyY2VfaGFuZGxlID0gaGFuZGxlOworICAgIHByaXYtPm5ldHdvcmtfcmVzcG9uc2Ug
PSBuZXcgUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSk7CisKKyAgICByZXR1cm4gZG93bmxvYWQ7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG93bmxvYWRfb3Blbl9zdHJlYW1fZm9yX3Vy
aShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiB1cmksIGdib29sZWFuIGFw
cGVuZD1GQUxTRSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh1cmksIEZBTFNFKTsKKwor
ICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJ
VkFURShkb3dubG9hZCk7CisgICAgR0ZpbGUqIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl91cmkodXJp
KTsKKyAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgIGlmIChhcHBlbmQpCisgICAgICAg
IHByaXYtPm91dHB1dF9zdHJlYW0gPSBnX2ZpbGVfYXBwZW5kX3RvKGZpbGUsIEdfRklMRV9DUkVB
VEVfTk9ORSwgTlVMTCwgJmVycm9yKTsKKyAgICBlbHNlCisgICAgICAgIHByaXYtPm91dHB1dF9z
dHJlYW0gPSBnX2ZpbGVfcmVwbGFjZShmaWxlLCBOVUxMLCBUUlVFLCBHX0ZJTEVfQ1JFQVRFX05P
TkUsIE5VTEwsICZlcnJvcik7CisKKyAgICBnX29iamVjdF91bnJlZihmaWxlKTsKKworICAgIGlm
KGVycm9yKSB7CisgICAgICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RF
U1RJTkFUSU9OLCBlcnJvci0+bWVzc2FnZSwgJmhhbmRsZWQpOworICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRS
VUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgaWYgKHByaXYtPm91
dHB1dF9zdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+b3V0cHV0X3N0cmVh
bSk7CisgICAgICAgIHByaXYtPm91dHB1dF9zdHJlYW0gPSBOVUxMOworICAgIH0KK30KKworLyoq
CisgKiB3ZWJraXRfZG93bmxvYWRfc3RhcnQ6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93
bmxvYWQKKyAqCisgKiBJbml0aWF0ZXMgdGhlIGRvd25sb2FkLiBOb3RpY2UgdGhhdCB5b3UgbXVz
dCBoYXZlIHNldCB0aGUKKyAqIGRlc3RpbmF0aW9uLXVyaSBwcm9wZXJ0eSBiZWZvcmUgY2FsbGlu
ZyB0aGlzIG1ldGhvZC4KKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwordm9pZCB3ZWJraXRfZG93
bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXREb3dubG9h
ZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHByaXYtPnN0YXRlID09IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEKTsK
KworICAgIGlmIChwcml2LT5yZXNvdXJjZV9oYW5kbGUpCisgICAgICAgIHByaXYtPnJlc291cmNl
X2hhbmRsZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkX2NsaWVudCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIEZJWE1FIHVzZSBraXQocHJpdi0+bmV0d29ya19yZXF1ZXN0KSB3aGVuIFdlYktp
dE5ldHdvcmtSZXF1ZXN0IHdpbGwgYmUgZmluaXNoZWQuCisgICAgICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShwcml2LT5uZXR3b3JrX3Jl
cXVlc3QpKTsKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZShyZXF1ZXN0LCBwcml2LT5kb3dubG9hZF9jbGllbnQsIDAsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOworICAgIH0KKworICAgIHdlYmtpdF9kb3dubG9hZF9vcGVuX3N0cmVhbV9mb3JfdXJp
KGRvd25sb2FkLCBwcml2LT5kZXN0aW5hdGlvbl91cmkpOworfQorCisvKioKKyAqIHdlYmtpdF9k
b3dubG9hZF9jYW5jZWw6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisg
KiBDYW5jZWxzIHRoZSBkb3dubG9hZC4gQ2FsbGluZyB0aGlzIHdpbGwgbm90IGZyZWUgdGhlCisg
KiAjV2ViS2l0RG93bmxvYWQgb2JqZWN0LCBzbyB5b3Ugc3RpbGwgbmVlZCB0byBjYWxsCisgKiBn
X29iamVjdF91bnJlZigpIG9uIGl0LCBpZiB5b3UgYXJlIHRoZSBvd25lciBvZiBhIHJlZmVyZW5j
ZS4gTm90aWNlCisgKiB0aGF0IGNhbmNlbGxpbmcgdGhlIGRvd25sb2FkIHByb3Zva2VzIHRoZSBl
bWlzc2lvbiBvZiB0aGUKKyAqIFdlYktpdERvd25sb2FkOjplcnJvciBzaWduYWwsIHJlcG9ydGlu
ZyB0aGF0IHRoZSBkb3dubG9hZCB3YXMKKyAqIGNhbmNlbGxlZC4KKyAqCisgKiBTaW5jZTogMS4x
LjEKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9h
ZCkpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPV05MT0FE
X0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgIGlmIChwcml2LT5yZXNvdXJjZV9oYW5kbGUp
CisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS0+Y2FuY2VsKCk7CisKKyAgICBwcml2LT5z
dGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQ7CisKKyAgICBnYm9vbGVhbiBo
YW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwg
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLCAiVXNlciBjYW5jZWxsZWQg
dGhlIGRvd25sb2FkIiwgJmhhbmRsZWQpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9n
ZXRfdXJpOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICogQ29udmVu
aWVuY2UgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBVUkkgZnJvbSB0aGUKKyAqICNXZWJLaXROZXR3
b3JrUmVxdWVzdCB3aGljaCBpcyBiZWluZyBkb3dubG9hZGVkLgorICoKKyAqIFJldHVybnM6IHRo
ZSB1cmkKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9kb3du
bG9hZF9nZXRfdXJpKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdl
YktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShk
b3dubG9hZCk7CisgICAgcmV0dXJuIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShwcml2
LT5uZXR3b3JrX3JlcXVlc3QpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfbmV0
d29ya19yZXF1ZXN0OgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICog
UmV0cmlldmVzIHRoZSAjV2ViS2l0TmV0d29ya1JlcXVlc3Qgb2JqZWN0IHRoYXQgYmFja3MgdGhl
IGRvd25sb2FkCisgKiBwcm9jZXNzLgorICoKKyAqIFJldHVybnM6IHRoZSAjV2ViS2l0TmV0d29y
a1JlcXVlc3QgaW5zdGFuY2UKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2ViS2l0TmV0d29y
a1JlcXVlc3QqIHdlYmtpdF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0KFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9X
TkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIHBy
aXYtPm5ldHdvcmtfcmVxdWVzdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3Nl
dF9yZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIC8vIEZJWE1FIFVzZSBXZWJLaXROZXR3b3JrUmVzcG9uc2Ug
d2hlbiBpdCdzIG1lcmdlZAorICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcHJpdi0+bmV0d29ya19yZXNw
b25zZSA9IG5ldyBSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZToKKyAqIEBkb3dubG9hZDogdGhlICNX
ZWJLaXREb3dubG9hZAorICoKKyAqIFJldHJpZXZlcyB0aGUgZmlsZW5hbWUgdGhhdCB3YXMgc3Vn
Z2VzdGVkIGJ5IHRoZSBzZXJ2ZXIsIG9yIHRoZSBvbmUKKyAqIGRlcml2ZWQgYnkgV2ViS2l0IGZy
b20gdGhlIFVSSS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc3VnZ2VzdGVkIGZpbGVuYW1lCisgKgor
ICogU2luY2U6IDEuMS4xCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3N1
Z2dlc3RlZF9maWxlbmFtZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisKKyAg
ICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZB
VEUoZG93bmxvYWQpOworICAgIHJldHVybiBwcml2LT5zdWdnZXN0ZWRfZmlsZW5hbWU7Cit9CisK
Ky8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmk6CisgKiBAZG93bmxv
YWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBPYnRhaW5zIHRoZSBVUkkgdG8gd2hpY2gg
dGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uIFRoaXMKKyAqIG11c3QgaGF2ZSBi
ZWVuIHNldCBieSB0aGUgYXBwbGljYXRpb24gYmVmb3JlIGNhbGxpbmcKKyAqIHdlYmtpdF9kb3du
bG9hZF9zdGFydCgpLCBhbmQgbWF5IGJlICVOVUxMLgorICoKKyAqIFJldHVybnM6IHRoZSBkZXN0
aW5hdGlvbiBVUkkgb3IgJU5VTEwKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworY29uc3QgZ2No
YXIqIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQo
ZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIHByaXYtPmRl
c3RpbmF0aW9uX3VyaTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0
aW9uX3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICogQGRlc3RpbmF0
aW9uX3VyaTogdGhlIGRlc3RpbmF0aW9uIFVSSQorICoKKyAqIERlZmluZXMgdGhlIFVSSSB0aGF0
IHNob3VsZCBiZSB1c2VkIHRvIHNhdmUgdGhlIGRvd25sb2FkZWQgZmlsZSB0by4KKyAqCisgKiBT
aW5jZTogMS4xLjEKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3Vy
aShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbl91cmkp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKGRlc3RpbmF0aW9uX3VyaSk7CisKKyAgICBXZWJLaXREb3du
bG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQp
OworICAgIGlmIChwcml2LT5kZXN0aW5hdGlvbl91cmkgJiYgIXN0cmNtcChwcml2LT5kZXN0aW5h
dGlvbl91cmksIGRlc3RpbmF0aW9uX3VyaSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJ
WE1FIGNhbiB3ZSBoYXZlIGEgYmV0dGVyIGNoZWNrPworICAgIGlmIChwcml2LT5zdGF0ZSAhPSBX
RUJLSVRfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRCAmJiBwcml2LT5zdGF0ZSAhPSBXRUJLSVRfRE9X
TkxPQURfU1RBVEVfQ0FOQ0VMTEVEKSB7CisgICAgICAgIEFTU0VSVChwcml2LT5kZXN0aW5hdGlv
bl91cmkpOworCisgICAgICAgIGdib29sZWFuIGRvd25sb2FkaW5nID0gcHJpdi0+b3V0cHV0X3N0
cmVhbSAhPSBOVUxMOworICAgICAgICBpZiAoZG93bmxvYWRpbmcpCisgICAgICAgICAgICB3ZWJr
aXRfZG93bmxvYWRfY2xvc2Vfc3RyZWFtKGRvd25sb2FkKTsKKworICAgICAgICBHRmlsZSogc3Jj
ID0gZ19maWxlX25ld19mb3JfdXJpKHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7CisgICAgICAgIEdG
aWxlKiBkZXN0ID0gZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9uX3VyaSk7CisgICAgICAg
IEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisgICAgICAgIGdfZmlsZV9tb3ZlKHNyYywgZGVzdCwg
R19GSUxFX0NPUFlfQkFDS1VQLCBOVUxMLCBOVUxMLCBOVUxMLCAmZXJyb3IpOworCisgICAgICAg
IGdfb2JqZWN0X3VucmVmKHNyYyk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGRlc3QpOworCisg
ICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICAg
ICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lU
X0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OLCBlcnJvci0+bWVzc2FnZSwgJmhhbmRsZWQpOwor
ICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChkb3dubG9hZGluZykgeworICAgICAgICAgICAgaWYgKCF3
ZWJraXRfZG93bmxvYWRfb3Blbl9zdHJlYW1fZm9yX3VyaShkb3dubG9hZCwgZGVzdGluYXRpb25f
dXJpLCBUUlVFKSkgeworICAgICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoZG93
bmxvYWQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkpOworICAgIHByaXYt
PmRlc3RpbmF0aW9uX3VyaSA9IGdfc3RyZHVwKGRlc3RpbmF0aW9uX3VyaSk7CisgICAgZ19vYmpl
Y3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImRlc3RpbmF0aW9uLXVyaSIpOworfQorCisv
KioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdGU6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2Vi
S2l0RG93bmxvYWQKKyAqCisgKiBPYnRhaW5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkb3du
bG9hZCwgYXMgYQorICogI1dlYktpdERvd25sb2FkU3RhdGUuCisgKgorICogUmV0dXJuczogdGhl
IGN1cnJlbnQgI1dlYktpdERvd25sb2FkU3RhdGUKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwor
V2ViS2l0RG93bmxvYWRTdGF0ZSB3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXRlIChXZWJLaXREb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RP
V05MT0FEKGRvd25sb2FkKSwgV0VCS0lUX0RPV05MT0FEX1NUQVRFX0VSUk9SKTsKKworICAgIFdl
YktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShk
b3dubG9hZCk7CisgICAgcmV0dXJuIHByaXYtPnN0YXRlOworfQorCisvKioKKyAqIHdlYmtpdF9k
b3dubG9hZF9nZXRfdG90YWxfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9h
ZAorICoKKyAqIFJldHVybnMgdGhlIGV4cGVjdGVkIHRvdGFsIHNpemUgb2YgdGhlIGRvd25sb2Fk
LiBUaGlzIGlzIGV4cGVjdGVkCisgKiBiZWNhdXNlIHRoZSBzZXJ2ZXIgbWF5IHByb3ZpZGUgaW5j
b3JyZWN0IG9yIG1pc3NpbmcKKyAqIENvbnRlbnQtTGVuZ3RoLiBOb3RpY2UgdGhhdCB0aGlzIG1h
eSBncm93IG92ZXIgdGltZSwgYXMgaXQgd2lsbCBiZQorICogYWx3YXlzIHRoZSBzYW1lIGFzIGN1
cnJlbnRfc2l6ZSBpbiB0aGUgY2FzZXMgd2hlcmUgY3VycmVudCBzaXplCisgKiBzdXJwYXNzZXMg
aXQuCisgKgorICogUmV0dXJuczogdGhlIGV4cGVjdGVkIHRvdGFsIHNpemUgb2YgdGhlIGRvd25s
b2FkZWQgZmlsZQorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCitndWludDY0IHdlYmtpdF9kb3du
bG9hZF9nZXRfdG90YWxfc2l6ZSAoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDApOworCisg
ICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPV05MT0FEX0dFVF9QUklW
QVRFKGRvd25sb2FkKTsKKyAgICBpZiAoIXByaXYtPm5ldHdvcmtfcmVzcG9uc2UpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIE1BWChwcml2LT5jdXJyZW50X3NpemUsIHByaXYtPm5l
dHdvcmtfcmVzcG9uc2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKK30KKworLyoqCisgKiB3
ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJL
aXREb3dubG9hZAorICoKKyAqIEN1cnJlbnQgYWxyZWFkeSBkb3dubG9hZGVkIHNpemUuCisgKgor
ICogUmV0dXJuczogdGhlIGFscmVhZHkgZG93bmxvYWRlZCBzaXplCisgKgorICogU2luY2U6IDEu
MS4xCisgKi8KK2d1aW50NjQgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJu
IHByaXYtPmN1cnJlbnRfc2l6ZTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3By
b2dyZXNzOgorICogQHdlYl92aWV3OiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIERldGVybWlu
ZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkLgorICoKKyAqIFJldHVybnM6
IGEgI2dkb3VibGUgcmFuZ2luZyBmcm9tIDAuMCB0byAxLjAuCisgKgorICogU2luY2U6IDEuMS4x
CisgKi8KK2dkb3VibGUgd2Via2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzcyhXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05M
T0FEKGRvd25sb2FkKSwgMS4wKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgZ2RvdWJsZSB0b3Rh
bF9zaXplID0gKGdkb3VibGUpcHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKCk7CisKKyAgICBpZiAodG90YWxfc2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gMS4w
OworCisgICAgcmV0dXJuICgoZ2RvdWJsZSlwcml2LT5jdXJyZW50X3NpemUpIC8gdG90YWxfc2l6
ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAg
ICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZB
VEUoZG93bmxvYWQpOworCisgICAgaWYgKHByaXYtPmN1cnJlbnRfc2l6ZSA9PSAwKSB7CisgICAg
ICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX1NUQVJURUQ7CisgICAgfQor
CisgICAgQVNTRVJUKHByaXYtPm91dHB1dF9zdHJlYW0pOworCisgICAgZ3NpemUgYnl0ZXNfd3Jp
dHRlbjsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAgIGdfb3V0cHV0X3N0cmVhbV93
cml0ZV9hbGwoR19PVVRQVVRfU1RSRUFNKHByaXYtPm91dHB1dF9zdHJlYW0pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNfd3JpdHRlbiwgTlVMTCwg
JmVycm9yKTsKKworICAgIGlmIChlcnJvcikgeworICAgICAgICBnYm9vbGVhbiBoYW5kbGVkOwor
ICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJ
VF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiwgZXJyb3ItPm1lc3NhZ2UsICZoYW5kbGVkKTsK
KyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHByaXYtPmN1cnJlbnRfc2l6ZSArPSBsZW5ndGg7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdf
T0JKRUNUKGRvd25sb2FkKSwgImN1cnJlbnQtc2l6ZSIpOworCisgICAgQVNTRVJUKHByaXYtPm5l
dHdvcmtfcmVzcG9uc2UpOworICAgIGlmIChwcml2LT5jdXJyZW50X3NpemUgPiBwcml2LT5uZXR3
b3JrX3Jlc3BvbnNlLT5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkKKyAgICAgICAgZ19vYmplY3Rf
bm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInRvdGFsLXNpemUiKTsKKworICAgIC8qIEZJWE1F
IHRocm90dGxlIHRoZSBudW1iZXIgb2YgdXBkYXRlcz8KKyAgICAgKiBzaG91bGQgd2UgcmVtb3Zl
IHRoZSBwcmV2aW91cyBnX29iamVjdF9ub3RpZnkoKXMgaWYgd2UgYXJlIGdvaW5nIHRvIHRocm90
dGxlCisgICAgICogdGhlIHByb2dyZXNzIHVwZGF0ZXM/ICovCisgICAgZ19vYmplY3Rfbm90aWZ5
KEdfT0JKRUNUKGRvd25sb2FkKSwgInByb2dyZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb3dubG9hZF9maW5pc2hlZF9sb2FkaW5nKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sK
KyAgICB3ZWJraXRfZG93bmxvYWRfY2xvc2Vfc3RyZWFtKGRvd25sb2FkKTsKKworICAgIFdlYktp
dERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3du
bG9hZCk7CisgICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfRklOSVNIRUQ7
CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInByb2dyZXNzIik7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9lcnJvcihXZWJLaXREb3dubG9hZCogZG93
bmxvYWQsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIHdlYmtpdF9kb3dubG9h
ZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBwcml2LT5z
dGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9FUlJPUjsKKworICAgIGdib29sZWFuIGhhbmRs
ZWQ7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBXRUJL
SVRfRE9XTkxPQURfRVJST1JfTkVUV09SSywgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpLCAmaGFuZGxlZCk7Cit9CisKK0Rvd25sb2FkQ2xpZW50OjpEb3dubG9hZENs
aWVudChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgOiBtX2Rvd25sb2FkKGRvd25sb2Fk
KQoreworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICB3ZWJr
aXRfZG93bmxvYWRfc2V0X3Jlc3BvbnNlKG1fZG93bmxvYWQsIHJlc3BvbnNlKTsKK30KKwordm9p
ZCBEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgd2Via2l0
X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEobV9kb3dubG9hZCwgZGF0YSwgbGVuZ3RoKTsKK30KKwor
dm9pZCBEb3dubG9hZENsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopCit7
CisgICAgd2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcobV9kb3dubG9hZCk7Cit9CisK
K3ZvaWQgRG93bmxvYWRDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfZXJyb3IobV9kb3dubG9h
ZCwgZXJyb3IpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50Ojp3YXNCbG9ja2VkKFJlc291cmNl
SGFuZGxlKikKK3sKKyAgICAvLyBGSVhNRSB3aGVuIHdlIGhhdmUgdGhlIG5ldyBmcmFtZSBsb2Fk
ZXIgc2lnbmFscyBhbmQgZXJyb3IgaGFuZGxpbmcuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBEb3dubG9hZENsaWVudDo6Y2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopCit7
CisgICAgLy8gRklYTUUgd2hlbiB3ZSBoYXZlIHRoZSBuZXcgZnJhbWUgbG9hZGVyIHNpZ25hbHMg
YW5kIGVycm9yIGhhbmRsaW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjMxZmU3MDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3du
bG9hZC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxn
bnNAZ25vbWUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9ET1dOTE9BRF9ICisjZGVmaW5lIFdFQktJVF9E
T1dOTE9BRF9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBF
X0RPV05MT0FEICAgICAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9XTkxPQUQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkKSkKKyNkZWZp
bmUgV0VCS0lUX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZENsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPV05MT0FEKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX0RPV05MT0FEKSkKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBF
X0RPV05MT0FELCBXZWJLaXREb3dubG9hZENsYXNzKSkKKwordHlwZWRlZiBlbnVtIHsKKyAgICBX
RUJLSVRfRE9XTkxPQURfU1RBVEVfRVJST1IgPSAtMSwKKyAgICBXRUJLSVRfRE9XTkxPQURfU1RB
VEVfQ1JFQVRFRCA9IDAsCisgICAgV0VCS0lUX0RPV05MT0FEX1NUQVRFX1NUQVJURUQsCisgICAg
V0VCS0lUX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCwKKyAgICBXRUJLSVRfRE9XTkxPQURfU1RB
VEVfRklOSVNIRUQKK30gV2ViS2l0RG93bmxvYWRTdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAg
ICBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIsCisgICAgV0VCS0lUX0RP
V05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OLAorICAgIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRX
T1JLCit9IFdlYktpdERvd25sb2FkRXJyb3I7CisKK3N0cnVjdCBfV2ViS2l0RG93bmxvYWQgewor
ICAgIEdPYmplY3QgcGFyZW50OworfTsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIHsK
KyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2Rvd25sb2FkX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X2Rvd25sb2FkX25ldyAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3QgZ2NoYXIgKnVyaSk7CisKK1dFQktJVF9BUEkgV2ViS2l0RG93bmxvYWQg
Kgord2Via2l0X2Rvd25sb2FkX25ld19mcm9tX3JlcXVlc3QgICAgICAgICAgICAoV2ViS2l0TmV0
d29ya1JlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb3dubG9h
ZF9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICpkb3dubG9h
ZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX2NhbmNlbCAgICAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBj
b25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9hZF9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAg
KFdlYktpdERvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0TmV0d29y
a1JlcXVlc3QqCit3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdCAgICAgICAgIChX
ZWJLaXREb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgor
d2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUgICAgICAoV2ViS2l0RG93bmxv
YWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9kb3du
bG9hZF9nZXRfZGVzdGluYXRpb25fdXJpICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICpkb3du
bG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlv
bl91cmkgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgKmRlc3Rp
bmF0aW9uX3VyaSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25sb2FkX2dldF9w
cm9ncmVzcyAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkKTsKKwor
V0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUgICAgICAg
ICAgICAgIChXZWJLaXREb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGd1aW50
NjQKK3dlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplICAgICAgICAgICAgKFdlYktpdERv
d25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0RG93bmxvYWRTdGF0ZQor
d2Via2l0X2Rvd25sb2FkX2dldF9zdGF0ZSAgICAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxv
YWQgICAgKmRvd25sb2FkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRwcml2YXRlLmgKaW5kZXggYWNlOTk2ZC4uMTcwODA3ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHBy
aXZhdGUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFt
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oPgpAQCAtNDQsOSArNDUsMTMgQEAKICNp
bmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKICNpbmNsdWRlIDxnbGliLmg+
CiAKK2NsYXNzIERvd25sb2FkQ2xpZW50OworCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJL
aXRXZWJWaWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktpdFdlYkZyYW1lKik7CiAKQEAgLTExNCw2
ICsxMTksOSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2NoYXIqIHVyaTsKICAgICB9OwogCisg
ICAgI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93
bmxvYWRQcml2YXRlKSkKKyAgICB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRQcml2YXRl
IFdlYktpdERvd25sb2FkUHJpdmF0ZTsKKwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+
CiAgICAgd2Via2l0X3dlYl9mcmFtZV9pbml0X3dpdGhfd2ViX3ZpZXcoV2ViS2l0V2ViVmlldyos
IFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCopOwogCkBAIC0xNDQsNiArMTUyLDkgQEAg
ZXh0ZXJuICJDIiB7CiAgICAgdm9pZAogICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2Nh
bmNlbCAoV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKTsKIAorICAgIFdlYktpdERv
d25sb2FkKgorICAgIHdlYmtpdF9kb3dubG9hZF9uZXdfZnJvbV9leGlzdGluZ19jb25uZWN0aW9u
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgV2ViS2l0TmV0d29ya1JlcXVlc3QqLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisKICAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSB0
byB3ZWJraXR3ZWJmcmFtZS5oIG9uY2UgdGhlaXIgQVBJIGhhcyBiZWVuIGRpc2N1c3NlZC4KIAog
ICAgIFdFQktJVF9BUEkgR1NMaXN0KgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRl
eCAwZWE2ZWQ1Li5iYTRlY2VkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJ3ZWJraXRk
b3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXRl
bnVtdHlwZXMuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCkBAIC0xMzMsNiArMTM0LDcg
QEAgZW51bSB7CiAgICAgQ09QWV9DTElQQk9BUkQsCiAgICAgUEFTVEVfQ0xJUEJPQVJELAogICAg
IENVVF9DTElQQk9BUkQsCisgICAgRE9XTkxPQURfUkVRVUVTVEVELAogICAgIExBU1RfU0lHTkFM
CiB9OwogCkBAIC04MTEsNiArODEzLDEzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19y
ZWFsX3Bhc3RlX2NsaXBib2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiUGFzdGUiKS5leGVjdXRlKCk7CiB9CiAKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9kb3dubG9hZF9yZXF1ZXN0ZWQoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICB3ZWJraXRfZG93bmxv
YWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAvLyBSZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUgaXQg
d2Fzbid0IGhhbmRsZWQgdGhlcmVmb3JlIHRoZSBkb3dubG9hZCBpcyBkZWxldGVkCisgICAgcmV0
dXJuIEZBTFNFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyhvYmplY3QpOwpAQCAtMTA4NCw2ICsxMDkzLDI2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
ICAgICAgICAgR19UWVBFX1BPSU5URVIsCiAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7CiAK
KyAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6ZG93bmxvYWQtcmVxdWVzdGVkOgorICAg
ICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQK
KyAgICAgKiBAZG93bmxvYWQ6IHRoZSBtZXNzYWdlIHRleHQKKyAgICAgKiBAcmV0dXJuOiBUUlVF
IGlmIHRoZSBkb3dubG9hZCB3YXMgaGFuZGxlZCwgb3RoZXJ3aXNlIGl0J2xsIGJlIGNhbmNlbGxl
ZC4KKyAgICAgKgorICAgICAqIEEgbmV3IERvd25sb2FkIGlzIGJlaW5nIHJlcXVlc3RlZC4KKyAg
ICAgKgorICAgICAqIFNpbmNlOiAxLjEuMQorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19z
aWduYWxzW0RPV05MT0FEX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoImRvd25sb2FkLXJlcXVl
c3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAg
ICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJ
T04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgZG93
bmxvYWRfcmVxdWVzdGVkKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVf
aGFuZGxlZCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9C
T09MRUFOX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwKKyAgICAgICAg
ICAgIEdfVFlQRV9PQkpFQ1QpOworCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6bG9h
ZC1zdGFydGVkOgogICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2ln
bmFsIGlzIGVtaXR0ZWQKQEAgLTEzOTMsNiArMTQyMiw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
IHdlYlZpZXdDbGFzcy0+Y3V0X2NsaXBib2FyZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2N1dF9j
bGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5jb3B5X2NsaXBib2FyZCA9IHdlYmtpdF93ZWJf
dmlld19yZWFsX2NvcHlfY2xpcGJvYXJkOwogICAgIHdlYlZpZXdDbGFzcy0+cGFzdGVfY2xpcGJv
YXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfcGFzdGVfY2xpcGJvYXJkOworICAgIHdlYlZpZXdD
bGFzcy0+ZG93bmxvYWRfcmVxdWVzdGVkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfZG93bmxvYWRf
cmVxdWVzdGVkOwogCiAgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfd2Vi
X3ZpZXdfZGlzcG9zZTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAyYmI4YzYxLi43
ZjAxY2I4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysr
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC0xMDIsNiArMTAyLDggQEAg
c3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICgqIGN1dF9jbGlwYm9hcmQpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2Vi
X3ZpZXcpOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICgqIGNvcHlfY2xpcGJvYXJk
KSAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwogICAgIHZvaWQgICAg
ICAgICAgICAgICAgICAgICAgICgqIHBhc3RlX2NsaXBib2FyZCkgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAqd2ViX3ZpZXcpOworICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICgq
IGRvd25sb2FkX3JlcXVlc3RlZCkgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CiAKICAgICAvKgogICAgICAqIGlu
dGVybmFsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMgYi9XZWJL
aXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKaW5kZXggNTlmMjIzMC4uYjA3OTcyMiAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCisrKyBiL1dlYktpdFRvb2xzL0d0
a0xhdW5jaGVyL21haW4uYwpAQCAtNjUsNiArNjUsMjUgQEAgbGlua19ob3Zlcl9jYiAoV2ViS2l0
V2ViVmlldyogcGFnZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBjb25zdCBnY2hhciogbGluaywgZ3Bv
aW4KIH0KIAogc3RhdGljIHZvaWQKK2Rvd25sb2FkX3Byb2dyZXNzX2NiIChXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIGdfbWVzc2FnZSgiRG93bmxv
YWRpbmcgJXMgdG8gJXM6ICVsbGQvJWxsZCAoJWYpIiwKKyAgICAgICAgICAgICAgd2Via2l0X2Rv
d25sb2FkX2dldF91cmkoZG93bmxvYWQpLAorICAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCksCisgICAgICAgICAgICAgIHdlYmtpdF9kb3du
bG9hZF9nZXRfY3VycmVudF9zaXplKGRvd25sb2FkKSwKKyAgICAgICAgICAgICAgd2Via2l0X2Rv
d25sb2FkX2dldF90b3RhbF9zaXplKGRvd25sb2FkKSwKKyAgICAgICAgICAgICAgd2Via2l0X2Rv
d25sb2FkX2dldF9wcm9ncmVzcyhkb3dubG9hZCkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2Rv
d25sb2FkX3JlcXVlc3RlZF9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3Vy
aSAoZG93bmxvYWQsICJmaWxlOi8vL3RtcC9kb3dubG9hZC50ZXN0Iik7CisgICAgZ19zaWduYWxf
Y29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGRvd25sb2Fk
X3Byb2dyZXNzX2NiKSwgTlVMTCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lk
CiB0aXRsZV9jaGFuZ2VfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFt
ZSogd2ViX2ZyYW1lLCBjb25zdCBnY2hhciogdGl0bGUsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAg
aWYgKG1haW5fdGl0bGUpCkBAIC0xMTksNiArMTM4LDcgQEAgY3JlYXRlX2Jyb3dzZXIgKCkKICAg
ICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3ZpZXcpLCAibG9hZC1wcm9ncmVzcy1j
aGFuZ2VkIiwgR19DQUxMQkFDSyAocHJvZ3Jlc3NfY2hhbmdlX2NiKSwgd2ViX3ZpZXcpOwogICAg
IGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJsb2FkLWNvbW1pdHRlZCIs
IEdfQ0FMTEJBQ0sgKGxvYWRfY29tbWl0X2NiKSwgd2ViX3ZpZXcpOwogICAgIGdfc2lnbmFsX2Nv
bm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExC
QUNLIChsaW5rX2hvdmVyX2NiKSwgd2ViX3ZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdf
T0JKRUNUICh3ZWJfdmlldyksICJkb3dubG9hZC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLIChkb3du
bG9hZF9yZXF1ZXN0ZWRfY2IpLCB3ZWJfdmlldyk7CiAKICAgICByZXR1cm4gc2Nyb2xsZWRfd2lu
ZG93OwogfQotLSAKMS41LjYuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27353</attachid>
            <date>2009-02-05 10:27:13 -0800</date>
            <delta_ts>2009-02-12 12:26:56 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-Implement-download.patch</filename>
            <type>text/plain</type>
            <size>41999</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSBlYjczNjEwM2VlM2VkNWMzMDQzOTA4MzIzMDQzYTM0ZDgyMTM4MmU1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUdWUsIDI3IEphbiAyMDA5IDExOjQzOjQ1IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkCgotLS0KIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAgICB8ICAgIDkgKy0KIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIHwgICAxNCArLQogV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgfCAgIDI3ICstCiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICAgICAgICAgfCAgICAzICsKIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcCAgICAgICAgICAgICAgIHwgIDc1MCArKysr
KysrKysrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCAgICAg
ICAgICAgICAgICAgfCAgMTA0ICsrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
ICAgICAgICAgICAgICAgICAgfCAgICA4ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwICAgICAgICAgICAgICAgIHwgICAzMCArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmggICAgICAgICAgICAgICAgICB8ICAgIDIgKwogV2ViS2l0VG9vbHMvR3RrTGF1bmNo
ZXIvbWFpbi5jICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICsKIDEyIGZpbGVzIGNoYW5nZWQs
IDk2MiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgKCmRpZmYgLS1naXQgYS9HTlVtYWtlZmls
ZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IGM3NGUxZmEuLmExOTk3YzkgMTAwNjQ0Ci0tLSBh
L0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMDQsNiArMzA0LDcgQEAg
ZW5kaWYKIHdlYmtpdGd0a19oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Lmgg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBcCisJV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jl
cXVlc3QuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lvbi5oIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCkBAIC0zNDgsNiArMzQ5LDcg
QEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5h
dmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lk
ZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBc
CisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwIFwKIAlXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2lu
ZG93ZmVhdHVyZXMuY3BwCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IGRhOTY4NzMuLmIxMzc1MTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cApAQCAtMzM4LDkgKzMzOCwxMiBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFkLT5tX21zZyk7CiAKLSAgICAvLyBJZiB3ZSBhcmUgbm8g
bG9uZ2VyIGF0dGFjaGVkIHRvIGEgUGFnZSwgdGhpcyBtdXN0IGJlIGFuIGF0dGVtcHRlZCBsb2Fk
IGZyb20gYW4KLSAgICAvLyBvblVubG9hZCBoYW5kbGVyLCBzbyBsZXQncyBqdXN0IGJsb2NrIGl0
LgotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKKworICAgIC8qIFRoZSBmcmFtZSBjb3VsZCBiZSBu
dWxsIGlzIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkKKyAgICAg
KiBGcmFtZSwgaS5lLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBmaWxlLgorICAgICAqIElmIHRo
ZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMgbnVsbCB0aGlzIG11c3QgYmUgYW4g
YXR0ZW1wdGVkCisgICAgICogbG9hZCBmcm9tIGFuIG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdz
IGp1c3QgYmxvY2sgaXQuICovCisgICAgaWYgKGZyYW1lICYmICFmcmFtZS0+cGFnZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBLVVJMIHVybCA9IHJlcXVlc3QoKS51cmwoKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsu
Y3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAK
aW5kZXggNDkwMzcwYy4uZDI3YzcwNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKICNpbmNsdWRlICJDb250
ZXh0TWVudUNsaWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKQEAgLTE2Myw3ICsxNjUsMTcgQEAgdm9pZCBDb250ZXh0TWVudUNsaWVudDo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiwgY29uc3QgQ29udGV4dE0KIAogdm9p
ZCBDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0
X2Rvd25sb2FkX25ldyh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZ2Jvb2xlYW4g
aGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3LCAiZG93bmxvYWQt
cmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAgIGlmIChoYW5kbGVkKSB7Cisg
ICAgICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7CisgICAgfQorICAgIGVsc2Ug
eworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgZ19v
YmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIH0KIH0KIAogdm9pZCBDb250ZXh0TWVudUNsaWVu
dDo6Y29weUltYWdlVG9DbGlwYm9hcmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGQ3
OGM1OGIuLjFiMTQ0NzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdodCAoQykg
MjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC00MCw2ICs0MSw4IEBACiAjaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJl
bmRlclBhcnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTc1MCw5ICs3NTMs
MTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBS
ZXNvdXJjZUVycm9yJikKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQt
ZG9uZSIsIGZhbHNlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRv
d25sb2FkKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyB3
ZSBjb3VsZCByZXVzZSB0aGUgc2FtZSBoYW5kbGUsIGJ1dCBvdXIgcmVwbGFjaW5nIG9mIHRoZQor
ICAgIC8vIGNsaWVudCBzZWVtcyB0byBtYWtlIHRoaXMgaW1wb3NzaWJsZTsgdGhlIG1haW4gbG9h
ZCBmYWlscworICAgIC8vIGFuZCBpcyBzdG9wcGVkCisgICAgaGFuZGxlLT5jYW5jZWwoKTsKKyAg
ICBzdGFydERvd25sb2FkKHJlcXVlc3QpOwogfQogCiBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVy
Q2xpZW50OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQpAQCAtODM2LDkg
Kzg0MywyMSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihE
b2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJybwogICAgIH0KIH0KIAotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQordm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVz
dCogbmV0d29ya1JlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyhyZXF1ZXN0LnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCA9IHdlYmtpdF9kb3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0KG5ldHdvcmtSZXF1ZXN0KTsKKyAg
ICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh2aWV3LCAiZG93
bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAgIGlmIChoYW5kbGVk
KSB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7CisgICAgfQorICAg
IGVsc2UgeworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeSgpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IDhjODY4YTIu
LmQzMzQwNDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHZlcnNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJpbnNwZWN0b3IuaD4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAppbmRleCBmOTRl
NzEwLi5iMGFiNWU5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVz
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC02OCw2ICs2OCw5
IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJXaW5kb3dGZWF0dXJlc0NsYXNzIFdlYktpdFdl
YldpbmRvd0ZlYXR1cmVzQ2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJL
aXRXZWJWaWV3OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyBXZWJLaXRXZWJW
aWV3Q2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCBXZWJLaXREb3dubG9h
ZDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdlYktpdERvd25sb2FkQ2xh
c3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZG93bmxvYWQuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMWJkOGMKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAKQEAgLTAsMCAr
MSw3NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJOb25j
b3B5YWJsZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgorI2luY2x1
ZGUgIndlYmtpdGRvd25sb2FkLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1
ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2NsYXNzIERvd25sb2FkQ2xpZW50IDog
Tm9uY29weWFibGUsIHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICBEb3dubG9hZENsaWVudChXZWJLaXREb3dubG9hZCopOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgV2ViS2l0RG93bmxvYWQqIG1fZG93bmxvYWQ7Cit9OworCitzdHJ1Y3QgX1dlYktpdERv
d25sb2FkUHJpdmF0ZSB7CisgICAgZ2NoYXIqIGRlc3RpbmF0aW9uX3VyaTsKKyAgICBnY2hhciog
c3VnZ2VzdGVkX2ZpbGVuYW1lOworICAgIGd1aW50IGN1cnJlbnRfc2l6ZTsKKyAgICBXZWJLaXRE
b3dubG9hZFN0YXRlIHN0YXRlOworICAgIEdGaWxlT3V0cHV0U3RyZWFtKiBvdXRwdXRfc3RyZWFt
OworICAgIERvd25sb2FkQ2xpZW50KiBkb3dubG9hZF9jbGllbnQ7CisgICAgV2ViS2l0TmV0d29y
a1JlcXVlc3QqIG5ldHdvcmtfcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
KiBuZXR3b3JrX3Jlc3BvbnNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4g
cmVzb3VyY2VfaGFuZGxlOworfTsKKworZW51bSB7CisgICAgLyogbm9ybWFsIHNpZ25hbHMgKi8K
KyAgICBFUlJPUiwKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF9k
b3dubG9hZF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworZW51bSB7CisgICAgUFJP
UF8wLAorCisgICAgUFJPUF9ORVRXT1JLX1JFUVVFU1QsCisgICAgUFJPUF9ERVNUSU5BVElPTl9V
UkksCisgICAgUFJPUF9TVUdHRVNURURfRklMRU5BTUUsCisgICAgUFJPUF9QUk9HUkVTUywKKyAg
ICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICBQUk9QX1RPVEFMX1NJWkUsCit9OworCitHX0RFRklO
RV9UWVBFKFdlYktpdERvd25sb2FkLCB3ZWJraXRfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1QpOwor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3Qp
OworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRf
UFJJVkFURShkb3dubG9hZCk7CisKKyAgICAvKiBXZSBkb24ndCBjYWxsIHdlYmtpdF9kb3dubG9h
ZF9jYW5jZWwoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZW1pdAorICAgICAqIHNpZ25hbHMg
d2hlbiBmaW5hbGlzaW5nIGFuIG9iamVjdC4gKi8KKyAgICBpZiAocHJpdi0+cmVzb3VyY2VfaGFu
ZGxlKSB7CisgICAgICAgIGlmIChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVf
U1RBUlRFRCkgeworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5zZXRDbGllbnQo
MCk7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOworICAgICAg
ICB9CisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS5yZWxlYXNlKCk7CisgICAgfQorCisg
ICAgZGVsZXRlIHByaXYtPmRvd25sb2FkX2NsaWVudDsKKyAgICBkZWxldGUgcHJpdi0+bmV0d29y
a19yZXNwb25zZTsKKworICAgIGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkpOworICAgIGdf
ZnJlZShwcml2LT5zdWdnZXN0ZWRfZmlsZW5hbWUpOworICAgIGlmIChwcml2LT5vdXRwdXRfc3Ry
ZWFtKQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vdXRwdXRfc3RyZWFtKTsKKyAgICBn
X29iamVjdF91bnJlZihwcml2LT5uZXR3b3JrX3JlcXVlc3QpOworCisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2Rvd25sb2FkX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05FVFdPUktfUkVRVUVTVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdv
cmtfcmVxdWVzdChkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVT
VElOQVRJT05fVVJJOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9TVUdHRVNURURfRklMRU5BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0
cmluZyh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxv
YWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BST0dSRVNTOgorICAgICAgICBn
X3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoZG93
bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfU0laRToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJl
bnRfc2l6ZShkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVE9UQUxf
U0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRf
Z2V0X3RvdGFsX3NpemUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3NldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9
IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisKKyAgICBzd2l0Y2go
cHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ORVRXT1JLX1JFUVVFU1Q6CisgICAgICAgIHByaXYt
Pm5ldHdvcmtfcmVxdWVzdCA9IChXZWJLaXROZXR3b3JrUmVxdWVzdCopZ192YWx1ZV9kdXBfb2Jq
ZWN0KHZhbHVlKTsKKyAgICAgICAgLyogVGhpcyBpcyBzYWZlIGFzIG5ldHdvcmstcmVxdWVzdCBp
cyBhIGNvbnN0cnVjdCBvbmx5IHByb3BlcnR5IGFuZCBzdWdnZXN0ZWRfZmlsZW5hbWUKKyAgICAg
ICAgICogaXMgaW5pdGlhbGx5IG51bGwuICovCisgICAgICAgIHByaXYtPnN1Z2dlc3RlZF9maWxl
bmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJp
KHByaXYtPm5ldHdvcmtfcmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVTVElOQVRJT05fVVJJOgorICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9u
X3VyaShkb3dubG9hZCwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb3dubG9hZF9jbGFzc19pbml0KFdlYktpdERvd25sb2FkQ2xhc3MqIGRvd25sb2FkQ2xhc3Mp
Cit7CisgICAgLyoKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCisg
ICAgICovCisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGRv
d25sb2FkQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb3dubG9h
ZF9maW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rvd25s
b2FkX2dldF9wcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0
X2Rvd25sb2FkX3NldF9wcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktpdERvd25sb2Fk
OjplcnJvcjoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25h
bCBpcyBlbWl0dGVkCisgICAgICogQGN1cnJlbnRfYnl0ZXM6IHRoZSBjdXJyZW50IGNvdW50IG9m
IGJ5dGVzIGRvd25sb2FkZWQKKyAgICAgKiBAdG90YWxfYnl0ZXM6IHRoZSB0b3RhbCBieXRlcyBj
b3VudCBpbiB0aGUgZG93bmxvYWRlZCBmaWxlLCBha2EgZmlsZSBzaXplLgorICAgICAqCisgICAg
ICogSW5kaWNhdGVzIGFuIGVycm9yIGluIHRoZSBkb3dubG9hZC4KKyAgICAgKgorICAgICAqIFNp
bmNlOiAxLjEuMQorICAgICAqLworICAgIHdlYmtpdF9kb3dubG9hZF9zaWduYWxzW0VSUk9SXSA9
IGdfc2lnbmFsX25ldygiZXJyb3IiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZG93
bmxvYWRDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFT
VCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgZ19zaWdu
YWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX0lOVF9JTlRfU1RSSU5HLAorICAgICAgICAgICAg
R19UWVBFX0JPT0xFQU4sIDMsCisgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAg
R19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgLyoKKyAgICAg
KiBwcm9wZXJ0aWVzCisgICAgICovCisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOm5l
dHdvcmstcmVxdWVzdAorICAgICoKKyAgICAqIFRoZSAjV2ViS2l0TmV0d29ya1JlcXVlc3QgaW5z
dGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3dubG9hZC4KKyAgICAqCisgICAgKiBTaW5jZTog
MS4xLjEKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX05FVFdPUktf
UkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0d29yay1y
ZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZXR3b3JrIFJl
cXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBuZXR3b3Jr
IHJlcXVlc3QgZm9yIHRoZSBVUkkgdGhhdCBzaG91bGQgYmUgZG93bmxvYWRlZCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpKFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoq
CisgICAgKiBXZWJLaXREb3dubG9hZDpkZXN0aW5hdGlvbi11cmkKKyAgICAqCisgICAgKiBUaGUg
VVJJIG9mIHRoZSBzYXZlIGxvY2F0aW9uIGZvciB0aGlzIGRvd25sb2FkLgorICAgICoKKyAgICAq
IFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Bf
REVTVElOQVRJT05fVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXN0aW5hdGlvbi11cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRl
c3RpbmF0aW9uIFVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhl
IGRlc3RpbmF0aW9uIFVSSSB3aGVyZSB0byBzYXZlIHRoZSBmaWxlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgKiBXZWJLaXRE
b3dubG9hZDpzdWdnZXN0ZWQtZmlsZW5hbWUKKyAgICAqCisgICAgKiBUaGUgZmlsZSBuYW1lIHN1
Z2dlc3RlZCBhcyBkZWZhdWx0IHdoZW4gc2F2aW5nCisgICAgKgorICAgICogU2luY2U6IDEuMS4x
CisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVUdHRVNURURfRklM
RU5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Z2dlc3RlZC1m
aWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VnZ2VzdGVk
IEZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgZmls
ZW5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmciLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgLyoqCisgICAqIFdlYktpdERvd25s
b2FkOnByb2dyZXNzOgorICAgKgorICAgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNz
IG9mIHRoZSBkb3dubG9hZC4KKyAgICoKKyAgICogU2luY2U6IDEuMS4xCisgICAqLworICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9QUk9HUkVTUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgi
cHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJQcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkRldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2Yg
dGhlIGRvd25sb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLjAsIDEuMCwgMS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpjdXJyZW50LXNpemUKKyAgICAqCisgICAgKiBU
aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRlZAorICAgICoKKyAgICAqIFNp
bmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ1VS
UkVOVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50
LXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkN1cnJlbnQgU2l6
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGxlbmd0aCBvZiB0
aGUgZGF0YSBhbHJlYWR5IGRvd25sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICogV2ViS2l0
RG93bmxvYWQ6dG90YWwtc2l6ZQorICAgICoKKyAgICAqIFRoZSB0b3RhbCBzaXplIG9mIHRoZSBm
aWxlCisgICAgKgorICAgICogU2luY2U6IDEuMS4xCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRvdGFsLXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRvdGFsIFNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZG93bmxvYWRDbGFzcywgc2l6ZW9mKFdlYktpdERvd25sb2FkUHJpdmF0ZSkpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfaW5pdChXZWJLaXREb3dubG9hZCogZG93
bmxvYWQpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPV05M
T0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgIHByaXYtPmRvd25sb2FkX2NsaWVudCA9
IG5ldyBEb3dubG9hZENsaWVudChkb3dubG9hZCk7CisgICAgcHJpdi0+Y3VycmVudF9zaXplID0g
MDsKKyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEOworfQor
CisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9uZXc6CisgKiBAdXJpOiBhIFVSSQorICoKKyAqIENy
ZWF0ZXMgYSBuZXcgI1dlYktpdERvd25sb2FkIG9iamVjdCBmb3IgdGhlIGdpdmVuIFVSSS4KKyAq
CisgKiBSZXR1cm5zOiB0aGUgbmV3ICNXZWJLaXREb3dubG9hZAorICoKKyAqIFNpbmNlOiAxLjEu
MQorICovCitXZWJLaXREb3dubG9hZCogd2Via2l0X2Rvd25sb2FkX25ldyhjb25zdCBnY2hhciog
dXJpKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVyaSwgMCk7CisKKyAgICBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHVyaSk7
CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ld19mcm9t
X3JlcXVlc3QocmVxdWVzdCk7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisgICAgcmV0
dXJuIGRvd25sb2FkOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9uZXdfZnJvbV9yZXF1
ZXN0OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdE5ldHdvcmtSZXF1ZXN0CisgKgorICogQ3JlYXRl
cyBhIG5ldyAjV2ViS2l0RG93bmxvYWQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4KKyAqICNXZWJLaXRO
ZXR3b3JrUmVxdWVzdCBvYmplY3QuCisgKgorICogUmV0dXJuczogdGhlIG5ldyAjV2ViS2l0RG93
bmxvYWQKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2ViS2l0RG93bmxvYWQqIHdlYmtpdF9k
b3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0KFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9ET1dOTE9BRCwgIm5ldHdvcmstcmVxdWVzdCIsIHJlcXVlc3QsIE5VTEwpKTsKKyAgICByZXR1
cm4gZG93bmxvYWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG93bmxvYWRfb3Blbl9z
dHJlYW1fZm9yX3VyaShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiB1cmks
IGdib29sZWFuIGFwcGVuZD1GQUxTRSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh1cmks
IEZBTFNFKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dO
TE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgR0ZpbGUqIGZpbGUgPSBnX2ZpbGVfbmV3
X2Zvcl91cmkodXJpKTsKKyAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgIGlmIChhcHBl
bmQpCisgICAgICAgIHByaXYtPm91dHB1dF9zdHJlYW0gPSBnX2ZpbGVfYXBwZW5kX3RvKGZpbGUs
IEdfRklMRV9DUkVBVEVfTk9ORSwgTlVMTCwgJmVycm9yKTsKKyAgICBlbHNlCisgICAgICAgIHBy
aXYtPm91dHB1dF9zdHJlYW0gPSBnX2ZpbGVfcmVwbGFjZShmaWxlLCBOVUxMLCBUUlVFLCBHX0ZJ
TEVfQ1JFQVRFX05PTkUsIE5VTEwsICZlcnJvcik7CisKKyAgICBnX29iamVjdF91bnJlZihmaWxl
KTsKKworICAgIGlmKGVycm9yKSB7CisgICAgICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX0RPV05M
T0FEX0VSUk9SX0RFU1RJTkFUSU9OLCBlcnJvci0+bWVzc2FnZSwgJmhhbmRsZWQpOworICAgICAg
ICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9z
dHJlYW0oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIFdlYktpdERvd25sb2FkUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAg
aWYgKHByaXYtPm91dHB1dF9zdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+
b3V0cHV0X3N0cmVhbSk7CisgICAgICAgIHByaXYtPm91dHB1dF9zdHJlYW0gPSBOVUxMOworICAg
IH0KK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfc3RhcnQ6CisgKiBAZG93bmxvYWQ6IHRo
ZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBJbml0aWF0ZXMgdGhlIGRvd25sb2FkLiBOb3RpY2Ug
dGhhdCB5b3UgbXVzdCBoYXZlIHNldCB0aGUKKyAqIGRlc3RpbmF0aW9uLXVyaSBwcm9wZXJ0eSBi
ZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4KKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwordm9p
ZCB3ZWJraXRfZG93bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBX
ZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUo
ZG93bmxvYWQpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPnN0YXRlID09IFdFQktJVF9ET1dOTE9BRF9TVEFU
RV9DUkVBVEVEKTsKKworICAgIGlmIChwcml2LT5yZXNvdXJjZV9oYW5kbGUpCisgICAgICAgIHBy
aXYtPnJlc291cmNlX2hhbmRsZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkX2NsaWVudCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FIHVzZSBraXQocHJpdi0+bmV0d29ya19yZXF1ZXN0
KSB3aGVuIFdlYktpdE5ldHdvcmtSZXF1ZXN0IHdpbGwgYmUgZmluaXNoZWQuCisgICAgICAgIFJl
c291cmNlUmVxdWVzdCByZXF1ZXN0KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShwcml2
LT5uZXR3b3JrX3JlcXVlc3QpKTsKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlID0gUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1ZXN0LCBwcml2LT5kb3dubG9hZF9jbGllbnQsIDAsIGZh
bHNlLCBmYWxzZSwgZmFsc2UpOworICAgIH0KKworICAgIHdlYmtpdF9kb3dubG9hZF9vcGVuX3N0
cmVhbV9mb3JfdXJpKGRvd25sb2FkLCBwcml2LT5kZXN0aW5hdGlvbl91cmkpOworfQorCisvKioK
KyAqIHdlYmtpdF9kb3dubG9hZF9jYW5jZWw6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93
bmxvYWQKKyAqCisgKiBDYW5jZWxzIHRoZSBkb3dubG9hZC4gQ2FsbGluZyB0aGlzIHdpbGwgbm90
IGZyZWUgdGhlCisgKiAjV2ViS2l0RG93bmxvYWQgb2JqZWN0LCBzbyB5b3Ugc3RpbGwgbmVlZCB0
byBjYWxsCisgKiBnX29iamVjdF91bnJlZigpIG9uIGl0LCBpZiB5b3UgYXJlIHRoZSBvd25lciBv
ZiBhIHJlZmVyZW5jZS4gTm90aWNlCisgKiB0aGF0IGNhbmNlbGxpbmcgdGhlIGRvd25sb2FkIHBy
b3Zva2VzIHRoZSBlbWlzc2lvbiBvZiB0aGUKKyAqIFdlYktpdERvd25sb2FkOjplcnJvciBzaWdu
YWwsIHJlcG9ydGluZyB0aGF0IHRoZSBkb3dubG9hZCB3YXMKKyAqIGNhbmNlbGxlZC4KKyAqCisg
KiBTaW5jZTogMS4xLjEKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ET1dO
TE9BRChkb3dubG9hZCkpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKworICAgIGlmIChwcml2LT5yZXNv
dXJjZV9oYW5kbGUpCisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS0+Y2FuY2VsKCk7CisK
KyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQ7CisKKyAg
ICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwg
ImVycm9yIiwgMCwgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLCAiVXNl
ciBjYW5jZWxsZWQgdGhlIGRvd25sb2FkIiwgJmhhbmRsZWQpOworfQorCisvKioKKyAqIHdlYmtp
dF9kb3dubG9hZF9nZXRfdXJpOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisg
KgorICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBVUkkgZnJvbSB0aGUKKyAq
ICNXZWJLaXROZXR3b3JrUmVxdWVzdCB3aGljaCBpcyBiZWluZyBkb3dubG9hZGVkLgorICoKKyAq
IFJldHVybnM6IHRoZSB1cmkKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworY29uc3QgZ2NoYXIq
IHdlYmtpdF9kb3dubG9hZF9nZXRfdXJpKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxM
KTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9H
RVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rf
Z2V0X3VyaShwcml2LT5uZXR3b3JrX3JlcXVlc3QpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3du
bG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0OgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25s
b2FkCisgKgorICogUmV0cmlldmVzIHRoZSAjV2ViS2l0TmV0d29ya1JlcXVlc3Qgb2JqZWN0IHRo
YXQgYmFja3MgdGhlIGRvd25sb2FkCisgKiBwcm9jZXNzLgorICoKKyAqIFJldHVybnM6IHRoZSAj
V2ViS2l0TmV0d29ya1JlcXVlc3QgaW5zdGFuY2UKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwor
V2ViS2l0TmV0d29ya1JlcXVlc3QqIHdlYmtpdF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdERvd25sb2Fk
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7Cisg
ICAgcmV0dXJuIHByaXYtPm5ldHdvcmtfcmVxdWVzdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2Rvd25sb2FkX3NldF9yZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIC8vIEZJWE1FIFVzZSBXZWJLaXROZXR3
b3JrUmVzcG9uc2Ugd2hlbiBpdCdzIG1lcmdlZAorICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcHJpdi0+
bmV0d29ya19yZXNwb25zZSA9IG5ldyBSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZToKKyAqIEBkb3du
bG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIFJldHJpZXZlcyB0aGUgZmlsZW5hbWUg
dGhhdCB3YXMgc3VnZ2VzdGVkIGJ5IHRoZSBzZXJ2ZXIsIG9yIHRoZSBvbmUKKyAqIGRlcml2ZWQg
YnkgV2ViS2l0IGZyb20gdGhlIFVSSS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc3VnZ2VzdGVkIGZp
bGVuYW1lCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZG93
bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwg
TlVMTCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxP
QURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIHJldHVybiBwcml2LT5zdWdnZXN0ZWRfZmls
ZW5hbWU7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmk6
CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBPYnRhaW5zIHRoZSBV
UkkgdG8gd2hpY2ggdGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uIFRoaXMKKyAq
IG11c3QgaGF2ZSBiZWVuIHNldCBieSB0aGUgYXBwbGljYXRpb24gYmVmb3JlIGNhbGxpbmcKKyAq
IHdlYmtpdF9kb3dubG9hZF9zdGFydCgpLCBhbmQgbWF5IGJlICVOVUxMLgorICoKKyAqIFJldHVy
bnM6IHRoZSBkZXN0aW5hdGlvbiBVUkkgb3IgJU5VTEwKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAq
LworY29uc3QgZ2NoYXIqIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0
dXJuIHByaXYtPmRlc3RpbmF0aW9uX3VyaTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uX3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAor
ICogQGRlc3RpbmF0aW9uX3VyaTogdGhlIGRlc3RpbmF0aW9uIFVSSQorICoKKyAqIERlZmluZXMg
dGhlIFVSSSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNhdmUgdGhlIGRvd25sb2FkZWQgZmlsZSB0
by4KKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rl
c3RpbmF0aW9uX3VyaShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0
aW5hdGlvbl91cmkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQo
ZG93bmxvYWQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRlc3RpbmF0aW9uX3VyaSk7CisKKyAg
ICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZB
VEUoZG93bmxvYWQpOworICAgIGlmIChwcml2LT5kZXN0aW5hdGlvbl91cmkgJiYgIXN0cmNtcChw
cml2LT5kZXN0aW5hdGlvbl91cmksIGRlc3RpbmF0aW9uX3VyaSkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIEZJWE1FIGNhbiB3ZSBoYXZlIGEgYmV0dGVyIGNoZWNrPworICAgIGlmIChwcml2
LT5zdGF0ZSAhPSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRCAmJiBwcml2LT5zdGF0ZSAh
PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVEKSB7CisgICAgICAgIEFTU0VSVChwcml2
LT5kZXN0aW5hdGlvbl91cmkpOworCisgICAgICAgIGdib29sZWFuIGRvd25sb2FkaW5nID0gcHJp
di0+b3V0cHV0X3N0cmVhbSAhPSBOVUxMOworICAgICAgICBpZiAoZG93bmxvYWRpbmcpCisgICAg
ICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2xvc2Vfc3RyZWFtKGRvd25sb2FkKTsKKworICAgICAg
ICBHRmlsZSogc3JjID0gZ19maWxlX25ld19mb3JfdXJpKHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7
CisgICAgICAgIEdGaWxlKiBkZXN0ID0gZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9uX3Vy
aSk7CisgICAgICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisgICAgICAgIGdfZmlsZV9tb3Zl
KHNyYywgZGVzdCwgR19GSUxFX0NPUFlfQkFDS1VQLCBOVUxMLCBOVUxMLCBOVUxMLCAmZXJyb3Ip
OworCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHNyYyk7CisgICAgICAgIGdfb2JqZWN0X3VucmVm
KGRlc3QpOworCisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZ2Jvb2xlYW4gaGFu
ZGxlZDsKKyAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9y
IiwgMCwgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OLCBlcnJvci0+bWVzc2FnZSwg
JmhhbmRsZWQpOworICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb3dubG9hZGluZykgeworICAgICAg
ICAgICAgaWYgKCF3ZWJraXRfZG93bmxvYWRfb3Blbl9zdHJlYW1fZm9yX3VyaShkb3dubG9hZCwg
ZGVzdGluYXRpb25fdXJpLCBUUlVFKSkgeworICAgICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9h
ZF9jYW5jZWwoZG93bmxvYWQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkp
OworICAgIHByaXYtPmRlc3RpbmF0aW9uX3VyaSA9IGdfc3RyZHVwKGRlc3RpbmF0aW9uX3VyaSk7
CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImRlc3RpbmF0aW9uLXVy
aSIpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdGU6CisgKiBAZG93bmxv
YWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBPYnRhaW5zIHRoZSBjdXJyZW50IHN0YXRl
IG9mIHRoZSBkb3dubG9hZCwgYXMgYQorICogI1dlYktpdERvd25sb2FkU3RhdGUuCisgKgorICog
UmV0dXJuczogdGhlIGN1cnJlbnQgI1dlYktpdERvd25sb2FkU3RhdGUKKyAqCisgKiBTaW5jZTog
MS4xLjEKKyAqLworV2ViS2l0RG93bmxvYWRTdGF0ZSB3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXRl
IChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgV0VCS0lUX0RPV05MT0FEX1NUQVRFX0VSUk9S
KTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9H
RVRfUFJJVkFURShkb3dubG9hZCk7CisgICAgcmV0dXJuIHByaXYtPnN0YXRlOworfQorCisvKioK
KyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNX
ZWJLaXREb3dubG9hZAorICoKKyAqIFJldHVybnMgdGhlIGV4cGVjdGVkIHRvdGFsIHNpemUgb2Yg
dGhlIGRvd25sb2FkLiBUaGlzIGlzIGV4cGVjdGVkCisgKiBiZWNhdXNlIHRoZSBzZXJ2ZXIgbWF5
IHByb3ZpZGUgaW5jb3JyZWN0IG9yIG1pc3NpbmcKKyAqIENvbnRlbnQtTGVuZ3RoLiBOb3RpY2Ug
dGhhdCB0aGlzIG1heSBncm93IG92ZXIgdGltZSwgYXMgaXQgd2lsbCBiZQorICogYWx3YXlzIHRo
ZSBzYW1lIGFzIGN1cnJlbnRfc2l6ZSBpbiB0aGUgY2FzZXMgd2hlcmUgY3VycmVudCBzaXplCisg
KiBzdXJwYXNzZXMgaXQuCisgKgorICogUmV0dXJuczogdGhlIGV4cGVjdGVkIHRvdGFsIHNpemUg
b2YgdGhlIGRvd25sb2FkZWQgZmlsZQorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCitndWludDY0
IHdlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZSAoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9h
ZCksIDApOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPV05M
T0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBpZiAoIXByaXYtPm5ldHdvcmtfcmVzcG9u
c2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIE1BWChwcml2LT5jdXJyZW50X3Np
emUsIHByaXYtPm5ldHdvcmtfcmVzcG9uc2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZToKKyAqIEBkb3dubG9h
ZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIEN1cnJlbnQgYWxyZWFkeSBkb3dubG9hZGVk
IHNpemUuCisgKgorICogUmV0dXJuczogdGhlIGFscmVhZHkgZG93bmxvYWRlZCBzaXplCisgKgor
ICogU2luY2U6IDEuMS4xCisgKi8KK2d1aW50NjQgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50
X3NpemUgKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktpdERvd25s
b2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7
CisgICAgcmV0dXJuIHByaXYtPmN1cnJlbnRfc2l6ZTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93
bmxvYWRfZ2V0X3Byb2dyZXNzOgorICogQHdlYl92aWV3OiBhICNXZWJLaXREb3dubG9hZAorICoK
KyAqIERldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkLgorICoK
KyAqIFJldHVybnM6IGEgI2dkb3VibGUgcmFuZ2luZyBmcm9tIDAuMCB0byAxLjAuCisgKgorICog
U2luY2U6IDEuMS4xCisgKi8KK2dkb3VibGUgd2Via2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzcyhX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgMS4wKTsKKworICAgIFdlYktpdERvd25sb2FkUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShkb3dubG9hZCk7CisgICAg
Z2RvdWJsZSB0b3RhbF9zaXplID0gKGdkb3VibGUpcHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisKKyAgICBpZiAodG90YWxfc2l6ZSA9PSAwKQorICAgICAg
ICByZXR1cm4gMS4wOworCisgICAgcmV0dXJuICgoZ2RvdWJsZSlwcml2LT5jdXJyZW50X3NpemUp
IC8gdG90YWxfc2l6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3JlY2VpdmVk
X2RhdGEoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxP
QURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworCisgICAgaWYgKHByaXYtPmN1cnJlbnRfc2l6ZSA9
PSAwKSB7CisgICAgICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX1NUQVJU
RUQ7CisgICAgfQorCisgICAgQVNTRVJUKHByaXYtPm91dHB1dF9zdHJlYW0pOworCisgICAgZ3Np
emUgYnl0ZXNfd3JpdHRlbjsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAgIGdfb3V0
cHV0X3N0cmVhbV93cml0ZV9hbGwoR19PVVRQVVRfU1RSRUFNKHByaXYtPm91dHB1dF9zdHJlYW0p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNfd3Jp
dHRlbiwgTlVMTCwgJmVycm9yKTsKKworICAgIGlmIChlcnJvcikgeworICAgICAgICBnYm9vbGVh
biBoYW5kbGVkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJv
ciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiwgZXJyb3ItPm1lc3NhZ2Us
ICZoYW5kbGVkKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHByaXYtPmN1cnJlbnRfc2l6ZSArPSBsZW5ndGg7CisgICAgZ19vYmpl
Y3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImN1cnJlbnQtc2l6ZSIpOworCisgICAgQVNT
RVJUKHByaXYtPm5ldHdvcmtfcmVzcG9uc2UpOworICAgIGlmIChwcml2LT5jdXJyZW50X3NpemUg
PiBwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkKKyAgICAg
ICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInRvdGFsLXNpemUiKTsKKwor
ICAgIC8qIEZJWE1FIHRocm90dGxlIHRoZSBudW1iZXIgb2YgdXBkYXRlcz8KKyAgICAgKiBzaG91
bGQgd2UgcmVtb3ZlIHRoZSBwcmV2aW91cyBnX29iamVjdF9ub3RpZnkoKXMgaWYgd2UgYXJlIGdv
aW5nIHRvIHRocm90dGxlCisgICAgICogdGhlIHByb2dyZXNzIHVwZGF0ZXM/ICovCisgICAgZ19v
YmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInByb2dyZXNzIik7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb3dubG9hZF9maW5pc2hlZF9sb2FkaW5nKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfY2xvc2Vfc3RyZWFtKGRvd25sb2FkKTsK
KworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRf
UFJJVkFURShkb3dubG9hZCk7CisgICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfRE9XTkxPQURfU1RB
VEVfRklOSVNIRUQ7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInBy
b2dyZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9lcnJvcihXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIHdl
YmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0RG93bmxv
YWRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsK
KyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9FUlJPUjsKKworICAgIGdi
b29sZWFuIGhhbmRsZWQ7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJy
b3IiLCAwLCBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSywgZXJyb3IubG9jYWxpemVkRGVz
Y3JpcHRpb24oKS51dGY4KCkuZGF0YSgpLCAmaGFuZGxlZCk7Cit9CisKK0Rvd25sb2FkQ2xpZW50
OjpEb3dubG9hZENsaWVudChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgOiBtX2Rvd25s
b2FkKGRvd25sb2FkKQoreworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlUmVz
cG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICB3ZWJraXRfZG93bmxvYWRfc2V0X3Jlc3BvbnNlKG1fZG93bmxvYWQsIHJlc3BvbnNl
KTsKK30KKwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7
CisgICAgd2Via2l0X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEobV9kb3dubG9hZCwgZGF0YSwgbGVu
Z3RoKTsKK30KKwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJj
ZUhhbmRsZSopCit7CisgICAgd2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcobV9kb3du
bG9hZCk7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfZXJy
b3IobV9kb3dubG9hZCwgZXJyb3IpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50Ojp3YXNCbG9j
a2VkKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICAvLyBGSVhNRSB3aGVuIHdlIGhhdmUgdGhlIG5l
dyBmcmFtZSBsb2FkZXIgc2lnbmFscyBhbmQgZXJyb3IgaGFuZGxpbmcuCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBEb3dubG9hZENsaWVudDo6Y2Fubm90U2hvd1VSTChSZXNvdXJj
ZUhhbmRsZSopCit7CisgICAgLy8gRklYTUUgd2hlbiB3ZSBoYXZlIHRoZSBuZXcgZnJhbWUgbG9h
ZGVyIHNpZ25hbHMgYW5kIGVycm9yIGhhbmRsaW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjMxZmU3MDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkb3dubG9hZC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9ET1dOTE9BRF9ICisjZGVm
aW5lIFdFQktJVF9ET1dOTE9BRF9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX0RPV05MT0FEICAgICAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQUQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25s
b2FkKSkKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3du
bG9hZENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPV05MT0FEKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FEKSkKKyNkZWZpbmUgV0VCS0lUX0RP
V05MT0FEX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZENsYXNzKSkKKwordHlwZWRlZiBl
bnVtIHsKKyAgICBXRUJLSVRfRE9XTkxPQURfU1RBVEVfRVJST1IgPSAtMSwKKyAgICBXRUJLSVRf
RE9XTkxPQURfU1RBVEVfQ1JFQVRFRCA9IDAsCisgICAgV0VCS0lUX0RPV05MT0FEX1NUQVRFX1NU
QVJURUQsCisgICAgV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCwKKyAgICBXRUJLSVRf
RE9XTkxPQURfU1RBVEVfRklOSVNIRUQKK30gV2ViS2l0RG93bmxvYWRTdGF0ZTsKKwordHlwZWRl
ZiBlbnVtIHsKKyAgICBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIsCisg
ICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OLAorICAgIFdFQktJVF9ET1dOTE9B
RF9FUlJPUl9ORVRXT1JLCit9IFdlYktpdERvd25sb2FkRXJyb3I7CisKK3N0cnVjdCBfV2ViS2l0
RG93bmxvYWQgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworc3RydWN0IF9XZWJLaXREb3du
bG9hZENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50OworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2Rvd25sb2FkX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9pZCk7
CisKK1dFQktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X2Rvd25sb2FkX25ldyAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKnVyaSk7CisKK1dFQktJVF9BUEkgV2Vi
S2l0RG93bmxvYWQgKgord2Via2l0X2Rvd25sb2FkX25ld19mcm9tX3JlcXVlc3QgICAgICAgICAg
ICAoV2ViS2l0TmV0d29ya1JlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb3dubG9hZF9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2Fk
ICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX2NhbmNl
bCAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkKTsKKwor
V0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9hZF9nZXRfdXJpICAgICAgICAg
ICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkg
V2ViS2l0TmV0d29ya1JlcXVlc3QqCit3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVz
dCAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGNv
bnN0IGdjaGFyKgord2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUgICAgICAo
V2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioK
K3dlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpICAgICAgICAgKFdlYktpdERvd25s
b2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX3Nl
dF9kZXN0aW5hdGlvbl91cmkgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgKmRlc3RpbmF0aW9uX3VyaSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rv
d25sb2FkX2dldF9wcm9ncmVzcyAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRv
d25sb2FkKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFs
X3NpemUgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJL
SVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplICAgICAgICAg
ICAgKFdlYktpdERvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0RG93
bmxvYWRTdGF0ZQord2Via2l0X2Rvd25sb2FkX2dldF9zdGF0ZSAgICAgICAgICAgICAgICAgICAo
V2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggYWNlOTk2ZC4uZmE2YTkyZiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lv
bi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmg+CisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdl
YnNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oPgpAQCAtNDQsOSAr
NDUsMTMgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKICNpbmNs
dWRlIDxnbGliLmg+CiAKK2NsYXNzIERvd25sb2FkQ2xpZW50OworCiBuYW1lc3BhY2UgV2ViS2l0
IHsKICAgICBXZWJLaXRXZWJWaWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktpdFdlYkZyYW1lKik7
CiAKQEAgLTExNCw2ICsxMTksOSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2NoYXIqIHVyaTsK
ICAgICB9OwogCisgICAgI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUob2JqKSAg
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9B
RCwgV2ViS2l0RG93bmxvYWRQcml2YXRlKSkKKyAgICB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93
bmxvYWRQcml2YXRlIFdlYktpdERvd25sb2FkUHJpdmF0ZTsKKwogICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6RnJhbWU+CiAgICAgd2Via2l0X3dlYl9mcmFtZV9pbml0X3dpdGhfd2ViX3ZpZXcoV2Vi
S2l0V2ViVmlldyosIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCopOwogCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDA3ZDY0MGEuLjI1YTNiNGQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKIAorI2luY2x1ZGUgIndlYmtpdGRvd25sb2FkLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vi
dmlldy5oIgogI2luY2x1ZGUgIndlYmtpdGVudW10eXBlcy5oIgogI2luY2x1ZGUgIndlYmtpdG1h
cnNoYWwuaCIKQEAgLTEzMyw2ICsxMzQsNyBAQCBlbnVtIHsKICAgICBDT1BZX0NMSVBCT0FSRCwK
ICAgICBQQVNURV9DTElQQk9BUkQsCiAgICAgQ1VUX0NMSVBCT0FSRCwKKyAgICBET1dOTE9BRF9S
RVFVRVNURUQsCiAgICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTgxMSw2ICs4MTMsMTMgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3JlYWxfcGFzdGVfY2xpcGJvYXJkKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJQYXN0ZSIpLmV4ZWN1
dGUoKTsKIH0KIAorc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX2Rvd25sb2Fk
X3JlcXVlc3RlZChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOworICAgIC8vIFJl
dHVybiBmYWxzZSB0byBpbmRpY2F0ZSBpdCB3YXNuJ3QgaGFuZGxlZCB0aGVyZWZvcmUgdGhlIGRv
d25sb2FkIGlzIGRlbGV0ZWQKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7CkBAIC0xMDg0LDYgKzEwOTMs
MjYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmll
d0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKICAgICAg
ICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3
Ojpkb3dubG9hZC1yZXF1ZXN0ZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdo
aWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBkb3dubG9hZDogdGhlIG1lc3NhZ2Ug
dGV4dAorICAgICAqIEByZXR1cm46IFRSVUUgaWYgdGhlIGRvd25sb2FkIHdhcyBoYW5kbGVkLCBv
dGhlcndpc2UgaXQnbGwgYmUgY2FuY2VsbGVkLgorICAgICAqCisgICAgICogQSBuZXcgRG93bmxv
YWQgaXMgYmVpbmcgcmVxdWVzdGVkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMS4xCisgICAg
ICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbRE9XTkxPQURfUkVRVUVTVEVEXSA9IGdf
c2lnbmFsX25ldygiZG93bmxvYWQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05B
TF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0V2ViVmlld0NsYXNzLCBkb3dubG9hZF9yZXF1ZXN0ZWQpLAorICAgICAgICAgICAg
Z19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAgICAgIEdf
VFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCk7CisKICAgICAvKioK
ICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXN0YXJ0ZWQ6CiAgICAgICogQHdlYl92aWV3OiB0
aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtMTM5Myw2ICsxNDIy
LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmll
d0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5jdXRfY2xpcGJvYXJkID0g
d2Via2l0X3dlYl92aWV3X3JlYWxfY3V0X2NsaXBib2FyZDsKICAgICB3ZWJWaWV3Q2xhc3MtPmNv
cHlfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY29weV9jbGlwYm9hcmQ7CiAgICAg
d2ViVmlld0NsYXNzLT5wYXN0ZV9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9wYXN0
ZV9jbGlwYm9hcmQ7CisgICAgd2ViVmlld0NsYXNzLT5kb3dubG9hZF9yZXF1ZXN0ZWQgPSB3ZWJr
aXRfd2ViX3ZpZXdfcmVhbF9kb3dubG9hZF9yZXF1ZXN0ZWQ7CiAKICAgICBHT2JqZWN0Q2xhc3Mq
IG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViVmlld0NsYXNzKTsKICAgICBvYmplY3RD
bGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF93ZWJfdmlld19kaXNwb3NlOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5oCmluZGV4IDJiYjhjNjEuLjdmMDFjYjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmgKQEAgLTEwMiw2ICsxMDIsOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAg
ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgKCogY3V0X2NsaXBib2FyZCkgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAgICAgICAg
ICAgICAgICAgKCogY29weV9jbGlwYm9hcmQpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICp3ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgKCogcGFzdGVfY2xp
cGJvYXJkKSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7CisgICAgZ2Jv
b2xlYW4gICAgICAgICAgICAgICAgICAgKCogZG93bmxvYWRfcmVxdWVzdGVkKSAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25s
b2FkKTsKIAogICAgIC8qCiAgICAgICogaW50ZXJuYWwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L0d0a0xhdW5jaGVyL21haW4uYyBiL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRl
eCA1OWYyMjMwLi5iMDc5NzIyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9t
YWluLmMKKysrIGIvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCkBAIC02NSw2ICs2NSwy
NSBAQCBsaW5rX2hvdmVyX2NiIChXZWJLaXRXZWJWaWV3KiBwYWdlLCBjb25zdCBnY2hhciogdGl0
bGUsIGNvbnN0IGdjaGFyKiBsaW5rLCBncG9pbgogfQogCiBzdGF0aWMgdm9pZAorZG93bmxvYWRf
cHJvZ3Jlc3NfY2IgKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgZ19tZXNzYWdlKCJEb3dubG9hZGluZyAlcyB0byAlczogJWxsZC8lbGxkICglZiki
LAorICAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaShkb3dubG9hZCksCisgICAg
ICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkKSwK
KyAgICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUoZG93bmxvYWQp
LAorICAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUoZG93bmxvYWQp
LAorICAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZG93bmxvYWRfcmVxdWVzdGVkX2NiIChXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldywgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIHdlYmtpdF9k
b3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpIChkb3dubG9hZCwgImZpbGU6Ly8vdG1wL2Rvd25s
b2FkLnRlc3QiKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5Ojpwcm9n
cmVzcyIsIEdfQ0FMTEJBQ0soZG93bmxvYWRfcHJvZ3Jlc3NfY2IpLCBOVUxMKTsKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKIHRpdGxlX2NoYW5nZV9jYiAoV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIGNvbnN0IGdjaGFyKiB0aXRs
ZSwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBpZiAobWFpbl90aXRsZSkKQEAgLTExOSw2ICsxMzgs
NyBAQCBjcmVhdGVfYnJvd3NlciAoKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3
ZWJfdmlldyksICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9ncmVzc19j
aGFuZ2VfY2IpLCB3ZWJfdmlldyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdl
Yl92aWV3KSwgImxvYWQtY29tbWl0dGVkIiwgR19DQUxMQkFDSyAobG9hZF9jb21taXRfY2IpLCB3
ZWJfdmlldyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImhv
dmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtfaG92ZXJfY2IpLCB3ZWJfdmlldyk7
CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImRvd25sb2FkLXJl
cXVlc3RlZCIsIEdfQ0FMTEJBQ0sgKGRvd25sb2FkX3JlcXVlc3RlZF9jYiksIHdlYl92aWV3KTsK
IAogICAgIHJldHVybiBzY3JvbGxlZF93aW5kb3c7CiB9Ci0tIAoxLjUuNi41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27618</attachid>
            <date>2009-02-12 12:26:56 -0800</date>
            <delta_ts>2009-02-12 12:35:57 -0800</delta_ts>
            <desc>download support and API</desc>
            <filename>0001-Implement-download-and-provide-a-nice-object-wrappi.patch</filename>
            <type>text/plain</type>
            <size>13518</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSA3NjIwYjllNzVhNWVjOGNjNmIxMWI0MjUzMWUzOTQzYjBlYTQxOTFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDA5IDE4OjE4OjI0IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRo
ZSBkb3dubG9hZAogcHJvY2VzcwoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDggKysrKysKIEdOVW1ha2VmaWxlLmFtICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJDb3JlL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKysrKysrCiAuLi4vcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgICB8ICAgIDkgKysrKy0tCiBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTgg
KysrKysrKysrKysrCiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50
R3RrLmNwcCB8ICAgMTQgKysrKysrKystCiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcCB8ICAgMjggKysrKysrKysrKysrKysrKy0tCiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICAgICAgICAgfCAgICAzICsrCiBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggICAgICAgICAgICAgICAgICB8ICAgIDUg
KysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCAgICAgICAgICAgICAgICB8
ICAgMzAgKysrKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuaCAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAxMiBmaWxlcyBjaGFuZ2VkLCAxMjIgaW5z
ZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFu
Z2VMb2cKaW5kZXggYjFlNWRiOC4uZTQ2YTNlNyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBi
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzIEBACiAyMDA5LTAyLTEyICBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEgIDxnbnNAZ25vbWUub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMsIHdlYmtpdGRvd25sb2FkLntoLGNwcH0sIHRv
IHRoZSBHVEsrIHBvcnQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKworMjAwOS0wMi0x
MiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KKwogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICAqIGNvbmZpZ3VyZS5hYzogTWFrZSBzb3Vw
IHRoZSBkZWZhdWx0IEhUVFAgYmFja2VuZCBmb3IgdGhlIEd0ayBwb3J0LgpkaWZmIC0tZ2l0IGEv
R05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCBjNzRlMWZhLi5hMTk5N2M5IDEw
MDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzA0LDYg
KzMwNCw3IEBAIGVuZGlmCiB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggXAorCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dG5ldHdvcmtyZXF1ZXN0LmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZlcnNpb24uaCBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXApAQCAtMzQ4
LDYgKzM0OSw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0
aW5ncy5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJiYjkzOWUuLmU2OWY1NDAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMDktMDItMTIgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlNYWtlIHRoZSBTb3VwIGJh
Y2tlbmQgYWJsZSB0byBoYW5kbGUgcmVxdWVzdHMgd2l0aG91dCBhIGZyYW1lLAorCXNpbmNlIHdl
IG1heSBoYXZlIHN1Y2ggdGhpbmdzIG5vdyB0aGF0IHdlIHN1cHBvcnQgZG93bmxvYWRzLgorCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorCiAyMDA5LTAyLTEyICBE
aW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCBjZjRlZjAzLi5hOGY5ZWM3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKQEAgLTQxMiw5ICs0MTIsMTIgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUq
IGZyYW1lKQogewogICAgIEFTU0VSVCghZC0+bV9tc2cpOwogCi0gICAgLy8gSWYgd2UgYXJlIG5v
IGxvbmdlciBhdHRhY2hlZCB0byBhIFBhZ2UsIHRoaXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQgbG9h
ZCBmcm9tIGFuCi0gICAgLy8gb25VbmxvYWQgaGFuZGxlciwgc28gbGV0J3MganVzdCBibG9jayBp
dC4KLSAgICBpZiAoIWZyYW1lLT5wYWdlKCkpCisKKyAgICAvKiBUaGUgZnJhbWUgY291bGQgYmUg
bnVsbCBpcyB0aGUgUmVzb3VyY2VIYW5kbGUgaXMgbm90IGFzc29jaWF0ZWQgdG8gYW55CisgICAg
ICogRnJhbWUsIGkuZS4gaWYgd2UgYXJlIGRvd25sb2FkaW5nIGEgZmlsZS4KKyAgICAgKiBJZiB0
aGUgZnJhbWUgaXMgbm90IG51bGwgYnV0IHRoZSBwYWdlIGlzIG51bGwgdGhpcyBtdXN0IGJlIGFu
IGF0dGVtcHRlZAorICAgICAqIGxvYWQgZnJvbSBhbiBvblVubG9hZCBoYW5kbGVyLCBzbyBsZXQn
cyBqdXN0IGJsb2NrIGl0LiAqLworICAgIGlmIChmcmFtZSAmJiAhZnJhbWUtPnBhZ2UoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgS1VSTCB1cmwgPSByZXF1ZXN0KCkudXJsKCk7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmlu
ZGV4IDIxZjk5MmQuLjA5YzdiMzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMDItMTIgIEd1
c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJv
dmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRoZSBkb3dubG9hZAorICAgICAgICBwcm9jZXNz
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50Ojpkb3dubG9hZFVSTCk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdC5o
OgorICAgICAgICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6CisgICAgICAgICogd2Via2l0L3dl
YmtpdHByaXZhdGUuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoKKwogMjAwOS0wMi0xMSAgRGltaXRyaSBEdXB1
aXMtbGF0b3VyICA8ZHVwdWlzbGF0b3VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHViIG91dCBJ
bnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscy4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKaW5kZXggNDkwMzcwYy4uZDI3YzcwNiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0
ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0
ay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkg
THRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bn
bm9tZS5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMCw2ICsyMSw3IEBACiAjaW5jbHVk
ZSAiQ29udGV4dE1lbnUuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgogCisj
aW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTE2Myw3ICsxNjUsMTcg
QEAgdm9pZCBDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4
dE1lbnVJdGVtKiwgY29uc3QgQ29udGV4dE0KIAogdm9pZCBDb250ZXh0TWVudUNsaWVudDo6ZG93
bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyh1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobV93ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZo
YW5kbGVkKTsKKworICAgIGlmIChoYW5kbGVkKSB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9z
dGFydChkb3dubG9hZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB3ZWJraXRfZG93bmxv
YWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOwor
ICAgIH0KIH0KIAogdm9pZCBDb250ZXh0TWVudUNsaWVudDo6Y29weUltYWdlVG9DbGlwYm9hcmQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGM0Y2M4NjMuLjU4NTdlNjQgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisr
KyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBA
IC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNo
cmlzdGlhbkB0d290b2FzdHMuZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBM
dGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00
MCw2ICs0MSw4IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRl
ICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTc1NCw5ICs3NTcsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikKICAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsKIH0KIAotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBpbml0aWFsUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyB3ZSBjb3VsZCByZXVzZSB0aGUgc2FtZSBo
YW5kbGUsIGJ1dCBvdXIgcmVwbGFjaW5nIG9mIHRoZQorICAgIC8vIGNsaWVudCBzZWVtcyB0byBt
YWtlIHRoaXMgaW1wb3NzaWJsZTsgdGhlIG1haW4gbG9hZCBmYWlscworICAgIC8vIGFuZCBpcyBz
dG9wcGVkCisgICAgaGFuZGxlLT5jYW5jZWwoKTsKKyAgICBzdGFydERvd25sb2FkKHJlcXVlc3Qp
OwogfQogCiBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKQpAQCAtODQyLDkgKzg0OSwyMiBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJybwogICAgIH0KIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3du
bG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3Rh
cnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZSht
X2ZyYW1lKTsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogbmV0d29ya1JlcXVlc3QgPSB3ZWJr
aXRfbmV0d29ya19yZXF1ZXN0X25ldyhyZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtpdF9kb3dubG9hZF9uZXdf
ZnJvbV9yZXF1ZXN0KG5ldHdvcmtSZXF1ZXN0KTsKKworICAgIGdib29sZWFuIGhhbmRsZWQ7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHZpZXcsICJkb3dubG9hZC1yZXF1ZXN0ZWQiLCBkb3du
bG9hZCwgJmhhbmRsZWQpOworCisgICAgaWYgKGhhbmRsZWQpIHsKKyAgICAgICAgd2Via2l0X2Rv
d25sb2FkX3N0YXJ0KGRvd25sb2FkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdlYmtp
dF9kb3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOworICAgICAgICBnX29iamVjdF91bnJlZihkb3du
bG9hZCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxI
aXN0b3J5KCkKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmgKaW5kZXggOGM4NjhhMi4uZDMzNDA0NyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmVyc2lvbi5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dG5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHdlYnNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5oPgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IGY5NGU3MTAuLmIwYWI1ZTkgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTY4LDYgKzY4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFdlYldpbmRvd0ZlYXR1cmVzQ2xhc3MgV2ViS2l0V2ViV2luZG93RmVhdHVyZXNDbGFzczsK
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlZpZXc7CiB0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdlYktpdFdlYlZpZXdDbGFzczsKIAordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERvd25sb2FkIFdlYktpdERvd25sb2FkOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERvd25sb2FkQ2xhc3MgV2ViS2l0RG93bmxvYWRDbGFzczsKKwogR19FTkRfREVDTFMKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggYWNlOTk2ZC4uYTQ5YWQ0YyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwb2xp
Y3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9u
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdHdlYnNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYndpbmRvd2Zl
YXR1cmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oPgpA
QCAtNDQsOSArNDUsMTMgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CiAKICNpbmNsdWRlIDxnbGliLmg+CiAKK2NsYXNzIERvd25sb2FkQ2xpZW50OworCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKICAgICBXZWJLaXRXZWJWaWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktpdFdl
YkZyYW1lKik7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggOWQyOTk3Ny4u
ODNhODg2NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAid2Via2l0ZG93bmxvYWQuaCIK
ICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSAid2Via2l0ZW51bXR5cGVzLmgi
CiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgpAQCAtMTMzLDYgKzEzNCw3IEBAIGVudW0gewog
ICAgIENPUFlfQ0xJUEJPQVJELAogICAgIFBBU1RFX0NMSVBCT0FSRCwKICAgICBDVVRfQ0xJUEJP
QVJELAorICAgIERPV05MT0FEX1JFUVVFU1RFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAt
ODExLDYgKzgxMywxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9wYXN0ZV9j
bGlwYm9hcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
bW1hbmQoIlBhc3RlIikuZXhlY3V0ZSgpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dl
Yl92aWV3X3JlYWxfZG93bmxvYWRfcmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChk
b3dubG9hZCk7CisgICAgLy8gUmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIGl0IHdhc24ndCBoYW5k
bGVkIHRoZXJlZm9yZSB0aGUgZG93bmxvYWQgaXMgZGVsZXRlZAorICAgIHJldHVybiBGQUxTRTsK
K30KKwogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0
KQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcob2JqZWN0
KTsKQEAgLTEwODQsNiArMTA5MywyNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xh
c3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIEdf
VFlQRV9QT0lOVEVSLAogICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOwogCisgICAgIC8qKgor
ICAgICAqIFdlYktpdFdlYlZpZXc6OmRvd25sb2FkLXJlcXVlc3RlZDoKKyAgICAgKiBAd2ViX3Zp
ZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGRv
d25sb2FkOiB0aGUgbWVzc2FnZSB0ZXh0CisgICAgICogQHJldHVybjogVFJVRSBpZiB0aGUgZG93
bmxvYWQgd2FzIGhhbmRsZWQsIG90aGVyd2lzZSBpdCdsbCBiZSBjYW5jZWxsZWQuCisgICAgICoK
KyAgICAgKiBBIG5ldyBEb3dubG9hZCBpcyBiZWluZyByZXF1ZXN0ZWQuCisgICAgICoKKyAgICAg
KiBTaW5jZTogMS4xLjEKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tET1dO
TE9BRF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJkb3dubG9hZC1yZXF1ZXN0ZWQiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGRvd25sb2FkX3JlcXVl
c3RlZCksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisg
ICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JK
RUNULAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAgICAgICBHX1RZUEVf
T0JKRUNUKTsKKwogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmxvYWQtc3RhcnRlZDoK
ICAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCkBAIC0xMzkzLDYgKzE0MjIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xh
c3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICB3ZWJWaWV3Q2xh
c3MtPmN1dF9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jdXRfY2xpcGJvYXJkOwog
ICAgIHdlYlZpZXdDbGFzcy0+Y29weV9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9j
b3B5X2NsaXBib2FyZDsKICAgICB3ZWJWaWV3Q2xhc3MtPnBhc3RlX2NsaXBib2FyZCA9IHdlYmtp
dF93ZWJfdmlld19yZWFsX3Bhc3RlX2NsaXBib2FyZDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmRvd25s
b2FkX3JlcXVlc3RlZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2Rvd25sb2FkX3JlcXVlc3RlZDsK
IAogICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3
Q2xhc3MpOwogICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0X3dlYl92aWV3X2Rpc3Bv
c2U7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggMjJiNWY0Zi4uMjI0ODZiMCAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApAQCAtMTAyLDYgKzEwMiw4IEBAIHN0cnVjdCBfV2Vi
S2l0V2ViVmlld0NsYXNzIHsKICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAoKiBjdXRf
Y2xpcGJvYXJkKSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKICAg
ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAoKiBjb3B5X2NsaXBib2FyZCkgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKICAgICB2b2lkICAgICAgICAgICAgICAg
ICAgICAgICAoKiBwYXN0ZV9jbGlwYm9hcmQpICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
KndlYl92aWV3KTsKKyAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAoKiBkb3dubG9hZF9y
ZXF1ZXN0ZWQpICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRE
b3dubG9hZCAgICAgICAqZG93bmxvYWQpOwogCiAgICAgLyoKICAgICAgKiBpbnRlcm5hbAotLSAK
MS41LjYuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27621</attachid>
            <date>2009-02-12 12:35:57 -0800</date>
            <delta_ts>2009-02-25 14:17:05 -0800</delta_ts>
            <desc>download support and API</desc>
            <filename>0001-Implement-download-and-provide-a-nice-object-wrappi.patch</filename>
            <type>text/plain</type>
            <size>45805</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSA3NmRlYmQ2NGM4YTMzMjc3NTViOWM3MGMyMDA3ODUwZjc4MTNmNDhhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDA5IDE4OjE4OjI0IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRo
ZSBkb3dubG9hZAogcHJvY2VzcwoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwogR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArCiAuLi4vcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgICB8ICAgIDkgKy0KIFdlYktpdC9ndGsvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1NSArKwogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAgfCAgIDE0ICstCiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCB8ICAgMjggKy0K
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MSArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgICAgICAgICB8
ICAgIDMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwICAgICAgICAgICAg
ICAgfCAgODAxICsrKysrKysrKysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
b3dubG9hZC5oICAgICAgICAgICAgICAgICB8ICAxMTcgKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRwcml2YXRlLmggICAgICAgICAgICAgICAgICB8ICAgIDUgKwogV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICAgICAgICAgfCAgIDMwICsKIFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuaCAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAxNCBmaWxl
cyBjaGFuZ2VkLCAxMDc3IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaAoKZGlmZiAtLWdpdCBh
L0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBiMWU1ZGI4Li5lNDZhM2U3IDEwMDY0NAotLS0g
YS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTMgQEAKIDIwMDktMDItMTIg
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyBmaWxlcywgd2Via2l0ZG93
bmxvYWQue2gsY3BwfSwgdG8gdGhlIEdUSysgcG9ydC4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorCisyMDA5LTAyLTEyICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3Jn
PgorCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgogCiAgICAgICAgICogY29uZmln
dXJlLmFjOiBNYWtlIHNvdXAgdGhlIGRlZmF1bHQgSFRUUCBiYWNrZW5kIGZvciB0aGUgR3RrIHBv
cnQuCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IGM3
NGUxZmEuLmExOTk3YzkgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2Vm
aWxlLmFtCkBAIC0zMDQsNiArMzA0LDcgQEAgZW5kaWYKIHdlYmtpdGd0a19oX2FwaSArPSBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRl
ZmluZXMuaCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0dmVyc2lvbi5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2Fy
ZGxpc3QuaCBcCkBAIC0zNDgsNiArMzQ5LDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93
bmxvYWQuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuY3BwCiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmJiOTM5ZS4uZTY5
ZjU0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0wMi0xMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8
Z25zQGdub21lLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
CU1ha2UgdGhlIFNvdXAgYmFja2VuZCBhYmxlIHRvIGhhbmRsZSByZXF1ZXN0cyB3aXRob3V0IGEg
ZnJhbWUsCisJc2luY2Ugd2UgbWF5IGhhdmUgc3VjaCB0aGluZ3Mgbm93IHRoYXQgd2Ugc3VwcG9y
dCBkb3dubG9hZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6
CisKIDIwMDktMDItMTIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IGNmNGVmMDMu
LmE4ZjllYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDEyLDkgKzQxMiwxMiBAQCBib29sIFJlc291cmNlSGFu
ZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFkLT5tX21zZyk7CiAKLSAg
ICAvLyBJZiB3ZSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgUGFnZSwgdGhpcyBtdXN0IGJl
IGFuIGF0dGVtcHRlZCBsb2FkIGZyb20gYW4KLSAgICAvLyBvblVubG9hZCBoYW5kbGVyLCBzbyBs
ZXQncyBqdXN0IGJsb2NrIGl0LgotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKKworICAgIC8qIFRo
ZSBmcmFtZSBjb3VsZCBiZSBudWxsIGlzIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2Np
YXRlZCB0byBhbnkKKyAgICAgKiBGcmFtZSwgaS5lLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBm
aWxlLgorICAgICAqIElmIHRoZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMgbnVs
bCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkCisgICAgICogbG9hZCBmcm9tIGFuIG9uVW5sb2Fk
IGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQuICovCisgICAgaWYgKGZyYW1lICYmICFm
cmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBLVVJMIHVybCA9IHJl
cXVlc3QoKS51cmwoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKaW5kZXggMjFmOTkyZC4uZGQzNGZlOCAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBA
QAorMjAwOS0wMi0xMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
ZG93bmxvYWQsIGFuZCBwcm92aWRlIGEgbmljZSBvYmplY3Qgd3JhcHBpbmcgdGhlCisgICAgICAg
IGRvd25sb2FkIHByb2Nlc3MuIEluaXRpYWwgd29yayBkb25lIGJ5IE1hcmNvIEJhcmlzaW9uZSBh
bmQKKyAgICAgICAgUGllcnJlLUx1YyBCZWF1ZG9pbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1l
bnVDbGllbnQ6OmRvd25sb2FkVVJMKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojpk
b3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25s
b2FkKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtp
dGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6Oik6CisgICAgICAgIChfV2ViS2l0RG93
bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZGlzcG9zZSk6CisgICAgICAgIChfV2ViS2l0
RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZmluYWxpemUpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9wcm9wZXJ0eSk6CisgICAg
ICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfc2V0X3Byb3BlcnR5
KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9jbGFz
c19pbml0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9h
ZF9pbml0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9h
ZF9uZXcpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2Fk
X25ld19mcm9tX3JlcXVlc3QpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Vi
a2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkpOgorICAgICAgICAoX1dlYktpdERvd25s
b2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbSk6CisgICAgICAgIChfV2Vi
S2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfc3RhcnQpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2NhbmNlbCk6CisgICAgICAgIChf
V2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaSk6CisgICAgICAg
IChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVx
dWVzdCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRf
c2V0X3Jlc3BvbnNlKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9k
b3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9h
ZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKToKKyAgICAgICAg
KF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25f
dXJpKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9n
ZXRfc3RhdGUpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25s
b2FkX2dldF90b3RhbF9zaXplKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6Ondl
YmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9h
ZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MpOgorICAgICAgICAoX1dlYktp
dERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUpOgorICAg
ICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX3JlY2VpdmVkX2Rh
dGEpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2Zp
bmlzaGVkX2xvYWRpbmcpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0
X2Rvd25sb2FkX2Vycm9yKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OkRvd25s
b2FkQ2xpZW50OjpEb3dubG9hZENsaWVudCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2
YXRlOjpEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKF9XZWJL
aXREb3dubG9hZFByaXZhdGU6OkRvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6ZGlkRmluaXNoTG9h
ZGluZyk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6
ZGlkRmFpbCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVu
dDo6d2FzQmxvY2tlZCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9h
ZENsaWVudDo6Y2Fubm90U2hvd1VSTCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRvd25sb2Fk
Lmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6CisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3
Lmg6CisKIDIwMDktMDItMTEgIERpbWl0cmkgRHVwdWlzLWxhdG91ciAgPGR1cHVpc2xhdG91ckBh
cHBsZS5jb20+CiAKICAgICAgICAgU3R1YiBvdXQgSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5l
bHMuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xp
ZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRH
dGsuY3BwCmluZGV4IDQ5MDM3MGMuLmQyN2M3MDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVk
ZSAiQ29udGV4dE1lbnVDbGllbnRHdGsuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCkBAIC0xNjMsNyArMTY1LDE3IEBAIHZvaWQgQ29udGV4dE1lbnVDbGllbnQ6
OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSosIGNvbnN0IENvbnRleHRN
CiAKIHZvaWQgQ29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKGNvbnN0IEtVUkwmIHVybCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9
IHdlYmtpdF9kb3dubG9hZF9uZXcodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGdi
b29sZWFuIGhhbmRsZWQ7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgImRv
d25sb2FkLXJlcXVlc3RlZCIsIGRvd25sb2FkLCAmaGFuZGxlZCk7CisKKyAgICBpZiAoaGFuZGxl
ZCkgeworICAgICAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOworICAgIH0KKyAg
ICBlbHNlIHsKKyAgICAgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29udGV4dE1l
bnVDbGllbnQ6OmNvcHlJbWFnZVRvQ2xpcGJvYXJkKGNvbnN0IEhpdFRlc3RSZXN1bHQmKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApp
bmRleCBjNGNjODYzLi41ODU3ZTY0IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtMyw2ICszLDcgQEAKICAqICBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqICBDb3B5cmln
aHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgogICog
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUu
b3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsNiArNDEsOCBAQAogI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNs
dWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC03NTQs
OSArNzU3LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbExvYWQo
Y29uc3QgUmVzb3VyY2VFcnJvciYpCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUs
ICJsb2FkLWRvbmUiLCBmYWxzZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25s
b2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojpkb3dubG9hZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgaW5pdGlhbFJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgLy8gd2UgY291bGQgcmV1c2UgdGhlIHNhbWUgaGFuZGxlLCBidXQgb3VyIHJlcGxhY2luZyBv
ZiB0aGUKKyAgICAvLyBjbGllbnQgc2VlbXMgdG8gbWFrZSB0aGlzIGltcG9zc2libGU7IHRoZSBt
YWluIGxvYWQgZmFpbHMKKyAgICAvLyBhbmQgaXMgc3RvcHBlZAorICAgIGhhbmRsZS0+Y2FuY2Vs
KCk7CisgICAgc3RhcnREb3dubG9hZChyZXF1ZXN0KTsKIH0KIAogUmVzb3VyY2VFcnJvciBGcmFt
ZUxvYWRlckNsaWVudDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKQEAg
LTg0Miw5ICs4NDksMjIgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50
RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm8KICAgICB9CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0TmV0d29y
a1JlcXVlc3QqIG5ldHdvcmtSZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcocmVx
dWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQgPSB3ZWJraXRfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdChuZXR3b3JrUmVxdWVz
dCk7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh2
aWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAgIGlm
IChoYW5kbGVkKSB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7Cisg
ICAgfQorICAgIGVsc2UgeworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2Fk
KTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIH0KIH0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeSgpCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4
IDhjODY4YTIuLmQzMzQwNDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdHZlcnNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVm
aW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJm
cmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaD4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApp
bmRleCBmOTRlNzEwLi5iMGFiNWU5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC02
OCw2ICs2OCw5IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJXaW5kb3dGZWF0dXJlc0NsYXNz
IFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzQ2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
VmlldyBXZWJLaXRXZWJWaWV3OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyBX
ZWJLaXRXZWJWaWV3Q2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCBXZWJL
aXREb3dubG9hZDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdlYktpdERv
d25sb2FkQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyY2IxZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAK
QEAgLTAsMCArMSw4MDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9t
ZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJOb25jb3B5YWJsZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5o
IgorI2luY2x1ZGUgIndlYmtpdGRvd25sb2FkLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5o
IgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2NsYXNzIERvd25sb2Fk
Q2xpZW50IDogTm9uY29weWFibGUsIHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CisgICAg
cHVibGljOgorICAgICAgICBEb3dubG9hZENsaWVudChXZWJLaXREb3dubG9hZCopOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgV2ViS2l0RG93bmxvYWQqIG1fZG93bmxvYWQ7Cit9OworCisjZGVmaW5l
IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZFByaXZh
dGUpKQorCitzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CisgICAgZ2NoYXIqIGRlc3Rp
bmF0aW9uX3VyaTsKKyAgICBnY2hhciogc3VnZ2VzdGVkX2ZpbGVuYW1lOworICAgIGd1aW50IGN1
cnJlbnRfc2l6ZTsKKyAgICBHVGltZXIqIHRpbWVyOworICAgIFdlYktpdERvd25sb2FkU3RhdGUg
c3RhdGU7CisgICAgR0ZpbGVPdXRwdXRTdHJlYW0qIG91dHB1dF9zdHJlYW07CisgICAgRG93bmxv
YWRDbGllbnQqIGRvd25sb2FkX2NsaWVudDsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogbmV0
d29ya19yZXF1ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UqIG5ldHdvcmtfcmVz
cG9uc2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiByZXNvdXJjZV9oYW5k
bGU7Cit9OworCitlbnVtIHsKKyAgICAvKiBub3JtYWwgc2lnbmFscyAqLworICAgIEVSUk9SLAor
ICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X2Rvd25sb2FkX3NpZ25h
bHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQ
Uk9QX05FVFdPUktfUkVRVUVTVCwKKyAgICBQUk9QX0RFU1RJTkFUSU9OX1VSSSwKKyAgICBQUk9Q
X1NVR0dFU1RFRF9GSUxFTkFNRSwKKyAgICBQUk9QX1BST0dSRVNTLAorICAgIFBST1BfQ1VSUkVO
VF9TSVpFLAorICAgIFBST1BfVE9UQUxfU0laRSwKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RG93bmxvYWQsIHdlYmtpdF9kb3dubG9hZCwgR19UWVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb3dubG9hZF9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKyAgICBXZWJLaXRE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIGlmIChwcml2LT5v
dXRwdXRfc3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm91dHB1dF9zdHJl
YW0pOworICAgICAgICBwcml2LT5vdXRwdXRfc3RyZWFtID0gTlVMTDsKKyAgICB9CisKKyAgICBp
ZiAocHJpdi0+bmV0d29ya19yZXF1ZXN0KSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYt
Pm5ldHdvcmtfcmVxdWVzdCk7CisgICAgICAgIHByaXYtPm5ldHdvcmtfcmVxdWVzdCA9IE5VTEw7
CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rvd25sb2FkX3BhcmVudF9jbGFz
cyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQg
PSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHBy
aXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIC8qIFdlIGRvbid0IGNhbGwgd2Via2l0X2Rvd25s
b2FkX2NhbmNlbCgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgICAgICogc2lnbmFs
cyB3aGVuIGZpbmFsaXNpbmcgYW4gb2JqZWN0LiAqLworICAgIGlmIChwcml2LT5yZXNvdXJjZV9o
YW5kbGUpIHsKKyAgICAgICAgaWYgKHByaXYtPnN0YXRlID09IFdFQktJVF9ET1dOTE9BRF9TVEFU
RV9TVEFSVEVEKSB7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPnNldENsaWVu
dCgwKTsKKyAgICAgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS0+Y2FuY2VsKCk7CisgICAg
ICAgIH0KKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLnJlbGVhc2UoKTsKKyAgICB9CisK
KyAgICBkZWxldGUgcHJpdi0+ZG93bmxvYWRfY2xpZW50OworICAgIGRlbGV0ZSBwcml2LT5uZXR3
b3JrX3Jlc3BvbnNlOworCisgICAgZ190aW1lcl9kZXN0cm95KHByaXYtPnRpbWVyKTsKKworICAg
IGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkpOworICAgIGdfZnJlZShwcml2LT5zdWdnZXN0
ZWRfZmlsZW5hbWUpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rvd25sb2FkX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3du
bG9hZF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXREb3dubG9hZCogZG93bmxv
YWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKworICAgIHN3aXRjaChwcm9wX2lkKSB7Cisg
ICAgY2FzZSBQUk9QX05FVFdPUktfUkVRVUVTVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChkb3dubG9hZCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVTVElOQVRJT05fVVJJOgorICAgICAgICBn
X3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25f
dXJpKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVUdHRVNURURf
RklMRU5BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rvd25s
b2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1BST0dSRVNTOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUs
IHdlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0
KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVE9UQUxfU0laRToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUoZG93bmxvYWQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQor
eworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3Qp
OworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworCisg
ICAgc3dpdGNoKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfTkVUV09SS19SRVFVRVNUOgorICAg
ICAgICBwcml2LT5uZXR3b3JrX3JlcXVlc3QgPSAoV2ViS2l0TmV0d29ya1JlcXVlc3QqKWdfdmFs
dWVfZHVwX29iamVjdCh2YWx1ZSk7CisgICAgICAgIC8qIFRoaXMgaXMgc2FmZSBhcyBuZXR3b3Jr
LXJlcXVlc3QgaXMgYSBjb25zdHJ1Y3Qgb25seSBwcm9wZXJ0eSBhbmQgc3VnZ2VzdGVkX2ZpbGVu
YW1lCisgICAgICAgICAqIGlzIGluaXRpYWxseSBudWxsLiAqLworICAgICAgICBwcml2LT5zdWdn
ZXN0ZWRfZmlsZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lKHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3RfZ2V0X3VyaShwcml2LT5uZXR3b3JrX3JlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0RFU1RJTkFUSU9OX1VSSToKKyAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9k
ZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG93bmxvYWRfY2xhc3NfaW5pdChXZWJLaXREb3dubG9hZENsYXNzKiBkb3du
bG9hZENsYXNzKQoreworICAgIC8qCisgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwg
bWV0aG9kcworICAgICAqLworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhkb3dubG9hZENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtp
dF9kb3dubG9hZF9kaXNwb3NlOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9k
b3dubG9hZF9maW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2Rvd25sb2FkX2dldF9wcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2Via2l0X2Rvd25sb2FkX3NldF9wcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktpdERv
d25sb2FkOjplcnJvcjoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhl
IHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGN1cnJlbnRfYnl0ZXM6IHRoZSBjdXJyZW50IGNv
dW50IG9mIGJ5dGVzIGRvd25sb2FkZWQKKyAgICAgKiBAdG90YWxfYnl0ZXM6IHRoZSB0b3RhbCBi
eXRlcyBjb3VudCBpbiB0aGUgZG93bmxvYWRlZCBmaWxlLCBha2EgZmlsZSBzaXplLgorICAgICAq
CisgICAgICogSW5kaWNhdGVzIGFuIGVycm9yIGluIHRoZSBkb3dubG9hZC4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjEuMQorICAgICAqLworICAgIHdlYmtpdF9kb3dubG9hZF9zaWduYWxzW0VS
Uk9SXSA9IGdfc2lnbmFsX25ldygiZXJyb3IiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1MoZG93bmxvYWRDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
Z19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX0lOVF9JTlRfU1RSSU5HLAorICAgICAg
ICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCisgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAg
ICAgICAgR19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgLyoK
KyAgICAgKiBwcm9wZXJ0aWVzCisgICAgICovCisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25s
b2FkOm5ldHdvcmstcmVxdWVzdAorICAgICoKKyAgICAqIFRoZSAjV2ViS2l0TmV0d29ya1JlcXVl
c3QgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3dubG9hZC4KKyAgICAqCisgICAgKiBT
aW5jZTogMS4xLjEKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX05F
VFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0
d29yay1yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZXR3
b3JrIFJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBu
ZXR3b3JrIHJlcXVlc3QgZm9yIHRoZSBVUkkgdGhhdCBzaG91bGQgYmUgZG93bmxvYWRlZCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ORVRXT1JLX1JF
UVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3Mp
KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisg
ICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpkZXN0aW5hdGlvbi11cmkKKyAgICAqCisgICAg
KiBUaGUgVVJJIG9mIHRoZSBzYXZlIGxvY2F0aW9uIGZvciB0aGlzIGRvd25sb2FkLgorICAgICoK
KyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfREVTVElOQVRJT05fVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXN0aW5hdGlvbi11cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkRlc3RpbmF0aW9uIFVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiVGhlIGRlc3RpbmF0aW9uIFVSSSB3aGVyZSB0byBzYXZlIHRoZSBmaWxlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgKiBX
ZWJLaXREb3dubG9hZDpzdWdnZXN0ZWQtZmlsZW5hbWUKKyAgICAqCisgICAgKiBUaGUgZmlsZSBu
YW1lIHN1Z2dlc3RlZCBhcyBkZWZhdWx0IHdoZW4gc2F2aW5nCisgICAgKgorICAgICogU2luY2U6
IDEuMS4xCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVUdHRVNU
RURfRklMRU5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Z2dl
c3RlZC1maWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3Vn
Z2VzdGVkIEZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJU
aGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmciLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgLyoqCisgICAqIFdlYktp
dERvd25sb2FkOnByb2dyZXNzOgorICAgKgorICAgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHBy
b2dyZXNzIG9mIHRoZSBkb3dubG9hZC4KKyAgICoKKyAgICogU2luY2U6IDEuMS4xCisgICAqLwor
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9QUk9H
UkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Rv
dWJsZSgicHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJQcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jl
c3Mgb2YgdGhlIGRvd25sb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLjAsIDEuMCwgMS4wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpjdXJyZW50LXNpemUKKyAgICAqCisg
ICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRlZAorICAgICoKKyAg
ICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfQ1VSUkVOVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj
dXJyZW50LXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkN1cnJl
bnQgU2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGxlbmd0
aCBvZiB0aGUgZGF0YSBhbHJlYWR5IGRvd25sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICog
V2ViS2l0RG93bmxvYWQ6dG90YWwtc2l6ZQorICAgICoKKyAgICAqIFRoZSB0b3RhbCBzaXplIG9m
IHRoZSBmaWxlCisgICAgKgorICAgICogU2luY2U6IDEuMS4xCisgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRvdGFsLXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRvdGFsIFNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZG93bmxvYWRDbGFzcywgc2l6ZW9mKFdlYktpdERvd25sb2FkUHJpdmF0
ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfaW5pdChXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+cHJpdiA9IHBy
aXY7CisKKyAgICBwcml2LT5kb3dubG9hZF9jbGllbnQgPSBuZXcgRG93bmxvYWRDbGllbnQoZG93
bmxvYWQpOworICAgIHByaXYtPmN1cnJlbnRfc2l6ZSA9IDA7CisgICAgcHJpdi0+c3RhdGUgPSBX
RUJLSVRfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRDsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxv
YWRfbmV3OgorICogQHVyaTogYSBVUkkKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXREb3du
bG9hZCBvYmplY3QgZm9yIHRoZSBnaXZlbiBVUkkuCisgKgorICogUmV0dXJuczogdGhlIG5ldyAj
V2ViS2l0RG93bmxvYWQKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2ViS2l0RG93bmxvYWQq
IHdlYmtpdF9kb3dubG9hZF9uZXcoY29uc3QgZ2NoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbCh1cmksIDApOworCisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qg
PSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOworICAgIFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCA9IHdlYmtpdF9kb3dubG9hZF9uZXdfZnJvbV9yZXF1ZXN0KHJlcXVlc3QpOworICAg
IGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworICAgIHJldHVybiBkb3dubG9hZDsKK30KKworLyoq
CisgKiB3ZWJraXRfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdDoKKyAqIEByZXF1ZXN0OiBhICNX
ZWJLaXROZXR3b3JrUmVxdWVzdAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdERvd25sb2Fk
IG9iamVjdCBmb3IgdGhlIGdpdmVuCisgKiAjV2ViS2l0TmV0d29ya1JlcXVlc3Qgb2JqZWN0Lgor
ICoKKyAqIFJldHVybnM6IHRoZSBuZXcgI1dlYktpdERvd25sb2FkCisgKgorICogU2luY2U6IDEu
MS4xCisgKi8KK1dlYktpdERvd25sb2FkKiB3ZWJraXRfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVz
dChXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChyZXF1ZXN0LCAwKTsKKworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJ
VF9ET1dOTE9BRChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9XTkxPQUQsICJuZXR3b3JrLXJl
cXVlc3QiLCByZXF1ZXN0LCBOVUxMKSk7CisgICAgcmV0dXJuIGRvd25sb2FkOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogdXJpLCBnYm9vbGVhbiBhcHBlbmQ9RkFMU0Up
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCBGQUxTRSk7CisKKyAgICBXZWJLaXRE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBHRmlsZSogZmlsZSA9
IGdfZmlsZV9uZXdfZm9yX3VyaSh1cmkpOworICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOworCisg
ICAgaWYgKGFwcGVuZCkKKyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IGdfZmlsZV9hcHBl
bmRfdG8oZmlsZSwgR19GSUxFX0NSRUFURV9OT05FLCBOVUxMLCAmZXJyb3IpOworICAgIGVsc2UK
KyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IGdfZmlsZV9yZXBsYWNlKGZpbGUsIE5VTEws
IFRSVUUsIEdfRklMRV9DUkVBVEVfTk9ORSwgTlVMTCwgJmVycm9yKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGZpbGUpOworCisgICAgaWYoZXJyb3IpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaGFuZGxl
ZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBX
RUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIGVycm9yLT5tZXNzYWdlLCAmaGFuZGxl
ZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybiBGQUxTRTsK
KyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25s
b2FkX2Nsb3NlX3N0cmVhbShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgaWYgKHByaXYtPm91
dHB1dF9zdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+b3V0cHV0X3N0cmVh
bSk7CisgICAgICAgIHByaXYtPm91dHB1dF9zdHJlYW0gPSBOVUxMOworICAgIH0KK30KKworLyoq
CisgKiB3ZWJraXRfZG93bmxvYWRfc3RhcnQ6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93
bmxvYWQKKyAqCisgKiBJbml0aWF0ZXMgdGhlIGRvd25sb2FkLiBOb3RpY2UgdGhhdCB5b3UgbXVz
dCBoYXZlIHNldCB0aGUKKyAqIGRlc3RpbmF0aW9uLXVyaSBwcm9wZXJ0eSBiZWZvcmUgY2FsbGlu
ZyB0aGlzIG1ldGhvZC4KKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwordm9pZCB3ZWJraXRfZG93
bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXREb3dubG9h
ZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHBy
aXYtPmRlc3RpbmF0aW9uX3VyaSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT5zdGF0ZSA9
PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChw
cml2LT50aW1lciA9PSBOVUxMKTsKKworICAgIGlmIChwcml2LT5yZXNvdXJjZV9oYW5kbGUpCisg
ICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkX2Ns
aWVudCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FIHVzZSBraXQocHJpdi0+bmV0d29y
a19yZXF1ZXN0KSB3aGVuIFdlYktpdE5ldHdvcmtSZXF1ZXN0IHdpbGwgYmUgZmluaXNoZWQuCisg
ICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0
X3VyaShwcml2LT5uZXR3b3JrX3JlcXVlc3QpKTsKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFu
ZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1ZXN0LCBwcml2LT5kb3dubG9hZF9jbGll
bnQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAgIH0KKworICAgIHByaXYtPnRpbWVyID0g
Z190aW1lcl9uZXcgKCk7CisgICAgd2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmko
ZG93bmxvYWQsIHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rv
d25sb2FkX2NhbmNlbDoKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAq
IENhbmNlbHMgdGhlIGRvd25sb2FkLiBDYWxsaW5nIHRoaXMgd2lsbCBub3QgZnJlZSB0aGUKKyAq
ICNXZWJLaXREb3dubG9hZCBvYmplY3QsIHNvIHlvdSBzdGlsbCBuZWVkIHRvIGNhbGwKKyAqIGdf
b2JqZWN0X3VucmVmKCkgb24gaXQsIGlmIHlvdSBhcmUgdGhlIG93bmVyIG9mIGEgcmVmZXJlbmNl
LiBOb3RpY2UKKyAqIHRoYXQgY2FuY2VsbGluZyB0aGUgZG93bmxvYWQgcHJvdm9rZXMgdGhlIGVt
aXNzaW9uIG9mIHRoZQorICogV2ViS2l0RG93bmxvYWQ6OmVycm9yIHNpZ25hbCwgcmVwb3J0aW5n
IHRoYXQgdGhlIGRvd25sb2FkIHdhcworICogY2FuY2VsbGVkLgorICoKKyAqIFNpbmNlOiAxLjEu
MQorICovCit2b2lkIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2Fk
KSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsK
KworICAgIGdfdGltZXJfc3RvcChwcml2LT50aW1lcik7CisKKyAgICBpZiAocHJpdi0+cmVzb3Vy
Y2VfaGFuZGxlKQorICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOworCisg
ICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVEOworCisgICAg
Z2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJl
cnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiwgIlVzZXIg
Y2FuY2VsbGVkIHRoZSBkb3dubG9hZCIsICZoYW5kbGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRf
ZG93bmxvYWRfZ2V0X3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoK
KyAqIENvbnZlbmllbmNlIG1ldGhvZCB0byByZXRyaWV2ZSB0aGUgVVJJIGZyb20gdGhlCisgKiAj
V2ViS2l0TmV0d29ya1JlcXVlc3Qgd2hpY2ggaXMgYmVpbmcgZG93bmxvYWRlZC4KKyAqCisgKiBS
ZXR1cm5zOiB0aGUgdXJpCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2NvbnN0IGdjaGFyKiB3
ZWJraXRfZG93bmxvYWRfZ2V0X3VyaShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7
CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAg
ICByZXR1cm4gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVx
dWVzdCk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3Q6
CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBSZXRyaWV2ZXMgdGhl
ICNXZWJLaXROZXR3b3JrUmVxdWVzdCBvYmplY3QgdGhhdCBiYWNrcyB0aGUgZG93bmxvYWQKKyAq
IHByb2Nlc3MuCisgKgorICogUmV0dXJuczogdGhlICNXZWJLaXROZXR3b3JrUmVxdWVzdCBpbnN0
YW5jZQorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCitXZWJLaXROZXR3b3JrUmVxdWVzdCogd2Vi
a2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9h
ZCksIE5VTEwpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQt
PnByaXY7CisgICAgcmV0dXJuIHByaXYtPm5ldHdvcmtfcmVxdWVzdDsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2Rvd25sb2FkX3NldF9yZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIC8vIEZJWE1FIFVzZSBX
ZWJLaXROZXR3b3JrUmVzcG9uc2Ugd2hlbiBpdCdzIG1lcmdlZAorICAgIFdlYktpdERvd25sb2Fk
UHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIHByaXYtPm5ldHdvcmtfcmVzcG9u
c2UgPSBuZXcgUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSk7Cit9CisKKy8qKgorICogd2Via2l0
X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWU6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2Vi
S2l0RG93bmxvYWQKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIGZpbGVuYW1lIHRoYXQgd2FzIHN1Z2dl
c3RlZCBieSB0aGUgc2VydmVyLCBvciB0aGUgb25lCisgKiBkZXJpdmVkIGJ5IFdlYktpdCBmcm9t
IHRoZSBVUkkuCisgKgorICogUmV0dXJuczogdGhlIHN1Z2dlc3RlZCBmaWxlbmFtZQorICoKKyAq
IFNpbmNlOiAxLjEuMQorICovCitjb25zdCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9zdWdn
ZXN0ZWRfZmlsZW5hbWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAg
V2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJu
IHByaXYtPnN1Z2dlc3RlZF9maWxlbmFtZTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uX3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAor
ICoKKyAqIE9idGFpbnMgdGhlIFVSSSB0byB3aGljaCB0aGUgZG93bmxvYWRlZCBmaWxlIHdpbGwg
YmUgd3JpdHRlbi4gVGhpcworICogbXVzdCBoYXZlIGJlZW4gc2V0IGJ5IHRoZSBhcHBsaWNhdGlv
biBiZWZvcmUgY2FsbGluZworICogd2Via2l0X2Rvd25sb2FkX3N0YXJ0KCksIGFuZCBtYXkgYmUg
JU5VTEwuCisgKgorICogUmV0dXJuczogdGhlIGRlc3RpbmF0aW9uIFVSSSBvciAlTlVMTAorICoK
KyAqIFNpbmNlOiAxLjEuMQorICovCitjb25zdCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9k
ZXN0aW5hdGlvbl91cmkoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAg
V2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJu
IHByaXYtPmRlc3RpbmF0aW9uX3VyaTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0
X2Rlc3RpbmF0aW9uX3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICog
QGRlc3RpbmF0aW9uX3VyaTogdGhlIGRlc3RpbmF0aW9uIFVSSQorICoKKyAqIERlZmluZXMgdGhl
IFVSSSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNhdmUgdGhlIGRvd25sb2FkZWQgZmlsZSB0by4K
KyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3Rp
bmF0aW9uX3VyaShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5h
dGlvbl91cmkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93
bmxvYWQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRlc3RpbmF0aW9uX3VyaSk7CisKKyAgICBX
ZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAocHJp
di0+ZGVzdGluYXRpb25fdXJpICYmICFzdHJjbXAocHJpdi0+ZGVzdGluYXRpb25fdXJpLCBkZXN0
aW5hdGlvbl91cmkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRSBjYW4gd2UgaGF2
ZSBhIGJldHRlciBjaGVjaz8KKyAgICBpZiAocHJpdi0+c3RhdGUgIT0gV0VCS0lUX0RPV05MT0FE
X1NUQVRFX0NSRUFURUQgJiYgcHJpdi0+c3RhdGUgIT0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NB
TkNFTExFRCkgeworICAgICAgICBBU1NFUlQocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKworICAg
ICAgICBnYm9vbGVhbiBkb3dubG9hZGluZyA9IHByaXYtPm91dHB1dF9zdHJlYW0gIT0gTlVMTDsK
KyAgICAgICAgaWYgKGRvd25sb2FkaW5nKQorICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX2Ns
b3NlX3N0cmVhbShkb3dubG9hZCk7CisKKyAgICAgICAgR0ZpbGUqIHNyYyA9IGdfZmlsZV9uZXdf
Zm9yX3VyaShwcml2LT5kZXN0aW5hdGlvbl91cmkpOworICAgICAgICBHRmlsZSogZGVzdCA9IGdf
ZmlsZV9uZXdfZm9yX3VyaShkZXN0aW5hdGlvbl91cmkpOworICAgICAgICBHRXJyb3IgKmVycm9y
ID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfbW92ZShzcmMsIGRlc3QsIEdfRklMRV9DT1BZX0JB
Q0tVUCwgTlVMTCwgTlVMTCwgTlVMTCwgJmVycm9yKTsKKworICAgICAgICBnX29iamVjdF91bnJl
ZihzcmMpOworICAgICAgICBnX29iamVjdF91bnJlZihkZXN0KTsKKworICAgICAgICBpZiAoZXJy
b3IpIHsKKyAgICAgICAgICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgICAgICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJP
Ul9ERVNUSU5BVElPTiwgZXJyb3ItPm1lc3NhZ2UsICZoYW5kbGVkKTsKKyAgICAgICAgICAgIGdf
ZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZG93bmxvYWRpbmcpIHsKKyAgICAgICAgICAgIGlmICghd2Via2l0X2Rvd25sb2Fk
X29wZW5fc3RyZWFtX2Zvcl91cmkoZG93bmxvYWQsIGRlc3RpbmF0aW9uX3VyaSwgVFJVRSkpIHsK
KyAgICAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBnX2ZyZWUocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICBwcml2LT5kZXN0aW5hdGlvbl91
cmkgPSBnX3N0cmR1cChkZXN0aW5hdGlvbl91cmkpOworICAgIGdfb2JqZWN0X25vdGlmeShHX09C
SkVDVChkb3dubG9hZCksICJkZXN0aW5hdGlvbi11cmkiKTsKK30KKworLyoqCisgKiB3ZWJraXRf
ZG93bmxvYWRfZ2V0X3N0YXRlOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisg
KgorICogT2J0YWlucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZG93bmxvYWQsIGFzIGEKKyAq
ICNXZWJLaXREb3dubG9hZFN0YXRlLgorICoKKyAqIFJldHVybnM6IHRoZSBjdXJyZW50ICNXZWJL
aXREb3dubG9hZFN0YXRlCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK1dlYktpdERvd25sb2Fk
U3RhdGUgd2Via2l0X2Rvd25sb2FkX2dldF9zdGF0ZSAoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9h
ZCksIFdFQktJVF9ET1dOTE9BRF9TVEFURV9FUlJPUik7CisKKyAgICBXZWJLaXREb3dubG9hZFBy
aXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+c3RhdGU7Cit9
CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplOgorICogQGRvd25sb2Fk
OiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgdG90YWwg
c2l6ZSBvZiB0aGUgZG93bmxvYWQuIFRoaXMgaXMgZXhwZWN0ZWQKKyAqIGJlY2F1c2UgdGhlIHNl
cnZlciBtYXkgcHJvdmlkZSBpbmNvcnJlY3Qgb3IgbWlzc2luZworICogQ29udGVudC1MZW5ndGgu
IE5vdGljZSB0aGF0IHRoaXMgbWF5IGdyb3cgb3ZlciB0aW1lLCBhcyBpdCB3aWxsIGJlCisgKiBh
bHdheXMgdGhlIHNhbWUgYXMgY3VycmVudF9zaXplIGluIHRoZSBjYXNlcyB3aGVyZSBjdXJyZW50
IHNpemUKKyAqIHN1cnBhc3NlcyBpdC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZXhwZWN0ZWQgdG90
YWwgc2l6ZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlCisgKgorICogU2luY2U6IDEuMS4xCisgKi8K
K2d1aW50NjQgd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplIChXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FE
KGRvd25sb2FkKSwgMCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3du
bG9hZC0+cHJpdjsKKyAgICBpZiAoIXByaXYtPm5ldHdvcmtfcmVzcG9uc2UpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIE1BWChwcml2LT5jdXJyZW50X3NpemUsIHByaXYtPm5ldHdv
cmtfcmVzcG9uc2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXRE
b3dubG9hZAorICoKKyAqIEN1cnJlbnQgYWxyZWFkeSBkb3dubG9hZGVkIHNpemUuCisgKgorICog
UmV0dXJuczogdGhlIGFscmVhZHkgZG93bmxvYWRlZCBzaXplCisgKgorICogU2luY2U6IDEuMS4x
CisgKi8KK2d1aW50NjQgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
RE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJp
diA9IGRvd25sb2FkLT5wcml2OworICAgIHJldHVybiBwcml2LT5jdXJyZW50X3NpemU7Cit9CisK
Ky8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzczoKKyAqIEB3ZWJfdmlldzogYSAj
V2ViS2l0RG93bmxvYWQKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9m
IHRoZSBkb3dubG9hZC4KKyAqCisgKiBSZXR1cm5zOiBhICNnZG91YmxlIHJhbmdpbmcgZnJvbSAw
LjAgdG8gMS4wLgorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCitnZG91YmxlIHdlYmtpdF9kb3du
bG9hZF9nZXRfcHJvZ3Jlc3MoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDEuMCk7CisKKyAg
ICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBnZG91
YmxlIHRvdGFsX3NpemUgPSAoZ2RvdWJsZSlwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5leHBlY3Rl
ZENvbnRlbnRMZW5ndGgoKTsKKworICAgIGlmICh0b3RhbF9zaXplID09IDApCisgICAgICAgIHJl
dHVybiAxLjA7CisKKyAgICByZXR1cm4gKChnZG91YmxlKXByaXYtPmN1cnJlbnRfc2l6ZSkgLyB0
b3RhbF9zaXplOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1l
OgorICogQHdlYl92aWV3OiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIEVsYXBzZWQgdGltZSBm
b3IgdGhlIGRvd25sb2FkIGluIHNlY29uZHMsIGluY2x1ZGluZyBhbnkgZnJhY3Rpb25hbAorICog
cGFydC4gSWYgdGhlIGRvd25sb2FkIGlzIGZpbmlzaGVkLCBoYWQgYW4gZXJyb3Igb3Igd2FzIGNh
bmNlbGxlZAorICogdGhpcyBpcyB0aGUgdGltZSBiZXR3ZWVuIGl0cyBzdGFydCBhbmQgdGhlIGV2
ZW50LgorICoKKyAqIFJldHVybnM6IHNlY29uZHMgc2luY2UgdGhlIGRvd25sb2FkIHdhcyBzdGFy
dGVkLCBhcyBhICNnZG91YmxlCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2dkb3VibGUgd2Vi
a2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCks
IDAuMCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJp
djsKKyAgICByZXR1cm4gZ190aW1lcl9lbGFwc2VkKHByaXYtPnRpbWVyLCBOVUxMKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkLCBjb25zdCBnY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBXZWJLaXRE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIGlmIChwcml2LT5j
dXJyZW50X3NpemUgPT0gMCkgeworICAgICAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9B
RF9TVEFURV9TVEFSVEVEOworICAgIH0KKworICAgIEFTU0VSVChwcml2LT5vdXRwdXRfc3RyZWFt
KTsKKworICAgIGdzaXplIGJ5dGVzX3dyaXR0ZW47CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7
CisKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKEdfT1VUUFVUX1NUUkVBTShwcml2LT5v
dXRwdXRfc3RyZWFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGxlbmd0
aCwgJmJ5dGVzX3dyaXR0ZW4sIE5VTEwsICZlcnJvcik7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRv
d25sb2FkLCAiZXJyb3IiLCAwLCBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIGVy
cm9yLT5tZXNzYWdlLCAmaGFuZGxlZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2LT5jdXJyZW50X3NpemUgKz0gbGVuZ3Ro
OworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJjdXJyZW50LXNpemUi
KTsKKworICAgIEFTU0VSVChwcml2LT5uZXR3b3JrX3Jlc3BvbnNlKTsKKyAgICBpZiAocHJpdi0+
Y3VycmVudF9zaXplID4gcHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCkpCisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJ0b3Rh
bC1zaXplIik7CisKKyAgICAvKiBGSVhNRSB0aHJvdHRsZSB0aGUgbnVtYmVyIG9mIHVwZGF0ZXM/
CisgICAgICogc2hvdWxkIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMgZ19vYmplY3Rfbm90aWZ5KClz
IGlmIHdlIGFyZSBnb2luZyB0byB0aHJvdHRsZQorICAgICAqIHRoZSBwcm9ncmVzcyB1cGRhdGVz
PyAqLworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJwcm9ncmVzcyIp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZmluaXNoZWRfbG9hZGluZyhXZWJL
aXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgd2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVh
bShkb3dubG9hZCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9h
ZC0+cHJpdjsKKworICAgIGdfdGltZXJfc3RvcChwcml2LT50aW1lcik7CisgICAgcHJpdi0+c3Rh
dGUgPSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfRklOSVNIRUQ7CisKKyAgICBnX29iamVjdF9ub3Rp
ZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAicHJvZ3Jlc3MiKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2Rvd25sb2FkX2Vycm9yKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCit7CisgICAgd2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbShkb3du
bG9hZCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJp
djsKKworICAgIGdfdGltZXJfc3RvcChwcml2LT50aW1lcik7CisgICAgcHJpdi0+c3RhdGUgPSBX
RUJLSVRfRE9XTkxPQURfU1RBVEVfRVJST1I7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX0RPV05M
T0FEX0VSUk9SX05FVFdPUkssIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRh
dGEoKSwgJmhhbmRsZWQpOworfQorCitEb3dubG9hZENsaWVudDo6RG93bmxvYWRDbGllbnQoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAgIDogbV9kb3dubG9hZChkb3dubG9hZCkKK3sKK30K
Kwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgd2Via2l0X2Rvd25s
b2FkX3NldF9yZXNwb25zZShtX2Rvd25sb2FkLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgRG93bmxv
YWRDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIHdlYmtpdF9kb3dubG9h
ZF9yZWNlaXZlZF9kYXRhKG1fZG93bmxvYWQsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRG93
bmxvYWRDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIHdl
YmtpdF9kb3dubG9hZF9maW5pc2hlZF9sb2FkaW5nKG1fZG93bmxvYWQpOworfQorCit2b2lkIERv
d25sb2FkQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCit7CisgICAgd2Via2l0X2Rvd25sb2FkX2Vycm9yKG1fZG93bmxvYWQsIGVycm9y
KTsKK30KKwordm9pZCBEb3dubG9hZENsaWVudDo6d2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSop
Cit7CisgICAgLy8gRklYTUUgd2hlbiB3ZSBoYXZlIHRoZSBuZXcgZnJhbWUgbG9hZGVyIHNpZ25h
bHMgYW5kIGVycm9yIGhhbmRsaW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
RG93bmxvYWRDbGllbnQ6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIC8v
IEZJWE1FIHdoZW4gd2UgaGF2ZSB0aGUgbmV3IGZyYW1lIGxvYWRlciBzaWduYWxzIGFuZCBlcnJv
ciBoYW5kbGluZy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmI4MWZl
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaApA
QCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21l
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXRUJLSVRfRE9XTkxPQURfSAorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURf
SAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRk
ZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ET1dOTE9B
RCAgICAgICAgICAgICh3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0RPV05MT0FEKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZCkpCisjZGVmaW5lIFdFQktJ
VF9ET1dOTE9BRF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRDbGFzcykpCisjZGVmaW5l
IFdFQktJVF9JU19ET1dOTE9BRChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCkpCisjZGVmaW5lIFdFQktJVF9JU19ET1dO
TE9BRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9ET1dOTE9BRCkpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9BRF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ET1dOTE9B
RCwgV2ViS2l0RG93bmxvYWRDbGFzcykpCisKK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0RP
V05MT0FEX1NUQVRFX0VSUk9SID0gLTEsCisgICAgV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NSRUFU
RUQgPSAwLAorICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9TVEFSVEVELAorICAgIFdFQktJVF9E
T1dOTE9BRF9TVEFURV9DQU5DRUxMRUQsCisgICAgV0VCS0lUX0RPV05MT0FEX1NUQVRFX0ZJTklT
SEVECit9IFdlYktpdERvd25sb2FkU3RhdGU7CisKK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lU
X0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLAorICAgIFdFQktJVF9ET1dOTE9BRF9F
UlJPUl9ERVNUSU5BVElPTiwKKyAgICBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSworfSBX
ZWJLaXREb3dubG9hZEVycm9yOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRQcml2
YXRlIFdlYktpdERvd25sb2FkUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZCB7Cisg
ICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXY7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERvd25sb2FkQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJl
bnQ7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQx
KSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSBXZWJLaXREb3dubG9hZCAqCit3ZWJraXRfZG93bmxvYWRfbmV3ICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb25zdCBnY2hhciAqdXJpKTsKKworV0VCS0lUX0FQSSBXZWJLaXREb3du
bG9hZCAqCit3ZWJraXRfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdCAgICAgICAgICAgIChXZWJL
aXROZXR3b3JrUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
d25sb2FkX3N0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRv
d25sb2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG93bmxvYWRfY2FuY2VsICAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRf
QVBJIGNvbnN0IGdjaGFyKgord2Via2l0X2Rvd25sb2FkX2dldF91cmkgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0RG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCoKK3dlYmtpdF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0ICAgICAg
ICAgKFdlYktpdERvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2No
YXIqCit3ZWJraXRfZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZSAgICAgIChXZWJLaXRE
b3dubG9hZCAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0
X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAg
KmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3Rp
bmF0aW9uX3VyaSAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAqZG93bmxvYWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAq
ZGVzdGluYXRpb25fdXJpKTsKKworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG93bmxvYWRf
Z2V0X3Byb2dyZXNzICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAqZG93bmxvYWQp
OworCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1l
ICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkg
Z3VpbnQ2NAord2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplICAgICAgICAgICAgICAoV2Vi
S2l0RG93bmxvYWQgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRf
ZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZSAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAq
ZG93bmxvYWQpOworCitXRUJLSVRfQVBJIFdlYktpdERvd25sb2FkU3RhdGUKK3dlYmtpdF9kb3du
bG9hZF9nZXRfc3RhdGUgICAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICpkb3du
bG9hZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CmluZGV4IGFjZTk5NmQuLmE0OWFkNGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb3du
bG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KQEAgLTQ0LDkgKzQ1LDEzIEBACiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCiAjaW5jbHVkZSA8Z2xpYi5oPgogCitjbGFzcyBE
b3dubG9hZENsaWVudDsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViS2l0V2ViVmlldyog
Z2V0Vmlld0Zyb21GcmFtZShXZWJLaXRXZWJGcmFtZSopOwogCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwCmluZGV4IDlkMjk5NzcuLjgzYTg4NjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2lu
Y2x1ZGUgIndlYmtpdGRvd25sb2FkLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgogI2lu
Y2x1ZGUgIndlYmtpdGVudW10eXBlcy5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKQEAg
LTEzMyw2ICsxMzQsNyBAQCBlbnVtIHsKICAgICBDT1BZX0NMSVBCT0FSRCwKICAgICBQQVNURV9D
TElQQk9BUkQsCiAgICAgQ1VUX0NMSVBCT0FSRCwKKyAgICBET1dOTE9BRF9SRVFVRVNURUQsCiAg
ICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTgxMSw2ICs4MTMsMTMgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X3JlYWxfcGFzdGVfY2xpcGJvYXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJQYXN0ZSIpLmV4ZWN1dGUoKTsKIH0KIAor
c3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX2Rvd25sb2FkX3JlcXVlc3RlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAg
IHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOworICAgIC8vIFJldHVybiBmYWxzZSB0
byBpbmRpY2F0ZSBpdCB3YXNuJ3QgaGFuZGxlZCB0aGVyZWZvcmUgdGhlIGRvd25sb2FkIGlzIGRl
bGV0ZWQKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7CkBAIC0xMDg0LDYgKzEwOTMsMjYgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJW
aWV3Q2xhc3MpCiAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKICAgICAgICAgICAgIEdfVFlQ
RV9QT0lOVEVSKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpkb3dubG9hZC1y
ZXF1ZXN0ZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWdu
YWwgaXMgZW1pdHRlZAorICAgICAqIEBkb3dubG9hZDogdGhlIG1lc3NhZ2UgdGV4dAorICAgICAq
IEByZXR1cm46IFRSVUUgaWYgdGhlIGRvd25sb2FkIHdhcyBoYW5kbGVkLCBvdGhlcndpc2UgaXQn
bGwgYmUgY2FuY2VsbGVkLgorICAgICAqCisgICAgICogQSBuZXcgRG93bmxvYWQgaXMgYmVpbmcg
cmVxdWVzdGVkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMS4xCisgICAgICovCisgICAgd2Vi
a2l0X3dlYl92aWV3X3NpZ25hbHNbRE9XTkxPQURfUkVRVUVTVEVEXSA9IGdfc2lnbmFsX25ldygi
ZG93bmxvYWQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZp
ZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8
IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2Vi
Vmlld0NsYXNzLCBkb3dubG9hZF9yZXF1ZXN0ZWQpLAorICAgICAgICAgICAgZ19zaWduYWxfYWNj
dW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdl
YmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFO
LCAxLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCk7CisKICAgICAvKioKICAgICAgKiBXZWJL
aXRXZWJWaWV3Ojpsb2FkLXN0YXJ0ZWQ6CiAgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9u
IHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtMTM5Myw2ICsxNDIyLDcgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJW
aWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5jdXRfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92
aWV3X3JlYWxfY3V0X2NsaXBib2FyZDsKICAgICB3ZWJWaWV3Q2xhc3MtPmNvcHlfY2xpcGJvYXJk
ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY29weV9jbGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNz
LT5wYXN0ZV9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9wYXN0ZV9jbGlwYm9hcmQ7
CisgICAgd2ViVmlld0NsYXNzLT5kb3dubG9hZF9yZXF1ZXN0ZWQgPSB3ZWJraXRfd2ViX3ZpZXdf
cmVhbF9kb3dubG9hZF9yZXF1ZXN0ZWQ7CiAKICAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1Mod2ViVmlld0NsYXNzKTsKICAgICBvYmplY3RDbGFzcy0+ZGlzcG9z
ZSA9IHdlYmtpdF93ZWJfdmlld19kaXNwb3NlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmlu
ZGV4IDIyYjVmNGYuLjIyNDg2YjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTEw
Miw2ICsxMDIsOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgdm9pZCAgICAg
ICAgICAgICAgICAgICAgICAgKCogY3V0X2NsaXBib2FyZCkgICAgICAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgKCog
Y29weV9jbGlwYm9hcmQpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7
CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgKCogcGFzdGVfY2xpcGJvYXJkKSAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7CisgICAgZ2Jvb2xlYW4gICAgICAg
ICAgICAgICAgICAgKCogZG93bmxvYWRfcmVxdWVzdGVkKSAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKIAogICAg
IC8qCiAgICAgICogaW50ZXJuYWwKLS0gCjEuNS42LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27983</attachid>
            <date>2009-02-25 14:17:05 -0800</date>
            <delta_ts>2009-02-27 18:46:51 -0800</delta_ts>
            <desc>implements download</desc>
            <filename>0001-Implement-download-and-provide-a-nice-object-wrappi.patch</filename>
            <type>text/plain</type>
            <size>45491</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSBmMzhkZjVkYjZmM2YwYmEzMjg2YjY2ZGNmNGIxMTRhZWQ4ZjVjZjViIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDA5IDE4OjE4OjI0IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRo
ZSBkb3dubG9hZAogcHJvY2VzcwoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwogR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArCiAuLi4vcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgICB8ICAgIDkgKy0KIFdlYktpdC9ndGsvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1NSArKwogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAgfCAgIDE2ICstCiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCB8ICAgMjcgKy0K
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MSArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgICAgICAgICB8
ICAgIDMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwICAgICAgICAgICAg
ICAgfCAgNzg1ICsrKysrKysrKysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
b3dubG9hZC5oICAgICAgICAgICAgICAgICB8ICAxMTQgKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRwcml2YXRlLmggICAgICAgICAgICAgICAgICB8ICAgIDUgKwogV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICAgICAgICAgfCAgIDMwICsKIFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuaCAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAxNCBmaWxl
cyBjaGFuZ2VkLCAxMDU5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaAoKZGlmZiAtLWdpdCBh
L0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4YWVjYWYwLi4wNzA4NWE2IDEwMDY0NAotLS0g
YS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC01NCw2ICs1NCwxNCBAQAogCiAyMDA5LTAy
LTEyICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgogCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMsIHdlYmtp
dGRvd25sb2FkLntoLGNwcH0sIHRvIHRoZSBHVEsrIHBvcnQuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKworMjAwOS0wMi0xMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21l
Lm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICAqIGNv
bmZpZ3VyZS5hYzogTWFrZSBzb3VwIHRoZSBkZWZhdWx0IEhUVFAgYmFja2VuZCBmb3IgdGhlIEd0
ayBwb3J0LgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRl
eCBmYjJkZWI1Li5jYjVjOTc3IDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVt
YWtlZmlsZS5hbQpAQCAtMzAyLDYgKzMwMiw3IEBAIGVuZGlmCiB3ZWJraXRndGtfaF9hcGkgKz0g
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRkZWZpbmVzLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggXAogCVdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAogCVdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHZlcnNpb24uaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2Zv
cndhcmRsaXN0LmggXApAQCAtMzQ2LDYgKzM0Nyw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwK
IAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNwcCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKIAlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRvd25sb2FkLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgXAog
CVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcAogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDkyOTQ4YzEu
Ljc0NTI4MzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDItMjUgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGduc0Bnbm9tZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWFrZSB0aGUgU291cCBiYWNrZW5kIGFibGUgdG8gaGFuZGxlIHJlcXVlc3Rz
IHdpdGhvdXQgYSBmcmFtZSwKKyAgICAgICAgc2luY2Ugd2UgbWF5IGhhdmUgc3VjaCB0aGluZ3Mg
bm93IHRoYXQgd2Ugc3VwcG9ydCBkb3dubG9hZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpzdGFydCk6CisKIDIwMDktMDItMjUgIEphbiBNaWNoYWVsIEFsb256byAgPGpt
YWxvbnpvQHdlYmtpdC5vcmc+CiAKICAgICAgICAgR3RrIGJ1aWxkIGZpeC4gTm90IHJldmlld2Vk
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKaW5kZXggZDE0ODcyOS4uNzU5NWU3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC01MDksOSArNTA5
LDEyIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKIHsKICAgICBB
U1NFUlQoIWQtPm1fbXNnKTsKIAotICAgIC8vIElmIHdlIGFyZSBubyBsb25nZXIgYXR0YWNoZWQg
dG8gYSBQYWdlLCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkIGxvYWQgZnJvbSBhbgotICAgIC8v
IG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQuCi0gICAgaWYgKCFmcmFt
ZS0+cGFnZSgpKQorCisgICAgLyogVGhlIGZyYW1lIGNvdWxkIGJlIG51bGwgaXMgdGhlIFJlc291
cmNlSGFuZGxlIGlzIG5vdCBhc3NvY2lhdGVkIHRvIGFueQorICAgICAqIEZyYW1lLCBpLmUuIGlm
IHdlIGFyZSBkb3dubG9hZGluZyBhIGZpbGUuCisgICAgICogSWYgdGhlIGZyYW1lIGlzIG5vdCBu
dWxsIGJ1dCB0aGUgcGFnZSBpcyBudWxsIHRoaXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQKKyAgICAg
KiBsb2FkIGZyb20gYW4gb25VbmxvYWQgaGFuZGxlciwgc28gbGV0J3MganVzdCBibG9jayBpdC4g
Ki8KKyAgICBpZiAoZnJhbWUgJiYgIWZyYW1lLT5wYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEtVUkwgdXJsID0gcmVxdWVzdCgpLnVybCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAxYTRhOTJkLi5lYTgw
ZmUwIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0No
YW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDA5LTAyLTIzICBHdXN0YXZvIE5vcm9uaGEgU2ls
dmEgIDxnbnNAZ25vbWUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcGxlbWVudCBkb3dubG9hZCwgYW5kIHByb3ZpZGUgYSBuaWNlIG9iamVj
dCB3cmFwcGluZyB0aGUKKyAgICAgICAgZG93bmxvYWQgcHJvY2Vzcy4gSW5pdGlhbCB3b3JrIGRv
bmUgYnkgTWFyY28gQmFyaXNpb25lIGFuZAorICAgICAgICBQaWVycmUtTHVjIEJlYXVkb2luLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRVUkwpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoK
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXRkb3dubG9hZC5jcHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6
KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9kaXNw
b3NlKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9m
aW5hbGl6ZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxv
YWRfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtp
dF9kb3dubG9hZF9zZXRfcHJvcGVydHkpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0
ZTo6d2Via2l0X2Rvd25sb2FkX2NsYXNzX2luaXQpOgorICAgICAgICAoX1dlYktpdERvd25sb2Fk
UHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2luaXQpOgorICAgICAgICAoX1dlYktpdERvd25sb2Fk
UHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX25ldyk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQ
cml2YXRlOjp3ZWJraXRfZG93bmxvYWRfbmV3X2Zyb21fcmVxdWVzdCk6CisgICAgICAgIChfV2Vi
S2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfb3Blbl9zdHJlYW1fZm9yX3VyaSk6
CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfY2xvc2Vf
c3RyZWFtKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9h
ZF9zdGFydCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxv
YWRfY2FuY2VsKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3du
bG9hZF9nZXRfdXJpKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9k
b3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFBy
aXZhdGU6OndlYmtpdF9kb3dubG9hZF9zZXRfcmVzcG9uc2UpOgorICAgICAgICAoX1dlYktpdERv
d25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUpOgor
ICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9kZXN0
aW5hdGlvbl91cmkpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rv
d25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJp
dmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9zdGF0ZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxv
YWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUpOgor
ICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9wcm9n
cmVzcyk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRf
Z2V0X2VsYXBzZWRfdGltZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJr
aXRfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2
YXRlOjp3ZWJraXRfZG93bmxvYWRfZmluaXNoZWRfbG9hZGluZyk6CisgICAgICAgIChfV2ViS2l0
RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZXJyb3IpOgorICAgICAgICAoX1dlYktp
dERvd25sb2FkUHJpdmF0ZTo6RG93bmxvYWRDbGllbnQ6OkRvd25sb2FkQ2xpZW50KToKKyAgICAg
ICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OkRvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6RG93bmxvYWRDbGllbnQ6
OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OkRvd25s
b2FkQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFBy
aXZhdGU6OkRvd25sb2FkQ2xpZW50OjpkaWRGYWlsKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9h
ZFByaXZhdGU6OkRvd25sb2FkQ2xpZW50Ojp3YXNCbG9ja2VkKToKKyAgICAgICAgKF9XZWJLaXRE
b3dubG9hZFByaXZhdGU6OkRvd25sb2FkQ2xpZW50OjpjYW5ub3RTaG93VVJMKToKKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0ZG93bmxvYWQuaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtp
dHByaXZhdGUuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoKKwogMjAwOS0wMi0yMyAgWGFuIExvcGV6ICA8eGFu
QGdub21lLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292Lgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0
ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNw
cAppbmRleCA0OTAzNzBjLi43MzVlZDY4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEd1
c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTIwLDYgKzIxLDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgogI2luY2x1ZGUgIkNv
bnRleHRNZW51Q2xpZW50R3RrLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgpAQCAtMTYzLDcgKzE2NSwxOSBAQCB2b2lkIENvbnRleHRNZW51Q2xpZW50Ojpjb250
ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0TQogCiB2
b2lkIENvbnRleHRNZW51Q2xpZW50Ojpkb3dubG9hZFVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogbmV0d29ya19y
ZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcodXJsLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtpdF9kb3dubG9hZF9u
ZXcobmV0d29ya19yZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihuZXR3b3JrX3JlcXVlc3Qp
OworCisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93
ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5kbGVkKTsKKworICAg
IGlmIChoYW5kbGVkKQorICAgICAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOwor
ICAgIGVsc2UgeworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAg
ICAgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIH0KIH0KIAogdm9pZCBDb250ZXh0
TWVudUNsaWVudDo6Y29weUltYWdlVG9DbGlwYm9hcmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3Rr
LmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
CmluZGV4IGM0Y2M4NjMuLjY3MzI4ODcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHly
aWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9t
ZS5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00MCw2ICs0MSw4IEBACiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTc1
NCw5ICs3NTcsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9h
ZChjb25zdCBSZXNvdXJjZUVycm9yJikKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFt
ZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93
bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICAvLyB3ZSBjb3VsZCByZXVzZSB0aGUgc2FtZSBoYW5kbGUsIGJ1dCBvdXIgcmVwbGFjaW5n
IG9mIHRoZQorICAgIC8vIGNsaWVudCBzZWVtcyB0byBtYWtlIHRoaXMgaW1wb3NzaWJsZTsgdGhl
IG1haW4gbG9hZCBmYWlscworICAgIC8vIGFuZCBpcyBzdG9wcGVkCisgICAgaGFuZGxlLT5jYW5j
ZWwoKTsKKyAgICBzdGFydERvd25sb2FkKHJlcXVlc3QpOwogfQogCiBSZXNvdXJjZUVycm9yIEZy
YW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQpA
QCAtODQyLDkgKzg0OSwyMSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1l
bnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJybwogICAgIH0KIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogbmV0d29ya1JlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyhy
ZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCA9IHdlYmtpdF9kb3dubG9hZF9uZXcobmV0d29ya1JlcXVlc3QpOworCisgICAg
Z2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUodmlldywgImRvd25s
b2FkLXJlcXVlc3RlZCIsIGRvd25sb2FkLCAmaGFuZGxlZCk7CisKKyAgICBpZiAoaGFuZGxlZCkK
KyAgICAgICAgd2Via2l0X2Rvd25sb2FkX3N0YXJ0KGRvd25sb2FkKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAgICAgIGdfb2JqZWN0
X3VucmVmKGRvd25sb2FkKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnkoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRleCA4Yzg2OGEyLi5kMzM0MDQ3IDEw
MDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXQuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2
ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG93
bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViaW5z
cGVjdG9yLmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggZjk0ZTcxMC4uYjBhYjVl
OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtNjgsNiArNjgsOSBAQCB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViV2luZG93RmVhdHVyZXNDbGFzcyBXZWJLaXRXZWJXaW5kb3dGZWF0
dXJlc0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsK
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2ViS2l0V2ViVmlld0NsYXNzOwog
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWQgV2ViS2l0RG93bmxvYWQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RG93bmxvYWRDbGFzcyBXZWJLaXREb3dubG9hZENsYXNzOworCiBHX0VO
RF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRv
d25sb2FkLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTA4YTg4Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEsNzg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3ZWJraXRk
b3dubG9hZC5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbGliL2dz
dGRpby5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK2V4dGVybiAiQyIgeworCitjbGFzcyBEb3dubG9hZENsaWVudCA6IE5vbmNvcHlhYmxl
LCBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRG93
bmxvYWRDbGllbnQoV2ViS2l0RG93bmxvYWQqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBjaGFyKiwgaW50LCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZyhSZXNvdXJjZUhhbmRsZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbm5v
dFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFdlYktp
dERvd25sb2FkKiBtX2Rvd25sb2FkOworfTsKKworI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfR0VU
X1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJL
SVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRQcml2YXRlKSkKKworc3RydWN0IF9XZWJL
aXREb3dubG9hZFByaXZhdGUgeworICAgIGdjaGFyKiBkZXN0aW5hdGlvbl91cmk7CisgICAgZ2No
YXIqIHN1Z2dlc3RlZF9maWxlbmFtZTsKKyAgICBndWludCBjdXJyZW50X3NpemU7CisgICAgR1Rp
bWVyKiB0aW1lcjsKKyAgICBXZWJLaXREb3dubG9hZFN0YXRlIHN0YXRlOworICAgIEdGaWxlT3V0
cHV0U3RyZWFtKiBvdXRwdXRfc3RyZWFtOworICAgIERvd25sb2FkQ2xpZW50KiBkb3dubG9hZF9j
bGllbnQ7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIG5ldHdvcmtfcmVxdWVzdDsKKyAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBuZXR3b3JrX3Jlc3BvbnNlOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gcmVzb3VyY2VfaGFuZGxlOworfTsKKworZW51bSB7Cisg
ICAgLyogbm9ybWFsIHNpZ25hbHMgKi8KKyAgICBFUlJPUiwKKyAgICBMQVNUX1NJR05BTAorfTsK
Kworc3RhdGljIGd1aW50IHdlYmtpdF9kb3dubG9hZF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsg
MCwgfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9ORVRXT1JLX1JFUVVFU1Qs
CisgICAgUFJPUF9ERVNUSU5BVElPTl9VUkksCisgICAgUFJPUF9TVUdHRVNURURfRklMRU5BTUUs
CisgICAgUFJPUF9QUk9HUkVTUywKKyAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICBQUk9QX1RP
VEFMX1NJWkUsCit9OworCitHX0RFRklORV9UWVBFKFdlYktpdERvd25sb2FkLCB3ZWJraXRfZG93
bmxvYWQsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZGlz
cG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0g
V0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2
ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBpZiAocHJpdi0+b3V0cHV0X3N0cmVhbSkgeworICAg
ICAgICBnX29iamVjdF91bnJlZihwcml2LT5vdXRwdXRfc3RyZWFtKTsKKyAgICAgICAgcHJpdi0+
b3V0cHV0X3N0cmVhbSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHByaXYtPm5ldHdvcmtfcmVx
dWVzdCkgeworICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5uZXR3b3JrX3JlcXVlc3QpOwor
ICAgICAgICBwcml2LT5uZXR3b3JrX3JlcXVlc3QgPSBOVUxMOworICAgIH0KKworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9i
amVjdCk7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7
CisKKyAgICAvKiBXZSBkb24ndCBjYWxsIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoKSBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8gZW1pdAorICAgICAqIHNpZ25hbHMgd2hlbiBmaW5hbGl6aW5nIGFu
IG9iamVjdC4gKi8KKyAgICBpZiAocHJpdi0+cmVzb3VyY2VfaGFuZGxlKSB7CisgICAgICAgIGlm
IChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfU1RBUlRFRCkgeworICAgICAg
ICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5zZXRDbGllbnQoMCk7CisgICAgICAgICAgICBw
cml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOworICAgICAgICB9CisgICAgICAgIHByaXYt
PnJlc291cmNlX2hhbmRsZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgZGVsZXRlIHByaXYtPmRv
d25sb2FkX2NsaWVudDsKKyAgICBkZWxldGUgcHJpdi0+bmV0d29ya19yZXNwb25zZTsKKworICAg
IGdfdGltZXJfZGVzdHJveShwcml2LT50aW1lcik7CisKKyAgICBnX2ZyZWUocHJpdi0+ZGVzdGlu
YXRpb25fdXJpKTsKKyAgICBnX2ZyZWUocHJpdi0+c3VnZ2VzdGVkX2ZpbGVuYW1lKTsKKworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FE
KG9iamVjdCk7CisKKyAgICBzd2l0Y2gocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ORVRXT1JL
X1JFUVVFU1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rvd25s
b2FkX2dldF9uZXR3b3JrX3JlcXVlc3QoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0RFU1RJTkFUSU9OX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1VHR0VTVEVEX0ZJTEVOQU1FOgorICAgICAgICBn
X3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2Zp
bGVuYW1lKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9HUkVT
UzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0
X3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJS
RU5UX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2Rvd25s
b2FkX2dldF9jdXJyZW50X3NpemUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1RPVEFMX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Vi
a2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b3dubG9hZF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25z
dCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKyAgICBXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKyAgICBXZWJLaXREb3dubG9h
ZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIHN3aXRjaChwcm9wX2lkKSB7
CisgICAgY2FzZSBQUk9QX05FVFdPUktfUkVRVUVTVDoKKyAgICAgICAgcHJpdi0+bmV0d29ya19y
ZXF1ZXN0ID0gKFdlYktpdE5ldHdvcmtSZXF1ZXN0KilnX3ZhbHVlX2R1cF9vYmplY3QodmFsdWUp
OworICAgICAgICAvKiBUaGlzIGlzIHNhZmUgYXMgbmV0d29yay1yZXF1ZXN0IGlzIGEgY29uc3Ry
dWN0IG9ubHkgcHJvcGVydHkgYW5kIHN1Z2dlc3RlZF9maWxlbmFtZQorICAgICAgICAgKiBpcyBp
bml0aWFsbHkgbnVsbC4gKi8KKyAgICAgICAgcHJpdi0+c3VnZ2VzdGVkX2ZpbGVuYW1lID0gZ19w
YXRoX2dldF9iYXNlbmFtZSh3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocHJpdi0+bmV0
d29ya19yZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVNUSU5BVElP
Tl9VUkk6CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25s
b2FkLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcF9pZCwgcHNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2Fk
X2NsYXNzX2luaXQoV2ViS2l0RG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKK3sKKyAgICAv
KgorICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKKyAgICAgKi8KKyAg
ICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZG93bmxvYWRDbGFz
cyk7CisgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfZG93bmxvYWRfZGlzcG9zZTsK
KyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG93bmxvYWRfZmluYWxpemU7Cisg
ICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcHJvcGVy
dHk7CisgICAgb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb3dubG9hZF9zZXRf
cHJvcGVydHk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDo6ZXJyb3I6CisgICAg
ICogQGRvd25sb2FkOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAor
ICAgICAqIEBjdXJyZW50X2J5dGVzOiB0aGUgY3VycmVudCBjb3VudCBvZiBieXRlcyBkb3dubG9h
ZGVkCisgICAgICogQHRvdGFsX2J5dGVzOiB0aGUgdG90YWwgYnl0ZXMgY291bnQgaW4gdGhlIGRv
d25sb2FkZWQgZmlsZSwgYWthIGZpbGUgc2l6ZS4KKyAgICAgKgorICAgICAqIEluZGljYXRlcyBh
biBlcnJvciBpbiB0aGUgZG93bmxvYWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjEKKyAg
ICAgKi8KKyAgICB3ZWJraXRfZG93bmxvYWRfc2lnbmFsc1tFUlJPUl0gPSBnX3NpZ25hbF9uZXco
ImVycm9yIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGRvd25sb2FkQ2xhc3MpLAor
ICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9B
Q1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9y
X3RydWVfaGFuZGxlZCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFy
c2hhbF9CT09MRUFOX19JTlRfSU5UX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFO
LCAzLAorICAgICAgICAgICAgR19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9JTlQsCisg
ICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIC8qCisgICAgICogcHJvcGVydGllcwor
ICAgICAqLworCisgICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpuZXR3b3JrLXJlcXVlc3QK
KyAgICAqCisgICAgKiBUaGUgI1dlYktpdE5ldHdvcmtSZXF1ZXN0IGluc3RhbmNlIGFzc29jaWF0
ZWQgd2l0aCB0aGUgZG93bmxvYWQuCisgICAgKgorICAgICogU2luY2U6IDEuMS4xCisgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9ORVRXT1JLX1JFUVVFU1QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldHdvcmstcmVxdWVzdCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmV0d29yayBSZXF1ZXN0IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbmV0d29yayByZXF1ZXN0IGZvciB0
aGUgVVJJIHRoYXQgc2hvdWxkIGJlIGRvd25sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKShXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIC8qKgorICAgICogV2ViS2l0
RG93bmxvYWQ6ZGVzdGluYXRpb24tdXJpCisgICAgKgorICAgICogVGhlIFVSSSBvZiB0aGUgc2F2
ZSBsb2NhdGlvbiBmb3IgdGhpcyBkb3dubG9hZC4KKyAgICAqCisgICAgKiBTaW5jZTogMS4xLjEK
KyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFU1RJTkFUSU9OX1VS
SSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzdGluYXRpb24tdXJp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXN0aW5hdGlvbiBVUkki
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBkZXN0aW5hdGlvbiBV
Ukkgd2hlcmUgdG8gc2F2ZSB0aGUgZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICogV2ViS2l0RG93bmxvYWQ6c3VnZ2Vz
dGVkLWZpbGVuYW1lCisgICAgKgorICAgICogVGhlIGZpbGUgbmFtZSBzdWdnZXN0ZWQgYXMgZGVm
YXVsdCB3aGVuIHNhdmluZworICAgICoKKyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1VHR0VTVEVEX0ZJTEVOQU1FLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWdnZXN0ZWQtZmlsZW5hbWUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1Z2dlc3RlZCBGaWxlbmFtZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZpbGVuYW1lIHN1Z2dlc3Rl
ZCBhcyBkZWZhdWx0IHdoZW4gc2F2aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgIC8qKgorICAgKiBXZWJLaXREb3dubG9hZDpwcm9ncmVzczoK
KyAgICoKKyAgICogRGV0ZXJtaW5lcyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgZG93bmxv
YWQuCisgICAqCisgICAqIFNpbmNlOiAxLjEuMQorICAgKi8KKyAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1BfUFJPR1JFU1MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoInByb2dyZXNzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJv
Z3Jlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MC4wLCAxLjAsIDEuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICog
V2ViS2l0RG93bmxvYWQ6Y3VycmVudC1zaXplCisgICAgKgorICAgICogVGhlIGxlbmd0aCBvZiB0
aGUgZGF0YSBhbHJlYWR5IGRvd25sb2FkZWQKKyAgICAqCisgICAgKiBTaW5jZTogMS4xLjEKKyAg
ICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudC1zaXplIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50IFNpemUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYWxyZWFk
eSBkb3dubG9hZGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdf
TUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOnRvdGFs
LXNpemUKKyAgICAqCisgICAgKiBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZQorICAgICoKKyAg
ICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfQ1VSUkVOVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
b3RhbC1zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBT
aXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgdG90YWwgc2l6
ZSBvZiB0aGUgZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBH
X01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGRvd25s
b2FkQ2xhc3MsIHNpemVvZihXZWJLaXREb3dubG9hZFByaXZhdGUpKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2Rvd25sb2FkX2luaXQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAg
IFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFU
RShkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPnByaXYgPSBwcml2OworCisgICAgcHJpdi0+ZG93
bmxvYWRfY2xpZW50ID0gbmV3IERvd25sb2FkQ2xpZW50KGRvd25sb2FkKTsKKyAgICBwcml2LT5j
dXJyZW50X3NpemUgPSAwOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FEX1NUQVRF
X0NSRUFURUQ7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX25ldzoKKyAqIEByZXF1ZXN0
OiBhICNXZWJLaXROZXR3b3JrUmVxdWVzdAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdERv
d25sb2FkIG9iamVjdCBmb3IgdGhlIGdpdmVuCisgKiAjV2ViS2l0TmV0d29ya1JlcXVlc3Qgb2Jq
ZWN0LgorICoKKyAqIFJldHVybnM6IHRoZSBuZXcgI1dlYktpdERvd25sb2FkCisgKgorICogU2lu
Y2U6IDEuMS4xCisgKi8KK1dlYktpdERvd25sb2FkKiB3ZWJraXRfZG93bmxvYWRfbmV3KFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJl
cXVlc3QsIDApOworCisgICAgcmV0dXJuIFdFQktJVF9ET1dOTE9BRChnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9XTkxPQUQsICJuZXR3b3JrLXJlcXVlc3QiLCByZXF1ZXN0LCBOVUxMKSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG93bmxvYWRfb3Blbl9zdHJlYW1fZm9yX3VyaShX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiB1cmksIGdib29sZWFuIGFwcGVu
ZD1GQUxTRSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh1cmksIEZBTFNFKTsKKworICAg
IFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIEdGaWxl
KiBmaWxlID0gZ19maWxlX25ld19mb3JfdXJpKHVyaSk7CisgICAgR0Vycm9yKiBlcnJvciA9IE5V
TEw7CisKKyAgICBpZiAoYXBwZW5kKQorICAgICAgICBwcml2LT5vdXRwdXRfc3RyZWFtID0gZ19m
aWxlX2FwcGVuZF90byhmaWxlLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIE5VTEwsICZlcnJvcik7Cisg
ICAgZWxzZQorICAgICAgICBwcml2LT5vdXRwdXRfc3RyZWFtID0gZ19maWxlX3JlcGxhY2UoZmls
ZSwgTlVMTCwgVFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCBOVUxMLCAmZXJyb3IpOworCisgICAg
Z19vYmplY3RfdW5yZWYoZmlsZSk7CisKKyAgICBpZihlcnJvcikgeworICAgICAgICBnYm9vbGVh
biBoYW5kbGVkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJv
ciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiwgZXJyb3ItPm1lc3NhZ2Us
ICZoYW5kbGVkKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG93bmxvYWRfY2xvc2Vfc3RyZWFtKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAg
ICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAo
cHJpdi0+b3V0cHV0X3N0cmVhbSkgeworICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vdXRw
dXRfc3RyZWFtKTsKKyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IE5VTEw7CisgICAgfQor
fQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9zdGFydDoKKyAqIEBkb3dubG9hZDogdGhlICNX
ZWJLaXREb3dubG9hZAorICoKKyAqIEluaXRpYXRlcyB0aGUgZG93bmxvYWQuIE5vdGljZSB0aGF0
IHlvdSBtdXN0IGhhdmUgc2V0IHRoZQorICogZGVzdGluYXRpb24tdXJpIHByb3BlcnR5IGJlZm9y
ZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCit2b2lkIHdl
YmtpdF9kb3dubG9hZF9zdGFydChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsKKworICAgIFdlYktp
dERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGdfcmV0dXJuX2lm
X2ZhaWwocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYt
PnN0YXRlID09IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHByaXYtPnRpbWVyID09IE5VTEwpOworCisgICAgaWYgKHByaXYtPnJlc291cmNlX2hh
bmRsZSkKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5zZXRDbGllbnQocHJpdi0+ZG93
bmxvYWRfY2xpZW50KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUUgdXNlIGtpdChwcml2
LT5uZXR3b3JrX3JlcXVlc3QpIHdoZW4gV2ViS2l0TmV0d29ya1JlcXVlc3Qgd2lsbCBiZSBmaW5p
c2hlZC4KKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qod2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCkpOworICAgICAgICBwcml2LT5yZXNv
dXJjZV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKHJlcXVlc3QsIHByaXYtPmRvd25s
b2FkX2NsaWVudCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgfQorCisgICAgcHJpdi0+
dGltZXIgPSBnX3RpbWVyX25ldyAoKTsKKyAgICB3ZWJraXRfZG93bmxvYWRfb3Blbl9zdHJlYW1f
Zm9yX3VyaShkb3dubG9hZCwgcHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKK30KKworLyoqCisgKiB3
ZWJraXRfZG93bmxvYWRfY2FuY2VsOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2Fk
CisgKgorICogQ2FuY2VscyB0aGUgZG93bmxvYWQuIENhbGxpbmcgdGhpcyB3aWxsIG5vdCBmcmVl
IHRoZQorICogI1dlYktpdERvd25sb2FkIG9iamVjdCwgc28geW91IHN0aWxsIG5lZWQgdG8gY2Fs
bAorICogZ19vYmplY3RfdW5yZWYoKSBvbiBpdCwgaWYgeW91IGFyZSB0aGUgb3duZXIgb2YgYSBy
ZWZlcmVuY2UuIE5vdGljZQorICogdGhhdCBjYW5jZWxsaW5nIHRoZSBkb3dubG9hZCBwcm92b2tl
cyB0aGUgZW1pc3Npb24gb2YgdGhlCisgKiBXZWJLaXREb3dubG9hZDo6ZXJyb3Igc2lnbmFsLCBy
ZXBvcnRpbmcgdGhhdCB0aGUgZG93bmxvYWQgd2FzCisgKiBjYW5jZWxsZWQuCisgKgorICogU2lu
Y2U6IDEuMS4xCisgKi8KK3ZvaWQgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQo
ZG93bmxvYWQpKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2Fk
LT5wcml2OworCisgICAgZ190aW1lcl9zdG9wKHByaXYtPnRpbWVyKTsKKworICAgIGlmIChwcml2
LT5yZXNvdXJjZV9oYW5kbGUpCisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS0+Y2FuY2Vs
KCk7CisKKyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQ7
CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3du
bG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VS
LCAiVXNlciBjYW5jZWxsZWQgdGhlIGRvd25sb2FkIiwgJmhhbmRsZWQpOworfQorCisvKioKKyAq
IHdlYmtpdF9kb3dubG9hZF9nZXRfdXJpOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25s
b2FkCisgKgorICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBVUkkgZnJvbSB0
aGUKKyAqICNXZWJLaXROZXR3b3JrUmVxdWVzdCB3aGljaCBpcyBiZWluZyBkb3dubG9hZGVkLgor
ICoKKyAqIFJldHVybnM6IHRoZSB1cmkKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworY29uc3Qg
Z2NoYXIqIHdlYmtpdF9kb3dubG9hZF9nZXRfdXJpKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQp
LCBOVUxMKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5w
cml2OworICAgIHJldHVybiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocHJpdi0+bmV0
d29ya19yZXF1ZXN0KTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtf
cmVxdWVzdDoKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIFJldHJp
ZXZlcyB0aGUgI1dlYktpdE5ldHdvcmtSZXF1ZXN0IG9iamVjdCB0aGF0IGJhY2tzIHRoZSBkb3du
bG9hZAorICogcHJvY2Vzcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgI1dlYktpdE5ldHdvcmtSZXF1
ZXN0IGluc3RhbmNlCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK1dlYktpdE5ldHdvcmtSZXF1
ZXN0KiB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FE
KGRvd25sb2FkKSwgTlVMTCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBk
b3dubG9hZC0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+bmV0d29ya19yZXF1ZXN0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X3Jlc3BvbnNlKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgLy8gRklY
TUUgVXNlIFdlYktpdE5ldHdvcmtSZXNwb25zZSB3aGVuIGl0J3MgbWVyZ2VkCisgICAgV2ViS2l0
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcHJpdi0+bmV0d29y
a19yZXNwb25zZSA9IG5ldyBSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30KKworLyoqCisg
KiB3ZWJraXRfZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZToKKyAqIEBkb3dubG9hZDog
dGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIFJldHJpZXZlcyB0aGUgZmlsZW5hbWUgdGhhdCB3
YXMgc3VnZ2VzdGVkIGJ5IHRoZSBzZXJ2ZXIsIG9yIHRoZSBvbmUKKyAqIGRlcml2ZWQgYnkgV2Vi
S2l0IGZyb20gdGhlIFVSSS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc3VnZ2VzdGVkIGZpbGVuYW1l
CisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZG93bmxvYWRf
Z2V0X3N1Z2dlc3RlZF9maWxlbmFtZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7
CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAg
ICByZXR1cm4gcHJpdi0+c3VnZ2VzdGVkX2ZpbGVuYW1lOworfQorCisvKioKKyAqIHdlYmtpdF9k
b3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERv
d25sb2FkCisgKgorICogT2J0YWlucyB0aGUgVVJJIHRvIHdoaWNoIHRoZSBkb3dubG9hZGVkIGZp
bGUgd2lsbCBiZSB3cml0dGVuLiBUaGlzCisgKiBtdXN0IGhhdmUgYmVlbiBzZXQgYnkgdGhlIGFw
cGxpY2F0aW9uIGJlZm9yZSBjYWxsaW5nCisgKiB3ZWJraXRfZG93bmxvYWRfc3RhcnQoKSwgYW5k
IG1heSBiZSAlTlVMTC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGVzdGluYXRpb24gVVJJIG9yICVO
VUxMCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZG93bmxv
YWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7
CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAg
ICByZXR1cm4gcHJpdi0+ZGVzdGluYXRpb25fdXJpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3du
bG9hZF9zZXRfZGVzdGluYXRpb25fdXJpOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25s
b2FkCisgKiBAZGVzdGluYXRpb25fdXJpOiB0aGUgZGVzdGluYXRpb24gVVJJCisgKgorICogRGVm
aW5lcyB0aGUgVVJJIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gc2F2ZSB0aGUgZG93bmxvYWRlZCBm
aWxlIHRvLgorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCit2b2lkIHdlYmtpdF9kb3dubG9hZF9z
ZXRfZGVzdGluYXRpb25fdXJpKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIq
IGRlc3RpbmF0aW9uX3VyaSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ET1dO
TE9BRChkb3dubG9hZCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGVzdGluYXRpb25fdXJpKTsK
KworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAg
IGlmIChwcml2LT5kZXN0aW5hdGlvbl91cmkgJiYgIXN0cmNtcChwcml2LT5kZXN0aW5hdGlvbl91
cmksIGRlc3RpbmF0aW9uX3VyaSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FIGNh
biB3ZSBoYXZlIGEgYmV0dGVyIGNoZWNrPworICAgIGlmIChwcml2LT5zdGF0ZSAhPSBXRUJLSVRf
RE9XTkxPQURfU1RBVEVfQ1JFQVRFRCAmJiBwcml2LT5zdGF0ZSAhPSBXRUJLSVRfRE9XTkxPQURf
U1RBVEVfQ0FOQ0VMTEVEKSB7CisgICAgICAgIEFTU0VSVChwcml2LT5kZXN0aW5hdGlvbl91cmkp
OworCisgICAgICAgIGdib29sZWFuIGRvd25sb2FkaW5nID0gcHJpdi0+b3V0cHV0X3N0cmVhbSAh
PSBOVUxMOworICAgICAgICBpZiAoZG93bmxvYWRpbmcpCisgICAgICAgICAgICB3ZWJraXRfZG93
bmxvYWRfY2xvc2Vfc3RyZWFtKGRvd25sb2FkKTsKKworICAgICAgICBHRmlsZSogc3JjID0gZ19m
aWxlX25ld19mb3JfdXJpKHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7CisgICAgICAgIEdGaWxlKiBk
ZXN0ID0gZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9uX3VyaSk7CisgICAgICAgIEdFcnJv
ciAqZXJyb3IgPSBOVUxMOworCisgICAgICAgIGdfZmlsZV9tb3ZlKHNyYywgZGVzdCwgR19GSUxF
X0NPUFlfQkFDS1VQLCBOVUxMLCBOVUxMLCBOVUxMLCAmZXJyb3IpOworCisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKHNyYyk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGRlc3QpOworCisgICAgICAg
IGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkpOworICAgICAgICBwcml2LT5kZXN0aW5hdGlv
bl91cmkgPSBnX3N0cmR1cChkZXN0aW5hdGlvbl91cmkpOworCisgICAgICAgIGlmIChlcnJvcikg
eworICAgICAgICAgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RF
U1RJTkFUSU9OLCBlcnJvci0+bWVzc2FnZSwgJmhhbmRsZWQpOworICAgICAgICAgICAgZ19lcnJv
cl9mcmVlKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkb3dubG9hZGluZykgeworICAgICAgICAgICAgaWYgKCF3ZWJraXRfZG93bmxvYWRfb3Bl
bl9zdHJlYW1fZm9yX3VyaShkb3dubG9hZCwgZGVzdGluYXRpb25fdXJpLCBUUlVFKSkgeworICAg
ICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICBnX2ZyZWUocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICAgIHByaXYtPmRlc3RpbmF0
aW9uX3VyaSA9IGdfc3RyZHVwKGRlc3RpbmF0aW9uX3VyaSk7CisgICAgfQorCisgICAgLyogb25s
eSBub3RpZnkgY2hhbmdlIGlmIGV2ZXJ5dGhpbmcgd2VudCBmaW5lICovCisgICAgZ19vYmplY3Rf
bm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImRlc3RpbmF0aW9uLXVyaSIpOworfQorCisvKioK
KyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdGU6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0
RG93bmxvYWQKKyAqCisgKiBPYnRhaW5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkb3dubG9h
ZCwgYXMgYQorICogI1dlYktpdERvd25sb2FkU3RhdGUuCisgKgorICogUmV0dXJuczogdGhlIGN1
cnJlbnQgI1dlYktpdERvd25sb2FkU3RhdGUKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2Vi
S2l0RG93bmxvYWRTdGF0ZSB3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXRlIChXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05M
T0FEKGRvd25sb2FkKSwgV0VCS0lUX0RPV05MT0FEX1NUQVRFX0VSUk9SKTsKKworICAgIFdlYktp
dERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIHJldHVybiBwcml2
LT5zdGF0ZTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemU6Cisg
KiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBSZXR1cm5zIHRoZSBleHBl
Y3RlZCB0b3RhbCBzaXplIG9mIHRoZSBkb3dubG9hZC4gVGhpcyBpcyBleHBlY3RlZAorICogYmVj
YXVzZSB0aGUgc2VydmVyIG1heSBwcm92aWRlIGluY29ycmVjdCBvciBtaXNzaW5nCisgKiBDb250
ZW50LUxlbmd0aC4gTm90aWNlIHRoYXQgdGhpcyBtYXkgZ3JvdyBvdmVyIHRpbWUsIGFzIGl0IHdp
bGwgYmUKKyAqIGFsd2F5cyB0aGUgc2FtZSBhcyBjdXJyZW50X3NpemUgaW4gdGhlIGNhc2VzIHdo
ZXJlIGN1cnJlbnQgc2l6ZQorICogc3VycGFzc2VzIGl0LgorICoKKyAqIFJldHVybnM6IHRoZSBl
eHBlY3RlZCB0b3RhbCBzaXplIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUKKyAqCisgKiBTaW5jZTog
MS4xLjEKKyAqLworZ3VpbnQ2NCB3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUgKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSog
cHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmICghcHJpdi0+bmV0d29ya19yZXNwb25zZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gTUFYKHByaXYtPmN1cnJlbnRfc2l6ZSwg
cHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpOworfQorCisv
KioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplOgorICogQGRvd25sb2FkOiB0
aGUgI1dlYktpdERvd25sb2FkCisgKgorICogQ3VycmVudCBhbHJlYWR5IGRvd25sb2FkZWQgc2l6
ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgYWxyZWFkeSBkb3dubG9hZGVkIHNpemUKKyAqCisgKiBT
aW5jZTogMS4xLjEKKyAqLworZ3VpbnQ2NCB3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6
ZSAoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDApOworCisgICAgV2ViS2l0RG93bmxvYWRQ
cml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHByaXYtPmN1cnJlbnRf
c2l6ZTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzOgorICogQGRv
d25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIERldGVybWluZXMgdGhlIGN1cnJlbnQg
cHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkLgorICoKKyAqIFJldHVybnM6IGEgI2dkb3VibGUgcmFu
Z2luZyBmcm9tIDAuMCB0byAxLjAuCisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2dkb3VibGUg
d2Via2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzcyhXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwg
MS4wKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2
OworICAgIGdkb3VibGUgdG90YWxfc2l6ZSA9IChnZG91YmxlKXByaXYtPm5ldHdvcmtfcmVzcG9u
c2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpOworCisgICAgaWYgKHRvdGFsX3NpemUgPT0gMCkK
KyAgICAgICAgcmV0dXJuIDEuMDsKKworICAgIHJldHVybiAoKGdkb3VibGUpcHJpdi0+Y3VycmVu
dF9zaXplKSAvIHRvdGFsX3NpemU7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9l
bGFwc2VkX3RpbWU6CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogRWxh
cHNlZCB0aW1lIGZvciB0aGUgZG93bmxvYWQgaW4gc2Vjb25kcywgaW5jbHVkaW5nIGFueSBmcmFj
dGlvbmFsCisgKiBwYXJ0LiBJZiB0aGUgZG93bmxvYWQgaXMgZmluaXNoZWQsIGhhZCBhbiBlcnJv
ciBvciB3YXMgY2FuY2VsbGVkCisgKiB0aGlzIGlzIHRoZSB0aW1lIGJldHdlZW4gaXRzIHN0YXJ0
IGFuZCB0aGUgZXZlbnQuCisgKgorICogUmV0dXJuczogc2Vjb25kcyBzaW5jZSB0aGUgZG93bmxv
YWQgd2FzIHN0YXJ0ZWQsIGFzIGEgI2dkb3VibGUKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwor
Z2RvdWJsZSB3ZWJraXRfZG93bmxvYWRfZ2V0X2VsYXBzZWRfdGltZShXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FE
KGRvd25sb2FkKSwgMC4wKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRv
d25sb2FkLT5wcml2OworICAgIHJldHVybiBnX3RpbWVyX2VsYXBzZWQocHJpdi0+dGltZXIsIE5V
TEwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQorewor
ICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworCisgICAg
aWYgKHByaXYtPmN1cnJlbnRfc2l6ZSA9PSAwKSB7CisgICAgICAgIHByaXYtPnN0YXRlID0gV0VC
S0lUX0RPV05MT0FEX1NUQVRFX1NUQVJURUQ7CisgICAgfQorCisgICAgQVNTRVJUKHByaXYtPm91
dHB1dF9zdHJlYW0pOworCisgICAgZ3NpemUgYnl0ZXNfd3JpdHRlbjsKKyAgICBHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGwoR19PVVRQVVRfU1RS
RUFNKHByaXYtPm91dHB1dF9zdHJlYW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YSwgbGVuZ3RoLCAmYnl0ZXNfd3JpdHRlbiwgTlVMTCwgJmVycm9yKTsKKworICAgIGlmIChl
cnJvcikgeworICAgICAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgICAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNU
SU5BVElPTiwgZXJyb3ItPm1lc3NhZ2UsICZoYW5kbGVkKTsKKyAgICAgICAgZ19lcnJvcl9mcmVl
KGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByaXYtPmN1cnJlbnRfc2l6
ZSArPSBsZW5ndGg7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImN1
cnJlbnQtc2l6ZSIpOworCisgICAgQVNTRVJUKHByaXYtPm5ldHdvcmtfcmVzcG9uc2UpOworICAg
IGlmIChwcml2LT5jdXJyZW50X3NpemUgPiBwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5leHBlY3Rl
ZENvbnRlbnRMZW5ndGgoKSkKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25s
b2FkKSwgInRvdGFsLXNpemUiKTsKKworICAgIC8qIEZJWE1FIHRocm90dGxlIHRoZSBudW1iZXIg
b2YgdXBkYXRlcz8KKyAgICAgKiBzaG91bGQgd2UgcmVtb3ZlIHRoZSBwcmV2aW91cyBnX29iamVj
dF9ub3RpZnkoKXMgaWYgd2UgYXJlIGdvaW5nIHRvIHRocm90dGxlCisgICAgICogdGhlIHByb2dy
ZXNzIHVwZGF0ZXM/ICovCisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwg
InByb2dyZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9maW5pc2hlZF9s
b2FkaW5nKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRf
Y2xvc2Vfc3RyZWFtKGRvd25sb2FkKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJp
diA9IGRvd25sb2FkLT5wcml2OworCisgICAgZ190aW1lcl9zdG9wKHByaXYtPnRpbWVyKTsKKyAg
ICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRDsKKworICAgIGdf
b2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJwcm9ncmVzcyIpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZXJyb3IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfY2xvc2Vf
c3RyZWFtKGRvd25sb2FkKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRv
d25sb2FkLT5wcml2OworCisgICAgZ190aW1lcl9zdG9wKHByaXYtPnRpbWVyKTsKKyAgICBwcml2
LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9FUlJPUjsKKworICAgIGdib29sZWFuIGhh
bmRsZWQ7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBX
RUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSywgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24o
KS51dGY4KCkuZGF0YSgpLCAmaGFuZGxlZCk7Cit9CisKK0Rvd25sb2FkQ2xpZW50OjpEb3dubG9h
ZENsaWVudChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgOiBtX2Rvd25sb2FkKGRvd25s
b2FkKQoreworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICB3
ZWJraXRfZG93bmxvYWRfc2V0X3Jlc3BvbnNlKG1fZG93bmxvYWQsIHJlc3BvbnNlKTsKK30KKwor
dm9pZCBEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgd2Vi
a2l0X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEobV9kb3dubG9hZCwgZGF0YSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSop
Cit7CisgICAgd2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcobV9kb3dubG9hZCk7Cit9
CisKK3ZvaWQgRG93bmxvYWRDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfZXJyb3IobV9kb3du
bG9hZCwgZXJyb3IpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50Ojp3YXNCbG9ja2VkKFJlc291
cmNlSGFuZGxlKikKK3sKKyAgICAvLyBGSVhNRSB3aGVuIHdlIGhhdmUgdGhlIG5ldyBmcmFtZSBs
b2FkZXIgc2lnbmFscyBhbmQgZXJyb3IgaGFuZGxpbmcuCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBEb3dubG9hZENsaWVudDo6Y2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSop
Cit7CisgICAgLy8gRklYTUUgd2hlbiB3ZSBoYXZlIHRoZSBuZXcgZnJhbWUgbG9hZGVyIHNpZ25h
bHMgYW5kIGVycm9yIGhhbmRsaW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjBlOGVjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
b3dubG9hZC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZh
IDxnbnNAZ25vbWUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9ET1dOTE9BRF9ICisjZGVmaW5lIFdFQktJ
VF9ET1dOTE9BRF9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX0RPV05MT0FEICAgICAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfRE9XTkxPQUQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZENsYXNz
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPV05MT0FEKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FEKSkKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9U
WVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZENsYXNzKSkKKwordHlwZWRlZiBlbnVtIHsKKyAg
ICBXRUJLSVRfRE9XTkxPQURfU1RBVEVfRVJST1IgPSAtMSwKKyAgICBXRUJLSVRfRE9XTkxPQURf
U1RBVEVfQ1JFQVRFRCA9IDAsCisgICAgV0VCS0lUX0RPV05MT0FEX1NUQVRFX1NUQVJURUQsCisg
ICAgV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCwKKyAgICBXRUJLSVRfRE9XTkxPQURf
U1RBVEVfRklOSVNIRUQKK30gV2ViS2l0RG93bmxvYWRTdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsK
KyAgICBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIsCisgICAgV0VCS0lU
X0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OLAorICAgIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9O
RVRXT1JLCit9IFdlYktpdERvd25sb2FkRXJyb3I7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
b3dubG9hZFByaXZhdGUgV2ViS2l0RG93bmxvYWRQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdERv
d25sb2FkIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIFdlYktpdERvd25s
b2FkUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RG93bmxvYWRDbGFzcyB7Cisg
ICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVy
ZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAg
ICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9y
ZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfdHlwZSAgICAgICAg
ICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdERvd25sb2FkICoKK3dlYmtp
dF9kb3dubG9hZF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdE5ldHdvcmtSZXF1
ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG93bmxvYWRfc3RhcnQg
ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb3dubG9hZF9jYW5jZWwgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgY29u
c3QgZ2NoYXIqCit3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaSAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5ldHdv
cmtSZXF1ZXN0Kgord2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QgICAgICAgICAo
V2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
cioKK3dlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lICAgICAgKFdlYktpdERv
d25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJr
aXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaSAgICAgICAgIChXZWJLaXREb3dubG9hZCAg
ICAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb3dubG9hZF9zZXRf
ZGVzdGluYXRpb25fdXJpICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICAgICAgICAgICpkZXN0aW5hdGlvbl91cmkpOworCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtp
dF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAg
ICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25sb2FkX2dl
dF9lbGFwc2VkX3RpbWUgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2Fk
KTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUg
ICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOworCitXRUJLSVRf
QVBJIGd1aW50NjQKK3dlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplICAgICAgICAgICAg
KFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0RG93
bmxvYWRTdGF0ZQord2Via2l0X2Rvd25sb2FkX2dldF9zdGF0ZSAgICAgICAgICAgICAgICAgICAo
V2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggYWNlOTk2ZC4uYTQ5YWQ0YyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNp
c2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmg+Cisj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHdlYnNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVz
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oPgpAQCAtNDQs
OSArNDUsMTMgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKICNp
bmNsdWRlIDxnbGliLmg+CiAKK2NsYXNzIERvd25sb2FkQ2xpZW50OworCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKICAgICBXZWJLaXRXZWJWaWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktpdFdlYkZyYW1l
Kik7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggYjA0ZWYwNS4uM2UzN2Vl
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAid2Via2l0ZG93bmxvYWQuaCIKICNpbmNs
dWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSAid2Via2l0ZW51bXR5cGVzLmgiCiAjaW5j
bHVkZSAid2Via2l0bWFyc2hhbC5oIgpAQCAtMTMzLDYgKzEzNCw3IEBAIGVudW0gewogICAgIENP
UFlfQ0xJUEJPQVJELAogICAgIFBBU1RFX0NMSVBCT0FSRCwKICAgICBDVVRfQ0xJUEJPQVJELAor
ICAgIERPV05MT0FEX1JFUVVFU1RFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtODExLDYg
KzgxMywxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9wYXN0ZV9jbGlwYm9h
cmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQo
IlBhc3RlIikuZXhlY3V0ZSgpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3
X3JlYWxfZG93bmxvYWRfcmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQpCit7CisgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9h
ZCk7CisgICAgLy8gUmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIGl0IHdhc24ndCBoYW5kbGVkIHRo
ZXJlZm9yZSB0aGUgZG93bmxvYWQgaXMgZGVsZXRlZAorICAgIHJldHVybiBGQUxTRTsKK30KKwog
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogewog
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KTsKQEAg
LTEwODQsNiArMTA5MywyNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5p
dChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIEdfVFlQRV9Q
T0lOVEVSLAogICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOwogCisgICAgIC8qKgorICAgICAq
IFdlYktpdFdlYlZpZXc6OmRvd25sb2FkLXJlcXVlc3RlZDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGRvd25sb2Fk
OiB0aGUgbWVzc2FnZSB0ZXh0CisgICAgICogQHJldHVybjogVFJVRSBpZiB0aGUgZG93bmxvYWQg
d2FzIGhhbmRsZWQsIG90aGVyd2lzZSBpdCdsbCBiZSBjYW5jZWxsZWQuCisgICAgICoKKyAgICAg
KiBBIG5ldyBEb3dubG9hZCBpcyBiZWluZyByZXF1ZXN0ZWQuCisgICAgICoKKyAgICAgKiBTaW5j
ZTogMS4xLjEKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tET1dOTE9BRF9S
RVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJkb3dubG9hZC1yZXF1ZXN0ZWQiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFs
RmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAg
IEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGRvd25sb2FkX3JlcXVlc3RlZCks
CisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAg
ICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAor
ICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNU
KTsKKwogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmxvYWQtc3RhcnRlZDoKICAgICAg
KiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCkBA
IC0xMzkzLDYgKzE0MjIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5p
dChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICB3ZWJWaWV3Q2xhc3MtPmN1
dF9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jdXRfY2xpcGJvYXJkOwogICAgIHdl
YlZpZXdDbGFzcy0+Y29weV9jbGlwYm9hcmQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jb3B5X2Ns
aXBib2FyZDsKICAgICB3ZWJWaWV3Q2xhc3MtPnBhc3RlX2NsaXBib2FyZCA9IHdlYmtpdF93ZWJf
dmlld19yZWFsX3Bhc3RlX2NsaXBib2FyZDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmRvd25sb2FkX3Jl
cXVlc3RlZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2Rvd25sb2FkX3JlcXVlc3RlZDsKIAogICAg
IEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3Mp
OwogICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2U7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggNGNjMzU2OS4uZmE4ZTVmMiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaApAQCAtMTAzLDYgKzEwMyw4IEBAIHN0cnVjdCBfV2ViS2l0V2Vi
Vmlld0NsYXNzIHsKICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAoKiBjdXRfY2xpcGJv
YXJkKSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKICAgICB2b2lk
ICAgICAgICAgICAgICAgICAgICAgICAoKiBjb3B5X2NsaXBib2FyZCkgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg
ICAoKiBwYXN0ZV9jbGlwYm9hcmQpICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92
aWV3KTsKKyAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAoKiBkb3dubG9hZF9yZXF1ZXN0
ZWQpICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXREb3dubG9h
ZCAgICAgICAqZG93bmxvYWQpOwogCiAgICAgLyoKICAgICAgKiBpbnRlcm5hbAotLSAKMS42LjIu
cmMwCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28111</attachid>
            <date>2009-02-27 18:46:51 -0800</date>
            <delta_ts>2009-03-02 11:45:42 -0800</delta_ts>
            <desc>implements download and provides a nice API</desc>
            <filename>0001-Implement-download-and-provide-a-nice-object-wrappi.patch</filename>
            <type>text/plain</type>
            <size>46360</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSA4YzM0MjBiOWY5MDRlZGUyMzQ5ZjhmMzRjN2IzYmJlN2RjZTk5Y2NmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDA5IDE4OjE4OjI0IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRo
ZSBkb3dubG9hZAogcHJvY2VzcwoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwogR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArCiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oICB8ICAgIDIgKy0KIC4uLi9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCAgIHwgICAgOSArLQogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU0ICsrCiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCB8ICAgMTYgKy0K
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIHwgICAy
NyArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAxICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAg
ICAgIHwgICAgMyArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAgICAgICAg
ICAgICAgICB8ICA3ODUgKysrKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRvd25sb2FkLmggICAgICAgICAgICAgICAgIHwgIDExNCArKysKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCAgICAgICAgICAgICAgICB8ICAgMzAgKwogV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdl
YktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAr
CiAxNiBmaWxlcyBjaGFuZ2VkLCAxMDYxIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaAoKZGlm
ZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2ZDI0MTllLi4zZDJiMjE1IDEw
MDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC04NSw2ICs4NSwxNCBAQAog
CiAyMDA5LTAyLTEyICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgogCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgZmls
ZXMsIHdlYmtpdGRvd25sb2FkLntoLGNwcH0sIHRvIHRoZSBHVEsrIHBvcnQuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKworMjAwOS0wMi0xMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8
Z25zQGdub21lLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAg
ICAgICAqIGNvbmZpZ3VyZS5hYzogTWFrZSBzb3VwIHRoZSBkZWZhdWx0IEhUVFAgYmFja2VuZCBm
b3IgdGhlIEd0ayBwb3J0LgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmls
ZS5hbQppbmRleCBkOTI1YzgyLi5iYTU3ZWEwIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQor
KysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzA0LDYgKzMwNCw3IEBAIGVuZGlmCiB3ZWJraXRndGtf
aF9hcGkgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkZWZpbmVzLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2Fk
LmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHZlcnNpb24uaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViYmFja2ZvcndhcmRsaXN0LmggXApAQCAtMzQ4LDYgKzM0OSw3IEBAIHdlYmtpdGd0a19zb3Vy
Y2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNw
cCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKIAlX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAgXAorCVdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRvd25sb2FkLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcAog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDgwN2Y4MjcuLjQ1ZDY4YmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDItMjcgIEd1c3Rhdm8gTm9y
b25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTWFrZSB0aGUgU291cCBiYWNrZW5kIGFibGUgdG8gaGFuZGxl
IHJlcXVlc3RzIHdpdGhvdXQgYSBmcmFtZSwKKyAgICAgICAgc2luY2Ugd2UgbWF5IGhhdmUgc3Vj
aCB0aGluZ3Mgbm93IHRoYXQgd2Ugc3VwcG9ydCBkb3dubG9hZHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisKIDIwMDktMDItMjcgIE1hdHQgUGVubmlnICA8
cGVubmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmlu
ZGV4IDRlNDQxN2MuLmU1MDFlN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtNDcsNyArNDcsNyBAQAogCiAjaWYgVVNFKFNP
VVApCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci1jbGFzcyBGcmFtZTsKK2NsYXNzIFdlYkNv
cmU6OkZyYW1lOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IGM2Zjkx
NTguLjRmMGViOWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNTQyLDkgKzU0MiwxMiBAQCBib29sIFJlc291cmNl
SGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFkLT5tX21zZyk7CiAK
LSAgICAvLyBJZiB3ZSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgUGFnZSwgdGhpcyBtdXN0
IGJlIGFuIGF0dGVtcHRlZCBsb2FkIGZyb20gYW4KLSAgICAvLyBvblVubG9hZCBoYW5kbGVyLCBz
byBsZXQncyBqdXN0IGJsb2NrIGl0LgotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKKworICAgIC8q
IFRoZSBmcmFtZSBjb3VsZCBiZSBudWxsIGlzIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNz
b2NpYXRlZCB0byBhbnkKKyAgICAgKiBGcmFtZSwgaS5lLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcg
YSBmaWxlLgorICAgICAqIElmIHRoZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMg
bnVsbCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkCisgICAgICogbG9hZCBmcm9tIGFuIG9uVW5s
b2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQuICovCisgICAgaWYgKGZyYW1lICYm
ICFmcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBLVVJMIHVybCA9
IHJlcXVlc3QoKS51cmwoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYzExMDMxZC4uM2FkNzQ4YiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1
OSBAQAogMjAwOS0wMi0yNyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4K
IAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgZG93bmxvYWQsIGFuZCBwcm92aWRlIGEgbmljZSBvYmplY3Qgd3JhcHBpbmcgdGhlCisgICAg
ICAgIGRvd25sb2FkIHByb2Nlc3MuIEluaXRpYWwgd29yayBkb25lIGJ5IE1hcmNvIEJhcmlzaW9u
ZSBhbmQKKyAgICAgICAgUGllcnJlLUx1YyBCZWF1ZG9pbi4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4
dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
Ojpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERv
d25sb2FkKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dl
YmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6Oik6CisgICAgICAgIChfV2ViS2l0
RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZGlzcG9zZSk6CisgICAgICAgIChfV2Vi
S2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZmluYWxpemUpOgorICAgICAgICAo
X1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9wcm9wZXJ0eSk6Cisg
ICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfc2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9j
bGFzc19pbml0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3du
bG9hZF9pbml0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3du
bG9hZF9uZXcpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25s
b2FkX25ld19mcm9tX3JlcXVlc3QpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6
d2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkpOgorICAgICAgICAoX1dlYktpdERv
d25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbSk6CisgICAgICAgIChf
V2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfc3RhcnQpOgorICAgICAgICAo
X1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2NhbmNlbCk6CisgICAgICAg
IChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaSk6CisgICAg
ICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtf
cmVxdWVzdCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxv
YWRfc2V0X3Jlc3BvbnNlKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtp
dF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKToKKyAgICAgICAgKF9XZWJLaXREb3du
bG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKToKKyAgICAg
ICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRp
b25fdXJpKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9h
ZF9nZXRfc3RhdGUpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rv
d25sb2FkX2dldF90b3RhbF9zaXplKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6
OndlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplKToKKyAgICAgICAgKF9XZWJLaXREb3du
bG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUpOgor
ICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX3JlY2VpdmVk
X2RhdGEpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2Fk
X2ZpbmlzaGVkX2xvYWRpbmcpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Vi
a2l0X2Rvd25sb2FkX2Vycm9yKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OkRv
d25sb2FkQ2xpZW50OjpEb3dubG9hZENsaWVudCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQ
cml2YXRlOjpEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKF9X
ZWJLaXREb3dubG9hZFByaXZhdGU6OkRvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6ZGlkRmluaXNo
TG9hZGluZyk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVu
dDo6ZGlkRmFpbCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENs
aWVudDo6d2FzQmxvY2tlZCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3du
bG9hZENsaWVudDo6Y2Fubm90U2hvd1VSTCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRvd25s
b2FkLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6CisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorCisyMDA5LTAyLTI3ICBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5
YXR0LgogCiAgICAgICAgIEF1dG9tYXRpY2FsbHkgaWdub3JlIGVtcHR5IHJlcXVlc3RzIHRvIGF2
b2lkIGNyYXNoaW5nLiBUaGlzIGZpeGVzCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCmluZGV4IDQ5MDM3MGMuLjczNWVkNjggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3Bw
CisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3Bw
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUu
b3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgIkNv
bnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRHdGsuaCIKIAorI2luY2x1
ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0xNjMsNyArMTY1LDE5IEBAIHZv
aWQgQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51
SXRlbSosIGNvbnN0IENvbnRleHRNCiAKIHZvaWQgQ29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2Fk
VVJMKGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiBuZXR3b3JrX3JlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X25ldyh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhuZXR3b3JrX3JlcXVlc3QpOworICAgIGdfb2Jq
ZWN0X3VucmVmKG5ldHdvcmtfcmVxdWVzdCk7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYlZpZXcsICJkb3dubG9hZC1yZXF1ZXN0ZWQiLCBk
b3dubG9hZCwgJmhhbmRsZWQpOworCisgICAgaWYgKGhhbmRsZWQpCisgICAgICAgIHdlYmtpdF9k
b3dubG9hZF9zdGFydChkb3dubG9hZCk7CisgICAgZWxzZSB7CisgICAgICAgIHdlYmtpdF9kb3du
bG9hZF9jYW5jZWwoZG93bmxvYWQpOworICAgICAgICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7
CisgICAgfQogfQogCiB2b2lkIENvbnRleHRNZW51Q2xpZW50Ojpjb3B5SW1hZ2VUb0NsaXBib2Fy
ZChjb25zdCBIaXRUZXN0UmVzdWx0JikKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggNDA0NDA5MC4uMWVlODQ1OSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
KysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
QEAgLTMsNiArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8
Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rh
dm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAg
LTQwLDYgKzQxLDggQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNzc0LDkgKzc3NywxMyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQogICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1kb25lIiwgZmFsc2UpOwogfQogCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIGluaXRpYWxSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIHdlIGNvdWxkIHJldXNlIHRoZSBzYW1l
IGhhbmRsZSwgYnV0IG91ciByZXBsYWNpbmcgb2YgdGhlCisgICAgLy8gY2xpZW50IHNlZW1zIHRv
IG1ha2UgdGhpcyBpbXBvc3NpYmxlOyB0aGUgbWFpbiBsb2FkIGZhaWxzCisgICAgLy8gYW5kIGlz
IHN0b3BwZWQKKyAgICBoYW5kbGUtPmNhbmNlbCgpOworICAgIHN0YXJ0RG93bmxvYWQocmVxdWVz
dCk7CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkBAIC04NjIsOSArODY5LDIxIEBAIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VFcnJvCiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERv
d25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpz
dGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBnZXRWaWV3RnJvbUZyYW1l
KG1fZnJhbWUpOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBuZXR3b3JrUmVxdWVzdCA9IHdl
YmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25l
dyhuZXR3b3JrUmVxdWVzdCk7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZSh2aWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxvYWQsICZoYW5k
bGVkKTsKKworICAgIGlmIChoYW5kbGVkKQorICAgICAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQo
ZG93bmxvYWQpOworICAgIGVsc2UgeworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRv
d25sb2FkKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIH0KIH0KIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeSgpCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CmluZGV4IDhjODY4YTIuLmQzMzQwNDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdC5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yNCw2ICsyNCw3IEBA
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZlcnNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0ZGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaD4KZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmlu
ZXMuaAppbmRleCBmOTRlNzEwLi5iMGFiNWU5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5o
CkBAIC02OCw2ICs2OCw5IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJXaW5kb3dGZWF0dXJl
c0NsYXNzIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzQ2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdD
bGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9h
ZCBXZWJLaXREb3dubG9hZDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdl
YktpdERvd25sb2FkQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0ZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5
MDhhODgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9h
ZC5jcHAKQEAgLTAsMCArMSw3ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGdu
c0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAid2Via2l0bWFy
c2hhbC5oIgorI2luY2x1ZGUgIndlYmtpdGRvd25sb2FkLmgiCisjaW5jbHVkZSAid2Via2l0cHJp
dmF0ZS5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2NsYXNzIERv
d25sb2FkQ2xpZW50IDogTm9uY29weWFibGUsIHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7
CisgICAgcHVibGljOgorICAgICAgICBEb3dubG9hZENsaWVudChXZWJLaXREb3dubG9hZCopOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgV2ViS2l0RG93bmxvYWQqIG1fZG93bmxvYWQ7Cit9OworCisj
ZGVmaW5lIFdFQktJVF9ET1dOTE9BRF9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9h
ZFByaXZhdGUpKQorCitzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CisgICAgZ2NoYXIq
IGRlc3RpbmF0aW9uX3VyaTsKKyAgICBnY2hhciogc3VnZ2VzdGVkX2ZpbGVuYW1lOworICAgIGd1
aW50IGN1cnJlbnRfc2l6ZTsKKyAgICBHVGltZXIqIHRpbWVyOworICAgIFdlYktpdERvd25sb2Fk
U3RhdGUgc3RhdGU7CisgICAgR0ZpbGVPdXRwdXRTdHJlYW0qIG91dHB1dF9zdHJlYW07CisgICAg
RG93bmxvYWRDbGllbnQqIGRvd25sb2FkX2NsaWVudDsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVz
dCogbmV0d29ya19yZXF1ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UqIG5ldHdv
cmtfcmVzcG9uc2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiByZXNvdXJj
ZV9oYW5kbGU7Cit9OworCitlbnVtIHsKKyAgICAvKiBub3JtYWwgc2lnbmFscyAqLworICAgIEVS
Uk9SLAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X2Rvd25sb2Fk
X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisK
KyAgICBQUk9QX05FVFdPUktfUkVRVUVTVCwKKyAgICBQUk9QX0RFU1RJTkFUSU9OX1VSSSwKKyAg
ICBQUk9QX1NVR0dFU1RFRF9GSUxFTkFNRSwKKyAgICBQUk9QX1BST0dSRVNTLAorICAgIFBST1Bf
Q1VSUkVOVF9TSVpFLAorICAgIFBST1BfVE9UQUxfU0laRSwKK307CisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0RG93bmxvYWQsIHdlYmtpdF9kb3dubG9hZCwgR19UWVBFX09CSkVDVCk7CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb3dubG9hZF9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKyAgICBX
ZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIGlmIChw
cml2LT5vdXRwdXRfc3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm91dHB1
dF9zdHJlYW0pOworICAgICAgICBwcml2LT5vdXRwdXRfc3RyZWFtID0gTlVMTDsKKyAgICB9CisK
KyAgICBpZiAocHJpdi0+bmV0d29ya19yZXF1ZXN0KSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVm
KHByaXYtPm5ldHdvcmtfcmVxdWVzdCk7CisgICAgICAgIHByaXYtPm5ldHdvcmtfcmVxdWVzdCA9
IE5VTEw7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rvd25sb2FkX3BhcmVu
dF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25s
b2FkX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXREb3dubG9hZCogZG93
bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKyAgICBXZWJLaXREb3dubG9hZFByaXZh
dGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIC8qIFdlIGRvbid0IGNhbGwgd2Via2l0
X2Rvd25sb2FkX2NhbmNlbCgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgICAgICog
c2lnbmFscyB3aGVuIGZpbmFsaXppbmcgYW4gb2JqZWN0LiAqLworICAgIGlmIChwcml2LT5yZXNv
dXJjZV9oYW5kbGUpIHsKKyAgICAgICAgaWYgKHByaXYtPnN0YXRlID09IFdFQktJVF9ET1dOTE9B
RF9TVEFURV9TVEFSVEVEKSB7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPnNl
dENsaWVudCgwKTsKKyAgICAgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS0+Y2FuY2VsKCk7
CisgICAgICAgIH0KKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLnJlbGVhc2UoKTsKKyAg
ICB9CisKKyAgICBkZWxldGUgcHJpdi0+ZG93bmxvYWRfY2xpZW50OworICAgIGRlbGV0ZSBwcml2
LT5uZXR3b3JrX3Jlc3BvbnNlOworCisgICAgZ190aW1lcl9kZXN0cm95KHByaXYtPnRpbWVyKTsK
KworICAgIGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91cmkpOworICAgIGdfZnJlZShwcml2LT5z
dWdnZXN0ZWRfZmlsZW5hbWUpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rvd25sb2Fk
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb3dubG9hZF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKworICAgIHN3aXRjaChwcm9wX2lk
KSB7CisgICAgY2FzZSBQUk9QX05FVFdPUktfUkVRVUVTVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChkb3dubG9h
ZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVTVElOQVRJT05fVVJJOgorICAg
ICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGlu
YXRpb25fdXJpKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVUdH
RVNURURfRklMRU5BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0
X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1BST0dSRVNTOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUo
dmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoZG93bmxvYWQpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWludDY0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVE9UQUxfU0laRToKKyAgICAgICAgZ192
YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUoZG93
bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMgKnBz
cGVjKQoreworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChv
YmplY3QpOworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2
OworCisgICAgc3dpdGNoKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfTkVUV09SS19SRVFVRVNU
OgorICAgICAgICBwcml2LT5uZXR3b3JrX3JlcXVlc3QgPSAoV2ViS2l0TmV0d29ya1JlcXVlc3Qq
KWdfdmFsdWVfZHVwX29iamVjdCh2YWx1ZSk7CisgICAgICAgIC8qIFRoaXMgaXMgc2FmZSBhcyBu
ZXR3b3JrLXJlcXVlc3QgaXMgYSBjb25zdHJ1Y3Qgb25seSBwcm9wZXJ0eSBhbmQgc3VnZ2VzdGVk
X2ZpbGVuYW1lCisgICAgICAgICAqIGlzIGluaXRpYWxseSBudWxsLiAqLworICAgICAgICBwcml2
LT5zdWdnZXN0ZWRfZmlsZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lKHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfZ2V0X3VyaShwcml2LT5uZXR3b3JrX3JlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RFU1RJTkFUSU9OX1VSSToKKyAgICAgICAgd2Via2l0X2Rvd25sb2Fk
X3NldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfY2xhc3NfaW5pdChXZWJLaXREb3dubG9hZENsYXNz
KiBkb3dubG9hZENsYXNzKQoreworICAgIC8qCisgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZp
cnR1YWwgbWV0aG9kcworICAgICAqLworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhkb3dubG9hZENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9
IHdlYmtpdF9kb3dubG9hZF9kaXNwb3NlOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9kb3dubG9hZF9maW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2Rvd25sb2FkX2dldF9wcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2Rvd25sb2FkX3NldF9wcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdERvd25sb2FkOjplcnJvcjoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGN1cnJlbnRfYnl0ZXM6IHRoZSBjdXJy
ZW50IGNvdW50IG9mIGJ5dGVzIGRvd25sb2FkZWQKKyAgICAgKiBAdG90YWxfYnl0ZXM6IHRoZSB0
b3RhbCBieXRlcyBjb3VudCBpbiB0aGUgZG93bmxvYWRlZCBmaWxlLCBha2EgZmlsZSBzaXplLgor
ICAgICAqCisgICAgICogSW5kaWNhdGVzIGFuIGVycm9yIGluIHRoZSBkb3dubG9hZC4KKyAgICAg
KgorICAgICAqIFNpbmNlOiAxLjEuMQorICAgICAqLworICAgIHdlYmtpdF9kb3dubG9hZF9zaWdu
YWxzW0VSUk9SXSA9IGdfc2lnbmFsX25ldygiZXJyb3IiLAorICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1MoZG93bmxvYWRDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJ
R05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVM
TCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX0lOVF9JTlRfU1RSSU5HLAor
ICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCisgICAgICAgICAgICBHX1RZUEVfSU5ULAor
ICAgICAgICAgICAgR19UWVBFX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisg
ICAgLyoKKyAgICAgKiBwcm9wZXJ0aWVzCisgICAgICovCisKKyAgICAvKioKKyAgICAqIFdlYktp
dERvd25sb2FkOm5ldHdvcmstcmVxdWVzdAorICAgICoKKyAgICAqIFRoZSAjV2ViS2l0TmV0d29y
a1JlcXVlc3QgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3dubG9hZC4KKyAgICAqCisg
ICAgKiBTaW5jZTogMS4xLjEKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX05FVFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibmV0d29yay1yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJOZXR3b3JrIFJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRoZSBuZXR3b3JrIHJlcXVlc3QgZm9yIHRoZSBVUkkgdGhhdCBzaG91bGQgYmUgZG93bmxvYWRl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ORVRX
T1JLX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFt
RmxhZ3MpKFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkp
OworCisgICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpkZXN0aW5hdGlvbi11cmkKKyAgICAq
CisgICAgKiBUaGUgVVJJIG9mIHRoZSBzYXZlIGxvY2F0aW9uIGZvciB0aGlzIGRvd25sb2FkLgor
ICAgICoKKyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfREVTVElOQVRJT05fVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXN0aW5hdGlvbi11cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkRlc3RpbmF0aW9uIFVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiVGhlIGRlc3RpbmF0aW9uIFVSSSB3aGVyZSB0byBzYXZlIHRoZSBmaWxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisg
ICAgKiBXZWJLaXREb3dubG9hZDpzdWdnZXN0ZWQtZmlsZW5hbWUKKyAgICAqCisgICAgKiBUaGUg
ZmlsZSBuYW1lIHN1Z2dlc3RlZCBhcyBkZWZhdWx0IHdoZW4gc2F2aW5nCisgICAgKgorICAgICog
U2luY2U6IDEuMS4xCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9T
VUdHRVNURURfRklMRU5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InN1Z2dlc3RlZC1maWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiU3VnZ2VzdGVkIEZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJUaGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmciLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgLyoqCisgICAq
IFdlYktpdERvd25sb2FkOnByb2dyZXNzOgorICAgKgorICAgKiBEZXRlcm1pbmVzIHRoZSBjdXJy
ZW50IHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZC4KKyAgICoKKyAgICogU2luY2U6IDEuMS4xCisg
ICAqLworICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJP
UF9QUk9HUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2RvdWJsZSgicHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJQcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRldGVybWluZXMgdGhlIGN1cnJlbnQg
cHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsIDEuMCwgMS4wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDpjdXJyZW50LXNpemUKKyAg
ICAqCisgICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRlZAorICAg
ICoKKyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfQ1VSUkVOVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJjdXJyZW50LXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkN1cnJlbnQgU2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhl
IGxlbmd0aCBvZiB0aGUgZGF0YSBhbHJlYWR5IGRvd25sb2FkZWQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgor
ICAgICogV2ViS2l0RG93bmxvYWQ6dG90YWwtc2l6ZQorICAgICoKKyAgICAqIFRoZSB0b3RhbCBz
aXplIG9mIHRoZSBmaWxlCisgICAgKgorICAgICogU2luY2U6IDEuMS4xCisgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRvdGFsLXNpemUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlRvdGFsIFNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoZG93bmxvYWRDbGFzcywgc2l6ZW9mKFdlYktpdERvd25sb2Fk
UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfaW5pdChXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPV05MT0FEX0dFVF9QUklWQVRFKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+cHJp
diA9IHByaXY7CisKKyAgICBwcml2LT5kb3dubG9hZF9jbGllbnQgPSBuZXcgRG93bmxvYWRDbGll
bnQoZG93bmxvYWQpOworICAgIHByaXYtPmN1cnJlbnRfc2l6ZSA9IDA7CisgICAgcHJpdi0+c3Rh
dGUgPSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRDsKK30KKworLyoqCisgKiB3ZWJraXRf
ZG93bmxvYWRfbmV3OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdE5ldHdvcmtSZXF1ZXN0CisgKgor
ICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0RG93bmxvYWQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4KKyAq
ICNXZWJLaXROZXR3b3JrUmVxdWVzdCBvYmplY3QuCisgKgorICogUmV0dXJuczogdGhlIG5ldyAj
V2ViS2l0RG93bmxvYWQKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2ViS2l0RG93bmxvYWQq
IHdlYmtpdF9kb3dubG9hZF9uZXcoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAgICByZXR1cm4gV0VCS0lU
X0RPV05MT0FEKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET1dOTE9BRCwgIm5ldHdvcmstcmVx
dWVzdCIsIHJlcXVlc3QsIE5VTEwpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb3du
bG9hZF9vcGVuX3N0cmVhbV9mb3JfdXJpKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3Qg
Z2NoYXIqIHVyaSwgZ2Jvb2xlYW4gYXBwZW5kPUZBTFNFKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHVyaSwgRkFMU0UpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0g
ZG93bmxvYWQtPnByaXY7CisgICAgR0ZpbGUqIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl91cmkodXJp
KTsKKyAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgIGlmIChhcHBlbmQpCisgICAgICAg
IHByaXYtPm91dHB1dF9zdHJlYW0gPSBnX2ZpbGVfYXBwZW5kX3RvKGZpbGUsIEdfRklMRV9DUkVB
VEVfTk9ORSwgTlVMTCwgJmVycm9yKTsKKyAgICBlbHNlCisgICAgICAgIHByaXYtPm91dHB1dF9z
dHJlYW0gPSBnX2ZpbGVfcmVwbGFjZShmaWxlLCBOVUxMLCBUUlVFLCBHX0ZJTEVfQ1JFQVRFX05P
TkUsIE5VTEwsICZlcnJvcik7CisKKyAgICBnX29iamVjdF91bnJlZihmaWxlKTsKKworICAgIGlm
KGVycm9yKSB7CisgICAgICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RF
U1RJTkFUSU9OLCBlcnJvci0+bWVzc2FnZSwgJmhhbmRsZWQpOworICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRS
VUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9
IGRvd25sb2FkLT5wcml2OworICAgIGlmIChwcml2LT5vdXRwdXRfc3RyZWFtKSB7CisgICAgICAg
IGdfb2JqZWN0X3VucmVmKHByaXYtPm91dHB1dF9zdHJlYW0pOworICAgICAgICBwcml2LT5vdXRw
dXRfc3RyZWFtID0gTlVMTDsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX3N0
YXJ0OgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICogSW5pdGlhdGVz
IHRoZSBkb3dubG9hZC4gTm90aWNlIHRoYXQgeW91IG11c3QgaGF2ZSBzZXQgdGhlCisgKiBkZXN0
aW5hdGlvbi11cmkgcHJvcGVydHkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuCisgKgorICog
U2luY2U6IDEuMS4xCisgKi8KK3ZvaWQgd2Via2l0X2Rvd25sb2FkX3N0YXJ0KFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9B
RChkb3dubG9hZCkpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxv
YWQtPnByaXY7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT5kZXN0aW5hdGlvbl91cmkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJpdi0+c3RhdGUgPT0gV0VCS0lUX0RPV05MT0FEX1NUQVRF
X0NSRUFURUQpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJpdi0+dGltZXIgPT0gTlVMTCk7CisK
KyAgICBpZiAocHJpdi0+cmVzb3VyY2VfaGFuZGxlKQorICAgICAgICBwcml2LT5yZXNvdXJjZV9o
YW5kbGUtPnNldENsaWVudChwcml2LT5kb3dubG9hZF9jbGllbnQpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBGSVhNRSB1c2Uga2l0KHByaXYtPm5ldHdvcmtfcmVxdWVzdCkgd2hlbiBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCB3aWxsIGJlIGZpbmlzaGVkLgorICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCh3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocHJpdi0+bmV0d29ya19yZXF1
ZXN0KSk7CisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpj
cmVhdGUocmVxdWVzdCwgcHJpdi0+ZG93bmxvYWRfY2xpZW50LCAwLCBmYWxzZSwgZmFsc2UsIGZh
bHNlKTsKKyAgICB9CisKKyAgICBwcml2LT50aW1lciA9IGdfdGltZXJfbmV3ICgpOworICAgIHdl
YmtpdF9kb3dubG9hZF9vcGVuX3N0cmVhbV9mb3JfdXJpKGRvd25sb2FkLCBwcml2LT5kZXN0aW5h
dGlvbl91cmkpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9jYW5jZWw6CisgKiBAZG93
bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBDYW5jZWxzIHRoZSBkb3dubG9hZC4g
Q2FsbGluZyB0aGlzIHdpbGwgbm90IGZyZWUgdGhlCisgKiAjV2ViS2l0RG93bmxvYWQgb2JqZWN0
LCBzbyB5b3Ugc3RpbGwgbmVlZCB0byBjYWxsCisgKiBnX29iamVjdF91bnJlZigpIG9uIGl0LCBp
ZiB5b3UgYXJlIHRoZSBvd25lciBvZiBhIHJlZmVyZW5jZS4gTm90aWNlCisgKiB0aGF0IGNhbmNl
bGxpbmcgdGhlIGRvd25sb2FkIHByb3Zva2VzIHRoZSBlbWlzc2lvbiBvZiB0aGUKKyAqIFdlYktp
dERvd25sb2FkOjplcnJvciBzaWduYWwsIHJlcG9ydGluZyB0aGF0IHRoZSBkb3dubG9hZCB3YXMK
KyAqIGNhbmNlbGxlZC4KKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwordm9pZCB3ZWJraXRfZG93
bmxvYWRfY2FuY2VsKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCkpOworCisgICAgV2ViS2l0RG93bmxv
YWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBnX3RpbWVyX3N0b3AocHJp
di0+dGltZXIpOworCisgICAgaWYgKHByaXYtPnJlc291cmNlX2hhbmRsZSkKKyAgICAgICAgcHJp
di0+cmVzb3VyY2VfaGFuZGxlLT5jYW5jZWwoKTsKKworICAgIHByaXYtPnN0YXRlID0gV0VCS0lU
X0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRDsKKworICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBXRUJLSVRfRE9XTkxP
QURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIsICJVc2VyIGNhbmNlbGxlZCB0aGUgZG93bmxvYWQi
LCAmaGFuZGxlZCk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF91cmk6CisgKiBA
ZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBDb252ZW5pZW5jZSBtZXRob2Qg
dG8gcmV0cmlldmUgdGhlIFVSSSBmcm9tIHRoZQorICogI1dlYktpdE5ldHdvcmtSZXF1ZXN0IHdo
aWNoIGlzIGJlaW5nIGRvd25sb2FkZWQuCisgKgorICogUmV0dXJuczogdGhlIHVyaQorICoKKyAq
IFNpbmNlOiAxLjEuMQorICovCitjb25zdCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF91cmko
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0RG93bmxvYWRQ
cml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfZ2V0X3VyaShwcml2LT5uZXR3b3JrX3JlcXVlc3QpOworfQorCisvKioKKyAqIHdl
YmtpdF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0OgorICogQGRvd25sb2FkOiB0aGUgI1dl
YktpdERvd25sb2FkCisgKgorICogUmV0cmlldmVzIHRoZSAjV2ViS2l0TmV0d29ya1JlcXVlc3Qg
b2JqZWN0IHRoYXQgYmFja3MgdGhlIGRvd25sb2FkCisgKiBwcm9jZXNzLgorICoKKyAqIFJldHVy
bnM6IHRoZSAjV2ViS2l0TmV0d29ya1JlcXVlc3QgaW5zdGFuY2UKKyAqCisgKiBTaW5jZTogMS4x
LjEKKyAqLworV2ViS2l0TmV0d29ya1JlcXVlc3QqIHdlYmtpdF9kb3dubG9hZF9nZXRfbmV0d29y
a19yZXF1ZXN0KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktp
dERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIHJldHVybiBwcml2
LT5uZXR3b3JrX3JlcXVlc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9zZXRf
cmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICAvLyBGSVhNRSBVc2UgV2ViS2l0TmV0d29ya1Jlc3BvbnNlIHdo
ZW4gaXQncyBtZXJnZWQKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9h
ZC0+cHJpdjsKKyAgICBwcml2LT5uZXR3b3JrX3Jlc3BvbnNlID0gbmV3IFJlc291cmNlUmVzcG9u
c2UocmVzcG9uc2UpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVk
X2ZpbGVuYW1lOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICogUmV0
cmlldmVzIHRoZSBmaWxlbmFtZSB0aGF0IHdhcyBzdWdnZXN0ZWQgYnkgdGhlIHNlcnZlciwgb3Ig
dGhlIG9uZQorICogZGVyaXZlZCBieSBXZWJLaXQgZnJvbSB0aGUgVVJJLgorICoKKyAqIFJldHVy
bnM6IHRoZSBzdWdnZXN0ZWQgZmlsZW5hbWUKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworY29u
c3QgZ2NoYXIqIHdlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
RE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSog
cHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIHJldHVybiBwcml2LT5zdWdnZXN0ZWRfZmlsZW5h
bWU7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmk6Cisg
KiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBPYnRhaW5zIHRoZSBVUkkg
dG8gd2hpY2ggdGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uIFRoaXMKKyAqIG11
c3QgaGF2ZSBiZWVuIHNldCBieSB0aGUgYXBwbGljYXRpb24gYmVmb3JlIGNhbGxpbmcKKyAqIHdl
YmtpdF9kb3dubG9hZF9zdGFydCgpLCBhbmQgbWF5IGJlICVOVUxMLgorICoKKyAqIFJldHVybnM6
IHRoZSBkZXN0aW5hdGlvbiBVUkkgb3IgJU5VTEwKKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLwor
Y29uc3QgZ2NoYXIqIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
RE9XTkxPQUQoZG93bmxvYWQpLCBOVUxMKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSog
cHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIHJldHVybiBwcml2LT5kZXN0aW5hdGlvbl91cmk7
Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmk6CisgKiBA
ZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqIEBkZXN0aW5hdGlvbl91cmk6IHRoZSBk
ZXN0aW5hdGlvbiBVUkkKKyAqCisgKiBEZWZpbmVzIHRoZSBVUkkgdGhhdCBzaG91bGQgYmUgdXNl
ZCB0byBzYXZlIHRoZSBkb3dubG9hZGVkIGZpbGUgdG8uCisgKgorICogU2luY2U6IDEuMS4xCisg
Ki8KK3ZvaWQgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkoV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZGVzdGluYXRpb25fdXJpKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChkZXN0aW5hdGlvbl91cmkpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBw
cml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgaWYgKHByaXYtPmRlc3RpbmF0aW9uX3VyaSAmJiAh
c3RyY21wKHByaXYtPmRlc3RpbmF0aW9uX3VyaSwgZGVzdGluYXRpb25fdXJpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRklYTUUgY2FuIHdlIGhhdmUgYSBiZXR0ZXIgY2hlY2s/CisgICAg
aWYgKHByaXYtPnN0YXRlICE9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEICYmIHByaXYt
PnN0YXRlICE9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQpIHsKKyAgICAgICAgQVNT
RVJUKHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7CisKKyAgICAgICAgZ2Jvb2xlYW4gZG93bmxvYWRp
bmcgPSBwcml2LT5vdXRwdXRfc3RyZWFtICE9IE5VTEw7CisgICAgICAgIGlmIChkb3dubG9hZGlu
ZykKKyAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOwor
CisgICAgICAgIEdGaWxlKiBzcmMgPSBnX2ZpbGVfbmV3X2Zvcl91cmkocHJpdi0+ZGVzdGluYXRp
b25fdXJpKTsKKyAgICAgICAgR0ZpbGUqIGRlc3QgPSBnX2ZpbGVfbmV3X2Zvcl91cmkoZGVzdGlu
YXRpb25fdXJpKTsKKyAgICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19m
aWxlX21vdmUoc3JjLCBkZXN0LCBHX0ZJTEVfQ09QWV9CQUNLVVAsIE5VTEwsIE5VTEwsIE5VTEws
ICZlcnJvcik7CisKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoc3JjKTsKKyAgICAgICAgZ19vYmpl
Y3RfdW5yZWYoZGVzdCk7CisKKyAgICAgICAgZ19mcmVlKHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7
CisgICAgICAgIHByaXYtPmRlc3RpbmF0aW9uX3VyaSA9IGdfc3RyZHVwKGRlc3RpbmF0aW9uX3Vy
aSk7CisKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBnYm9vbGVhbiBoYW5kbGVk
OworICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAw
LCBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIGVycm9yLT5tZXNzYWdlLCAmaGFu
ZGxlZCk7CisgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRvd25sb2FkaW5nKSB7CisgICAgICAgICAg
ICBpZiAoIXdlYmtpdF9kb3dubG9hZF9vcGVuX3N0cmVhbV9mb3JfdXJpKGRvd25sb2FkLCBkZXN0
aW5hdGlvbl91cmksIFRSVUUpKSB7CisgICAgICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX2Nh
bmNlbChkb3dubG9hZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGdfZnJlZShwcml2LT5kZXN0aW5hdGlvbl91
cmkpOworICAgICAgcHJpdi0+ZGVzdGluYXRpb25fdXJpID0gZ19zdHJkdXAoZGVzdGluYXRpb25f
dXJpKTsKKyAgICB9CisKKyAgICAvKiBvbmx5IG5vdGlmeSBjaGFuZ2UgaWYgZXZlcnl0aGluZyB3
ZW50IGZpbmUgKi8KKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAiZGVz
dGluYXRpb24tdXJpIik7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9zdGF0ZToK
KyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIE9idGFpbnMgdGhlIGN1
cnJlbnQgc3RhdGUgb2YgdGhlIGRvd25sb2FkLCBhcyBhCisgKiAjV2ViS2l0RG93bmxvYWRTdGF0
ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY3VycmVudCAjV2ViS2l0RG93bmxvYWRTdGF0ZQorICoK
KyAqIFNpbmNlOiAxLjEuMQorICovCitXZWJLaXREb3dubG9hZFN0YXRlIHdlYmtpdF9kb3dubG9h
ZF9nZXRfc3RhdGUgKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCBXRUJLSVRfRE9XTkxPQURf
U1RBVEVfRVJST1IpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxv
YWQtPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnN0YXRlOworfQorCisvKioKKyAqIHdlYmtpdF9k
b3dubG9hZF9nZXRfdG90YWxfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9h
ZAorICoKKyAqIFJldHVybnMgdGhlIGV4cGVjdGVkIHRvdGFsIHNpemUgb2YgdGhlIGRvd25sb2Fk
LiBUaGlzIGlzIGV4cGVjdGVkCisgKiBiZWNhdXNlIHRoZSBzZXJ2ZXIgbWF5IHByb3ZpZGUgaW5j
b3JyZWN0IG9yIG1pc3NpbmcKKyAqIENvbnRlbnQtTGVuZ3RoLiBOb3RpY2UgdGhhdCB0aGlzIG1h
eSBncm93IG92ZXIgdGltZSwgYXMgaXQgd2lsbCBiZQorICogYWx3YXlzIHRoZSBzYW1lIGFzIGN1
cnJlbnRfc2l6ZSBpbiB0aGUgY2FzZXMgd2hlcmUgY3VycmVudCBzaXplCisgKiBzdXJwYXNzZXMg
aXQuCisgKgorICogUmV0dXJuczogdGhlIGV4cGVjdGVkIHRvdGFsIHNpemUgb2YgdGhlIGRvd25s
b2FkZWQgZmlsZQorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCitndWludDY0IHdlYmtpdF9kb3du
bG9hZF9nZXRfdG90YWxfc2l6ZSAoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDApOworCisg
ICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgaWYg
KCFwcml2LT5uZXR3b3JrX3Jlc3BvbnNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBNQVgocHJpdi0+Y3VycmVudF9zaXplLCBwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5leHBlY3Rl
ZENvbnRlbnRMZW5ndGgoKSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9jdXJy
ZW50X3NpemU6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBDdXJy
ZW50IGFscmVhZHkgZG93bmxvYWRlZCBzaXplLgorICoKKyAqIFJldHVybnM6IHRoZSBhbHJlYWR5
IGRvd25sb2FkZWQgc2l6ZQorICoKKyAqIFNpbmNlOiAxLjEuMQorICovCitndWludDY0IHdlYmtp
dF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplIChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwg
MCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsK
KyAgICByZXR1cm4gcHJpdi0+Y3VycmVudF9zaXplOworfQorCisvKioKKyAqIHdlYmtpdF9kb3du
bG9hZF9nZXRfcHJvZ3Jlc3M6CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgor
ICogRGV0ZXJtaW5lcyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgZG93bmxvYWQuCisgKgor
ICogUmV0dXJuczogYSAjZ2RvdWJsZSByYW5naW5nIGZyb20gMC4wIHRvIDEuMC4KKyAqCisgKiBT
aW5jZTogMS4xLjEKKyAqLworZ2RvdWJsZSB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKFdl
YktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAxLjApOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2
YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgZ2RvdWJsZSB0b3RhbF9zaXplID0gKGdk
b3VibGUpcHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisK
KyAgICBpZiAodG90YWxfc2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gMS4wOworCisgICAgcmV0
dXJuICgoZ2RvdWJsZSlwcml2LT5jdXJyZW50X3NpemUpIC8gdG90YWxfc2l6ZTsKK30KKworLyoq
CisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2VsYXBzZWRfdGltZToKKyAqIEBkb3dubG9hZDogYSAj
V2ViS2l0RG93bmxvYWQKKyAqCisgKiBFbGFwc2VkIHRpbWUgZm9yIHRoZSBkb3dubG9hZCBpbiBz
ZWNvbmRzLCBpbmNsdWRpbmcgYW55IGZyYWN0aW9uYWwKKyAqIHBhcnQuIElmIHRoZSBkb3dubG9h
ZCBpcyBmaW5pc2hlZCwgaGFkIGFuIGVycm9yIG9yIHdhcyBjYW5jZWxsZWQKKyAqIHRoaXMgaXMg
dGhlIHRpbWUgYmV0d2VlbiBpdHMgc3RhcnQgYW5kIHRoZSBldmVudC4KKyAqCisgKiBSZXR1cm5z
OiBzZWNvbmRzIHNpbmNlIHRoZSBkb3dubG9hZCB3YXMgc3RhcnRlZCwgYXMgYSAjZ2RvdWJsZQor
ICoKKyAqIFNpbmNlOiAxLjEuMQorICovCitnZG91YmxlIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxh
cHNlZF90aW1lKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwLjApOworCisgICAgV2ViS2l0
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIGdfdGlt
ZXJfZWxhcHNlZChwcml2LT50aW1lciwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b3dubG9hZF9yZWNlaXZlZF9kYXRhKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2No
YXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2
ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBpZiAocHJpdi0+Y3VycmVudF9zaXplID09IDApIHsK
KyAgICAgICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfU1RBUlRFRDsKKyAg
ICB9CisKKyAgICBBU1NFUlQocHJpdi0+b3V0cHV0X3N0cmVhbSk7CisKKyAgICBnc2l6ZSBieXRl
c193cml0dGVuOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisgICAgZ19vdXRwdXRfc3Ry
ZWFtX3dyaXRlX2FsbChHX09VVFBVVF9TVFJFQU0ocHJpdi0+b3V0cHV0X3N0cmVhbSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBsZW5ndGgsICZieXRlc193cml0dGVuLCBO
VUxMLCAmZXJyb3IpOworCisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGdib29sZWFuIGhhbmRs
ZWQ7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkb3dubG9hZCwgImVycm9yIiwgMCwg
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OLCBlcnJvci0+bWVzc2FnZSwgJmhhbmRs
ZWQpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgcHJpdi0+Y3VycmVudF9zaXplICs9IGxlbmd0aDsKKyAgICBnX29iamVjdF9ub3Rp
ZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAiY3VycmVudC1zaXplIik7CisKKyAgICBBU1NFUlQocHJp
di0+bmV0d29ya19yZXNwb25zZSk7CisgICAgaWYgKHByaXYtPmN1cnJlbnRfc2l6ZSA+IHByaXYt
Pm5ldHdvcmtfcmVzcG9uc2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpKQorICAgICAgICBnX29i
amVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAidG90YWwtc2l6ZSIpOworCisgICAgLyog
RklYTUUgdGhyb3R0bGUgdGhlIG51bWJlciBvZiB1cGRhdGVzPworICAgICAqIHNob3VsZCB3ZSBy
ZW1vdmUgdGhlIHByZXZpb3VzIGdfb2JqZWN0X25vdGlmeSgpcyBpZiB3ZSBhcmUgZ29pbmcgdG8g
dGhyb3R0bGUKKyAgICAgKiB0aGUgcHJvZ3Jlc3MgdXBkYXRlcz8gKi8KKyAgICBnX29iamVjdF9u
b3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAicHJvZ3Jlc3MiKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAg
V2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBnX3Rp
bWVyX3N0b3AocHJpdi0+dGltZXIpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FE
X1NUQVRFX0ZJTklTSEVEOworCisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2Fk
KSwgInByb2dyZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9lcnJvcihX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQorewor
ICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBnX3RpbWVyX3N0
b3AocHJpdi0+dGltZXIpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FEX1NUQVRF
X0VSUk9SOworCisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLLCBl
cnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksICZoYW5kbGVkKTsKK30K
KworRG93bmxvYWRDbGllbnQ6OkRvd25sb2FkQ2xpZW50KFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCit7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGll
bnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfcmVzcG9uc2UobV9k
b3dubG9hZCwgcmVzcG9uc2UpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZl
RGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBs
ZW5ndGhSZWNlaXZlZCkKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShtX2Rv
d25sb2FkLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRGaW5p
c2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfZmluaXNo
ZWRfbG9hZGluZyhtX2Rvd25sb2FkKTsKK30KKwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkRmFp
bChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIHdl
YmtpdF9kb3dubG9hZF9lcnJvcihtX2Rvd25sb2FkLCBlcnJvcik7Cit9CisKK3ZvaWQgRG93bmxv
YWRDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIC8vIEZJWE1FIHdo
ZW4gd2UgaGF2ZSB0aGUgbmV3IGZyYW1lIGxvYWRlciBzaWduYWxzIGFuZCBlcnJvciBoYW5kbGlu
Zy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpjYW5u
b3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICAvLyBGSVhNRSB3aGVuIHdlIGhhdmUg
dGhlIG5ldyBmcmFtZSBsb2FkZXIgc2lnbmFscyBhbmQgZXJyb3IgaGFuZGxpbmcuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZG93bmxvYWQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4ZWM3OAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lU
X0RPV05MT0FEX0gKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9XTkxPQUQgICAgICAgICAgICAod2Via2l0
X2Rvd25sb2FkX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9BRChvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET1dO
TE9BRCwgV2ViS2l0RG93bmxvYWQpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9X
TkxPQUQsIFdlYktpdERvd25sb2FkQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRE9XTkxPQUQo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZ
UEVfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfSVNfRE9XTkxPQURfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQpKQor
I2RlZmluZSBXRUJLSVRfRE9XTkxPQURfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkQ2xh
c3MpKQorCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9FUlJPUiA9
IC0xLAorICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEID0gMCwKKyAgICBXRUJLSVRf
RE9XTkxPQURfU1RBVEVfU1RBUlRFRCwKKyAgICBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ0FOQ0VM
TEVELAorICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRAorfSBXZWJLaXREb3dubG9h
ZFN0YXRlOworCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5D
RUxMRURfQllfVVNFUiwKKyAgICBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sCisg
ICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUksKK30gV2ViS2l0RG93bmxvYWRFcnJvcjsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSBXZWJLaXREb3dubG9hZFBy
aXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RG93bmxvYWQgeworICAgIEdPYmplY3QgcGFyZW50X2lu
c3RhbmNlOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0
IF9XZWJLaXREb3dubG9hZENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwor
CisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Vi
a2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZv
aWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2Rvd25sb2FkX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X2Rvd25sb2FkX25ldyAgICAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0TmV0d29ya1JlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb3dubG9hZF9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdERv
d25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25s
b2FkX2NhbmNlbCAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRv
d25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9hZF9nZXRf
dXJpICAgICAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7
CisKK1dFQktJVF9BUEkgV2ViS2l0TmV0d29ya1JlcXVlc3QqCit3ZWJraXRfZG93bmxvYWRfZ2V0
X25ldHdvcmtfcmVxdWVzdCAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQp
OworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0
ZWRfZmlsZW5hbWUgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VC
S0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJp
ICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkgICAgICAgICAoV2ViS2l0
RG93bmxvYWQgICAgICAgKmRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKmRlc3RpbmF0aW9uX3VyaSk7CisK
K1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzcyAgICAgICAg
ICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBn
ZG91YmxlCit3ZWJraXRfZG93bmxvYWRfZ2V0X2VsYXBzZWRfdGltZSAgICAgICAgICAgIChXZWJL
aXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtp
dF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZSAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAg
ICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2Rvd25sb2FkX2dl
dF9jdXJyZW50X3NpemUgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2Fk
KTsKKworV0VCS0lUX0FQSSBXZWJLaXREb3dubG9hZFN0YXRlCit3ZWJraXRfZG93bmxvYWRfZ2V0
X3N0YXRlICAgICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRl
eCBmOTNlODQ5Li40ZGI4ZDIzIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRw
cml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHdlYm5hdmlnYXRpb25hY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG93bmxvYWQu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0Lmg+CkBAIC00NCw5ICs0NSwxMyBAQAogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudEd0ay5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
V2luZG93RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKIAogI2luY2x1ZGUgPGdsaWIuaD4KIAorY2xhc3MgRG93bmxv
YWRDbGllbnQ7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdFdlYlZpZXcqIGdldFZp
ZXdGcm9tRnJhbWUoV2ViS2l0V2ViRnJhbWUqKTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAppbmRleCA3ODkyM2YyLi41ZWY5NzA2IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRl
ICJ3ZWJraXRkb3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRl
ICJ3ZWJraXRlbnVtdHlwZXMuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCkBAIC0xMzQs
NiArMTM1LDcgQEAgZW51bSB7CiAgICAgQ09QWV9DTElQQk9BUkQsCiAgICAgUEFTVEVfQ0xJUEJP
QVJELAogICAgIENVVF9DTElQQk9BUkQsCisgICAgRE9XTkxPQURfUkVRVUVTVEVELAogICAgIExB
U1RfU0lHTkFMCiB9OwogCkBAIC04MTksNiArODIxLDEzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19yZWFsX3Bhc3RlX2NsaXBib2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAg
IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiUGFzdGUiKS5leGVjdXRlKCk7CiB9CiAKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9kb3dubG9hZF9yZXF1ZXN0ZWQoV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICB3ZWJr
aXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAvLyBSZXR1cm4gZmFsc2UgdG8gaW5k
aWNhdGUgaXQgd2Fzbid0IGhhbmRsZWQgdGhlcmVmb3JlIHRoZSBkb3dubG9hZCBpcyBkZWxldGVk
CisgICAgcmV0dXJuIEZBTFNFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlz
cG9zZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyhvYmplY3QpOwpAQCAtMTEwNCw2ICsxMTEzLDI2IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0Ns
YXNzKQogICAgICAgICAgICAgR19UWVBFX1BPSU5URVIsCiAgICAgICAgICAgICBHX1RZUEVfUE9J
TlRFUik7CiAKKyAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6ZG93bmxvYWQtcmVxdWVz
dGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlz
IGVtaXR0ZWQKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSBtZXNzYWdlIHRleHQKKyAgICAgKiBAcmV0
dXJuOiBUUlVFIGlmIHRoZSBkb3dubG9hZCB3YXMgaGFuZGxlZCwgb3RoZXJ3aXNlIGl0J2xsIGJl
IGNhbmNlbGxlZC4KKyAgICAgKgorICAgICAqIEEgbmV3IERvd25sb2FkIGlzIGJlaW5nIHJlcXVl
c3RlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjEuMQorICAgICAqLworICAgIHdlYmtpdF93
ZWJfdmlld19zaWduYWxzW0RPV05MT0FEX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoImRvd25s
b2FkLXJlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdD
bGFzcywgZG93bmxvYWRfcmVxdWVzdGVkKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxh
dG9yX3RydWVfaGFuZGxlZCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRf
bWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwK
KyAgICAgICAgICAgIEdfVFlQRV9PQkpFQ1QpOworCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2Vi
Vmlldzo6bG9hZC1zdGFydGVkOgogICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGlj
aCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTE0MTMsNiArMTQ0Miw3IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0Ns
YXNzKQogICAgIHdlYlZpZXdDbGFzcy0+Y3V0X2NsaXBib2FyZCA9IHdlYmtpdF93ZWJfdmlld19y
ZWFsX2N1dF9jbGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5jb3B5X2NsaXBib2FyZCA9IHdl
YmtpdF93ZWJfdmlld19yZWFsX2NvcHlfY2xpcGJvYXJkOwogICAgIHdlYlZpZXdDbGFzcy0+cGFz
dGVfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfcGFzdGVfY2xpcGJvYXJkOworICAg
IHdlYlZpZXdDbGFzcy0+ZG93bmxvYWRfcmVxdWVzdGVkID0gd2Via2l0X3dlYl92aWV3X3JlYWxf
ZG93bmxvYWRfcmVxdWVzdGVkOwogCiAgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3
ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCBj
ZmMwOTAwLi40OWIyODI5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC0xMDMsNiAr
MTAzLDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICgqIGN1dF9jbGlwYm9hcmQpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAqd2ViX3ZpZXcpOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICgqIGNvcHlf
Y2xpcGJvYXJkKSAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwogICAg
IHZvaWQgICAgICAgICAgICAgICAgICAgICAgICgqIHBhc3RlX2NsaXBib2FyZCkgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOworICAgIGdib29sZWFuICAgICAgICAgICAg
ICAgICAgICgqIGRvd25sb2FkX3JlcXVlc3RlZCkgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAq
d2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CiAKICAgICAvKgog
ICAgICAqIGludGVybmFsCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdG1hcnNoYWwubGlz
dCBiL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CmluZGV4IDg1OTJiNDUuLjNhYWYzMTMg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CisrKyBiL1dlYktpdC9n
dGsvd2Via2l0bWFyc2hhbC5saXN0CkBAIC0xLDMgKzEsNSBAQAorQk9PTEVBTjpJTlQsSU5ULFNU
UklORworQk9PTEVBTjpPQkpFQ1QKIEJPT0xFQU46T0JKRUNULE9CSkVDVCxPQkpFQ1QsT0JKRUNU
CiBCT09MRUFOOk9CSkVDVCxPQkpFQ1QsU1RSSU5HLE9CSkVDVAogQk9PTEVBTjpPQkpFQ1QsU1RS
SU5HCi0tIAoxLjYuMi5yYzAKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28189</attachid>
            <date>2009-03-02 11:45:42 -0800</date>
            <delta_ts>2009-03-02 11:57:44 -0800</delta_ts>
            <desc>proposed implementation</desc>
            <filename>0001-Implement-download-and-provide-a-nice-object-wrappi.patch</filename>
            <type>text/plain</type>
            <size>45001</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSA3YWE2OTI3MmM4YmJmZDI1ZTk5YWQzY2RlOGE5ZTAwM2E2MjJiYjZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDA5IDE4OjE4OjI0IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRo
ZSBkb3dubG9hZAogcHJvY2VzcwoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKwogR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oICB8ICAgIDIgKy0KIC4uLi9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCAgIHwgICAgOSArLQogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU0ICsrCiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCB8ICAgMTcgKy0K
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIHwgICAy
OSArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAxICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAg
ICAgIHwgICAgMyArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAgICAgICAg
ICAgICAgICB8ICA3ODYgKysrKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRvd25sb2FkLmggICAgICAgICAgICAgICAgIHwgIDExNCArKysKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCAgICAgICAgICAgICAgICB8ICAgMjMgKwogV2ViS2l0
L2d0ay93ZWJraXRtYXJzaGFsLmxpc3QgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIDE1
IGZpbGVzIGNoYW5nZWQsIDEwNjUgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oCgpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDJlMjk4OTAuLjM3OTc0ODQgMTAwNjQ0
Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMyBAQAogMjAwOS0w
My0wMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAorICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgbmV3IGZpbGVzIHJl
bGF0ZWQgdG8gV2ViS2l0RG93bmxvYWQgdG8gdGhlIEdUSysgcG9ydC4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorCisyMDA5LTAzLTAyICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNA
Z25vbWUub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4OyBhZGRpbmcgbWlzc2lu
ZyBmaWxlcyB0byBFWFRSQV9ESVNULCBzbyB0aGF0CiAgICAgICAgIHRoZXkgc2hvdyB1cCBpbiB0
aGUgdGFyYmFsbC4KIApAQCAtMTAzLDYgKzExMSwxNCBAQAogCiAyMDA5LTAyLTEyICBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMsIHdlYmtpdGRvd25sb2FkLnto
LGNwcH0sIHRvIHRoZSBHVEsrIHBvcnQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKwor
MjAwOS0wMi0xMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KKwogICAg
ICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICAqIGNvbmZpZ3VyZS5hYzog
TWFrZSBzb3VwIHRoZSBkZWZhdWx0IEhUVFAgYmFja2VuZCBmb3IgdGhlIEd0ayBwb3J0LgpkaWZm
IC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCBiMDUwYzRjLi5k
MGUwOTZjIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpA
QCAtMzA0LDYgKzMwNCw3IEBAIGVuZGlmCiB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgg
XAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggXAogCVdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZl
cnNpb24uaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmgg
XApAQCAtMzQ4LDYgKzM0OSw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJzZXR0aW5ncy5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNw
cCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgXAogCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcAogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlMjI4NGUuLjYyNzBhODEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsMTYgQEAKIDIwMDktMDMtMDIgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9t
ZS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TWFrZSB0aGUgU291cCBiYWNrZW5kIGFibGUgdG8gaGFuZGxlIHJlcXVlc3RzIHdpdGhvdXQgYSBm
cmFtZSwKKyAgICAgICAgc2luY2Ugd2UgbWF5IGhhdmUgc3VjaCB0aGluZ3Mgbm93IHRoYXQgd2Ug
c3VwcG9ydCBkb3dubG9hZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFy
dCk6CisKKzIwMDktMDMtMDIgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+
CisKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXg7IGFkZGluZyBtaXNzaW5nIGZpbGVzIHRv
IEVYVFJBX0RJU1QsIHNvIHRoYXQKICAgICAgICAgdGhleSBzaG93IHVwIGluIHRoZSB0YXJiYWxs
LgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaAppbmRleCA0ZTQ0MTdjLi5lNTAxZTdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogI2lm
IFVTRShTT1VQKQogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotY2xhc3MgRnJhbWU7CitjbGFz
cyBXZWJDb3JlOjpGcmFtZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRl
eCAxY2E2NTdmLi4wNmVkZjIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTU0NSw5ICs1NDUsMTIgQEAgYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVCghZC0+bV9t
c2cpOwogCi0gICAgLy8gSWYgd2UgYXJlIG5vIGxvbmdlciBhdHRhY2hlZCB0byBhIFBhZ2UsIHRo
aXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQgbG9hZCBmcm9tIGFuCi0gICAgLy8gb25VbmxvYWQgaGFu
ZGxlciwgc28gbGV0J3MganVzdCBibG9jayBpdC4KLSAgICBpZiAoIWZyYW1lLT5wYWdlKCkpCisK
KyAgICAvLyBUaGUgZnJhbWUgY291bGQgYmUgbnVsbCBpcyB0aGUgUmVzb3VyY2VIYW5kbGUgaXMg
bm90IGFzc29jaWF0ZWQgdG8gYW55CisgICAgLy8gRnJhbWUsIGkuZS4gaWYgd2UgYXJlIGRvd25s
b2FkaW5nIGEgZmlsZS4KKyAgICAvLyBJZiB0aGUgZnJhbWUgaXMgbm90IG51bGwgYnV0IHRoZSBw
YWdlIGlzIG51bGwgdGhpcyBtdXN0IGJlIGFuIGF0dGVtcHRlZAorICAgIC8vIGxvYWQgZnJvbSBh
biBvblVubG9hZCBoYW5kbGVyLCBzbyBsZXQncyBqdXN0IGJsb2NrIGl0LgorICAgIGlmIChmcmFt
ZSAmJiAhZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgS1VSTCB1
cmwgPSByZXF1ZXN0KCkudXJsKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBi
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDY1ODIzYzEuLjhkZmQxZGMgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTcgQEAKKzIwMDktMDMtMDIgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRoZQor
ICAgICAgICBkb3dubG9hZCBwcm9jZXNzLiBJbml0aWFsIHdvcmsgZG9uZSBieSBNYXJjbyBCYXJp
c2lvbmUgYW5kCisgICAgICAgIFBpZXJyZS1MdWMgQmVhdWRvaW4gZm9yIENvbGxhYm9yYS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
ZG93bmxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6Oik6
CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZGlzcG9z
ZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZmlu
YWxpemUpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2Fk
X2dldF9wcm9wZXJ0eSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRf
ZG93bmxvYWRfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6
OndlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFBy
aXZhdGU6OndlYmtpdF9kb3dubG9hZF9pbml0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFBy
aXZhdGU6OndlYmtpdF9kb3dubG9hZF9uZXcpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJp
dmF0ZTo6d2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbSk6CisgICAg
ICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfc3RhcnQpOgorICAg
ICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2NhbmNlbCk6Cisg
ICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaSk6
CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X25l
dHdvcmtfcmVxdWVzdCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRf
ZG93bmxvYWRfc2V0X3Jlc3BvbnNlKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6
OndlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKToKKyAgICAgICAgKF9XZWJL
aXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpKToK
KyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9zZXRfZGVz
dGluYXRpb25fdXJpKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9k
b3dubG9hZF9nZXRfc3RhdGUpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Vi
a2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFBy
aXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplKToKKyAgICAgICAgKF9XZWJL
aXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MpOgorICAgICAg
ICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3Rp
bWUpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX3Jl
Y2VpdmVkX2RhdGEpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rv
d25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0
ZTo6d2Via2l0X2Rvd25sb2FkX2Vycm9yKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZh
dGU6OkRvd25sb2FkQ2xpZW50OjpEb3dubG9hZENsaWVudCk6CisgICAgICAgIChfV2ViS2l0RG93
bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OkRvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlRGF0
YSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6ZGlk
RmluaXNoTG9hZGluZyk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9h
ZENsaWVudDo6ZGlkRmFpbCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3du
bG9hZENsaWVudDo6d2FzQmxvY2tlZCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRl
OjpEb3dubG9hZENsaWVudDo6Y2Fubm90U2hvd1VSTCk6CisgICAgICAgICogd2Via2l0L3dlYmtp
dGRvd25sb2FkLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAqIHdlYmtpdG1hcnNo
YWwubGlzdDoKKwogMjAwOS0wMy0wMSAgSmFuIE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCBi
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCmluZGV4
IDQ5MDM3MGMuLjQyZDQ4MTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRHdGsuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBO
b3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAs
NiArMjEsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1l
bnVDbGllbnRHdGsuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CkBAIC0xNjMsNyArMTY1LDIwIEBAIHZvaWQgQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51
SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSosIGNvbnN0IENvbnRleHRNCiAKIHZvaWQgQ29u
dGV4dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBuZXR3b3JrX3JlcXVlc3Qg
PSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhuZXR3
b3JrX3JlcXVlc3QpOworICAgIGdfb2JqZWN0X3VucmVmKG5ldHdvcmtfcmVxdWVzdCk7CisKKyAg
ICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYlZpZXcs
ICJkb3dubG9hZC1yZXF1ZXN0ZWQiLCBkb3dubG9hZCwgJmhhbmRsZWQpOworCisgICAgaWYgKCFo
YW5kbGVkKSB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOworICAg
ICAgICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOwogfQogCiB2b2lkIENvbnRleHRN
ZW51Q2xpZW50Ojpjb3B5SW1hZ2VUb0NsaXBib2FyZChjb25zdCBIaXRUZXN0UmVzdWx0JikKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
aW5kZXggNDA0NDA5MC4uZTQxNzA4MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21l
Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDYgKzQxLDggQEAKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNzc0
LDkgKzc3NywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2Fk
KGNvbnN0IFJlc291cmNlRXJyb3ImKQogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1l
LCAibG9hZC1kb25lIiwgZmFsc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3du
bG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQordm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIHdlIGNvdWxkIHJldXNlIHRo
ZSBzYW1lIGhhbmRsZSwgYnV0IG91ciByZXBsYWNpbmcgb2YgdGhlCisgICAgLy8gY2xpZW50IHNl
ZW1zIHRvIG1ha2UgdGhpcyBpbXBvc3NpYmxlOyB0aGUgbWFpbiBsb2FkIGZhaWxzCisgICAgLy8g
YW5kIGlzIHN0b3BwZWQKKyAgICBoYW5kbGUtPmNhbmNlbCgpOworICAgIHN0YXJ0RG93bmxvYWQo
cmVxdWVzdCk7CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxl
ZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkBAIC04NjIsOSArODY5LDIzIEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VFcnJvCiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpz
dGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBuZXR3b3JrUmVx
dWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHJlcXVlc3QudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X2Rv
d25sb2FkX25ldyhuZXR3b3JrUmVxdWVzdCk7CisgICAgZ19vYmplY3RfdW5yZWYobmV0d29ya1Jl
cXVlc3QpOworCisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9m
cmFtZSk7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
dmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsIGRvd25sb2FkLCAmaGFuZGxlZCk7CisKKyAgICBp
ZiAoIWhhbmRsZWQpIHsKKyAgICAgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7
CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7CiB9CiAKIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRleCA4
Yzg2OGEyLi5kMzM0MDQ3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXR2ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmlu
ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJh
bWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0d2ViaW5zcGVjdG9yLmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5k
ZXggZjk0ZTcxMC4uYjBhYjVlOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtNjgs
NiArNjgsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViV2luZG93RmVhdHVyZXNDbGFzcyBX
ZWJLaXRXZWJXaW5kb3dGZWF0dXJlc0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXcgV2ViS2l0V2ViVmlldzsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2Vi
S2l0V2ViVmlld0NsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWQgV2ViS2l0
RG93bmxvYWQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRDbGFzcyBXZWJLaXREb3du
bG9hZENsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRv
d25sb2FkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDFhMGZhCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCkBA
IC0wLDAgKzEsNzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUu
b3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIK
KyNpbmNsdWRlICJ3ZWJraXRkb3dubG9hZC5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIK
KyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2V4dGVybiAiQyIgeworCitjbGFzcyBEb3dubG9hZENs
aWVudCA6IE5vbmNvcHlhYmxlLCBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgRG93bmxvYWRDbGllbnQoV2ViS2l0RG93bmxvYWQqKTsKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIFdlYktpdERvd25sb2FkKiBtX2Rvd25sb2FkOworfTsKKworI2RlZmluZSBX
RUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRQcml2YXRl
KSkKKworc3RydWN0IF9XZWJLaXREb3dubG9hZFByaXZhdGUgeworICAgIGdjaGFyKiBkZXN0aW5h
dGlvbl91cmk7CisgICAgZ2NoYXIqIHN1Z2dlc3RlZF9maWxlbmFtZTsKKyAgICBndWludCBjdXJy
ZW50X3NpemU7CisgICAgR1RpbWVyKiB0aW1lcjsKKyAgICBXZWJLaXREb3dubG9hZFN0YXRlIHN0
YXRlOworICAgIEdGaWxlT3V0cHV0U3RyZWFtKiBvdXRwdXRfc3RyZWFtOworICAgIERvd25sb2Fk
Q2xpZW50KiBkb3dubG9hZF9jbGllbnQ7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIG5ldHdv
cmtfcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBuZXR3b3JrX3Jlc3Bv
bnNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gcmVzb3VyY2VfaGFuZGxl
OworfTsKKworZW51bSB7CisgICAgLyogbm9ybWFsIHNpZ25hbHMgKi8KKyAgICBFUlJPUiwKKyAg
ICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF9kb3dubG9hZF9zaWduYWxz
W0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJP
UF9ORVRXT1JLX1JFUVVFU1QsCisgICAgUFJPUF9ERVNUSU5BVElPTl9VUkksCisgICAgUFJPUF9T
VUdHRVNURURfRklMRU5BTUUsCisgICAgUFJPUF9QUk9HUkVTUywKKyAgICBQUk9QX0NVUlJFTlRf
U0laRSwKKyAgICBQUk9QX1RPVEFMX1NJWkUsCit9OworCitHX0RFRklORV9UWVBFKFdlYktpdERv
d25sb2FkLCB3ZWJraXRfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG93bmxvYWRfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0RG93
bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBpZiAocHJpdi0+b3V0
cHV0X3N0cmVhbSkgeworICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vdXRwdXRfc3RyZWFt
KTsKKyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IE5VTEw7CisgICAgfQorCisgICAgaWYg
KHByaXYtPm5ldHdvcmtfcmVxdWVzdCkgeworICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5u
ZXR3b3JrX3JlcXVlc3QpOworICAgICAgICBwcml2LT5uZXR3b3JrX3JlcXVlc3QgPSBOVUxMOwor
ICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb3dubG9hZF9wYXJlbnRfY2xhc3Mp
LT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0g
V0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2
ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICAvKiBXZSBkb24ndCBjYWxsIHdlYmtpdF9kb3dubG9h
ZF9jYW5jZWwoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZW1pdAorICAgICAqIHNpZ25hbHMg
d2hlbiBmaW5hbGl6aW5nIGFuIG9iamVjdC4gKi8KKyAgICBpZiAocHJpdi0+cmVzb3VyY2VfaGFu
ZGxlKSB7CisgICAgICAgIGlmIChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVf
U1RBUlRFRCkgeworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5zZXRDbGllbnQo
MCk7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOworICAgICAg
ICB9CisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS5yZWxlYXNlKCk7CisgICAgfQorCisg
ICAgZGVsZXRlIHByaXYtPmRvd25sb2FkX2NsaWVudDsKKyAgICBkZWxldGUgcHJpdi0+bmV0d29y
a19yZXNwb25zZTsKKworICAgIGdfdGltZXJfZGVzdHJveShwcml2LT50aW1lcik7CisKKyAgICBn
X2ZyZWUocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICBnX2ZyZWUocHJpdi0+c3VnZ2VzdGVk
X2ZpbGVuYW1lKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb3dubG9hZF9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxv
YWRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
ID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisKKyAgICBzd2l0Y2gocHJvcF9pZCkgeworICAg
IGNhc2UgUFJPUF9ORVRXT1JLX1JFUVVFU1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QoZG93bmxvYWQpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU1RJTkFUSU9OX1VSSToKKyAgICAgICAgZ192
YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3Vy
aShkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1VHR0VTVEVEX0ZJ
TEVOQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb3dubG9h
ZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9QUk9HUkVTUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3
ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DVVJSRU5UX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2
YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUoZG93bmxvYWQpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RPVEFMX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0
X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKGRvd25sb2FkKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKK3sK
KyAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsK
KyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAg
IHN3aXRjaChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05FVFdPUktfUkVRVUVTVDoKKyAgICAg
ICAgcHJpdi0+bmV0d29ya19yZXF1ZXN0ID0gKFdlYktpdE5ldHdvcmtSZXF1ZXN0KilnX3ZhbHVl
X2R1cF9vYmplY3QodmFsdWUpOworICAgICAgICAvKiBUaGlzIGlzIHNhZmUgYXMgbmV0d29yay1y
ZXF1ZXN0IGlzIGEgY29uc3RydWN0IG9ubHkgcHJvcGVydHkgYW5kCisgICAgICAgICAqIHN1Z2dl
c3RlZF9maWxlbmFtZSBpcyBpbml0aWFsbHkgbnVsbC4KKyAgICAgICAgICovCisgICAgICAgIHBy
aXYtPnN1Z2dlc3RlZF9maWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUod2Via2l0X25ldHdv
cmtfcmVxdWVzdF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfREVTVElOQVRJT05fVVJJOgorICAgICAgICB3ZWJraXRfZG93bmxv
YWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KFdlYktpdERvd25sb2FkQ2xh
c3MqIGRvd25sb2FkQ2xhc3MpCit7CisgICAgLyoKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2Yg
dmlydHVhbCBtZXRob2RzCisgICAgICovCisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGRvd25sb2FkQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5kaXNwb3Nl
ID0gd2Via2l0X2Rvd25sb2FkX2Rpc3Bvc2U7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X2Rvd25sb2FkX2ZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb3BlcnR5OworICAgIG9iamVjdENsYXNzLT5zZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG93bmxvYWRfc2V0X3Byb3BlcnR5OworCisgICAgLyoqCisgICAgICog
V2ViS2l0RG93bmxvYWQ6OmVycm9yOgorICAgICAqIEBkb3dubG9hZDogdGhlIG9iamVjdCBvbiB3
aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAY3VycmVudF9ieXRlczogdGhlIGN1
cnJlbnQgY291bnQgb2YgYnl0ZXMgZG93bmxvYWRlZAorICAgICAqIEB0b3RhbF9ieXRlczogdGhl
IHRvdGFsIGJ5dGVzIGNvdW50IGluIHRoZSBkb3dubG9hZGVkIGZpbGUsIGFrYSBmaWxlIHNpemUu
CisgICAgICoKKyAgICAgKiBJbmRpY2F0ZXMgYW4gZXJyb3IgaW4gdGhlIGRvd25sb2FkLgorICAg
ICAqCisgICAgICogU2luY2U6IDEuMS4yCisgICAgICovCisgICAgd2Via2l0X2Rvd25sb2FkX3Np
Z25hbHNbRVJST1JdID0gZ19zaWduYWxfbmV3KCJlcnJvciIsCisgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyhkb3dubG9hZENsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdf
U0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fSU5UX0lOVF9TVFJJTkcs
CisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAgICAgICAgIEdfVFlQRV9JTlQs
CisgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CisK
KyAgICAvKgorICAgICAqIHByb3BlcnRpZXMKKyAgICAgKi8KKworICAgIC8qKgorICAgICogV2Vi
S2l0RG93bmxvYWQ6bmV0d29yay1yZXF1ZXN0CisgICAgKgorICAgICogVGhlICNXZWJLaXROZXR3
b3JrUmVxdWVzdCBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRvd25sb2FkLgorICAgICoK
KyAgICAqIFNpbmNlOiAxLjEuMgorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfTkVUV09SS19SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJuZXR3b3JrLXJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIk5ldHdvcmsgUmVxdWVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiVGhlIG5ldHdvcmsgcmVxdWVzdCBmb3IgdGhlIFVSSSB0aGF0IHNob3VsZCBiZSBkb3dubG9h
ZGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX05F
VFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFy
YW1GbGFncykoV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkp
KSk7CisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOmRlc3RpbmF0aW9uLXVyaQorICAg
ICoKKyAgICAqIFRoZSBVUkkgb2YgdGhlIHNhdmUgbG9jYXRpb24gZm9yIHRoaXMgZG93bmxvYWQu
CisgICAgKgorICAgICogU2luY2U6IDEuMS4yCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9ERVNUSU5BVElPTl9VUkksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlc3RpbmF0aW9uLXVyaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiRGVzdGluYXRpb24gVVJJIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJUaGUgZGVzdGluYXRpb24gVVJJIHdoZXJlIHRvIHNhdmUgdGhlIGZpbGUiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioK
KyAgICAqIFdlYktpdERvd25sb2FkOnN1Z2dlc3RlZC1maWxlbmFtZQorICAgICoKKyAgICAqIFRo
ZSBmaWxlIG5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmcKKyAgICAqCisgICAg
KiBTaW5jZTogMS4xLjIKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1NVR0dFU1RFRF9GSUxFTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic3VnZ2VzdGVkLWZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJTdWdnZXN0ZWQgRmlsZW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRoZSBmaWxlbmFtZSBzdWdnZXN0ZWQgYXMgZGVmYXVsdCB3aGVuIHNhdmluZyIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAvKioKKyAg
ICogV2ViS2l0RG93bmxvYWQ6cHJvZ3Jlc3M6CisgICAqCisgICAqIERldGVybWluZXMgdGhlIGN1
cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkLgorICAgKgorICAgKiBTaW5jZTogMS4xLjIK
KyAgICovCisgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQ
Uk9QX1BST0dSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfZG91YmxlKCJwcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlByb2dyZXNzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGV0ZXJtaW5lcyB0aGUgY3VycmVu
dCBwcm9ncmVzcyBvZiB0aGUgZG93bmxvYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwgMS4wLCAxLjAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOmN1cnJlbnQtc2l6ZQor
ICAgICoKKyAgICAqIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYWxyZWFkeSBkb3dubG9hZGVkCisg
ICAgKgorICAgICogU2luY2U6IDEuMS4yCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImN1cnJlbnQtc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQ3VycmVudCBTaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJU
aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRlZCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoq
CisgICAgKiBXZWJLaXREb3dubG9hZDp0b3RhbC1zaXplCisgICAgKgorICAgICogVGhlIHRvdGFs
IHNpemUgb2YgdGhlIGZpbGUKKyAgICAqCisgICAgKiBTaW5jZTogMS4xLjIKKyAgICAqLworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidG90YWwtc2l6ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiVG90YWwgU2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiVGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShkb3dubG9hZENsYXNzLCBzaXplb2YoV2ViS2l0RG93bmxv
YWRQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9pbml0KFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIGRvd25sb2FkLT5w
cml2ID0gcHJpdjsKKworICAgIHByaXYtPmRvd25sb2FkX2NsaWVudCA9IG5ldyBEb3dubG9hZENs
aWVudChkb3dubG9hZCk7CisgICAgcHJpdi0+Y3VycmVudF9zaXplID0gMDsKKyAgICBwcml2LT5z
dGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEOworfQorCisvKioKKyAqIHdlYmtp
dF9kb3dubG9hZF9uZXc6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0TmV0d29ya1JlcXVlc3QKKyAq
CisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXREb3dubG9hZCBvYmplY3QgZm9yIHRoZSBnaXZlbgor
ICogI1dlYktpdE5ldHdvcmtSZXF1ZXN0IG9iamVjdC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3
ICNXZWJLaXREb3dubG9hZAorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCitXZWJLaXREb3dubG9h
ZCogd2Via2l0X2Rvd25sb2FkX25ldyhXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCBOVUxMKTsKKworICAgIHJldHVybiBX
RUJLSVRfRE9XTkxPQUQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPV05MT0FELCAibmV0d29y
ay1yZXF1ZXN0IiwgcmVxdWVzdCwgTlVMTCkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBj
b25zdCBnY2hhciogdXJpLCBnYm9vbGVhbiBhcHBlbmQ9RkFMU0UpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwodXJpLCBGQUxTRSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHBy
aXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBHRmlsZSogZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3Vy
aSh1cmkpOworICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOworCisgICAgaWYgKGFwcGVuZCkKKyAg
ICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IGdfZmlsZV9hcHBlbmRfdG8oZmlsZSwgR19GSUxF
X0NSRUFURV9OT05FLCBOVUxMLCAmZXJyb3IpOworICAgIGVsc2UKKyAgICAgICAgcHJpdi0+b3V0
cHV0X3N0cmVhbSA9IGdfZmlsZV9yZXBsYWNlKGZpbGUsIE5VTEwsIFRSVUUsIEdfRklMRV9DUkVB
VEVfTk9ORSwgTlVMTCwgJmVycm9yKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOworCisg
ICAgaWYoZXJyb3IpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBXRUJLSVRfRE9XTkxPQURfRVJS
T1JfREVTVElOQVRJT04sIGVycm9yLT5tZXNzYWdlLCAmaGFuZGxlZCk7CisgICAgICAgIGdfZXJy
b3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbShX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBw
cml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgaWYgKHByaXYtPm91dHB1dF9zdHJlYW0pIHsKKyAg
ICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+b3V0cHV0X3N0cmVhbSk7CisgICAgICAgIHByaXYt
Pm91dHB1dF9zdHJlYW0gPSBOVUxMOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxv
YWRfc3RhcnQ6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBJbml0
aWF0ZXMgdGhlIGRvd25sb2FkLiBOb3RpY2UgdGhhdCB5b3UgbXVzdCBoYXZlIHNldCB0aGUKKyAq
IGRlc3RpbmF0aW9uLXVyaSBwcm9wZXJ0eSBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4KKyAq
CisgKiBTaW5jZTogMS4xLjIKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc3RhcnQoV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0RP
V05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBk
b3dubG9hZC0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmRlc3RpbmF0aW9uX3Vy
aSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfRE9XTkxPQURf
U1RBVEVfQ1JFQVRFRCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT50aW1lciA9PSBOVUxM
KTsKKworICAgIGlmIChwcml2LT5yZXNvdXJjZV9oYW5kbGUpCisgICAgICAgIHByaXYtPnJlc291
cmNlX2hhbmRsZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkX2NsaWVudCk7CisgICAgZWxzZSB7
CisgICAgICAgIC8qIEZJWE1FIHVzZSB0aGUgYWN0dWFsIHJlcXVlc3Qgb2JqZWN0IHdoZW4gV2Vi
S2l0TmV0d29ya1JlcXVlc3QgaXMgZmluaXNoZWQuICovCisgICAgICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShwcml2LT5uZXR3b3JrX3Jl
cXVlc3QpKTsKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZShyZXF1ZXN0LCBwcml2LT5kb3dubG9hZF9jbGllbnQsIDAsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOworICAgIH0KKworICAgIHByaXYtPnRpbWVyID0gZ190aW1lcl9uZXcgKCk7CisgICAg
d2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoZG93bmxvYWQsIHByaXYtPmRlc3Rp
bmF0aW9uX3VyaSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2NhbmNlbDoKKyAqIEBk
b3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIENhbmNlbHMgdGhlIGRvd25sb2Fk
LiBDYWxsaW5nIHRoaXMgd2lsbCBub3QgZnJlZSB0aGUKKyAqICNXZWJLaXREb3dubG9hZCBvYmpl
Y3QsIHNvIHlvdSBzdGlsbCBuZWVkIHRvIGNhbGwKKyAqIGdfb2JqZWN0X3VucmVmKCkgb24gaXQs
IGlmIHlvdSBhcmUgdGhlIG93bmVyIG9mIGEgcmVmZXJlbmNlLiBOb3RpY2UKKyAqIHRoYXQgY2Fu
Y2VsbGluZyB0aGUgZG93bmxvYWQgcHJvdm9rZXMgdGhlIGVtaXNzaW9uIG9mIHRoZQorICogV2Vi
S2l0RG93bmxvYWQ6OmVycm9yIHNpZ25hbCwgcmVwb3J0aW5nIHRoYXQgdGhlIGRvd25sb2FkIHdh
cworICogY2FuY2VsbGVkLgorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCit2b2lkIHdlYmtpdF9k
b3dubG9hZF9jYW5jZWwoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXREb3du
bG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIGdfdGltZXJfc3RvcChw
cml2LT50aW1lcik7CisKKyAgICBpZiAocHJpdi0+cmVzb3VyY2VfaGFuZGxlKQorICAgICAgICBw
cml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOworCisgICAgcHJpdi0+c3RhdGUgPSBXRUJL
SVRfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVEOworCisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dO
TE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiwgIlVzZXIgY2FuY2VsbGVkIHRoZSBkb3dubG9h
ZCIsICZoYW5kbGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaToKKyAq
IEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIENvbnZlbmllbmNlIG1ldGhv
ZCB0byByZXRyaWV2ZSB0aGUgVVJJIGZyb20gdGhlCisgKiAjV2ViS2l0TmV0d29ya1JlcXVlc3Qg
d2hpY2ggaXMgYmVpbmcgZG93bmxvYWRlZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdXJpCisgKgor
ICogU2luY2U6IDEuMS4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3Vy
aShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisKKyAgICBXZWJLaXREb3dubG9h
ZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICByZXR1cm4gd2Via2l0X25ldHdv
cmtfcmVxdWVzdF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCk7Cit9CisKKy8qKgorICog
d2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3Q6CisgKiBAZG93bmxvYWQ6IHRoZSAj
V2ViS2l0RG93bmxvYWQKKyAqCisgKiBSZXRyaWV2ZXMgdGhlICNXZWJLaXROZXR3b3JrUmVxdWVz
dCBvYmplY3QgdGhhdCBiYWNrcyB0aGUgZG93bmxvYWQKKyAqIHByb2Nlc3MuCisgKgorICogUmV0
dXJuczogdGhlICNXZWJLaXROZXR3b3JrUmVxdWVzdCBpbnN0YW5jZQorICoKKyAqIFNpbmNlOiAx
LjEuMgorICovCitXZWJLaXROZXR3b3JrUmVxdWVzdCogd2Via2l0X2Rvd25sb2FkX2dldF9uZXR3
b3JrX3JlcXVlc3QoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2Vi
S2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHBy
aXYtPm5ldHdvcmtfcmVxdWVzdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3Nl
dF9yZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIC8qIEZJWE1FIFVzZSBXZWJLaXROZXR3b3JrUmVzcG9uc2Ug
d2hlbiBpdCdzIG1lcmdlZCAqLworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRv
d25sb2FkLT5wcml2OworICAgIHByaXYtPm5ldHdvcmtfcmVzcG9uc2UgPSBuZXcgUmVzb3VyY2VS
ZXNwb25zZShyZXNwb25zZSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9zdWdn
ZXN0ZWRfZmlsZW5hbWU6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisg
KiBSZXRyaWV2ZXMgdGhlIGZpbGVuYW1lIHRoYXQgd2FzIHN1Z2dlc3RlZCBieSB0aGUgc2VydmVy
LCBvciB0aGUgb25lCisgKiBkZXJpdmVkIGJ5IFdlYktpdCBmcm9tIHRoZSBVUkkuCisgKgorICog
UmV0dXJuczogdGhlIHN1Z2dlc3RlZCBmaWxlbmFtZQorICoKKyAqIFNpbmNlOiAxLjEuMgorICov
Citjb25zdCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2
YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnN1Z2dlc3RlZF9m
aWxlbmFtZTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3Vy
aToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIE9idGFpbnMgdGhl
IFVSSSB0byB3aGljaCB0aGUgZG93bmxvYWRlZCBmaWxlIHdpbGwgYmUgd3JpdHRlbi4gVGhpcwor
ICogbXVzdCBoYXZlIGJlZW4gc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiBiZWZvcmUgY2FsbGluZwor
ICogd2Via2l0X2Rvd25sb2FkX3N0YXJ0KCksIGFuZCBtYXkgYmUgJU5VTEwuCisgKgorICogUmV0
dXJuczogdGhlIGRlc3RpbmF0aW9uIFVSSSBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjEuMgor
ICovCitjb25zdCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2
YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHByaXYtPmRlc3RpbmF0aW9u
X3VyaTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaToK
KyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICogQGRlc3RpbmF0aW9uX3VyaTog
dGhlIGRlc3RpbmF0aW9uIFVSSQorICoKKyAqIERlZmluZXMgdGhlIFVSSSB0aGF0IHNob3VsZCBi
ZSB1c2VkIHRvIHNhdmUgdGhlIGRvd25sb2FkZWQgZmlsZSB0by4KKyAqCisgKiBTaW5jZTogMS4x
LjIKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbl91cmkpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKGRlc3RpbmF0aW9uX3VyaSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZh
dGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAocHJpdi0+ZGVzdGluYXRpb25fdXJp
ICYmICFzdHJjbXAocHJpdi0+ZGVzdGluYXRpb25fdXJpLCBkZXN0aW5hdGlvbl91cmkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRSBjYW4gd2UgaGF2ZSBhIGJldHRlciBjaGVjaz8g
Ki8KKyAgICBpZiAocHJpdi0+c3RhdGUgIT0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NSRUFURUQg
JiYgcHJpdi0+c3RhdGUgIT0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCkgeworICAg
ICAgICBBU1NFUlQocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKworICAgICAgICBnYm9vbGVhbiBk
b3dubG9hZGluZyA9IHByaXYtPm91dHB1dF9zdHJlYW0gIT0gTlVMTDsKKyAgICAgICAgaWYgKGRv
d25sb2FkaW5nKQorICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbShkb3du
bG9hZCk7CisKKyAgICAgICAgR0ZpbGUqIHNyYyA9IGdfZmlsZV9uZXdfZm9yX3VyaShwcml2LT5k
ZXN0aW5hdGlvbl91cmkpOworICAgICAgICBHRmlsZSogZGVzdCA9IGdfZmlsZV9uZXdfZm9yX3Vy
aShkZXN0aW5hdGlvbl91cmkpOworICAgICAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAg
ICAgICBnX2ZpbGVfbW92ZShzcmMsIGRlc3QsIEdfRklMRV9DT1BZX0JBQ0tVUCwgTlVMTCwgTlVM
TCwgTlVMTCwgJmVycm9yKTsKKworICAgICAgICBnX29iamVjdF91bnJlZihzcmMpOworICAgICAg
ICBnX29iamVjdF91bnJlZihkZXN0KTsKKworICAgICAgICBnX2ZyZWUocHJpdi0+ZGVzdGluYXRp
b25fdXJpKTsKKyAgICAgICAgcHJpdi0+ZGVzdGluYXRpb25fdXJpID0gZ19zdHJkdXAoZGVzdGlu
YXRpb25fdXJpKTsKKworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGdib29sZWFu
IGhhbmRsZWQ7CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJl
cnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiwgZXJyb3ItPm1lc3Nh
Z2UsICZoYW5kbGVkKTsKKyAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZG93bmxvYWRpbmcpIHsKKyAg
ICAgICAgICAgIGlmICghd2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoZG93bmxv
YWQsIGRlc3RpbmF0aW9uX3VyaSwgVFJVRSkpIHsKKyAgICAgICAgICAgICAgICB3ZWJraXRfZG93
bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgZ19mcmVlKHByaXYtPmRlc3Rp
bmF0aW9uX3VyaSk7CisgICAgICBwcml2LT5kZXN0aW5hdGlvbl91cmkgPSBnX3N0cmR1cChkZXN0
aW5hdGlvbl91cmkpOworICAgIH0KKworICAgIC8qIG9ubHkgbm90aWZ5IGNoYW5nZSBpZiBldmVy
eXRoaW5nIHdlbnQgZmluZSAqLworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9h
ZCksICJkZXN0aW5hdGlvbi11cmkiKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0
X3N0YXRlOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICogT2J0YWlu
cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZG93bmxvYWQsIGFzIGEKKyAqICNXZWJLaXREb3du
bG9hZFN0YXRlLgorICoKKyAqIFJldHVybnM6IHRoZSBjdXJyZW50ICNXZWJLaXREb3dubG9hZFN0
YXRlCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK1dlYktpdERvd25sb2FkU3RhdGUgd2Via2l0
X2Rvd25sb2FkX2dldF9zdGF0ZSAoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIFdFQktJVF9E
T1dOTE9BRF9TVEFURV9FUlJPUik7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYg
PSBkb3dubG9hZC0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+c3RhdGU7Cit9CisKKy8qKgorICog
d2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktp
dERvd25sb2FkCisgKgorICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgdG90YWwgc2l6ZSBvZiB0aGUg
ZG93bmxvYWQuIFRoaXMgaXMgZXhwZWN0ZWQKKyAqIGJlY2F1c2UgdGhlIHNlcnZlciBtYXkgcHJv
dmlkZSBpbmNvcnJlY3Qgb3IgbWlzc2luZworICogQ29udGVudC1MZW5ndGguIE5vdGljZSB0aGF0
IHRoaXMgbWF5IGdyb3cgb3ZlciB0aW1lLCBhcyBpdCB3aWxsIGJlCisgKiBhbHdheXMgdGhlIHNh
bWUgYXMgY3VycmVudF9zaXplIGluIHRoZSBjYXNlcyB3aGVyZSBjdXJyZW50IHNpemUKKyAqIHN1
cnBhc3NlcyBpdC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZXhwZWN0ZWQgdG90YWwgc2l6ZSBvZiB0
aGUgZG93bmxvYWRlZCBmaWxlCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK2d1aW50NjQgd2Vi
a2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplIChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwg
MCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsK
KyAgICBpZiAoIXByaXYtPm5ldHdvcmtfcmVzcG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIE1BWChwcml2LT5jdXJyZW50X3NpemUsIHByaXYtPm5ldHdvcmtfcmVzcG9uc2Ut
PmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRf
Z2V0X2N1cnJlbnRfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoK
KyAqIEN1cnJlbnQgYWxyZWFkeSBkb3dubG9hZGVkIHNpemUuCisgKgorICogUmV0dXJuczogdGhl
IGFscmVhZHkgZG93bmxvYWRlZCBzaXplCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK2d1aW50
NjQgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93
bmxvYWQpLCAwKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2Fk
LT5wcml2OworICAgIHJldHVybiBwcml2LT5jdXJyZW50X3NpemU7Cit9CisKKy8qKgorICogd2Vi
a2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzczoKKyAqIEBkb3dubG9hZDogYSAjV2ViS2l0RG93bmxv
YWQKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBkb3dubG9h
ZC4KKyAqCisgKiBSZXR1cm5zOiBhICNnZG91YmxlIHJhbmdpbmcgZnJvbSAwLjAgdG8gMS4wLgor
ICoKKyAqIFNpbmNlOiAxLjEuMgorICovCitnZG91YmxlIHdlYmtpdF9kb3dubG9hZF9nZXRfcHJv
Z3Jlc3MoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDEuMCk7CisKKyAgICBXZWJLaXREb3du
bG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBnZG91YmxlIHRvdGFsX3Np
emUgPSAoZ2RvdWJsZSlwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5leHBlY3RlZENvbnRlbnRMZW5n
dGgoKTsKKworICAgIGlmICh0b3RhbF9zaXplID09IDApCisgICAgICAgIHJldHVybiAxLjA7CisK
KyAgICByZXR1cm4gKChnZG91YmxlKXByaXYtPmN1cnJlbnRfc2l6ZSkgLyB0b3RhbF9zaXplOwor
fQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lOgorICogQGRvd25s
b2FkOiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIEVsYXBzZWQgdGltZSBmb3IgdGhlIGRvd25s
b2FkIGluIHNlY29uZHMsIGluY2x1ZGluZyBhbnkgZnJhY3Rpb25hbAorICogcGFydC4gSWYgdGhl
IGRvd25sb2FkIGlzIGZpbmlzaGVkLCBoYWQgYW4gZXJyb3Igb3Igd2FzIGNhbmNlbGxlZAorICog
dGhpcyBpcyB0aGUgdGltZSBiZXR3ZWVuIGl0cyBzdGFydCBhbmQgdGhlIGV2ZW50LgorICoKKyAq
IFJldHVybnM6IHNlY29uZHMgc2luY2UgdGhlIGRvd25sb2FkIHdhcyBzdGFydGVkLCBhcyBhICNn
ZG91YmxlCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK2dkb3VibGUgd2Via2l0X2Rvd25sb2Fk
X2dldF9lbGFwc2VkX3RpbWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDAuMCk7CisKKyAg
ICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICByZXR1
cm4gZ190aW1lcl9lbGFwc2VkKHByaXYtPnRpbWVyLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBj
b25zdCBnY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZh
dGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIGlmIChwcml2LT5jdXJyZW50X3NpemUg
PT0gMCkgeworICAgICAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9TVEFS
VEVEOworICAgIH0KKworICAgIEFTU0VSVChwcml2LT5vdXRwdXRfc3RyZWFtKTsKKworICAgIGdz
aXplIGJ5dGVzX3dyaXR0ZW47CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICBnX291
dHB1dF9zdHJlYW1fd3JpdGVfYWxsKEdfT1VUUFVUX1NUUkVBTShwcml2LT5vdXRwdXRfc3RyZWFt
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGxlbmd0aCwgJmJ5dGVzX3dy
aXR0ZW4sIE5VTEwsICZlcnJvcik7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ2Jvb2xl
YW4gaGFuZGxlZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJy
b3IiLCAwLCBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIGVycm9yLT5tZXNzYWdl
LCAmaGFuZGxlZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBwcml2LT5jdXJyZW50X3NpemUgKz0gbGVuZ3RoOworICAgIGdfb2Jq
ZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJjdXJyZW50LXNpemUiKTsKKworICAgIEFT
U0VSVChwcml2LT5uZXR3b3JrX3Jlc3BvbnNlKTsKKyAgICBpZiAocHJpdi0+Y3VycmVudF9zaXpl
ID4gcHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpCisgICAg
ICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJ0b3RhbC1zaXplIik7CisK
KyAgICAvKiBGSVhNRSB0aHJvdHRsZSB0aGUgbnVtYmVyIG9mIHVwZGF0ZXM/ICBzaG91bGQgd2Ug
cmVtb3ZlIHRoZQorICAgICAqIHByZXZpb3VzIGdfb2JqZWN0X25vdGlmeSgpcyBpZiB3ZSBhcmUg
Z29pbmcgdG8gdGhyb3R0bGUgdGhlCisgICAgICogcHJvZ3Jlc3MgdXBkYXRlcz8gKi8KKyAgICBn
X29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAicHJvZ3Jlc3MiKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcoV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQp
OworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisK
KyAgICBnX3RpbWVyX3N0b3AocHJpdi0+dGltZXIpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lU
X0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEOworCisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNU
KGRvd25sb2FkKSwgInByb2dyZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9h
ZF9lcnJvcihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisg
ICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBn
X3RpbWVyX3N0b3AocHJpdi0+dGltZXIpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05M
T0FEX1NUQVRFX0VSUk9SOworCisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9O
RVRXT1JLLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksICZoYW5k
bGVkKTsKK30KKworRG93bmxvYWRDbGllbnQ6OkRvd25sb2FkQ2xpZW50KFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCit7Cit9CisKK3ZvaWQgRG93
bmxvYWRDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfcmVz
cG9uc2UobV9kb3dubG9hZCwgcmVzcG9uc2UpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50Ojpk
aWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfcmVjZWl2ZWRf
ZGF0YShtX2Rvd25sb2FkLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICB3ZWJraXRfZG93bmxv
YWRfZmluaXNoZWRfbG9hZGluZyhtX2Rvd25sb2FkKTsKK30KKwordm9pZCBEb3dubG9hZENsaWVu
dDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQor
eworICAgIHdlYmtpdF9kb3dubG9hZF9lcnJvcihtX2Rvd25sb2FkLCBlcnJvcik7Cit9CisKK3Zv
aWQgRG93bmxvYWRDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIC8q
IEZJWE1FIHdoZW4gd2UgaGF2ZSB0aGUgbmV3IGZyYW1lIGxvYWRlciBzaWduYWxzIGFuZCBlcnJv
ciBoYW5kbGluZy4gKi8KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERvd25sb2Fk
Q2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICAvKiBGSVhNRSB3
aGVuIHdlIGhhdmUgdGhlIG5ldyBmcmFtZSBsb2FkZXIgc2lnbmFscyBhbmQgZXJyb3IgaGFuZGxp
bmcuICovCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRv
d25sb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4ZWM3OAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgKQEAgLTAs
MCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV0VCS0lUX0RPV05MT0FEX0gKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5l
cy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9XTkxPQUQgICAg
ICAgICAgICAod2Via2l0X2Rvd25sb2FkX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET1dO
TE9BRChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWQpKQorI2RlZmluZSBXRUJLSVRfRE9X
TkxPQURfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkQ2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfSVNfRE9XTkxPQUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfSVNfRE9XTkxPQURf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdl
YktpdERvd25sb2FkQ2xhc3MpKQorCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9ET1dOTE9B
RF9TVEFURV9FUlJPUiA9IC0xLAorICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEID0g
MCwKKyAgICBXRUJLSVRfRE9XTkxPQURfU1RBVEVfU1RBUlRFRCwKKyAgICBXRUJLSVRfRE9XTkxP
QURfU1RBVEVfQ0FOQ0VMTEVELAorICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRAor
fSBXZWJLaXREb3dubG9hZFN0YXRlOworCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9ET1dO
TE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiwKKyAgICBXRUJLSVRfRE9XTkxPQURfRVJST1Jf
REVTVElOQVRJT04sCisgICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUksKK30gV2ViS2l0
RG93bmxvYWRFcnJvcjsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSBX
ZWJLaXREb3dubG9hZFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RG93bmxvYWQgeworICAgIEdP
YmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2
OworfTsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwor
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQp
OworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2Rvd25sb2FkX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9p
ZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X2Rvd25sb2FkX25ldyAg
ICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1JlcXVlc3QgKnJlcXVlc3QpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb3dubG9hZF9zdGFydCAgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2Rvd25sb2FkX2NhbmNlbCAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RG93
bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtp
dF9kb3dubG9hZF9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAg
ICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0TmV0d29ya1JlcXVlc3QqCit3ZWJr
aXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdCAgICAgICAgIChXZWJLaXREb3dubG9hZCAg
ICAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X2Rvd25s
b2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRv
d25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9hZF9nZXRf
ZGVzdGluYXRpb25fdXJpICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkg
ICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKmRlc3Rp
bmF0aW9uX3VyaSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25sb2FkX2dldF9w
cm9ncmVzcyAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsK
KworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG93bmxvYWRfZ2V0X2VsYXBzZWRfdGltZSAg
ICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJ
IGd1aW50NjQKK3dlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZSAgICAgICAgICAgICAgKFdl
YktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Vi
a2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQg
ICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBXZWJLaXREb3dubG9hZFN0YXRlCit3ZWJr
aXRfZG93bmxvYWRfZ2V0X3N0YXRlICAgICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAg
ICAgICAqZG93bmxvYWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHByaXZhdGUuaAppbmRleCBjZTQ3MjZkLi45YTYwMmQ3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJp
dmF0ZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1l
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4K
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaD4KICNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CkBAIC00NCw5ICs0NSwxMyBAQAogI2lu
Y2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAogI2luY2x1ZGUgPGdsaWIuaD4K
IAorY2xhc3MgRG93bmxvYWRDbGllbnQ7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktp
dFdlYlZpZXcqIGdldFZpZXdGcm9tRnJhbWUoV2ViS2l0V2ViRnJhbWUqKTsKIApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCBlZTAxODk1Li5hY2Y4ZmI3IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAKKyNpbmNsdWRlICJ3ZWJraXRkb3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZp
ZXcuaCIKICNpbmNsdWRlICJ3ZWJraXRlbnVtdHlwZXMuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJz
aGFsLmgiCkBAIC0xMzQsNiArMTM1LDcgQEAgZW51bSB7CiAgICAgQ09QWV9DTElQQk9BUkQsCiAg
ICAgUEFTVEVfQ0xJUEJPQVJELAogICAgIENVVF9DTElQQk9BUkQsCisgICAgRE9XTkxPQURfUkVR
VUVTVEVELAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xMTE2LDYgKzExMTgsMjcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3
ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKICAgICAgICAgICAgIEdf
VFlQRV9QT0lOVEVSKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpkb3dubG9h
ZC1yZXF1ZXN0ZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBz
aWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBkb3dubG9hZDogdGhlIG1lc3NhZ2UgdGV4dAorICAg
ICAqIEByZXR1cm46IFRSVUUgaWYgdGhlIGRvd25sb2FkIHdhcyBoYW5kbGVkLgorICAgICAqCisg
ICAgICogQSBuZXcgRG93bmxvYWQgaXMgYmVpbmcgcmVxdWVzdGVkLiBCeSBkZWZhdWx0LCBpZiB0
aGUgc2lnbmFsIGlzCisgICAgICogbm90IGhhbmRsZWQsIHRoZSBkb3dubG9hZCBpcyBjYW5jZWxs
ZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjIKKyAgICAgKi8KKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2lnbmFsc1tET1dOTE9BRF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJkb3dubG9h
ZC1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNz
KSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdO
QUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVs
YXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0
X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEs
CisgICAgICAgICAgICBHX1RZUEVfT0JKRUNUKTsKKwogICAgIC8qKgogICAgICAqIFdlYktpdFdl
YlZpZXc6OmxvYWQtc3RhcnRlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdG1h
cnNoYWwubGlzdCBiL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CmluZGV4IDg1OTJiNDUu
LjNhYWYzMTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CisrKyBi
L1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CkBAIC0xLDMgKzEsNSBAQAorQk9PTEVBTjpJ
TlQsSU5ULFNUUklORworQk9PTEVBTjpPQkpFQ1QKIEJPT0xFQU46T0JKRUNULE9CSkVDVCxPQkpF
Q1QsT0JKRUNUCiBCT09MRUFOOk9CSkVDVCxPQkpFQ1QsU1RSSU5HLE9CSkVDVAogQk9PTEVBTjpP
QkpFQ1QsU1RSSU5HCi0tIAoxLjYuMi5yYzAKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28190</attachid>
            <date>2009-03-02 11:57:44 -0800</date>
            <delta_ts>2009-03-02 11:59:44 -0800</delta_ts>
            <desc>proposed implementation</desc>
            <filename>0001-Implement-download-and-provide-a-nice-object-wrappi.patch</filename>
            <type>text/plain</type>
            <size>44620</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSA5NWYwNmQ4MGNkMDkzYzEzYmUyODUwNDlmN2ZmNzQ1YTY1ZGU4ZmE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDA5IDE4OjE4OjI0IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRo
ZSBkb3dubG9hZAogcHJvY2VzcwoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwogR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oICB8ICAgIDIgKy0KIC4uLi9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCAgIHwgICAgOSArLQogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU0ICsrCiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCB8ICAgMTcgKy0K
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIHwgICAy
OSArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAxICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAg
ICAgIHwgICAgMyArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAgICAgICAg
ICAgICAgICB8ICA3ODYgKysrKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRvd25sb2FkLmggICAgICAgICAgICAgICAgIHwgIDExNCArKysKIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCAgICAgICAgICAgICAgICB8ICAgMjMgKwogV2ViS2l0
L2d0ay93ZWJraXRtYXJzaGFsLmxpc3QgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIDE1
IGZpbGVzIGNoYW5nZWQsIDEwNTcgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oCgpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDJlMjk4OTAuLjk5MDQxZGIgMTAwNjQ0
Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMyBAQAogMjAwOS0w
My0wMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAorICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgbmV3IGZpbGVzIHJl
bGF0ZWQgdG8gV2ViS2l0RG93bmxvYWQgdG8gdGhlIEdUSysgcG9ydC4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorCisyMDA5LTAzLTAyICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNA
Z25vbWUub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4OyBhZGRpbmcgbWlzc2lu
ZyBmaWxlcyB0byBFWFRSQV9ESVNULCBzbyB0aGF0CiAgICAgICAgIHRoZXkgc2hvdyB1cCBpbiB0
aGUgdGFyYmFsbC4KIApkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5h
bQppbmRleCBiMDUwYzRjLi5kMGUwOTZjIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9HTlVtYWtlZmlsZS5hbQpAQCAtMzA0LDYgKzMwNCw3IEBAIGVuZGlmCiB3ZWJraXRndGtfaF9h
cGkgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAogCVdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHZlcnNpb24uaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0LmggXApAQCAtMzQ4LDYgKzM0OSw3IEBAIHdlYmtpdGd0a19zb3VyY2Vz
ICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNwcCBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGRvd25sb2FkLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcAogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdl
MjI4NGUuLjYyNzBhODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYgQEAKIDIwMDktMDMtMDIgIEd1c3Rhdm8gTm9yb25o
YSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSB0aGUgU291cCBiYWNrZW5kIGFibGUgdG8gaGFuZGxlIHJl
cXVlc3RzIHdpdGhvdXQgYSBmcmFtZSwKKyAgICAgICAgc2luY2Ugd2UgbWF5IGhhdmUgc3VjaCB0
aGluZ3Mgbm93IHRoYXQgd2Ugc3VwcG9ydCBkb3dubG9hZHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpzdGFydCk6CisKKzIwMDktMDMtMDIgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGduc0Bnbm9tZS5vcmc+CisKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXg7IGFkZGlu
ZyBtaXNzaW5nIGZpbGVzIHRvIEVYVFJBX0RJU1QsIHNvIHRoYXQKICAgICAgICAgdGhleSBzaG93
IHVwIGluIHRoZSB0YXJiYWxsLgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaAppbmRleCA0ZTQ0MTdjLi5lNTAxZTdkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKQEAgLTQ3
LDcgKzQ3LDcgQEAKIAogI2lmIFVTRShTT1VQKQogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgot
Y2xhc3MgRnJhbWU7CitjbGFzcyBXZWJDb3JlOjpGcmFtZTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oUVQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VI
YW5kbGVTb3VwLmNwcAppbmRleCAxY2E2NTdmLi4wNmVkZjIzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTU0NSw5
ICs1NDUsMTIgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogewog
ICAgIEFTU0VSVCghZC0+bV9tc2cpOwogCi0gICAgLy8gSWYgd2UgYXJlIG5vIGxvbmdlciBhdHRh
Y2hlZCB0byBhIFBhZ2UsIHRoaXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQgbG9hZCBmcm9tIGFuCi0g
ICAgLy8gb25VbmxvYWQgaGFuZGxlciwgc28gbGV0J3MganVzdCBibG9jayBpdC4KLSAgICBpZiAo
IWZyYW1lLT5wYWdlKCkpCisKKyAgICAvLyBUaGUgZnJhbWUgY291bGQgYmUgbnVsbCBpcyB0aGUg
UmVzb3VyY2VIYW5kbGUgaXMgbm90IGFzc29jaWF0ZWQgdG8gYW55CisgICAgLy8gRnJhbWUsIGku
ZS4gaWYgd2UgYXJlIGRvd25sb2FkaW5nIGEgZmlsZS4KKyAgICAvLyBJZiB0aGUgZnJhbWUgaXMg
bm90IG51bGwgYnV0IHRoZSBwYWdlIGlzIG51bGwgdGhpcyBtdXN0IGJlIGFuIGF0dGVtcHRlZAor
ICAgIC8vIGxvYWQgZnJvbSBhbiBvblVubG9hZCBoYW5kbGVyLCBzbyBsZXQncyBqdXN0IGJsb2Nr
IGl0LgorICAgIGlmIChmcmFtZSAmJiAhZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgS1VSTCB1cmwgPSByZXF1ZXN0KCkudXJsKCk7CmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDY1ODIzYzEuLjhk
ZmQxZGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMDktMDMtMDIgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGduc0Bnbm9tZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2Jq
ZWN0IHdyYXBwaW5nIHRoZQorICAgICAgICBkb3dubG9hZCBwcm9jZXNzLiBJbml0aWFsIHdvcmsg
ZG9uZSBieSBNYXJjbyBCYXJpc2lvbmUgYW5kCisgICAgICAgIFBpZXJyZS1MdWMgQmVhdWRvaW4g
Zm9yIENvbGxhYm9yYS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xp
ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2Fk
VVJMKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKToKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRE
b3dubG9hZFByaXZhdGU6Oik6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJr
aXRfZG93bmxvYWRfZGlzcG9zZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3
ZWJraXRfZG93bmxvYWRfZmluYWxpemUpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0
ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9wcm9wZXJ0eSk6CisgICAgICAgIChfV2ViS2l0RG93bmxv
YWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKF9XZWJL
aXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KToKKyAgICAgICAg
KF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9pbml0KToKKyAgICAgICAg
KF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9uZXcpOgorICAgICAgICAo
X1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91
cmkpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2Ns
b3NlX3N0cmVhbSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93
bmxvYWRfc3RhcnQpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rv
d25sb2FkX2NhbmNlbCk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRf
ZG93bmxvYWRfZ2V0X3VyaSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJr
aXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdCk6CisgICAgICAgIChfV2ViS2l0RG93bmxv
YWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfc2V0X3Jlc3BvbnNlKToKKyAgICAgICAgKF9XZWJL
aXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1l
KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRf
ZGVzdGluYXRpb25fdXJpKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtp
dF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9h
ZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfc3RhdGUpOgorICAgICAgICAoX1dlYktpdERv
d25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKToKKyAgICAgICAg
KF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXpl
KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRf
cHJvZ3Jlc3MpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25s
b2FkX2dldF9lbGFwc2VkX3RpbWUpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6
d2Via2l0X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEpOgorICAgICAgICAoX1dlYktpdERvd25sb2Fk
UHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2Vycm9yKToKKyAgICAgICAgKF9X
ZWJLaXREb3dubG9hZFByaXZhdGU6OkRvd25sb2FkQ2xpZW50OjpEb3dubG9hZENsaWVudCk6Cisg
ICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OkRvd25sb2FkQ2xp
ZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpE
b3dubG9hZENsaWVudDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChfV2ViS2l0RG93bmxv
YWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6ZGlkRmFpbCk6CisgICAgICAgIChfV2ViS2l0RG93
bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6d2FzQmxvY2tlZCk6CisgICAgICAgIChfV2Vi
S2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6Y2Fubm90U2hvd1VSTCk6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdGRvd25sb2FkLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93
ZWJraXRwcml2YXRlLmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAg
ICAgICAqIHdlYmtpdG1hcnNoYWwubGlzdDoKKwogMjAwOS0wMy0wMSAgSmFuIE1pY2hhZWwgQWxv
bnpvICA8am1hbG9uem9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIg
RnJleXRoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRN
ZW51Q2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVD
bGllbnRHdGsuY3BwCmluZGV4IDQ5MDM3MGMuLjQyZDQ4MTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMjAsNiArMjEsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAj
aW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRHdGsuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCkBAIC0xNjMsNyArMTY1LDIwIEBAIHZvaWQgQ29udGV4dE1lbnVD
bGllbnQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSosIGNvbnN0IENv
bnRleHRNCiAKIHZvaWQgQ29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKGNvbnN0IEtVUkwm
IHVybCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KiBuZXR3b3JrX3JlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0
X2Rvd25sb2FkX25ldyhuZXR3b3JrX3JlcXVlc3QpOworICAgIGdfb2JqZWN0X3VucmVmKG5ldHdv
cmtfcmVxdWVzdCk7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVkOworICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYlZpZXcsICJkb3dubG9hZC1yZXF1ZXN0ZWQiLCBkb3dubG9hZCwgJmhhbmRs
ZWQpOworCisgICAgaWYgKCFoYW5kbGVkKSB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9jYW5j
ZWwoZG93bmxvYWQpOworICAgICAgICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOwog
fQogCiB2b2lkIENvbnRleHRNZW51Q2xpZW50Ojpjb3B5SW1hZ2VUb0NsaXBib2FyZChjb25zdCBI
aXRUZXN0UmVzdWx0JikKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKaW5kZXggNDA0NDA5MC4uZTQxNzA4MSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTMsNiAr
Myw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFu
QHR3b3RvYXN0cy5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25o
YSBTaWx2YSA8Z25zQGdub21lLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDYgKzQx
LDggQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgpAQCAtNzc0LDkgKzc3NywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQogICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1kb25lIiwgZmFsc2UpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50Ojpkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQor
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8v
IHdlIGNvdWxkIHJldXNlIHRoZSBzYW1lIGhhbmRsZSwgYnV0IG91ciByZXBsYWNpbmcgb2YgdGhl
CisgICAgLy8gY2xpZW50IHNlZW1zIHRvIG1ha2UgdGhpcyBpbXBvc3NpYmxlOyB0aGUgbWFpbiBs
b2FkIGZhaWxzCisgICAgLy8gYW5kIGlzIHN0b3BwZWQKKyAgICBoYW5kbGUtPmNhbmNlbCgpOwor
ICAgIHN0YXJ0RG93bmxvYWQocmVxdWVzdCk7CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkBAIC04NjIs
OSArODY5LDIzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9y
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvCiAgICAgfQogfQogCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0KiBuZXR3b3JrUmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHJlcXVl
c3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhuZXR3b3JrUmVxdWVzdCk7CisgICAgZ19vYmpl
Y3RfdW5yZWYobmV0d29ya1JlcXVlc3QpOworCisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IGdl
dFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUodmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsIGRvd25sb2FkLCAm
aGFuZGxlZCk7CisKKyAgICBpZiAoIWhhbmRsZWQpIHsKKyAgICAgICAgd2Via2l0X2Rvd25sb2Fk
X2NhbmNlbChkb3dubG9hZCk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9h
ZCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXQuaAppbmRleCA4Yzg2OGEyLi5kMzM0MDQ3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2ZXJzaW9uLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3Jl
cXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGlu
Z3MuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViaW5zcGVjdG9yLmg+CmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRkZWZpbmVzLmgKaW5kZXggZjk0ZTcxMC4uYjBhYjVlOSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRlZmluZXMuaApAQCAtNjgsNiArNjgsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViV2lu
ZG93RmVhdHVyZXNDbGFzcyBXZWJLaXRXZWJXaW5kb3dGZWF0dXJlc0NsYXNzOwogdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXRXZWJWaWV3Q2xhc3MgV2ViS2l0V2ViVmlld0NsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RG93bmxvYWQgV2ViS2l0RG93bmxvYWQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxv
YWRDbGFzcyBXZWJLaXREb3dubG9hZENsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lMDFhMGZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEsNzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3Jvbmhh
IFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUg
IndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3ZWJraXRkb3dubG9hZC5oIgorI2luY2x1ZGUg
IndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2V4dGVybiAiQyIgewor
CitjbGFzcyBEb3dubG9hZENsaWVudCA6IE5vbmNvcHlhYmxlLCBwdWJsaWMgUmVzb3VyY2VIYW5k
bGVDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRG93bmxvYWRDbGllbnQoV2ViS2l0RG93
bmxvYWQqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSop
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VI
YW5kbGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5k
bGUqKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFdlYktpdERvd25sb2FkKiBtX2Rvd25sb2Fk
OworfTsKKworI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUob2JqKSAgICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2Vi
S2l0RG93bmxvYWRQcml2YXRlKSkKKworc3RydWN0IF9XZWJLaXREb3dubG9hZFByaXZhdGUgewor
ICAgIGdjaGFyKiBkZXN0aW5hdGlvbl91cmk7CisgICAgZ2NoYXIqIHN1Z2dlc3RlZF9maWxlbmFt
ZTsKKyAgICBndWludCBjdXJyZW50X3NpemU7CisgICAgR1RpbWVyKiB0aW1lcjsKKyAgICBXZWJL
aXREb3dubG9hZFN0YXRlIHN0YXRlOworICAgIEdGaWxlT3V0cHV0U3RyZWFtKiBvdXRwdXRfc3Ry
ZWFtOworICAgIERvd25sb2FkQ2xpZW50KiBkb3dubG9hZF9jbGllbnQ7CisgICAgV2ViS2l0TmV0
d29ya1JlcXVlc3QqIG5ldHdvcmtfcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlKiBuZXR3b3JrX3Jlc3BvbnNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZT4gcmVzb3VyY2VfaGFuZGxlOworfTsKKworZW51bSB7CisgICAgLyogbm9ybWFsIHNpZ25hbHMg
Ki8KKyAgICBFUlJPUiwKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtp
dF9kb3dubG9hZF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworZW51bSB7CisgICAg
UFJPUF8wLAorCisgICAgUFJPUF9ORVRXT1JLX1JFUVVFU1QsCisgICAgUFJPUF9ERVNUSU5BVElP
Tl9VUkksCisgICAgUFJPUF9TVUdHRVNURURfRklMRU5BTUUsCisgICAgUFJPUF9QUk9HUkVTUywK
KyAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICBQUk9QX1RPVEFMX1NJWkUsCit9OworCitHX0RF
RklORV9UWVBFKFdlYktpdERvd25sb2FkLCB3ZWJraXRfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1Qp
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZGlzcG9zZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVj
dCk7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisK
KyAgICBpZiAocHJpdi0+b3V0cHV0X3N0cmVhbSkgeworICAgICAgICBnX29iamVjdF91bnJlZihw
cml2LT5vdXRwdXRfc3RyZWFtKTsKKyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IE5VTEw7
CisgICAgfQorCisgICAgaWYgKHByaXYtPm5ldHdvcmtfcmVxdWVzdCkgeworICAgICAgICBnX29i
amVjdF91bnJlZihwcml2LT5uZXR3b3JrX3JlcXVlc3QpOworICAgICAgICBwcml2LT5uZXR3b3Jr
X3JlcXVlc3QgPSBOVUxMOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb3du
bG9hZF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb3dubG9hZF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0RG93
bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICAvKiBXZSBkb24ndCBj
YWxsIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZW1p
dAorICAgICAqIHNpZ25hbHMgd2hlbiBmaW5hbGl6aW5nIGFuIG9iamVjdC4gKi8KKyAgICBpZiAo
cHJpdi0+cmVzb3VyY2VfaGFuZGxlKSB7CisgICAgICAgIGlmIChwcml2LT5zdGF0ZSA9PSBXRUJL
SVRfRE9XTkxPQURfU1RBVEVfU1RBUlRFRCkgeworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2Vf
aGFuZGxlLT5zZXRDbGllbnQoMCk7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUt
PmNhbmNlbCgpOworICAgICAgICB9CisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS5yZWxl
YXNlKCk7CisgICAgfQorCisgICAgZGVsZXRlIHByaXYtPmRvd25sb2FkX2NsaWVudDsKKyAgICBk
ZWxldGUgcHJpdi0+bmV0d29ya19yZXNwb25zZTsKKworICAgIGdfdGltZXJfZGVzdHJveShwcml2
LT50aW1lcik7CisKKyAgICBnX2ZyZWUocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICBnX2Zy
ZWUocHJpdi0+c3VnZ2VzdGVkX2ZpbGVuYW1lKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisKKyAgICBzd2l0
Y2gocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ORVRXT1JLX1JFUVVFU1Q6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVl
c3QoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU1RJTkFUSU9O
X1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU1VHR0VTVEVEX0ZJTEVOQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKGRvd25sb2FkKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9HUkVTUzoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJSRU5UX1NJWkU6CisgICAgICAgIGdf
dmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUo
ZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RPVEFMX1NJWkU6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF90b3Rh
bF9zaXplKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVj
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjICpwc3BlYykKK3sKKyAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRf
RE9XTkxPQUQob2JqZWN0KTsKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3du
bG9hZC0+cHJpdjsKKworICAgIHN3aXRjaChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05FVFdP
UktfUkVRVUVTVDoKKyAgICAgICAgcHJpdi0+bmV0d29ya19yZXF1ZXN0ID0gKFdlYktpdE5ldHdv
cmtSZXF1ZXN0KilnX3ZhbHVlX2R1cF9vYmplY3QodmFsdWUpOworICAgICAgICAvKiBUaGlzIGlz
IHNhZmUgYXMgbmV0d29yay1yZXF1ZXN0IGlzIGEgY29uc3RydWN0IG9ubHkgcHJvcGVydHkgYW5k
CisgICAgICAgICAqIHN1Z2dlc3RlZF9maWxlbmFtZSBpcyBpbml0aWFsbHkgbnVsbC4KKyAgICAg
ICAgICovCisgICAgICAgIHByaXYtPnN1Z2dlc3RlZF9maWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFz
ZW5hbWUod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVz
dCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVTVElOQVRJT05fVVJJOgorICAg
ICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBz
cGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0
KFdlYktpdERvd25sb2FkQ2xhc3MqIGRvd25sb2FkQ2xhc3MpCit7CisgICAgLyoKKyAgICAgKiBp
bXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCisgICAgICovCisgICAgR09iamVjdENs
YXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGRvd25sb2FkQ2xhc3MpOworICAgIG9i
amVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0X2Rvd25sb2FkX2Rpc3Bvc2U7CisgICAgb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rvd25sb2FkX2ZpbmFsaXplOworICAgIG9iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb3BlcnR5OworICAgIG9i
amVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG93bmxvYWRfc2V0X3Byb3BlcnR5Owor
CisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6OmVycm9yOgorICAgICAqIEBkb3dubG9h
ZDogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAY3Vy
cmVudF9ieXRlczogdGhlIGN1cnJlbnQgY291bnQgb2YgYnl0ZXMgZG93bmxvYWRlZAorICAgICAq
IEB0b3RhbF9ieXRlczogdGhlIHRvdGFsIGJ5dGVzIGNvdW50IGluIHRoZSBkb3dubG9hZGVkIGZp
bGUsIGFrYSBmaWxlIHNpemUuCisgICAgICoKKyAgICAgKiBJbmRpY2F0ZXMgYW4gZXJyb3IgaW4g
dGhlIGRvd25sb2FkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMS4yCisgICAgICovCisgICAg
d2Via2l0X2Rvd25sb2FkX3NpZ25hbHNbRVJST1JdID0gZ19zaWduYWxfbmV3KCJlcnJvciIsCisg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhkb3dubG9hZENsYXNzKSwKKyAgICAgICAgICAg
IChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRs
ZWQsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVB
Tl9fSU5UX0lOVF9TVFJJTkcsCisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAg
ICAgICAgIEdfVFlQRV9JTlQsCisgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAg
R19UWVBFX1NUUklORyk7CisKKyAgICAvKgorICAgICAqIHByb3BlcnRpZXMKKyAgICAgKi8KKwor
ICAgIC8qKgorICAgICogV2ViS2l0RG93bmxvYWQ6bmV0d29yay1yZXF1ZXN0CisgICAgKgorICAg
ICogVGhlICNXZWJLaXROZXR3b3JrUmVxdWVzdCBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhl
IGRvd25sb2FkLgorICAgICoKKyAgICAqIFNpbmNlOiAxLjEuMgorICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfTkVUV09SS19SRVFVRVNULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJuZXR3b3JrLXJlcXVlc3QiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk5ldHdvcmsgUmVxdWVzdCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiVGhlIG5ldHdvcmsgcmVxdWVzdCBmb3IgdGhlIFVSSSB0aGF0
IHNob3VsZCBiZSBkb3dubG9hZGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChHUGFyYW1GbGFncykoV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOmRl
c3RpbmF0aW9uLXVyaQorICAgICoKKyAgICAqIFRoZSBVUkkgb2YgdGhlIHNhdmUgbG9jYXRpb24g
Zm9yIHRoaXMgZG93bmxvYWQuCisgICAgKgorICAgICogU2luY2U6IDEuMS4yCisgICAgKi8KKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9ERVNUSU5BVElPTl9VUkksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc3RpbmF0aW9uLXVyaSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVzdGluYXRpb24gVVJJIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgZGVzdGluYXRpb24gVVJJIHdoZXJlIHRv
IHNhdmUgdGhlIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOnN1Z2dlc3RlZC1maWxlbmFt
ZQorICAgICoKKyAgICAqIFRoZSBmaWxlIG5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBz
YXZpbmcKKyAgICAqCisgICAgKiBTaW5jZTogMS4xLjIKKyAgICAqLworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1NVR0dFU1RFRF9GSUxFTkFNRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAic3VnZ2VzdGVkLWZpbGVuYW1lIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJTdWdnZXN0ZWQgRmlsZW5hbWUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBmaWxlbmFtZSBzdWdnZXN0ZWQgYXMgZGVmYXVs
dCB3aGVuIHNhdmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAvKioKKyAgICogV2ViS2l0RG93bmxvYWQ6cHJvZ3Jlc3M6CisgICAqCisgICAq
IERldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkLgorICAgKgor
ICAgKiBTaW5jZTogMS4xLjIKKyAgICovCisgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KG9iamVjdENsYXNzLCBQUk9QX1BST0dSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKCJwcm9ncmVzcyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2dyZXNzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGV0
ZXJtaW5lcyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgZG93bmxvYWQiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwgMS4wLCAx
LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25s
b2FkOmN1cnJlbnQtc2l6ZQorICAgICoKKyAgICAqIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYWxy
ZWFkeSBkb3dubG9hZGVkCisgICAgKgorICAgICogU2luY2U6IDEuMS4yCisgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnQtc2l6ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiQ3VycmVudCBTaXplIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgLyoqCisgICAgKiBXZWJLaXREb3dubG9hZDp0b3RhbC1zaXplCisgICAg
KgorICAgICogVGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUKKyAgICAqCisgICAgKiBTaW5jZTog
MS4xLjIKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NVUlJFTlRf
U0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191
aW50NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG90YWwtc2l6ZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgU2l6ZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHRvdGFsIHNpemUgb2YgdGhlIGZp
bGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShkb3dubG9hZENsYXNzLCBz
aXplb2YoV2ViS2l0RG93bmxvYWRQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b3dubG9hZF9pbml0KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXREb3du
bG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQp
OworICAgIGRvd25sb2FkLT5wcml2ID0gcHJpdjsKKworICAgIHByaXYtPmRvd25sb2FkX2NsaWVu
dCA9IG5ldyBEb3dubG9hZENsaWVudChkb3dubG9hZCk7CisgICAgcHJpdi0+Y3VycmVudF9zaXpl
ID0gMDsKKyAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEOwor
fQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9uZXc6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0
TmV0d29ya1JlcXVlc3QKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXREb3dubG9hZCBvYmpl
Y3QgZm9yIHRoZSBnaXZlbgorICogI1dlYktpdE5ldHdvcmtSZXF1ZXN0IG9iamVjdC4KKyAqCisg
KiBSZXR1cm5zOiB0aGUgbmV3ICNXZWJLaXREb3dubG9hZAorICoKKyAqIFNpbmNlOiAxLjEuMgor
ICovCitXZWJLaXREb3dubG9hZCogd2Via2l0X2Rvd25sb2FkX25ldyhXZWJLaXROZXR3b3JrUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCBOVUxM
KTsKKworICAgIHJldHVybiBXRUJLSVRfRE9XTkxPQUQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0RPV05MT0FELCAibmV0d29yay1yZXF1ZXN0IiwgcmVxdWVzdCwgTlVMTCkpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogdXJpLCBnYm9vbGVhbiBhcHBlbmQ9RkFMU0Up
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCBGQUxTRSk7CisKKyAgICBXZWJLaXRE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBHRmlsZSogZmlsZSA9
IGdfZmlsZV9uZXdfZm9yX3VyaSh1cmkpOworICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOworCisg
ICAgaWYgKGFwcGVuZCkKKyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IGdfZmlsZV9hcHBl
bmRfdG8oZmlsZSwgR19GSUxFX0NSRUFURV9OT05FLCBOVUxMLCAmZXJyb3IpOworICAgIGVsc2UK
KyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IGdfZmlsZV9yZXBsYWNlKGZpbGUsIE5VTEws
IFRSVUUsIEdfRklMRV9DUkVBVEVfTk9ORSwgTlVMTCwgJmVycm9yKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGZpbGUpOworCisgICAgaWYoZXJyb3IpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaGFuZGxl
ZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBX
RUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIGVycm9yLT5tZXNzYWdlLCAmaGFuZGxl
ZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybiBGQUxTRTsK
KyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25s
b2FkX2Nsb3NlX3N0cmVhbShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgaWYgKHByaXYtPm91
dHB1dF9zdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+b3V0cHV0X3N0cmVh
bSk7CisgICAgICAgIHByaXYtPm91dHB1dF9zdHJlYW0gPSBOVUxMOworICAgIH0KK30KKworLyoq
CisgKiB3ZWJraXRfZG93bmxvYWRfc3RhcnQ6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93
bmxvYWQKKyAqCisgKiBJbml0aWF0ZXMgdGhlIGRvd25sb2FkLiBOb3RpY2UgdGhhdCB5b3UgbXVz
dCBoYXZlIHNldCB0aGUKKyAqIGRlc3RpbmF0aW9uLXVyaSBwcm9wZXJ0eSBiZWZvcmUgY2FsbGlu
ZyB0aGlzIG1ldGhvZC4KKyAqCisgKiBTaW5jZTogMS4xLjIKKyAqLwordm9pZCB3ZWJraXRfZG93
bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXREb3dubG9h
ZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHBy
aXYtPmRlc3RpbmF0aW9uX3VyaSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT5zdGF0ZSA9
PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ1JFQVRFRCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChw
cml2LT50aW1lciA9PSBOVUxMKTsKKworICAgIGlmIChwcml2LT5yZXNvdXJjZV9oYW5kbGUpCisg
ICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkX2Ns
aWVudCk7CisgICAgZWxzZSB7CisgICAgICAgIC8qIEZJWE1FIHVzZSB0aGUgYWN0dWFsIHJlcXVl
c3Qgb2JqZWN0IHdoZW4gV2ViS2l0TmV0d29ya1JlcXVlc3QgaXMgZmluaXNoZWQuICovCisgICAg
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3Vy
aShwcml2LT5uZXR3b3JrX3JlcXVlc3QpKTsKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxl
ID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1ZXN0LCBwcml2LT5kb3dubG9hZF9jbGllbnQs
IDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAgIH0KKworICAgIHByaXYtPnRpbWVyID0gZ190
aW1lcl9uZXcgKCk7CisgICAgd2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoZG93
bmxvYWQsIHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25s
b2FkX2NhbmNlbDoKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIENh
bmNlbHMgdGhlIGRvd25sb2FkLiBDYWxsaW5nIHRoaXMgd2lsbCBub3QgZnJlZSB0aGUKKyAqICNX
ZWJLaXREb3dubG9hZCBvYmplY3QsIHNvIHlvdSBzdGlsbCBuZWVkIHRvIGNhbGwKKyAqIGdfb2Jq
ZWN0X3VucmVmKCkgb24gaXQsIGlmIHlvdSBhcmUgdGhlIG93bmVyIG9mIGEgcmVmZXJlbmNlLiBO
b3RpY2UKKyAqIHRoYXQgY2FuY2VsbGluZyB0aGUgZG93bmxvYWQgcHJvdm9rZXMgdGhlIGVtaXNz
aW9uIG9mIHRoZQorICogV2ViS2l0RG93bmxvYWQ6OmVycm9yIHNpZ25hbCwgcmVwb3J0aW5nIHRo
YXQgdGhlIGRvd25sb2FkIHdhcworICogY2FuY2VsbGVkLgorICoKKyAqIFNpbmNlOiAxLjEuMgor
ICovCit2b2lkIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7
CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKwor
ICAgIGdfdGltZXJfc3RvcChwcml2LT50aW1lcik7CisKKyAgICBpZiAocHJpdi0+cmVzb3VyY2Vf
aGFuZGxlKQorICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOworCisgICAg
cHJpdi0+c3RhdGUgPSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVEOworCisgICAgZ2Jv
b2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJv
ciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiwgIlVzZXIgY2Fu
Y2VsbGVkIHRoZSBkb3dubG9hZCIsICZoYW5kbGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93
bmxvYWRfZ2V0X3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAq
IENvbnZlbmllbmNlIG1ldGhvZCB0byByZXRyaWV2ZSB0aGUgVVJJIGZyb20gdGhlCisgKiAjV2Vi
S2l0TmV0d29ya1JlcXVlc3Qgd2hpY2ggaXMgYmVpbmcgZG93bmxvYWRlZC4KKyAqCisgKiBSZXR1
cm5zOiB0aGUgdXJpCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJr
aXRfZG93bmxvYWRfZ2V0X3VyaShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisK
KyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBy
ZXR1cm4gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVz
dCk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3Q6Cisg
KiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBSZXRyaWV2ZXMgdGhlICNX
ZWJLaXROZXR3b3JrUmVxdWVzdCBvYmplY3QgdGhhdCBiYWNrcyB0aGUgZG93bmxvYWQKKyAqIHBy
b2Nlc3MuCisgKgorICogUmV0dXJuczogdGhlICNXZWJLaXROZXR3b3JrUmVxdWVzdCBpbnN0YW5j
ZQorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCitXZWJLaXROZXR3b3JrUmVxdWVzdCogd2Via2l0
X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCks
IE5VTEwpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnBy
aXY7CisgICAgcmV0dXJuIHByaXYtPm5ldHdvcmtfcmVxdWVzdDsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2Rvd25sb2FkX3NldF9yZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIC8qIEZJWE1FIFVzZSBXZWJL
aXROZXR3b3JrUmVzcG9uc2Ugd2hlbiBpdCdzIG1lcmdlZCAqLworICAgIFdlYktpdERvd25sb2Fk
UHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIHByaXYtPm5ldHdvcmtfcmVzcG9u
c2UgPSBuZXcgUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSk7Cit9CisKKy8qKgorICogd2Via2l0
X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWU6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2Vi
S2l0RG93bmxvYWQKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIGZpbGVuYW1lIHRoYXQgd2FzIHN1Z2dl
c3RlZCBieSB0aGUgc2VydmVyLCBvciB0aGUgb25lCisgKiBkZXJpdmVkIGJ5IFdlYktpdCBmcm9t
IHRoZSBVUkkuCisgKgorICogUmV0dXJuczogdGhlIHN1Z2dlc3RlZCBmaWxlbmFtZQorICoKKyAq
IFNpbmNlOiAxLjEuMgorICovCitjb25zdCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9zdWdn
ZXN0ZWRfZmlsZW5hbWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAg
V2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJu
IHByaXYtPnN1Z2dlc3RlZF9maWxlbmFtZTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uX3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAor
ICoKKyAqIE9idGFpbnMgdGhlIFVSSSB0byB3aGljaCB0aGUgZG93bmxvYWRlZCBmaWxlIHdpbGwg
YmUgd3JpdHRlbi4gVGhpcworICogbXVzdCBoYXZlIGJlZW4gc2V0IGJ5IHRoZSBhcHBsaWNhdGlv
biBiZWZvcmUgY2FsbGluZworICogd2Via2l0X2Rvd25sb2FkX3N0YXJ0KCksIGFuZCBtYXkgYmUg
JU5VTEwuCisgKgorICogUmV0dXJuczogdGhlIGRlc3RpbmF0aW9uIFVSSSBvciAlTlVMTAorICoK
KyAqIFNpbmNlOiAxLjEuMgorICovCitjb25zdCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9k
ZXN0aW5hdGlvbl91cmkoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAg
V2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJu
IHByaXYtPmRlc3RpbmF0aW9uX3VyaTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfc2V0
X2Rlc3RpbmF0aW9uX3VyaToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICog
QGRlc3RpbmF0aW9uX3VyaTogdGhlIGRlc3RpbmF0aW9uIFVSSQorICoKKyAqIERlZmluZXMgdGhl
IFVSSSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNhdmUgdGhlIGRvd25sb2FkZWQgZmlsZSB0by4K
KyAqCisgKiBTaW5jZTogMS4xLjIKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3Rp
bmF0aW9uX3VyaShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5h
dGlvbl91cmkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93
bmxvYWQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRlc3RpbmF0aW9uX3VyaSk7CisKKyAgICBX
ZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAocHJp
di0+ZGVzdGluYXRpb25fdXJpICYmICFzdHJjbXAocHJpdi0+ZGVzdGluYXRpb25fdXJpLCBkZXN0
aW5hdGlvbl91cmkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRSBjYW4gd2UgaGF2
ZSBhIGJldHRlciBjaGVjaz8gKi8KKyAgICBpZiAocHJpdi0+c3RhdGUgIT0gV0VCS0lUX0RPV05M
T0FEX1NUQVRFX0NSRUFURUQgJiYgcHJpdi0+c3RhdGUgIT0gV0VCS0lUX0RPV05MT0FEX1NUQVRF
X0NBTkNFTExFRCkgeworICAgICAgICBBU1NFUlQocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKwor
ICAgICAgICBnYm9vbGVhbiBkb3dubG9hZGluZyA9IHByaXYtPm91dHB1dF9zdHJlYW0gIT0gTlVM
TDsKKyAgICAgICAgaWYgKGRvd25sb2FkaW5nKQorICAgICAgICAgICAgd2Via2l0X2Rvd25sb2Fk
X2Nsb3NlX3N0cmVhbShkb3dubG9hZCk7CisKKyAgICAgICAgR0ZpbGUqIHNyYyA9IGdfZmlsZV9u
ZXdfZm9yX3VyaShwcml2LT5kZXN0aW5hdGlvbl91cmkpOworICAgICAgICBHRmlsZSogZGVzdCA9
IGdfZmlsZV9uZXdfZm9yX3VyaShkZXN0aW5hdGlvbl91cmkpOworICAgICAgICBHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfbW92ZShzcmMsIGRlc3QsIEdfRklMRV9DT1BZ
X0JBQ0tVUCwgTlVMTCwgTlVMTCwgTlVMTCwgJmVycm9yKTsKKworICAgICAgICBnX29iamVjdF91
bnJlZihzcmMpOworICAgICAgICBnX29iamVjdF91bnJlZihkZXN0KTsKKworICAgICAgICBnX2Zy
ZWUocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICAgICAgcHJpdi0+ZGVzdGluYXRpb25fdXJp
ID0gZ19zdHJkdXAoZGVzdGluYXRpb25fdXJpKTsKKworICAgICAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgICAgIGdib29sZWFuIGhhbmRsZWQ7CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5B
VElPTiwgZXJyb3ItPm1lc3NhZ2UsICZoYW5kbGVkKTsKKyAgICAgICAgICAgIGdfZXJyb3JfZnJl
ZShlcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZG93bmxvYWRpbmcpIHsKKyAgICAgICAgICAgIGlmICghd2Via2l0X2Rvd25sb2FkX29wZW5fc3Ry
ZWFtX2Zvcl91cmkoZG93bmxvYWQsIGRlc3RpbmF0aW9uX3VyaSwgVFJVRSkpIHsKKyAgICAgICAg
ICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
Z19mcmVlKHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7CisgICAgICBwcml2LT5kZXN0aW5hdGlvbl91
cmkgPSBnX3N0cmR1cChkZXN0aW5hdGlvbl91cmkpOworICAgIH0KKworICAgIC8qIG9ubHkgbm90
aWZ5IGNoYW5nZSBpZiBldmVyeXRoaW5nIHdlbnQgZmluZSAqLworICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChkb3dubG9hZCksICJkZXN0aW5hdGlvbi11cmkiKTsKK30KKworLyoqCisgKiB3
ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXRlOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25s
b2FkCisgKgorICogT2J0YWlucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZG93bmxvYWQsIGFz
IGEKKyAqICNXZWJLaXREb3dubG9hZFN0YXRlLgorICoKKyAqIFJldHVybnM6IHRoZSBjdXJyZW50
ICNXZWJLaXREb3dubG9hZFN0YXRlCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK1dlYktpdERv
d25sb2FkU3RhdGUgd2Via2l0X2Rvd25sb2FkX2dldF9zdGF0ZSAoV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChk
b3dubG9hZCksIFdFQktJVF9ET1dOTE9BRF9TVEFURV9FUlJPUik7CisKKyAgICBXZWJLaXREb3du
bG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+c3Rh
dGU7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplOgorICogQGRv
d25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICogUmV0dXJucyB0aGUgZXhwZWN0ZWQg
dG90YWwgc2l6ZSBvZiB0aGUgZG93bmxvYWQuIFRoaXMgaXMgZXhwZWN0ZWQKKyAqIGJlY2F1c2Ug
dGhlIHNlcnZlciBtYXkgcHJvdmlkZSBpbmNvcnJlY3Qgb3IgbWlzc2luZworICogQ29udGVudC1M
ZW5ndGguIE5vdGljZSB0aGF0IHRoaXMgbWF5IGdyb3cgb3ZlciB0aW1lLCBhcyBpdCB3aWxsIGJl
CisgKiBhbHdheXMgdGhlIHNhbWUgYXMgY3VycmVudF9zaXplIGluIHRoZSBjYXNlcyB3aGVyZSBj
dXJyZW50IHNpemUKKyAqIHN1cnBhc3NlcyBpdC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZXhwZWN0
ZWQgdG90YWwgc2l6ZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlCisgKgorICogU2luY2U6IDEuMS4y
CisgKi8KK2d1aW50NjQgd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplIChXZWJLaXREb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RP
V05MT0FEKGRvd25sb2FkKSwgMCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYg
PSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAoIXByaXYtPm5ldHdvcmtfcmVzcG9uc2UpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIE1BWChwcml2LT5jdXJyZW50X3NpemUsIHByaXYt
Pm5ldHdvcmtfcmVzcG9uc2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKK30KKworLyoqCisg
KiB3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNX
ZWJLaXREb3dubG9hZAorICoKKyAqIEN1cnJlbnQgYWxyZWFkeSBkb3dubG9hZGVkIHNpemUuCisg
KgorICogUmV0dXJuczogdGhlIGFscmVhZHkgZG93bmxvYWRlZCBzaXplCisgKgorICogU2luY2U6
IDEuMS4yCisgKi8KK2d1aW50NjQgd2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgKFdl
YktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0
ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIHJldHVybiBwcml2LT5jdXJyZW50X3NpemU7
Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzczoKKyAqIEBkb3dubG9h
ZDogYSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dy
ZXNzIG9mIHRoZSBkb3dubG9hZC4KKyAqCisgKiBSZXR1cm5zOiBhICNnZG91YmxlIHJhbmdpbmcg
ZnJvbSAwLjAgdG8gMS4wLgorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCitnZG91YmxlIHdlYmtp
dF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDEuMCk7
CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAg
ICBnZG91YmxlIHRvdGFsX3NpemUgPSAoZ2RvdWJsZSlwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5l
eHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKworICAgIGlmICh0b3RhbF9zaXplID09IDApCisgICAg
ICAgIHJldHVybiAxLjA7CisKKyAgICByZXR1cm4gKChnZG91YmxlKXByaXYtPmN1cnJlbnRfc2l6
ZSkgLyB0b3RhbF9zaXplOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNl
ZF90aW1lOgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIEVsYXBzZWQg
dGltZSBmb3IgdGhlIGRvd25sb2FkIGluIHNlY29uZHMsIGluY2x1ZGluZyBhbnkgZnJhY3Rpb25h
bAorICogcGFydC4gSWYgdGhlIGRvd25sb2FkIGlzIGZpbmlzaGVkLCBoYWQgYW4gZXJyb3Igb3Ig
d2FzIGNhbmNlbGxlZAorICogdGhpcyBpcyB0aGUgdGltZSBiZXR3ZWVuIGl0cyBzdGFydCBhbmQg
dGhlIGV2ZW50LgorICoKKyAqIFJldHVybnM6IHNlY29uZHMgc2luY2UgdGhlIGRvd25sb2FkIHdh
cyBzdGFydGVkLCBhcyBhICNnZG91YmxlCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK2dkb3Vi
bGUgd2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUoV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3du
bG9hZCksIDAuMCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9h
ZC0+cHJpdjsKKyAgICByZXR1cm4gZ190aW1lcl9lbGFwc2VkKHByaXYtPnRpbWVyLCBOVUxMKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBX
ZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIGlmIChw
cml2LT5jdXJyZW50X3NpemUgPT0gMCkgeworICAgICAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9E
T1dOTE9BRF9TVEFURV9TVEFSVEVEOworICAgIH0KKworICAgIEFTU0VSVChwcml2LT5vdXRwdXRf
c3RyZWFtKTsKKworICAgIGdzaXplIGJ5dGVzX3dyaXR0ZW47CisgICAgR0Vycm9yICplcnJvciA9
IE5VTEw7CisKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKEdfT1VUUFVUX1NUUkVBTShw
cml2LT5vdXRwdXRfc3RyZWFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEs
IGxlbmd0aCwgJmJ5dGVzX3dyaXR0ZW4sIE5VTEwsICZlcnJvcik7CisKKyAgICBpZiAoZXJyb3Ip
IHsKKyAgICAgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJ
T04sIGVycm9yLT5tZXNzYWdlLCAmaGFuZGxlZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2LT5jdXJyZW50X3NpemUgKz0g
bGVuZ3RoOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJjdXJyZW50
LXNpemUiKTsKKworICAgIEFTU0VSVChwcml2LT5uZXR3b3JrX3Jlc3BvbnNlKTsKKyAgICBpZiAo
cHJpdi0+Y3VycmVudF9zaXplID4gcHJpdi0+bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCkpCisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCks
ICJ0b3RhbC1zaXplIik7CisKKyAgICAvKiBGSVhNRSB0aHJvdHRsZSB0aGUgbnVtYmVyIG9mIHVw
ZGF0ZXM/ICBzaG91bGQgd2UgcmVtb3ZlIHRoZQorICAgICAqIHByZXZpb3VzIGdfb2JqZWN0X25v
dGlmeSgpcyBpZiB3ZSBhcmUgZ29pbmcgdG8gdGhyb3R0bGUgdGhlCisgICAgICogcHJvZ3Jlc3Mg
dXBkYXRlcz8gKi8KKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAicHJv
Z3Jlc3MiKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRp
bmcoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9jbG9z
ZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0g
ZG93bmxvYWQtPnByaXY7CisKKyAgICBnX3RpbWVyX3N0b3AocHJpdi0+dGltZXIpOworICAgIHBy
aXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEOworCisgICAgZ19vYmpl
Y3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInByb2dyZXNzIik7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb3dubG9hZF9lcnJvcihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJl
YW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxv
YWQtPnByaXY7CisKKyAgICBnX3RpbWVyX3N0b3AocHJpdi0+dGltZXIpOworICAgIHByaXYtPnN0
YXRlID0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX0VSUk9SOworCisgICAgZ2Jvb2xlYW4gaGFuZGxl
ZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJ
VF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0
ZjgoKS5kYXRhKCksICZoYW5kbGVkKTsKK30KKworRG93bmxvYWRDbGllbnQ6OkRvd25sb2FkQ2xp
ZW50KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQp
Cit7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHdlYmtp
dF9kb3dubG9hZF9zZXRfcmVzcG9uc2UobV9kb3dubG9hZCwgcmVzcG9uc2UpOworfQorCit2b2lk
IERvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICB3ZWJraXRf
ZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShtX2Rvd25sb2FkLCBkYXRhLCBsZW5ndGgpOworfQorCit2
b2lkIERvd25sb2FkQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKikKK3sK
KyAgICB3ZWJraXRfZG93bmxvYWRfZmluaXNoZWRfbG9hZGluZyhtX2Rvd25sb2FkKTsKK30KKwor
dm9pZCBEb3dubG9hZENsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9lcnJvcihtX2Rvd25sb2Fk
LCBlcnJvcik7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VI
YW5kbGUqKQoreworICAgIC8qIEZJWE1FIHdoZW4gd2UgaGF2ZSB0aGUgbmV3IGZyYW1lIGxvYWRl
ciBzaWduYWxzIGFuZCBlcnJvciBoYW5kbGluZy4gKi8KKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikK
K3sKKyAgICAvKiBGSVhNRSB3aGVuIHdlIGhhdmUgdGhlIG5ldyBmcmFtZSBsb2FkZXIgc2lnbmFs
cyBhbmQgZXJyb3IgaGFuZGxpbmcuICovCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMGU4ZWM3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRvd25sb2FkLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2ls
dmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX0RPV05MT0FEX0gKKyNkZWZpbmUgV0VC
S0lUX0RPV05MT0FEX0gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfRE9XTkxPQUQgICAgICAgICAgICAod2Via2l0X2Rvd25sb2FkX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET1dOTE9BRChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWQpKQor
I2RlZmluZSBXRUJLSVRfRE9XTkxPQURfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkQ2xh
c3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRE9XTkxPQUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxPQUQpKQorI2RlZmluZSBX
RUJLSVRfSVNfRE9XTkxPQURfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkQ2xhc3MpKQorCit0eXBlZGVmIGVudW0gewor
ICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9FUlJPUiA9IC0xLAorICAgIFdFQktJVF9ET1dOTE9B
RF9TVEFURV9DUkVBVEVEID0gMCwKKyAgICBXRUJLSVRfRE9XTkxPQURfU1RBVEVfU1RBUlRFRCwK
KyAgICBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVELAorICAgIFdFQktJVF9ET1dOTE9B
RF9TVEFURV9GSU5JU0hFRAorfSBXZWJLaXREb3dubG9hZFN0YXRlOworCit0eXBlZGVmIGVudW0g
eworICAgIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiwKKyAgICBXRUJL
SVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sCisgICAgV0VCS0lUX0RPV05MT0FEX0VSUk9S
X05FVFdPUksKK30gV2ViS2l0RG93bmxvYWRFcnJvcjsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERvd25sb2FkUHJpdmF0ZSBXZWJLaXREb3dubG9hZFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0
RG93bmxvYWQgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgV2ViS2l0RG93
bmxvYWRQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIHsK
KyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0
dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwor
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQp
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rvd25sb2FkX2dldF90eXBlICAgICAg
ICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgord2Vi
a2l0X2Rvd25sb2FkX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Jl
cXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb3dubG9hZF9zdGFy
dCAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX2NhbmNlbCAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBj
b25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9hZF9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAg
KFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0TmV0
d29ya1JlcXVlc3QqCit3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdCAgICAgICAg
IChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdj
aGFyKgord2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUgICAgICAoV2ViS2l0
RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25fdXJpICAgICAgICAgKFdlYktpdERvd25sb2Fk
ICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX3Nl
dF9kZXN0aW5hdGlvbl91cmkgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2Fk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgKmRlc3RpbmF0aW9uX3VyaSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Vi
a2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzcyAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQg
ICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG93bmxvYWRf
Z2V0X2VsYXBzZWRfdGltZSAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxv
YWQpOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6
ZSAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJ
VF9BUEkgZ3VpbnQ2NAord2Via2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgICAgICAgICAg
ICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRE
b3dubG9hZFN0YXRlCit3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXRlICAgICAgICAgICAgICAgICAg
IChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCBjZTQ3MjZkLi45YTYwMmQ3IDEwMDY0
NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRl
Y2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaD4K
KyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVy
ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CkBAIC00
NCw5ICs0NSwxMyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAog
I2luY2x1ZGUgPGdsaWIuaD4KIAorY2xhc3MgRG93bmxvYWRDbGllbnQ7CisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogICAgIFdlYktpdFdlYlZpZXcqIGdldFZpZXdGcm9tRnJhbWUoV2ViS2l0V2ViRnJh
bWUqKTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCBlZTAxODk1Li5hY2Y4
ZmI3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMjYsNiArMjYsNyBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJ3ZWJraXRkb3dubG9hZC5oIgogI2lu
Y2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXRlbnVtdHlwZXMuaCIKICNp
bmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCkBAIC0xMzQsNiArMTM1LDcgQEAgZW51bSB7CiAgICAg
Q09QWV9DTElQQk9BUkQsCiAgICAgUEFTVEVfQ0xJUEJPQVJELAogICAgIENVVF9DTElQQk9BUkQs
CisgICAgRE9XTkxPQURfUkVRVUVTVEVELAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xMTE2
LDYgKzExMTgsMjcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2Vi
S2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBHX1RZUEVfUE9JTlRF
UiwKICAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJWaWV3Ojpkb3dubG9hZC1yZXF1ZXN0ZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2Jq
ZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBkb3dubG9hZDogdGhl
IG1lc3NhZ2UgdGV4dAorICAgICAqIEByZXR1cm46IFRSVUUgaWYgdGhlIGRvd25sb2FkIHdhcyBo
YW5kbGVkLgorICAgICAqCisgICAgICogQSBuZXcgRG93bmxvYWQgaXMgYmVpbmcgcmVxdWVzdGVk
LiBCeSBkZWZhdWx0LCBpZiB0aGUgc2lnbmFsIGlzCisgICAgICogbm90IGhhbmRsZWQsIHRoZSBk
b3dubG9hZCBpcyBjYW5jZWxsZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjIKKyAgICAg
Ki8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tET1dOTE9BRF9SRVFVRVNURURdID0gZ19z
aWduYWxfbmV3KCJkb3dubG9hZC1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAor
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAg
R19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNUKTsKKwogICAgIC8q
KgogICAgICAqIFdlYktpdFdlYlZpZXc6OmxvYWQtc3RhcnRlZDoKICAgICAgKiBAd2ViX3ZpZXc6
IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdG1hcnNoYWwubGlzdCBiL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5s
aXN0CmluZGV4IDg1OTJiNDUuLjNhYWYzMTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0
bWFyc2hhbC5saXN0CisrKyBiL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CkBAIC0xLDMg
KzEsNSBAQAorQk9PTEVBTjpJTlQsSU5ULFNUUklORworQk9PTEVBTjpPQkpFQ1QKIEJPT0xFQU46
T0JKRUNULE9CSkVDVCxPQkpFQ1QsT0JKRUNUCiBCT09MRUFOOk9CSkVDVCxPQkpFQ1QsU1RSSU5H
LE9CSkVDVAogQk9PTEVBTjpPQkpFQ1QsU1RSSU5HCi0tIAoxLjYuMi5yYzAKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28191</attachid>
            <date>2009-03-02 11:59:44 -0800</date>
            <delta_ts>2009-03-03 09:51:30 -0800</delta_ts>
            <desc>proposed implementation</desc>
            <filename>0001-Implement-download-and-provide-a-nice-object-wrappi.patch</filename>
            <type>text/plain</type>
            <size>44137</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSBjM2I1OTgyNGNmZjMyOGFhM2M1MGNkZmI4M2UxMDNhOGEzYmFiNTI2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGtvdkBrb3YuZXRpLmJy
PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDA5IDE4OjE4OjI0IC0wMjAwClN1YmplY3Q6IFtQQVRDSF0g
SW1wbGVtZW50IGRvd25sb2FkLCBhbmQgcHJvdmlkZSBhIG5pY2Ugb2JqZWN0IHdyYXBwaW5nIHRo
ZSBkb3dubG9hZAogcHJvY2VzcwoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwogR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiAuLi4vcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgICB8ICAgIDkgKy0KIFdlYktpdC9ndGsvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1NCArKwogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAgfCAgIDE3ICstCiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCB8ICAgMjggKy0K
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MSArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgICAgICAgICB8
ICAgIDMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwICAgICAgICAgICAg
ICAgfCAgNzg2ICsrKysrKysrKysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
b3dubG9hZC5oICAgICAgICAgICAgICAgICB8ICAxMTQgKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRwcml2YXRlLmggICAgICAgICAgICAgICAgICB8ICAgIDUgKwogV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICAgICAgICAgfCAgIDIzICsKIFdlYktpdC9ndGsv
d2Via2l0bWFyc2hhbC5saXN0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAxNCBmaWxl
cyBjaGFuZ2VkLCAxMDU1IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaAoKZGlmZiAtLWdpdCBh
L0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyZTI5ODkwLi45OTA0MWRiIDEwMDY0NAotLS0g
YS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTMgQEAKIDIwMDktMDMtMDIg
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyBmaWxlcyByZWxhdGVk
IHRvIFdlYktpdERvd25sb2FkIHRvIHRoZSBHVEsrIHBvcnQuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKworMjAwOS0wMy0wMiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21l
Lm9yZz4KKwogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeDsgYWRkaW5nIG1pc3NpbmcgZmls
ZXMgdG8gRVhUUkFfRElTVCwgc28gdGhhdAogICAgICAgICB0aGV5IHNob3cgdXAgaW4gdGhlIHRh
cmJhbGwuCiAKZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5k
ZXggYjA1MGM0Yy4uZDBlMDk2YyAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05V
bWFrZWZpbGUuYW0KQEAgLTMwNCw2ICszMDQsNyBAQCBlbmRpZgogd2Via2l0Z3RrX2hfYXBpICs9
IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZGVmaW5lcy5oIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oIFwKIAlX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAlXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR2ZXJzaW9uLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tm
b3J3YXJkbGlzdC5oIFwKQEAgLTM0OCw2ICszNDksNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5jcHAgXAogCVdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmNwcCBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRkb3dubG9hZC5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIFwK
IAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5jcHAKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZTIyODRl
Li42MjcwYTgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDE2IEBACiAyMDA5LTAzLTAyICBHdXN0YXZvIE5vcm9uaGEgU2ls
dmEgIDxnbnNAZ25vbWUub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1ha2UgdGhlIFNvdXAgYmFja2VuZCBhYmxlIHRvIGhhbmRsZSByZXF1ZXN0
cyB3aXRob3V0IGEgZnJhbWUsCisgICAgICAgIHNpbmNlIHdlIG1heSBoYXZlIHN1Y2ggdGhpbmdz
IG5vdyB0aGF0IHdlIHN1cHBvcnQgZG93bmxvYWRzLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQpOgorCisyMDA5LTAzLTAyICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxn
bnNAZ25vbWUub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4OyBhZGRpbmcgbWlz
c2luZyBmaWxlcyB0byBFWFRSQV9ESVNULCBzbyB0aGF0CiAgICAgICAgIHRoZXkgc2hvdyB1cCBp
biB0aGUgdGFyYmFsbC4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggMWNhNjU3Zi4uMDZlZGYyMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3Bw
CkBAIC01NDUsOSArNTQ1LDEyIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBm
cmFtZSkKIHsKICAgICBBU1NFUlQoIWQtPm1fbXNnKTsKIAotICAgIC8vIElmIHdlIGFyZSBubyBs
b25nZXIgYXR0YWNoZWQgdG8gYSBQYWdlLCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkIGxvYWQg
ZnJvbSBhbgotICAgIC8vIG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQu
Ci0gICAgaWYgKCFmcmFtZS0+cGFnZSgpKQorCisgICAgLy8gVGhlIGZyYW1lIGNvdWxkIGJlIG51
bGwgaXMgdGhlIFJlc291cmNlSGFuZGxlIGlzIG5vdCBhc3NvY2lhdGVkIHRvIGFueQorICAgIC8v
IEZyYW1lLCBpLmUuIGlmIHdlIGFyZSBkb3dubG9hZGluZyBhIGZpbGUuCisgICAgLy8gSWYgdGhl
IGZyYW1lIGlzIG5vdCBudWxsIGJ1dCB0aGUgcGFnZSBpcyBudWxsIHRoaXMgbXVzdCBiZSBhbiBh
dHRlbXB0ZWQKKyAgICAvLyBsb2FkIGZyb20gYW4gb25VbmxvYWQgaGFuZGxlciwgc28gbGV0J3Mg
anVzdCBibG9jayBpdC4KKyAgICBpZiAoZnJhbWUgJiYgIWZyYW1lLT5wYWdlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEtVUkwgdXJsID0gcmVxdWVzdCgpLnVybCgpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA2
NTgyM2MxLi44ZGZkMWRjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDA5LTAzLTAyICBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBkb3dubG9hZCwgYW5kIHByb3ZpZGUg
YSBuaWNlIG9iamVjdCB3cmFwcGluZyB0aGUKKyAgICAgICAgZG93bmxvYWQgcHJvY2Vzcy4gSW5p
dGlhbCB3b3JrIGRvbmUgYnkgTWFyY28gQmFyaXNpb25lIGFuZAorICAgICAgICBQaWVycmUtTHVj
IEJlYXVkb2luIGZvciBDb2xsYWJvcmEuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250
ZXh0TWVudUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50
Ojpkb3dubG9hZFVSTCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZCk6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdC5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRkZWZpbmVz
Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDogQWRkZWQuCisgICAgICAg
IChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjopOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJp
dmF0ZTo6d2Via2l0X2Rvd25sb2FkX2Rpc3Bvc2UpOgorICAgICAgICAoX1dlYktpdERvd25sb2Fk
UHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX2ZpbmFsaXplKToKKyAgICAgICAgKF9XZWJLaXREb3du
bG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfcHJvcGVydHkpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX3NldF9wcm9wZXJ0eSk6CisgICAg
ICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfY2xhc3NfaW5pdCk6
CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfaW5pdCk6
CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfbmV3KToK
KyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9vcGVuX3N0
cmVhbV9mb3JfdXJpKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9k
b3dubG9hZF9jbG9zZV9zdHJlYW0pOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6
d2Via2l0X2Rvd25sb2FkX3N0YXJ0KToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6
OndlYmtpdF9kb3dubG9hZF9jYW5jZWwpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0
ZTo6d2Via2l0X2Rvd25sb2FkX2dldF91cmkpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJp
dmF0ZTo6d2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6d2Via2l0X2Rvd25sb2FkX3NldF9yZXNwb25zZSk6CisgICAg
ICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X3N1Z2dlc3Rl
ZF9maWxlbmFtZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93
bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2
YXRlOjp3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaSk6CisgICAgICAgIChfV2Vi
S2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXRlKToKKyAgICAgICAg
KF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZSk6
CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93bmxvYWRfZ2V0X2N1
cnJlbnRfc2l6ZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjp3ZWJraXRfZG93
bmxvYWRfZ2V0X3Byb2dyZXNzKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6Ondl
YmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lKToKKyAgICAgICAgKF9XZWJLaXREb3dubG9h
ZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9yZWNlaXZlZF9kYXRhKToKKyAgICAgICAgKF9XZWJL
aXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9maW5pc2hlZF9sb2FkaW5nKToKKyAg
ICAgICAgKF9XZWJLaXREb3dubG9hZFByaXZhdGU6OndlYmtpdF9kb3dubG9hZF9lcnJvcik6Cisg
ICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpEb3dubG9hZENsaWVudDo6RG93bmxvYWRD
bGllbnQpOgorICAgICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6RG93bmxvYWRDbGllbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChfV2ViS2l0RG93bmxvYWRQcml2YXRlOjpE
b3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoX1dlYktpdERvd25sb2Fk
UHJpdmF0ZTo6RG93bmxvYWRDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoX1dl
YktpdERvd25sb2FkUHJpdmF0ZTo6RG93bmxvYWRDbGllbnQ6OmRpZEZhaWwpOgorICAgICAgICAo
X1dlYktpdERvd25sb2FkUHJpdmF0ZTo6RG93bmxvYWRDbGllbnQ6Ondhc0Jsb2NrZWQpOgorICAg
ICAgICAoX1dlYktpdERvd25sb2FkUHJpdmF0ZTo6RG93bmxvYWRDbGllbnQ6OmNhbm5vdFNob3dV
UkwpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRkb3dubG9hZC5oOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKiB3ZWJraXRtYXJzaGFsLmxpc3Q6CisKIDIwMDktMDMtMDEgIEphbiBN
aWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgSG9sZ2VyIEZyZXl0aGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nv
bnRleHRNZW51Q2xpZW50R3RrLmNwcAppbmRleCA0OTAzNzBjLi40MmQ0ODEzIDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAorKysg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDYgKzIxLDcgQEAKICNpbmNsdWRlICJDb250ZXh0
TWVudS5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50R3RrLmgiCiAKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIktVUkwuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTYzLDcgKzE2NSwyMCBAQCB2b2lkIENv
bnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0q
LCBjb25zdCBDb250ZXh0TQogCiB2b2lkIENvbnRleHRNZW51Q2xpZW50Ojpkb3dubG9hZFVSTChj
b25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogbmV0d29ya19yZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXco
dXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCA9IHdlYmtpdF9kb3dubG9hZF9uZXcobmV0d29ya19yZXF1ZXN0KTsKKyAgICBnX29iamVjdF91
bnJlZihuZXR3b3JrX3JlcXVlc3QpOworCisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwgZG93bmxv
YWQsICZoYW5kbGVkKTsKKworICAgIGlmICghaGFuZGxlZCkgeworICAgICAgICB3ZWJraXRfZG93
bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2Via2l0X2Rvd25sb2FkX3N0YXJ0KGRv
d25sb2FkKTsKIH0KIAogdm9pZCBDb250ZXh0TWVudUNsaWVudDo6Y29weUltYWdlVG9DbGlwYm9h
cmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IDQwNDQwOTAuLmRiZTc4YWYgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
CisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
CkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4g
PGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC00MCw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNzc0LDkgKzc3Niwx
MyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJl
c291cmNlRXJyb3ImKQogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1k
b25lIiwgZmFsc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZChSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93
bmxvYWQoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIHdlIGNvdWxkIHJldXNlIHRoZSBzYW1lIGhh
bmRsZSwgYnV0IG91ciByZXBsYWNpbmcgb2YgdGhlCisgICAgLy8gY2xpZW50IHNlZW1zIHRvIG1h
a2UgdGhpcyBpbXBvc3NpYmxlOyB0aGUgbWFpbiBsb2FkIGZhaWxzCisgICAgLy8gYW5kIGlzIHN0
b3BwZWQKKyAgICBoYW5kbGUtPmNhbmNlbCgpOworICAgIHN0YXJ0RG93bmxvYWQocmVxdWVzdCk7
CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9yKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpCkBAIC04NjIsOSArODY4LDIzIEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVz
b3VyY2VFcnJvCiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25s
b2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFy
dERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBuZXR3b3JrUmVxdWVzdCA9IHdl
YmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25l
dyhuZXR3b3JrUmVxdWVzdCk7CisgICAgZ19vYmplY3RfdW5yZWYobmV0d29ya1JlcXVlc3QpOwor
CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7Cisg
ICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUodmlldywgImRv
d25sb2FkLXJlcXVlc3RlZCIsIGRvd25sb2FkLCAmaGFuZGxlZCk7CisKKyAgICBpZiAoIWhhbmRs
ZWQpIHsKKyAgICAgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAgICAg
IGdfb2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRleCA4Yzg2OGEyLi5k
MzM0MDQ3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAorKysgYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR2ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2ViaW5zcGVjdG9yLmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
ZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggZjk0ZTcx
MC4uYjBhYjVlOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtNjgsNiArNjgsOSBA
QCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViV2luZG93RmVhdHVyZXNDbGFzcyBXZWJLaXRXZWJX
aW5kb3dGZWF0dXJlc0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0
V2ViVmlldzsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2ViS2l0V2ViVmll
d0NsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWQgV2ViS2l0RG93bmxvYWQ7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRDbGFzcyBXZWJLaXREb3dubG9hZENsYXNz
OworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGRvd25sb2FkLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDFhMGZhCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEs
Nzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTm9uY29w
eWFibGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRl
ICJ3ZWJraXRkb3dubG9hZC5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRl
IDxnbGliL2dzdGRpby5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK2V4dGVybiAiQyIgeworCitjbGFzcyBEb3dubG9hZENsaWVudCA6IE5v
bmNvcHlhYmxlLCBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgRG93bmxvYWRDbGllbnQoV2ViS2l0RG93bmxvYWQqKTsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFdlYktpdERvd25sb2FkKiBtX2Rvd25sb2FkOworfTsKKworI2RlZmluZSBXRUJLSVRfRE9X
TkxPQURfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRQcml2YXRlKSkKKworc3Ry
dWN0IF9XZWJLaXREb3dubG9hZFByaXZhdGUgeworICAgIGdjaGFyKiBkZXN0aW5hdGlvbl91cmk7
CisgICAgZ2NoYXIqIHN1Z2dlc3RlZF9maWxlbmFtZTsKKyAgICBndWludCBjdXJyZW50X3NpemU7
CisgICAgR1RpbWVyKiB0aW1lcjsKKyAgICBXZWJLaXREb3dubG9hZFN0YXRlIHN0YXRlOworICAg
IEdGaWxlT3V0cHV0U3RyZWFtKiBvdXRwdXRfc3RyZWFtOworICAgIERvd25sb2FkQ2xpZW50KiBk
b3dubG9hZF9jbGllbnQ7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIG5ldHdvcmtfcmVxdWVz
dDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBuZXR3b3JrX3Jlc3BvbnNlOworICAg
IFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gcmVzb3VyY2VfaGFuZGxlOworfTsKKwor
ZW51bSB7CisgICAgLyogbm9ybWFsIHNpZ25hbHMgKi8KKyAgICBFUlJPUiwKKyAgICBMQVNUX1NJ
R05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF9kb3dubG9hZF9zaWduYWxzW0xBU1RfU0lH
TkFMXSA9IHsgMCwgfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9ORVRXT1JL
X1JFUVVFU1QsCisgICAgUFJPUF9ERVNUSU5BVElPTl9VUkksCisgICAgUFJPUF9TVUdHRVNURURf
RklMRU5BTUUsCisgICAgUFJPUF9QUk9HUkVTUywKKyAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAg
ICBQUk9QX1RPVEFMX1NJWkUsCit9OworCitHX0RFRklORV9UWVBFKFdlYktpdERvd25sb2FkLCB3
ZWJraXRfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93
bmxvYWRfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0RG93bmxvYWRQcml2
YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBpZiAocHJpdi0+b3V0cHV0X3N0cmVh
bSkgeworICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vdXRwdXRfc3RyZWFtKTsKKyAgICAg
ICAgcHJpdi0+b3V0cHV0X3N0cmVhbSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHByaXYtPm5l
dHdvcmtfcmVxdWVzdCkgeworICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5uZXR3b3JrX3Jl
cXVlc3QpOworICAgICAgICBwcml2LT5uZXR3b3JrX3JlcXVlc3QgPSBOVUxMOworICAgIH0KKwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5kaXNwb3Nl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RP
V05MT0FEKG9iamVjdCk7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxv
YWQtPnByaXY7CisKKyAgICAvKiBXZSBkb24ndCBjYWxsIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwo
KSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZW1pdAorICAgICAqIHNpZ25hbHMgd2hlbiBmaW5h
bGl6aW5nIGFuIG9iamVjdC4gKi8KKyAgICBpZiAocHJpdi0+cmVzb3VyY2VfaGFuZGxlKSB7Cisg
ICAgICAgIGlmIChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfU1RBUlRFRCkg
eworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlLT5zZXRDbGllbnQoMCk7CisgICAg
ICAgICAgICBwcml2LT5yZXNvdXJjZV9oYW5kbGUtPmNhbmNlbCgpOworICAgICAgICB9CisgICAg
ICAgIHByaXYtPnJlc291cmNlX2hhbmRsZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgZGVsZXRl
IHByaXYtPmRvd25sb2FkX2NsaWVudDsKKyAgICBkZWxldGUgcHJpdi0+bmV0d29ya19yZXNwb25z
ZTsKKworICAgIGdfdGltZXJfZGVzdHJveShwcml2LT50aW1lcik7CisKKyAgICBnX2ZyZWUocHJp
di0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICBnX2ZyZWUocHJpdi0+c3VnZ2VzdGVkX2ZpbGVuYW1l
KTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb3dubG9hZF9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lU
X0RPV05MT0FEKG9iamVjdCk7CisKKyAgICBzd2l0Y2gocHJvcF9pZCkgeworICAgIGNhc2UgUFJP
UF9ORVRXT1JLX1JFUVVFU1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3QoZG93bmxvYWQpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0RFU1RJTkFUSU9OX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9h
ZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1VHR0VTVEVEX0ZJTEVOQU1FOgor
ICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfc3Vn
Z2VzdGVkX2ZpbGVuYW1lKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9QUk9HUkVTUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG93
bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DVVJSRU5UX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Vi
a2l0X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUoZG93bmxvYWQpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1RPVEFMX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2
YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKGRvd25sb2FkKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb3dubG9hZF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
X2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKyAgICBXZWJL
aXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKyAgICBXZWJL
aXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIHN3aXRjaChw
cm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05FVFdPUktfUkVRVUVTVDoKKyAgICAgICAgcHJpdi0+
bmV0d29ya19yZXF1ZXN0ID0gKFdlYktpdE5ldHdvcmtSZXF1ZXN0KilnX3ZhbHVlX2R1cF9vYmpl
Y3QodmFsdWUpOworICAgICAgICAvKiBUaGlzIGlzIHNhZmUgYXMgbmV0d29yay1yZXF1ZXN0IGlz
IGEgY29uc3RydWN0IG9ubHkgcHJvcGVydHkgYW5kCisgICAgICAgICAqIHN1Z2dlc3RlZF9maWxl
bmFtZSBpcyBpbml0aWFsbHkgbnVsbC4KKyAgICAgICAgICovCisgICAgICAgIHByaXYtPnN1Z2dl
c3RlZF9maWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUod2Via2l0X25ldHdvcmtfcmVxdWVz
dF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfREVTVElOQVRJT05fVVJJOgorICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rl
c3RpbmF0aW9uX3VyaShkb3dubG9hZCwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KFdlYktpdERvd25sb2FkQ2xhc3MqIGRvd25s
b2FkQ2xhc3MpCit7CisgICAgLyoKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBt
ZXRob2RzCisgICAgICovCisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKGRvd25sb2FkQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0
X2Rvd25sb2FkX2Rpc3Bvc2U7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rv
d25sb2FkX2ZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG93bmxvYWRfZ2V0X3Byb3BlcnR5OworICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG93bmxvYWRfc2V0X3Byb3BlcnR5OworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93
bmxvYWQ6OmVycm9yOgorICAgICAqIEBkb3dubG9hZDogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUg
c2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAY3VycmVudF9ieXRlczogdGhlIGN1cnJlbnQgY291
bnQgb2YgYnl0ZXMgZG93bmxvYWRlZAorICAgICAqIEB0b3RhbF9ieXRlczogdGhlIHRvdGFsIGJ5
dGVzIGNvdW50IGluIHRoZSBkb3dubG9hZGVkIGZpbGUsIGFrYSBmaWxlIHNpemUuCisgICAgICoK
KyAgICAgKiBJbmRpY2F0ZXMgYW4gZXJyb3IgaW4gdGhlIGRvd25sb2FkLgorICAgICAqCisgICAg
ICogU2luY2U6IDEuMS4yCisgICAgICovCisgICAgd2Via2l0X2Rvd25sb2FkX3NpZ25hbHNbRVJS
T1JdID0gZ19zaWduYWxfbmV3KCJlcnJvciIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
Uyhkb3dubG9hZENsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JV
Tl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBn
X3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAg
ICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fSU5UX0lOVF9TVFJJTkcsCisgICAgICAg
ICAgICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAgICAgICAgIEdfVFlQRV9JTlQsCisgICAgICAg
ICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CisKKyAgICAvKgor
ICAgICAqIHByb3BlcnRpZXMKKyAgICAgKi8KKworICAgIC8qKgorICAgICogV2ViS2l0RG93bmxv
YWQ6bmV0d29yay1yZXF1ZXN0CisgICAgKgorICAgICogVGhlICNXZWJLaXROZXR3b3JrUmVxdWVz
dCBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRvd25sb2FkLgorICAgICoKKyAgICAqIFNp
bmNlOiAxLjEuMgorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTkVU
V09SS19SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXR3
b3JrLXJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ldHdv
cmsgUmVxdWVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG5l
dHdvcmsgcmVxdWVzdCBmb3IgdGhlIFVSSSB0aGF0IHNob3VsZCBiZSBkb3dubG9hZGVkIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX05FVFdPUktfUkVR
VUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFncyko
V0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAg
ICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOmRlc3RpbmF0aW9uLXVyaQorICAgICoKKyAgICAq
IFRoZSBVUkkgb2YgdGhlIHNhdmUgbG9jYXRpb24gZm9yIHRoaXMgZG93bmxvYWQuCisgICAgKgor
ICAgICogU2luY2U6IDEuMS4yCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9ERVNUSU5BVElPTl9VUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlc3RpbmF0aW9uLXVyaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiRGVzdGluYXRpb24gVVJJIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJUaGUgZGVzdGluYXRpb24gVVJJIHdoZXJlIHRvIHNhdmUgdGhlIGZpbGUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAqIFdl
YktpdERvd25sb2FkOnN1Z2dlc3RlZC1maWxlbmFtZQorICAgICoKKyAgICAqIFRoZSBmaWxlIG5h
bWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmcKKyAgICAqCisgICAgKiBTaW5jZTog
MS4xLjIKKyAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NVR0dFU1RF
RF9GSUxFTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VnZ2Vz
dGVkLWZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdWdn
ZXN0ZWQgRmlsZW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRo
ZSBmaWxlbmFtZSBzdWdnZXN0ZWQgYXMgZGVmYXVsdCB3aGVuIHNhdmluZyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAvKioKKyAgICogV2ViS2l0
RG93bmxvYWQ6cHJvZ3Jlc3M6CisgICAqCisgICAqIERldGVybWluZXMgdGhlIGN1cnJlbnQgcHJv
Z3Jlc3Mgb2YgdGhlIGRvd25sb2FkLgorICAgKgorICAgKiBTaW5jZTogMS4xLjIKKyAgICovCisg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX1BST0dS
RVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZG91
YmxlKCJwcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIlByb2dyZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiRGV0ZXJtaW5lcyB0aGUgY3VycmVudCBwcm9ncmVz
cyBvZiB0aGUgZG93bmxvYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMCwgMS4wLCAxLjAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICAvKioKKyAgICAqIFdlYktpdERvd25sb2FkOmN1cnJlbnQtc2l6ZQorICAgICoKKyAg
ICAqIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYWxyZWFkeSBkb3dubG9hZGVkCisgICAgKgorICAg
ICogU2luY2U6IDEuMS4yCisgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9DVVJSRU5UX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1
cnJlbnQtc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3VycmVu
dCBTaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbGVuZ3Ro
IG9mIHRoZSBkYXRhIGFscmVhZHkgZG93bmxvYWRlZCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgKiBX
ZWJLaXREb3dubG9hZDp0b3RhbC1zaXplCisgICAgKgorICAgICogVGhlIHRvdGFsIHNpemUgb2Yg
dGhlIGZpbGUKKyAgICAqCisgICAgKiBTaW5jZTogMS4xLjIKKyAgICAqLworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUk9QX0NVUlJFTlRfU0laRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidG90YWwtc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiVG90YWwgU2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiVGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShkb3dubG9hZENsYXNzLCBzaXplb2YoV2ViS2l0RG93bmxvYWRQcml2YXRl
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9pbml0KFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9XTkxPQURfR0VUX1BSSVZBVEUoZG93bmxvYWQpOworICAgIGRvd25sb2FkLT5wcml2ID0gcHJp
djsKKworICAgIHByaXYtPmRvd25sb2FkX2NsaWVudCA9IG5ldyBEb3dubG9hZENsaWVudChkb3du
bG9hZCk7CisgICAgcHJpdi0+Y3VycmVudF9zaXplID0gMDsKKyAgICBwcml2LT5zdGF0ZSA9IFdF
QktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9h
ZF9uZXc6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0TmV0d29ya1JlcXVlc3QKKyAqCisgKiBDcmVh
dGVzIGEgbmV3ICNXZWJLaXREb3dubG9hZCBvYmplY3QgZm9yIHRoZSBnaXZlbgorICogI1dlYktp
dE5ldHdvcmtSZXF1ZXN0IG9iamVjdC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3ICNXZWJLaXRE
b3dubG9hZAorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCitXZWJLaXREb3dubG9hZCogd2Via2l0
X2Rvd25sb2FkX25ldyhXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCBOVUxMKTsKKworICAgIHJldHVybiBXRUJLSVRfRE9X
TkxPQUQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPV05MT0FELCAibmV0d29yay1yZXF1ZXN0
IiwgcmVxdWVzdCwgTlVMTCkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rvd25sb2Fk
X29wZW5fc3RyZWFtX2Zvcl91cmkoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hh
ciogdXJpLCBnYm9vbGVhbiBhcHBlbmQ9RkFMU0UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwodXJpLCBGQUxTRSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3du
bG9hZC0+cHJpdjsKKyAgICBHRmlsZSogZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSh1cmkpOwor
ICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOworCisgICAgaWYgKGFwcGVuZCkKKyAgICAgICAgcHJp
di0+b3V0cHV0X3N0cmVhbSA9IGdfZmlsZV9hcHBlbmRfdG8oZmlsZSwgR19GSUxFX0NSRUFURV9O
T05FLCBOVUxMLCAmZXJyb3IpOworICAgIGVsc2UKKyAgICAgICAgcHJpdi0+b3V0cHV0X3N0cmVh
bSA9IGdfZmlsZV9yZXBsYWNlKGZpbGUsIE5VTEwsIFRSVUUsIEdfRklMRV9DUkVBVEVfTk9ORSwg
TlVMTCwgJmVycm9yKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOworCisgICAgaWYoZXJy
b3IpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElO
QVRJT04sIGVycm9yLT5tZXNzYWdlLCAmaGFuZGxlZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShl
cnJvcik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbShXZWJLaXREb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93
bmxvYWQtPnByaXY7CisgICAgaWYgKHByaXYtPm91dHB1dF9zdHJlYW0pIHsKKyAgICAgICAgZ19v
YmplY3RfdW5yZWYocHJpdi0+b3V0cHV0X3N0cmVhbSk7CisgICAgICAgIHByaXYtPm91dHB1dF9z
dHJlYW0gPSBOVUxMOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfc3RhcnQ6
CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBJbml0aWF0ZXMgdGhl
IGRvd25sb2FkLiBOb3RpY2UgdGhhdCB5b3UgbXVzdCBoYXZlIHNldCB0aGUKKyAqIGRlc3RpbmF0
aW9uLXVyaSBwcm9wZXJ0eSBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4KKyAqCisgKiBTaW5j
ZTogMS4xLjIKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRv
d25sb2FkKSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+
cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmRlc3RpbmF0aW9uX3VyaSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChwcml2LT5zdGF0ZSA9PSBXRUJLSVRfRE9XTkxPQURfU1RBVEVfQ1JF
QVRFRCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT50aW1lciA9PSBOVUxMKTsKKworICAg
IGlmIChwcml2LT5yZXNvdXJjZV9oYW5kbGUpCisgICAgICAgIHByaXYtPnJlc291cmNlX2hhbmRs
ZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkX2NsaWVudCk7CisgICAgZWxzZSB7CisgICAgICAg
IC8qIEZJWE1FIHVzZSB0aGUgYWN0dWFsIHJlcXVlc3Qgb2JqZWN0IHdoZW4gV2ViS2l0TmV0d29y
a1JlcXVlc3QgaXMgZmluaXNoZWQuICovCisgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShwcml2LT5uZXR3b3JrX3JlcXVlc3QpKTsK
KyAgICAgICAgcHJpdi0+cmVzb3VyY2VfaGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShy
ZXF1ZXN0LCBwcml2LT5kb3dubG9hZF9jbGllbnQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwor
ICAgIH0KKworICAgIHByaXYtPnRpbWVyID0gZ190aW1lcl9uZXcgKCk7CisgICAgd2Via2l0X2Rv
d25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoZG93bmxvYWQsIHByaXYtPmRlc3RpbmF0aW9uX3Vy
aSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2NhbmNlbDoKKyAqIEBkb3dubG9hZDog
dGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIENhbmNlbHMgdGhlIGRvd25sb2FkLiBDYWxsaW5n
IHRoaXMgd2lsbCBub3QgZnJlZSB0aGUKKyAqICNXZWJLaXREb3dubG9hZCBvYmplY3QsIHNvIHlv
dSBzdGlsbCBuZWVkIHRvIGNhbGwKKyAqIGdfb2JqZWN0X3VucmVmKCkgb24gaXQsIGlmIHlvdSBh
cmUgdGhlIG93bmVyIG9mIGEgcmVmZXJlbmNlLiBOb3RpY2UKKyAqIHRoYXQgY2FuY2VsbGluZyB0
aGUgZG93bmxvYWQgcHJvdm9rZXMgdGhlIGVtaXNzaW9uIG9mIHRoZQorICogV2ViS2l0RG93bmxv
YWQ6OmVycm9yIHNpZ25hbCwgcmVwb3J0aW5nIHRoYXQgdGhlIGRvd25sb2FkIHdhcworICogY2Fu
Y2VsbGVkLgorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCit2b2lkIHdlYmtpdF9kb3dubG9hZF9j
YW5jZWwoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZh
dGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKworICAgIGdfdGltZXJfc3RvcChwcml2LT50aW1l
cik7CisKKyAgICBpZiAocHJpdi0+cmVzb3VyY2VfaGFuZGxlKQorICAgICAgICBwcml2LT5yZXNv
dXJjZV9oYW5kbGUtPmNhbmNlbCgpOworCisgICAgcHJpdi0+c3RhdGUgPSBXRUJLSVRfRE9XTkxP
QURfU1RBVEVfQ0FOQ0VMTEVEOworCisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJP
Ul9DQU5DRUxMRURfQllfVVNFUiwgIlVzZXIgY2FuY2VsbGVkIHRoZSBkb3dubG9hZCIsICZoYW5k
bGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaToKKyAqIEBkb3dubG9h
ZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIENvbnZlbmllbmNlIG1ldGhvZCB0byByZXRy
aWV2ZSB0aGUgVVJJIGZyb20gdGhlCisgKiAjV2ViS2l0TmV0d29ya1JlcXVlc3Qgd2hpY2ggaXMg
YmVpbmcgZG93bmxvYWRlZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdXJpCisgKgorICogU2luY2U6
IDEuMS4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaShXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X0RPV05MT0FEKGRvd25sb2FkKSwgTlVMTCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUq
IHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICByZXR1cm4gd2Via2l0X25ldHdvcmtfcmVxdWVz
dF9nZXRfdXJpKHByaXYtPm5ldHdvcmtfcmVxdWVzdCk7Cit9CisKKy8qKgorICogd2Via2l0X2Rv
d25sb2FkX2dldF9uZXR3b3JrX3JlcXVlc3Q6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93
bmxvYWQKKyAqCisgKiBSZXRyaWV2ZXMgdGhlICNXZWJLaXROZXR3b3JrUmVxdWVzdCBvYmplY3Qg
dGhhdCBiYWNrcyB0aGUgZG93bmxvYWQKKyAqIHByb2Nlc3MuCisgKgorICogUmV0dXJuczogdGhl
ICNXZWJLaXROZXR3b3JrUmVxdWVzdCBpbnN0YW5jZQorICoKKyAqIFNpbmNlOiAxLjEuMgorICov
CitXZWJLaXROZXR3b3JrUmVxdWVzdCogd2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3JlcXVl
c3QoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0RG93bmxv
YWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHByaXYtPm5ldHdv
cmtfcmVxdWVzdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX3NldF9yZXNwb25z
ZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIC8qIEZJWE1FIFVzZSBXZWJLaXROZXR3b3JrUmVzcG9uc2Ugd2hlbiBpdCdz
IG1lcmdlZCAqLworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5w
cml2OworICAgIHByaXYtPm5ldHdvcmtfcmVzcG9uc2UgPSBuZXcgUmVzb3VyY2VSZXNwb25zZShy
ZXNwb25zZSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmls
ZW5hbWU6CisgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBSZXRyaWV2
ZXMgdGhlIGZpbGVuYW1lIHRoYXQgd2FzIHN1Z2dlc3RlZCBieSB0aGUgc2VydmVyLCBvciB0aGUg
b25lCisgKiBkZXJpdmVkIGJ5IFdlYktpdCBmcm9tIHRoZSBVUkkuCisgKgorICogUmV0dXJuczog
dGhlIHN1Z2dlc3RlZCBmaWxlbmFtZQorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCitjb25zdCBn
Y2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dO
TE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2
ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnN1Z2dlc3RlZF9maWxlbmFtZTsK
K30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaToKKyAqIEBk
b3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIE9idGFpbnMgdGhlIFVSSSB0byB3
aGljaCB0aGUgZG93bmxvYWRlZCBmaWxlIHdpbGwgYmUgd3JpdHRlbi4gVGhpcworICogbXVzdCBo
YXZlIGJlZW4gc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiBiZWZvcmUgY2FsbGluZworICogd2Via2l0
X2Rvd25sb2FkX3N0YXJ0KCksIGFuZCBtYXkgYmUgJU5VTEwuCisgKgorICogUmV0dXJuczogdGhl
IGRlc3RpbmF0aW9uIFVSSSBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjEuMgorICovCitjb25z
dCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkoV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dO
TE9BRChkb3dubG9hZCksIE5VTEwpOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2
ID0gZG93bmxvYWQtPnByaXY7CisgICAgcmV0dXJuIHByaXYtPmRlc3RpbmF0aW9uX3VyaTsKK30K
KworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaToKKyAqIEBkb3du
bG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICogQGRlc3RpbmF0aW9uX3VyaTogdGhlIGRlc3Rp
bmF0aW9uIFVSSQorICoKKyAqIERlZmluZXMgdGhlIFVSSSB0aGF0IHNob3VsZCBiZSB1c2VkIHRv
IHNhdmUgdGhlIGRvd25sb2FkZWQgZmlsZSB0by4KKyAqCisgKiBTaW5jZTogMS4xLjIKKyAqLwor
dm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbl91cmkpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKGRlc3RpbmF0aW9uX3VyaSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYg
PSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAocHJpdi0+ZGVzdGluYXRpb25fdXJpICYmICFzdHJj
bXAocHJpdi0+ZGVzdGluYXRpb25fdXJpLCBkZXN0aW5hdGlvbl91cmkpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvKiBGSVhNRSBjYW4gd2UgaGF2ZSBhIGJldHRlciBjaGVjaz8gKi8KKyAgICBp
ZiAocHJpdi0+c3RhdGUgIT0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NSRUFURUQgJiYgcHJpdi0+
c3RhdGUgIT0gV0VCS0lUX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCkgeworICAgICAgICBBU1NF
UlQocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsKKworICAgICAgICBnYm9vbGVhbiBkb3dubG9hZGlu
ZyA9IHByaXYtPm91dHB1dF9zdHJlYW0gIT0gTlVMTDsKKyAgICAgICAgaWYgKGRvd25sb2FkaW5n
KQorICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX2Nsb3NlX3N0cmVhbShkb3dubG9hZCk7CisK
KyAgICAgICAgR0ZpbGUqIHNyYyA9IGdfZmlsZV9uZXdfZm9yX3VyaShwcml2LT5kZXN0aW5hdGlv
bl91cmkpOworICAgICAgICBHRmlsZSogZGVzdCA9IGdfZmlsZV9uZXdfZm9yX3VyaShkZXN0aW5h
dGlvbl91cmkpOworICAgICAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAgICAgICBnX2Zp
bGVfbW92ZShzcmMsIGRlc3QsIEdfRklMRV9DT1BZX0JBQ0tVUCwgTlVMTCwgTlVMTCwgTlVMTCwg
JmVycm9yKTsKKworICAgICAgICBnX29iamVjdF91bnJlZihzcmMpOworICAgICAgICBnX29iamVj
dF91bnJlZihkZXN0KTsKKworICAgICAgICBnX2ZyZWUocHJpdi0+ZGVzdGluYXRpb25fdXJpKTsK
KyAgICAgICAgcHJpdi0+ZGVzdGluYXRpb25fdXJpID0gZ19zdHJkdXAoZGVzdGluYXRpb25fdXJp
KTsKKworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGdib29sZWFuIGhhbmRsZWQ7
CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZG93bmxvYWQsICJlcnJvciIsIDAs
IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiwgZXJyb3ItPm1lc3NhZ2UsICZoYW5k
bGVkKTsKKyAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZG93bmxvYWRpbmcpIHsKKyAgICAgICAgICAg
IGlmICghd2Via2l0X2Rvd25sb2FkX29wZW5fc3RyZWFtX2Zvcl91cmkoZG93bmxvYWQsIGRlc3Rp
bmF0aW9uX3VyaSwgVFJVRSkpIHsKKyAgICAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2Fu
Y2VsKGRvd25sb2FkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgZ19mcmVlKHByaXYtPmRlc3RpbmF0aW9uX3Vy
aSk7CisgICAgICBwcml2LT5kZXN0aW5hdGlvbl91cmkgPSBnX3N0cmR1cChkZXN0aW5hdGlvbl91
cmkpOworICAgIH0KKworICAgIC8qIG9ubHkgbm90aWZ5IGNoYW5nZSBpZiBldmVyeXRoaW5nIHdl
bnQgZmluZSAqLworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJkZXN0
aW5hdGlvbi11cmkiKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXRlOgor
ICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgKgorICogT2J0YWlucyB0aGUgY3Vy
cmVudCBzdGF0ZSBvZiB0aGUgZG93bmxvYWQsIGFzIGEKKyAqICNXZWJLaXREb3dubG9hZFN0YXRl
LgorICoKKyAqIFJldHVybnM6IHRoZSBjdXJyZW50ICNXZWJLaXREb3dubG9hZFN0YXRlCisgKgor
ICogU2luY2U6IDEuMS4yCisgKi8KK1dlYktpdERvd25sb2FkU3RhdGUgd2Via2l0X2Rvd25sb2Fk
X2dldF9zdGF0ZSAoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIFdFQktJVF9ET1dOTE9BRF9T
VEFURV9FUlJPUik7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9h
ZC0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+c3RhdGU7Cit9CisKKy8qKgorICogd2Via2l0X2Rv
d25sb2FkX2dldF90b3RhbF9zaXplOgorICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2Fk
CisgKgorICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgdG90YWwgc2l6ZSBvZiB0aGUgZG93bmxvYWQu
IFRoaXMgaXMgZXhwZWN0ZWQKKyAqIGJlY2F1c2UgdGhlIHNlcnZlciBtYXkgcHJvdmlkZSBpbmNv
cnJlY3Qgb3IgbWlzc2luZworICogQ29udGVudC1MZW5ndGguIE5vdGljZSB0aGF0IHRoaXMgbWF5
IGdyb3cgb3ZlciB0aW1lLCBhcyBpdCB3aWxsIGJlCisgKiBhbHdheXMgdGhlIHNhbWUgYXMgY3Vy
cmVudF9zaXplIGluIHRoZSBjYXNlcyB3aGVyZSBjdXJyZW50IHNpemUKKyAqIHN1cnBhc3NlcyBp
dC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZXhwZWN0ZWQgdG90YWwgc2l6ZSBvZiB0aGUgZG93bmxv
YWRlZCBmaWxlCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK2d1aW50NjQgd2Via2l0X2Rvd25s
b2FkX2dldF90b3RhbF9zaXplIChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgMCk7CisKKyAg
ICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAo
IXByaXYtPm5ldHdvcmtfcmVzcG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IE1BWChwcml2LT5jdXJyZW50X3NpemUsIHByaXYtPm5ldHdvcmtfcmVzcG9uc2UtPmV4cGVjdGVk
Q29udGVudExlbmd0aCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJl
bnRfc2l6ZToKKyAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZAorICoKKyAqIEN1cnJl
bnQgYWxyZWFkeSBkb3dubG9hZGVkIHNpemUuCisgKgorICogUmV0dXJuczogdGhlIGFscmVhZHkg
ZG93bmxvYWRlZCBzaXplCisgKgorICogU2luY2U6IDEuMS4yCisgKi8KK2d1aW50NjQgd2Via2l0
X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUgKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAw
KTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2Owor
ICAgIHJldHVybiBwcml2LT5jdXJyZW50X3NpemU7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25s
b2FkX2dldF9wcm9ncmVzczoKKyAqIEBkb3dubG9hZDogYSAjV2ViS2l0RG93bmxvYWQKKyAqCisg
KiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZC4KKyAqCisg
KiBSZXR1cm5zOiBhICNnZG91YmxlIHJhbmdpbmcgZnJvbSAwLjAgdG8gMS4wLgorICoKKyAqIFNp
bmNlOiAxLjEuMgorICovCitnZG91YmxlIHdlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19ET1dOTE9BRChkb3dubG9hZCksIDEuMCk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZh
dGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBnZG91YmxlIHRvdGFsX3NpemUgPSAoZ2Rv
dWJsZSlwcml2LT5uZXR3b3JrX3Jlc3BvbnNlLT5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKwor
ICAgIGlmICh0b3RhbF9zaXplID09IDApCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICByZXR1
cm4gKChnZG91YmxlKXByaXYtPmN1cnJlbnRfc2l6ZSkgLyB0b3RhbF9zaXplOworfQorCisvKioK
KyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lOgorICogQGRvd25sb2FkOiBhICNX
ZWJLaXREb3dubG9hZAorICoKKyAqIEVsYXBzZWQgdGltZSBmb3IgdGhlIGRvd25sb2FkIGluIHNl
Y29uZHMsIGluY2x1ZGluZyBhbnkgZnJhY3Rpb25hbAorICogcGFydC4gSWYgdGhlIGRvd25sb2Fk
IGlzIGZpbmlzaGVkLCBoYWQgYW4gZXJyb3Igb3Igd2FzIGNhbmNlbGxlZAorICogdGhpcyBpcyB0
aGUgdGltZSBiZXR3ZWVuIGl0cyBzdGFydCBhbmQgdGhlIGV2ZW50LgorICoKKyAqIFJldHVybnM6
IHNlY29uZHMgc2luY2UgdGhlIGRvd25sb2FkIHdhcyBzdGFydGVkLCBhcyBhICNnZG91YmxlCisg
KgorICogU2luY2U6IDEuMS4yCisgKi8KK2dkb3VibGUgd2Via2l0X2Rvd25sb2FkX2dldF9lbGFw
c2VkX3RpbWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDAuMCk7CisKKyAgICBXZWJLaXRE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICByZXR1cm4gZ190aW1l
cl9lbGFwc2VkKHByaXYtPnRpbWVyLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
d25sb2FkX3JlY2VpdmVkX2RhdGEoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYg
PSBkb3dubG9hZC0+cHJpdjsKKworICAgIGlmIChwcml2LT5jdXJyZW50X3NpemUgPT0gMCkgewor
ICAgICAgICBwcml2LT5zdGF0ZSA9IFdFQktJVF9ET1dOTE9BRF9TVEFURV9TVEFSVEVEOworICAg
IH0KKworICAgIEFTU0VSVChwcml2LT5vdXRwdXRfc3RyZWFtKTsKKworICAgIGdzaXplIGJ5dGVz
X3dyaXR0ZW47CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICBnX291dHB1dF9zdHJl
YW1fd3JpdGVfYWxsKEdfT1VUUFVUX1NUUkVBTShwcml2LT5vdXRwdXRfc3RyZWFtKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGxlbmd0aCwgJmJ5dGVzX3dyaXR0ZW4sIE5V
TEwsICZlcnJvcik7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaGFuZGxl
ZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRvd25sb2FkLCAiZXJyb3IiLCAwLCBX
RUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIGVycm9yLT5tZXNzYWdlLCAmaGFuZGxl
ZCk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBwcml2LT5jdXJyZW50X3NpemUgKz0gbGVuZ3RoOworICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChkb3dubG9hZCksICJjdXJyZW50LXNpemUiKTsKKworICAgIEFTU0VSVChwcml2
LT5uZXR3b3JrX3Jlc3BvbnNlKTsKKyAgICBpZiAocHJpdi0+Y3VycmVudF9zaXplID4gcHJpdi0+
bmV0d29ya19yZXNwb25zZS0+ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpCisgICAgICAgIGdfb2Jq
ZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJ0b3RhbC1zaXplIik7CisKKyAgICAvKiBG
SVhNRSB0aHJvdHRsZSB0aGUgbnVtYmVyIG9mIHVwZGF0ZXM/ICBzaG91bGQgd2UgcmVtb3ZlIHRo
ZQorICAgICAqIHByZXZpb3VzIGdfb2JqZWN0X25vdGlmeSgpcyBpZiB3ZSBhcmUgZ29pbmcgdG8g
dGhyb3R0bGUgdGhlCisgICAgICogcHJvZ3Jlc3MgdXBkYXRlcz8gKi8KKyAgICBnX29iamVjdF9u
b3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAicHJvZ3Jlc3MiKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2Rvd25sb2FkX2ZpbmlzaGVkX2xvYWRpbmcoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
KQoreworICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAg
V2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBnX3Rp
bWVyX3N0b3AocHJpdi0+dGltZXIpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FE
X1NUQVRFX0ZJTklTSEVEOworCisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2Fk
KSwgInByb2dyZXNzIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9lcnJvcihX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQorewor
ICAgIHdlYmtpdF9kb3dubG9hZF9jbG9zZV9zdHJlYW0oZG93bmxvYWQpOworCisgICAgV2ViS2l0
RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisKKyAgICBnX3RpbWVyX3N0
b3AocHJpdi0+dGltZXIpOworICAgIHByaXYtPnN0YXRlID0gV0VCS0lUX0RPV05MT0FEX1NUQVRF
X0VSUk9SOworCisgICAgZ2Jvb2xlYW4gaGFuZGxlZDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUoZG93bmxvYWQsICJlcnJvciIsIDAsIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLLCBl
cnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksICZoYW5kbGVkKTsKK30K
KworRG93bmxvYWRDbGllbnQ6OkRvd25sb2FkQ2xpZW50KFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCkKKyAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCit7Cit9CisKK3ZvaWQgRG93bmxvYWRDbGll
bnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQoreworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfcmVzcG9uc2UobV9k
b3dubG9hZCwgcmVzcG9uc2UpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRSZWNlaXZl
RGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBs
ZW5ndGhSZWNlaXZlZCkKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShtX2Rv
d25sb2FkLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRGaW5p
c2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICB3ZWJraXRfZG93bmxvYWRfZmluaXNo
ZWRfbG9hZGluZyhtX2Rvd25sb2FkKTsKK30KKwordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkRmFp
bChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIHdl
YmtpdF9kb3dubG9hZF9lcnJvcihtX2Rvd25sb2FkLCBlcnJvcik7Cit9CisKK3ZvaWQgRG93bmxv
YWRDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIC8qIEZJWE1FIHdo
ZW4gd2UgaGF2ZSB0aGUgbmV3IGZyYW1lIGxvYWRlciBzaWduYWxzIGFuZCBlcnJvciBoYW5kbGlu
Zy4gKi8KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERvd25sb2FkQ2xpZW50Ojpj
YW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICAvKiBGSVhNRSB3aGVuIHdlIGhh
dmUgdGhlIG5ldyBmcmFtZSBsb2FkZXIgc2lnbmFscyBhbmQgZXJyb3IgaGFuZGxpbmcuICovCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZG93bmxvYWQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4ZWM3OAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgKQEAgLTAsMCArMSwxMTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V0VCS0lUX0RPV05MT0FEX0gKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9XTkxPQUQgICAgICAgICAgICAo
d2Via2l0X2Rvd25sb2FkX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9BRChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWQpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRE9X
TkxPQUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX1RZUEVfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfSVNfRE9XTkxPQURfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9XTkxP
QUQpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25s
b2FkQ2xhc3MpKQorCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9F
UlJPUiA9IC0xLAorICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9DUkVBVEVEID0gMCwKKyAgICBX
RUJLSVRfRE9XTkxPQURfU1RBVEVfU1RBUlRFRCwKKyAgICBXRUJLSVRfRE9XTkxPQURfU1RBVEVf
Q0FOQ0VMTEVELAorICAgIFdFQktJVF9ET1dOTE9BRF9TVEFURV9GSU5JU0hFRAorfSBXZWJLaXRE
b3dubG9hZFN0YXRlOworCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9ET1dOTE9BRF9FUlJP
Ul9DQU5DRUxMRURfQllfVVNFUiwKKyAgICBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJ
T04sCisgICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUksKK30gV2ViS2l0RG93bmxvYWRF
cnJvcjsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSBXZWJLaXREb3du
bG9hZFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RG93bmxvYWQgeworICAgIEdPYmplY3QgcGFy
ZW50X2luc3RhbmNlOworCisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2OworfTsKKwor
c3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVk
MSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQor
d2Via2l0X2Rvd25sb2FkX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X2Rvd25sb2FkX25ldyAgICAgICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1JlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb3dubG9hZF9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgKFdl
YktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2Rvd25sb2FkX2NhbmNlbCAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAg
ICAgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9h
ZF9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3du
bG9hZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0TmV0d29ya1JlcXVlc3QqCit3ZWJraXRfZG93bmxv
YWRfZ2V0X25ldHdvcmtfcmVxdWVzdCAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93
bmxvYWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X2Rvd25sb2FkX2dldF9z
dWdnZXN0ZWRfZmlsZW5hbWUgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsK
KworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRp
b25fdXJpICAgICAgICAgKFdlYktpdERvd25sb2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkgICAgICAgICAo
V2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKmRlc3RpbmF0aW9uX3Vy
aSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzcyAg
ICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRvd25sb2FkKTsKKworV0VCS0lU
X0FQSSBnZG91YmxlCit3ZWJraXRfZG93bmxvYWRfZ2V0X2VsYXBzZWRfdGltZSAgICAgICAgICAg
IChXZWJLaXREb3dubG9hZCAgICAgICAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGd1aW50NjQK
K3dlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZSAgICAgICAgICAgICAgKFdlYktpdERvd25s
b2FkICAgICAgICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2Rvd25s
b2FkX2dldF9jdXJyZW50X3NpemUgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgICAgICAgKmRv
d25sb2FkKTsKKworV0VCS0lUX0FQSSBXZWJLaXREb3dubG9hZFN0YXRlCit3ZWJraXRfZG93bmxv
YWRfZ2V0X3N0YXRlICAgICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAgICAgICAqZG93
bmxvYWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUu
aAppbmRleCBjZTQ3MjZkLi45YTYwMmQ3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG93
bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CkBAIC00NCw5ICs0NSwxMyBAQAogI2luY2x1ZGUgIklu
c3BlY3RvckNsaWVudEd0ay5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAogI2luY2x1ZGUgPGdsaWIuaD4KIAorY2xhc3Mg
RG93bmxvYWRDbGllbnQ7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdFdlYlZpZXcq
IGdldFZpZXdGcm9tRnJhbWUoV2ViS2l0V2ViRnJhbWUqKTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAppbmRleCBlZTAxODk1Li5hY2Y4ZmI3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNp
bmNsdWRlICJ3ZWJraXRkb3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNp
bmNsdWRlICJ3ZWJraXRlbnVtdHlwZXMuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCkBA
IC0xMzQsNiArMTM1LDcgQEAgZW51bSB7CiAgICAgQ09QWV9DTElQQk9BUkQsCiAgICAgUEFTVEVf
Q0xJUEJPQVJELAogICAgIENVVF9DTElQQk9BUkQsCisgICAgRE9XTkxPQURfUkVRVUVTVEVELAog
ICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xMTE2LDYgKzExMTgsMjcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xh
c3MpCiAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKICAgICAgICAgICAgIEdfVFlQRV9QT0lO
VEVSKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpkb3dubG9hZC1yZXF1ZXN0
ZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMg
ZW1pdHRlZAorICAgICAqIEBkb3dubG9hZDogdGhlIG1lc3NhZ2UgdGV4dAorICAgICAqIEByZXR1
cm46IFRSVUUgaWYgdGhlIGRvd25sb2FkIHdhcyBoYW5kbGVkLgorICAgICAqCisgICAgICogQSBu
ZXcgRG93bmxvYWQgaXMgYmVpbmcgcmVxdWVzdGVkLiBCeSBkZWZhdWx0LCBpZiB0aGUgc2lnbmFs
IGlzCisgICAgICogbm90IGhhbmRsZWQsIHRoZSBkb3dubG9hZCBpcyBjYW5jZWxsZWQuCisgICAg
ICoKKyAgICAgKiBTaW5jZTogMS4xLjIKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2ln
bmFsc1tET1dOTE9BRF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJkb3dubG9hZC1yZXF1ZXN0
ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVl
X2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
Qk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAg
ICAgICBHX1RZUEVfT0JKRUNUKTsKKwogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6Omxv
YWQtc3RhcnRlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNp
Z25hbCBpcyBlbWl0dGVkCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdG1hcnNoYWwubGlz
dCBiL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CmluZGV4IDg1OTJiNDUuLjNhYWYzMTMg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0bWFyc2hhbC5saXN0CisrKyBiL1dlYktpdC9n
dGsvd2Via2l0bWFyc2hhbC5saXN0CkBAIC0xLDMgKzEsNSBAQAorQk9PTEVBTjpJTlQsSU5ULFNU
UklORworQk9PTEVBTjpPQkpFQ1QKIEJPT0xFQU46T0JKRUNULE9CSkVDVCxPQkpFQ1QsT0JKRUNU
CiBCT09MRUFOOk9CSkVDVCxPQkpFQ1QsU1RSSU5HLE9CSkVDVAogQk9PTEVBTjpPQkpFQ1QsU1RS
SU5HCi0tIAoxLjYuMi5yYzAKCg==
</data>
<flag name="review"
          id="13778"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>