<?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>31625</bug_id>
          
          <creation_ts>2009-11-18 04:51:34 -0800</creation_ts>
          <short_desc>[Qt] It should be easier to run all Qt&apos;s autotests.</short_desc>
          <delta_ts>2010-07-09 04:53:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40672</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jędrzej Nowacki">jedrzej.nowacki</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>abecsi</cc>
    
    <cc>hausmann</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>kenneth</cc>
    
    <cc>ossy</cc>
    
    <cc>rgabor</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>164536</commentid>
    <comment_count>0</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-11-18 04:51:34 -0800</bug_when>
    <thetext>Qt webkit port have own autotests, based on QTestLib framework. Purpose of the autotests is to test Qtish API, but in the same time it tests different features of WebKit. I believe it is valuable portion of tests: it is 7 suite case (about 140 test cases). Right now the tests are not executed automatically.

I propose to integrate Qt&apos;s autotests into layout tests, so they will be executed more frequently and results will be more accessible (visible on a web page).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164542</commentid>
    <comment_count>1</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-11-18 05:09:47 -0800</bug_when>
    <thetext>I&apos;m going to create solution in two steps:
1. Create layer that permits to call binary files from layout tests.
2. Create layout tests for the Qt API tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164543</commentid>
    <comment_count>2</comment_count>
      <attachid>43428</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-11-18 05:11:21 -0800</bug_when>
    <thetext>Created attachment 43428
part1 - integration layer v1

The first part of patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164544</commentid>
    <comment_count>3</comment_count>
      <attachid>43429</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-11-18 05:14:32 -0800</bug_when>
    <thetext>Created attachment 43429
part2 - layout tests v1

2nd part of patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164547</commentid>
    <comment_count>4</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-11-18 05:23:29 -0800</bug_when>
    <thetext>Should we disable somehow the tests on other ports than the Qt or it will happen automatically (tests are in platform/qt directory)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164951</commentid>
    <comment_count>5</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-11-19 04:44:50 -0800</bug_when>
    <thetext>After discussion on qtwebkit IRC channel, we decided that it would be better to create another step in build bot. The step should run all Qt&apos;s autotests. A broken step (test suite) will be more visible than just one broken layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182349</commentid>
    <comment_count>6</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-01-19 11:38:44 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; After discussion on qtwebkit IRC channel, we decided that it would be better to
&gt; create another step in build bot. The step should run all Qt&apos;s autotests. A
&gt; broken step (test suite) will be more visible than just one broken layout test.

Jędrzej, WONTFIX then ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182639</commentid>
    <comment_count>7</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-01-19 23:43:09 -0800</bug_when>
    <thetext>No, with rgabor we tried to fix it, but it is not high priority. I&apos;ve changed importance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190474</commentid>
    <comment_count>8</comment_count>
      <attachid>48758</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-15 09:06:48 -0800</bug_when>
    <thetext>Created attachment 48758
Qt autotest launcher</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190951</commentid>
    <comment_count>9</comment_count>
      <attachid>48758</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-17 02:35:05 -0800</bug_when>
    <thetext>Comment on attachment 48758
Qt autotest launcher

This should live in webkitpy, possibly in its own module/directory.

Please use pep8 for style:

http://www.python.org/dev/peps/pep-0008/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190952</commentid>
    <comment_count>10</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-17 02:37:02 -0800</bug_when>
    <thetext>Also, there seems to be quite a few redundant/too verbose comments, you don&apos;t need to go all crazy with the comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191007</commentid>
    <comment_count>11</comment_count>
      <attachid>48899</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-17 05:35:34 -0800</bug_when>
    <thetext>Created attachment 48899
script v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191014</commentid>
    <comment_count>12</comment_count>
      <attachid>48899</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-17 05:49:47 -0800</bug_when>
    <thetext>Comment on attachment 48899
script v2

Now that i think about it, why does this need to be a module?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191022</commentid>
    <comment_count>13</comment_count>
      <attachid>48899</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-17 06:30:29 -0800</bug_when>
    <thetext>Comment on attachment 48899
script v2

Squash into one script in WebKitTools/Scripts please.

Some other comments:


&gt; +log = logging.getLogger(&quot;qttestmodule.Main&quot;)

This can then be changed to one log

&gt; +def run_test(args):
&gt; +    &quot;&quot;&quot;Run one given test&quot;&quot;&quot;
&gt; +    result, options = args

Why a single argument that you then split up instead of two? Is it due to the workers?

Why result? Wouldn&apos;t a better name be test?

&gt; +    try:
&gt; +        info(&quot;Running... &quot; + result.test_file_name())
&gt; +        tst = Popen(result.test_file_name() + options, stdout = PIPE, stderr = None, shell = True)
&gt; +    except OSError, e:
&gt; +        exception(&quot;Can&apos;t open a file: &quot; + str(e.filename) + &quot;. Skipping...&quot;)

Strike the &quot;a&quot; in the string

You should also use the &quot;Can&apos;t open file: %s. Skipping&quot; % (e.filename) syntax to get rid of all those strs.

&gt; +class TestSuiteResult(object):

Why the explicit inherit of object? 

&gt; +    def set_test_file_name(self, fileName):

Should this be file_name?

&gt; +class Main(object):
&gt; +    &quot;&quot;&quot;Main script. All work is done in run()&quot;&quot;&quot;

Do we really need to split this into a class with init and then run? How about just a main function with helper functions like run_tests etc?

&gt; +          class Pool(object):
&gt; +              &quot;&quot;&quot;Hack, avoid problems with multiprocessing module, this class is single thread replacement
&gt; +              for multiprocessing.Pool class. &quot;Replacement&quot; hehehe &quot;&quot;&quot;

You can strike the last part of that comment.

&gt; +        debug(&quot;Found: &quot; + str(len(tests_executables)))

See comment about &quot;foo %s&quot; % string syntax

&gt; +    def find_tests_paths(self, path):
&gt; +        &quot;&quot;&quot;Find all tests files (executables) inside a given path&quot;&quot;&quot;
&gt; +        result = []

results, it&apos;s an array, plural

&gt; +    def run_tests(self, files):
&gt; +        &quot;&quot;&quot;Run all tests given by path to executable files (iterable)&quot;&quot;&quot;
&gt; +        workers = self._Pool(processes = self._options.parallel_level)
&gt; +        #to each file add options
&gt; +        debug(&quot;Using %s s the workers pool&quot;, repr(workers))
&gt; +        package = map(lambda w: [w, self._options.tests_options, ], files)
&gt; +        debug(&quot;Package for worker: %s&quot;, repr(package))

%, probably lots of places

&gt; +        &quot;&quot;&quot;Show result to public - result&apos;s shortcut should be written to stdout&quot;&quot;&quot;

English nitpick, it&apos;s --- results&apos;--- :)


That&apos;s it for now.

In general I&apos;m wondering if the way output is processed is ideal. Looks like we don&apos;t pick up stderr?

http://www.sed.hu/webkit/qtbuildbot/builders/x86-32%20Linux%20Qt%20Debug/builds/232/steps/qt-unit-test/logs/stdio

It seems some of the output is spit out when running the tests, and then we flush the output later?

What happens if I run this on the command line myself, will I get continuous output as if I had a for-loop on the shell to run each test in succession, or will I have to wait until all the tests are run before the &quot;results are published&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191608</commentid>
    <comment_count>14</comment_count>
      <attachid>49014</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-18 08:06:49 -0800</bug_when>
    <thetext>Created attachment 49014
script v3

(In reply to comment #13)
&gt; (From update of attachment 48899 [details])
&gt; Squash into one script in WebKitTools/Scripts please.
Done.

&gt; &gt; +log = logging.getLogger(&quot;qttestmodule.Main&quot;)
&gt; This can then be changed to one log
Logging style was completely changed, granularity was changed from module to class level.

&gt; &gt; +def run_test(args):
&gt; &gt; +    &quot;&quot;&quot;Run one given test&quot;&quot;&quot;
&gt; &gt; +    result, options = args
&gt;
&gt; Why a single argument that you then split up instead of two? Is it due to the
&gt; workers?
Yes, arguments have to be packed because of Pool::map(func, iterable[, chunksize]).

&gt; Why result? Wouldn&apos;t a better name be test?
Right, changed to test_suite.

&gt; &gt; +    try:
&gt; &gt; +        info(&quot;Running... &quot; + result.test_file_name())
&gt; &gt; +        tst = Popen(result.test_file_name() + options, stdout = PIPE, stderr = None, shell = True)
&gt; &gt; +    except OSError, e:
&gt; &gt; +        exception(&quot;Can&apos;t open a file: &quot; + str(e.filename) + &quot;. Skipping...&quot;)
&gt;
&gt; Strike the &quot;a&quot; in the string
Done.

&gt; You should also use the &quot;Can&apos;t open file: %s. Skipping&quot; % (e.filename) syntax
&gt; to get rid of all those strs.
No str() left :-), but why? Btw. syntax you proposed is slower and confusing (it looks like printf aghr :-)).

&gt; &gt; +class TestSuiteResult(object):
&gt; Why the explicit inherit of object?
There is a difference between class Foo and class Foo(object). In general you should always inherit the object (or another type) to use new-style classes. The issue should be removed in python 3.0, but I&apos;m not sure.

&gt; &gt; +    def set_test_file_name(self, fileName):
&gt;
&gt; Should this be file_name?
It should, fixed.

&gt; &gt; +class Main(object):
&gt; &gt; +    &quot;&quot;&quot;Main script. All work is done in run()&quot;&quot;&quot;
&gt;
&gt; Do we really need to split this into a class with init and then run? How about
&gt; just a main function with helper functions like run_tests etc?
I&apos;m using class attribute to pass options. I think that it is possible to write it using only one function definition (run_test), but why?

&gt; &gt; +          class Pool(object):
&gt; &gt; +              &quot;&quot;&quot;Hack, avoid problems with multiprocessing module, this class is single thread replacement
&gt; &gt; +              for multiprocessing.Pool class. &quot;Replacement&quot; hehehe &quot;&quot;&quot;
&gt;
&gt; You can strike the last part of that comment.
Done :D.

&gt; &gt; +    def find_tests_paths(self, path):
&gt; &gt; +        &quot;&quot;&quot;Find all tests files (executables) inside a given path&quot;&quot;&quot;
&gt; &gt; +        result = []
&gt; results, it&apos;s an array, plural
Result of the method is only one... Changed to &apos;executables&apos;.

&gt; &gt; +        &quot;&quot;&quot;Show result to public - result&apos;s shortcut should be written to stdout&quot;&quot;&quot;
&gt;
&gt; English nitpick, it&apos;s --- results&apos;--- :)
Cool, changed.

&gt; In general I&apos;m wondering if the way output is processed is ideal. Looks like we
&gt; don&apos;t pick up stderr?
True, I don&apos;t touch stderr. We can try to improve it in future, but parsing will be complex.

&gt; http://www.sed.hu/webkit/qtbuildbot/builders/x86-32%20Linux%20Qt%20Debug/builds/232/steps/qt-unit-test/logs/stdio
&gt;
&gt; It seems some of the output is spit out when running the tests, and then we
&gt; flush the output later?
Right. At the beginning infos, warning, errors and stderr are spit out, then stdout is flushed.

&gt; What happens if I run this on the command line myself, will I get continuous
&gt; output as if I had a for-loop on the shell to run each test in succession, or
&gt; will I have to wait until all the tests are run before the &quot;results are
&gt; published&quot;?
Results are published at the end of processing. This is the price for running all tests in parallel.

What do you think about this version?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239282</commentid>
    <comment_count>15</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-06-17 01:25:27 -0700</bug_when>
    <thetext>What&apos;s the status of this bug? Is there a chance that this could be resolved soon?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239301</commentid>
    <comment_count>16</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-17 01:58:54 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; What&apos;s the status of this bug? Is there a chance that this could be resolved soon?
I haven&apos;t time to finsh the script after last review. It is not included here, but main issue to resolve was that there is no way to run it with sync stderr and stdout mode in one proccess.

I&apos;ll look at this in next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242469</commentid>
    <comment_count>17</comment_count>
      <attachid>59646</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-24 05:44:43 -0700</bug_when>
    <thetext>Created attachment 59646
script v4

Changes:
  - renamed to run-qtwebkit-tests
  - few small fixes in html generation
  - developer (synchronous and non parallel) mode
  - PEP8 style checked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242475</commentid>
    <comment_count>18</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-06-24 05:53:47 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=59646) [details]
&gt; script v4
&gt; 
&gt; Changes:
&gt;   - renamed to run-qtwebkit-tests
&gt;   - few small fixes in html generation
&gt;   - developer (synchronous and non parallel) mode
&gt;   - PEP8 style checked.

Thanks Jędrzej, looks good at first sight, we&apos;ll test it on our buildbot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242478</commentid>
    <comment_count>19</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-24 06:03:11 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Thanks Jędrzej, looks good at first sight, we&apos;ll test it on our buildbot.
Great :-) I&apos;m looking forward to your feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242483</commentid>
    <comment_count>20</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-06-24 06:35:35 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; Thanks Jędrzej, looks good at first sight, we&apos;ll test it on our buildbot.
&gt; Great :-) I&apos;m looking forward to your feedback.

It is working well. I have put it into our bots on http://sed.hu/webkit/qtbuildbot/waterfall</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242501</commentid>
    <comment_count>21</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-06-24 07:18:24 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; Thanks Jędrzej, looks good at first sight, we&apos;ll test it on our buildbot.
&gt; &gt; Great :-) I&apos;m looking forward to your feedback.
&gt; 
&gt; It is working well. I have put it into our bots on http://sed.hu/webkit/qtbuildbot/waterfall

Sorry, the working link is http://webkit.sed.hu/buildbot/waterfall(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; Thanks Jędrzej, looks good at first sight, we&apos;ll test it on our buildbot.
&gt; &gt; Great :-) I&apos;m looking forward to your feedback.
&gt; 
&gt; It is working well. I have put it into our bots on http://sed.hu/webkit/qtbuildbot/waterfall

Sorry, the working link is http://webkit.sed.hu/buildbot/waterfall</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243677</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-28 06:45:16 -0700</bug_when>
    <thetext>Tor Arne, can you have a look at this again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243696</commentid>
    <comment_count>23</comment_count>
      <attachid>59646</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-06-28 08:02:02 -0700</bug_when>
    <thetext>Comment on attachment 59646
script v4

cq- -ed, because if fix for https://bugs.webkit.org/show_bug.cgi?id=40672
isn&apos;t landed, it would brake our bots:http://webkit.sed.hu/buildbot/waterfall</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244145</commentid>
    <comment_count>24</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-29 00:51:40 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 59646 [details])
&gt; cq- -ed, because if fix for https://bugs.webkit.org/show_bug.cgi?id=40672
&gt; isn&apos;t landed, it would brake our bots:http://webkit.sed.hu/buildbot/waterfall
I&apos;m curious, does it mean that the script would be run automatically? Can&apos;t we land it and after fixing 40672 just enable it for the build bot?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244168</commentid>
    <comment_count>25</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-06-29 02:15:56 -0700</bug_when>
    <thetext>(In reply to comment #24)
/waterfall
&gt; I&apos;m curious, does it mean that the script would be run automatically? Can&apos;t we land it and after fixing 40672 just enable it for the build bot?

Yes, your script runs automatically on our bots (a long time ago). Now it has a local hack not to hang because of qwebhistory related bug.

It is possible to land first, but before it we have to disable unittest on the bots and remove this script from local svn working copy not to conflict when bot would like to download the landed script. And after fix for https://bugs.webkit.org/show_bug.cgi?id=40672 landed, we can enable unit tests on the bot again. Is that you really want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244184</commentid>
    <comment_count>26</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-29 03:25:35 -0700</bug_when>
    <thetext>(In reply to comment #25)
Thanks for explenation. I&apos;m ok with waiting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248922</commentid>
    <comment_count>27</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-07-09 04:53:23 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=59646) [details]
&gt; script v4
Our bots now build WebKit against Qt-4.6.3, so I landed 
it manually in http://trac.webkit.org/changeset/62940 .</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43428</attachid>
            <date>2009-11-18 05:11:21 -0800</date>
            <delta_ts>2010-02-15 09:06:48 -0800</delta_ts>
            <desc>part1 - integration layer v1</desc>
            <filename>bridgeV1.diff</filename>
            <type>text/plain</type>
            <size>5489</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MDBhYTVhLi4xNGFkNzQzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMTEt
MTggIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50ZWdyYXRpb24gbGF5
ZXIgYmV0d2VlbiBRdCdzIGF1dG90ZXN0cyBhbmQgV2Via2l0J3MgbGF5b3V0IHRlc3RzLgorICAg
ICAgICAKKyAgICAgICAgQ29ubmVjdGlvbiBiZXR3ZWVuIFF0J3MgYXV0b3Rlc3RzIGFuZCBXZWJr
aXQncyBsYXlvdXQgdGVzdHMgd2FzIGNyZWF0ZWQKKyAgICAgICAgYnkgYSBuZXcgaG9vayBpbiB0
aGUgbGF5b3V0IHRlc3QgY29udHJvbGxlci4KKyAgICAgICAgTmV3IGhvb2sgcnVucyBvbmUgb2Yg
dGhlIFF0J3MgYmluYXJ5IGF1dG90ZXN0IGluIGEgc2VwYXJhdGUgcHJvY2Vzcy4KKyAgICAgICAg
QXMgYSByZXN1bHQgaXQgcmV0dXJucyBhIHN0cmluZyAoIlBhc3MiKSwgaWYgYWxsIHRlc3QgY2Fz
ZXMgcGFzc2VkIHBvc2l0aXZlbHkKKyAgICAgICAgb3IgYXV0b3Rlc3Qgb3V0cHV0IGluIG90aGVy
IGNhc2UuCisgICAgICAgIFRoZSBob29rIHNob3VsZCBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBh
IGxheW91dCB0ZXN0LgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5
IHRvIGludGVncmF0ZSBRdCdzIGF1dG90ZXN0cyB3aXRoIFdlYmtpdCdzCisgICAgICAgIGxheW91
dCB0ZXN0cy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE2MjUKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJ1blF0V2Via2l0QXV0
b3Rlc3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuaDoKKyAgICAgICAgKiBTY3JpcHRzL3J1bi13ZWJraXQtdGVzdHM6CisKIDIwMDktMTEtMTcg
IE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4
ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAppbmRleCA5NmI1MjFkLi5iODFlNWIwIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJv
bGxlclF0LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmNwcApAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJU
cmVlLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5o
IgorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRl
IDxRUHJvY2Vzcz4KIAogZXh0ZXJuIHZvaWQgcXRfZHVtcF9lZGl0aW5nX2NhbGxiYWNrcyhib29s
IGIpOwogZXh0ZXJuIHZvaWQgcXRfZHVtcF9yZXNvdXJjZV9sb2FkX2NhbGxiYWNrcyhib29sIGIp
OwpAQCAtMzM2LDMgKzMzOCw1MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlk
ZVByZWZlcmVuY2UoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVZhcmlhbgogICAgIGVsc2Ug
aWYgKG5hbWUgPT0gIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikKICAgICAgICAg
UVdlYlNldHRpbmdzOjpzZXRNYXhpbXVtUGFnZXNJbkNhY2hlKHZhbHVlLnRvSW50KCkpOwogfQor
CisvKiogVGhpcyBtZXRob2QgcnVucyBvbmUgb2YgdGhlIFF0J3MgYmluYXJ5IGF1dG90ZXN0IGlu
IGEgc2VwYXJhdGUgcHJvY2Vzcy4gQXMgYW4gaW5wdXQgcGFyYW1ldGVyIGl0CisgIHRha2VzIGF1
dG90ZXN0J3MgbmFtZS4KKyAgQGF0dGVudGlvbiBUaGUgbWV0aG9kIHJ1bnMgdGVzdHMgb25seSBm
cm9tIHRoZSBEdW1wUmVuZGVyVHJlZSdzIGJ1aWxkIHN1YmRpcmVjdG9yeS4KKyAgQGF0dGVudGlv
biBUaGUgdGVzdCBuYW1lIHNob3VsZCBwYXNzIGEgdmFsaWRhdGlvbiBydWxlIF50c3RfW2Etel0r
JCwgZm9yIGV4YW1wbGUgdHN0X3F3ZWJ2aWV3IG9yCisgIHRzdF9xd2ViZWxlbWVudC4KKyAgQHJl
dHVybiBBIFN0cmluZyBjb250YWlucyBhbiBlcnJvciBtZXNzYWdlIG9yICJQYXNzIi4KKyAgKi8K
K1FTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJ1blF0V2Via2l0QXV0b3Rlc3QoUVN0cmlu
ZyB0ZXN0TmFtZSkKK3sKKyAgICBRU3RyaW5nIHJlc3VsdCgiVW5rbm93biByZXN1bHQiKTsKKyAg
ICBRUHJvY2VzcyBleGVjOworICAgIHRlc3ROYW1lID0gdGVzdE5hbWUudG9Mb3dlcigpOworCisg
ICAgUVJlZ0V4cCB2YWxpZE5hbWUoInRzdF9bYS16XSsiKTsgIC8vIEJhc2ljIHNlY3VyaXR5Lgor
ICAgIGlmICh2YWxpZE5hbWUuZXhhY3RNYXRjaCh0ZXN0TmFtZSkpIHsKKyAgICAgICAgUVN0cmlu
ZyBwYXRoID0gUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQYXRoKCk7CisjaWYgUExB
VEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShXSU5DRSkKKyAgICAgICAgcGF0aCArPSAiXFwuLlxc
V2ViS2l0XFxxdFxcdGVzdHNcXCI7CisgICAgICAgIGlmIChwYXRoLnRvTG93ZXIoKS5jb250YWlu
cygiZGVidWciKSkKKyAgICAgICAgICAgIHBhdGggKz0gImRlYnVnXFwiOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwYXRoICs9ICJyZWxlYXNlXFwiOworICAgICAgICBwYXRoICs9IHRlc3RO
YW1lICsgIi5leGUiOworI2VsaWYgUExBVEZPUk0oREFSV0lOKQorICAgICAgICBwYXRoICs9ICIv
Li4vV2ViS2l0L3F0L3Rlc3RzLyIgKyB0ZXN0TmFtZS5zcGxpdCgiXyIpLmF0KDEpICsgIi8iOwor
ICAgICAgICBwYXRoICs9IHRlc3ROYW1lICsgIi5hcHAvQ29udGVudC9NYWNPUy8iICsgdGVzdE5h
bWU7CisjZWxzZSAvKiBQTEFURk9STShMSU5VWCkgfHwgUExBVEZPUk0oU09MQVJJUykgfHwgUExB
VEZPUk0oVU5JWCkgKi8KKyAgICAgICAgcGF0aCArPSAiLy4uL1dlYktpdC9xdC90ZXN0cy8iICsg
dGVzdE5hbWUuc3BsaXQoIl8iKS5hdCgxKSArICIvIiArIHRlc3ROYW1lOworI2VuZGlmCisKKyAg
ICAgICAgaWYgKFFGaWxlOjpleGlzdHMocGF0aCkpIHsKKyAgICAgICAgICAgIGV4ZWMuc3RhcnQo
cGF0aCk7CisgICAgICAgICAgICAvLyBGb3IgUXQgcG9ydCwgdGhlIGRlZmF1bHQgTGF5b3V0VGVz
dCdzIHRpbWVvdXQgaXMgYWJvdXQgNjAgc2VjLiBEdW1wUmVuZGVyVHJlZSB3aWxsIGJlIGtpbGxl
ZAorICAgICAgICAgICAgLy8gaWYgaXQgd29ya3MgdG9vIGxvbmcuIFNvIHdhaXRGb3JGaW5pc2hl
ZCB0YWtlcyAtMSBhcyBwYXJhbWV0ZXIgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIGEKKyAgICAgICAg
ICAgIC8vIHNlY29uZCB3YXRjaGRvZyBmb3IgdGhlIHRlc3QuCisgICAgICAgICAgICBleGVjLndh
aXRGb3JGaW5pc2hlZCgtMSk7CisgICAgICAgICAgICBpZiAoIChleGVjLmV4aXRTdGF0dXMoKSAh
PSBRUHJvY2Vzczo6Tm9ybWFsRXhpdCkgfHwgKGV4ZWMuZXhpdENvZGUoKSkgKSB7CisgICAgICAg
ICAgICAgICAgLy8gTG9hZCBhdXRvdGVzdCBvdXRwdXQgaW50byB0aGUgcmVzdWx0IHZhcmlhYmxl
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXhlYy5yZWFkQWxsU3RhbmRhcmRPdXRwdXQoKS5y
ZXBsYWNlKCdcbicsIjxicj4iKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICJQYXNzIjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSAi
VGhlIGF1dG90ZXN0IGRvZXNuJ3QgZXhpc3Q6ICIgKyB0ZXN0TmFtZSArICIoIiArIHBhdGggKyAi
KSI7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IHRlc3ROYW1lICsgIiBpc24ndCBhIHN0
YW5kYXJkIG5hbWUgZm9yIFF0J3MgYXV0b3Rlc3QsIHBsZWFzZSBjaGFuZ2UgaXQgdG8gXCJ0c3Rf
W2Etel0rXCIiOworICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmggYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKaW5kZXggZTBhZGQ2
MS4uZTJjMjIwYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5
b3V0VGVzdENvbnRyb2xsZXJRdC5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaApAQCAtMTI4LDYgKzEyOCw3IEBAIHB1YmxpYyBzbG90
czoKICAgICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAgIHZvaWQgb3ZlcnJpZGVQ
cmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSk7CiAK
KyAgICBRU3RyaW5nIHJ1blF0V2Via2l0QXV0b3Rlc3QoUVN0cmluZyB0ZXN0TmFtZSk7CiBwcml2
YXRlIHNsb3RzOgogICAgIHZvaWQgcHJvY2Vzc1dvcmsoKTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4t
d2Via2l0LXRlc3RzCmluZGV4IGI0MzBjZjcuLmFhMGQ5ZDEgMTAwNzU1Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1
bi13ZWJraXQtdGVzdHMKQEAgLTE0NCw4ICsxNDQsOSBAQCBteSAkdGVzdE1lZGlhID0gMTsKIG15
ICR0ZXN0UmVzdWx0c0RpcmVjdG9yeSA9ICIvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMiOwogbXkg
JHRlc3RzUGVyRHVtcFRvb2wgPSAxMDAwOwogbXkgJHRocmVhZGVkID0gMDsKLSMgRHVtcFJlbmRl
clRyZWUgaGFzIGFuIGludGVybmFsIHRpbWVvdXQgb2YgMTUgc2Vjb25kcywgc28gdGhpcyBtdXN0
IGJlID4gMTUuCi1teSAkdGltZW91dFNlY29uZHMgPSAyMDsKKyMgU29tZSBwb3J0cyBvZiBEdW1w
UmVuZGVyVHJlZSBoYXZlIGFuIGludGVybmFsIHRpbWVvdXQgb2YgMTUgc2Vjb25kcywgc28gdGhp
cyBtdXN0IGJlID4gMTUuCisjIFRoZSBRdCBwb3J0IHJ1bnMgdGVzdHMgc3VpdGVzIHRoYXQgYXJl
IHJhdGhlciBiaWcsIHNvIGRlZmF1bHQgdGltZW91dCBzaG91bGQgYmUgYmlnZ2VyIHRoYW4gc3Rh
bmRhcmQKK215ICR0aW1lb3V0U2Vjb25kcyA9IChpc1F0KCkpID8gNjAgOiAyMDsKIG15ICR0b2xl
cmFuY2UgPSAwOwogbXkgJHRyZWF0U2tpcHBlZCA9ICJkZWZhdWx0IjsKIG15ICR1c2VSZW1vdGVM
aW5rc1RvVGVzdHMgPSAwOwo=
</data>
<flag name="review"
          id="25130"
          type_id="1"
          status="-"
          setter="jedrzej.nowacki"
    />
    <flag name="commit-queue"
          id="25131"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43429</attachid>
            <date>2009-11-18 05:14:32 -0800</date>
            <delta_ts>2010-02-15 09:06:48 -0800</delta_ts>
            <desc>part2 - layout tests v1</desc>
            <filename>layoutV1.diff</filename>
            <type>text/plain</type>
            <size>6298</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OTk5NGRjLi43MmE0YTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMTEt
MTggIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIG5ldyBsYXlv
dXQgdGVzdHMgZm9yIFF0J3MgQVBJLgorICAgICAgICAKKyAgICAgICAgVGhlIHRlc3RzIGFyZSB3
cmFwcGVycyBhcm91bmQgUXQncyBhdXRvdGVzdHMuIFRoZSB3cmFwcGVyCisgICAgICAgIGNhbGxz
IExheW91dFRlc3RDb250cm9sbGVyUXQgd2hpY2ggY3JlYXRlIGN1c3RvbSBhdXRvdGVzdCBwcm9j
ZXNzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5IHRvIGludGVn
cmF0ZSBRdCdzIGF1dG90ZXN0cyB3aXRoIFdlYmtpdCdzCisgICAgICAgIGxheW91dCB0ZXN0cy4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE2MjUK
KworICAgICAgICAqIHBsYXRmb3JtL3F0L2FwaS9leGVjLmpzOiBBZGRlZC4KKyAgICAgICAgKHN0
YXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9hcGkvcWdyYXBoaWNzd2Vidmlldy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2FwaS9xZ3JhcGhpY3N3ZWJ2aWV3
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2FwaS9xd2ViZWxlbWVudC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2FwaS9xd2ViZWxlbWVudC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9hcGkvcXdlYmZyYW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvYXBpL3F3ZWJmcmFtZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9hcGkvcXdlYmhpc3RvcnktZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9hcGkvcXdlYmhpc3RvcnkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvYXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvYXBpL3F3ZWJoaXN0b3J5aW50
ZXJmYWNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2FwaS9xd2VicGFnZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2FwaS9xd2VicGFnZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9hcGkvcXdlYnZpZXctZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9hcGkvcXdlYnZpZXcuaHRtbDogQWRk
ZWQuCisKIDIwMDktMTEtMTggIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9leGVjLmpzIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvYXBpL2V4ZWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGNkNGM0NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9l
eGVjLmpzCkBAIC0wLDAgKzEsMTAgQEAKK2Z1bmN0aW9uIHN0YXJ0KHRlc3RuYW1lKSB7CisgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpCisgICAgZG9jdW1lbnQub3BlbigpCisgICAgZG9jdW1lbnQu
d3JpdGVsbigiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiIpCisgICAgZG9jdW1lbnQud3JpdGVs
bihsYXlvdXRUZXN0Q29udHJvbGxlci5ydW5RdFdlYmtpdEF1dG90ZXN0KHRlc3RuYW1lKSkKKyAg
ICBkb2N1bWVudC53cml0ZWxuKCI8L2JvZHk+PC9odG1sPiIpCisgICAgZG9jdW1lbnQuY2xvc2Uo
KQorICB9Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcWdyYXBo
aWNzd2Vidmlldy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcWdy
YXBoaWNzd2Vidmlldy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjU2ZGZjNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQYXNzCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcWdyYXBoaWNzd2Vidmlldy5o
dG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvYXBpL3FncmFwaGljc3dlYnZpZXcuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE5NDE0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvYXBpL3FncmFwaGljc3dlYnZpZXcuaHRtbApA
QCAtMCwwICsxLDYgQEAKKzxodG1sPgorPHNjcmlwdCBzcmM9J2V4ZWMuanMnPgorPC9zY3JpcHQ+
Cis8Ym9keSBvbmxvYWQ9J3N0YXJ0KCJ0c3RfUUdyYXBoaWNzV2ViVmlldyIpJz4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9xd2ViZWxl
bWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmVsZW1l
bnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NmRm
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmVs
ZW1lbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Bhc3MKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9xd2ViZWxlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvYXBpL3F3ZWJlbGVtZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZjZhMDkyMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L2FwaS9xd2ViZWxlbWVudC5odG1sCkBAIC0wLDAgKzEsNiBAQAorPGh0bWw+Cis8c2NyaXB0
IHNyYz0nZXhlYy5qcyc+Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0nc3RhcnQoInRzdF9RV2Vi
RWxlbWVudCIpJz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2FwaS9xd2ViZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvYXBpL3F3ZWJmcmFtZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjU2ZGZjNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3F0L2FwaS9xd2ViZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Bhc3MKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9xd2ViZnJhbWUuaHRtbCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9xd2ViZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mY2VmMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvYXBpL3F3ZWJmcmFtZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPGh0bWw+
Cis8c2NyaXB0IHNyYz0nZXhlYy5qcyc+Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0nc3RhcnQo
InRzdF9RV2ViRnJhbWUiKSc+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmhpc3RvcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvYXBpL3F3ZWJoaXN0b3J5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZkZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvYXBpL3F3ZWJoaXN0b3J5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
IEBACitQYXNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmhp
c3RvcnkuaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9xd2ViaGlzdG9yeS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmFiZWEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmhpc3RvcnkuaHRtbApAQCAt
MCwwICsxLDYgQEAKKzxodG1sPgorPHNjcmlwdCBzcmM9J2V4ZWMuanMnPgorPC9zY3JpcHQ+Cis8
Ym9keSBvbmxvYWQ9J3N0YXJ0KCJ0c3RfUVdlYkhpc3RvcnkiKSc+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmhpc3RvcnlpbnRl
cmZhY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvYXBpL3F3ZWJoaXN0
b3J5aW50ZXJmYWNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42NTZkZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
YXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQYXNz
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmhpc3RvcnlpbnRl
cmZhY2UuaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2FwaS9xd2ViaGlzdG9yeWludGVy
ZmFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjFkMjIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYmhpc3Rvcnlp
bnRlcmZhY2UuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxodG1sPgorPHNjcmlwdCBzcmM9J2V4ZWMu
anMnPgorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J3N0YXJ0KCJ0c3RfUVdlYkhpc3RvcnlJbnRl
cmZhY2UiKSc+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9hcGkvcXdlYnBhZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvYXBpL3F3ZWJwYWdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42NTZkZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvYXBpL3F3ZWJwYWdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQYXNzCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYnBhZ2UuaHRtbCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3F0L2FwaS9xd2VicGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmZmZmIyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9hcGkvcXdlYnBhZ2UuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxodG1sPgorPHNjcmlw
dCBzcmM9J2V4ZWMuanMnPgorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J3N0YXJ0KCJ0c3RfUVdl
YlBhZ2UiKSc+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9hcGkvcXdlYnZpZXctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvYXBpL3F3ZWJ2aWV3LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42NTZkZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvYXBpL3F3ZWJ2aWV3LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQYXNzCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9hcGkvcXdlYnZpZXcuaHRtbCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3F0L2FwaS9xd2Vidmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVkYWZkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9hcGkvcXdlYnZpZXcuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxodG1sPgorPHNjcmlw
dCBzcmM9J2V4ZWMuanMnPgorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J3N0YXJ0KCJ0c3RfUVdl
YlZpZXciKSc+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="25132"
          type_id="1"
          status="-"
          setter="jedrzej.nowacki"
    />
    <flag name="commit-queue"
          id="25133"
          type_id="3"
          status="-"
          setter="jedrzej.nowacki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48758</attachid>
            <date>2010-02-15 09:06:48 -0800</date>
            <delta_ts>2010-02-17 05:35:34 -0800</delta_ts>
            <desc>Qt autotest launcher</desc>
            <filename>qttests.diff</filename>
            <type>text/plain</type>
            <size>16865</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjMjYwOWE3Li5lNWEwM2M0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDIt
MTUgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIHRvIHRo
ZSBRdCBhdXRvdGVzdCBsYXVuY2hlci4KKworICAgICAgICBRdCBhdXRvdGVzdHMgc2hvdWxkIGJl
IGV4ZWN1dGVkIG1vcmUgZnJlcXVlbnRseSwgaWRlYWxseSBieSBidWlsZCBib3QuCisgICAgICAg
IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8gcHJvdmlkZSB0aGUgdGVzdHMgbW9yZSBhY2Nlc3Np
YmxlLgorCisgICAgICAgIFtRdF0gSXQgc2hvdWxkIGJlIGVhc2llciB0byBydW4gYWxsIFF0J3Mg
YXV0b3Rlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE2MjUKKworICAgICAgICAqIFNjcmlwdHMvcXR0ZXN0bW9kdWxlL19faW5pdF9fLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3F0dGVzdG1vZHVsZS9tYWluLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3F0dGVzdG1vZHVsZS9vcHRpb25zLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3Rlc3QtcXR3ZWJraXQucHk6IEFkZGVkLgorCiAyMDEwLTAyLTEwICBEaXJrIFBy
YW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9xdHRlc3Rtb2R1bGUvX19p
bml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3F0dGVzdG1vZHVsZS9fX2luaXRfXy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQ4Y2NjCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9xdHRlc3Rtb2R1bGUvX19pbml0X18ucHkKQEAgLTAs
MCArMSwxOCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKworI0NvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworI1RoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyNtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworI0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorI3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworI1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyNMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworI1lvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyNhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3F0dGVzdG1vZHVsZS9t
YWluLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9xdHRlc3Rtb2R1bGUvbWFpbi5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmI2OTU0Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy9xdHRlc3Rtb2R1bGUvbWFpbi5weQpAQCAtMCwwICsxLDIwMiBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisjQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorCisjVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorI21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisjTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyNN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorI0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisjWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorI2Fsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyNCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0
YXRlbWVudAorCisjbG9hZCBzb21lIGRpcmVjdG9yeSBzZWFyY2hpbmcgc3R1ZmYKK2ltcG9ydCBv
cywgb3MucGF0aAorI2xvYWQgYWxsIHRoZSBzdHVmZiBuZWVkZWQgdG8gbGF1bmNoIG5ldyBwcm9j
ZXNzIGZyb20gc2hlbGwKK2Zyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKKworI2xv
YWQgbG9nZ2VyCitpbXBvcnQgbG9nZ2luZworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInF0dGVz
dG1vZHVsZS5NYWluIikKK2RlYnVnLCB3YXJuLCBlcnJvciwgZXhjZXB0aW9uLCBpbmZvID0gbG9n
LmRlYnVnLCBsb2cud2FybiwgbG9nLmVycm9yLCBsb2cuZXhjZXB0aW9uLCBsb2cuaW5mbworCisj
b3RoZXJzCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaW1hcAorZnJvbSBjb3B5IGltcG9ydCBkZWVw
Y29weQoraW1wb3J0IHJlCisKKworZGVmIHJ1bl90ZXN0KGFyZ3MpOgorICAiIiJSdW4gb25lIGdp
dmVuIHRlc3QiIiIKKyAgcmVzdWx0LCBvcHRpb25zID0gYXJncworICB0cnk6CisgICAgaW5mbygi
UnVubmluZy4uLiAiICsgcmVzdWx0LnRlc3RfZmlsZV9uYW1lKCkpCisgICAgdHN0ID0gUG9wZW4o
cmVzdWx0LnRlc3RfZmlsZV9uYW1lKCkgKyBvcHRpb25zLCBzdGRvdXQgPSBQSVBFLCBzdGRlcnIg
PSBOb25lLCBzaGVsbCA9IFRydWUpCisgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgIGV4Y2VwdGlv
bigiQ2FuJ3Qgb3BlbiBhIGZpbGU6ICIgKyBzdHIoZS5maWxlbmFtZSkgKyAiLiBTa2lwcGluZy4u
LiIpCisgIGVsc2U6CisgICAgcmVzdWx0LnNldF9vdXRwdXQodHN0LmNvbW11bmljYXRlKClbMF0p
ICMgdGFrZXMgc3Rkb3V0IG9ubHkKKyAgaW5mbygiRmluaXNoZWQgIiArIHJlc3VsdC50ZXN0X2Zp
bGVfbmFtZSgpKQorICByZXR1cm4gcmVzdWx0CisKKworY2xhc3MgVGVzdFN1aXRlUmVzdWx0KG9i
amVjdCk6CisgICIiIkluZm9ybWF0aW9uIGFib3V0IHRlc3QgLSBhZ3JlZ2F0b3IiIiIKKworICBk
ZWYgX19pbml0X18oc2VsZik6CisgICAgc2VsZi5fb3V0cHV0ID0gTm9uZQorICAgIHNlbGYuX3Rl
c3RfZmlsZV9uYW1lID0gTm9uZQorCisgIGRlZiBzZXRfb3V0cHV0KHNlbGYsIHhtbCk6CisgICAg
c2VsZi5fb3V0cHV0ID0geG1sLnN0cmlwKCkKKworICBkZWYgb3V0cHV0KHNlbGYpOgorICAgIHJl
dHVybiBzZWxmLl9vdXRwdXQKKworICBkZWYgc2V0X3Rlc3RfZmlsZV9uYW1lKHNlbGYsIGZpbGVO
YW1lKToKKyAgICBzZWxmLl90ZXN0X2ZpbGVfbmFtZSA9IGZpbGVOYW1lCisKKyAgZGVmIHRlc3Rf
ZmlsZV9uYW1lKHNlbGYpOgorICAgIHJldHVybiBzZWxmLl90ZXN0X2ZpbGVfbmFtZQorCisKK2Ns
YXNzIE1haW4ob2JqZWN0KToKKyAgIiIiTWFpbiBzY3JpcHQuIEFsbCB3b3JrIGlzIGRvbmUgaW4g
cnVuKCkiIiIKKworICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgc2VsZi5fb3B0
aW9ucyA9IG9wdGlvbnMKKyAgICBpZiBvcHRpb25zLnBhcmFsbGVsX2xldmVsID4gMSBvciBvcHRp
b25zLnBhcmFsbGVsX2xldmVsIGlzIE5vbmU6CisgICAgICAjdHJ5IHRvIGxvYWQgbXVsdGlwcm9j
ZXNzaW5nIGZvciBwYXJhbGxlbCBhdXRvdGVzdHMgZXhlY3V0aW9uCisgICAgICB0cnk6CisgICAg
ICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICAgICBleGNlcHQgSW1wb3J0
RXJyb3I6CisgICAgICAgIHdhcm4oIkltcG9ydCBFcnJvcjogbXVsdGlwcm9jZXNzaW5nIChsYWNr
IG9mIHB5dGhvbi1tdWx0aXByb2Nlc3NpbmcgcGFja2FnZT8pLiBUaGUgUXQgYXV0b3Rlc3RzIHdp
bGwgYmUgZXhlY3V0ZWQgb25lIGJ5IG9uZSIpCisgICAgICAgIG9wdGlvbnMucGFyYWxsZWxfbGV2
ZWwgPSAxCisgICAgaWYgb3B0aW9ucy5wYXJhbGxlbF9sZXZlbCA9PSAxOgorICAgICAgY2xhc3Mg
UG9vbChvYmplY3QpOgorICAgICAgICAiIiJIYWNrLCBhdm9pZCBwcm9ibGVtcyB3aXRoIG11bHRp
cHJvY2Vzc2luZyBtb2R1bGUsIHRoaXMgY2xhc3MgaXMgc2luZ2xlIHRocmVhZCByZXBsYWNlbWVu
dAorICAgICAgICBmb3IgbXVsdGlwcm9jZXNzaW5nLlBvb2wgY2xhc3MuICJSZXBsYWNlbWVudCIg
aGVoZWhlICIiIgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzKToKKyAgICAg
ICAgICBwYXNzCisgICAgICAgIGRlZiBpbWFwX3Vub3JkZXJlZChzZWxmLCBmdW5jLCBmaWxlcyk6
CisgICAgICAgICAgcmV0dXJuIG1hcChmdW5jLCBmaWxlcykKKyAgICAgICAgZGVmIG1hcChzZWxm
LCBmdW5jLCBmaWxlcyk6CisgICAgICAgICAgcmV0dXJuIG1hcChmdW5jLCBmaWxlcykKKyAgICBz
ZWxmLl9Qb29sID0gUG9vbAorCisKKyAgZGVmIHJ1bihzZWxmKToKKyAgICAiIiJGaW5kICYmIGV4
ZWN1dGUgJiYgcHVibGlzaCBhbGwgdGVzdC4gIkFsbCBpbiBvbmUiIGZ1bmN0aW9uIiIiCisgICAg
ZGVidWcoIlNlYXJjaGluZyBleGVjdXRhYmVscy4uLiIpCisgICAgdGVzdHNfZXhlY3V0YWJsZXMg
PSBzZWxmLmZpbmRfdGVzdHNfcGF0aHMoc2VsZi5fb3B0aW9ucy5wYXRoKQorICAgIGRlYnVnKCJG
b3VuZDogIiArIHN0cihsZW4odGVzdHNfZXhlY3V0YWJsZXMpKSkKKyAgICBkZWJ1ZygiRXhlY3V0
aW5nIHRlc3RzLi4uIikKKyAgICByZXN1bHRzID0gc2VsZi5ydW5fdGVzdHModGVzdHNfZXhlY3V0
YWJsZXMpCisgICAgZGVidWcoIlRyYW5zZm9ybWluZy4uLiIpCisgICAgdHJhbnNmb3JtZWRfcmVz
dWx0cyA9IHNlbGYudHJhbnNmb3JtKHJlc3VsdHMpCisgICAgZGVidWcoIlB1Ymxpc2hpbmcuLi4i
KQorICAgIHNlbGYuYW5ub3VuY2VfcmVzb3VsdHModHJhbnNmb3JtZWRfcmVzdWx0cykKKworCisg
IGRlZiBmaW5kX3Rlc3RzX3BhdGhzKHNlbGYsIHBhdGgpOgorICAgICIiIkZpbmQgYWxsIHRlc3Rz
IGZpbGVzIChleGVjdXRhYmxlcykgaW5zaWRlIGEgZ2l2ZW4gcGF0aCIiIgorICAgIHJlc3VsdCA9
IFtdCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAj
Y2hlY2sgb25seSBmb3IgdGVzdHMgc3RhcnRpbmcgZnJvbSB0c3RfIGFuZCB0aGF0IHdlIGNhbiBh
Y3R1YWxseSBleGVjdXRlCisgICAgICBmaWx0ZXJlZF9wYXRoID0gZmlsdGVyKGxhbWJkYSB3OiB3
LnN0YXJ0c3dpdGgoJ3RzdF8nKSBhbmQgb3MuYWNjZXNzKG9zLnBhdGguam9pbihyb290LCB3KSwg
b3MuWF9PSyksIGZpbGVzKQorICAgICAgZmlsdGVyZWRfcGF0aCA9IG1hcChsYW1iZGEgdzogb3Mu
cGF0aC5qb2luKHJvb3QsIHcpLCBmaWx0ZXJlZF9wYXRoKQorICAgICAgZm9yIGZpbGVfbmFtZSBp
biBmaWx0ZXJlZF9wYXRoOgorICAgICAgICByID0gVGVzdFN1aXRlUmVzdWx0KCkKKyAgICAgICAg
ci5zZXRfdGVzdF9maWxlX25hbWUoZmlsZV9uYW1lKQorICAgICAgICByZXN1bHQuYXBwZW5kKHIp
CisgICAgcmV0dXJuIHJlc3VsdAorCisKKyAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBmaWxlcyk6Cisg
ICAgIiIiUnVuIGFsbCB0ZXN0cyBnaXZlbiBieSBwYXRoIHRvIGV4ZWN1dGFibGUgZmlsZXMgKGl0
ZXJhYmxlKSIiIgorICAgIHdvcmtlcnMgPSBzZWxmLl9Qb29sKHByb2Nlc3NlcyA9IHNlbGYuX29w
dGlvbnMucGFyYWxsZWxfbGV2ZWwpCisgICAgI3RvIGVhY2ggZmlsZSBhZGQgb3B0aW9ucworICAg
IGRlYnVnKCJVc2luZyAlcyBzIHRoZSB3b3JrZXJzIHBvb2wiLCByZXByKHdvcmtlcnMpKQorICAg
IHBhY2thZ2UgPSBtYXAobGFtYmRhIHc6IFt3LCBzZWxmLl9vcHRpb25zLnRlc3RzX29wdGlvbnMs
IF0sIGZpbGVzKQorICAgIGRlYnVnKCJQYWNrYWdlIGZvciB3b3JrZXI6ICVzIiwgcmVwcihwYWNr
YWdlKSkKKyAgICByZXN1bHRzID0gd29ya2Vycy5tYXAocnVuX3Rlc3QsIHBhY2thZ2UpICNjb2xs
ZWN0IHJlc3VsdHMgI1RPRE8gY2hlY2sgd2h5IGltYXAqIGRvZXNuJ3Qgd29yaworICAgIHJldHVy
biByZXN1bHRzCisKKworICBkZWYgdHJhbnNmb3JtKHNlbGYsIHJlc3VsdHMpOgorICAgICIiIlRy
YW5zZm9ybSBsaXN0IG9mIHJlc3VsdCB0byBuaWNlciB2ZXJzaW9uIiIiCisgICAgc3Rkb3V0ID0g
c2VsZi5jb252ZXJ0X3RvX3N0ZG91dChyZXN1bHRzKQorICAgIGh0bWwgPSBzZWxmLmNvbnZlcnRf
dG9faHRtbChyZXN1bHRzKQorICAgIHJldHVybiB7InN0ZG91dCI6IHN0ZG91dCwgImh0bWwiOiBo
dG1sfQorCisKKyAgZGVmIGFubm91bmNlX3Jlc291bHRzKHNlbGYsIHJlc3VsdHMpOgorICAgICIi
IlNob3cgcmVzdWx0IHRvIHB1YmxpYyIiIgorICAgIHNlbGYuYW5ub3VuY2VfcmVzb3VsdHNfc3Rk
b3V0KHJlc3VsdHNbJ3N0ZG91dCddKQorICAgIHNlbGYuYW5ub3VuY2VfcmVzb3VsdHNfaHRtbChy
ZXN1bHRzWydodG1sJ10pCisKKworICBkZWYgYW5ub3VuY2VfcmVzb3VsdHNfc3Rkb3V0KHNlbGYs
IHJlc3VsdHMpOgorICAgICIiIlNob3cgcmVzdWx0IHRvIHB1YmxpYyAtIHJlc3VsdCdzIHNob3J0
Y3V0IHNob3VsZCBiZSB3cml0dGVuIHRvIHN0ZG91dCIiIgorICAgIHByaW50KHJlc3VsdHMpCisK
KworICBkZWYgYW5ub3VuY2VfcmVzb3VsdHNfaHRtbChzZWxmLCByZXN1bHRzKToKKyAgICAiIiJT
aG93IHJlc3VsdCB0byBwdWJsaWMgLSByZXN1bHQncyBodG1sIHZlcnNpb24gc2hvdWxkIGJlIHdy
aXR0ZW4gdG8gZmlsZSIiIgorICAgIHdpdGggZmlsZShzZWxmLl9vcHRpb25zLm91dHB1dF9maWxl
LCAndycpIGFzIGY6CisgICAgICBmLndyaXRlKHJlc3VsdHMpCisgICAgaWYgc2VsZi5fb3B0aW9u
cy5vcGVuX3Jlc3VsdHM6CisgICAgICBQb3BlbihzZWxmLl9vcHRpb25zLmJyb3dzZXIgKyAiICIg
KyBzZWxmLl9vcHRpb25zLm91dHB1dF9maWxlLCBzdGRvdXQgPSBOb25lLCBzdGRlcnIgPSBOb25l
LCBzaGVsbCA9IFRydWUpCisKKworICBkZWYgY29udmVydF90b19zdGRvdXQoc2VsZiwgcmVzdWx0
cyk6CisgICAgIyBjb25uZWN0IGFsbCByZXN1bHRzIGludG8gb25lIHBpZWNlCisgICAgdHh0ID0g
IlxuXG4iLmpvaW4obWFwKGxhbWJkYSB3OiB3Lm91dHB1dCgpLCByZXN1bHRzKSkKKyAgICAjIGZp
bmQgdG90YWwgY291bnQgb2YgZmFpbGVkIHNraXBwZWQgYW5kIHBhc3NlZAorICAgIHRvdGFscyA9
IHJlLmZpbmRhbGwociIoWzAtOV0rKSBwYXNzZWQsIChbMC05XSspIGZhaWxlZCwgKFswLTldKykg
c2tpcHBlZCIsIHR4dCkKKyAgICB0b3RhbHMgPSByZWR1Y2UobGFtYmRhIHgsIHk6IChpbnQoeFsw
XSkgKyBpbnQoeVswXSksIGludCh4WzFdKSArIGludCh5WzFdKSwgaW50KHhbMl0pICsgaW50KHlb
Ml0pKSwgdG90YWxzKQorICAgIHRvdGFscyA9IHN0cih0b3RhbHNbMF0pICsgIiBwYXNzZWQsICIg
KyBzdHIodG90YWxzWzFdKSArICIgZmFpbGVkLCAiICsgc3RyKHRvdGFsc1syXSkgKyAiIHNraXBw
ZWQiCisgICAgdHh0ICs9ICdcblxuXG4nICsgJyonICogNzAKKyAgICB0eHQgKz0gIlxuKioiICsg
KCJUT1RBTFM6ICIgKyB0b3RhbHMpLmNlbnRlcig2NikgKycqKicKKyAgICB0eHQgKz0gJ1xuJyAr
ICcqJyAqIDcwICsgJ1xuJworICAgIHJldHVybiB0eHQKKworCisgIGRlZiBjb252ZXJ0X3RvX2h0
bWwoc2VsZiwgcmVzdWx0cyk6CisgICAgIyBjb25uZWN0IGFsbCByZXN1bHRzIGludG8gb25lIHBp
ZWNlCisgICAgdHh0ID0gIlxuXG4iLmpvaW4obWFwKGxhbWJkYSB3OiB3Lm91dHB1dCgpLCByZXN1
bHRzKSkKKyAgICAjIGVzY2FwZSBhbGwgaHRtbCB0YWdzCisgICAgdHh0ID0gdHh0LnJlcGxhY2Uo
JyYnLCAnJmFtcDsnKS5yZXBsYWNlKCc8JywgIiZsdDsiKS5yZXBsYWNlKCc+JywgIiZndDsiKQor
ICAgICMgc21hbGwgdHJpY2ssIGFsbCBpbnRlbmRlZCBsaW5lcyBhcmUgY29ubmVjdGVkIHRvIHBy
ZXZpZXdzCisgICAgdHh0ID0gdHh0LnJlcGxhY2UoIlxuICAiLCIgICIpCisgICAgIyBhZGQgY29s
b3JzIGFuIHN0eWxlcworICAgIHR4dCA9IHJlLnN1YihyIihbKiBdKyhGaW5pc2hlZClbIGEtel9B
LVowLTldK1sqXSspIiwgbGFtYmRhIHc6IHIiIiwgdHh0KQorICAgIHR4dCA9IHJlLnN1YihyIihb
Kl0rWyBhLXpfQS1aMC05XStbKl0rKSIsIGxhbWJkYSB3OiAiPGNhc2UgY2xhc3M9J2dvb2QnPjxi
cj48YnI+PGI+IiArIHcuZ3JvdXAoMCkgKyByIjwvYj48L2Nhc2U+IiwgdHh0KQorICAgIHR4dCA9
IHJlLnN1YihyIlxuKENvbmZpZykoKC4pKykiLCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dv
b2QnPjxicj48aT4iICsgdy5ncm91cCgwKSArIHIiPC9pPjwvY2FzZT4iLCB0eHQpCisgICAgdHh0
ID0gcmUuc3ViKHIiXG4oUEFTUykoKC4pKykiLCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dv
b2QnPjxicj48c3RhdHVzIGNsYXNzPSdwYXNzJz4iICsgdy5ncm91cCgxKSArIHIiPC9zdGF0dXM+
IiArIHcuZ3JvdXAoMikgKyByIjwvY2FzZT4iLCB0eHQpCisgICAgdHh0ID0gcmUuc3ViKHIiXG4o
RkFJTCEpKCguKSspIiwgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdiYWQnPjxicj48c3RhdHVz
IGNsYXNzPSdmYWlsJz4iICsgdy5ncm91cCgxKSArIHIiPC9zdGF0dXM+IiArIHcuZ3JvdXAoMikg
KyByIjwvY2FzZT4iLCB0eHQpCisgICAgdHh0ID0gcmUuc3ViKHIiXG4oWFBBU1MpKCguKSspIiwg
bGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdiYWQnPjxicj48c3RhdHVzIGNsYXNzPSd4cGFzcyc+
IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIpICsgciI8L2Nhc2U+Iiwg
dHh0KQorICAgIHR4dCA9IHJlLnN1YihyIlxuKFhGQUlMKSgoLikrKSIsIGxhbWJkYSB3OiAiXG48
Y2FzZSBjbGFzcz0nZ29vZCc+PGJyPjxzdGF0dXMgY2xhc3M9J3hmYWlsJz4iICsgdy5ncm91cCgx
KSArIHIiPC9zdGF0dXM+IiArIHcuZ3JvdXAoMikgKyByIjwvY2FzZT4iLCB0eHQpCisgICAgdHh0
ID0gcmUuc3ViKHIiXG4oU0tJUCkoKC4pKykiLCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dv
b2QnPjxicj48c3RhdHVzIGNsYXNzPSd4ZmFpbCc+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVz
PiIgKyB3Lmdyb3VwKDIpICsgciI8L2Nhc2U+IiwgdHh0KQorICAgIHR4dCA9IHJlLnN1YihyIlxu
KFFXQVJOKSgoLikrKSIsIGxhbWJkYSB3OiAiXG48Y2FzZSBjbGFzcz0nYmFkJz48YnI+PHN0YXR1
cyBjbGFzcz0nd2Fybic+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIp
ICsgciI8L2Nhc2U+IiwgdHh0KQorICAgIHR4dCA9IHJlLnN1YihyIlxuKFJFU1VMVCkoKC4pKyki
LCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxicj48c3RhdHVzIGNsYXNzPSdiZW5j
aG1hcmsnPiIgKyB3Lmdyb3VwKDEpICsgciI8L3N0YXR1cz4iICsgdy5ncm91cCgyKSArIHIiPC9j
YXNlPiIsIHR4dCkKKyAgICB0eHQgPSByZS5zdWIociJcbihRRkFUQUwpKCguKSspIiwgbGFtYmRh
IHc6ICJcbjxjYXNlIGNsYXNzPSdiYWQnPjxicj48c3RhdHVzIGNsYXNzPSdjcmFzaCc+IiArIHcu
Z3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIpICsgciI8L2Nhc2U+IiwgdHh0KQor
ICAgIHR4dCA9IHJlLnN1YihyIlxuKFRvdGFsczopKFswLTknLCBhLXpdKikiLCBsYW1iZGEgdzog
IlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxicj48Yj4iICsgdy5ncm91cCgxKSArIHIiPC9iPiIgKyB3
Lmdyb3VwKDIpICsgIjwvY2FzZT4iICwgdHh0KQorICAgICMgZmluZCB0b3RhbCBjb3VudCBvZiBm
YWlsZWQgc2tpcHBlZCBhbmQgcGFzc2VkCisgICAgdG90YWxzID0gcmUuZmluZGFsbChyIihbMC05
XSspIHBhc3NlZCwgKFswLTldKykgZmFpbGVkLCAoWzAtOV0rKSBza2lwcGVkIiwgdHh0KQorICAg
IHRvdGFscyA9IHJlZHVjZShsYW1iZGEgeCwgeTogKGludCh4WzBdKSArIGludCh5WzBdKSwgaW50
KHhbMV0pICsgaW50KHlbMV0pLCBpbnQoeFsyXSkgKyBpbnQoeVsyXSkpLCB0b3RhbHMpCisgICAg
dG90YWxzID0gc3RyKHRvdGFsc1swXSkgKyAiIHBhc3NlZCwgIiArIHN0cih0b3RhbHNbMV0pICsg
IiBmYWlsZWQsICIgKyBzdHIodG90YWxzWzJdKSArICIgc2tpcHBlZCIKKyAgICAjIGFkZCBoZWFk
ZXIKKyAgICB0eHQgPSAiIiI8aHRtbD48aGVhZD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPiBjYXNl
Lmdvb2Qge2NvbG9yOmJsYWNrfSBjYXNlLmJhZCB7Y29sb3I6YmxhY2t9IHN0YXR1cy5wYXNzIHtj
b2xvcjpncmVlbn0gc3RhdHVzLmNyYXNoIHtjb2xvcjpyZWR9IHN0YXR1cy5mYWlsIHtjb2xvcjpy
ZWR9IHN0YXR1cy54cGFzcyB7Y29sb3I6NjYzMzAwfSBzdGF0dXMueGZhaWwge2NvbG9yOjAwNDUw
MH0gc3RhdHVzLmJlbmNobWFyayB7Y29sb3I6MDAwMDg4fSBzdGF0dXMud2FybiB7Y29sb3I6b3Jh
bmdlfSBzdGF0dXMuY3Jhc2h7Y29sb3I6cmVkOyB0ZXh0LWRlY29yYXRpb246Ymxpbms7IGJhY2tn
cm91bmQtY29sb3I6YmxhY2s7fSAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48Y2VudGVyPjxoMT5R
dCdzIGF1dG90ZXN0cyByZXN1bHRzPC9oMT4iIiIgKyB0b3RhbHMgKyAiIiI8YnI+PGhyPjxmb3Jt
PjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJIaWRlIGdvb2QiIG9uY2xpY2s9ImRvY3VtZW50
LnN0eWxlU2hlZXRzWzBdLmNzc1J1bGVzWzBdLnN0eWxlLmRpc3BsYXk9J25vbmUnIi8+Jm5ic3A8
aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU2hvdyBhbGwiIG9uY2xpY2s9ImRvY3VtZW50LnN0
eWxlU2hlZXRzWzBdLmNzc1J1bGVzWzBdLnN0eWxlLmRpc3BsYXk9JyciLz48L2Zvcm0+PC9jZW50
ZXI+PGhyPiIiIiArIHR4dCArICIiIjwvYm9keT48L2h0bWw+IiIiCisgICAgcmV0dXJuIHR4dAor
ICAgIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9xdHRlc3Rtb2R1bGUvb3B0aW9u
cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcXR0ZXN0bW9kdWxlL29wdGlvbnMucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNmM4YgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvcXR0ZXN0bW9kdWxlL29wdGlvbnMucHkKQEAgLTAsMCArMSw3
MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisj
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisjVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorI21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisjTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorI0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisjWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorI2Fsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyNC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworI2NvbWFuZCBsaW5lIG9wdGlvbnMgcGFyc2Vy
Citmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKKyNsb2FkIGxvZ2dlcgoraW1wb3J0
IGxvZ2dpbmcKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJxdHRlc3Rtb2R1bGUuT3B0aW9ucyIp
CisjbG9hZCBzb21lIGRpcmVjdG9yeSBzZWFyY2hpbmcgc3R1ZmYKK2ltcG9ydCBvcy5wYXRoCitp
bXBvcnQgc3lzCisKKworY2xhc3MgT3B0aW9ucygpOgorICAiIiJPcHRpb24gbWFuYWdlci4gSXQg
cGFyc2UgYW5kIGNoZWNrIGFsbCBwYXJhbXRlcmVzLCBzZXQgaW50ZXJuYWwgdmFyaWFibGVzLiIi
IgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzKTogIAorICAgIG9wdCA9IE9wdGlvblBhcnNl
cigiJXByb2cgW29wdGlvbnNdIFBhdGhUb1NlYXJjaC5cblRyeSAtaCBvciAtLWhlbHAuIikKKyAg
ICBvcHQuYWRkX29wdGlvbigiLWoiLCAiLS1wYXJhbGxlbC1sZXZlbCIsIGFjdGlvbiA9ICJzdG9y
ZSIsIHR5cGUgPSAiaW50IiwgZGVzdCA9ICJwYXJhbGxlbF9sZXZlbCIsIGRlZmF1bHQ9Tm9uZSwg
aGVscCA9ICJOdW1iZXIgb2YgcGFyYWxsZWwgcHJvY2Vzc2VzIGV4ZWN1dGluZyB0aGUgUXQncyB0
ZXN0cy4gRGVmYXVsdDogY3B1IGNvdW50LiIpCisgICAgb3B0LmFkZF9vcHRpb24oIi12IiwgIi0t
dmVyYm9zZSIsIGFjdGlvbiA9ICJzdG9yZSIsIHR5cGUgPSAiaW50IiwgZGVzdCA9ICJ2ZXJib3Nl
IiwgZGVmYXVsdCA9IDIsIGhlbHAgPSAiVmVyYm9zZSBsZXZlbCAoMCAtIHF1aWV0LCAxIC0gZXJy
b3JzIG9ubHksIDIgLSBpbmZvcyBhbmQgd2FybmluZ3MsIDMgLSBkZWJ1ZyBpbmZvcm1hdGlvbiku
IERlZmF1bHQ6ICVkZWZhdWx0LiIpCisgICAgb3B0LmFkZF9vcHRpb24oIiIsICItLXRlc3RzLW9w
dGlvbnMiLCBhY3Rpb24gPSAic3RvcmUiLCB0eXBlID0gInN0cmluZyIsIGRlc3QgPSAidGVzdHNf
b3B0aW9ucyIsIGRlZmF1bHQgPSAiIiwgaGVscCA9ICJQYXJhbWV0ZXJzIHBhc3NlZCB0byBRdCdz
IHRlc3RzIChmb3IgZXhhbXBsZSAnLWV2ZW50ZGVsYXkgMTIzJykuIikKKyAgICBvcHQuYWRkX29w
dGlvbigiLW8iLCAiLS1vdXRwdXQtZmlsZSIsIGFjdGlvbiA9ICJzdG9yZSIsIHR5cGUgPSAic3Ry
aW5nIiwgZGVzdCA9ICJvdXRwdXRfZmlsZSIsIGRlZmF1bHQgPSAiL3RtcC9xdHdlYmtpdHRlc3Rz
Lmh0bWwiLCBoZWxwID0gIkZpbGUgd2hlcmUgcmVzdWx0cyB3aWxsIGJlIHN0b3JlZC4gVGhlIGZp
bGUgd2lsbCBiZSBvdmVyd3JpdGVkLiBEZWZhdWx0OiAlZGVmYXVsdC4iKQorICAgIG9wdC5hZGRf
b3B0aW9uKCItYiIsICItLWJyb3dzZXIiLCBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImJyb3dz
ZXIiLCBkZWZhdWx0ID0gInhkZy1vcGVuIiwgaGVscCA9ICJCcm93c2VyIGluIHdoaWNoIHJlc3Vs
dHMgd2lsbCBiZSBvcGVuZWQuIERlZmF1bHQgJWRlZmF1bHQuIikKKyAgICBvcHQuYWRkX29wdGlv
bigiIiwgIi0tZG8tbm90LW9wZW4tcmVzdWx0cyIsIGFjdGlvbiA9ICJzdG9yZV9mYWxzZSIsIGRl
c3QgPSAib3Blbl9yZXN1bHRzIiwgZGVmYXVsdCA9IFRydWUsIGhlbHAgPSAiVGhlIHJlc3VsdHMg
c2hvdWxkbid0IHBvcC11cCBpbiBhIGJyb3dzZXIgYXV0b21hdGljYWx5IikKKyAgICBzZWxmLl9v
LCBzZWxmLl9hID0gb3B0LnBhcnNlX2FyZ3MoYXJncykKKyAgICB2ZXJib3NlID0gc2VsZi5fby52
ZXJib3NlCisgICAgaWYgdmVyYm9zZSA9PSAwOgorICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhs
ZXZlbD1sb2dnaW5nLkNSSVRJQ0FMLCkKKyAgICBlbGlmIHZlcmJvc2UgPT0gMToKKyAgICAgIGxv
Z2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5FUlJPUiwpCisgICAgZWxpZiB2ZXJib3Nl
ID09IDI6CisgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTywpCisg
ICAgZWxpZiB2ZXJib3NlID09IDM6CisgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxv
Z2dpbmcuREVCVUcsKQorICAgIGVsc2U6CisgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVs
PWxvZ2dpbmcuSU5GTywpCisgICAgICBsb2cud2FybigiQmFkIHZlcmJvc2UgbGV2ZWwsIHN3aXRj
aGluZyB0byAyIikKKyAgICB0cnk6CisgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5f
YVswXSk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUGF0aCBkb2Vzbid0IGV4aXN0IikKKyAg
ICAgIGlmIGxlbihzZWxmLl9hKT4xOgorICAgICAgICByYWlzZSBJbmRleEVycm9yKCJPbmx5IG9u
ZSBkaXJlY3RvcnkiKQorICAgICAgc2VsZi5fby5wYXRoID0gc2VsZi5fYVswXQorICAgIGV4Y2Vw
dCBJbmRleEVycm9yOgorICAgICAgbG9nLmVycm9yKCJCYWQgdXNhZ2UuIFBsZWFzZSB0cnkgLWgg
b3IgLS1oZWxwIikKKyAgICAgIHN5cy5leGl0KDEpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAg
ICAgIGxvZy5lcnJvcigiUGF0aCAnIiArIHNlbGYuX2FbMF0gKyAiJyBkb2Vzbid0IGV4aXN0IikK
KyAgICAgIHN5cy5leGl0KDIpCisKKyAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAg
ICIiIm1hcCBhbGwgb3B0aW9ucyBwcm9wZXJ0aWVzIGludG8gdGhpcyBvYmplY3QgKHJlbW92ZSBv
bmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24pIiIiCisgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fbywg
YXR0cikKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXF0d2Via2l0LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXF0d2Via2l0LnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLjk3ZTQxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3Rlc3QtcXR3ZWJraXQucHkKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisjQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisjVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
I21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisjTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisjdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisjVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyNNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorI0xpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorI2Fsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisjdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyNCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKworaW1wb3J0IHN5cworI2ltcG9ydCBpbnRlcm5hbCBzdHVmZgorZnJvbSBxdHRl
c3Rtb2R1bGUubWFpbiBpbXBvcnQgTWFpbgorZnJvbSBxdHRlc3Rtb2R1bGUub3B0aW9ucyBpbXBv
cnQgT3B0aW9ucworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAjcGFyc2Ugb3B0aW9u
cworICBvcHRpb25zID0gT3B0aW9ucyhzeXMuYXJndlsxOl0pCisgIG1haW4gPSBNYWluKG9wdGlv
bnMpCisgIG1haW4ucnVuKCkKKyAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="31482"
          type_id="1"
          status="-"
          setter="vestbo"
    />
    <flag name="commit-queue"
          id="31483"
          type_id="3"
          status="-"
          setter="vestbo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48899</attachid>
            <date>2010-02-17 05:35:34 -0800</date>
            <delta_ts>2010-02-18 08:06:49 -0800</delta_ts>
            <desc>script v2</desc>
            <filename>test.diff</filename>
            <type>text/plain</type>
            <size>17393</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjMjYwOWE3Li5lNWEwM2M0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDIt
MTUgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIHRvIHRo
ZSBRdCBhdXRvdGVzdCBsYXVuY2hlci4KKworICAgICAgICBRdCBhdXRvdGVzdHMgc2hvdWxkIGJl
IGV4ZWN1dGVkIG1vcmUgZnJlcXVlbnRseSwgaWRlYWxseSBieSBidWlsZCBib3QuCisgICAgICAg
IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8gcHJvdmlkZSB0aGUgdGVzdHMgbW9yZSBhY2Nlc3Np
YmxlLgorCisgICAgICAgIFtRdF0gSXQgc2hvdWxkIGJlIGVhc2llciB0byBydW4gYWxsIFF0J3Mg
YXV0b3Rlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE2MjUKKworICAgICAgICAqIFNjcmlwdHMvcXR0ZXN0bW9kdWxlL19faW5pdF9fLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3F0dGVzdG1vZHVsZS9tYWluLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3F0dGVzdG1vZHVsZS9vcHRpb25zLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3Rlc3QtcXR3ZWJraXQucHk6IEFkZGVkLgorCiAyMDEwLTAyLTEwICBEaXJrIFBy
YW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXF0d2Via2l0LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXF0d2Via2l0LnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLjgyZjBiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3Rlc3QtcXR3ZWJraXQucHkKQEAgLTAsMCArMSwyOSBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisjQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisjVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
I21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisjTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisjdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisjVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyNNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorI0xpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorI2Fsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisjdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyNCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKworaW1wb3J0IHN5cworZnJvbSB3ZWJraXRweS5xdHRlc3QubWFpbiBpbXBvcnQg
TWFpbgorZnJvbSB3ZWJraXRweS5xdHRlc3Qub3B0aW9ucyBpbXBvcnQgT3B0aW9ucworCitpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG9wdGlvbnMgPSBPcHRpb25zKHN5cy5hcmd2WzE6
XSkKKyAgICBtYWluID0gTWFpbihvcHRpb25zKQorICAgIG1haW4ucnVuKCkKKyAgClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9xdHRlc3QvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3F0
dGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQ4
Y2NjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9xdHRl
c3QvX19pbml0X18ucHkKQEAgLTAsMCArMSwxOCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0K
KworI0NvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworI1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyNtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworI0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorI3ZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworI1RoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorI2J1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisjTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyNMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworI1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyNhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworI3RoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisjQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3F0dGVzdC9tYWluLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9xdHRlc3QvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
MjAyNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9x
dHRlc3QvbWFpbi5weQpAQCAtMCwwICsxLDE5NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
IC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisjQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisjVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorI21vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisj
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisjVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisjYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorI0xpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorI2Fs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisjdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyNCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKwor
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgb3MsIG9zLnBh
dGgKK2Zyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKKworaW1wb3J0IGxvZ2dpbmcK
K2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJxdHRlc3Rtb2R1bGUuTWFpbiIpCitkZWJ1Zywgd2Fy
biwgZXJyb3IsIGV4Y2VwdGlvbiwgaW5mbyA9IGxvZy5kZWJ1ZywgbG9nLndhcm4sIGxvZy5lcnJv
ciwgbG9nLmV4Y2VwdGlvbiwgbG9nLmluZm8KKworZnJvbSBpdGVydG9vbHMgaW1wb3J0IGltYXAK
K2Zyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKK2ltcG9ydCByZQorCisKK2RlZiBydW5fdGVzdChh
cmdzKToKKyAgICAiIiJSdW4gb25lIGdpdmVuIHRlc3QiIiIKKyAgICByZXN1bHQsIG9wdGlvbnMg
PSBhcmdzCisgICAgdHJ5OgorICAgICAgICBpbmZvKCJSdW5uaW5nLi4uICIgKyByZXN1bHQudGVz
dF9maWxlX25hbWUoKSkKKyAgICAgICAgdHN0ID0gUG9wZW4ocmVzdWx0LnRlc3RfZmlsZV9uYW1l
KCkgKyBvcHRpb25zLCBzdGRvdXQgPSBQSVBFLCBzdGRlcnIgPSBOb25lLCBzaGVsbCA9IFRydWUp
CisgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdGlvbigiQ2FuJ3Qgb3BlbiBh
IGZpbGU6ICIgKyBzdHIoZS5maWxlbmFtZSkgKyAiLiBTa2lwcGluZy4uLiIpCisgICAgZWxzZToK
KyAgICAgICAgcmVzdWx0LnNldF9vdXRwdXQodHN0LmNvbW11bmljYXRlKClbMF0pICMgdGFrZXMg
c3Rkb3V0IG9ubHkKKyAgICBpbmZvKCJGaW5pc2hlZCAiICsgcmVzdWx0LnRlc3RfZmlsZV9uYW1l
KCkpCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2NsYXNzIFRlc3RTdWl0ZVJlc3VsdChvYmplY3Qp
OgorICAgICIiIkluZm9ybWF0aW9uIGFib3V0IHRlc3QgLSBhZ3JlZ2F0b3IiIiIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gTm9uZQorICAgICAgICBz
ZWxmLl90ZXN0X2ZpbGVfbmFtZSA9IE5vbmUKKworICAgIGRlZiBzZXRfb3V0cHV0KHNlbGYsIHht
bCk6CisgICAgICAgIHNlbGYuX291dHB1dCA9IHhtbC5zdHJpcCgpCisKKyAgICBkZWYgb3V0cHV0
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0CisKKyAgICBkZWYgc2V0X3Rlc3Rf
ZmlsZV9uYW1lKHNlbGYsIGZpbGVOYW1lKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlX25hbWUg
PSBmaWxlTmFtZQorCisgICAgZGVmIHRlc3RfZmlsZV9uYW1lKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fdGVzdF9maWxlX25hbWUKKworCitjbGFzcyBNYWluKG9iamVjdCk6CisgICAgIiIi
TWFpbiBzY3JpcHQuIEFsbCB3b3JrIGlzIGRvbmUgaW4gcnVuKCkiIiIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBvcHRpb25zKToKKyAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAg
ICBpZiBvcHRpb25zLnBhcmFsbGVsX2xldmVsID4gMSBvciBvcHRpb25zLnBhcmFsbGVsX2xldmVs
IGlzIE5vbmU6CisgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICBmcm9tIG11bHRpcHJvY2Vz
c2luZyBpbXBvcnQgUG9vbAorICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAg
ICAgICAgd2FybigiSW1wb3J0IEVycm9yOiBtdWx0aXByb2Nlc3NpbmcgKGxhY2sgb2YgcHl0aG9u
LW11bHRpcHJvY2Vzc2luZyBwYWNrYWdlPykuIFRoZSBRdCBhdXRvdGVzdHMgd2lsbCBiZSBleGVj
dXRlZCBvbmUgYnkgb25lIikKKyAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbGxlbF9sZXZlbCA9
IDEKKyAgICAgIGlmIG9wdGlvbnMucGFyYWxsZWxfbGV2ZWwgPT0gMToKKyAgICAgICAgICBjbGFz
cyBQb29sKG9iamVjdCk6CisgICAgICAgICAgICAgICIiIkhhY2ssIGF2b2lkIHByb2JsZW1zIHdp
dGggbXVsdGlwcm9jZXNzaW5nIG1vZHVsZSwgdGhpcyBjbGFzcyBpcyBzaW5nbGUgdGhyZWFkIHJl
cGxhY2VtZW50CisgICAgICAgICAgICAgIGZvciBtdWx0aXByb2Nlc3NpbmcuUG9vbCBjbGFzcy4g
IlJlcGxhY2VtZW50IiBoZWhlaGUgIiIiCisgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwcm9jZXNzZXMpOgorICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICBkZWYg
aW1hcF91bm9yZGVyZWQoc2VsZiwgZnVuYywgZmlsZXMpOgorICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hcChmdW5jLCBmaWxlcykKKyAgICAgICAgICAgICAgZGVmIG1hcChzZWxmLCBmdW5jLCBm
aWxlcyk6CisgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwKGZ1bmMsIGZpbGVzKQorICAgICAg
c2VsZi5fUG9vbCA9IFBvb2wKKworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiRmlu
ZCAmJiBleGVjdXRlICYmIHB1Ymxpc2ggYWxsIHRlc3QuICJBbGwgaW4gb25lIiBmdW5jdGlvbiIi
IgorICAgICAgICBkZWJ1ZygiU2VhcmNoaW5nIGV4ZWN1dGFiZWxzLi4uIikKKyAgICAgICAgdGVz
dHNfZXhlY3V0YWJsZXMgPSBzZWxmLmZpbmRfdGVzdHNfcGF0aHMoc2VsZi5fb3B0aW9ucy5wYXRo
KQorICAgICAgICBkZWJ1ZygiRm91bmQ6ICIgKyBzdHIobGVuKHRlc3RzX2V4ZWN1dGFibGVzKSkp
CisgICAgICAgIGRlYnVnKCJFeGVjdXRpbmcgdGVzdHMuLi4iKQorICAgICAgICByZXN1bHRzID0g
c2VsZi5ydW5fdGVzdHModGVzdHNfZXhlY3V0YWJsZXMpCisgICAgICAgIGRlYnVnKCJUcmFuc2Zv
cm1pbmcuLi4iKQorICAgICAgICB0cmFuc2Zvcm1lZF9yZXN1bHRzID0gc2VsZi50cmFuc2Zvcm0o
cmVzdWx0cykKKyAgICAgICAgZGVidWcoIlB1Ymxpc2hpbmcuLi4iKQorICAgICAgICBzZWxmLmFu
bm91bmNlX3Jlc3VsdHModHJhbnNmb3JtZWRfcmVzdWx0cykKKworCisgICAgZGVmIGZpbmRfdGVz
dHNfcGF0aHMoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkZpbmQgYWxsIHRlc3RzIGZpbGVzIChl
eGVjdXRhYmxlcykgaW5zaWRlIGEgZ2l2ZW4gcGF0aCIiIgorICAgICAgICByZXN1bHQgPSBbXQor
ICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAg
ICAgICNjaGVjayBvbmx5IGZvciB0ZXN0cyBzdGFydGluZyBmcm9tIHRzdF8gYW5kIHRoYXQgd2Ug
Y2FuIGFjdHVhbGx5IGV4ZWN1dGUKKyAgICAgICAgICAgIGZpbHRlcmVkX3BhdGggPSBmaWx0ZXIo
bGFtYmRhIHc6IHcuc3RhcnRzd2l0aCgndHN0XycpIGFuZCBvcy5hY2Nlc3Mob3MucGF0aC5qb2lu
KHJvb3QsIHcpLCBvcy5YX09LKSwgZmlsZXMpCisgICAgICAgICAgICBmaWx0ZXJlZF9wYXRoID0g
bWFwKGxhbWJkYSB3OiBvcy5wYXRoLmpvaW4ocm9vdCwgdyksIGZpbHRlcmVkX3BhdGgpCisgICAg
ICAgICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbHRlcmVkX3BhdGg6CisgICAgICAgICAgICAgICAg
ciA9IFRlc3RTdWl0ZVJlc3VsdCgpCisgICAgICAgICAgICAgICAgci5zZXRfdGVzdF9maWxlX25h
bWUoZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocikKKyAgICAgICAg
cmV0dXJuIHJlc3VsdAorCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGZpbGVzKToKKyAgICAg
ICAgIiIiUnVuIGFsbCB0ZXN0cyBnaXZlbiBieSBwYXRoIHRvIGV4ZWN1dGFibGUgZmlsZXMgKGl0
ZXJhYmxlKSIiIgorICAgICAgICB3b3JrZXJzID0gc2VsZi5fUG9vbChwcm9jZXNzZXMgPSBzZWxm
Ll9vcHRpb25zLnBhcmFsbGVsX2xldmVsKQorICAgICAgICAjdG8gZWFjaCBmaWxlIGFkZCBvcHRp
b25zCisgICAgICAgIGRlYnVnKCJVc2luZyAlcyBzIHRoZSB3b3JrZXJzIHBvb2wiLCByZXByKHdv
cmtlcnMpKQorICAgICAgICBwYWNrYWdlID0gbWFwKGxhbWJkYSB3OiBbdywgc2VsZi5fb3B0aW9u
cy50ZXN0c19vcHRpb25zLCBdLCBmaWxlcykKKyAgICAgICAgZGVidWcoIlBhY2thZ2UgZm9yIHdv
cmtlcjogJXMiLCByZXByKHBhY2thZ2UpKQorICAgICAgICByZXN1bHRzID0gd29ya2Vycy5tYXAo
cnVuX3Rlc3QsIHBhY2thZ2UpICNjb2xsZWN0IHJlc3VsdHMKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dHMKKworCisgICAgZGVmIHRyYW5zZm9ybShzZWxmLCByZXN1bHRzKToKKyAgICAgICAgIiIiVHJh
bnNmb3JtIGxpc3Qgb2YgcmVzdWx0IHRvIG5pY2VyIHZlcnNpb24iIiIKKyAgICAgICAgc3Rkb3V0
ID0gc2VsZi5jb252ZXJ0X3RvX3N0ZG91dChyZXN1bHRzKQorICAgICAgICBodG1sID0gc2VsZi5j
b252ZXJ0X3RvX2h0bWwocmVzdWx0cykKKyAgICAgICAgcmV0dXJuIHsic3Rkb3V0Ijogc3Rkb3V0
LCAiaHRtbCI6IGh0bWx9CisKKworICAgIGRlZiBhbm5vdW5jZV9yZXN1bHRzKHNlbGYsIHJlc3Vs
dHMpOgorICAgICAgICAiIiJTaG93IHJlc3VsdCB0byBwdWJsaWMiIiIKKyAgICAgICAgc2VsZi5h
bm5vdW5jZV9yZXN1bHRzX3N0ZG91dChyZXN1bHRzWydzdGRvdXQnXSkKKyAgICAgICAgc2VsZi5h
bm5vdW5jZV9yZXN1bHRzX2h0bWwocmVzdWx0c1snaHRtbCddKQorCisKKyAgICBkZWYgYW5ub3Vu
Y2VfcmVzdWx0c19zdGRvdXQoc2VsZiwgcmVzdWx0cyk6CisgICAgICAgICIiIlNob3cgcmVzdWx0
IHRvIHB1YmxpYyAtIHJlc3VsdCdzIHNob3J0Y3V0IHNob3VsZCBiZSB3cml0dGVuIHRvIHN0ZG91
dCIiIgorICAgICAgICBwcmludChyZXN1bHRzKQorCisKKyAgICBkZWYgYW5ub3VuY2VfcmVzdWx0
c19odG1sKHNlbGYsIHJlc3VsdHMpOgorICAgICAgICAiIiJTaG93IHJlc3VsdCB0byBwdWJsaWMg
LSByZXN1bHQncyBodG1sIHZlcnNpb24gc2hvdWxkIGJlIHdyaXR0ZW4gdG8gZmlsZSIiIgorICAg
ICAgICB3aXRoIGZpbGUoc2VsZi5fb3B0aW9ucy5vdXRwdXRfZmlsZSwgJ3cnKSBhcyBmOgorICAg
ICAgICAgICAgZi53cml0ZShyZXN1bHRzKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm9wZW5f
cmVzdWx0czoKKyAgICAgICAgICAgIFBvcGVuKHNlbGYuX29wdGlvbnMuYnJvd3NlciArICIgIiAr
IHNlbGYuX29wdGlvbnMub3V0cHV0X2ZpbGUsIHN0ZG91dCA9IE5vbmUsIHN0ZGVyciA9IE5vbmUs
IHNoZWxsID0gVHJ1ZSkKKworCisgICAgZGVmIGNvbnZlcnRfdG9fc3Rkb3V0KHNlbGYsIHJlc3Vs
dHMpOgorICAgICAgICAjIGNvbm5lY3QgYWxsIHJlc3VsdHMgaW50byBvbmUgcGllY2UKKyAgICAg
ICAgdHh0ID0gIlxuXG4iLmpvaW4obWFwKGxhbWJkYSB3OiB3Lm91dHB1dCgpLCByZXN1bHRzKSkK
KyAgICAgICAgIyBmaW5kIHRvdGFsIGNvdW50IG9mIGZhaWxlZCBza2lwcGVkIGFuZCBwYXNzZWQK
KyAgICAgICAgdG90YWxzID0gcmUuZmluZGFsbChyIihbMC05XSspIHBhc3NlZCwgKFswLTldKykg
ZmFpbGVkLCAoWzAtOV0rKSBza2lwcGVkIiwgdHh0KQorICAgICAgICB0b3RhbHMgPSByZWR1Y2Uo
bGFtYmRhIHgsIHk6IChpbnQoeFswXSkgKyBpbnQoeVswXSksIGludCh4WzFdKSArIGludCh5WzFd
KSwgaW50KHhbMl0pICsgaW50KHlbMl0pKSwgdG90YWxzKQorICAgICAgICB0b3RhbHMgPSBzdHIo
dG90YWxzWzBdKSArICIgcGFzc2VkLCAiICsgc3RyKHRvdGFsc1sxXSkgKyAiIGZhaWxlZCwgIiAr
IHN0cih0b3RhbHNbMl0pICsgIiBza2lwcGVkIgorICAgICAgICB0eHQgKz0gJ1xuXG5cbicgKyAn
KicgKiA3MAorICAgICAgICB0eHQgKz0gIlxuKioiICsgKCJUT1RBTFM6ICIgKyB0b3RhbHMpLmNl
bnRlcig2NikgKycqKicKKyAgICAgICAgdHh0ICs9ICdcbicgKyAnKicgKiA3MCArICdcbicKKyAg
ICAgICAgcmV0dXJuIHR4dAorCisKKyAgICBkZWYgY29udmVydF90b19odG1sKHNlbGYsIHJlc3Vs
dHMpOgorICAgICAgICAjIGNvbm5lY3QgYWxsIHJlc3VsdHMgaW50byBvbmUgcGllY2UKKyAgICAg
ICAgdHh0ID0gIlxuXG4iLmpvaW4obWFwKGxhbWJkYSB3OiB3Lm91dHB1dCgpLCByZXN1bHRzKSkK
KyAgICAgICAgdHh0ID0gdHh0LnJlcGxhY2UoJyYnLCAnJmFtcDsnKS5yZXBsYWNlKCc8JywgIiZs
dDsiKS5yZXBsYWNlKCc+JywgIiZndDsiKQorICAgICAgICAjIHNtYWxsIHRyaWNrLCBhbGwgaW5k
ZW50ZWQgbGluZXMgYXJlIGNvbm5lY3RlZCB0byBwcmV2aW91cworICAgICAgICB0eHQgPSB0eHQu
cmVwbGFjZSgiXG4gICIsIiAgIikKKyAgICAgICAgIyBhZGQgY29sb3JzIGFuIHN0eWxlcworICAg
ICAgICB0eHQgPSByZS5zdWIociIoWyogXSsoRmluaXNoZWQpWyBhLXpfQS1aMC05XStbKl0rKSIs
IGxhbWJkYSB3OiByIiIsIHR4dCkKKyAgICAgICAgdHh0ID0gcmUuc3ViKHIiKFsqXStbIGEtel9B
LVowLTldK1sqXSspIiwgbGFtYmRhIHc6ICI8Y2FzZSBjbGFzcz0nZ29vZCc+PGJyPjxicj48Yj4i
ICsgdy5ncm91cCgwKSArIHIiPC9iPjwvY2FzZT4iLCB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1
YihyIlxuKENvbmZpZykoKC4pKykiLCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxi
cj48aT4iICsgdy5ncm91cCgwKSArIHIiPC9pPjwvY2FzZT4iLCB0eHQpCisgICAgICAgIHR4dCA9
IHJlLnN1YihyIlxuKFBBU1MpKCguKSspIiwgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdnb29k
Jz48YnI+PHN0YXR1cyBjbGFzcz0ncGFzcyc+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIg
KyB3Lmdyb3VwKDIpICsgciI8L2Nhc2U+IiwgdHh0KQorICAgICAgICB0eHQgPSByZS5zdWIociJc
bihGQUlMISkoKC4pKykiLCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2JhZCc+PGJyPjxzdGF0
dXMgY2xhc3M9J2ZhaWwnPiIgKyB3Lmdyb3VwKDEpICsgciI8L3N0YXR1cz4iICsgdy5ncm91cCgy
KSArIHIiPC9jYXNlPiIsIHR4dCkKKyAgICAgICAgdHh0ID0gcmUuc3ViKHIiXG4oWFBBU1MpKCgu
KSspIiwgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdiYWQnPjxicj48c3RhdHVzIGNsYXNzPSd4
cGFzcyc+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIpICsgciI8L2Nh
c2U+IiwgdHh0KQorICAgICAgICB0eHQgPSByZS5zdWIociJcbihYRkFJTCkoKC4pKykiLCBsYW1i
ZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxicj48c3RhdHVzIGNsYXNzPSd4ZmFpbCc+IiAr
IHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIpICsgciI8L2Nhc2U+IiwgdHh0
KQorICAgICAgICB0eHQgPSByZS5zdWIociJcbihTS0lQKSgoLikrKSIsIGxhbWJkYSB3OiAiXG48
Y2FzZSBjbGFzcz0nZ29vZCc+PGJyPjxzdGF0dXMgY2xhc3M9J3hmYWlsJz4iICsgdy5ncm91cCgx
KSArIHIiPC9zdGF0dXM+IiArIHcuZ3JvdXAoMikgKyByIjwvY2FzZT4iLCB0eHQpCisgICAgICAg
IHR4dCA9IHJlLnN1YihyIlxuKFFXQVJOKSgoLikrKSIsIGxhbWJkYSB3OiAiXG48Y2FzZSBjbGFz
cz0nYmFkJz48YnI+PHN0YXR1cyBjbGFzcz0nd2Fybic+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3Rh
dHVzPiIgKyB3Lmdyb3VwKDIpICsgciI8L2Nhc2U+IiwgdHh0KQorICAgICAgICB0eHQgPSByZS5z
dWIociJcbihSRVNVTFQpKCguKSspIiwgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdnb29kJz48
YnI+PHN0YXR1cyBjbGFzcz0nYmVuY2htYXJrJz4iICsgdy5ncm91cCgxKSArIHIiPC9zdGF0dXM+
IiArIHcuZ3JvdXAoMikgKyByIjwvY2FzZT4iLCB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1Yihy
IlxuKFFGQVRBTCkoKC4pKykiLCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2JhZCc+PGJyPjxz
dGF0dXMgY2xhc3M9J2NyYXNoJz4iICsgdy5ncm91cCgxKSArIHIiPC9zdGF0dXM+IiArIHcuZ3Jv
dXAoMikgKyByIjwvY2FzZT4iLCB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1YihyIlxuKFRvdGFs
czopKFswLTknLCBhLXpdKikiLCBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxicj48
Yj4iICsgdy5ncm91cCgxKSArIHIiPC9iPiIgKyB3Lmdyb3VwKDIpICsgIjwvY2FzZT4iICwgdHh0
KQorICAgICAgICAjIGZpbmQgdG90YWwgY291bnQgb2YgZmFpbGVkIHNraXBwZWQgYW5kIHBhc3Nl
ZAorICAgICAgICB0b3RhbHMgPSByZS5maW5kYWxsKHIiKFswLTldKykgcGFzc2VkLCAoWzAtOV0r
KSBmYWlsZWQsIChbMC05XSspIHNraXBwZWQiLCB0eHQpCisgICAgICAgIHRvdGFscyA9IHJlZHVj
ZShsYW1iZGEgeCwgeTogKGludCh4WzBdKSArIGludCh5WzBdKSwgaW50KHhbMV0pICsgaW50KHlb
MV0pLCBpbnQoeFsyXSkgKyBpbnQoeVsyXSkpLCB0b3RhbHMpCisgICAgICAgIHRvdGFscyA9IHN0
cih0b3RhbHNbMF0pICsgIiBwYXNzZWQsICIgKyBzdHIodG90YWxzWzFdKSArICIgZmFpbGVkLCAi
ICsgc3RyKHRvdGFsc1syXSkgKyAiIHNraXBwZWQiCisgICAgICAgICMgYWRkIGhlYWRlcgorICAg
ICAgICB0eHQgPSAiIiI8aHRtbD48aGVhZD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPiBjYXNlLmdv
b2Qge2NvbG9yOmJsYWNrfSBjYXNlLmJhZCB7Y29sb3I6YmxhY2t9IHN0YXR1cy5wYXNzIHtjb2xv
cjpncmVlbn0gc3RhdHVzLmNyYXNoIHtjb2xvcjpyZWR9IHN0YXR1cy5mYWlsIHtjb2xvcjpyZWR9
IHN0YXR1cy54cGFzcyB7Y29sb3I6NjYzMzAwfSBzdGF0dXMueGZhaWwge2NvbG9yOjAwNDUwMH0g
c3RhdHVzLmJlbmNobWFyayB7Y29sb3I6MDAwMDg4fSBzdGF0dXMud2FybiB7Y29sb3I6b3Jhbmdl
fSBzdGF0dXMuY3Jhc2h7Y29sb3I6cmVkOyB0ZXh0LWRlY29yYXRpb246Ymxpbms7IGJhY2tncm91
bmQtY29sb3I6YmxhY2s7fSAgICA8L3N0eWxlPjwvaGVhZD48Ym9keT48Y2VudGVyPjxoMT5RdCdz
IGF1dG90ZXN0cyByZXN1bHRzPC9oMT4iIiIgKyB0b3RhbHMgKyAiIiI8YnI+PGhyPjxmb3JtPjxp
bnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJIaWRlIGdvb2QiIG9uY2xpY2s9ImRvY3VtZW50LnN0
eWxlU2hlZXRzWzBdLmNzc1J1bGVzWzBdLnN0eWxlLmRpc3BsYXk9J25vbmUnIi8+Jm5ic3A8aW5w
dXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU2hvdyBhbGwiIG9uY2xpY2s9ImRvY3VtZW50LnN0eWxl
U2hlZXRzWzBdLmNzc1J1bGVzWzBdLnN0eWxlLmRpc3BsYXk9JyciLz48L2Zvcm0+PC9jZW50ZXI+
PGhyPiIiIiArIHR4dCArICIiIjwvYm9keT48L2h0bWw+IiIiCisgICAgICAgIHJldHVybiB0eHQK
KwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9xdHRlc3Qvb3B0aW9u
cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcXR0ZXN0L29wdGlvbnMucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0MmJjMwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcXR0ZXN0L29wdGlvbnMucHkKQEAgLTAs
MCArMSw4MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0q
LQorCisjQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisjVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorI21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorI0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisjWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorI2Fsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyNCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworCitmcm9tIG9wdHBhcnNlIGltcG9y
dCBPcHRpb25QYXJzZXIKKworaW1wb3J0IGxvZ2dpbmcKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCJxdHRlc3Rtb2R1bGUuT3B0aW9ucyIpCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCisK
KworY2xhc3MgT3B0aW9ucygpOgorICAgICIiIk9wdGlvbiBtYW5hZ2VyLiBJdCBwYXJzZSBhbmQg
Y2hlY2sgYWxsIHBhcmFtdGVyZXMsIHNldCBpbnRlcm5hbCB2YXJpYWJsZXMuIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgYXJncyk6CisgICAgICAgIG9wdCA9IE9wdGlvblBhcnNlcigiJXBy
b2cgW29wdGlvbnNdIFBhdGhUb1NlYXJjaC5cblRyeSAtaCBvciAtLWhlbHAuIikKKyAgICAgICAg
b3B0LmFkZF9vcHRpb24oIi1qIiwgIi0tcGFyYWxsZWwtbGV2ZWwiLCBhY3Rpb24gPSAic3RvcmUi
LCB0eXBlID0gImludCIsCisgICAgICAgICAgICAgIGRlc3QgPSAicGFyYWxsZWxfbGV2ZWwiLCBk
ZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgIGhlbHAgPSAiTnVtYmVyIG9mIHBhcmFsbGVsIHBy
b2Nlc3NlcyBleGVjdXRpbmcgdGhlIFF0J3MgdGVzdHMuIERlZmF1bHQ6IGNwdSBjb3VudC4iKQor
ICAgICAgICBvcHQuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uID0gInN0b3Jl
IiwgdHlwZSA9ICJpbnQiLAorICAgICAgICAgICAgICBkZXN0ID0gInZlcmJvc2UiLCBkZWZhdWx0
ID0gMiwKKyAgICAgICAgICAgICAgaGVscCA9ICJWZXJib3NlIGxldmVsICgwIC0gcXVpZXQsIDEg
LSBlcnJvcnMgb25seSwgMiAtIGluZm9zIGFuZCB3YXJuaW5ncywgMyAtIGRlYnVnIGluZm9ybWF0
aW9uKS4gRGVmYXVsdDogJWRlZmF1bHQuIikKKyAgICAgICAgb3B0LmFkZF9vcHRpb24oIiIsICIt
LXRlc3RzLW9wdGlvbnMiLCBhY3Rpb24gPSAic3RvcmUiLCB0eXBlID0gInN0cmluZyIsCisgICAg
ICAgICAgICAgIGRlc3QgPSAidGVzdHNfb3B0aW9ucyIsIGRlZmF1bHQgPSAiIiwKKyAgICAgICAg
ICAgICAgaGVscCA9ICJQYXJhbWV0ZXJzIHBhc3NlZCB0byBRdCdzIHRlc3RzIChmb3IgZXhhbXBs
ZSAnLWV2ZW50ZGVsYXkgMTIzJykuIikKKyAgICAgICAgb3B0LmFkZF9vcHRpb24oIi1vIiwgIi0t
b3V0cHV0LWZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLCB0eXBlID0gInN0cmluZyIsCisgICAgICAg
ICAgICAgIGRlc3QgPSAib3V0cHV0X2ZpbGUiLCBkZWZhdWx0ID0gIi90bXAvcXR3ZWJraXR0ZXN0
cy5odG1sIiwKKyAgICAgICAgICAgICAgaGVscCA9ICJGaWxlIHdoZXJlIHJlc3VsdHMgd2lsbCBi
ZSBzdG9yZWQuIFRoZSBmaWxlIHdpbGwgYmUgb3ZlcndyaXRlZC4gRGVmYXVsdDogJWRlZmF1bHQu
IikKKyAgICAgICAgb3B0LmFkZF9vcHRpb24oIi1iIiwgIi0tYnJvd3NlciIsIGFjdGlvbiA9ICJz
dG9yZSIsIGRlc3QgPSAiYnJvd3NlciIsCisgICAgICAgICAgICAgIGRlZmF1bHQgPSAieGRnLW9w
ZW4iLAorICAgICAgICAgICAgICBoZWxwID0gIkJyb3dzZXIgaW4gd2hpY2ggcmVzdWx0cyB3aWxs
IGJlIG9wZW5lZC4gRGVmYXVsdCAlZGVmYXVsdC4iKQorICAgICAgICBvcHQuYWRkX29wdGlvbigi
IiwgIi0tZG8tbm90LW9wZW4tcmVzdWx0cyIsIGFjdGlvbiA9ICJzdG9yZV9mYWxzZSIsCisgICAg
ICAgICAgICAgIGRlc3QgPSAib3Blbl9yZXN1bHRzIiwgZGVmYXVsdCA9IFRydWUsCisgICAgICAg
ICAgICAgIGhlbHAgPSAiVGhlIHJlc3VsdHMgc2hvdWxkbid0IHBvcC11cCBpbiBhIGJyb3dzZXIg
YXV0b21hdGljYWx5IikKKyAgICAgICAgc2VsZi5fbywgc2VsZi5fYSA9IG9wdC5wYXJzZV9hcmdz
KGFyZ3MpCisgICAgICAgIHZlcmJvc2UgPSBzZWxmLl9vLnZlcmJvc2UKKyAgICAgICAgaWYgdmVy
Ym9zZSA9PSAwOgorICAgICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5n
LkNSSVRJQ0FMLCkKKyAgICAgICAgZWxpZiB2ZXJib3NlID09IDE6CisgICAgICAgICAgICBsb2dn
aW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuRVJST1IsKQorICAgICAgICBlbGlmIHZlcmJv
c2UgPT0gMjoKKyAgICAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5J
TkZPLCkKKyAgICAgICAgZWxpZiB2ZXJib3NlID09IDM6CisgICAgICAgICAgICBsb2dnaW5nLmJh
c2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcsKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLklORk8sKQorICAgICAgICAgICAg
bG9nLndhcm4oIkJhZCB2ZXJib3NlIGxldmVsLCBzd2l0Y2hpbmcgdG8gMiIpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLl9hWzBdKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBhdGggZG9lc24ndCBleGlzdCIpCisgICAgICAg
ICAgICBpZiBsZW4oc2VsZi5fYSk+MToKKyAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9y
KCJPbmx5IG9uZSBkaXJlY3RvcnkiKQorICAgICAgICAgICAgc2VsZi5fby5wYXRoID0gc2VsZi5f
YVswXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIGxvZy5lcnJvcigi
QmFkIHVzYWdlLiBQbGVhc2UgdHJ5IC1oIG9yIC0taGVscCIpCisgICAgICAgICAgICBzeXMuZXhp
dCgxKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nLmVycm9yKCJQ
YXRoICciICsgc2VsZi5fYVswXSArICInIGRvZXNuJ3QgZXhpc3QiKQorICAgICAgICAgICAgc3lz
LmV4aXQoMikKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgIiIi
bWFwIGFsbCBvcHRpb25zIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdCAocmVtb3ZlIG9uZSBs
ZXZlbCBvZiBpbmRpcmVjdGlvbikiIiIKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fbywg
YXR0cikKKwo=
</data>
<flag name="review"
          id="31642"
          type_id="1"
          status="-"
          setter="vestbo"
    />
    <flag name="commit-queue"
          id="31643"
          type_id="3"
          status="-"
          setter="vestbo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49014</attachid>
            <date>2010-02-18 08:06:49 -0800</date>
            <delta_ts>2010-06-24 05:44:43 -0700</delta_ts>
            <desc>script v3</desc>
            <filename>qttestsV3.diff</filename>
            <type>text/plain</type>
            <size>14801</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjMjYwOWE3Li43MzJkNGZlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDIt
MTggIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIHRvIHRo
ZSBRdCBhdXRvdGVzdCBsYXVuY2hlci4KKworICAgICAgICBRdCBhdXRvdGVzdHMgc2hvdWxkIGJl
IGV4ZWN1dGVkIG1vcmUgZnJlcXVlbnRseSwgaWRlYWxseSBieSBidWlsZCBib3QuCisgICAgICAg
IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8gcHJvdmlkZSB0aGUgdGVzdHMgbW9yZSBhY2Nlc3Np
YmxlLgorCisgICAgICAgIFtRdF0gSXQgc2hvdWxkIGJlIGVhc2llciB0byBydW4gYWxsIFF0J3Mg
YXV0b3Rlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE2MjUKKworICAgICAgICAqIFNjcmlwdHMvdGVzdC1xdHdlYmtpdC5weTogQWRkZWQuCisK
IDIwMTAtMDItMTAgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3Rlc3QtcXR3ZWJraXQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3Rlc3QtcXR3ZWJraXQu
cHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYThhOTE0MwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC1xdHdlYmtpdC5weQpAQCAtMCwwICsx
LDMyNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQor
CisjQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisjVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorI21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorI0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisjWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorI2Fsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyNCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3
aXRoX3N0YXRlbWVudAorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitp
bXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQ
SVBFCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gaXRlcnRvb2xzIGlt
cG9ydCBpbWFwCitmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CisKKworY2xhc3MgTG9nKG9iamVj
dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihuYW1lKQorICAgICAgICBzZWxmLmRlYnVnID0gc2VsZi5fbG9nLmRl
YnVnCisgICAgICAgIHNlbGYud2FybiA9IHNlbGYuX2xvZy53YXJuCisgICAgICAgIHNlbGYuZXJy
b3IgPSBzZWxmLl9sb2cuZXJyb3IKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBzZWxmLl9sb2cu
ZXhjZXB0aW9uCisgICAgICAgIHNlbGYuaW5mbyA9IHNlbGYuX2xvZy5pbmZvCisKKworY2xhc3Mg
T3B0aW9ucyhMb2cpOgorICAgICIiIk9wdGlvbiBtYW5hZ2VyLiBJdCBwYXJzZSBhbmQgY2hlY2sg
YWxsIHBhcmFtdGVyZXMsIHNldCBpbnRlcm5hbCB2YXJpYWJsZXMuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYXJncyk6CisgICAgICAgIExvZy5fX2luaXRfXyhzZWxmLCAiT3B0aW9ucyIp
CisgICAgICAgIGxvZyA9IHNlbGYuX2xvZworICAgICAgICBvcHQgPSBPcHRpb25QYXJzZXIoIiVw
cm9nIFtvcHRpb25zXSBQYXRoVG9TZWFyY2guXG5UcnkgLWggb3IgLS1oZWxwLiIpCisgICAgICAg
IG9wdC5hZGRfb3B0aW9uKCItaiIsICItLXBhcmFsbGVsLWxldmVsIiwgYWN0aW9uID0gInN0b3Jl
IiwgdHlwZSA9ICJpbnQiLAorICAgICAgICAgICAgICBkZXN0ID0gInBhcmFsbGVsX2xldmVsIiwg
ZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICBoZWxwID0gIk51bWJlciBvZiBwYXJhbGxlbCBw
cm9jZXNzZXMgZXhlY3V0aW5nIHRoZSBRdCdzIHRlc3RzLiBEZWZhdWx0OiBjcHUgY291bnQuIikK
KyAgICAgICAgb3B0LmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbiA9ICJzdG9y
ZSIsIHR5cGUgPSAiaW50IiwKKyAgICAgICAgICAgICAgZGVzdCA9ICJ2ZXJib3NlIiwgZGVmYXVs
dCA9IDIsCisgICAgICAgICAgICAgIGhlbHAgPSAiVmVyYm9zZSBsZXZlbCAoMCAtIHF1aWV0LCAx
IC0gZXJyb3JzIG9ubHksIDIgLSBpbmZvcyBhbmQgd2FybmluZ3MsIDMgLSBkZWJ1ZyBpbmZvcm1h
dGlvbikuIERlZmF1bHQ6ICVkZWZhdWx0LiIpCisgICAgICAgIG9wdC5hZGRfb3B0aW9uKCIiLCAi
LS10ZXN0cy1vcHRpb25zIiwgYWN0aW9uID0gInN0b3JlIiwgdHlwZSA9ICJzdHJpbmciLAorICAg
ICAgICAgICAgICBkZXN0ID0gInRlc3RzX29wdGlvbnMiLCBkZWZhdWx0ID0gIiIsCisgICAgICAg
ICAgICAgIGhlbHAgPSAiUGFyYW1ldGVycyBwYXNzZWQgdG8gUXQncyB0ZXN0cyAoZm9yIGV4YW1w
bGUgJy1ldmVudGRlbGF5IDEyMycpLiIpCisgICAgICAgIG9wdC5hZGRfb3B0aW9uKCItbyIsICIt
LW91dHB1dC1maWxlIiwgYWN0aW9uID0gInN0b3JlIiwgdHlwZSA9ICJzdHJpbmciLAorICAgICAg
ICAgICAgICBkZXN0ID0gIm91dHB1dF9maWxlIiwgZGVmYXVsdCA9ICIvdG1wL3F0d2Via2l0dGVz
dHMuaHRtbCIsCisgICAgICAgICAgICAgIGhlbHAgPSAiRmlsZSB3aGVyZSByZXN1bHRzIHdpbGwg
YmUgc3RvcmVkLiBUaGUgZmlsZSB3aWxsIGJlIG92ZXJ3cml0ZWQuIERlZmF1bHQ6ICVkZWZhdWx0
LiIpCisgICAgICAgIG9wdC5hZGRfb3B0aW9uKCItYiIsICItLWJyb3dzZXIiLCBhY3Rpb24gPSAi
c3RvcmUiLCBkZXN0ID0gImJyb3dzZXIiLAorICAgICAgICAgICAgICBkZWZhdWx0ID0gInhkZy1v
cGVuIiwKKyAgICAgICAgICAgICAgaGVscCA9ICJCcm93c2VyIGluIHdoaWNoIHJlc3VsdHMgd2ls
bCBiZSBvcGVuZWQuIERlZmF1bHQgJWRlZmF1bHQuIikKKyAgICAgICAgb3B0LmFkZF9vcHRpb24o
IiIsICItLWRvLW5vdC1vcGVuLXJlc3VsdHMiLCBhY3Rpb24gPSAic3RvcmVfZmFsc2UiLAorICAg
ICAgICAgICAgICBkZXN0ID0gIm9wZW5fcmVzdWx0cyIsIGRlZmF1bHQgPSBUcnVlLAorICAgICAg
ICAgICAgICBoZWxwID0gIlRoZSByZXN1bHRzIHNob3VsZG4ndCBwb3AtdXAgaW4gYSBicm93c2Vy
IGF1dG9tYXRpY2FseSIpCisgICAgICAgIHNlbGYuX28sIHNlbGYuX2EgPSBvcHQucGFyc2VfYXJn
cyhhcmdzKQorICAgICAgICB2ZXJib3NlID0gc2VsZi5fby52ZXJib3NlCisgICAgICAgIGlmIHZl
cmJvc2UgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2lu
Zy5DUklUSUNBTCwpCisgICAgICAgIGVsaWYgdmVyYm9zZSA9PSAxOgorICAgICAgICAgICAgbG9n
Z2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkVSUk9SLCkKKyAgICAgICAgZWxpZiB2ZXJi
b3NlID09IDI6CisgICAgICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcu
SU5GTywpCisgICAgICAgIGVsaWYgdmVyYm9zZSA9PSAzOgorICAgICAgICAgICAgbG9nZ2luZy5i
YXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkRFQlVHLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLCkKKyAgICAgICAgICAg
IGxvZy53YXJuKCJCYWQgdmVyYm9zZSBsZXZlbCwgc3dpdGNoaW5nIHRvIDIiKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5fYVswXSk6CisgICAg
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJQYXRoIGRvZXNuJ3QgZXhpc3QiKQorICAgICAg
ICAgICAgaWYgbGVuKHNlbGYuX2EpPjE6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJv
cigiT25seSBvbmUgZGlyZWN0b3J5IikKKyAgICAgICAgICAgIHNlbGYuX28ucGF0aCA9IHNlbGYu
X2FbMF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBsb2cuZXJyb3Io
IkJhZCB1c2FnZS4gUGxlYXNlIHRyeSAtaCBvciAtLWhlbHAiKQorICAgICAgICAgICAgc3lzLmV4
aXQoMSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZy5lcnJvcigi
UGF0aCAnJXMnIGRvZXNuJ3QgZXhpc3QiLCBzZWxmLl9hWzBdKQorICAgICAgICAgICAgc3lzLmV4
aXQoMikKKworCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAiIiJt
YXAgYWxsIG9wdGlvbnMgcHJvcGVydGllcyBpbnRvIHRoaXMgb2JqZWN0IChyZW1vdmUgb25lIGxl
dmVsIG9mIGluZGlyZWN0aW9uKSIiIgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9vLCBh
dHRyKQorCisKK2RlZiBydW5fdGVzdChhcmdzKToKKyAgICAiIiJSdW4gb25lIGdpdmVuIHRlc3Qi
IiIKKyAgICB0ZXN0X3N1aXRlLCBvcHRpb25zID0gYXJncworICAgIGxvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCJFeGVjIikKKyAgICB0cnk6CisgICAgICAgIGxvZy5pbmZvKCJSdW5uaW5nLi4uICVz
IiwgdGVzdF9zdWl0ZS50ZXN0X2ZpbGVfbmFtZSgpKQorICAgICAgICB0c3QgPSBQb3Blbih0ZXN0
X3N1aXRlLnRlc3RfZmlsZV9uYW1lKCkgKyBvcHRpb25zLCBzdGRvdXQgPSBQSVBFLCBzdGRlcnIg
PSBOb25lLCBzaGVsbCA9IFRydWUpCisgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgIGxv
Zy5leGNlcHRpb24oIkNhbid0IG9wZW4gZmlsZTogJyVzJy4gU2tpcHBpbmcuLi4iLCBlLmZpbGVu
YW1lKQorICAgIGVsc2U6CisgICAgICAgIHRlc3Rfc3VpdGUuc2V0X291dHB1dCh0c3QuY29tbXVu
aWNhdGUoKVswXSkgIyB0YWtlcyBzdGRvdXQgb25seS4KKyAgICBsb2cuaW5mbygiRmluaXNoZWQg
JXMiLCB0ZXN0X3N1aXRlLnRlc3RfZmlsZV9uYW1lKCkpCisgICAgcmV0dXJuIHRlc3Rfc3VpdGUK
KworCitjbGFzcyBUZXN0U3VpdGVSZXN1bHQob2JqZWN0KToKKyAgICAiIiJJbmZvcm1hdGlvbiBh
Ym91dCB0ZXN0IC0gYWdyZWdhdG9yIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg
ICAgIHNlbGYuX291dHB1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlX25hbWUgPSBO
b25lCisKKyAgICBkZWYgc2V0X291dHB1dChzZWxmLCB4bWwpOgorICAgICAgICBzZWxmLl9vdXRw
dXQgPSB4bWwuc3RyaXAoKQorCisgICAgZGVmIG91dHB1dChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX291dHB1dAorCisgICAgZGVmIHNldF90ZXN0X2ZpbGVfbmFtZShzZWxmLCBmaWxlX25h
bWUpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVfbmFtZSA9IGZpbGVfbmFtZQorCisgICAgZGVm
IHRlc3RfZmlsZV9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9maWxlX25h
bWUKKworCitjbGFzcyBNYWluKExvZyk6CisgICAgIiIiTWFpbiBzY3JpcHQuIEFsbCB3b3JrIGlz
IGRvbmUgaW4gcnVuKCkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6Cisg
ICAgICBMb2cuX19pbml0X18oc2VsZiwgIk1haW4iKQorICAgICAgc2VsZi5fb3B0aW9ucyA9IG9w
dGlvbnMKKyAgICAgIGlmIG9wdGlvbnMucGFyYWxsZWxfbGV2ZWwgPiAxIG9yIG9wdGlvbnMucGFy
YWxsZWxfbGV2ZWwgaXMgTm9uZToKKyAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgIGZyb20g
bXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9y
OgorICAgICAgICAgICAgICBzZWxmLndhcm4oIkltcG9ydCBFcnJvcjogbXVsdGlwcm9jZXNzaW5n
IChsYWNrIG9mIHB5dGhvbi1tdWx0aXByb2Nlc3NpbmcgcGFja2FnZT8pLiBUaGUgUXQgYXV0b3Rl
c3RzIHdpbGwgYmUgZXhlY3V0ZWQgb25lIGJ5IG9uZSIpCisgICAgICAgICAgICAgIG9wdGlvbnMu
cGFyYWxsZWxfbGV2ZWwgPSAxCisgICAgICBpZiBvcHRpb25zLnBhcmFsbGVsX2xldmVsID09IDE6
CisgICAgICAgICAgY2xhc3MgUG9vbChvYmplY3QpOgorICAgICAgICAgICAgICAiIiJIYWNrLCBh
dm9pZCBwcm9ibGVtcyB3aXRoIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUsIHRoaXMgY2xhc3MgaXMg
c2luZ2xlIHRocmVhZCByZXBsYWNlbWVudAorICAgICAgICAgICAgICBmb3IgbXVsdGlwcm9jZXNz
aW5nLlBvb2wgY2xhc3MuIiIiCisgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9j
ZXNzZXMpOgorICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICBkZWYgaW1hcF91
bm9yZGVyZWQoc2VsZiwgZnVuYywgZmlsZXMpOgorICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
cChmdW5jLCBmaWxlcykKKyAgICAgICAgICAgICAgZGVmIG1hcChzZWxmLCBmdW5jLCBmaWxlcyk6
CisgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwKGZ1bmMsIGZpbGVzKQorICAgICAgc2VsZi5f
UG9vbCA9IFBvb2wKKworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiRmluZCAmJiBl
eGVjdXRlICYmIHB1Ymxpc2ggYWxsIHRlc3QuICJBbGwgaW4gb25lIiBmdW5jdGlvbi4iIiIKKyAg
ICAgICAgc2VsZi5kZWJ1ZygiU2VhcmNoaW5nIGV4ZWN1dGFiZWxzLi4uIikKKyAgICAgICAgdGVz
dHNfZXhlY3V0YWJsZXMgPSBzZWxmLmZpbmRfdGVzdHNfcGF0aHMoc2VsZi5fb3B0aW9ucy5wYXRo
KQorICAgICAgICBzZWxmLmRlYnVnKCJGb3VuZDogJXMiLCBsZW4odGVzdHNfZXhlY3V0YWJsZXMp
KQorICAgICAgICBzZWxmLmRlYnVnKCJFeGVjdXRpbmcgdGVzdHMuLi4iKQorICAgICAgICByZXN1
bHRzID0gc2VsZi5ydW5fdGVzdHModGVzdHNfZXhlY3V0YWJsZXMpCisgICAgICAgIHNlbGYuZGVi
dWcoIlRyYW5zZm9ybWluZy4uLiIpCisgICAgICAgIHRyYW5zZm9ybWVkX3Jlc3VsdHMgPSBzZWxm
LnRyYW5zZm9ybShyZXN1bHRzKQorICAgICAgICBzZWxmLmRlYnVnKCJQdWJsaXNoaW5nLi4uIikK
KyAgICAgICAgc2VsZi5hbm5vdW5jZV9yZXN1bHRzKHRyYW5zZm9ybWVkX3Jlc3VsdHMpCisKKwor
ICAgIGRlZiBmaW5kX3Rlc3RzX3BhdGhzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJGaW5kIGFs
bCB0ZXN0cyBmaWxlcyAoZXhlY3V0YWJsZXMpIGluc2lkZSBhIGdpdmVuIHBhdGguIiIiCisgICAg
ICAgIGV4ZWN1dGFibGVzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9z
LndhbGsocGF0aCk6CisgICAgICAgICAgICAjIGNoZWNrIG9ubHkgZm9yIHRlc3RzIHN0YXJ0aW5n
IGZyb20gdHN0XyBhbmQgdGhhdCB3ZSBjYW4gYWN0dWFsbHkgZXhlY3V0ZS4KKyAgICAgICAgICAg
IGZpbHRlcmVkX3BhdGggPSBmaWx0ZXIobGFtYmRhIHc6IHcuc3RhcnRzd2l0aCgndHN0XycpIGFu
ZCBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHJvb3QsIHcpLCBvcy5YX09LKSwgZmlsZXMpCisgICAg
ICAgICAgICBmaWx0ZXJlZF9wYXRoID0gbWFwKGxhbWJkYSB3OiBvcy5wYXRoLmpvaW4ocm9vdCwg
dyksIGZpbHRlcmVkX3BhdGgpCisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbHRlcmVk
X3BhdGg6CisgICAgICAgICAgICAgICAgciA9IFRlc3RTdWl0ZVJlc3VsdCgpCisgICAgICAgICAg
ICAgICAgci5zZXRfdGVzdF9maWxlX25hbWUoZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGVzLmFwcGVuZChyKQorICAgICAgICByZXR1cm4gZXhlY3V0YWJsZXMKKworCisgICAg
ZGVmIHJ1bl90ZXN0cyhzZWxmLCBmaWxlcyk6CisgICAgICAgICIiIlJ1biBhbGwgdGVzdHMgZ2l2
ZW4gYnkgcGF0aCB0byBleGVjdXRhYmxlIGZpbGVzIChpdGVyYWJsZSkuIiIiCisgICAgICAgIHdv
cmtlcnMgPSBzZWxmLl9Qb29sKHByb2Nlc3NlcyA9IHNlbGYuX29wdGlvbnMucGFyYWxsZWxfbGV2
ZWwpCisgICAgICAgICMgdG8gZWFjaCBmaWxlIGFkZCBvcHRpb25zLgorICAgICAgICBzZWxmLmRl
YnVnKCJVc2luZyAlcyBzIHRoZSB3b3JrZXJzIHBvb2wiLCByZXByKHdvcmtlcnMpKQorICAgICAg
ICBwYWNrYWdlID0gbWFwKGxhbWJkYSB3OiBbdywgc2VsZi5fb3B0aW9ucy50ZXN0c19vcHRpb25z
LCBdLCBmaWxlcykKKyAgICAgICAgc2VsZi5kZWJ1ZygiUGFja2FnZSBmb3Igd29ya2VyOiAlcyIs
IHJlcHIocGFja2FnZSkpCisgICAgICAgIHJlc3VsdHMgPSB3b3JrZXJzLm1hcChydW5fdGVzdCwg
cGFja2FnZSkgI2NvbGxlY3QgcmVzdWx0cy4KKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworCisg
ICAgZGVmIHRyYW5zZm9ybShzZWxmLCByZXN1bHRzKToKKyAgICAgICAgIiIiVHJhbnNmb3JtIGxp
c3Qgb2YgcmVzdWx0IHRvIG5pY2VyIHZlcnNpb24uIiIiCisgICAgICAgIHN0ZG91dCA9IHNlbGYu
Y29udmVydF90b19zdGRvdXQocmVzdWx0cykKKyAgICAgICAgaHRtbCA9IHNlbGYuY29udmVydF90
b19odG1sKHJlc3VsdHMpCisgICAgICAgIHJldHVybiB7InN0ZG91dCI6IHN0ZG91dCwgImh0bWwi
OiBodG1sfQorCisKKyAgICBkZWYgYW5ub3VuY2VfcmVzdWx0cyhzZWxmLCByZXN1bHRzKToKKyAg
ICAgICAgIiIiU2hvdyByZXN1bHQgdG8gcHVibGljLiIiIgorICAgICAgICBzZWxmLmFubm91bmNl
X3Jlc3VsdHNfc3Rkb3V0KHJlc3VsdHNbJ3N0ZG91dCddKQorICAgICAgICBzZWxmLmFubm91bmNl
X3Jlc3VsdHNfaHRtbChyZXN1bHRzWydodG1sJ10pCisKKworICAgIGRlZiBhbm5vdW5jZV9yZXN1
bHRzX3N0ZG91dChzZWxmLCByZXN1bHRzKToKKyAgICAgICAgIiIiU2hvdyByZXN1bHQgdG8gcHVi
bGljIC0gcmVzdWx0J3Mgc2hvcnRjdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0LiIiIgor
ICAgICAgICBwcmludChyZXN1bHRzKQorCisKKyAgICBkZWYgYW5ub3VuY2VfcmVzdWx0c19odG1s
KHNlbGYsIHJlc3VsdHMpOgorICAgICAgICAiIiJTaG93IHJlc3VsdCB0byBwdWJsaWMgLSByZXN1
bHQncyBodG1sIHZlcnNpb24gc2hvdWxkIGJlIHdyaXR0ZW4gdG8gZmlsZS4iIiIKKyAgICAgICAg
d2l0aCBmaWxlKHNlbGYuX29wdGlvbnMub3V0cHV0X2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAg
ICAgIGYud3JpdGUocmVzdWx0cykKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5vcGVuX3Jlc3Vs
dHM6CisgICAgICAgICAgICBQb3BlbihzZWxmLl9vcHRpb25zLmJyb3dzZXIgKyAiICIgKyBzZWxm
Ll9vcHRpb25zLm91dHB1dF9maWxlLCBzdGRvdXQgPSBOb25lLCBzdGRlcnIgPSBOb25lLCBzaGVs
bCA9IFRydWUpCisKKworICAgIGRlZiBjb252ZXJ0X3RvX3N0ZG91dChzZWxmLCByZXN1bHRzKToK
KyAgICAgICAgIyBjb25uZWN0IGFsbCByZXN1bHRzIGludG8gb25lIHBpZWNlLgorICAgICAgICB0
eHQgPSAiXG5cbiIuam9pbihtYXAobGFtYmRhIHc6IHcub3V0cHV0KCksIHJlc3VsdHMpKQorICAg
ICAgICAjIGZpbmQgdG90YWwgY291bnQgb2YgZmFpbGVkIHNraXBwZWQgYW5kIHBhc3NlZC4KKyAg
ICAgICAgdG90YWxzID0gcmUuZmluZGFsbChyIihbMC05XSspIHBhc3NlZCwgKFswLTldKykgZmFp
bGVkLCAoWzAtOV0rKSBza2lwcGVkIiwgdHh0KQorICAgICAgICB0b3RhbHMgPSByZWR1Y2UobGFt
YmRhIHgsIHk6IChpbnQoeFswXSkgKyBpbnQoeVswXSksIGludCh4WzFdKSArIGludCh5WzFdKSwg
aW50KHhbMl0pICsgaW50KHlbMl0pKSwgdG90YWxzKQorICAgICAgICB0b3RhbHMgPSBtYXAoc3Ry
LCB0b3RhbHMpCisgICAgICAgIHRvdGFscyA9IHRvdGFsc1swXSArICIgcGFzc2VkLCAiICsgdG90
YWxzWzFdICsgIiBmYWlsZWQsICIgKyB0b3RhbHNbMl0gKyAiIHNraXBwZWQiCisgICAgICAgIHR4
dCArPSAnXG5cblxuJyArICcqJyAqIDcwCisgICAgICAgIHR4dCArPSAiXG4qKiIgKyAoIlRPVEFM
UzogIiArIHRvdGFscykuY2VudGVyKDY2KSArJyoqJworICAgICAgICB0eHQgKz0gJ1xuJyArICcq
JyAqIDcwICsgJ1xuJworICAgICAgICByZXR1cm4gdHh0CisKKworICAgIGRlZiBjb252ZXJ0X3Rv
X2h0bWwoc2VsZiwgcmVzdWx0cyk6CisgICAgICAgICMgY29ubmVjdCBhbGwgcmVzdWx0cyBpbnRv
IG9uZSBwaWVjZS4KKyAgICAgICAgdHh0ID0gIlxuXG4iLmpvaW4obWFwKGxhbWJkYSB3OiB3Lm91
dHB1dCgpLCByZXN1bHRzKSkKKyAgICAgICAgdHh0ID0gdHh0LnJlcGxhY2UoJyYnLCAnJmFtcDsn
KS5yZXBsYWNlKCc8JywgIiZsdDsiKS5yZXBsYWNlKCc+JywgIiZndDsiKQorICAgICAgICAjIHNt
YWxsIHRyaWNrLCBhbGwgaW5kZW50ZWQgbGluZXMgYXJlIGNvbm5lY3RlZCB0byBwcmV2aW91cy4K
KyAgICAgICAgdHh0ID0gdHh0LnJlcGxhY2UoIlxuICAiLCIgICIpCisgICAgICAgICMgYWRkIGNv
bG9ycyBhbiBzdHlsZXMuCisgICAgICAgIHR4dCA9IHJlLnN1YihyIihbKiBdKyhGaW5pc2hlZClb
IGEtel9BLVowLTldK1sqXSspIiwKKyAgICAgICAgICAgIGxhbWJkYSB3OiByIiIsCisgICAgICAg
ICAgICB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1YihyIihbKl0rWyBhLXpfQS1aMC05XStbKl0r
KSIsCisgICAgICAgICAgICBsYW1iZGEgdzogIjxjYXNlIGNsYXNzPSdnb29kJz48YnI+PGJyPjxi
PiIgKyB3Lmdyb3VwKDApICsgciI8L2I+PC9jYXNlPiIsCisgICAgICAgICAgICB0eHQpCisgICAg
ICAgIHR4dCA9IHJlLnN1YihyIlxuKENvbmZpZykoKC4pKykiLAorICAgICAgICAgICAgbGFtYmRh
IHc6ICJcbjxjYXNlIGNsYXNzPSdnb29kJz48YnI+PGk+IiArIHcuZ3JvdXAoMCkgKyByIjwvaT48
L2Nhc2U+IiwKKyAgICAgICAgICAgIHR4dCkKKyAgICAgICAgdHh0ID0gcmUuc3ViKHIiXG4oUEFT
UykoKC4pKykiLAorICAgICAgICAgICAgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdnb29kJz48
YnI+PHN0YXR1cyBjbGFzcz0ncGFzcyc+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3
Lmdyb3VwKDIpICsgciI8L2Nhc2U+IiwKKyAgICAgICAgICAgIHR4dCkKKyAgICAgICAgdHh0ID0g
cmUuc3ViKHIiXG4oRkFJTCEpKCguKSspIiwKKyAgICAgICAgICAgIGxhbWJkYSB3OiAiXG48Y2Fz
ZSBjbGFzcz0nYmFkJz48YnI+PHN0YXR1cyBjbGFzcz0nZmFpbCc+IiArIHcuZ3JvdXAoMSkgKyBy
Ijwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIpICsgciI8L2Nhc2U+IiwKKyAgICAgICAgICAgIHR4dCkK
KyAgICAgICAgdHh0ID0gcmUuc3ViKHIiXG4oWFBBU1MpKCguKSspIiwKKyAgICAgICAgICAgIGxh
bWJkYSB3OiAiXG48Y2FzZSBjbGFzcz0nYmFkJz48YnI+PHN0YXR1cyBjbGFzcz0neHBhc3MnPiIg
KyB3Lmdyb3VwKDEpICsgciI8L3N0YXR1cz4iICsgdy5ncm91cCgyKSArIHIiPC9jYXNlPiIsCisg
ICAgICAgICAgICB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1YihyIlxuKFhGQUlMKSgoLikrKSIs
CisgICAgICAgICAgICBsYW1iZGEgdzogIlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxicj48c3RhdHVz
IGNsYXNzPSd4ZmFpbCc+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIp
ICsgciI8L2Nhc2U+IiwKKyAgICAgICAgICAgIHR4dCkKKyAgICAgICAgdHh0ID0gcmUuc3ViKHIi
XG4oU0tJUCkoKC4pKykiLAorICAgICAgICAgICAgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdn
b29kJz48YnI+PHN0YXR1cyBjbGFzcz0neGZhaWwnPiIgKyB3Lmdyb3VwKDEpICsgciI8L3N0YXR1
cz4iICsgdy5ncm91cCgyKSArIHIiPC9jYXNlPiIsCisgICAgICAgICAgICB0eHQpCisgICAgICAg
IHR4dCA9IHJlLnN1YihyIlxuKFFXQVJOKSgoLikrKSIsCisgICAgICAgICAgICBsYW1iZGEgdzog
IlxuPGNhc2UgY2xhc3M9J2JhZCc+PGJyPjxzdGF0dXMgY2xhc3M9J3dhcm4nPiIgKyB3Lmdyb3Vw
KDEpICsgciI8L3N0YXR1cz4iICsgdy5ncm91cCgyKSArIHIiPC9jYXNlPiIsCisgICAgICAgICAg
ICB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1YihyIlxuKFJFU1VMVCkoKC4pKykiLAorICAgICAg
ICAgICAgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdnb29kJz48YnI+PHN0YXR1cyBjbGFzcz0n
YmVuY2htYXJrJz4iICsgdy5ncm91cCgxKSArIHIiPC9zdGF0dXM+IiArIHcuZ3JvdXAoMikgKyBy
IjwvY2FzZT4iLAorICAgICAgICAgICAgdHh0KQorICAgICAgICB0eHQgPSByZS5zdWIociJcbihR
RkFUQUwpKCguKSspIiwKKyAgICAgICAgICAgIGxhbWJkYSB3OiAiXG48Y2FzZSBjbGFzcz0nYmFk
Jz48YnI+PHN0YXR1cyBjbGFzcz0nY3Jhc2gnPiIgKyB3Lmdyb3VwKDEpICsgciI8L3N0YXR1cz4i
ICsgdy5ncm91cCgyKSArIHIiPC9jYXNlPiIsCisgICAgICAgICAgICB0eHQpCisgICAgICAgIHR4
dCA9IHJlLnN1YihyIlxuKFRvdGFsczopKFswLTknLCBhLXpdKikiLAorICAgICAgICAgICAgbGFt
YmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdnb29kJz48YnI+PGI+IiArIHcuZ3JvdXAoMSkgKyByIjwv
Yj4iICsgdy5ncm91cCgyKSArICI8L2Nhc2U+IiAsCisgICAgICAgICAgICB0eHQpCisgICAgICAg
ICMgZmluZCB0b3RhbCBjb3VudCBvZiBmYWlsZWQsIHNraXBwZWQgYW5kIHBhc3NlZC4KKyAgICAg
ICAgdG90YWxzID0gcmUuZmluZGFsbChyIihbMC05XSspIHBhc3NlZCwgKFswLTldKykgZmFpbGVk
LCAoWzAtOV0rKSBza2lwcGVkIiwgdHh0KQorICAgICAgICB0b3RhbHMgPSByZWR1Y2UobGFtYmRh
IHgsIHk6IChpbnQoeFswXSkgKyBpbnQoeVswXSksIGludCh4WzFdKSArIGludCh5WzFdKSwgaW50
KHhbMl0pICsgaW50KHlbMl0pKSwgdG90YWxzKQorICAgICAgICB0b3RhbHMgPSBtYXAoc3RyLCB0
b3RhbHMpCisgICAgICAgIHRvdGFscyA9IHRvdGFsc1swXSArICIgcGFzc2VkLCAiICsgdG90YWxz
WzFdICsgIiBmYWlsZWQsICIgKyB0b3RhbHNbMl0gKyAiIHNraXBwZWQiCisgICAgICAgICMgYWRk
IGhlYWRlci4KKyAgICAgICAgdHh0ID0gIiIiCisgICAgICAgIDxodG1sPgorICAgICAgICA8aGVh
ZD4KKyAgICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAgICAgY2FzZS5n
b29kIHtjb2xvcjpibGFja30KKyAgICAgICAgICAgIGNhc2UuYmFkIHtjb2xvcjpibGFja30KKyAg
ICAgICAgICAgIHN0YXR1cy5wYXNzIHtjb2xvcjpncmVlbn0KKyAgICAgICAgICAgIHN0YXR1cy5j
cmFzaCB7Y29sb3I6cmVkfQorICAgICAgICAgICAgc3RhdHVzLmZhaWwge2NvbG9yOnJlZH0KKyAg
ICAgICAgICAgIHN0YXR1cy54cGFzcyB7Y29sb3I6NjYzMzAwfQorICAgICAgICAgICAgc3RhdHVz
LnhmYWlsIHtjb2xvcjowMDQ1MDB9CisgICAgICAgICAgICBzdGF0dXMuYmVuY2htYXJrIHtjb2xv
cjowMDAwODh9CisgICAgICAgICAgICBzdGF0dXMud2FybiB7Y29sb3I6b3JhbmdlfQorICAgICAg
ICAgICAgc3RhdHVzLmNyYXNoIHtjb2xvcjpyZWQ7IHRleHQtZGVjb3JhdGlvbjpibGluazsgYmFj
a2dyb3VuZC1jb2xvcjpibGFja30KKyAgICAgICAgICA8L3N0eWxlPgorICAgICAgICA8L2hlYWQ+
CisgICAgICAgIDxib2R5PgorICAgICAgICA8Y2VudGVyPgorICAgICAgICAgIDxoMT5RdCdzIGF1
dG90ZXN0cyByZXN1bHRzPC9oMT4lKHRvdGFscylzPGJyPgorICAgICAgICAgIDxocj4KKyAgICAg
ICAgICA8Zm9ybT4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJIaWRl
IGdvb2QiIG9uY2xpY2s9ImRvY3VtZW50LnN0eWxlU2hlZXRzWzBdLmNzc1J1bGVzWzBdLnN0eWxl
LmRpc3BsYXk9J25vbmUnIi8+CisgICAgICAgICAgICAmbmJzcAorICAgICAgICAgICAgPGlucHV0
IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlNob3cgYWxsIiBvbmNsaWNrPSJkb2N1bWVudC5zdHlsZVNo
ZWV0c1swXS5jc3NSdWxlc1swXS5zdHlsZS5kaXNwbGF5PScnIi8+CisgICAgICAgICAgPC9mb3Jt
PgorICAgICAgICA8L2NlbnRlcj4KKyAgICAgICAgPGhyPgorICAgICAgICAlKHJlc3VsdHMpcwor
ICAgICAgICA8L2JvZHk+CisgICAgICAgIDwvaHRtbD4iIiIgJSB7InRvdGFscyIgOiB0b3RhbHMs
ICJyZXN1bHRzIiA6IHR4dCB9CisgICAgICAgIHJldHVybiB0eHQKKworCitpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgorICAgIG9wdGlvbnMgPSBPcHRpb25zKHN5cy5hcmd2WzE6XSkKKyAgICBt
YWluID0gTWFpbihvcHRpb25zKQorICAgIG1haW4ucnVuKCkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59646</attachid>
            <date>2010-06-24 05:44:43 -0700</date>
            <delta_ts>2010-06-28 08:02:02 -0700</delta_ts>
            <desc>script v4</desc>
            <filename>tst.diff</filename>
            <type>text/plain</type>
            <size>17267</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MzZiYTM5Li45ZTZkODFmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDYt
MjQgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIHRoZSBR
dCBhdXRvdGVzdCBsYXVuY2hlci4KKworICAgICAgICBRdCBhdXRvdGVzdHMgc2hvdWxkIGJlIGV4
ZWN1dGVkIG1vcmUgZnJlcXVlbnRseSwgaWRlYWxseSBieSB0aGUgUXQKKyAgICAgICAgYnVpbGQg
Ym90LiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvIHByb3ZpZGUgdGhlIHRlc3RzIG1vcmUgYWNj
ZXNzaWJsZS4KKworICAgICAgICBbUXRdIEl0IHNob3VsZCBiZSBlYXNpZXIgdG8gcnVuIGFsbCBR
dCdzIGF1dG90ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMxNjI1CisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1xdHdlYmtpdC10ZXN0czogQWRk
ZWQuCisKIDIwMTAtMDYtMjMgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNoaW5pY2hpcm8gSGFtYWppLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy9ydW4tcXR3ZWJraXQtdGVzdHMgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1
bi1xdHdlYmtpdC10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzNk
ZTBhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tcXR3ZWJraXQt
dGVzdHMKQEAgLTAsMCArMSwzNTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29k
aW5nOiB1dGYtOCAtKi0KKworI0NvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworI1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyNtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworI0xpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorI3ZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworI1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisjTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyNMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworI1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyNhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisjQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKK2Zyb20gX19m
dXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitp
bXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgbG9nZ2luZworZnJvbSBzdWJwcm9jZXNz
IGltcG9ydCBQb3BlbiwgUElQRSwgU1RET1VUCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25Q
YXJzZXIKKworCitjbGFzcyBMb2cob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZSk6CisgICAgICAgIHNlbGYuX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgICAg
IHNlbGYuZGVidWcgPSBzZWxmLl9sb2cuZGVidWcKKyAgICAgICAgc2VsZi53YXJuID0gc2VsZi5f
bG9nLndhcm4KKyAgICAgICAgc2VsZi5lcnJvciA9IHNlbGYuX2xvZy5lcnJvcgorICAgICAgICBz
ZWxmLmV4Y2VwdGlvbiA9IHNlbGYuX2xvZy5leGNlcHRpb24KKyAgICAgICAgc2VsZi5pbmZvID0g
c2VsZi5fbG9nLmluZm8KKworCitjbGFzcyBPcHRpb25zKExvZyk6CisgICAgIiIiIE9wdGlvbiBt
YW5hZ2VyLiBJdCBwYXJzZXMgYW5kIGNoZWNrcyBzY3JpcHQncyBwYXJhbWV0ZXJzLCBzZXRzIGFu
IGludGVybmFsIHZhcmlhYmxlLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzKToK
KyAgICAgICAgTG9nLl9faW5pdF9fKHNlbGYsICJPcHRpb25zIikKKyAgICAgICAgbG9nID0gc2Vs
Zi5fbG9nCisgICAgICAgIG9wdCA9IE9wdGlvblBhcnNlcigiJXByb2cgW29wdGlvbnNdIFBhdGhU
b1NlYXJjaC5cblRyeSAtaCBvciAtLWhlbHAuIikKKyAgICAgICAgb3B0LmFkZF9vcHRpb24oIi1q
IiwgIi0tcGFyYWxsZWwtbGV2ZWwiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwKKyAgICAg
ICAgICAgICAgZGVzdD0icGFyYWxsZWxfbGV2ZWwiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAg
ICAgIGhlbHA9Ik51bWJlciBvZiBwYXJhbGxlbCBwcm9jZXNzZXMgZXhlY3V0aW5nIHRoZSBRdCdz
IHRlc3RzLiBEZWZhdWx0OiBjcHUgY291bnQuIikKKyAgICAgICAgb3B0LmFkZF9vcHRpb24oIi12
IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJpbnQiLAorICAgICAgICAgICAg
ICBkZXN0PSJ2ZXJib3NlIiwgZGVmYXVsdD0yLAorICAgICAgICAgICAgICBoZWxwPSJWZXJib3Nl
IGxldmVsICgwIC0gcXVpZXQsIDEgLSBlcnJvcnMgb25seSwgMiAtIGluZm9zIGFuZCB3YXJuaW5n
cywgMyAtIGRlYnVnIGluZm9ybWF0aW9uKS4gRGVmYXVsdDogJWRlZmF1bHQuIikKKyAgICAgICAg
b3B0LmFkZF9vcHRpb24oIiIsICItLXRlc3RzLW9wdGlvbnMiLCBhY3Rpb249InN0b3JlIiwgdHlw
ZT0ic3RyaW5nIiwKKyAgICAgICAgICAgICAgZGVzdD0idGVzdHNfb3B0aW9ucyIsIGRlZmF1bHQ9
IiIsCisgICAgICAgICAgICAgIGhlbHA9IlBhcmFtZXRlcnMgcGFzc2VkIHRvIFF0J3MgdGVzdHMg
KGZvciBleGFtcGxlICctZXZlbnRkZWxheSAxMjMnKS4iKQorICAgICAgICBvcHQuYWRkX29wdGlv
bigiLW8iLCAiLS1vdXRwdXQtZmlsZSIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmciLAor
ICAgICAgICAgICAgICBkZXN0PSJvdXRwdXRfZmlsZSIsIGRlZmF1bHQ9Ii90bXAvcXR3ZWJraXR0
ZXN0cy5odG1sIiwKKyAgICAgICAgICAgICAgaGVscD0iRmlsZSB3aGVyZSByZXN1bHRzIHdpbGwg
YmUgc3RvcmVkLiBUaGUgZmlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuLiBEZWZhdWx0OiAlZGVmYXVs
dC4iKQorICAgICAgICBvcHQuYWRkX29wdGlvbigiLWIiLCAiLS1icm93c2VyIiwgYWN0aW9uPSJz
dG9yZSIsIGRlc3Q9ImJyb3dzZXIiLAorICAgICAgICAgICAgICBkZWZhdWx0PSJ4ZGctb3BlbiIs
CisgICAgICAgICAgICAgIGhlbHA9IkJyb3dzZXIgaW4gd2hpY2ggcmVzdWx0cyB3aWxsIGJlIG9w
ZW5lZC4gRGVmYXVsdCAlZGVmYXVsdC4iKQorICAgICAgICBvcHQuYWRkX29wdGlvbigiIiwgIi0t
ZG8tbm90LW9wZW4tcmVzdWx0cyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAg
ICBkZXN0PSJvcGVuX3Jlc3VsdHMiLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgIGhlbHA9
IlRoZSByZXN1bHRzIHNob3VsZG4ndCBwb3AtdXAgaW4gYSBicm93c2VyIGF1dG9tYXRpY2FsbHki
KQorICAgICAgICBvcHQuYWRkX29wdGlvbigiLWQiLCAiLS1kZXZlbG9wZXItbW9kZSIsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgIGRlc3Q9ImRldmVsb3BlciIsIGRlZmF1bHQ9
RmFsc2UsCisgICAgICAgICAgICAgIGhlbHA9IlNwZWNpYWwgbW9kZSBmb3IgZGVidWdnaW5nLiBJ
biBnZW5lcmFsIGl0IHNpbXVsYXRlcyBodW1hbiBiZWhhdmlvciwgcnVubmluZyBhbGwgYXV0b3Rl
c3RzLiBJbiB0aGUgbW9kZSBldmVyeXRoaW5nIGlzIGV4ZWN1dGVkIHN5bmNocm9ub3VzbHksIG5v
IGh0bWwgb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkLCBubyBjaGFuZ2VzIG9yIHRyYW5zZm9ybWF0
aW9uIHdpbGwgYmUgYXBwbGllZCB0byBzdGRlcnIgb3Igc3Rkb3V0LiBJbiB0aGlzIG1vZGUgb3B0
aW9uczsgcGFyYWxsZWwtbGV2ZWwsIG91dHB1dC1maWxlLCBicm93c2VyIGFuZCBkby1ub3Qtb3Bl
bi1yZXN1bHRzIHdpbGwgYmUgaWdub3JlZC4iKQorCisgICAgICAgIHNlbGYuX28sIHNlbGYuX2Eg
PSBvcHQucGFyc2VfYXJncyhhcmdzKQorICAgICAgICB2ZXJib3NlID0gc2VsZi5fby52ZXJib3Nl
CisgICAgICAgIGlmIHZlcmJvc2UgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25m
aWcobGV2ZWw9bG9nZ2luZy5DUklUSUNBTCwpCisgICAgICAgIGVsaWYgdmVyYm9zZSA9PSAxOgor
ICAgICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkVSUk9SLCkKKyAg
ICAgICAgZWxpZiB2ZXJib3NlID09IDI6CisgICAgICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmln
KGxldmVsPWxvZ2dpbmcuSU5GTywpCisgICAgICAgIGVsaWYgdmVyYm9zZSA9PSAzOgorICAgICAg
ICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkRFQlVHLCkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZP
LCkKKyAgICAgICAgICAgIGxvZy53YXJuKCJCYWQgdmVyYm9zZSBsZXZlbCwgc3dpdGNoaW5nIHRv
IGRlZmF1bHQuIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhp
c3RzKHNlbGYuX2FbMF0pOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiR2l2ZW4g
cGF0aCBkb2Vzbid0IGV4aXN0LiIpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fYSkgPiAxOgor
ICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoIk9ubHkgb25lIGRpcmVjdG9yeSBjb3Vs
ZCBiZSBwcm92aWRlZC4iKQorICAgICAgICAgICAgc2VsZi5fby5wYXRoID0gc2VsZi5fYVswXQor
ICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIGxvZy5lcnJvcigiQmFkIHVz
YWdlLiBQbGVhc2UgdHJ5IC1oIG9yIC0taGVscC4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZy5lcnJvcigiUGF0aCAn
JXMnIGRvZXNuJ3QgZXhpc3QiLCBzZWxmLl9hWzBdKQorICAgICAgICAgICAgc3lzLmV4aXQoMikK
KyAgICAgICAgaWYgc2VsZi5fby5kZXZlbG9wZXI6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5f
by5wYXJhbGxlbF9sZXZlbCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGxvZy53YXJuKCJEZXZl
bG9wZXIgbW9kZSBzZXRzIHBhcmFsbGVsLWxldmVsIG9wdGlvbiB0byBvbmUuIikKKyAgICAgICAg
ICAgIHNlbGYuX28ucGFyYWxsZWxfbGV2ZWwgPSAxCisgICAgICAgICAgICBzZWxmLl9vLm9wZW5f
cmVzdWx0cyA9IEZhbHNlCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAg
ICAgICIiIiBNYXBzIGFsbCBvcHRpb25zIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdCAocmVt
b3ZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbikuICIiIgorICAgICAgICByZXR1cm4gZ2V0YXR0
cihzZWxmLl9vLCBhdHRyKQorCisKK2RlZiBydW5fdGVzdChhcmdzKToKKyAgICAiIiIgUnVucyBv
bmUgZ2l2ZW4gdGVzdC4KKyAgICBhcmdzIHNob3VsZCBjb250YWluIGEgdHVwbGUgd2l0aCAzIGVs
ZW1lbnRzOworICAgICAgVGVzdFN1aXRlUmVzdWx0IGNvbnRhaW5pbmcgZnVsbCBmaWxlIG5hbWUg
b2YgYW4gYXV0b3Rlc3QgZXhlY3V0YWJsZS4KKyAgICAgIHN0ciB3aXRoIG9wdGlvbnMgdGhhdCBz
aG91bGQgYmUgcGFzc2VkIHRvIHRoZSBhdXRvdGVzdCBleGVjdXRhYmxlCisgICAgICBib29sIGlm
IHRydWUgdGhlbiB0aGUgc3Rkb3V0IHdpbGwgYmUgYnVmZmVyZWQgYW5kIHNlcGFyYXRlZCBmcm9t
IHRoZSBzdGRlcnIsIGlmIGl0IGlzIGZhbHNlCisgICAgICAgIHRoZW4gdGhlIHN0ZG91dCBhbmQg
dGhlIHN0ZGVyciB3aWxsIGJlIG1lcmdlZCB0b2dldGhlciBhbmQgbGVmdCB1bmJ1ZmZlcmVkICh0
aGUgVGVzdFN1aXRlUmVzdWx0IG91dHB1dCB3aWxsIGJlIE5vbmUpLgorICAgICIiIgorICAgIGxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJFeGVjIikKKyAgICB0ZXN0X3N1aXRlLCBvcHRpb25zLCBi
dWZmZXJlZCA9IGFyZ3MKKyAgICB0cnk6CisgICAgICAgIGxvZy5pbmZvKCJSdW5uaW5nLi4uICVz
IiwgdGVzdF9zdWl0ZS50ZXN0X2ZpbGVfbmFtZSgpKQorICAgICAgICBpZiBidWZmZXJlZDoKKyAg
ICAgICAgICAgIHRzdCA9IFBvcGVuKHRlc3Rfc3VpdGUudGVzdF9maWxlX25hbWUoKSArIG9wdGlv
bnMsIHN0ZG91dD1QSVBFLCBzdGRlcnI9Tm9uZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHRzdCA9IFBvcGVuKHRlc3Rfc3VpdGUudGVzdF9maWxlX25hbWUoKSArIG9w
dGlvbnMsIHN0ZG91dD1Ob25lLCBzdGRlcnI9U1RET1VULCBzaGVsbD1UcnVlKQorICAgIGV4Y2Vw
dCBPU0Vycm9yLCBlOgorICAgICAgICBsb2cuZXhjZXB0aW9uKCJDYW4ndCBvcGVuIGFuIGF1dG90
ZXN0IGZpbGU6ICclcycuIFNraXBwaW5nIHRoZSB0ZXN0Li4uIiwgZS5maWxlbmFtZSkKKyAgICBl
bHNlOgorICAgICAgICB0ZXN0X3N1aXRlLnNldF9vdXRwdXQodHN0LmNvbW11bmljYXRlKClbMF0p
ICAjIHRha2VzIHN0ZG91dCBvbmx5LCBpbiBkZXZlbG9wZXIgbW9kZSBpdCB3b3VsZCBiZSBOb25l
LgorICAgIGxvZy5pbmZvKCJGaW5pc2hlZCAlcyIsIHRlc3Rfc3VpdGUudGVzdF9maWxlX25hbWUo
KSkKKyAgICByZXR1cm4gdGVzdF9zdWl0ZQorCisKK2NsYXNzIFRlc3RTdWl0ZVJlc3VsdChvYmpl
Y3QpOgorICAgICIiIiBLZWVwcyBpbmZvcm1hdGlvbiBhYm91dCBhIHRlc3QuICIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9vdXRwdXQgPSBOb25lCisgICAgICAg
IHNlbGYuX3Rlc3RfZmlsZV9uYW1lID0gTm9uZQorCisgICAgZGVmIHNldF9vdXRwdXQoc2VsZiwg
eG1sKToKKyAgICAgICAgaWYgeG1sOgorICAgICAgICAgICAgc2VsZi5fb3V0cHV0ID0geG1sLnN0
cmlwKCkKKworICAgIGRlZiBvdXRwdXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vdXRw
dXQKKworICAgIGRlZiBzZXRfdGVzdF9maWxlX25hbWUoc2VsZiwgZmlsZV9uYW1lKToKKyAgICAg
ICAgc2VsZi5fdGVzdF9maWxlX25hbWUgPSBmaWxlX25hbWUKKworICAgIGRlZiB0ZXN0X2ZpbGVf
bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfZmlsZV9uYW1lCisKKworY2xh
c3MgTWFpbihMb2cpOgorICAgICIiIiBUaGUgbWFpbiBzY3JpcHQuIEFsbCByZWFsIHdvcmsgaXMg
ZG9uZSBpbiBydW4oKSBtZXRob2QuICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlv
bnMpOgorICAgICAgICBMb2cuX19pbml0X18oc2VsZiwgIk1haW4iKQorICAgICAgICBzZWxmLl9v
cHRpb25zID0gb3B0aW9ucworICAgICAgICBpZiBvcHRpb25zLnBhcmFsbGVsX2xldmVsID4gMSBv
ciBvcHRpb25zLnBhcmFsbGVsX2xldmVsIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wKKyAgICAgICAgICAg
IGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLndhcm4oIkltcG9ydCBF
cnJvcjogdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUgY291bGRuJ3QgYmUgbG9hZGVkIChtYXkg
YmUgbGFjayBvZiBweXRob24tbXVsdGlwcm9jZXNzaW5nIHBhY2thZ2U/KS4gVGhlIFF0IGF1dG90
ZXN0cyB3aWxsIGJlIGV4ZWN1dGVkIG9uZSBieSBvbmUuIikKKyAgICAgICAgICAgICAgICBvcHRp
b25zLnBhcmFsbGVsX2xldmVsID0gMQorICAgICAgICBpZiBvcHRpb25zLnBhcmFsbGVsX2xldmVs
ID09IDE6CisKKyAgICAgICAgICAgIGNsYXNzIFBvb2wob2JqZWN0KToKKyAgICAgICAgICAgICAg
ICAiIiIgQSBoYWNrLCBjcmVhdGVkIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggbXVsdGlwcm9jZXNz
aW5nIG1vZHVsZSwgdGhpcyBjbGFzcyBpcyBzaW5nbGUgdGhyZWFkIHJlcGxhY2VtZW50IGZvciB0
aGUgbXVsdGlwcm9jZXNzaW5nLlBvb2wgY2xhc3MuICIiIgorICAgICAgICAgICAgICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwcm9jZXNzZXMpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAg
ICAgICAgICAgICAgICBkZWYgaW1hcF91bm9yZGVyZWQoc2VsZiwgZnVuYywgZmlsZXMpOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFwKGZ1bmMsIGZpbGVzKQorCisgICAgICAgICAgICAg
ICAgZGVmIG1hcChzZWxmLCBmdW5jLCBmaWxlcyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtYXAoZnVuYywgZmlsZXMpCisKKyAgICAgICAgc2VsZi5fUG9vbCA9IFBvb2wKKworICAgIGRl
ZiBydW4oc2VsZik6CisgICAgICAgICIiIiBGaW5kICYmIGV4ZWN1dGUgJiYgcHVibGlzaCByZXN1
bHRzIG9mIGFsbCB0ZXN0LiAiQWxsIGluIG9uZSIgZnVuY3Rpb24uICIiIgorICAgICAgICBzZWxm
LmRlYnVnKCJTZWFyY2hpbmcgZXhlY3V0YWJsZXMuLi4iKQorICAgICAgICB0ZXN0c19leGVjdXRh
YmxlcyA9IHNlbGYuZmluZF90ZXN0c19wYXRocyhzZWxmLl9vcHRpb25zLnBhdGgpCisgICAgICAg
IHNlbGYuZGVidWcoIkZvdW5kOiAlcyIsIGxlbih0ZXN0c19leGVjdXRhYmxlcykpCisgICAgICAg
IHNlbGYuZGVidWcoIkV4ZWN1dGluZyB0ZXN0cy4uLiIpCisgICAgICAgIHJlc3VsdHMgPSBzZWxm
LnJ1bl90ZXN0cyh0ZXN0c19leGVjdXRhYmxlcykKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlv
bnMuZGV2ZWxvcGVyOgorICAgICAgICAgICAgc2VsZi5kZWJ1ZygiVHJhbnNmb3JtaW5nLi4uIikK
KyAgICAgICAgICAgIHRyYW5zZm9ybWVkX3Jlc3VsdHMgPSBzZWxmLnRyYW5zZm9ybShyZXN1bHRz
KQorICAgICAgICAgICAgc2VsZi5kZWJ1ZygiUHVibGlzaGluZy4uLiIpCisgICAgICAgICAgICBz
ZWxmLmFubm91bmNlX3Jlc3VsdHModHJhbnNmb3JtZWRfcmVzdWx0cykKKworICAgIGRlZiBmaW5k
X3Rlc3RzX3BhdGhzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIgRmluZHMgYWxsIHRlc3RzIGV4
ZWN1dGFibGVzIGluc2lkZSB0aGUgZ2l2ZW4gcGF0aC4gIiIiCisgICAgICAgIGV4ZWN1dGFibGVz
ID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6Cisg
ICAgICAgICAgICAjIENoZWNrIG9ubHkgZm9yIGEgZmlsZSB0aGF0IG5hbWUgc3RhcnRzIGZyb20g
J3RzdF8nIGFuZCB0aGF0IHdlIGNhbiBleGVjdXRlLgorICAgICAgICAgICAgZmlsdGVyZWRfcGF0
aCA9IGZpbHRlcihsYW1iZGEgdzogdy5zdGFydHN3aXRoKCd0c3RfJykgYW5kIG9zLmFjY2Vzcyhv
cy5wYXRoLmpvaW4ocm9vdCwgdyksIG9zLlhfT0spLCBmaWxlcykKKyAgICAgICAgICAgIGZpbHRl
cmVkX3BhdGggPSBtYXAobGFtYmRhIHc6IG9zLnBhdGguam9pbihyb290LCB3KSwgZmlsdGVyZWRf
cGF0aCkKKyAgICAgICAgICAgIGZvciBmaWxlX25hbWUgaW4gZmlsdGVyZWRfcGF0aDoKKyAgICAg
ICAgICAgICAgICByID0gVGVzdFN1aXRlUmVzdWx0KCkKKyAgICAgICAgICAgICAgICByLnNldF90
ZXN0X2ZpbGVfbmFtZShmaWxlX25hbWUpCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMuYXBw
ZW5kKHIpCisgICAgICAgIHJldHVybiBleGVjdXRhYmxlcworCisgICAgZGVmIHJ1bl90ZXN0cyhz
ZWxmLCBmaWxlcyk6CisgICAgICAgICIiIiBFeGVjdXRlcyBnaXZlbiBmaWxlcyBieSB1c2luZyBh
IHBvb2wgb2Ygd29ya2Vycy4gIiIiCisgICAgICAgIHdvcmtlcnMgPSBzZWxmLl9Qb29sKHByb2Nl
c3Nlcz1zZWxmLl9vcHRpb25zLnBhcmFsbGVsX2xldmVsKQorICAgICAgICAjIHRvIGVhY2ggZmls
ZSBhZGQgb3B0aW9ucy4KKyAgICAgICAgc2VsZi5kZWJ1ZygiVXNpbmcgJXMgdGhlIHdvcmtlcnMg
cG9vbCwgbnVtYmVyIG9mIHdvcmtlcnMgJWkiLCByZXByKHdvcmtlcnMpLCBzZWxmLl9vcHRpb25z
LnBhcmFsbGVsX2xldmVsKQorICAgICAgICBwYWNrYWdlID0gbWFwKGxhbWJkYSB3OiBbdywgc2Vs
Zi5fb3B0aW9ucy50ZXN0c19vcHRpb25zLCBub3Qgc2VsZi5fb3B0aW9ucy5kZXZlbG9wZXJdLCBm
aWxlcykKKyAgICAgICAgc2VsZi5kZWJ1ZygiR2VuZXJhdGVkIHBhY2thZ2VzIGZvciB3b3JrZXJz
OiAlcyIsIHJlcHIocGFja2FnZSkpCisgICAgICAgIHJlc3VsdHMgPSB3b3JrZXJzLm1hcChydW5f
dGVzdCwgcGFja2FnZSkgICMgQ29sbGVjdHMgcmVzdWx0cy4KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dHMKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgcmVzdWx0cyk6CisgICAgICAgICIiIiBUcmFu
c2Zvcm1zIGxpc3Qgb2YgdGhlIHJlc3VsdHMgdG8gc3BlY2lhbGl6ZWQgdmVyc2lvbnMuICIiIgor
ICAgICAgICBzdGRvdXQgPSBzZWxmLmNvbnZlcnRfdG9fc3Rkb3V0KHJlc3VsdHMpCisgICAgICAg
IGh0bWwgPSBzZWxmLmNvbnZlcnRfdG9faHRtbChyZXN1bHRzKQorICAgICAgICByZXR1cm4geyJz
dGRvdXQiOiBzdGRvdXQsICJodG1sIjogaHRtbH0KKworICAgIGRlZiBhbm5vdW5jZV9yZXN1bHRz
KHNlbGYsIHJlc3VsdHMpOgorICAgICAgICAiIiIgU2hvd3MgdGhlIHJlc3VsdHMuICIiIgorICAg
ICAgICBzZWxmLmFubm91bmNlX3Jlc3VsdHNfc3Rkb3V0KHJlc3VsdHNbJ3N0ZG91dCddKQorICAg
ICAgICBzZWxmLmFubm91bmNlX3Jlc3VsdHNfaHRtbChyZXN1bHRzWydodG1sJ10pCisKKyAgICBk
ZWYgYW5ub3VuY2VfcmVzdWx0c19zdGRvdXQoc2VsZiwgcmVzdWx0cyk6CisgICAgICAgICIiIiBT
aG93IHRoZSByZXN1bHRzIGJ5IHByaW50aW5nIHRvIHRoZSBzdGRvdXQuIiIiCisgICAgICAgIHBy
aW50KHJlc3VsdHMpCisKKyAgICBkZWYgYW5ub3VuY2VfcmVzdWx0c19odG1sKHNlbGYsIHJlc3Vs
dHMpOgorICAgICAgICAiIiIgU2hvd3MgdGhlIHJlc3VsdCBieSBjcmVhdGluZyBhIGh0bWwgZmls
ZSBhbmQgY2FsbGluZyBhIHdlYiBicm93c2VyIHRvIHJlbmRlciBpdC4gIiIiCisgICAgICAgIHdp
dGggZmlsZShzZWxmLl9vcHRpb25zLm91dHB1dF9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAg
ICBmLndyaXRlKHJlc3VsdHMpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMub3Blbl9yZXN1bHRz
OgorICAgICAgICAgICAgUG9wZW4oc2VsZi5fb3B0aW9ucy5icm93c2VyICsgIiAiICsgc2VsZi5f
b3B0aW9ucy5vdXRwdXRfZmlsZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1UcnVl
KQorCisgICAgZGVmIGNvbnZlcnRfdG9fc3Rkb3V0KHNlbGYsIHJlc3VsdHMpOgorICAgICAgICAi
IiIgQ29udmVydHMgcmVzdWx0cywgdGhhdCB0aGV5IGNvdWxkIGJlIG5pY2VseSBwcmVzZW50ZWQg
aW4gdGhlIHN0ZG91dC4gIiIiCisgICAgICAgICMgSm9pbiBhbGwgcmVzdWx0cyBpbnRvIG9uZSBw
aWVjZS4KKyAgICAgICAgdHh0ID0gIlxuXG4iLmpvaW4obWFwKGxhbWJkYSB3OiB3Lm91dHB1dCgp
LCByZXN1bHRzKSkKKyAgICAgICAgIyBGaW5kIHRvdGFsIGNvdW50IG9mIGZhaWxlZCwgc2tpcHBl
ZCBhbmQgcGFzc2VkIHRlc3RzLgorICAgICAgICB0b3RhbHMgPSByZS5maW5kYWxsKHIiKFswLTld
KykgcGFzc2VkLCAoWzAtOV0rKSBmYWlsZWQsIChbMC05XSspIHNraXBwZWQiLCB0eHQpCisgICAg
ICAgIHRvdGFscyA9IHJlZHVjZShsYW1iZGEgeCwgeTogKGludCh4WzBdKSArIGludCh5WzBdKSwg
aW50KHhbMV0pICsgaW50KHlbMV0pLCBpbnQoeFsyXSkgKyBpbnQoeVsyXSkpLCB0b3RhbHMpCisg
ICAgICAgIHRvdGFscyA9IG1hcChzdHIsIHRvdGFscykKKyAgICAgICAgdG90YWxzID0gdG90YWxz
WzBdICsgIiBwYXNzZWQsICIgKyB0b3RhbHNbMV0gKyAiIGZhaWxlZCwgIiArIHRvdGFsc1syXSAr
ICIgc2tpcHBlZCIKKyAgICAgICAgIyBBZGQgYSBzdW1tYXJ5LgorICAgICAgICB0eHQgKz0gJ1xu
XG5cbicgKyAnKicgKiA3MAorICAgICAgICB0eHQgKz0gIlxuKioiICsgKCJUT1RBTFM6ICIgKyB0
b3RhbHMpLmNlbnRlcig2NikgKyAnKionCisgICAgICAgIHR4dCArPSAnXG4nICsgJyonICogNzAg
KyAnXG4nCisgICAgICAgIHJldHVybiB0eHQKKworICAgIGRlZiBjb252ZXJ0X3RvX2h0bWwoc2Vs
ZiwgcmVzdWx0cyk6CisgICAgICAgICIiIiBDb252ZXJ0cyByZXN1bHRzLCB0aGF0IHRoZXkgY291
bGQgc2hvd2VkIGFzIGEgaHRtbCBwYWdlLiAiIiIKKyAgICAgICAgIyBKb2luIHJlc3VsdHMgaW50
byBvbmUgcGllY2UuCisgICAgICAgIHR4dCA9ICJcblxuIi5qb2luKG1hcChsYW1iZGEgdzogdy5v
dXRwdXQoKSwgcmVzdWx0cykpCisgICAgICAgIHR4dCA9IHR4dC5yZXBsYWNlKCcmJywgJyZhbXA7
JykucmVwbGFjZSgnPCcsICImbHQ7IikucmVwbGFjZSgnPicsICImZ3Q7IikKKyAgICAgICAgIyBB
ZGQgYSBjb2xvciBhbmQgYSBzdHlsZS4KKyAgICAgICAgdHh0ID0gcmUuc3ViKHIiKFsqIF0rKEZp
bmlzaGVkKVsgYS16X0EtWjAtOV0rWypdKykiLAorICAgICAgICAgICAgbGFtYmRhIHc6IHIiIiwK
KyAgICAgICAgICAgIHR4dCkKKyAgICAgICAgdHh0ID0gcmUuc3ViKHIiKFsqXStbIGEtel9BLVow
LTldK1sqXSspIiwKKyAgICAgICAgICAgIGxhbWJkYSB3OiAiPGNhc2UgY2xhc3M9J2dvb2QnPjxi
cj48YnI+PGI+IiArIHcuZ3JvdXAoMCkgKyByIjwvYj48L2Nhc2U+IiwKKyAgICAgICAgICAgIHR4
dCkKKyAgICAgICAgdHh0ID0gcmUuc3ViKHIiKENvbmZpZzogVXNpbmcgUVRlc3QgbGlicmFyeSko
KC4pKykiLAorICAgICAgICAgICAgbGFtYmRhIHc6ICJcbjxjYXNlIGNsYXNzPSdnb29kJz48YnI+
PGk+IiArIHcuZ3JvdXAoMCkgKyByIjwvaT4gICIsCisgICAgICAgICAgICB0eHQpCisgICAgICAg
IHR4dCA9IHJlLnN1YihyIlxuKFBBU1MpKCguKSspIiwKKyAgICAgICAgICAgIGxhbWJkYSB3OiAi
PC9jYXNlPlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxicj48c3RhdHVzIGNsYXNzPSdwYXNzJz4iICsg
dy5ncm91cCgxKSArIHIiPC9zdGF0dXM+IiArIHcuZ3JvdXAoMiksCisgICAgICAgICAgICB0eHQp
CisgICAgICAgIHR4dCA9IHJlLnN1YihyIlxuKEZBSUwhKSgoLikrKSIsCisgICAgICAgICAgICBs
YW1iZGEgdzogIjwvY2FzZT5cbjxjYXNlIGNsYXNzPSdiYWQnPjxicj48c3RhdHVzIGNsYXNzPSdm
YWlsJz4iICsgdy5ncm91cCgxKSArIHIiPC9zdGF0dXM+IiArIHcuZ3JvdXAoMiksCisgICAgICAg
ICAgICB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1YihyIlxuKFhQQVNTKSgoLikrKSIsCisgICAg
ICAgICAgICBsYW1iZGEgdzogIjwvY2FzZT5cbjxjYXNlIGNsYXNzPSdiYWQnPjxicj48c3RhdHVz
IGNsYXNzPSd4cGFzcyc+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIp
LAorICAgICAgICAgICAgdHh0KQorICAgICAgICB0eHQgPSByZS5zdWIociJcbihYRkFJTCkoKC4p
KykiLAorICAgICAgICAgICAgbGFtYmRhIHc6ICI8L2Nhc2U+XG48Y2FzZSBjbGFzcz0nZ29vZCc+
PGJyPjxzdGF0dXMgY2xhc3M9J3hmYWlsJz4iICsgdy5ncm91cCgxKSArIHIiPC9zdGF0dXM+IiAr
IHcuZ3JvdXAoMiksCisgICAgICAgICAgICB0eHQpCisgICAgICAgIHR4dCA9IHJlLnN1YihyIlxu
KFNLSVApKCguKSspIiwKKyAgICAgICAgICAgIGxhbWJkYSB3OiAiPC9jYXNlPlxuPGNhc2UgY2xh
c3M9J2dvb2QnPjxicj48c3RhdHVzIGNsYXNzPSd4ZmFpbCc+IiArIHcuZ3JvdXAoMSkgKyByIjwv
c3RhdHVzPiIgKyB3Lmdyb3VwKDIpLAorICAgICAgICAgICAgdHh0KQorICAgICAgICB0eHQgPSBy
ZS5zdWIociJcbihRV0FSTikoKC4pKykiLAorICAgICAgICAgICAgbGFtYmRhIHc6ICI8L2Nhc2U+
XG48Y2FzZSBjbGFzcz0nYmFkJz48YnI+PHN0YXR1cyBjbGFzcz0nd2Fybic+IiArIHcuZ3JvdXAo
MSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIpLAorICAgICAgICAgICAgdHh0KQorICAgICAg
ICB0eHQgPSByZS5zdWIociJcbihSRVNVTFQpKCguKSspIiwKKyAgICAgICAgICAgIGxhbWJkYSB3
OiAiPC9jYXNlPlxuPGNhc2UgY2xhc3M9J2dvb2QnPjxicj48c3RhdHVzIGNsYXNzPSdiZW5jaG1h
cmsnPiIgKyB3Lmdyb3VwKDEpICsgciI8L3N0YXR1cz4iICsgdy5ncm91cCgyKSwKKyAgICAgICAg
ICAgIHR4dCkKKyAgICAgICAgdHh0ID0gcmUuc3ViKHIiXG4oUUZBVEFMKSgoLikrKSIsCisgICAg
ICAgICAgICBsYW1iZGEgdzogIjwvY2FzZT5cbjxjYXNlIGNsYXNzPSdiYWQnPjxicj48c3RhdHVz
IGNsYXNzPSdjcmFzaCc+IiArIHcuZ3JvdXAoMSkgKyByIjwvc3RhdHVzPiIgKyB3Lmdyb3VwKDIp
LAorICAgICAgICAgICAgdHh0KQorICAgICAgICB0eHQgPSByZS5zdWIociJcbihUb3RhbHM6KShb
MC05JywgYS16XSopIiwKKyAgICAgICAgICAgIGxhbWJkYSB3OiAiPC9jYXNlPlxuPGNhc2UgY2xh
c3M9J2dvb2QnPjxicj48Yj4iICsgdy5ncm91cCgxKSArIHIiPC9iPiIgKyB3Lmdyb3VwKDIpICsg
IjwvY2FzZT4iLAorICAgICAgICAgICAgdHh0KQorICAgICAgICAjIEZpbmQgdG90YWwgY291bnQg
b2YgZmFpbGVkLCBza2lwcGVkIGFuZCBwYXNzZWQgdGVzdHMuCisgICAgICAgIHRvdGFscyA9IHJl
LmZpbmRhbGwociIoWzAtOV0rKSBwYXNzZWQsIChbMC05XSspIGZhaWxlZCwgKFswLTldKykgc2tp
cHBlZCIsIHR4dCkKKyAgICAgICAgdG90YWxzID0gcmVkdWNlKGxhbWJkYSB4LCB5OiAoaW50KHhb
MF0pICsgaW50KHlbMF0pLCBpbnQoeFsxXSkgKyBpbnQoeVsxXSksIGludCh4WzJdKSArIGludCh5
WzJdKSksIHRvdGFscykKKyAgICAgICAgdG90YWxzID0gbWFwKHN0ciwgdG90YWxzKQorICAgICAg
ICB0b3RhbHMgPSB0b3RhbHNbMF0gKyAiIHBhc3NlZCwgIiArIHRvdGFsc1sxXSArICIgZmFpbGVk
LCAiICsgdG90YWxzWzJdICsgIiBza2lwcGVkLiIKKyAgICAgICAgIyBDcmVhdGUgYSBoZWFkZXIg
b2YgdGhlIGh0bWwgc291cmNlLgorICAgICAgICB0eHQgPSAiIiIKKyAgICAgICAgPGh0bWw+Cisg
ICAgICAgIDxoZWFkPgorICAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgZnVuY3Rpb24gaW5p
dCgpIHsKKyAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IHN0eWxlU2hlZXQg
KHRoaXMgZG9jdW1lbnQgY291bGQgYmUgZW1iZWRkZWQgaW4gYW4gb3RoZXIgaHRtbCBkb2MpCisg
ICAgICAgICAgICAgIGZvciAoaSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCAtIDE7IGkg
Pj0gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNb
aV0uY3NzUnVsZXNbMF0uc2VsZWN0b3JUZXh0ID09ICJjYXNlLmdvb2QiKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0U3R5bGVTaGVldCA9IGk7CisgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgIC8vIFRoZSBzdHlsZVNoZWV0IGhhc24ndCBiZWVuIGZvdW5kLCBidXQgaXQgc2hvdWxkIGJl
IHRoZSBsYXN0IG9uZS4KKyAgICAgICAgICAgICAgcmVzdWx0U3R5bGVTaGVldCA9IGRvY3VtZW50
LnN0eWxlU2hlZXRzLmxlbmd0aCAtIDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgZnVuY3Rp
b24gaGlkZSgpIHsKKyAgICAgICAgICAgICAgZG9jdW1lbnQuc3R5bGVTaGVldHNbcmVzdWx0U3R5
bGVTaGVldF0uY3NzUnVsZXNbMF0uc3R5bGUuZGlzcGxheT0nbm9uZSc7CisgICAgICAgICAgfQor
CisgICAgICAgICAgZnVuY3Rpb24gc2hvdygpIHsKKyAgICAgICAgICAgICAgZG9jdW1lbnQuc3R5
bGVTaGVldHNbcmVzdWx0U3R5bGVTaGVldF0uY3NzUnVsZXNbMF0uc3R5bGUuZGlzcGxheT0nJzsK
KyAgICAgICAgICB9CisKKyAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICA8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiPgorICAgICAgICAgICAgY2FzZS5nb29kIHtjb2xvcjpibGFja30KKyAgICAg
ICAgICAgIGNhc2UuYmFkIHtjb2xvcjpibGFja30KKyAgICAgICAgICAgIHN0YXR1cy5wYXNzIHtj
b2xvcjpncmVlbn0KKyAgICAgICAgICAgIHN0YXR1cy5jcmFzaCB7Y29sb3I6cmVkfQorICAgICAg
ICAgICAgc3RhdHVzLmZhaWwge2NvbG9yOnJlZH0KKyAgICAgICAgICAgIHN0YXR1cy54cGFzcyB7
Y29sb3I6NjYzMzAwfQorICAgICAgICAgICAgc3RhdHVzLnhmYWlsIHtjb2xvcjowMDQ1MDB9Cisg
ICAgICAgICAgICBzdGF0dXMuYmVuY2htYXJrIHtjb2xvcjowMDAwODh9CisgICAgICAgICAgICBz
dGF0dXMud2FybiB7Y29sb3I6b3JhbmdlfQorICAgICAgICAgICAgc3RhdHVzLmNyYXNoIHtjb2xv
cjpyZWQ7IHRleHQtZGVjb3JhdGlvbjpibGluazsgYmFja2dyb3VuZC1jb2xvcjpibGFja30KKyAg
ICAgICAgICA8L3N0eWxlPgorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IG9ubG9hZD0i
aW5pdCgpIj4KKyAgICAgICAgPGNlbnRlcj4KKyAgICAgICAgICA8aDE+UXQncyBhdXRvdGVzdHMg
cmVzdWx0czwvaDE+JSh0b3RhbHMpczxicj4KKyAgICAgICAgICA8aHI+CisgICAgICAgICAgPGZv
cm0+CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU2hvdyBmYWlsdXJl
cyBvbmx5IiBvbmNsaWNrPSJoaWRlKCkiLz4KKyAgICAgICAgICAgICZuYnNwOworICAgICAgICAg
ICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlNob3cgYWxsIiBvbmNsaWNrPSJzaG93KCki
Lz4KKyAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvY2VudGVyPgorICAgICAgICA8aHI+Cisg
ICAgICAgICUocmVzdWx0cylzCisgICAgICAgIDwvYm9keT4KKyAgICAgICAgPC9odG1sPiIiIiAl
IHsidG90YWxzIjogdG90YWxzLCAicmVzdWx0cyI6IHR4dH0KKyAgICAgICAgcmV0dXJuIHR4dAor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgb3B0aW9ucyA9IE9wdGlvbnMoc3lz
LmFyZ3ZbMTpdKQorICAgIG1haW4gPSBNYWluKG9wdGlvbnMpCisgICAgbWFpbi5ydW4oKQo=
</data>
<flag name="review"
          id="46622"
          type_id="1"
          status="+"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="46623"
          type_id="3"
          status="-"
          setter="ossy"
    />
          </attachment>
      

    </bug>

</bugzilla>