Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cZlq1-0007jl-1E for pgadmin-hackers@arkaria.postgresql.org; Fri, 03 Feb 2017 21:56:13 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1cZlq0-0004dJ-FU for pgadmin-hackers@arkaria.postgresql.org; Fri, 03 Feb 2017 21:56:12 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1cZlpy-0004ZW-85 for pgadmin-hackers@postgresql.org; Fri, 03 Feb 2017 21:56:10 +0000 Received: from mail-qt0-x22d.google.com ([2607:f8b0:400d:c0d::22d]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1cZlpt-00052u-GO for pgadmin-hackers@postgresql.org; Fri, 03 Feb 2017 21:56:08 +0000 Received: by mail-qt0-x22d.google.com with SMTP id w20so51766173qtb.1 for ; Fri, 03 Feb 2017 13:56:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pivotal-io.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=gOi+3e8icjn+fTeuxRGjukqBA8N0orymSKZCZSrmfRo=; b=uauPb/bZjr1cOKfYujUKZu/u9cLwEVU2Zmvv8Y1w2EG/zZj6Jkwi0YM6zQVj26TatJ NHIPg0R1UhZ5sEA/ED46SWbsmSGkBYPz0etrDPXX39ku1HTyq/K4qDEebwkAk4ZwqVkN 8JqdtgeFVS1yRMyi+5mDZf7RaZbGLt968+AdAkHC9L59WSK/QWzvaXpNY6szNzP4VUlO z6bM1b7YKfCQ1VVnx1FxuloV3ZFvkHdjCRdFSGJCew90pSqnfwrl8pQbo1k3M+2ffCVB lK9ZG5Wm/+cLfsPV/8KEZkezflb9dnDaFNxUm3i/xDfh5r68gm89GG8VCA+DxEEV8uIQ 2rFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=gOi+3e8icjn+fTeuxRGjukqBA8N0orymSKZCZSrmfRo=; b=K6iTP2/dZKCMMJzq+bbASiH9yy52N+xccjTvV5Gi0Y+MMv+IJz5Wi7BKlyq3gB5uTm ImCnutY47ZN8J0eztW908KrByv3rfa/5/HjWYH7XpncTe+5FHWVZ4Qacv4xlM/vjhtGT gtWNKgeGqzUSfPmrsV+udQ+OVvLGWc5G8Z5pYl3jcq0cxqCbvxC6AM30GB43wWzqD2Cx oSkRXFA/DdimUE05nqkh/opLb3xZ+WSwzQgjcR6PXjzKBaXZDrj/wvkZ6Wnato4HNKNj gX91NJAbpgW0xr4xzXFT2z9mACULPSZS782jR0aG7AarMW1pPjFB6S75ToBWZjb+hxkS M5gw== X-Gm-Message-State: AIkVDXI8+4SkiajP0Iqb74yIgFbgAyOamifTJoJJCn3cF9Acxjt5Mb6cq8TyXnPOQ+CXWS9axQM6uXRGXUpExJVO X-Received: by 10.200.42.66 with SMTP id l2mr15358037qtl.33.1486158963290; Fri, 03 Feb 2017 13:56:03 -0800 (PST) MIME-Version: 1.0 Received: by 10.140.102.16 with HTTP; Fri, 3 Feb 2017 13:56:02 -0800 (PST) In-Reply-To: References: From: Atira Odhner Date: Fri, 3 Feb 2017 16:56:02 -0500 Message-ID: Subject: Re: Acceptance Tests against a browser (WIP) To: Dave Page Cc: George Gelashvili , pgadmin-hackers Content-Type: multipart/mixed; boundary=001a1145ed7e16d76a0547a7597c X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a1145ed7e16d76a0547a7597c Content-Type: multipart/alternative; boundary=001a1145ed7e16d7640547a7597a --001a1145ed7e16d7640547a7597a Content-Type: text/plain; charset=UTF-8 Hi Dave, Here is a new patch which includes the following: - randomized ports - delete the acceptance_test_db database in setup in case a prior run failed - fixed size browser window Cheers, Tira & George On Tue, Jan 31, 2017 at 11:25 AM, Dave Page wrote: > Hi George, > > I just tried to do some debugging of pgAdmin, and found that I > couldn't start it. On further investigation, I found that I had an > instance running in the background on my system. I'm assuming this was > started by the acceptance tests, but not shutdown. I killed it off, > and re-ran the tests only to see failures because the database and > table used in the acceptance tests were still present. When the tests > completed, pgAdmin was again left running in the background. > > I've just re-run the tests, having first killed the backgrounded > pgAdmin and then manually cleaned up the test objects. This time I do > indeed only get the two errors below when it tests the first of 3 > servers I have configured. The second and third servers get three > errors each, and pgAdmin is left running in the background again. > > So, you were right that I had another instance of pgAdmin running... > but it was tests that caused it :-p > > > > On Tue, Jan 31, 2017 at 3:10 PM, Dave Page wrote: > > Hi > > > > On Tue, Jan 31, 2017 at 2:54 PM, George Gelashvili > > wrote: > >> Hi Dave, > >> > >> We agree that a random port would be a nice addition. We think having > >> randomized test database names can lead to polluting with lots of extra > >> databases left around in the event that cleanup fails for whatever > reason > >> (e.g. a test errors out). We see this happen already with the > randomized > >> test databases you mention. We agree that there should probably be one > >> strategy across the test suite. We could use randomized names and have a > >> more general cleanup step that removes all databases of the form > "test_...". > > > > I'm very wary about doing things like that. We had an early version of > > the suite that managed to delete all databases :-/. Maybe we could use > > a patterned name, but only delete databases that also have a comment > > with some text in it that we can verify? > > > >> Dave, are those errors you saw when you shut down your application on > :5050 > >> and did a fresh run of the tests? If not, could you please do a clean > run? > >> It's possible that the second error could be related to viewport size > as you > >> suggested, but the first error just looks like a problem with the test > not > >> being able to spin up its own server. > > > > That was on a second run of the tests, yes. I just did a careful > > cleanup of left-over test databases, double-checked my server wasn't > > running and re-ran the tests - I got the same results. > > > >> > >> Thanks, > >> George & Tira > >> > >> On Tue, Jan 31, 2017 at 9:41 AM, Dave Page wrote: > >>> > >>> Hi > >>> > >>> On Mon, Jan 30, 2017 at 9:23 PM, Atira Odhner > wrote: > >>> > Here's the patch with one more fix -- cleaning up the connections > that > >>> > get > >>> > created in pgAdmin. > >>> > >>> Hmm, I had trouble with this one. I noticed a few issues: > >>> > >>> - The tests started pgAdmin listening on the default port (5050), > >>> however, I already had an instance running on there; > >>> a) It should have detected that something else was running on the > port > >>> b) Shouldn't we just use a random, unused port? > >>> > >>> - Errors were given because I already had an acceptance_test_db on a > >>> number of servers, and that contained the test table. Obviously the > >>> code now cleans up after itself, but I think we should use a random > >>> database name as the main regression tests do (they append a random > >>> number to the name iirc). > >>> > >>> - Some of the tests just seemed to time out. I *think* this might be > >>> because the test browser window opens quite narrowly, and it looks > >>> like the tests are probably trying to do things with nodes that aren't > >>> actually visible. > >>> > >>> ====================================================================== > >>> ERROR: runTest > >>> (pgadmin.acceptance.tests.connect_to_server_feature_test. > ConnectsToServerFeatureTest) > >>> ---------------------------------------------------------------------- > >>> Traceback (most recent call last): > >>> File > >>> "/Users/dpage/git/pgadmin4/web/pgadmin/acceptance/tests/ > connect_to_server_feature_test.py", > >>> line 69, in tearDown > >>> self.app_starter.stop_app() > >>> File "/Users/dpage/git/pgadmin4/web/regression/utils/app_ > starter.py", > >>> line 27, in stop_app > >>> os.killpg(os.getpgid(self.pgadmin_process.pid), signal.SIGTERM) > >>> OSError: [Errno 3] No such process > >>> > >>> ====================================================================== > >>> ERROR: runTest > >>> (pgadmin.acceptance.tests.sql_template_selection_by_ > postgres_version_works_feature_test.SQLTemplateSelectionByPostgres > VersionWorksFeatureTest) > >>> ---------------------------------------------------------------------- > >>> Traceback (most recent call last): > >>> File > >>> "/Users/dpage/git/pgadmin4/web/pgadmin/acceptance/tests/ > sql_template_selection_by_postgres_version_works_feature_test.py", > >>> line 37, in runTest > >>> self.page.find_by_xpath("//*[@id='tree']//*[@class='aciTreeText' > >>> and .='Trigger Functions']").click() > >>> File "/Users/dpage/git/pgadmin4/web/regression/utils/pgadmin_ > page.py", > >>> line 45, in find_by_xpath > >>> return self.wait_for_element(lambda: > >>> self.driver.find_element_by_xpath(xpath)) > >>> File "/Users/dpage/git/pgadmin4/web/regression/utils/pgadmin_ > page.py", > >>> line 72, in wait_for_element > >>> return self._wait_for("element to exist", element_if_it_exists) > >>> File "/Users/dpage/git/pgadmin4/web/regression/utils/pgadmin_ > page.py", > >>> line 106, in _wait_for > >>> raise RuntimeError("timed out waiting for " + waiting_for_message) > >>> RuntimeError: timed out waiting for element to exist > >>> > >>> ====================================================================== > >>> ERROR: runTest > >>> (pgadmin.acceptance.tests.sql_template_selection_by_ > postgres_version_works_feature_test.SQLTemplateSelectionByPostgres > VersionWorksFeatureTest) > >>> ---------------------------------------------------------------------- > >>> Traceback (most recent call last): > >>> File > >>> "/Users/dpage/git/pgadmin4/web/pgadmin/acceptance/tests/ > sql_template_selection_by_postgres_version_works_feature_test.py", > >>> line 60, in tearDown > >>> self.page.find_by_xpath("//button[contains(.,'Cancel')]").click() > >>> File "/Users/dpage/git/pgadmin4/web/regression/utils/pgadmin_ > page.py", > >>> line 45, in find_by_xpath > >>> return self.wait_for_element(lambda: > >>> self.driver.find_element_by_xpath(xpath)) > >>> File "/Users/dpage/git/pgadmin4/web/regression/utils/pgadmin_ > page.py", > >>> line 72, in wait_for_element > >>> return self._wait_for("element to exist", element_if_it_exists) > >>> File "/Users/dpage/git/pgadmin4/web/regression/utils/pgadmin_ > page.py", > >>> line 106, in _wait_for > >>> raise RuntimeError("timed out waiting for " + waiting_for_message) > >>> RuntimeError: timed out waiting for element to exist > >>> > >>> ---------------------------------------------------------------------- > >>> > >>> Thanks. > >>> > >>> -- > >>> Dave Page > >>> Blog: http://pgsnake.blogspot.com > >>> Twitter: @pgsnake > >>> > >>> EnterpriseDB UK: http://www.enterprisedb.com > >>> The Enterprise PostgreSQL Company > >> > >> > > > > > > > > -- > > Dave Page > > Blog: http://pgsnake.blogspot.com > > Twitter: @pgsnake > > > > EnterpriseDB UK: http://www.enterprisedb.com > > The Enterprise PostgreSQL Company > > > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > --001a1145ed7e16d7640547a7597a Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Dave,

Here is a new patch which incl= udes the following:
- randomized ports
- delete the acc= eptance_test_db database in setup in case a prior run failed
- fi= xed size browser window

Cheers,
Tira &am= p; George

On Tue, Jan 31, 2017 at 11:25 AM, Dave Page <dpage@pgadmin.org>= wrote:
Hi George,

I just tried to do some debugging of pgAdmin, and found that I
couldn't start it. On further investigation, I found that I had an
instance running in the background on my system. I'm assuming this was<= br> started by the acceptance tests, but not shutdown. I killed it off,
and re-ran the tests only to see failures because the database and
table used in the acceptance tests were still present. When the tests
completed, pgAdmin was again left running in the background.

I've just re-run the tests, having first killed the backgrounded
pgAdmin and then manually cleaned up the test objects. This time I do
indeed only get the two errors below when it tests the first of 3
servers I have configured. The second and third servers get three
errors each, and pgAdmin is left running in the background again.

So, you were right that I had another instance of pgAdmin running...
but it was tests that caused it :-p



On Tue, Jan 31, 2017 at 3:10 PM, Dave Page <dpage@pgadmin.org> wrote:
> Hi
>
> On Tue, Jan 31, 2017 at 2:54 PM, George Gelashvili
> <ggelashvili@pivotal.io> wrote:
>> Hi Dave,
>>
>> We agree that a random port would be a nice addition. We think hav= ing
>> randomized test database names can lead to polluting with lots of = extra
>> databases left around in the event that cleanup fails for whatever= reason
>> (e.g. a test errors out).=C2=A0 We see this happen already with th= e randomized
>> test databases you mention. We agree that there should probably be= one
>> strategy across the test suite. We could use randomized names and = have a
>> more general cleanup step that removes all databases of the form &= quot;test_...".
>
> I'm very wary about doing things like that. We had an early versio= n of
> the suite that managed to delete all databases :-/. Maybe we could use=
> a patterned name, but only delete databases that also have a comment > with some text in it that we can verify?
>
>> Dave, are those errors you saw when you shut down your application= on :5050
>> and did a fresh run of the tests? If not, could you please do a cl= ean run?
>> It's possible that the second error could be related to viewpo= rt size as you
>> suggested, but the first error just looks like a problem with the = test not
>> being able to spin up its own server.
>
> That was on a second run of the tests, yes. I just did a careful
> cleanup of left-over test databases, double-checked my server wasn'= ;t
> running and re-ran the tests - I got the same results.
>
>>
>> Thanks,
>> George & Tira
>>
>> On Tue, Jan 31, 2017 at 9:41 AM, Dave Page <
dpage@pgadmin.org> wrote:
>>>
>>> Hi
>>>
>>> On Mon, Jan 30, 2017 at 9:23 PM, Atira Odhner <aodhner@pivotal.io> wrote:
>>> > Here's the patch with one more fix -- cleaning up the= connections that
>>> > get
>>> > created in pgAdmin.
>>>
>>> Hmm, I had trouble with this one. I noticed a few issues:
>>>
>>> - The tests started pgAdmin listening on the default port (505= 0),
>>> however, I already had an instance running on there;
>>>=C2=A0 =C2=A0 =C2=A0a) It should have detected that something e= lse was running on the port
>>>=C2=A0 =C2=A0 =C2=A0b) Shouldn't we just use a random, unus= ed port?
>>>
>>> - Errors were given because I already had an acceptance_test_d= b on a
>>> number of servers, and that contained the test table. Obviousl= y the
>>> code now cleans up after itself, but I think we should use a r= andom
>>> database name as the main regression tests do (they append a r= andom
>>> number to the name iirc).
>>>
>>> - Some of the tests just seemed to time out. I *think* this mi= ght be
>>> because the test browser window opens quite narrowly, and it l= ooks
>>> like the tests are probably trying to do things with nodes tha= t aren't
>>> actually visible.
>>>
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>>> ERROR: runTest
>>> (pgadmin.acceptance.tests.connect_to_server_feature_= test.ConnectsToServerFeatureTest)
>>> ---------------------------------------------------------= -------------
>>> Traceback (most recent call last):
>>>=C2=A0 =C2=A0File
>>> "/Users/dpage/git/pgadmin4/web/pgadmin/acceptance/te= sts/connect_to_server_feature_test.py",
>>> line 69, in tearDown
>>>=C2=A0 =C2=A0 =C2=A0self.app_starter.stop_app()
>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regr= ession/utils/app_starter.py",
>>> line 27, in stop_app
>>>=C2=A0 =C2=A0 =C2=A0os.killpg(os.getpgid(self.pgadmin_proc= ess.pid), signal.SIGTERM)
>>> OSError: [Errno 3] No such process
>>>
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>>> ERROR: runTest
>>> (pgadmin.acceptance.tests.sql_template_selection_by_= postgres_version_works_feature_test.SQLTemplateSelectionByPostgre= sVersionWorksFeatureTest)
>>> ---------------------------------------------------------= -------------
>>> Traceback (most recent call last):
>>>=C2=A0 =C2=A0File
>>> "/Users/dpage/git/pgadmin4/web/pgadmin/acceptance/te= sts/sql_template_selection_by_postgres_version_works_feature= _test.py",
>>> line 37, in runTest
>>>=C2=A0 =C2=A0 =C2=A0self.page.find_by_xpath("//*[@id= =3D'tree']//*[@class=3D'aciTreeText'
>>> and .=3D'Trigger Functions']").click()
>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regr= ession/utils/pgadmin_page.py",
>>> line 45, in find_by_xpath
>>>=C2=A0 =C2=A0 =C2=A0return self.wait_for_element(lambda:
>>> self.driver.find_element_by_xpath(xpath))
>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regr= ession/utils/pgadmin_page.py",
>>> line 72, in wait_for_element
>>>=C2=A0 =C2=A0 =C2=A0return self._wait_for("element to exis= t", element_if_it_exists)
>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regr= ession/utils/pgadmin_page.py",
>>> line 106, in _wait_for
>>>=C2=A0 =C2=A0 =C2=A0raise RuntimeError("timed out waiting = for " + waiting_for_message)
>>> RuntimeError: timed out waiting for element to exist
>>>
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>>> ERROR: runTest
>>> (pgadmin.acceptance.tests.sql_template_selection_by_= postgres_version_works_feature_test.SQLTemplateSelectionByPostgre= sVersionWorksFeatureTest)
>>> ---------------------------------------------------------= -------------
>>> Traceback (most recent call last):
>>>=C2=A0 =C2=A0File
>>> "/Users/dpage/git/pgadmin4/web/pgadmin/acceptance/te= sts/sql_template_selection_by_postgres_version_works_feature= _test.py",
>>> line 60, in tearDown
>>>=C2=A0 =C2=A0 =C2=A0self.page.find_by_xpath("//button= [contains(.,'Cancel')]").click()
>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regr= ession/utils/pgadmin_page.py",
>>> line 45, in find_by_xpath
>>>=C2=A0 =C2=A0 =C2=A0return self.wait_for_element(lambda:
>>> self.driver.find_element_by_xpath(xpath))
>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regr= ession/utils/pgadmin_page.py",
>>> line 72, in wait_for_element
>>>=C2=A0 =C2=A0 =C2=A0return self._wait_for("element to exis= t", element_if_it_exists)
>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regr= ession/utils/pgadmin_page.py",
>>> line 106, in _wait_for
>>>=C2=A0 =C2=A0 =C2=A0raise RuntimeError("timed out waiting = for " + waiting_for_message)
>>> RuntimeError: timed out waiting for element to exist
>>>
>>> ---------------------------------------------------------= -------------
>>>
>>> Thanks.
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EnterpriseDB UK: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>
>>
>
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company



--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--001a1145ed7e16d7640547a7597a-- --001a1145ed7e16d76a0547a7597c Content-Type: text/plain; charset=US-ASCII; name="acceptance_with_random_ports.diff" Content-Disposition: attachment; filename="acceptance_with_random_ports.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iyqchuxi0 ZGlmZiAtLWdpdCBhL3JlcXVpcmVtZW50c19weTIudHh0IGIvcmVxdWlyZW1l bnRzX3B5Mi50eHQKaW5kZXggNGZiMDU4OTEuLjk5OGNkYWJmIDEwMDY0NAot LS0gYS9yZXF1aXJlbWVudHNfcHkyLnR4dAorKysgYi9yZXF1aXJlbWVudHNf cHkyLnR4dApAQCAtMzYsNiArMzYsNyBAQCB0ZXN0c2NlbmFyaW9zPT0wLjUu MAogdGVzdHRvb2xzPT0yLjAuMAogdHJhY2ViYWNrMj09MS40LjAKIHVuaXR0 ZXN0Mj09MS4xLjAKK3NlbGVuaXVtPT0zLjAuMgogV2Vya3pldWc9PTAuOS42 CiBXVEZvcm1zPT0yLjAuMgogc3FscGFyc2U9PTAuMS4xOQpkaWZmIC0tZ2l0 IGEvcmVxdWlyZW1lbnRzX3B5My50eHQgYi9yZXF1aXJlbWVudHNfcHkzLnR4 dAppbmRleCBjNDQ5MGY1Mi4uMjIzOWRlNjMgMTAwNjQ0Ci0tLSBhL3JlcXVp cmVtZW50c19weTMudHh0CisrKyBiL3JlcXVpcmVtZW50c19weTMudHh0CkBA IC0zNSw2ICszNSw3IEBAIHRlc3RzY2VuYXJpb3M9PTAuNS4wCiB0ZXN0dG9v bHM9PTIuMC4wCiB0cmFjZWJhY2syPT0xLjQuMAogdW5pdHRlc3QyPT0xLjEu MAorc2VsZW5pdW09PTMuMC4yCiBXZXJremV1Zz09MC45LjYKIFdURm9ybXM9 PTIuMC4yCiBzcWxwYXJzZT09MC4xLjE5CmRpZmYgLS1naXQgYS93ZWIvcGdB ZG1pbjQucHkgYi93ZWIvcGdBZG1pbjQucHkKaW5kZXggNjg4NDhjMDAuLjk1 ZTY3NWI3IDEwMDY0NAotLS0gYS93ZWIvcGdBZG1pbjQucHkKKysrIGIvd2Vi L3BnQWRtaW40LnB5CkBAIC01OSw2ICs1OSwxMiBAQCBpZiAnUEdBRE1JTl9Q T1JUJyBpbiBnbG9iYWxzKCk6CiAgICAgICAgICAgICAgICAgICAgICBnbG9i YWxzKClbJ1BHQURNSU5fUE9SVCddKQogICAgIHNlcnZlcl9wb3J0ID0gaW50 KGdsb2JhbHMoKVsnUEdBRE1JTl9QT1JUJ10pCiAgICAgUEdBRE1JTl9SVU5U SU1FID0gVHJ1ZQorZWxpZiAnUEdBRE1JTl9QT1JUJyBpbiBvcy5lbnZpcm9u OgorICAgIHBvcnQgPSBvcy5lbnZpcm9uWydQR0FETUlOX1BPUlQnXQorICAg IGFwcC5sb2dnZXIuZGVidWcoCisgICAgICAgICdOb3QgcnVubmluZyB1bmRl ciB0aGUgZGVza3RvcCBydW50aW1lLCBwb3J0OiAlcycsCisgICAgICAgIHBv cnQpCisgICAgc2VydmVyX3BvcnQgPSBpbnQocG9ydCkKIGVsc2U6CiAgICAg YXBwLmxvZ2dlci5kZWJ1ZygKICAgICAgICAgJ05vdCBydW5uaW5nIHVuZGVy IHRoZSBkZXNrdG9wIHJ1bnRpbWUsIHBvcnQ6ICVzJywKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL2FjY2VwdGFuY2UvX19pbml0X18ucHkgYi93ZWIvcGdh ZG1pbi9hY2NlcHRhbmNlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwLi5lNjlkZTI5YgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vYWNjZXB0YW5jZS90ZXN0cy9fX2luaXRfXy5weSBiL3dlYi9w Z2FkbWluL2FjY2VwdGFuY2UvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmU2OWRlMjliCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9hY2NlcHRhbmNlL3Rlc3RzL2Nvbm5lY3RfdG9f c2VydmVyX2ZlYXR1cmVfdGVzdC5weSBiL3dlYi9wZ2FkbWluL2FjY2VwdGFu Y2UvdGVzdHMvY29ubmVjdF90b19zZXJ2ZXJfZmVhdHVyZV90ZXN0LnB5Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iNTQ2OTZmNgot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2FjY2VwdGFuY2UvdGVz dHMvY29ubmVjdF90b19zZXJ2ZXJfZmVhdHVyZV90ZXN0LnB5CkBAIC0wLDAg KzEsNzMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0g UG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAy MDE3LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29m dHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5j ZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW1wb3J0IHRpbWUKKworZnJv bSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCitmcm9tIHNlbGVuaXVtLmNv bW1vbi5leGNlcHRpb25zIGltcG9ydCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9u Citmcm9tIHNlbGVuaXVtLndlYmRyaXZlciBpbXBvcnQgQWN0aW9uQ2hhaW5z CisKK2Zyb20gcGdhZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RH ZW5lcmF0b3IKKworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworaW1w b3J0IHNpZ25hbAoraW1wb3J0IGNvbmZpZyBhcyBhcHBfY29uZmlnCitmcm9t IHJlZ3Jlc3Npb24gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gcmVncmVzc2lv bi51dGlscy5hcHBfc3RhcnRlciBpbXBvcnQgQXBwU3RhcnRlcgorZnJvbSBy ZWdyZXNzaW9uLnV0aWxzLnBnYWRtaW5fcGFnZSBpbXBvcnQgUGdhZG1pblBh Z2UKKworCitjbGFzcyBDb25uZWN0c1RvU2VydmVyRmVhdHVyZVRlc3QoQmFz ZVRlc3RHZW5lcmF0b3IpOgorICAgICIiIgorICAgIFRlc3RzIHRoYXQgYSBk YXRhYmFzZSBjb25uZWN0aW9uIGNhbiBiZSBjcmVhdGVkIGZyb20gdGhlIFVJ CisgICAgIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlm IGFwcF9jb25maWcuU0VSVkVSX01PREU6CisgICAgICAgICAgICBzZWxmLnNr aXBUZXN0KCJDdXJyZW50bHksIGNvbmZpZyBpcyBzZXQgdG8gc3RhcnQgcGdh ZG1pbiBpbiBzZXJ2ZXIgbW9kZS4gIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAiVGhpcyB0ZXN0IGRvZXNuJ3Qga25vdyB1c2VybmFtZSBhbmQgcGFz c3dvcmQgc28gZG9lc24ndCB3b3JrIGluIHNlcnZlciBtb2RlIikKKworICAg ICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKCkKKyAgICAgICAgc2Vs Zi5hcHBfc3RhcnRlciA9IEFwcFN0YXJ0ZXIoZHJpdmVyLCBhcHBfY29uZmln KQorICAgICAgICBzZWxmLnBhZ2UgPSBQZ2FkbWluUGFnZShkcml2ZXIsIGFw cF9jb25maWcpCisKKyAgICAgICAgc2VsZi5hcHBfc3RhcnRlci5zdGFydF9h cHAoKQorICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfYXBwKCkKKworCisg ICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoYXBwX2NvbmZpZy5BUFBfTkFNRSwgc2VsZi5wYWdlLmRyaXZlci50aXRs ZSkKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3NwaW5uZXJfdG9fZGlz YXBwZWFyKCkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgi Ly8qW0BjbGFzcz0nYWNpVHJlZVRleHQnIGFuZCAuPSdTZXJ2ZXJzJ10iKS5j bGljaygpCisgICAgICAgIHNlbGYucGFnZS5kcml2ZXIuZmluZF9lbGVtZW50 X2J5X2xpbmtfdGV4dCgiT2JqZWN0IikuY2xpY2soKQorICAgICAgICBBY3Rp b25DaGFpbnMoc2VsZi5wYWdlLmRyaXZlcikgXAorICAgICAgICAgICAgLm1v dmVfdG9fZWxlbWVudChzZWxmLnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVudF9i eV9saW5rX3RleHQoIkNyZWF0ZSIpKSBcCisgICAgICAgICAgICAucGVyZm9y bSgpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X3BhcnRpYWxfbGlua190 ZXh0KCJTZXJ2ZXIuLi4iKS5jbGljaygpCisKKyAgICAgICAgc2VydmVyX2Nv bmZpZyA9IHNlbGYuc2VydmVyCisgICAgICAgIHNlbGYucGFnZS5maWxsX2lu cHV0X2J5X2ZpZWxkX25hbWUoIm5hbWUiLCBzZXJ2ZXJfY29uZmlnWyduYW1l J10pCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X3BhcnRpYWxfbGlua190 ZXh0KCJDb25uZWN0aW9uIikuY2xpY2soKQorICAgICAgICBzZWxmLnBhZ2Uu ZmlsbF9pbnB1dF9ieV9maWVsZF9uYW1lKCJob3N0Iiwgc2VydmVyX2NvbmZp Z1snaG9zdCddKQorICAgICAgICBzZWxmLnBhZ2UuZmlsbF9pbnB1dF9ieV9m aWVsZF9uYW1lKCJwb3J0Iiwgc2VydmVyX2NvbmZpZ1sncG9ydCddKQorICAg ICAgICBzZWxmLnBhZ2UuZmlsbF9pbnB1dF9ieV9maWVsZF9uYW1lKCJ1c2Vy bmFtZSIsIHNlcnZlcl9jb25maWdbJ3VzZXJuYW1lJ10pCisgICAgICAgIHNl bGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoInBhc3N3b3JkIiwg c2VydmVyX2NvbmZpZ1snZGJfcGFzc3dvcmQnXSkKKyAgICAgICAgc2VsZi5w YWdlLmZpbmRfYnlfeHBhdGgoIi8vYnV0dG9uW2NvbnRhaW5zKC4sJ1NhdmUn KV0iKS5jbGljaygpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfeHBh dGgoIi8vKltAaWQ9J3RyZWUnXS8vKlsuPSciICsgc2VydmVyX2NvbmZpZ1sn bmFtZSddICsgIiddIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAg ICAgICAgc2VsZi5wYWdlLnJlbW92ZV9zZXJ2ZXIoc2VsZi5zZXJ2ZXIpCisg ICAgICAgIHNlbGYuYXBwX3N0YXJ0ZXIuc3RvcF9hcHAoKQorCisgICAgZGVm IGZhaWx1cmVFeGNlcHRpb24oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAg ICAgICAgc2VsZi5wYWdlLmRyaXZlci5zYXZlX3NjcmVlbnNob3QoJy90bXAv cGdhZG1pbl9jb25uZWN0X3RvX3NlcnZlcl90ZXN0X2ZhaWx1cmUucG5nJykK KyAgICAgICAgcmV0dXJuIEFzc2VydGlvbkVycm9yKCphcmdzLCAqKmt3YXJn cykKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2FjY2VwdGFuY2UvdGVzdHMv c3FsX3RlbXBsYXRlX3NlbGVjdGlvbl9ieV9wb3N0Z3Jlc192ZXJzaW9uX3dv cmtzX2ZlYXR1cmVfdGVzdC5weSBiL3dlYi9wZ2FkbWluL2FjY2VwdGFuY2Uv dGVzdHMvc3FsX3RlbXBsYXRlX3NlbGVjdGlvbl9ieV9wb3N0Z3Jlc192ZXJz aW9uX3dvcmtzX2ZlYXR1cmVfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMC4uNjViOTZlYWUKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9hY2NlcHRhbmNlL3Rlc3RzL3NxbF90ZW1wbGF0ZV9z ZWxlY3Rpb25fYnlfcG9zdGdyZXNfdmVyc2lvbl93b3Jrc19mZWF0dXJlX3Rl c3QucHkKQEAgLTAsMCArMSw3OCBAQAorZnJvbSBzZWxlbml1bSBpbXBvcnQg d2ViZHJpdmVyCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlciBpbXBvcnQgQWN0 aW9uQ2hhaW5zCisKK2ltcG9ydCBjb25maWcgYXMgYXBwX2NvbmZpZworZnJv bSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBCYXNlVGVzdEdlbmVyYXRv cgorZnJvbSByZWdyZXNzaW9uIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIHJl Z3Jlc3Npb24udXRpbHMuYXBwX3N0YXJ0ZXIgaW1wb3J0IEFwcFN0YXJ0ZXIK K2Zyb20gcmVncmVzc2lvbi51dGlscy5wZ2FkbWluX3BhZ2UgaW1wb3J0IFBn YWRtaW5QYWdlCisKKworY2xhc3MgU1FMVGVtcGxhdGVTZWxlY3Rpb25CeVBv c3RncmVzVmVyc2lvbldvcmtzRmVhdHVyZVRlc3QoQmFzZVRlc3RHZW5lcmF0 b3IpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgYXBwX2Nv bmZpZy5TRVJWRVJfTU9ERToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3Qo IkN1cnJlbnRseSwgY29uZmlnIGlzIHNldCB0byBzdGFydCBwZ2FkbWluIGlu IHNlcnZlciBtb2RlLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJU aGlzIHRlc3QgZG9lc24ndCBrbm93IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBz byBkb2Vzbid0IHdvcmsgaW4gc2VydmVyIG1vZGUiKQorCisgICAgICAgIGRy aXZlciA9IHdlYmRyaXZlci5DaHJvbWUoKQorICAgICAgICBzZWxmLmFwcF9z dGFydGVyID0gQXBwU3RhcnRlcihkcml2ZXIsIGFwcF9jb25maWcpCisgICAg ICAgIHNlbGYucGFnZSA9IFBnYWRtaW5QYWdlKGRyaXZlciwgYXBwX2NvbmZp ZykKKworICAgICAgICBjb25uZWN0aW9uID0gdGVzdF91dGlscy5nZXRfZGJf Y29ubmVjdGlvbihzZWxmLnNlcnZlclsnZGInXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2 ZXJbJ3VzZXJuYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyWydkYl9wYXNzd29y ZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLnNlcnZlclsnaG9zdCddLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNl cnZlclsncG9ydCddKQorICAgICAgICB0ZXN0X3V0aWxzLmRyb3BfZGF0YWJh c2UoY29ubmVjdGlvbiwgImFjY2VwdGFuY2VfdGVzdF9kYiIpCisKKyAgICAg ICAgdGVzdF91dGlscy5jcmVhdGVfZGF0YWJhc2Uoc2VsZi5zZXJ2ZXIsICJh Y2NlcHRhbmNlX3Rlc3RfZGIiKQorCisgICAgICAgIHNlbGYuYXBwX3N0YXJ0 ZXIuc3RhcnRfYXBwKCkKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX2Fw cCgpCisKKyAgICAgICAgc2VsZi5wYWdlLmFkZF9zZXJ2ZXIoc2VsZi5zZXJ2 ZXIpCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgdGVzdF91 dGlscy5jcmVhdGVfdGFibGUoc2VsZi5zZXJ2ZXIsICJhY2NlcHRhbmNlX3Rl c3RfZGIiLCAidGVzdF90YWJsZSIpCisKKyAgICAgICAgc2VsZi5wYWdlLnRv Z2dsZV9vcGVuX3RyZWVfaXRlbShzZWxmLnNlcnZlclsnbmFtZSddKQorICAg ICAgICBzZWxmLnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9pdGVtKCdEYXRhYmFz ZXMnKQorICAgICAgICBzZWxmLnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9pdGVt KCdhY2NlcHRhbmNlX3Rlc3RfZGInKQorICAgICAgICBzZWxmLnBhZ2UudG9n Z2xlX29wZW5fdHJlZV9pdGVtKCdTY2hlbWFzJykKKyAgICAgICAgc2VsZi5w YWdlLnRvZ2dsZV9vcGVuX3RyZWVfaXRlbSgncHVibGljJykKKyAgICAgICAg c2VsZi5wYWdlLmZpbmRfYnlfeHBhdGgoIi8vKltAaWQ9J3RyZWUnXS8vKltA Y2xhc3M9J2FjaVRyZWVUZXh0JyBhbmQgLj0nVHJpZ2dlciBGdW5jdGlvbnMn XSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfcGFydGlh bF9saW5rX3RleHQoIk9iamVjdCIpLmNsaWNrKCkKKyAgICAgICAgQWN0aW9u Q2hhaW5zKHNlbGYucGFnZS5kcml2ZXIpIFwKKyAgICAgICAgICAgIC5tb3Zl X3RvX2VsZW1lbnQoc2VsZi5wYWdlLmRyaXZlci5maW5kX2VsZW1lbnRfYnlf bGlua190ZXh0KCJDcmVhdGUiKSkgXAorICAgICAgICAgICAgLnBlcmZvcm0o KQorICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9wYXJ0aWFsX2xpbmtfdGV4 dCgiVHJpZ2dlciBmdW5jdGlvbi4uLiIpLmNsaWNrKCkKKyAgICAgICAgc2Vs Zi5wYWdlLmZpbGxfaW5wdXRfYnlfZmllbGRfbmFtZSgibmFtZSIsICJ0ZXN0 LXRyaWdnZXItZnVuY3Rpb24iKQorICAgICAgICBzZWxmLnBhZ2UuZmluZF9i eV9wYXJ0aWFsX2xpbmtfdGV4dCgiRGVmaW5pdGlvbiIpLmNsaWNrKCkKKyAg ICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgoCisi IiJDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBsb2dfbGFzdF9uYW1lX2No YW5nZXMoKQorUkVUVVJOUyBUUklHR0VSIEFTCiskQk9EWSQKK0JFR0lOCisK K0VORDsKKyRCT0RZJAorIiIiCisgICAgICAgICkKKyAgICAgICAgc2VsZi5w YWdlLmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIlNRTCIpLmNsaWNrKCkK KworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgiLy8qW2NvbnRh aW5zKEBjbGFzcywnQ29kZU1pcnJvci1saW5lcycpIGFuZCBjb250YWlucygu LCdMRUFLUFJPT0YnKV0iKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgor ICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgiLy9idXR0b25bY29u dGFpbnMoLiwnQ2FuY2VsJyldIikuY2xpY2soKQorICAgICAgICBzZWxmLnBh Z2UucmVtb3ZlX3NlcnZlcihzZWxmLnNlcnZlcikKKyAgICAgICAgc2VsZi5h cHBfc3RhcnRlci5zdG9wX2FwcCgpCisgICAgICAgIGNvbm5lY3Rpb24gPSB0 ZXN0X3V0aWxzLmdldF9kYl9jb25uZWN0aW9uKHNlbGYuc2VydmVyWydkYidd LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWxmLnNlcnZlclsndXNlcm5hbWUnXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5z ZXJ2ZXJbJ2RiX3Bhc3N3b3JkJ10sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyWydob3N0 J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNlbGYuc2VydmVyWydwb3J0J10pCisgICAgICAgIHRlc3Rf dXRpbHMuZHJvcF9kYXRhYmFzZShjb25uZWN0aW9uLCAiYWNjZXB0YW5jZV90 ZXN0X2RiIikKKworICAgIGRlZiBmYWlsdXJlRXhjZXB0aW9uKHNlbGYsICph cmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucGFnZS5kcml2ZXIuc2F2 ZV9zY3JlZW5zaG90KCcvdG1wL3BnYWRtaW5fc3FsX3RlbXBsYXRlX3NlbGVj dGlvbl9mYWlsdXJlLnBuZycpCisgICAgICAgIHJldHVybiBBc3NlcnRpb25F cnJvcigqYXJncywgKiprd2FyZ3MpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi91dGlscy9yb3V0ZS5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL3JvdXRlLnB5 CmluZGV4IGYxOGQyYzE4Li45OTY4OTJhNiAxMDA2NDQKLS0tIGEvd2ViL3Bn YWRtaW4vdXRpbHMvcm91dGUucHkKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMv cm91dGUucHkKQEAgLTU0LDI3ICs1NCwyMyBAQCBjbGFzcyBUZXN0c0dlbmVy YXRvclJlZ2lzdHJ5KEFCQ01ldGEpOgogICAgICAgICBBQkNNZXRhLl9faW5p dF9fKGNscywgbmFtZSwgYmFzZXMsIGQpCiAKICAgICBAY2xhc3NtZXRob2QK LSAgICBkZWYgbG9hZF9nZW5lcmF0b3JzKGNscywgcGtnKToKKyAgICBkZWYg bG9hZF9nZW5lcmF0b3JzKGNscywgcGtnX3Jvb3QsIGV4Y2x1ZGVfcGtncyk6 CiAKICAgICAgICAgY2xzLnJlZ2lzdHJ5ID0gZGljdCgpCiAKKyAgICAgICAg YWxsX21vZHVsZXMgPSBbXQorCisgICAgICAgIGFsbF9tb2R1bGVzICs9IGZp bmRfbW9kdWxlcyhwa2dfcm9vdCwgRmFsc2UsIFRydWUpCisKICAgICAgICAg IyBDaGVjayBmb3IgU0VSVkVSIG1vZGUKLSAgICAgICAgaWYgY29uZmlnLlNF UlZFUl9NT0RFOgotICAgICAgICAgICAgZm9yIG1vZHVsZV9uYW1lIGluIGZp bmRfbW9kdWxlcyhwa2csIEZhbHNlLCBUcnVlKToKLSAgICAgICAgICAgICAg ICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlmICJ0ZXN0cy4iIGluIHN0 cihtb2R1bGVfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBv cnRfbW9kdWxlKG1vZHVsZV9uYW1lKQotICAgICAgICAgICAgICAgIGV4Y2Vw dCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNr LnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgIGVsc2U6Ci0g ICAgICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gZmluZF9tb2R1bGVzKHBr ZywgRmFsc2UsIFRydWUpOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAg ICAgICAgICAgICAgICAgIyBFeGNsdWRlIHRoZSB0ZXN0IGNhc2VzIGluIGJy b3dzZXIgbm9kZSBpZiBTRVJWRVJfTU9ERQotICAgICAgICAgICAgICAgICAg ICAjIGlzIEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIGlmICJwZ2FkbWlu LmJyb3dzZXIudGVzdHMiIG5vdCBpbiBtb2R1bGVfbmFtZToKLSAgICAgICAg ICAgICAgICAgICAgICAgIGltcG9ydF9tb2R1bGUobW9kdWxlX25hbWUpCi0g ICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAg ICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVy cikKKyAgICAgICAgZm9yIG1vZHVsZV9uYW1lIGluIGFsbF9tb2R1bGVzOgor ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmICJ0ZXN0cy4i IGluIHN0cihtb2R1bGVfbmFtZSkgYW5kIG5vdCBhbnkoCisgICAgICAgICAg ICAgICAgICAgICAgICBzdHIobW9kdWxlX25hbWUpLnN0YXJ0c3dpdGgoJ3Bn YWRtaW4uJyArIHN0cihleGNsdWRlX3BrZykpIGZvciBleGNsdWRlX3BrZyBp biBleGNsdWRlX3BrZ3MKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAg ICAgICAgICAgICBpbXBvcnRfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgICAg ICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHRy YWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3RkZXJyKQogCiAKIGltcG9y dCBzaXgKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uLy5naXRpZ25vcmUg Yi93ZWIvcmVncmVzc2lvbi8uZ2l0aWdub3JlCmluZGV4IDA1ODE4MTBiLi43 MjNmY2U3ZSAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vLmdpdGlnbm9y ZQorKysgYi93ZWIvcmVncmVzc2lvbi8uZ2l0aWdub3JlCkBAIC0xLDQgKzEs NSBAQAogcGFyZW50X2lkLnBrbAogcmVncmVzc2lvbi5sb2cKK3Rlc3RfZ3Jl ZW5wbHVtX2NvbmZpZy5qc29uCiB0ZXN0X2FkdmFuY2VkX2NvbmZpZy5qc29u CiB0ZXN0X2NvbmZpZy5qc29uCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lv bi9SRUFETUUgYi93ZWIvcmVncmVzc2lvbi9SRUFETUUKaW5kZXggOGNjMjk5 ODcuLjViMDc3ZDgxIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9SRUFE TUUKKysrIGIvd2ViL3JlZ3Jlc3Npb24vUkVBRE1FCkBAIC0xMDMsNiArMTAz LDEwIEBAIFRlc3QgRGF0YSBEZXRhaWxzCiBFeGVjdXRpb246CiAtLS0tLS0t LS0tLQogCistIEZvciBhY2NlcHRhbmNlIHRlc3RzIHRvIHJ1biBhcyBwYXJ0 IG9mIHRoZSBlbnRpcmUgdGVzdCBzdWl0ZSwgQ2hyb21lIGFuZCBjaHJvbWVk cml2ZXIgbmVlZCB0byBiZSBpbnN0YWxsZWQ6CisgIGdldCBjaHJvbWVkcml2 ZXIgZnJvbSBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5v cmcvY2hyb21lZHJpdmVyL2Rvd25sb2FkcyBvciBhIHBhY2thZ2UgbWFuYWdl cgorICBhbmQgbWFrZSBzdXJlIGl0IGlzIG9uIHRoZSBQQVRICisKIC0gVGhl IHRlc3QgZnJhbWV3b3JrIGlzIG1vZHVsYXIgYW5kIHBsdWdnYWJsZSBhbmQg ZHluYW1pY2FsbHkgbG9jYXRlcyB0ZXN0cwogICBmb3IgbW9kdWxlcyB3aGlj aCBhcmUgZGlzY292ZXJlZCBhdCBydW50aW1lLiBBbGwgdGVzdCBjYXNlcyBh cmUgZm91bmQKICAgYW5kIHJlZ2lzdGVyZWQgYXV0b21hdGljYWxseSBieSBp dHMgbW9kdWxlIG5hbWUgaW4KQEAgLTEyMiwzICsxMjYsOCBAQCBFeGVjdXRp b246CiAKICAgICAgRXhhbXBsZSAyKSBSdW4gdGVzdCBmcmFtZXdvcmsgZm9y ICdkYXRhYmFzZScgbm9kZQogICAgICBydW4gJ3B5dGhvbiBydW50ZXN0cy5w eSAtLXBrZyBicm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFz ZXMnCisKKy0gRXhjbHVkZSBhIHBhY2thZ2UgYW5kIGl0cyBzdWJwYWNrYWdl cyB3aGVuIHJ1bm5pbmcgdGVzdHM6CisKKyAgICBFeGFtcGxlOiBleGNsdWRl IGFjY2VwdGFuY2UgdGVzdHMgYnV0IHJ1biBhbGwgb3RoZXJzOgorICAgIHJ1 biAncHl0aG9uIHJ1bnRlc3RzLnB5IC0tZXhjbHVkZSBhY2NlcHRhbmNlJwpk aWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vcnVudGVzdHMucHkgYi93ZWIv cmVncmVzc2lvbi9ydW50ZXN0cy5weQppbmRleCAyNzJlMzgwMi4uN2IxYmY1 NDMgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5Cisr KyBiL3dlYi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5CkBAIC0xMzgsMTIgKzEz OCwyMCBAQCBkZWYgZ2V0X3Rlc3RfbW9kdWxlcyhhcmd1bWVudHMpOgogCiAg ICAgZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBUZXN0c0dlbmVy YXRvclJlZ2lzdHJ5CiAKKyAgICBleGNsdWRlX3BrZ3MgPSBbXQorCisgICAg aWYgbm90IGNvbmZpZy5TRVJWRVJfTU9ERToKKyAgICAgICAgZXhjbHVkZV9w a2dzLmFwcGVuZCgiYnJvd3Nlci50ZXN0cyIpCisgICAgaWYgJ2V4Y2x1ZGUn IGluIGFyZ3VtZW50czoKKyAgICAgICAgZXhjbHVkZV9wa2dzLmFwcGVuZChh cmd1bWVudHNbJ2V4Y2x1ZGUnXSkKKwogICAgICMgTG9hZCB0aGUgdGVzdCBt b2R1bGVzIHdoaWNoIGFyZSBpbiBnaXZlbiBwYWNrYWdlKGkuZS4gaW4gYXJn dW1lbnRzLnBrZykKICAgICBpZiBhcmd1bWVudHNbJ3BrZyddIGlzIE5vbmUg b3IgYXJndW1lbnRzWydwa2cnXSA9PSAiYWxsIjoKLSAgICAgICAgVGVzdHNH ZW5lcmF0b3JSZWdpc3RyeS5sb2FkX2dlbmVyYXRvcnMoJ3BnYWRtaW4nKQor ICAgICAgICBUZXN0c0dlbmVyYXRvclJlZ2lzdHJ5LmxvYWRfZ2VuZXJhdG9y cygncGdhZG1pbicsIGV4Y2x1ZGVfcGtncykKICAgICBlbHNlOgogICAgICAg ICBUZXN0c0dlbmVyYXRvclJlZ2lzdHJ5LmxvYWRfZ2VuZXJhdG9ycygncGdh ZG1pbi4lcy50ZXN0cycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbJ3BrZyddKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1 bWVudHNbJ3BrZyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBleGNsdWRlX3BrZ3MpCiAKICAgICAjIFNvcnQg bW9kdWxlIGxpc3Qgc28gdGhhdCB0ZXN0IHN1aXRlIGV4ZWN1dGVzIHRoZSB0 ZXN0IGNhc2VzIHNlcXVlbnRpYWxseQogICAgIG1vZHVsZV9saXN0ID0gVGVz dHNHZW5lcmF0b3JSZWdpc3RyeS5yZWdpc3RyeS5pdGVtcygpCkBAIC0xNjQs NiArMTcyLDggQEAgZGVmIGFkZF9hcmd1bWVudHMoKToKICAgICBwYXJzZXIg PSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nVGVzdCBz dWl0ZSBmb3IgcGdBZG1pbjQnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQo Jy0tcGtnJywgaGVscD0nRXhlY3V0ZXMgdGhlIHRlc3QgY2FzZXMgb2YgcGFy dGljdWxhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJyBwYWNrYWdlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWV4 Y2x1ZGUnLCBoZWxwPSdTa2lwcyBleGVjdXRpb24gb2YgdGhlIHRlc3QgJwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nh c2VzIG9mIHBhcnRpY3VsYXIgcGFja2FnZScpCiAgICAgYXJnID0gcGFyc2Vy LnBhcnNlX2FyZ3MoKQogCiAgICAgcmV0dXJuIGFyZwpkaWZmIC0tZ2l0IGEv d2ViL3JlZ3Jlc3Npb24vdGVzdF91dGlscy5weSBiL3dlYi9yZWdyZXNzaW9u L3Rlc3RfdXRpbHMucHkKaW5kZXggMWY5ZjA1MjIuLjY4ZjM2Y2JjIDEwMDY0 NAotLS0gYS93ZWIvcmVncmVzc2lvbi90ZXN0X3V0aWxzLnB5CisrKyBiL3dl Yi9yZWdyZXNzaW9uL3Rlc3RfdXRpbHMucHkKQEAgLTEzNCw2ICsxMzQsMjQg QEAgZGVmIGNyZWF0ZV9kYXRhYmFzZShzZXJ2ZXIsIGRiX25hbWUpOgogICAg ICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVycikKIAog CitkZWYgY3JlYXRlX3RhYmxlKHNlcnZlciwgZGJfbmFtZSwgdGFibGVfbmFt ZSk6CisgICAgdHJ5OgorICAgICAgICBjb25uZWN0aW9uID0gZ2V0X2RiX2Nv bm5lY3Rpb24oZGJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlcnZlclsndXNlcm5hbWUnXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclsnZGJfcGFzc3dv cmQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlcnZlclsnaG9zdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VydmVyWydwb3J0J10pCisgICAgICAgIG9sZF9pc29s YXRpb25fbGV2ZWwgPSBjb25uZWN0aW9uLmlzb2xhdGlvbl9sZXZlbAorICAg ICAgICBjb25uZWN0aW9uLnNldF9pc29sYXRpb25fbGV2ZWwoMCkKKyAgICAg ICAgcGdfY3Vyc29yID0gY29ubmVjdGlvbi5jdXJzb3IoKQorICAgICAgICBw Z19jdXJzb3IuZXhlY3V0ZSgnJydDUkVBVEUgVEFCTEUgIiVzIiAobmFtZSBW QVJDSEFSLCB2YWx1ZSBOVU1FUklDKScnJyAlIHRhYmxlX25hbWUpCisgICAg ICAgIHBnX2N1cnNvci5leGVjdXRlKCcnJ0lOU0VSVCBJTlRPICIlcyIgVkFM VUVTICgnU29tZS1OYW1lJywgNiknJycgJSB0YWJsZV9uYW1lKQorICAgICAg ICBjb25uZWN0aW9uLnNldF9pc29sYXRpb25fbGV2ZWwob2xkX2lzb2xhdGlv bl9sZXZlbCkKKyAgICAgICAgY29ubmVjdGlvbi5jb21taXQoKQorCisgICAg ZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4 YyhmaWxlPXN5cy5zdGRlcnIpCisKIGRlZiBkcm9wX2RhdGFiYXNlKGNvbm5l Y3Rpb24sIGRhdGFiYXNlX25hbWUpOgogICAgICIiIlRoaXMgZnVuY3Rpb24g dXNlZCB0byBkcm9wIHRoZSBkYXRhYmFzZSIiIgogICAgIGlmIGRhdGFiYXNl X25hbWUgbm90IGluIFsicG9zdGdyZXMiLCAidGVtcGxhdGUxIiwgInRlbXBs YXRlMCJdOgpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vdXRpbHMvYXBw X3N0YXJ0ZXIucHkgYi93ZWIvcmVncmVzc2lvbi91dGlscy9hcHBfc3RhcnRl ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjI5 N2JkNmQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcmVncmVzc2lvbi91dGls cy9hcHBfc3RhcnRlci5weQpAQCAtMCwwICsxLDM0IEBACitpbXBvcnQgb3MK K2ltcG9ydCBzdWJwcm9jZXNzCisKK2ltcG9ydCBzaWduYWwKKworaW1wb3J0 IHJhbmRvbQorCitjbGFzcyBBcHBTdGFydGVyOgorICAgICIiIgorICAgIEhl bHBlciBmb3Igc3RhcnRpbmcgdGhlIGZ1bGwgcGdhZG1pbjQgYXBwIGFuZCBs b2FkaW5nIHRoZSBwYWdlIHZpYSBzZWxlbml1bQorICAgICIiIgorCisgICAg ZGVmIF9faW5pdF9fKHNlbGYsIGRyaXZlciwgYXBwX2NvbmZpZyk6CisgICAg ICAgIHNlbGYuZHJpdmVyID0gZHJpdmVyCisgICAgICAgIHNlbGYuYXBwX2Nv bmZpZyA9IGFwcF9jb25maWcKKworICAgIGRlZiBzdGFydF9hcHAoc2VsZik6 CisgICAgICAgIHJhbmRvbV9zZXJ2ZXJfcG9ydCA9IHN0cihyYW5kb20ucmFu ZGludCgxMDAwMCwgNjU1MzUpKQorICAgICAgICBlbnYgPSB7IlBHQURNSU5f UE9SVCI6IHJhbmRvbV9zZXJ2ZXJfcG9ydH0KKyAgICAgICAgZW52LnVwZGF0 ZShvcy5lbnZpcm9uKQorCisgICAgICAgIHNlbGYucGdhZG1pbl9wcm9jZXNz ID0gc3VicHJvY2Vzcy5Qb3BlbihbInB5dGhvbiIsICJwZ0FkbWluNC5weSIs ICJtYWdpYy1wb3J0YWwiLCByYW5kb21fc2VydmVyX3BvcnRdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hl bGw9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmVleGVjX2ZuPW9zLnNldHNpZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVy cj1vcGVuKG9zLmRldm51bGwsICd3JyksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorCisgICAg ICAgIHNlbGYuZHJpdmVyLnNldF93aW5kb3dfc2l6ZSgxMDI0LCAxMDI0KQor ICAgICAgICBwcmludCgib3BlbmluZyBicm93c2VyIikKKyAgICAgICAgc2Vs Zi5kcml2ZXIuZ2V0KCJodHRwOi8vIiArIHNlbGYuYXBwX2NvbmZpZy5ERUZB VUxUX1NFUlZFUiArICI6IiArIHJhbmRvbV9zZXJ2ZXJfcG9ydCkKKworICAg IGRlZiBzdG9wX2FwcChzZWxmKToKKyAgICAgICAgc2VsZi5kcml2ZXIuY2xv c2UoKQorICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnBnYWRt aW5fcHJvY2Vzcy5waWQpLCBzaWduYWwuU0lHVEVSTSkKZGlmZiAtLWdpdCBh L3dlYi9yZWdyZXNzaW9uL3V0aWxzL3BnYWRtaW5fcGFnZS5weSBiL3dlYi9y ZWdyZXNzaW9uL3V0aWxzL3BnYWRtaW5fcGFnZS5weQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGUzMzRlODAKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcmVncmVzc2lvbi91dGlscy9wZ2FkbWluX3BhZ2UucHkK QEAgLTAsMCArMSwxMDYgQEAKK2ltcG9ydCB0aW1lCitmcm9tIHNlbGVuaXVt LmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBOb1N1Y2hFbGVtZW50RXhjZXB0 aW9uCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlciBpbXBvcnQgQWN0aW9uQ2hh aW5zCisKKworY2xhc3MgUGdhZG1pblBhZ2U6CisgICAgIiIiCisgICAgSGVs cGVyIGNsYXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBwYWdlLCBnaXZl biBhIHNlbGVuaXVtIGRyaXZlcgorICAgICIiIgorICAgIGRlZiBfX2luaXRf XyhzZWxmLCBkcml2ZXIsIGFwcF9jb25maWcpOgorICAgICAgICBzZWxmLmRy aXZlciA9IGRyaXZlcgorICAgICAgICBzZWxmLmFwcF9jb25maWcgPSBhcHBf Y29uZmlnCisKKyAgICBkZWYgYWRkX3NlcnZlcihzZWxmLCBzZXJ2ZXJfY29u ZmlnKToKKyAgICAgICAgc2VsZi53YWl0X2Zvcl9zcGlubmVyX3RvX2Rpc2Fw cGVhcigpCisKKyAgICAgICAgc2VsZi5maW5kX2J5X3hwYXRoKCIvLypbQGNs YXNzPSdhY2lUcmVlVGV4dCcgYW5kIGNvbnRhaW5zKC4sJ1NlcnZlcnMnKV0i KS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9i eV9saW5rX3RleHQoIk9iamVjdCIpLmNsaWNrKCkKKyAgICAgICAgQWN0aW9u Q2hhaW5zKHNlbGYuZHJpdmVyKSBcCisgICAgICAgICAgICAubW92ZV90b19l bGVtZW50KHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQo IkNyZWF0ZSIpKSBcCisgICAgICAgICAgICAucGVyZm9ybSgpCisgICAgICAg IHNlbGYuZmluZF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiU2VydmVyLi4uIiku Y2xpY2soKQorCisgICAgICAgIHNlbGYuZmlsbF9pbnB1dF9ieV9maWVsZF9u YW1lKCJuYW1lIiwgc2VydmVyX2NvbmZpZ1snbmFtZSddKQorICAgICAgICBz ZWxmLmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIkNvbm5lY3Rpb24iKS5j bGljaygpCisgICAgICAgIHNlbGYuZmlsbF9pbnB1dF9ieV9maWVsZF9uYW1l KCJob3N0Iiwgc2VydmVyX2NvbmZpZ1snaG9zdCddKQorICAgICAgICBzZWxm LmZpbGxfaW5wdXRfYnlfZmllbGRfbmFtZSgicG9ydCIsIHNlcnZlcl9jb25m aWdbJ3BvcnQnXSkKKyAgICAgICAgc2VsZi5maWxsX2lucHV0X2J5X2ZpZWxk X25hbWUoInVzZXJuYW1lIiwgc2VydmVyX2NvbmZpZ1sndXNlcm5hbWUnXSkK KyAgICAgICAgc2VsZi5maWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoInBhc3N3 b3JkIiwgc2VydmVyX2NvbmZpZ1snZGJfcGFzc3dvcmQnXSkKKyAgICAgICAg c2VsZi5maW5kX2J5X3hwYXRoKCIvL2J1dHRvbltjb250YWlucyguLCdTYXZl JyldIikuY2xpY2soKQorCisgICAgICAgIHNlbGYuZmluZF9ieV94cGF0aCgi Ly8qW0BpZD0ndHJlZSddLy8qWy49JyIgKyBzZXJ2ZXJfY29uZmlnWyduYW1l J10gKyAiJ10iKQorCisgICAgZGVmIHJlbW92ZV9zZXJ2ZXIoc2VsZiwgc2Vy dmVyX2NvbmZpZyk6CisgICAgICAgIHNlbGYuZmluZF9ieV94cGF0aCgiLy8q W0BpZD0ndHJlZSddLy8qWy49JyIgKyBzZXJ2ZXJfY29uZmlnWyduYW1lJ10g KyAiJyBhbmQgQGNsYXNzPSdhY2lUcmVlSXRlbSddIikuY2xpY2soKQorICAg ICAgICBzZWxmLmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIk9iamVjdCIp LmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2J5X3BhcnRpYWxfbGlua190 ZXh0KCJEZWxldGUvRHJvcCIpLmNsaWNrKCkKKyAgICAgICAgdGltZS5zbGVl cCgwLjUpCisgICAgICAgIHNlbGYuZmluZF9ieV94cGF0aCgiLy9idXR0b25b Y29udGFpbnMoLiwnT0snKV0iKS5jbGljaygpCisKKyAgICBkZWYgdG9nZ2xl X29wZW5fdHJlZV9pdGVtKHNlbGYsIHRyZWVfaXRlbV90ZXh0KToKKyAgICAg ICAgc2VsZi5maW5kX2J5X3hwYXRoKCIvLypbQGlkPSd0cmVlJ10vLypbLj0n IiArIHRyZWVfaXRlbV90ZXh0ICsgIiddLy4uLypbQGNsYXNzPSdhY2lUcmVl QnV0dG9uJ10iKS5jbGljaygpCisKKyAgICBkZWYgZmluZF9ieV94cGF0aChz ZWxmLCB4cGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLndhaXRfZm9yX2Vs ZW1lbnQobGFtYmRhOiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBh dGgoeHBhdGgpKQorCisgICAgZGVmIGZpbmRfYnlfaWQoc2VsZiwgZWxlbWVu dF9pZCk6CisgICAgICAgIHJldHVybiBzZWxmLndhaXRfZm9yX2VsZW1lbnQo bGFtYmRhOiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoZWxlbWVu dF9pZCkpCisKKyAgICBkZWYgZmluZF9ieV9wYXJ0aWFsX2xpbmtfdGV4dChz ZWxmLCBsaW5rX3RleHQpOgorICAgICAgICByZXR1cm4gc2VsZi53YWl0X2Zv cl9lbGVtZW50KGxhbWJkYTogc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5 X3BhcnRpYWxfbGlua190ZXh0KGxpbmtfdGV4dCkpCisKKyAgICBkZWYgZmls bF9pbnB1dF9ieV9maWVsZF9uYW1lKHNlbGYsIGZpZWxkX25hbWUsIGZpZWxk X2NvbnRlbnQpOgorICAgICAgICBzZWxmLmZpbmRfYnlfeHBhdGgoIi8vaW5w dXRbQG5hbWU9JyIgKyBmaWVsZF9uYW1lICsgIiddIikuY2xlYXIoKQorICAg ICAgICBzZWxmLmZpbmRfYnlfeHBhdGgoIi8vaW5wdXRbQG5hbWU9JyIgKyBm aWVsZF9uYW1lICsgIiddIikuc2VuZF9rZXlzKAorICAgICAgICAgICAgZmll bGRfY29udGVudCkKKworICAgIGRlZiBmaWxsX2NvZGVtaXJyb3JfYXJlYV93 aXRoKHNlbGYsIGZpZWxkX2NvbnRlbnQpOgorICAgICAgICBzZWxmLmZpbmRf YnlfeHBhdGgoCisgICAgICAgICAgICAiLy9wcmVbY29udGFpbnMoQGNsYXNz LCdDb2RlTWlycm9yLWxpbmUnKV0vLi4vLi4vLi4vKltjb250YWlucyhAY2xh c3MsJ0NvZGVNaXJyb3ItY29kZScpXSIpLmNsaWNrKCkKKyAgICAgICAgQWN0 aW9uQ2hhaW5zKHNlbGYuZHJpdmVyKS5zZW5kX2tleXMoZmllbGRfY29udGVu dCkucGVyZm9ybSgpCisKKyAgICBkZWYgd2FpdF9mb3JfZWxlbWVudChzZWxm LCBmaW5kX21ldGhvZF93aXRoX2FyZ3MpOgorICAgICAgICBkZWYgZWxlbWVu dF9pZl9pdF9leGlzdHMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg ICAgICAgICBlbGVtZW50ID0gZmluZF9tZXRob2Rfd2l0aF9hcmdzKCkKKyAg ICAgICAgICAgICAgICBpZiBlbGVtZW50LmlzX2Rpc3BsYXllZCgpICYgZWxl bWVudC5pc19lbmFibGVkKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVy biBlbGVtZW50CisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4 Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg ICAgICByZXR1cm4gc2VsZi5fd2FpdF9mb3IoImVsZW1lbnQgdG8gZXhpc3Qi LCBlbGVtZW50X2lmX2l0X2V4aXN0cykKKworICAgIGRlZiB3YWl0X2Zvcl9z cGlubmVyX3RvX2Rpc2FwcGVhcihzZWxmKToKKyAgICAgICAgZGVmIHNwaW5u ZXJfaGFzX2Rpc2FwcGVhcmVkKCk6CisgICAgICAgICAgICB0cnk6CisgICAg ICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJw Zy1zcGlubmVyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAg ICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOgorICAg ICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgc2VsZi5fd2Fp dF9mb3IoInNwaW5uZXIgdG8gZGlzYXBwZWFyIiwgc3Bpbm5lcl9oYXNfZGlz YXBwZWFyZWQpCisKKyAgICBkZWYgd2FpdF9mb3JfYXBwKHNlbGYpOgorICAg ICAgICBkZWYgcGFnZV9zaG93c19hcHAoKToKKyAgICAgICAgICAgIGlmIHNl bGYuZHJpdmVyLnRpdGxlID09IHNlbGYuYXBwX2NvbmZpZy5BUFBfTkFNRToK KyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxz ZToKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5yZWZyZXNoKCkKKyAg ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLl93 YWl0X2ZvcigiYXBwIHRvIHN0YXJ0IiwgcGFnZV9zaG93c19hcHApCisKKyAg ICBkZWYgX3dhaXRfZm9yKHNlbGYsIHdhaXRpbmdfZm9yX21lc3NhZ2UsIGNv bmRpdGlvbl9tZXRfZnVuY3Rpb24pOgorICAgICAgICB0aW1lb3V0ID0gNQor ICAgICAgICB0aW1lX3dhaXRlZCA9IDAKKyAgICAgICAgc2xlZXBfdGltZSA9 IDAuMDEKKworICAgICAgICB3aGlsZSB0aW1lX3dhaXRlZCA8IHRpbWVvdXQ6 CisgICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb25fbWV0X2Z1bmN0aW9u KCkKKyAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBy ZXR1cm4gcmVzdWx0CisgICAgICAgICAgICB0aW1lX3dhaXRlZCArPSBzbGVl cF90aW1lCisgICAgICAgICAgICB0aW1lLnNsZWVwKHNsZWVwX3RpbWUpCisK KyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aW1lZCBvdXQgd2FpdGlu ZyBmb3IgIiArIHdhaXRpbmdfZm9yX21lc3NhZ2UpCg== --001a1145ed7e16d76a0547a7597c Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a1145ed7e16d76a0547a7597c--