<?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>92299</bug_id>
          
          <creation_ts>2012-07-25 14:14:17 -0700</creation_ts>
          <short_desc>[Chromium-Android] NRWT better handling of DRT deadlocks and crashes</short_desc>
          <delta_ts>2012-07-27 11:42:58 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Xianzhu Wang">wangxianzhu</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>peter</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zhenghao</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>678462</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-25 14:14:17 -0700</bug_when>
    <thetext>The current chromium-android NRWT driver has some problems handling deadlocks and crashes:

1. deadlock detector thread kills the driver: The _deadlock_detector() method running in the deadlock detector thread holds a reference of the driver. When the driver exists before deadlock detector thread exits, the driver won&apos;t be destroyed because of the reference held by the deadlock detector thread. When the thread exits, stop() will be called from __del__ of the driver which runs &apos;adb force-stop org.chromium.native_tests&apos;. This causes the current running drt app to be unexpectedly killed.

2. The retry-after-killed logic is not good: the related code is scattered, and the retry counter is global instead of counting the current retries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678480</commentid>
    <comment_count>1</comment_count>
      <attachid>154448</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-25 14:32:07 -0700</bug_when>
    <thetext>Created attachment 154448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679695</commentid>
    <comment_count>2</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-26 13:23:33 -0700</bug_when>
    <thetext>Dirk, could you review the patch? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679707</commentid>
    <comment_count>3</comment_count>
      <attachid>154448</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 13:34:45 -0700</bug_when>
    <thetext>Comment on attachment 154448
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:402
&gt; +        _log.debug(&apos;Run adb result: &apos; + result[:80])

nit: any particular reason to limit this to [:80], instead of the whole output?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:516
&gt;              time.sleep(1)

typically in a slow-spin look like this I&apos;ll key this off of time instead of a count, e.g.
deadline = time.time() + DRT_START_STO_SECS:
while time.time() &lt; deadline:
   if ...:
     break
   time.sleep(0.1)

the advantage here is that your sleep granularity isn&apos;t quite so coarse; also, I think the logic can be a bit clearer. 

You have these slow-spins in several places in the code; it would probably be a good idea to wrap them into a loop_with_timeout() function or something to reuse the code to ensure consistency.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:548
&gt; +                time.sleep(1)

same comment re: using deadlines instead of a range and a fixed sleep interval ...

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:592
&gt; +        raise AssertionError(&apos;DumpRenderTree is killed by Android for too many times!&apos;)

why do you need to retry the test? is there anything else running on the android device that might be causing OOMs and/or causing the DRT to get killed? It seems like you should just treat this as a crash and return and let the rest of the infrastructure in NRWT deal with handling potential flakiness?

&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:234
&gt; +                    _log.debug(&apos;unexpected EOF of stdout&apos;)

why did you change these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679744</commentid>
    <comment_count>4</comment_count>
      <attachid>154448</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-26 14:14:08 -0700</bug_when>
    <thetext>Comment on attachment 154448
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:402
&gt;&gt; +        _log.debug(&apos;Run adb result: &apos; + result[:80])
&gt; 
&gt; nit: any particular reason to limit this to [:80], instead of the whole output?

Some outputs of commands like &apos;adb logcat -d&apos;, &apos;cat /data/tombstones/tombstones01&apos; are very long, and normally these outputs will be logged after the run_adb_command() call. So I limit the length of output here.

Will add comment here.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:516
&gt;&gt;              time.sleep(1)
&gt; 
&gt; typically in a slow-spin look like this I&apos;ll key this off of time instead of a count, e.g.
&gt; deadline = time.time() + DRT_START_STO_SECS:
&gt; while time.time() &lt; deadline:
&gt;    if ...:
&gt;      break
&gt;    time.sleep(0.1)
&gt; 
&gt; the advantage here is that your sleep granularity isn&apos;t quite so coarse; also, I think the logic can be a bit clearer. 
&gt; 
&gt; You have these slow-spins in several places in the code; it would probably be a good idea to wrap them into a loop_with_timeout() function or something to reuse the code to ensure consistency.

Good suggestion. Will make the change.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:592
&gt;&gt; +        raise AssertionError(&apos;DumpRenderTree is killed by Android for too many times!&apos;)
&gt; 
&gt; why do you need to retry the test? is there anything else running on the android device that might be causing OOMs and/or causing the DRT to get killed? It seems like you should just treat this as a crash and return and let the rest of the infrastructure in NRWT deal with handling potential flakiness?

The Android system kills processes frequently when needed so it doesn&apos;t always mean a failure of the test. Hao added the loop when he observed some unexpected failures. However, now we run DRT as an apk so the situation might be different. Perhaps we can try to remove the loop and see how it works.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:234
&gt;&gt; +                    _log.debug(&apos;unexpected EOF of stdout&apos;)
&gt; 
&gt; why did you change these?

With _log.warning() the message will be printed on each crashing test on Android, which looks not good. I think a crashing test is a normal case for the driver script, so changed it to debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679745</commentid>
    <comment_count>5</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-26 14:15:05 -0700</bug_when>
    <thetext>Hao, could you provide more information about retry on killed by the system? How often did it occur?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679750</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 14:17:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:234
&gt; &gt;&gt; +                    _log.debug(&apos;unexpected EOF of stdout&apos;)
&gt; &gt; 
&gt; &gt; why did you change these?
&gt; 
&gt; With _log.warning() the message will be printed on each crashing test on Android, which looks not good. I think a crashing test is a normal case for the driver script, so changed it to debug.

I was thinking this might have to do with crashes; if this happens after a crash, I frankly don&apos;t care at all. Can you leave this as _log.warning() but only log it if the subprocess is still alive?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679777</commentid>
    <comment_count>7</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-26 14:37:11 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I was thinking this might have to do with crashes; if this happens after a crash, I frankly don&apos;t care at all. Can you leave this as _log.warning() but only log it if the subprocess is still alive?

It is almost always the case on Android. The pipe almost always terminates before the &apos;adb shell&apos; process when the test crashes. On Android with the _log.warning() (even with &apos;and not self.poll()&apos;) condition, every crash will output the message.

However, this is not a big issue, and I&apos;d be glad to keep the warning if it&apos;s useful for other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679782</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 14:43:37 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I was thinking this might have to do with crashes; if this happens after a crash, I frankly don&apos;t care at all. Can you leave this as _log.warning() but only log it if the subprocess is still alive?
&gt; 
&gt; It is almost always the case on Android. The pipe almost always terminates before the &apos;adb shell&apos; process when the test crashes. On Android with the _log.warning() (even with &apos;and not self.poll()&apos;) condition, every crash will output the message.
&gt; 
&gt; However, this is not a big issue, and I&apos;d be glad to keep the warning if it&apos;s useful for other ports.

Sorry, maybe I wasn&apos;t clear. If we hit this condition, and the test didn&apos;t crash (on any port), this indicates a bug. If the test did crash, then I don&apos;t care about this condition at all (because I wouldn&apos;t expect there to be a #EOF). So can you leave this as a warning, but only print it if the test didn&apos;t crash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679790</commentid>
    <comment_count>9</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-26 14:55:52 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Sorry, maybe I wasn&apos;t clear.
&gt; If we hit this condition, and the test didn&apos;t crash (on any port), this indicates a bug.

This is not true on Android, because the condition itself is our method to detect crash. The &apos;adb shell&apos; subprocess will be almost always live when a test crashes. When we detect EOF, we know the crash and will kill the &apos;adb shell&apos; subprocess. 

&gt; If the test did crash, then I don&apos;t care about this condition at all (because I wouldn&apos;t expect there to be a #EOF). So can you leave this as a warning, but only print it if the test didn&apos;t crash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679801</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 15:07:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Sorry, maybe I wasn&apos;t clear.
&gt; &gt; If we hit this condition, and the test didn&apos;t crash (on any port), this indicates a bug.
&gt; 
&gt; This is not true on Android, because the condition itself is our method to detect crash. The &apos;adb shell&apos; subprocess will be almost always live when a test crashes. When we detect EOF, we know the crash and will kill the &apos;adb shell&apos; subprocess. 


Oh, I see. Well, the warning indicates a bug on the other platforms, so either we need to provide a way to override this for android, or leave it alone :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679864</commentid>
    <comment_count>11</comment_count>
      <attachid>154775</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-26 15:50:34 -0700</bug_when>
    <thetext>Created attachment 154775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679871</commentid>
    <comment_count>12</comment_count>
      <attachid>154775</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 15:58:51 -0700</bug_when>
    <thetext>Comment on attachment 154775
Patch

much cleaner. thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680059</commentid>
    <comment_count>13</comment_count>
      <attachid>154775</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-26 20:33:36 -0700</bug_when>
    <thetext>Comment on attachment 154775
Patch

Rejecting attachment 154775 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 134927 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
48&gt;At revision 134927.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13378119</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680071</commentid>
    <comment_count>14</comment_count>
      <attachid>154775</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-26 20:58:09 -0700</bug_when>
    <thetext>Comment on attachment 154775
Patch

OOPS! Won&apos;t CQ update the OOPS line? Try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680118</commentid>
    <comment_count>15</comment_count>
      <attachid>154775</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-26 22:10:49 -0700</bug_when>
    <thetext>Comment on attachment 154775
Patch

Rejecting attachment 154775 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 134927 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
48&gt;At revision 134927.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13373177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680130</commentid>
    <comment_count>16</comment_count>
      <attachid>154775</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-26 22:36:47 -0700</bug_when>
    <thetext>Comment on attachment 154775
Patch

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

&gt; Tools/ChangeLog:14
&gt; +        Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).

You need to remove this line yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680715</commentid>
    <comment_count>17</comment_count>
      <attachid>154967</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-27 09:04:51 -0700</bug_when>
    <thetext>Created attachment 154967
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680717</commentid>
    <comment_count>18</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-27 09:05:40 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 154775 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154775&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:14
&gt; &gt; +        Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).
&gt; 
&gt; You need to remove this line yourself.

Oh, I missed that OOPS. I should have removed it when editing ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680880</commentid>
    <comment_count>19</comment_count>
      <attachid>154967</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 11:42:53 -0700</bug_when>
    <thetext>Comment on attachment 154967
Patch

Clearing flags on attachment: 154967

Committed r123900: &lt;http://trac.webkit.org/changeset/123900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680881</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 11:42:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154448</attachid>
            <date>2012-07-25 14:32:07 -0700</date>
            <delta_ts>2012-07-26 15:50:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92299-20120725143157.patch</filename>
            <type>text/plain</type>
            <size>12536</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjYxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODVhMmFlOWE1ODlhMzdhZWZhZjA1ZDgyZjI2ZmNiMzg4
ZTBmZmZlZS4uYTgyM2VhOTQyNDJlMzJkMTQ0YjNjMzRmMDM4OTRkYjE2NmRmYTNiMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMw
IEBACisyMDEyLTA3LTI1ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIE5SV1QgYmV0dGVyIGhhbmRsaW5nIG9mIERS
VCBkZWFkbG9ja3MgYW5kIGNyYXNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyMjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgMS4gQ2hhbmdlZCB0aGUgZGVhZGxvY2sgZGV0ZWN0b3IgdGhyZWFkIHRh
cmdldCBmcm9tIGEgbWV0aG9kIG9mIGRyaXZlciB0byBhIGZ1bmN0aW9uIHRvIGF2b2lkIGl0cyBy
ZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICAgIGN1cnJlbnQgZHJpdmVyIChzZWUgdGhlIGJ1ZyBm
b3IgdGhlIHByb2JsZW0gb2YgdGhlIHJlZmVyZW5jZS4KKyAgICAgICAgMi4gTGV0IHRoZSBkZWFk
bG9jayBkZXRlY3RvciB0aHJlYWQgZXhpdCBlYXJseSB3aGVuIHRoZSBub3JtYWxfc3RhcnR1cF9l
dmVudCBpcyBzZXQgdG8gYXZvaWQgaXQgZnJvbSBibG9ja2luZyB0aGUgbWFpbiB0aHJlYWQgd2hl
biB0aGUgbWFpbiB0aHJlYWQgaXMgZXhpdGluZy4KKyAgICAgICAgMy4gQ2xlYW5lZCB1cCBhbmQg
Y29ycmVjdGVkIHRoZSBsb2dpYyBhYm91dCByZXRyeS1hZnRlci1raWxsLgorICAgICAgICA0LiBV
c2UgdGhlICJmb3IgaSBpbiByYW5nZShuKSIgc3R5bGUgc3VnZ2VzdGVkIGJ5IGRwcmFua2UgaW4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTI0IGluIHNldmVyYWwg
ZnVuY3Rpb25zLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5OgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9ydW5f
YWRiX2NvbW1hbmQpOiBSZWR1Y2VkIHRoZSB2ZXJib3NlIG91dHB1dC4KKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2
ZXIuX3N0YXJ0KTogQ2hhbmdlZCB0aGUgcmV0cnkgbG9vcCBzdHlsZS4KKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6IENoYW5nZWQgdGhlIGxvb3Agc3R5bGUgYW5k
IGNvZGUgcmVsYXRlZCB0byBkZWFkbG9jayBkZXRlY3Rvci4KKyAgICAgICAgKENocm9taXVtQW5k
cm9pZERyaXZlci5fc3RhcnRfb25jZS5kZWFkbG9ja19kZXRlY3Rvcik6IE1vdmVkIHRoZSBvcmln
aW5hbCBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2RlYWRsb2NrX2RldGVjdG9yKCkgaGVyZS4KKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5ydW5fdGVzdCk6IENsZWFuZWQgdXAgYW5kIGNv
cnJlY3RlZCB0aGUgbG9naWMgYWJvdXQgcmV0cnktYWZ0ZXIta2lsbC4KKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5zdG9wKTogQ2hhbmdlZCB0aGUgbG9vcCBzdHlsZS4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5Ogor
ICAgICAgICAoU2VydmVyUHJvY2Vzcy5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNf
dXNpbmdfc2VsZWN0KTogQ2hhbmdlZCBsb2dnaW5nIGxldmVsIG9mICJ1bmV4cGVjdGVkIEVPRiIg
ZnJvbSB3YXJuIHRvIGRlYnVnIHRvIGF2b2lkIGl0IGZyb20gcG9sbHV0ZSB0aGUgb3V0cHV0Lgor
CiAyMDEyLTA3LTI1ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gZG9uJ3QgdXNlIHdlYmtpdF9zdXBwb3J0IG1ldGhvZHMgZGlyZWN0
bHkgZnJvbSB0ZXN0IHJ1bm5lcnMgYnV0IHRocm91Z2ggdGhlIHRlc3QgZGVsZWdhdGUKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
YW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fYW5kcm9pZC5weQppbmRleCA0NDQ4NjM1Zjc0MDA5NjZlYTQ2MjE1MmJhZGIyNTlhNmM2
ZjBjYWEwLi5lZTk1NTY0MWQ1ZTY3ZDg0OTBkOTY4MDI5NTFiZTNjMmNkYTlmYjJhIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2Fu
ZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0xNzcsNyArMTc3LDYgQEAgY2xhc3MgQ2hyb21pdW1BbmRy
b2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBhZGJfYXJncyA9IHNlbGYu
Z2V0X29wdGlvbignYWRiX2FyZ3MnKQogICAgICAgICBpZiBhZGJfYXJnczoKICAgICAgICAgICAg
IHNlbGYuX2FkYl9jb21tYW5kICs9IHNobGV4LnNwbGl0KGFkYl9hcmdzKQotICAgICAgICBzZWxm
Ll9kcnRfcmV0cnlfYWZ0ZXJfa2lsbGVkID0gMAogCiAgICAgZGVmIGRlZmF1bHRfdGltZW91dF9t
cyhzZWxmKToKICAgICAgICAgIyBBbmRyb2lkIHBsYXRmb3JtIGhhcyBsZXNzIGNvbXB1dGluZyBw
b3dlciB0aGFuIGRlc2t0b3AgcGxhdGZvcm1zLgpAQCAtNDAwLDcgKzM5OSw3IEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgZWxzZToK
ICAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBOb25lCiAgICAgICAgIHJlc3VsdCA9IHNlbGYu
X2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCArIGNtZCwgZXJyb3JfaGFu
ZGxlcj1lcnJvcl9oYW5kbGVyKQotICAgICAgICBfbG9nLmRlYnVnKCdSdW4gYWRiIHJlc3VsdDpc
bicgKyByZXN1bHQpCisgICAgICAgIF9sb2cuZGVidWcoJ1J1biBhZGIgcmVzdWx0OiAnICsgcmVz
dWx0Wzo4MF0pCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfbGlua19kZXZpY2Vf
ZmlsZShzZWxmLCBmcm9tX2ZpbGUsIHRvX2ZpbGUsIGlnbm9yZV9lcnJvcj1GYWxzZSk6CkBAIC00
NjEsNyArNDYwLDYgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIp
OgogICAgICAgICBzZWxmLl9pbl9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1w
UmVuZGVyVHJlZS5pbicKICAgICAgICAgc2VsZi5fb3V0X2ZpZm9fcGF0aCA9IERSVF9BUFBfRklM
RVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLm91dCcKICAgICAgICAgc2VsZi5fZXJyX2ZpZm9fcGF0
aCA9IERSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmVycicKLSAgICAgICAgc2Vs
Zi5fcmVzdGFydF9hZnRlcl9raWxsZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91
dF9wcm9jZXNzID0gTm9uZQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9u
ZQogCkBAIC00NzYsMTcgKzQ3NCw2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2
ZXIuRHJpdmVyKToKICAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8n
KQogICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
bHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKIAotICAgIGRl
ZiBfZGVhZGxvY2tfZGV0ZWN0b3Ioc2VsZiwgcHJvY2Vzc2VzLCBub3JtYWxfc3RhcnR1cF9ldmVu
dCk6Ci0gICAgICAgIHRpbWUuc2xlZXAoRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKQotICAg
ICAgICBpZiBub3Qgbm9ybWFsX3N0YXJ0dXBfZXZlbnQuaXNfc2V0KCk6Ci0gICAgICAgICAgICAj
IElmIG5vcm1hbF9zdGFydHVwX2V2ZW50IGlzIG5vdCBzZXQgaW4gdGltZSwgdGhlIG1haW4gdGhy
ZWFkIG11c3QgYmUgYmxvY2tlZCBhdAotICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhl
IGZpZm8uIEtpbGwgdGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhl
Ci0gICAgICAgICAgICAjIG1haW4gdGhyZWFkIGVzY2FwZSBmcm9tIHRoZSBkZWFkbG9ja2VkIHN0
YXRlLiBBZnRlciB0aGF0LCB0aGUgbWFpbiB0aHJlYWQgd2lsbAotICAgICAgICAgICAgIyB0cmVh
dCB0aGlzIGFzIGEgY3Jhc2guCi0gICAgICAgICAgICBmb3IgaSBpbiBwcm9jZXNzZXM6Ci0gICAg
ICAgICAgICAgICAgaS5raWxsKCkKLSAgICAgICAgIyBPdGhlcndpc2UgdGhlIG1haW4gdGhyZWFk
IGhhcyBiZWVuIHByb2NlZWRlZCBub3JtYWxseS4gVGhpcyB0aHJlYWQganVzdCBleGl0cyBzaWxl
bnRseS4KLQogICAgIGRlZiBfZHJ0X2NtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVz
dF9hcmdzKToKICAgICAgICAgcmV0dXJuIGRyaXZlci5Ecml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4
ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWwogICAgICAgICAgICAgJy0taW4tZmlmbz0nICsg
c2VsZi5faW5fZmlmb19wYXRoLApAQCAtNTAzLDE0ICs0OTAsMTMgQEAgY2xhc3MgQ2hyb21pdW1B
bmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJv
aWREcml2ZXIsIHNlbGYpLnN0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCiAgICAg
ZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIHJl
dHJpZXMgPSAwCi0gICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdGFydF9vbmNlKHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKKyAgICAgICAgZm9yIHJldHJpZXMgaW4gcmFuZ2UoMyk6CisgICAg
ICAgICAgICBpZiBzZWxmLl9zdGFydF9vbmNlKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToK
KyAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0
byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0lZC4gTG9nOiVzJyAl
IChyZXRyaWVzLCBzZWxmLl9wb3J0Ll9nZXRfbG9nY2F0KCkpKQotICAgICAgICAgICAgcmV0cmll
cyArPSAxCi0gICAgICAgICAgICBpZiByZXRyaWVzID49IDM6Ci0gICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNh
dGlvbiBtdWx0aXBsZSB0aW1lcy4gR2l2ZSB1cC4nKQogICAgICAgICAgICAgc2VsZi5zdG9wKCkK
ICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3Io
J0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1l
cy4gR2l2ZSB1cC4nKQogCiAgICAgZGVmIF9zdGFydF9vbmNlKHNlbGYsIHBpeGVsX3Rlc3RzLCBw
ZXJfdGVzdF9hcmdzKToKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxm
KS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCkBAIC01MjIsMTQgKzUwOCwxNCBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAg
ICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24u
IEV4Y2VwdGlvbjpcbicgKyBzdGFydF9yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
IAotICAgICAgICBzZWNvbmRzID0gMAotICAgICAgICB3aGlsZSAobm90IHNlbGYuX2ZpbGVfZXhp
c3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIG9yCi0gICAgICAgICAgICAgICBub3Qg
c2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIG9yCi0gICAg
ICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZv
X3BhdGgpKToKKyAgICAgICAgZm9yIHNlY29uZHMgaW4gcmFuZ2UoRFJUX1NUQVJUX1NUT1BfVElN
RU9VVF9TRUNTKToKKyAgICAgICAgICAgIGlmIChzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5faW5fZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0
c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgc2Vs
Zi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKToKKyAgICAgICAg
ICAgICAgICBicmVhawogICAgICAgICAgICAgdGltZS5zbGVlcCgxKQotICAgICAgICAgICAgc2Vj
b25kcyArPSAxCi0gICAgICAgICAgICBpZiBzZWNvbmRzID49IERSVF9TVEFSVF9TVE9QX1RJTUVP
VVRfU0VDUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBw
cm9tcHQgdG8gZW5zdXJlIGFkYiBzaGVsbCByZWFkeS4KICAgICAgICAgZGVhZGxpbmUgPSB0aW1l
LnRpbWUoKSArIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUwpAQCAtNTU1LDkgKzU0MSwyMyBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMg
Q29tYmluZSB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgcGlwZXMgaW50byBzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzcy4KICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MucmVwbGFjZV9vdXRwdXRzKHNlbGYu
X3JlYWRfc3Rkb3V0X3Byb2Nlc3MuX3Byb2Muc3Rkb3V0LCBzZWxmLl9yZWFkX3N0ZGVycl9wcm9j
ZXNzLl9wcm9jLnN0ZG91dCkKIAorICAgICAgICBkZWYgZGVhZGxvY2tfZGV0ZWN0b3IocHJvY2Vz
c2VzLCBub3JtYWxfc3RhcnR1cF9ldmVudCk6CisgICAgICAgICAgICBmb3IgdGltZW91dCBpbiBy
YW5nZShEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1MpOgorICAgICAgICAgICAgICAgIGlmIG5v
cm1hbF9zdGFydHVwX2V2ZW50LmlzX3NldCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICAjIElmIG5vcm1hbF9z
dGFydHVwX2V2ZW50IGlzIG5vdCBzZXQgaW4gdGltZSwgdGhlIG1haW4gdGhyZWFkIG11c3QgYmUg
YmxvY2tlZCBhdAorICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhlIGZpZm8uIEtpbGwg
dGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhlCisgICAgICAgICAg
ICAjIG1haW4gdGhyZWFkIGVzY2FwZSBmcm9tIHRoZSBkZWFkbG9ja2VkIHN0YXRlLiBBZnRlciB0
aGF0LCB0aGUgbWFpbiB0aHJlYWQgd2lsbAorICAgICAgICAgICAgIyB0cmVhdCB0aGlzIGFzIGEg
Y3Jhc2guCisgICAgICAgICAgICBfbG9nLndhcm4oJ0RlYWRsb2NrIGRldGVjdGVkLiBQcm9jZXNz
ZXMga2lsbGVkLicpCisgICAgICAgICAgICBmb3IgaSBpbiBwcm9jZXNzZXM6CisgICAgICAgICAg
ICAgICAgaS5raWxsKCkKKyAgICAgICAgICAgIHJldHVybgorCiAgICAgICAgICMgU3RhcnQgYSB0
aHJlYWQgdG8ga2lsbCB0aGUgcGlwZSByZWFkaW5nL3dyaXRpbmcgcHJvY2Vzc2VzIG9uIGRlYWRs
b2NrIG9mIHRoZSBmaWZvcyBkdXJpbmcgc3RhcnR1cC4KICAgICAgICAgbm9ybWFsX3N0YXJ0dXBf
ZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdl
dD1zZWxmLl9kZWFkbG9ja19kZXRlY3RvciwKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZChuYW1l
PSdEZWFkbG9ja0RldGVjdG9yJywgdGFyZ2V0PWRlYWRsb2NrX2RldGVjdG9yLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3M9KFtzZWxmLl9zZXJ2ZXJfcHJvY2Vzcywgc2VsZi5fcmVhZF9z
dGRvdXRfcHJvY2Vzcywgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzc10sIG5vcm1hbF9zdGFydHVw
X2V2ZW50KSkuc3RhcnQoKQogCiAgICAgICAgIG91dHB1dCA9ICcnCkBAIC01NzcsMjYgKzU3Nywx
OSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6
Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNl
bGYpLnJ1bl90ZXN0KGRyaXZlcl9pbnB1dCkKLSAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFz
aDoKKyAgICAgICAgZm9yIHJldHJpZXMgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBkcml2ZXJf
b3V0cHV0ID0gc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5ydW5fdGVzdChkcml2
ZXJfaW5wdXQpCisgICAgICAgICAgICBpZiBub3QgZHJpdmVyX291dHB1dC5jcmFzaCBvciBzZWxm
Ll9wb3J0Ll9nZXRfbG9nY2F0KCkuZmluZCgnRmF0YWwgc2lnbmFsJykgIT0gLTE6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGRyaXZlcl9vdXRwdXQKICAgICAgICAgICAgICMgV2hlbiBBbmRyb2lk
IGlzIE9PTSwgRFJUIHByb2Nlc3MgbWF5IGJlIGtpbGxlZCBieSBBY3Rpdml0eU1hbmFnZXIgb3Ig
c3lzdGVtIE9PTS4KICAgICAgICAgICAgICMgSXQgbG9va3MgbGlrZSBhIGNyYXNoIGJ1dCB0aGVy
ZSBpcyBubyBmYXRhbCBzaWduYWwgbG9nZ2VkLiBSZS1ydW4gdGhlIHRlc3QgZm9yCiAgICAgICAg
ICAgICAjIHN1Y2ggY3Jhc2guCiAgICAgICAgICAgICAjIFRvIHRlc3Q6IGFkYiBzaGVsbCBhbSBm
b3JjZS1zdG9wIG9yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdCwKICAgICAgICAgICAgICMgb3Iga2ls
bCAtMTEgcGlkIHR3aWNlIG9yIHRocmVlIHRpbWVzIHRvIHNpbXVsYXRlIGEgZmF0YWwgY3Jhc2gu
Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0Ll9nZXRfbG9nY2F0KCkuZmluZCgnRmF0YWwgc2ln
bmFsJykgPT0gLTE6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVzdGFydF9hZnRlcl9raWxsZWQg
PSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5fZHJ0X3JldHJ5X2FmdGVyX2tpbGxl
ZCArPSAxCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5fZHJ0X3JldHJ5X2FmdGVyX2tp
bGxlZCA+IDEwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRHVt
cFJlbmRlclRyZWUgaXMga2lsbGVkIGJ5IEFuZHJvaWQgZm9yIHRvbyBtYW55IHRpbWVzIScpCi0g
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcignRHVtcFJlbmRlclRyZWUgaXMga2lsbGVkIGJ5IHN5
c3RlbSAoJWQpLicgJSBzZWxmLl9wb3J0Ll9kcnRfcmV0cnlfYWZ0ZXJfa2lsbGVkKQotICAgICAg
ICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgICAgICAgICAgIyBTbGVlcCAxMCBzZWNvbmRz
IHRvIGxldCBzeXN0ZW0gcmVjb3Zlci4KLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQot
ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl90ZXN0KGRyaXZlcl9pbnB1dCkKLQotICAg
ICAgICBzZWxmLl9yZXN0YXJ0X2FmdGVyX2tpbGxlZCA9IEZhbHNlCi0gICAgICAgIHJldHVybiBk
cml2ZXJfb3V0cHV0CisgICAgICAgICAgICBfbG9nLmVycm9yKCdEdW1wUmVuZGVyVHJlZSBpcyBr
aWxsZWQgYnkgc3lzdGVtICglZCkuJyAlIHJldHJpZXMpCisgICAgICAgICAgICBzZWxmLnN0b3Ao
KQorICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkgICMgVG8gbGV0IHRoZSBzeXN0ZW0gcmVjb3Zl
ci4KKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtpbGxl
ZCBieSBBbmRyb2lkIGZvciB0b28gbWFueSB0aW1lcyEnKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6
CiAgICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2Zv
cmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQpAQCAtNjE2LDE1ICs2MDksMTQgQEAgY2xhc3Mg
Q2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgc2VsZi5f
c2VydmVyX3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZl
ciwgc2VsZikuc3RvcCgpCiAKLSAgICAgICAgc2Vjb25kcyA9IDAKLSAgICAgICAgd2hpbGUgKHNl
bGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIG9yCi0gICAgICAg
ICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkg
b3IKLSAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJf
Zmlmb19wYXRoKSk6CisgICAgICAgIGZvciBzZWNvbmRzIGluIHJhbmdlKERSVF9TVEFSVF9TVE9Q
X1RJTUVPVVRfU0VDUyk6CisgICAgICAgICAgICBpZiAobm90IHNlbGYuX2ZpbGVfZXhpc3RzX29u
X2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxm
Ll9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgYW5kCisgICAgICAg
ICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19w
YXRoKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICB0aW1lLnNsZWVwKDEp
CiAgICAgICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScs
IHNlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9f
cGF0aF0pCi0gICAgICAgICAgICBzZWNvbmRzICs9IDEKLSAgICAgICAgICAgIGlmIHNlY29uZHMg
Pj0gRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTOgotICAgICAgICAgICAgICAgIHJhaXNlIEFz
c2VydGlvbkVycm9yKCdGYWlsZWQgdG8gcmVtb3ZlIGZpZm8gZmlsZXMuIE1heSBiZSBsb2NrZWQu
JykKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byByZW1vdmUgZmlmbyBm
aWxlcy4gTWF5IGJlIGxvY2tlZC4nKQogCiAgICAgZGVmIF9jb21tYW5kX2Zyb21fZHJpdmVyX2lu
cHV0KHNlbGYsIGRyaXZlcl9pbnB1dCk6CiAgICAgICAgIGNvbW1hbmQgPSBzdXBlcihDaHJvbWl1
bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KGRyaXZlcl9p
bnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvc2VydmVyX3Byb2Nlc3MucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CmluZGV4IGUwN2E4MDRiMGIyMWJjYTBmM2I5ODEyMzFl
NTZhNjFjNTVmNjMxOWEuLjg5ZGZlMjczOTg0MTY4MWIwMjRkZjJkN2NmMjFjODg3NGQxYTYyNjQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2Vy
dmVyX3Byb2Nlc3MucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpAQCAtMjMxLDE0ICsyMzEsMTQgQEAgY2xhc3MgU2VydmVy
UHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAgaWYgb3V0X2ZkIGluIHJlYWRfZmRzOgogICAg
ICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkKCkKICAgICAgICAgICAg
ICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCd1bmV4
cGVjdGVkIEVPRiBvZiBzdGRvdXQnKQorICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCd1
bmV4cGVjdGVkIEVPRiBvZiBzdGRvdXQnKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFz
aGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCiAKICAgICAg
ICAgICAgIGlmIGVycl9mZCBpbiByZWFkX2ZkczoKICAgICAgICAgICAgICAgICBkYXRhID0gc2Vs
Zi5fcHJvYy5zdGRlcnIucmVhZCgpCiAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygndW5leHBlY3RlZCBFT0Ygb2Ygc3RkZXJyJykK
KyAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygndW5leHBlY3RlZCBFT0Ygb2Ygc3RkZXJy
JykKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKICAgICAgICAgICAg
ICAgICBzZWxmLl9lcnJvciArPSBkYXRhCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154775</attachid>
            <date>2012-07-26 15:50:34 -0700</date>
            <delta_ts>2012-07-27 09:04:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92299-20120726155023.patch</filename>
            <type>text/plain</type>
            <size>11834</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNzkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzNjNzExMjJkYzFiNWU0MTc1MDJiN2RkMGQ3Yzg1OTE0
YTJjMjhlOS4uNzU0OTc2YzkxOTU4YmY5OTY5MTIxNzg1ODQ4YzU3OGNiM2E1ZWNjMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMw
IEBACisyMDEyLTA3LTI2ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIE5SV1QgYmV0dGVyIGhhbmRsaW5nIG9mIERS
VCBkZWFkbG9ja3MgYW5kIGNyYXNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyMjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgMS4gQ2hhbmdlZCB0aGUgZGVhZGxvY2sgZGV0ZWN0b3IgdGhyZWFkIHRh
cmdldCBmcm9tIGEgbWV0aG9kIG9mIGRyaXZlciB0byBhIGZ1bmN0aW9uIHRvIGF2b2lkIGl0cyBy
ZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICAgIGN1cnJlbnQgZHJpdmVyIChzZWUgdGhlIGJ1ZyBm
b3IgdGhlIHByb2JsZW0gb2YgdGhlIHJlZmVyZW5jZS4KKyAgICAgICAgMi4gTGV0IHRoZSBkZWFk
bG9jayBkZXRlY3RvciB0aHJlYWQgZXhpdCBlYXJseSB3aGVuIHRoZSBub3JtYWxfc3RhcnR1cF9l
dmVudCBpcyBzZXQgdG8gYXZvaWQgaXQgZnJvbSBibG9ja2luZyB0aGUgbWFpbiB0aHJlYWQgd2hl
biB0aGUgbWFpbiB0aHJlYWQgaXMgZXhpdGluZy4KKyAgICAgICAgMy4gRXh0cmFjdGVkIGNvbW1v
biBsb29wIHVudGlsIHRpbWVvdXQgbG9naWMgaW50byBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2xv
b3Bfd2l0aF90aW1lb3V0KCkuCisgICAgICAgIDQuIFVzZSB0aGUgImZvciBpIGluIHJhbmdlKG4p
IiBzdHlsZSBzdWdnZXN0ZWQgYnkgZHByYW5rZSBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkxMjQgaW4gc2V2ZXJhbCBmdW5jdGlvbnMuCisKKyAgICAgICAgQWRk
aXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlv
bmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISku
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9faW5pdF9fKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3J1bl9hZGJfY29tbWFuZCk6IFJlZHVjZWQgdGhl
IHZlcmJvc2Ugb3V0cHV0LgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9faW5pdF9f
KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQpOiBF
eHRyYWN0ZWQgY29tbW9uIGxvb3AgdW50aWwgdGltZW91dCBsb2dpYyBoZXJlLgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkRHJpdmVyLl9hbGxfcGlwZXNfY3JlYXRlZCk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuX3JlbW92ZV9hbGxfcGlwZXMpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkRHJpdmVyLl9zdGFydCk6IENoYW5nZWQgdGhlIHJldHJ5IGxvb3Agc3R5bGUuCisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UpOiBDaGFuZ2VkIHRoZSBsb29w
IHN0eWxlIGFuZCBjb2RlIHJlbGF0ZWQgdG8gZGVhZGxvY2sgZGV0ZWN0b3IuCisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2UuZGVhZGxvY2tfZGV0ZWN0b3IpOiBNb3Zl
ZCB0aGUgb3JpZ2luYWwgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9kZWFkbG9ja19kZXRlY3Rvcigp
IGhlcmUuCisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuc3RvcCk6IENoYW5nZWQgdGhl
IGxvb3Agc3R5bGUuCisKIDIwMTItMDctMjYgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtucnd0XSBnZXQgcmlkIG9mIC0tc2tpcC1waXhlbC10ZXN0LWlm
LW5vLWJhc2VsaW5lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKaW5kZXggMGZiY2Q2NmFiY2RkYTU3
NzhiMmM3Mzk3MjUyMzZhNTBkMzY2NDA2My4uNGEwNmZlMzZhOGIxYTkzMWU4YjhiNjMyYjk4MTMw
NzhhOTNjYzA2YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQpAQCAtMTc3LDcgKzE3Nyw2IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAg
ICAgYWRiX2FyZ3MgPSBzZWxmLmdldF9vcHRpb24oJ2FkYl9hcmdzJykKICAgICAgICAgaWYgYWRi
X2FyZ3M6CiAgICAgICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCArPSBzaGxleC5zcGxpdChhZGJf
YXJncykKLSAgICAgICAgc2VsZi5fZHJ0X3JldHJ5X2FmdGVyX2tpbGxlZCA9IDAKIAogICAgIGRl
ZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6CiAgICAgICAgICMgQW5kcm9pZCBwbGF0Zm9ybSBo
YXMgbGVzcyBjb21wdXRpbmcgcG93ZXIgdGhhbiBkZXNrdG9wIHBsYXRmb3Jtcy4KQEAgLTQwMCw3
ICszOTksOSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9y
dCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcnJvcl9oYW5kbGVyID0gTm9uZQogICAg
ICAgICByZXN1bHQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1h
bmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFuZGxlcikKLSAgICAgICAgX2xvZy5kZWJ1
ZygnUnVuIGFkYiByZXN1bHQ6XG4nICsgcmVzdWx0KQorICAgICAgICAjIExpbWl0IHRoZSBsZW5n
dGggdG8gYXZvaWQgdG9vIHZlcmJvc2Ugb3V0cHV0IG9mIGNvbW1hbmRzIGxpa2UgJ2FkYiBsb2dj
YXQnIGFuZCAnY2F0IC9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lMDEnCisgICAgICAgICMgd2hv
c2Ugb3V0cHV0cyBhcmUgbm9ybWFsbHkgcHJpbnRlZCBpbiBsYXRlciBsb2dzLgorICAgICAgICBf
bG9nLmRlYnVnKCdSdW4gYWRiIHJlc3VsdDogJyArIHJlc3VsdFs6ODBdKQogICAgICAgICByZXR1
cm4gcmVzdWx0CiAKICAgICBkZWYgX2xpbmtfZGV2aWNlX2ZpbGUoc2VsZiwgZnJvbV9maWxlLCB0
b19maWxlLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgpAQCAtNDYxLDcgKzQ2Miw2IEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgc2VsZi5faW5fZmlm
b19wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuaW4nCiAgICAgICAg
IHNlbGYuX291dF9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJl
ZS5vdXQnCiAgICAgICAgIHNlbGYuX2Vycl9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiAr
ICdEdW1wUmVuZGVyVHJlZS5lcnInCi0gICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0ZXJfa2lsbGVk
ID0gRmFsc2UKICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKICAgICAg
ICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUKIApAQCAtNDc2LDE3ICs0NzYsNiBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIGFz
c2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcvJykKICAgICAgICAgcmV0dXJuIHNlbGYu
X3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5z
dHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCiAKLSAgICBkZWYgX2RlYWRsb2NrX2RldGVjdG9yKHNl
bGYsIHByb2Nlc3Nlcywgbm9ybWFsX3N0YXJ0dXBfZXZlbnQpOgotICAgICAgICB0aW1lLnNsZWVw
KERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUykKLSAgICAgICAgaWYgbm90IG5vcm1hbF9zdGFy
dHVwX2V2ZW50LmlzX3NldCgpOgotICAgICAgICAgICAgIyBJZiBub3JtYWxfc3RhcnR1cF9ldmVu
dCBpcyBub3Qgc2V0IGluIHRpbWUsIHRoZSBtYWluIHRocmVhZCBtdXN0IGJlIGJsb2NrZWQgYXQK
LSAgICAgICAgICAgICMgcmVhZGluZy93cml0aW5nIHRoZSBmaWZvLiBLaWxsIHRoZSBmaWZvIHJl
YWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgdG8gbGV0IHRoZQotICAgICAgICAgICAgIyBtYWluIHRo
cmVhZCBlc2NhcGUgZnJvbSB0aGUgZGVhZGxvY2tlZCBzdGF0ZS4gQWZ0ZXIgdGhhdCwgdGhlIG1h
aW4gdGhyZWFkIHdpbGwKLSAgICAgICAgICAgICMgdHJlYXQgdGhpcyBhcyBhIGNyYXNoLgotICAg
ICAgICAgICAgZm9yIGkgaW4gcHJvY2Vzc2VzOgotICAgICAgICAgICAgICAgIGkua2lsbCgpCi0g
ICAgICAgICMgT3RoZXJ3aXNlIHRoZSBtYWluIHRocmVhZCBoYXMgYmVlbiBwcm9jZWVkZWQgbm9y
bWFsbHkuIFRoaXMgdGhyZWFkIGp1c3QgZXhpdHMgc2lsZW50bHkuCi0KICAgICBkZWYgX2RydF9j
bWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CiAgICAgICAgIHJldHVy
biBkcml2ZXIuRHJpdmVyLmNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdz
KSArIFsKICAgICAgICAgICAgICctLWluLWZpZm89JyArIHNlbGYuX2luX2ZpZm9fcGF0aCwKQEAg
LTQ5NCw2ICs0ODMsMjUgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2
ZXIpOgogICAgICAgICAgICAgJy0tZXJyLWZpZm89JyArIHNlbGYuX2Vycl9maWZvX3BhdGgsCiAg
ICAgICAgIF0KIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2xvb3Bfd2l0aF90aW1lb3V0
KGNvbmRpdGlvbiwgdGltZW91dF9zZWNzKToKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUo
KSArIHRpbWVvdXRfc2VjcworICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lOgor
ICAgICAgICAgICAgaWYgY29uZGl0aW9uKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2FsbF9waXBlc19jcmVhdGVkKHNlbGYp
OgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9m
aWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2Rldmlj
ZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4
aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisKKyAgICBkZWYgX3JlbW92ZV9h
bGxfcGlwZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ3JtJywgc2VsZi5faW5fZmlmb19wYXRoLCBzZWxmLl9vdXRfZmlmb19wYXRoLCBzZWxm
Ll9lcnJfZmlmb19wYXRoXSkKKyAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5fZmlsZV9leGlzdHNf
b25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgbm90IHNl
bGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBhbmQKKyAgICAg
ICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZv
X3BhdGgpKQorCiAgICAgZGVmIHN0YXJ0KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdz
KToKICAgICAgICAgIyBPbmx5IG9uZSBkcml2ZXIgaW5zdGFuY2UgaXMgYWxsb3dlZCBiZWNhdXNl
IG9mIHRoZSBuYXR1cmUgb2YgQW5kcm9pZCBhY3Rpdml0eS4KICAgICAgICAgIyBUaGUgc2luZ2xl
IGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYmV0d2VlbiBwaXhlbCB0ZXN0IGFuZCBubyBwaXhlbCB0
ZXN0IG1vZGUgYnkgaXRzZWxmLgpAQCAtNTAzLDE0ICs1MTEsMTMgQEAgY2xhc3MgQ2hyb21pdW1B
bmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJv
aWREcml2ZXIsIHNlbGYpLnN0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCiAgICAg
ZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIHJl
dHJpZXMgPSAwCi0gICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdGFydF9vbmNlKHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKKyAgICAgICAgZm9yIHJldHJpZXMgaW4gcmFuZ2UoMyk6CisgICAg
ICAgICAgICBpZiBzZWxmLl9zdGFydF9vbmNlKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToK
KyAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0
byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0lZC4gTG9nOiVzJyAl
IChyZXRyaWVzLCBzZWxmLl9wb3J0Ll9nZXRfbG9nY2F0KCkpKQotICAgICAgICAgICAgcmV0cmll
cyArPSAxCi0gICAgICAgICAgICBpZiByZXRyaWVzID49IDM6Ci0gICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNh
dGlvbiBtdWx0aXBsZSB0aW1lcy4gR2l2ZSB1cC4nKQogICAgICAgICAgICAgc2VsZi5zdG9wKCkK
ICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3Io
J0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1l
cy4gR2l2ZSB1cC4nKQogCiAgICAgZGVmIF9zdGFydF9vbmNlKHNlbGYsIHBpeGVsX3Rlc3RzLCBw
ZXJfdGVzdF9hcmdzKToKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxm
KS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCkBAIC01MjIsMTQgKzUyOSw4IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgICAg
IF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4g
RXhjZXB0aW9uOlxuJyArIHN0YXJ0X3Jlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQog
Ci0gICAgICAgIHNlY29uZHMgPSAwCi0gICAgICAgIHdoaWxlIChub3Qgc2VsZi5fZmlsZV9leGlz
dHNfb25fZGV2aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgb3IKLSAgICAgICAgICAgICAgIG5vdCBz
ZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgb3IKLSAgICAg
ICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9f
cGF0aCkpOgotICAgICAgICAgICAgdGltZS5zbGVlcCgxKQotICAgICAgICAgICAgc2Vjb25kcyAr
PSAxCi0gICAgICAgICAgICBpZiBzZWNvbmRzID49IERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VD
UzoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IENocm9taXVt
QW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQoc2VsZi5fYWxsX3BpcGVzX2NyZWF0ZWQs
IERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUyk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
IAogICAgICAgICAjIFJlYWQgYmFjayB0aGUgc2hlbGwgcHJvbXB0IHRvIGVuc3VyZSBhZGIgc2hl
bGwgcmVhZHkuCiAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyBEUlRfU1RBUlRfU1RP
UF9USU1FT1VUX1NFQ1MKQEAgLTU1NSw5ICs1NTYsMTkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lk
RHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAjIENvbWJpbmUgdGhlIHN0ZG91dCBhbmQg
c3RkZXJyIHBpcGVzIGludG8gc2VsZi5fc2VydmVyX3Byb2Nlc3MuCiAgICAgICAgIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzLnJlcGxhY2Vfb3V0cHV0cyhzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLl9w
cm9jLnN0ZG91dCwgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzcy5fcHJvYy5zdGRvdXQpCiAKKyAg
ICAgICAgZGVmIGRlYWRsb2NrX2RldGVjdG9yKHByb2Nlc3Nlcywgbm9ybWFsX3N0YXJ0dXBfZXZl
bnQpOgorICAgICAgICAgICAgaWYgbm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRo
X3RpbWVvdXQobGFtYmRhOiBub3JtYWxfc3RhcnR1cF9ldmVudC5pc19zZXQoKSwgRFJUX1NUQVJU
X1NUT1BfVElNRU9VVF9TRUNTKToKKyAgICAgICAgICAgICAgICAjIElmIG5vcm1hbF9zdGFydHVw
X2V2ZW50IGlzIG5vdCBzZXQgaW4gdGltZSwgdGhlIG1haW4gdGhyZWFkIG11c3QgYmUgYmxvY2tl
ZCBhdAorICAgICAgICAgICAgICAgICMgcmVhZGluZy93cml0aW5nIHRoZSBmaWZvLiBLaWxsIHRo
ZSBmaWZvIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgdG8gbGV0IHRoZQorICAgICAgICAgICAg
ICAgICMgbWFpbiB0aHJlYWQgZXNjYXBlIGZyb20gdGhlIGRlYWRsb2NrZWQgc3RhdGUuIEFmdGVy
IHRoYXQsIHRoZSBtYWluIHRocmVhZCB3aWxsCisgICAgICAgICAgICAgICAgIyB0cmVhdCB0aGlz
IGFzIGEgY3Jhc2guCisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCdEZWFkbG9jayBkZXRlY3Rl
ZC4gUHJvY2Vzc2VzIGtpbGxlZC4nKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHByb2Nlc3Nl
czoKKyAgICAgICAgICAgICAgICAgICAgaS5raWxsKCkKKwogICAgICAgICAjIFN0YXJ0IGEgdGhy
ZWFkIHRvIGtpbGwgdGhlIHBpcGUgcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyBvbiBkZWFkbG9j
ayBvZiB0aGUgZmlmb3MgZHVyaW5nIHN0YXJ0dXAuCiAgICAgICAgIG5vcm1hbF9zdGFydHVwX2V2
ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9
c2VsZi5fZGVhZGxvY2tfZGV0ZWN0b3IsCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQobmFtZT0n
RGVhZGxvY2tEZXRlY3RvcicsIHRhcmdldD1kZWFkbG9ja19kZXRlY3RvciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzPShbc2VsZi5fc2VydmVyX3Byb2Nlc3MsIHNlbGYuX3JlYWRfc3Rk
b3V0X3Byb2Nlc3MsIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3NdLCBub3JtYWxfc3RhcnR1cF9l
dmVudCkpLnN0YXJ0KCkKIAogICAgICAgICBvdXRwdXQgPSAnJwpAQCAtNTc2LDI4ICs1ODcsNiBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAg
ICBub3JtYWxfc3RhcnR1cF9ldmVudC5zZXQoKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAot
ICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgotICAgICAgICBkcml2ZXJfb3V0
cHV0ID0gc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5ydW5fdGVzdChkcml2ZXJf
aW5wdXQpCi0gICAgICAgIGlmIGRyaXZlcl9vdXRwdXQuY3Jhc2g6Ci0gICAgICAgICAgICAjIFdo
ZW4gQW5kcm9pZCBpcyBPT00sIERSVCBwcm9jZXNzIG1heSBiZSBraWxsZWQgYnkgQWN0aXZpdHlN
YW5hZ2VyIG9yIHN5c3RlbSBPT00uCi0gICAgICAgICAgICAjIEl0IGxvb2tzIGxpa2UgYSBjcmFz
aCBidXQgdGhlcmUgaXMgbm8gZmF0YWwgc2lnbmFsIGxvZ2dlZC4gUmUtcnVuIHRoZSB0ZXN0IGZv
cgotICAgICAgICAgICAgIyBzdWNoIGNyYXNoLgotICAgICAgICAgICAgIyBUbyB0ZXN0OiBhZGIg
c2hlbGwgYW0gZm9yY2Utc3RvcCBvcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3QsCi0gICAgICAgICAg
ICAjIG9yIGtpbGwgLTExIHBpZCB0d2ljZSBvciB0aHJlZSB0aW1lcyB0byBzaW11bGF0ZSBhIGZh
dGFsIGNyYXNoLgotICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5fZ2V0X2xvZ2NhdCgpLmZpbmQo
J0ZhdGFsIHNpZ25hbCcpID09IC0xOgotICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0
ZXJfa2lsbGVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuX2RydF9yZXRyeV9h
ZnRlcl9raWxsZWQgKz0gMQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQuX2RydF9yZXRy
eV9hZnRlcl9raWxsZWQgPiAxMDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9u
RXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtpbGxlZCBieSBBbmRyb2lkIGZvciB0b28gbWFueSB0
aW1lcyEnKQotICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtp
bGxlZCBieSBzeXN0ZW0gKCVkKS4nICUgc2VsZi5fcG9ydC5fZHJ0X3JldHJ5X2FmdGVyX2tpbGxl
ZCkKLSAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAgICAgICAgICMgU2xlZXAg
MTAgc2Vjb25kcyB0byBsZXQgc3lzdGVtIHJlY292ZXIuCi0gICAgICAgICAgICAgICAgdGltZS5z
bGVlcCgxMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5fdGVzdChkcml2ZXJfaW5w
dXQpCi0KLSAgICAgICAgc2VsZi5fcmVzdGFydF9hZnRlcl9raWxsZWQgPSBGYWxzZQotICAgICAg
ICByZXR1cm4gZHJpdmVyX291dHB1dAotCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIHNl
bGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBE
UlRfQVBQX1BBQ0tBR0VdKQogCkBAIC02MTYsMTUgKzYwNSw4IEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9j
ZXNzID0gTm9uZQogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0
b3AoKQogCi0gICAgICAgIHNlY29uZHMgPSAwCi0gICAgICAgIHdoaWxlIChzZWxmLl9maWxlX2V4
aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBvcgotICAgICAgICAgICAgICAgc2Vs
Zi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIG9yCi0gICAgICAg
ICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkp
OgotICAgICAgICAgICAgdGltZS5zbGVlcCgxKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5fcnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCBzZWxmLl9pbl9maWZvX3BhdGgsIHNlbGYuX291
dF9maWZvX3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhdKQotICAgICAgICAgICAgc2Vjb25kcyAr
PSAxCi0gICAgICAgICAgICBpZiBzZWNvbmRzID49IERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VD
UzoKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVkIHRvIHJlbW92
ZSBmaWZvIGZpbGVzLiBNYXkgYmUgbG9ja2VkLicpCisgICAgICAgIGlmIG5vdCBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIuX2xvb3Bfd2l0aF90aW1lb3V0KHNlbGYuX3JlbW92ZV9hbGxfcGlwZXMsIERS
VF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUyk6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcignRmFpbGVkIHRvIHJlbW92ZSBmaWZvIGZpbGVzLiBNYXkgYmUgbG9ja2VkLicpCiAKICAg
ICBkZWYgX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQoc2VsZiwgZHJpdmVyX2lucHV0KToKICAg
ICAgICAgY29tbWFuZCA9IHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX2NvbW1h
bmRfZnJvbV9kcml2ZXJfaW5wdXQoZHJpdmVyX2lucHV0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154967</attachid>
            <date>2012-07-27 09:04:51 -0700</date>
            <delta_ts>2012-07-27 11:42:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92299-20120727090439.patch</filename>
            <type>text/plain</type>
            <size>11734</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODc0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTA1Mzg2NzU2MTgzOTA5MWQzZjdjNjcxMDBhMGMzYjE1
YWM2MTY3MS4uN2RkN2FjNmM3OTAzNTM0NzIyZTMxNGU5ZGYzNDNjNWNmNmFkMGJmZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDEyLTA3LTI2ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIE5SV1QgYmV0dGVyIGhhbmRsaW5nIG9mIERS
VCBkZWFkbG9ja3MgYW5kIGNyYXNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyMjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBQcmFua2Uu
CisKKyAgICAgICAgMS4gQ2hhbmdlZCB0aGUgZGVhZGxvY2sgZGV0ZWN0b3IgdGhyZWFkIHRhcmdl
dCBmcm9tIGEgbWV0aG9kIG9mIGRyaXZlciB0byBhIGZ1bmN0aW9uIHRvIGF2b2lkIGl0cyByZWZl
cmVuY2UgdG8gdGhlCisgICAgICAgICAgIGN1cnJlbnQgZHJpdmVyIChzZWUgdGhlIGJ1ZyBmb3Ig
dGhlIHByb2JsZW0gb2YgdGhlIHJlZmVyZW5jZS4KKyAgICAgICAgMi4gTGV0IHRoZSBkZWFkbG9j
ayBkZXRlY3RvciB0aHJlYWQgZXhpdCBlYXJseSB3aGVuIHRoZSBub3JtYWxfc3RhcnR1cF9ldmVu
dCBpcyBzZXQgdG8gYXZvaWQgaXQgZnJvbSBibG9ja2luZyB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0
aGUgbWFpbiB0aHJlYWQgaXMgZXhpdGluZy4KKyAgICAgICAgMy4gRXh0cmFjdGVkIGNvbW1vbiBs
b29wIHVudGlsIHRpbWVvdXQgbG9naWMgaW50byBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2xvb3Bf
d2l0aF90aW1lb3V0KCkuCisgICAgICAgIDQuIFVzZSB0aGUgImZvciBpIGluIHJhbmdlKG4pIiBz
dHlsZSBzdWdnZXN0ZWQgYnkgZHByYW5rZSBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODkxMjQgaW4gc2V2ZXJhbCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9faW5pdF9fKToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZFBvcnQuX3J1bl9hZGJfY29tbWFuZCk6IFJlZHVjZWQgdGhlIHZlcmJvc2Ugb3V0cHV0Lgor
ICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQpOiBFeHRyYWN0ZWQgY29tbW9uIGxv
b3AgdW50aWwgdGltZW91dCBsb2dpYyBoZXJlLgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9hbGxfcGlwZXNfY3JlYXRlZCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X3JlbW92ZV9hbGxfcGlwZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFy
dCk6IENoYW5nZWQgdGhlIHJldHJ5IGxvb3Agc3R5bGUuCisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWREcml2ZXIuX3N0YXJ0X29uY2UpOiBDaGFuZ2VkIHRoZSBsb29wIHN0eWxlIGFuZCBjb2RlIHJl
bGF0ZWQgdG8gZGVhZGxvY2sgZGV0ZWN0b3IuCisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2
ZXIuX3N0YXJ0X29uY2UuZGVhZGxvY2tfZGV0ZWN0b3IpOiBNb3ZlZCB0aGUgb3JpZ2luYWwgQ2hy
b21pdW1BbmRyb2lkRHJpdmVyLl9kZWFkbG9ja19kZXRlY3RvcigpIGhlcmUuCisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuc3RvcCk6IENoYW5nZWQgdGhlIGxvb3Agc3R5bGUuCisKIDIw
MTItMDctMjcgIFlvdW5nVGFlY2sgU29uZyAgPHlvdW5ndGFlY2suc29uZ0BzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbV0syXVtFRkxdIEFkZCBhbiBBQ0NFTEVSQVRFRF9DT01QT1NJVElORyBpbXBs
ZW1lbnRhdGlvbiBmb3IgRWZsIFdlYktpdDIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQppbmRleCAw
ZmJjZDY2YWJjZGRhNTc3OGIyYzczOTcyNTIzNmE1MGQzNjY0MDYzLi40YTA2ZmUzNmE4YjFhOTMx
ZThiOGI2MzJiOTgxMzA3OGE5M2NjMDZhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0x
NzcsNyArMTc3LDYgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1
bVBvcnQpOgogICAgICAgICBhZGJfYXJncyA9IHNlbGYuZ2V0X29wdGlvbignYWRiX2FyZ3MnKQog
ICAgICAgICBpZiBhZGJfYXJnczoKICAgICAgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kICs9IHNo
bGV4LnNwbGl0KGFkYl9hcmdzKQotICAgICAgICBzZWxmLl9kcnRfcmV0cnlfYWZ0ZXJfa2lsbGVk
ID0gMAogCiAgICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKICAgICAgICAgIyBBbmRy
b2lkIHBsYXRmb3JtIGhhcyBsZXNzIGNvbXB1dGluZyBwb3dlciB0aGFuIGRlc2t0b3AgcGxhdGZv
cm1zLgpAQCAtNDAwLDcgKzM5OSw5IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21p
dW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGVycm9yX2hhbmRs
ZXIgPSBOb25lCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChz
ZWxmLl9hZGJfY29tbWFuZCArIGNtZCwgZXJyb3JfaGFuZGxlcj1lcnJvcl9oYW5kbGVyKQotICAg
ICAgICBfbG9nLmRlYnVnKCdSdW4gYWRiIHJlc3VsdDpcbicgKyByZXN1bHQpCisgICAgICAgICMg
TGltaXQgdGhlIGxlbmd0aCB0byBhdm9pZCB0b28gdmVyYm9zZSBvdXRwdXQgb2YgY29tbWFuZHMg
bGlrZSAnYWRiIGxvZ2NhdCcgYW5kICdjYXQgL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmUwMScK
KyAgICAgICAgIyB3aG9zZSBvdXRwdXRzIGFyZSBub3JtYWxseSBwcmludGVkIGluIGxhdGVyIGxv
Z3MuCisgICAgICAgIF9sb2cuZGVidWcoJ1J1biBhZGIgcmVzdWx0OiAnICsgcmVzdWx0Wzo4MF0p
CiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfbGlua19kZXZpY2VfZmlsZShzZWxm
LCBmcm9tX2ZpbGUsIHRvX2ZpbGUsIGlnbm9yZV9lcnJvcj1GYWxzZSk6CkBAIC00NjEsNyArNDYy
LDYgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAg
ICBzZWxmLl9pbl9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJl
ZS5pbicKICAgICAgICAgc2VsZi5fb3V0X2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsg
J0R1bXBSZW5kZXJUcmVlLm91dCcKICAgICAgICAgc2VsZi5fZXJyX2ZpZm9fcGF0aCA9IERSVF9B
UFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmVycicKLSAgICAgICAgc2VsZi5fcmVzdGFy
dF9hZnRlcl9raWxsZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNz
ID0gTm9uZQogICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQogCkBAIC00
NzYsMTcgKzQ3Niw2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVy
KToKICAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQogICAgICAg
ICByZXR1cm4gc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxs
X2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKIAotICAgIGRlZiBfZGVhZGxv
Y2tfZGV0ZWN0b3Ioc2VsZiwgcHJvY2Vzc2VzLCBub3JtYWxfc3RhcnR1cF9ldmVudCk6Ci0gICAg
ICAgIHRpbWUuc2xlZXAoRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKQotICAgICAgICBpZiBu
b3Qgbm9ybWFsX3N0YXJ0dXBfZXZlbnQuaXNfc2V0KCk6Ci0gICAgICAgICAgICAjIElmIG5vcm1h
bF9zdGFydHVwX2V2ZW50IGlzIG5vdCBzZXQgaW4gdGltZSwgdGhlIG1haW4gdGhyZWFkIG11c3Qg
YmUgYmxvY2tlZCBhdAotICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhlIGZpZm8uIEtp
bGwgdGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhlCi0gICAgICAg
ICAgICAjIG1haW4gdGhyZWFkIGVzY2FwZSBmcm9tIHRoZSBkZWFkbG9ja2VkIHN0YXRlLiBBZnRl
ciB0aGF0LCB0aGUgbWFpbiB0aHJlYWQgd2lsbAotICAgICAgICAgICAgIyB0cmVhdCB0aGlzIGFz
IGEgY3Jhc2guCi0gICAgICAgICAgICBmb3IgaSBpbiBwcm9jZXNzZXM6Ci0gICAgICAgICAgICAg
ICAgaS5raWxsKCkKLSAgICAgICAgIyBPdGhlcndpc2UgdGhlIG1haW4gdGhyZWFkIGhhcyBiZWVu
IHByb2NlZWRlZCBub3JtYWxseS4gVGhpcyB0aHJlYWQganVzdCBleGl0cyBzaWxlbnRseS4KLQog
ICAgIGRlZiBfZHJ0X2NtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToK
ICAgICAgICAgcmV0dXJuIGRyaXZlci5Ecml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpICsgWwogICAgICAgICAgICAgJy0taW4tZmlmbz0nICsgc2VsZi5faW5f
Zmlmb19wYXRoLApAQCAtNDk0LDYgKzQ4MywyNSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICAnLS1lcnItZmlmbz0nICsgc2VsZi5fZXJy
X2ZpZm9fcGF0aCwKICAgICAgICAgXQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfbG9v
cF93aXRoX3RpbWVvdXQoY29uZGl0aW9uLCB0aW1lb3V0X3NlY3MpOgorICAgICAgICBkZWFkbGlu
ZSA9IHRpbWUudGltZSgpICsgdGltZW91dF9zZWNzCisgICAgICAgIHdoaWxlIHRpbWUudGltZSgp
IDwgZGVhZGxpbmU6CisgICAgICAgICAgICBpZiBjb25kaXRpb24oKToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfYWxsX3BpcGVz
X2NyZWF0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2
aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9l
eGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIGFuZAorICAgICAgICAgICAgICAg
IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSkKKworICAg
IGRlZiBfcmVtb3ZlX2FsbF9waXBlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2Fk
Yl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCBzZWxmLl9pbl9maWZvX3BhdGgsIHNlbGYuX291dF9m
aWZvX3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhdKQorICAgICAgICByZXR1cm4gKG5vdCBzZWxm
Ll9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBhbmQKKyAgICAgICAg
ICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3Bh
dGgpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5fZXJyX2ZpZm9fcGF0aCkpCisKICAgICBkZWYgc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICAjIE9ubHkgb25lIGRyaXZlciBpbnN0YW5jZSBpcyBh
bGxvd2VkIGJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiBBbmRyb2lkIGFjdGl2aXR5LgogICAgICAg
ICAjIFRoZSBzaW5nbGUgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBiZXR3ZWVuIHBpeGVsIHRlc3Qg
YW5kIG5vIHBpeGVsIHRlc3QgbW9kZSBieSBpdHNlbGYuCkBAIC01MDMsMTQgKzUxMSwxMyBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHN1cGVy
KENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0
X2FyZ3MpCiAKICAgICBkZWYgX3N0YXJ0KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdz
KToKLSAgICAgICAgcmV0cmllcyA9IDAKLSAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0YXJ0X29u
Y2UocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAgICAgICBmb3IgcmV0cmllcyBpbiBy
YW5nZSgzKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X29uY2UocGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpOgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgX2xvZy5l
cnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBSZXRyaWVz
PSVkLiBMb2c6JXMnICUgKHJldHJpZXMsIHNlbGYuX3BvcnQuX2dldF9sb2djYXQoKSkpCi0gICAg
ICAgICAgICByZXRyaWVzICs9IDEKLSAgICAgICAgICAgIGlmIHJldHJpZXMgPj0gMzoKLSAgICAg
ICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5k
ZXJUcmVlIGFwcGxpY2F0aW9uIG11bHRpcGxlIHRpbWVzLiBHaXZlIHVwLicpCiAgICAgICAgICAg
ICBzZWxmLnN0b3AoKQogICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICByYWlzZSBB
c3NlcnRpb25FcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9u
IG11bHRpcGxlIHRpbWVzLiBHaXZlIHVwLicpCiAKICAgICBkZWYgX3N0YXJ0X29uY2Uoc2VsZiwg
cGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJv
aWREcml2ZXIsIHNlbGYpLl9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKQEAgLTUy
MiwxNCArNTI5LDggQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIp
OgogICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVl
IGFwcGxpY2F0aW9uLiBFeGNlcHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQogICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCiAKLSAgICAgICAgc2Vjb25kcyA9IDAKLSAgICAgICAgd2hpbGUgKG5vdCBz
ZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBvcgotICAgICAg
ICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19w
YXRoKSBvcgotICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShz
ZWxmLl9lcnJfZmlmb19wYXRoKSk6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKDEpCi0gICAgICAg
ICAgICBzZWNvbmRzICs9IDEKLSAgICAgICAgICAgIGlmIHNlY29uZHMgPj0gRFJUX1NUQVJUX1NU
T1BfVElNRU9VVF9TRUNTOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBp
ZiBub3QgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9sb29wX3dpdGhfdGltZW91dChzZWxmLl9hbGxf
cGlwZXNfY3JlYXRlZCwgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKToKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQogCiAgICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBwcm9tcHQgdG8g
ZW5zdXJlIGFkYiBzaGVsbCByZWFkeS4KICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSAr
IERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUwpAQCAtNTU1LDkgKzU1NiwxOSBAQCBjbGFzcyBD
aHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICMgQ29tYmluZSB0
aGUgc3Rkb3V0IGFuZCBzdGRlcnIgcGlwZXMgaW50byBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy4KICAg
ICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MucmVwbGFjZV9vdXRwdXRzKHNlbGYuX3JlYWRfc3Rk
b3V0X3Byb2Nlc3MuX3Byb2Muc3Rkb3V0LCBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLl9wcm9j
LnN0ZG91dCkKIAorICAgICAgICBkZWYgZGVhZGxvY2tfZGV0ZWN0b3IocHJvY2Vzc2VzLCBub3Jt
YWxfc3RhcnR1cF9ldmVudCk6CisgICAgICAgICAgICBpZiBub3QgQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9sb29wX3dpdGhfdGltZW91dChsYW1iZGE6IG5vcm1hbF9zdGFydHVwX2V2ZW50LmlzX3Nl
dCgpLCBEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1MpOgorICAgICAgICAgICAgICAgICMgSWYg
bm9ybWFsX3N0YXJ0dXBfZXZlbnQgaXMgbm90IHNldCBpbiB0aW1lLCB0aGUgbWFpbiB0aHJlYWQg
bXVzdCBiZSBibG9ja2VkIGF0CisgICAgICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhl
IGZpZm8uIEtpbGwgdGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhl
CisgICAgICAgICAgICAgICAgIyBtYWluIHRocmVhZCBlc2NhcGUgZnJvbSB0aGUgZGVhZGxvY2tl
ZCBzdGF0ZS4gQWZ0ZXIgdGhhdCwgdGhlIG1haW4gdGhyZWFkIHdpbGwKKyAgICAgICAgICAgICAg
ICAjIHRyZWF0IHRoaXMgYXMgYSBjcmFzaC4KKyAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ0Rl
YWRsb2NrIGRldGVjdGVkLiBQcm9jZXNzZXMga2lsbGVkLicpCisgICAgICAgICAgICAgICAgZm9y
IGkgaW4gcHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgICAgICBpLmtpbGwoKQorCiAgICAgICAg
ICMgU3RhcnQgYSB0aHJlYWQgdG8ga2lsbCB0aGUgcGlwZSByZWFkaW5nL3dyaXRpbmcgcHJvY2Vz
c2VzIG9uIGRlYWRsb2NrIG9mIHRoZSBmaWZvcyBkdXJpbmcgc3RhcnR1cC4KICAgICAgICAgbm9y
bWFsX3N0YXJ0dXBfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICB0aHJlYWRpbmcu
VGhyZWFkKHRhcmdldD1zZWxmLl9kZWFkbG9ja19kZXRlY3RvciwKKyAgICAgICAgdGhyZWFkaW5n
LlRocmVhZChuYW1lPSdEZWFkbG9ja0RldGVjdG9yJywgdGFyZ2V0PWRlYWRsb2NrX2RldGVjdG9y
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KFtzZWxmLl9zZXJ2ZXJfcHJvY2Vzcywg
c2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcywgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzc10sIG5v
cm1hbF9zdGFydHVwX2V2ZW50KSkuc3RhcnQoKQogCiAgICAgICAgIG91dHB1dCA9ICcnCkBAIC01
NzYsMjggKzU4Nyw2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVy
KToKICAgICAgICAgICAgIG5vcm1hbF9zdGFydHVwX2V2ZW50LnNldCgpCiAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQogCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6Ci0gICAg
ICAgIGRyaXZlcl9vdXRwdXQgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnJ1
bl90ZXN0KGRyaXZlcl9pbnB1dCkKLSAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoKLSAg
ICAgICAgICAgICMgV2hlbiBBbmRyb2lkIGlzIE9PTSwgRFJUIHByb2Nlc3MgbWF5IGJlIGtpbGxl
ZCBieSBBY3Rpdml0eU1hbmFnZXIgb3Igc3lzdGVtIE9PTS4KLSAgICAgICAgICAgICMgSXQgbG9v
a3MgbGlrZSBhIGNyYXNoIGJ1dCB0aGVyZSBpcyBubyBmYXRhbCBzaWduYWwgbG9nZ2VkLiBSZS1y
dW4gdGhlIHRlc3QgZm9yCi0gICAgICAgICAgICAjIHN1Y2ggY3Jhc2guCi0gICAgICAgICAgICAj
IFRvIHRlc3Q6IGFkYiBzaGVsbCBhbSBmb3JjZS1zdG9wIG9yZy5jaHJvbWl1bS5uYXRpdmVfdGVz
dCwKLSAgICAgICAgICAgICMgb3Iga2lsbCAtMTEgcGlkIHR3aWNlIG9yIHRocmVlIHRpbWVzIHRv
IHNpbXVsYXRlIGEgZmF0YWwgY3Jhc2guCi0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0Ll9nZXRf
bG9nY2F0KCkuZmluZCgnRmF0YWwgc2lnbmFsJykgPT0gLTE6Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5fcmVzdGFydF9hZnRlcl9raWxsZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9y
dC5fZHJ0X3JldHJ5X2FmdGVyX2tpbGxlZCArPSAxCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5f
cG9ydC5fZHJ0X3JldHJ5X2FmdGVyX2tpbGxlZCA+IDEwOgotICAgICAgICAgICAgICAgICAgICBy
YWlzZSBBc3NlcnRpb25FcnJvcignRHVtcFJlbmRlclRyZWUgaXMga2lsbGVkIGJ5IEFuZHJvaWQg
Zm9yIHRvbyBtYW55IHRpbWVzIScpCi0gICAgICAgICAgICAgICAgX2xvZy5lcnJvcignRHVtcFJl
bmRlclRyZWUgaXMga2lsbGVkIGJ5IHN5c3RlbSAoJWQpLicgJSBzZWxmLl9wb3J0Ll9kcnRfcmV0
cnlfYWZ0ZXJfa2lsbGVkKQotICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgICAg
ICAgICAgIyBTbGVlcCAxMCBzZWNvbmRzIHRvIGxldCBzeXN0ZW0gcmVjb3Zlci4KLSAgICAgICAg
ICAgICAgICB0aW1lLnNsZWVwKDEwKQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl90
ZXN0KGRyaXZlcl9pbnB1dCkKLQotICAgICAgICBzZWxmLl9yZXN0YXJ0X2FmdGVyX2tpbGxlZCA9
IEZhbHNlCi0gICAgICAgIHJldHVybiBkcml2ZXJfb3V0cHV0Ci0KICAgICBkZWYgc3RvcChzZWxm
KToKICAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAn
Zm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCiAKQEAgLTYxNiwxNSArNjA1LDggQEAgY2xh
c3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERy
aXZlciwgc2VsZikuc3RvcCgpCiAKLSAgICAgICAgc2Vjb25kcyA9IDAKLSAgICAgICAgd2hpbGUg
KHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9maWZvX3BhdGgpIG9yCi0gICAg
ICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0
aCkgb3IKLSAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9l
cnJfZmlmb19wYXRoKSk6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKDEpCi0gICAgICAgICAgICBz
ZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIHNlbGYuX2luX2ZpZm9f
cGF0aCwgc2VsZi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9fcGF0aF0pCi0gICAgICAg
ICAgICBzZWNvbmRzICs9IDEKLSAgICAgICAgICAgIGlmIHNlY29uZHMgPj0gRFJUX1NUQVJUX1NU
T1BfVElNRU9VVF9TRUNTOgotICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdG
YWlsZWQgdG8gcmVtb3ZlIGZpZm8gZmlsZXMuIE1heSBiZSBsb2NrZWQuJykKKyAgICAgICAgaWYg
bm90IENocm9taXVtQW5kcm9pZERyaXZlci5fbG9vcF93aXRoX3RpbWVvdXQoc2VsZi5fcmVtb3Zl
X2FsbF9waXBlcywgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKToKKyAgICAgICAgICAgIHJh
aXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8gcmVtb3ZlIGZpZm8gZmlsZXMuIE1heSBiZSBs
b2NrZWQuJykKIAogICAgIGRlZiBfY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChzZWxmLCBkcml2
ZXJfaW5wdXQpOgogICAgICAgICBjb21tYW5kID0gc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVy
LCBzZWxmKS5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChkcml2ZXJfaW5wdXQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>