<?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>78627</bug_id>
          
          <creation_ts>2012-02-14 13:09:57 -0800</creation_ts>
          <short_desc>Implement an adb-based driver for the ChromiumAndroidPort</short_desc>
          <delta_ts>2012-02-15 02:07:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>78524</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>jnd</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556534</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 13:09:57 -0800</bug_when>
    <thetext>Implement an adb-based driver for the ChromiumAndroidPort</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556540</commentid>
    <comment_count>1</comment_count>
      <attachid>127025</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 13:14:06 -0800</bug_when>
    <thetext>Created attachment 127025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556550</commentid>
    <comment_count>2</comment_count>
      <attachid>127025</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-14 13:20:30 -0800</bug_when>
    <thetext>Comment on attachment 127025
Patch

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

This is going to need further lovin.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:371
&gt; +        if len(tombstones) &gt; 0:

I would have probably early-returned instead of indenting this long block.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:436
&gt; +            self._proc.stdout.read(2)

Should we assert that it is &apos;# &apos;?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:442
&gt; +            # When DumpRenderTree crashes, the Android debuggerd will stop the

Oh, the debuggerd!

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:480
&gt; +            driver_output.error += self._port._get_last_stacktrace()

private method on the port?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:494
&gt; +                # The pipe has already been closed, indicating abnormal
&gt; +                # situation occurred. Wait a while to allow the device to
&gt; +                # recover.
&gt; +                time.sleep(1)

And cross your fingers?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:497
&gt; +    def _test_shell_command(self, uri, timeoutms, checksum):

nit: I might hav enamed it timeout_ms instead.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:498
&gt; +        file_uri_preamble = &apos;file:///&apos;

I believe python has url library code for dealign with file-urls and this funtion doens&apos;t need to write its own. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556559</commentid>
    <comment_count>3</comment_count>
      <attachid>127025</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 13:32:18 -0800</bug_when>
    <thetext>Comment on attachment 127025
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:371
&gt;&gt; +        if len(tombstones) &gt; 0:
&gt; 
&gt; I would have probably early-returned instead of indenting this long block.

Fixenated.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:436
&gt;&gt; +            self._proc.stdout.read(2)
&gt; 
&gt; Should we assert that it is &apos;# &apos;?

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:480
&gt;&gt; +            driver_output.error += self._port._get_last_stacktrace()
&gt; 
&gt; private method on the port?

Fixed.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:494
&gt;&gt; +                time.sleep(1)
&gt; 
&gt; And cross your fingers?

Done

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:497
&gt;&gt; +    def _test_shell_command(self, uri, timeoutms, checksum):
&gt; 
&gt; nit: I might hav enamed it timeout_ms instead.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:498
&gt;&gt; +        file_uri_preamble = &apos;file:///&apos;
&gt; 
&gt; I believe python has url library code for dealign with file-urls and this funtion doens&apos;t need to write its own. :)

Do you have a particular one in mind?  We could use http://docs.python.org/library/urlparse.html, but I&apos;m not sure it would really buy us much.  We&apos;re just doing a translation from between host and device URIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556561</commentid>
    <comment_count>4</comment_count>
      <attachid>127032</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 13:33:07 -0800</bug_when>
    <thetext>Created attachment 127032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556731</commentid>
    <comment_count>5</comment_count>
      <attachid>127032</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-14 16:00:33 -0800</bug_when>
    <thetext>Comment on attachment 127032
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:504
&gt; +            uri = FILE_TEST_URI_PREFIX + uri[len(file_uri_preamble) + len(self._port.layout_tests_dir()):]

Does uri = FILE_TEST_URI_PREFIX + self.uri_to_test(uri) work here (I think it should ...)?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:507
&gt; +    def _write_command_and_read_line(self, input=None):

Does it make sense to get rid of this function and add an _expected_uri() method to Driver that is used in ChromiumDriver.py on line 547 instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556749</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 16:26:02 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 127032 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127032&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:504
&gt; &gt; +            uri = FILE_TEST_URI_PREFIX + uri[len(file_uri_preamble) + len(self._port.layout_tests_dir()):]
&gt; 
&gt; Does uri = FILE_TEST_URI_PREFIX + self.uri_to_test(uri) work here (I think it should ...)?

That seems likely.  The only strange case would be HTTP tests, but those should be filtered out already.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:507
&gt; &gt; +    def _write_command_and_read_line(self, input=None):
&gt; 
&gt; Does it make sense to get rid of this function and add an _expected_uri() method to Driver that is used in ChromiumDriver.py on line 547 instead?

I&apos;ll check.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556776</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 16:57:05 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:507
&gt; &gt; &gt; +    def _write_command_and_read_line(self, input=None):
&gt; &gt; 
&gt; &gt; Does it make sense to get rid of this function and add an _expected_uri() method to Driver that is used in ChromiumDriver.py on line 547 instead?
&gt; 
&gt; I&apos;ll check.

This definitely looks worthwhile, but I&apos;m going to do it in a followup patch if that&apos;s ok with you because it requires some refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556777</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 16:57:18 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 127032 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127032&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:504
&gt; &gt; &gt; +            uri = FILE_TEST_URI_PREFIX + uri[len(file_uri_preamble) + len(self._port.layout_tests_dir()):]
&gt; &gt; 
&gt; &gt; Does uri = FILE_TEST_URI_PREFIX + self.uri_to_test(uri) work here (I think it should ...)?
&gt; 
&gt; That seems likely.  The only strange case would be HTTP tests, but those should be filtered out already.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556779</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-14 17:00:16 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; This definitely looks worthwhile, but I&apos;m going to do it in a followup patch if that&apos;s ok with you because it requires some refactoring.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556780</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 17:00:51 -0800</bug_when>
    <thetext>Committed r107756: &lt;http://trac.webkit.org/changeset/107756&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127025</attachid>
            <date>2012-02-14 13:14:06 -0800</date>
            <delta_ts>2012-02-14 13:33:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78627-20120214131414.patch</filename>
            <type>text/plain</type>
            <size>12032</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNzcyOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMyIEBACisyMDEyLTAyLTE0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wbGVtZW50IGFuIGFkYi1iYXNlZCBkcml2ZXIgZm9yIHRoZSBDaHJvbWl1bUFu
ZHJvaWRQb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODYyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgZHJpdmVyIG1vc3RseSBqdXN0IHdpcmVzIHVwIHRoZSBDaHJvbWl1bURyaXZlciB0aHJv
dWdoIGFkYi4gIEluCisgICAgICAgIHNvbWUgY2FzZXMsIGl0IHRyYW5zbGF0ZXMgcHJvdG9jb2wg
ZWxlbWVudHMsIHN1Y2ggYXMgVVJJcywgc28gdGhhdCB0aGUKKyAgICAgICAgcmVzdCBvZiB3ZWJr
aXRweSBpcyBpbnN1bGF0ZWQgZnJvbSB0aGUgInJlbW90ZW5lc3MiIG9mIHRoZSB0YXJnZXQgZGV2
aWNlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5zdGFydF9oZWxw
ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5fZHJpdmVyX2NsYXNzKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3VwZGF0ZV92ZXJzaW9uKToKKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZFBvcnQuX2dldF9zdGRlcnIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9y
dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfbGFzdF9zdGFja3RyYWNlKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3RlYXJkb3duX3BlcmZvcm1hbmNlKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydCk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIucnVuX3Rlc3QpOgorICAgICAgICAoQ2hy
b21pdW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVy
Ll90ZXN0X3NoZWxsX2NvbW1hbmQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl93
cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9vdXRwdXRfaW1hZ2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9oYXNf
Y3Jhc2hfaGludCk6CisKIDIwMTItMDItMTQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBGaW5pc2ggaW1wbGVtZW50aW5nIHN0YXJ0X2hlbHBlciBmb3IgQ2hyb21p
dW1BbmRyb2lkUG9ydApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQkocmV2aXNpb24gMTA3
NzI1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9hbmRyb2lkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgREVWSUNFX0ZJ
UlNUX0ZBTExCQUNLX0ZPTlQgPSAnL3N5c3RlbS9mbwogIyAyLiBwb2ludGluZyB0byBzb21lIGZp
bGVzIHRoYXQgYXJlIHB1c2hlZCB0byB0aGUgZGV2aWNlIGZvciB0ZXN0cyB0aGF0CiAjIGRvbid0
IHdvcmsgb24gZmlsZS1vdmVyLWh0dHAgKGUuZy4gYmxvYiBwcm90b2NvbCB0ZXN0cykuCiBERVZJ
Q0VfTEFZT1VUX1RFU1RTX0RJUiA9IChERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ3RoaXJkX3Bh
cnR5L1dlYktpdC9MYXlvdXRUZXN0cy8nKQorRklMRV9URVNUX1VSSV9QUkVGSVggPSAnZmlsZTov
LycgKyBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUgogCiAjIFRlc3QgcmVzb3VyY2VzIHRoYXQgbmVl
ZCB0byBiZSBhY2Nlc3NlZCBhcyBmaWxlcyBkaXJlY3RseS4KICMgRWFjaCBpdGVtIGNhbiBiZSB0
aGUgcmVsYXRpdmUgcGF0aCBvZiBhIGRpcmVjdG9yeSBvciBhIGZpbGUuCkBAIC0yMDYsNiArMjA3
LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbQogICAgICAgICAj
IE90aGVyIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFkYiBw
dXNoLgogICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICct
cCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFX1NPVVJDRV9ST09UX0RJ
UiArICdjaHJvbWUnXSkKKwogICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQogICAgICAg
ICBzZWxmLl9wdXNoX2ZvbnRzKCkKICAgICAgICAgc2VsZi5fc2V0dXBfc3lzdGVtX2ZvbnRfZm9y
X3Rlc3QoKQpAQCAtMjU5LDYgKzI2MSw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hy
b21pdW0uQ2hyb20KICAgICBkZWYgX3NodXRfZG93bl9odHRwX3NlcnZlcihzZWxmLCBwaWQpOgog
ICAgICAgICByZXR1cm4gc2VsZi5faG9zdF9wb3J0Ll9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIocGlk
KQogCisgICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6CisgICAgICAgIHJldHVybiBDaHJvbWl1
bUFuZHJvaWREcml2ZXIKKwogICAgIGRlZiBfcHVzaF9leGVjdXRhYmxlKHNlbGYpOgogICAgICAg
ICBkcnRfaG9zdF9wYXRoID0gc2VsZi5fcGF0aF90b19kcml2ZXIoKQogICAgICAgICBmb3J3YXJk
ZXJfaG9zdF9wYXRoID0gc2VsZi5fcGF0aF90b19oZWxwZXIoKQpAQCAtMzI5LDYgKzMzNCw5IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgZXhjZXB0
OgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICBkZWYgX3VwZGF0ZV92ZXJzaW9uKHNl
bGYsIGRpciwgdmVyc2lvbik6CisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2VjaG8gJWQgPiAlc1ZFUlNJT04nICUgKHZlcnNpb24sIGRpcildKQorCiAgICAgZGVmIF9y
dW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgogICAgICAgICBp
ZiBpZ25vcmVfZXJyb3I6CiAgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gc2VsZi5fZXhlY3V0
aXZlLmlnbm9yZV9lcnJvcgpAQCAtMzUzLDYgKzM2MSwzMiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJv
aWRQb3J0KGNocm9taXVtLkNocm9tCiAgICAgICAgICAgICAgICAgcGlkID0gbGluZS5zcGxpdCgp
WzFdCiAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAna2ls
bCcsIHBpZF0pCiAKKyAgICBkZWYgX2dldF9zdGRlcnIoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBERVZJQ0VfRFJUX1NUREVSUl0s
IGlnbm9yZV9lcnJvcj1UcnVlKQorCisgICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNlbGYp
OgorICAgICAgICBzdGFja3RyYWNlID0gJycKKyAgICAgICAgdG9tYnN0b25lcyA9IHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMnXSkK
KyAgICAgICAgdG9tYnN0b25lcyA9IHRvbWJzdG9uZXMucnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAg
ICAgICAgaWYgbGVuKHRvbWJzdG9uZXMpID4gMDoKKyAgICAgICAgICAgIGxhc3RfdG9tYnN0b25l
ID0gdG9tYnN0b25lc1swXS5zcGxpdCgpCisgICAgICAgICAgICBmb3IgdG9tYnN0b25lIGluIHRv
bWJzdG9uZXNbMTpdOgorICAgICAgICAgICAgICAgICMgRm9ybWF0IG9mIGZpZWxkczoKKyAgICAg
ICAgICAgICAgICAjIDAgICAgICAgICAgMSAgICAgIDIgICAgICAzICAgICA0ICAgICAgICAgIDUg
ICAgIDYKKyAgICAgICAgICAgICAgICAjIHBlcm1pc3Npb24gdWlkICAgIGdpZCAgICBzaXplICBk
YXRlICAgICAgIHRpbWUgIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgIyAtcnctLS0tLS0tIDEw
MDAgICAxMDAwICAgNDU4NTkgMjAxMS0wNC0xMyAwNjowMCB0b21ic3RvbmVfMDAKKyAgICAgICAg
ICAgICAgICBmaWVsZHMgPSB0b21ic3RvbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIChm
aWVsZHNbNF0gKyBmaWVsZHNbNV0gPj0gbGFzdF90b21ic3RvbmVbNF0gKyBsYXN0X3RvbWJzdG9u
ZVs1XSk6CisgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9tYnN0b25lID0gZmllbGRzCisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAg
ICAgIyBVc2UgQW5kcm9pZCB0b29sIHZlbmRvci9nb29nbGUvdG9vbHMvc3RhY2sgdG8gY29udmVy
dCB0aGUgcmF3CisgICAgICAgICAgICAjIHN0YWNrIHRyYWNlIGludG8gYSBodW1hbiByZWFkYWJs
ZSBmb3JtYXQsIGlmIG5lZWRlZC4KKyAgICAgICAgICAgICMgSXQgdGFrZXMgYSBsb25nIHRpbWUs
IHNvIGRvbid0IGRvIGl0IGhlcmUuCisgICAgICAgICAgICBzdGFja3RyYWNlID0gc2VsZi5fcnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRhL3RvbWJzdG9uZXMvJyArIGxhc3Rf
dG9tYnN0b25lWzZdXSkKKyAgICAgICAgcmV0dXJuIHN0YWNrdHJhY2UKKwogICAgIGRlZiBfc2V0
dXBfcGVyZm9ybWFuY2Uoc2VsZik6CiAgICAgICAgICMgRGlzYWJsZSBDUFUgc2NhbGluZyBhbmQg
ZHJvcCByYW0gY2FjaGUgdG8gcmVkdWNlIG5vaXNlIGluIHRlc3RzCiAgICAgICAgIGlmIG5vdCBz
ZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcjoKQEAgLTM2MywzICszOTcsMTMzIEBAIGNsYXNzIENocm9t
aXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgaWYgc2VsZi5fb3JpZ2luYWxf
Z292ZXJub3I6CiAgICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdl
Y2hvJywgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3IsIFNDQUxJTkdfR09WRVJOT1JdKQogICAgICAg
ICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKKworCitjbGFzcyBDaHJvbWl1bUFuZHJv
aWREcml2ZXIoY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6Cisg
ICAgICAgIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtl
cl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQorICAgICAgICBpZiBzZWxmLl9pbWFn
ZV9wYXRoOgorICAgICAgICAgICAgc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGggPSBERVZJQ0VfRFJU
X0RJUiArIHBvcnQuaG9zdC5maWxlc3lzdGVtLmJhc2VuYW1lKHNlbGYuX2ltYWdlX3BhdGgpCisK
KyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgdGhlIG9yaWdpbmFsIGNv
bW1hbmQgbGluZSBpbnRvIHRvIHR3byBwYXJ0czoKKyAgICAgICAgIyAtIHRoZSAnYWRiIHNoZWxs
JyBjb21tYW5kIGxpbmUgdG8gc3RhcnQgYW4gaW50ZXJhY3RpdmUgYWRiIHNoZWxsOworICAgICAg
ICAjIC0gdGhlIER1bXBSZW5kZXJUcmVlIGNvbW1hbmQgbGluZSB0byBzZW5kIHRvIHRoZSBhZGIg
c2hlbGwuCisgICAgICAgIG9yaWdpbmFsX2NtZCA9IHNlbGYuY21kX2xpbmUoKQorICAgICAgICBz
aGVsbF9jbWQgPSBbXQorICAgICAgICBkcnRfYXJncyA9IFtdCisgICAgICAgIHBhdGhfdG9fZHJp
dmVyID0gc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKQorICAgICAgICByZWFkaW5nX2FyZ3Nf
YmVmb3JlX2RyaXZlciA9IFRydWUKKyAgICAgICAgZm9yIHBhcmFtIGluIG9yaWdpbmFsX2NtZDoK
KyAgICAgICAgICAgIGlmIHJlYWRpbmdfYXJnc19iZWZvcmVfZHJpdmVyOgorICAgICAgICAgICAg
ICAgIGlmIHBhcmFtID09IHBhdGhfdG9fZHJpdmVyOgorICAgICAgICAgICAgICAgICAgICByZWFk
aW5nX2FyZ3NfYmVmb3JlX2RyaXZlciA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgc2hlbGxfY21kLmFwcGVuZChwYXJhbSkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgaWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1waXhlbC10ZXN0cz0n
KToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAnLS1waXhlbC10ZXN0cz0nICsgc2VsZi5f
ZGV2aWNlX2ltYWdlX3BhdGgKKyAgICAgICAgICAgICAgICBkcnRfYXJncy5hcHBlbmQocGFyYW0p
CisKKyAgICAgICAgc2hlbGxfY21kICs9IHNlbGYuX3BvcnQuX2FkYl9jb21tYW5kCisgICAgICAg
IHNoZWxsX2NtZC5hcHBlbmQoJ3NoZWxsJykKKyAgICAgICAgcmV0cmllcyA9IDAKKyAgICAgICAg
d2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIGFkYiBzaGVsbCBm
b3IgRHVtcFJlbmRlclRyZWU6ICcgKyAnICcuam9pbihzaGVsbF9jbWQpKQorICAgICAgICAgICAg
ZXhlY3V0aXZlID0gc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZQorICAgICAgICAgICAgc2VsZi5f
cHJvYyA9IGV4ZWN1dGl2ZS5Qb3BlbihzaGVsbF9jbWQsIHN0ZGluPWV4ZWN1dGl2ZS5QSVBFLCBz
dGRvdXQ9ZXhlY3V0aXZlLlBJUEUsIHN0ZGVycj1leGVjdXRpdmUuU1RET1VULCBjbG9zZV9mZHM9
VHJ1ZSkKKyAgICAgICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBwcm9tcHQgKCcjICcpIHRv
IGVuc3VyZSBhZGIgc2hlbGwgcmVhZHkuCisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5y
ZWFkKDIpCisgICAgICAgICAgICAjIFNvbWUgdGVzdHMgcmVseSBvbiB0aGlzIHRvIHByb2R1Y2Ug
cHJvcGVyIG51bWJlciBmb3JtYXQgZXRjLiwKKyAgICAgICAgICAgICMgZS5nLiBmYXN0L3NwZWVj
aC9pbnB1dC1hcHBlYXJhbmNlLW51bWJlcmFuZHNwZWVjaC5odG1sLgorICAgICAgICAgICAgc2Vs
Zi5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCJleHBvcnQgTENfQ1RZUEU9J2VuX1VTJ1xu
IikKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZSgiZXhwb3J0
IENMQVNTUEFUSD0nL2RhdGEvZHJ0L0R1bXBSZW5kZXJUcmVlLmphcidcbiIpCisKKyAgICAgICAg
ICAgICMgV2hlbiBEdW1wUmVuZGVyVHJlZSBjcmFzaGVzLCB0aGUgQW5kcm9pZCBkZWJ1Z2dlcmQg
d2lsbCBzdG9wIHRoZQorICAgICAgICAgICAgIyBwcm9jZXNzIGJlZm9yZSBkdW1waW5nIHN0YWNr
IHRvIGxvZy90b21ic3RvbmUgZmlsZSBhbmQgdGVybWluYXRpbmcKKyAgICAgICAgICAgICMgdGhl
IHByb2Nlc3MuIFNsZWVwIDEgc2Vjb25kIChsb25nIGVub3VnaCBmb3IgZGVidWdnZXJkIHRvIGR1
bXAKKyAgICAgICAgICAgICMgc3RhY2spIGJlZm9yZSBleGl0aW5nIHRoZSBzaGVsbCB0byBlbnN1
cmUgdGhlIHByb2Nlc3MgaGFzIHF1aXQsCisgICAgICAgICAgICAjIG90aGVyd2lzZSB0aGUgZXhp
dCB3aWxsIGZhaWwgYmVjYXVzZSAiWW91IGhhdmUgc3RvcHBlZCBqb2JzIi4KKyAgICAgICAgICAg
IGRydF9jbWQgPSAnJXMgJXMgMj4lcztzbGVlcCAxO2V4aXRcbicgJSAoREVWSUNFX0RSVF9QQVRI
LCAnICcuam9pbihkcnRfYXJncyksIERFVklDRV9EUlRfU1RERVJSKQorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnU3RhcnRpbmcgRHVtcFJlbmRlclRyZWU6ICcgKyBkcnRfY21kKQorCisgICAgICAg
ICAgICAjIFdhaXQgdW50aWwgRFJUIGVjaG9zICcjUkVBRFknLgorICAgICAgICAgICAgb3V0cHV0
ID0gJycKKyAgICAgICAgICAgIChsaW5lLCBjcmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5kX2Fu
ZF9yZWFkX2xpbmUoZHJ0X2NtZCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBjcmFzaCBhbmQgbGlu
ZS5yc3RyaXAoKSAhPSAnI1JFQURZJzoKKyAgICAgICAgICAgICAgICBpZiBsaW5lID09ICcnOiAg
IyBFT0Ygb3IgY3Jhc2hlZAorICAgICAgICAgICAgICAgICAgICBjcmFzaCA9IFRydWUKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGluZQorICAg
ICAgICAgICAgICAgICAgICAobGluZSwgY3Jhc2gpID0gc2VsZi5fd3JpdGVfY29tbWFuZF9hbmRf
cmVhZF9saW5lKCkKKworICAgICAgICAgICAgaWYgY3Jhc2g6CisgICAgICAgICAgICAgICAgIyBT
b21ldGltZXMgdGhlIGRldmljZSBpcyBpbiB1bnN0YWJsZSBzdGF0ZSAobWF5IGJlIG91dCBvZgor
ICAgICAgICAgICAgICAgICMgbWVtb3J5PykgYW5kIGtpbGxzIER1bXBSZW5kZXJUcmVlIGp1c3Qg
YWZ0ZXIgaXQgaXMgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICAjIFRyeSB0byBzdG9wIGFuZCBz
dGFydCBpdCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3Rh
cnQgRHVtcFJlbmRlclRyZWU6IFxuJXNcbiVzXG4nICUgKG91dHB1dCwgc2VsZi5fcG9ydC5fZ2V0
X3N0ZGVycigpKSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAg
IHJldHJpZXMgKz0gMQorICAgICAgICAgICAgICAgIGlmIHJldHJpZXMgPiAyOgorICAgICAgICAg
ICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVkIG11bHRpcGxlIHRpbWVzIHRv
IHN0YXJ0IER1bXBSZW5kZXJUcmVlJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0KToKKyAgICAg
ICAgZHJpdmVyX291dHB1dCA9IGNocm9taXVtLkNocm9taXVtRHJpdmVyLnJ1bl90ZXN0KHNlbGYs
IGRyaXZlcl9pbnB1dCkKKyAgICAgICAgIyBGSVhNRTogUmV0cmlldmUgc3RkZXJyIGZyb20gdGhl
IHRhcmdldC4KKyAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgICMg
RmV0Y2ggdGhlIHN0YWNrIHRyYWNlIGZyb20gdGhlIHRvbWJzdG9uZSBmaWxlLgorICAgICAgICAg
ICAgIyBGSVhNRTogc29tZXRpbWVzIHRoZSBjcmFzaCBkb2Vzbid0IHJlYWxseSBoYXBwZW4gc28g
dGhhdCBubworICAgICAgICAgICAgIyB0b21ic3RvbmUgaXMgZ2VuZXJhdGVkLiBJbiB0aGF0IGNh
c2Ugd2UgZmV0Y2ggdGhlIHdyb25nIHN0YWNrCisgICAgICAgICAgICAjIHRyYWNlLgorICAgICAg
ICAgICAgZHJpdmVyX291dHB1dC5lcnJvciArPSBzZWxmLl9wb3J0Ll9nZXRfbGFzdF9zdGFja3Ry
YWNlKCkKKyAgICAgICAgcmV0dXJuIGRyaXZlcl9vdXRwdXQKKworICAgIGRlZiBzdG9wKHNlbGYp
OgorICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBEdW1wUmVuZGVyVHJlZScpCisgICAgICAg
IGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICAjIFNlbmQgYW4gZXhwbGljaXQgUVVJVCBjb21t
YW5kIGJlY2F1c2UgY2xvc2luZyB0aGUgcGlwZSBjYW4ndCBsZXQKKyAgICAgICAgICAgICMgRHVt
cFJlbmRlclRyZWUgb24gQW5kcm9pZCBxdWl0IGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoJ1FVSVRcbicpCisgICAg
ICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoZSBwaXBlIGhhcyBh
bHJlYWR5IGJlZW4gY2xvc2VkLCBpbmRpY2F0aW5nIGFibm9ybWFsCisgICAgICAgICAgICAgICAg
IyBzaXR1YXRpb24gb2NjdXJyZWQuIFdhaXQgYSB3aGlsZSB0byBhbGxvdyB0aGUgZGV2aWNlIHRv
CisgICAgICAgICAgICAgICAgIyByZWNvdmVyLgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAo
MSkKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuc3RvcChzZWxmKQorCisgICAgZGVm
IF90ZXN0X3NoZWxsX2NvbW1hbmQoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGNoZWNrc3VtKToKKyAg
ICAgICAgZmlsZV91cmlfcHJlYW1ibGUgPSAnZmlsZTovLy8nCisgICAgICAgIGlmIHVyaS5zdGFy
dHN3aXRoKGZpbGVfdXJpX3ByZWFtYmxlKToKKyAgICAgICAgICAgICMgQ29udmVydCB0aGUgaG9z
dCB1cmkgdG8gYSBkZXZpY2UgdXJpLiBTZWUgY29tbWVudCBvZgorICAgICAgICAgICAgIyBERVZJ
Q0VfTEFZT1VUX1RFU1RTX0RJUiBmb3IgZGV0YWlscy4KKyAgICAgICAgICAgICMgTm90IG92ZXJy
aWRpbmcgUG9ydC5maWxlbmFtZV90b191cmkoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlCisg
ICAgICAgICAgICAjIGxpbmtzIGluIHRoZSBodG1sIHJlcG9ydCBwb2ludCB0byBkZXZpY2UgcGF0
aHMuCisgICAgICAgICAgICB1cmkgPSBGSUxFX1RFU1RfVVJJX1BSRUZJWCArIHVyaVtsZW4oZmls
ZV91cmlfcHJlYW1ibGUpICsgbGVuKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpKTpdCisg
ICAgICAgIHJldHVybiBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5fdGVzdF9zaGVsbF9jb21tYW5k
KHNlbGYsIHVyaSwgdGltZW91dG1zLCBjaGVja3N1bSkKKworICAgIGRlZiBfd3JpdGVfY29tbWFu
ZF9hbmRfcmVhZF9saW5lKHNlbGYsIGlucHV0PU5vbmUpOgorICAgICAgICAobGluZSwgY3Jhc2gp
ID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZShz
ZWxmLCBpbnB1dCkKKyAgICAgICAgdXJsX21hcmtlciA9ICcjVVJMOicKKyAgICAgICAgaWYgbm90
IGNyYXNoIGFuZCBsaW5lLnN0YXJ0c3dpdGgodXJsX21hcmtlcikgYW5kIGxpbmUuZmluZChGSUxF
X1RFU1RfVVJJX1BSRUZJWCkgPT0gbGVuKHVybF9tYXJrZXIpOgorICAgICAgICAgICAgIyBDb252
ZXJ0IHRoZSBkZXZpY2UgdGVzdCB1cmkgYmFjayB0byBob3N0IHVyaSBvdGhlcndpc2UKKyAgICAg
ICAgICAgICMgY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIucnVuX3Rlc3QoKSB3aWxsIGNvbXBsYWlu
LgorICAgICAgICAgICAgbGluZSA9ICcjVVJMOmZpbGU6Ly8lcy8lcycgJSAoc2VsZi5fcG9ydC5s
YXlvdXRfdGVzdHNfZGlyKCksIGxpbmVbbGVuKHVybF9tYXJrZXIpICsgbGVuKEZJTEVfVEVTVF9V
UklfUFJFRklYKTpdKQorICAgICAgICBpZiBub3QgY3Jhc2ggYW5kIHNlbGYuX2hhc19jcmFzaF9o
aW50KGxpbmUpOgorICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCisgICAgICAgIHJldHVybiAobGlu
ZSwgY3Jhc2gpCisKKyAgICBkZWYgX291dHB1dF9pbWFnZShzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5faW1hZ2VfcGF0aDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ3B1bGxpbmcgZnJvbSBkZXZp
Y2U6ICVzIHRvICVzJyAlIChzZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCwgc2VsZi5faW1hZ2VfcGF0
aCkpCisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9wdWxsX2Zyb21fZGV2aWNlKHNlbGYuX2Rldmlj
ZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoLCBpZ25vcmVfZXJyb3I9VHJ1ZSkKKyAgICAg
ICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9vdXRwdXRfaW1hZ2Uoc2VsZikKKwor
ICAgIGRlZiBfaGFzX2NyYXNoX2hpbnQoc2VsZiwgbGluZSk6CisgICAgICAgICMgV2hlbiBEUlQg
Y3Jhc2hlcywgaXQgc2VuZHMgYSBzaWduYWwgdG8gQW5kcm9pZCBEZWJ1Z2dlcmQsIGxpa2UKKyAg
ICAgICAgIyBTSUdTRUdWLCBTSUdGUEUsIGV0Yy4gV2hlbiBEZWJ1Z2dlcmQgcmVjZWl2ZXMgdGhl
IHNpZ25hbCwgaXQgc3RvcHMgRFJUCisgICAgICAgICMgKHdoaWNoIGNhdXNlcyBTaGVsbCB0byBv
dXRwdXQgYSBtZXNzYWdlKSwgYW5kIGR1bXBzIHRoZSBzdGFjayBzdHJhY2UuCisgICAgICAgICMg
V2UgdXNlIHRoZSBTaGVsbCBvdXRwdXQgYXMgYSBjcmFzaCBoaW50LgorICAgICAgICByZXR1cm4g
bGluZSBpcyBub3QgTm9uZSBhbmQgbGluZS5maW5kKCdbMV0gKyBTdG9wcGVkIChzaWduYWwpJykg
Pj0gMAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127032</attachid>
            <date>2012-02-14 13:33:07 -0800</date>
            <delta_ts>2012-02-14 16:00:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78627-20120214133315.patch</filename>
            <type>text/plain</type>
            <size>11993</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNzcyOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMyIEBACisyMDEyLTAyLTE0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wbGVtZW50IGFuIGFkYi1iYXNlZCBkcml2ZXIgZm9yIHRoZSBDaHJvbWl1bUFu
ZHJvaWRQb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODYyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgZHJpdmVyIG1vc3RseSBqdXN0IHdpcmVzIHVwIHRoZSBDaHJvbWl1bURyaXZlciB0aHJv
dWdoIGFkYi4gIEluCisgICAgICAgIHNvbWUgY2FzZXMsIGl0IHRyYW5zbGF0ZXMgcHJvdG9jb2wg
ZWxlbWVudHMsIHN1Y2ggYXMgVVJJcywgc28gdGhhdCB0aGUKKyAgICAgICAgcmVzdCBvZiB3ZWJr
aXRweSBpcyBpbnN1bGF0ZWQgZnJvbSB0aGUgInJlbW90ZW5lc3MiIG9mIHRoZSB0YXJnZXQgZGV2
aWNlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5zdGFydF9oZWxw
ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5fZHJpdmVyX2NsYXNzKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3VwZGF0ZV92ZXJzaW9uKToKKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZFBvcnQuX2dldF9zdGRlcnIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9y
dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfbGFzdF9zdGFja3RyYWNlKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3RlYXJkb3duX3BlcmZvcm1hbmNlKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydCk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIucnVuX3Rlc3QpOgorICAgICAgICAoQ2hy
b21pdW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVy
Ll90ZXN0X3NoZWxsX2NvbW1hbmQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl93
cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9vdXRwdXRfaW1hZ2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9oYXNf
Y3Jhc2hfaGludCk6CisKIDIwMTItMDItMTQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBGaW5pc2ggaW1wbGVtZW50aW5nIHN0YXJ0X2hlbHBlciBmb3IgQ2hyb21p
dW1BbmRyb2lkUG9ydApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQkocmV2aXNpb24gMTA3
NzI1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9hbmRyb2lkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgREVWSUNFX0ZJ
UlNUX0ZBTExCQUNLX0ZPTlQgPSAnL3N5c3RlbS9mbwogIyAyLiBwb2ludGluZyB0byBzb21lIGZp
bGVzIHRoYXQgYXJlIHB1c2hlZCB0byB0aGUgZGV2aWNlIGZvciB0ZXN0cyB0aGF0CiAjIGRvbid0
IHdvcmsgb24gZmlsZS1vdmVyLWh0dHAgKGUuZy4gYmxvYiBwcm90b2NvbCB0ZXN0cykuCiBERVZJ
Q0VfTEFZT1VUX1RFU1RTX0RJUiA9IChERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ3RoaXJkX3Bh
cnR5L1dlYktpdC9MYXlvdXRUZXN0cy8nKQorRklMRV9URVNUX1VSSV9QUkVGSVggPSAnZmlsZTov
LycgKyBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUgogCiAjIFRlc3QgcmVzb3VyY2VzIHRoYXQgbmVl
ZCB0byBiZSBhY2Nlc3NlZCBhcyBmaWxlcyBkaXJlY3RseS4KICMgRWFjaCBpdGVtIGNhbiBiZSB0
aGUgcmVsYXRpdmUgcGF0aCBvZiBhIGRpcmVjdG9yeSBvciBhIGZpbGUuCkBAIC0yMDYsNiArMjA3
LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbQogICAgICAgICAj
IE90aGVyIGRpcmVjdG9yaWVzIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFkYiBw
dXNoLgogICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdta2RpcicsICct
cCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFX1NPVVJDRV9ST09UX0RJ
UiArICdjaHJvbWUnXSkKKwogICAgICAgICBzZWxmLl9wdXNoX2V4ZWN1dGFibGUoKQogICAgICAg
ICBzZWxmLl9wdXNoX2ZvbnRzKCkKICAgICAgICAgc2VsZi5fc2V0dXBfc3lzdGVtX2ZvbnRfZm9y
X3Rlc3QoKQpAQCAtMjU5LDYgKzI2MSw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hy
b21pdW0uQ2hyb20KICAgICBkZWYgX3NodXRfZG93bl9odHRwX3NlcnZlcihzZWxmLCBwaWQpOgog
ICAgICAgICByZXR1cm4gc2VsZi5faG9zdF9wb3J0Ll9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIocGlk
KQogCisgICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6CisgICAgICAgIHJldHVybiBDaHJvbWl1
bUFuZHJvaWREcml2ZXIKKwogICAgIGRlZiBfcHVzaF9leGVjdXRhYmxlKHNlbGYpOgogICAgICAg
ICBkcnRfaG9zdF9wYXRoID0gc2VsZi5fcGF0aF90b19kcml2ZXIoKQogICAgICAgICBmb3J3YXJk
ZXJfaG9zdF9wYXRoID0gc2VsZi5fcGF0aF90b19oZWxwZXIoKQpAQCAtMzI5LDYgKzMzNCw5IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgZXhjZXB0
OgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICBkZWYgX3VwZGF0ZV92ZXJzaW9uKHNl
bGYsIGRpciwgdmVyc2lvbik6CisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2VjaG8gJWQgPiAlc1ZFUlNJT04nICUgKHZlcnNpb24sIGRpcildKQorCiAgICAgZGVmIF9y
dW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgogICAgICAgICBp
ZiBpZ25vcmVfZXJyb3I6CiAgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gc2VsZi5fZXhlY3V0
aXZlLmlnbm9yZV9lcnJvcgpAQCAtMzUzLDYgKzM2MSwzMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJv
aWRQb3J0KGNocm9taXVtLkNocm9tCiAgICAgICAgICAgICAgICAgcGlkID0gbGluZS5zcGxpdCgp
WzFdCiAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAna2ls
bCcsIHBpZF0pCiAKKyAgICBkZWYgZ2V0X3N0ZGVycihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsIERFVklDRV9EUlRfU1RERVJSXSwg
aWdub3JlX2Vycm9yPVRydWUpCisKKyAgICBkZWYgZ2V0X2xhc3Rfc3RhY2t0cmFjZShzZWxmKToK
KyAgICAgICAgdG9tYnN0b25lcyA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xz
JywgJy1uJywgJy9kYXRhL3RvbWJzdG9uZXMnXSkKKyAgICAgICAgdG9tYnN0b25lcyA9IHRvbWJz
dG9uZXMucnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgaWYgbm90IHRvbWJzdG9uZXM6Cisg
ICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgbGFzdF90b21ic3RvbmUgPSB0b21ic3RvbmVz
WzBdLnNwbGl0KCkKKyAgICAgICAgZm9yIHRvbWJzdG9uZSBpbiB0b21ic3RvbmVzWzE6XToKKyAg
ICAgICAgICAgICMgRm9ybWF0IG9mIGZpZWxkczoKKyAgICAgICAgICAgICMgMCAgICAgICAgICAx
ICAgICAgMiAgICAgIDMgICAgIDQgICAgICAgICAgNSAgICAgNgorICAgICAgICAgICAgIyBwZXJt
aXNzaW9uIHVpZCAgICBnaWQgICAgc2l6ZSAgZGF0ZSAgICAgICB0aW1lICBmaWxlbmFtZQorICAg
ICAgICAgICAgIyAtcnctLS0tLS0tIDEwMDAgICAxMDAwICAgNDU4NTkgMjAxMS0wNC0xMyAwNjow
MCB0b21ic3RvbmVfMDAKKyAgICAgICAgICAgIGZpZWxkcyA9IHRvbWJzdG9uZS5zcGxpdCgpCisg
ICAgICAgICAgICBpZiAoZmllbGRzWzRdICsgZmllbGRzWzVdID49IGxhc3RfdG9tYnN0b25lWzRd
ICsgbGFzdF90b21ic3RvbmVbNV0pOgorICAgICAgICAgICAgICAgIGxhc3RfdG9tYnN0b25lID0g
ZmllbGRzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAg
ICAgIyBVc2UgQW5kcm9pZCB0b29sIHZlbmRvci9nb29nbGUvdG9vbHMvc3RhY2sgdG8gY29udmVy
dCB0aGUgcmF3CisgICAgICAgICMgc3RhY2sgdHJhY2UgaW50byBhIGh1bWFuIHJlYWRhYmxlIGZv
cm1hdCwgaWYgbmVlZGVkLgorICAgICAgICAjIEl0IHRha2VzIGEgbG9uZyB0aW1lLCBzbyBkb24n
dCBkbyBpdCBoZXJlLgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAnY2F0JywgJy9kYXRhL3RvbWJzdG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkKKwog
ICAgIGRlZiBfc2V0dXBfcGVyZm9ybWFuY2Uoc2VsZik6CiAgICAgICAgICMgRGlzYWJsZSBDUFUg
c2NhbGluZyBhbmQgZHJvcCByYW0gY2FjaGUgdG8gcmVkdWNlIG5vaXNlIGluIHRlc3RzCiAgICAg
ICAgIGlmIG5vdCBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vcjoKQEAgLTM2MywzICszOTYsMTM0IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgaWYgc2Vs
Zi5fb3JpZ2luYWxfZ292ZXJub3I6CiAgICAgICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQo
WydzaGVsbCcsICdlY2hvJywgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3IsIFNDQUxJTkdfR09WRVJO
T1JdKQogICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKKworCitjbGFzcyBD
aHJvbWl1bUFuZHJvaWREcml2ZXIoY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91
dD1GYWxzZSk6CisgICAgICAgIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9faW5pdF9fKHNlbGYs
IHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQorICAgICAgICBp
ZiBzZWxmLl9pbWFnZV9wYXRoOgorICAgICAgICAgICAgc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGgg
PSBERVZJQ0VfRFJUX0RJUiArIHBvcnQuaG9zdC5maWxlc3lzdGVtLmJhc2VuYW1lKHNlbGYuX2lt
YWdlX3BhdGgpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgdGhl
IG9yaWdpbmFsIGNvbW1hbmQgbGluZSBpbnRvIHRvIHR3byBwYXJ0czoKKyAgICAgICAgIyAtIHRo
ZSAnYWRiIHNoZWxsJyBjb21tYW5kIGxpbmUgdG8gc3RhcnQgYW4gaW50ZXJhY3RpdmUgYWRiIHNo
ZWxsOworICAgICAgICAjIC0gdGhlIER1bXBSZW5kZXJUcmVlIGNvbW1hbmQgbGluZSB0byBzZW5k
IHRvIHRoZSBhZGIgc2hlbGwuCisgICAgICAgIG9yaWdpbmFsX2NtZCA9IHNlbGYuY21kX2xpbmUo
KQorICAgICAgICBzaGVsbF9jbWQgPSBbXQorICAgICAgICBkcnRfYXJncyA9IFtdCisgICAgICAg
IHBhdGhfdG9fZHJpdmVyID0gc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKQorICAgICAgICBy
ZWFkaW5nX2FyZ3NfYmVmb3JlX2RyaXZlciA9IFRydWUKKyAgICAgICAgZm9yIHBhcmFtIGluIG9y
aWdpbmFsX2NtZDoKKyAgICAgICAgICAgIGlmIHJlYWRpbmdfYXJnc19iZWZvcmVfZHJpdmVyOgor
ICAgICAgICAgICAgICAgIGlmIHBhcmFtID09IHBhdGhfdG9fZHJpdmVyOgorICAgICAgICAgICAg
ICAgICAgICByZWFkaW5nX2FyZ3NfYmVmb3JlX2RyaXZlciA9IEZhbHNlCisgICAgICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxfY21kLmFwcGVuZChwYXJhbSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1w
aXhlbC10ZXN0cz0nKToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAnLS1waXhlbC10ZXN0
cz0nICsgc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGgKKyAgICAgICAgICAgICAgICBkcnRfYXJncy5h
cHBlbmQocGFyYW0pCisKKyAgICAgICAgc2hlbGxfY21kICs9IHNlbGYuX3BvcnQuX2FkYl9jb21t
YW5kCisgICAgICAgIHNoZWxsX2NtZC5hcHBlbmQoJ3NoZWxsJykKKyAgICAgICAgcmV0cmllcyA9
IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5n
IGFkYiBzaGVsbCBmb3IgRHVtcFJlbmRlclRyZWU6ICcgKyAnICcuam9pbihzaGVsbF9jbWQpKQor
ICAgICAgICAgICAgZXhlY3V0aXZlID0gc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZQorICAgICAg
ICAgICAgc2VsZi5fcHJvYyA9IGV4ZWN1dGl2ZS5Qb3BlbihzaGVsbF9jbWQsIHN0ZGluPWV4ZWN1
dGl2ZS5QSVBFLCBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUsIHN0ZGVycj1leGVjdXRpdmUuU1RET1VU
LCBjbG9zZV9mZHM9VHJ1ZSkKKyAgICAgICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBwcm9t
cHQgKCcjICcpIHRvIGVuc3VyZSBhZGIgc2hlbGwgcmVhZHkuCisgICAgICAgICAgICBwcm9tcHQg
PSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkKDIpCisgICAgICAgICAgICBhc3NlcnQocHJvbXB0ID09
ICcjICcpCisgICAgICAgICAgICAjIFNvbWUgdGVzdHMgcmVseSBvbiB0aGlzIHRvIHByb2R1Y2Ug
cHJvcGVyIG51bWJlciBmb3JtYXQgZXRjLiwKKyAgICAgICAgICAgICMgZS5nLiBmYXN0L3NwZWVj
aC9pbnB1dC1hcHBlYXJhbmNlLW51bWJlcmFuZHNwZWVjaC5odG1sLgorICAgICAgICAgICAgc2Vs
Zi5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCJleHBvcnQgTENfQ1RZUEU9J2VuX1VTJ1xu
IikKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZSgiZXhwb3J0
IENMQVNTUEFUSD0nL2RhdGEvZHJ0L0R1bXBSZW5kZXJUcmVlLmphcidcbiIpCisKKyAgICAgICAg
ICAgICMgV2hlbiBEdW1wUmVuZGVyVHJlZSBjcmFzaGVzLCB0aGUgQW5kcm9pZCBkZWJ1Z2dlcmQg
d2lsbCBzdG9wIHRoZQorICAgICAgICAgICAgIyBwcm9jZXNzIGJlZm9yZSBkdW1waW5nIHN0YWNr
IHRvIGxvZy90b21ic3RvbmUgZmlsZSBhbmQgdGVybWluYXRpbmcKKyAgICAgICAgICAgICMgdGhl
IHByb2Nlc3MuIFNsZWVwIDEgc2Vjb25kIChsb25nIGVub3VnaCBmb3IgZGVidWdnZXJkIHRvIGR1
bXAKKyAgICAgICAgICAgICMgc3RhY2spIGJlZm9yZSBleGl0aW5nIHRoZSBzaGVsbCB0byBlbnN1
cmUgdGhlIHByb2Nlc3MgaGFzIHF1aXQsCisgICAgICAgICAgICAjIG90aGVyd2lzZSB0aGUgZXhp
dCB3aWxsIGZhaWwgYmVjYXVzZSAiWW91IGhhdmUgc3RvcHBlZCBqb2JzIi4KKyAgICAgICAgICAg
IGRydF9jbWQgPSAnJXMgJXMgMj4lcztzbGVlcCAxO2V4aXRcbicgJSAoREVWSUNFX0RSVF9QQVRI
LCAnICcuam9pbihkcnRfYXJncyksIERFVklDRV9EUlRfU1RERVJSKQorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnU3RhcnRpbmcgRHVtcFJlbmRlclRyZWU6ICcgKyBkcnRfY21kKQorCisgICAgICAg
ICAgICAjIFdhaXQgdW50aWwgRFJUIGVjaG9zICcjUkVBRFknLgorICAgICAgICAgICAgb3V0cHV0
ID0gJycKKyAgICAgICAgICAgIChsaW5lLCBjcmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5kX2Fu
ZF9yZWFkX2xpbmUoZHJ0X2NtZCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBjcmFzaCBhbmQgbGlu
ZS5yc3RyaXAoKSAhPSAnI1JFQURZJzoKKyAgICAgICAgICAgICAgICBpZiBsaW5lID09ICcnOiAg
IyBFT0Ygb3IgY3Jhc2hlZAorICAgICAgICAgICAgICAgICAgICBjcmFzaCA9IFRydWUKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGluZQorICAg
ICAgICAgICAgICAgICAgICAobGluZSwgY3Jhc2gpID0gc2VsZi5fd3JpdGVfY29tbWFuZF9hbmRf
cmVhZF9saW5lKCkKKworICAgICAgICAgICAgaWYgY3Jhc2g6CisgICAgICAgICAgICAgICAgIyBT
b21ldGltZXMgdGhlIGRldmljZSBpcyBpbiB1bnN0YWJsZSBzdGF0ZSAobWF5IGJlIG91dCBvZgor
ICAgICAgICAgICAgICAgICMgbWVtb3J5PykgYW5kIGtpbGxzIER1bXBSZW5kZXJUcmVlIGp1c3Qg
YWZ0ZXIgaXQgaXMgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICAjIFRyeSB0byBzdG9wIGFuZCBz
dGFydCBpdCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3Rh
cnQgRHVtcFJlbmRlclRyZWU6IFxuJXNcbiVzXG4nICUgKG91dHB1dCwgc2VsZi5fcG9ydC5nZXRf
c3RkZXJyKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAg
cmV0cmllcyArPSAxCisgICAgICAgICAgICAgICAgaWYgcmV0cmllcyA+IDI6CisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgbXVsdGlwbGUgdGltZXMgdG8g
c3RhcnQgRHVtcFJlbmRlclRyZWUnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4KKworICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgorICAgICAg
ICBkcml2ZXJfb3V0cHV0ID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIucnVuX3Rlc3Qoc2VsZiwg
ZHJpdmVyX2lucHV0KQorICAgICAgICAjIEZJWE1FOiBSZXRyaWV2ZSBzdGRlcnIgZnJvbSB0aGUg
dGFyZ2V0LgorICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LmNyYXNoOgorICAgICAgICAgICAgIyBG
ZXRjaCB0aGUgc3RhY2sgdHJhY2UgZnJvbSB0aGUgdG9tYnN0b25lIGZpbGUuCisgICAgICAgICAg
ICAjIEZJWE1FOiBzb21ldGltZXMgdGhlIGNyYXNoIGRvZXNuJ3QgcmVhbGx5IGhhcHBlbiBzbyB0
aGF0IG5vCisgICAgICAgICAgICAjIHRvbWJzdG9uZSBpcyBnZW5lcmF0ZWQuIEluIHRoYXQgY2Fz
ZSB3ZSBmZXRjaCB0aGUgd3Jvbmcgc3RhY2sKKyAgICAgICAgICAgICMgdHJhY2UuCisgICAgICAg
ICAgICBkcml2ZXJfb3V0cHV0LmVycm9yICs9IHNlbGYuX3BvcnQuZ2V0X2xhc3Rfc3RhY2t0cmFj
ZSgpCisgICAgICAgIHJldHVybiBkcml2ZXJfb3V0cHV0CisKKyAgICBkZWYgc3RvcChzZWxmKToK
KyAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgRHVtcFJlbmRlclRyZWUnKQorICAgICAgICBp
ZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgIyBTZW5kIGFuIGV4cGxpY2l0IFFVSVQgY29tbWFu
ZCBiZWNhdXNlIGNsb3NpbmcgdGhlIHBpcGUgY2FuJ3QgbGV0CisgICAgICAgICAgICAjIER1bXBS
ZW5kZXJUcmVlIG9uIEFuZHJvaWQgcXVpdCBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKCdRVUlUXG4nKQorICAgICAg
ICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgIyBUaGUgcGlwZSBoYXMgYWxy
ZWFkeSBiZWVuIGNsb3NlZCwgaW5kaWNhdGluZyBhYm5vcm1hbAorICAgICAgICAgICAgICAgICMg
c2l0dWF0aW9uIG9jY3VycmVkLiBXYWl0IGEgd2hpbGUgdG8gYWxsb3cgdGhlIGRldmljZSB0bwor
ICAgICAgICAgICAgICAgICMgcmVjb3Zlci4gKmZpbmdlcnMgY3Jvc3NlZCoKKyAgICAgICAgICAg
ICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGNocm9taXVtLkNocm9taXVtRHJpdmVyLnN0b3Ao
c2VsZikKKworICAgIGRlZiBfdGVzdF9zaGVsbF9jb21tYW5kKHNlbGYsIHVyaSwgdGltZW91dF9t
cywgY2hlY2tzdW0pOgorICAgICAgICBmaWxlX3VyaV9wcmVhbWJsZSA9ICdmaWxlOi8vLycKKyAg
ICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoZmlsZV91cmlfcHJlYW1ibGUpOgorICAgICAgICAgICAg
IyBDb252ZXJ0IHRoZSBob3N0IHVyaSB0byBhIGRldmljZSB1cmkuIFNlZSBjb21tZW50IG9mCisg
ICAgICAgICAgICAjIERFVklDRV9MQVlPVVRfVEVTVFNfRElSIGZvciBkZXRhaWxzLgorICAgICAg
ICAgICAgIyBOb3Qgb3ZlcnJpZGluZyBQb3J0LmZpbGVuYW1lX3RvX3VyaSgpIGJlY2F1c2Ugd2Ug
ZG9uJ3Qgd2FudCB0aGUKKyAgICAgICAgICAgICMgbGlua3MgaW4gdGhlIGh0bWwgcmVwb3J0IHBv
aW50IHRvIGRldmljZSBwYXRocy4KKyAgICAgICAgICAgIHVyaSA9IEZJTEVfVEVTVF9VUklfUFJF
RklYICsgdXJpW2xlbihmaWxlX3VyaV9wcmVhbWJsZSkgKyBsZW4oc2VsZi5fcG9ydC5sYXlvdXRf
dGVzdHNfZGlyKCkpOl0KKyAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl90
ZXN0X3NoZWxsX2NvbW1hbmQoc2VsZiwgdXJpLCB0aW1lb3V0X21zLCBjaGVja3N1bSkKKworICAg
IGRlZiBfd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKHNlbGYsIGlucHV0PU5vbmUpOgorICAg
ICAgICAobGluZSwgY3Jhc2gpID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuX3dyaXRlX2NvbW1h
bmRfYW5kX3JlYWRfbGluZShzZWxmLCBpbnB1dCkKKyAgICAgICAgdXJsX21hcmtlciA9ICcjVVJM
OicKKyAgICAgICAgaWYgbm90IGNyYXNoIGFuZCBsaW5lLnN0YXJ0c3dpdGgodXJsX21hcmtlcikg
YW5kIGxpbmUuZmluZChGSUxFX1RFU1RfVVJJX1BSRUZJWCkgPT0gbGVuKHVybF9tYXJrZXIpOgor
ICAgICAgICAgICAgIyBDb252ZXJ0IHRoZSBkZXZpY2UgdGVzdCB1cmkgYmFjayB0byBob3N0IHVy
aSBvdGhlcndpc2UKKyAgICAgICAgICAgICMgY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIucnVuX3Rl
c3QoKSB3aWxsIGNvbXBsYWluLgorICAgICAgICAgICAgbGluZSA9ICcjVVJMOmZpbGU6Ly8lcy8l
cycgJSAoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIGxpbmVbbGVuKHVybF9tYXJrZXIp
ICsgbGVuKEZJTEVfVEVTVF9VUklfUFJFRklYKTpdKQorICAgICAgICBpZiBub3QgY3Jhc2ggYW5k
IHNlbGYuX2hhc19jcmFzaF9oaW50KGxpbmUpOgorICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCisg
ICAgICAgIHJldHVybiAobGluZSwgY3Jhc2gpCisKKyAgICBkZWYgX291dHB1dF9pbWFnZShzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5faW1hZ2VfcGF0aDoKKyAgICAgICAgICAgIF9sb2cuZGVidWco
J3B1bGxpbmcgZnJvbSBkZXZpY2U6ICVzIHRvICVzJyAlIChzZWxmLl9kZXZpY2VfaW1hZ2VfcGF0
aCwgc2VsZi5faW1hZ2VfcGF0aCkpCisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9wdWxsX2Zyb21f
ZGV2aWNlKHNlbGYuX2RldmljZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoLCBpZ25vcmVf
ZXJyb3I9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9vdXRw
dXRfaW1hZ2Uoc2VsZikKKworICAgIGRlZiBfaGFzX2NyYXNoX2hpbnQoc2VsZiwgbGluZSk6Cisg
ICAgICAgICMgV2hlbiBEUlQgY3Jhc2hlcywgaXQgc2VuZHMgYSBzaWduYWwgdG8gQW5kcm9pZCBE
ZWJ1Z2dlcmQsIGxpa2UKKyAgICAgICAgIyBTSUdTRUdWLCBTSUdGUEUsIGV0Yy4gV2hlbiBEZWJ1
Z2dlcmQgcmVjZWl2ZXMgdGhlIHNpZ25hbCwgaXQgc3RvcHMgRFJUCisgICAgICAgICMgKHdoaWNo
IGNhdXNlcyBTaGVsbCB0byBvdXRwdXQgYSBtZXNzYWdlKSwgYW5kIGR1bXBzIHRoZSBzdGFjayBz
dHJhY2UuCisgICAgICAgICMgV2UgdXNlIHRoZSBTaGVsbCBvdXRwdXQgYXMgYSBjcmFzaCBoaW50
LgorICAgICAgICByZXR1cm4gbGluZSBpcyBub3QgTm9uZSBhbmQgbGluZS5maW5kKCdbMV0gKyBT
dG9wcGVkIChzaWduYWwpJykgPj0gMAo=
</data>
<flag name="review"
          id="129042"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>