<?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>92877</bug_id>
          
          <creation_ts>2012-08-01 09:44:37 -0700</creation_ts>
          <short_desc>[Chromium-Android] Run layout tests on multiple devices in parallel</short_desc>
          <delta_ts>2012-08-02 11:46:51 -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>Android</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Xianzhu Wang">wangxianzhu</assigned_to>
          <cc>abarth</cc>
    
    <cc>bulach</cc>
    
    <cc>dpranke</cc>
    
    <cc>jknotten</cc>
    
    <cc>ojan</cc>
    
    <cc>peter</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>684252</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-01 09:44:37 -0700</bug_when>
    <thetext>Because of the nature of apk, it&apos;s difficult to run layout tests in parallel on a single device. However, we can use multiple devices to speed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684515</commentid>
    <comment_count>1</comment_count>
      <attachid>155871</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-01 13:21:50 -0700</bug_when>
    <thetext>Created attachment 155871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684547</commentid>
    <comment_count>2</comment_count>
      <attachid>155871</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2012-08-01 13:51:25 -0700</bug_when>
    <thetext>Comment on attachment 155871
Patch

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

really good stuff, many thanks!
informal review here, looking forward to have this sharding enabled on our bots!

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:326
&gt; +        self._run_adb_command([&apos;root&apos;])

nit: not for now, but we&apos;ll eventually run all tests in non-rooted devices...

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:344
&gt; +        self._run_adb_command([&apos;shell&apos;, &apos;%s %s&apos; % (DEVICE_FORWARDER_PATH, FORWARD_PORTS)])

all other _run_adb_command have one param per item, so maybe this should be:
&apos;shell&apos;, DEVICE_FORWARDER_PATH, str(FORWARD_PORTS)
?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:347
&gt; +        drt_host_path = self._port._path_to_driver()

nit: here, the line below and 360-363 block and a few other places, it&apos;s accessing &quot;protected&quot; methods from _port..
should they be public, i.e., without the _ prefix?

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:169
&gt; +            self.error_from_test, crash_log = self._get_crash_log(text, self.error_from_test, newer_than=start_time)

nit: here newer_than doesn&apos;t have a default param, so no need to name it..

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:191
&gt; +        return self._port._get_crash_log(self._crashed_process_name, self._crashed_pid, stdout, stderr, newer_than)

nit: I don&apos;t know here, but to keep the previous behavior it&apos;d probably be better to name the newer_than param (in case there are other params after stderr with default values..)

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:-249
&gt; -        optparse.make_option(&quot;--adb-args&quot;, type=&quot;string&quot;,

nit: one thing that we implemented was --device (or here, --adb-device)..
then, way up on _get_devices, it&apos;d return just this param if passed..

reasons:
1. allow testing a specific device.
2. in the future, allow a single bot to have multiple device types, so that we can run a set of tests on device A, then the same set of tests on device B, etc..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684588</commentid>
    <comment_count>3</comment_count>
      <attachid>155871</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-01 14:30:24 -0700</bug_when>
    <thetext>Comment on attachment 155871
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:326
&gt;&gt; +        self._run_adb_command([&apos;root&apos;])
&gt; 
&gt; nit: not for now, but we&apos;ll eventually run all tests in non-rooted devices...

Yes. This is tracked in https://bugs.webkit.org/show_bug.cgi?id=91872.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:344
&gt;&gt; +        self._run_adb_command([&apos;shell&apos;, &apos;%s %s&apos; % (DEVICE_FORWARDER_PATH, FORWARD_PORTS)])
&gt; 
&gt; all other _run_adb_command have one param per item, so maybe this should be:
&gt; &apos;shell&apos;, DEVICE_FORWARDER_PATH, str(FORWARD_PORTS)
&gt; ?

&apos;adb shell&apos; accepts both multiple parameters or a whole command line in a single parameter.
Because FORWARD_PORTS is a string (&apos;8000 8080 8443 8880 9323&apos;), we use the second form.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:347
&gt;&gt; +        drt_host_path = self._port._path_to_driver()
&gt; 
&gt; nit: here, the line below and 360-363 block and a few other places, it&apos;s accessing &quot;protected&quot; methods from _port..
&gt; should they be public, i.e., without the _ prefix?

In layout test python code, this seems an existing style that the driver classes can access the protected methods of the port classes. I think we&apos;d better keep it in this change and discuss this separately :)

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:169
&gt;&gt; +            self.error_from_test, crash_log = self._get_crash_log(text, self.error_from_test, newer_than=start_time)
&gt; 
&gt; nit: here newer_than doesn&apos;t have a default param, so no need to name it..

Here I&apos;m keeping the original style. The newer_than parameter in Port._get_crash_log() also doesn&apos;t have a default value. I guess the author&apos;s intention was to express the meaning of the parameter explicitly at the call site.

Dirk, what&apos;s your opinion?

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:-249
&gt;&gt; -        optparse.make_option(&quot;--adb-args&quot;, type=&quot;string&quot;,
&gt; 
&gt; nit: one thing that we implemented was --device (or here, --adb-device)..
&gt; then, way up on _get_devices, it&apos;d return just this param if passed..
&gt; 
&gt; reasons:
&gt; 1. allow testing a specific device.
&gt; 2. in the future, allow a single bot to have multiple device types, so that we can run a set of tests on device A, then the same set of tests on device B, etc..

Good suggestion. Will do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684615</commentid>
    <comment_count>4</comment_count>
      <attachid>155892</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-01 14:56:37 -0700</bug_when>
    <thetext>Created attachment 155892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684845</commentid>
    <comment_count>5</comment_count>
      <attachid>155871</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-08-01 18:25:52 -0700</bug_when>
    <thetext>Comment on attachment 155871
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:228
&gt; +        pass

is this really desired? It seems at least messy ...

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:288
&gt; +    def _get_devices(self):

Nit: consider using @memoized here instead.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:297
&gt; +    def _get_device_serial(self, work_number):

probably better to call this worker_number ...

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:318
&gt; +        self._teardown_performance()

isn&apos;t this a method on the port? do you need to move that to the driver?

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:347
&gt;&gt;&gt; +        drt_host_path = self._port._path_to_driver()
&gt;&gt; 
&gt;&gt; nit: here, the line below and 360-363 block and a few other places, it&apos;s accessing &quot;protected&quot; methods from _port..
&gt;&gt; should they be public, i.e., without the _ prefix?
&gt; 
&gt; In layout test python code, this seems an existing style that the driver classes can access the protected methods of the port classes. I think we&apos;d better keep it in this change and discuss this separately :)

There&apos;s no good way to declare &quot;friends&quot; in python, so either we have to either make methods public that shouldn&apos;t be, or make methods private that some other classes use. I consider Drivers friends of Ports, so the latter usage is okay to me.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:169
&gt;&gt;&gt; +            self.error_from_test, crash_log = self._get_crash_log(text, self.error_from_test, newer_than=start_time)
&gt;&gt; 
&gt;&gt; nit: here newer_than doesn&apos;t have a default param, so no need to name it..
&gt; 
&gt; Here I&apos;m keeping the original style. The newer_than parameter in Port._get_crash_log() also doesn&apos;t have a default value. I guess the author&apos;s intention was to express the meaning of the parameter explicitly at the call site.
&gt; 
&gt; Dirk, what&apos;s your opinion?

You are right, that was my intent, but I don&apos;t feel strongly that it needs to be here. I&apos;d probably leave it, but I&apos;d be fine if you deleted it, too.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:191
&gt;&gt; +        return self._port._get_crash_log(self._crashed_process_name, self._crashed_pid, stdout, stderr, newer_than)
&gt; 
&gt; nit: I don&apos;t know here, but to keep the previous behavior it&apos;d probably be better to name the newer_than param (in case there are other params after stderr with default values..)

in this case, it&apos;s clear which parameter newer_than is being mapped onto. I&apos;d leave this alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685545</commentid>
    <comment_count>6</comment_count>
      <attachid>155871</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-02 10:27:36 -0700</bug_when>
    <thetext>Comment on attachment 155871
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:228
&gt;&gt; +        pass
&gt; 
&gt; is this really desired? It seems at least messy ...

In the new patch, http server is stopped here, and forwarder is stopped in ChromiumAndroidDriver.stop().

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:288
&gt;&gt; +    def _get_devices(self):
&gt; 
&gt; Nit: consider using @memoized here instead.

I tried but found it not very beneficial because we have the self._devices to store the values passed from the command line and it can also store the result from &apos;adb devices&apos;.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:297
&gt;&gt; +    def _get_device_serial(self, work_number):
&gt; 
&gt; probably better to call this worker_number ...

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:318
&gt;&gt; +        self._teardown_performance()
&gt; 
&gt; isn&apos;t this a method on the port? do you need to move that to the driver?

Because now there are multiple drivers each managing one device, the method needs to be in driver to restore the performance governor of one device.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:-249
&gt;&gt;&gt; -        optparse.make_option(&quot;--adb-args&quot;, type=&quot;string&quot;,
&gt;&gt; 
&gt;&gt; nit: one thing that we implemented was --device (or here, --adb-device)..
&gt;&gt; then, way up on _get_devices, it&apos;d return just this param if passed..
&gt;&gt; 
&gt;&gt; reasons:
&gt;&gt; 1. allow testing a specific device.
&gt;&gt; 2. in the future, allow a single bot to have multiple device types, so that we can run a set of tests on device A, then the same set of tests on device B, etc..
&gt; 
&gt; Good suggestion. Will do it.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685546</commentid>
    <comment_count>7</comment_count>
      <attachid>156116</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-02 10:28:57 -0700</bug_when>
    <thetext>Created attachment 156116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685595</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-08-02 11:11:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:318
&gt; &gt;&gt; +        self._teardown_performance()
&gt; &gt; 
&gt; &gt; isn&apos;t this a method on the port? do you need to move that to the driver?
&gt; 
&gt; Because now there are multiple drivers each managing one device, the method needs to be in driver to restore the performance governor of one device.
&gt; 

Sorry, I meant that I think this method is missing: you deleted the port&apos;s method, but forgot to add it to the driver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685603</commentid>
    <comment_count>9</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-02 11:19:35 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; 
&gt; Sorry, I meant that I think this method is missing: you deleted the port&apos;s method, but forgot to add it to the driver.

Oh, my sorry too for misunderstanding :)

The method is just not shown in the diff, because it is unchanged. The diff shows that ChromiumAndroidDriver.__init__ is moved up of these methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685609</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-08-02 11:24:41 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; 
&gt; &gt; Sorry, I meant that I think this method is missing: you deleted the port&apos;s method, but forgot to add it to the driver.
&gt; 
&gt; Oh, my sorry too for misunderstanding :)
&gt; 
&gt; The method is just not shown in the diff, because it is unchanged. The diff shows that ChromiumAndroidDriver.__init__ is moved up of these methods.

Oh, I see. right. I missed that __init__ was moving above it. Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685627</commentid>
    <comment_count>11</comment_count>
      <attachid>156116</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 11:46:47 -0700</bug_when>
    <thetext>Comment on attachment 156116
Patch

Clearing flags on attachment: 156116

Committed r124481: &lt;http://trac.webkit.org/changeset/124481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685628</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 11:46:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155871</attachid>
            <date>2012-08-01 13:21:50 -0700</date>
            <delta_ts>2012-08-02 10:27:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92877-20120801132132.patch</filename>
            <type>text/plain</type>
            <size>36659</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzM4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWRlZjc4YTM1NjJjYjkxOTU5MWMzNzdjMWNhYzUzNTdj
YmQ5YzI0My4uY2E0OTEzZWI4NTY5OTFkZjNlN2RhZGQ2MjE1MmE4MDA3MzcxMWEyOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcx
IEBACisyMDEyLTA4LTAxICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBsYXlvdXQgdGVzdHMgb24gbXVsdGlw
bGUgZGV2aWNlcyBpbiBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI4NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlZCBtZXRob2RzIHRoYXQgcnVuIGNvbW1hbmQgb24gYSBwYXJ0aWN1
bGFyIGRldmljZSBmcm9tIENocm9taXVtQW5kcm9pZFBvcnQgdG8gQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLgorICAgICAgICBUaGUgZHJpdmVycyBydW4gYWRiIGNvbW1hbmRzIHdpdGggdGhlICctcyBz
ZXJpYWxfbnVtYmVyJyBwYXJhbWV0ZXIgd2hpY2ggc3BlY2lmaWVzIHRoZSBkZXZpY2UgYWNjb3Jk
aW5nIHRvIHRoZSB3b3JrX251bWJlci4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZFBvcnQuX19pbml0X18pOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5kZWZhdWx0
X2NoaWxkX3Byb2Nlc3Nlcyk6IERlZmF1bHQgdG8gdGhlIG51bWJlciBvZiBhdHRhY2hlZCBkZXZp
Y2VzLgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC50ZXN0X2V4cGVjdGF0aW9ucyk6IFJl
bW92ZWQgYmVjYXVzZSBpdCBpcyB1bnVzZWQuIAorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9y
dC5zZXR1cF90ZXN0X3J1bik6IE1vc3QgY29udGVudHMgbW92ZWQgaW50byBDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3NldHVwX3Rlc3QoKQorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5jbGVh
bl91cF90ZXN0X3J1bik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfZGV2aWNl
cyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lk
RHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2RlbF9f
KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc2V0dXBfdGVzdCk6IE9yaWdpbmFs
IGNvbnRlbnRzIG9mIENocm9taXVtQW5kcm9pZFBvcnQuc2V0dXBfdGVzdF9ydW4oKS4KKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9leGVjdXRhYmxlKTogTW92ZWQgZnJvbSBD
aHJvbWl1bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNo
X2ZvbnRzKTogTW92ZWQgZnJvbSBDaHJvbWl1bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9wdXNoX3Rlc3RfcmVzb3VyY2VzKTogTW92ZWQgZnJvbSBDaHJvbWl1
bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zeW5jaHJvbml6
ZV9kYXRldGltZSk6IE1vdmVkIGZyb20gQ2hyb21pdW1BbmRyb2lkUG9ydC4KKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fcnVuX2FkYl9jb21tYW5kKTogTW92ZWQgZnJvbSBDaHJvbWl1
bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl90ZWFyZG93bl9w
ZXJmb3JtYW5jZSk6IE1vdmVkIGZyb20gQ2hyb21pdW1BbmRyb2lkUG9ydC4KKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gQ2hyb21pdW1B
bmRyb2lkUG9ydC4KKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5jbWRfbGluZSk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2ZpbGVfZXhpc3RzX29uX2RldmljZSk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3JlbW92ZV9hbGxfcGlwZXMpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0
b3ApOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fYW5kcm9pZF91bml0dGVzdC5weToKKyAgICAgICAgKE1vY2tSdW5Db21tYW5kKToKKyAgICAg
ICAgKE1vY2tSdW5Db21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKE1vY2tSdW5Db21tYW5kLm1v
Y2tfcnVuX2NvbW1hbmRfZm4pOgorICAgICAgICAoTW9ja1J1bkNvbW1hbmQubW9ja19ub19kZXZp
Y2UpOgorICAgICAgICAoTW9ja1J1bkNvbW1hbmQubW9ja19vbmVfZGV2aWNlKToKKyAgICAgICAg
KE1vY2tSdW5Db21tYW5kLm1vY2tfdHdvX2RldmljZXMpOgorICAgICAgICAoTW9ja1J1bkNvbW1h
bmQubW9ja19ub190b21ic3RvbmVfZGlyKToKKyAgICAgICAgKE1vY2tSdW5Db21tYW5kLm1vY2tf
bm9fdG9tYnN0b25lX2ZpbGUpOgorICAgICAgICAoTW9ja1J1bkNvbW1hbmQubW9ja190ZW5fdG9t
YnN0b25lcyk6CisgICAgICAgIChNb2NrUnVuQ29tbWFuZC5tb2NrX2xvZ2NhdCk6CisgICAgICAg
IChDaHJvbWl1bUFuZHJvaWRQb3J0VGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0
VGVzdC5tYWtlX3BvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QudGVzdF9k
cml2ZXJfY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QudGVzdF9n
ZXRfZGV2aWNlc19ub19kZXZpY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3Qu
dGVzdF9nZXRfZGV2aWNlc19vbmVfZGV2aWNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBv
cnRUZXN0LnRlc3RfZ2V0X2RldmljZXNfdHdvX2RldmljZXMpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkUG9ydFRlc3QudGVzdF9nZXRfZGV2aWNlX3NlcmlhbF9ub19kZXZpY2UpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QudGVzdF9nZXRfZGV2aWNlX3NlcmlhbF9vbmVfZGV2
aWNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnRUZXN0LnRlc3RfZ2V0X2RldmljZV9z
ZXJpYWxfdHdvX2RldmljZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdCk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnNldFVwKToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9nZXRfbGFzdF9zdGFja3RyYWNlKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9nZXRfY3Jhc2hfbG9nKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9jbWRfbGluZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFu
ZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdC50ZXN0X3R3b19kcml2ZXJzKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERy
aXZlci5ydW5fdGVzdCk6CisgICAgICAgIChEcml2ZXIuX2dldF9jcmFzaF9sb2cpOiBBZGRlZCB0
byBhbGxvdyBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgIChwYXJzZV9hcmdz
KTogUmVtb3ZlZCB0aGUgLS1hZGItYXJncyBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIGJlY2F1c2Ug
bm93IHdlIHNlbGVjdCBkZXZpY2UgYXV0b21hdGljYWxseS4KKwogMjAxMi0wOC0wMSAgU2hlcmlm
ZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjEyNDMyNS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQppbmRleCBmYTg1
ZjEwZDU3YzRjZTk3NGU5NGEyYmVhODkxMDFkMGFkOGQxYTQxLi5mZTlmMWIzMGE3NDg1NmE0M2Fi
YzM3MmZhNmYyNWZmY2ZmMTNhZmI4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0yOSw3
ICsyOSw3IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBzaGxleAoraW1w
b3J0IHJlCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCkBAIC0xNjcsMTUgKzE2Nyw5
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKIAog
ICAgICAgICBzZWxmLl9vcGVyYXRpbmdfc3lzdGVtID0gJ2FuZHJvaWQnCiAgICAgICAgIHNlbGYu
X3ZlcnNpb24gPSAnaWNlY3JlYW1zYW5kd2ljaCcKLSAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292
ZXJub3IgPSBOb25lCi0gICAgICAgIHNlbGYuX2FuZHJvaWRfYmFzZV9kaXIgPSBOb25lCiAKICAg
ICAgICAgc2VsZi5faG9zdF9wb3J0ID0gZmFjdG9yeS5Qb3J0RmFjdG9yeShob3N0KS5nZXQoJ2No
cm9taXVtJywgKiprd2FyZ3MpCi0KLSAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgPSBbJ2FkYidd
Ci0gICAgICAgIGFkYl9hcmdzID0gc2VsZi5nZXRfb3B0aW9uKCdhZGJfYXJncycpCi0gICAgICAg
IGlmIGFkYl9hcmdzOgotICAgICAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgKz0gc2hsZXguc3Bs
aXQoYWRiX2FyZ3MpCisgICAgICAgIHNlbGYuX2RldmljZXMgPSBOb25lCiAKICAgICBkZWYgZGVm
YXVsdF90aW1lb3V0X21zKHNlbGYpOgogICAgICAgICAjIEFuZHJvaWQgcGxhdGZvcm0gaGFzIGxl
c3MgY29tcHV0aW5nIHBvd2VyIHRoYW4gZGVza3RvcCBwbGF0Zm9ybXMuCkBAIC0xODQsOCArMTc4
LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgog
ICAgICAgICByZXR1cm4gMTAgKiAxMDAwCiAKICAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNz
ZXMoc2VsZik6Ci0gICAgICAgICMgQmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIGFwaywgd2UgZG9u
J3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIHByb2Nlc3MuCi0gICAgICAgIHJldHVybiAxCisgICAg
ICAgIHJldHVybiBsZW4oc2VsZi5fZ2V0X2RldmljZXMoKSkKIAogICAgIGRlZiBiYXNlbGluZV9z
ZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCwgc2VsZi5GQUxMQkFDS19QQVRIUykKQEAgLTIxNywxNSArMjEwLDYgQEAgY2xhc3Mg
Q2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBhbmRy
b2lkX2V4cGVjdGF0aW9uc19maWxlID0gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91
dFRlc3RzJywgJ3BsYXRmb3JtJywgJ2Nocm9taXVtJywgJ3Rlc3RfZXhwZWN0YXRpb25zX2FuZHJv
aWQudHh0JykKICAgICAgICAgcmV0dXJuIHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYp
LmV4cGVjdGF0aW9uc19maWxlcygpICsgW2FuZHJvaWRfZXhwZWN0YXRpb25zX2ZpbGVdCiAKLSAg
ICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6Ci0gICAgICAgICMgQXV0b21hdGljYWxseSBh
cHBseSBhbGwgZXhwZWN0YXRpb24gcnVsZXMgb2YgY2hyb21pdW0tbGludXggdG8KLSAgICAgICAg
IyBjaHJvbWl1bS1hbmRyb2lkLgotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IG1lYXN1cmUgdG8gcmVkdWNlIHRoZSBtYW51YWwgd29yayB3aGVuCi0gICAgICAgICMgdXBkYXRp
bmcgV2ViS2l0LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHdlIG1lcmdlCi0g
ICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnNfYW5kcm9pZC50eHQgaW50byBUZXN0RXhwZWN0YXRp
b25zLgotICAgICAgICBleHBlY3RhdGlvbnMgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBz
ZWxmKS50ZXN0X2V4cGVjdGF0aW9ucygpCi0gICAgICAgIHJldHVybiBleHBlY3RhdGlvbnMucmVw
bGFjZSgnTElOVVggJywgJ0xJTlVYIEFORFJPSUQgJykKLQogICAgIGRlZiBzdGFydF9odHRwX3Nl
cnZlcihzZWxmLCBhZGRpdGlvbmFsX2RpcnM9Tm9uZSwgbnVtYmVyX29mX3NlcnZlcnM9MCk6CiAg
ICAgICAgICMgVGhlIGh0dHAgc2VydmVyIHJ1bnMgZHVyaW5nIHRoZSB3aG9sZSB0ZXN0aW5nIHBl
cmlvZCwgc28gaWdub3JlIHRoaXMgY2FsbC4KICAgICAgICAgcGFzcwpAQCAtMjM1LDMzICsyMTks
MTMgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgog
ICAgICAgICBwYXNzCiAKICAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6Ci0gICAgICAgIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ3Jvb3QnXSkKLSAgICAgICAgc2VsZi5fc2V0dXBfcGVyZm9y
bWFuY2UoKQotICAgICAgICAjIFJlcXVpcmVkIGJ5IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRS
b290RGlyRmlsZVBhdGgoKS4KLSAgICAgICAgIyBPdGhlciBkaXJlY3RvcmllcyB3aWxsIGJlIGNy
ZWF0ZWQgYXV0b21hdGljYWxseSBieSBhZGIgcHVzaC4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsg
J2Nocm9tZSddKQotICAgICAgICAjIEFsbG93IHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgdG8gZnVs
bHkgYWNjZXNzIHRoZSBkaXJlY3RvcnkuCi0gICAgICAgICMgVGhlIG5hdGl2ZSBjb2RlIG5lZWRz
IHRoZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcyBoZXJlLgotICAgICAgICBz
ZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfU09V
UkNFX1JPT1RfRElSXSkKLQotICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQotICAgICAg
ICBzZWxmLl9wdXNoX2ZvbnRzKCkKLSAgICAgICAgc2VsZi5fc3luY2hyb25pemVfZGF0ZXRpbWUo
KQotCi0gICAgICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hlIGlmIGFueSB0byBlbnN1cmUgYSBj
bGVhbiB0ZXN0IHJ1bi4KLSAgICAgICAgIyBUaGlzIGlzIGxpa2Ugd2hhdCdzIGRvbmUgaW4gQ2hy
b21pdW1Qb3J0LnNldHVwX3Rlc3RfcnVuIGJ1dCBvbiB0aGUgZGV2aWNlLgotICAgICAgICBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsICctcicsIERSVF9BUFBfQ0FDSEVfRElS
XSkKLQogICAgICAgICAjIFN0YXJ0IHRoZSBIVFRQIHNlcnZlciBzbyB0aGF0IHRoZSBkZXZpY2Ug
Y2FuIGFjY2VzcyB0aGUgdGVzdCBjYXNlcy4KICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lk
UG9ydCwgc2VsZikuc3RhcnRfaHR0cF9zZXJ2ZXIoYWRkaXRpb25hbF9kaXJzPXtURVNUX1BBVEhf
UFJFRklYOiBzZWxmLmxheW91dF90ZXN0c19kaXIoKX0pCiAKLSAgICAgICAgX2xvZy5kZWJ1Zygn
U3RhcnRpbmcgZm9yd2FyZGVyJykKLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAnJXMgJXMnICUgKERFVklDRV9GT1JXQVJERVJfUEFUSCwgRk9SV0FSRF9QT1JUUyldKQot
CiAgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgogICAgICAgICAjIExlYXZlIHRoZSBm
b3J3YXJkZXIgYW5kIHRlc3RzIGh0dHBkIHNlcnZlciB0aGVyZSBiZWNhdXNlIHRoZXkgYXJlCiAg
ICAgICAgICMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGRvIG5vIGhhcm0gdG8gc3Vic2VxdWVu
dCB0ZXN0cy4KLSAgICAgICAgc2VsZi5fdGVhcmRvd25fcGVyZm9ybWFuY2UoKQorICAgICAgICBw
YXNzCiAKICAgICBkZWYgc2tpcHBlZF9sYXlvdXRfdGVzdHMoc2VsZiwgdGVzdF9saXN0KToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfdGVzdHMoWwpAQCAtMzE5LDIwICsyODMsNjkgQEAgY2xh
c3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgIGRlZiBf
ZHJpdmVyX2NsYXNzKHNlbGYpOgogICAgICAgICByZXR1cm4gQ2hyb21pdW1BbmRyb2lkRHJpdmVy
CiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVy
ciwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGlmIG5vdCBzdGRvdXQ6Ci0gICAgICAgICAgICBzdGRv
dXQgPSAnJwotICAgICAgICBzdGRvdXQgKz0gJyoqKioqKioqKiBMb2djYXQ6XG4nICsgc2VsZi5f
Z2V0X2xvZ2NhdCgpCi0gICAgICAgIGlmIG5vdCBzdGRlcnI6Ci0gICAgICAgICAgICBzdGRlcnIg
PSAnJwotICAgICAgICBzdGRlcnIgKz0gJyoqKioqKioqKiBUb21ic3RvbmUgZmlsZTpcbicgKyBz
ZWxmLl9nZXRfbGFzdF9zdGFja3RyYWNlKCkKLSAgICAgICAgcmV0dXJuIHN1cGVyKENocm9taXVt
QW5kcm9pZFBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4pCi0KICAgICAjIExvY2FsIHByaXZhdGUgZnVuY3Rpb25zLgogCisgICAg
ZGVmIF9nZXRfZGV2aWNlcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGV2aWNlcyBpcyBOb25l
OgorICAgICAgICAgICAgcmVfZGV2aWNlID0gcmUuY29tcGlsZSgnXihbYS16QS1aMC05XzouLV0r
KVx0ZGV2aWNlJCcsIHJlLk1VTFRJTElORSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2FkYicsICdkZXZpY2VzJ10sIGVycm9yX2hhbmRsZXI9c2Vs
Zi5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2RldmljZXMgPSBy
ZV9kZXZpY2UuZmluZGFsbChyZXN1bHQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNl
czoKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignTm8gZGV2aWNlcyBhdHRh
Y2hlZC4gUmVzdWx0IG9mICJhZGIgZGV2aWNlcyI6ICVzJyAlIHJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2RldmljZXMKKworICAgIGRlZiBfZ2V0X2RldmljZV9zZXJpYWwoc2VsZiwgd29y
a19udW1iZXIpOgorICAgICAgICBkZXZpY2VzID0gc2VsZi5fZ2V0X2RldmljZXMoKQorICAgICAg
ICBpZiB3b3JrX251bWJlciA+PSBsZW4oZGV2aWNlcyk6CisgICAgICAgICAgICByYWlzZSBBc3Nl
cnRpb25FcnJvcignV29yayBudW1iZXIgZXhjZWVkcyBhdmFpbGFibGUgbnVtYmVyIG9mIGRldmlj
ZXMnKQorICAgICAgICByZXR1cm4gZGV2aWNlc1t3b3JrX251bWJlcl0KKworCitjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0PUZhbHNlKToKKyAg
ICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2luaXRfXyhwb3J0LCB3
b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91dCkKKyAgICAgICAgc2VsZi5fcGl4
ZWxfdGVzdHMgPSBwaXhlbF90ZXN0cworICAgICAgICBzZWxmLl9pbl9maWZvX3BhdGggPSBEUlRf
QVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5pbicKKyAgICAgICAgc2VsZi5fb3V0X2Zp
Zm9fcGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLm91dCcKKyAgICAg
ICAgc2VsZi5fZXJyX2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJU
cmVlLmVycicKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKKyAgICAg
ICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5faGFzX3Nl
dHVwID0gRmFsc2UKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3IgPSBOb25lCisgICAg
ICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBwb3J0Ll9nZXRfZGV2aWNlX3Nl
cmlhbCh3b3JrZXJfbnVtYmVyKV0KKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBz
ZWxmLl90ZWFyZG93bl9wZXJmb3JtYW5jZSgpCisgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9p
ZERyaXZlciwgc2VsZikuX19kZWxfXygpCisKKyAgICBkZWYgX3NldHVwX3Rlc3Qoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuX2hhc19zZXR1cDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg
IHNlbGYuX2hhc19zZXR1cCA9IFRydWUKKyAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
cm9vdCddKQorICAgICAgICBzZWxmLl9zZXR1cF9wZXJmb3JtYW5jZSgpCisgICAgICAgICMgUmVx
dWlyZWQgYnkgd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXJGaWxlUGF0aCgpLgorICAg
ICAgICAjIE90aGVyIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5
IGFkYiBwdXNoLgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2Rp
cicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21lJ10pCisgICAgICAgICMg
QWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBmdWxseSBhY2Nlc3MgdGhlIGRpcmVjdG9y
eS4KKyAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVlZHMgdGhlIHBlcm1pc3Npb24gdG8gd3Jp
dGUgdGVtcG9yYXJ5IGZpbGVzIGhlcmUuCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVJdKQorCisgICAg
ICAgIHNlbGYuX3B1c2hfZXhlY3V0YWJsZSgpCisgICAgICAgIHNlbGYuX3B1c2hfZm9udHMoKQor
ICAgICAgICBzZWxmLl9zeW5jaHJvbml6ZV9kYXRldGltZSgpCisKKyAgICAgICAgIyBEZWxldGUg
dGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFuIHRlc3QgcnVuLgorICAgICAg
ICAjIFRoaXMgaXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJvbWl1bVBvcnQuc2V0dXBfdGVzdF9y
dW4gYnV0IG9uIHRoZSBkZXZpY2UuCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQorCisgICAgICAgIF9sb2cuZGVi
dWcoJ1N0YXJ0aW5nIGZvcndhcmRlcicpCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChb
J3NoZWxsJywgJyVzICVzJyAlIChERVZJQ0VfRk9SV0FSREVSX1BBVEgsIEZPUldBUkRfUE9SVFMp
XSkKKwogICAgIGRlZiBfcHVzaF9leGVjdXRhYmxlKHNlbGYpOgotICAgICAgICBkcnRfaG9zdF9w
YXRoID0gc2VsZi5fcGF0aF90b19kcml2ZXIoKQotICAgICAgICBmb3J3YXJkZXJfaG9zdF9wYXRo
ID0gc2VsZi5fcGF0aF90b19mb3J3YXJkZXIoKQorICAgICAgICBkcnRfaG9zdF9wYXRoID0gc2Vs
Zi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKQorICAgICAgICBmb3J3YXJkZXJfaG9zdF9wYXRoID0g
c2VsZi5fcG9ydC5fcGF0aF90b19mb3J3YXJkZXIoKQogICAgICAgICBob3N0X3N0YW1wID0gaW50
KGZsb2F0KG1heChvcy5zdGF0KGRydF9ob3N0X3BhdGgpLnN0X210aW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KGZvcndhcmRlcl9ob3N0X3BhdGgpLnN0X210
aW1lKSkpCiAgICAgICAgIGRldmljZV9zdGFtcCA9IGludChmbG9hdChzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWwpAQCAtMzQ0LDEwICszNTcsMTAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChj
aHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICAgICAgaW5zdGFsbF9yZXN1bHQgPSBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydpbnN0YWxsJywgZHJ0X2hvc3RfcGF0aF0pCiAgICAgICAgICAg
ICBpZiBpbnN0YWxsX3Jlc3VsdC5maW5kKCdTdWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAgICAg
ICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsICVzIG9udG8gZGV2aWNl
OiAlcycgJSAoZHJ0X2hvc3RfcGF0aCwgaW5zdGFsbF9yZXN1bHQpKQotICAgICAgICAgICAgc2Vs
Zi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUucGFrJyks
IERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnBhaycpCi0gICAgICAgICAgICBzZWxm
Ll9wdXNoX3RvX2RldmljZShzZWxmLl9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJj
ZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJykKLSAgICAg
ICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfbWFp
bl9mb250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcp
Ci0gICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9idWlsZF9wYXRoKCdhbmRy
b2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX2ZhbGxi
YWNrX2ZvbnRzLnhtbCcpCisgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAn
RHVtcFJlbmRlclRyZWUucGFrJykKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNl
bGYuX3BvcnQuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpLCBERVZJQ0Vf
RFJUX0RJUiArICdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKQorICAgICAgICAgICAgc2VsZi5f
cHVzaF90b19kZXZpY2Uoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9tYWluX2ZvbnRz
LnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX21haW5fZm9udHMueG1sJykKKyAgICAg
ICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJv
aWRfZmFsbGJhY2tfZm9udHMueG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJh
Y2tfZm9udHMueG1sJykKICAgICAgICAgICAgICMgVmVyc2lvbiBjb250cm9sIG9mIHRlc3QgcmVz
b3VyY2VzIGlzIGRlcGVuZGVudCBvbiBleGVjdXRhYmxlcywKICAgICAgICAgICAgICMgYmVjYXVz
ZSB3ZSB3aWxsIGFsd2F5cyByZWJ1aWxkIGV4ZWN1dGFibGVzIHdoZW4gcmVzb3VyY2VzIGFyZQog
ICAgICAgICAgICAgIyB1cGRhdGVkLgpAQCAtMzU3LDcgKzM3MCw3IEBAIGNsYXNzIENocm9taXVt
QW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgX3B1c2hfZm9udHMo
c2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9jaGVja192ZXJzaW9uKERFVklDRV9GT05UU19E
SVIsIEZPTlRfRklMRVNfVkVSU0lPTik6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCdQdXNoaW5n
IGZvbnRzJykKLSAgICAgICAgICAgIHBhdGhfdG9fYWhlbV9mb250ID0gc2VsZi5fYnVpbGRfcGF0
aCgnQUhFTV9fX18uVFRGJykKKyAgICAgICAgICAgIHBhdGhfdG9fYWhlbV9mb250ID0gc2VsZi5f
cG9ydC5fYnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykKICAgICAgICAgICAgIHNlbGYuX3B1c2hf
dG9fZGV2aWNlKHBhdGhfdG9fYWhlbV9mb250LCBERVZJQ0VfRk9OVFNfRElSICsgJ0FIRU1fX19f
LlRURicpCiAgICAgICAgICAgICBmb3IgKGhvc3RfZGlyLCBmb250X2ZpbGUpIGluIEhPU1RfRk9O
VF9GSUxFUzoKICAgICAgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShob3N0X2RpciAr
IGZvbnRfZmlsZSwgREVWSUNFX0ZPTlRTX0RJUiArIGZvbnRfZmlsZSkKQEAgLTM2NywxNCArMzgw
LDE0IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToK
ICAgICBkZWYgX3B1c2hfdGVzdF9yZXNvdXJjZXMoc2VsZik6CiAgICAgICAgIF9sb2cuZGVidWco
J1B1c2hpbmcgdGVzdCByZXNvdXJjZXMnKQogICAgICAgICBmb3IgcmVzb3VyY2UgaW4gVEVTVF9S
RVNPVVJDRVNfVE9fUFVTSDoKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYu
bGF5b3V0X3Rlc3RzX2RpcigpICsgJy8nICsgcmVzb3VyY2UsIERFVklDRV9MQVlPVVRfVEVTVFNf
RElSICsgcmVzb3VyY2UpCisgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9w
b3J0LmxheW91dF90ZXN0c19kaXIoKSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RF
U1RTX0RJUiArIHJlc291cmNlKQogCiAgICAgZGVmIF9zeW5jaHJvbml6ZV9kYXRldGltZShzZWxm
KToKICAgICAgICAgIyBUaGUgZGF0ZS90aW1lIGJldHdlZW4gaG9zdCBhbmQgZGV2aWNlIG1heSBu
b3QgYmUgc3luY2hyb25pemVkLgogICAgICAgICAjIFdlIG5lZWQgdG8gbWFrZSB0aGVtIHN5bmNo
cm9uaXplZCwgb3RoZXJ3aXNlIHRlc3RzIG1pZ2h0IGZhaWwuCiAgICAgICAgIHRyeToKICAgICAg
ICAgICAgICMgR2V0IHNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMCBVVEMuCi0gICAg
ICAgICAgICBob3N0X2RhdGV0aW1lID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnZGF0
ZScsICctdScsICcrJXMnXSkKKyAgICAgICAgICAgIGhvc3RfZGF0ZXRpbWUgPSBzZWxmLl9wb3J0
Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoWydkYXRlJywgJy11JywgJyslcyddKQogICAgICAgICBl
eGNlcHQ6CiAgICAgICAgICAgICAjIFJlc2V0IHRvIDE5NzAtMDEtMDEgMDA6MDA6MDAgVVRDLgog
ICAgICAgICAgICAgaG9zdF9kYXRldGltZSA9IDAKQEAgLTM5NCwxMCArNDA3LDEwIEBAIGNsYXNz
IENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgX3J1
bl9hZGJfY29tbWFuZChzZWxmLCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSk6CiAgICAgICAgIF9s
b2cuZGVidWcoJ1J1biBhZGIgY29tbWFuZDogJyArIHN0cihjbWQpKQogICAgICAgICBpZiBpZ25v
cmVfZXJyb3I6Ci0gICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gc2VsZi5fZXhlY3V0aXZlLmln
bm9yZV9lcnJvcgorICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IHNlbGYuX3BvcnQuX2V4ZWN1
dGl2ZS5pZ25vcmVfZXJyb3IKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGVycm9yX2hhbmRs
ZXIgPSBOb25lCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChz
ZWxmLl9hZGJfY29tbWFuZCArIGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQorICAg
ICAgICByZXN1bHQgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRi
X2NvbW1hbmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKICAgICAgICAgIyBM
aW1pdCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBjb21tYW5kcyBs
aWtlICdhZGIgbG9nY2F0JyBhbmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZTAxJwog
ICAgICAgICAjIHdob3NlIG91dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9n
cy4KICAgICAgICAgX2xvZy5kZWJ1ZygnUnVuIGFkYiByZXN1bHQ6ICcgKyByZXN1bHRbOjgwXSkK
QEAgLTQ1MywyNyArNDY2LDI1IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0u
Q2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2VjaG8nLCBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vciwgU0NBTElOR19HT1ZFUk5PUl0pCiAg
ICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yID0gTm9uZQogCi0KLWNsYXNzIENocm9taXVt
QW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2UpOgotICAgICAg
ICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIHdvcmtl
cl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQotICAgICAgICBzZWxmLl9waXhlbF90
ZXN0cyA9IHBpeGVsX3Rlc3RzCi0gICAgICAgIHNlbGYuX2luX2ZpZm9fcGF0aCA9IERSVF9BUFBf
RklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmluJwotICAgICAgICBzZWxmLl9vdXRfZmlmb19w
YXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUub3V0JwotICAgICAgICBz
ZWxmLl9lcnJfZmlmb19wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUu
ZXJyJwotICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzID0gTm9uZQotICAgICAgICBz
ZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQotCiAgICAgZGVmIF9jb21tYW5kX3dyYXBw
ZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6CiAgICAgICAgICMgSWdub3JlIGNvbW1hbmQgd3JhcHBl
ciB3aGljaCBpcyBub3QgYXBwbGljYWJsZSBvbiBBbmRyb2lkLgogICAgICAgICByZXR1cm4gW10K
IAorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhh
bik6CisgICAgICAgIGlmIG5vdCBzdGRvdXQ6CisgICAgICAgICAgICBzdGRvdXQgPSAnJworICAg
ICAgICBzdGRvdXQgKz0gJyoqKioqKioqKiBMb2djYXQ6XG4nICsgc2VsZi5fZ2V0X2xvZ2NhdCgp
CisgICAgICAgIGlmIG5vdCBzdGRlcnI6CisgICAgICAgICAgICBzdGRlcnIgPSAnJworICAgICAg
ICBzdGRlcnIgKz0gJyoqKioqKioqKiBUb21ic3RvbmUgZmlsZTpcbicgKyBzZWxmLl9nZXRfbGFz
dF9zdGFja3RyYWNlKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZl
ciwgc2VsZikuX2dldF9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisKICAg
ICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAg
ICByZXR1cm4gc2VsZi5fcG9ydC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJ10KKyAgICAgICAgcmV0
dXJuIHNlbGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCddCiAKICAgICBkZWYgX2ZpbGVfZXhpc3Rz
X29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CiAgICAgICAgIGFzc2VydCBmdWxsX2Zp
bGVfcGF0aC5zdGFydHN3aXRoKCcvJykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1
bGxfZmlsZV9wYXRoCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAogCiAg
ICAgZGVmIF9kcnRfY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgog
ICAgICAgICByZXR1cm4gZHJpdmVyLkRyaXZlci5jbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncykgKyBbCkBAIC00OTYsNyArNTA3LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRy
b2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhp
c3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKIAogICAgIGRlZiBfcmVtb3ZlX2Fs
bF9waXBlcyhzZWxmKToKLSAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAncm0nLCBzZWxmLl9pbl9maWZvX3BhdGgsIHNlbGYuX291dF9maWZvX3BhdGgsIHNlbGYu
X2Vycl9maWZvX3BhdGhdKQorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdybScsIHNlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJy
X2ZpZm9fcGF0aF0pCiAgICAgICAgIHJldHVybiAobm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2Rl
dmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAogICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9m
aWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCiAgICAgICAgICAg
ICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRo
KSkKQEAgLTUxMCwxMCArNTIxLDEyIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2
ZXIuRHJpdmVyKToKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5z
dGFydChwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKIAogICAgIGRlZiBfc3RhcnQoc2VsZiwg
cGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAgICAgICBzZWxmLl9zZXR1cF90ZXN0KCkK
KwogICAgICAgICBmb3IgcmV0cmllcyBpbiByYW5nZSgzKToKICAgICAgICAgICAgIGlmIHNlbGYu
X3N0YXJ0X29uY2UocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICAgICAgICAg
IHJldHVybgotICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5k
ZXJUcmVlIGFwcGxpY2F0aW9uLiBSZXRyaWVzPSVkLiBMb2c6JXMnICUgKHJldHJpZXMsIHNlbGYu
X3BvcnQuX2dldF9sb2djYXQoKSkpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8g
c3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIFJldHJpZXM9JWQuIExvZzolcycgJSAo
cmV0cmllcywgc2VsZi5fZ2V0X2xvZ2NhdCgpKSkKICAgICAgICAgICAgIHNlbGYuc3RvcCgpCiAg
ICAgICAgICAgICB0aW1lLnNsZWVwKDIpCiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdG
YWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24gbXVsdGlwbGUgdGltZXMu
IEdpdmUgdXAuJykKQEAgLTUyMSw5ICs1MzQsOSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgZGVmIF9zdGFydF9vbmNlKHNlbGYsIHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBz
ZWxmKS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCiAKLSAgICAgICAgc2VsZi5f
cG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1jJ10pCi0gICAgICAgIHNlbGYuX3Bv
cnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuX2RydF9jbWRfbGlu
ZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBbJz4nLCBDT01NQU5EX0xJTkVfRklMRV0p
Ci0gICAgICAgIHN0YXJ0X3Jlc3VsdCA9IHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2FtJywgJ3N0YXJ0JywgJy1lJywgJ1J1bkluU3ViVGhyZWFkJywgJy1uJywgRFJUX0FD
VElWSVRZX0ZVTExfTkFNRV0pCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2Nh
dCcsICctYyddKQorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hv
J10gKyBzZWxmLl9kcnRfY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyc+
JywgQ09NTUFORF9MSU5FX0ZJTEVdKQorICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdSdW5JblN1YlRocmVh
ZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQogICAgICAgICBpZiBzdGFydF9yZXN1
bHQuZmluZCgnRXhjZXB0aW9uJykgIT0gLTE6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWls
ZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIEV4Y2VwdGlvbjpcbicgKyBz
dGFydF9yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTU0MCwxMyArNTUzLDEz
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAg
IyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9tIHRoZSBzdGRvdXQgZmlmbyBvZiB0aGUgRHVt
cFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBzdGRvdXQuCiAgICAgICAgIF9sb2cuZGVidWco
J1JlZGlyZWN0aW5nIHN0ZG91dCB0byAnICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCkKICAgICAgICAg
c2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3Mo
Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVhZFN0ZG91dCcsIHNlbGYuX3BvcnQuX2FkYl9j
b21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9vdXRfZmlmb19wYXRoXSwgdW5pdmVyc2Fs
X25ld2xpbmVzPVRydWUpCisgICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVhZFN0ZG91dCcsIHNl
bGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9vdXRfZmlmb19wYXRoXSwg
dW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCiAgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nl
c3Muc3RhcnQoKQogCiAgICAgICAgICMgU3RhcnQgYSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUg
c3RkZXJyIGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0
LgogICAgICAgICBfbG9nLmRlYnVnKCdSZWRpcmVjdGluZyBzdGRlcnIgdG8gJyArIHNlbGYuX2Vy
cl9maWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBzZXJ2ZXJf
cHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKAotICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRl
cnInLCBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJy
X2ZpZm9fcGF0aF0sIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICAgICAgICAgICAgc2VsZi5f
cG9ydCwgJ1JlYWRTdGRlcnInLCBzZWxmLl9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCAnY2F0Jywg
c2VsZi5fZXJyX2ZpZm9fcGF0aF0sIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQogICAgICAgICBz
ZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLnN0YXJ0KCkKIAogICAgICAgICBfbG9nLmRlYnVnKCdS
ZWRpcmVjdGluZyBzdGRpbiB0byAnICsgc2VsZi5faW5fZmlmb19wYXRoKQpAQCAtNTg3LDcgKzYw
MCw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAg
ICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgc2VsZi5f
cG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9B
UFBfUEFDS0FHRV0pCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2Ft
JywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQogCiAgICAgICAgIGlmIHNlbGYuX3Jl
YWRfc3Rkb3V0X3Byb2Nlc3M6CiAgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNz
LmtpbGwoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CmluZGV4IDY1
YjZhMmQ3YjAyOTQ3NTRlNTdiMDYwNGI5ZThiMTUyOGNhNDkzYmQuLjhmMmFlODJjZDAyNTlkNDdj
Mzc2NTY4ZDAxMDBjZWM5MGYwNjk2OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRf
dW5pdHRlc3QucHkKQEAgLTQxLDEwICs0MSw3OSBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IGRyaXZlcl91bml0dGVzdAogCiAKK2NsYXNzIE1vY2tSdW5Db21tYW5kKG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2xvZ2NhdCA9ICcnCisg
ICAgICAgIHNlbGYuX21vY2tfZGV2aWNlc19vdXRwdXQgPSAnJworICAgICAgICBzZWxmLl9tb2Nr
X2RldmljZXMgPSBbXQorICAgICAgICBzZWxmLl9tb2NrX2xzX3RvbWJzdG9uZXMgPSAnJworCisg
ICAgZGVmIG1vY2tfcnVuX2NvbW1hbmRfZm4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIGFyZ3Nb
MF0gIT0gJ2FkYic6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgaWYgYXJnc1sxXSA9
PSAnZGV2aWNlcyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbW9ja19kZXZpY2VzX291dHB1
dAorCisgICAgICAgIGFzc2VydCBsZW4oYXJncykgPiAzCisgICAgICAgIGFzc2VydCBhcmdzWzFd
ID09ICctcycKKyAgICAgICAgYXNzZXJ0IGFyZ3NbMl0gaW4gc2VsZi5fbW9ja19kZXZpY2VzCisg
ICAgICAgIGlmIGFyZ3NbM10gPT0gJ3NoZWxsJzoKKyAgICAgICAgICAgIGlmIGFyZ3NbNDpdID09
IFsnbHMnLCAnLW4nLCAnL2RhdGEvdG9tYnN0b25lcyddOgorICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLl9tb2NrX2xzX3RvbWJzdG9uZXMKKyAgICAgICAgICAgIGVsaWYgYXJnc1s0XSA9PSAn
Y2F0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1s1XSArICdcbm1vY2tfY29udGVudHNc
bicKKyAgICAgICAgZWxpZiBhcmdzWzNdID09ICdsb2djYXQnOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX21vY2tfbG9nY2F0CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIG1vY2tfbm9f
ZGV2aWNlKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2RldmljZXMgPSBbXQorICAgICAgICBz
ZWxmLl9tb2NrX2RldmljZXNfb3V0cHV0ID0gJ0xpc3Qgb2YgZGV2aWNlcyBhdHRhY2hlZCcKKwor
ICAgIGRlZiBtb2NrX29uZV9kZXZpY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX21vY2tfZGV2aWNl
cyA9IFsnMTIzNDU2Nzg5QUJDREVGMCddCisgICAgICAgIHNlbGYuX21vY2tfZGV2aWNlc19vdXRw
dXQgPSAoJ0xpc3Qgb2YgZGV2aWNlcyBhdHRhY2hlZFxuJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICclc1x0ZGV2aWNlXG4nICUgc2VsZi5fbW9ja19kZXZpY2VzWzBdKQor
CisgICAgZGVmIG1vY2tfdHdvX2RldmljZXMoc2VsZik6CisgICAgICAgIHNlbGYuX21vY2tfZGV2
aWNlcyA9IFsnMTIzNDU2Nzg5QUJDREVGMCcsICcyMzQ1Njc4OUFCQ0RFRjAxJ10KKyAgICAgICAg
c2VsZi5fbW9ja19kZXZpY2VzX291dHB1dCA9ICgnKiBkYWVtb24gbm90IHJ1bm5pbmcuIHN0YXJ0
aW5nIGl0IG5vdyBvbiBwb3J0IDUwMzcgKicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnKiBkYWVtb24gc3RhcnRlZCBzdWNjZXNzZnVsbHkgKicKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnTGlzdCBvZiBkZXZpY2VzIGF0dGFjaGVkXG4nCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzXHRkZXZpY2VcbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXNcdGRldmljZVxuJyAlIChzZWxmLl9tb2Nr
X2RldmljZXNbMF0sIHNlbGYuX21vY2tfZGV2aWNlc1sxXSkpCisKKyAgICBkZWYgbW9ja19ub190
b21ic3RvbmVfZGlyKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2xzX3RvbWJzdG9uZXMgPSAn
L2RhdGEvdG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScKKworICAgIGRlZiBt
b2NrX25vX3RvbWJzdG9uZV9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2xzX3RvbWJz
dG9uZXMgPSAnJworCisgICAgZGVmIG1vY2tfdGVuX3RvbWJzdG9uZXMoc2VsZik6CisgICAgICAg
IHNlbGYuX21vY2tfbHNfdG9tYnN0b25lcyA9ICgnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAg
ICAgIDIxODY0MyAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wMFxuJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAy
NDE2OTUgMjAxMi0wNC0yNiAxODoxNSB0b21ic3RvbmVfMDFcbicKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjE5NDcy
IDIwMTItMDQtMjYgMTg6MTYgdG9tYnN0b25lXzAyXG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAgICA0NTMxNiAyMDEy
LTA0LTI3IDE2OjMzIHRvbWJzdG9uZV8wM1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAgODIwMjIgMjAxMi0wNC0y
MyAxNjo1NyB0b21ic3RvbmVfMDRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgIDgyMDE1IDIwMTItMDQtMjMgMTY6
NTcgdG9tYnN0b25lXzA1XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
LXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAgICA4MTk3NCAyMDEyLTA0LTIzIDE2OjU4IHRv
bWJzdG9uZV8wNlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0t
LS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyMzc0MDkgMjAxMi0wNC0yNiAxNzo0MSB0b21ic3Rv
bmVfMDdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcnctLS0tLS0t
IDEwMDAgICAgIDEwMDAgICAgICAgMjc2MDg5IDIwMTItMDQtMjYgMTg6MTUgdG9tYnN0b25lXzA4
XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAw
ICAgICAxMDAwICAgICAgIDIxOTYxOCAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wOVxuJykK
KworICAgIGRlZiBtb2NrX2xvZ2NhdChzZWxmLCBjb250ZW50KToKKyAgICAgICAgc2VsZi5fbW9j
a19sb2djYXQgPSBjb250ZW50CisKKwogY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QoY2hy
b21pdW1fcG9ydF90ZXN0Y2FzZS5DaHJvbWl1bVBvcnRUZXN0Q2FzZSk6CiAgICAgcG9ydF9uYW1l
ID0gJ2Nocm9taXVtLWFuZHJvaWQnCiAgICAgcG9ydF9tYWtlciA9IGNocm9taXVtX2FuZHJvaWQu
Q2hyb21pdW1BbmRyb2lkUG9ydAotICAgIG1vY2tfbG9nY2F0ID0gJycKKworICAgIGRlZiBtYWtl
X3BvcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0gc3VwZXIoQ2hyb21pdW1BbmRy
b2lkUG9ydFRlc3QsIHNlbGYpLm1ha2VfcG9ydCgqKmt3YXJncykKKyAgICAgICAgc2VsZi5tb2Nr
X3J1bl9jb21tYW5kID0gTW9ja1J1bkNvbW1hbmQoKQorICAgICAgICBwb3J0Ll9leGVjdXRpdmUg
PSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj1zZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9j
a19ydW5fY29tbWFuZF9mbikKKyAgICAgICAgcmV0dXJuIHBvcnQKIAogICAgIGRlZiB0ZXN0X2F0
dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCkBAIC01OSw1
MSArMTI4LDczIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNocm9taXVtX3BvcnRf
dGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2UpOgogICAgICAgICAjIHVzaW5nIGEgY3VzdG9t
IGV4cGVjdGF0aW9ucyBmaWxlLgogICAgICAgICBwYXNzCiAKLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIG1vY2tfcnVuX2NvbW1hbmRfZm4oYXJncyk6Ci0gICAgICAgIGlmIGFyZ3NbMV0gPT0g
J3NoZWxsJzoKLSAgICAgICAgICAgIGlmIGFyZ3NbMjpdID09IFsnbHMnLCAnLW4nLCAnL2RhdGEv
dG9tYnN0b25lcyddOgotICAgICAgICAgICAgICAgICMgRm9yICdhZGIgc2hlbGwgbHMgLW4gL2Rh
dGEvdG9tYnN0b25lcycKLSAgICAgICAgICAgICAgICByZXR1cm4gKCctcnctLS0tLS0tIDEwMDAg
ICAgIDEwMDAgICAgICAgMjE4NjQzIDIwMTItMDQtMjYgMTg6MTUgdG9tYnN0b25lXzAwXG4nCi0g
ICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAgIDI0
MTY5NSAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wMVxuJwotICAgICAgICAgICAgICAgICAg
ICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyMTk0NzIgMjAxMi0wNC0yNiAx
ODoxNiB0b21ic3RvbmVfMDJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICctcnctLS0tLS0t
IDEwMDAgICAgIDEwMDAgICAgICAgIDQ1MzE2IDIwMTItMDQtMjcgMTY6MzMgdG9tYnN0b25lXzAz
XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAg
ICAgICA4MjAyMiAyMDEyLTA0LTIzIDE2OjU3IHRvbWJzdG9uZV8wNFxuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAgODIwMTUgMjAxMi0w
NC0yMyAxNjo1NyB0b21ic3RvbmVfMDVcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICctcnct
LS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgIDgxOTc0IDIwMTItMDQtMjMgMTY6NTggdG9tYnN0
b25lXzA2XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAx
MDAwICAgICAgIDIzNzQwOSAyMDEyLTA0LTI2IDE3OjQxIHRvbWJzdG9uZV8wN1xuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyNzYwODkg
MjAxMi0wNC0yNiAxODoxNSB0b21ic3RvbmVfMDhcbicKLSAgICAgICAgICAgICAgICAgICAgICAg
ICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjE5NjE4IDIwMTItMDQtMjYgMTg6MTUg
dG9tYnN0b25lXzA5XG4nKQotICAgICAgICAgICAgZWxpZiBhcmdzWzJdID09ICdjYXQnOgotICAg
ICAgICAgICAgICAgIHJldHVybiBhcmdzWzNdICsgJ1xubW9ja19jb250ZW50c1xuJwotICAgICAg
ICBlbGlmIGFyZ3NbMV0gPT0gJ2xvZ2NhdCc6Ci0gICAgICAgICAgICByZXR1cm4gQ2hyb21pdW1B
bmRyb2lkUG9ydFRlc3QubW9ja19sb2djYXQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJl
dHVybiAnJworICAgIGRlZiB0ZXN0X2RyaXZlcl9jbWRfbGluZShzZWxmKToKKyAgICAgICAgIyBP
dmVycmlkaW5nIFBvcnRUZXN0Q2FzZS50ZXN0X2NtZF9saW5lKCkuIFVzZSBDaHJvbWl1bUFuZHJv
aWREcml2ZXJUZXN0LnRlc3RfY21kX2xpbmUoKSBpbnN0ZWFkLgorICAgICAgICByZXR1cm4KIAot
ICAgIGRlZiB0ZXN0X2dldF9sYXN0X3N0YWNrdHJhY2Uoc2VsZik6CisgICAgZGVmIHRlc3RfZ2V0
X2RldmljZXNfbm9fZGV2aWNlKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQorICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19ub19kZXZpY2UoKQorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9ydC5fZ2V0X2RldmljZXMpCiAK
LSAgICAgICAgZGVmIG1vY2tfcnVuX2NvbW1hbmRfbm9fZGlyKGFyZ3MpOgotICAgICAgICAgICAg
cmV0dXJuICcvZGF0YS90b21ic3RvbmVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JwotICAg
ICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj1tb2Nr
X3J1bl9jb21tYW5kX25vX2RpcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG9ydC5fZ2V0
X2xhc3Rfc3RhY2t0cmFjZSgpLCAnJykKKyAgICBkZWYgdGVzdF9nZXRfZGV2aWNlc19vbmVfZGV2
aWNlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxm
Lm1vY2tfcnVuX2NvbW1hbmQubW9ja19vbmVfZGV2aWNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi5tb2NrX3J1bl9jb21tYW5kLl9tb2NrX2RldmljZXMsIHBvcnQuX2dldF9kZXZp
Y2VzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIHBvcnQuZGVmYXVsdF9jaGlsZF9w
cm9jZXNzZXMoKSkKIAotICAgICAgICBkZWYgbW9ja19ydW5fY29tbWFuZF9ub19maWxlKGFyZ3Mp
OgotICAgICAgICAgICAgcmV0dXJuICcnCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tF
eGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPW1vY2tfcnVuX2NvbW1hbmRfbm9fZmlsZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMocG9ydC5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSgpLCAnJykKKyAg
ICBkZWYgdGVzdF9nZXRfZGV2aWNlc190d29fZGV2aWNlcyhzZWxmKToKKyAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfdHdv
X2RldmljZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm1vY2tfcnVuX2NvbW1h
bmQuX21vY2tfZGV2aWNlcywgcG9ydC5fZ2V0X2RldmljZXMoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoMiwgcG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKQorCisgICAgZGVmIHRl
c3RfZ2V0X2RldmljZV9zZXJpYWxfbm9fZGV2aWNlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2Vs
Zi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19ub19kZXZp
Y2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9ydC5fZ2V0
X2RldmljZV9zZXJpYWwsIDApCisKKyAgICBkZWYgdGVzdF9nZXRfZGV2aWNlX3NlcmlhbF9vbmVf
ZGV2aWNlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBz
ZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19vbmVfZGV2aWNlKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoc2VsZi5tb2NrX3J1bl9jb21tYW5kLl9tb2NrX2RldmljZXNbMF0sIHBvcnQuX2dl
dF9kZXZpY2Vfc2VyaWFsKDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25F
cnJvciwgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwsIDEpCisKKyAgICBkZWYgdGVzdF9nZXRfZGV2
aWNlX3NlcmlhbF90d29fZGV2aWNlcyhzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KCkKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfdHdvX2RldmljZXMoKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm1vY2tfcnVuX2NvbW1hbmQuX21vY2tfZGV2
aWNlc1swXSwgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlbGYubW9ja19ydW5fY29tbWFuZC5fbW9ja19kZXZpY2VzWzFdLCBwb3J0Ll9nZXRf
ZGV2aWNlX3NlcmlhbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJy
b3IsIHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsLCAyKQorCisKK2NsYXNzIENocm9taXVtQW5kcm9p
ZERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAg
ICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kID0gTW9ja1J1bkNvbW1hbmQoKQorICAgICAgICBz
ZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19vbmVfZGV2aWNlKCkKKyAgICAgICAgc2VsZi5wb3J0
ID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWRQb3J0KAorICAgICAgICAgICAgICAg
IE1vY2tTeXN0ZW1Ib3N0KGV4ZWN1dGl2ZT1Nb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj1z
ZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19ydW5fY29tbWFuZF9mbikpLAorICAgICAgICAgICAg
ICAgICdjaHJvbWl1bS1hbmRyb2lkJykKKyAgICAgICAgc2VsZi5kcml2ZXIgPSBjaHJvbWl1bV9h
bmRyb2lkLkNocm9taXVtQW5kcm9pZERyaXZlcihzZWxmLnBvcnQsIHdvcmtlcl9udW1iZXI9MCwg
cGl4ZWxfdGVzdHM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2dldF9sYXN0X3N0YWNrdHJhY2Uoc2Vs
Zik6CisgICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX25vX3RvbWJzdG9uZV9kaXIo
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fZ2V0X2xhc3Rfc3RhY2t0
cmFjZSgpLCAnJykKIAotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihy
dW5fY29tbWFuZF9mbj1DaHJvbWl1bUFuZHJvaWRQb3J0VGVzdC5tb2NrX3J1bl9jb21tYW5kX2Zu
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3J0Ll9nZXRfbGFzdF9zdGFja3RyYWNlKCks
CisgICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX25vX3RvbWJzdG9uZV9maWxlKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2dldF9sYXN0X3N0YWNrdHJh
Y2UoKSwgJycpCisKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfdGVuX3RvbWJz
dG9uZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fZ2V0X2xhc3Rf
c3RhY2t0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAw
IDEwMDAgNDUzMTYgMjAxMi0wNC0yNyAxNjozMyB0b21ic3RvbmVfMDNcbicKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJy9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lXzAzXG5tb2NrX2NvbnRl
bnRzXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1
dGl2ZTIocnVuX2NvbW1hbmRfZm49Q2hyb21pdW1BbmRyb2lkUG9ydFRlc3QubW9ja19ydW5fY29t
bWFuZF9mbikKLSAgICAgICAgQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QubW9ja19sb2djYXQgPSAn
bG9nY2F0IGNvbnRlbnRzXG4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuX2dldF9j
cmFzaF9sb2coJ2ZvbycsIDEyMzQsICdvdXQgYmFyXG5vdXQgYmF6XG4nLCAnZXJyIGJhclxuZXJy
IGJhelxuJywgbmV3ZXJfdGhhbj1Ob25lKSwKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5k
Lm1vY2tfbG9nY2F0KCdsb2djYXQgY29udGVudHNcbicpCisgICAgICAgIHNlbGYubW9ja19ydW5f
Y29tbWFuZC5tb2NrX3Rlbl90b21ic3RvbmVzKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuX2NyYXNo
ZWRfcHJvY2Vzc19uYW1lID0gJ2ZvbycKKyAgICAgICAgc2VsZi5kcml2ZXIuX2NyYXNoZWRfcGlk
ID0gMTIzNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fZ2V0X2NyYXNo
X2xvZygnb3V0IGJhclxub3V0IGJhelxuJywgJ2VyciBiYXJcbmVyciBiYXpcbicsIG5ld2VyX3Ro
YW49Tm9uZSksCiAgICAgICAgICAgICAoJ2VyciBiYXJcbicKICAgICAgICAgICAgICAnZXJyIGJh
elxuJwogICAgICAgICAgICAgICcqKioqKioqKiogVG9tYnN0b25lIGZpbGU6XG4nCkBAIC0xMjEs
NyArMjEyLDEwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNocm9taXVtX3BvcnRf
dGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2UpOgogICAgICAgICAgICAgIHUnU1RERVJSOiAt
cnctLS0tLS0tIDEwMDAgMTAwMCA0NTMxNiAyMDEyLTA0LTI3IDE2OjMzIHRvbWJzdG9uZV8wM1xu
JwogICAgICAgICAgICAgIHUnU1RERVJSOiAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZV8wM1xu
JwogICAgICAgICAgICAgIHUnU1RERVJSOiBtb2NrX2NvbnRlbnRzXG4nKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMocG9ydC5fZ2V0X2NyYXNoX2xvZyhOb25lLCBOb25lLCBOb25lLCBOb25l
LCBuZXdlcl90aGFuPU5vbmUpLAorCisgICAgICAgIHNlbGYuZHJpdmVyLl9jcmFzaGVkX3Byb2Nl
c3NfbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5kcml2ZXIuX2NyYXNoZWRfcGlkID0gTm9uZQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fZ2V0X2NyYXNoX2xvZyhOb25l
LCBOb25lLCBuZXdlcl90aGFuPU5vbmUpLAogICAgICAgICAgICAgKCcqKioqKioqKiogVG9tYnN0
b25lIGZpbGU6XG4nCiAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAxMDAwIDQ1MzE2IDIw
MTItMDQtMjcgMTY6MzMgdG9tYnN0b25lXzAzXG4nCiAgICAgICAgICAgICAgJy9kYXRhL3RvbWJz
dG9uZXMvdG9tYnN0b25lXzAzXG4nCkBAIC0xMzQsMTkgKzIyOCw5IEBAIGNsYXNzIENocm9taXVt
QW5kcm9pZFBvcnRUZXN0KGNocm9taXVtX3BvcnRfdGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENh
c2UpOgogICAgICAgICAgICAgIHUnU1RERVJSOiAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZV8w
M1xuJwogICAgICAgICAgICAgIHUnU1RERVJSOiBtb2NrX2NvbnRlbnRzXG4nKSkKIAotICAgIGRl
ZiB0ZXN0X2RyaXZlcl9jbWRfbGluZShzZWxmKToKLSAgICAgICAgIyBPdmVycmlkaW5nIFBvcnRU
ZXN0Q2FzZS50ZXN0X2NtZF9saW5lKCkuIFVzZSBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRl
c3RfY21kX2xpbmUoKSBpbnN0ZWFkLgotICAgICAgICByZXR1cm4KLQotCi1jbGFzcyBDaHJvbWl1
bUFuZHJvaWREcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2Vs
Zik6Ci0gICAgICAgIG1vY2tfcG9ydCA9IGNocm9taXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lk
UG9ydChNb2NrU3lzdGVtSG9zdCgpLCAnY2hyb21pdW0tYW5kcm9pZCcpCi0gICAgICAgIHNlbGYu
ZHJpdmVyID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWREcml2ZXIobW9ja19wb3J0
LCB3b3JrZXJfbnVtYmVyPTAsIHBpeGVsX3Rlc3RzPVRydWUpCi0KICAgICBkZWYgdGVzdF9jbWRf
bGluZShzZWxmKToKICAgICAgICAgY21kX2xpbmUgPSBzZWxmLmRyaXZlci5jbWRfbGluZShUcnVl
LCBbJ2FueXRoaW5nJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnYWRiJywgJ3NoZWxs
J10sIGNtZF9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2FkYicsICctcycsIHNl
bGYubW9ja19ydW5fY29tbWFuZC5fbW9ja19kZXZpY2VzWzBdLCAnc2hlbGwnXSwgY21kX2xpbmUp
CiAKICAgICBkZWYgdGVzdF9kcnRfY21kX2xpbmUoc2VsZik6CiAgICAgICAgIGNtZF9saW5lID0g
c2VsZi5kcml2ZXIuX2RydF9jbWRfbGluZShUcnVlLCBbJy0tYSddKQpAQCAtMTcxLDUgKzI1NSwy
MiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2
ZXJfaW5wdXQoZHJpdmVyX2lucHV0KSwgZXhwZWN0ZWRfY29tbWFuZCkKIAogCitjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHRlc3RfdHdvX2RyaXZlcnMoc2VsZik6CisgICAgICAgIG1vY2tfcnVuX2NvbW1hbmQgPSBN
b2NrUnVuQ29tbWFuZCgpCisgICAgICAgIG1vY2tfcnVuX2NvbW1hbmQubW9ja190d29fZGV2aWNl
cygpCisgICAgICAgIHBvcnQgPSBjaHJvbWl1bV9hbmRyb2lkLkNocm9taXVtQW5kcm9pZFBvcnQo
CisgICAgICAgICAgICAgICAgTW9ja1N5c3RlbUhvc3QoZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUy
KHJ1bl9jb21tYW5kX2ZuPW1vY2tfcnVuX2NvbW1hbmQubW9ja19ydW5fY29tbWFuZF9mbikpLAor
ICAgICAgICAgICAgICAgICdjaHJvbWl1bS1hbmRyb2lkJykKKyAgICAgICAgZHJpdmVyMCA9IGNo
cm9taXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lkRHJpdmVyKHBvcnQsIHdvcmtlcl9udW1iZXI9
MCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKKyAgICAgICAgZHJpdmVyMSA9IGNocm9taXVtX2FuZHJvaWQu
Q2hyb21pdW1BbmRyb2lkRHJpdmVyKHBvcnQsIHdvcmtlcl9udW1iZXI9MSwgcGl4ZWxfdGVzdHM9
VHJ1ZSkKKworICAgICAgICBjbWRfbGluZTAgPSBkcml2ZXIwLmNtZF9saW5lKFRydWUsIFsnYW55
dGhpbmcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydhZGInLCAnLXMnLCBtb2NrX3J1
bl9jb21tYW5kLl9tb2NrX2RldmljZXNbMF0sICdzaGVsbCddLCBjbWRfbGluZTApCisKKyAgICAg
ICAgY21kX2xpbmUxID0gZHJpdmVyMS5jbWRfbGluZShUcnVlLCBbJ2FueXRoaW5nJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnYWRiJywgJy1zJywgbW9ja19ydW5fY29tbWFuZC5fbW9j
a19kZXZpY2VzWzFdLCAnc2hlbGwnXSwgY21kX2xpbmUxKQorCisKIGlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4IDc4MTgyM2I4ZDY3MGE2ZWI4
ZTUyZTA3NjhiZTY2NGIxMWQ2MzAzM2MuLjc1NzU0NWYwMjhjY2UyZTU1YjE3MDg0OWQ4MjgwNzEy
MTgzNjdiOWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5CkBAIC0xNjYsOCArMTY2LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6
CiAKICAgICAgICAgY3Jhc2hfbG9nID0gTm9uZQogICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVk
KCk6Ci0gICAgICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCwgY3Jhc2hfbG9nID0gc2VsZi5f
cG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSwKLSAgICAgICAg
ICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCwgdGV4dCwgc2VsZi5lcnJvcl9mcm9tX3Rlc3QsIG5l
d2VyX3RoYW49c3RhcnRfdGltZSkKKyAgICAgICAgICAgIHNlbGYuZXJyb3JfZnJvbV90ZXN0LCBj
cmFzaF9sb2cgPSBzZWxmLl9nZXRfY3Jhc2hfbG9nKHRleHQsIHNlbGYuZXJyb3JfZnJvbV90ZXN0
LCBuZXdlcl90aGFuPXN0YXJ0X3RpbWUpCiAKICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgZmlu
ZCBhIGNyYXNoIGxvZyB1c2UgYSBwbGFjZWhvbGRlciBlcnJvciBtZXNzYWdlIGluc3RlYWQuCiAg
ICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgpAQCAtMTg4LDYgKzE4Nyw5IEBAIGNsYXNzIERy
aXZlcihvYmplY3QpOgogICAgICAgICAgICAgY3Jhc2hlZF9wcm9jZXNzX25hbWU9c2VsZi5fY3Jh
c2hlZF9wcm9jZXNzX25hbWUsCiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1zZWxmLl9jcmFzaGVk
X3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZykKIAorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxm
LCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0
Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVk
X3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisKICAgICAjIEZJWE1FOiBTZWVtcyB0
aGlzIGNvdWxkIGp1c3QgYmUgaW5saW5lZCBpbnRvIGNhbGxlcnMuCiAgICAgQGNsYXNzbWV0aG9k
CiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
cy5weQppbmRleCA5ZGFmZTFkOTM4ZTExNzBlOThlN2IxYTZiODQxNDNmYTJkNWFhMDNkLi4wZjRk
MzIxNDhhMmRlMDc5YTA5NTE1NWIwOWQ5NmM3MmFkZTU3NzMzIDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAg
LTI0Niw4ICsyNDYsNiBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbigiLS1wZXItdGlsZS1wYWludGluZyIsCiAgICAgICAgICAgICBhY3Rp
b249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgaGVscD0iVXNlIHBlci10aWxlIHBhaW50aW5n
IG9mIGNvbXBvc2l0ZWQgcGFnZXMiKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
YWRiLWFyZ3MiLCB0eXBlPSJzdHJpbmciLAotICAgICAgICAgICAgaGVscD0iQXJndW1lbnRzIHBh
cnNlZCB0byBBbmRyb2lkIGFkYiwgdG8gc2VsZWN0IGRldmljZSwgZXRjLiIpLAogICAgIF0pKQog
CiAgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoIkVGTC1zcGVjaWZpYyBPcHRp
b25zIiwgWwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155892</attachid>
            <date>2012-08-01 14:56:37 -0700</date>
            <delta_ts>2012-08-02 10:28:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92877-20120801145619.patch</filename>
            <type>text/plain</type>
            <size>36969</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzM4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWRlZjc4YTM1NjJjYjkxOTU5MWMzNzdjMWNhYzUzNTdj
YmQ5YzI0My4uYTE1YjU2ZTE5YjZlYjUwOTk0NGQwODlhMWE3NTE0ODNiYTM2ZTk4MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcx
IEBACisyMDEyLTA4LTAxICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBsYXlvdXQgdGVzdHMgb24gbXVsdGlw
bGUgZGV2aWNlcyBpbiBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI4NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlZCBtZXRob2RzIHRoYXQgcnVuIGNvbW1hbmQgb24gYSBwYXJ0aWN1
bGFyIGRldmljZSBmcm9tIENocm9taXVtQW5kcm9pZFBvcnQgdG8gQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLgorICAgICAgICBUaGUgZHJpdmVycyBydW4gYWRiIGNvbW1hbmRzIHdpdGggdGhlICctcyBz
ZXJpYWxfbnVtYmVyJyBwYXJhbWV0ZXIgd2hpY2ggc3BlY2lmaWVzIHRoZSBkZXZpY2UgYWNjb3Jk
aW5nIHRvIHRoZSB3b3JrX251bWJlci4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZFBvcnQuX19pbml0X18pOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5kZWZhdWx0
X2NoaWxkX3Byb2Nlc3Nlcyk6IERlZmF1bHQgdG8gdGhlIG51bWJlciBvZiBhdHRhY2hlZCBkZXZp
Y2VzLgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC50ZXN0X2V4cGVjdGF0aW9ucyk6IFJl
bW92ZWQgYmVjYXVzZSBpdCBpcyB1bnVzZWQuIAorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9y
dC5zZXR1cF90ZXN0X3J1bik6IE1vc3QgY29udGVudHMgbW92ZWQgaW50byBDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3NldHVwX3Rlc3QoKQorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5jbGVh
bl91cF90ZXN0X3J1bik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfZGV2aWNl
cyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lk
RHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2RlbF9f
KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc2V0dXBfdGVzdCk6IE9yaWdpbmFs
IGNvbnRlbnRzIG9mIENocm9taXVtQW5kcm9pZFBvcnQuc2V0dXBfdGVzdF9ydW4oKS4KKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9leGVjdXRhYmxlKTogTW92ZWQgZnJvbSBD
aHJvbWl1bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9wdXNo
X2ZvbnRzKTogTW92ZWQgZnJvbSBDaHJvbWl1bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9wdXNoX3Rlc3RfcmVzb3VyY2VzKTogTW92ZWQgZnJvbSBDaHJvbWl1
bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zeW5jaHJvbml6
ZV9kYXRldGltZSk6IE1vdmVkIGZyb20gQ2hyb21pdW1BbmRyb2lkUG9ydC4KKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fcnVuX2FkYl9jb21tYW5kKTogTW92ZWQgZnJvbSBDaHJvbWl1
bUFuZHJvaWRQb3J0LgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl90ZWFyZG93bl9w
ZXJmb3JtYW5jZSk6IE1vdmVkIGZyb20gQ2hyb21pdW1BbmRyb2lkUG9ydC4KKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gQ2hyb21pdW1B
bmRyb2lkUG9ydC4KKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5jbWRfbGluZSk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2ZpbGVfZXhpc3RzX29uX2RldmljZSk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3JlbW92ZV9hbGxfcGlwZXMpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3N0YXJ0X29uY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0
b3ApOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fYW5kcm9pZF91bml0dGVzdC5weToKKyAgICAgICAgKE1vY2tSdW5Db21tYW5kKToKKyAgICAg
ICAgKE1vY2tSdW5Db21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKE1vY2tSdW5Db21tYW5kLm1v
Y2tfcnVuX2NvbW1hbmRfZm4pOgorICAgICAgICAoTW9ja1J1bkNvbW1hbmQubW9ja19ub19kZXZp
Y2UpOgorICAgICAgICAoTW9ja1J1bkNvbW1hbmQubW9ja19vbmVfZGV2aWNlKToKKyAgICAgICAg
KE1vY2tSdW5Db21tYW5kLm1vY2tfdHdvX2RldmljZXMpOgorICAgICAgICAoTW9ja1J1bkNvbW1h
bmQubW9ja19ub190b21ic3RvbmVfZGlyKToKKyAgICAgICAgKE1vY2tSdW5Db21tYW5kLm1vY2tf
bm9fdG9tYnN0b25lX2ZpbGUpOgorICAgICAgICAoTW9ja1J1bkNvbW1hbmQubW9ja190ZW5fdG9t
YnN0b25lcyk6CisgICAgICAgIChNb2NrUnVuQ29tbWFuZC5tb2NrX2xvZ2NhdCk6CisgICAgICAg
IChDaHJvbWl1bUFuZHJvaWRQb3J0VGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0
VGVzdC5tYWtlX3BvcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QudGVzdF9k
cml2ZXJfY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QudGVzdF9n
ZXRfZGV2aWNlc19ub19kZXZpY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3Qu
dGVzdF9nZXRfZGV2aWNlc19vbmVfZGV2aWNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBv
cnRUZXN0LnRlc3RfZ2V0X2RldmljZXNfdHdvX2RldmljZXMpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkUG9ydFRlc3QudGVzdF9nZXRfZGV2aWNlX3NlcmlhbF9ub19kZXZpY2UpOgorICAgICAg
ICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QudGVzdF9nZXRfZGV2aWNlX3NlcmlhbF9vbmVfZGV2
aWNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnRUZXN0LnRlc3RfZ2V0X2RldmljZV9z
ZXJpYWxfdHdvX2RldmljZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdCk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnNldFVwKToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9nZXRfbGFzdF9zdGFja3RyYWNlKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9nZXRfY3Jhc2hfbG9nKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9jbWRfbGluZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFu
ZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdC50ZXN0X3R3b19kcml2ZXJzKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERy
aXZlci5ydW5fdGVzdCk6CisgICAgICAgIChEcml2ZXIuX2dldF9jcmFzaF9sb2cpOiBBZGRlZCB0
byBhbGxvdyBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgIChwYXJzZV9hcmdz
KTogUmVtb3ZlZCB0aGUgLS1hZGItYXJncyBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIGJlY2F1c2Ug
bm93IHdlIHNlbGVjdCBkZXZpY2UgYXV0b21hdGljYWxseS4gQWRkZWQgLS1hZGItZGV2aWNlIHRv
IHNwZWNpZnkgZGV2aWNlcy4KKwogMjAxMi0wOC0wMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2
aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEy
NDMyNS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW1fYW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQppbmRleCBmYTg1ZjEwZDU3YzRjZTk3NGU5NGEy
YmVhODkxMDFkMGFkOGQxYTQxLi4wYzgxYjE5YTc4MmYzMWRhZGJjOTMwNDRhZmMzZTM3YWFhY2Ux
MzkzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX2FuZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAKIGltcG9y
dCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBzaGxleAoraW1wb3J0IHJlCiBpbXBvcnQgdGhy
ZWFkaW5nCiBpbXBvcnQgdGltZQogCkBAIC0xNjcsMTUgKzE2NywxMyBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAKICAgICAgICAgc2VsZi5fb3Bl
cmF0aW5nX3N5c3RlbSA9ICdhbmRyb2lkJwogICAgICAgICBzZWxmLl92ZXJzaW9uID0gJ2ljZWNy
ZWFtc2FuZHdpY2gnCi0gICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yID0gTm9uZQotICAg
ICAgICBzZWxmLl9hbmRyb2lkX2Jhc2VfZGlyID0gTm9uZQogCiAgICAgICAgIHNlbGYuX2hvc3Rf
cG9ydCA9IGZhY3RvcnkuUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KCdjaHJvbWl1bScsICoqa3dhcmdz
KQogCi0gICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInXQotICAgICAgICBhZGJfYXJn
cyA9IHNlbGYuZ2V0X29wdGlvbignYWRiX2FyZ3MnKQotICAgICAgICBpZiBhZGJfYXJnczoKLSAg
ICAgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kICs9IHNobGV4LnNwbGl0KGFkYl9hcmdzKQorICAg
ICAgICBpZiBoYXNhdHRyKHNlbGYuX29wdGlvbnMsICdhZGJfZGV2aWNlJyk6CisgICAgICAgICAg
ICBzZWxmLl9kZXZpY2VzID0gc2VsZi5fb3B0aW9ucy5hZGJfZGV2aWNlCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLl9kZXZpY2VzID0gW10KIAogICAgIGRlZiBkZWZhdWx0X3RpbWVv
dXRfbXMoc2VsZik6CiAgICAgICAgICMgQW5kcm9pZCBwbGF0Zm9ybSBoYXMgbGVzcyBjb21wdXRp
bmcgcG93ZXIgdGhhbiBkZXNrdG9wIHBsYXRmb3Jtcy4KQEAgLTE4NCw4ICsxODIsNyBAQCBjbGFz
cyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIHJl
dHVybiAxMCAqIDEwMDAKIAogICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToK
LSAgICAgICAgIyBCZWNhdXNlIG9mIHRoZSBuYXR1cmUgb2YgYXBrLCB3ZSBkb24ndCBzdXBwb3J0
IG1vcmUgdGhhbiBvbmUgcHJvY2Vzcy4KLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJu
IGxlbihzZWxmLl9nZXRfZGV2aWNlcygpKQogCiAgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRo
KHNlbGYpOgogICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBz
ZWxmLkZBTExCQUNLX1BBVEhTKQpAQCAtMjE3LDE1ICsyMTQsNiBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIGFuZHJvaWRfZXhwZWN0
YXRpb25zX2ZpbGUgPSBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnLCAn
cGxhdGZvcm0nLCAnY2hyb21pdW0nLCAndGVzdF9leHBlY3RhdGlvbnNfYW5kcm9pZC50eHQnKQog
ICAgICAgICByZXR1cm4gc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuZXhwZWN0YXRp
b25zX2ZpbGVzKCkgKyBbYW5kcm9pZF9leHBlY3RhdGlvbnNfZmlsZV0KIAotICAgIGRlZiB0ZXN0
X2V4cGVjdGF0aW9ucyhzZWxmKToKLSAgICAgICAgIyBBdXRvbWF0aWNhbGx5IGFwcGx5IGFsbCBl
eHBlY3RhdGlvbiBydWxlcyBvZiBjaHJvbWl1bS1saW51eCB0bwotICAgICAgICAjIGNocm9taXVt
LWFuZHJvaWQuCi0gICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSB0
byByZWR1Y2UgdGhlIG1hbnVhbCB3b3JrIHdoZW4KLSAgICAgICAgIyB1cGRhdGluZyBXZWJLaXQu
IFRoaXMgbWV0aG9kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gd2UgbWVyZ2UKLSAgICAgICAgIyB0
ZXN0X2V4cGVjdGF0aW9uc19hbmRyb2lkLnR4dCBpbnRvIFRlc3RFeHBlY3RhdGlvbnMuCi0gICAg
ICAgIGV4cGVjdGF0aW9ucyA9IHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLnRlc3Rf
ZXhwZWN0YXRpb25zKCkKLSAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9ucy5yZXBsYWNlKCdMSU5V
WCAnLCAnTElOVVggQU5EUk9JRCAnKQotCiAgICAgZGVmIHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYs
IGFkZGl0aW9uYWxfZGlycz1Ob25lLCBudW1iZXJfb2Zfc2VydmVycz0wKToKICAgICAgICAgIyBU
aGUgaHR0cCBzZXJ2ZXIgcnVucyBkdXJpbmcgdGhlIHdob2xlIHRlc3RpbmcgcGVyaW9kLCBzbyBp
Z25vcmUgdGhpcyBjYWxsLgogICAgICAgICBwYXNzCkBAIC0yMzUsMzMgKzIyMywxMyBAQCBjbGFz
cyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIHBh
c3MKIAogICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKLSAgICAgICAgc2VsZi5fcnVuX2Fk
Yl9jb21tYW5kKFsncm9vdCddKQotICAgICAgICBzZWxmLl9zZXR1cF9wZXJmb3JtYW5jZSgpCi0g
ICAgICAgICMgUmVxdWlyZWQgYnkgd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXJGaWxl
UGF0aCgpLgotICAgICAgICAjIE90aGVyIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRlZCBhdXRv
bWF0aWNhbGx5IGJ5IGFkYiBwdXNoLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21lJ10p
Ci0gICAgICAgICMgQWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBmdWxseSBhY2Nlc3Mg
dGhlIGRpcmVjdG9yeS4KLSAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVlZHMgdGhlIHBlcm1p
c3Npb24gdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzIGhlcmUuCi0gICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9TT1VSQ0VfUk9PVF9E
SVJdKQotCi0gICAgICAgIHNlbGYuX3B1c2hfZXhlY3V0YWJsZSgpCi0gICAgICAgIHNlbGYuX3B1
c2hfZm9udHMoKQotICAgICAgICBzZWxmLl9zeW5jaHJvbml6ZV9kYXRldGltZSgpCi0KLSAgICAg
ICAgIyBEZWxldGUgdGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFuIHRlc3Qg
cnVuLgotICAgICAgICAjIFRoaXMgaXMgbGlrZSB3aGF0J3MgZG9uZSBpbiBDaHJvbWl1bVBvcnQu
c2V0dXBfdGVzdF9ydW4gYnV0IG9uIHRoZSBkZXZpY2UuCi0gICAgICAgIHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ3JtJywgJy1yJywgRFJUX0FQUF9DQUNIRV9ESVJdKQotCiAgICAg
ICAgICMgU3RhcnQgdGhlIEhUVFAgc2VydmVyIHNvIHRoYXQgdGhlIGRldmljZSBjYW4gYWNjZXNz
IHRoZSB0ZXN0IGNhc2VzLgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxm
KS5zdGFydF9odHRwX3NlcnZlcihhZGRpdGlvbmFsX2RpcnM9e1RFU1RfUEFUSF9QUkVGSVg6IHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpfSkKIAotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBm
b3J3YXJkZXInKQotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICclcyAl
cycgJSAoREVWSUNFX0ZPUldBUkRFUl9QQVRILCBGT1JXQVJEX1BPUlRTKV0pCi0KICAgICBkZWYg
Y2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgICMgTGVhdmUgdGhlIGZvcndhcmRlciBh
bmQgdGVzdHMgaHR0cGQgc2VydmVyIHRoZXJlIGJlY2F1c2UgdGhleSBhcmUKICAgICAgICAgIyB1
c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgZG8gbm8gaGFybSB0byBzdWJzZXF1ZW50IHRlc3RzLgot
ICAgICAgICBzZWxmLl90ZWFyZG93bl9wZXJmb3JtYW5jZSgpCisgICAgICAgIHBhc3MKIAogICAg
IGRlZiBza2lwcGVkX2xheW91dF90ZXN0cyhzZWxmLCB0ZXN0X2xpc3QpOgogICAgICAgICByZXR1
cm4gc2VsZi5fcmVhbF90ZXN0cyhbCkBAIC0zMTksMjAgKzI4Nyw2OSBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgZGVmIF9kcml2ZXJfY2xh
c3Moc2VsZik6CiAgICAgICAgIHJldHVybiBDaHJvbWl1bUFuZHJvaWREcml2ZXIKIAotICAgIGRl
ZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90
aGFuKToKLSAgICAgICAgaWYgbm90IHN0ZG91dDoKLSAgICAgICAgICAgIHN0ZG91dCA9ICcnCi0g
ICAgICAgIHN0ZG91dCArPSAnKioqKioqKioqIExvZ2NhdDpcbicgKyBzZWxmLl9nZXRfbG9nY2F0
KCkKLSAgICAgICAgaWYgbm90IHN0ZGVycjoKLSAgICAgICAgICAgIHN0ZGVyciA9ICcnCi0gICAg
ICAgIHN0ZGVyciArPSAnKioqKioqKioqIFRvbWJzdG9uZSBmaWxlOlxuJyArIHNlbGYuX2dldF9s
YXN0X3N0YWNrdHJhY2UoKQotICAgICAgICByZXR1cm4gc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9y
dCwgc2VsZikuX2dldF9jcmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbikKLQogICAgICMgTG9jYWwgcHJpdmF0ZSBmdW5jdGlvbnMuCiAKKyAgICBkZWYgX2dldF9k
ZXZpY2VzKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlczoKKyAgICAgICAgICAg
IHJlX2RldmljZSA9IHJlLmNvbXBpbGUoJ14oW2EtekEtWjAtOV86Li1dKylcdGRldmljZSQnLCBy
ZS5NVUxUSUxJTkUpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWydhZGInLCAnZGV2aWNlcyddLCBlcnJvcl9oYW5kbGVyPXNlbGYuX2V4ZWN1dGl2ZS5p
Z25vcmVfZXJyb3IpCisgICAgICAgICAgICBzZWxmLl9kZXZpY2VzID0gcmVfZGV2aWNlLmZpbmRh
bGwocmVzdWx0KQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2RldmljZXM6CisgICAgICAgICAg
ICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ05vIGRldmljZXMgYXR0YWNoZWQuIFJlc3VsdCBv
ZiAiYWRiIGRldmljZXMiOiAlcycgJSByZXN1bHQpCisgICAgICAgIHJldHVybiBzZWxmLl9kZXZp
Y2VzCisKKyAgICBkZWYgX2dldF9kZXZpY2Vfc2VyaWFsKHNlbGYsIHdvcmtfbnVtYmVyKToKKyAg
ICAgICAgZGV2aWNlcyA9IHNlbGYuX2dldF9kZXZpY2VzKCkKKyAgICAgICAgaWYgd29ya19udW1i
ZXIgPj0gbGVuKGRldmljZXMpOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1dv
cmsgbnVtYmVyIGV4Y2VlZHMgYXZhaWxhYmxlIG51bWJlciBvZiBkZXZpY2VzJykKKyAgICAgICAg
cmV0dXJuIGRldmljZXNbd29ya19udW1iZXJdCisKKworY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJp
dmVyKGRyaXZlci5Ecml2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJf
bnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6CisgICAgICAgIHN1cGVyKENo
cm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX19pbml0X18ocG9ydCwgd29ya2VyX251bWJlciwg
cGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQpCisgICAgICAgIHNlbGYuX3BpeGVsX3Rlc3RzID0gcGl4
ZWxfdGVzdHMKKyAgICAgICAgc2VsZi5faW5fZmlmb19wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIg
KyAnRHVtcFJlbmRlclRyZWUuaW4nCisgICAgICAgIHNlbGYuX291dF9maWZvX3BhdGggPSBEUlRf
QVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5vdXQnCisgICAgICAgIHNlbGYuX2Vycl9m
aWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5lcnInCisgICAg
ICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3JlYWRf
c3RkZXJyX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2hhc19zZXR1cCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yID0gTm9uZQorICAgICAgICBzZWxmLl9hZGJf
Y29tbWFuZCA9IFsnYWRiJywgJy1zJywgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwod29ya2VyX251
bWJlcildCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVhcmRvd25f
cGVyZm9ybWFuY2UoKQorICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYp
Ll9fZGVsX18oKQorCisgICAgZGVmIF9zZXR1cF90ZXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9oYXNfc2V0dXA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9oYXNfc2V0
dXAgPSBUcnVlCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3Jvb3QnXSkKKyAgICAg
ICAgc2VsZi5fc2V0dXBfcGVyZm9ybWFuY2UoKQorICAgICAgICAjIFJlcXVpcmVkIGJ5IHdlYmtp
dF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyRmlsZVBhdGgoKS4KKyAgICAgICAgIyBPdGhlciBk
aXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBhZGIgcHVzaC4KKyAg
ICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAnLCBERVZJ
Q0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQorICAgICAgICAjIEFsbG93IHRoZSBEdW1w
UmVuZGVyVHJlZSBhcHAgdG8gZnVsbHkgYWNjZXNzIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICMg
VGhlIG5hdGl2ZSBjb2RlIG5lZWRzIHRoZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRlbXBvcmFyeSBm
aWxlcyBoZXJlLgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjaG1v
ZCcsICc3NzcnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSXSkKKworICAgICAgICBzZWxmLl9wdXNo
X2V4ZWN1dGFibGUoKQorICAgICAgICBzZWxmLl9wdXNoX2ZvbnRzKCkKKyAgICAgICAgc2VsZi5f
c3luY2hyb25pemVfZGF0ZXRpbWUoKQorCisgICAgICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hl
IGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KKyAgICAgICAgIyBUaGlzIGlzIGxp
a2Ugd2hhdCdzIGRvbmUgaW4gQ2hyb21pdW1Qb3J0LnNldHVwX3Rlc3RfcnVuIGJ1dCBvbiB0aGUg
ZGV2aWNlLgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsICct
cicsIERSVF9BUFBfQ0FDSEVfRElSXSkKKworICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBm
b3J3YXJkZXInKQorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICclcyAl
cycgJSAoREVWSUNFX0ZPUldBUkRFUl9QQVRILCBGT1JXQVJEX1BPUlRTKV0pCisKICAgICBkZWYg
X3B1c2hfZXhlY3V0YWJsZShzZWxmKToKLSAgICAgICAgZHJ0X2hvc3RfcGF0aCA9IHNlbGYuX3Bh
dGhfdG9fZHJpdmVyKCkKLSAgICAgICAgZm9yd2FyZGVyX2hvc3RfcGF0aCA9IHNlbGYuX3BhdGhf
dG9fZm9yd2FyZGVyKCkKKyAgICAgICAgZHJ0X2hvc3RfcGF0aCA9IHNlbGYuX3BvcnQuX3BhdGhf
dG9fZHJpdmVyKCkKKyAgICAgICAgZm9yd2FyZGVyX2hvc3RfcGF0aCA9IHNlbGYuX3BvcnQuX3Bh
dGhfdG9fZm9yd2FyZGVyKCkKICAgICAgICAgaG9zdF9zdGFtcCA9IGludChmbG9hdChtYXgob3Mu
c3RhdChkcnRfaG9zdF9wYXRoKS5zdF9tdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3Muc3RhdChmb3J3YXJkZXJfaG9zdF9wYXRoKS5zdF9tdGltZSkpKQogICAgICAg
ICBkZXZpY2Vfc3RhbXAgPSBpbnQoZmxvYXQoc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsKQEAgLTM0
NCwxMCArMzYxLDEwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21p
dW1Qb3J0KToKICAgICAgICAgICAgIGluc3RhbGxfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21t
YW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQogICAgICAgICAgICAgaWYgaW5zdGFsbF9y
ZXN1bHQuZmluZCgnU3VjY2VzcycpID09IC0xOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2Vy
dGlvbkVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCAlcyBvbnRvIGRldmljZTogJXMnICUgKGRydF9o
b3N0X3BhdGgsIGluc3RhbGxfcmVzdWx0KSkKLSAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2
aWNlKHNlbGYuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVlLnBhaycpLCBERVZJQ0VfRFJUX0RJ
UiArICdEdW1wUmVuZGVyVHJlZS5wYWsnKQotICAgICAgICAgICAgc2VsZi5fcHVzaF90b19kZXZp
Y2Uoc2VsZi5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJyksIERFVklDRV9E
UlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpCi0gICAgICAgICAgICBzZWxmLl9w
dXNoX3RvX2RldmljZShzZWxmLl9idWlsZF9wYXRoKCdhbmRyb2lkX21haW5fZm9udHMueG1sJyks
IERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKQotICAgICAgICAgICAg
c2VsZi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fYnVpbGRfcGF0aCgnYW5kcm9pZF9mYWxsYmFja19m
b250cy54bWwnKSwgREVWSUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwn
KQorICAgICAgICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fcG9ydC5fYnVpbGRfcGF0
aCgnRHVtcFJlbmRlclRyZWUucGFrJyksIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVl
LnBhaycpCisgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVt
cFJlbmRlclRyZWVfcmVzb3VyY2VzJykKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNl
KHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKSwgREVWSUNF
X0RSVF9ESVIgKyAnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpCisgICAgICAgICAgICBzZWxmLl9w
dXNoX3RvX2RldmljZShzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2Zv
bnRzLnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcp
CiAgICAgICAgICAgICAjIFZlcnNpb24gY29udHJvbCBvZiB0ZXN0IHJlc291cmNlcyBpcyBkZXBl
bmRlbnQgb24gZXhlY3V0YWJsZXMsCiAgICAgICAgICAgICAjIGJlY2F1c2Ugd2Ugd2lsbCBhbHdh
eXMgcmVidWlsZCBleGVjdXRhYmxlcyB3aGVuIHJlc291cmNlcyBhcmUKICAgICAgICAgICAgICMg
dXBkYXRlZC4KQEAgLTM1Nyw3ICszNzQsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNo
cm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgZGVmIF9wdXNoX2ZvbnRzKHNlbGYpOgogICAgICAg
ICBpZiBub3Qgc2VsZi5fY2hlY2tfdmVyc2lvbihERVZJQ0VfRk9OVFNfRElSLCBGT05UX0ZJTEVT
X1ZFUlNJT04pOgogICAgICAgICAgICAgX2xvZy5kZWJ1ZygnUHVzaGluZyBmb250cycpCi0gICAg
ICAgICAgICBwYXRoX3RvX2FoZW1fZm9udCA9IHNlbGYuX2J1aWxkX3BhdGgoJ0FIRU1fX19fLlRU
RicpCisgICAgICAgICAgICBwYXRoX3RvX2FoZW1fZm9udCA9IHNlbGYuX3BvcnQuX2J1aWxkX3Bh
dGgoJ0FIRU1fX19fLlRURicpCiAgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShwYXRo
X3RvX2FoZW1fZm9udCwgREVWSUNFX0ZPTlRTX0RJUiArICdBSEVNX19fXy5UVEYnKQogICAgICAg
ICAgICAgZm9yIChob3N0X2RpciwgZm9udF9maWxlKSBpbiBIT1NUX0ZPTlRfRklMRVM6CiAgICAg
ICAgICAgICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2UoaG9zdF9kaXIgKyBmb250X2ZpbGUsIERF
VklDRV9GT05UU19ESVIgKyBmb250X2ZpbGUpCkBAIC0zNjcsMTQgKzM4NCwxNCBAQCBjbGFzcyBD
aHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgZGVmIF9wdXNo
X3Rlc3RfcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVnKCdQdXNoaW5nIHRlc3Qg
cmVzb3VyY2VzJykKICAgICAgICAgZm9yIHJlc291cmNlIGluIFRFU1RfUkVTT1VSQ0VTX1RPX1BV
U0g6Ci0gICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLmxheW91dF90ZXN0c19k
aXIoKSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNl
KQorICAgICAgICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2Uoc2VsZi5fcG9ydC5sYXlvdXRfdGVz
dHNfZGlyKCkgKyAnLycgKyByZXNvdXJjZSwgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyByZXNv
dXJjZSkKIAogICAgIGRlZiBfc3luY2hyb25pemVfZGF0ZXRpbWUoc2VsZik6CiAgICAgICAgICMg
VGhlIGRhdGUvdGltZSBiZXR3ZWVuIGhvc3QgYW5kIGRldmljZSBtYXkgbm90IGJlIHN5bmNocm9u
aXplZC4KICAgICAgICAgIyBXZSBuZWVkIHRvIG1ha2UgdGhlbSBzeW5jaHJvbml6ZWQsIG90aGVy
d2lzZSB0ZXN0cyBtaWdodCBmYWlsLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIEdldCBz
ZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAgVVRDLgotICAgICAgICAgICAgaG9zdF9k
YXRldGltZSA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2RhdGUnLCAnLXUnLCAnKyVz
J10pCisgICAgICAgICAgICBob3N0X2RhdGV0aW1lID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1
bl9jb21tYW5kKFsnZGF0ZScsICctdScsICcrJXMnXSkKICAgICAgICAgZXhjZXB0OgogICAgICAg
ICAgICAgIyBSZXNldCB0byAxOTcwLTAxLTAxIDAwOjAwOjAwIFVUQy4KICAgICAgICAgICAgIGhv
c3RfZGF0ZXRpbWUgPSAwCkBAIC0zOTQsMTAgKzQxMSwxMCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJv
aWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgZGVmIF9ydW5fYWRiX2NvbW1hbmQo
c2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgogICAgICAgICBfbG9nLmRlYnVnKCdSdW4g
YWRiIGNvbW1hbmQ6ICcgKyBzdHIoY21kKSkKICAgICAgICAgaWYgaWdub3JlX2Vycm9yOgotICAg
ICAgICAgICAgZXJyb3JfaGFuZGxlciA9IHNlbGYuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IKKyAg
ICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUuaWdub3JlX2Vy
cm9yCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9uZQotICAg
ICAgICByZXN1bHQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1h
bmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKKyAgICAgICAgcmVzdWx0ID0g
c2VsZi5fcG9ydC5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYuX2FkYl9jb21tYW5kICsgY21k
LCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCiAgICAgICAgICMgTGltaXQgdGhlIGxlbmd0
aCB0byBhdm9pZCB0b28gdmVyYm9zZSBvdXRwdXQgb2YgY29tbWFuZHMgbGlrZSAnYWRiIGxvZ2Nh
dCcgYW5kICdjYXQgL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmUwMScKICAgICAgICAgIyB3aG9z
ZSBvdXRwdXRzIGFyZSBub3JtYWxseSBwcmludGVkIGluIGxhdGVyIGxvZ3MuCiAgICAgICAgIF9s
b2cuZGVidWcoJ1J1biBhZGIgcmVzdWx0OiAnICsgcmVzdWx0Wzo4MF0pCkBAIC00NTMsMjcgKzQ3
MCwyNSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6
CiAgICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJywgc2Vs
Zi5fb3JpZ2luYWxfZ292ZXJub3IsIFNDQUxJTkdfR09WRVJOT1JdKQogICAgICAgICBzZWxmLl9v
cmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKIAotCi1jbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIo
ZHJpdmVyLkRyaXZlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1i
ZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0PUZhbHNlKToKLSAgICAgICAgc3VwZXIoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2luaXRfXyhwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhl
bF90ZXN0cywgbm9fdGltZW91dCkKLSAgICAgICAgc2VsZi5fcGl4ZWxfdGVzdHMgPSBwaXhlbF90
ZXN0cwotICAgICAgICBzZWxmLl9pbl9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdE
dW1wUmVuZGVyVHJlZS5pbicKLSAgICAgICAgc2VsZi5fb3V0X2ZpZm9fcGF0aCA9IERSVF9BUFBf
RklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLm91dCcKLSAgICAgICAgc2VsZi5fZXJyX2ZpZm9f
cGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmVycicKLSAgICAgICAg
c2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVhZF9zdGRl
cnJfcHJvY2VzcyA9IE5vbmUKLQogICAgIGRlZiBfY29tbWFuZF93cmFwcGVyKGNscywgd3JhcHBl
cl9vcHRpb24pOgogICAgICAgICAjIElnbm9yZSBjb21tYW5kIHdyYXBwZXIgd2hpY2ggaXMgbm90
IGFwcGxpY2FibGUgb24gQW5kcm9pZC4KICAgICAgICAgcmV0dXJuIFtdCiAKKyAgICBkZWYgX2dl
dF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgorICAgICAgICBp
ZiBub3Qgc3Rkb3V0OgorICAgICAgICAgICAgc3Rkb3V0ID0gJycKKyAgICAgICAgc3Rkb3V0ICs9
ICcqKioqKioqKiogTG9nY2F0OlxuJyArIHNlbGYuX2dldF9sb2djYXQoKQorICAgICAgICBpZiBu
b3Qgc3RkZXJyOgorICAgICAgICAgICAgc3RkZXJyID0gJycKKyAgICAgICAgc3RkZXJyICs9ICcq
KioqKioqKiogVG9tYnN0b25lIGZpbGU6XG4nICsgc2VsZi5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSgp
CisgICAgICAgIHJldHVybiBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9nZXRf
Y3Jhc2hfbG9nKHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKQorCiAgICAgZGVmIGNtZF9saW5l
KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
X3BvcnQuX2FkYl9jb21tYW5kICsgWydzaGVsbCddCisgICAgICAgIHJldHVybiBzZWxmLl9hZGJf
Y29tbWFuZCArIFsnc2hlbGwnXQogCiAgICAgZGVmIF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2Vs
ZiwgZnVsbF9maWxlX3BhdGgpOgogICAgICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRz
d2l0aCgnLycpCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydz
aGVsbCcsICdscycsIGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAor
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxs
X2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKIAogICAgIGRlZiBfZHJ0X2Nt
ZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKICAgICAgICAgcmV0dXJu
IGRyaXZlci5Ecml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3Mp
ICsgWwpAQCAtNDk2LDcgKzUxMSw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2
ZXIuRHJpdmVyKToKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5fZXJyX2ZpZm9fcGF0aCkpCiAKICAgICBkZWYgX3JlbW92ZV9hbGxfcGlwZXMoc2VsZik6
Ci0gICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgc2Vs
Zi5faW5fZmlmb19wYXRoLCBzZWxmLl9vdXRfZmlmb19wYXRoLCBzZWxmLl9lcnJfZmlmb19wYXRo
XSkKKyAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCBzZWxmLl9p
bl9maWZvX3BhdGgsIHNlbGYuX291dF9maWZvX3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhdKQog
ICAgICAgICByZXR1cm4gKG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5f
Zmlmb19wYXRoKSBhbmQKICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25f
ZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAogICAgICAgICAgICAgICAgIG5vdCBzZWxm
Ll9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCkBAIC01MTAsMTAg
KzUyNSwxMiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAg
ICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3RhcnQocGl4ZWxfdGVz
dHMsIHBlcl90ZXN0X2FyZ3MpCiAKICAgICBkZWYgX3N0YXJ0KHNlbGYsIHBpeGVsX3Rlc3RzLCBw
ZXJfdGVzdF9hcmdzKToKKyAgICAgICAgc2VsZi5fc2V0dXBfdGVzdCgpCisKICAgICAgICAgZm9y
IHJldHJpZXMgaW4gcmFuZ2UoMyk6CiAgICAgICAgICAgICBpZiBzZWxmLl9zdGFydF9vbmNlKHBp
eGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNh
dGlvbi4gUmV0cmllcz0lZC4gTG9nOiVzJyAlIChyZXRyaWVzLCBzZWxmLl9wb3J0Ll9nZXRfbG9n
Y2F0KCkpKQorICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5k
ZXJUcmVlIGFwcGxpY2F0aW9uLiBSZXRyaWVzPSVkLiBMb2c6JXMnICUgKHJldHJpZXMsIHNlbGYu
X2dldF9sb2djYXQoKSkpCiAgICAgICAgICAgICBzZWxmLnN0b3AoKQogICAgICAgICAgICAgdGlt
ZS5zbGVlcCgyKQogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVkIHRvIHN0YXJ0
IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uIG11bHRpcGxlIHRpbWVzLiBHaXZlIHVwLicpCkBA
IC01MjEsOSArNTM4LDkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2
ZXIpOgogICAgIGRlZiBfc3RhcnRfb25jZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJn
cyk6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX3N0YXJ0KHBp
eGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCi0gICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJf
Y29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQotICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLl9kcnRfY21kX2xpbmUocGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpICsgWyc+JywgQ09NTUFORF9MSU5FX0ZJTEVdKQotICAgICAgICBzdGFy
dF9yZXN1bHQgPSBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdz
dGFydCcsICctZScsICdSdW5JblN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05B
TUVdKQorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAnLWMnXSkKKyAg
ICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobyddICsgc2VsZi5fZHJ0
X2NtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSArIFsnPicsIENPTU1BTkRfTElO
RV9GSUxFXSkKKyAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAnYW0nLCAnc3RhcnQnLCAnLWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRf
QUNUSVZJVFlfRlVMTF9OQU1FXSkKICAgICAgICAgaWYgc3RhcnRfcmVzdWx0LmZpbmQoJ0V4Y2Vw
dGlvbicpICE9IC0xOgogICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1
bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNlcHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQog
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC01NDAsMTMgKzU1NywxMyBAQCBjbGFzcyBDaHJv
bWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgU3RhcnQgYSBwcm9j
ZXNzIHRvIHJlYWQgZnJvbSB0aGUgc3Rkb3V0IGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFw
cCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgogICAgICAgICBfbG9nLmRlYnVnKCdSZWRpcmVjdGluZyBz
dGRvdXQgdG8gJyArIHNlbGYuX291dF9maWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3JlYWRfc3Rk
b3V0X3Byb2Nlc3MgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKAotICAgICAgICAgICAg
c2VsZi5fcG9ydCwgJ1JlYWRTdGRvdXQnLCBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCArIFsnc2hl
bGwnLCAnY2F0Jywgc2VsZi5fb3V0X2ZpZm9fcGF0aF0sIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVl
KQorICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRvdXQnLCBzZWxmLl9hZGJfY29tbWFu
ZCArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fb3V0X2ZpZm9fcGF0aF0sIHVuaXZlcnNhbF9uZXds
aW5lcz1UcnVlKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLnN0YXJ0KCkKIAog
ICAgICAgICAjIFN0YXJ0IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIHN0ZGVyciBmaWZvIG9m
IHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KICAgICAgICAgX2xv
Zy5kZWJ1ZygnUmVkaXJlY3Rpbmcgc3RkZXJyIHRvICcgKyBzZWxmLl9lcnJfZmlmb19wYXRoKQog
ICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gc2VydmVyX3Byb2Nlc3MuU2VydmVy
UHJvY2VzcygKLSAgICAgICAgICAgIHNlbGYuX3BvcnQsICdSZWFkU3RkZXJyJywgc2VsZi5fcG9y
dC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX2Vycl9maWZvX3BhdGhdLCB1
bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsICdSZWFkU3Rk
ZXJyJywgc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX2Vycl9maWZv
X3BhdGhdLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKICAgICAgICAgc2VsZi5fcmVhZF9zdGRl
cnJfcHJvY2Vzcy5zdGFydCgpCiAKICAgICAgICAgX2xvZy5kZWJ1ZygnUmVkaXJlY3Rpbmcgc3Rk
aW4gdG8gJyArIHNlbGYuX2luX2ZpZm9fcGF0aCkKQEAgLTU4Nyw3ICs2MDQsNyBAQCBjbGFzcyBD
aHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICByZXR1cm4g
VHJ1ZQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQor
ICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1zdG9w
JywgRFJUX0FQUF9QQUNLQUdFXSkKIAogICAgICAgICBpZiBzZWxmLl9yZWFkX3N0ZG91dF9wcm9j
ZXNzOgogICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5raWxsKCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
YW5kcm9pZF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQppbmRleCA2NWI2YTJkN2IwMjk0NzU0
ZTU3YjA2MDRiOWU4YjE1MjhjYTQ5M2JkLi44ZjJhZTgyY2QwMjU5ZDQ3YzM3NjU2OGQwMTAwY2Vj
OTBmMDY5NjhkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CkBA
IC00MSwxMCArNDEsNzkgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQg
ZHJpdmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXJfdW5p
dHRlc3QKIAogCitjbGFzcyBNb2NrUnVuQ29tbWFuZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKKyAgICAgICAgc2VsZi5fbW9ja19sb2djYXQgPSAnJworICAgICAgICBzZWxmLl9t
b2NrX2RldmljZXNfb3V0cHV0ID0gJycKKyAgICAgICAgc2VsZi5fbW9ja19kZXZpY2VzID0gW10K
KyAgICAgICAgc2VsZi5fbW9ja19sc190b21ic3RvbmVzID0gJycKKworICAgIGRlZiBtb2NrX3J1
bl9jb21tYW5kX2ZuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBhcmdzWzBdICE9ICdhZGInOgor
ICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGlmIGFyZ3NbMV0gPT0gJ2RldmljZXMnOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21vY2tfZGV2aWNlc19vdXRwdXQKKworICAgICAgICBh
c3NlcnQgbGVuKGFyZ3MpID4gMworICAgICAgICBhc3NlcnQgYXJnc1sxXSA9PSAnLXMnCisgICAg
ICAgIGFzc2VydCBhcmdzWzJdIGluIHNlbGYuX21vY2tfZGV2aWNlcworICAgICAgICBpZiBhcmdz
WzNdID09ICdzaGVsbCc6CisgICAgICAgICAgICBpZiBhcmdzWzQ6XSA9PSBbJ2xzJywgJy1uJywg
Jy9kYXRhL3RvbWJzdG9uZXMnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fbW9ja19s
c190b21ic3RvbmVzCisgICAgICAgICAgICBlbGlmIGFyZ3NbNF0gPT0gJ2NhdCc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFyZ3NbNV0gKyAnXG5tb2NrX2NvbnRlbnRzXG4nCisgICAgICAgIGVs
aWYgYXJnc1szXSA9PSAnbG9nY2F0JzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9tb2NrX2xv
Z2NhdAorICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiBtb2NrX25vX2RldmljZShzZWxmKToK
KyAgICAgICAgc2VsZi5fbW9ja19kZXZpY2VzID0gW10KKyAgICAgICAgc2VsZi5fbW9ja19kZXZp
Y2VzX291dHB1dCA9ICdMaXN0IG9mIGRldmljZXMgYXR0YWNoZWQnCisKKyAgICBkZWYgbW9ja19v
bmVfZGV2aWNlKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2RldmljZXMgPSBbJzEyMzQ1Njc4
OUFCQ0RFRjAnXQorICAgICAgICBzZWxmLl9tb2NrX2RldmljZXNfb3V0cHV0ID0gKCdMaXN0IG9m
IGRldmljZXMgYXR0YWNoZWRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnJXNcdGRldmljZVxuJyAlIHNlbGYuX21vY2tfZGV2aWNlc1swXSkKKworICAgIGRlZiBtb2Nr
X3R3b19kZXZpY2VzKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2RldmljZXMgPSBbJzEyMzQ1
Njc4OUFCQ0RFRjAnLCAnMjM0NTY3ODlBQkNERUYwMSddCisgICAgICAgIHNlbGYuX21vY2tfZGV2
aWNlc19vdXRwdXQgPSAoJyogZGFlbW9uIG5vdCBydW5uaW5nLiBzdGFydGluZyBpdCBub3cgb24g
cG9ydCA1MDM3IConCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyogZGFl
bW9uIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5IConCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0xpc3Qgb2YgZGV2aWNlcyBhdHRhY2hlZFxuJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICclc1x0ZGV2aWNlXG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJyVzXHRkZXZpY2VcbicgJSAoc2VsZi5fbW9ja19kZXZpY2VzWzBdLCBz
ZWxmLl9tb2NrX2RldmljZXNbMV0pKQorCisgICAgZGVmIG1vY2tfbm9fdG9tYnN0b25lX2Rpcihz
ZWxmKToKKyAgICAgICAgc2VsZi5fbW9ja19sc190b21ic3RvbmVzID0gJy9kYXRhL3RvbWJzdG9u
ZXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknCisKKyAgICBkZWYgbW9ja19ub190b21ic3Rv
bmVfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fbW9ja19sc190b21ic3RvbmVzID0gJycKKwor
ICAgIGRlZiBtb2NrX3Rlbl90b21ic3RvbmVzKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2xz
X3RvbWJzdG9uZXMgPSAoJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyMTg2NDMgMjAx
Mi0wNC0yNiAxODoxNSB0b21ic3RvbmVfMDBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjQxNjk1IDIwMTItMDQt
MjYgMTg6MTUgdG9tYnN0b25lXzAxXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAgIDIxOTQ3MiAyMDEyLTA0LTI2IDE4
OjE2IHRvbWJzdG9uZV8wMlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAgNDUzMTYgMjAxMi0wNC0yNyAxNjozMyB0
b21ic3RvbmVfMDNcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcnct
LS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgIDgyMDIyIDIwMTItMDQtMjMgMTY6NTcgdG9tYnN0
b25lXzA0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0t
LSAxMDAwICAgICAxMDAwICAgICAgICA4MjAxNSAyMDEyLTA0LTIzIDE2OjU3IHRvbWJzdG9uZV8w
NVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAw
MCAgICAgMTAwMCAgICAgICAgODE5NzQgMjAxMi0wNC0yMyAxNjo1OCB0b21ic3RvbmVfMDZcbicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAg
IDEwMDAgICAgICAgMjM3NDA5IDIwMTItMDQtMjYgMTc6NDEgdG9tYnN0b25lXzA3XG4nCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAw
ICAgICAgIDI3NjA4OSAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wOFxuJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAg
ICAyMTk2MTggMjAxMi0wNC0yNiAxODoxNSB0b21ic3RvbmVfMDlcbicpCisKKyAgICBkZWYgbW9j
a19sb2djYXQoc2VsZiwgY29udGVudCk6CisgICAgICAgIHNlbGYuX21vY2tfbG9nY2F0ID0gY29u
dGVudAorCisKIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNocm9taXVtX3BvcnRfdGVz
dGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2UpOgogICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1h
bmRyb2lkJwogICAgIHBvcnRfbWFrZXIgPSBjaHJvbWl1bV9hbmRyb2lkLkNocm9taXVtQW5kcm9p
ZFBvcnQKLSAgICBtb2NrX2xvZ2NhdCA9ICcnCisKKyAgICBkZWYgbWFrZV9wb3J0KHNlbGYsICoq
a3dhcmdzKToKKyAgICAgICAgcG9ydCA9IHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnRUZXN0LCBz
ZWxmKS5tYWtlX3BvcnQoKiprd2FyZ3MpCisgICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZCA9
IE1vY2tSdW5Db21tYW5kKCkKKyAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2
ZTIocnVuX2NvbW1hbmRfZm49c2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfcnVuX2NvbW1hbmRf
Zm4pCisgICAgICAgIHJldHVybiBwb3J0CiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYp
OgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtNTksNTEgKzEyOCw3MyBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0VGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9t
aXVtUG9ydFRlc3RDYXNlKToKICAgICAgICAgIyB1c2luZyBhIGN1c3RvbSBleHBlY3RhdGlvbnMg
ZmlsZS4KICAgICAgICAgcGFzcwogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBtb2NrX3J1
bl9jb21tYW5kX2ZuKGFyZ3MpOgotICAgICAgICBpZiBhcmdzWzFdID09ICdzaGVsbCc6Ci0gICAg
ICAgICAgICBpZiBhcmdzWzI6XSA9PSBbJ2xzJywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMnXToK
LSAgICAgICAgICAgICAgICAjIEZvciAnYWRiIHNoZWxsIGxzIC1uIC9kYXRhL3RvbWJzdG9uZXMn
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAg
IDIxODY0MyAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wMFxuJwotICAgICAgICAgICAgICAg
ICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyNDE2OTUgMjAxMi0wNC0y
NiAxODoxNSB0b21ic3RvbmVfMDFcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICctcnctLS0t
LS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjE5NDcyIDIwMTItMDQtMjYgMTg6MTYgdG9tYnN0b25l
XzAyXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAw
ICAgICAgICA0NTMxNiAyMDEyLTA0LTI3IDE2OjMzIHRvbWJzdG9uZV8wM1xuJwotICAgICAgICAg
ICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAgODIwMjIgMjAx
Mi0wNC0yMyAxNjo1NyB0b21ic3RvbmVfMDRcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICct
cnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgIDgyMDE1IDIwMTItMDQtMjMgMTY6NTcgdG9t
YnN0b25lXzA1XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAg
ICAxMDAwICAgICAgICA4MTk3NCAyMDEyLTA0LTIzIDE2OjU4IHRvbWJzdG9uZV8wNlxuJwotICAg
ICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyMzc0
MDkgMjAxMi0wNC0yNiAxNzo0MSB0b21ic3RvbmVfMDdcbicKLSAgICAgICAgICAgICAgICAgICAg
ICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjc2MDg5IDIwMTItMDQtMjYgMTg6
MTUgdG9tYnN0b25lXzA4XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAx
MDAwICAgICAxMDAwICAgICAgIDIxOTYxOCAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wOVxu
JykKLSAgICAgICAgICAgIGVsaWYgYXJnc1syXSA9PSAnY2F0JzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYXJnc1szXSArICdcbm1vY2tfY29udGVudHNcbicKLSAgICAgICAgZWxpZiBhcmdzWzFd
ID09ICdsb2djYXQnOgotICAgICAgICAgICAgcmV0dXJuIENocm9taXVtQW5kcm9pZFBvcnRUZXN0
Lm1vY2tfbG9nY2F0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gJycKKyAgICBk
ZWYgdGVzdF9kcml2ZXJfY21kX2xpbmUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGluZyBQb3J0
VGVzdENhc2UudGVzdF9jbWRfbGluZSgpLiBVc2UgQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdC50
ZXN0X2NtZF9saW5lKCkgaW5zdGVhZC4KKyAgICAgICAgcmV0dXJuCiAKLSAgICBkZWYgdGVzdF9n
ZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgorICAgIGRlZiB0ZXN0X2dldF9kZXZpY2VzX25vX2Rl
dmljZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2Vs
Zi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfbm9fZGV2aWNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvcnQuX2dldF9kZXZpY2VzKQogCi0gICAgICAgIGRlZiBt
b2NrX3J1bl9jb21tYW5kX25vX2RpcihhcmdzKToKLSAgICAgICAgICAgIHJldHVybiAnL2RhdGEv
dG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScKLSAgICAgICAgcG9ydC5fZXhl
Y3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49bW9ja19ydW5fY29tbWFuZF9u
b19kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuX2dldF9sYXN0X3N0YWNrdHJh
Y2UoKSwgJycpCisgICAgZGVmIHRlc3RfZ2V0X2RldmljZXNfb25lX2RldmljZShzZWxmKToKKyAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21t
YW5kLm1vY2tfb25lX2RldmljZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubW9j
a19ydW5fY29tbWFuZC5fbW9ja19kZXZpY2VzLCBwb3J0Ll9nZXRfZGV2aWNlcygpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygxLCBwb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpCiAK
LSAgICAgICAgZGVmIG1vY2tfcnVuX2NvbW1hbmRfbm9fZmlsZShhcmdzKToKLSAgICAgICAgICAg
IHJldHVybiAnJwotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5f
Y29tbWFuZF9mbj1tb2NrX3J1bl9jb21tYW5kX25vX2ZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHBvcnQuX2dldF9sYXN0X3N0YWNrdHJhY2UoKSwgJycpCisgICAgZGVmIHRlc3RfZ2V0
X2RldmljZXNfdHdvX2RldmljZXMoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCisgICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX3R3b19kZXZpY2VzKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5tb2NrX3J1bl9jb21tYW5kLl9tb2NrX2Rldmlj
ZXMsIHBvcnQuX2dldF9kZXZpY2VzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIsIHBv
cnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkKKworICAgIGRlZiB0ZXN0X2dldF9kZXZpY2Vf
c2VyaWFsX25vX2RldmljZShzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkK
KyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfbm9fZGV2aWNlKCkKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFs
LCAwKQorCisgICAgZGVmIHRlc3RfZ2V0X2RldmljZV9zZXJpYWxfb25lX2RldmljZShzZWxmKToK
KyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9j
b21tYW5kLm1vY2tfb25lX2RldmljZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu
bW9ja19ydW5fY29tbWFuZC5fbW9ja19kZXZpY2VzWzBdLCBwb3J0Ll9nZXRfZGV2aWNlX3Nlcmlh
bCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvcnQuX2dl
dF9kZXZpY2Vfc2VyaWFsLCAxKQorCisgICAgZGVmIHRlc3RfZ2V0X2RldmljZV9zZXJpYWxfdHdv
X2RldmljZXMoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAg
IHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX3R3b19kZXZpY2VzKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoc2VsZi5tb2NrX3J1bl9jb21tYW5kLl9tb2NrX2RldmljZXNbMF0sIHBvcnQu
X2dldF9kZXZpY2Vfc2VyaWFsKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm1v
Y2tfcnVuX2NvbW1hbmQuX21vY2tfZGV2aWNlc1sxXSwgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwo
MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBwb3J0Ll9nZXRf
ZGV2aWNlX3NlcmlhbCwgMikKKworCitjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubW9j
a19ydW5fY29tbWFuZCA9IE1vY2tSdW5Db21tYW5kKCkKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9j
b21tYW5kLm1vY2tfb25lX2RldmljZSgpCisgICAgICAgIHNlbGYucG9ydCA9IGNocm9taXVtX2Fu
ZHJvaWQuQ2hyb21pdW1BbmRyb2lkUG9ydCgKKyAgICAgICAgICAgICAgICBNb2NrU3lzdGVtSG9z
dChleGVjdXRpdmU9TW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49c2VsZi5tb2NrX3J1bl9j
b21tYW5kLm1vY2tfcnVuX2NvbW1hbmRfZm4pKSwKKyAgICAgICAgICAgICAgICAnY2hyb21pdW0t
YW5kcm9pZCcpCisgICAgICAgIHNlbGYuZHJpdmVyID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1
bUFuZHJvaWREcml2ZXIoc2VsZi5wb3J0LCB3b3JrZXJfbnVtYmVyPTAsIHBpeGVsX3Rlc3RzPVRy
dWUpCisKKyAgICBkZWYgdGVzdF9nZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYpOgorICAgICAgICBz
ZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19ub190b21ic3RvbmVfZGlyKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2dldF9sYXN0X3N0YWNrdHJhY2UoKSwgJycpCiAK
LSAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49
Q2hyb21pdW1BbmRyb2lkUG9ydFRlc3QubW9ja19ydW5fY29tbWFuZF9mbikKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMocG9ydC5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSgpLAorICAgICAgICBzZWxm
Lm1vY2tfcnVuX2NvbW1hbmQubW9ja19ub190b21ic3RvbmVfZmlsZSgpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl9nZXRfbGFzdF9zdGFja3RyYWNlKCksICcnKQorCisg
ICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX3Rlbl90b21ic3RvbmVzKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2dldF9sYXN0X3N0YWNrdHJhY2UoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAxMDAwIDQ1MzE2IDIw
MTItMDQtMjcgMTY6MzMgdG9tYnN0b25lXzAzXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZV8wM1xubW9ja19jb250ZW50c1xuJykKIAogICAg
IGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21t
YW5kX2ZuPUNocm9taXVtQW5kcm9pZFBvcnRUZXN0Lm1vY2tfcnVuX2NvbW1hbmRfZm4pCi0gICAg
ICAgIENocm9taXVtQW5kcm9pZFBvcnRUZXN0Lm1vY2tfbG9nY2F0ID0gJ2xvZ2NhdCBjb250ZW50
c1xuJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdmb28n
LCAxMjM0LCAnb3V0IGJhclxub3V0IGJhelxuJywgJ2VyciBiYXJcbmVyciBiYXpcbicsIG5ld2Vy
X3RoYW49Tm9uZSksCisgICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX2xvZ2NhdCgn
bG9nY2F0IGNvbnRlbnRzXG4nKQorICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja190
ZW5fdG9tYnN0b25lcygpCisgICAgICAgIHNlbGYuZHJpdmVyLl9jcmFzaGVkX3Byb2Nlc3NfbmFt
ZSA9ICdmb28nCisgICAgICAgIHNlbGYuZHJpdmVyLl9jcmFzaGVkX3BpZCA9IDEyMzQKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2dldF9jcmFzaF9sb2coJ291dCBiYXJc
bm91dCBiYXpcbicsICdlcnIgYmFyXG5lcnIgYmF6XG4nLCBuZXdlcl90aGFuPU5vbmUpLAogICAg
ICAgICAgICAgKCdlcnIgYmFyXG4nCiAgICAgICAgICAgICAgJ2VyciBiYXpcbicKICAgICAgICAg
ICAgICAnKioqKioqKioqIFRvbWJzdG9uZSBmaWxlOlxuJwpAQCAtMTIxLDcgKzIxMiwxMCBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0VGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9t
aXVtUG9ydFRlc3RDYXNlKToKICAgICAgICAgICAgICB1J1NUREVSUjogLXJ3LS0tLS0tLSAxMDAw
IDEwMDAgNDUzMTYgMjAxMi0wNC0yNyAxNjozMyB0b21ic3RvbmVfMDNcbicKICAgICAgICAgICAg
ICB1J1NUREVSUjogL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmVfMDNcbicKICAgICAgICAgICAg
ICB1J1NUREVSUjogbW9ja19jb250ZW50c1xuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHBvcnQuX2dldF9jcmFzaF9sb2coTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgbmV3ZXJfdGhhbj1O
b25lKSwKKworICAgICAgICBzZWxmLmRyaXZlci5fY3Jhc2hlZF9wcm9jZXNzX25hbWUgPSBOb25l
CisgICAgICAgIHNlbGYuZHJpdmVyLl9jcmFzaGVkX3BpZCA9IE5vbmUKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2dldF9jcmFzaF9sb2coTm9uZSwgTm9uZSwgbmV3ZXJf
dGhhbj1Ob25lKSwKICAgICAgICAgICAgICgnKioqKioqKioqIFRvbWJzdG9uZSBmaWxlOlxuJwog
ICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgMTAwMCA0NTMxNiAyMDEyLTA0LTI3IDE2OjMz
IHRvbWJzdG9uZV8wM1xuJwogICAgICAgICAgICAgICcvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9u
ZV8wM1xuJwpAQCAtMTM0LDE5ICsyMjgsOSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0VGVz
dChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9taXVtUG9ydFRlc3RDYXNlKToKICAgICAgICAg
ICAgICB1J1NUREVSUjogL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmVfMDNcbicKICAgICAgICAg
ICAgICB1J1NUREVSUjogbW9ja19jb250ZW50c1xuJykpCiAKLSAgICBkZWYgdGVzdF9kcml2ZXJf
Y21kX2xpbmUoc2VsZik6Ci0gICAgICAgICMgT3ZlcnJpZGluZyBQb3J0VGVzdENhc2UudGVzdF9j
bWRfbGluZSgpLiBVc2UgQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdC50ZXN0X2NtZF9saW5lKCkg
aW5zdGVhZC4KLSAgICAgICAgcmV0dXJuCi0KLQotY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVy
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBt
b2NrX3BvcnQgPSBjaHJvbWl1bV9hbmRyb2lkLkNocm9taXVtQW5kcm9pZFBvcnQoTW9ja1N5c3Rl
bUhvc3QoKSwgJ2Nocm9taXVtLWFuZHJvaWQnKQotICAgICAgICBzZWxmLmRyaXZlciA9IGNocm9t
aXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lkRHJpdmVyKG1vY2tfcG9ydCwgd29ya2VyX251bWJl
cj0wLCBwaXhlbF90ZXN0cz1UcnVlKQotCiAgICAgZGVmIHRlc3RfY21kX2xpbmUoc2VsZik6CiAg
ICAgICAgIGNtZF9saW5lID0gc2VsZi5kcml2ZXIuY21kX2xpbmUoVHJ1ZSwgWydhbnl0aGluZydd
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2FkYicsICdzaGVsbCddLCBjbWRfbGluZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydhZGInLCAnLXMnLCBzZWxmLm1vY2tfcnVuX2Nv
bW1hbmQuX21vY2tfZGV2aWNlc1swXSwgJ3NoZWxsJ10sIGNtZF9saW5lKQogCiAgICAgZGVmIHRl
c3RfZHJ0X2NtZF9saW5lKHNlbGYpOgogICAgICAgICBjbWRfbGluZSA9IHNlbGYuZHJpdmVyLl9k
cnRfY21kX2xpbmUoVHJ1ZSwgWyctLWEnXSkKQEAgLTE3MSw1ICsyNTUsMjIgQEAgY2xhc3MgQ2hy
b21pdW1BbmRyb2lkRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KGRyaXZl
cl9pbnB1dCksIGV4cGVjdGVkX2NvbW1hbmQpCiAKIAorY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJp
dmVyVHdvRHJpdmVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3R3b19k
cml2ZXJzKHNlbGYpOgorICAgICAgICBtb2NrX3J1bl9jb21tYW5kID0gTW9ja1J1bkNvbW1hbmQo
KQorICAgICAgICBtb2NrX3J1bl9jb21tYW5kLm1vY2tfdHdvX2RldmljZXMoKQorICAgICAgICBw
b3J0ID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWRQb3J0KAorICAgICAgICAgICAg
ICAgIE1vY2tTeXN0ZW1Ib3N0KGV4ZWN1dGl2ZT1Nb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9m
bj1tb2NrX3J1bl9jb21tYW5kLm1vY2tfcnVuX2NvbW1hbmRfZm4pKSwKKyAgICAgICAgICAgICAg
ICAnY2hyb21pdW0tYW5kcm9pZCcpCisgICAgICAgIGRyaXZlcjAgPSBjaHJvbWl1bV9hbmRyb2lk
LkNocm9taXVtQW5kcm9pZERyaXZlcihwb3J0LCB3b3JrZXJfbnVtYmVyPTAsIHBpeGVsX3Rlc3Rz
PVRydWUpCisgICAgICAgIGRyaXZlcjEgPSBjaHJvbWl1bV9hbmRyb2lkLkNocm9taXVtQW5kcm9p
ZERyaXZlcihwb3J0LCB3b3JrZXJfbnVtYmVyPTEsIHBpeGVsX3Rlc3RzPVRydWUpCisKKyAgICAg
ICAgY21kX2xpbmUwID0gZHJpdmVyMC5jbWRfbGluZShUcnVlLCBbJ2FueXRoaW5nJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnYWRiJywgJy1zJywgbW9ja19ydW5fY29tbWFuZC5fbW9j
a19kZXZpY2VzWzBdLCAnc2hlbGwnXSwgY21kX2xpbmUwKQorCisgICAgICAgIGNtZF9saW5lMSA9
IGRyaXZlcjEuY21kX2xpbmUoVHJ1ZSwgWydhbnl0aGluZyddKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhbJ2FkYicsICctcycsIG1vY2tfcnVuX2NvbW1hbmQuX21vY2tfZGV2aWNlc1sxXSwg
J3NoZWxsJ10sIGNtZF9saW5lMSkKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAg
IHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2RyaXZlci5weQppbmRleCA3ODE4MjNiOGQ2NzBhNmViOGU1MmUwNzY4YmU2NjRi
MTFkNjMwMzNjLi43NTc1NDVmMDI4Y2NlMmU1NWIxNzA4NDlkODI4MDcxMjE4MzY3YjliIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5w
eQpAQCAtMTY2LDggKzE2Niw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgICAgIGNy
YXNoX2xvZyA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgpOgotICAgICAgICAg
ICAgc2VsZi5lcnJvcl9mcm9tX3Rlc3QsIGNyYXNoX2xvZyA9IHNlbGYuX3BvcnQuX2dldF9jcmFz
aF9sb2coc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUsCi0gICAgICAgICAgICAgICAgc2VsZi5f
Y3Jhc2hlZF9waWQsIHRleHQsIHNlbGYuZXJyb3JfZnJvbV90ZXN0LCBuZXdlcl90aGFuPXN0YXJ0
X3RpbWUpCisgICAgICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCwgY3Jhc2hfbG9nID0gc2Vs
Zi5fZ2V0X2NyYXNoX2xvZyh0ZXh0LCBzZWxmLmVycm9yX2Zyb21fdGVzdCwgbmV3ZXJfdGhhbj1z
dGFydF90aW1lKQogCiAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGZpbmQgYSBjcmFzaCBsb2cg
dXNlIGEgcGxhY2Vob2xkZXIgZXJyb3IgbWVzc2FnZSBpbnN0ZWFkLgogICAgICAgICAgICAgaWYg
bm90IGNyYXNoX2xvZzoKQEAgLTE4OCw2ICsxODcsOSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToK
ICAgICAgICAgICAgIGNyYXNoZWRfcHJvY2Vzc19uYW1lPXNlbGYuX2NyYXNoZWRfcHJvY2Vzc19u
YW1lLAogICAgICAgICAgICAgY3Jhc2hlZF9waWQ9c2VsZi5fY3Jhc2hlZF9waWQsIGNyYXNoX2xv
Zz1jcmFzaF9sb2cpCiAKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4pOgorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xv
ZyhzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSwgc2VsZi5fY3Jhc2hlZF9waWQsIHN0ZG91dCwg
c3RkZXJyLCBuZXdlcl90aGFuKQorCiAgICAgIyBGSVhNRTogU2VlbXMgdGhpcyBjb3VsZCBqdXN0
IGJlIGlubGluZWQgaW50byBjYWxsZXJzLgogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfY29t
bWFuZF93cmFwcGVyKGNscywgd3JhcHBlcl9vcHRpb24pOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggOWRh
ZmUxZDkzOGUxMTcwZTk4ZTdiMWE2Yjg0MTQzZmEyZDVhYTAzZC4uZmI1NzhiMGZhYmNiMzUxNDBh
ZDIwYjE0MzA2MmMzODcyNDlhMGI5NiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yNDYsOCArMjQ2LDkg
QEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0tcGVyLXRpbGUtcGFpbnRpbmciLAogICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVl
IiwKICAgICAgICAgICAgIGhlbHA9IlVzZSBwZXItdGlsZSBwYWludGluZyBvZiBjb21wb3NpdGVk
IHBhZ2VzIiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWFkYi1hcmdzIiwgdHlw
ZT0ic3RyaW5nIiwKLSAgICAgICAgICAgIGhlbHA9IkFyZ3VtZW50cyBwYXJzZWQgdG8gQW5kcm9p
ZCBhZGIsIHRvIHNlbGVjdCBkZXZpY2UsIGV0Yy4iKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tYWRiLWRldmljZSIsCisgICAgICAgICAgICBhY3Rpb249ImFwcGVuZCIsIGRlZmF1
bHQ9W10sCisgICAgICAgICAgICBoZWxwPSJSdW4gQW5kcm9pZCBsYXlvdXQgdGVzdHMgb24gdGhl
c2UgZGV2aWNlcy4iKSwKICAgICBdKSkKIAogICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5h
cHBlbmQoKCJFRkwtc3BlY2lmaWMgT3B0aW9ucyIsIFsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156116</attachid>
            <date>2012-08-02 10:28:57 -0700</date>
            <delta_ts>2012-08-02 11:46:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92877-20120802102838.patch</filename>
            <type>text/plain</type>
            <size>37736</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzM4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWRlZjc4YTM1NjJjYjkxOTU5MWMzNzdjMWNhYzUzNTdj
YmQ5YzI0My4uYmRjMzM1NTgyZjQ5YjkzYTVhYWNmMjI5YmNmMWIyYTUxYTdlMmE5MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcx
IEBACisyMDEyLTA4LTAxICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBsYXlvdXQgdGVzdHMgb24gbXVsdGlw
bGUgZGV2aWNlcyBpbiBwYXJhbGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTI4NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlZCBtZXRob2RzIHRoYXQgcnVuIGNvbW1hbmQgb24gYSBwYXJ0aWN1
bGFyIGRldmljZSBmcm9tIENocm9taXVtQW5kcm9pZFBvcnQgdG8gQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLgorICAgICAgICBUaGUgZHJpdmVycyBydW4gYWRiIGNvbW1hbmRzIHdpdGggdGhlICctcyBz
ZXJpYWxfbnVtYmVyJyBwYXJhbWV0ZXIgd2hpY2ggc3BlY2lmaWVzIHRoZSBkZXZpY2UgYWNjb3Jk
aW5nIHRvIHRoZSB3b3JrX251bWJlci4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZFBvcnQuX19pbml0X18pOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5kZWZhdWx0
X2NoaWxkX3Byb2Nlc3Nlcyk6IERlZmF1bHQgdG8gdGhlIG51bWJlciBvZiBhdHRhY2hlZCBkZXZp
Y2VzLgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC50ZXN0X2V4cGVjdGF0aW9ucyk6IFJl
bW92ZWQgYmVjYXVzZSBpdCBpcyB1bnVzZWQuIAorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9y
dC5zZXR1cF90ZXN0X3J1bik6IE1vc3QgY29udGVudHMgbW92ZWQgaW50byBDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3NldHVwX3Rlc3QoKQorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5jbGVh
bl91cF90ZXN0X3J1bik6IE5vdyB0aGUgaHR0cCBzZXJ2ZXIgaXMgc3RvcHBlZCBoZXJlLgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5fZ2V0X2RldmljZXMpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkUG9ydC5fZ2V0X2RldmljZV9zZXJpYWwpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19kZWxfXyk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXIuX3NldHVwX3Rlc3QpOiBPcmlnaW5hbCBjb250ZW50cyBvZiBDaHJvbWl1
bUFuZHJvaWRQb3J0LnNldHVwX3Rlc3RfcnVuKCkuCisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIuX3B1c2hfZXhlY3V0YWJsZSk6IE1vdmVkIGZyb20gQ2hyb21pdW1BbmRyb2lkUG9ydC4K
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVzaF9mb250cyk6IE1vdmVkIGZyb20g
Q2hyb21pdW1BbmRyb2lkUG9ydC4KKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcHVz
aF90ZXN0X3Jlc291cmNlcyk6IE1vdmVkIGZyb20gQ2hyb21pdW1BbmRyb2lkUG9ydC4KKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3luY2hyb25pemVfZGF0ZXRpbWUpOiBNb3ZlZCBm
cm9tIENocm9taXVtQW5kcm9pZFBvcnQuCisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X3J1bl9hZGJfY29tbWFuZCk6IE1vdmVkIGZyb20gQ2hyb21pdW1BbmRyb2lkUG9ydC4KKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fdGVhcmRvd25fcGVyZm9ybWFuY2UpOiBNb3ZlZCBm
cm9tIENocm9taXVtQW5kcm9pZFBvcnQuCisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X2dldF9jcmFzaF9sb2cpOiBNb3ZlZCBmcm9tIENocm9taXVtQW5kcm9pZFBvcnQuCisgICAgICAg
IChDaHJvbWl1bUFuZHJvaWREcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLl9maWxlX2V4aXN0c19vbl9kZXZpY2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLl9yZW1vdmVfYWxsX3BpcGVzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlci5fc3RhcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNl
KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5zdG9wKToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChNb2NrUnVuQ29tbWFuZCk6CisgICAgICAgIChNb2NrUnVuQ29tbWFuZC5f
X2luaXRfXyk6CisgICAgICAgIChNb2NrUnVuQ29tbWFuZC5tb2NrX3J1bl9jb21tYW5kX2ZuKToK
KyAgICAgICAgKE1vY2tSdW5Db21tYW5kLm1vY2tfbm9fZGV2aWNlKToKKyAgICAgICAgKE1vY2tS
dW5Db21tYW5kLm1vY2tfb25lX2RldmljZSk6CisgICAgICAgIChNb2NrUnVuQ29tbWFuZC5tb2Nr
X3R3b19kZXZpY2VzKToKKyAgICAgICAgKE1vY2tSdW5Db21tYW5kLm1vY2tfbm9fdG9tYnN0b25l
X2Rpcik6CisgICAgICAgIChNb2NrUnVuQ29tbWFuZC5tb2NrX25vX3RvbWJzdG9uZV9maWxlKToK
KyAgICAgICAgKE1vY2tSdW5Db21tYW5kLm1vY2tfdGVuX3RvbWJzdG9uZXMpOgorICAgICAgICAo
TW9ja1J1bkNvbW1hbmQubW9ja19sb2djYXQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9y
dFRlc3QpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QubWFrZV9wb3J0KToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZFBvcnRUZXN0LnRlc3RfZHJpdmVyX2NtZF9saW5lKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZFBvcnRUZXN0LnRlc3RfZ2V0X2RldmljZXNfbm9fZGV2aWNl
KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnRUZXN0LnRlc3RfZ2V0X2RldmljZXNfb25l
X2RldmljZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0VGVzdC50ZXN0X2dldF9kZXZp
Y2VzX3R3b19kZXZpY2VzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnRUZXN0LnRlc3Rf
Z2V0X2RldmljZV9zZXJpYWxfbm9fZGV2aWNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBv
cnRUZXN0LnRlc3RfZ2V0X2RldmljZV9zZXJpYWxfb25lX2RldmljZSk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWRQb3J0VGVzdC50ZXN0X2dldF9kZXZpY2Vfc2VyaWFsX3R3b19kZXZpY2VzKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkRHJpdmVyVGVzdC5zZXRVcCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJU
ZXN0LnRlc3RfZ2V0X2xhc3Rfc3RhY2t0cmFjZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXJUZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXJUZXN0LnRlc3RfY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVy
VHdvRHJpdmVyc1Rlc3QpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyVHdvRHJpdmVy
c1Rlc3QudGVzdF90d29fZHJpdmVycyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIucnVuX3Rlc3QpOgorICAg
ICAgICAoRHJpdmVyLl9nZXRfY3Jhc2hfbG9nKTogQWRkZWQgdG8gYWxsb3cgc3ViY2xhc3NlcyB0
byBvdmVycmlkZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAocGFyc2VfYXJncyk6IFJlbW92ZWQgdGhlIC0tYWRi
LWFyZ3MgY29tbWFuZC1saW5lIHBhcmFtZXRlciBiZWNhdXNlIG5vdyB3ZSBzZWxlY3QgZGV2aWNl
IGF1dG9tYXRpY2FsbHkuIEFkZGVkIC0tYWRiLWRldmljZSB0byBzcGVjaWZ5IGRldmljZXMuCisK
IDIwMTItMDgtMDEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjQzMjUuCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2Fu
ZHJvaWQucHkKaW5kZXggZmE4NWYxMGQ1N2M0Y2U5NzRlOTRhMmJlYTg5MTAxZDBhZDhkMWE0MS4u
NGY0ZjlkM2RlMzNjMWU5ODAwMTNkZTM2ODRmYzZkNWRlOTdhOTA5MiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
YW5kcm9pZC5weQpAQCAtMjksNyArMjksNyBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9z
Ci1pbXBvcnQgc2hsZXgKK2ltcG9ydCByZQogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUK
IApAQCAtMTY3LDE1ICsxNjcsMTMgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1
bS5DaHJvbWl1bVBvcnQpOgogCiAgICAgICAgIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPSAnYW5k
cm9pZCcKICAgICAgICAgc2VsZi5fdmVyc2lvbiA9ICdpY2VjcmVhbXNhbmR3aWNoJwotICAgICAg
ICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYW5kcm9pZF9i
YXNlX2RpciA9IE5vbmUKIAogICAgICAgICBzZWxmLl9ob3N0X3BvcnQgPSBmYWN0b3J5LlBvcnRG
YWN0b3J5KGhvc3QpLmdldCgnY2hyb21pdW0nLCAqKmt3YXJncykKIAotICAgICAgICBzZWxmLl9h
ZGJfY29tbWFuZCA9IFsnYWRiJ10KLSAgICAgICAgYWRiX2FyZ3MgPSBzZWxmLmdldF9vcHRpb24o
J2FkYl9hcmdzJykKLSAgICAgICAgaWYgYWRiX2FyZ3M6Ci0gICAgICAgICAgICBzZWxmLl9hZGJf
Y29tbWFuZCArPSBzaGxleC5zcGxpdChhZGJfYXJncykKKyAgICAgICAgaWYgaGFzYXR0cihzZWxm
Ll9vcHRpb25zLCAnYWRiX2RldmljZScpOgorICAgICAgICAgICAgc2VsZi5fZGV2aWNlcyA9IHNl
bGYuX29wdGlvbnMuYWRiX2RldmljZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5f
ZGV2aWNlcyA9IFtdCiAKICAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgogICAgICAg
ICAjIEFuZHJvaWQgcGxhdGZvcm0gaGFzIGxlc3MgY29tcHV0aW5nIHBvd2VyIHRoYW4gZGVza3Rv
cCBwbGF0Zm9ybXMuCkBAIC0xODQsOCArMTgyLDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9y
dChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICByZXR1cm4gMTAgKiAxMDAwCiAKICAg
ICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgQmVjYXVzZSBv
ZiB0aGUgbmF0dXJlIG9mIGFwaywgd2UgZG9uJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIHByb2Nl
c3MuCi0gICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZ2V0X2Rldmlj
ZXMoKSkKIAogICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgcmV0
dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VsZi5GQUxMQkFDS19QQVRIUykK
QEAgLTIxNywxNSArMjE0LDYgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5D
aHJvbWl1bVBvcnQpOgogICAgICAgICBhbmRyb2lkX2V4cGVjdGF0aW9uc19maWxlID0gc2VsZi5w
YXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRlc3RzJywgJ3BsYXRmb3JtJywgJ2Nocm9taXVt
JywgJ3Rlc3RfZXhwZWN0YXRpb25zX2FuZHJvaWQudHh0JykKICAgICAgICAgcmV0dXJuIHN1cGVy
KENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmV4cGVjdGF0aW9uc19maWxlcygpICsgW2FuZHJv
aWRfZXhwZWN0YXRpb25zX2ZpbGVdCiAKLSAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6
Ci0gICAgICAgICMgQXV0b21hdGljYWxseSBhcHBseSBhbGwgZXhwZWN0YXRpb24gcnVsZXMgb2Yg
Y2hyb21pdW0tbGludXggdG8KLSAgICAgICAgIyBjaHJvbWl1bS1hbmRyb2lkLgotICAgICAgICAj
IEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IG1lYXN1cmUgdG8gcmVkdWNlIHRoZSBtYW51YWwg
d29yayB3aGVuCi0gICAgICAgICMgdXBkYXRpbmcgV2ViS2l0LiBUaGlzIG1ldGhvZCBzaG91bGQg
YmUgcmVtb3ZlZCB3aGVuIHdlIG1lcmdlCi0gICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnNfYW5k
cm9pZC50eHQgaW50byBUZXN0RXhwZWN0YXRpb25zLgotICAgICAgICBleHBlY3RhdGlvbnMgPSBz
dXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxmKS50ZXN0X2V4cGVjdGF0aW9ucygpCi0gICAg
ICAgIHJldHVybiBleHBlY3RhdGlvbnMucmVwbGFjZSgnTElOVVggJywgJ0xJTlVYIEFORFJPSUQg
JykKLQogICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihzZWxmLCBhZGRpdGlvbmFsX2RpcnM9Tm9u
ZSwgbnVtYmVyX29mX3NlcnZlcnM9MCk6CiAgICAgICAgICMgVGhlIGh0dHAgc2VydmVyIHJ1bnMg
ZHVyaW5nIHRoZSB3aG9sZSB0ZXN0aW5nIHBlcmlvZCwgc28gaWdub3JlIHRoaXMgY2FsbC4KICAg
ICAgICAgcGFzcwpAQCAtMjM1LDMzICsyMjMsMTEgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9y
dChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBwYXNzCiAKICAgICBkZWYgc2V0dXBf
dGVzdF9ydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3Jvb3QnXSkK
LSAgICAgICAgc2VsZi5fc2V0dXBfcGVyZm9ybWFuY2UoKQotICAgICAgICAjIFJlcXVpcmVkIGJ5
IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyRmlsZVBhdGgoKS4KLSAgICAgICAgIyBP
dGhlciBkaXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBhZGIgcHVz
aC4KLSAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbWtkaXInLCAnLXAn
LCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQotICAgICAgICAjIEFsbG93IHRo
ZSBEdW1wUmVuZGVyVHJlZSBhcHAgdG8gZnVsbHkgYWNjZXNzIHRoZSBkaXJlY3RvcnkuCi0gICAg
ICAgICMgVGhlIG5hdGl2ZSBjb2RlIG5lZWRzIHRoZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRlbXBv
cmFyeSBmaWxlcyBoZXJlLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcs
ICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSXSkKLQotICAgICAgICBzZWxm
Ll9wdXNoX2V4ZWN1dGFibGUoKQotICAgICAgICBzZWxmLl9wdXNoX2ZvbnRzKCkKLSAgICAgICAg
c2VsZi5fc3luY2hyb25pemVfZGF0ZXRpbWUoKQotCi0gICAgICAgICMgRGVsZXRlIHRoZSBkaXNr
IGNhY2hlIGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KLSAgICAgICAgIyBUaGlz
IGlzIGxpa2Ugd2hhdCdzIGRvbmUgaW4gQ2hyb21pdW1Qb3J0LnNldHVwX3Rlc3RfcnVuIGJ1dCBv
biB0aGUgZGV2aWNlLgotICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdy
bScsICctcicsIERSVF9BUFBfQ0FDSEVfRElSXSkKLQogICAgICAgICAjIFN0YXJ0IHRoZSBIVFRQ
IHNlcnZlciBzbyB0aGF0IHRoZSBkZXZpY2UgY2FuIGFjY2VzcyB0aGUgdGVzdCBjYXNlcy4KICAg
ICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuc3RhcnRfaHR0cF9zZXJ2ZXIo
YWRkaXRpb25hbF9kaXJzPXtURVNUX1BBVEhfUFJFRklYOiBzZWxmLmxheW91dF90ZXN0c19kaXIo
KX0pCiAKLSAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgZm9yd2FyZGVyJykKLSAgICAgICAg
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnJXMgJXMnICUgKERFVklDRV9GT1JXQVJE
RVJfUEFUSCwgRk9SV0FSRF9QT1JUUyldKQotCiAgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNl
bGYpOgotICAgICAgICAjIExlYXZlIHRoZSBmb3J3YXJkZXIgYW5kIHRlc3RzIGh0dHBkIHNlcnZl
ciB0aGVyZSBiZWNhdXNlIHRoZXkgYXJlCi0gICAgICAgICMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcg
YW5kIGRvIG5vIGhhcm0gdG8gc3Vic2VxdWVudCB0ZXN0cy4KLSAgICAgICAgc2VsZi5fdGVhcmRv
d25fcGVyZm9ybWFuY2UoKQorICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxm
KS5zdG9wX2h0dHBfc2VydmVyKCkKIAogICAgIGRlZiBza2lwcGVkX2xheW91dF90ZXN0cyhzZWxm
LCB0ZXN0X2xpc3QpOgogICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90ZXN0cyhbCkBAIC0zMTks
MjAgKzI4NSw2NyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVt
UG9ydCk6CiAgICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6CiAgICAgICAgIHJldHVybiBDaHJv
bWl1bUFuZHJvaWREcml2ZXIKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBw
aWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKLSAgICAgICAgaWYgbm90IHN0ZG91dDoK
LSAgICAgICAgICAgIHN0ZG91dCA9ICcnCi0gICAgICAgIHN0ZG91dCArPSAnKioqKioqKioqIExv
Z2NhdDpcbicgKyBzZWxmLl9nZXRfbG9nY2F0KCkKLSAgICAgICAgaWYgbm90IHN0ZGVycjoKLSAg
ICAgICAgICAgIHN0ZGVyciA9ICcnCi0gICAgICAgIHN0ZGVyciArPSAnKioqKioqKioqIFRvbWJz
dG9uZSBmaWxlOlxuJyArIHNlbGYuX2dldF9sYXN0X3N0YWNrdHJhY2UoKQotICAgICAgICByZXR1
cm4gc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuX2dldF9jcmFzaF9sb2cobmFtZSwg
cGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbikKLQogICAgICMgTG9jYWwgcHJpdmF0ZSBm
dW5jdGlvbnMuCiAKKyAgICBkZWYgX2dldF9kZXZpY2VzKHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5fZGV2aWNlczoKKyAgICAgICAgICAgIHJlX2RldmljZSA9IHJlLmNvbXBpbGUoJ14oW2Et
ekEtWjAtOV86Li1dKylcdGRldmljZSQnLCByZS5NVUxUSUxJTkUpCisgICAgICAgICAgICByZXN1
bHQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWydhZGInLCAnZGV2aWNlcyddLCBlcnJv
cl9oYW5kbGVyPXNlbGYuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpCisgICAgICAgICAgICBzZWxm
Ll9kZXZpY2VzID0gcmVfZGV2aWNlLmZpbmRhbGwocmVzdWx0KQorICAgICAgICAgICAgaWYgbm90
IHNlbGYuX2RldmljZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ05v
IGRldmljZXMgYXR0YWNoZWQuIFJlc3VsdCBvZiAiYWRiIGRldmljZXMiOiAlcycgJSByZXN1bHQp
CisgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VzCisKKyAgICBkZWYgX2dldF9kZXZpY2Vfc2Vy
aWFsKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBkZXZpY2VzID0gc2VsZi5fZ2V0X2Rl
dmljZXMoKQorICAgICAgICBpZiB3b3JrZXJfbnVtYmVyID49IGxlbihkZXZpY2VzKToKKyAgICAg
ICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdXb3JrZXIgbnVtYmVyIGV4Y2VlZHMgYXZhaWxh
YmxlIG51bWJlciBvZiBkZXZpY2VzJykKKyAgICAgICAgcmV0dXJuIGRldmljZXNbd29ya2VyX251
bWJlcl0KKworCitjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBu
b190aW1lb3V0PUZhbHNlKToKKyAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBz
ZWxmKS5fX2luaXRfXyhwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91
dCkKKyAgICAgICAgc2VsZi5fcGl4ZWxfdGVzdHMgPSBwaXhlbF90ZXN0cworICAgICAgICBzZWxm
Ll9pbl9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5pbicK
KyAgICAgICAgc2VsZi5fb3V0X2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBS
ZW5kZXJUcmVlLm91dCcKKyAgICAgICAgc2VsZi5fZXJyX2ZpZm9fcGF0aCA9IERSVF9BUFBfRklM
RVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmVycicKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRf
cHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUK
KyAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2hh
c19zZXR1cCA9IEZhbHNlCisgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yID0gTm9uZQor
ICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9IFsnYWRiJywgJy1zJywgcG9ydC5fZ2V0X2Rldmlj
ZV9zZXJpYWwod29ya2VyX251bWJlcildCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAg
ICAgc2VsZi5fdGVhcmRvd25fcGVyZm9ybWFuY2UoKQorICAgICAgICBzdXBlcihDaHJvbWl1bUFu
ZHJvaWREcml2ZXIsIHNlbGYpLl9fZGVsX18oKQorCisgICAgZGVmIF9zZXR1cF90ZXN0KHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl9oYXNfc2V0dXA6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBzZWxmLl9oYXNfc2V0dXAgPSBUcnVlCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFu
ZChbJ3Jvb3QnXSkKKyAgICAgICAgc2VsZi5fc2V0dXBfcGVyZm9ybWFuY2UoKQorICAgICAgICAj
IFJlcXVpcmVkIGJ5IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyRmlsZVBhdGgoKS4K
KyAgICAgICAgIyBPdGhlciBkaXJlY3RvcmllcyB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxs
eSBieSBhZGIgcHVzaC4KKyAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
bWtkaXInLCAnLXAnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZSddKQorICAgICAg
ICAjIEFsbG93IHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgdG8gZnVsbHkgYWNjZXNzIHRoZSBkaXJl
Y3RvcnkuCisgICAgICAgICMgVGhlIG5hdGl2ZSBjb2RlIG5lZWRzIHRoZSBwZXJtaXNzaW9uIHRv
IHdyaXRlIHRlbXBvcmFyeSBmaWxlcyBoZXJlLgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1h
bmQoWydzaGVsbCcsICdjaG1vZCcsICc3NzcnLCBERVZJQ0VfU09VUkNFX1JPT1RfRElSXSkKKwor
ICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQorICAgICAgICBzZWxmLl9wdXNoX2ZvbnRz
KCkKKyAgICAgICAgc2VsZi5fc3luY2hyb25pemVfZGF0ZXRpbWUoKQorCisgICAgICAgICMgRGVs
ZXRlIHRoZSBkaXNrIGNhY2hlIGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KKyAg
ICAgICAgIyBUaGlzIGlzIGxpa2Ugd2hhdCdzIGRvbmUgaW4gQ2hyb21pdW1Qb3J0LnNldHVwX3Rl
c3RfcnVuIGJ1dCBvbiB0aGUgZGV2aWNlLgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQo
WydzaGVsbCcsICdybScsICctcicsIERSVF9BUFBfQ0FDSEVfRElSXSkKKwogICAgIGRlZiBfcHVz
aF9leGVjdXRhYmxlKHNlbGYpOgotICAgICAgICBkcnRfaG9zdF9wYXRoID0gc2VsZi5fcGF0aF90
b19kcml2ZXIoKQotICAgICAgICBmb3J3YXJkZXJfaG9zdF9wYXRoID0gc2VsZi5fcGF0aF90b19m
b3J3YXJkZXIoKQorICAgICAgICBkcnRfaG9zdF9wYXRoID0gc2VsZi5fcG9ydC5fcGF0aF90b19k
cml2ZXIoKQorICAgICAgICBmb3J3YXJkZXJfaG9zdF9wYXRoID0gc2VsZi5fcG9ydC5fcGF0aF90
b19mb3J3YXJkZXIoKQogICAgICAgICBob3N0X3N0YW1wID0gaW50KGZsb2F0KG1heChvcy5zdGF0
KGRydF9ob3N0X3BhdGgpLnN0X210aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcy5zdGF0KGZvcndhcmRlcl9ob3N0X3BhdGgpLnN0X210aW1lKSkpCiAgICAgICAgIGRl
dmljZV9zdGFtcCA9IGludChmbG9hdChzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWwpAQCAtMzQ0LDEw
ICszNTcsMTAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBv
cnQpOgogICAgICAgICAgICAgaW5zdGFsbF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQo
WydpbnN0YWxsJywgZHJ0X2hvc3RfcGF0aF0pCiAgICAgICAgICAgICBpZiBpbnN0YWxsX3Jlc3Vs
dC5maW5kKCdTdWNjZXNzJykgPT0gLTE6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9u
RXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsICVzIG9udG8gZGV2aWNlOiAlcycgJSAoZHJ0X2hvc3Rf
cGF0aCwgaW5zdGFsbF9yZXN1bHQpKQotICAgICAgICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2Uo
c2VsZi5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRyZWUucGFrJyksIERFVklDRV9EUlRfRElSICsg
J0R1bXBSZW5kZXJUcmVlLnBhaycpCi0gICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShz
ZWxmLl9idWlsZF9wYXRoKCdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnKSwgREVWSUNFX0RSVF9E
SVIgKyAnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJykKLSAgICAgICAgICAgIHNlbGYuX3B1c2hf
dG9fZGV2aWNlKHNlbGYuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfbWFpbl9mb250cy54bWwnKSwgREVW
SUNFX0RSVF9ESVIgKyAnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpCi0gICAgICAgICAgICBzZWxm
Ll9wdXNoX3RvX2RldmljZShzZWxmLl9idWlsZF9wYXRoKCdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRz
LnhtbCcpLCBERVZJQ0VfRFJUX0RJUiArICdhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcpCisg
ICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCdE
dW1wUmVuZGVyVHJlZS5wYWsnKSwgREVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUucGFr
JykKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYuX3BvcnQuX2J1aWxkX3Bh
dGgoJ0R1bXBSZW5kZXJUcmVlX3Jlc291cmNlcycpLCBERVZJQ0VfRFJUX0RJUiArICdEdW1wUmVu
ZGVyVHJlZV9yZXNvdXJjZXMnKQorICAgICAgICAgICAgc2VsZi5fcHVzaF90b19kZXZpY2Uoc2Vs
Zi5fcG9ydC5fYnVpbGRfcGF0aCgnYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcpLCBERVZJQ0VfRFJU
X0RJUiArICdhbmRyb2lkX21haW5fZm9udHMueG1sJykKKyAgICAgICAgICAgIHNlbGYuX3B1c2hf
dG9fZGV2aWNlKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMu
eG1sJyksIERFVklDRV9EUlRfRElSICsgJ2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sJykKICAg
ICAgICAgICAgICMgVmVyc2lvbiBjb250cm9sIG9mIHRlc3QgcmVzb3VyY2VzIGlzIGRlcGVuZGVu
dCBvbiBleGVjdXRhYmxlcywKICAgICAgICAgICAgICMgYmVjYXVzZSB3ZSB3aWxsIGFsd2F5cyBy
ZWJ1aWxkIGV4ZWN1dGFibGVzIHdoZW4gcmVzb3VyY2VzIGFyZQogICAgICAgICAgICAgIyB1cGRh
dGVkLgpAQCAtMzU3LDcgKzM3MCw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21p
dW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgX3B1c2hfZm9udHMoc2VsZik6CiAgICAgICAgIGlm
IG5vdCBzZWxmLl9jaGVja192ZXJzaW9uKERFVklDRV9GT05UU19ESVIsIEZPTlRfRklMRVNfVkVS
U0lPTik6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCdQdXNoaW5nIGZvbnRzJykKLSAgICAgICAg
ICAgIHBhdGhfdG9fYWhlbV9mb250ID0gc2VsZi5fYnVpbGRfcGF0aCgnQUhFTV9fX18uVFRGJykK
KyAgICAgICAgICAgIHBhdGhfdG9fYWhlbV9mb250ID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgn
QUhFTV9fX18uVFRGJykKICAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHBhdGhfdG9f
YWhlbV9mb250LCBERVZJQ0VfRk9OVFNfRElSICsgJ0FIRU1fX19fLlRURicpCiAgICAgICAgICAg
ICBmb3IgKGhvc3RfZGlyLCBmb250X2ZpbGUpIGluIEhPU1RfRk9OVF9GSUxFUzoKICAgICAgICAg
ICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShob3N0X2RpciArIGZvbnRfZmlsZSwgREVWSUNF
X0ZPTlRTX0RJUiArIGZvbnRfZmlsZSkKQEAgLTM2NywxNCArMzgwLDE0IEBAIGNsYXNzIENocm9t
aXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgX3B1c2hfdGVz
dF9yZXNvdXJjZXMoc2VsZik6CiAgICAgICAgIF9sb2cuZGVidWcoJ1B1c2hpbmcgdGVzdCByZXNv
dXJjZXMnKQogICAgICAgICBmb3IgcmVzb3VyY2UgaW4gVEVTVF9SRVNPVVJDRVNfVE9fUFVTSDoK
LSAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYubGF5b3V0X3Rlc3RzX2Rpcigp
ICsgJy8nICsgcmVzb3VyY2UsIERFVklDRV9MQVlPVVRfVEVTVFNfRElSICsgcmVzb3VyY2UpCisg
ICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9wb3J0LmxheW91dF90ZXN0c19k
aXIoKSArICcvJyArIHJlc291cmNlLCBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHJlc291cmNl
KQogCiAgICAgZGVmIF9zeW5jaHJvbml6ZV9kYXRldGltZShzZWxmKToKICAgICAgICAgIyBUaGUg
ZGF0ZS90aW1lIGJldHdlZW4gaG9zdCBhbmQgZGV2aWNlIG1heSBub3QgYmUgc3luY2hyb25pemVk
LgogICAgICAgICAjIFdlIG5lZWQgdG8gbWFrZSB0aGVtIHN5bmNocm9uaXplZCwgb3RoZXJ3aXNl
IHRlc3RzIG1pZ2h0IGZhaWwuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgR2V0IHNlY29u
ZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMCBVVEMuCi0gICAgICAgICAgICBob3N0X2RhdGV0
aW1lID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnZGF0ZScsICctdScsICcrJXMnXSkK
KyAgICAgICAgICAgIGhvc3RfZGF0ZXRpbWUgPSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWydkYXRlJywgJy11JywgJyslcyddKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAg
ICAjIFJlc2V0IHRvIDE5NzAtMDEtMDEgMDA6MDA6MDAgVVRDLgogICAgICAgICAgICAgaG9zdF9k
YXRldGltZSA9IDAKQEAgLTM5NCwxMCArNDA3LDEwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBv
cnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICBkZWYgX3J1bl9hZGJfY29tbWFuZChzZWxm
LCBjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSk6CiAgICAgICAgIF9sb2cuZGVidWcoJ1J1biBhZGIg
Y29tbWFuZDogJyArIHN0cihjbWQpKQogICAgICAgICBpZiBpZ25vcmVfZXJyb3I6Ci0gICAgICAg
ICAgICBlcnJvcl9oYW5kbGVyID0gc2VsZi5fZXhlY3V0aXZlLmlnbm9yZV9lcnJvcgorICAgICAg
ICAgICAgZXJyb3JfaGFuZGxlciA9IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IK
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBOb25lCi0gICAgICAg
IHJlc3VsdCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCAr
IGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQorICAgICAgICByZXN1bHQgPSBzZWxm
Ll9wb3J0Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQsIGVy
cm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKICAgICAgICAgIyBMaW1pdCB0aGUgbGVuZ3RoIHRv
IGF2b2lkIHRvbyB2ZXJib3NlIG91dHB1dCBvZiBjb21tYW5kcyBsaWtlICdhZGIgbG9nY2F0JyBh
bmQgJ2NhdCAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZTAxJwogICAgICAgICAjIHdob3NlIG91
dHB1dHMgYXJlIG5vcm1hbGx5IHByaW50ZWQgaW4gbGF0ZXIgbG9ncy4KICAgICAgICAgX2xvZy5k
ZWJ1ZygnUnVuIGFkYiByZXN1bHQ6ICcgKyByZXN1bHRbOjgwXSkKQEAgLTQ1MywyNyArNDY2LDI1
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAg
ICAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nLCBzZWxmLl9v
cmlnaW5hbF9nb3Zlcm5vciwgU0NBTElOR19HT1ZFUk5PUl0pCiAgICAgICAgIHNlbGYuX29yaWdp
bmFsX2dvdmVybm9yID0gTm9uZQogCi0KLWNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2
ZXIuRHJpdmVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwg
cGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2UpOgotICAgICAgICBzdXBlcihDaHJvbWl1bUFu
ZHJvaWREcml2ZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rl
c3RzLCBub190aW1lb3V0KQotICAgICAgICBzZWxmLl9waXhlbF90ZXN0cyA9IHBpeGVsX3Rlc3Rz
Ci0gICAgICAgIHNlbGYuX2luX2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBS
ZW5kZXJUcmVlLmluJwotICAgICAgICBzZWxmLl9vdXRfZmlmb19wYXRoID0gRFJUX0FQUF9GSUxF
U19ESVIgKyAnRHVtcFJlbmRlclRyZWUub3V0JwotICAgICAgICBzZWxmLl9lcnJfZmlmb19wYXRo
ID0gRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuZXJyJwotICAgICAgICBzZWxm
Ll9yZWFkX3N0ZG91dF9wcm9jZXNzID0gTm9uZQotICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9w
cm9jZXNzID0gTm9uZQotCiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29w
dGlvbik6CiAgICAgICAgICMgSWdub3JlIGNvbW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3QgYXBw
bGljYWJsZSBvbiBBbmRyb2lkLgogICAgICAgICByZXR1cm4gW10KIAorICAgIGRlZiBfZ2V0X2Ny
YXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgICAgIGlmIG5v
dCBzdGRvdXQ6CisgICAgICAgICAgICBzdGRvdXQgPSAnJworICAgICAgICBzdGRvdXQgKz0gJyoq
KioqKioqKiBMb2djYXQ6XG4nICsgc2VsZi5fZ2V0X2xvZ2NhdCgpCisgICAgICAgIGlmIG5vdCBz
dGRlcnI6CisgICAgICAgICAgICBzdGRlcnIgPSAnJworICAgICAgICBzdGRlcnIgKz0gJyoqKioq
KioqKiBUb21ic3RvbmUgZmlsZTpcbicgKyBzZWxmLl9nZXRfbGFzdF9zdGFja3RyYWNlKCkKKyAg
ICAgICAgcmV0dXJuIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX2dldF9jcmFz
aF9sb2coc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisKICAgICBkZWYgY21kX2xpbmUoc2Vs
ZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICByZXR1cm4gc2VsZi5fcG9y
dC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJ10KKyAgICAgICAgcmV0dXJuIHNlbGYuX2FkYl9jb21t
YW5kICsgWydzaGVsbCddCiAKICAgICBkZWYgX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBm
dWxsX2ZpbGVfcGF0aCk6CiAgICAgICAgIGFzc2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRo
KCcvJykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCisgICAg
ICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmls
ZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAogCiAgICAgZGVmIF9kcnRfY21kX2xp
bmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICByZXR1cm4gZHJp
dmVyLkRyaXZlci5jbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBb
CkBAIC00OTYsNyArNTA3LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5E
cml2ZXIpOgogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxm
Ll9lcnJfZmlmb19wYXRoKSkKIAogICAgIGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxmKToKLSAg
ICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCBzZWxmLl9p
bl9maWZvX3BhdGgsIHNlbGYuX291dF9maWZvX3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhdKQor
ICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIHNlbGYuX2luX2Zp
Zm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9fcGF0aF0pCiAgICAg
ICAgIHJldHVybiAobm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZv
X3BhdGgpIGFuZAogICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZp
Y2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCiAgICAgICAgICAgICAgICAgbm90IHNlbGYuX2Zp
bGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKQEAgLTUxMCwxMCArNTIx
LDEyIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAg
ICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5zdGFydChwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncykKIAogICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90
ZXN0X2FyZ3MpOgorICAgICAgICBzZWxmLl9zZXR1cF90ZXN0KCkKKwogICAgICAgICBmb3IgcmV0
cmllcyBpbiByYW5nZSgzKToKICAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X29uY2UocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAg
ICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9u
LiBSZXRyaWVzPSVkLiBMb2c6JXMnICUgKHJldHJpZXMsIHNlbGYuX3BvcnQuX2dldF9sb2djYXQo
KSkpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRy
ZWUgYXBwbGljYXRpb24uIFJldHJpZXM9JWQuIExvZzolcycgJSAocmV0cmllcywgc2VsZi5fZ2V0
X2xvZ2NhdCgpKSkKICAgICAgICAgICAgIHNlbGYuc3RvcCgpCiAgICAgICAgICAgICB0aW1lLnNs
ZWVwKDIpCiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVt
cFJlbmRlclRyZWUgYXBwbGljYXRpb24gbXVsdGlwbGUgdGltZXMuIEdpdmUgdXAuJykKQEAgLTUy
MSw5ICs1MzQsMTQgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIp
OgogICAgIGRlZiBfc3RhcnRfb25jZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6
CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX3N0YXJ0KHBpeGVs
X3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCi0gICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29t
bWFuZChbJ2xvZ2NhdCcsICctYyddKQotICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1h
bmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLl9kcnRfY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpICsgWyc+JywgQ09NTUFORF9MSU5FX0ZJTEVdKQotICAgICAgICBzdGFydF9y
ZXN1bHQgPSBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFy
dCcsICctZScsICdSdW5JblN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVd
KQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBmb3J3YXJkZXInKQorICAgICAgICBzZWxm
Ll9mb3J3YXJkZXJfcHJvY2VzcyA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MoCisgICAg
ICAgICAgICBzZWxmLl9wb3J0LCAnRm9yd2FyZGVyJywgc2VsZi5fYWRiX2NvbW1hbmQgKyBbJ3No
ZWxsJywgJyVzIC1EICVzJyAlIChERVZJQ0VfRk9SV0FSREVSX1BBVEgsIEZPUldBUkRfUE9SVFMp
XSkKKyAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3Muc3RhcnQoKQorCisgICAgICAgIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQorICAgICAgICBzZWxmLl9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLl9kcnRfY21kX2xpbmUocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyc+JywgQ09NTUFORF9MSU5FX0ZJTEVdKQorICAgICAg
ICBzdGFydF9yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdz
dGFydCcsICctZScsICdSdW5JblN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05B
TUVdKQogICAgICAgICBpZiBzdGFydF9yZXN1bHQuZmluZCgnRXhjZXB0aW9uJykgIT0gLTE6CiAg
ICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBw
bGljYXRpb24uIEV4Y2VwdGlvbjpcbicgKyBzdGFydF9yZXN1bHQpCiAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKQEAgLTU0MCwxMyArNTU4LDEzIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZl
cihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9t
IHRoZSBzdGRvdXQgZmlmbyBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBz
dGRvdXQuCiAgICAgICAgIF9sb2cuZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZG91dCB0byAnICsgc2Vs
Zi5fb3V0X2ZpZm9fcGF0aCkKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IHNl
cnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MoCi0gICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVh
ZFN0ZG91dCcsIHNlbGYuX3BvcnQuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxm
Ll9vdXRfZmlmb19wYXRoXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgICAgICBz
ZWxmLl9wb3J0LCAnUmVhZFN0ZG91dCcsIHNlbGYuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdj
YXQnLCBzZWxmLl9vdXRfZmlmb19wYXRoXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCiAgICAg
ICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgICAgICMgU3RhcnQg
YSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUgc3RkZXJyIGZpZm8gb2YgdGhlIER1bXBSZW5kZXJU
cmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgogICAgICAgICBfbG9nLmRlYnVnKCdSZWRpcmVj
dGluZyBzdGRlcnIgdG8gJyArIHNlbGYuX2Vycl9maWZvX3BhdGgpCiAgICAgICAgIHNlbGYuX3Jl
YWRfc3RkZXJyX3Byb2Nlc3MgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKAotICAgICAg
ICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRlcnInLCBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCAr
IFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2ZpZm9fcGF0aF0sIHVuaXZlcnNhbF9uZXdsaW5l
cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRlcnInLCBzZWxmLl9hZGJf
Y29tbWFuZCArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2ZpZm9fcGF0aF0sIHVuaXZlcnNh
bF9uZXdsaW5lcz1UcnVlKQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLnN0YXJ0
KCkKIAogICAgICAgICBfbG9nLmRlYnVnKCdSZWRpcmVjdGluZyBzdGRpbiB0byAnICsgc2VsZi5f
aW5fZmlmb19wYXRoKQpAQCAtNTg3LDcgKzYwNSw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERy
aXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYg
c3RvcChzZWxmKToKLSAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCisgICAgICAgIHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tB
R0VdKQogCiAgICAgICAgIGlmIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3M6CiAgICAgICAgICAg
ICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLmtpbGwoKQpAQCAtNjA0LDYgKzYyMiwxMCBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICBz
ZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IE5vbmUKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lk
RHJpdmVyLCBzZWxmKS5zdG9wKCkKIAorICAgICAgICBpZiBzZWxmLl9mb3J3YXJkZXJfcHJvY2Vz
czoKKyAgICAgICAgICAgIHNlbGYuX2ZvcndhcmRlcl9wcm9jZXNzLnN0b3Aoa2lsbF9kaXJlY3Rs
eT1UcnVlKQorICAgICAgICAgICAgc2VsZi5fZm9yd2FyZGVyX3Byb2Nlc3MgPSBOb25lCisKICAg
ICAgICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQoc2Vs
Zi5fcmVtb3ZlX2FsbF9waXBlcywgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKToKICAgICAg
ICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8gcmVtb3ZlIGZpZm8gZmlsZXMu
IE1heSBiZSBsb2NrZWQuJykKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0
LnB5CmluZGV4IDY1YjZhMmQ3YjAyOTQ3NTRlNTdiMDYwNGI5ZThiMTUyOGNhNDkzYmQuLjhmMmFl
ODJjZDAyNTlkNDdjMzc2NTY4ZDAxMDBjZWM5MGYwNjk2OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKQEAgLTQxLDEwICs0MSw3OSBAQCBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQgaW1wb3J0IGRyaXZlcl91bml0dGVzdAogCiAKK2NsYXNzIE1vY2tSdW5Db21tYW5k
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2xv
Z2NhdCA9ICcnCisgICAgICAgIHNlbGYuX21vY2tfZGV2aWNlc19vdXRwdXQgPSAnJworICAgICAg
ICBzZWxmLl9tb2NrX2RldmljZXMgPSBbXQorICAgICAgICBzZWxmLl9tb2NrX2xzX3RvbWJzdG9u
ZXMgPSAnJworCisgICAgZGVmIG1vY2tfcnVuX2NvbW1hbmRfZm4oc2VsZiwgYXJncyk6CisgICAg
ICAgIGlmIGFyZ3NbMF0gIT0gJ2FkYic6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAg
aWYgYXJnc1sxXSA9PSAnZGV2aWNlcyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbW9ja19k
ZXZpY2VzX291dHB1dAorCisgICAgICAgIGFzc2VydCBsZW4oYXJncykgPiAzCisgICAgICAgIGFz
c2VydCBhcmdzWzFdID09ICctcycKKyAgICAgICAgYXNzZXJ0IGFyZ3NbMl0gaW4gc2VsZi5fbW9j
a19kZXZpY2VzCisgICAgICAgIGlmIGFyZ3NbM10gPT0gJ3NoZWxsJzoKKyAgICAgICAgICAgIGlm
IGFyZ3NbNDpdID09IFsnbHMnLCAnLW4nLCAnL2RhdGEvdG9tYnN0b25lcyddOgorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9tb2NrX2xzX3RvbWJzdG9uZXMKKyAgICAgICAgICAgIGVsaWYg
YXJnc1s0XSA9PSAnY2F0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1s1XSArICdcbm1v
Y2tfY29udGVudHNcbicKKyAgICAgICAgZWxpZiBhcmdzWzNdID09ICdsb2djYXQnOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX21vY2tfbG9nY2F0CisgICAgICAgIHJldHVybiAnJworCisgICAg
ZGVmIG1vY2tfbm9fZGV2aWNlKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2RldmljZXMgPSBb
XQorICAgICAgICBzZWxmLl9tb2NrX2RldmljZXNfb3V0cHV0ID0gJ0xpc3Qgb2YgZGV2aWNlcyBh
dHRhY2hlZCcKKworICAgIGRlZiBtb2NrX29uZV9kZXZpY2Uoc2VsZik6CisgICAgICAgIHNlbGYu
X21vY2tfZGV2aWNlcyA9IFsnMTIzNDU2Nzg5QUJDREVGMCddCisgICAgICAgIHNlbGYuX21vY2tf
ZGV2aWNlc19vdXRwdXQgPSAoJ0xpc3Qgb2YgZGV2aWNlcyBhdHRhY2hlZFxuJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICclc1x0ZGV2aWNlXG4nICUgc2VsZi5fbW9ja19k
ZXZpY2VzWzBdKQorCisgICAgZGVmIG1vY2tfdHdvX2RldmljZXMoc2VsZik6CisgICAgICAgIHNl
bGYuX21vY2tfZGV2aWNlcyA9IFsnMTIzNDU2Nzg5QUJDREVGMCcsICcyMzQ1Njc4OUFCQ0RFRjAx
J10KKyAgICAgICAgc2VsZi5fbW9ja19kZXZpY2VzX291dHB1dCA9ICgnKiBkYWVtb24gbm90IHJ1
bm5pbmcuIHN0YXJ0aW5nIGl0IG5vdyBvbiBwb3J0IDUwMzcgKicKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnKiBkYWVtb24gc3RhcnRlZCBzdWNjZXNzZnVsbHkgKicKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGlzdCBvZiBkZXZpY2VzIGF0dGFj
aGVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzXHRkZXZpY2Vc
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXNcdGRldmljZVxuJyAl
IChzZWxmLl9tb2NrX2RldmljZXNbMF0sIHNlbGYuX21vY2tfZGV2aWNlc1sxXSkpCisKKyAgICBk
ZWYgbW9ja19ub190b21ic3RvbmVfZGlyKHNlbGYpOgorICAgICAgICBzZWxmLl9tb2NrX2xzX3Rv
bWJzdG9uZXMgPSAnL2RhdGEvdG9tYnN0b25lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScK
KworICAgIGRlZiBtb2NrX25vX3RvbWJzdG9uZV9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9t
b2NrX2xzX3RvbWJzdG9uZXMgPSAnJworCisgICAgZGVmIG1vY2tfdGVuX3RvbWJzdG9uZXMoc2Vs
Zik6CisgICAgICAgIHNlbGYuX21vY2tfbHNfdG9tYnN0b25lcyA9ICgnLXJ3LS0tLS0tLSAxMDAw
ICAgICAxMDAwICAgICAgIDIxODY0MyAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wMFxuJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAg
MTAwMCAgICAgICAyNDE2OTUgMjAxMi0wNC0yNiAxODoxNSB0b21ic3RvbmVfMDFcbicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAg
ICAgICAgMjE5NDcyIDIwMTItMDQtMjYgMTg6MTYgdG9tYnN0b25lXzAyXG4nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAg
ICA0NTMxNiAyMDEyLTA0LTI3IDE2OjMzIHRvbWJzdG9uZV8wM1xuJworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAgODIw
MjIgMjAxMi0wNC0yMyAxNjo1NyB0b21ic3RvbmVfMDRcbicKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgIDgyMDE1IDIw
MTItMDQtMjMgMTY6NTcgdG9tYnN0b25lXzA1XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAgICA4MTk3NCAyMDEyLTA0
LTIzIDE2OjU4IHRvbWJzdG9uZV8wNlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyMzc0MDkgMjAxMi0wNC0yNiAx
Nzo0MSB0b21ic3RvbmVfMDdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjc2MDg5IDIwMTItMDQtMjYgMTg6MTUg
dG9tYnN0b25lXzA4XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3
LS0tLS0tLSAxMDAwICAgICAxMDAwICAgICAgIDIxOTYxOCAyMDEyLTA0LTI2IDE4OjE1IHRvbWJz
dG9uZV8wOVxuJykKKworICAgIGRlZiBtb2NrX2xvZ2NhdChzZWxmLCBjb250ZW50KToKKyAgICAg
ICAgc2VsZi5fbW9ja19sb2djYXQgPSBjb250ZW50CisKKwogY2xhc3MgQ2hyb21pdW1BbmRyb2lk
UG9ydFRlc3QoY2hyb21pdW1fcG9ydF90ZXN0Y2FzZS5DaHJvbWl1bVBvcnRUZXN0Q2FzZSk6CiAg
ICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLWFuZHJvaWQnCiAgICAgcG9ydF9tYWtlciA9IGNocm9t
aXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lkUG9ydAotICAgIG1vY2tfbG9nY2F0ID0gJycKKwor
ICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0gc3VwZXIo
Q2hyb21pdW1BbmRyb2lkUG9ydFRlc3QsIHNlbGYpLm1ha2VfcG9ydCgqKmt3YXJncykKKyAgICAg
ICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kID0gTW9ja1J1bkNvbW1hbmQoKQorICAgICAgICBwb3J0
Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj1zZWxmLm1vY2tfcnVu
X2NvbW1hbmQubW9ja19ydW5fY29tbWFuZF9mbikKKyAgICAgICAgcmV0dXJuIHBvcnQKIAogICAg
IGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCkBAIC01OSw1MSArMTI4LDczIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNo
cm9taXVtX3BvcnRfdGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2UpOgogICAgICAgICAjIHVz
aW5nIGEgY3VzdG9tIGV4cGVjdGF0aW9ucyBmaWxlLgogICAgICAgICBwYXNzCiAKLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIG1vY2tfcnVuX2NvbW1hbmRfZm4oYXJncyk6Ci0gICAgICAgIGlm
IGFyZ3NbMV0gPT0gJ3NoZWxsJzoKLSAgICAgICAgICAgIGlmIGFyZ3NbMjpdID09IFsnbHMnLCAn
LW4nLCAnL2RhdGEvdG9tYnN0b25lcyddOgotICAgICAgICAgICAgICAgICMgRm9yICdhZGIgc2hl
bGwgbHMgLW4gL2RhdGEvdG9tYnN0b25lcycKLSAgICAgICAgICAgICAgICByZXR1cm4gKCctcnct
LS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjE4NjQzIDIwMTItMDQtMjYgMTg6MTUgdG9tYnN0
b25lXzAwXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAwICAgICAx
MDAwICAgICAgIDI0MTY5NSAyMDEyLTA0LTI2IDE4OjE1IHRvbWJzdG9uZV8wMVxuJwotICAgICAg
ICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAyMTk0NzIg
MjAxMi0wNC0yNiAxODoxNiB0b21ic3RvbmVfMDJcbicKLSAgICAgICAgICAgICAgICAgICAgICAg
ICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgIDQ1MzE2IDIwMTItMDQtMjcgMTY6MzMg
dG9tYnN0b25lXzAzXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0tLSAxMDAw
ICAgICAxMDAwICAgICAgICA4MjAyMiAyMDEyLTA0LTIzIDE2OjU3IHRvbWJzdG9uZV8wNFxuJwot
ICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAgICAgICAg
ODIwMTUgMjAxMi0wNC0yMyAxNjo1NyB0b21ic3RvbmVfMDVcbicKLSAgICAgICAgICAgICAgICAg
ICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgIDgxOTc0IDIwMTItMDQtMjMg
MTY6NTggdG9tYnN0b25lXzA2XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnLXJ3LS0tLS0t
LSAxMDAwICAgICAxMDAwICAgICAgIDIzNzQwOSAyMDEyLTA0LTI2IDE3OjQxIHRvbWJzdG9uZV8w
N1xuJwotICAgICAgICAgICAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAgICAgMTAwMCAg
ICAgICAyNzYwODkgMjAxMi0wNC0yNiAxODoxNSB0b21ic3RvbmVfMDhcbicKLSAgICAgICAgICAg
ICAgICAgICAgICAgICctcnctLS0tLS0tIDEwMDAgICAgIDEwMDAgICAgICAgMjE5NjE4IDIwMTIt
MDQtMjYgMTg6MTUgdG9tYnN0b25lXzA5XG4nKQotICAgICAgICAgICAgZWxpZiBhcmdzWzJdID09
ICdjYXQnOgotICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWzNdICsgJ1xubW9ja19jb250ZW50
c1xuJwotICAgICAgICBlbGlmIGFyZ3NbMV0gPT0gJ2xvZ2NhdCc6Ci0gICAgICAgICAgICByZXR1
cm4gQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QubW9ja19sb2djYXQKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIHJldHVybiAnJworICAgIGRlZiB0ZXN0X2RyaXZlcl9jbWRfbGluZShzZWxmKToK
KyAgICAgICAgIyBPdmVycmlkaW5nIFBvcnRUZXN0Q2FzZS50ZXN0X2NtZF9saW5lKCkuIFVzZSBD
aHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3RfY21kX2xpbmUoKSBpbnN0ZWFkLgorICAgICAg
ICByZXR1cm4KIAotICAgIGRlZiB0ZXN0X2dldF9sYXN0X3N0YWNrdHJhY2Uoc2VsZik6CisgICAg
ZGVmIHRlc3RfZ2V0X2RldmljZXNfbm9fZGV2aWNlKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2Vs
Zi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19ub19kZXZp
Y2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9ydC5fZ2V0
X2RldmljZXMpCiAKLSAgICAgICAgZGVmIG1vY2tfcnVuX2NvbW1hbmRfbm9fZGlyKGFyZ3MpOgot
ICAgICAgICAgICAgcmV0dXJuICcvZGF0YS90b21ic3RvbmVzOiBObyBzdWNoIGZpbGUgb3IgZGly
ZWN0b3J5JwotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29t
bWFuZF9mbj1tb2NrX3J1bl9jb21tYW5kX25vX2RpcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMocG9ydC5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSgpLCAnJykKKyAgICBkZWYgdGVzdF9nZXRfZGV2
aWNlc19vbmVfZGV2aWNlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQor
ICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19vbmVfZGV2aWNlKCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5tb2NrX3J1bl9jb21tYW5kLl9tb2NrX2RldmljZXMsIHBv
cnQuX2dldF9kZXZpY2VzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIHBvcnQuZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkKIAotICAgICAgICBkZWYgbW9ja19ydW5fY29tbWFuZF9u
b19maWxlKGFyZ3MpOgotICAgICAgICAgICAgcmV0dXJuICcnCi0gICAgICAgIHBvcnQuX2V4ZWN1
dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPW1vY2tfcnVuX2NvbW1hbmRfbm9f
ZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG9ydC5fZ2V0X2xhc3Rfc3RhY2t0cmFj
ZSgpLCAnJykKKyAgICBkZWYgdGVzdF9nZXRfZGV2aWNlc190d29fZGV2aWNlcyhzZWxmKToKKyAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21t
YW5kLm1vY2tfdHdvX2RldmljZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm1v
Y2tfcnVuX2NvbW1hbmQuX21vY2tfZGV2aWNlcywgcG9ydC5fZ2V0X2RldmljZXMoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgcG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKQor
CisgICAgZGVmIHRlc3RfZ2V0X2RldmljZV9zZXJpYWxfbm9fZGV2aWNlKHNlbGYpOgorICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQu
bW9ja19ub19kZXZpY2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJv
ciwgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwsIDApCisKKyAgICBkZWYgdGVzdF9nZXRfZGV2aWNl
X3NlcmlhbF9vbmVfZGV2aWNlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQorICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19vbmVfZGV2aWNlKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5tb2NrX3J1bl9jb21tYW5kLl9tb2NrX2RldmljZXNb
MF0sIHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhBc3NlcnRpb25FcnJvciwgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwsIDEpCisKKyAgICBkZWYg
dGVzdF9nZXRfZGV2aWNlX3NlcmlhbF90d29fZGV2aWNlcyhzZWxmKToKKyAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1vY2tfdHdv
X2RldmljZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm1vY2tfcnVuX2NvbW1h
bmQuX21vY2tfZGV2aWNlc1swXSwgcG9ydC5fZ2V0X2RldmljZV9zZXJpYWwoMCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubW9ja19ydW5fY29tbWFuZC5fbW9ja19kZXZpY2VzWzFd
LCBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
QXNzZXJ0aW9uRXJyb3IsIHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsLCAyKQorCisKK2NsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRV
cChzZWxmKToKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kID0gTW9ja1J1bkNvbW1hbmQo
KQorICAgICAgICBzZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19vbmVfZGV2aWNlKCkKKyAgICAg
ICAgc2VsZi5wb3J0ID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWRQb3J0KAorICAg
ICAgICAgICAgICAgIE1vY2tTeXN0ZW1Ib3N0KGV4ZWN1dGl2ZT1Nb2NrRXhlY3V0aXZlMihydW5f
Y29tbWFuZF9mbj1zZWxmLm1vY2tfcnVuX2NvbW1hbmQubW9ja19ydW5fY29tbWFuZF9mbikpLAor
ICAgICAgICAgICAgICAgICdjaHJvbWl1bS1hbmRyb2lkJykKKyAgICAgICAgc2VsZi5kcml2ZXIg
PSBjaHJvbWl1bV9hbmRyb2lkLkNocm9taXVtQW5kcm9pZERyaXZlcihzZWxmLnBvcnQsIHdvcmtl
cl9udW1iZXI9MCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2dldF9sYXN0X3N0
YWNrdHJhY2Uoc2VsZik6CisgICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX25vX3Rv
bWJzdG9uZV9kaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fZ2V0
X2xhc3Rfc3RhY2t0cmFjZSgpLCAnJykKIAotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2Nr
RXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj1DaHJvbWl1bUFuZHJvaWRQb3J0VGVzdC5tb2NrX3J1
bl9jb21tYW5kX2ZuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3J0Ll9nZXRfbGFzdF9z
dGFja3RyYWNlKCksCisgICAgICAgIHNlbGYubW9ja19ydW5fY29tbWFuZC5tb2NrX25vX3RvbWJz
dG9uZV9maWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2dldF9s
YXN0X3N0YWNrdHJhY2UoKSwgJycpCisKKyAgICAgICAgc2VsZi5tb2NrX3J1bl9jb21tYW5kLm1v
Y2tfdGVuX3RvbWJzdG9uZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZl
ci5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJ3
LS0tLS0tLSAxMDAwIDEwMDAgNDUzMTYgMjAxMi0wNC0yNyAxNjozMyB0b21ic3RvbmVfMDNcbicK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lXzAz
XG5tb2NrX2NvbnRlbnRzXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToK
LSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9ydC5fZXhlY3V0aXZl
ID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49Q2hyb21pdW1BbmRyb2lkUG9ydFRlc3Qu
bW9ja19ydW5fY29tbWFuZF9mbikKLSAgICAgICAgQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QubW9j
a19sb2djYXQgPSAnbG9nY2F0IGNvbnRlbnRzXG4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHBvcnQuX2dldF9jcmFzaF9sb2coJ2ZvbycsIDEyMzQsICdvdXQgYmFyXG5vdXQgYmF6XG4nLCAn
ZXJyIGJhclxuZXJyIGJhelxuJywgbmV3ZXJfdGhhbj1Ob25lKSwKKyAgICAgICAgc2VsZi5tb2Nr
X3J1bl9jb21tYW5kLm1vY2tfbG9nY2F0KCdsb2djYXQgY29udGVudHNcbicpCisgICAgICAgIHNl
bGYubW9ja19ydW5fY29tbWFuZC5tb2NrX3Rlbl90b21ic3RvbmVzKCkKKyAgICAgICAgc2VsZi5k
cml2ZXIuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gJ2ZvbycKKyAgICAgICAgc2VsZi5kcml2ZXIu
X2NyYXNoZWRfcGlkID0gMTIzNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZl
ci5fZ2V0X2NyYXNoX2xvZygnb3V0IGJhclxub3V0IGJhelxuJywgJ2VyciBiYXJcbmVyciBiYXpc
bicsIG5ld2VyX3RoYW49Tm9uZSksCiAgICAgICAgICAgICAoJ2VyciBiYXJcbicKICAgICAgICAg
ICAgICAnZXJyIGJhelxuJwogICAgICAgICAgICAgICcqKioqKioqKiogVG9tYnN0b25lIGZpbGU6
XG4nCkBAIC0xMjEsNyArMjEyLDEwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNo
cm9taXVtX3BvcnRfdGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2UpOgogICAgICAgICAgICAg
IHUnU1RERVJSOiAtcnctLS0tLS0tIDEwMDAgMTAwMCA0NTMxNiAyMDEyLTA0LTI3IDE2OjMzIHRv
bWJzdG9uZV8wM1xuJwogICAgICAgICAgICAgIHUnU1RERVJSOiAvZGF0YS90b21ic3RvbmVzL3Rv
bWJzdG9uZV8wM1xuJwogICAgICAgICAgICAgIHUnU1RERVJSOiBtb2NrX2NvbnRlbnRzXG4nKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG9ydC5fZ2V0X2NyYXNoX2xvZyhOb25lLCBOb25l
LCBOb25lLCBOb25lLCBuZXdlcl90aGFuPU5vbmUpLAorCisgICAgICAgIHNlbGYuZHJpdmVyLl9j
cmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5kcml2ZXIuX2NyYXNoZWRf
cGlkID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fZ2V0X2Ny
YXNoX2xvZyhOb25lLCBOb25lLCBuZXdlcl90aGFuPU5vbmUpLAogICAgICAgICAgICAgKCcqKioq
KioqKiogVG9tYnN0b25lIGZpbGU6XG4nCiAgICAgICAgICAgICAgJy1ydy0tLS0tLS0gMTAwMCAx
MDAwIDQ1MzE2IDIwMTItMDQtMjcgMTY6MzMgdG9tYnN0b25lXzAzXG4nCiAgICAgICAgICAgICAg
Jy9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lXzAzXG4nCkBAIC0xMzQsMTkgKzIyOCw5IEBAIGNs
YXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNocm9taXVtX3BvcnRfdGVzdGNhc2UuQ2hyb21p
dW1Qb3J0VGVzdENhc2UpOgogICAgICAgICAgICAgIHUnU1RERVJSOiAvZGF0YS90b21ic3RvbmVz
L3RvbWJzdG9uZV8wM1xuJwogICAgICAgICAgICAgIHUnU1RERVJSOiBtb2NrX2NvbnRlbnRzXG4n
KSkKIAotICAgIGRlZiB0ZXN0X2RyaXZlcl9jbWRfbGluZShzZWxmKToKLSAgICAgICAgIyBPdmVy
cmlkaW5nIFBvcnRUZXN0Q2FzZS50ZXN0X2NtZF9saW5lKCkuIFVzZSBDaHJvbWl1bUFuZHJvaWRE
cml2ZXJUZXN0LnRlc3RfY21kX2xpbmUoKSBpbnN0ZWFkLgotICAgICAgICByZXR1cm4KLQotCi1j
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBk
ZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIG1vY2tfcG9ydCA9IGNocm9taXVtX2FuZHJvaWQuQ2hy
b21pdW1BbmRyb2lkUG9ydChNb2NrU3lzdGVtSG9zdCgpLCAnY2hyb21pdW0tYW5kcm9pZCcpCi0g
ICAgICAgIHNlbGYuZHJpdmVyID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWREcml2
ZXIobW9ja19wb3J0LCB3b3JrZXJfbnVtYmVyPTAsIHBpeGVsX3Rlc3RzPVRydWUpCi0KICAgICBk
ZWYgdGVzdF9jbWRfbGluZShzZWxmKToKICAgICAgICAgY21kX2xpbmUgPSBzZWxmLmRyaXZlci5j
bWRfbGluZShUcnVlLCBbJ2FueXRoaW5nJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsn
YWRiJywgJ3NoZWxsJ10sIGNtZF9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2Fk
YicsICctcycsIHNlbGYubW9ja19ydW5fY29tbWFuZC5fbW9ja19kZXZpY2VzWzBdLCAnc2hlbGwn
XSwgY21kX2xpbmUpCiAKICAgICBkZWYgdGVzdF9kcnRfY21kX2xpbmUoc2VsZik6CiAgICAgICAg
IGNtZF9saW5lID0gc2VsZi5kcml2ZXIuX2RydF9jbWRfbGluZShUcnVlLCBbJy0tYSddKQpAQCAt
MTcxLDUgKzI1NSwyMiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX2NvbW1h
bmRfZnJvbV9kcml2ZXJfaW5wdXQoZHJpdmVyX2lucHV0KSwgZXhwZWN0ZWRfY29tbWFuZCkKIAog
CitjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIHRlc3RfdHdvX2RyaXZlcnMoc2VsZik6CisgICAgICAgIG1vY2tfcnVu
X2NvbW1hbmQgPSBNb2NrUnVuQ29tbWFuZCgpCisgICAgICAgIG1vY2tfcnVuX2NvbW1hbmQubW9j
a190d29fZGV2aWNlcygpCisgICAgICAgIHBvcnQgPSBjaHJvbWl1bV9hbmRyb2lkLkNocm9taXVt
QW5kcm9pZFBvcnQoCisgICAgICAgICAgICAgICAgTW9ja1N5c3RlbUhvc3QoZXhlY3V0aXZlPU1v
Y2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPW1vY2tfcnVuX2NvbW1hbmQubW9ja19ydW5fY29t
bWFuZF9mbikpLAorICAgICAgICAgICAgICAgICdjaHJvbWl1bS1hbmRyb2lkJykKKyAgICAgICAg
ZHJpdmVyMCA9IGNocm9taXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lkRHJpdmVyKHBvcnQsIHdv
cmtlcl9udW1iZXI9MCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKKyAgICAgICAgZHJpdmVyMSA9IGNocm9t
aXVtX2FuZHJvaWQuQ2hyb21pdW1BbmRyb2lkRHJpdmVyKHBvcnQsIHdvcmtlcl9udW1iZXI9MSwg
cGl4ZWxfdGVzdHM9VHJ1ZSkKKworICAgICAgICBjbWRfbGluZTAgPSBkcml2ZXIwLmNtZF9saW5l
KFRydWUsIFsnYW55dGhpbmcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydhZGInLCAn
LXMnLCBtb2NrX3J1bl9jb21tYW5kLl9tb2NrX2RldmljZXNbMF0sICdzaGVsbCddLCBjbWRfbGlu
ZTApCisKKyAgICAgICAgY21kX2xpbmUxID0gZHJpdmVyMS5jbWRfbGluZShUcnVlLCBbJ2FueXRo
aW5nJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnYWRiJywgJy1zJywgbW9ja19ydW5f
Y29tbWFuZC5fbW9ja19kZXZpY2VzWzFdLCAnc2hlbGwnXSwgY21kX2xpbmUxKQorCisKIGlmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4IDc4MTgy
M2I4ZDY3MGE2ZWI4ZTUyZTA3NjhiZTY2NGIxMWQ2MzAzM2MuLjc1NzU0NWYwMjhjY2UyZTU1YjE3
MDg0OWQ4MjgwNzEyMTgzNjdiOWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0xNjYsOCArMTY2LDcgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAKICAgICAgICAgY3Jhc2hfbG9nID0gTm9uZQogICAgICAgICBpZiBzZWxm
Lmhhc19jcmFzaGVkKCk6Ci0gICAgICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCwgY3Jhc2hf
bG9nID0gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFt
ZSwKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCwgdGV4dCwgc2VsZi5lcnJvcl9m
cm9tX3Rlc3QsIG5ld2VyX3RoYW49c3RhcnRfdGltZSkKKyAgICAgICAgICAgIHNlbGYuZXJyb3Jf
ZnJvbV90ZXN0LCBjcmFzaF9sb2cgPSBzZWxmLl9nZXRfY3Jhc2hfbG9nKHRleHQsIHNlbGYuZXJy
b3JfZnJvbV90ZXN0LCBuZXdlcl90aGFuPXN0YXJ0X3RpbWUpCiAKICAgICAgICAgICAgICMgSWYg
d2UgZG9uJ3QgZmluZCBhIGNyYXNoIGxvZyB1c2UgYSBwbGFjZWhvbGRlciBlcnJvciBtZXNzYWdl
IGluc3RlYWQuCiAgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgpAQCAtMTg4LDYgKzE4Nyw5
IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAgICAgY3Jhc2hlZF9wcm9jZXNzX25h
bWU9c2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUsCiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1z
ZWxmLl9jcmFzaGVkX3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZykKIAorICAgIGRlZiBfZ2V0X2Ny
YXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgICAgIHJldHVy
biBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBz
ZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisKICAgICAjIEZJ
WE1FOiBTZWVtcyB0aGlzIGNvdWxkIGp1c3QgYmUgaW5saW5lZCBpbnRvIGNhbGxlcnMuCiAgICAg
QGNsYXNzbWV0aG9kCiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlv
bik6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQppbmRleCA5ZGFmZTFkOTM4ZTExNzBlOThlN2IxYTZiODQxNDNmYTJk
NWFhMDNkLi5mYjU3OGIwZmFiY2IzNTE0MGFkMjBiMTQzMDYyYzM4NzI0OWEwYjk2IDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkKQEAgLTI0Niw4ICsyNDYsOSBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgog
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wZXItdGlsZS1wYWludGluZyIsCiAgICAg
ICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgaGVscD0iVXNlIHBlci10
aWxlIHBhaW50aW5nIG9mIGNvbXBvc2l0ZWQgcGFnZXMiKSwKLSAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi0tYWRiLWFyZ3MiLCB0eXBlPSJzdHJpbmciLAotICAgICAgICAgICAgaGVscD0i
QXJndW1lbnRzIHBhcnNlZCB0byBBbmRyb2lkIGFkYiwgdG8gc2VsZWN0IGRldmljZSwgZXRjLiIp
LAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1hZGItZGV2aWNlIiwKKyAgICAgICAg
ICAgIGFjdGlvbj0iYXBwZW5kIiwgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgIGhlbHA9IlJ1biBB
bmRyb2lkIGxheW91dCB0ZXN0cyBvbiB0aGVzZSBkZXZpY2VzLiIpLAogICAgIF0pKQogCiAgICAg
b3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoIkVGTC1zcGVjaWZpYyBPcHRpb25zIiwg
Wwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>