<?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>237708</bug_id>
          
          <creation_ts>2022-03-10 05:24:02 -0800</creation_ts>
          <short_desc>[GTK] Add a unit test to check the remote inspector HTTP server</short_desc>
          <delta_ts>2022-03-11 02:48:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=237601</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pangle</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1850046</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-10 05:24:02 -0800</bug_when>
    <thetext>Check that target list page is served as expected like we do for remote inspector server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850048</commentid>
    <comment_count>1</comment_count>
      <attachid>454340</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-10 05:28:35 -0800</bug_when>
    <thetext>Created attachment 454340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850070</commentid>
    <comment_count>2</comment_count>
      <attachid>454340</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-03-10 06:10:31 -0800</bug_when>
    <thetext>Comment on attachment 454340
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:67
&gt; +                g_printerr(&quot;Failed to connect to inspector server&quot;);

This one actually does need to end in \n

&gt; Tools/TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:105
&gt; +        // Wait until server is ready.
&gt; +        unsigned timeoutID = g_timeout_add(25000, [](gpointer userData) {
&gt; +            g_main_loop_quit(static_cast&lt;GMainLoop*&gt;(userData));
&gt; +            return G_SOURCE_REMOVE;
&gt; +        }, m_mainLoop);

Hmm, what is the purpose of this? You are trying to fail the test if it takes more than 2.5 seconds for the server to start? I would either use a way larger timeout -- say 30 seconds, to match the standard D-Bus timeout -- or else remove it altogether and let the test time out if it&apos;s broken. Otherwise, I would be afraid the test could be flaky if the system is under heavy load.

I see you&apos;ve already taken care to retry the connection every 100ms and quit immediately if it succeeds, which is good.

&gt; Tools/TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:228
&gt; +    // We install a handler to ensure that we kill the child process
&gt; +    // if the parent dies because of whatever the reason is.
&gt; +    signal(SIGABRT, +[](int) {

Since you&apos;re only catching SIGABRT, I would say &quot;if the parent dies because of an assertion failure.&quot;

Alternative: you might try prctl(PR_SET_PDEATHSIG) and see if that works, then the child should die even if the parent dies to something other than SIGABRT. But I&apos;ve seen PR_SET_PDEATHSIG mysteriously fail, so maybe make sure it works for you if you decide to try this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850396</commentid>
    <comment_count>3</comment_count>
      <attachid>454340</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-11 01:31:35 -0800</bug_when>
    <thetext>Comment on attachment 454340
Patch

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

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:67
&gt;&gt; +                g_printerr(&quot;Failed to connect to inspector server&quot;);
&gt; 
&gt; This one actually does need to end in \n

Ok.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:105
&gt;&gt; +        }, m_mainLoop);
&gt; 
&gt; Hmm, what is the purpose of this? You are trying to fail the test if it takes more than 2.5 seconds for the server to start? I would either use a way larger timeout -- say 30 seconds, to match the standard D-Bus timeout -- or else remove it altogether and let the test time out if it&apos;s broken. Otherwise, I would be afraid the test could be flaky if the system is under heavy load.
&gt; 
&gt; I see you&apos;ve already taken care to retry the connection every 100ms and quit immediately if it succeeds, which is good.

I think this was needed before because the server was started in beforeAll() and the test runner handles the timeout per test. Now that the server is started/stopped as part of the test setup/teardown we can probably remove this and let the runner handle the timeout.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:228
&gt;&gt; +    signal(SIGABRT, +[](int) {
&gt; 
&gt; Since you&apos;re only catching SIGABRT, I would say &quot;if the parent dies because of an assertion failure.&quot;
&gt; 
&gt; Alternative: you might try prctl(PR_SET_PDEATHSIG) and see if that works, then the child should die even if the parent dies to something other than SIGABRT. But I&apos;ve seen PR_SET_PDEATHSIG mysteriously fail, so maybe make sure it works for you if you decide to try this.

Yes, I think the idea here was to kill the server when the test fails, not when it crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850423</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-11 02:36:49 -0800</bug_when>
    <thetext>Committed r291152 (248312@trunk): &lt;https://commits.webkit.org/248312@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454340</attachid>
            <date>2022-03-10 05:28:35 -0800</date>
            <delta_ts>2022-03-11 02:48:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-inspector-http-server-test.diff</filename>
            <type>text/plain</type>
            <size>16649</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYTdjZmY4NTE0ZmU1Li40MTBhZTA1YjU5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjItMDMtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIEFkZCBhIHVuaXQgdGVzdHMgdG8gY2hlY2sgdGhlIHJlbW90ZSBpbnNwZWN0
b3IgSFRUUCBzZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNzcwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oOiBFeHBvcnQgY2xvc2UoKS4KKwog
MjAyMi0wMy0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS11bV1BFXSBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBQREYgZG9jdW1lbnRz
IHVzaW5nIFBERi5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9Tb2NrZXRDb25u
ZWN0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1NvY2tldENvbm5lY3Rpb24uaAppbmRleCA1
YmU1YWNiYmEyM2MuLmMxN2RkYmE5NmQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xp
Yi9Tb2NrZXRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9Tb2NrZXRDb25u
ZWN0aW9uLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHNlbmRNZXNzYWdlKGNvbnN0IGNoYXIqLCBHVmFyaWFudCopOwogCiAgICAgYm9vbCBp
c0Nsb3NlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2Nvbm5lY3Rpb247IH0KLSAgICB2b2lkIGNsb3Nl
KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgU29ja2V0Q29ubmVjdGlvbihHUmVmUHRyPEdTb2NrZXRDb25u
ZWN0aW9uPiYmLCBjb25zdCBNZXNzYWdlSGFuZGxlcnMmLCBncG9pbnRlcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDViYzVhMDhiYjU3OS4uZTAwMTE0MzJmMTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDIyLTAzLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBBZGQgYSB1bml0IHRlc3RzIHRvIGNoZWNrIHRoZSByZW1vdGUgaW5zcGVj
dG9yIEhUVFAgc2VydmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzc3MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFbnN1cmUgd2UgY2xvc2UgdGhlIHNvY2tldCBpZiBpdCdzIHN0aWxsIG9wZW4gd2hl
biB0aGUgcmVtb3RlIGluc3BlY3RvciBjbGllbnQgaXMgZGVzdHJveWVkLgorCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVu
dCk6CisKIDIwMjItMDMtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBSZW1vdGVWaWRlb1NhbXBsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVu
dC5jcHAKaW5kZXggOWUwNzJiNWEyODdjLi44MDA4YmUxMzA0MzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcApAQCAtMTkxLDYgKzE5MSw4IEBAIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVuc2lnbmVkIHBv
cnQsCiAKIFJlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVudCgpCiB7
CisgICAgaWYgKG1fc29ja2V0Q29ubmVjdGlvbikKKyAgICAgICAgbV9zb2NrZXRDb25uZWN0aW9u
LT5jbG9zZSgpOwogICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkp
OwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggNWM0ZDYzOGE4MjJlLi5lMzI1MmEzNDNiNDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAyMi0wMy0xMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10g
QWRkIGEgdW5pdCB0ZXN0cyB0byBjaGVjayB0aGUgcmVtb3RlIGluc3BlY3RvciBIVFRQIHNlcnZl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzA4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3b3Jr
IHRoZSBpbnNwZWN0b3Igc2VydmVyIHRlc3QgdG8gYWxzbyBhbGxvdyB0byBsYXVuY2ggdGhlIEhU
VFAgc2VydmVyIGFuZCBjaGVjayBpdCBjb3JyZWN0bHkgc2VydmVzIHRoZQorICAgICAgICB0YXJn
ZXQgbGlzdCBwYWdlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
SW5zcGVjdG9yVGVzdFNlcnZlci5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcDoKKyAgICAg
ICAgKEluc3BlY3RvckhUVFBTZXJ2ZXJUZXN0OjpzZXR1cCk6CisgICAgICAgIChJbnNwZWN0b3JI
VFRQU2VydmVyVGVzdDo6dGVhcmRvd24pOgorICAgICAgICAodGVzdEluc3BlY3RvclNlcnZlclBh
Z2VMaXN0KToKKyAgICAgICAgKHRlc3RJbnNwZWN0b3JIVFRQU2VydmVyUGFnZUxpc3QpOgorICAg
ICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKHN0b3BUZXN0
U2VydmVyKTogRGVsZXRlZC4KKyAgICAgICAgKHNpZ0Fib3J0SGFuZGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb25uZWN0VG9JbnNwZWN0b3JTZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAod2Fp
dFVudGlsSW5zcGVjdG9yU2VydmVySXNSZWFkeSk6IERlbGV0ZWQuCisgICAgICAgIChzdGFydFRl
c3RTZXJ2ZXIpOiBEZWxldGVkLgorCiAyMDIyLTAzLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCBpbml0aWFsIHN1
cHBvcnQgZm9yIFBERiBkb2N1bWVudHMgdXNpbmcgUERGLmpzCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3Bw
CmluZGV4IGZlNzAxMTUxZGYzNS4uYzVmNjFkNmRhZGI4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNw
cApAQCAtMjUsMTggKzI1LDMzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDxX
ZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxz
eXMvZXZlbnRmZC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewor
ICAgIGdfc2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VYRUNfUEFUSCwgRkFMU0Up
OworICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgiLCBXRUJLSVRfSU5K
RUNURURfQlVORExFX1BBVEgsIEZBTFNFKTsKKwogICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7
CiAKLSAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUgd2l0
aCBkZWZhdWx0IHZhbHVlLgotICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIs
ICIxMjcuMC4wLjE6Mjk5OSIsIFRSVUUpOworICAgIGludCBldmVudEZEID0gYXJnYyA9PSAyID8g
YXRvaShhcmd2WzFdKSA6IC0xOwogCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwogICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3
ZWJWaWV3KSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibG9hZC1jaGFu
Z2VkIiwgR19DQUxMQkFDSygrW10oV2ViS2l0V2ViVmlldyosIFdlYktpdExvYWRFdmVudCBsb2Fk
RXZlbnQsIGludCogZXZlbnRGRCkgeworICAgICAgICBpZiAobG9hZEV2ZW50ICE9IFdFQktJVF9M
T0FEX0ZJTklTSEVEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICgqZXZlbnRG
RCAhPSAtMSkgeworICAgICAgICAgICAgdWludDY0X3QgZXZlbnQgPSAxOworICAgICAgICAgICAg
d3JpdGUoKmV2ZW50RkQsICZldmVudCwgc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgICAgICAgICBj
bG9zZSgqZXZlbnRGRCk7CisgICAgICAgIH0KKyAgICB9KSwgJmV2ZW50RkQpOworCiAgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfaHRtbCh3ZWJWaWV3LAogICAgICAgICAiPGh0bWw+PGJvZHk+PHA+
V2ViS2l0R1RLIEluc3BlY3RvciBUZXN0IFNlcnZlcjwvcD48L2JvZHk+PC9odG1sPiIsCiAgICAg
ICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4
IDVmODBkMGYwYjgwNi4uYzgyY2ZmZGUxYWMxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcApAQCAt
MjYsOTQgKzI2LDEwOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiV2ViVmll
d1Rlc3QuaCIKKyNpbmNsdWRlIDxzeXMvZXZlbnRmZC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKLXN0YXRpYyBHUGlkIGdDaGlsZFByb2Nlc3NQaWQ7Ci1zdGF0
aWMgYm9vbCBnU2VydmVySXNSZWFkeTsKK3N0YXRpYyBHUGlkIGdBY3RpdmVTZXJ2ZXJQaWQ7CiAK
LXN0YXRpYyB2b2lkIHN0b3BUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBEbyBub3RoaW5nIGlmIHRo
ZXJlJ3Mgbm8gc2VydmVyIHJ1bm5pbmcuCi0gICAgaWYgKCFnQ2hpbGRQcm9jZXNzUGlkKQotICAg
ICAgICByZXR1cm47CitjbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rl
c3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yU2VydmVy
VGVzdCk7CiAKLSAgICBnX3NwYXduX2Nsb3NlX3BpZChnQ2hpbGRQcm9jZXNzUGlkKTsKLSAgICBr
aWxsKGdDaGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOwotICAgIGdDaGlsZFByb2Nlc3NQaWQgPSAw
OwotfQorICAgIEluc3BlY3RvclNlcnZlclRlc3QoKQorICAgIHsKKyAgICAgICAgc3RhcnRUZXN0
U2VydmVyKCk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUobV9zZXJ2ZXJJc1JlYWR5KTsKKyAgICB9
CiAKLXN0YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVtKQotewotICAgIC8vIEp1
c3Qgc3RvcCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJSVCB3YXMgcmVjZWl2ZWQuCi0gICAgc3Rv
cFRlc3RTZXJ2ZXIoKTsKLX0KKyAgICB+SW5zcGVjdG9yU2VydmVyVGVzdCgpCisgICAgeworICAg
ICAgICBzdG9wVGVzdFNlcnZlcigpOworICAgIH0KIAotc3RhdGljIHZvaWQgY29ubmVjdFRvSW5z
cGVjdG9yU2VydmVyKEdNYWluTG9vcCogbWFpbkxvb3ApCi17Ci0gICAgR1JlZlB0cjxHU29ja2V0
Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsK
LSAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tldENsaWVudC5n
ZXQoKSwiMTI3LjAuMC4xOjI5OTkiLCAwLCBudWxscHRyLCBbXShHT2JqZWN0KiBjbGllbnQsIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICBhdXRvKiBt
YWluTG9vcCA9IHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKTsKLSAgICAgICAgR1Vu
aXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hv
c3RfZmluaXNoKEdfU09DS0VUX0NMSUVOVChjbGllbnQpLCByZXN1bHQsICZlcnJvci5vdXRQdHIo
KSkpOwotICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIGlmIChnX2Vycm9y
X21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ09OTkVDVElPTl9S
RUZVU0VEKSkgewotICAgICAgICAgICAgICAgIGdfdGltZW91dF9hZGQoMTAwLCBbXShncG9pbnRl
ciB1c2VyRGF0YSkgewotICAgICAgICAgICAgICAgICAgICBjb25uZWN0VG9JbnNwZWN0b3JTZXJ2
ZXIoc3RhdGljX2Nhc3Q8R01haW5Mb29wKj4odXNlckRhdGEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLSAgICAgICAgICAgICAgICB9LCB1c2VyRGF0YSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgIHZvaWQgY29ubmVjdFRvSW5zcGVjdG9yU2Vy
dmVyKCkKKyAgICB7CisgICAgICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50
ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CisgICAgICAgIGdfc29ja2V0X2Ns
aWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29ja2V0Q2xpZW50LmdldCgpLCAiMTI3LjAuMC4x
OjI5OTkiLCAwLCBudWxscHRyLCBbXShHT2JqZWN0KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byogdGVzdCA9IHN0YXRp
Y19jYXN0PEluc3BlY3RvclNlcnZlclRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBHUmVmUHRyPEdTb2NrZXRDb25u
ZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3Rv
X2hvc3RfZmluaXNoKEdfU09DS0VUX0NMSUVOVChjbGllbnQpLCByZXN1bHQsICZlcnJvci5vdXRQ
dHIoKSkpOworICAgICAgICAgICAgaWYgKCFjb25uZWN0aW9uKSB7CisgICAgICAgICAgICAgICAg
aWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9D
T05ORUNUSU9OX1JFRlVTRUQpKSB7CisgICAgICAgICAgICAgICAgICAgIGdfdGltZW91dF9hZGQo
MTAwLCBbXShncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8SW5zcGVjdG9yU2VydmVyVGVzdCo+KHVzZXJEYXRhKS0+Y29ubmVjdFRvSW5zcGVj
dG9yU2VydmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR19TT1VSQ0VfUkVN
T1ZFOworICAgICAgICAgICAgICAgICAgICB9LCB1c2VyRGF0YSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBnX3ByaW50
ZXJyKCJGYWlsZWQgdG8gY29ubmVjdCB0byBpbnNwZWN0b3Igc2VydmVyIik7CisgICAgICAgICAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRlc3QtPm1fc2VydmVySXNSZWFkeSA9IHRydWU7CisgICAgICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9CiAKLSAgICAg
ICAgICAgIGdfcHJpbnRlcnIoIkZhaWxlZCB0byBjb25uZWN0IHRvIGluc3BlY3RvciBzZXJ2ZXIi
KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZ1NlcnZlcklzUmVhZHkgPSB0cnVlOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1haW5M
b29wKTsKLSAgICB9LCBtYWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhaXRVbnRpbEluc3Bl
Y3RvclNlcnZlcklzUmVhZHkoKQotewotICAgIEdSZWZQdHI8R01haW5Mb29wPiBtYWluTG9vcCA9
IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobnVsbHB0ciwgRkFMU0UpKTsKLSAgICB1bnNpZ25l
ZCB0aW1lb3V0SUQgPSBnX3RpbWVvdXRfYWRkKDI1MDAwLCBbXShncG9pbnRlciB1c2VyRGF0YSkg
ewotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJE
YXRhKSk7Ci0gICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gICAgfSwgbWFpbkxvb3Au
Z2V0KCkpOwotICAgIGNvbm5lY3RUb0luc3BlY3RvclNlcnZlcihtYWluTG9vcC5nZXQoKSk7Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKG1haW5Mb29wLmdldCgpKTsKLSAgICBpZiAoZ1NlcnZlcklzUmVh
ZHkpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0SUQpOwotfQotCi1zdGF0aWMgdm9p
ZCBzdGFydFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIFByZXBhcmUgYXJndltdIGZvciBzcGF3bmlu
ZyB0aGUgc2VydmVyIHByb2Nlc3MuCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZXN0U2VydmVyUGF0
aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJUZXN0V2ViS2l0QVBJIiwgIldl
YktpdDJHdGsiLCAiSW5zcGVjdG9yVGVzdFNlcnZlciIsIG51bGxwdHIpKTsKLQotICAgIC8vIFdl
IGluc3RhbGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nl
c3MKLSAgICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVh
c29uIGlzLgotICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOwotCi0gICAgY2hh
ciogdGVzdFNlcnZlckFyZ3ZbMl07Ci0gICAgdGVzdFNlcnZlckFyZ3ZbMF0gPSB0ZXN0U2VydmVy
UGF0aC5nZXQoKTsKLSAgICB0ZXN0U2VydmVyQXJndlsxXSA9IG51bGxwdHI7Ci0KLSAgICBnX2Fz
c2VydF90cnVlKGdfc3Bhd25fYXN5bmMobnVsbHB0ciwgdGVzdFNlcnZlckFyZ3YsIG51bGxwdHIs
IEdfU1BBV05fREVGQVVMVCwgbnVsbHB0ciwgbnVsbHB0ciwgJmdDaGlsZFByb2Nlc3NQaWQsIG51
bGxwdHIpKTsKLQotICAgIHdhaXRVbnRpbEluc3BlY3RvclNlcnZlcklzUmVhZHkoKTsKLSAgICBp
ZiAoIWdTZXJ2ZXJJc1JlYWR5KQotICAgICAgICBzdG9wVGVzdFNlcnZlcigpOwotfQorICAgIHZv
aWQgc3RhcnRUZXN0U2VydmVyKCkKKyAgICB7CisgICAgICAgIC8vIFByZXBhcmUgYXJndltdIGZv
ciBzcGF3bmluZyB0aGUgc2VydmVyIHByb2Nlc3MuCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4g
dGVzdFNlcnZlclBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAiVGVzdFdl
YktpdEFQSSIsICJXZWJLaXQyR3RrIiwgIkluc3BlY3RvclRlc3RTZXJ2ZXIiLCBudWxscHRyKSk7
CisKKyAgICAgICAgaW50IGV2ZW50RkQgPSBldmVudGZkKDAsIDApOworICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRGRCwgIT0sIC0xKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZXZl
bnRGRFN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIiwgZXZlbnRGRCkpOworCisgICAgICAgIGNo
YXIqIHRlc3RTZXJ2ZXJBcmd2WzNdOworICAgICAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RT
ZXJ2ZXJQYXRoLmdldCgpOworICAgICAgICB0ZXN0U2VydmVyQXJndlsxXSA9IGV2ZW50RkRTdHJp
bmcuZ2V0KCk7CisgICAgICAgIHRlc3RTZXJ2ZXJBcmd2WzJdID0gbnVsbHB0cjsKKworICAgICAg
ICBHVW5pcXVlUHRyPGNoYXIqPiB0ZXN0U2VydmVyRW52cChnX2Vudmlyb25fc2V0ZW52KGdfZ2V0
X2Vudmlyb24oKSwgc2hvdWxkU3RhcnRIVFRQU2VydmVyID8gIldFQktJVF9JTlNQRUNUT1JfSFRU
UF9TRVJWRVIiIDogIldFQktJVF9JTlNQRUNUT1JfU0VSVkVSIiwgIjEyNy4wLjAuMToyOTk5Iiwg
VFJVRSkpOworCisgICAgICAgIGdfYXNzZXJ0X3RydWUoZ19zcGF3bl9hc3luYyhudWxscHRyLCB0
ZXN0U2VydmVyQXJndiwgdGVzdFNlcnZlckVudnAuZ2V0KCksIEdfU1BBV05fTEVBVkVfREVTQ1JJ
UFRPUlNfT1BFTiwgbnVsbHB0ciwgbnVsbHB0ciwgJm1fc2VydmVyUGlkLCBudWxscHRyKSk7CisK
KyAgICAgICAgZ0FjdGl2ZVNlcnZlclBpZCA9IG1fc2VydmVyUGlkOworCisgICAgICAgIC8vIFdh
aXQgZm9yIHRoZSBwYWdlIHRvIGxvYWQuCisgICAgICAgIHVpbnQ2NF90IGV2ZW50OworICAgICAg
ICBhdXRvIHJlc3VsdCA9IHJlYWQoZXZlbnRGRCwgJmV2ZW50LCBzaXplb2YodWludDY0X3QpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIHNpemVvZih1aW50NjRfdCkpOwor
ICAgICAgICBjbG9zZShldmVudEZEKTsKKworICAgICAgICAvLyBXYWl0IHVudGlsIHNlcnZlciBp
cyByZWFkeS4KKyAgICAgICAgdW5zaWduZWQgdGltZW91dElEID0gZ190aW1lb3V0X2FkZCgyNTAw
MCwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
c3RhdGljX2Nhc3Q8R01haW5Mb29wKj4odXNlckRhdGEpKTsKKyAgICAgICAgICAgIHJldHVybiBH
X1NPVVJDRV9SRU1PVkU7CisgICAgICAgIH0sIG1fbWFpbkxvb3ApOworICAgICAgICBjb25uZWN0
VG9JbnNwZWN0b3JTZXJ2ZXIoKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgICAgICBpZiAobV9zZXJ2ZXJJc1JlYWR5KQorICAgICAgICAgICAgZ19zb3VyY2VfcmVt
b3ZlKHRpbWVvdXRJRCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0b3BUZXN0U2VydmVy
KCk7CisgICAgfQogCi1jbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rl
c3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yU2VydmVy
VGVzdCk7CisgICAgdm9pZCBzdG9wVGVzdFNlcnZlcigpCisgICAgeworICAgICAgICAvLyBEbyBu
b3RoaW5nIGlmIHRoZXJlJ3Mgbm8gc2VydmVyIHJ1bm5pbmcuCisgICAgICAgIGlmICghbV9zZXJ2
ZXJQaWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19zcGF3bl9jbG9zZV9waWQo
bV9zZXJ2ZXJQaWQpOworICAgICAgICBraWxsKG1fc2VydmVyUGlkLCBTSUdURVJNKTsKKyAgICAg
ICAgbV9zZXJ2ZXJQaWQgPSAwOworICAgICAgICBnQWN0aXZlU2VydmVyUGlkID0gMDsKKyAgICB9
CiAKLSAgICBib29sIGdldFBhZ2VMaXN0KCkKKyAgICBib29sIGxvYWRUYXJnZXRMaXN0UGFnZUFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCkKICAgICB7Ci0gICAgICAgIGxvYWRVUkkoImluc3BlY3Rvcjov
LzEyNy4wLjAuMToyOTk5Iik7CisgICAgICAgIGxvYWRVUkkoc2hvdWxkU3RhcnRIVFRQU2VydmVy
ID8gImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iIDogImluc3BlY3RvcjovLzEyNy4wLjAuMToyOTk5
Iik7CiAgICAgICAgIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCA1OyArK2kpIHsKICAgICAgICAgICAgIHNpemVfdCBtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSA9IDA7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRh
ID0gdGhpcy0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CkBAIC0xMzAs
MTcgKzE0NCw2NCBAQCBwdWJsaWM6CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKwor
ICAgIEdQaWQgbV9zZXJ2ZXJQaWQgeyAwIH07CisgICAgYm9vbCBtX3NlcnZlcklzUmVhZHkgeyBm
YWxzZSB9OworICAgIHN0YXRpYyBib29sIHNob3VsZFN0YXJ0SFRUUFNlcnZlcjsKK307CisKK2Jv
b2wgSW5zcGVjdG9yU2VydmVyVGVzdDo6c2hvdWxkU3RhcnRIVFRQU2VydmVyID0gZmFsc2U7CisK
K2NsYXNzIEluc3BlY3RvckhUVFBTZXJ2ZXJUZXN0IDogcHVibGljIEluc3BlY3RvclNlcnZlclRl
c3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkVfV0lUSF9TRVRVUF9URUFS
RE9XTihJbnNwZWN0b3JIVFRQU2VydmVyVGVzdCwgc2V0dXAsIHRlYXJkb3duKTsKKworICAgIHN0
YXRpYyB2b2lkIHNldHVwKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OnNo
b3VsZFN0YXJ0SFRUUFNlcnZlciA9IHRydWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVh
cmRvd24oKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yU2VydmVyVGVzdDo6c2hvdWxkU3RhcnRI
VFRQU2VydmVyID0gZmFsc2U7CisgICAgfQogfTsKIAogLy8gVGVzdCB0byBnZXQgaW5zcGVjdG9y
IHNlcnZlciBwYWdlIGxpc3QgZnJvbSB0aGUgdGVzdCBzZXJ2ZXIuCiAvLyBTaG91bGQgY29udGFp
biBvbmx5IG9uZSBlbnRyeSBwb2ludGluZyB0byBodHRwOi8vMTI3LjAuMC4xOjI5OTkuCiBzdGF0
aWMgdm9pZCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QoSW5zcGVjdG9yU2VydmVyVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICBn
X2Fzc2VydF90cnVlKHRlc3QtPmxvYWRUYXJnZXRMaXN0UGFnZUFuZFdhaXRVbnRpbEZpbmlzaGVk
KCkpOworCiAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIFdlYktpdEphdmFz
Y3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhcmdldG5h
bWUnKS5sZW5ndGg7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGph
dmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0X25vX2Vycm9yKGVycm9yLmdldCgpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihq
YXZhc2NyaXB0UmVzdWx0KSwgPT0sIDEpOworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiB2YWx1ZVN0
cmluZzsKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YXJnZXR1cmwn
KVswXS5pbm5lclRleHQ7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydF9ub25udWxs
KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0X25vX2Vycm9yKGVycm9yLmdldCgpKTsK
KyAgICB2YWx1ZVN0cmluZy5yZXNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0
cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5n
LmdldCgpLCA9PSwgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdLm9uY2xpY2sudG9TdHJpbmcoKTsiLCAm
ZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoamF2YXNjcmlwdFJlc3VsdCk7
CisgICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnJl
c2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGdfc3RycnN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
IndpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLmluc3BlY3Rvci5wb3N0TWVzc2FnZSgnMTox
OldlYlBhZ2UnKTsiKSk7Cit9CiAKKy8vIFRlc3QgdG8gZ2V0IGluc3BlY3RvciBzZXJ2ZXIgcGFn
ZSBsaXN0IGZyb20gdGhlIEhUVFAgdGVzdCBzZXJ2ZXIuCisvLyBTaG91bGQgY29udGFpbiBvbmx5
IG9uZSBlbnRyeSBwb2ludGluZyB0byBodHRwOi8vMTI3LjAuMC4xOjI5OTkuCitzdGF0aWMgdm9p
ZCB0ZXN0SW5zcGVjdG9ySFRUUFNlcnZlclBhZ2VMaXN0KEluc3BlY3RvckhUVFBTZXJ2ZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewogICAgIHRlc3QtPnNob3dJbldpbmRvdygpOwotICAg
IGdfYXNzZXJ0X3RydWUodGVzdC0+Z2V0UGFnZUxpc3QoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0
ZXN0LT5sb2FkVGFyZ2V0TGlzdFBhZ2VBbmRXYWl0VW50aWxGaW5pc2hlZCgpKTsKIAorICAgIEdV
bmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKICAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0YXJnZXRuYW1lJykubGVuZ3RoOyIs
ICZlcnJvci5vdXRQdHIoKSk7CiAgICAgZ19hc3NlcnRfbm9ubnVsbChqYXZhc2NyaXB0UmVzdWx0
KTsKICAgICBnX2Fzc2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7CkBAIC0xNTIsMTUgKzIxMywy
NSBAQCBzdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QoSW5zcGVjdG9yU2Vy
dmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcgogICAgIGdfYXNzZXJ0X25vX2Vycm9yKGVycm9y
LmdldCgpKTsKICAgICB2YWx1ZVN0cmluZy5yZXNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKworICAgIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
ImRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdLm9uY2xpY2sudG9TdHJp
bmcoKTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoamF2YXNjcmlw
dFJlc3VsdCk7CisgICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOworICAgIHZhbHVl
U3RyaW5nLnJlc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFz
Y3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGdfc3RycnN0cih2YWx1ZVN0cmlu
Zy5nZXQoKSwgIndpbmRvdy5vcGVuKCdNYWluLmh0bWw/d3M9JyArIHdpbmRvdy5sb2NhdGlvbi5o
b3N0ICsgJy9zb2NrZXQvMS8xL1dlYlBhZ2UnLCAnX2JsYW5rJywgJ2xvY2F0aW9uPW5vLG1lbnVi
YXI9bm8sc3RhdHVzPW5vLHRvb2xiYXI9bm8nKTsiKSk7CiB9CiAKIHZvaWQgYmVmb3JlQWxsKCkK
IHsKLSAgICBzdGFydFRlc3RTZXJ2ZXIoKTsKKyAgICAvLyBXZSBpbnN0YWxsIGEgaGFuZGxlciB0
byBlbnN1cmUgdGhhdCB3ZSBraWxsIHRoZSBjaGlsZCBwcm9jZXNzCisgICAgLy8gaWYgdGhlIHBh
cmVudCBkaWVzIGJlY2F1c2Ugb2Ygd2hhdGV2ZXIgdGhlIHJlYXNvbiBpcy4KKyAgICBzaWduYWwo
U0lHQUJSVCwgK1tdKGludCkgeworICAgICAgICBraWxsKGdBY3RpdmVTZXJ2ZXJQaWQsIFNJR1RF
Uk0pOworICAgIH0pOwogICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5z
cGVjdG9yU2VydmVyIiwgInRlc3QtcGFnZS1saXN0IiwgdGVzdEluc3BlY3RvclNlcnZlclBhZ2VM
aXN0KTsKKyAgICBJbnNwZWN0b3JIVFRQU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0
b3JTZXJ2ZXIiLCAiaHR0cC10ZXN0LXBhZ2UtbGlzdCIsIHRlc3RJbnNwZWN0b3JIVFRQU2VydmVy
UGFnZUxpc3QpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKIHsKLSAgICBzdG9wVGVzdFNlcnZlcigp
OwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>