<?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>91872</bug_id>
          
          <creation_ts>2012-07-20 09:22:33 -0700</creation_ts>
          <short_desc>[Chromium-Android] Run layout tests on unrooted devices</short_desc>
          <delta_ts>2013-04-08 11:13:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>NRWT</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91873</dependson>
    
    <dependson>91909</dependson>
    
    <dependson>91910</dependson>
    
    <dependson>95346</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>peter</cc>
    
    <cc>pliard</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>674630</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-20 09:22:33 -0700</bug_when>
    <thetext>For now Android run layout tests can only run on rooted devices with the rooted adb shell. It&apos;s necessary to let it run on unrooted devices.
This is a meta bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690453</commentid>
    <comment_count>1</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-08 10:12:10 -0700</bug_when>
    <thetext>Though all depending bugs are resolved, there are still following works to do to achieve the goal to run on unrooted devices:

1) Unrooted forwarder
2) Unrooted way to synchronize date-time
and other things that we don&apos;t know yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706270</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-08-28 06:07:51 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Though all depending bugs are resolved, there are still following works to do to achieve the goal to run on unrooted devices:
&gt; 
&gt; 1) Unrooted forwarder
&gt; 2) Unrooted way to synchronize date-time
&gt; and other things that we don&apos;t know yet

I&apos;m going to send a CL addressing the second point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707336</commentid>
    <comment_count>3</comment_count>
      <attachid>161190</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-08-29 05:10:15 -0700</bug_when>
    <thetext>Created attachment 161190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707339</commentid>
    <comment_count>4</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-08-29 05:11:57 -0700</bug_when>
    <thetext>Note that this patch depends on https://chromiumcodereview.appspot.com/10867008/ which is being reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707382</commentid>
    <comment_count>5</comment_count>
      <attachid>161190</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-08-29 06:02:35 -0700</bug_when>
    <thetext>Comment on attachment 161190
Patch

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

Thanks, Philippe! Some comments in-line..

&gt; Tools/ChangeLog:3
&gt; +        [Chromium-Android] Support LayoutTests on non-rooted devices.

Since this also touches a non-Chromium for Android specific test, I wouldn&apos;t use the [Chromium-Android] prefix here and append &quot;for Chromium Android&quot; to the title.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:410
&gt; +                                 &apos;Please pass --%s.&apos; % (configuration, most_recent_binary, most_recent_binary.lower()))

nit: The warning() method accepts multiple arguments for formatting, we should probably prefer that over string formatting.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:44
&gt; +    os.path.join(os.environ[&apos;CHROME_SRC&apos;], &apos;build&apos;, &apos;android&apos;, &apos;pylib&apos;))

I&apos;m not comfortable introducing this dependency. We&apos;re trying to get rid of dependencies on environment variable (like CHROME_SRC), and since we need adb commands in order parts of WebKit as well, I&apos;d prefer to have a smaller but similar runner on the WebKit side. This is out of scope, but is there any way we can work around needing this right now?

&gt; LayoutTests/ChangeLog:5
&gt; +        http://crbug.com/143114

nit: it&apos;s uncommon to for Chromium to mention our own bug tracker, but it&apos;s harmless too. In general, you could use the URL field in the bug for this.

&gt; LayoutTests/http/tests/cache/resources/cache-simulator.cgi:-6
&gt; -print &quot;Content-type: text/javascript\n&quot;; 

I&apos;d avoid touching this file if you&apos;re just removing a space.

&gt; LayoutTests/http/tests/cache/resources/subresource-test.js:31
&gt; +    var url = document.URL.replace(/subresource-expiration-..html/, &quot;resources/current-time.cgi&quot;);

This seems rather fragile, can we rely on relative paths to work? Requesting &quot;resources/current-time.cgi&quot; should work fine.

&gt; LayoutTests/http/tests/cache/resources/subresource-test.js:40
&gt; +    return new Date((parseInt(req.responseText) * 1000) + elapsedTime);

nit: elapsedTime is the time the round trip took, while I guess we only care about half of that (server -&gt; client)?

&gt; LayoutTests/http/tests/cache/resources/subresource-test.js:85
&gt; +    now = getServerDate();

This introduces 24 additional synchronous requests for the subresource-expiration-{1,2}.html test cases. While this probably isn&apos;t a huge deal considering it&apos;s (for most platforms) local, could we maybe determine the difference between the server and client times once during initialization, and then correct the &quot;new Date()&quot; statement here with the offset?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707387</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-08-29 06:07:53 -0700</bug_when>
    <thetext>Also, you probably should have opened a separate bug (blocking this one) for the synchronization :-).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707474</commentid>
    <comment_count>7</comment_count>
      <attachid>161190</attachid>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-08-29 08:29:00 -0700</bug_when>
    <thetext>Comment on attachment 161190
Patch

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

&gt;&gt; Tools/ChangeLog:3
&gt;&gt; +        [Chromium-Android] Support LayoutTests on non-rooted devices.
&gt; 
&gt; Since this also touches a non-Chromium for Android specific test, I wouldn&apos;t use the [Chromium-Android] prefix here and append &quot;for Chromium Android&quot; to the title.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:410
&gt;&gt; +                                 &apos;Please pass --%s.&apos; % (configuration, most_recent_binary, most_recent_binary.lower()))
&gt; 
&gt; nit: The warning() method accepts multiple arguments for formatting, we should probably prefer that over string formatting.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:44
&gt;&gt; +    os.path.join(os.environ[&apos;CHROME_SRC&apos;], &apos;build&apos;, &apos;android&apos;, &apos;pylib&apos;))
&gt; 
&gt; I&apos;m not comfortable introducing this dependency. We&apos;re trying to get rid of dependencies on environment variable (like CHROME_SRC), and since we need adb commands in order parts of WebKit as well, I&apos;d prefer to have a smaller but similar runner on the WebKit side. This is out of scope, but is there any way we can work around needing this right now?

I can avoid relying on $CHROME_SRC and use a relative path assuming that this file won&apos;t be moved. Regarding the use of android_commands, AndroidCommands.PushIfNeeded() provides a way to sync data files with the device by using a custom implementation of md5sum (written in C++ and depending on Chromium&apos;s base/). Although we could have our own Python layer for that in WebKit, we can hardly do the same for md5sum (I don&apos;t think you want to duplicate it either). So it seems that we would have to use Chromium&apos;s md5sum (being submitted under tools/android/md5sum) anyway.
Since we own that file, which is Chromium-specific, I think that preventing us from depending on Chromium might be an unnecessary constraint. I agree that we could introduce at least a thin layer in WebKit, calling Chromium&apos;s python, rather than calling it directly though.
But I&apos;m sure that I don&apos;t see the full picture since this is my first WebKit contribution. What do you think? Is this dependency to Chromium the only one?

&gt;&gt; LayoutTests/ChangeLog:5
&gt;&gt; +        http://crbug.com/143114
&gt; 
&gt; nit: it&apos;s uncommon to for Chromium to mention our own bug tracker, but it&apos;s harmless too. In general, you could use the URL field in the bug for this.

Done.

&gt;&gt; LayoutTests/http/tests/cache/resources/cache-simulator.cgi:-6
&gt;&gt; -print &quot;Content-type: text/javascript\n&quot;; 
&gt; 
&gt; I&apos;d avoid touching this file if you&apos;re just removing a space.

Done.

&gt;&gt; LayoutTests/http/tests/cache/resources/subresource-test.js:31
&gt;&gt; +    var url = document.URL.replace(/subresource-expiration-..html/, &quot;resources/current-time.cgi&quot;);
&gt; 
&gt; This seems rather fragile, can we rely on relative paths to work? Requesting &quot;resources/current-time.cgi&quot; should work fine.

Done.

&gt;&gt; LayoutTests/http/tests/cache/resources/subresource-test.js:40
&gt;&gt; +    return new Date((parseInt(req.responseText) * 1000) + elapsedTime);
&gt; 
&gt; nit: elapsedTime is the time the round trip took, while I guess we only care about half of that (server -&gt; client)?

Good point.

&gt;&gt; LayoutTests/http/tests/cache/resources/subresource-test.js:85
&gt;&gt; +    now = getServerDate();
&gt; 
&gt; This introduces 24 additional synchronous requests for the subresource-expiration-{1,2}.html test cases. While this probably isn&apos;t a huge deal considering it&apos;s (for most platforms) local, could we maybe determine the difference between the server and client times once during initialization, and then correct the &quot;new Date()&quot; statement here with the offset?

Good point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707475</commentid>
    <comment_count>8</comment_count>
    <who name="Philippe Liard">pliard</who>
    <bug_when>2012-08-29 08:29:49 -0700</bug_when>
    <thetext>I&apos;ve created this specific bug: https://bugs.webkit.org/show_bug.cgi?id=95346

Sorry for polluting this one!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707480</commentid>
    <comment_count>9</comment_count>
      <attachid>161190</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-08-29 08:32:30 -0700</bug_when>
    <thetext>Comment on attachment 161190
Patch

Marking as obsolete since we&apos;re moving discussion to Bug 95346.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870957</commentid>
    <comment_count>10</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2013-04-08 11:13:08 -0700</bug_when>
    <thetext>Resolving as WontFix given that Chromium moved to Blink.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161190</attachid>
            <date>2012-08-29 05:10:15 -0700</date>
            <delta_ts>2012-08-29 08:32:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91872-20120829141004.patch</filename>
            <type>text/plain</type>
            <size>13823</size>
            <attacher name="Philippe Liard">pliard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2ODc1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTM2Yzc1MWQ4ZWEyOWU3MGI1YmZhYWY4MWFmNTQxZDUz
MzM1MmNlMy4uMmZjYTdlMDk1NjgyNWUzYzI2ZGUxMjAxMDI3ZDM4OTA1NmUzMDliYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1
IEBACisyMDEyLTA4LTI4ICBQaGlsaXBwZSBMaWFyZCAgPHBsaWFyZEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFN1cHBvcnQgTGF5b3V0VGVzdHMgb24gbm9uLXJv
b3RlZCBkZXZpY2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE4NzIKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS8xNDMxMTQKKworICAgICAgICBX
ZSB3ZXJlIHJlcXVpcmluZyByb290IHBlcm1pc3Npb25zIHRvIHN5bmMgcmVzb3VyY2UgZmlsZXMg
d2l0aCB0aGUKKyAgICAgICAgZGV2aWNlIGJ5IGNvbXBhcmluZyBob3N0IGFuZCBkZXZpY2UgZmls
ZXMnIHRpbWVzdGFtcCBhZnRlciB3ZQorICAgICAgICBzeW5jaHJvbml6ZWQgdGhlIGRldmljZSBh
bmQgaG9zdCBjbG9ja3MuCisgICAgICAgIFdlIG5vdyByZWx5IG9uIEFuZHJvaWRDb21tYW5kcy5Q
dXNoSWZOZWVkZWQoKSBwcm92aWRlZCBieSBDaHJvbWl1bSB0bworICAgICAgICBoYW5kbGUgZGF0
YSBmaWxlcyBzeW5jaHJvbml6YXRpb24uIEl0IHVzZXMgbWQ1IHVuZGVyIHRoZSBob29kIHdoaWNo
CisgICAgICAgIGRvZXNuJ3QgbmVlZCByb290IHBlcm1pc3Npb25zLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKENo
cm9taXVtUG9ydC5fY2hlY2tfZHJpdmVyX2J1aWxkX3VwX3RvX2RhdGUpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXIuX3NldHVwX3Rlc3QpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9wdXNoX2V4ZWN1dGFibGUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9w
dXNoX3Rlc3RfcmVzb3VyY2VzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcmVh
ZF9wcm9tcHQpOgorCiAyMDEyLTA4LTI4ICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9r
aWEuY29tPgogCiAgICAgICAgIFt3YXRjaGxpc3RdIFVucmV2aWV3ZWQsIHN1YnNjcmliZSB0byBR
dCBidWdzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkKaW5kZXggZTY2YjBhMjA0MzE5ZDFmODg2OTRlMzc2YzcwYWNjN2EwZThh
M2U1YS4uYWE0NGZjZTY3NmMxYTRlNGYwNjQ4MTVhOWEyZDc1NmEwYzdlZTJlNyAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5
CkBAIC00MDUsMTAgKzQwNSw5IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKIAogICAgICAg
ICAgICAgICAgIGlmIChkZWJ1Z19tdGltZSA+IHJlbGVhc2VfbXRpbWUgYW5kIGNvbmZpZ3VyYXRp
b24gPT0gJ1JlbGVhc2UnIG9yCiAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfbXRpbWUgPiBk
ZWJ1Z19tdGltZSBhbmQgY29uZmlndXJhdGlvbiA9PSAnRGVidWcnKToKLSAgICAgICAgICAgICAg
ICAgICAgX2xvZy53YXJuaW5nKCdZb3UgYXJlIG5vdCBydW5uaW5nIHRoZSBtb3N0ICcKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNlbnQgRHVtcFJlbmRlclRyZWUgYmluYXJ5
LiBZb3UgbmVlZCB0byAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzcyAt
LWRlYnVnIG9yIG5vdCB0byBzZWxlY3QgYmV0d2VlbiAnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnRGVidWcgYW5kIFJlbGVhc2UuJykKKyAgICAgICAgICAgICAgICAgICAgbW9z
dF9yZWNlbnRfYmluYXJ5ID0gJ1JlbGVhc2UnIGlmIGNvbmZpZ3VyYXRpb24gPT0gJ0RlYnVnJyBl
bHNlICdEZWJ1ZycKKyAgICAgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdZb3UgYXJlIHJ1
bm5pbmcgdGhlICVzIGJpbmFyeS4gSG93ZXZlciB0aGUgJXMgYmluYXJ5IGFwcGVhcnMgdG8gYmUg
bW9yZSByZWNlbnQuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQbGVhc2Ug
cGFzcyAtLSVzLicgJSAoY29uZmlndXJhdGlvbiwgbW9zdF9yZWNlbnRfYmluYXJ5LCBtb3N0X3Jl
Y2VudF9iaW5hcnkubG93ZXIoKSkpCiAgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygn
JykKICAgICAgICAgICAgICMgVGhpcyB3aWxsIGZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBib3RoIGEg
ZGVidWcgYW5kIHJlbGVhc2UgYmluYXJ5LgogICAgICAgICAgICAgIyBUaGF0J3MgZmluZSBiZWNh
dXNlLCBpbiB0aGlzIGNhc2UsIHdlIG11c3QgYWxyZWFkeSBiZSBydW5uaW5nIHRoZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9h
bmRyb2lkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5CmluZGV4IDg4ZWViNGQ3NWIyYmNkYmVlMDVkZjFiOWJmMjk2YjRlNDZj
MGIwYWUuLjhlN2NlOTgwNTE3NzczNWMzMjg2NDdjNTgwYzhmNTY1MjliZWRkMTIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX2FuZHJvaWQucHkKQEAgLTMxLDYgKzMxLDcgQEAgaW1wb3J0IGNvcHkKIGltcG9ydCBs
b2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IHN5cwogaW1wb3J0IHRocmVhZGlu
ZwogaW1wb3J0IHRpbWUKIApAQCAtMzksNiArNDAsOSBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQg
aW1wb3J0IGZhY3RvcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNl
cnZlcl9wcm9jZXNzCiAKK3N5cy5wYXRoLmFwcGVuZCgKKyAgICBvcy5wYXRoLmpvaW4ob3MuZW52
aXJvblsnQ0hST01FX1NSQyddLCAnYnVpbGQnLCAnYW5kcm9pZCcsICdweWxpYicpKQoraW1wb3J0
IGFuZHJvaWRfY29tbWFuZHMKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQog
CkBAIC01NCw3ICs1OCw2IEBAIENPTU1BTkRfTElORV9GSUxFID0gREVWSUNFX1NPVVJDRV9ST09U
X0RJUiArICdjaHJvbWUtbmF0aXZlLXRlc3RzLWNvbW1hbmQtbGluZScKICMgYW5kIENocm9taXVt
J3Mgd2Via2l0L3N1cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRyb2lkLmNjLgogREVWSUNFX0RS
VF9ESVIgPSBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2RydC8nCiBERVZJQ0VfRk9SV0FSREVS
X1BBVEggPSBERVZJQ0VfRFJUX0RJUiArICdmb3J3YXJkZXInCi1ERVZJQ0VfRFJUX1NUQU1QX1BB
VEggPSBERVZJQ0VfRFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZS5zdGFtcCcKIAogRFJUX0FQUF9Q
QUNLQUdFID0gJ29yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdCcKIERSVF9BQ1RJVklUWV9GVUxMX05B
TUUgPSBEUlRfQVBQX1BBQ0tBR0UgKyAnLy5DaHJvbWVOYXRpdmVUZXN0QWN0aXZpdHknCkBAIC0z
NTUsNiArMzU4LDEwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVy
KToKICAgICAgICAgc2VsZi5faGFzX3NldHVwID0gRmFsc2UKICAgICAgICAgc2VsZi5fb3JpZ2lu
YWxfZ292ZXJub3JzID0ge30KICAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgPSBbJ2FkYicsICct
cycsIHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKHdvcmtlcl9udW1iZXIpXQorICAgICAgICBzZWxm
Ll9hZGIgPSBhbmRyb2lkX2NvbW1hbmRzLkFuZHJvaWRDb21tYW5kcygpCisgICAgICAgIHNlbGYu
X3B1c2hfZXhlY3V0YWJsZSgpCisgICAgICAgIHNlbGYuX3B1c2hfZm9udHMoKQorICAgICAgICBz
ZWxmLl9wdXNoX3Rlc3RfcmVzb3VyY2VzKCkKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAg
ICAgICBzZWxmLl90ZWFyZG93bl9wZXJmb3JtYW5jZSgpCkBAIC0zNzYsMzcgKzM4MywyMiBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGlyJywgJy1wJywgREVWSUNFX0RSVF9ESVJd
KQogICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1vZCcsICc3Nzcn
LCBERVZJQ0VfRFJUX0RJUl0pCiAKLSAgICAgICAgc2VsZi5fcHVzaF9leGVjdXRhYmxlKCkKLSAg
ICAgICAgc2VsZi5fcHVzaF9mb250cygpCi0gICAgICAgIHNlbGYuX3N5bmNocm9uaXplX2RhdGV0
aW1lKCkKLQogICAgICAgICAjIERlbGV0ZSB0aGUgZGlzayBjYWNoZSBpZiBhbnkgdG8gZW5zdXJl
IGEgY2xlYW4gdGVzdCBydW4uCiAgICAgICAgICMgVGhpcyBpcyBsaWtlIHdoYXQncyBkb25lIGlu
IENocm9taXVtUG9ydC5zZXR1cF90ZXN0X3J1biBidXQgb24gdGhlIGRldmljZS4KICAgICAgICAg
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCAnLXInLCBEUlRfQVBQX0NBQ0hF
X0RJUl0pCiAKICAgICBkZWYgX3B1c2hfZXhlY3V0YWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5f
YWRiLlB1c2hJZk5lZWRlZChzZWxmLl9wb3J0Ll9wYXRoX3RvX2ZvcndhcmRlcigpLCBERVZJQ0Vf
Rk9SV0FSREVSX1BBVEgpCisgICAgICAgIHNlbGYuX2FkYi5QdXNoSWZOZWVkZWQoc2VsZi5fcG9y
dC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUucGFrJyksIERFVklDRV9EUlRfRElSICsgJ0R1
bXBSZW5kZXJUcmVlLnBhaycpCisgICAgICAgIHNlbGYuX2FkYi5QdXNoSWZOZWVkZWQoc2VsZi5f
cG9ydC5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJyksIERFVklDRV9EUlRf
RElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCisgICAgICAgIHNlbGYuX2FkYi5QdXNo
SWZOZWVkZWQoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcp
LCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX21haW5fZm9udHMueG1sJykKKyAgICAgICAgc2Vs
Zi5fYWRiLlB1c2hJZk5lZWRlZChzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxi
YWNrX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRz
LnhtbCcpCisgICAgICAgIF9sb2cuZGVidWcoJ1B1c2hpbmcgZXhlY3V0YWJsZScpCisgICAgICAg
IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FHRV0pCiAg
ICAgICAgIGRydF9ob3N0X3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpCi0gICAg
ICAgIGZvcndhcmRlcl9ob3N0X3BhdGggPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2ZvcndhcmRlcigp
Ci0gICAgICAgIGhvc3Rfc3RhbXAgPSBpbnQoZmxvYXQobWF4KG9zLnN0YXQoZHJ0X2hvc3RfcGF0
aCkuc3RfbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQo
Zm9yd2FyZGVyX2hvc3RfcGF0aCkuc3RfbXRpbWUpKSkKLSAgICAgICAgZGV2aWNlX3N0YW1wID0g
aW50KGZsb2F0KHNlbGYuX3J1bl9hZGJfY29tbWFuZChbCi0gICAgICAgICAgICAnc2hlbGwnLCAn
Y2F0ICVzIDI+L2Rldi9udWxsIHx8IGVjaG8gMCcgJSBERVZJQ0VfRFJUX1NUQU1QX1BBVEhdKSkp
Ci0gICAgICAgIGlmIGRldmljZV9zdGFtcCAhPSBob3N0X3N0YW1wOgotICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnUHVzaGluZyBleGVjdXRhYmxlJykKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9f
ZGV2aWNlKGZvcndhcmRlcl9ob3N0X3BhdGgsIERFVklDRV9GT1JXQVJERVJfUEFUSCkKLSAgICAg
ICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3VuaW5zdGFsbCcsIERSVF9BUFBfUEFDS0FH
RV0pCi0gICAgICAgICAgICBpbnN0YWxsX3Jlc3VsdCA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J2luc3RhbGwnLCBkcnRfaG9zdF9wYXRoXSkKLSAgICAgICAgICAgIGlmIGluc3RhbGxfcmVzdWx0
LmZpbmQoJ1N1Y2Nlc3MnKSA9PSAtMToKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcignRmFpbGVkIHRvIGluc3RhbGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChkcnRfaG9zdF9w
YXRoLCBpbnN0YWxsX3Jlc3VsdCkpCi0gICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShz
ZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9E
SVIgKyAnRHVtcFJlbmRlclRyZWUucGFrJykKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2
aWNlKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpLCBE
RVZJQ0VfRFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKQotICAgICAgICAgICAg
c2VsZi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9tYWlu
X2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX21haW5fZm9udHMueG1sJykK
LSAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgo
J2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRf
ZmFsbGJhY2tfZm9udHMueG1sJykKLSAgICAgICAgICAgICMgVmVyc2lvbiBjb250cm9sIG9mIHRl
c3QgcmVzb3VyY2VzIGlzIGRlcGVuZGVudCBvbiBleGVjdXRhYmxlcywKLSAgICAgICAgICAgICMg
YmVjYXVzZSB3ZSB3aWxsIGFsd2F5cyByZWJ1aWxkIGV4ZWN1dGFibGVzIHdoZW4gcmVzb3VyY2Vz
IGFyZQotICAgICAgICAgICAgIyB1cGRhdGVkLgotICAgICAgICAgICAgc2VsZi5fcHVzaF90ZXN0
X3Jlc291cmNlcygpCi0gICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdlY2hvICVkID4lcycgJSAoaG9zdF9zdGFtcCwgREVWSUNFX0RSVF9TVEFNUF9QQVRIKV0pCisg
ICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcs
IGRydF9ob3N0X3BhdGhdKQorICAgICAgICBpZiBpbnN0YWxsX3Jlc3VsdC5maW5kKCdTdWNjZXNz
JykgPT0gLTE6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVkIHRvIGlu
c3RhbGwgJXMgb250byBkZXZpY2U6ICVzJyAlIChkcnRfaG9zdF9wYXRoLCBpbnN0YWxsX3Jlc3Vs
dCkpCiAKICAgICBkZWYgX3B1c2hfZm9udHMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9j
aGVja192ZXJzaW9uKERFVklDRV9GT05UU19ESVIsIEZPTlRfRklMRVNfVkVSU0lPTik6CkBAIC00
MjEsMTggKzQxMyw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVy
KToKICAgICBkZWYgX3B1c2hfdGVzdF9yZXNvdXJjZXMoc2VsZik6CiAgICAgICAgIF9sb2cuZGVi
dWcoJ1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3IgcmVzb3VyY2UgaW4gVEVT
VF9SRVNPVVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNl
bGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgJy8nICsgcmVzb3VyY2UsIERFVklDRV9MQVlP
VVRfVEVTVFNfRElSICsgcmVzb3VyY2UpCi0KLSAgICBkZWYgX3N5bmNocm9uaXplX2RhdGV0aW1l
KHNlbGYpOgotICAgICAgICAjIFRoZSBkYXRlL3RpbWUgYmV0d2VlbiBob3N0IGFuZCBkZXZpY2Ug
bWF5IG5vdCBiZSBzeW5jaHJvbml6ZWQuCi0gICAgICAgICMgV2UgbmVlZCB0byBtYWtlIHRoZW0g
c3luY2hyb25pemVkLCBvdGhlcndpc2UgdGVzdHMgbWlnaHQgZmFpbC4KLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgIyBHZXQgc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwIFVUQy4K
LSAgICAgICAgICAgIGhvc3RfZGF0ZXRpbWUgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWydkYXRlJywgJy11JywgJyslcyddKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAg
ICAjIFJlc2V0IHRvIDE5NzAtMDEtMDEgMDA6MDA6MDAgVVRDLgotICAgICAgICAgICAgaG9zdF9k
YXRldGltZSA9IDAKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZGF0
ZSAtdSAlcycgJSAoaG9zdF9kYXRldGltZSldKQorICAgICAgICAgICAgc2VsZi5fYWRiLlB1c2hJ
Zk5lZWRlZChzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICcvJyArIHJlc291cmNlLCBE
RVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNlKQogCiAgICAgZGVmIF9jaGVja192ZXJz
aW9uKHNlbGYsIGRpciwgdmVyc2lvbik6CiAgICAgICAgIGFzc2VydChkaXIuZW5kc3dpdGgoJy8n
KSkKQEAgLTY5MSw4ICs2NzIsNiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBjdXJyZW50X2NoYXIg
PSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91dChkZWFkbGluZSwgMSkKICAgICAgICAg
ICAgIGlmIGN1cnJlbnRfY2hhciA9PSAnICc6Ci0gICAgICAgICAgICAgICAgaWYgbGFzdF9jaGFy
ID09ICcjJzoKKyAgICAgICAgICAgICAgICBpZiBsYXN0X2NoYXIgaW4gWycjJywgJyQnXToKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgaWYgbGFzdF9jaGFyID09
ICckJzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0FkYmQgaXMg
bm90IHJ1bm5pbmcgYXMgcm9vdCcpCiAgICAgICAgICAgICBsYXN0X2NoYXIgPSBjdXJyZW50X2No
YXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA4ZjA3YWE0MzAwMjU0OTUzNzI5OGMzZWM4MGViYjk5MTBkYmM4M2UxLi4yNTE2
Nzg5MTM2ZWNiMTk2MmJmYjE1Nzk3MDRlNzFhMTg1YTNjNTgzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMDgtMjggIFBoaWxpcHBlIExpYXJkICA8cGxpYXJkQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbQ2hyb21pdW0tQW5kcm9pZF0gU3VwcG9ydCBMYXlvdXRUZXN0cyBvbiBub24tcm9v
dGVkIGRldmljZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MTg3MgorICAgICAgICBodHRwOi8vY3JidWcuY29tLzE0MzExNAorCisgICAgICAgIGh0
dHAvdGVzdHMvY2FjaGUvcmVzb3VyY2VzL3N1YnJlc291cmNlLXRlc3QuanMgd2FzIGFzc3VtaW5n
IHRoYXQgdGhlCisgICAgICAgIGNsaWVudCBhbmQgc2VydmVyIGNsb2NrcyBhcmUgdGhlIHNhbWUg
d2hpY2ggaXMgbm8gbG9uZ2VyIHRydWUgc2luY2Ugd2UKKyAgICAgICAgYXJlIGdldHRpbmcgcmlk
IG9mIGhvc3QvZGV2aWNlIGNsb2NrIHN5bmNocm9uaXphdGlvbi4KKworICAgICAgICAqIGh0dHAv
dGVzdHMvY2FjaGUvcmVzb3VyY2VzL2NhY2hlLXNpbXVsYXRvci5jZ2k6CisgICAgICAgICogaHR0
cC90ZXN0cy9jYWNoZS9yZXNvdXJjZXMvY3VycmVudC10aW1lLmNnaTogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9jYWNoZS9yZXNvdXJjZXMvc3VicmVzb3VyY2UtdGVzdC5qczoKKyAgICAg
ICAgKGdldFNlcnZlckRhdGUpOgorICAgICAgICAobmV4dFRlc3QpOgorICAgICAgICAodGVzdENv
bXBsZXRlKToKKyAgICAgICAgKHJ1blRlc3RzKToKKwogMjAxMi0wOC0yOCAgS2FuZ2lsIEhhbiAg
PGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXVtXVFJdIFJlYmFz
ZWxpbmUgbmV3bHkgYWRkZWQgU1ZHIHRleHQgdGVzdCBjYXNlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9yZXNvdXJjZXMvY2FjaGUtc2ltdWxhdG9yLmNnaSBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvcmVzb3VyY2VzL2NhY2hlLXNpbXVsYXRvci5jZ2kK
aW5kZXggYmJlNWIxYmQ0NmJiMGI2MzE4YmQ3NmFhYjk0ZDhlZWFhMGUwN2E0ZS4uZDE2NjA3OTUz
OTMxMzJhYWZhNDVkNjY4OTk0MDkxOTgwZTZmYWM1OCAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9jYWNoZS9yZXNvdXJjZXMvY2FjaGUtc2ltdWxhdG9yLmNnaQorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3Jlc291cmNlcy9jYWNoZS1zaW11bGF0b3IuY2dpCkBA
IC0zLDcgKzMsNyBAQAogdXNlIENHSTsKIHVzZSBIVFRQOjpEYXRlOwogCi1wcmludCAiQ29udGVu
dC10eXBlOiB0ZXh0L2phdmFzY3JpcHRcbiI7IAorcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9q
YXZhc2NyaXB0XG4iOwogCiBteSAkcXVlcnkgPSBuZXcgQ0dJOwogQG5hbWVzID0gJHF1ZXJ5LT5w
YXJhbTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvcmVzb3VyY2Vz
L2N1cnJlbnQtdGltZS5jZ2kgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3Jlc291cmNl
cy9jdXJyZW50LXRpbWUuY2dpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyYzg5MWIyMjJjNjU1Njc4YjRlOWZlMDcw
OTM4MTA3ODc1ZjFkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NhY2hlL3Jlc291cmNlcy9jdXJyZW50LXRpbWUuY2dpCkBAIC0wLDAgKzEsNSBAQAorIyEvdXNy
L2Jpbi9wZXJsIC13CisKK3ByaW50ICJDb250ZW50LXR5cGU6IHRleHQvcGxhaW5cbiI7Citwcmlu
dCAiXG4iOworcHJpbnQgdGltZSgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NhY2hlL3Jlc291cmNlcy9zdWJyZXNvdXJjZS10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9jYWNoZS9yZXNvdXJjZXMvc3VicmVzb3VyY2UtdGVzdC5qcwppbmRleCBjZTRiYjEyOTUw
MzI2YWFjMjZmN2M5OWFkMzBhNDEyYTQ3ZjljOTYzLi5iZjcxNmRlMjUxNDhhOTNiZTVjZjM0YmIw
NDc4ZjllYmIyNzQyNjJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hl
L3Jlc291cmNlcy9zdWJyZXNvdXJjZS10ZXN0LmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvY2FjaGUvcmVzb3VyY2VzL3N1YnJlc291cmNlLXRlc3QuanMKQEAgLTI1LDYgKzI1LDIxIEBA
IHZhciBjb25zb2xlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGNvbnNvbGVEaXYpOwogZnJhbWUyLm9ubG9hZCA9IGZ1bmN0aW9u
ICgpIHsgbG9hZGVkRnJhbWVDb3VudCsrOyB9CiAKK2Z1bmN0aW9uIGdldFNlcnZlckRhdGUoKQor
eworICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB2YXIgdXJsID0gZG9j
dW1lbnQuVVJMLnJlcGxhY2UoL3N1YnJlc291cmNlLWV4cGlyYXRpb24tLi5odG1sLywgInJlc291
cmNlcy9jdXJyZW50LXRpbWUuY2dpIik7CisgICAgdmFyIHQwID0gbmV3IERhdGUoKS5nZXRUaW1l
KCk7CisgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UgLyogYmxvY2tpbmcgKi8pOworICAg
IHJlcS5zZW5kKCk7CisgICAgdmFyIGVsYXBzZWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkg
LSB0MDsKKyAgICBpZiAocmVxLnN0YXR1cyAhPSAyMDApIHsKKyAgICAgICAgY29uc29sZS5sb2co
InVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgIiArIHJlcS5zdGF0dXMgKyAiLCBleHBlY3RlZCAyMDAu
Iik7CisgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpOworICAgIH0KKyAgICByZXR1cm4gbmV3IERh
dGUoKHBhcnNlSW50KHJlcS5yZXNwb25zZVRleHQpICogMTAwMCkgKyBlbGFwc2VkVGltZSk7Cit9
CisKIGZ1bmN0aW9uIGxvYWRUZXN0RnJhbWUoZnJhbWUsIHRlc3RTcGVjKQogewogICAgIHZhciBm
aXJzdCA9IHRydWU7CkBAIC02Nyw3ICs4Miw3IEBAIGZ1bmN0aW9uIG5leHRUZXN0KCkKIHsKICAg
ICB2YXIgdGVzdFNwZWMgPSB0ZXN0c1tjdXJyZW50VGVzdF07CiAgICAgdW5pcXVlSWQgPSBNYXRo
LmZsb29yKDEwMDAwMDAwMCAqIE1hdGgucmFuZG9tKCkpOwotICAgIG5vdyA9IG5ldyBEYXRlKCk7
CisgICAgbm93ID0gZ2V0U2VydmVyRGF0ZSgpOwogICAgIGlmICghdGVzdFNwZWMpIHsKICAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CkBAIC04MCwyMiArOTUsMjIgQEAgZnVuY3Rpb24gbmV4dFRlc3QoKQogZnVuY3Rpb24g
dGVzdENvbXBsZXRlKHRlc3RTcGVjKQogewogICAgIHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7Ci0gICAgdmFyIHJlc3VsdCA9IGZyYW1lMS5jb250ZW50V2luZG93LnJh
bmRvbU51bWJlciA9PSBmcmFtZTIuY29udGVudFdpbmRvdy5yYW5kb21OdW1iZXIgPyAnQ2FjaGVk
JyA6ICdVbmNhY2hlZCc7ICAgIAorICAgIHZhciByZXN1bHQgPSBmcmFtZTEuY29udGVudFdpbmRv
dy5yYW5kb21OdW1iZXIgPT0gZnJhbWUyLmNvbnRlbnRXaW5kb3cucmFuZG9tTnVtYmVyID8gJ0Nh
Y2hlZCcgOiAnVW5jYWNoZWQnOwogICAgIHZhciBwYXNzZWQgPSByZXN1bHQgPT0gdGVzdFNwZWMu
ZXhwZWN0ZWRSZXN1bHQ7CiAKICAgICBpZiAodGVzdFNwZWMuZGVzY3JpcHRpb24pCiAgICAgICAg
IGxpbmUuaW5uZXJIVE1MICs9IHRlc3RTcGVjLmRlc2NyaXB0aW9uOwogICAgIGVsc2UgewotICAg
ICAgICBmb3IgKHZhciBoZWFkZXIgaW4gdGVzdFNwZWMudGVzdEhlYWRlcnMpIAorICAgICAgICBm
b3IgKHZhciBoZWFkZXIgaW4gdGVzdFNwZWMudGVzdEhlYWRlcnMpCiAgICAgICAgICAgICBsaW5l
LmlubmVySFRNTCArPSBoZWFkZXIgKyAiOiAiICsgdGVzdFNwZWMudGVzdEhlYWRlcnNbaGVhZGVy
XSArICI7ICI7CiAgICAgfQogICAgIGlmICh0ZXN0U3BlYy5kZWxheSkKICAgICAgICAgbGluZS5p
bm5lckhUTUwgKz0gIltkZWxheT0iICsgdGVzdFNwZWMuZGVsYXkgKyAic10gIgogICAgIGxpbmUu
aW5uZXJIVE1MICs9ICIgIChyZXN1bHQ9IiArIHJlc3VsdCArICIgZXhwZWN0ZWQ9IiArIHRlc3RT
cGVjLmV4cGVjdGVkUmVzdWx0ICsgIikgIjsKICAgICBsaW5lLmlubmVySFRNTCArPSBwYXNzZWQg
PyAiPGZvbnQgY29sb3I9Z3JlZW4+UEFTUzwvZm9udD4gIiA6ICI8Zm9udCBjb2xvcj1yZWQ+RkFJ
TDwvZm9udD4gIgotICAgICAgICAKKwogICAgIGNvbnNvbGVEaXYuYXBwZW5kQ2hpbGQobGluZSk7
Ci0gICAgCisKICAgICBuZXh0VGVzdCgpOwogfQogCkBAIC0xMDYsNSArMTIxLDQgQEAgZnVuY3Rp
b24gcnVuVGVzdHMoKQogICAgICAgICBuZXh0VGVzdCgpOwogICAgIGVsc2UKICAgICAgICAgc2V0
VGltZW91dChydW5UZXN0cywgMTAwKTsKLQogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>