<?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>99517</bug_id>
          
          <creation_ts>2012-10-16 15:43:23 -0700</creation_ts>
          <short_desc>run-perf-tests should have a --profile option for easy profiling</short_desc>
          <delta_ts>2012-11-30 13:20:37 -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>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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>peter</cc>
    
    <cc>rniwa</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>willchan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>743648</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-16 15:43:23 -0700</bug_when>
    <thetext>run-perf-tests should have a --profile option for easy profiling

On Mac we&apos;d use instruments.
On Linux, presumably perf or pprof (if that&apos;s possible from our tcmalloc implementation).
On windows, I&apos;m not sure.

It&apos;s possible we&apos;d need to make thees options more-specific (like --instruments, vs. --pprof, etc.) like they were for run-sunspider.

The goal would be to make it very easy for those not-necessarily familiar with the profiling tools on the various platforms to get useful perf data about their webkit changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743662</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-16 16:06:48 -0700</bug_when>
    <thetext>DYLD_FRAMEWORK_PATH=~/Projects/WebKit/WebKitBuild/Release instruments -t &quot;resources/TimeProfile20us.tracetemplate&quot; ../../WebKitBuild/Release/DumpRenderTree ../Dromaeo/dom-query.html

works for Mac.  It&apos;s not yet clear to me the exact design I want here.  Presumably we&apos;d hand the Driver some sort of delegate object and it would know how to call out to it to adjust things like it&apos;s command line, or right after it started, or adjust it&apos;s environment.

For Instruments, we can either:
- Wrap the DRT call in an instruments call OR
- Use &apos;instruments -p PID&apos; to attach after the fact
In either case we&apos;ll need to provide a template file, as configuring instruments from the command line doesn&apos;t seem practical.

For perf, I believe we need to wrap the call in &quot;perf record&quot;, similar to the first option for instruments:
https://perf.wiki.kernel.org/index.php/Main_Page

For pprof, we just need to set an environment variable.

For valgrind/callgrind we would need to wrap the call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743663</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-16 16:07:49 -0700</bug_when>
    <thetext>The goal with this would not be to support every option, but rather to give the simplest possible profile, and those who want more advanced options can pass --pause-before-testing or --wrapper themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753887</commentid>
    <comment_count>3</comment_count>
      <attachid>171341</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-29 17:12:35 -0700</bug_when>
    <thetext>Created attachment 171341
proof of concept</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758893</commentid>
    <comment_count>4</comment_count>
      <attachid>172405</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-05 14:16:15 -0800</bug_when>
    <thetext>Created attachment 172405
I have a plan to clean this up, just moving to my other machine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768548</commentid>
    <comment_count>5</comment_count>
      <attachid>174529</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-15 15:08:13 -0800</bug_when>
    <thetext>Created attachment 174529
Works on Mac, will fix Linux next week</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768567</commentid>
    <comment_count>6</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-11-15 15:26:22 -0800</bug_when>
    <thetext>FYI instruments has a command line tool called iProfiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768571</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-15 15:28:57 -0800</bug_when>
    <thetext>Thanks!  I was unaware of that tool.  That seems like a much nicer interface than the &quot;instruments&quot; tool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775830</commentid>
    <comment_count>8</comment_count>
      <attachid>176054</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-26 13:35:22 -0800</bug_when>
    <thetext>Created attachment 176054
Ready for first review, likely needs more refinement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775841</commentid>
    <comment_count>9</comment_count>
      <attachid>176054</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-26 13:43:12 -0800</bug_when>
    <thetext>Comment on attachment 176054
Ready for first review, likely needs more refinement

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

&gt; Tools/Scripts/webkitpy/common/profiler.py:52
&gt; +class GooglePProf(Profiler):

It kinda feels like this should be in webkitpy/common/system instead, since the choice of profiler will vary by platform.

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:185
&gt; +        return GooglePProf(self.host.workspace, self.host.executive, self.results_directory(), self._path_to_driver(), identifier)

If this is platform-specific, maybe we should have a SystemHost.create_profiler(results_directory, path_to_executable, identifier) instead?

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:143
&gt; +        self._profiler = self._port.create_profiler()

won&apos;t this always run things under profilers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775845</commentid>
    <comment_count>10</comment_count>
      <attachid>176054</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-26 13:46:09 -0800</bug_when>
    <thetext>Comment on attachment 176054
Ready for first review, likely needs more refinement

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

&gt;&gt; Tools/Scripts/webkitpy/common/profiler.py:52
&gt;&gt; +class GooglePProf(Profiler):
&gt; 
&gt; It kinda feels like this should be in webkitpy/common/system instead, since the choice of profiler will vary by platform.

That&apos;s fine.  My logic here was that these things sit on top of basic system services (like executive, environment, scm, etc.), but in the same sense that SCM is a platform-agnostic wrapper around SCM, this too is a platform-agnostic wrapper around profiling and thus I can see it fitting in system/

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:185
&gt;&gt; +        return GooglePProf(self.host.workspace, self.host.executive, self.results_directory(), self._path_to_driver(), identifier)
&gt; 
&gt; If this is platform-specific, maybe we should have a SystemHost.create_profiler(results_directory, path_to_executable, identifier) instead?

That&apos;s fine too, and that would get rid of two of the args. :)

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:143
&gt;&gt; +        self._profiler = self._port.create_profiler()
&gt; 
&gt; won&apos;t this always run things under profilers?

Opps!  I meant to add an if before uploading, but forgot. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775848</commentid>
    <comment_count>11</comment_count>
      <attachid>176054</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-26 13:47:34 -0800</bug_when>
    <thetext>Comment on attachment 176054
Ready for first review, likely needs more refinement

Can we add a test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775850</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-26 13:49:21 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 176054 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176054&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/common/profiler.py:52
&gt; &gt;&gt; +class GooglePProf(Profiler):
&gt; &gt; 
&gt; &gt; It kinda feels like this should be in webkitpy/common/system instead, since the choice of profiler will vary by platform.
&gt; 
&gt; That&apos;s fine.  My logic here was that these things sit on top of basic system services (like executive, environment, scm, etc.), but in the same sense that SCM is a platform-agnostic wrapper around SCM, this too is a platform-agnostic wrapper around profiling and thus I can see it fitting in system/
&gt;

Yeah, it&apos;s not 100% clear to me whether this should be in system or not. I would be fine w/ it being here as well. Just remember that layout_tests/port isn&apos;t allowed to require Host objects (only SystemHosts).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775856</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-26 13:56:06 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 176054 [details])
&gt; Can we add a test?

Certainly!  I&apos;m grateful for the review feedback, will upload a new patch with modifications tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776100</commentid>
    <comment_count>14</comment_count>
      <attachid>176054</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 17:11:39 -0800</bug_when>
    <thetext>Comment on attachment 176054
Ready for first review, likely needs more refinement

Attachment 176054 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15003328</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776392</commentid>
    <comment_count>15</comment_count>
      <attachid>176054</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-11-26 23:04:34 -0800</bug_when>
    <thetext>Comment on attachment 176054
Ready for first review, likely needs more refinement

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

&gt; Tools/Scripts/webkitpy/common/profiler.py:74
&gt; +# FIXME: iprofile is a newer commandline interface to replace /usr/bin/instruments.

Nit: commandline =&gt; command-line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778086</commentid>
    <comment_count>16</comment_count>
      <attachid>176525</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 11:08:14 -0800</bug_when>
    <thetext>Created attachment 176525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778098</commentid>
    <comment_count>17</comment_count>
      <attachid>176525</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 11:21:47 -0800</bug_when>
    <thetext>Comment on attachment 176525
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/profiler.py:39
&gt; +        return GooglePProf(host.workspace, host.executive, executable_path, output_dir, identifier)

I wonder if we should have a host.platform.is_linux() branch here and then raise a not implemented exception otherwise.

&gt; Tools/Scripts/webkitpy/common/system/profiler.py:61
&gt; +    def __init__(self, workspace, executive, executable_path, output_dir, output_suffix, identifier=None, ):

Why is there a &quot;, &quot; at the end of this declaration?

&gt; Tools/Scripts/webkitpy/common/system/profiler.py:80
&gt; +        profile_lines = profile_text.split(&apos;\n&apos;)[:100]

Why 100?

&gt; Tools/Scripts/webkitpy/common/system/profiler.py:86
&gt; +        first_sample_index = 0
&gt; +        for index, line in enumerate(profile_lines):
&gt; +            if line.startswith(&quot;Total&quot;):
&gt; +                first_sample_index = index + 1
&gt; +                break
&gt; +        print &quot;\n&quot;.join(profile_lines[first_sample_index:first_sample_index + 10])

This whole thing seems like it could be improved.  Can&apos;t you do this with a single multiline regular expression?  You can search for Total at the beginning of a line followed by 0-10 additional lines.

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:332
&gt; +

This change seems suprious</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778121</commentid>
    <comment_count>18</comment_count>
      <attachid>176525</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-28 11:39:01 -0800</bug_when>
    <thetext>Comment on attachment 176525
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/profiler.py:86
&gt;&gt; +        print &quot;\n&quot;.join(profile_lines[first_sample_index:first_sample_index + 10])
&gt; 
&gt; This whole thing seems like it could be improved.  Can&apos;t you do this with a single multiline regular expression?  You can search for Total at the beginning of a line followed by 0-10 additional lines.

I&apos;m not actually even clear what did_stop() is supposed to be doing ... it seems like the idea is to wait until something has exited and then run pprof, right? Maybe this should be named to profile_after_exit() or something? Does instruments log automatically on the mac, and that&apos;s why the mac did_stop() is a no-op?

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:307
&gt; +            self._profiler.did_stop()

maybe just put this inside the if self._server_process: block, as if self._profiler: \ self._profiler.did_stop() ? The was_running flag seems unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778143</commentid>
    <comment_count>19</comment_count>
      <attachid>176525</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 11:59:20 -0800</bug_when>
    <thetext>Comment on attachment 176525
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/profiler.py:39
&gt;&gt; +        return GooglePProf(host.workspace, host.executive, executable_path, output_dir, identifier)
&gt; 
&gt; I wonder if we should have a host.platform.is_linux() branch here and then raise a not implemented exception otherwise.

It&apos;s possible to use google-pprof on any platform. :)  All you need is a binary built with a modern tcmalloc is my understanding.  tcmalloc signs up for SIG_PROF when CPUPROFILE is set in the environment and writes stacks to the specified file at some pre-determined interval.  None of that is linux specific AFAIK.  I&apos;m not sure what sort of callback it uses on Windows, but my impression was that it works there too?

&gt;&gt; Tools/Scripts/webkitpy/common/system/profiler.py:61
&gt;&gt; +    def __init__(self, workspace, executive, executable_path, output_dir, output_suffix, identifier=None, ):
&gt; 
&gt; Why is there a &quot;, &quot; at the end of this declaration?

Fixed.

&gt;&gt; Tools/Scripts/webkitpy/common/system/profiler.py:86
&gt;&gt; +        print &quot;\n&quot;.join(profile_lines[first_sample_index:first_sample_index + 10])
&gt; 
&gt; This whole thing seems like it could be improved.  Can&apos;t you do this with a single multiline regular expression?  You can search for Total at the beginning of a line followed by 0-10 additional lines.

Fixed (and tested)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778144</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 11:59:37 -0800</bug_when>
    <thetext>Sorry, didn&apos;t mean to override your flag chagnes.  I&apos;ll be uploading a new one shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778156</commentid>
    <comment_count>21</comment_count>
      <attachid>176536</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 12:06:16 -0800</bug_when>
    <thetext>Created attachment 176536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778189</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 12:28:06 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 176525 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176525&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/common/system/profiler.py:86
&gt; &gt;&gt; +        print &quot;\n&quot;.join(profile_lines[first_sample_index:first_sample_index + 10])
&gt; &gt; 
&gt; &gt; This whole thing seems like it could be improved.  Can&apos;t you do this with a single multiline regular expression?  You can search for Total at the beginning of a line followed by 0-10 additional lines.
&gt; 
&gt; I&apos;m not actually even clear what did_stop() is supposed to be doing ... it seems like the idea is to wait until something has exited and then run pprof, right? Maybe this should be named to profile_after_exit() or something? Does instruments log automatically on the mac, and that&apos;s why the mac did_stop() is a no-op?

Yeah, this class is a little funny since it has two virtual methods and each subclass overrides a different one.  I get where Eric is going, but I&apos;m not sure we have enough examples to work out the right design.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:307
&gt; &gt; +            self._profiler.did_stop()
&gt; 
&gt; maybe just put this inside the if self._server_process: block, as if self._profiler: \ self._profiler.did_stop() ? The was_running flag seems unnecessary.

Looks like Eric addressed this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778192</commentid>
    <comment_count>23</comment_count>
      <attachid>176536</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 12:29:26 -0800</bug_when>
    <thetext>Comment on attachment 176536
Patch

My guess is that we&apos;ll need to iterate on the design of the Profiler class as we get more examples of profilers, but I think it makes sense to start with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778196</commentid>
    <comment_count>24</comment_count>
      <attachid>176525</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 12:31:16 -0800</bug_when>
    <thetext>Comment on attachment 176525
Patch

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

&gt;&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/profiler.py:86
&gt;&gt;&gt;&gt;&gt; +        print &quot;\n&quot;.join(profile_lines[first_sample_index:first_sample_index + 10])
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This whole thing seems like it could be improved.  Can&apos;t you do this with a single multiline regular expression?  You can search for Total at the beginning of a line followed by 0-10 additional lines.
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m not actually even clear what did_stop() is supposed to be doing ... it seems like the idea is to wait until something has exited and then run pprof, right? Maybe this should be named to profile_after_exit() or something? Does instruments log automatically on the mac, and that&apos;s why the mac did_stop() is a no-op?
&gt;&gt; 
&gt;&gt; Fixed (and tested)
&gt; 
&gt; Yeah, this class is a little funny since it has two virtual methods and each subclass overrides a different one.  I get where Eric is going, but I&apos;m not sure we have enough examples to work out the right design.

Correct.  instruments on the mac prints information on where it saved the profile to stdout.  The did_stop for pprof just makes it nice to see the profiles of many tests.  What you&apos;re seeing is two separate designs merged into one class. :)  I suspect we&apos;ll iterate many times from here.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:307
&gt;&gt;&gt; +            self._profiler.did_stop()
&gt;&gt; 
&gt;&gt; maybe just put this inside the if self._server_process: block, as if self._profiler: \ self._profiler.did_stop() ? The was_running flag seems unnecessary.
&gt; 
&gt; Looks like Eric addressed this comment.

Ah true!  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778200</commentid>
    <comment_count>25</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-28 12:35:39 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=176536&amp;action=review

&gt; Tools/Scripts/webkitpy/common/system/profiler.py:57
&gt; +    def did_stop(self):

I still don&apos;t know what &quot;did_stop&quot; is supposed to do or when (and why) I&apos;m supposed to call it ... Can we either pick a better name, or add a comment or a doc string or something? Is this supposed to be called after the process is determined to have exited? only after you explicitly kill the attached process? Should we maybe change the interface to something that allows the profiler to control how the process is stopped, etc.?

Note that I&apos;m basically fine w/ this patch as-is except for this method name, just to be clear :).

&gt; Tools/Scripts/webkitpy/common/system/profiler_unittest.py:82
&gt; +&quot;&quot;&quot;

Is it possible to make this test output smaller without losing any essential points?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778202</commentid>
    <comment_count>26</comment_count>
      <attachid>176546</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 12:36:16 -0800</bug_when>
    <thetext>Created attachment 176546
This patch should actually apply</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778209</commentid>
    <comment_count>27</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-28 12:39:51 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt;&gt;&gt; I&apos;m not actually even clear what did_stop() is supposed to be doing ... it seems like the idea is to wait until something has exited and then run pprof, right? Maybe this should be named to profile_after_exit() or something? Does instruments log automatically on the mac, and that&apos;s why the mac did_stop() is a no-op?
&gt; &gt;&gt; 
&gt; &gt;&gt; Fixed (and tested)
&gt; &gt; 
&gt; &gt; Yeah, this class is a little funny since it has two virtual methods and each subclass overrides a different one.  I get where Eric is going, but I&apos;m not sure we have enough examples to work out the right design.
&gt; 
&gt; Correct.  instruments on the mac prints information on where it saved the profile to stdout.  The did_stop for pprof just makes it nice to see the profiles of many tests.  What you&apos;re seeing is two separate designs merged into one class. :)  I suspect we&apos;ll iterate many times from here.
&gt; 

Right, I understand how you got here and am okay with iterating the code, it&apos;s just that the patch as-is is too terse for me to understand what the heck is going on or how I could possibly judge something to be correct :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778229</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 12:52:26 -0800</bug_when>
    <thetext>It sounds like you&apos;d like did_stop renamed.  Happy to rename it to profile_after_exit per your suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778233</commentid>
    <comment_count>29</comment_count>
      <attachid>176556</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 12:53:39 -0800</bug_when>
    <thetext>Created attachment 176556
renamed did_stop to profile_after_exit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778257</commentid>
    <comment_count>30</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-28 13:11:32 -0800</bug_when>
    <thetext>Thanks! Sorry if I wasn&apos;t clearer before, that was indeed all I was asking for :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778264</commentid>
    <comment_count>31</comment_count>
      <attachid>176556</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 13:22:13 -0800</bug_when>
    <thetext>Comment on attachment 176556
renamed did_stop to profile_after_exit

Clearing flags on attachment: 176556

Committed r136051: &lt;http://trac.webkit.org/changeset/136051&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778265</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 13:22:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778267</commentid>
    <comment_count>33</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 13:23:40 -0800</bug_when>
    <thetext>Once I&apos;ve iterated on this a few more times I&apos;ll make an announcement on webkit-dev about how to use this for easier profiling.  For now folks should feel encouraged to try this out, and please file bugs when it falls on its face in your configuration. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780352</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-30 13:20:37 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; FYI instruments has a command line tool called iProfiler.

Wrote a patch to move to iprofiler in bug 103765.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171341</attachid>
            <date>2012-10-29 17:12:35 -0700</date>
            <delta_ts>2012-11-05 14:16:13 -0800</delta_ts>
            <desc>proof of concept</desc>
            <filename>bug-99517-20121029171101.patch</filename>
            <type>text/plain</type>
            <size>3618</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMjYwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzE1NWViZmVmMWE4OGY5ZjNjYmY4ODFiMmRkYmU4YjA2
NjcxMDUwNC4uNWQ4ZmQ2MDBkNWRlZGJmY2I0Mzk1ZWRiYWQzZTk5ZmZlN2VkZDQ4OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEyLTEwLTI5ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAo
UG9ydC50by5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5OgorICAgICAgICAoUGVy
ZlRlc3RzUnVubmVyLl9wYXJzZV9hcmdzKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fcnVu
X3Rlc3RzX3NldCk6CisKIDIwMTItMTAtMjMgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSByZW1vdmUgdGhlIGNvbnN0IHF1YWxpZmll
ciBmcm9tIFdlYlRlc3REZWxlZ2F0ZTo6cHJpbnRNZXNzYWdlCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggYWU1NWM2ODRkZGM2YTI5
ODg3MjIyMjdmMmE4MGEyOWZlYTQ3MTU4NC4uZGM4NWU3NzM3N2MwMDdhMzQ3OGNlMWQxNzIxMDM1
YjY3MjU4MmI3MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weQpAQCAtODg2LDYgKzg4Niw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgICAgIFtuYW1lLCB2YWx1ZV0gPSBzdHJpbmdfdmFyaWFibGUuc3BsaXQoJz0nLCAxKQog
ICAgICAgICAgICAgY2xlYW5fZW52W25hbWVdID0gdmFsdWUKIAorICAgICAgICBpZiBzZWxmLmdl
dF9vcHRpb24oJ3Byb2ZpbGUnKToKKyAgICAgICAgICAgIGNsZWFuX2VudlsnQ1BVUFJPRklMRSdd
ID0gJy90bXAvY3B1cHJvZmlsZScKKwogICAgICAgICByZXR1cm4gY2xlYW5fZW52CiAKICAgICBk
ZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3Rz
cnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdHNydW5uZXIucHkKaW5kZXggNDJlMGQ5NmUxMWE2NTIwNWQxOGMwNjk4YzI4Y2UwZjhjNjNj
MWYyYy4uYTgyY2UwOGFiMDNkYTU3ZjVkYjdiNzExMmI0MTQyN2E4MjRlYTUxZSAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5u
ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdHNydW5uZXIucHkKQEAgLTM2LDYgKzM2LDcgQEAgaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQg
dGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgZmluZF9maWxlcworZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IFNDTURldGVjdG9yCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5uZXQuZmlsZV91cGxvYWRlciBpbXBvcnQgRmlsZVVwbG9hZGVyCkBAIC0xMTcsNiArMTE4LDgg
QEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaGVscD0i
UnVuIHJlcGxheSB0ZXN0cy4iKSwKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCIt
LWZvcmNlIiwgZGVzdD0ic2tpcHBlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFs
c2UsCiAgICAgICAgICAgICAgICAgaGVscD0iUnVuIGFsbCB0ZXN0cywgaW5jbHVkaW5nIHRoZSBv
bmVzIGluIHRoZSBTa2lwcGVkIGxpc3QuIiksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbigiLS1wcm9maWxlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICBo
ZWxwPSJPdXRwdXQgcGVyLXRlc3QgcHJvZmlsZSBpbmZvcm1hdGlvbi4iKSwKICAgICAgICAgICAg
IF0KICAgICAgICAgcmV0dXJuIG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD0ocGVy
Zl9vcHRpb25fbGlzdCkpLnBhcnNlX2FyZ3MoYXJncykKIApAQCAtMzA4LDYgKzMxMSwyMCBAQCBj
bGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKIAogICAgICAgICAgICAgZHJpdmVyLnN0b3Ao
KQogCisgICAgICAgICAgICBpZiBwb3J0LmdldF9vcHRpb24oJ3Byb2ZpbGUnKToKKyAgICAgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBwcm9mX2FyZ3MgPSBbJy91c3IvYmlu
L3BlcmwnLCAnL3Vzci9iaW4vZ29vZ2xlLXBwcm9mJywgJy0tdGV4dCcsIHBvcnQuX3BhdGhfdG9f
ZHJpdmVyKCksICcvdG1wL2NwdXByb2ZpbGUnXQorICAgICAgICAgICAgICAgICAgICBwcm9maWxl
X3RleHQgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChwcHJvZl9hcmdzKQorICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlX2xpbmVzID0gcHJvZmlsZV90ZXh0LnNwbGl0KCdcbicp
WzoxMDBdCisgICAgICAgICAgICAgICAgICAgIGZpcnN0X3NhbXBsZV9pbmRleCA9IDAKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShwcm9maWxlX2xpbmVz
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiVG90YWwiKToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9zYW1wbGVfaW5kZXggPSBpbmRleCAr
IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAg
ICBwcmludCAiXG4iLmpvaW4ocHJvZmlsZV9saW5lc1tmaXJzdF9zYW1wbGVfaW5kZXg6Zmlyc3Rf
c2FtcGxlX2luZGV4KzEwXSkKKyAgICAgICAgICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6
CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJFcnJvcjogIiwgZS5tZXNzYWdlX3dpdGhfb3V0
cHV0KCkKKwogICAgICAgICByZXR1cm4gdW5leHBlY3RlZAogCiAgICAgZGVmIF9ydW5fc2luZ2xl
X3Rlc3Qoc2VsZiwgdGVzdCwgZHJpdmVyKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172405</attachid>
            <date>2012-11-05 14:16:15 -0800</date>
            <delta_ts>2012-11-15 15:08:09 -0800</delta_ts>
            <desc>I have a plan to clean this up, just moving to my other machine</desc>
            <filename>bug-99517-20121105141429.patch</filename>
            <type>text/plain</type>
            <size>5308</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMjM0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWJlOTM0N2VmYzMxMDBlNGQ1ZmRlODNjYjlkZGYwZmIy
YTY5NmQ0ZC4uZmZjYzQ5ODBhOWVmY2E4NjE4OTI0MDY1YmMxYTMyYzA0MTk0MGUzNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEyLTEwLTI5ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAo
UG9ydC50by5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5OgorICAgICAgICAoUGVy
ZlRlc3RzUnVubmVyLl9wYXJzZV9hcmdzKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fcnVu
X3Rlc3RzX3NldCk6CisKIDIwMTItMTEtMDEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIFB5dGhvbi1MTERCIHN1cHBvcnQgZm9yIFdURjo6VmVjdG9yIHR5
cGVzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNl
LnB5CmluZGV4IGVhMWU5ZDAzM2VhMGIxNjY1MGVjOWVlYzg4MWVkODc3NmIxMmQxMTAuLjI1NGQw
ZmZkY2E1YjFkOWVlNmIzNGZiYmE0YjFlOTE1NzRmOTk0NDcgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTg4Miw2ICs4ODIsOSBA
QCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICBbbmFtZSwgdmFsdWVdID0gc3RyaW5n
X3ZhcmlhYmxlLnNwbGl0KCc9JywgMSkKICAgICAgICAgICAgIGNsZWFuX2VudltuYW1lXSA9IHZh
bHVlCiAKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdwcm9maWxlJyk6CisgICAgICAgICAg
ICBjbGVhbl9lbnZbJ0NQVVBST0ZJTEUnXSA9ICcvdG1wL2NwdXByb2ZpbGUnCisKICAgICAgICAg
cmV0dXJuIGNsZWFuX2VudgogCiAgICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwg
cmVzdWx0c19maWxlbmFtZSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJm
b3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQppbmRleCA5ZTJmODdkNDdlMjQ4NzAzNmM3OThjMzU5
ZjdkNTNjMmZjNDAyZDJmLi4xNzUyMzcwOWEwYmJhMzRjYWMwMDRiYmM3YTRjNWIxNmQyZDUwZDNh
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMv
cGVyZnRlc3QucHkKQEAgLTE2NiwxMSArMTY2LDExIEBAIGNsYXNzIFBlcmZUZXN0KG9iamVjdCk6
CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJUaGUgdGVzdCBkaWRuJ3QgcmVwb3J0IGFsbCBzdGF0
aXN0aWNzLiIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGZvciByZXN1bHRf
bmFtZSBpbiBvcmRlcmVkX3Jlc3VsdHNfa2V5czoKLSAgICAgICAgICAgIGlmIHJlc3VsdF9uYW1l
ID09IHRlc3RfbmFtZToKLSAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJl
c3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSwgZGVzY3JpcHRpb25fc3RyaW5nKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJl
c3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSkKKyAgICAgICAgIyBmb3IgcmVzdWx0X25h
bWUgaW4gb3JkZXJlZF9yZXN1bHRzX2tleXM6CisgICAgICAgICMgICAgIGlmIHJlc3VsdF9uYW1l
ID09IHRlc3RfbmFtZToKKyAgICAgICAgIyAgICAgICAgIHNlbGYub3V0cHV0X3N0YXRpc3RpY3Mo
cmVzdWx0X25hbWUsIHJlc3VsdHNbcmVzdWx0X25hbWVdLCBkZXNjcmlwdGlvbl9zdHJpbmcpCisg
ICAgICAgICMgICAgIGVsc2U6CisgICAgICAgICMgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0
aWNzKHJlc3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdHMKIAogICAgIGRlZiBvdXRwdXRfc3RhdGlzdGljcyhzZWxmLCB0ZXN0X25hbWUsIHJlc3Vs
dHMsIGRlc2NyaXB0aW9uX3N0cmluZz1Ob25lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKaW5kZXgg
NDJlMGQ5NmUxMWE2NTIwNWQxOGMwNjk4YzI4Y2UwZjhjNjNjMWYyYy4uYTEyZjkzMmZjY2U1Zjg3
MmI1ZTk3OTkzNDI5OWY0OGI2ZjhjM2ViYyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKQEAgLTM2
LDYgKzM2LDcgQEAgaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbiBpbXBvcnQgZmluZF9maWxlcworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0
LnNjbS5kZXRlY3Rpb24gaW1wb3J0IFNDTURldGVjdG9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5o
b3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuZmlsZV91cGxvYWRlciBp
bXBvcnQgRmlsZVVwbG9hZGVyCkBAIC0xMTcsNiArMTE4LDggQEAgY2xhc3MgUGVyZlRlc3RzUnVu
bmVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaGVscD0iUnVuIHJlcGxheSB0ZXN0cy4iKSwK
ICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWZvcmNlIiwgZGVzdD0ic2tpcHBl
ZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAg
aGVscD0iUnVuIGFsbCB0ZXN0cywgaW5jbHVkaW5nIHRoZSBvbmVzIGluIHRoZSBTa2lwcGVkIGxp
c3QuIiksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcm9maWxlIiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICBoZWxwPSJPdXRwdXQgcGVyLXRlc3Qg
cHJvZmlsZSBpbmZvcm1hdGlvbi4iKSwKICAgICAgICAgICAgIF0KICAgICAgICAgcmV0dXJuIG9w
dHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBhcnNl
X2FyZ3MoYXJncykKIApAQCAtMTY0LDEwICsxNjcsMTMgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVy
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0JBRF9QUkVQ
QVJBVElPTgogCiAgICAgICAgIHVuZXhwZWN0ZWQgPSBzZWxmLl9ydW5fdGVzdHNfc2V0KHNvcnRl
ZChsaXN0KHRlc3RzKSwga2V5PWxhbWJkYSB0ZXN0OiB0ZXN0LnRlc3RfbmFtZSgpKSwgc2VsZi5f
cG9ydCkKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5nZW5lcmF0ZV9yZXN1bHRzOgotICAgICAg
ICAgICAgZXhpdF9jb2RlID0gc2VsZi5fZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cygpCi0gICAg
ICAgICAgICBpZiBleGl0X2NvZGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRfY29kZQor
ICAgICAgICAjIGlmIHNlbGYuX29wdGlvbnMuZ2VuZXJhdGVfcmVzdWx0czoKKyAgICAgICAgIyAg
ICAgZXhpdF9jb2RlID0gc2VsZi5fZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cygpCisgICAgICAg
ICMgICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAgIyAgICAgICAgIHJldHVybiBleGl0X2NvZGUK
KworICAgICAgICBpZiBsZW4odGVzdHMpID09IDE6CisgICAgICAgICAgICBvcy5leGVjbCgnL3Vz
ci9iaW4vcGVybCcsICcvdXNyL2Jpbi9nb29nbGUtcHByb2YnLCBzZWxmLl9wb3J0Ll9wYXRoX3Rv
X2RyaXZlcigpLCAnL3RtcC9jcHVwcm9maWxlJykKIAogICAgICAgICByZXR1cm4gdW5leHBlY3Rl
ZAogCkBAIC0zMDgsNiArMzE0LDE3IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgog
CiAgICAgICAgICAgICBkcml2ZXIuc3RvcCgpCiAKKyAgICAgICAgICAgIGlmIHBvcnQuZ2V0X29w
dGlvbigncHJvZmlsZScpOgorICAgICAgICAgICAgICAgIHBwcm9mX2FyZ3MgPSBbJy91c3IvYmlu
L3BlcmwnLCAnL3Vzci9iaW4vZ29vZ2xlLXBwcm9mJywgJy0tdGV4dCcsIHBvcnQuX3BhdGhfdG9f
ZHJpdmVyKCksICcvdG1wL2NwdXByb2ZpbGUnXQorICAgICAgICAgICAgICAgIHByb2ZpbGVfdGV4
dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHBwcm9mX2FyZ3MpCisgICAgICAg
ICAgICAgICAgcHJvZmlsZV9saW5lcyA9IHByb2ZpbGVfdGV4dC5zcGxpdCgnXG4nKVs6MTAwXQor
ICAgICAgICAgICAgICAgIGZpcnN0X3NhbXBsZV9pbmRleCA9IDAKKyAgICAgICAgICAgICAgICBm
b3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHByb2ZpbGVfbGluZXMpOgorICAgICAgICAgICAg
ICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlRvdGFsIik6CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdF9zYW1wbGVfaW5kZXggPSBpbmRleCArIDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcHJpbnQgIlxuIi5qb2luKHByb2ZpbGVfbGluZXNb
Zmlyc3Rfc2FtcGxlX2luZGV4OmZpcnN0X3NhbXBsZV9pbmRleCsxMF0pCisKICAgICAgICAgcmV0
dXJuIHVuZXhwZWN0ZWQKIAogICAgIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIHRlc3QsIGRy
aXZlcik6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174529</attachid>
            <date>2012-11-15 15:08:13 -0800</date>
            <delta_ts>2012-11-26 13:35:20 -0800</delta_ts>
            <desc>Works on Mac, will fix Linux next week</desc>
            <filename>bug-99517-20121115150615.patch</filename>
            <type>text/plain</type>
            <size>10817</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0Nzk2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzZlYjBhNGMwNDdmZDA0ZGZkOTIzM2RhNjY4NDQ3YjZj
YjM2NTUyNS4uYjY0Y2UyNzYzMGVjMTU0MjQyODMyZjU0OTA5NzIyN2RjYzFiMzM1MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEyLTExLTA2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAo
UG9ydC50by5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5OgorICAgICAgICAoUGVy
ZlRlc3RzUnVubmVyLl9wYXJzZV9hcmdzKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fcnVu
X3Rlc3RzX3NldCk6CisKIDIwMTItMTEtMTUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVwZGF0ZSBteSBlLW1haWwgYWRkcmVzcy4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKaW5kZXggNzk5M2Qw
NTc3YWYxM2M4OGQ2YzUwMzg3NzliYmJhNWY2NmM1NjUxNy4uOTZiZTY4YWEyYzZmMzY1ZTE1NTI2
MjJmYTVmMmRlODdkMmRiMWRhZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKQEAgLTM3LDYgKzM3LDcgQEAgaW1wb3J0IG9zCiAK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAogCitmcm9tIC5wcm9maWxl
ciBpbXBvcnQgSW5zdHJ1bWVudHMKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9f
KQogCkBAIC0xNDAsNiArMTQxLDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHNl
bGYuX3NlcnZlcl9wcm9jZXNzID0gTm9uZQogCiAgICAgICAgIHNlbGYuX21lYXN1cmVtZW50cyA9
IHt9CisgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gSW5zdHJ1bWVudHMoc2VsZi5fcG9ydC5ob3N0
LndvcmtzcGFjZSwgc2VsZi5fcG9ydC5ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5fcG9ydC5yZXN1bHRz
X2RpcmVjdG9yeSgpKQogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuc3Rv
cCgpCkBAIC0yODIsMTYgKzI4NCwyMyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAg
ZW52aXJvbm1lbnRbJ0xPQ0FMX1JFU09VUkNFX1JPT1QnXSA9IHNlbGYuX3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpCiAgICAgICAgIGlmICdXRUJLSVRPVVRQVVRESVInIGluIG9zLmVudmlyb246CiAg
ICAgICAgICAgICBlbnZpcm9ubWVudFsnV0VCS0lUT1VUUFVURElSJ10gPSBvcy5lbnZpcm9uWydX
RUJLSVRPVVRQVVRESVInXQorICAgICAgICBpZiBzZWxmLl9wcm9maWxlcjoKKyAgICAgICAgICAg
IGVudmlyb25tZW50ID0gc2VsZi5fcHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQoZW52aXJv
bm1lbnQpCiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAg
ICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Mg
PSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZXJ2
ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmly
b25tZW50KQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCisgICAgICAgIGlm
IHNlbGYuX3Byb2ZpbGVyOgorICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIuYXR0YWNoX3RvX3Bp
ZChzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5waWQoKSkKIAogICAgIGRlZiBzdG9wKHNlbGYpOgogICAg
ICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9w
cm9jZXNzLnN0b3Aoc2VsZi5fcG9ydC5kcml2ZXJfc3RvcF90aW1lb3V0KCkpCiAgICAgICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IE5vbmUKIAorICAgICAgICBpZiBzZWxmLl9wcm9maWxl
cjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyLmRpZF9zdG9wKCkKKwogICAgICAgICBpZiBz
ZWxmLl9kcml2ZXJfdGVtcGRpcjoKICAgICAgICAgICAgIHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0u
cm10cmVlKHN0cihzZWxmLl9kcml2ZXJfdGVtcGRpcikpCiAgICAgICAgICAgICBzZWxmLl9kcml2
ZXJfdGVtcGRpciA9IE5vbmUKQEAgLTMxNSw2ICszMjQsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0
KToKICAgICAgICAgY21kLmV4dGVuZChwZXJfdGVzdF9hcmdzKQogCiAgICAgICAgIGNtZC5hcHBl
bmQoJy0nKQorCiAgICAgICAgIHJldHVybiBjbWQKIAogICAgIGRlZiBfY2hlY2tfZm9yX2RyaXZl
cl9jcmFzaChzZWxmLCBlcnJvcl9saW5lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcHJvZmlsZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3Byb2ZpbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4Y2VlYjhjZGY1
ZmM1MGU2MmYyNWM3OTg0ZmQwNzNmNWJiMjQ3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Byb2ZpbGVyLnB5CkBAIC0wLDAgKzEs
NzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFByb2ZpbGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHdvcmtzcGFjZSwgZXhlY3V0aXZlLCByZXN1bHRzX2RpciwgaWRlbnRpZmllcj1O
b25lKToKKyAgICAgICAgc2VsZi5fd29ya3NwYWNlID0gd29ya3NwYWNlCisgICAgICAgIHNlbGYu
X2V4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZQorICAgICAgICBzZWxmLl9yZXN1bHRzX2RpciA9IHJlc3Vs
dHNfZGlyCisgICAgICAgIHNlbGYuX2lkZW50aWZlciA9ICJ0ZXN0IgorCisgICAgZGVmIGFkanVz
dGVkX2Vudmlyb25tZW50KHNlbGYsIGVudik6CisgICAgICAgIHJldHVybiBlbnYKKworICAgIGRl
ZiBhdHRhY2hfdG9fcGlkKHNlbGYsIHBpZCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBkaWRf
c3RvcChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEdvb2dsZVBQcm9mKFByb2ZpbGVy
KToKKyAgICBkZWYgYWRqdXN0ZWRfZW52aXJvbm1lbnQoc2VsZiwgZW52KToKKyAgICAgICAgZW52
WydDUFVQUk9GSUxFJ10gPSAnL3RtcC9jcHVwcm9maWxlJworICAgICAgICByZXR1cm4gZW52CisK
KyAgICBkZWYgZGlkX3N0b3Aoc2VsZik6CisgICAgICAgIHBwcm9mX2FyZ3MgPSBbJy91c3IvYmlu
L3BlcmwnLCAnL3Vzci9iaW4vZ29vZ2xlLXBwcm9mJywgJy0tdGV4dCcsIHBvcnQuX3BhdGhfdG9f
ZHJpdmVyKCksICcvdG1wL2NwdXByb2ZpbGUnXQorICAgICAgICBwcm9maWxlX3RleHQgPSBzZWxm
Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQocHByb2ZfYXJncykKKyAgICAgICAgcHJvZmlsZV9saW5l
cyA9IHByb2ZpbGVfdGV4dC5zcGxpdCgnXG4nKVs6MTAwXQorICAgICAgICBmaXJzdF9zYW1wbGVf
aW5kZXggPSAwCisgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUocHJvZmlsZV9s
aW5lcyk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlRvdGFsIik6CisgICAgICAg
ICAgICAgICAgZmlyc3Rfc2FtcGxlX2luZGV4ID0gaW5kZXggKyAxCisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgcHJpbnQgIlxuIi5qb2luKHByb2ZpbGVfbGluZXNbZmlyc3Rfc2FtcGxl
X2luZGV4OmZpcnN0X3NhbXBsZV9pbmRleCArIDEwXSkKKworCitjbGFzcyBJbnN0cnVtZW50cyhQ
cm9maWxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBy
ZXN1bHRzX2RpciwgaWRlbnRpZmVyPU5vbmUpOgorICAgICAgICBzdXBlcihJbnN0cnVtZW50cywg
c2VsZikuX19pbml0X18od29ya3NwYWNlLCBleGVjdXRpdmUsIHJlc3VsdHNfZGlyLCBpZGVudGlm
ZXIpCisgICAgICAgIHNlbGYuX291dHB1dF9wYXRoID0gc2VsZi5fd29ya3NwYWNlLmZpbmRfdW51
c2VkX2ZpbGVuYW1lKHNlbGYuX3Jlc3VsdHNfZGlyLCBzZWxmLl9pZGVudGlmZXIsICJ0cmFjZSIp
CisKKyAgICAjIEZJWE1FOiBXZSBtYXkgbmVlZCBhIHdheSB0byBmaW5kIHRoaXMgdHJhY2V0ZW1w
bGF0ZSBvbiB0aGUgZGlzaworICAgIF90aW1lX3Byb2ZpbGUgPSAiL0FwcGxpY2F0aW9ucy9YY29k
ZS5hcHAvQ29udGVudHMvQXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9SZXNv
dXJjZXMvdGVtcGxhdGVzL1RpbWUgUHJvZmlsZXIudHJhY2V0ZW1wbGF0ZSIKKworICAgIGRlZiBh
dHRhY2hfdG9fcGlkKHNlbGYsIHBpZCk6CisgICAgICAgIGNtZCA9IFsiaW5zdHJ1bWVudHMiLCAi
LXQiLCBzZWxmLl90aW1lX3Byb2ZpbGUsICItRCIsIHNlbGYuX291dHB1dF9wYXRoLCAiLXAiLCBw
aWRdCisgICAgICAgIGNtZCA9IG1hcCh1bmljb2RlLCBjbWQpCisgICAgICAgIHNlbGYuX2V4ZWN1
dGl2ZS5wb3BlbihjbWQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZv
cm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3Jt
YW5jZV90ZXN0cy9wZXJmdGVzdC5weQppbmRleCA5ZTJmODdkNDdlMjQ4NzAzNmM3OThjMzU5Zjdk
NTNjMmZjNDAyZDJmLi45YWFlZjAxYzVhZjcxZDA1MGEzMDdmMDA3NmI4ZTQxNzkzN2RkYzRhIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0
ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVy
ZnRlc3QucHkKQEAgLTE2NiwxMSArMTY2LDEyIEBAIGNsYXNzIFBlcmZUZXN0KG9iamVjdCk6CiAg
ICAgICAgICAgICBfbG9nLmVycm9yKCJUaGUgdGVzdCBkaWRuJ3QgcmVwb3J0IGFsbCBzdGF0aXN0
aWNzLiIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGZvciByZXN1bHRfbmFt
ZSBpbiBvcmRlcmVkX3Jlc3VsdHNfa2V5czoKLSAgICAgICAgICAgIGlmIHJlc3VsdF9uYW1lID09
IHRlc3RfbmFtZToKLSAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJlc3Vs
dF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSwgZGVzY3JpcHRpb25fc3RyaW5nKQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJlc3Vs
dF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSkKKyAgICAgICAgaWYgbm90IHNlbGYuX3BvcnQu
Z2V0X29wdGlvbigncHJvZmlsZScpOgorICAgICAgICAgICAgZm9yIHJlc3VsdF9uYW1lIGluIG9y
ZGVyZWRfcmVzdWx0c19rZXlzOgorICAgICAgICAgICAgICAgIGlmIHJlc3VsdF9uYW1lID09IHRl
c3RfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhyZXN1
bHRfbmFtZSwgcmVzdWx0c1tyZXN1bHRfbmFtZV0sIGRlc2NyaXB0aW9uX3N0cmluZykKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0
aWNzKHJlc3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdHMKIAogICAgIGRlZiBvdXRwdXRfc3RhdGlzdGljcyhzZWxmLCB0ZXN0X25hbWUsIHJlc3Vs
dHMsIGRlc2NyaXB0aW9uX3N0cmluZz1Ob25lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0ZXN0LnB5Cmlu
ZGV4IDI1OWZjNzg1NGNiZTg3ZTU4NzQ4MzMxZDczYTEzMDRmY2I3M2Q4YjYuLjllMjc1YjYzNTUy
Y2FjMzkxYTVmODdhMGFiNGU5YWQ3MmExMjYwMDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5w
eQpAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dF9j
YXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVzdCA9
IFBlcmZUZXN0KE5vbmUsICdzb21lLXRlc3QnLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0JykK
KyAgICAgICAgICAgIHRlc3QgPSBQZXJmVGVzdChNb2NrUG9ydCgpLCAnc29tZS10ZXN0JywgJy9w
YXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRl
c3QucGFyc2Vfb3V0cHV0KG91dHB1dCksCiAgICAgICAgICAgICAgICAgeydzb21lLXRlc3QnOiB7
J2F2Zyc6IDExMDAuMCwgJ21lZGlhbic6IDExMDEuMCwgJ21pbic6IDEwODAuMCwgJ21heCc6IDEx
MjAuMCwgJ3N0ZGV2JzogMTEuMCwgJ3VuaXQnOiAnbXMnLAogICAgICAgICAgICAgICAgICAgICAn
dmFsdWVzJzogW2kgZm9yIGkgaW4gcmFuZ2UoMSwgMjApXX19KQpAQCAtOTEsNyArOTEsNyBAQCBj
bGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG91dHB1dF9jYXB0dXJl
ID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0
KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0KE5vbmUsICdzb21l
LXRlc3QnLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0JykKKyAgICAgICAgICAgIHRlc3QgPSBQ
ZXJmVGVzdChNb2NrUG9ydCgpLCAnc29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVz
dCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QucGFyc2Vfb3V0cHV0KG91dHB1
dCksIE5vbmUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBhY3R1YWxfc3Rkb3V0LCBh
Y3R1YWxfc3RkZXJyLCBhY3R1YWxfbG9ncyA9IG91dHB1dF9jYXB0dXJlLnJlc3RvcmVfb3V0cHV0
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMv
cGVyZnRlc3RzcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90
ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKaW5kZXggNDJlMGQ5NmUxMWE2NTIwNWQxOGMwNjk4YzI4
Y2UwZjhjNjNjMWYyYy4uZWY0Y2EwODk0ODdiYTU4ZDJjNTU0ZDdjMzljNzU3ODgxZjZlMGY4MCAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdHNydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90
ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKQEAgLTM2LDYgKzM2LDcgQEAgaW1wb3J0IG9wdHBhcnNl
CiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgZmluZF9maWxlcwor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IK
IGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IFNDTURl
dGVjdG9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5uZXQuZmlsZV91cGxvYWRlciBpbXBvcnQgRmlsZVVwbG9hZGVyCkBAIC0xMTcs
NiArMTE4LDggQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICAg
ICAgaGVscD0iUnVuIHJlcGxheSB0ZXN0cy4iKSwKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCItLWZvcmNlIiwgZGVzdD0ic2tpcHBlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRl
ZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgaGVscD0iUnVuIGFsbCB0ZXN0cywgaW5jbHVk
aW5nIHRoZSBvbmVzIGluIHRoZSBTa2lwcGVkIGxpc3QuIiksCisgICAgICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbigiLS1wcm9maWxlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAg
ICAgICAgICBoZWxwPSJPdXRwdXQgcGVyLXRlc3QgcHJvZmlsZSBpbmZvcm1hdGlvbi4iKSwKICAg
ICAgICAgICAgIF0KICAgICAgICAgcmV0dXJuIG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25f
bGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBhcnNlX2FyZ3MoYXJncykKIApAQCAtMTY0LDcgKzE2
Nyw3IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgIHJl
dHVybiBzZWxmLkVYSVRfQ09ERV9CQURfUFJFUEFSQVRJT04KIAogICAgICAgICB1bmV4cGVjdGVk
ID0gc2VsZi5fcnVuX3Rlc3RzX3NldChzb3J0ZWQobGlzdCh0ZXN0cyksIGtleT1sYW1iZGEgdGVz
dDogdGVzdC50ZXN0X25hbWUoKSksIHNlbGYuX3BvcnQpCi0gICAgICAgIGlmIHNlbGYuX29wdGlv
bnMuZ2VuZXJhdGVfcmVzdWx0czoKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5nZW5lcmF0ZV9y
ZXN1bHRzIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5wcm9maWxlOgogICAgICAgICAgICAgZXhpdF9j
b2RlID0gc2VsZi5fZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cygpCiAgICAgICAgICAgICBpZiBl
eGl0X2NvZGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRfY29kZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176054</attachid>
            <date>2012-11-26 13:35:22 -0800</date>
            <delta_ts>2012-11-28 11:08:10 -0800</delta_ts>
            <desc>Ready for first review, likely needs more refinement</desc>
            <filename>bug-99517-20121126133301.patch</filename>
            <type>text/plain</type>
            <size>13482</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NzU0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzZjZjc4YjU3NTQ3ZmFhYjU1Y2RmMWFiMjYzYzkwN2Q0
MGI0OTgxYS4uYzQ1NDkyMTM2ODg4M2RlYTkxMzVhNGVjMDcwZGQ2YzU1OGJiYmFhMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDEyLTExLTI2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvcmtzIG9uIE1hYyBh
bmQgTGludXgKKyAgICAgICAgYW5kIG1ha2VzIGl0IHRyaXZpYWwgZm9yIGFueW9uZSB0byBwcm9m
aWxlIGEgUGVyZm9ybWFuY2VUZXN0LgorICAgICAgICBDdXJyZW50bHkgaXQncyBub3QgImhhcmQi
IHRvIHByb2ZpbGUgYSBQZXJmb3JtYW5jZVRlc3QKKyAgICAgICAgYnV0IGxvd2VyaW5nIHRoZSBi
YXJyaWVycyB0byBlbnRyeSBoZXJlIGFsbG93cyBhbGwgb2YgdXMgdG8gZm9jdXMKKyAgICAgICAg
bGVzcyBvbiB0aGUgdG9vbHMgYW5kIG1vcmUgb24gdGhlIGNvZGUuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9maWxlci5weTogQWRkZWQuCisgICAgICAgIChQcm9maWxl
cik6CisgICAgICAgIChQcm9maWxlci5fX2luaXRfXyk6CisgICAgICAgIChQcm9maWxlci5hZGp1
c3RlZF9lbnZpcm9ubWVudCk6CisgICAgICAgIChQcm9maWxlci5hdHRhY2hfdG9fcGlkKToKKyAg
ICAgICAgKFByb2ZpbGVyLmRpZF9zdG9wKToKKyAgICAgICAgKEdvb2dsZVBQcm9mKToKKyAgICAg
ICAgKEdvb2dsZVBQcm9mLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmFkanVzdGVk
X2Vudmlyb25tZW50KToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmRpZF9zdG9wKToKKyAgICAgICAg
KEluc3RydW1lbnRzKToKKyAgICAgICAgKEluc3RydW1lbnRzLl9faW5pdF9fKToKKyAgICAgICAg
KEluc3RydW1lbnRzLmF0dGFjaF90b19waWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuY3JlYXRlX3Byb2ZpbGVy
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5w
eToKKyAgICAgICAgKERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChEcml2ZXIuX3N0YXJ0KToK
KyAgICAgICAgKERyaXZlci5zdG9wKToKKyAgICAgICAgKERyaXZlci5jbWRfbGluZSk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weToKKyAg
ICAgICAgKFBlcmZUZXN0LnBhcnNlX291dHB1dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weToKKyAgICAgICAgKE1haW5U
ZXN0LnRlc3RfcGFyc2Vfb3V0cHV0KToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfcGFyc2Vfb3V0
cHV0X3dpdGhfZmFpbGluZ19saW5lKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZv
cm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5l
ci5fcGFyc2VfYXJncyk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIucnVuKToKKwogMjAxMi0x
MS0yNiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAg
ICAgICAgIFtFRkxdW1dLMl0gQWRkIHNldHRpbmcgdG8gZW5hYmxlIC8gZGlzYWJsZSBIVE1MNSBs
b2NhbCBzdG9yYWdlIGZ1bmN0aW9uYWxpdHkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3Byb2ZpbGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
cHJvZmlsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjkyNDJiMzY1ODkxNjY4NjhlMmVlMzkwYTdkMDYyN2Ux
YmQ1ZjljMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3Byb2ZpbGVyLnB5CkBAIC0wLDAgKzEsODYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2ds
ZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFByb2ZpbGVy
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBy
ZXN1bHRzX2RpciwgZXhlY3V0YWJsZV9wYXRoLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAgICBz
ZWxmLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2UKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhl
Y3V0aXZlCisgICAgICAgIHNlbGYuX2V4ZWN1dGFibGVfcGF0aCA9IGV4ZWN1dGFibGVfcGF0aAor
ICAgICAgICBzZWxmLl9yZXN1bHRzX2RpciA9IHJlc3VsdHNfZGlyCisgICAgICAgIHNlbGYuX2lk
ZW50aWZlciA9ICJ0ZXN0IgorCisgICAgZGVmIGFkanVzdGVkX2Vudmlyb25tZW50KHNlbGYsIGVu
dik6CisgICAgICAgIHJldHVybiBlbnYKKworICAgIGRlZiBhdHRhY2hfdG9fcGlkKHNlbGYsIHBp
ZCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBkaWRfc3RvcChzZWxmKToKKyAgICAgICAgcGFz
cworCisKK2NsYXNzIEdvb2dsZVBQcm9mKFByb2ZpbGVyKToKKyAgICBkZWYgX19pbml0X18oc2Vs
Ziwgd29ya3NwYWNlLCBleGVjdXRpdmUsIHJlc3VsdHNfZGlyLCBleGVjdXRhYmxlX3BhdGgsIGlk
ZW50aWZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoR29vZ2xlUFByb2YsIHNlbGYpLl9faW5pdF9f
KHdvcmtzcGFjZSwgZXhlY3V0aXZlLCByZXN1bHRzX2RpciwgZXhlY3V0YWJsZV9wYXRoLCBpZGVu
dGlmZXIpCisgICAgICAgIHNlbGYuX291dHB1dF9wYXRoID0gc2VsZi5fd29ya3NwYWNlLmZpbmRf
dW51c2VkX2ZpbGVuYW1lKHNlbGYuX3Jlc3VsdHNfZGlyLCBzZWxmLl9pZGVudGlmZXIsICJwcHJv
ZiIpCisKKyAgICBkZWYgYWRqdXN0ZWRfZW52aXJvbm1lbnQoc2VsZiwgZW52KToKKyAgICAgICAg
ZW52WydDUFVQUk9GSUxFJ10gPSBzZWxmLl9vdXRwdXRfcGF0aAorICAgICAgICByZXR1cm4gZW52
CisKKyAgICBkZWYgZGlkX3N0b3Aoc2VsZik6CisgICAgICAgIHBwcm9mX2FyZ3MgPSBbJy91c3Iv
YmluL3BlcmwnLCAnL3Vzci9iaW4vZ29vZ2xlLXBwcm9mJywgJy0tdGV4dCcsIHNlbGYuX2V4ZWN1
dGFibGVfcGF0aCwgc2VsZi5fb3V0cHV0X3BhdGhdCisgICAgICAgIHByaW50IHBwcm9mX2FyZ3MK
KyAgICAgICAgcHJvZmlsZV90ZXh0ID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHBwcm9m
X2FyZ3MpCisgICAgICAgIHByb2ZpbGVfbGluZXMgPSBwcm9maWxlX3RleHQuc3BsaXQoJ1xuJylb
OjEwMF0KKyAgICAgICAgZmlyc3Rfc2FtcGxlX2luZGV4ID0gMAorICAgICAgICBmb3IgaW5kZXgs
IGxpbmUgaW4gZW51bWVyYXRlKHByb2ZpbGVfbGluZXMpOgorICAgICAgICAgICAgaWYgbGluZS5z
dGFydHN3aXRoKCJUb3RhbCIpOgorICAgICAgICAgICAgICAgIGZpcnN0X3NhbXBsZV9pbmRleCA9
IGluZGV4ICsgMQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHByaW50ICJcbiIuam9p
bihwcm9maWxlX2xpbmVzW2ZpcnN0X3NhbXBsZV9pbmRleDpmaXJzdF9zYW1wbGVfaW5kZXggKyAx
MF0pCisKKworIyBGSVhNRTogaXByb2ZpbGUgaXMgYSBuZXdlciBjb21tYW5kbGluZSBpbnRlcmZh
Y2UgdG8gcmVwbGFjZSAvdXNyL2Jpbi9pbnN0cnVtZW50cy4KK2NsYXNzIEluc3RydW1lbnRzKFBy
b2ZpbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya3NwYWNlLCBleGVjdXRpdmUsIHJl
c3VsdHNfZGlyLCBleGVjdXRhYmxlX3BhdGgsIGlkZW50aWZlcj1Ob25lKToKKyAgICAgICAgc3Vw
ZXIoSW5zdHJ1bWVudHMsIHNlbGYpLl9faW5pdF9fKHdvcmtzcGFjZSwgZXhlY3V0aXZlLCByZXN1
bHRzX2RpciwgZXhlY3V0YWJsZV9wYXRoLCBpZGVudGlmZXIpCisgICAgICAgIHNlbGYuX291dHB1
dF9wYXRoID0gc2VsZi5fd29ya3NwYWNlLmZpbmRfdW51c2VkX2ZpbGVuYW1lKHNlbGYuX3Jlc3Vs
dHNfZGlyLCBzZWxmLl9pZGVudGlmZXIsICJ0cmFjZSIpCisKKyAgICAjIEZJWE1FOiBXZSBtYXkg
bmVlZCBhIHdheSB0byBmaW5kIHRoaXMgdHJhY2V0ZW1wbGF0ZSBvbiB0aGUgZGlzaworICAgIF90
aW1lX3Byb2ZpbGUgPSAiL0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMvQXBwbGljYXRp
b25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvdGVtcGxhdGVzL1RpbWUgUHJv
ZmlsZXIudHJhY2V0ZW1wbGF0ZSIKKworICAgIGRlZiBhdHRhY2hfdG9fcGlkKHNlbGYsIHBpZCk6
CisgICAgICAgIGNtZCA9IFsiaW5zdHJ1bWVudHMiLCAiLXQiLCBzZWxmLl90aW1lX3Byb2ZpbGUs
ICItRCIsIHNlbGYuX291dHB1dF9wYXRoLCAiLXAiLCBwaWRdCisgICAgICAgIGNtZCA9IG1hcCh1
bmljb2RlLCBjbWQpCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihjbWQpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggOGM0
NTc4ZGJmYTdjMzgzMmJmNWI3OTc4MDQwMTE0NTkyZGEyZGJhOS4uY2E5ZWFmNmJhYTY5MGRjNDVj
ZmJiYjdlZDE5MWJjOTg5NjEyOTRlNiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtNTEsNiArNTEsNyBAQCBleGNlcHQgSW1wb3J0
RXJyb3I6CiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgZmluZF9maWxlcwogZnJvbSB3ZWJr
aXRweS5jb21tb24gaW1wb3J0IHJlYWRfY2hlY2tzdW1fZnJvbV9wbmcKIGZyb20gd2Via2l0cHku
Y29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24ucHJv
ZmlsZXIgaW1wb3J0IEdvb2dsZVBQcm9mLCBJbnN0cnVtZW50cwogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtIGltcG9ydCBwYXRoCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3Rl
bWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKQEAgLTE3Nyw2ICsxNzgsMTIgQEAgY2xhc3MgUG9ydChv
YmplY3QpOgogICAgICAgICAgICAgc2VsZi5fcHJldHR5X3BhdGNoX2F2YWlsYWJsZSA9IHNlbGYu
Y2hlY2tfcHJldHR5X3BhdGNoKGxvZ2dpbmc9RmFsc2UpCiAgICAgICAgIHJldHVybiBzZWxmLl9w
cmV0dHlfcGF0Y2hfYXZhaWxhYmxlCiAKKyAgICBkZWYgY3JlYXRlX3Byb2ZpbGVyKHNlbGYsIGlk
ZW50aWZpZXI9Tm9uZSk6CisgICAgICAgICMgRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBjb2RlIGJl
bG9uZ3MgaGVyZSBvciBpbiBzb21lIHNvcnQgb2YgUHJvZmlsZXJGYWN0b3J5LgorICAgICAgICBp
ZiBzZWxmLmhvc3QucGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgICAgICByZXR1cm4gSW5zdHJ1
bWVudHMoc2VsZi5ob3N0LndvcmtzcGFjZSwgc2VsZi5ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5yZXN1
bHRzX2RpcmVjdG9yeSgpLCBzZWxmLl9wYXRoX3RvX2RyaXZlcigpLCBpZGVudGlmaWVyKQorICAg
ICAgICByZXR1cm4gR29vZ2xlUFByb2Yoc2VsZi5ob3N0LndvcmtzcGFjZSwgc2VsZi5ob3N0LmV4
ZWN1dGl2ZSwgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpLCBzZWxmLl9wYXRoX3RvX2RyaXZlcigp
LCBpZGVudGlmaWVyKQorCiAgICAgZGVmIHNob3VsZF9yZXRyeV9jcmFzaGVzKHNlbGYpOgogICAg
ICAgICByZXR1cm4gRmFsc2UKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2RyaXZlci5weQppbmRleCA3OTkzZDA1NzdhZjEzYzg4ZDZjNTAzODc3OWJi
YmE1ZjY2YzU2NTE3Li41ZjRjM2IwM2JkNjBjM2Q0NWM1MGI2ZmFkMDEwNTY2YmI0ZjUxZGViIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZl
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZl
ci5weQpAQCAtMTQwLDYgKzE0MCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBz
ZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IE5vbmUKIAogICAgICAgICBzZWxmLl9tZWFzdXJlbWVudHMg
PSB7fQorICAgICAgICBzZWxmLl9wcm9maWxlciA9IHNlbGYuX3BvcnQuY3JlYXRlX3Byb2ZpbGVy
KCkKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLnN0b3AoKQpAQCAtMjgy
LDE2ICsyODMsMjUgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVudmlyb25tZW50
WydMT0NBTF9SRVNPVVJDRV9ST09UJ10gPSBzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQog
ICAgICAgICBpZiAnV0VCS0lUT1VUUFVURElSJyBpbiBvcy5lbnZpcm9uOgogICAgICAgICAgICAg
ZW52aXJvbm1lbnRbJ1dFQktJVE9VVFBVVERJUiddID0gb3MuZW52aXJvblsnV0VCS0lUT1VUUFVU
RElSJ10KKyAgICAgICAgaWYgc2VsZi5fcHJvZmlsZXI6CisgICAgICAgICAgICBlbnZpcm9ubWVu
dCA9IHNlbGYuX3Byb2ZpbGVyLmFkanVzdGVkX2Vudmlyb25tZW50KGVudmlyb25tZW50KQogICAg
ICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jh
c2hlZF9waWQgPSBOb25lCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9y
dC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VydmVyX25hbWUsIHNl
bGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAg
ICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQorICAgICAgICBpZiBzZWxmLl9wcm9m
aWxlcjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyLmF0dGFjaF90b19waWQoc2VsZi5fc2Vy
dmVyX3Byb2Nlc3MucGlkKCkpCiAKICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgd2FzX3J1
bm5pbmcgPSBib29sKHNlbGYuX3NlcnZlcl9wcm9jZXNzKQorCiAgICAgICAgIGlmIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzOgogICAgICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RvcChzZWxm
Ll9wb3J0LmRyaXZlcl9zdG9wX3RpbWVvdXQoKSkKICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9w
cm9jZXNzID0gTm9uZQogCisgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyIGFuZCB3YXNfcnVubmlu
ZzoKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyLmRpZF9zdG9wKCkKKwogICAgICAgICBpZiBz
ZWxmLl9kcml2ZXJfdGVtcGRpcjoKICAgICAgICAgICAgIHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0u
cm10cmVlKHN0cihzZWxmLl9kcml2ZXJfdGVtcGRpcikpCiAgICAgICAgICAgICBzZWxmLl9kcml2
ZXJfdGVtcGRpciA9IE5vbmUKQEAgLTMxNSw2ICszMjUsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0
KToKICAgICAgICAgY21kLmV4dGVuZChwZXJfdGVzdF9hcmdzKQogCiAgICAgICAgIGNtZC5hcHBl
bmQoJy0nKQorCiAgICAgICAgIHJldHVybiBjbWQKIAogICAgIGRlZiBfY2hlY2tfZm9yX2RyaXZl
cl9jcmFzaChzZWxmLCBlcnJvcl9saW5lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5CmluZGV4IDllMmY4N2Q0N2UyNDg3MDM2
Yzc5OGMzNTlmN2Q1M2MyZmM0MDJkMmYuLjlhYWVmMDFjNWFmNzFkMDUwYTMwN2YwMDc2YjhlNDE3
OTM3ZGRjNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2Vf
dGVzdHMvcGVyZnRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5j
ZV90ZXN0cy9wZXJmdGVzdC5weQpAQCAtMTY2LDExICsxNjYsMTIgQEAgY2xhc3MgUGVyZlRlc3Qo
b2JqZWN0KToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIlRoZSB0ZXN0IGRpZG4ndCByZXBvcnQg
YWxsIHN0YXRpc3RpY3MuIikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgZm9y
IHJlc3VsdF9uYW1lIGluIG9yZGVyZWRfcmVzdWx0c19rZXlzOgotICAgICAgICAgICAgaWYgcmVz
dWx0X25hbWUgPT0gdGVzdF9uYW1lOgotICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0X3N0YXRp
c3RpY3MocmVzdWx0X25hbWUsIHJlc3VsdHNbcmVzdWx0X25hbWVdLCBkZXNjcmlwdGlvbl9zdHJp
bmcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0X3N0YXRp
c3RpY3MocmVzdWx0X25hbWUsIHJlc3VsdHNbcmVzdWx0X25hbWVdKQorICAgICAgICBpZiBub3Qg
c2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdwcm9maWxlJyk6CisgICAgICAgICAgICBmb3IgcmVzdWx0
X25hbWUgaW4gb3JkZXJlZF9yZXN1bHRzX2tleXM6CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0
X25hbWUgPT0gdGVzdF9uYW1lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0
aXN0aWNzKHJlc3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSwgZGVzY3JpcHRpb25fc3Ry
aW5nKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYub3V0
cHV0X3N0YXRpc3RpY3MocmVzdWx0X25hbWUsIHJlc3VsdHNbcmVzdWx0X25hbWVdKQogICAgICAg
ICByZXR1cm4gcmVzdWx0cwogCiAgICAgZGVmIG91dHB1dF9zdGF0aXN0aWNzKHNlbGYsIHRlc3Rf
bmFtZSwgcmVzdWx0cywgZGVzY3JpcHRpb25fc3RyaW5nPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5p
dHRlc3QucHkKaW5kZXggMjU5ZmM3ODU0Y2JlODdlNTg3NDgzMzFkNzNhMTMwNGZjYjczZDhiNi4u
OWUyNzViNjM1NTJjYWMzOTFhNWY4N2EwYWI0ZTlhZDcyYTEyNjAwMyAxMDA3NTUKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0
X3VuaXR0ZXN0LnB5CkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgb3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAg
ICAgb3V0cHV0X2NhcHR1cmUuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICB0ZXN0ID0gUGVyZlRlc3QoTm9uZSwgJ3NvbWUtdGVzdCcsICcvcGF0aC9zb21lLWRpci9z
b21lLXRlc3QnKQorICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0KE1vY2tQb3J0KCksICdzb21l
LXRlc3QnLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0JykKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwodGVzdC5wYXJzZV9vdXRwdXQob3V0cHV0KSwKICAgICAgICAgICAgICAgICB7J3Nv
bWUtdGVzdCc6IHsnYXZnJzogMTEwMC4wLCAnbWVkaWFuJzogMTEwMS4wLCAnbWluJzogMTA4MC4w
LCAnbWF4JzogMTEyMC4wLCAnc3RkZXYnOiAxMS4wLCAndW5pdCc6ICdtcycsCiAgICAgICAgICAg
ICAgICAgICAgICd2YWx1ZXMnOiBbaSBmb3IgaSBpbiByYW5nZSgxLCAyMCldfX0pCkBAIC05MSw3
ICs5MSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgb3V0
cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2Fw
dHVyZV9vdXRwdXQoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXN0ID0gUGVyZlRlc3Qo
Tm9uZSwgJ3NvbWUtdGVzdCcsICcvcGF0aC9zb21lLWRpci9zb21lLXRlc3QnKQorICAgICAgICAg
ICAgdGVzdCA9IFBlcmZUZXN0KE1vY2tQb3J0KCksICdzb21lLXRlc3QnLCAnL3BhdGgvc29tZS1k
aXIvc29tZS10ZXN0JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5wYXJzZV9v
dXRwdXQob3V0cHV0KSwgTm9uZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGFjdHVh
bF9zdGRvdXQsIGFjdHVhbF9zdGRlcnIsIGFjdHVhbF9sb2dzID0gb3V0cHV0X2NhcHR1cmUucmVz
dG9yZV9vdXRwdXQoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3Jt
YW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQppbmRleCA0MmUwZDk2ZTExYTY1MjA1
ZDE4YzA2OThjMjhjZTBmOGM2M2MxZjJjLi4wZTYwMjA0NzU3NDY4YTVlOWViNjQyYTc0ODY2YmM3
NDM4MWVhYjgyIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNl
X3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQpAQCAtMTE3LDYgKzExNyw4IEBAIGNs
YXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGhlbHA9IlJ1biBy
ZXBsYXkgdGVzdHMuIiksCiAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1mb3Jj
ZSIsIGRlc3Q9InNraXBwZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAog
ICAgICAgICAgICAgICAgIGhlbHA9IlJ1biBhbGwgdGVzdHMsIGluY2x1ZGluZyB0aGUgb25lcyBp
biB0aGUgU2tpcHBlZCBsaXN0LiIpLAorICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii0tcHJvZmlsZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgaGVscD0i
T3V0cHV0IHBlci10ZXN0IHByb2ZpbGUgaW5mb3JtYXRpb24uIiksCiAgICAgICAgICAgICBdCiAg
ICAgICAgIHJldHVybiBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9KHBlcmZfb3B0
aW9uX2xpc3QpKS5wYXJzZV9hcmdzKGFyZ3MpCiAKQEAgLTE2NCw3ICsxNjYsNyBAQCBjbGFzcyBQ
ZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5FWElU
X0NPREVfQkFEX1BSRVBBUkFUSU9OCiAKICAgICAgICAgdW5leHBlY3RlZCA9IHNlbGYuX3J1bl90
ZXN0c19zZXQoc29ydGVkKGxpc3QodGVzdHMpLCBrZXk9bGFtYmRhIHRlc3Q6IHRlc3QudGVzdF9u
YW1lKCkpLCBzZWxmLl9wb3J0KQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmdlbmVyYXRlX3Jl
c3VsdHM6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZ2VuZXJhdGVfcmVzdWx0cyBhbmQgbm90
IHNlbGYuX29wdGlvbnMucHJvZmlsZToKICAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuX2dl
bmVyYXRlX2FuZF9zaG93X3Jlc3VsdHMoKQogICAgICAgICAgICAgaWYgZXhpdF9jb2RlOgogICAg
ICAgICAgICAgICAgIHJldHVybiBleGl0X2NvZGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176525</attachid>
            <date>2012-11-28 11:08:14 -0800</date>
            <delta_ts>2012-11-28 12:31:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99517-20121128110548.patch</filename>
            <type>text/plain</type>
            <size>16205</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NzU0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzZjZjc4YjU3NTQ3ZmFhYjU1Y2RmMWFiMjYzYzkwN2Q0
MGI0OTgxYS4uZDMwNzM2YThiZDA2NDljOGRiYjViZjk2NTIxMDgxZjk3MGMzYTZmNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0
IEBACisyMDEyLTExLTI4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvcmtzIG9uIE1hYyBh
bmQgTGludXgKKyAgICAgICAgYW5kIG1ha2VzIGl0IHRyaXZpYWwgZm9yIGFueW9uZSB0byBwcm9m
aWxlIGEgUGVyZm9ybWFuY2VUZXN0LgorCisgICAgICAgIEN1cnJlbnRseSBpdCdzIG5vdCAiaGFy
ZCIgdG8gcHJvZmlsZSBhIFBlcmZvcm1hbmNlVGVzdAorICAgICAgICBidXQgbG93ZXJpbmcgdGhl
IGJhcnJpZXJzIHRvIGVudHJ5IGhlcmUgYWxsb3dzIGFsbCBvZiB1cyB0byBmb2N1cworICAgICAg
ICBsZXNzIG9uIHRoZSB0b29scyBhbmQgbW9yZSBvbiB0aGUgY29kZS4KKworICAgICAgICBUaGlz
IGFsc28gcGF2ZXMgdGhlIHdheSBmb3IgYWRkaW5nIGVhc3kgbW9iaWxlLXByb2ZpbGluZyAoZS5n
LiBjaHJvbWl1bS1hbmRyb2lkKQorICAgICAgICB3aGljaCBpcyBhY3R1YWxseSAiaGFyZCIsIGFu
ZCB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHk6IEFkZGVkLgorICAgICAgICAoUHJv
ZmlsZXJGYWN0b3J5KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIp
OgorICAgICAgICAoUHJvZmlsZXIpOgorICAgICAgICAoUHJvZmlsZXIuX19pbml0X18pOgorICAg
ICAgICAoUHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQpOgorICAgICAgICAoUHJvZmlsZXIu
YXR0YWNoX3RvX3BpZCk6CisgICAgICAgIChQcm9maWxlci5kaWRfc3RvcCk6CisgICAgICAgIChT
aW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgICAgICAoU2luZ2xlRmlsZU91dHB1dFByb2Zp
bGVyLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mKToKKyAgICAgICAgKEdvb2dsZVBQ
cm9mLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmFkanVzdGVkX2Vudmlyb25tZW50
KToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmRpZF9zdG9wKToKKyAgICAgICAgKEluc3RydW1lbnRz
KToKKyAgICAgICAgKEluc3RydW1lbnRzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3RydW1lbnRz
LmF0dGFjaF90b19waWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wcm9maWxlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChQcm9maWxlckZhY3RvcnlU
ZXN0KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeVRlc3QudGVzdF9iYXNpYyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHk6CisgICAgICAg
IChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChE
cml2ZXIuc3RvcCk6CisgICAgICAgIChEcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHk6CisgICAgICAgIChQZXJm
VGVzdC5wYXJzZV9vdXRwdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3Bh
cnNlX291dHB1dCk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3BhcnNlX291dHB1dF93aXRoX2Zh
aWxpbmdfbGluZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0
cy9wZXJmdGVzdHNydW5uZXIucHk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX3BhcnNlX2Fy
Z3MpOgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLnJ1bik6CisKIDIwMTItMTEtMjYgIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZM
XVtXSzJdIEFkZCBzZXR0aW5nIHRvIGVuYWJsZSAvIGRpc2FibGUgSFRNTDUgbG9jYWwgc3RvcmFn
ZSBmdW5jdGlvbmFsaXR5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcHJvZmlsZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcHJvZmlsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjc2NTcxZGIzZDVlMTZiOWFiNjI0NGNlM2JkN2Jl
ZTE5NzU4NGEwMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wcm9maWxlci5weQpAQCAtMCwwICsxLDEwMCBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgbG9nZ2luZworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xh
c3MgUHJvZmlsZXJGYWN0b3J5KG9iamVjdCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNy
ZWF0ZV9wcm9maWxlcihjbHMsIGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRl
bnRpZmllcj1Ob25lKToKKyAgICAgICAgaWYgaG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAg
ICAgICAgIHJldHVybiBJbnN0cnVtZW50cyhob3N0LndvcmtzcGFjZSwgaG9zdC5leGVjdXRpdmUs
IGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJu
IEdvb2dsZVBQcm9mKGhvc3Qud29ya3NwYWNlLCBob3N0LmV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9w
YXRoLCBvdXRwdXRfZGlyLCBpZGVudGlmaWVyKQorCisKK2NsYXNzIFByb2ZpbGVyKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRhYmxl
X3BhdGgsIG91dHB1dF9kaXIsIGlkZW50aWZpZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dvcmtz
cGFjZSA9IHdvcmtzcGFjZQorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBleGVjdXRpdmUKKyAg
ICAgICAgc2VsZi5fZXhlY3V0YWJsZV9wYXRoID0gZXhlY3V0YWJsZV9wYXRoCisgICAgICAgIHNl
bGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX2lkZW50aWZpZXIgPSAi
dGVzdCIKKworICAgIGRlZiBhZGp1c3RlZF9lbnZpcm9ubWVudChzZWxmLCBlbnYpOgorICAgICAg
ICByZXR1cm4gZW52CisKKyAgICBkZWYgYXR0YWNoX3RvX3BpZChzZWxmLCBwaWQpOgorICAgICAg
ICBwYXNzCisKKyAgICBkZWYgZGlkX3N0b3Aoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFz
cyBTaW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIoUHJvZmlsZXIpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBv
dXRwdXRfc3VmZml4LCBpZGVudGlmaWVyPU5vbmUsICk6CisgICAgICAgIHN1cGVyKFNpbmdsZUZp
bGVPdXRwdXRQcm9maWxlciwgc2VsZikuX19pbml0X18od29ya3NwYWNlLCBleGVjdXRpdmUsIGV4
ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcikKKyAgICAgICAgc2VsZi5fb3V0
cHV0X3BhdGggPSBzZWxmLl93b3Jrc3BhY2UuZmluZF91bnVzZWRfZmlsZW5hbWUoc2VsZi5fb3V0
cHV0X2Rpciwgc2VsZi5faWRlbnRpZmllciwgb3V0cHV0X3N1ZmZpeCkKKworCitjbGFzcyBHb29n
bGVQUHJvZihTaW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBpZGVu
dGlmaWVyPU5vbmUpOgorICAgICAgICBzdXBlcihHb29nbGVQUHJvZiwgc2VsZikuX19pbml0X18o
d29ya3NwYWNlLCBleGVjdXRpdmUsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgInBwcm9m
IiwgaWRlbnRpZmllcikKKworICAgIGRlZiBhZGp1c3RlZF9lbnZpcm9ubWVudChzZWxmLCBlbnYp
OgorICAgICAgICBlbnZbJ0NQVVBST0ZJTEUnXSA9IHNlbGYuX291dHB1dF9wYXRoCisgICAgICAg
IHJldHVybiBlbnYKKworICAgIGRlZiBkaWRfc3RvcChzZWxmKToKKyAgICAgICAgIyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgY29kZSB0byBmaW5kIHRoZSByaWdodCBnb29nbGUtcHByb2YgZXhlY3V0
YWJsZSwgc29tZSBHb29nbGVycyBoYXZlCisgICAgICAgICMgZ29vZ2xlLXBwcm9mIGluc3RhbGxl
ZCBhcyAicHByb2YiIG9uIHRoZWlyIG1hY2hpbmVzIGZvciB0aGVtLgorICAgICAgICAjIEZJWE1F
OiBTaW1pbGFybHkgd2Ugc2hvdWxkIGZpbmQgdGhlIHJpZ2h0IHBlcmwhCisgICAgICAgIHBwcm9m
X2FyZ3MgPSBbJy91c3IvYmluL3BlcmwnLCAnL3Vzci9iaW4vZ29vZ2xlLXBwcm9mJywgJy0tdGV4
dCcsIHNlbGYuX2V4ZWN1dGFibGVfcGF0aCwgc2VsZi5fb3V0cHV0X3BhdGhdCisgICAgICAgIHBy
b2ZpbGVfdGV4dCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChwcHJvZl9hcmdzKQorICAg
ICAgICBwcm9maWxlX2xpbmVzID0gcHJvZmlsZV90ZXh0LnNwbGl0KCdcbicpWzoxMDBdCisgICAg
ICAgIGZpcnN0X3NhbXBsZV9pbmRleCA9IDAKKyAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVu
dW1lcmF0ZShwcm9maWxlX2xpbmVzKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgi
VG90YWwiKToKKyAgICAgICAgICAgICAgICBmaXJzdF9zYW1wbGVfaW5kZXggPSBpbmRleCArIDEK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBwcmludCAiXG4iLmpvaW4ocHJvZmlsZV9s
aW5lc1tmaXJzdF9zYW1wbGVfaW5kZXg6Zmlyc3Rfc2FtcGxlX2luZGV4ICsgMTBdKQorCisKKyMg
RklYTUU6IGlwcm9maWxlIGlzIGEgbmV3ZXIgY29tbWFuZGxpbmUgaW50ZXJmYWNlIHRvIHJlcGxh
Y2UgL3Vzci9iaW4vaW5zdHJ1bWVudHMuCitjbGFzcyBJbnN0cnVtZW50cyhTaW5nbGVGaWxlT3V0
cHV0UHJvZmlsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3Jrc3BhY2UsIGV4ZWN1dGl2
ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAg
ICBzdXBlcihJbnN0cnVtZW50cywgc2VsZikuX19pbml0X18od29ya3NwYWNlLCBleGVjdXRpdmUs
IGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgInRyYWNlIiwgaWRlbnRpZmllcikKKworICAg
ICMgRklYTUU6IFdlIG1heSBuZWVkIGEgd2F5IHRvIGZpbmQgdGhpcyB0cmFjZXRlbXBsYXRlIG9u
IHRoZSBkaXNrCisgICAgX3RpbWVfcHJvZmlsZSA9ICIvQXBwbGljYXRpb25zL1hjb2RlLmFwcC9D
b250ZW50cy9BcHBsaWNhdGlvbnMvSW5zdHJ1bWVudHMuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy90
ZW1wbGF0ZXMvVGltZSBQcm9maWxlci50cmFjZXRlbXBsYXRlIgorCisgICAgZGVmIGF0dGFjaF90
b19waWQoc2VsZiwgcGlkKToKKyAgICAgICAgY21kID0gWyJpbnN0cnVtZW50cyIsICItdCIsIHNl
bGYuX3RpbWVfcHJvZmlsZSwgIi1EIiwgc2VsZi5fb3V0cHV0X3BhdGgsICItcCIsIHBpZF0KKyAg
ICAgICAgY21kID0gbWFwKHVuaWNvZGUsIGNtZCkKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnBv
cGVuKGNtZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wcm9maWxlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9wcm9maWxlcl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTZlNmMzOWJiNGU0NTgwYmQw
YmI0ZGU3YTkwYmYyYzFlYmJmYTRmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNDQg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKKworZnJv
bSAucHJvZmlsZXIgaW1wb3J0IFByb2ZpbGVyRmFjdG9yeSwgSW5zdHJ1bWVudHMsIEdvb2dsZVBQ
cm9mCisKKworY2xhc3MgUHJvZmlsZXJGYWN0b3J5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgp
CisgICAgICAgIHByb2ZpbGVyID0gUHJvZmlsZXJGYWN0b3J5LmNyZWF0ZV9wcm9maWxlcihob3N0
LCAnL2Jpbi9leGVjdXRhYmxlJywgJy90bXAvb3V0cHV0JykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMocHJvZmlsZXIuX291dHB1dF9wYXRoLCAiL3RtcC9vdXRwdXQvdGVzdC50cmFjZSIpCisK
KyAgICAgICAgaG9zdC5wbGF0Zm9ybS5vc19uYW1lID0gJ2xpbnV4JworICAgICAgICBwcm9maWxl
ciA9IFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIoaG9zdCwgJy9iaW4vZXhlY3V0YWJs
ZScsICcvdG1wL291dHB1dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHByb2ZpbGVyLl9v
dXRwdXRfcGF0aCwgIi90bXAvb3V0cHV0L3Rlc3QucHByb2YiKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQppbmRleCA3OTkzZDA1Nzdh
ZjEzYzg4ZDZjNTAzODc3OWJiYmE1ZjY2YzU2NTE3Li5lNDBhYzNmZmVlOWQzYTc1M2JmYmQ3Y2E1
MjAxMmJiNDM5OTUyYzQxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2RyaXZlci5weQpAQCAtMzYsNiArMzYsNyBAQCBpbXBvcnQgdGltZQogaW1w
b3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLnByb2ZpbGVyIGltcG9ydCBQcm9maWxlckZhY3RvcnkKIAog
CiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xNDAsNiArMTQxLDEwIEBA
IGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IE5v
bmUKIAogICAgICAgICBzZWxmLl9tZWFzdXJlbWVudHMgPSB7fQorICAgICAgICBpZiBzZWxmLl9w
b3J0LmdldF9vcHRpb24oInByb2ZpbGUiKToKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0g
UHJvZmlsZXJGYWN0b3J5LmNyZWF0ZV9wcm9maWxlcihzZWxmLl9wb3J0Lmhvc3QsIHNlbGYuX3Bv
cnQuX3BhdGhfdG9fZHJpdmVyKCksIHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gTm9uZQogCiAgICAgZGVm
IF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuc3RvcCgpCkBAIC0yODIsMTYgKzI4NywyNSBA
QCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgZW52aXJvbm1lbnRbJ0xPQ0FMX1JFU09V
UkNFX1JPT1QnXSA9IHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCiAgICAgICAgIGlmICdX
RUJLSVRPVVRQVVRESVInIGluIG9zLmVudmlyb246CiAgICAgICAgICAgICBlbnZpcm9ubWVudFsn
V0VCS0lUT1VUUFVURElSJ10gPSBvcy5lbnZpcm9uWydXRUJLSVRPVVRQVVRESVInXQorICAgICAg
ICBpZiBzZWxmLl9wcm9maWxlcjoKKyAgICAgICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fcHJv
ZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQoZW52aXJvbm1lbnQpCiAgICAgICAgIHNlbGYuX2Ny
YXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5v
bmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQogICAgICAgICBzZWxmLl9z
ZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCisgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgorICAgICAg
ICAgICAgc2VsZi5fcHJvZmlsZXIuYXR0YWNoX3RvX3BpZChzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5w
aWQoKSkKIAogICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICB3YXNfcnVubmluZyA9IGJvb2wo
c2VsZi5fc2VydmVyX3Byb2Nlc3MpCisKICAgICAgICAgaWYgc2VsZi5fc2VydmVyX3Byb2Nlc3M6
CiAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdG9wKHNlbGYuX3BvcnQuZHJpdmVy
X3N0b3BfdGltZW91dCgpKQogICAgICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBOb25l
CiAKKyAgICAgICAgaWYgc2VsZi5fcHJvZmlsZXIgYW5kIHdhc19ydW5uaW5nOgorICAgICAgICAg
ICAgc2VsZi5fcHJvZmlsZXIuZGlkX3N0b3AoKQorCiAgICAgICAgIGlmIHNlbGYuX2RyaXZlcl90
ZW1wZGlyOgogICAgICAgICAgICAgc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5ybXRyZWUoc3RyKHNl
bGYuX2RyaXZlcl90ZW1wZGlyKSkKICAgICAgICAgICAgIHNlbGYuX2RyaXZlcl90ZW1wZGlyID0g
Tm9uZQpAQCAtMzE1LDYgKzMyOSw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBj
bWQuZXh0ZW5kKHBlcl90ZXN0X2FyZ3MpCiAKICAgICAgICAgY21kLmFwcGVuZCgnLScpCisKICAg
ICAgICAgcmV0dXJuIGNtZAogCiAgICAgZGVmIF9jaGVja19mb3JfZHJpdmVyX2NyYXNoKHNlbGYs
IGVycm9yX2xpbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3Jt
YW5jZV90ZXN0cy9wZXJmdGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3QucHkKaW5kZXggOWUyZjg3ZDQ3ZTI0ODcwMzZjNzk4YzM1OWY3ZDUz
YzJmYzQwMmQyZi4uOWFhZWYwMWM1YWY3MWQwNTBhMzA3ZjAwNzZiOGU0MTc5MzdkZGM0YSAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0
ZXN0LnB5CkBAIC0xNjYsMTEgKzE2NiwxMiBAQCBjbGFzcyBQZXJmVGVzdChvYmplY3QpOgogICAg
ICAgICAgICAgX2xvZy5lcnJvcigiVGhlIHRlc3QgZGlkbid0IHJlcG9ydCBhbGwgc3RhdGlzdGlj
cy4iKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgICAgICBmb3IgcmVzdWx0X25hbWUg
aW4gb3JkZXJlZF9yZXN1bHRzX2tleXM6Ci0gICAgICAgICAgICBpZiByZXN1bHRfbmFtZSA9PSB0
ZXN0X25hbWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhyZXN1bHRf
bmFtZSwgcmVzdWx0c1tyZXN1bHRfbmFtZV0sIGRlc2NyaXB0aW9uX3N0cmluZykKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhyZXN1bHRf
bmFtZSwgcmVzdWx0c1tyZXN1bHRfbmFtZV0pCisgICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0Lmdl
dF9vcHRpb24oJ3Byb2ZpbGUnKToKKyAgICAgICAgICAgIGZvciByZXN1bHRfbmFtZSBpbiBvcmRl
cmVkX3Jlc3VsdHNfa2V5czoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRfbmFtZSA9PSB0ZXN0
X25hbWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0X3N0YXRpc3RpY3MocmVzdWx0
X25hbWUsIHJlc3VsdHNbcmVzdWx0X25hbWVdLCBkZXNjcmlwdGlvbl9zdHJpbmcpCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGlj
cyhyZXN1bHRfbmFtZSwgcmVzdWx0c1tyZXN1bHRfbmFtZV0pCiAgICAgICAgIHJldHVybiByZXN1
bHRzCiAKICAgICBkZWYgb3V0cHV0X3N0YXRpc3RpY3Moc2VsZiwgdGVzdF9uYW1lLCByZXN1bHRz
LCBkZXNjcmlwdGlvbl9zdHJpbmc9Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weQppbmRl
eCAyNTlmYzc4NTRjYmU4N2U1ODc0ODMzMWQ3M2ExMzA0ZmNiNzNkOGI2Li45ZTI3NWI2MzU1MmNh
YzM5MWE1Zjg3YTBhYjRlOWFkNzJhMTI2MDAzIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkK
QEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBvdXRwdXRfY2FwdHVyZSA9IE91dHB1dENhcHR1cmUoKQogICAgICAgICBvdXRwdXRfY2Fw
dHVyZS5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3QgPSBQ
ZXJmVGVzdChOb25lLCAnc29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCisg
ICAgICAgICAgICB0ZXN0ID0gUGVyZlRlc3QoTW9ja1BvcnQoKSwgJ3NvbWUtdGVzdCcsICcvcGF0
aC9zb21lLWRpci9zb21lLXRlc3QnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0
LnBhcnNlX291dHB1dChvdXRwdXQpLAogICAgICAgICAgICAgICAgIHsnc29tZS10ZXN0Jzogeydh
dmcnOiAxMTAwLjAsICdtZWRpYW4nOiAxMTAxLjAsICdtaW4nOiAxMDgwLjAsICdtYXgnOiAxMTIw
LjAsICdzdGRldic6IDExLjAsICd1bml0JzogJ21zJywKICAgICAgICAgICAgICAgICAgICAgJ3Zh
bHVlcyc6IFtpIGZvciBpIGluIHJhbmdlKDEsIDIwKV19fSkKQEAgLTkxLDcgKzkxLDcgQEAgY2xh
c3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvdXRwdXRfY2FwdHVyZSA9
IE91dHB1dENhcHR1cmUoKQogICAgICAgICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291dHB1dCgp
CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3QgPSBQZXJmVGVzdChOb25lLCAnc29tZS10
ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCisgICAgICAgICAgICB0ZXN0ID0gUGVy
ZlRlc3QoTW9ja1BvcnQoKSwgJ3NvbWUtdGVzdCcsICcvcGF0aC9zb21lLWRpci9zb21lLXRlc3Qn
KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnBhcnNlX291dHB1dChvdXRwdXQp
LCBOb25lKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgYWN0dWFsX3N0ZG91dCwgYWN0
dWFsX3N0ZGVyciwgYWN0dWFsX2xvZ3MgPSBvdXRwdXRfY2FwdHVyZS5yZXN0b3JlX291dHB1dCgp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0c3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3RzcnVubmVyLnB5CmluZGV4IDQyZTBkOTZlMTFhNjUyMDVkMThjMDY5OGMyOGNl
MGY4YzYzYzFmMmMuLjBlNjAyMDQ3NTc0NjhhNWU5ZWI2NDJhNzQ4NjZiYzc0MzgxZWFiODIgMTAw
NzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRl
c3RzcnVubmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3RzcnVubmVyLnB5CkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgUGVyZlRlc3Rz
UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaGVscD0iUnVuIHJlcGxheSB0ZXN0cy4i
KSwKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWZvcmNlIiwgZGVzdD0ic2tp
cHBlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAg
ICAgaGVscD0iUnVuIGFsbCB0ZXN0cywgaW5jbHVkaW5nIHRoZSBvbmVzIGluIHRoZSBTa2lwcGVk
IGxpc3QuIiksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcm9maWxlIiwg
YWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICBoZWxwPSJPdXRwdXQgcGVyLXRl
c3QgcHJvZmlsZSBpbmZvcm1hdGlvbi4iKSwKICAgICAgICAgICAgIF0KICAgICAgICAgcmV0dXJu
IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBh
cnNlX2FyZ3MoYXJncykKIApAQCAtMTY0LDcgKzE2Niw3IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5l
cihvYmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRfQ09ERV9CQURfUFJF
UEFSQVRJT04KIAogICAgICAgICB1bmV4cGVjdGVkID0gc2VsZi5fcnVuX3Rlc3RzX3NldChzb3J0
ZWQobGlzdCh0ZXN0cyksIGtleT1sYW1iZGEgdGVzdDogdGVzdC50ZXN0X25hbWUoKSksIHNlbGYu
X3BvcnQpCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZ2VuZXJhdGVfcmVzdWx0czoKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5nZW5lcmF0ZV9yZXN1bHRzIGFuZCBub3Qgc2VsZi5fb3B0aW9u
cy5wcm9maWxlOgogICAgICAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5fZ2VuZXJhdGVfYW5kX3No
b3dfcmVzdWx0cygpCiAgICAgICAgICAgICBpZiBleGl0X2NvZGU6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGV4aXRfY29kZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176536</attachid>
            <date>2012-11-28 12:06:16 -0800</date>
            <delta_ts>2012-11-28 12:36:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99517-20121128120349.patch</filename>
            <type>text/plain</type>
            <size>18014</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NzU0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzZjZjc4YjU3NTQ3ZmFhYjU1Y2RmMWFiMjYzYzkwN2Q0
MGI0OTgxYS4uZDMwNzM2YThiZDA2NDljOGRiYjViZjk2NTIxMDgxZjk3MGMzYTZmNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0
IEBACisyMDEyLTExLTI4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvcmtzIG9uIE1hYyBh
bmQgTGludXgKKyAgICAgICAgYW5kIG1ha2VzIGl0IHRyaXZpYWwgZm9yIGFueW9uZSB0byBwcm9m
aWxlIGEgUGVyZm9ybWFuY2VUZXN0LgorCisgICAgICAgIEN1cnJlbnRseSBpdCdzIG5vdCAiaGFy
ZCIgdG8gcHJvZmlsZSBhIFBlcmZvcm1hbmNlVGVzdAorICAgICAgICBidXQgbG93ZXJpbmcgdGhl
IGJhcnJpZXJzIHRvIGVudHJ5IGhlcmUgYWxsb3dzIGFsbCBvZiB1cyB0byBmb2N1cworICAgICAg
ICBsZXNzIG9uIHRoZSB0b29scyBhbmQgbW9yZSBvbiB0aGUgY29kZS4KKworICAgICAgICBUaGlz
IGFsc28gcGF2ZXMgdGhlIHdheSBmb3IgYWRkaW5nIGVhc3kgbW9iaWxlLXByb2ZpbGluZyAoZS5n
LiBjaHJvbWl1bS1hbmRyb2lkKQorICAgICAgICB3aGljaCBpcyBhY3R1YWxseSAiaGFyZCIsIGFu
ZCB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHk6IEFkZGVkLgorICAgICAgICAoUHJv
ZmlsZXJGYWN0b3J5KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIp
OgorICAgICAgICAoUHJvZmlsZXIpOgorICAgICAgICAoUHJvZmlsZXIuX19pbml0X18pOgorICAg
ICAgICAoUHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQpOgorICAgICAgICAoUHJvZmlsZXIu
YXR0YWNoX3RvX3BpZCk6CisgICAgICAgIChQcm9maWxlci5kaWRfc3RvcCk6CisgICAgICAgIChT
aW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgICAgICAoU2luZ2xlRmlsZU91dHB1dFByb2Zp
bGVyLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mKToKKyAgICAgICAgKEdvb2dsZVBQ
cm9mLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmFkanVzdGVkX2Vudmlyb25tZW50
KToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmRpZF9zdG9wKToKKyAgICAgICAgKEluc3RydW1lbnRz
KToKKyAgICAgICAgKEluc3RydW1lbnRzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3RydW1lbnRz
LmF0dGFjaF90b19waWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wcm9maWxlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChQcm9maWxlckZhY3RvcnlU
ZXN0KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeVRlc3QudGVzdF9iYXNpYyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHk6CisgICAgICAg
IChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChE
cml2ZXIuc3RvcCk6CisgICAgICAgIChEcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHk6CisgICAgICAgIChQZXJm
VGVzdC5wYXJzZV9vdXRwdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3Bh
cnNlX291dHB1dCk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3BhcnNlX291dHB1dF93aXRoX2Zh
aWxpbmdfbGluZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0
cy9wZXJmdGVzdHNydW5uZXIucHk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX3BhcnNlX2Fy
Z3MpOgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLnJ1bik6CisKIDIwMTItMTEtMjYgIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZM
XVtXSzJdIEFkZCBzZXR0aW5nIHRvIGVuYWJsZSAvIGRpc2FibGUgSFRNTDUgbG9jYWwgc3RvcmFn
ZSBmdW5jdGlvbmFsaXR5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcHJvZmlsZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcHJvZmlsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzc5NTVmOWRjNmZhOGQxZWViM2VmNzE5MWY4ODJj
ZTczMzYwMTFmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wcm9maWxlci5weQpAQCAtMCwwICsxLDk5IEBACisjIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgcmUKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9f
KQorCisKK2NsYXNzIFByb2ZpbGVyRmFjdG9yeShvYmplY3QpOgorICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBjcmVhdGVfcHJvZmlsZXIoY2xzLCBob3N0LCBleGVjdXRhYmxlX3BhdGgsIG91dHB1
dF9kaXIsIGlkZW50aWZpZXI9Tm9uZSk6CisgICAgICAgIGlmIGhvc3QucGxhdGZvcm0uaXNfbWFj
KCk6CisgICAgICAgICAgICByZXR1cm4gSW5zdHJ1bWVudHMoaG9zdC53b3Jrc3BhY2UsIGhvc3Qu
ZXhlY3V0aXZlLCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsIGlkZW50aWZpZXIpCisgICAg
ICAgIHJldHVybiBHb29nbGVQUHJvZihob3N0LndvcmtzcGFjZSwgaG9zdC5leGVjdXRpdmUsIGV4
ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcikKKworCitjbGFzcyBQcm9maWxl
cihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwg
ZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAgICBz
ZWxmLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2UKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhl
Y3V0aXZlCisgICAgICAgIHNlbGYuX2V4ZWN1dGFibGVfcGF0aCA9IGV4ZWN1dGFibGVfcGF0aAor
ICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgorICAgICAgICBzZWxmLl9pZGVu
dGlmaWVyID0gInRlc3QiCisKKyAgICBkZWYgYWRqdXN0ZWRfZW52aXJvbm1lbnQoc2VsZiwgZW52
KToKKyAgICAgICAgcmV0dXJuIGVudgorCisgICAgZGVmIGF0dGFjaF90b19waWQoc2VsZiwgcGlk
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRpZF9zdG9wKHNlbGYpOgorICAgICAgICBwYXNz
CisKKworY2xhc3MgU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKFByb2ZpbGVyKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgd29ya3NwYWNlLCBleGVjdXRpdmUsIGV4ZWN1dGFibGVfcGF0aCwgb3V0
cHV0X2Rpciwgb3V0cHV0X3N1ZmZpeCwgaWRlbnRpZmllcj1Ob25lKToKKyAgICAgICAgc3VwZXIo
U2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyLCBzZWxmKS5fX2luaXRfXyh3b3Jrc3BhY2UsIGV4ZWN1
dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBpZGVudGlmaWVyKQorICAgICAgICBz
ZWxmLl9vdXRwdXRfcGF0aCA9IHNlbGYuX3dvcmtzcGFjZS5maW5kX3VudXNlZF9maWxlbmFtZShz
ZWxmLl9vdXRwdXRfZGlyLCBzZWxmLl9pZGVudGlmaWVyLCBvdXRwdXRfc3VmZml4KQorCisKK2Ns
YXNzIEdvb2dsZVBQcm9mKFNpbmdsZUZpbGVPdXRwdXRQcm9maWxlcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9k
aXIsIGlkZW50aWZpZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKEdvb2dsZVBQcm9mLCBzZWxmKS5f
X2luaXRfXyh3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGly
LCAicHByb2YiLCBpZGVudGlmaWVyKQorCisgICAgZGVmIGFkanVzdGVkX2Vudmlyb25tZW50KHNl
bGYsIGVudik6CisgICAgICAgIGVudlsnQ1BVUFJPRklMRSddID0gc2VsZi5fb3V0cHV0X3BhdGgK
KyAgICAgICAgcmV0dXJuIGVudgorCisgICAgZGVmIF9maXJzdF90ZW5fbGluZXNfb2ZfcHJvZmls
ZShzZWxmLCBwcHJvZl9vdXRwdXQpOgorICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgiXlRvdGFs
OlteXG5dKlxuKCg/OlteXG5dKlxuKXswLDEwfSkiLCBwcHJvZl9vdXRwdXQsIHJlLk1VTFRJTElO
RSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorCisg
ICAgZGVmIGRpZF9zdG9wKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBj
b2RlIHRvIGZpbmQgdGhlIHJpZ2h0IGdvb2dsZS1wcHJvZiBleGVjdXRhYmxlLCBzb21lIEdvb2ds
ZXJzIGhhdmUKKyAgICAgICAgIyBnb29nbGUtcHByb2YgaW5zdGFsbGVkIGFzICJwcHJvZiIgb24g
dGhlaXIgbWFjaGluZXMgZm9yIHRoZW0uCisgICAgICAgICMgRklYTUU6IFNpbWlsYXJseSB3ZSBz
aG91bGQgZmluZCB0aGUgcmlnaHQgcGVybCEKKyAgICAgICAgcHByb2ZfYXJncyA9IFsnL3Vzci9i
aW4vcGVybCcsICcvdXNyL2Jpbi9nb29nbGUtcHByb2YnLCAnLS10ZXh0Jywgc2VsZi5fZXhlY3V0
YWJsZV9wYXRoLCBzZWxmLl9vdXRwdXRfcGF0aF0KKyAgICAgICAgcHJvZmlsZV90ZXh0ID0gc2Vs
Zi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHBwcm9mX2FyZ3MpCisgICAgICAgIHByaW50IHNlbGYu
X2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHByb2ZpbGVfdGV4dCkKKworCisjIEZJWE1FOiBp
cHJvZmlsZSBpcyBhIG5ld2VyIGNvbW1hbmRsaW5lIGludGVyZmFjZSB0byByZXBsYWNlIC91c3Iv
YmluL2luc3RydW1lbnRzLgorY2xhc3MgSW5zdHJ1bWVudHMoU2luZ2xlRmlsZU91dHB1dFByb2Zp
bGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya3NwYWNlLCBleGVjdXRpdmUsIGV4ZWN1
dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcj1Ob25lKToKKyAgICAgICAgc3VwZXIo
SW5zdHJ1bWVudHMsIHNlbGYpLl9faW5pdF9fKHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRh
YmxlX3BhdGgsIG91dHB1dF9kaXIsICJ0cmFjZSIsIGlkZW50aWZpZXIpCisKKyAgICAjIEZJWE1F
OiBXZSBtYXkgbmVlZCBhIHdheSB0byBmaW5kIHRoaXMgdHJhY2V0ZW1wbGF0ZSBvbiB0aGUgZGlz
aworICAgIF90aW1lX3Byb2ZpbGUgPSAiL0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMv
QXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvdGVtcGxhdGVz
L1RpbWUgUHJvZmlsZXIudHJhY2V0ZW1wbGF0ZSIKKworICAgIGRlZiBhdHRhY2hfdG9fcGlkKHNl
bGYsIHBpZCk6CisgICAgICAgIGNtZCA9IFsiaW5zdHJ1bWVudHMiLCAiLXQiLCBzZWxmLl90aW1l
X3Byb2ZpbGUsICItRCIsIHNlbGYuX291dHB1dF9wYXRoLCAiLXAiLCBwaWRdCisgICAgICAgIGNt
ZCA9IG1hcCh1bmljb2RlLCBjbWQpCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihjbWQp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmls
ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJv
ZmlsZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdhZWZjNzVjMTM1ZmNkOTEzMjA5NTY5NTg0
ZDM5OTU2ZDVlYThiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDg1IEBACisjIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CisKK2Zyb20gLnByb2Zp
bGVyIGltcG9ydCBQcm9maWxlckZhY3RvcnksIEluc3RydW1lbnRzLCBHb29nbGVQUHJvZgorCisK
K2NsYXNzIFByb2ZpbGVyRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0
ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQorICAgICAg
ICBwcm9maWxlciA9IFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIoaG9zdCwgJy9iaW4v
ZXhlY3V0YWJsZScsICcvdG1wL291dHB1dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBy
b2ZpbGVyLl9vdXRwdXRfcGF0aCwgIi90bXAvb3V0cHV0L3Rlc3QudHJhY2UiKQorCisgICAgICAg
IGhvc3QucGxhdGZvcm0ub3NfbmFtZSA9ICdsaW51eCcKKyAgICAgICAgcHJvZmlsZXIgPSBQcm9m
aWxlckZhY3RvcnkuY3JlYXRlX3Byb2ZpbGVyKGhvc3QsICcvYmluL2V4ZWN1dGFibGUnLCAnL3Rt
cC9vdXRwdXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwcm9maWxlci5fb3V0cHV0X3Bh
dGgsICIvdG1wL291dHB1dC90ZXN0LnBwcm9mIikKKworICAgIGRlZiB0ZXN0X3Bwcm9mX291dHB1
dF9yZWdleHAoc2VsZik6CisgICAgICAgIHBwcm9mX291dHB1dCA9ICIiIgorc29tZXRpbWVzCit0
aGVyZQoraXMKK2p1bmsgYmVmb3JlIHRoZSB0b3RhbCBsaW5lCisKKworVG90YWw6IDM3NzAgc2Ft
cGxlcworICAgICAgNzYgICAyLjAlICAgMi4wJSAgICAgIDEwNCAgIDIuOCUgbG9va3VwIChpbmxp
bmUpCisgICAgICA2MCAgIDEuNiUgICAzLjYlICAgICAgIDYwICAgMS42JSBGTF9TZXRQcmV2aW91
cyAoaW5saW5lKQorICAgICAgNTYgICAxLjUlICAgNS4xJSAgICAgICA1NiAgIDEuNSUgTWFza1B0
ciAoaW5saW5lKQorICAgICAgNTEgICAxLjQlICAgNi40JSAgICAgIDIyMiAgIDUuOSUgV2ViQ29y
ZTo6SFRNTFRva2VuaXplcjo6bmV4dFRva2VuCisgICAgICA0MiAgIDEuMSUgICA3LjYlICAgICAg
IDQ3ICAgMS4yJSBXVEY6OlZlY3Rvcjo6c2hyaW5rQ2FwYWNpdHkKKyAgICAgIDM1ICAgMC45JSAg
IDguNSUgICAgICAgMzUgICAwLjklIFdURjo6UmVmUHRyOjpnZXQgKGlubGluZSkKKyAgICAgIDMz
ICAgMC45JSAgIDkuNCUgICAgICAgNDMgICAxLjElIGFwcGVuZCAoaW5saW5lKQorICAgICAgMjkg
ICAwLjglICAxMC4xJSAgICAgICA2NyAgIDEuOCUgV1RGOjpTdHJpbmdJbXBsOjpkZXJlZiAoaW5s
aW5lKQorICAgICAgMjkgICAwLjglICAxMC45JSAgICAgIDEwMCAgIDIuNyUgYWRkIChpbmxpbmUp
CisgICAgICAyOCAgIDAuNyUgIDExLjYlICAgICAgIDI4ICAgMC43JSBXZWJDb3JlOjpRdWFsaWZp
ZWROYW1lOjpsb2NhbE5hbWUgKGlubGluZSkKKyAgICAgIDI1ICAgMC43JSAgMTIuMyUgICAgICAg
MjcgICAwLjclIFdlYkNvcmU6OlByaXZhdGU6OmFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVldWUK
KyAgICAgIDI0ICAgMC42JSAgMTIuOSUgICAgICAgMjQgICAwLjYlIF9fbWVtY3B5X3Nzc2UzX2Jh
Y2sKKyAgICAgIDIzICAgMC42JSAgMTMuNiUgICAgICAgMjMgICAwLjYlIGludEhhc2ggKGlubGlu
ZSkKKyAgICAgIDIzICAgMC42JSAgMTQuMiUgICAgICAgNzYgICAyLjAlIHRjbWFsbG9jOjpGTF9O
ZXh0CisgICAgICAyMyAgIDAuNiUgIDE0LjglICAgICAgIDk1ICAgMi41JSB0Y21hbGxvYzo6Rkxf
UHVzaAorICAgICAgMjIgICAwLjYlICAxNS40JSAgICAgICAyMiAgIDAuNiUgV2ViQ29yZTo6TWFy
a3VwVG9rZW5pemVyQmFzZTo6SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OnBlZWsgKGlubGluZSkK
KyIiIgorICAgICAgICBleHBlY3RlZF9maXJzdF90ZW5fbGluZXMgPSAiIiIgICAgICA3NiAgIDIu
MCUgICAyLjAlICAgICAgMTA0ICAgMi44JSBsb29rdXAgKGlubGluZSkKKyAgICAgIDYwICAgMS42
JSAgIDMuNiUgICAgICAgNjAgICAxLjYlIEZMX1NldFByZXZpb3VzIChpbmxpbmUpCisgICAgICA1
NiAgIDEuNSUgICA1LjElICAgICAgIDU2ICAgMS41JSBNYXNrUHRyIChpbmxpbmUpCisgICAgICA1
MSAgIDEuNCUgICA2LjQlICAgICAgMjIyICAgNS45JSBXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpu
ZXh0VG9rZW4KKyAgICAgIDQyICAgMS4xJSAgIDcuNiUgICAgICAgNDcgICAxLjIlIFdURjo6VmVj
dG9yOjpzaHJpbmtDYXBhY2l0eQorICAgICAgMzUgICAwLjklICAgOC41JSAgICAgICAzNSAgIDAu
OSUgV1RGOjpSZWZQdHI6OmdldCAoaW5saW5lKQorICAgICAgMzMgICAwLjklICAgOS40JSAgICAg
ICA0MyAgIDEuMSUgYXBwZW5kIChpbmxpbmUpCisgICAgICAyOSAgIDAuOCUgIDEwLjElICAgICAg
IDY3ICAgMS44JSBXVEY6OlN0cmluZ0ltcGw6OmRlcmVmIChpbmxpbmUpCisgICAgICAyOSAgIDAu
OCUgIDEwLjklICAgICAgMTAwICAgMi43JSBhZGQgKGlubGluZSkKKyAgICAgIDI4ICAgMC43JSAg
MTEuNiUgICAgICAgMjggICAwLjclIFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6OmxvY2FsTmFtZSAo
aW5saW5lKQorIiIiCisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgpCisgICAgICAgIHBy
b2ZpbGVyID0gR29vZ2xlUFByb2YoaG9zdC53b3Jrc3BhY2UsIGhvc3QuZXhlY3V0aXZlLCAnL2Jp
bi9leGVjdXRhYmxlJywgJy90bXAvb3V0cHV0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
cHJvZmlsZXIuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHBwcm9mX291dHB1dCksIGV4cGVj
dGVkX2ZpcnN0X3Rlbl9saW5lcykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKaW5kZXggNzk5M2QwNTc3YWYxM2M4OGQ2YzUwMzg3Nzli
YmJhNWY2NmM1NjUxNy4uM2ZiOTk3NzRiYjY1OWEzMzE3NzZhYjYyNGNmMGYxMjdjODc4ZWZmYSAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2
ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2
ZXIucHkKQEAgLTM2LDYgKzM2LDcgQEAgaW1wb3J0IHRpbWUKIGltcG9ydCBvcwogCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5wcm9maWxlciBpbXBvcnQgUHJvZmlsZXJGYWN0b3J5CiAKIAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMTQwLDYgKzE0MSwxMCBAQCBjbGFzcyBEcml2ZXIob2Jq
ZWN0KToKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBOb25lCiAKICAgICAgICAgc2Vs
Zi5fbWVhc3VyZW1lbnRzID0ge30KKyAgICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJw
cm9maWxlIik6CisgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9IFByb2ZpbGVyRmFjdG9yeS5j
cmVhdGVfcHJvZmlsZXIoc2VsZi5fcG9ydC5ob3N0LCBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZl
cigpLCBzZWxmLl9wb3J0LnJlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9wcm9maWxlciA9IE5vbmUKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgog
ICAgICAgICBzZWxmLnN0b3AoKQpAQCAtMjgyLDE1ICsyODcsMjEgQEAgY2xhc3MgRHJpdmVyKG9i
amVjdCk6CiAgICAgICAgIGVudmlyb25tZW50WydMT0NBTF9SRVNPVVJDRV9ST09UJ10gPSBzZWxm
Ll9wb3J0LmxheW91dF90ZXN0c19kaXIoKQogICAgICAgICBpZiAnV0VCS0lUT1VUUFVURElSJyBp
biBvcy5lbnZpcm9uOgogICAgICAgICAgICAgZW52aXJvbm1lbnRbJ1dFQktJVE9VVFBVVERJUidd
ID0gb3MuZW52aXJvblsnV0VCS0lUT1VUUFVURElSJ10KKyAgICAgICAgaWYgc2VsZi5fcHJvZmls
ZXI6CisgICAgICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3Byb2ZpbGVyLmFkanVzdGVkX2Vu
dmlyb25tZW50KGVudmlyb25tZW50KQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFt
ZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCiAgICAgICAgIHNlbGYu
X3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Io
c2VsZi5fcG9ydCwgc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90
ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3Rh
cnQoKQorICAgICAgICBpZiBzZWxmLl9wcm9maWxlcjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Zp
bGVyLmF0dGFjaF90b19waWQoc2VsZi5fc2VydmVyX3Byb2Nlc3MucGlkKCkpCiAKICAgICBkZWYg
c3RvcChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fc2VydmVyX3Byb2Nlc3M6CiAgICAgICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdG9wKHNlbGYuX3BvcnQuZHJpdmVyX3N0b3BfdGltZW91
dCgpKQogICAgICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBOb25lCisgICAgICAgICAg
ICBpZiBzZWxmLl9wcm9maWxlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9maWxlci5kaWRf
c3RvcCgpCiAKICAgICAgICAgaWYgc2VsZi5fZHJpdmVyX3RlbXBkaXI6CiAgICAgICAgICAgICBz
ZWxmLl9wb3J0Ll9maWxlc3lzdGVtLnJtdHJlZShzdHIoc2VsZi5fZHJpdmVyX3RlbXBkaXIpKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRl
c3QucHkKaW5kZXggOWUyZjg3ZDQ3ZTI0ODcwMzZjNzk4YzM1OWY3ZDUzYzJmYzQwMmQyZi4uOWFh
ZWYwMWM1YWY3MWQwNTBhMzA3ZjAwNzZiOGU0MTc5MzdkZGM0YSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5CkBAIC0xNjYs
MTEgKzE2NiwxMiBAQCBjbGFzcyBQZXJmVGVzdChvYmplY3QpOgogICAgICAgICAgICAgX2xvZy5l
cnJvcigiVGhlIHRlc3QgZGlkbid0IHJlcG9ydCBhbGwgc3RhdGlzdGljcy4iKQogICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKIAotICAgICAgICBmb3IgcmVzdWx0X25hbWUgaW4gb3JkZXJlZF9yZXN1
bHRzX2tleXM6Ci0gICAgICAgICAgICBpZiByZXN1bHRfbmFtZSA9PSB0ZXN0X25hbWU6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhyZXN1bHRfbmFtZSwgcmVzdWx0c1ty
ZXN1bHRfbmFtZV0sIGRlc2NyaXB0aW9uX3N0cmluZykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhyZXN1bHRfbmFtZSwgcmVzdWx0c1ty
ZXN1bHRfbmFtZV0pCisgICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3Byb2Zp
bGUnKToKKyAgICAgICAgICAgIGZvciByZXN1bHRfbmFtZSBpbiBvcmRlcmVkX3Jlc3VsdHNfa2V5
czoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRfbmFtZSA9PSB0ZXN0X25hbWU6CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYub3V0cHV0X3N0YXRpc3RpY3MocmVzdWx0X25hbWUsIHJlc3VsdHNb
cmVzdWx0X25hbWVdLCBkZXNjcmlwdGlvbl9zdHJpbmcpCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhyZXN1bHRfbmFtZSwg
cmVzdWx0c1tyZXN1bHRfbmFtZV0pCiAgICAgICAgIHJldHVybiByZXN1bHRzCiAKICAgICBkZWYg
b3V0cHV0X3N0YXRpc3RpY3Moc2VsZiwgdGVzdF9uYW1lLCByZXN1bHRzLCBkZXNjcmlwdGlvbl9z
dHJpbmc9Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1h
bmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
ZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weQppbmRleCAyNTlmYzc4NTRjYmU4
N2U1ODc0ODMzMWQ3M2ExMzA0ZmNiNzNkOGI2Li45ZTI3NWI2MzU1MmNhYzM5MWE1Zjg3YTBhYjRl
OWFkNzJhMTI2MDAzIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1h
bmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkKQEAgLTYzLDcgKzYzLDcg
QEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvdXRwdXRfY2Fw
dHVyZSA9IE91dHB1dENhcHR1cmUoKQogICAgICAgICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291
dHB1dCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3QgPSBQZXJmVGVzdChOb25lLCAn
c29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCisgICAgICAgICAgICB0ZXN0
ID0gUGVyZlRlc3QoTW9ja1BvcnQoKSwgJ3NvbWUtdGVzdCcsICcvcGF0aC9zb21lLWRpci9zb21l
LXRlc3QnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnBhcnNlX291dHB1dChv
dXRwdXQpLAogICAgICAgICAgICAgICAgIHsnc29tZS10ZXN0JzogeydhdmcnOiAxMTAwLjAsICdt
ZWRpYW4nOiAxMTAxLjAsICdtaW4nOiAxMDgwLjAsICdtYXgnOiAxMTIwLjAsICdzdGRldic6IDEx
LjAsICd1bml0JzogJ21zJywKICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlcyc6IFtpIGZvciBp
IGluIHJhbmdlKDEsIDIwKV19fSkKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgTWFpblRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvdXRwdXRfY2FwdHVyZSA9IE91dHB1dENhcHR1cmUo
KQogICAgICAgICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHRyeToK
LSAgICAgICAgICAgIHRlc3QgPSBQZXJmVGVzdChOb25lLCAnc29tZS10ZXN0JywgJy9wYXRoL3Nv
bWUtZGlyL3NvbWUtdGVzdCcpCisgICAgICAgICAgICB0ZXN0ID0gUGVyZlRlc3QoTW9ja1BvcnQo
KSwgJ3NvbWUtdGVzdCcsICcvcGF0aC9zb21lLWRpci9zb21lLXRlc3QnKQogICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnBhcnNlX291dHB1dChvdXRwdXQpLCBOb25lKQogICAgICAg
ICBmaW5hbGx5OgogICAgICAgICAgICAgYWN0dWFsX3N0ZG91dCwgYWN0dWFsX3N0ZGVyciwgYWN0
dWFsX2xvZ3MgPSBvdXRwdXRfY2FwdHVyZS5yZXN0b3JlX291dHB1dCgpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVu
bmVyLnB5CmluZGV4IDQyZTBkOTZlMTFhNjUyMDVkMThjMDY5OGMyOGNlMGY4YzYzYzFmMmMuLjBl
NjAyMDQ3NTc0NjhhNWU5ZWI2NDJhNzQ4NjZiYzc0MzgxZWFiODIgMTAwNzU1Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVu
bmVyLnB5CkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6
CiAgICAgICAgICAgICAgICAgaGVscD0iUnVuIHJlcGxheSB0ZXN0cy4iKSwKICAgICAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWZvcmNlIiwgZGVzdD0ic2tpcHBlZCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgaGVscD0iUnVuIGFs
bCB0ZXN0cywgaW5jbHVkaW5nIHRoZSBvbmVzIGluIHRoZSBTa2lwcGVkIGxpc3QuIiksCisgICAg
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcm9maWxlIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwKKyAgICAgICAgICAgICAgICBoZWxwPSJPdXRwdXQgcGVyLXRlc3QgcHJvZmlsZSBpbmZv
cm1hdGlvbi4iKSwKICAgICAgICAgICAgIF0KICAgICAgICAgcmV0dXJuIG9wdHBhcnNlLk9wdGlv
blBhcnNlcihvcHRpb25fbGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBhcnNlX2FyZ3MoYXJncykK
IApAQCAtMTY0LDcgKzE2Niw3IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAg
ICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRfQ09ERV9CQURfUFJFUEFSQVRJT04KIAogICAg
ICAgICB1bmV4cGVjdGVkID0gc2VsZi5fcnVuX3Rlc3RzX3NldChzb3J0ZWQobGlzdCh0ZXN0cyks
IGtleT1sYW1iZGEgdGVzdDogdGVzdC50ZXN0X25hbWUoKSksIHNlbGYuX3BvcnQpCi0gICAgICAg
IGlmIHNlbGYuX29wdGlvbnMuZ2VuZXJhdGVfcmVzdWx0czoKKyAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5nZW5lcmF0ZV9yZXN1bHRzIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5wcm9maWxlOgogICAg
ICAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5fZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cygpCiAg
ICAgICAgICAgICBpZiBleGl0X2NvZGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRfY29k
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176546</attachid>
            <date>2012-11-28 12:36:16 -0800</date>
            <delta_ts>2012-11-28 12:53:35 -0800</delta_ts>
            <desc>This patch should actually apply</desc>
            <filename>bug-99517-20121128123351.patch</filename>
            <type>text/plain</type>
            <size>17864</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MDQyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjI4MDMyM2I1MTYwYmMyZmU2MmU1ZmU2N2RjYTczOGVi
MzZmODQ1OS4uOGE0ZWFiOTA3OTgwZmI3MjhiZTQzNTJlZWRiMGU4YjUxZDlkZmY1MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0
IEBACisyMDEyLTExLTI4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvcmtzIG9uIE1hYyBh
bmQgTGludXgKKyAgICAgICAgYW5kIG1ha2VzIGl0IHRyaXZpYWwgZm9yIGFueW9uZSB0byBwcm9m
aWxlIGEgUGVyZm9ybWFuY2VUZXN0LgorCisgICAgICAgIEN1cnJlbnRseSBpdCdzIG5vdCAiaGFy
ZCIgdG8gcHJvZmlsZSBhIFBlcmZvcm1hbmNlVGVzdAorICAgICAgICBidXQgbG93ZXJpbmcgdGhl
IGJhcnJpZXJzIHRvIGVudHJ5IGhlcmUgYWxsb3dzIGFsbCBvZiB1cyB0byBmb2N1cworICAgICAg
ICBsZXNzIG9uIHRoZSB0b29scyBhbmQgbW9yZSBvbiB0aGUgY29kZS4KKworICAgICAgICBUaGlz
IGFsc28gcGF2ZXMgdGhlIHdheSBmb3IgYWRkaW5nIGVhc3kgbW9iaWxlLXByb2ZpbGluZyAoZS5n
LiBjaHJvbWl1bS1hbmRyb2lkKQorICAgICAgICB3aGljaCBpcyBhY3R1YWxseSAiaGFyZCIsIGFu
ZCB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHk6IEFkZGVkLgorICAgICAgICAoUHJv
ZmlsZXJGYWN0b3J5KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIp
OgorICAgICAgICAoUHJvZmlsZXIpOgorICAgICAgICAoUHJvZmlsZXIuX19pbml0X18pOgorICAg
ICAgICAoUHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQpOgorICAgICAgICAoUHJvZmlsZXIu
YXR0YWNoX3RvX3BpZCk6CisgICAgICAgIChQcm9maWxlci5kaWRfc3RvcCk6CisgICAgICAgIChT
aW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgICAgICAoU2luZ2xlRmlsZU91dHB1dFByb2Zp
bGVyLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mKToKKyAgICAgICAgKEdvb2dsZVBQ
cm9mLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmFkanVzdGVkX2Vudmlyb25tZW50
KToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmRpZF9zdG9wKToKKyAgICAgICAgKEluc3RydW1lbnRz
KToKKyAgICAgICAgKEluc3RydW1lbnRzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3RydW1lbnRz
LmF0dGFjaF90b19waWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wcm9maWxlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChQcm9maWxlckZhY3RvcnlU
ZXN0KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeVRlc3QudGVzdF9iYXNpYyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHk6CisgICAgICAg
IChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChE
cml2ZXIuc3RvcCk6CisgICAgICAgIChEcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHk6CisgICAgICAgIChQZXJm
VGVzdC5wYXJzZV9vdXRwdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3Bh
cnNlX291dHB1dCk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3BhcnNlX291dHB1dF93aXRoX2Zh
aWxpbmdfbGluZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0
cy9wZXJmdGVzdHNydW5uZXIucHk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX3BhcnNlX2Fy
Z3MpOgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLnJ1bik6CisKIDIwMTItMTEtMjggIFphbiBE
b2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBSZW1vdmUgZGVwcmVj
YXRlZCBsb2dnaW5nIHVzYWdlIGZyb20gUXVldWVFbmdpbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Nzk1NWY5ZGM2
ZmE4ZDFlZWIzZWY3MTkxZjg4MmNlNzMzNjAxMWYwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyLnB5CkBAIC0wLDAgKzEsOTkg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQorCitfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgUHJvZmlsZXJGYWN0b3J5KG9iamVjdCk6
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9wcm9maWxlcihjbHMsIGhvc3QsIGV4
ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcj1Ob25lKToKKyAgICAgICAgaWYg
aG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAgICAgICAgIHJldHVybiBJbnN0cnVtZW50cyho
b3N0LndvcmtzcGFjZSwgaG9zdC5leGVjdXRpdmUsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2Rp
ciwgaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIEdvb2dsZVBQcm9mKGhvc3Qud29ya3NwYWNl
LCBob3N0LmV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBpZGVudGlmaWVy
KQorCisKK2NsYXNzIFByb2ZpbGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdv
cmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsIGlkZW50aWZp
ZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dvcmtzcGFjZSA9IHdvcmtzcGFjZQorICAgICAgICBz
ZWxmLl9leGVjdXRpdmUgPSBleGVjdXRpdmUKKyAgICAgICAgc2VsZi5fZXhlY3V0YWJsZV9wYXRo
ID0gZXhlY3V0YWJsZV9wYXRoCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGly
CisgICAgICAgIHNlbGYuX2lkZW50aWZpZXIgPSAidGVzdCIKKworICAgIGRlZiBhZGp1c3RlZF9l
bnZpcm9ubWVudChzZWxmLCBlbnYpOgorICAgICAgICByZXR1cm4gZW52CisKKyAgICBkZWYgYXR0
YWNoX3RvX3BpZChzZWxmLCBwaWQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZGlkX3N0b3Ao
c2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBTaW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIo
UHJvZmlsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwg
ZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBvdXRwdXRfc3VmZml4LCBpZGVudGlmaWVyPU5v
bmUpOgorICAgICAgICBzdXBlcihTaW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIsIHNlbGYpLl9faW5p
dF9fKHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsIGlk
ZW50aWZpZXIpCisgICAgICAgIHNlbGYuX291dHB1dF9wYXRoID0gc2VsZi5fd29ya3NwYWNlLmZp
bmRfdW51c2VkX2ZpbGVuYW1lKHNlbGYuX291dHB1dF9kaXIsIHNlbGYuX2lkZW50aWZpZXIsIG91
dHB1dF9zdWZmaXgpCisKKworY2xhc3MgR29vZ2xlUFByb2YoU2luZ2xlRmlsZU91dHB1dFByb2Zp
bGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya3NwYWNlLCBleGVjdXRpdmUsIGV4ZWN1
dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcj1Ob25lKToKKyAgICAgICAgc3VwZXIo
R29vZ2xlUFByb2YsIHNlbGYpLl9faW5pdF9fKHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRh
YmxlX3BhdGgsIG91dHB1dF9kaXIsICJwcHJvZiIsIGlkZW50aWZpZXIpCisKKyAgICBkZWYgYWRq
dXN0ZWRfZW52aXJvbm1lbnQoc2VsZiwgZW52KToKKyAgICAgICAgZW52WydDUFVQUk9GSUxFJ10g
PSBzZWxmLl9vdXRwdXRfcGF0aAorICAgICAgICByZXR1cm4gZW52CisKKyAgICBkZWYgX2ZpcnN0
X3Rlbl9saW5lc19vZl9wcm9maWxlKHNlbGYsIHBwcm9mX291dHB1dCk6CisgICAgICAgIG1hdGNo
ID0gcmUuc2VhcmNoKCJeVG90YWw6W15cbl0qXG4oKD86W15cbl0qXG4pezAsMTB9KSIsIHBwcm9m
X291dHB1dCwgcmUuTVVMVElMSU5FKQorICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMSkgaWYg
bWF0Y2ggZWxzZSBOb25lCisKKyAgICBkZWYgZGlkX3N0b3Aoc2VsZik6CisgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBoYXZlIGNvZGUgdG8gZmluZCB0aGUgcmlnaHQgZ29vZ2xlLXBwcm9mIGV4
ZWN1dGFibGUsIHNvbWUgR29vZ2xlcnMgaGF2ZQorICAgICAgICAjIGdvb2dsZS1wcHJvZiBpbnN0
YWxsZWQgYXMgInBwcm9mIiBvbiB0aGVpciBtYWNoaW5lcyBmb3IgdGhlbS4KKyAgICAgICAgIyBG
SVhNRTogU2ltaWxhcmx5IHdlIHNob3VsZCBmaW5kIHRoZSByaWdodCBwZXJsIQorICAgICAgICBw
cHJvZl9hcmdzID0gWycvdXNyL2Jpbi9wZXJsJywgJy91c3IvYmluL2dvb2dsZS1wcHJvZicsICct
LXRleHQnLCBzZWxmLl9leGVjdXRhYmxlX3BhdGgsIHNlbGYuX291dHB1dF9wYXRoXQorICAgICAg
ICBwcm9maWxlX3RleHQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQocHByb2ZfYXJncykK
KyAgICAgICAgcHJpbnQgc2VsZi5fZmlyc3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUocHJvZmlsZV90
ZXh0KQorCisKKyMgRklYTUU6IGlwcm9maWxlIGlzIGEgbmV3ZXIgY29tbWFuZGxpbmUgaW50ZXJm
YWNlIHRvIHJlcGxhY2UgL3Vzci9iaW4vaW5zdHJ1bWVudHMuCitjbGFzcyBJbnN0cnVtZW50cyhT
aW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3Jrc3Bh
Y2UsIGV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBpZGVudGlmaWVyPU5v
bmUpOgorICAgICAgICBzdXBlcihJbnN0cnVtZW50cywgc2VsZikuX19pbml0X18od29ya3NwYWNl
LCBleGVjdXRpdmUsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgInRyYWNlIiwgaWRlbnRp
ZmllcikKKworICAgICMgRklYTUU6IFdlIG1heSBuZWVkIGEgd2F5IHRvIGZpbmQgdGhpcyB0cmFj
ZXRlbXBsYXRlIG9uIHRoZSBkaXNrCisgICAgX3RpbWVfcHJvZmlsZSA9ICIvQXBwbGljYXRpb25z
L1hjb2RlLmFwcC9Db250ZW50cy9BcHBsaWNhdGlvbnMvSW5zdHJ1bWVudHMuYXBwL0NvbnRlbnRz
L1Jlc291cmNlcy90ZW1wbGF0ZXMvVGltZSBQcm9maWxlci50cmFjZXRlbXBsYXRlIgorCisgICAg
ZGVmIGF0dGFjaF90b19waWQoc2VsZiwgcGlkKToKKyAgICAgICAgY21kID0gWyJpbnN0cnVtZW50
cyIsICItdCIsIHNlbGYuX3RpbWVfcHJvZmlsZSwgIi1EIiwgc2VsZi5fb3V0cHV0X3BhdGgsICIt
cCIsIHBpZF0KKyAgICAgICAgY21kID0gbWFwKHVuaWNvZGUsIGNtZCkKKyAgICAgICAgc2VsZi5f
ZXhlY3V0aXZlLnBvcGVuKGNtZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2FlZmM3
NWMxMzVmY2Q5MTMyMDk1Njk1ODRkMzk5NTZkNWVhOGJiCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5CkBA
IC0wLDAgKzEsODUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3Rl
bUhvc3QKKworZnJvbSAucHJvZmlsZXIgaW1wb3J0IFByb2ZpbGVyRmFjdG9yeSwgSW5zdHJ1bWVu
dHMsIEdvb2dsZVBQcm9mCisKKworY2xhc3MgUHJvZmlsZXJGYWN0b3J5VGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGhvc3QgPSBNb2Nr
U3lzdGVtSG9zdCgpCisgICAgICAgIHByb2ZpbGVyID0gUHJvZmlsZXJGYWN0b3J5LmNyZWF0ZV9w
cm9maWxlcihob3N0LCAnL2Jpbi9leGVjdXRhYmxlJywgJy90bXAvb3V0cHV0JykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocHJvZmlsZXIuX291dHB1dF9wYXRoLCAiL3RtcC9vdXRwdXQvdGVz
dC50cmFjZSIpCisKKyAgICAgICAgaG9zdC5wbGF0Zm9ybS5vc19uYW1lID0gJ2xpbnV4JworICAg
ICAgICBwcm9maWxlciA9IFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIoaG9zdCwgJy9i
aW4vZXhlY3V0YWJsZScsICcvdG1wL291dHB1dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHByb2ZpbGVyLl9vdXRwdXRfcGF0aCwgIi90bXAvb3V0cHV0L3Rlc3QucHByb2YiKQorCisgICAg
ZGVmIHRlc3RfcHByb2Zfb3V0cHV0X3JlZ2V4cChzZWxmKToKKyAgICAgICAgcHByb2Zfb3V0cHV0
ID0gIiIiCitzb21ldGltZXMKK3RoZXJlCitpcworanVuayBiZWZvcmUgdGhlIHRvdGFsIGxpbmUK
KworCitUb3RhbDogMzc3MCBzYW1wbGVzCisgICAgICA3NiAgIDIuMCUgICAyLjAlICAgICAgMTA0
ICAgMi44JSBsb29rdXAgKGlubGluZSkKKyAgICAgIDYwICAgMS42JSAgIDMuNiUgICAgICAgNjAg
ICAxLjYlIEZMX1NldFByZXZpb3VzIChpbmxpbmUpCisgICAgICA1NiAgIDEuNSUgICA1LjElICAg
ICAgIDU2ICAgMS41JSBNYXNrUHRyIChpbmxpbmUpCisgICAgICA1MSAgIDEuNCUgICA2LjQlICAg
ICAgMjIyICAgNS45JSBXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4KKyAgICAgIDQy
ICAgMS4xJSAgIDcuNiUgICAgICAgNDcgICAxLjIlIFdURjo6VmVjdG9yOjpzaHJpbmtDYXBhY2l0
eQorICAgICAgMzUgICAwLjklICAgOC41JSAgICAgICAzNSAgIDAuOSUgV1RGOjpSZWZQdHI6Omdl
dCAoaW5saW5lKQorICAgICAgMzMgICAwLjklICAgOS40JSAgICAgICA0MyAgIDEuMSUgYXBwZW5k
IChpbmxpbmUpCisgICAgICAyOSAgIDAuOCUgIDEwLjElICAgICAgIDY3ICAgMS44JSBXVEY6OlN0
cmluZ0ltcGw6OmRlcmVmIChpbmxpbmUpCisgICAgICAyOSAgIDAuOCUgIDEwLjklICAgICAgMTAw
ICAgMi43JSBhZGQgKGlubGluZSkKKyAgICAgIDI4ICAgMC43JSAgMTEuNiUgICAgICAgMjggICAw
LjclIFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6OmxvY2FsTmFtZSAoaW5saW5lKQorICAgICAgMjUg
ICAwLjclICAxMi4zJSAgICAgICAyNyAgIDAuNyUgV2ViQ29yZTo6UHJpdmF0ZTo6YWRkQ2hpbGRO
b2Rlc1RvRGVsZXRpb25RdWV1ZQorICAgICAgMjQgICAwLjYlICAxMi45JSAgICAgICAyNCAgIDAu
NiUgX19tZW1jcHlfc3NzZTNfYmFjaworICAgICAgMjMgICAwLjYlICAxMy42JSAgICAgICAyMyAg
IDAuNiUgaW50SGFzaCAoaW5saW5lKQorICAgICAgMjMgICAwLjYlICAxNC4yJSAgICAgICA3NiAg
IDIuMCUgdGNtYWxsb2M6OkZMX05leHQKKyAgICAgIDIzICAgMC42JSAgMTQuOCUgICAgICAgOTUg
ICAyLjUlIHRjbWFsbG9jOjpGTF9QdXNoCisgICAgICAyMiAgIDAuNiUgIDE1LjQlICAgICAgIDIy
ICAgMC42JSBXZWJDb3JlOjpNYXJrdXBUb2tlbml6ZXJCYXNlOjpJbnB1dFN0cmVhbVByZXByb2Nl
c3Nvcjo6cGVlayAoaW5saW5lKQorIiIiCisgICAgICAgIGV4cGVjdGVkX2ZpcnN0X3Rlbl9saW5l
cyA9ICIiIiAgICAgIDc2ICAgMi4wJSAgIDIuMCUgICAgICAxMDQgICAyLjglIGxvb2t1cCAoaW5s
aW5lKQorICAgICAgNjAgICAxLjYlICAgMy42JSAgICAgICA2MCAgIDEuNiUgRkxfU2V0UHJldmlv
dXMgKGlubGluZSkKKyAgICAgIDU2ICAgMS41JSAgIDUuMSUgICAgICAgNTYgICAxLjUlIE1hc2tQ
dHIgKGlubGluZSkKKyAgICAgIDUxICAgMS40JSAgIDYuNCUgICAgICAyMjIgICA1LjklIFdlYkNv
cmU6OkhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbgorICAgICAgNDIgICAxLjElICAgNy42JSAgICAg
ICA0NyAgIDEuMiUgV1RGOjpWZWN0b3I6OnNocmlua0NhcGFjaXR5CisgICAgICAzNSAgIDAuOSUg
ICA4LjUlICAgICAgIDM1ICAgMC45JSBXVEY6OlJlZlB0cjo6Z2V0IChpbmxpbmUpCisgICAgICAz
MyAgIDAuOSUgICA5LjQlICAgICAgIDQzICAgMS4xJSBhcHBlbmQgKGlubGluZSkKKyAgICAgIDI5
ICAgMC44JSAgMTAuMSUgICAgICAgNjcgICAxLjglIFdURjo6U3RyaW5nSW1wbDo6ZGVyZWYgKGlu
bGluZSkKKyAgICAgIDI5ICAgMC44JSAgMTAuOSUgICAgICAxMDAgICAyLjclIGFkZCAoaW5saW5l
KQorICAgICAgMjggICAwLjclICAxMS42JSAgICAgICAyOCAgIDAuNyUgV2ViQ29yZTo6UXVhbGlm
aWVkTmFtZTo6bG9jYWxOYW1lIChpbmxpbmUpCisiIiIKKyAgICAgICAgaG9zdCA9IE1vY2tTeXN0
ZW1Ib3N0KCkKKyAgICAgICAgcHJvZmlsZXIgPSBHb29nbGVQUHJvZihob3N0LndvcmtzcGFjZSwg
aG9zdC5leGVjdXRpdmUsICcvYmluL2V4ZWN1dGFibGUnLCAnL3RtcC9vdXRwdXQnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhwcm9maWxlci5fZmlyc3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUo
cHByb2Zfb3V0cHV0KSwgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQppbmRleCA3OTkzZDA1
NzdhZjEzYzg4ZDZjNTAzODc3OWJiYmE1ZjY2YzU2NTE3Li4zZmI5OTc3NGJiNjU5YTMzMTc3NmFi
NjI0Y2YwZjEyN2M4NzhlZmZhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQpAQCAtMzYsNiArMzYsNyBAQCBpbXBvcnQgdGltZQog
aW1wb3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAorZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnByb2ZpbGVyIGltcG9ydCBQcm9maWxlckZhY3RvcnkK
IAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xNDAsNiArMTQxLDEw
IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9
IE5vbmUKIAogICAgICAgICBzZWxmLl9tZWFzdXJlbWVudHMgPSB7fQorICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInByb2ZpbGUiKToKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVy
ID0gUHJvZmlsZXJGYWN0b3J5LmNyZWF0ZV9wcm9maWxlcihzZWxmLl9wb3J0Lmhvc3QsIHNlbGYu
X3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksIHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gTm9uZQogCiAgICAg
ZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuc3RvcCgpCkBAIC0yODIsMTUgKzI4Nywy
MSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgZW52aXJvbm1lbnRbJ0xPQ0FMX1JF
U09VUkNFX1JPT1QnXSA9IHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCiAgICAgICAgIGlm
ICdXRUJLSVRPVVRQVVRESVInIGluIG9zLmVudmlyb246CiAgICAgICAgICAgICBlbnZpcm9ubWVu
dFsnV0VCS0lUT1VUUFVURElSJ10gPSBvcy5lbnZpcm9uWydXRUJLSVRPVVRQVVRESVInXQorICAg
ICAgICBpZiBzZWxmLl9wcm9maWxlcjoKKyAgICAgICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5f
cHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQoZW52aXJvbm1lbnQpCiAgICAgICAgIHNlbGYu
X2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9
IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJf
cHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGlu
ZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQogICAgICAgICBzZWxm
Ll9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCisgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgorICAg
ICAgICAgICAgc2VsZi5fcHJvZmlsZXIuYXR0YWNoX3RvX3BpZChzZWxmLl9zZXJ2ZXJfcHJvY2Vz
cy5waWQoKSkKIAogICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJf
cHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0b3Aoc2VsZi5fcG9y
dC5kcml2ZXJfc3RvcF90aW1lb3V0KCkpCiAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vz
cyA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgorICAgICAgICAgICAgICAg
IHNlbGYuX3Byb2ZpbGVyLmRpZF9zdG9wKCkKIAogICAgICAgICBpZiBzZWxmLl9kcml2ZXJfdGVt
cGRpcjoKICAgICAgICAgICAgIHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0ucm10cmVlKHN0cihzZWxm
Ll9kcml2ZXJfdGVtcGRpcikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJm
b3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQppbmRleCA2YmM2MjUwZjQ1NzQ2OTQ3ZDMzN2M2NjU2
ZTQxYzMyYzUzYTJlYjBmLi42MjNhZWYzNDFhZDkyNTkxZTgzZTkwNjdjNTMzNTU5M2E1NTQ0ZTdk
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMv
cGVyZnRlc3QucHkKQEAgLTE4MywxMSArMTgzLDEyIEBAIGNsYXNzIFBlcmZUZXN0KG9iamVjdCk6
CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJUaGUgdGVzdCBkaWRuJ3QgcmVwb3J0IGFsbCBzdGF0
aXN0aWNzLiIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGZvciByZXN1bHRf
bmFtZSBpbiBvcmRlcmVkX3Jlc3VsdHNfa2V5czoKLSAgICAgICAgICAgIGlmIHJlc3VsdF9uYW1l
ID09IHRlc3RfbmFtZToKLSAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJl
c3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSwgZGVzY3JpcHRpb25fc3RyaW5nKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJl
c3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSkKKyAgICAgICAgaWYgbm90IHNlbGYuX3Bv
cnQuZ2V0X29wdGlvbigncHJvZmlsZScpOgorICAgICAgICAgICAgZm9yIHJlc3VsdF9uYW1lIGlu
IG9yZGVyZWRfcmVzdWx0c19rZXlzOgorICAgICAgICAgICAgICAgIGlmIHJlc3VsdF9uYW1lID09
IHRlc3RfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhy
ZXN1bHRfbmFtZSwgcmVzdWx0c1tyZXN1bHRfbmFtZV0sIGRlc2NyaXB0aW9uX3N0cmluZykKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0
aXN0aWNzKHJlc3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9uYW1lXSkKICAgICAgICAgcmV0dXJu
IHJlc3VsdHMKIAogICAgIGRlZiBvdXRwdXRfc3RhdGlzdGljcyhzZWxmLCB0ZXN0X25hbWUsIHJl
c3VsdHMsIGRlc2NyaXB0aW9uX3N0cmluZz1Ob25lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0ZXN0LnB5
CmluZGV4IDI1OWZjNzg1NGNiZTg3ZTU4NzQ4MzMxZDczYTEzMDRmY2I3M2Q4YjYuLjllMjc1YjYz
NTUyY2FjMzkxYTVmODdhMGFiNGU5YWQ3MmExMjYwMDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVz
dC5weQpAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1
dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVz
dCA9IFBlcmZUZXN0KE5vbmUsICdzb21lLXRlc3QnLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0
JykKKyAgICAgICAgICAgIHRlc3QgPSBQZXJmVGVzdChNb2NrUG9ydCgpLCAnc29tZS10ZXN0Jywg
Jy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHRlc3QucGFyc2Vfb3V0cHV0KG91dHB1dCksCiAgICAgICAgICAgICAgICAgeydzb21lLXRlc3Qn
OiB7J2F2Zyc6IDExMDAuMCwgJ21lZGlhbic6IDExMDEuMCwgJ21pbic6IDEwODAuMCwgJ21heCc6
IDExMjAuMCwgJ3N0ZGV2JzogMTEuMCwgJ3VuaXQnOiAnbXMnLAogICAgICAgICAgICAgICAgICAg
ICAndmFsdWVzJzogW2kgZm9yIGkgaW4gcmFuZ2UoMSwgMjApXX19KQpAQCAtOTEsNyArOTEsNyBA
QCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG91dHB1dF9jYXB0
dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0
cHV0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0KE5vbmUsICdz
b21lLXRlc3QnLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0JykKKyAgICAgICAgICAgIHRlc3Qg
PSBQZXJmVGVzdChNb2NrUG9ydCgpLCAnc29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUt
dGVzdCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QucGFyc2Vfb3V0cHV0KG91
dHB1dCksIE5vbmUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBhY3R1YWxfc3Rkb3V0
LCBhY3R1YWxfc3RkZXJyLCBhY3R1YWxfbG9ncyA9IG91dHB1dF9jYXB0dXJlLnJlc3RvcmVfb3V0
cHV0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3RzcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5j
ZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKaW5kZXggMGZlMDNiZWI2MTVkMDA0MzE3M2FmYjMw
N2NmZTExZTQzMDIxYzMzYy4uNmRjNDc0MmI3ZmFjOTdlNWRmNmEwNTJhOWMwZDU1ZjQ5ODgxMWUw
YiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9w
ZXJmdGVzdHNydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5j
ZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKQEAgLTEyMSw2ICsxMjEsOCBAQCBjbGFzcyBQZXJm
VGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICBoZWxwPSJSdW4gcmVwbGF5IHRl
c3RzLiIpLAogICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZm9yY2UiLCBkZXN0
PSJza2lwcGVkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAg
ICAgICAgICBoZWxwPSJSdW4gYWxsIHRlc3RzLCBpbmNsdWRpbmcgdGhlIG9uZXMgaW4gdGhlIFNr
aXBwZWQgbGlzdC4iKSwKKyAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByb2Zp
bGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCBw
ZXItdGVzdCBwcm9maWxlIGluZm9ybWF0aW9uLiIpLAogICAgICAgICAgICAgXQogICAgICAgICBy
ZXR1cm4gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PShwZXJmX29wdGlvbl9saXN0
KSkucGFyc2VfYXJncyhhcmdzKQogCkBAIC0xODcsNyArMTg5LDcgQEAgY2xhc3MgUGVyZlRlc3Rz
UnVubmVyKG9iamVjdCk6CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9zdG9w
X3NlcnZlcnMoKQogCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZ2VuZXJhdGVfcmVzdWx0czoK
KyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5nZW5lcmF0ZV9yZXN1bHRzIGFuZCBub3Qgc2VsZi5f
b3B0aW9ucy5wcm9maWxlOgogICAgICAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5fZ2VuZXJhdGVf
YW5kX3Nob3dfcmVzdWx0cygpCiAgICAgICAgICAgICBpZiBleGl0X2NvZGU6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4aXRfY29kZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176556</attachid>
            <date>2012-11-28 12:53:39 -0800</date>
            <delta_ts>2012-11-28 13:22:13 -0800</delta_ts>
            <desc>renamed did_stop to profile_after_exit</desc>
            <filename>bug-99517-20121128125113.patch</filename>
            <type>text/plain</type>
            <size>17894</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MDQyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjI4MDMyM2I1MTYwYmMyZmU2MmU1ZmU2N2RjYTczOGVi
MzZmODQ1OS4uOGE0ZWFiOTA3OTgwZmI3MjhiZTQzNTJlZWRiMGU4YjUxZDlkZmY1MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0
IEBACisyMDEyLTExLTI4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBydW4tcGVyZi10ZXN0cyBzaG91bGQgaGF2ZSBhIC0tcHJvZmlsZSBvcHRpb24gZm9yIGVhc3kg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTUxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvcmtzIG9uIE1hYyBh
bmQgTGludXgKKyAgICAgICAgYW5kIG1ha2VzIGl0IHRyaXZpYWwgZm9yIGFueW9uZSB0byBwcm9m
aWxlIGEgUGVyZm9ybWFuY2VUZXN0LgorCisgICAgICAgIEN1cnJlbnRseSBpdCdzIG5vdCAiaGFy
ZCIgdG8gcHJvZmlsZSBhIFBlcmZvcm1hbmNlVGVzdAorICAgICAgICBidXQgbG93ZXJpbmcgdGhl
IGJhcnJpZXJzIHRvIGVudHJ5IGhlcmUgYWxsb3dzIGFsbCBvZiB1cyB0byBmb2N1cworICAgICAg
ICBsZXNzIG9uIHRoZSB0b29scyBhbmQgbW9yZSBvbiB0aGUgY29kZS4KKworICAgICAgICBUaGlz
IGFsc28gcGF2ZXMgdGhlIHdheSBmb3IgYWRkaW5nIGVhc3kgbW9iaWxlLXByb2ZpbGluZyAoZS5n
LiBjaHJvbWl1bS1hbmRyb2lkKQorICAgICAgICB3aGljaCBpcyBhY3R1YWxseSAiaGFyZCIsIGFu
ZCB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgbXVjaCBlYXNpZXIuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHk6IEFkZGVkLgorICAgICAgICAoUHJv
ZmlsZXJGYWN0b3J5KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJvZmlsZXIp
OgorICAgICAgICAoUHJvZmlsZXIpOgorICAgICAgICAoUHJvZmlsZXIuX19pbml0X18pOgorICAg
ICAgICAoUHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQpOgorICAgICAgICAoUHJvZmlsZXIu
YXR0YWNoX3RvX3BpZCk6CisgICAgICAgIChQcm9maWxlci5kaWRfc3RvcCk6CisgICAgICAgIChT
aW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgICAgICAoU2luZ2xlRmlsZU91dHB1dFByb2Zp
bGVyLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mKToKKyAgICAgICAgKEdvb2dsZVBQ
cm9mLl9faW5pdF9fKToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmFkanVzdGVkX2Vudmlyb25tZW50
KToKKyAgICAgICAgKEdvb2dsZVBQcm9mLmRpZF9zdG9wKToKKyAgICAgICAgKEluc3RydW1lbnRz
KToKKyAgICAgICAgKEluc3RydW1lbnRzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3RydW1lbnRz
LmF0dGFjaF90b19waWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wcm9maWxlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChQcm9maWxlckZhY3RvcnlU
ZXN0KToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeVRlc3QudGVzdF9iYXNpYyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHk6CisgICAgICAg
IChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChE
cml2ZXIuc3RvcCk6CisgICAgICAgIChEcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHk6CisgICAgICAgIChQZXJm
VGVzdC5wYXJzZV9vdXRwdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFu
Y2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3Bh
cnNlX291dHB1dCk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3BhcnNlX291dHB1dF93aXRoX2Zh
aWxpbmdfbGluZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0
cy9wZXJmdGVzdHNydW5uZXIucHk6CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX3BhcnNlX2Fy
Z3MpOgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLnJ1bik6CisKIDIwMTItMTEtMjggIFphbiBE
b2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBSZW1vdmUgZGVwcmVj
YXRlZCBsb2dnaW5nIHVzYWdlIGZyb20gUXVldWVFbmdpbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzVjZDU5ZGM0
NjU5NDM3N2E2ZWIxOTJjOTU2OWViNGU3MmM4NGE0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyLnB5CkBAIC0wLDAgKzEsOTkg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQorCitfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgUHJvZmlsZXJGYWN0b3J5KG9iamVjdCk6
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9wcm9maWxlcihjbHMsIGhvc3QsIGV4
ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcj1Ob25lKToKKyAgICAgICAgaWYg
aG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAgICAgICAgIHJldHVybiBJbnN0cnVtZW50cyho
b3N0LndvcmtzcGFjZSwgaG9zdC5leGVjdXRpdmUsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2Rp
ciwgaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIEdvb2dsZVBQcm9mKGhvc3Qud29ya3NwYWNl
LCBob3N0LmV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBpZGVudGlmaWVy
KQorCisKK2NsYXNzIFByb2ZpbGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdv
cmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsIGlkZW50aWZp
ZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dvcmtzcGFjZSA9IHdvcmtzcGFjZQorICAgICAgICBz
ZWxmLl9leGVjdXRpdmUgPSBleGVjdXRpdmUKKyAgICAgICAgc2VsZi5fZXhlY3V0YWJsZV9wYXRo
ID0gZXhlY3V0YWJsZV9wYXRoCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGly
CisgICAgICAgIHNlbGYuX2lkZW50aWZpZXIgPSAidGVzdCIKKworICAgIGRlZiBhZGp1c3RlZF9l
bnZpcm9ubWVudChzZWxmLCBlbnYpOgorICAgICAgICByZXR1cm4gZW52CisKKyAgICBkZWYgYXR0
YWNoX3RvX3BpZChzZWxmLCBwaWQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcHJvZmlsZV9h
ZnRlcl9leGl0KHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgU2luZ2xlRmlsZU91dHB1
dFByb2ZpbGVyKFByb2ZpbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya3NwYWNlLCBl
eGVjdXRpdmUsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2Rpciwgb3V0cHV0X3N1ZmZpeCwgaWRl
bnRpZmllcj1Ob25lKToKKyAgICAgICAgc3VwZXIoU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyLCBz
ZWxmKS5fX2luaXRfXyh3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRw
dXRfZGlyLCBpZGVudGlmaWVyKQorICAgICAgICBzZWxmLl9vdXRwdXRfcGF0aCA9IHNlbGYuX3dv
cmtzcGFjZS5maW5kX3VudXNlZF9maWxlbmFtZShzZWxmLl9vdXRwdXRfZGlyLCBzZWxmLl9pZGVu
dGlmaWVyLCBvdXRwdXRfc3VmZml4KQorCisKK2NsYXNzIEdvb2dsZVBQcm9mKFNpbmdsZUZpbGVP
dXRwdXRQcm9maWxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtzcGFjZSwgZXhlY3V0
aXZlLCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsIGlkZW50aWZpZXI9Tm9uZSk6CisgICAg
ICAgIHN1cGVyKEdvb2dsZVBQcm9mLCBzZWxmKS5fX2luaXRfXyh3b3Jrc3BhY2UsIGV4ZWN1dGl2
ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCAicHByb2YiLCBpZGVudGlmaWVyKQorCisg
ICAgZGVmIGFkanVzdGVkX2Vudmlyb25tZW50KHNlbGYsIGVudik6CisgICAgICAgIGVudlsnQ1BV
UFJPRklMRSddID0gc2VsZi5fb3V0cHV0X3BhdGgKKyAgICAgICAgcmV0dXJuIGVudgorCisgICAg
ZGVmIF9maXJzdF90ZW5fbGluZXNfb2ZfcHJvZmlsZShzZWxmLCBwcHJvZl9vdXRwdXQpOgorICAg
ICAgICBtYXRjaCA9IHJlLnNlYXJjaCgiXlRvdGFsOlteXG5dKlxuKCg/OlteXG5dKlxuKXswLDEw
fSkiLCBwcHJvZl9vdXRwdXQsIHJlLk1VTFRJTElORSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdy
b3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorCisgICAgZGVmIHByb2ZpbGVfYWZ0ZXJfZXhpdChz
ZWxmKToKKyAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgY29kZSB0byBmaW5kIHRoZSBy
aWdodCBnb29nbGUtcHByb2YgZXhlY3V0YWJsZSwgc29tZSBHb29nbGVycyBoYXZlCisgICAgICAg
ICMgZ29vZ2xlLXBwcm9mIGluc3RhbGxlZCBhcyAicHByb2YiIG9uIHRoZWlyIG1hY2hpbmVzIGZv
ciB0aGVtLgorICAgICAgICAjIEZJWE1FOiBTaW1pbGFybHkgd2Ugc2hvdWxkIGZpbmQgdGhlIHJp
Z2h0IHBlcmwhCisgICAgICAgIHBwcm9mX2FyZ3MgPSBbJy91c3IvYmluL3BlcmwnLCAnL3Vzci9i
aW4vZ29vZ2xlLXBwcm9mJywgJy0tdGV4dCcsIHNlbGYuX2V4ZWN1dGFibGVfcGF0aCwgc2VsZi5f
b3V0cHV0X3BhdGhdCisgICAgICAgIHByb2ZpbGVfdGV4dCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChwcHJvZl9hcmdzKQorICAgICAgICBwcmludCBzZWxmLl9maXJzdF90ZW5fbGluZXNf
b2ZfcHJvZmlsZShwcm9maWxlX3RleHQpCisKKworIyBGSVhNRTogaXByb2ZpbGUgaXMgYSBuZXdl
ciBjb21tYW5kbGluZSBpbnRlcmZhY2UgdG8gcmVwbGFjZSAvdXNyL2Jpbi9pbnN0cnVtZW50cy4K
K2NsYXNzIEluc3RydW1lbnRzKFNpbmdsZUZpbGVPdXRwdXRQcm9maWxlcik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHdvcmtzcGFjZSwgZXhlY3V0aXZlLCBleGVjdXRhYmxlX3BhdGgsIG91dHB1
dF9kaXIsIGlkZW50aWZpZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKEluc3RydW1lbnRzLCBzZWxm
KS5fX2luaXRfXyh3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRf
ZGlyLCAidHJhY2UiLCBpZGVudGlmaWVyKQorCisgICAgIyBGSVhNRTogV2UgbWF5IG5lZWQgYSB3
YXkgdG8gZmluZCB0aGlzIHRyYWNldGVtcGxhdGUgb24gdGhlIGRpc2sKKyAgICBfdGltZV9wcm9m
aWxlID0gIi9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0FwcGxpY2F0aW9ucy9JbnN0
cnVtZW50cy5hcHAvQ29udGVudHMvUmVzb3VyY2VzL3RlbXBsYXRlcy9UaW1lIFByb2ZpbGVyLnRy
YWNldGVtcGxhdGUiCisKKyAgICBkZWYgYXR0YWNoX3RvX3BpZChzZWxmLCBwaWQpOgorICAgICAg
ICBjbWQgPSBbImluc3RydW1lbnRzIiwgIi10Iiwgc2VsZi5fdGltZV9wcm9maWxlLCAiLUQiLCBz
ZWxmLl9vdXRwdXRfcGF0aCwgIi1wIiwgcGlkXQorICAgICAgICBjbWQgPSBtYXAodW5pY29kZSwg
Y21kKQorICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oY21kKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ3YWVmYzc1YzEzNWZjZDkxMzIwOTU2OTU4NGQzOTk1NmQ1ZWE4YmIKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJv
ZmlsZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw4NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9t
b2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAorCitmcm9tIC5wcm9maWxlciBpbXBvcnQgUHJvZmls
ZXJGYWN0b3J5LCBJbnN0cnVtZW50cywgR29vZ2xlUFByb2YKKworCitjbGFzcyBQcm9maWxlckZh
Y3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToK
KyAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KCkKKyAgICAgICAgcHJvZmlsZXIgPSBQcm9m
aWxlckZhY3RvcnkuY3JlYXRlX3Byb2ZpbGVyKGhvc3QsICcvYmluL2V4ZWN1dGFibGUnLCAnL3Rt
cC9vdXRwdXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwcm9maWxlci5fb3V0cHV0X3Bh
dGgsICIvdG1wL291dHB1dC90ZXN0LnRyYWNlIikKKworICAgICAgICBob3N0LnBsYXRmb3JtLm9z
X25hbWUgPSAnbGludXgnCisgICAgICAgIHByb2ZpbGVyID0gUHJvZmlsZXJGYWN0b3J5LmNyZWF0
ZV9wcm9maWxlcihob3N0LCAnL2Jpbi9leGVjdXRhYmxlJywgJy90bXAvb3V0cHV0JykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMocHJvZmlsZXIuX291dHB1dF9wYXRoLCAiL3RtcC9vdXRwdXQv
dGVzdC5wcHJvZiIpCisKKyAgICBkZWYgdGVzdF9wcHJvZl9vdXRwdXRfcmVnZXhwKHNlbGYpOgor
ICAgICAgICBwcHJvZl9vdXRwdXQgPSAiIiIKK3NvbWV0aW1lcwordGhlcmUKK2lzCitqdW5rIGJl
Zm9yZSB0aGUgdG90YWwgbGluZQorCisKK1RvdGFsOiAzNzcwIHNhbXBsZXMKKyAgICAgIDc2ICAg
Mi4wJSAgIDIuMCUgICAgICAxMDQgICAyLjglIGxvb2t1cCAoaW5saW5lKQorICAgICAgNjAgICAx
LjYlICAgMy42JSAgICAgICA2MCAgIDEuNiUgRkxfU2V0UHJldmlvdXMgKGlubGluZSkKKyAgICAg
IDU2ICAgMS41JSAgIDUuMSUgICAgICAgNTYgICAxLjUlIE1hc2tQdHIgKGlubGluZSkKKyAgICAg
IDUxICAgMS40JSAgIDYuNCUgICAgICAyMjIgICA1LjklIFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6
Om5leHRUb2tlbgorICAgICAgNDIgICAxLjElICAgNy42JSAgICAgICA0NyAgIDEuMiUgV1RGOjpW
ZWN0b3I6OnNocmlua0NhcGFjaXR5CisgICAgICAzNSAgIDAuOSUgICA4LjUlICAgICAgIDM1ICAg
MC45JSBXVEY6OlJlZlB0cjo6Z2V0IChpbmxpbmUpCisgICAgICAzMyAgIDAuOSUgICA5LjQlICAg
ICAgIDQzICAgMS4xJSBhcHBlbmQgKGlubGluZSkKKyAgICAgIDI5ICAgMC44JSAgMTAuMSUgICAg
ICAgNjcgICAxLjglIFdURjo6U3RyaW5nSW1wbDo6ZGVyZWYgKGlubGluZSkKKyAgICAgIDI5ICAg
MC44JSAgMTAuOSUgICAgICAxMDAgICAyLjclIGFkZCAoaW5saW5lKQorICAgICAgMjggICAwLjcl
ICAxMS42JSAgICAgICAyOCAgIDAuNyUgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZTo6bG9jYWxOYW1l
IChpbmxpbmUpCisgICAgICAyNSAgIDAuNyUgIDEyLjMlICAgICAgIDI3ICAgMC43JSBXZWJDb3Jl
OjpQcml2YXRlOjphZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlCisgICAgICAyNCAgIDAuNiUg
IDEyLjklICAgICAgIDI0ICAgMC42JSBfX21lbWNweV9zc3NlM19iYWNrCisgICAgICAyMyAgIDAu
NiUgIDEzLjYlICAgICAgIDIzICAgMC42JSBpbnRIYXNoIChpbmxpbmUpCisgICAgICAyMyAgIDAu
NiUgIDE0LjIlICAgICAgIDc2ICAgMi4wJSB0Y21hbGxvYzo6RkxfTmV4dAorICAgICAgMjMgICAw
LjYlICAxNC44JSAgICAgICA5NSAgIDIuNSUgdGNtYWxsb2M6OkZMX1B1c2gKKyAgICAgIDIyICAg
MC42JSAgMTUuNCUgICAgICAgMjIgICAwLjYlIFdlYkNvcmU6Ok1hcmt1cFRva2VuaXplckJhc2U6
OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjpwZWVrIChpbmxpbmUpCisiIiIKKyAgICAgICAgZXhw
ZWN0ZWRfZmlyc3RfdGVuX2xpbmVzID0gIiIiICAgICAgNzYgICAyLjAlICAgMi4wJSAgICAgIDEw
NCAgIDIuOCUgbG9va3VwIChpbmxpbmUpCisgICAgICA2MCAgIDEuNiUgICAzLjYlICAgICAgIDYw
ICAgMS42JSBGTF9TZXRQcmV2aW91cyAoaW5saW5lKQorICAgICAgNTYgICAxLjUlICAgNS4xJSAg
ICAgICA1NiAgIDEuNSUgTWFza1B0ciAoaW5saW5lKQorICAgICAgNTEgICAxLjQlICAgNi40JSAg
ICAgIDIyMiAgIDUuOSUgV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bmV4dFRva2VuCisgICAgICA0
MiAgIDEuMSUgICA3LjYlICAgICAgIDQ3ICAgMS4yJSBXVEY6OlZlY3Rvcjo6c2hyaW5rQ2FwYWNp
dHkKKyAgICAgIDM1ICAgMC45JSAgIDguNSUgICAgICAgMzUgICAwLjklIFdURjo6UmVmUHRyOjpn
ZXQgKGlubGluZSkKKyAgICAgIDMzICAgMC45JSAgIDkuNCUgICAgICAgNDMgICAxLjElIGFwcGVu
ZCAoaW5saW5lKQorICAgICAgMjkgICAwLjglICAxMC4xJSAgICAgICA2NyAgIDEuOCUgV1RGOjpT
dHJpbmdJbXBsOjpkZXJlZiAoaW5saW5lKQorICAgICAgMjkgICAwLjglICAxMC45JSAgICAgIDEw
MCAgIDIuNyUgYWRkIChpbmxpbmUpCisgICAgICAyOCAgIDAuNyUgIDExLjYlICAgICAgIDI4ICAg
MC43JSBXZWJDb3JlOjpRdWFsaWZpZWROYW1lOjpsb2NhbE5hbWUgKGlubGluZSkKKyIiIgorICAg
ICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQorICAgICAgICBwcm9maWxlciA9IEdvb2dsZVBQ
cm9mKGhvc3Qud29ya3NwYWNlLCBob3N0LmV4ZWN1dGl2ZSwgJy9iaW4vZXhlY3V0YWJsZScsICcv
dG1wL291dHB1dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHByb2ZpbGVyLl9maXJzdF90
ZW5fbGluZXNfb2ZfcHJvZmlsZShwcHJvZl9vdXRwdXQpLCBleHBlY3RlZF9maXJzdF90ZW5fbGlu
ZXMpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJp
dmVyLnB5CmluZGV4IDc5OTNkMDU3N2FmMTNjODhkNmM1MDM4Nzc5YmJiYTVmNjZjNTY1MTcuLmU4
ODM1OTBjZjE1NjIzYTMwZDA1ODg3N2ZjMWMxMGY0Y2U4ZDJlNjggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0zNiw2ICsz
Niw3IEBAIGltcG9ydCB0aW1lCiBpbXBvcnQgb3MKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtIGltcG9ydCBwYXRoCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucHJvZmlsZXIgaW1w
b3J0IFByb2ZpbGVyRmFjdG9yeQogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKQEAgLTE0MCw2ICsxNDEsMTAgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHNl
bGYuX3NlcnZlcl9wcm9jZXNzID0gTm9uZQogCiAgICAgICAgIHNlbGYuX21lYXN1cmVtZW50cyA9
IHt9CisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigicHJvZmlsZSIpOgorICAgICAg
ICAgICAgc2VsZi5fcHJvZmlsZXIgPSBQcm9maWxlckZhY3RvcnkuY3JlYXRlX3Byb2ZpbGVyKHNl
bGYuX3BvcnQuaG9zdCwgc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKSwgc2VsZi5fcG9ydC5y
ZXN1bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJv
ZmlsZXIgPSBOb25lCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5zdG9w
KCkKQEAgLTI4MiwxNSArMjg3LDIxIEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBl
bnZpcm9ubWVudFsnTE9DQUxfUkVTT1VSQ0VfUk9PVCddID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVz
dHNfZGlyKCkKICAgICAgICAgaWYgJ1dFQktJVE9VVFBVVERJUicgaW4gb3MuZW52aXJvbjoKICAg
ICAgICAgICAgIGVudmlyb25tZW50WydXRUJLSVRPVVRQVVRESVInXSA9IG9zLmVudmlyb25bJ1dF
QktJVE9VVFBVVERJUiddCisgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgorICAgICAgICAgICAg
ZW52aXJvbm1lbnQgPSBzZWxmLl9wcm9maWxlci5hZGp1c3RlZF9lbnZpcm9ubWVudChlbnZpcm9u
bWVudCkKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUgPSBOb25lCiAgICAgICAg
IHNlbGYuX2NyYXNoZWRfcGlkID0gTm9uZQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9
IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlcnZl
cl9uYW1lLCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJv
bm1lbnQpCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0YXJ0KCkKKyAgICAgICAgaWYg
c2VsZi5fcHJvZmlsZXI6CisgICAgICAgICAgICBzZWxmLl9wcm9maWxlci5hdHRhY2hfdG9fcGlk
KHNlbGYuX3NlcnZlcl9wcm9jZXNzLnBpZCgpKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAg
ICAgIGlmIHNlbGYuX3NlcnZlcl9wcm9jZXNzOgogICAgICAgICAgICAgc2VsZi5fc2VydmVyX3By
b2Nlc3Muc3RvcChzZWxmLl9wb3J0LmRyaXZlcl9zdG9wX3RpbWVvdXQoKSkKICAgICAgICAgICAg
IHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5fcHJvZmls
ZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIucHJvZmlsZV9hZnRlcl9leGl0KCkK
IAogICAgICAgICBpZiBzZWxmLl9kcml2ZXJfdGVtcGRpcjoKICAgICAgICAgICAgIHNlbGYuX3Bv
cnQuX2ZpbGVzeXN0ZW0ucm10cmVlKHN0cihzZWxmLl9kcml2ZXJfdGVtcGRpcikpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQpp
bmRleCA2YmM2MjUwZjQ1NzQ2OTQ3ZDMzN2M2NjU2ZTQxYzMyYzUzYTJlYjBmLi42MjNhZWYzNDFh
ZDkyNTkxZTgzZTkwNjdjNTMzNTU5M2E1NTQ0ZTdkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHkKQEAgLTE4MywxMSArMTgz
LDEyIEBAIGNsYXNzIFBlcmZUZXN0KG9iamVjdCk6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJU
aGUgdGVzdCBkaWRuJ3QgcmVwb3J0IGFsbCBzdGF0aXN0aWNzLiIpCiAgICAgICAgICAgICByZXR1
cm4gTm9uZQogCi0gICAgICAgIGZvciByZXN1bHRfbmFtZSBpbiBvcmRlcmVkX3Jlc3VsdHNfa2V5
czoKLSAgICAgICAgICAgIGlmIHJlc3VsdF9uYW1lID09IHRlc3RfbmFtZToKLSAgICAgICAgICAg
ICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJlc3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9u
YW1lXSwgZGVzY3JpcHRpb25fc3RyaW5nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJlc3VsdF9uYW1lLCByZXN1bHRzW3Jlc3VsdF9u
YW1lXSkKKyAgICAgICAgaWYgbm90IHNlbGYuX3BvcnQuZ2V0X29wdGlvbigncHJvZmlsZScpOgor
ICAgICAgICAgICAgZm9yIHJlc3VsdF9uYW1lIGluIG9yZGVyZWRfcmVzdWx0c19rZXlzOgorICAg
ICAgICAgICAgICAgIGlmIHJlc3VsdF9uYW1lID09IHRlc3RfbmFtZToKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5vdXRwdXRfc3RhdGlzdGljcyhyZXN1bHRfbmFtZSwgcmVzdWx0c1tyZXN1bHRf
bmFtZV0sIGRlc2NyaXB0aW9uX3N0cmluZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLm91dHB1dF9zdGF0aXN0aWNzKHJlc3VsdF9uYW1lLCByZXN1bHRz
W3Jlc3VsdF9uYW1lXSkKICAgICAgICAgcmV0dXJuIHJlc3VsdHMKIAogICAgIGRlZiBvdXRwdXRf
c3RhdGlzdGljcyhzZWxmLCB0ZXN0X25hbWUsIHJlc3VsdHMsIGRlc2NyaXB0aW9uX3N0cmluZz1O
b25lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3RfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1h
bmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0ZXN0LnB5CmluZGV4IDI1OWZjNzg1NGNiZTg3ZTU4NzQ4
MzMxZDczYTEzMDRmY2I3M2Q4YjYuLjllMjc1YjYzNTUyY2FjMzkxYTVmODdhMGFiNGU5YWQ3MmEx
MjYwMDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3RfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJm
b3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weQpAQCAtNjMsNyArNjMsNyBAQCBjbGFz
cyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG91dHB1dF9jYXB0dXJlID0g
T3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkK
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0KE5vbmUsICdzb21lLXRl
c3QnLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0JykKKyAgICAgICAgICAgIHRlc3QgPSBQZXJm
VGVzdChNb2NrUG9ydCgpLCAnc29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcp
CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QucGFyc2Vfb3V0cHV0KG91dHB1dCks
CiAgICAgICAgICAgICAgICAgeydzb21lLXRlc3QnOiB7J2F2Zyc6IDExMDAuMCwgJ21lZGlhbic6
IDExMDEuMCwgJ21pbic6IDEwODAuMCwgJ21heCc6IDExMjAuMCwgJ3N0ZGV2JzogMTEuMCwgJ3Vu
aXQnOiAnbXMnLAogICAgICAgICAgICAgICAgICAgICAndmFsdWVzJzogW2kgZm9yIGkgaW4gcmFu
Z2UoMSwgMjApXX19KQpAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAg
ICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgdGVzdCA9IFBlcmZUZXN0KE5vbmUsICdzb21lLXRlc3QnLCAnL3BhdGgvc29tZS1kaXIv
c29tZS10ZXN0JykKKyAgICAgICAgICAgIHRlc3QgPSBQZXJmVGVzdChNb2NrUG9ydCgpLCAnc29t
ZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCiAgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHRlc3QucGFyc2Vfb3V0cHV0KG91dHB1dCksIE5vbmUpCiAgICAgICAgIGZpbmFs
bHk6CiAgICAgICAgICAgICBhY3R1YWxfc3Rkb3V0LCBhY3R1YWxfc3RkZXJyLCBhY3R1YWxfbG9n
cyA9IG91dHB1dF9jYXB0dXJlLnJlc3RvcmVfb3V0cHV0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkK
aW5kZXggMGZlMDNiZWI2MTVkMDA0MzE3M2FmYjMwN2NmZTExZTQzMDIxYzMzYy4uNmRjNDc0MmI3
ZmFjOTdlNWRmNmEwNTJhOWMwZDU1ZjQ5ODgxMWUwYiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAg
ICAgICAgICAgICBoZWxwPSJSdW4gcmVwbGF5IHRlc3RzLiIpLAogICAgICAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oIi0tZm9yY2UiLCBkZXN0PSJza2lwcGVkIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICBoZWxwPSJSdW4gYWxsIHRlc3Rz
LCBpbmNsdWRpbmcgdGhlIG9uZXMgaW4gdGhlIFNraXBwZWQgbGlzdC4iKSwKKyAgICAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByb2ZpbGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAor
ICAgICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCBwZXItdGVzdCBwcm9maWxlIGluZm9ybWF0aW9u
LiIpLAogICAgICAgICAgICAgXQogICAgICAgICByZXR1cm4gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KG9wdGlvbl9saXN0PShwZXJmX29wdGlvbl9saXN0KSkucGFyc2VfYXJncyhhcmdzKQogCkBAIC0x
ODcsNyArMTg5LDcgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgIGZp
bmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnMoKQogCi0gICAgICAgIGlmIHNl
bGYuX29wdGlvbnMuZ2VuZXJhdGVfcmVzdWx0czoKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5n
ZW5lcmF0ZV9yZXN1bHRzIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5wcm9maWxlOgogICAgICAgICAg
ICAgZXhpdF9jb2RlID0gc2VsZi5fZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cygpCiAgICAgICAg
ICAgICBpZiBleGl0X2NvZGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRfY29kZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>