<?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>118430</bug_id>
          
          <creation_ts>2013-07-05 11:02:54 -0700</creation_ts>
          <short_desc>[GTK] Migrate WebKitDOMDocument unit tests to WebKit2</short_desc>
          <delta_ts>2017-03-11 10:50:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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>118427</dependson>
          <blocked>118426</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Enrique Ocaña">eocanha</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eocanha</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>906457</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-05 11:02:54 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933882</commentid>
    <comment_count>1</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2013-09-27 03:37:10 -0700</bug_when>
    <thetext>I&apos;m working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936181</commentid>
    <comment_count>2</comment_count>
      <attachid>213360</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2013-10-04 06:56:49 -0700</bug_when>
    <thetext>Created attachment 213360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936183</commentid>
    <comment_count>3</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2013-10-04 06:59:41 -0700</bug_when>
    <thetext>Take into account the comment in the patch:

This patch doesn&apos;t migrate test_dom_document_garbage_collection() because it requires API to load a new document in WebProcess (the equivalent of webkit_web_view_load_string()) and it&apos;s not currently available.

A new bug should be opened to migrate the pending test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941118</commentid>
    <comment_count>4</comment_count>
      <attachid>213360</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-10-18 01:43:22 -0700</bug_when>
    <thetext>Comment on attachment 213360
Patch

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

Looks great, there are just a few style issues. Instead of copying the tests as they are in WebKit1, we can make some improvements:
 - Use the gobject macros to check DOM objects
 - Use GRefPtr/GOwnPtr when appropriate
 - Do not use C style casts
 - Clean up the code when appropriate

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:53
&gt; +        gchar* title = webkit_dom_document_get_title(document);

Use GOwnPtr&lt;char&gt; instead of gchar*

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:58
&gt; +        title = webkit_dom_document_get_title(document);

And title.set() here

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:72
&gt; +        WebKitDOMNodeList* list = webkit_dom_document_get_elements_by_tag_name(document, &quot;li&quot;);

Use GRefPtr&lt;WebKitDOMNodeList&gt; here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:73
&gt; +        g_assert(list);

g_assert(WEBKIT_DOM_IS_NODE_LIST(list)); Use always the GObject macros to check also that the returned pointer is the right glib type.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:79
&gt; +        guint i;
&gt; +
&gt; +        for (i = 0; i &lt; length; i++) {

for (unsigned i = 0; ....

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:81
&gt; +            g_assert(item);

Use the gobject macro here too.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:83
&gt; +            g_assert(element);

Ditto, but we don&apos;t need a new variable for that, use item instead:

g_assert(WEBKIT_DOM_IS_ELEMENT(item));

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:84
&gt; +            g_assert_cmpstr(webkit_dom_element_get_tag_name(element), ==, &quot;LI&quot;);

And here you can use item directly too:

g_assert_cmpstr(webkit_dom_element_get_tag_name(WEBKIT_DOM_ELEMENT(element)), ==, &quot;LI&quot;);

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:85
&gt; +            WebKitDOMHTMLElement* htmlElement = (WebKitDOMHTMLElement*)element;

Same here, we don&apos;t need this, we can simply cast item when needed, using the gobject macros instead of C style casts.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:86
&gt; +            char* n = g_strdup_printf(&quot;%d&quot;, i+1);

Use GOwnPtr&lt;char&gt; and a more descriptive name for the variable instead of &quot;n&quot;, expectedInnerText for example.
i+1 -&gt; i + 1

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:96
&gt; +    bool testGetElementsByClassName(WebKitWebExtension* extension, GVariant* args)

Same comments apply to this test too.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:138
&gt; +        WebKitDOMHTMLElement* htmlElement = (WebKitDOMHTMLElement*)element;
&gt; +        g_assert_cmpstr(webkit_dom_html_element_get_inner_text(htmlElement), ==, &quot;first&quot;);

Same here, use gobject macros and don&apos;t cache this variable using a C style cast. Use a gobject cast directly when using it.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:143
&gt; +    bool testGetLinks(WebKitWebExtension* extension, GVariant* args)

Same comments here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:211
&gt; +        int i = 0;

This could be unsigned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941283</commentid>
    <comment_count>5</comment_count>
      <attachid>214590</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2013-10-18 11:40:20 -0700</bug_when>
    <thetext>Created attachment 214590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941284</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-18 11:42:12 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962424</commentid>
    <comment_count>7</comment_count>
      <attachid>214590</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-12-23 01:52:26 -0800</bug_when>
    <thetext>Comment on attachment 214590
Patch

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

Thanks for the patch. It looks good in general, but you are overusing and misusing the smart pointers everywhere. In general, dom api returning objects are transfer none, and you don&apos;t need to take a reference nor release it, and methods returning a string are transfter full, and you need to free the returned string. In any case, you can see what every method return in the documentation http://webkitgtk.org/reference/webkitdomgtk/2.3.3

&gt; Source/WebKit2/ChangeLog:8
&gt; +        This patch doesn&apos;t migrate test_dom_document_garbage_collection() because
&gt; +        it requires API to load a new document in WebProcess (the equivalent of
&gt; +        webkit_web_view_load_string()) and it&apos;s not currently available.

Please move the description after the Reviewed by line

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:51
&gt; +        GRefPtr&lt;WebKitWebPage&gt; page(webkit_web_extension_get_page(extension, webPageFromArgs(args)));

webkit_web_extension_get_page is trabsfer none, you don&apos;t need to use GRefPtr.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:53
&gt; +        GRefPtr&lt;WebKitDOMDocument&gt; document(webkit_web_page_get_dom_document(page.get()));

Same here

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:57
&gt; +        g_assert(title.get());
&gt; +        g_assert_cmpstr(title.get(), ==, &quot;This is the title&quot;);

This is redundant, if title is NULL it&apos;s not &quot;This is the title&quot; so we only need the second assert.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:61
&gt; +        g_assert(title.get());
&gt; +        g_assert_cmpstr(title.get(), ==, &quot;This is the second title&quot;);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:68
&gt; +        GRefPtr&lt;WebKitWebPage&gt; page(webkit_web_extension_get_page(extension, webPageFromArgs(args)));

You don&apos;t need to use GRefPtr

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:70
&gt; +        GRefPtr&lt;WebKitDOMDocument&gt; document(webkit_web_page_get_dom_document(page.get()));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:72
&gt; +        GRefPtr&lt;WebKitDOMNodeList&gt; list(webkit_dom_document_get_elements_by_tag_name(document.get(), &quot;li&quot;));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:78
&gt; +            GRefPtr&lt;WebKitDOMNode&gt; item(webkit_dom_node_list_item(list.get(), i));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:80
&gt; +            g_assert(WEBKIT_DOM_IS_NODE(item.get()));
&gt; +            g_assert(WEBKIT_DOM_IS_ELEMENT(item.get()));

WebKitDOMElement derives from WebKitDOMNode, so you only need to check whether it&apos;s element. You should probably check WEBKIT_DOM_IS_HTML_ELEMENT instead.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:81
&gt; +            g_assert_cmpstr(webkit_dom_element_get_tag_name(WEBKIT_DOM_ELEMENT(item.get())), ==, &quot;LI&quot;);

You are leaking the tag name here, webkit_dom_element_get_tag_name() returns a newly allocated string, you should use GOwnPtr

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:82
&gt; +            GOwnPtr&lt;char&gt; expectedInnerText(g_strdup_printf(&quot;%d&quot;, i + 1));

Use %u instead of %d since i is unsigned.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:83
&gt; +            g_assert_cmpstr(webkit_dom_html_element_get_inner_text(WEBKIT_DOM_HTML_ELEMENT(item.get())), ==, expectedInnerText.get());

You are leaking the text here, you should use GOwnPtr

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:91
&gt; +        GRefPtr&lt;WebKitWebPage&gt; page(webkit_web_extension_get_page(extension, webPageFromArgs(args)));

No need for GrefPtr in this case.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:93
&gt; +        GRefPtr&lt;WebKitDOMDocument&gt; document(webkit_web_page_get_dom_document(page.get()));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:95
&gt; +        GRefPtr&lt;WebKitDOMNodeList&gt; list(webkit_dom_document_get_elements_by_class_name(document.get(), &quot;test&quot;));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:101
&gt; +            GRefPtr&lt;WebKitDOMNode&gt; item(webkit_dom_node_list_item(list.get(), i));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:103
&gt; +            GRefPtr&lt;WebKitDOMElement&gt; element(WEBKIT_DOM_ELEMENT(item.get()));

You don&apos;t need to use GRefPtr just for a cast.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:104
&gt; +            g_assert(WEBKIT_DOM_IS_ELEMENT(element.get()));

I think it should be enough to check this, all other checks are redundant, because a WebKitDOMElement is always a WebKitDOMNode

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:105
&gt; +            g_assert_cmpstr(webkit_dom_element_get_tag_name(element.get()), ==, &quot;DIV&quot;);

You are leaking the tag name here, you should use GOwnPtr.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:113
&gt; +        GRefPtr&lt;WebKitWebPage&gt; page(webkit_web_extension_get_page(extension, webPageFromArgs(args)));

No need to use GRefPtr here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:115
&gt; +        GRefPtr&lt;WebKitDOMDocument&gt; document(webkit_web_page_get_dom_document(page.get()));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:117
&gt; +        GRefPtr&lt;WebKitDOMElement&gt; element(webkit_dom_document_get_element_by_id(document.get(), &quot;testok&quot;));

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:123
&gt; +        /* The DOM spec says the return value is undefined when there&apos;s
&gt; +         * more than one element with the same id; in our case the first
&gt; +         * one will be returned */

Don not use C style comments. The lines could be longer, maybe even a single line.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:126
&gt; +        GRefPtr&lt;WebKitDOMHTMLElement&gt; htmlElement(WEBKIT_DOM_HTML_ELEMENT(element.get()));

You don&apos;t need to use GrefPtr just for a cast

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:127
&gt; +        g_assert_cmpstr(webkit_dom_html_element_get_inner_text(htmlElement.get()), ==, &quot;first&quot;);

You are leaking the text here,. use GOwnPtr

&gt; Source/WebKit2/UIProcess/API/gtk/tests/DOMDocumentTest.cpp:134
&gt; +        GRefPtr&lt;WebKitWebPage&gt; page(webkit_web_extension_get_page(extension, webPageFromArgs(args)));

Ok, I&apos;m not going to repeat myself again :-) You have the same issues in all the tests.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDOMDocument.cpp:110
&gt; +    static const char* testHTML = &quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;div&gt;First div&lt;/div&gt;&lt;div&gt;Second div&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; +    test-&gt;loadHtml(testHTML, 0);
&gt; +    test-&gt;waitUntilLoadFinished();
&gt; +
&gt; +    GVariantBuilder builder;
&gt; +    g_variant_builder_init(&amp;builder, G_VARIANT_TYPE_VARDICT);
&gt; +    g_variant_builder_add(&amp;builder, &quot;{sv}&quot;, &quot;pageID&quot;, g_variant_new_uint64(webkit_web_view_get_page_id(test-&gt;m_webView)));
&gt; +    g_assert(testRunner-&gt;runTest(&quot;WebKitDOMDocument&quot;, &quot;document-evaluate&quot;, g_variant_builder_end(&amp;builder)));

This code is mostly duplicated in all the test cases, the only thing that changes is the html and the test name. You could add a helper function webkitDOMDocumentTestRun(WebViewTest* test, const char* html, const char* testName) for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971663</commentid>
    <comment_count>8</comment_count>
      <attachid>222122</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2014-01-24 11:13:55 -0800</bug_when>
    <thetext>Created attachment 222122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151802</commentid>
    <comment_count>9</comment_count>
      <attachid>222122</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-12-31 16:06:21 -0800</bug_when>
    <thetext>Comment on attachment 222122
Patch

This patch includes changes to old Autotools files. Removing from request queue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213360</attachid>
            <date>2013-10-04 06:56:49 -0700</date>
            <delta_ts>2013-10-18 11:40:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118430-20131004155647.patch</filename>
            <type>text/plain</type>
            <size>22376</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWQ3YWUyNmUyNGI3NDZl
ODg0NTU3MDNhNWMyZDg0NDA0ZjViM2Y2MC4uN2Y0MmJkOGVlZTdjNTU5ZTk1YjJjNTdjN2QwZmYx
NGFiNjdmMzhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gTWlncmF0ZSBXZWJLaXRET01Eb2N1bWVudCB1bml0IHRlc3RzIHRvIFdlYktpdDIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQzMAorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBtaWdyYXRlIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2Vf
Y29sbGVjdGlvbigpIGJlY2F1c2UKKyAgICAgICAgaXQgcmVxdWlyZXMgQVBJIHRvIGxvYWQgYSBu
ZXcgZG9jdW1lbnQgaW4gV2ViUHJvY2VzcyAodGhlIGVxdWl2YWxlbnQgb2YKKyAgICAgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKCkpIGFuZCBpdCdzIG5vdCBjdXJyZW50bHkgYXZhaWxh
YmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NRG9jdW1lbnRUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRET01E
b2N1bWVudFRlc3Q6OndlYlBhZ2VGcm9tQXJncyk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVu
dFRlc3Q6OnRlc3RUaXRsZSk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRlc3RH
ZXRFbGVtZW50c0J5VGFnTmFtZSk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRl
c3RHZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdlYktpdERPTURvY3VtZW50VGVz
dDo6dGVzdEdldEVsZW1lbnRzQnlJZCk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6
OnRlc3RHZXRMaW5rcyk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRlc3RUYWJs
ZUluc2VydFJvdyk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRlc3REb2N1bWVu
dEV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdERPTURvY3VtZW50VGVzdDo6cnVuVGVzdCk6Cisg
ICAgICAgIChyZWdpc3RlclRlc3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
RE9NRG9jdW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudFRp
dGxlKToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldEVsZW1lbnRzQnlUYWdOYW1l
KToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldEVsZW1lbnRzQnlDbGFzc05hbWUp
OgorICAgICAgICAodGVzdFdlYktpdERPTURvY3VtZW50R2V0RWxlbWVudHNCeUlkKToKKyAgICAg
ICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldExpbmtzKToKKyAgICAgICAgKHRlc3RXZWJLaXRE
T01Eb2N1bWVudFRhYmxlSW5zZXJ0Um93KToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVu
dERvY3VtZW50RXZhbHVhdGUpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVy
QWxsKToKKwogMjAxMy0wOS0yNSAgTWluanUgS2ltICA8cG11YXJ0ZW9AZ21haWwuY29tPgogCiAg
ICAgICAgIDggYnl0ZXMgbWVtb3J5IGxlYWtzIGluIFdlYlByb2Nlc3NNYWluUXQuY3BwIHdoZW4g
cHJveHkgaXMgaW5pdGlhbGl6ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0RPTURvY3VtZW50VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Eb2N1bWVudFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjOGRi
ZDg0NmFiNzY5MjcxZjAyNzYzM2U5OWMwMjEzZTI5Mjg0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Eb2N1bWVudFRlc3QuY3Bw
CkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisjaW5j
bHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24u
aD4KKworY2xhc3MgV2ViS2l0RE9NRG9jdW1lbnRUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdERPTURvY3VtZW50VGVzdCgpKTsgfQorCitw
cml2YXRlOgorICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdzKQorICAg
IHsKKyAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFyaWFudF9pdGVyX2lu
aXQoJml0ZXIsIGFyZ3MpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICAgICAgR1Zh
cmlhbnQqIHZhbHVlOworICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwg
Insmc3Z9IiwgJmtleSwgJnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAi
cGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1Nf
VUlOVDY0KQorICAgICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29sIHRlc3RUaXRsZShXZWJLaXRXZWJFeHRlbnNp
b24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQ
YWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQ
YWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0Uo
cGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworICAgICAgICBnY2hhciogdGl0bGUgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KHRpdGxl
KTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHRpdGxl
Iik7CisgICAgICAgIGdfZnJlZSh0aXRsZSk7CisgICAgICAgIHdlYmtpdF9kb21fZG9jdW1lbnRf
c2V0X3RpdGxlKGRvY3VtZW50LCAiVGhpcyBpcyB0aGUgc2Vjb25kIHRpdGxlIik7CisgICAgICAg
IHRpdGxlID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQpOworICAgICAg
ICBnX2Fzc2VydCh0aXRsZSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJU
aGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKKyAgICAgICAgZ19mcmVlKHRpdGxlKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RHZXRFbGVtZW50c0J5VGFn
TmFtZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAg
eworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0
X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworICAgICAgICBX
ZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRz
X2J5X3RhZ19uYW1lKGRvY3VtZW50LCAibGkiKTsKKyAgICAgICAgZ19hc3NlcnQobGlzdCk7Cisg
ICAgICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxp
c3QpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMyk7CisKKyAgICAgICAg
Z3VpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIFdlYktpdERPTU5vZGUqIGl0ZW0gPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QsIGkpOworICAgICAgICAgICAgZ19hc3NlcnQoaXRlbSk7CisgICAgICAgICAgICBXZWJLaXRE
T01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07CisgICAgICAgICAg
ICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkxJIik7CisgICAgICAgICAg
ICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0RE9NSFRNTEVsZW1l
bnQqKWVsZW1lbnQ7CisgICAgICAgICAgICBjaGFyKiBuID0gZ19zdHJkdXBfcHJpbnRmKCIlZCIs
IGkrMSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1lbnQpLCA9PSwgbik7CisgICAgICAgICAgICBnX2Zy
ZWUobik7CisgICAgICAgIH0KKworICAgICAgICBnX29iamVjdF91bnJlZihsaXN0KTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RHZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAg
ICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9n
ZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50
KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAg
IFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dHNfYnlfY2xhc3NfbmFtZShkb2N1bWVudCwgInRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQobGlz
dCk7CisgICAgICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVu
Z3RoKGxpc3QpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMik7CisKKyAg
ICAgICAgZ3VpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIGl0ZW0gPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QsIGkpOworICAgICAgICAgICAgZ19hc3NlcnQoaXRlbSk7CisgICAgICAgICAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07CisgICAg
ICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkRJViIpOworICAg
ICAgICB9CisKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0R2V0RWxlbWVudHNCeUlkKFdlYktpdFdlYkV4
dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdlYktp
dFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24s
IHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJf
UEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtp
dF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERPTUVsZW1lbnQq
IGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50
LCAidGVzdG9rIik7CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBlbGVtZW50
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRoaXMt
aWQtZG9lcy1ub3QtZXhpc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoIWVsZW1lbnQpOworICAgICAg
ICAvKiBUaGUgRE9NIHNwZWMgc2F5cyB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZCB3aGVu
IHRoZXJlJ3MKKyAgICAgICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGggdGhlIHNhbWUg
aWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAorICAgICAgICAgKiBvbmUgd2lsbCBiZSByZXR1cm5l
ZCAqLworICAgICAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9i
eV9pZChkb2N1bWVudCwgInRlc3RiYWQiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7Cisg
ICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IChXZWJLaXRET01IVE1M
RWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sICJmaXJzdCIpOworCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdEdldExpbmtzKFdlYktp
dFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAg
IFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRl
bnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9
IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERPTUhU
TUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3Mo
ZG9jdW1lbnQpOworICAgICAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKKyAgICAgICAgZ3Vsb25n
IGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoY29sbGVjdGlv
bik7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKKworICAgICAgICBn
dWludCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWVzW10gPSB7ICJibGFuayIsICJnb29nbGUiLCAi
d2Via2l0IiB9OworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVyaXNbXSA9IHsgImFi
b3V0OmJsYW5rIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiaHR0cDovL3d3dy53ZWJraXQu
b3JnLyIgfTsKKyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3ZWJraXRfZG9tX2h0
bWxfY29sbGVjdGlvbl9pdGVtKGNvbGxlY3Rpb24sIGkpOworICAgICAgICAgICAgZ19hc3NlcnQo
bm9kZSk7CisgICAgICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERP
TUVsZW1lbnQqKW5vZGU7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9l
bGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJBIik7CisgICAgICAgICAgICBXZWJL
aXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVs
ZW1lbnQ7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1lbnQpLCA9PSwgbmFtZXNbaV0pOworICAgICAgICAg
ICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9IChXZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWYoYW5jaG9yKSwgPT0sIHVyaXNbaV0pOwor
ICAgICAgICB9CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdFRhYmxlSW5zZXJ0Um93KFdlYktp
dFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAg
IFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRl
bnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9
IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERPTUVs
ZW1lbnQqIHRhYmxlID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1
bWVudCwgInRhYmxlIik7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVN
RU5UKHRhYmxlKSk7CisgICAgICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxF
X0VMRU1FTlQodGFibGUpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NP
TExFQ1RJT04ocm93cykpOworCisgICAgICAgIC8vIFRhYmxlIGlzIGluaXRpYWxseSBlbXB0eS4K
KyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9s
ZW5ndGgocm93cyksID09LCAwKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHJvdyA9
IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2luc2VydF9yb3coV0VCS0lUX0RPTV9IVE1M
X1RBQkxFX0VMRU1FTlQodGFibGUpLCAtMSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChyb3cpKTsKKyAgICAgICAgcm93cyA9IHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdFQktJVF9ET01fSFRNTF9UQUJMRV9F
TEVNRU5UKHRhYmxlKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9DT0xM
RUNUSU9OKHJvd3MpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21faHRtbF9j
b2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAxKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3REb2N1bWVudEV2YWx1YXRlKFdlYktpdFdlYkV4dGVu
c2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdlYktpdFdl
YlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdl
YlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFH
RShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93
ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBs
aXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1l
bnQsICJodG1sIik7CisgICAgICAgIGdfYXNzZXJ0KGxpc3QpOworICAgICAgICBndWxvbmcgbGVu
Z3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKKyAgICAgICAgZ19h
c3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDEpOworICAgICAgICBXZWJLaXRET01Ob2RlKiBodG1s
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19OT0RFKGh0bWwpKTsKKworICAgICAgICBXZWJLaXRET01YUGF0aFJlc3Vs
dCogcmVzdWx0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZShkb2N1bWVudCwgIi8vZGl2
IiwgaHRtbCwgMCwgMCwgMCwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfWFBB
VEhfUkVTVUxUKHJlc3VsdCkpOworCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgV2ViS2l0
RE9NTm9kZSogbm9kZTsKKyAgICAgICAgd2hpbGUgKCEobm9kZSA9IHdlYmtpdF9kb21feHBhdGhf
cmVzdWx0X2l0ZXJhdGVfbmV4dChyZXN1bHQsIDApKSkgeworICAgICAgICAgICAgZ19hc3NlcnQo
bm9kZSk7CisgICAgICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERP
TUVsZW1lbnQqKW5vZGU7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9l
bGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKKyAgICAgICAgICAgIGkr
KzsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0sIDIpOworCisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRX
ZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBp
ZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInRpdGxlIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdFRp
dGxlKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiZ2V0
LWVsZW1lbnRzLWJ5LXRhZy1uYW1lIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdEdldEVsZW1l
bnRzQnlUYWdOYW1lKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3RO
YW1lLCAiZ2V0LWVsZW1lbnRzLWJ5LWNsYXNzLW5hbWUiKSkKKyAgICAgICAgICAgIHJldHVybiB0
ZXN0R2V0RWxlbWVudHNCeUNsYXNzTmFtZShleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAo
IXN0cmNtcCh0ZXN0TmFtZSwgImdldC1lbGVtZW50cy1ieS1pZCIpKQorICAgICAgICAgICAgcmV0
dXJuIHRlc3RHZXRFbGVtZW50c0J5SWQoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFz
dHJjbXAodGVzdE5hbWUsICJnZXQtbGlua3MiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0R2V0
TGlua3MoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ0
YWJsZS1pbnNlcnQtcm93IikpCisgICAgICAgICAgICByZXR1cm4gdGVzdFRhYmxlSW5zZXJ0Um93
KGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiZG9jdW1l
bnQtZXZhbHVhdGUiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0RG9jdW1lbnRFdmFsdWF0ZShl
eHRlbnNpb24sIGFyZ3MpOworCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9f
KChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQoreworICAgIFJFR0lTVEVSX1RFU1QoV2Vi
S2l0RE9NRG9jdW1lbnRUZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQvdGl0bGUiKTsKKyAgICBSRUdJ
U1RFUl9URVNUKFdlYktpdERPTURvY3VtZW50VGVzdCwgIldlYktpdERPTURvY3VtZW50L2dldC1l
bGVtZW50cy1ieS10YWctbmFtZSIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRG9jdW1l
bnRUZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQvZ2V0LWVsZW1lbnRzLWJ5LWNsYXNzLW5hbWUiKTsK
KyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTURvY3VtZW50VGVzdCwgIldlYktpdERPTURvY3Vt
ZW50L2dldC1lbGVtZW50cy1ieS1pZCIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRG9j
dW1lbnRUZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQvZ2V0LWxpbmtzIik7CisgICAgUkVHSVNURVJf
VEVTVChXZWJLaXRET01Eb2N1bWVudFRlc3QsICJXZWJLaXRET01Eb2N1bWVudC90YWJsZS1pbnNl
cnQtcm93Iik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Eb2N1bWVudFRlc3QsICJXZWJL
aXRET01Eb2N1bWVudC9kb2N1bWVudC1ldmFsdWF0ZSIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCBlMDA4
YWQwOWY1ODE3NzBmMTI5MmVjYTYyYThmZWE1Yjc1MjFkY2UzLi41MWFjNGUyMzU3MTQ3YzI3OThj
MDM1YmYxYjVjYmM3NjRkMDljZjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtNiw2ICs2LDcgQEAgVEVTVF9Q
Uk9HUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RDb250ZXh0TWVudSBcCiAJ
UHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RDb29raWVNYW5hZ2VyIFwKIAlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdERPTU5vZGUgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9U
ZXN0RE9NRG9jdW1lbnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRz
IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEZyYW1lIFwKIAlQcm9ncmFtcy9XZWJL
aXQyQVBJVGVzdHMvVGVzdEluc3BlY3RvciBcCkBAIC0xMjcsNiArMTI4LDcgQEAgTGlicmFyaWVz
X1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DRkxBR1MgPSBcCiBub2luc3Rf
TFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViUHJvY2Vzc1Rlc3Qu
bGEKIExpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX1NPVVJDRVMg
PSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRlc3Qu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Eb2N1bWVu
dFRlc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9GcmFt
ZVRlc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQ
cm9jZXNzVGVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlByb2Nlc3NUZXN0LmgKQEAgLTMwNCw2ICszMDYsMTIgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RET01Ob2RlX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQog
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Ob2RlX0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Ob2RlX0xERkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rl
c3RET01Eb2N1bWVudF9TT1VSQ0VTID0gXAorICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0RE9NRG9jdW1lbnQuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdERPTURvY3VtZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdz
KQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Eb2N1bWVudF9MREFERCA9ICQod2Vi
a2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RE9NRG9jdW1l
bnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiBQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdEZyYW1lX1NPVVJDRVMgPSBcCiAgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAKIFByb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0RnJhbWVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RE9NRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERP
TURvY3VtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTYxOWVmMmVkZWRjMGUzODgxMWI2YTc0ZTg3Yjk3
YzI0OTU5YmM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdERPTURvY3VtZW50LmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKwor
c3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOworCitzdGF0aWMgdm9pZCB0
ZXN0V2ViS2l0RE9NRG9jdW1lbnRUaXRsZShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSAiPGh0bWw+PGhlYWQ+PHRp
dGxlPlRoaXMgaXMgdGhlIHRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4i
OworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFy
aWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAg
IGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJp
YW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmll
dykpKTsKKyAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01Eb2N1bWVu
dCIsICJ0aXRsZSIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdFdlYktpdERPTURvY3VtZW50R2V0RWxlbWVudHNCeVRhZ05hbWUoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRl
c3RIVE1MID0gIjxodG1sPjxib2R5Pjx1bD48bGk+MTwvbGk+PGxpPjI8L2xpPjxsaT4zPC9saT48
L3VsPjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIg
YnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRf
VFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9
IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFn
ZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVz
dCgiV2ViS2l0RE9NRG9jdW1lbnQiLCAiZ2V0LWVsZW1lbnRzLWJ5LXRhZy1uYW1lIiwgZ192YXJp
YW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0
RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48
Ym9keT48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjxkaXYgY2xhc3M9XCJzdHJhbmdlXCI+PC9k
aXY+PGRpdiBjbGFzcz1cInRlc3RcIj48L2Rpdj48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+
bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
aW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2
NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdf
YXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTURvY3VtZW50IiwgImdldC1lbGVt
ZW50cy1ieS1jbGFzcy1uYW1lIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5SWQoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjxkaXYgaWQ9XCJ0ZXN0b2tcIj48L2Rpdj48ZGl2IGlk
PVwidGVzdGJhZFwiPmZpcnN0PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5zZWNvbmQ8L2Rpdj48
L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVf
VkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJw
YWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQo
dGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldl
YktpdERPTURvY3VtZW50IiwgImdldC1lbGVtZW50cy1ieS1pZCIsIGdfdmFyaWFudF9idWlsZGVy
X2VuZCgmYnVpbGRlcikpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURvY3VtZW50
R2V0TGlua3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+
PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJo
dHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Vi
a2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwo
dGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
R1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVp
bGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNzZXJ0KHRl
c3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTURvY3VtZW50IiwgImdldC1saW5rcyIsIGdfdmFy
aWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktp
dERPTURvY3VtZW50VGFibGVJbnNlcnRSb3coV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5Pjx0
YWJsZSBpZD1cInRhYmxlXCI+PC90YWJsZT48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9h
ZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5p
dCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNz
ZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTURvY3VtZW50IiwgInRhYmxlLWluc2Vy
dC1yb3ciLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJLaXRET01Eb2N1bWVudERvY3VtZW50RXZhbHVhdGUoV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0g
IjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZpcnN0IGRpdjwv
ZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2Fk
SHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0
KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdl
YmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3Nl
cnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NRG9jdW1lbnQiLCAiZG9jdW1lbnQtZXZh
bHVhdGUiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3ZvaWQgYmVm
b3JlQWxsKCkKK3sKKyAgICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7
CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05T
X0RJUik7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJ0aXRs
ZSIsIHRlc3RXZWJLaXRET01Eb2N1bWVudFRpdGxlKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRET01Eb2N1bWVudCIsICJnZXQtZWxlbWVudHMtYnktdGFnLW5hbWUiLCB0ZXN0V2ViS2l0
RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5VGFnTmFtZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0RE9NRG9jdW1lbnQiLCAiZ2V0LWVsZW1lbnRzLWJ5LWNsYXNzLW5hbWUiLCB0ZXN0V2Vi
S2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lKTsKKyAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJnZXQtZWxlbWVudHMtYnktaWQiLCB0ZXN0V2ViS2l0
RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5SWQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dERPTURvY3VtZW50IiwgImdldC1saW5rcyIsIHRlc3RXZWJLaXRET01Eb2N1bWVudEdldExpbmtz
KTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJ0YWJsZS1pbnNl
cnQtcm93IiwgdGVzdFdlYktpdERPTURvY3VtZW50VGFibGVJbnNlcnRSb3cpOworICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdERPTURvY3VtZW50IiwgImRvY3VtZW50LWV2YWx1YXRlIiwgdGVz
dFdlYktpdERPTURvY3VtZW50RG9jdW1lbnRFdmFsdWF0ZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwo
KQoreworICAgIGRlbGV0ZSB0ZXN0UnVubmVyOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214590</attachid>
            <date>2013-10-18 11:40:20 -0700</date>
            <delta_ts>2014-01-24 11:13:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118430-20131018184018.patch</filename>
            <type>text/plain</type>
            <size>23183</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWQ3YWUyNmUyNGI3NDZl
ODg0NTU3MDNhNWMyZDg0NDA0ZjViM2Y2MC4uN2Y0MmJkOGVlZTdjNTU5ZTk1YjJjNTdjN2QwZmYx
NGFiNjdmMzhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gTWlncmF0ZSBXZWJLaXRET01Eb2N1bWVudCB1bml0IHRlc3RzIHRvIFdlYktpdDIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQzMAorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBtaWdyYXRlIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2Vf
Y29sbGVjdGlvbigpIGJlY2F1c2UKKyAgICAgICAgaXQgcmVxdWlyZXMgQVBJIHRvIGxvYWQgYSBu
ZXcgZG9jdW1lbnQgaW4gV2ViUHJvY2VzcyAodGhlIGVxdWl2YWxlbnQgb2YKKyAgICAgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKCkpIGFuZCBpdCdzIG5vdCBjdXJyZW50bHkgYXZhaWxh
YmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NRG9jdW1lbnRUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRET01E
b2N1bWVudFRlc3Q6OndlYlBhZ2VGcm9tQXJncyk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVu
dFRlc3Q6OnRlc3RUaXRsZSk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRlc3RH
ZXRFbGVtZW50c0J5VGFnTmFtZSk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRl
c3RHZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdlYktpdERPTURvY3VtZW50VGVz
dDo6dGVzdEdldEVsZW1lbnRzQnlJZCk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6
OnRlc3RHZXRMaW5rcyk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRlc3RUYWJs
ZUluc2VydFJvdyk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnRlc3REb2N1bWVu
dEV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdERPTURvY3VtZW50VGVzdDo6cnVuVGVzdCk6Cisg
ICAgICAgIChyZWdpc3RlclRlc3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
RE9NRG9jdW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudFRp
dGxlKToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldEVsZW1lbnRzQnlUYWdOYW1l
KToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldEVsZW1lbnRzQnlDbGFzc05hbWUp
OgorICAgICAgICAodGVzdFdlYktpdERPTURvY3VtZW50R2V0RWxlbWVudHNCeUlkKToKKyAgICAg
ICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldExpbmtzKToKKyAgICAgICAgKHRlc3RXZWJLaXRE
T01Eb2N1bWVudFRhYmxlSW5zZXJ0Um93KToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVu
dERvY3VtZW50RXZhbHVhdGUpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVy
QWxsKToKKwogMjAxMy0wOS0yNSAgTWluanUgS2ltICA8cG11YXJ0ZW9AZ21haWwuY29tPgogCiAg
ICAgICAgIDggYnl0ZXMgbWVtb3J5IGxlYWtzIGluIFdlYlByb2Nlc3NNYWluUXQuY3BwIHdoZW4g
cHJveHkgaXMgaW5pdGlhbGl6ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0RPTURvY3VtZW50VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Eb2N1bWVudFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2OGIy
MWYwMzA0ZjY5Nzc3MWNlMmU1N2EzYWZhYTA2YzllNzVhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Eb2N1bWVudFRlc3QuY3Bw
CkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisjaW5j
bHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24u
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorCitjbGFzcyBXZWJLaXRET01Eb2N1bWVudFRlc3QgOiBwdWJsaWMgV2Vi
UHJvY2Vzc1Rlc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NU
ZXN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgV2ViS2l0RE9NRG9jdW1lbnRUZXN0
KCkpOyB9CisKK3ByaXZhdGU6CisgICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQq
IGFyZ3MpCisgICAgeworICAgICAgICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAgICAgICAgZ192YXJp
YW50X2l0ZXJfaW5pdCgmaXRlciwgYXJncyk7CisKKyAgICAgICAgY29uc3QgY2hhcioga2V5Owor
ICAgICAgICBHVmFyaWFudCogdmFsdWU7CisgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9s
b29wKCZpdGVyLCAieyZzdn0iLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoIXN0
cmNtcChrZXksICJwYWdlSUQiKSAmJiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFS
SUFOVF9DTEFTU19VSU5UNjQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRf
dWludDY0KHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJvb2wgdGVzdFRpdGxlKFdlYktp
dFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAg
IEdSZWZQdHI8V2ViS2l0V2ViUGFnZT4gcGFnZSh3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFn
ZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSkpOworICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfV0VCX1BBR0UocGFnZS5nZXQoKSkpOworICAgICAgICBHUmVmUHRyPFdlYktpdERP
TURvY3VtZW50PiBkb2N1bWVudCh3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdl
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1l
bnQuZ2V0KCkpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiB0aXRsZSh3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF90aXRsZShkb2N1bWVudC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydCh0aXRsZS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwgPT0sICJUaGlzIGlz
IHRoZSB0aXRsZSIpOworICAgICAgICB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF90aXRsZShkb2N1
bWVudC5nZXQoKSwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIpOworICAgICAgICB0aXRsZS5z
ZXQod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnQodGl0bGUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUu
Z2V0KCksID09LCAiVGhpcyBpcyB0aGUgc2Vjb25kIHRpdGxlIik7CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWUoV2ViS2l0
V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAg
R1JlZlB0cjxXZWJLaXRXZWJQYWdlPiBwYWdlKHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdl
KGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19XRUJfUEFHRShwYWdlLmdldCgpKSk7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9N
RG9jdW1lbnQ+IGRvY3VtZW50KHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2Uu
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVu
dC5nZXQoKSkpOworICAgICAgICBHUmVmUHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0KHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50LmdldCgpLCAi
bGkiKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0
KCkpKTsKKyAgICAgICAgZ3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9s
ZW5ndGgobGlzdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAz
KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NTm9kZT4gaXRlbSh3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QuZ2V0KCksIGkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfTk9ERShpdGVtLmdldCgpKSk7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoaXRlbS5nZXQoKSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUoV0VCS0lUX0RPTV9FTEVNRU5UKGl0ZW0uZ2V0KCkp
KSwgPT0sICJMSSIpOworICAgICAgICAgICAgR093blB0cjxjaGFyPiBleHBlY3RlZElubmVyVGV4
dChnX3N0cmR1cF9wcmludGYoIiVkIiwgaSArIDEpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChXRUJLSVRfRE9NX0hU
TUxfRUxFTUVOVChpdGVtLmdldCgpKSksID09LCBleHBlY3RlZElubmVyVGV4dC5nZXQoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RH
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFy
aWFudCogYXJncykKKyAgICB7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViUGFnZT4gcGFnZSh3
ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhh
cmdzKSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZS5nZXQoKSkp
OworICAgICAgICBHUmVmUHRyPFdlYktpdERPTURvY3VtZW50PiBkb2N1bWVudCh3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgR1JlZlB0cjxX
ZWJLaXRET01Ob2RlTGlzdD4gbGlzdCh3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19i
eV9jbGFzc19uYW1lKGRvY3VtZW50LmdldCgpLCAidGVzdCIpKTsKKyAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAgICAgICBndWxvbmcgbGVu
Z3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDIpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgR1JlZlB0cjxXZWJLaXRE
T01Ob2RlPiBpdGVtKHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgaSkpOwor
ICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKGl0ZW0uZ2V0KCkpKTsKKyAg
ICAgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NRWxlbWVudD4gZWxlbWVudChXRUJLSVRfRE9NX0VM
RU1FTlQoaXRlbS5nZXQoKSkpOworICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19F
TEVNRU5UKGVsZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQuZ2V0KCkpLCA9PSwgIkRJViIpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0
R2V0RWxlbWVudHNCeUlkKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCog
YXJncykKKyAgICB7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViUGFnZT4gcGFnZSh3ZWJraXRf
d2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSkp
OworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZS5nZXQoKSkpOworICAg
ICAgICBHUmVmUHRyPFdlYktpdERPTURvY3VtZW50PiBkb2N1bWVudCh3ZWJraXRfd2ViX3BhZ2Vf
Z2V0X2RvbV9kb2N1bWVudChwYWdlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoZG9jdW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRE
T01FbGVtZW50PiBlbGVtZW50KHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQo
ZG9jdW1lbnQuZ2V0KCksICJ0ZXN0b2siKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfRUxFTUVOVChlbGVtZW50LmdldCgpKSk7CisgICAgICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LmdldCgpLCAidGhpcy1pZC1kb2Vz
LW5vdC1leGlzdCIpOworICAgICAgICBnX2Fzc2VydCghZWxlbWVudC5nZXQoKSk7CisgICAgICAg
IC8qIFRoZSBET00gc3BlYyBzYXlzIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIHdoZW4g
dGhlcmUncworICAgICAgICAgKiBtb3JlIHRoYW4gb25lIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBp
ZDsgaW4gb3VyIGNhc2UgdGhlIGZpcnN0CisgICAgICAgICAqIG9uZSB3aWxsIGJlIHJldHVybmVk
ICovCisgICAgICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5
X2lkKGRvY3VtZW50LmdldCgpLCAidGVzdGJhZCIpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0VMRU1FTlQoZWxlbWVudC5nZXQoKSkpOworICAgICAgICBHUmVmUHRyPFdlYktpdERP
TUhUTUxFbGVtZW50PiBodG1sRWxlbWVudChXRUJLSVRfRE9NX0hUTUxfRUxFTUVOVChlbGVtZW50
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9nZXRfaW5uZXJfdGV4dChodG1sRWxlbWVudC5nZXQoKSksID09LCAiZmlyc3QiKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RHZXRMaW5rcyhXZWJLaXRX
ZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBH
UmVmUHRyPFdlYktpdFdlYlBhZ2U+IHBhZ2Uod2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2Uo
ZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX1dFQl9QQUdFKHBhZ2UuZ2V0KCkpKTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRET01E
b2N1bWVudD4gZG9jdW1lbnQod2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZS5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50
LmdldCgpKSk7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24+IGNvbGxl
Y3Rpb24od2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04oY29sbGVjdGlvbi5n
ZXQoKSkpOworICAgICAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rp
b25fZ2V0X2xlbmd0aChjb2xsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50
KGxlbmd0aCwgPT0sIDMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWVzW10gPSB7ICJi
bGFuayIsICJnb29nbGUiLCAid2Via2l0IiB9OworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHVyaXNbXSA9IHsgImFib3V0OmJsYW5rIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAi
aHR0cDovL3d3dy53ZWJraXQub3JnLyIgfTsKKyAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9N
Tm9kZT4gbm9kZSh3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtKGNvbGxlY3Rpb24uZ2V0
KCksIGkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShub2RlLmdl
dCgpKSk7CisgICAgICAgICAgICBHUmVmUHRyPFdlYktpdERPTUVsZW1lbnQ+IGVsZW1lbnQoV0VC
S0lUX0RPTV9FTEVNRU5UKG5vZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQuZ2V0KCkpLCA9PSwgIkEi
KTsKKyAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NSFRNTEVsZW1lbnQ+IGh0bWxFbGVtZW50
KFdFQktJVF9ET01fSFRNTF9FTEVNRU5UKGVsZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChodG1s
RWxlbWVudC5nZXQoKSksID09LCBuYW1lc1tpXSk7CisgICAgICAgICAgICBHUmVmUHRyPFdlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50PiBhbmNob3IoV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVN
RU5UKGVsZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWYoYW5jaG9yLmdldCgpKSwgPT0sIHVyaXNb
aV0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9v
bCB0ZXN0VGFibGVJbnNlcnRSb3coV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJp
YW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJQYWdlPiBwYWdlKHdl
YmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFy
Z3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlLmdldCgpKSk7
CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NRG9jdW1lbnQ+IGRvY3VtZW50KHdlYmtpdF93ZWJf
cGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudC5nZXQoKSkpOworICAgICAgICBHUmVmUHRyPFdl
YktpdERPTUVsZW1lbnQ+IHRhYmxlKHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlf
aWQoZG9jdW1lbnQuZ2V0KCksICJ0YWJsZSIpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0VMRU1FTlQodGFibGUuZ2V0KCkpKTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbj4gcm93cyh3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRf
cm93cyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZS5nZXQoKSkpKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cy5nZXQoKSkpOwor
CisgICAgICAgIC8vIFRhYmxlIGlzIGluaXRpYWxseSBlbXB0eS4KKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cy5nZXQoKSks
ID09LCAwKTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRET01IVE1MRWxlbWVudD4gcm93KHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2luc2VydF9yb3coV0VCS0lUX0RPTV9IVE1MX1RBQkxF
X0VMRU1FTlQodGFibGUuZ2V0KCkpLCAtMSwgMCkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQocm93LmdldCgpKSk7CisgICAgICAgIHJvd3Mg
PSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93cyhXRUJLSVRfRE9NX0hUTUxf
VEFCTEVfRUxFTUVOVCh0YWJsZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0hUTUxfQ09MTEVDVElPTihyb3dzLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MuZ2V0KCkpLCA9PSwg
MSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0RG9jdW1l
bnRFdmFsdWF0ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3Mp
CisgICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlBhZ2U+IHBhZ2Uod2Via2l0X3dlYl9l
eHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UuZ2V0KCkpKTsKKyAgICAgICAg
R1JlZlB0cjxXZWJLaXRET01Eb2N1bWVudD4gZG9jdW1lbnQod2Via2l0X3dlYl9wYWdlX2dldF9k
b21fZG9jdW1lbnQocGFnZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKGRvY3VtZW50LmdldCgpKSk7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NTm9k
ZUxpc3Q+IGxpc3Qod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUo
ZG9jdW1lbnQuZ2V0KCksICJodG1sIikpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRf
ZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQobGVuZ3RoLCA9PSwgMSk7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NTm9kZT4gaHRt
bCh3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApKTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKGh0bWwuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRy
PFdlYktpdERPTVhQYXRoUmVzdWx0PiByZXN1bHQod2Via2l0X2RvbV9kb2N1bWVudF9ldmFsdWF0
ZShkb2N1bWVudC5nZXQoKSwgIi8vZGl2IiwgaHRtbC5nZXQoKSwgMCwgMCwgMCwgMCkpOworICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1bHQuZ2V0KCkpKTsK
KworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2Rl
PiBub2RlOworICAgICAgICB3aGlsZSAobm9kZSA9IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2l0
ZXJhdGVfbmV4dChyZXN1bHQuZ2V0KCksIDApKSB7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX05PREUobm9kZS5nZXQoKSkpOworICAgICAgICAgICAgR1JlZlB0cjxXZWJLaXRE
T01FbGVtZW50PiBlbGVtZW50KFdFQktJVF9ET01fRUxFTUVOVChub2RlLmdldCgpKSk7CisgICAg
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShl
bGVtZW50LmdldCgpKSwgPT0sICJESVYiKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0sIDIpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1l
LCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgewor
ICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInRpdGxlIikpCisgICAgICAgICAgICByZXR1
cm4gdGVzdFRpdGxlKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3RO
YW1lLCAiZ2V0LWVsZW1lbnRzLWJ5LXRhZy1uYW1lIikpCisgICAgICAgICAgICByZXR1cm4gdGVz
dEdldEVsZW1lbnRzQnlUYWdOYW1lKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3Ry
Y21wKHRlc3ROYW1lLCAiZ2V0LWVsZW1lbnRzLWJ5LWNsYXNzLW5hbWUiKSkKKyAgICAgICAgICAg
IHJldHVybiB0ZXN0R2V0RWxlbWVudHNCeUNsYXNzTmFtZShleHRlbnNpb24sIGFyZ3MpOworICAg
ICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImdldC1lbGVtZW50cy1ieS1pZCIpKQorICAgICAg
ICAgICAgcmV0dXJuIHRlc3RHZXRFbGVtZW50c0J5SWQoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAg
ICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJnZXQtbGlua3MiKSkKKyAgICAgICAgICAgIHJldHVy
biB0ZXN0R2V0TGlua3MoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVz
dE5hbWUsICJ0YWJsZS1pbnNlcnQtcm93IikpCisgICAgICAgICAgICByZXR1cm4gdGVzdFRhYmxl
SW5zZXJ0Um93KGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1l
LCAiZG9jdW1lbnQtZXZhbHVhdGUiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0RG9jdW1lbnRF
dmFsdWF0ZShleHRlbnNpb24sIGFyZ3MpOworCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCBfX2F0
dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQoreworICAgIFJFR0lTVEVS
X1RFU1QoV2ViS2l0RE9NRG9jdW1lbnRUZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQvdGl0bGUiKTsK
KyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTURvY3VtZW50VGVzdCwgIldlYktpdERPTURvY3Vt
ZW50L2dldC1lbGVtZW50cy1ieS10YWctbmFtZSIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0
RE9NRG9jdW1lbnRUZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQvZ2V0LWVsZW1lbnRzLWJ5LWNsYXNz
LW5hbWUiKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTURvY3VtZW50VGVzdCwgIldlYktp
dERPTURvY3VtZW50L2dldC1lbGVtZW50cy1ieS1pZCIpOworICAgIFJFR0lTVEVSX1RFU1QoV2Vi
S2l0RE9NRG9jdW1lbnRUZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQvZ2V0LWxpbmtzIik7CisgICAg
UkVHSVNURVJfVEVTVChXZWJLaXRET01Eb2N1bWVudFRlc3QsICJXZWJLaXRET01Eb2N1bWVudC90
YWJsZS1pbnNlcnQtcm93Iik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Eb2N1bWVudFRl
c3QsICJXZWJLaXRET01Eb2N1bWVudC9kb2N1bWVudC1ldmFsdWF0ZSIpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpp
bmRleCBlMDA4YWQwOWY1ODE3NzBmMTI5MmVjYTYyYThmZWE1Yjc1MjFkY2UzLi41MWFjNGUyMzU3
MTQ3YzI3OThjMDM1YmYxYjVjYmM3NjRkMDljZjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtNiw2ICs2LDcg
QEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RDb250ZXh0
TWVudSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RDb29raWVNYW5hZ2VyIFwKIAlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdERPTU5vZGUgXAorCVByb2dyYW1zL1dlYktpdDJB
UElUZXN0cy9UZXN0RE9NRG9jdW1lbnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0
RG93bmxvYWRzIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEZyYW1lIFwKIAlQcm9n
cmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEluc3BlY3RvciBcCkBAIC0xMjcsNiArMTI4LDcgQEAg
TGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DRkxBR1MgPSBc
CiBub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViUHJv
Y2Vzc1Rlc3QubGEKIExpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xh
X1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9N
Tm9kZVRlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9E
T01Eb2N1bWVudFRlc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9GcmFtZVRlc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJQcm9jZXNzVGVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmgKQEAgLTMwNCw2ICszMDYsMTIgQEAgUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Ob2RlX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2Nw
cGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Ob2RlX0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Ob2Rl
X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RET01Eb2N1bWVudF9TT1VSQ0VTID0gXAorICAgICAgICBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RE9NRG9jdW1lbnQuY3BwCitQcm9ncmFtc19X
ZWJLaXQyQVBJVGVzdHNfVGVzdERPTURvY3VtZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Eb2N1bWVudF9MREFE
RCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
RE9NRG9jdW1lbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiBQcm9ncmFt
c19XZWJLaXQyQVBJVGVzdHNfVGVzdEZyYW1lX1NPVVJDRVMgPSBcCiAgICAgICAgIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAKIFByb2dyYW1zX1dl
YktpdDJBUElUZXN0c19UZXN0RnJhbWVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxh
Z3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0RE9NRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdERPTURvY3VtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTYxOWVmMmVkZWRjMGUzODgxMWI2
YTc0ZTg3Yjk3YzI0OTU5YmM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTURvY3VtZW50LmNwcApAQCAtMCwwICsxLDEzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKyNpbmNsdWRlICJXZWJW
aWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtp
dDIuaD4KKworc3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRG9jdW1lbnRUaXRsZShXZWJWaWV3VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSAiPGh0bWw+
PGhlYWQ+PHRpdGxlPlRoaXMgaXMgdGhlIHRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5
PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOwor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJ
Q1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlE
IiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3Qt
Pm1fd2ViVmlldykpKTsKKyAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRE
T01Eb2N1bWVudCIsICJ0aXRsZSIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURvY3VtZW50R2V0RWxlbWVudHNCeVRhZ05h
bWUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5Pjx1bD48bGk+MTwvbGk+PGxpPjI8L2xpPjxs
aT4zPC9saT48L3VsPjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRN
TCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFu
dEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBH
X1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxk
ZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmll
d19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5l
ci0+cnVuVGVzdCgiV2ViS2l0RE9NRG9jdW1lbnQiLCAiZ2V0LWVsZW1lbnRzLWJ5LXRhZy1uYW1l
IiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFdlYlZpZXdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9
ICI8aHRtbD48Ym9keT48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjxkaXYgY2xhc3M9XCJzdHJh
bmdlXCI+PC9kaXY+PGRpdiBjbGFzcz1cInRlc3RcIj48L2Rpdj48L2JvZHk+PC9odG1sPiI7Cisg
ICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50
X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRf
bmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkp
OworICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTURvY3VtZW50Iiwg
ImdldC1lbGVtZW50cy1ieS1jbGFzcy1uYW1lIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWls
ZGVyKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50
c0J5SWQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjxkaXYgaWQ9XCJ0ZXN0b2tcIj48L2Rp
dj48ZGl2IGlkPVwidGVzdGJhZFwiPmZpcnN0PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5zZWNv
bmQ8L2Rpdj48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWls
ZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJ
QU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAi
e3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1
blRlc3QoIldlYktpdERPTURvY3VtZW50IiwgImdldC1lbGVtZW50cy1ieS1pZCIsIGdfdmFyaWFu
dF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERP
TURvY3VtZW50R2V0TGlua3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRs
ZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxh
IGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6
Ly93d3cud2Via2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+
bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
aW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2
NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdf
YXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTURvY3VtZW50IiwgImdldC1saW5r
cyIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYktpdERPTURvY3VtZW50VGFibGVJbnNlcnRSb3coV2ViVmlld1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1s
Pjxib2R5Pjx0YWJsZSBpZD1cInRhYmxlXCI+PC90YWJsZT48L2JvZHk+PC9odG1sPiI7CisgICAg
dGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3
X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwor
ICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTURvY3VtZW50IiwgInRh
YmxlLWluc2VydC1yb3ciLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Eb2N1bWVudERvY3VtZW50RXZhbHVhdGUoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRl
c3RIVE1MID0gIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZp
cnN0IGRpdjwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IjsKKyAgICB0
ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVp
bGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdf
dWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7Cisg
ICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NRG9jdW1lbnQiLCAiZG9j
dW1lbnQtZXZhbHVhdGUiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0
UnVubmVyKCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJl
Y3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9F
WFRFTlNJT05TX0RJUik7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVu
dCIsICJ0aXRsZSIsIHRlc3RXZWJLaXRET01Eb2N1bWVudFRpdGxlKTsKKyAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJnZXQtZWxlbWVudHMtYnktdGFnLW5hbWUiLCB0
ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5VGFnTmFtZSk7CisgICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0RE9NRG9jdW1lbnQiLCAiZ2V0LWVsZW1lbnRzLWJ5LWNsYXNzLW5hbWUi
LCB0ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lKTsKKyAgICBXZWJW
aWV3VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJnZXQtZWxlbWVudHMtYnktaWQiLCB0
ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50c0J5SWQpOworICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdERPTURvY3VtZW50IiwgImdldC1saW5rcyIsIHRlc3RXZWJLaXRET01Eb2N1bWVu
dEdldExpbmtzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJ0
YWJsZS1pbnNlcnQtcm93IiwgdGVzdFdlYktpdERPTURvY3VtZW50VGFibGVJbnNlcnRSb3cpOwor
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTURvY3VtZW50IiwgImRvY3VtZW50LWV2YWx1
YXRlIiwgdGVzdFdlYktpdERPTURvY3VtZW50RG9jdW1lbnRFdmFsdWF0ZSk7Cit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0UnVubmVyOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222122</attachid>
            <date>2014-01-24 11:13:55 -0800</date>
            <delta_ts>2015-12-31 16:06:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118430-20140124191353.patch</filename>
            <type>text/plain</type>
            <size>21386</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYyNzA3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmU4NzI3YjBkMzNmOTdkMTJlMDEzMTYwMTI1MjJhOGRl
NzBlNTI5OS4uNjM1N2NkNjJkMWU2ZDIzYjU3Y2M0OWUzY2I5ODcxMWUzZGYxMWM2YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2
IEBACisyMDE0LTAxLTI0ICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gTWlncmF0ZSBXZWJLaXRET01Eb2N1bWVudCB1bml0IHRl
c3RzIHRvIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExODQzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTURvY3VtZW50VGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0RE9NRG9jdW1lbnRUZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0RE9N
RG9jdW1lbnRUZXN0Ojp3ZWJQYWdlRnJvbUFyZ3MpOgorICAgICAgICAoV2ViS2l0RE9NRG9jdW1l
bnRUZXN0Ojp0ZXN0VGl0bGUpOgorICAgICAgICAoV2ViS2l0RE9NRG9jdW1lbnRUZXN0Ojp0ZXN0
R2V0RWxlbWVudHNCeVRhZ05hbWUpOgorICAgICAgICAoV2ViS2l0RE9NRG9jdW1lbnRUZXN0Ojp0
ZXN0R2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRl
c3Q6OnRlc3RHZXRFbGVtZW50c0J5SWQpOgorICAgICAgICAoV2ViS2l0RE9NRG9jdW1lbnRUZXN0
Ojp0ZXN0R2V0TGlua3MpOgorICAgICAgICAoV2ViS2l0RE9NRG9jdW1lbnRUZXN0Ojp0ZXN0VGFi
bGVJbnNlcnRSb3cpOgorICAgICAgICAoV2ViS2l0RE9NRG9jdW1lbnRUZXN0Ojp0ZXN0RG9jdW1l
bnRFdmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXRET01Eb2N1bWVudFRlc3Q6OnJ1blRlc3QpOgor
ICAgICAgICAocmVnaXN0ZXJUZXN0cyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RET01Eb2N1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0RE9N
RG9jdW1lbnRUZXN0UnVuKToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudFRpdGxlKToK
KyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldEVsZW1lbnRzQnlUYWdOYW1lKToKKyAg
ICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudEdldEVsZW1lbnRzQnlDbGFzc05hbWUpOgorICAg
ICAgICAodGVzdFdlYktpdERPTURvY3VtZW50R2V0RWxlbWVudHNCeUlkKToKKyAgICAgICAgKHRl
c3RXZWJLaXRET01Eb2N1bWVudEdldExpbmtzKToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1
bWVudFRhYmxlSW5zZXJ0Um93KToKKyAgICAgICAgKHRlc3RXZWJLaXRET01Eb2N1bWVudERvY3Vt
ZW50RXZhbHVhdGUpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToK
KwogMjAxNC0wMS0yMyAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIENTUyBDdXN0b20gRmlsdGVycyBjb2RlIGFuZCB0ZXN0cwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
R05VbWFrZWZpbGUuYW0KaW5kZXggM2QzMGMyYTg2ZDg1MDliZWE5MWU0MjY1OWI5YjhmNmVkNWQ3
NDQ5NC4uNjhjZjE4Yzk0N2NhYzE1MTQ0YTcyMTNiNmMwYTI5MzFhMjlkY2UyZSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTUsNiArMTU1LDcgQEAgbm9pbnN0X1BST0dSQU1T
ICs9IFwKIAlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJk
TGlzdCBcCiAJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVu
dSBcCiAJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2Vy
IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdERPTURvY3VtZW50IFwK
IAlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdERPTU5vZGUgXAogCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzIFwKIAlQcm9ncmFtcy9U
ZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEZyYW1lIFwKQEAgLTcxMyw2ICs3MTQsNyBAQCBu
b2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViUHJvY2Vz
c1Rlc3QubGEKIGVuZGlmCiAKIExpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NU
ZXN0X2xhX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L0RPTURvY3VtZW50VGVzdC5jcHAgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9ET01Ob2RlVGVzdC5jcHAgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9GcmFtZVRlc3QuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvV2ViUHJvY2Vzc1Rlc3QuY3BwIFwKQEAgLTg5MCw2ICs4OTIsMTIgQEAgUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfQ1BQRkxBR1MgPSAk
KHdlYmtpdDJndGsKIFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0
V2ViVmlld0dyb3VwX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfTERGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdERPTURvY3VtZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NRG9jdW1lbnQuY3BwCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTURvY3VtZW50X0NQUEZMQUdTID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RET01Eb2N1bWVudF9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RE9NRG9jdW1lbnRfTERGTEFHUyA9ICQo
d2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCiBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdERPTU5vZGVfU09VUkNFUyA9IFwKICAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01Ob2RlLmNwcAogUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RET01Ob2RlX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2Nw
cGZsYWdzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NN
YWtlTGlzdHMudHh0CmluZGV4IGI4ODNjZjFlNmQ0OTJlMmQzZDgzZTU0YTk5ZTllMmI3MWZlYTBj
MWEuLmFlZDdmNTE2MGU1NGE2NjY4ZTM3NWRkZmM4MWI5ZmVlYmNhY2VkNGQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQKQEAg
LTgwLDEyICs4MCwxMyBAQCBtYWNybyhBRERfV0syX1RFU1QgdGVzdF9uYW1lKQogZW5kbWFjcm8o
KQogCiBBRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTihXZWJFeHRlbnNpb25UZXN0IFdlYkV4dGVu
c2lvblRlc3QuY3BwKQotQUREX1dLMl9URVNUX1dFQl9FWFRFTlNJT04oV2ViUHJvY2Vzc1Rlc3Qg
RE9NTm9kZVRlc3QuY3BwIEZyYW1lVGVzdC5jcHAgV2ViUHJvY2Vzc1Rlc3QuY3BwKQorQUREX1dL
Ml9URVNUX1dFQl9FWFRFTlNJT04oV2ViUHJvY2Vzc1Rlc3QgRE9NRG9jdW1lbnRUZXN0LmNwcCBE
T01Ob2RlVGVzdC5jcHAgRnJhbWVUZXN0LmNwcCBXZWJQcm9jZXNzVGVzdC5jcHApCiAKIEFERF9X
SzJfVEVTVChJbnNwZWN0b3JUZXN0U2VydmVyIEluc3BlY3RvclRlc3RTZXJ2ZXIuY3BwKQogQURE
X1dLMl9URVNUKFRlc3RCYWNrRm9yd2FyZExpc3QgVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHApCiBB
RERfV0syX1RFU1QoVGVzdENvbnRleHRNZW51IFRlc3RDb250ZXh0TWVudS5jcHApCiBBRERfV0sy
X1RFU1QoVGVzdENvb2tpZU1hbmFnZXIgVGVzdENvb2tpZU1hbmFnZXIuY3BwKQorQUREX1dLMl9U
RVNUKFRlc3RET01Eb2N1bWVudCBUZXN0RE9NRG9jdW1lbnQuY3BwKQogQUREX1dLMl9URVNUKFRl
c3RET01Ob2RlIFRlc3RET01Ob2RlLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0RG93bmxvYWRzIFRl
c3REb3dubG9hZHMuY3BwKQogQUREX1dLMl9URVNUKFRlc3RGcmFtZSBUZXN0RnJhbWUuY3BwKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTURvY3Vt
ZW50VGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NRG9j
dW1lbnRUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTQ3NmM4NjlhOTM2NDViNGE4ZWYyMmY4YjcyZWE4
Mzg4YmMzNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL0RPTURvY3VtZW50VGVzdC5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8
d2Via2l0Mi93ZWJraXQtd2ViLWV4dGVuc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KKworY2xhc3MgV2ViS2l0RE9NRG9jdW1lbnRUZXN0IDogcHVibGljIFdlYlByb2Nl
c3NUZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdERPTURvY3VtZW50VGVzdCgpKTsg
fQorCitwcml2YXRlOgorICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdz
KQorICAgIHsKKyAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFyaWFudF9p
dGVyX2luaXQoJml0ZXIsIGFyZ3MpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICAg
ICAgR1ZhcmlhbnQqIHZhbHVlOworICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgm
aXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAo
a2V5LCAicGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRf
Q0xBU1NfVUlOVDY0KQorICAgICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2
NCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29sIHRlc3RUaXRsZShXZWJLaXRXZWJF
eHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJL
aXRXZWJQYWdlKiBwYWdlKHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwg
d2ViUGFnZUZyb21BcmdzKGFyZ3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJf
UEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCh3ZWJraXRf
d2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiB0aXRs
ZSh3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCkpOworICAgICAgICBnX2Fz
c2VydF9jbXBzdHIodGl0bGUuZ2V0KCksID09LCAiVGhpcyBpcyB0aGUgdGl0bGUiKTsKKyAgICAg
ICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUoZG9jdW1lbnQsICJUaGlzIGlzIHRoZSBz
ZWNvbmQgdGl0bGUiKTsKKyAgICAgICAgdGl0bGUuc2V0KHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X3RpdGxlKGRvY3VtZW50KSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwg
PT0sICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBib29sIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZShXZWJLaXRXZWJFeHRl
bnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRX
ZWJQYWdlKiBwYWdlKHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2Vi
UGFnZUZyb21BcmdzKGFyZ3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFH
RShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCh3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAgICAgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxp
c3Qod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQs
ICJsaSIpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdCkp
OworICAgICAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0
aChsaXN0KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
V2ViS2l0RE9NTm9kZSogaXRlbSh3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpKTsK
KyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGl0ZW0pKTsK
KyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdGFnTmFtZSh3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X3RhZ19uYW1lKFdFQktJVF9ET01fRUxFTUVOVChpdGVtKSkpOworICAgICAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHRhZ05hbWUuZ2V0KCksID09LCAiTEkiKTsKKyAgICAgICAgICAgIEdPd25QdHI8
Y2hhcj4gaW5uZXJUZXh0KHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KFdF
QktJVF9ET01fSFRNTF9FTEVNRU5UKGl0ZW0pKSk7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+
IGV4cGVjdGVkSW5uZXJUZXh0KGdfc3RyZHVwX3ByaW50ZigiJXUiLCBpICsgMSkpOworICAgICAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKGlubmVyVGV4dC5nZXQoKSwgPT0sIGV4cGVjdGVkSW5uZXJU
ZXh0LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGJvb2wgdGVzdEdldEVsZW1lbnRzQnlDbGFzc05hbWUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSog
cGFnZSh3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9t
QXJncyhhcmdzKSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkp
OworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQod2Via2l0X3dlYl9wYWdlX2dl
dF9kb21fZG9jdW1lbnQocGFnZSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0KHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoZG9jdW1lbnQsICJ0ZXN0
IikpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0KSk7Cisg
ICAgICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxp
c3QpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMik7CisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBXZWJL
aXRET01FbGVtZW50KiBlbGVtZW50KFdFQktJVF9ET01fRUxFTUVOVCh3ZWJraXRfZG9tX25vZGVf
bGlzdF9pdGVtKGxpc3QsIGkpKSk7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoZWxlbWVudCkpOworICAgICAgICAgICAgR093blB0cjxjaGFyPiB0YWdOYW1lKHdl
YmtpdF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUoZWxlbWVudCkpOworICAgICAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHRhZ05hbWUuZ2V0KCksID09LCAiRElWIik7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RHZXRFbGVtZW50c0J5SWQo
V2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAg
ICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSh3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShl
eHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSkpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1l
bnQod2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSkpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERP
TUVsZW1lbnQqIGVsZW1lbnQod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChk
b2N1bWVudCwgInRlc3RvayIpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FTEVN
RU5UKGVsZW1lbnQpKTsKKyAgICAgICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0aGlzLWlkLWRvZXMtbm90LWV4aXN0Iik7CisgICAg
ICAgIGdfYXNzZXJ0KCFlbGVtZW50KTsKKyAgICAgICAgLy8gVGhlIERPTSBzcGVjIHNheXMgdGhl
IHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQgd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgZWxl
bWVudCB3aXRoIHRoZSBzYW1lIGlkLgorICAgICAgICAvLyBJbiBvdXIgY2FzZSB0aGUgZmlyc3Qg
b25lIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdGJhZCIpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChlbGVtZW50KSk7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gaW5uZXJUZXh0KHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0
KFdFQktJVF9ET01fSFRNTF9FTEVNRU5UKGVsZW1lbnQpKSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cihpbm5lclRleHQuZ2V0KCksID09LCAiZmlyc3QiKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RHZXRMaW5rcyhXZWJLaXRXZWJFeHRlbnNpb24qIGV4
dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQYWdlKiBw
YWdlKHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21B
cmdzKGFyZ3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7
CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCh3ZWJraXRfd2ViX3BhZ2VfZ2V0
X2RvbV9kb2N1bWVudChwYWdlKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoZG9jdW1lbnQpKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIGNvbGxl
Y3Rpb24od2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpKTsKKyAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04oY29sbGVjdGlvbikpOworICAg
ICAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0
aChjb2xsZWN0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwor
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWVzW10gPSB7ICJibGFuayIsICJnb29nbGUiLCAi
d2Via2l0IiB9OworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVyaXNbXSA9IHsgImFi
b3V0OmJsYW5rIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiaHR0cDovL3d3dy53ZWJraXQu
b3JnLyIgfTsKKyAgICAgICAgICAgIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBhbmNob3Io
V0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UKHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9u
X2l0ZW0oY29sbGVjdGlvbiwgaSkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfSFRNTF9BTkNIT1JfRUxFTUVOVChhbmNob3IpKTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hh
cj4gdGFnTmFtZSh3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKFdFQktJVF9ET01fRUxF
TUVOVChhbmNob3IpKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGFnTmFtZS5nZXQo
KSwgPT0sICJBIik7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IGlubmVyVGV4dCh3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChXRUJLSVRfRE9NX0hUTUxfRUxFTUVOVChh
bmNob3IpKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIoaW5uZXJUZXh0LmdldCgpLCA9
PSwgbmFtZXNbaV0pOworICAgICAgICAgICAgR093blB0cjxjaGFyPiBocmVmKHdlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3IpKTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cihocmVmLmdldCgpLCA9PSwgdXJpc1tpXSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RUYWJsZUluc2VydFJvdyhXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAg
ICBXZWJLaXRXZWJQYWdlKiBwYWdlKHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVu
c2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCh3
ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKSk7CisgICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAgICAgICAgV2ViS2l0RE9NRWxl
bWVudCogdGFibGUod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVu
dCwgInRhYmxlIikpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VCh0YWJsZSkpOworICAgICAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogcm93cyh3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93cyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxF
TUVOVCh0YWJsZSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExF
Q1RJT04ocm93cykpOworCisgICAgICAgIC8vIFRhYmxlIGlzIGluaXRpYWxseSBlbXB0eS4KKyAg
ICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5n
dGgocm93cyksID09LCAwKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHJvdyh3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9pbnNlcnRfcm93KFdFQktJVF9ET01fSFRNTF9UQUJM
RV9FTEVNRU5UKHRhYmxlKSwgLTEsIDApKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHJvdykpOworICAgICAgICByb3dzID0gd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1F
TlQodGFibGUpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJ
T04ocm93cykpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9odG1sX2NvbGxl
Y3Rpb25fZ2V0X2xlbmd0aChyb3dzKSwgPT0sIDEpOworCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGJvb2wgdGVzdERvY3VtZW50RXZhbHVhdGUoV2ViS2l0V2ViRXh0ZW5zaW9u
KiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFn
ZSogcGFnZSh3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VG
cm9tQXJncyhhcmdzKSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFn
ZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQod2Via2l0X3dlYl9wYWdl
X2dldF9kb21fZG9jdW1lbnQocGFnZSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0KHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50LCAiaHRt
bCIpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdCkpOwor
ICAgICAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDEpOworICAgICAgICBX
ZWJLaXRET01Ob2RlKiBodG1sKHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCkpOwor
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREUoaHRtbCkpOworCisgICAgICAgIFdl
YktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQod2Via2l0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZShk
b2N1bWVudCwgIi8vZGl2IiwgaHRtbCwgMCwgMCwgMCwgMCkpOworICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1bHQpKTsKKworICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKKyAgICAgICAgd2hpbGUgKG5vZGUg
PSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQocmVzdWx0LCAwKSkgeworICAg
ICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAg
ICAgIEdPd25QdHI8Y2hhcj4gdGFnTmFtZSh3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1l
KFdFQktJVF9ET01fRUxFTUVOVChub2RlKSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHRhZ05hbWUuZ2V0KCksID09LCAiRElWIik7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0K
KyAgICAgICAgZ19hc3NlcnRfY21waW50KGksID09LCAyKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFt
ZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsK
KyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ0aXRsZSIpKQorICAgICAgICAgICAgcmV0
dXJuIHRlc3RUaXRsZShleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0
TmFtZSwgImdldC1lbGVtZW50cy1ieS10YWctbmFtZSIpKQorICAgICAgICAgICAgcmV0dXJuIHRl
c3RHZXRFbGVtZW50c0J5VGFnTmFtZShleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0
cmNtcCh0ZXN0TmFtZSwgImdldC1lbGVtZW50cy1ieS1jbGFzcy1uYW1lIikpCisgICAgICAgICAg
ICByZXR1cm4gdGVzdEdldEVsZW1lbnRzQnlDbGFzc05hbWUoZXh0ZW5zaW9uLCBhcmdzKTsKKyAg
ICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJnZXQtZWxlbWVudHMtYnktaWQiKSkKKyAgICAg
ICAgICAgIHJldHVybiB0ZXN0R2V0RWxlbWVudHNCeUlkKGV4dGVuc2lvbiwgYXJncyk7CisgICAg
ICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiZ2V0LWxpbmtzIikpCisgICAgICAgICAgICByZXR1
cm4gdGVzdEdldExpbmtzKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRl
c3ROYW1lLCAidGFibGUtaW5zZXJ0LXJvdyIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RUYWJs
ZUluc2VydFJvdyhleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFt
ZSwgImRvY3VtZW50LWV2YWx1YXRlIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdERvY3VtZW50
RXZhbHVhdGUoZXh0ZW5zaW9uLCBhcmdzKTsKKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgX19h
dHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkKK3sKKyAgICBSRUdJU1RF
Ul9URVNUKFdlYktpdERPTURvY3VtZW50VGVzdCwgIldlYktpdERPTURvY3VtZW50L3RpdGxlIik7
CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Eb2N1bWVudFRlc3QsICJXZWJLaXRET01Eb2N1
bWVudC9nZXQtZWxlbWVudHMtYnktdGFnLW5hbWUiKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktp
dERPTURvY3VtZW50VGVzdCwgIldlYktpdERPTURvY3VtZW50L2dldC1lbGVtZW50cy1ieS1jbGFz
cy1uYW1lIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Eb2N1bWVudFRlc3QsICJXZWJL
aXRET01Eb2N1bWVudC9nZXQtZWxlbWVudHMtYnktaWQiKTsKKyAgICBSRUdJU1RFUl9URVNUKFdl
YktpdERPTURvY3VtZW50VGVzdCwgIldlYktpdERPTURvY3VtZW50L2dldC1saW5rcyIpOworICAg
IFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRG9jdW1lbnRUZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQv
dGFibGUtaW5zZXJ0LXJvdyIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRG9jdW1lbnRU
ZXN0LCAiV2ViS2l0RE9NRG9jdW1lbnQvZG9jdW1lbnQtZXZhbHVhdGUiKTsKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NRG9jdW1lbnQu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01Eb2N1bWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmUzMmRmYmRiNTk2OTcwOGNhODM2ZWEyZjc5Mjk4MTJlM2QwYzAw
MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0RE9NRG9jdW1lbnQuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldl
YlByb2Nlc3NUZXN0UnVubmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyBXZWJQ
cm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcjsKKworc3RhdGljIHZvaWQgd2Via2l0RE9NRG9j
dW1lbnRUZXN0UnVuKFdlYlZpZXdUZXN0KiB0ZXN0LCBjb25zdCBjaGFyKiBodG1sLCBjb25zdCBj
aGFyKiB0ZXN0TmFtZSkKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVy
OworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZB
UkRJQ1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFn
ZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRl
c3QtPm1fd2ViVmlldykpKTsKKyAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJL
aXRET01Eb2N1bWVudCIsIHRlc3ROYW1lLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIp
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Eb2N1bWVudFRpdGxlKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0
SFRNTCA9ICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVh
ZD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgd2Via2l0RE9NRG9jdW1lbnRUZXN0UnVuKHRl
c3QsIHRlc3RIVE1MLCAidGl0bGUiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURv
Y3VtZW50R2V0RWxlbWVudHNCeVRhZ05hbWUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5Pjx1
bD48bGk+MTwvbGk+PGxpPjI8L2xpPjxsaT4zPC9saT48L3VsPjwvYm9keT48L2h0bWw+IjsKKyAg
ICB3ZWJraXRET01Eb2N1bWVudFRlc3RSdW4odGVzdCwgdGVzdEhUTUwsICJnZXQtZWxlbWVudHMt
YnktdGFnLW5hbWUiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURvY3VtZW50R2V0
RWxlbWVudHNCeUNsYXNzTmFtZShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSAiPGh0bWw+PGJvZHk+PGRpdiBjbGFz
cz1cInRlc3RcIj48L2Rpdj48ZGl2IGNsYXNzPVwic3RyYW5nZVwiPjwvZGl2PjxkaXYgY2xhc3M9
XCJ0ZXN0XCI+PC9kaXY+PC9ib2R5PjwvaHRtbD4iOworICAgIHdlYmtpdERPTURvY3VtZW50VGVz
dFJ1bih0ZXN0LCB0ZXN0SFRNTCwgImdldC1lbGVtZW50cy1ieS1jbGFzcy1uYW1lIik7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Eb2N1bWVudEdldEVsZW1lbnRzQnlJZChXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGVz
dEhUTUwgPSAiPGh0bWw+PGJvZHk+PGRpdiBpZD1cInRlc3Rva1wiPjwvZGl2PjxkaXYgaWQ9XCJ0
ZXN0YmFkXCI+Zmlyc3Q8L2Rpdj48ZGl2IGlkPVwidGVzdGJhZFwiPnNlY29uZDwvZGl2PjwvYm9k
eT48L2h0bWw+IjsKKyAgICB3ZWJraXRET01Eb2N1bWVudFRlc3RSdW4odGVzdCwgdGVzdEhUTUws
ICJnZXQtZWxlbWVudHMtYnktaWQiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURv
Y3VtZW50R2V0TGlua3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwv
dGl0bGU+PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhy
ZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93
d3cud2Via2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiI7CisgICAgd2Via2l0RE9N
RG9jdW1lbnRUZXN0UnVuKHRlc3QsIHRlc3RIVE1MLCAiZ2V0LWxpbmtzIik7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJLaXRET01Eb2N1bWVudFRhYmxlSW5zZXJ0Um93KFdlYlZpZXdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9
ICI8aHRtbD48Ym9keT48dGFibGUgaWQ9XCJ0YWJsZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4i
OworICAgIHdlYmtpdERPTURvY3VtZW50VGVzdFJ1bih0ZXN0LCB0ZXN0SFRNTCwgInRhYmxlLWlu
c2VydC1yb3ciKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURvY3VtZW50RG9jdW1l
bnRFdmFsdWF0ZShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSAiPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+PC9o
ZWFkPjxib2R5PjxkaXY+Rmlyc3QgZGl2PC9kaXY+PGRpdj5TZWNvbmQgZGl2PC9kaXY+PC9ib2R5
PjwvaHRtbD4iOworICAgIHdlYmtpdERPTURvY3VtZW50VGVzdFJ1bih0ZXN0LCB0ZXN0SFRNTCwg
ImRvY3VtZW50LWV2YWx1YXRlIik7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICB0ZXN0
UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisgICAgd2Via2l0X3dlYl9jb250
ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9k
ZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7CisKKyAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJ0aXRsZSIsIHRlc3RXZWJLaXRET01Eb2N1
bWVudFRpdGxlKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJn
ZXQtZWxlbWVudHMtYnktdGFnLW5hbWUiLCB0ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50
c0J5VGFnTmFtZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NRG9jdW1lbnQiLCAi
Z2V0LWVsZW1lbnRzLWJ5LWNsYXNzLW5hbWUiLCB0ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Eb2N1bWVu
dCIsICJnZXQtZWxlbWVudHMtYnktaWQiLCB0ZXN0V2ViS2l0RE9NRG9jdW1lbnRHZXRFbGVtZW50
c0J5SWQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTURvY3VtZW50IiwgImdldC1s
aW5rcyIsIHRlc3RXZWJLaXRET01Eb2N1bWVudEdldExpbmtzKTsKKyAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRET01Eb2N1bWVudCIsICJ0YWJsZS1pbnNlcnQtcm93IiwgdGVzdFdlYktpdERP
TURvY3VtZW50VGFibGVJbnNlcnRSb3cpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERP
TURvY3VtZW50IiwgImRvY3VtZW50LWV2YWx1YXRlIiwgdGVzdFdlYktpdERPTURvY3VtZW50RG9j
dW1lbnRFdmFsdWF0ZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0
UnVubmVyOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>