<?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>72589</bug_id>
          
          <creation_ts>2011-11-17 01:54:33 -0800</creation_ts>
          <short_desc>[GTK] Expose accessibility hierarchy in WebKit2 to ATK/AT-SPI based ATs</short_desc>
          <delta_ts>2012-01-20 03:30:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>75474</dependson>
          <blocked>72588</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>504665</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-11-17 01:54:33 -0800</bug_when>
    <thetext>Currently, the accessibility hierarchy is not being exposed to ATK/AT-SPI based Assistive Technologies (e.g. Orca, Accerciser) in WebKit2, which are just seeing the accessible elements in the UI process at the moment.

Thus, we need to enable WebKit2GTK+ to expose the a11y hierarchy in the Web process through the UI process as it already happens in WebKit1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514477</commentid>
    <comment_count>1</comment_count>
      <attachid>117752</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-12-03 03:33:21 -0800</bug_when>
    <thetext>Created attachment 117752
Patch proposal

So here it comes the first temptative patch, including:

  - The code needed to plug the a11y hierarchies in the UI and Web processes as if it was just one (from the POV of ATs like Orca)
  - New accessibility unit test for WK2, with all the needed infrastructure to test this thing (mainly a helper process running a simple WebKitView + the actual test inspecting that helper process through ATSPI)
  - New dependency added (required for the unit test): ATSPI2
  - Some changes in the run-gtk-test script, so it makes sure that the accessibility support is available before running the tests

Just one little last thing: in order to be able to get this new unit test running properly, you need to make sure that you have installed both at-spi2-core and the at-spi2 ATK bridge (called at-spi2-atk in some systems, and libatk-adaptor in others). If you have that, and were able to build the patch (which means you have libatspi2.0-dev installed too), run-gtk-test should be able to do all the rest of the magic.

Of course, this initial patch doesn&apos;t intend to be 100% feature complete, bug-free or the like... but an initial -yet good-enough- first step to iterate from, in order to provide proper accessibility support in WebKit2GTK.

That&apos;s it... for now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514479</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-03 03:36:53 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514481</commentid>
    <comment_count>3</comment_count>
      <attachid>117752</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-03 03:45:43 -0800</bug_when>
    <thetext>Comment on attachment 117752
Patch proposal

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

It&apos;s looking good, just a first pass.

&gt; Source/WebKit2/ChangeLog:11
&gt; +        Implement the part in the UIProcess, by making the WebView widget

I think you can remove &apos;Implement the part in the UIProcess&apos; pattern and have just the explanation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:136
&gt; +    if (priv-&gt;accessible) {
&gt; +        g_object_unref(priv-&gt;accessible);
&gt; +        priv-&gt;accessible = 0;
&gt; +    }
&gt; +

Is there a reason why we don&apos;t use GRefPtr for these?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:357
&gt; +    // If the socket as already been created and embedded a plug ID, return it.

s/as/has/

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:378
&gt; +    gchar* plugIDString = g_strdup(plugID.utf8().data());

GOwnPtr?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:68
&gt; +        /* If the widget is no longer alive, save some remote calls
&gt; +           (because of AtkSocket&apos;s implementation of ref_state_set())
&gt; +           and just return that this AtkObject is defunct. */

Comments should use C++ style, with // at the start of each line.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:55
&gt; +struct _WebKitWebViewBaseAccessible {
&gt; +    AtkSocket parent;
&gt; +    /*&lt; private &gt;*/
&gt; +    WebKitWebViewBaseAccessiblePrivate* priv;
&gt; +};

No need for padding?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:38
&gt; +    // Sent a message to the parent process telling we&apos;re ready.

s/Sent/Send/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514726</commentid>
    <comment_count>4</comment_count>
      <attachid>117799</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-12-04 11:37:55 -0800</bug_when>
    <thetext>Created attachment 117799
Patch proposal

Attaching a new patch addressing the issues pointed out by Gustavo, as well as some improvements/fixes I found useful during this time...

(In reply to comment #3)
&gt; [...]
&gt; &gt; Source/WebKit2/ChangeLog:11
&gt; &gt; +        Implement the part in the UIProcess, by making the WebView widget
&gt; 
&gt; I think you can remove &apos;Implement the part in the UIProcess&apos; pattern and have just the explanation.

Done.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:136
&gt; &gt; +    if (priv-&gt;accessible) {
&gt; &gt; +        g_object_unref(priv-&gt;accessible);
&gt; &gt; +        priv-&gt;accessible = 0;
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; Is there a reason why we don&apos;t use GRefPtr for these?

There&apos;s one reason, but it&apos;s not a good one: I just forgot.

Fixed now.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:357
&gt; &gt; +    // If the socket as already been created and embedded a plug ID, return it.
&gt; 
&gt; s/as/has/

Fixed

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:378
&gt; &gt; +    gchar* plugIDString = g_strdup(plugID.utf8().data());
&gt; 
&gt; GOwnPtr?

You&apos;re right. Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:68
&gt; &gt; +        /* If the widget is no longer alive, save some remote calls
&gt; &gt; +           (because of AtkSocket&apos;s implementation of ref_state_set())
&gt; &gt; +           and just return that this AtkObject is defunct. */
&gt; 
&gt; Comments should use C++ style, with // at the start of each line.

Oops! Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:55
&gt; &gt; +struct _WebKitWebViewBaseAccessible {
&gt; &gt; +    AtkSocket parent;
&gt; &gt; +    /*&lt; private &gt;*/
&gt; &gt; +    WebKitWebViewBaseAccessiblePrivate* priv;
&gt; &gt; +};
&gt; 
&gt; No need for padding?

This WebKitWebViewBaseAccessible.h file is not meant to be included in the webkit2gtk headers, as it&apos;s gonna be only used internally inside WebKit. In other words, from the outside (e.g. epiphany, the Atk bridge...) you will never see instances of WebKitWebViewBaseAccessible, but instances of AtkObject. So, I don&apos;t think there&apos;s need for adding any extra padding in this case.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:38
&gt; &gt; +    // Sent a message to the parent process telling we&apos;re ready.
&gt; 
&gt; s/Sent/Send/

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514741</commentid>
    <comment_count>5</comment_count>
      <attachid>117799</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-04 12:43:53 -0800</bug_when>
    <thetext>Comment on attachment 117799
Patch proposal

Attachment 117799 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10731519</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514745</commentid>
    <comment_count>6</comment_count>
      <attachid>117799</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-12-04 12:54:46 -0800</bug_when>
    <thetext>Comment on attachment 117799
Patch proposal

Attachment 117799 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10729547</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515779</commentid>
    <comment_count>7</comment_count>
      <attachid>117799</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-06 03:29:15 -0800</bug_when>
    <thetext>Comment on attachment 117799
Patch proposal

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:152
&gt; +    priv-&gt;accessible = 0;

GRefPtr already initialize the pointer to NULL, so you don&apos;t need this here. We should change WebKitWebViewBase to use glib to allocate the private struct so that it will be 0 initialized when allocated.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:374
&gt; +    GOwnPtr&lt;gchar&gt; plugIDString(g_strdup(plugID.utf8().data()));
&gt; +    atk_socket_embed(ATK_SOCKET(priv-&gt;accessible.get()), plugIDString.get());

Instead of duplicating the string you can just:

atk_socket_embed(ATK_SOCKET(priv-&gt;accessible.get()), plugID.utf8().data());

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:87
&gt; +        bool childIsObject = child == atkObject ? true : false;

bool childIsObject = child == atkObject; that should be enough, I guess.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:98
&gt; +    accessible-&gt;priv = new WebKitWebViewBaseAccessiblePrivate();

Use the placement new syntax, see http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:99
&gt; +    accessible-&gt;priv-&gt;widget = 0;

This won&apos;t be needed when allocating the struct with glib and using placement new syntax.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:28
&gt; +#if !defined(__WEBKIT2_H_INSIDE__) &amp;&amp; !defined(WEBKIT2_COMPILATION)
&gt; +#error &quot;Only &lt;webkit2/webkit2.h&gt; can be included directly.&quot;
&gt; +#endif

Is this header public? if it&apos;s private you don&apos;t need this here, if it&apos;s public you should include it in webkit2.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:54
&gt; +    WebKitWebViewBaseAccessiblePrivate* priv;

If the header is public you should use the GNOME coding style, no the WebKit one, see http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:61
&gt; +GType webkit_web_view_base_accessible_get_type();

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:63
&gt; +WebKitWebViewBaseAccessible* webkit_web_view_base_accessible_new(GtkWidget*);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:25
&gt; +#define APP_NAME &quot;AccessibilityTestServer&quot;

Use static variable for this too. What is this for? it doesn&apos;t seem to be used.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:27
&gt; +static const char* contents =

We use the k prefix for global static variables, something like kContents, in this case.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:36
&gt; +static gboolean load_finished_cb(WebKitWebLoaderClient *loaderClient, WebKitWebView* webView, gpointer data)

This should be something like loadFinsihedCallback(). The * is incorrectly placed for the first parameter (loaderClient), and parameter names should be omitted because they are not used.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:44
&gt; +main(int argc, char**argv)

there&apos;s a space missing between * and argv

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:52
&gt; +    webkit_web_view_load_html(webView, contents, 0);

contents is only used here, so it should probably be a local static variable instead of global.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:39
&gt; +#define TEST_SERVER_APP_NAME &quot;AccessibilityTestServer&quot;

Use static const variable here

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:42
&gt; +#define MAX_WAIT_FOR_CHILD 5

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:50
&gt; +    GOwnPtr&lt;char&gt; test_server_path(g_strdup_printf(&quot;%s/Programs/WebKit2APITests/&quot; TEST_SERVER_APP_NAME, g_get_current_dir()));

Use webkit coding style for variable names, testServerPath in this case. Instead of g_strdup_printf() it would be better to use g_build_filename(). Use WEBKIT_EXEC_PATH instead of current_dir.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:51
&gt; +    char** test_server_argv = g_strsplit(test_server_path.get(), test_server_path.get(), 1);

Since there aren&apos;t parameters, you can use a stack allocated argv of size 2;

char* argv[2];
argv[0] = testServerPath.get();
argv[1] = 0;

This way you fix test_server_argv leak too.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:56
&gt; +    if (!g_spawn_async_with_pipes(0, test_server_argv, 0, (GSpawnFlags)0, 0, 0,

Use a C++ cast.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:64
&gt; +    // Change the child&apos;s stdout file descriptor to be non-blocking.
&gt; +    if (fcntl(child_stdout, F_SETFL, fcntl(child_stdout, F_GETFL) | O_NONBLOCK) == -1) {
&gt; +        perror(&quot;Error calling fcntl over child&apos;s stdout file descriptor&quot;);
&gt; +        return FALSE;
&gt; +    }

You could use ia GIOChannel for this:

outChannel = g_io_channel_unix_new(childStdout);
GOwnPtr&lt;GError&gt; error;
g_io_channel_set_flags(outChannel, G_IO_FLAG_NONBLOCK, &amp;error.outPtr());
if (error) {
    g_printerr(&quot;Error bla bla bla: %s\n&quot;, error-&gt;message);
    return FALSE;
}

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:66
&gt; +    // Wait for child to say it&apos;s ready till MAX_WAIT_FOR_CHILD.

Using a io channel you can just add a watch for this:

g_io_add_watch(outChannel, G_IO_IN, readStdoutFunction, 0);

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:85
&gt; +    g_return_if_fail(childProcessPid &gt; 0);

Use an asssert instead of g_return

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:88
&gt; +    kill((pid_t)childProcessPid, SIGTERM);

Use a C++ style cast here. Are you sure you need a cast?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:99
&gt; +static void
&gt; +check_atspi_accessible(AtspiAccessible* accessible, const char* targetName, AtspiRole targetRole)

This should be a single line

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:109
&gt; +static GRefPtr&lt;AtspiAccessible&gt;
&gt; +find_test_server_application()

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:115
&gt; +    GRefPtr&lt;AtspiAccessible&gt; current = 0;

GRefPtr already intializes the pointer to NULL on construction.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:118
&gt; +    int i = 0;
&gt; +    for (i = 0; i &lt; childCount; i++) {

you can just use for (int i = 0;

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:196
&gt; +

Would it be possible to start the server here, and stop in afterAll()?

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.h:60
&gt; +WebPageAccessibilityObject* web_page_accessibility_object_new(WebKit::WebPage*);
&gt; +
&gt; +void web_page_accessibility_object_refresh(WebPageAccessibilityObject*);

Use WebKit coding style for these, since they are not generated and this is not public API.

&gt; Tools/Scripts/run-gtk-tests:28
&gt; +                &quot;WebKit2APITests/AccessibilityTestServer&quot; ]

Why do you need this? only executables starting with Test are considered unit tests.

&gt; Tools/Scripts/run-gtk-tests:96
&gt; +    paths_to_check = [ &quot;/usr/libexec&quot;,
&gt; +                       &quot;/usr/lib/at-spi2-core&quot;,
&gt; +                       &quot;/usr/lib32/at-spi2-core&quot;
&gt; +                       &quot;/usr/lib64/at-spi2-core&quot; ]

Isn&apos;t there a better way? this wouldn&apos;t work if the at-spli2-code executable is in another prefix

&gt; Tools/Scripts/run-gtk-tests:98
&gt; +        filepath = &quot;%s/%s&quot; % (path, filename)

Use os.path.join(path, filename)

&gt; configure.ac:1136
&gt; +# Require atspi2 only when building Webkit2 (required for unit tests).
&gt; +if test &quot;$enable_webkit2&quot; = &quot;yes&quot;; then
&gt; +   PKG_CHECK_MODULES([ATSPI2],
&gt; +                     [atspi-2 &gt;= $ATSPI2_REQUIRED_VERSION])
&gt; +   AC_SUBST([ATSPI2_CFLAGS])
&gt; +   AC_SUBST([ATSPI2_LIBS])
&gt; +fi

If it&apos;s only required for unit tests, this should be an optional dependency, so that the test that depend on this is only built when atspi2 is present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528809</commentid>
    <comment_count>8</comment_count>
      <attachid>120955</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-03 08:56:28 -0800</bug_when>
    <thetext>Created attachment 120955
Patch proposal

First of all, thanks for your detailed review. Now attaching a new patch where I think I&apos;ve addressed all the issues you pointed out, with some exceptions where I thought it was not possible.

See my comments below....

(In reply to comment #7)
&gt; (From update of attachment 117799 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117799&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:152
&gt; &gt; +    priv-&gt;accessible = 0;
&gt; 
&gt; GRefPtr already initialize the pointer to NULL, so you don&apos;t need this here. We should change WebKitWebViewBase to use glib to allocate the private struct so that it will be 0 initialized when allocated.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:374
&gt; &gt; +    GOwnPtr&lt;gchar&gt; plugIDString(g_strdup(plugID.utf8().data()));
&gt; &gt; +    atk_socket_embed(ATK_SOCKET(priv-&gt;accessible.get()), plugIDString.get());
&gt; 
&gt; Instead of duplicating the string you can just:
&gt; 
&gt; atk_socket_embed(ATK_SOCKET(priv-&gt;accessible.get()), plugID.utf8().data());

Fixed.

JFTR, I needed to const_cast plugID.utf8().data() for that to work, since atk_socket_embed()&apos;s signature expects a gchar* in there, even if it treats it as a const gchar* at the end (weird, but it&apos;s like that).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:87
&gt; &gt; +        bool childIsObject = child == atkObject ? true : false;
&gt; 
&gt; bool childIsObject = child == atkObject; that should be enough, I guess.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:98
&gt; &gt; +    accessible-&gt;priv = new WebKitWebViewBaseAccessiblePrivate();
&gt; 
&gt; Use the placement new syntax, see http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:99
&gt; &gt; +    accessible-&gt;priv-&gt;widget = 0;
&gt; 
&gt; This won&apos;t be needed when allocating the struct with glib and using placement new syntax.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:28
&gt; &gt; +#if !defined(__WEBKIT2_H_INSIDE__) &amp;&amp; !defined(WEBKIT2_COMPILATION)
&gt; &gt; +#error &quot;Only &lt;webkit2/webkit2.h&gt; can be included directly.&quot;
&gt; &gt; +#endif
&gt; 
&gt; Is this header public? if it&apos;s private you don&apos;t need this here, if it&apos;s public you should include it in webkit2.h

The header is not public, so you&apos;re right: I don&apos;t need that there. Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:54
&gt; &gt; +    WebKitWebViewBaseAccessiblePrivate* priv;
&gt; 
&gt; If the header is public you should use the GNOME coding style, no the WebKit one, see http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

It&apos;s not public, so kept using WebKit&apos;s coding style here.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:61
&gt; &gt; +GType webkit_web_view_base_accessible_get_type();
&gt; 
&gt; Ditto.

I can&apos;t change this one to WK&apos;s coding style, since its implementation comes from expanding the G_DEFINE macro.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:63
&gt; &gt; +WebKitWebViewBaseAccessible* webkit_web_view_base_accessible_new(GtkWidget*);
&gt; 
&gt; Ditto.

I can change this one, though. Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:25
&gt; &gt; +#define APP_NAME &quot;AccessibilityTestServer&quot;
&gt; 
&gt; Use static variable for this too. What is this for? it doesn&apos;t seem to be used.

Argh! Legacy stuff from a previous version of the patch. Removed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:27
&gt; &gt; +static const char* contents =
&gt; 
&gt; We use the k prefix for global static variables, something like kContents, in this case.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:36
&gt; &gt; +static gboolean load_finished_cb(WebKitWebLoaderClient *loaderClient, WebKitWebView* webView, gpointer data)
&gt; 
&gt; This should be something like loadFinsihedCallback(). The * is incorrectly placed for the first parameter (loaderClient), and parameter names should be omitted because they are not used.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:44
&gt; &gt; +main(int argc, char**argv)
&gt; 
&gt; there&apos;s a space missing between * and argv

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:52
&gt; &gt; +    webkit_web_view_load_html(webView, contents, 0);
&gt; 
&gt; contents is only used here, so it should probably be a local static variable instead of global.

Fixed (removed the variable, just used the literal string in the only place it&apos;s used).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:39
&gt; &gt; +#define TEST_SERVER_APP_NAME &quot;AccessibilityTestServer&quot;
&gt; 
&gt; Use static const variable here

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:42
&gt; &gt; +#define MAX_WAIT_FOR_CHILD 5
&gt; 
&gt; Ditto.

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:50
&gt; &gt; +    GOwnPtr&lt;char&gt; test_server_path(g_strdup_printf(&quot;%s/Programs/WebKit2APITests/&quot; TEST_SERVER_APP_NAME, g_get_current_dir()));
&gt; 
&gt; Use webkit coding style for variable names, testServerPath in this case. Instead of g_strdup_printf() it would be better to use g_build_filename(). Use WEBKIT_EXEC_PATH instead of current_dir.

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:51
&gt; &gt; +    char** test_server_argv = g_strsplit(test_server_path.get(), test_server_path.get(), 1);
&gt; 
&gt; Since there aren&apos;t parameters, you can use a stack allocated argv of size 2;
&gt; 
&gt; char* argv[2];
&gt; argv[0] = testServerPath.get();
&gt; argv[1] = 0;
&gt; 
&gt; This way you fix test_server_argv leak too.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:56
&gt; &gt; +    if (!g_spawn_async_with_pipes(0, test_server_argv, 0, (GSpawnFlags)0, 0, 0,
&gt; 
&gt; Use a C++ cast.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:64
&gt; &gt; +    // Change the child&apos;s stdout file descriptor to be non-blocking.
&gt; &gt; +    if (fcntl(child_stdout, F_SETFL, fcntl(child_stdout, F_GETFL) | O_NONBLOCK) == -1) {
&gt; &gt; +        perror(&quot;Error calling fcntl over child&apos;s stdout file descriptor&quot;);
&gt; &gt; +        return FALSE;
&gt; &gt; +    }
&gt; 
&gt; You could use ia GIOChannel for this:
&gt; 
&gt; outChannel = g_io_channel_unix_new(childStdout);
&gt; GOwnPtr&lt;GError&gt; error;
&gt; g_io_channel_set_flags(outChannel, G_IO_FLAG_NONBLOCK, &amp;error.outPtr());
&gt; if (error) {
&gt;     g_printerr(&quot;Error bla bla bla: %s\n&quot;, error-&gt;message);
&gt;     return FALSE;
&gt; }
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:66
&gt; &gt; +    // Wait for child to say it&apos;s ready till MAX_WAIT_FOR_CHILD.
&gt; 
&gt; Using a io channel you can just add a watch for this:
&gt; 
&gt; g_io_add_watch(outChannel, G_IO_IN, readStdoutFunction, 0);

Already thought of that, but I can&apos;t use a GIO channel here because it uses sources and the main loop to handle events through that callback, and I can&apos;t afford that because it would mean that the execution of the test function&apos;s code will continue after adding the watch, therefore finishing the test before having a chance to handle the input data coming through the channel.

Instead, I need to *block* on that point and wait either until some data has been received from the child process or a timeout has ocurred, in order to know that I&apos;m ready to start testing things.

So, I haven&apos;t changed anything in this regard. It still looks to me like the current approach is the one we need in here.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:85
&gt; &gt; +    g_return_if_fail(childProcessPid &gt; 0);
&gt; 
&gt; Use an asssert instead of g_return

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:88
&gt; &gt; +    kill((pid_t)childProcessPid, SIGTERM);
&gt; 
&gt; Use a C++ style cast here. Are you sure you need a cast?

No, I don&apos;t need it. You&apos;re right. Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:99
&gt; &gt; +static void
&gt; &gt; +check_atspi_accessible(AtspiAccessible* accessible, const char* targetName, AtspiRole targetRole)
&gt; 
&gt; This should be a single line

Fixed. Also, changed the name to match WK&apos;s coding style.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:109
&gt; &gt; +static GRefPtr&lt;AtspiAccessible&gt;
&gt; &gt; +find_test_server_application()
&gt; 
&gt; Ditto.

Fixed. Also, changed the name to match WK&apos;s coding style.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:115
&gt; &gt; +    GRefPtr&lt;AtspiAccessible&gt; current = 0;
&gt; 
&gt; GRefPtr already intializes the pointer to NULL on construction.

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:118
&gt; &gt; +    int i = 0;
&gt; &gt; +    for (i = 0; i &lt; childCount; i++) {
&gt; 
&gt; you can just use for (int i = 0;

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:196
&gt; &gt; +
&gt; 
&gt; Would it be possible to start the server here, and stop in afterAll()?

Good point. I think it should be possible and, actually, I&apos;ve tried the change and seems to work fine, so I included it in the new patch.

The only catch here is in the case that we want to run different tests (that is, servers loading different HTML&apos;s) for each unit test, as this approach wouldn&apos;t work, but at the moment that doesn&apos;t sound like and issue :-)

So, fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.h:60
&gt; &gt; +WebPageAccessibilityObject* web_page_accessibility_object_new(WebKit::WebPage*);
&gt; &gt; +
&gt; &gt; +void web_page_accessibility_object_refresh(WebPageAccessibilityObject*);
&gt; 
&gt; Use WebKit coding style for these, since they are not generated and this is not public API.

Fixed.

&gt; &gt; Tools/Scripts/run-gtk-tests:28
&gt; &gt; +                &quot;WebKit2APITests/AccessibilityTestServer&quot; ]
&gt; 
&gt; Why do you need this? only executables starting with Test are considered unit tests.

I needed it because run-gtk-tests doesn&apos;t ignore executable files not starting with &quot;test&quot; or &quot;Test&quot;.

However I agree with you it would be better that way, so I filed bug 75474 to fix that and made it block this one. Thus, this new patch assumes run-gtk-tests actually works that way, so Fixed.

&gt; &gt; Tools/Scripts/run-gtk-tests:96
&gt; &gt; +    paths_to_check = [ &quot;/usr/libexec&quot;,
&gt; &gt; +                       &quot;/usr/lib/at-spi2-core&quot;,
&gt; &gt; +                       &quot;/usr/lib32/at-spi2-core&quot;
&gt; &gt; +                       &quot;/usr/lib64/at-spi2-core&quot; ]
&gt; 
&gt; Isn&apos;t there a better way? this wouldn&apos;t work if the at-spli2-code executable is in another prefix

Not that I know of.

The problem is that, depending on the distro, the path where the at-spi2-registryd and at-spi-bus-launcher files are is different, and not only that, but also the name of the package itself, so it would be more error-prone and complex, IMHO, to try to automatically find the place where those files are in the system thatn just looking for them in some (well-known) typical places.

I think this approach is already done for some other stuff in WK (fonts, I think), and it seems to make sense to me in this case as well. If one day we try to run this in a machine with those files in a different path (unlikely, but possible), it would be a matter of adding that path to the list :-)

&gt; &gt; Tools/Scripts/run-gtk-tests:98
&gt; &gt; +        filepath = &quot;%s/%s&quot; % (path, filename)
&gt; 
&gt; Use os.path.join(path, filename)

Fixed.

&gt; &gt; configure.ac:1136
&gt; &gt; +# Require atspi2 only when building Webkit2 (required for unit tests).
&gt; &gt; +if test &quot;$enable_webkit2&quot; = &quot;yes&quot;; then
&gt; &gt; +   PKG_CHECK_MODULES([ATSPI2],
&gt; &gt; +                     [atspi-2 &gt;= $ATSPI2_REQUIRED_VERSION])
&gt; &gt; +   AC_SUBST([ATSPI2_CFLAGS])
&gt; &gt; +   AC_SUBST([ATSPI2_LIBS])
&gt; &gt; +fi
&gt; 
&gt; If it&apos;s only required for unit tests, this should be an optional dependency, so that the test that depend on this is only built when atspi2 is present.

Very true. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528813</commentid>
    <comment_count>9</comment_count>
      <attachid>120955</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-01-03 09:14:30 -0800</bug_when>
    <thetext>Comment on attachment 120955
Patch proposal

Attachment 120955 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11081013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528819</commentid>
    <comment_count>10</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-03 09:34:19 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 120955 [details])
&gt; Attachment 120955 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/11081013

This happens because of a bug in the version of atspi installed in the EWS machine, which is not including a wrong DBus header in one of libatspi header files. Fortunately, it has been fixed in more recent versions of libatspi, but will keep failing with no remedy after the EWS machine upgrades the package to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529391</commentid>
    <comment_count>11</comment_count>
      <attachid>120955</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-04 00:45:46 -0800</bug_when>
    <thetext>Comment on attachment 120955
Patch proposal

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:341
&gt; +static AtkObject* webkitWebViewBaseGetAccessible(GtkWidget *widget)

GtkWidget *widget -&gt; GtkWidget* widget

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:64
&gt; +static AtkStateSet* webkitWebViewBaseAccessibleRefStateSet(AtkObject *atkObject)

AtkObject *atkObject -&gt; AtkObject* atkObject

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:68
&gt; +    AtkStateSet* state_set;

state_set -&gt; stateSet

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:83
&gt; +static gint webkitWebViewBaseAccessibleGetIndexInParent(AtkObject *atkObject)

AtkObject *atkObject -&gt; AtkObject* atkObject

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:85
&gt; +    g_return_val_if_fail(ATK_IS_OBJECT(atkObject), -1);

Don&apos;t use g_return macros in private static code, note that atk_object_get_index_in_parent() already has that check, so it doesn&apos;t get here if pointer is not a valid AtkObject.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:128
&gt; +    AtkObject* object = static_cast&lt;AtkObject*&gt;(g_object_new(WEBKIT_TYPE_WEB_VIEW_BASE_ACCESSIBLE, 0));

Use ATK_OBJECT() instead of static_cast. Use NULL instead of 0 in g_object_new() since it&apos;s a sentinel

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:31
&gt; +#include &lt;webkit2/WebKitDefines.h&gt;

Do you need this?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:55
&gt; +    WebKitWebLoaderClient* loaderClient = webkit_web_view_get_loader_client(webView);

Loader client has been already removed, use WebKitWebView::load-changed instead.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:58
&gt; +    int child_stdout = 0;

child_stdout -&gt; childStdout

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:113
&gt; +    GRefPtr&lt;AtspiAccessible&gt; desktop = atspi_get_desktop(0);

atspi_get_desktop returns a new ref, so you should use adoptGRef() here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:136
&gt; +    GRefPtr&lt;AtspiAccessible&gt; currentChild = atspi_accessible_get_child_at_index(currentParent.get(), 0, 0);

I think you should use adoptGRef here too. Use Test::assertObjectIsDeletedWhenTestFinishes() to make sure you don&apos;t leak anything.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:78
&gt; +    g_return_val_if_fail(ATK_IS_OBJECT(atkObject), -1);

Don&apos;t use g_return macro here.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:110
&gt; +    accessible-&gt;m_page = 0;

accessible is already initialized to 0 when allocated.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:128
&gt; +    AtkObject* object = static_cast&lt;AtkObject*&gt;(g_object_new(WEB_TYPE_PAGE_ACCESSIBILITY_OBJECT, 0));

Use NULL instead of 0 in g_object_new

&gt; Tools/Scripts/run-gtk-tests:98
&gt; +    paths_to_check = [ &quot;/usr/libexec&quot;,
&gt; +                       &quot;/usr/lib/at-spi2-core&quot;,
&gt; +                       &quot;/usr/lib32/at-spi2-core&quot;
&gt; +                       &quot;/usr/lib64/at-spi2-core&quot; ]

Maybe we can use pkg-config --variable=exec_prefix atspi-2 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529392</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-04 00:47:46 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=120955) [details]
&gt; Patch proposal

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:64
&gt; &gt; &gt; +    // Change the child&apos;s stdout file descriptor to be non-blocking.
&gt; &gt; &gt; +    if (fcntl(child_stdout, F_SETFL, fcntl(child_stdout, F_GETFL) | O_NONBLOCK) == -1) {
&gt; &gt; &gt; +        perror(&quot;Error calling fcntl over child&apos;s stdout file descriptor&quot;);
&gt; &gt; &gt; +        return FALSE;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; You could use ia GIOChannel for this:
&gt; &gt; 
&gt; &gt; outChannel = g_io_channel_unix_new(childStdout);
&gt; &gt; GOwnPtr&lt;GError&gt; error;
&gt; &gt; g_io_channel_set_flags(outChannel, G_IO_FLAG_NONBLOCK, &amp;error.outPtr());
&gt; &gt; if (error) {
&gt; &gt;     g_printerr(&quot;Error bla bla bla: %s\n&quot;, error-&gt;message);
&gt; &gt;     return FALSE;
&gt; &gt; }
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:66
&gt; &gt; &gt; +    // Wait for child to say it&apos;s ready till MAX_WAIT_FOR_CHILD.
&gt; &gt; 
&gt; &gt; Using a io channel you can just add a watch for this:
&gt; &gt; 
&gt; &gt; g_io_add_watch(outChannel, G_IO_IN, readStdoutFunction, 0);
&gt; 
&gt; Already thought of that, but I can&apos;t use a GIO channel here because it uses sources and the main loop to handle events through that callback, and I can&apos;t afford that because it would mean that the execution of the test function&apos;s code will continue after adding the watch, therefore finishing the test before having a chance to handle the input data coming through the channel.
&gt; 
&gt; Instead, I need to *block* on that point and wait either until some data has been received from the child process or a timeout has ocurred, in order to know that I&apos;m ready to start testing things.
&gt; 
&gt; So, I haven&apos;t changed anything in this regard. It still looks to me like the current approach is the one we need in here.
&gt; 

If you need to block, why don&apos;t use g_spawn_sync() instead of the async version?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529438</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-04 03:18:09 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; [...]
&gt; If you need to block, why don&apos;t use g_spawn_sync() instead of the async version?

Because I need to block in a way that I need to wait for the child to send me an &quot;OK&quot; message when it&apos;s ready but, at the same time, I don&apos;t want to wait forever in case something goes wrong in the child process (imagine it hangs for some reason), so I need to be able to unblock if a certain amount of time (a timeout) has happened before getting such a response, which is something I can&apos;t specify with g_spawn_sync() I think.

So, that&apos;s why I used g_spawn_async() instead: to have more control over the whole thing in a way g_spawn_sync() wouldn&apos;t allow. Anyway, according to docs, g_spawn_sync() &quot;calls g_spawn_async_with_pipes() internally&quot; :-)

Anyway, if there&apos;s a way to handle that timeout without having to do this manually, I&apos;d be glad to know of it and more than happy to change the implementation of this part, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529446</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-04 03:52:19 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; [...]
&gt; &gt; If you need to block, why don&apos;t use g_spawn_sync() instead of the async version?
&gt; 
&gt; Because I need to block in a way that I need to wait for the child to send me an &quot;OK&quot; message when it&apos;s ready but, at the same time, I don&apos;t want to wait forever in case something goes wrong in the child process (imagine it hangs for some reason), so I need to be able to unblock if a certain amount of time (a timeout) has happened before getting such a response, which is something I can&apos;t specify with g_spawn_sync() I think.
&gt; 
&gt; So, that&apos;s why I used g_spawn_async() instead: to have more control over the whole thing in a way g_spawn_sync() wouldn&apos;t allow. Anyway, according to docs, g_spawn_sync() &quot;calls g_spawn_async_with_pipes() internally&quot; :-)
&gt; 
&gt; Anyway, if there&apos;s a way to handle that timeout without having to do this manually, I&apos;d be glad to know of it and more than happy to change the implementation of this part, of course.

static bool kChildFinished = true;

G_GNUC_NORETURN static gpointer timeoutMonitor(gpointer)
{
        g_usleep(kMaxWaitForChild * G_USEC_PER_SEC);

        if (kChildFinished)
                g_thread_exit(0);

        g_print(&quot;Timeout&quot;);
        exit (0);
}

static void timeoutMonitorStart()
{
        kChildFinished = false;
#if (!GLIB_CHECK_VERSION(2,31,0))
        g_thread_create(timeoutMonitor, 0, FALSE, 0);
#else
     	g_thread_new(&quot;TimeoutMonitor&quot;, timeoutMonitor, 0);
#endif
}

static void timeoutMonitorStop()
{
 	kChildFinished = true;
}

....

timeoutMonitorStart();
g_spawn_sync();
timeoutMonitorStop();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529537</commentid>
    <comment_count>15</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-04 08:07:19 -0800</bug_when>
    <thetext>Thanks for the suggestion and the code snippet Carlos. However I have a doubt: do you think this solution (using another thread to kill the main one on timeout) is better/cleaner than the current approach?

I honestly have my doubts... looks to me a bit too complex for something that, in the end, is very simple: I want,  _after_ launching the a11y server, to block the current execution until the child process finishes or a timeout has occurred, which is something perfectly doable without using extra threads.

Perhaps I&apos;m missing something... what&apos;s your take?

(In reply to comment #14)
&gt; [...]
&gt; static bool kChildFinished = true;
&gt; 
&gt; G_GNUC_NORETURN static gpointer timeoutMonitor(gpointer)
&gt; {
&gt;         g_usleep(kMaxWaitForChild * G_USEC_PER_SEC);
&gt; 
&gt;         if (kChildFinished)
&gt;                 g_thread_exit(0);
&gt; 
&gt;         g_print(&quot;Timeout&quot;);
&gt;         exit (0);
&gt; }
&gt; 
&gt; static void timeoutMonitorStart()
&gt; {
&gt;         kChildFinished = false;
&gt; #if (!GLIB_CHECK_VERSION(2,31,0))
&gt;         g_thread_create(timeoutMonitor, 0, FALSE, 0);
&gt; #else
&gt;          g_thread_new(&quot;TimeoutMonitor&quot;, timeoutMonitor, 0);
&gt; #endif
&gt; }
&gt; 
&gt; static void timeoutMonitorStop()
&gt; {
&gt;      kChildFinished = true;
&gt; }
&gt; 
&gt; ....
&gt; 
&gt; timeoutMonitorStart();
&gt; g_spawn_sync();
&gt; timeoutMonitorStop();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529540</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-04 08:22:58 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Thanks for the suggestion and the code snippet Carlos. However I have a doubt: do you think this solution (using another thread to kill the main one on timeout) is better/cleaner than the current approach?

Yes, I think so, and it&apos;s less error prone. For example your patch doesn&apos;t handle EINTR when reading, I think it should use select, since the descriptor is non-blocking to know when to read, and it&apos;s leaking the stdout desriptor that should be closed after reading. All of that (and more) is correctly handled by g_spawn_sync() and you have the output directly in a variable. But I&apos;m fine with your solution (fixing the problems I mentioned) if you think it&apos;s better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529557</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-04 09:15:49 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 120955 [details] [details])
&gt; &gt; Attachment 120955 [details] [details] did not pass gtk-ews (gtk):
&gt; &gt; Output: http://queues.webkit.org/results/11081013
&gt; 
&gt; This happens because of a bug in the version of atspi installed in the EWS machine, which is not including a wrong DBus header in one of libatspi header files. Fortunately, it has been fixed in more recent versions of libatspi, but will keep failing with no remedy after the EWS machine upgrades the package to it.

You should probably add this version of atspi to the jhbuild modules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532177</commentid>
    <comment_count>18</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-09 07:11:23 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Thanks for the suggestion and the code snippet Carlos. However I have a doubt: do you think this solution 
&gt; &gt;(using another thread to kill the main one on timeout) is better/cleaner than the current approach?
&gt; 
&gt; Yes, I think so, and it&apos;s less error prone. 

Hmm... there&apos;s another reason *not* to use g_spawn_sync() that I forgot to mentino before, and it&apos;s quite important: I need the AccessibilityTestServer to keep running as a different process while I test all the a11y related stuff from TestWebKitAccessibility, so I can&apos;t synchronously spawn that process as you suggest with that snippet of code.

The thing about blocking and having the timeout, that perhaps I explained poorly before, is that I don&apos;t want to wait forever in case the AccessibilityTestServer doesn&apos;t works as expected (starts a basic app, load some HTML and notify the parent process), so I need a mechanism to kill that child process from TestWebKitAccessibility not to continue with the unit tests.

But, if the a11y server runs and starts fine (so it sends the &quot;OK&quot; message to its parent), I want it to keep running as a separate process while I perform all the a11y-related unit test over it (checking the a11y hierarchy through ATSPI), and will exit only once the parent process exits.

&gt; For example your patch doesn&apos;t handle EINTR when reading, I think it should use select, since the descriptor
&gt; is non-blocking to know when to read, and it&apos;s leaking the stdout desriptor that should be closed after
&gt; reading. All of that (and more) is correctly handled by g_spawn_sync() and you have the output directly in
&gt; a variable. But I&apos;m fine with your solution (fixing the problems I mentioned) if you think it&apos;s better.

Because of the reasons exposed (and sorry for not bringing this last -very important- point up before), I think it&apos;s better to keep doing what I did, perhaps adding some extra checks as you suggest, and reviewing the code not to leak anything.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532180</commentid>
    <comment_count>19</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-09 07:13:32 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (From update of attachment 120955 [details] [details] [details])
&gt; &gt; &gt; Attachment 120955 [details] [details] [details] did not pass gtk-ews (gtk):
&gt; &gt; &gt; Output: http://queues.webkit.org/results/11081013
&gt; &gt; 
&gt; &gt; This happens because of a bug in the version of atspi installed in the EWS machine, which is not including a wrong DBus header in one of libatspi header files. Fortunately, it has been fixed in more recent versions of libatspi, but will keep failing with no remedy after the EWS machine upgrades the package to it.
&gt; 
&gt; You should probably add this version of atspi to the jhbuild modules.

In the new patch I&apos;m writing, I added at-spi2-core and at-spi2-atk as jhbuild modules for testing. That way I understand there wouldn&apos;t be longer needed to have those packages installed in the bots, as they would use them right from jhbuild.

About the version, I specified at-spi2 2.2.1, which is what I&apos;m using in Fedora now and seems not to present the issue in the version available in the bots (2.2.0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532206</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-09 08:08:11 -0800</bug_when>
    <thetext>(In reply to comment #18)

&gt; Because of the reasons exposed (and sorry for not bringing this last -very important- point up before), I think it&apos;s better to keep doing what I did, perhaps adding some extra checks as you suggest, and reviewing the code not to leak anything.
&gt; 
&gt; What do you think?

I see, you don&apos;t actually want to block when calling the process but when reading from stdout, and kill the process after a timeout. In that case, do not set the descriptor as non-blocking, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532212</commentid>
    <comment_count>21</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-09 08:35:46 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; 
&gt; &gt; Because of the reasons exposed (and sorry for not bringing this last -very important- point up before), I think it&apos;s better to keep doing what I did, perhaps adding some extra checks as you suggest, and reviewing the code not to leak anything.
&gt; &gt; 
&gt; &gt; What do you think?
&gt; 
&gt; I see, you don&apos;t actually want to block when calling the process but when reading from stdout, and kill the process after a timeout. In that case, do not set the descriptor as non-blocking, no?

Argh! I explain poorly, definitely :-)

I both want and don&apos;t want to block, beacuse of differente reasons, and at different points:

  * I don&apos;t wan&apos;t to block (so don&apos;t want to use g_spawn_sync()) because, if everything goes fine (server running and loading the test HTML properly), I want the server to keep running as a child process until I don&apos;t need it anymore. And this could mean keeping it alive and running while executing one or more tests.

  * I want to block exactly after spawning the child process with spawn_async and before exiting the runTestServer() function, because I don&apos;t want any test to start running before being sure the server is ready, which is what I know through the &quot;OK&quot; message.

  * I can&apos;t use GIO channels and the add_watch() thing, because I can&apos;t rely on the main loop to handle the response from the child process, since that would mean exiting runTestServer() too soon (before handling the &quot;OK&quot; message). This is related to the previous point (why I want to block there).

  * I need the non-blocking thing in the file descriptor to implement the timeout thing so, in case something goes wrong in the child process, we make sure to kill it after some time, so the test doesn&apos;t hang.

Hope this time I explained better :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532219</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-09 08:47:32 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #18)
&gt; &gt; 
&gt; &gt; &gt; Because of the reasons exposed (and sorry for not bringing this last -very important- point up before), I think it&apos;s better to keep doing what I did, perhaps adding some extra checks as you suggest, and reviewing the code not to leak anything.
&gt; &gt; &gt; 
&gt; &gt; &gt; What do you think?
&gt; &gt; 
&gt; &gt; I see, you don&apos;t actually want to block when calling the process but when reading from stdout, and kill the process after a timeout. In that case, do not set the descriptor as non-blocking, no?
&gt; 
&gt; Argh! I explain poorly, definitely :-)

I understood it :-)

&gt; I both want and don&apos;t want to block, beacuse of differente reasons, and at different points:
&gt; 
&gt;   * I don&apos;t wan&apos;t to block (so don&apos;t want to use g_spawn_sync()) because, if everything goes fine (server running and loading the test HTML properly), I want the server to keep running as a child process until I don&apos;t need it anymore. And this could mean keeping it alive and running while executing one or more tests.

ok, g_spawn_async_with_pipes() then.

&gt;   * I want to block exactly after spawning the child process with spawn_async and before exiting the runTestServer() function, because I don&apos;t want any test to start running before being sure the server is ready, which is what I know through the &quot;OK&quot; message.

That&apos;s what I meant in my previous comment, you want to block when reading stdout. Do not set the file descriptor as non-blocking and use read or even g_io_channel_read_chars().

&gt;   * I can&apos;t use GIO channels and the add_watch() thing, because I can&apos;t rely on the main loop to handle the response from the child process, since that would mean exiting runTestServer() too soon (before handling the &quot;OK&quot; message). This is related to the previous point (why I want to block there).

Yes, that&apos;s why I proposed to use a blocking file descriptor, you don&apos;t need to use watchers, because read will block.

&gt;   * I need the non-blocking thing in the file descriptor to implement the timeout thing so, in case something goes wrong in the child process, we make sure to kill it after some time, so the test doesn&apos;t hang.

For the timeout thing you can use the thread killer I proposed. 

&gt; Hope this time I explained better :-)

Yes :-) If you think it&apos;s better to use loop + non-blocking read + sleep, just ignore my proposal and fix your current one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532290</commentid>
    <comment_count>23</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-09 10:33:37 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; [...]
&gt; Yes :-) If you think it&apos;s better to use loop + non-blocking read + sleep, just ignore my proposal and fix your current one.

I finally used your suggestion of &quot;killer thread&quot; + GIOChannel, but with g_spawn_async(). You&apos;ll see it in the patch I&apos;m attaching soonish... :-)

Thanks for your (very helpful) feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532293</commentid>
    <comment_count>24</comment_count>
      <attachid>121681</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-09 10:34:25 -0800</bug_when>
    <thetext>Created attachment 121681
Patch proposal

Thanks again Carlos for your feedback. Now attaching another patch addressing the issues you pointed out, as well as incorporating Martin&apos;s suggestion of adding at-spi2-{core|atk} (and the needed version) to jhbuild modules.

As for the g_spawn_sync thing (pointed out in a separate comments), I made sure to close the file descriptor (which was leaking as you noticed) and, finally, changed the code to use your suggestion of the &quot;killer thread&quot; + the GIOChannel... but with g_spawn_async(), as you also pointed out in your last comment (Thanks!)

So, I think we&apos;ve reached some consensus here, or at least I hope so... :-)

Now, see some comments inline below...

(In reply to comment #11)
&gt; (From update of attachment 120955 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120955&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:341
&gt; &gt; +static AtkObject* webkitWebViewBaseGetAccessible(GtkWidget *widget)
&gt; 
&gt; GtkWidget *widget -&gt; GtkWidget* widget
&gt;
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:64
&gt; &gt; +static AtkStateSet* webkitWebViewBaseAccessibleRefStateSet(AtkObject *atkObject)
&gt; 
&gt; AtkObject *atkObject -&gt; AtkObject* atkObject 
&gt;
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:68
&gt; &gt; +    AtkStateSet* state_set;
&gt; 
&gt; state_set -&gt; stateSet
&gt;
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:83
&gt; &gt; +static gint webkitWebViewBaseAccessibleGetIndexInParent(AtkObject *atkObject)
&gt; 
&gt; AtkObject *atkObject -&gt; AtkObject* atkObject
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:85
&gt; &gt; +    g_return_val_if_fail(ATK_IS_OBJECT(atkObject), -1);
&gt; 
&gt; Don&apos;t use g_return macros in private static code, note that atk_object_get_index_in_parent() already has that check, so it doesn&apos;t get here if pointer is not a valid AtkObject.
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:128
&gt; &gt; +    AtkObject* object = static_cast&lt;AtkObject*&gt;(g_object_new(WEBKIT_TYPE_WEB_VIEW_BASE_ACCESSIBLE, 0));
&gt; 
&gt; Use ATK_OBJECT() instead of static_cast. Use NULL instead of 0 in g_object_new() since it&apos;s a sentinel
&gt; 
Fixed (Done the same fix in WebPageAccessibilityObject, btw).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:31
&gt; &gt; +#include &lt;webkit2/WebKitDefines.h&gt;
&gt; 
&gt; Do you need this?
&gt; 
Not actually. Removed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:55
&gt; &gt; +    WebKitWebLoaderClient* loaderClient = webkit_web_view_get_loader_client(webView);
&gt; 
&gt; Loader client has been already removed, use WebKitWebView::load-changed instead.
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:58
&gt; &gt; +    int child_stdout = 0;
&gt; 
&gt; child_stdout -&gt; childStdout
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:113
&gt; &gt; +    GRefPtr&lt;AtspiAccessible&gt; desktop = atspi_get_desktop(0);
&gt; 
&gt; atspi_get_desktop returns a new ref, so you should use adoptGRef() here.
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:136
&gt; &gt; +    GRefPtr&lt;AtspiAccessible&gt; currentChild = atspi_accessible_get_child_at_index(currentParent.get(), 0, 0);
&gt; 
&gt; I think you should use adoptGRef here too.
&gt;
You are right. Fixed.

&gt; Use Test::assertObjectIsDeletedWhenTestFinishes() to make sure you don&apos;t leak anything.
&gt; 
I can&apos;t use that, since the test doesn&apos;t own the object at all, which has a ref_count greater than 1 both when retrieving it here and when finishing the test, since libatspi keeps the full a11y hierarchy cached and so several references to these objects, which therefore won&apos;t have a ref_count of 0 by any means with finishing the test, so they won&apos;t get deleted at that point.

Still, your point has been helpful anyway, since it&apos;s true I was leaking one reference by no using adoptGRef(). Thanks.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:78
&gt; &gt; +    g_return_val_if_fail(ATK_IS_OBJECT(atkObject), -1);
&gt; 
&gt; Don&apos;t use g_return macro here.
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:110
&gt; &gt; +    accessible-&gt;m_page = 0;
&gt; 
&gt; accessible is already initialized to 0 when allocated.
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:128
&gt; &gt; +    AtkObject* object = static_cast&lt;AtkObject*&gt;(g_object_new(WEB_TYPE_PAGE_ACCESSIBILITY_OBJECT, 0));
&gt; 
&gt; Use NULL instead of 0 in g_object_new
&gt; 
Fixed.

&gt; &gt; Tools/Scripts/run-gtk-tests:98
&gt; &gt; +    paths_to_check = [ &quot;/usr/libexec&quot;,
&gt; &gt; +                       &quot;/usr/lib/at-spi2-core&quot;,
&gt; &gt; +                       &quot;/usr/lib32/at-spi2-core&quot;
&gt; &gt; +                       &quot;/usr/lib64/at-spi2-core&quot; ]
&gt; 
&gt; Maybe we can use pkg-config --variable=exec_prefix atspi-2 ?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532298</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 10:36:56 -0800</bug_when>
    <thetext>Attachment 121681 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u...&quot; exit_code: 1

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h&quot;
Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:53:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:84:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 2 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532301</commentid>
    <comment_count>26</comment_count>
      <attachid>121681</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-09 10:38:59 -0800</bug_when>
    <thetext>Comment on attachment 121681
Patch proposal

Attachment 121681 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11184581</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532317</commentid>
    <comment_count>27</comment_count>
      <attachid>121688</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-09 10:55:13 -0800</bug_when>
    <thetext>Created attachment 121688
Patch proposal

New patch avoiding the errors triggered by the last one...

(In reply to comment #25)
&gt; Attachment 121681 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u...&quot; exit_code: 1
&gt; 
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h&quot;
&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:53:  Missing space before ( in if(  [whitespace/parens] [5]
&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:84:  Missing space after ,  [whitespace/comma] [3]
&gt; Total errors found: 2 in 22 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Forgot to run check-webkit-style before uploading the patch. Sorry!

(In reply to comment #26)
&gt; (From update of attachment 121681 [details])
&gt; Attachment 121681 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/11184581

ATSPI2 is an optional dependency, and in this case it&apos;s failing to build in the EWS because the package is there, but its version is not recent enough. In that case, the configure script should just say that ATSPI2 is not available and continue, instead of stopping there. Fixed in this new patch as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532329</commentid>
    <comment_count>28</comment_count>
      <attachid>121688</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-09 11:04:23 -0800</bug_when>
    <thetext>Comment on attachment 121688
Patch proposal

Attachment 121688 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11166585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532858</commentid>
    <comment_count>29</comment_count>
      <attachid>121688</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-10 00:19:06 -0800</bug_when>
    <thetext>Comment on attachment 121688
Patch proposal

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

It looks good to me, great work!. I have just a few more comments, sorry :-P

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:33
&gt; +int
&gt; +main(int argc, char** argv)

This should be one line.

&gt; Tools/Scripts/run-gtk-tests:77
&gt; +        for path in paths_to_check:
&gt; +            filepath = os.path.join(exec_prefix, path, filename)
&gt; +            if os.path.isfile(filepath):
&gt; +                return filepath
&gt; +            return None

You are only checking the first path, the return should be after the loop.

&gt; Tools/Scripts/run-gtk-tests:97
&gt; +        Executive().popen([&quot;xprop&quot;, &quot;-root&quot;, &quot;-remove&quot;, &quot;AT_SPI_BUS&quot;],
&gt; +                          env=test_env, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

Don&apos;t use pipes if you are not going to read/write from/to them

&gt; Tools/Scripts/run-gtk-tests:105
&gt; +                a11y_bus_launcher = Executive().popen([a11y_bus_launcher_path],
&gt; +                                                      env=test_env, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

Ditto.

&gt; Tools/Scripts/run-gtk-tests:116
&gt; +                a11y_registryd = Executive().popen([&quot;%s/at-spi2-registryd&quot; % atspi2_exec_path],
&gt; +                                                   env=test_env, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532905</commentid>
    <comment_count>30</comment_count>
      <attachid>121814</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-10 02:16:11 -0800</bug_when>
    <thetext>Created attachment 121814
Patch proposal

(In reply to comment #29)
&gt; (From update of attachment 121688 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121688&amp;action=review
&gt; 
&gt; It looks good to me, great work!. I have just a few more comments, sorry :-P

No worries. Everytime you point something out the patch gets better, so I&apos;m more than happy to address those issues.

Now attaching a new patch taking care of these new ones. See my comments below...

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:33
&gt; &gt; +int
&gt; &gt; +main(int argc, char** argv)
&gt; 
&gt; This should be one line.

Fixed.

&gt; &gt; Tools/Scripts/run-gtk-tests:77
&gt; &gt; +        for path in paths_to_check:
&gt; &gt; +            filepath = os.path.join(exec_prefix, path, filename)
&gt; &gt; +            if os.path.isfile(filepath):
&gt; &gt; +                return filepath
&gt; &gt; +            return None
&gt; 
&gt; You are only checking the first path, the return should be after the loop.

Argh! Dammed python indentation thing... Fixed.
 
&gt; &gt; Tools/Scripts/run-gtk-tests:97
&gt; &gt; +        Executive().popen([&quot;xprop&quot;, &quot;-root&quot;, &quot;-remove&quot;, &quot;AT_SPI_BUS&quot;],
&gt; &gt; +                          env=test_env, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
&gt; 
&gt; Don&apos;t use pipes if you are not going to read/write from/to them

Fixed. I also switched to run_command() here since for &apos;xprop&apos; I won&apos;t need the process later on to kill it (it&apos;s not a daemon).

&gt; &gt; Tools/Scripts/run-gtk-tests:105
&gt; &gt; +                a11y_bus_launcher = Executive().popen([a11y_bus_launcher_path],
&gt; &gt; +                                                      env=test_env, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
&gt; 
&gt; Ditto.

Fixed. In this case I kept using popen() because I need to make sure I kill the process later on.

&gt; &gt; Tools/Scripts/run-gtk-tests:116
&gt; &gt; +                a11y_registryd = Executive().popen([&quot;%s/at-spi2-registryd&quot; % atspi2_exec_path],
&gt; &gt; +                                                   env=test_env, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
&gt; 
&gt; Ditto.

Fixed. In this case I kept using popen() because I need to make sure I kill the process later on.

Also, I fixed another bug in there: 

   Bad:
     Executive().popen([&quot;%s/at-spi2-registryd&quot; % atspi2_exec_path] ...

  Good:
     Executive().popen([a11y_registryd_path] ...

Last, I added another modification to this patch, to avoid the following kind of errors when generating the docs:

  Generating WebKit2 documentation...
  ./webkit2gtk-unused.txt:1: warning: 11 unused declarations.They should be added to webkit2gtk-sections.txt in the appropriate place.
  ./webkit2gtk-unused.txt:1: warning: 11 unused declarations.They should be added to webkit2gtk-sections.txt in the appropriate place.

   gtkdoc did not build without warnings

The modification is as follows:

diff --git a/Tools/gtk/generate-gtkdoc b/Tools/gtk/generate-gtkdoc
index db5f83a..0c18a38 100755
--- a/Tools/gtk/generate-gtkdoc
+++ b/Tools/gtk/generate-gtkdoc
@@ -62,6 +62,7 @@ def get_webkit2_options():
                          glob.glob(src_path(&apos;PageClientImpl.*&apos;)) + \
                          glob.glob(src_path(&apos;WebKitUIClient.*&apos;)) + \
                          glob.glob(src_path(&apos;WebKitWebLoaderClient.*&apos;)) + \
+                         glob.glob(src_path(&apos;WebKitWebViewBaseAccessible.*&apos;)) + \
                          glob.glob(src_path(&apos;tests/*.h&apos;))
     })
     return (common.build_path(&apos;Source&apos;, &apos;WebKit2&apos;, &apos;webkit2gtk-3.0.pc&apos;), options)


That&apos;s all I think. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536941</commentid>
    <comment_count>31</comment_count>
      <attachid>121814</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-17 01:02:10 -0800</bug_when>
    <thetext>Comment on attachment 121814
Patch proposal

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

Looks good to me in general, great work!

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:88
&gt; +    AtkObject* rootObject = accessibilityRootObjectWrapper(atkObject);
&gt; +    if (!rootObject)
&gt; +        return 0;
&gt; +
&gt; +    return 1;

This could be simply:

return accessibilityRootObjectWrapper(atkObject) ? 1 : 0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537762</commentid>
    <comment_count>32</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-18 03:54:01 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 121814 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121814&amp;action=review
&gt; 
&gt; Looks good to me in general, great work!

Thanks again, Carlos. Now it would be great if just one reviewer could perform more formal review of the patch (/me grins) :-)

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:88
&gt; &gt; +    AtkObject* rootObject = accessibilityRootObjectWrapper(atkObject);
&gt; &gt; +    if (!rootObject)
&gt; &gt; +        return 0;
&gt; &gt; +
&gt; &gt; +    return 1;
&gt; 
&gt; This could be simply:
&gt; 
&gt; return accessibilityRootObjectWrapper(atkObject) ? 1 : 0;

Will keep this comment in mind for the next round of &quot;changes&quot;, that I&apos;m sure will happen after the patch starts getting formal reviews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537930</commentid>
    <comment_count>33</comment_count>
      <attachid>121814</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-18 09:38:34 -0800</bug_when>
    <thetext>Comment on attachment 121814
Patch proposal

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

This look fabulous! I have a bunch of really minor comments below and one or two larger concerns.

&gt; Source/WebKit2/ChangeLog:9
&gt; +        architecture of WK2 through AtkSocket ad AtkPlug.

ad -&gt; and

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:2
&gt; + * Copyright (C) 2011 Igalia S.L.

This should be 2012 now.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:12
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; + *    documentation and/or other materials provided with the distribution.
&gt; + *

Let&apos;s use LPGL here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:7
&gt; + * Copyright (C) 2011 Igalia S.L.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1. Redistributions of source code must retain the above copyright

2012 and LGPL again.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:30
&gt; +#include &lt;gtk/gtk.h&gt;

I don&apos;t think you need the GTK+ include here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:2
&gt; + * Copyright (C) 2011 Igalia S.L.

2012

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:2
&gt; + * Copyright (C) 2011 Igalia S.L.

2012

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:28
&gt; +// The libatspi headers don&apos;t use G_BEGIN_DECLS
&gt; +extern &quot;C&quot; {
&gt; +#include &lt;atspi/atspi.h&gt;
&gt; +}

Drop this down to the last include if possible to avoid breaking the block of includes.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:524
&gt; +#if PLATFORM(GTK)
&gt; +    // Ensure the accessibility hierarchy is updated after loading.
&gt; +    webPage-&gt;updateAccessibilityTree();
&gt; +#endif

Are you trying to find the right time to hook into the DOM? If so this should be in ::dispatchDidClearWindowObjectInWorld, I believe.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:1
&gt; +/*

These files should be called Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObject.cpp/.h because they aren&apos;t GTK+ specific implementation files of cross-platform classes.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:2
&gt; + * Copyright (C) 2011 Igalia S.L.

2012 here.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:94
&gt; +    if (index &lt; 0 || index &gt; 1)

index != 0 &amp;&amp; index != 1?

&gt; Tools/Scripts/run-gtk-tests:67
&gt; +    def _lookupAtspi2Binary(self, jhbuild_path, filename):

I&apos;m pretty sure PEP-8 naming conventions say this should be _lookup_atspi2_binary or _find_atspi2_binary, but I&apos;m not certain here.

&gt; Tools/Scripts/run-gtk-tests:95
&gt; +        # Make sure there&apos;s no X&apos;s property AT_SPI_BUS previously set,

X&apos;s property AT_SPI_BUS -&gt; AT_SPI_BUS X property?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537960</commentid>
    <comment_count>34</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-18 10:05:51 -0800</bug_when>
    <thetext>Mario asked me to clarify the licensing situation. In general, in WebCore/WebKit we try to match the licenses of other files in the directories. In the API though we are shooting for 100% LGPL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538772</commentid>
    <comment_count>35</comment_count>
      <attachid>123143</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-19 09:47:50 -0800</bug_when>
    <thetext>Created attachment 123143
Patch Proposal

(In reply to comment #33)
&gt; (From update of attachment 121814 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121814&amp;action=review
&gt; 
&gt; This look fabulous! I have a bunch of really minor comments below and one or two larger concerns.

Thanks! I think the new patch addresses all the issus you pointed out. Just making a couple of minor comments on some of them. Find them below...

&gt; &gt; Source/WebKit2/ChangeLog:9
&gt; &gt; +        architecture of WK2 through AtkSocket ad AtkPlug.
&gt; 
&gt; ad -&gt; and

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:2
&gt; &gt; + * Copyright (C) 2011 Igalia S.L.
&gt; 
&gt; This should be 2012 now.

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:12
&gt; &gt; + * Redistribution and use in source and binary forms, with or without
&gt; &gt; + * modification, are permitted provided that the following conditions
&gt; &gt; + * are met:
&gt; &gt; + * 1. Redistributions of source code must retain the above copyright
&gt; &gt; + *    notice, this list of conditions and the following disclaimer.
&gt; &gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; &gt; + *    notice, this list of conditions and the following disclaimer in the
&gt; &gt; + *    documentation and/or other materials provided with the distribution.
&gt; &gt; + *
&gt; 
&gt; Let&apos;s use LPGL here.

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:7
&gt; &gt; + * Copyright (C) 2011 Igalia S.L.
&gt; &gt; + *
&gt; &gt; + * Redistribution and use in source and binary forms, with or without
&gt; &gt; + * modification, are permitted provided that the following conditions
&gt; &gt; + * are met:
&gt; &gt; + * 1. Redistributions of source code must retain the above copyright
&gt; 
&gt; 2012 and LGPL again.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBaseAccessible.h:30
&gt; &gt; +#include &lt;gtk/gtk.h&gt;
&gt; 
&gt; I don&apos;t think you need the GTK+ include here.

Fixed (moved to the implementation cpp file)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:2
&gt; &gt; + * Copyright (C) 2011 Igalia S.L.
&gt; 
&gt; 2012

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:2
&gt; &gt; + * Copyright (C) 2011 Igalia S.L.
&gt; 
&gt; 2012

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:28
&gt; &gt; +// The libatspi headers don&apos;t use G_BEGIN_DECLS
&gt; &gt; +extern &quot;C&quot; {
&gt; &gt; +#include &lt;atspi/atspi.h&gt;
&gt; &gt; +}
&gt; 
&gt; Drop this down to the last include if possible to avoid breaking the block of includes.

Hmm... can&apos;t do this without getting check-webkit-style complaining about unsorted list of includes, so I left it at the beginning of the list of global (system) includes

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:524
&gt; &gt; +#if PLATFORM(GTK)
&gt; &gt; +    // Ensure the accessibility hierarchy is updated after loading.
&gt; &gt; +    webPage-&gt;updateAccessibilityTree();
&gt; &gt; +#endif
&gt; 
&gt; Are you trying to find the right time to hook into the DOM? If so this should be in ::dispatchDidClearWindowObjectInWorld, I believe.

You&apos;re right. Thanks for pointing it out. Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:1
&gt; &gt; +/*
&gt; 
&gt; These files should be called Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObject.cpp/.h because they aren&apos;t GTK+ specific implementation files of cross-platform classes.

Ok. Fixed. Updated callers.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:2
&gt; &gt; + * Copyright (C) 2011 Igalia S.L.
&gt; 
&gt; 2012 here.

Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObjectGtk.cpp:94
&gt; &gt; +    if (index &lt; 0 || index &gt; 1)
&gt; 
&gt; index != 0 &amp;&amp; index != 1?

Fixed.

&gt; &gt; Tools/Scripts/run-gtk-tests:67
&gt; &gt; +    def _lookupAtspi2Binary(self, jhbuild_path, filename):
&gt; 
&gt; I&apos;m pretty sure PEP-8 naming conventions say this should be _lookup_atspi2_binary or _find_atspi2_binary, but I&apos;m not certain here.

Fixed (used _lookup_atspi2_binary).

&gt; &gt; Tools/Scripts/run-gtk-tests:95
&gt; &gt; +        # Make sure there&apos;s no X&apos;s property AT_SPI_BUS previously set,
&gt; 
&gt; X&apos;s property AT_SPI_BUS -&gt; AT_SPI_BUS X property?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538806</commentid>
    <comment_count>36</comment_count>
      <attachid>123143</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-19 10:56:02 -0800</bug_when>
    <thetext>Comment on attachment 123143
Patch Proposal

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

Looks good, but please make the following change before landing.

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:575
&gt; +    String getAccessibilityPlugID() const { return m_accessibilityPlugID; }

In WebKit we typically don&apos;t use the getFoo naming scheme. Instead we just use foo().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539385</commentid>
    <comment_count>37</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-20 03:30:10 -0800</bug_when>
    <thetext>Committed r105503: &lt;http://trac.webkit.org/changeset/105503&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117752</attachid>
            <date>2011-12-03 03:33:21 -0800</date>
            <delta_ts>2011-12-04 11:37:55 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2011-12-03-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>53626</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBmZTU0NzFmYTQxMWI3YmU5OWIxNmE0YTIxZWVkNTgyNmU4MmE3NmMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE5IE9jdCAyMDExIDIwOjA1OjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMS0xMi0wMyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQy
IHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBFeHBvc2UgdGhlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIHRoZSBtdWx0
aS1wcm9jZXNzCiAgICAgICAgYXJjaGl0ZWN0dXJlIG9mIFdLMiB0aHJvdWdoIEF0a1NvY2tldCBh
ZCBBdGtQbHVnLgoKICAgICAgICBJbXBsZW1lbnQgdGhlIHBhcnQgaW4gdGhlIFVJUHJvY2Vzcywg
YnkgbWFraW5nIHRoZSBXZWJWaWV3IHdpZGdldAogICAgICAgIHJldHVybiBhbiBBdGtTb2NrZXQg
d2hlbiBjYWxsaW5nIHRvIGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoKS4KCiAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcy4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VGaW5hbGl6
ZSk6CiAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQpOgogICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZUdldEFjY2Vzc2libGUpOgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9j
bGFzc19pbml0KToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZS5jcHA6IEFkZGVkLgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2li
bGVXaWRnZXREZXN0cm95ZWQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVJ
bml0aWFsaXplKToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUmVmU3RhdGVT
ZXQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50
KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9pbml0KToKICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9jbGFzc19pbml0KToKICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9uZXcpOgogICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmg6IEFkZGVkLgoKICAgICAgICBJ
bXBsZW1lbnQgdGhlIHBhcnQgaW4gdGhlIFdlYlByb2Nlc3MsIGJ5IG1ha2luZyB0aGUgV2ViUGFn
ZSBjcmVhdGUKICAgICAgICBhbiBBdGtQbHVnIG9uIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc2Vu
ZGluZyB0aGUgSUQgb2YgdGhhdCBwbHVnCiAgICAgICAgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIGl0
IGNhbiBlbWJlZCB0aGUgcGx1ZyBpbiB0aGUgc29ja2V0LgoKICAgICAgICBBbHNvLCBpdCB0YWtl
cyBjYXJlIG9mIGFsbCB0aGUgbmVlZGVkIHdyYXBwaW5nIGFyb3VuZCB0aGUKICAgICAgICBXZWJD
b3JlJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3RzLCBleHBvc2luZyB0aGVtIGluIHRoZSBVSSBwcm9j
ZXNzJ3MKICAgICAgICBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tl
dC1wbHVnIGNvbm5lY3Rpb24uCgogICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgog
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CiAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgogICAgICAgICogVUlQ
cm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwOgogICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6YmluZEFjY2Vzc2liaWxpdHlUcmVlKToKICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuY3BwOiBBZGRlZC4KICAgICAgICAo
YWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVyKToKICAgICAgICAod2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3RJbml0aWFsaXplKToKICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RHZXRJbmRleEluUGFyZW50KToKICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RH
ZXROQ2hpbGRyZW4pOgogICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZkNoaWxk
KToKICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfaW5pdCk6CiAgICAgICAg
KHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2NsYXNzX2luaXQpOgogICAgICAgICh3ZWJf
cGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9uZXcpOgogICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oOiBBZGRlZC4KICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6CiAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKCiAgICAgICAgTmV3IHVuaXQgdGVzdCBmb3Ig
Y2hlY2tpbmcgYWNjZXNzaWJpbGl0eSBzdXBwb3J0IGluIFdLMkdUSy4KCiAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHA6IEFkZGVkLgog
ICAgICAgIChsb2FkX2ZpbmlzaGVkX2NiKTogTm90aWZ5IHRoZSBwYXJlbnQgcHJvY2VzcyAodGhl
IHRlc3QpIHdoZW4gcmVhZHkuCiAgICAgICAgKG1haW4pOgogICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHA6IEFkZGVkLgogICAgICAgIChydW5UZXN0
U2VydmVyKToKICAgICAgICAoc3RvcFRlc3RTZXJ2ZXIpOgogICAgICAgIChzaWdBYm9ydEhhbmRs
ZXIpOgogICAgICAgIChjaGVja19hdHNwaV9hY2Nlc3NpYmxlKToKICAgICAgICAoZmluZF90ZXN0
X3NlcnZlcl9hcHBsaWNhdGlvbik6CiAgICAgICAgKHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KToK
ICAgICAgICAoYmVmb3JlQWxsKToKICAgICAgICAoYWZ0ZXJBbGwpOgoKMjAxMS0xMi0wMyAgTWFy
aW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CgogICAgICAgIFtHVEtdIEV4
cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFz
ZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
NTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBFbnN1cmUg
dGhlIGFjY2Vzc2liaWxpdHkgaW5mcmFzdHJ1Y3R1cmUgaXMgYXZhaWxhYmxlIHdoZW4gcnVubmlu
ZwogICAgICAgIHRoZSB1bml0IHRlc3RzLCBvdGhlcndpc2UgV0syJ3MgYWNjZXNzaWJpbGl0eSB0
ZXN0cyB3b24ndCB3b3JrLgoKICAgICAgICAqIFNjcmlwdHMvcnVuLWd0ay10ZXN0czoKICAgICAg
ICAoVGVzdFJ1bm5lci5ydW4pOiBJbml0aWFsaXplIHRoZSBhY2Nlc3NpYmlsaXR5IGluZnJhc3Ry
dWN0dXJlLgogICAgICAgIChsb29rdXBBdHNwaTJCaW5hcnkpOiBOZXcuIExvb2tzIGZvciB0aGUg
ZGlyZWN0b3J5IHdoZXJlIGF0LXNwaTIncwogICAgICAgIHN0dWZmIGlzIGxvY2F0ZWQgKGxpa2Ug
YXQtc3BpLWJ1cy1sYXVuY2hlciBhbmQgYXQtc3BpMi1yZWdpc3RyeWQpLgoKMjAxMS0xMi0wMyAg
TWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CgogICAgICAgIFtHVEtd
IEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkg
YmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBOZXcg
ZGVwZW5kZW5jeSByZXF1aXJlZCBmb3IgV0syJ3MgYWNjZXNzaWJpbGl0eSB1bml0IHRlc3Q6IEFU
LVNQSTIuCgogICAgICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgQVQtU1BJMiB3aGVuIGJ1
aWxkaW5nIHdpdGggV0syIHN1cHBvcnQuCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsKIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3MSArKysrKysrCiBTb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCAgICAgICAgfCAgIDM5ICsrKysKIC4u
Li9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAgICAgICAgIHwgIDExOSAr
KysrKysrKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmggICAg
ICAgICAgfCAgIDY3ICsrKysrKwogLi4uL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RT
ZXJ2ZXIuY3BwICAgICAgfCAgIDYyICsrKysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gfCAgIDIxICsrLQogLi4uL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwICAgICAgfCAgMjE0ICsrKysrKysrKysrKysrKysrKysr
CiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggICAgICAgICAgICB8ICAg
IDkgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAg
fCAgICAzICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNw
cCAgIHwgICAgNSArCiAuLi4vV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RH
dGsuY3BwICB8ICAxMzEgKysrKysrKysrKysrCiAuLi4vV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3RHdGsuaCAgICB8ICAgNjIgKysrKysrCiAuLi4vV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwICB8ICAgMTEgKy0KIFRvb2xzL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArKwogVG9vbHMvU2Ny
aXB0cy9ydW4tZ3RrLXRlc3RzICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUxICsrKysrLQog
Y29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5
ICsKIDE4IGZpbGVzIGNoYW5nZWQsIDkwMSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0Fj
Y2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdEd0ay5oCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDAzMTcx
N2EuLmE5YzFhODcgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxMS0xMi0wMyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRXhwb3NlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5
IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNlZCBBVHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGRlcGVuZGVuY3kgcmVxdWlyZWQgZm9yIFdL
MidzIGFjY2Vzc2liaWxpdHkgdW5pdCB0ZXN0OiBBVC1TUEkyLgorCisgICAgICAgICogY29uZmln
dXJlLmFjOiBDaGVjayBmb3IgQVQtU1BJMiB3aGVuIGJ1aWxkaW5nIHdpdGggV0syIHN1cHBvcnQu
CisKIDIwMTEtMTEtMzAgIE1hcnkgV3UgIDxtYXJ5Lnd1QHRvcmNobW9iaWxlLmNvbS5jbj4KIAog
ICAgICAgICByZW1vdmUgYnVpbGRpbmZvcm1hdGlvbiBmcm9tIEJsYWNrQmVycnkgcG9ydGluZyBi
dWlsZCBzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhNTVlNGZiLi5kM2JlMTU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMTEtMTItMDMgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hl
ekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJh
cmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSB0aGUgYWNjZXNzaWJpbGl0eSBo
aWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKKyAgICAgICAgYXJjaGl0ZWN0dXJlIG9mIFdL
MiB0aHJvdWdoIEF0a1NvY2tldCBhZCBBdGtQbHVnLgorCisgICAgICAgIEltcGxlbWVudCB0aGUg
cGFydCBpbiB0aGUgVUlQcm9jZXNzLCBieSBtYWtpbmcgdGhlIFdlYlZpZXcgd2lkZ2V0CisgICAg
ICAgIHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5nIHRvIGd0a193aWRnZXRfZ2V0X2Fj
Y2Vzc2libGUoKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlRmluYWxpemUpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2Jhc2VfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUdldEFjY2Vzc2libGUpOgor
ICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcDogQWRkZWQuCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlSW5pdGlhbGl6ZSk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVSZWZTdGF0ZVNldCk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KToKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
YmFzZV9hY2Nlc3NpYmxlX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jh
c2VfYWNjZXNzaWJsZV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZS5oOiBBZGRlZC4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIHBh
cnQgaW4gdGhlIFdlYlByb2Nlc3MsIGJ5IG1ha2luZyB0aGUgV2ViUGFnZSBjcmVhdGUKKyAgICAg
ICAgYW4gQXRrUGx1ZyBvbiBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHNlbmRpbmcgdGhlIElEIG9m
IHRoYXQgcGx1ZworICAgICAgICB0byB0aGUgVUkgcHJvY2Vzcywgc28gaXQgY2FuIGVtYmVkIHRo
ZSBwbHVnIGluIHRoZSBzb2NrZXQuCisKKyAgICAgICAgQWxzbywgaXQgdGFrZXMgY2FyZSBvZiBh
bGwgdGhlIG5lZWRlZCB3cmFwcGluZyBhcm91bmQgdGhlCisgICAgICAgIFdlYkNvcmUncyBhY2Nl
c3NpYmlsaXR5IG9iamVjdHMsIGV4cG9zaW5nIHRoZW0gaW4gdGhlIFVJIHByb2Nlc3MncworICAg
ICAgICBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tldC1wbHVnIGNv
bm5lY3Rpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6YmluZEFjY2Vzc2liaWxpdHlUcmVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChh
Y2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIpOgorICAgICAgICAod2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3RJbml0aWFsaXplKToKKyAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2Jq
ZWN0R2V0SW5kZXhJblBhcmVudCk6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dEdldE5DaGlsZHJlbik6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZkNo
aWxkKToKKyAgICAgICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2luaXQpOgorICAg
ICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9uZXcpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaDogQWRkZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKworICAgICAgICBOZXcgdW5p
dCB0ZXN0IGZvciBjaGVja2luZyBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgaW4gV0syR1RLLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKGxvYWRfZmluaXNoZWRfY2IpOiBOb3RpZnkgdGhlIHBhcmVu
dCBwcm9jZXNzICh0aGUgdGVzdCkgd2hlbiByZWFkeS4KKyAgICAgICAgKG1haW4pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcDogQWRkZWQu
CisgICAgICAgIChydW5UZXN0U2VydmVyKToKKyAgICAgICAgKHN0b3BUZXN0U2VydmVyKToKKyAg
ICAgICAgKHNpZ0Fib3J0SGFuZGxlcik6CisgICAgICAgIChjaGVja19hdHNwaV9hY2Nlc3NpYmxl
KToKKyAgICAgICAgKGZpbmRfdGVzdF9zZXJ2ZXJfYXBwbGljYXRpb24pOgorICAgICAgICAodGVz
dEF0c3BpQmFzaWNIaWVyYXJjaHkpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFm
dGVyQWxsKToKKwogMjAxMS0xMS0zMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgW0d0a10gTGlua3Mgc2hvdWxkIGJlIFRhYi1mb2N1c2FibGUg
YnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBkYzFiZjNkLi41ZDZkMWEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNTM0LDYgKzUzNCw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFf
U09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZh
dGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1
dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwIFwKQEAgLTg2Niw2
ICs4NjgsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BX
RUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3Rvckd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCBcCisJ
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUGFnZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUhvc3QuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggN2ViYTczZS4uOTU1Nzk3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgorI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvRHJhZ0ljb24uaD4KQEAgLTY4LDYgKzY5LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUgewogICAgIENTdHJpbmcgdG9vbHRpcFRleHQ7CiAgICAgR3RrRHJhZ0FuZERyb3BI
ZWxwZXIgZHJhZ0FuZERyb3BIZWxwZXI7CiAgICAgRHJhZ0ljb24gZHJhZ0ljb247CisgICAgQXRr
T2JqZWN0KiBhY2Nlc3NpYmxlOwogfTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFz
ZSwgd2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19UWVBFX0NPTlRBSU5FUikKQEAgLTEyNyw2ICsx
MjksMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VGaW5hbGl6ZShHT2JqZWN0KiBn
b2JqZWN0KQogICAgICAgICBwcml2LT5pbUNvbnRleHQgPSAwOwogICAgIH0KIAorICAgIGlmIChw
cml2LT5hY2Nlc3NpYmxlKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPmFjY2Vzc2li
bGUpOworICAgICAgICBwcml2LT5hY2Nlc3NpYmxlID0gMDsKKyAgICB9CisKICAgICBwcml2LT5w
YWdlUHJveHktPmNsb3NlKCk7CiAKICAgICBkZWxldGUgcHJpdjsKQEAgLTE0Nyw2ICsxNTQsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSkKICAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVyZWQo
dmlld1dpZGdldCwgRkFMU0UpOwogICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh2aWV3V2lk
Z2V0LCBUUlVFKTsKICAgICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGljb250ZXh0X25l
dygpOworICAgIHByaXYtPmFjY2Vzc2libGUgPSAwOwogCiAgICAgcHJpdi0+cGFnZUNsaWVudCA9
IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUodmlld1dpZGdldCk7CiAKQEAgLTM0NCw2ICszNTIsMzYg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCoKICAgICBnZGtfZHJhZ19zdGF0dXMoY29udGV4dCwg
ZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihvcGVyYXRpb24pLCB0aW1lKTsKIH0K
IAorc3RhdGljIEF0a09iamVjdCogd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKEd0a1dp
ZGdldCAqd2lkZ2V0KQoreworICAgIC8vIElmIHRoZSBzb2NrZXQgYXMgYWxyZWFkeSBiZWVuIGNy
ZWF0ZWQgYW5kIGVtYmVkZGVkIGEgcGx1ZyBJRCwgcmV0dXJuIGl0LgorICAgIFdlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXY7
CisgICAgaWYgKHByaXYtPmFjY2Vzc2libGUgJiYgYXRrX3NvY2tldF9pc19vY2N1cGllZChBVEtf
U09DS0VUKHByaXYtPmFjY2Vzc2libGUpKSkKKyAgICAgICAgcmV0dXJuIHByaXYtPmFjY2Vzc2li
bGU7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFjY2Vzc2libGUgb2JqZWN0IGFuZCBhc3NvY2lhdGUg
aXQgdG8gdGhlIHdpZGdldC4KKyAgICBpZiAoIXByaXYtPmFjY2Vzc2libGUpIHsKKyAgICAgICAg
cHJpdi0+YWNjZXNzaWJsZSA9IEFUS19PQkpFQ1Qod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNz
aWJsZV9uZXcod2lkZ2V0KSk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBwYXJlbnQgbm90IHRvIGJy
ZWFrIGJvdHRvbS11cCBuYXZpZ2F0aW9uLgorICAgICAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdl
dCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3aWRnZXQpOworICAgICAgICBBdGtPYmplY3QqIGF4
UGFyZW50ID0gcGFyZW50V2lkZ2V0ID8gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShwYXJlbnRX
aWRnZXQpIDogMDsKKyAgICAgICAgaWYgKGF4UGFyZW50KQorICAgICAgICAgICAgYXRrX29iamVj
dF9zZXRfcGFyZW50KHByaXYtPmFjY2Vzc2libGUsIGF4UGFyZW50KTsKKyAgICB9CisKKyAgICAv
LyBUcnkgdG8gZW1iZWQgdGhlIHBsdWcgaW4gdGhlIHNvY2tldCwgaWYgcG9zc3NpYmxlLgorICAg
IFN0cmluZyBwbHVnSUQgPSBwcml2LT5wYWdlUHJveHktPmdldEFjY2Vzc2liaWxpdHlQbHVnSUQo
KTsKKyAgICBpZiAocGx1Z0lELmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcHJpdi0+YWNjZXNz
aWJsZTsKKworICAgIGdjaGFyKiBwbHVnSURTdHJpbmcgPSBnX3N0cmR1cChwbHVnSUQudXRmOCgp
LmRhdGEoKSk7CisgICAgYXRrX3NvY2tldF9lbWJlZChBVEtfU09DS0VUKHByaXYtPmFjY2Vzc2li
bGUpLCBwbHVnSURTdHJpbmcpOworICAgIGdfZnJlZShwbHVnSURTdHJpbmcpOworCisgICAgcmV0
dXJuIHByaXYtPmFjY2Vzc2libGU7Cit9CisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3
QmFzZURyYWdNb3Rpb24oR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0
LCBnaW50IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwpAQCAtNDA4LDYgKzQ0
Niw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0V2ViVmllCiAgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVh
dmUgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZTsKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19k
cm9wID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRHJvcDsKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19k
YXRhX3JlY2VpdmVkID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkOworICAgIHdp
ZGdldENsYXNzLT5nZXRfYWNjZXNzaWJsZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0QWNjZXNzaWJs
ZTsKIAogICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0V2ViVmlld0Jhc2VDbGFzcyk7CiAgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dFdlYlZpZXdCYXNlRmluYWxpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY3MzM1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nl
c3NpYmxlLmNwcApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgiCisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlUHJpdmF0ZSB7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQ7Cit9OworCitHX0RFRklO
RV9UWVBFKFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSwgd2Via2l0X3dlYl92aWV3X2Jhc2Vf
YWNjZXNzaWJsZSwgQVRLX1RZUEVfU09DS0VUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBhY2Nlc3NpYmxlLT5wcml2
LT53aWRnZXQgPSAwOworICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShBVEtfT0JK
RUNUKGFjY2Vzc2libGUpLCBBVEtfU1RBVEVfREVGVU5DVCwgVFJVRSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUluaXRpYWxpemUoQXRrT2JqZWN0KiBhdGtP
YmplY3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKEFUS19PQkpFQ1RfQ0xBU1Mod2Via2l0
X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKQorICAg
ICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfcGFy
ZW50X2NsYXNzKS0+aW5pdGlhbGl6ZShhdGtPYmplY3QsIGRhdGEpOworCisgICAgaWYgKGRhdGEg
JiYgR1RLX0lTX1dJREdFVChkYXRhKSkgeworICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vz
c2libGUqIGFjY2Vzc2libGUgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKGF0a09i
amVjdCk7CisgICAgICAgIGFjY2Vzc2libGUtPnByaXYtPndpZGdldCA9IEdUS19XSURHRVQoZGF0
YSk7CisKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9hZnRlcihhY2Nlc3NpYmxlLT5wcml2LT53
aWRnZXQsICJkZXN0cm95IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVdpZGdldERlc3Ryb3llZCksIGF0a09iamVj
dCk7CisgICAgfQorCisgICAgYXRrX29iamVjdF9zZXRfcm9sZShhdGtPYmplY3QsIEFUS19ST0xF
X0ZJTExFUik7Cit9CisKK3N0YXRpYyBBdGtTdGF0ZVNldCogd2Via2l0V2ViVmlld0Jhc2VBY2Nl
c3NpYmxlUmVmU3RhdGVTZXQoQXRrT2JqZWN0ICphdGtPYmplY3QpCit7CisgICAgV2ViS2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0VfQUND
RVNTSUJMRShhdGtPYmplY3QpOworCisgICAgQXRrU3RhdGVTZXQqIHN0YXRlX3NldDsKKyAgICBp
ZiAoYWNjZXNzaWJsZS0+cHJpdi0+d2lkZ2V0KSB7CisgICAgICAgIC8qIFVzZSB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgQXRrU29ja2V0IGlmIHRoZSB3aWRnZXQgaXMgc3RpbGwgYWxpdmUgKi8KKyAg
ICAgICAgc3RhdGVfc2V0ID0gQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9h
Y2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPnJlZl9zdGF0ZV9zZXQoYXRrT2JqZWN0KTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvKiBJZiB0aGUgd2lkZ2V0IGlzIG5vIGxvbmdlciBhbGl2ZSwgc2F2
ZSBzb21lIHJlbW90ZSBjYWxscworICAgICAgICAgICAoYmVjYXVzZSBvZiBBdGtTb2NrZXQncyBp
bXBsZW1lbnRhdGlvbiBvZiByZWZfc3RhdGVfc2V0KCkpCisgICAgICAgICAgIGFuZCBqdXN0IHJl
dHVybiB0aGF0IHRoaXMgQXRrT2JqZWN0IGlzIGRlZnVuY3QuICovCisgICAgICAgIHN0YXRlX3Nl
dCA9IGF0a19zdGF0ZV9zZXRfbmV3KCk7CisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRl
KHN0YXRlX3NldCwgQVRLX1NUQVRFX0RFRlVOQ1QpOworICAgIH0KKworICAgIHJldHVybiBzdGF0
ZV9zZXQ7Cit9CisKK3N0YXRpYyBnaW50IHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUdldElu
ZGV4SW5QYXJlbnQoQXRrT2JqZWN0ICphdGtPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoQVRLX0lTX09CSkVDVChhdGtPYmplY3QpLCAtMSk7CisKKyAgICBBdGtPYmplY3QqIGF0
a1BhcmVudCA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChhdGtPYmplY3QpOworICAgIGlmICghYXRr
UGFyZW50KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBndWludCBjb3VudCA9IGF0a19vYmpl
Y3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihhdGtQYXJlbnQpOworICAgIGZvciAoZ3VpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF0a1BhcmVudCwgaSk7CisgICAgICAgIGJvb2wg
Y2hpbGRJc09iamVjdCA9IGNoaWxkID09IGF0a09iamVjdCA/IHRydWUgOiBmYWxzZTsKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOworICAgICAgICBpZiAoY2hpbGRJc09iamVjdCkKKyAg
ICAgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9pbml0KFdlYktpdFdlYlZpZXdC
YXNlQWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBhY2Nlc3NpYmxlLT5wcml2ID0gbmV3
IFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUoKTsKKyAgICBhY2Nlc3NpYmxlLT5w
cml2LT53aWRnZXQgPSAwOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9h
Y2Nlc3NpYmxlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MqIGts
YXNzKQoreworICAgIEF0a09iamVjdENsYXNzKiBhdGtPYmplY3RDbGFzcyA9IEFUS19PQkpFQ1Rf
Q0xBU1Moa2xhc3MpOworCisgICAgLy8gTm8gbmVlZCB0byBpbXBsZW1lbnQgZ2V0X25fY2hpbGRy
ZW4oKSBhbmQgcmVmX2NoaWxkKCkgaGVyZQorICAgIC8vIHNpbmNlIHRoaXMgaXMgYSBzdWJjbGFz
cyBvZiBBdGtTb2NrZXQgYW5kIGFsbCB0aGUgbG9naWMgcmVsYXRlZAorICAgIC8vIHRvIHRob3Nl
IGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBBVEsgYnJpZGdlLgorICAgIGF0
a09iamVjdENsYXNzLT5pbml0aWFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlSW5p
dGlhbGl6ZTsKKyAgICBhdGtPYmplY3RDbGFzcy0+cmVmX3N0YXRlX3NldCA9IHdlYmtpdFdlYlZp
ZXdCYXNlQWNjZXNzaWJsZVJlZlN0YXRlU2V0OworICAgIGF0a09iamVjdENsYXNzLT5nZXRfaW5k
ZXhfaW5fcGFyZW50ID0gd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlR2V0SW5kZXhJblBhcmVu
dDsKK30KKworV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiB3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9hY2Nlc3NpYmxlX25ldyhHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBdGtPYmplY3QqIG9i
amVjdCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9X
RUJfVklFV19CQVNFX0FDQ0VTU0lCTEUsIDApKTsKKyAgICBhdGtfb2JqZWN0X2luaXRpYWxpemUo
b2JqZWN0LCB3aWRnZXQpOworICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJ
QkxFKG9iamVjdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMzBiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaApA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
V0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVfaAorI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVfaAor
CisjaW5jbHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSAgICAgICAgICAgICAgKHdlYmtpdF93ZWJf
dmlld19iYXNlX2FjY2Vzc2libGVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVX
X0JBU0VfQUNDRVNTSUJMRShvYmplY3QpICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgV2Vi
S2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0JBU0Vf
QUNDRVNTSUJMRV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBXZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfVklFV19CQVNFX0FD
Q0VTU0lCTEUob2JqZWN0KSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmpl
Y3QpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUpKQorI2RlZmluZSBXRUJL
SVRfSVNfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lC
TEUpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFX0dFVF9DTEFTUyhv
YmplY3QpIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmplY3QpLCBXRUJLSVRfVFlQRV9X
RUJfVklFV19CQVNFX0FDQ0VTU0lCTEUsIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNz
KSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSBXZWJLaXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlQ2xhc3MgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSBXZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVQcml2YXRlOworCisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nl
c3NpYmxlIHsKKyAgICBBdGtTb2NrZXQgcGFyZW50OworICAgIC8qPCBwcml2YXRlID4qLworICAg
IFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzIHsKKyAgICBBdGtTb2NrZXRDbGFzcyBw
YXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVf
Z2V0X3R5cGUoKTsKKworV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiB3ZWJraXRfd2ViX3Zp
ZXdfYmFzZV9hY2Nlc3NpYmxlX25ldyhHdGtXaWRnZXQqKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5
VGVzdFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1ODMz
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKKyNkZWZp
bmUgQVBQX05BTUUgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIgorCitzdGF0aWMgY29uc3QgY2hh
ciogY29udGVudHMgPQorIjxodG1sPiIKKyIgIDxib2R5PiIKKyIgICA8aDE+VGhpcyBpcyBhIHRl
c3Q8L2gxPiIKKyIgICA8cD5UaGlzIGlzIGEgcGFyYWdyYXBoIHdpdGggc29tZSBwbGFpbiB0ZXh0
LjwvcD4iCisiICAgPHA+VGhpcyBwYXJhZ3JhcGggY29udGFpbnMgPGEgaHJlZj1cImh0dHA6Ly93
d3cud2Via2l0Z3RrLm9yZ1wiPmEgbGluazwvYT4gaW4gdGhlIG1pZGRsZS48L3A+IgorIiAgPC9i
b2R5PiIKKyI8L2h0bWw+IjsKKworc3RhdGljIGdib29sZWFuIGxvYWRfZmluaXNoZWRfY2IoV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJDbGllbnQsIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGdwb2ludGVyIGRhdGEpCit7CisgICAgLy8gU2VudCBhIG1lc3NhZ2UgdG8gdGhlIHBhcmVudCBw
cm9jZXNzIHRlbGxpbmcgd2UncmUgcmVhZHkuCisgICAgZ19wcmludCgiT0siKTsKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhcioqYXJndikKK3sKKyAgICAv
LyBNYWtlIHN1cmUgdGhhdCBib3RoIEdBSUwgYW5kIHRoZSBBVEsgYnJpZGdlIGFyZSBsb2FkZWQu
CisgICAgZ19zZXRlbnYoIkdUS19NT0RVTEVTIiwgImdhaWw6YXRrLWJyaWRnZSIsIFRSVUUpOwor
CisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsIGNvbnRlbnRzLCAwKTsKKworICAgIEd0a1dpZGdl
dCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcp
KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQqIGxvYWRlckNsaWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVu
dCh3ZWJWaWV3KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGxvYWRlckNsaWVudCwgImxvYWQtZmlu
aXNoZWQiLCBHX0NBTExCQUNLKGxvYWRfZmluaXNoZWRfY2IpLCAwKTsKKworICAgIGd0a19tYWlu
KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0dOVW1ha2VmaWxlLmFtCmluZGV4IGQ5MTJiNjUuLmM2MDBjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0x
LDExICsxLDE4IEBACiBURVNUX1BST0dTICs9IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
VGVzdFdlYktpdEFjY2Vzc2liaWxpdHkgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0
V2ViS2l0V2ViQ29udGV4dCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRX
ZWJWaWV3IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNs
aWVudCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCiAJ
UHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QKIAotbm9pbnN0X1BS
T0dSQU1TICs9ICQoVEVTVF9QUk9HUykKK0hFTFBFUl9QUk9HUyA9IFwKKwlQcm9ncmFtcy9XZWJL
aXQyQVBJVGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIKKworbm9pbnN0X1BST0dSQU1TICs9
IFwKKwkkKFRFU1RfUFJPR1MpIFwKKwkkKEhFTFBFUl9QUk9HUykKKwogd2Via2l0Ml90ZXN0c19j
cHBmbGFncyA9IFwKIAktRFdFQktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVp
bGRkaXIpL1Byb2dyYW1zXCIgXAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKQEAgLTQ2
LDYgKzUzLDE4IEBAIExpYnJhcmllc19saWJXZWJLaXQyQVBJVGVzdENvcmVfbGFfU09VUkNFUyA9
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5o
CiBMaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQUEZMQUdTID0gJCh3ZWJraXQy
X3Rlc3RzX2NwcGZsYWdzKQogCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfQWNjZXNzaWJpbGl0
eVRlc3RTZXJ2ZXJfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19j
cHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZl
cl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9T
T1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJL
aXRBY2Nlc3NpYmlsaXR5X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKSAkKEFU
U1BJMl9DRkxBR1MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2li
aWxpdHlfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoQVRTUEkyX0xJQlMpCitQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdl
YktpdFdlYkNvbnRleHRfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKIFByb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBm
bGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44NzQ0NzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3Bw
CkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisKKy8vIFRoZSBsaWJhdHNwaSBoZWFkZXJzIGRvbid0IHVzZSBHX0JF
R0lOX0RFQ0xTCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlIDxhdHNwaS9hdHNwaS5oPgorfQorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8vIE5hbWUgb2YgdGhl
IHRlc3Qgc2VydmVyIGFwcGxpY2F0aW9uIGNyZWF0aW5nIHRoZSB3ZWJWaWV3IG9iamVjdC4KKyNk
ZWZpbmUgVEVTVF9TRVJWRVJfQVBQX05BTUUgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIgorCisv
LyBNYXggc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3Rp
bmcgaXQuCisjZGVmaW5lIE1BWF9XQUlUX0ZPUl9DSElMRCA1CisKKy8vIFRoZSBQSUQgZm9yIHRo
ZSB0ZXN0IHNlcnZlciBydW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCitzdGF0
aWMgR1BpZCBjaGlsZFByb2Nlc3NQaWQgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4gcnVuVGVzdFNl
cnZlcigpCit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIg
cHJvY2Vzcy4KKyAgICBjaGFyKiB0ZXN0X3NlcnZlcl9wYXRoID0gZ19zdHJkdXBfcHJpbnRmKCIl
cy9Qcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvIiBURVNUX1NFUlZFUl9BUFBfTkFNRSwgZ19nZXRf
Y3VycmVudF9kaXIoKSk7CisgICAgY2hhcioqIHRlc3Rfc2VydmVyX2FyZ3YgPSBnX3N0cnNwbGl0
KHRlc3Rfc2VydmVyX3BhdGgsIHRlc3Rfc2VydmVyX3BhdGgsIDEpOworICAgIGdfZnJlZSh0ZXN0
X3NlcnZlcl9wYXRoKTsKKworICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0
ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5u
ZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgorICAgIGludCBjaGlsZF9zdGRvdXQgPSAw
OworICAgIGlmICghZ19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3Rfc2VydmVyX2FyZ3Ys
IDAsIChHU3Bhd25GbGFncykwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZjaGlsZFByb2Nlc3NQaWQsIDAsICZjaGlsZF9zdGRvdXQsIDAsIDApKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICAvLyBDaGFuZ2UgdGhlIGNoaWxkJ3Mgc3Rkb3V0IGZpbGUgZGVz
Y3JpcHRvciB0byBiZSBub24tYmxvY2tpbmcuCisgICAgaWYgKGZjbnRsKGNoaWxkX3N0ZG91dCwg
Rl9TRVRGTCwgZmNudGwoY2hpbGRfc3Rkb3V0LCBGX0dFVEZMKSB8IE9fTk9OQkxPQ0spID09IC0x
KSB7CisgICAgICAgIHBlcnJvcigiRXJyb3IgY2FsbGluZyBmY250bCBvdmVyIGNoaWxkJ3Mgc3Rk
b3V0IGZpbGUgZGVzY3JpcHRvciIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisg
ICAgLy8gV2FpdCBmb3IgY2hpbGQgdG8gc2F5IGl0J3MgcmVhZHkgdGlsbCBNQVhfV0FJVF9GT1Jf
Q0hJTEQuCisgICAgY2hhciBtc2dbMl07CisgICAgaW50IHRyaWVzX2NvdW50ID0gMDsKKyAgICB3
aGlsZSAodHJpZXNfY291bnQgPCBNQVhfV0FJVF9GT1JfQ0hJTEQgJiYgcmVhZChjaGlsZF9zdGRv
dXQsICZtc2csIDIpID09IC0xKSB7CisgICAgICAgIC8vIFdlIHVzZSB0aGUgc2xlZXAgYmVjYXVz
ZSB3ZSBhY3R1YWxseSBuZWVkIHRvIGJsb2NrCisgICAgICAgIC8vIGV4ZWN1dGlvbiwgdG8gYXZv
aWQgdGhlIHRlc3QgZmluaXNoaW5nIGJlZm9yZSBoYXZpbmcKKyAgICAgICAgLy8gaW5zcGVjdGVk
IHRoZSBzZXJ2ZXIgYXBwbGljYXRpb24sIHdoaWNoIGlzIHdoYXQgd291bGQKKyAgICAgICAgLy8g
aGFwcGVuIGlmIHdlIHVzZWQgdGhlIG1haW5sb29wIHRvIHJlYWQgYXN5bmNocm9ub3VzbHkuCisg
ICAgICAgIHNsZWVwKDEpOworICAgICAgICB0cmllc19jb3VudCsrOworICAgIH0KKworICAgIC8v
IFJldHVybiBUUlVFIGlmIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVh
ZHkuCisgICAgcmV0dXJuIG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsKK30KKworc3Rh
dGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIEEgUElEIHNob3VsZCBiZSBncmVh
dGVyIHRoYW4gemVyby4KKyAgICBnX3JldHVybl9pZl9mYWlsKGNoaWxkUHJvY2Vzc1BpZCA+IDAp
OworCisgICAgZ19zcGF3bl9jbG9zZV9waWQoY2hpbGRQcm9jZXNzUGlkKTsKKyAgICBraWxsKChw
aWRfdCljaGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOworICAgIGNoaWxkUHJvY2Vzc1BpZCA9IDA7
Cit9CisKK3N0YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVtKQoreworICAgIGlm
IChjaGlsZFByb2Nlc3NQaWQgPiAwKQorICAgICAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitz
dGF0aWMgdm9pZAorY2hlY2tfYXRzcGlfYWNjZXNzaWJsZShBdHNwaUFjY2Vzc2libGUqIGFjY2Vz
c2libGUsIGNvbnN0IGNoYXIqIHRhcmdldE5hbWUsIEF0c3BpUm9sZSB0YXJnZXRSb2xlLCBnaW50
IHRhcmdldENoaWxkQ291bnQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChBVFNQSV9JU19BQ0NF
U1NJQkxFKGFjY2Vzc2libGUpKTsKKworICAgIGNoYXIqIG5hbWUgPSBhdHNwaV9hY2Nlc3NpYmxl
X2dldF9uYW1lKGFjY2Vzc2libGUsIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cih0YXJnZXROYW1l
LCA9PSwgbmFtZSk7CisgICAgZ19mcmVlKG5hbWUpOworCisgICAgZ19hc3NlcnRfY21waW50KHRh
cmdldFJvbGUsID09LCBhdHNwaV9hY2Nlc3NpYmxlX2dldF9yb2xlKGFjY2Vzc2libGUsIDApKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGFyZ2V0Q2hpbGRDb3VudCwgPT0sIGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2NvdW50KGFjY2Vzc2libGUsIDApKTsKK30KKworc3RhdGljIEF0c3BpQWNj
ZXNzaWJsZSoKK2ZpbmRfdGVzdF9zZXJ2ZXJfYXBwbGljYXRpb24oKQoreworICAgIC8vIE9ubHkg
b25lIGRlc2t0b3AgaXMgc3VwcG9ydGVkIGJ5IEFUU1BJIGF0IHRoZSBtb21lbnQuCisgICAgQXRz
cGlBY2Nlc3NpYmxlKiBkZXNrdG9wID0gYXRzcGlfZ2V0X2Rlc2t0b3AoMCk7CisKKyAgICAvLyBM
b29rIGZvciB0aGUgc2VydmVyIGFwcGxpY2F0aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCisgICAg
QXRzcGlBY2Nlc3NpYmxlKiBjdXJyZW50ID0gMDsKKyAgICBpbnQgY2hpbGRDb3VudCA9IGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRlc2t0b3AsIDApOworICAgIGludCBpID0gMDsK
KyAgICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIGN1cnJlbnQg
PSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLCBpLCAwKTsKKyAg
ICAgICAgaWYgKCFnX3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJyZW50LCAw
KSwgVEVTVF9TRVJWRVJfQVBQX05BTUUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RBdHNwaUJhc2ljSGll
cmFyY2h5KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGlmIChydW5U
ZXN0U2VydmVyKCkpIHsKKyAgICAgICAgLy8gVGhlIHRlc3Qgc2VydmVyJ3MgYWNjZXNzaWJpbGl0
eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgICAgICBBdHNwaUFjY2Vzc2libGUqIHRlc3RTZXJ2
ZXJBcHAgPSBmaW5kX3Rlc3Rfc2VydmVyX2FwcGxpY2F0aW9uKCk7CisgICAgICAgIGdfYXNzZXJ0
KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdFNlcnZlckFwcCkpOworICAgICAgICBjaGVja19hdHNw
aV9hY2Nlc3NpYmxlKHRlc3RTZXJ2ZXJBcHAsICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciIsIEFU
U1BJX1JPTEVfQVBQTElDQVRJT04sIDEpOworCisgICAgICAgIC8vIFRoZSBtYWluIHdpbmRvdydz
IGFjY2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KKyAgICAgICAgQXRzcGlBY2Nlc3Np
YmxlKiBjdXJyZW50UGFyZW50ID0gdGVzdFNlcnZlckFwcDsKKyAgICAgICAgQXRzcGlBY2Nlc3Np
YmxlKiBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleCh0
ZXN0U2VydmVyQXBwLCAwLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJM
RShjdXJyZW50Q2hpbGQpKTsKKyAgICAgICAgY2hlY2tfYXRzcGlfYWNjZXNzaWJsZShjdXJyZW50
Q2hpbGQsICIiLCBBVFNQSV9ST0xFX0ZSQU1FLCAxKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYo
Y3VycmVudFBhcmVudCk7CisKKyAgICAgICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3NpYmlsaXR5
IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hp
bGQ7CisgICAgICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0
X2luZGV4KGN1cnJlbnRQYXJlbnQsIDAsIDApOworICAgICAgICBnX2Fzc2VydChBVFNQSV9JU19B
Q0NFU1NJQkxFKGN1cnJlbnRDaGlsZCkpOworICAgICAgICBjaGVja19hdHNwaV9hY2Nlc3NpYmxl
KGN1cnJlbnRDaGlsZCwgIiIsIEFUU1BJX1JPTEVfRklMTEVSLCAxKTsKKyAgICAgICAgZ19vYmpl
Y3RfdW5yZWYoY3VycmVudFBhcmVudCk7CisKKyAgICAgICAgLy8gVGhlIFdlYlBhZ2UncyBhY2Nl
c3NpYmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgorICAgICAgICBjdXJyZW50UGFyZW50ID0g
Y3VycmVudENoaWxkOworICAgICAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dl
dF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LCAwLCAwKTsKKyAgICAgICAgZ19hc3NlcnQo
QVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQpKTsKKyAgICAgICAgY2hlY2tfYXRzcGlf
YWNjZXNzaWJsZShjdXJyZW50Q2hpbGQsICIiLCBBVFNQSV9ST0xFX0ZJTExFUiwgMSk7CisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKGN1cnJlbnRQYXJlbnQpOworCisgICAgICAgIC8vIEhUTUwgcm9v
dCBlbGVtZW50J3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgICAgIGN1
cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgICAgIGN1cnJlbnRDaGlsZCA9IGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQsIDAsIDApOworICAg
ICAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZCkpOworICAgICAg
ICBjaGVja19hdHNwaV9hY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZCwgIiIsIEFUU1BJX1JPTEVfU0NS
T0xMX1BBTkUsIDEpOworICAgICAgICBnX29iamVjdF91bnJlZihjdXJyZW50UGFyZW50KTsKKwor
ICAgICAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4K
KyAgICAgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICAgICAgY3VycmVudENo
aWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudCwg
MCwgMCk7CisgICAgICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxk
KSk7CisgICAgICAgIGNoZWNrX2F0c3BpX2FjY2Vzc2libGUoY3VycmVudENoaWxkLCAiIiwgQVRT
UElfUk9MRV9ET0NVTUVOVF9GUkFNRSwgMyk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGN1cnJl
bnRQYXJlbnQpOworCisgICAgICAgIC8vIEhUTUwgSDEncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdl
YiBQcm9jZXNzKS4KKyAgICAgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICAg
ICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3Vy
cmVudFBhcmVudCwgMCwgMCk7CisgICAgICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUo
Y3VycmVudENoaWxkKSk7CisgICAgICAgIGNoZWNrX2F0c3BpX2FjY2Vzc2libGUoY3VycmVudENo
aWxkLCAiVGhpcyBpcyBhIHRlc3QiLCBBVFNQSV9ST0xFX0hFQURJTkcsIDApOworICAgICAgICBn
X29iamVjdF91bnJlZihjdXJyZW50Q2hpbGQpOworCisgICAgICAgIC8vIEhUTUwgZmlyc3QgcGFy
YWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgICAgIGN1cnJl
bnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJl
bnQsIDEsIDApOworICAgICAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRD
aGlsZCkpOworICAgICAgICBjaGVja19hdHNwaV9hY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZCwgIiIs
IEFUU1BJX1JPTEVfUEFSQUdSQVBILCAwKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoY3VycmVu
dENoaWxkKTsKKworICAgICAgICAvLyBIVE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxl
IGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICAgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudCwgMiwgMCk7CisgICAgICAg
IGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkKSk7CisgICAgICAgIGNo
ZWNrX2F0c3BpX2FjY2Vzc2libGUoY3VycmVudENoaWxkLCAiIiwgQVRTUElfUk9MRV9QQVJBR1JB
UEgsIDEpOworICAgICAgICBnX29iamVjdF91bnJlZihjdXJyZW50Q2hpbGQpOworCisgICAgICAg
IC8vIEhUTUwgbGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgICAg
ICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgICAgICBjdXJyZW50Q2hpbGQgPSBh
dHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LCAwLCAwKTsK
KyAgICAgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQpKTsKKyAg
ICAgICAgY2hlY2tfYXRzcGlfYWNjZXNzaWJsZShjdXJyZW50Q2hpbGQsICJhIGxpbmsiLCBBVFNQ
SV9ST0xFX0xJTkssIDApOworICAgICAgICBnX29iamVjdF91bnJlZihjdXJyZW50Q2hpbGQpOwor
ICAgICAgICBnX29iamVjdF91bnJlZihjdXJyZW50UGFyZW50KTsKKyAgICB9CisKKyAgICAvLyBF
bnN1cmUgd2Ugc3RvcCB0aGUgc2VydmVyLgorICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3Zv
aWQgYmVmb3JlQWxsKCkKK3sKKyAgICAvLyBXZSBpbnN0YWxsIGEgaGFuZGxlciB0byBlbnN1cmUg
dGhhdCB3ZSBraWxsIHRoZSBjaGlsZCBwcm9jZXNzCisgICAgLy8gaWYgdGhlIHBhcmVudCBkaWVz
IGJlY2F1c2Ugb2Ygd2hhdGV2ZXIgdGhlIHJlYXNvbiBpcy4KKyAgICBzaWduYWwoU0lHQUJSVCwg
c2lnQWJvcnRIYW5kbGVyKTsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEFjY2Vzc2li
aWxpdHkiLCAiYXRzcGktYmFzaWMtaGllcmFyY2h5IiwgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkp
OworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAppbmRleCA4MjEyNDE3Li5jNTAxZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01NDcsNiArNTQ3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sKTsKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIFN0cmluZyBnZXRBY2Nlc3NpYmlsaXR5UGx1Z0lEKCkgY29uc3QgeyByZXR1
cm4gbV9hY2Nlc3NpYmlsaXR5UGx1Z0lEOyB9CisjZW5kaWYKKwogICAgIHZvaWQgYmVnaW5Qcmlu
dGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJik7CiAgICAgdm9pZCBlbmRQcmlu
dGluZygpOwogICAgIHZvaWQgY29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSos
IGNvbnN0IFByaW50SW5mbyYsIFBhc3NSZWZQdHI8Q29tcHV0ZWRQYWdlc0NhbGxiYWNrPik7CkBA
IC03MTYsNiArNzIwLDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2b2lk
IGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9y
PFN0cmluZz4mKTsKKyAgICB2b2lkIGJpbmRBY2Nlc3NpYmlsaXR5VHJlZShjb25zdCBTdHJpbmcm
KTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoVmVjdG9yPFN0cmluZz4mKTsKQEAgLTk0MCw2ICs5NDUsMTAgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKEdUSykKKyAgICBTdHJpbmcgbV9hY2Nlc3NpYmlsaXR5UGx1Z0lEOworI2VuZGlm
CisKICAgICBpbnQ2NF90IG1fc3BlbGxEb2N1bWVudFRhZzsKICAgICBib29sIG1faGFzU3BlbGxE
b2N1bWVudFRhZzsKICAgICB1bnNpZ25lZCBtX3BlbmRpbmdMZWFybk9ySWdub3JlV29yZE1lc3Nh
Z2VDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCmluZGV4IGFhYjllYTUuLjYzYzNhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTQyLDYgKzE0Miw5IEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgICMgU3Vw
cG9ydCBmb3IgR1RLKyBwbGF0Zm9ybSBrZXliaW5kaW5ncwogICAgIEdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoQXRvbWljU3RyaW5nIGV2ZW50VHlwZSkgLT4gKFZlY3RvcjxXVEY6OlN0cmlu
Zz4gY29tbWFuZHNMaXN0KQorCisgICAgIyBTdXBwb3J0IGZvciBjb25uZWN0aW5nIHRoZSBBY2Nl
c3NpYmlsaXR5IHdvcmxkcyBvZiB0aGUgVUkgYW5kIHRoZSBXZWIgcHJvY2Vzc2VzCisgICAgQmlu
ZEFjY2Vzc2liaWxpdHlUcmVlKFdURjo6U3RyaW5nIHBsdWdJRCkKICNlbmRpZgogCiAgICAgIyBC
YWNrRm9yd2FyZCBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQYWdlUHJveHlHdGsuY3BwCmluZGV4IDExMjdkZGUuLmY2YjMwMGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKQEAgLTQ5LDYgKzQ5
LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBWCiAgICAgbV9wYWdlQ2xpZW50LT5nZXRFZGl0
b3JDb21tYW5kc0ZvcktleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpLCBldmVudFR5cGUs
IGNvbW1hbmRzTGlzdCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJpbGl0
eVRyZWUoY29uc3QgU3RyaW5nJiBwbHVnSUQpCit7CisgICAgbV9hY2Nlc3NpYmlsaXR5UGx1Z0lE
ID0gcGx1Z0lEOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWRlYzIxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEd0ay5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgiCisKKyNpbmNsdWRlICJXZWJQYWdlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVGSU5FX1RZUEUoV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3QsIHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0LCBBVEtfVFlQ
RV9QTFVHKQorCitzdGF0aWMgQXRrT2JqZWN0KiBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBw
ZXIoQXRrT2JqZWN0KiBhdGtPYmplY3QpCit7CisgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3Np
YmlsaXR5KCk7CisKKyAgICBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZSA9
IFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09iamVjdCk7CisgICAgaWYgKCFhY2Nl
c3NpYmxlLT5tX3BhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGFnZSogcGFnZSA9IGFj
Y2Vzc2libGUtPm1fcGFnZS0+Y29yZVBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRnJhbWUqIGNvcmUgPSBwYWdlLT5tYWluRnJhbWUoKTsKKyAgICBpZiAo
IWNvcmUgfHwgIWNvcmUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcm9vdCA9IGNvcmUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUo
KS0+cm9vdE9iamVjdCgpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBBdGtPYmplY3QqIGF4Um9vdCA9IHJvb3QtPndyYXBwZXIoKTsKKyAgICBpZiAoIWF4Um9vdCB8
fCAhQVRLX0lTX09CSkVDVChheFJvb3QpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBheFJvb3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0SW5p
dGlhbGl6ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAo
QVRLX09CSkVDVF9DTEFTUyh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9wYXJlbnRfY2xh
c3MpLT5pbml0aWFsaXplKQorICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYl9wYWdlX2FjY2Vz
c2liaWxpdHlfb2JqZWN0X3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUoYXRrT2JqZWN0LCBkYXRh
KTsKKworICAgIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09iamVjdCktPm1fcGFn
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZSo+KGRhdGEpOworICAgIGF0a19vYmplY3Rfc2V0
X3JvbGUoYXRrT2JqZWN0LCBBVEtfUk9MRV9GSUxMRVIpOworfQorCitzdGF0aWMgZ2ludCB3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldEluZGV4SW5QYXJlbnQoQXRrT2JqZWN0ICphdGtPYmpl
Y3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX0lTX09CSkVDVChhdGtPYmplY3Qp
LCAtMSk7CisgICAgLy8gQW4gQXRrUGx1ZyBpcyB0aGUgb25seSBjaGlsZCBhbiBBdGtTb2NrZXQg
Y2FuIGhhdmUuCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnaW50IHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0R2V0TkNoaWxkcmVuKEF0a09iamVjdCogYXRrT2JqZWN0KQoreworICAgIEF0
a09iamVjdCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihhdGtP
YmplY3QpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gMTsKK30KKworc3RhdGljIEF0a09iamVjdCogd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RSZWZDaGlsZChBdGtPYmplY3QqIGF0a09iamVjdCwgZ2ludCBpbmRleCkKK3sKKyAgICAvLyBJ
dCdzIHN1cHBvc2VkIHRvIGhhdmUgZWl0aGVyIG9uZSBjaGlsZCBvciB6ZXJvLgorICAgIGlmIChp
bmRleCA8IDAgfHwgaW5kZXggPiAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a09iamVj
dCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihhdGtPYmplY3Qp
OworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdGtfb2Jq
ZWN0X3NldF9wYXJlbnQocm9vdE9iamVjdCwgYXRrT2JqZWN0KTsKKyAgICBnX29iamVjdF9yZWYo
cm9vdE9iamVjdCk7CisKKyAgICByZXR1cm4gcm9vdE9iamVjdDsKK30KKworc3RhdGljIHZvaWQg
d2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfaW5pdChXZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdCogYWNjZXNzaWJsZSkKK3sKKyAgICBhY2Nlc3NpYmxlLT5tX3BhZ2UgPSAwOworfQorCitz
dGF0aWMgdm9pZCB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3MqIGtsYXNzKQoreworICAgIEF0a09iamVjdENsYXNz
KiBhdGtPYmplY3RDbGFzcyA9IEFUS19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgLy8gTm8g
bmVlZCB0byBpbXBsZW1lbnQgZ2V0X3BhcmVudCgpIGhlcmUgc2luY2UgdGhpcyBpcyBhIHN1YmNs
YXNzCisgICAgLy8gb2YgQXRrUGx1ZyBhbmQgYWxsIHRoZSBsb2dpYyByZWxhdGVkIHRvIHRoYXQg
ZnVuY3Rpb24gd2lsbCBiZQorICAgIC8vIGltcGxlbWVudGVkIGJ5IHRoZSBBVEsgYnJpZGdlLgor
ICAgIGF0a09iamVjdENsYXNzLT5pbml0aWFsaXplID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RJbml0aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0g
d2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHZXRJbmRleEluUGFyZW50OworICAgIGF0a09iamVj
dENsYXNzLT5nZXRfbl9jaGlsZHJlbiA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNo
aWxkcmVuOworICAgIGF0a09iamVjdENsYXNzLT5yZWZfY2hpbGQgPSB3ZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdFJlZkNoaWxkOworfQorCitXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogd2Vi
X3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfbmV3KFdlYlBhZ2UqIHBhZ2UpCit7CisgICAgQXRr
T2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihnX29iamVjdF9uZXcoV0VC
X1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgMCkpOworICAgIGF0a19vYmplY3RfaW5p
dGlhbGl6ZShvYmplY3QsIHBhZ2UpOworICAgIHJldHVybiBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZ
X09CSkVDVChvYmplY3QpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0
ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDkwMzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VB
Y2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0R3RrX2gKKyNkZWZpbmUgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGtf
aAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdl
YlBhZ2U7Cit9CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJfVFlQRV9QQUdFX0FDQ0VT
U0lCSUxJVFlfT0JKRUNUICAgICAgICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmpl
Y3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1Qob2Jq
ZWN0KSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3QpLCBXRUJf
VFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNULCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dCkpCisjZGVmaW5lIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUX0NMQVNTKGtsYXNzKSAg
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJfVFlQRV9QQUdFX0FDQ0VT
U0lCSUxJVFlfT0JKRUNULCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzKSkKKyNkZWZp
bmUgV0VCX0lTX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1Qob2JqZWN0KSAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBXRUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJ
VFlfT0JKRUNUKSkKKyNkZWZpbmUgV0VCX0lTX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1RfQ0xB
U1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQl9UWVBFX1BB
R0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QpKQorI2RlZmluZSBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZ
X09CSkVDVF9HRVRfQ0xBU1Mob2JqZWN0KSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
ZWN0KSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xh
c3M7CisKK3N0cnVjdCBfV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QgeworICAgIEF0a1BsdWcg
cGFyZW50OworICAgIFdlYktpdDo6V2ViUGFnZSogbV9wYWdlOworfTsKKworc3RydWN0IF9XZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzIHsKKyAgICBBdGtQbHVnQ2xhc3MgcGFyZW50Q2xh
c3M7Cit9OworCitHVHlwZSB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9nZXRfdHlwZSgp
OworCitXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9v
YmplY3RfbmV3KFdlYktpdDo6V2ViUGFnZSopOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8g
V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKaW5kZXggYTI1ZTFmNy4uN2Nl
ZTJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlBhZ2VHdGsuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0Nv
bnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC00NCw3ICs0NiwxNCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUo
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQ3JlYXRlIHRoZSBhY2Nlc3NpYmxl
IG9iamVjdCAodGhlIHBsdWcpIHRoYXQgd2lsbCBzZXJ2ZSBhcyB0aGUKKyAgICAvLyBlbnRyeSBw
b2ludCB0byB0aGUgV2ViIHByb2Nlc3MsIGFuZCBzZW5kIGEgbWVzc2FnZSB0byB0aGUgVUkKKyAg
ICAvLyBwcm9jZXNzIHRvIGNvbm5lY3QgdGhlIHR3byB3b3JsZHMgdGhyb3VnaCB0aGUgYWNjZXNz
aWJpbGl0eQorICAgIC8vIG9iamVjdCB0aGVyZSBzcGVjaWZpY2FsbHkgcGxhY2VkIGZvciB0aGF0
IHB1cnBvc2UgKHRoZSBzb2NrZXQpLgorICAgIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0KiBh
eE9iamVjdCA9IHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X25ldyh0aGlzKTsKKyAgICBn
Y2hhciogcGx1Z0lEID0gYXRrX3BsdWdfZ2V0X2lkKEFUS19QTFVHKGF4T2JqZWN0KSk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCaW5kQWNjZXNzaWJpbGl0eVRyZWUoU3RyaW5n
KHBsdWdJRCkpKTsKKyAgICBnX2ZyZWUocGx1Z0lEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpwbGF0
Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNlNDMwZjMu
LmNhYjU4MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0xMi0wMyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1z
YW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRXhwb3NlIGFjY2Vzc2liaWxpdHkg
aGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNlZCBBVHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5zdXJlIHRoZSBhY2Nlc3NpYmls
aXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcKKyAgICAgICAgdGhl
IHVuaXQgdGVzdHMsIG90aGVyd2lzZSBXSzIncyBhY2Nlc3NpYmlsaXR5IHRlc3RzIHdvbid0IHdv
cmsuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6CisgICAgICAgIChUZXN0UnVu
bmVyLnJ1bik6IEluaXRpYWxpemUgdGhlIGFjY2Vzc2liaWxpdHkgaW5mcmFzdHJ1Y3R1cmUuCisg
ICAgICAgIChsb29rdXBBdHNwaTJCaW5hcnkpOiBOZXcuIExvb2tzIGZvciB0aGUgZGlyZWN0b3J5
IHdoZXJlIGF0LXNwaTIncworICAgICAgICBzdHVmZiBpcyBsb2NhdGVkIChsaWtlIGF0LXNwaS1i
dXMtbGF1bmNoZXIgYW5kIGF0LXNwaTItcmVnaXN0cnlkKS4KKwogMjAxMS0xMS0zMCAgSm9jZWx5
biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF0g
QWRkIGEgZnVsbHNjcmVlbiBvcHRpb24gdG8gTWluaUJyb3dzZXIuCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5k
ZXggZjFmOWQ2Ni4uOTcyY2Q4MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRl
c3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwpAQCAtMjQsNyArMjQsOCBAQCBp
bXBvcnQgb3MsIHN5cwogY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgIFRFU1RfRElSUyA9IFsgInVu
aXR0ZXN0cyIsICJXZWJLaXQyQVBJVGVzdHMiIF0KLSAgICBTS0lQUEVEID0gWyAidW5pdHRlc3Rz
L3Rlc3Rkb3dubG9hZCIgXQorICAgIFNLSVBQRUQgPSBbICJ1bml0dGVzdHMvdGVzdGRvd25sb2Fk
IiwKKyAgICAgICAgICAgICAgICAiV2ViS2l0MkFQSVRlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2Vy
dmVyIiBdCiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX2V4ZWN1dGl2
ZSA9IEV4ZWN1dGl2ZSgpCkBAIC04Miw2ICs4MywxOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAg
ICAgICAgIHJldHVybiBleGl0X3N0YXR1c1swXQogCisKK2RlZiBsb29rdXBBdHNwaTJCaW5hcnko
ZmlsZW5hbWUpOgorICAgIHBhdGhzX3RvX2NoZWNrID0gWyAiL3Vzci9saWJleGVjIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIi91c3IvbGliL2F0LXNwaTItY29yZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICIvdXNyL2xpYjMyL2F0LXNwaTItY29yZSIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIi91c3IvbGliNjQvYXQtc3BpMi1jb3JlIiBdCisgICAgZm9yIHBhdGggaW4gcGF0aHNfdG9f
Y2hlY2s6CisgICAgICAgIGZpbGVwYXRoID0gIiVzLyVzIiAlIChwYXRoLCBmaWxlbmFtZSkKKyAg
ICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZXBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIGZp
bGVwYXRoCisgICAgcmV0dXJuIE5vbmUKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAg
ICB0cnk6CiAgICAgICAgIHh2ZmIgPSBFeGVjdXRpdmUoKS5wb3BlbihbIlh2ZmIiLCAiOjMxIiwg
Ii1zY3JlZW4iLCAiMCIsICI4MDB4NjAweDI0IiwgIi1ub2xpc3RlbiIsICJ0Y3AiXSwKQEAgLTkx
LDcgKzEwNCw0MyBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAgICBzeXMuc3Rk
ZXJyLmZsdXNoKCkKICAgICAgICAgc3lzLmV4aXQoMSkKIAorICAgICMgU2V0dXAgc3VwcG9ydCBm
b3IgYWNjZXNzaWJpbGl0eSB0ZXN0cy4KKyAgICB0ZXN0X2VudiA9IG9zLmVudmlyb24KKyAgICB0
ZXN0X2VudlsiRElTUExBWSJdID0gIjozMSIKKworICAgICMgTWFrZSBzdXJlIHRoZXJlJ3Mgbm8g
WCdzIHByb3BlcnR5IEFUX1NQSV9CVVMgcHJldmlvdXNseSBzZXQsCisgICAgIyBvdGhlcndpc2Ug
dGhlIGFjY2Vzc2liaWxpdHkgYnVzIGNvdWxkbid0IGJlIHByb3Blcmx5IGxhdW5jaGVkLgorICAg
IEV4ZWN1dGl2ZSgpLnBvcGVuKFsieHByb3AiLCAiLXJvb3QiLCAiLXJlbW92ZSIsICJBVF9TUElf
QlVTIl0sCisgICAgICAgICAgICAgICAgICAgICAgZW52PXRlc3RfZW52LCBzdGRlcnI9c3VicHJv
Y2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorCisgICAgIyBNYWtlIHN1cmUgdGhl
IGFjY2Vzc2liaWxpdHkgYnVzIGlzIGxhdW5jaGVkLgorICAgIGExMXlfYnVzX2xhdW5jaGVkID0g
RmFsc2UKKyAgICBhMTF5X2J1c19sYXVuY2hlcl9wYXRoID0gbG9va3VwQXRzcGkyQmluYXJ5KCdh
dC1zcGktYnVzLWxhdW5jaGVyJykKKyAgICBpZiBhMTF5X2J1c19sYXVuY2hlcl9wYXRoOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICBhMTF5X2J1c19sYXVuY2hlciA9IEV4ZWN1dGl2ZSgpLnBv
cGVuKFthMTF5X2J1c19sYXVuY2hlcl9wYXRoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW52PXRlc3RfZW52LCBzdGRlcnI9c3VicHJvY2Vzcy5Q
SVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgYTExeV9idXNfbGF1bmNo
ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
IkZhaWxlZCB0byBsYXVuY2ggdGhlIGFjY2Vzc2liaWxpdHkgYnVzIChhbHJlYWR5IGxhdW5jaGVk
PylcbiIpCisgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgIGExMXlfcmVnaXN0
cnlkX3J1bm5pbmcgPSBGYWxzZQorICAgIGExMXlfcmVnaXN0cnlkX3BhdGggPSBsb29rdXBBdHNw
aTJCaW5hcnkoJ2F0LXNwaTItcmVnaXN0cnlkJykKKyAgICBpZiBhMTF5X3JlZ2lzdHJ5ZF9wYXRo
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhMTF5X3JlZ2lzdHJ5ZCA9IEV4ZWN1dGl2ZSgp
LnBvcGVuKFsiJXMvYXQtc3BpMi1yZWdpc3RyeWQiICUgYXRzcGkyX2V4ZWNfcGF0aF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj10ZXN0X2Vudiwg
c3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAg
ICAgIGExMXlfcmVnaXN0cnlkX3J1bm5pbmcgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAg
ICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBydW4gdGhlIGFjY2Vzc2liaWxpdHkg
cmVnaXN0cnkgKGFscmVhZHkgcnVubmluZz8pXG4iKQorICAgICAgICAgICAgc3lzLnN0ZGVyci5m
bHVzaCgpCisKICAgICB0cnk6CiAgICAgICAgIHN5cy5leGl0KFRlc3RSdW5uZXIoKS5ydW4oKSkK
ICAgICBmaW5hbGx5OgorICAgICAgICBpZiBhMTF5X3JlZ2lzdHJ5ZF9ydW5uaW5nOgorICAgICAg
ICAgICAgYTExeV9yZWdpc3RyeWQua2lsbCgpCisgICAgICAgIGlmIGExMXlfYnVzX2xhdW5jaGVk
OgorICAgICAgICAgICAgYTExeV9idXNfbGF1bmNoZXIua2lsbCgpCiAgICAgICAgIHh2ZmIua2ls
bCgpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNjUxNzZh
ZS4uODBlMzI4MyAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpA
QCAtMjYyLDYgKzI2Miw3IEBAIGlmIHRlc3QgIiR3aXRoX2hpbGRvbiIgPSAieWVzIjsgdGhlbgog
ZmkKIAogIyBtaW5pbXVtIGJhc2UgZGVwZW5kZW5jaWVzCitBVFNQSTJfUkVRVUlSRURfVkVSU0lP
Tj0yLjAuMAogTElCU09VUF9SRVFVSVJFRF9WRVJTSU9OPTIuMzMuNgogQ0FJUk9fUkVRVUlSRURf
VkVSU0lPTj0xLjEwCiBGT05UQ09ORklHX1JFUVVJUkVEX1ZFUlNJT049Mi40CkBAIC0xMTEwLDYg
KzExMTEsMTQgQEAgZmkKIEFDX1NVQlNUKEdUSzJfQ0ZMQUdTKQogQUNfU1VCU1QoR1RLMl9MSUJT
KQogCisjIFJlcXVpcmUgYXRzcGkyIG9ubHkgd2hlbiBidWlsZGluZyBXZWJraXQyIChyZXF1aXJl
ZCBmb3IgdW5pdCB0ZXN0cykuCitpZiB0ZXN0ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyI7IHRo
ZW4KKyAgIFBLR19DSEVDS19NT0RVTEVTKFtBVFNQSTJdLAorICAgICAgICAgICAgICAgICAgICAg
W2F0c3BpLTIgPj0gJEFUU1BJMl9SRVFVSVJFRF9WRVJTSU9OXSkKKyAgIEFDX1NVQlNUKFtBVFNQ
STJfQ0ZMQUdTXSkKKyAgIEFDX1NVQlNUKFtBVFNQSTJfTElCU10pCitmaQorCiBHVEtfRE9DX0NI
RUNLKFsxLjEwXSkKIAogIyBPUyBjb25kaXRpb25hbHMKLS0gCjEuNy43LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117799</attachid>
            <date>2011-12-04 11:37:55 -0800</date>
            <delta_ts>2012-01-03 08:56:28 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2011-12-04-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>57247</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBhYjdiMzRlODA4OWI2NTcxYTIyMGRlZmYwYzM2YTVkN2E4ZWNiMDU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE5IE9jdCAyMDExIDIwOjA1OjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMS0xMi0wNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQy
IHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBFeHBvc2UgdGhlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIHRoZSBtdWx0
aS1wcm9jZXNzCiAgICAgICAgYXJjaGl0ZWN0dXJlIG9mIFdLMiB0aHJvdWdoIEF0a1NvY2tldCBh
ZCBBdGtQbHVnLgoKICAgICAgICBNYWtlIHRoZSBXZWJWaWV3IHdpZGdldCByZXR1cm4gYW4gQXRr
U29ja2V0IHdoZW4gY2FsbGluZyB0bwogICAgICAgIGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUo
KS4KCiAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcy4KICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2Jhc2VfaW5pdCk6CiAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlR2V0QWNjZXNzaWJs
ZSk6CiAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOgogICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcDogQWRkZWQu
CiAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVdpZGdldERlc3Ryb3llZCk6CiAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUluaXRpYWxpemUpOgogICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVSZWZTdGF0ZVNldCk6CiAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZUdldEluZGV4SW5QYXJlbnQpOgogICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2luaXQpOgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9hY2Nlc3NpYmxlX2NsYXNzX2luaXQpOgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9h
Y2Nlc3NpYmxlX25ldyk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGUuaDogQWRkZWQuCgogICAgICAgIE1ha2UgdGhlIFdlYlBhZ2UgY3JlYXRl
IGFuIEF0a1BsdWcgb24gaXRzIGluaXRpYWxpemF0aW9uIGFuZAogICAgICAgIHNlbmRpbmcgdGhl
IElEIG9mIHRoYXQgcGx1ZyB0byB0aGUgVUkgcHJvY2Vzcywgc28gaXQgY2FuIGVtYmVkIHRoZQog
ICAgICAgIHBsdWcgaW4gdGhlIHNvY2tldC4KCiAgICAgICAgQWxzbywgdGFrZSBjYXJlIG9mIGFs
bCB0aGUgbmVlZGVkIHdyYXBwaW5nIGFyb3VuZCB0aGUgV2ViQ29yZSdzCiAgICAgICAgYWNjZXNz
aWJpbGl0eSBvYmplY3RzLCBleHBvc2luZyB0aGVtIGluIHRoZSBVSSBwcm9jZXNzJ3MKICAgICAg
ICBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tldC1wbHVnIGNvbm5l
Y3Rpb24uCgogICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgogICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CiAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgogICAgICAgICogVUlQcm9jZXNzL2d0ay9X
ZWJQYWdlUHJveHlHdGsuY3BwOgogICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YmluZEFj
Y2Vzc2liaWxpdHlUcmVlKToKICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuY3BwOgogICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWQpOgogICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwOgogICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgogICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5j
cHA6IEFkZGVkLgogICAgICAgIChhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIpOgogICAg
ICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEluaXRpYWxpemUpOgogICAgICAgICh3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldEluZGV4SW5QYXJlbnQpOgogICAgICAgICh3ZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbik6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0UmVmQ2hpbGQpOgogICAgICAgICh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29i
amVjdF9pbml0KToKICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfY2xhc3Nf
aW5pdCk6CiAgICAgICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X25ldyk6CiAgICAg
ICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X3JlZnJlc2gpOgogICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oOiBBZGRl
ZC4KICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6CiAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSk6CgogICAgICAgIE5ldyB1bml0IHRl
c3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBpbiBXSzJHVEsuCgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwOiBB
ZGRlZC4KICAgICAgICAobG9hZF9maW5pc2hlZF9jYik6IE5vdGlmeSB0aGUgcGFyZW50IHByb2Nl
c3MgKHRoZSB0ZXN0KSB3aGVuIHJlYWR5LgogICAgICAgIChtYWluKToKICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOgogICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwOiBBZGRlZC4KICAgICAgICAo
cnVuVGVzdFNlcnZlcik6CiAgICAgICAgKHN0b3BUZXN0U2VydmVyKToKICAgICAgICAoc2lnQWJv
cnRIYW5kbGVyKToKICAgICAgICAoY2hlY2tfYXRzcGlfYWNjZXNzaWJsZSk6CiAgICAgICAgKGZp
bmRfdGVzdF9zZXJ2ZXJfYXBwbGljYXRpb24pOgogICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJh
cmNoeSk6CiAgICAgICAgKGJlZm9yZUFsbCk6CiAgICAgICAgKGFmdGVyQWxsKToKCjIwMTEtMTIt
MDQgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAgICBb
R1RLXSBFeHBvc2UgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQt
U1BJIGJhc2VkIEFUcwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MjU4OQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
RW5zdXJlIHRoZSBhY2Nlc3NpYmlsaXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVu
IHJ1bm5pbmcKICAgICAgICB0aGUgdW5pdCB0ZXN0cywgb3RoZXJ3aXNlIFdLMidzIGFjY2Vzc2li
aWxpdHkgdGVzdHMgd29uJ3Qgd29yay4KCiAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6
CiAgICAgICAgKFRlc3RSdW5uZXIucnVuKTogSW5pdGlhbGl6ZSB0aGUgYWNjZXNzaWJpbGl0eSBp
bmZyYXN0cnVjdHVyZS4KICAgICAgICAobG9va3VwQXRzcGkyQmluYXJ5KTogTmV3LiBMb29rcyBm
b3IgdGhlIGRpcmVjdG9yeSB3aGVyZSBhdC1zcGkyJ3MKICAgICAgICBzdHVmZiBpcyBsb2NhdGVk
IChsaWtlIGF0LXNwaS1idXMtbGF1bmNoZXIgYW5kIGF0LXNwaTItcmVnaXN0cnlkKS4KCjIwMTEt
MTItMDQgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAg
ICBbR1RLXSBFeHBvc2UgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsv
QVQtU1BJIGJhc2VkIEFUcwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MjU4OQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAg
ICAgTmV3IGRlcGVuZGVuY3kgcmVxdWlyZWQgZm9yIFdLMidzIGFjY2Vzc2liaWxpdHkgdW5pdCB0
ZXN0OiBBVC1TUEkyLgoKICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIEFULVNQSTIg
d2hlbiBidWlsZGluZyB3aXRoIFdLMiBzdXBwb3J0LgotLS0KIENoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzYgKysrKysrKysKIFNvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiAu
Li4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwICAgICAgICB8ICAgMzMg
KysrKwogLi4uL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcCAgICAgICAg
fCAgMTE5ICsrKysrKysrKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlLmggICAgICAgICAgfCAgIDY3ICsrKysrKysKIC4uLi9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2li
aWxpdHlUZXN0U2VydmVyLmNwcCAgICAgIHwgICA2MiArKysrKysKIC4uLi9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIHwgICAyMSArKy0KIC4uLi9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCAgICAgIHwgIDIwMiArKysrKysrKysr
KysrKysrKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oICAgICAg
ICAgICAgfCAgICA5ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4gIHwgICAgMyArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQ
cm94eUd0ay5jcHAgICB8ICAgIDUgKwogLi4uL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50LmNwcCAgICAgICAgfCAgICA1ICsKIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcCAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oICAgICAgICB8ICAgMTAgKy0KIC4uLi9XZWJQYWdlL2d0ay9XZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgIHwgIDE0MiArKysrKysrKysrKysrKwogLi4u
L1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmggICAgfCAgIDY0ICsr
KysrKwogLi4uL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCAg
fCAgIDE5ICsrLQogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDE1ICsrCiBUb29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNTEgKysrKystCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwogMjEgZmlsZXMgY2hhbmdlZCwgOTI0IGluc2Vy
dGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VM
b2cgYi9DaGFuZ2VMb2cKaW5kZXggOTk0Yzc5Yy4uMzUzMDNjZCAxMDA2NDQKLS0tIGEvQ2hhbmdl
TG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEyLTA0ICBNYXJpbyBT
YW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBFeHBv
c2UgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2Vk
IEFUcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1
ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcg
ZGVwZW5kZW5jeSByZXF1aXJlZCBmb3IgV0syJ3MgYWNjZXNzaWJpbGl0eSB1bml0IHRlc3Q6IEFU
LVNQSTIuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBBVC1TUEkyIHdoZW4g
YnVpbGRpbmcgd2l0aCBXSzIgc3VwcG9ydC4KKwogMjAxMS0xMi0wMyAgRGFuIFdpbnNoaXAgIDxk
YW53QGdub21lLm9yZz4KIAogICAgICAgICBbR1RLXSBVcGRhdGUgcmVxdWlyZWQgbGlic291cCB2
ZXJzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWM0N2E4Ni4uM2RlOGNhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDc5IEBACisyMDExLTEyLTA0ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBFeHBvc2UgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkg
aW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFUcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1ODkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgdGhlIGFjY2Vzc2liaWxpdHkgaGllcmFy
Y2h5IGluIHRoZSBtdWx0aS1wcm9jZXNzCisgICAgICAgIGFyY2hpdGVjdHVyZSBvZiBXSzIgdGhy
b3VnaCBBdGtTb2NrZXQgYWQgQXRrUGx1Zy4KKworICAgICAgICBNYWtlIHRoZSBXZWJWaWV3IHdp
ZGdldCByZXR1cm4gYW4gQXRrU29ja2V0IHdoZW4gY2FsbGluZyB0bworICAgICAgICBndGtfd2lk
Z2V0X2dldF9hY2Nlc3NpYmxlKCkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5l
dyBmaWxlcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KToKKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlR2V0QWNjZXNzaWJsZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9jbGFzc19pbml0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNj
ZXNzaWJsZVdpZGdldERlc3Ryb3llZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vz
c2libGVJbml0aWFsaXplKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVJl
ZlN0YXRlU2V0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUdldEluZGV4
SW5QYXJlbnQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9pbml0
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX25ldyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmg6IEFkZGVk
LgorCisgICAgICAgIE1ha2UgdGhlIFdlYlBhZ2UgY3JlYXRlIGFuIEF0a1BsdWcgb24gaXRzIGlu
aXRpYWxpemF0aW9uIGFuZAorICAgICAgICBzZW5kaW5nIHRoZSBJRCBvZiB0aGF0IHBsdWcgdG8g
dGhlIFVJIHByb2Nlc3MsIHNvIGl0IGNhbiBlbWJlZCB0aGUKKyAgICAgICAgcGx1ZyBpbiB0aGUg
c29ja2V0LgorCisgICAgICAgIEFsc28sIHRha2UgY2FyZSBvZiBhbGwgdGhlIG5lZWRlZCB3cmFw
cGluZyBhcm91bmQgdGhlIFdlYkNvcmUncworICAgICAgICBhY2Nlc3NpYmlsaXR5IG9iamVjdHMs
IGV4cG9zaW5nIHRoZW0gaW4gdGhlIFVJIHByb2Nlc3MncworICAgICAgICBhY2Nlc3NpYmlsaXR5
IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tldC1wbHVnIGNvbm5lY3Rpb24uCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94
eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YmluZEFjY2Vzc2liaWxp
dHlUcmVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkRmluaXNoTG9hZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcDog
QWRkZWQuCisgICAgICAgIChhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIpOgorICAgICAg
ICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RJbml0aWFsaXplKToKKyAgICAgICAgKHdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5kZXhJblBhcmVudCk6CisgICAgICAgICh3ZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbik6CisgICAgICAgICh3ZWJQYWdlQWNjZXNz
aWJpbGl0eU9iamVjdFJlZkNoaWxkKToKKyAgICAgICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlf
b2JqZWN0X2luaXQpOgorICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfY2xh
c3NfaW5pdCk6CisgICAgICAgICh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9uZXcpOgor
ICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfcmVmcmVzaCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSk6CisKKyAgICAgICAg
TmV3IHVuaXQgdGVzdCBmb3IgY2hlY2tpbmcgYWNjZXNzaWJpbGl0eSBzdXBwb3J0IGluIFdLMkdU
Sy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0
U2VydmVyLmNwcDogQWRkZWQuCisgICAgICAgIChsb2FkX2ZpbmlzaGVkX2NiKTogTm90aWZ5IHRo
ZSBwYXJlbnQgcHJvY2VzcyAodGhlIHRlc3QpIHdoZW4gcmVhZHkuCisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHA6
IEFkZGVkLgorICAgICAgICAocnVuVGVzdFNlcnZlcik6CisgICAgICAgIChzdG9wVGVzdFNlcnZl
cik6CisgICAgICAgIChzaWdBYm9ydEhhbmRsZXIpOgorICAgICAgICAoY2hlY2tfYXRzcGlfYWNj
ZXNzaWJsZSk6CisgICAgICAgIChmaW5kX3Rlc3Rfc2VydmVyX2FwcGxpY2F0aW9uKToKKyAgICAg
ICAgKHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAg
ICAgIChhZnRlckFsbCk6CisKIDIwMTEtMTItMDIgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9z
dGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBbV0syXSBNaW5p
QnJvd3NlciAtLXRvdWNoIGFzc2VydHMgaW4gZGVidWcgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
aW5kZXggNGNhNDk3Ny4uMmI3MDRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTUzNiw2ICs1
MzYsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJL
SVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5LmNwcCBcCkBAIC04NjgsNiArODcwLDggQEAgbGlid2Via2l0Mmd0a19AV0VC
S0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9s
YV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
aCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JH
dGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VB
Y2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmggXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4
IDdlYmE3M2UuLmQ0ODFhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJFdmVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUu
aCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+CkBAIC02OCw2ICs2OSw3
IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBDU3RyaW5nIHRvb2x0
aXBUZXh0OwogICAgIEd0a0RyYWdBbmREcm9wSGVscGVyIGRyYWdBbmREcm9wSGVscGVyOwogICAg
IERyYWdJY29uIGRyYWdJY29uOworICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3NpYmxlOwog
fTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFzZSwgd2Via2l0X3dlYl92aWV3X2Jh
c2UsIEdUS19UWVBFX0NPTlRBSU5FUikKQEAgLTE0Nyw2ICsxNDksNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3
QmFzZSkKICAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVyZWQodmlld1dpZGdldCwgRkFM
U0UpOwogICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh2aWV3V2lkZ2V0LCBUUlVFKTsKICAg
ICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGljb250ZXh0X25ldygpOworICAgIHByaXYt
PmFjY2Vzc2libGUgPSAwOwogCiAgICAgcHJpdi0+cGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBs
OjpjcmVhdGUodmlld1dpZGdldCk7CiAKQEAgLTM0NCw2ICszNDcsMzUgQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtE
cmFnQ29udGV4dCoKICAgICBnZGtfZHJhZ19zdGF0dXMoY29udGV4dCwgZHJhZ09wZXJhdGlvblRv
U2luZ2xlR2RrRHJhZ0FjdGlvbihvcGVyYXRpb24pLCB0aW1lKTsKIH0KIAorc3RhdGljIEF0a09i
amVjdCogd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKEd0a1dpZGdldCAqd2lkZ2V0KQor
eworICAgIC8vIElmIHRoZSBzb2NrZXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBlbWJl
ZGRlZCBhIHBsdWcgSUQsIHJldHVybiBpdC4KKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUq
IHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OworICAgIGlmIChwcml2
LT5hY2Nlc3NpYmxlICYmIGF0a19zb2NrZXRfaXNfb2NjdXBpZWQoQVRLX1NPQ0tFVChwcml2LT5h
Y2Nlc3NpYmxlLmdldCgpKSkpCisgICAgICAgIHJldHVybiBwcml2LT5hY2Nlc3NpYmxlLmdldCgp
OworCisgICAgLy8gQ3JlYXRlIHRoZSBhY2Nlc3NpYmxlIG9iamVjdCBhbmQgYXNzb2NpYXRlIGl0
IHRvIHRoZSB3aWRnZXQuCisgICAgaWYgKCFwcml2LT5hY2Nlc3NpYmxlKSB7CisgICAgICAgIHBy
aXYtPmFjY2Vzc2libGUgPSBhZG9wdEdSZWYoQVRLX09CSkVDVCh3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9hY2Nlc3NpYmxlX25ldyh3aWRnZXQpKSk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBwYXJlbnQg
bm90IHRvIGJyZWFrIGJvdHRvbS11cCBuYXZpZ2F0aW9uLgorICAgICAgICBHdGtXaWRnZXQqIHBh
cmVudFdpZGdldCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3aWRnZXQpOworICAgICAgICBBdGtP
YmplY3QqIGF4UGFyZW50ID0gcGFyZW50V2lkZ2V0ID8gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJs
ZShwYXJlbnRXaWRnZXQpIDogMDsKKyAgICAgICAgaWYgKGF4UGFyZW50KQorICAgICAgICAgICAg
YXRrX29iamVjdF9zZXRfcGFyZW50KHByaXYtPmFjY2Vzc2libGUuZ2V0KCksIGF4UGFyZW50KTsK
KyAgICB9CisKKyAgICAvLyBUcnkgdG8gZW1iZWQgdGhlIHBsdWcgaW4gdGhlIHNvY2tldCwgaWYg
cG9zc3NpYmxlLgorICAgIFN0cmluZyBwbHVnSUQgPSBwcml2LT5wYWdlUHJveHktPmdldEFjY2Vz
c2liaWxpdHlQbHVnSUQoKTsKKyAgICBpZiAocGx1Z0lELmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gcHJpdi0+YWNjZXNzaWJsZS5nZXQoKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IHBsdWdJRFN0
cmluZyhnX3N0cmR1cChwbHVnSUQudXRmOCgpLmRhdGEoKSkpOworICAgIGF0a19zb2NrZXRfZW1i
ZWQoQVRLX1NPQ0tFVChwcml2LT5hY2Nlc3NpYmxlLmdldCgpKSwgcGx1Z0lEU3RyaW5nLmdldCgp
KTsKKworICAgIHJldHVybiBwcml2LT5hY2Nlc3NpYmxlLmdldCgpOworfQorCiBzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtE
cmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRpbWUpCiB7CiAgICAg
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KTsKQEAgLTQwOCw2ICs0NDAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdp
ZGdldENsYXNzLT5kcmFnX2xlYXZlID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnTGVhdmU7CiAgICAg
d2lkZ2V0Q2xhc3MtPmRyYWdfZHJvcCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Ryb3A7CiAgICAg
d2lkZ2V0Q2xhc3MtPmRyYWdfZGF0YV9yZWNlaXZlZCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Rh
dGFSZWNlaXZlZDsKKyAgICB3aWRnZXRDbGFzcy0+Z2V0X2FjY2Vzc2libGUgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldEFjY2Vzc2libGU7CiAKICAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdFdlYlZpZXdCYXNlQ2xhc3MpOwogICAgIGdvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZUZpbmFsaXplOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4MzVl
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIgorCitzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUgeworICAgIEd0a1dpZGdldCogd2lk
Z2V0OworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUsIHdl
YmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGUsIEFUS19UWVBFX1NPQ0tFVCkKKworc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKEd0a1dpZGdl
dCogd2lkZ2V0LCBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIGFjY2Vzc2libGUpCit7Cisg
ICAgYWNjZXNzaWJsZS0+cHJpdi0+d2lkZ2V0ID0gMDsKKyAgICBhdGtfb2JqZWN0X25vdGlmeV9z
dGF0ZV9jaGFuZ2UoQVRLX09CSkVDVChhY2Nlc3NpYmxlKSwgQVRLX1NUQVRFX0RFRlVOQ1QsIFRS
VUUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVJbml0aWFs
aXplKEF0a09iamVjdCogYXRrT2JqZWN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChBVEtf
T0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfcGFyZW50X2NsYXNz
KS0+aW5pdGlhbGl6ZSkKKyAgICAgICAgQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdf
YmFzZV9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUoYXRrT2JqZWN0LCBkYXRh
KTsKKworICAgIGlmIChkYXRhICYmIEdUS19JU19XSURHRVQoZGF0YSkpIHsKKyAgICAgICAgV2Vi
S2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlID0gV0VCS0lUX1dFQl9WSUVXX0JB
U0VfQUNDRVNTSUJMRShhdGtPYmplY3QpOworICAgICAgICBhY2Nlc3NpYmxlLT5wcml2LT53aWRn
ZXQgPSBHVEtfV0lER0VUKGRhdGEpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIo
YWNjZXNzaWJsZS0+cHJpdi0+d2lkZ2V0LCAiZGVzdHJveSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVXaWRnZXRE
ZXN0cm95ZWQpLCBhdGtPYmplY3QpOworICAgIH0KKworICAgIGF0a19vYmplY3Rfc2V0X3JvbGUo
YXRrT2JqZWN0LCBBVEtfUk9MRV9GSUxMRVIpOworfQorCitzdGF0aWMgQXRrU3RhdGVTZXQqIHdl
YmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVJlZlN0YXRlU2V0KEF0a09iamVjdCAqYXRrT2JqZWN0
KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSogYWNjZXNzaWJsZSA9IFdFQktJ
VF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUoYXRrT2JqZWN0KTsKKworICAgIEF0a1N0YXRlU2V0
KiBzdGF0ZV9zZXQ7CisgICAgaWYgKGFjY2Vzc2libGUtPnByaXYtPndpZGdldCkgeworICAgICAg
ICAvLyBVc2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIEF0a1NvY2tldCBpZiB0aGUgd2lkZ2V0IGlz
IHN0aWxsIGFsaXZlLgorICAgICAgICBzdGF0ZV9zZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtp
dF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+cmVmX3N0YXRlX3NldChh
dGtPYmplY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSB3aWRnZXQgaXMgbm8g
bG9uZ2VyIGFsaXZlLCBzYXZlIHNvbWUgcmVtb3RlIGNhbGxzCisgICAgICAgIC8vIChiZWNhdXNl
IG9mIEF0a1NvY2tldCdzIGltcGxlbWVudGF0aW9uIG9mIHJlZl9zdGF0ZV9zZXQoKSkKKyAgICAg
ICAgLy8gYW5kIGp1c3QgcmV0dXJuIHRoYXQgdGhpcyBBdGtPYmplY3QgaXMgZGVmdW5jdC4KKyAg
ICAgICAgc3RhdGVfc2V0ID0gYXRrX3N0YXRlX3NldF9uZXcoKTsKKyAgICAgICAgYXRrX3N0YXRl
X3NldF9hZGRfc3RhdGUoc3RhdGVfc2V0LCBBVEtfU1RBVEVfREVGVU5DVCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHN0YXRlX3NldDsKK30KKworc3RhdGljIGdpbnQgd2Via2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlR2V0SW5kZXhJblBhcmVudChBdGtPYmplY3QgKmF0a09iamVjdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChBVEtfSVNfT0JKRUNUKGF0a09iamVjdCksIC0xKTsKKworICAg
IEF0a09iamVjdCogYXRrUGFyZW50ID0gYXRrX29iamVjdF9nZXRfcGFyZW50KGF0a09iamVjdCk7
CisgICAgaWYgKCFhdGtQYXJlbnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGd1aW50IGNv
dW50ID0gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGF0a1BhcmVudCk7Cisg
ICAgZm9yIChndWludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQXRrT2JqZWN0
KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXRrUGFyZW50LCBpKTsK
KyAgICAgICAgYm9vbCBjaGlsZElzT2JqZWN0ID0gY2hpbGQgPT0gYXRrT2JqZWN0ID8gdHJ1ZSA6
IGZhbHNlOworICAgICAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgICAgIGlmIChjaGls
ZElzT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgcmV0dXJuIC0x
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2luaXQo
V2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIGFjY2Vzc2li
bGUtPnByaXYgPSBuZXcgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSgpOworICAg
IGFjY2Vzc2libGUtPnByaXYtPndpZGdldCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUFjY2Vz
c2libGVDbGFzcyoga2xhc3MpCit7CisgICAgQXRrT2JqZWN0Q2xhc3MqIGF0a09iamVjdENsYXNz
ID0gQVRLX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICAvLyBObyBuZWVkIHRvIGltcGxlbWVu
dCBnZXRfbl9jaGlsZHJlbigpIGFuZCByZWZfY2hpbGQoKSBoZXJlCisgICAgLy8gc2luY2UgdGhp
cyBpcyBhIHN1YmNsYXNzIG9mIEF0a1NvY2tldCBhbmQgYWxsIHRoZSBsb2dpYyByZWxhdGVkCisg
ICAgLy8gdG8gdGhvc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIEFUSyBi
cmlkZ2UuCisgICAgYXRrT2JqZWN0Q2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVJbml0aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5yZWZfc3RhdGVfc2V0
ID0gd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUmVmU3RhdGVTZXQ7CisgICAgYXRrT2JqZWN0
Q2xhc3MtPmdldF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVH
ZXRJbmRleEluUGFyZW50OworfQorCitXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIHdlYmtp
dF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfbmV3KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAg
IEF0a09iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nhc3Q8QXRrT2JqZWN0Kj4oZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgMCkpOworICAgIGF0a19vYmpl
Y3RfaW5pdGlhbGl6ZShvYmplY3QsIHdpZGdldCk7CisgICAgcmV0dXJuIFdFQktJVF9XRUJfVklF
V19CQVNFX0FDQ0VTU0lCTEUob2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzMGI0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQy
L3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZV9oCisjZGVmaW5lIFdlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZV9oCisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFICAgICAgICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKG9iamVjdCkgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9B
Q0NFU1NJQkxFLCBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUpKQorI2RlZmluZSBXRUJLSVRf
V0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUs
IFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dF
Ql9WSUVXX0JBU0VfQUNDRVNTSUJMRShvYmplY3QpICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSkp
CisjZGVmaW5lIFdFQktJVF9JU19XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEVfQ0xBU1Moa2xhc3Mp
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1dFQl9WSUVX
X0JBU0VfQUNDRVNTSUJMRSkpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lC
TEVfR0VUX0NMQVNTKG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVjdCks
IFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nl
c3NpYmxlIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRXZWJWaWV3QmFzZUFjY2Vzc2libGVDbGFzcyBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRl
IFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGU7CisKKworc3RydWN0IF9XZWJLaXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGUgeworICAgIEF0a1NvY2tldCBwYXJlbnQ7CisgICAgLyo8IHBy
aXZhdGUgPiovCisgICAgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSogcHJpdjsK
K307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MgeworICAgIEF0
a1NvY2tldENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X3dlYl92aWV3X2Jh
c2VfYWNjZXNzaWJsZV9nZXRfdHlwZSgpOworCitXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUq
IHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfbmV3KEd0a1dpZGdldCopOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxp
dHlUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iNzkxOGZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtp
dDIuaD4KKworI2RlZmluZSBBUFBfTkFNRSAiQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIiCisKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb250ZW50cyA9CisiPGh0bWw+IgorIiAgPGJvZHk+IgorIiAgIDxo
MT5UaGlzIGlzIGEgdGVzdDwvaDE+IgorIiAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBz
b21lIHBsYWluIHRleHQuPC9wPiIKKyIgICA8cD5UaGlzIHBhcmFncmFwaCBjb250YWlucyA8YSBo
cmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxl
LjwvcD4iCisiICA8L2JvZHk+IgorIjwvaHRtbD4iOworCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZF9m
aW5pc2hlZF9jYihXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmxvYWRlckNsaWVudCwgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBTZW5kIGEgbWVzc2FnZSB0
byB0aGUgcGFyZW50IHByb2Nlc3MgdGVsbGluZyB3ZSdyZSByZWFkeS4KKyAgICBnX3ByaW50KCJP
SyIpOworICAgIHJldHVybiBGQUxTRTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyKiph
cmd2KQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGJvdGggR0FJTCBhbmQgdGhlIEFUSyBicmlk
Z2UgYXJlIGxvYWRlZC4KKyAgICBnX3NldGVudigiR1RLX01PRFVMRVMiLCAiZ2FpbDphdGstYnJp
ZGdlIiwgVFJVRSk7CisKKyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworCisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwod2ViVmlldywgY29udGVudHMsIDApOwor
CisgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19X
SURHRVQod2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKworICAg
IFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkZXJfY2xpZW50KHdlYlZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobG9hZGVyQ2xp
ZW50LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZF9maW5pc2hlZF9jYiksIDApOwor
CisgICAgZ3RrX21haW4oKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZDkxMmI2NS4uYzYwMGM2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW0KQEAgLTEsMTEgKzEsMTggQEAKIFRFU1RfUFJPR1MgKz0gXAorCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSBcCiAJUHJvZ3JhbXMvV2ViS2l0
MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2Vi
S2l0V2ViTG9hZGVyQ2xpZW50IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktp
dFNldHRpbmdzIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlz
dAogCi1ub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQorSEVMUEVSX1BST0dTID0gXAor
CVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcgorCitub2lu
c3RfUFJPR1JBTVMgKz0gXAorCSQoVEVTVF9QUk9HUykgXAorCSQoSEVMUEVSX1BST0dTKQorCiB3
ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXAogCS1EV0VCS0lUX0VYRUNfUEFUSD1cIiR7c2hlbGwg
cHdkfS8kKHRvcF9idWlsZGRpcikvUHJvZ3JhbXNcIiBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBm
bGFncykgXApAQCAtNDYsNiArNTMsMTggQEAgTGlicmFyaWVzX2xpYldlYktpdDJBUElUZXN0Q29y
ZV9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmgKIExpYnJhcmllc19saWJXZWJLaXQyQVBJVGVzdENvcmVfbGFfQ1BQRkxB
R1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX0FjY2Vzc2li
aWxpdHlUZXN0U2VydmVyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5X1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
Y3BwZmxhZ3MpICQoQVRTUEkyX0NGTEFHUykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
V2ViS2l0QWNjZXNzaWJpbGl0eV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChBVFNQ
STJfTElCUykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0
eV9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKIFByb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAogUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzgwMjkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwx
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RNYWlu
LmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKworLy8gVGhlIGxpYmF0c3BpIGhlYWRlcnMg
ZG9uJ3QgdXNlIEdfQkVHSU5fREVDTFMKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgPGF0c3BpL2F0
c3BpLmg+Cit9CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1
ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKKy8vIE5hbWUgb2YgdGhlIHRl
c3Qgc2VydmVyIGFwcGxpY2F0aW9uIGNyZWF0aW5nIHRoZSB3ZWJWaWV3IG9iamVjdC4KKyNkZWZp
bmUgVEVTVF9TRVJWRVJfQVBQX05BTUUgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIgorCisvLyBN
YXggc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3Rpbmcg
aXQuCisjZGVmaW5lIE1BWF9XQUlUX0ZPUl9DSElMRCA1CisKKy8vIFRoZSBQSUQgZm9yIHRoZSB0
ZXN0IHNlcnZlciBydW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCitzdGF0aWMg
R1BpZCBjaGlsZFByb2Nlc3NQaWQgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4gcnVuVGVzdFNlcnZl
cigpCit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4KKyAgICBHT3duUHRyPGNoYXI+IHRlc3Rfc2VydmVyX3BhdGgoZ19zdHJkdXBfcHJpbnRm
KCIlcy9Qcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvIiBURVNUX1NFUlZFUl9BUFBfTkFNRSwgZ19n
ZXRfY3VycmVudF9kaXIoKSkpOworICAgIGNoYXIqKiB0ZXN0X3NlcnZlcl9hcmd2ID0gZ19zdHJz
cGxpdCh0ZXN0X3NlcnZlcl9wYXRoLmdldCgpLCB0ZXN0X3NlcnZlcl9wYXRoLmdldCgpLCAxKTsK
KworICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2Ny
aXB0b3IgdG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cg
d2hlbiBpdCdzIHJlYWR5LgorICAgIGludCBjaGlsZF9zdGRvdXQgPSAwOworICAgIGlmICghZ19z
cGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3Rfc2VydmVyX2FyZ3YsIDAsIChHU3Bhd25GbGFn
cykwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGlsZFByb2Nl
c3NQaWQsIDAsICZjaGlsZF9zdGRvdXQsIDAsIDApKQorICAgICAgICByZXR1cm4gRkFMU0U7CisK
KyAgICAvLyBDaGFuZ2UgdGhlIGNoaWxkJ3Mgc3Rkb3V0IGZpbGUgZGVzY3JpcHRvciB0byBiZSBu
b24tYmxvY2tpbmcuCisgICAgaWYgKGZjbnRsKGNoaWxkX3N0ZG91dCwgRl9TRVRGTCwgZmNudGwo
Y2hpbGRfc3Rkb3V0LCBGX0dFVEZMKSB8IE9fTk9OQkxPQ0spID09IC0xKSB7CisgICAgICAgIHBl
cnJvcigiRXJyb3IgY2FsbGluZyBmY250bCBvdmVyIGNoaWxkJ3Mgc3Rkb3V0IGZpbGUgZGVzY3Jp
cHRvciIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLy8gV2FpdCBmb3Ig
Y2hpbGQgdG8gc2F5IGl0J3MgcmVhZHkgdGlsbCBNQVhfV0FJVF9GT1JfQ0hJTEQuCisgICAgY2hh
ciBtc2dbMl07CisgICAgaW50IHRyaWVzX2NvdW50ID0gMDsKKyAgICB3aGlsZSAodHJpZXNfY291
bnQgPCBNQVhfV0FJVF9GT1JfQ0hJTEQgJiYgcmVhZChjaGlsZF9zdGRvdXQsICZtc2csIDIpID09
IC0xKSB7CisgICAgICAgIC8vIFdlIHVzZSB0aGUgc2xlZXAgYmVjYXVzZSB3ZSBhY3R1YWxseSBu
ZWVkIHRvIGJsb2NrCisgICAgICAgIC8vIGV4ZWN1dGlvbiwgdG8gYXZvaWQgdGhlIHRlc3QgZmlu
aXNoaW5nIGJlZm9yZSBoYXZpbmcKKyAgICAgICAgLy8gaW5zcGVjdGVkIHRoZSBzZXJ2ZXIgYXBw
bGljYXRpb24sIHdoaWNoIGlzIHdoYXQgd291bGQKKyAgICAgICAgLy8gaGFwcGVuIGlmIHdlIHVz
ZWQgdGhlIG1haW5sb29wIHRvIHJlYWQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIHNsZWVwKDEp
OworICAgICAgICB0cmllc19jb3VudCsrOworICAgIH0KKworICAgIC8vIFJldHVybiBUUlVFIGlm
IHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVhZHkuCisgICAgcmV0dXJu
IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsKK30KKworc3RhdGljIHZvaWQgc3RvcFRl
c3RTZXJ2ZXIoKQoreworICAgIC8vIEEgUElEIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVyby4K
KyAgICBnX3JldHVybl9pZl9mYWlsKGNoaWxkUHJvY2Vzc1BpZCA+IDApOworCisgICAgZ19zcGF3
bl9jbG9zZV9waWQoY2hpbGRQcm9jZXNzUGlkKTsKKyAgICBraWxsKChwaWRfdCljaGlsZFByb2Nl
c3NQaWQsIFNJR1RFUk0pOworICAgIGNoaWxkUHJvY2Vzc1BpZCA9IDA7Cit9CisKK3N0YXRpYyB2
b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVtKQoreworICAgIGlmIChjaGlsZFByb2Nlc3NQ
aWQgPiAwKQorICAgICAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitzdGF0aWMgdm9pZAorY2hl
Y2tfYXRzcGlfYWNjZXNzaWJsZShBdHNwaUFjY2Vzc2libGUqIGFjY2Vzc2libGUsIGNvbnN0IGNo
YXIqIHRhcmdldE5hbWUsIEF0c3BpUm9sZSB0YXJnZXRSb2xlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoQVRTUElfSVNfQUNDRVNTSUJMRShhY2Nlc3NpYmxlKSk7CisKKyAgICBHT3duUHRyPGNo
YXI+IG5hbWUoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRhcmdldE5hbWUsID09LCBuYW1lLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGFyZ2V0Um9sZSwgPT0sIGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNz
aWJsZSwgMCkpOworfQorCitzdGF0aWMgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+CitmaW5kX3Rl
c3Rfc2VydmVyX2FwcGxpY2F0aW9uKCkKK3sKKyAgICAvLyBPbmx5IG9uZSBkZXNrdG9wIGlzIHN1
cHBvcnRlZCBieSBBVFNQSSBhdCB0aGUgbW9tZW50LgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3Np
YmxlPiBkZXNrdG9wID0gYXRzcGlfZ2V0X2Rlc2t0b3AoMCk7CisKKyAgICAvLyBMb29rIGZvciB0
aGUgc2VydmVyIGFwcGxpY2F0aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCisgICAgR1JlZlB0cjxB
dHNwaUFjY2Vzc2libGU+IGN1cnJlbnQgPSAwOworICAgIGludCBjaGlsZENvdW50ID0gYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoZGVza3RvcC5nZXQoKSwgMCk7CisgICAgaW50IGkg
PSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgY3Vy
cmVudCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCks
IGksIDApOworICAgICAgICBpZiAoIWdfc3RyY21wMChhdHNwaV9hY2Nlc3NpYmxlX2dldF9uYW1l
KGN1cnJlbnQuZ2V0KCksIDApLCBURVNUX1NFUlZFUl9BUFBfTkFNRSkpCisgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg
dGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgaWYgKHJ1blRlc3RTZXJ2ZXIoKSkgeworICAgICAgICAvLyBUaGUgdGVzdCBzZXJ2
ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgICAgIEdSZWZQdHI8
QXRzcGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBwID0gZmluZF90ZXN0X3NlcnZlcl9hcHBsaWNh
dGlvbigpOworICAgICAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RTZXJ2ZXJB
cHAuZ2V0KCkpKTsKKyAgICAgICAgY2hlY2tfYXRzcGlfYWNjZXNzaWJsZSh0ZXN0U2VydmVyQXBw
LmdldCgpLCAiQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIiLCBBVFNQSV9ST0xFX0FQUExJQ0FUSU9O
KTsKKworICAgICAgICAvLyBUaGUgbWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAo
VUkgUHJvY2VzcykuCisgICAgICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50UGFy
ZW50ID0gdGVzdFNlcnZlckFwcDsKKyAgICAgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1
cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQ
YXJlbnQuZ2V0KCksIDAsIDApOworICAgICAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxF
KGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgICAgICBjaGVja19hdHNwaV9hY2Nlc3NpYmxlKGN1
cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRlJBTUUpOworCisgICAgICAgIC8vIFRo
ZSBXZWJWaWV3J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgICAgICBj
dXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgICAgICBjdXJyZW50Q2hpbGQgPSBhdHNw
aV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAw
KTsKKyAgICAgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0
KCkpKTsKKyAgICAgICAgY2hlY2tfYXRzcGlfYWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCks
ICIiLCBBVFNQSV9ST0xFX0ZJTExFUik7CisKKyAgICAgICAgLy8gVGhlIFdlYlBhZ2UncyBhY2Nl
c3NpYmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgorICAgICAgICBjdXJyZW50UGFyZW50ID0g
Y3VycmVudENoaWxkOworICAgICAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dl
dF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICAgICAgZ19h
c3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICAgICAg
Y2hlY2tfYXRzcGlfYWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xF
X0ZJTExFUik7CisKKyAgICAgICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVs
ZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICAgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGls
ZDsKKyAgICAgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgICAgIGdfYXNzZXJ0KEFUU1BJ
X0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisKKyAgICAgICAgLy8gSFRNTCBi
b2R5J3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgICAgIGN1cnJlbnRQ
YXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vz
c2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAg
ICAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwor
ICAgICAgICBjaGVja19hdHNwaV9hY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFU
U1BJX1JPTEVfRE9DVU1FTlRfRlJBTUUpOworCisgICAgICAgIC8vIEhUTUwgSDEncyBhY2Nlc3Np
YmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICAgICAgY3VycmVudFBhcmVudCA9IGN1cnJl
bnRDaGlsZDsKKyAgICAgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgICAgIGdfYXNzZXJ0
KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgICAgIGNoZWNr
X2F0c3BpX2FjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiVGhpcyBpcyBhIHRlc3QiLCBB
VFNQSV9ST0xFX0hFQURJTkcpOworCisgICAgICAgIC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3Mg
YWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgICAgIGN1cnJlbnRDaGlsZCA9
IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCks
IDEsIDApOworICAgICAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGls
ZC5nZXQoKSkpOworICAgICAgICBjaGVja19hdHNwaV9hY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5n
ZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKKworICAgICAgICAvLyBIVE1MIHNlY29u
ZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICAgICAg
Y3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVu
dFBhcmVudC5nZXQoKSwgMiwgMCk7CisgICAgICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lC
TEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgICAgIGNoZWNrX2F0c3BpX2FjY2Vzc2libGUo
Y3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJBR1JBUEgpOworCisgICAgICAg
IC8vIEhUTUwgbGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgICAg
ICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgICAgICBjdXJyZW50Q2hpbGQgPSBh
dHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAw
LCAwKTsKKyAgICAgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQu
Z2V0KCkpKTsKKyAgICAgICAgY2hlY2tfYXRzcGlfYWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0
KCksICJhIGxpbmsiLCBBVFNQSV9ST0xFX0xJTkspOworICAgIH0KKworICAgIC8vIEVuc3VyZSB3
ZSBzdG9wIHRoZSBzZXJ2ZXIuCisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKwordm9pZCBiZWZv
cmVBbGwoKQoreworICAgIC8vIFdlIGluc3RhbGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdl
IGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVz
ZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlzLgorICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9y
dEhhbmRsZXIpOworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIs
ICJhdHNwaS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk7Cit9CisK
K3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IGY2NmRmNmQuLjUzYzI0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKQEAgLTU0OSw2ICs1NDksMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U21h
cnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEsp
CisgICAgU3RyaW5nIGdldEFjY2Vzc2liaWxpdHlQbHVnSUQoKSBjb25zdCB7IHJldHVybiBtX2Fj
Y2Vzc2liaWxpdHlQbHVnSUQ7IH0KKyNlbmRpZgorCiAgICAgdm9pZCBiZWdpblByaW50aW5nKFdl
YkZyYW1lUHJveHkqLCBjb25zdCBQcmludEluZm8mKTsKICAgICB2b2lkIGVuZFByaW50aW5nKCk7
CiAgICAgdm9pZCBjb21wdXRlUGFnZXNGb3JQcmludGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3Qg
UHJpbnRJbmZvJiwgUGFzc1JlZlB0cjxDb21wdXRlZFBhZ2VzQ2FsbGJhY2s+KTsKQEAgLTcyMSw2
ICs3MjUsNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgZ2V0RWRp
dG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8U3RyaW5n
PiYpOworICAgIHZvaWQgYmluZEFjY2Vzc2liaWxpdHlUcmVlKGNvbnN0IFN0cmluZyYpOwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlF
dmVudChWZWN0b3I8U3RyaW5nPiYpOwpAQCAtOTQ2LDYgKzk1MSwxMCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlQbHVnSUQ7CisjZW5kaWYKKwogICAg
IGludDY0X3QgbV9zcGVsbERvY3VtZW50VGFnOwogICAgIGJvb2wgbV9oYXNTcGVsbERvY3VtZW50
VGFnOwogICAgIHVuc2lnbmVkIG1fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4KaW5kZXggYWFiOWVhNS4uNjNjM2FjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xNDIsNiArMTQyLDkgQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBQTEFURk9STShHVEspCiAgICAgIyBTdXBwb3J0IGZv
ciBHVEsrIHBsYXRmb3JtIGtleWJpbmRpbmdzCiAgICAgR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlF
dmVudChBdG9taWNTdHJpbmcgZXZlbnRUeXBlKSAtPiAoVmVjdG9yPFdURjo6U3RyaW5nPiBjb21t
YW5kc0xpc3QpCisKKyAgICAjIFN1cHBvcnQgZm9yIGNvbm5lY3RpbmcgdGhlIEFjY2Vzc2liaWxp
dHkgd29ybGRzIG9mIHRoZSBVSSBhbmQgdGhlIFdlYiBwcm9jZXNzZXMKKyAgICBCaW5kQWNjZXNz
aWJpbGl0eVRyZWUoV1RGOjpTdHJpbmcgcGx1Z0lEKQogI2VuZGlmCiAKICAgICAjIEJhY2tGb3J3
YXJkIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQ
cm94eUd0ay5jcHAKaW5kZXggMTEyN2RkZS4uZjZiMzAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtNDksNiArNDksMTEgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFYKICAgICBtX3BhZ2VDbGllbnQtPmdldEVkaXRvckNvbW1h
bmRzRm9yS2V5RXZlbnQobV9rZXlFdmVudFF1ZXVlLmZpcnN0KCksIGV2ZW50VHlwZSwgY29tbWFu
ZHNMaXN0KTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmJpbmRBY2Nlc3NpYmlsaXR5VHJlZShj
b25zdCBTdHJpbmcmIHBsdWdJRCkKK3sKKyAgICBtX2FjY2Vzc2liaWxpdHlQbHVnSUQgPSBwbHVn
SUQ7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgU3Ry
aW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDRkZDU2OTkuLjExZGZjYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC01MTcsNiArNTE3LDExIEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCiAgICAgLy8g
SWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4KICAgICBpZiAoV2ViRnJhbWU6
OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+bG9hZExpc3RlbmVyKCkpCiAg
ICAgICAgIGxvYWRMaXN0ZW5lci0+ZGlkRmluaXNoTG9hZChtX2ZyYW1lKTsKKworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAvLyBFbnN1cmUgdGhlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGlzIHVw
ZGF0ZWQgYWZ0ZXIgbG9hZGluZy4KKyAgICB3ZWJQYWdlLT51cGRhdGVBY2Nlc3NpYmlsaXR5VHJl
ZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
Rmlyc3RMYXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCmluZGV4IDI0MGVlMDcuLjVmYTkyODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE4NCw2ICsxODQsOCBAQCBXZWJQYWdlOjpX
ZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKICAgICAsIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQoMCkKICNl
bGlmIFBMQVRGT1JNKFdJTikKICAgICAsIG1fbmF0aXZlV2luZG93KHBhcmFtZXRlcnMubmF0aXZl
V2luZG93KQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICwgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0
KDApCiAjZW5kaWYKICAgICAsIG1fc2V0Q2FuU3RhcnRNZWRpYVRpbWVyKFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnJ1bkxvb3AoKSwgdGhpcywgJldlYlBhZ2U6OnNldENhblN0YXJ0TWVkaWFUaW1lckZp
cmVkKQogICAgICwgbV9maW5kQ29udHJvbGxlcih0aGlzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggOTE2ZDg2Mi4uN2EwMTEyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC02NCw2ICs2NCw3IEBA
CiAKICNpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNp
bmNsdWRlICJXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oIgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzgzLDYgKzM4NCw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IGdlc3R1cmVXaWxsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sJiBjYW5CZWdp
blBhbm5pbmcpOwogICAgIHZvaWQgZ2VzdHVyZURpZFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CiAgICAgdm9pZCBnZXN0dXJlRGlkRW5kKCk7CisKKyNlbGlmIFBMQVRGT1JNKEdUSykK
KyAgICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCk7CiAjZW5kaWYKIAogICAgIHZvaWQg
c2V0Q29tcG9zaXRpb25Gb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcs
IHVpbnQ2NF90IGZyb20sIHVpbnQ2NF90IGxlbmd0aCk7CkBAIC01NzYsOSArNTgwLDkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUo
aW50MzJfdCBuZXdJbmRleCk7CiAgICAgdm9pZCBzZXRUZXh0Rm9yQWN0aXZlUG9wdXBNZW51KGlu
dDMyX3QgaW5kZXgpOwogCi0jaWYgUExBVEZPUk0oR1RLKSAgICAKKyNpZiBQTEFURk9STShHVEsp
CiAgICAgdm9pZCBmYWlsZWRUb1Nob3dQb3B1cE1lbnUoKTsKLSNlbmRpZiAgICAKKyNlbmRpZgog
CiAgICAgdm9pZCBkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogICAgIHZvaWQgZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCk7CkBAIC02NTQsNiArNjU4LDgg
QEAgcHJpdmF0ZToKICAgICBIV05EIG1fbmF0aXZlV2luZG93OwogCiAgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IG1fZ2VzdHVyZVRhcmdldE5vZGU7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKICNlbmRp
ZgogICAgIAogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlBhZ2U+IG1fc2V0Q2FuU3RhcnRNZWRpYVRp
bWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWUyMjNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEd0ay5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgiCisKKyNpbmNsdWRlICJXZWJQYWdlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVGSU5FX1RZUEUoV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3QsIHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0LCBBVEtfVFlQ
RV9QTFVHKQorCitzdGF0aWMgQXRrT2JqZWN0KiBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBw
ZXIoQXRrT2JqZWN0KiBhdGtPYmplY3QpCit7CisgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3Np
YmlsaXR5KCk7CisKKyAgICBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZSA9
IFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09iamVjdCk7CisgICAgaWYgKCFhY2Nl
c3NpYmxlLT5tX3BhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGFnZSogcGFnZSA9IGFj
Y2Vzc2libGUtPm1fcGFnZS0+Y29yZVBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRnJhbWUqIGNvcmUgPSBwYWdlLT5tYWluRnJhbWUoKTsKKyAgICBpZiAo
IWNvcmUgfHwgIWNvcmUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcm9vdCA9IGNvcmUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUo
KS0+cm9vdE9iamVjdCgpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBBdGtPYmplY3QqIGF4Um9vdCA9IHJvb3QtPndyYXBwZXIoKTsKKyAgICBpZiAoIWF4Um9vdCB8
fCAhQVRLX0lTX09CSkVDVChheFJvb3QpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBheFJvb3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0SW5p
dGlhbGl6ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAo
QVRLX09CSkVDVF9DTEFTUyh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9wYXJlbnRfY2xh
c3MpLT5pbml0aWFsaXplKQorICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYl9wYWdlX2FjY2Vz
c2liaWxpdHlfb2JqZWN0X3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUoYXRrT2JqZWN0LCBkYXRh
KTsKKworICAgIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09iamVjdCktPm1fcGFn
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZSo+KGRhdGEpOworICAgIGF0a19vYmplY3Rfc2V0
X3JvbGUoYXRrT2JqZWN0LCBBVEtfUk9MRV9GSUxMRVIpOworfQorCitzdGF0aWMgZ2ludCB3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldEluZGV4SW5QYXJlbnQoQXRrT2JqZWN0ICphdGtPYmpl
Y3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX0lTX09CSkVDVChhdGtPYmplY3Qp
LCAtMSk7CisgICAgLy8gQW4gQXRrUGx1ZyBpcyB0aGUgb25seSBjaGlsZCBhbiBBdGtTb2NrZXQg
Y2FuIGhhdmUuCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnaW50IHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0R2V0TkNoaWxkcmVuKEF0a09iamVjdCogYXRrT2JqZWN0KQoreworICAgIEF0
a09iamVjdCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihhdGtP
YmplY3QpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gMTsKK30KKworc3RhdGljIEF0a09iamVjdCogd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RSZWZDaGlsZChBdGtPYmplY3QqIGF0a09iamVjdCwgZ2ludCBpbmRleCkKK3sKKyAgICAvLyBJ
dCdzIHN1cHBvc2VkIHRvIGhhdmUgZWl0aGVyIG9uZSBjaGlsZCBvciB6ZXJvLgorICAgIGlmIChp
bmRleCA8IDAgfHwgaW5kZXggPiAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a09iamVj
dCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihhdGtPYmplY3Qp
OworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdGtfb2Jq
ZWN0X3NldF9wYXJlbnQocm9vdE9iamVjdCwgYXRrT2JqZWN0KTsKKyAgICBnX29iamVjdF9yZWYo
cm9vdE9iamVjdCk7CisKKyAgICByZXR1cm4gcm9vdE9iamVjdDsKK30KKworc3RhdGljIHZvaWQg
d2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfaW5pdChXZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdCogYWNjZXNzaWJsZSkKK3sKKyAgICBhY2Nlc3NpYmxlLT5tX3BhZ2UgPSAwOworfQorCitz
dGF0aWMgdm9pZCB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3MqIGtsYXNzKQoreworICAgIEF0a09iamVjdENsYXNz
KiBhdGtPYmplY3RDbGFzcyA9IEFUS19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgLy8gTm8g
bmVlZCB0byBpbXBsZW1lbnQgZ2V0X3BhcmVudCgpIGhlcmUgc2luY2UgdGhpcyBpcyBhIHN1YmNs
YXNzCisgICAgLy8gb2YgQXRrUGx1ZyBhbmQgYWxsIHRoZSBsb2dpYyByZWxhdGVkIHRvIHRoYXQg
ZnVuY3Rpb24gd2lsbCBiZQorICAgIC8vIGltcGxlbWVudGVkIGJ5IHRoZSBBVEsgYnJpZGdlLgor
ICAgIGF0a09iamVjdENsYXNzLT5pbml0aWFsaXplID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RJbml0aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0g
d2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHZXRJbmRleEluUGFyZW50OworICAgIGF0a09iamVj
dENsYXNzLT5nZXRfbl9jaGlsZHJlbiA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNo
aWxkcmVuOworICAgIGF0a09iamVjdENsYXNzLT5yZWZfY2hpbGQgPSB3ZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdFJlZkNoaWxkOworfQorCitXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogd2Vi
X3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfbmV3KFdlYlBhZ2UqIHBhZ2UpCit7CisgICAgQXRr
T2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihnX29iamVjdF9uZXcoV0VC
X1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgMCkpOworICAgIGF0a19vYmplY3RfaW5p
dGlhbGl6ZShvYmplY3QsIHBhZ2UpOworICAgIHJldHVybiBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZ
X09CSkVDVChvYmplY3QpOworfQorCit2b2lkIHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0
X3JlZnJlc2goV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2libGUpCit7CisgICAg
Ly8gV2UganVzdCBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXJlJ3MgYSBjb25uZWN0aW9uIGluIHRo
ZSBBVEsKKyAgICAvLyB3b3JsZCBiZXR3ZWVuIHRoaXMgYWNjZXNzaWJpbGl0eSBvYmplY3QgYW5k
IHRoZSBBdGtPYmplY3Qgb2YKKyAgICAvLyB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRo
ZSByb290IG9mIHRoZSBET00gdHJlZS4KKyAgICBBdGtPYmplY3QqIHJvb3RPYmplY3QgPSBhY2Nl
c3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIoQVRLX09CSkVDVChhY2Nlc3NpYmxlKSk7CisgICAg
aWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm47CisgICAgYXRrX29iamVjdF9zZXRfcGFy
ZW50KHJvb3RPYmplY3QsIEFUS19PQkpFQ1QoYWNjZXNzaWJsZSkpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEd0ay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjM1OTZlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrX2gKKyNkZWZpbmUgV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RHdGtfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2U7Cit9CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUICAgICAgICAgICAgICAod2Vi
X3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCX1BBR0Vf
QUNDRVNTSUJJTElUWV9PQkpFQ1Qob2JqZWN0KSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmplY3QpLCBXRUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNULCBX
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCkpCisjZGVmaW5lIFdFQl9QQUdFX0FDQ0VTU0lCSUxJ
VFlfT0JKRUNUX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCBXRUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNULCBXZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdENsYXNzKSkKKyNkZWZpbmUgV0VCX0lTX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpF
Q1Qob2JqZWN0KSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBX
RUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKSkKKyNkZWZpbmUgV0VCX0lTX1BBR0Vf
QUNDRVNTSUJJTElUWV9PQkpFQ1RfQ0xBU1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksIFdFQl9UWVBFX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QpKQorI2RlZmlu
ZSBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVF9HRVRfQ0xBU1Mob2JqZWN0KSAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqZWN0KSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZ
X09CSkVDVCwgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzIFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3M7CisKK3N0cnVjdCBfV2ViUGFnZUFjY2Vzc2liaWxp
dHlPYmplY3QgeworICAgIEF0a1BsdWcgcGFyZW50OworICAgIFdlYktpdDo6V2ViUGFnZSogbV9w
YWdlOworfTsKKworc3RydWN0IF9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzIHsKKyAg
ICBBdGtQbHVnQ2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJfcGFnZV9hY2Nlc3Np
YmlsaXR5X29iamVjdF9nZXRfdHlwZSgpOworCitXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCog
d2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfbmV3KFdlYktpdDo6V2ViUGFnZSopOworCit2
b2lkIHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X3JlZnJlc2goV2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3QqKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCmluZGV4IGEyNWUxZjcuLjdiZTM2OWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNw
cApAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3Rr
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXaW5kb3dz
S2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgpAQCAtMzcsNiArMzksNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ0LDcgKzQ3LDIxIEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBDcmVhdGUgdGhlIGFjY2Vzc2libGUg
b2JqZWN0ICh0aGUgcGx1ZykgdGhhdCB3aWxsIHNlcnZlIGFzIHRoZQorICAgIC8vIGVudHJ5IHBv
aW50IHRvIHRoZSBXZWIgcHJvY2VzcywgYW5kIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBVSQorICAg
IC8vIHByb2Nlc3MgdG8gY29ubmVjdCB0aGUgdHdvIHdvcmxkcyB0aHJvdWdoIHRoZSBhY2Nlc3Np
YmlsaXR5CisgICAgLy8gb2JqZWN0IHRoZXJlIHNwZWNpZmljYWxseSBwbGFjZWQgZm9yIHRoYXQg
cHVycG9zZSAodGhlIHNvY2tldCkuCisgICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0ID0gd2ViX3Bh
Z2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfbmV3KHRoaXMpOworICAgIEdPd25QdHI8Z2NoYXI+IHBs
dWdJRChhdGtfcGx1Z19nZXRfaWQoQVRLX1BMVUcobV9hY2Nlc3NpYmlsaXR5T2JqZWN0KSkpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmluZEFjY2Vzc2liaWxpdHlUcmVlKFN0
cmluZyhwbHVnSUQuZ2V0KCkpKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlQWNjZXNzaWJp
bGl0eVRyZWUoKQoreworICAgIGlmICghbV9hY2Nlc3NpYmlsaXR5T2JqZWN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9yZWZyZXNoKG1fYWNj
ZXNzaWJpbGl0eU9iamVjdCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNl
c0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4OWIxZjQ5Li5hYzViZjU5IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTEtMTItMDQgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBX
ZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEVuc3VyZSB0aGUgYWNjZXNzaWJpbGl0eSBpbmZyYXN0cnVj
dHVyZSBpcyBhdmFpbGFibGUgd2hlbiBydW5uaW5nCisgICAgICAgIHRoZSB1bml0IHRlc3RzLCBv
dGhlcndpc2UgV0syJ3MgYWNjZXNzaWJpbGl0eSB0ZXN0cyB3b24ndCB3b3JrLgorCisgICAgICAg
ICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOgorICAgICAgICAoVGVzdFJ1bm5lci5ydW4pOiBJbml0
aWFsaXplIHRoZSBhY2Nlc3NpYmlsaXR5IGluZnJhc3RydWN0dXJlLgorICAgICAgICAobG9va3Vw
QXRzcGkyQmluYXJ5KTogTmV3LiBMb29rcyBmb3IgdGhlIGRpcmVjdG9yeSB3aGVyZSBhdC1zcGky
J3MKKyAgICAgICAgc3R1ZmYgaXMgbG9jYXRlZCAobGlrZSBhdC1zcGktYnVzLWxhdW5jaGVyIGFu
ZCBhdC1zcGkyLXJlZ2lzdHJ5ZCkuCisKIDIwMTEtMTItMDQgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFub3RoZXIgR1RLIGJ1aWxkIGZpeCBhZnRl
ciByMTAxOTIyLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzIGIvVG9v
bHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCmluZGV4IGQ0ZGRlYzUuLmU1YWVjN2QgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1n
dGstdGVzdHMKQEAgLTI0LDcgKzI0LDggQEAgaW1wb3J0IG9zLCBzeXMKIGNsYXNzIFRlc3RSdW5u
ZXI6CiAKICAgICBURVNUX0RJUlMgPSBbICJ1bml0dGVzdHMiLCAiV2ViS2l0MkFQSVRlc3RzIiBd
Ci0gICAgU0tJUFBFRCA9IFsgInVuaXR0ZXN0cy90ZXN0ZG93bmxvYWQiIF0KKyAgICBTS0lQUEVE
ID0gWyAidW5pdHRlc3RzL3Rlc3Rkb3dubG9hZCIsCisgICAgICAgICAgICAgICAgIldlYktpdDJB
UElUZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciIgXQogCiAgICAgZGVmIF9faW5pdF9fKHNl
bGYpOgogICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBFeGVjdXRpdmUoKQpAQCAtODcsNiArODgs
MTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICByZXR1cm4gZXhpdF9zdGF0dXNbMF0K
IAorCitkZWYgbG9va3VwQXRzcGkyQmluYXJ5KGZpbGVuYW1lKToKKyAgICBwYXRoc190b19jaGVj
ayA9IFsgIi91c3IvbGliZXhlYyIsCisgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL2xpYi9h
dC1zcGkyLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAiL3Vzci9saWIzMi9hdC1zcGky
LWNvcmUiCisgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL2xpYjY0L2F0LXNwaTItY29yZSIg
XQorICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX2NoZWNrOgorICAgICAgICBmaWxlcGF0aCA9ICIl
cy8lcyIgJSAocGF0aCwgZmlsZW5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVw
YXRoKToKKyAgICAgICAgICAgIHJldHVybiBmaWxlcGF0aAorICAgIHJldHVybiBOb25lCisKIGlm
IF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdHJ5OgogICAgICAgICB4dmZiID0gRXhlY3V0
aXZlKCkucG9wZW4oWyJYdmZiIiwgIjozMSIsICItc2NyZWVuIiwgIjAiLCAiODAweDYwMHgyNCIs
ICItbm9saXN0ZW4iLCAidGNwIl0sCkBAIC05Niw3ICsxMDksNDMgQEAgaWYgX19uYW1lX18gPT0g
Il9fbWFpbl9fIjoKICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCiAgICAgICAgIHN5cy5leGl0
KDEpCiAKKyAgICAjIFNldHVwIHN1cHBvcnQgZm9yIGFjY2Vzc2liaWxpdHkgdGVzdHMuCisgICAg
dGVzdF9lbnYgPSBvcy5lbnZpcm9uCisgICAgdGVzdF9lbnZbIkRJU1BMQVkiXSA9ICI6MzEiCisK
KyAgICAjIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIFgncyBwcm9wZXJ0eSBBVF9TUElfQlVTIHByZXZp
b3VzbHkgc2V0LAorICAgICMgb3RoZXJ3aXNlIHRoZSBhY2Nlc3NpYmlsaXR5IGJ1cyBjb3VsZG4n
dCBiZSBwcm9wZXJseSBsYXVuY2hlZC4KKyAgICBFeGVjdXRpdmUoKS5wb3BlbihbInhwcm9wIiwg
Ii1yb290IiwgIi1yZW1vdmUiLCAiQVRfU1BJX0JVUyJdLAorICAgICAgICAgICAgICAgICAgICAg
IGVudj10ZXN0X2Vudiwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSkKKworICAgICMgTWFrZSBzdXJlIHRoZSBhY2Nlc3NpYmlsaXR5IGJ1cyBpcyBsYXVuY2hl
ZC4KKyAgICBhMTF5X2J1c19sYXVuY2hlZCA9IEZhbHNlCisgICAgYTExeV9idXNfbGF1bmNoZXJf
cGF0aCA9IGxvb2t1cEF0c3BpMkJpbmFyeSgnYXQtc3BpLWJ1cy1sYXVuY2hlcicpCisgICAgaWYg
YTExeV9idXNfbGF1bmNoZXJfcGF0aDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYTExeV9i
dXNfbGF1bmNoZXIgPSBFeGVjdXRpdmUoKS5wb3BlbihbYTExeV9idXNfbGF1bmNoZXJfcGF0aF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj10
ZXN0X2Vudiwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkK
KyAgICAgICAgICAgIGExMXlfYnVzX2xhdW5jaGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQ6Cisg
ICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gbGF1bmNoIHRoZSBhY2Nlc3Np
YmlsaXR5IGJ1cyAoYWxyZWFkeSBsYXVuY2hlZD8pXG4iKQorICAgICAgICAgICAgc3lzLnN0ZGVy
ci5mbHVzaCgpCisKKyAgICBhMTF5X3JlZ2lzdHJ5ZF9ydW5uaW5nID0gRmFsc2UKKyAgICBhMTF5
X3JlZ2lzdHJ5ZF9wYXRoID0gbG9va3VwQXRzcGkyQmluYXJ5KCdhdC1zcGkyLXJlZ2lzdHJ5ZCcp
CisgICAgaWYgYTExeV9yZWdpc3RyeWRfcGF0aDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
YTExeV9yZWdpc3RyeWQgPSBFeGVjdXRpdmUoKS5wb3BlbihbIiVzL2F0LXNwaTItcmVnaXN0cnlk
IiAlIGF0c3BpMl9leGVjX3BhdGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbnY9dGVzdF9lbnYsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBhMTF5X3JlZ2lzdHJ5ZF9ydW5uaW5nID0g
VHJ1ZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWls
ZWQgdG8gcnVuIHRoZSBhY2Nlc3NpYmlsaXR5IHJlZ2lzdHJ5IChhbHJlYWR5IHJ1bm5pbmc/KVxu
IikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorCiAgICAgdHJ5OgogICAgICAgICBz
eXMuZXhpdChUZXN0UnVubmVyKCkucnVuKCkpCiAgICAgZmluYWxseToKKyAgICAgICAgaWYgYTEx
eV9yZWdpc3RyeWRfcnVubmluZzoKKyAgICAgICAgICAgIGExMXlfcmVnaXN0cnlkLmtpbGwoKQor
ICAgICAgICBpZiBhMTF5X2J1c19sYXVuY2hlZDoKKyAgICAgICAgICAgIGExMXlfYnVzX2xhdW5j
aGVyLmtpbGwoKQogICAgICAgICB4dmZiLmtpbGwoKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFj
IGIvY29uZmlndXJlLmFjCmluZGV4IDY0ZmZjNzkuLjQ0YTBlODUgMTAwNjQ0Ci0tLSBhL2NvbmZp
Z3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTI3MCw2ICsyNzAsNyBAQCBpZiB0ZXN0ICIk
d2l0aF9oaWxkb24iID0gInllcyI7IHRoZW4KIGZpCiAKICMgbWluaW11bSBiYXNlIGRlcGVuZGVu
Y2llcworQVRTUEkyX1JFUVVJUkVEX1ZFUlNJT049Mi4wLjAKIExJQlNPVVBfUkVRVUlSRURfVkVS
U0lPTj0yLjM3LjIuMQogQ0FJUk9fUkVRVUlSRURfVkVSU0lPTj0xLjEwCiBGT05UQ09ORklHX1JF
UVVJUkVEX1ZFUlNJT049Mi40CkBAIC0xMTI2LDYgKzExMjcsMTQgQEAgZmkKIEFDX1NVQlNUKEdU
SzJfQ0ZMQUdTKQogQUNfU1VCU1QoR1RLMl9MSUJTKQogCisjIFJlcXVpcmUgYXRzcGkyIG9ubHkg
d2hlbiBidWlsZGluZyBXZWJraXQyIChyZXF1aXJlZCBmb3IgdW5pdCB0ZXN0cykuCitpZiB0ZXN0
ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyI7IHRoZW4KKyAgIFBLR19DSEVDS19NT0RVTEVTKFtB
VFNQSTJdLAorICAgICAgICAgICAgICAgICAgICAgW2F0c3BpLTIgPj0gJEFUU1BJMl9SRVFVSVJF
RF9WRVJTSU9OXSkKKyAgIEFDX1NVQlNUKFtBVFNQSTJfQ0ZMQUdTXSkKKyAgIEFDX1NVQlNUKFtB
VFNQSTJfTElCU10pCitmaQorCiBHVEtfRE9DX0NIRUNLKFsxLjEwXSkKIAogIyBPUyBjb25kaXRp
b25hbHMKLS0gCjEuNy43LjMKCg==
</data>
<flag name="commit-queue"
          id="117364"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120955</attachid>
            <date>2012-01-03 08:56:28 -0800</date>
            <delta_ts>2012-01-09 10:34:25 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-01-03-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>57990</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiYzQxOWZmNmQyMWUxYzQ0M2Q1OTljOGJjZTNhNjJkNmZiYzdjMGNlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE5IE9jdCAyMDExIDIwOjA1OjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0wMyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQy
IHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBFeHBvc2UgdGhlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIHRoZSBtdWx0
aS1wcm9jZXNzCiAgICAgICAgYXJjaGl0ZWN0dXJlIG9mIFdLMiB0aHJvdWdoIEF0a1NvY2tldCBh
ZCBBdGtQbHVnLgoKICAgICAgICBNYWtlIHRoZSBXZWJWaWV3IHdpZGdldCByZXR1cm4gYW4gQXRr
U29ja2V0IHdoZW4gY2FsbGluZyB0bwogICAgICAgIGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUo
KS4KCiAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcy4KICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2Jhc2VfaW5pdCk6CiAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlR2V0QWNjZXNzaWJs
ZSk6CiAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOgogICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcDogQWRkZWQu
CiAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVdpZGdldEZpbmFsaXplKToKICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKToKICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlSW5pdGlhbGl6ZSk6CiAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZVJlZlN0YXRlU2V0KToKICAgICAgICAod2Via2l0V2ViVmll
d0Jhc2VBY2Nlc3NpYmxlR2V0SW5kZXhJblBhcmVudCk6CiAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19iYXNlX2FjY2Vzc2libGVfaW5pdCk6CiAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2Fj
Y2Vzc2libGVfY2xhc3NfaW5pdCk6CiAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZU5ldyk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vz
c2libGUuaDogQWRkZWQuCgogICAgICAgIE1ha2UgdGhlIFdlYlBhZ2UgY3JlYXRlIGFuIEF0a1Bs
dWcgb24gaXRzIGluaXRpYWxpemF0aW9uIGFuZAogICAgICAgIHNlbmRpbmcgdGhlIElEIG9mIHRo
YXQgcGx1ZyB0byB0aGUgVUkgcHJvY2Vzcywgc28gaXQgY2FuIGVtYmVkIHRoZQogICAgICAgIHBs
dWcgaW4gdGhlIHNvY2tldC4KCiAgICAgICAgQWxzbywgdGFrZSBjYXJlIG9mIGFsbCB0aGUgbmVl
ZGVkIHdyYXBwaW5nIGFyb3VuZCB0aGUgV2ViQ29yZSdzCiAgICAgICAgYWNjZXNzaWJpbGl0eSBv
YmplY3RzLCBleHBvc2luZyB0aGVtIGluIHRoZSBVSSBwcm9jZXNzJ3MKICAgICAgICBhY2Nlc3Np
YmlsaXR5IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tldC1wbHVnIGNvbm5lY3Rpb24uCgog
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgogICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CiAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluOgogICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJv
eHlHdGsuY3BwOgogICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YmluZEFjY2Vzc2liaWxp
dHlUcmVlKToKICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwOgogICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZEZpbmlzaExvYWQpOgogICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwOgogICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgogICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHA6IEFkZGVk
LgogICAgICAgIChhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIpOgogICAgICAgICh3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEluaXRpYWxpemUpOgogICAgICAgICh3ZWJQYWdlQWNjZXNz
aWJpbGl0eU9iamVjdEdldEluZGV4SW5QYXJlbnQpOgogICAgICAgICh3ZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdEdldE5DaGlsZHJlbik6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2Jq
ZWN0UmVmQ2hpbGQpOgogICAgICAgICh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9pbml0
KToKICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfY2xhc3NfaW5pdCk6CiAg
ICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0TmV3KToKICAgICAgICAod2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3RSZWZyZXNoKToKICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaDogQWRkZWQuCiAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOgogICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRl
QWNjZXNzaWJpbGl0eVRyZWUpOgoKICAgICAgICBOZXcgdW5pdCB0ZXN0IGZvciBjaGVja2luZyBh
Y2Nlc3NpYmlsaXR5IHN1cHBvcnQgaW4gV0syR1RLLgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcDogQWRkZWQuCiAgICAgICAgKGxv
YWRGaW5pc2hlZENhbGxiYWNrKTogTm90aWZ5IHRoZSBwYXJlbnQgcHJvY2VzcyAodGhlIHRlc3Qp
CiAgICAgICAgd2hlbiByZWFkeS4KICAgICAgICAobWFpbik6CiAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcDogQWRkZWQuCiAgICAgICAgKHJ1blRl
c3RTZXJ2ZXIpOgogICAgICAgIChzdG9wVGVzdFNlcnZlcik6CiAgICAgICAgKHNpZ0Fib3J0SGFu
ZGxlcik6CiAgICAgICAgKGNoZWNrQXRzcGlBY2Nlc3NpYmxlKToKICAgICAgICAoZmluZFRlc3RT
ZXJ2ZXJBcHBsaWNhdGlvbik6CiAgICAgICAgKHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KToKICAg
ICAgICAoYmVmb3JlQWxsKToKICAgICAgICAoYWZ0ZXJBbGwpOgoKMjAxMi0wMS0wMyBNYXJpbyBT
YW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAgICBbR1RLXSBFeHBvc2Ug
YWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFU
cwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgRW5zdXJlIHRoZSBh
Y2Nlc3NpYmlsaXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcKICAg
ICAgICB0aGUgdW5pdCB0ZXN0cywgb3RoZXJ3aXNlIFdLMidzIGFjY2Vzc2liaWxpdHkgdGVzdHMg
d29uJ3Qgd29yay4KCiAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6CiAgICAgICAgKFRl
c3RSdW5uZXIucnVuKTogSW5pdGlhbGl6ZSB0aGUgYWNjZXNzaWJpbGl0eSBpbmZyYXN0cnVjdHVy
ZS4KICAgICAgICAobG9va3VwQXRzcGkyQmluYXJ5KTogTmV3LiBMb29rcyBmb3IgdGhlIGRpcmVj
dG9yeSB3aGVyZSBhdC1zcGkyJ3MKICAgICAgICBzdHVmZiBpcyBsb2NhdGVkIChsaWtlIGF0LXNw
aS1idXMtbGF1bmNoZXIgYW5kIGF0LXNwaTItcmVnaXN0cnlkKS4KCjIwMTItMDEtMDMgTWFyaW8g
U2FuY2hleiBQcmFkYSA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gRXhwb3Nl
IGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNlZCBB
VHMKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1ODkK
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIE5ldyBvcHRpb25h
bCBkZXBlbmRlbmN5IGZvciBXSzIncyBhY2Nlc3NpYmlsaXR5IHVuaXQgdGVzdDogQVQtU1BJMi4K
CiAgICAgICAgKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBBVC1TUEkyIHdoZW4gYnVpbGRpbmcg
d2l0aCBXSzIgc3VwcG9ydC4KLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTEgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDc4ICsrKysrKysrCiBTb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCAgICAgICAgfCAgIDMxICsrKwogLi4uL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcCAgICAgICAgfCAgMTMxICsrKysrKysr
KysrKysKIC4uLi9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oICAgICAgICAg
IHwgICA2MyArKysrKysKIC4uLi9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVy
LmNwcCAgICAgIHwgICA1OSArKysrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtIHwgICAyMCArKwogLi4uL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEFjY2Vzc2liaWxpdHkuY3BwICAgICAgfCAgMjAwICsrKysrKysrKysrKysrKysrKysrCiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggICAgICAgICAgICB8ICAgIDkgKwog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAgfCAgICAz
ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCAgIHwg
ICAgNSArCiAuLi4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwICAgICAg
ICB8ICAgIDUgKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
ICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmggICAgICAgIHwgICAxMCArLQogLi4uL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0R3RrLmNwcCAgfCAgMTQyICsrKysrKysrKysrKysrCiAuLi4vV2ViUGFnZS9ndGsvV2Vi
UGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCAgICB8ICAgNjQgKysrKysrKwogLi4uL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCAgfCAgIDE5ICsrLQogVG9v
bHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE1ICsr
CiBUb29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
NTAgKysrKystCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMTUgKysKIDIxIGZpbGVzIGNoYW5nZWQsIDkzMiBpbnNlcnRpb25zKCspLCA0IGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vz
c2libGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNj
ZXNzaWJpbGl0eU9iamVjdEd0ay5oCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IDU1NmZhMDUuLmU4NjE2ZGQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMi0wNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAg
PG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRXhwb3NlIGFjY2Vzc2liaWxp
dHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNlZCBBVHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IG9wdGlvbmFsIGRlcGVu
ZGVuY3kgZm9yIFdLMidzIGFjY2Vzc2liaWxpdHkgdW5pdCB0ZXN0OiBBVC1TUEkyLgorCisgICAg
ICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgQVQtU1BJMiB3aGVuIGJ1aWxkaW5nIHdpdGgg
V0syIHN1cHBvcnQuCisKIDIwMTItMDEtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBhIHdheSB0byBjaGFuZ2Ugd2ViIHZp
ZXcgc2V0dGluZ3MgaW4gTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAwYWE2ZWM0Li5mYjIwZmZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEgQEAKKzIwMTItMDEtMDMgIE1hcmlvIFNhbmNoZXog
UHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nl
c3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSB0aGUg
YWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKKyAgICAgICAgYXJj
aGl0ZWN0dXJlIG9mIFdLMiB0aHJvdWdoIEF0a1NvY2tldCBhZCBBdGtQbHVnLgorCisgICAgICAg
IE1ha2UgdGhlIFdlYlZpZXcgd2lkZ2V0IHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5n
IHRvCisgICAgICAgIGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoKS4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2lu
aXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKToKKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RmluYWxpemUpOgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKToKKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZUluaXRpYWxpemUpOgorICAgICAgICAod2Via2l0V2ViVmll
d0Jhc2VBY2Nlc3NpYmxlUmVmU3RhdGVTZXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlR2V0SW5kZXhJblBhcmVudCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9hY2Nlc3NpYmxlX2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNz
aWJsZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5l
dyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlLmg6IEFkZGVkLgorCisgICAgICAgIE1ha2UgdGhlIFdlYlBhZ2UgY3JlYXRlIGFuIEF0a1Bs
dWcgb24gaXRzIGluaXRpYWxpemF0aW9uIGFuZAorICAgICAgICBzZW5kaW5nIHRoZSBJRCBvZiB0
aGF0IHBsdWcgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIGl0IGNhbiBlbWJlZCB0aGUKKyAgICAgICAg
cGx1ZyBpbiB0aGUgc29ja2V0LgorCisgICAgICAgIEFsc28sIHRha2UgY2FyZSBvZiBhbGwgdGhl
IG5lZWRlZCB3cmFwcGluZyBhcm91bmQgdGhlIFdlYkNvcmUncworICAgICAgICBhY2Nlc3NpYmls
aXR5IG9iamVjdHMsIGV4cG9zaW5nIHRoZW0gaW4gdGhlIFVJIHByb2Nlc3MncworICAgICAgICBh
Y2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tldC1wbHVnIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3Rr
L1dlYlBhZ2VQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Ymlu
ZEFjY2Vzc2liaWxpdHlUcmVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2Jq
ZWN0R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBw
ZXIpOgorICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RJbml0aWFsaXplKToKKyAg
ICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5kZXhJblBhcmVudCk6CisgICAg
ICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbik6CisgICAgICAgICh3
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZkNoaWxkKToKKyAgICAgICAgKHdlYl9wYWdlX2Fj
Y2Vzc2liaWxpdHlfb2JqZWN0X2luaXQpOgorICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0
eV9vYmplY3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dE5ldyk6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZnJlc2gpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RH
dGsuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlQWNjZXNzaWJpbGl0eVRyZWUpOgorCisgICAg
ICAgIE5ldyB1bml0IHRlc3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBpbiBX
SzJHVEsuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5
VGVzdFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAobG9hZEZpbmlzaGVkQ2FsbGJhY2spOiBO
b3RpZnkgdGhlIHBhcmVudCBwcm9jZXNzICh0aGUgdGVzdCkKKyAgICAgICAgd2hlbiByZWFkeS4K
KyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChydW5UZXN0U2VydmVyKToKKyAgICAg
ICAgKHN0b3BUZXN0U2VydmVyKToKKyAgICAgICAgKHNpZ0Fib3J0SGFuZGxlcik6CisgICAgICAg
IChjaGVja0F0c3BpQWNjZXNzaWJsZSk6CisgICAgICAgIChmaW5kVGVzdFNlcnZlckFwcGxpY2F0
aW9uKToKKyAgICAgICAgKHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KToKKyAgICAgICAgKGJlZm9y
ZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisKIDIwMTItMDEtMDMgIFJhZmFlbCBCcmFuZGFv
ICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBbUXRdW1dLMl0gdHN0X2Zh
dkljb25Mb2FkLnFtbCBjcmFzaGVzIG9uIGRlYnVnIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5k
ZXggNmU5NGI0Ni4uZDg2MWJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTU0OSw2ICs1NDks
OCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRH
VEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmggXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9w
ZXJ0aWVzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2lu
ZG93UHJvcGVydGllcy5oIFwKQEAgLTg5NCw2ICs4OTYsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJL
SVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xh
X1NPVQogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3Rvckd0
ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3RHdGsuaCBcCisJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAJU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXgg
YzM4NzkwNS4uZjFjMzhhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkV2ZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkR3RrLmg+CkBAIC02OCw2
ICs2OSw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBDU3RyaW5n
IHRvb2x0aXBUZXh0OwogICAgIEd0a0RyYWdBbmREcm9wSGVscGVyIGRyYWdBbmREcm9wSGVscGVy
OwogICAgIERyYWdJY29uIGRyYWdJY29uOworICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3Np
YmxlOwogfTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFzZSwgd2Via2l0X3dlYl92
aWV3X2Jhc2UsIEdUS19UWVBFX0NPTlRBSU5FUikKQEAgLTMzNiw2ICszMzgsMzQgQEAgc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtEcmFnQ29udGV4dCoKICAgICBnZGtfZHJhZ19zdGF0dXMoY29udGV4dCwgZHJhZ09wZXJh
dGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihvcGVyYXRpb24pLCB0aW1lKTsKIH0KIAorc3RhdGlj
IEF0a09iamVjdCogd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKEd0a1dpZGdldCAqd2lk
Z2V0KQoreworICAgIC8vIElmIHRoZSBzb2NrZXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFu
ZCBlbWJlZGRlZCBhIHBsdWcgSUQsIHJldHVybiBpdC4KKyAgICBXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OworICAgIGlm
IChwcml2LT5hY2Nlc3NpYmxlICYmIGF0a19zb2NrZXRfaXNfb2NjdXBpZWQoQVRLX1NPQ0tFVChw
cml2LT5hY2Nlc3NpYmxlLmdldCgpKSkpCisgICAgICAgIHJldHVybiBwcml2LT5hY2Nlc3NpYmxl
LmdldCgpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhY2Nlc3NpYmxlIG9iamVjdCBhbmQgYXNzb2Np
YXRlIGl0IHRvIHRoZSB3aWRnZXQuCisgICAgaWYgKCFwcml2LT5hY2Nlc3NpYmxlKSB7CisgICAg
ICAgIHByaXYtPmFjY2Vzc2libGUgPSBhZG9wdEdSZWYoQVRLX09CSkVDVCh3ZWJraXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVOZXcod2lkZ2V0KSkpOworCisgICAgICAgIC8vIFNldCB0aGUgcGFyZW50
IG5vdCB0byBicmVhayBib3R0b20tdXAgbmF2aWdhdGlvbi4KKyAgICAgICAgR3RrV2lkZ2V0KiBw
YXJlbnRXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQod2lkZ2V0KTsKKyAgICAgICAgQXRr
T2JqZWN0KiBheFBhcmVudCA9IHBhcmVudFdpZGdldCA/IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2li
bGUocGFyZW50V2lkZ2V0KSA6IDA7CisgICAgICAgIGlmIChheFBhcmVudCkKKyAgICAgICAgICAg
IGF0a19vYmplY3Rfc2V0X3BhcmVudChwcml2LT5hY2Nlc3NpYmxlLmdldCgpLCBheFBhcmVudCk7
CisgICAgfQorCisgICAgLy8gVHJ5IHRvIGVtYmVkIHRoZSBwbHVnIGluIHRoZSBzb2NrZXQsIGlm
IHBvc3NzaWJsZS4KKyAgICBTdHJpbmcgcGx1Z0lEID0gcHJpdi0+cGFnZVByb3h5LT5nZXRBY2Nl
c3NpYmlsaXR5UGx1Z0lEKCk7CisgICAgaWYgKHBsdWdJRC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIHByaXYtPmFjY2Vzc2libGUuZ2V0KCk7CisKKyAgICBhdGtfc29ja2V0X2VtYmVkKEFUS19T
T0NLRVQocHJpdi0+YWNjZXNzaWJsZS5nZXQoKSksIGNvbnN0X2Nhc3Q8Z2NoYXIqPihwbHVnSUQu
dXRmOCgpLmRhdGEoKSkpOworCisgICAgcmV0dXJuIHByaXYtPmFjY2Vzc2libGUuZ2V0KCk7Cit9
CisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rpb24oR3RrV2lkZ2V0
KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3VpbnQg
dGltZSkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VC
X1ZJRVdfQkFTRSh3aWRnZXQpOwpAQCAtNDAwLDYgKzQzMCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0
V2ViVmllCiAgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVhdmUgPSB3ZWJraXRXZWJWaWV3QmFzZURy
YWdMZWF2ZTsKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kcm9wID0gd2Via2l0V2ViVmlld0Jhc2VE
cmFnRHJvcDsKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX3JlY2VpdmVkID0gd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkOworICAgIHdpZGdldENsYXNzLT5nZXRfYWNjZXNzaWJs
ZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0QWNjZXNzaWJsZTsKIAogICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7CiAg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlRmluYWxpemU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zZTUxZTFhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAKQEAgLTAsMCArMSwx
MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZS5oIgorCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUgeworICAg
IEd0a1dpZGdldCogd2lkZ2V0OworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGUsIHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGUsIEFUS19UWVBFX1NP
Q0tFVCkKKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlRmluYWxpemUo
R09iamVjdCogZ29iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIGFj
Y2Vzc2libGUgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKGdvYmplY3QpOworICAg
IGFjY2Vzc2libGUtPnByaXYtPn5XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZShnb2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJL
aXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIGFjY2Vzc2libGUpCit7CisgICAgYWNjZXNzaWJsZS0+
cHJpdi0+d2lkZ2V0ID0gMDsKKyAgICBhdGtfb2JqZWN0X25vdGlmeV9zdGF0ZV9jaGFuZ2UoQVRL
X09CSkVDVChhY2Nlc3NpYmxlKSwgQVRLX1NUQVRFX0RFRlVOQ1QsIFRSVUUpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVJbml0aWFsaXplKEF0a09iamVjdCog
YXRrT2JqZWN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChBVEtfT0JKRUNUX0NMQVNTKHdl
YmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+aW5pdGlhbGl6ZSkK
KyAgICAgICAgQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxl
X3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUoYXRrT2JqZWN0LCBkYXRhKTsKKworICAgIGlmIChk
YXRhICYmIEdUS19JU19XSURHRVQoZGF0YSkpIHsKKyAgICAgICAgV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlKiBhY2Nlc3NpYmxlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRShh
dGtPYmplY3QpOworICAgICAgICBhY2Nlc3NpYmxlLT5wcml2LT53aWRnZXQgPSBHVEtfV0lER0VU
KGRhdGEpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIoYWNjZXNzaWJsZS0+cHJp
di0+d2lkZ2V0LCAiZGVzdHJveSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpLCBhdGtP
YmplY3QpOworICAgIH0KKworICAgIGF0a19vYmplY3Rfc2V0X3JvbGUoYXRrT2JqZWN0LCBBVEtf
Uk9MRV9GSUxMRVIpOworfQorCitzdGF0aWMgQXRrU3RhdGVTZXQqIHdlYmtpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZVJlZlN0YXRlU2V0KEF0a09iamVjdCAqYXRrT2JqZWN0KQoreworICAgIFdlYktp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZSogYWNjZXNzaWJsZSA9IFdFQktJVF9XRUJfVklFV19CQVNF
X0FDQ0VTU0lCTEUoYXRrT2JqZWN0KTsKKworICAgIEF0a1N0YXRlU2V0KiBzdGF0ZV9zZXQ7Cisg
ICAgaWYgKGFjY2Vzc2libGUtPnByaXYtPndpZGdldCkgeworICAgICAgICAvLyBVc2UgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIEF0a1NvY2tldCBpZiB0aGUgd2lkZ2V0IGlzIHN0aWxsIGFsaXZlLgor
ICAgICAgICBzdGF0ZV9zZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNl
X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+cmVmX3N0YXRlX3NldChhdGtPYmplY3QpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSB3aWRnZXQgaXMgbm8gbG9uZ2VyIGFsaXZlLCBz
YXZlIHNvbWUgcmVtb3RlIGNhbGxzCisgICAgICAgIC8vIChiZWNhdXNlIG9mIEF0a1NvY2tldCdz
IGltcGxlbWVudGF0aW9uIG9mIHJlZl9zdGF0ZV9zZXQoKSkKKyAgICAgICAgLy8gYW5kIGp1c3Qg
cmV0dXJuIHRoYXQgdGhpcyBBdGtPYmplY3QgaXMgZGVmdW5jdC4KKyAgICAgICAgc3RhdGVfc2V0
ID0gYXRrX3N0YXRlX3NldF9uZXcoKTsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUo
c3RhdGVfc2V0LCBBVEtfU1RBVEVfREVGVU5DVCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRl
X3NldDsKK30KKworc3RhdGljIGdpbnQgd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlR2V0SW5k
ZXhJblBhcmVudChBdGtPYmplY3QgKmF0a09iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChBVEtfSVNfT0JKRUNUKGF0a09iamVjdCksIC0xKTsKKworICAgIEF0a09iamVjdCogYXRr
UGFyZW50ID0gYXRrX29iamVjdF9nZXRfcGFyZW50KGF0a09iamVjdCk7CisgICAgaWYgKCFhdGtQ
YXJlbnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGd1aW50IGNvdW50ID0gYXRrX29iamVj
dF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGF0a1BhcmVudCk7CisgICAgZm9yIChndWludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXRrUGFyZW50LCBpKTsKKyAgICAgICAgYm9vbCBj
aGlsZElzT2JqZWN0ID0gY2hpbGQgPT0gYXRrT2JqZWN0OworICAgICAgICBnX29iamVjdF91bnJl
ZihjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZElzT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBh
Y2Nlc3NpYmxlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUqIHBy
aXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoYWNjZXNzaWJsZSwgV0VCS0lUX1RZUEVf
V0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2
YXRlKTsKKyAgICBhY2Nlc3NpYmxlLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQWNj
ZXNzaWJsZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlRmluYWxpemU7CisKKyAgICAvLyBObyBuZWVkIHRvIGlt
cGxlbWVudCBnZXRfbl9jaGlsZHJlbigpIGFuZCByZWZfY2hpbGQoKSBoZXJlCisgICAgLy8gc2lu
Y2UgdGhpcyBpcyBhIHN1YmNsYXNzIG9mIEF0a1NvY2tldCBhbmQgYWxsIHRoZSBsb2dpYyByZWxh
dGVkCisgICAgLy8gdG8gdGhvc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQgYnkgdGhl
IEFUSyBicmlkZ2UuCisgICAgQXRrT2JqZWN0Q2xhc3MqIGF0a09iamVjdENsYXNzID0gQVRLX09C
SkVDVF9DTEFTUyhrbGFzcyk7CisgICAgYXRrT2JqZWN0Q2xhc3MtPmluaXRpYWxpemUgPSB3ZWJr
aXRXZWJWaWV3QmFzZUFjY2Vzc2libGVJbml0aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5y
ZWZfc3RhdGVfc2V0ID0gd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUmVmU3RhdGVTZXQ7Cisg
ICAgYXRrT2JqZWN0Q2xhc3MtPmdldF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSkpOwor
fQorCitXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNz
aWJsZU5ldyhHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IHN0
YXRpY19jYXN0PEF0a09iamVjdCo+KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFV19C
QVNFX0FDQ0VTU0lCTEUsIDApKTsKKyAgICBhdGtfb2JqZWN0X2luaXRpYWxpemUob2JqZWN0LCB3
aWRnZXQpOworICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKG9iamVj
dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjY3ODliZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlX2gKKyNkZWZpbmUgV2ViS2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlX2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUgICAg
ICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUob2JqZWN0KSAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3QpLCBXRUJLSVRfVFlQRV9XRUJfVklF
V19CQVNFX0FDQ0VTU0lCTEUsIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSkpCisjZGVmaW5l
IFdFQktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEVfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUND
RVNTSUJMRSwgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfSVNfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKG9iamVjdCkgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NF
U1NJQkxFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRV9DTEFT
UyhrbGFzcykgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVf
V0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0JBU0Vf
QUNDRVNTSUJMRV9HRVRfQ0xBU1Mob2JqZWN0KSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqZWN0KSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBXZWJLaXRXZWJW
aWV3QmFzZUFjY2Vzc2libGVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGUgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzIFdlYktpdFdlYlZpZXdCYXNlQWNj
ZXNzaWJsZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZVByaXZhdGUgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZTsKKworCitzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSB7CisgICAgQXRrU29ja2V0IHBhcmVudDsKKyAg
ICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRl
KiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVDbGFzcyB7
CisgICAgQXRrU29ja2V0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJraXRfd2Vi
X3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2dldF90eXBlKCk7CisKK1dlYktpdFdlYlZpZXdCYXNlQWNj
ZXNzaWJsZSogd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KEd0a1dpZGdldCopOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2li
aWxpdHlUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ODAwZjdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dl
YmtpdDIuaD4KKworc3RhdGljIGdib29sZWFuIGxvYWRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdl
YkxvYWRlckNsaWVudCosIFdlYktpdFdlYlZpZXcqLCBncG9pbnRlcikKK3sKKyAgICAvLyBTZW5k
IGEgbWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3MgdGVsbGluZyB3ZSdyZSByZWFkeS4KKyAg
ICBnX3ByaW50KCJPSyIpOworICAgIHJldHVybiBGQUxTRTsKK30KKworaW50CittYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBib3RoIEdBSUwgYW5k
IHRoZSBBVEsgYnJpZGdlIGFyZSBsb2FkZWQuCisgICAgZ19zZXRlbnYoIkdUS19NT0RVTEVTIiwg
ImdhaWw6YXRrLWJyaWRnZSIsIFRSVUUpOworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsK
KworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+IgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAg
IDxoMT5UaGlzIGlzIGEgdGVzdDwvaDE+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBzb21lIHBsYWluIHRleHQuPC9wPiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICA8cD5UaGlzIHBhcmFncmFwaCBjb250YWlu
cyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+YSBsaW5rPC9hPiBpbiB0aGUg
bWlkZGxlLjwvcD4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8L2JvZHk+Igor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCk7CisKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3df
bmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93
X2FsbCh3aW5kb3cpOworCisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBsb2FkZXJDbGllbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQod2ViVmlldyk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChsb2FkZXJDbGllbnQsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2Fk
RmluaXNoZWRDYWxsYmFjayksIDApOworCisgICAgZ3RrX21haW4oKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5k
ZXggZDkxMmI2NS4uMTc1OWQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiwxMyBAQCBURVNUX1BS
T0dTICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdAog
CiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQorCitpZiBIQVZFX0FUU1BJMgorVEVT
VF9QUk9HUyArPSBQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxp
dHkKKworbm9pbnN0X1BST0dSQU1TICs9IFByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9BY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlcgorZW5kaWYKKwogd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKIAkt
RFdFQktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1z
XCIgXAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKQEAgLTc2LDMgKzgzLDE2IEBAIFBy
b2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2NwcGZsYWdzCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tG
b3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
bGRmbGFncykKIAoraWYgSEFWRV9BVFNQSTIKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19BY2Nl
c3NpYmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorUHJvZ3JhbXNfV2Vi
S2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQy
X3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlU
ZXN0U2VydmVyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5X1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxh
Z3MpICQoQVRTUEkyX0NGTEFHUykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0
QWNjZXNzaWJpbGl0eV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChBVFNQSTJfTElC
UykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9MREZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCitlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjBkZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHku
Y3BwCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1
ZGUgIldlYlZpZXdUZXN0LmgiCisKKy8vIFRoZSBsaWJhdHNwaSBoZWFkZXJzIGRvbid0IHVzZSBH
X0JFR0lOX0RFQ0xTCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlIDxhdHNwaS9hdHNwaS5oPgorfQor
I2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnbGliLmg+
CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBh
cHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCitzdGF0aWMgY29uc3QgY2hh
cioga1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIjsKKworLy8g
TWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5n
IGl0Lgorc3RhdGljIGNvbnN0IGludCBrTWF4V2FpdEZvckNoaWxkID0gNTsKKworLy8gVGhlIFBJ
RCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRl
ZC4KK3N0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQaWQgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4g
cnVuVGVzdFNlcnZlcigpCit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRo
ZSBzZXJ2ZXIgcHJvY2Vzcy4KKyAgICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVp
bGRfZmlsZW5hbWUoV0VCS0lUX0VYRUNfUEFUSCwgIldlYktpdDJBUElUZXN0cyIsIGtUZXN0U2Vy
dmVyQXBwTmFtZSwgTlVMTCkpOworCisgICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07CisgICAg
dGVzdFNlcnZlckFyZ3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKKyAgICB0ZXN0U2VydmVy
QXJndlsxXSA9IDA7CisKKyAgICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRv
dXQgZmlsZSBkZXNjcmlwdG9yIHRvIHNldCBhCisgICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVs
LCBzbyB3ZSBrbm93IHdoZW4gaXQncyByZWFkeS4KKyAgICBpbnQgY2hpbGRfc3Rkb3V0ID0gMDsK
KyAgICBpZiAoIWdfc3Bhd25fYXN5bmNfd2l0aF9waXBlcygwLCB0ZXN0U2VydmVyQXJndiwgMCwg
c3RhdGljX2Nhc3Q8R1NwYXduRmxhZ3M+KDApLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZrQ2hpbGRQcm9jZXNzUGlkLCAwLCAmY2hpbGRfc3Rkb3V0LCAwLCAwKSkK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gQ2hhbmdlIHRoZSBjaGlsZCdzIHN0ZG91
dCBmaWxlIGRlc2NyaXB0b3IgdG8gYmUgbm9uLWJsb2NraW5nLgorICAgIGlmIChmY250bChjaGls
ZF9zdGRvdXQsIEZfU0VURkwsIGZjbnRsKGNoaWxkX3N0ZG91dCwgRl9HRVRGTCkgfCBPX05PTkJM
T0NLKSA9PSAtMSkgeworICAgICAgICBwZXJyb3IoIkVycm9yIGNhbGxpbmcgZmNudGwgb3ZlciBj
aGlsZCdzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgIH0KKworICAgIC8vIFdhaXQgZm9yIGNoaWxkIHRvIHNheSBpdCdzIHJlYWR5IHRpbGwga01h
eFdhaXRGb3JDaGlsZC4KKyAgICBjaGFyIG1zZ1syXTsKKyAgICBpbnQgdHJpZXNfY291bnQgPSAw
OworICAgIHdoaWxlICh0cmllc19jb3VudCA8IGtNYXhXYWl0Rm9yQ2hpbGQgJiYgcmVhZChjaGls
ZF9zdGRvdXQsICZtc2csIDIpID09IC0xKSB7CisgICAgICAgIC8vIFdlIHVzZSB0aGUgc2xlZXAg
YmVjYXVzZSB3ZSBhY3R1YWxseSBuZWVkIHRvIGJsb2NrCisgICAgICAgIC8vIGV4ZWN1dGlvbiwg
dG8gYXZvaWQgdGhlIHRlc3QgZmluaXNoaW5nIGJlZm9yZSBoYXZpbmcKKyAgICAgICAgLy8gaW5z
cGVjdGVkIHRoZSBzZXJ2ZXIgYXBwbGljYXRpb24sIHdoaWNoIGlzIHdoYXQgd291bGQKKyAgICAg
ICAgLy8gaGFwcGVuIGlmIHdlIHVzZWQgdGhlIG1haW5sb29wIHRvIHJlYWQgYXN5bmNocm9ub3Vz
bHkuCisgICAgICAgIHNsZWVwKDEpOworICAgICAgICB0cmllc19jb3VudCsrOworICAgIH0KKwor
ICAgIC8vIFJldHVybiBUUlVFIGlmIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0
J3MgcmVhZHkuCisgICAgcmV0dXJuIG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsKK30K
Kworc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIEEgUElEIHNob3VsZCBi
ZSBncmVhdGVyIHRoYW4gemVyby4KKyAgICBnX2Fzc2VydChrQ2hpbGRQcm9jZXNzUGlkID4gMCk7
CisKKyAgICBnX3NwYXduX2Nsb3NlX3BpZChrQ2hpbGRQcm9jZXNzUGlkKTsKKyAgICBraWxsKGtD
aGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOworICAgIGtDaGlsZFByb2Nlc3NQaWQgPSAwOworfQor
CitzdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRsZXIoaW50IHNpZ051bSkKK3sKKyAgICBpZiAoa0No
aWxkUHJvY2Vzc1BpZCA+IDApCisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3N0YXRp
YyB2b2lkIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNzaWJsZSwg
Y29uc3QgY2hhciogdGFyZ2V0TmFtZSwgQXRzcGlSb2xlIHRhcmdldFJvbGUpCit7CisgICAgZ19h
c3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShhY2Nlc3NpYmxlKSk7CisKKyAgICBHT3duUHRyPGNo
YXI+IG5hbWUoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRhcmdldE5hbWUsID09LCBuYW1lLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGFyZ2V0Um9sZSwgPT0sIGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNz
aWJsZSwgMCkpOworfQorCitzdGF0aWMgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZpbmRUZXN0
U2VydmVyQXBwbGljYXRpb24oKQoreworICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMgc3VwcG9y
dGVkIGJ5IEFUU1BJIGF0IHRoZSBtb21lbnQuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+
IGRlc2t0b3AgPSBhdHNwaV9nZXRfZGVza3RvcCgwKTsKKworICAgIC8vIExvb2sgZm9yIHRoZSBz
ZXJ2ZXIgYXBwbGljYXRpb24gaW4gdGhlIGxpc3Qgb2YgYXBwcy4KKyAgICBHUmVmUHRyPEF0c3Bp
QWNjZXNzaWJsZT4gY3VycmVudDsKKyAgICBpbnQgY2hpbGRDb3VudCA9IGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2NvdW50KGRlc2t0b3AuZ2V0KCksIDApOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIGN1cnJlbnQgPSBhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLmdldCgpLCBpLCAwKTsKKyAgICAgICAgaWYg
KCFnX3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJyZW50LmdldCgpLCAwKSwg
a1Rlc3RTZXJ2ZXJBcHBOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNo
eShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUaGUgdGVzdCBz
ZXJ2ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgR1JlZlB0cjxB
dHNwaUFjY2Vzc2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5kVGVzdFNlcnZlckFwcGxpY2F0aW9u
KCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0U2VydmVyQXBwLmdldCgp
KSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNlcnZlckFwcC5nZXQoKSwgIkFjY2Vz
c2liaWxpdHlUZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBMSUNBVElPTik7CisKKyAgICAvLyBU
aGUgbWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAg
R1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJlbnQgPSB0ZXN0U2VydmVyQXBwOwor
ICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBn
X2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNo
ZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRlJB
TUUpOworCisgICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJv
Y2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hp
bGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50Lmdl
dCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGls
ZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwg
IiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKKworICAgIC8vIFRoZSBXZWJQYWdlJ3MgYWNjZXNzaWJp
bGl0eSBvYmplY3QgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENo
aWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2lu
ZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FD
Q0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUo
Y3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOworCisgICAgLy8gSFRN
TCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBj
dXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2Fj
Y2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOwor
ICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisK
KyAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAg
ICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDAp
OworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7
CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElf
Uk9MRV9ET0NVTUVOVF9GUkFNRSk7CisKKyAgICAvLyBIVE1MIEgxJ3MgYWNjZXNzaWJsZSBlbGVt
ZW50IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAg
ICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJy
ZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxF
KGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRD
aGlsZC5nZXQoKSwgIlRoaXMgaXMgYSB0ZXN0IiwgQVRTUElfUk9MRV9IRUFESU5HKTsKKworICAg
IC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2Vz
cykuCisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMSwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShj
dXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7CisKKyAgICAvLyBI
VE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4K
KyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChj
dXJyZW50UGFyZW50LmdldCgpLCAyLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJ
QkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJl
bnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKKworICAgIC8vIEhUTUwg
bGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJl
bnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3Nl
cnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0
c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJhIGxpbmsiLCBBVFNQSV9ST0xFX0xJ
TkspOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRs
ZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcworICAgIC8vIGlmIHRo
ZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCisgICAgc2ln
bmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7CisKKyAgICBpZiAocnVuVGVzdFNlcnZlcigp
KQorICAgICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImF0c3Bp
LWJhc2ljLWhpZXJhcmNoeSIsIHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KTsKK30KKwordm9pZCBh
ZnRlckFsbCgpCit7CisgICAgLy8gRW5zdXJlIHdlIHN0b3AgdGhlIHNlcnZlci4KKyAgICBzdG9w
VGVzdFNlcnZlcigpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmlu
ZGV4IGNlZTc1MTQuLjdjYjU4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKQEAgLTU1NSw2ICs1NTUsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U21hcnRJbnNl
cnREZWxldGVFbmFibGVkKGJvb2wpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisgICAg
U3RyaW5nIGdldEFjY2Vzc2liaWxpdHlQbHVnSUQoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc2li
aWxpdHlQbHVnSUQ7IH0KKyNlbmRpZgorCiAgICAgdm9pZCBiZWdpblByaW50aW5nKFdlYkZyYW1l
UHJveHkqLCBjb25zdCBQcmludEluZm8mKTsKICAgICB2b2lkIGVuZFByaW50aW5nKCk7CiAgICAg
dm9pZCBjb21wdXRlUGFnZXNGb3JQcmludGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJ
bmZvJiwgUGFzc1JlZlB0cjxDb21wdXRlZFBhZ2VzQ2FsbGJhY2s+KTsKQEAgLTczMyw2ICs3Mzcs
NyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgZ2V0RWRpdG9yQ29t
bWFuZHNGb3JLZXlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpOwor
ICAgIHZvaWQgYmluZEFjY2Vzc2liaWxpdHlUcmVlKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAj
aWYgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChW
ZWN0b3I8U3RyaW5nPiYpOwpAQCAtOTU5LDYgKzk2NCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RL
KQorICAgIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlQbHVnSUQ7CisjZW5kaWYKKwogICAgIGludDY0
X3QgbV9zcGVsbERvY3VtZW50VGFnOwogICAgIGJvb2wgbV9oYXNTcGVsbERvY3VtZW50VGFnOwog
ICAgIHVuc2lnbmVkIG1fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5k
ZXggMGJmMWZiZC4uM2QwMzNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xNDMsNiArMTQzLDkgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZVByb3h5IHsKICNpZiBQTEFURk9STShHVEspCiAgICAgIyBTdXBwb3J0IGZvciBHVEsr
IHBsYXRmb3JtIGtleWJpbmRpbmdzCiAgICAgR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChB
dG9taWNTdHJpbmcgZXZlbnRUeXBlKSAtPiAoVmVjdG9yPFdURjo6U3RyaW5nPiBjb21tYW5kc0xp
c3QpCisKKyAgICAjIFN1cHBvcnQgZm9yIGNvbm5lY3RpbmcgdGhlIEFjY2Vzc2liaWxpdHkgd29y
bGRzIG9mIHRoZSBVSSBhbmQgdGhlIFdlYiBwcm9jZXNzZXMKKyAgICBCaW5kQWNjZXNzaWJpbGl0
eVRyZWUoV1RGOjpTdHJpbmcgcGx1Z0lEKQogI2VuZGlmCiAKICAgICAjIEJhY2tGb3J3YXJkIG1l
c3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQ
cm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0
ay5jcHAKaW5kZXggMTEyN2RkZS4uZjZiMzAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtNDksNiArNDksMTEgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFYKICAgICBtX3BhZ2VDbGllbnQtPmdldEVkaXRvckNvbW1hbmRzRm9y
S2V5RXZlbnQobV9rZXlFdmVudFF1ZXVlLmZpcnN0KCksIGV2ZW50VHlwZSwgY29tbWFuZHNMaXN0
KTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmJpbmRBY2Nlc3NpYmlsaXR5VHJlZShjb25zdCBT
dHJpbmcmIHBsdWdJRCkKK3sKKyAgICBtX2FjY2Vzc2liaWxpdHlQbHVnSUQgPSBwbHVnSUQ7Cit9
CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IGM3NzQ0NjguLjVkYjIxNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC01MTcsNiArNTE3LDExIEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCiAgICAgLy8gSWYgd2Ug
aGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4KICAgICBpZiAoV2ViRnJhbWU6OkxvYWRM
aXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+bG9hZExpc3RlbmVyKCkpCiAgICAgICAg
IGxvYWRMaXN0ZW5lci0+ZGlkRmluaXNoTG9hZChtX2ZyYW1lKTsKKworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAvLyBFbnN1cmUgdGhlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGlzIHVwZGF0ZWQg
YWZ0ZXIgbG9hZGluZy4KKyAgICB3ZWJQYWdlLT51cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSgpOwor
I2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RM
YXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IDlmNjc2NzIuLjE0ZTYzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE4OCw2ICsxODgsOCBAQCBXZWJQYWdlOjpXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKICAgICAsIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQoMCkKICNlbGlmIFBM
QVRGT1JNKFdJTikKICAgICAsIG1fbmF0aXZlV2luZG93KHBhcmFtZXRlcnMubmF0aXZlV2luZG93
KQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICwgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0KDApCiAj
ZW5kaWYKICAgICAsIG1fc2V0Q2FuU3RhcnRNZWRpYVRpbWVyKFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnJ1bkxvb3AoKSwgdGhpcywgJldlYlBhZ2U6OnNldENhblN0YXJ0TWVkaWFUaW1lckZpcmVkKQog
ICAgICwgbV9maW5kQ29udHJvbGxlcih0aGlzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMzU3M2RkNi4uYzdmMTBhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC02NCw2ICs2NCw3IEBACiAKICNp
ZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQpAQCAtMzkxLDYgKzM5Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGdlc3R1
cmVXaWxsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sJiBjYW5CZWdpblBhbm5p
bmcpOwogICAgIHZvaWQgZ2VzdHVyZURpZFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CiAgICAgdm9pZCBnZXN0dXJlRGlkRW5kKCk7CisKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2
b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0Q29t
cG9zaXRpb25Gb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcsIHVpbnQ2
NF90IGZyb20sIHVpbnQ2NF90IGxlbmd0aCk7CkBAIC01ODUsOSArNTg5LDkgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJf
dCBuZXdJbmRleCk7CiAgICAgdm9pZCBzZXRUZXh0Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3Qg
aW5kZXgpOwogCi0jaWYgUExBVEZPUk0oR1RLKSAgICAKKyNpZiBQTEFURk9STShHVEspCiAgICAg
dm9pZCBmYWlsZWRUb1Nob3dQb3B1cE1lbnUoKTsKLSNlbmRpZiAgICAKKyNlbmRpZgogCiAgICAg
dm9pZCBkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwog
ICAgIHZvaWQgZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCk7CkBAIC02NjQsNiArNjY4LDggQEAgcHJp
dmF0ZToKICAgICBIV05EIG1fbmF0aXZlV2luZG93OwogCiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IG1fZ2VzdHVyZVRhcmdldE5vZGU7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3QqIG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKICNlbmRpZgogICAg
IAogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlBhZ2U+IG1fc2V0Q2FuU3RhcnRNZWRpYVRpbWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmRhMmFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dEd0ay5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgiCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVGSU5FX1RZUEUoV2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3QsIHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0LCBBVEtfVFlQRV9QTFVH
KQorCitzdGF0aWMgQXRrT2JqZWN0KiBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIoQXRr
T2JqZWN0KiBhdGtPYmplY3QpCit7CisgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKQorICAgICAgICBBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5
KCk7CisKKyAgICBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZSA9IFdFQl9Q
QUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09iamVjdCk7CisgICAgaWYgKCFhY2Nlc3NpYmxl
LT5tX3BhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGFnZSogcGFnZSA9IGFjY2Vzc2li
bGUtPm1fcGFnZS0+Y29yZVBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAw
OworCisgICAgRnJhbWUqIGNvcmUgPSBwYWdlLT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWNvcmUg
fHwgIWNvcmUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcm9vdCA9IGNvcmUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cm9v
dE9iamVjdCgpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtP
YmplY3QqIGF4Um9vdCA9IHJvb3QtPndyYXBwZXIoKTsKKyAgICBpZiAoIWF4Um9vdCB8fCAhQVRL
X0lTX09CSkVDVChheFJvb3QpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBheFJv
b3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0SW5pdGlhbGl6
ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoQVRLX09C
SkVDVF9DTEFTUyh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9wYXJlbnRfY2xhc3MpLT5p
bml0aWFsaXplKQorICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYl9wYWdlX2FjY2Vzc2liaWxp
dHlfb2JqZWN0X3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUoYXRrT2JqZWN0LCBkYXRhKTsKKwor
ICAgIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09iamVjdCktPm1fcGFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZSo+KGRhdGEpOworICAgIGF0a19vYmplY3Rfc2V0X3JvbGUo
YXRrT2JqZWN0LCBBVEtfUk9MRV9GSUxMRVIpOworfQorCitzdGF0aWMgZ2ludCB3ZWJQYWdlQWNj
ZXNzaWJpbGl0eU9iamVjdEdldEluZGV4SW5QYXJlbnQoQXRrT2JqZWN0ICphdGtPYmplY3QpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX0lTX09CSkVDVChhdGtPYmplY3QpLCAtMSk7
CisgICAgLy8gQW4gQXRrUGx1ZyBpcyB0aGUgb25seSBjaGlsZCBhbiBBdGtTb2NrZXQgY2FuIGhh
dmUuCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnaW50IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0R2V0TkNoaWxkcmVuKEF0a09iamVjdCogYXRrT2JqZWN0KQoreworICAgIEF0a09iamVj
dCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihhdGtPYmplY3Qp
OworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
MTsKK30KKworc3RhdGljIEF0a09iamVjdCogd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZD
aGlsZChBdGtPYmplY3QqIGF0a09iamVjdCwgZ2ludCBpbmRleCkKK3sKKyAgICAvLyBJdCdzIHN1
cHBvc2VkIHRvIGhhdmUgZWl0aGVyIG9uZSBjaGlsZCBvciB6ZXJvLgorICAgIGlmIChpbmRleCA8
IDAgfHwgaW5kZXggPiAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a09iamVjdCogcm9v
dE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihhdGtPYmplY3QpOworICAg
IGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdGtfb2JqZWN0X3Nl
dF9wYXJlbnQocm9vdE9iamVjdCwgYXRrT2JqZWN0KTsKKyAgICBnX29iamVjdF9yZWYocm9vdE9i
amVjdCk7CisKKyAgICByZXR1cm4gcm9vdE9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2ViX3Bh
Z2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfaW5pdChXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCog
YWNjZXNzaWJsZSkKK3sKKyAgICBhY2Nlc3NpYmxlLT5tX3BhZ2UgPSAwOworfQorCitzdGF0aWMg
dm9pZCB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KFdlYlBhZ2VBY2Nl
c3NpYmlsaXR5T2JqZWN0Q2xhc3MqIGtsYXNzKQoreworICAgIEF0a09iamVjdENsYXNzKiBhdGtP
YmplY3RDbGFzcyA9IEFUS19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgLy8gTm8gbmVlZCB0
byBpbXBsZW1lbnQgZ2V0X3BhcmVudCgpIGhlcmUgc2luY2UgdGhpcyBpcyBhIHN1YmNsYXNzCisg
ICAgLy8gb2YgQXRrUGx1ZyBhbmQgYWxsIHRoZSBsb2dpYyByZWxhdGVkIHRvIHRoYXQgZnVuY3Rp
b24gd2lsbCBiZQorICAgIC8vIGltcGxlbWVudGVkIGJ5IHRoZSBBVEsgYnJpZGdlLgorICAgIGF0
a09iamVjdENsYXNzLT5pbml0aWFsaXplID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RJbml0
aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0gd2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RHZXRJbmRleEluUGFyZW50OworICAgIGF0a09iamVjdENsYXNz
LT5nZXRfbl9jaGlsZHJlbiA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxkcmVu
OworICAgIGF0a09iamVjdENsYXNzLT5yZWZfY2hpbGQgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdFJlZkNoaWxkOworfQorCitXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogd2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3ROZXcoV2ViUGFnZSogcGFnZSkKK3sKKyAgICBBdGtPYmplY3QqIG9i
amVjdCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdfb2JqZWN0X25ldyhXRUJfVFlQRV9QQUdF
X0FDQ0VTU0lCSUxJVFlfT0JKRUNULCAwKSk7CisgICAgYXRrX29iamVjdF9pbml0aWFsaXplKG9i
amVjdCwgcGFnZSk7CisgICAgcmV0dXJuIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9i
amVjdCk7Cit9CisKK3ZvaWQgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZyZXNoKFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmxlKQoreworICAgIC8vIFdlIGp1c3QgbmVl
ZCB0byBlbnN1cmUgdGhhdCB0aGVyZSdzIGEgY29ubmVjdGlvbiBpbiB0aGUgQVRLCisgICAgLy8g
d29ybGQgYmV0d2VlbiB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFuZCB0aGUgQXRrT2JqZWN0
IG9mCisgICAgLy8gdGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGZvciB0aGUgcm9vdCBvZiB0aGUg
RE9NIHRyZWUuCisgICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0gYWNjZXNzaWJpbGl0eVJvb3RP
YmplY3RXcmFwcGVyKEFUS19PQkpFQ1QoYWNjZXNzaWJsZSkpOworICAgIGlmICghcm9vdE9iamVj
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGF0a19vYmplY3Rfc2V0X3BhcmVudChyb290T2JqZWN0
LCBBVEtfT0JKRUNUKGFjY2Vzc2libGUpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxp
dHlPYmplY3RHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzJlZTNh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0a19oCisjZGVmaW5lIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0R3RrX2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJQYWdlOworfQorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCX1RZUEVf
UEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCAgICAgICAgICAgICAgKHdlYl9wYWdlX2FjY2Vzc2li
aWxpdHlfb2JqZWN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlf
T0JKRUNUKG9iamVjdCkgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
ZWN0KSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3QpKQorI2RlZmluZSBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVF9DTEFT
UyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCX1RZUEVf
UEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFz
cykpCisjZGVmaW5lIFdFQl9JU19QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9iamVjdCkgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCX1RZUEVfUEFHRV9B
Q0NFU1NJQklMSVRZX09CSkVDVCkpCisjZGVmaW5lIFdFQl9JU19QQUdFX0FDQ0VTU0lCSUxJVFlf
T0JKRUNUX0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBX
RUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKSkKKyNkZWZpbmUgV0VCX1BBR0VfQUND
RVNTSUJJTElUWV9PQkpFQ1RfR0VUX0NMQVNTKG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iamVjdCksIFdFQl9UWVBFX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QsIFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3QgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3Q7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcyBXZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdENsYXNzOworCitzdHJ1Y3QgX1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKKyAg
ICBBdGtQbHVnIHBhcmVudDsKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIG1fcGFnZTsKK307CisKK3N0
cnVjdCBfV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcyB7CisgICAgQXRrUGx1Z0NsYXNz
IHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3Rf
Z2V0X3R5cGUoKTsKKworV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0TmV3KFdlYktpdDo6V2ViUGFnZSopOworCit2b2lkIHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0UmVmcmVzaChXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCopOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLy8gV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGtfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5j
cHAKaW5kZXggYTI1ZTFmNy4uNmI3ZTUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5j
bHVkZSAiV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CkBAIC0zNyw2ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
dHRpbmdzLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIApAQCAtNDQsNyArNDcsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIC8vIENyZWF0ZSB0aGUgYWNjZXNzaWJsZSBvYmplY3QgKHRoZSBwbHVnKSB0aGF0
IHdpbGwgc2VydmUgYXMgdGhlCisgICAgLy8gZW50cnkgcG9pbnQgdG8gdGhlIFdlYiBwcm9jZXNz
LCBhbmQgc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFVJCisgICAgLy8gcHJvY2VzcyB0byBjb25uZWN0
IHRoZSB0d28gd29ybGRzIHRocm91Z2ggdGhlIGFjY2Vzc2liaWxpdHkKKyAgICAvLyBvYmplY3Qg
dGhlcmUgc3BlY2lmaWNhbGx5IHBsYWNlZCBmb3IgdGhhdCBwdXJwb3NlICh0aGUgc29ja2V0KS4K
KyAgICBtX2FjY2Vzc2liaWxpdHlPYmplY3QgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5l
dyh0aGlzKTsKKyAgICBHT3duUHRyPGdjaGFyPiBwbHVnSUQoYXRrX3BsdWdfZ2V0X2lkKEFUS19Q
TFVHKG1fYWNjZXNzaWJpbGl0eU9iamVjdCkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkJpbmRBY2Nlc3NpYmlsaXR5VHJlZShTdHJpbmcocGx1Z0lELmdldCgpKSkpOworfQor
Cit2b2lkIFdlYlBhZ2U6OnVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCkKK3sKKyAgICBpZiAoIW1f
YWNjZXNzaWJpbGl0eU9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3RSZWZyZXNoKG1fYWNjZXNzaWJpbGl0eU9iamVjdCk7CiB9CiAKIHZvaWQg
V2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJlbmNl
c1N0b3JlJikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBjNTc2NjE5Li40OTI2NDJjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMTItMDEtMDMgIE1hcmlvIFNhbmNo
ZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCisgICAgICAgIFtHVEtdIEV4cG9zZSBh
Y2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuc3VyZSB0
aGUgYWNjZXNzaWJpbGl0eSBpbmZyYXN0cnVjdHVyZSBpcyBhdmFpbGFibGUgd2hlbiBydW5uaW5n
CisgICAgICAgIHRoZSB1bml0IHRlc3RzLCBvdGhlcndpc2UgV0syJ3MgYWNjZXNzaWJpbGl0eSB0
ZXN0cyB3b24ndCB3b3JrLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOgorICAg
ICAgICAoVGVzdFJ1bm5lci5ydW4pOiBJbml0aWFsaXplIHRoZSBhY2Nlc3NpYmlsaXR5IGluZnJh
c3RydWN0dXJlLgorICAgICAgICAobG9va3VwQXRzcGkyQmluYXJ5KTogTmV3LiBMb29rcyBmb3Ig
dGhlIGRpcmVjdG9yeSB3aGVyZSBhdC1zcGkyJ3MKKyAgICAgICAgc3R1ZmYgaXMgbG9jYXRlZCAo
bGlrZSBhdC1zcGktYnVzLWxhdW5jaGVyIGFuZCBhdC1zcGkyLXJlZ2lzdHJ5ZCkuCisKKzIwMTIt
MDEtMDMgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCiAgICAg
ICAgIFtHVEtdIHJ1bi1ndGstdGVzdCBzaG91bGQgaWdub3JlIGZpbGVzIHdpdGggbmFtZXMgd2l0
aG91dCBhICJ0ZXN0IiBvciAiVGVzdCIgcHJlZml4CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ3NAogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3J1bi1ndGstdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5kZXggNzBjZjI3
NC4uZTI4MjhlYyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCisrKyBi
L1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwpAQCAtMjUsNyArMjUsNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogCiAgICAgVEVTVF9ESVJTID0gWyAidW5pdHRlc3RzIiwgIldlYktpdDJBUElUZXN0
cyIgXQogICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDcxNwotICAgIFNLSVBQRUQgPSBbICJ1bml0dGVzdHMvdGVzdGRvd25sb2FkIiwgInVuaXR0
ZXN0cy90ZXN0d2VidmlldyIsICJ1bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIl0KKyAgICBTS0lQ
UEVEID0gWyAidW5pdHRlc3RzL3Rlc3Rkb3dubG9hZCIsICJ1bml0dGVzdHMvdGVzdHdlYnZpZXci
LCAidW5pdHRlc3RzL3Rlc3R3ZWJyZXNvdXJjZSIgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgogICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBFeGVjdXRpdmUoKQpAQCAtOTAsNiArOTAsMTgg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICByZXR1cm4gZXhpdF9zdGF0dXNbMF0KIAor
CitkZWYgbG9va3VwQXRzcGkyQmluYXJ5KGZpbGVuYW1lKToKKyAgICBwYXRoc190b19jaGVjayA9
IFsgIi91c3IvbGliZXhlYyIsCisgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL2xpYi9hdC1z
cGkyLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAiL3Vzci9saWIzMi9hdC1zcGkyLWNv
cmUiCisgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL2xpYjY0L2F0LXNwaTItY29yZSIgXQor
ICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX2NoZWNrOgorICAgICAgICBmaWxlcGF0aCA9IG9zLnBh
dGguam9pbihwYXRoLCBmaWxlbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZXBh
dGgpOgorICAgICAgICAgICAgcmV0dXJuIGZpbGVwYXRoCisgICAgcmV0dXJuIE5vbmUKKwogaWYg
X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0cnk6CiAgICAgICAgIHh2ZmIgPSBFeGVjdXRp
dmUoKS5wb3BlbihbIlh2ZmIiLCAiOjU1IiwgIi1zY3JlZW4iLCAiMCIsICI4MDB4NjAweDI0Iiwg
Ii1ub2xpc3RlbiIsICJ0Y3AiXSwKQEAgLTk5LDcgKzExMSw0MyBAQCBpZiBfX25hbWVfXyA9PSAi
X19tYWluX18iOgogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKICAgICAgICAgc3lzLmV4aXQo
MSkKIAorICAgICMgU2V0dXAgc3VwcG9ydCBmb3IgYWNjZXNzaWJpbGl0eSB0ZXN0cy4KKyAgICB0
ZXN0X2VudiA9IG9zLmVudmlyb24KKyAgICB0ZXN0X2VudlsiRElTUExBWSJdID0gIjozMSIKKwor
ICAgICMgTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gWCdzIHByb3BlcnR5IEFUX1NQSV9CVVMgcHJldmlv
dXNseSBzZXQsCisgICAgIyBvdGhlcndpc2UgdGhlIGFjY2Vzc2liaWxpdHkgYnVzIGNvdWxkbid0
IGJlIHByb3Blcmx5IGxhdW5jaGVkLgorICAgIEV4ZWN1dGl2ZSgpLnBvcGVuKFsieHByb3AiLCAi
LXJvb3QiLCAiLXJlbW92ZSIsICJBVF9TUElfQlVTIl0sCisgICAgICAgICAgICAgICAgICAgICAg
ZW52PXRlc3RfZW52LCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKQorCisgICAgIyBNYWtlIHN1cmUgdGhlIGFjY2Vzc2liaWxpdHkgYnVzIGlzIGxhdW5jaGVk
LgorICAgIGExMXlfYnVzX2xhdW5jaGVkID0gRmFsc2UKKyAgICBhMTF5X2J1c19sYXVuY2hlcl9w
YXRoID0gbG9va3VwQXRzcGkyQmluYXJ5KCdhdC1zcGktYnVzLWxhdW5jaGVyJykKKyAgICBpZiBh
MTF5X2J1c19sYXVuY2hlcl9wYXRoOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhMTF5X2J1
c19sYXVuY2hlciA9IEV4ZWN1dGl2ZSgpLnBvcGVuKFthMTF5X2J1c19sYXVuY2hlcl9wYXRoXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXRl
c3RfZW52LCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQor
ICAgICAgICAgICAgYTExeV9idXNfbGF1bmNoZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBsYXVuY2ggdGhlIGFjY2Vzc2li
aWxpdHkgYnVzIChhbHJlYWR5IGxhdW5jaGVkPylcbiIpCisgICAgICAgICAgICBzeXMuc3RkZXJy
LmZsdXNoKCkKKworICAgIGExMXlfcmVnaXN0cnlkX3J1bm5pbmcgPSBGYWxzZQorICAgIGExMXlf
cmVnaXN0cnlkX3BhdGggPSBsb29rdXBBdHNwaTJCaW5hcnkoJ2F0LXNwaTItcmVnaXN0cnlkJykK
KyAgICBpZiBhMTF5X3JlZ2lzdHJ5ZF9wYXRoOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBh
MTF5X3JlZ2lzdHJ5ZCA9IEV4ZWN1dGl2ZSgpLnBvcGVuKFsiJXMvYXQtc3BpMi1yZWdpc3RyeWQi
ICUgYXRzcGkyX2V4ZWNfcGF0aF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudj10ZXN0X2Vudiwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0
PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIGExMXlfcmVnaXN0cnlkX3J1bm5pbmcgPSBU
cnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxl
ZCB0byBydW4gdGhlIGFjY2Vzc2liaWxpdHkgcmVnaXN0cnkgKGFscmVhZHkgcnVubmluZz8pXG4i
KQorICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKICAgICB0cnk6CiAgICAgICAgIHN5
cy5leGl0KFRlc3RSdW5uZXIoKS5ydW4oKSkKICAgICBmaW5hbGx5OgorICAgICAgICBpZiBhMTF5
X3JlZ2lzdHJ5ZF9ydW5uaW5nOgorICAgICAgICAgICAgYTExeV9yZWdpc3RyeWQua2lsbCgpCisg
ICAgICAgIGlmIGExMXlfYnVzX2xhdW5jaGVkOgorICAgICAgICAgICAgYTExeV9idXNfbGF1bmNo
ZXIua2lsbCgpCiAgICAgICAgIHh2ZmIua2lsbCgpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMg
Yi9jb25maWd1cmUuYWMKaW5kZXggYzZkOTFjZC4uYzU3MTBmYSAxMDA2NDQKLS0tIGEvY29uZmln
dXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjg4LDYgKzI4OCw3IEBAIEVOQ0hBTlRfUkVR
VUlSRURfVkVSU0lPTj0wLjIyCiBMSUJGRlRXX1JFUVVJUkVEX1ZFUlNJT049My4yLjIKIENMVVRU
RVJfUkVRVUlSRURfVkVSU0lPTj0xLjguMgogQ0xVVFRFUl9HVEtfUkVRVUlSRURfVkVSU0lPTj0x
LjAuMgorQVRTUEkyX1JFUVVJUkVEX1ZFUlNJT049Mi4wLjAKIAogIyBBdmFpbGFibGUgbW9kdWxl
cwogIwpAQCAtMTA1Nyw2ICsxMDU4LDE3IEBAIGlmIHRlc3QgIiR3aXRoX2FjY2VsZXJhdGVkX2Nv
bXBvc2l0aW5nIiA9ICJjbHV0dGVyIjsgdGhlbgogICAgQUNfU1VCU1QoQ0xVVFRFUl9HVEtfTElC
UykKIGZpCiAKKyMgY2hlY2sgaWYgYXRzcGkyIGlzIGF2YWlsYWJsZSAob25seSBuZWVkZWQgZm9y
IFdlYmtpdDIgdW5pdCB0ZXN0cykKK2lmIHRlc3QgIiRlbmFibGVfd2Via2l0MiIgPSAieWVzIjsg
dGhlbgorICAgUEtHX0NIRUNLX01PRFVMRVMoW0FUU1BJMl0sCisgICAgICAgICAgICAgICAgICAg
ICBbYXRzcGktMiA+PSAkQVRTUEkyX1JFUVVJUkVEX1ZFUlNJT05dLAorICAgICAgICAgICAgICAg
ICAgICAgW2hhdmVfYXRzcGkyPXllc10pCisKKyAgIEFDX1NVQlNUKFtBVFNQSTJfQ0ZMQUdTXSkK
KyAgIEFDX1NVQlNUKFtBVFNQSTJfTElCU10pCitmaQorCisKICMgY2hlY2sgZm9yIGNvZGUgY292
ZXJhZ2Ugc3VwcG9ydAogaWYgdGVzdCAiJGVuYWJsZV9jb3ZlcmFnZSIgPSAieWVzIjsgdGhlbgog
ICAgQ09WRVJBR0VfQ0ZMQUdTPSItTUQiCkBAIC0xMTMwLDYgKzExNDIsOSBAQCBBTV9DT05ESVRJ
T05BTChbVVNFX1BBTkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28iXSkK
ICMgR1N0cmVhbWVyIGZlYXR1cmUgY29uZGl0aW9uYWwKIEFNX0NPTkRJVElPTkFMKFtVU0VfR1NU
UkVBTUVSXSwgW3Rlc3QgIiRoYXZlX2dzdHJlYW1lciIgPSAieWVzIl0pCiAKKyMgQVRTUEkyIGNv
bmRpdGlvbmFsCitBTV9DT05ESVRJT05BTChbSEFWRV9BVFNQSTJdLCBbdGVzdCAiJGhhdmVfYXRz
cGkyIiA9ICJ5ZXMiXSkKKwogIyBBY2NlbGVyYXRlZCBjb21wb3NpdGluZyBjb25kaXRpb25hbAog
QU1fQ09ORElUSU9OQUwoW1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElOR10sIFt0ZXN0ICIkd2l0
aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAiY2Fpcm8iIHx8IHRlc3QgIiR3aXRoX2FjY2Vs
ZXJhdGVkX2NvbXBvc2l0aW5nIiA9ICJvcGVuZ2wiIHx8IHRlc3QgIiR3aXRoX2FjY2VsZXJhdGVk
X2NvbXBvc2l0aW5nIiA9ICJjbHV0dGVyIl0pCiBBTV9DT05ESVRJT05BTChbVVNFX1RFWFRVUkVf
TUFQUEVSX0NBSVJPXSwgW3Rlc3QgIiR3aXRoX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nIiA9ICJj
YWlybyJdKQotLSAKMS43LjcuNAoK
</data>
<flag name="commit-queue"
          id="121321"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121681</attachid>
            <date>2012-01-09 10:34:25 -0800</date>
            <delta_ts>2012-01-09 10:55:13 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-01-09-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>60823</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAzYjBlZTYwYWFiMjQ0ZWZmNzQ3OGE0NjM3YzljMmZmZWU5YTk4ZDI2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE5IE9jdCAyMDExIDIwOjA1OjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0wOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQy
IHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBOZXcgb3B0aW9uYWwgZGVwZW5kZW5jeSBmb3IgV0syJ3MgYWNjZXNzaWJpbGl0
eSB1bml0IHRlc3Q6IEFULVNQSTIuCgogICAgICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3Ig
QVQtU1BJMiB3aGVuIGJ1aWxkaW5nIHdpdGggV0syIHN1cHBvcnQuCgoyMDEyLTAxLTA5ICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gRXhw
b3NlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNl
ZCBBVHMKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1
ODkKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEV4cG9zZSB0
aGUgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKICAgICAgICBh
cmNoaXRlY3R1cmUgb2YgV0syIHRocm91Z2ggQXRrU29ja2V0IGFkIEF0a1BsdWcuCgogICAgICAg
IE1ha2UgdGhlIFdlYlZpZXcgd2lkZ2V0IHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5n
IHRvCiAgICAgICAgZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZSgpLgoKICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwOgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KToK
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKToKICAgICAgICAod2Via2l0
X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwOiBBZGRlZC4KICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RmluYWxpemUpOgogICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVJbml0aWFsaXplKToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlUmVmU3RhdGVTZXQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJ
bmRleEluUGFyZW50KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9p
bml0KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9jbGFzc19pbml0
KToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KToKICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oOiBBZGRlZC4KCiAg
ICAgICAgTWFrZSB0aGUgV2ViUGFnZSBjcmVhdGUgYW4gQXRrUGx1ZyBvbiBpdHMgaW5pdGlhbGl6
YXRpb24gYW5kCiAgICAgICAgc2VuZGluZyB0aGUgSUQgb2YgdGhhdCBwbHVnIHRvIHRoZSBVSSBw
cm9jZXNzLCBzbyBpdCBjYW4gZW1iZWQgdGhlCiAgICAgICAgcGx1ZyBpbiB0aGUgc29ja2V0LgoK
ICAgICAgICBBbHNvLCB0YWtlIGNhcmUgb2YgYWxsIHRoZSBuZWVkZWQgd3JhcHBpbmcgYXJvdW5k
IHRoZSBXZWJDb3JlJ3MKICAgICAgICBhY2Nlc3NpYmlsaXR5IG9iamVjdHMsIGV4cG9zaW5nIHRo
ZW0gaW4gdGhlIFVJIHByb2Nlc3MncwogICAgICAgIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IHRo
YW5rcyB0byB0aGUgc29ja2V0LXBsdWcgY29ubmVjdGlvbi4KCiAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRBY2Nlc3Np
YmlsaXR5UGx1Z0lEKToKICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CiAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CiAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJpbGl0eVRyZWUpOgogICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CiAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6
CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CiAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6V2ViUGFnZSk6CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcDogQWRkZWQuCiAgICAgICAgKGFjY2Vzc2li
aWxpdHlSb290T2JqZWN0V3JhcHBlcik6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5pdGlhbGl6ZSk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5k
ZXhJblBhcmVudCk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxk
cmVuKToKICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZDaGlsZCk6CiAgICAg
ICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2luaXQpOgogICAgICAgICh3ZWJfcGFn
ZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KToKICAgICAgICAod2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3ROZXcpOgogICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJl
ZnJlc2gpOgogICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdEd0ay5oOiBBZGRlZC4KICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUGFnZUd0ay5jcHA6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFs
aXplKToKICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSk6
CgogICAgICAgIE5ldyB1bml0IHRlc3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9y
dCBpbiBXSzJHVEsuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJp
bGl0eVRlc3RTZXJ2ZXIuY3BwOiBBZGRlZC4KICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6
IE5vdGlmeSB0aGUgcGFyZW50IHByb2Nlc3MgKHRoZSB0ZXN0KQogICAgICAgIHdoZW4gcmVhZHku
CiAgICAgICAgKG1haW4pOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW06CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHA6IEFkZGVkLgogICAgICAgIChzdG9wVGVzdFNlcnZlcik6CiAgICAgICAg
KHNpZ0Fib3J0SGFuZGxlcik6CiAgICAgICAgKHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyk6
CiAgICAgICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3IpOgogICAgICAgIChzdGFydFRlc3RTZXJ2
ZXIpOgogICAgICAgIChjaGVja0F0c3BpQWNjZXNzaWJsZSk6CiAgICAgICAgKGZpbmRUZXN0U2Vy
dmVyQXBwbGljYXRpb24pOgogICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6CiAgICAg
ICAgKGJlZm9yZUFsbCk6CiAgICAgICAgKGFmdGVyQWxsKToKCjIwMTItMDEtMDkgIE1hcmlvIFNh
bmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAgICBbR1RLXSBFeHBvc2Ug
YWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFU
cwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgRW5zdXJlIHRoZSBh
Y2Nlc3NpYmlsaXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcKICAg
ICAgICB0aGUgdW5pdCB0ZXN0cywgb3RoZXJ3aXNlIFdLMidzIGFjY2Vzc2liaWxpdHkgdGVzdHMg
d29uJ3Qgd29yay4KCiAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6CiAgICAgICAgKFRl
c3RSdW5uZXIpOgogICAgICAgIChUZXN0UnVubmVyLl9sb29rdXBBdHNwaTJCaW5hcnkpOiBOZXcu
IExvb2tzIGZvciB0aGUgZGlyZWN0b3J5CiAgICAgICAgd2hlcmUgYXQtc3BpMidzIHN0dWZmIGlz
IGxvY2F0ZWQgKGxpa2UgYXQtc3BpLWJ1cy1sYXVuY2hlciBhbmQKICAgICAgICBhdC1zcGkyLXJl
Z2lzdHJ5ZCkuCiAgICAgICAgKFRlc3RSdW5uZXIucnVuKTogSW5pdGlhbGl6ZSB0aGUgYWNjZXNz
aWJpbGl0eSBpbmZyYXN0cnVjdHVyZS4KCiAgICAgICAgKiBndGsvamhidWlsZC5tb2R1bGVzOiBB
ZGRlZCBhdC1zcGkyLWNvcmUgYW5kIGF0LXNwaTItYXRrLgotLS0KIENoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODAgKysrKysrKwogU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsK
IC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgICAgICAgIHwgICAz
MSArKysKIC4uLi9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAgICAgICAg
IHwgIDEyOSArKysrKysrKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlLmggICAgICAgICAgfCAgIDYyICsrKysrKwogLi4uL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJp
bGl0eVRlc3RTZXJ2ZXIuY3BwICAgICAgfCAgIDU5ICsrKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSB8ICAgMjAgKysKIC4uLi9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCAgICAgIHwgIDIyOSArKysrKysrKysrKysr
KysrKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oICAgICAgICAg
ICAgfCAgICA5ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4gIHwgICAgMyArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94
eUd0ay5jcHAgICB8ICAgIDUgKwogLi4uL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcCAgICAgICAgfCAgICA1ICsKIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oICAgICAgICB8ICAgMTAgKy0KIC4uLi9XZWJQYWdlL2d0ay9XZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgIHwgIDE0MCArKysrKysrKysrKysKIC4uLi9XZWJQ
YWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oICAgIHwgICA2NCArKysrKysK
IC4uLi9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgIHwgICAx
OSArKy0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxOSArKwogVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDQ4ICsrKystCiBUb29scy9ndGsvamhidWlsZC5tb2R1bGVzICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMjUgKysrCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKysKIDIyIGZpbGVzIGNoYW5nZWQsIDk4NSBpbnNl
cnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oCgpkaWZmIC0tZ2l0IGEvQ2hhbmdl
TG9nIGIvQ2hhbmdlTG9nCmluZGV4IDg0ZTU0ZTUuLjc0MTNiOTQgMTAwNjQ0Ci0tLSBhL0NoYW5n
ZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMS0wOSAgTWFyaW8g
U2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRXhw
b3NlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNl
ZCBBVHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IG9wdGlvbmFsIGRlcGVuZGVuY3kgZm9yIFdLMidzIGFjY2Vzc2liaWxpdHkgdW5pdCB0ZXN0OiBB
VC1TUEkyLgorCisgICAgICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgQVQtU1BJMiB3aGVu
IGJ1aWxkaW5nIHdpdGggV0syIHN1cHBvcnQuCisKIDIwMTItMDEtMDQgIEpvbiBMZWUgIDxqb25s
ZWVAYXBwbGUuY29tPgogCiAgICAgICAgIENsaWNraW5nIG9uIHRoZSBjYW5jZWwgYnV0dG9uIG9u
IHJlYWRvbmx5IGFuZCBkaXNhYmxlZCBzZWFyY2ggZmllbGRzIGRhcmtlbnMgYXMgaWYgdGhlIHNl
YXJjaCBmaWVsZCB3YXMgZWRpdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1NWQxODRhLi40NTc1MjIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTItMDEtMDkgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3Np
YmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSB0aGUgYWNj
ZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKKyAgICAgICAgYXJjaGl0
ZWN0dXJlIG9mIFdLMiB0aHJvdWdoIEF0a1NvY2tldCBhZCBBdGtQbHVnLgorCisgICAgICAgIE1h
a2UgdGhlIFdlYlZpZXcgd2lkZ2V0IHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5nIHRv
CisgICAgICAgIGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoKS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQp
OgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKToKKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RmluYWxpemUpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKToKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZUluaXRpYWxpemUpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VBY2Nlc3NpYmxlUmVmU3RhdGVTZXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nl
c3NpYmxlR2V0SW5kZXhJblBhcmVudCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9h
Y2Nlc3NpYmxlX2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJs
ZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5ldyk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxl
Lmg6IEFkZGVkLgorCisgICAgICAgIE1ha2UgdGhlIFdlYlBhZ2UgY3JlYXRlIGFuIEF0a1BsdWcg
b24gaXRzIGluaXRpYWxpemF0aW9uIGFuZAorICAgICAgICBzZW5kaW5nIHRoZSBJRCBvZiB0aGF0
IHBsdWcgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIGl0IGNhbiBlbWJlZCB0aGUKKyAgICAgICAgcGx1
ZyBpbiB0aGUgc29ja2V0LgorCisgICAgICAgIEFsc28sIHRha2UgY2FyZSBvZiBhbGwgdGhlIG5l
ZWRlZCB3cmFwcGluZyBhcm91bmQgdGhlIFdlYkNvcmUncworICAgICAgICBhY2Nlc3NpYmlsaXR5
IG9iamVjdHMsIGV4cG9zaW5nIHRoZW0gaW4gdGhlIFVJIHByb2Nlc3MncworICAgICAgICBhY2Nl
c3NpYmlsaXR5IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tldC1wbHVnIGNvbm5lY3Rpb24u
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dl
YlBhZ2VQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YmluZEFj
Y2Vzc2liaWxpdHlUcmVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIp
OgorICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RJbml0aWFsaXplKToKKyAgICAg
ICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5kZXhJblBhcmVudCk6CisgICAgICAg
ICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbik6CisgICAgICAgICh3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZkNoaWxkKToKKyAgICAgICAgKHdlYl9wYWdlX2FjY2Vz
c2liaWxpdHlfb2JqZWN0X2luaXQpOgorICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9v
YmplY3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5l
dyk6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZnJlc2gpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsu
aDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlQWNjZXNzaWJpbGl0eVRyZWUpOgorCisgICAgICAg
IE5ldyB1bml0IHRlc3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBpbiBXSzJH
VEsuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVz
dFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6IE5vdGlm
eSB0aGUgcGFyZW50IHByb2Nlc3MgKHRoZSB0ZXN0KQorICAgICAgICB3aGVuIHJlYWR5LgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vz
c2liaWxpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHN0b3BUZXN0U2VydmVyKToKKyAgICAgICAg
KHNpZ0Fib3J0SGFuZGxlcik6CisgICAgICAgICh0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMp
OgorICAgICAgICAoc3RhcnRUZXN0U2VydmVyTW9uaXRvcik6CisgICAgICAgIChzdGFydFRlc3RT
ZXJ2ZXIpOgorICAgICAgICAoY2hlY2tBdHNwaUFjY2Vzc2libGUpOgorICAgICAgICAoZmluZFRl
c3RTZXJ2ZXJBcHBsaWNhdGlvbik6CisgICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6
CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorCiAyMDEyLTAxLTA4
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAo
cjEwMzg1OSk6IFdLVmlld3MgbGVhawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBkY2I0N2ExLi4y
Yjk1MDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNTQ3LDYgKzU0Nyw4IEBAIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld1ByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVz
LmggXApAQCAtODkyLDYgKzg5NCw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFK
T1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCisJU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdEd0ay5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCA4NjYwNzE2Li45Zjk0
ZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUGFnZUNsaWVu
dEltcGwuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0
b3J5LmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4KQEAgLTY5LDYgKzcwLDcgQEAgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAgIEd0a0RyYWdBbmREcm9wSGVscGVy
IGRyYWdBbmREcm9wSGVscGVyOwogICAgIERyYWdJY29uIGRyYWdJY29uOwogICAgIEludFNpemUg
cmVzaXplclNpemU7CisgICAgR1JlZlB0cjxBdGtPYmplY3Q+IGFjY2Vzc2libGU7CiB9OwogCiBH
X0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RL
X1RZUEVfQ09OVEFJTkVSKQpAQCAtMzc0LDYgKzM3NiwzNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250
ZXh0KgogICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVH
ZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogfQogCitzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRXZWJWaWV3QmFzZUdldEFjY2Vzc2libGUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAg
Ly8gSWYgdGhlIHNvY2tldCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGVtYmVkZGVkIGEg
cGx1ZyBJRCwgcmV0dXJuIGl0LgorICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXY7CisgICAgaWYgKHByaXYtPmFjY2Vz
c2libGUgJiYgYXRrX3NvY2tldF9pc19vY2N1cGllZChBVEtfU09DS0VUKHByaXYtPmFjY2Vzc2li
bGUuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIHByaXYtPmFjY2Vzc2libGUuZ2V0KCk7CisKKyAg
ICAvLyBDcmVhdGUgdGhlIGFjY2Vzc2libGUgb2JqZWN0IGFuZCBhc3NvY2lhdGUgaXQgdG8gdGhl
IHdpZGdldC4KKyAgICBpZiAoIXByaXYtPmFjY2Vzc2libGUpIHsKKyAgICAgICAgcHJpdi0+YWNj
ZXNzaWJsZSA9IGFkb3B0R1JlZihBVEtfT0JKRUNUKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZU5ldyh3aWRnZXQpKSk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBwYXJlbnQgbm90IHRvIGJyZWFr
IGJvdHRvbS11cCBuYXZpZ2F0aW9uLgorICAgICAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9
IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3aWRnZXQpOworICAgICAgICBBdGtPYmplY3QqIGF4UGFy
ZW50ID0gcGFyZW50V2lkZ2V0ID8gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShwYXJlbnRXaWRn
ZXQpIDogMDsKKyAgICAgICAgaWYgKGF4UGFyZW50KQorICAgICAgICAgICAgYXRrX29iamVjdF9z
ZXRfcGFyZW50KHByaXYtPmFjY2Vzc2libGUuZ2V0KCksIGF4UGFyZW50KTsKKyAgICB9CisKKyAg
ICAvLyBUcnkgdG8gZW1iZWQgdGhlIHBsdWcgaW4gdGhlIHNvY2tldCwgaWYgcG9zc3NpYmxlLgor
ICAgIFN0cmluZyBwbHVnSUQgPSBwcml2LT5wYWdlUHJveHktPmdldEFjY2Vzc2liaWxpdHlQbHVn
SUQoKTsKKyAgICBpZiAocGx1Z0lELmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcHJpdi0+YWNj
ZXNzaWJsZS5nZXQoKTsKKworICAgIGF0a19zb2NrZXRfZW1iZWQoQVRLX1NPQ0tFVChwcml2LT5h
Y2Nlc3NpYmxlLmdldCgpKSwgY29uc3RfY2FzdDxnY2hhcio+KHBsdWdJRC51dGY4KCkuZGF0YSgp
KSk7CisKKyAgICByZXR1cm4gcHJpdi0+YWNjZXNzaWJsZS5nZXQoKTsKK30KKwogc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ01vdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQogewogICAg
IFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdp
ZGdldCk7CkBAIC00MzgsNiArNDY4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jh
c2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJWaWUKICAgICB3
aWRnZXRDbGFzcy0+ZHJhZ19sZWF2ZSA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlOwogICAg
IHdpZGdldENsYXNzLT5kcmFnX2Ryb3AgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wOwogICAg
IHdpZGdldENsYXNzLT5kcmFnX2RhdGFfcmVjZWl2ZWQgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdE
YXRhUmVjZWl2ZWQ7CisgICAgd2lkZ2V0Q2xhc3MtPmdldF9hY2Nlc3NpYmxlID0gd2Via2l0V2Vi
Vmlld0Jhc2VHZXRBY2Nlc3NpYmxlOwogCiAgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKTsKICAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VGaW5hbGl6ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDhk
M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCIKKworc3RydWN0
IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlIHsKKyAgICBHdGtXaWRnZXQqIHdp
ZGdldDsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLCB3
ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlLCBBVEtfVFlQRV9TT0NLRVQpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUZpbmFsaXplKEdPYmplY3QqIGdvYmpl
Y3QpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlID0gV0VC
S0lUX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRShnb2JqZWN0KTsKKyAgICBhY2Nlc3NpYmxlLT5w
cml2LT5+V2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUoZ29iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNz
aWJsZVdpZGdldERlc3Ryb3llZChHdGtXaWRnZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIGFjY2Vzc2libGUtPnByaXYtPndpZGdldCA9
IDA7CisgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKEFUS19PQkpFQ1QoYWNjZXNz
aWJsZSksIEFUS19TVEFURV9ERUZVTkNULCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlSW5pdGlhbGl6ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdf
YmFzZV9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUpCisgICAgICAgIEFUS19P
QkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3Mp
LT5pbml0aWFsaXplKGF0a09iamVjdCwgZGF0YSk7CisKKyAgICBpZiAoZGF0YSAmJiBHVEtfSVNf
V0lER0VUKGRhdGEpKSB7CisgICAgICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSogYWNj
ZXNzaWJsZSA9IFdFQktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUoYXRrT2JqZWN0KTsKKyAg
ICAgICAgYWNjZXNzaWJsZS0+cHJpdi0+d2lkZ2V0ID0gR1RLX1dJREdFVChkYXRhKTsKKworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKGFjY2Vzc2libGUtPnByaXYtPndpZGdldCwgImRl
c3Ryb3kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKSwgYXRrT2JqZWN0KTsKKyAgICB9
CisKKyAgICBhdGtfb2JqZWN0X3NldF9yb2xlKGF0a09iamVjdCwgQVRLX1JPTEVfRklMTEVSKTsK
K30KKworc3RhdGljIEF0a1N0YXRlU2V0KiB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVSZWZT
dGF0ZVNldChBdGtPYmplY3QqIGF0a09iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZUFj
Y2Vzc2libGUqIGFjY2Vzc2libGUgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKGF0
a09iamVjdCk7CisKKyAgICBBdGtTdGF0ZVNldCogc3RhdGVTZXQ7CisgICAgaWYgKGFjY2Vzc2li
bGUtPnByaXYtPndpZGdldCkgeworICAgICAgICAvLyBVc2UgdGhlIGltcGxlbWVudGF0aW9uIG9m
IEF0a1NvY2tldCBpZiB0aGUgd2lkZ2V0IGlzIHN0aWxsIGFsaXZlLgorICAgICAgICBzdGF0ZVNl
dCA9IEFUS19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJl
bnRfY2xhc3MpLT5yZWZfc3RhdGVfc2V0KGF0a09iamVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gSWYgdGhlIHdpZGdldCBpcyBubyBsb25nZXIgYWxpdmUsIHNhdmUgc29tZSByZW1vdGUg
Y2FsbHMKKyAgICAgICAgLy8gKGJlY2F1c2Ugb2YgQXRrU29ja2V0J3MgaW1wbGVtZW50YXRpb24g
b2YgcmVmX3N0YXRlX3NldCgpKQorICAgICAgICAvLyBhbmQganVzdCByZXR1cm4gdGhhdCB0aGlz
IEF0a09iamVjdCBpcyBkZWZ1bmN0LgorICAgICAgICBzdGF0ZVNldCA9IGF0a19zdGF0ZV9zZXRf
bmV3KCk7CisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RB
VEVfREVGVU5DVCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRlU2V0OworfQorCitzdGF0aWMg
Z2ludCB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KEF0a09iamVj
dCogYXRrT2JqZWN0KQoreworICAgIEF0a09iamVjdCogYXRrUGFyZW50ID0gYXRrX29iamVjdF9n
ZXRfcGFyZW50KGF0a09iamVjdCk7CisgICAgaWYgKCFhdGtQYXJlbnQpCisgICAgICAgIHJldHVy
biAtMTsKKworICAgIGd1aW50IGNvdW50ID0gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2No
aWxkcmVuKGF0a1BhcmVudCk7CisgICAgZm9yIChndWludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoYXRrUGFyZW50LCBpKTsKKyAgICAgICAgYm9vbCBjaGlsZElzT2JqZWN0ID0gY2hpbGQg
PT0gYXRrT2JqZWN0OworICAgICAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgICAgIGlm
IChjaGlsZElzT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgcmV0
dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxl
X2luaXQoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIFdl
YktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoYWNjZXNzaWJsZSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJ
QkxFLCBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlKTsKKyAgICBhY2Nlc3NpYmxl
LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZVByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNz
aWJsZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzKiBrbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlRmluYWxpemU7CisKKyAgICAvLyBObyBuZWVkIHRvIGltcGxlbWVudCBnZXRfbl9jaGlsZHJl
bigpIGFuZCByZWZfY2hpbGQoKSBoZXJlCisgICAgLy8gc2luY2UgdGhpcyBpcyBhIHN1YmNsYXNz
IG9mIEF0a1NvY2tldCBhbmQgYWxsIHRoZSBsb2dpYyByZWxhdGVkCisgICAgLy8gdG8gdGhvc2Ug
ZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIEFUSyBicmlkZ2UuCisgICAgQXRr
T2JqZWN0Q2xhc3MqIGF0a09iamVjdENsYXNzID0gQVRLX09CSkVDVF9DTEFTUyhrbGFzcyk7Cisg
ICAgYXRrT2JqZWN0Q2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2li
bGVJbml0aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5yZWZfc3RhdGVfc2V0ID0gd2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUmVmU3RhdGVTZXQ7CisgICAgYXRrT2JqZWN0Q2xhc3MtPmdl
dF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleElu
UGFyZW50OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2Vi
S2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSkpOworfQorCitXZWJLaXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGUqIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5ldyhHdGtXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IEFUS19PQkpFQ1QoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgTlVMTCkpOworICAgIGF0a19v
YmplY3RfaW5pdGlhbGl6ZShvYmplY3QsIHdpZGdldCk7CisgICAgcmV0dXJuIFdFQktJVF9XRUJf
VklFV19CQVNFX0FDQ0VTU0lCTEUob2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MWQ5OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlQWNjZXNzaWJsZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vz
c2libGVfaAorI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVfaAorCisjaW5jbHVk
ZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSAgICAgICAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRShvYmplY3QpICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUND
RVNTSUJMRSwgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9WSUVXX0JBU0VfQUNDRVNTSUJMRV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBX
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJf
VklFV19CQVNFX0FDQ0VTU0lCTEUob2JqZWN0KSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmplY3QpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUpKQor
I2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19C
QVNFX0FDQ0VTU0lCTEUpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxF
X0dFVF9DTEFTUyhvYmplY3QpIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmplY3QpLCBX
RUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUsIFdlYktpdFdlYlZpZXdCYXNlQWNj
ZXNzaWJsZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNz
aWJsZSBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xh
c3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSBX
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlOworCisKK3N0cnVjdCBfV2ViS2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlIHsKKyAgICBBdGtTb2NrZXQgcGFyZW50OworICAgIC8qPCBwcml2
YXRlID4qLworICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUqIHByaXY7Cit9
OworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzIHsKKyAgICBBdGtT
b2NrZXRDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF93ZWJfdmlld19iYXNl
X2FjY2Vzc2libGVfZ2V0X3R5cGUoKTsKKworV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiB3
ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVOZXcoR3RrV2lkZ2V0Kik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNz
aWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNiNGQ0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgor
CitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRM
b2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKK3sKKyAgICAvLyBTZW5kIGEgbWVzc2FnZSB0
byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KKyAgICBpZiAobG9hZEV2ZW50
ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBnX3ByaW50KCJPSyIpOworfQorCitp
bnQKK21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGJvdGggR0FJTCBhbmQgdGhlIEFUSyBicmlkZ2UgYXJlIGxvYWRlZC4KKyAgICBnX3NldGVudigi
R1RLX01PRFVMRVMiLCAiZ2FpbDphdGstYnJpZGdlIiwgVFJVRSk7CisKKyAgICBndGtfaW5pdCgm
YXJnYywgJmFyZ3YpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0
bWwod2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgPGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIHNvbWUgcGxhaW4g
dGV4dC48L3A+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMgcGFy
YWdyYXBoIGNvbnRhaW5zIDxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmdcIj5hIGxp
bms8L2E+IGluIHRoZSBtaWRkbGUuPC9wPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgIDwvYm9keT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIEd0a1dpZGdldCogd2luZG93
ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRv
dywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0soZ3RrX21haW5fcXVpdCksIDApOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENo
YW5nZWRDYWxsYmFjayksIDApOworCisgICAgZ3RrX21haW4oKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXgg
ZDkxMmI2NS4uMTc1OWQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiwxMyBAQCBURVNUX1BST0dT
ICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdAogCiBu
b2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQorCitpZiBIQVZFX0FUU1BJMgorVEVTVF9Q
Uk9HUyArPSBQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkK
Kworbm9pbnN0X1BST0dSQU1TICs9IFByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9BY2Nlc3NpYmls
aXR5VGVzdFNlcnZlcgorZW5kaWYKKwogd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKIAktRFdF
QktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zXCIg
XAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKQEAgLTc2LDMgKzgzLDE2IEBAIFByb2dy
YW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3
YXJkTGlzdF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRm
bGFncykKIAoraWYgSEFWRV9BVFNQSTIKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19BY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0
U2VydmVyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
bGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5X1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHlfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mp
ICQoQVRTUEkyX0NGTEFHUykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChBVFNQSTJfTElCUykK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9MREZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCitlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4wZjNjOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3Bw
CkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisKKy8vIFRoZSBsaWJhdHNwaSBoZWFkZXJzIGRvbid0IHVzZSBHX0JF
R0lOX0RFQ0xTCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlIDxhdHNwaS9hdHNwaS5oPgorfQorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBs
aWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCitzdGF0aWMgY29uc3QgY2hhciog
a1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIjsKKworLy8gTWF4
IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5nIGl0
Lgorc3RhdGljIGNvbnN0IGludCBrTWF4V2FpdEZvckNoaWxkID0gNTsKKworLy8gVGhlIFBJRCBm
b3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRlZC4K
K3N0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQaWQgPSAwOworCisvLyBXaGV0aGVyIHRoZSBjaGls
ZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFkeS4KK3N0YXRpYyBib29sIGtDaGlsZElzUmVhZHkg
PSBmYWxzZTsKKworc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIERvIG5v
dGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4KKyAgICBpZigha0NoaWxkUHJvY2Vz
c1BpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zcGF3bl9jbG9zZV9waWQoa0NoaWxkUHJv
Y2Vzc1BpZCk7CisgICAga2lsbChrQ2hpbGRQcm9jZXNzUGlkLCBTSUdURVJNKTsKKyAgICBrQ2hp
bGRQcm9jZXNzUGlkID0gMDsKK30KKworc3RhdGljIHZvaWQgc2lnQWJvcnRIYW5kbGVyKGludCBz
aWdOdW0pCit7CisgICAgLy8gSnVzdCBzdG9wIHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdBQlJUIHdh
cyByZWNlaXZlZC4KKyAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitzdGF0aWMgZ3BvaW50ZXIg
dGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jKGdwb2ludGVyKQoreworICAgIC8vIFdhaXQgZm9y
IHRoZSBzcGVjaWZpZWQgdGltZW91dCB0byBoYXBwZW4uCisgICAgZ191c2xlZXAoa01heFdhaXRG
b3JDaGlsZCAqIEdfVVNFQ19QRVJfU0VDKTsKKworICAgIC8vIEtpbGwgdGhlIGNoaWxkIHByb2Nl
c3MgaWYgbm90IHJlYWR5IHlldC4KKyAgICBpZiAoIWtDaGlsZElzUmVhZHkpCisgICAgICAgIHN0
b3BUZXN0U2VydmVyKCk7CisKKyAgICBnX3RocmVhZF9leGl0KDApOworICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCkKK3sKKyAgICBrQ2hpbGRJ
c1JlYWR5ID0gZmFsc2U7CisKKyNpZiAoIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDMxLDApKQorICAg
IGdfdGhyZWFkX2NyZWF0ZSh0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMsIDAsIEZBTFNFLCAw
KTsKKyNlbHNlCisgICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2
ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc3RhcnRU
ZXN0U2VydmVyKCkKK3sKKyAgICAvLyBQcmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcgdGhlIHNl
cnZlciBwcm9jZXNzLgorICAgIEdPd25QdHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19idWlsZF9m
aWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAiV2ViS2l0MkFQSVRlc3RzIiwga1Rlc3RTZXJ2ZXJB
cHBOYW1lLCBOVUxMKSk7CisKKyAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKKyAgICB0ZXN0
U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOworICAgIHRlc3RTZXJ2ZXJBcmd2
WzFdID0gMDsKKworICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBm
aWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNv
IHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgorICAgIGludCBjaGlsZFN0ZG91dCA9IDA7CisgICAg
aWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMoMCwgdGVzdFNlcnZlckFyZ3YsIDAsIHN0YXRp
Y19jYXN0PEdTcGF3bkZsYWdzPigwKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAma0NoaWxkUHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSkgeworICAg
ICAgICBjbG9zZShjaGlsZFN0ZG91dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBTdGFydCBtb25pdG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJlYWQp
IHRvCisgICAgLy8gZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNzIG1v
cmUgdGhhbiBhIHRpbWVvdXQuCisgICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOworCisgICAg
Y2hhciBtc2dbMl07CisgICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVsX3Vu
aXhfbmV3KGNoaWxkU3Rkb3V0KTsKKyAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoaW9D
aGFubmVsLCBtc2csIDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgeworICAgICAgICAv
LyBDaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVh
ZHkKKyAgICAgICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBtb25p
dG9yIGNhbiBzZWUgaXQuCisgICAgICAgIGtDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08nICYm
IG1zZ1sxXSA9PSAnSyc7CisgICAgfQorICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5uZWwp
OworICAgIGNsb3NlKGNoaWxkU3Rkb3V0KTsKKworICAgIC8vIFRoZSB0aW1lb3V0IHdhcyByZWFj
aGVkIGFuZCB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCisgICAgLy8gc3RvcCBpdCBp
bm1lZGlhdGVseSwgYW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgorICAgIGlmICgha0NoaWxk
SXNSZWFkeSkKKyAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworc3RhdGljIHZvaWQgY2hl
Y2tBdHNwaUFjY2Vzc2libGUoQXRzcGlBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFy
KiB0YXJnZXROYW1lLCBBdHNwaVJvbGUgdGFyZ2V0Um9sZSkKK3sKKyAgICBnX2Fzc2VydChBVFNQ
SV9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gbmFtZShh
dHNwaV9hY2Nlc3NpYmxlX2dldF9uYW1lKGFjY2Vzc2libGUsIDApKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGFyZ2V0TmFtZSwgPT0sIG5hbWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh0
YXJnZXRSb2xlLCA9PSwgYXRzcGlfYWNjZXNzaWJsZV9nZXRfcm9sZShhY2Nlc3NpYmxlLCAwKSk7
Cit9CisKK3N0YXRpYyBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZmluZFRlc3RTZXJ2ZXJBcHBs
aWNhdGlvbigpCit7CisgICAgLy8gT25seSBvbmUgZGVza3RvcCBpcyBzdXBwb3J0ZWQgYnkgQVRT
UEkgYXQgdGhlIG1vbWVudC4KKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZGVza3RvcCA9
IGFkb3B0R1JlZihhdHNwaV9nZXRfZGVza3RvcCgwKSk7CisKKyAgICAvLyBMb29rIGZvciB0aGUg
c2VydmVyIGFwcGxpY2F0aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCisgICAgR1JlZlB0cjxBdHNw
aUFjY2Vzc2libGU+IGN1cnJlbnQ7CisgICAgaW50IGNoaWxkQ291bnQgPSBhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9jb3VudChkZXNrdG9wLmdldCgpLCAwKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICBjdXJyZW50ID0gYWRvcHRHUmVmKGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCksIGksIDApKTsK
KyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJyZW50
LmdldCgpLCAwKSwga1Rlc3RTZXJ2ZXJBcHBOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QXRzcGlC
YXNpY0hpZXJhcmNoeShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAv
LyBUaGUgdGVzdCBzZXJ2ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisg
ICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5kVGVzdFNlcnZl
ckFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0U2Vy
dmVyQXBwLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNlcnZlckFwcC5n
ZXQoKSwgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBMSUNBVElPTik7
CisKKyAgICAvLyBUaGUgbWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJv
Y2VzcykuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJlbnQgPSB0ZXN0
U2VydmVyQXBwOworICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50Q2hpbGQgPSBh
ZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVu
dC5nZXQoKSwgMCwgMCkpOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVu
dENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdl
dCgpLCAiIiwgQVRTUElfUk9MRV9GUkFNRSk7CisKKyAgICAvLyBUaGUgV2ViVmlldydzIGFjY2Vz
c2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVu
dENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0
X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lT
X0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2li
bGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOworCisgICAgLy8g
VGhlIFdlYlBhZ2UncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgorICAgIGN1
cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Cisg
ICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAg
ICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xF
X0ZJTExFUik7CisKKyAgICAvLyBIVE1MIHJvb3QgZWxlbWVudCdzIGFjY2Vzc2libGUgZWxlbWVu
dCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAg
Y3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVu
dFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShj
dXJyZW50Q2hpbGQuZ2V0KCkpKTsKKworICAgIC8vIEhUTUwgYm9keSdzIGFjY2Vzc2libGUgZWxl
bWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Cisg
ICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3Vy
cmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJM
RShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50
Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0RPQ1VNRU5UX0ZSQU1FKTsKKworICAgIC8vIEhU
TUwgSDEncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFy
ZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVf
Z2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNz
ZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tB
dHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiVGhpcyBpcyBhIHRlc3QiLCBBVFNQ
SV9ST0xFX0hFQURJTkcpOworCisgICAgLy8gSFRNTCBmaXJzdCBwYXJhZ3JhcGgncyBhY2Nlc3Np
YmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAxLCAwKTsKKyAg
ICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAg
IGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVf
UEFSQUdSQVBIKTsKKworICAgIC8vIEhUTUwgc2Vjb25kIHBhcmFncmFwaCdzIGFjY2Vzc2libGUg
ZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDIsIDApOworICAgIGdf
YXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hl
Y2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJB
R1JBUEgpOworCisgICAgLy8gSFRNTCBsaW5rJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJv
Y2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hp
bGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50Lmdl
dCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGls
ZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwg
ImEgbGluayIsIEFUU1BJX1JPTEVfTElOSyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAg
ICAvLyBXZSBpbnN0YWxsIGEgaGFuZGxlciB0byBlbnN1cmUgdGhhdCB3ZSBraWxsIHRoZSBjaGls
ZCBwcm9jZXNzCisgICAgLy8gaWYgdGhlIHBhcmVudCBkaWVzIGJlY2F1c2Ugb2Ygd2hhdGV2ZXIg
dGhlIHJlYXNvbiBpcy4KKyAgICBzaWduYWwoU0lHQUJSVCwgc2lnQWJvcnRIYW5kbGVyKTsKKwor
ICAgIC8vIFN0YXJ0IHRoZSBhY2Nlc3NpYmlsaXR5IHRlc3Qgc2VydmVyIGFuZCBsb2FkIHRoZSB0
ZXN0cy4KKyAgICBzdGFydFRlc3RTZXJ2ZXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRBY2Nlc3NpYmlsaXR5IiwgImF0c3BpLWJhc2ljLWhpZXJhcmNoeSIsIHRlc3RBdHNwaUJhc2lj
SGllcmFyY2h5KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgLy8gRW5zdXJlIHdlIHN0
b3AgdGhlIHNlcnZlci4KKyAgICBzdG9wVGVzdFNlcnZlcigpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDQyYTE4ZjMuLmFmYzllODcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTU2Nyw2ICs1NjcsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wpOwogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShHVEspCisgICAgU3RyaW5nIGdldEFjY2Vzc2liaWxpdHlQbHVnSUQoKSBj
b25zdCB7IHJldHVybiBtX2FjY2Vzc2liaWxpdHlQbHVnSUQ7IH0KKyNlbmRpZgorCiAgICAgdm9p
ZCBiZWdpblByaW50aW5nKFdlYkZyYW1lUHJveHkqLCBjb25zdCBQcmludEluZm8mKTsKICAgICB2
b2lkIGVuZFByaW50aW5nKCk7CiAgICAgdm9pZCBjb21wdXRlUGFnZXNGb3JQcmludGluZyhXZWJG
cmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJiwgUGFzc1JlZlB0cjxDb21wdXRlZFBhZ2VzQ2Fs
bGJhY2s+KTsKQEAgLTc0NSw2ICs3NDksNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oR1RL
KQogICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmLCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZvaWQgYmluZEFjY2Vzc2liaWxpdHlUcmVlKGNv
bnN0IFN0cmluZyYpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgZ2V0RWRp
dG9yQ29tbWFuZHNGb3JLZXlFdmVudChWZWN0b3I8U3RyaW5nPiYpOwpAQCAtOTcxLDYgKzk3Niwx
MCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlQbHVn
SUQ7CisjZW5kaWYKKwogICAgIGludDY0X3QgbV9zcGVsbERvY3VtZW50VGFnOwogICAgIGJvb2wg
bV9oYXNTcGVsbERvY3VtZW50VGFnOwogICAgIHVuc2lnbmVkIG1fcGVuZGluZ0xlYXJuT3JJZ25v
cmVXb3JkTWVzc2FnZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNWMyMTMzYS4uY2YwMjEyYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xNDcs
NiArMTQ3LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBQTEFURk9STShHVEsp
CiAgICAgIyBTdXBwb3J0IGZvciBHVEsrIHBsYXRmb3JtIGtleWJpbmRpbmdzCiAgICAgR2V0RWRp
dG9yQ29tbWFuZHNGb3JLZXlFdmVudChBdG9taWNTdHJpbmcgZXZlbnRUeXBlKSAtPiAoVmVjdG9y
PFdURjo6U3RyaW5nPiBjb21tYW5kc0xpc3QpCisKKyAgICAjIFN1cHBvcnQgZm9yIGNvbm5lY3Rp
bmcgdGhlIEFjY2Vzc2liaWxpdHkgd29ybGRzIG9mIHRoZSBVSSBhbmQgdGhlIFdlYiBwcm9jZXNz
ZXMKKyAgICBCaW5kQWNjZXNzaWJpbGl0eVRyZWUoV1RGOjpTdHJpbmcgcGx1Z0lEKQogI2VuZGlm
CiAKICAgICAjIEJhY2tGb3J3YXJkIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggMTEyN2RkZS4uZjZiMzAwZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApA
QCAtNDksNiArNDksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldEVkaXRvckNvbW1hbmRzRm9y
S2V5RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFYKICAgICBtX3BhZ2VDbGll
bnQtPmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQobV9rZXlFdmVudFF1ZXVlLmZpcnN0KCks
IGV2ZW50VHlwZSwgY29tbWFuZHNMaXN0KTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmJpbmRB
Y2Nlc3NpYmlsaXR5VHJlZShjb25zdCBTdHJpbmcmIHBsdWdJRCkKK3sKKyAgICBtX2FjY2Vzc2li
aWxpdHlQbHVnSUQgPSBwbHVnSUQ7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUmVjZW50
U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDNk
MGUyMjIuLjg1MGRmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC01
MTcsNiArNTE3LDExIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlu
aXNoTG9hZCgpCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4K
ICAgICBpZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+
bG9hZExpc3RlbmVyKCkpCiAgICAgICAgIGxvYWRMaXN0ZW5lci0+ZGlkRmluaXNoTG9hZChtX2Zy
YW1lKTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBFbnN1cmUgdGhlIGFjY2Vzc2liaWxp
dHkgaGllcmFyY2h5IGlzIHVwZGF0ZWQgYWZ0ZXIgbG9hZGluZy4KKyAgICB3ZWJQYWdlLT51cGRh
dGVBY2Nlc3NpYmlsaXR5VHJlZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDY2MGY2ZjkuLjk5NGJjM2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE4OCw2ICsx
ODgsOCBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICAsIG1fa2V5Ym9hcmRFdmVudEJlaW5n
SW50ZXJwcmV0ZWQoMCkKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICAsIG1fbmF0aXZlV2luZG93
KHBhcmFtZXRlcnMubmF0aXZlV2luZG93KQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICwgbV9h
Y2Nlc3NpYmlsaXR5T2JqZWN0KDApCiAjZW5kaWYKICAgICAsIG1fc2V0Q2FuU3RhcnRNZWRpYVRp
bWVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJ1bkxvb3AoKSwgdGhpcywgJldlYlBhZ2U6OnNldENh
blN0YXJ0TWVkaWFUaW1lckZpcmVkKQogICAgICwgbV9maW5kQ29udHJvbGxlcih0aGlzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNDAwNzJjZi4u
YTI4MTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CkBAIC03MCw2ICs3MCw3IEBACiAKICNpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQXJndW1l
bnRDb2RlcnNHdGsuaCIKKyNpbmNsdWRlICJXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5o
IgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzk3LDYgKzM5OCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGdlc3R1cmVXaWxsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBib29sJiBjYW5CZWdpblBhbm5pbmcpOwogICAgIHZvaWQgZ2VzdHVyZURpZFNjcm9sbChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBnZXN0dXJlRGlkRW5kKCk7CisKKyNl
bGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCk7CiAj
ZW5kaWYKIAogICAgIHZvaWQgc2V0Q29tcG9zaXRpb25Gb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYg
Y29tcG9zaXRpb25TdHJpbmcsIHVpbnQ2NF90IGZyb20sIHVpbnQ2NF90IGxlbmd0aCk7CkBAIC01
OTYsOSArNjAwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGVkSW5kZXhG
b3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJbmRleCk7CiAgICAgdm9pZCBzZXRUZXh0Rm9y
QWN0aXZlUG9wdXBNZW51KGludDMyX3QgaW5kZXgpOwogCi0jaWYgUExBVEZPUk0oR1RLKSAgICAK
KyNpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBmYWlsZWRUb1Nob3dQb3B1cE1lbnUoKTsKLSNl
bmRpZiAgICAKKyNlbmRpZgogCiAgICAgdm9pZCBkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChj
b25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHZvaWQgZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCk7
CkBAIC02NzUsNiArNjc5LDggQEAgcHJpdmF0ZToKICAgICBIV05EIG1fbmF0aXZlV2luZG93Owog
CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fZ2VzdHVyZVRhcmdldE5vZGU7CisjZWxpZiBQ
TEFURk9STShHVEspCisgICAgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIG1fYWNjZXNzaWJp
bGl0eU9iamVjdDsKICNlbmRpZgogICAgIAogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlBhZ2U+IG1f
c2V0Q2FuU3RhcnRNZWRpYVRpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2Jq
ZWN0R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjc1MWRiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgiCisKKyNp
bmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVG
SU5FX1RZUEUoV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QsIHdlYl9wYWdlX2FjY2Vzc2liaWxp
dHlfb2JqZWN0LCBBVEtfVFlQRV9QTFVHKQorCitzdGF0aWMgQXRrT2JqZWN0KiBhY2Nlc3NpYmls
aXR5Um9vdE9iamVjdFdyYXBwZXIoQXRrT2JqZWN0KiBhdGtPYmplY3QpCit7CisgICAgaWYgKCFB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBBWE9iamVjdENh
Y2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CisKKyAgICBXZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdCogYWNjZXNzaWJsZSA9IFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09iamVj
dCk7CisgICAgaWYgKCFhY2Nlc3NpYmxlLT5tX3BhZ2UpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUGFnZSogcGFnZSA9IGFjY2Vzc2libGUtPm1fcGFnZS0+Y29yZVBhZ2UoKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgRnJhbWUqIGNvcmUgPSBwYWdlLT5tYWlu
RnJhbWUoKTsKKyAgICBpZiAoIWNvcmUgfHwgIWNvcmUtPmRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm9vdCA9IGNvcmUtPmRvY3VtZW50
KCktPmF4T2JqZWN0Q2FjaGUoKS0+cm9vdE9iamVjdCgpOworICAgIGlmICghcm9vdCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IHJvb3QtPndyYXBwZXIoKTsK
KyAgICBpZiAoIWF4Um9vdCB8fCAhQVRLX0lTX09CSkVDVChheFJvb3QpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBheFJvb3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlBhZ2VBY2Nl
c3NpYmlsaXR5T2JqZWN0SW5pdGlhbGl6ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBpZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5
X29iamVjdF9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKQorICAgICAgICBBVEtfT0JKRUNUX0NM
QVNTKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X3BhcmVudF9jbGFzcyktPmluaXRpYWxp
emUoYXRrT2JqZWN0LCBkYXRhKTsKKworICAgIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNU
KGF0a09iamVjdCktPm1fcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZSo+KGRhdGEpOwor
ICAgIGF0a19vYmplY3Rfc2V0X3JvbGUoYXRrT2JqZWN0LCBBVEtfUk9MRV9GSUxMRVIpOworfQor
CitzdGF0aWMgZ2ludCB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldEluZGV4SW5QYXJlbnQo
QXRrT2JqZWN0ICphdGtPYmplY3QpCit7CisgICAgLy8gQW4gQXRrUGx1ZyBpcyB0aGUgb25seSBj
aGlsZCBhbiBBdGtTb2NrZXQgY2FuIGhhdmUuCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBn
aW50IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxkcmVuKEF0a09iamVjdCogYXRr
T2JqZWN0KQoreworICAgIEF0a09iamVjdCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290
T2JqZWN0V3JhcHBlcihhdGtPYmplY3QpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIEF0a09iamVjdCogd2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZDaGlsZChBdGtPYmplY3QqIGF0a09iamVjdCwgZ2ludCBp
bmRleCkKK3sKKyAgICAvLyBJdCdzIHN1cHBvc2VkIHRvIGhhdmUgZWl0aGVyIG9uZSBjaGlsZCBv
ciB6ZXJvLgorICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiAxKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEF0a09iamVjdCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0
V3JhcHBlcihhdGtPYmplY3QpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBhdGtfb2JqZWN0X3NldF9wYXJlbnQocm9vdE9iamVjdCwgYXRrT2JqZWN0KTsK
KyAgICBnX29iamVjdF9yZWYocm9vdE9iamVjdCk7CisKKyAgICByZXR1cm4gcm9vdE9iamVjdDsK
K30KKworc3RhdGljIHZvaWQgd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfaW5pdChXZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZSkKK3sKK30KKworc3RhdGljIHZvaWQg
d2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfY2xhc3NfaW5pdChXZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdENsYXNzKiBrbGFzcykKK3sKKyAgICBBdGtPYmplY3RDbGFzcyogYXRrT2JqZWN0
Q2xhc3MgPSBBVEtfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIC8vIE5vIG5lZWQgdG8gaW1w
bGVtZW50IGdldF9wYXJlbnQoKSBoZXJlIHNpbmNlIHRoaXMgaXMgYSBzdWJjbGFzcworICAgIC8v
IG9mIEF0a1BsdWcgYW5kIGFsbCB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGF0IGZ1bmN0aW9uIHdp
bGwgYmUKKyAgICAvLyBpbXBsZW1lbnRlZCBieSB0aGUgQVRLIGJyaWRnZS4KKyAgICBhdGtPYmpl
Y3RDbGFzcy0+aW5pdGlhbGl6ZSA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0SW5pdGlhbGl6
ZTsKKyAgICBhdGtPYmplY3RDbGFzcy0+Z2V0X2luZGV4X2luX3BhcmVudCA9IHdlYlBhZ2VBY2Nl
c3NpYmlsaXR5T2JqZWN0R2V0SW5kZXhJblBhcmVudDsKKyAgICBhdGtPYmplY3RDbGFzcy0+Z2V0
X25fY2hpbGRyZW4gPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbjsKKyAg
ICBhdGtPYmplY3RDbGFzcy0+cmVmX2NoaWxkID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RS
ZWZDaGlsZDsKK30KKworV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0TmV3KFdlYlBhZ2UqIHBhZ2UpCit7CisgICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBBVEtfT0JKRUNUKGdfb2JqZWN0X25ldyhXRUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JK
RUNULCBOVUxMKSk7CisgICAgYXRrX29iamVjdF9pbml0aWFsaXplKG9iamVjdCwgcGFnZSk7Cisg
ICAgcmV0dXJuIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9iamVjdCk7Cit9CisKK3Zv
aWQgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZyZXNoKFdlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBhY2Nlc3NpYmxlKQoreworICAgIC8vIFdlIGp1c3QgbmVlZCB0byBlbnN1cmUgdGhh
dCB0aGVyZSdzIGEgY29ubmVjdGlvbiBpbiB0aGUgQVRLCisgICAgLy8gd29ybGQgYmV0d2VlbiB0
aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFuZCB0aGUgQXRrT2JqZWN0IG9mCisgICAgLy8gdGhl
IGFjY2Vzc2liaWxpdHkgb2JqZWN0IGZvciB0aGUgcm9vdCBvZiB0aGUgRE9NIHRyZWUuCisgICAg
QXRrT2JqZWN0KiByb290T2JqZWN0ID0gYWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVyKEFU
S19PQkpFQ1QoYWNjZXNzaWJsZSkpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0
dXJuOworICAgIGF0a19vYmplY3Rfc2V0X3BhcmVudChyb290T2JqZWN0LCBBVEtfT0JKRUNUKGFj
Y2Vzc2libGUpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzJlZTNhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNz
aWJpbGl0eU9iamVjdEd0ay5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEd0a19oCisjZGVmaW5lIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrX2gKKwor
I2luY2x1ZGUgPGF0ay9hdGsuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdl
OworfQorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklM
SVRZX09CSkVDVCAgICAgICAgICAgICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9iamVjdCkg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCX1RZUEVf
UEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QpKQor
I2RlZmluZSBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVF9DTEFTUyhrbGFzcykgICAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklM
SVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcykpCisjZGVmaW5lIFdF
Ql9JU19QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9iamVjdCkgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZX09C
SkVDVCkpCisjZGVmaW5lIFdFQl9JU19QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUX0NMQVNTKGts
YXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJfVFlQRV9QQUdFX0FD
Q0VTU0lCSUxJVFlfT0JKRUNUKSkKKyNkZWZpbmUgV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpF
Q1RfR0VUX0NMQVNTKG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVjdCks
IFdFQl9UWVBFX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QsIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3QgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3RDbGFzcyBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzOwor
CitzdHJ1Y3QgX1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKKyAgICBBdGtQbHVnIHBhcmVu
dDsKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIG1fcGFnZTsKK307CisKK3N0cnVjdCBfV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3RDbGFzcyB7CisgICAgQXRrUGx1Z0NsYXNzIHBhcmVudENsYXNzOwor
fTsKKworR1R5cGUgd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfZ2V0X3R5cGUoKTsKKwor
V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0TmV3
KFdlYktpdDo6V2ViUGFnZSopOworCit2b2lkIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVm
cmVzaChXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCopOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLy8gV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKaW5kZXggYTI1ZTFm
Ny4uNmI3ZTUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQYWdlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9G
b2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC0zNyw2ICsz
OSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IApAQCAtNDQsNyArNDcsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUGFnZTo6
cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIENy
ZWF0ZSB0aGUgYWNjZXNzaWJsZSBvYmplY3QgKHRoZSBwbHVnKSB0aGF0IHdpbGwgc2VydmUgYXMg
dGhlCisgICAgLy8gZW50cnkgcG9pbnQgdG8gdGhlIFdlYiBwcm9jZXNzLCBhbmQgc2VuZCBhIG1l
c3NhZ2UgdG8gdGhlIFVJCisgICAgLy8gcHJvY2VzcyB0byBjb25uZWN0IHRoZSB0d28gd29ybGRz
IHRocm91Z2ggdGhlIGFjY2Vzc2liaWxpdHkKKyAgICAvLyBvYmplY3QgdGhlcmUgc3BlY2lmaWNh
bGx5IHBsYWNlZCBmb3IgdGhhdCBwdXJwb3NlICh0aGUgc29ja2V0KS4KKyAgICBtX2FjY2Vzc2li
aWxpdHlPYmplY3QgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5ldyh0aGlzKTsKKyAgICBH
T3duUHRyPGdjaGFyPiBwbHVnSUQoYXRrX3BsdWdfZ2V0X2lkKEFUS19QTFVHKG1fYWNjZXNzaWJp
bGl0eU9iamVjdCkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJpbmRBY2Nl
c3NpYmlsaXR5VHJlZShTdHJpbmcocGx1Z0lELmdldCgpKSkpOworfQorCit2b2lkIFdlYlBhZ2U6
OnVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCkKK3sKKyAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eU9i
amVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RS
ZWZyZXNoKG1fYWNjZXNzaWJpbGl0eU9iamVjdCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZv
cm1QcmVmZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NjJhYTY4Li4w
ZWNiYmExIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMDEtMDkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2Fu
Y2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhp
ZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuc3VyZSB0aGUgYWNjZXNzaWJpbGl0
eSBpbmZyYXN0cnVjdHVyZSBpcyBhdmFpbGFibGUgd2hlbiBydW5uaW5nCisgICAgICAgIHRoZSB1
bml0IHRlc3RzLCBvdGhlcndpc2UgV0syJ3MgYWNjZXNzaWJpbGl0eSB0ZXN0cyB3b24ndCB3b3Jr
LgorCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOgorICAgICAgICAoVGVzdFJ1bm5l
cik6CisgICAgICAgIChUZXN0UnVubmVyLl9sb29rdXBBdHNwaTJCaW5hcnkpOiBOZXcuIExvb2tz
IGZvciB0aGUgZGlyZWN0b3J5CisgICAgICAgIHdoZXJlIGF0LXNwaTIncyBzdHVmZiBpcyBsb2Nh
dGVkIChsaWtlIGF0LXNwaS1idXMtbGF1bmNoZXIgYW5kCisgICAgICAgIGF0LXNwaTItcmVnaXN0
cnlkKS4KKyAgICAgICAgKFRlc3RSdW5uZXIucnVuKTogSW5pdGlhbGl6ZSB0aGUgYWNjZXNzaWJp
bGl0eSBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICAqIGd0ay9qaGJ1aWxkLm1vZHVsZXM6IEFk
ZGVkIGF0LXNwaTItY29yZSBhbmQgYXQtc3BpMi1hdGsuCisKIDIwMTItMDEtMDkgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IEZpeCBtYWtlIGRpc3RjaGVjayBpc3N1ZXMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1
bi1ndGstdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5kZXggNzBjZjI3NC4u
ZGJlYjg2OSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCisrKyBiL1Rv
b2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwpAQCAtMjUsNyArMjUsNyBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogCiAgICAgVEVTVF9ESVJTID0gWyAidW5pdHRlc3RzIiwgIldlYktpdDJBUElUZXN0cyIg
XQogICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NDcxNwotICAgIFNLSVBQRUQgPSBbICJ1bml0dGVzdHMvdGVzdGRvd25sb2FkIiwgInVuaXR0ZXN0
cy90ZXN0d2VidmlldyIsICJ1bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIl0KKyAgICBTS0lQUEVE
ID0gWyAidW5pdHRlc3RzL3Rlc3Rkb3dubG9hZCIsICJ1bml0dGVzdHMvdGVzdHdlYnZpZXciLCAi
dW5pdHRlc3RzL3Rlc3R3ZWJyZXNvdXJjZSIgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgog
ICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBFeGVjdXRpdmUoKQpAQCAtNjQsNiArNjQsMTggQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0ZXN0
X3BhdGgpIGFuZCBvcy5hY2Nlc3ModGVzdF9wYXRoLCBvcy5YX09LKToKICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fdGVzdHMuYXBwZW5kKHRlc3RfcGF0aCkKIAorICAgIGRlZiBfbG9va3VwQXRz
cGkyQmluYXJ5KHNlbGYsIGpoYnVpbGRfcGF0aCwgZmlsZW5hbWUpOgorICAgICAgICBleGVjX3By
ZWZpeCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbamhidWlsZF9wYXRoICwncGtnLWNv
bmZpZycsICctLXZhcmlhYmxlPWV4ZWNfcHJlZml4JywgJ2F0c3BpLTInXSkKKyAgICAgICAgcGF0
aHNfdG9fY2hlY2sgPSBbICJsaWJleGVjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJs
aWIvYXQtc3BpMi1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIzMi9hdC1z
cGkyLWNvcmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliNjQvYXQtc3BpMi1jb3Jl
IiBdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX2NoZWNrOgorICAgICAgICAgICAgZmls
ZXBhdGggPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsIHBhdGgsIGZpbGVuYW1lKQorICAgICAg
ICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgIHJldHVy
biBmaWxlcGF0aAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiBydW4oc2VsZik6
CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1zX3Bh
dGgpKQpAQCAtNzgsMTIgKzkwLDQ2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBl
eGl0X3N0YXR1c1swXSA9IGVycm9yLmV4aXRfY29kZQogCiAgICAgICAgIGpoYnVpbGRfcGF0aCA9
IG9zLnBhdGguam9pbihzZWxmLl9ndGtfdG9vbHNfZGlyZWN0b3J5LCAicnVuLXdpdGgtamhidWls
ZCIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUncyBubyBYJ3MgcHJvcGVydHkgQVRfU1BJ
X0JVUyBwcmV2aW91c2x5IHNldCwKKyAgICAgICAgIyBvdGhlcndpc2UgdGhlIGFjY2Vzc2liaWxp
dHkgYnVzIGNvdWxkbid0IGJlIHByb3Blcmx5IGxhdW5jaGVkLgorICAgICAgICBFeGVjdXRpdmUo
KS5wb3BlbihbInhwcm9wIiwgIi1yb290IiwgIi1yZW1vdmUiLCAiQVRfU1BJX0JVUyJdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnY9dGVzdF9lbnYsIHN0ZGVycj1zdWJwcm9jZXNzLlBJ
UEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGFj
Y2Vzc2liaWxpdHkgYnVzIGlzIGxhdW5jaGVkLgorICAgICAgICBhMTF5X2J1c19sYXVuY2hlZCA9
IEZhbHNlCisgICAgICAgIGExMXlfYnVzX2xhdW5jaGVyX3BhdGggPSBzZWxmLl9sb29rdXBBdHNw
aTJCaW5hcnkoamhidWlsZF9wYXRoLCAnYXQtc3BpLWJ1cy1sYXVuY2hlcicpCisgICAgICAgIGlm
IGExMXlfYnVzX2xhdW5jaGVyX3BhdGg6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgYTExeV9idXNfbGF1bmNoZXIgPSBFeGVjdXRpdmUoKS5wb3BlbihbYTExeV9idXNfbGF1bmNo
ZXJfcGF0aF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbnY9dGVzdF9lbnYsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgYTExeV9idXNfbGF1bmNoZWQgPSBUcnVlCisg
ICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFp
bGVkIHRvIGxhdW5jaCB0aGUgYWNjZXNzaWJpbGl0eSBidXNcbiIpCisgICAgICAgICAgICAgICAg
c3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgYTExeV9yZWdpc3RyeWRfcnVubmluZyA9IEZh
bHNlCisgICAgICAgIGExMXlfcmVnaXN0cnlkX3BhdGggPSBzZWxmLl9sb29rdXBBdHNwaTJCaW5h
cnkoamhidWlsZF9wYXRoLCAnYXQtc3BpMi1yZWdpc3RyeWQnKQorICAgICAgICBpZiBhMTF5X3Jl
Z2lzdHJ5ZF9wYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGExMXlfcmVn
aXN0cnlkID0gRXhlY3V0aXZlKCkucG9wZW4oWyIlcy9hdC1zcGkyLXJlZ2lzdHJ5ZCIgJSBhdHNw
aTJfZXhlY19wYXRoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVudj10ZXN0X2Vudiwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICAgICBhMTF5X3JlZ2lzdHJ5ZF9ydW5uaW5nID0g
VHJ1ZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkZhaWxlZCB0byBydW4gdGhlIGFjY2Vzc2liaWxpdHkgcmVnaXN0cnlcbiIpCisgICAgICAg
ICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5f
dGVzdHM6CiAgICAgICAgICAgICBvdXQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW2po
YnVpbGRfcGF0aCAsJ2d0ZXN0ZXInLCB0ZXN0XSwgZW52PXRlc3RfZW52LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9X2Vycm9yX2hh
bmRsZXIpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKG91dCkKICAgICAgICAgICAgIHN5
cy5zdGRvdXQuZmx1c2goKQogCisgICAgICAgIGlmIGExMXlfcmVnaXN0cnlkX3J1bm5pbmc6Cisg
ICAgICAgICAgICBhMTF5X3JlZ2lzdHJ5ZC5raWxsKCkKKyAgICAgICAgaWYgYTExeV9idXNfbGF1
bmNoZWQ6CisgICAgICAgICAgICBhMTF5X2J1c19sYXVuY2hlci5raWxsKCkKKwogICAgICAgICBp
ZiBleGl0X3N0YXR1c1swXToKICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlRlc3RzIGZh
aWxlZFxuIikKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvZ3RrL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMKaW5kZXgg
ZjFhMmM1Yi4uNDY4OTFhOSAxMDA2NDQKLS0tIGEvVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcwor
KysgYi9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzCkBAIC0xMyw2ICsxMyw4IEBACiAgICAgICA8
ZGVwIHBhY2thZ2U9ImdsaWItbmV0d29ya2luZyIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJnbm9t
ZS1pY29uLXRoZW1lIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImxpYnNvdXAiLz4KKyAgICAgIDxk
ZXAgcGFja2FnZT0iYXQtc3BpMi1jb3JlIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImF0LXNwaTIt
YXRrIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvbWV0YW1vZHVsZT4KIApAQCAtMTQ3LDQg
KzE0OSwyNyBAQAogICAgIDwvYnJhbmNoPgogICA8L2F1dG90b29scz4KIAorICA8YXV0b3Rvb2xz
IGlkPSJhdC1zcGkyLWNvcmUiPgorICAgIDxicmFuY2ggbW9kdWxlPSJwdWIvR05PTUUvc291cmNl
cy9hdC1zcGkyLWNvcmUvMi4yL2F0LXNwaTItY29yZS0yLjIuMS50YXIueHoiIHZlcnNpb249IjIu
Mi4xIgorICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIKKyAgICAgICAgICAgIGhhc2g9
InNoYTI1NjoyYTQxMjk0MjBkZWNjYTM2NTdlMTYzYTRkYmIxYTNjYjI4YWNhZmUzMmVhMTI5MjQx
N2ZkZDgxMDg0ZDQ4ZmFjIgorICAgICAgICAgICAgbWQ1c3VtPSIxODM5MTYzNzNkNjkwNmZmNmIy
MjBiZDQ0ZDE1ZmY5NyI+CisgICAgPC9icmFuY2g+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAg
IDxkZXAgcGFja2FnZT0iZ2xpYiIvPgorICAgIDwvZGVwZW5kZW5jaWVzPgorICA8L2F1dG90b29s
cz4KKworICA8YXV0b3Rvb2xzIGlkPSJhdC1zcGkyLWF0ayI+CisgICAgPGJyYW5jaCBtb2R1bGU9
InB1Yi9HTk9NRS9zb3VyY2VzL2F0LXNwaTItYXRrLzIuMi9hdC1zcGkyLWF0ay0yLjIuMS50YXIu
eHoiIHZlcnNpb249IjIuMi4xIgorICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIKKyAg
ICAgICAgICAgIGhhc2g9InNoYTI1Njo2Njc3ZGVmMzRiMTZjOWEyOGQ2YWQ5NjQ3M2VhNTZhM2Mw
ZTEzYWE5NjhlNTg0ZGYwMDRjZDQ0Yzg2OTFlYTFhIgorICAgICAgICAgICAgbWQ1c3VtPSIxOTY0
NjA5N2FjYTI1YTljMWI4YmE3YWI4ZDE3MjkxNiI+CisgICAgPC9icmFuY2g+CisgICAgPGRlcGVu
ZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgorICAgICAgPGRlcCBwYWNrYWdl
PSJhdC1zcGkyLWNvcmUiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9hdXRvdG9vbHM+CisK
IDwvbW9kdWxlc2V0PgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmlu
ZGV4IGM2ZDkxY2QuLmMxNTBjZDcgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25m
aWd1cmUuYWMKQEAgLTI4OCw2ICsyODgsNyBAQCBFTkNIQU5UX1JFUVVJUkVEX1ZFUlNJT049MC4y
MgogTElCRkZUV19SRVFVSVJFRF9WRVJTSU9OPTMuMi4yCiBDTFVUVEVSX1JFUVVJUkVEX1ZFUlNJ
T049MS44LjIKIENMVVRURVJfR1RLX1JFUVVJUkVEX1ZFUlNJT049MS4wLjIKK0FUU1BJMl9SRVFV
SVJFRF9WRVJTSU9OPTIuMi4xCiAKICMgQXZhaWxhYmxlIG1vZHVsZXMKICMKQEAgLTEwNTcsNiAr
MTA1OCwxNyBAQCBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAiY2x1
dHRlciI7IHRoZW4KICAgIEFDX1NVQlNUKENMVVRURVJfR1RLX0xJQlMpCiBmaQogCisjIGNoZWNr
IGlmIGF0c3BpMiBpcyBhdmFpbGFibGUgKG9ubHkgbmVlZGVkIGZvciBXZWJraXQyIHVuaXQgdGVz
dHMpCitpZiB0ZXN0ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyI7IHRoZW4KKyAgIFBLR19DSEVD
S19NT0RVTEVTKFtBVFNQSTJdLAorICAgICAgICAgICAgICAgICAgICAgW2F0c3BpLTIgPj0gJEFU
U1BJMl9SRVFVSVJFRF9WRVJTSU9OXSwKKyAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2F0c3Bp
Mj15ZXNdKQorCisgICBBQ19TVUJTVChbQVRTUEkyX0NGTEFHU10pCisgICBBQ19TVUJTVChbQVRT
UEkyX0xJQlNdKQorZmkKKworCiAjIGNoZWNrIGZvciBjb2RlIGNvdmVyYWdlIHN1cHBvcnQKIGlm
IHRlc3QgIiRlbmFibGVfY292ZXJhZ2UiID0gInllcyI7IHRoZW4KICAgIENPVkVSQUdFX0NGTEFH
Uz0iLU1EIgpAQCAtMTEzMCw2ICsxMTQyLDkgQEAgQU1fQ09ORElUSU9OQUwoW1VTRV9QQU5HT10s
IFt0ZXN0ICIkd2l0aF9mb250X2JhY2tlbmQiID0gInBhbmdvIl0pCiAjIEdTdHJlYW1lciBmZWF0
dXJlIGNvbmRpdGlvbmFsCiBBTV9DT05ESVRJT05BTChbVVNFX0dTVFJFQU1FUl0sIFt0ZXN0ICIk
aGF2ZV9nc3RyZWFtZXIiID0gInllcyJdKQogCisjIEFUU1BJMiBjb25kaXRpb25hbAorQU1fQ09O
RElUSU9OQUwoW0hBVkVfQVRTUEkyXSwgW3Rlc3QgIiRoYXZlX2F0c3BpMiIgPSAieWVzIl0pCisK
ICMgQWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgY29uZGl0aW9uYWwKIEFNX0NPTkRJVElPTkFMKFtV
U0VfQUNDRUxFUkFURURfQ09NUE9TSVRJTkddLCBbdGVzdCAiJHdpdGhfYWNjZWxlcmF0ZWRfY29t
cG9zaXRpbmciID0gImNhaXJvIiB8fCB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGlu
ZyIgPSAib3BlbmdsIiB8fCB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAi
Y2x1dHRlciJdKQogQU1fQ09ORElUSU9OQUwoW1VTRV9URVhUVVJFX01BUFBFUl9DQUlST10sIFt0
ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAiY2Fpcm8iXSkKLS0gCjEuNy43
LjQKCg==
</data>
<flag name="commit-queue"
          id="122254"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121688</attachid>
            <date>2012-01-09 10:55:13 -0800</date>
            <delta_ts>2012-01-10 02:16:11 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-01-09-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>60844</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA4NDJhNzdjMmU1NjZiNjAwN2MxYmNhMzFlY2Q4NzAxYTMyNzQyYTZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE5IE9jdCAyMDExIDIwOjA1OjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0wOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQy
IHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBOZXcgb3B0aW9uYWwgZGVwZW5kZW5jeSBmb3IgV0syJ3MgYWNjZXNzaWJpbGl0
eSB1bml0IHRlc3Q6IEFULVNQSTIuCgogICAgICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3Ig
QVQtU1BJMiB3aGVuIGJ1aWxkaW5nIHdpdGggV0syIHN1cHBvcnQuCgoyMDEyLTAxLTA5ICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gRXhw
b3NlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNl
ZCBBVHMKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1
ODkKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEV4cG9zZSB0
aGUgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKICAgICAgICBh
cmNoaXRlY3R1cmUgb2YgV0syIHRocm91Z2ggQXRrU29ja2V0IGFkIEF0a1BsdWcuCgogICAgICAg
IE1ha2UgdGhlIFdlYlZpZXcgd2lkZ2V0IHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5n
IHRvCiAgICAgICAgZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZSgpLgoKICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwOgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KToK
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKToKICAgICAgICAod2Via2l0
X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwOiBBZGRlZC4KICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RmluYWxpemUpOgogICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVJbml0aWFsaXplKToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlUmVmU3RhdGVTZXQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJ
bmRleEluUGFyZW50KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9p
bml0KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9jbGFzc19pbml0
KToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KToKICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oOiBBZGRlZC4KCiAg
ICAgICAgTWFrZSB0aGUgV2ViUGFnZSBjcmVhdGUgYW4gQXRrUGx1ZyBvbiBpdHMgaW5pdGlhbGl6
YXRpb24gYW5kCiAgICAgICAgc2VuZGluZyB0aGUgSUQgb2YgdGhhdCBwbHVnIHRvIHRoZSBVSSBw
cm9jZXNzLCBzbyBpdCBjYW4gZW1iZWQgdGhlCiAgICAgICAgcGx1ZyBpbiB0aGUgc29ja2V0LgoK
ICAgICAgICBBbHNvLCB0YWtlIGNhcmUgb2YgYWxsIHRoZSBuZWVkZWQgd3JhcHBpbmcgYXJvdW5k
IHRoZSBXZWJDb3JlJ3MKICAgICAgICBhY2Nlc3NpYmlsaXR5IG9iamVjdHMsIGV4cG9zaW5nIHRo
ZW0gaW4gdGhlIFVJIHByb2Nlc3MncwogICAgICAgIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IHRo
YW5rcyB0byB0aGUgc29ja2V0LXBsdWcgY29ubmVjdGlvbi4KCiAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRBY2Nlc3Np
YmlsaXR5UGx1Z0lEKToKICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CiAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CiAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJpbGl0eVRyZWUpOgogICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CiAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6
CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CiAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6V2ViUGFnZSk6CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcDogQWRkZWQuCiAgICAgICAgKGFjY2Vzc2li
aWxpdHlSb290T2JqZWN0V3JhcHBlcik6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5pdGlhbGl6ZSk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5k
ZXhJblBhcmVudCk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxk
cmVuKToKICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZDaGlsZCk6CiAgICAg
ICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2luaXQpOgogICAgICAgICh3ZWJfcGFn
ZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KToKICAgICAgICAod2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3ROZXcpOgogICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJl
ZnJlc2gpOgogICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdEd0ay5oOiBBZGRlZC4KICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUGFnZUd0ay5jcHA6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFs
aXplKToKICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSk6
CgogICAgICAgIE5ldyB1bml0IHRlc3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9y
dCBpbiBXSzJHVEsuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJp
bGl0eVRlc3RTZXJ2ZXIuY3BwOiBBZGRlZC4KICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6
IE5vdGlmeSB0aGUgcGFyZW50IHByb2Nlc3MgKHRoZSB0ZXN0KQogICAgICAgIHdoZW4gcmVhZHku
CiAgICAgICAgKG1haW4pOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW06CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHA6IEFkZGVkLgogICAgICAgIChzdG9wVGVzdFNlcnZlcik6CiAgICAgICAg
KHNpZ0Fib3J0SGFuZGxlcik6CiAgICAgICAgKHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyk6
CiAgICAgICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3IpOgogICAgICAgIChzdGFydFRlc3RTZXJ2
ZXIpOgogICAgICAgIChjaGVja0F0c3BpQWNjZXNzaWJsZSk6CiAgICAgICAgKGZpbmRUZXN0U2Vy
dmVyQXBwbGljYXRpb24pOgogICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6CiAgICAg
ICAgKGJlZm9yZUFsbCk6CiAgICAgICAgKGFmdGVyQWxsKToKCjIwMTItMDEtMDkgIE1hcmlvIFNh
bmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAgICBbR1RLXSBFeHBvc2Ug
YWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFU
cwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgRW5zdXJlIHRoZSBh
Y2Nlc3NpYmlsaXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcKICAg
ICAgICB0aGUgdW5pdCB0ZXN0cywgb3RoZXJ3aXNlIFdLMidzIGFjY2Vzc2liaWxpdHkgdGVzdHMg
d29uJ3Qgd29yay4KCiAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6CiAgICAgICAgKFRl
c3RSdW5uZXIpOgogICAgICAgIChUZXN0UnVubmVyLl9sb29rdXBBdHNwaTJCaW5hcnkpOiBOZXcu
IExvb2tzIGZvciB0aGUgZGlyZWN0b3J5CiAgICAgICAgd2hlcmUgYXQtc3BpMidzIHN0dWZmIGlz
IGxvY2F0ZWQgKGxpa2UgYXQtc3BpLWJ1cy1sYXVuY2hlciBhbmQKICAgICAgICBhdC1zcGkyLXJl
Z2lzdHJ5ZCkuCiAgICAgICAgKFRlc3RSdW5uZXIucnVuKTogSW5pdGlhbGl6ZSB0aGUgYWNjZXNz
aWJpbGl0eSBpbmZyYXN0cnVjdHVyZS4KCiAgICAgICAgKiBndGsvamhidWlsZC5tb2R1bGVzOiBB
ZGRlZCBhdC1zcGkyLWNvcmUgYW5kIGF0LXNwaTItYXRrLgotLS0KIENoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODAgKysrKysrKwogU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsK
IC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgICAgICAgIHwgICAz
MSArKysKIC4uLi9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAgICAgICAg
IHwgIDEyOSArKysrKysrKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlLmggICAgICAgICAgfCAgIDYyICsrKysrKwogLi4uL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJp
bGl0eVRlc3RTZXJ2ZXIuY3BwICAgICAgfCAgIDU5ICsrKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSB8ICAgMjAgKysKIC4uLi9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCAgICAgIHwgIDIyOSArKysrKysrKysrKysr
KysrKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oICAgICAgICAg
ICAgfCAgICA5ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4gIHwgICAgMyArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94
eUd0ay5jcHAgICB8ICAgIDUgKwogLi4uL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcCAgICAgICAgfCAgICA1ICsKIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oICAgICAgICB8ICAgMTAgKy0KIC4uLi9XZWJQYWdlL2d0ay9XZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgIHwgIDE0MCArKysrKysrKysrKysKIC4uLi9XZWJQ
YWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oICAgIHwgICA2NCArKysrKysK
IC4uLi9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgIHwgICAx
OSArKy0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxOSArKwogVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDQ4ICsrKystCiBUb29scy9ndGsvamhidWlsZC5tb2R1bGVzICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMjUgKysrCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKysKIDIyIGZpbGVzIGNoYW5nZWQsIDk4NSBpbnNl
cnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oCgpkaWZmIC0tZ2l0IGEvQ2hhbmdl
TG9nIGIvQ2hhbmdlTG9nCmluZGV4IDg0ZTU0ZTUuLjc0MTNiOTQgMTAwNjQ0Ci0tLSBhL0NoYW5n
ZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMS0wOSAgTWFyaW8g
U2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRXhw
b3NlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNl
ZCBBVHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IG9wdGlvbmFsIGRlcGVuZGVuY3kgZm9yIFdLMidzIGFjY2Vzc2liaWxpdHkgdW5pdCB0ZXN0OiBB
VC1TUEkyLgorCisgICAgICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgQVQtU1BJMiB3aGVu
IGJ1aWxkaW5nIHdpdGggV0syIHN1cHBvcnQuCisKIDIwMTItMDEtMDQgIEpvbiBMZWUgIDxqb25s
ZWVAYXBwbGUuY29tPgogCiAgICAgICAgIENsaWNraW5nIG9uIHRoZSBjYW5jZWwgYnV0dG9uIG9u
IHJlYWRvbmx5IGFuZCBkaXNhYmxlZCBzZWFyY2ggZmllbGRzIGRhcmtlbnMgYXMgaWYgdGhlIHNl
YXJjaCBmaWVsZCB3YXMgZWRpdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1NWQxODRhLi40NTc1MjIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTItMDEtMDkgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3Np
YmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSB0aGUgYWNj
ZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKKyAgICAgICAgYXJjaGl0
ZWN0dXJlIG9mIFdLMiB0aHJvdWdoIEF0a1NvY2tldCBhZCBBdGtQbHVnLgorCisgICAgICAgIE1h
a2UgdGhlIFdlYlZpZXcgd2lkZ2V0IHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5nIHRv
CisgICAgICAgIGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoKS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQp
OgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKToKKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RmluYWxpemUpOgorICAgICAgICAod2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKToKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZUluaXRpYWxpemUpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VBY2Nlc3NpYmxlUmVmU3RhdGVTZXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nl
c3NpYmxlR2V0SW5kZXhJblBhcmVudCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9h
Y2Nlc3NpYmxlX2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJs
ZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5ldyk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxl
Lmg6IEFkZGVkLgorCisgICAgICAgIE1ha2UgdGhlIFdlYlBhZ2UgY3JlYXRlIGFuIEF0a1BsdWcg
b24gaXRzIGluaXRpYWxpemF0aW9uIGFuZAorICAgICAgICBzZW5kaW5nIHRoZSBJRCBvZiB0aGF0
IHBsdWcgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIGl0IGNhbiBlbWJlZCB0aGUKKyAgICAgICAgcGx1
ZyBpbiB0aGUgc29ja2V0LgorCisgICAgICAgIEFsc28sIHRha2UgY2FyZSBvZiBhbGwgdGhlIG5l
ZWRlZCB3cmFwcGluZyBhcm91bmQgdGhlIFdlYkNvcmUncworICAgICAgICBhY2Nlc3NpYmlsaXR5
IG9iamVjdHMsIGV4cG9zaW5nIHRoZW0gaW4gdGhlIFVJIHByb2Nlc3MncworICAgICAgICBhY2Nl
c3NpYmlsaXR5IGhpZXJhcmNoeSB0aGFua3MgdG8gdGhlIHNvY2tldC1wbHVnIGNvbm5lY3Rpb24u
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dl
YlBhZ2VQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YmluZEFj
Y2Vzc2liaWxpdHlUcmVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIp
OgorICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RJbml0aWFsaXplKToKKyAgICAg
ICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5kZXhJblBhcmVudCk6CisgICAgICAg
ICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbik6CisgICAgICAgICh3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZkNoaWxkKToKKyAgICAgICAgKHdlYl9wYWdlX2FjY2Vz
c2liaWxpdHlfb2JqZWN0X2luaXQpOgorICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9v
YmplY3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5l
dyk6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZnJlc2gpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsu
aDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlQWNjZXNzaWJpbGl0eVRyZWUpOgorCisgICAgICAg
IE5ldyB1bml0IHRlc3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBpbiBXSzJH
VEsuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVz
dFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6IE5vdGlm
eSB0aGUgcGFyZW50IHByb2Nlc3MgKHRoZSB0ZXN0KQorICAgICAgICB3aGVuIHJlYWR5LgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vz
c2liaWxpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHN0b3BUZXN0U2VydmVyKToKKyAgICAgICAg
KHNpZ0Fib3J0SGFuZGxlcik6CisgICAgICAgICh0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMp
OgorICAgICAgICAoc3RhcnRUZXN0U2VydmVyTW9uaXRvcik6CisgICAgICAgIChzdGFydFRlc3RT
ZXJ2ZXIpOgorICAgICAgICAoY2hlY2tBdHNwaUFjY2Vzc2libGUpOgorICAgICAgICAoZmluZFRl
c3RTZXJ2ZXJBcHBsaWNhdGlvbik6CisgICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6
CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorCiAyMDEyLTAxLTA4
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAo
cjEwMzg1OSk6IFdLVmlld3MgbGVhawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBkY2I0N2ExLi4y
Yjk1MDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNTQ3LDYgKzU0Nyw4IEBAIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld1ByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVz
LmggXApAQCAtODkyLDYgKzg5NCw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFK
T1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCisJU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdEd0ay5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCA4NjYwNzE2Li45Zjk0
ZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUGFnZUNsaWVu
dEltcGwuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0
b3J5LmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4KQEAgLTY5LDYgKzcwLDcgQEAgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAgIEd0a0RyYWdBbmREcm9wSGVscGVy
IGRyYWdBbmREcm9wSGVscGVyOwogICAgIERyYWdJY29uIGRyYWdJY29uOwogICAgIEludFNpemUg
cmVzaXplclNpemU7CisgICAgR1JlZlB0cjxBdGtPYmplY3Q+IGFjY2Vzc2libGU7CiB9OwogCiBH
X0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RL
X1RZUEVfQ09OVEFJTkVSKQpAQCAtMzc0LDYgKzM3NiwzNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250
ZXh0KgogICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVH
ZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogfQogCitzdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRXZWJWaWV3QmFzZUdldEFjY2Vzc2libGUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAg
Ly8gSWYgdGhlIHNvY2tldCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGVtYmVkZGVkIGEg
cGx1ZyBJRCwgcmV0dXJuIGl0LgorICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXY7CisgICAgaWYgKHByaXYtPmFjY2Vz
c2libGUgJiYgYXRrX3NvY2tldF9pc19vY2N1cGllZChBVEtfU09DS0VUKHByaXYtPmFjY2Vzc2li
bGUuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIHByaXYtPmFjY2Vzc2libGUuZ2V0KCk7CisKKyAg
ICAvLyBDcmVhdGUgdGhlIGFjY2Vzc2libGUgb2JqZWN0IGFuZCBhc3NvY2lhdGUgaXQgdG8gdGhl
IHdpZGdldC4KKyAgICBpZiAoIXByaXYtPmFjY2Vzc2libGUpIHsKKyAgICAgICAgcHJpdi0+YWNj
ZXNzaWJsZSA9IGFkb3B0R1JlZihBVEtfT0JKRUNUKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZU5ldyh3aWRnZXQpKSk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBwYXJlbnQgbm90IHRvIGJyZWFr
IGJvdHRvbS11cCBuYXZpZ2F0aW9uLgorICAgICAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9
IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3aWRnZXQpOworICAgICAgICBBdGtPYmplY3QqIGF4UGFy
ZW50ID0gcGFyZW50V2lkZ2V0ID8gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShwYXJlbnRXaWRn
ZXQpIDogMDsKKyAgICAgICAgaWYgKGF4UGFyZW50KQorICAgICAgICAgICAgYXRrX29iamVjdF9z
ZXRfcGFyZW50KHByaXYtPmFjY2Vzc2libGUuZ2V0KCksIGF4UGFyZW50KTsKKyAgICB9CisKKyAg
ICAvLyBUcnkgdG8gZW1iZWQgdGhlIHBsdWcgaW4gdGhlIHNvY2tldCwgaWYgcG9zc3NpYmxlLgor
ICAgIFN0cmluZyBwbHVnSUQgPSBwcml2LT5wYWdlUHJveHktPmdldEFjY2Vzc2liaWxpdHlQbHVn
SUQoKTsKKyAgICBpZiAocGx1Z0lELmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcHJpdi0+YWNj
ZXNzaWJsZS5nZXQoKTsKKworICAgIGF0a19zb2NrZXRfZW1iZWQoQVRLX1NPQ0tFVChwcml2LT5h
Y2Nlc3NpYmxlLmdldCgpKSwgY29uc3RfY2FzdDxnY2hhcio+KHBsdWdJRC51dGY4KCkuZGF0YSgp
KSk7CisKKyAgICByZXR1cm4gcHJpdi0+YWNjZXNzaWJsZS5nZXQoKTsKK30KKwogc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ01vdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQogewogICAg
IFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdp
ZGdldCk7CkBAIC00MzgsNiArNDY4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jh
c2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJWaWUKICAgICB3
aWRnZXRDbGFzcy0+ZHJhZ19sZWF2ZSA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlOwogICAg
IHdpZGdldENsYXNzLT5kcmFnX2Ryb3AgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wOwogICAg
IHdpZGdldENsYXNzLT5kcmFnX2RhdGFfcmVjZWl2ZWQgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdE
YXRhUmVjZWl2ZWQ7CisgICAgd2lkZ2V0Q2xhc3MtPmdldF9hY2Nlc3NpYmxlID0gd2Via2l0V2Vi
Vmlld0Jhc2VHZXRBY2Nlc3NpYmxlOwogCiAgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKTsKICAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VGaW5hbGl6ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDhk
M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCIKKworc3RydWN0
IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlIHsKKyAgICBHdGtXaWRnZXQqIHdp
ZGdldDsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLCB3
ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlLCBBVEtfVFlQRV9TT0NLRVQpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUZpbmFsaXplKEdPYmplY3QqIGdvYmpl
Y3QpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlID0gV0VC
S0lUX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRShnb2JqZWN0KTsKKyAgICBhY2Nlc3NpYmxlLT5w
cml2LT5+V2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUoZ29iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNz
aWJsZVdpZGdldERlc3Ryb3llZChHdGtXaWRnZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIGFjY2Vzc2libGUtPnByaXYtPndpZGdldCA9
IDA7CisgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKEFUS19PQkpFQ1QoYWNjZXNz
aWJsZSksIEFUS19TVEFURV9ERUZVTkNULCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlSW5pdGlhbGl6ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdf
YmFzZV9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUpCisgICAgICAgIEFUS19P
QkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3Mp
LT5pbml0aWFsaXplKGF0a09iamVjdCwgZGF0YSk7CisKKyAgICBpZiAoZGF0YSAmJiBHVEtfSVNf
V0lER0VUKGRhdGEpKSB7CisgICAgICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSogYWNj
ZXNzaWJsZSA9IFdFQktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUoYXRrT2JqZWN0KTsKKyAg
ICAgICAgYWNjZXNzaWJsZS0+cHJpdi0+d2lkZ2V0ID0gR1RLX1dJREdFVChkYXRhKTsKKworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKGFjY2Vzc2libGUtPnByaXYtPndpZGdldCwgImRl
c3Ryb3kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKSwgYXRrT2JqZWN0KTsKKyAgICB9
CisKKyAgICBhdGtfb2JqZWN0X3NldF9yb2xlKGF0a09iamVjdCwgQVRLX1JPTEVfRklMTEVSKTsK
K30KKworc3RhdGljIEF0a1N0YXRlU2V0KiB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVSZWZT
dGF0ZVNldChBdGtPYmplY3QqIGF0a09iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZUFj
Y2Vzc2libGUqIGFjY2Vzc2libGUgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKGF0
a09iamVjdCk7CisKKyAgICBBdGtTdGF0ZVNldCogc3RhdGVTZXQ7CisgICAgaWYgKGFjY2Vzc2li
bGUtPnByaXYtPndpZGdldCkgeworICAgICAgICAvLyBVc2UgdGhlIGltcGxlbWVudGF0aW9uIG9m
IEF0a1NvY2tldCBpZiB0aGUgd2lkZ2V0IGlzIHN0aWxsIGFsaXZlLgorICAgICAgICBzdGF0ZVNl
dCA9IEFUS19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJl
bnRfY2xhc3MpLT5yZWZfc3RhdGVfc2V0KGF0a09iamVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gSWYgdGhlIHdpZGdldCBpcyBubyBsb25nZXIgYWxpdmUsIHNhdmUgc29tZSByZW1vdGUg
Y2FsbHMKKyAgICAgICAgLy8gKGJlY2F1c2Ugb2YgQXRrU29ja2V0J3MgaW1wbGVtZW50YXRpb24g
b2YgcmVmX3N0YXRlX3NldCgpKQorICAgICAgICAvLyBhbmQganVzdCByZXR1cm4gdGhhdCB0aGlz
IEF0a09iamVjdCBpcyBkZWZ1bmN0LgorICAgICAgICBzdGF0ZVNldCA9IGF0a19zdGF0ZV9zZXRf
bmV3KCk7CisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RB
VEVfREVGVU5DVCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRlU2V0OworfQorCitzdGF0aWMg
Z2ludCB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KEF0a09iamVj
dCogYXRrT2JqZWN0KQoreworICAgIEF0a09iamVjdCogYXRrUGFyZW50ID0gYXRrX29iamVjdF9n
ZXRfcGFyZW50KGF0a09iamVjdCk7CisgICAgaWYgKCFhdGtQYXJlbnQpCisgICAgICAgIHJldHVy
biAtMTsKKworICAgIGd1aW50IGNvdW50ID0gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2No
aWxkcmVuKGF0a1BhcmVudCk7CisgICAgZm9yIChndWludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoYXRrUGFyZW50LCBpKTsKKyAgICAgICAgYm9vbCBjaGlsZElzT2JqZWN0ID0gY2hpbGQg
PT0gYXRrT2JqZWN0OworICAgICAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgICAgIGlm
IChjaGlsZElzT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgcmV0
dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxl
X2luaXQoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIFdl
YktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoYWNjZXNzaWJsZSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJ
QkxFLCBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlKTsKKyAgICBhY2Nlc3NpYmxl
LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZVByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNz
aWJsZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzKiBrbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlRmluYWxpemU7CisKKyAgICAvLyBObyBuZWVkIHRvIGltcGxlbWVudCBnZXRfbl9jaGlsZHJl
bigpIGFuZCByZWZfY2hpbGQoKSBoZXJlCisgICAgLy8gc2luY2UgdGhpcyBpcyBhIHN1YmNsYXNz
IG9mIEF0a1NvY2tldCBhbmQgYWxsIHRoZSBsb2dpYyByZWxhdGVkCisgICAgLy8gdG8gdGhvc2Ug
ZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIEFUSyBicmlkZ2UuCisgICAgQXRr
T2JqZWN0Q2xhc3MqIGF0a09iamVjdENsYXNzID0gQVRLX09CSkVDVF9DTEFTUyhrbGFzcyk7Cisg
ICAgYXRrT2JqZWN0Q2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2li
bGVJbml0aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5yZWZfc3RhdGVfc2V0ID0gd2Via2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUmVmU3RhdGVTZXQ7CisgICAgYXRrT2JqZWN0Q2xhc3MtPmdl
dF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleElu
UGFyZW50OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2Vi
S2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSkpOworfQorCitXZWJLaXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGUqIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5ldyhHdGtXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IEFUS19PQkpFQ1QoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgTlVMTCkpOworICAgIGF0a19v
YmplY3RfaW5pdGlhbGl6ZShvYmplY3QsIHdpZGdldCk7CisgICAgcmV0dXJuIFdFQktJVF9XRUJf
VklFV19CQVNFX0FDQ0VTU0lCTEUob2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MWQ5OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlQWNjZXNzaWJsZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vz
c2libGVfaAorI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVfaAorCisjaW5jbHVk
ZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSAgICAgICAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRShvYmplY3QpICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUND
RVNTSUJMRSwgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9WSUVXX0JBU0VfQUNDRVNTSUJMRV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBX
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJf
VklFV19CQVNFX0FDQ0VTU0lCTEUob2JqZWN0KSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmplY3QpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUpKQor
I2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19C
QVNFX0FDQ0VTU0lCTEUpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxF
X0dFVF9DTEFTUyhvYmplY3QpIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmplY3QpLCBX
RUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUsIFdlYktpdFdlYlZpZXdCYXNlQWNj
ZXNzaWJsZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNz
aWJsZSBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xh
c3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSBX
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlOworCisKK3N0cnVjdCBfV2ViS2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlIHsKKyAgICBBdGtTb2NrZXQgcGFyZW50OworICAgIC8qPCBwcml2
YXRlID4qLworICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUqIHByaXY7Cit9
OworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzIHsKKyAgICBBdGtT
b2NrZXRDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF93ZWJfdmlld19iYXNl
X2FjY2Vzc2libGVfZ2V0X3R5cGUoKTsKKworV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiB3
ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVOZXcoR3RrV2lkZ2V0Kik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNz
aWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNiNGQ0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgor
CitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRM
b2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKK3sKKyAgICAvLyBTZW5kIGEgbWVzc2FnZSB0
byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KKyAgICBpZiAobG9hZEV2ZW50
ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBnX3ByaW50KCJPSyIpOworfQorCitp
bnQKK21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGJvdGggR0FJTCBhbmQgdGhlIEFUSyBicmlkZ2UgYXJlIGxvYWRlZC4KKyAgICBnX3NldGVudigi
R1RLX01PRFVMRVMiLCAiZ2FpbDphdGstYnJpZGdlIiwgVFJVRSk7CisKKyAgICBndGtfaW5pdCgm
YXJnYywgJmFyZ3YpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0
bWwod2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgPGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIHNvbWUgcGxhaW4g
dGV4dC48L3A+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMgcGFy
YWdyYXBoIGNvbnRhaW5zIDxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmdcIj5hIGxp
bms8L2E+IGluIHRoZSBtaWRkbGUuPC9wPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgIDwvYm9keT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIEd0a1dpZGdldCogd2luZG93
ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRv
dywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0soZ3RrX21haW5fcXVpdCksIDApOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENo
YW5nZWRDYWxsYmFjayksIDApOworCisgICAgZ3RrX21haW4oKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXgg
ZDkxMmI2NS4uMTc1OWQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiwxMyBAQCBURVNUX1BST0dT
ICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdAogCiBu
b2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQorCitpZiBIQVZFX0FUU1BJMgorVEVTVF9Q
Uk9HUyArPSBQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkK
Kworbm9pbnN0X1BST0dSQU1TICs9IFByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9BY2Nlc3NpYmls
aXR5VGVzdFNlcnZlcgorZW5kaWYKKwogd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKIAktRFdF
QktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zXCIg
XAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKQEAgLTc2LDMgKzgzLDE2IEBAIFByb2dy
YW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3
YXJkTGlzdF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRm
bGFncykKIAoraWYgSEFWRV9BVFNQSTIKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19BY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0
U2VydmVyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
bGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5X1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHlfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mp
ICQoQVRTUEkyX0NGTEFHUykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChBVFNQSTJfTElCUykK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9MREZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCitlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44MzBlMDlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3Bw
CkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisKKy8vIFRoZSBsaWJhdHNwaSBoZWFkZXJzIGRvbid0IHVzZSBHX0JF
R0lOX0RFQ0xTCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlIDxhdHNwaS9hdHNwaS5oPgorfQorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBs
aWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCitzdGF0aWMgY29uc3QgY2hhciog
a1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIjsKKworLy8gTWF4
IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5nIGl0
Lgorc3RhdGljIGNvbnN0IGludCBrTWF4V2FpdEZvckNoaWxkID0gNTsKKworLy8gVGhlIFBJRCBm
b3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRlZC4K
K3N0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQaWQgPSAwOworCisvLyBXaGV0aGVyIHRoZSBjaGls
ZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFkeS4KK3N0YXRpYyBib29sIGtDaGlsZElzUmVhZHkg
PSBmYWxzZTsKKworc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIERvIG5v
dGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4KKyAgICBpZiAoIWtDaGlsZFByb2Nl
c3NQaWQpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc3Bhd25fY2xvc2VfcGlkKGtDaGlsZFBy
b2Nlc3NQaWQpOworICAgIGtpbGwoa0NoaWxkUHJvY2Vzc1BpZCwgU0lHVEVSTSk7CisgICAga0No
aWxkUHJvY2Vzc1BpZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQg
c2lnTnVtKQoreworICAgIC8vIEp1c3Qgc3RvcCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJSVCB3
YXMgcmVjZWl2ZWQuCisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworc3RhdGljIGdwb2ludGVy
IHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyhncG9pbnRlcikKK3sKKyAgICAvLyBXYWl0IGZv
ciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdG8gaGFwcGVuLgorICAgIGdfdXNsZWVwKGtNYXhXYWl0
Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAvLyBLaWxsIHRoZSBjaGlsZCBwcm9j
ZXNzIGlmIG5vdCByZWFkeSB5ZXQuCisgICAgaWYgKCFrQ2hpbGRJc1JlYWR5KQorICAgICAgICBz
dG9wVGVzdFNlcnZlcigpOworCisgICAgZ190aHJlYWRfZXhpdCgwKTsKKyAgICByZXR1cm4gMDsK
K30KKworc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpCit7CisgICAga0NoaWxk
SXNSZWFkeSA9IGZhbHNlOworCisjaWYgKCFHTElCX0NIRUNLX1ZFUlNJT04oMiwgMzEsIDApKQor
ICAgIGdfdGhyZWFkX2NyZWF0ZSh0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMsIDAsIEZBTFNF
LCAwKTsKKyNlbHNlCisgICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RT
ZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc3Rh
cnRUZXN0U2VydmVyKCkKK3sKKyAgICAvLyBQcmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcgdGhl
IHNlcnZlciBwcm9jZXNzLgorICAgIEdPd25QdHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19idWls
ZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAiV2ViS2l0MkFQSVRlc3RzIiwga1Rlc3RTZXJ2
ZXJBcHBOYW1lLCBOVUxMKSk7CisKKyAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKKyAgICB0
ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOworICAgIHRlc3RTZXJ2ZXJB
cmd2WzFdID0gMDsKKworICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91
dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWws
IHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgorICAgIGludCBjaGlsZFN0ZG91dCA9IDA7Cisg
ICAgaWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMoMCwgdGVzdFNlcnZlckFyZ3YsIDAsIHN0
YXRpY19jYXN0PEdTcGF3bkZsYWdzPigwKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAma0NoaWxkUHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSkgewor
ICAgICAgICBjbG9zZShjaGlsZFN0ZG91dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBTdGFydCBtb25pdG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJl
YWQpIHRvCisgICAgLy8gZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNz
IG1vcmUgdGhhbiBhIHRpbWVvdXQuCisgICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOworCisg
ICAgY2hhciBtc2dbMl07CisgICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVs
X3VuaXhfbmV3KGNoaWxkU3Rkb3V0KTsKKyAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMo
aW9DaGFubmVsLCBtc2csIDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgeworICAgICAg
ICAvLyBDaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3Mg
cmVhZHkKKyAgICAgICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBt
b25pdG9yIGNhbiBzZWUgaXQuCisgICAgICAgIGtDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08n
ICYmIG1zZ1sxXSA9PSAnSyc7CisgICAgfQorICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5u
ZWwpOworICAgIGNsb3NlKGNoaWxkU3Rkb3V0KTsKKworICAgIC8vIFRoZSB0aW1lb3V0IHdhcyBy
ZWFjaGVkIGFuZCB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCisgICAgLy8gc3RvcCBp
dCBpbm1lZGlhdGVseSwgYW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgorICAgIGlmICgha0No
aWxkSXNSZWFkeSkKKyAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworc3RhdGljIHZvaWQg
Y2hlY2tBdHNwaUFjY2Vzc2libGUoQXRzcGlBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBjb25zdCBj
aGFyKiB0YXJnZXROYW1lLCBBdHNwaVJvbGUgdGFyZ2V0Um9sZSkKK3sKKyAgICBnX2Fzc2VydChB
VFNQSV9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gbmFt
ZShhdHNwaV9hY2Nlc3NpYmxlX2dldF9uYW1lKGFjY2Vzc2libGUsIDApKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGFyZ2V0TmFtZSwgPT0sIG5hbWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0YXJnZXRSb2xlLCA9PSwgYXRzcGlfYWNjZXNzaWJsZV9nZXRfcm9sZShhY2Nlc3NpYmxlLCAw
KSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZmluZFRlc3RTZXJ2ZXJB
cHBsaWNhdGlvbigpCit7CisgICAgLy8gT25seSBvbmUgZGVza3RvcCBpcyBzdXBwb3J0ZWQgYnkg
QVRTUEkgYXQgdGhlIG1vbWVudC4KKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZGVza3Rv
cCA9IGFkb3B0R1JlZihhdHNwaV9nZXRfZGVza3RvcCgwKSk7CisKKyAgICAvLyBMb29rIGZvciB0
aGUgc2VydmVyIGFwcGxpY2F0aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCisgICAgR1JlZlB0cjxB
dHNwaUFjY2Vzc2libGU+IGN1cnJlbnQ7CisgICAgaW50IGNoaWxkQ291bnQgPSBhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9jb3VudChkZXNrdG9wLmdldCgpLCAwKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICBjdXJyZW50ID0gYWRvcHRHUmVm
KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCksIGksIDAp
KTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJy
ZW50LmdldCgpLCAwKSwga1Rlc3RTZXJ2ZXJBcHBOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBj
dXJyZW50OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QXRz
cGlCYXNpY0hpZXJhcmNoeShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICAvLyBUaGUgdGVzdCBzZXJ2ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2Vzcyku
CisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5kVGVzdFNl
cnZlckFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0
U2VydmVyQXBwLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNlcnZlckFw
cC5nZXQoKSwgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBMSUNBVElP
Tik7CisKKyAgICAvLyBUaGUgbWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkg
UHJvY2VzcykuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJlbnQgPSB0
ZXN0U2VydmVyQXBwOworICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50Q2hpbGQg
PSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBh
cmVudC5nZXQoKSwgMCwgMCkpOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3Vy
cmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxk
LmdldCgpLCAiIiwgQVRTUElfUk9MRV9GUkFNRSk7CisKKyAgICAvLyBUaGUgV2ViVmlldydzIGFj
Y2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3Vy
cmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJ
X0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vz
c2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOworCisgICAg
Ly8gVGhlIFdlYlBhZ2UncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgorICAg
IGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7
CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsK
KyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9S
T0xFX0ZJTExFUik7CisKKyAgICAvLyBIVE1MIHJvb3QgZWxlbWVudCdzIGFjY2Vzc2libGUgZWxl
bWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Cisg
ICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3Vy
cmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJM
RShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKworICAgIC8vIEhUTUwgYm9keSdzIGFjY2Vzc2libGUg
ZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7
CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgo
Y3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNT
SUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJy
ZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0RPQ1VNRU5UX0ZSQU1FKTsKKworICAgIC8v
IEhUTUwgSDEncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50
UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdf
YXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hl
Y2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiVGhpcyBpcyBhIHRlc3QiLCBB
VFNQSV9ST0xFX0hFQURJTkcpOworCisgICAgLy8gSFRNTCBmaXJzdCBwYXJhZ3JhcGgncyBhY2Nl
c3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9h
Y2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAxLCAwKTsK
KyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwor
ICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JP
TEVfUEFSQUdSQVBIKTsKKworICAgIC8vIEhUTUwgc2Vjb25kIHBhcmFncmFwaCdzIGFjY2Vzc2li
bGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vz
c2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDIsIDApOworICAg
IGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9Q
QVJBR1JBUEgpOworCisgICAgLy8gSFRNTCBsaW5rJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIg
UHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50
Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50
LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRD
aGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQo
KSwgImEgbGluayIsIEFUU1BJX1JPTEVfTElOSyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sK
KyAgICAvLyBXZSBpbnN0YWxsIGEgaGFuZGxlciB0byBlbnN1cmUgdGhhdCB3ZSBraWxsIHRoZSBj
aGlsZCBwcm9jZXNzCisgICAgLy8gaWYgdGhlIHBhcmVudCBkaWVzIGJlY2F1c2Ugb2Ygd2hhdGV2
ZXIgdGhlIHJlYXNvbiBpcy4KKyAgICBzaWduYWwoU0lHQUJSVCwgc2lnQWJvcnRIYW5kbGVyKTsK
KworICAgIC8vIFN0YXJ0IHRoZSBhY2Nlc3NpYmlsaXR5IHRlc3Qgc2VydmVyIGFuZCBsb2FkIHRo
ZSB0ZXN0cy4KKyAgICBzdGFydFRlc3RTZXJ2ZXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImF0c3BpLWJhc2ljLWhpZXJhcmNoeSIsIHRlc3RBdHNwaUJh
c2ljSGllcmFyY2h5KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgLy8gRW5zdXJlIHdl
IHN0b3AgdGhlIHNlcnZlci4KKyAgICBzdG9wVGVzdFNlcnZlcigpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDQyYTE4ZjMuLmFmYzllODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTU2Nyw2ICs1NjcsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wpOwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgU3RyaW5nIGdldEFjY2Vzc2liaWxpdHlQbHVnSUQo
KSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc2liaWxpdHlQbHVnSUQ7IH0KKyNlbmRpZgorCiAgICAg
dm9pZCBiZWdpblByaW50aW5nKFdlYkZyYW1lUHJveHkqLCBjb25zdCBQcmludEluZm8mKTsKICAg
ICB2b2lkIGVuZFByaW50aW5nKCk7CiAgICAgdm9pZCBjb21wdXRlUGFnZXNGb3JQcmludGluZyhX
ZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJiwgUGFzc1JlZlB0cjxDb21wdXRlZFBhZ2Vz
Q2FsbGJhY2s+KTsKQEAgLTc0NSw2ICs3NDksNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0o
R1RLKQogICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZvaWQgYmluZEFjY2Vzc2liaWxpdHlUcmVl
KGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgZ2V0
RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChWZWN0b3I8U3RyaW5nPiYpOwpAQCAtOTcxLDYgKzk3
NiwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsK
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlQ
bHVnSUQ7CisjZW5kaWYKKwogICAgIGludDY0X3QgbV9zcGVsbERvY3VtZW50VGFnOwogICAgIGJv
b2wgbV9oYXNTcGVsbERvY3VtZW50VGFnOwogICAgIHVuc2lnbmVkIG1fcGVuZGluZ0xlYXJuT3JJ
Z25vcmVXb3JkTWVzc2FnZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNWMyMTMzYS4uY2YwMjEyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0x
NDcsNiArMTQ3LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBQTEFURk9STShH
VEspCiAgICAgIyBTdXBwb3J0IGZvciBHVEsrIHBsYXRmb3JtIGtleWJpbmRpbmdzCiAgICAgR2V0
RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChBdG9taWNTdHJpbmcgZXZlbnRUeXBlKSAtPiAoVmVj
dG9yPFdURjo6U3RyaW5nPiBjb21tYW5kc0xpc3QpCisKKyAgICAjIFN1cHBvcnQgZm9yIGNvbm5l
Y3RpbmcgdGhlIEFjY2Vzc2liaWxpdHkgd29ybGRzIG9mIHRoZSBVSSBhbmQgdGhlIFdlYiBwcm9j
ZXNzZXMKKyAgICBCaW5kQWNjZXNzaWJpbGl0eVRyZWUoV1RGOjpTdHJpbmcgcGx1Z0lEKQogI2Vu
ZGlmCiAKICAgICAjIEJhY2tGb3J3YXJkIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggMTEyN2RkZS4uZjZiMzAwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNw
cApAQCAtNDksNiArNDksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFYKICAgICBtX3BhZ2VD
bGllbnQtPmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQobV9rZXlFdmVudFF1ZXVlLmZpcnN0
KCksIGV2ZW50VHlwZSwgY29tbWFuZHNMaXN0KTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmJp
bmRBY2Nlc3NpYmlsaXR5VHJlZShjb25zdCBTdHJpbmcmIHBsdWdJRCkKK3sKKyAgICBtX2FjY2Vz
c2liaWxpdHlQbHVnSUQgPSBwbHVnSUQ7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUmVj
ZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4
IDNkMGUyMjIuLjg1MGRmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBA
IC01MTcsNiArNTE3LDExIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
RmluaXNoTG9hZCgpCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBp
dC4KICAgICBpZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFt
ZS0+bG9hZExpc3RlbmVyKCkpCiAgICAgICAgIGxvYWRMaXN0ZW5lci0+ZGlkRmluaXNoTG9hZCht
X2ZyYW1lKTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBFbnN1cmUgdGhlIGFjY2Vzc2li
aWxpdHkgaGllcmFyY2h5IGlzIHVwZGF0ZWQgYWZ0ZXIgbG9hZGluZy4KKyAgICB3ZWJQYWdlLT51
cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDY2MGY2ZjkuLjk5NGJjM2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE4OCw2
ICsxODgsOCBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICAsIG1fa2V5Ym9hcmRFdmVudEJl
aW5nSW50ZXJwcmV0ZWQoMCkKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICAsIG1fbmF0aXZlV2lu
ZG93KHBhcmFtZXRlcnMubmF0aXZlV2luZG93KQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICwg
bV9hY2Nlc3NpYmlsaXR5T2JqZWN0KDApCiAjZW5kaWYKICAgICAsIG1fc2V0Q2FuU3RhcnRNZWRp
YVRpbWVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJ1bkxvb3AoKSwgdGhpcywgJldlYlBhZ2U6OnNl
dENhblN0YXJ0TWVkaWFUaW1lckZpcmVkKQogICAgICwgbV9maW5kQ29udHJvbGxlcih0aGlzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNDAwNzJj
Zi4uYTI4MTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCkBAIC03MCw2ICs3MCw3IEBACiAKICNpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnNHdGsuaCIKKyNpbmNsdWRlICJXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0
ay5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzk3LDYgKzM5OCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGdlc3R1cmVXaWxsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmLCBib29sJiBjYW5CZWdpblBhbm5pbmcpOwogICAgIHZvaWQgZ2VzdHVyZURpZFNjcm9s
bChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBnZXN0dXJlRGlkRW5kKCk7CisK
KyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCk7
CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0Q29tcG9zaXRpb25Gb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYgY29tcG9zaXRpb25TdHJpbmcsIHVpbnQ2NF90IGZyb20sIHVpbnQ2NF90IGxlbmd0aCk7CkBA
IC01OTYsOSArNjAwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGVkSW5k
ZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJbmRleCk7CiAgICAgdm9pZCBzZXRUZXh0
Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3QgaW5kZXgpOwogCi0jaWYgUExBVEZPUk0oR1RLKSAg
ICAKKyNpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBmYWlsZWRUb1Nob3dQb3B1cE1lbnUoKTsK
LSNlbmRpZiAgICAKKyNlbmRpZgogCiAgICAgdm9pZCBkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5l
bChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHZvaWQgZGlkQ2FuY2VsRm9yT3BlblBhbmVs
KCk7CkBAIC02NzUsNiArNjc5LDggQEAgcHJpdmF0ZToKICAgICBIV05EIG1fbmF0aXZlV2luZG93
OwogCiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fZ2VzdHVyZVRhcmdldE5vZGU7CisjZWxp
ZiBQTEFURk9STShHVEspCisgICAgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIG1fYWNjZXNz
aWJpbGl0eU9iamVjdDsKICNlbmRpZgogICAgIAogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlBhZ2U+
IG1fc2V0Q2FuU3RhcnRNZWRpYVRpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjc1MWRi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAKQEAgLTAsMCArMSwxNDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgiCisK
KyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0df
REVGSU5FX1RZUEUoV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QsIHdlYl9wYWdlX2FjY2Vzc2li
aWxpdHlfb2JqZWN0LCBBVEtfVFlQRV9QTFVHKQorCitzdGF0aWMgQXRrT2JqZWN0KiBhY2Nlc3Np
YmlsaXR5Um9vdE9iamVjdFdyYXBwZXIoQXRrT2JqZWN0KiBhdGtPYmplY3QpCit7CisgICAgaWYg
KCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBBWE9iamVj
dENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CisKKyAgICBXZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdCogYWNjZXNzaWJsZSA9IFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKGF0a09i
amVjdCk7CisgICAgaWYgKCFhY2Nlc3NpYmxlLT5tX3BhZ2UpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUGFnZSogcGFnZSA9IGFjY2Vzc2libGUtPm1fcGFnZS0+Y29yZVBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgRnJhbWUqIGNvcmUgPSBwYWdlLT5t
YWluRnJhbWUoKTsKKyAgICBpZiAoIWNvcmUgfHwgIWNvcmUtPmRvY3VtZW50KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm9vdCA9IGNvcmUtPmRvY3Vt
ZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cm9vdE9iamVjdCgpOworICAgIGlmICghcm9vdCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IHJvb3QtPndyYXBwZXIo
KTsKKyAgICBpZiAoIWF4Um9vdCB8fCAhQVRLX0lTX09CSkVDVChheFJvb3QpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBheFJvb3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlBhZ2VB
Y2Nlc3NpYmlsaXR5T2JqZWN0SW5pdGlhbGl6ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBpZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJfcGFnZV9hY2Nlc3NpYmls
aXR5X29iamVjdF9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKQorICAgICAgICBBVEtfT0JKRUNU
X0NMQVNTKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X3BhcmVudF9jbGFzcyktPmluaXRp
YWxpemUoYXRrT2JqZWN0LCBkYXRhKTsKKworICAgIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JK
RUNUKGF0a09iamVjdCktPm1fcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZSo+KGRhdGEp
OworICAgIGF0a19vYmplY3Rfc2V0X3JvbGUoYXRrT2JqZWN0LCBBVEtfUk9MRV9GSUxMRVIpOwor
fQorCitzdGF0aWMgZ2ludCB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldEluZGV4SW5QYXJl
bnQoQXRrT2JqZWN0ICphdGtPYmplY3QpCit7CisgICAgLy8gQW4gQXRrUGx1ZyBpcyB0aGUgb25s
eSBjaGlsZCBhbiBBdGtTb2NrZXQgY2FuIGhhdmUuCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBnaW50IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxkcmVuKEF0a09iamVjdCog
YXRrT2JqZWN0KQoreworICAgIEF0a09iamVjdCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlS
b290T2JqZWN0V3JhcHBlcihhdGtPYmplY3QpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIEF0a09iamVjdCogd2Vi
UGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZDaGlsZChBdGtPYmplY3QqIGF0a09iamVjdCwgZ2lu
dCBpbmRleCkKK3sKKyAgICAvLyBJdCdzIHN1cHBvc2VkIHRvIGhhdmUgZWl0aGVyIG9uZSBjaGls
ZCBvciB6ZXJvLgorICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiAxKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEF0a09iamVjdCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2Jq
ZWN0V3JhcHBlcihhdGtPYmplY3QpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBhdGtfb2JqZWN0X3NldF9wYXJlbnQocm9vdE9iamVjdCwgYXRrT2JqZWN0
KTsKKyAgICBnX29iamVjdF9yZWYocm9vdE9iamVjdCk7CisKKyAgICByZXR1cm4gcm9vdE9iamVj
dDsKK30KKworc3RhdGljIHZvaWQgd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfaW5pdChX
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZSkKK3sKK30KKworc3RhdGljIHZv
aWQgd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfY2xhc3NfaW5pdChXZWJQYWdlQWNjZXNz
aWJpbGl0eU9iamVjdENsYXNzKiBrbGFzcykKK3sKKyAgICBBdGtPYmplY3RDbGFzcyogYXRrT2Jq
ZWN0Q2xhc3MgPSBBVEtfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIC8vIE5vIG5lZWQgdG8g
aW1wbGVtZW50IGdldF9wYXJlbnQoKSBoZXJlIHNpbmNlIHRoaXMgaXMgYSBzdWJjbGFzcworICAg
IC8vIG9mIEF0a1BsdWcgYW5kIGFsbCB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGF0IGZ1bmN0aW9u
IHdpbGwgYmUKKyAgICAvLyBpbXBsZW1lbnRlZCBieSB0aGUgQVRLIGJyaWRnZS4KKyAgICBhdGtP
YmplY3RDbGFzcy0+aW5pdGlhbGl6ZSA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0SW5pdGlh
bGl6ZTsKKyAgICBhdGtPYmplY3RDbGFzcy0+Z2V0X2luZGV4X2luX3BhcmVudCA9IHdlYlBhZ2VB
Y2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5kZXhJblBhcmVudDsKKyAgICBhdGtPYmplY3RDbGFzcy0+
Z2V0X25fY2hpbGRyZW4gPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbjsK
KyAgICBhdGtPYmplY3RDbGFzcy0+cmVmX2NoaWxkID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RSZWZDaGlsZDsKK30KKworV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYlBhZ2VBY2Nl
c3NpYmlsaXR5T2JqZWN0TmV3KFdlYlBhZ2UqIHBhZ2UpCit7CisgICAgQXRrT2JqZWN0KiBvYmpl
Y3QgPSBBVEtfT0JKRUNUKGdfb2JqZWN0X25ldyhXRUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlf
T0JKRUNULCBOVUxMKSk7CisgICAgYXRrX29iamVjdF9pbml0aWFsaXplKG9iamVjdCwgcGFnZSk7
CisgICAgcmV0dXJuIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9iamVjdCk7Cit9CisK
K3ZvaWQgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZyZXNoKFdlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0KiBhY2Nlc3NpYmxlKQoreworICAgIC8vIFdlIGp1c3QgbmVlZCB0byBlbnN1cmUg
dGhhdCB0aGVyZSdzIGEgY29ubmVjdGlvbiBpbiB0aGUgQVRLCisgICAgLy8gd29ybGQgYmV0d2Vl
biB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFuZCB0aGUgQXRrT2JqZWN0IG9mCisgICAgLy8g
dGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGZvciB0aGUgcm9vdCBvZiB0aGUgRE9NIHRyZWUuCisg
ICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0gYWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVy
KEFUS19PQkpFQ1QoYWNjZXNzaWJsZSkpOworICAgIGlmICghcm9vdE9iamVjdCkKKyAgICAgICAg
cmV0dXJuOworICAgIGF0a19vYmplY3Rfc2V0X3BhcmVudChyb290T2JqZWN0LCBBVEtfT0JKRUNU
KGFjY2Vzc2libGUpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzJlZTNhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNj
ZXNzaWJpbGl0eU9iamVjdEd0ay5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdEd0a19oCisjZGVmaW5lIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrX2gK
KworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQ
YWdlOworfQorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJ
QklMSVRZX09CSkVDVCAgICAgICAgICAgICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9iamVj
dCkgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCX1RZ
UEVfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3Qp
KQorI2RlZmluZSBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVF9DTEFTUyhrbGFzcykgICAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJ
QklMSVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcykpCisjZGVmaW5l
IFdFQl9JU19QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKG9iamVjdCkgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZ
X09CSkVDVCkpCisjZGVmaW5lIFdFQl9JU19QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUX0NMQVNT
KGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJfVFlQRV9QQUdF
X0FDQ0VTU0lCSUxJVFlfT0JKRUNUKSkKKyNkZWZpbmUgV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9P
QkpFQ1RfR0VUX0NMQVNTKG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVj
dCksIFdFQl9UWVBFX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QsIFdlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViUGFnZUFjY2Vzc2liaWxpdHlP
YmplY3QgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcyBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNz
OworCitzdHJ1Y3QgX1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKKyAgICBBdGtQbHVnIHBh
cmVudDsKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIG1fcGFnZTsKK307CisKK3N0cnVjdCBfV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcyB7CisgICAgQXRrUGx1Z0NsYXNzIHBhcmVudENsYXNz
OworfTsKKworR1R5cGUgd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfZ2V0X3R5cGUoKTsK
KworV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
TmV3KFdlYktpdDo6V2ViUGFnZSopOworCit2b2lkIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
UmVmcmVzaChXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCopOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYgLy8gV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGtfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKaW5kZXggYTI1
ZTFmNy4uNmI3ZTUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC0zNyw2
ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIApAQCAtNDQsNyArNDcsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUGFn
ZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8v
IENyZWF0ZSB0aGUgYWNjZXNzaWJsZSBvYmplY3QgKHRoZSBwbHVnKSB0aGF0IHdpbGwgc2VydmUg
YXMgdGhlCisgICAgLy8gZW50cnkgcG9pbnQgdG8gdGhlIFdlYiBwcm9jZXNzLCBhbmQgc2VuZCBh
IG1lc3NhZ2UgdG8gdGhlIFVJCisgICAgLy8gcHJvY2VzcyB0byBjb25uZWN0IHRoZSB0d28gd29y
bGRzIHRocm91Z2ggdGhlIGFjY2Vzc2liaWxpdHkKKyAgICAvLyBvYmplY3QgdGhlcmUgc3BlY2lm
aWNhbGx5IHBsYWNlZCBmb3IgdGhhdCBwdXJwb3NlICh0aGUgc29ja2V0KS4KKyAgICBtX2FjY2Vz
c2liaWxpdHlPYmplY3QgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5ldyh0aGlzKTsKKyAg
ICBHT3duUHRyPGdjaGFyPiBwbHVnSUQoYXRrX3BsdWdfZ2V0X2lkKEFUS19QTFVHKG1fYWNjZXNz
aWJpbGl0eU9iamVjdCkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJpbmRB
Y2Nlc3NpYmlsaXR5VHJlZShTdHJpbmcocGx1Z0lELmdldCgpKSkpOworfQorCit2b2lkIFdlYlBh
Z2U6OnVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCkKK3sKKyAgICBpZiAoIW1fYWNjZXNzaWJpbGl0
eU9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RSZWZyZXNoKG1fYWNjZXNzaWJpbGl0eU9iamVjdCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxh
dGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NjJhYTY4
Li4wZWNiYmExIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMDEtMDkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxt
c2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5
IGhpZXJhcmNoeSBpbiBXZWJLaXQyIHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuc3VyZSB0aGUgYWNjZXNzaWJp
bGl0eSBpbmZyYXN0cnVjdHVyZSBpcyBhdmFpbGFibGUgd2hlbiBydW5uaW5nCisgICAgICAgIHRo
ZSB1bml0IHRlc3RzLCBvdGhlcndpc2UgV0syJ3MgYWNjZXNzaWJpbGl0eSB0ZXN0cyB3b24ndCB3
b3JrLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOgorICAgICAgICAoVGVzdFJ1
bm5lcik6CisgICAgICAgIChUZXN0UnVubmVyLl9sb29rdXBBdHNwaTJCaW5hcnkpOiBOZXcuIExv
b2tzIGZvciB0aGUgZGlyZWN0b3J5CisgICAgICAgIHdoZXJlIGF0LXNwaTIncyBzdHVmZiBpcyBs
b2NhdGVkIChsaWtlIGF0LXNwaS1idXMtbGF1bmNoZXIgYW5kCisgICAgICAgIGF0LXNwaTItcmVn
aXN0cnlkKS4KKyAgICAgICAgKFRlc3RSdW5uZXIucnVuKTogSW5pdGlhbGl6ZSB0aGUgYWNjZXNz
aWJpbGl0eSBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICAqIGd0ay9qaGJ1aWxkLm1vZHVsZXM6
IEFkZGVkIGF0LXNwaTItY29yZSBhbmQgYXQtc3BpMi1hdGsuCisKIDIwMTItMDEtMDkgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQuIEZpeCBtYWtlIGRpc3RjaGVjayBpc3N1ZXMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3J1bi1ndGstdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5kZXggNzBjZjI3
NC4uZGJlYjg2OSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCisrKyBi
L1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwpAQCAtMjUsNyArMjUsNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogCiAgICAgVEVTVF9ESVJTID0gWyAidW5pdHRlc3RzIiwgIldlYktpdDJBUElUZXN0
cyIgXQogICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDcxNwotICAgIFNLSVBQRUQgPSBbICJ1bml0dGVzdHMvdGVzdGRvd25sb2FkIiwgInVuaXR0
ZXN0cy90ZXN0d2VidmlldyIsICJ1bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIl0KKyAgICBTS0lQ
UEVEID0gWyAidW5pdHRlc3RzL3Rlc3Rkb3dubG9hZCIsICJ1bml0dGVzdHMvdGVzdHdlYnZpZXci
LCAidW5pdHRlc3RzL3Rlc3R3ZWJyZXNvdXJjZSIgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgogICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBFeGVjdXRpdmUoKQpAQCAtNjQsNiArNjQsMTgg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0
ZXN0X3BhdGgpIGFuZCBvcy5hY2Nlc3ModGVzdF9wYXRoLCBvcy5YX09LKToKICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fdGVzdHMuYXBwZW5kKHRlc3RfcGF0aCkKIAorICAgIGRlZiBfbG9va3Vw
QXRzcGkyQmluYXJ5KHNlbGYsIGpoYnVpbGRfcGF0aCwgZmlsZW5hbWUpOgorICAgICAgICBleGVj
X3ByZWZpeCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbamhidWlsZF9wYXRoICwncGtn
LWNvbmZpZycsICctLXZhcmlhYmxlPWV4ZWNfcHJlZml4JywgJ2F0c3BpLTInXSkKKyAgICAgICAg
cGF0aHNfdG9fY2hlY2sgPSBbICJsaWJleGVjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJsaWIvYXQtc3BpMi1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIzMi9h
dC1zcGkyLWNvcmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliNjQvYXQtc3BpMi1j
b3JlIiBdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX2NoZWNrOgorICAgICAgICAgICAg
ZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsIHBhdGgsIGZpbGVuYW1lKQorICAg
ICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgIHJl
dHVybiBmaWxlcGF0aAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiBydW4oc2Vs
Zik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKICAgICAgICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1z
X3BhdGgpKQpAQCAtNzgsMTIgKzkwLDQ2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAg
ICBleGl0X3N0YXR1c1swXSA9IGVycm9yLmV4aXRfY29kZQogCiAgICAgICAgIGpoYnVpbGRfcGF0
aCA9IG9zLnBhdGguam9pbihzZWxmLl9ndGtfdG9vbHNfZGlyZWN0b3J5LCAicnVuLXdpdGgtamhi
dWlsZCIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUncyBubyBYJ3MgcHJvcGVydHkgQVRf
U1BJX0JVUyBwcmV2aW91c2x5IHNldCwKKyAgICAgICAgIyBvdGhlcndpc2UgdGhlIGFjY2Vzc2li
aWxpdHkgYnVzIGNvdWxkbid0IGJlIHByb3Blcmx5IGxhdW5jaGVkLgorICAgICAgICBFeGVjdXRp
dmUoKS5wb3BlbihbInhwcm9wIiwgIi1yb290IiwgIi1yZW1vdmUiLCAiQVRfU1BJX0JVUyJdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9dGVzdF9lbnYsIHN0ZGVycj1zdWJwcm9jZXNz
LlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhl
IGFjY2Vzc2liaWxpdHkgYnVzIGlzIGxhdW5jaGVkLgorICAgICAgICBhMTF5X2J1c19sYXVuY2hl
ZCA9IEZhbHNlCisgICAgICAgIGExMXlfYnVzX2xhdW5jaGVyX3BhdGggPSBzZWxmLl9sb29rdXBB
dHNwaTJCaW5hcnkoamhidWlsZF9wYXRoLCAnYXQtc3BpLWJ1cy1sYXVuY2hlcicpCisgICAgICAg
IGlmIGExMXlfYnVzX2xhdW5jaGVyX3BhdGg6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgYTExeV9idXNfbGF1bmNoZXIgPSBFeGVjdXRpdmUoKS5wb3BlbihbYTExeV9idXNfbGF1
bmNoZXJfcGF0aF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbnY9dGVzdF9lbnYsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgYTExeV9idXNfbGF1bmNoZWQgPSBUcnVl
CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi
RmFpbGVkIHRvIGxhdW5jaCB0aGUgYWNjZXNzaWJpbGl0eSBidXNcbiIpCisgICAgICAgICAgICAg
ICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgYTExeV9yZWdpc3RyeWRfcnVubmluZyA9
IEZhbHNlCisgICAgICAgIGExMXlfcmVnaXN0cnlkX3BhdGggPSBzZWxmLl9sb29rdXBBdHNwaTJC
aW5hcnkoamhidWlsZF9wYXRoLCAnYXQtc3BpMi1yZWdpc3RyeWQnKQorICAgICAgICBpZiBhMTF5
X3JlZ2lzdHJ5ZF9wYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGExMXlf
cmVnaXN0cnlkID0gRXhlY3V0aXZlKCkucG9wZW4oWyIlcy9hdC1zcGkyLXJlZ2lzdHJ5ZCIgJSBh
dHNwaTJfZXhlY19wYXRoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudj10ZXN0X2Vudiwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0
PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICAgICBhMTF5X3JlZ2lzdHJ5ZF9ydW5uaW5n
ID0gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoIkZhaWxlZCB0byBydW4gdGhlIGFjY2Vzc2liaWxpdHkgcmVnaXN0cnlcbiIpCisgICAg
ICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKICAgICAgICAgZm9yIHRlc3QgaW4gc2Vs
Zi5fdGVzdHM6CiAgICAgICAgICAgICBvdXQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
W2poYnVpbGRfcGF0aCAsJ2d0ZXN0ZXInLCB0ZXN0XSwgZW52PXRlc3RfZW52LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9X2Vycm9y
X2hhbmRsZXIpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKG91dCkKICAgICAgICAgICAg
IHN5cy5zdGRvdXQuZmx1c2goKQogCisgICAgICAgIGlmIGExMXlfcmVnaXN0cnlkX3J1bm5pbmc6
CisgICAgICAgICAgICBhMTF5X3JlZ2lzdHJ5ZC5raWxsKCkKKyAgICAgICAgaWYgYTExeV9idXNf
bGF1bmNoZWQ6CisgICAgICAgICAgICBhMTF5X2J1c19sYXVuY2hlci5raWxsKCkKKwogICAgICAg
ICBpZiBleGl0X3N0YXR1c1swXToKICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlRlc3Rz
IGZhaWxlZFxuIikKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMKaW5k
ZXggZjFhMmM1Yi4uNDY4OTFhOSAxMDA2NDQKLS0tIGEvVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxl
cworKysgYi9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzCkBAIC0xMyw2ICsxMyw4IEBACiAgICAg
ICA8ZGVwIHBhY2thZ2U9ImdsaWItbmV0d29ya2luZyIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJn
bm9tZS1pY29uLXRoZW1lIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImxpYnNvdXAiLz4KKyAgICAg
IDxkZXAgcGFja2FnZT0iYXQtc3BpMi1jb3JlIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImF0LXNw
aTItYXRrIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvbWV0YW1vZHVsZT4KIApAQCAtMTQ3
LDQgKzE0OSwyNyBAQAogICAgIDwvYnJhbmNoPgogICA8L2F1dG90b29scz4KIAorICA8YXV0b3Rv
b2xzIGlkPSJhdC1zcGkyLWNvcmUiPgorICAgIDxicmFuY2ggbW9kdWxlPSJwdWIvR05PTUUvc291
cmNlcy9hdC1zcGkyLWNvcmUvMi4yL2F0LXNwaTItY29yZS0yLjIuMS50YXIueHoiIHZlcnNpb249
IjIuMi4xIgorICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIKKyAgICAgICAgICAgIGhh
c2g9InNoYTI1NjoyYTQxMjk0MjBkZWNjYTM2NTdlMTYzYTRkYmIxYTNjYjI4YWNhZmUzMmVhMTI5
MjQxN2ZkZDgxMDg0ZDQ4ZmFjIgorICAgICAgICAgICAgbWQ1c3VtPSIxODM5MTYzNzNkNjkwNmZm
NmIyMjBiZDQ0ZDE1ZmY5NyI+CisgICAgPC9icmFuY2g+CisgICAgPGRlcGVuZGVuY2llcz4KKyAg
ICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgorICAgIDwvZGVwZW5kZW5jaWVzPgorICA8L2F1dG90
b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJhdC1zcGkyLWF0ayI+CisgICAgPGJyYW5jaCBtb2R1
bGU9InB1Yi9HTk9NRS9zb3VyY2VzL2F0LXNwaTItYXRrLzIuMi9hdC1zcGkyLWF0ay0yLjIuMS50
YXIueHoiIHZlcnNpb249IjIuMi4xIgorICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIK
KyAgICAgICAgICAgIGhhc2g9InNoYTI1Njo2Njc3ZGVmMzRiMTZjOWEyOGQ2YWQ5NjQ3M2VhNTZh
M2MwZTEzYWE5NjhlNTg0ZGYwMDRjZDQ0Yzg2OTFlYTFhIgorICAgICAgICAgICAgbWQ1c3VtPSIx
OTY0NjA5N2FjYTI1YTljMWI4YmE3YWI4ZDE3MjkxNiI+CisgICAgPC9icmFuY2g+CisgICAgPGRl
cGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgorICAgICAgPGRlcCBwYWNr
YWdlPSJhdC1zcGkyLWNvcmUiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9hdXRvdG9vbHM+
CisKIDwvbW9kdWxlc2V0PgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFj
CmluZGV4IGM2ZDkxY2QuLmFhNzQwMTggMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9j
b25maWd1cmUuYWMKQEAgLTI4OCw2ICsyODgsNyBAQCBFTkNIQU5UX1JFUVVJUkVEX1ZFUlNJT049
MC4yMgogTElCRkZUV19SRVFVSVJFRF9WRVJTSU9OPTMuMi4yCiBDTFVUVEVSX1JFUVVJUkVEX1ZF
UlNJT049MS44LjIKIENMVVRURVJfR1RLX1JFUVVJUkVEX1ZFUlNJT049MS4wLjIKK0FUU1BJMl9S
RVFVSVJFRF9WRVJTSU9OPTIuMi4xCiAKICMgQXZhaWxhYmxlIG1vZHVsZXMKICMKQEAgLTEwNTcs
NiArMTA1OCwxNyBAQCBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAi
Y2x1dHRlciI7IHRoZW4KICAgIEFDX1NVQlNUKENMVVRURVJfR1RLX0xJQlMpCiBmaQogCisjIGNo
ZWNrIGlmIGF0c3BpMiBpcyBhdmFpbGFibGUgKG9ubHkgbmVlZGVkIGZvciBXZWJraXQyIHVuaXQg
dGVzdHMpCitpZiB0ZXN0ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyI7IHRoZW4KKyAgIFBLR19D
SEVDS19NT0RVTEVTKFtBVFNQSTJdLAorICAgICAgICAgICAgICAgICAgICAgW2F0c3BpLTIgPj0g
JEFUU1BJMl9SRVFVSVJFRF9WRVJTSU9OXSwKKyAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2F0
c3BpMj15ZXNdLCBbaGF2ZV9hdHNwaTI9bm9dKQorCisgICBBQ19TVUJTVChbQVRTUEkyX0NGTEFH
U10pCisgICBBQ19TVUJTVChbQVRTUEkyX0xJQlNdKQorZmkKKworCiAjIGNoZWNrIGZvciBjb2Rl
IGNvdmVyYWdlIHN1cHBvcnQKIGlmIHRlc3QgIiRlbmFibGVfY292ZXJhZ2UiID0gInllcyI7IHRo
ZW4KICAgIENPVkVSQUdFX0NGTEFHUz0iLU1EIgpAQCAtMTEzMCw2ICsxMTQyLDkgQEAgQU1fQ09O
RElUSU9OQUwoW1VTRV9QQU5HT10sIFt0ZXN0ICIkd2l0aF9mb250X2JhY2tlbmQiID0gInBhbmdv
Il0pCiAjIEdTdHJlYW1lciBmZWF0dXJlIGNvbmRpdGlvbmFsCiBBTV9DT05ESVRJT05BTChbVVNF
X0dTVFJFQU1FUl0sIFt0ZXN0ICIkaGF2ZV9nc3RyZWFtZXIiID0gInllcyJdKQogCisjIEFUU1BJ
MiBjb25kaXRpb25hbAorQU1fQ09ORElUSU9OQUwoW0hBVkVfQVRTUEkyXSwgW3Rlc3QgIiRoYXZl
X2F0c3BpMiIgPSAieWVzIl0pCisKICMgQWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgY29uZGl0aW9u
YWwKIEFNX0NPTkRJVElPTkFMKFtVU0VfQUNDRUxFUkFURURfQ09NUE9TSVRJTkddLCBbdGVzdCAi
JHdpdGhfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmciID0gImNhaXJvIiB8fCB0ZXN0ICIkd2l0aF9h
Y2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAib3BlbmdsIiB8fCB0ZXN0ICIkd2l0aF9hY2NlbGVy
YXRlZF9jb21wb3NpdGluZyIgPSAiY2x1dHRlciJdKQogQU1fQ09ORElUSU9OQUwoW1VTRV9URVhU
VVJFX01BUFBFUl9DQUlST10sIFt0ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIg
PSAiY2Fpcm8iXSkKLS0gCjEuNy43LjQKCg==
</data>
<flag name="commit-queue"
          id="122266"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121814</attachid>
            <date>2012-01-10 02:16:11 -0800</date>
            <delta_ts>2012-01-19 09:47:50 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-01-09-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>61486</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBhNGVhYjBkZTE3Nzk2ODQwOTc2YjBkYTEwMzNlNDQxNjA2NWE4MGI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE5IE9jdCAyMDExIDIwOjA1OjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0wOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQy
IHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBOZXcgb3B0aW9uYWwgZGVwZW5kZW5jeSBmb3IgV0syJ3MgYWNjZXNzaWJpbGl0
eSB1bml0IHRlc3Q6IEFULVNQSTIuCgogICAgICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3Ig
QVQtU1BJMiB3aGVuIGJ1aWxkaW5nIHdpdGggV0syIHN1cHBvcnQuCgoyMDEyLTAxLTA5ICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gRXhw
b3NlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNl
ZCBBVHMKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1
ODkKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEV4cG9zZSB0
aGUgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKICAgICAgICBh
cmNoaXRlY3R1cmUgb2YgV0syIHRocm91Z2ggQXRrU29ja2V0IGFkIEF0a1BsdWcuCgogICAgICAg
IE1ha2UgdGhlIFdlYlZpZXcgd2lkZ2V0IHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5n
IHRvCiAgICAgICAgZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZSgpLgoKICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwOgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KToK
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKToKICAgICAgICAod2Via2l0
X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwOiBBZGRlZC4KICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RmluYWxpemUpOgogICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVJbml0aWFsaXplKToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlUmVmU3RhdGVTZXQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJ
bmRleEluUGFyZW50KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9p
bml0KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9jbGFzc19pbml0
KToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KToKICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oOiBBZGRlZC4KCiAg
ICAgICAgTWFrZSB0aGUgV2ViUGFnZSBjcmVhdGUgYW4gQXRrUGx1ZyBvbiBpdHMgaW5pdGlhbGl6
YXRpb24gYW5kCiAgICAgICAgc2VuZGluZyB0aGUgSUQgb2YgdGhhdCBwbHVnIHRvIHRoZSBVSSBw
cm9jZXNzLCBzbyBpdCBjYW4gZW1iZWQgdGhlCiAgICAgICAgcGx1ZyBpbiB0aGUgc29ja2V0LgoK
ICAgICAgICBBbHNvLCB0YWtlIGNhcmUgb2YgYWxsIHRoZSBuZWVkZWQgd3JhcHBpbmcgYXJvdW5k
IHRoZSBXZWJDb3JlJ3MKICAgICAgICBhY2Nlc3NpYmlsaXR5IG9iamVjdHMsIGV4cG9zaW5nIHRo
ZW0gaW4gdGhlIFVJIHByb2Nlc3MncwogICAgICAgIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IHRo
YW5rcyB0byB0aGUgc29ja2V0LXBsdWcgY29ubmVjdGlvbi4KCiAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRBY2Nlc3Np
YmlsaXR5UGx1Z0lEKToKICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CiAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CiAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJpbGl0eVRyZWUpOgogICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CiAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6
CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CiAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6V2ViUGFnZSk6CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmNwcDogQWRkZWQuCiAgICAgICAgKGFjY2Vzc2li
aWxpdHlSb290T2JqZWN0V3JhcHBlcik6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5pdGlhbGl6ZSk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5k
ZXhJblBhcmVudCk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxk
cmVuKToKICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZDaGlsZCk6CiAgICAg
ICAgKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2luaXQpOgogICAgICAgICh3ZWJfcGFn
ZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KToKICAgICAgICAod2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3ROZXcpOgogICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJl
ZnJlc2gpOgogICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdEd0ay5oOiBBZGRlZC4KICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUGFnZUd0ay5jcHA6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFs
aXplKToKICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSk6
CgogICAgICAgIE5ldyB1bml0IHRlc3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9y
dCBpbiBXSzJHVEsuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJp
bGl0eVRlc3RTZXJ2ZXIuY3BwOiBBZGRlZC4KICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6
IE5vdGlmeSB0aGUgcGFyZW50IHByb2Nlc3MgKHRoZSB0ZXN0KQogICAgICAgIHdoZW4gcmVhZHku
CiAgICAgICAgKG1haW4pOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW06CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHA6IEFkZGVkLgogICAgICAgIChzdG9wVGVzdFNlcnZlcik6CiAgICAgICAg
KHNpZ0Fib3J0SGFuZGxlcik6CiAgICAgICAgKHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyk6
CiAgICAgICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3IpOgogICAgICAgIChzdGFydFRlc3RTZXJ2
ZXIpOgogICAgICAgIChjaGVja0F0c3BpQWNjZXNzaWJsZSk6CiAgICAgICAgKGZpbmRUZXN0U2Vy
dmVyQXBwbGljYXRpb24pOgogICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6CiAgICAg
ICAgKGJlZm9yZUFsbCk6CiAgICAgICAgKGFmdGVyQWxsKToKCjIwMTItMDEtMDkgIE1hcmlvIFNh
bmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAgICBbR1RLXSBFeHBvc2Ug
YWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFU
cwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgRW5zdXJlIHRoZSBh
Y2Nlc3NpYmlsaXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcKICAg
ICAgICB0aGUgdW5pdCB0ZXN0cywgb3RoZXJ3aXNlIFdLMidzIGFjY2Vzc2liaWxpdHkgdGVzdHMg
d29uJ3Qgd29yay4KCiAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6CiAgICAgICAgKFRl
c3RSdW5uZXIpOgogICAgICAgIChUZXN0UnVubmVyLl9sb29rdXBBdHNwaTJCaW5hcnkpOiBOZXcu
IExvb2tzIGZvciB0aGUgZGlyZWN0b3J5CiAgICAgICAgd2hlcmUgYXQtc3BpMidzIHN0dWZmIGlz
IGxvY2F0ZWQgKGxpa2UgYXQtc3BpLWJ1cy1sYXVuY2hlciBhbmQKICAgICAgICBhdC1zcGkyLXJl
Z2lzdHJ5ZCkuCiAgICAgICAgKFRlc3RSdW5uZXIucnVuKTogSW5pdGlhbGl6ZSB0aGUgYWNjZXNz
aWJpbGl0eSBpbmZyYXN0cnVjdHVyZS4KCiAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgog
ICAgICAgIChnZXRfd2Via2l0Ml9vcHRpb25zKTogQWRkICdXZWJLaXRXZWJWaWV3QmFzZUFjY2Vz
c2libGUuKicuCgogICAgICAgICogZ3RrL2poYnVpbGQubW9kdWxlczogQWRkZWQgYXQtc3BpMi1j
b3JlIGFuZCBhdC1zcGkyLWF0ay4KLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgwICsrKysrKysKIFNvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiAuLi4vVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwICAgICAgICB8ICAgMzEgKysrCiAuLi4vQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwICAgICAgICB8ICAxMjkgKysrKysr
KysrKysKIC4uLi9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oICAgICAgICAg
IHwgICA2MiArKysrKysKIC4uLi9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVy
LmNwcCAgICAgIHwgICA1OCArKysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvR05VbWFrZWZpbGUuYW0gfCAgIDIwICsrCiAuLi4vQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
QWNjZXNzaWJpbGl0eS5jcHAgICAgICB8ICAyMjkgKysrKysrKysrKysrKysrKysrKysKIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCAgICAgICAgICAgIHwgICAgOSArCiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICB8ICAgIDMg
KwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwICAgfCAg
ICA1ICsKIC4uLi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgICAgICAg
IHwgICAgNSArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
ICAgICB8ICAgIDIgKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aCAgICAgICAgfCAgIDEwICstCiAuLi4vV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlP
YmplY3RHdGsuY3BwICB8ICAxNDAgKysrKysrKysrKysrCiAuLi4vV2ViUGFnZS9ndGsvV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCAgICB8ICAgNjQgKysrKysrCiAuLi4vV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwICB8ICAgMTkgKystCiBUb29scy9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjIgKysKIFRv
b2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NiAr
KysrLQogVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYyAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAxICsKIFRvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAyNSArKysKIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAxNSArKwogMjMgZmlsZXMgY2hhbmdlZCwgOTg2IGluc2VydGlvbnMoKyks
IDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFj
Y2Vzc2liaWxpdHkuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFu
Z2VMb2cKaW5kZXggODRlNTRlNS4uNzQxM2I5NCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBi
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAxLTA5ICBNYXJpbyBTYW5jaGV6IFBy
YWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBFeHBvc2UgYWNjZXNz
aWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFUcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1ODkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgb3B0aW9uYWwg
ZGVwZW5kZW5jeSBmb3IgV0syJ3MgYWNjZXNzaWJpbGl0eSB1bml0IHRlc3Q6IEFULVNQSTIuCisK
KyAgICAgICAgKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBBVC1TUEkyIHdoZW4gYnVpbGRpbmcg
d2l0aCBXSzIgc3VwcG9ydC4KKwogMjAxMi0wMS0wNCAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5j
b20+CiAKICAgICAgICAgQ2xpY2tpbmcgb24gdGhlIGNhbmNlbCBidXR0b24gb24gcmVhZG9ubHkg
YW5kIGRpc2FibGVkIHNlYXJjaCBmaWVsZHMgZGFya2VucyBhcyBpZiB0aGUgc2VhcmNoIGZpZWxk
IHdhcyBlZGl0YWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDU1ZDE4NGEuLjQ1NzUyMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw4MyBAQAorMjAxMi0wMS0wOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5j
aGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRXhwb3NlIGFjY2Vzc2liaWxpdHkgaGll
cmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNlZCBBVHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlIHRoZSBhY2Nlc3NpYmlsaXR5
IGhpZXJhcmNoeSBpbiB0aGUgbXVsdGktcHJvY2VzcworICAgICAgICBhcmNoaXRlY3R1cmUgb2Yg
V0syIHRocm91Z2ggQXRrU29ja2V0IGFkIEF0a1BsdWcuCisKKyAgICAgICAgTWFrZSB0aGUgV2Vi
VmlldyB3aWRnZXQgcmV0dXJuIGFuIEF0a1NvY2tldCB3aGVuIGNhbGxpbmcgdG8KKyAgICAgICAg
Z3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZSgpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IEFkZCBuZXcgZmlsZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZUdldEFjY2Vzc2libGUpOgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X2Jhc2VfY2xhc3NfaW5pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVXaWRnZXRGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlSW5pdGlhbGl6ZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2li
bGVSZWZTdGF0ZVNldCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJ
bmRleEluUGFyZW50KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2NsYXNzX2lu
aXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaDogQWRkZWQu
CisKKyAgICAgICAgTWFrZSB0aGUgV2ViUGFnZSBjcmVhdGUgYW4gQXRrUGx1ZyBvbiBpdHMgaW5p
dGlhbGl6YXRpb24gYW5kCisgICAgICAgIHNlbmRpbmcgdGhlIElEIG9mIHRoYXQgcGx1ZyB0byB0
aGUgVUkgcHJvY2Vzcywgc28gaXQgY2FuIGVtYmVkIHRoZQorICAgICAgICBwbHVnIGluIHRoZSBz
b2NrZXQuCisKKyAgICAgICAgQWxzbywgdGFrZSBjYXJlIG9mIGFsbCB0aGUgbmVlZGVkIHdyYXBw
aW5nIGFyb3VuZCB0aGUgV2ViQ29yZSdzCisgICAgICAgIGFjY2Vzc2liaWxpdHkgb2JqZWN0cywg
ZXhwb3NpbmcgdGhlbSBpbiB0aGUgVUkgcHJvY2VzcydzCisgICAgICAgIGFjY2Vzc2liaWxpdHkg
aGllcmFyY2h5IHRoYW5rcyB0byB0aGUgc29ja2V0LXBsdWcgY29ubmVjdGlvbi4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpnZXRBY2Nlc3NpYmlsaXR5UGx1Z0lEKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJpbGl0
eVRyZWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcik6CisgICAgICAg
ICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEluaXRpYWxpemUpOgorICAgICAgICAod2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RHZXRJbmRleEluUGFyZW50KToKKyAgICAgICAgKHdlYlBhZ2VB
Y2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxkcmVuKToKKyAgICAgICAgKHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0UmVmQ2hpbGQpOgorICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9v
YmplY3RfaW5pdCk6CisgICAgICAgICh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFz
c19pbml0KToKKyAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0TmV3KToKKyAgICAg
ICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmcmVzaCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oOiBBZGRlZC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSk6CisKKyAgICAgICAgTmV3IHVuaXQg
dGVzdCBmb3IgY2hlY2tpbmcgYWNjZXNzaWJpbGl0eSBzdXBwb3J0IGluIFdLMkdUSy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNw
cDogQWRkZWQuCisgICAgICAgIChsb2FkQ2hhbmdlZENhbGxiYWNrKTogTm90aWZ5IHRoZSBwYXJl
bnQgcHJvY2VzcyAodGhlIHRlc3QpCisgICAgICAgIHdoZW4gcmVhZHkuCisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5j
cHA6IEFkZGVkLgorICAgICAgICAoc3RvcFRlc3RTZXJ2ZXIpOgorICAgICAgICAoc2lnQWJvcnRI
YW5kbGVyKToKKyAgICAgICAgKHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyk6CisgICAgICAg
IChzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKToKKyAgICAgICAgKHN0YXJ0VGVzdFNlcnZlcik6Cisg
ICAgICAgIChjaGVja0F0c3BpQWNjZXNzaWJsZSk6CisgICAgICAgIChmaW5kVGVzdFNlcnZlckFw
cGxpY2F0aW9uKToKKyAgICAgICAgKHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KToKKyAgICAgICAg
KGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisKIDIwMTItMDEtMDggIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTAzODU5KTog
V0tWaWV3cyBsZWFrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRjYjQ3YTEuLjJiOTUwMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCkBAIC01NDcsNiArNTQ3LDggQEAgbGlid2Via2l0Mmd0a19AV0VC
S0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9s
YV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlQWNjZXNzaWJsZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaCBcCkBAIC04
OTIsNiArODk0LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9O
QF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgg
XAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3RHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDg2NjA3MTYuLjlmOTRlYWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgog
I2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKyNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0NsaXBib2FyZEd0ay5oPgpAQCAtNjksNiArNzAsNyBAQCBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIgZHJhZ0FuZERy
b3BIZWxwZXI7CiAgICAgRHJhZ0ljb24gZHJhZ0ljb247CiAgICAgSW50U2l6ZSByZXNpemVyU2l6
ZTsKKyAgICBHUmVmUHRyPEF0a09iamVjdD4gYWNjZXNzaWJsZTsKIH07CiAKIEdfREVGSU5FX1RZ
UEUoV2ViS2l0V2ViVmlld0Jhc2UsIHdlYmtpdF93ZWJfdmlld19iYXNlLCBHVEtfVFlQRV9DT05U
QUlORVIpCkBAIC0zNzQsNiArMzc2LDM0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0RhdGFSZWNlaXZlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqCiAgICAg
Z2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rp
b24ob3BlcmF0aW9uKSwgdGltZSk7CiB9CiAKK3N0YXRpYyBBdGtPYmplY3QqIHdlYmtpdFdlYlZp
ZXdCYXNlR2V0QWNjZXNzaWJsZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBJZiB0aGUg
c29ja2V0IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBhbmQgZW1iZWRkZWQgYSBwbHVnIElELCBy
ZXR1cm4gaXQuCisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dF
Ql9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKKyAgICBpZiAocHJpdi0+YWNjZXNzaWJsZSAmJiBh
dGtfc29ja2V0X2lzX29jY3VwaWVkKEFUS19TT0NLRVQocHJpdi0+YWNjZXNzaWJsZS5nZXQoKSkp
KQorICAgICAgICByZXR1cm4gcHJpdi0+YWNjZXNzaWJsZS5nZXQoKTsKKworICAgIC8vIENyZWF0
ZSB0aGUgYWNjZXNzaWJsZSBvYmplY3QgYW5kIGFzc29jaWF0ZSBpdCB0byB0aGUgd2lkZ2V0Lgor
ICAgIGlmICghcHJpdi0+YWNjZXNzaWJsZSkgeworICAgICAgICBwcml2LT5hY2Nlc3NpYmxlID0g
YWRvcHRHUmVmKEFUS19PQkpFQ1Qod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KHdpZGdl
dCkpKTsKKworICAgICAgICAvLyBTZXQgdGhlIHBhcmVudCBub3QgdG8gYnJlYWsgYm90dG9tLXVw
IG5hdmlnYXRpb24uCisgICAgICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gZ3RrX3dpZGdl
dF9nZXRfcGFyZW50KHdpZGdldCk7CisgICAgICAgIEF0a09iamVjdCogYXhQYXJlbnQgPSBwYXJl
bnRXaWRnZXQgPyBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKHBhcmVudFdpZGdldCkgOiAwOwor
ICAgICAgICBpZiAoYXhQYXJlbnQpCisgICAgICAgICAgICBhdGtfb2JqZWN0X3NldF9wYXJlbnQo
cHJpdi0+YWNjZXNzaWJsZS5nZXQoKSwgYXhQYXJlbnQpOworICAgIH0KKworICAgIC8vIFRyeSB0
byBlbWJlZCB0aGUgcGx1ZyBpbiB0aGUgc29ja2V0LCBpZiBwb3Nzc2libGUuCisgICAgU3RyaW5n
IHBsdWdJRCA9IHByaXYtPnBhZ2VQcm94eS0+Z2V0QWNjZXNzaWJpbGl0eVBsdWdJRCgpOworICAg
IGlmIChwbHVnSUQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwcml2LT5hY2Nlc3NpYmxlLmdl
dCgpOworCisgICAgYXRrX3NvY2tldF9lbWJlZChBVEtfU09DS0VUKHByaXYtPmFjY2Vzc2libGUu
Z2V0KCkpLCBjb25zdF9jYXN0PGdjaGFyKj4ocGx1Z0lELnV0ZjgoKS5kYXRhKCkpKTsKKworICAg
IHJldHVybiBwcml2LT5hY2Nlc3NpYmxlLmdldCgpOworfQorCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4
dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRpbWUpCiB7CiAgICAgV2ViS2l0V2Vi
Vmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKQEAg
LTQzOCw2ICs0NjgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19p
bml0KFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdpZGdldENsYXNz
LT5kcmFnX2xlYXZlID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnTGVhdmU7CiAgICAgd2lkZ2V0Q2xh
c3MtPmRyYWdfZHJvcCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Ryb3A7CiAgICAgd2lkZ2V0Q2xh
c3MtPmRyYWdfZGF0YV9yZWNlaXZlZCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZl
ZDsKKyAgICB3aWRnZXRDbGFzcy0+Z2V0X2FjY2Vzc2libGUgPSB3ZWJraXRXZWJWaWV3QmFzZUdl
dEFjY2Vzc2libGU7CiAKICAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHdlYmtpdFdlYlZpZXdCYXNlQ2xhc3MpOwogICAgIGdvYmplY3RDbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRXZWJWaWV3QmFzZUZpbmFsaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwOGQzZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlQWNjZXNzaWJsZS5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIgorCitzdHJ1Y3QgX1dlYktpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUgeworICAgIEd0a1dpZGdldCogd2lkZ2V0OworfTsK
KworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUsIHdlYmtpdF93ZWJf
dmlld19iYXNlX2FjY2Vzc2libGUsIEFUS19UWVBFX1NPQ0tFVCkKKworc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlRmluYWxpemUoR09iamVjdCogZ29iamVjdCkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIGFjY2Vzc2libGUgPSBXRUJLSVRfV0VCX1ZJ
RVdfQkFTRV9BQ0NFU1NJQkxFKGdvYmplY3QpOworICAgIGFjY2Vzc2libGUtPnByaXYtPn5XZWJL
aXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShnb2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0
RGVzdHJveWVkKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUq
IGFjY2Vzc2libGUpCit7CisgICAgYWNjZXNzaWJsZS0+cHJpdi0+d2lkZ2V0ID0gMDsKKyAgICBh
dGtfb2JqZWN0X25vdGlmeV9zdGF0ZV9jaGFuZ2UoQVRLX09CSkVDVChhY2Nlc3NpYmxlKSwgQVRL
X1NUQVRFX0RFRlVOQ1QsIFRSVUUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVJbml0aWFsaXplKEF0a09iamVjdCogYXRrT2JqZWN0LCBncG9pbnRlciBkYXRh
KQoreworICAgIGlmIChBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vz
c2libGVfcGFyZW50X2NsYXNzKS0+aW5pdGlhbGl6ZSkKKyAgICAgICAgQVRLX09CSkVDVF9DTEFT
Uyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxp
emUoYXRrT2JqZWN0LCBkYXRhKTsKKworICAgIGlmIChkYXRhICYmIEdUS19JU19XSURHRVQoZGF0
YSkpIHsKKyAgICAgICAgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlID0g
V0VCS0lUX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRShhdGtPYmplY3QpOworICAgICAgICBhY2Nl
c3NpYmxlLT5wcml2LT53aWRnZXQgPSBHVEtfV0lER0VUKGRhdGEpOworCisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3RfYWZ0ZXIoYWNjZXNzaWJsZS0+cHJpdi0+d2lkZ2V0LCAiZGVzdHJveSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpLCBhdGtPYmplY3QpOworICAgIH0KKworICAgIGF0
a19vYmplY3Rfc2V0X3JvbGUoYXRrT2JqZWN0LCBBVEtfUk9MRV9GSUxMRVIpOworfQorCitzdGF0
aWMgQXRrU3RhdGVTZXQqIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVJlZlN0YXRlU2V0KEF0
a09iamVjdCogYXRrT2JqZWN0KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSog
YWNjZXNzaWJsZSA9IFdFQktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUoYXRrT2JqZWN0KTsK
KworICAgIEF0a1N0YXRlU2V0KiBzdGF0ZVNldDsKKyAgICBpZiAoYWNjZXNzaWJsZS0+cHJpdi0+
d2lkZ2V0KSB7CisgICAgICAgIC8vIFVzZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgQXRrU29ja2V0
IGlmIHRoZSB3aWRnZXQgaXMgc3RpbGwgYWxpdmUuCisgICAgICAgIHN0YXRlU2V0ID0gQVRLX09C
SkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcykt
PnJlZl9zdGF0ZV9zZXQoYXRrT2JqZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB0
aGUgd2lkZ2V0IGlzIG5vIGxvbmdlciBhbGl2ZSwgc2F2ZSBzb21lIHJlbW90ZSBjYWxscworICAg
ICAgICAvLyAoYmVjYXVzZSBvZiBBdGtTb2NrZXQncyBpbXBsZW1lbnRhdGlvbiBvZiByZWZfc3Rh
dGVfc2V0KCkpCisgICAgICAgIC8vIGFuZCBqdXN0IHJldHVybiB0aGF0IHRoaXMgQXRrT2JqZWN0
IGlzIGRlZnVuY3QuCisgICAgICAgIHN0YXRlU2V0ID0gYXRrX3N0YXRlX3NldF9uZXcoKTsKKyAg
ICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9ERUZVTkNU
KTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGVTZXQ7Cit9CisKK3N0YXRpYyBnaW50IHdlYmtp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZUdldEluZGV4SW5QYXJlbnQoQXRrT2JqZWN0KiBhdGtPYmpl
Y3QpCit7CisgICAgQXRrT2JqZWN0KiBhdGtQYXJlbnQgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQo
YXRrT2JqZWN0KTsKKyAgICBpZiAoIWF0a1BhcmVudCkKKyAgICAgICAgcmV0dXJuIC0xOworCisg
ICAgZ3VpbnQgY291bnQgPSBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oYXRr
UGFyZW50KTsKKyAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChhdGtQ
YXJlbnQsIGkpOworICAgICAgICBib29sIGNoaWxkSXNPYmplY3QgPSBjaGlsZCA9PSBhdGtPYmpl
Y3Q7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKKyAgICAgICAgaWYgKGNoaWxkSXNP
YmplY3QpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfaW5pdChXZWJL
aXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIGFjY2Vzc2libGUpCit7CisgICAgV2ViS2l0V2ViVmll
d0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShhY2Nlc3NpYmxlLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUsIFdlYktp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUpOworICAgIGFjY2Vzc2libGUtPnByaXYgPSBw
cml2OworICAgIG5ldyAocHJpdikgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSgp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2NsYXNz
X2luaXQoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdP
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVGaW5hbGl6
ZTsKKworICAgIC8vIE5vIG5lZWQgdG8gaW1wbGVtZW50IGdldF9uX2NoaWxkcmVuKCkgYW5kIHJl
Zl9jaGlsZCgpIGhlcmUKKyAgICAvLyBzaW5jZSB0aGlzIGlzIGEgc3ViY2xhc3Mgb2YgQXRrU29j
a2V0IGFuZCBhbGwgdGhlIGxvZ2ljIHJlbGF0ZWQKKyAgICAvLyB0byB0aG9zZSBmdW5jdGlvbnMg
d2lsbCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgQVRLIGJyaWRnZS4KKyAgICBBdGtPYmplY3RDbGFz
cyogYXRrT2JqZWN0Q2xhc3MgPSBBVEtfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBhdGtPYmpl
Y3RDbGFzcy0+aW5pdGlhbGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUluaXRpYWxp
emU7CisgICAgYXRrT2JqZWN0Q2xhc3MtPnJlZl9zdGF0ZV9zZXQgPSB3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVSZWZTdGF0ZVNldDsKKyAgICBhdGtPYmplY3RDbGFzcy0+Z2V0X2luZGV4X2lu
X3BhcmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUdldEluZGV4SW5QYXJlbnQ7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVQcml2YXRlKSk7Cit9CisKK1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZSogd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KEd0a1dpZGdldCogd2lkZ2V0KQorewor
ICAgIEF0a09iamVjdCogb2JqZWN0ID0gQVRLX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBOVUxMKSk7CisgICAgYXRrX29iamVjdF9pbml0
aWFsaXplKG9iamVjdCwgd2lkZ2V0KTsKKyAgICByZXR1cm4gV0VCS0lUX1dFQl9WSUVXX0JBU0Vf
QUNDRVNTSUJMRShvYmplY3QpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjcxZDk5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZV9oCisj
ZGVmaW5lIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZV9oCisKKyNpbmNsdWRlIDxhdGsvYXRr
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFICAgICAgICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJ
RVdfQkFTRV9BQ0NFU1NJQkxFKG9iamVjdCkgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqZWN0KSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBX
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFT
RV9BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUsIFdlYktpdFdlYlZp
ZXdCYXNlQWNjZXNzaWJsZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXX0JBU0Vf
QUNDRVNTSUJMRShvYmplY3QpICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
amVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSkpCisjZGVmaW5lIFdF
QktJVF9JU19XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEVfQ0xBU1Moa2xhc3MpICAgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNT
SUJMRSkpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEVfR0VUX0NMQVNT
KG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVjdCksIFdFQktJVF9UWVBF
X1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xh
c3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlIFdlYktp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVDbGFzcyBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlIFdlYktpdFdlYlZp
ZXdCYXNlQWNjZXNzaWJsZVByaXZhdGU7CisKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZUFj
Y2Vzc2libGUgeworICAgIEF0a1NvY2tldCBwYXJlbnQ7CisgICAgLyo8IHByaXZhdGUgPiovCisg
ICAgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MgeworICAgIEF0a1NvY2tldENsYXNz
IHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJs
ZV9nZXRfdHlwZSgpOworCitXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIHdlYmtpdFdlYlZp
ZXdCYXNlQWNjZXNzaWJsZU5ldyhHdGtXaWRnZXQqKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8vIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVz
dFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjZmEyMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyB2
b2lkIGxvYWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdExvYWRFdmVudCBs
b2FkRXZlbnQsIGdwb2ludGVyKQoreworICAgIC8vIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBwYXJl
bnQgcHJvY2VzcyB3aGVuIHdlJ3JlIHJlYWR5LgorICAgIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lU
X0xPQURfRklOSVNIRUQpCisgICAgICAgIGdfcHJpbnQoIk9LIik7Cit9CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBib3RoIEdBSUwg
YW5kIHRoZSBBVEsgYnJpZGdlIGFyZSBsb2FkZWQuCisgICAgZ19zZXRlbnYoIkdUS19NT0RVTEVT
IiwgImdhaWw6YXRrLWJyaWRnZSIsIFRSVUUpOworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2
KTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+IgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgIDxoMT5UaGlzIGlzIGEgdGVzdDwvaDE+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBzb21lIHBsYWluIHRleHQuPC9wPiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICA8cD5UaGlzIHBhcmFncmFwaCBjb250
YWlucyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+YSBsaW5rPC9hPiBpbiB0
aGUgbWlkZGxlLjwvcD4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8L2JvZHk+
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5k
b3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9z
aG93X2FsbCh3aW5kb3cpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUt
ZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJh
Y2spLCAwKTsKKworICAgIGd0a19tYWluKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IGQ5MTJiNjUuLjE3
NTlkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtCkBAIC02LDYgKzYsMTMgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJv
Z3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QKIAogbm9pbnN0X1BST0dS
QU1TICs9ICQoVEVTVF9QUk9HUykKKworaWYgSEFWRV9BVFNQSTIKK1RFU1RfUFJPR1MgKz0gUHJv
Z3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5CisKK25vaW5zdF9Q
Uk9HUkFNUyArPSBQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2
ZXIKK2VuZGlmCisKIHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MgPSBcCiAJLURXRUJLSVRfRVhFQ19Q
QVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtc1wiIFwKIAkkKGphdmFz
Y3JpcHRjb3JlX2NwcGZsYWdzKSBcCkBAIC03NiwzICs4MywxNiBAQCBQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19j
cHBmbGFncwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERB
REQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK2lm
IEhBVkVfQVRTUEkyCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfQWNjZXNzaWJpbGl0eVRlc3RT
ZXJ2ZXJfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19B
Y2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9MREFE
RCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19BY2Nl
c3NpYmlsaXR5VGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9TT1VSQ0VT
ID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nl
c3NpYmlsaXR5X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKSAkKEFUU1BJMl9D
RkxBR1MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlf
TERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoQVRTUEkyX0xJQlMpCitQcm9ncmFtc19X
ZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQod2Via2l0
Ml90ZXN0c19sZGZsYWdzKQorZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
QWNjZXNzaWJpbGl0eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODMwZTA5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApAQCAtMCwwICsx
LDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgorCisvLyBUaGUgbGliYXRzcGkgaGVhZGVycyBkb24ndCB1c2UgR19CRUdJTl9ERUNMUwor
ZXh0ZXJuICJDIiB7CisjaW5jbHVkZSA8YXRzcGkvYXRzcGkuaD4KK30KKyNpbmNsdWRlIDxlcnJu
by5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHNp
Z25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKworLy8gTmFtZSBvZiB0aGUgdGVzdCBzZXJ2ZXIgYXBwbGljYXRpb24gY3Jl
YXRpbmcgdGhlIHdlYlZpZXcgb2JqZWN0Lgorc3RhdGljIGNvbnN0IGNoYXIqIGtUZXN0U2VydmVy
QXBwTmFtZSA9ICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciI7CisKKy8vIE1heCBzZWNvbmRzIHRv
IHdhaXQgZm9yIHRoZSB0ZXN0IHNlcnZlciBiZWZvcmUgaW5zcGVjdGluZyBpdC4KK3N0YXRpYyBj
b25zdCBpbnQga01heFdhaXRGb3JDaGlsZCA9IDU7CisKKy8vIFRoZSBQSUQgZm9yIHRoZSB0ZXN0
IHNlcnZlciBydW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCitzdGF0aWMgR1Bp
ZCBrQ2hpbGRQcm9jZXNzUGlkID0gMDsKKworLy8gV2hldGhlciB0aGUgY2hpbGQgaGFzIHJlcGxp
ZWQgYW5kIGl0J3MgcmVhZHkuCitzdGF0aWMgYm9vbCBrQ2hpbGRJc1JlYWR5ID0gZmFsc2U7CisK
K3N0YXRpYyB2b2lkIHN0b3BUZXN0U2VydmVyKCkKK3sKKyAgICAvLyBEbyBub3RoaW5nIGlmIHRo
ZXJlJ3Mgbm8gc2VydmVyIHJ1bm5pbmcuCisgICAgaWYgKCFrQ2hpbGRQcm9jZXNzUGlkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnX3NwYXduX2Nsb3NlX3BpZChrQ2hpbGRQcm9jZXNzUGlkKTsK
KyAgICBraWxsKGtDaGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOworICAgIGtDaGlsZFByb2Nlc3NQ
aWQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRsZXIoaW50IHNpZ051bSkKK3sK
KyAgICAvLyBKdXN0IHN0b3AgdGhlIHRlc3Qgc2VydmVyIGlmIFNJR0FCUlQgd2FzIHJlY2VpdmVk
LgorICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3N0YXRpYyBncG9pbnRlciB0ZXN0U2VydmVy
TW9uaXRvclRocmVhZEZ1bmMoZ3BvaW50ZXIpCit7CisgICAgLy8gV2FpdCBmb3IgdGhlIHNwZWNp
ZmllZCB0aW1lb3V0IHRvIGhhcHBlbi4KKyAgICBnX3VzbGVlcChrTWF4V2FpdEZvckNoaWxkICog
R19VU0VDX1BFUl9TRUMpOworCisgICAgLy8gS2lsbCB0aGUgY2hpbGQgcHJvY2VzcyBpZiBub3Qg
cmVhZHkgeWV0LgorICAgIGlmICgha0NoaWxkSXNSZWFkeSkKKyAgICAgICAgc3RvcFRlc3RTZXJ2
ZXIoKTsKKworICAgIGdfdGhyZWFkX2V4aXQoMCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyB2b2lkIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKQoreworICAgIGtDaGlsZElzUmVhZHkgPSBm
YWxzZTsKKworI2lmICghR0xJQl9DSEVDS19WRVJTSU9OKDIsIDMxLCAwKSkKKyAgICBnX3RocmVh
ZF9jcmVhdGUodGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jLCAwLCBGQUxTRSwgMCk7CisjZWxz
ZQorICAgIGdfdGhyZWFkX25ldygiVGVzdFNlcnZlck1vbml0b3IiLCB0ZXN0U2VydmVyTW9uaXRv
clRocmVhZEZ1bmMsIDApOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZl
cigpCit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4KKyAgICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUo
V0VCS0lUX0VYRUNfUEFUSCwgIldlYktpdDJBUElUZXN0cyIsIGtUZXN0U2VydmVyQXBwTmFtZSwg
TlVMTCkpOworCisgICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07CisgICAgdGVzdFNlcnZlckFy
Z3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKKyAgICB0ZXN0U2VydmVyQXJndlsxXSA9IDA7
CisKKyAgICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRvdXQgZmlsZSBkZXNj
cmlwdG9yIHRvIHNldCBhCisgICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVsLCBzbyB3ZSBrbm93
IHdoZW4gaXQncyByZWFkeS4KKyAgICBpbnQgY2hpbGRTdGRvdXQgPSAwOworICAgIGlmICghZ19z
cGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxH
U3Bhd25GbGFncz4oMCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmtDaGlsZFByb2Nlc3NQaWQsIDAsICZjaGlsZFN0ZG91dCwgMCwgMCkpIHsKKyAgICAgICAgY2xv
c2UoY2hpbGRTdGRvdXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3RhcnQg
bW9uaXRvcmluZyB0aGUgdGVzdCBzZXJ2ZXIgKGluIGEgc2VwYXJhdGUgdGhyZWFkKSB0bworICAg
IC8vIGVuc3VyZSB3ZSBkb24ndCBibG9jayBvbiB0aGUgY2hpbGQgcHJvY2VzcyBtb3JlIHRoYW4g
YSB0aW1lb3V0LgorICAgIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKTsKKworICAgIGNoYXIgbXNn
WzJdOworICAgIEdJT0NoYW5uZWwqIGlvQ2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyhj
aGlsZFN0ZG91dCk7CisgICAgaWYgKGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGlvQ2hhbm5lbCwg
bXNnLCAyLCAwLCAwKSA9PSBHX0lPX1NUQVRVU19OT1JNQUwpIHsKKyAgICAgICAgLy8gQ2hlY2sg
d2hldGhlciB0aGUgc2VydmVyIHNlbnQgYSBtZXNzYWdlIHNheWluZyBpdCdzIHJlYWR5CisgICAg
ICAgIC8vIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGdsb2JhbGx5LCBzbyB0aGUgbW9uaXRvciBjYW4g
c2VlIGl0LgorICAgICAgICBrQ2hpbGRJc1JlYWR5ID0gbXNnWzBdID09ICdPJyAmJiBtc2dbMV0g
PT0gJ0snOworICAgIH0KKyAgICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsKKyAgICBj
bG9zZShjaGlsZFN0ZG91dCk7CisKKyAgICAvLyBUaGUgdGltZW91dCB3YXMgcmVhY2hlZCBhbmQg
dGhlIHNlcnZlciBpcyBub3QgcmVhZHkgeWV0LCBzbworICAgIC8vIHN0b3AgaXQgaW5tZWRpYXRl
bHksIGFuZCBsZXQgdGhlIHVuaXQgdGVzdHMgZmFpbC4KKyAgICBpZiAoIWtDaGlsZElzUmVhZHkp
CisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrQXRzcGlB
Y2Nlc3NpYmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNzaWJsZSwgY29uc3QgY2hhciogdGFyZ2V0
TmFtZSwgQXRzcGlSb2xlIHRhcmdldFJvbGUpCit7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRShhY2Nlc3NpYmxlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IG5hbWUoYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRh
cmdldE5hbWUsID09LCBuYW1lLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGFyZ2V0Um9s
ZSwgPT0sIGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNzaWJsZSwgMCkpOworfQorCitz
dGF0aWMgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZpbmRUZXN0U2VydmVyQXBwbGljYXRpb24o
KQoreworICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMgc3VwcG9ydGVkIGJ5IEFUU1BJIGF0IHRo
ZSBtb21lbnQuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGRlc2t0b3AgPSBhZG9wdEdS
ZWYoYXRzcGlfZ2V0X2Rlc2t0b3AoMCkpOworCisgICAgLy8gTG9vayBmb3IgdGhlIHNlcnZlciBh
cHBsaWNhdGlvbiBpbiB0aGUgbGlzdCBvZiBhcHBzLgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3Np
YmxlPiBjdXJyZW50OworICAgIGludCBjaGlsZENvdW50ID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfY291bnQoZGVza3RvcC5nZXQoKSwgMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
aGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgY3VycmVudCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLmdldCgpLCBpLCAwKSk7CisgICAgICAg
IGlmICghZ19zdHJjbXAwKGF0c3BpX2FjY2Vzc2libGVfZ2V0X25hbWUoY3VycmVudC5nZXQoKSwg
MCksIGtUZXN0U2VydmVyQXBwTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVzdEF0c3BpQmFzaWNIaWVy
YXJjaHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGhlIHRl
c3Qgc2VydmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgIEdSZWZQ
dHI8QXRzcGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBwID0gZmluZFRlc3RTZXJ2ZXJBcHBsaWNh
dGlvbigpOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdFNlcnZlckFwcC5n
ZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKHRlc3RTZXJ2ZXJBcHAuZ2V0KCksICJB
Y2Nlc3NpYmlsaXR5VGVzdFNlcnZlciIsIEFUU1BJX1JPTEVfQVBQTElDQVRJT04pOworCisgICAg
Ly8gVGhlIG1haW4gd2luZG93J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgor
ICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50UGFyZW50ID0gdGVzdFNlcnZlckFw
cDsKKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gY3VycmVudENoaWxkID0gYWRvcHRHUmVm
KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCks
IDAsIDApKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5n
ZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIs
IEFUU1BJX1JPTEVfRlJBTUUpOworCisgICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3NpYmlsaXR5
IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsK
KyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChj
dXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJ
QkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJl
bnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKKworICAgIC8vIFRoZSBXZWJQ
YWdlJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFy
ZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVf
Z2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNz
ZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tB
dHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIp
OworCisgICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQ
cm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRD
aGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQu
Z2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENo
aWxkLmdldCgpKSk7CisKKyAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdl
YiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJl
bnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJl
bnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVu
dENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdl
dCgpLCAiIiwgQVRTUElfUk9MRV9ET0NVTUVOVF9GUkFNRSk7CisKKyAgICAvLyBIVE1MIEgxJ3Mg
YWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1
cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGls
ZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQ
SV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nl
c3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIlRoaXMgaXMgYSB0ZXN0IiwgQVRTUElfUk9MRV9I
RUFESU5HKTsKKworICAgIC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVt
ZW50IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMSwgMCk7CisgICAgZ19hc3Nl
cnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0
c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQ
SCk7CisKKyAgICAvLyBIVE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQg
KFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9j
aGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAyLCAwKTsKKyAgICBnX2Fzc2VydChB
VFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlB
Y2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsK
KworICAgIC8vIEhUTUwgbGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgor
ICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwg
MCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkp
KTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJhIGxpbmsi
LCBBVFNQSV9ST0xFX0xJTkspOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgLy8gV2Ug
aW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2Vz
cworICAgIC8vIGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFz
b24gaXMuCisgICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7CisKKyAgICAvLyBT
dGFydCB0aGUgYWNjZXNzaWJpbGl0eSB0ZXN0IHNlcnZlciBhbmQgbG9hZCB0aGUgdGVzdHMuCisg
ICAgc3RhcnRUZXN0U2VydmVyKCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0QWNjZXNz
aWJpbGl0eSIsICJhdHNwaS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNo
eSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIC8vIEVuc3VyZSB3ZSBzdG9wIHRoZSBz
ZXJ2ZXIuCisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAppbmRleCA0MmExOGYzLi5hZmM5ZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01NjcsNiArNTY3LDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sKTsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oR1RLKQorICAgIFN0cmluZyBnZXRBY2Nlc3NpYmlsaXR5UGx1Z0lEKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY2Nlc3NpYmlsaXR5UGx1Z0lEOyB9CisjZW5kaWYKKwogICAgIHZvaWQgYmVnaW5Q
cmludGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJik7CiAgICAgdm9pZCBlbmRQ
cmludGluZygpOwogICAgIHZvaWQgY29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94
eSosIGNvbnN0IFByaW50SW5mbyYsIFBhc3NSZWZQdHI8Q29tcHV0ZWRQYWdlc0NhbGxiYWNrPik7
CkBAIC03NDUsNiArNzQ5LDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2
b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVj
dG9yPFN0cmluZz4mKTsKKyAgICB2b2lkIGJpbmRBY2Nlc3NpYmlsaXR5VHJlZShjb25zdCBTdHJp
bmcmKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGdldEVkaXRvckNvbW1h
bmRzRm9yS2V5RXZlbnQoVmVjdG9yPFN0cmluZz4mKTsKQEAgLTk3MSw2ICs5NzYsMTAgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICBTdHJpbmcgbV9hY2Nlc3NpYmlsaXR5UGx1Z0lEOworI2Vu
ZGlmCisKICAgICBpbnQ2NF90IG1fc3BlbGxEb2N1bWVudFRhZzsKICAgICBib29sIG1faGFzU3Bl
bGxEb2N1bWVudFRhZzsKICAgICB1bnNpZ25lZCBtX3BlbmRpbmdMZWFybk9ySWdub3JlV29yZE1l
c3NhZ2VDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCmluZGV4IDVjMjEzM2EuLmNmMDIxMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTQ3LDYgKzE0Nyw5
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgICMg
U3VwcG9ydCBmb3IgR1RLKyBwbGF0Zm9ybSBrZXliaW5kaW5ncwogICAgIEdldEVkaXRvckNvbW1h
bmRzRm9yS2V5RXZlbnQoQXRvbWljU3RyaW5nIGV2ZW50VHlwZSkgLT4gKFZlY3RvcjxXVEY6OlN0
cmluZz4gY29tbWFuZHNMaXN0KQorCisgICAgIyBTdXBwb3J0IGZvciBjb25uZWN0aW5nIHRoZSBB
Y2Nlc3NpYmlsaXR5IHdvcmxkcyBvZiB0aGUgVUkgYW5kIHRoZSBXZWIgcHJvY2Vzc2VzCisgICAg
QmluZEFjY2Vzc2liaWxpdHlUcmVlKFdURjo6U3RyaW5nIHBsdWdJRCkKICNlbmRpZgogCiAgICAg
IyBCYWNrRm9yd2FyZCBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJQYWdlUHJveHlHdGsuY3BwCmluZGV4IDExMjdkZGUuLmY2YjMwMGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKQEAgLTQ5LDYg
KzQ5LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBWCiAgICAgbV9wYWdlQ2xpZW50LT5nZXRF
ZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpLCBldmVudFR5
cGUsIGNvbW1hbmRzTGlzdCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJp
bGl0eVRyZWUoY29uc3QgU3RyaW5nJiBwbHVnSUQpCit7CisgICAgbV9hY2Nlc3NpYmlsaXR5UGx1
Z0lEID0gcGx1Z0lEOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVJlY2VudFNlYXJjaGVz
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCAzZDBlMjIyLi44
NTBkZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtNTE3LDYgKzUx
NywxMSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWQo
KQogICAgIC8vIElmIHdlIGhhdmUgYSBsb2FkIGxpc3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYg
KFdlYkZyYW1lOjpMb2FkTGlzdGVuZXIqIGxvYWRMaXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0
ZW5lcigpKQogICAgICAgICBsb2FkTGlzdGVuZXItPmRpZEZpbmlzaExvYWQobV9mcmFtZSk7CisK
KyNpZiBQTEFURk9STShHVEspCisgICAgLy8gRW5zdXJlIHRoZSBhY2Nlc3NpYmlsaXR5IGhpZXJh
cmNoeSBpcyB1cGRhdGVkIGFmdGVyIGxvYWRpbmcuCisgICAgd2ViUGFnZS0+dXBkYXRlQWNjZXNz
aWJpbGl0eVRyZWUoKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZEZpcnN0TGF5b3V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAppbmRleCA2NjBmNmY5Li45OTRiYzNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xODgsNiArMTg4LDggQEAg
V2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLCBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJl
dGVkKDApCiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgLCBtX25hdGl2ZVdpbmRvdyhwYXJhbWV0
ZXJzLm5hdGl2ZVdpbmRvdykKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAsIG1fYWNjZXNzaWJp
bGl0eU9iamVjdCgwKQogI2VuZGlmCiAgICAgLCBtX3NldENhblN0YXJ0TWVkaWFUaW1lcihXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5ydW5Mb29wKCksIHRoaXMsICZXZWJQYWdlOjpzZXRDYW5TdGFydE1l
ZGlhVGltZXJGaXJlZCkKICAgICAsIG1fZmluZENvbnRyb2xsZXIodGhpcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDQwMDcyY2YuLmEyODE5YmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzAs
NiArNzAsNyBAQAogCiAjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
R3RrLmgiCisjaW5jbHVkZSAiV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuaCIKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTM5Nyw2ICszOTgsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBnZXN0dXJlV2lsbEJlZ2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9v
bCYgY2FuQmVnaW5QYW5uaW5nKTsKICAgICB2b2lkIGdlc3R1cmVEaWRTY3JvbGwoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOwogICAgIHZvaWQgZ2VzdHVyZURpZEVuZCgpOworCisjZWxpZiBQTEFU
Rk9STShHVEspCisgICAgdm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSgpOwogI2VuZGlmCiAK
ICAgICB2b2lkIHNldENvbXBvc2l0aW9uRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGNvbXBvc2l0
aW9uU3RyaW5nLCB1aW50NjRfdCBmcm9tLCB1aW50NjRfdCBsZW5ndGgpOwpAQCAtNTk2LDkgKzYw
MCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3RlZEluZGV4Rm9yQWN0aXZl
UG9wdXBNZW51KGludDMyX3QgbmV3SW5kZXgpOwogICAgIHZvaWQgc2V0VGV4dEZvckFjdGl2ZVBv
cHVwTWVudShpbnQzMl90IGluZGV4KTsKIAotI2lmIFBMQVRGT1JNKEdUSykgICAgCisjaWYgUExB
VEZPUk0oR1RLKQogICAgIHZvaWQgZmFpbGVkVG9TaG93UG9wdXBNZW51KCk7Ci0jZW5kaWYgICAg
CisjZW5kaWYKIAogICAgIHZvaWQgZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3QgVmVj
dG9yPFN0cmluZz4mKTsKICAgICB2b2lkIGRpZENhbmNlbEZvck9wZW5QYW5lbCgpOwpAQCAtNjc1
LDYgKzY3OSw4IEBAIHByaXZhdGU6CiAgICAgSFdORCBtX25hdGl2ZVdpbmRvdzsKIAogICAgIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2dlc3R1cmVUYXJnZXROb2RlOworI2VsaWYgUExBVEZPUk0o
R1RLKQorICAgIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtX2FjY2Vzc2liaWxpdHlPYmpl
Y3Q7CiAjZW5kaWYKICAgICAKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJQYWdlPiBtX3NldENhblN0
YXJ0TWVkaWFUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3NTFkYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3RHdGsuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0ay5oIgorCisjaW5jbHVkZSAi
V2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHX0RFRklORV9UWVBF
KFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LCB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVj
dCwgQVRLX1RZUEVfUExVRykKKworc3RhdGljIEF0a09iamVjdCogYWNjZXNzaWJpbGl0eVJvb3RP
YmplY3RXcmFwcGVyKEF0a09iamVjdCogYXRrT2JqZWN0KQoreworICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAgICAgICAgQVhPYmplY3RDYWNoZTo6ZW5h
YmxlQWNjZXNzaWJpbGl0eSgpOworCisgICAgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIGFj
Y2Vzc2libGUgPSBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVChhdGtPYmplY3QpOworICAg
IGlmICghYWNjZXNzaWJsZS0+bV9wYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBhZ2Uq
IHBhZ2UgPSBhY2Nlc3NpYmxlLT5tX3BhZ2UtPmNvcmVQYWdlKCk7CisgICAgaWYgKCFwYWdlKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEZyYW1lKiBjb3JlID0gcGFnZS0+bWFpbkZyYW1lKCk7
CisgICAgaWYgKCFjb3JlIHx8ICFjb3JlLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3QgPSBjb3JlLT5kb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPnJvb3RPYmplY3QoKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVy
biAwOworCisgICAgQXRrT2JqZWN0KiBheFJvb3QgPSByb290LT53cmFwcGVyKCk7CisgICAgaWYg
KCFheFJvb3QgfHwgIUFUS19JU19PQkpFQ1QoYXhSb290KSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gYXhSb290OworfQorCitzdGF0aWMgdm9pZCB3ZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEluaXRpYWxpemUoQXRrT2JqZWN0KiBhdGtPYmplY3QsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgaWYgKEFUS19PQkpFQ1RfQ0xBU1Mod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3Rf
cGFyZW50X2NsYXNzKS0+aW5pdGlhbGl6ZSkKKyAgICAgICAgQVRLX09CSkVDVF9DTEFTUyh3ZWJf
cGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKGF0a09i
amVjdCwgZGF0YSk7CisKKyAgICBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVChhdGtPYmpl
Y3QpLT5tX3BhZ2UgPSByZWludGVycHJldF9jYXN0PFdlYlBhZ2UqPihkYXRhKTsKKyAgICBhdGtf
b2JqZWN0X3NldF9yb2xlKGF0a09iamVjdCwgQVRLX1JPTEVfRklMTEVSKTsKK30KKworc3RhdGlj
IGdpbnQgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHZXRJbmRleEluUGFyZW50KEF0a09iamVj
dCAqYXRrT2JqZWN0KQoreworICAgIC8vIEFuIEF0a1BsdWcgaXMgdGhlIG9ubHkgY2hpbGQgYW4g
QXRrU29ja2V0IGNhbiBoYXZlLgorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZ2ludCB3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldE5DaGlsZHJlbihBdGtPYmplY3QqIGF0a09iamVjdCkK
K3sKKyAgICBBdGtPYmplY3QqIHJvb3RPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdy
YXBwZXIoYXRrT2JqZWN0KTsKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBBdGtPYmplY3QqIHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0UmVmQ2hpbGQoQXRrT2JqZWN0KiBhdGtPYmplY3QsIGdpbnQgaW5kZXgpCit7
CisgICAgLy8gSXQncyBzdXBwb3NlZCB0byBoYXZlIGVpdGhlciBvbmUgY2hpbGQgb3IgemVyby4K
KyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBBdGtPYmplY3QqIHJvb3RPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIo
YXRrT2JqZWN0KTsKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgYXRrX29iamVjdF9zZXRfcGFyZW50KHJvb3RPYmplY3QsIGF0a09iamVjdCk7CisgICAgZ19v
YmplY3RfcmVmKHJvb3RPYmplY3QpOworCisgICAgcmV0dXJuIHJvb3RPYmplY3Q7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2luaXQoV2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3QqIGFjY2Vzc2libGUpCit7Cit9CisKK3N0YXRpYyB2b2lkIHdlYl9wYWdl
X2FjY2Vzc2liaWxpdHlfb2JqZWN0X2NsYXNzX2luaXQoV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RDbGFzcyoga2xhc3MpCit7CisgICAgQXRrT2JqZWN0Q2xhc3MqIGF0a09iamVjdENsYXNzID0g
QVRLX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICAvLyBObyBuZWVkIHRvIGltcGxlbWVudCBn
ZXRfcGFyZW50KCkgaGVyZSBzaW5jZSB0aGlzIGlzIGEgc3ViY2xhc3MKKyAgICAvLyBvZiBBdGtQ
bHVnIGFuZCBhbGwgdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gdGhhdCBmdW5jdGlvbiB3aWxsIGJlCisg
ICAgLy8gaW1wbGVtZW50ZWQgYnkgdGhlIEFUSyBicmlkZ2UuCisgICAgYXRrT2JqZWN0Q2xhc3Mt
PmluaXRpYWxpemUgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEluaXRpYWxpemU7CisgICAg
YXRrT2JqZWN0Q2xhc3MtPmdldF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEdldEluZGV4SW5QYXJlbnQ7CisgICAgYXRrT2JqZWN0Q2xhc3MtPmdldF9uX2NoaWxk
cmVuID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHZXROQ2hpbGRyZW47CisgICAgYXRrT2Jq
ZWN0Q2xhc3MtPnJlZl9jaGlsZCA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmQ2hpbGQ7
Cit9CisKK1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdE5ldyhXZWJQYWdlKiBwYWdlKQoreworICAgIEF0a09iamVjdCogb2JqZWN0ID0gQVRLX09C
SkVDVChnX29iamVjdF9uZXcoV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgTlVM
TCkpOworICAgIGF0a19vYmplY3RfaW5pdGlhbGl6ZShvYmplY3QsIHBhZ2UpOworICAgIHJldHVy
biBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVChvYmplY3QpOworfQorCit2b2lkIHdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmcmVzaChXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCog
YWNjZXNzaWJsZSkKK3sKKyAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUn
cyBhIGNvbm5lY3Rpb24gaW4gdGhlIEFUSworICAgIC8vIHdvcmxkIGJldHdlZW4gdGhpcyBhY2Nl
c3NpYmlsaXR5IG9iamVjdCBhbmQgdGhlIEF0a09iamVjdCBvZgorICAgIC8vIHRoZSBhY2Nlc3Np
YmlsaXR5IG9iamVjdCBmb3IgdGhlIHJvb3Qgb2YgdGhlIERPTSB0cmVlLgorICAgIEF0a09iamVj
dCogcm9vdE9iamVjdCA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihBVEtfT0JKRUNU
KGFjY2Vzc2libGUpKTsKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybjsKKyAg
ICBhdGtfb2JqZWN0X3NldF9wYXJlbnQocm9vdE9iamVjdCwgQVRLX09CSkVDVChhY2Nlc3NpYmxl
KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyZWUzYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlP
YmplY3RHdGsuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RH
dGtfaAorI2RlZmluZSBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEd0a19oCisKKyNpbmNsdWRl
IDxhdGsvYXRrLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZTsKK30KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQl9UWVBFX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpF
Q1QgICAgICAgICAgICAgICh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVChvYmplY3QpICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQl9UWVBFX1BBR0VfQUND
RVNTSUJJTElUWV9PQkpFQ1QsIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0KSkKKyNkZWZpbmUg
V0VCX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1RfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQl9UWVBFX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpF
Q1QsIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3MpKQorI2RlZmluZSBXRUJfSVNfUEFH
RV9BQ0NFU1NJQklMSVRZX09CSkVDVChvYmplY3QpICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iamVjdCksIFdFQl9UWVBFX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QpKQor
I2RlZmluZSBXRUJfSVNfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVF9DTEFTUyhrbGFzcykgICAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklM
SVRZX09CSkVDVCkpCisjZGVmaW5lIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUX0dFVF9D
TEFTUyhvYmplY3QpIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmplY3QpLCBXRUJfVFlQ
RV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNULCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0IFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0Q2xhc3MgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzczsKKworc3RydWN0
IF9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCB7CisgICAgQXRrUGx1ZyBwYXJlbnQ7CisgICAg
V2ViS2l0OjpXZWJQYWdlKiBtX3BhZ2U7Cit9OworCitzdHJ1Y3QgX1dlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0Q2xhc3MgeworICAgIEF0a1BsdWdDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dU
eXBlIHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2dldF90eXBlKCk7CisKK1dlYlBhZ2VB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5ldyhXZWJLaXQ6
OldlYlBhZ2UqKTsKKwordm9pZCB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZnJlc2goV2Vi
UGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdl
YlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCmluZGV4IGEyNWUxZjcuLjZiN2U1
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
UGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlR3RrLmNwcApAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250
cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgpAQCAtMzcsNiArMzksNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXli
b2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ0
LDcgKzQ3LDIxIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBDcmVhdGUgdGhl
IGFjY2Vzc2libGUgb2JqZWN0ICh0aGUgcGx1ZykgdGhhdCB3aWxsIHNlcnZlIGFzIHRoZQorICAg
IC8vIGVudHJ5IHBvaW50IHRvIHRoZSBXZWIgcHJvY2VzcywgYW5kIHNlbmQgYSBtZXNzYWdlIHRv
IHRoZSBVSQorICAgIC8vIHByb2Nlc3MgdG8gY29ubmVjdCB0aGUgdHdvIHdvcmxkcyB0aHJvdWdo
IHRoZSBhY2Nlc3NpYmlsaXR5CisgICAgLy8gb2JqZWN0IHRoZXJlIHNwZWNpZmljYWxseSBwbGFj
ZWQgZm9yIHRoYXQgcHVycG9zZSAodGhlIHNvY2tldCkuCisgICAgbV9hY2Nlc3NpYmlsaXR5T2Jq
ZWN0ID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3ROZXcodGhpcyk7CisgICAgR093blB0cjxn
Y2hhcj4gcGx1Z0lEKGF0a19wbHVnX2dldF9pZChBVEtfUExVRyhtX2FjY2Vzc2liaWxpdHlPYmpl
Y3QpKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCaW5kQWNjZXNzaWJpbGl0
eVRyZWUoU3RyaW5nKHBsdWdJRC5nZXQoKSkpKTsKK30KKwordm9pZCBXZWJQYWdlOjp1cGRhdGVB
Y2Nlc3NpYmlsaXR5VHJlZSgpCit7CisgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlPYmplY3QpCisg
ICAgICAgIHJldHVybjsKKworICAgIHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmcmVzaCht
X2FjY2Vzc2liaWxpdHlPYmplY3QpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtUHJlZmVy
ZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzYyYWE2OC4uNzllYWZlOCAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI1IEBACisyMDEyLTAxLTA5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBFeHBvc2UgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkg
aW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFUcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1ODkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbnN1cmUgdGhlIGFjY2Vzc2liaWxpdHkgaW5mcmFz
dHJ1Y3R1cmUgaXMgYXZhaWxhYmxlIHdoZW4gcnVubmluZworICAgICAgICB0aGUgdW5pdCB0ZXN0
cywgb3RoZXJ3aXNlIFdLMidzIGFjY2Vzc2liaWxpdHkgdGVzdHMgd29uJ3Qgd29yay4KKworICAg
ICAgICAqIFNjcmlwdHMvcnVuLWd0ay10ZXN0czoKKyAgICAgICAgKFRlc3RSdW5uZXIpOgorICAg
ICAgICAoVGVzdFJ1bm5lci5fbG9va3VwQXRzcGkyQmluYXJ5KTogTmV3LiBMb29rcyBmb3IgdGhl
IGRpcmVjdG9yeQorICAgICAgICB3aGVyZSBhdC1zcGkyJ3Mgc3R1ZmYgaXMgbG9jYXRlZCAobGlr
ZSBhdC1zcGktYnVzLWxhdW5jaGVyIGFuZAorICAgICAgICBhdC1zcGkyLXJlZ2lzdHJ5ZCkuCisg
ICAgICAgIChUZXN0UnVubmVyLnJ1bik6IEluaXRpYWxpemUgdGhlIGFjY2Vzc2liaWxpdHkgaW5m
cmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgorICAgICAgICAo
Z2V0X3dlYmtpdDJfb3B0aW9ucyk6IEFkZCAnV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLion
LgorCisgICAgICAgICogZ3RrL2poYnVpbGQubW9kdWxlczogQWRkZWQgYXQtc3BpMi1jb3JlIGFu
ZCBhdC1zcGkyLWF0ay4KKwogMjAxMi0wMS0wOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1ha2UgZGlzdGNoZWNr
IGlzc3Vlcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cyBiL1Rvb2xz
L1NjcmlwdHMvcnVuLWd0ay10ZXN0cwppbmRleCA3MGNmMjc0Li5mNTVmMDY3IDEwMDc1NQotLS0g
YS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3Rr
LXRlc3RzCkBAIC0yNSw3ICsyNSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICBURVNUX0RJ
UlMgPSBbICJ1bml0dGVzdHMiLCAiV2ViS2l0MkFQSVRlc3RzIiBdCiAgICAgIyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzE3Ci0gICAgU0tJUFBFRCA9
IFsgInVuaXR0ZXN0cy90ZXN0ZG93bmxvYWQiLCAidW5pdHRlc3RzL3Rlc3R3ZWJ2aWV3IiwgInVu
aXR0ZXN0cy90ZXN0d2VicmVzb3VyY2UiXQorICAgIFNLSVBQRUQgPSBbICJ1bml0dGVzdHMvdGVz
dGRvd25sb2FkIiwgInVuaXR0ZXN0cy90ZXN0d2VidmlldyIsICJ1bml0dGVzdHMvdGVzdHdlYnJl
c291cmNlIiBdCiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX2V4ZWN1
dGl2ZSA9IEV4ZWN1dGl2ZSgpCkBAIC02NCw2ICs2NCwxOSBAQCBjbGFzcyBUZXN0UnVubmVyOgog
ICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHRlc3RfcGF0aCkgYW5kIG9zLmFjY2Vz
cyh0ZXN0X3BhdGgsIG9zLlhfT0spOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0cy5h
cHBlbmQodGVzdF9wYXRoKQogCisgICAgZGVmIF9sb29rdXBBdHNwaTJCaW5hcnkoc2VsZiwgamhi
dWlsZF9wYXRoLCBmaWxlbmFtZSk6CisgICAgICAgIGV4ZWNfcHJlZml4ID0gc2VsZi5fZXhlY3V0
aXZlLnJ1bl9jb21tYW5kKFtqaGJ1aWxkX3BhdGggLCdwa2ctY29uZmlnJywgJy0tdmFyaWFibGU9
ZXhlY19wcmVmaXgnLCAnYXRzcGktMiddKS5yc3RyaXAoJ1xyXG4nKQorICAgICAgICBwYXRoc190
b19jaGVjayA9IFsgJ2xpYmV4ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYi9h
dC1zcGkyLWNvcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYjMyL2F0LXNwaTIt
Y29yZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWI2NC9hdC1zcGkyLWNvcmUnIF0K
KyAgICAgICAgZm9yIHBhdGggaW4gcGF0aHNfdG9fY2hlY2s6CisgICAgICAgICAgICBmaWxlcGF0
aCA9IG9zLnBhdGguam9pbihleGVjX3ByZWZpeCwgcGF0aCwgZmlsZW5hbWUpCisgICAgICAgICAg
ICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZp
bGVwYXRoCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiBydW4oc2VsZik6CiAgICAg
ICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVS
Uk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1zX3BhdGgpKQpA
QCAtNzgsMTIgKzkxLDQzIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBleGl0X3N0
YXR1c1swXSA9IGVycm9yLmV4aXRfY29kZQogCiAgICAgICAgIGpoYnVpbGRfcGF0aCA9IG9zLnBh
dGguam9pbihzZWxmLl9ndGtfdG9vbHNfZGlyZWN0b3J5LCAicnVuLXdpdGgtamhidWlsZCIpCisK
KyAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUncyBubyBYJ3MgcHJvcGVydHkgQVRfU1BJX0JVUyBw
cmV2aW91c2x5IHNldCwKKyAgICAgICAgIyBvdGhlcndpc2UgdGhlIGFjY2Vzc2liaWxpdHkgYnVz
IGNvdWxkbid0IGJlIHByb3Blcmx5IGxhdW5jaGVkLgorICAgICAgICBzZWxmLl9leGVjdXRpdmUu
cnVuX2NvbW1hbmQoWyd4cHJvcCcsICctcm9vdCcsICctcmVtb3ZlJywgJ0FUX1NQSV9CVVMnXSwg
ZW52PXRlc3RfZW52KQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBhY2Nlc3NpYmlsaXR5IGJ1
cyBpcyBsYXVuY2hlZC4KKyAgICAgICAgYTExeV9idXNfbGF1bmNoZWQgPSBGYWxzZQorICAgICAg
ICBhMTF5X2J1c19sYXVuY2hlcl9wYXRoID0gc2VsZi5fbG9va3VwQXRzcGkyQmluYXJ5KGpoYnVp
bGRfcGF0aCwgJ2F0LXNwaS1idXMtbGF1bmNoZXInKQorICAgICAgICBpZiBhMTF5X2J1c19sYXVu
Y2hlcl9wYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGExMXlfYnVzX2xh
dW5jaGVyID0gRXhlY3V0aXZlKCkucG9wZW4oW2ExMXlfYnVzX2xhdW5jaGVyX3BhdGhdLCBlbnY9
dGVzdF9lbnYpCisgICAgICAgICAgICAgICAgYTExeV9idXNfbGF1bmNoZWQgPSBUcnVlCisgICAg
ICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVk
IHRvIGxhdW5jaCB0aGUgYWNjZXNzaWJpbGl0eSBidXNcbiIpCisgICAgICAgICAgICAgICAgc3lz
LnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgYTExeV9yZWdpc3RyeWRfcnVubmluZyA9IEZhbHNl
CisgICAgICAgIGExMXlfcmVnaXN0cnlkX3BhdGggPSBzZWxmLl9sb29rdXBBdHNwaTJCaW5hcnko
amhidWlsZF9wYXRoLCAnYXQtc3BpMi1yZWdpc3RyeWQnKQorICAgICAgICBpZiBhMTF5X3JlZ2lz
dHJ5ZF9wYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGExMXlfcmVnaXN0
cnlkID0gRXhlY3V0aXZlKCkucG9wZW4oW2ExMXlfcmVnaXN0cnlkX3BhdGhdLCBlbnY9dGVzdF9l
bnYpCisgICAgICAgICAgICAgICAgYTExeV9yZWdpc3RyeWRfcnVubmluZyA9IFRydWUKKyAgICAg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQg
dG8gcnVuIHRoZSBhY2Nlc3NpYmlsaXR5IHJlZ2lzdHJ5XG4iKQorICAgICAgICAgICAgICAgIHN5
cy5zdGRlcnIuZmx1c2goKQorCiAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3Rlc3RzOgogICAg
ICAgICAgICAgb3V0ID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtqaGJ1aWxkX3BhdGgg
LCdndGVzdGVyJywgdGVzdF0sIGVudj10ZXN0X2VudiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9oYW5kbGVyPV9lcnJvcl9oYW5kbGVyKQogICAg
ICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZs
dXNoKCkKIAorICAgICAgICBpZiBhMTF5X3JlZ2lzdHJ5ZF9ydW5uaW5nOgorICAgICAgICAgICAg
YTExeV9yZWdpc3RyeWQua2lsbCgpCisgICAgICAgIGlmIGExMXlfYnVzX2xhdW5jaGVkOgorICAg
ICAgICAgICAgYTExeV9idXNfbGF1bmNoZXIua2lsbCgpCisKICAgICAgICAgaWYgZXhpdF9zdGF0
dXNbMF06CiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyBmYWlsZWRcbiIpCiAg
ICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9nZW5l
cmF0ZS1ndGtkb2MgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCmluZGV4IGRiNWY4M2EuLjBj
MThhMzggMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKKysrIGIvVG9vbHMv
Z3RrL2dlbmVyYXRlLWd0a2RvYwpAQCAtNjIsNiArNjIsNyBAQCBkZWYgZ2V0X3dlYmtpdDJfb3B0
aW9ucygpOgogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnUGFn
ZUNsaWVudEltcGwuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Io
c3JjX3BhdGgoJ1dlYktpdFVJQ2xpZW50LionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRXZWJMb2FkZXJDbGllbnQuKicpKSArIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFdlYlZpZXdC
YXNlQWNjZXNzaWJsZS4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xv
YihzcmNfcGF0aCgndGVzdHMvKi5oJykpCiAgICAgfSkKICAgICByZXR1cm4gKGNvbW1vbi5idWls
ZF9wYXRoKCdTb3VyY2UnLCAnV2ViS2l0MicsICd3ZWJraXQyZ3RrLTMuMC5wYycpLCBvcHRpb25z
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2d0ay9qaGJ1
aWxkLm1vZHVsZXMKaW5kZXggZjFhMmM1Yi4uNDY4OTFhOSAxMDA2NDQKLS0tIGEvVG9vbHMvZ3Rr
L2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzCkBAIC0xMyw2
ICsxMyw4IEBACiAgICAgICA8ZGVwIHBhY2thZ2U9ImdsaWItbmV0d29ya2luZyIvPgogICAgICAg
PGRlcCBwYWNrYWdlPSJnbm9tZS1pY29uLXRoZW1lIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9Imxp
YnNvdXAiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iYXQtc3BpMi1jb3JlIi8+CisgICAgICA8ZGVw
IHBhY2thZ2U9ImF0LXNwaTItYXRrIi8+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgIDwvbWV0YW1v
ZHVsZT4KIApAQCAtMTQ3LDQgKzE0OSwyNyBAQAogICAgIDwvYnJhbmNoPgogICA8L2F1dG90b29s
cz4KIAorICA8YXV0b3Rvb2xzIGlkPSJhdC1zcGkyLWNvcmUiPgorICAgIDxicmFuY2ggbW9kdWxl
PSJwdWIvR05PTUUvc291cmNlcy9hdC1zcGkyLWNvcmUvMi4yL2F0LXNwaTItY29yZS0yLjIuMS50
YXIueHoiIHZlcnNpb249IjIuMi4xIgorICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIK
KyAgICAgICAgICAgIGhhc2g9InNoYTI1NjoyYTQxMjk0MjBkZWNjYTM2NTdlMTYzYTRkYmIxYTNj
YjI4YWNhZmUzMmVhMTI5MjQxN2ZkZDgxMDg0ZDQ4ZmFjIgorICAgICAgICAgICAgbWQ1c3VtPSIx
ODM5MTYzNzNkNjkwNmZmNmIyMjBiZDQ0ZDE1ZmY5NyI+CisgICAgPC9icmFuY2g+CisgICAgPGRl
cGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgorICAgIDwvZGVwZW5kZW5j
aWVzPgorICA8L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJhdC1zcGkyLWF0ayI+Cisg
ICAgPGJyYW5jaCBtb2R1bGU9InB1Yi9HTk9NRS9zb3VyY2VzL2F0LXNwaTItYXRrLzIuMi9hdC1z
cGkyLWF0ay0yLjIuMS50YXIueHoiIHZlcnNpb249IjIuMi4xIgorICAgICAgICAgICAgcmVwbz0i
ZnRwLmdub21lLm9yZyIKKyAgICAgICAgICAgIGhhc2g9InNoYTI1Njo2Njc3ZGVmMzRiMTZjOWEy
OGQ2YWQ5NjQ3M2VhNTZhM2MwZTEzYWE5NjhlNTg0ZGYwMDRjZDQ0Yzg2OTFlYTFhIgorICAgICAg
ICAgICAgbWQ1c3VtPSIxOTY0NjA5N2FjYTI1YTljMWI4YmE3YWI4ZDE3MjkxNiI+CisgICAgPC9i
cmFuY2g+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgor
ICAgICAgPGRlcCBwYWNrYWdlPSJhdC1zcGkyLWNvcmUiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4K
KyAgPC9hdXRvdG9vbHM+CisKIDwvbW9kdWxlc2V0PgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFj
IGIvY29uZmlndXJlLmFjCmluZGV4IGM2ZDkxY2QuLmFhNzQwMTggMTAwNjQ0Ci0tLSBhL2NvbmZp
Z3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTI4OCw2ICsyODgsNyBAQCBFTkNIQU5UX1JF
UVVJUkVEX1ZFUlNJT049MC4yMgogTElCRkZUV19SRVFVSVJFRF9WRVJTSU9OPTMuMi4yCiBDTFVU
VEVSX1JFUVVJUkVEX1ZFUlNJT049MS44LjIKIENMVVRURVJfR1RLX1JFUVVJUkVEX1ZFUlNJT049
MS4wLjIKK0FUU1BJMl9SRVFVSVJFRF9WRVJTSU9OPTIuMi4xCiAKICMgQXZhaWxhYmxlIG1vZHVs
ZXMKICMKQEAgLTEwNTcsNiArMTA1OCwxNyBAQCBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9j
b21wb3NpdGluZyIgPSAiY2x1dHRlciI7IHRoZW4KICAgIEFDX1NVQlNUKENMVVRURVJfR1RLX0xJ
QlMpCiBmaQogCisjIGNoZWNrIGlmIGF0c3BpMiBpcyBhdmFpbGFibGUgKG9ubHkgbmVlZGVkIGZv
ciBXZWJraXQyIHVuaXQgdGVzdHMpCitpZiB0ZXN0ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyI7
IHRoZW4KKyAgIFBLR19DSEVDS19NT0RVTEVTKFtBVFNQSTJdLAorICAgICAgICAgICAgICAgICAg
ICAgW2F0c3BpLTIgPj0gJEFUU1BJMl9SRVFVSVJFRF9WRVJTSU9OXSwKKyAgICAgICAgICAgICAg
ICAgICAgIFtoYXZlX2F0c3BpMj15ZXNdLCBbaGF2ZV9hdHNwaTI9bm9dKQorCisgICBBQ19TVUJT
VChbQVRTUEkyX0NGTEFHU10pCisgICBBQ19TVUJTVChbQVRTUEkyX0xJQlNdKQorZmkKKworCiAj
IGNoZWNrIGZvciBjb2RlIGNvdmVyYWdlIHN1cHBvcnQKIGlmIHRlc3QgIiRlbmFibGVfY292ZXJh
Z2UiID0gInllcyI7IHRoZW4KICAgIENPVkVSQUdFX0NGTEFHUz0iLU1EIgpAQCAtMTEzMCw2ICsx
MTQyLDkgQEAgQU1fQ09ORElUSU9OQUwoW1VTRV9QQU5HT10sIFt0ZXN0ICIkd2l0aF9mb250X2Jh
Y2tlbmQiID0gInBhbmdvIl0pCiAjIEdTdHJlYW1lciBmZWF0dXJlIGNvbmRpdGlvbmFsCiBBTV9D
T05ESVRJT05BTChbVVNFX0dTVFJFQU1FUl0sIFt0ZXN0ICIkaGF2ZV9nc3RyZWFtZXIiID0gInll
cyJdKQogCisjIEFUU1BJMiBjb25kaXRpb25hbAorQU1fQ09ORElUSU9OQUwoW0hBVkVfQVRTUEky
XSwgW3Rlc3QgIiRoYXZlX2F0c3BpMiIgPSAieWVzIl0pCisKICMgQWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcgY29uZGl0aW9uYWwKIEFNX0NPTkRJVElPTkFMKFtVU0VfQUNDRUxFUkFURURfQ09NUE9T
SVRJTkddLCBbdGVzdCAiJHdpdGhfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmciID0gImNhaXJvIiB8
fCB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAib3BlbmdsIiB8fCB0ZXN0
ICIkd2l0aF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyIgPSAiY2x1dHRlciJdKQogQU1fQ09ORElU
SU9OQUwoW1VTRV9URVhUVVJFX01BUFBFUl9DQUlST10sIFt0ZXN0ICIkd2l0aF9hY2NlbGVyYXRl
ZF9jb21wb3NpdGluZyIgPSAiY2Fpcm8iXSkKLS0gCjEuNy43LjQKCg==
</data>
<flag name="review"
          id="122427"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123143</attachid>
            <date>2012-01-19 09:47:50 -0800</date>
            <delta_ts>2012-01-19 10:56:02 -0800</delta_ts>
            <desc>Patch Proposal</desc>
            <filename>0001-2012-01-19-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>60714</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA2NjhhNzVmZWM3NGE4MTQ1YWM5ZjhjYTljZWE4ZjNkZDZiOTM0M2I4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE5IE9jdCAyMDExIDIwOjA1OjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0xOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEV4cG9zZSBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBpbiBXZWJLaXQy
IHRvIEFUSy9BVC1TUEkgYmFzZWQgQVRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyNTg5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBOZXcgb3B0aW9uYWwgZGVwZW5kZW5jeSBmb3IgV0syJ3MgYWNjZXNzaWJpbGl0
eSB1bml0IHRlc3Q6IEFULVNQSTIuCgogICAgICAgICogY29uZmlndXJlLmFjOiBDaGVjayBmb3Ig
QVQtU1BJMiB3aGVuIGJ1aWxkaW5nIHdpdGggV0syIHN1cHBvcnQuCgoyMDEyLTAxLTE5ICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gRXhw
b3NlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNl
ZCBBVHMKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1
ODkKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEV4cG9zZSB0
aGUgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gdGhlIG11bHRpLXByb2Nlc3MKICAgICAgICBh
cmNoaXRlY3R1cmUgb2YgV0syIHRocm91Z2ggQXRrU29ja2V0IGFkIEF0a1BsdWcuCgogICAgICAg
IE1ha2UgdGhlIFdlYlZpZXcgd2lkZ2V0IHJldHVybiBhbiBBdGtTb2NrZXQgd2hlbiBjYWxsaW5n
IHRvCiAgICAgICAgZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZSgpLgoKICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwOgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KToK
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKToKICAgICAgICAod2Via2l0
X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwOiBBZGRlZC4KICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlV2lkZ2V0RmluYWxpemUpOgogICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUFjY2Vzc2libGVXaWRnZXREZXN0cm95ZWQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUFjY2Vzc2libGVJbml0aWFsaXplKToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3Np
YmxlUmVmU3RhdGVTZXQpOgogICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJ
bmRleEluUGFyZW50KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9p
bml0KToKICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9jbGFzc19pbml0
KToKICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KToKICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oOiBBZGRlZC4KCiAg
ICAgICAgTWFrZSB0aGUgV2ViUGFnZSBjcmVhdGUgYW4gQXRrUGx1ZyBvbiBpdHMgaW5pdGlhbGl6
YXRpb24gYW5kCiAgICAgICAgc2VuZGluZyB0aGUgSUQgb2YgdGhhdCBwbHVnIHRvIHRoZSBVSSBw
cm9jZXNzLCBzbyBpdCBjYW4gZW1iZWQgdGhlCiAgICAgICAgcGx1ZyBpbiB0aGUgc29ja2V0LgoK
ICAgICAgICBBbHNvLCB0YWtlIGNhcmUgb2YgYWxsIHRoZSBuZWVkZWQgd3JhcHBpbmcgYXJvdW5k
IHRoZSBXZWJDb3JlJ3MKICAgICAgICBhY2Nlc3NpYmlsaXR5IG9iamVjdHMsIGV4cG9zaW5nIHRo
ZW0gaW4gdGhlIFVJIHByb2Nlc3MncwogICAgICAgIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IHRo
YW5rcyB0byB0aGUgc29ja2V0LXBsdWcgY29ubmVjdGlvbi4KCiAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRBY2Nlc3Np
YmlsaXR5UGx1Z0lEKToKICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CiAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CiAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJpbGl0eVRyZWUpOgogICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CiAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6
CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CiAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6V2ViUGFnZSk6CiAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDogQWRkZWQuCiAgICAgICAgKGFjY2Vzc2liaWxp
dHlSb290T2JqZWN0V3JhcHBlcik6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
SW5pdGlhbGl6ZSk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5kZXhJ
blBhcmVudCk6CiAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0TkNoaWxkcmVu
KToKICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RSZWZDaGlsZCk6CiAgICAgICAg
KHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2luaXQpOgogICAgICAgICh3ZWJfcGFnZV9h
Y2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KToKICAgICAgICAod2ViUGFnZUFjY2Vzc2li
aWxpdHlPYmplY3ROZXcpOgogICAgICAgICh3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZnJl
c2gpOgogICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdC5oOiBBZGRlZC4KICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFn
ZUd0ay5jcHA6CiAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSk6CgogICAg
ICAgIE5ldyB1bml0IHRlc3QgZm9yIGNoZWNraW5nIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBpbiBX
SzJHVEsuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRl
c3RTZXJ2ZXIuY3BwOiBBZGRlZC4KICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6IE5vdGlm
eSB0aGUgcGFyZW50IHByb2Nlc3MgKHRoZSB0ZXN0KQogICAgICAgIHdoZW4gcmVhZHkuCiAgICAg
ICAgKG1haW4pOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUu
YW06CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJp
bGl0eS5jcHA6IEFkZGVkLgogICAgICAgIChzdG9wVGVzdFNlcnZlcik6CiAgICAgICAgKHNpZ0Fi
b3J0SGFuZGxlcik6CiAgICAgICAgKHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyk6CiAgICAg
ICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3IpOgogICAgICAgIChzdGFydFRlc3RTZXJ2ZXIpOgog
ICAgICAgIChjaGVja0F0c3BpQWNjZXNzaWJsZSk6CiAgICAgICAgKGZpbmRUZXN0U2VydmVyQXBw
bGljYXRpb24pOgogICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6CiAgICAgICAgKGJl
Zm9yZUFsbCk6CiAgICAgICAgKGFmdGVyQWxsKToKCjIwMTItMDEtMTkgIE1hcmlvIFNhbmNoZXog
UHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAgICBbR1RLXSBFeHBvc2UgYWNjZXNz
aWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFUcwogICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU4OQoKICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgRW5zdXJlIHRoZSBhY2Nlc3Np
YmlsaXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcKICAgICAgICB0
aGUgdW5pdCB0ZXN0cywgb3RoZXJ3aXNlIFdLMidzIGFjY2Vzc2liaWxpdHkgdGVzdHMgd29uJ3Qg
d29yay4KCiAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6CiAgICAgICAgKFRlc3RSdW5u
ZXIpOgogICAgICAgIChUZXN0UnVubmVyLl9sb29rdXBfYXRzcGkyX2JpbmFyeSk6IE5ldy4gTG9v
a3MgZm9yIHRoZSBkaXJlY3RvcnkKICAgICAgICB3aGVyZSBhdC1zcGkyJ3Mgc3R1ZmYgaXMgbG9j
YXRlZCAobGlrZSBhdC1zcGktYnVzLWxhdW5jaGVyIGFuZAogICAgICAgIGF0LXNwaTItcmVnaXN0
cnlkKS4KICAgICAgICAoVGVzdFJ1bm5lci5ydW4pOiBJbml0aWFsaXplIHRoZSBhY2Nlc3NpYmls
aXR5IGluZnJhc3RydWN0dXJlLgoKICAgICAgICAqIGd0ay9nZW5lcmF0ZS1ndGtkb2M6CiAgICAg
ICAgKGdldF93ZWJraXQyX29wdGlvbnMpOiBBZGQgJ1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZS4qJy4KCiAgICAgICAgKiBndGsvamhidWlsZC5tb2R1bGVzOiBBZGRlZCBhdC1zcGkyLWNvcmUg
YW5kIGF0LXNwaTItYXRrLgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAxMSArCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgODAgKysrKysrKwogU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIC4uLi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgICAgICAgIHwgICAzMSArKysKIC4uLi9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAgICAgICAgIHwgIDEyNSArKysrKysrKysr
KwogLi4uL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmggICAgICAgICAgfCAg
IDU1ICsrKysrCiAuLi4vQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAg
ICAgICB8ICAgNTggKysrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dO
VW1ha2VmaWxlLmFtIHwgICAyMCArKwogLi4uL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vz
c2liaWxpdHkuY3BwICAgICAgfCAgMjMwICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggICAgICAgICAgICB8ICAgIDkgKwogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAgfCAgICAzICsKIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCAgIHwgICAgNSAr
CiAuLi4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwICAgICAgICB8ICAg
IDUgKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwICAgICAg
fCAgICAyICsKIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggICAg
ICAgIHwgICAxMCArLQogLi4uL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcCAgICAgfCAgMTQwICsrKysrKysrKysrKwogLi4uL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nl
c3NpYmlsaXR5T2JqZWN0LmggICAgICAgfCAgIDY0ICsrKysrKwogLi4uL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCAgfCAgIDE5ICsrLQogVG9vbHMvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIyICsrCiBUb29scy9T
Y3JpcHRzL3J1bi1ndGstdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDYgKysrKy0K
IFRvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MSArCiBUb29scy9ndGsvamhidWlsZC5tb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMjUgKysKIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAyNSArKwogMjMgZmlsZXMgY2hhbmdlZCwgOTg2IGluc2VydGlvbnMoKyksIDQgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNz
aWJsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2li
aWxpdHkuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXgg
MGU0ZmMwYi4uMjY4ZTM1YiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDEyLTAxLTE5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNo
ZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBFeHBvc2UgYWNjZXNzaWJpbGl0eSBoaWVy
YXJjaHkgaW4gV2ViS2l0MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFUcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1ODkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgb3B0aW9uYWwgZGVwZW5kZW5jeSBm
b3IgV0syJ3MgYWNjZXNzaWJpbGl0eSB1bml0IHRlc3Q6IEFULVNQSTIuCisKKyAgICAgICAgKiBj
b25maWd1cmUuYWM6IENoZWNrIGZvciBBVC1TUEkyIHdoZW4gYnVpbGRpbmcgd2l0aCBXSzIgc3Vw
cG9ydC4KKwogMjAxMi0wMS0xOCAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgW1F0XSBDb25zb2xpZGF0ZSBsYXlvdXQgdGVzdCBjcmFzaCBsb2dnaW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggYWU3YmNmNi4uYjFiZDFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBA
CisyMDEyLTAxLTE5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBFeHBvc2UgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViS2l0
MiB0byBBVEsvQVQtU1BJIGJhc2VkIEFUcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzI1ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFeHBvc2UgdGhlIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IGluIHRo
ZSBtdWx0aS1wcm9jZXNzCisgICAgICAgIGFyY2hpdGVjdHVyZSBvZiBXSzIgdGhyb3VnaCBBdGtT
b2NrZXQgYW5kIEF0a1BsdWcuCisKKyAgICAgICAgTWFrZSB0aGUgV2ViVmlldyB3aWRnZXQgcmV0
dXJuIGFuIEF0a1NvY2tldCB3aGVuIGNhbGxpbmcgdG8KKyAgICAgICAgZ3RrX3dpZGdldF9nZXRf
YWNjZXNzaWJsZSgpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUdldEFjY2Vzc2libGUpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3Nf
aW5pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nl
c3NpYmxlLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVX
aWRnZXRGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVXaWRn
ZXREZXN0cm95ZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlSW5pdGlh
bGl6ZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVSZWZTdGF0ZVNldCk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KToK
KyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2NsYXNzX2luaXQpOgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlTmV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaDogQWRkZWQuCisKKyAgICAgICAgTWFr
ZSB0aGUgV2ViUGFnZSBjcmVhdGUgYW4gQXRrUGx1ZyBvbiBpdHMgaW5pdGlhbGl6YXRpb24gYW5k
CisgICAgICAgIHNlbmRpbmcgdGhlIElEIG9mIHRoYXQgcGx1ZyB0byB0aGUgVUkgcHJvY2Vzcywg
c28gaXQgY2FuIGVtYmVkIHRoZQorICAgICAgICBwbHVnIGluIHRoZSBzb2NrZXQuCisKKyAgICAg
ICAgQWxzbywgdGFrZSBjYXJlIG9mIGFsbCB0aGUgbmVlZGVkIHdyYXBwaW5nIGFyb3VuZCB0aGUg
V2ViQ29yZSdzCisgICAgICAgIGFjY2Vzc2liaWxpdHkgb2JqZWN0cywgZXhwb3NpbmcgdGhlbSBp
biB0aGUgVUkgcHJvY2VzcydzCisgICAgICAgIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5IHRoYW5r
cyB0byB0aGUgc29ja2V0LXBsdWcgY29ubmVjdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRBY2Nlc3Np
YmlsaXR5UGx1Z0lEKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiaW5kQWNjZXNzaWJpbGl0eVRyZWUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hM
b2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKGFj
Y2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcik6CisgICAgICAgICh3ZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdEluaXRpYWxpemUpOgorICAgICAgICAod2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RHZXRJbmRleEluUGFyZW50KToKKyAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
R2V0TkNoaWxkcmVuKToKKyAgICAgICAgKHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmQ2hp
bGQpOgorICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfaW5pdCk6CisgICAg
ICAgICh3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFzc19pbml0KToKKyAgICAgICAg
KHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0TmV3KToKKyAgICAgICAgKHdlYlBhZ2VBY2Nlc3Np
YmlsaXR5T2JqZWN0UmVmcmVzaCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
bGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVBY2Nl
c3NpYmlsaXR5VHJlZSk6CisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCBmb3IgY2hlY2tpbmcgYWNj
ZXNzaWJpbGl0eSBzdXBwb3J0IGluIFdLMkdUSy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcDogQWRkZWQuCisgICAgICAgIChs
b2FkQ2hhbmdlZENhbGxiYWNrKTogTm90aWZ5IHRoZSBwYXJlbnQgcHJvY2VzcyAodGhlIHRlc3Qp
CisgICAgICAgIHdoZW4gcmVhZHkuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHA6IEFkZGVkLgorICAgICAgICAo
c3RvcFRlc3RTZXJ2ZXIpOgorICAgICAgICAoc2lnQWJvcnRIYW5kbGVyKToKKyAgICAgICAgKHRl
c3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyk6CisgICAgICAgIChzdGFydFRlc3RTZXJ2ZXJNb25p
dG9yKToKKyAgICAgICAgKHN0YXJ0VGVzdFNlcnZlcik6CisgICAgICAgIChjaGVja0F0c3BpQWNj
ZXNzaWJsZSk6CisgICAgICAgIChmaW5kVGVzdFNlcnZlckFwcGxpY2F0aW9uKToKKyAgICAgICAg
KHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
IChhZnRlckFsbCk6CisKIDIwMTItMDEtMTggIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBNb3ZlIFNoYWRvd0NvbnRlbnRFbGVtZW50IGZyb20gZG9tLyB0
byBodG1sLyBhbmQgbWFrZSBTaGFkb3dDb250ZW50RWxlbWVudCBzdWJjbGFzcyBvZiBIVE1MRWxl
bWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggYTc3MWI5ZC4uOTQ3YWFhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KQEAgLTU0OCw2ICs1NDgsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtf
QVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5oIFwKQEAgLTg5Myw2ICs4
OTUsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJL
SVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3Rvckd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QuaCBcCisJU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0
ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKaW5kZXggYzAzZjBiYi4uY2ZhMTY1MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJFdmVu
dEZhY3RvcnkuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGlw
Ym9hcmRHdGsuaD4KQEAgLTY5LDYgKzcwLDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUgewogICAgIEd0a0RyYWdBbmREcm9wSGVscGVyIGRyYWdBbmREcm9wSGVscGVyOwogICAg
IERyYWdJY29uIGRyYWdJY29uOwogICAgIEludFNpemUgcmVzaXplclNpemU7CisgICAgR1JlZlB0
cjxBdGtPYmplY3Q+IGFjY2Vzc2libGU7CiB9OwogCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZp
ZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQpAQCAtMzc0
LDYgKzM3NiwzNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2
ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KgogICAgIGdka19kcmFnX3N0YXR1
cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiks
IHRpbWUpOwogfQogCitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRXZWJWaWV3QmFzZUdldEFjY2Vz
c2libGUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgLy8gSWYgdGhlIHNvY2tldCBoYXMgYWxy
ZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGVtYmVkZGVkIGEgcGx1ZyBJRCwgcmV0dXJuIGl0LgorICAg
IFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdp
ZGdldCktPnByaXY7CisgICAgaWYgKHByaXYtPmFjY2Vzc2libGUgJiYgYXRrX3NvY2tldF9pc19v
Y2N1cGllZChBVEtfU09DS0VUKHByaXYtPmFjY2Vzc2libGUuZ2V0KCkpKSkKKyAgICAgICAgcmV0
dXJuIHByaXYtPmFjY2Vzc2libGUuZ2V0KCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFjY2Vzc2li
bGUgb2JqZWN0IGFuZCBhc3NvY2lhdGUgaXQgdG8gdGhlIHdpZGdldC4KKyAgICBpZiAoIXByaXYt
PmFjY2Vzc2libGUpIHsKKyAgICAgICAgcHJpdi0+YWNjZXNzaWJsZSA9IGFkb3B0R1JlZihBVEtf
T0JKRUNUKHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5ldyh3aWRnZXQpKSk7CisKKyAgICAg
ICAgLy8gU2V0IHRoZSBwYXJlbnQgbm90IHRvIGJyZWFrIGJvdHRvbS11cCBuYXZpZ2F0aW9uLgor
ICAgICAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3
aWRnZXQpOworICAgICAgICBBdGtPYmplY3QqIGF4UGFyZW50ID0gcGFyZW50V2lkZ2V0ID8gZ3Rr
X3dpZGdldF9nZXRfYWNjZXNzaWJsZShwYXJlbnRXaWRnZXQpIDogMDsKKyAgICAgICAgaWYgKGF4
UGFyZW50KQorICAgICAgICAgICAgYXRrX29iamVjdF9zZXRfcGFyZW50KHByaXYtPmFjY2Vzc2li
bGUuZ2V0KCksIGF4UGFyZW50KTsKKyAgICB9CisKKyAgICAvLyBUcnkgdG8gZW1iZWQgdGhlIHBs
dWcgaW4gdGhlIHNvY2tldCwgaWYgcG9zc3NpYmxlLgorICAgIFN0cmluZyBwbHVnSUQgPSBwcml2
LT5wYWdlUHJveHktPmdldEFjY2Vzc2liaWxpdHlQbHVnSUQoKTsKKyAgICBpZiAocGx1Z0lELmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gcHJpdi0+YWNjZXNzaWJsZS5nZXQoKTsKKworICAgIGF0
a19zb2NrZXRfZW1iZWQoQVRLX1NPQ0tFVChwcml2LT5hY2Nlc3NpYmxlLmdldCgpKSwgY29uc3Rf
Y2FzdDxnY2hhcio+KHBsdWdJRC51dGY4KCkuZGF0YSgpKSk7CisKKyAgICByZXR1cm4gcHJpdi0+
YWNjZXNzaWJsZS5nZXQoKTsKK30KKwogc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ01vdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdp
bnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CkBAIC00MzgsNiArNDY4LDcg
QEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJW
aWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJWaWUKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19sZWF2ZSA9
IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlOwogICAgIHdpZGdldENsYXNzLT5kcmFnX2Ryb3Ag
PSB3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wOwogICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFf
cmVjZWl2ZWQgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQ7CisgICAgd2lkZ2V0
Q2xhc3MtPmdldF9hY2Nlc3NpYmxlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlOwog
CiAgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRX
ZWJWaWV3QmFzZUNsYXNzKTsKICAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2Vi
Vmlld0Jhc2VGaW5hbGl6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTExYWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2li
bGUuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZUFj
Y2Vzc2libGUuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworc3RydWN0IF9XZWJLaXRXZWJW
aWV3QmFzZUFjY2Vzc2libGVQcml2YXRlIHsKKyAgICBHdGtXaWRnZXQqIHdpZGdldDsKK307CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLCB3ZWJraXRfd2ViX3Zp
ZXdfYmFzZV9hY2Nlc3NpYmxlLCBBVEtfVFlQRV9TT0NLRVQpCisKK3N0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlQWNjZXNzaWJsZUZpbmFsaXplKEdPYmplY3QqIGdvYmplY3QpCit7CisgICAg
V2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlID0gV0VCS0lUX1dFQl9WSUVX
X0JBU0VfQUNDRVNTSUJMRShnb2JqZWN0KTsKKyAgICBhY2Nlc3NpYmxlLT5wcml2LT5+V2ViS2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF93ZWJfdmlld19iYXNlX2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUoZ29iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVdpZGdldERl
c3Ryb3llZChHdGtXaWRnZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBh
Y2Nlc3NpYmxlKQoreworICAgIGFjY2Vzc2libGUtPnByaXYtPndpZGdldCA9IDA7CisgICAgYXRr
X29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKEFUS19PQkpFQ1QoYWNjZXNzaWJsZSksIEFUS19T
VEFURV9ERUZVTkNULCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlSW5pdGlhbGl6ZShBdGtPYmplY3QqIGF0a09iamVjdCwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBpZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3Np
YmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUpCisgICAgICAgIEFUS19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXpl
KGF0a09iamVjdCwgZGF0YSk7CisKKyAgICBpZiAoZGF0YSAmJiBHVEtfSVNfV0lER0VUKGRhdGEp
KSB7CisgICAgICAgIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZSogYWNjZXNzaWJsZSA9IFdF
QktJVF9XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEUoYXRrT2JqZWN0KTsKKyAgICAgICAgYWNjZXNz
aWJsZS0+cHJpdi0+d2lkZ2V0ID0gR1RLX1dJREdFVChkYXRhKTsKKworICAgICAgICBnX3NpZ25h
bF9jb25uZWN0X2FmdGVyKGFjY2Vzc2libGUtPnByaXYtPndpZGdldCwgImRlc3Ryb3kiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlV2lkZ2V0RGVzdHJveWVkKSwgYXRrT2JqZWN0KTsKKyAgICB9CisKKyAgICBhdGtf
b2JqZWN0X3NldF9yb2xlKGF0a09iamVjdCwgQVRLX1JPTEVfRklMTEVSKTsKK30KKworc3RhdGlj
IEF0a1N0YXRlU2V0KiB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVSZWZTdGF0ZVNldChBdGtP
YmplY3QqIGF0a09iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUqIGFj
Y2Vzc2libGUgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKGF0a09iamVjdCk7CisK
KyAgICBBdGtTdGF0ZVNldCogc3RhdGVTZXQ7CisgICAgaWYgKGFjY2Vzc2libGUtPnByaXYtPndp
ZGdldCkgeworICAgICAgICAvLyBVc2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIEF0a1NvY2tldCBp
ZiB0aGUgd2lkZ2V0IGlzIHN0aWxsIGFsaXZlLgorICAgICAgICBzdGF0ZVNldCA9IEFUS19PQkpF
Q1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5y
ZWZfc3RhdGVfc2V0KGF0a09iamVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhl
IHdpZGdldCBpcyBubyBsb25nZXIgYWxpdmUsIHNhdmUgc29tZSByZW1vdGUgY2FsbHMKKyAgICAg
ICAgLy8gKGJlY2F1c2Ugb2YgQXRrU29ja2V0J3MgaW1wbGVtZW50YXRpb24gb2YgcmVmX3N0YXRl
X3NldCgpKQorICAgICAgICAvLyBhbmQganVzdCByZXR1cm4gdGhhdCB0aGlzIEF0a09iamVjdCBp
cyBkZWZ1bmN0LgorICAgICAgICBzdGF0ZVNldCA9IGF0a19zdGF0ZV9zZXRfbmV3KCk7CisgICAg
ICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfREVGVU5DVCk7
CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRlU2V0OworfQorCitzdGF0aWMgZ2ludCB3ZWJraXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KEF0a09iamVjdCogYXRrT2JqZWN0
KQoreworICAgIEF0a09iamVjdCogYXRrUGFyZW50ID0gYXRrX29iamVjdF9nZXRfcGFyZW50KGF0
a09iamVjdCk7CisgICAgaWYgKCFhdGtQYXJlbnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAg
IGd1aW50IGNvdW50ID0gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGF0a1Bh
cmVudCk7CisgICAgZm9yIChndWludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
QXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXRrUGFy
ZW50LCBpKTsKKyAgICAgICAgYm9vbCBjaGlsZElzT2JqZWN0ID0gY2hpbGQgPT0gYXRrT2JqZWN0
OworICAgICAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZElzT2Jq
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9hY2Nlc3NpYmxlX2luaXQoV2ViS2l0
V2ViVmlld0Jhc2VBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIFdlYktpdFdlYlZpZXdC
YXNlQWNjZXNzaWJsZVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
YWNjZXNzaWJsZSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFLCBXZWJLaXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGVQcml2YXRlKTsKKyAgICBhY2Nlc3NpYmxlLT5wcml2ID0gcHJp
djsKKyAgICBuZXcgKHByaXYpIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGUoKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9jbGFzc19p
bml0KFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnT2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlRmluYWxpemU7
CisKKyAgICAvLyBObyBuZWVkIHRvIGltcGxlbWVudCBnZXRfbl9jaGlsZHJlbigpIGFuZCByZWZf
Y2hpbGQoKSBoZXJlCisgICAgLy8gc2luY2UgdGhpcyBpcyBhIHN1YmNsYXNzIG9mIEF0a1NvY2tl
dCBhbmQgYWxsIHRoZSBsb2dpYyByZWxhdGVkCisgICAgLy8gdG8gdGhvc2UgZnVuY3Rpb25zIHdp
bGwgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIEFUSyBicmlkZ2UuCisgICAgQXRrT2JqZWN0Q2xhc3Mq
IGF0a09iamVjdENsYXNzID0gQVRLX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgYXRrT2JqZWN0
Q2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVJbml0aWFsaXpl
OworICAgIGF0a09iamVjdENsYXNzLT5yZWZfc3RhdGVfc2V0ID0gd2Via2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlUmVmU3RhdGVTZXQ7CisgICAgYXRrT2JqZWN0Q2xhc3MtPmdldF9pbmRleF9pbl9w
YXJlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50OworCisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld0Jh
c2VBY2Nlc3NpYmxlUHJpdmF0ZSkpOworfQorCitXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUq
IHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5ldyhHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBBdGtPYmplY3QqIG9iamVjdCA9IEFUS19PQkpFQ1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgTlVMTCkpOworICAgIGF0a19vYmplY3RfaW5pdGlh
bGl6ZShvYmplY3QsIHdpZGdldCk7CisgICAgcmV0dXJuIFdFQktJVF9XRUJfVklFV19CQVNFX0FD
Q0VTU0lCTEUob2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5MzJjMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJs
ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVfaAorI2RlZmluZSBXZWJLaXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGVfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFICAg
ICAgICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFKG9iamVjdCkgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCS0lUX1RZUEVfV0VCX1ZJ
RVdfQkFTRV9BQ0NFU1NJQkxFLCBXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUpKQorI2RlZmlu
ZSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFX0FD
Q0VTU0lCTEUsIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZUNsYXNzKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRShvYmplY3QpICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUND
RVNTSUJMRSkpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfVklFV19CQVNFX0FDQ0VTU0lCTEVfQ0xB
U1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBF
X1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSkpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFV19CQVNF
X0FDQ0VTU0lCTEVfR0VUX0NMQVNTKG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0VfQUNDRVNTSUJMRSwgV2ViS2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmll
d0Jhc2VBY2Nlc3NpYmxlIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZTsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGVDbGFzcyBXZWJLaXRXZWJWaWV3QmFzZUFj
Y2Vzc2libGVDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2li
bGVQcml2YXRlIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZVByaXZhdGU7CisKKworc3RydWN0
IF9XZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUgeworICAgIEF0a1NvY2tldCBwYXJlbnQ7Cisg
ICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlUHJpdmF0
ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlQ2xhc3Mg
eworICAgIEF0a1NvY2tldENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X3dl
Yl92aWV3X2Jhc2VfYWNjZXNzaWJsZV9nZXRfdHlwZSgpOworCitXZWJLaXRXZWJWaWV3QmFzZUFj
Y2Vzc2libGUqIHdlYmtpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZU5ldyhHdGtXaWRnZXQqKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTZjZmEyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcApAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93
ZWJraXQyLmg+CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmll
dyosIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGdwb2ludGVyKQoreworICAgIC8vIFNlbmQg
YSBtZXNzYWdlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3aGVuIHdlJ3JlIHJlYWR5LgorICAgIGlm
IChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIGdfcHJpbnQoIk9L
Iik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCBib3RoIEdBSUwgYW5kIHRoZSBBVEsgYnJpZGdlIGFyZSBsb2FkZWQuCisgICAg
Z19zZXRlbnYoIkdUS19NT0RVTEVTIiwgImdhaWw6YXRrLWJyaWRnZSIsIFRSVUUpOworCisgICAg
Z3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9odG1sKHdlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0
bWw+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgIDxoMT5UaGlzIGlzIGEgdGVzdDwvaDE+IgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBz
b21lIHBsYWluIHRleHQuPC9wPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICA8
cD5UaGlzIHBhcmFncmFwaCBjb250YWlucyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsu
b3JnXCI+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlLjwvcD4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwv
aHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICBHdGtXaWRn
ZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3
KSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ19zaWduYWxfY29u
bmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAw
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExC
QUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKworICAgIGd0a19tYWluKCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtCmluZGV4IGQ5MTJiNjUuLjE3NTlkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC02LDYgKzYsMTMgQEAg
VEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2Fy
ZExpc3QKIAogbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKKworaWYgSEFWRV9BVFNQ
STIKK1RFU1RfUFJPR1MgKz0gUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRBY2Nl
c3NpYmlsaXR5CisKK25vaW5zdF9QUk9HUkFNUyArPSBQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
QWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIKK2VuZGlmCisKIHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mg
PSBcCiAJLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Q
cm9ncmFtc1wiIFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCkBAIC03NiwzICs4Mywx
NiBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9DUFBGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rl
c3RCYWNrRm9yd2FyZExpc3RfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFt
c19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0gJCh3ZWJraXQy
X3Rlc3RzX2xkZmxhZ3MpCiAKK2lmIEhBVkVfQVRTUEkyCitQcm9ncmFtc19XZWJLaXQyQVBJVGVz
dHNfQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXJfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKK1Byb2dy
YW1zX1dlYktpdDJBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19BY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1z
X1dlYktpdDJBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0
QWNjZXNzaWJpbGl0eV9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKSAkKEFUU1BJMl9DRkxBR1MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHlfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoQVRT
UEkyX0xJQlMpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxp
dHlfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorZW5kaWYKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyNGQwYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5LmNwcApAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIK
KyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCisvLyBUaGUgbGliYXRzcGkgaGVhZGVycyBkb24n
dCB1c2UgR19CRUdJTl9ERUNMUworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSA8YXRzcGkvYXRzcGku
aD4KK30KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRl
IDxnbGliLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBOYW1lIG9mIHRoZSB0ZXN0
IHNlcnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCitzdGF0aWMg
Y29uc3QgY2hhcioga1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVy
IjsKKworLy8gTWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBp
bnNwZWN0aW5nIGl0Lgorc3RhdGljIGNvbnN0IGludCBrTWF4V2FpdEZvckNoaWxkID0gNTsKKwor
Ly8gVGhlIFBJRCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0
IGlmIG5lZWRlZC4KK3N0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQaWQgPSAwOworCisvLyBXaGV0
aGVyIHRoZSBjaGlsZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFkeS4KK3N0YXRpYyBib29sIGtD
aGlsZElzUmVhZHkgPSBmYWxzZTsKKworc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQorewor
ICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4KKyAgICBpZiAo
IWtDaGlsZFByb2Nlc3NQaWQpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc3Bhd25fY2xvc2Vf
cGlkKGtDaGlsZFByb2Nlc3NQaWQpOworICAgIGtpbGwoa0NoaWxkUHJvY2Vzc1BpZCwgU0lHVEVS
TSk7CisgICAga0NoaWxkUHJvY2Vzc1BpZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ0Fib3J0
SGFuZGxlcihpbnQgc2lnTnVtKQoreworICAgIC8vIEp1c3Qgc3RvcCB0aGUgdGVzdCBzZXJ2ZXIg
aWYgU0lHQUJSVCB3YXMgcmVjZWl2ZWQuCisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworc3Rh
dGljIGdwb2ludGVyIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyhncG9pbnRlcikKK3sKKyAg
ICAvLyBXYWl0IGZvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdG8gaGFwcGVuLgorICAgIGdfdXNs
ZWVwKGtNYXhXYWl0Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAvLyBLaWxsIHRo
ZSBjaGlsZCBwcm9jZXNzIGlmIG5vdCByZWFkeSB5ZXQuCisgICAgaWYgKCFrQ2hpbGRJc1JlYWR5
KQorICAgICAgICBzdG9wVGVzdFNlcnZlcigpOworCisgICAgZ190aHJlYWRfZXhpdCgwKTsKKyAg
ICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpCit7
CisgICAga0NoaWxkSXNSZWFkeSA9IGZhbHNlOworCisjaWYgKCFHTElCX0NIRUNLX1ZFUlNJT04o
MiwgMzEsIDApKQorICAgIGdfdGhyZWFkX2NyZWF0ZSh0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1
bmMsIDAsIEZBTFNFLCAwKTsKKyNlbHNlCisgICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9u
aXRvciIsIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7CisjZW5kaWYKK30KKworc3Rh
dGljIHZvaWQgc3RhcnRUZXN0U2VydmVyKCkKK3sKKyAgICAvLyBQcmVwYXJlIGFyZ3ZbXSBmb3Ig
c3Bhd25pbmcgdGhlIHNlcnZlciBwcm9jZXNzLgorICAgIEdPd25QdHI8Y2hhcj4gdGVzdFNlcnZl
clBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAiV2ViS2l0MkFQSVRlc3Rz
Iiwga1Rlc3RTZXJ2ZXJBcHBOYW1lLCBOVUxMKSk7CisKKyAgICBjaGFyKiB0ZXN0U2VydmVyQXJn
dlsyXTsKKyAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOworICAg
IHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKKworICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRp
bmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0
aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgorICAgIGludCBjaGlsZFN0
ZG91dCA9IDA7CisgICAgaWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMoMCwgdGVzdFNlcnZl
ckFyZ3YsIDAsIHN0YXRpY19jYXN0PEdTcGF3bkZsYWdzPigwKSwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAma0NoaWxkUHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0
LCAwLCAwKSkgeworICAgICAgICBjbG9zZShjaGlsZFN0ZG91dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBTdGFydCBtb25pdG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBz
ZXBhcmF0ZSB0aHJlYWQpIHRvCisgICAgLy8gZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBj
aGlsZCBwcm9jZXNzIG1vcmUgdGhhbiBhIHRpbWVvdXQuCisgICAgc3RhcnRUZXN0U2VydmVyTW9u
aXRvcigpOworCisgICAgY2hhciBtc2dbMl07CisgICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0g
Z19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxkU3Rkb3V0KTsKKyAgICBpZiAoZ19pb19jaGFubmVs
X3JlYWRfY2hhcnMoaW9DaGFubmVsLCBtc2csIDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1B
TCkgeworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ug
c2F5aW5nIGl0J3MgcmVhZHkKKyAgICAgICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFs
bHksIHNvIHRoZSBtb25pdG9yIGNhbiBzZWUgaXQuCisgICAgICAgIGtDaGlsZElzUmVhZHkgPSBt
c2dbMF0gPT0gJ08nICYmIG1zZ1sxXSA9PSAnSyc7CisgICAgfQorICAgIGdfaW9fY2hhbm5lbF91
bnJlZihpb0NoYW5uZWwpOworICAgIGNsb3NlKGNoaWxkU3Rkb3V0KTsKKworICAgIC8vIFRoZSB0
aW1lb3V0IHdhcyByZWFjaGVkIGFuZCB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCisg
ICAgLy8gc3RvcCBpdCBpbm1lZGlhdGVseSwgYW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgor
ICAgIGlmICgha0NoaWxkSXNSZWFkeSkKKyAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKwor
c3RhdGljIHZvaWQgY2hlY2tBdHNwaUFjY2Vzc2libGUoQXRzcGlBY2Nlc3NpYmxlKiBhY2Nlc3Np
YmxlLCBjb25zdCBjaGFyKiB0YXJnZXROYW1lLCBBdHNwaVJvbGUgdGFyZ2V0Um9sZSkKK3sKKyAg
ICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKTsKKworICAgIEdPd25Q
dHI8Y2hhcj4gbmFtZShhdHNwaV9hY2Nlc3NpYmxlX2dldF9uYW1lKGFjY2Vzc2libGUsIDApKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodGFyZ2V0TmFtZSwgPT0sIG5hbWUuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0YXJnZXRSb2xlLCA9PSwgYXRzcGlfYWNjZXNzaWJsZV9nZXRfcm9sZShh
Y2Nlc3NpYmxlLCAwKSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZmlu
ZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbigpCit7CisgICAgLy8gT25seSBvbmUgZGVza3RvcCBpcyBz
dXBwb3J0ZWQgYnkgQVRTUEkgYXQgdGhlIG1vbWVudC4KKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNz
aWJsZT4gZGVza3RvcCA9IGFkb3B0R1JlZihhdHNwaV9nZXRfZGVza3RvcCgwKSk7CisKKyAgICAv
LyBMb29rIGZvciB0aGUgc2VydmVyIGFwcGxpY2F0aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCisg
ICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnQ7CisgICAgaW50IGNoaWxkQ291bnQg
PSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkZXNrdG9wLmdldCgpLCAwKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICBjdXJyZW50
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRlc2t0b3Au
Z2V0KCksIGksIDApKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfbmFtZShjdXJyZW50LmdldCgpLCAwKSwga1Rlc3RTZXJ2ZXJBcHBOYW1lKSkKKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICAvLyBUaGUgdGVzdCBzZXJ2ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAo
VUkgUHJvY2VzcykuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IHRlc3RTZXJ2ZXJBcHAg
PSBmaW5kVGVzdFNlcnZlckFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRSh0ZXN0U2VydmVyQXBwLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUo
dGVzdFNlcnZlckFwcC5nZXQoKSwgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIiwgQVRTUElfUk9M
RV9BUFBMSUNBVElPTik7CisKKyAgICAvLyBUaGUgbWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5
IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJl
bnRQYXJlbnQgPSB0ZXN0U2VydmVyQXBwOworICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBj
dXJyZW50Q2hpbGQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCkpOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FD
Q0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUo
Y3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GUkFNRSk7CisKKyAgICAvLyBUaGUg
V2ViVmlldydzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KKyAgICBjdXJyZW50
UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdf
YXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hl
Y2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxM
RVIpOworCisgICAgLy8gVGhlIFdlYlBhZ2UncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoV2ViIFBy
b2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENo
aWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5n
ZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hp
bGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCks
ICIiLCBBVFNQSV9ST0xFX0ZJTExFUik7CisKKyAgICAvLyBIVE1MIHJvb3QgZWxlbWVudCdzIGFj
Y2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJy
ZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRf
YXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElf
SVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKworICAgIC8vIEhUTUwgYm9keSdz
IGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBj
dXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRT
UElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNj
ZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0RPQ1VNRU5UX0ZSQU1F
KTsKKworICAgIC8vIEhUTUwgSDEncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4K
KyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAs
IDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgp
KSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiVGhpcyBp
cyBhIHRlc3QiLCBBVFNQSV9ST0xFX0hFQURJTkcpOworCisgICAgLy8gSFRNTCBmaXJzdCBwYXJh
Z3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50Q2hp
bGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50Lmdl
dCgpLCAxLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGls
ZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwg
IiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKKworICAgIC8vIEhUTUwgc2Vjb25kIHBhcmFncmFw
aCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRDaGlsZCA9
IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCks
IDIsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdl
dCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwg
QVRTUElfUk9MRV9QQVJBR1JBUEgpOworCisgICAgLy8gSFRNTCBsaW5rJ3MgYWNjZXNzaWJsZSBl
bGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsK
KyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChj
dXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJ
QkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJl
bnRDaGlsZC5nZXQoKSwgImEgbGluayIsIEFUU1BJX1JPTEVfTElOSyk7Cit9CisKK3ZvaWQgYmVm
b3JlQWxsKCkKK3sKKyAgICAvLyBXZSBpbnN0YWxsIGEgaGFuZGxlciB0byBlbnN1cmUgdGhhdCB3
ZSBraWxsIHRoZSBjaGlsZCBwcm9jZXNzCisgICAgLy8gaWYgdGhlIHBhcmVudCBkaWVzIGJlY2F1
c2Ugb2Ygd2hhdGV2ZXIgdGhlIHJlYXNvbiBpcy4KKyAgICBzaWduYWwoU0lHQUJSVCwgc2lnQWJv
cnRIYW5kbGVyKTsKKworICAgIC8vIFN0YXJ0IHRoZSBhY2Nlc3NpYmlsaXR5IHRlc3Qgc2VydmVy
IGFuZCBsb2FkIHRoZSB0ZXN0cy4KKyAgICBzdGFydFRlc3RTZXJ2ZXIoKTsKKyAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImF0c3BpLWJhc2ljLWhpZXJhcmNoeSIs
IHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAg
Ly8gRW5zdXJlIHdlIHN0b3AgdGhlIHNlcnZlci4KKyAgICBzdG9wVGVzdFNlcnZlcigpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDkyNjUwMmYuLmNlMmU5
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTU3MSw2ICs1
NzEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJv
b2wpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisgICAgU3RyaW5nIGdldEFjY2Vzc2li
aWxpdHlQbHVnSUQoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc2liaWxpdHlQbHVnSUQ7IH0KKyNl
bmRpZgorCiAgICAgdm9pZCBiZWdpblByaW50aW5nKFdlYkZyYW1lUHJveHkqLCBjb25zdCBQcmlu
dEluZm8mKTsKICAgICB2b2lkIGVuZFByaW50aW5nKCk7CiAgICAgdm9pZCBjb21wdXRlUGFnZXNG
b3JQcmludGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJiwgUGFzc1JlZlB0cjxD
b21wdXRlZFBhZ2VzQ2FsbGJhY2s+KTsKQEAgLTc0OSw2ICs3NTMsNyBAQCBwcml2YXRlOgogCiAj
aWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZvaWQgYmluZEFjY2Vz
c2liaWxpdHlUcmVlKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oRUZMKQog
ICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChWZWN0b3I8U3RyaW5nPiYpOwpA
QCAtOTc4LDYgKzk4MywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFN0cmluZyBtX2Fj
Y2Vzc2liaWxpdHlQbHVnSUQ7CisjZW5kaWYKKwogICAgIGludDY0X3QgbV9zcGVsbERvY3VtZW50
VGFnOwogICAgIGJvb2wgbV9oYXNTcGVsbERvY3VtZW50VGFnOwogICAgIHVuc2lnbmVkIG1fcGVu
ZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggODc1ZjViOS4uNTk1YzUy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCkBAIC0xNDgsNiArMTQ4LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNp
ZiBQTEFURk9STShHVEspCiAgICAgIyBTdXBwb3J0IGZvciBHVEsrIHBsYXRmb3JtIGtleWJpbmRp
bmdzCiAgICAgR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChBdG9taWNTdHJpbmcgZXZlbnRU
eXBlKSAtPiAoVmVjdG9yPFdURjo6U3RyaW5nPiBjb21tYW5kc0xpc3QpCisKKyAgICAjIFN1cHBv
cnQgZm9yIGNvbm5lY3RpbmcgdGhlIEFjY2Vzc2liaWxpdHkgd29ybGRzIG9mIHRoZSBVSSBhbmQg
dGhlIFdlYiBwcm9jZXNzZXMKKyAgICBCaW5kQWNjZXNzaWJpbGl0eVRyZWUoV1RGOjpTdHJpbmcg
cGx1Z0lEKQogI2VuZGlmCiAKICAgICAjIEJhY2tGb3J3YXJkIG1lc3NhZ2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggMTEyN2Rk
ZS4uZjZiMzAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQ
YWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFn
ZVByb3h5R3RrLmNwcApAQCAtNDksNiArNDksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldEVk
aXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFYK
ICAgICBtX3BhZ2VDbGllbnQtPmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQobV9rZXlFdmVu
dFF1ZXVlLmZpcnN0KCksIGV2ZW50VHlwZSwgY29tbWFuZHNMaXN0KTsKIH0KIAordm9pZCBXZWJQ
YWdlUHJveHk6OmJpbmRBY2Nlc3NpYmlsaXR5VHJlZShjb25zdCBTdHJpbmcmIHBsdWdJRCkKK3sK
KyAgICBtX2FjY2Vzc2liaWxpdHlQbHVnSUQgPSBwbHVnSUQ7Cit9CisKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwCmluZGV4IDQyZmVlMzQuLmEyMGE0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuY3BwCkBAIC0xMzcyLDYgKzEzNzIsMTEgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxkKgog
ICAgICAgICByZXR1cm47CiAKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVu
dCgpLmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgd29ybGQp
OworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIEVuc3VyZSB0aGUgYWNjZXNzaWJpbGl0eSBo
aWVyYXJjaHkgaXMgdXBkYXRlZC4KKyAgICB3ZWJQYWdlLT51cGRhdGVBY2Nlc3NpYmlsaXR5VHJl
ZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRvY3VtZW50RWxl
bWVudEF2YWlsYWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKaW5kZXggYTFjM2MyYy4uYWNmODUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTg5LDYgKzE4OSw4IEBAIFdlYlBhZ2U6
OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQogICAgICwgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCgwKQog
I2VsaWYgUExBVEZPUk0oV0lOKQogICAgICwgbV9uYXRpdmVXaW5kb3cocGFyYW1ldGVycy5uYXRp
dmVXaW5kb3cpCisjZWxpZiBQTEFURk9STShHVEspCisgICAgLCBtX2FjY2Vzc2liaWxpdHlPYmpl
Y3QoMCkKICNlbmRpZgogICAgICwgbV9zZXRDYW5TdGFydE1lZGlhVGltZXIoV2ViUHJvY2Vzczo6
c2hhcmVkKCkucnVuTG9vcCgpLCB0aGlzLCAmV2ViUGFnZTo6c2V0Q2FuU3RhcnRNZWRpYVRpbWVy
RmlyZWQpCiAgICAgLCBtX2ZpbmRDb250cm9sbGVyKHRoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA0MDA3MmNmLi42MGY3ODFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTcwLDYgKzcwLDcg
QEAKIAogI2lmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5oIgor
I2luY2x1ZGUgIldlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCkBAIC0zOTcsNiArMzk4LDkgQEAgcHVibGljOgogICAgIHZvaWQg
Z2VzdHVyZVdpbGxCZWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wmIGNhbkJlZ2lu
UGFubmluZyk7CiAgICAgdm9pZCBnZXN0dXJlRGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKICAgICB2b2lkIGdlc3R1cmVEaWRFbmQoKTsKKworI2VsaWYgUExBVEZPUk0oR1RLKQor
ICAgIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVRyZWUoKTsKICNlbmRpZgogCiAgICAgdm9pZCBz
ZXRDb21wb3NpdGlvbkZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywg
dWludDY0X3QgZnJvbSwgdWludDY0X3QgbGVuZ3RoKTsKQEAgLTU5Niw5ICs2MDAsOSBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShp
bnQzMl90IG5ld0luZGV4KTsKICAgICB2b2lkIHNldFRleHRGb3JBY3RpdmVQb3B1cE1lbnUoaW50
MzJfdCBpbmRleCk7CiAKLSNpZiBQTEFURk9STShHVEspICAgIAorI2lmIFBMQVRGT1JNKEdUSykK
ICAgICB2b2lkIGZhaWxlZFRvU2hvd1BvcHVwTWVudSgpOwotI2VuZGlmICAgIAorI2VuZGlmCiAK
ICAgICB2b2lkIGRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNvbnN0IFZlY3RvcjxTdHJpbmc+
Jik7CiAgICAgdm9pZCBkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKTsKQEAgLTY3NSw2ICs2NzksOCBA
QCBwcml2YXRlOgogICAgIEhXTkQgbV9uYXRpdmVXaW5kb3c7CiAKICAgICBSZWZQdHI8V2ViQ29y
ZTo6Tm9kZT4gbV9nZXN0dXJlVGFyZ2V0Tm9kZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBX
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogbV9hY2Nlc3NpYmlsaXR5T2JqZWN0OwogI2VuZGlm
CiAgICAgCiAgICAgUnVuTG9vcDo6VGltZXI8V2ViUGFnZT4gbV9zZXRDYW5TdGFydE1lZGlhVGlt
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMzcwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3QuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworR19ERUZJTkVfVFlQRShXZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdCwgd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3QsIEFUS19UWVBFX1BMVUcpCisKK3N0
YXRpYyBBdGtPYmplY3QqIGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihBdGtPYmplY3Qq
IGF0a09iamVjdCkKK3sKKyAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpCisgICAgICAgIEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKwor
ICAgIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmxlID0gV0VCX1BBR0VfQUND
RVNTSUJJTElUWV9PQkpFQ1QoYXRrT2JqZWN0KTsKKyAgICBpZiAoIWFjY2Vzc2libGUtPm1fcGFn
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQYWdlKiBwYWdlID0gYWNjZXNzaWJsZS0+bV9w
YWdlLT5jb3JlUGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBGcmFtZSogY29yZSA9IHBhZ2UtPm1haW5GcmFtZSgpOworICAgIGlmICghY29yZSB8fCAhY29y
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiByb290ID0gY29yZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yb290T2JqZWN0
KCk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a09iamVjdCog
YXhSb290ID0gcm9vdC0+d3JhcHBlcigpOworICAgIGlmICghYXhSb290IHx8ICFBVEtfSVNfT0JK
RUNUKGF4Um9vdCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGF4Um9vdDsKK30K
Kworc3RhdGljIHZvaWQgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RJbml0aWFsaXplKEF0a09i
amVjdCogYXRrT2JqZWN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChBVEtfT0JKRUNUX0NM
QVNTKHdlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X3BhcmVudF9jbGFzcyktPmluaXRpYWxp
emUpCisgICAgICAgIEFUS19PQkpFQ1RfQ0xBU1Mod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmpl
Y3RfcGFyZW50X2NsYXNzKS0+aW5pdGlhbGl6ZShhdGtPYmplY3QsIGRhdGEpOworCisgICAgV0VC
X1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QoYXRrT2JqZWN0KS0+bV9wYWdlID0gcmVpbnRlcnBy
ZXRfY2FzdDxXZWJQYWdlKj4oZGF0YSk7CisgICAgYXRrX29iamVjdF9zZXRfcm9sZShhdGtPYmpl
Y3QsIEFUS19ST0xFX0ZJTExFUik7Cit9CisKK3N0YXRpYyBnaW50IHdlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0R2V0SW5kZXhJblBhcmVudChBdGtPYmplY3QgKmF0a09iamVjdCkKK3sKKyAgICAv
LyBBbiBBdGtQbHVnIGlzIHRoZSBvbmx5IGNoaWxkIGFuIEF0a1NvY2tldCBjYW4gaGF2ZS4KKyAg
ICByZXR1cm4gMDsKK30KKworc3RhdGljIGdpbnQgd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RH
ZXROQ2hpbGRyZW4oQXRrT2JqZWN0KiBhdGtPYmplY3QpCit7CisgICAgQXRrT2JqZWN0KiByb290
T2JqZWN0ID0gYWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVyKGF0a09iamVjdCk7CisgICAg
aWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQor
CitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZkNoaWxkKEF0
a09iamVjdCogYXRrT2JqZWN0LCBnaW50IGluZGV4KQoreworICAgIC8vIEl0J3Mgc3VwcG9zZWQg
dG8gaGF2ZSBlaXRoZXIgb25lIGNoaWxkIG9yIHplcm8uCisgICAgaWYgKGluZGV4ICYmIGluZGV4
ICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0g
YWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVyKGF0a09iamVjdCk7CisgICAgaWYgKCFyb290
T2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF0a19vYmplY3Rfc2V0X3BhcmVudChy
b290T2JqZWN0LCBhdGtPYmplY3QpOworICAgIGdfb2JqZWN0X3JlZihyb290T2JqZWN0KTsKKwor
ICAgIHJldHVybiByb290T2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJfcGFnZV9hY2Nlc3Np
YmlsaXR5X29iamVjdF9pbml0KFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmxl
KQoreworfQorCitzdGF0aWMgdm9pZCB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9jbGFz
c19pbml0KFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3MqIGtsYXNzKQoreworICAgIEF0
a09iamVjdENsYXNzKiBhdGtPYmplY3RDbGFzcyA9IEFUS19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwor
CisgICAgLy8gTm8gbmVlZCB0byBpbXBsZW1lbnQgZ2V0X3BhcmVudCgpIGhlcmUgc2luY2UgdGhp
cyBpcyBhIHN1YmNsYXNzCisgICAgLy8gb2YgQXRrUGx1ZyBhbmQgYWxsIHRoZSBsb2dpYyByZWxh
dGVkIHRvIHRoYXQgZnVuY3Rpb24gd2lsbCBiZQorICAgIC8vIGltcGxlbWVudGVkIGJ5IHRoZSBB
VEsgYnJpZGdlLgorICAgIGF0a09iamVjdENsYXNzLT5pbml0aWFsaXplID0gd2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3RJbml0aWFsaXplOworICAgIGF0a09iamVjdENsYXNzLT5nZXRfaW5kZXhf
aW5fcGFyZW50ID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHZXRJbmRleEluUGFyZW50Owor
ICAgIGF0a09iamVjdENsYXNzLT5nZXRfbl9jaGlsZHJlbiA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0R2V0TkNoaWxkcmVuOworICAgIGF0a09iamVjdENsYXNzLT5yZWZfY2hpbGQgPSB3ZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZkNoaWxkOworfQorCitXZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdCogd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3ROZXcoV2ViUGFnZSogcGFnZSkKK3sK
KyAgICBBdGtPYmplY3QqIG9iamVjdCA9IEFUS19PQkpFQ1QoZ19vYmplY3RfbmV3KFdFQl9UWVBF
X1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QsIE5VTEwpKTsKKyAgICBhdGtfb2JqZWN0X2luaXRp
YWxpemUob2JqZWN0LCBwYWdlKTsKKyAgICByZXR1cm4gV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9P
QkpFQ1Qob2JqZWN0KTsKK30KKwordm9pZCB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFJlZnJl
c2goV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2libGUpCit7CisgICAgLy8gV2Ug
anVzdCBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXJlJ3MgYSBjb25uZWN0aW9uIGluIHRoZSBBVEsK
KyAgICAvLyB3b3JsZCBiZXR3ZWVuIHRoaXMgYWNjZXNzaWJpbGl0eSBvYmplY3QgYW5kIHRoZSBB
dGtPYmplY3Qgb2YKKyAgICAvLyB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRoZSByb290
IG9mIHRoZSBET00gdHJlZS4KKyAgICBBdGtPYmplY3QqIHJvb3RPYmplY3QgPSBhY2Nlc3NpYmls
aXR5Um9vdE9iamVjdFdyYXBwZXIoQVRLX09CSkVDVChhY2Nlc3NpYmxlKSk7CisgICAgaWYgKCFy
b290T2JqZWN0KQorICAgICAgICByZXR1cm47CisgICAgYXRrX29iamVjdF9zZXRfcGFyZW50KHJv
b3RPYmplY3QsIEFUS19PQkpFQ1QoYWNjZXNzaWJsZSkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlQWNjZXNz
aWJpbGl0eU9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzlk
OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0X2gKKyNkZWZpbmUgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IFdlYlBhZ2U7Cit9CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJfVFlQRV9QQUdFX0FD
Q0VTU0lCSUxJVFlfT0JKRUNUICAgICAgICAgICAgICAod2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9v
YmplY3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1Qo
b2JqZWN0KSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3QpLCBX
RUJfVFlQRV9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNULCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9i
amVjdCkpCisjZGVmaW5lIFdFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUX0NMQVNTKGtsYXNz
KSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJfVFlQRV9QQUdFX0FD
Q0VTU0lCSUxJVFlfT0JKRUNULCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzKSkKKyNk
ZWZpbmUgV0VCX0lTX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1Qob2JqZWN0KSAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBXRUJfVFlQRV9QQUdFX0FDQ0VTU0lC
SUxJVFlfT0JKRUNUKSkKKyNkZWZpbmUgV0VCX0lTX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1Rf
Q0xBU1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQl9UWVBF
X1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1QpKQorI2RlZmluZSBXRUJfUEFHRV9BQ0NFU1NJQklM
SVRZX09CSkVDVF9HRVRfQ0xBU1Mob2JqZWN0KSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqZWN0KSwgV0VCX1RZUEVfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgV2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdCBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
Q2xhc3M7CisKK3N0cnVjdCBfV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QgeworICAgIEF0a1Bs
dWcgcGFyZW50OworICAgIFdlYktpdDo6V2ViUGFnZSogbV9wYWdlOworfTsKKworc3RydWN0IF9X
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzIHsKKyAgICBBdGtQbHVnQ2xhc3MgcGFyZW50
Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9nZXRfdHlw
ZSgpOworCitXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCogd2ViUGFnZUFjY2Vzc2liaWxpdHlP
YmplY3ROZXcoV2ViS2l0OjpXZWJQYWdlKik7CisKK3ZvaWQgd2ViUGFnZUFjY2Vzc2liaWxpdHlP
YmplY3RSZWZyZXNoKFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvLyBXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCBh
MjVlMWY3Li4yYjJhOTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTM3LDYg
KzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCkBAIC00NCw3ICs0NywyMSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQYWdl
OjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
Q3JlYXRlIHRoZSBhY2Nlc3NpYmxlIG9iamVjdCAodGhlIHBsdWcpIHRoYXQgd2lsbCBzZXJ2ZSBh
cyB0aGUKKyAgICAvLyBlbnRyeSBwb2ludCB0byB0aGUgV2ViIHByb2Nlc3MsIGFuZCBzZW5kIGEg
bWVzc2FnZSB0byB0aGUgVUkKKyAgICAvLyBwcm9jZXNzIHRvIGNvbm5lY3QgdGhlIHR3byB3b3Js
ZHMgdGhyb3VnaCB0aGUgYWNjZXNzaWJpbGl0eQorICAgIC8vIG9iamVjdCB0aGVyZSBzcGVjaWZp
Y2FsbHkgcGxhY2VkIGZvciB0aGF0IHB1cnBvc2UgKHRoZSBzb2NrZXQpLgorICAgIG1fYWNjZXNz
aWJpbGl0eU9iamVjdCA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0TmV3KHRoaXMpOworICAg
IEdPd25QdHI8Z2NoYXI+IHBsdWdJRChhdGtfcGx1Z19nZXRfaWQoQVRLX1BMVUcobV9hY2Nlc3Np
YmlsaXR5T2JqZWN0KSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmluZEFj
Y2Vzc2liaWxpdHlUcmVlKFN0cmluZyhwbHVnSUQuZ2V0KCkpKSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6dXBkYXRlQWNjZXNzaWJpbGl0eVRyZWUoKQoreworICAgIGlmICghbV9hY2Nlc3NpYmlsaXR5
T2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dFJlZnJlc2gobV9hY2Nlc3NpYmlsaXR5T2JqZWN0KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpwbGF0
Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMyNTg5MDku
LjgwYjg3M2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wMS0xOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1z
YW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gRXhwb3NlIGFjY2Vzc2liaWxpdHkg
aGllcmFyY2h5IGluIFdlYktpdDIgdG8gQVRLL0FULVNQSSBiYXNlZCBBVHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5zdXJlIHRoZSBhY2Nlc3NpYmls
aXR5IGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcKKyAgICAgICAgdGhl
IHVuaXQgdGVzdHMsIG90aGVyd2lzZSBXSzIncyBhY2Nlc3NpYmlsaXR5IHRlc3RzIHdvbid0IHdv
cmsuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6CisgICAgICAgIChUZXN0UnVu
bmVyKToKKyAgICAgICAgKFRlc3RSdW5uZXIuX2xvb2t1cF9hdHNwaTJfYmluYXJ5KTogTmV3LiBM
b29rcyBmb3IgdGhlIGRpcmVjdG9yeQorICAgICAgICB3aGVyZSBhdC1zcGkyJ3Mgc3R1ZmYgaXMg
bG9jYXRlZCAobGlrZSBhdC1zcGktYnVzLWxhdW5jaGVyIGFuZAorICAgICAgICBhdC1zcGkyLXJl
Z2lzdHJ5ZCkuCisgICAgICAgIChUZXN0UnVubmVyLnJ1bik6IEluaXRpYWxpemUgdGhlIGFjY2Vz
c2liaWxpdHkgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9j
OgorICAgICAgICAoZ2V0X3dlYmtpdDJfb3B0aW9ucyk6IEFkZCAnV2ViS2l0V2ViVmlld0Jhc2VB
Y2Nlc3NpYmxlLionLgorCisgICAgICAgICogZ3RrL2poYnVpbGQubW9kdWxlczogQWRkZWQgYXQt
c3BpMi1jb3JlIGFuZCBhdC1zcGkyLWF0ay4KKwogMjAxMi0wMS0xOCAgQmFsYXpzIEtlbGVtZW4g
IDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBDb25zb2xpZGF0ZSBsYXlvdXQg
dGVzdCBjcmFzaCBsb2dnaW5nCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVz
dHMgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5kZXggNzBjZjI3NC4uMTc4MTJkYyAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCisrKyBiL1Rvb2xzL1Njcmlw
dHMvcnVuLWd0ay10ZXN0cwpAQCAtMjUsNyArMjUsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAg
ICAgVEVTVF9ESVJTID0gWyAidW5pdHRlc3RzIiwgIldlYktpdDJBUElUZXN0cyIgXQogICAgICMg
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcxNwotICAg
IFNLSVBQRUQgPSBbICJ1bml0dGVzdHMvdGVzdGRvd25sb2FkIiwgInVuaXR0ZXN0cy90ZXN0d2Vi
dmlldyIsICJ1bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIl0KKyAgICBTS0lQUEVEID0gWyAidW5p
dHRlc3RzL3Rlc3Rkb3dubG9hZCIsICJ1bml0dGVzdHMvdGVzdHdlYnZpZXciLCAidW5pdHRlc3Rz
L3Rlc3R3ZWJyZXNvdXJjZSIgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBz
ZWxmLl9leGVjdXRpdmUgPSBFeGVjdXRpdmUoKQpAQCAtNjQsNiArNjQsMTkgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0ZXN0X3BhdGgpIGFu
ZCBvcy5hY2Nlc3ModGVzdF9wYXRoLCBvcy5YX09LKToKICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fdGVzdHMuYXBwZW5kKHRlc3RfcGF0aCkKIAorICAgIGRlZiBfbG9va3VwX2F0c3BpMl9iaW5h
cnkoc2VsZiwgamhidWlsZF9wYXRoLCBmaWxlbmFtZSk6CisgICAgICAgIGV4ZWNfcHJlZml4ID0g
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtqaGJ1aWxkX3BhdGggLCdwa2ctY29uZmlnJywg
Jy0tdmFyaWFibGU9ZXhlY19wcmVmaXgnLCAnYXRzcGktMiddKS5yc3RyaXAoJ1xyXG4nKQorICAg
ICAgICBwYXRoc190b19jaGVjayA9IFsgJ2xpYmV4ZWMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2xpYi9hdC1zcGkyLWNvcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xp
YjMyL2F0LXNwaTItY29yZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWI2NC9hdC1z
cGkyLWNvcmUnIF0KKyAgICAgICAgZm9yIHBhdGggaW4gcGF0aHNfdG9fY2hlY2s6CisgICAgICAg
ICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihleGVjX3ByZWZpeCwgcGF0aCwgZmlsZW5hbWUp
CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlcGF0aCk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZpbGVwYXRoCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiBydW4o
c2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKICAgICAgICAgICAgIHN5cy5zdGRl
cnIud3JpdGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dy
YW1zX3BhdGgpKQpAQCAtNzgsMTIgKzkxLDQzIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
ICAgICBleGl0X3N0YXR1c1swXSA9IGVycm9yLmV4aXRfY29kZQogCiAgICAgICAgIGpoYnVpbGRf
cGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9ndGtfdG9vbHNfZGlyZWN0b3J5LCAicnVuLXdpdGgt
amhidWlsZCIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUncyBubyBBVF9TUElfQlVTIFgn
cyBwcm9wZXJ0eSBwcmV2aW91c2x5IHNldCwKKyAgICAgICAgIyBvdGhlcndpc2UgdGhlIGFjY2Vz
c2liaWxpdHkgYnVzIGNvdWxkbid0IGJlIHByb3Blcmx5IGxhdW5jaGVkLgorICAgICAgICBzZWxm
Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4cHJvcCcsICctcm9vdCcsICctcmVtb3ZlJywgJ0FU
X1NQSV9CVVMnXSwgZW52PXRlc3RfZW52KQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBhY2Nl
c3NpYmlsaXR5IGJ1cyBpcyBsYXVuY2hlZC4KKyAgICAgICAgYTExeV9idXNfbGF1bmNoZWQgPSBG
YWxzZQorICAgICAgICBhMTF5X2J1c19sYXVuY2hlcl9wYXRoID0gc2VsZi5fbG9va3VwX2F0c3Bp
Ml9iaW5hcnkoamhidWlsZF9wYXRoLCAnYXQtc3BpLWJ1cy1sYXVuY2hlcicpCisgICAgICAgIGlm
IGExMXlfYnVzX2xhdW5jaGVyX3BhdGg6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgYTExeV9idXNfbGF1bmNoZXIgPSBFeGVjdXRpdmUoKS5wb3BlbihbYTExeV9idXNfbGF1bmNo
ZXJfcGF0aF0sIGVudj10ZXN0X2VudikKKyAgICAgICAgICAgICAgICBhMTF5X2J1c19sYXVuY2hl
ZCA9IFRydWUKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJy
LndyaXRlKCJGYWlsZWQgdG8gbGF1bmNoIHRoZSBhY2Nlc3NpYmlsaXR5IGJ1c1xuIikKKyAgICAg
ICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgICAgICBhMTF5X3JlZ2lzdHJ5ZF9y
dW5uaW5nID0gRmFsc2UKKyAgICAgICAgYTExeV9yZWdpc3RyeWRfcGF0aCA9IHNlbGYuX2xvb2t1
cF9hdHNwaTJfYmluYXJ5KGpoYnVpbGRfcGF0aCwgJ2F0LXNwaTItcmVnaXN0cnlkJykKKyAgICAg
ICAgaWYgYTExeV9yZWdpc3RyeWRfcGF0aDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBhMTF5X3JlZ2lzdHJ5ZCA9IEV4ZWN1dGl2ZSgpLnBvcGVuKFthMTF5X3JlZ2lzdHJ5ZF9w
YXRoXSwgZW52PXRlc3RfZW52KQorICAgICAgICAgICAgICAgIGExMXlfcmVnaXN0cnlkX3J1bm5p
bmcgPSBUcnVlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVy
ci53cml0ZSgiRmFpbGVkIHRvIHJ1biB0aGUgYWNjZXNzaWJpbGl0eSByZWdpc3RyeVxuIikKKyAg
ICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKwogICAgICAgICBmb3IgdGVzdCBpbiBz
ZWxmLl90ZXN0czoKICAgICAgICAgICAgIG91dCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbamhidWlsZF9wYXRoICwnZ3Rlc3RlcicsIHRlc3RdLCBlbnY9dGVzdF9lbnYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfaGFuZGxlcj1fZXJy
b3JfaGFuZGxlcikKICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUob3V0KQogICAgICAgICAg
ICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKKyAgICAgICAgaWYgYTExeV9yZWdpc3RyeWRfcnVubmlu
ZzoKKyAgICAgICAgICAgIGExMXlfcmVnaXN0cnlkLmtpbGwoKQorICAgICAgICBpZiBhMTF5X2J1
c19sYXVuY2hlZDoKKyAgICAgICAgICAgIGExMXlfYnVzX2xhdW5jaGVyLmtpbGwoKQorCiAgICAg
ICAgIGlmIGV4aXRfc3RhdHVzWzBdOgogICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVGVz
dHMgZmFpbGVkXG4iKQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCmRpZmYgLS1naXQg
YS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwpp
bmRleCBkYjVmODNhLi4wYzE4YTM4IDEwMDc1NQotLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3Rr
ZG9jCisrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKQEAgLTYyLDYgKzYyLDcgQEAgZGVm
IGdldF93ZWJraXQyX29wdGlvbnMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmds
b2Ioc3JjX3BhdGgoJ1BhZ2VDbGllbnRJbXBsLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRVSUNsaWVudC4qJykpICsgXAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0V2ViTG9hZGVyQ2xp
ZW50LionKSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRo
KCdXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuKicpKSArIFwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ3Rlc3RzLyouaCcpKQogICAgIH0pCiAgICAgcmV0
dXJuIChjb21tb24uYnVpbGRfcGF0aCgnU291cmNlJywgJ1dlYktpdDInLCAnd2Via2l0Mmd0ay0z
LjAucGMnKSwgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMg
Yi9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzCmluZGV4IDJkY2JmNjMuLjE5OTEwZDUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMKKysrIGIvVG9vbHMvZ3RrL2poYnVpbGQu
bW9kdWxlcwpAQCAtMTQsNiArMTQsOCBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJnbGliLW5ldHdv
cmtpbmciLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ25vbWUtaWNvbi10aGVtZSIvPgogICAgICAg
PGRlcCBwYWNrYWdlPSJsaWJzb3VwIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImF0LXNwaTItY29y
ZSIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJhdC1zcGkyLWF0ayIvPgogICAgIDwvZGVwZW5kZW5j
aWVzPgogICA8L21ldGFtb2R1bGU+CiAKQEAgLTE2Miw0ICsxNjQsMjcgQEAKICAgICA8L2JyYW5j
aD4KICAgPC9hdXRvdG9vbHM+CiAKKyAgPGF1dG90b29scyBpZD0iYXQtc3BpMi1jb3JlIj4KKyAg
ICA8YnJhbmNoIG1vZHVsZT0icHViL0dOT01FL3NvdXJjZXMvYXQtc3BpMi1jb3JlLzIuMi9hdC1z
cGkyLWNvcmUtMi4yLjEudGFyLnh6IiB2ZXJzaW9uPSIyLjIuMSIKKyAgICAgICAgICAgIHJlcG89
ImZ0cC5nbm9tZS5vcmciCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6MmE0MTI5NDIwZGVjY2Ez
NjU3ZTE2M2E0ZGJiMWEzY2IyOGFjYWZlMzJlYTEyOTI0MTdmZGQ4MTA4NGQ0OGZhYyIKKyAgICAg
ICAgICAgIG1kNXN1bT0iMTgzOTE2MzczZDY5MDZmZjZiMjIwYmQ0NGQxNWZmOTciPgorICAgIDwv
YnJhbmNoPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9ImdsaWIiLz4K
KyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9hdXRvdG9vbHM+CisKKyAgPGF1dG90b29scyBpZD0i
YXQtc3BpMi1hdGsiPgorICAgIDxicmFuY2ggbW9kdWxlPSJwdWIvR05PTUUvc291cmNlcy9hdC1z
cGkyLWF0ay8yLjIvYXQtc3BpMi1hdGstMi4yLjEudGFyLnh6IiB2ZXJzaW9uPSIyLjIuMSIKKyAg
ICAgICAgICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6
NjY3N2RlZjM0YjE2YzlhMjhkNmFkOTY0NzNlYTU2YTNjMGUxM2FhOTY4ZTU4NGRmMDA0Y2Q0NGM4
NjkxZWExYSIKKyAgICAgICAgICAgIG1kNXN1bT0iMTk2NDYwOTdhY2EyNWE5YzFiOGJhN2FiOGQx
NzI5MTYiPgorICAgIDwvYnJhbmNoPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBh
Y2thZ2U9ImdsaWIiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iYXQtc3BpMi1jb3JlIi8+CisgICAg
PC9kZXBlbmRlbmNpZXM+CisgIDwvYXV0b3Rvb2xzPgorCiA8L21vZHVsZXNldD4KZGlmZiAtLWdp
dCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBjZjM3NzA2Li5hYjdlOTgwIDEw
MDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yODgsNiArMjg4
LDcgQEAgRU5DSEFOVF9SRVFVSVJFRF9WRVJTSU9OPTAuMjIKIExJQkZGVFdfUkVRVUlSRURfVkVS
U0lPTj0zLjIuMgogQ0xVVFRFUl9SRVFVSVJFRF9WRVJTSU9OPTEuOC4yCiBDTFVUVEVSX0dUS19S
RVFVSVJFRF9WRVJTSU9OPTEuMC4yCitBVFNQSTJfUkVRVUlSRURfVkVSU0lPTj0yLjIuMQogCiAj
IEF2YWlsYWJsZSBtb2R1bGVzCiAjCkBAIC0xMDQ4LDYgKzEwNDksMjcgQEAgaWYgdGVzdCAiJGVu
YWJsZV93ZWJfYXVkaW8iID0gInllcyI7IHRoZW4KICAgICBBQ19TVUJTVChbTElCRkZUV19MSUJT
XSkKIGZpCiAKK2lmIHRlc3QgIiR3aXRoX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nIiA9ICJjbHV0
dGVyIjsgdGhlbgorICAgUEtHX0NIRUNLX01PRFVMRVMoQ0xVVFRFUiwgY2x1dHRlci0xLjAgPj0g
JENMVVRURVJfUkVRVUlSRURfVkVSU0lPTikKKyAgIFBLR19DSEVDS19NT0RVTEVTKFtDTFVUVEVS
X0dUS10sCisgICAgICAgICAgICAgICAgICAgICBbY2x1dHRlci1ndGstMS4wID49ICRDTFVUVEVS
X0dUS19SRVFVSVJFRF9WRVJTSU9OXSkKKworICAgQUNfU1VCU1QoQ0xVVFRFUl9DRkxBR1MpCisg
ICBBQ19TVUJTVChDTFVUVEVSX0xJQlMpCisgICBBQ19TVUJTVChDTFVUVEVSX0dUS19DRkxBR1Mp
CisgICBBQ19TVUJTVChDTFVUVEVSX0dUS19MSUJTKQorZmkKKworIyBjaGVjayBpZiBhdHNwaTIg
aXMgYXZhaWxhYmxlIChvbmx5IG5lZWRlZCBmb3IgV2Via2l0MiB1bml0IHRlc3RzKQoraWYgdGVz
dCAiJGVuYWJsZV93ZWJraXQyIiA9ICJ5ZXMiOyB0aGVuCisgICBQS0dfQ0hFQ0tfTU9EVUxFUyhb
QVRTUEkyXSwKKyAgICAgICAgICAgICAgICAgICAgIFthdHNwaS0yID49ICRBVFNQSTJfUkVRVUlS
RURfVkVSU0lPTl0sCisgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9hdHNwaTI9eWVzXSwgW2hh
dmVfYXRzcGkyPW5vXSkKKworICAgQUNfU1VCU1QoW0FUU1BJMl9DRkxBR1NdKQorICAgQUNfU1VC
U1QoW0FUU1BJMl9MSUJTXSkKK2ZpCisKICMgY2hlY2sgZm9yIGNvZGUgY292ZXJhZ2Ugc3VwcG9y
dAogaWYgdGVzdCAiJGVuYWJsZV9jb3ZlcmFnZSIgPSAieWVzIjsgdGhlbgogICAgQ09WRVJBR0Vf
Q0ZMQUdTPSItTUQiCkBAIC0xMTIxLDYgKzExNDMsOSBAQCBBTV9DT05ESVRJT05BTChbVVNFX1BB
TkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28iXSkKICMgR1N0cmVhbWVy
IGZlYXR1cmUgY29uZGl0aW9uYWwKIEFNX0NPTkRJVElPTkFMKFtVU0VfR1NUUkVBTUVSXSwgW3Rl
c3QgIiRoYXZlX2dzdHJlYW1lciIgPSAieWVzIl0pCiAKKyMgQVRTUEkyIGNvbmRpdGlvbmFsCitB
TV9DT05ESVRJT05BTChbSEFWRV9BVFNQSTJdLCBbdGVzdCAiJGhhdmVfYXRzcGkyIiA9ICJ5ZXMi
XSkKKwogIyBBY2NlbGVyYXRlZCBjb21wb3NpdGluZyBjb25kaXRpb25hbAogQU1fQ09ORElUSU9O
QUwoW1VTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElOR10sIFt0ZXN0ICIkd2l0aF9hY2NlbGVyYXRl
ZF9jb21wb3NpdGluZyIgPSAiY2Fpcm8iIHx8IHRlc3QgIiR3aXRoX2FjY2VsZXJhdGVkX2NvbXBv
c2l0aW5nIiA9ICJvcGVuZ2wiIHx8IHRlc3QgIiR3aXRoX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5n
IiA9ICJjbHV0dGVyIl0pCiBBTV9DT05ESVRJT05BTChbVVNFX1RFWFRVUkVfTUFQUEVSX0NBSVJP
XSwgW3Rlc3QgIiR3aXRoX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nIiA9ICJjYWlybyJdKQotLSAK
MS43LjcuNQoK
</data>
<flag name="review"
          id="124122"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>