<?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>27899</bug_id>
          
          <creation_ts>2009-07-31 16:10:45 -0700</creation_ts>
          <short_desc>[Gtk] Expose a database API</short_desc>
          <delta_ts>2009-09-06 07:32:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>15692</blocked>
    
    <blocked>27144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jan Alonzo">jmalonzo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>136289</commentid>
    <comment_count>0</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-07-31 16:10:45 -0700</bug_when>
    <thetext>Some use cases include quota tracking and setting of database storage paths for embedders to modify if they want to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138546</commentid>
    <comment_count>1</comment_count>
      <attachid>34428</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-08-09 13:30:36 -0700</bug_when>
    <thetext>Created attachment 34428
work in progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138919</commentid>
    <comment_count>2</comment_count>
      <attachid>34544</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-11 01:09:14 -0700</bug_when>
    <thetext>Created attachment 34544
First pass at a database API

I&apos;m attaching my first pass to solicit comments from more experienced people. I&apos;d love to get some feedback before I start preparing this patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139414</commentid>
    <comment_count>3</comment_count>
      <attachid>34675</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-12 10:43:35 -0700</bug_when>
    <thetext>Created attachment 34675
Updated patch

Added an updated patch that:

1. Fixes some bugs
2. Exposes webkit_security_origin_get_database(...)
3. Integrates the database API into DumpRenderLayout, which causes all storage tests to pass now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140138</commentid>
    <comment_count>4</comment_count>
      <attachid>34675</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-08-13 20:22:43 -0700</bug_when>
    <thetext>Comment on attachment 34675
Updated patch


&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;webkitwebdatabase.h&quot;
&gt; +#include &quot;webkitprivate.h&quot;

There should be a space between webdatabase and private.

&gt; +
&gt; +#include &lt;glib/gi18n-lib.h&gt;

Third-party includes go after the WebCore ones.

&gt; +#include &quot;CString.h&quot;
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;DatabaseTracker.h&quot;
&gt; +
&gt; +/**
&gt; + * SECTION:webkitwebdatabase
&gt; + * @short_description: A security boundary for web sites

What does security boundary mean? Not sure if it&apos;s describing database or securityOrigin.

&gt; + *
&gt; + * Database quotas and usages are also defined per security origin. The
&gt; + * cumulative disk usage of an origin&apos;s databases may be retrieved with
&gt; + * #webkit_security_origin_get_database_usage. An origin&apos;s quota can be
&gt; + * adjusted with #webkit_security_origin_set_database_quota.

I think it&apos;s best if we move the database stuff out of SecurityOrigin and move them to WebDatabase. Is that more realistic or developers really should expect that SecurityOrigin should know about database quotas and such?

&gt; +
&gt; +static void webkit_security_origin_finalize(GObject* object)
&gt; +{
&gt; +    WebKitSecurityOrigin* securityOrigin = WEBKIT_SECURITY_ORIGIN(object);
&gt; +    WebKitSecurityOriginPrivate* priv = securityOrigin-&gt;priv;
&gt; +
&gt; +    if (!priv-&gt;disposed) {
&gt; +        priv-&gt;coreOrigin-&gt;deref();
&gt; +        g_hash_table_destroy(priv-&gt;webDatabases);
&gt; +        priv-&gt;disposed = true;
&gt; +    }

I think this should go to webkit_security_origin_dispose. 

Also I&apos;m not sure if we should copy WebHistoryItem here. WebHistoryItem was meant to be shared between the WebBackForwardList and a future WebHistory. Does WebDatabase/WebSecurityOrigin have the same semantics? 

&gt; +GHashTable* webkit_security_origins()
&gt; +{
&gt; +    static GHashTable* securityOrigins = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);
&gt; +    return securityOrigins;
&gt; +}
&gt; +
&gt; +void webkit_security_origin_add(WebKitSecurityOrigin* origin, WebCore::SecurityOrigin* coreOrigin)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_SECURITY_ORIGIN(origin));
&gt; +
&gt; +    GHashTable* table = webkit_security_origins();
&gt; +    g_hash_table_insert(table, coreOrigin, origin);
&gt; +}
&gt; +
&gt; +     g_object_class_install_property(gobject_class, PROP_PORT,
&gt; +                                     g_param_spec_uint(&quot;port&quot;,
&gt; +                                                       _(&quot;Port&quot;),
&gt; +                                                       _(&quot;The port of the security origin&quot;),
&gt; +                                                       0, G_MAXUINT, 0,
&gt; +                                                       WEBKIT_PARAM_READABLE));

port can just be a gushort. So this should be G_MAXUSHORT.

&gt; +                                      g_param_spec_uint64(
&gt; +                                          &quot;database-quota&quot;,

No need for the linebreak.

&gt; +G_CONST_RETURN gchar* webkit_security_origin_get_protocol(WebKitSecurityOrigin* security_origin)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin), NULL);
&gt; +
&gt; +    WebKitSecurityOriginPrivate* priv = security_origin-&gt;priv;
&gt; +    WebCore::String protocol =  priv-&gt;coreOrigin-&gt;protocol();
&gt; +
&gt; +    if (!protocol.isEmpty()) {
&gt; +        g_free(priv-&gt;protocol);
&gt; +        priv-&gt;protocol = g_strdup(protocol.utf8().data());
&gt; +        return priv-&gt;protocol;
&gt; +    } else {
&gt; +        return &quot;&quot;;
&gt; +    }

We usually do early exits so this would become: if protocol.isEmpty return &quot;&quot;.

&gt; +    if (!host.isEmpty()) {
&gt; +        g_free(priv-&gt;host);
&gt; +        priv-&gt;host = g_strdup(host.utf8().data());
&gt; +        return priv-&gt;host;
&gt; +    } else {
&gt; +        return &quot;&quot;;
&gt; +    }

Same here.

&gt; +WebKitWebDatabase* webkit_security_origin_get_database(WebKitSecurityOrigin* security_origin, const gchar* database_name)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin), NULL);
&gt; +
&gt; +    WebKitSecurityOriginPrivate* priv = security_origin-&gt;priv;
&gt; +    GHashTable* databaseHash = priv-&gt;webDatabases;
&gt; +    WebKitWebDatabase* database = (WebKitWebDatabase*) g_hash_table_lookup(databaseHash, database_name);
&gt; +
&gt; +    if (!database) {
&gt; +        database =  WEBKIT_WEB_DATABASE(g_object_new(WEBKIT_TYPE_WEB_DATABASE,
&gt; +                                       &quot;origin&quot;, security_origin,
&gt; +                                       &quot;name&quot;, database_name,
&gt; +                                        NULL));
&gt; +        g_hash_table_insert(databaseHash, g_strdup(database_name), database);
&gt; +    }

This getter should return NULL if no WebDatabase exist for the security origin.

&gt; +GList* webkit_security_origin_get_databases(WebKitSecurityOrigin* security_origin)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin), NULL);
&gt; +    GList* databases = NULL;
&gt; +
&gt; +#if ENABLE(DATABASE)
&gt; +    WebCore::SecurityOrigin* coreOrigin = core(security_origin);
&gt; +    Vector&lt;WebCore::String&gt; databaseNames;
&gt; +
&gt; +    if (!WebCore::DatabaseTracker::tracker().databaseNamesForOrigin(coreOrigin, databaseNames))
&gt; +        return databases;

Please be more explicit by just returning NULL.

&gt; +    for (unsigned i = 0; i &lt; databaseNames.size(); ++i) {
&gt; +        WebKitWebDatabase* database = webkit_security_origin_get_database(security_origin, databaseNames[i].utf8().data());
&gt; +        databases = g_list_append(databases, database);

I&apos;m not sure if we should be creating databases if they don&apos;t exist in security origin. Is it ok to create databases if they&apos;re not in origin?

&gt; +
&gt; +#ifndef __WEBKIT_SECURITY_ORIGIN_H__
&gt; +#define __WEBKIT_SECURITY_ORIGIN_H__
&gt; +

We don&apos;t usually add double underscores to the name.

&gt; +WEBKIT_API guint64
&gt; +webkit_security_origin_get_database_usage (WebKitSecurityOrigin* security_origin);
&gt; +
&gt; +WEBKIT_API guint64
&gt; +webkit_security_origin_get_database_quota (WebKitSecurityOrigin* security_origin);
&gt; +
&gt; +WEBKIT_API void 
&gt; +webkit_security_origin_set_database_quota (WebKitSecurityOrigin* security_origin, guint64 quota);
&gt; +
&gt; +WEBKIT_API WebKitWebDatabase*
&gt; +webkit_security_origin_get_database       (WebKitSecurityOrigin* security_origin, const char* database_name);
&gt; +
&gt; +WEBKIT_API GList*
&gt; +webkit_security_origin_get_databases      (WebKitSecurityOrigin* security_origin);

Not sure if these database methods should be here. Would it make sense to move the webkitwebdatabase?


&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;webkitwebdatabase.h&quot;
&gt; +#include &quot;webkitprivate.h&quot;

Please separate this two.

&gt; +#include &lt;glib/gi18n-lib.h&gt;

Move this after the WebCore includes.

&gt; + * SECTION:webkitwebdatabase
&gt; + * @short_description: A WebKit web application database
&gt; + *
&gt; + * #WebKitWebDatabase is a representation of a Web Database database. The
&gt; + * upcoming Web Database standard introduces support for SQL databases that web
&gt; + * sites can create and access on a local computer through JavaScript.

Is it a standard or a proposed standard? Also it might be helpful to provide a link so devs can read more if they want to.

&gt; + * To get access to all databases defined by a security origin, use
&gt; + * #webkit_security_origin_get_databases. Each database has an internal
&gt; + * name, as well as a user-friendly display name.

webkit_security_origin_get_databases -&gt; webkit_database_from_security_origin? Also, we currently don&apos;t provide an API for the internal name so I&apos;m not sure if it&apos;s worth mentioning here.

&gt; + * 
&gt; + * WebKit uses SQLite to create and access the local SQL databases. The location
&gt; + * of a #WebKitWebDatabase can be accessed wth #webkit_web_database_get_path.
&gt; + * You can configure the location of all databases with
&gt; + * #webkit_set_database_directory_path.
&gt; + * 
&gt; + * For each database the web site can define an esimated size which can be

esimated -&gt; estimated.

&gt; + * accessed with #webkit_web_database_get_expected_size. The current size of the
&gt; + * database in bytes is returned by #webkit_web_database_get_size.
&gt; + * 
&gt; + * For more information refer to the Web Database specification proposal at
&gt; + *  http://dev.w3.org/html5/webdatabase
&gt; + */
&gt; +
&gt; +using namespace WebKit;
&gt; +
&gt; +enum {
&gt; +    PROP_0,
&gt; +
&gt; +    PROP_ORIGIN,
&gt; +    PROP_NAME,
&gt; +    PROP_DISPLAY_NAME,
&gt; +    PROP_EXPECTED_SIZE,
&gt; +    PROP_SIZE,
&gt; +    PROP_PATH
&gt; +};
&gt; +
&gt; +G_DEFINE_TYPE(WebKitWebDatabase, webkit_web_database, G_TYPE_OBJECT)
&gt; +
&gt; +struct _WebKitWebDatabasePrivate {
&gt; +    WebKitSecurityOrigin* origin;
&gt; +    gchar* name;
&gt; +    gchar* display_name;
&gt; +    gchar* path;
&gt; +};
&gt; +
&gt; +static gchar* webkit_database_directory_path = NULL;
&gt; +static guint64 webkit_default_database_quota = 5 * 1024 * 1024;
&gt; +
&gt; +#define WEBKIT_WEB_DATABASE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_DATABASE, WebKitWebDatabasePrivate))
&gt; +
&gt; +static void webkit_web_database_set_origin(WebKitWebDatabase* web_database, WebKitSecurityOrigin* security_origin);
&gt; +
&gt; +static void webkit_web_database_set_name(WebKitWebDatabase* web_database, const gchar* name);
&gt; +
&gt; +static void webkit_web_database_finalize(GObject* object)
&gt; +{
&gt; +    WebKitWebDatabase* webDatabase = WEBKIT_WEB_DATABASE(object);
&gt; +    WebKitWebDatabasePrivate* priv = webDatabase-&gt;priv;
&gt; +
&gt; +    if (priv-&gt;origin)
&gt; +        g_object_unref(priv-&gt;origin);
&gt; +
&gt; +    G_OBJECT_CLASS(webkit_web_database_parent_class)-&gt;finalize(object);
&gt; +}
&gt; +
&gt; +static void webkit_web_database_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
&gt; +{
&gt; +    WebKitWebDatabase* web_database = WEBKIT_WEB_DATABASE(object);
&gt; +
&gt; +    switch (prop_id) {
&gt; +    case PROP_ORIGIN:
&gt; +        webkit_web_database_set_origin(web_database, WEBKIT_SECURITY_ORIGIN(g_value_get_object(value)));
&gt; +        break;
&gt; +    case PROP_NAME:
&gt; +        webkit_web_database_set_name(web_database, g_value_get_string(value));
&gt; +        break;
&gt; +    default:
&gt; +        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
&gt; +        break;
&gt; +    }
&gt; +}
&gt; +
&gt; +static void webkit_web_database_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
&gt; +{
&gt; +    WebKitWebDatabase* webDatabase = WEBKIT_WEB_DATABASE(object);
&gt; +    WebKitWebDatabasePrivate* priv = webDatabase-&gt;priv;
&gt; +
&gt; +    switch (prop_id) {
&gt; +    case PROP_ORIGIN:
&gt; +        g_value_set_object(value, priv-&gt;origin);
&gt; +        break;
&gt; +    case PROP_NAME:
&gt; +        g_value_set_string(value, webkit_web_database_get_name(webDatabase));
&gt; +        break;
&gt; +    case PROP_DISPLAY_NAME:
&gt; +        g_value_set_string(value, webkit_web_database_get_display_name(webDatabase));
&gt; +        break;
&gt; +    case PROP_EXPECTED_SIZE:
&gt; +        g_value_set_uint64(value, webkit_web_database_get_expected_size(webDatabase));
&gt; +        break;
&gt; +    case PROP_SIZE:
&gt; +        g_value_set_uint64(value, webkit_web_database_get_size(webDatabase));
&gt; +        break;
&gt; +    case PROP_PATH:
&gt; +        g_value_set_string(value, webkit_web_database_get_path(webDatabase));
&gt; +        break;
&gt; +    default:
&gt; +        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
&gt; +        break;
&gt; +    }
&gt; +}
&gt; +
&gt; +static void webkit_web_database_class_init(WebKitWebDatabaseClass* klass)
&gt; +{
&gt; +    GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
&gt; +    gobject_class-&gt;finalize = webkit_web_database_finalize;
&gt; +    gobject_class-&gt;set_property = webkit_web_database_set_property;
&gt; +    gobject_class-&gt;get_property = webkit_web_database_get_property;
&gt; +
&gt; +     /**
&gt; +      * WebKitWebDatabase:origin:
&gt; +      *
&gt; +      * The security origin of the database.
&gt; +      *
&gt; +      * Since: 1.1.13
&gt; +      */
&gt; +     g_object_class_install_property(gobject_class, PROP_ORIGIN,
&gt; +                                     g_param_spec_object(&quot;origin&quot;,
&gt; +                                                         _(&quot;Origin&quot;),
&gt; +                                                         _(&quot;The security origin of the database&quot;),
&gt; +                                                         WEBKIT_TYPE_SECURITY_ORIGIN,
&gt; +                                                         (GParamFlags) (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
&gt; +
&gt; +     /**
&gt; +      * WebKitWebDatabase:name:
&gt; +      *
&gt; +      * The name of the Web Database database.
&gt; +      *
&gt; +      * Since: 1.1.13
&gt; +      */
&gt; +     g_object_class_install_property(gobject_class, PROP_NAME,
&gt; +                                     g_param_spec_string(&quot;name&quot;,
&gt; +                                                         _(&quot;Name&quot;),
&gt; +                                                         _(&quot;The name of the Web Database database&quot;),
&gt; +                                                         NULL,
&gt; +                                                         (GParamFlags) (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
&gt; +
&gt; +     /**
&gt; +      * WebKitWebDatabase:display-name:
&gt; +      *
&gt; +      * The display name of the Web Database database.
&gt; +      *
&gt; +      * Since: 1.1.13
&gt; +      */
&gt; +     g_object_class_install_property(gobject_class, PROP_DISPLAY_NAME,
&gt; +                                     g_param_spec_string(&quot;display-name&quot;,
&gt; +                                                         _(&quot;Display Name&quot;),
&gt; +                                                         _(&quot;The display name of the Web Stroage database&quot;),
&gt; +                                                         NULL,
&gt; +                                                         WEBKIT_PARAM_READABLE));
&gt; +
&gt; +     /**
&gt; +     * WebKitWebDatabase:expected-size:
&gt; +     *
&gt; +     * The expected size of the database in bytes as defined by the web author.
&gt; +     *
&gt; +     * Since: 1.1.13
&gt; +     */
&gt; +     g_object_class_install_property(gobject_class, PROP_EXPECTED_SIZE,
&gt; +                                     g_param_spec_uint64(
&gt; +                                         &quot;expected-size&quot;,
&gt; +                                         _(&quot;Expected Size&quot;),
&gt; +                                         _(&quot;The expected size of the Web Database database&quot;),
&gt; +                                         0, G_MAXUINT64, 0,
&gt; +                                         WEBKIT_PARAM_READABLE));
&gt; +     /**
&gt; +     * WebKitWebDatabase:size:
&gt; +     *
&gt; +     * The current size of the database in bytes.
&gt; +     *
&gt; +     * Since: 1.1.13
&gt; +     */
&gt; +     g_object_class_install_property(gobject_class, PROP_SIZE,
&gt; +                                     g_param_spec_uint64(
&gt; +                                         &quot;size&quot;,
&gt; +                                         _(&quot;Size&quot;),
&gt; +                                         _(&quot;The current size of the Web Database database&quot;),
&gt; +                                         0, G_MAXUINT64, 0,
&gt; +                                         WEBKIT_PARAM_READABLE));
&gt; +     /**
&gt; +      * WebKitWebDatabase:path:
&gt; +      *
&gt; +      * The filesystem path of the Web Database database.
&gt; +      *
&gt; +      * Since: 1.1.13
&gt; +      */
&gt; +     g_object_class_install_property(gobject_class, PROP_PATH,
&gt; +                                     g_param_spec_string(&quot;path&quot;,
&gt; +                                                         _(&quot;Path&quot;),
&gt; +                                                         _(&quot;The filesystem path of the Web Stroage database&quot;),
&gt; +                                                         NULL,
&gt; +                                                         WEBKIT_PARAM_READABLE));
&gt; +
&gt; +    g_type_class_add_private(klass, sizeof(WebKitWebDatabasePrivate));
&gt; +}
&gt; +
&gt; +static void webkit_web_database_init(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    web_database-&gt;priv = WEBKIT_WEB_DATABASE_GET_PRIVATE(web_database);
&gt; +}
&gt; +
&gt; +// Internal use only
&gt; +static void webkit_web_database_set_origin(WebKitWebDatabase *web_database, WebKitSecurityOrigin *security_origin)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_WEB_DATABASE(web_database));
&gt; +    g_return_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin));
&gt; +
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +
&gt; +    if (priv-&gt;origin)
&gt; +        g_object_unref(priv-&gt;origin);
&gt; +
&gt; +    g_object_ref(security_origin);
&gt; +    priv-&gt;origin = security_origin;
&gt; +}
&gt; +
&gt; +static void webkit_web_database_set_name(WebKitWebDatabase* web_database, const gchar* name)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_WEB_DATABASE(web_database));
&gt; +
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +    g_free(priv-&gt;name);
&gt; +    priv-&gt;name = g_strdup(name);
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_web_database_get_origin:
&gt; + * @web_database: a #WebKitWebDatabase
&gt; + *
&gt; + * Returns the security origin of the #WebKitWebDatabase.
&gt; + *
&gt; + * Returns: the security origin of the database
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +WebKitSecurityOrigin* webkit_web_database_get_origin(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_DATABASE(web_database), NULL);
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +
&gt; +    return priv-&gt;origin;
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_web_database_get_name:
&gt; + * @web_database: a #WebKitWebDatabase
&gt; + *
&gt; + * Returns the canonical name of the #WebKitWebDatabase.
&gt; + *
&gt; + * Returns: the name of the database
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +G_CONST_RETURN gchar* webkit_web_database_get_name(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_DATABASE(web_database), NULL);
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +
&gt; +    return priv-&gt;name;
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_web_database_get_display_name:
&gt; + * @web_database: a #WebKitWebDatabase
&gt; + *
&gt; + * Returns the name of the #WebKitWebDatabase as seen by the user.
&gt; + *
&gt; + * Returns: the name of the database as seen by the user.
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +G_CONST_RETURN gchar* webkit_web_database_get_display_name(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_DATABASE(web_database), NULL);
&gt; +
&gt; +#if ENABLE(DATABASE)
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +    WebCore::DatabaseDetails details = WebCore::DatabaseTracker::tracker().detailsForNameAndOrigin(priv-&gt;name, core(priv-&gt;origin));
&gt; +    WebCore::String displayName =  details.displayName();
&gt; +
&gt; +    if (!displayName.isEmpty()) {
&gt; +        g_free(priv-&gt;display_name);
&gt; +        priv-&gt;display_name = g_strdup(displayName.utf8().data());
&gt; +        return priv-&gt;display_name;
&gt; +    } else {
&gt; +        return &quot;&quot;;
&gt; +    }
&gt; +#else
&gt; +    return &quot;&quot;;
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_web_database_get_expected_size:
&gt; + * @web_database: a #WebKitWebDatabase
&gt; + *
&gt; + * Returns the expected size of the #WebKitWebDatabase in bytes as defined by the
&gt; + * web author. The Web Database standard allows web authors to specify an expected
&gt; + * size of the database to optimize the user experience.
&gt; + *
&gt; + * Returns: the expected size of the database in bytes
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +guint64 webkit_web_database_get_expected_size(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_DATABASE(web_database), 0);
&gt; +
&gt; +#if ENABLE(DATABASE)
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +    WebCore::DatabaseDetails details = WebCore::DatabaseTracker::tracker().detailsForNameAndOrigin(priv-&gt;name, core(priv-&gt;origin));
&gt; +    return details.expectedUsage();
&gt; +#else
&gt; +    return 0;
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_web_database_get_size:
&gt; + * @web_database: a #WebKitWebDatabase
&gt; + *
&gt; + * Returns the actual size of the #WebKitWebDatabase space on disk in bytes.
&gt; + *
&gt; + * Returns: the actual size of the database in bytes
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +guint64 webkit_web_database_get_size(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_DATABASE(web_database), 0);
&gt; +
&gt; +#if ENABLE(DATABASE)
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +    WebCore::DatabaseDetails details = WebCore::DatabaseTracker::tracker().detailsForNameAndOrigin(priv-&gt;name, core(priv-&gt;origin));
&gt; +    return details.currentUsage();
&gt; +#else
&gt; +    return 0;
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_web_database_get_path:
&gt; + * @web_database: a #WebKitWebDatabase
&gt; + *
&gt; + * Returns the path to the #WebKitWebDatabase file on disk.
&gt; + *
&gt; + * Returns: the filesystem path of the database
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +G_CONST_RETURN gchar* webkit_web_database_get_path(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_DATABASE(web_database), NULL);
&gt; +
&gt; +#if ENABLE(DATABASE)
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +    WebCore::String coreName = WebCore::String::fromUTF8(priv-&gt;name);
&gt; +    WebCore::String corePath = WebCore::DatabaseTracker::tracker().fullPathForDatabase(core(priv-&gt;origin), coreName);
&gt; +
&gt; +    if (!corePath.isEmpty()) {
&gt; +        g_free(priv-&gt;path);
&gt; +        priv-&gt;path = g_strdup(corePath.utf8().data());
&gt; +        return priv-&gt;path;
&gt; +    } else {
&gt; +        return &quot;&quot;;
&gt; +    }
&gt; +#else
&gt; +    return &quot;&quot;;
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_web_database_remove:
&gt; + * @web_database: a #WebKitWebDatabase
&gt; + *
&gt; + * Removes the #WebKitWebDatabase from its security origin and destroys all data
&gt; + * stored in the database.
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +void webkit_web_database_remove(WebKitWebDatabase* web_database)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_WEB_DATABASE(web_database));
&gt; +
&gt; +#if ENABLE(DATABASE)
&gt; +    WebKitWebDatabasePrivate* priv = web_database-&gt;priv;
&gt; +    WebCore::DatabaseTracker::tracker().deleteDatabase(core(priv-&gt;origin), priv-&gt;name);
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_remove_all_web_databases:
&gt; + *
&gt; + * Removes all web databases from the current database directory path.
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +void webkit_remove_all_web_databases()
&gt; +{
&gt; +#if ENABLE(DATABASE)
&gt; +    WebCore::DatabaseTracker::tracker().deleteAllDatabases();
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_get_database_directory_path:
&gt; + *
&gt; + * Returns the current path to the directory WebKit will write Web 
&gt; + * Database databases. By default this path will be in the user data
&gt; + * directory.
&gt; + *
&gt; + * Returns: the current database directory path
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +G_CONST_RETURN gchar* webkit_get_database_directory_path()
&gt; +{
&gt; +#if ENABLE(DATABASE)
&gt; +    WebCore::String path = WebCore::DatabaseTracker::tracker().databaseDirectoryPath();
&gt; +    if (!path.isEmpty()) {
&gt; +        g_free(webkit_database_directory_path);
&gt; +        webkit_database_directory_path = g_strdup(path.utf8().data());
&gt; +        return webkit_database_directory_path;
&gt; +    } else {
&gt; +        return &quot;&quot;;
&gt; +    }
&gt; +#else
&gt; +    return &quot;&quot;;
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_set_database_directory_path:
&gt; + * @path: the new database directory path
&gt; + *
&gt; + * Sets the current path to the directory WebKit will write Web 
&gt; + * Database databases. 
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +void webkit_set_database_directory_path(const gchar* path)
&gt; +{
&gt; +#if ENABLE(DATABASE)
&gt; +    WebCore::String corePath = WebCore::String::fromUTF8(path);
&gt; +    WebCore::DatabaseTracker::tracker().setDatabaseDirectoryPath(corePath);
&gt; +
&gt; +    g_free(webkit_database_directory_path);
&gt; +    webkit_database_directory_path = g_strdup(corePath.utf8().data());
&gt; +#endif
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_get_default_database_quota:
&gt; + *
&gt; + * Returns the default quota for Web Database databases. By default
&gt; + * this value is 5MB.
&gt; + 
&gt; + * Returns: the current default database quota in bytes
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +guint64 webkit_get_default_database_quota()
&gt; +{
&gt; +    return webkit_default_database_quota;
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_set_default_database_quota:
&gt; + * @default_quota: the new defaulta database quota

default is mispelled here.

&gt; + *
&gt; + * Sets the current path to the directory WebKit will write Web 
&gt; + * Database databases. 
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +void webkit_set_default_database_quota(guint64 default_quota)
&gt; +{
&gt; +    webkit_default_database_quota = default_quota;
&gt; +}



&gt; +
&gt; +WEBKIT_API GType
&gt; +webkit_web_database_get_type (void);
&gt; +
&gt; +WEBKIT_API WebKitSecurityOrigin*
&gt; +webkit_web_database_get_origin         (WebKitWebDatabase* web_database);

There should be a space between the type and the asterisk.

&gt; +
&gt; +WEBKIT_API void
&gt; +webkit_web_database_remove             (WebKitWebDatabase* web_database);
&gt; +

I think we need to distinguish between web_database and just database. Or maybe just rename database to databases (or something like that) to signify multiple databases?

&gt; +WebKitSecurityOrigin* webkit_web_frame_get_origin(WebKitWebFrame* frame)
&gt; +{
&gt; +    WebKitWebFramePrivate* priv = frame-&gt;priv;
&gt; +    if (!priv-&gt;coreFrame || !priv-&gt;coreFrame-&gt;document())
&gt; +        return NULL;
&gt; +
&gt; +    WebKitSecurityOrigin* origin = kit(priv-&gt;coreFrame-&gt;document()-&gt;securityOrigin());
&gt; +    return origin;

No need for the intermediate local variable here.

&gt; +    /**
&gt; +     * WebKitWebView::database-quota-exceeded
&gt; +     * @web_view: the object which received the signal
&gt; +     * @frame: the relevant frame
&gt; +     * @database: the #WebKitWebDatabase which exceeded the quota of its #WebKitSecurityOrigin
&gt; +     * @param: a #GHashTable with additional attributes (strings)
&gt; +     *

What&apos;s the @param for? Also, I think it would be good nice if the signal handler can return a boolean stating that either it actioned the exceeded-quota event or not. This way, if the signal wasn&apos;t handled we can fallback to the default of setting a quota. If they handled the signal then maybe we don&apos;t need to reset the quota?

&gt; +     * The #WebKitWebView::database-exceeded-quota signal will be emitted when
&gt; +     * a Web Database exceeds the quota of its security origin. This signal
&gt; +     * may be used to increase the size of the quota before the originating
&gt; +     * operation fails.
&gt; +     *
&gt; +     * Since: 1.1.13
&gt; +     */
&gt; +    webkit_web_view_signals[PLUGIN_WIDGET] = g_signal_new(&quot;database-quota-exceeded&quot;,

Why PLUGIN_WIDGET?

Other parts look fine to me. Need some stakeholders to look into this as well.

Thanks for finishing the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140488</commentid>
    <comment_count>5</comment_count>
      <attachid>34906</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-15 15:32:56 -0700</bug_when>
    <thetext>Created attachment 34906
Update patch rev2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140489</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-15 15:40:28 -0700</bug_when>
    <thetext>Thanks for the great feedback, Jan!

&gt; I think it&apos;s best if we move the database stuff out of SecurityOrigin and move
&gt; them to WebDatabase. Is that more realistic or developers really should expect
&gt; that SecurityOrigin should know about database quotas and such?

In this case, I followed the design of the Mac and QT ports which expose this functionality as methods on a security origin. I&apos;m certainly not opposed to moving it elsewhere. :)

&gt; Also I&apos;m not sure if we should copy WebHistoryItem here. WebHistoryItem was
&gt; meant to be shared between the WebBackForwardList and a future WebHistory. Does
&gt; WebDatabase/WebSecurityOrigin have the same semantics? 

Really, the issue in this case is that I haven&apos;t figured out a good way to manage the lifetime of WebKitSecurityOrigin and WebKitWebDatabase. I&apos;m using the hash in this case to prevent them from being allocated needlessly if they are required twice. I haven&apos;t figured out a way yet to keep them from leaking. This is probably the main reason I haven&apos;t marked this patch with r?.

&gt; webkit_security_origin_get_databases -&gt; webkit_database_from_security_origin?
&gt; Also, we currently don&apos;t provide an API for the internal name so I&apos;m not sure
&gt; if it&apos;s worth mentioning here.

The other ports don&apos;t expose a method like this, so I&apos;ve made it private and renamed it to something like what you suggested. This should also prevent the problem of trying to create a WebKitWebDatabase for a non-existent database. I didn&apos;t see a great way check manually in WebCore, but perhaps I missed something.

&gt; I think we need to distinguish between web_database and just database. Or maybe
&gt; just rename database to databases (or something like that) to signify multiple
&gt; databases?

I&apos;m not sure I understand this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143557</commentid>
    <comment_count>7</comment_count>
      <attachid>38794</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-30 12:40:49 -0700</bug_when>
    <thetext>Created attachment 38794
Fixed memory issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143558</commentid>
    <comment_count>8</comment_count>
      <attachid>38795</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-30 12:49:49 -0700</bug_when>
    <thetext>Created attachment 38795
This time with ChangeLog entries</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143567</commentid>
    <comment_count>9</comment_count>
      <attachid>38795</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-08-30 21:08:18 -0700</bug_when>
    <thetext>Comment on attachment 38795
This time with ChangeLog entries

&gt; +    WebKitSecurityOrigin* origin = webkit_web_frame_get_origin(webFrame);
&gt; +    WebKitWebDatabase* webDatabase = webkit_web_database_from_security_origin(origin, databaseName.utf8().data());
&gt; +    g_signal_emit_by_name(webView, &quot;database-quota-exceeded&quot;, webFrame, webDatabase);

I am not sure we need this signal, though it may be good for convenience, one could just watch a usage property to see if it&apos;s past the quota, I guess.

&gt; +        gchar* protocol;

Does the spec say protocol, or scheme?

&gt; +void webkit_security_origin_add(WebKitSecurityOrigin* origin, WebCore::SecurityOrigin* coreOrigin)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_SECURITY_ORIGIN(origin));
&gt; +
&gt; +    GHashTable* table = webkit_security_origins();
&gt; +    g_hash_table_insert(table, coreOrigin, origin);
&gt; +}

This should be static, though I don&apos;t see much point in this function existing. The g_return_if_fail check is only any good in APIs, and you could just do g_hash_table_inert(webkit_security_origins(), coreOrigin, origin); anywhere you need it.

&gt; +    if (protocol.isEmpty()) {
&gt; +        return &quot;&quot;;
&gt; +    } else {

No need for bracers

&gt; +        g_free(priv-&gt;protocol);
&gt; +        priv-&gt;protocol = g_strdup(protocol.utf8().data());
&gt; +        return priv-&gt;protocol;

I don&apos;t see much point in using g_free/g_strdup here. Since it&apos;s const, just use return protocol.utf8().data(), perhaps? Is there a problem you noticed with doing that?

&gt; +    WebCore::String host =  priv-&gt;coreOrigin-&gt;host();
&gt; +
&gt; +    if (host.isEmpty()) {
&gt; +        return &quot;&quot;;
&gt; +    } else {
&gt; +        g_free(priv-&gt;host);
&gt; +        priv-&gt;host = g_strdup(host.utf8().data());
&gt; +        return priv-&gt;host;

Also, we don&apos;t usually create variables for these kinds of uses. Just use the whole priv-&gt;coreOrigin-&gt;host().utf8().data() thing where you are using the &apos;host&apos; variable.

&gt; +WebKitSecurityOrigin* WebKit::kit(WebCore::SecurityOrigin* coreOrigin)
&gt; +{
&gt; +    g_return_val_if_fail(coreOrigin, NULL);

Better use an ASSERT here.

&gt; +WebCore::SecurityOrigin* WebKit::core(WebKitSecurityOrigin* security_origin)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin), NULL);

Same here.

&gt; +WebKitWebDatabase* webkit_web_database_from_security_origin(WebKitSecurityOrigin* security_origin, const gchar* database_name)
&gt; +{

I think a better API would be webkit_security_origin_get_web_database.

&gt; + * To get access to all databases defined by a security origin, use
&gt; + * #webkit_security_origin_get_databases. Each database has a canonical
&gt; + * name, as well as a user-friendly display name.

That should probably be webkit_security_origin_get_all_web_databases.

&gt; + * WebKit uses SQLite to create and access the local SQL databases. The location
&gt; + * of a #WebKitWebDatabase can be accessed wth #webkit_web_database_get_path.
&gt; + * You can configure the location of all databases with
&gt; + * #webkit_set_database_directory_path.

That&apos;s pretty inconsistent. I do think these two should be webkit_get/set_web_database_path, since they are not acting on a specific web_database, or are they?

&gt; +     /**
&gt; +      * WebKitWebDatabase:path:
&gt; +      *
&gt; +      * The filesystem path of the Web Database database.

The path of the specific file? I am not sure what this property is supposed to represent. It looks like we would want a filename here, that would be joined with the global databases directory obtained by a webkit_get_web_database_path call.

&gt; +     g_object_class_install_property(gobject_class, PROP_PATH,
&gt; +                                     g_param_spec_string(&quot;path&quot;,
&gt; +                                                         _(&quot;Path&quot;),
&gt; +                                                         _(&quot;The filesystem path of the Web Stroage database&quot;),

Typo.

&gt; +void webkit_remove_all_web_databases()
[...]
&gt; +G_CONST_RETURN gchar* webkit_get_database_directory_path()
[...]
&gt; +void webkit_set_database_directory_path(const gchar* path)
[...]
&gt; +guint64 webkit_get_default_database_quota()
[...]
&gt; +void webkit_set_default_database_quota(guint64 default_quota)

These are looking good, but I think we want &apos;web_database&apos; in all of them for consistency.

&gt; +WebKitSecurityOrigin* webkit_web_frame_get_origin(WebKitWebFrame* frame)

get_security_origin

All the DRT modifications look good, I only think you are missing setting a temporary directory as the place where webkit will store the databases? Running remove_all_web_databases() on my user&apos;s real database storage, when running the tests will make me unhappy =). A few things to be addressed, so r- for now. Thanks for working on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143574</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-30 23:11:03 -0700</bug_when>
    <thetext>(In reply to comment #9)

Thanks for the feedback. I have a few comments below and should be able to submit another patch soon fixing the other issues.

&gt; (From update of attachment 38795 [details])
&gt; &gt; +    WebKitSecurityOrigin* origin = webkit_web_frame_get_origin(webFrame);
&gt; &gt; +    WebKitWebDatabase* webDatabase = webkit_web_database_from_security_origin(origin, databaseName.utf8().data());
&gt; &gt; +    g_signal_emit_by_name(webView, &quot;database-quota-exceeded&quot;, webFrame, webDatabase);
&gt; 
&gt; I am not sure we need this signal, though it may be good for convenience, one
&gt; could just watch a usage property to see if it&apos;s past the quota, I guess.

This signal is for parity with other ports&apos; delegates and it&apos;s needed by DRT. I&apos;m not sure if there is a good way to track database usage as a GObject property with the current WebCore API, but I could be wrong.

&gt; &gt; +        gchar* protocol;
&gt; Does the spec say protocol, or scheme?

The property accessor on the WebCore SecurityOrigin object calls it protocol, so I&apos;ll try to make sure that&apos;s used everywhere.

&gt; &gt; +        g_free(priv-&gt;protocol);
&gt; &gt; +        priv-&gt;protocol = g_strdup(protocol.utf8().data());
&gt; &gt; +        return priv-&gt;protocol;
&gt; 
&gt; I don&apos;t see much point in using g_free/g_strdup here. Since it&apos;s const, just
&gt; use return protocol.utf8().data(), perhaps? Is there a problem you noticed with
&gt; doing that?

Hmm. Seems that utf8() returned a fresh CString every time. If so, the destructor for that object will be called after that line. Perhaps the text data is stored in some buffer outside the CString as well, but can we really depend on that happening? I used this particular pattern, because it was used for webkit_web_frame_get_name.
 
&gt; &gt; + * WebKit uses SQLite to create and access the local SQL databases. The location
&gt; &gt; + * of a #WebKitWebDatabase can be accessed wth #webkit_web_database_get_path.
&gt; &gt; + * You can configure the location of all databases with
&gt; &gt; + * #webkit_set_database_directory_path.
&gt; 
&gt; That&apos;s pretty inconsistent. I do think these two should be
&gt; webkit_get/set_web_database_path, since they are not acting on a specific
&gt; web_database, or are they?

The first gets the full path to the SQLite file for the database and the latter gets the path to the parent directory for all SQLite web database files. Perhaps there is a way I can clarify this?

&gt; &gt; +     /**
&gt; &gt; +      * WebKitWebDatabase:path:
&gt; &gt; +      *
&gt; &gt; +      * The filesystem path of the Web Database database.
&gt; 
&gt; The path of the specific file? I am not sure what this property is supposed to
&gt; represent. It looks like we would want a filename here, that would be joined
&gt; with the global databases directory obtained by a webkit_get_web_database_path
&gt; call.

We may have to return the full path. I&apos;m not sure the API exposes the way to get from /path/to/all/databases to /path/to/all/databases/various/subdirectories/0000000000000002.db-journal. Subdirectories are used to separate database files by origin. I&apos;ll try to improve the doc here though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143577</commentid>
    <comment_count>11</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-08-30 23:19:53 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; I don&apos;t see much point in using g_free/g_strdup here. Since it&apos;s const, just
&gt; &gt; use return protocol.utf8().data(), perhaps? Is there a problem you noticed with
&gt; &gt; doing that?
&gt; 
&gt; Hmm. Seems that utf8() returned a fresh CString every time. If so, the
&gt; destructor for that object will be called after that line. Perhaps the text
&gt; data is stored in some buffer outside the CString as well, but can we really
&gt; depend on that happening? I used this particular pattern, because it was used
&gt; for webkit_web_frame_get_name.

This is correct, the data returned by utf8() needs to be dupped before it&apos;s returned to the user. If the return type is &apos;char*&apos; it can be returned as is, if it&apos;s &apos;const char*&apos; the trick we use, like here, is to store it in some private structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143638</commentid>
    <comment_count>12</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-08-31 05:36:15 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; 
&gt; Thanks for the feedback. I have a few comments below and should be able to
&gt; submit another patch soon fixing the other issues.

OK, sorry I didn&apos;t reply on IRC, I reviewed the patch and went to sleep, straight =)

&gt; This signal is for parity with other ports&apos; delegates and it&apos;s needed by DRT.
&gt; I&apos;m not sure if there is a good way to track database usage as a GObject
&gt; property with the current WebCore API, but I could be wrong.

Yeah, that makes sense.
 
&gt; &gt; &gt; + * WebKit uses SQLite to create and access the local SQL databases. The location
&gt; &gt; &gt; + * of a #WebKitWebDatabase can be accessed wth #webkit_web_database_get_path.
&gt; &gt; &gt; + * You can configure the location of all databases with
&gt; &gt; &gt; + * #webkit_set_database_directory_path.
&gt; &gt; 
&gt; &gt; That&apos;s pretty inconsistent. I do think these two should be
&gt; &gt; webkit_get/set_web_database_path, since they are not acting on a specific
&gt; &gt; web_database, or are they?
&gt; 
&gt; The first gets the full path to the SQLite file for the database and the latter
&gt; gets the path to the parent directory for all SQLite web database files.
&gt; Perhaps there is a way I can clarify this?

I think you can say &apos;specific file&apos; in the first one. 

&gt; &gt; The path of the specific file? I am not sure what this property is supposed to
&gt; &gt; represent. It looks like we would want a filename here, that would be joined
&gt; &gt; with the global databases directory obtained by a webkit_get_web_database_path
&gt; &gt; call.
&gt; 
&gt; We may have to return the full path. I&apos;m not sure the API exposes the way to
&gt; get from /path/to/all/databases to
&gt; /path/to/all/databases/various/subdirectories/0000000000000002.db-journal.
&gt; Subdirectories are used to separate database files by origin. I&apos;ll try to
&gt; improve the doc here though.

I see. Yeah, I would suggest using &apos;filename&apos; instead of path, and say in the documentation that it&apos;s the absolute filename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143779</commentid>
    <comment_count>13</comment_count>
      <attachid>38847</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-31 23:15:53 -0700</bug_when>
    <thetext>Created attachment 38847
Update patch rev3

I&apos;ve tried to fix all the issues that kov mentioned as well as changing the &apos;path&apos; property of a WebDatabase to the &apos;filename&apos; property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143781</commentid>
    <comment_count>14</comment_count>
      <attachid>38847</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-08-31 23:37:42 -0700</bug_when>
    <thetext>Comment on attachment 38847
Update patch rev3

&gt; +static void webkit_security_origin_finalize(GObject* object)
&gt; +{
&gt; +    WebKitSecurityOrigin* securityOrigin = WEBKIT_SECURITY_ORIGIN(object);
&gt; +    WebKitSecurityOriginPrivate* priv = securityOrigin-&gt;priv;
&gt; +
&gt; +    g_free(priv-&gt;protocol);
&gt; +    g_free(priv-&gt;host);
&gt; +
&gt; +    G_OBJECT_CLASS(securityOrigin)-&gt;finalize(object);

You have to chain to your parent class, not to yourself! I believe this should enter an infinite loop, does it actually work?

&gt; +}
&gt; +
&gt; +static void webkit_security_origin_dispose(GObject* object)
&gt; +{
&gt; +    WebKitSecurityOrigin* securityOrigin = WEBKIT_SECURITY_ORIGIN(object);
&gt; +    WebKitSecurityOriginPrivate* priv = securityOrigin-&gt;priv;
&gt; +
&gt; +    if (!priv-&gt;disposed) {
&gt; +        priv-&gt;coreOrigin-&gt;deref();
&gt; +        g_hash_table_destroy(priv-&gt;webDatabases);
&gt; +        priv-&gt;disposed = true;
&gt; +    }
&gt; +
&gt; +    G_OBJECT_CLASS(securityOrigin)-&gt;dispose(object);

Same thing here.

&gt; +static void webkit_security_origin_class_init(WebKitSecurityOriginClass* klass)
&gt; +{
&gt; +    GObjectClass* gobject_class = G_OBJECT_CLASS(klass);

gobjectClass



&gt; +
&gt; +      /**
&gt; +      * WebKitSecurityOrigin:web-database-usage:
&gt; +      *
&gt; +      * The cumulative size of all web databases in the security origin in bytes.
&gt; +      *
&gt; +      * Since: 1.1.13
&gt; +      */
&gt; +      g_object_class_install_property(gobject_class, PROP_DATABASE_USAGE,
&gt; +                                      g_param_spec_uint64(&quot;web-database-usage&quot;,
&gt; +                                          _(&quot;Web Database Usage&quot;),
&gt; +                                          _(&quot;The cumulative size of all web databases in the security origin&quot;),
&gt; +                                          0, G_MAXUINT64, 0,
&gt; +                                          WEBKIT_PARAM_READABLE));

The indentation is off here.

&gt; +      /**
&gt; +      * WebKitSecurityOrigin:web-database-quota:
&gt; +      *
&gt; +      * The web database qouta of the security origin in bytes.
&gt; +      *
&gt; +      * Since: 1.1.13
&gt; +      */
&gt; +      g_object_class_install_property(gobject_class, PROP_DATABASE_QUOTA,
&gt; +                                      g_param_spec_uint64(&quot;web-database-quota&quot;,
&gt; +                                          _(&quot;Web Database Quota&quot;),
&gt; +                                          _(&quot;The web database quota of the security origin in bytes&quot;),
&gt; +                                          0, G_MAXUINT64, 0,
&gt; +                                          WEBKIT_PARAM_READWRITE));

Same.

&gt; +
&gt; +/**
&gt; + * webkit_security_origin_get_protocol:
&gt; + * @security_origin: a #WebKitSecurityOrigin
&gt; + *
&gt; + * Returns the protocol for the security origin.
&gt; + *
&gt; + * Returns: the protocol for the security origin
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +G_CONST_RETURN gchar* webkit_security_origin_get_protocol(WebKitSecurityOrigin* security_origin)

securityOrigin for the parameter

&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin), NULL);
&gt; +
&gt; +    WebKitSecurityOriginPrivate* priv = security_origin-&gt;priv;
&gt; +    WebCore::String protocol =  priv-&gt;coreOrigin-&gt;protocol();
&gt; +
&gt; +    if (protocol.isEmpty())
&gt; +        return &quot;&quot;;
&gt; +
&gt; +    g_free(priv-&gt;protocol);
&gt; +    priv-&gt;protocol = g_strdup(protocol.utf8().data());
&gt; +    return priv-&gt;protocol;
&gt; +}
&gt; +
&gt; +/**
&gt; + * webkit_security_origin_get_host:
&gt; + * @security_origin: a #WebKitSecurityOrigin
&gt; + *
&gt; + * Returns the hostname for the security origin.
&gt; + *
&gt; + * Returns: the hostname for the security origin
&gt; + *
&gt; + * Since: 1.1.13
&gt; + **/
&gt; +G_CONST_RETURN gchar* webkit_security_origin_get_host(WebKitSecurityOrigin* security_origin)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin), NULL);
&gt; +
&gt; +    WebKitSecurityOriginPrivate* priv = security_origin-&gt;priv;
&gt; +    WebCore::String host =  priv-&gt;coreOrigin-&gt;host();
&gt; +
&gt; +    if (host.isEmpty()) {
&gt; +        return &quot;&quot;;
&gt; +    } else {
&gt; +        g_free(priv-&gt;host);
&gt; +        priv-&gt;host = g_strdup(host.utf8().data());
&gt; +        return priv-&gt;host;
&gt; +    }
&gt; +}

Mmm, can&apos;t the host and protocol properties be cached? Or can they actually between each call?

&gt; +
&gt; +WebKitWebDatabase* webkit_security_origin_get_web_database(WebKitSecurityOrigin* security_origin, const gchar* database_name)

and databaseName here.

&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(security_origin), NULL);
&gt; +
&gt; +    WebKitSecurityOriginPrivate* priv = security_origin-&gt;priv;
&gt; +    GHashTable* databaseHash = priv-&gt;webDatabases;
&gt; +    WebKitWebDatabase* database = (WebKitWebDatabase*) g_hash_table_lookup(databaseHash, database_name);
&gt; +
&gt; +    if (!database) {
&gt; +        database =  WEBKIT_WEB_DATABASE(g_object_new(WEBKIT_TYPE_WEB_DATABASE,
&gt; +                                       &quot;security-origin&quot;, security_origin,
&gt; +                                       &quot;name&quot;, database_name,
&gt; +                                        NULL));
&gt; +        g_hash_table_insert(databaseHash, g_strdup(database_name), database);
&gt; +    }
&gt; +
&gt; +    return database;
&gt; +}
&gt; +

&gt; +
&gt; +/**
&gt; + * SECTION:webkitwebdatabase
&gt; + * @short_description: A WebKit web application database
&gt; + *
&gt; + * #WebKitWebDatabase is a representation of a Web Database database. The
&gt; + * proposed Web Database standard introduces support for SQL databases that web
&gt; + * sites can create and access on a local computer through JavaScript.
&gt; + *
&gt; + * To get access to all databases defined by a security origin, use
&gt; + * #webkit_security_origin_get_databases. Each database has a canonical
&gt; + * name, as well as a user-friendly display name.
&gt; + * 
&gt; + * WebKit uses SQLite to create and access the local SQL databases. The location
&gt; + * of a #WebKitWebDatabase can be accessed wth #webkit_web_database_get_filename.
&gt; + * You can configure the location of all databases with
&gt; + * #webkit_set_database_directory_path.
&gt; + * 
&gt; + * For each database the web site can define an estimated size which can be
&gt; + * accessed with #webkit_web_database_get_expected_size. The current size of the
&gt; + * database in bytes is returned by #webkit_web_database_get_size.
&gt; + * 
&gt; + * For more information refer to the Web Database specification proposal at
&gt; + * http://dev.w3.org/html5/webdatabase
&gt; + */

Awesome documentation!

&gt; +static void webkit_web_database_finalize(GObject* object)
&gt; +{
&gt; +    WebKitWebDatabase* webDatabase = WEBKIT_WEB_DATABASE(object);
&gt; +    WebKitWebDatabasePrivate* priv = webDatabase-&gt;priv;
&gt; +
&gt; +    if (priv-&gt;origin)
&gt; +        g_object_unref(priv-&gt;origin);

This should be done in dispose, not in finalize.

&gt; +
&gt; +    g_free(priv-&gt;name);
&gt; +    g_free(priv-&gt;display_name);
&gt; +    g_free(priv-&gt;filename);
&gt; +
&gt; +    G_OBJECT_CLASS(webkit_web_database_parent_class)-&gt;finalize(object);
&gt; +}
&gt; +

Also you need to s/1.1.13/1.1.14/ everywhere :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144177</commentid>
    <comment_count>15</comment_count>
      <attachid>38847</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-02 03:21:14 -0700</bug_when>
    <thetext>Comment on attachment 38847
Update patch rev3

Marking r- while we wait for the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144217</commentid>
    <comment_count>16</comment_count>
      <attachid>38925</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-09-02 08:36:44 -0700</bug_when>
    <thetext>Created attachment 38925
Update patch rev4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144218</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-09-02 08:39:15 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; +    G_OBJECT_CLASS(securityOrigin)-&gt;finalize(object);
&gt; 
&gt; You have to chain to your parent class, not to yourself! I believe this should
&gt; enter an infinite loop, does it actually work?

Ouch. Thank you for catching that. I believe it was a search/replace gone bad.

&gt; and databaseName here.

I&apos;ve switched everything to camelCase and am caching the host and protocol portions of the security origin.

&gt; Also you need to s/1.1.13/1.1.14/ everywhere :)

Done. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144391</commentid>
    <comment_count>18</comment_count>
      <attachid>38925</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-02 23:44:07 -0700</bug_when>
    <thetext>Comment on attachment 38925
Update patch rev4

&gt; +GHashTable* webkit_security_origins()
&gt; +{
&gt; +    static GHashTable* securityOrigins = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);
&gt; +    return securityOrigins;
&gt; +}

This function should be static too.


&gt; +G_CONST_RETURN gchar* webkit_security_origin_get_protocol(WebKitSecurityOrigin* securityOrigin)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_SECURITY_ORIGIN(securityOrigin), NULL);
&gt; +
&gt; +    WebKitSecurityOriginPrivate* priv = securityOrigin-&gt;priv;
&gt; +    WebCore::String protocol =  priv-&gt;coreOrigin-&gt;protocol();
&gt; +
&gt; +    if (protocol.isEmpty())
&gt; +        return &quot;&quot;;
&gt; +
&gt; +    if (!priv-&gt;protocol)
&gt; +        priv-&gt;protocol = g_strdup(protocol.utf8().data());
&gt; +
&gt; +    return priv-&gt;protocol;
&gt; +}

Idle thought, shouldn&apos;t you just always cache the value, even if it&apos;s &quot;&quot;, and then return that without going to the core object? Same for host.

&gt; +WebKitSecurityOrigin* WebKit::kit(WebCore::SecurityOrigin* coreOrigin)
&gt; +{
&gt; +    ASSERT(coreOrigin);
&gt; +
&gt; +    GHashTable* table = webkit_security_origins();
&gt; +    WebKitSecurityOrigin* origin = (WebKitSecurityOrigin*) g_hash_table_lookup(table, coreOrigin);
&gt; +
&gt; +    if (!origin) {
&gt; +        origin = WEBKIT_SECURITY_ORIGIN(g_object_new(WEBKIT_TYPE_SECURITY_ORIGIN, NULL));
&gt; +        origin-&gt;priv-&gt;coreOrigin = coreOrigin;
&gt; +        g_hash_table_insert(webkit_security_origins(), coreOrigin, origin);

You could use &apos;table&apos; here instead of calling webkit_security_origins() again.

&gt; +    }
&gt; +
&gt; +    return origin;
&gt; +}
&gt; +
&gt; +


&gt; +static void webkit_web_database_class_init(WebKitWebDatabaseClass* klass)
&gt; +{
&gt; +    GObjectClass* gobjectClass = G_OBJECT_CLASS(klass);
&gt; +    gobjectClass-&gt;finalize = webkit_web_database_finalize;
&gt; +    gobjectClass-&gt;set_property = webkit_web_database_set_property;
&gt; +    gobjectClass-&gt;get_property = webkit_web_database_get_property;

You are not setting dispose here :)

Except for the last point it&apos;s all pretty minor/silly stuff, so you have my 1/2 r+ if you fix it. Now you need another 1/2 from other reviewer since this adds new API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144684</commentid>
    <comment_count>19</comment_count>
      <attachid>39037</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-09-03 21:53:26 -0700</bug_when>
    <thetext>Created attachment 39037
Update patch rev5

Added a patch fixing the issues that you mentioned. Thanks again for taking the time to review this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144687</commentid>
    <comment_count>20</comment_count>
      <attachid>39037</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-09-03 22:18:54 -0700</bug_when>
    <thetext>Comment on attachment 39037
Update patch rev5

&gt; diff --git a/GNUmakefile.am b/GNUmakefile.am
&gt; index 53a04cd..41806e4 100644
&gt; --- a/GNUmakefile.am
&gt; +++ b/GNUmakefile.am
&gt; @@ -331,6 +331,7 @@ webkitgtk_h_api += \
&gt;  	$(srcdir)/WebKit/gtk/webkit/webkitwebsettings.h \
&gt;  	$(srcdir)/WebKit/gtk/webkit/webkitwebwindowfeatures.h \
&gt;  	$(srcdir)/WebKit/gtk/webkit/webkitwebview.h \
&gt; +	$(srcdir)/WebKit/gtk/webkit/webkitwebdatabase.h \
&gt;  	$(top_builddir)/WebKit/gtk/webkit/webkitversion.h
&gt;  
&gt;  webkitgtk_built_sources += \
&gt; @@ -372,6 +373,10 @@ webkitgtk_sources += \
&gt;  	WebKit/gtk/webkit/webkitwebnavigationaction.cpp \
&gt;  	WebKit/gtk/webkit/webkitwebpolicydecision.cpp \
&gt;  	WebKit/gtk/webkit/webkitwebresource.cpp \
&gt; +	WebKit/gtk/webkit/webkitwebdatabase.cpp \
&gt; +	WebKit/gtk/webkit/webkitwebdatabase.h \
&gt; +	WebKit/gtk/webkit/webkitsecurityorigin.cpp \
&gt; +	WebKit/gtk/webkit/webkitsecurityorigin.h \

Should the header be in the API section?

Other than that looks great! r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145048</commentid>
    <comment_count>21</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-06 07:32:03 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 39037 [details])
&gt; &gt; diff --git a/GNUmakefile.am b/GNUmakefile.am
&gt; &gt; index 53a04cd..41806e4 100644
&gt; &gt; --- a/GNUmakefile.am
&gt; &gt; +++ b/GNUmakefile.am
&gt; &gt; @@ -331,6 +331,7 @@ webkitgtk_h_api += \
&gt; &gt;  	$(srcdir)/WebKit/gtk/webkit/webkitwebsettings.h \
&gt; &gt;  	$(srcdir)/WebKit/gtk/webkit/webkitwebwindowfeatures.h \
&gt; &gt;  	$(srcdir)/WebKit/gtk/webkit/webkitwebview.h \
&gt; &gt; +	$(srcdir)/WebKit/gtk/webkit/webkitwebdatabase.h \
&gt; &gt;  	$(top_builddir)/WebKit/gtk/webkit/webkitversion.h
&gt; &gt;  
&gt; &gt;  webkitgtk_built_sources += \
&gt; &gt; @@ -372,6 +373,10 @@ webkitgtk_sources += \
&gt; &gt;  	WebKit/gtk/webkit/webkitwebnavigationaction.cpp \
&gt; &gt;  	WebKit/gtk/webkit/webkitwebpolicydecision.cpp \
&gt; &gt;  	WebKit/gtk/webkit/webkitwebresource.cpp \
&gt; &gt; +	WebKit/gtk/webkit/webkitwebdatabase.cpp \
&gt; &gt; +	WebKit/gtk/webkit/webkitwebdatabase.h \
&gt; &gt; +	WebKit/gtk/webkit/webkitsecurityorigin.cpp \
&gt; &gt; +	WebKit/gtk/webkit/webkitsecurityorigin.h \
&gt; 
&gt; Should the header be in the API section?
&gt; 
&gt; Other than that looks great! r=me.

I have pushed this with this fix and one &quot;Since&quot; tag that was missing. Landed in r48101, closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34428</attachid>
            <date>2009-08-09 13:30:36 -0700</date>
            <delta_ts>2009-08-09 13:30:36 -0700</delta_ts>
            <desc>work in progress patch</desc>
            <filename>webdatabase-quota-tracking.patch</filename>
            <type>text/plain</type>
            <size>21256</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggYzgwZDY0
OS4uNjE3OTI0NSAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTM2Niw2ICszNjYsOCBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViaW5zcGVjdG9yLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2VibmF2aWdhdGlvbmFjdGlvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnBvbGljeWRlY2lzaW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2VjdXJp
dHlvcmlnaW4uaCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2VjdXJpdHlvcmlnaW4u
Y3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAgXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ3aW5kb3dmZWF0dXJlcy5jcHAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggMGIz
N2EyZi4uMTJlODc0YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBw
ZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTQwNjQsNyArNDA2
NCw3IEBAIHNlY3VyaXR5L2Jsb2NrLXRlc3QuaHRtbAogCiAjIFRlc3RzIGluIHN0b3JhZ2UvIGRp
cmVjdG9yeQogIyAgIFRlc3RzIGZhaWxpbmcKLXN0b3JhZ2UvcXVvdGEtdHJhY2tpbmcuaHRtbAor
I3N0b3JhZ2UvcXVvdGEtdHJhY2tpbmcuaHRtbAogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS93aW5kb3ctb3Blbi5odG1sCiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uv
d2luZG93LW9wZW4uaHRtbAogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHAKaW5kZXggMTI5MmU5OS4uZGE4OGUzOCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtNDU5LDEzICs0NTksOSBAQCB2b2lk
IENocm9tZUNsaWVudDo6cHJpbnQoRnJhbWUqIGZyYW1lKQogfQogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQotdm9pZCBDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJh
bWUsIGNvbnN0IFN0cmluZyYpCit2b2lkIENocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1
b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCiB7Ci0gICAgLy8g
U2V0IHRvIDVNIGZvciB0ZXN0aW5nCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBjb25maWd1cmFi
bGUKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBk
ZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkuc2V0UXVvdGEoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGRlZmF1
bHRRdW90YSk7CisKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRkYXRhYmFzZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkYXRhYmFzZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4ZjAzOAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEMuIEFsb256bworICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZQorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKwor
I2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorCisvKioKKyAqIFNFQ1RJT046d2Via2l0d2Vi
ZGF0YWJhc2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogc2VydmVzIGFzIGFuIGludGVyZmFjZSB0
byBtYW5pcHVsYXRlIHRoZSBEYXRhYmFzZXMKKyAqIGltcGxlbWVudGVkIGluIFdlYkNvcmUuCisg
KgorICogVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBHdGsgRHVtcFJlbmRlclRyZWUu
CisgKi8KKworLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBhIHByb3BlciBjbGFzcyBvbmNlIHdlIGJ1
aWxkIG1vcmUgZnVuY3Rpb25hbGl0eQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfcmVt
b3ZlX2FsbF9kYXRhYmFzZXM6CisgKgorICogUmVtb3ZlcyBhbGwgZGF0YWJhc2VzIGNyZWF0ZWQg
YnkgV2ViS2l0CisgKi8KK3ZvaWQgd2Via2l0X2RhdGFiYXNlX3JlbW92ZV9hbGwoV2ViS2l0RGF0
YWJhc2UqIGRhdGFiYXNlKQoreworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVBbGxEYXRhYmFzZXMoKTsKKyNlbmRpZgor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfc2VjdXJpdHlfb3JpZ2luX2dldF91c2FnZToKKyAqIEB3
ZWJfc2VjdXJpdHlfb3JpZ2luOiBhICNXZWJLaXRXZWJTZWN1cml0eU9yaWdpbgorICoKKyAqIFJl
dHVybiB2YWx1ZTogdGhlIHRvdGFsIHVzYWdlIGluIGJ5dGVzIG9mIGFsbCBkYXRhYmFzZXMgaW4g
QHdlYl9zZWN1cml0eV9vcmlnaW4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHdlYmtpdF9kYXRh
YmFzZV9nZXRfdG90YWxfdXNhZ2UoV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4qIHdlYlNlY3VyaXR5
T3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfU0VDVVJJ
VFlfT1JJR0lOKHdlYlNlY3VyaXR5T3JpZ2luKSwgTlVMTCk7CisKKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgdXNhZ2UgPSAwOworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICB1c2FnZSA9IFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnVzYWdlRm9yT3JpZ2luKFdlYktpdDo6Y29y
ZSh3ZWJTZWN1cml0eU9yaWdpbikpOworI2VuZGlmCisKKyAgICByZXR1cm4gdXNhZ2U7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9zZWN1cml0eV9vcmlnaW5fZ2V0X3F1b3RhOgorICogQHdlYl9z
ZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFdlYlNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJu
IHZhbHVlOiB0aGUgcXVvdGEgaW4gYnl0ZXMgb2YgYWxsIGRhdGFiYXNlcyBAd2ViX3NlY3VyaXR5
X29yaWdpbgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgd2Via2l0X2RhdGFiYXNlX2dldF90b3Rh
bF9xdW90YShXZWJLaXRXZWJTZWN1cml0eU9yaWdpbiogd2ViU2VjdXJpdHlPcmlnaW4pCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9TRUNVUklUWV9PUklHSU4od2Vi
U2VjdXJpdHlPcmlnaW4pLCAwKTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSA9IDA7
CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIHF1b3RhID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkucXVvdGFGb3JPcmlnaW4oV2ViS2l0Ojpjb3JlKHdlYlNlY3VyaXR5T3Jp
Z2luKSk7CisjZW5kaWYKKworICAgIHJldHVybiBxdW90YTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2ViX3NlY3VyaXR5X29yaWdpbl9zZXRfcXVvdGE6CisgKiBAd2ViX3NlY3VyaXR5X29yaWdpbjog
YSAjV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4KKyAqIEBxdW90YTogdGhlIHF1b3RhIHRvIHNldCBm
b3IgYWxsIGRhdGFiYXNlcyBpbiBAd2ViX3NlY3VyaXR5X29yaWdpbgorICoKKyAqIFNldHMgdGhl
IHN0b3JhZ2UgcXVvdGEgaW4gYnl0ZXMuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9z
ZXRfcXVvdGEoV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4qIHdlYlNlY3VyaXR5T3JpZ2luLCB1bnNp
Z25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
V0VCX1NFQ1VSSVRZX09SSUdJTih3ZWJTZWN1cml0eU9yaWdpbikpOworCisjaWYgRU5BQkxFKERB
VEFCQVNFKQorICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3Rh
KFdlYktpdDo6Y29yZSh3ZWJTZWN1cml0eU9yaWdpbiksIHF1b3RhKTsKKyNlbmRpZgorfQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGF0YWJhc2UuaCBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTA4YTQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRh
dGFiYXNlLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
TWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfREFUQUJBU0VfSAorI2RlZmluZSBXRUJL
SVRfREFUQUJBU0VfSAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfREFUQUJBU0UgICAgICAgICAgICAod2Via2l0X2RhdGFi
YXNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9EQVRBQkFTRShvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9EQVRBQkFTRSwg
V2ViS2l0RGF0YWJhc2UpKQorI2RlZmluZSBXRUJLSVRfREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREFUQUJBU0Us
IFdlYktpdERhdGFiYXNlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfREFUQUJBU0Uob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfREFU
QUJBU0UpKQorI2RlZmluZSBXRUJLSVRfSVNfREFUQUJBU0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfREFUQUJBU0UpKQorI2RlZmlu
ZSBXRUJLSVRfREFUQUJBU0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfREFUQUJBU0UsIFdlYktpdERhdGFiYXNlQ2xhc3MpKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RGF0YWJhc2VQcml2YXRlIFdlYktpdERhdGFiYXNlUHJp
dmF0ZTsKKworc3RydWN0IF9XZWJLaXREYXRhYmFzZSB7CisgICAgR09iamVjdCBwYXJlbnRfaW5z
dGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXREYXRhYmFzZVByaXZhdGUg
KnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERhdGFiYXNlQ2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9u
ICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZv
aWQpOworCitXRUJLSVRfQVBJIFdlYktpdERhdGFiYXNlICoKK3dlYmtpdF9kYXRhYmFzZV9nZXRf
aW5zdGFuY2UgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rh
dGFiYXNlX3JlbW92ZV9hbGwgICAgICAgICAgICAgIChXZWJLaXREYXRhYmFzZSAgICAgKmRhdGFi
YXNlKTsKKworV0VCS0lUX0FQSSB1bnNpZ25lZCBsb25nIGxvbmcKK3dlYmtpdF9kYXRhYmFzZV9n
ZXRfdG90YWxfdXNhZ2UgICAgICAgICAoV2ViS2l0RGF0YWJhc2UgICAgICpkYXRhYmFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViU2VjdXJpdHlP
cmlnaW4qIHdlYl9vcmlnaW4pOworCitXRUJLSVRfQVBJIHVuc2lnbmVkIGxvbmcgbG9uZword2Vi
a2l0X2RhdGFiYXNlX2dldF90b3RhbF9xdW90YSAgICAgICAgIChXZWJLaXREYXRhYmFzZSAgICAg
KmRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRXZWJTZWN1cml0eU9yaWdpbiogd2ViX29yaWdpbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RhdGFiYXNlX3NldF9xdW90YSAgICAgICAgICAgICAgIChXZWJLaXREYXRhYmFzZSAgICAg
KmRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRXZWJTZWN1cml0eU9yaWdpbiogd2ViX29yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9EQVRBQkFTRV9IICovCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZp
bmVzLmgKaW5kZXggYjBhYjVlOS4uODg4YzE3OCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMu
aApAQCAtNzEsNiArNzEsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdl
YktpdFdlYlZpZXdDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCBXZWJLaXRE
b3dubG9hZDsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdlYktpdERvd25s
b2FkQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJTZWN1cml0eU9yaWdpbiBXZWJL
aXRXZWJTZWN1cml0eU9yaWdpbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJTZWN1cml0eU9y
aWdpbkNsYXNzIFdlYktpdFdlYlNlY3VyaXR5T3JpZ2luQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IGJhM2Y1ZjkuLmQyNjU3ODUg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKICNpbmNsdWRlIDxnbGliLmg+CkBAIC03Niw2ICs3
Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlIGNv
cmUoV2ViS2l0V2ViTmF2aWdhdGlvblJlYXNvbiByZWFzb24pOwogCiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IGNvcmUoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOworCisgICAg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmUoV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbik7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTI0Myw2ICsyNDYsMTAgQEAgZXh0ZXJu
ICJDIiB7CiAKICAgICBXRUJLSVRfQVBJIGdzaXplCiAgICAgd2Via2l0X2djX2NvdW50X2phdmFz
Y3JpcHRfb2JqZWN0cygpOworCisgICAgLy8gV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4qIHByaXZh
dGUKKyAgICBXZWJLaXRXZWJTZWN1cml0eU9yaWdpbioKKyAgICB3ZWJraXRfd2ViX3NlY3VyaXR5
X29yaWdpbl9uZXdfd2l0aF9jb3JlX29yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogb3Jp
Z2luKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJzZWN1cml0eW9yaWdpbi5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZWN1cml0
eW9yaWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg5MDFmNgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNlY3VyaXR5b3Jp
Z2luLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
TWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdl
YnNlY3VyaXR5b3JpZ2luLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVk
ZSAid2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIv
Z2kxOG4tbGliLmg+CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgor
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKKy8qKgorICogU0VDVElPTjp3ZWJraXR3ZWJz
ZWN1cml0eW9yaWdpbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiByZXByZXNlbnRzIGEgc2VjdXJp
dHkgb3JpZ2luCisgKgorICogVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBHdGsgRHVt
cFJlbmRlclRyZWUuCisgKi8KKworc3RydWN0IF9XZWJLaXRXZWJTZWN1cml0eU9yaWdpblByaXZh
dGUgeworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbjsKKworICAg
IGNvbnN0IGdjaGFyKiBwcm90b2NvbDsKKyAgICBjb25zdCBnY2hhciogaG9zdDsKK307CisKKyNk
ZWZpbmUgV0VCS0lUX1dFQl9TRUNVUklUWV9PUklHSU5fR0VUX1BSSVZBVEUob2JqKSAgICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfU0VDVVJJVFlf
T1JJR0lOLCBXZWJLaXRXZWJTZWN1cml0eU9yaWdpblByaXZhdGUpKQorCitHX0RFRklORV9UWVBF
KFdlYktpdFdlYlNlY3VyaXR5T3JpZ2luLCB3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbiwgR19U
WVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2VjdXJpdHlfb3JpZ2luX2Rp
c3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFdlYlNlY3VyaXR5T3JpZ2luKiB3
ZWJTZWN1cml0eU9yaWdpbiA9IFdFQktJVF9XRUJfU0VDVVJJVFlfT1JJR0lOKG9iamVjdCk7Cisg
ICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IFdlYktpdDo6Y29yZSh3ZWJTZWN1
cml0eU9yaWdpbik7CisKKyAgICBBU1NFUlQob3JpZ2luKTsKKyAgICBvcmlnaW4tPmRlcmVmKCk7
CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9wYXJlbnRf
Y2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc2Vj
dXJpdHlfb3JpZ2luX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9jbGFz
c19pbml0KFdlYktpdFdlYlNlY3VyaXR5T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmpl
Y3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIGdv
YmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9kaXNwb3Nl
OworICAgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3dlYl9zZWN1cml0eV9vcmln
aW5fZmluYWxpemU7CisKKyAgICB3ZWJraXRfaW5pdCgpOworCisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGdvYmplY3RfY2xhc3MsIHNpemVvZihXZWJLaXRXZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zZWN1cml0eV9vcmlnaW5faW5p
dChXZWJLaXRXZWJTZWN1cml0eU9yaWdpbiogd2ViU2VjdXJpdHlPcmlnaW4pCit7CisgICAgd2Vi
U2VjdXJpdHlPcmlnaW4tPnByaXYgPSBXRUJLSVRfV0VCX1NFQ1VSSVRZX09SSUdJTl9HRVRfUFJJ
VkFURSh3ZWJTZWN1cml0eU9yaWdpbik7Cit9CisKKy8vIFVzZWQgaW50ZXJuYWxseQorV2ViS2l0
V2ViU2VjdXJpdHlPcmlnaW4qIHdlYmtpdF93ZWJfc2VjdXJpdHlfb3JpZ2luX25ld193aXRoX2Nv
cmVfb3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJU
KG9yaWdpbik7CisKKyAgICBXZWJLaXRXZWJTZWN1cml0eU9yaWdpbiogd2ViU2VjdXJpdHlPcmln
aW4gPSBXRUJLSVRfV0VCX1NFQ1VSSVRZX09SSUdJTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
V0VCX1NFQ1VSSVRZX09SSUdJTiwgTlVMTCkpOworICAgIFdlYktpdFdlYlNlY3VyaXR5T3JpZ2lu
UHJpdmF0ZSogcHJpdiA9IHdlYlNlY3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgb3JpZ2luLT5y
ZWYoKTsKKyAgICBwcml2LT5zZWN1cml0eU9yaWdpbiA9IG9yaWdpbjsKKworICAgIHJldHVybiB3
ZWJTZWN1cml0eU9yaWdpbjsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdp
bl9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4gaW5z
dGFuY2UKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBuZXcgI1dlYktpdFdlYlNlY3VyaXR5T3Jp
Z2luCisgKgorICogU2luY2UgMS4xLjEzCisgKi8KK1dlYktpdFdlYlNlY3VyaXR5T3JpZ2luKiB3
ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9uZXcoKQoreworICAgIFdlYktpdFdlYlNlY3VyaXR5
T3JpZ2luKiB3ZWJTZWN1cml0eU9yaWdpbiA9IFdFQktJVF9XRUJfU0VDVVJJVFlfT1JJR0lOKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfU0VDVVJJVFlfT1JJR0lOLCBOVUxMKSk7CisgICAg
V2ViS2l0V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gd2ViU2VjdXJpdHlPcmlnaW4t
PnByaXY7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVFbXB0eSgpOworICAgIG9yaWdpbi0+cmVmKCk7
CisgICAgcHJpdi0+c2VjdXJpdHlPcmlnaW4gPSBvcmlnaW4uZ2V0KCk7CisKKyAgICByZXR1cm4g
d2ViU2VjdXJpdHlPcmlnaW47Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9zZWN1cml0eV9vcmln
aW5fbmV3X3dpdGhfdXJpOgorICogQHVyaTogdGhlIHVyaSBvZiB0aGUgcGFnZQorICoKKyAqIENy
ZWF0ZXMgYSBuZXcgI1dlYktpdFdlYlNlY3VyaXR5T3JpZ2luIHdpdGggdGhlIGdpdmVuIFVSSQor
ICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5ldyAjV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4KKyAq
CisgKiBTaW5jZSAxLjEuMTMKKyAqLworV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4qIHdlYmtpdF93
ZWJfc2VjdXJpdHlfb3JpZ2luX25ld193aXRoX3VyaShjb25zdCBnY2hhciogdXJpKQoreworICAg
IFdlYktpdFdlYlNlY3VyaXR5T3JpZ2luKiB3ZWJTZWN1cml0eU9yaWdpbiA9IFdFQktJVF9XRUJf
U0VDVVJJVFlfT1JJR0lOKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfU0VDVVJJVFlfT1JJ
R0lOLCBOVUxMKSk7CisgICAgV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0g
d2ViU2VjdXJpdHlPcmlnaW4tPnByaXY7CisKKyAgICBXZWJDb3JlOjpLVVJMIG9yaWdpblVyaSh1
cmkpOworICAgIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShvcmlnaW5VcmkpOworICAgIG9yaWdpbi0+cmVmKCk7
CisgICAgcHJpdi0+c2VjdXJpdHlPcmlnaW4gPSBvcmlnaW4uZ2V0KCk7CisKKyAgICByZXR1cm4g
d2ViU2VjdXJpdHlPcmlnaW47Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9zZWN1cml0eV9vcmln
aW5fZ2V0X3Byb3RvY29sOgorICogQHdlYl9zZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFdlYlNl
Y3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJuczogdGhlIHByb3RvY29sIG9mIEB3ZWJfc2VjdXJp
dHlfb3JpZ2luCisgKgorICogU2luY2UgMS4xLjEzCisgKi8KK0dfQ09OU1RfUkVUVVJOIGdjaGFy
KiB3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2woV2ViS2l0V2ViU2VjdXJp
dHlPcmlnaW4qIHdlYlNlY3VyaXR5T3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfU0VDVVJJVFlfT1JJR0lOKHdlYlNlY3VyaXR5T3JpZ2luKSwgTlVMTCk7
CisKKyAgICBXZWJLaXRXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSB3ZWJTZWN1cml0
eU9yaWdpbi0+cHJpdjsKKworICAgIGlmICghcHJpdi0+cHJvdG9jb2wpCisgICAgICAgIHByaXYt
PnByb3RvY29sID0gV2ViS2l0Ojpjb3JlKHdlYlNlY3VyaXR5T3JpZ2luKS0+cHJvdG9jb2woKS51
dGY4KCkuZGF0YSgpOworCisgICAgcmV0dXJuIHByaXYtPnByb3RvY29sOworfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0OgorICogQHdlYl9zZWN1cml0eV9v
cmlnaW46IGEgI1dlYktpdFdlYlNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJuIHZhbHVlOiB0
aGUgaG9zdCBvZiBAd2ViX3NlY3VyaXR5X29yaWdpbgorICoKKyAqIFNpbmNlIDEuMS4xMworICov
CitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl9zZWN1cml0eV9vcmlnaW5fZ2V0X2hv
c3QoV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4qIHdlYlNlY3VyaXR5T3JpZ2luKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfU0VDVVJJVFlfT1JJR0lOKHdlYlNlY3Vy
aXR5T3JpZ2luKSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJTZWN1cml0eU9yaWdpblByaXZhdGUq
IHByaXYgPSB3ZWJTZWN1cml0eU9yaWdpbi0+cHJpdjsKKworICAgIGlmICghcHJpdi0+aG9zdCkK
KyAgICAgICAgcHJpdi0+aG9zdCA9IFdlYktpdDo6Y29yZSh3ZWJTZWN1cml0eU9yaWdpbiktPmhv
c3QoKS51dGY4KCkuZGF0YSgpOworCisgICAgcmV0dXJuIHByaXYtPmhvc3Q7Cit9CisKKy8qKgor
ICogd2Via2l0X3dlYl9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQ6CisgKiBAd2ViX3NlY3VyaXR5
X29yaWdpbjogYSAjV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm4gdmFsdWU6
IHRoZSBwb3J0IG9mIEB3ZWJfc2VjdXJpdHlfb3JpZ2luCisgKgorICogU2luY2UgMS4xLjEzCisg
Ki8KK2d1c2hvcnQgd2Via2l0X3dlYl9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQoV2ViS2l0V2Vi
U2VjdXJpdHlPcmlnaW4qIHdlYlNlY3VyaXR5T3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfU0VDVVJJVFlfT1JJR0lOKHdlYlNlY3VyaXR5T3JpZ2luKSwg
TlVMTCk7CisKKyAgICByZXR1cm4gV2ViS2l0Ojpjb3JlKHdlYlNlY3VyaXR5T3JpZ2luKS0+cG9y
dCgpOworfQorCitXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogV2ViS2l0Ojpjb3JlKFdlYktpdFdl
YlNlY3VyaXR5T3JpZ2luKiB3ZWJTZWN1cml0eU9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1NFQ1VSSVRZX09SSUdJTih3ZWJTZWN1cml0eU9yaWdpbiks
IE5VTEwpOworCisgICAgcmV0dXJuIHdlYlNlY3VyaXR5T3JpZ2luLT5wcml2LT5zZWN1cml0eU9y
aWdpbjsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNlY3VyaXR5
b3JpZ2luLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZWN1cml0eW9yaWdpbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MTZjMzcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZWN1cml0eW9yaWdpbi5oCkBAIC0wLDAg
KzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQy4gQWxvbnpv
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV0VCS0lUX1dFQl9TRUNVUklUWV9PUklHSU5fSAorI2RlZmluZSBXRUJLSVRfV0VC
X1NFQ1VSSVRZX09SSUdJTl9ICisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKworI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfU0VDVVJJVFlfT1JJR0lOICAgICAgICAg
ICAgKHdlYmtpdF93ZWJfc2VjdXJpdHlfb3JpZ2luX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9XRUJfU0VDVVJJVFlfT1JJR0lOKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9TRUNVUklUWV9PUklHSU4sIFdlYktpdFdl
YlNlY3VyaXR5T3JpZ2luKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9TRUNVUklUWV9PUklHSU5fQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfV0VCX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW5DbGFzcykpCisj
ZGVmaW5lIFdFQktJVF9JU19XRUJfU0VDVVJJVFlfT1JJR0lOKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9TRUNVUklUWV9PUklH
SU4pKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1NFQ1VSSVRZX09SSUdJTl9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfU0VDVVJJ
VFlfT1JJR0lOKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9TRUNVUklUWV9PUklHSU5fR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VC
X1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW5DbGFzcykpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRXZWJTZWN1cml0eU9yaWdpblByaXZhdGUgV2ViS2l0V2ViU2VjdXJp
dHlPcmlnaW5Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYlNlY3VyaXR5T3JpZ2luIHsKKyAg
ICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdl
YktpdFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0
V2ViU2VjdXJpdHlPcmlnaW5DbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
KworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2
b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF93ZWJfc2VjdXJpdHlfb3JpZ2luX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJL
aXRXZWJTZWN1cml0eU9yaWdpbiAqCit3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9uZXcgKHZv
aWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYlNlY3VyaXR5T3JpZ2luICoKK3dlYmtpdF93ZWJf
c2VjdXJpdHlfb3JpZ2luX25ld193aXRoX3VyaSAgICAgKGNvbnN0IGdjaGFyICAgICAgICAgICAg
ICp1cmkpOworCisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIgKgord2Via2l0X3dl
Yl9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sICAgICAoV2ViS2l0V2ViU2VjdXJpdHlPcmln
aW4gKndlYl9zZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdj
aGFyICoKK3dlYmtpdF93ZWJfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0ICAgICAgICAgKFdlYktp
dFdlYlNlY3VyaXR5T3JpZ2luICp3ZWJfc2VjdXJpdHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSBn
dXNob3J0Cit3ZWJraXRfd2ViX3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydCAgICAgICAgIChXZWJL
aXRXZWJTZWN1cml0eU9yaWdpbiAqd2ViX3NlY3VyaXR5X29yaWdpbik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfV0VCX1NFQ1VSSVRZX09SSUdJTl9IICovCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsu
Y3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVy
R3RrLmNwcAppbmRleCAwYTg3MTJhLi5hY2JlNzA3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAg
LTQ0LDkgKzQ0LDE1IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgogCiBleHRlcm4gIkMi
IHsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNlY3VyaXR5T3JpZ2luIFdlYktpdFdlYlNl
Y3VyaXR5T3JpZ2luOworCiBib29sIHdlYmtpdF93ZWJfZnJhbWVfcGF1c2VfYW5pbWF0aW9uKFdl
YktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG5hbWUsIGRvdWJsZSB0aW1lLCBjb25z
dCBnY2hhciogZWxlbWVudCk7CiBib29sIHdlYmtpdF93ZWJfZnJhbWVfcGF1c2VfdHJhbnNpdGlv
bihXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBuYW1lLCBkb3VibGUgdGltZSwg
Y29uc3QgZ2NoYXIqIGVsZW1lbnQpOwotdW5zaWduZWQgaW50IHdlYmtpdF93ZWJfZnJhbWVfbnVt
YmVyX29mX2FjdGl2ZV9hbmltYXRpb25zKFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7Cit1bnNpZ25l
ZCBpbnQgd2Via2l0X3dlYl9mcmFtZV9udW1iZXJfb2ZfYWN0aXZlX2FuaW1hdGlvbnMoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lKTsgCitXZWJLaXRXZWJTZWN1cml0eU9yaWdpbiogd2Via2l0X3dlYl9z
ZWN1cml0eV9vcmlnaW5fbmV3X3dpdGhfdXJpKGNvbnN0IGdjaGFyKiB1cmkpOwordm9pZCB3ZWJr
aXRfd2ViX3NlY3VyaXR5X29yaWdpbl9zZXRfcXVvdGEoV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4q
IHdlYk9yaWdpbiwgdW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKTsKK3ZvaWQgd2Via2l0X3dlYl9k
YXRhYmFzZV9yZW1vdmVfYWxsX2RhdGFiYXNlcygpOwogfQogCiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKQEAgLTMyNCwxMiArMzMwLDE2IEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIAogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICB3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92ZV9hbGxfZGF0YWJh
c2VzKCk7CiB9Ci0gCisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVv
dGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQoteyAgICAKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Cit7CisgICAgV2ViS2l0V2ViU2VjdXJpdHlPcmlnaW4qIHdlYk9yaWdpbiA9IHdlYmtpdF93
ZWJfc2VjdXJpdHlfb3JpZ2luX25ld193aXRoX3VyaSgiZmlsZTovLy8iKTsKKworICAgIHdlYmtp
dF93ZWJfc2VjdXJpdHlfb3JpZ2luX3NldF9xdW90YSh3ZWJPcmlnaW4sIHF1b3RhKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKHdlYk9yaWdpbik7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34544</attachid>
            <date>2009-08-11 01:09:14 -0700</date>
            <delta_ts>2009-08-12 10:43:35 -0700</delta_ts>
            <desc>First pass at a database API</desc>
            <filename>0001-First-stab-at-WebKit-GTK-database-API.patch</filename>
            <type>text/plain</type>
            <size>48865</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBkZTI4NzI5MDc4ODBhNTEyOGRjMmYzYjI2N2UwNDJmZTUzNGU5NzYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFN1biwgOSBBdWcgMjAwOSAwMToyMzowMCAtMDcwMApTdWJqZWN0
OiBbUEFUQ0hdIEZpcnN0IHN0YWIgYXQgV2ViS2l0IEdUSysgZGF0YWJhc2UgQVBJCgotLS0KIEdO
VW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIHwgICAxNCArLQogV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgICAgfCAgICA2ICsKIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwICAgICAgICAgICB8ICAgIDUgKy0KIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCAgICAgICAgICAgICB8ICAgIDggKwogV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwICAgIHwgIDQ0MSArKysrKysrKysr
KysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oICAg
ICAgfCAgIDgzICsrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcCAg
ICAgICB8ICA1MDIgKysrKysrKysrKysrKysrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZGF0YWJhc2UuaCAgICAgICAgIHwgICA5NSArKysrKwogV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZnJhbWUuY3BwICAgICAgICAgIHwgICAxOCArCiBXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJmcmFtZS5oICAgICAgICAgICAgfCAgICAzICsKIFdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwICAgICAgICAgICB8ICAgMjQgKysKIDEzIGZpbGVzIGNoYW5nZWQs
IDEyMDAgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaAoKZGlmZiAt
LWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNDZlYWY4ZC4uY2Iz
N2I0YyAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAg
LTMyOCw2ICszMjgsOCBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmluc3BlY3Rvci5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZp
Z2F0aW9uYWN0aW9uLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lz
aW9uLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggXAorCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnNldHRpbmdzLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRv
d2ZlYXR1cmVzLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApAQCAtMzY3
LDYgKzM2OSwxMCBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViaW5zcGVjdG9yLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VibmF2
aWdhdGlvbmFjdGlvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRl
Y2lzaW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwIFwK
KwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKKwlXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHNlY3VyaXR5b3JpZ2luLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdz
LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgXAogCVdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IDEyOTJlOTkuLmM3ZGVhZWMgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAor
KysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTQ1
OSwxMyArNDU5LDE3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJhbWUpCiB9
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi12b2lkIENocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRh
YmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ2hyb21lQ2xpZW50
OjpleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSkKIHsKLSAgICAvLyBTZXQgdG8gNU0gZm9yIHRlc3RpbmcKLSAgICAvLyBGSVhNRTog
TWFrZSB0aGlzIGNvbmZpZ3VyYWJsZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29uc3Qg
dW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICBn
dWludDY0IGRlZmF1bHRRdW90YSA9IHdlYmtpdF9nZXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YSgp
OwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKGZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLCBkZWZhdWx0UXVvdGEpOworCisgICAgV2ViS2l0V2ViRnJh
bWUqIHdlYkZyYW1lID0ga2l0KGZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
Z2V0Vmlld0Zyb21GcmFtZSh3ZWJGcmFtZSk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiog
b3JpZ2luID0ga2l0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBX
ZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9kYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImRhdGFiYXNlLXF1b3RhLWV4Y2VlZGVkIiwgd2Vi
RnJhbWUsIHdlYkRhdGFiYXNlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGMyMjE2
NWUuLjhlZWNkYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdl
YnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25h
Y3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
ZW51bXR5cGVzLmg+CiAKICNlbmRpZiAvKiBfX1dFQktJVF9IX18gKi8KZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRlZmluZXMuaAppbmRleCBiMGFiNWU5Li5hM2EyMTI5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVm
aW5lcy5oCkBAIC03MSw2ICs3MSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIFdlYktpdFdlYlZpZXdDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCBX
ZWJLaXREb3dubG9hZDsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdlYktp
dERvd25sb2FkQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZSBXZWJL
aXRXZWJEYXRhYmFzZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZUNsYXNzIFdl
YktpdFdlYkRhdGFiYXNlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9y
aWdpbiBXZWJLaXRTZWN1cml0eU9yaWdpbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0
eU9yaWdpbkNsYXNzIFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcAppbmRleCA3NTViNGQzLi5mNDI2
OWRiIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcApAQCAtMTU2LDkgKzE1NiwxMCBA
QCB2b2lkIHdlYmtpdF9pbml0KCkKICAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+c2V0Q2FwYWNp
dHkoMyk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgLy8gRklYTUU6IEl0IHNob3VsZCBi
ZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGlzIGRlZmF1
bHQgbG9jYXRpb24KICAgICBnY2hhciogZGF0YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVu
YW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIsICJkYXRhYmFzZXMiLCBOVUxMKTsK
LSAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURpcmVj
dG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIHdlYmtpdF9zZXRfZGF0YWJhc2VfZGly
ZWN0b3J5X3BhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworCisgICAgLy8gRklYTUU6IEl0IHNob3Vs
ZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVm
YXVsdCBhcHBjYWNoZSBsb2NhdGlvbgogICAgIFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLnNldENh
Y2hlRGlyZWN0b3J5KGRhdGFiYXNlRGlyZWN0b3J5KTsKICAgICBnX2ZyZWUoZGF0YWJhc2VEaXJl
Y3RvcnkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2
YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggMGMzZmJkMy4u
MzczNGU5MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisr
KyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4u
aD4KIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgPGVuY2hhbnQuaD4K
QEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUg
PGdsaWIuaD4KQEAgLTc3LDYgKzc5LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViQ29y
ZTo6TmF2aWdhdGlvblR5cGUgY29yZShXZWJLaXRXZWJOYXZpZ2F0aW9uUmVhc29uIHJlYXNvbik7
CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgY29yZShXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbioga2l0KFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luKik7CisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmUoV2ViS2l0
U2VjdXJpdHlPcmlnaW4qKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMjUwLDYgKzI1NSw5
IEBAIGV4dGVybiAiQyIgewogCiAgICAgV0VCS0lUX0FQSSB2b2lkCiAgICAgd2Via2l0X2FwcGxp
Y2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpOwor
CisgICAgV0VCS0lUX0FQSSBXZWJLaXRXZWJEYXRhYmFzZSoKKyAgICB3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX2dldF9kYXRhYmFzZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2lu
LCBjb25zdCBnY2hhciogZGF0YWJhc2VfbmFtZSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmYzMGYxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKQEAgLTAsMCArMSw0NDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
d2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHdlYmRhdGFiYXNlCisgKiBA
c2hvcnRfZGVzY3JpcHRpb246IEEgc2VjdXJpdHkgYm91bmRhcnkgZm9yIHdlYiBzaXRlcworICoK
KyAqICNXZWJLaXRTZWN1cml0eU9yaWdpbiBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VjdXJp
dHkgZG9tYWluIGRlZmluZWQKKyAqIGJ5IHdlYiBzaXRlcy4gQW4gb3JpZ2luIGNvbnNpc3RzIG9m
IGEgaG9zdCBuYW1lLCBhIHNjaGVtZSwgYW5kIGEgcG9ydAorICogbnVtYmVyLiBXZWIgc2l0ZXMg
d2l0aCB0aGUgc2FtZSBzZWN1cml0eSBvcmlnaW4gY2FuIGFjY2VzcyBlYWNoIG90aGVyJ3MKKyAq
IHJlc291cmNlcyBmb3IgY2xpZW50LXNpZGUgc2NyaXB0aW5nIG9yIGRhdGFiYXNlIGFjY2Vzcy4K
KyAqIAorICogVXNlICN3ZWJraXRfd2ViX2ZyYW1lX2dldF9vcmlnaW4gdG8gZ2V0IHRoZSBzZWN1
cml0eSBvcmlnaW4gb2YgYQorICogI1dlYktpdFdlYkZyYW1lLgorICoKKyAqIERhdGFiYXNlIHF1
b3RhcyBhbmQgdXNhZ2VzIGFyZSBhbHNvIGRlZmluZWQgcGVyIHNlY3VyaXR5IG9yaWdpbi4gVGhl
CisgKiBjdW11bGF0aXZlIGRpc2sgdXNhZ2Ugb2YgYW4gb3JpZ2luJ3MgZGF0YWJhc2VzIG1heSBi
ZSByZXRyaWV2ZWQgd2l0aAorICogI3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNl
X3VzYWdlLiBBbiBvcmlnaW4ncyBxdW90YSBjYW4gYmUKKyAqIGFkanVzdGVkIHdpdGggI3dlYmtp
dF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhLgorICovCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfUFJPVE9DT0ws
CisgICAgUFJPUF9IT1NULAorICAgIFBST1BfUE9SVCwKKyAgICBQUk9QX0RBVEFCQVNFX1VTQUdF
LAorICAgIFBST1BfREFUQUJBU0VfUVVPVEEKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0U2Vj
dXJpdHlPcmlnaW4sIHdlYmtpdF9zZWN1cml0eV9vcmlnaW4sIEdfVFlQRV9PQkpFQ1QpCisKK3N0
cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+IGNvcmVPcmlnaW47CisgICAgZ2NoYXIqIHByb3RvY29sOworICAgIGdj
aGFyKiBob3N0OworICAgIEdIYXNoVGFibGUqIHdlYkRhdGFiYXNlczsKKworICAgIGdib29sZWFu
IGRpc3Bvc2VkOworfTsKKworI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dFVF9QUklW
QVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVf
U0VDVVJJVFlfT1JJR0lOLCBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUpKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4gPSBXRUJLSVRfU0VDVVJJ
VFlfT1JJR0lOKG9iamVjdCk7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2
ID0gc2VjdXJpdHlPcmlnaW4tPnByaXY7CisKKyAgICBpZiAoIXByaXYtPmRpc3Bvc2VkKSB7Cisg
ICAgICAgIHByaXYtPmNvcmVPcmlnaW4tPmRlcmVmKCk7CisgICAgICAgIGdfaGFzaF90YWJsZV9k
ZXN0cm95KHByaXYtPndlYkRhdGFiYXNlcyk7CisgICAgICAgIHByaXYtPmRpc3Bvc2VkID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhzZWN1cml0eU9yaWdpbiktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0RBVEFCQVNFX1FVT1RBOgorICAgICAgICB3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YShzZWN1cml0eU9yaWdpbiwgZ192
YWx1ZV9nZXRfdWludDY0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IFdFQktJVF9TRUNVUklUWV9PUklHSU4ob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9wcm90b2NvbChzZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSE9TVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2dldF9ob3N0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9QT1JUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9EQVRBQkFTRV9VU0FHRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWlu
dDY0KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZShzZWN1
cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQUJBU0VfUVVP
VEE6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfZGF0YWJhc2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dI
YXNoVGFibGUqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hU
YWJsZSogc2VjdXJpdHlPcmlnaW5zID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hh
c2gsIGdfZGlyZWN0X2VxdWFsLCBOVUxMLCBnX29iamVjdF91bnJlZik7CisgICAgcmV0dXJuIHNl
Y3VyaXR5T3JpZ2luczsKK30KKwordm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2FkZChXZWJL
aXRTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9y
aWdpbikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4o
b3JpZ2luKSk7CisKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9zZWN1cml0eV9vcmln
aW5zKCk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydCh0YWJsZSwgY29yZU9yaWdpbiwgb3JpZ2lu
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0KFdl
YktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2NsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZmluYWxpemU7CisgICAgZ29iamVjdF9j
bGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9nZXRfcHJvcGVydHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2lu
OnByb3RvY29sOgorICAgICAgKgorICAgICAgKiBUaGUgcHJvdG9jb2wgb2YgdGhlIHNlY3VyaXR5
IG9yaWdpbi4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX1BST1RP
Q09MLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoInByb3RvY29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlByb3RvY29sIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgcHJvdG9jb2wgb2YgdGhl
IHNlY3VyaXR5IG9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgIC8qKgorICAgICAgKiBXZWJLaXRTZWN1cml0eU9yaWdpbjpob3N0OgorICAgICAgKgorICAg
ICAgKiBUaGUgaG9zdCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICAgICAgKgorICAgICAgKiBT
aW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RfY2xhc3MsIFBST1BfSE9TVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJob3N0IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkhvc3QiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBob3N0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJpdHlPcmlnaW46cG9ydDoK
KyAgICAgICoKKyAgICAgICogVGhlIHBvcnQgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAg
ICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX1BPUlQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoInBvcnQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlBvcnQi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJUaGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJp
dHlPcmlnaW46ZGF0YWJhc2UtdXNhZ2UKKyAgICAgICoKKyAgICAgICogVGhlIGN1bXVsYXRpdmUg
c2l6ZSBvZiBhbGwgZGF0YWJhc2VzIGluIHRoZSBzZWN1cml0eSBvcmlnaW4gaW4gYnl0ZXMuCisg
ICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfREFUQUJBU0VfVVNBR0Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50
NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YWJhc2Ut
dXNhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGF0
YWJhc2UgVXNhZ2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIGRhdGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkg
b3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBH
X01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3Vy
aXR5T3JpZ2luOmRhdGFiYXNlLXF1b3RhCisgICAgICAqCisgICAgICAqIFRoZSBkYXRhYmFzZSBx
b3V0YSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIGJ5dGVzLgorICAgICAgKgorICAgICAgKiBT
aW5jZTogMS4xLjEzCisgICAgICAqLworICAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0RBVEFCQVNFX1FVT1RBLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFiYXNlLXF1b3RhIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRhdGFiYXNlIFF1b3RhIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZGF0YWJhc2Ug
cXVvdGEgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBieXRlcyIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRTZWN1
cml0eU9yaWdpblByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29y
aWdpbl9pbml0KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pCit7CisgICAg
V2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJ
Tl9HRVRfUFJJVkFURShzZWN1cml0eV9vcmlnaW4pOworICAgIHByaXYtPndlYkRhdGFiYXNlcyA9
IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBn
X29iamVjdF91bnJlZik7CisgICAgc2VjdXJpdHlfb3JpZ2luLT5wcml2ID0gcHJpdjsKK30KKwor
LyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbDoKKyAqIEBzZWN1cml0
eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgcHJv
dG9jb2wgZm9yIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgKgorICogUmV0dXJuczogdGhlIHByb3Rv
Y29sIGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luCisgKgorICogU2luY2U6IDEuMS4xMworICoqLwor
R19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29s
KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmlnaW4pLCBO
VUxMKTsKKworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5
X29yaWdpbi0+cHJpdjsKKyAgICBXZWJDb3JlOjpTdHJpbmcgcHJvdG9jb2wgPSAgcHJpdi0+Y29y
ZU9yaWdpbi0+cHJvdG9jb2woKTsKKworICAgIGlmICghcHJvdG9jb2wuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGdfZnJlZShwcml2LT5wcm90b2NvbCk7CisgICAgICAgIHByaXYtPnByb3RvY29sID0g
Z19zdHJkdXAocHJvdG9jb2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBwcml2LT5w
cm90b2NvbDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCisv
KioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Q6CisgKiBAc2VjdXJpdHlfb3Jp
Z2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAqIFJldHVybnMgdGhlIGhvc3RuYW1l
IGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybnM6IHRoZSBob3N0bmFtZSBm
b3IgdGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK0dfQ09O
U1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KFdlYktpdFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmlnaW4pLCBOVUxMKTsKKwor
ICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5X29yaWdpbi0+
cHJpdjsKKyAgICBXZWJDb3JlOjpTdHJpbmcgaG9zdCA9ICBwcml2LT5jb3JlT3JpZ2luLT5ob3N0
KCk7CisKKyAgICBpZiAoIWhvc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGdfZnJlZShwcml2LT5o
b3N0KTsKKyAgICAgICAgcHJpdi0+aG9zdCA9IGdfc3RyZHVwKGhvc3QudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIHJldHVybiBwcml2LT5ob3N0OworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biAiIjsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9y
dDoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICog
UmV0dXJucyB0aGUgcG9ydCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5z
OiB0aGUgcG9ydCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTMK
KyAqKi8KK2d1aW50IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQoV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIDApOworCisgICAgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7
CisgICAgcmV0dXJuIGNvcmVPcmlnaW4tPnBvcnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZToKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEg
I1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgY3VtdWxhdGl2ZSBzaXpl
IG9mIGFsbCBXZWIgRGF0YWJhc2UgZGF0YWJhc2UncyBpbiB0aGUgb3JpZ2luCisgKiBpbiBieXRl
cy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBkYXRhYmFzZXMg
CisgKgorICogU2luY2U6IDEuMS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9kYXRhYmFzZV91c2FnZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3Jp
Z2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklH
SU4oc2VjdXJpdHlfb3JpZ2luKSwgMCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7
CisgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnVzYWdlRm9y
T3JpZ2luKGNvcmVPcmlnaW4pOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisv
KioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlX3F1b3RhOgorICogQHNl
Y3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRo
ZSBxdW90YSBmb3IgV2ViIERhdGFiYXNlIHN0b3JhZ2Ugb2YgdGhlIHNlY3VyaXR5IG9yaWdpbgor
ICogaW4gYnl0ZXMuCisgKgorICogUmV0dXJuczogdGhlIFdlYiBEYXRhYmFzZSBxdW90YQorICoK
KyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50NjQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfZGF0YWJhc2VfcXVvdGEoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNl
Y3VyaXR5X29yaWdpbiksIDApOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9vcmlnaW4pOworICAg
IHJldHVybiBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdp
bihjb3JlT3JpZ2luKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoqCisg
KiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YToKKyAqIEBzZWN1cml0
eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKiBAcXVvdGE6IGEgbmV3IFdlYiBE
YXRhYmFzZSBxdW90YSBpbiBieXRlcworICoKKyAqIEFkanVzdCB0aGUgcXVvdGEgZm9yIFdlYiBE
YXRhYmFzZSBzdG9yYWdlIG9mIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4x
LjEzCisgKiovCit2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3Rh
KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4sIGd1aW50NjQgcXVvdGEpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5
X29yaWdpbikpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9vcmlnaW4pOworICAgIFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKGNvcmVPcmlnaW4sIHF1b3RhKTsK
KyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNl
czoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICog
UmV0dXJucyBhIGxpc3Qgb2YgYWxsIFdlYiBEYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdp
bi4KKyAqCisgKiBSZXR1cm5zOiBhICNHbGlzdCBvZiBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5
IG9yaWdpbi4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHTGlzdCogd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9nZXRfZGF0YWJhc2VzKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9v
cmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09S
SUdJTihzZWN1cml0eV9vcmlnaW4pLCBOVUxMKTsKKyAgICBHTGlzdCogZGF0YWJhc2VzID0gTlVM
TDsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiog
Y29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlfb3JpZ2luKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6
U3RyaW5nPiBkYXRhYmFzZU5hbWVzOworCisgICAgaWYgKCFXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5kYXRhYmFzZU5hbWVzRm9yT3JpZ2luKGNvcmVPcmlnaW4sIGRhdGFiYXNl
TmFtZXMpKQorICAgICAgICByZXR1cm4gZGF0YWJhc2VzOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViS2l0V2Vi
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2Uo
c2VjdXJpdHlfb3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBkYXRhYmFzZXMgPSBnX2xpc3RfYXBwZW5kKGRhdGFiYXNlcywgZGF0YWJhc2UpOworICAgIH0K
KyNlbmRpZgorCisgICAgcmV0dXJuIGRhdGFiYXNlczsKK30KKworLy8gUHJpdmF0ZQorV2ViS2l0
V2ViRGF0YWJhc2UqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlKFdlYktpdFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4sIGNvbnN0IGdjaGFyKiBkYXRhYmFzZV9uYW1l
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4o
c2VjdXJpdHlfb3JpZ2luKSwgTlVMTCk7CisgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3Jl
OjpTdHJpbmcgZGF0YWJhc2VOYW1lID0gV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChkYXRhYmFz
ZV9uYW1lKTsKKworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3Vy
aXR5X29yaWdpbi0+cHJpdjsKKyAgICBHSGFzaFRhYmxlKiBkYXRhYmFzZUhhc2ggPSBwcml2LT53
ZWJEYXRhYmFzZXM7CisgICAgV2ViS2l0V2ViRGF0YWJhc2UqIGRhdGFiYXNlID0gKFdlYktpdFdl
YkRhdGFiYXNlKikgZ19oYXNoX3RhYmxlX2xvb2t1cChkYXRhYmFzZUhhc2gsIGRhdGFiYXNlX25h
bWUpOworCisgICAgaWYgKCFkYXRhYmFzZSkgeworICAgICAgICBkYXRhYmFzZSA9ICBXRUJLSVRf
V0VCX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JpZ2luIiwgc2VjdXJpdHlfb3Jp
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBkYXRh
YmFzZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp
KTsKKyAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydChkYXRhYmFzZUhhc2gsIGdfc3RyZHVwKGRh
dGFiYXNlX25hbWUpLCBkYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGFiYXNlOwor
fQorCisKK1dlYktpdFNlY3VyaXR5T3JpZ2luKiBXZWJLaXQ6OmtpdChXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbiogY29yZU9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT3Jp
Z2luLCBOVUxMKTsKKworICAgIEdIYXNoVGFibGUqIHRhYmxlID0gd2Via2l0X3NlY3VyaXR5X29y
aWdpbnMoKTsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gKFdlYktpdFNlY3Vy
aXR5T3JpZ2luKikgZ19oYXNoX3RhYmxlX2xvb2t1cCh0YWJsZSwgY29yZU9yaWdpbik7CisKKyAg
ICBpZiAoIW9yaWdpbikgeworICAgICAgICBvcmlnaW4gPSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lO
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIE5VTEwpKTsKKyAgICAg
ICAgb3JpZ2luLT5wcml2LT5jb3JlT3JpZ2luID0gY29yZU9yaWdpbjsKKyAgICAgICAgd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9hZGQob3JpZ2luLCBjb3JlT3JpZ2luKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gb3JpZ2luOworfQorCisKK1dlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBXZWJLaXQ6OmNv
cmUoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiks
IE5VTEwpOworCisgICAgcmV0dXJuIHNlY3VyaXR5X29yaWdpbi0+cHJpdi0+Y29yZU9yaWdpbi5n
ZXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlv
cmlnaW4uaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1ZGQ4OQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmgKQEAgLTAsMCArMSw4MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24sIEphbiBNaWNoYWVs
IEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIF9fV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9IX18KKyNkZWZpbmUg
X19XRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0hfXworCisjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlv
cmlnaW4uaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJkYXRhYmFzZS5oIgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOICAgICAgICAgICAgICh3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9P
UklHSU4ob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW4pKQorI2Rl
ZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIFdlYktp
dFNlY3VyaXR5T3JpZ2luQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lO
KG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
VFlQRV9TRUNVUklUWV9PUklHSU4pKQorI2RlZmluZSBXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lO
X0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
VFlQRV9TRUNVUklUWV9PUklHSU4pKQorI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dF
VF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
VFlQRV9TRUNVUklUWV9PUklHSU4sIFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlIFdlYktpdFNlY3VyaXR5T3Jp
Z2luUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpbiB7CisgICAgR09iamVj
dCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRTZWN1
cml0eU9yaWdpblByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3Jp
Z2luQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRk
aW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQx
KSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQ0KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0eU9yaWdpbioK
K3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X29yaWdpbiAgICAgICAgIChXZWJLaXRTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBn
Y2hhcioKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sICAgICAgIChXZWJLaXRT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JF
VFVSTiBnY2hhcioKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QgICAgICAgICAgIChX
ZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSBndWlu
dAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydCAgICAgICAgICAgKFdlYktpdFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlX3VzYWdlIChXZWJLaXRTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2dldF9kYXRhYmFzZV9xdW90YSAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkgdm9pZCAKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5f
c2V0X2RhdGFiYXNlX3F1b3RhIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2lu
LCBndWludDY0IHF1b3RhKTsKKworV0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF9zZWN1cml0eV9v
cmlnaW5fZ2V0X2RhdGFiYXNlcyAgICAgIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlf
b3JpZ2luKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fV0VCS0lUX1NFQ1VSSVRZX09S
SUdJTl9IX18gKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFi
YXNlLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhmOThmCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsNTAyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRw
cml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRy
YWNrZXIuaCIKKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHdlYmRhdGFiYXNlCisgKiBAc2hvcnRf
ZGVzY3JpcHRpb246IEEgV2ViS2l0IHdlYiBhcHBsaWNhdGlvbiBkYXRhYmFzZQorICoKKyAqICNX
ZWJLaXRXZWJEYXRhYmFzZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgV2ViIERhdGFiYXNlIGRh
dGFiYXNlLiBUaGUKKyAqIHVwY29taW5nIFdlYiBEYXRhYmFzZSBzdGFuZGFyZCBpbnRyb2R1Y2Vz
IHN1cHBvcnQgZm9yIFNRTCBkYXRhYmFzZXMgdGhhdCB3ZWIKKyAqIHNpdGVzIGNhbiBjcmVhdGUg
YW5kIGFjY2VzcyBvbiBhIGxvY2FsIGNvbXB1dGVyIHRocm91Z2ggSmF2YVNjcmlwdC4KKyAqCisK
KyAqIFRvIGdldCBhY2Nlc3MgdG8gYWxsIGRhdGFiYXNlcyBkZWZpbmVkIGJ5IGEgc2VjdXJpdHkg
b3JpZ2luLCB1c2UKKyAqICN3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZXMuIEVh
Y2ggZGF0YWJhc2UgaGFzIGFuIGludGVybmFsCisgKiBuYW1lLCBhcyB3ZWxsIGFzIGEgdXNlci1m
cmllbmRseSBkaXNwbGF5IG5hbWUuCisgKiAKKyAqIFdlYktpdCB1c2VzIFNRTGl0ZSB0byBjcmVh
dGUgYW5kIGFjY2VzcyB0aGUgbG9jYWwgU1FMIGRhdGFiYXNlcy4gVGhlIGxvY2F0aW9uCisgKiBv
ZiBhICNXZWJLaXRXZWJEYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgd3RoICN3ZWJraXRfd2ViX2Rh
dGFiYXNlX2dldF9wYXRoLgorICogWW91IGNhbiBjb25maWd1cmUgdGhlIGxvY2F0aW9uIG9mIGFs
bCBkYXRhYmFzZXMgd2l0aAorICogI3dlYmtpdF9zZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgu
CisgKiAKKyAqIEZvciBlYWNoIGRhdGFiYXNlIHRoZSB3ZWIgc2l0ZSBjYW4gZGVmaW5lIGFuIGVz
aW1hdGVkIHNpemUgd2hpY2ggY2FuIGJlCisgKiBhY2Nlc3NlZCB3aXRoICN3ZWJraXRfd2ViX2Rh
dGFiYXNlX2dldF9leHBlY3RlZF9zaXplLiBUaGUgY3VycmVudCBzaXplIG9mIHRoZQorICogZGF0
YWJhc2UgaW4gYnl0ZXMgaXMgcmV0dXJuZWQgYnkgI3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3Np
emUuCisgKiAKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIHRoZSBXZWIgRGF0YWJh
c2Ugc3BlY2lmaWNhdGlvbiBwcm9wb3NhbCBhdAorICogIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1
L3dlYmRhdGFiYXNlCisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorCisgICAgUFJPUF9PUklHSU4sCisgICAgUFJPUF9OQU1FLAorICAgIFBST1Bf
RElTUExBWV9OQU1FLAorICAgIFBST1BfRVhQRUNURURfU0laRSwKKyAgICBQUk9QX1NJWkUsCisg
ICAgUFJPUF9QQVRICit9OworCitHX0RFRklORV9UWVBFKFdlYktpdFdlYkRhdGFiYXNlLCB3ZWJr
aXRfd2ViX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1Y3QgX1dlYktpdFdlYkRhdGFi
YXNlUHJpdmF0ZSB7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbjsKKyAgICBnY2hh
ciogbmFtZTsKKyAgICBnY2hhciogZGlzcGxheV9uYW1lOworICAgIGdjaGFyKiBwYXRoOworfTsK
Kworc3RhdGljIGdjaGFyKiB3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGggPSBOVUxMOwor
c3RhdGljIGd1aW50NjQgd2Via2l0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEgPSA1ICogMTAyNCAq
IDEwMjQ7CisKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9HRVRfUFJJVkFURShvYmopIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFT
RSwgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9k
YXRhYmFzZV9zZXRfb3JpZ2luKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UsIFdlYktp
dFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pOworCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2RhdGFiYXNlX3NldF9uYW1lKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UsIGNv
bnN0IGdjaGFyKiBuYW1lKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFi
YXNlID0gV0VCS0lUX1dFQl9EQVRBQkFTRShvYmplY3QpOworICAgIFdlYktpdFdlYkRhdGFiYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2OworCisgICAgaWYgKHByaXYtPm9yaWdp
bikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+b3JpZ2luKTsKKworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF93ZWJfZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlID0gV0VC
S0lUX1dFQl9EQVRBQkFTRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAg
Y2FzZSBQUk9QX09SSUdJTjoKKyAgICAgICAgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfb3JpZ2lu
KHdlYl9kYXRhYmFzZSwgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihnX3ZhbHVlX2dldF9vYmplY3Qo
dmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3
ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKHdlYl9kYXRhYmFzZSwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNl
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRh
YmFzZSA9IFdFQktJVF9XRUJfREFUQUJBU0Uob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJEYXRhYmFz
ZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKworICAgIHN3aXRjaCAocHJvcF9p
ZCkgeworICAgIGNhc2UgUFJPUF9PUklHSU46CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgcHJpdi0+b3JpZ2luKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6
CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfbmFtZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElT
UExBWV9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJf
ZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfRVhQRUNURURfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0
KHZhbHVlLCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplKHdlYkRhdGFiYXNl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFOgorICAgICAgICBnX3ZhbHVl
X3NldF91aW50NjQodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUod2ViRGF0YWJh
c2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVEg6CisgICAgICAgIGdfdmFs
dWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcGF0aCh3ZWJEYXRh
YmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9jbGFz
c19pbml0KFdlYktpdFdlYkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2Ns
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVj
dF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfcHJvcGVydHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOm9yaWdp
bjoKKyAgICAgICoKKyAgICAgICogVGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJhc2Uu
CisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9PUklHSU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgib3Jp
Z2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIk9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJh
c2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpuYW1lOgorICAgICAg
KgorICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlLgorICAgICAg
KgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfTkFNRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJuYW1lIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk5h
bWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBuYW1lIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0V2Vi
RGF0YWJhc2U6ZGlzcGxheS1uYW1lOgorICAgICAgKgorICAgICAgKiBUaGUgZGlzcGxheSBuYW1l
IG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAx
LjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdF9jbGFzcywgUFJPUF9ESVNQTEFZX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZGlzcGxheS1uYW1lIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRpc3Bs
YXkgTmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgV2ViIFN0cm9hZ2UgZGF0YWJh
c2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgICAvKioKKyAgICAg
KiBXZWJLaXRXZWJEYXRhYmFzZTpleHBlY3RlZC1zaXplCisgICAgICoKKyAgICAgKiBUaGUgZXhw
ZWN0ZWQgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMgYXMgZGVmaW5lZCBieSB0aGUgd2Vi
IGF1dGhvci4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgKi8KKyAgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0VYUEVDVEVE
X1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVj
dGVkLXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJF
eHBlY3RlZCBTaXplIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpzaXplCisgICAg
ICoKKyAgICAgKiBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBkYXRhYmFzZSBpbiBieXRlcy4KKyAg
ICAgKgorICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX1NJWkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpemUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJTaXplIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBjdXJyZW50IHNpemUgb2YgdGhlIFdlYiBEYXRhYmFz
ZSBkYXRhYmFzZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgIC8qKgorICAgICAgKiBXZWJLaXRXZWJE
YXRhYmFzZTpwYXRoOgorICAgICAgKgorICAgICAgKiBUaGUgZmlsZXN5c3RlbSBwYXRoIG9mIHRo
ZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMK
KyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9j
bGFzcywgUFJPUF9QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoInBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUGF0aCIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGZpbGVzeXN0ZW0g
cGF0aCBvZiB0aGUgV2ViIFN0cm9hZ2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X2RhdGFiYXNlX2luaXQoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICB3
ZWJfZGF0YWJhc2UtPnByaXYgPSBXRUJLSVRfV0VCX0RBVEFCQVNFX0dFVF9QUklWQVRFKHdlYl9k
YXRhYmFzZSk7Cit9CisKKy8vIEludGVybmFsIHVzZSBvbmx5CitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2RhdGFiYXNlX3NldF9vcmlnaW4oV2ViS2l0V2ViRGF0YWJhc2UgKndlYl9kYXRhYmFzZSwg
V2ViS2l0U2VjdXJpdHlPcmlnaW4gKnNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViX2RhdGFiYXNlKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbikpOwor
CisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2
OworCisgICAgaWYgKHByaXYtPm9yaWdpbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+
b3JpZ2luKTsKKworICAgIGdfb2JqZWN0X3JlZihzZWN1cml0eV9vcmlnaW4pOworICAgIHByaXYt
Pm9yaWdpbiA9IHNlY3VyaXR5X29yaWdpbjsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9k
YXRhYmFzZV9zZXRfbmFtZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlLCBjb25zdCBn
Y2hhciogbmFtZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJB
U0Uod2ViX2RhdGFiYXNlKSk7CisKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYg
PSB3ZWJfZGF0YWJhc2UtPnByaXY7CisgICAgZ19mcmVlKHByaXYtPm5hbWUpOworICAgIHByaXYt
Pm5hbWUgPSBnX3N0cmR1cChuYW1lKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2RhdGFiYXNl
X2dldF9uYW1lCisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAq
IFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisg
KgorICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlCisgKgorICogU2luY2U6IDEu
MS4xMworICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X25hbWUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIE5VTEwpOwor
ICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsK
KworICAgIHJldHVybiBwcml2LT5uYW1lOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJh
c2VfZ2V0X2Rpc3BsYXlfbmFtZQorICogQHdlYl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0YWJh
c2UKKyAqCisgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UgYXMg
c2VlbiBieSB0aGUgdXNlci4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgZGF0YWJh
c2UgYXMgc2VlbiBieSB0aGUgdXNlci4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NP
TlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lKFdl
YktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCBOVUxMKTsKKworI2lmIEVO
QUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJf
ZGF0YWJhc2UtPnByaXY7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdp
bihwcml2LT5uYW1lLCBjb3JlKHByaXYtPm9yaWdpbikpOworICAgIFdlYkNvcmU6OlN0cmluZyBk
aXNwbGF5TmFtZSA9ICBkZXRhaWxzLmRpc3BsYXlOYW1lKCk7CisKKyAgICBpZiAoIWRpc3BsYXlO
YW1lLmlzRW1wdHkoKSkgeworICAgICAgICBnX2ZyZWUocHJpdi0+ZGlzcGxheV9uYW1lKTsKKyAg
ICAgICAgcHJpdi0+ZGlzcGxheV9uYW1lID0gZ19zdHJkdXAoZGlzcGxheU5hbWUudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIHJldHVybiBwcml2LT5kaXNwbGF5X25hbWU7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyNlbHNlCisgICAgcmV0dXJuICIiOworI2VuZGlm
Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZQorICog
QHdlYl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0YWJhc2UKKyAqCisgKiBSZXR1cm5zIHRoZSBl
eHBlY3RlZCBzaXplIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UgaW4gYnl0ZXMgYXMgZGVmaW5l
ZCBieSB0aGUKKyAqIHdlYiBhdXRob3IuIFRoZSBXZWIgRGF0YWJhc2Ugc3RhbmRhcmQgYWxsb3dz
IHdlYiBhdXRob3JzIHRvIHNwZWNpZnkgYW4gZXhwZWN0ZWQKKyAqIHNpemUgb2YgdGhlIGRhdGFi
YXNlIHRvIG9wdGltaXplIHRoZSB1c2VyIGV4cGVyaWVuY2UuCisgKgorICogUmV0dXJuczogdGhl
IGV4cGVjdGVkIHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5dGVzCisgKgorICogU2luY2U6IDEu
MS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXpl
KFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCAwKTsKKworI2lmIEVO
QUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJf
ZGF0YWJhc2UtPnByaXY7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdp
bihwcml2LT5uYW1lLCBjb3JlKHByaXYtPm9yaWdpbikpOworICAgIHJldHVybiBkZXRhaWxzLmV4
cGVjdGVkVXNhZ2UoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoqCisg
KiB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zaXplCisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJL
aXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSAjV2Vi
S2l0V2ViRGF0YWJhc2Ugc3BhY2Ugb24gZGlzayBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgYWN0dWFsIHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5dGVzCisgKgorICogU2luY2U6IDEu
MS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zaXplKFdlYktpdFdl
YkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCAwKTsKKworI2lmIEVOQUJMRShEQVRB
QkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2Ut
PnByaXY7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihwcml2LT5u
YW1lLCBjb3JlKHByaXYtPm9yaWdpbikpOworICAgIHJldHVybiBkZXRhaWxzLmN1cnJlbnRVc2Fn
ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93
ZWJfZGF0YWJhc2VfZ2V0X3BhdGgKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFi
YXNlCisgKgorICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGZp
bGUgb24gZGlzay4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZmlsZXN5c3RlbSBwYXRoIG9mIHRoZSBk
YXRhYmFzZQorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK0dfQ09OU1RfUkVUVVJOIGdjaGFy
KiB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wYXRoKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0
YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFT
RSh3ZWJfZGF0YWJhc2UpLCBOVUxMKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJL
aXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisgICAgV2Vi
Q29yZTo6U3RyaW5nIGNvcmVOYW1lID0gV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChwcml2LT5u
YW1lKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgY29yZVBhdGggPSBXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKGNvcmUocHJpdi0+b3JpZ2luKSwg
Y29yZU5hbWUpOworCisgICAgaWYgKCFjb3JlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ19m
cmVlKHByaXYtPnBhdGgpOworICAgICAgICBwcml2LT5wYXRoID0gZ19zdHJkdXAoY29yZVBhdGgu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBwcml2LT5wYXRoOworICAgIH0gZWxzZSB7
CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisjZWxzZQorICAgIHJldHVybiAiIjsKKyNlbmRp
ZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlOgorICogQHdlYl9kYXRh
YmFzZTogYSAjV2ViS2l0V2ViRGF0YWJhc2UKKyAqCisgKiBSZW1vdmVzIHRoZSAjV2ViS2l0V2Vi
RGF0YWJhc2UgZnJvbSBpdHMgc2VjdXJpdHkgb3JpZ2luIGFuZCBkZXN0cm95cyBhbGwgZGF0YQor
ICogc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2
b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0
YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdl
Yl9kYXRhYmFzZSkpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFi
YXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVEYXRhYmFzZShjb3JlKHByaXYtPm9yaWdpbiks
IHByaXYtPm5hbWUpOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3JlbW92ZV9hbGxfd2Vi
X2RhdGFiYXNlczoKKyAqCisgKiBSZW1vdmVzIGFsbCB3ZWIgZGF0YWJhc2VzIGZyb20gdGhlIGN1
cnJlbnQgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGguCisgKgorICogU2luY2U6IDEuMS4xMworICoq
Lwordm9pZCB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKCkKK3sKKyNpZiBFTkFCTEUo
REFUQUJBU0UpCisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRl
QWxsRGF0YWJhc2VzKCk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfZ2V0X2RhdGFiYXNl
X2RpcmVjdG9yeV9wYXRoOgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aCB0byB0aGUg
ZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAqIERhdGFiYXNlIGRhdGFiYXNlcy4g
QnkgZGVmYXVsdCB0aGlzIHBhdGggd2lsbCBiZSBpbiB0aGUgdXNlciBkYXRhCisgKiBkaXJlY3Rv
cnkuCisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgK
KyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0
X2dldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCgpCit7CisjaWYgRU5BQkxFKERBVEFCQVNFKQor
ICAgIFdlYkNvcmU6OlN0cmluZyBwYXRoID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkuZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCk7CisgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkg
eworICAgICAgICBnX2ZyZWUod2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKTsKKyAgICAg
ICAgd2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoID0gZ19zdHJkdXAocGF0aC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aDsK
KyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorI2Vsc2UKKyAgICByZXR1
cm4gIiI7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfc2V0X2RhdGFiYXNlX2RpcmVjdG9y
eV9wYXRoOgorICogQHBhdGg6IHRoZSBuZXcgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgKKyAqCisg
KiBTZXRzIHRoZSBjdXJyZW50IHBhdGggdG8gdGhlIGRpcmVjdG9yeSBXZWJLaXQgd2lsbCB3cml0
ZSBXZWIgCisgKiBEYXRhYmFzZSBkYXRhYmFzZXMuIAorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAq
Ki8KK3ZvaWQgd2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aChjb25zdCBnY2hhciog
cGF0aCkKK3sKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U3RyaW5nIGNvcmVQ
YXRoID0gV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChwYXRoKTsKKyAgICBXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoY29yZVBhdGgp
OworCisgICAgZ19mcmVlKHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCk7CisgICAgd2Vi
a2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoID0gZ19zdHJkdXAoY29yZVBhdGgudXRmOCgpLmRh
dGEoKSk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJhc2Vf
cXVvdGE6CisgKgorICogUmV0dXJucyB0aGUgZGVmYXVsdCBxdW90YSBmb3IgV2ViIERhdGFiYXNl
IGRhdGFiYXNlcy4gQnkgZGVmYXVsdAorICogdGhpcyB2YWx1ZSBpcyA1TUIuCisgCisgKiBSZXR1
cm5zOiB0aGUgY3VycmVudCBkZWZhdWx0IGRhdGFiYXNlIHF1b3RhIGluIGJ5dGVzCisgKgorICog
U2luY2U6IDEuMS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJhc2Vf
cXVvdGEoKQoreworICAgIHJldHVybiB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YTsKK30K
KworLyoqCisgKiB3ZWJraXRfc2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGE6CisgKiBAZGVmYXVs
dF9xdW90YTogdGhlIG5ldyBkZWZhdWx0YSBkYXRhYmFzZSBxdW90YQorICoKKyAqIFNldHMgdGhl
IGN1cnJlbnQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAq
IERhdGFiYXNlIGRhdGFiYXNlcy4gCisgKgorICogU2luY2U6IDEuMS4xMworICoqLwordm9pZCB3
ZWJraXRfc2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEoZ3VpbnQ2NCBkZWZhdWx0X3F1b3RhKQor
eworICAgIHdlYmtpdF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhID0gZGVmYXVsdF9xdW90YTsKK30K
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjRmYTNmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkYXRhYmFzZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fV0VCS0lUX1dFQl9EQVRBQkFTRV9IX18K
KyNkZWZpbmUgX19XRUJLSVRfV0VCX0RBVEFCQVNFX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKworI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UgICAgICAgICAgICAgKHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRShv
YmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZSkpCisjZGVmaW5lIFdFQktJVF9X
RUJfREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJhc2VDbGFzcykp
CisjZGVmaW5lIFdFQktJVF9JU19XRUJfREFUQUJBU0Uob2JqKSAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSkpCisjZGVm
aW5lIFdFQktJVF9JU19XRUJfREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSkpCisjZGVmaW5lIFdF
QktJVF9XRUJfREFUQUJBU0VfR0VUX0NMQVNTKG9iaikgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJhc2VD
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUgV2ViS2l0
V2ViRGF0YWJhc2VQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlIHsKKyAgICBH
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktp
dFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViRGF0YWJh
c2VDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRp
bmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEp
ICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDQpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3JpZ2luKgord2Vi
a2l0X3dlYl9kYXRhYmFzZV9nZXRfb3JpZ2luICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3
ZWJfZGF0YWJhc2UpOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfbmFtZSAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJf
ZGF0YWJhc2UpOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0X3dl
Yl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0
YWJhc2UpOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2V4
cGVjdGVkX3NpemUgIChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lU
X0FQSSBndWludDY0Cit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zaXplICAgICAgICAgICAoV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRV
Uk4gZ2NoYXIqCit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wYXRoICAgICAgICAgICAoV2ViS2l0
V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dl
Yl9kYXRhYmFzZV9yZW1vdmUgICAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0
YWJhc2UpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFz
ZXMgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dl
YmtpdF9nZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGggICAgICh2b2lkKTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfc2V0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoICAgICAoY29uc3QgZ2No
YXIqIHBhdGgpOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9nZXRfZGVmYXVsdF9kYXRh
YmFzZV9xdW90YSAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfc2V0X2Rl
ZmF1bHRfZGF0YWJhc2VfcXVvdGEgICAgICAoZ3VpbnQ2NCBkZWZhdWx0X3F1b3RhKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIF9fV0VCS0lUX1dFQl9EQVRBQkFTRV9IX18gKi8KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCBmYmEwODRlLi5mOWE3NDJlIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKKysrIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC04ODMsMyArODgzLDIxIEBAIEF0a09iamVj
dCogd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lCiAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIH0KKworLyoqCisgKiB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9vcmlnaW46CisgKiBAZnJhbWU6IGEgI1dlYktpdFdlYkZyYW1l
CisgKgorICogUmV0dXJucyB0aGUgQGZyYW1lJ3Mgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJl
dHVybiB2YWx1ZTogdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiBAZnJhbWUKKyAqLworV2ViS2l0U2Vj
dXJpdHlPcmlnaW4qIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X29yaWdpbihXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCit7CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnByaXY7
CisgICAgaWYgKCFwcml2LT5jb3JlRnJhbWUgfHwgIXByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3Jp
Z2luID0ga2l0KHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7
CisgICAgcmV0dXJuIG9yaWdpbjsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmZyYW1lLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oCmluZGV4
IGIyZTYxYjkuLjEwNGQwNWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmZyYW1lLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaApAQCAtMTUy
LDYgKzE1Miw5IEBAIHdlYmtpdF93ZWJfZnJhbWVfcHJpbnQgICAgICAgICAgICAgIChXZWJLaXRX
ZWJGcmFtZSAgICAgICAqZnJhbWUpOwogV0VCS0lUX0FQSSBXZWJLaXRMb2FkU3RhdHVzCiB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF9sb2FkX3N0YXR1cyAgICAoV2ViS2l0V2ViRnJhbWUgICAgICAgKmZy
YW1lKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0eU9yaWdpbioKK3dlYmtpdF93ZWJfZnJh
bWVfZ2V0X29yaWdpbiAgICAgICAgIChXZWJLaXRXZWJGcmFtZSAgICAgICAqZnJhbWUpOworCiBH
X0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXgg
ZWM1OWU2MC4uZGE2MzUwNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTE0
Miw2ICsxNDIsNyBAQCBlbnVtIHsKICAgICBQUklOVF9SRVFVRVNURUQsCiAgICAgUExVR0lOX1dJ
REdFVCwKICAgICBDTE9TRV9XRUJfVklFVywKKyAgICBEQVRBQkFTRV9RVU9UQV9FWENFRURFRCwK
ICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTc3NCw2ICsxNzc1LDI5IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0Ns
YXNzKQogICAgICAgICAgICAgR1RLX1RZUEVfV0lER0VULCAzLAogICAgICAgICAgICAgR19UWVBF
X1NUUklORywgR19UWVBFX1NUUklORywgR19UWVBFX0hBU0hfVEFCTEUpOwogCisgICAgLyoqCisg
ICAgICogV2ViS2l0V2ViVmlldzo6ZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQKKyAgICAgKiBAd2Vi
X3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEBmcmFt
ZTogdGhlIHJlbGV2YW50IGZyYW1lCisgICAgICogQGRhdGFiYXNlOiB0aGUgI1dlYktpdFdlYkRh
dGFiYXNlIHdoaWNoIGV4Y2VlZGVkIHRoZSBxdW90YSBvZiBpdHMgI1dlYktpdFNlY3VyaXR5T3Jp
Z2luCisgICAgICogQHBhcmFtOiBhICNHSGFzaFRhYmxlIHdpdGggYWRkaXRpb25hbCBhdHRyaWJ1
dGVzIChzdHJpbmdzKQorICAgICAqCisgICAgICogVGhlICNXZWJLaXRXZWJWaWV3OjpkYXRhYmFz
ZS1leGNlZWRlZC1xdW90YSBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIHdoZW4KKyAgICAgKiBhIFdl
YiBEYXRhYmFzZSBleGNlZWRzIHRoZSBxdW90YSBvZiBpdHMgc2VjdXJpdHkgb3JpZ2luLiBUaGlz
IHNpZ25hbAorICAgICAqIG1heSBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBx
dW90YSBiZWZvcmUgdGhlIG9yaWdpbmF0aW5nCisgICAgICogb3BlcmF0aW9uIGZhaWxzLgorICAg
ICAqCisgICAgICogU2luY2U6IDEuMS4xMworICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19z
aWduYWxzW1BMVUdJTl9XSURHRVRdID0gZ19zaWduYWxfbmV3KCJkYXRhYmFzZS1xdW90YS1leGNl
ZWRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAg
ICAgICAgICAgKEdTaWduYWxGbGFncykgKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNU
SU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAg
ICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAyLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX09CSkVDVCk7CisK
ICAgICAvKgogICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAg
Ki8KLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34675</attachid>
            <date>2009-08-12 10:43:35 -0700</date>
            <delta_ts>2009-08-15 15:32:56 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>0001-First-stab-at-database-API.patch</filename>
            <type>text/plain</type>
            <size>53105</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSAzMzk4MmJmZThmODU0ZmYwYzIxMWNkZmNhOWQ5OTQ1YTJmNWRlZDk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPE1hcnRpbiBSb2JpbnNvbj4KRGF0
ZTogV2VkLCAxMiBBdWcgMjAwOSAxMDozNjoxMSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEZpcnN0
IHN0YWIgYXQgZGF0YWJhc2UgQVBJLgoKLS0tCiBHTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQgICAgICAgICAgICAgICAgICAgfCAgICA5IC0KIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCAgICAgIHwgICAxNCArLQogV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcCAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgICAgNSAr
CiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAgICAgICAgICB8ICA0
NDcgKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3Jp
Z2luLmggICAgICAgICAgIHwgICA4NiArKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJk
YXRhYmFzZS5jcHAgICAgICAgICAgICB8ICA1MjAgKysrKysrKysrKysrKysrKysrKysKIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggICAgICAgICAgICAgIHwgICA5NSArKysr
CiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgICAgICAgICAgICAgICB8ICAg
MTggKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCAgICAgICAgICAgICAgICAg
fCAgICAzICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwICAgICAgICAgICAg
ICAgIHwgICAyNCArCiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRy
ZWUuY3BwICB8ICAgMTggKwogLi4uL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJv
bGxlckd0ay5jcHAgfCAgICA3ICstCiAxNiBmaWxlcyBjaGFuZ2VkLCAxMjQ2IGluc2VydGlvbnMo
KyksIDE5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oCgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZp
bGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCBlZmFjMzE5Li5hNzhhZTljIDEwMDY0NAotLS0g
YS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzI4LDYgKzMyOCw4IEBA
IHdlYmtpdGd0a19oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaW5zcGVj
dG9yLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaCBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uaCBcCisJV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c2VjdXJpdHlvcmlnaW4uaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGlu
Z3MuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaCBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC0zNjcsNiArMzY5LDEwIEBAIHdl
YmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0
b3IuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNw
cCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKKwlX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgXAorCVdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3Vy
aXR5b3JpZ2luLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4u
aCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vid2luZG93ZmVhdHVyZXMuY3BwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGI3MjNh
MmMuLjUwOGUzOTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC00MDMyLDEyICs0MDMy
LDYgQEAgc2VjdXJpdHkvYXV0b2NvbXBsZXRlLWNsZWFyZWQtb24tYmFjay5odG1sCiBzZWN1cml0
eS9ibG9jay10ZXN0LW5vLXBvcnQuaHRtbAogc2VjdXJpdHkvYmxvY2stdGVzdC5odG1sCiAKLSMg
VGVzdHMgaW4gc3RvcmFnZS8gZGlyZWN0b3J5Ci0jICAgVGVzdHMgZmFpbGluZwotc3RvcmFnZS9x
dW90YS10cmFja2luZy5odG1sCi1zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3dpbmRv
dy1vcGVuLmh0bWwKLXN0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS93aW5kb3ctb3Bl
bi5odG1sCi0KICMgVGVzdHMgaW4gc3ZnLyBkaXJlY3RvcnkKICMgICBUZXN0cyBmYWlsaW5nCiBz
dmcvY3VzdG9tL2VtYmVkZGVkLXN2Zy1kaXNhbGxvd2VkLWluLWRhc2hib2FyZC54bWwKQEAgLTU5
MzQsOSArNTkyOCw2IEBAIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wt
YmFzaWMtYWxsb3ctcHJlZmxpZ2h0LWNhY2hlLmh0bWwKIGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvY2FjaGUtb3ZlcnJpZGUuaHRtbAogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zbWFsbC1j
aHVua3MtcmVzcG9uc2UtdGV4dC5odG1sCiAKLSMgUkVHUkVTU0lPTjogU2VlIEJ1ZyAjMjcxNDQg
LSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxNDQKLXN0b3JhZ2Uv
ZGF0YWJhc2UtbG9jay1hZnRlci1yZWxvYWQuaHRtbAotCiAjIFNlZSBCdWcgIzI3NjM3IC0gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjM3CiBmYXN0L2hpc3Rvcnkv
c2F2ZXMtc3RhdGUtYWZ0ZXItZnJhZ21lbnQtbmF2Lmh0bWwKIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IDEyOTJlOTkuLmM3ZGVhZWMgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAor
KysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTQ1
OSwxMyArNDU5LDE3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJhbWUpCiB9
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi12b2lkIENocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRh
YmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ2hyb21lQ2xpZW50
OjpleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSkKIHsKLSAgICAvLyBTZXQgdG8gNU0gZm9yIHRlc3RpbmcKLSAgICAvLyBGSVhNRTog
TWFrZSB0aGlzIGNvbmZpZ3VyYWJsZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29uc3Qg
dW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICBn
dWludDY0IGRlZmF1bHRRdW90YSA9IHdlYmtpdF9nZXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YSgp
OwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKGZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLCBkZWZhdWx0UXVvdGEpOworCisgICAgV2ViS2l0V2ViRnJh
bWUqIHdlYkZyYW1lID0ga2l0KGZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
Z2V0Vmlld0Zyb21GcmFtZSh3ZWJGcmFtZSk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiog
b3JpZ2luID0ga2l0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBX
ZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9kYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImRhdGFiYXNlLXF1b3RhLWV4Y2VlZGVkIiwgd2Vi
RnJhbWUsIHdlYkRhdGFiYXNlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGMyMjE2
NWUuLjhlZWNkYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdl
YnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25h
Y3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
ZW51bXR5cGVzLmg+CiAKICNlbmRpZiAvKiBfX1dFQktJVF9IX18gKi8KZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRlZmluZXMuaAppbmRleCBiMGFiNWU5Li5hM2EyMTI5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVm
aW5lcy5oCkBAIC03MSw2ICs3MSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIFdlYktpdFdlYlZpZXdDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCBX
ZWJLaXREb3dubG9hZDsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdlYktp
dERvd25sb2FkQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZSBXZWJL
aXRXZWJEYXRhYmFzZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZUNsYXNzIFdl
YktpdFdlYkRhdGFiYXNlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9y
aWdpbiBXZWJLaXRTZWN1cml0eU9yaWdpbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0
eU9yaWdpbkNsYXNzIFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcAppbmRleCA3NTViNGQzLi5mNDI2
OWRiIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcApAQCAtMTU2LDkgKzE1NiwxMCBA
QCB2b2lkIHdlYmtpdF9pbml0KCkKICAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+c2V0Q2FwYWNp
dHkoMyk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgLy8gRklYTUU6IEl0IHNob3VsZCBi
ZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGlzIGRlZmF1
bHQgbG9jYXRpb24KICAgICBnY2hhciogZGF0YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVu
YW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIsICJkYXRhYmFzZXMiLCBOVUxMKTsK
LSAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURpcmVj
dG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIHdlYmtpdF9zZXRfZGF0YWJhc2VfZGly
ZWN0b3J5X3BhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworCisgICAgLy8gRklYTUU6IEl0IHNob3Vs
ZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVm
YXVsdCBhcHBjYWNoZSBsb2NhdGlvbgogICAgIFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLnNldENh
Y2hlRGlyZWN0b3J5KGRhdGFiYXNlRGlyZWN0b3J5KTsKICAgICBnX2ZyZWUoZGF0YWJhc2VEaXJl
Y3RvcnkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2
YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggMGMzZmJkMy4u
NzE4MWRhZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisr
KyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4u
aD4KIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgPGVuY2hhbnQuaD4K
QEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUg
PGdsaWIuaD4KQEAgLTc3LDYgKzc5LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViQ29y
ZTo6TmF2aWdhdGlvblR5cGUgY29yZShXZWJLaXRXZWJOYXZpZ2F0aW9uUmVhc29uIHJlYXNvbik7
CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgY29yZShXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbioga2l0KFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luKik7CisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmUoV2ViS2l0
U2VjdXJpdHlPcmlnaW4qKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI2OWNiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzZWN1cml0eW9yaWdpbi5jcHAKQEAgLTAsMCArMSw0NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmRhdGFiYXNlLmgiCisjaW5jbHVkZSAid2Vi
a2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZVRyYWNrZXIuaCIKKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHdlYmRhdGFiYXNlCisgKiBAc2hv
cnRfZGVzY3JpcHRpb246IEEgc2VjdXJpdHkgYm91bmRhcnkgZm9yIHdlYiBzaXRlcworICoKKyAq
ICNXZWJLaXRTZWN1cml0eU9yaWdpbiBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VjdXJpdHkg
ZG9tYWluIGRlZmluZWQKKyAqIGJ5IHdlYiBzaXRlcy4gQW4gb3JpZ2luIGNvbnNpc3RzIG9mIGEg
aG9zdCBuYW1lLCBhIHNjaGVtZSwgYW5kIGEgcG9ydAorICogbnVtYmVyLiBXZWIgc2l0ZXMgd2l0
aCB0aGUgc2FtZSBzZWN1cml0eSBvcmlnaW4gY2FuIGFjY2VzcyBlYWNoIG90aGVyJ3MKKyAqIHJl
c291cmNlcyBmb3IgY2xpZW50LXNpZGUgc2NyaXB0aW5nIG9yIGRhdGFiYXNlIGFjY2Vzcy4KKyAq
IAorICogVXNlICN3ZWJraXRfd2ViX2ZyYW1lX2dldF9vcmlnaW4gdG8gZ2V0IHRoZSBzZWN1cml0
eSBvcmlnaW4gb2YgYQorICogI1dlYktpdFdlYkZyYW1lLgorICoKKyAqIERhdGFiYXNlIHF1b3Rh
cyBhbmQgdXNhZ2VzIGFyZSBhbHNvIGRlZmluZWQgcGVyIHNlY3VyaXR5IG9yaWdpbi4gVGhlCisg
KiBjdW11bGF0aXZlIGRpc2sgdXNhZ2Ugb2YgYW4gb3JpZ2luJ3MgZGF0YWJhc2VzIG1heSBiZSBy
ZXRyaWV2ZWQgd2l0aAorICogI3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlX3Vz
YWdlLiBBbiBvcmlnaW4ncyBxdW90YSBjYW4gYmUKKyAqIGFkanVzdGVkIHdpdGggI3dlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhLgorICovCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfUFJPVE9DT0wsCisg
ICAgUFJPUF9IT1NULAorICAgIFBST1BfUE9SVCwKKyAgICBQUk9QX0RBVEFCQVNFX1VTQUdFLAor
ICAgIFBST1BfREFUQUJBU0VfUVVPVEEKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0U2VjdXJp
dHlPcmlnaW4sIHdlYmtpdF9zZWN1cml0eV9vcmlnaW4sIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVj
dCBfV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4+IGNvcmVPcmlnaW47CisgICAgZ2NoYXIqIHByb3RvY29sOworICAgIGdjaGFy
KiBob3N0OworICAgIEdIYXNoVGFibGUqIHdlYkRhdGFiYXNlczsKKworICAgIGdib29sZWFuIGRp
c3Bvc2VkOworfTsKKworI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dFVF9QUklWQVRF
KG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfU0VD
VVJJVFlfT1JJR0lOLCBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUpKQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4gPSBXRUJLSVRfU0VDVVJJVFlf
T1JJR0lOKG9iamVjdCk7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0g
c2VjdXJpdHlPcmlnaW4tPnByaXY7CisKKyAgICBpZiAoIXByaXYtPmRpc3Bvc2VkKSB7CisgICAg
ICAgIHByaXYtPmNvcmVPcmlnaW4tPmRlcmVmKCk7CisgICAgICAgIGdfaGFzaF90YWJsZV9kZXN0
cm95KHByaXYtPndlYkRhdGFiYXNlcyk7CisgICAgICAgIHByaXYtPmRpc3Bvc2VkID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhzZWN1cml0eU9yaWdpbiktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5
T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0RBVEFCQVNFX1FVT1RBOgorICAgICAgICB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YShzZWN1cml0eU9yaWdpbiwgZ192YWx1
ZV9nZXRfdWludDY0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IFdFQktJVF9TRUNVUklUWV9PUklHSU4ob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9w
cm90b2NvbChzZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SE9TVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX2dldF9ob3N0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9QT1JUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wb3J0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9EQVRBQkFTRV9VU0FHRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0
KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZShzZWN1cml0
eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQUJBU0VfUVVPVEE6
CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9nZXRfZGF0YWJhc2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dIYXNo
VGFibGUqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJs
ZSogc2VjdXJpdHlPcmlnaW5zID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gs
IGdfZGlyZWN0X2VxdWFsLCBOVUxMLCBnX29iamVjdF91bnJlZik7CisgICAgcmV0dXJuIHNlY3Vy
aXR5T3JpZ2luczsKK30KKwordm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2FkZChXZWJLaXRT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdp
bikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4ob3Jp
Z2luKSk7CisKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5z
KCk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydCh0YWJsZSwgY29yZU9yaWdpbiwgb3JpZ2luKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0KFdlYktp
dFNlY3VyaXR5T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2NsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZmluYWxpemU7CisgICAgZ29iamVjdF9jbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfcHJvcGVydHk7Cisg
ICAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfcHJvcGVydHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOnBy
b3RvY29sOgorICAgICAgKgorICAgICAgKiBUaGUgcHJvdG9jb2wgb2YgdGhlIHNlY3VyaXR5IG9y
aWdpbi4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX1BST1RPQ09M
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoInByb3RvY29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIlByb3RvY29sIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgcHJvdG9jb2wgb2YgdGhlIHNl
Y3VyaXR5IG9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
IC8qKgorICAgICAgKiBXZWJLaXRTZWN1cml0eU9yaWdpbjpob3N0OgorICAgICAgKgorICAgICAg
KiBUaGUgaG9zdCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICAgICAgKgorICAgICAgKiBTaW5j
ZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KGdvYmplY3RfY2xhc3MsIFBST1BfSE9TVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJob3N0IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkhvc3QiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBo
b3N0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJpdHlPcmlnaW46cG9ydDoKKyAg
ICAgICoKKyAgICAgICogVGhlIHBvcnQgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICoK
KyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX1BPUlQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoInBvcnQiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlBvcnQiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJpdHlP
cmlnaW46ZGF0YWJhc2UtdXNhZ2U6CisgICAgICAqCisgICAgICAqIFRoZSBjdW11bGF0aXZlIHNp
emUgb2YgYWxsIGRhdGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIGJ5dGVzLgorICAg
ICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0RBVEFCQVNFX1VTQUdFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFiYXNlLXVz
YWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRhdGFi
YXNlIFVzYWdlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9y
aWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19N
QVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAgIC8qKgorICAgICAgKiBXZWJLaXRTZWN1cml0
eU9yaWdpbjpkYXRhYmFzZS1xdW90YToKKyAgICAgICoKKyAgICAgICogVGhlIGRhdGFiYXNlIHFv
dXRhIG9mIHRoZSBzZWN1cml0eSBvcmlnaW4gaW4gYnl0ZXMuCisgICAgICAqCisgICAgICAqIFNp
bmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RfY2xhc3MsIFBST1BfREFUQUJBU0VfUVVPVEEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YWJhc2UtcXVvdGEiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGF0YWJhc2UgUXVvdGEiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBkYXRhYmFzZSBx
dW90YSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIGJ5dGVzIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFNlY3Vy
aXR5T3JpZ2luUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2luaXQoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBX
ZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lO
X0dFVF9QUklWQVRFKHNlY3VyaXR5X29yaWdpbik7CisgICAgcHJpdi0+d2ViRGF0YWJhc2VzID0g
Z19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdf
b2JqZWN0X3VucmVmKTsKKyAgICBzZWN1cml0eV9vcmlnaW4tPnByaXYgPSBwcml2OworfQorCisv
KioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sOgorICogQHNlY3VyaXR5
X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBwcm90
b2NvbCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcHJvdG9j
b2wgZm9yIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitH
X0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wo
V2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5V
TEwpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlf
b3JpZ2luLT5wcml2OworICAgIFdlYkNvcmU6OlN0cmluZyBwcm90b2NvbCA9ICBwcml2LT5jb3Jl
T3JpZ2luLT5wcm90b2NvbCgpOworCisgICAgaWYgKCFwcm90b2NvbC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZ19mcmVlKHByaXYtPnByb3RvY29sKTsKKyAgICAgICAgcHJpdi0+cHJvdG9jb2wgPSBn
X3N0cmR1cChwcm90b2NvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHByaXYtPnBy
b3RvY29sOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKKy8q
KgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdDoKKyAqIEBzZWN1cml0eV9vcmln
aW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgaG9zdG5hbWUg
Zm9yIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgKgorICogUmV0dXJuczogdGhlIGhvc3RuYW1lIGZv
ciB0aGUgc2VjdXJpdHkgb3JpZ2luCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworR19DT05T
VF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QoV2ViS2l0U2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworCisg
ICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3JpZ2luLT5w
cml2OworICAgIFdlYkNvcmU6OlN0cmluZyBob3N0ID0gIHByaXYtPmNvcmVPcmlnaW4tPmhvc3Qo
KTsKKworICAgIGlmICghaG9zdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ19mcmVlKHByaXYtPmhv
c3QpOworICAgICAgICBwcml2LT5ob3N0ID0gZ19zdHJkdXAoaG9zdC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIHByaXYtPmhvc3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJu
ICIiOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0
OgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBS
ZXR1cm5zIHRoZSBwb3J0IGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybnM6
IHRoZSBwb3J0IGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luCisgKgorICogU2luY2U6IDEuMS4xMwor
ICoqLworZ3VpbnQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChXZWJLaXRTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSwgMCk7CisKKyAgICBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlfb3JpZ2luKTsK
KyAgICByZXR1cm4gY29yZU9yaWdpbi0+cG9ydCgpOworfQorCisvKioKKyAqIHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlX3VzYWdlOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAj
V2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBjdW11bGF0aXZlIHNpemUg
b2YgYWxsIFdlYiBEYXRhYmFzZSBkYXRhYmFzZSdzIGluIHRoZSBvcmlnaW4KKyAqIGluIGJ5dGVz
LgorICoKKyAqIFJldHVybnM6IHRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIGRhdGFiYXNlcyAK
KyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitndWludDY0IHdlYmtpdF9zZWN1cml0eV9vcmln
aW5fZ2V0X2RhdGFiYXNlX3VzYWdlKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmln
aW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJ
TihzZWN1cml0eV9vcmlnaW4pLCAwKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlfb3JpZ2luKTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkudXNhZ2VGb3JP
cmlnaW4oY29yZU9yaWdpbik7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8q
KgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VfcXVvdGE6CisgKiBAc2Vj
dXJpdHlfb3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAqIFJldHVybnMgdGhl
IHF1b3RhIGZvciBXZWIgRGF0YWJhc2Ugc3RvcmFnZSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luCisg
KiBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgV2ViIERhdGFiYXNlIHF1b3RhCisgKgor
ICogU2luY2U6IDEuMS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9kYXRhYmFzZV9xdW90YShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2Vj
dXJpdHlfb3JpZ2luKSwgMCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAg
cmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2lu
KGNvcmVPcmlnaW4pOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAq
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhOgorICogQHNlY3VyaXR5
X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqIEBxdW90YTogYSBuZXcgV2ViIERh
dGFiYXNlIHF1b3RhIGluIGJ5dGVzCisgKgorICogQWRqdXN0IHRoZSBxdW90YSBmb3IgV2ViIERh
dGFiYXNlIHN0b3JhZ2Ugb2YgdGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEu
MTMKKyAqKi8KK3ZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2VfcXVvdGEo
V2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbiwgZ3VpbnQ2NCBxdW90YSkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlf
b3JpZ2luKSk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAgV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEoY29yZU9yaWdpbiwgcXVvdGEpOwor
I2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2U6
CisgKiBAc2VjdXJpdHlfb3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICogQG5hbWU6
IHRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZQorICoKKyAqIFJldHJpZXZlIGEgV2ViIERhdGFiYXNl
IGZyb20gdGhlIHNlY3VyaXR5IG9yaWdpbiBnaXZlbiBpdCdzIG5hbWUuCisgKgorICogUmV0dXJu
czogYSAjV2ViS2l0V2ViRGF0YWJhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZQorICoKKyAqIFNpbmNl
OiAxLjEuMTMKKyAqKi8KK1dlYktpdFdlYkRhdGFiYXNlKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF9kYXRhYmFzZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luLCBjb25z
dCBnY2hhciogZGF0YWJhc2VfbmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworCisgICAgV2Vi
S2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3JpZ2luLT5wcml2Owor
ICAgIEdIYXNoVGFibGUqIGRhdGFiYXNlSGFzaCA9IHByaXYtPndlYkRhdGFiYXNlczsKKyAgICBX
ZWJLaXRXZWJEYXRhYmFzZSogZGF0YWJhc2UgPSAoV2ViS2l0V2ViRGF0YWJhc2UqKSBnX2hhc2hf
dGFibGVfbG9va3VwKGRhdGFiYXNlSGFzaCwgZGF0YWJhc2VfbmFtZSk7CisKKyAgICBpZiAoIWRh
dGFiYXNlKSB7CisgICAgICAgIGRhdGFiYXNlID0gIFdFQktJVF9XRUJfREFUQUJBU0UoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJvcmlnaW4iLCBzZWN1cml0eV9vcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsIGRhdGFiYXNlX25hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOworICAgICAgICBnX2hhc2hf
dGFibGVfaW5zZXJ0KGRhdGFiYXNlSGFzaCwgZ19zdHJkdXAoZGF0YWJhc2VfbmFtZSksIGRhdGFi
YXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YWJhc2U7Cit9CisKKy8qKgorICogd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VzOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAj
V2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgV2ViIERh
dGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybnM6IGEgI0dsaXN0
IG9mIGRhdGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFNpbmNlOiAxLjEu
MTMKKyAqKi8KK0dMaXN0KiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZXMoV2Vi
S2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwp
OworICAgIEdMaXN0KiBkYXRhYmFzZXMgPSBOVUxMOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQor
ICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9v
cmlnaW4pOworICAgIFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+IGRhdGFiYXNlTmFtZXM7CisKKyAg
ICBpZiAoIVdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlTmFtZXNG
b3JPcmlnaW4oY29yZU9yaWdpbiwgZGF0YWJhc2VOYW1lcykpCisgICAgICAgIHJldHVybiBkYXRh
YmFzZXM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YWJhc2VOYW1lcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBXZWJLaXRXZWJEYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZShzZWN1cml0eV9vcmlnaW4sIGRhdGFiYXNlTmFt
ZXNbaV0udXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGRhdGFiYXNlcyA9IGdfbGlzdF9hcHBlbmQo
ZGF0YWJhc2VzLCBkYXRhYmFzZSk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZGF0YWJh
c2VzOworfQorCitXZWJLaXRTZWN1cml0eU9yaWdpbiogV2ViS2l0OjpraXQoV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29y
ZU9yaWdpbiwgTlVMTCk7CisKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5zKCk7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IChXZWJLaXRT
ZWN1cml0eU9yaWdpbiopIGdfaGFzaF90YWJsZV9sb29rdXAodGFibGUsIGNvcmVPcmlnaW4pOwor
CisgICAgaWYgKCFvcmlnaW4pIHsKKyAgICAgICAgb3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09S
SUdJTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOLCBOVUxMKSk7Cisg
ICAgICAgIG9yaWdpbi0+cHJpdi0+Y29yZU9yaWdpbiA9IGNvcmVPcmlnaW47CisgICAgICAgIHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fYWRkKG9yaWdpbiwgY29yZU9yaWdpbik7CisgICAgfQorCisg
ICAgcmV0dXJuIG9yaWdpbjsKK30KKworCitXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogV2ViS2l0
Ojpjb3JlKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmln
aW4pLCBOVUxMKTsKKworICAgIHJldHVybiBzZWN1cml0eV9vcmlnaW4tPnByaXYtPmNvcmVPcmln
aW4uZ2V0KCk7Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3Vy
aXR5b3JpZ2luLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmODhiYWYKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4gTWlj
aGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1dFQktJVF9TRUNVUklUWV9PUklHSU5fSF9fCisjZGVm
aW5lIF9fV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9IX18KKworI2luY2x1ZGUgIndlYmtpdHNlY3Vy
aXR5b3JpZ2luLmgiCisjaW5jbHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiAgICAgICAgICAgICAo
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU0VDVVJJ
VFlfT1JJR0lOKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIFdlYktpdFNlY3VyaXR5T3JpZ2luKSkK
KyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOLCBX
ZWJLaXRTZWN1cml0eU9yaWdpbkNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NFQ1VSSVRZX09S
SUdJTihvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NFQ1VSSVRZX09S
SUdJTl9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOKSkKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJ
Tl9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOLCBXZWJLaXRTZWN1cml0eU9yaWdpbkNsYXNzKSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSBXZWJLaXRTZWN1cml0
eU9yaWdpblByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW4geworICAgIEdP
YmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0
U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRTZWN1cml0
eU9yaWdpbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyog
UGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkNCkgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3NlY3VyaXR5
X29yaWdpbl9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0U2VjdXJpdHlPcmln
aW4qCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9vcmlnaW4gICAgICAgICAoV2ViS2l0U2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRV
Uk4gZ2NoYXIqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbCAgICAgICAoV2Vi
S2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkgR19DT05T
VF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0ICAgICAgICAg
ICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkg
Z3VpbnQKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQgICAgICAgICAgIChXZWJLaXRT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3
ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZSAoV2ViS2l0U2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VfcXVvdGEgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIHZvaWQgCit3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX3NldF9kYXRhYmFzZV9xdW90YSAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29y
aWdpbiwgZ3VpbnQ2NCBxdW90YSk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViRGF0YWJhc2UqCit3
ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZSAgICAgICAoV2ViS2l0U2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5X29yaWdpbiwgY29uc3QgY2hhciogZGF0YWJhc2VfbmFtZSk7CisKK1dF
QktJVF9BUEkgR0xpc3QqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZXMgICAg
ICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBfX1dFQktJVF9TRUNVUklUWV9PUklHSU5fSF9fICovCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzg4ZGMwMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDUyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtp
dHdlYmRhdGFiYXNlLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8
Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisKKy8qKgorICogU0VD
VElPTjp3ZWJraXR3ZWJkYXRhYmFzZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIFdlYktpdCB3
ZWIgYXBwbGljYXRpb24gZGF0YWJhc2UKKyAqCisgKiAjV2ViS2l0V2ViRGF0YWJhc2UgaXMgYSBy
ZXByZXNlbnRhdGlvbiBvZiBhIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4gVGhlCisgKiB1cGNvbWlu
ZyBXZWIgRGF0YWJhc2Ugc3RhbmRhcmQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciBTUUwgZGF0YWJh
c2VzIHRoYXQgd2ViCisgKiBzaXRlcyBjYW4gY3JlYXRlIGFuZCBhY2Nlc3Mgb24gYSBsb2NhbCBj
b21wdXRlciB0aHJvdWdoIEphdmFTY3JpcHQuCisgKgorCisgKiBUbyBnZXQgYWNjZXNzIHRvIGFs
bCBkYXRhYmFzZXMgZGVmaW5lZCBieSBhIHNlY3VyaXR5IG9yaWdpbiwgdXNlCisgKiAjd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VzLiBFYWNoIGRhdGFiYXNlIGhhcyBhbiBpbnRl
cm5hbAorICogbmFtZSwgYXMgd2VsbCBhcyBhIHVzZXItZnJpZW5kbHkgZGlzcGxheSBuYW1lLgor
ICogCisgKiBXZWJLaXQgdXNlcyBTUUxpdGUgdG8gY3JlYXRlIGFuZCBhY2Nlc3MgdGhlIGxvY2Fs
IFNRTCBkYXRhYmFzZXMuIFRoZSBsb2NhdGlvbgorICogb2YgYSAjV2ViS2l0V2ViRGF0YWJhc2Ug
Y2FuIGJlIGFjY2Vzc2VkIHd0aCAjd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcGF0aC4KKyAqIFlv
dSBjYW4gY29uZmlndXJlIHRoZSBsb2NhdGlvbiBvZiBhbGwgZGF0YWJhc2VzIHdpdGgKKyAqICN3
ZWJraXRfc2V0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoLgorICogCisgKiBGb3IgZWFjaCBkYXRh
YmFzZSB0aGUgd2ViIHNpdGUgY2FuIGRlZmluZSBhbiBlc2ltYXRlZCBzaXplIHdoaWNoIGNhbiBi
ZQorICogYWNjZXNzZWQgd2l0aCAjd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6
ZS4gVGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUKKyAqIGRhdGFiYXNlIGluIGJ5dGVzIGlzIHJldHVy
bmVkIGJ5ICN3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zaXplLgorICogCisgKiBGb3IgbW9yZSBp
bmZvcm1hdGlvbiByZWZlciB0byB0aGUgV2ViIERhdGFiYXNlIHNwZWNpZmljYXRpb24gcHJvcG9z
YWwgYXQKKyAqICBodHRwOi8vZGV2LnczLm9yZy9odG1sNS93ZWJkYXRhYmFzZQorICovCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1Bf
T1JJR0lOLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX0RJU1BMQVlfTkFNRSwKKyAgICBQUk9Q
X0VYUEVDVEVEX1NJWkUsCisgICAgUFJPUF9TSVpFLAorICAgIFBST1BfUEFUSAorfTsKKworR19E
RUZJTkVfVFlQRShXZWJLaXRXZWJEYXRhYmFzZSwgd2Via2l0X3dlYl9kYXRhYmFzZSwgR19UWVBF
X09CSkVDVCkKKworc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUgeworICAgIFdlYktp
dFNlY3VyaXR5T3JpZ2luKiBvcmlnaW47CisgICAgZ2NoYXIqIG5hbWU7CisgICAgZ2NoYXIqIGRp
c3BsYXlfbmFtZTsKKyAgICBnY2hhciogcGF0aDsKK307CisKK3N0YXRpYyBnY2hhciogd2Via2l0
X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoID0gTlVMTDsKK3N0YXRpYyBndWludDY0IHdlYmtpdF9k
ZWZhdWx0X2RhdGFiYXNlX3F1b3RhID0gNSAqIDEwMjQgKiAxMDI0OworCisjZGVmaW5lIFdFQktJ
VF9XRUJfREFUQUJBU0VfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsIFdlYktpdFdlYkRhdGFiYXNlUHJp
dmF0ZSkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X29yaWdpbihXZWJL
aXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlLCBXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlfb3JpZ2luKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfbmFtZShX
ZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlLCBjb25zdCBnY2hhciogbmFtZSk7CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSA9IFdFQktJVF9XRUJfREFUQUJB
U0Uob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRh
YmFzZS0+cHJpdjsKKworICAgIGlmIChwcml2LT5vcmlnaW4pCisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKHByaXYtPm9yaWdpbik7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX2RhdGFi
YXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSA9IFdFQktJVF9XRUJfREFUQUJBU0Uob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9PUklHSU46CisgICAg
ICAgIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X29yaWdpbih3ZWJfZGF0YWJhc2UsIFdFQktJVF9T
RUNVUklUWV9PUklHSU4oZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRf
bmFtZSh3ZWJfZGF0YWJhc2UsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UgPSBXRUJLSVRfV0VCX0RBVEFC
QVNFKG9iamVjdCk7CisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0
YWJhc2UtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfT1JJ
R0lOOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHByaXYtPm9yaWdpbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9z
dHJpbmcodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUod2ViRGF0YWJhc2UpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU1BMQVlfTkFNRToKKyAgICAgICAgZ192
YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9kaXNwbGF5X25h
bWUod2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VYUEVDVEVE
X1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3dlYl9kYXRh
YmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJr
aXRfd2ViX2RhdGFiYXNlX2dldF9zaXplKHdlYkRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9QQVRIOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdl
YmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3BhdGgod2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJEYXRhYmFz
ZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
d2ViX2RhdGFiYXNlX2ZpbmFsaXplOworICAgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RfY2xhc3MtPmdl
dF9wcm9wZXJ0eSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3Byb3BlcnR5OworCisgICAgIC8q
KgorICAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpvcmlnaW46CisgICAgICAqCisgICAgICAqIFRo
ZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAgKgorICAgICAgKiBTaW5j
ZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KGdvYmplY3RfY2xhc3MsIFBST1BfT1JJR0lOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIm9yaWdpbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJPcmlnaW4iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IlRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIGRhdGFiYXNlIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9TRUNV
UklUWV9PUklHSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1f
Q09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFdlYkRhdGFiYXNl
Om5hbWU6CisgICAgICAqCisgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0
YWJhc2UuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9OQU1FLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
Im5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiTmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG5hbWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRh
YmFzZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJB
TV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0V2ViRGF0YWJh
c2U6ZGlzcGxheS1uYW1lOgorICAgICAgKgorICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRo
ZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMK
KyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9j
bGFzcywgUFJPUF9ESVNQTEFZX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZGlzcGxheS1uYW1lIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRpc3BsYXkgTmFt
ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgV2ViIFN0cm9hZ2UgZGF0YWJhc2UiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJEYXRhYmFzZTpleHBlY3RlZC1zaXplOgorICAgICAqCisgICAgICogVGhlIGV4cGVjdGVk
IHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5dGVzIGFzIGRlZmluZWQgYnkgdGhlIHdlYiBhdXRo
b3IuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICovCisgICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9FWFBFQ1RFRF9TSVpF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50
NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZC1z
aXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRXhwZWN0
ZWQgU2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKyAgICAgLyoqCisgICAgICogV2ViS2l0V2ViRGF0YWJhc2U6c2l6ZToKKyAgICAgKgor
ICAgICAqIFRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5dGVzLgorICAgICAq
CisgICAgICogU2luY2U6IDEuMS4xMworICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfU0laRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlNpemUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRh
dGFiYXNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdf
TUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFdlYkRhdGFi
YXNlOnBhdGg6CisgICAgICAqCisgICAgICAqIFRoZSBmaWxlc3lzdGVtIHBhdGggb2YgdGhlIFdl
YiBEYXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAg
ICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNz
LCBQUk9QX1BBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygicGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJQYXRoIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZmlsZXN5c3RlbSBwYXRo
IG9mIHRoZSBXZWIgU3Ryb2FnZSBkYXRhYmFzZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2Vi
S2l0V2ViRGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0
YWJhc2VfaW5pdChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIHdlYl9k
YXRhYmFzZS0+cHJpdiA9IFdFQktJVF9XRUJfREFUQUJBU0VfR0VUX1BSSVZBVEUod2ViX2RhdGFi
YXNlKTsKK30KKworLy8gSW50ZXJuYWwgdXNlIG9ubHkKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
ZGF0YWJhc2Vfc2V0X29yaWdpbihXZWJLaXRXZWJEYXRhYmFzZSAqd2ViX2RhdGFiYXNlLCBXZWJL
aXRTZWN1cml0eU9yaWdpbiAqc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSk7CisKKyAg
ICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisK
KyAgICBpZiAocHJpdi0+b3JpZ2luKQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vcmln
aW4pOworCisgICAgZ19vYmplY3RfcmVmKHNlY3VyaXR5X29yaWdpbik7CisgICAgcHJpdi0+b3Jp
Z2luID0gc2VjdXJpdHlfb3JpZ2luOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFi
YXNlX3NldF9uYW1lKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UsIGNvbnN0IGdjaGFy
KiBuYW1lKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3
ZWJfZGF0YWJhc2UpKTsKKworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdl
Yl9kYXRhYmFzZS0+cHJpdjsKKyAgICBnX2ZyZWUocHJpdi0+bmFtZSk7CisgICAgcHJpdi0+bmFt
ZSA9IGdfc3RyZHVwKG5hbWUpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X29yaWdpbjoKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICog
UmV0dXJucyB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisg
KgorICogUmV0dXJuczogdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJhc2UKKyAqCisg
KiBTaW5jZTogMS4xLjEzCisgKiovCitXZWJLaXRTZWN1cml0eU9yaWdpbiogd2Via2l0X3dlYl9k
YXRhYmFzZV9nZXRfb3JpZ2luKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJh
c2UpLCBOVUxMKTsKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0
YWJhc2UtPnByaXY7CisKKyAgICByZXR1cm4gcHJpdi0+b3JpZ2luOworfQorCisvKioKKyAqIHdl
YmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWU6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRX
ZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSAjV2Vi
S2l0V2ViRGF0YWJhc2UuCisgKgorICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNl
CisgKgorICogU2luY2U6IDEuMS4xMworICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9k
YXRhYmFzZSksIE5VTEwpOworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdl
Yl9kYXRhYmFzZS0+cHJpdjsKKworICAgIHJldHVybiBwcml2LT5uYW1lOworfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZToKKyAqIEB3ZWJfZGF0YWJhc2U6
IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgI1dl
YktpdFdlYkRhdGFiYXNlIGFzIHNlZW4gYnkgdGhlIHVzZXIuCisgKgorICogUmV0dXJuczogdGhl
IG5hbWUgb2YgdGhlIGRhdGFiYXNlIGFzIHNlZW4gYnkgdGhlIHVzZXIuCisgKgorICogU2luY2U6
IDEuMS4xMworICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X2Rpc3BsYXlfbmFtZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViX2RhdGFiYXNl
KSwgTlVMTCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQ
cml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNl
RGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0
YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFtZSwgY29yZShwcml2LT5vcmlnaW4pKTsKKyAg
ICBXZWJDb3JlOjpTdHJpbmcgZGlzcGxheU5hbWUgPSAgZGV0YWlscy5kaXNwbGF5TmFtZSgpOwor
CisgICAgaWYgKCFkaXNwbGF5TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ19mcmVlKHByaXYt
PmRpc3BsYXlfbmFtZSk7CisgICAgICAgIHByaXYtPmRpc3BsYXlfbmFtZSA9IGdfc3RyZHVwKGRp
c3BsYXlOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gcHJpdi0+ZGlzcGxheV9u
YW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisjZWxzZQorICAg
IHJldHVybiAiIjsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X2V4cGVjdGVkX3NpemU6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQor
ICoKKyAqIFJldHVybnMgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlICNXZWJLaXRXZWJEYXRhYmFz
ZSBpbiBieXRlcyBhcyBkZWZpbmVkIGJ5IHRoZQorICogd2ViIGF1dGhvci4gVGhlIFdlYiBEYXRh
YmFzZSBzdGFuZGFyZCBhbGxvd3Mgd2ViIGF1dGhvcnMgdG8gc3BlY2lmeSBhbiBleHBlY3RlZAor
ICogc2l6ZSBvZiB0aGUgZGF0YWJhc2UgdG8gb3B0aW1pemUgdGhlIHVzZXIgZXhwZXJpZW5jZS4K
KyAqCisgKiBSZXR1cm5zOiB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0
ZXMKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitndWludDY0IHdlYmtpdF93ZWJfZGF0YWJh
c2VfZ2V0X2V4cGVjdGVkX3NpemUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRh
YmFzZSksIDApOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRhYmFz
ZURldGFpbHMgZGV0YWlscyA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKHByaXYtPm5hbWUsIGNvcmUocHJpdi0+b3JpZ2luKSk7Cisg
ICAgcmV0dXJuIGRldGFpbHMuZXhwZWN0ZWRVc2FnZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsK
KyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemU6CisgKiBA
d2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGFj
dHVhbCBzaXplIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2Ugc3BhY2Ugb24gZGlzayBpbiBieXRl
cy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5
dGVzCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfd2ViX2RhdGFi
YXNlX2dldF9zaXplKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCAw
KTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxz
IGRldGFpbHMgPSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZXRhaWxzRm9y
TmFtZUFuZE9yaWdpbihwcml2LT5uYW1lLCBjb3JlKHByaXYtPm9yaWdpbikpOworICAgIHJldHVy
biBkZXRhaWxzLmN1cnJlbnRVc2FnZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3BhdGg6CisgKiBAd2ViX2RhdGFi
YXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhl
ICNXZWJLaXRXZWJEYXRhYmFzZSBmaWxlIG9uIGRpc2suCisgKgorICogUmV0dXJuczogdGhlIGZp
bGVzeXN0ZW0gcGF0aCBvZiB0aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiov
CitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcGF0aChXZWJL
aXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViX2RhdGFiYXNlKSwgTlVMTCk7CisKKyNpZiBFTkFC
TEUoREFUQUJBU0UpCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2Rh
dGFiYXNlLT5wcml2OworICAgIFdlYkNvcmU6OlN0cmluZyBjb3JlTmFtZSA9IFdlYkNvcmU6OlN0
cmluZzo6ZnJvbVVURjgocHJpdi0+bmFtZSk7CisgICAgV2ViQ29yZTo6U3RyaW5nIGNvcmVQYXRo
ID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFz
ZShjb3JlKHByaXYtPm9yaWdpbiksIGNvcmVOYW1lKTsKKworICAgIGlmICghY29yZVBhdGguaXNF
bXB0eSgpKSB7CisgICAgICAgIGdfZnJlZShwcml2LT5wYXRoKTsKKyAgICAgICAgcHJpdi0+cGF0
aCA9IGdfc3RyZHVwKGNvcmVQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gcHJp
di0+cGF0aDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorI2Vsc2UK
KyAgICByZXR1cm4gIiI7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2RhdGFiYXNl
X3JlbW92ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICog
UmVtb3ZlcyB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGZyb20gaXRzIHNlY3VyaXR5IG9yaWdpbiBh
bmQgZGVzdHJveXMgYWxsIGRhdGEKKyAqIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuCisgKgorICog
U2luY2U6IDEuMS4xMworICoqLwordm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92ZShXZWJL
aXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpKTsKKworI2lmIEVOQUJMRShEQVRBQkFT
RSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnBy
aXY7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlRGF0YWJh
c2UoY29yZShwcml2LT5vcmlnaW4pLCBwcml2LT5uYW1lKTsKKyNlbmRpZgorfQorCisvKioKKyAq
IHdlYmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFzZXM6CisgKgorICogUmVtb3ZlcyBhbGwgd2Vi
IGRhdGFiYXNlcyBmcm9tIHRoZSBjdXJyZW50IGRhdGFiYXNlIGRpcmVjdG9yeSBwYXRoLgorICoK
KyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK3ZvaWQgd2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFi
YXNlcygpCit7CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmRlbGV0ZUFsbERhdGFiYXNlcygpOworI2VuZGlmCit9CisKKy8qKgor
ICogd2Via2l0X2dldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aDoKKyAqCisgKiBSZXR1cm5zIHRo
ZSBjdXJyZW50IHBhdGggdG8gdGhlIGRpcmVjdG9yeSBXZWJLaXQgd2lsbCB3cml0ZSBXZWIgCisg
KiBEYXRhYmFzZSBkYXRhYmFzZXMuIEJ5IGRlZmF1bHQgdGhpcyBwYXRoIHdpbGwgYmUgaW4gdGhl
IHVzZXIgZGF0YQorICogZGlyZWN0b3J5LgorICoKKyAqIFJldHVybnM6IHRoZSBjdXJyZW50IGRh
dGFiYXNlIGRpcmVjdG9yeSBwYXRoCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworR19DT05T
VF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9nZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoKQorewor
I2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTdHJpbmcgcGF0aCA9IFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlRGlyZWN0b3J5UGF0aCgpOworICAg
IGlmICghcGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ19mcmVlKHdlYmtpdF9kYXRhYmFzZV9k
aXJlY3RvcnlfcGF0aCk7CisgICAgICAgIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCA9
IGdfc3RyZHVwKHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiB3ZWJraXRfZGF0
YWJhc2VfZGlyZWN0b3J5X3BhdGg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0KKyNlbHNlCisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0
X3NldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aDoKKyAqIEBwYXRoOiB0aGUgbmV3IGRhdGFiYXNl
IGRpcmVjdG9yeSBwYXRoCisgKgorICogU2V0cyB0aGUgY3VycmVudCBwYXRoIHRvIHRoZSBkaXJl
Y3RvcnkgV2ViS2l0IHdpbGwgd3JpdGUgV2ViIAorICogRGF0YWJhc2UgZGF0YWJhc2VzLiAKKyAq
CisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2b2lkIHdlYmtpdF9zZXRfZGF0YWJhc2VfZGlyZWN0
b3J5X3BhdGgoY29uc3QgZ2NoYXIqIHBhdGgpCit7CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAg
IFdlYkNvcmU6OlN0cmluZyBjb3JlUGF0aCA9IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgocGF0
aCk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VE
aXJlY3RvcnlQYXRoKGNvcmVQYXRoKTsKKworICAgIGdfZnJlZSh3ZWJraXRfZGF0YWJhc2VfZGly
ZWN0b3J5X3BhdGgpOworICAgIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCA9IGdfc3Ry
ZHVwKGNvcmVQYXRoLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0
X2dldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhOgorICoKKyAqIFJldHVybnMgdGhlIGRlZmF1bHQg
cXVvdGEgZm9yIFdlYiBEYXRhYmFzZSBkYXRhYmFzZXMuIEJ5IGRlZmF1bHQKKyAqIHRoaXMgdmFs
dWUgaXMgNU1CLgorIAorICogUmV0dXJuczogdGhlIGN1cnJlbnQgZGVmYXVsdCBkYXRhYmFzZSBx
dW90YSBpbiBieXRlcworICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50NjQgd2Via2l0
X2dldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhKCkKK3sKKyAgICByZXR1cm4gd2Via2l0X2RlZmF1
bHRfZGF0YWJhc2VfcXVvdGE7Cit9CisKKy8qKgorICogd2Via2l0X3NldF9kZWZhdWx0X2RhdGFi
YXNlX3F1b3RhOgorICogQGRlZmF1bHRfcXVvdGE6IHRoZSBuZXcgZGVmYXVsdGEgZGF0YWJhc2Ug
cXVvdGEKKyAqCisgKiBTZXRzIHRoZSBjdXJyZW50IHBhdGggdG8gdGhlIGRpcmVjdG9yeSBXZWJL
aXQgd2lsbCB3cml0ZSBXZWIgCisgKiBEYXRhYmFzZSBkYXRhYmFzZXMuIAorICoKKyAqIFNpbmNl
OiAxLjEuMTMKKyAqKi8KK3ZvaWQgd2Via2l0X3NldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhKGd1
aW50NjQgZGVmYXVsdF9xdW90YSkKK3sKKyAgICB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90
YSA9IGRlZmF1bHRfcXVvdGE7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJkYXRhYmFzZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmEzZmE2Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaApAQCAtMCwwICsxLDk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1dF
QktJVF9XRUJfREFUQUJBU0VfSF9fCisjZGVmaW5lIF9fV0VCS0lUX1dFQl9EQVRBQkFTRV9IX18K
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0RBVEFC
QVNFICAgICAgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9XRUJfREFUQUJBU0Uob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJh
c2UpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsIFdl
YktpdFdlYkRhdGFiYXNlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKG9i
aikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9XRUJfREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0RBVEFCQVNFX0NMQVNTKGts
YXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJf
REFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFX0dFVF9DTEFTUyhvYmopICAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfREFUQUJB
U0UsIFdlYktpdFdlYkRhdGFiYXNlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
RGF0YWJhc2VQcml2YXRlIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJL
aXRXZWJEYXRhYmFzZSB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwg
cHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXY7Cit9OworCitz
dHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAg
dm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJL
aXRTZWN1cml0eU9yaWdpbioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X29yaWdpbiAgICAgICAg
IChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBHX0NPTlNU
X1JFVFVSTiBnY2hhcioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUgICAgICAgICAgIChX
ZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JF
VFVSTiBnY2hhcioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZSAgIChXZWJL
aXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJr
aXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdl
Yl9kYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfc2l6ZSAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpOworCitX
RUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRf
cGF0aCAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlICAgICAgICAgICAgIChXZWJL
aXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
cmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgR19D
T05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfZ2V0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoICAg
ICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3Rv
cnlfcGF0aCAgICAgKGNvbnN0IGdjaGFyKiBwYXRoKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3
ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X3NldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhICAgICAgKGd1aW50NjQg
ZGVmYXVsdF9xdW90YSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX1dFQktJVF9XRUJf
REFUQUJBU0VfSF9fICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJm
cmFtZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKaW5kZXggN2Uy
Y2U0NS4uOGEyNzgxYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJh
bWUuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcApAQCAtODg2
LDMgKzg4NiwyMSBAQCBBdGtPYmplY3QqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNj
ZXNzaWJsZV9lbGVtZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZQogICAgIHJldHVybiBOVUxMOwog
I2VuZGlmCiB9CisKKy8qKgorICogd2Via2l0X3dlYl9mcmFtZV9nZXRfb3JpZ2luOgorICogQGZy
YW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICoKKyAqIFJldHVybnMgdGhlIEBmcmFtZSdzIHNlY3Vy
aXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBzZWN1cml0eSBvcmlnaW4gb2Yg
QGZyYW1lCisgKi8KK1dlYktpdFNlY3VyaXR5T3JpZ2luKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9v
cmlnaW4oV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0
ZSogcHJpdiA9IGZyYW1lLT5wcml2OworICAgIGlmICghcHJpdi0+Y29yZUZyYW1lIHx8ICFwcml2
LT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgV2Vi
S2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGtpdChwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIHJldHVybiBvcmlnaW47Cit9CmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZnJhbWUuaAppbmRleCBiMmU2MWI5Li4xMDRkMDVjIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmZyYW1lLmgKQEAgLTE1Miw2ICsxNTIsOSBAQCB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50
ICAgICAgICAgICAgICAoV2ViS2l0V2ViRnJhbWUgICAgICAgKmZyYW1lKTsKIFdFQktJVF9BUEkg
V2ViS2l0TG9hZFN0YXR1cwogd2Via2l0X3dlYl9mcmFtZV9nZXRfbG9hZF9zdGF0dXMgICAgKFdl
YktpdFdlYkZyYW1lICAgICAgICpmcmFtZSk7CiAKK1dFQktJVF9BUEkgV2ViS2l0U2VjdXJpdHlP
cmlnaW4qCit3ZWJraXRfd2ViX2ZyYW1lX2dldF9vcmlnaW4gICAgICAgICAoV2ViS2l0V2ViRnJh
bWUgICAgICAgKmZyYW1lKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCmluZGV4IGVjNTllNjAuLmRhNjM1MDYgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCkBAIC0xNDIsNiArMTQyLDcgQEAgZW51bSB7CiAgICAgUFJJTlRfUkVR
VUVTVEVELAogICAgIFBMVUdJTl9XSURHRVQsCiAgICAgQ0xPU0VfV0VCX1ZJRVcsCisgICAgREFU
QUJBU0VfUVVPVEFfRVhDRUVERUQsCiAgICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTE3NzQsNiAr
MTc3NSwyOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRX
ZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIEdUS19UWVBFX1dJREdFVCwg
MywKICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9IQVNI
X1RBQkxFKTsKIAorICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmRhdGFiYXNlLXF1b3Rh
LWV4Y2VlZGVkCisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRo
ZSBzaWduYWwKKyAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBmcmFtZQorICAgICAqIEBkYXRh
YmFzZTogdGhlICNXZWJLaXRXZWJEYXRhYmFzZSB3aGljaCBleGNlZWRlZCB0aGUgcXVvdGEgb2Yg
aXRzICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICAgICAqIEBwYXJhbTogYSAjR0hhc2hUYWJsZSB3
aXRoIGFkZGl0aW9uYWwgYXR0cmlidXRlcyAoc3RyaW5ncykKKyAgICAgKgorICAgICAqIFRoZSAj
V2ViS2l0V2ViVmlldzo6ZGF0YWJhc2UtZXhjZWVkZWQtcXVvdGEgc2lnbmFsIHdpbGwgYmUgZW1p
dHRlZCB3aGVuCisgICAgICogYSBXZWIgRGF0YWJhc2UgZXhjZWVkcyB0aGUgcXVvdGEgb2YgaXRz
IHNlY3VyaXR5IG9yaWdpbi4gVGhpcyBzaWduYWwKKyAgICAgKiBtYXkgYmUgdXNlZCB0byBpbmNy
ZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcXVvdGEgYmVmb3JlIHRoZSBvcmlnaW5hdGluZworICAgICAq
IG9wZXJhdGlvbiBmYWlscy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgKi8K
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tQTFVHSU5fV0lER0VUXSA9IGdfc2lnbmFsX25l
dygiZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpIChHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
TlVMTCwgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9PQkpF
Q1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9PQkpF
Q1QsIEdfVFlQRV9PQkpFQ1QpOworCiAgICAgLyoKICAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2Yg
dmlydHVhbCBtZXRob2RzCiAgICAgICovCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBhYzgyZGQ4Li43YTNkNjYxIDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAg
LTU5Myw2ICs1OTMsMjMgQEAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdDbG9zZShXZWJLaXRXZWJW
aWV3KiB2aWV3KQogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCBkYXRhYmFzZVF1
b3RhRXhjZWVkZWQoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBX
ZWJLaXRXZWJEYXRhYmFzZSAqZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKHZpZXcpOworICAgIEFT
U0VSVChmcmFtZSk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9vcmlnaW4oZGF0YWJhc2Up
OworICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBEYXRhYmFzZUNhbGxiYWNrcygp
KSB7CisgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOnslcywgJXMsICVpfSBkYXRhYmFzZTol
c1xuIiwKKyAgICAgICAgICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sKG9y
aWdpbiksCisgICAgICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdp
biksCisgICAgICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbiks
CisgICAgICAgICAgICB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9uYW1lKGRhdGFiYXNlKSk7Cisg
ICAgfQorICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhKG9yaWdp
biwgNSAqIDEwMjQgKiAxMDI0KTsKK30KKwogCiBzdGF0aWMgV2ViS2l0V2ViVmlldyogd2ViVmll
d0NyZWF0ZShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2ViRnJhbWUqKTsKIApAQCAtNjE3LDYgKzYz
NCw3IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3KCkKICAgICAgICAgICAg
ICAgICAgICAgICJzaWduYWw6OnN0YXR1cy1iYXItdGV4dC1jaGFuZ2VkIiwgd2ViVmlld1N0YXR1
c0JhclRleHRDaGFuZ2VkLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6Y3JlYXRl
LXdlYi12aWV3Iiwgd2ViVmlld0NyZWF0ZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWdu
YWw6OmNsb3NlLXdlYi12aWV3Iiwgd2ViVmlld0Nsb3NlLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgInNpZ25hbDo6ZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQiLCBkYXRhYmFzZVF1b3RhRXhjZWVk
ZWQsIDAsCiAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAogICAgIHJldHVybiB2aWV3Owpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0
Q29udHJvbGxlckd0ay5jcHAKaW5kZXggMDA0OWFlOC4uYTI0YjNmMCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJH
dGsuY3BwCkBAIC0zMzEsMTIgKzMzMSwxMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpj
bGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
d2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcygpOwogfQogIAogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17
ICAgIAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdp
biogb3JpZ2luID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfb3JpZ2luKG1haW5GcmFtZSk7CisgICAg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7
CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUo
dW5zaWduZWQgbG9uZyBsb25nIHNpemUpCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34906</attachid>
            <date>2009-08-15 15:32:56 -0700</date>
            <delta_ts>2009-08-30 12:40:49 -0700</delta_ts>
            <desc>Update patch rev2</desc>
            <filename>0001-Database-patch.patch</filename>
            <type>text/plain</type>
            <size>53263</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBkZGQ3YTVjYzg3N2VmYzAyZTkzM2VmMThjMDM0MzEyNjFiZmNlY2YyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTUgQXVnIDIwMDkgMTU6Mjk6MjYgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBEYXRhYmFzZSBwYXRjaAoKLS0tCiBHTlVtYWtlZmlsZS5hbSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1NraXBwZWQgICAgICAgICAgICAgICAgICAgfCAgICA5IC0KIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCAgICAgIHwgICAxNCArLQogV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcCAgICAgICAgICAgICAgICB8ICAgIDUgKy0K
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgICAg
OCArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAgICAgICAgICB8
ICA0NDggKysrKysrKysrKysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5
b3JpZ2luLmggICAgICAgICAgIHwgICA4MyArKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmRhdGFiYXNlLmNwcCAgICAgICAgICAgIHwgIDUyNSArKysrKysrKysrKysrKysrKysrKwogV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCAgICAgICAgICAgICAgfCAgIDk2ICsr
KysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCAgICAgICAgICAgICAgIHwg
ICAxNyArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oICAgICAgICAgICAgICAg
ICB8ICAgIDMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICAg
ICAgICAgfCAgIDIzICsKIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVy
VHJlZS5jcHAgIHwgICAxOCArCiAuLi4vRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcCB8ICAgIDcgKy0KIDE2IGZpbGVzIGNoYW5nZWQsIDEyNTEgaW5zZXJ0aW9u
cygrKSwgMTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKCmRpZmYgLS1naXQgYS9HTlVtYWtl
ZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IGI2MzIwNWYuLjA0ODI4NjQgMTAwNjQ0Ci0t
LSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMjYsNiArMzI2LDgg
QEAgd2Via2l0Z3RrX2hfYXBpICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNw
ZWN0b3IuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5o
IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5oIFwKKwlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0
aW5ncy5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oIFwK
IAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTM2NSw2ICszNjcsMTAgQEAg
d2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3Bl
Y3Rvci5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24u
Y3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5jcHAgXAor
CVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcCBcCisJV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2Vj
dXJpdHlvcmlnaW4uY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdp
bi5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAgXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ3aW5kb3dmZWF0dXJlcy5jcHAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggYWFj
NTIyZC4uYWY2MzFlNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBw
ZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTQwMzMsMTIgKzQw
MzMsNiBAQCBzZWN1cml0eS9hdXRvY29tcGxldGUtY2xlYXJlZC1vbi1iYWNrLmh0bWwKIHNlY3Vy
aXR5L2Jsb2NrLXRlc3Qtbm8tcG9ydC5odG1sCiBzZWN1cml0eS9ibG9jay10ZXN0Lmh0bWwKIAot
IyBUZXN0cyBpbiBzdG9yYWdlLyBkaXJlY3RvcnkKLSMgICBUZXN0cyBmYWlsaW5nCi1zdG9yYWdl
L3F1b3RhLXRyYWNraW5nLmh0bWwKLXN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvd2lu
ZG93LW9wZW4uaHRtbAotc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3dpbmRvdy1v
cGVuLmh0bWwKLQogIyBUZXN0cyBpbiBzdmcvIGRpcmVjdG9yeQogIyAgIFRlc3RzIGZhaWxpbmcK
IHN2Zy9jdXN0b20vZW1iZWRkZWQtc3ZnLWRpc2FsbG93ZWQtaW4tZGFzaGJvYXJkLnhtbApAQCAt
NTkzNSw5ICs1OTI5LDYgQEAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJv
bC1iYXNpYy1hbGxvdy1wcmVmbGlnaHQtY2FjaGUuaHRtbAogaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9jYWNoZS1vdmVycmlkZS5odG1sCiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3NtYWxs
LWNodW5rcy1yZXNwb25zZS10ZXh0Lmh0bWwKIAotIyBSRUdSRVNTSU9OOiBTZWUgQnVnICMyNzE0
NCAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE0NAotc3RvcmFn
ZS9kYXRhYmFzZS1sb2NrLWFmdGVyLXJlbG9hZC5odG1sCi0KICMgU2VlIEJ1ZyAjMjc2MzcgLSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzcKIGZhc3QvaGlzdG9y
eS9zYXZlcy1zdGF0ZS1hZnRlci1mcmFnbWVudC1uYXYuaHRtbAogCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggMTI5MmU5OS4uYTdhZDUwZSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
CisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAt
NDU5LDEzICs0NTksMTcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lKiBmcmFtZSkK
IH0KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLXZvaWQgQ2hyb21lQ2xpZW50OjpleGNlZWRlZERh
dGFiYXNlUXVvdGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmKQordm9pZCBDaHJvbWVDbGll
bnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VOYW1lKQogewotICAgIC8vIFNldCB0byA1TSBmb3IgdGVzdGluZwotICAgIC8vIEZJWE1F
OiBNYWtlIHRoaXMgY29uZmlndXJhYmxlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb25z
dCB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OworICAg
IGd1aW50NjQgZGVmYXVsdFF1b3RhID0gd2Via2l0X2dldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3Rh
KCk7CiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEoZnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7CisKKyAgICBXZWJLaXRXZWJG
cmFtZSogd2ViRnJhbWUgPSBraXQoZnJhbWUpOworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKHdlYkZyYW1lKTsKKworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4gPSBraXQoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAg
IFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZnJv
bV9zZWN1cml0eV9vcmlnaW4ob3JpZ2luLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSk7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJkYXRhYmFzZS1xdW90YS1leGNlZWRl
ZCIsIHdlYkZyYW1lLCB3ZWJEYXRhYmFzZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRl
eCBjMjIxNjVlLi44ZWVjZGFhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQu
aAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMzUsNiArMzUsOCBAQAogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oPgogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJuYXZp
Z2F0aW9uYWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmg+Cisj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGVudW10eXBlcy5oPgogCiAjZW5kaWYgLyogX19XRUJLSVRfSF9fICovCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjBhYjVlOS4uYTNhMjEyOSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaApAQCAtNzEsNiArNzEsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlZpZXdDbGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93
bmxvYWQgV2ViS2l0RG93bmxvYWQ7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRDbGFz
cyBXZWJLaXREb3dubG9hZENsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRGF0YWJh
c2UgV2ViS2l0V2ViRGF0YWJhc2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2VD
bGFzcyBXZWJLaXRXZWJEYXRhYmFzZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U2Vj
dXJpdHlPcmlnaW4gV2ViS2l0U2VjdXJpdHlPcmlnaW47Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
U2VjdXJpdHlPcmlnaW5DbGFzcyBXZWJLaXRTZWN1cml0eU9yaWdpbkNsYXNzOworCiBHX0VORF9E
RUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAKaW5kZXggNzU1YjRk
My4uZjQyNjlkYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5j
cHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAKQEAgLTE1Niw5ICsx
NTYsMTAgQEAgdm9pZCB3ZWJraXRfaW5pdCgpCiAgICAgV2ViQ29yZTo6cGFnZUNhY2hlKCktPnNl
dENhcGFjaXR5KDMpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIC8vIEZJWE1FOiBJdCBz
aG91bGQgYmUgcG9zc2libGUgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gb3ZlcnJpZGUgdGhp
cyBkZWZhdWx0IGxvY2F0aW9uCiAgICAgZ2NoYXIqIGRhdGFiYXNlRGlyZWN0b3J5ID0gZ19idWls
ZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiZGF0YWJhc2VzIiwg
TlVMTCk7Ci0gICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJh
c2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGlyZWN0b3J5KTsKKyAgICB3ZWJraXRfc2V0X2RhdGFi
YXNlX2RpcmVjdG9yeV9wYXRoKGRhdGFiYXNlRGlyZWN0b3J5KTsKKworICAgIC8vIEZJWE1FOiBJ
dCBzaG91bGQgYmUgcG9zc2libGUgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gb3ZlcnJpZGUg
dGhlIGRlZmF1bHQgYXBwY2FjaGUgbG9jYXRpb24KICAgICBXZWJDb3JlOjpjYWNoZVN0b3JhZ2Uo
KS5zZXRDYWNoZURpcmVjdG9yeShkYXRhYmFzZURpcmVjdG9yeSk7CiAgICAgZ19mcmVlKGRhdGFi
YXNlRGlyZWN0b3J5KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDBj
M2ZiZDMuLjhmMzYzM2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHNlY3VyaXR5
b3JpZ2luLmg+CiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlIDxlbmNo
YW50Lmg+CkBAIC01Miw2ICs1Myw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogI2luY2x1ZGUgPGF0ay9hdGsuaD4KICNp
bmNsdWRlIDxnbGliLmg+CkBAIC03Nyw2ICs3OSw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAg
IFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlIGNvcmUoV2ViS2l0V2ViTmF2aWdhdGlvblJlYXNvbiBy
ZWFzb24pOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IGNvcmUoV2ViS2l0TmV0d29y
a1JlcXVlc3QqIHJlcXVlc3QpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIGtpdChXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiopOworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3Jl
KFdlYktpdFNlY3VyaXR5T3JpZ2luKik7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTI1MCw2
ICsyNTUsOSBAQCBleHRlcm4gIkMiIHsKIAogICAgIFdFQktJVF9BUEkgdm9pZAogICAgIHdlYmtp
dF9hcHBsaWNhdGlvbl9jYWNoZV9zZXRfbWF4aW11bV9zaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBz
aXplKTsKKworICAgIFdFQktJVF9BUEkgV2ViS2l0V2ViRGF0YWJhc2UgKgorICAgIHdlYmtpdF93
ZWJfZGF0YWJhc2VfZnJvbV9zZWN1cml0eV9vcmlnaW4oV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5X29yaWdpbiwgY29uc3QgY2hhciogZGF0YWJhc2VfbmFtZSk7CiB9CiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZGE2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKQEAgLTAsMCArMSw0NDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4gTWljaGFlbCBDLiBB
bG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmRhdGFiYXNlLmgi
CisKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIK
KworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKKy8qKgorICogU0VDVElPTjp3ZWJraXRz
ZWN1cml0eW9yaWdpbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIHNlY3VyaXR5IGJvdW5kYXJ5
IGZvciB3ZWIgc2l0ZXMKKyAqCisgKiAjV2ViS2l0U2VjdXJpdHlPcmlnaW4gaXMgYSByZXByZXNl
bnRhdGlvbiBvZiBhIHNlY3VyaXR5IGRvbWFpbiBkZWZpbmVkCisgKiBieSB3ZWIgc2l0ZXMuIEFu
IG9yaWdpbiBjb25zaXN0cyBvZiBhIGhvc3QgbmFtZSwgYSBzY2hlbWUsIGFuZCBhIHBvcnQKKyAq
IG51bWJlci4gV2ViIHNpdGVzIHdpdGggdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIGNhbiBhY2Nl
c3MgZWFjaCBvdGhlcidzCisgKiByZXNvdXJjZXMgZm9yIGNsaWVudC1zaWRlIHNjcmlwdGluZyBv
ciBkYXRhYmFzZSBhY2Nlc3MuCisgKiAKKyAqIFVzZSAjd2Via2l0X3dlYl9mcmFtZV9nZXRfb3Jp
Z2luIHRvIGdldCB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIGEKKyAqICNXZWJLaXRXZWJGcmFtZS4K
KyAqCisgKiBEYXRhYmFzZSBxdW90YXMgYW5kIHVzYWdlcyBhcmUgYWxzbyBkZWZpbmVkIHBlciBz
ZWN1cml0eSBvcmlnaW4uIFRoZQorICogY3VtdWxhdGl2ZSBkaXNrIHVzYWdlIG9mIGFuIG9yaWdp
bidzIGRhdGFiYXNlcyBtYXkgYmUgcmV0cmlldmVkIHdpdGgKKyAqICN3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZS4gQW4gb3JpZ2luJ3MgcXVvdGEgY2FuIGJlCisgKiBh
ZGp1c3RlZCB3aXRoICN3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YS4K
KyAqLworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisK
KyAgICBQUk9QX1BST1RPQ09MLAorICAgIFBST1BfSE9TVCwKKyAgICBQUk9QX1BPUlQsCisgICAg
UFJPUF9EQVRBQkFTRV9VU0FHRSwKKyAgICBQUk9QX0RBVEFCQVNFX1FVT1RBCit9OworCitHX0RF
RklORV9UWVBFKFdlYktpdFNlY3VyaXR5T3JpZ2luLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luLCBH
X1RZUEVfT0JKRUNUKQorCitzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSB7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBjb3JlT3JpZ2luOworICAgIGdjaGFy
KiBwcm90b2NvbDsKKyAgICBnY2hhciogaG9zdDsKKyAgICBHSGFzaFRhYmxlKiB3ZWJEYXRhYmFz
ZXM7CisKKyAgICBnYm9vbGVhbiBkaXNwb3NlZDsKK307CisKKyNkZWZpbmUgV0VCS0lUX1NFQ1VS
SVRZX09SSUdJTl9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
KG9iaiksIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW5Q
cml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgZ19mcmVl
KHByaXYtPnByb3RvY29sKTsKKyAgICBnX2ZyZWUocHJpdi0+aG9zdCk7CisKKyAgICBHX09CSkVD
VF9DTEFTUyhzZWN1cml0eU9yaWdpbiktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZ
X09SSUdJTihvYmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9
IHNlY3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgaWYgKCFwcml2LT5kaXNwb3NlZCkgeworICAg
ICAgICBwcml2LT5jb3JlT3JpZ2luLT5kZXJlZigpOworICAgICAgICBnX2hhc2hfdGFibGVfZGVz
dHJveShwcml2LT53ZWJEYXRhYmFzZXMpOworICAgICAgICBwcml2LT5kaXNwb3NlZCA9IHRydWU7
CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Moc2VjdXJpdHlPcmlnaW4pLT5kaXNwb3NlKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5
T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0RBVEFCQVNFX1FVT1RBOgorICAgICAgICB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YShzZWN1cml0eU9yaWdpbiwgZ192YWx1
ZV9nZXRfdWludDY0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IFdFQktJVF9TRUNVUklUWV9PUklHSU4ob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9w
cm90b2NvbChzZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SE9TVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX2dldF9ob3N0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9QT1JUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wb3J0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9EQVRBQkFTRV9VU0FHRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0
KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZShzZWN1cml0
eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQUJBU0VfUVVPVEE6
CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9nZXRfZGF0YWJhc2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dIYXNo
VGFibGUqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJs
ZSogc2VjdXJpdHlPcmlnaW5zID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gs
IGdfZGlyZWN0X2VxdWFsLCBOVUxMLCBnX29iamVjdF91bnJlZik7CisgICAgcmV0dXJuIHNlY3Vy
aXR5T3JpZ2luczsKK30KKwordm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2FkZChXZWJLaXRT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdp
bikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4ob3Jp
Z2luKSk7CisKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5z
KCk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydCh0YWJsZSwgY29yZU9yaWdpbiwgb3JpZ2luKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0KFdlYktp
dFNlY3VyaXR5T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2NsYXNzLT5kaXNw
b3NlID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9kaXNwb3NlOworICAgIGdvYmplY3RfY2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0
X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9wcm9wZXJ0
eTsKKyAgICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9wcm9wZXJ0eTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJpdHlPcmln
aW46cHJvdG9jb2w6CisgICAgICAqCisgICAgICAqIFRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJp
dHkgb3JpZ2luLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUFJP
VE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygicHJvdG9jb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiUHJvdG9jb2wiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBwcm90b2NvbCBvZiB0
aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOmhvc3Q6CisgICAgICAqCisg
ICAgICAqIFRoZSBob3N0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgICAgICAqCisgICAgICAq
IFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9IT1NULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImhvc3QiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSG9zdCIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
VGhlIGhvc3Qgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRTZWN1cml0eU9yaWdpbjpwb3J0
OgorICAgICAgKgorICAgICAgKiBUaGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICAg
ICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUE9SVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgicG9ydCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUG9y
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBwb3J0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4iKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVTSE9SVCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgICAgLyoqCisgICAgICAqIFdlYktpdFNl
Y3VyaXR5T3JpZ2luOmRhdGFiYXNlLXVzYWdlOgorICAgICAgKgorICAgICAgKiBUaGUgY3VtdWxh
dGl2ZSBzaXplIG9mIGFsbCBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBieXRl
cy4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9EQVRBQkFTRV9V
U0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3VpbnQ2NCgiZGF0YWJhc2UtdXNhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiRGF0YWJhc2UgVXNhZ2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIGRhdGFiYXNl
cyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAgLyoqCisg
ICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOmRhdGFiYXNlLXF1b3RhOgorICAgICAgKgorICAg
ICAgKiBUaGUgZGF0YWJhc2UgcW91dGEgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBieXRlcy4K
KyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9EQVRBQkFTRV9RVU9U
QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3Vp
bnQ2NCgiZGF0YWJhc2UtcXVvdGEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiRGF0YWJhc2UgUXVvdGEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIlRoZSBkYXRhYmFzZSBxdW90YSBvZiB0aGUgc2VjdXJpdHkgb3Jp
Z2luIGluIGJ5dGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSkpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2luaXQoV2ViS2l0U2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZh
dGUqIHByaXYgPSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dFVF9QUklWQVRFKHNlY3VyaXR5X29y
aWdpbik7CisgICAgcHJpdi0+d2ViRGF0YWJhc2VzID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdf
c3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2JqZWN0X3VucmVmKTsKKyAgICBzZWN1
cml0eV9vcmlnaW4tPnByaXYgPSBwcml2OworfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9v
cmlnaW5fZ2V0X3Byb3RvY29sOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJp
dHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBwcm90b2NvbCBmb3IgdGhlIHNlY3VyaXR5IG9y
aWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcHJvdG9jb2wgZm9yIHRoZSBzZWN1cml0eSBvcmln
aW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2woV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VD
VVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworCisgICAgV2ViS2l0U2VjdXJp
dHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3JpZ2luLT5wcml2OworICAgIFdlYkNv
cmU6OlN0cmluZyBwcm90b2NvbCA9ICBwcml2LT5jb3JlT3JpZ2luLT5wcm90b2NvbCgpOworCisg
ICAgaWYgKHByb3RvY29sLmlzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZ19mcmVlKHByaXYtPnByb3RvY29sKTsKKyAgICAgICAgcHJpdi0+cHJv
dG9jb2wgPSBnX3N0cmR1cChwcm90b2NvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IHByaXYtPnByb3RvY29sOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9ob3N0OgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmln
aW4KKyAqCisgKiBSZXR1cm5zIHRoZSBob3N0bmFtZSBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbi4K
KyAqCisgKiBSZXR1cm5zOiB0aGUgaG9zdG5hbWUgZm9yIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAq
CisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfaG9zdChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3Jp
Z2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklH
SU4oc2VjdXJpdHlfb3JpZ2luKSwgTlVMTCk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpblBy
aXZhdGUqIHByaXYgPSBzZWN1cml0eV9vcmlnaW4tPnByaXY7CisgICAgV2ViQ29yZTo6U3RyaW5n
IGhvc3QgPSAgcHJpdi0+Y29yZU9yaWdpbi0+aG9zdCgpOworCisgICAgaWYgKGhvc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9IGVsc2UgeworICAgICAgICBnX2ZyZWUo
cHJpdi0+aG9zdCk7CisgICAgICAgIHByaXYtPmhvc3QgPSBnX3N0cmR1cChob3N0LnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gcHJpdi0+aG9zdDsKKyAgICB9Cit9CisKKy8qKgorICog
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydDoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEg
I1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgcG9ydCBmb3IgdGhlIHNl
Y3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcG9ydCBmb3IgdGhlIHNlY3VyaXR5
IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50IHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZ2V0X3BvcnQoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNl
Y3VyaXR5X29yaWdpbiksIDApOworCisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVP
cmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAgcmV0dXJuIGNvcmVPcmlnaW4tPnBv
cnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91
c2FnZToKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgor
ICogUmV0dXJucyB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBXZWIgRGF0YWJhc2UgZGF0YWJh
c2UncyBpbiB0aGUgb3JpZ2luCisgKiBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY3Vt
dWxhdGl2ZSBzaXplIG9mIGFsbCBkYXRhYmFzZXMgCisgKgorICogU2luY2U6IDEuMS4xMworICoq
LworZ3VpbnQ2NCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZShXZWJL
aXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSwgMCk7CisK
KyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVP
cmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlcigpLnVzYWdlRm9yT3JpZ2luKGNvcmVPcmlnaW4pOworI2Vsc2UK
KyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmln
aW5fZ2V0X2RhdGFiYXNlX3F1b3RhOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2Vj
dXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBxdW90YSBmb3IgV2ViIERhdGFiYXNlIHN0
b3JhZ2Ugb2YgdGhlIHNlY3VyaXR5IG9yaWdpbgorICogaW4gYnl0ZXMuCisgKgorICogUmV0dXJu
czogdGhlIFdlYiBEYXRhYmFzZSBxdW90YQorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK2d1
aW50NjQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VfcXVvdGEoV2ViS2l0U2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIDApOworCisjaWYg
RU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2lu
ID0gY29yZShzZWN1cml0eV9vcmlnaW4pOworICAgIHJldHVybiBXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihjb3JlT3JpZ2luKTsKKyNlbHNlCisgICAg
cmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3Nl
dF9kYXRhYmFzZV9xdW90YToKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5
T3JpZ2luCisgKiBAcXVvdGE6IGEgbmV3IFdlYiBEYXRhYmFzZSBxdW90YSBpbiBieXRlcworICoK
KyAqIEFkanVzdCB0aGUgcXVvdGEgZm9yIFdlYiBEYXRhYmFzZSBzdG9yYWdlIG9mIHRoZSBzZWN1
cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2b2lkIHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1
cml0eV9vcmlnaW4sIGd1aW50NjQgcXVvdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbikpOworCisjaWYgRU5BQkxFKERB
VEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShz
ZWN1cml0eV9vcmlnaW4pOworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LnNldFF1b3RhKGNvcmVPcmlnaW4sIHF1b3RhKTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlczoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEg
I1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIFdlYiBE
YXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiBhICNHbGlz
dCBvZiBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBTaW5jZTogMS4x
LjEzCisgKiovCitHTGlzdCogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VzKFdl
YktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmlnaW4pLCBOVUxM
KTsKKyAgICBHTGlzdCogZGF0YWJhc2VzID0gTlVMTDsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkK
KyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlf
b3JpZ2luKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBkYXRhYmFzZU5hbWVzOworCisg
ICAgaWYgKCFXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZU5hbWVz
Rm9yT3JpZ2luKGNvcmVPcmlnaW4sIGRhdGFiYXNlTmFtZXMpKQorICAgICAgICByZXR1cm4gTlVM
TDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhYmFzZU5hbWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFdlYktpdFdlYkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJf
ZGF0YWJhc2VfZnJvbV9zZWN1cml0eV9vcmlnaW4oc2VjdXJpdHlfb3JpZ2luLCBkYXRhYmFzZU5h
bWVzW2ldLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBkYXRhYmFzZXMgPSBnX2xpc3RfYXBwZW5k
KGRhdGFiYXNlcywgZGF0YWJhc2UpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGRhdGFi
YXNlczsKK30KKworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIFdlYktpdDo6a2l0KFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
cmVPcmlnaW4sIE5VTEwpOworCisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2lucygpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSAoV2ViS2l0
U2VjdXJpdHlPcmlnaW4qKSBnX2hhc2hfdGFibGVfbG9va3VwKHRhYmxlLCBjb3JlT3JpZ2luKTsK
KworICAgIGlmICghb3JpZ2luKSB7CisgICAgICAgIG9yaWdpbiA9IFdFQktJVF9TRUNVUklUWV9P
UklHSU4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgTlVMTCkpOwor
ICAgICAgICBvcmlnaW4tPnByaXYtPmNvcmVPcmlnaW4gPSBjb3JlT3JpZ2luOworICAgICAgICB3
ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2FkZChvcmlnaW4sIGNvcmVPcmlnaW4pOworICAgIH0KKwor
ICAgIHJldHVybiBvcmlnaW47Cit9CisKKworV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIFdlYktp
dDo6Y29yZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3Jp
Z2luKSwgTlVMTCk7CisKKyAgICByZXR1cm4gc2VjdXJpdHlfb3JpZ2luLT5wcml2LT5jb3JlT3Jp
Z2luLmdldCgpOworfQorCitXZWJLaXRXZWJEYXRhYmFzZSogd2Via2l0X3dlYl9kYXRhYmFzZV9m
cm9tX3NlY3VyaXR5X29yaWdpbihXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2lu
LCBjb25zdCBnY2hhciogZGF0YWJhc2VfbmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworCisg
ICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3JpZ2luLT5w
cml2OworICAgIEdIYXNoVGFibGUqIGRhdGFiYXNlSGFzaCA9IHByaXYtPndlYkRhdGFiYXNlczsK
KyAgICBXZWJLaXRXZWJEYXRhYmFzZSogZGF0YWJhc2UgPSAoV2ViS2l0V2ViRGF0YWJhc2UqKSBn
X2hhc2hfdGFibGVfbG9va3VwKGRhdGFiYXNlSGFzaCwgZGF0YWJhc2VfbmFtZSk7CisKKyAgICBp
ZiAoIWRhdGFiYXNlKSB7CisgICAgICAgIGRhdGFiYXNlID0gIFdFQktJVF9XRUJfREFUQUJBU0Uo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJvcmlnaW4iLCBzZWN1cml0eV9vcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsIGRhdGFiYXNlX25hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOworICAgICAgICBn
X2hhc2hfdGFibGVfaW5zZXJ0KGRhdGFiYXNlSGFzaCwgZ19zdHJkdXAoZGF0YWJhc2VfbmFtZSks
IGRhdGFiYXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YWJhc2U7Cit9CisKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjc5N2VlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
RUJLSVRfU0VDVVJJVFlfT1JJR0lOX0gKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9I
CisKKyNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbi5oIgorI2luY2x1ZGUgIndlYmtpdHdl
YmRhdGFiYXNlLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TRUNV
UklUWV9PUklHSU4gICAgICAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmopICAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lO
LCBXZWJLaXRTZWN1cml0eU9yaWdpbikpCisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9PUklHSU5f
Q0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW5DbGFzcykpCisjZGVm
aW5lIFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4ob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTikpCisjZGVm
aW5lIFdFQktJVF9JU19TRUNVUklUWV9PUklHSU5fQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTikpCisjZGVm
aW5lIFdFQktJVF9TRUNVUklUWV9PUklHSU5fR0VUX0NMQVNTKG9iaikgICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0
U2VjdXJpdHlPcmlnaW5DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9y
aWdpblByaXZhdGUgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dFNlY3VyaXR5T3JpZ2luIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8q
PCBwcml2YXRlID4qLworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdjsKK307
CisKK3N0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW5DbGFzcyB7CisgICAgR09iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8K
KyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3R5cGUgKHZvaWQpOworCitXRUJL
SVRfQVBJIFdlYktpdFNlY3VyaXR5T3JpZ2luICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0
X29yaWdpbiAgICAgICAgIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsK
KworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9zZWN1cml0eV9vcmln
aW5fZ2V0X3Byb3RvY29sICAgICAgIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3Jp
Z2luKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZ2V0X2hvc3QgICAgICAgICAgIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfcG9ydCAgICAgICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4p
OworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFi
YXNlX3VzYWdlIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworV0VC
S0lUX0FQSSBndWludDY0Cit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV9xdW90
YSAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkg
dm9pZCAKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhIChXZWJLaXRT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luLCBndWludDY0IHF1b3RhKTsKKworV0VCS0lU
X0FQSSBHTGlzdCAqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZXMgICAgICAo
V2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBfX1dFQktJVF9TRUNVUklUWV9PUklHSU5fSF9fICovCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjk5NmY1MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDUyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdl
YmRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorCisvKioKKyAqIFNF
Q1RJT046d2Via2l0d2ViZGF0YWJhc2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQSBXZWJLaXQg
d2ViIGFwcGxpY2F0aW9uIGRhdGFiYXNlCisgKgorICogI1dlYktpdFdlYkRhdGFiYXNlIGlzIGEg
cmVwcmVzZW50YXRpb24gb2YgYSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UuIFRoZQorICogcHJvcG9z
ZWQgV2ViIERhdGFiYXNlIHN0YW5kYXJkIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgU1FMIGRhdGFi
YXNlcyB0aGF0IHdlYgorICogc2l0ZXMgY2FuIGNyZWF0ZSBhbmQgYWNjZXNzIG9uIGEgbG9jYWwg
Y29tcHV0ZXIgdGhyb3VnaCBKYXZhU2NyaXB0LgorICoKKyAqIFRvIGdldCBhY2Nlc3MgdG8gYWxs
IGRhdGFiYXNlcyBkZWZpbmVkIGJ5IGEgc2VjdXJpdHkgb3JpZ2luLCB1c2UKKyAqICN3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZXMuIEVhY2ggZGF0YWJhc2UgaGFzIGEgY2Fub25p
Y2FsCisgKiBuYW1lLCBhcyB3ZWxsIGFzIGEgdXNlci1mcmllbmRseSBkaXNwbGF5IG5hbWUuCisg
KiAKKyAqIFdlYktpdCB1c2VzIFNRTGl0ZSB0byBjcmVhdGUgYW5kIGFjY2VzcyB0aGUgbG9jYWwg
U1FMIGRhdGFiYXNlcy4gVGhlIGxvY2F0aW9uCisgKiBvZiBhICNXZWJLaXRXZWJEYXRhYmFzZSBj
YW4gYmUgYWNjZXNzZWQgd3RoICN3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wYXRoLgorICogWW91
IGNhbiBjb25maWd1cmUgdGhlIGxvY2F0aW9uIG9mIGFsbCBkYXRhYmFzZXMgd2l0aAorICogI3dl
YmtpdF9zZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGguCisgKiAKKyAqIEZvciBlYWNoIGRhdGFi
YXNlIHRoZSB3ZWIgc2l0ZSBjYW4gZGVmaW5lIGFuIGVzdGltYXRlZCBzaXplIHdoaWNoIGNhbiBi
ZQorICogYWNjZXNzZWQgd2l0aCAjd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6
ZS4gVGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUKKyAqIGRhdGFiYXNlIGluIGJ5dGVzIGlzIHJldHVy
bmVkIGJ5ICN3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zaXplLgorICogCisgKiBGb3IgbW9yZSBp
bmZvcm1hdGlvbiByZWZlciB0byB0aGUgV2ViIERhdGFiYXNlIHNwZWNpZmljYXRpb24gcHJvcG9z
YWwgYXQKKyAqIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3dlYmRhdGFiYXNlCisgKi8KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9P
UklHSU4sCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfRElTUExBWV9OQU1FLAorICAgIFBST1Bf
RVhQRUNURURfU0laRSwKKyAgICBQUk9QX1NJWkUsCisgICAgUFJPUF9QQVRICit9OworCitHX0RF
RklORV9UWVBFKFdlYktpdFdlYkRhdGFiYXNlLCB3ZWJraXRfd2ViX2RhdGFiYXNlLCBHX1RZUEVf
T0JKRUNUKQorCitzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSB7CisgICAgV2ViS2l0
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbjsKKyAgICBnY2hhciogbmFtZTsKKyAgICBnY2hhciogZGlz
cGxheV9uYW1lOworICAgIGdjaGFyKiBwYXRoOworfTsKKworc3RhdGljIGdjaGFyKiB3ZWJraXRf
ZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGggPSBOVUxMOworc3RhdGljIGd1aW50NjQgd2Via2l0X2Rl
ZmF1bHRfZGF0YWJhc2VfcXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CisKKyNkZWZpbmUgV0VCS0lU
X1dFQl9EQVRBQkFTRV9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJhc2VQcml2
YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfb3JpZ2luKFdlYktp
dFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UsIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eV9vcmlnaW4pOworCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKFdl
YktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKworc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlID0gV0VCS0lUX1dFQl9EQVRBQkFT
RShvYmplY3QpOworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFi
YXNlLT5wcml2OworCisgICAgaWYgKHByaXYtPm9yaWdpbikKKyAgICAgICAgZ19vYmplY3RfdW5y
ZWYocHJpdi0+b3JpZ2luKTsKKworICAgIGdfZnJlZShwcml2LT5uYW1lKTsKKyAgICBnX2ZyZWUo
cHJpdi0+ZGlzcGxheV9uYW1lKTsKKyAgICBnX2ZyZWUocHJpdi0+cGF0aCk7CisKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfd2ViX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSA9
IFdFQktJVF9XRUJfREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgewor
ICAgIGNhc2UgUFJPUF9PUklHSU46CisgICAgICAgIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X29y
aWdpbih3ZWJfZGF0YWJhc2UsIFdFQktJVF9TRUNVUklUWV9PUklHSU4oZ192YWx1ZV9nZXRfb2Jq
ZWN0KHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAg
ICAgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfbmFtZSh3ZWJfZGF0YWJhc2UsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRh
YmFzZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSogd2Vi
RGF0YWJhc2UgPSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9iamVjdCk7CisgICAgV2ViS2l0V2ViRGF0
YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CisKKyAgICBzd2l0Y2ggKHBy
b3BfaWQpIHsKKyAgICBjYXNlIFBST1BfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHByaXYtPm9yaWdpbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9O
QU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJh
c2VfZ2V0X25hbWUod2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0RJU1BMQVlfTkFNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
d2ViX2RhdGFiYXNlX2dldF9kaXNwbGF5X25hbWUod2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0VYUEVDVEVEX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vp
bnQ2NCh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZSh3ZWJEYXRh
YmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgZ192
YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zaXplKHdlYkRh
dGFiYXNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVRIOgorICAgICAgICBn
X3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3BhdGgod2Vi
RGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Y2xhc3NfaW5pdChXZWJLaXRXZWJEYXRhYmFzZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVj
dF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX2RhdGFiYXNlX2ZpbmFsaXplOworICAgIGdv
YmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF93ZWJfZGF0YWJh
c2VfZ2V0X3Byb3BlcnR5OworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpv
cmlnaW46CisgICAgICAqCisgICAgICAqIFRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIGRhdGFi
YXNlLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfT1JJR0lOLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
Im9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJPcmlnaW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIGRh
dGFiYXNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChH
X1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAgLyoq
CisgICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOm5hbWU6CisgICAgICAqCisgICAgICAqIFRoZSBu
YW1lIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UuCisgICAgICAqCisgICAgICAqIFNpbmNl
OiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdF9jbGFzcywgUFJPUF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoIm5hbWUiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTmFtZSIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG5h
bWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRhYmFzZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFncykg
KEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgICAv
KioKKyAgICAgICogV2ViS2l0V2ViRGF0YWJhc2U6ZGlzcGxheS1uYW1lOgorICAgICAgKgorICAg
ICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UuCisgICAg
ICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9ESVNQTEFZX05BTUUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZGlz
cGxheS1uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIkRpc3BsYXkgTmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGRpc3BsYXkgbmFtZSBvZiB0
aGUgV2ViIFN0cm9hZ2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpleHBlY3RlZC1zaXplOgor
ICAgICAqCisgICAgICogVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5dGVz
IGFzIGRlZmluZWQgYnkgdGhlIHdlYiBhdXRob3IuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4x
LjEzCisgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dF9jbGFzcywgUFJPUF9FWFBFQ1RFRF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJleHBlY3RlZC1zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiRXhwZWN0ZWQgU2l6ZSIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgV2ViIERh
dGFiYXNlIGRhdGFiYXNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAgLyoqCisgICAgICogV2ViS2l0
V2ViRGF0YWJhc2U6c2l6ZToKKyAgICAgKgorICAgICAqIFRoZSBjdXJyZW50IHNpemUgb2YgdGhl
IGRhdGFiYXNlIGluIGJ5dGVzLgorICAgICAqCisgICAgICogU2luY2U6IDEuMS4xMworICAgICAq
LworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBS
T1BfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfdWludDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNpemUiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGN1cnJlbnQg
c2l6ZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAg
LyoqCisgICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOnBhdGg6CisgICAgICAqCisgICAgICAqIFRo
ZSBmaWxlc3lzdGVtIHBhdGggb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoK
KyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX1BBVEgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygicGF0aCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJQYXRo
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgZmlsZXN5c3RlbSBwYXRoIG9mIHRoZSBXZWIgU3Ryb2FnZSBkYXRhYmFzZSIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2VfaW5pdChXZWJLaXRXZWJEYXRhYmFzZSog
d2ViX2RhdGFiYXNlKQoreworICAgIHdlYl9kYXRhYmFzZS0+cHJpdiA9IFdFQktJVF9XRUJfREFU
QUJBU0VfR0VUX1BSSVZBVEUod2ViX2RhdGFiYXNlKTsKK30KKworLy8gSW50ZXJuYWwgdXNlIG9u
bHkKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X29yaWdpbihXZWJLaXRXZWJE
YXRhYmFzZSAqd2ViX2RhdGFiYXNlLCBXZWJLaXRTZWN1cml0eU9yaWdpbiAqc2VjdXJpdHlfb3Jp
Z2luKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJf
ZGF0YWJhc2UpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklH
SU4oc2VjdXJpdHlfb3JpZ2luKSk7CisKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHBy
aXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisKKyAgICBpZiAocHJpdi0+b3JpZ2luKQorICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2LT5vcmlnaW4pOworCisgICAgZ19vYmplY3RfcmVmKHNlY3Vy
aXR5X29yaWdpbik7CisgICAgcHJpdi0+b3JpZ2luID0gc2VjdXJpdHlfb3JpZ2luOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKFdlYktpdFdlYkRhdGFiYXNl
KiB3ZWJfZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpKTsKKworICAgIFdlYktpdFdl
YkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKyAgICBnX2ZyZWUo
cHJpdi0+bmFtZSk7CisgICAgcHJpdi0+bmFtZSA9IGdfc3RyZHVwKG5hbWUpOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X29yaWdpbjoKKyAqIEB3ZWJfZGF0YWJhc2U6IGEg
I1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgc2VjdXJpdHkgb3JpZ2luIG9m
IHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisgKgorICogUmV0dXJuczogdGhlIHNlY3VyaXR5IG9y
aWdpbiBvZiB0aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitXZWJLaXRT
ZWN1cml0eU9yaWdpbiogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfb3JpZ2luKFdlYktpdFdlYkRh
dGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCBOVUxMKTsKKyAgICBXZWJLaXRXZWJEYXRh
YmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisKKyAgICByZXR1cm4gcHJp
di0+b3JpZ2luOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWU6Cisg
KiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhl
IGNhbm9uaWNhbCBuYW1lIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisgKgorICogUmV0dXJu
czogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlCisgKgorICogU2luY2U6IDEuMS4xMworICoqLwor
R19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUoV2ViS2l0
V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIE5VTEwpOworICAgIFdlYktpdFdl
YkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKworICAgIHJldHVy
biBwcml2LT5uYW1lOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3Bs
YXlfbmFtZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICog
UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGFzIHNlZW4gYnkgdGhl
IHVzZXIuCisgKgorICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGFzIHNlZW4g
YnkgdGhlIHVzZXIuCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworR19DT05TVF9SRVRVUk4g
Z2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZShXZWJLaXRXZWJEYXRh
YmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfREFUQUJBU0Uod2ViX2RhdGFiYXNlKSwgTlVMTCk7CisKKyNpZiBFTkFCTEUoREFUQUJB
U0UpCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5w
cml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFt
ZSwgY29yZShwcml2LT5vcmlnaW4pKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgZGlzcGxheU5hbWUg
PSAgZGV0YWlscy5kaXNwbGF5TmFtZSgpOworCisgICAgaWYgKCFkaXNwbGF5TmFtZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZ19mcmVlKHByaXYtPmRpc3BsYXlfbmFtZSk7CisgICAgICAgIHByaXYt
PmRpc3BsYXlfbmFtZSA9IGdfc3RyZHVwKGRpc3BsYXlOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm4gcHJpdi0+ZGlzcGxheV9uYW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiAiIjsKKyAgICB9CisjZWxzZQorICAgIHJldHVybiAiIjsKKyNlbmRpZgorfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2V4cGVjdGVkX3NpemU6CisgKiBAd2ViX2RhdGFi
YXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGV4cGVjdGVkIHNp
emUgb2YgdGhlICNXZWJLaXRXZWJEYXRhYmFzZSBpbiBieXRlcyBhcyBkZWZpbmVkIGJ5IHRoZQor
ICogd2ViIGF1dGhvci4gVGhlIFdlYiBEYXRhYmFzZSBzdGFuZGFyZCBhbGxvd3Mgd2ViIGF1dGhv
cnMgdG8gc3BlY2lmeSBhbiBleHBlY3RlZAorICogc2l6ZSBvZiB0aGUgZGF0YWJhc2UgdG8gb3B0
aW1pemUgdGhlIHVzZXIgZXhwZXJpZW5jZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZXhwZWN0ZWQg
c2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiov
CitndWludDY0IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2V4cGVjdGVkX3NpemUoV2ViS2l0V2Vi
RGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIDApOworCisjaWYgRU5BQkxFKERBVEFC
QVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+
cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9IFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKHByaXYtPm5h
bWUsIGNvcmUocHJpdi0+b3JpZ2luKSk7CisgICAgcmV0dXJuIGRldGFpbHMuZXhwZWN0ZWRVc2Fn
ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93
ZWJfZGF0YWJhc2VfZ2V0X3NpemU6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRh
YmFzZQorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSAjV2ViS2l0V2ViRGF0
YWJhc2Ugc3BhY2Ugb24gZGlzayBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgYWN0dWFs
IHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5dGVzCisgKgorICogU2luY2U6IDEuMS4xMworICoq
LworZ3VpbnQ2NCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zaXplKFdlYktpdFdlYkRhdGFiYXNl
KiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCAwKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAg
ICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7Cisg
ICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihwcml2LT5uYW1lLCBjb3Jl
KHByaXYtPm9yaWdpbikpOworICAgIHJldHVybiBkZXRhaWxzLmN1cnJlbnRVc2FnZSgpOworI2Vs
c2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJh
c2VfZ2V0X3BhdGg6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoK
KyAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlICNXZWJLaXRXZWJEYXRhYmFzZSBmaWxlIG9uIGRp
c2suCisgKgorICogUmV0dXJuczogdGhlIGZpbGVzeXN0ZW0gcGF0aCBvZiB0aGUgZGF0YWJhc2UK
KyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfcGF0aChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViX2Rh
dGFiYXNlKSwgTlVMTCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViS2l0V2ViRGF0
YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2OworICAgIFdlYkNvcmU6OlN0
cmluZyBjb3JlTmFtZSA9IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgocHJpdi0+bmFtZSk7Cisg
ICAgV2ViQ29yZTo6U3RyaW5nIGNvcmVQYXRoID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShjb3JlKHByaXYtPm9yaWdpbiksIGNvcmVOYW1l
KTsKKworICAgIGlmICghY29yZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIGdfZnJlZShwcml2
LT5wYXRoKTsKKyAgICAgICAgcHJpdi0+cGF0aCA9IGdfc3RyZHVwKGNvcmVQYXRoLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gcHJpdi0+cGF0aDsKKyAgICB9IGVsc2UgeworICAgICAg
ICByZXR1cm4gIiI7CisgICAgfQorI2Vsc2UKKyAgICByZXR1cm4gIiI7CisjZW5kaWYKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEg
I1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmVtb3ZlcyB0aGUgI1dlYktpdFdlYkRhdGFiYXNl
IGZyb20gaXRzIHNlY3VyaXR5IG9yaWdpbiBhbmQgZGVzdHJveXMgYWxsIGRhdGEKKyAqIHN0b3Jl
ZCBpbiB0aGUgZGF0YWJhc2UuCisgKgorICogU2luY2U6IDEuMS4xMworICoqLwordm9pZCB3ZWJr
aXRfd2ViX2RhdGFiYXNlX3JlbW92ZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJh
c2UpKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZh
dGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuZGVsZXRlRGF0YWJhc2UoY29yZShwcml2LT5vcmlnaW4pLCBwcml2LT5u
YW1lKTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFz
ZXM6CisgKgorICogUmVtb3ZlcyBhbGwgd2ViIGRhdGFiYXNlcyBmcm9tIHRoZSBjdXJyZW50IGRh
dGFiYXNlIGRpcmVjdG9yeSBwYXRoLgorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK3ZvaWQg
d2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcygpCit7CisjaWYgRU5BQkxFKERBVEFCQVNF
KQorICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZUFsbERhdGFi
YXNlcygpOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X2dldF9kYXRhYmFzZV9kaXJlY3Rv
cnlfcGF0aDoKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhdGggdG8gdGhlIGRpcmVjdG9y
eSBXZWJLaXQgd2lsbCB3cml0ZSBXZWIgCisgKiBEYXRhYmFzZSBkYXRhYmFzZXMuIEJ5IGRlZmF1
bHQgdGhpcyBwYXRoIHdpbGwgYmUgaW4gdGhlIHVzZXIgZGF0YQorICogZGlyZWN0b3J5LgorICoK
KyAqIFJldHVybnM6IHRoZSBjdXJyZW50IGRhdGFiYXNlIGRpcmVjdG9yeSBwYXRoCisgKgorICog
U2luY2U6IDEuMS4xMworICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9nZXRfZGF0
YWJhc2VfZGlyZWN0b3J5X3BhdGgoKQoreworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJD
b3JlOjpTdHJpbmcgcGF0aCA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRh
dGFiYXNlRGlyZWN0b3J5UGF0aCgpOworICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgZ19mcmVlKHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCk7CisgICAgICAgIHdlYmtp
dF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCA9IGdfc3RyZHVwKHBhdGgudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIHJldHVybiB3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGg7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyNlbHNlCisgICAgcmV0dXJuICIiOwor
I2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aDoK
KyAqIEBwYXRoOiB0aGUgbmV3IGRhdGFiYXNlIGRpcmVjdG9yeSBwYXRoCisgKgorICogU2V0cyB0
aGUgY3VycmVudCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgV2ViS2l0IHdpbGwgd3JpdGUgV2ViIAor
ICogRGF0YWJhc2UgZGF0YWJhc2VzLiAKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2b2lk
IHdlYmtpdF9zZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoY29uc3QgZ2NoYXIqIHBhdGgpCit7
CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlN0cmluZyBjb3JlUGF0aCA9IFdl
YkNvcmU6OlN0cmluZzo6ZnJvbVVURjgocGF0aCk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvcmVQYXRoKTsKKworICAg
IGdfZnJlZSh3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgpOworICAgIHdlYmtpdF9kYXRh
YmFzZV9kaXJlY3RvcnlfcGF0aCA9IGdfc3RyZHVwKGNvcmVQYXRoLnV0ZjgoKS5kYXRhKCkpOwor
I2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X2dldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhOgor
ICoKKyAqIFJldHVybnMgdGhlIGRlZmF1bHQgcXVvdGEgZm9yIFdlYiBEYXRhYmFzZSBkYXRhYmFz
ZXMuIEJ5IGRlZmF1bHQKKyAqIHRoaXMgdmFsdWUgaXMgNU1CLgorIAorICogUmV0dXJuczogdGhl
IGN1cnJlbnQgZGVmYXVsdCBkYXRhYmFzZSBxdW90YSBpbiBieXRlcworICoKKyAqIFNpbmNlOiAx
LjEuMTMKKyAqKi8KK2d1aW50NjQgd2Via2l0X2dldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhKCkK
K3sKKyAgICByZXR1cm4gd2Via2l0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGE7Cit9CisKKy8qKgor
ICogd2Via2l0X3NldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhOgorICogQGRlZmF1bHRfcXVvdGE6
IHRoZSBuZXcgZGVmYXVsdCBkYXRhYmFzZSBxdW90YQorICoKKyAqIFNldHMgdGhlIGN1cnJlbnQg
cGF0aCB0byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAqIERhdGFiYXNl
IGRhdGFiYXNlcy4gCisgKgorICogU2luY2U6IDEuMS4xMworICoqLwordm9pZCB3ZWJraXRfc2V0
X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEoZ3VpbnQ2NCBkZWZhdWx0X3F1b3RhKQoreworICAgIHdl
YmtpdF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhID0gZGVmYXVsdF9xdW90YTsKK30KZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmRmM2IzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJkYXRhYmFzZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
TWFydGluIFJvYmluc29uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1dFQl9EQVRBQkFTRV9ICisjZGVmaW5lIFdF
QktJVF9XRUJfREFUQUJBU0VfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfVFlQRV9XRUJfREFUQUJBU0UgICAgICAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRShvYmopICAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RBVEFC
QVNFLCBXZWJLaXRXZWJEYXRhYmFzZSkpCisjZGVmaW5lIFdFQktJVF9XRUJfREFUQUJBU0VfQ0xB
U1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9U
WVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJhc2VDbGFzcykpCisjZGVmaW5lIFdFQktJ
VF9JU19XRUJfREFUQUJBU0Uob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9JU19X
RUJfREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9XRUJfREFUQUJB
U0VfR0VUX0NMQVNTKG9iaikgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9UWVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJhc2VDbGFzcykpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUgV2ViS2l0V2ViRGF0YWJhc2VQcml2
YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlIHsKKyAgICBHT2JqZWN0IHBhcmVudF9p
bnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJp
dmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2VDbGFzcyB7CisgICAg
R09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBl
eHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDMpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAg
ICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0eU9yaWdpbiAqCit3ZWJraXRf
d2ViX2RhdGFiYXNlX2dldF9vcmlnaW4gICAgICAgICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9k
YXRhYmFzZSk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfd2Vi
X2RhdGFiYXNlX2dldF9uYW1lICAgICAgICAgICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRh
YmFzZSk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfd2ViX2Rh
dGFiYXNlX2dldF9kaXNwbGF5X25hbWUgICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFz
ZSk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0
ZWRfc2l6ZSAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpOworCitXRUJLSVRfQVBJ
IGd1aW50NjQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUgICAgICAgICAgIChXZWJLaXRX
ZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBn
Y2hhcioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgIChXZWJLaXRXZWJE
YXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2Rh
dGFiYXNlX3JlbW92ZSAgICAgICAgICAgICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFz
ZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcyAg
ICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0
X2dldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9zZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGggICAgIChjb25zdCBnY2hhciog
cGF0aCk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2dldF9kZWZhdWx0X2RhdGFiYXNl
X3F1b3RhICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9zZXRfZGVmYXVs
dF9kYXRhYmFzZV9xdW90YSAgICAgIChndWludDY0IGRlZmF1bHRfcXVvdGEpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogX19XRUJLSVRfV0VCX0RBVEFCQVNFX0hfXyAqLwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZnJhbWUuY3BwCmluZGV4IDdlMmNlNDUuLmYzOTQ0ZTYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKQEAgLTg4NiwzICs4ODYsMjAgQEAgQXRrT2JqZWN0KiB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9mb2N1c2VkX2FjY2Vzc2libGVfZWxlbWVudChXZWJLaXRXZWJG
cmFtZSogZnJhbWUKICAgICByZXR1cm4gTlVMTDsKICNlbmRpZgogfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X29yaWdpbjoKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAq
CisgKiBSZXR1cm5zIHRoZSBAZnJhbWUncyBzZWN1cml0eSBvcmlnaW4uCisgKgorICogUmV0dXJu
IHZhbHVlOiB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIEBmcmFtZQorICovCitXZWJLaXRTZWN1cml0
eU9yaWdpbiogd2Via2l0X3dlYl9mcmFtZV9nZXRfb3JpZ2luKFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIHByaXYgPSBmcmFtZS0+cHJpdjsKKyAg
ICBpZiAoIXByaXYtPmNvcmVGcmFtZSB8fCAhcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBraXQocHJpdi0+Y29yZUZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFt
ZS5oCmluZGV4IGIyZTYxYjkuLjEwNGQwNWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmZyYW1lLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUu
aApAQCAtMTUyLDYgKzE1Miw5IEBAIHdlYmtpdF93ZWJfZnJhbWVfcHJpbnQgICAgICAgICAgICAg
IChXZWJLaXRXZWJGcmFtZSAgICAgICAqZnJhbWUpOwogV0VCS0lUX0FQSSBXZWJLaXRMb2FkU3Rh
dHVzCiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9sb2FkX3N0YXR1cyAgICAoV2ViS2l0V2ViRnJhbWUg
ICAgICAgKmZyYW1lKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0eU9yaWdpbioKK3dlYmtp
dF93ZWJfZnJhbWVfZ2V0X29yaWdpbiAgICAgICAgIChXZWJLaXRXZWJGcmFtZSAgICAgICAqZnJh
bWUpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAKaW5kZXggOTdjMGM5MS4uZDlhZjhjMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAKQEAgLTE0Miw2ICsxNDIsNyBAQCBlbnVtIHsKICAgICBQUklOVF9SRVFVRVNURUQsCiAgICAg
UExVR0lOX1dJREdFVCwKICAgICBDTE9TRV9XRUJfVklFVywKKyAgICBEQVRBQkFTRV9RVU9UQV9F
WENFRURFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTg5Niw2ICsxODk3LDI4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyog
d2ViVmlld0NsYXNzKQogICAgICAgICAgICAgR1RLX1RZUEVfV0lER0VULCAzLAogICAgICAgICAg
ICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywgR19UWVBFX0hBU0hfVEFCTEUpOwogCisg
ICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6ZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQKKyAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAg
ICAqIEBmcmFtZTogdGhlIHJlbGV2YW50IGZyYW1lCisgICAgICogQGRhdGFiYXNlOiB0aGUgI1dl
YktpdFdlYkRhdGFiYXNlIHdoaWNoIGV4Y2VlZGVkIHRoZSBxdW90YSBvZiBpdHMgI1dlYktpdFNl
Y3VyaXR5T3JpZ2luCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OmRhdGFiYXNl
LWV4Y2VlZGVkLXF1b3RhIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgd2hlbgorICAgICAqIGEgV2Vi
IERhdGFiYXNlIGV4Y2VlZHMgdGhlIHF1b3RhIG9mIGl0cyBzZWN1cml0eSBvcmlnaW4uIFRoaXMg
c2lnbmFsCisgICAgICogbWF5IGJlIHVzZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHF1
b3RhIGJlZm9yZSB0aGUgb3JpZ2luYXRpbmcKKyAgICAgKiBvcGVyYXRpb24gZmFpbHMuCisgICAg
ICoKKyAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3Np
Z25hbHNbREFUQUJBU0VfUVVPVEFfRVhDRUVERURdID0gZ19zaWduYWxfbmV3KCJkYXRhYmFzZS1x
dW90YS1leGNlZWRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykgKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19T
SUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLCBOVUxMLAor
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAg
ICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX09C
SkVDVCk7CisKICAgICAvKgogICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhv
ZHMKICAgICAgKi8KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9E
dW1wUmVuZGVyVHJlZS5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJl
bmRlclRyZWUuY3BwCmluZGV4IDRmMzA0OWUuLmQ3ZmQ2NjQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNTkzLDYgKzU5Mywy
MyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0Nsb3NlKFdlYktpdFdlYlZpZXcqIHZpZXcpCiAg
ICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkIGRhdGFiYXNlUXVvdGFFeGNlZWRlZChX
ZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIFdlYktpdFdlYkRhdGFi
YXNlICpkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQodmlldyk7CisgICAgQVNTRVJUKGZyYW1lKTsK
KyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdp
biA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X29yaWdpbihkYXRhYmFzZSk7CisgICAgaWYgKGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAg
cHJpbnRmKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1
b3RhRm9yU2VjdXJpdHlPcmlnaW46eyVzLCAlcywgJWl9IGRhdGFiYXNlOiVzXG4iLAorICAgICAg
ICAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wob3JpZ2luKSwKKyAgICAg
ICAgICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSwKKyAgICAgICAg
ICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQob3JpZ2luKSwKKyAgICAgICAgICAg
IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUoZGF0YWJhc2UpKTsKKyAgICB9CisgICAgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCA1ICogMTAyNCAq
IDEwMjQpOworfQorCiAKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Q3JlYXRlKFdlYktp
dFdlYlZpZXcqLCBXZWJLaXRXZWJGcmFtZSopOwogCkBAIC02MTcsNiArNjM0LDcgQEAgc3RhdGlj
IFdlYktpdFdlYlZpZXcqIGNyZWF0ZVdlYlZpZXcoKQogICAgICAgICAgICAgICAgICAgICAgInNp
Z25hbDo6c3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCB3ZWJWaWV3U3RhdHVzQmFyVGV4dENoYW5n
ZWQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpjcmVhdGUtd2ViLXZpZXciLCB3
ZWJWaWV3Q3JlYXRlLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6Y2xvc2Utd2Vi
LXZpZXciLCB3ZWJWaWV3Q2xvc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpk
YXRhYmFzZS1xdW90YS1leGNlZWRlZCIsIGRhdGFiYXNlUXVvdGFFeGNlZWRlZCwgMCwKICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOwogCiAgICAgcmV0dXJuIHZpZXc7CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3Bw
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3Rr
LmNwcAppbmRleCBmMDNjYzgwLi4xYTQ2NjBjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTMy
OCwxMiArMzI4LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVu
dFVzZXJTdHlsZVNoZWV0KCkKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxE
YXRhYmFzZXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICB3ZWJraXRfcmVtb3Zl
X2FsbF93ZWJfZGF0YWJhc2VzKCk7CiB9CiAgCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsgICAgCi0gICAgLy8g
RklYTUU6IGltcGxlbWVudAoreworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9vcmlnaW4obWFpbkZyYW1lKTsKKyAgICB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YShvcmlnaW4sIHF1b3RhKTsKIH0KIAogdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25n
IGxvbmcgc2l6ZSkKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38794</attachid>
            <date>2009-08-30 12:40:49 -0700</date>
            <delta_ts>2009-08-30 12:49:49 -0700</delta_ts>
            <desc>Fixed memory issues</desc>
            <filename>0001-Database-patch.patch</filename>
            <type>text/plain</type>
            <size>53794</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSAyN2U3ZTMzMmI5OTdiYTkyOThkNWIxNDM1OWJmMGQ4YzA3NDhmZTA3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTUgQXVnIDIwMDkgMTU6Mjk6MjYgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBEYXRhYmFzZSBwYXRjaAoKLS0tCiBHTlVtYWtlZmlsZS5hbSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1NraXBwZWQgICAgICAgICAgICAgICAgICAgfCAgICA5IC0KIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCAgICAgIHwgICAxNCArLQogV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcCAgICAgICAgICAgICAgICB8ICAgIDUgKy0K
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgICAx
OSArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAgICAgICAgICB8
ICA0MzcgKysrKysrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlv
cmlnaW4uaCAgICAgICAgICAgfCAgIDgwICsrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZGF0YWJhc2UuY3BwICAgICAgICAgICAgfCAgNTI1ICsrKysrKysrKysrKysrKysrKysrCiBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oICAgICAgICAgICAgICB8ICAgOTYgKysr
KwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwICAgICAgICAgICAgICAgfCAg
IDI2ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmggICAgICAgICAgICAgICAg
IHwgICAgMyArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCAgICAgICAgICAg
ICAgICB8ICAgMjMgKwogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJU
cmVlLmNwcCAgfCAgIDE4ICsKIC4uLi9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwIHwgICAgNyArLQogMTYgZmlsZXMgY2hhbmdlZCwgMTI1NiBpbnNlcnRpb25z
KCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaAoKZGlmZiAtLWdpdCBhL0dOVW1ha2Vm
aWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggOTlhOGI2NS4uMGI5MDBlZSAxMDA2NDQKLS0t
IGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTMyOSw2ICszMjksNyBA
QCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJzZXR0aW5ncy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
d2luZG93ZmVhdHVyZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNl
LmggXAogCSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmgK
IAogd2Via2l0Z3RrX2J1aWx0X3NvdXJjZXMgKz0gXApAQCAtMzY2LDYgKzM2NywxMCBAQCB3ZWJr
aXRndGtfc291cmNlcyArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaW5zcGVjdG9y
LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5jcHAg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmNwcCBcCisJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0
eW9yaWdpbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmgg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YndpbmRvd2ZlYXR1cmVzLmNwcCBcCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDkxOWZh
OWEuLmZlOTUwMDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0zOTQwLDEyICszOTQw
LDYgQEAgc2VjdXJpdHkvYXV0b2NvbXBsZXRlLWNsZWFyZWQtb24tYmFjay5odG1sCiBzZWN1cml0
eS9ibG9jay10ZXN0LW5vLXBvcnQuaHRtbAogc2VjdXJpdHkvYmxvY2stdGVzdC5odG1sCiAKLSMg
VGVzdHMgaW4gc3RvcmFnZS8gZGlyZWN0b3J5Ci0jICAgVGVzdHMgZmFpbGluZwotc3RvcmFnZS9x
dW90YS10cmFja2luZy5odG1sCi1zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3dpbmRv
dy1vcGVuLmh0bWwKLXN0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS93aW5kb3ctb3Bl
bi5odG1sCi0KICMgVGVzdHMgaW4gc3ZnLyBkaXJlY3RvcnkKICMgICBUZXN0cyBmYWlsaW5nCiBz
dmcvY3VzdG9tL2VtYmVkZGVkLXN2Zy1kaXNhbGxvd2VkLWluLWRhc2hib2FyZC54bWwKQEAgLTU4
NDEsOSArNTgzNSw2IEBAIGZhc3QvYmxvY2svbWFyZ2luLWNvbGxhcHNlL2Jsb2NrLWluc2lkZS1p
bmxpbmUKICMgVGVzdHMgd2l0aCBidWdzIGF0dGFjaGVkIDogRW5hYmxlIHRoZXNlIHRlc3RzIGFn
YWluIG9uY2UgdGhlc2UgYnVncyBhcmUgZml4ZWQuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLQogCi0j
IFJFR1JFU1NJT046IFNlZSBCdWcgIzI3MTQ0IC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3MTQ0Ci1zdG9yYWdlL2RhdGFiYXNlLWxvY2stYWZ0ZXItcmVsb2FkLmh0
bWwKLQogIyBTZWUgQnVnICMyNzYzNyAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzYzNwogZmFzdC9oaXN0b3J5L3NhdmVzLXN0YXRlLWFmdGVyLWZyYWdtZW50LW5h
di5odG1sCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cAppbmRleCA5NjdkMzdhLi45MzdhMDM1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC00ODQsMTMgKzQ4NCwxNyBAQCB2b2lkIENocm9tZUNs
aWVudDo6cHJpbnQoRnJhbWUqIGZyYW1lKQogfQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotdm9p
ZCBDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0
IFN0cmluZyYpCit2b2lkIENocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1l
KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCiB7Ci0gICAgLy8gU2V0IHRvIDVN
IGZvciB0ZXN0aW5nCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBjb25maWd1cmFibGUKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVv
dGEgPSA1ICogMTAyNCAqIDEwMjQ7CisgICAgZ3VpbnQ2NCBkZWZhdWx0UXVvdGEgPSB3ZWJraXRf
Z2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEoKTsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5zZXRRdW90YShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgZGVmYXVs
dFF1b3RhKTsKKworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSA9IGtpdChmcmFtZSk7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUod2ViRnJhbWUpOwor
CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X29yaWdpbih3ZWJGcmFtZSk7CisgICAgV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlID0g
d2Via2l0X3dlYl9kYXRhYmFzZV9mcm9tX3NlY3VyaXR5X29yaWdpbihvcmlnaW4sIGRhdGFiYXNl
TmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywg
ImRhdGFiYXNlLXF1b3RhLWV4Y2VlZGVkIiwgd2ViRnJhbWUsIHdlYkRhdGFiYXNlKTsKIH0KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGMyMjE2NWUuLjhlZWNkYWEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVt
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2ViZGF0YWJhc2UuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmln
aW4uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZW51bXR5cGVzLmg+CiAKICNlbmRpZiAvKiBf
X1dFQktJVF9IX18gKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmlu
ZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAppbmRleCBiMGFiNWU5Li5h
M2EyMTI5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysr
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC03MSw2ICs3MSwxMiBAQCB0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdlYktpdFdlYlZpZXdDbGFzczsKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCBXZWJLaXREb3dubG9hZDsKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdlYktpdERvd25sb2FkQ2xhc3M7CiAKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZSBXZWJLaXRXZWJEYXRhYmFzZTsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJEYXRhYmFzZUNsYXNzIFdlYktpdFdlYkRhdGFiYXNlQ2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpbiBXZWJLaXRTZWN1cml0eU9yaWdpbjsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpbkNsYXNzIFdlYktpdFNlY3VyaXR5
T3JpZ2luQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRw
cml2YXRlLmNwcAppbmRleCA0ZTQ4NjEzLi45NDk0M2EwIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRw
cml2YXRlLmNwcApAQCAtMTYyLDkgKzE2MiwxMCBAQCB2b2lkIHdlYmtpdF9pbml0KCkKICAgICBX
ZWJDb3JlOjpwYWdlQ2FjaGUoKS0+c2V0Q2FwYWNpdHkoMyk7CiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCi0gICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxp
Y2F0aW9ucyB0byBvdmVycmlkZSB0aGlzIGRlZmF1bHQgbG9jYXRpb24KICAgICBnY2hhciogZGF0
YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwg
IndlYmtpdCIsICJkYXRhYmFzZXMiLCBOVUxMKTsKLSAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3Rvcnkp
OworICAgIHdlYmtpdF9zZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoZGF0YWJhc2VEaXJlY3Rv
cnkpOworCisgICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFw
cGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBhcHBjYWNoZSBsb2NhdGlvbgogICAg
IFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLnNldENhY2hlRGlyZWN0b3J5KGRhdGFiYXNlRGlyZWN0
b3J5KTsKICAgICBnX2ZyZWUoZGF0YWJhc2VEaXJlY3RvcnkpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRwcml2YXRlLmgKaW5kZXggM2RjODdlNC4uZGUxYmZhMCAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHByaXZhdGUuaApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ3
aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4KIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJk
TGlzdC5oIgogI2luY2x1ZGUgPGVuY2hhbnQuaD4KQEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAj
aW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUgPGdsaWIuaD4KQEAgLTc5LDYgKzgxLDkgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IGNvcmUoV2Vi
S2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwogCiAgICAgV2ViQ29yZTo6RWRpdGluZ0JlaGF2
aW9yIGNvcmUoV2ViS2l0RWRpdGluZ0JlaGF2aW9yIHR5cGUpOworCisgICAgV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIGtpdChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiopOworICAgIFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luKiBjb3JlKFdlYktpdFNlY3VyaXR5T3JpZ2luKik7CiB9CiAKIHR5cGVkZWYg
c3RydWN0IHsKQEAgLTEzNyw2ICsxNDIsMTcgQEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIGdjaGFy
KiB0aXRsZTsKICAgICAgICAgZ2NoYXIqIHVyaTsKICAgICAgICAgV2ViS2l0TG9hZFN0YXR1cyBs
b2FkU3RhdHVzOworICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luOworICAgIH07
CisKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9HRVRfUFJJVkFURShvYmopIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJ
TiwgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKSkKKyAgICBzdHJ1Y3QgX1dlYktpdFNlY3Vy
aXR5T3JpZ2luUHJpdmF0ZSB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bj4gY29yZU9yaWdpbjsKKyAgICAgICAgZ2NoYXIqIHByb3RvY29sOworICAgICAgICBnY2hhciog
aG9zdDsKKyAgICAgICAgR0hhc2hUYWJsZSogd2ViRGF0YWJhc2VzOworCisgICAgICAgIGdib29s
ZWFuIGRpc3Bvc2VkOwogICAgIH07CiAKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPgpA
QCAtMjYxLDYgKzI3Nyw5IEBAIGV4dGVybiAiQyIgewogICAgIAogICAgIFdFQktJVF9BUEkgdm9p
ZAogICAgIHdlYmtpdF9yZXNldF9vcmlnaW5fYWNjZXNzX3doaXRlX2xpc3RzKCk7CisKKyAgICBX
RUJLSVRfQVBJIFdlYktpdFdlYkRhdGFiYXNlICoKKyAgICB3ZWJraXRfd2ViX2RhdGFiYXNlX2Zy
b21fc2VjdXJpdHlfb3JpZ2luKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4s
IGNvbnN0IGNoYXIqIGRhdGFiYXNlX25hbWUpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNwcCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iNzZjZDZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c2VjdXJpdHlvcmlnaW4uY3BwCkBAIC0wLDAgKzEsNDM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbiwgSmFuIE1pY2hhZWwgQy4gQWxvbnpvCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJkYXRhYmFzZS5oIgorCisjaW5jbHVkZSAi
d2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisKKyNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgorCisvKioKKyAqIFNFQ1RJT046d2Via2l0c2VjdXJpdHlvcmlnaW4K
KyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQSBzZWN1cml0eSBib3VuZGFyeSBmb3Igd2ViIHNpdGVz
CisgKgorICogI1dlYktpdFNlY3VyaXR5T3JpZ2luIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgYSBz
ZWN1cml0eSBkb21haW4gZGVmaW5lZAorICogYnkgd2ViIHNpdGVzLiBBbiBvcmlnaW4gY29uc2lz
dHMgb2YgYSBob3N0IG5hbWUsIGEgc2NoZW1lLCBhbmQgYSBwb3J0CisgKiBudW1iZXIuIFdlYiBz
aXRlcyB3aXRoIHRoZSBzYW1lIHNlY3VyaXR5IG9yaWdpbiBjYW4gYWNjZXNzIGVhY2ggb3RoZXIn
cworICogcmVzb3VyY2VzIGZvciBjbGllbnQtc2lkZSBzY3JpcHRpbmcgb3IgZGF0YWJhc2UgYWNj
ZXNzLgorICogCisgKiBVc2UgI3dlYmtpdF93ZWJfZnJhbWVfZ2V0X29yaWdpbiB0byBnZXQgdGhl
IHNlY3VyaXR5IG9yaWdpbiBvZiBhCisgKiAjV2ViS2l0V2ViRnJhbWUuCisgKgorICogRGF0YWJh
c2UgcXVvdGFzIGFuZCB1c2FnZXMgYXJlIGFsc28gZGVmaW5lZCBwZXIgc2VjdXJpdHkgb3JpZ2lu
LiBUaGUKKyAqIGN1bXVsYXRpdmUgZGlzayB1c2FnZSBvZiBhbiBvcmlnaW4ncyBkYXRhYmFzZXMg
bWF5IGJlIHJldHJpZXZlZCB3aXRoCisgKiAjd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0
YWJhc2VfdXNhZ2UuIEFuIG9yaWdpbidzIHF1b3RhIGNhbiBiZQorICogYWRqdXN0ZWQgd2l0aCAj
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2VfcXVvdGEuCisgKi8KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9QUk9U
T0NPTCwKKyAgICBQUk9QX0hPU1QsCisgICAgUFJPUF9QT1JULAorICAgIFBST1BfREFUQUJBU0Vf
VVNBR0UsCisgICAgUFJPUF9EQVRBQkFTRV9RVU9UQQorfTsKKworR19ERUZJTkVfVFlQRShXZWJL
aXRTZWN1cml0eU9yaWdpbiwgd2Via2l0X3NlY3VyaXR5X29yaWdpbiwgR19UWVBFX09CSkVDVCkK
Kworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VC
S0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJp
dmF0ZSogcHJpdiA9IHNlY3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgZ19mcmVlKHByaXYtPnBy
b3RvY29sKTsKKyAgICBnX2ZyZWUocHJpdi0+aG9zdCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyhz
ZWN1cml0eU9yaWdpbiktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihv
YmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5
T3JpZ2luLT5wcml2OworCisgICAgaWYgKCFwcml2LT5kaXNwb3NlZCkgeworICAgICAgICBwcml2
LT5jb3JlT3JpZ2luLT5kZXJlZigpOworICAgICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShwcml2
LT53ZWJEYXRhYmFzZXMpOworICAgICAgICBwcml2LT5kaXNwb3NlZCA9IHRydWU7CisgICAgfQor
CisgICAgR19PQkpFQ1RfQ0xBU1Moc2VjdXJpdHlPcmlnaW4pLT5kaXNwb3NlKG9iamVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0g
V0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7
CisgICAgY2FzZSBQUk9QX0RBVEFCQVNFX1FVT1RBOgorICAgICAgICB3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YShzZWN1cml0eU9yaWdpbiwgZ192YWx1ZV9nZXRfdWlu
dDY0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbiA9IFdFQktJVF9TRUNVUklUWV9PUklHSU4ob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChz
ZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSE9TVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9ob3N0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
T1JUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9wb3J0KHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9EQVRBQkFTRV9VU0FHRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3
ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZShzZWN1cml0eU9yaWdpbikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQUJBU0VfUVVPVEE6CisgICAgICAg
IGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0
YWJhc2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dIYXNoVGFibGUqIHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogc2VjdXJp
dHlPcmlnaW5zID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0
X2VxdWFsLCBOVUxMLCBnX29iamVjdF91bnJlZik7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2lu
czsKK30KKwordm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2FkZChXZWJLaXRTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdpbikKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4ob3JpZ2luKSk7CisK
KyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCk7CisgICAg
Z19oYXNoX3RhYmxlX2luc2VydCh0YWJsZSwgY29yZU9yaWdpbiwgb3JpZ2luKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0KFdlYktpdFNlY3VyaXR5
T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9kaXNwb3NlOworICAgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXpl
ID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0X2NsYXNzLT5z
ZXRfcHJvcGVydHkgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9w
cm9wZXJ0eTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJpdHlPcmlnaW46cHJvdG9j
b2w6CisgICAgICAqCisgICAgICAqIFRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2lu
LgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUFJPVE9DT0wsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygi
cHJvdG9jb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiUHJvdG9jb2wiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJp
dHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAgLyoq
CisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOmhvc3Q6CisgICAgICAqCisgICAgICAqIFRo
ZSBob3N0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgICAgICAqCisgICAgICAqIFNpbmNlOiAx
LjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdF9jbGFzcywgUFJPUF9IT1NULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImhvc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSG9zdCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhvc3Qg
b2YgdGhlIHNlY3VyaXR5IG9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRTZWN1cml0eU9yaWdpbjpwb3J0OgorICAgICAg
KgorICAgICAgKiBUaGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICAgICAgKgorICAg
ICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgicG9ydCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUG9ydCIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBwb3J0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVTSE9SVCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3Jp
Z2luOmRhdGFiYXNlLXVzYWdlOgorICAgICAgKgorICAgICAgKiBUaGUgY3VtdWxhdGl2ZSBzaXpl
IG9mIGFsbCBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBieXRlcy4KKyAgICAg
ICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9EQVRBQkFTRV9VU0FHRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgi
ZGF0YWJhc2UtdXNhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiRGF0YWJhc2UgVXNhZ2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIGRhdGFiYXNlcyBpbiB0aGUg
c2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAgLyoqCisgICAgICAqIFdl
YktpdFNlY3VyaXR5T3JpZ2luOmRhdGFiYXNlLXF1b3RhOgorICAgICAgKgorICAgICAgKiBUaGUg
ZGF0YWJhc2UgcW91dGEgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBieXRlcy4KKyAgICAgICoK
KyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9EQVRBQkFTRV9RVU9UQSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgiZGF0
YWJhc2UtcXVvdGEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiRGF0YWJhc2UgUXVvdGEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBkYXRhYmFzZSBxdW90YSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIGJ5
dGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01B
WFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShr
bGFzcywgc2l6ZW9mKFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSkpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2luaXQoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5X29yaWdpbikKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYg
PSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dFVF9QUklWQVRFKHNlY3VyaXR5X29yaWdpbik7Cisg
ICAgcHJpdi0+d2ViRGF0YWJhc2VzID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gs
IGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2JqZWN0X3VucmVmKTsKKyAgICBzZWN1cml0eV9vcmln
aW4tPnByaXYgPSBwcml2OworfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0
X3Byb3RvY29sOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4K
KyAqCisgKiBSZXR1cm5zIHRoZSBwcm90b2NvbCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAq
CisgKiBSZXR1cm5zOiB0aGUgcHJvdG9jb2wgZm9yIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqCisg
KiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9nZXRfcHJvdG9jb2woV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29y
aWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJ
R0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Q
cml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3JpZ2luLT5wcml2OworICAgIFdlYkNvcmU6OlN0cmlu
ZyBwcm90b2NvbCA9ICBwcml2LT5jb3JlT3JpZ2luLT5wcm90b2NvbCgpOworCisgICAgaWYgKHBy
b3RvY29sLmlzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZ19mcmVlKHByaXYtPnByb3RvY29sKTsKKyAgICAgICAgcHJpdi0+cHJvdG9jb2wgPSBn
X3N0cmR1cChwcm90b2NvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHByaXYtPnBy
b3RvY29sOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9o
b3N0OgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisg
KiBSZXR1cm5zIHRoZSBob3N0bmFtZSBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBS
ZXR1cm5zOiB0aGUgaG9zdG5hbWUgZm9yIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5j
ZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfaG9zdChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJp
dHlfb3JpZ2luKSwgTlVMTCk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHBy
aXYgPSBzZWN1cml0eV9vcmlnaW4tPnByaXY7CisgICAgV2ViQ29yZTo6U3RyaW5nIGhvc3QgPSAg
cHJpdi0+Y29yZU9yaWdpbi0+aG9zdCgpOworCisgICAgaWYgKGhvc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHJldHVybiAiIjsKKyAgICB9IGVsc2UgeworICAgICAgICBnX2ZyZWUocHJpdi0+aG9z
dCk7CisgICAgICAgIHByaXYtPmhvc3QgPSBnX3N0cmR1cChob3N0LnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm4gcHJpdi0+aG9zdDsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfcG9ydDoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNl
Y3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgcG9ydCBmb3IgdGhlIHNlY3VyaXR5IG9y
aWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcG9ydCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbgor
ICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5f
Z2V0X3BvcnQoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29y
aWdpbiksIDApOworCisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBj
b3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAgcmV0dXJuIGNvcmVPcmlnaW4tPnBvcnQoKTsKK30K
KworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZToKKyAq
IEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJu
cyB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBXZWIgRGF0YWJhc2UgZGF0YWJhc2UncyBpbiB0
aGUgb3JpZ2luCisgKiBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY3VtdWxhdGl2ZSBz
aXplIG9mIGFsbCBkYXRhYmFzZXMgCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworZ3VpbnQ2
NCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZShXZWJLaXRTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSwgMCk7CisKKyNpZiBFTkFC
TEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBj
b3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLnVzYWdlRm9yT3JpZ2luKGNvcmVPcmlnaW4pOworI2Vsc2UKKyAgICByZXR1
cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2Rh
dGFiYXNlX3F1b3RhOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmln
aW4KKyAqCisgKiBSZXR1cm5zIHRoZSBxdW90YSBmb3IgV2ViIERhdGFiYXNlIHN0b3JhZ2Ugb2Yg
dGhlIHNlY3VyaXR5IG9yaWdpbgorICogaW4gYnl0ZXMuCisgKgorICogUmV0dXJuczogdGhlIFdl
YiBEYXRhYmFzZSBxdW90YQorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50NjQgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VfcXVvdGEoV2ViS2l0U2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIDApOworCisjaWYgRU5BQkxFKERB
VEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShz
ZWN1cml0eV9vcmlnaW4pOworICAgIHJldHVybiBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5xdW90YUZvck9yaWdpbihjb3JlT3JpZ2luKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7
CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFz
ZV9xdW90YToKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisg
KiBAcXVvdGE6IGEgbmV3IFdlYiBEYXRhYmFzZSBxdW90YSBpbiBieXRlcworICoKKyAqIEFkanVz
dCB0aGUgcXVvdGEgZm9yIFdlYiBEYXRhYmFzZSBzdG9yYWdlIG9mIHRoZSBzZWN1cml0eSBvcmln
aW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmln
aW5fc2V0X2RhdGFiYXNlX3F1b3RhKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmln
aW4sIGd1aW50NjQgcXVvdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfU0VD
VVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbikpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQor
ICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9v
cmlnaW4pOworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3Rh
KGNvcmVPcmlnaW4sIHF1b3RhKTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZ2V0X2RhdGFiYXNlczoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNl
Y3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIFdlYiBEYXRhYmFzZXMg
aW4gdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiBhICNHbGlzdCBvZiBkYXRh
YmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiov
CitHTGlzdCogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VzKFdlYktpdFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmlnaW4pLCBOVUxMKTsKKyAgICBH
TGlzdCogZGF0YWJhc2VzID0gTlVMTDsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlfb3JpZ2luKTsK
KyAgICBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiBkYXRhYmFzZU5hbWVzOworCisgICAgaWYgKCFX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZU5hbWVzRm9yT3JpZ2lu
KGNvcmVPcmlnaW4sIGRhdGFiYXNlTmFtZXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhYmFzZU5hbWVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFdlYktpdFdlYkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfZGF0YWJhc2Vf
ZnJvbV9zZWN1cml0eV9vcmlnaW4oc2VjdXJpdHlfb3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICBkYXRhYmFzZXMgPSBnX2xpc3RfYXBwZW5kKGRhdGFiYXNl
cywgZGF0YWJhc2UpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGRhdGFiYXNlczsKK30K
KworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIFdlYktpdDo6a2l0KFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luKiBjb3JlT3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPcmlnaW4s
IE5VTEwpOworCisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
cygpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSAoV2ViS2l0U2VjdXJpdHlP
cmlnaW4qKSBnX2hhc2hfdGFibGVfbG9va3VwKHRhYmxlLCBjb3JlT3JpZ2luKTsKKworICAgIGlm
ICghb3JpZ2luKSB7CisgICAgICAgIG9yaWdpbiA9IFdFQktJVF9TRUNVUklUWV9PUklHSU4oZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgTlVMTCkpOworICAgICAgICBv
cmlnaW4tPnByaXYtPmNvcmVPcmlnaW4gPSBjb3JlT3JpZ2luOworICAgICAgICB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2FkZChvcmlnaW4sIGNvcmVPcmlnaW4pOworICAgIH0KKworICAgIHJldHVy
biBvcmlnaW47Cit9CisKKworV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIFdlYktpdDo6Y29yZShX
ZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSwgTlVM
TCk7CisKKyAgICByZXR1cm4gc2VjdXJpdHlfb3JpZ2luLT5wcml2LT5jb3JlT3JpZ2luLmdldCgp
OworfQorCitXZWJLaXRXZWJEYXRhYmFzZSogd2Via2l0X3dlYl9kYXRhYmFzZV9mcm9tX3NlY3Vy
aXR5X29yaWdpbihXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luLCBjb25zdCBn
Y2hhciogZGF0YWJhc2VfbmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworCisgICAgV2ViS2l0
U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3JpZ2luLT5wcml2OworICAg
IEdIYXNoVGFibGUqIGRhdGFiYXNlSGFzaCA9IHByaXYtPndlYkRhdGFiYXNlczsKKyAgICBXZWJL
aXRXZWJEYXRhYmFzZSogZGF0YWJhc2UgPSAoV2ViS2l0V2ViRGF0YWJhc2UqKSBnX2hhc2hfdGFi
bGVfbG9va3VwKGRhdGFiYXNlSGFzaCwgZGF0YWJhc2VfbmFtZSk7CisKKyAgICBpZiAoIWRhdGFi
YXNlKSB7CisgICAgICAgIGRhdGFiYXNlID0gIFdFQktJVF9XRUJfREFUQUJBU0UoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJvcmlnaW4iLCBzZWN1cml0eV9vcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsIGRhdGFiYXNlX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOworICAgICAgICBnX2hhc2hfdGFi
bGVfaW5zZXJ0KGRhdGFiYXNlSGFzaCwgZ19zdHJkdXAoZGF0YWJhc2VfbmFtZSksIGRhdGFiYXNl
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YWJhc2U7Cit9CisKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmE4OWY1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1
cml0eW9yaWdpbi5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
TWFydGluIFJvYmluc29uLCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfU0VD
VVJJVFlfT1JJR0lOX0gKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9ICisKKyNpbmNs
dWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbi5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmRhdGFiYXNl
LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklH
SU4gICAgICAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOLCBXZWJLaXRT
ZWN1cml0eU9yaWdpbikpCisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9PUklHSU5fQ0xBU1Moa2xh
c3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1NF
Q1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW5DbGFzcykpCisjZGVmaW5lIFdFQktJ
VF9JU19TRUNVUklUWV9PUklHSU4ob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTikpCisjZGVmaW5lIFdFQktJ
VF9JU19TRUNVUklUWV9PUklHSU5fQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTikpCisjZGVmaW5lIFdFQktJ
VF9TRUNVUklUWV9PUklHSU5fR0VUX0NMQVNTKG9iaikgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlP
cmlnaW5DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpblByaXZh
dGUgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5
T3JpZ2luIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRl
ID4qLworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0U2VjdXJpdHlPcmlnaW5DbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIEdf
Q09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wg
ICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRf
QVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9z
dCAgICAgICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pOworCitX
RUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0ICAgICAgICAg
ICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkg
Z3VpbnQ2NAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VfdXNhZ2UgKFdlYktp
dFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIGd1aW50NjQK
K3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlX3F1b3RhIChXZWJLaXRTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworV0VCS0lUX0FQSSB2b2lkIAord2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2VfcXVvdGEgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eV9vcmlnaW4sIGd1aW50NjQgcXVvdGEpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dl
YmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlcyAgICAgIChXZWJLaXRTZWN1cml0eU9y
aWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fV0VC
S0lUX1NFQ1VSSVRZX09SSUdJTl9IX18gKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmRhdGFiYXNlLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFi
YXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTk2ZjUzCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCkBA
IC0wLDAgKzEsNTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNv
bgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKKwor
I2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJEYXRhYmFzZURldGFpbHMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKwor
I2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKKy8qKgorICogU0VDVElPTjp3ZWJraXR3ZWJk
YXRhYmFzZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIFdlYktpdCB3ZWIgYXBwbGljYXRpb24g
ZGF0YWJhc2UKKyAqCisgKiAjV2ViS2l0V2ViRGF0YWJhc2UgaXMgYSByZXByZXNlbnRhdGlvbiBv
ZiBhIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4gVGhlCisgKiBwcm9wb3NlZCBXZWIgRGF0YWJhc2Ug
c3RhbmRhcmQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciBTUUwgZGF0YWJhc2VzIHRoYXQgd2ViCisg
KiBzaXRlcyBjYW4gY3JlYXRlIGFuZCBhY2Nlc3Mgb24gYSBsb2NhbCBjb21wdXRlciB0aHJvdWdo
IEphdmFTY3JpcHQuCisgKgorICogVG8gZ2V0IGFjY2VzcyB0byBhbGwgZGF0YWJhc2VzIGRlZmlu
ZWQgYnkgYSBzZWN1cml0eSBvcmlnaW4sIHVzZQorICogI3dlYmtpdF9zZWN1cml0eV9vcmlnaW5f
Z2V0X2RhdGFiYXNlcy4gRWFjaCBkYXRhYmFzZSBoYXMgYSBjYW5vbmljYWwKKyAqIG5hbWUsIGFz
IHdlbGwgYXMgYSB1c2VyLWZyaWVuZGx5IGRpc3BsYXkgbmFtZS4KKyAqIAorICogV2ViS2l0IHVz
ZXMgU1FMaXRlIHRvIGNyZWF0ZSBhbmQgYWNjZXNzIHRoZSBsb2NhbCBTUUwgZGF0YWJhc2VzLiBU
aGUgbG9jYXRpb24KKyAqIG9mIGEgI1dlYktpdFdlYkRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCB3
dGggI3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3BhdGguCisgKiBZb3UgY2FuIGNvbmZpZ3VyZSB0
aGUgbG9jYXRpb24gb2YgYWxsIGRhdGFiYXNlcyB3aXRoCisgKiAjd2Via2l0X3NldF9kYXRhYmFz
ZV9kaXJlY3RvcnlfcGF0aC4KKyAqIAorICogRm9yIGVhY2ggZGF0YWJhc2UgdGhlIHdlYiBzaXRl
IGNhbiBkZWZpbmUgYW4gZXN0aW1hdGVkIHNpemUgd2hpY2ggY2FuIGJlCisgKiBhY2Nlc3NlZCB3
aXRoICN3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplLiBUaGUgY3VycmVudCBz
aXplIG9mIHRoZQorICogZGF0YWJhc2UgaW4gYnl0ZXMgaXMgcmV0dXJuZWQgYnkgI3dlYmtpdF93
ZWJfZGF0YWJhc2VfZ2V0X3NpemUuCisgKiAKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVy
IHRvIHRoZSBXZWIgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBwcm9wb3NhbCBhdAorICogaHR0cDov
L2Rldi53My5vcmcvaHRtbDUvd2ViZGF0YWJhc2UKKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX09SSUdJTiwKKyAgICBQUk9Q
X05BTUUsCisgICAgUFJPUF9ESVNQTEFZX05BTUUsCisgICAgUFJPUF9FWFBFQ1RFRF9TSVpFLAor
ICAgIFBST1BfU0laRSwKKyAgICBQUk9QX1BBVEgKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
V2ViRGF0YWJhc2UsIHdlYmtpdF93ZWJfZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVj
dCBfV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlIHsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiog
b3JpZ2luOworICAgIGdjaGFyKiBuYW1lOworICAgIGdjaGFyKiBkaXNwbGF5X25hbWU7CisgICAg
Z2NoYXIqIHBhdGg7Cit9OworCitzdGF0aWMgZ2NoYXIqIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3Rv
cnlfcGF0aCA9IE5VTEw7CitzdGF0aWMgZ3VpbnQ2NCB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9x
dW90YSA9IDUgKiAxMDI0ICogMTAyNDsKKworI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFX0dF
VF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lU
X1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUpKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9vcmlnaW4oV2ViS2l0V2ViRGF0YWJhc2UqIHdl
Yl9kYXRhYmFzZSwgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X25hbWUoV2ViS2l0V2ViRGF0YWJhc2Uq
IHdlYl9kYXRhYmFzZSwgY29uc3QgZ2NoYXIqIG5hbWUpOworCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2RhdGFiYXNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJE
YXRhYmFzZSogd2ViRGF0YWJhc2UgPSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9iamVjdCk7CisgICAg
V2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CisKKyAg
ICBpZiAocHJpdi0+b3JpZ2luKQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5vcmlnaW4p
OworCisgICAgZ19mcmVlKHByaXYtPm5hbWUpOworICAgIGdfZnJlZShwcml2LT5kaXNwbGF5X25h
bWUpOworICAgIGdfZnJlZShwcml2LT5wYXRoKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF93ZWJfZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlID0gV0VCS0lUX1dFQl9EQVRB
QkFTRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX09S
SUdJTjoKKyAgICAgICAgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfb3JpZ2luKHdlYl9kYXRhYmFz
ZSwgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfd2ViX2Rh
dGFiYXNlX3NldF9uYW1lKHdlYl9kYXRhYmFzZSwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSA9IFdFQktJ
VF9XRUJfREFUQUJBU0Uob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHBy
aXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNh
c2UgUFJPUF9PUklHSU46CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgcHJpdi0+
b3JpZ2luKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdf
dmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfbmFtZSh3ZWJE
YXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElTUExBWV9OQU1FOgor
ICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X2Rpc3BsYXlfbmFtZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfRVhQRUNURURfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJr
aXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplKHdlYkRhdGFiYXNlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQo
dmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUod2ViRGF0YWJhc2UpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcGF0aCh3ZWJEYXRhYmFzZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9jbGFzc19pbml0KFdlYktp
dFdlYkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9j
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVjdF9jbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfcHJvcGVydHk7CisgICAgZ29iamVj
dF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcHJvcGVydHk7
CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOm9yaWdpbjoKKyAgICAgICoK
KyAgICAgICogVGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAqCisg
ICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9PUklHSU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgib3JpZ2luIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk9y
aWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiVGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJhc2UiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRF
IHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0
V2ViRGF0YWJhc2U6bmFtZToKKyAgICAgICoKKyAgICAgICogVGhlIG5hbWUgb2YgdGhlIFdlYiBE
YXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAg
Ki8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQ
Uk9QX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygibmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJOYW1lIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbmFtZSBvZiB0aGUgV2ViIERh
dGFiYXNlIGRhdGFiYXNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgIC8qKgorICAgICAgKiBXZWJL
aXRXZWJEYXRhYmFzZTpkaXNwbGF5LW5hbWU6CisgICAgICAqCisgICAgICAqIFRoZSBkaXNwbGF5
IG5hbWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoKKyAgICAgICogU2lu
Y2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0X2NsYXNzLCBQUk9QX0RJU1BMQVlfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJkaXNwbGF5LW5hbWUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
RGlzcGxheSBOYW1lIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBXZWIgU3Ryb2FnZSBk
YXRhYmFzZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgIC8qKgor
ICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOmV4cGVjdGVkLXNpemU6CisgICAgICoKKyAgICAgKiBU
aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMgYXMgZGVmaW5lZCBieSB0
aGUgd2ViIGF1dGhvci4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgKi8KKyAg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0VY
UEVDVEVEX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImV4cGVjdGVkLXNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJFeHBlY3RlZCBTaXplIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2Ui
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5U
NjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpzaXpl
OgorICAgICAqCisgICAgICogVGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0
ZXMuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICovCisgICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9TSVpFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXplIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU2l6ZSIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgY3VycmVudCBzaXplIG9mIHRoZSBXZWIg
RGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAvKioKKyAgICAgICogV2Vi
S2l0V2ViRGF0YWJhc2U6cGF0aDoKKyAgICAgICoKKyAgICAgICogVGhlIGZpbGVzeXN0ZW0gcGF0
aCBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlLgorICAgICAgKgorICAgICAgKiBTaW5jZTog
MS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdv
YmplY3RfY2xhc3MsIFBST1BfUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlBhdGgiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBmaWxl
c3lzdGVtIHBhdGggb2YgdGhlIFdlYiBTdHJvYWdlIGRhdGFiYXNlIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3Ms
IHNpemVvZihXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl9kYXRhYmFzZV9pbml0KFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7
CisgICAgd2ViX2RhdGFiYXNlLT5wcml2ID0gV0VCS0lUX1dFQl9EQVRBQkFTRV9HRVRfUFJJVkFU
RSh3ZWJfZGF0YWJhc2UpOworfQorCisvLyBJbnRlcm5hbCB1c2Ugb25seQorc3RhdGljIHZvaWQg
d2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfb3JpZ2luKFdlYktpdFdlYkRhdGFiYXNlICp3ZWJfZGF0
YWJhc2UsIFdlYktpdFNlY3VyaXR5T3JpZ2luICpzZWN1cml0eV9vcmlnaW4pCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSkpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmln
aW4pKTsKKworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFz
ZS0+cHJpdjsKKworICAgIGlmIChwcml2LT5vcmlnaW4pCisgICAgICAgIGdfb2JqZWN0X3VucmVm
KHByaXYtPm9yaWdpbik7CisKKyAgICBnX29iamVjdF9yZWYoc2VjdXJpdHlfb3JpZ2luKTsKKyAg
ICBwcml2LT5vcmlnaW4gPSBzZWN1cml0eV9vcmlnaW47Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfZGF0YWJhc2Vfc2V0X25hbWUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSwg
Y29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VC
X0RBVEFCQVNFKHdlYl9kYXRhYmFzZSkpOworCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRl
KiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2OworICAgIGdfZnJlZShwcml2LT5uYW1lKTsKKyAg
ICBwcml2LT5uYW1lID0gZ19zdHJkdXAobmFtZSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9k
YXRhYmFzZV9nZXRfb3JpZ2luOgorICogQHdlYl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0YWJh
c2UKKyAqCisgKiBSZXR1cm5zIHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlICNXZWJLaXRXZWJE
YXRhYmFzZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIHRoZSBkYXRh
YmFzZQorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK1dlYktpdFNlY3VyaXR5T3JpZ2luKiB3
ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9vcmlnaW4oV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRh
YmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNF
KHdlYl9kYXRhYmFzZSksIE5VTEwpOworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJp
diA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKworICAgIHJldHVybiBwcml2LT5vcmlnaW47Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfbmFtZToKKyAqIEB3ZWJfZGF0YWJhc2U6
IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgY2Fub25pY2FsIG5hbWUg
b2YgdGhlICNXZWJLaXRXZWJEYXRhYmFzZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0
aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBn
Y2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfbmFtZShXZWJLaXRXZWJEYXRhYmFzZSogd2Vi
X2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFU
QUJBU0Uod2ViX2RhdGFiYXNlKSwgTlVMTCk7CisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRl
KiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2OworCisgICAgcmV0dXJuIHByaXYtPm5hbWU7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lOgorICogQHdl
Yl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0YWJhc2UKKyAqCisgKiBSZXR1cm5zIHRoZSBuYW1l
IG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UgYXMgc2VlbiBieSB0aGUgdXNlci4KKyAqCisgKiBS
ZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgYXMgc2VlbiBieSB0aGUgdXNlci4KKyAq
CisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dl
Yl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJh
c2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3
ZWJfZGF0YWJhc2UpLCBOVUxMKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRX
ZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisgICAgV2ViQ29y
ZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihwcml2LT5uYW1lLCBjb3JlKHByaXYtPm9y
aWdpbikpOworICAgIFdlYkNvcmU6OlN0cmluZyBkaXNwbGF5TmFtZSA9ICBkZXRhaWxzLmRpc3Bs
YXlOYW1lKCk7CisKKyAgICBpZiAoIWRpc3BsYXlOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBn
X2ZyZWUocHJpdi0+ZGlzcGxheV9uYW1lKTsKKyAgICAgICAgcHJpdi0+ZGlzcGxheV9uYW1lID0g
Z19zdHJkdXAoZGlzcGxheU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBwcml2
LT5kaXNwbGF5X25hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0K
KyNlbHNlCisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9k
YXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdl
YkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgI1dlYktp
dFdlYkRhdGFiYXNlIGluIGJ5dGVzIGFzIGRlZmluZWQgYnkgdGhlCisgKiB3ZWIgYXV0aG9yLiBU
aGUgV2ViIERhdGFiYXNlIHN0YW5kYXJkIGFsbG93cyB3ZWIgYXV0aG9ycyB0byBzcGVjaWZ5IGFu
IGV4cGVjdGVkCisgKiBzaXplIG9mIHRoZSBkYXRhYmFzZSB0byBvcHRpbWl6ZSB0aGUgdXNlciBl
eHBlcmllbmNlLgorICoKKyAqIFJldHVybnM6IHRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBkYXRh
YmFzZSBpbiBieXRlcworICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50NjQgd2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2Rh
dGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJB
U0Uod2ViX2RhdGFiYXNlKSwgMCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViS2l0
V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2OworICAgIFdlYkNv
cmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFtZSwgY29yZShwcml2LT5v
cmlnaW4pKTsKKyAgICByZXR1cm4gZGV0YWlscy5leHBlY3RlZFVzYWdlKCk7CisjZWxzZQorICAg
IHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRf
c2l6ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0
dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlICNXZWJLaXRXZWJEYXRhYmFzZSBzcGFjZSBvbiBk
aXNrIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnM6IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZGF0
YWJhc2UgaW4gYnl0ZXMKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitndWludDY0IHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9k
YXRhYmFzZSksIDApOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFi
YXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRh
YmFzZURldGFpbHMgZGV0YWlscyA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKHByaXYtPm5hbWUsIGNvcmUocHJpdi0+b3JpZ2luKSk7
CisgICAgcmV0dXJuIGRldGFpbHMuY3VycmVudFVzYWdlKCk7CisjZWxzZQorICAgIHJldHVybiAw
OworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcGF0aDoKKyAq
IEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUg
cGF0aCB0byB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGZpbGUgb24gZGlzay4KKyAqCisgKiBSZXR1
cm5zOiB0aGUgZmlsZXN5c3RlbSBwYXRoIG9mIHRoZSBkYXRhYmFzZQorICoKKyAqIFNpbmNlOiAx
LjEuMTMKKyAqKi8KK0dfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfd2ViX2RhdGFiYXNlX2dl
dF9wYXRoKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCBOVUxMKTsK
KworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHBy
aXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisgICAgV2ViQ29yZTo6U3RyaW5nIGNvcmVOYW1lID0g
V2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChwcml2LT5uYW1lKTsKKyAgICBXZWJDb3JlOjpTdHJp
bmcgY29yZVBhdGggPSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0
aEZvckRhdGFiYXNlKGNvcmUocHJpdi0+b3JpZ2luKSwgY29yZU5hbWUpOworCisgICAgaWYgKCFj
b3JlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ19mcmVlKHByaXYtPnBhdGgpOworICAgICAg
ICBwcml2LT5wYXRoID0gZ19zdHJkdXAoY29yZVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IHJldHVybiBwcml2LT5wYXRoOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9CisjZWxzZQorICAgIHJldHVybiAiIjsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93
ZWJfZGF0YWJhc2VfcmVtb3ZlOgorICogQHdlYl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0YWJh
c2UKKyAqCisgKiBSZW1vdmVzIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UgZnJvbSBpdHMgc2VjdXJp
dHkgb3JpZ2luIGFuZCBkZXN0cm95cyBhbGwgZGF0YQorICogc3RvcmVkIGluIHRoZSBkYXRhYmFz
ZS4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
cmVtb3ZlKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSkpOworCisjaWYgRU5B
QkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9k
YXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5k
ZWxldGVEYXRhYmFzZShjb3JlKHByaXYtPm9yaWdpbiksIHByaXYtPm5hbWUpOworI2VuZGlmCit9
CisKKy8qKgorICogd2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlczoKKyAqCisgKiBSZW1v
dmVzIGFsbCB3ZWIgZGF0YWJhc2VzIGZyb20gdGhlIGN1cnJlbnQgZGF0YWJhc2UgZGlyZWN0b3J5
IHBhdGguCisgKgorICogU2luY2U6IDEuMS4xMworICoqLwordm9pZCB3ZWJraXRfcmVtb3ZlX2Fs
bF93ZWJfZGF0YWJhc2VzKCkKK3sKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsRGF0YWJhc2VzKCk7CisjZW5kaWYK
K30KKworLyoqCisgKiB3ZWJraXRfZ2V0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoOgorICoKKyAq
IFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdy
aXRlIFdlYiAKKyAqIERhdGFiYXNlIGRhdGFiYXNlcy4gQnkgZGVmYXVsdCB0aGlzIHBhdGggd2ls
bCBiZSBpbiB0aGUgdXNlciBkYXRhCisgKiBkaXJlY3RvcnkuCisgKgorICogUmV0dXJuczogdGhl
IGN1cnJlbnQgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgKKyAqCisgKiBTaW5jZTogMS4xLjEzCisg
KiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X2dldF9kYXRhYmFzZV9kaXJlY3Rvcnlf
cGF0aCgpCit7CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlN0cmluZyBwYXRo
ID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKCk7CisgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBnX2ZyZWUod2Via2l0
X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKTsKKyAgICAgICAgd2Via2l0X2RhdGFiYXNlX2RpcmVj
dG9yeV9wYXRoID0gZ19zdHJkdXAocGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aDsKKyAgICB9IGVsc2UgeworICAgICAgICBy
ZXR1cm4gIiI7CisgICAgfQorI2Vsc2UKKyAgICByZXR1cm4gIiI7CisjZW5kaWYKK30KKworLyoq
CisgKiB3ZWJraXRfc2V0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoOgorICogQHBhdGg6IHRoZSBu
ZXcgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgKKyAqCisgKiBTZXRzIHRoZSBjdXJyZW50IHBhdGgg
dG8gdGhlIGRpcmVjdG9yeSBXZWJLaXQgd2lsbCB3cml0ZSBXZWIgCisgKiBEYXRhYmFzZSBkYXRh
YmFzZXMuIAorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK3ZvaWQgd2Via2l0X3NldF9kYXRh
YmFzZV9kaXJlY3RvcnlfcGF0aChjb25zdCBnY2hhciogcGF0aCkKK3sKKyNpZiBFTkFCTEUoREFU
QUJBU0UpCisgICAgV2ViQ29yZTo6U3RyaW5nIGNvcmVQYXRoID0gV2ViQ29yZTo6U3RyaW5nOjpm
cm9tVVRGOChwYXRoKTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5z
ZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoY29yZVBhdGgpOworCisgICAgZ19mcmVlKHdlYmtpdF9k
YXRhYmFzZV9kaXJlY3RvcnlfcGF0aCk7CisgICAgd2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9w
YXRoID0gZ19zdHJkdXAoY29yZVBhdGgudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKworLyoq
CisgKiB3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGE6CisgKgorICogUmV0dXJucyB0
aGUgZGVmYXVsdCBxdW90YSBmb3IgV2ViIERhdGFiYXNlIGRhdGFiYXNlcy4gQnkgZGVmYXVsdAor
ICogdGhpcyB2YWx1ZSBpcyA1TUIuCisgCisgKiBSZXR1cm5zOiB0aGUgY3VycmVudCBkZWZhdWx0
IGRhdGFiYXNlIHF1b3RhIGluIGJ5dGVzCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworZ3Vp
bnQ2NCB3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEoKQoreworICAgIHJldHVybiB3
ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YTsKK30KKworLyoqCisgKiB3ZWJraXRfc2V0X2Rl
ZmF1bHRfZGF0YWJhc2VfcXVvdGE6CisgKiBAZGVmYXVsdF9xdW90YTogdGhlIG5ldyBkZWZhdWx0
IGRhdGFiYXNlIHF1b3RhCisgKgorICogU2V0cyB0aGUgY3VycmVudCBwYXRoIHRvIHRoZSBkaXJl
Y3RvcnkgV2ViS2l0IHdpbGwgd3JpdGUgV2ViIAorICogRGF0YWJhc2UgZGF0YWJhc2VzLiAKKyAq
CisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2b2lkIHdlYmtpdF9zZXRfZGVmYXVsdF9kYXRhYmFz
ZV9xdW90YShndWludDY0IGRlZmF1bHRfcXVvdGEpCit7CisgICAgd2Via2l0X2RlZmF1bHRfZGF0
YWJhc2VfcXVvdGEgPSBkZWZhdWx0X3F1b3RhOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRh
dGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzYjNjNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKQEAg
LTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXRUJLSVRfV0VCX0RBVEFCQVNFX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFT
RV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9E
QVRBQkFTRSAgICAgICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsIFdlYktpdFdlYkRh
dGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9DTEFTUyhrbGFzcykgICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNF
LCBXZWJLaXRXZWJEYXRhYmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9EQVRBQkFT
RShvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X1RZUEVfV0VCX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9EQVRBQkFTRV9DTEFT
UyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
V0VCX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9HRVRfQ0xBU1Mob2Jq
KSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0RB
VEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGU7CisKK3N0cnVjdCBf
V2ViS2l0V2ViRGF0YWJhc2UgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAg
Lyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2OworfTsK
Kworc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOwor
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNCkgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgKHZvaWQpOworCitX
RUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3JpZ2luICoKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X29yaWdpbiAgICAgICAgIChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VC
S0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25h
bWUgICAgICAgICAgIChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lU
X0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3Bs
YXlfbmFtZSAgIChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQ
SSBndWludDY0Cit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplICAoV2ViS2l0
V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZSAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJf
ZGF0YWJhc2UpOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0X3dl
Yl9kYXRhYmFzZV9nZXRfcGF0aCAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0
YWJhc2UpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlICAg
ICAgICAgICAgIChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzICAgICAgICAodm9pZCk7CisK
K1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfZ2V0X2RhdGFiYXNlX2Rp
cmVjdG9yeV9wYXRoICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3NldF9k
YXRhYmFzZV9kaXJlY3RvcnlfcGF0aCAgICAgKGNvbnN0IGdjaGFyKiBwYXRoKTsKKworV0VCS0lU
X0FQSSBndWludDY0Cit3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEgICAgICAodm9p
ZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3NldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3Rh
ICAgICAgKGd1aW50NjQgZGVmYXVsdF9xdW90YSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBfX1dFQktJVF9XRUJfREFUQUJBU0VfSF9fICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFt
ZS5jcHAKaW5kZXggOWYxMzViNy4uN2EzOTE0YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZnJhbWUuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZy
YW1lLmNwcApAQCAtMzY1LDYgKzM2NSw4IEBAIFdlYktpdFdlYkZyYW1lKiB3ZWJraXRfd2ViX2Zy
YW1lX25ldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHByaXYtPmNvcmVGcmFtZSA9IEZy
YW1lOjpjcmVhdGUodmlld1ByaXYtPmNvcmVQYWdlLCAwLCBjbGllbnQpLmdldCgpOwogICAgIHBy
aXYtPmNvcmVGcmFtZS0+aW5pdCgpOwogCisgICAgcHJpdi0+b3JpZ2luID0gTlVMTDsKKwogICAg
IHJldHVybiBmcmFtZTsKIH0KIApAQCAtOTk2LDMgKzk5OCwyNyBAQCBHdGtQb2xpY3lUeXBlIHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3koV2ViS2l0V2ViRnJh
bWUqIGZyYQogCiAgICAgcmV0dXJuIEdUS19QT0xJQ1lfQVVUT01BVElDOwogfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X29yaWdpbjoKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2ViRnJh
bWUKKyAqCisgKiBSZXR1cm5zIHRoZSBAZnJhbWUncyBzZWN1cml0eSBvcmlnaW4uCisgKgorICog
UmV0dXJuIHZhbHVlOiB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIEBmcmFtZQorICovCitXZWJLaXRT
ZWN1cml0eU9yaWdpbiogd2Via2l0X3dlYl9mcmFtZV9nZXRfb3JpZ2luKFdlYktpdFdlYkZyYW1l
KiBmcmFtZSkKK3sKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIHByaXYgPSBmcmFtZS0+cHJp
djsKKyAgICBpZiAoIXByaXYtPmNvcmVGcmFtZSB8fCAhcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVu
dCgpIHx8ICFwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpCisg
ICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHByaXYtPm9yaWdpbiAmJiBwcml2LT5vcmln
aW4tPnByaXYtPmNvcmVPcmlnaW4uZ2V0KCkgPT0gcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpKQorICAgICAgICByZXR1cm4gcHJpdi0+b3JpZ2luOworCisgICAg
aWYgKHByaXYtPm9yaWdpbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+b3JpZ2luKTsK
KworICAgIHByaXYtPm9yaWdpbiA9IGtpdChwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCkpOworICAgIHJldHVybiBwcml2LT5vcmlnaW47Cit9CmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZnJhbWUuaAppbmRleCBhZDM1OWY2Li5kODI3NTZjIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmZyYW1lLmgKQEAgLTE1OCw2ICsxNTgsOSBAQCB3ZWJraXRfd2ViX2ZyYW1lX2dldF9o
b3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kgKFdlYktpdFdlYkZyYW1lICAgICAgICAqZnJhbWUp
OwogV0VCS0lUX0FQSSBHdGtQb2xpY3lUeXBlCiB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0aWNh
bF9zY3JvbGxiYXJfcG9saWN5ICAgKFdlYktpdFdlYkZyYW1lICAgICAgICAqZnJhbWUpOwogCitX
RUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3JpZ2luKgord2Via2l0X3dlYl9mcmFtZV9nZXRfb3Jp
Z2luICAgICAgICAgKFdlYktpdFdlYkZyYW1lICAgICAgICpmcmFtZSk7CisKIEdfRU5EX0RFQ0xT
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA4ZDBmMDhiLi45
OWUzNTU4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMTQ0LDYgKzE0NCw3
IEBAIGVudW0gewogICAgIENMT1NFX1dFQl9WSUVXLAogICAgIFVORE8sCiAgICAgUkVETywKKyAg
ICBEQVRBQkFTRV9RVU9UQV9FWENFRURFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTk1
Miw2ICsxOTUzLDI4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdl
YktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgR1RLX1RZUEVfV0lE
R0VULCAzLAogICAgICAgICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywgR19UWVBF
X0hBU0hfVEFCTEUpOwogCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6ZGF0YWJhc2Ut
cXVvdGEtZXhjZWVkZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2
ZWQgdGhlIHNpZ25hbAorICAgICAqIEBmcmFtZTogdGhlIHJlbGV2YW50IGZyYW1lCisgICAgICog
QGRhdGFiYXNlOiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIHdoaWNoIGV4Y2VlZGVkIHRoZSBxdW90
YSBvZiBpdHMgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktp
dFdlYlZpZXc6OmRhdGFiYXNlLWV4Y2VlZGVkLXF1b3RhIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQg
d2hlbgorICAgICAqIGEgV2ViIERhdGFiYXNlIGV4Y2VlZHMgdGhlIHF1b3RhIG9mIGl0cyBzZWN1
cml0eSBvcmlnaW4uIFRoaXMgc2lnbmFsCisgICAgICogbWF5IGJlIHVzZWQgdG8gaW5jcmVhc2Ug
dGhlIHNpemUgb2YgdGhlIHF1b3RhIGJlZm9yZSB0aGUgb3JpZ2luYXRpbmcKKyAgICAgKiBvcGVy
YXRpb24gZmFpbHMuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICovCisgICAg
d2Via2l0X3dlYl92aWV3X3NpZ25hbHNbREFUQUJBU0VfUVVPVEFfRVhDRUVERURdID0gZ19zaWdu
YWxfbmV3KCJkYXRhYmFzZS1xdW90YS1leGNlZWRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykgKEdfU0lH
TkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNU
X09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgR19UWVBF
X09CSkVDVCwgR19UWVBFX09CSkVDVCk7CisKICAgICAvKgogICAgICAqIGltcGxlbWVudGF0aW9u
cyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDE3ZWQxOTAuLmE2OGJiMTggMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5j
cHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNw
cApAQCAtNTk4LDYgKzU5OCwyMyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0Nsb3NlKFdlYktp
dFdlYlZpZXcqIHZpZXcpCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkIGRhdGFi
YXNlUXVvdGFFeGNlZWRlZChXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJh
bWUsIFdlYktpdFdlYkRhdGFiYXNlICpkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQodmlldyk7Cisg
ICAgQVNTRVJUKGZyYW1lKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAgV2ViS2l0U2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X29yaWdpbihkYXRh
YmFzZSk7CisgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKCkpIHsKKyAgICAgICAgcHJpbnRmKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzog
ZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46eyVzLCAlcywgJWl9IGRhdGFi
YXNlOiVzXG4iLAorICAgICAgICAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9j
b2wob3JpZ2luKSwKKyAgICAgICAgICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qo
b3JpZ2luKSwKKyAgICAgICAgICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQob3Jp
Z2luKSwKKyAgICAgICAgICAgIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUoZGF0YWJhc2Up
KTsKKyAgICB9CisgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2VfcXVvdGEo
b3JpZ2luLCA1ICogMTAyNCAqIDEwMjQpOworfQorCiAKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRXZWJGcmFtZSopOwogCkBAIC02MjIs
NiArNjM5LDcgQEAgc3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZVdlYlZpZXcoKQogICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6c3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCB3ZWJWaWV3
U3RhdHVzQmFyVGV4dENoYW5nZWQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpj
cmVhdGUtd2ViLXZpZXciLCB3ZWJWaWV3Q3JlYXRlLCAwLAogICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6Y2xvc2Utd2ViLXZpZXciLCB3ZWJWaWV3Q2xvc2UsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjpkYXRhYmFzZS1xdW90YS1leGNlZWRlZCIsIGRhdGFiYXNlUXVvdGFF
eGNlZWRlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogCiAgICAgcmV0dXJuIHZp
ZXc7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVz
dENvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRleCBhYmFiMDgyLi5jNTViZmNiIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsu
Y3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJv
bGxlckd0ay5jcHAKQEAgLTM1MSwxMiArMzUxLDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIAogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKCk7CiB9CiAgCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSkKLXsgICAgCi0gICAgLy8gRklYTUU6IGltcGxlbWVudAoreworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9vcmlnaW4obWFpbkZyYW1lKTsK
KyAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YShvcmlnaW4sIHF1
b3RhKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38795</attachid>
            <date>2009-08-30 12:49:49 -0700</date>
            <delta_ts>2009-08-31 23:15:53 -0700</delta_ts>
            <desc>This time with ChangeLog entries</desc>
            <filename>0001-Database-patch.patch</filename>
            <type>text/plain</type>
            <size>58634</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBmOWQ0OWMzMjI5MWUzMjBkZTAyNGUwMDE5YjYyZDU0YjU4ODhlNDMwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTUgQXVnIDIwMDkgMTU6Mjk6MjYgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBEYXRhYmFzZSBwYXRjaAoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogR05VbWFrZWZpbGUuYW0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIExheW91dFRlc3RzL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZCAgICAgICAgICAgICAgICAgICB8ICAgIDkgLQogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY0ICsrKwogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwICAgICAgfCAgIDE0ICst
CiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDIgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICAgICAgICAg
fCAgICA2ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwICAgICAgICAgICAg
ICAgIHwgICAgNSArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oICAgICAgICAg
ICAgICAgICAgfCAgIDE5ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2lu
LmNwcCAgICAgICAgIHwgIDQzNyArKysrKysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oICAgICAgICAgICB8ICAgODAgKysrCiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgICAgICAgICAgICB8ICA1MjUgKysrKysrKysrKysr
KysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggICAgICAgICAg
ICAgIHwgICA5NiArKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgICAg
ICAgICAgICAgICB8ICAgMjYgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCAg
ICAgICAgICAgICAgICAgfCAgICAzICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwICAgICAgICAgICAgICAgIHwgICAyMyArCiBXZWJLaXRUb29scy9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKwogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCAgfCAgIDE4ICsKIC4uLi9EdW1wUmVuZGVyVHJlZS9n
dGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIHwgICAgNyArLQogMjAgZmlsZXMgY2hhbmdl
ZCwgMTM1OCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaAoKZGlm
ZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4MjdhYzQxLi5hYjZlZGVlIDEw
MDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MDktMDgtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0
a10gRXhwb3NlIGEgZGF0YWJhc2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBzdG9yYWdl
IEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAyMDA5LTA4LTI4
ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVt
YWtlZmlsZS5hbQppbmRleCA5OWE4YjY1Li4wYjkwMGVlIDEwMDY0NAotLS0gYS9HTlVtYWtlZmls
ZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzI5LDYgKzMyOSw3IEBAIHdlYmtpdGd0a19o
X2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdz
LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJl
cy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIFwKKwkk
KHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCiAJJCh0b3Bf
YnVpbGRkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZlcnNpb24uaAogCiB3ZWJraXRndGtf
YnVpbHRfc291cmNlcyArPSBcCkBAIC0zNjYsNiArMzY3LDEwIEBAIHdlYmtpdGd0a19zb3VyY2Vz
ICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNwcCBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRh
dGFiYXNlLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNwcCBc
CisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaCBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVy
ZXMuY3BwIFwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA5NzIxOGU3Li5hNjRlY2VkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMDktMDgtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0d0a10gRXhwb3NlIGEgZGF0YWJhc2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBzdG9y
YWdlIEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorCiAy
MDA5LTA4LTI5ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA5
MTlmYTlhLi5mZTk1MDA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMzk0MCwxMiAr
Mzk0MCw2IEBAIHNlY3VyaXR5L2F1dG9jb21wbGV0ZS1jbGVhcmVkLW9uLWJhY2suaHRtbAogc2Vj
dXJpdHkvYmxvY2stdGVzdC1uby1wb3J0Lmh0bWwKIHNlY3VyaXR5L2Jsb2NrLXRlc3QuaHRtbAog
Ci0jIFRlc3RzIGluIHN0b3JhZ2UvIGRpcmVjdG9yeQotIyAgIFRlc3RzIGZhaWxpbmcKLXN0b3Jh
Z2UvcXVvdGEtdHJhY2tpbmcuaHRtbAotc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS93
aW5kb3ctb3Blbi5odG1sCi1zdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvd2luZG93
LW9wZW4uaHRtbAotCiAjIFRlc3RzIGluIHN2Zy8gZGlyZWN0b3J5CiAjICAgVGVzdHMgZmFpbGlu
Zwogc3ZnL2N1c3RvbS9lbWJlZGRlZC1zdmctZGlzYWxsb3dlZC1pbi1kYXNoYm9hcmQueG1sCkBA
IC01ODQxLDkgKzU4MzUsNiBAQCBmYXN0L2Jsb2NrL21hcmdpbi1jb2xsYXBzZS9ibG9jay1pbnNp
ZGUtaW5saW5lCiAjIFRlc3RzIHdpdGggYnVncyBhdHRhY2hlZCA6IEVuYWJsZSB0aGVzZSB0ZXN0
cyBhZ2FpbiBvbmNlIHRoZXNlIGJ1Z3MgYXJlIGZpeGVkLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0K
IAotIyBSRUdSRVNTSU9OOiBTZWUgQnVnICMyNzE0NCAtIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzE0NAotc3RvcmFnZS9kYXRhYmFzZS1sb2NrLWFmdGVyLXJlbG9h
ZC5odG1sCi0KICMgU2VlIEJ1ZyAjMjc2MzcgLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjc2MzcKIGZhc3QvaGlzdG9yeS9zYXZlcy1zdGF0ZS1hZnRlci1mcmFnbWVu
dC1uYXYuaHRtbAogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCmluZGV4IGE5ZDhlN2UuLjVkNDg5YTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMDktMDgtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0d0a10gRXhwb3NlIGEgZGF0YWJhc2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBzdG9y
YWdlIEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFz
ZVF1b3RhKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dl
YmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHA6CisgICAg
ICAgICh3ZWJraXRfaW5pdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHByaXZhdGUuaDoKKyAg
ICAgICAgKiB3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAg
KHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9kaXNwb3NlKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0
X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKToKKyAgICAgICAgKHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fYWRkKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fY2xh
c3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2luaXQpOgorICAgICAg
ICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wpOgorICAgICAgICAod2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9wb3J0KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFi
YXNlX3VzYWdlKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNl
X3F1b3RhKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1
b3RhKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAo
d2Via2l0X3dlYl9kYXRhYmFzZV9mcm9tX3NlY3VyaXR5X29yaWdpbik6CisgICAgICAgICogd2Vi
a2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXR3ZWJkYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9m
aW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9wcm9wZXJ0eSk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJr
aXRfd2ViX2RhdGFiYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFz
ZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X29yaWdpbik6CisgICAg
ICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKToKKyAgICAgICAgKHdlYmtpdF93ZWJf
ZGF0YWJhc2VfZ2V0X29yaWdpbik6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9u
YW1lKToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZSk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplKToKKyAgICAgICAg
KHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRh
YmFzZV9nZXRfcGF0aCk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92ZSk6Cisg
ICAgICAgICh3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKToKKyAgICAgICAgKHdlYmtp
dF9nZXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgpOgorICAgICAgICAod2Via2l0X3NldF9kYXRh
YmFzZV9kaXJlY3RvcnlfcGF0aCk6CisgICAgICAgICh3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJh
c2VfcXVvdGEpOgorICAgICAgICAod2Via2l0X3NldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhKToK
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVfbmV3
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X29yaWdpbik6CisgICAgICAgICogd2Vi
a2l0L3dlYmtpdHdlYmZyYW1lLmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
OgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorCiAyMDA5LTA4LTI4ICBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRleCA5NjdkMzdhLi45MzdhMDM1IDEw
MDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAK
KysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC00
ODQsMTMgKzQ4NCwxNyBAQCB2b2lkIENocm9tZUNsaWVudDo6cHJpbnQoRnJhbWUqIGZyYW1lKQog
fQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotdm9pZCBDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0
YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYpCit2b2lkIENocm9tZUNsaWVu
dDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpCiB7Ci0gICAgLy8gU2V0IHRvIDVNIGZvciB0ZXN0aW5nCi0gICAgLy8gRklYTUU6
IE1ha2UgdGhpcyBjb25maWd1cmFibGUKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbnN0
IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CisgICAg
Z3VpbnQ2NCBkZWZhdWx0UXVvdGEgPSB3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEo
KTsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRRdW90YShmcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgZGVmYXVsdFF1b3RhKTsKKworICAgIFdlYktpdFdlYkZy
YW1lKiB3ZWJGcmFtZSA9IGtpdChmcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUod2ViRnJhbWUpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X29yaWdpbih3ZWJGcmFtZSk7CisgICAgV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlID0gd2Via2l0X3dlYl9kYXRhYmFzZV9mcm9tX3Nl
Y3VyaXR5X29yaWdpbihvcmlnaW4sIGRhdGFiYXNlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImRhdGFiYXNlLXF1b3RhLWV4Y2VlZGVkIiwg
d2ViRnJhbWUsIHdlYkRhdGFiYXNlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGMy
MjE2NWUuLjhlZWNkYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisr
KyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHdlYnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRp
b25hY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaD4KKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0ZW51bXR5cGVzLmg+CiAKICNlbmRpZiAvKiBfX1dFQktJVF9IX18gKi8KZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaAppbmRleCBiMGFiNWU5Li5hM2EyMTI5IDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZGVmaW5lcy5oCkBAIC03MSw2ICs3MSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmll
d0NsYXNzIFdlYktpdFdlYlZpZXdDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9h
ZCBXZWJLaXREb3dubG9hZDsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIFdl
YktpdERvd25sb2FkQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZSBX
ZWJLaXRXZWJEYXRhYmFzZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZUNsYXNz
IFdlYktpdFdlYkRhdGFiYXNlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0
eU9yaWdpbiBXZWJLaXRTZWN1cml0eU9yaWdpbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1
cml0eU9yaWdpbkNsYXNzIFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3M7CisKIEdfRU5EX0RFQ0xT
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5j
cHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcAppbmRleCA0ZTQ4NjEzLi45
NDk0M2EwIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcApAQCAtMTYyLDkgKzE2Miwx
MCBAQCB2b2lkIHdlYmtpdF9pbml0KCkKICAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+c2V0Q2Fw
YWNpdHkoMyk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgLy8gRklYTUU6IEl0IHNob3Vs
ZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGlzIGRl
ZmF1bHQgbG9jYXRpb24KICAgICBnY2hhciogZGF0YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2Zp
bGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIsICJkYXRhYmFzZXMiLCBOVUxM
KTsKLSAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURp
cmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIHdlYmtpdF9zZXRfZGF0YWJhc2Vf
ZGlyZWN0b3J5X3BhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworCisgICAgLy8gRklYTUU6IEl0IHNo
b3VsZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGUg
ZGVmYXVsdCBhcHBjYWNoZSBsb2NhdGlvbgogICAgIFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLnNl
dENhY2hlRGlyZWN0b3J5KGRhdGFiYXNlRGlyZWN0b3J5KTsKICAgICBnX2ZyZWUoZGF0YWJhc2VE
aXJlY3RvcnkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRw
cml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggM2RjODdl
NC4uZGUxYmZhMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmln
aW4uaD4KIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgPGVuY2hhbnQu
aD4KQEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1
ZGUgPGdsaWIuaD4KQEAgLTc5LDYgKzgxLDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0IGNvcmUoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qp
OwogCiAgICAgV2ViQ29yZTo6RWRpdGluZ0JlaGF2aW9yIGNvcmUoV2ViS2l0RWRpdGluZ0JlaGF2
aW9yIHR5cGUpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIGtpdChXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbiopOworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlKFdlYktpdFNl
Y3VyaXR5T3JpZ2luKik7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTEzNyw2ICsxNDIsMTcg
QEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIGdjaGFyKiB0aXRsZTsKICAgICAgICAgZ2NoYXIqIHVy
aTsKICAgICAgICAgV2ViS2l0TG9hZFN0YXR1cyBsb2FkU3RhdHVzOworICAgICAgICBXZWJLaXRT
ZWN1cml0eU9yaWdpbiogb3JpZ2luOworICAgIH07CisKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZ
X09SSUdJTl9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9i
aiksIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2
YXRlKSkKKyAgICBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSB7CisgICAgICAg
IFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gY29yZU9yaWdpbjsKKyAgICAgICAgZ2No
YXIqIHByb3RvY29sOworICAgICAgICBnY2hhciogaG9zdDsKKyAgICAgICAgR0hhc2hUYWJsZSog
d2ViRGF0YWJhc2VzOworCisgICAgICAgIGdib29sZWFuIGRpc3Bvc2VkOwogICAgIH07CiAKICAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPgpAQCAtMjYxLDYgKzI3Nyw5IEBAIGV4dGVybiAi
QyIgewogICAgIAogICAgIFdFQktJVF9BUEkgdm9pZAogICAgIHdlYmtpdF9yZXNldF9vcmlnaW5f
YWNjZXNzX3doaXRlX2xpc3RzKCk7CisKKyAgICBXRUJLSVRfQVBJIFdlYktpdFdlYkRhdGFiYXNl
ICoKKyAgICB3ZWJraXRfd2ViX2RhdGFiYXNlX2Zyb21fc2VjdXJpdHlfb3JpZ2luKFdlYktpdFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4sIGNvbnN0IGNoYXIqIGRhdGFiYXNlX25hbWUp
OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3Vy
aXR5b3JpZ2luLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzZjZDZkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCkBAIC0w
LDAgKzEsNDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbiwg
SmFuIE1pY2hhZWwgQy4gQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJr
aXR3ZWJkYXRhYmFzZS5oIgorCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VUcmFja2VyLmgiCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorCisvKioKKyAq
IFNFQ1RJT046d2Via2l0c2VjdXJpdHlvcmlnaW4KKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQSBz
ZWN1cml0eSBib3VuZGFyeSBmb3Igd2ViIHNpdGVzCisgKgorICogI1dlYktpdFNlY3VyaXR5T3Jp
Z2luIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgYSBzZWN1cml0eSBkb21haW4gZGVmaW5lZAorICog
Ynkgd2ViIHNpdGVzLiBBbiBvcmlnaW4gY29uc2lzdHMgb2YgYSBob3N0IG5hbWUsIGEgc2NoZW1l
LCBhbmQgYSBwb3J0CisgKiBudW1iZXIuIFdlYiBzaXRlcyB3aXRoIHRoZSBzYW1lIHNlY3VyaXR5
IG9yaWdpbiBjYW4gYWNjZXNzIGVhY2ggb3RoZXIncworICogcmVzb3VyY2VzIGZvciBjbGllbnQt
c2lkZSBzY3JpcHRpbmcgb3IgZGF0YWJhc2UgYWNjZXNzLgorICogCisgKiBVc2UgI3dlYmtpdF93
ZWJfZnJhbWVfZ2V0X29yaWdpbiB0byBnZXQgdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiBhCisgKiAj
V2ViS2l0V2ViRnJhbWUuCisgKgorICogRGF0YWJhc2UgcXVvdGFzIGFuZCB1c2FnZXMgYXJlIGFs
c28gZGVmaW5lZCBwZXIgc2VjdXJpdHkgb3JpZ2luLiBUaGUKKyAqIGN1bXVsYXRpdmUgZGlzayB1
c2FnZSBvZiBhbiBvcmlnaW4ncyBkYXRhYmFzZXMgbWF5IGJlIHJldHJpZXZlZCB3aXRoCisgKiAj
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VfdXNhZ2UuIEFuIG9yaWdpbidzIHF1
b3RhIGNhbiBiZQorICogYWRqdXN0ZWQgd2l0aCAjd2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRf
ZGF0YWJhc2VfcXVvdGEuCisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7
CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9QUk9UT0NPTCwKKyAgICBQUk9QX0hPU1QsCisgICAg
UFJPUF9QT1JULAorICAgIFBST1BfREFUQUJBU0VfVVNBR0UsCisgICAgUFJPUF9EQVRBQkFTRV9R
VU9UQQorfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRTZWN1cml0eU9yaWdpbiwgd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbiwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3Qp
OworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5T3JpZ2lu
LT5wcml2OworCisgICAgZ19mcmVlKHByaXYtPnByb3RvY29sKTsKKyAgICBnX2ZyZWUocHJpdi0+
aG9zdCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyhzZWN1cml0eU9yaWdpbiktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgaWYgKCFw
cml2LT5kaXNwb3NlZCkgeworICAgICAgICBwcml2LT5jb3JlT3JpZ2luLT5kZXJlZigpOworICAg
ICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShwcml2LT53ZWJEYXRhYmFzZXMpOworICAgICAgICBw
cml2LT5kaXNwb3NlZCA9IHRydWU7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Moc2VjdXJp
dHlPcmlnaW4pLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0U2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0RBVEFCQVNFX1FV
T1RBOgorICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YShz
ZWN1cml0eU9yaWdpbiwgZ192YWx1ZV9nZXRfdWludDY0KHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IFdFQktJVF9TRUNV
UklUWV9PUklHSU4ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2Ug
UFJPUF9QUk9UT0NPTDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChzZWN1cml0eU9yaWdpbikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSE9TVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KHNlY3VyaXR5T3JpZ2luKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QT1JUOgorICAgICAgICBnX3ZhbHVlX3NldF91
aW50KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KHNlY3VyaXR5T3JpZ2lu
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRBQkFTRV9VU0FHRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9k
YXRhYmFzZV91c2FnZShzZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfREFUQUJBU0VfUVVPVEE6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4p
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK0dIYXNoVGFibGUqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCkKK3sK
KyAgICBzdGF0aWMgR0hhc2hUYWJsZSogc2VjdXJpdHlPcmlnaW5zID0gZ19oYXNoX3RhYmxlX25l
d19mdWxsKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsLCBOVUxMLCBnX29iamVjdF91bnJl
Zik7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luczsKK30KKwordm9pZCB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2FkZChXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbiogY29yZU9yaWdpbikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19TRUNVUklUWV9PUklHSU4ob3JpZ2luKSk7CisKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5zKCk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydCh0YWJsZSwg
Y29yZU9yaWdpbiwgb3JpZ2luKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29y
aWdpbl9jbGFzc19pbml0KFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAg
ICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9kaXNwb3Nl
OworICAgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm9wZXJ0eTsKKworICAgICAvKioKKyAgICAg
ICogV2ViS2l0U2VjdXJpdHlPcmlnaW46cHJvdG9jb2w6CisgICAgICAqCisgICAgICAqIFRoZSBw
cm90b2NvbCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICAgICAgKgorICAgICAgKiBTaW5jZTog
MS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdv
YmplY3RfY2xhc3MsIFBST1BfUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygicHJvdG9jb2wiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUHJvdG9jb2wiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3Jp
Z2luOmhvc3Q6CisgICAgICAqCisgICAgICAqIFRoZSBob3N0IG9mIHRoZSBzZWN1cml0eSBvcmln
aW4uCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9IT1NULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImhv
c3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiSG9zdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiVGhlIGhvc3Qgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbiIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgIC8qKgorICAgICAgKiBXZWJL
aXRTZWN1cml0eU9yaWdpbjpwb3J0OgorICAgICAgKgorICAgICAgKiBUaGUgcG9ydCBvZiB0aGUg
c2VjdXJpdHkgb3JpZ2luLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAq
LworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBS
T1BfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfdWludCgicG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiUG9ydCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBwb3J0IG9mIHRoZSBzZWN1cml0eSBvcmln
aW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHX01BWFVTSE9SVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgICAg
LyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOmRhdGFiYXNlLXVzYWdlOgorICAgICAg
KgorICAgICAgKiBUaGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBkYXRhYmFzZXMgaW4gdGhlIHNl
Y3VyaXR5IG9yaWdpbiBpbiBieXRlcy4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMwor
ICAgICAgKi8KKyAgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9j
bGFzcywgUFJPUF9EQVRBQkFTRV9VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgiZGF0YWJhc2UtdXNhZ2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGF0YWJhc2UgVXNhZ2UiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBjdW11bGF0aXZl
IHNpemUgb2YgYWxsIGRhdGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworICAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOmRhdGFiYXNl
LXF1b3RhOgorICAgICAgKgorICAgICAgKiBUaGUgZGF0YWJhc2UgcW91dGEgb2YgdGhlIHNlY3Vy
aXR5IG9yaWdpbiBpbiBieXRlcy4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAg
ICAgKi8KKyAgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFz
cywgUFJPUF9EQVRBQkFTRV9RVU9UQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgiZGF0YWJhc2UtcXVvdGEiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGF0YWJhc2UgUXVvdGEiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBkYXRhYmFzZSBxdW90
YSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIGJ5dGVzIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFNlY3VyaXR5
T3JpZ2luUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2luaXQoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBXZWJL
aXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dF
VF9QUklWQVRFKHNlY3VyaXR5X29yaWdpbik7CisgICAgcHJpdi0+d2ViRGF0YWJhc2VzID0gZ19o
YXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2Jq
ZWN0X3VucmVmKTsKKyAgICBzZWN1cml0eV9vcmlnaW4tPnByaXYgPSBwcml2OworfQorCisvKioK
KyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sOgorICogQHNlY3VyaXR5X29y
aWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBwcm90b2Nv
bCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcHJvdG9jb2wg
Zm9yIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NP
TlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2woV2Vi
S2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwp
OworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3Jp
Z2luLT5wcml2OworICAgIFdlYkNvcmU6OlN0cmluZyBwcm90b2NvbCA9ICBwcml2LT5jb3JlT3Jp
Z2luLT5wcm90b2NvbCgpOworCisgICAgaWYgKHByb3RvY29sLmlzRW1wdHkoKSkgeworICAgICAg
ICByZXR1cm4gIiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ19mcmVlKHByaXYtPnByb3RvY29s
KTsKKyAgICAgICAgcHJpdi0+cHJvdG9jb2wgPSBnX3N0cmR1cChwcm90b2NvbC51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIHByaXYtPnByb3RvY29sOworICAgIH0KK30KKworLyoqCisg
KiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0OgorICogQHNlY3VyaXR5X29yaWdpbjog
YSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBob3N0bmFtZSBmb3Ig
dGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgaG9zdG5hbWUgZm9yIHRo
ZSBzZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JF
VFVSTiBnY2hhciogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChXZWJLaXRTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSwgTlVMTCk7CisKKyAgICBX
ZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSBzZWN1cml0eV9vcmlnaW4tPnByaXY7
CisgICAgV2ViQ29yZTo6U3RyaW5nIGhvc3QgPSAgcHJpdi0+Y29yZU9yaWdpbi0+aG9zdCgpOwor
CisgICAgaWYgKGhvc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9IGVs
c2UgeworICAgICAgICBnX2ZyZWUocHJpdi0+aG9zdCk7CisgICAgICAgIHByaXYtPmhvc3QgPSBn
X3N0cmR1cChob3N0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gcHJpdi0+aG9zdDsK
KyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydDoKKyAq
IEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJu
cyB0aGUgcG9ydCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUg
cG9ydCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8K
K2d1aW50IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQoV2ViS2l0U2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIDApOworCisgICAgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAg
cmV0dXJuIGNvcmVPcmlnaW4tPnBvcnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX2dldF9kYXRhYmFzZV91c2FnZToKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktp
dFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFs
bCBXZWIgRGF0YWJhc2UgZGF0YWJhc2UncyBpbiB0aGUgb3JpZ2luCisgKiBpbiBieXRlcy4KKyAq
CisgKiBSZXR1cm5zOiB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBkYXRhYmFzZXMgCisgKgor
ICogU2luY2U6IDEuMS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9kYXRhYmFzZV91c2FnZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2Vj
dXJpdHlfb3JpZ2luKSwgMCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAg
cmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnVzYWdlRm9yT3JpZ2lu
KGNvcmVPcmlnaW4pOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAq
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlX3F1b3RhOgorICogQHNlY3VyaXR5
X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBxdW90
YSBmb3IgV2ViIERhdGFiYXNlIHN0b3JhZ2Ugb2YgdGhlIHNlY3VyaXR5IG9yaWdpbgorICogaW4g
Ynl0ZXMuCisgKgorICogUmV0dXJuczogdGhlIFdlYiBEYXRhYmFzZSBxdW90YQorICoKKyAqIFNp
bmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50NjQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0
YWJhc2VfcXVvdGEoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5
X29yaWdpbiksIDApOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9vcmlnaW4pOworICAgIHJldHVy
biBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihjb3Jl
T3JpZ2luKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX3NldF9kYXRhYmFzZV9xdW90YToKKyAqIEBzZWN1cml0eV9vcmln
aW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKiBAcXVvdGE6IGEgbmV3IFdlYiBEYXRhYmFz
ZSBxdW90YSBpbiBieXRlcworICoKKyAqIEFkanVzdCB0aGUgcXVvdGEgZm9yIFdlYiBEYXRhYmFz
ZSBzdG9yYWdlIG9mIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisg
KiovCit2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhKFdlYktp
dFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4sIGd1aW50NjQgcXVvdGEpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdp
bikpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
KiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9vcmlnaW4pOworICAgIFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKGNvcmVPcmlnaW4sIHF1b3RhKTsKKyNlbmRp
ZgorfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlczoKKyAq
IEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJu
cyBhIGxpc3Qgb2YgYWxsIFdlYiBEYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAq
CisgKiBSZXR1cm5zOiBhICNHbGlzdCBvZiBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdp
bi4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHTGlzdCogd2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfZGF0YWJhc2VzKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4p
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihz
ZWN1cml0eV9vcmlnaW4pLCBOVUxMKTsKKyAgICBHTGlzdCogZGF0YWJhc2VzID0gTlVMTDsKKwor
I2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9y
aWdpbiA9IGNvcmUoc2VjdXJpdHlfb3JpZ2luKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6U3RyaW5n
PiBkYXRhYmFzZU5hbWVzOworCisgICAgaWYgKCFXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5kYXRhYmFzZU5hbWVzRm9yT3JpZ2luKGNvcmVPcmlnaW4sIGRhdGFiYXNlTmFtZXMp
KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhYmFzZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYktpdFdlYkRhdGFiYXNlKiBk
YXRhYmFzZSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZnJvbV9zZWN1cml0eV9vcmlnaW4oc2VjdXJp
dHlfb3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBkYXRh
YmFzZXMgPSBnX2xpc3RfYXBwZW5kKGRhdGFiYXNlcywgZGF0YWJhc2UpOworICAgIH0KKyNlbmRp
ZgorCisgICAgcmV0dXJuIGRhdGFiYXNlczsKK30KKworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIFdl
YktpdDo6a2l0KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPcmlnaW4sIE5VTEwpOworCisgICAgR0hhc2hUYWJsZSog
dGFibGUgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lucygpOworICAgIFdlYktpdFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4gPSAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qKSBnX2hhc2hfdGFibGVfbG9va3Vw
KHRhYmxlLCBjb3JlT3JpZ2luKTsKKworICAgIGlmICghb3JpZ2luKSB7CisgICAgICAgIG9yaWdp
biA9IFdFQktJVF9TRUNVUklUWV9PUklHSU4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1NFQ1VS
SVRZX09SSUdJTiwgTlVMTCkpOworICAgICAgICBvcmlnaW4tPnByaXYtPmNvcmVPcmlnaW4gPSBj
b3JlT3JpZ2luOworICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2FkZChvcmlnaW4sIGNv
cmVPcmlnaW4pOworICAgIH0KKworICAgIHJldHVybiBvcmlnaW47Cit9CisKKworV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4qIFdlYktpdDo6Y29yZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklU
WV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSwgTlVMTCk7CisKKyAgICByZXR1cm4gc2VjdXJpdHlf
b3JpZ2luLT5wcml2LT5jb3JlT3JpZ2luLmdldCgpOworfQorCitXZWJLaXRXZWJEYXRhYmFzZSog
d2Via2l0X3dlYl9kYXRhYmFzZV9mcm9tX3NlY3VyaXR5X29yaWdpbihXZWJLaXRTZWN1cml0eU9y
aWdpbiogc2VjdXJpdHlfb3JpZ2luLCBjb25zdCBnY2hhciogZGF0YWJhc2VfbmFtZSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5
X29yaWdpbiksIE5VTEwpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2
ID0gc2VjdXJpdHlfb3JpZ2luLT5wcml2OworICAgIEdIYXNoVGFibGUqIGRhdGFiYXNlSGFzaCA9
IHByaXYtPndlYkRhdGFiYXNlczsKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSogZGF0YWJhc2UgPSAo
V2ViS2l0V2ViRGF0YWJhc2UqKSBnX2hhc2hfdGFibGVfbG9va3VwKGRhdGFiYXNlSGFzaCwgZGF0
YWJhc2VfbmFtZSk7CisKKyAgICBpZiAoIWRhdGFiYXNlKSB7CisgICAgICAgIGRhdGFiYXNlID0g
IFdFQktJVF9XRUJfREFUQUJBU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9EQVRBQkFT
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmlnaW4iLCBzZWN1
cml0eV9vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFt
ZSIsIGRhdGFiYXNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCkpOworICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGRhdGFiYXNlSGFzaCwgZ19z
dHJkdXAoZGF0YWJhc2VfbmFtZSksIGRhdGFiYXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0
YWJhc2U7Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5
b3JpZ2luLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OWY1YWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4gTWljaGFl
bCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0gKKyNkZWZpbmUgV0VC
S0lUX1NFQ1VSSVRZX09SSUdJTl9ICisKKyNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbi5o
IgorI2luY2x1ZGUgIndlYmtpdHdlYmRhdGFiYXNlLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4gICAgICAgICAgICAgKHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihv
YmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X1RZUEVfU0VDVVJJVFlfT1JJR0lOLCBXZWJLaXRTZWN1cml0eU9yaWdpbikpCisjZGVmaW5lIFdF
QktJVF9TRUNVUklUWV9PUklHSU5fQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJp
dHlPcmlnaW5DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4ob2JqKSAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NF
Q1VSSVRZX09SSUdJTikpCisjZGVmaW5lIFdFQktJVF9JU19TRUNVUklUWV9PUklHSU5fQ0xBU1Mo
a2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1NF
Q1VSSVRZX09SSUdJTikpCisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9PUklHSU5fR0VUX0NMQVNT
KG9iaikgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1NF
Q1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW5DbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2
YXRlOworCitzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luIHsKKyAgICBHT2JqZWN0IHBhcmVu
dF9pbnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdFNlY3VyaXR5T3Jp
Z2luUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW5DbGFz
cyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9y
IGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2
b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0
X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wgICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2lu
KiBzZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyKgor
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdCAgICAgICAgICAgKFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wb3J0ICAgICAgICAgICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5X29yaWdpbik7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfZGF0YWJhc2VfdXNhZ2UgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9v
cmlnaW4pOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0
X2RhdGFiYXNlX3F1b3RhIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsK
KworV0VCS0lUX0FQSSB2b2lkIAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2Vf
cXVvdGEgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4sIGd1aW50NjQgcXVv
dGEpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2Rh
dGFiYXNlcyAgICAgIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9IX18gKi8K
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcCBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iOTk2ZjUzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsNTI1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIK
KworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKKyNp
bmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+
CisKKy8qKgorICogU0VDVElPTjp3ZWJraXR3ZWJkYXRhYmFzZQorICogQHNob3J0X2Rlc2NyaXB0
aW9uOiBBIFdlYktpdCB3ZWIgYXBwbGljYXRpb24gZGF0YWJhc2UKKyAqCisgKiAjV2ViS2l0V2Vi
RGF0YWJhc2UgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBhIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4g
VGhlCisgKiBwcm9wb3NlZCBXZWIgRGF0YWJhc2Ugc3RhbmRhcmQgaW50cm9kdWNlcyBzdXBwb3J0
IGZvciBTUUwgZGF0YWJhc2VzIHRoYXQgd2ViCisgKiBzaXRlcyBjYW4gY3JlYXRlIGFuZCBhY2Nl
c3Mgb24gYSBsb2NhbCBjb21wdXRlciB0aHJvdWdoIEphdmFTY3JpcHQuCisgKgorICogVG8gZ2V0
IGFjY2VzcyB0byBhbGwgZGF0YWJhc2VzIGRlZmluZWQgYnkgYSBzZWN1cml0eSBvcmlnaW4sIHVz
ZQorICogI3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2RhdGFiYXNlcy4gRWFjaCBkYXRhYmFz
ZSBoYXMgYSBjYW5vbmljYWwKKyAqIG5hbWUsIGFzIHdlbGwgYXMgYSB1c2VyLWZyaWVuZGx5IGRp
c3BsYXkgbmFtZS4KKyAqIAorICogV2ViS2l0IHVzZXMgU1FMaXRlIHRvIGNyZWF0ZSBhbmQgYWNj
ZXNzIHRoZSBsb2NhbCBTUUwgZGF0YWJhc2VzLiBUaGUgbG9jYXRpb24KKyAqIG9mIGEgI1dlYktp
dFdlYkRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCB3dGggI3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X3BhdGguCisgKiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgbG9jYXRpb24gb2YgYWxsIGRhdGFiYXNl
cyB3aXRoCisgKiAjd2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aC4KKyAqIAorICog
Rm9yIGVhY2ggZGF0YWJhc2UgdGhlIHdlYiBzaXRlIGNhbiBkZWZpbmUgYW4gZXN0aW1hdGVkIHNp
emUgd2hpY2ggY2FuIGJlCisgKiBhY2Nlc3NlZCB3aXRoICN3ZWJraXRfd2ViX2RhdGFiYXNlX2dl
dF9leHBlY3RlZF9zaXplLiBUaGUgY3VycmVudCBzaXplIG9mIHRoZQorICogZGF0YWJhc2UgaW4g
Ynl0ZXMgaXMgcmV0dXJuZWQgYnkgI3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUuCisgKiAK
KyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIHRoZSBXZWIgRGF0YWJhc2Ugc3BlY2lm
aWNhdGlvbiBwcm9wb3NhbCBhdAorICogaHR0cDovL2Rldi53My5vcmcvaHRtbDUvd2ViZGF0YWJh
c2UKKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsKKyAgICBQUk9QXzAs
CisKKyAgICBQUk9QX09SSUdJTiwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9ESVNQTEFZX05B
TUUsCisgICAgUFJPUF9FWFBFQ1RFRF9TSVpFLAorICAgIFBST1BfU0laRSwKKyAgICBQUk9QX1BB
VEgKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViRGF0YWJhc2UsIHdlYmtpdF93ZWJfZGF0
YWJhc2UsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRl
IHsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luOworICAgIGdjaGFyKiBuYW1lOwor
ICAgIGdjaGFyKiBkaXNwbGF5X25hbWU7CisgICAgZ2NoYXIqIHBhdGg7Cit9OworCitzdGF0aWMg
Z2NoYXIqIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCA9IE5VTEw7CitzdGF0aWMgZ3Vp
bnQ2NCB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKKwor
I2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRX
ZWJEYXRhYmFzZVByaXZhdGUpKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3Nl
dF9vcmlnaW4oV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSwgV2ViS2l0U2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5X29yaWdpbik7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJh
c2Vfc2V0X25hbWUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSwgY29uc3QgZ2NoYXIq
IG5hbWUpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX2ZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UgPSBXRUJL
SVRfV0VCX0RBVEFCQVNFKG9iamVjdCk7CisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBw
cml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CisKKyAgICBpZiAocHJpdi0+b3JpZ2luKQorICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2LT5vcmlnaW4pOworCisgICAgZ19mcmVlKHByaXYtPm5hbWUp
OworICAgIGdfZnJlZShwcml2LT5kaXNwbGF5X25hbWUpOworICAgIGdfZnJlZShwcml2LT5wYXRo
KTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfZGF0YWJhc2VfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFz
ZV9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSog
d2ViX2RhdGFiYXNlID0gV0VCS0lUX1dFQl9EQVRBQkFTRShvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX09SSUdJTjoKKyAgICAgICAgd2Via2l0X3dlYl9k
YXRhYmFzZV9zZXRfb3JpZ2luKHdlYl9kYXRhYmFzZSwgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihn
X3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9OQU1FOgorICAgICAgICB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKHdlYl9kYXRhYmFz
ZSwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdl
YkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSA9IFdFQktJVF9XRUJfREFUQUJBU0Uob2JqZWN0KTsKKyAg
ICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKwor
ICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9PUklHSU46CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgcHJpdi0+b3JpZ2luKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X3dlYl9kYXRhYmFzZV9nZXRfbmFtZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfRElTUExBWV9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmco
dmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZSh3ZWJEYXRhYmFzZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVhQRUNURURfU0laRToKKyAgICAgICAg
Z192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3Rl
ZF9zaXplKHdlYkRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpF
OgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X3NpemUod2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BB
VEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFz
ZV9nZXRfcGF0aCh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9kYXRhYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZmlu
YWxpemU7CisgICAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kYXRh
YmFzZV9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X3dlYl9kYXRhYmFzZV9nZXRfcHJvcGVydHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktp
dFdlYkRhdGFiYXNlOm9yaWdpbjoKKyAgICAgICoKKyAgICAgICogVGhlIHNlY3VyaXR5IG9yaWdp
biBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTMKKyAgICAg
ICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9jbGFzcywg
UFJPUF9PUklHSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgib3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHNlY3VyaXR5IG9y
aWdpbiBvZiB0aGUgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChH
UGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkp
KTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0V2ViRGF0YWJhc2U6bmFtZToKKyAgICAgICoK
KyAgICAgICogVGhlIG5hbWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoK
KyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX05BTUUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibmFtZSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJOYW1l
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgbmFtZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZ
KSkpOworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpkaXNwbGF5LW5hbWU6
CisgICAgICAqCisgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBk
YXRhYmFzZS4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0RJU1BM
QVlfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKCJkaXNwbGF5LW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGlzcGxheSBOYW1lIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZGlz
cGxheSBuYW1lIG9mIHRoZSBXZWIgU3Ryb2FnZSBkYXRhYmFzZSIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgIC8qKgorICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOmV4
cGVjdGVkLXNpemU6CisgICAgICoKKyAgICAgKiBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZGF0
YWJhc2UgaW4gYnl0ZXMgYXMgZGVmaW5lZCBieSB0aGUgd2ViIGF1dGhvci4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0VYUEVDVEVEX1NJWkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkLXNpemUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJFeHBlY3RlZCBTaXplIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBleHBlY3RlZCBzaXpl
IG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAvKioK
KyAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpzaXplOgorICAgICAqCisgICAgICogVGhlIGN1cnJl
bnQgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBTaW5jZTog
MS4xLjEzCisgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdF9jbGFzcywgUFJPUF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiU2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgY3VycmVudCBzaXplIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworICAgICAvKioKKyAgICAgICogV2ViS2l0V2ViRGF0YWJhc2U6cGF0aDoKKyAgICAg
ICoKKyAgICAgICogVGhlIGZpbGVzeXN0ZW0gcGF0aCBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFi
YXNlLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUEFUSCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJw
YXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlBhdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBmaWxlc3lzdGVtIHBhdGggb2YgdGhlIFdlYiBTdHJv
YWdlIGRhdGFiYXNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXZWJEYXRhYmFzZVBy
aXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9pbml0KFdlYktp
dFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgd2ViX2RhdGFiYXNlLT5wcml2ID0g
V0VCS0lUX1dFQl9EQVRBQkFTRV9HRVRfUFJJVkFURSh3ZWJfZGF0YWJhc2UpOworfQorCisvLyBJ
bnRlcm5hbCB1c2Ugb25seQorc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfb3Jp
Z2luKFdlYktpdFdlYkRhdGFiYXNlICp3ZWJfZGF0YWJhc2UsIFdlYktpdFNlY3VyaXR5T3JpZ2lu
ICpzZWN1cml0eV9vcmlnaW4pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VC
X0RBVEFCQVNFKHdlYl9kYXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmlnaW4pKTsKKworICAgIFdlYktpdFdlYkRhdGFi
YXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKworICAgIGlmIChwcml2LT5v
cmlnaW4pCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm9yaWdpbik7CisKKyAgICBnX29i
amVjdF9yZWYoc2VjdXJpdHlfb3JpZ2luKTsKKyAgICBwcml2LT5vcmlnaW4gPSBzZWN1cml0eV9v
cmlnaW47Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X25hbWUoV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSkpOwor
CisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2
OworICAgIGdfZnJlZShwcml2LT5uYW1lKTsKKyAgICBwcml2LT5uYW1lID0gZ19zdHJkdXAobmFt
ZSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfb3JpZ2luOgorICogQHdl
Yl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0YWJhc2UKKyAqCisgKiBSZXR1cm5zIHRoZSBzZWN1
cml0eSBvcmlnaW4gb2YgdGhlICNXZWJLaXRXZWJEYXRhYmFzZS4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgc2VjdXJpdHkgb3JpZ2luIG9mIHRoZSBkYXRhYmFzZQorICoKKyAqIFNpbmNlOiAxLjEuMTMK
KyAqKi8KK1dlYktpdFNlY3VyaXR5T3JpZ2luKiB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9vcmln
aW4oV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIE5VTEwpOworICAg
IFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKwor
ICAgIHJldHVybiBwcml2LT5vcmlnaW47Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFz
ZV9nZXRfbmFtZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgor
ICogUmV0dXJucyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlICNXZWJLaXRXZWJEYXRhYmFzZS4K
KyAqCisgKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTog
MS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfbmFtZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViX2RhdGFiYXNlKSwgTlVMTCk7
CisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2
OworCisgICAgcmV0dXJuIHByaXYtPm5hbWU7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRh
YmFzZV9nZXRfZGlzcGxheV9uYW1lOgorICogQHdlYl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0
YWJhc2UKKyAqCisgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2Ug
YXMgc2VlbiBieSB0aGUgdXNlci4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgZGF0
YWJhc2UgYXMgc2VlbiBieSB0aGUgdXNlci4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitH
X0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1l
KFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCBOVUxMKTsKKworI2lm
IEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3
ZWJfZGF0YWJhc2UtPnByaXY7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMg
PSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9y
aWdpbihwcml2LT5uYW1lLCBjb3JlKHByaXYtPm9yaWdpbikpOworICAgIFdlYkNvcmU6OlN0cmlu
ZyBkaXNwbGF5TmFtZSA9ICBkZXRhaWxzLmRpc3BsYXlOYW1lKCk7CisKKyAgICBpZiAoIWRpc3Bs
YXlOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBnX2ZyZWUocHJpdi0+ZGlzcGxheV9uYW1lKTsK
KyAgICAgICAgcHJpdi0+ZGlzcGxheV9uYW1lID0gZ19zdHJkdXAoZGlzcGxheU5hbWUudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBwcml2LT5kaXNwbGF5X25hbWU7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyNlbHNlCisgICAgcmV0dXJuICIiOworI2Vu
ZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZToK
KyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0
aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGluIGJ5dGVzIGFzIGRl
ZmluZWQgYnkgdGhlCisgKiB3ZWIgYXV0aG9yLiBUaGUgV2ViIERhdGFiYXNlIHN0YW5kYXJkIGFs
bG93cyB3ZWIgYXV0aG9ycyB0byBzcGVjaWZ5IGFuIGV4cGVjdGVkCisgKiBzaXplIG9mIHRoZSBk
YXRhYmFzZSB0byBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlLgorICoKKyAqIFJldHVybnM6
IHRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBkYXRhYmFzZSBpbiBieXRlcworICoKKyAqIFNpbmNl
OiAxLjEuMTMKKyAqKi8KK2d1aW50NjQgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRf
c2l6ZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViX2RhdGFiYXNlKSwgMCk7CisKKyNp
ZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0g
d2ViX2RhdGFiYXNlLT5wcml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxz
ID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRP
cmlnaW4ocHJpdi0+bmFtZSwgY29yZShwcml2LT5vcmlnaW4pKTsKKyAgICByZXR1cm4gZGV0YWls
cy5leHBlY3RlZFVzYWdlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8q
KgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEg
I1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhl
ICNXZWJLaXRXZWJEYXRhYmFzZSBzcGFjZSBvbiBkaXNrIGluIGJ5dGVzLgorICoKKyAqIFJldHVy
bnM6IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMKKyAqCisgKiBTaW5j
ZTogMS4xLjEzCisgKiovCitndWludDY0IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUoV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIDApOworCisjaWYgRU5BQkxF
KERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRh
YmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9IFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKHBy
aXYtPm5hbWUsIGNvcmUocHJpdi0+b3JpZ2luKSk7CisgICAgcmV0dXJuIGRldGFpbHMuY3VycmVu
dFVzYWdlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogd2Vi
a2l0X3dlYl9kYXRhYmFzZV9nZXRfcGF0aDoKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdl
YkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgI1dlYktpdFdlYkRhdGFi
YXNlIGZpbGUgb24gZGlzay4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZmlsZXN5c3RlbSBwYXRoIG9m
IHRoZSBkYXRhYmFzZQorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK0dfQ09OU1RfUkVUVVJO
IGdjaGFyKiB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wYXRoKFdlYktpdFdlYkRhdGFiYXNlKiB3
ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9E
QVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCBOVUxMKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAg
ICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7Cisg
ICAgV2ViQ29yZTo6U3RyaW5nIGNvcmVOYW1lID0gV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChw
cml2LT5uYW1lKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgY29yZVBhdGggPSBXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKGNvcmUocHJpdi0+b3Jp
Z2luKSwgY29yZU5hbWUpOworCisgICAgaWYgKCFjb3JlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgZ19mcmVlKHByaXYtPnBhdGgpOworICAgICAgICBwcml2LT5wYXRoID0gZ19zdHJkdXAoY29y
ZVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBwcml2LT5wYXRoOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisjZWxzZQorICAgIHJldHVybiAiIjsK
KyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlOgorICogQHdl
Yl9kYXRhYmFzZTogYSAjV2ViS2l0V2ViRGF0YWJhc2UKKyAqCisgKiBSZW1vdmVzIHRoZSAjV2Vi
S2l0V2ViRGF0YWJhc2UgZnJvbSBpdHMgc2VjdXJpdHkgb3JpZ2luIGFuZCBkZXN0cm95cyBhbGwg
ZGF0YQorICogc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisg
KiovCit2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlKFdlYktpdFdlYkRhdGFiYXNlKiB3
ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFC
QVNFKHdlYl9kYXRhYmFzZSkpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdl
YkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVEYXRhYmFzZShjb3JlKHByaXYtPm9y
aWdpbiksIHByaXYtPm5hbWUpOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3JlbW92ZV9h
bGxfd2ViX2RhdGFiYXNlczoKKyAqCisgKiBSZW1vdmVzIGFsbCB3ZWIgZGF0YWJhc2VzIGZyb20g
dGhlIGN1cnJlbnQgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGguCisgKgorICogU2luY2U6IDEuMS4x
MworICoqLwordm9pZCB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKCkKK3sKKyNpZiBF
TkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCku
ZGVsZXRlQWxsRGF0YWJhc2VzKCk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfZ2V0X2Rh
dGFiYXNlX2RpcmVjdG9yeV9wYXRoOgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aCB0
byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAqIERhdGFiYXNlIGRhdGFi
YXNlcy4gQnkgZGVmYXVsdCB0aGlzIHBhdGggd2lsbCBiZSBpbiB0aGUgdXNlciBkYXRhCisgKiBk
aXJlY3RvcnkuCisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQgZGF0YWJhc2UgZGlyZWN0b3J5
IHBhdGgKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciog
d2Via2l0X2dldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCgpCit7CisjaWYgRU5BQkxFKERBVEFC
QVNFKQorICAgIFdlYkNvcmU6OlN0cmluZyBwYXRoID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCk7CisgICAgaWYgKCFwYXRoLmlzRW1w
dHkoKSkgeworICAgICAgICBnX2ZyZWUod2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKTsK
KyAgICAgICAgd2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoID0gZ19zdHJkdXAocGF0aC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3Rvcnlf
cGF0aDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorI2Vsc2UKKyAg
ICByZXR1cm4gIiI7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfc2V0X2RhdGFiYXNlX2Rp
cmVjdG9yeV9wYXRoOgorICogQHBhdGg6IHRoZSBuZXcgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgK
KyAqCisgKiBTZXRzIHRoZSBjdXJyZW50IHBhdGggdG8gdGhlIGRpcmVjdG9yeSBXZWJLaXQgd2ls
bCB3cml0ZSBXZWIgCisgKiBEYXRhYmFzZSBkYXRhYmFzZXMuIAorICoKKyAqIFNpbmNlOiAxLjEu
MTMKKyAqKi8KK3ZvaWQgd2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aChjb25zdCBn
Y2hhciogcGF0aCkKK3sKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U3RyaW5n
IGNvcmVQYXRoID0gV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChwYXRoKTsKKyAgICBXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoY29y
ZVBhdGgpOworCisgICAgZ19mcmVlKHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCk7Cisg
ICAgd2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoID0gZ19zdHJkdXAoY29yZVBhdGgudXRm
OCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0
YWJhc2VfcXVvdGE6CisgKgorICogUmV0dXJucyB0aGUgZGVmYXVsdCBxdW90YSBmb3IgV2ViIERh
dGFiYXNlIGRhdGFiYXNlcy4gQnkgZGVmYXVsdAorICogdGhpcyB2YWx1ZSBpcyA1TUIuCisgCisg
KiBSZXR1cm5zOiB0aGUgY3VycmVudCBkZWZhdWx0IGRhdGFiYXNlIHF1b3RhIGluIGJ5dGVzCisg
KgorICogU2luY2U6IDEuMS4xMworICoqLworZ3VpbnQ2NCB3ZWJraXRfZ2V0X2RlZmF1bHRfZGF0
YWJhc2VfcXVvdGEoKQoreworICAgIHJldHVybiB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90
YTsKK30KKworLyoqCisgKiB3ZWJraXRfc2V0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGE6CisgKiBA
ZGVmYXVsdF9xdW90YTogdGhlIG5ldyBkZWZhdWx0IGRhdGFiYXNlIHF1b3RhCisgKgorICogU2V0
cyB0aGUgY3VycmVudCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgV2ViS2l0IHdpbGwgd3JpdGUgV2Vi
IAorICogRGF0YWJhc2UgZGF0YWJhc2VzLiAKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCit2
b2lkIHdlYmtpdF9zZXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YShndWludDY0IGRlZmF1bHRfcXVv
dGEpCit7CisgICAgd2Via2l0X2RlZmF1bHRfZGF0YWJhc2VfcXVvdGEgPSBkZWZhdWx0X3F1b3Rh
OworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZGYzYjNjNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0RBVEFCQVNF
X0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorCisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSAgICAgICAgICAgICAod2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9i
aikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9XRUJfREFUQUJBU0UsIFdlYktpdFdlYkRhdGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9EQVRBQkFTRV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZUNsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9EQVRBQkFTRShvYmopICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX1dFQl9EQVRBQkFTRV9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VC
S0lUX1dFQl9EQVRBQkFTRV9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRX
ZWJEYXRhYmFzZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2UgeworICAgIEdP
YmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0
V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFz
ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGlu
ZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVk
NCkgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfdHlwZSAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3Jp
Z2luICoKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X29yaWdpbiAgICAgICAgIChXZWJLaXRXZWJE
YXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hh
cioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUgICAgICAgICAgIChXZWJLaXRXZWJEYXRh
YmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioK
K3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZSAgIChXZWJLaXRXZWJEYXRhYmFz
ZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfd2ViX2RhdGFi
YXNlX2dldF9leHBlY3RlZF9zaXplICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSk7
CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZSAgICAg
ICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpOworCitXRUJLSVRfQVBJIEdf
Q09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcGF0aCAgICAgICAg
ICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlICAgICAgICAgICAgIChXZWJLaXRXZWJEYXRhYmFz
ZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfcmVtb3ZlX2FsbF93
ZWJfZGF0YWJhc2VzICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4g
Z2NoYXIqCit3ZWJraXRfZ2V0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoICAgICAodm9pZCk7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCAgICAg
KGNvbnN0IGdjaGFyKiBwYXRoKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZ2V0X2Rl
ZmF1bHRfZGF0YWJhc2VfcXVvdGEgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X3NldF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhICAgICAgKGd1aW50NjQgZGVmYXVsdF9xdW90
YSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX1dFQktJVF9XRUJfREFUQUJBU0VfSF9f
ICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKaW5kZXggOWYxMzViNy4uN2EzOTE0
YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcApAQCAtMzY1LDYgKzM2NSw4IEBA
IFdlYktpdFdlYkZyYW1lKiB3ZWJraXRfd2ViX2ZyYW1lX25ldyhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogICAgIHByaXYtPmNvcmVGcmFtZSA9IEZyYW1lOjpjcmVhdGUodmlld1ByaXYtPmNvcmVQ
YWdlLCAwLCBjbGllbnQpLmdldCgpOwogICAgIHByaXYtPmNvcmVGcmFtZS0+aW5pdCgpOwogCisg
ICAgcHJpdi0+b3JpZ2luID0gTlVMTDsKKwogICAgIHJldHVybiBmcmFtZTsKIH0KIApAQCAtOTk2
LDMgKzk5OCwyNyBAQCBHdGtQb2xpY3lUeXBlIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2Fs
X3Njcm9sbGJhcl9wb2xpY3koV2ViS2l0V2ViRnJhbWUqIGZyYQogCiAgICAgcmV0dXJuIEdUS19Q
T0xJQ1lfQVVUT01BVElDOwogfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X29yaWdp
bjoKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAqCisgKiBSZXR1cm5zIHRoZSBAZnJh
bWUncyBzZWN1cml0eSBvcmlnaW4uCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgc2VjdXJpdHkg
b3JpZ2luIG9mIEBmcmFtZQorICovCitXZWJLaXRTZWN1cml0eU9yaWdpbiogd2Via2l0X3dlYl9m
cmFtZV9nZXRfb3JpZ2luKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBXZWJLaXRXZWJG
cmFtZVByaXZhdGUqIHByaXYgPSBmcmFtZS0+cHJpdjsKKyAgICBpZiAoIXByaXYtPmNvcmVGcmFt
ZSB8fCAhcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpIHx8ICFwcml2LT5jb3JlRnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAg
aWYgKHByaXYtPm9yaWdpbiAmJiBwcml2LT5vcmlnaW4tPnByaXYtPmNvcmVPcmlnaW4uZ2V0KCkg
PT0gcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKQorICAgICAg
ICByZXR1cm4gcHJpdi0+b3JpZ2luOworCisgICAgaWYgKHByaXYtPm9yaWdpbikKKyAgICAgICAg
Z19vYmplY3RfdW5yZWYocHJpdi0+b3JpZ2luKTsKKworICAgIHByaXYtPm9yaWdpbiA9IGtpdChw
cml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIHJldHVy
biBwcml2LT5vcmlnaW47Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJmcmFtZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaAppbmRleCBhZDM1
OWY2Li5kODI3NTZjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFt
ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmgKQEAgLTE1OCw2ICsx
NTgsOSBAQCB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kg
KFdlYktpdFdlYkZyYW1lICAgICAgICAqZnJhbWUpOwogV0VCS0lUX0FQSSBHdGtQb2xpY3lUeXBl
CiB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9saWN5ICAgKFdlYktp
dFdlYkZyYW1lICAgICAgICAqZnJhbWUpOwogCitXRUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3Jp
Z2luKgord2Via2l0X3dlYl9mcmFtZV9nZXRfb3JpZ2luICAgICAgICAgKFdlYktpdFdlYkZyYW1l
ICAgICAgICpmcmFtZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcAppbmRleCA4ZDBmMDhiLi45OWUzNTU4IDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcApAQCAtMTQ0LDYgKzE0NCw3IEBAIGVudW0gewogICAgIENMT1NFX1dFQl9W
SUVXLAogICAgIFVORE8sCiAgICAgUkVETywKKyAgICBEQVRBQkFTRV9RVU9UQV9FWENFRURFRCwK
ICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTk1Miw2ICsxOTUzLDI4IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0Ns
YXNzKQogICAgICAgICAgICAgR1RLX1RZUEVfV0lER0VULCAzLAogICAgICAgICAgICAgR19UWVBF
X1NUUklORywgR19UWVBFX1NUUklORywgR19UWVBFX0hBU0hfVEFCTEUpOwogCisgICAgLyoqCisg
ICAgICogV2ViS2l0V2ViVmlldzo6ZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQKKyAgICAgKiBAd2Vi
X3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEBmcmFt
ZTogdGhlIHJlbGV2YW50IGZyYW1lCisgICAgICogQGRhdGFiYXNlOiB0aGUgI1dlYktpdFdlYkRh
dGFiYXNlIHdoaWNoIGV4Y2VlZGVkIHRoZSBxdW90YSBvZiBpdHMgI1dlYktpdFNlY3VyaXR5T3Jp
Z2luCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OmRhdGFiYXNlLWV4Y2VlZGVk
LXF1b3RhIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgd2hlbgorICAgICAqIGEgV2ViIERhdGFiYXNl
IGV4Y2VlZHMgdGhlIHF1b3RhIG9mIGl0cyBzZWN1cml0eSBvcmlnaW4uIFRoaXMgc2lnbmFsCisg
ICAgICogbWF5IGJlIHVzZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHF1b3RhIGJlZm9y
ZSB0aGUgb3JpZ2luYXRpbmcKKyAgICAgKiBvcGVyYXRpb24gZmFpbHMuCisgICAgICoKKyAgICAg
KiBTaW5jZTogMS4xLjEzCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbREFU
QUJBU0VfUVVPVEFfRVhDRUVERURdID0gZ19zaWduYWxfbmV3KCJkYXRhYmFzZS1xdW90YS1leGNl
ZWRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAg
ICAgICAgICAgKEdTaWduYWxGbGFncykgKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNU
SU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAg
ICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAyLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX09CSkVDVCk7CisK
ICAgICAvKgogICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAg
Ki8KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZwppbmRleCBiOGNmYmM3Li40MTJlNWJmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDkt
MDgtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10g
RXhwb3NlIGEgZGF0YWJhc2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBzdG9yYWdlIEFQ
SSBmb3IgR1RLKy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJl
ZS5jcHA6CisgICAgICAgIChkYXRhYmFzZVF1b3RhRXhjZWVkZWQpOgorICAgICAgICAoY3JlYXRl
V2ViVmlldyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9s
bGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFi
YXNlcyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSk6
CisKIDIwMDktMDgtMjggIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAxN2VkMTkwLi5hNjhiYjE4IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAg
LTU5OCw2ICs1OTgsMjMgQEAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdDbG9zZShXZWJLaXRXZWJW
aWV3KiB2aWV3KQogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCBkYXRhYmFzZVF1
b3RhRXhjZWVkZWQoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBX
ZWJLaXRXZWJEYXRhYmFzZSAqZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKHZpZXcpOworICAgIEFT
U0VSVChmcmFtZSk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9vcmlnaW4oZGF0YWJhc2Up
OworICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBEYXRhYmFzZUNhbGxiYWNrcygp
KSB7CisgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOnslcywgJXMsICVpfSBkYXRhYmFzZTol
c1xuIiwKKyAgICAgICAgICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sKG9y
aWdpbiksCisgICAgICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdp
biksCisgICAgICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbiks
CisgICAgICAgICAgICB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9uYW1lKGRhdGFiYXNlKSk7Cisg
ICAgfQorICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X2RhdGFiYXNlX3F1b3RhKG9yaWdp
biwgNSAqIDEwMjQgKiAxMDI0KTsKK30KKwogCiBzdGF0aWMgV2ViS2l0V2ViVmlldyogd2ViVmll
d0NyZWF0ZShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2ViRnJhbWUqKTsKIApAQCAtNjIyLDYgKzYz
OSw3IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3KCkKICAgICAgICAgICAg
ICAgICAgICAgICJzaWduYWw6OnN0YXR1cy1iYXItdGV4dC1jaGFuZ2VkIiwgd2ViVmlld1N0YXR1
c0JhclRleHRDaGFuZ2VkLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6Y3JlYXRl
LXdlYi12aWV3Iiwgd2ViVmlld0NyZWF0ZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWdu
YWw6OmNsb3NlLXdlYi12aWV3Iiwgd2ViVmlld0Nsb3NlLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgInNpZ25hbDo6ZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQiLCBkYXRhYmFzZVF1b3RhRXhjZWVk
ZWQsIDAsCiAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAogICAgIHJldHVybiB2aWV3Owpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0
Q29udHJvbGxlckd0ay5jcHAKaW5kZXggYWJhYjA4Mi4uYzU1YmZjYiAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJH
dGsuY3BwCkBAIC0zNTEsMTIgKzM1MSwxMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpj
bGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
d2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcygpOwogfQogIAogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17
ICAgIAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdp
biogb3JpZ2luID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfb3JpZ2luKG1haW5GcmFtZSk7CisgICAg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7
CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUo
dW5zaWduZWQgbG9uZyBsb25nIHNpemUpCi0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="19781"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38847</attachid>
            <date>2009-08-31 23:15:53 -0700</date>
            <delta_ts>2009-09-02 08:36:44 -0700</delta_ts>
            <desc>Update patch rev3</desc>
            <filename>0001-Database-patch.patch</filename>
            <type>text/plain</type>
            <size>59198</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSAxY2JhZDM5NjY5MThkODEzMDc4M2RmZDI3ZTc3MmI4NGM4NWQ2NjQyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTUgQXVnIDIwMDkgMTU6Mjk6MjYgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBEYXRhYmFzZSBwYXRjaAoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogR05VbWFrZWZpbGUuYW0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIExheW91dFRlc3RzL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZCAgICAgICAgICAgICAgICAgICB8ICAgIDkgLQogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYzICsrKwogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwICAgICAgfCAgIDE0ICst
CiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDIgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICAgICAgICAg
fCAgICA2ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwICAgICAgICAgICAg
ICAgIHwgICAgNSArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oICAgICAgICAg
ICAgICAgICAgfCAgIDE5ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2lu
LmNwcCAgICAgICAgIHwgIDQyOCArKysrKysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oICAgICAgICAgICB8ICAgODAgKysrCiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgICAgICAgICAgICB8ICA1MjQgKysrKysrKysrKysr
KysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggICAgICAgICAg
ICAgIHwgICA5NiArKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgICAg
ICAgICAgICAgICB8ICAgMjYgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCAg
ICAgICAgICAgICAgICAgfCAgICAzICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwICAgICAgICAgICAgICAgIHwgICAyMyArCiBXZWJLaXRUb29scy9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKwogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCAgfCAgIDIyICsKIC4uLi9EdW1wUmVuZGVyVHJlZS9n
dGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIHwgICAgNyArLQogMjAgZmlsZXMgY2hhbmdl
ZCwgMTM1MiBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaAoKZGlm
ZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4MjdhYzQxLi42ZDdiYzVkIDEw
MDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MDktMDgtMzEgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0
a10gRXhwb3NlIGEgZGF0YWJhc2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBTdG9yYWdl
IEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAyMDA5LTA4LTI4
ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVt
YWtlZmlsZS5hbQppbmRleCA5OWE4YjY1Li4wYjkwMGVlIDEwMDY0NAotLS0gYS9HTlVtYWtlZmls
ZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzI5LDYgKzMyOSw3IEBAIHdlYmtpdGd0a19o
X2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdz
LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJl
cy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIFwKKwkk
KHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCiAJJCh0b3Bf
YnVpbGRkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZlcnNpb24uaAogCiB3ZWJraXRndGtf
YnVpbHRfc291cmNlcyArPSBcCkBAIC0zNjYsNiArMzY3LDEwIEBAIHdlYmtpdGd0a19zb3VyY2Vz
ICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuY3BwIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmNwcCBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRh
dGFiYXNlLmggXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNwcCBc
CisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaCBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVy
ZXMuY3BwIFwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA1MWI5MzhhLi4wZWUxNDAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMDktMDgtMzEgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0d0a10gRXhwb3NlIGEgZGF0YWJhc2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBTdG9y
YWdlIEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorCiAy
MDA5LTA4LTMxICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5k
ZXggOTE5ZmE5YS4uZmU5NTAwNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM5NDAs
MTIgKzM5NDAsNiBAQCBzZWN1cml0eS9hdXRvY29tcGxldGUtY2xlYXJlZC1vbi1iYWNrLmh0bWwK
IHNlY3VyaXR5L2Jsb2NrLXRlc3Qtbm8tcG9ydC5odG1sCiBzZWN1cml0eS9ibG9jay10ZXN0Lmh0
bWwKIAotIyBUZXN0cyBpbiBzdG9yYWdlLyBkaXJlY3RvcnkKLSMgICBUZXN0cyBmYWlsaW5nCi1z
dG9yYWdlL3F1b3RhLXRyYWNraW5nLmh0bWwKLXN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3Jh
Z2Uvd2luZG93LW9wZW4uaHRtbAotc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3dp
bmRvdy1vcGVuLmh0bWwKLQogIyBUZXN0cyBpbiBzdmcvIGRpcmVjdG9yeQogIyAgIFRlc3RzIGZh
aWxpbmcKIHN2Zy9jdXN0b20vZW1iZWRkZWQtc3ZnLWRpc2FsbG93ZWQtaW4tZGFzaGJvYXJkLnht
bApAQCAtNTg0MSw5ICs1ODM1LDYgQEAgZmFzdC9ibG9jay9tYXJnaW4tY29sbGFwc2UvYmxvY2st
aW5zaWRlLWlubGluZQogIyBUZXN0cyB3aXRoIGJ1Z3MgYXR0YWNoZWQgOiBFbmFibGUgdGhlc2Ug
dGVzdHMgYWdhaW4gb25jZSB0aGVzZSBidWdzIGFyZSBmaXhlZC4KICMgLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLSMgUkVHUkVTU0lPTjogU2VlIEJ1ZyAjMjcxNDQgLSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxNDQKLXN0b3JhZ2UvZGF0YWJhc2UtbG9jay1hZnRlci1y
ZWxvYWQuaHRtbAotCiAjIFNlZSBCdWcgIzI3NjM3IC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI3NjM3CiBmYXN0L2hpc3Rvcnkvc2F2ZXMtc3RhdGUtYWZ0ZXItZnJh
Z21lbnQtbmF2Lmh0bWwKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwppbmRleCA5MDQwZmIyLi5mZTBlNjgzIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2
IEBACisyMDA5LTA4LTMxICBNYXJ0aW4gUm9iaW5zb24gIDxtYXJ0aW4uamFtZXMucm9iaW5zb25A
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFtHdGtdIEV4cG9zZSBhIGRhdGFiYXNlIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4OTkKKworICAgICAgICBFeHBvc2UgYW4gSFRNTDUg
U3RvcmFnZSBBUEkgZm9yIEdUSysuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0
YWJhc2VRdW90YSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdC5oOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXRkZWZpbmVzLmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwOgor
ICAgICAgICAod2Via2l0X2luaXQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6
CisgICAgICAgICogd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNwcDogQWRkZWQuCisgICAg
ICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fZGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X3NldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm9w
ZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2lucyk6CisgICAgICAgICh3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5
X29yaWdpbl9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3Rv
Y29sKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QpOgorICAgICAg
ICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydCk6CisgICAgICAgICh3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2VfdXNhZ2UpOgorICAgICAgICAod2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3F1b3RhKToKKyAgICAgICAgKHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRhYmFzZV9xdW90YSk6CisgICAgICAgICh3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9hbGxfd2ViX2RhdGFiYXNlcyk6CisgICAgICAgIChXZWJLaXQ6
OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5
X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c2VjdXJp
dHlvcmlnaW4uaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNw
cDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2ZpbmFsaXplKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF93
ZWJfZGF0YWJhc2VfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2luaXQpOgorICAgICAg
ICAod2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfc2VjdXJpdHlfb3JpZ2luKToKKyAgICAgICAgKHdl
YmtpdF93ZWJfZGF0YWJhc2Vfc2V0X25hbWUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFz
ZV9nZXRfc2VjdXJpdHlfb3JpZ2luKToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X25hbWUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lKToK
KyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2V4cGVjdGVkX3NpemUpOgorICAgICAg
ICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2Rh
dGFiYXNlX2dldF9maWxlbmFtZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92
ZSk6CisgICAgICAgICh3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKToKKyAgICAgICAg
KHdlYmtpdF9nZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKToKKyAgICAgICAgKHdlYmtp
dF9zZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKToKKyAgICAgICAgKHdlYmtpdF9nZXRf
ZGVmYXVsdF93ZWJfZGF0YWJhc2VfcXVvdGEpOgorICAgICAgICAod2Via2l0X3NldF9kZWZhdWx0
X3dlYl9kYXRhYmFzZV9xdW90YSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNl
Lmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CisgICAgICAg
ICh3ZWJraXRfd2ViX2ZyYW1lX25ldyk6CisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX2dldF9z
ZWN1cml0eV9vcmlnaW4pOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oOgorICAg
ICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KToKKwogMjAwOS0wOC0zMSAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4
ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwCmluZGV4IDk2N2QzN2EuLmUwMzA5MWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTQ4NCwxMyArNDg0LDE3IEBAIHZvaWQg
Q2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJhbWUpCiB9CiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCi12b2lkIENocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFt
ZSwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXVv
dGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKIHsKLSAgICAvLyBT
ZXQgdG8gNU0gZm9yIHRlc3RpbmcKLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGNvbmZpZ3VyYWJs
ZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRl
ZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICBndWludDY0IGRlZmF1bHRRdW90YSA9
IHdlYmtpdF9nZXRfZGVmYXVsdF93ZWJfZGF0YWJhc2VfcXVvdGEoKTsKICAgICBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5zZXRRdW90YShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKSwgZGVmYXVsdFF1b3RhKTsKKworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSA9IGtp
dChmcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUo
d2ViRnJhbWUpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3NlY3VyaXR5X29yaWdpbih3ZWJGcmFtZSk7CisgICAgV2ViS2l0V2ViRGF0
YWJhc2UqIHdlYkRhdGFiYXNlID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2RhdGFi
YXNlKG9yaWdpbiwgZGF0YWJhc2VOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZSh3ZWJWaWV3LCAiZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQiLCB3ZWJGcmFtZSwg
d2ViRGF0YWJhc2UpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5kZXggYzIyMTY1ZS4uOGVl
Y2RhYSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKKysrIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2VicG9saWN5
ZGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRzZWN1cml0eW9yaWdpbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRlbnVtdHlw
ZXMuaD4KIAogI2VuZGlmIC8qIF9fV0VCS0lUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5l
cy5oCmluZGV4IGIwYWI1ZTkuLmEzYTIxMjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGRlZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgK
QEAgLTcxLDYgKzcxLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2Vi
S2l0V2ViVmlld0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkIFdlYktpdERv
d25sb2FkOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkQ2xhc3MgV2ViS2l0RG93bmxv
YWRDbGFzczsKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlIFdlYktpdFdlYkRh
dGFiYXNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlQ2xhc3MgV2ViS2l0V2Vi
RGF0YWJhc2VDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luIFdl
YktpdFNlY3VyaXR5T3JpZ2luOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2lu
Q2xhc3MgV2ViS2l0U2VjdXJpdHlPcmlnaW5DbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcCBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwCmluZGV4IDRlNDg2MTMuLmRjYTU1NWMgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwCkBAIC0xNjIsOSArMTYyLDEwIEBAIHZvaWQg
d2Via2l0X2luaXQoKQogICAgIFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5zZXRDYXBhY2l0eSgzKTsK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBsb2Nh
dGlvbgogICAgIGdjaGFyKiBkYXRhYmFzZURpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19n
ZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0IiwgImRhdGFiYXNlcyIsIE5VTEwpOwotICAgIFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGlyZWN0b3J5UGF0
aChkYXRhYmFzZURpcmVjdG9yeSk7CisgICAgd2Via2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0
b3J5X3BhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworCisgICAgLy8gRklYTUU6IEl0IHNob3VsZCBi
ZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVmYXVs
dCBhcHBjYWNoZSBsb2NhdGlvbgogICAgIFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLnNldENhY2hl
RGlyZWN0b3J5KGRhdGFiYXNlRGlyZWN0b3J5KTsKICAgICBnX2ZyZWUoZGF0YWJhc2VEaXJlY3Rv
cnkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRl
LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggOGMyMDQxZC4uMmQy
ZTcwZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0
d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4K
IAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgPGVuY2hhbnQuaD4KQEAg
LTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUgPGds
aWIuaD4KQEAgLTc5LDYgKzgxLDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0IGNvcmUoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwogCiAg
ICAgV2ViQ29yZTo6RWRpdGluZ0JlaGF2aW9yIGNvcmUoV2ViS2l0RWRpdGluZ0JlaGF2aW9yIHR5
cGUpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIGtpdChXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbiopOworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlKFdlYktpdFNlY3VyaXR5
T3JpZ2luKik7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTEzNyw2ICsxNDIsMTcgQEAgZXh0
ZXJuICJDIiB7CiAgICAgICAgIGdjaGFyKiB0aXRsZTsKICAgICAgICAgZ2NoYXIqIHVyaTsKICAg
ICAgICAgV2ViS2l0TG9hZFN0YXR1cyBsb2FkU3RhdHVzOworICAgICAgICBXZWJLaXRTZWN1cml0
eU9yaWdpbiogb3JpZ2luOworICAgIH07CisKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJ
Tl9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdF
QktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKSkK
KyAgICBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSB7CisgICAgICAgIFJlZlB0
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gY29yZU9yaWdpbjsKKyAgICAgICAgZ2NoYXIqIHBy
b3RvY29sOworICAgICAgICBnY2hhciogaG9zdDsKKyAgICAgICAgR0hhc2hUYWJsZSogd2ViRGF0
YWJhc2VzOworCisgICAgICAgIGdib29sZWFuIGRpc3Bvc2VkOwogICAgIH07CiAKICAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OkZyYW1lPgpAQCAtMjY0LDYgKzI4MCw5IEBAIGV4dGVybiAiQyIgewog
ICAgIAogICAgIFdFQktJVF9BUEkgdm9pZAogICAgIHdlYmtpdF9yZXNldF9vcmlnaW5fYWNjZXNz
X3doaXRlX2xpc3RzKCk7CisKKyAgICBXRUJLSVRfQVBJIFdlYktpdFdlYkRhdGFiYXNlICoKKyAg
ICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2UoV2ViS2l0U2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5X29yaWdpbiwgY29uc3QgY2hhciogZGF0YWJhc2VfbmFtZSk7CiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmln
aW4uY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzcxNzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKQEAgLTAsMCArMSw0
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4gTWlj
aGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmRh
dGFiYXNlLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRy
YWNrZXIuaCIKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKKy8qKgorICogU0VDVElP
Tjp3ZWJraXRzZWN1cml0eW9yaWdpbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIHNlY3VyaXR5
IGJvdW5kYXJ5IGZvciB3ZWIgc2l0ZXMKKyAqCisgKiAjV2ViS2l0U2VjdXJpdHlPcmlnaW4gaXMg
YSByZXByZXNlbnRhdGlvbiBvZiBhIHNlY3VyaXR5IGRvbWFpbiBkZWZpbmVkCisgKiBieSB3ZWIg
c2l0ZXMuIEFuIG9yaWdpbiBjb25zaXN0cyBvZiBhIGhvc3QgbmFtZSwgYSBwcm90b2NvbCwgYW5k
IGEgcG9ydAorICogbnVtYmVyLiBXZWIgc2l0ZXMgd2l0aCB0aGUgc2FtZSBzZWN1cml0eSBvcmln
aW4gY2FuIGFjY2VzcyBlYWNoIG90aGVyJ3MKKyAqIHJlc291cmNlcyBmb3IgY2xpZW50LXNpZGUg
c2NyaXB0aW5nIG9yIGRhdGFiYXNlIGFjY2Vzcy4KKyAqIAorICogVXNlICN3ZWJraXRfd2ViX2Zy
YW1lX2dldF9zZWN1cml0eV9vcmlnaW4gdG8gZ2V0IHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgYQor
ICogI1dlYktpdFdlYkZyYW1lLgorICoKKyAqIERhdGFiYXNlIHF1b3RhcyBhbmQgdXNhZ2VzIGFy
ZSBhbHNvIGRlZmluZWQgcGVyIHNlY3VyaXR5IG9yaWdpbi4gVGhlCisgKiBjdW11bGF0aXZlIGRp
c2sgdXNhZ2Ugb2YgYW4gb3JpZ2luJ3MgZGF0YWJhc2VzIG1heSBiZSByZXRyaWV2ZWQgd2l0aAor
ICogI3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZV91c2FnZS4gQW4gb3Jp
Z2luJ3MgcXVvdGEgY2FuIGJlCisgKiBhZGp1c3RlZCB3aXRoICN3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEuCisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9QUk9UT0NPTCwKKyAgICBQUk9Q
X0hPU1QsCisgICAgUFJPUF9QT1JULAorICAgIFBST1BfREFUQUJBU0VfVVNBR0UsCisgICAgUFJP
UF9EQVRBQkFTRV9RVU9UQQorfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRTZWN1cml0eU9yaWdp
biwgd2Via2l0X3NlY3VyaXR5X29yaWdpbiwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09S
SUdJTihvYmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNl
Y3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgZ19mcmVlKHByaXYtPnByb3RvY29sKTsKKyAgICBn
X2ZyZWUocHJpdi0+aG9zdCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyhzZWN1cml0eU9yaWdpbikt
PmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmln
aW5fZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4q
IHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworICAgIFdl
YktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5T3JpZ2luLT5wcml2Owor
CisgICAgaWYgKCFwcml2LT5kaXNwb3NlZCkgeworICAgICAgICBwcml2LT5jb3JlT3JpZ2luLT5k
ZXJlZigpOworICAgICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShwcml2LT53ZWJEYXRhYmFzZXMp
OworICAgICAgICBwcml2LT5kaXNwb3NlZCA9IHRydWU7CisgICAgfQorCisgICAgR19PQkpFQ1Rf
Q0xBU1Moc2VjdXJpdHlPcmlnaW4pLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZ
X09SSUdJTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9Q
X0RBVEFCQVNFX1FVT1RBOgorICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJf
ZGF0YWJhc2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4sIGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4gPSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bf
aWQpIHsKKyAgICBjYXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2woc2VjdXJpdHlPcmln
aW4pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1Q6CisgICAgICAgIGdfdmFs
dWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChzZWN1
cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9SVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9y
dChzZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQUJB
U0VfVVNBR0U6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3VzYWdlKHNlY3VyaXR5T3JpZ2luKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRBQkFTRV9RVU9UQToKKyAgICAgICAgZ192YWx1
ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJh
c2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dIYXNoVGFibGUqIHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogc2VjdXJpdHlP
cmlnaW5zID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2Vx
dWFsLCBOVUxMLCBnX29iamVjdF91bnJlZik7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luczsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0KFdlYktp
dFNlY3VyaXR5T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2NsYXNzLT5kaXNw
b3NlID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9kaXNwb3NlOworICAgIGdvYmplY3RfY2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0
X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF9wcm9wZXJ0
eTsKKyAgICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9wcm9wZXJ0eTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJpdHlPcmln
aW46cHJvdG9jb2w6CisgICAgICAqCisgICAgICAqIFRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJp
dHkgb3JpZ2luLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUFJP
VE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygicHJvdG9jb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiUHJvdG9jb2wiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBwcm90b2NvbCBvZiB0
aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOmhvc3Q6CisgICAgICAqCisg
ICAgICAqIFRoZSBob3N0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgICAgICAqCisgICAgICAq
IFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9IT1NULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImhvc3QiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSG9zdCIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
VGhlIGhvc3Qgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRTZWN1cml0eU9yaWdpbjpwb3J0
OgorICAgICAgKgorICAgICAgKiBUaGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICAg
ICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUE9SVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgicG9ydCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUG9y
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBwb3J0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4iKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVTSE9SVCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgICAgLyoqCisgICAgICAqIFdlYktpdFNl
Y3VyaXR5T3JpZ2luOndlYi1kYXRhYmFzZS11c2FnZToKKyAgICAgICoKKyAgICAgICogVGhlIGN1
bXVsYXRpdmUgc2l6ZSBvZiBhbGwgd2ViIGRhdGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2lu
IGluIGJ5dGVzLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0RB
VEFCQVNFX1VTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfdWludDY0KCJ3ZWItZGF0YWJhc2UtdXNhZ2UiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiV2ViIERhdGFiYXNlIFVzYWdlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgY3VtdWxhdGl2ZSBzaXpl
IG9mIGFsbCB3ZWIgZGF0YWJhc2VzIGluIHRoZSBzZWN1cml0eSBvcmlnaW4iKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisgICAgICAvKioKKyAgICAgICogV2ViS2l0U2VjdXJpdHlPcmlnaW46d2ViLWRhdGFi
YXNlLXF1b3RhOgorICAgICAgKgorICAgICAgKiBUaGUgd2ViIGRhdGFiYXNlIHFvdXRhIG9mIHRo
ZSBzZWN1cml0eSBvcmlnaW4gaW4gYnl0ZXMuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEu
MTMKKyAgICAgICovCisgICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmpl
Y3RfY2xhc3MsIFBST1BfREFUQUJBU0VfUVVPVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoIndlYi1kYXRhYmFzZS1xdW90YSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJXZWIgRGF0YWJhc2Ug
UXVvdGEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSB3ZWIgZGF0YWJhc2UgcXVvdGEgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBieXRlcyIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNp
emVvZihXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9pbml0KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9v
cmlnaW4pCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gV0VCS0lU
X1NFQ1VSSVRZX09SSUdJTl9HRVRfUFJJVkFURShzZWN1cml0eV9vcmlnaW4pOworICAgIHByaXYt
PndlYkRhdGFiYXNlcyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9l
cXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7CisgICAgc2VjdXJpdHlfb3JpZ2luLT5wcml2
ID0gcHJpdjsKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2Nv
bDoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICog
UmV0dXJucyB0aGUgcHJvdG9jb2wgZm9yIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgKgorICogUmV0
dXJuczogdGhlIHByb3RvY29sIGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luCisgKgorICogU2luY2U6
IDEuMS4xMworICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9zZWN1cml0eV9vcmln
aW5fZ2V0X3Byb3RvY29sKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1
cml0eV9vcmlnaW4pLCBOVUxMKTsKKworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSog
cHJpdiA9IHNlY3VyaXR5X29yaWdpbi0+cHJpdjsKKyAgICBXZWJDb3JlOjpTdHJpbmcgcHJvdG9j
b2wgPSAgcHJpdi0+Y29yZU9yaWdpbi0+cHJvdG9jb2woKTsKKworICAgIGlmIChwcm90b2NvbC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGdfZnJlZShwcml2LT5wcm90b2Nv
bCk7CisgICAgcHJpdi0+cHJvdG9jb2wgPSBnX3N0cmR1cChwcm90b2NvbC51dGY4KCkuZGF0YSgp
KTsKKyAgICByZXR1cm4gcHJpdi0+cHJvdG9jb2w7Cit9CisKKy8qKgorICogd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9nZXRfaG9zdDoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3Vy
aXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgaG9zdG5hbWUgZm9yIHRoZSBzZWN1cml0eSBv
cmlnaW4uCisgKgorICogUmV0dXJuczogdGhlIGhvc3RuYW1lIGZvciB0aGUgc2VjdXJpdHkgb3Jp
Z2luCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJ
VFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworCisgICAgV2ViS2l0U2VjdXJpdHlP
cmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlfb3JpZ2luLT5wcml2OworICAgIFdlYkNvcmU6
OlN0cmluZyBob3N0ID0gIHByaXYtPmNvcmVPcmlnaW4tPmhvc3QoKTsKKworICAgIGlmIChob3N0
LmlzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Z19mcmVlKHByaXYtPmhvc3QpOworICAgICAgICBwcml2LT5ob3N0ID0gZ19zdHJkdXAoaG9zdC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHByaXYtPmhvc3Q7CisgICAgfQorfQorCisv
KioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQ6CisgKiBAc2VjdXJpdHlfb3Jp
Z2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAqIFJldHVybnMgdGhlIHBvcnQgZm9y
IHRoZSBzZWN1cml0eSBvcmlnaW4uCisgKgorICogUmV0dXJuczogdGhlIHBvcnQgZm9yIHRoZSBz
ZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitndWludCB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9v
cmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09S
SUdJTihzZWN1cml0eV9vcmlnaW4pLCAwKTsKKworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
KiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9vcmlnaW4pOworICAgIHJldHVybiBjb3JlT3Jp
Z2luLT5wb3J0KCk7Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2Vi
X2RhdGFiYXNlX3VzYWdlOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlP
cmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIFdlYiBEYXRh
YmFzZSBkYXRhYmFzZSdzIGluIHRoZSBvcmlnaW4KKyAqIGluIGJ5dGVzLgorICoKKyAqIFJldHVy
bnM6IHRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIGRhdGFiYXNlcyAKKyAqCisgKiBTaW5jZTog
MS4xLjEzCisgKiovCitndWludDY0IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRh
YmFzZV91c2FnZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlf
b3JpZ2luKSwgMCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAgcmV0dXJu
IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnVzYWdlRm9yT3JpZ2luKGNvcmVP
cmlnaW4pOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZV9xdW90YToKKyAqIEBzZWN1cml0eV9v
cmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgcXVvdGEg
Zm9yIFdlYiBEYXRhYmFzZSBzdG9yYWdlIG9mIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqIGluIGJ5
dGVzLgorICoKKyAqIFJldHVybnM6IHRoZSBXZWIgRGF0YWJhc2UgcXVvdGEKKyAqCisgKiBTaW5j
ZTogMS4xLjEzCisgKiovCitndWludDY0IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9k
YXRhYmFzZV9xdW90YShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJp
dHlfb3JpZ2luKSwgMCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5X29yaWdpbik7CisgICAgcmV0
dXJuIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKGNv
cmVPcmlnaW4pOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRhYmFzZV9xdW90YToKKyAqIEBzZWN1cml0
eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKiBAcXVvdGE6IGEgbmV3IFdlYiBE
YXRhYmFzZSBxdW90YSBpbiBieXRlcworICoKKyAqIEFkanVzdCB0aGUgcXVvdGEgZm9yIFdlYiBE
YXRhYmFzZSBzdG9yYWdlIG9mIHRoZSBzZWN1cml0eSBvcmlnaW4KKyAqCisgKiBTaW5jZTogMS4x
LjEzCisgKiovCit2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRhYmFzZV9x
dW90YShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luLCBndWludDY0IHF1b3Rh
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1
cml0eV9vcmlnaW4pKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlfb3JpZ2luKTsKKyAgICBXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRRdW90YShjb3JlT3JpZ2luLCBxdW90
YSk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9hbGxf
d2ViX2RhdGFiYXNlczoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3Jp
Z2luCisgKgorICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIFdlYiBEYXRhYmFzZXMgaW4gdGhlIHNl
Y3VyaXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiBhICNHbGlzdCBvZiBkYXRhYmFzZXMgaW4g
dGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHTGlzdCog
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfYWxsX3dlYl9kYXRhYmFzZXMoV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5X29yaWdpbiksIE5VTEwpOworICAgIEdM
aXN0KiBkYXRhYmFzZXMgPSBOVUxMOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eV9vcmlnaW4pOwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+IGRhdGFiYXNlTmFtZXM7CisKKyAgICBpZiAoIVdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlTmFtZXNGb3JPcmlnaW4o
Y29yZU9yaWdpbiwgZGF0YWJhc2VOYW1lcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgV2ViS2l0V2ViRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9nZXRfd2ViX2RhdGFiYXNlKHNlY3VyaXR5X29yaWdpbiwgZGF0YWJhc2VOYW1lc1tpXS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgZGF0YWJhc2VzID0gZ19saXN0X2FwcGVuZChkYXRhYmFzZXMs
IGRhdGFiYXNlKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBkYXRhYmFzZXM7Cit9CisK
K1dlYktpdFNlY3VyaXR5T3JpZ2luKiBXZWJLaXQ6OmtpdChXZWJDb3JlOjpTZWN1cml0eU9yaWdp
biogY29yZU9yaWdpbikKK3sKKyAgICBBU1NFUlQoY29yZU9yaWdpbik7CisKKyAgICBHSGFzaFRh
YmxlKiB0YWJsZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCk7CisgICAgV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiA9IChXZWJLaXRTZWN1cml0eU9yaWdpbiopIGdfaGFzaF90YWJsZV9s
b29rdXAodGFibGUsIGNvcmVPcmlnaW4pOworCisgICAgaWYgKCFvcmlnaW4pIHsKKyAgICAgICAg
b3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
U0VDVVJJVFlfT1JJR0lOLCBOVUxMKSk7CisgICAgICAgIG9yaWdpbi0+cHJpdi0+Y29yZU9yaWdp
biA9IGNvcmVPcmlnaW47CisgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQod2Via2l0X3NlY3Vy
aXR5X29yaWdpbnMoKSwgY29yZU9yaWdpbiwgb3JpZ2luKTsKKyAgICB9CisKKyAgICByZXR1cm4g
b3JpZ2luOworfQorCisKK1dlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBXZWJLaXQ6OmNvcmUoV2Vi
S2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQoreworICAgIEFTU0VSVChzZWN1cml0
eU9yaWdpbik7CisKKyAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPnByaXYtPmNvcmVPcmlnaW4u
Z2V0KCk7Cit9CisKK1dlYktpdFdlYkRhdGFiYXNlKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF93ZWJfZGF0YWJhc2UoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29yaWdpbiwgY29u
c3QgZ2NoYXIqIGRhdGFiYXNlX25hbWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eV9vcmlnaW4pLCBOVUxMKTsKKworICAgIFdl
YktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5X29yaWdpbi0+cHJpdjsK
KyAgICBHSGFzaFRhYmxlKiBkYXRhYmFzZUhhc2ggPSBwcml2LT53ZWJEYXRhYmFzZXM7CisgICAg
V2ViS2l0V2ViRGF0YWJhc2UqIGRhdGFiYXNlID0gKFdlYktpdFdlYkRhdGFiYXNlKikgZ19oYXNo
X3RhYmxlX2xvb2t1cChkYXRhYmFzZUhhc2gsIGRhdGFiYXNlX25hbWUpOworCisgICAgaWYgKCFk
YXRhYmFzZSkgeworICAgICAgICBkYXRhYmFzZSA9ICBXRUJLSVRfV0VCX0RBVEFCQVNFKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic2VjdXJpdHktb3JpZ2luIiwgc2VjdXJpdHlfb3JpZ2luLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBkYXRhYmFzZV9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKTsKKyAgICAg
ICAgZ19oYXNoX3RhYmxlX2luc2VydChkYXRhYmFzZUhhc2gsIGdfc3RyZHVwKGRhdGFiYXNlX25h
bWUpLCBkYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGFiYXNlOworfQorCmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40ZjU4MDUyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbiwgSmFuIE1pY2hhZWwgQy4gQWxvbnpvCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9ICisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9PUklH
SU5fSAorCisjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmlnaW4uaCIKKyNpbmNsdWRlICJ3ZWJr
aXR3ZWJkYXRhYmFzZS5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVf
U0VDVVJJVFlfT1JJR0lOICAgICAgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF90
eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9PUklHSU4ob2JqKSAgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09S
SUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW4pKQorI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJ
R0lOX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKG9iaikgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4pKQor
I2RlZmluZSBXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4pKQor
I2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIFdl
YktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U2VjdXJp
dHlPcmlnaW5Qcml2YXRlIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZTsKKworc3RydWN0IF9X
ZWJLaXRTZWN1cml0eU9yaWdpbiB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAg
ICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXY7
Cit9OworCitzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9u
ICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF90eXBlICh2b2lkKTsKKwor
V0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5f
Z2V0X3Byb3RvY29sICAgICAgICAgICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29y
aWdpbik7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2dldF9ob3N0ICAgICAgICAgICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9wb3J0ICAgICAgICAgICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eV9vcmlnaW4pOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5f
Z2V0X3dlYl9kYXRhYmFzZV91c2FnZSAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5X29y
aWdpbik7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRf
d2ViX2RhdGFiYXNlX3F1b3RhIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2lu
KTsKKworV0VCS0lUX0FQSSB2b2lkIAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfd2ViX2Rh
dGFiYXNlX3F1b3RhIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luLCBndWlu
dDY0IHF1b3RhKTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF9hbGxfd2ViX2RhdGFiYXNlcyAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9v
cmlnaW4pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19XRUJLSVRfU0VDVVJJVFlfT1JJ
R0lOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJh
c2UuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzliZDUKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw1MjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJkYXRhYmFzZS5oIgorCisjaW5jbHVkZSAid2Via2l0
cHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlRGV0
YWlscy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorCisjaW5jbHVkZSA8Z2xpYi9n
aTE4bi1saWIuaD4KKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHdlYmRhdGFiYXNlCisgKiBAc2hv
cnRfZGVzY3JpcHRpb246IEEgV2ViS2l0IHdlYiBhcHBsaWNhdGlvbiBkYXRhYmFzZQorICoKKyAq
ICNXZWJLaXRXZWJEYXRhYmFzZSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgV2ViIERhdGFiYXNl
IGRhdGFiYXNlLiBUaGUKKyAqIHByb3Bvc2VkIFdlYiBEYXRhYmFzZSBzdGFuZGFyZCBpbnRyb2R1
Y2VzIHN1cHBvcnQgZm9yIFNRTCBkYXRhYmFzZXMgdGhhdCB3ZWIKKyAqIHNpdGVzIGNhbiBjcmVh
dGUgYW5kIGFjY2VzcyBvbiBhIGxvY2FsIGNvbXB1dGVyIHRocm91Z2ggSmF2YVNjcmlwdC4KKyAq
CisgKiBUbyBnZXQgYWNjZXNzIHRvIGFsbCBkYXRhYmFzZXMgZGVmaW5lZCBieSBhIHNlY3VyaXR5
IG9yaWdpbiwgdXNlCisgKiAjd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VzLiBF
YWNoIGRhdGFiYXNlIGhhcyBhIGNhbm9uaWNhbAorICogbmFtZSwgYXMgd2VsbCBhcyBhIHVzZXIt
ZnJpZW5kbHkgZGlzcGxheSBuYW1lLgorICogCisgKiBXZWJLaXQgdXNlcyBTUUxpdGUgdG8gY3Jl
YXRlIGFuZCBhY2Nlc3MgdGhlIGxvY2FsIFNRTCBkYXRhYmFzZXMuIFRoZSBsb2NhdGlvbgorICog
b2YgYSAjV2ViS2l0V2ViRGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIHd0aCAjd2Via2l0X3dlYl9k
YXRhYmFzZV9nZXRfZmlsZW5hbWUuCisgKiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgbG9jYXRpb24g
b2YgYWxsIGRhdGFiYXNlcyB3aXRoCisgKiAjd2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3Rvcnlf
cGF0aC4KKyAqIAorICogRm9yIGVhY2ggZGF0YWJhc2UgdGhlIHdlYiBzaXRlIGNhbiBkZWZpbmUg
YW4gZXN0aW1hdGVkIHNpemUgd2hpY2ggY2FuIGJlCisgKiBhY2Nlc3NlZCB3aXRoICN3ZWJraXRf
d2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplLiBUaGUgY3VycmVudCBzaXplIG9mIHRoZQor
ICogZGF0YWJhc2UgaW4gYnl0ZXMgaXMgcmV0dXJuZWQgYnkgI3dlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X3NpemUuCisgKiAKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIHRoZSBXZWIg
RGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBwcm9wb3NhbCBhdAorICogaHR0cDovL2Rldi53My5vcmcv
aHRtbDUvd2ViZGF0YWJhc2UKKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVt
IHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1NFQ1VSSVRZX09SSUdJTiwKKyAgICBQUk9QX05B
TUUsCisgICAgUFJPUF9ESVNQTEFZX05BTUUsCisgICAgUFJPUF9FWFBFQ1RFRF9TSVpFLAorICAg
IFBST1BfU0laRSwKKyAgICBQUk9QX1BBVEgKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2Vi
RGF0YWJhc2UsIHdlYmtpdF93ZWJfZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBf
V2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlIHsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3Jp
Z2luOworICAgIGdjaGFyKiBuYW1lOworICAgIGdjaGFyKiBkaXNwbGF5X25hbWU7CisgICAgZ2No
YXIqIGZpbGVuYW1lOworfTsKKworc3RhdGljIGdjaGFyKiB3ZWJraXRfZGF0YWJhc2VfZGlyZWN0
b3J5X3BhdGggPSBOVUxMOworc3RhdGljIGd1aW50NjQgd2Via2l0X2RlZmF1bHRfZGF0YWJhc2Vf
cXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CisKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9H
RVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJ
VF9UWVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKSkKKworc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfc2VjdXJpdHlfb3JpZ2luKFdlYktpdFdlYkRh
dGFiYXNlKiB3ZWJfZGF0YWJhc2UsIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmln
aW4pOworCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKFdlYktpdFdl
YkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKworc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9kYXRhYmFzZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlID0gV0VCS0lUX1dFQl9EQVRBQkFTRShvYmpl
Y3QpOworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5w
cml2OworCisgICAgaWYgKHByaXYtPm9yaWdpbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJp
di0+b3JpZ2luKTsKKworICAgIGdfZnJlZShwcml2LT5uYW1lKTsKKyAgICBnX2ZyZWUocHJpdi0+
ZGlzcGxheV9uYW1lKTsKKyAgICBnX2ZyZWUocHJpdi0+ZmlsZW5hbWUpOworCisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X3dlYl9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UgPSBX
RUJLSVRfV0VCX0RBVEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAg
ICBjYXNlIFBST1BfU0VDVVJJVFlfT1JJR0lOOgorICAgICAgICB3ZWJraXRfd2ViX2RhdGFiYXNl
X3NldF9zZWN1cml0eV9vcmlnaW4od2ViX2RhdGFiYXNlLCBXRUJLSVRfU0VDVVJJVFlfT1JJR0lO
KGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX05BTUU6CisgICAgICAgIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X25hbWUod2ViX2RhdGFi
YXNlLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlID0gV0VCS0lUX1dFQl9EQVRBQkFTRShvYmplY3QpOwor
ICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2Owor
CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1NFQ1VSSVRZX09SSUdJTjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBwcml2LT5vcmlnaW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9uYW1lKHdlYkRhdGFiYXNlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNQTEFZX05BTUU6CisgICAgICAgIGdfdmFsdWVf
c2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lKHdl
YkRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FWFBFQ1RFRF9TSVpF
OgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X2V4cGVjdGVkX3NpemUod2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3dl
Yl9kYXRhYmFzZV9nZXRfc2l6ZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUEFUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
d2ViX2RhdGFiYXNlX2dldF9maWxlbmFtZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYkRhdGFiYXNl
Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93
ZWJfZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdF9jbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfcHJvcGVydHk7CisKKyAgICAgLyoq
CisgICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOnNlY3VyaXR5LW9yaWdpbjoKKyAgICAgICoKKyAg
ICAgICogVGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAqCisgICAg
ICAqIFNpbmNlOiAxLjEuMTMKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9TRUNVUklUWV9PUklHSU4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgic2VjdXJpdHkt
b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlNlY3VyaXR5IE9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHNlY3VyaXR5IG9yaWdpbiBv
ZiB0aGUgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1G
bGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKwor
ICAgICAvKioKKyAgICAgICogV2ViS2l0V2ViRGF0YWJhc2U6bmFtZToKKyAgICAgICoKKyAgICAg
ICogVGhlIG5hbWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoKKyAgICAg
ICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibmFtZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJOYW1lIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgbmFtZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJh
bUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOwor
CisgICAgIC8qKgorICAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpkaXNwbGF5LW5hbWU6CisgICAg
ICAqCisgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRhYmFz
ZS4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xMworICAgICAgKi8KKyAgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0X2NsYXNzLCBQUk9QX0RJU1BMQVlfTkFN
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKCJkaXNwbGF5LW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiRGlzcGxheSBOYW1lIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZGlzcGxheSBu
YW1lIG9mIHRoZSBXZWIgU3RvcmFnZSBkYXRhYmFzZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgIC8qKgorICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOmV4cGVjdGVk
LXNpemU6CisgICAgICoKKyAgICAgKiBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZGF0YWJhc2Ug
aW4gYnl0ZXMgYXMgZGVmaW5lZCBieSB0aGUgd2ViIGF1dGhvci4KKyAgICAgKgorICAgICAqIFNp
bmNlOiAxLjEuMTMKKyAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0X2NsYXNzLCBQUk9QX0VYUEVDVEVEX1NJWkUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkLXNpemUiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJFeHBlY3RlZCBTaXplIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBleHBlY3RlZCBzaXplIG9mIHRo
ZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAvKioKKyAgICAg
KiBXZWJLaXRXZWJEYXRhYmFzZTpzaXplOgorICAgICAqCisgICAgICogVGhlIGN1cnJlbnQgc2l6
ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjEz
CisgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdF9j
bGFzcywgUFJPUF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJzaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
U2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
Y3VycmVudCBzaXplIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworICAgICAvKioKKyAgICAgICogV2ViS2l0V2ViRGF0YWJhc2U6ZmlsZW5hbWU6CisgICAgICAq
CisgICAgICAqIFRoZSBhYnNvbHV0ZSBmaWxlbmFtZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFi
YXNlLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjEzCisgICAgICAqLworICAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUEFUSCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJm
aWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJGaWxlbmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGFic29sdXRlIGZpbGVuYW1lIG9mIHRo
ZSBXZWIgU3RvcmFnZSBkYXRhYmFzZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0V2Vi
RGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
aW5pdChXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIHdlYl9kYXRhYmFz
ZS0+cHJpdiA9IFdFQktJVF9XRUJfREFUQUJBU0VfR0VUX1BSSVZBVEUod2ViX2RhdGFiYXNlKTsK
K30KKworLy8gSW50ZXJuYWwgdXNlIG9ubHkKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJh
c2Vfc2V0X3NlY3VyaXR5X29yaWdpbihXZWJLaXRXZWJEYXRhYmFzZSAqd2ViX2RhdGFiYXNlLCBX
ZWJLaXRTZWN1cml0eU9yaWdpbiAqc2VjdXJpdHlfb3JpZ2luKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlfb3JpZ2luKSk7CisK
KyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7
CisKKyAgICBpZiAocHJpdi0+b3JpZ2luKQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5v
cmlnaW4pOworCisgICAgZ19vYmplY3RfcmVmKHNlY3VyaXR5X29yaWdpbik7CisgICAgcHJpdi0+
b3JpZ2luID0gc2VjdXJpdHlfb3JpZ2luOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Rh
dGFiYXNlX3NldF9uYW1lKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UsIGNvbnN0IGdj
aGFyKiBuYW1lKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFT
RSh3ZWJfZGF0YWJhc2UpKTsKKworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9
IHdlYl9kYXRhYmFzZS0+cHJpdjsKKyAgICBnX2ZyZWUocHJpdi0+bmFtZSk7CisgICAgcHJpdi0+
bmFtZSA9IGdfc3RyZHVwKG5hbWUpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X3NlY3VyaXR5X29yaWdpbjoKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFi
YXNlCisgKgorICogUmV0dXJucyB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIHRoZSAjV2ViS2l0V2Vi
RGF0YWJhc2UuCisgKgorICogUmV0dXJuczogdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0
YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitXZWJLaXRTZWN1cml0eU9yaWdpbiog
d2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2VjdXJpdHlfb3JpZ2luKFdlYktpdFdlYkRhdGFiYXNl
KiB3ZWJfZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9EQVRBQkFTRSh3ZWJfZGF0YWJhc2UpLCBOVUxMKTsKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVBy
aXZhdGUqIHByaXYgPSB3ZWJfZGF0YWJhc2UtPnByaXY7CisKKyAgICByZXR1cm4gcHJpdi0+b3Jp
Z2luOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWU6CisgKiBAd2Vi
X2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGNhbm9u
aWNhbCBuYW1lIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisgKgorICogUmV0dXJuczogdGhl
IG5hbWUgb2YgdGhlIGRhdGFiYXNlCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworR19DT05T
VF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUoV2ViS2l0V2ViRGF0
YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIE5VTEwpOworICAgIFdlYktpdFdlYkRhdGFi
YXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKworICAgIHJldHVybiBwcml2
LT5uYW1lOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFt
ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJu
cyB0aGUgbmFtZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGFzIHNlZW4gYnkgdGhlIHVzZXIu
CisgKgorICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGFzIHNlZW4gYnkgdGhl
IHVzZXIuCisgKgorICogU2luY2U6IDEuMS4xMworICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIq
IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZShXZWJLaXRXZWJEYXRhYmFzZSog
d2ViX2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
REFUQUJBU0Uod2ViX2RhdGFiYXNlKSwgTlVMTCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisg
ICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2Owor
ICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFtZSwgY29y
ZShwcml2LT5vcmlnaW4pKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgZGlzcGxheU5hbWUgPSAgZGV0
YWlscy5kaXNwbGF5TmFtZSgpOworCisgICAgaWYgKGRpc3BsYXlOYW1lLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuICIiOworCisgICAgZ19mcmVlKHByaXYtPmRpc3BsYXlfbmFtZSk7CisgICAg
cHJpdi0+ZGlzcGxheV9uYW1lID0gZ19zdHJkdXAoZGlzcGxheU5hbWUudXRmOCgpLmRhdGEoKSk7
CisgICAgcmV0dXJuIHByaXYtPmRpc3BsYXlfbmFtZTsKKyNlbHNlCisgICAgcmV0dXJuICIiOwor
I2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6
ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJu
cyB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGluIGJ5dGVzIGFz
IGRlZmluZWQgYnkgdGhlCisgKiB3ZWIgYXV0aG9yLiBUaGUgV2ViIERhdGFiYXNlIHN0YW5kYXJk
IGFsbG93cyB3ZWIgYXV0aG9ycyB0byBzcGVjaWZ5IGFuIGV4cGVjdGVkCisgKiBzaXplIG9mIHRo
ZSBkYXRhYmFzZSB0byBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlLgorICoKKyAqIFJldHVy
bnM6IHRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBkYXRhYmFzZSBpbiBieXRlcworICoKKyAqIFNp
bmNlOiAxLjEuMTMKKyAqKi8KK2d1aW50NjQgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0
ZWRfc2l6ZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViX2RhdGFiYXNlKSwgMCk7CisK
KyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2
ID0gd2ViX2RhdGFiYXNlLT5wcml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyBkZXRh
aWxzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVB
bmRPcmlnaW4ocHJpdi0+bmFtZSwgY29yZShwcml2LT5vcmlnaW4pKTsKKyAgICByZXR1cm4gZGV0
YWlscy5leHBlY3RlZFVzYWdlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZToKKyAqIEB3ZWJfZGF0YWJhc2U6
IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2Yg
dGhlICNXZWJLaXRXZWJEYXRhYmFzZSBzcGFjZSBvbiBkaXNrIGluIGJ5dGVzLgorICoKKyAqIFJl
dHVybnM6IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMKKyAqCisgKiBT
aW5jZTogMS4xLjEzCisgKiovCitndWludDY0IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUo
V2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIDApOworCisjaWYgRU5B
QkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYl9k
YXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9IFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2lu
KHByaXYtPm5hbWUsIGNvcmUocHJpdi0+b3JpZ2luKSk7CisgICAgcmV0dXJuIGRldGFpbHMuY3Vy
cmVudFVzYWdlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICog
d2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZmlsZW5hbWU6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNX
ZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGFic29sdXRlIGZpbGVuYW1lIHRv
IHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UgZmlsZSBvbiBkaXNrLgorICoKKyAqIFJldHVybnM6IHRo
ZSBhYnNvbHV0ZSBmaWxlbmFtZSBvZiB0aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjEz
CisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZmls
ZW5hbWUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYl9kYXRhYmFzZSksIE5VTEwpOwor
CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJp
diA9IHdlYl9kYXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpTdHJpbmcgY29yZU5hbWUgPSBX
ZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KHByaXYtPm5hbWUpOworICAgIFdlYkNvcmU6OlN0cmlu
ZyBjb3JlUGF0aCA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRo
Rm9yRGF0YWJhc2UoY29yZShwcml2LT5vcmlnaW4pLCBjb3JlTmFtZSk7CisKKyAgICBpZiAoY29y
ZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4iIjsKKworICAgIGdfZnJlZShwcml2LT5m
aWxlbmFtZSk7CisgICAgcHJpdi0+ZmlsZW5hbWUgPSBnX3N0cmR1cChjb3JlUGF0aC51dGY4KCku
ZGF0YSgpKTsKKyAgICByZXR1cm4gcHJpdi0+ZmlsZW5hbWU7CisKKyNlbHNlCisgICAgcmV0dXJu
ICIiOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9yZW1vdmU6Cisg
KiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJlbW92ZXMgdGhl
ICNXZWJLaXRXZWJEYXRhYmFzZSBmcm9tIGl0cyBzZWN1cml0eSBvcmlnaW4gYW5kIGRlc3Ryb3lz
IGFsbCBkYXRhCisgKiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjEu
MTMKKyAqKi8KK3ZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9yZW1vdmUoV2ViS2l0V2ViRGF0YWJh
c2UqIHdlYl9kYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJf
REFUQUJBU0Uod2ViX2RhdGFiYXNlKSk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2Vi
S2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViX2RhdGFiYXNlLT5wcml2OworICAgIFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZURhdGFiYXNlKGNvcmUocHJp
di0+b3JpZ2luKSwgcHJpdi0+bmFtZSk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfcmVt
b3ZlX2FsbF93ZWJfZGF0YWJhc2VzOgorICoKKyAqIFJlbW92ZXMgYWxsIHdlYiBkYXRhYmFzZXMg
ZnJvbSB0aGUgY3VycmVudCBkYXRhYmFzZSBkaXJlY3RvcnkgcGF0aC4KKyAqCisgKiBTaW5jZTog
MS4xLjEzCisgKiovCit2b2lkIHdlYmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFzZXMoKQorewor
I2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5kZWxldGVBbGxEYXRhYmFzZXMoKTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9n
ZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoOgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJl
bnQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAqIERhdGFi
YXNlIGRhdGFiYXNlcy4gQnkgZGVmYXVsdCB0aGlzIHBhdGggd2lsbCBiZSBpbiB0aGUgdXNlciBk
YXRhCisgKiBkaXJlY3RvcnkuCisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQgZGF0YWJhc2Ug
ZGlyZWN0b3J5IHBhdGgKKyAqCisgKiBTaW5jZTogMS4xLjEzCisgKiovCitHX0NPTlNUX1JFVFVS
TiBnY2hhciogd2Via2l0X2dldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoKQoreworI2lm
IEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTdHJpbmcgcGF0aCA9IFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlRGlyZWN0b3J5UGF0aCgpOworCisgICAg
aWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBnX2ZyZWUod2Vi
a2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKTsKKyAgICB3ZWJraXRfZGF0YWJhc2VfZGlyZWN0
b3J5X3BhdGggPSBnX3N0cmR1cChwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiB3ZWJr
aXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGg7CisjZWxzZQorICAgIHJldHVybiAiIjsKKyNlbmRp
ZgorfQorCisvKioKKyAqIHdlYmtpdF9zZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoOgor
ICogQHBhdGg6IHRoZSBuZXcgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgKKyAqCisgKiBTZXRzIHRo
ZSBjdXJyZW50IHBhdGggdG8gdGhlIGRpcmVjdG9yeSBXZWJLaXQgd2lsbCB3cml0ZSBXZWIgCisg
KiBEYXRhYmFzZSBkYXRhYmFzZXMuIAorICoKKyAqIFNpbmNlOiAxLjEuMTMKKyAqKi8KK3ZvaWQg
d2Via2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoY29uc3QgZ2NoYXIqIHBhdGgp
Cit7CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlN0cmluZyBjb3JlUGF0aCA9
IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgocGF0aCk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvcmVQYXRoKTsKKwor
ICAgIGdfZnJlZSh3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgpOworICAgIHdlYmtpdF9k
YXRhYmFzZV9kaXJlY3RvcnlfcGF0aCA9IGdfc3RyZHVwKGNvcmVQYXRoLnV0ZjgoKS5kYXRhKCkp
OworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X2dldF9kZWZhdWx0X3dlYl9kYXRhYmFzZV9x
dW90YToKKyAqCisgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHF1b3RhIGZvciBXZWIgRGF0YWJhc2Ug
ZGF0YWJhc2VzLiBCeSBkZWZhdWx0CisgKiB0aGlzIHZhbHVlIGlzIDVNQi4KKyAKKyAqIFJldHVy
bnM6IHRoZSBjdXJyZW50IGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEgaW4gYnl0ZXMKKyAqCisgKiBT
aW5jZTogMS4xLjEzCisgKiovCitndWludDY0IHdlYmtpdF9nZXRfZGVmYXVsdF93ZWJfZGF0YWJh
c2VfcXVvdGEoKQoreworICAgIHJldHVybiB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YTsK
K30KKworLyoqCisgKiB3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhOgorICog
QGRlZmF1bHRfcXVvdGE6IHRoZSBuZXcgZGVmYXVsdCBkYXRhYmFzZSBxdW90YQorICoKKyAqIFNl
dHMgdGhlIGN1cnJlbnQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdl
YiAKKyAqIERhdGFiYXNlIGRhdGFiYXNlcy4gCisgKgorICogU2luY2U6IDEuMS4xMworICoqLwor
dm9pZCB3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhKGd1aW50NjQgZGVmYXVs
dF9xdW90YSkKK3sKKyAgICB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YSA9IGRlZmF1bHRf
cXVvdGE7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFz
ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhhMGJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaApAQCAtMCwwICsxLDk2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9XRUJfREFU
QUJBU0VfSAorI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFX0gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFICAgICAgICAgICAgICh3
ZWJraXRfd2ViX2RhdGFiYXNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfREFUQUJB
U0Uob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX1dFQl9EQVRBQkFTRSwgV2ViS2l0V2ViRGF0YWJhc2UpKQorI2RlZmluZSBXRUJL
SVRfV0VCX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsIFdlYktpdFdlYkRhdGFiYXNlQ2xh
c3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKG9iaikgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UpKQor
I2RlZmluZSBXRUJLSVRfSVNfV0VCX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UpKQorI2RlZmlu
ZSBXRUJLSVRfV0VCX0RBVEFCQVNFX0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsIFdlYktpdFdlYkRhdGFi
YXNlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlIFdl
YktpdFdlYkRhdGFiYXNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZSB7Cisg
ICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBX
ZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYkRh
dGFiYXNlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQ
YWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAg
dm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVz
ZXJ2ZWQ0KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2RhdGFi
YXNlX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFNlY3Vy
aXR5T3JpZ2luICoKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NlY3VyaXR5X29yaWdpbiAoV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRV
Uk4gZ2NoYXIqCit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9uYW1lICAgICAgICAgICAgKFdlYktp
dFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJO
IGdjaGFyKgord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lICAgIChXZWJLaXRX
ZWJEYXRhYmFzZSogd2ViX2RhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRf
d2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJf
ZGF0YWJhc2UpOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X3NpemUgICAgICAgICAgICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSk7CisKK1dF
QktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9m
aWxlbmFtZSAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJfZGF0YWJhc2UpOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlICAgICAgICAgICAgICAoV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYl9kYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcyAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBH
X0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9nZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9w
YXRoICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3NldF93ZWJfZGF0YWJhc2Vf
ZGlyZWN0b3J5X3BhdGggIChjb25zdCBnY2hhciogcGF0aCk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2
NAord2Via2l0X2dldF9kZWZhdWx0X3dlYl9kYXRhYmFzZV9xdW90YSAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhICAgKGd1
aW50NjQgZGVmYXVsdF9xdW90YSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX1dFQktJ
VF9XRUJfREFUQUJBU0VfSF9fICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKaW5k
ZXggOWYxMzViNy4uY2M3ZGM4ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViZnJhbWUuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcApA
QCAtMzY1LDYgKzM2NSw4IEBAIFdlYktpdFdlYkZyYW1lKiB3ZWJraXRfd2ViX2ZyYW1lX25ldyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHByaXYtPmNvcmVGcmFtZSA9IEZyYW1lOjpjcmVh
dGUodmlld1ByaXYtPmNvcmVQYWdlLCAwLCBjbGllbnQpLmdldCgpOwogICAgIHByaXYtPmNvcmVG
cmFtZS0+aW5pdCgpOwogCisgICAgcHJpdi0+b3JpZ2luID0gTlVMTDsKKwogICAgIHJldHVybiBm
cmFtZTsKIH0KIApAQCAtOTk2LDMgKzk5OCwyNyBAQCBHdGtQb2xpY3lUeXBlIHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3koV2ViS2l0V2ViRnJhbWUqIGZyYQog
CiAgICAgcmV0dXJuIEdUS19QT0xJQ1lfQVVUT01BVElDOwogfQorCisvKioKKyAqIHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3NlY3VyaXR5X29yaWdpbjoKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2ViRnJh
bWUKKyAqCisgKiBSZXR1cm5zIHRoZSBAZnJhbWUncyBzZWN1cml0eSBvcmlnaW4uCisgKgorICog
UmV0dXJuIHZhbHVlOiB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIEBmcmFtZQorICovCitXZWJLaXRT
ZWN1cml0eU9yaWdpbiogd2Via2l0X3dlYl9mcmFtZV9nZXRfc2VjdXJpdHlfb3JpZ2luKFdlYktp
dFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIHByaXYgPSBm
cmFtZS0+cHJpdjsKKyAgICBpZiAoIXByaXYtPmNvcmVGcmFtZSB8fCAhcHJpdi0+Y29yZUZyYW1l
LT5kb2N1bWVudCgpIHx8ICFwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHByaXYtPm9yaWdpbiAmJiBw
cml2LT5vcmlnaW4tPnByaXYtPmNvcmVPcmlnaW4uZ2V0KCkgPT0gcHJpdi0+Y29yZUZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKQorICAgICAgICByZXR1cm4gcHJpdi0+b3JpZ2lu
OworCisgICAgaWYgKHByaXYtPm9yaWdpbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+
b3JpZ2luKTsKKworICAgIHByaXYtPm9yaWdpbiA9IGtpdChwcml2LT5jb3JlRnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIHJldHVybiBwcml2LT5vcmlnaW47Cit9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaAppbmRleCBhZDM1OWY2Li5mMzdkZGQ2IDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmgKQEAgLTE1OCw2ICsxNTgsOSBAQCB3ZWJraXRfd2ViX2Zy
YW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kgKFdlYktpdFdlYkZyYW1lICAgICAg
ICAqZnJhbWUpOwogV0VCS0lUX0FQSSBHdGtQb2xpY3lUeXBlCiB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9saWN5ICAgKFdlYktpdFdlYkZyYW1lICAgICAgICAqZnJh
bWUpOwogCitXRUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3JpZ2luKgord2Via2l0X3dlYl9mcmFt
ZV9nZXRfc2VjdXJpdHlfb3JpZ2luICAgICAgICAgKFdlYktpdFdlYkZyYW1lICAgICAgICpmcmFt
ZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cAppbmRleCA0YzhmY2ExLi4xNmIxNzczIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cApAQCAtMTQ0LDYgKzE0NCw3IEBAIGVudW0gewogICAgIENMT1NFX1dFQl9WSUVXLAogICAgIFVO
RE8sCiAgICAgUkVETywKKyAgICBEQVRBQkFTRV9RVU9UQV9FWENFRURFRCwKICAgICBMQVNUX1NJ
R05BTAogfTsKIApAQCAtMTk1Miw2ICsxOTUzLDI4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAg
ICAgICAgR1RLX1RZUEVfV0lER0VULCAzLAogICAgICAgICAgICAgR19UWVBFX1NUUklORywgR19U
WVBFX1NUUklORywgR19UWVBFX0hBU0hfVEFCTEUpOwogCisgICAgLyoqCisgICAgICogV2ViS2l0
V2ViVmlldzo6ZGF0YWJhc2UtcXVvdGEtZXhjZWVkZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBv
YmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEBmcmFtZTogdGhlIHJlbGV2
YW50IGZyYW1lCisgICAgICogQGRhdGFiYXNlOiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIHdoaWNo
IGV4Y2VlZGVkIHRoZSBxdW90YSBvZiBpdHMgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgICAgICoK
KyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OmRhdGFiYXNlLWV4Y2VlZGVkLXF1b3RhIHNpZ25h
bCB3aWxsIGJlIGVtaXR0ZWQgd2hlbgorICAgICAqIGEgV2ViIERhdGFiYXNlIGV4Y2VlZHMgdGhl
IHF1b3RhIG9mIGl0cyBzZWN1cml0eSBvcmlnaW4uIFRoaXMgc2lnbmFsCisgICAgICogbWF5IGJl
IHVzZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHF1b3RhIGJlZm9yZSB0aGUgb3JpZ2lu
YXRpbmcKKyAgICAgKiBvcGVyYXRpb24gZmFpbHMuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4x
LjEzCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbREFUQUJBU0VfUVVPVEFf
RVhDRUVERURdID0gZ19zaWduYWxfbmV3KCJkYXRhYmFzZS1xdW90YS1leGNlZWRlZCIsCisgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdT
aWduYWxGbGFncykgKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21h
cnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAor
ICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX09CSkVDVCk7CisKICAgICAvKgogICAg
ICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCAy
ZmVhMzU3Li5lOGE2MzJlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDgtMzEgIE1hcnRp
biBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRXhwb3NlIGEgZGF0
YWJhc2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBTdG9yYWdlIEFQSSBmb3IgR1RLKy4K
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAg
ICAgIChzZXREZWZhdWx0c1RvQ29uc2lzdGVudFN0YXRlVmFsdWVzRm9yVGVzdGluZyk6CisgICAg
ICAgIChkYXRhYmFzZVF1b3RhRXhjZWVkZWQpOgorICAgICAgICAoY3JlYXRlV2ViVmlldyk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSk6CisKIDIwMDktMDgt
MzEgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZhbGwgYmFjayB0
byBhIFJlbGVhc2UgdmVyc2lvbiBvZiBTYWZhcmkgaWYgYSBEZWJ1ZyBvbmUgZG9lc24ndCBleGlz
dApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJU
cmVlLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5j
cHAKaW5kZXggMTdlZDE5MC4uMjAzYjgzOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0zNzYsNiArMzc2LDEwIEBAIHN0YXRp
YyB2b2lkIHNldERlZmF1bHRzVG9Db25zaXN0ZW50U3RhdGVWYWx1ZXNGb3JUZXN0aW5nKCkKICNp
ZiBQTEFURk9STShYMTEpCiAgICAgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2lu
X2RpcmVjdG9yeSh3ZWJWaWV3LCBURVNUX1BMVUdJTl9ESVIpOwogI2VuZGlmCisKKyAgICBnY2hh
ciogZGF0YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9k
aXIoKSwgImd0a3dlYmtpdGRydCIsICJkYXRhYmFzZXMiLCBOVUxMKTsKKyAgICB3ZWJraXRfc2V0
X3dlYl9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aChkYXRhYmFzZURpcmVjdG9yeSk7CisgICAgZ19m
cmVlKGRhdGFiYXNlRGlyZWN0b3J5KTsKIH0KIAogc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBz
dHJpbmcmIHRlc3RQYXRoT3JVUkwpCkBAIC01OTgsNiArNjAyLDIzIEBAIHN0YXRpYyBnYm9vbGVh
biB3ZWJWaWV3Q2xvc2UoV2ViS2l0V2ViVmlldyogdmlldykKICAgICByZXR1cm4gVFJVRTsKIH0K
IAorc3RhdGljIHZvaWQgZGF0YWJhc2VRdW90YUV4Y2VlZGVkKFdlYktpdFdlYlZpZXcqIHZpZXcs
IFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgV2ViS2l0V2ViRGF0YWJhc2UgKmRhdGFiYXNlKQorewor
ICAgIEFTU0VSVCh2aWV3KTsKKyAgICBBU1NFUlQoZnJhbWUpOworICAgIEFTU0VSVChkYXRhYmFz
ZSk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Via2l0X3dlYl9kYXRh
YmFzZV9nZXRfc2VjdXJpdHlfb3JpZ2luKGRhdGFiYXNlKTsKKyAgICBpZiAoZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgeworICAgICAgICBwcmludGYoIlVJ
IERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1
cml0eU9yaWdpbjp7JXMsICVzLCAlaX0gZGF0YWJhc2U6JXNcbiIsCisgICAgICAgICAgICB3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChvcmlnaW4pLAorICAgICAgICAgICAgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pLAorICAgICAgICAgICAgd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pLAorICAgICAgICAgICAgd2Via2l0X3dl
Yl9kYXRhYmFzZV9nZXRfbmFtZShkYXRhYmFzZSkpOworICAgIH0KKyAgICB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCA1ICogMTAyNCAqIDEwMjQp
OworfQorCiAKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Q3JlYXRlKFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRXZWJGcmFtZSopOwogCkBAIC02MjIsNiArNjQzLDcgQEAgc3RhdGljIFdlYktp
dFdlYlZpZXcqIGNyZWF0ZVdlYlZpZXcoKQogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6
c3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCB3ZWJWaWV3U3RhdHVzQmFyVGV4dENoYW5nZWQsIDAs
CiAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpjcmVhdGUtd2ViLXZpZXciLCB3ZWJWaWV3
Q3JlYXRlLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6Y2xvc2Utd2ViLXZpZXci
LCB3ZWJWaWV3Q2xvc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpkYXRhYmFz
ZS1xdW90YS1leGNlZWRlZCIsIGRhdGFiYXNlUXVvdGFFeGNlZWRlZCwgMCwKICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOwogCiAgICAgcmV0dXJuIHZpZXc7CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcApp
bmRleCBhYmFiMDgyLi5lNmZhMjQ1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTM1MSwxMiAr
MzUxLDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJT
dHlsZVNoZWV0KCkKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFz
ZXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICB3ZWJraXRfcmVtb3ZlX2FsbF93
ZWJfZGF0YWJhc2VzKCk7CiB9CiAgCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRh
YmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsgICAgCi0gICAgLy8gRklYTUU6
IGltcGxlbWVudAoreworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW4obWFpbkZyYW1lKTsKKyAgICB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7CiB9CiAK
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWdu
ZWQgbG9uZyBsb25nIHNpemUpCi0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="19830"
          type_id="1"
          status="-"
          setter="xan.lopez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38925</attachid>
            <date>2009-09-02 08:36:44 -0700</date>
            <delta_ts>2009-09-03 21:53:26 -0700</delta_ts>
            <desc>Update patch rev4</desc>
            <filename>0001-Database-patch.patch</filename>
            <type>text/plain</type>
            <size>60011</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBiYjhkYjBiZGU5YjRhZTQxNzhkNjkxNjRkNzIyMmQ4MjMzODhlZTlhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTUgQXVnIDIwMDkgMTU6Mjk6MjYgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBEYXRhYmFzZSBwYXRjaAoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogR05VbWFrZWZpbGUuYW0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIExheW91dFRlc3RzL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZCAgICAgICAgICAgICAgICAgICB8ICAgIDkgLQogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY0ICsrKwogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwICAgICAgfCAgIDE0ICst
CiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDIgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICAgICAgICAg
fCAgICA2ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwICAgICAgICAgICAg
ICAgIHwgICAgNSArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oICAgICAgICAg
ICAgICAgICAgfCAgIDE5ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2lu
LmNwcCAgICAgICAgIHwgIDQyOSArKysrKysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oICAgICAgICAgICB8ICAgODAgKysrCiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgICAgICAgICAgICB8ICA1MzIgKysrKysrKysrKysr
KysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggICAgICAgICAg
ICAgIHwgICA5NiArKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgICAg
ICAgICAgICAgICB8ICAgMjYgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCAg
ICAgICAgICAgICAgICAgfCAgICA3ICstCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcCAgICAgICAgICAgICAgICB8ICAgMjMgKwogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgIHwgICAyMiArCiAuLi4vRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCB8ICAgIDcgKy0KIDIwIGZpbGVzIGNoYW5n
ZWQsIDEzNjQgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKCmRp
ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMDE4N2VkMi4uYmE5YTc0NCAx
MDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDA5LTA5LTAyICBNYXJ0aW4gUm9iaW5zb24gIDxtYXJ0aW4uamFtZXMucm9iaW5zb25AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
dGtdIEV4cG9zZSBhIGRhdGFiYXNlIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4OTkKKworICAgICAgICBFeHBvc2UgYW4gSFRNTDUgZGF0YWJh
c2UgQVBJIGZvciBHVEsrLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMDktMDkt
MDIgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgWGFuIExvcGV6IGFuZCBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQgYS9H
TlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IDUzYTA0Y2QuLjQxODA2ZTQgMTAw
NjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMzEsNiAr
MzMxLDcgQEAgd2Via2l0Z3RrX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vic2V0dGluZ3MuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYndpbmRvd2ZlYXR1cmVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJk
YXRhYmFzZS5oIFwKIAkkKHRvcF9idWlsZGRpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVy
c2lvbi5oCiAKIHdlYmtpdGd0a19idWlsdF9zb3VyY2VzICs9IFwKQEAgLTM3Miw2ICszNzMsMTAg
QEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5h
dmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lk
ZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnJlc291cmNlLmNwcCBc
CisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwIFwKKwlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRz
ZWN1cml0eW9yaWdpbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3Jp
Z2luLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcCBcCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjhjYzQ5OS4uN2I0NjY2YiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA5LTAyICBNYXJ0aW4gUm9iaW5zb24gIDxtYXJ0aW4u
amFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtHdGtdIEV4cG9zZSBhIGRhdGFiYXNlIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4OTkKKworICAgICAgICBF
eHBvc2UgYW4gSFRNTDUgZGF0YWJhc2UgQVBJIGZvciBHVEsrLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1NraXBwZWQ6CisKIDIwMDktMDktMDIgIEJlbiBNdXJkb2NoICA8YmVubUBnb29nbGUu
Y29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODczNwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA5MDE5OTg1Li5mN2M5NTgzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMzkzOSwxMiArMzkzOSw2IEBAIHNlY3VyaXR5L2F1
dG9jb21wbGV0ZS1jbGVhcmVkLW9uLWJhY2suaHRtbAogc2VjdXJpdHkvYmxvY2stdGVzdC1uby1w
b3J0Lmh0bWwKIHNlY3VyaXR5L2Jsb2NrLXRlc3QuaHRtbAogCi0jIFRlc3RzIGluIHN0b3JhZ2Uv
IGRpcmVjdG9yeQotIyAgIFRlc3RzIGZhaWxpbmcKLXN0b3JhZ2UvcXVvdGEtdHJhY2tpbmcuaHRt
bAotc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS93aW5kb3ctb3Blbi5odG1sCi1zdG9y
YWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvd2luZG93LW9wZW4uaHRtbAotCiAjIFRlc3Rz
IGluIHN2Zy8gZGlyZWN0b3J5CiAjICAgVGVzdHMgZmFpbGluZwogc3ZnL2N1c3RvbS9lbWJlZGRl
ZC1zdmctZGlzYWxsb3dlZC1pbi1kYXNoYm9hcmQueG1sCkBAIC01ODQwLDkgKzU4MzQsNiBAQCBm
YXN0L2Jsb2NrL21hcmdpbi1jb2xsYXBzZS9ibG9jay1pbnNpZGUtaW5saW5lCiAjIFRlc3RzIHdp
dGggYnVncyBhdHRhY2hlZCA6IEVuYWJsZSB0aGVzZSB0ZXN0cyBhZ2FpbiBvbmNlIHRoZXNlIGJ1
Z3MgYXJlIGZpeGVkLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0KIAotIyBSRUdSRVNTSU9OOiBTZWUg
QnVnICMyNzE0NCAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE0
NAotc3RvcmFnZS9kYXRhYmFzZS1sb2NrLWFmdGVyLXJlbG9hZC5odG1sCi0KICMgU2VlIEJ1ZyAj
Mjc2MzcgLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzcKIGZh
c3QvaGlzdG9yeS9zYXZlcy1zdGF0ZS1hZnRlci1mcmFnbWVudC1uYXYuaHRtbAogCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDli
YjY1NTAuLjY0ZWE4YzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMDktMDktMDIgIE1hcnRpbiBS
b2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRXhwb3NlIGEgZGF0YWJh
c2UgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Nzg5OQorCisgICAgICAgIEV4cG9zZSBhbiBIVE1MNSBkYXRhYmFzZSBBUEkgZm9yIEdUSysuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDaHJvbWVDbGllbnQ6OnByaW50KToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6
CisgICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0cHJpdmF0ZS5jcHA6CisgICAgICAgICh3ZWJraXRfaW5pdCk6CisgICAgICAgICogd2Via2l0
L3dlYmtpdHByaXZhdGUuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZmluYWxpemUpOgor
ICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9kaXNwb3NlKToKKyAgICAgICAgKHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5z
KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2luaXQpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5
X29yaWdpbl9nZXRfcHJvdG9jb2wpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfaG9zdCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KToKKyAg
ICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZV91c2FnZSk6Cisg
ICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2VfcXVvdGEpOgor
ICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfd2ViX2RhdGFiYXNlX3F1b3RhKToK
KyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2FsbF93ZWJfZGF0YWJhc2VzKToK
KyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAg
ICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2UpOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0d2ViZGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2Vf
ZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9kaXNwb3NlKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF93
ZWJfZGF0YWJhc2VfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2luaXQpOgorICAgICAg
ICAod2Via2l0X3dlYl9kYXRhYmFzZV9zZXRfc2VjdXJpdHlfb3JpZ2luKToKKyAgICAgICAgKHdl
YmtpdF93ZWJfZGF0YWJhc2Vfc2V0X25hbWUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFz
ZV9nZXRfc2VjdXJpdHlfb3JpZ2luKToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X25hbWUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lKToK
KyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2V4cGVjdGVkX3NpemUpOgorICAgICAg
ICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2Rh
dGFiYXNlX2dldF9maWxlbmFtZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92
ZSk6CisgICAgICAgICh3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKToKKyAgICAgICAg
KHdlYmtpdF9nZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKToKKyAgICAgICAgKHdlYmtp
dF9zZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKToKKyAgICAgICAgKHdlYmtpdF9nZXRf
ZGVmYXVsdF93ZWJfZGF0YWJhc2VfcXVvdGEpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJk
YXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwOgor
ICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9uZXcpOgorICAgICAgICAod2Via2l0X3dlYl9mcmFt
ZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQpOgorICAgICAgICAod2Via2l0X3dlYl9m
cmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KToKKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0d2ViZnJhbWUuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisKIDIwMDktMDktMDIgIEphbiBN
aWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgWGFuIExvcGV6IGFuZCBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggOGJmM2M3My4uODg1OGRmNSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBi
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtNDk2LDEz
ICs0OTYsMTcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lKiBmcmFtZSkKIH0KIAog
I2lmIEVOQUJMRShEQVRBQkFTRSkKLXZvaWQgQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNl
UXVvdGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmKQordm9pZCBDaHJvbWVDbGllbnQ6OmV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VO
YW1lKQogewotICAgIC8vIFNldCB0byA1TSBmb3IgdGVzdGluZwotICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgY29uZmlndXJhYmxlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb25zdCB1bnNp
Z25lZCBsb25nIGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OworICAgIGd1aW50
NjQgZGVmYXVsdFF1b3RhID0gd2Via2l0X2dldF9kZWZhdWx0X3dlYl9kYXRhYmFzZV9xdW90YSgp
OwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKGZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLCBkZWZhdWx0UXVvdGEpOworCisgICAgV2ViS2l0V2ViRnJh
bWUqIHdlYkZyYW1lID0ga2l0KGZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
Z2V0Vmlld0Zyb21GcmFtZSh3ZWJGcmFtZSk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiog
b3JpZ2luID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfc2VjdXJpdHlfb3JpZ2luKHdlYkZyYW1lKTsK
KyAgICBXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UgPSB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF93ZWJfZGF0YWJhc2Uob3JpZ2luLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSk7
CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJkYXRhYmFzZS1xdW90YS1leGNl
ZWRlZCIsIHdlYkZyYW1lLCB3ZWJEYXRhYmFzZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApp
bmRleCA4ZGU3NWUwLi5kMzkwNGQyIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXQuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMzcsNiArMzcsOCBAQAog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHdlYnJlc291cmNlLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmg+Cisj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGVudW10eXBlcy5oPgogCiAjZW5kaWYgLyogX19XRUJLSVRfSF9fICovCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmgKaW5kZXggZWE5MDBhMC4uNDQ1ZDlmNyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaApAQCAtNzcsNiArNzcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlJlc291cmNlQ2xhc3MgV2ViS2l0V2ViUmVzb3VyY2VDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJEYXRhU291cmNlIFdlYktpdFdlYkRhdGFTb3VyY2U7CiB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViRGF0YVNvdXJjZUNsYXNzIFdlYktpdFdlYkRhdGFTb3VyY2VDbGFzczsKIAordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlIFdlYktpdFdlYkRhdGFiYXNlOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlQ2xhc3MgV2ViS2l0V2ViRGF0YWJhc2VDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luIFdlYktpdFNlY3VyaXR5T3Jp
Z2luOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MgV2ViS2l0U2Vj
dXJpdHlPcmlnaW5DbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHByaXZhdGUuY3BwCmluZGV4IDRlNDg2MTMuLmRjYTU1NWMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHByaXZhdGUuY3BwCkBAIC0xNjIsOSArMTYyLDEwIEBAIHZvaWQgd2Via2l0X2luaXQoKQog
ICAgIFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5zZXRDYXBhY2l0eSgzKTsKIAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKLSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBjbGllbnQg
YXBwbGljYXRpb25zIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBsb2NhdGlvbgogICAgIGdjaGFy
KiBkYXRhYmFzZURpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2Rp
cigpLCAid2Via2l0IiwgImRhdGFiYXNlcyIsIE5VTEwpOwotICAgIFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZURpcmVj
dG9yeSk7CisgICAgd2Via2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoZGF0YWJh
c2VEaXJlY3RvcnkpOworCisgICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3Ig
Y2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBhcHBjYWNoZSBsb2Nh
dGlvbgogICAgIFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLnNldENhY2hlRGlyZWN0b3J5KGRhdGFi
YXNlRGlyZWN0b3J5KTsKICAgICBnX2ZyZWUoZGF0YWJhc2VEaXJlY3RvcnkpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggYmQyYTBiOS4uMWFkODAyZiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHByaXZhdGUuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4KIAogI2luY2x1ZGUgIkFy
Y2hpdmVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgpAQCAtNTYsNiAr
NTcsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAKICNpbmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgpA
QCAtODYsNiArODgsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QgY29yZShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7CiAKICAgICBXZWJD
b3JlOjpFZGl0aW5nQmVoYXZpb3IgY29yZShXZWJLaXRFZGl0aW5nQmVoYXZpb3IgdHlwZSk7CisK
KyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbioga2l0KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKik7
CisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmUoV2ViS2l0U2VjdXJpdHlPcmlnaW4q
KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTQ0LDYgKzE0OSwxNyBAQCBleHRlcm4gIkMi
IHsKICAgICAgICAgZ2NoYXIqIHRpdGxlOwogICAgICAgICBnY2hhciogdXJpOwogICAgICAgICBX
ZWJLaXRMb2FkU3RhdHVzIGxvYWRTdGF0dXM7CisgICAgICAgIFdlYktpdFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW47CisgICAgfTsKKworI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dFVF9Q
UklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZ
UEVfU0VDVVJJVFlfT1JJR0lOLCBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUpKQorICAgIHN0
cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlIHsKKyAgICAgICAgUmVmUHRyPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luPiBjb3JlT3JpZ2luOworICAgICAgICBnY2hhciogcHJvdG9jb2w7
CisgICAgICAgIGdjaGFyKiBob3N0OworICAgICAgICBHSGFzaFRhYmxlKiB3ZWJEYXRhYmFzZXM7
CisKKyAgICAgICAgZ2Jvb2xlYW4gZGlzcG9zZWQ7CiAgICAgfTsKIAogICAgIFBhc3NSZWZQdHI8
V2ViQ29yZTo6RnJhbWU+CkBAIC0yOTEsNiArMzA3LDkgQEAgZXh0ZXJuICJDIiB7CiAgICAgLy8g
V2ViS2l0V2ViRGF0YVNvdXJjZSBwcml2YXRlCiAgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSoKICAg
ICB3ZWJraXRfd2ViX2RhdGFfc291cmNlX25ld193aXRoX2xvYWRlcihQYXNzUmVmUHRyPFdlYktp
dDo6RG9jdW1lbnRMb2FkZXI+KTsKKworICAgIFdFQktJVF9BUEkgV2ViS2l0V2ViRGF0YWJhc2Ug
KgorICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZShXZWJLaXRTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IGNoYXIqIGRhdGFiYXNlTmFtZSk7CiB9
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlv
cmlnaW4uY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDBiMDkKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAKQEAgLTAsMCAr
MSw0MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uLCBKYW4g
TWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdl
YmRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKKy8qKgorICogU0VD
VElPTjp3ZWJraXRzZWN1cml0eW9yaWdpbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIHNlY3Vy
aXR5IGJvdW5kYXJ5IGZvciB3ZWIgc2l0ZXMKKyAqCisgKiAjV2ViS2l0U2VjdXJpdHlPcmlnaW4g
aXMgYSByZXByZXNlbnRhdGlvbiBvZiBhIHNlY3VyaXR5IGRvbWFpbiBkZWZpbmVkCisgKiBieSB3
ZWIgc2l0ZXMuIEFuIG9yaWdpbiBjb25zaXN0cyBvZiBhIGhvc3QgbmFtZSwgYSBwcm90b2NvbCwg
YW5kIGEgcG9ydAorICogbnVtYmVyLiBXZWIgc2l0ZXMgd2l0aCB0aGUgc2FtZSBzZWN1cml0eSBv
cmlnaW4gY2FuIGFjY2VzcyBlYWNoIG90aGVyJ3MKKyAqIHJlc291cmNlcyBmb3IgY2xpZW50LXNp
ZGUgc2NyaXB0aW5nIG9yIGRhdGFiYXNlIGFjY2Vzcy4KKyAqIAorICogVXNlICN3ZWJraXRfd2Vi
X2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW4gdG8gZ2V0IHRoZSBzZWN1cml0eSBvcmlnaW4gb2Yg
YQorICogI1dlYktpdFdlYkZyYW1lLgorICoKKyAqIERhdGFiYXNlIHF1b3RhcyBhbmQgdXNhZ2Vz
IGFyZSBhbHNvIGRlZmluZWQgcGVyIHNlY3VyaXR5IG9yaWdpbi4gVGhlCisgKiBjdW11bGF0aXZl
IGRpc2sgdXNhZ2Ugb2YgYW4gb3JpZ2luJ3MgZGF0YWJhc2VzIG1heSBiZSByZXRyaWV2ZWQgd2l0
aAorICogI3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZV91c2FnZS4gQW4g
b3JpZ2luJ3MgcXVvdGEgY2FuIGJlCisgKiBhZGp1c3RlZCB3aXRoICN3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEuCisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9QUk9UT0NPTCwKKyAgICBQ
Uk9QX0hPU1QsCisgICAgUFJPUF9QT1JULAorICAgIFBST1BfREFUQUJBU0VfVVNBR0UsCisgICAg
UFJPUF9EQVRBQkFTRV9RVU9UQQorfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRTZWN1cml0eU9y
aWdpbiwgd2Via2l0X3NlY3VyaXR5X29yaWdpbiwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZv
aWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZ
X09SSUdJTihvYmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9
IHNlY3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgZ19mcmVlKHByaXYtPnByb3RvY29sKTsKKyAg
ICBnX2ZyZWUocHJpdi0+aG9zdCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gV0VCS0lUX1NFQ1VSSVRZ
X09SSUdJTihvYmplY3QpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9
IHNlY3VyaXR5T3JpZ2luLT5wcml2OworCisgICAgaWYgKCFwcml2LT5kaXNwb3NlZCkgeworICAg
ICAgICBwcml2LT5jb3JlT3JpZ2luLT5kZXJlZigpOworICAgICAgICBnX2hhc2hfdGFibGVfZGVz
dHJveShwcml2LT53ZWJEYXRhYmFzZXMpOworICAgICAgICBwcml2LT5kaXNwb3NlZCA9IHRydWU7
CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NlY3VyaXR5X29yaWdpbl9wYXJl
bnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4gPSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9EQVRBQkFTRV9RVU9U
QToKKyAgICAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfd2ViX2RhdGFiYXNlX3F1b3Rh
KHNlY3VyaXR5T3JpZ2luLCBnX3ZhbHVlX2dldF91aW50NjQodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IFdFQktJVF9TRUNV
UklUWV9PUklHSU4ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQ
Uk9QX1BST1RPQ09MOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sKHNlY3VyaXR5T3JpZ2luKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9IT1NUOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFs
dWUsIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qoc2VjdXJpdHlPcmlnaW4pKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vp
bnQodmFsdWUsIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQoc2VjdXJpdHlPcmlnaW4p
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RBVEFCQVNFX1VTQUdFOgorICAgICAg
ICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dl
Yl9kYXRhYmFzZV91c2FnZShzZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfREFUQUJBU0VfUVVPVEE6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1
ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3F1b3RhKHNlY3VyaXR5
T3JpZ2luKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK0dIYXNoVGFibGUqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5z
KCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogc2VjdXJpdHlPcmlnaW5zID0gZ19oYXNoX3Rh
YmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsLCBOVUxMLCBnX29iamVj
dF91bnJlZik7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luczsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0KFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xh
c3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvcGVydHk7CisKKyAg
ICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOnByb3RvY29sOgorICAgICAgKgor
ICAgICAgKiBUaGUgcHJvdG9jb2wgb2YgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICoKKyAg
ICAgICogU2luY2U6IDEuMS4xNAorICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfUFJPVE9DT0wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygicHJvdG9jb2wiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
UHJvdG9jb2wiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlRoZSBwcm90b2NvbCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktp
dFNlY3VyaXR5T3JpZ2luOmhvc3Q6CisgICAgICAqCisgICAgICAqIFRoZSBob3N0IG9mIHRoZSBz
ZWN1cml0eSBvcmlnaW4uCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTQKKyAgICAgICov
CisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9Q
X0hPU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygiaG9zdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJIb3N0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaG9zdCBvZiB0aGUgc2VjdXJpdHkg
b3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAgLyoqCisg
ICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOnBvcnQ6CisgICAgICAqCisgICAgICAqIFRoZSBw
b3J0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEu
MTQKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLCBQUk9QX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX3VpbnQoInBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlBvcnQiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgcG9ydCBvZiB0aGUgc2Vj
dXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR19NQVhVU0hPUlQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICAgIC8qKgorICAgICAgKiBXZWJLaXRTZWN1cml0eU9yaWdpbjp3ZWItZGF0YWJhc2Ut
dXNhZ2U6CisgICAgICAqCisgICAgICAqIFRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIHdlYiBk
YXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBieXRlcy4KKyAgICAgICoKKyAgICAg
ICogU2luY2U6IDEuMS4xNAorICAgICAgKi8KKyAgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX0RBVEFCQVNFX1VTQUdFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KCJ3ZWItZGF0YWJh
c2UtdXNhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIldlYiBEYXRhYmFzZSBVc2FnZSIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBjdW11bGF0aXZl
IHNpemUgb2YgYWxsIHdlYiBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbiIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAgLyoqCisg
ICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOndlYi1kYXRhYmFzZS1xdW90YToKKyAgICAgICoK
KyAgICAgICogVGhlIHdlYiBkYXRhYmFzZSBxb3V0YSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGlu
IGJ5dGVzLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjE0CisgICAgICAqLworICAgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfREFUQUJB
U0VfUVVPVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY191aW50NjQoIndlYi1kYXRhYmFzZS1xdW90YSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiV2ViIERhdGFiYXNlIFF1b3Rh
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiVGhlIHdlYiBkYXRhYmFzZSBxdW90YSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGlu
IGJ5dGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0U2Vj
dXJpdHlPcmlnaW5Qcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zZWN1cml0eV9v
cmlnaW5faW5pdChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCit7CisgICAg
V2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJ
Tl9HRVRfUFJJVkFURShzZWN1cml0eU9yaWdpbik7CisgICAgcHJpdi0+d2ViRGF0YWJhc2VzID0g
Z19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdf
b2JqZWN0X3VucmVmKTsKKyAgICBzZWN1cml0eU9yaWdpbi0+cHJpdiA9IHByaXY7Cit9CisKKy8q
KgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2w6CisgKiBAc2VjdXJpdHlf
b3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAqIFJldHVybnMgdGhlIHByb3Rv
Y29sIGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybnM6IHRoZSBwcm90b2Nv
bCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK0df
Q09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChX
ZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eU9yaWdpbiksIE5VTEwp
OworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlPcmln
aW4tPnByaXY7CisgICAgV2ViQ29yZTo6U3RyaW5nIHByb3RvY29sID0gIHByaXYtPmNvcmVPcmln
aW4tPnByb3RvY29sKCk7CisKKyAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gIiI7CisKKyAgICBpZiAoIXByaXYtPnByb3RvY29sKQorICAgICAgICBwcml2LT5wcm90
b2NvbCA9IGdfc3RyZHVwKHByb3RvY29sLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHBy
aXYtPnByb3RvY29sOworfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hv
c3Q6CisgKiBAc2VjdXJpdHlfb3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAq
IFJldHVybnMgdGhlIGhvc3RuYW1lIGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJl
dHVybnM6IHRoZSBob3N0bmFtZSBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNl
OiAxLjEuMTQKKyAqKi8KK0dfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9ob3N0KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5
T3JpZ2luKSwgTlVMTCk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYg
PSBzZWN1cml0eU9yaWdpbi0+cHJpdjsKKyAgICBXZWJDb3JlOjpTdHJpbmcgaG9zdCA9ICBwcml2
LT5jb3JlT3JpZ2luLT5ob3N0KCk7CisKKyAgICBpZiAoaG9zdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAiIjsKKworICAgIGlmICghcHJpdi0+aG9zdCkKKyAgICAgICAgcHJpdi0+aG9zdCA9
IGdfc3RyZHVwKGhvc3QudXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gcHJpdi0+aG9zdDsK
K30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0OgorICogQHNlY3Vy
aXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBw
b3J0IGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybnM6IHRoZSBwb3J0IGZv
ciB0aGUgc2VjdXJpdHkgb3JpZ2luCisgKgorICogU2luY2U6IDEuMS4xNAorICoqLworZ3VpbnQg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VS
SVRZX09SSUdJTihzZWN1cml0eU9yaWdpbiksIDApOworCisgICAgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5T3JpZ2luKTsKKyAgICByZXR1cm4gY29y
ZU9yaWdpbi0+cG9ydCgpOworfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0
X3dlYl9kYXRhYmFzZV91c2FnZToKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dlYktpdFNlY3Vy
aXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBXZWIg
RGF0YWJhc2UgZGF0YWJhc2UncyBpbiB0aGUgb3JpZ2luCisgKiBpbiBieXRlcy4KKyAqCisgKiBS
ZXR1cm5zOiB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCBkYXRhYmFzZXMgCisgKgorICogU2lu
Y2U6IDEuMS4xNAorICoqLworZ3VpbnQ2NCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJf
ZGF0YWJhc2VfdXNhZ2UoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJp
dHlPcmlnaW4pLCAwKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlPcmlnaW4pOworICAgIHJldHVy
biBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS51c2FnZUZvck9yaWdpbihjb3Jl
T3JpZ2luKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2VfcXVvdGE6CisgKiBAc2VjdXJpdHlf
b3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAqIFJldHVybnMgdGhlIHF1b3Rh
IGZvciBXZWIgRGF0YWJhc2Ugc3RvcmFnZSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luCisgKiBpbiBi
eXRlcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgV2ViIERhdGFiYXNlIHF1b3RhCisgKgorICogU2lu
Y2U6IDEuMS4xNAorICoqLworZ3VpbnQ2NCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJf
ZGF0YWJhc2VfcXVvdGEoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJp
dHlPcmlnaW4pLCAwKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJpdHlPcmlnaW4pOworICAgIHJldHVy
biBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihjb3Jl
T3JpZ2luKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGE6CisgKiBAc2VjdXJpdHlf
b3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICogQHF1b3RhOiBhIG5ldyBXZWIgRGF0
YWJhc2UgcXVvdGEgaW4gYnl0ZXMKKyAqCisgKiBBZGp1c3QgdGhlIHF1b3RhIGZvciBXZWIgRGF0
YWJhc2Ugc3RvcmFnZSBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luCisgKgorICogU2luY2U6IDEuMS4x
NAorICoqLwordm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVv
dGEoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBndWludDY0IHF1b3RhKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0
eU9yaWdpbikpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eU9yaWdpbik7CisgICAgV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEoY29yZU9yaWdpbiwgcXVvdGEpOwor
I2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfYWxsX3dlYl9k
YXRhYmFzZXM6CisgKiBAc2VjdXJpdHlfb3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgor
ICoKKyAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBXZWIgRGF0YWJhc2VzIGluIHRoZSBzZWN1cml0
eSBvcmlnaW4uCisgKgorICogUmV0dXJuczogYSAjR2xpc3Qgb2YgZGF0YWJhc2VzIGluIHRoZSBz
ZWN1cml0eSBvcmlnaW4uCisgKgorICogU2luY2U6IDEuMS4xNAorICoqLworR0xpc3QqIHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X2FsbF93ZWJfZGF0YWJhc2VzKFdlYktpdFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5T3JpZ2luKSwgTlVMTCk7CisgICAgR0xpc3QqIGRh
dGFiYXNlcyA9IE5VTEw7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5T3JpZ2luKTsKKyAgICBWZWN0
b3I8V2ViQ29yZTo6U3RyaW5nPiBkYXRhYmFzZU5hbWVzOworCisgICAgaWYgKCFXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZU5hbWVzRm9yT3JpZ2luKGNvcmVPcmln
aW4sIGRhdGFiYXNlTmFtZXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkYXRhYmFzZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdl
YktpdFdlYkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dl
Yl9kYXRhYmFzZShzZWN1cml0eU9yaWdpbiwgZGF0YWJhc2VOYW1lc1tpXS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgZGF0YWJhc2VzID0gZ19saXN0X2FwcGVuZChkYXRhYmFzZXMsIGRhdGFiYXNl
KTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBkYXRhYmFzZXM7Cit9CisKK1dlYktpdFNl
Y3VyaXR5T3JpZ2luKiBXZWJLaXQ6OmtpdChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9y
aWdpbikKK3sKKyAgICBBU1NFUlQoY29yZU9yaWdpbik7CisKKyAgICBHSGFzaFRhYmxlKiB0YWJs
ZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCk7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiA9IChXZWJLaXRTZWN1cml0eU9yaWdpbiopIGdfaGFzaF90YWJsZV9sb29rdXAodGFi
bGUsIGNvcmVPcmlnaW4pOworCisgICAgaWYgKCFvcmlnaW4pIHsKKyAgICAgICAgb3JpZ2luID0g
V0VCS0lUX1NFQ1VSSVRZX09SSUdJTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfU0VDVVJJVFlf
T1JJR0lOLCBOVUxMKSk7CisgICAgICAgIG9yaWdpbi0+cHJpdi0+Y29yZU9yaWdpbiA9IGNvcmVP
cmlnaW47CisgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQod2Via2l0X3NlY3VyaXR5X29yaWdp
bnMoKSwgY29yZU9yaWdpbiwgb3JpZ2luKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3JpZ2luOwor
fQorCisKK1dlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBXZWJLaXQ6OmNvcmUoV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQoreworICAgIEFTU0VSVChzZWN1cml0eU9yaWdpbik7
CisKKyAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPnByaXYtPmNvcmVPcmlnaW4uZ2V0KCk7Cit9
CisKK1dlYktpdFdlYkRhdGFiYXNlKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0
YWJhc2UoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBnY2hhciog
ZGF0YWJhc2VOYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNV
UklUWV9PUklHSU4oc2VjdXJpdHlPcmlnaW4pLCBOVUxMKTsKKworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luUHJpdmF0ZSogcHJpdiA9IHNlY3VyaXR5T3JpZ2luLT5wcml2OworICAgIEdIYXNoVGFi
bGUqIGRhdGFiYXNlSGFzaCA9IHByaXYtPndlYkRhdGFiYXNlczsKKyAgICBXZWJLaXRXZWJEYXRh
YmFzZSogZGF0YWJhc2UgPSAoV2ViS2l0V2ViRGF0YWJhc2UqKSBnX2hhc2hfdGFibGVfbG9va3Vw
KGRhdGFiYXNlSGFzaCwgZGF0YWJhc2VOYW1lKTsKKworICAgIGlmICghZGF0YWJhc2UpIHsKKyAg
ICAgICAgZGF0YWJhc2UgPSAgV0VCS0lUX1dFQl9EQVRBQkFTRShnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX0RBVEFCQVNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInNlY3VyaXR5LW9yaWdpbiIsIHNlY3VyaXR5T3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBkYXRhYmFzZU5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOworICAgICAgICBnX2hhc2hfdGFibGVf
aW5zZXJ0KGRhdGFiYXNlSGFzaCwgZ19zdHJkdXAoZGF0YWJhc2VOYW1lKSwgZGF0YWJhc2UpOwor
ICAgIH0KKworICAgIHJldHVybiBkYXRhYmFzZTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHNlY3VyaXR5b3JpZ2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVm
YzdlYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5
b3JpZ2luLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0
aW4gUm9iaW5zb24sIEphbiBNaWNoYWVsIEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TRUNVUklU
WV9PUklHSU5fSAorI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0gKKworI2luY2x1ZGUg
IndlYmtpdHNlY3VyaXR5b3JpZ2luLmgiCisjaW5jbHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIK
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiAg
ICAgICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfU0VDVVJJVFlfT1JJR0lOKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIFdlYktpdFNlY3Vy
aXR5T3JpZ2luKSkKKyNkZWZpbmUgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9DTEFTUyhrbGFzcykg
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfU0VDVVJJ
VFlfT1JJR0lOLCBXZWJLaXRTZWN1cml0eU9yaWdpbkNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1NFQ1VSSVRZX09SSUdJTihvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1NFQ1VSSVRZX09SSUdJTl9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOKSkKKyNkZWZpbmUgV0VCS0lUX1NF
Q1VSSVRZX09SSUdJTl9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOLCBXZWJLaXRTZWN1cml0eU9yaWdp
bkNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZSBX
ZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmln
aW4geworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiov
CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9X
ZWJLaXRTZWN1cml0eU9yaWdpbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkNCkgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgR19DT05T
VF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbCAgICAg
ICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbik7CisKK1dFQktJVF9B
UEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0
ICAgICAgICAgICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbik7CisK
K1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQgICAgICAg
ICAgICAgICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKTsKKworV0VCS0lU
X0FQSSBndWludDY0Cit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2VfdXNh
Z2UgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbik7CisKK1dFQktJVF9BUEkg
Z3VpbnQ2NAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3F1b3RhIChX
ZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pOworCitXRUJLSVRfQVBJIHZvaWQg
Cit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEgKFdlYktpdFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgZ3VpbnQ2NCBxdW90YSk7CisKK1dFQktJVF9B
UEkgR0xpc3QgKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfYWxsX3dlYl9kYXRhYmFzZXMg
IChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogX19XRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0hfXyAqLwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjg1YmNhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJkYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw1MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgTWFydGluIFJvYmluc29uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR3
ZWJkYXRhYmFzZS5oIgorCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSAi
Q1N0cmluZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlVHJhY2tlci5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKworLyoqCisgKiBT
RUNUSU9OOndlYmtpdHdlYmRhdGFiYXNlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgV2ViS2l0
IHdlYiBhcHBsaWNhdGlvbiBkYXRhYmFzZQorICoKKyAqICNXZWJLaXRXZWJEYXRhYmFzZSBpcyBh
IHJlcHJlc2VudGF0aW9uIG9mIGEgV2ViIERhdGFiYXNlIGRhdGFiYXNlLiBUaGUKKyAqIHByb3Bv
c2VkIFdlYiBEYXRhYmFzZSBzdGFuZGFyZCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFNRTCBkYXRh
YmFzZXMgdGhhdCB3ZWIKKyAqIHNpdGVzIGNhbiBjcmVhdGUgYW5kIGFjY2VzcyBvbiBhIGxvY2Fs
IGNvbXB1dGVyIHRocm91Z2ggSmF2YVNjcmlwdC4KKyAqCisgKiBUbyBnZXQgYWNjZXNzIHRvIGFs
bCBkYXRhYmFzZXMgZGVmaW5lZCBieSBhIHNlY3VyaXR5IG9yaWdpbiwgdXNlCisgKiAjd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfZGF0YWJhc2VzLiBFYWNoIGRhdGFiYXNlIGhhcyBhIGNhbm9u
aWNhbAorICogbmFtZSwgYXMgd2VsbCBhcyBhIHVzZXItZnJpZW5kbHkgZGlzcGxheSBuYW1lLgor
ICogCisgKiBXZWJLaXQgdXNlcyBTUUxpdGUgdG8gY3JlYXRlIGFuZCBhY2Nlc3MgdGhlIGxvY2Fs
IFNRTCBkYXRhYmFzZXMuIFRoZSBsb2NhdGlvbgorICogb2YgYSAjV2ViS2l0V2ViRGF0YWJhc2Ug
Y2FuIGJlIGFjY2Vzc2VkIHd0aCAjd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZmlsZW5hbWUuCisg
KiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgbG9jYXRpb24gb2YgYWxsIGRhdGFiYXNlcyB3aXRoCisg
KiAjd2Via2l0X3NldF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aC4KKyAqIAorICogRm9yIGVhY2gg
ZGF0YWJhc2UgdGhlIHdlYiBzaXRlIGNhbiBkZWZpbmUgYW4gZXN0aW1hdGVkIHNpemUgd2hpY2gg
Y2FuIGJlCisgKiBhY2Nlc3NlZCB3aXRoICN3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3Rl
ZF9zaXplLiBUaGUgY3VycmVudCBzaXplIG9mIHRoZQorICogZGF0YWJhc2UgaW4gYnl0ZXMgaXMg
cmV0dXJuZWQgYnkgI3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUuCisgKiAKKyAqIEZvciBt
b3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIHRoZSBXZWIgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBw
cm9wb3NhbCBhdAorICogaHR0cDovL2Rldi53My5vcmcvaHRtbDUvd2ViZGF0YWJhc2UKKyAqLwor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQ
Uk9QX1NFQ1VSSVRZX09SSUdJTiwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9ESVNQTEFZX05B
TUUsCisgICAgUFJPUF9FWFBFQ1RFRF9TSVpFLAorICAgIFBST1BfU0laRSwKKyAgICBQUk9QX1BB
VEgKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViRGF0YWJhc2UsIHdlYmtpdF93ZWJfZGF0
YWJhc2UsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRl
IHsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luOworICAgIGdjaGFyKiBuYW1lOwor
ICAgIGdjaGFyKiBkaXNwbGF5TmFtZTsKKyAgICBnY2hhciogZmlsZW5hbWU7Cit9OworCitzdGF0
aWMgZ2NoYXIqIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCA9IE5VTEw7CitzdGF0aWMg
Z3VpbnQ2NCB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YSA9IDUgKiAxMDI0ICogMTAyNDsK
KworI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJL
aXRXZWJEYXRhYmFzZVByaXZhdGUpKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNl
X3NldF9zZWN1cml0eV9vcmlnaW4oV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlLCBXZWJL
aXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlfb3JpZ2luKTsKKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9kYXRhYmFzZV9zZXRfbmFtZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UsIGNv
bnN0IGdjaGFyKiBuYW1lKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFi
YXNlID0gV0VCS0lUX1dFQl9EQVRBQkFTRShvYmplY3QpOworICAgIFdlYktpdFdlYkRhdGFiYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2OworCisgICAgZ19mcmVlKHByaXYtPm5h
bWUpOworICAgIGdfZnJlZShwcml2LT5kaXNwbGF5TmFtZSk7CisgICAgZ19mcmVlKHByaXYtPmZp
bGVuYW1lKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfZGF0YWJhc2VfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9k
YXRhYmFzZV9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJEYXRhYmFz
ZSogd2ViRGF0YWJhc2UgPSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9iamVjdCk7CisgICAgV2ViS2l0
V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CisKKyAgICBpZiAo
cHJpdi0+b3JpZ2luKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm9yaWdpbik7Cisg
ICAgICAgIHByaXYtPm9yaWdpbiA9IE5VTEw7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X3dlYl9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UgPSBXRUJLSVRfV0VCX0RB
VEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9T
RUNVUklUWV9PUklHSU46CisgICAgICAgIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3NlY3VyaXR5
X29yaWdpbih3ZWJEYXRhYmFzZSwgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihnX3ZhbHVlX2dldF9v
YmplY3QodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAg
ICAgICB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKHdlYkRhdGFiYXNlLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRh
YmFzZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJE
YXRhYmFzZSA9IFdFQktJVF9XRUJfREFUQUJBU0Uob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJEYXRh
YmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKworICAgIHN3aXRjaCAocHJv
cElkKSB7CisgICAgY2FzZSBQUk9QX1NFQ1VSSVRZX09SSUdJTjoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCBwcml2LT5vcmlnaW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vi
X2RhdGFiYXNlX2dldF9uYW1lKHdlYkRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9ESVNQTEFZX05BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwg
d2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZGlzcGxheV9uYW1lKHdlYkRhdGFiYXNlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FWFBFQ1RFRF9TSVpFOgorICAgICAgICBnX3ZhbHVl
X3NldF91aW50NjQodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2V4cGVjdGVkX3NpemUo
d2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2l6
ZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFUSDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9m
aWxlbmFtZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViRGF0YWJhc2VDbGFzcyoga2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZmluYWxpemU7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfd2ViX2RhdGFiYXNlX3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF93ZWJf
ZGF0YWJhc2VfZ2V0X3Byb3BlcnR5OworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRXZWJEYXRh
YmFzZTpzZWN1cml0eS1vcmlnaW46CisgICAgICAqCisgICAgICAqIFRoZSBzZWN1cml0eSBvcmln
aW4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjE0CisgICAg
ICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywg
UFJPUF9TRUNVUklUWV9PUklHSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgic2VjdXJpdHktb3JpZ2luIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlY3VyaXR5IE9y
aWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiVGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJhc2UiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRF
IHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0
V2ViRGF0YWJhc2U6bmFtZToKKyAgICAgICoKKyAgICAgICogVGhlIG5hbWUgb2YgdGhlIFdlYiBE
YXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xNAorICAgICAg
Ki8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBS
T1BfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKCJuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIk5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBuYW1lIG9mIHRoZSBXZWIgRGF0
YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklU
RSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktp
dFdlYkRhdGFiYXNlOmRpc3BsYXktbmFtZToKKyAgICAgICoKKyAgICAgICogVGhlIGRpc3BsYXkg
bmFtZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlLgorICAgICAgKgorICAgICAgKiBTaW5j
ZTogMS4xLjE0CisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KGdvYmplY3RDbGFzcywgUFJPUF9ESVNQTEFZX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZGlzcGxheS1uYW1lIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRp
c3BsYXkgTmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgV2ViIFN0b3JhZ2UgZGF0
YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgICAvKioKKyAg
ICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpleHBlY3RlZC1zaXplOgorICAgICAqCisgICAgICogVGhl
IGV4cGVjdGVkIHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5dGVzIGFzIGRlZmluZWQgYnkgdGhl
IHdlYiBhdXRob3IuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjE0CisgICAgICovCisgICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX0VYUEVD
VEVEX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3VpbnQ2NCgiZXhwZWN0ZWQtc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJFeHBlY3RlZCBTaXplIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
ZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJ
TlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJEYXRhYmFzZTpzaXplOgorICAgICAqCisgICAgICogVGhlIGN1cnJlbnQgc2l6ZSBvZiB0
aGUgZGF0YWJhc2UgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4xLjE0CisgICAg
ICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQ
Uk9QX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3VpbnQ2NCgic2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJTaXplIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgY3VycmVudCBzaXplIG9mIHRo
ZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisgICAgIC8qKgorICAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpmaWxl
bmFtZToKKyAgICAgICoKKyAgICAgICogVGhlIGFic29sdXRlIGZpbGVuYW1lIG9mIHRoZSBXZWIg
RGF0YWJhc2UgZGF0YWJhc2UuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTQKKyAgICAg
ICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQ
Uk9QX1BBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygiZmlsZW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiRmlsZW5hbWUiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBhYnNvbHV0ZSBm
aWxlbmFtZSBvZiB0aGUgV2ViIFN0b3JhZ2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6
ZW9mKFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2RhdGFiYXNlX2luaXQoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlKQoreworICAg
IHdlYkRhdGFiYXNlLT5wcml2ID0gV0VCS0lUX1dFQl9EQVRBQkFTRV9HRVRfUFJJVkFURSh3ZWJE
YXRhYmFzZSk7Cit9CisKKy8vIEludGVybmFsIHVzZSBvbmx5CitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2RhdGFiYXNlX3NldF9zZWN1cml0eV9vcmlnaW4oV2ViS2l0V2ViRGF0YWJhc2UgKndlYkRh
dGFiYXNlLCBXZWJLaXRTZWN1cml0eU9yaWdpbiAqc2VjdXJpdHlPcmlnaW4pCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYkRhdGFiYXNlKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5T3JpZ2lu
KSk7CisKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+
cHJpdjsKKworICAgIGlmIChwcml2LT5vcmlnaW4pCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHBy
aXYtPm9yaWdpbik7CisKKyAgICBnX29iamVjdF9yZWYoc2VjdXJpdHlPcmlnaW4pOworICAgIHBy
aXYtPm9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X2RhdGFiYXNlX3NldF9uYW1lKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSwgY29uc3Qg
Z2NoYXIqIG5hbWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFC
QVNFKHdlYkRhdGFiYXNlKSk7CisKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYg
PSB3ZWJEYXRhYmFzZS0+cHJpdjsKKyAgICBnX2ZyZWUocHJpdi0+bmFtZSk7CisgICAgcHJpdi0+
bmFtZSA9IGdfc3RyZHVwKG5hbWUpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X3NlY3VyaXR5X29yaWdpbjoKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFi
YXNlCisgKgorICogUmV0dXJucyB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIHRoZSAjV2ViS2l0V2Vi
RGF0YWJhc2UuCisgKgorICogUmV0dXJuczogdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgZGF0
YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjE0CisgKiovCitXZWJLaXRTZWN1cml0eU9yaWdpbiog
d2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2VjdXJpdHlfb3JpZ2luKFdlYktpdFdlYkRhdGFiYXNl
KiB3ZWJEYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VC
X0RBVEFCQVNFKHdlYkRhdGFiYXNlKSwgTlVMTCk7CisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2
YXRlKiBwcml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CisKKyAgICByZXR1cm4gcHJpdi0+b3JpZ2lu
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWU6CisgKiBAd2ViX2Rh
dGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGNhbm9uaWNh
bCBuYW1lIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisgKgorICogUmV0dXJuczogdGhlIG5h
bWUgb2YgdGhlIGRhdGFiYXNlCisgKgorICogU2luY2U6IDEuMS4xNAorICoqLworR19DT05TVF9S
RVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUoV2ViS2l0V2ViRGF0YWJh
c2UqIHdlYkRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfREFUQUJBU0Uod2ViRGF0YWJhc2UpLCBOVUxMKTsKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVBy
aXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKworICAgIHJldHVybiBwcml2LT5uYW1l
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZToKKyAq
IEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUg
bmFtZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGFzIHNlZW4gYnkgdGhlIHVzZXIuCisgKgor
ICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGFzIHNlZW4gYnkgdGhlIHVzZXIu
CisgKgorICogU2luY2U6IDEuMS4xNAorICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0
YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFT
RSh3ZWJEYXRhYmFzZSksIE5VTEwpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktp
dFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2OworICAgIFdlYkNv
cmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFtZSwgY29yZShwcml2LT5v
cmlnaW4pKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgZGlzcGxheU5hbWUgPSAgZGV0YWlscy5kaXNw
bGF5TmFtZSgpOworCisgICAgaWYgKGRpc3BsYXlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuICIiOworCisgICAgZ19mcmVlKHByaXYtPmRpc3BsYXlOYW1lKTsKKyAgICBwcml2LT5kaXNw
bGF5TmFtZSA9IGdfc3RyZHVwKGRpc3BsYXlOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVy
biBwcml2LT5kaXNwbGF5TmFtZTsKKyNlbHNlCisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZToKKyAqIEB3ZWJf
ZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgZXhwZWN0
ZWQgc2l6ZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGluIGJ5dGVzIGFzIGRlZmluZWQgYnkg
dGhlCisgKiB3ZWIgYXV0aG9yLiBUaGUgV2ViIERhdGFiYXNlIHN0YW5kYXJkIGFsbG93cyB3ZWIg
YXV0aG9ycyB0byBzcGVjaWZ5IGFuIGV4cGVjdGVkCisgKiBzaXplIG9mIHRoZSBkYXRhYmFzZSB0
byBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlLgorICoKKyAqIFJldHVybnM6IHRoZSBleHBl
Y3RlZCBzaXplIG9mIHRoZSBkYXRhYmFzZSBpbiBieXRlcworICoKKyAqIFNpbmNlOiAxLjEuMTQK
KyAqKi8KK2d1aW50NjQgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZShXZWJL
aXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJEYXRhYmFzZSksIDApOworCisjaWYgRU5BQkxFKERB
VEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNl
LT5wcml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+
bmFtZSwgY29yZShwcml2LT5vcmlnaW4pKTsKKyAgICByZXR1cm4gZGV0YWlscy5leHBlY3RlZFVz
YWdlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRh
dGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlICNXZWJLaXRXZWJE
YXRhYmFzZSBzcGFjZSBvbiBkaXNrIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnM6IHRoZSBhY3R1
YWwgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMKKyAqCisgKiBTaW5jZTogMS4xLjE0Cisg
KiovCitndWludDY0IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUoV2ViS2l0V2ViRGF0YWJh
c2UqIHdlYkRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfREFUQUJBU0Uod2ViRGF0YWJhc2UpLCAwKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAg
ICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKyAg
ICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9IFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKHByaXYtPm5hbWUsIGNvcmUo
cHJpdi0+b3JpZ2luKSk7CisgICAgcmV0dXJuIGRldGFpbHMuY3VycmVudFVzYWdlKCk7CisjZWxz
ZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFz
ZV9nZXRfZmlsZW5hbWU6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQor
ICoKKyAqIFJldHVybnMgdGhlIGFic29sdXRlIGZpbGVuYW1lIHRvIHRoZSAjV2ViS2l0V2ViRGF0
YWJhc2UgZmlsZSBvbiBkaXNrLgorICoKKyAqIFJldHVybnM6IHRoZSBhYnNvbHV0ZSBmaWxlbmFt
ZSBvZiB0aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjE0CisgKiovCitHX0NPTlNUX1JF
VFVSTiBnY2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZmlsZW5hbWUoV2ViS2l0V2ViRGF0
YWJhc2UqIHdlYkRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfREFUQUJBU0Uod2ViRGF0YWJhc2UpLCBOVUxMKTsKKworI2lmIEVOQUJMRShEQVRBQkFT
RSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJp
djsKKyAgICBXZWJDb3JlOjpTdHJpbmcgY29yZU5hbWUgPSBXZWJDb3JlOjpTdHJpbmc6OmZyb21V
VEY4KHByaXYtPm5hbWUpOworICAgIFdlYkNvcmU6OlN0cmluZyBjb3JlUGF0aCA9IFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2UoY29yZShwcml2
LT5vcmlnaW4pLCBjb3JlTmFtZSk7CisKKyAgICBpZiAoY29yZVBhdGguaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4iIjsKKworICAgIGdfZnJlZShwcml2LT5maWxlbmFtZSk7CisgICAgcHJpdi0+
ZmlsZW5hbWUgPSBnX3N0cmR1cChjb3JlUGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4g
cHJpdi0+ZmlsZW5hbWU7CisKKyNlbHNlCisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKKy8q
KgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9yZW1vdmU6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNX
ZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJlbW92ZXMgdGhlICNXZWJLaXRXZWJEYXRhYmFzZSBm
cm9tIGl0cyBzZWN1cml0eSBvcmlnaW4gYW5kIGRlc3Ryb3lzIGFsbCBkYXRhCisgKiBzdG9yZWQg
aW4gdGhlIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK3ZvaWQgd2Via2l0
X3dlYl9kYXRhYmFzZV9yZW1vdmUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJEYXRhYmFzZSkp
OworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSog
cHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmRlbGV0ZURhdGFiYXNlKGNvcmUocHJpdi0+b3JpZ2luKSwgcHJpdi0+bmFtZSk7
CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzOgor
ICoKKyAqIFJlbW92ZXMgYWxsIHdlYiBkYXRhYmFzZXMgZnJvbSB0aGUgY3VycmVudCBkYXRhYmFz
ZSBkaXJlY3RvcnkgcGF0aC4KKyAqCisgKiBTaW5jZTogMS4xLjE0CisgKiovCit2b2lkIHdlYmtp
dF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFzZXMoKQoreworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAg
ICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVBbGxEYXRhYmFzZXMo
KTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9nZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9y
eV9wYXRoOgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aCB0byB0aGUgZGlyZWN0b3J5
IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAqIERhdGFiYXNlIGRhdGFiYXNlcy4gQnkgZGVmYXVs
dCB0aGlzIHBhdGggd2lsbCBiZSBpbiB0aGUgdXNlciBkYXRhCisgKiBkaXJlY3RvcnkuCisgKgor
ICogUmV0dXJuczogdGhlIGN1cnJlbnQgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgKKyAqCisgKiBT
aW5jZTogMS4xLjE0CisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X2dldF93ZWJf
ZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoKQoreworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBX
ZWJDb3JlOjpTdHJpbmcgcGF0aCA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmRhdGFiYXNlRGlyZWN0b3J5UGF0aCgpOworCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gIiI7CisKKyAgICBnX2ZyZWUod2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9w
YXRoKTsKKyAgICB3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGggPSBnX3N0cmR1cChwYXRo
LnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiB3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5X3Bh
dGg7CisjZWxzZQorICAgIHJldHVybiAiIjsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9z
ZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoOgorICogQHBhdGg6IHRoZSBuZXcgZGF0YWJh
c2UgZGlyZWN0b3J5IHBhdGgKKyAqCisgKiBTZXRzIHRoZSBjdXJyZW50IHBhdGggdG8gdGhlIGRp
cmVjdG9yeSBXZWJLaXQgd2lsbCB3cml0ZSBXZWIgCisgKiBEYXRhYmFzZSBkYXRhYmFzZXMuIAor
ICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK3ZvaWQgd2Via2l0X3NldF93ZWJfZGF0YWJhc2Vf
ZGlyZWN0b3J5X3BhdGgoY29uc3QgZ2NoYXIqIHBhdGgpCit7CisjaWYgRU5BQkxFKERBVEFCQVNF
KQorICAgIFdlYkNvcmU6OlN0cmluZyBjb3JlUGF0aCA9IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVU
RjgocGF0aCk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0
YWJhc2VEaXJlY3RvcnlQYXRoKGNvcmVQYXRoKTsKKworICAgIGdfZnJlZSh3ZWJraXRfZGF0YWJh
c2VfZGlyZWN0b3J5X3BhdGgpOworICAgIHdlYmtpdF9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCA9
IGdfc3RyZHVwKGNvcmVQYXRoLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCit9CisKKy8qKgorICog
d2Via2l0X2dldF9kZWZhdWx0X3dlYl9kYXRhYmFzZV9xdW90YToKKyAqCisgKiBSZXR1cm5zIHRo
ZSBkZWZhdWx0IHF1b3RhIGZvciBXZWIgRGF0YWJhc2UgZGF0YWJhc2VzLiBCeSBkZWZhdWx0Cisg
KiB0aGlzIHZhbHVlIGlzIDVNQi4KKyAKKyAqIFJldHVybnM6IHRoZSBjdXJyZW50IGRlZmF1bHQg
ZGF0YWJhc2UgcXVvdGEgaW4gYnl0ZXMKKyAqCisgKiBTaW5jZTogMS4xLjE0CisgKiovCitndWlu
dDY0IHdlYmtpdF9nZXRfZGVmYXVsdF93ZWJfZGF0YWJhc2VfcXVvdGEoKQoreworICAgIHJldHVy
biB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YTsKK30KKworLyoqCisgKiB3ZWJraXRfc2V0
X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhOgorICogQGRlZmF1bHRfcXVvdGE6IHRoZSBuZXcg
ZGVmYXVsdCBkYXRhYmFzZSBxdW90YQorICoKKyAqIFNldHMgdGhlIGN1cnJlbnQgcGF0aCB0byB0
aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAqIERhdGFiYXNlIGRhdGFiYXNl
cy4gCisgKgorICogU2luY2U6IDEuMS4xNAorICoqLwordm9pZCB3ZWJraXRfc2V0X2RlZmF1bHRf
d2ViX2RhdGFiYXNlX3F1b3RhKGd1aW50NjQgZGVmYXVsdFF1b3RhKQoreworICAgIHdlYmtpdF9k
ZWZhdWx0X2RhdGFiYXNlX3F1b3RhID0gZGVmYXVsdFF1b3RhOworfQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3
MWRiYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFi
YXNlLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4g
Um9iaW5zb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0RBVEFCQVNFX0gKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9EQVRBQkFTRV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX1dFQl9EQVRBQkFTRSAgICAgICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9iaikgICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsIFdl
YktpdFdlYkRhdGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9DTEFTUyhrbGFz
cykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VC
X0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dF
Ql9EQVRBQkFTRShvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9EQVRB
QkFTRV9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfV0VCX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9HRVRf
Q0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZ
UEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGU7CisK
K3N0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2UgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNl
OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFzZUNsYXNzIHsKKyAgICBHT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lv
biAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNCkgKHZvaWQpOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICh2
b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0eU9yaWdpbiAqCit3ZWJraXRfd2ViX2Rh
dGFiYXNlX2dldF9zZWN1cml0eV9vcmlnaW4gKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFz
ZSk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfd2ViX2RhdGFi
YXNlX2dldF9uYW1lICAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSk7
CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfd2ViX2RhdGFiYXNl
X2dldF9kaXNwbGF5X25hbWUgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSk7CisK
K1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6
ZSAgIChXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UpOworCitXRUJLSVRfQVBJIGd1aW50
NjQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUgICAgICAgICAgICAoV2ViS2l0V2ViRGF0
YWJhc2UqIHdlYkRhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioK
K3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2ZpbGVuYW1lICAgICAgICAoV2ViS2l0V2ViRGF0YWJh
c2UqIHdlYkRhdGFiYXNlKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2RhdGFiYXNl
X3JlbW92ZSAgICAgICAgICAgICAgKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSk7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcyAgICAgICAg
ICh2b2lkKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9nZXRf
d2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGggIChjb25zdCBnY2hhciogcGF0
aCk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2dldF9kZWZhdWx0X3dlYl9kYXRhYmFz
ZV9xdW90YSAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfc2V0X2RlZmF1bHRf
d2ViX2RhdGFiYXNlX3F1b3RhICAgKGd1aW50NjQgZGVmYXVsdFF1b3RhKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIF9fV0VCS0lUX1dFQl9EQVRBQkFTRV9IX18gKi8KZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCA3YzlhZDlhLi5jNGFmYzM4IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC0zNzcsNiArMzc3LDggQEAgV2ViS2l0V2ViRnJhbWUq
IHdlYmtpdF93ZWJfZnJhbWVfbmV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcHJpdi0+
Y29yZUZyYW1lID0gRnJhbWU6OmNyZWF0ZSh2aWV3UHJpdi0+Y29yZVBhZ2UsIDAsIGNsaWVudCku
Z2V0KCk7CiAgICAgcHJpdi0+Y29yZUZyYW1lLT5pbml0KCk7CiAKKyAgICBwcml2LT5vcmlnaW4g
PSBOVUxMOworCiAgICAgcmV0dXJuIGZyYW1lOwogfQogCkBAIC0xMDQ4LDMgKzEwNTAsMjcgQEAg
R3RrUG9saWN5VHlwZSB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9s
aWN5KFdlYktpdFdlYkZyYW1lKiBmcmEKIAogICAgIHJldHVybiBHVEtfUE9MSUNZX0FVVE9NQVRJ
QzsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW46Cisg
KiBAZnJhbWU6IGEgI1dlYktpdFdlYkZyYW1lCisgKgorICogUmV0dXJucyB0aGUgQGZyYW1lJ3Mg
c2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIHNlY3VyaXR5IG9yaWdp
biBvZiBAZnJhbWUKKyAqLworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3NlY3VyaXR5X29yaWdpbihXZWJLaXRXZWJGcmFtZSogZnJhbWUpCit7CisgICAgV2ViS2l0
V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnByaXY7CisgICAgaWYgKCFwcml2LT5jb3Jl
RnJhbWUgfHwgIXByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSB8fCAhcHJpdi0+Y29yZUZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKQorICAgICAgICByZXR1cm4gTlVMTDsKKwor
ICAgIGlmIChwcml2LT5vcmlnaW4gJiYgcHJpdi0+b3JpZ2luLT5wcml2LT5jb3JlT3JpZ2luLmdl
dCgpID09IHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkKKyAg
ICAgICAgcmV0dXJuIHByaXYtPm9yaWdpbjsKKworICAgIGlmIChwcml2LT5vcmlnaW4pCisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm9yaWdpbik7CisKKyAgICBwcml2LT5vcmlnaW4gPSBr
aXQocHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBy
ZXR1cm4gcHJpdi0+b3JpZ2luOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViZnJhbWUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmgKaW5kZXgg
N2FiMzA5Ny4uM2RmZjJjMiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZnJhbWUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oCkBAIC0xNTks
MTAgKzE1OSwxMyBAQCBXRUJLSVRfQVBJIEd0a1BvbGljeVR5cGUKIHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kgICAoV2ViS2l0V2ViRnJhbWUgICAgICAgICpm
cmFtZSk7CiAKIFdFQktJVF9BUEkgV2ViS2l0V2ViRGF0YVNvdXJjZSAqCi13ZWJraXRfd2ViX2Zy
YW1lX2dldF9kYXRhX3NvdXJjZSAgICAoV2ViS2l0V2ViRnJhbWUgICAgICAgKmZyYW1lKTsKK3dl
YmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlICAgICAgICAgICAgIChXZWJLaXRXZWJGcmFt
ZSAgICAgICAqZnJhbWUpOwogCiBXRUJLSVRfQVBJIFdlYktpdFdlYkRhdGFTb3VyY2UgKgotd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfcHJvdmlzaW9uYWxfZGF0YV9zb3VyY2UgKFdlYktpdFdlYkZyYW1l
ICpmcmFtZSk7Cit3ZWJraXRfd2ViX2ZyYW1lX2dldF9wcm92aXNpb25hbF9kYXRhX3NvdXJjZSAo
V2ViS2l0V2ViRnJhbWUgICAgICAgKmZyYW1lKTsKKworV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0
eU9yaWdpbioKK3dlYmtpdF93ZWJfZnJhbWVfZ2V0X3NlY3VyaXR5X29yaWdpbiAgICAgICAgIChX
ZWJLaXRXZWJGcmFtZSAgICAgICAqZnJhbWUpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDRjOGZjYTEuLmM3OTYzN2MgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xNDQsNiArMTQ0LDcgQEAgZW51bSB7CiAgICAgQ0xPU0Vf
V0VCX1ZJRVcsCiAgICAgVU5ETywKICAgICBSRURPLAorICAgIERBVEFCQVNFX1FVT1RBX0VYQ0VF
REVELAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xOTUyLDYgKzE5NTMsMjggQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJW
aWV3Q2xhc3MpCiAgICAgICAgICAgICBHVEtfVFlQRV9XSURHRVQsIDMsCiAgICAgICAgICAgICBH
X1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfSEFTSF9UQUJMRSk7CiAKKyAgICAv
KioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpkYXRhYmFzZS1xdW90YS1leGNlZWRlZAorICAgICAq
IEB3ZWJfdmlldzogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAgICog
QGZyYW1lOiB0aGUgcmVsZXZhbnQgZnJhbWUKKyAgICAgKiBAZGF0YWJhc2U6IHRoZSAjV2ViS2l0
V2ViRGF0YWJhc2Ugd2hpY2ggZXhjZWVkZWQgdGhlIHF1b3RhIG9mIGl0cyAjV2ViS2l0U2VjdXJp
dHlPcmlnaW4KKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0V2ViVmlldzo6ZGF0YWJhc2UtZXhj
ZWVkZWQtcXVvdGEgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3aGVuCisgICAgICogYSBXZWIgRGF0
YWJhc2UgZXhjZWVkcyB0aGUgcXVvdGEgb2YgaXRzIHNlY3VyaXR5IG9yaWdpbi4gVGhpcyBzaWdu
YWwKKyAgICAgKiBtYXkgYmUgdXNlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcXVvdGEg
YmVmb3JlIHRoZSBvcmlnaW5hdGluZworICAgICAqIG9wZXJhdGlvbiBmYWlscy4KKyAgICAgKgor
ICAgICAqIFNpbmNlOiAxLjEuMTQKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFs
c1tEQVRBQkFTRV9RVU9UQV9FWENFRURFRF0gPSBnX3NpZ25hbF9uZXcoImRhdGFiYXNlLXF1b3Rh
LWV4Y2VlZGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyks
CisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKSAoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05B
TF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAg
ICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNULAorICAgICAgICAgICAg
R19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNULCBHX1RZUEVfT0JKRUNU
KTsKKwogICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwog
ICAgICAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGNlYjI2ZDguLjIzNzBhNWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAor
MjAwOS0wOS0wMiAgTWFydGluIFJvYmluc29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
R3RrXSBFeHBvc2UgYSBkYXRhYmFzZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3ODk5CisKKyAgICAgICAgRXhwb3NlIGFuIEhUTUw1IGRhdGFi
YXNlIEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChzZXREZWZhdWx0c1RvQ29uc2lzdGVudFN0YXRlVmFsdWVz
Rm9yVGVzdGluZyk6CisgICAgICAgIChkYXRhYmFzZVF1b3RhRXhjZWVkZWQpOgorICAgICAgICAo
Y3JlYXRlV2ViVmlldyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1h
bmRFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50
VXNlclN0eWxlU2hlZXRMb2NhdGlvbik6CisKIDIwMDktMDktMDEgIFRvciBBcm5lIFZlc3Riw7gg
IDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5
IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9E
dW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggYWY0NTM1OS4uNmRkYzMyNCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0zNzUsNiAr
Mzc1LDEwIEBAIHN0YXRpYyB2b2lkIHNldERlZmF1bHRzVG9Db25zaXN0ZW50U3RhdGVWYWx1ZXNG
b3JUZXN0aW5nKCkKICNpZiBQTEFURk9STShYMTEpCiAgICAgd2Via2l0X3dlYl9zZXR0aW5nc19h
ZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh3ZWJWaWV3LCBURVNUX1BMVUdJTl9ESVIpOwogI2Vu
ZGlmCisKKyAgICBnY2hhciogZGF0YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0X3VzZXJfZGF0YV9kaXIoKSwgImd0a3dlYmtpdGRydCIsICJkYXRhYmFzZXMiLCBOVUxMKTsK
KyAgICB3ZWJraXRfc2V0X3dlYl9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aChkYXRhYmFzZURpcmVj
dG9yeSk7CisgICAgZ19mcmVlKGRhdGFiYXNlRGlyZWN0b3J5KTsKIH0KIAogc3RhdGljIHZvaWQg
cnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCkBAIC01OTcsNiArNjAxLDIzIEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Q2xvc2UoV2ViS2l0V2ViVmlldyogdmlldykKICAgICBy
ZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIHZvaWQgZGF0YWJhc2VRdW90YUV4Y2VlZGVkKFdlYktp
dFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgV2ViS2l0V2ViRGF0YWJhc2Ug
KmRhdGFiYXNlKQoreworICAgIEFTU0VSVCh2aWV3KTsKKyAgICBBU1NFUlQoZnJhbWUpOworICAg
IEFTU0VSVChkYXRhYmFzZSk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0g
d2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2VjdXJpdHlfb3JpZ2luKGRhdGFiYXNlKTsKKyAgICBp
ZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgeworICAg
ICAgICBwcmludGYoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFi
YXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp7JXMsICVzLCAlaX0gZGF0YWJhc2U6JXNcbiIsCisg
ICAgICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChvcmlnaW4pLAor
ICAgICAgICAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pLAorICAg
ICAgICAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pLAorICAgICAg
ICAgICAgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfbmFtZShkYXRhYmFzZSkpOworICAgIH0KKyAg
ICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCA1
ICogMTAyNCAqIDEwMjQpOworfQorCiAKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Q3Jl
YXRlKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRXZWJGcmFtZSopOwogCkBAIC02MjEsNiArNjQyLDcg
QEAgc3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZVdlYlZpZXcoKQogICAgICAgICAgICAgICAg
ICAgICAgInNpZ25hbDo6c3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCB3ZWJWaWV3U3RhdHVzQmFy
VGV4dENoYW5nZWQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpjcmVhdGUtd2Vi
LXZpZXciLCB3ZWJWaWV3Q3JlYXRlLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6
Y2xvc2Utd2ViLXZpZXciLCB3ZWJWaWV3Q2xvc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAi
c2lnbmFsOjpkYXRhYmFzZS1xdW90YS1leGNlZWRlZCIsIGRhdGFiYXNlUXVvdGFFeGNlZWRlZCwg
MCwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogCiAgICAgcmV0dXJuIHZpZXc7CmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xs
ZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250
cm9sbGVyR3RrLmNwcAppbmRleCA1ZGQ5NzVlLi4wOWU0ZTY0IDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5j
cHAKQEAgLTM2OCwxMiArMzY4LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFy
UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJBbGxEYXRhYmFzZXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICB3ZWJr
aXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKCk7CiB9CiAgCiB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsgICAg
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAoreworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4gPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW4obWFpbkZyYW1lKTsK
KyAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2lu
LCBxdW90YSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4
aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39037</attachid>
            <date>2009-09-03 21:53:26 -0700</date>
            <delta_ts>2009-09-03 22:18:54 -0700</delta_ts>
            <desc>Update patch rev5</desc>
            <filename>0001-Database-patch.patch</filename>
            <type>text/plain</type>
            <size>59906</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA2Mjk4YTg2YTVjNGU2ODRmYmM4NDM3MmJmNjcxNjkyMDM1YjMxYjQyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTUgQXVnIDIwMDkgMTU6Mjk6MjYgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBEYXRhYmFzZSBwYXRjaAoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogR05VbWFrZWZpbGUuYW0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIExheW91dFRlc3RzL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZCAgICAgICAgICAgICAgICAgICB8ICAgIDkgLQogV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY0ICsrKwogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwICAgICAgfCAgIDE0ICst
CiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDIgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICAgICAgICAg
fCAgICA2ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwICAgICAgICAgICAg
ICAgIHwgICAgNSArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oICAgICAgICAg
ICAgICAgICAgfCAgIDE5ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2lu
LmNwcCAgICAgICAgIHwgIDQyMyArKysrKysrKysrKysrKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oICAgICAgICAgICB8ICAgODAgKysrCiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAgICAgICAgICAgICB8ICA1MzMgKysrKysrKysrKysr
KysrKysrKysKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggICAgICAgICAg
ICAgIHwgICA5NiArKysrCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgICAg
ICAgICAgICAgICB8ICAgMjYgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCAg
ICAgICAgICAgICAgICAgfCAgICA3ICstCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcCAgICAgICAgICAgICAgICB8ICAgMjMgKwogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgIHwgICAyMiArCiAuLi4vRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCB8ICAgIDcgKy0KIDIwIGZpbGVzIGNoYW5n
ZWQsIDEzNTkgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKCmRp
ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMDE4N2VkMi4uODMwZTUwYSAx
MDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDA5LTA5LTAzICBNYXJ0aW4gUm9iaW5zb24gIDxtYXJ0aW4uamFtZXMucm9iaW5zb25AZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
dGtdIEV4cG9zZSBhIGRhdGFiYXNlIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4OTkKKworICAgICAgICBFeHBvc2UgYW4gSFRNTDUgZGF0YWJh
c2UgQVBJIGZvciBHVEsrLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMDktMDkt
MDIgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgWGFuIExvcGV6IGFuZCBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQgYS9H
TlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IDUzYTA0Y2QuLjQxODA2ZTQgMTAw
NjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMzEsNiAr
MzMxLDcgQEAgd2Via2l0Z3RrX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vic2V0dGluZ3MuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYndpbmRvd2ZlYXR1cmVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJk
YXRhYmFzZS5oIFwKIAkkKHRvcF9idWlsZGRpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVy
c2lvbi5oCiAKIHdlYmtpdGd0a19idWlsdF9zb3VyY2VzICs9IFwKQEAgLTM3Miw2ICszNzMsMTAg
QEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5h
dmlnYXRpb25hY3Rpb24uY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lk
ZWNpc2lvbi5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnJlc291cmNlLmNwcCBc
CisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuY3BwIFwKKwlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRz
ZWN1cml0eW9yaWdpbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3Jp
Z2luLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYndpbmRvd2ZlYXR1cmVzLmNwcCBcCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzRmMjczZS4uMTNhOWU4ZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA5LTAzICBNYXJ0aW4gUm9iaW5zb24gIDxtYXJ0aW4u
amFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtHdGtdIEV4cG9zZSBhIGRhdGFiYXNlIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4OTkKKworICAgICAgICBF
eHBvc2UgYW4gSFRNTDUgZGF0YWJhc2UgQVBJIGZvciBHVEsrLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1NraXBwZWQ6CisKIDIwMDktMDktMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkCmluZGV4IDg0N2Y0MTAuLmZiZDJkODggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCkBAIC0zOTM5LDEyICszOTM5LDYgQEAgc2VjdXJpdHkvYXV0b2NvbXBsZXRlLWNsZWFy
ZWQtb24tYmFjay5odG1sCiBzZWN1cml0eS9ibG9jay10ZXN0LW5vLXBvcnQuaHRtbAogc2VjdXJp
dHkvYmxvY2stdGVzdC5odG1sCiAKLSMgVGVzdHMgaW4gc3RvcmFnZS8gZGlyZWN0b3J5Ci0jICAg
VGVzdHMgZmFpbGluZwotc3RvcmFnZS9xdW90YS10cmFja2luZy5odG1sCi1zdG9yYWdlL2RvbXN0
b3JhZ2UvbG9jYWxzdG9yYWdlL3dpbmRvdy1vcGVuLmh0bWwKLXN0b3JhZ2UvZG9tc3RvcmFnZS9z
ZXNzaW9uc3RvcmFnZS93aW5kb3ctb3Blbi5odG1sCi0KICMgVGVzdHMgaW4gc3ZnLyBkaXJlY3Rv
cnkKICMgICBUZXN0cyBmYWlsaW5nCiBzdmcvY3VzdG9tL2VtYmVkZGVkLXN2Zy1kaXNhbGxvd2Vk
LWluLWRhc2hib2FyZC54bWwKQEAgLTU4NDAsOSArNTgzNCw2IEBAIGZhc3QvYmxvY2svbWFyZ2lu
LWNvbGxhcHNlL2Jsb2NrLWluc2lkZS1pbmxpbmUKICMgVGVzdHMgd2l0aCBidWdzIGF0dGFjaGVk
IDogRW5hYmxlIHRoZXNlIHRlc3RzIGFnYWluIG9uY2UgdGhlc2UgYnVncyBhcmUgZml4ZWQuCiAj
IC0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIFJFR1JFU1NJT046IFNlZSBCdWcgIzI3MTQ0IC0gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MTQ0Ci1zdG9yYWdlL2RhdGFi
YXNlLWxvY2stYWZ0ZXItcmVsb2FkLmh0bWwKLQogIyBTZWUgQnVnICMyNzYzNyAtIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzNwogZmFzdC9oaXN0b3J5L3NhdmVz
LXN0YXRlLWFmdGVyLWZyYWdtZW50LW5hdi5odG1sCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggZTI4OGQ5MS4uMzUyMTczMyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2NyBAQAorMjAwOS0wOS0wMyAgTWFydGluIFJvYmluc29uICA8bWFydGlu
LmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR3RrXSBFeHBvc2UgYSBkYXRhYmFzZSBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODk5CisKKyAgICAgICAg
RXhwb3NlIGFuIEhUTUw1IGRhdGFiYXNlIEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudDo6cHJpbnQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAgKiB3ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmNwcDoK
KyAgICAgICAgKHdlYmtpdF9pbml0KToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5o
OgorICAgICAgICAqIHdlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHA6IEFkZGVkLgorICAg
ICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdp
bl9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJv
cGVydHkpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbnMpOgorICAgICAgICAod2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5faW5pdCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90
b2NvbCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KToKKyAgICAg
ICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQpOgorICAgICAgICAod2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3VzYWdlKToKKyAgICAgICAgKHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZV9xdW90YSk6CisgICAgICAgICh3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEpOgorICAgICAgICAod2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfYWxsX3dlYl9kYXRhYmFzZXMpOgorICAgICAgICAoV2ViS2l0
OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHNlY3Vy
aXR5b3JpZ2luLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5j
cHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9maW5hbGl6ZSk6CisgICAg
ICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0X3dlYl9k
YXRhYmFzZV9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRf
cHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfaW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX2Rh
dGFiYXNlX3NldF9zZWN1cml0eV9vcmlnaW4pOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFz
ZV9zZXRfbmFtZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zZWN1cml0eV9v
cmlnaW4pOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfbmFtZSk6CisgICAgICAg
ICh3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9kaXNwbGF5X25hbWUpOgorICAgICAgICAod2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2Rh
dGFiYXNlX2dldF9zaXplKToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2ZpbGVu
YW1lKToKKyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfcmVtb3ZlKToKKyAgICAgICAgKHdl
YmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFzZXMpOgorICAgICAgICAod2Via2l0X2dldF93ZWJf
ZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgpOgorICAgICAgICAod2Via2l0X3NldF93ZWJfZGF0YWJh
c2VfZGlyZWN0b3J5X3BhdGgpOgorICAgICAgICAod2Via2l0X2dldF9kZWZhdWx0X3dlYl9kYXRh
YmFzZV9xdW90YSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmg6IEFkZGVk
LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX2ZyYW1lX25ldyk6CisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX2dldF9mb2N1c2VkX2Fj
Y2Vzc2libGVfZWxlbWVudCk6CisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9u
dGFsX3Njcm9sbGJhcl9wb2xpY3kpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5o
OgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KToKKwogMjAwOS0wOS0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IGVyaWNAd2Via2l0Lm9yZy4KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRleCA4YmYzYzcz
Li44ODU4ZGY1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCkBAIC00OTYsMTMgKzQ5NiwxNyBAQCB2b2lkIENocm9tZUNsaWVudDo6cHJpbnQoRnJh
bWUqIGZyYW1lKQogfQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotdm9pZCBDaHJvbWVDbGllbnQ6
OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYpCit2b2lk
IENocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUpCiB7Ci0gICAgLy8gU2V0IHRvIDVNIGZvciB0ZXN0aW5nCi0g
ICAgLy8gRklYTUU6IE1ha2UgdGhpcyBjb25maWd1cmFibGUKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAq
IDEwMjQ7CisgICAgZ3VpbnQ2NCBkZWZhdWx0UXVvdGEgPSB3ZWJraXRfZ2V0X2RlZmF1bHRfd2Vi
X2RhdGFiYXNlX3F1b3RhKCk7CiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVv
dGEoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7CisK
KyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUgPSBraXQoZnJhbWUpOworICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKHdlYkZyYW1lKTsKKworICAgIFdlYktp
dFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9v
cmlnaW4od2ViRnJhbWUpOworICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSA9IHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNlTmFt
ZS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImRh
dGFiYXNlLXF1b3RhLWV4Y2VlZGVkIiwgd2ViRnJhbWUsIHdlYkRhdGFiYXNlKTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdC5oCmluZGV4IDhkZTc1ZTAuLmQzOTA0ZDIgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBA
IC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9u
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0d2VicmVzb3VyY2UuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
d2ViZGF0YWJhc2UuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaD4K
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZW51bXR5cGVzLmg+CiAKICNlbmRpZiAvKiBfX1dFQktJ
VF9IX18gKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAppbmRleCBlYTkwMGEwLi40NDVkOWY3
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC03Nyw2ICs3NywxMiBAQCB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViUmVzb3VyY2VDbGFzcyBXZWJLaXRXZWJSZXNvdXJjZUNsYXNzOwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRhdGFTb3VyY2UgV2ViS2l0V2ViRGF0YVNvdXJjZTsK
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJEYXRhU291cmNlQ2xhc3MgV2ViS2l0V2ViRGF0YVNv
dXJjZUNsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2UgV2ViS2l0V2Vi
RGF0YWJhc2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2VDbGFzcyBXZWJLaXRX
ZWJEYXRhYmFzZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW4g
V2ViS2l0U2VjdXJpdHlPcmlnaW47Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmln
aW5DbGFzcyBXZWJLaXRTZWN1cml0eU9yaWdpbkNsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuY3BwIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAKaW5kZXggNGU0ODYxMy4uZGNhNTU1YyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAKKysrIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5jcHAKQEAgLTE2Miw5ICsxNjIsMTAgQEAgdm9p
ZCB3ZWJraXRfaW5pdCgpCiAgICAgV2ViQ29yZTo6cGFnZUNhY2hlKCktPnNldENhcGFjaXR5KDMp
OwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgcG9z
c2libGUgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGxv
Y2F0aW9uCiAgICAgZ2NoYXIqIGRhdGFiYXNlRGlyZWN0b3J5ID0gZ19idWlsZF9maWxlbmFtZShn
X2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiZGF0YWJhc2VzIiwgTlVMTCk7Ci0gICAg
V2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGRhdGFiYXNlRGlyZWN0b3J5KTsKKyAgICB3ZWJraXRfc2V0X3dlYl9kYXRhYmFzZV9kaXJl
Y3RvcnlfcGF0aChkYXRhYmFzZURpcmVjdG9yeSk7CisKKyAgICAvLyBGSVhNRTogSXQgc2hvdWxk
IGJlIHBvc3NpYmxlIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZh
dWx0IGFwcGNhY2hlIGxvY2F0aW9uCiAgICAgV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCkuc2V0Q2Fj
aGVEaXJlY3RvcnkoZGF0YWJhc2VEaXJlY3RvcnkpOwogICAgIGdfZnJlZShkYXRhYmFzZURpcmVj
dG9yeSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCBiZDJhMGI5Li4x
YWQ4MDJmIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKKysr
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC00MSw2ICs0MSw3IEBACiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRu
ZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5o
PgogCiAjaW5jbHVkZSAiQXJjaGl2ZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRM
aXN0LmgiCkBAIC01Niw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogI2luY2x1ZGUgPGF0ay9hdGsuaD4KICNp
bmNsdWRlIDxnbGliLmg+CkBAIC04Niw2ICs4OCw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBjb3JlKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1
ZXN0KTsKIAogICAgIFdlYkNvcmU6OkVkaXRpbmdCZWhhdmlvciBjb3JlKFdlYktpdEVkaXRpbmdC
ZWhhdmlvciB0eXBlKTsKKworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBraXQoV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4qKTsKKyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZShXZWJL
aXRTZWN1cml0eU9yaWdpbiopOwogfQogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xNDQsNiArMTQ5
LDE3IEBAIGV4dGVybiAiQyIgewogICAgICAgICBnY2hhciogdGl0bGU7CiAgICAgICAgIGdjaGFy
KiB1cmk7CiAgICAgICAgIFdlYktpdExvYWRTdGF0dXMgbG9hZFN0YXR1czsKKyAgICAgICAgV2Vi
S2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbjsKKyAgICB9OworCisjZGVmaW5lIFdFQktJVF9TRUNV
UklUWV9PUklHSU5fR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KChvYmopLCBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIFdlYktpdFNlY3VyaXR5T3JpZ2lu
UHJpdmF0ZSkpCisgICAgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUgeworICAg
ICAgICBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IGNvcmVPcmlnaW47CisgICAgICAg
IGdjaGFyKiBwcm90b2NvbDsKKyAgICAgICAgZ2NoYXIqIGhvc3Q7CisgICAgICAgIEdIYXNoVGFi
bGUqIHdlYkRhdGFiYXNlczsKKworICAgICAgICBnYm9vbGVhbiBkaXNwb3NlZDsKICAgICB9Owog
CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4KQEAgLTI5MSw2ICszMDcsOSBAQCBleHRl
cm4gIkMiIHsKICAgICAvLyBXZWJLaXRXZWJEYXRhU291cmNlIHByaXZhdGUKICAgICBXZWJLaXRX
ZWJEYXRhU291cmNlKgogICAgIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbmV3X3dpdGhfbG9hZGVy
KFBhc3NSZWZQdHI8V2ViS2l0OjpEb2N1bWVudExvYWRlcj4pOworCisgICAgV0VCS0lUX0FQSSBX
ZWJLaXRXZWJEYXRhYmFzZSAqCisgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2Rh
dGFiYXNlKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgY2hhciog
ZGF0YWJhc2VOYW1lKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRzZWN1cml0eW9yaWdpbi5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1
cml0eW9yaWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4MDIz
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3Jp
Z2luLmNwcApAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0
aW4gUm9iaW5zb24sIEphbiBNaWNoYWVsIEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIndlYmtpdHByaXZhdGUu
aCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIu
aD4KKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHNlY3VyaXR5b3JpZ2luCisgKiBAc2hvcnRfZGVz
Y3JpcHRpb246IEEgc2VjdXJpdHkgYm91bmRhcnkgZm9yIHdlYiBzaXRlcworICoKKyAqICNXZWJL
aXRTZWN1cml0eU9yaWdpbiBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VjdXJpdHkgZG9tYWlu
IGRlZmluZWQKKyAqIGJ5IHdlYiBzaXRlcy4gQW4gb3JpZ2luIGNvbnNpc3RzIG9mIGEgaG9zdCBu
YW1lLCBhIHByb3RvY29sLCBhbmQgYSBwb3J0CisgKiBudW1iZXIuIFdlYiBzaXRlcyB3aXRoIHRo
ZSBzYW1lIHNlY3VyaXR5IG9yaWdpbiBjYW4gYWNjZXNzIGVhY2ggb3RoZXIncworICogcmVzb3Vy
Y2VzIGZvciBjbGllbnQtc2lkZSBzY3JpcHRpbmcgb3IgZGF0YWJhc2UgYWNjZXNzLgorICogCisg
KiBVc2UgI3dlYmtpdF93ZWJfZnJhbWVfZ2V0X3NlY3VyaXR5X29yaWdpbiB0byBnZXQgdGhlIHNl
Y3VyaXR5IG9yaWdpbiBvZiBhCisgKiAjV2ViS2l0V2ViRnJhbWUuCisgKgorICogRGF0YWJhc2Ug
cXVvdGFzIGFuZCB1c2FnZXMgYXJlIGFsc28gZGVmaW5lZCBwZXIgc2VjdXJpdHkgb3JpZ2luLiBU
aGUKKyAqIGN1bXVsYXRpdmUgZGlzayB1c2FnZSBvZiBhbiBvcmlnaW4ncyBkYXRhYmFzZXMgbWF5
IGJlIHJldHJpZXZlZCB3aXRoCisgKiAjd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2Rh
dGFiYXNlX3VzYWdlLiBBbiBvcmlnaW4ncyBxdW90YSBjYW4gYmUKKyAqIGFkanVzdGVkIHdpdGgg
I3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRhYmFzZV9xdW90YS4KKyAqLworCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9Q
X1BST1RPQ09MLAorICAgIFBST1BfSE9TVCwKKyAgICBQUk9QX1BPUlQsCisgICAgUFJPUF9EQVRB
QkFTRV9VU0FHRSwKKyAgICBQUk9QX0RBVEFCQVNFX1FVT1RBCit9OworCitHX0RFRklORV9UWVBF
KFdlYktpdFNlY3VyaXR5T3JpZ2luLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luLCBHX1RZUEVfT0JK
RUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2ZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4g
PSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOKG9iamVjdCk7CisgICAgV2ViS2l0U2VjdXJpdHlPcmln
aW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlPcmlnaW4tPnByaXY7CisKKyAgICBnX2ZyZWUocHJp
di0+cHJvdG9jb2wpOworICAgIGdfZnJlZShwcml2LT5ob3N0KTsKKworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9kaXNwb3NlKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4g
PSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOKG9iamVjdCk7CisgICAgV2ViS2l0U2VjdXJpdHlPcmln
aW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlPcmlnaW4tPnByaXY7CisKKyAgICBpZiAoIXByaXYt
PmRpc3Bvc2VkKSB7CisgICAgICAgIHByaXYtPmNvcmVPcmlnaW4tPmRlcmVmKCk7CisgICAgICAg
IGdfaGFzaF90YWJsZV9kZXN0cm95KHByaXYtPndlYkRhdGFiYXNlcyk7CisgICAgICAgIHByaXYt
PmRpc3Bvc2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IFdFQktJVF9TRUNV
UklUWV9PUklHSU4ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQ
Uk9QX0RBVEFCQVNFX1FVT1RBOgorICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93
ZWJfZGF0YWJhc2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4sIGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
SWQpIHsKKyAgICBjYXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2woc2VjdXJpdHlPcmln
aW4pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1Q6CisgICAgICAgIGdfdmFs
dWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChzZWN1
cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9SVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9y
dChzZWN1cml0eU9yaWdpbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQUJB
U0VfVVNBR0U6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3VzYWdlKHNlY3VyaXR5T3JpZ2luKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRBQkFTRV9RVU9UQToKKyAgICAgICAgZ192YWx1
ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJh
c2VfcXVvdGEoc2VjdXJpdHlPcmlnaW4pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdIYXNoVGFibGUq
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogc2Vj
dXJpdHlPcmlnaW5zID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gsIGdfZGly
ZWN0X2VxdWFsLCBOVUxMLCBnX29iamVjdF91bnJlZik7CisgICAgcmV0dXJuIHNlY3VyaXR5T3Jp
Z2luczsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9jbGFzc19pbml0
KFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+
ZGlzcG9zZSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9maW5hbGl6ZTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfcHJvcGVydHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3Jp
Z2luOnByb3RvY29sOgorICAgICAgKgorICAgICAgKiBUaGUgcHJvdG9jb2wgb2YgdGhlIHNlY3Vy
aXR5IG9yaWdpbi4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xNAorICAgICAgKi8KKyAg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfUFJP
VE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygicHJvdG9jb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiUHJvdG9jb2wiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBwcm90b2NvbCBvZiB0
aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOmhvc3Q6CisgICAgICAqCisg
ICAgICAqIFRoZSBob3N0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgICAgICAqCisgICAgICAq
IFNpbmNlOiAxLjEuMTQKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLCBQUk9QX0hPU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiaG9zdCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJIb3N0IiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgaG9zdCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOnBvcnQ6
CisgICAgICAqCisgICAgICAqIFRoZSBwb3J0IG9mIHRoZSBzZWN1cml0eSBvcmlnaW4uCisgICAg
ICAqCisgICAgICAqIFNpbmNlOiAxLjEuMTQKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BPUlQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoInBvcnQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlBvcnQi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJUaGUgcG9ydCBvZiB0aGUgc2VjdXJpdHkgb3JpZ2luIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVU0hPUlQsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAgIC8qKgorICAgICAgKiBXZWJLaXRTZWN1
cml0eU9yaWdpbjp3ZWItZGF0YWJhc2UtdXNhZ2U6CisgICAgICAqCisgICAgICAqIFRoZSBjdW11
bGF0aXZlIHNpemUgb2YgYWxsIHdlYiBkYXRhYmFzZXMgaW4gdGhlIHNlY3VyaXR5IG9yaWdpbiBp
biBieXRlcy4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuMS4xNAorICAgICAgKi8KKyAgICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX0RBVEFC
QVNFX1VTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfdWludDY0KCJ3ZWItZGF0YWJhc2UtdXNhZ2UiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldlYiBEYXRhYmFzZSBVc2Fn
ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIHdlYiBkYXRhYmFzZXMgaW4gdGhl
IHNlY3VyaXR5IG9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworICAgICAgLyoqCisgICAgICAqIFdlYktpdFNlY3VyaXR5T3JpZ2luOndlYi1k
YXRhYmFzZS1xdW90YToKKyAgICAgICoKKyAgICAgICogVGhlIHdlYiBkYXRhYmFzZSBxb3V0YSBv
ZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIGJ5dGVzLgorICAgICAgKgorICAgICAgKiBTaW5jZTog
MS4xLjE0CisgICAgICAqLworICAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
b2JqZWN0Q2xhc3MsIFBST1BfREFUQUJBU0VfUVVPVEEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoIndlYi1kYXRhYmFzZS1xdW90YSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiV2ViIERhdGFiYXNlIFF1b3RhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdlYiBkYXRhYmFzZSBxdW90YSBv
ZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIGJ5dGVzIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGtsYXNzLCBzaXplb2YoV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5faW5pdChXZWJLaXRTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4pCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9HRVRfUFJJVkFURShzZWN1cml0eU9yaWdpbik7Cisg
ICAgcHJpdi0+d2ViRGF0YWJhc2VzID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gs
IGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2JqZWN0X3VucmVmKTsKKyAgICBzZWN1cml0eU9yaWdp
bi0+cHJpdiA9IHByaXY7Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRf
cHJvdG9jb2w6CisgKiBAc2VjdXJpdHlfb3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgor
ICoKKyAqIFJldHVybnMgdGhlIHByb3RvY29sIGZvciB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoK
KyAqIFJldHVybnM6IHRoZSBwcm90b2NvbCBmb3IgdGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAq
IFNpbmNlOiAxLjEuMTQKKyAqKi8KK0dfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2dldF9wcm90b2NvbChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJ
TihzZWN1cml0eU9yaWdpbiksIE5VTEwpOworCisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2
YXRlKiBwcml2ID0gc2VjdXJpdHlPcmlnaW4tPnByaXY7CisgICAgV2ViQ29yZTo6U3RyaW5nIHBy
b3RvY29sID0gIHByaXYtPmNvcmVPcmlnaW4tPnByb3RvY29sKCk7CisKKyAgICBpZiAoIXByaXYt
PnByb3RvY29sKQorICAgICAgICBwcml2LT5wcm90b2NvbCA9IGdfc3RyZHVwKHByb3RvY29sLnV0
ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHByaXYtPnByb3RvY29sOworfQorCisvKioKKyAq
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Q6CisgKiBAc2VjdXJpdHlfb3JpZ2luOiBh
ICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAqIFJldHVybnMgdGhlIGhvc3RuYW1lIGZvciB0
aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybnM6IHRoZSBob3N0bmFtZSBmb3IgdGhl
IHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK0dfQ09OU1RfUkVU
VVJOIGdjaGFyKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5T3JpZ2luKSwgTlVMTCk7CisKKyAgICBXZWJL
aXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSBzZWN1cml0eU9yaWdpbi0+cHJpdjsKKyAg
ICBXZWJDb3JlOjpTdHJpbmcgaG9zdCA9ICBwcml2LT5jb3JlT3JpZ2luLT5ob3N0KCk7CisKKyAg
ICBpZiAoIXByaXYtPmhvc3QpCisgICAgICAgIHByaXYtPmhvc3QgPSBnX3N0cmR1cChob3N0LnV0
ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHByaXYtPmhvc3Q7Cit9CisKKy8qKgorICogd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydDoKKyAqIEBzZWN1cml0eV9vcmlnaW46IGEgI1dl
YktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogUmV0dXJucyB0aGUgcG9ydCBmb3IgdGhlIHNlY3Vy
aXR5IG9yaWdpbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcG9ydCBmb3IgdGhlIHNlY3VyaXR5IG9y
aWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK2d1aW50IHdlYmtpdF9zZWN1cml0eV9v
cmlnaW5fZ2V0X3BvcnQoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJp
dHlPcmlnaW4pLCAwKTsKKworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2lu
ID0gY29yZShzZWN1cml0eU9yaWdpbik7CisgICAgcmV0dXJuIGNvcmVPcmlnaW4tPnBvcnQoKTsK
K30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2VfdXNh
Z2U6CisgKiBAc2VjdXJpdHlfb3JpZ2luOiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAq
IFJldHVybnMgdGhlIGN1bXVsYXRpdmUgc2l6ZSBvZiBhbGwgV2ViIERhdGFiYXNlIGRhdGFiYXNl
J3MgaW4gdGhlIG9yaWdpbgorICogaW4gYnl0ZXMuCisgKgorICogUmV0dXJuczogdGhlIGN1bXVs
YXRpdmUgc2l6ZSBvZiBhbGwgZGF0YWJhc2VzIAorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8K
K2d1aW50NjQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3VzYWdlKFdl
YktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5T3JpZ2luKSwgMCk7CisK
KyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVP
cmlnaW4gPSBjb3JlKHNlY3VyaXR5T3JpZ2luKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjp0cmFja2VyKCkudXNhZ2VGb3JPcmlnaW4oY29yZU9yaWdpbik7CisjZWxzZQor
ICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9nZXRfd2ViX2RhdGFiYXNlX3F1b3RhOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0
U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIHRoZSBxdW90YSBmb3IgV2ViIERhdGFiYXNl
IHN0b3JhZ2Ugb2YgdGhlIHNlY3VyaXR5IG9yaWdpbgorICogaW4gYnl0ZXMuCisgKgorICogUmV0
dXJuczogdGhlIFdlYiBEYXRhYmFzZSBxdW90YQorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8K
K2d1aW50NjQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2RhdGFiYXNlX3F1b3RhKFdl
YktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKHNlY3VyaXR5T3JpZ2luKSwgMCk7CisK
KyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVP
cmlnaW4gPSBjb3JlKHNlY3VyaXR5T3JpZ2luKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjp0cmFja2VyKCkucXVvdGFGb3JPcmlnaW4oY29yZU9yaWdpbik7CisjZWxzZQor
ICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9zZXRfd2ViX2RhdGFiYXNlX3F1b3RhOgorICogQHNlY3VyaXR5X29yaWdpbjogYSAjV2ViS2l0
U2VjdXJpdHlPcmlnaW4KKyAqIEBxdW90YTogYSBuZXcgV2ViIERhdGFiYXNlIHF1b3RhIGluIGJ5
dGVzCisgKgorICogQWRqdXN0IHRoZSBxdW90YSBmb3IgV2ViIERhdGFiYXNlIHN0b3JhZ2Ugb2Yg
dGhlIHNlY3VyaXR5IG9yaWdpbgorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK3ZvaWQgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9zZXRfd2ViX2RhdGFiYXNlX3F1b3RhKFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgZ3VpbnQ2NCBxdW90YSkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19TRUNVUklUWV9PUklHSU4oc2VjdXJpdHlPcmlnaW4pKTsKKworI2lm
IEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdp
biA9IGNvcmUoc2VjdXJpdHlPcmlnaW4pOworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnNldFF1b3RhKGNvcmVPcmlnaW4sIHF1b3RhKTsKKyNlbmRpZgorfQorCisvKioK
KyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2FsbF93ZWJfZGF0YWJhc2VzOgorICogQHNl
Y3VyaXR5X29yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBSZXR1cm5zIGEg
bGlzdCBvZiBhbGwgV2ViIERhdGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAq
IFJldHVybnM6IGEgI0dsaXN0IG9mIGRhdGFiYXNlcyBpbiB0aGUgc2VjdXJpdHkgb3JpZ2luLgor
ICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK0dMaXN0KiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF9hbGxfd2ViX2RhdGFiYXNlcyhXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJ
TihzZWN1cml0eU9yaWdpbiksIE5VTEwpOworICAgIEdMaXN0KiBkYXRhYmFzZXMgPSBOVUxMOwor
CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBjb3Jl
T3JpZ2luID0gY29yZShzZWN1cml0eU9yaWdpbik7CisgICAgVmVjdG9yPFdlYkNvcmU6OlN0cmlu
Zz4gZGF0YWJhc2VOYW1lczsKKworICAgIGlmICghV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkuZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihjb3JlT3JpZ2luLCBkYXRhYmFzZU5hbWVz
KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YWJhc2VOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJLaXRXZWJEYXRhYmFzZSog
ZGF0YWJhc2UgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2Uoc2VjdXJp
dHlPcmlnaW4sIGRhdGFiYXNlTmFtZXNbaV0udXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGRhdGFi
YXNlcyA9IGdfbGlzdF9hcHBlbmQoZGF0YWJhc2VzLCBkYXRhYmFzZSk7CisgICAgfQorI2VuZGlm
CisKKyAgICByZXR1cm4gZGF0YWJhc2VzOworfQorCitXZWJLaXRTZWN1cml0eU9yaWdpbiogV2Vi
S2l0OjpraXQoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmlnaW4pCit7CisgICAgQVNT
RVJUKGNvcmVPcmlnaW4pOworCisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2lucygpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSAoV2ViS2l0
U2VjdXJpdHlPcmlnaW4qKSBnX2hhc2hfdGFibGVfbG9va3VwKHRhYmxlLCBjb3JlT3JpZ2luKTsK
KworICAgIGlmICghb3JpZ2luKSB7CisgICAgICAgIG9yaWdpbiA9IFdFQktJVF9TRUNVUklUWV9P
UklHSU4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwgTlVMTCkpOwor
ICAgICAgICBvcmlnaW4tPnByaXYtPmNvcmVPcmlnaW4gPSBjb3JlT3JpZ2luOworICAgICAgICBn
X2hhc2hfdGFibGVfaW5zZXJ0KHRhYmxlLCBjb3JlT3JpZ2luLCBvcmlnaW4pOworICAgIH0KKwor
ICAgIHJldHVybiBvcmlnaW47Cit9CisKKworV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIFdlYktp
dDo6Y29yZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCit7CisgICAgQVNT
RVJUKHNlY3VyaXR5T3JpZ2luKTsKKworICAgIHJldHVybiBzZWN1cml0eU9yaWdpbi0+cHJpdi0+
Y29yZU9yaWdpbi5nZXQoKTsKK30KKworV2ViS2l0V2ViRGF0YWJhc2UqIHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZ2V0X3dlYl9kYXRhYmFzZShXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4sIGNvbnN0IGdjaGFyKiBkYXRhYmFzZU5hbWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1NFQ1VSSVRZX09SSUdJTihzZWN1cml0eU9yaWdpbiksIE5VTEwpOwor
CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gc2VjdXJpdHlPcmlnaW4t
PnByaXY7CisgICAgR0hhc2hUYWJsZSogZGF0YWJhc2VIYXNoID0gcHJpdi0+d2ViRGF0YWJhc2Vz
OworICAgIFdlYktpdFdlYkRhdGFiYXNlKiBkYXRhYmFzZSA9IChXZWJLaXRXZWJEYXRhYmFzZSop
IGdfaGFzaF90YWJsZV9sb29rdXAoZGF0YWJhc2VIYXNoLCBkYXRhYmFzZU5hbWUpOworCisgICAg
aWYgKCFkYXRhYmFzZSkgeworICAgICAgICBkYXRhYmFzZSA9ICBXRUJLSVRfV0VCX0RBVEFCQVNF
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfREFUQUJBU0UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAic2VjdXJpdHktb3JpZ2luIiwgc2VjdXJpdHlPcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsIGRhdGFiYXNl
TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cisg
ICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoZGF0YWJhc2VIYXNoLCBnX3N0cmR1cChkYXRhYmFz
ZU5hbWUpLCBkYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGFiYXNlOworfQorCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lZWZjN2VjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbiwgSmFuIE1pY2hhZWwgQy4gQWxvbnpvCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV0VCS0lUX1NFQ1VSSVRZX09SSUdJTl9ICisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9P
UklHSU5fSAorCisjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmlnaW4uaCIKKyNpbmNsdWRlICJ3
ZWJraXR3ZWJkYXRhYmFzZS5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfU0VDVVJJVFlfT1JJR0lOICAgICAgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TRUNVUklUWV9PUklHSU4ob2JqKSAgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1NFQ1VSSVRZ
X09SSUdJTiwgV2ViS2l0U2VjdXJpdHlPcmlnaW4pKQorI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlf
T1JJR0lOX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4sIFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOKG9iaikgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4p
KQorI2RlZmluZSBXRUJLSVRfSVNfU0VDVVJJVFlfT1JJR0lOX0NMQVNTKGtsYXNzKSAgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4p
KQorI2RlZmluZSBXRUJLSVRfU0VDVVJJVFlfT1JJR0lOX0dFVF9DTEFTUyhvYmopICAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4s
IFdlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U2Vj
dXJpdHlPcmlnaW5Qcml2YXRlIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZTsKKworc3RydWN0
IF9XZWJLaXRTZWN1cml0eU9yaWdpbiB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisK
KyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUqIHBy
aXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luQ2xhc3MgeworICAgIEdPYmpl
Y3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5z
aW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQz
KSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF90eXBlICh2b2lkKTsK
KworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9zZWN1cml0eV9vcmln
aW5fZ2V0X3Byb3RvY29sICAgICAgICAgICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5
T3JpZ2luKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9zZWN1
cml0eV9vcmlnaW5fZ2V0X2hvc3QgICAgICAgICAgICAgICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4q
IHNlY3VyaXR5T3JpZ2luKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfcG9ydCAgICAgICAgICAgICAgIChXZWJLaXRTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlPcmlnaW4pOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5f
Z2V0X3dlYl9kYXRhYmFzZV91c2FnZSAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93
ZWJfZGF0YWJhc2VfcXVvdGEgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbik7
CisKK1dFQktJVF9BUEkgdm9pZCAKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9kYXRh
YmFzZV9xdW90YSAoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBndWludDY0
IHF1b3RhKTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9hbGxfd2ViX2RhdGFiYXNlcyAgKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
bik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX1dFQktJVF9TRUNVUklUWV9PUklHSU5f
SF9fICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5j
cHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwMTc2ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDUzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIndlYmtpdHdlYmRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRwcml2
YXRlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxz
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisKKyNpbmNsdWRlIDxnbGliL2dpMThu
LWxpYi5oPgorCisvKioKKyAqIFNFQ1RJT046d2Via2l0d2ViZGF0YWJhc2UKKyAqIEBzaG9ydF9k
ZXNjcmlwdGlvbjogQSBXZWJLaXQgd2ViIGFwcGxpY2F0aW9uIGRhdGFiYXNlCisgKgorICogI1dl
YktpdFdlYkRhdGFiYXNlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgYSBXZWIgRGF0YWJhc2UgZGF0
YWJhc2UuIFRoZQorICogcHJvcG9zZWQgV2ViIERhdGFiYXNlIHN0YW5kYXJkIGludHJvZHVjZXMg
c3VwcG9ydCBmb3IgU1FMIGRhdGFiYXNlcyB0aGF0IHdlYgorICogc2l0ZXMgY2FuIGNyZWF0ZSBh
bmQgYWNjZXNzIG9uIGEgbG9jYWwgY29tcHV0ZXIgdGhyb3VnaCBKYXZhU2NyaXB0LgorICoKKyAq
IFRvIGdldCBhY2Nlc3MgdG8gYWxsIGRhdGFiYXNlcyBkZWZpbmVkIGJ5IGEgc2VjdXJpdHkgb3Jp
Z2luLCB1c2UKKyAqICN3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9kYXRhYmFzZXMuIEVhY2gg
ZGF0YWJhc2UgaGFzIGEgY2Fub25pY2FsCisgKiBuYW1lLCBhcyB3ZWxsIGFzIGEgdXNlci1mcmll
bmRseSBkaXNwbGF5IG5hbWUuCisgKiAKKyAqIFdlYktpdCB1c2VzIFNRTGl0ZSB0byBjcmVhdGUg
YW5kIGFjY2VzcyB0aGUgbG9jYWwgU1FMIGRhdGFiYXNlcy4gVGhlIGxvY2F0aW9uCisgKiBvZiBh
ICNXZWJLaXRXZWJEYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgd3RoICN3ZWJraXRfd2ViX2RhdGFi
YXNlX2dldF9maWxlbmFtZS4KKyAqIFlvdSBjYW4gY29uZmlndXJlIHRoZSBsb2NhdGlvbiBvZiBh
bGwgZGF0YWJhc2VzIHdpdGgKKyAqICN3ZWJraXRfc2V0X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRo
LgorICogCisgKiBGb3IgZWFjaCBkYXRhYmFzZSB0aGUgd2ViIHNpdGUgY2FuIGRlZmluZSBhbiBl
c3RpbWF0ZWQgc2l6ZSB3aGljaCBjYW4gYmUKKyAqIGFjY2Vzc2VkIHdpdGggI3dlYmtpdF93ZWJf
ZGF0YWJhc2VfZ2V0X2V4cGVjdGVkX3NpemUuIFRoZSBjdXJyZW50IHNpemUgb2YgdGhlCisgKiBk
YXRhYmFzZSBpbiBieXRlcyBpcyByZXR1cm5lZCBieSAjd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRf
c2l6ZS4KKyAqIAorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gdGhlIFdlYiBEYXRh
YmFzZSBzcGVjaWZpY2F0aW9uIHByb3Bvc2FsIGF0CisgKiBodHRwOi8vZGV2LnczLm9yZy9odG1s
NS93ZWJkYXRhYmFzZQorICovCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2VudW0gewor
ICAgIFBST1BfMCwKKworICAgIFBST1BfU0VDVVJJVFlfT1JJR0lOLAorICAgIFBST1BfTkFNRSwK
KyAgICBQUk9QX0RJU1BMQVlfTkFNRSwKKyAgICBQUk9QX0VYUEVDVEVEX1NJWkUsCisgICAgUFJP
UF9TSVpFLAorICAgIFBST1BfUEFUSAorfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJEYXRh
YmFzZSwgd2Via2l0X3dlYl9kYXRhYmFzZSwgR19UWVBFX09CSkVDVCkKKworc3RydWN0IF9XZWJL
aXRXZWJEYXRhYmFzZVByaXZhdGUgeworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW47
CisgICAgZ2NoYXIqIG5hbWU7CisgICAgZ2NoYXIqIGRpc3BsYXlOYW1lOworICAgIGdjaGFyKiBm
aWxlbmFtZTsKK307CisKK3N0YXRpYyBnY2hhciogd2Via2l0X2RhdGFiYXNlX2RpcmVjdG9yeV9w
YXRoID0gTlVMTDsKK3N0YXRpYyBndWludDY0IHdlYmtpdF9kZWZhdWx0X2RhdGFiYXNlX3F1b3Rh
ID0gNSAqIDEwMjQgKiAxMDI0OworCisjZGVmaW5lIFdFQktJVF9XRUJfREFUQUJBU0VfR0VUX1BS
SVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQ
RV9XRUJfREFUQUJBU0UsIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSkpCisKK3N0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X3NlY3VyaXR5X29yaWdpbihXZWJLaXRXZWJEYXRhYmFz
ZSogd2ViRGF0YWJhc2UsIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eV9vcmlnaW4pOwor
CitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKFdlYktpdFdlYkRhdGFi
YXNlKiB3ZWJEYXRhYmFzZSwgY29uc3QgZ2NoYXIqIG5hbWUpOworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX2RhdGFiYXNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRX
ZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UgPSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9iamVjdCk7Cisg
ICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CisK
KyAgICBnX2ZyZWUocHJpdi0+bmFtZSk7CisgICAgZ19mcmVlKHByaXYtPmRpc3BsYXlOYW1lKTsK
KyAgICBnX2ZyZWUocHJpdi0+ZmlsZW5hbWUpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X3dlYl9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQorewor
ICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSA9IFdFQktJVF9XRUJfREFUQUJBU0Uo
b2JqZWN0KTsKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFz
ZS0+cHJpdjsKKworICAgIGlmIChwcml2LT5vcmlnaW4pIHsKKyAgICAgICAgZ19vYmplY3RfdW5y
ZWYocHJpdi0+b3JpZ2luKTsKKyAgICAgICAgcHJpdi0+b3JpZ2luID0gTlVMTDsKKyAgICB9CisK
KyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmRp
c3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRh
YmFzZSA9IFdFQktJVF9XRUJfREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElk
KSB7CisgICAgY2FzZSBQUk9QX1NFQ1VSSVRZX09SSUdJTjoKKyAgICAgICAgd2Via2l0X3dlYl9k
YXRhYmFzZV9zZXRfc2VjdXJpdHlfb3JpZ2luKHdlYkRhdGFiYXNlLCBXRUJLSVRfU0VDVVJJVFlf
T1JJR0lOKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF93ZWJfZGF0YWJhc2Vfc2V0X25hbWUod2Vi
RGF0YWJhc2UsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlID0gV0VCS0lUX1dFQl9EQVRBQkFTRShvYmplY3Qp
OworICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2
OworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfU0VDVVJJVFlfT1JJR0lO
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHByaXYtPm9yaWdpbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X25hbWUod2ViRGF0YWJhc2UpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU1BMQVlfTkFNRToKKyAgICAgICAgZ192YWx1
ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9kaXNwbGF5X25hbWUo
d2ViRGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VYUEVDVEVEX1NJ
WkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X3dlYl9kYXRhYmFz
ZV9nZXRfZXhwZWN0ZWRfc2l6ZSh3ZWJEYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRf
d2ViX2RhdGFiYXNlX2dldF9zaXplKHdlYkRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9QQVRIOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X2ZpbGVuYW1lKHdlYkRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJEYXRhYmFz
ZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfd2Vi
X2RhdGFiYXNlX2Rpc3Bvc2U7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93
ZWJfZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3Byb3BlcnR5OworCisgICAgIC8qKgor
ICAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpzZWN1cml0eS1vcmlnaW46CisgICAgICAqCisgICAg
ICAqIFRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAgKgorICAgICAg
KiBTaW5jZTogMS4xLjE0CisgICAgICAqLworICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KGdvYmplY3RDbGFzcywgUFJPUF9TRUNVUklUWV9PUklHSU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgic2VjdXJpdHktb3Jp
Z2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlNlY3VyaXR5IE9yaWdpbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0
aGUgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFn
cykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAg
ICAvKioKKyAgICAgICogV2ViS2l0V2ViRGF0YWJhc2U6bmFtZToKKyAgICAgICoKKyAgICAgICog
VGhlIG5hbWUgb2YgdGhlIFdlYiBEYXRhYmFzZSBkYXRhYmFzZS4KKyAgICAgICoKKyAgICAgICog
U2luY2U6IDEuMS4xNAorICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJuYW1lIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk5hbWUiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBuYW1lIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxh
Z3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAg
ICAgLyoqCisgICAgICAqIFdlYktpdFdlYkRhdGFiYXNlOmRpc3BsYXktbmFtZToKKyAgICAgICoK
KyAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRhdGFiYXNlLgor
ICAgICAgKgorICAgICAgKiBTaW5jZTogMS4xLjE0CisgICAgICAqLworICAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywgUFJPUF9ESVNQTEFZX05BTUUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygi
ZGlzcGxheS1uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIkRpc3BsYXkgTmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGRpc3BsYXkgbmFtZSBv
ZiB0aGUgV2ViIFN0b3JhZ2UgZGF0YWJhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpleHBlY3RlZC1zaXpl
OgorICAgICAqCisgICAgICogVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGRhdGFiYXNlIGluIGJ5
dGVzIGFzIGRlZmluZWQgYnkgdGhlIHdlYiBhdXRob3IuCisgICAgICoKKyAgICAgKiBTaW5jZTog
MS4xLjE0CisgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdENsYXNzLCBQUk9QX0VYUEVDVEVEX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgiZXhwZWN0ZWQtc2l6ZSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJFeHBl
Y3RlZCBTaXplIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgV2ViIERhdGFiYXNlIGRh
dGFiYXNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
ICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJEYXRhYmFzZTpzaXplOgorICAgICAqCisgICAgICog
VGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMuCisgICAgICoKKyAgICAg
KiBTaW5jZTogMS4xLjE0CisgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgic2l6ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTaXplIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgY3VycmVudCBzaXplIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFY
VUlOVDY0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgIC8qKgorICAgICAgKiBX
ZWJLaXRXZWJEYXRhYmFzZTpmaWxlbmFtZToKKyAgICAgICoKKyAgICAgICogVGhlIGFic29sdXRl
IGZpbGVuYW1lIG9mIHRoZSBXZWIgRGF0YWJhc2UgZGF0YWJhc2UuCisgICAgICAqCisgICAgICAq
IFNpbmNlOiAxLjEuMTQKKyAgICAgICovCisgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZmlsZW5hbWUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRmlsZW5hbWUi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBhYnNvbHV0ZSBmaWxlbmFtZSBvZiB0aGUgV2ViIFN0b3JhZ2UgZGF0YWJhc2Ui
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSkpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX2luaXQoV2ViS2l0V2ViRGF0YWJhc2Uq
IHdlYkRhdGFiYXNlKQoreworICAgIHdlYkRhdGFiYXNlLT5wcml2ID0gV0VCS0lUX1dFQl9EQVRB
QkFTRV9HRVRfUFJJVkFURSh3ZWJEYXRhYmFzZSk7Cit9CisKKy8vIEludGVybmFsIHVzZSBvbmx5
CitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9zZWN1cml0eV9vcmlnaW4oV2Vi
S2l0V2ViRGF0YWJhc2UgKndlYkRhdGFiYXNlLCBXZWJLaXRTZWN1cml0eU9yaWdpbiAqc2VjdXJp
dHlPcmlnaW4pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNF
KHdlYkRhdGFiYXNlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfU0VDVVJJVFlf
T1JJR0lOKHNlY3VyaXR5T3JpZ2luKSk7CisKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKworICAgIGlmIChwcml2LT5vcmlnaW4pCisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm9yaWdpbik7CisKKyAgICBnX29iamVjdF9yZWYoc2Vj
dXJpdHlPcmlnaW4pOworICAgIHByaXYtPm9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3NldF9uYW1lKFdlYktpdFdlYkRhdGFiYXNl
KiB3ZWJEYXRhYmFzZSwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYkRhdGFiYXNlKSk7CisKKyAgICBXZWJLaXRXZWJE
YXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKyAgICBnX2ZyZWUocHJp
di0+bmFtZSk7CisgICAgcHJpdi0+bmFtZSA9IGdfc3RyZHVwKG5hbWUpOworfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NlY3VyaXR5X29yaWdpbjoKKyAqIEB3ZWJfZGF0YWJh
c2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgc2VjdXJpdHkgb3Jp
Z2luIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisgKgorICogUmV0dXJuczogdGhlIHNlY3Vy
aXR5IG9yaWdpbiBvZiB0aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4xLjE0CisgKiovCitX
ZWJLaXRTZWN1cml0eU9yaWdpbiogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2VjdXJpdHlfb3Jp
Z2luKFdlYktpdFdlYkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0RBVEFCQVNFKHdlYkRhdGFiYXNlKSwgTlVMTCk7CisgICAg
V2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CisKKyAg
ICByZXR1cm4gcHJpdi0+b3JpZ2luOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X25hbWU6CisgKiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAq
IFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UuCisg
KgorICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlCisgKgorICogU2luY2U6IDEu
MS4xNAorICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X25hbWUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViRGF0YWJhc2UpLCBOVUxMKTsKKyAg
ICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKwor
ICAgIHJldHVybiBwcml2LT5uYW1lOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZGF0YWJhc2Vf
Z2V0X2Rpc3BsYXlfbmFtZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNl
CisgKgorICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGFzIHNl
ZW4gYnkgdGhlIHVzZXIuCisgKgorICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNl
IGFzIHNlZW4gYnkgdGhlIHVzZXIuCisgKgorICogU2luY2U6IDEuMS4xNAorICoqLworR19DT05T
VF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZShXZWJL
aXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJEYXRhYmFzZSksIE5VTEwpOworCisjaWYgRU5BQkxF
KERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFi
YXNlLT5wcml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJp
di0+bmFtZSwgY29yZShwcml2LT5vcmlnaW4pKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgZGlzcGxh
eU5hbWUgPSAgZGV0YWlscy5kaXNwbGF5TmFtZSgpOworCisgICAgaWYgKGRpc3BsYXlOYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgZ19mcmVlKHByaXYtPmRpc3BsYXlO
YW1lKTsKKyAgICBwcml2LT5kaXNwbGF5TmFtZSA9IGdfc3RyZHVwKGRpc3BsYXlOYW1lLnV0Zjgo
KS5kYXRhKCkpOworICAgIHJldHVybiBwcml2LT5kaXNwbGF5TmFtZTsKKyNlbHNlCisgICAgcmV0
dXJuICIiOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZXhw
ZWN0ZWRfc2l6ZToKKyAqIEB3ZWJfZGF0YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgor
ICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgI1dlYktpdFdlYkRhdGFiYXNlIGlu
IGJ5dGVzIGFzIGRlZmluZWQgYnkgdGhlCisgKiB3ZWIgYXV0aG9yLiBUaGUgV2ViIERhdGFiYXNl
IHN0YW5kYXJkIGFsbG93cyB3ZWIgYXV0aG9ycyB0byBzcGVjaWZ5IGFuIGV4cGVjdGVkCisgKiBz
aXplIG9mIHRoZSBkYXRhYmFzZSB0byBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlLgorICoK
KyAqIFJldHVybnM6IHRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBkYXRhYmFzZSBpbiBieXRlcwor
ICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK2d1aW50NjQgd2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfZXhwZWN0ZWRfc2l6ZShXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2UpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9EQVRBQkFTRSh3ZWJEYXRhYmFzZSks
IDApOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktpdFdlYkRhdGFiYXNlUHJpdmF0
ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2OworICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWls
cyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zv
ck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFtZSwgY29yZShwcml2LT5vcmlnaW4pKTsKKyAgICByZXR1
cm4gZGV0YWlscy5leHBlY3RlZFVzYWdlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlm
Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2l6ZToKKyAqIEB3ZWJfZGF0
YWJhc2U6IGEgI1dlYktpdFdlYkRhdGFiYXNlCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIHNp
emUgb2YgdGhlICNXZWJLaXRXZWJEYXRhYmFzZSBzcGFjZSBvbiBkaXNrIGluIGJ5dGVzLgorICoK
KyAqIFJldHVybnM6IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMKKyAq
CisgKiBTaW5jZTogMS4xLjE0CisgKiovCitndWludDY0IHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0
X3NpemUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViRGF0YWJhc2UpLCAwKTsKKworI2lm
IEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3
ZWJEYXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9
IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRldGFpbHNGb3JOYW1lQW5kT3Jp
Z2luKHByaXYtPm5hbWUsIGNvcmUocHJpdi0+b3JpZ2luKSk7CisgICAgcmV0dXJuIGRldGFpbHMu
Y3VycmVudFVzYWdlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qKgor
ICogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfZmlsZW5hbWU6CisgKiBAd2ViX2RhdGFiYXNlOiBh
ICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJldHVybnMgdGhlIGFic29sdXRlIGZpbGVuYW1l
IHRvIHRoZSAjV2ViS2l0V2ViRGF0YWJhc2UgZmlsZSBvbiBkaXNrLgorICoKKyAqIFJldHVybnM6
IHRoZSBhYnNvbHV0ZSBmaWxlbmFtZSBvZiB0aGUgZGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4x
LjE0CisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRf
ZmlsZW5hbWUoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfREFUQUJBU0Uod2ViRGF0YWJhc2UpLCBOVUxMKTsK
KworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHBy
aXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKKyAgICBXZWJDb3JlOjpTdHJpbmcgY29yZU5hbWUgPSBX
ZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KHByaXYtPm5hbWUpOworICAgIFdlYkNvcmU6OlN0cmlu
ZyBjb3JlUGF0aCA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRo
Rm9yRGF0YWJhc2UoY29yZShwcml2LT5vcmlnaW4pLCBjb3JlTmFtZSk7CisKKyAgICBpZiAoY29y
ZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4iIjsKKworICAgIGdfZnJlZShwcml2LT5m
aWxlbmFtZSk7CisgICAgcHJpdi0+ZmlsZW5hbWUgPSBnX3N0cmR1cChjb3JlUGF0aC51dGY4KCku
ZGF0YSgpKTsKKyAgICByZXR1cm4gcHJpdi0+ZmlsZW5hbWU7CisKKyNlbHNlCisgICAgcmV0dXJu
ICIiOworI2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X3dlYl9kYXRhYmFzZV9yZW1vdmU6Cisg
KiBAd2ViX2RhdGFiYXNlOiBhICNXZWJLaXRXZWJEYXRhYmFzZQorICoKKyAqIFJlbW92ZXMgdGhl
ICNXZWJLaXRXZWJEYXRhYmFzZSBmcm9tIGl0cyBzZWN1cml0eSBvcmlnaW4gYW5kIGRlc3Ryb3lz
IGFsbCBkYXRhCisgKiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjEu
MTQKKyAqKi8KK3ZvaWQgd2Via2l0X3dlYl9kYXRhYmFzZV9yZW1vdmUoV2ViS2l0V2ViRGF0YWJh
c2UqIHdlYkRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9E
QVRBQkFTRSh3ZWJEYXRhYmFzZSkpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYktp
dFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2OworICAgIFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZURhdGFiYXNlKGNvcmUocHJpdi0+
b3JpZ2luKSwgcHJpdi0+bmFtZSk7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfcmVtb3Zl
X2FsbF93ZWJfZGF0YWJhc2VzOgorICoKKyAqIFJlbW92ZXMgYWxsIHdlYiBkYXRhYmFzZXMgZnJv
bSB0aGUgY3VycmVudCBkYXRhYmFzZSBkaXJlY3RvcnkgcGF0aC4KKyAqCisgKiBTaW5jZTogMS4x
LjE0CisgKiovCit2b2lkIHdlYmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFzZXMoKQoreworI2lm
IEVOQUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5kZWxldGVBbGxEYXRhYmFzZXMoKTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9nZXRf
d2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoOgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQg
cGF0aCB0byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAKKyAqIERhdGFiYXNl
IGRhdGFiYXNlcy4gQnkgZGVmYXVsdCB0aGlzIHBhdGggd2lsbCBiZSBpbiB0aGUgdXNlciBkYXRh
CisgKiBkaXJlY3RvcnkuCisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQgZGF0YWJhc2UgZGly
ZWN0b3J5IHBhdGgKKyAqCisgKiBTaW5jZTogMS4xLjE0CisgKiovCitHX0NPTlNUX1JFVFVSTiBn
Y2hhciogd2Via2l0X2dldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoKQoreworI2lmIEVO
QUJMRShEQVRBQkFTRSkKKyAgICBXZWJDb3JlOjpTdHJpbmcgcGF0aCA9IFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlRGlyZWN0b3J5UGF0aCgpOworCisgICAgaWYg
KHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBnX2ZyZWUod2Via2l0
X2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoKTsKKyAgICB3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5
X3BhdGggPSBnX3N0cmR1cChwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiB3ZWJraXRf
ZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGg7CisjZWxzZQorICAgIHJldHVybiAiIjsKKyNlbmRpZgor
fQorCisvKioKKyAqIHdlYmtpdF9zZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoOgorICog
QHBhdGg6IHRoZSBuZXcgZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgKKyAqCisgKiBTZXRzIHRoZSBj
dXJyZW50IHBhdGggdG8gdGhlIGRpcmVjdG9yeSBXZWJLaXQgd2lsbCB3cml0ZSBXZWIgCisgKiBE
YXRhYmFzZSBkYXRhYmFzZXMuIAorICoKKyAqIFNpbmNlOiAxLjEuMTQKKyAqKi8KK3ZvaWQgd2Vi
a2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgoY29uc3QgZ2NoYXIqIHBhdGgpCit7
CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNvcmU6OlN0cmluZyBjb3JlUGF0aCA9IFdl
YkNvcmU6OlN0cmluZzo6ZnJvbVVURjgocGF0aCk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvcmVQYXRoKTsKKworICAg
IGdfZnJlZSh3ZWJraXRfZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgpOworICAgIHdlYmtpdF9kYXRh
YmFzZV9kaXJlY3RvcnlfcGF0aCA9IGdfc3RyZHVwKGNvcmVQYXRoLnV0ZjgoKS5kYXRhKCkpOwor
I2VuZGlmCit9CisKKy8qKgorICogd2Via2l0X2dldF9kZWZhdWx0X3dlYl9kYXRhYmFzZV9xdW90
YToKKyAqCisgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHF1b3RhIGZvciBXZWIgRGF0YWJhc2UgZGF0
YWJhc2VzLiBCeSBkZWZhdWx0CisgKiB0aGlzIHZhbHVlIGlzIDVNQi4KKyAKKyAqIFJldHVybnM6
IHRoZSBjdXJyZW50IGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEgaW4gYnl0ZXMKKyAqCisgKiBTaW5j
ZTogMS4xLjE0CisgKiovCitndWludDY0IHdlYmtpdF9nZXRfZGVmYXVsdF93ZWJfZGF0YWJhc2Vf
cXVvdGEoKQoreworICAgIHJldHVybiB3ZWJraXRfZGVmYXVsdF9kYXRhYmFzZV9xdW90YTsKK30K
KworLyoqCisgKiB3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhOgorICogQGRl
ZmF1bHRfcXVvdGE6IHRoZSBuZXcgZGVmYXVsdCBkYXRhYmFzZSBxdW90YQorICoKKyAqIFNldHMg
dGhlIGN1cnJlbnQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IFdlYktpdCB3aWxsIHdyaXRlIFdlYiAK
KyAqIERhdGFiYXNlIGRhdGFiYXNlcy4gCisgKgorICogU2luY2U6IDEuMS4xNAorICoqLwordm9p
ZCB3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhKGd1aW50NjQgZGVmYXVsdFF1
b3RhKQoreworICAgIHdlYmtpdF9kZWZhdWx0X2RhdGFiYXNlX3F1b3RhID0gZGVmYXVsdFF1b3Rh
OworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZjk3MWRiYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0RBVEFCQVNF
X0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9EQVRBQkFTRV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorCisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9EQVRBQkFTRSAgICAgICAgICAgICAod2Via2l0
X3dlYl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0RBVEFCQVNFKG9i
aikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9XRUJfREFUQUJBU0UsIFdlYktpdFdlYkRhdGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9EQVRBQkFTRV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZUNsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9EQVRBQkFTRShvYmopICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX1dFQl9EQVRBQkFTRV9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VC
S0lUX1dFQl9EQVRBQkFTRV9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0RBVEFCQVNFLCBXZWJLaXRXZWJEYXRhYmFzZUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRX
ZWJEYXRhYmFzZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0V2ViRGF0YWJhc2UgeworICAgIEdP
YmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0
V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJEYXRhYmFz
ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGlu
ZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVk
NCkgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0eU9y
aWdpbiAqCit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9zZWN1cml0eV9vcmlnaW4gKFdlYktpdFdl
YkRhdGFiYXNlKiB3ZWJEYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2No
YXIqCit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9uYW1lICAgICAgICAgICAgKFdlYktpdFdlYkRh
dGFiYXNlKiB3ZWJEYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIq
Cit3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9kaXNwbGF5X25hbWUgICAgKFdlYktpdFdlYkRhdGFi
YXNlKiB3ZWJEYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X3dlYl9kYXRh
YmFzZV9nZXRfZXhwZWN0ZWRfc2l6ZSAgIChXZWJLaXRXZWJEYXRhYmFzZSogd2ViRGF0YWJhc2Up
OworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUgICAg
ICAgICAgICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlKTsKKworV0VCS0lUX0FQSSBH
X0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2ZpbGVuYW1lICAg
ICAgICAoV2ViS2l0V2ViRGF0YWJhc2UqIHdlYkRhdGFiYXNlKTsKKworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92ZSAgICAgICAgICAgICAgKFdlYktpdFdlYkRhdGFi
YXNlKiB3ZWJEYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3JlbW92ZV9hbGxf
d2ViX2RhdGFiYXNlcyAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVS
TiBnY2hhcioKK3dlYmtpdF9nZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRoICAodm9pZCk7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3Bh
dGggIChjb25zdCBnY2hhciogcGF0aCk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2dl
dF9kZWZhdWx0X3dlYl9kYXRhYmFzZV9xdW90YSAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhICAgKGd1aW50NjQgZGVmYXVs
dFF1b3RhKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fV0VCS0lUX1dFQl9EQVRBQkFT
RV9IX18gKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNw
cCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCA3YzlhZDlhLi5j
NGFmYzM4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC0zNzcsNiArMzc3
LDggQEAgV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVfbmV3KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiAgICAgcHJpdi0+Y29yZUZyYW1lID0gRnJhbWU6OmNyZWF0ZSh2aWV3UHJpdi0+
Y29yZVBhZ2UsIDAsIGNsaWVudCkuZ2V0KCk7CiAgICAgcHJpdi0+Y29yZUZyYW1lLT5pbml0KCk7
CiAKKyAgICBwcml2LT5vcmlnaW4gPSBOVUxMOworCiAgICAgcmV0dXJuIGZyYW1lOwogfQogCkBA
IC0xMDQ4LDMgKzEwNTAsMjcgQEAgR3RrUG9saWN5VHlwZSB3ZWJraXRfd2ViX2ZyYW1lX2dldF92
ZXJ0aWNhbF9zY3JvbGxiYXJfcG9saWN5KFdlYktpdFdlYkZyYW1lKiBmcmEKIAogICAgIHJldHVy
biBHVEtfUE9MSUNZX0FVVE9NQVRJQzsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF9zZWN1cml0eV9vcmlnaW46CisgKiBAZnJhbWU6IGEgI1dlYktpdFdlYkZyYW1lCisgKgorICog
UmV0dXJucyB0aGUgQGZyYW1lJ3Mgc2VjdXJpdHkgb3JpZ2luLgorICoKKyAqIFJldHVybiB2YWx1
ZTogdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiBAZnJhbWUKKyAqLworV2ViS2l0U2VjdXJpdHlPcmln
aW4qIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3NlY3VyaXR5X29yaWdpbihXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCit7CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnByaXY7
CisgICAgaWYgKCFwcml2LT5jb3JlRnJhbWUgfHwgIXByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQo
KSB8fCAhcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKQorICAg
ICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChwcml2LT5vcmlnaW4gJiYgcHJpdi0+b3JpZ2lu
LT5wcml2LT5jb3JlT3JpZ2luLmdldCgpID09IHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSkKKyAgICAgICAgcmV0dXJuIHByaXYtPm9yaWdpbjsKKworICAgIGlm
IChwcml2LT5vcmlnaW4pCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPm9yaWdpbik7CisK
KyAgICBwcml2LT5vcmlnaW4gPSBraXQocHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpKTsKKyAgICByZXR1cm4gcHJpdi0+b3JpZ2luOworfQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmZyYW1lLmgKaW5kZXggN2FiMzA5Ny4uM2RmZjJjMiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5oCkBAIC0xNTksMTAgKzE1OSwxMyBAQCBXRUJLSVRfQVBJIEd0a1BvbGljeVR5
cGUKIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kgICAoV2Vi
S2l0V2ViRnJhbWUgICAgICAgICpmcmFtZSk7CiAKIFdFQktJVF9BUEkgV2ViS2l0V2ViRGF0YVNv
dXJjZSAqCi13ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZSAgICAoV2ViS2l0V2ViRnJh
bWUgICAgICAgKmZyYW1lKTsKK3dlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlICAgICAg
ICAgICAgIChXZWJLaXRXZWJGcmFtZSAgICAgICAqZnJhbWUpOwogCiBXRUJLSVRfQVBJIFdlYktp
dFdlYkRhdGFTb3VyY2UgKgotd2Via2l0X3dlYl9mcmFtZV9nZXRfcHJvdmlzaW9uYWxfZGF0YV9z
b3VyY2UgKFdlYktpdFdlYkZyYW1lICpmcmFtZSk7Cit3ZWJraXRfd2ViX2ZyYW1lX2dldF9wcm92
aXNpb25hbF9kYXRhX3NvdXJjZSAoV2ViS2l0V2ViRnJhbWUgICAgICAgKmZyYW1lKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRTZWN1cml0eU9yaWdpbioKK3dlYmtpdF93ZWJfZnJhbWVfZ2V0X3NlY3Vy
aXR5X29yaWdpbiAgICAgICAgIChXZWJLaXRXZWJGcmFtZSAgICAgICAqZnJhbWUpOwogCiBHX0VO
RF9ERUNMUwogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDRjOGZjYTEuLmM3
OTYzN2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisr
KyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xNDQsNiArMTQ0LDcg
QEAgZW51bSB7CiAgICAgQ0xPU0VfV0VCX1ZJRVcsCiAgICAgVU5ETywKICAgICBSRURPLAorICAg
IERBVEFCQVNFX1FVT1RBX0VYQ0VFREVELAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xOTUy
LDYgKzE5NTMsMjggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2Vi
S2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBHVEtfVFlQRV9XSURH
RVQsIDMsCiAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVf
SEFTSF9UQUJMRSk7CiAKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpkYXRhYmFzZS1x
dW90YS1leGNlZWRlZAorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCB3aGljaCByZWNlaXZl
ZCB0aGUgc2lnbmFsCisgICAgICogQGZyYW1lOiB0aGUgcmVsZXZhbnQgZnJhbWUKKyAgICAgKiBA
ZGF0YWJhc2U6IHRoZSAjV2ViS2l0V2ViRGF0YWJhc2Ugd2hpY2ggZXhjZWVkZWQgdGhlIHF1b3Rh
IG9mIGl0cyAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0
V2ViVmlldzo6ZGF0YWJhc2UtZXhjZWVkZWQtcXVvdGEgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3
aGVuCisgICAgICogYSBXZWIgRGF0YWJhc2UgZXhjZWVkcyB0aGUgcXVvdGEgb2YgaXRzIHNlY3Vy
aXR5IG9yaWdpbi4gVGhpcyBzaWduYWwKKyAgICAgKiBtYXkgYmUgdXNlZCB0byBpbmNyZWFzZSB0
aGUgc2l6ZSBvZiB0aGUgcXVvdGEgYmVmb3JlIHRoZSBvcmlnaW5hdGluZworICAgICAqIG9wZXJh
dGlvbiBmYWlscy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjEuMTQKKyAgICAgKi8KKyAgICB3
ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tEQVRBQkFTRV9RVU9UQV9FWENFRURFRF0gPSBnX3NpZ25h
bF9uZXcoImRhdGFiYXNlLXF1b3RhLWV4Y2VlZGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKSAoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1Rf
T0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHX1RZUEVf
T0JKRUNULCBHX1RZUEVfT0JKRUNUKTsKKwogICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25z
IG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE4Y2RjYmUuLjEwNTMzODcgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0wOS0wMyAgTWFydGluIFJvYmluc29uICA8bWFydGlu
LmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR3RrXSBFeHBvc2UgYSBkYXRhYmFzZSBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODk5CisKKyAgICAgICAg
RXhwb3NlIGFuIEhUTUw1IGRhdGFiYXNlIEFQSSBmb3IgR1RLKy4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChzZXREZWZhdWx0c1Rv
Q29uc2lzdGVudFN0YXRlVmFsdWVzRm9yVGVzdGluZyk6CisgICAgICAgIChkYXRhYmFzZVF1b3Rh
RXhjZWVkZWQpOgorICAgICAgICAoY3JlYXRlV2ViVmlldyk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbik6CisKIDIwMDktMDkt
MDMgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggYWY0NTM1OS4uNmRkYzMyNCAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBA
IC0zNzUsNiArMzc1LDEwIEBAIHN0YXRpYyB2b2lkIHNldERlZmF1bHRzVG9Db25zaXN0ZW50U3Rh
dGVWYWx1ZXNGb3JUZXN0aW5nKCkKICNpZiBQTEFURk9STShYMTEpCiAgICAgd2Via2l0X3dlYl9z
ZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh3ZWJWaWV3LCBURVNUX1BMVUdJTl9E
SVIpOwogI2VuZGlmCisKKyAgICBnY2hhciogZGF0YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2Zp
bGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgImd0a3dlYmtpdGRydCIsICJkYXRhYmFzZXMi
LCBOVUxMKTsKKyAgICB3ZWJraXRfc2V0X3dlYl9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aChkYXRh
YmFzZURpcmVjdG9yeSk7CisgICAgZ19mcmVlKGRhdGFiYXNlRGlyZWN0b3J5KTsKIH0KIAogc3Rh
dGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCkBAIC01OTcsNiAr
NjAxLDIzIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Q2xvc2UoV2ViS2l0V2ViVmlldyogdmll
dykKICAgICByZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIHZvaWQgZGF0YWJhc2VRdW90YUV4Y2Vl
ZGVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgV2ViS2l0V2Vi
RGF0YWJhc2UgKmRhdGFiYXNlKQoreworICAgIEFTU0VSVCh2aWV3KTsKKyAgICBBU1NFUlQoZnJh
bWUpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiog
b3JpZ2luID0gd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfc2VjdXJpdHlfb3JpZ2luKGRhdGFiYXNl
KTsKKyAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3Mo
KSkgeworICAgICAgICBwcmludGYoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNl
ZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp7JXMsICVzLCAlaX0gZGF0YWJhc2U6
JXNcbiIsCisgICAgICAgICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChv
cmlnaW4pLAorICAgICAgICAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmln
aW4pLAorICAgICAgICAgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4p
LAorICAgICAgICAgICAgd2Via2l0X3dlYl9kYXRhYmFzZV9nZXRfbmFtZShkYXRhYmFzZSkpOwor
ICAgIH0KKyAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEo
b3JpZ2luLCA1ICogMTAyNCAqIDEwMjQpOworfQorCiAKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRXZWJGcmFtZSopOwogCkBAIC02MjEs
NiArNjQyLDcgQEAgc3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZVdlYlZpZXcoKQogICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6c3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCB3ZWJWaWV3
U3RhdHVzQmFyVGV4dENoYW5nZWQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpj
cmVhdGUtd2ViLXZpZXciLCB3ZWJWaWV3Q3JlYXRlLCAwLAogICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6Y2xvc2Utd2ViLXZpZXciLCB3ZWJWaWV3Q2xvc2UsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjpkYXRhYmFzZS1xdW90YS1leGNlZWRlZCIsIGRhdGFiYXNlUXVvdGFF
eGNlZWRlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogCiAgICAgcmV0dXJuIHZp
ZXc7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVz
dENvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRleCA1ZGQ5NzVlLi4wOWU0ZTY0IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsu
Y3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJv
bGxlckd0ay5jcHAKQEAgLTM2OCwxMiArMzY4LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIAogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKCk7CiB9CiAgCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSkKLXsgICAgCi0gICAgLy8gRklYTUU6IGltcGxlbWVudAoreworICAgIFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW4obWFp
bkZyYW1lKTsKKyAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVv
dGEob3JpZ2luLCBxdW90YSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFw
cENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCi0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="20059"
          type_id="1"
          status="+"
          setter="jmalonzo"
    />
    <flag name="commit-queue"
          id="20062"
          type_id="3"
          status="-"
          setter="jmalonzo"
    />
          </attachment>
      

    </bug>

</bugzilla>