<?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>67660</bug_id>
          
          <creation_ts>2011-09-06 11:22:47 -0700</creation_ts>
          <short_desc>[GTK] Add a way to expose well known names for items in the default context menu</short_desc>
          <delta_ts>2012-03-23 04:14:33 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>49904</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>462687</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-06 11:22:47 -0700</bug_when>
    <thetext>It would make easier to create a custom context menu by using the default one, instead of creating new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462693</commentid>
    <comment_count>1</comment_count>
      <attachid>106450</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-06 11:28:13 -0700</bug_when>
    <thetext>Created attachment 106450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463094</commentid>
    <comment_count>2</comment_count>
      <attachid>106450</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-06 19:46:13 -0700</bug_when>
    <thetext>Comment on attachment 106450
Patch

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

I like this patch a lot. I think it has the potential to remove a *ton* of code from Epiphany and other WebKitGTK+ clients. I&apos;m giving the first r+ here, but we need one more to approve the new API. Also, I think this same approach should be used for WebKit2.

&gt; Source/WebKit/gtk/ChangeLog:3
&gt; +        Add webkit_context_menu_item_get_action

I think this one is extra...it should be part of the description below.

&gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:113
&gt; +        g_object_set_data(G_OBJECT(bidiMenuItem.gtkAction()), &quot;gtk-unicode-menu-entry&quot;, (gpointer)&amp;bidi_menu_entries[i]);

I&apos;m almost certain you shouldn&apos;t need to cast to gpointer here. If you do though, you should use C++ style casts.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:306
&gt; + * can be used to know the items present in the default context menu.

know -&gt; determine

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:308
&gt; + * WebKitWebView:context-menu signal:

The second : should be a &apos;.&apos;

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:340
&gt; + *     GList* items = gtk_container_get_children (GTK_CONTAINER (default_menu));
&gt; + *     GList* l;
&gt; + *     GtkAction *action;
&gt; + *
&gt; + *     for (l = items; l; l = g_list_next (l)) {
&gt; + *         GtkMenuItem* item = (GtkMenuItem *)l-&gt;data;
&gt; + *
&gt; + *         if (GTK_IS_SEPARATOR_MENU_ITEM (item)) {
&gt; + *             /&amp;ast; It&apos;s  separator, do nothing &amp;ast;/
&gt; + *             continue;
&gt; + *         }
&gt; + *
&gt; + *         switch (webkit_context_menu_item_get_action (item)) {
&gt; + *         case WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION:
&gt; + *             /&amp;ast; No action for this item &amp;ast;/
&gt; + *             break;
&gt; + *         /&amp;ast; Don&apos;t allow to ope links from context menu &amp;ast;/
&gt; + *         case WEBKIT_CONTEXT_MENU_ACTION_OPEN_LINK:
&gt; + *         case WEBKIT_CONTEXT_MENU_ACTION_OPEN_LINK_IN_NEW_WINDOW:
&gt; + *             action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (item));
&gt; + *             gtk_action_set_sensitive (action, FALSE);
&gt; + *             break;

Awesome documentation.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:346
&gt; + *             /&amp;ast; Do somethig with submenu &amp;ast;/

Hrm. Maybe expand this comment. Can the embedder crawl this menu too?

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:362
&gt; +WebKitContextMenuAction webkit_context_menu_item_get_action (GtkMenuItem* item)

Extra space after webkit_context_menu_item_get_action.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463202</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-07 00:13:33 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 106450 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106450&amp;action=review
&gt; 
&gt; I like this patch a lot. I think it has the potential to remove a *ton* of code from Epiphany and other WebKitGTK+ clients. I&apos;m giving the first r+ here, but we need one more to approve the new API. Also, I think this same approach should be used for WebKit2.
&gt; 
&gt; &gt; Source/WebKit/gtk/ChangeLog:3
&gt; &gt; +        Add webkit_context_menu_item_get_action
&gt; 
&gt; I think this one is extra...it should be part of the description below.

Yes, it&apos;s the git commit message that prepare-Changelog leaves there, and I forgot to remove it :-P

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:113
&gt; &gt; +        g_object_set_data(G_OBJECT(bidiMenuItem.gtkAction()), &quot;gtk-unicode-menu-entry&quot;, (gpointer)&amp;bidi_menu_entries[i]);
&gt; 
&gt; I&apos;m almost certain you shouldn&apos;t need to cast to gpointer here. If you do though, you should use C++ style casts.

This code was already there, I&apos;ll check if we can avoid the cast or use a C++ style cast.

&gt; &gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:306
&gt; &gt; + * can be used to know the items present in the default context menu.
&gt; 
&gt; know -&gt; determine

Ok.

&gt; &gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:308
&gt; &gt; + * WebKitWebView:context-menu signal:
&gt; 
&gt; The second : should be a &apos;.&apos;

Ok.

&gt; &gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:340
&gt; &gt; + *     GList* items = gtk_container_get_children (GTK_CONTAINER (default_menu));
&gt; &gt; + *     GList* l;
&gt; &gt; + *     GtkAction *action;
&gt; &gt; + *
&gt; &gt; + *     for (l = items; l; l = g_list_next (l)) {
&gt; &gt; + *         GtkMenuItem* item = (GtkMenuItem *)l-&gt;data;
&gt; &gt; + *
&gt; &gt; + *         if (GTK_IS_SEPARATOR_MENU_ITEM (item)) {
&gt; &gt; + *             /&amp;ast; It&apos;s  separator, do nothing &amp;ast;/
&gt; &gt; + *             continue;
&gt; &gt; + *         }
&gt; &gt; + *
&gt; &gt; + *         switch (webkit_context_menu_item_get_action (item)) {
&gt; &gt; + *         case WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION:
&gt; &gt; + *             /&amp;ast; No action for this item &amp;ast;/
&gt; &gt; + *             break;
&gt; &gt; + *         /&amp;ast; Don&apos;t allow to ope links from context menu &amp;ast;/
&gt; &gt; + *         case WEBKIT_CONTEXT_MENU_ACTION_OPEN_LINK:
&gt; &gt; + *         case WEBKIT_CONTEXT_MENU_ACTION_OPEN_LINK_IN_NEW_WINDOW:
&gt; &gt; + *             action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (item));
&gt; &gt; + *             gtk_action_set_sensitive (action, FALSE);
&gt; &gt; + *             break;
&gt; 
&gt; Awesome documentation.
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:346
&gt; &gt; + *             /&amp;ast; Do somethig with submenu &amp;ast;/
&gt; 
&gt; Hrm. Maybe expand this comment. Can the embedder crawl this menu too?

Right, I&apos;ll add an example of how to add a new menu item.

&gt; &gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:362
&gt; &gt; +WebKitContextMenuAction webkit_context_menu_item_get_action (GtkMenuItem* item)
&gt; 
&gt; Extra space after webkit_context_menu_item_get_action.

Ok.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463329</commentid>
    <comment_count>4</comment_count>
      <attachid>106579</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-07 06:45:18 -0700</bug_when>
    <thetext>Created attachment 106579
Updated patch

It fixes the issues pointed out by Martin (expect the cast, after fighting with C++ casts without any sucess I finally gave up), and it also adds a tests case for the context menu using the new api.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464148</commentid>
    <comment_count>5</comment_count>
      <attachid>106760</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-08 10:39:06 -0700</bug_when>
    <thetext>Created attachment 106760
Patch removing need for const_cast</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558558</commentid>
    <comment_count>6</comment_count>
      <attachid>106760</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-16 14:54:48 -0800</bug_when>
    <thetext>Comment on attachment 106760
Patch removing need for const_cast

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

You have my nod.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:336
&gt; + *         /&amp;ast; Don&apos;t allow to ope links from context menu &amp;ast;/

s/ope/open/

&gt; Source/WebKit/gtk/webkit/webkitglobals.h:59
&gt; + * Since: 1.5.3

Will have to update the since tag =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558600</commentid>
    <comment_count>7</comment_count>
      <attachid>106760</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-16 15:33:34 -0800</bug_when>
    <thetext>Comment on attachment 106760
Patch removing need for const_cast

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

Looks good! Let&apos;s do something like this for WebKit2 as well.

&gt; Source/WebKit/gtk/tests/testcontextmenu.c:36
&gt; +static TestInfo* testInfoNew(const char* data, guint flag)

Many of the asterisks are in the wrong place in this file. Can you just fix all those before landing?

&gt; Source/WebKit/gtk/tests/testcontextmenu.c:40
&gt; +    TestInfo* info;
&gt; +
&gt; +    info = g_slice_new(TestInfo);

Collapse this into one line.

&gt; Source/WebKit/gtk/tests/testcontextmenu.c:102
&gt; +    guint context;
&gt; +    GList* items;
&gt; +    GList* iter;

I would just define these where you first use them.

&gt; Source/WebKit/gtk/tests/testcontextmenu.c:133
&gt; +        break;
&gt; +
&gt; +    case WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE:

Extra newline here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559076</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-17 02:49:08 -0800</bug_when>
    <thetext>I can&apos;t land this yet, it depends on bug #49904.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586214</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-23 04:14:33 -0700</bug_when>
    <thetext>Committed r111847: &lt;http://trac.webkit.org/changeset/111847&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106450</attachid>
            <date>2011-09-06 11:28:13 -0700</date>
            <delta_ts>2011-09-07 06:45:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>context-menu-item-action.diff</filename>
            <type>text/plain</type>
            <size>14749</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCBlZjIwZGVlLi4yNmUxNDExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTEtMDktMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0
X2FjdGlvbgorCisgICAgICAgIFtHVEtdIEFkZCBhIHdheSB0byBleHBvc2Ugd2VsbCBrbm93biBu
YW1lcyBmb3IgaXRlbXMgaW4gdGhlIGRlZmF1bHQgY29udGV4dCBtZW51CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzY2MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXRDb250ZXh0TWVudUFj
dGlvbiBlbnVtIGNvbnRhaW5pbmcgYWxsIHBvc3NpYmxlIGNvbnRleHQKKyAgICAgICAgbWVudSBp
dGVtIGFjdGlvbnMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmlucHV0TWV0aG9kc01lbnVJdGVtKTogVXNlIFdl
YkNvcmUgY29udGV4dCBtZW51IGNsYXNzZXMKKyAgICAgICAgdG8gY3JlYXRlIHRoZSBjb250ZXh0
IG1lbnUgYW5kIGl0cyBpdGVtcyB0byBtYWtlIHN1cmUgYWxsIGl0ZW1zCisgICAgICAgIGhhdmUg
YSBHdGtBY3Rpb24gYXNzb2NpYXRlZC4KKyAgICAgICAgKFdlYktpdDo6aW5zZXJ0Q29udHJvbENo
YXJhY3Rlcik6CisgICAgICAgIChXZWJLaXQ6OnVuaWNvZGVNZW51SXRlbSk6IERpdHRvLgorICAg
ICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKyAgICAgICAgKHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9nZXRfYWN0aW9uKTogUmV0dXJuIHRoZQorICAgICAgICBXZWJLaXRDb250ZXh0
TWVudUFjdGlvbiBmb3IgdGhlIGdpdmVuIGNvbnRleHQgbWVudSBpdGVtLgorICAgICAgICAqIHdl
YmtpdC93ZWJraXRnbG9iYWxzLmg6CisKIDIwMTEtMDgtMzAgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHI5NDE0Miwgcjk0MTQ0LCByOTQxNDUsIGFuZCByOTQxNDguCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKaW5k
ZXggZDljNTlkMC4uNzE0M2E4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcApAQCAtNTgsMTYgKzU4LDE0
IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGlucHV0TWV0aG9kc01lbnVJdGVtIChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgR3RrV2lkZ2V0
KiBtZW51aXRlbSA9IGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X3dpdGhfbW5lbW9uaWMoCi0gICAg
ICAgIF8oIklucHV0IF9NZXRob2RzIikpOwotCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHBy
aXYgPSB3ZWJWaWV3LT5wcml2OwotICAgIEd0a1dpZGdldCogaW1Db250ZXh0TWVudSA9IGd0a19t
ZW51X25ldygpOwotICAgIGd0a19pbV9tdWx0aWNvbnRleHRfYXBwZW5kX21lbnVpdGVtcyhHVEtf
SU1fTVVMVElDT05URVhUKHByaXYtPmltQ29udGV4dC5nZXQoKSksIEdUS19NRU5VX1NIRUxMKGlt
Q29udGV4dE1lbnUpKTsKKyAgICBDb250ZXh0TWVudSBpbUNvbnRleHRNZW51OworICAgIGd0a19p
bV9tdWx0aWNvbnRleHRfYXBwZW5kX21lbnVpdGVtcyhHVEtfSU1fTVVMVElDT05URVhUKHByaXYt
PmltQ29udGV4dC5nZXQoKSksIEdUS19NRU5VX1NIRUxMKGltQ29udGV4dE1lbnUucGxhdGZvcm1E
ZXNjcmlwdGlvbigpKSk7CiAKLSAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KEdUS19NRU5V
X0lURU0obWVudWl0ZW0pLCBpbUNvbnRleHRNZW51KTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbWVu
dUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzLCBTdHJpbmc6
OmZyb21VVEY4KF8oIklucHV0IF9NZXRob2RzIikpLCAmaW1Db250ZXh0TWVudSk7CisgICAgaW1D
b250ZXh0TWVudS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCi0gICAgcmV0dXJuIG1l
bnVpdGVtOworICAgIHJldHVybiBHVEtfV0lER0VUKG1lbnVJdGVtLnJlbGVhc2VQbGF0Zm9ybURl
c2NyaXB0aW9uKCkpOwogfQogCiAvLyBWYWx1ZXMgdGFrZW4gZnJvbSBndGt0ZXh0dXRpbC5jCkBA
IC04OCw3ICs4Niw3IEBAIHN0YXRpYyBjb25zdCBHdGtVbmljb2RlTWVudUVudHJ5IGJpZGlfbWVu
dV9lbnRyaWVzW10gPSB7CiAgIHsgTl8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIpLCAw
eDIwMEMgfQogfTsKIAotc3RhdGljIHZvaWQgaW5zZXJ0Q29udHJvbENoYXJhY3RlcihHdGtXaWRn
ZXQqIHdpZGdldCkKK3N0YXRpYyB2b2lkIGluc2VydENvbnRyb2xDaGFyYWN0ZXIoR3RrQWN0aW9u
KiB3aWRnZXQpCiB7CiAgICAgLy8gR3RrVW5pY29kZU1lbnVFbnRyeSogZW50cnkgPSAoR3RrVW5p
Y29kZU1lbnVFbnRyeSopZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgImd0ay11
bmljb2RlLW1lbnUtZW50cnkiKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMTA2LDI0ICsx
MDQsMjEgQEAgc3RhdGljIEd0a1dpZGdldCogdW5pY29kZU1lbnVJdGVtKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBHdGtXaWRnZXQq
IG1lbnVpdGVtID0gZ3RrX2ltYWdlX21lbnVfaXRlbV9uZXdfd2l0aF9tbmVtb25pYygKLSAgICAg
ICAgXygiX0luc2VydCBVbmljb2RlIENvbnRyb2wgQ2hhcmFjdGVyIikpOwotCi0gICAgR3RrV2lk
Z2V0KiB1bmljb2RlQ29udGV4dE1lbnUgPSBndGtfbWVudV9uZXcoKTsKKyAgICBDb250ZXh0TWVu
dSB1bmljb2RlQ29udGV4dE1lbnU7CiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBp
IDwgR19OX0VMRU1FTlRTKGJpZGlfbWVudV9lbnRyaWVzKTsgaSsrKSB7Ci0gICAgICAgIEd0a1dp
ZGdldCogbWVudWl0ZW0gPSBndGtfbWVudV9pdGVtX25ld193aXRoX21uZW1vbmljKF8oYmlkaV9t
ZW51X2VudHJpZXNbaV0ubGFiZWwpKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QobWVudWl0ZW0pLCAiZ3RrLXVuaWNvZGUtbWVudS1lbnRyeSIsIChncG9pbnRlcikmYmlkaV9t
ZW51X2VudHJpZXNbaV0pOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1lbnVpdGVtLCAiYWN0
aXZhdGUiLCBHX0NBTExCQUNLKGluc2VydENvbnRyb2xDaGFyYWN0ZXIpLCAwKTsKLSAgICAgICAg
Z3RrX3dpZGdldF9zaG93KG1lbnVpdGVtKTsKLSAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5k
KEdUS19NRU5VX1NIRUxMKHVuaWNvZGVDb250ZXh0TWVudSksIG1lbnVpdGVtKTsKLSAgICAgICAg
Ly8gRklYTUU6IE1ha2UgdGhlIGl0ZW0gc2Vuc2l0aXZlIGFzIGluc2VydENvbnRyb2xDaGFyYWN0
ZXIoKSBpcyBpbXBsZW1lbnRlZAotICAgICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUobWVu
dWl0ZW0sIEZBTFNFKTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlIGl0ZW0gc2Vuc2l0aXZl
IGFzIGluc2VydENvbnRyb2xDaGFyYWN0ZXIoKSBpcyBpbXBsZW1lbnRlZCBhbmQgYWRkIGJpZGkg
aXRlbXMgdG8gQ29udGV4dE1lbnVBY3Rpb24gZW51bS4KKyAgICAgICAgLy8gRm9yIG5vdyB3ZSBj
cmVhdGUgYSBtZW51IGl0ZW0gd2l0aCBubyBhY3Rpb24uCisgICAgICAgIENvbnRleHRNZW51SXRl
bSBiaWRpTWVudUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIFN0
cmluZzo6ZnJvbVVURjgoXyhiaWRpX21lbnVfZW50cmllc1tpXS5sYWJlbCkpLCBmYWxzZSwgZmFs
c2UpOworICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChiaWRpTWVudUl0ZW0uZ3Rr
QWN0aW9uKCkpLCAiZ3RrLXVuaWNvZGUtbWVudS1lbnRyeSIsIChncG9pbnRlcikmYmlkaV9tZW51
X2VudHJpZXNbaV0pOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGJpZGlNZW51SXRlbS5ndGtB
Y3Rpb24oKSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhpbnNlcnRDb250cm9sQ2hhcmFjdGVyKSwg
MCk7CisgICAgICAgIHVuaWNvZGVDb250ZXh0TWVudS5hcHBlbmRJdGVtKGJpZGlNZW51SXRlbSk7
CiAgICAgfQogCi0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShHVEtfTUVOVV9JVEVNKG1l
bnVpdGVtKSwgdW5pY29kZUNvbnRleHRNZW51KTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbWVudUl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZSwgU3RyaW5nOjpmcm9tVVRG
OChfKCJfSW5zZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKSksICZ1bmljb2RlQ29udGV4
dE1lbnUpOworICAgIHVuaWNvZGVDb250ZXh0TWVudS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlv
bigpOwogCi0gICAgcmV0dXJuIG1lbnVpdGVtOworICAgIHJldHVybiBHVEtfV0lER0VUKG1lbnVJ
dGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwogfQogCiBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMo
Q29udGV4dE1lbnUqIG1lbnUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFs
cy5jcHAKaW5kZXggMzliZWZiMy4uMDcwOGMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRnbG9iYWxzLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb250
ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0R3RrLmgiCiAj
aW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIkdSZWZQdHIuaCIKQEAgLTI5Nyw2ICsyOTgs
MTU0IEBAIHZvaWQgd2Via2l0X3NldF90ZXh0X2NoZWNrZXIoR09iamVjdCogY2hlY2tlcikKICAg
ICB0ZXh0Q2hlY2tlciA9IGNoZWNrZXIgPyBXRUJLSVRfU1BFTExfQ0hFQ0tFUihjaGVja2VyKSA6
IDA7CiB9CiAKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb246Cisg
KiBAaXRlbTogYSAjR3RrTWVudUl0ZW0gb2YgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51CisgKgor
ICogUmV0dXJucyB0aGUgI1dlYktpdENvbnRleHRNZW51QWN0aW9uIG9mIHRoZSBnaXZlbiBAaXRl
bS4gVGhpcyBmdW5jdGlvbgorICogY2FuIGJlIHVzZWQgdG8ga25vdyB0aGUgaXRlbXMgcHJlc2Vu
dCBpbiB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUuCisgKiBJbiBvcmRlciB0byBpbnNwZWN0IHRo
ZSBkZWZhdWx0IGNvbnRleHQgbWVudSwgeW91IHNob3VsZCBjb25uZWN0IHRvCisgKiBXZWJLaXRX
ZWJWaWV3OmNvbnRleHQtbWVudSBzaWduYWw6CisgKgorICogPGV4YW1wbGU+CisgKiA8dGl0bGU+
SW5zcGVjdGluZyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnU8L3RpdGxlPgorICogPHByb2dyYW1s
aXN0aW5nPgorICogc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2IgKFdlYktpdFdlYlZpZXcg
ICAgICAgKndlYlZpZXcsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrV2lk
Z2V0ICAgICAgICAgICAqZGVmYXVsdF9tZW51LAorICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCwKKyAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICBrZXlib2FyZF9tb2Rl
LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAg
IHVzZXJfZGF0YSkKKyAqIHsKKyAqICAgICBHTGlzdCogaXRlbXMgPSBndGtfY29udGFpbmVyX2dl
dF9jaGlsZHJlbiAoR1RLX0NPTlRBSU5FUiAoZGVmYXVsdF9tZW51KSk7CisgKiAgICAgR0xpc3Qq
IGw7CisgKiAgICAgR3RrQWN0aW9uICphY3Rpb247CisgKgorICogICAgIGZvciAobCA9IGl0ZW1z
OyBsOyBsID0gZ19saXN0X25leHQgKGwpKSB7CisgKiAgICAgICAgIEd0a01lbnVJdGVtKiBpdGVt
ID0gKEd0a01lbnVJdGVtICopbC0+ZGF0YTsKKyAqCisgKiAgICAgICAgIGlmIChHVEtfSVNfU0VQ
QVJBVE9SX01FTlVfSVRFTSAoaXRlbSkpIHsKKyAqICAgICAgICAgICAgIC8mYXN0OyBJdCdzICBz
ZXBhcmF0b3IsIGRvIG5vdGhpbmcgJmFzdDsvCisgKiAgICAgICAgICAgICBjb250aW51ZTsKKyAq
ICAgICAgICAgfQorICoKKyAqICAgICAgICAgc3dpdGNoICh3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fZ2V0X2FjdGlvbiAoaXRlbSkpIHsKKyAqICAgICAgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9OT19BQ1RJT046CisgKiAgICAgICAgICAgICAvJmFzdDsgTm8gYWN0aW9uIGZv
ciB0aGlzIGl0ZW0gJmFzdDsvCisgKiAgICAgICAgICAgICBicmVhazsKKyAqICAgICAgICAgLyZh
c3Q7IERvbid0IGFsbG93IHRvIG9wZSBsaW5rcyBmcm9tIGNvbnRleHQgbWVudSAmYXN0Oy8KKyAq
ICAgICAgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTks6CisgKiAg
ICAgICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19X
SU5ET1c6CisgKiAgICAgICAgICAgICBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0
ZWRfYWN0aW9uIChHVEtfQUNUSVZBVEFCTEUgKGl0ZW0pKTsKKyAqICAgICAgICAgICAgIGd0a19h
Y3Rpb25fc2V0X3NlbnNpdGl2ZSAoYWN0aW9uLCBGQUxTRSk7CisgKiAgICAgICAgICAgICBicmVh
azsKKyAqICAgICAgICAgZGVmYXVsdDoKKyAqICAgICAgICAgICAgIGJyZWFrOworICogICAgICAg
ICB9CisgKgorICogICAgICAgICBpZiAoZ3RrX21lbnVfaXRlbV9nZXRfc3VibWVudSAoaXRlbSkp
IHsKKyAqICAgICAgICAgICAgIC8mYXN0OyBEbyBzb21ldGhpZyB3aXRoIHN1Ym1lbnUgJmFzdDsv
CisgKiAgICAgICAgIH0KKyAqICAgICB9CisgKgorICogICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsK
KyAqIH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKiA8L2V4YW1wbGU+CisgKgorICogTm90ZSB0
aGF0IHlvdSBjYW4gZ2V0IHRoZSBHdGtBY3Rpb24gb2YgYW55IGl0ZW0gaW4gdGhlIGRlZmF1bHQg
Y29udGV4dCBtZW51IHdpdGgKKyAqIGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24o
KS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gb2Yg
dGhlIGdpdmVuIEBpdGVtCisgKgorICogU2luY2U6IDEuNS4zCisgKiovCitXZWJLaXRDb250ZXh0
TWVudUFjdGlvbiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbiAoR3RrTWVudUl0
ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR1RLX0lTX01FTlVfSVRFTShp
dGVtKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OKTsKKworICAgIENvbnRl
eHRNZW51SXRlbSBtZW51SXRlbShpdGVtKTsKKyAgICBzd2l0Y2ggKG1lbnVJdGVtLmFjdGlvbigp
KSB7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjoKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTjsKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9MSU5LOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5l
d1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5f
TElOS19JTl9ORVdfV0lORE9XOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRM
aW5rVG9EaXNrOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9X
TkxPQURfTElOS19UT19ESVNLOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtU
b0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NP
UFlfTElOS19UT19DTElQQk9BUkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1h
Z2VJbk5ld1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X09QRU5fSU1BR0VfSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkSW1hZ2VUb0Rpc2s6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9ET1dOTE9BRF9JTUFHRV9UT19ESVNLOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q29weUltYWdlVG9DbGlwYm9hcmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEOworICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0ZSQU1FX0lOX05FV19XSU5ET1c7CisgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9HT19CQUNLOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3
YXJkOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FS
RDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
UmVsb2FkOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FE
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAgcmV0dXJuIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFk7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
dXQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQ7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQYXN0ZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1BBU1RFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRl
OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fREVMRVRFOworICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgorICAgICAgICByZXR1cm4gV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0lucHV0TWV0aG9kczoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0lOUFVUX01FVEhPRFM7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERTsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19HVUVTUzsKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fSUdOT1JFX1NQRUxMSU5HOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
TGVhcm5TcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0xFQVJOX1NQRUxMSU5HOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1h
cjoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9HUkFN
TUFSOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6CisgICAgICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9GT05UX01FTlU7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdCb2xkOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQk9MRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYzoKKyAgICAgICAgcmV0
dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lUQUxJQzsKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1VuZGVybGluZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1VOREVSTElORTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU6Cisg
ICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQ6CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQ7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fTUVESUFfSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxpbmtUb0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTUVESUFfTElOS19UT19DTElQQk9BUkQ7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xT
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wOgorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1A7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKKyAgICAgICAgcmV0
dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU47Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZToKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVlfUEFVU0U7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9NRURJQV9NVVRFOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisgICAgfQorfQorCiB2b2lkIHdlYmtpdEluaXQoKQogewogICAgIHN0
YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2xvYmFscy5oCmluZGV4IGEzMWFhNGMuLjlmZDJjZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
d2Via2l0ZGVmaW5lcy5oIgogI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTUyLDYgKzUz
LDUzIEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX0NBQ0hFX01PREVMX0RPQ1VNRU5UX0JS
T1dTRVIsCiB9IFdlYktpdENhY2hlTW9kZWw7CiAKKy8qCisgKiBXZWJLaXRDb250ZXh0TWVudUFj
dGlvbjoKKyAqCisgKiBTaW5jZTogMS41LjMKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT04gPSAwLAorICAgIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09QRU5fTElOSywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9P
UEVOX0xJTktfSU5fTkVXX1dJTkRPVywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9E
T1dOTE9BRF9MSU5LX1RPX0RJU0ssCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9MSU5LX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVO
X0lNQUdFX0lOX05FV19XSU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9X
TkxPQURfSU1BR0VfVE9fRElTSywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
X0lNQUdFX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
X0lNQUdFX1VSTF9UT19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
T1BFTl9GUkFNRV9JTl9ORVdfV0lORE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0dPX0JBQ0ssCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCwKKyAg
ICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLAorICAgIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1JFTE9BRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZLAor
ICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCwKKyAgICBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9QQVNURSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUs
CisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCwKKyAgICBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTLAorICAgIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1VOSUNPREUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1BFTExJ
TkdfR1VFU1MsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VO
RCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVfU1BFTExJTkcsCisgICAg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTEVBUk5fU1BFTExJTkcsCisgICAgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX0dSQU1NQVIsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fRk9OVF9NRU5VLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JPTEQs
CisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDLAorICAgIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1VOREVSTElORSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PVVRMSU5FLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVO
VCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX01FRElBX0lOX05FV19XSU5E
T1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9NRURJQV9MSU5LX1RPX0NM
SVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09O
VFJPTFMsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1As
CisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTiwK
KyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZX1BBVVNFLAorICAgIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEUKK30gV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb247CisKIFdFQktJVF9BUEkgU291cFNlc3Npb24qCiB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vz
c2lvbiAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiAKQEAgLTczLDYgKzEyMSw5IEBAIHdl
YmtpdF9nZXRfdGV4dF9jaGVja2VyICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VC
S0lUX0FQSSB2b2lkCiB3ZWJraXRfc2V0X3RleHRfY2hlY2tlciAgICAgICAgICAgICAgICAgICAg
ICAgIChHT2JqZWN0KiAgY2hlY2tlcik7CiAKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb24KK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uICAgICAgICAgICAgKEd0
a01lbnVJdGVtKiBpdGVtKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106579</attachid>
            <date>2011-09-07 06:45:18 -0700</date>
            <delta_ts>2011-09-08 10:38:57 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>context-menu-actions2.diff</filename>
            <type>text/plain</type>
            <size>29280</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCBlZjIwZGVlLi5iMjVjYTE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTEtMDktMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBhIHdheSB0byBleHBvc2Ugd2VsbCBr
bm93biBuYW1lcyBmb3IgaXRlbXMgaW4gdGhlIGRlZmF1bHQgY29udGV4dCBtZW51CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzY2MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXRDb250ZXh0
TWVudUFjdGlvbiBlbnVtIGNvbnRhaW5pbmcgYWxsIHBvc3NpYmxlIGNvbnRleHQKKyAgICAgICAg
bWVudSBpdGVtIGFjdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBm
aWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVu
dUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmlucHV0TWV0aG9kc01lbnVJdGVtKTog
VXNlIFdlYkNvcmUgY29udGV4dCBtZW51IGNsYXNzZXMKKyAgICAgICAgdG8gY3JlYXRlIHRoZSBj
b250ZXh0IG1lbnUgYW5kIGl0cyBpdGVtcyB0byBtYWtlIHN1cmUgYWxsIGl0ZW1zCisgICAgICAg
IGhhdmUgYSBHdGtBY3Rpb24gYXNzb2NpYXRlZC4KKyAgICAgICAgKFdlYktpdDo6aW5zZXJ0Q29u
dHJvbENoYXJhY3Rlcik6CisgICAgICAgIChXZWJLaXQ6OnVuaWNvZGVNZW51SXRlbSk6IERpdHRv
LgorICAgICAgICAqIHRlc3RzL3Rlc3Rjb250ZXh0bWVudS5jOiBBZGRlZC4KKyAgICAgICAgKHRl
c3RJbmZvTmV3KToKKyAgICAgICAgKHRlc3RJbmZvRGVzdHJveSk6CisgICAgICAgIChjb250ZXh0
TWVudUZpeHR1cmVTZXR1cCk6CisgICAgICAgIChjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik6
CisgICAgICAgIChjaGVja0FjdGlvbik6CisgICAgICAgIChjaGVja0FjdGlvbldpdGhTdWJtZW51
KToKKyAgICAgICAgKGNoZWNrU2VwYXJhdG9yKToKKyAgICAgICAgKGNvbnRleHRNZW51Q2FsbGJh
Y2spOgorICAgICAgICAocHVzaEV2ZW50KToKKyAgICAgICAgKGxvYWRTdGF0dXNDYWxsYmFjayk6
CisgICAgICAgIChtYXBFdmVudENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVudSk6
CisgICAgICAgIChjb250ZXh0TWVudUN1c3RvbUl0ZW1DYWxsYmFjayk6CisgICAgICAgICh0ZXN0
Q29udGV4dE1lbnVDdXN0b21JdGVtKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXRnbG9iYWxzLmNwcDoKKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9n
ZXRfYWN0aW9uKTogUmV0dXJuIHRoZQorICAgICAgICBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBm
b3IgdGhlIGdpdmVuIGNvbnRleHQgbWVudSBpdGVtLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRn
bG9iYWxzLmg6CisKIDIwMTEtMDgtMzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDE0Miwgcjk0
MTQ0LCByOTQxNDUsIGFuZCByOTQxNDguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IDEx
NDFiZWUuLjRjZmVjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC00MjcsNiArNDI3
LDcgQEAgd2Via2l0X3Rlc3RzX2xkZmxhZ3MgPSBcCiAKIFRFU1RfUFJPR1MgKz0gXAogCVByb2dy
YW1zL3VuaXR0ZXN0cy90ZXN0YXBwbGljYXRpb25jYWNoZSBcCisJUHJvZ3JhbXMvdW5pdHRlc3Rz
L3Rlc3Rjb250ZXh0bWVudSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3Rkb21kb2N1bWVudCBc
CiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3Rkb21kb213aW5kb3cgXAogCVByb2dyYW1zL3VuaXR0
ZXN0cy90ZXN0ZG9tbm9kZSBcCkBAIC00NTgsNiArNDU5LDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0YXBwbGljYXRpb25jYWNoZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQ
cm9ncmFtc191bml0dGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERBREQgPSAkKHdlYmtpdF90
ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0YXBwbGljYXRpb25jYWNoZV9MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rj
b250ZXh0bWVudV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRleHRt
ZW51LmMKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJr
aXRfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb250ZXh0bWVudV9MREFE
RCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb250ZXh0
bWVudV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfdW5pdHRl
c3RzX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGRvbWRvY3VtZW50LmMKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdT
ID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rkb21kb2N1
bWVudF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCmluZGV4
IGQ5YzU5ZDAuLjcxNDNhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKQEAgLTU4LDE2ICs1OCwxNCBA
QCBzdGF0aWMgR3RrV2lkZ2V0KiBpbnB1dE1ldGhvZHNNZW51SXRlbSAoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEd0a1dpZGdldCog
bWVudWl0ZW0gPSBndGtfaW1hZ2VfbWVudV9pdGVtX25ld193aXRoX21uZW1vbmljKAotICAgICAg
ICBfKCJJbnB1dCBfTWV0aG9kcyIpKTsKLQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2
ID0gd2ViVmlldy0+cHJpdjsKLSAgICBHdGtXaWRnZXQqIGltQ29udGV4dE1lbnUgPSBndGtfbWVu
dV9uZXcoKTsKLSAgICBndGtfaW1fbXVsdGljb250ZXh0X2FwcGVuZF9tZW51aXRlbXMoR1RLX0lN
X01VTFRJQ09OVEVYVChwcml2LT5pbUNvbnRleHQuZ2V0KCkpLCBHVEtfTUVOVV9TSEVMTChpbUNv
bnRleHRNZW51KSk7CisgICAgQ29udGV4dE1lbnUgaW1Db250ZXh0TWVudTsKKyAgICBndGtfaW1f
bXVsdGljb250ZXh0X2FwcGVuZF9tZW51aXRlbXMoR1RLX0lNX01VTFRJQ09OVEVYVChwcml2LT5p
bUNvbnRleHQuZ2V0KCkpLCBHVEtfTUVOVV9TSEVMTChpbUNvbnRleHRNZW51LnBsYXRmb3JtRGVz
Y3JpcHRpb24oKSkpOwogCi0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShHVEtfTUVOVV9J
VEVNKG1lbnVpdGVtKSwgaW1Db250ZXh0TWVudSk7CisgICAgQ29udGV4dE1lbnVJdGVtIG1lbnVJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kcywgU3RyaW5nOjpm
cm9tVVRGOChfKCJJbnB1dCBfTWV0aG9kcyIpKSwgJmltQ29udGV4dE1lbnUpOworICAgIGltQ29u
dGV4dE1lbnUucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAotICAgIHJldHVybiBtZW51
aXRlbTsKKyAgICByZXR1cm4gR1RLX1dJREdFVChtZW51SXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNj
cmlwdGlvbigpKTsKIH0KIAogLy8gVmFsdWVzIHRha2VuIGZyb20gZ3RrdGV4dHV0aWwuYwpAQCAt
ODgsNyArODYsNyBAQCBzdGF0aWMgY29uc3QgR3RrVW5pY29kZU1lbnVFbnRyeSBiaWRpX21lbnVf
ZW50cmllc1tdID0gewogICB7IE5fKCJaV05KIFplcm8gd2lkdGggX25vbi1qb2luZXIiKSwgMHgy
MDBDIH0KIH07CiAKLXN0YXRpYyB2b2lkIGluc2VydENvbnRyb2xDaGFyYWN0ZXIoR3RrV2lkZ2V0
KiB3aWRnZXQpCitzdGF0aWMgdm9pZCBpbnNlcnRDb250cm9sQ2hhcmFjdGVyKEd0a0FjdGlvbiog
d2lkZ2V0KQogewogICAgIC8vIEd0a1VuaWNvZGVNZW51RW50cnkqIGVudHJ5ID0gKEd0a1VuaWNv
ZGVNZW51RW50cnkqKWdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJndGstdW5p
Y29kZS1tZW51LWVudHJ5Iik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTEwNiwyNCArMTA0
LDIxIEBAIHN0YXRpYyBHdGtXaWRnZXQqIHVuaWNvZGVNZW51SXRlbShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgR3RrV2lkZ2V0KiBt
ZW51aXRlbSA9IGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X3dpdGhfbW5lbW9uaWMoCi0gICAgICAg
IF8oIl9JbnNlcnQgVW5pY29kZSBDb250cm9sIENoYXJhY3RlciIpKTsKLQotICAgIEd0a1dpZGdl
dCogdW5pY29kZUNvbnRleHRNZW51ID0gZ3RrX21lbnVfbmV3KCk7CisgICAgQ29udGV4dE1lbnUg
dW5pY29kZUNvbnRleHRNZW51OwogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8
IEdfTl9FTEVNRU5UUyhiaWRpX21lbnVfZW50cmllcyk7IGkrKykgewotICAgICAgICBHdGtXaWRn
ZXQqIG1lbnVpdGVtID0gZ3RrX21lbnVfaXRlbV9uZXdfd2l0aF9tbmVtb25pYyhfKGJpZGlfbWVu
dV9lbnRyaWVzW2ldLmxhYmVsKSk7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KG1lbnVpdGVtKSwgImd0ay11bmljb2RlLW1lbnUtZW50cnkiLCAoZ3BvaW50ZXIpJmJpZGlfbWVu
dV9lbnRyaWVzW2ldKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtZW51aXRlbSwgImFjdGl2
YXRlIiwgR19DQUxMQkFDSyhpbnNlcnRDb250cm9sQ2hhcmFjdGVyKSwgMCk7Ci0gICAgICAgIGd0
a193aWRnZXRfc2hvdyhtZW51aXRlbSk7Ci0gICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChH
VEtfTUVOVV9TSEVMTCh1bmljb2RlQ29udGV4dE1lbnUpLCBtZW51aXRlbSk7Ci0gICAgICAgIC8v
IEZJWE1FOiBNYWtlIHRoZSBpdGVtIHNlbnNpdGl2ZSBhcyBpbnNlcnRDb250cm9sQ2hhcmFjdGVy
KCkgaXMgaW1wbGVtZW50ZWQKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKG1lbnVp
dGVtLCBGQUxTRSk7CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBpdGVtIHNlbnNpdGl2ZSBh
cyBpbnNlcnRDb250cm9sQ2hhcmFjdGVyKCkgaXMgaW1wbGVtZW50ZWQgYW5kIGFkZCBiaWRpIGl0
ZW1zIHRvIENvbnRleHRNZW51QWN0aW9uIGVudW0uCisgICAgICAgIC8vIEZvciBub3cgd2UgY3Jl
YXRlIGEgbWVudSBpdGVtIHdpdGggbm8gYWN0aW9uLgorICAgICAgICBDb250ZXh0TWVudUl0ZW0g
YmlkaU1lbnVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLCBTdHJp
bmc6OmZyb21VVEY4KF8oYmlkaV9tZW51X2VudHJpZXNbaV0ubGFiZWwpKSwgZmFsc2UsIGZhbHNl
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoYmlkaU1lbnVJdGVtLmd0a0Fj
dGlvbigpKSwgImd0ay11bmljb2RlLW1lbnUtZW50cnkiLCAoZ3BvaW50ZXIpJmJpZGlfbWVudV9l
bnRyaWVzW2ldKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChiaWRpTWVudUl0ZW0uZ3RrQWN0
aW9uKCksICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soaW5zZXJ0Q29udHJvbENoYXJhY3RlciksIDAp
OworICAgICAgICB1bmljb2RlQ29udGV4dE1lbnUuYXBwZW5kSXRlbShiaWRpTWVudUl0ZW0pOwog
ICAgIH0KIAotICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVfSVRFTShtZW51
aXRlbSksIHVuaWNvZGVDb250ZXh0TWVudSk7CisgICAgQ29udGV4dE1lbnVJdGVtIG1lbnVJdGVt
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGUsIFN0cmluZzo6ZnJvbVVURjgo
XygiX0luc2VydCBVbmljb2RlIENvbnRyb2wgQ2hhcmFjdGVyIikpLCAmdW5pY29kZUNvbnRleHRN
ZW51KTsKKyAgICB1bmljb2RlQ29udGV4dE1lbnUucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24o
KTsKIAotICAgIHJldHVybiBtZW51aXRlbTsKKyAgICByZXR1cm4gR1RLX1dJREdFVChtZW51SXRl
bS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKIH0KIAogUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24gQ29udGV4dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKENv
bnRleHRNZW51KiBtZW51KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGNvbnRleHRtZW51LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDA1ZmY2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMKQEAgLTAs
MCArMSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkK
KwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIqIGRhdGE7CisgICAgZ3VpbnQgZmxhZzsKK30g
VGVzdEluZm87CisKK3N0YXRpYyBHTWFpbkxvb3AqIGxvb3A7CisKK3R5cGVkZWYgc3RydWN0IHsK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIFRlc3RJbmZvKiBpbmZvOworfSBDb250
ZXh0TWVudUZpeHR1cmU7CisKK3N0YXRpYyBUZXN0SW5mbyogdGVzdEluZm9OZXcoY29uc3QgY2hh
ciogZGF0YSwgZ3VpbnQgZmxhZykKK3sKKyAgICBUZXN0SW5mbyogaW5mbzsKKworICAgIGluZm8g
PSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7CisgICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEp
OworICAgIGluZm8tPmZsYWcgPSBmbGFnOworCisgICAgcmV0dXJuIGluZm87Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RJbmZvRGVzdHJveShUZXN0SW5mbyogaW5mbykKK3sKKyAgICBnX2ZyZWUoaW5m
by0+ZGF0YSk7CisgICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKK30KKworc3RhdGlj
IHZvaWQgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9u
ZXcoTlVMTCwgVFJVRSk7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKK30K
Kworc3RhdGljIHZvaWQgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24oQ29udGV4dE1lbnVGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYo
Zml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7CisgICAgdGVz
dEluZm9EZXN0cm95KGZpeHR1cmUtPmluZm8pOworfQorCitzdGF0aWMgR0xpc3QqIGNoZWNrQWN0
aW9uKEdMaXN0KiBpdGVyLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAg
R3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAgZ19h
c3NlcnQoR1RLX0lTX01FTlVfSVRFTShpdGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKKworICAgIHJldHVybiBp
dGVyLT5uZXh0OworfQorCitzdGF0aWMgR0xpc3QqIGNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoR0xp
c3QqIGl0ZXIsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKK3sKKyAgICBHdGtNZW51
SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7CisKKyAgICBnX2Fzc2VydChH
VEtfSVNfTUVOVV9JVEVNKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKSA9PSBhY3Rpb24pOworICAgIGdfYXNzZXJ0KEdUS19JU19N
RU5VKGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbSkpKTsKKworICAgIHJldHVybiBpdGVy
LT5uZXh0OworfQorCitzdGF0aWMgR0xpc3QqIGNoZWNrU2VwYXJhdG9yKEdMaXN0KiBpdGVyKQor
eworICAgIEd0a01lbnVJdGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKKwor
ICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pKTsKKworICAgIHJl
dHVybiBpdGVyLT5uZXh0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIGRlZmF1bHRNZW51LCBXZWJLaXRI
aXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBnYm9vbGVhbiBrZXlib2FyZE1vZGUsIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKil1c2VyRGF0
YTsKKyAgICBndWludCBjb250ZXh0OworICAgIEdMaXN0KiBpdGVtczsKKyAgICBHTGlzdCogaXRl
cjsKKworICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICovCisgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShkZWZh
dWx0TWVudSkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KGtleWJvYXJkTW9kZSA9PSBGQUxTRSk7CisKKyAgICBn
X29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Cisg
ICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOworCisgICAgaXRlbXMgPSBndGtfY29u
dGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgc3dp
dGNoIChpbmZvLT5mbGFnKSB7CisgICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRF
WFRfRE9DVU1FTlQ6CisgICAgICAgIGl0ZXIgPSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNoZWNr
QWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOworICAgICAg
ICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09f
Rk9SV0FSRCk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9TVE9QKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVy
KTsKKworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09O
VEVYVF9JTUFHRToKKyAgICAgICAgaXRlciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdf
V0lORE9XKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0spOworICAgICAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxf
VE9fQ0xJUEJPQVJEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEU6Cisg
ICAgICAgIGl0ZXIgPSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlv
bihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZKTsKKyAgICAgICAgaXRlciA9
IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1BBU1RFKTsKKyAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RFTEVURSk7CisgICAgICAgIGl0ZXIgPSBjaGVja1NlcGFyYXRvcihpdGVyKTsKKyAgICAgICAg
aXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVD
VF9BTEwpOworICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3IoaXRlcik7CisgICAgICAgIGl0
ZXIgPSBjaGVja0FjdGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0lOUFVUX01FVEhPRFMpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb25XaXRoU3VibWVu
dShpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklDT0RFKTsKKyAgICAgICAgZ19h
c3NlcnQoIWl0ZXIpOworCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0hJVF9URVNU
X1JFU1VMVF9DT05URVhUX0xJTks6CisgICAgICAgIGl0ZXIgPSBpdGVtczsKKyAgICAgICAgaXRl
ciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElO
Syk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVyk7CisgICAgICAgIGl0ZXIgPSBjaGVja0Fj
dGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9MSU5LX1RPX0RJ
U0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQ09QWV9MSU5LX1RPX0NMSVBCT0FSRCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVy
KTsKKworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBnX2xpc3RfZnJlZShpdGVtcyk7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsK
KworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBwdXNoRXZlbnQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdE
S19CVVRUT05fUFJFU1MpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCisgICAgR2Rr
RGV2aWNlTWFuYWdlciAqZGV2aWNlTWFuYWdlcjsKKyNlbmRpZgorCisgICAgZXZlbnQtPmFueS53
aW5kb3cgPSBnX29iamVjdF9yZWYoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2Vi
VmlldykpKTsKKyAgICBldmVudC0+YW55LnNlbmRfZXZlbnQgPSBGQUxTRTsKKyAgICBldmVudC0+
YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9u
ID0gMzsKKyAgICBldmVudC0+YnV0dG9uLnggPSBldmVudC0+YnV0dG9uLnkgPSA1OworICAgIGV2
ZW50LT5idXR0b24ueF9yb290ID0gZXZlbnQtPmJ1dHRvbi54OworICAgIGV2ZW50LT5idXR0b24u
eV9yb290ID0gZXZlbnQtPmJ1dHRvbi55OworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDAp
CisgICAgZGV2aWNlTWFuYWdlciA9IGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtf
ZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19k
ZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZGV2aWNlTWFuYWdlcik7CisjZW5kaWYK
KworICAgIGdka19ldmVudF9wdXQoZXZlbnQpOworICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsK
K30KKworc3RhdGljIHZvaWQgbG9hZFN0YXR1c0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0TG9hZFN0
YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwor
ICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOworCisgICAgZ19hc3NlcnQoc3Rh
dHVzICE9IFdFQktJVF9MT0FEX0ZBSUxFRCk7CisKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9M
T0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlZpZXcsICJjb250ZXh0LW1lbnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51Q2FsbGJhY2spLCBp
bmZvKTsKKyAgICBwdXNoRXZlbnQod2ViVmlldyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtYXBF
dmVudENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisgICAgQ29udGV4
dE1lbnVGaXh0dXJlKiBmaXh0dXJlID0gKENvbnRleHRNZW51Rml4dHVyZSopZGF0YTsKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+aW5mby0+ZGF0YSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ1dGYtOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8v
Iik7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2Fk
LXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0NhbGxiYWNrKSwgZml4dHVyZS0+aW5mbyk7
CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnUoQ29u
dGV4dE1lbnVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA1MCwgNTAgfTsKKyAgICBHdGtXaWRnZXQg
KndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworCisgICAgZ3RrX3dp
bmRvd19yZXNpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA1MCwgNTApOworICAgIGd0a193aW5kb3df
bW92ZShHVEtfV0lORE9XKHdpbmRvdyksIDAsIDApOworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUt
PndlYlZpZXcpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsIEdf
Q0FMTEJBQ0sobWFwRXZlbnRDYWxsYmFjayksIGZpeHR1cmUpOworICAgIGd0a193aWRnZXRfc2hv
d19hbGwod2luZG93KTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKK30KKworc3RhdGlj
IGdib29sZWFuIGNvbnRleHRNZW51Q3VzdG9tSXRlbUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEd0a1dpZGdldCogZGVmYXVsdE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRl
c3RSZXN1bHQsIGdib29sZWFuIGtleWJvYXJkTW9kZSwgZ3BvaW50ZXIgdXNlckRhdGEpCit7Cisg
ICAgVGVzdEluZm8qIGluZm8gPSAoVGVzdEluZm8qKXVzZXJEYXRhOworICAgIGd1aW50IGNvbnRl
eHQ7CisgICAgR0xpc3QqIGl0ZW1zOworICAgIEdMaXN0KiBpdGVyOworICAgIEd0a1dpZGdldCog
bWVudUl0ZW07CisgICAgR3RrQWN0aW9uKiBhY3Rpb247CisKKyAgICAvKiBDaGVjayBzaWduYWwg
cGFyYW1ldGVycyAqLworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7
CisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZGVmYXVsdE1lbnUpKTsKKyAgICBnX2Fzc2VydChX
RUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydChr
ZXlib2FyZE1vZGUgPT0gRkFMU0UpOworCisgICAgZ19vYmplY3RfZ2V0KGhpdFRlc3RSZXN1bHQs
ICJjb250ZXh0IiwgJmNvbnRleHQsIE5VTEwpOworICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZv
LT5mbGFnKTsKKworICAgIGFjdGlvbiA9IGd0a19hY3Rpb25fbmV3KCJUZXN0QWN0aW9uIiwgIkN1
c3RvbSBBY3Rpb24iLCAiQ3VzdG9tIEFjdGlvbiBUb29sdGlwIiwgTlVMTCk7CisgICAgbWVudUl0
ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uKTsKKyAgICBnX29iamVjdF91
bnJlZihhY3Rpb24pOworCisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxM
KGRlZmF1bHRNZW51KSwgbWVudUl0ZW0pOworICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7
CisKKyAgICBpdGVtcyA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIo
ZGVmYXVsdE1lbnUpKTsKKyAgICBpdGVyID0gaXRlbXM7CisgICAgaXRlciA9IGNoZWNrQWN0aW9u
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOworICAgIGl0ZXIgPSBj
aGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEKTsK
KyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
U1RPUCk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1JFTE9BRCk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX05PX0FDVElPTik7CisgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAg
Z19saXN0X2ZyZWUoaXRlbXMpOworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51Q3VzdG9tSXRlbShD
b250ZXh0TWVudUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBH
dGtXaWRnZXQgKndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIGd0
a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKKworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5pbmZvLT5kYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInV0Zi04IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6
Ly8iKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJjb250ZXh0LW1l
bnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51Q3VzdG9tSXRlbUNhbGxiYWNrKSwgZml4dHVyZS0+
aW5mbyk7CisgICAgcHVzaEV2ZW50KGZpeHR1cmUtPndlYlZpZXcpOworfQorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ190aHJlYWRfaW5pdChOVUxMKTsKKyAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2Uo
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90
ZXN0Y29udGV4dG1lbnUvZG9jdW1lbnQiLCBDb250ZXh0TWVudUZpeHR1cmUsCisgICAgICAgICAg
ICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+
PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfRE9DVU1FTlQpLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJl
U2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOworICAg
IC8qIFdlIGhhcmRjb2RlIGFsbCBlbGVtZW50cyB0byBiZSBhdCAwLDAgc28gdGhhdCB3ZSBrbm93
IHdoZXJlIHRvIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvaW1hZ2UiLCBDb250ZXh0TWVudUZpeHR1cmUsCisgICAg
ICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGltZyBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NTAgaGVpZ2h0
PTUwPjwvaW1nPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCisgICAgICAgICAgICAgICBjb250
ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVU
ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvZWRpdGFi
bGUiLCBDb250ZXh0TWVudUZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0
bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcg
c2l6ZT0nMzUnPjwvaW5wdXQ+PjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRSksCisgICAgICAg
ICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0
TWVudUZpeHR1cmVUZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4
dG1lbnUvbGluayIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZv
TmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9w
OjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48
L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9MSU5LKSwKKyAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVw
LCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9jdXN0b21pdGVtIiwgQ29udGV4dE1lbnVG
aXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxoMT5XZWJL
aXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKKyAgICAgICAgICAgICAg
IGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtLCBjb250
ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQor
CisjZWxzZQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ19jcml0
aWNhbCgiWW91IHdpbGwgbmVlZCBhdCBsZWFzdCBHVEsrIDIuMTQuMCB0byBydW4gdGhlIHVuaXQg
dGVzdHMuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCmluZGV4IDM5YmVmYjMuLjIyYzc0NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKQEAgLTIzLDYgKzIzLDcgQEAK
IAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQ2hyb21l
LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCiAjaW5jbHVkZSAiRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dEd0ay5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIKICNpbmNsdWRlICJHUmVmUHRy
LmgiCkBAIC0yOTcsNiArMjk4LDE2NSBAQCB2b2lkIHdlYmtpdF9zZXRfdGV4dF9jaGVja2VyKEdP
YmplY3QqIGNoZWNrZXIpCiAgICAgdGV4dENoZWNrZXIgPSBjaGVja2VyID8gV0VCS0lUX1NQRUxM
X0NIRUNLRVIoY2hlY2tlcikgOiAwOwogfQogCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9nZXRfYWN0aW9uOgorICogQGl0ZW06IGEgI0d0a01lbnVJdGVtIG9mIHRoZSBkZWZhdWx0
IGNvbnRleHQgbWVudQorICoKKyAqIFJldHVybnMgdGhlICNXZWJLaXRDb250ZXh0TWVudUFjdGlv
biBvZiB0aGUgZ2l2ZW4gQGl0ZW0uIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSB1c2VkIHRvIGRl
dGVybWluZSB0aGUgaXRlbXMgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUuCisg
KiBJbiBvcmRlciB0byBpbnNwZWN0IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudSwgeW91IHNob3Vs
ZCBjb25uZWN0IHRvCisgKiBXZWJLaXRXZWJWaWV3OmNvbnRleHQtbWVudSBzaWduYWwuCisgKgor
ICogPGV4YW1wbGU+CisgKiA8dGl0bGU+SW5zcGVjdGluZyB0aGUgZGVmYXVsdCBjb250ZXh0IG1l
bnU8L3RpdGxlPgorICogPHByb2dyYW1saXN0aW5nPgorICogc3RhdGljIGdib29sZWFuIGNvbnRl
eHRfbWVudV9jYiAoV2ViS2l0V2ViVmlldyAgICAgICAqd2ViVmlldywKKyAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldCAgICAgICAgICAgKmRlZmF1bHRfbWVudSwK
KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQg
KmhpdF90ZXN0X3Jlc3VsdCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdi
b29sZWFuICAgICAgICAgICAgIGtleWJvYXJkX21vZGUsCisgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICB1c2VyX2RhdGEpCisgKiB7CisgKiAg
ICAgR0xpc3QgKml0ZW1zID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4gKEdUS19DT05UQUlO
RVIgKGRlZmF1bHRfbWVudSkpOworICogICAgIEdMaXN0ICpsOworICogICAgIEd0a0FjdGlvbiAq
YWN0aW9uOworICogICAgIEd0a1dpZGdldCAqc3ViX21lbnU7CisgKgorICogICAgIGZvciAobCA9
IGl0ZW1zOyBsOyBsID0gZ19saXN0X25leHQgKGwpKSB7CisgKiAgICAgICAgIEd0a01lbnVJdGVt
ICppdGVtID0gKEd0a01lbnVJdGVtICopbC0+ZGF0YTsKKyAqCisgKiAgICAgICAgIGlmIChHVEtf
SVNfU0VQQVJBVE9SX01FTlVfSVRFTSAoaXRlbSkpIHsKKyAqICAgICAgICAgICAgIC8mYXN0OyBJ
dCdzICBzZXBhcmF0b3IsIGRvIG5vdGhpbmcgJmFzdDsvCisgKiAgICAgICAgICAgICBjb250aW51
ZTsKKyAqICAgICAgICAgfQorICoKKyAqICAgICAgICAgc3dpdGNoICh3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X2FjdGlvbiAoaXRlbSkpIHsKKyAqICAgICAgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT046CisgKiAgICAgICAgICAgICAvJmFzdDsgTm8gYWN0
aW9uIGZvciB0aGlzIGl0ZW0gJmFzdDsvCisgKiAgICAgICAgICAgICBicmVhazsKKyAqICAgICAg
ICAgLyZhc3Q7IERvbid0IGFsbG93IHRvIG9wZSBsaW5rcyBmcm9tIGNvbnRleHQgbWVudSAmYXN0
Oy8KKyAqICAgICAgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTks6
CisgKiAgICAgICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lO
X05FV19XSU5ET1c6CisgKiAgICAgICAgICAgICBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0
X3JlbGF0ZWRfYWN0aW9uIChHVEtfQUNUSVZBVEFCTEUgKGl0ZW0pKTsKKyAqICAgICAgICAgICAg
IGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZSAoYWN0aW9uLCBGQUxTRSk7CisgKiAgICAgICAgICAg
ICBicmVhazsKKyAqICAgICAgICAgZGVmYXVsdDoKKyAqICAgICAgICAgICAgIGJyZWFrOworICog
ICAgICAgICB9CisgKgorICogICAgICAgICBzdWJfbWVudSA9IGd0a19tZW51X2l0ZW1fZ2V0X3N1
Ym1lbnUgKGl0ZW0pOworICogICAgICAgICBpZiAoc3ViX21lbnUpIHsKKyAqICAgICAgICAgICAg
IEd0a1dpZGdldCAqbWVudV9pdGVtOworICoKKyAqICAgICAgICAgICAgIC8mYXN0OyBBZGQgY3Vz
dG9tIGFjdGlvbiB0byBzdWJtZW51ICZhc3Q7LworICogICAgICAgICAgICAgYWN0aW9uID0gZ3Rr
X2FjdGlvbl9uZXcgKCJDdXN0b21JdGVtTmFtZSIsICJDdXN0b20gQWN0aW9uIiwgTlVMTCwgTlVM
TCk7CisgKiAgICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0IChhY3Rpb24sICJhY3RpdmF0ZSIs
IEdfQ0FMTEJBQ0sgKGN1c3RvbV9tZW51X2l0ZW1fYWN0aXZhdGVkKSwgTlVMTCk7CisgKgorICog
ICAgICAgICAgICAgbWVudV9pdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtIChhY3Rp
b24pOworICogICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYgKGFjdGlvbik7CisgKiAgICAgICAg
ICAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQgKEdUS19NRU5VX1NIRUxMIChzdWJfbWVudSksIG1l
bnVfaXRlbSk7CisgKiAgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3cgKG1lbnVfaXRlbSk7Cisg
KiAgICAgICAgIH0KKyAqICAgICB9CisgKgorICogICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKyAq
IH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKiA8L2V4YW1wbGU+CisgKgorICogTm90ZSB0aGF0
IHlvdSBjYW4gZ2V0IHRoZSBHdGtBY3Rpb24gb2YgYW55IGl0ZW0gaW4gdGhlIGRlZmF1bHQgY29u
dGV4dCBtZW51IHdpdGgKKyAqIGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oKS4K
KyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gb2YgdGhl
IGdpdmVuIEBpdGVtCisgKgorICogU2luY2U6IDEuNS4zCisgKiovCitXZWJLaXRDb250ZXh0TWVu
dUFjdGlvbiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihHdGtNZW51SXRlbSog
aXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChHVEtfSVNfTUVOVV9JVEVNKGl0ZW0p
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT04pOworCisgICAgQ29udGV4dE1l
bnVJdGVtIG1lbnVJdGVtKGl0ZW0pOworICAgIHN3aXRjaCAobWVudUl0ZW0uYWN0aW9uKCkpIHsK
KyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgorICAgICAgICByZXR1cm4gV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnT3Blbkxpbms6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0xJTks7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2lu
ZG93OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5L
X0lOX05FV19XSU5ET1c7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtU
b0Rpc2s6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9B
RF9MSU5LX1RPX0RJU0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xp
cGJvYXJkOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9M
SU5LX1RPX0NMSVBCT0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUlu
TmV3V2luZG93OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BF
Tl9JTUFHRV9JTl9ORVdfV0lORE9XOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxv
YWRJbWFnZVRvRGlzazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RPV05MT0FEX0lNQUdFX1RPX0RJU0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5
SW1hZ2VUb0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q29weUltYWdlVXJsVG9DbGlwYm9hcmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQ7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fRlJBTUVfSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0dvQmFjazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0dPX0JBQ0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6
CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX1NUT1A7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxv
YWQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQ7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0N1dDoK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVDsKKyAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fUEFTVEU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGU6Cisg
ICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEU7CisgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
SW5wdXRNZXRob2RzOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
SU5QVVRfTUVUSE9EUzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU6CisgICAg
ICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklDT0RFOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX1NQRUxMSU5HX0dVRVNTOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnSWdub3JlU3BlbGxpbmc6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9JR05PUkVfU1BFTExJTkc7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFy
blNwZWxsaW5nOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTEVB
Uk5fU1BFTExJTkc7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyOgor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX0dSQU1NQVI7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0ZPTlRfTUVOVTsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0JvbGQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9C
T0xEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOgorICAgICAgICByZXR1cm4g
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnVW5kZXJsaW5lOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fVU5ERVJMSU5FOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09VVExJTkU7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVDsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fT1BFTl9NRURJQV9JTl9ORVdfV0lORE9XOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgICAgICByZXR1cm4gV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9NRURJQV9MSU5LX1RPX0NMSVBCT0FSRDsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6CisgICAgICAgIHJl
dHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFM7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6CisgICAgICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUDsKKyAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgorICAgICAgICByZXR1cm4g
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTjsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgorICAgICAgICByZXR1cm4gV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWV9QQVVTRTsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ01lZGlhTXV0ZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX01FRElBX01VVEU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKKyAgICB9Cit9CisKIHZvaWQgd2Via2l0SW5pdCgpCiB7CiAgICAgc3RhdGlj
IGJvb2wgaXNJbml0aWFsaXplZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnbG9iYWxzLmgKaW5kZXggYTMxYWE0Yy4uOWZkMmNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0Z2xvYmFscy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJ3ZWJr
aXRkZWZpbmVzLmgiCiAjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KIAogR19CRUdJTl9ERUNMUwpAQCAtNTIsNiArNTMsNTMg
QEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfQlJPV1NF
UiwKIH0gV2ViS2l0Q2FjaGVNb2RlbDsKIAorLyoKKyAqIFdlYktpdENvbnRleHRNZW51QWN0aW9u
OgorICoKKyAqIFNpbmNlOiAxLjUuMworICovCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTiA9IDAsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fT1BFTl9MSU5LLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5f
TElOS19JTl9ORVdfV0lORE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05M
T0FEX0xJTktfVE9fRElTSywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJ
TktfVE9fQ0xJUEJPQVJELAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1B
R0VfSU5fTkVXX1dJTkRPVywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9B
RF9JTUFHRV9UT19ESVNLLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1B
R0VfVE9fQ0xJUEJPQVJELAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1B
R0VfVVJMX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVO
X0ZSQU1FX0lOX05FV19XSU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09f
QkFDSywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELAorICAgIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1AsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fUkVMT0FELAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFksCisgICAg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VULAorICAgIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1BBU1RFLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURSwKKyAg
ICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMLAorICAgIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fVU5JQ09ERSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19H
VUVTUywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19HVUVTU0VTX0ZPVU5ELAor
ICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9TUEVMTElORywKKyAgICBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9MRUFSTl9TUEVMTElORywKKyAgICBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9JR05PUkVfR1JBTU1BUiwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9GT05UX01FTlUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQk9MRCwKKyAg
ICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUMsCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fVU5ERVJMSU5FLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09V
VExJTkUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5ULAor
ICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTUVESUFfSU5fTkVXX1dJTkRPVywK
KyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX01FRElBX0xJTktfVE9fQ0xJUEJP
QVJELAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9M
UywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUCwKKyAg
ICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLAorICAg
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVlfUEFVU0UsCisgICAgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfTVVURQorfSBXZWJLaXRDb250ZXh0TWVudUFjdGlv
bjsKKwogV0VCS0lUX0FQSSBTb3VwU2Vzc2lvbioKIHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9u
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIApAQCAtNzMsNiArMTIxLDkgQEAgd2Via2l0
X2dldF90ZXh0X2NoZWNrZXIgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJLSVRf
QVBJIHZvaWQKIHdlYmtpdF9zZXRfdGV4dF9jaGVja2VyICAgICAgICAgICAgICAgICAgICAgICAg
KEdPYmplY3QqICBjaGVja2VyKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudUFjdGlv
bgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24gICAgICAgICAgICAoR3RrTWVu
dUl0ZW0qIGl0ZW0pOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106760</attachid>
            <date>2011-09-08 10:39:06 -0700</date>
            <delta_ts>2012-02-16 15:33:34 -0800</delta_ts>
            <desc>Patch removing need for const_cast</desc>
            <filename>bug-67660-20110908103905.patch</filename>
            <type>text/plain</type>
            <size>30938</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ3NjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA5ZDcyM2I5ZGZj
M2YxMTkyOWE4NWE4NTczODhiMjI2ZWMwNDYyMjkyLi43ZGI5YWZmZjQwMzk3ZDkzY2JlMDcxNjQ3
NDQzOWI5ZDFkYzhjZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEt
MDktMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdIEFkZCBhIHdheSB0byBleHBvc2Ugd2VsbCBrbm93biBuYW1lcyBmb3IgaXRlbXMg
aW4gdGhlIGRlZmF1bHQgY29udGV4dCBtZW51CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NzY2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBlbnVtIGNvbnRh
aW5pbmcgYWxsIHBvc3NpYmxlIGNvbnRleHQKKyAgICAgICAgbWVudSBpdGVtIGFjdGlvbnMuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4K
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OmlucHV0TWV0aG9kc01lbnVJdGVtKTogVXNlIFdlYkNvcmUgY29udGV4dCBt
ZW51IGNsYXNzZXMKKyAgICAgICAgdG8gY3JlYXRlIHRoZSBjb250ZXh0IG1lbnUgYW5kIGl0cyBp
dGVtcyB0byBtYWtlIHN1cmUgYWxsIGl0ZW1zCisgICAgICAgIGhhdmUgYSBHdGtBY3Rpb24gYXNz
b2NpYXRlZC4KKyAgICAgICAgKFdlYktpdDo6aW5zZXJ0Q29udHJvbENoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJLaXQ6OnVuaWNvZGVNZW51SXRlbSk6IERpdHRvLgorICAgICAgICAqIHRlc3RzL3Rl
c3Rjb250ZXh0bWVudS5jOiBBZGRlZC4KKyAgICAgICAgKHRlc3RJbmZvTmV3KToKKyAgICAgICAg
KHRlc3RJbmZvRGVzdHJveSk6CisgICAgICAgIChjb250ZXh0TWVudUZpeHR1cmVTZXR1cCk6Cisg
ICAgICAgIChjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik6CisgICAgICAgIChjaGVja0FjdGlv
bik6CisgICAgICAgIChjaGVja0FjdGlvbldpdGhTdWJtZW51KToKKyAgICAgICAgKGNoZWNrU2Vw
YXJhdG9yKToKKyAgICAgICAgKGNvbnRleHRNZW51Q2FsbGJhY2spOgorICAgICAgICAocHVzaEV2
ZW50KToKKyAgICAgICAgKGxvYWRTdGF0dXNDYWxsYmFjayk6CisgICAgICAgIChtYXBFdmVudENh
bGxiYWNrKToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVudSk6CisgICAgICAgIChjb250ZXh0TWVu
dUN1c3RvbUl0ZW1DYWxsYmFjayk6CisgICAgICAgICh0ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVt
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoK
KyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKTogUmV0dXJuIHRo
ZQorICAgICAgICBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBmb3IgdGhlIGdpdmVuIGNvbnRleHQg
bWVudSBpdGVtLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmg6CisKIDIwMTEtMDkt
MDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGNv
bmZpcm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9uIHRvIGNhbmNlbENvbXBv
c2l0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IDExNDFiZWU3OGNmNmNhMjU1OWZh
YjFiMWIyMDI2ODAwNmI1YTJkMGYuLjRjZmVjMmI4Y2JjYWRhMTFiOTkyNjQ0ZTA0YmEwMGE2ZTQ3
ZmY2ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC00MjcsNiArNDI3LDcgQEAgd2Vi
a2l0X3Rlc3RzX2xkZmxhZ3MgPSBcCiAKIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0
ZXN0cy90ZXN0YXBwbGljYXRpb25jYWNoZSBcCisJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3Rjb250
ZXh0bWVudSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3Rkb21kb2N1bWVudCBcCiAJUHJvZ3Jh
bXMvdW5pdHRlc3RzL3Rlc3Rkb21kb213aW5kb3cgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0
ZG9tbm9kZSBcCkBAIC00NTgsNiArNDU5LDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0YXBw
bGljYXRpb25jYWNoZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQcm9ncmFtc191
bml0dGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0YXBwbGljYXRpb25jYWNoZV9MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb250ZXh0bWVu
dV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMKK1By
b2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb250ZXh0bWVudV9MREFERCA9ICQod2Vi
a2l0X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb250ZXh0bWVudV9MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rk
b21kb2N1bWVudF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3Vt
ZW50LmMKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdTID0gJCh3ZWJr
aXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rkb21kb2N1bWVudF9MREFE
RCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCmluZGV4IGQ5YzU5ZDA3
ZTI3MjVkYWVlNTQ1N2E3OTcyMjQxNTZjNGNkMDJhYTQuLjcxMzQ2YWY0MDFjNTBkNzY5YmNiOGVm
NjA3Nzk0Y2Q2NDc0YmUxOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKQEAgLTU4LDE2ICs1OCwxNCBA
QCBzdGF0aWMgR3RrV2lkZ2V0KiBpbnB1dE1ldGhvZHNNZW51SXRlbSAoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEd0a1dpZGdldCog
bWVudWl0ZW0gPSBndGtfaW1hZ2VfbWVudV9pdGVtX25ld193aXRoX21uZW1vbmljKAotICAgICAg
ICBfKCJJbnB1dCBfTWV0aG9kcyIpKTsKLQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2
ID0gd2ViVmlldy0+cHJpdjsKLSAgICBHdGtXaWRnZXQqIGltQ29udGV4dE1lbnUgPSBndGtfbWVu
dV9uZXcoKTsKLSAgICBndGtfaW1fbXVsdGljb250ZXh0X2FwcGVuZF9tZW51aXRlbXMoR1RLX0lN
X01VTFRJQ09OVEVYVChwcml2LT5pbUNvbnRleHQuZ2V0KCkpLCBHVEtfTUVOVV9TSEVMTChpbUNv
bnRleHRNZW51KSk7CisgICAgQ29udGV4dE1lbnUgaW1Db250ZXh0TWVudTsKKyAgICBndGtfaW1f
bXVsdGljb250ZXh0X2FwcGVuZF9tZW51aXRlbXMoR1RLX0lNX01VTFRJQ09OVEVYVChwcml2LT5p
bUNvbnRleHQuZ2V0KCkpLCBHVEtfTUVOVV9TSEVMTChpbUNvbnRleHRNZW51LnBsYXRmb3JtRGVz
Y3JpcHRpb24oKSkpOwogCi0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShHVEtfTUVOVV9J
VEVNKG1lbnVpdGVtKSwgaW1Db250ZXh0TWVudSk7CisgICAgQ29udGV4dE1lbnVJdGVtIG1lbnVJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kcywgU3RyaW5nOjpm
cm9tVVRGOChfKCJJbnB1dCBfTWV0aG9kcyIpKSwgJmltQ29udGV4dE1lbnUpOworICAgIGltQ29u
dGV4dE1lbnUucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAotICAgIHJldHVybiBtZW51
aXRlbTsKKyAgICByZXR1cm4gR1RLX1dJREdFVChtZW51SXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNj
cmlwdGlvbigpKTsKIH0KIAogLy8gVmFsdWVzIHRha2VuIGZyb20gZ3RrdGV4dHV0aWwuYwpAQCAt
NzUsMjAgKzczLDggQEAgdHlwZWRlZiBzdHJ1Y3QgewogICBjb25zdCBjaGFyICpsYWJlbDsKICAg
Z3VuaWNoYXIgY2g7CiB9IEd0a1VuaWNvZGVNZW51RW50cnk7Ci1zdGF0aWMgY29uc3QgR3RrVW5p
Y29kZU1lbnVFbnRyeSBiaWRpX21lbnVfZW50cmllc1tdID0gewotICB7IE5fKCJMUk0gX0xlZnQt
dG8tcmlnaHQgbWFyayIpLCAweDIwMEUgfSwKLSAgeyBOXygiUkxNIF9SaWdodC10by1sZWZ0IG1h
cmsiKSwgMHgyMDBGIH0sCi0gIHsgTl8oIkxSRSBMZWZ0LXRvLXJpZ2h0IF9lbWJlZGRpbmciKSwg
MHgyMDJBIH0sCi0gIHsgTl8oIlJMRSBSaWdodC10by1sZWZ0IGVfbWJlZGRpbmciKSwgMHgyMDJC
IH0sCi0gIHsgTl8oIkxSTyBMZWZ0LXRvLXJpZ2h0IF9vdmVycmlkZSIpLCAweDIwMkQgfSwKLSAg
eyBOXygiUkxPIFJpZ2h0LXRvLWxlZnQgb192ZXJyaWRlIiksIDB4MjAyRSB9LAotICB7IE5fKCJQ
REYgX1BvcCBkaXJlY3Rpb25hbCBmb3JtYXR0aW5nIiksIDB4MjAyQyB9LAotICB7IE5fKCJaV1Mg
X1plcm8gd2lkdGggc3BhY2UiKSwgMHgyMDBCIH0sCi0gIHsgTl8oIlpXSiBaZXJvIHdpZHRoIF9q
b2luZXIiKSwgMHgyMDBEIH0sCi0gIHsgTl8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIp
LCAweDIwMEMgfQotfTsKLQotc3RhdGljIHZvaWQgaW5zZXJ0Q29udHJvbENoYXJhY3RlcihHdGtX
aWRnZXQqIHdpZGdldCkKKworc3RhdGljIHZvaWQgaW5zZXJ0Q29udHJvbENoYXJhY3RlcihHdGtB
Y3Rpb24qIHdpZGdldCkKIHsKICAgICAvLyBHdGtVbmljb2RlTWVudUVudHJ5KiBlbnRyeSA9IChH
dGtVbmljb2RlTWVudUVudHJ5KilnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAi
Z3RrLXVuaWNvZGUtbWVudS1lbnRyeSIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0xMDYs
MjQgKzkyLDM1IEBAIHN0YXRpYyBHdGtXaWRnZXQqIHVuaWNvZGVNZW51SXRlbShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgR3RrV2lk
Z2V0KiBtZW51aXRlbSA9IGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X3dpdGhfbW5lbW9uaWMoCi0g
ICAgICAgIF8oIl9JbnNlcnQgVW5pY29kZSBDb250cm9sIENoYXJhY3RlciIpKTsKLQotICAgIEd0
a1dpZGdldCogdW5pY29kZUNvbnRleHRNZW51ID0gZ3RrX21lbnVfbmV3KCk7Ci0gICAgdW5zaWdu
ZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGJpZGlfbWVudV9lbnRyaWVz
KTsgaSsrKSB7Ci0gICAgICAgIEd0a1dpZGdldCogbWVudWl0ZW0gPSBndGtfbWVudV9pdGVtX25l
d193aXRoX21uZW1vbmljKF8oYmlkaV9tZW51X2VudHJpZXNbaV0ubGFiZWwpKTsKLSAgICAgICAg
Z19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobWVudWl0ZW0pLCAiZ3RrLXVuaWNvZGUtbWVudS1l
bnRyeSIsIChncG9pbnRlcikmYmlkaV9tZW51X2VudHJpZXNbaV0pOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1lbnVpdGVtLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGluc2VydENvbnRyb2xD
aGFyYWN0ZXIpLCAwKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVpdGVtKTsKLSAgICAg
ICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKHVuaWNvZGVDb250ZXh0TWVu
dSksIG1lbnVpdGVtKTsKLSAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlIGl0ZW0gc2Vuc2l0aXZl
IGFzIGluc2VydENvbnRyb2xDaGFyYWN0ZXIoKSBpcyBpbXBsZW1lbnRlZAotICAgICAgICBndGtf
d2lkZ2V0X3NldF9zZW5zaXRpdmUobWVudWl0ZW0sIEZBTFNFKTsKKyAgICBzdGF0aWMgR3RrVW5p
Y29kZU1lbnVFbnRyeSBiaWRpTWVudUVudHJpZXNbXSA9IHsKKyAgICAgIHsgTl8oIkxSTSBfTGVm
dC10by1yaWdodCBtYXJrIiksIDB4MjAwRSB9LAorICAgICAgeyBOXygiUkxNIF9SaWdodC10by1s
ZWZ0IG1hcmsiKSwgMHgyMDBGIH0sCisgICAgICB7IE5fKCJMUkUgTGVmdC10by1yaWdodCBfZW1i
ZWRkaW5nIiksIDB4MjAyQSB9LAorICAgICAgeyBOXygiUkxFIFJpZ2h0LXRvLWxlZnQgZV9tYmVk
ZGluZyIpLCAweDIwMkIgfSwKKyAgICAgIHsgTl8oIkxSTyBMZWZ0LXRvLXJpZ2h0IF9vdmVycmlk
ZSIpLCAweDIwMkQgfSwKKyAgICAgIHsgTl8oIlJMTyBSaWdodC10by1sZWZ0IG9fdmVycmlkZSIp
LCAweDIwMkUgfSwKKyAgICAgIHsgTl8oIlBERiBfUG9wIGRpcmVjdGlvbmFsIGZvcm1hdHRpbmci
KSwgMHgyMDJDIH0sCisgICAgICB7IE5fKCJaV1MgX1plcm8gd2lkdGggc3BhY2UiKSwgMHgyMDBC
IH0sCisgICAgICB7IE5fKCJaV0ogWmVybyB3aWR0aCBfam9pbmVyIiksIDB4MjAwRCB9LAorICAg
ICAgeyBOXygiWldOSiBaZXJvIHdpZHRoIF9ub24tam9pbmVyIiksIDB4MjAwQyB9CisgICAgfTsK
KworICAgIENvbnRleHRNZW51IHVuaWNvZGVDb250ZXh0TWVudTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGJpZGlNZW51RW50cmllcyk7IGkrKykgeworICAgICAg
ICAvLyBGSVhNRTogTWFrZSB0aGUgaXRlbSBzZW5zaXRpdmUgYXMgaW5zZXJ0Q29udHJvbENoYXJh
Y3RlcigpIGlzIGltcGxlbWVudGVkIGFuZCBhZGQKKyAgICAgICAgLy8gYmlkaSBpdGVtcyB0byBD
b250ZXh0TWVudUFjdGlvbiBlbnVtLiBGb3Igbm93IHdlIGNyZWF0ZSBhIG1lbnUgaXRlbSB3aXRo
IG5vIGFjdGlvbi4KKyAgICAgICAgQ29udGV4dE1lbnVJdGVtIGJpZGlNZW51SXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChfKGJpZGlNZW51RW50cmllc1tpXS5sYWJl
bCkpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChi
aWRpTWVudUl0ZW0uZ3RrQWN0aW9uKCkpLCAiZ3RrLXVuaWNvZGUtbWVudS1lbnRyeSIsICZiaWRp
TWVudUVudHJpZXNbaV0pOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGJpZGlNZW51SXRlbS5n
dGtBY3Rpb24oKSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhpbnNlcnRDb250cm9sQ2hhcmFjdGVy
KSwgMCk7CisgICAgICAgIHVuaWNvZGVDb250ZXh0TWVudS5hcHBlbmRJdGVtKGJpZGlNZW51SXRl
bSk7CiAgICAgfQogCi0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShHVEtfTUVOVV9JVEVN
KG1lbnVpdGVtKSwgdW5pY29kZUNvbnRleHRNZW51KTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbWVu
dUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChfKCJfSW5zZXJ0IFVuaWNvZGUgQ29u
dHJvbCBDaGFyYWN0ZXIiKSksICZ1bmljb2RlQ29udGV4dE1lbnUpOworICAgIHVuaWNvZGVDb250
ZXh0TWVudS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCi0gICAgcmV0dXJuIG1lbnVp
dGVtOworICAgIHJldHVybiBHVEtfV0lER0VUKG1lbnVJdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2Ny
aXB0aW9uKCkpOwogfQogCiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVu
dDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMoQ29udGV4dE1lbnUqIG1lbnUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb250ZXh0bWVudS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkMDVmZjY4
N2VkZGM2ZmRkN2M3YjkwYWRmMDZkY2UwZGZiMTljMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwpAQCAtMCwwICsxLDMyNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KKworI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQorCit0eXBlZGVmIHN0
cnVjdCB7CisgICAgY2hhciogZGF0YTsKKyAgICBndWludCBmbGFnOworfSBUZXN0SW5mbzsKKwor
c3RhdGljIEdNYWluTG9vcCogbG9vcDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXc7CisgICAgVGVzdEluZm8qIGluZm87Cit9IENvbnRleHRNZW51Rml4dHVy
ZTsKKworc3RhdGljIFRlc3RJbmZvKiB0ZXN0SW5mb05ldyhjb25zdCBjaGFyKiBkYXRhLCBndWlu
dCBmbGFnKQoreworICAgIFRlc3RJbmZvKiBpbmZvOworCisgICAgaW5mbyA9IGdfc2xpY2VfbmV3
KFRlc3RJbmZvKTsKKyAgICBpbmZvLT5kYXRhID0gZ19zdHJkdXAoZGF0YSk7CisgICAgaW5mby0+
ZmxhZyA9IGZsYWc7CisKKyAgICByZXR1cm4gaW5mbzsKK30KKworc3RhdGljIHZvaWQgdGVzdElu
Zm9EZXN0cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKKyAg
ICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBjb250ZXh0
TWVudUZpeHR1cmVTZXR1cChDb250ZXh0TWVudUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVF
KTsKKyAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOworfQorCitzdGF0aWMgdm9p
ZCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bihDb250ZXh0TWVudUZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJW
aWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICB0ZXN0SW5mb0Rlc3Ryb3ko
Zml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyBHTGlzdCogY2hlY2tBY3Rpb24oR0xpc3QqIGl0
ZXIsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKK3sKKyAgICBHdGtNZW51SXRlbSAq
aXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7CisKKyAgICBnX2Fzc2VydChHVEtfSVNf
TUVOVV9JVEVNKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
Z2V0X2FjdGlvbihpdGVtKSA9PSBhY3Rpb24pOworCisgICAgcmV0dXJuIGl0ZXItPm5leHQ7Cit9
CisKK3N0YXRpYyBHTGlzdCogY2hlY2tBY3Rpb25XaXRoU3VibWVudShHTGlzdCogaXRlciwgV2Vi
S2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIEd0a01lbnVJdGVtICppdGVtID0g
KEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKKworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VX0lU
RU0oaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0
aW9uKGl0ZW0pID09IGFjdGlvbik7CisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZ3RrX21lbnVf
aXRlbV9nZXRfc3VibWVudShpdGVtKSkpOworCisgICAgcmV0dXJuIGl0ZXItPm5leHQ7Cit9CisK
K3N0YXRpYyBHTGlzdCogY2hlY2tTZXBhcmF0b3IoR0xpc3QqIGl0ZXIpCit7CisgICAgR3RrTWVu
dUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAgZ19hc3NlcnQo
R1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkpOworCisgICAgcmV0dXJuIGl0ZXItPm5l
eHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEd0a1dpZGdldCogZGVmYXVsdE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQq
IGhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJvYXJkTW9kZSwgZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgVGVzdEluZm8qIGluZm8gPSAoVGVzdEluZm8qKXVzZXJEYXRhOworICAgIGd1aW50
IGNvbnRleHQ7CisgICAgR0xpc3QqIGl0ZW1zOworICAgIEdMaXN0KiBpdGVyOworCisgICAgLyog
Q2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1ZJ
RVcod2ViVmlldykpOworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGRlZmF1bHRNZW51KSk7Cisg
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7Cisg
ICAgZ19hc3NlcnQoa2V5Ym9hcmRNb2RlID09IEZBTFNFKTsKKworICAgIGdfb2JqZWN0X2dldCho
aXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2VydChj
b250ZXh0ICYgaW5mby0+ZmxhZyk7CisKKyAgICBpdGVtcyA9IGd0a19jb250YWluZXJfZ2V0X2No
aWxkcmVuKEdUS19DT05UQUlORVIoZGVmYXVsdE1lbnUpKTsKKyAgICBzd2l0Y2ggKGluZm8tPmZs
YWcpIHsKKyAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDoK
KyAgICAgICAgaXRlciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSyk7CisgICAgICAgIGl0ZXIgPSBjaGVj
a0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEKTsKKyAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1NUT1ApOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fUkVMT0FEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFOgor
ICAgICAgICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1cpOworICAg
ICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
RE9XTkxPQURfSU1BR0VfVE9fRElTSyk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQp
OworICAgICAgICBnX2Fzc2VydCghaXRlcik7CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRToKKyAgICAgICAgaXRlciA9
IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fQ1VUKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24o
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUEFTVEUpOworICAgICAgICBpdGVyID0g
Y2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fREVMRVRFKTsKKyAg
ICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0ZXIpOworICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCk7CisgICAg
ICAgIGl0ZXIgPSBjaGVja1NlcGFyYXRvcihpdGVyKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0
aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVU
SE9EUyk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUpOworICAgICAgICBnX2Fzc2VydCghaXRlcik7
CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRF
WFRfTElOSzoKKyAgICAgICAgaXRlciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rp
b24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LKTsKKyAgICAgICAg
aXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5f
TElOS19JTl9ORVdfV0lORE9XKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSyk7CisgICAgICAg
IGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
X0xJTktfVE9fQ0xJUEJPQVJEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdfbGlz
dF9mcmVlKGl0ZW1zKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworCisgICAgcmV0dXJu
IFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hFdmVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQoreworICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVT
Uyk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMCwgMCkKKyAgICBHZGtEZXZpY2VNYW5hZ2Vy
ICpkZXZpY2VNYW5hZ2VyOworI2VuZGlmCisKKyAgICBldmVudC0+YW55LndpbmRvdyA9IGdfb2Jq
ZWN0X3JlZihndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3KSkpOworICAg
IGV2ZW50LT5hbnkuc2VuZF9ldmVudCA9IEZBTFNFOworICAgIGV2ZW50LT5idXR0b24udGltZSA9
IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi5idXR0b24gPSAzOworICAgIGV2
ZW50LT5idXR0b24ueCA9IGV2ZW50LT5idXR0b24ueSA9IDU7CisgICAgZXZlbnQtPmJ1dHRvbi54
X3Jvb3QgPSBldmVudC0+YnV0dG9uLng7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSBldmVu
dC0+YnV0dG9uLnk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMCwgMCkKKyAgICBkZXZpY2VN
YW5hZ2VyID0gZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOworICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2Vy
X2dldF9jbGllbnRfcG9pbnRlcihkZXZpY2VNYW5hZ2VyKTsKKyNlbmRpZgorCisgICAgZ2RrX2V2
ZW50X3B1dChldmVudCk7CisgICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOworfQorCitzdGF0aWMg
dm9pZCBsb2FkU3RhdHVzQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3Bl
Yyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgVGVzdEluZm8q
IGluZm8gPSAoVGVzdEluZm8qKWRhdGE7CisKKyAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lU
X0xPQURfRkFJTEVEKTsKKworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQp
CisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImNvbnRl
eHQtbWVudSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIGluZm8pOworICAgIHB1
c2hFdmVudCh3ZWJWaWV3KTsKK30KKworc3RhdGljIGdib29sZWFuIG1hcEV2ZW50Q2FsbGJhY2so
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKKyAgICBDb250ZXh0TWVudUZpeHR1cmUq
IGZpeHR1cmUgPSAoQ29udGV4dE1lbnVGaXh0dXJlKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaXh0dXJlLT5pbmZvLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGV4dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19D
QUxMQkFDSyhsb2FkU3RhdHVzQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudShDb250ZXh0TWVudUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IDAsIDAsIDUwLCA1MCB9OworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3Rr
X3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisKKyAgICBndGtfd2luZG93X3Jlc2l6ZShH
VEtfV0lORE9XKHdpbmRvdyksIDUwLCA1MCk7CisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5E
T1cod2luZG93KSwgMCwgMCk7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURH
RVQoZml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBF
dmVudENhbGxiYWNrKSwgZml4dHVyZSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cp
OworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY29u
dGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR3RrV2lk
Z2V0KiBkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgZ2Jv
b2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBUZXN0SW5mbyog
aW5mbyA9IChUZXN0SW5mbyopdXNlckRhdGE7CisgICAgZ3VpbnQgY29udGV4dDsKKyAgICBHTGlz
dCogaXRlbXM7CisgICAgR0xpc3QqIGl0ZXI7CisgICAgR3RrV2lkZ2V0KiBtZW51SXRlbTsKKyAg
ICBHdGtBY3Rpb24qIGFjdGlvbjsKKworICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICov
CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2Vy
dChHVEtfSVNfTUVOVShkZWZhdWx0TWVudSkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRf
VEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KGtleWJvYXJkTW9kZSA9
PSBGQUxTRSk7CisKKyAgICBnX29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAm
Y29udGV4dCwgTlVMTCk7CisgICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOworCisg
ICAgYWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoIlRlc3RBY3Rpb24iLCAiQ3VzdG9tIEFjdGlvbiIs
ICJDdXN0b20gQWN0aW9uIFRvb2x0aXAiLCBOVUxMKTsKKyAgICBtZW51SXRlbSA9IGd0a19hY3Rp
b25fY3JlYXRlX21lbnVfaXRlbShhY3Rpb24pOworICAgIGdfb2JqZWN0X3VucmVmKGFjdGlvbik7
CisKKyAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZGVmYXVsdE1lbnUp
LCBtZW51SXRlbSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsKKworICAgIGl0ZW1z
ID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkp
OworICAgIGl0ZXIgPSBpdGVtczsKKyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSyk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOworICAgIGl0ZXIgPSBj
aGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKKyAgICBp
dGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FE
KTsKKyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fTk9fQUNUSU9OKTsKKyAgICBnX2Fzc2VydCghaXRlcik7CisKKyAgICBnX2xpc3RfZnJlZShp
dGVtcyk7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtKENvbnRleHRNZW51Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEd0a1dpZGdldCAqd2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcp
KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9ncmFi
X2ZvY3VzKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworCisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpeHR1cmUtPmluZm8tPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXh0L2h0bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRm
LTgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImNvbnRleHQtbWVudSIsIEdfQ0FMTEJB
Q0soY29udGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKKyAgICBw
dXNoRXZlbnQoZml4dHVyZS0+d2ViVmlldyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKK3sKKyAgICBnX3RocmVhZF9pbml0KE5VTEwpOworICAgIGd0a190ZXN0X2luaXQo
JmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVu
dS9kb2N1bWVudCIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZv
TmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9E
T0NVTUVOVCksCisgICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENv
bnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7CisgICAgLyogV2UgaGFyZGNv
ZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAsMCBzbyB0aGF0IHdlIGtub3cgd2hlcmUgdG8gZ2Vu
ZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rj
b250ZXh0bWVudS9pbWFnZSIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRl
c3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVm
dDowOyB0b3A6MCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01MCBoZWlnaHQ9NTA+PC9pbWc+PC9i
b2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNU
X1JFU1VMVF9DT05URVhUX0lNQUdFKSwKKyAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVy
ZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKyAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9lZGl0YWJsZSIsIENvbnRleHRN
ZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW5w
dXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9p
bnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFKSwKKyAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRl
YXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9saW5rIiwg
Q29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxi
b2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgaHJlZj0naHR0
cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5PjwvaHRtbD4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJ
TkspLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0
TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvdGVzdGNvbnRleHRtZW51L2N1c3RvbWl0ZW0iLCBDb250ZXh0TWVudUZpeHR1cmUsCisgICAg
ICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48
L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RF
U1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVG
aXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0sIGNvbnRleHRNZW51Rml4dHVy
ZVRlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKKyNlbHNlCisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBnX2NyaXRpY2FsKCJZb3Ugd2ls
bCBuZWVkIGF0IGxlYXN0IEdUSysgMi4xNC4wIHRvIHJ1biB0aGUgdW5pdCB0ZXN0cy4iKTsKKyAg
ICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
Z2xvYmFscy5jcHAKaW5kZXggMzliZWZiM2NkY2U0NDQxMGUxMTdhNWZmZjMyODE2YzNhZjYzNjgy
NS4uMjJjNzQ0MmE5MjhhZjUzMjJjNDc1YWYwYzZiZDQ5YzUxZDM0ODNmYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAj
aW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0R3RrLmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIkdSZWZQdHIuaCIK
QEAgLTI5Nyw2ICsyOTgsMTY1IEBAIHZvaWQgd2Via2l0X3NldF90ZXh0X2NoZWNrZXIoR09iamVj
dCogY2hlY2tlcikKICAgICB0ZXh0Q2hlY2tlciA9IGNoZWNrZXIgPyBXRUJLSVRfU1BFTExfQ0hF
Q0tFUihjaGVja2VyKSA6IDA7CiB9CiAKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2dldF9hY3Rpb246CisgKiBAaXRlbTogYSAjR3RrTWVudUl0ZW0gb2YgdGhlIGRlZmF1bHQgY29u
dGV4dCBtZW51CisgKgorICogUmV0dXJucyB0aGUgI1dlYktpdENvbnRleHRNZW51QWN0aW9uIG9m
IHRoZSBnaXZlbiBAaXRlbS4gVGhpcyBmdW5jdGlvbgorICogY2FuIGJlIHVzZWQgdG8gZGV0ZXJt
aW5lIHRoZSBpdGVtcyBwcmVzZW50IGluIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KKyAqIElu
IG9yZGVyIHRvIGluc3BlY3QgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51LCB5b3Ugc2hvdWxkIGNv
bm5lY3QgdG8KKyAqIFdlYktpdFdlYlZpZXc6Y29udGV4dC1tZW51IHNpZ25hbC4KKyAqCisgKiA8
ZXhhbXBsZT4KKyAqIDx0aXRsZT5JbnNwZWN0aW5nIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudTwv
dGl0bGU+CisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKiBzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dF9t
ZW51X2NiIChXZWJLaXRXZWJWaWV3ICAgICAgICp3ZWJWaWV3LAorICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0ICAgICAgICAgICAqZGVmYXVsdF9tZW51LAorICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0
X3Rlc3RfcmVzdWx0LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xl
YW4gICAgICAgICAgICAga2V5Ym9hcmRfbW9kZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHVzZXJfZGF0YSkKKyAqIHsKKyAqICAgICBH
TGlzdCAqaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbiAoR1RLX0NPTlRBSU5FUiAo
ZGVmYXVsdF9tZW51KSk7CisgKiAgICAgR0xpc3QgKmw7CisgKiAgICAgR3RrQWN0aW9uICphY3Rp
b247CisgKiAgICAgR3RrV2lkZ2V0ICpzdWJfbWVudTsKKyAqCisgKiAgICAgZm9yIChsID0gaXRl
bXM7IGw7IGwgPSBnX2xpc3RfbmV4dCAobCkpIHsKKyAqICAgICAgICAgR3RrTWVudUl0ZW0gKml0
ZW0gPSAoR3RrTWVudUl0ZW0gKilsLT5kYXRhOworICoKKyAqICAgICAgICAgaWYgKEdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNIChpdGVtKSkgeworICogICAgICAgICAgICAgLyZhc3Q7IEl0J3Mg
IHNlcGFyYXRvciwgZG8gbm90aGluZyAmYXN0Oy8KKyAqICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICogICAgICAgICB9CisgKgorICogICAgICAgICBzd2l0Y2ggKHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9nZXRfYWN0aW9uIChpdGVtKSkgeworICogICAgICAgICBjYXNlIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX05PX0FDVElPTjoKKyAqICAgICAgICAgICAgIC8mYXN0OyBObyBhY3Rpb24g
Zm9yIHRoaXMgaXRlbSAmYXN0Oy8KKyAqICAgICAgICAgICAgIGJyZWFrOworICogICAgICAgICAv
JmFzdDsgRG9uJ3QgYWxsb3cgdG8gb3BlIGxpbmtzIGZyb20gY29udGV4dCBtZW51ICZhc3Q7Lwor
ICogICAgICAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSzoKKyAq
ICAgICAgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVX
X1dJTkRPVzoKKyAqICAgICAgICAgICAgIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVs
YXRlZF9hY3Rpb24gKEdUS19BQ1RJVkFUQUJMRSAoaXRlbSkpOworICogICAgICAgICAgICAgZ3Rr
X2FjdGlvbl9zZXRfc2Vuc2l0aXZlIChhY3Rpb24sIEZBTFNFKTsKKyAqICAgICAgICAgICAgIGJy
ZWFrOworICogICAgICAgICBkZWZhdWx0OgorICogICAgICAgICAgICAgYnJlYWs7CisgKiAgICAg
ICAgIH0KKyAqCisgKiAgICAgICAgIHN1Yl9tZW51ID0gZ3RrX21lbnVfaXRlbV9nZXRfc3VibWVu
dSAoaXRlbSk7CisgKiAgICAgICAgIGlmIChzdWJfbWVudSkgeworICogICAgICAgICAgICAgR3Rr
V2lkZ2V0ICptZW51X2l0ZW07CisgKgorICogICAgICAgICAgICAgLyZhc3Q7IEFkZCBjdXN0b20g
YWN0aW9uIHRvIHN1Ym1lbnUgJmFzdDsvCisgKiAgICAgICAgICAgICBhY3Rpb24gPSBndGtfYWN0
aW9uX25ldyAoIkN1c3RvbUl0ZW1OYW1lIiwgIkN1c3RvbSBBY3Rpb24iLCBOVUxMLCBOVUxMKTsK
KyAqICAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGFjdGlvbiwgImFjdGl2YXRlIiwgR19D
QUxMQkFDSyAoY3VzdG9tX21lbnVfaXRlbV9hY3RpdmF0ZWQpLCBOVUxMKTsKKyAqCisgKiAgICAg
ICAgICAgICBtZW51X2l0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0gKGFjdGlvbik7
CisgKiAgICAgICAgICAgICBnX29iamVjdF91bnJlZiAoYWN0aW9uKTsKKyAqICAgICAgICAgICAg
IGd0a19tZW51X3NoZWxsX2FwcGVuZCAoR1RLX01FTlVfU0hFTEwgKHN1Yl9tZW51KSwgbWVudV9p
dGVtKTsKKyAqICAgICAgICAgICAgIGd0a193aWRnZXRfc2hvdyAobWVudV9pdGVtKTsKKyAqICAg
ICAgICAgfQorICogICAgIH0KKyAqCisgKiAgICAgZ19saXN0X2ZyZWUoaXRlbXMpOworICogfQor
ICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBOb3RlIHRoYXQgeW91
IGNhbiBnZXQgdGhlIEd0a0FjdGlvbiBvZiBhbnkgaXRlbSBpbiB0aGUgZGVmYXVsdCBjb250ZXh0
IG1lbnUgd2l0aAorICogZ3RrX2FjdGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbigpLgorICoK
KyAqIFJldHVybiB2YWx1ZTogdGhlICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBvZiB0aGUgZ2l2
ZW4gQGl0ZW0KKyAqCisgKiBTaW5jZTogMS41LjMKKyAqKi8KK1dlYktpdENvbnRleHRNZW51QWN0
aW9uIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKEd0a01lbnVJdGVtKiBpdGVt
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEdUS19JU19NRU5VX0lURU0oaXRlbSksIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTik7CisKKyAgICBDb250ZXh0TWVudUl0
ZW0gbWVudUl0ZW0oaXRlbSk7CisgICAgc3dpdGNoIChtZW51SXRlbS5hY3Rpb24oKSkgeworICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb246CisgICAgICAgIHJldHVybiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT047CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdPcGVuTGluazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09Q
RU5fTElOSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6
CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5f
TkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlz
azoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJ
TktfVE9fRElTSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9h
cmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktf
VE9fQ0xJUEJPQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdX
aW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lN
QUdFX0lOX05FV19XSU5ET1c7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZElt
YWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9X
TkxPQURfSU1BR0VfVE9fRElTSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFn
ZVRvQ2xpcGJvYXJkOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q09QWV9JTUFHRV9UT19DTElQQk9BUkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5
SW1hZ2VVcmxUb0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fT1BFTl9GUkFNRV9JTl9ORVdfV0lORE9XOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fR09fQkFDSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQ7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fU1RPUDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRDsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9DT1BZOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ3V0OgorICAg
ICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VUOworICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9QQVNURTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURTsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1NFTEVDVF9BTEw7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnB1
dE1ldGhvZHM6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBV
VF9NRVRIT0RTOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZToKKyAgICAgICAg
cmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREU7CisgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fU1BFTExJTkdfR1VFU1M7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0lHTk9SRV9TUEVMTElORzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3Bl
bGxpbmc6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9MRUFSTl9T
UEVMTElORzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXI6CisgICAg
ICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVfR1JBTU1BUjsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OgorICAgICAgICByZXR1cm4gV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fRk9OVF9NRU5VOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQm9sZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JPTEQ7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdVbmRlcmxpbmU6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9V
TkRFUkxJTkU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lOgorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1VUTElORTsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5UOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9PUEVOX01FRElBX0lOX05FV19XSU5ET1c7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX01FRElBX0xJTktfVE9fQ0xJUEJPQVJEOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUzsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QOworICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1c2U6CisgICAgICAgIHJldHVybiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZX1BBVVNFOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnTWVkaWFNdXRlOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fTUVESUFfTVVURTsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgIH0KK30KKwogdm9pZCB3ZWJraXRJbml0KCkKIHsKICAgICBzdGF0aWMgYm9v
bCBpc0luaXRpYWxpemVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0Z2xvYmFscy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGds
b2JhbHMuaAppbmRleCBhMzFhYTRjZGNjMWQ4NzBkYTMzYTZhMzU3OTk1Y2M1NTI1NzJhZmRmLi45
ZmQyY2Y4OTg1N2JjMDcwNTVkZGZjNDdlMGEyZGVhNjIxZGMyMDlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUg
IndlYmtpdGRlZmluZXMuaCIKICNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogCiBHX0JFR0lOX0RFQ0xTCkBAIC01Miw2ICs1
Myw1MyBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9C
Uk9XU0VSLAogfSBXZWJLaXRDYWNoZU1vZGVsOwogCisvKgorICogV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb246CisgKgorICogU2luY2U6IDEuNS4zCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OID0gMCwKKyAgICBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9PUEVOX0xJTkssCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
T1BFTl9MSU5LX0lOX05FV19XSU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
RE9XTkxPQURfTElOS19UT19ESVNLLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NP
UFlfTElOS19UT19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BF
Tl9JTUFHRV9JTl9ORVdfV0lORE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RP
V05MT0FEX0lNQUdFX1RPX0RJU0ssCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9JTUFHRV9UT19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X09QRU5fRlJBTUVfSU5fTkVXX1dJTkRPVywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9HT19CQUNLLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsCisg
ICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwKKyAgICBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9SRUxPQUQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSwK
KyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQsCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fUEFTVEUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fREVMRVRF
LAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsCisgICAgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUywKKyAgICBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9VTklDT0RFLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NQRUxM
SU5HX0dVRVNTLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0dVRVNTRVNfRk9V
TkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX1NQRUxMSU5HLAorICAg
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0xFQVJOX1NQRUxMSU5HLAorICAgIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9HUkFNTUFSLAorICAgIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0ZPTlRfTUVOVSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9CT0xE
LAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lUQUxJQywKKyAgICBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9VTkRFUkxJTkUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1VUTElORSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1F
TlQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9NRURJQV9JTl9ORVdfV0lO
RE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTUVESUFfTElOS19UT19D
TElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NP
TlRST0xTLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09Q
LAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU4s
CisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWV9QQVVTRSwKKyAgICBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFCit9IFdlYktpdENvbnRleHRNZW51
QWN0aW9uOworCiBXRUJLSVRfQVBJIFNvdXBTZXNzaW9uKgogd2Via2l0X2dldF9kZWZhdWx0X3Nl
c3Npb24gICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCkBAIC03Myw2ICsxMjEsOSBAQCB3
ZWJraXRfZ2V0X3RleHRfY2hlY2tlciAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIFdF
QktJVF9BUEkgdm9pZAogd2Via2l0X3NldF90ZXh0X2NoZWNrZXIgICAgICAgICAgICAgICAgICAg
ICAgICAoR09iamVjdCogIGNoZWNrZXIpOwogCitXRUJLSVRfQVBJIFdlYktpdENvbnRleHRNZW51
QWN0aW9uCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbiAgICAgICAgICAgIChH
dGtNZW51SXRlbSogaXRlbSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="103264"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="129594"
          type_id="3"
          status="-"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>