Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hdSzM-0005MN-NL for pgadmin-hackers@arkaria.postgresql.org; Wed, 19 Jun 2019 05:18:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hdSzL-0006VQ-As for pgadmin-hackers@arkaria.postgresql.org; Wed, 19 Jun 2019 05:18:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hdSzK-0006VJ-U8 for pgadmin-hackers@lists.postgresql.org; Wed, 19 Jun 2019 05:18:27 +0000 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hdSzH-00006h-IU for pgadmin-hackers@postgresql.org; Wed, 19 Jun 2019 05:18:26 +0000 Received: by mail-qt1-x82b.google.com with SMTP id w17so12011151qto.10 for ; Tue, 18 Jun 2019 22:18:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=CHCDVVIAlKmeWJ/yJuFsW1ooUo+dP/H+uoDekt7wAuE=; b=hHbbXfxigCKnKCPw7PZufLlT1S1DI1eQWdtv7XWx9qXHGdj3rAP5JoFuh1y6rdbKKJ UMWOwdF0Y8EFxbasL+Oxg0rUP/PYbYmKEdXlQz4LRKHpeRH1gb9C4/OvY8yS0a3UmsWj n+MZuz/EfIaf4+SHMDxtozAi0eVtSTgzlEAOdenGPCx4ogvluScfGIvGLF7Vj2MnhAnn dp9QC5yQNb0y80Kt7xAUfvf/V+AAU7Yl+ovNpKKbfn76IDd4y6CKdcePwoobE7WiKkni 6wtj6bStw8yIiWCwz+CthLRJazLhA72QUL8a78rOhE+oFKix9AAdxRh+bKwfzQjMfLPP X7PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=CHCDVVIAlKmeWJ/yJuFsW1ooUo+dP/H+uoDekt7wAuE=; b=EKXg/X/Kf34cLr+dC7SYa/twajpHEi2mwsgqeGzPyUJB5HxleZ3vzrqkViCELbsZmv pSUIh2m1Kh7DqYiAiypUQURBYu6ptDehc7Qg2KgusRZqgpbt7A36H2yjMq+4Mv4Z7nlw MmHMW6R5I38o7+EHZNiVjHQByccaNBzwDmfwK3jpZjyWle8Est+O4/MiB+5LEOrF8nnh RhwU24LtSQFYcqMtBGGax1ltd45qqz5HfTs5oDvzWe7P6mkCbDJEUXAAGq9TPZs5/uBS DetABGha4cI41ELlwOzCpUurNWXIQ2VwOd7dUfUvmQVXmadI8Vtbmipt8pTfh4PsYeFx KG/g== X-Gm-Message-State: APjAAAXi8AnQgeOkbhyNenBAzDwth+CXwR4tLJ8Z3BvBxR4hVMkVgLd0 7IT3SVsHc720ARltho7y8pQLmBgpvkj6jcaAFOI= X-Google-Smtp-Source: APXvYqxIJcHb04mTXBV8qWRxtyAifKhFPEGntVYe/kX1b6yLbcM50AmtPvK3wnpNWPY3V4SC5WtzJgjSx/cWt2mqCtI= X-Received: by 2002:a0c:afa4:: with SMTP id s33mr30465931qvc.194.1560921501272; Tue, 18 Jun 2019 22:18:21 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Yosry Muhammad Date: Wed, 19 Jun 2019 07:18:08 +0200 Message-ID: Subject: Re: [GSoC][Patch] Automatic Mode Detection V1 To: Dave Page Cc: pgadmin-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000009b2c89058ba65bee" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0000000000009b2c89058ba65bee Content-Type: multipart/alternative; boundary="0000000000009b2c87058ba65bec" --0000000000009b2c87058ba65bec Content-Type: text/plain; charset="UTF-8" Hi, I have been working all day to try to make this patch applicable. On Tue, Jun 18, 2019 at 3:05 PM Dave Page wrote: > Hi > > [please keep the maililng list CC'd] > > On Mon, Jun 17, 2019 at 3:05 PM Yosry Muhammad wrote: > >> >>> Do you want me to ask our design guy for an icon? >>> >> >> That would be great to keep things clear and separated for the users. >> > > I've asked Chethana (CC'd) to create one. > Waiting for the icon, will set it up once it is ready. > > >> Please find attached a patch to fix the problem that happened with you. >> The problem is that I edited the primary_keys.sql file in >> web/tools/sqleditor/templates/sqleditor/sql/default/ only, while there was >> another one in ..../templates/sqleditor/sql/11_plus/. I wonder what happens >> with versions before 11? are the scripts in the default/ folder used if >> they are not found in that version folder? >> >> The patch also removes a few unnecessary lines of code that I found, not >> related to the problem. >> > > Ahh, yes - that works :-). I haven't done a detailed code review yet as > you're going to be whacking things around for a bit, but I didn't see any > obvious styling issues except for: > > (pgadmin4) dpage@hal:~/git/pgadmin4$ make check-pep8 > pycodestyle --config=.pycodestyle docs/ > pycodestyle --config=.pycodestyle pkg/ > pycodestyle --config=.pycodestyle web/ > web/pgadmin/tools/sqleditor/__init__.py:440: [E125] continuation line with > same indent as next logical line > web/pgadmin/tools/sqleditor/command.py:929: [E501] line too long (80 > 79 > characters) > web/pgadmin/tools/sqleditor/command.py:977: [W391] blank line at end of > file > web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py:53: > [E501] line too long (92 > 79 characters) > web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py:74: > [E501] line too long (80 > 79 characters) > web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py:81: > [E501] line too long (97 > 79 characters) > web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py:83: > [E501] line too long (84 > 79 characters) > 1 E125 continuation line with same indent as next logical line > 5 E501 line too long (80 > 79 characters) > 1 W391 blank line at end of file > 7 > make: *** [check-pep8] Error 1 > > All patches need to pass that (and all other) existing tests before they > can be committed. Aside from that: > > I ran pep8 checks and JS tests on this patch, however I could not run python tests due to a problem with chromedriver (working on it), please let me know if any tests fail. - When revising patches, please send an updated one for the whole thing, > rather than incremental ones. Incrementals are more work to apply and don't > give us any benefit in return. > > The attached patch is a single patch including all old and new increments. - We need to add a "do you want to continue" warning before actions like > Execute or EXPLAIN are run, if there are unsaved changes in the grid. > > - I think we should make the text in any cells that has been edited bold > until saved, so the user can see where changes have been made (as they can > with deleted rows). > Both done, new rows are highlighted too. > > - If I make two data edits and then delete a row, I get 3 entries in the > History panel, all showing the same delete. I would actually argue that > data edit queries that pgAdmin generates should not go into the History at > all, but maybe they should be added albeit with a flag to say they're > internal queries and an option to hide them. Thoughts? > That was a bug with the existing 'save changes' action of 'View Data', on which mine is based upon. I fixed the bug, now the queries are shown correctly. However, the queries are shown in the form in which they are sent from the backend to the database driver (without parameters - also an already existing bug in View Data Mode), for example: INSERT INTO public.kweek ( > media_url, username, text, created_at) VALUES ( > %(media_url)s::character varying, %(username)s::character varying, > %(text)s::text, %(created_at)s::timestamp without time zone) > returning id; > I propose two solutions: 1- Hide pgadmin's generated sql from history (in both modes). 2- Show the actual sql query that was executed after the parameters are plugged in (more understandable and potentially helpful). > - We need to think about how data editing fits in with transaction > control. Right now, it seems to happen entirely outside of it - for > example, I tend to work with auto commit turned off, so my connection sits > idle-in-transaction following an initial select, and remains un-affected by > edits. Please think about this and suggest options for us to discuss. > I integrated the data editing in the transaction control as you noted. Now the behavior is as follows: 1- In View Data mode, same existing behavior. 2- In Query Tool mode: - If auto-commit is on: the modifications are made and commited once save is pressed. - If auto-commit is off: the modifications are made as part of the ongoing transaction (or a new one if no transaction is ongoing), they are not commited unless the user executes a commit command (or rollback). > >> - What documentations or unit tests should I write? any guidelines here >>>>> would be appreciated. >>>>> >>>> >>> We're aiming to add unit tests to give as much coverage as possible, >>> focussing on Jasmine, Python/API and then feature tests in that order (fast >>> -> slow execution, which is important). So we probably want >>> >>> - one feature test to do basic end-to-end validation >>> - Python/API tests to exercise is_query_resultset_updatable, >>> save_changed_data and anything else that seems relevant. >>> - Jasmine tests to ensure buttons are enabled/disabled as they should >>> be, and that primary key and updatability data is tracked properly (this >>> may not be feasible, but I'd still like it to be investigated and justified >>> if not). >>> >>> We're also a day or two away from committing a new test suite for >>> exercising CRUD operations and the resulting reverse engineered SQL; if we >>> can utilise that to test primary_keys.sql, that'd be good. >>> >>> >> I am sorry but I don't understand what should be done exactly in those >> tests. Could you tell me where I can look at examples for feature tests, >> Python/API tests and Jasmine tests (preferably for features related to the >> query tool)? >> > > They're all over the codebase to be honest. Some examples though: > > Varions Jasmine tests: web/regression/javascript (e.g. history, slickgrid, > sqleditor) > Various API tests: web/pgadmin/tools/sqleditor/tests > Feature tests: web/pgadmin/feature_tests (e.g. query_tool_*) > > >> >> >>> Once the in-place editing works, we'll need to rip out all the code >>> related to the View/Edit data mode of the query tool. For example, there >>> will be no need to have the Filter/Sort options any more as the user can >>> edit the SQL directly (that one may be controversial - it's probably worth >>> polling the users first). Of course, if they don't want it to be removed, >>> we'll need to re-think how it works as then we'd have a dialogue that tries >>> to edit arbitrary SQL strings. >>> >> >> I think it makes more sense for filters to be disabled. I mean since the >> user is already writing SQL it would be more convenient to just edit it >> directly. >> > > Well we're not going to just disable them - we'll either remove them, or > try to make them work. I'm leaning strongly towards just removing that code > entirely. > > I meant disabling them in the query tool while keeping them in the View Data mode as the user cannot edit the sql in the View Data mode. Do you want to remove the feature from both modes completely? > Good work - thanks! > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > Looking forward to your feedback. Thanks ! -- *Yosry Muhammad Yosry* Computer Engineering student, The Faculty of Engineering, Cairo University (2021). Class representative of CMP 2021. https://www.linkedin.com/in/yosrym93/ --0000000000009b2c87058ba65bec Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,
I have been working all= day to try to make this patch applicable.

On Tue, Jun 18, 2= 019 at 3:05 PM Dave Page <dpage@pgadmin.org> wrote:
Hi

[please keep the maililng list CC'd]

On Mon, Jun 17, 2019 at 3:05 PM Yo= sry Muhammad <yo= srym93@gmail.com> wrote:

Do you want me to ask our design guy for an icon?

That would be great to kee= p things clear and separated for the users.
<= div>
I've asked Chethana (CC'd) to create one.
<= /div>

Waiting for the icon, will set = it up once it is ready.
=C2=A0
Please find attached a patch to fix the problem that = happened with you.=20 The problem is that I edited the primary_keys.sql file in=20 web/tools/sqleditor/templates/sqleditor/sql/default/ only, while there=20 was another one in ..../templates/sqleditor/sql/11_plus/. I wonder what=20 happens with versions before 11? are the scripts in the default/ folder=20 used if they are not found in that version folder?

The patch also removes a few unnecessary lines of code that I found, = not related to the problem.

Ahh, yes - that works :-). I haven't done a detailed code revie= w yet as you're going to be whacking things around for a bit, but I did= n't see any obvious styling issues except for:

(pgadmin4) dpage@hal:~/git/pgadmin4$ make check-pep8
pycodestyle --conf= ig=3D.pycodestyle docs/
pycodestyle --config=3D.pycodestyle pkg/
pyco= destyle --config=3D.pycodestyle web/
web/pgadmin/tools/sqleditor/__init_= _.py:440: [E125] continuation line with same indent as next logical lineweb/pgadmin/tools/sqleditor/command.py:929: [E501] line too long (80 > = 79 characters)
web/pgadmin/tools/sqleditor/command.py:977: [W391] blank = line at end of file
web/pgadmin/tools/sqleditor/utils/is_query_resultset= _updatable.py:53: [E501] line too long (92 > 79 characters)
web/pgadm= in/tools/sqleditor/utils/is_query_resultset_updatable.py:74: [E501] line to= o long (80 > 79 characters)
web/pgadmin/tools/sqleditor/utils/is_quer= y_resultset_updatable.py:81: [E501] line too long (97 > 79 characters)web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py:83: [E5= 01] line too long (84 > 79 characters)
1 =C2=A0 =C2=A0 =C2=A0 E125 co= ntinuation line with same indent as next logical line
5 =C2=A0 =C2=A0 = =C2=A0 E501 line too long (80 > 79 characters)
1 =C2=A0 =C2=A0 =C2=A0= W391 blank line at end of file
7
make: *** [check-pep8] Error 1
<= /div>

All patches need to pass that (and all other) exis= ting tests before they can be committed. Aside from that:


I ran pep8 checks and JS te= sts on this patch, however I could not run python tests due to a problem wi= th chromedriver (working on it), please let me know if any tests fail.
<= /div>

- When revising patches, please= send an updated one for the whole thing, rather than incremental ones. Inc= rementals are more work to apply and don't give us any benefit in retur= n.


The att= ached patch is a single patch including all old and new increments.

- We need to add a "do you want = to continue" warning before actions like Execute or EXPLAIN are run, i= f there are unsaved changes in the grid.

- I think= we should make the text in any cells that has been edited bold until saved= , so the user can see where changes have been made (as they can with delete= d rows).

Both done, new r= ows are highlighted too.

= - If I make two data edits and then delete a row, I get 3 entries in the Hi= story panel, all showing the same delete. I would actually argue that data = edit queries that pgAdmin generates should not go into the History at all, = but maybe they should be added albeit with a flag to say they're intern= al queries and an option to hide them. Thoughts?

That was a bug with the existing 'save changes&= #39; action of 'View Data', on which mine is based upon. I fixed th= e bug, now the queries are shown correctly. However, the queries are shown = in the form in which they are sent from the backend to the database driver = (without parameters - also an already existing bug in View Data Mode), for = example:

INSERT INTO public.kweek (
me= dia_url, username, text, created_at) VALUES (
%(media_url)s::character v= arying, %(username)s::character varying, %(text)s::text, %(created_at)s::ti= mestamp without time zone)
=C2=A0returning id;
= =C2=A0
I propose two solutions:
1- Hide pgadmin's g= enerated sql from history (in both modes).
2- Show the actual sql= query that was executed after the parameters are plugged in (more understa= ndable and potentially helpful).


- We need to think about how data editing fits i= n with transaction control. Right now, it seems to happen entirely outside = of it - for example, I tend to work with auto commit turned off, so my conn= ection sits idle-in-transaction following an initial select, and remains un= -affected by edits. Please think about this and suggest options for us to d= iscuss.

I integrated the = data editing in the transaction control as you noted. Now the behavior is a= s follows:
1- In View Data mode, same existing behavior.
2- In Query Tool mode:
- If auto-commit is on: the modifica= tions are made and commited once save is pressed.
- If auto-commi= t is off: the modifications are made as part of the ongoing transaction (or= a new one if no transaction is ongoing), they are not commited unless the = user executes a commit command (or rollback).

=C2=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">
- = What documentations or unit tests should I write? any guidelines here would= be appreciated.

=
We're aiming to add unit tests to give as much coverage as possibl= e, focussing on Jasmine, Python/API and then feature tests in that order (f= ast -> slow execution, which is important). So we probably want=C2=A0

- one feature test to do basic end-to-end validation=
- Python/API tests to exercise=C2=A0is_query_resultset_updatable= , save_changed_data and anything else that seems relevant.
- Jasm= ine tests to ensure buttons are enabled/disabled as they should be, and tha= t primary key and updatability data is tracked properly (this may not be fe= asible, but I'd still like it to be investigated and justified if not).=

We're also a day or two away from committing = a new test suite for exercising CRUD operations and the resulting reverse e= ngineered SQL; if we can utilise that to test primary_keys.sql, that'd = be good.


I= am sorry but I don't understand what should be done exactly in those t= ests. Could you tell me where I can look at examples for feature tests, Pyt= hon/API tests and Jasmine tests (preferably for features related to the que= ry tool)?

They're= all over the codebase to be honest. Some examples though:

Varions Jasmine tests:=C2=A0web/regression/javascript (e.g. histor= y, slickgrid, sqleditor)
Various API tests: web/pgadmin/tools/sql= editor/tests
Feature tests:=C2=A0web/pgadmin/feature_tests (e.g. = query_tool_*)
=C2=A0
=C2=A0
Once the in-place editing works, we'll need to ri= p out all the code related to the View/Edit data mode of the query tool. Fo= r example, there will be no need to have the Filter/Sort options any more a= s the user can edit the SQL directly (that one may be controversial - it= 9;s probably worth polling the users first). Of course, if they don't w= ant it to be removed, we'll need to re-think how it works as then we= 9;d have a dialogue that tries to edit arbitrary SQL strings.

I think it makes more sense for filter= s to be disabled. I mean since the user is already writing SQL it would be = more convenient to just edit it directly.

Well we're not going to just disable them - we'll = either remove them, or try to make them work. I'm leaning strongly towa= rds just removing that code entirely.

=C2=A0
I meant disabling them in the query tool whil= e keeping them in the View Data mode as the user cannot edit the sql in the= View Data mode. Do you want to remove the feature from both modes complete= ly?
=C2=A0
Good work - thanks!

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

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

Looking forward to your feedba= ck. Thanks !

--
Yosry Muhammad Yosry

Computer = Engineering student,
The Faculty of En= gineering,
Cairo University (2021).
Class representative of CMP 2021.
--0000000000009b2c87058ba65bec-- --0000000000009b2c89058ba65bee Content-Type: application/x-patch; name="query_tool_automatic_mode_switch_v2.patch" Content-Disposition: attachment; filename="query_tool_automatic_mode_switch_v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jx2s2p2p0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weSBiL3dl Yi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weQppbmRleCAxNmY3MTMzZi4uYTE2 MmVlYjggMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5w eQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvX19pbml0X18ucHkKQEAgLTM4NCw2 ICszODQsOCBAQCBkZWYgcG9sbCh0cmFuc19pZCk6CiAgICAgcnNldCA9IE5vbmUKICAgICBoYXNf b2lkcyA9IEZhbHNlCiAgICAgb2lkcyA9IE5vbmUKKyAgICBhZGRpdGlvbmFsX21lc3NhZ2VzID0g Tm9uZQorICAgIG5vdGlmaWVzID0gTm9uZQogCiAgICAgIyBDaGVjayB0aGUgdHJhbnNhY3Rpb24g YW5kIGNvbm5lY3Rpb24gc3RhdHVzCiAgICAgc3RhdHVzLCBlcnJvcl9tc2csIGNvbm4sIHRyYW5z X29iaiwgc2Vzc2lvbl9vYmogPSBcCkBAIC00MjIsNiArNDI0LDIyIEBAIGRlZiBwb2xsKHRyYW5z X2lkKToKIAogICAgICAgICAgICAgc3QsIHJlc3VsdCA9IGNvbm4uYXN5bmNfZmV0Y2htYW55XzJk YXJyYXkoT05fREVNQU5EX1JFQ09SRF9DT1VOVCkKIAorICAgICAgICAgICAgIyBUaGVyZSBtYXkg YmUgYWRkaXRpb25hbCBtZXNzYWdlcyBldmVuIGlmIHJlc3VsdCBpcyBwcmVzZW50CisgICAgICAg ICAgICAjIGVnOiBGdW5jdGlvbiBjYW4gcHJvdmlkZSByZXN1bHQgYXMgd2VsbCBhcyBSQUlTRSBt ZXNzYWdlcworICAgICAgICAgICAgbWVzc2FnZXMgPSBjb25uLm1lc3NhZ2VzKCkKKyAgICAgICAg ICAgIGlmIG1lc3NhZ2VzOgorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbWVzc2FnZXMgPSAn Jy5qb2luKG1lc3NhZ2VzKQorICAgICAgICAgICAgbm90aWZpZXMgPSBjb25uLmdldF9ub3RpZmll cygpCisKKyAgICAgICAgICAgICMgUHJvY2VkdXJlL0Z1bmN0aW9uIG91dHB1dCBtYXkgY29tZXMg aW4gdGhlIGZvcm0gb2YgTm90aWNlcworICAgICAgICAgICAgIyBmcm9tIHRoZSBkYXRhYmFzZSBz ZXJ2ZXIsIHNvIHdlIG5lZWQgdG8gYXBwZW5kIHRob3NlIG91dHB1dHMKKyAgICAgICAgICAgICMg d2l0aCB0aGUgb3JpZ2luYWwgcmVzdWx0LgorICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6 CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29ubi5zdGF0dXNfbWVzc2FnZSgpCisgICAgICAg ICAgICAgICAgaWYgKHJlc3VsdCAhPSAnU0VMRUNUIDEnIG9yIHJlc3VsdCAhPSAnU0VMRUNUIDAn KSBhbmQgXAorICAgICAgICAgICAgICAgICAgIHJlc3VsdCBpcyBub3QgTm9uZSBhbmQgYWRkaXRp b25hbF9tZXNzYWdlczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWRkaXRpb25hbF9t ZXNzYWdlcyArIHJlc3VsdAorCiAgICAgICAgICAgICBpZiBzdDoKICAgICAgICAgICAgICAgICBp ZiAncHJpbWFyeV9rZXlzJyBpbiBzZXNzaW9uX29iajoKICAgICAgICAgICAgICAgICAgICAgcHJp bWFyeV9rZXlzID0gc2Vzc2lvbl9vYmpbJ3ByaW1hcnlfa2V5cyddCkBAIC00MzgsMTAgKzQ1Niwy MiBAQCBkZWYgcG9sbCh0cmFuc19pZCk6CiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAg ICAgIHNlc3Npb25fb2JqWydjbGllbnRfcHJpbWFyeV9rZXknXSA9IGNsaWVudF9wcmltYXJ5X2tl eQogCi0gICAgICAgICAgICAgICAgaWYgY29sdW1uc19pbmZvIGlzIG5vdCBOb25lOgorICAgICAg ICAgICAgICAgICMgSWYgdHJhbnNfb2JqIGlzIGEgUXVlcnlUb29sQ29tbWFuZCB0aGVuIGNoZWNr IGZvciB1cGRhdGFibGUKKyAgICAgICAgICAgICAgICAjIHJlc3VsdHNldHMgYW5kIHByaW1hcnkg a2V5cworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNfb2JqLCBRdWVyeVRvb2xD b21tYW5kKToKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNfb2JqLmNoZWNrX2Zvcl91cGRhdGFi bGVfcmVzdWx0c2V0X2FuZF9wcmltYXJ5X2tleXMoKQorICAgICAgICAgICAgICAgICAgICBwa19u YW1lcywgcHJpbWFyeV9rZXlzID0gdHJhbnNfb2JqLmdldF9wcmltYXJ5X2tleXMoKQorICAgICAg ICAgICAgICAgICAgICAjIElmIHByaW1hcnlfa2V5cyBleGlzdCwgYWRkIHRoZW0gdG8gdGhlIHNl c3Npb25fb2JqIHRvCisgICAgICAgICAgICAgICAgICAgICMgYWxsb3cgZm9yIHNhdmluZyBhbnkg Y2hhbmdlcyB0byB0aGUgZGF0YQorICAgICAgICAgICAgICAgICAgICBpZiBwcmltYXJ5X2tleXMg aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX29ialsncHJpbWFy eV9rZXlzJ10gPSBwcmltYXJ5X2tleXMKIAotICAgICAgICAgICAgICAgICAgICBjb21tYW5kX29i aiA9IHBpY2tsZS5sb2FkcyhzZXNzaW9uX29ialsnY29tbWFuZF9vYmonXSkKLSAgICAgICAgICAg ICAgICAgICAgaWYgaGFzYXR0cihjb21tYW5kX29iaiwgJ29ial9pZCcpOgorICAgICAgICAgICAg ICAgIGlmIGNvbHVtbnNfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBJ ZiBpdCBpcyBhIFF1ZXJ5VG9vbENvbW1hbmQgdGhhdCBoYXMgb2JqX2lkIGF0dHJpYnV0ZQorICAg ICAgICAgICAgICAgICAgICAjIHRoZW4gaXQgc2hvdWxkIGFsc28gYmUgZWRpdGFibGUKKyAgICAg ICAgICAgICAgICAgICAgaWYgaGFzYXR0cih0cmFuc19vYmosICdvYmpfaWQnKSBhbmQgXAorICAg ICAgICAgICAgICAgICAgICAgICAgKG5vdCBpc2luc3RhbmNlKHRyYW5zX29iaiwgUXVlcnlUb29s Q29tbWFuZCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc19vYmouY2FuX2VkaXQo KSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIEdldCB0aGUgdGVtcGxhdGUgcGF0aCBmb3Ig dGhlIGNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfcGF0aCA9ICdjb2x1 bW5zL3NxbC8jezB9IycuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4u bWFuYWdlci52ZXJzaW9uCkBAIC00NDksNyArNDc5LDcgQEAgZGVmIHBvbGwodHJhbnNfaWQpOgog CiAgICAgICAgICAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICdub2Rlcy5zcWwn XSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPWNvbW1hbmRfb2JqLm9ial9pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dHJhbnNfb2JqLm9ial9pZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoYXNfb2lkcz1UcnVlCiAgICAgICAgICAgICAgICAgICAg ICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAjIHJvd3Mgd2l0aCBhdHRyaWJ1dGUgbm90 X251bGwKQEAgLTUyMCwyNiArNTUwLDggQEAgZGVmIHBvbGwodHJhbnNfaWQpOgogICAgICAgICBz dGF0dXMgPSAnTm90Q29ubmVjdGVkJwogICAgICAgICByZXN1bHQgPSBlcnJvcl9tc2cKIAotICAg ICMgVGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwgbWVzc2FnZXMgZXZlbiBpZiByZXN1bHQgaXMgcHJl c2VudAotICAgICMgZWc6IEZ1bmN0aW9uIGNhbiBwcm92aWRlIHJlc3VsdCBhcyB3ZWxsIGFzIFJB SVNFIG1lc3NhZ2VzCi0gICAgYWRkaXRpb25hbF9tZXNzYWdlcyA9IE5vbmUKLSAgICBub3RpZmll cyA9IE5vbmUKLSAgICBpZiBzdGF0dXMgPT0gJ1N1Y2Nlc3MnOgotICAgICAgICBtZXNzYWdlcyA9 IGNvbm4ubWVzc2FnZXMoKQotICAgICAgICBpZiBtZXNzYWdlczoKLSAgICAgICAgICAgIGFkZGl0 aW9uYWxfbWVzc2FnZXMgPSAnJy5qb2luKG1lc3NhZ2VzKQotICAgICAgICBub3RpZmllcyA9IGNv bm4uZ2V0X25vdGlmaWVzKCkKLQotICAgICMgUHJvY2VkdXJlL0Z1bmN0aW9uIG91dHB1dCBtYXkg Y29tZXMgaW4gdGhlIGZvcm0gb2YgTm90aWNlcyBmcm9tIHRoZQotICAgICMgZGF0YWJhc2Ugc2Vy dmVyLCBzbyB3ZSBuZWVkIHRvIGFwcGVuZCB0aG9zZSBvdXRwdXRzIHdpdGggdGhlCi0gICAgIyBv cmlnaW5hbCByZXN1bHQuCi0gICAgaWYgc3RhdHVzID09ICdTdWNjZXNzJyBhbmQgcmVzdWx0IGlz IE5vbmU6Ci0gICAgICAgIHJlc3VsdCA9IGNvbm4uc3RhdHVzX21lc3NhZ2UoKQotICAgICAgICBp ZiAocmVzdWx0ICE9ICdTRUxFQ1QgMScgb3IgcmVzdWx0ICE9ICdTRUxFQ1QgMCcpIGFuZCBcCi0g ICAgICAgICAgIHJlc3VsdCBpcyBub3QgTm9uZSBhbmQgYWRkaXRpb25hbF9tZXNzYWdlczoKLSAg ICAgICAgICAgIHJlc3VsdCA9IGFkZGl0aW9uYWxfbWVzc2FnZXMgKyByZXN1bHQKLQogICAgIHRy YW5zYWN0aW9uX3N0YXR1cyA9IGNvbm4udHJhbnNhY3Rpb25fc3RhdHVzKCkKKwogICAgIHJldHVy biBtYWtlX2pzb25fcmVzcG9uc2UoCiAgICAgICAgIGRhdGE9ewogICAgICAgICAgICAgJ3N0YXR1 cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdCwKQEAgLTc0MSwyMSArNzUzLDI0IEBAIGRlZiBz YXZlKHRyYW5zX2lkKToKIAogICAgICAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcigKICAgICAgICAg ICAgIFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFnZXIodHJhbnNfb2JqLnNpZCkK LSAgICAgICAgZGVmYXVsdF9jb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD10cmFuc19vYmou ZGlkKQorICAgICAgICBpZiBoYXNhdHRyKHRyYW5zX29iaiwgJ2Nvbm5faWQnKToKKyAgICAgICAg ICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXRyYW5zX29iai5kaWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5faWQ9dHJhbnNfb2JqLmNvbm5faWQp CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRp ZD10cmFuc19vYmouZGlkKSAgIyBkZWZhdWx0IGNvbm5lY3Rpb24KIAogICAgICAgICAjIENvbm5l Y3QgdG8gdGhlIFNlcnZlciBpZiBub3QgY29ubmVjdGVkLgotICAgICAgICBpZiBub3QgZGVmYXVs dF9jb25uLmNvbm5lY3RlZCgpOgotICAgICAgICAgICAgc3RhdHVzLCBtc2cgPSBkZWZhdWx0X2Nv bm4uY29ubmVjdCgpCisgICAgICAgIGlmIG5vdCBjb25uLmNvbm5lY3RlZCgpOgorICAgICAgICAg ICAgc3RhdHVzLCBtc2cgPSBjb25uLmNvbm5lY3QoKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1 czoKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAogICAgICAgICAg ICAgICAgICAgICBkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogdSJ7fSIuZm9ybWF0 KG1zZyl9CiAgICAgICAgICAgICAgICAgKQotCiAgICAgICAgIHN0YXR1cywgcmVzLCBxdWVyeV9y ZXMsIF9yb3dpZCA9IHRyYW5zX29iai5zYXZlKAogICAgICAgICAgICAgY2hhbmdlZF9kYXRhLAog ICAgICAgICAgICAgc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddLAogICAgICAgICAgICAgc2Vz c2lvbl9vYmpbJ2NsaWVudF9wcmltYXJ5X2tleSddLAotICAgICAgICAgICAgZGVmYXVsdF9jb25u KQorICAgICAgICAgICAgY29ubikKICAgICBlbHNlOgogICAgICAgICBzdGF0dXMgPSBGYWxzZQog ICAgICAgICByZXMgPSBlcnJvcl9tc2cKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3Nx bGVkaXRvci9jb21tYW5kLnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL2NvbW1hbmQu cHkKaW5kZXggZDRiMDcwMGYuLjgyM2U5ZDQ3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29s cy9zcWxlZGl0b3IvY29tbWFuZC5weQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Iv Y29tbWFuZC5weQpAQCAtMTksNiArMTksMTAgQEAgZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3Rl bXBsYXRlCiBmcm9tIGZsYXNrX2JhYmVsZXggaW1wb3J0IGdldHRleHQKIGZyb20gcGdhZG1pbi51 dGlscy5hamF4IGltcG9ydCBmb3JiaWRkZW4KIGZyb20gcGdhZG1pbi51dGlscy5kcml2ZXIgaW1w b3J0IGdldF9kcml2ZXIKK2Zyb20gcGdhZG1pbi50b29scy5zcWxlZGl0b3IudXRpbHMuY29uc3Rh bnRfZGVmaW5pdGlvbiBpbXBvcnQgQVNZTkNfT0sKK2Zyb20gcGdhZG1pbi50b29scy5zcWxlZGl0 b3IudXRpbHMuaXNfcXVlcnlfcmVzdWx0c2V0X3VwZGF0YWJsZSBcCisgICAgaW1wb3J0IGlzX3F1 ZXJ5X3Jlc3VsdHNldF91cGRhdGFibGUKK2Zyb20gcGdhZG1pbi50b29scy5zcWxlZGl0b3IudXRp bHMuc2F2ZV9jaGFuZ2VkX2RhdGEgaW1wb3J0IHNhdmVfY2hhbmdlZF9kYXRhCiAKIGZyb20gY29u ZmlnIGltcG9ydCBQR19ERUZBVUxUX0RSSVZFUgogCkBAIC02NjgsMjQ0ICs2NzIsMTEgQEAgY2xh c3MgVGFibGVDb21tYW5kKEdyaWRDb21tYW5kKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAg IGNvbm4gPSBkZWZhdWx0X2Nvbm4KIAotICAgICAgICBzdGF0dXMgPSBGYWxzZQotICAgICAgICBy ZXMgPSBOb25lCi0gICAgICAgIHF1ZXJ5X3JlcyA9IGRpY3QoKQotICAgICAgICBjb3VudCA9IDAK LSAgICAgICAgbGlzdF9vZl9yb3dpZCA9IFtdCi0gICAgICAgIG9wZXJhdGlvbnMgPSAoJ2FkZGVk JywgJ3VwZGF0ZWQnLCAnZGVsZXRlZCcpCi0gICAgICAgIGxpc3Rfb2Zfc3FsID0ge30KLSAgICAg ICAgX3Jvd2lkID0gTm9uZQotCi0gICAgICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6Ci0KLSAgICAg ICAgICAgICMgU3RhcnQgdGhlIHRyYW5zYWN0aW9uCi0gICAgICAgICAgICBjb25uLmV4ZWN1dGVf dm9pZCgnQkVHSU47JykKLQotICAgICAgICAgICAgIyBJdGVyYXRlIHRvdGFsIG51bWJlciBvZiBy ZWNvcmRzIHRvIGJlIHVwZGF0ZWQvaW5zZXJ0ZWQKLSAgICAgICAgICAgIGZvciBvZl90eXBlIGlu IGNoYW5nZWRfZGF0YToKLSAgICAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gZ28gZnVydGhlciBp ZiBpdHMgbm90IGFkZC91cGRhdGUvZGVsZXRlIG9wZXJhdGlvbgotICAgICAgICAgICAgICAgIGlm IG9mX3R5cGUgbm90IGluIG9wZXJhdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Ci0gICAgICAgICAgICAgICAgIyBpZiBubyBkYXRhIHRvIGJlIHNhdmUgdGhlbiBjb250aW51ZQot ICAgICAgICAgICAgICAgIGlmIGxlbihjaGFuZ2VkX2RhdGFbb2ZfdHlwZV0pIDwgMToKLSAgICAg ICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIGNvbHVtbl90eXBlID0g e30KLSAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YSA9IHt9Ci0gICAgICAgICAgICAgICAgZm9y IGVhY2hfY29sIGluIGNvbHVtbnNfaW5mbzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKAotICAg ICAgICAgICAgICAgICAgICAgICAgY29sdW1uc19pbmZvW2VhY2hfY29sXVsnbm90X251bGwnXSBh bmQKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb2x1bW5zX2luZm9bZWFjaF9jb2xdWydo YXNfZGVmYXVsdF92YWwnXQotICAgICAgICAgICAgICAgICAgICApOgotICAgICAgICAgICAgICAg ICAgICAgICAgY29sdW1uX2RhdGFbZWFjaF9jb2xdID0gTm9uZQotICAgICAgICAgICAgICAgICAg ICAgICAgY29sdW1uX3R5cGVbZWFjaF9jb2xdID1cCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29sdW1uc19pbmZvW2VhY2hfY29sXVsndHlwZV9uYW1lJ10KLSAgICAgICAgICAgICAgICAg ICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90eXBlW2VhY2hfY29sXSA9 IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zX2luZm9bZWFjaF9jb2xdWyd0 eXBlX25hbWUnXQotCi0gICAgICAgICAgICAgICAgIyBGb3IgbmV3bHkgYWRkZWQgcm93cwotICAg ICAgICAgICAgICAgIGlmIG9mX3R5cGUgPT0gJ2FkZGVkJzoKLSAgICAgICAgICAgICAgICAgICAg IyBQeXRob24gZGljdCBkb2VzIG5vdCBob25vdXIgdGhlIGluc2VydGVkIGl0ZW0gb3JkZXIKLSAg ICAgICAgICAgICAgICAgICAgIyBTbyB0byBpbnNlcnQgZGF0YSBpbiB0aGUgb3JkZXIsIHdlIG5l ZWQgdG8gbWFrZSBvcmRlcmVkCi0gICAgICAgICAgICAgICAgICAgICMgbGlzdCBvZiBhZGRlZCBp bmRleCBXZSBkb24ndCBuZWVkIHRoaXMgbWVjaGFuaXNtIGluCi0gICAgICAgICAgICAgICAgICAg ICMgdXBkYXRlZC9kZWxldGVkIHJvd3MgYXMgaXQgZG9lcyBub3QgbWF0dGVyIGluCi0gICAgICAg ICAgICAgICAgICAgICMgdGhvc2Ugb3BlcmF0aW9ucwotICAgICAgICAgICAgICAgICAgICBhZGRl ZF9pbmRleCA9IE9yZGVyZWREaWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRfZGF0YVsnYWRkZWRfaW5kZXgnXS5p dGVtcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgeDogaW50KHhb MF0pCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICkKLSAg ICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0gPSBbXQotCi0gICAgICAgICAg ICAgICAgICAgICMgV2hlbiBuZXcgcm93cyBhcmUgYWRkZWQsIG9ubHkgY2hhbmdlZCBjb2x1bW5z IGRhdGEgaXMKLSAgICAgICAgICAgICAgICAgICAgIyBzZW50IGZyb20gY2xpZW50IHNpZGUuIEJ1 dCBpZiBjb2x1bW4gaXMgbm90X251bGwgYW5kIGhhcwotICAgICAgICAgICAgICAgICAgICAjIG5v X2RlZmF1bHRfdmFsdWUsIHNldCBjb2x1bW4gdG8gYmxhbmssIGluc3RlYWQKLSAgICAgICAgICAg ICAgICAgICAgIyBvZiBub3QgbnVsbCB3aGljaCBpcyBzZXQgYnkgZGVmYXVsdC4KLSAgICAgICAg ICAgICAgICAgICAgY29sdW1uX2RhdGEgPSB7fQotICAgICAgICAgICAgICAgICAgICBwa19uYW1l cywgcHJpbWFyeV9rZXlzID0gc2VsZi5nZXRfcHJpbWFyeV9rZXlzKCkKLSAgICAgICAgICAgICAg ICAgICAgaGFzX29pZHMgPSAnb2lkJyBpbiBjb2x1bW5fdHlwZQotCi0gICAgICAgICAgICAgICAg ICAgIGZvciBlYWNoX3JvdyBpbiBhZGRlZF9pbmRleDoKLSAgICAgICAgICAgICAgICAgICAgICAg ICMgR2V0IHRoZSByb3cgaW5kZXggdG8gbWF0Y2ggd2l0aCB0aGUgYWRkZWQgcm93cwotICAgICAg ICAgICAgICAgICAgICAgICAgIyBkaWN0IGtleQotICAgICAgICAgICAgICAgICAgICAgICAgdG1w X3Jvd19pbmRleCA9IGFkZGVkX2luZGV4W2VhY2hfcm93XQotICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YSA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVt0bXBfcm93X2luZGV4XVsnZGF0YSddCi0g ICAgICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBvdXIgdW5pcXVlIHRyYWNraW5nIGtleQot ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wb3AoY2xpZW50X3ByaW1hcnlfa2V5LCBOb25l KQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wb3AoJ2lzX3Jvd19jb3BpZWQnLCBOb25l KQotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9yb3dpZC5hcHBlbmQoZGF0YS5nZXQo Y2xpZW50X3ByaW1hcnlfa2V5KSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUg Y29sdW1ucyB2YWx1ZSB3aXRoIGNvbHVtbnMgaGF2aW5nCi0gICAgICAgICAgICAgICAgICAgICAg ICAjIG5vdF9udWxsPUZhbHNlIGFuZCBoYXMgbm8gZGVmYXVsdCB2YWx1ZQotICAgICAgICAgICAg ICAgICAgICAgICAgY29sdW1uX2RhdGEudXBkYXRlKGRhdGEpCi0KLSAgICAgICAgICAgICAgICAg ICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ2luc2VydC5zcWwnXSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YV90b19iZV9zYXZlZD1jb2x1bW5fZGF0YSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvYmplY3RfbmFtZT1zZWxmLm9iamVjdF9uYW1lLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zcF9uYW1lPXNlbGYubnNwX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YV90eXBlPWNvbHVtbl90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBrX25hbWVzPXBrX25hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19vaWRz PWhhc19vaWRzCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLSAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGVjdF9zcWwgPSByZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIi8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICdzZWxlY3Quc3FsJ10pLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9uYW1lPXNlbGYub2JqZWN0X25hbWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9c2VsZi5uc3BfbmFtZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleXM9cHJpbWFyeV9rZXlzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGhhc19vaWRzPWhhc19vaWRzCi0gICAgICAgICAgICAgICAgICAg ICAgICApCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVdLmFw cGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxbCc6IHNxbCwgJ2RhdGEnOiBk YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGllbnRfcm93JzogdG1wX3Jvd19p bmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VsZWN0X3NxbCc6IHNlbGVjdF9z cWwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgICAgICAgICAj IFJlc2V0IGNvbHVtbiBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YSA9 IHt9Ci0KLSAgICAgICAgICAgICAgICAjIEZvciB1cGRhdGVkIHJvd3MKLSAgICAgICAgICAgICAg ICBlbGlmIG9mX3R5cGUgPT0gJ3VwZGF0ZWQnOgotICAgICAgICAgICAgICAgICAgICBsaXN0X29m X3NxbFtvZl90eXBlXSA9IFtdCi0gICAgICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBj aGFuZ2VkX2RhdGFbb2ZfdHlwZV06Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gY2hh bmdlZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XVsnZGF0YSddCi0gICAgICAgICAgICAgICAgICAg ICAgICBwayA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd11bJ3ByaW1hcnlfa2V5cydd Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICd1cGRhdGUuc3Fs J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9fYmVfc2F2ZWQ9ZGF0YSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleXM9cGssCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgb2JqZWN0X25hbWU9c2VsZi5vYmplY3RfbmFtZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1zZWxmLm5zcF9uYW1lLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGFfdHlwZT1jb2x1bW5fdHlwZQotICAgICAgICAgICAgICAgICAg ICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0uYXBw ZW5kKHsnc3FsJzogc3FsLCAnZGF0YSc6IGRhdGF9KQotICAgICAgICAgICAgICAgICAgICAgICAg bGlzdF9vZl9yb3dpZC5hcHBlbmQoZGF0YS5nZXQoY2xpZW50X3ByaW1hcnlfa2V5KSkKLQotICAg ICAgICAgICAgICAgICMgRm9yIGRlbGV0ZWQgcm93cwotICAgICAgICAgICAgICAgIGVsaWYgb2Zf dHlwZSA9PSAnZGVsZXRlZCc6Ci0gICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5 cGVdID0gW10KLSAgICAgICAgICAgICAgICAgICAgaXNfZmlyc3QgPSBUcnVlCi0gICAgICAgICAg ICAgICAgICAgIHJvd3NfdG9fZGVsZXRlID0gW10KLSAgICAgICAgICAgICAgICAgICAga2V5cyA9 IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgbm9fb2Zfa2V5cyA9IE5vbmUKLSAgICAgICAgICAg ICAgICAgICAgZm9yIGVhY2hfcm93IGluIGNoYW5nZWRfZGF0YVtvZl90eXBlXToKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJvd3NfdG9fZGVsZXRlLmFwcGVuZChjaGFuZ2VkX2RhdGFbb2ZfdHlw ZV1bZWFjaF9yb3ddKQotICAgICAgICAgICAgICAgICAgICAgICAgIyBGZXRjaCB0aGUga2V5cyBm b3IgU1FMIGdlbmVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzX2ZpcnN0Ogot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBjb3ZlcnQgZGljdF9rZXlz IHRvIG5vcm1hbCBsaXN0IGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQeXRob24z Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbiBQeXRob24yLCBpdCdzIGFscmVhZHkg YSBsaXN0ICYgV2Ugd2lsbCBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmZXRj aCBjb2x1bW4gbmFtZXMgdXNpbmcgaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBr ZXlzID0gbGlzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZF9kYXRh W29mX3R5cGVdW2VhY2hfcm93XS5rZXlzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fb2Zfa2V5cyA9IGxlbihrZXlzKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2ZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgICAg ICAgICAgIyBNYXAgaW5kZXggd2l0aCBjb2x1bW4gbmFtZSBmb3IgZWFjaCByb3cKLSAgICAgICAg ICAgICAgICAgICAgZm9yIHJvdyBpbiByb3dzX3RvX2RlbGV0ZToKLSAgICAgICAgICAgICAgICAg ICAgICAgIGZvciBrLCB2IGluIHJvdy5pdGVtcygpOgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgU2V0IHByaW1hcnkga2V5IHdpdGggbGFiZWwgJiBkZWxldGUgaW5kZXggYmFzZWQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1hcHBlZCBrZXkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjaGFu Z2VkX2RhdGFbJ2NvbHVtbnMnXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg W2ludChrKV1bJ25hbWUnXV0gPSB2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0 IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJvd1trXQotCi0gICAgICAgICAgICAgICAg ICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICIvIi5q b2luKFtzZWxmLnNxbF9wYXRoLCAnZGVsZXRlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGE9cm93c190b19kZWxldGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5 X2tleV9sYWJlbHM9a2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vX29mX2tleXM9bm9f b2Zfa2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9uYW1lPXNlbGYub2JqZWN0 X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1zZWxmLm5zcF9uYW1lCi0g ICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2Zf dHlwZV0uYXBwZW5kKHsnc3FsJzogc3FsLCAnZGF0YSc6IHt9fSkKLQotICAgICAgICAgICAgZm9y IG9wciwgc3FscyBpbiBsaXN0X29mX3NxbC5pdGVtcygpOgotICAgICAgICAgICAgICAgIGZvciBp dGVtIGluIHNxbHM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1bJ3NxbCddOgotICAgICAg ICAgICAgICAgICAgICAgICAgcm93X2FkZGVkID0gTm9uZQotCi0gICAgICAgICAgICAgICAgICAg ICAgICAjIEZldGNoIG9pZHMvcHJpbWFyeSBrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAnc2VsZWN0X3NxbCcgaW4gaXRlbSBhbmQgaXRlbVsnc2VsZWN0X3NxbCddOgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVjdXRlX2RpY3QoCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3NxbCddLCBpdGVtWydkYXRhJ10pCi0g ICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gY29ubi5leGVjdXRlX3ZvaWQoCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGl0ZW1bJ3NxbCddLCBpdGVtWydkYXRhJ10pCi0KLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5l eGVjdXRlX3ZvaWQoJ1JPTExCQUNLOycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJ ZiB3ZSByb2xsIGJhY2tlZCBldmVyeSB0aGluZyB0aGVuIHVwZGF0ZSB0aGUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIG1lc3NhZ2UgZm9yIGVhY2ggc3FsIHF1ZXJ5LgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciB2YWwgaW4gcXVlcnlfcmVzOgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiBxdWVyeV9yZXNbdmFsXVsnc3RhdHVzJ106Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXNbdmFsXVsncmVzdWx0J10gPSBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RyYW5zYWN0aW9uIFJPTExC QUNLJwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBsaXN0IGlzIGVtcHR5IHNl dCByb3dpZCB0byAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiBsaXN0X29mX3Jvd2lkOgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gbGlzdF9vZl9yb3dpZFtjb3VudF0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9yb3dpZCA9IDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNl cHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcm93aWQgPSAw Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCByZXMsIHF1ZXJ5 X3JlcywgX3Jvd2lkCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgU2VsZWN0IGFkZGVkIHJv dyBmcm9tIHRoZSB0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3NlbGVjdF9zcWwn IGluIGl0ZW06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxfcmVzID0g Y29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1b J3NlbGVjdF9zcWwnXSwgcmVzWydyb3dzJ11bMF0pCi0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25u LmV4ZWN1dGVfdm9pZCgnUk9MTEJBQ0s7JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBJZiB3ZSByb2xsIGJhY2tlZCBldmVyeSB0aGluZyB0aGVuIHVwZGF0ZQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBtZXNzYWdlIGZvciBlYWNoIHNxbCBxdWVyeS4K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiBxdWVyeV9yZXM6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxdWVyeV9yZXNbdmFsXVsnc3Rh dHVzJ106Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVz W3ZhbF1bJ3Jlc3VsdCddID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnVHJhbnNhY3Rpb24gUk9MTEJBQ0snCi0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBJZiBsaXN0IGlzIGVtcHR5IHNldCByb3dpZCB0byAxCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIGxpc3Rfb2Zfcm93aWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX3Jvd2lkID0gbGlzdF9vZl9yb3dpZFtjb3VudF0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX3Jvd2lkID0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQg RXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0g MAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIHNlbF9y ZXMsIHF1ZXJ5X3JlcywgX3Jvd2lkCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAn cm93cycgaW4gc2VsX3JlcyBhbmQgbGVuKHNlbF9yZXNbJ3Jvd3MnXSkgPiAwOgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByb3dfYWRkZWQgPSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpdGVtWydjbGllbnRfcm93J106IHNlbF9yZXNbJ3Jvd3MnXVswXX0K LQotICAgICAgICAgICAgICAgICAgICAgICAgcm93c19hZmZlY3RlZCA9IGNvbm4ucm93c19hZmZl Y3RlZCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgdGhlIHJlc3VsdCBvZiBl YWNoIHF1ZXJ5IGluIGRpY3Rpb25hcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jl c1tjb3VudF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1 cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzdWx0JzogTm9uZSBpZiByb3dfYWRk ZWQgZWxzZSByZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxbCc6IHNxbCwgJ3Jv d3NfYWZmZWN0ZWQnOiByb3dzX2FmZmVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdyb3dfYWRkZWQnOiByb3dfYWRkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQotCi0gICAgICAgICAgICAjIENvbW1pdCB0 aGUgdHJhbnNhY3Rpb24gaWYgdGhlcmUgaXMgbm8gZXJyb3IgZm91bmQKLSAgICAgICAgICAgIGNv bm4uZXhlY3V0ZV92b2lkKCdDT01NSVQ7JykKLQotICAgICAgICByZXR1cm4gc3RhdHVzLCByZXMs IHF1ZXJ5X3JlcywgX3Jvd2lkCisgICAgICAgIHJldHVybiBzYXZlX2NoYW5nZWRfZGF0YShjaGFu Z2VkX2RhdGE9Y2hhbmdlZF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29sdW1uc19pbmZvPWNvbHVtbnNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbW1hbmRfb2JqPXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj bGllbnRfcHJpbWFyeV9rZXk9Y2xpZW50X3ByaW1hcnlfa2V5LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29ubj1jb25uKQogCiAKIGNsYXNzIFZpZXdDb21tYW5kKEdyaWRDb21t YW5kKToKQEAgLTEwODksMTggKzg2MCw4OCBAQCBjbGFzcyBRdWVyeVRvb2xDb21tYW5kKEJhc2VD b21tYW5kLCBGZXRjaGVkUm93VHJhY2tlcik6CiAgICAgICAgIHNlbGYuYXV0b19yb2xsYmFjayA9 IEZhbHNlCiAgICAgICAgIHNlbGYuYXV0b19jb21taXQgPSBUcnVlCiAKKyAgICAgICAgIyBBdHRy aWJ1dGVzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGVkaXQgdXBkYXRhYmxlIHJlc3VsdHNlbHRzCisg ICAgICAgIHNlbGYuaXNfdXBkYXRhYmxlX3Jlc3VsdHNldCA9IEZhbHNlCisgICAgICAgIHNlbGYu cHJpbWFyeV9rZXlzID0gTm9uZQorICAgICAgICBzZWxmLnBrX25hbWVzID0gTm9uZQorCiAgICAg ZGVmIGdldF9zcWwoc2VsZiwgZGVmYXVsdF9jb25uPU5vbmUpOgogICAgICAgICByZXR1cm4gTm9u ZQogCiAgICAgZGVmIGdldF9hbGxfY29sdW1uc193aXRoX29yZGVyKHNlbGYsIGRlZmF1bHRfY29u bj1Ob25lKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAorICAgIGRlZiBnZXRfcHJpbWFyeV9rZXlz KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wa19uYW1lcywgc2VsZi5wcmltYXJ5X2tleXMK KwogICAgIGRlZiBjYW5fZWRpdChzZWxmKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg IHJldHVybiBzZWxmLmlzX3VwZGF0YWJsZV9yZXN1bHRzZXQKIAogICAgIGRlZiBjYW5fZmlsdGVy KHNlbGYpOgogICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgIGRlZiBjaGVja19mb3JfdXBkYXRh YmxlX3Jlc3VsdHNldF9hbmRfcHJpbWFyeV9rZXlzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAg ICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsYXN0IHN1 Y2Nlc3NmdWwgcXVlcnkKKyAgICAgICAgICAgIHByb2R1Y2VkIHVwZGF0YWJsZSByZXN1bHRzIGFu ZCBzZXRzIHRoZSBuZWNlc3NhcnkgZmxhZ3MgYW5kCisgICAgICAgICAgICBhdHRyaWJ1dGVzIGFj Y29yZGluZ2x5CisgICAgICAgICIiIgorICAgICAgICAjIEZldGNoIHRoZSBjb25uZWN0aW9uIG9i amVjdAorICAgICAgICBkcml2ZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKQorICAg ICAgICBtYW5hZ2VyID0gZHJpdmVyLmNvbm5lY3Rpb25fbWFuYWdlcihzZWxmLnNpZCkKKyAgICAg ICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9c2VsZi5kaWQsIGNvbm5faWQ9c2VsZi5j b25uX2lkKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgcXVlcnkgcmVzdWx0cyBhcmUgcmVh ZHkgZmlyc3QKKyAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLnBvbGwoCisgICAgICAgICAg ICBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1UcnVlLCBub19yZXN1bHQ9VHJ1ZSkKKyAgICAgICAg aWYgc3RhdHVzICE9IEFTWU5DX09LOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBH ZXQgdGhlIHBhdGggdG8gdGhlIHNxbCB0ZW1wbGF0ZXMKKyAgICAgICAgc3FsX3BhdGggPSAnc3Fs ZWRpdG9yL3NxbC8jezB9IycuZm9ybWF0KG1hbmFnZXIudmVyc2lvbikKKworICAgICAgICBzZWxm LmlzX3VwZGF0YWJsZV9yZXN1bHRzZXQsIHNlbGYucHJpbWFyeV9rZXlzLCBwa19uYW1lcywgdGFi bGVfb2lkID0gXAorICAgICAgICAgICAgaXNfcXVlcnlfcmVzdWx0c2V0X3VwZGF0YWJsZShjb25u LCBzcWxfcGF0aCkKKworICAgICAgICAjIENyZWF0ZSBwa19uYW1lcyBhdHRyaWJ1dGUgaW4gdGhl IHJlcXVpcmVkIGZvcm1hdAorICAgICAgICBpZiBwa19uYW1lcyBpcyBub3QgTm9uZToKKyAgICAg ICAgICAgIHNlbGYucGtfbmFtZXMgPSAnJworCisgICAgICAgICAgICBmb3IgcGtfbmFtZSBpbiBw a19uYW1lczoKKyAgICAgICAgICAgICAgICBzZWxmLnBrX25hbWVzICs9IGRyaXZlci5xdElkZW50 KGNvbm4sIHBrX25hbWUpICsgJywnCisKKyAgICAgICAgICAgIGlmIHNlbGYucGtfbmFtZXMgIT0g Jyc6CisgICAgICAgICAgICAgICAgIyBSZW1vdmUgbGFzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3Ry aW5nCisgICAgICAgICAgICAgICAgc2VsZi5wa19uYW1lcyA9IHNlbGYucGtfbmFtZXNbOi0xXQor CisgICAgICAgICMgQWRkIGF0dHJpYnV0ZXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byB1cGRhdGUg dGFibGUgZGF0YQorICAgICAgICBpZiBzZWxmLmlzX3VwZGF0YWJsZV9yZXN1bHRzZXQ6CisgICAg ICAgICAgICBzZWxmLl9fc2V0X3VwZGF0YWJsZV9yZXN1bHRzZXRfYXR0cmlidXRlcyhzcWxfcGF0 aD1zcWxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRhYmxlX29pZD10YWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uPWNvbm4pCisKKyAgICBkZWYgc2F2ZShz ZWxmLAorICAgICAgICAgICAgIGNoYW5nZWRfZGF0YSwKKyAgICAgICAgICAgICBjb2x1bW5zX2lu Zm8sCisgICAgICAgICAgICAgY2xpZW50X3ByaW1hcnlfa2V5PSdfX3RlbXBfUEsnLAorICAgICAg ICAgICAgIGRlZmF1bHRfY29ubj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfdXBkYXRh YmxlX3Jlc3VsdHNldDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZ2V0dGV4dCgnUmVzdWx0 c2V0IGlzIG5vdCB1cGRhdGFibGUuJyksIE5vbmUsIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIGRyaXZlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpCisgICAgICAgICAg ICBpZiBkZWZhdWx0X2Nvbm4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBtYW5hZ2VyID0gZHJp dmVyLmNvbm5lY3Rpb25fbWFuYWdlcihzZWxmLnNpZCkKKyAgICAgICAgICAgICAgICBjb25uID0g bWFuYWdlci5jb25uZWN0aW9uKGRpZD1zZWxmLmRpZCwgY29ubl9pZD1zZWxmLmNvbm5faWQpCisg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbm4gPSBkZWZhdWx0X2Nvbm4KKwor ICAgICAgICAgICAgcmV0dXJuIHNhdmVfY2hhbmdlZF9kYXRhKGNoYW5nZWRfZGF0YT1jaGFuZ2Vk X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc19pbmZv PWNvbHVtbnNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25u PWNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9vYmo9 c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfcHJpbWFy eV9rZXk9Y2xpZW50X3ByaW1hcnlfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGF1dG9fY29tbWl0PXNlbGYuYXV0b19jb21taXQpCisKICAgICBkZWYgc2V0X2Nvbm5l Y3Rpb25faWQoc2VsZiwgY29ubl9pZCk6CiAgICAgICAgIHNlbGYuY29ubl9pZCA9IGNvbm5faWQK IApAQCAtMTEwOSwzICs5NTAsMjggQEAgY2xhc3MgUXVlcnlUb29sQ29tbWFuZChCYXNlQ29tbWFu ZCwgRmV0Y2hlZFJvd1RyYWNrZXIpOgogCiAgICAgZGVmIHNldF9hdXRvX2NvbW1pdChzZWxmLCBh dXRvX2NvbW1pdCk6CiAgICAgICAgIHNlbGYuYXV0b19jb21taXQgPSBhdXRvX2NvbW1pdAorCisg ICAgZGVmIF9fc2V0X3VwZGF0YWJsZV9yZXN1bHRzZXRfYXR0cmlidXRlcyhzZWxmLCBzcWxfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX29p ZCwgY29ubik6CisgICAgICAgICMgU2V0IHRlbXBsYXRlIHBhdGggZm9yIHNxbCBzY3JpcHRzIGFu ZCB0aGUgdGFibGUgb2JqZWN0IGlkCisgICAgICAgIHNlbGYuc3FsX3BhdGggPSBzcWxfcGF0aAor ICAgICAgICBzZWxmLm9ial9pZCA9IHRhYmxlX29pZAorCisgICAgICAgIGlmIGNvbm4uY29ubmVj dGVkKCk6CisgICAgICAgICAgICAjIEZldGNoIHRoZSBOYW1lc3BhY2UgTmFtZSBhbmQgb2JqZWN0 IE5hbWUKKyAgICAgICAgICAgIHF1ZXJ5ID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICIvIi5qb2luKFtzZWxmLnNxbF9wYXRoLCAnb2JqZWN0bmFtZS5zcWwnXSksCisgICAgICAg ICAgICAgICAgb2JqX2lkPXNlbGYub2JqX2lkCisgICAgICAgICAgICApCisKKyAgICAgICAgICAg IHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVjdXRlX2RpY3QocXVlcnkpCisgICAgICAgICAgICBp ZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihyZXN1bHQpCisK KyAgICAgICAgICAgIHNlbGYubnNwX25hbWUgPSByZXN1bHRbJ3Jvd3MnXVswXVsnbnNwbmFtZSdd CisgICAgICAgICAgICBzZWxmLm9iamVjdF9uYW1lID0gcmVzdWx0Wydyb3dzJ11bMF1bJ3JlbG5h bWUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGdldHRleHQo CisgICAgICAgICAgICAgICAgJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIG9yIGNvbm5lY3Rpb24g d2l0aCB0aGUgc2VydmVyICcKKyAgICAgICAgICAgICAgICAnaGFzIGJlZW4gY2xvc2VkLicpCisg ICAgICAgICAgICApCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3Rh dGljL2Nzcy9zcWxlZGl0b3IuY3NzIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRp Yy9jc3Mvc3FsZWRpdG9yLmNzcwppbmRleCA4NmQzZGVmYy4uMWU3YmZjMjIgMTAwNjQ0Ci0tLSBh L3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvY3NzL3NxbGVkaXRvci5jc3MKKysr IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcwpA QCAtNDI3LDMgKzQyNyw4IEBAIGlucHV0LmVkaXRvci1jaGVja2JveDpmb2N1cyB7CiAuaGlkZS12 ZXJ0aWNhbC1zY3JvbGxiYXIgewogICBvdmVyZmxvdy15OiBoaWRkZW47CiB9CisKKy5oaWdobGln aHRlZF9ncmlkX2NlbGxzIHsKKyAgYmFja2dyb3VuZDogI2Y0ZjRmNDsKKyAgZm9udC13ZWlnaHQ6 IGJvbGQ7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGlj L2pzL3NxbGVkaXRvci5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvanMv c3FsZWRpdG9yLmpzCmluZGV4IDZhZjA5OGI0Li41YTMxYjJkOSAxMDA2NDQKLS0tIGEvd2ViL3Bn YWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9qcy9zcWxlZGl0b3IuanMKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9qcy9zcWxlZGl0b3IuanMKQEAgLTczNCw2ICs3 MzQsOCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICByZW5kZXJfZ3JpZDogZnVu Y3Rpb24oY29sbGVjdGlvbiwgY29sdW1ucywgaXNfZWRpdGFibGUsIGNsaWVudF9wcmltYXJ5X2tl eSwgcm93c19hZmZlY3RlZCkgewogICAgICAgdmFyIHNlbGYgPSB0aGlzOwogCisgICAgICBzZWxm LmhhbmRsZXIubnVtYmVyT2ZNb2RpZmllZENlbGxzID0gMDsKKwogICAgICAgLy8gVGhpcyB3aWxs IHdvcmsgYXMgZGF0YSBzdG9yZSBhbmQgaG9sZHMgYWxsIHRoZQogICAgICAgLy8gaW5zZXJ0ZWQv dXBkYXRlZC9kZWxldGVkIGRhdGEgZnJvbSBncmlkCiAgICAgICBzZWxmLmhhbmRsZXIuZGF0YV9z dG9yZSA9IHsKQEAgLTEwNjcsNiArMTA2OSwxNCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcs IFsKICAgICAgICAgICBfcGsgPSBhcmdzLml0ZW1bc2VsZi5jbGllbnRfcHJpbWFyeV9rZXldIHx8 IG51bGwsIC8vIFVuaXF1ZSBrZXkgdG8gaWRlbnRpZnkgcm93CiAgICAgICAgICAgY29sdW1uX2Rh dGEgPSB7fTsKIAorICAgICAgICAvLyBIaWdobGlnaHQgdGhlIGNoYW5nZWQgY2VsbAorICAgICAg ICBzZWxmLmhhbmRsZXIubnVtYmVyT2ZNb2RpZmllZENlbGxzKys7CisgICAgICAgIGFyZ3MuZ3Jp ZC5hZGRDZWxsQ3NzU3R5bGVzKHNlbGYuaGFuZGxlci5udW1iZXJPZk1vZGlmaWVkQ2VsbHMsIHsK KyAgICAgICAgICBbYXJncy5yb3ddIDogeworICAgICAgICAgICAgW2NoYW5nZWRfY29sdW1uXTog J2hpZ2hsaWdodGVkX2dyaWRfY2VsbHMnLAorICAgICAgICAgIH0sCisgICAgICAgIH0pOworCiAg ICAgICAgIC8vIEFjY2VzcyB0byByb3cvY2VsbCB2YWx1ZSBhZnRlciBhIGNlbGwgaXMgY2hhbmdl ZC4KICAgICAgICAgLy8gVGhlIHB1cnBvc2UgaXMgdG8gcmVtb3ZlIHJvd19pZCBmcm9tIHRlbXBf bmV3X3JvdwogICAgICAgICAvLyBpZiBuZXcgcm93IGhhcyBwcmltYXJ5IGtleSBpbnN0ZWFkIG9m IFtkZWZhdWx0X3ZhbHVlXQpAQCAtMTE1MCw2ICsxMTYwLDcgQEAgZGVmaW5lKCd0b29scy5xdWVy eXRvb2wnLCBbCiAgICAgICAgICAgJ2RhdGEnOiBpdGVtLAogICAgICAgICB9OwogICAgICAgICBz ZWxmLmhhbmRsZXIuZGF0YV9zdG9yZS5hZGRlZF9pbmRleFtkYXRhX2xlbmd0aF0gPSBfa2V5Owor CiAgICAgICAgIC8vIEZldGNoIGRhdGEgdHlwZSAmIGFkZCBpdCBmb3IgdGhlIGNvbHVtbgogICAg ICAgICB2YXIgdGVtcCA9IHt9OwogICAgICAgICB0ZW1wW2NvbHVtbi5uYW1lXSA9IF8ud2hlcmUo dGhpcy5jb2x1bW5zLCB7CkBAIC0xMTU4LDYgKzExNjksMTUgQEAgZGVmaW5lKCd0b29scy5xdWVy eXRvb2wnLCBbCiAgICAgICAgIGdyaWQudXBkYXRlUm93Q291bnQoKTsKICAgICAgICAgZ3JpZC5y ZW5kZXIoKTsKIAorICAgICAgICAvLyBIaWdobGlnaHQgdGhlIGZpcnN0IGFkZGVkIGNlbGwgb2Yg dGhlIG5ldyByb3cKKyAgICAgICAgdmFyIHJvdyA9IGRhdGFWaWV3LmdldFJvd0J5SXRlbShpdGVt KTsKKyAgICAgICAgc2VsZi5oYW5kbGVyLm51bWJlck9mTW9kaWZpZWRDZWxscysrOworICAgICAg ICBhcmdzLmdyaWQuYWRkQ2VsbENzc1N0eWxlcyhzZWxmLmhhbmRsZXIubnVtYmVyT2ZNb2RpZmll ZENlbGxzLCB7CisgICAgICAgICAgW3Jvd10gOiB7CisgICAgICAgICAgICBbY29sdW1uLmZpZWxk XTogJ2hpZ2hsaWdodGVkX2dyaWRfY2VsbHMnLAorICAgICAgICAgIH0sCisgICAgICAgIH0pOwor CiAgICAgICAgIC8vIEVuYWJsZSBzYXZlIGJ1dHRvbgogICAgICAgICAkKCcjYnRuLXNhdmUnKS5w cm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKICAgICAgIH0uYmluZChlZGl0b3JfZGF0YSkpOwpAQCAt MTIwOCw5ICsxMjI4LDExIEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgfQog ICAgICAgZGF0YVZpZXcuc2V0SXRlbXMoY29sbGVjdGlvbiwgc2VsZi5jbGllbnRfcHJpbWFyeV9r ZXkpOwogICAgIH0sCisKICAgICBmZXRjaF9uZXh0X2FsbDogZnVuY3Rpb24oY2IpIHsKICAgICAg IHRoaXMuZmV0Y2hfbmV4dCh0cnVlLCBjYik7CiAgICAgfSwKKwogICAgIGZldGNoX25leHQ6IGZ1 bmN0aW9uKGZldGNoX2FsbCwgY2IpIHsKICAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICAg dXJsID0gJyc7CkBAIC0yMzc2LDYgKzIzOTgsMTggQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wn LCBbCiAgICAgICAgIGVsc2UKICAgICAgICAgICBzZWxmLmNhbl9lZGl0ID0gdHJ1ZTsKIAorICAg ICAgICAvKiBJZiB0aGUgcXVlcnkgcmVzdWx0cyBhcmUgdXBkYXRhYmxlIHRoZW4ga2VlcCB0cmFj ayBvZiBuZXdseSBhZGRlZAorICAgICAgICAgKiByb3dzCisgICAgICAgICAqLworICAgICAgICBp ZiAoc2VsZi5pc19xdWVyeV90b29sICYmIHNlbGYuY2FuX2VkaXQpIHsKKyAgICAgICAgICAvLyBr ZWVwIHRyYWNrIG9mIG5ld2x5IGFkZGVkIHJvd3MKKyAgICAgICAgICBzZWxmLnJvd3NfdG9fZGlz YWJsZSA9IG5ldyBBcnJheSgpOworICAgICAgICAgIC8vIFRlbXBvcmFyaWx5IGhvbGQgbmV3IHJv d3MgYWRkZWQKKyAgICAgICAgICBzZWxmLnRlbXBfbmV3X3Jvd3MgPSBuZXcgQXJyYXkoKTsKKyAg ICAgICAgICBzZWxmLmhhc19tb3JlX3Jvd3MgPSBmYWxzZTsKKyAgICAgICAgICBzZWxmLmZldGNo aW5nX3Jvd3MgPSBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qIElmIHVzZXIgY2FuIGZp bHRlciB0aGUgZGF0YSB0aGVuIHdlIHNob3VsZCBlbmFibGVkCiAgICAgICAgICAqIEZpbHRlciBh bmQgTGltaXQgYnV0dG9ucy4KICAgICAgICAgICovCkBAIC0yODE4LDEyICsyODUyLDE1IEBAIGRl ZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICogdGhlIGFqYXggY2FsbCB0byBzYXZl IHRoZSBkYXRhIGludG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICAgICAgICAqIGFuZCB3aWxsIG9w ZW4gc2F2ZSBmaWxlIGRpYWxvZyBjb25kaXRpb25hbGx5LgogICAgICAgICovCi0gICAgICBfc2F2 ZTogZnVuY3Rpb24odmlldywgY29udHJvbGxlciwgc2F2ZV9hcykgeworICAgICAgX3NhdmU6IGZ1 bmN0aW9uKHZpZXcsIGNvbnRyb2xsZXIsIHNhdmVfYXM9ZmFsc2UpIHsKICAgICAgICAgdmFyIHNl bGYgPSB0aGlzLAogICAgICAgICAgIHNhdmVfZGF0YSA9IHRydWU7CiAKLSAgICAgICAgLy8gT3Bl biBzYXZlIGZpbGUgZGlhbG9nIGlmIHF1ZXJ5IHRvb2wKLSAgICAgICAgaWYgKHNlbGYuaXNfcXVl cnlfdG9vbCkgeworICAgICAgICAvLyBPcGVuIHNhdmUgZmlsZSBkaWFsb2cgaWYgcXVlcnkgdG9v bCBhbmQ6CisgICAgICAgIC8vIC0gcmVzdWx0cyBhcmUgbm90IGVkaXRhYmxlCisgICAgICAgIC8v IG9yCisgICAgICAgIC8vIC0gJ3NhdmUgYXMnIGlzIHByZXNzZWQgaW5zdGVhZCBvZiAnc2F2ZScK KyAgICAgICAgaWYgKHNlbGYuaXNfcXVlcnlfdG9vbCAmJiAoIXNlbGYuY2FuX2VkaXQgfHwgc2F2 ZV9hcykpIHsKICAgICAgICAgICB2YXIgY3VycmVudF9maWxlID0gc2VsZi5ncmlkVmlldy5jdXJy ZW50X2ZpbGU7CiAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGN1cnJlbnRfZmlsZSkgJiYg IXNhdmVfYXMpIHsKICAgICAgICAgICAgIHNlbGYuX3NhdmVfZmlsZV9oYW5kbGVyKGN1cnJlbnRf ZmlsZSk7CkBAIC0yODUyLDcgKzI4ODksNiBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsK ICAgICAgICAgfQogCiAgICAgICAgIGlmIChzYXZlX2RhdGEpIHsKLQogICAgICAgICAgIHNlbGYu dHJpZ2dlcigKICAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246c2hv dycsCiAgICAgICAgICAgICBnZXR0ZXh0KCdTYXZpbmcgdGhlIHVwZGF0ZWQgZGF0YS4uLicpCkBA IC0yODc4LDYgKzI5MTQsMTMgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAg ICAgICAgICAgZGF0YSA9IFtdOwogCiAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMp IHsKKworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBoaWdobGlnaHRlZCBjZWxscyBzdHlsaW5n CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gc2VsZi5udW1iZXJPZk1vZGlm aWVkQ2VsbHM7IGkrKykKKyAgICAgICAgICAgICAgICAgIGdyaWQucmVtb3ZlQ2VsbENzc1N0eWxl cyhpKTsKKworICAgICAgICAgICAgICAgIHNlbGYubnVtYmVyT2ZNb2RpZmllZENlbGxzID0gMDsK KwogICAgICAgICAgICAgICAgIGlmKGlzX2FkZGVkKSB7CiAgICAgICAgICAgICAgICAgLy8gVXBk YXRlIHRoZSByb3dzIGluIGEgZ3JpZCBhZnRlciBhZGRpdGlvbgogICAgICAgICAgICAgICAgICAg ZGF0YVZpZXcuYmVnaW5VcGRhdGUoKTsKQEAgLTM1OTIsOCArMzYzNSwzNiBAQCBkZWZpbmUoJ3Rv b2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBmZXRjaCB0aGUg c3FsIHF1ZXJ5IGZyb20gdGhlIHRleHQgYm94CiAgICAgICAvLyBhbmQgZXhlY3V0ZSB0aGUgcXVl cnkuCiAgICAgICBleGVjdXRlOiBmdW5jdGlvbihleHBsYWluX3ByZWZpeCwgc2hvdWxkUmVjb25u ZWN0PWZhbHNlKSB7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpcywKLSAgICAgICAgICBzcWwgPSAn JzsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBk YXRhIGdyaWQgaGFzIGFueSBjaGFuZ2VzIGJlZm9yZSBydW5uaW5nIHF1ZXJ5CisgICAgICAgIC8v IENoZWNrIGlmIHRoZSBkYXRhIGdyaWQgaGFzIGFueSBjaGFuZ2VzIGJlZm9yZSBydW5uaW5nIHF1 ZXJ5CisgICAgICAgIGlmIChzZWxmLmNhbl9lZGl0ICYmIF8uaGFzKHNlbGYsICdkYXRhX3N0b3Jl JykgJiYKKyAgICAgICAgICAoXy5zaXplKHNlbGYuZGF0YV9zdG9yZS5hZGRlZCkgfHwKKyAgICAg ICAgICAgIF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUudXBkYXRlZCkgfHwKKyAgICAgICAgICAgIF8u c2l6ZShzZWxmLmRhdGFfc3RvcmUuZGVsZXRlZCkpCisgICAgICAgICkgeworICAgICAgICAgIGFs ZXJ0aWZ5LmNvbmZpcm0oZ2V0dGV4dCgnVW5zYXZlZCBjaGFuZ2VzJyksCisgICAgICAgICAgICBn ZXR0ZXh0KCdUaGUgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCwgYnV0IG5vdCBzYXZlZC4gQXJlIHlv dSBzdXJlIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhlIGNoYW5nZXM/JyksCisgICAgICAgICAgICBm dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyBhcyB1c2VyIGRvIG5vdCB3 YW50IHRvIHNhdmUsIGp1c3QgY29udGludWUKKyAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZV9z cWxfcXVlcnkoZXhwbGFpbl9wcmVmaXgsIHNob3VsZFJlY29ubmVjdCk7CisgICAgICAgICAgICB9 LAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIC8vIFN0b3AsIFVzZXIg d2FudHMgdG8gc2F2ZQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICApLnNldCgnbGFiZWxzJywgeworICAgICAgICAgICAgb2s6IGdldHRleHQoJ1ll cycpLAorICAgICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdObycpLAorICAgICAgICAgIH0pOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNlbGYuX2V4ZWN1dGVfc3FsX3F1ZXJ5KGV4cGxh aW5fcHJlZml4LCBzaG91bGRSZWNvbm5lY3QpOworICAgICAgICB9CisgICAgICB9LAorCisgICAg ICBfZXhlY3V0ZV9zcWxfcXVlcnk6IGZ1bmN0aW9uKGV4cGxhaW5fcHJlZml4LCBzaG91bGRSZWNv bm5lY3QpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzcWwgPSAnJzsKIAogICAgICAgICBz ZWxmLmhhc19tb3JlX3Jvd3MgPSBmYWxzZTsKICAgICAgICAgc2VsZi5mZXRjaGluZ19yb3dzID0g ZmFsc2U7CkBAIC0zNjAyLDggKzM2NzMsOCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsK ICAgICAgICAgICBzcWwgPSBzZWxmLnNwZWNpYWxfc3FsOwogICAgICAgICB9IGVsc2UgewogICAg ICAgICAgIC8qIElmIGNvZGUgaXMgc2VsZWN0ZWQgaW4gdGhlIGNvZGUgbWlycm9yIHRoZW4gZXhl Y3V0ZQotICAgICAgICAgICAqIHRoZSBzZWxlY3RlZCBwYXJ0IGVsc2UgZXhlY3V0ZSB0aGUgY29t cGxldGUgY29kZS4KLSAgICAgICAgICAgKi8KKyAgICAgICAgICAqIHRoZSBzZWxlY3RlZCBwYXJ0 IGVsc2UgZXhlY3V0ZSB0aGUgY29tcGxldGUgY29kZS4KKyAgICAgICAgICAqLwogICAgICAgICAg IHZhciBzZWxlY3RlZF9jb2RlID0gc2VsZi5ncmlkVmlldy5xdWVyeV90b29sX29iai5nZXRTZWxl Y3Rpb24oKTsKICAgICAgICAgICBpZiAoc2VsZWN0ZWRfY29kZS5sZW5ndGggPiAwKQogICAgICAg ICAgICAgc3FsID0gc2VsZWN0ZWRfY29kZTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL3NxbC8xMV9wbHVzL3ByaW1hcnlfa2V5cy5z cWwgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9zcWwv MTFfcGx1cy9wcmltYXJ5X2tleXMuc3FsCmluZGV4IDFkZmIwOTRmLi40NTk5NzdlOSAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Ivc3Fs LzExX3BsdXMvcHJpbWFyeV9rZXlzLnNxbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0 b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9zcWwvMTFfcGx1cy9wcmltYXJ5X2tleXMuc3FsCkBAIC0x LDYgKzEsNiBAQAogeyMgPT09PT09PT09PT09PSBGZXRjaCB0aGUgcHJpbWFyeSBrZXlzIGZvciBn aXZlbiBvYmplY3QgaWQgPT09PT09PT09PT09PSAjfQogeyUgaWYgb2JqX2lkICV9Ci1TRUxFQ1Qg YXQuYXR0bmFtZSwgdHkudHlwbmFtZQorU0VMRUNUIGF0LmF0dG5hbWUsIGF0LmF0dG51bSwgdHku dHlwbmFtZQogRlJPTSBwZ19hdHRyaWJ1dGUgYXQgTEVGVCBKT0lOIHBnX3R5cGUgdHkgT04gKHR5 Lm9pZCA9IGF0LmF0dHR5cGlkKQogV0hFUkUgYXR0cmVsaWQ9e3tvYmpfaWR9fTo6b2lkIEFORCBh dHRudW0gPSBBTlkgKAogICAgIChTRUxFQ1QgY29uLmNvbmtleSBGUk9NIHBnX2NsYXNzIHJlbCBM RUZUIE9VVEVSIEpPSU4gcGdfY29uc3RyYWludCBjb24gT04gY29uLmNvbnJlbGlkPXJlbC5vaWQK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRp dG9yL3NxbC9kZWZhdWx0L3ByaW1hcnlfa2V5cy5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9zcWxl ZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9zcWwvZGVmYXVsdC9wcmltYXJ5X2tleXMuc3FsCmlu ZGV4IDYwZDBlNTZmLi5hOTZjOTI4ZiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3Fs ZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Ivc3FsL2RlZmF1bHQvcHJpbWFyeV9rZXlzLnNxbAor KysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9zcWwv ZGVmYXVsdC9wcmltYXJ5X2tleXMuc3FsCkBAIC0xLDggKzEsOCBAQAogeyMgPT09PT09PT09PT09 PSBGZXRjaCB0aGUgcHJpbWFyeSBrZXlzIGZvciBnaXZlbiBvYmplY3QgaWQgPT09PT09PT09PT09 PSAjfQogeyUgaWYgb2JqX2lkICV9Ci1TRUxFQ1QgYXQuYXR0bmFtZSwgdHkudHlwbmFtZQorU0VM RUNUIGF0LmF0dG5hbWUsIGF0LmF0dG51bSwgdHkudHlwbmFtZQogRlJPTSBwZ19hdHRyaWJ1dGUg YXQgTEVGVCBKT0lOIHBnX3R5cGUgdHkgT04gKHR5Lm9pZCA9IGF0LmF0dHR5cGlkKQogV0hFUkUg YXR0cmVsaWQ9e3tvYmpfaWR9fTo6b2lkIEFORCBhdHRudW0gPSBBTlkgKAogICAgIChTRUxFQ1Qg Y29uLmNvbmtleSBGUk9NIHBnX2NsYXNzIHJlbCBMRUZUIE9VVEVSIEpPSU4gcGdfY29uc3RyYWlu dCBjb24gT04gY29uLmNvbnJlbGlkPXJlbC5vaWQKICAgICBBTkQgY29uLmNvbnR5cGU9J3AnIFdI RVJFIHJlbC5yZWxraW5kIElOICgncicsJ3MnLCd0JykgQU5EIHJlbC5vaWQgPSB7e29ial9pZH19 OjpvaWQpOjpvaWRbXSkKLXslIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor eyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci91dGls cy9pc19xdWVyeV9yZXN1bHRzZXRfdXBkYXRhYmxlLnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3Fs ZWRpdG9yL3V0aWxzL2lzX3F1ZXJ5X3Jlc3VsdHNldF91cGRhdGFibGUucHkKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmE4OWVjYzZhCi0tLSAvZGV2L251bGwKKysrIGIvd2Vi L3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3V0aWxzL2lzX3F1ZXJ5X3Jlc3VsdHNldF91cGRhdGFi bGUucHkKQEAgLTAsMCArMSw5NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0 IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE5LCBUaGUg cGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5k ZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiCisg ICAgQ2hlY2sgaWYgdGhlIHJlc3VsdC1zZXQgb2YgYSBxdWVyeSBpcyB1cGRhdGFibGUsIEEgcmVz dWx0c2V0IGlzCisgICAgdXBkYXRhYmxlIChhcyBvZiB0aGlzIHZlcnNpb24pIGlmOgorICAgICAg ICAtIEFsbCBjb2x1bW5zIGJlbG9uZyB0byB0aGUgc2FtZSB0YWJsZS4KKyAgICAgICAgLSBBbGwg dGhlIHByaW1hcnkga2V5IGNvbHVtbnMgb2YgdGhlIHRhYmxlIGFyZSBwcmVzZW50IGluIHRoZSBy ZXN1bHRzZXQKKyAgICAgICAgLSBObyBkdXBsaWNhdGUgY29sdW1ucworIiIiCitmcm9tIGZsYXNr IGltcG9ydCByZW5kZXJfdGVtcGxhdGUKK3RyeToKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9y dCBPcmRlcmVkRGljdAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gb3JkZXJlZGRpY3Qg aW1wb3J0IE9yZGVyZWREaWN0CisKKworZGVmIGlzX3F1ZXJ5X3Jlc3VsdHNldF91cGRhdGFibGUo Y29ubiwgc3FsX3BhdGgpOgorICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg dG8gY2hlY2sgd2hldGhlciB0aGUgbGFzdCBzdWNjZXNzZnVsIHF1ZXJ5CisgICAgICAgIHByb2R1 Y2VkIHVwZGF0YWJsZSByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBjb25u OiBDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgICAgICAgIHNxbF9wYXRoOiB0aGUgcGF0aCB0byB0 aGUgc3FsIHRlbXBsYXRlcy4KKyAgICAiIiIKKyAgICBjb2x1bW5zX2luZm8gPSBjb25uLmdldF9j b2x1bW5faW5mbygpCisKKyAgICAjIEZldGNoIHRoZSBjb2x1bW4gaW5mbworICAgIGlmIGNvbHVt bnNfaW5mbyBpcyBOb25lIG9yIGxlbihjb2x1bW5zX2luZm8pIDwgMToKKyAgICAgICAgcmV0dXJu IEZhbHNlLCBOb25lLCBOb25lLCBOb25lCisKKyAgICAjIEZpcnN0IGNoZWNrIHRoYXQgYWxsIHRo ZSBjb2x1bW5zIGJlbG9uZyB0byBhIHNpbmdsZSB0YWJsZQorICAgIHRhYmxlX29pZCA9IGNvbHVt bnNfaW5mb1swXVsndGFibGVfb2lkJ10KKyAgICBmb3IgY29sdW1uIGluIGNvbHVtbnNfaW5mbzoK KyAgICAgICAgaWYgY29sdW1uWyd0YWJsZV9vaWQnXSAhPSB0YWJsZV9vaWQ6CisgICAgICAgICAg ICByZXR1cm4gRmFsc2UsIE5vbmUsIE5vbmUsIE5vbmUKKworICAgICMgQ2hlY2sgZm9yIGR1cGxp Y2F0ZSBjb2x1bW5zCisgICAgY29sdW1uX251bWJlcnMgPSBcCisgICAgICAgIFtjb2xbJ3RhYmxl X2NvbHVtbiddIGZvciBjb2wgaW4gY29sdW1uc19pbmZvXQorICAgIGlzX2R1cGxpY2F0ZV9jb2x1 bW5zID0gbGVuKGNvbHVtbl9udW1iZXJzKSAhPSBsZW4oc2V0KGNvbHVtbl9udW1iZXJzKSkKKyAg ICBpZiBpc19kdXBsaWNhdGVfY29sdW1uczoKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBOb25lLCBO b25lLCBOb25lCisKKyAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgorICAgICAgICAjIFRoZW4gY2hl Y2sgdGhhdCBhbGwgdGhlIHByaW1hcnkga2V5cyBvZiB0aGUgdGFibGUgYXJlIHByZXNlbnQKKyAg ICAgICAgIyBhbmQgbm8gcHJpbWFyeSBrZXlzIGFyZSByZW5hbWVkCisgICAgICAgICMgKG9yIG90 aGVyIGNvbHVtbnMgcmVuYW1lZCB0byBiZSBsaWtlIHByaW1hcnkga2V5cykKKyAgICAgICAgcXVl cnkgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAiLyIuam9pbihbc3FsX3BhdGgsICdw cmltYXJ5X2tleXMuc3FsJ10pLAorICAgICAgICAgICAgb2JqX2lkPXRhYmxlX29pZAorICAgICAg ICApCisgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVjdXRlX2RpY3QocXVlcnkpCisg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIE5vbmUsIE5v bmUsIE5vbmUKKworICAgICAgICBwcmltYXJ5X2tleXNfY29sdW1ucyA9IFtdCisgICAgICAgIHBy aW1hcnlfa2V5cyA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgcGtfbmFtZXMgPSBbXQorCisgICAg ICAgIGZvciByb3cgaW4gcmVzdWx0Wydyb3dzJ106CisgICAgICAgICAgICBwcmltYXJ5X2tleXNb cm93WydhdHRuYW1lJ11dID0gcm93Wyd0eXBuYW1lJ10KKyAgICAgICAgICAgIHByaW1hcnlfa2V5 c19jb2x1bW5zLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgJ25hbWUnOiByb3dbJ2F0dG5hbWUn XSwKKyAgICAgICAgICAgICAgICAnY29sdW1uX251bWJlcic6IHJvd1snYXR0bnVtJ10KKyAgICAg ICAgICAgIH0pCisgICAgICAgICAgICBwa19uYW1lcy5hcHBlbmQocm93WydhdHRuYW1lJ10pCisK KyAgICAgICAgIyBDaGVjayB0aGF0IGFsbCBwcmltYXJ5IGtleXMgZXhpc3QgYW5kIHRoYXQgYWxs IG9mIHRoZW0gYXJlIG5vdAorICAgICAgICAjIHJlbmFtZWQgYW5kIG90aGVyIGNvbHVtbnMgYXJl IG5vdCByZW5hbWVkIHRvIHByaW1hcnkga2V5IG5hbWVzCisgICAgICAgIGZvciBwayBpbiBwcmlt YXJ5X2tleXNfY29sdW1uczoKKyAgICAgICAgICAgIHBrX2V4aXN0cyA9IEZhbHNlCisgICAgICAg ICAgICBmb3IgY29sIGluIGNvbHVtbnNfaW5mbzoKKyAgICAgICAgICAgICAgICBpZiBjb2xbJ3Rh YmxlX2NvbHVtbiddID09IHBrWydjb2x1bW5fbnVtYmVyJ106CisgICAgICAgICAgICAgICAgICAg IHBrX2V4aXN0cyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgcHJpbWFyeSBr ZXkgY29sdW1uIGlzIHJlbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgY29sWydkaXNwbGF5 X25hbWUnXSAhPSBwa1snbmFtZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZh bHNlLCBOb25lLCBOb25lLCBOb25lCisgICAgICAgICAgICAgICAgIyBJZiBhIG5vcm1hbCBjb2x1 bW4gaXMgcmVuYW1lZCB0byBhIHByaW1hcnkga2V5IGNvbHVtbiBuYW1lCisgICAgICAgICAgICAg ICAgZWxpZiBjb2xbJ2Rpc3BsYXlfbmFtZSddID09IHBrWyduYW1lJ106CisgICAgICAgICAgICAg ICAgICAgIHJldHVybiBGYWxzZSwgTm9uZSwgTm9uZSwgTm9uZQorCisgICAgICAgICAgICBpZiBu b3QgcGtfZXhpc3RzOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZSwgTm9uZSwgTm9uZSwg Tm9uZQorCisgICAgICAgICMgSWYgdGhlIGZvciBsb29wIGV4aXRlZCB3aXRob3V0IHJldHVybmlu ZyBmcm9tIHRoZSBmdW5jdGlvbiB0aGVuCisgICAgICAgICMgYWxsIHByaW1hcnkga2V5cyBleGlz dCB3aXRob3V0IGJlaW5nIHJlbmFtZWQKKyAgICAgICAgcmV0dXJuIFRydWUsIHByaW1hcnlfa2V5 cywgcGtfbmFtZXMsIHRhYmxlX29pZAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZSwg Tm9uZSwgTm9uZSwgTm9uZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9y L3V0aWxzL3NhdmVfY2hhbmdlZF9kYXRhLnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9y L3V0aWxzL3NhdmVfY2hhbmdlZF9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi40NDU0MGVlZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3Nx bGVkaXRvci91dGlscy9zYXZlX2NoYW5nZWRfZGF0YS5weQpAQCAtMCwwICsxLDI3MSBAQAorIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBD b3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE5LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisj IFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQor IworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRl Citmcm9tIHBnYWRtaW4udG9vbHMuc3FsZWRpdG9yLnV0aWxzLmNvbnN0YW50X2RlZmluaXRpb24g aW1wb3J0IFRYX1NUQVRVU19JRExFCit0cnk6CisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQg T3JkZXJlZERpY3QKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIG9yZGVyZWRkaWN0IGlt cG9ydCBPcmRlcmVkRGljdAorCisKK2RlZiBzYXZlX2NoYW5nZWRfZGF0YShjaGFuZ2VkX2RhdGEs IGNvbHVtbnNfaW5mbywgY29ubiwgY29tbWFuZF9vYmosCisgICAgICAgICAgICAgICAgICAgICAg Y2xpZW50X3ByaW1hcnlfa2V5LCBhdXRvX2NvbW1pdD1UcnVlKToKKyAgICAiIiIKKyAgICBUaGlz IGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2F2ZSB0aGUgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZS4KKyAg ICBEZXBlbmRpbmcgb24gY29uZGl0aW9uIGl0IHdpbGwgZWl0aGVyIHVwZGF0ZSBvciBpbnNlcnQg dGhlCisgICAgbmV3IHJvdyBpbnRvIHRoZSBkYXRhYmFzZS4KKworICAgIEFyZ3M6CisgICAgICAg IGNoYW5nZWRfZGF0YTogQ29udGFpbnMgZGF0YSB0byBiZSBzYXZlZAorICAgICAgICBjb21tYW5k X29iajogVGhlIHRyYW5zYWN0aW9uIG9iamVjdCAoY29tbWFuZF9vYmogb3IgdHJhbnNfb2JqKQor ICAgICAgICBjb25uOiBUaGUgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgY29sdW1uc19pbmZv OiBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10KKyAgICAgICAgY2xpZW50X3ByaW1hcnlfa2V5 OiBzZXNzaW9uX29ialsnY2xpZW50X3ByaW1hcnlfa2V5J10KKyAgICAgICAgYXV0b19jb21taXQ6 IElmIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBjb21taXRlZCBhdXRvbWF0aWNhbGx5LgorICAgICIi IgorICAgIHN0YXR1cyA9IEZhbHNlCisgICAgcmVzID0gTm9uZQorICAgIHF1ZXJ5X3JlcyA9IGRp Y3QoKQorICAgIGNvdW50ID0gMAorICAgIGxpc3Rfb2Zfcm93aWQgPSBbXQorICAgIG9wZXJhdGlv bnMgPSAoJ2FkZGVkJywgJ3VwZGF0ZWQnLCAnZGVsZXRlZCcpCisgICAgbGlzdF9vZl9zcWwgPSB7 fQorICAgIF9yb3dpZCA9IE5vbmUKKworICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisKKyAgICAg ICAgIyBTdGFydCB0aGUgdHJhbnNhY3Rpb24gaWYgdGhlIHNlc3Npb24gaXMgaWRsZQorICAgICAg ICBpZiBjb25uLnRyYW5zYWN0aW9uX3N0YXR1cygpID09IFRYX1NUQVRVU19JRExFOgorICAgICAg ICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ0JFR0lOOycpCisKKyAgICAgICAgIyBJdGVyYXRlIHRv dGFsIG51bWJlciBvZiByZWNvcmRzIHRvIGJlIHVwZGF0ZWQvaW5zZXJ0ZWQKKyAgICAgICAgZm9y IG9mX3R5cGUgaW4gY2hhbmdlZF9kYXRhOgorICAgICAgICAgICAgIyBObyBuZWVkIHRvIGdvIGZ1 cnRoZXIgaWYgaXRzIG5vdCBhZGQvdXBkYXRlL2RlbGV0ZSBvcGVyYXRpb24KKyAgICAgICAgICAg IGlmIG9mX3R5cGUgbm90IGluIG9wZXJhdGlvbnM6CisgICAgICAgICAgICAgICAgY29udGludWUK KyAgICAgICAgICAgICMgaWYgbm8gZGF0YSB0byBiZSBzYXZlIHRoZW4gY29udGludWUKKyAgICAg ICAgICAgIGlmIGxlbihjaGFuZ2VkX2RhdGFbb2ZfdHlwZV0pIDwgMToKKyAgICAgICAgICAgICAg ICBjb250aW51ZQorCisgICAgICAgICAgICBjb2x1bW5fdHlwZSA9IHt9CisgICAgICAgICAgICBj b2x1bW5fZGF0YSA9IHt9CisgICAgICAgICAgICBmb3IgZWFjaF9jb2wgaW4gY29sdW1uc19pbmZv OgorICAgICAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uc19pbmZv W2VhY2hfY29sXVsnbm90X251bGwnXSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IGNvbHVt bnNfaW5mb1tlYWNoX2NvbF1bJ2hhc19kZWZhdWx0X3ZhbCddCisgICAgICAgICAgICAgICAgKToK KyAgICAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGFbZWFjaF9jb2xdID0gTm9uZQorICAgICAg ICAgICAgICAgICAgICBjb2x1bW5fdHlwZVtlYWNoX2NvbF0gPSBcCisgICAgICAgICAgICAgICAg ICAgICAgICBjb2x1bW5zX2luZm9bZWFjaF9jb2xdWyd0eXBlX25hbWUnXQorICAgICAgICAgICAg ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90eXBlW2VhY2hfY29sXSA9IFwK KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mb1tlYWNoX2NvbF1bJ3R5cGVfbmFt ZSddCisKKyAgICAgICAgICAgICMgRm9yIG5ld2x5IGFkZGVkIHJvd3MKKyAgICAgICAgICAgIGlm IG9mX3R5cGUgPT0gJ2FkZGVkJzoKKyAgICAgICAgICAgICAgICAjIFB5dGhvbiBkaWN0IGRvZXMg bm90IGhvbm91ciB0aGUgaW5zZXJ0ZWQgaXRlbSBvcmRlcgorICAgICAgICAgICAgICAgICMgU28g dG8gaW5zZXJ0IGRhdGEgaW4gdGhlIG9yZGVyLCB3ZSBuZWVkIHRvIG1ha2Ugb3JkZXJlZAorICAg ICAgICAgICAgICAgICMgbGlzdCBvZiBhZGRlZCBpbmRleCBXZSBkb24ndCBuZWVkIHRoaXMgbWVj aGFuaXNtIGluCisgICAgICAgICAgICAgICAgIyB1cGRhdGVkL2RlbGV0ZWQgcm93cyBhcyBpdCBk b2VzIG5vdCBtYXR0ZXIgaW4KKyAgICAgICAgICAgICAgICAjIHRob3NlIG9wZXJhdGlvbnMKKyAg ICAgICAgICAgICAgICBhZGRlZF9pbmRleCA9IE9yZGVyZWREaWN0KAorICAgICAgICAgICAgICAg ICAgICBzb3J0ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkX2RhdGFbJ2FkZGVk X2luZGV4J10uaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgeDog aW50KHhbMF0pCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApCisgICAg ICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0gPSBbXQorCisgICAgICAgICAgICAgICAg IyBXaGVuIG5ldyByb3dzIGFyZSBhZGRlZCwgb25seSBjaGFuZ2VkIGNvbHVtbnMgZGF0YSBpcwor ICAgICAgICAgICAgICAgICMgc2VudCBmcm9tIGNsaWVudCBzaWRlLiBCdXQgaWYgY29sdW1uIGlz IG5vdF9udWxsIGFuZCBoYXMKKyAgICAgICAgICAgICAgICAjIG5vX2RlZmF1bHRfdmFsdWUsIHNl dCBjb2x1bW4gdG8gYmxhbmssIGluc3RlYWQKKyAgICAgICAgICAgICAgICAjIG9mIG5vdCBudWxs IHdoaWNoIGlzIHNldCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhID0g e30KKyAgICAgICAgICAgICAgICBwa19uYW1lcywgcHJpbWFyeV9rZXlzID0gY29tbWFuZF9vYmou Z2V0X3ByaW1hcnlfa2V5cygpCisgICAgICAgICAgICAgICAgaGFzX29pZHMgPSAnb2lkJyBpbiBj b2x1bW5fdHlwZQorCisgICAgICAgICAgICAgICAgZm9yIGVhY2hfcm93IGluIGFkZGVkX2luZGV4 OgorICAgICAgICAgICAgICAgICAgICAjIEdldCB0aGUgcm93IGluZGV4IHRvIG1hdGNoIHdpdGgg dGhlIGFkZGVkIHJvd3MKKyAgICAgICAgICAgICAgICAgICAgIyBkaWN0IGtleQorICAgICAgICAg ICAgICAgICAgICB0bXBfcm93X2luZGV4ID0gYWRkZWRfaW5kZXhbZWFjaF9yb3ddCisgICAgICAg ICAgICAgICAgICAgIGRhdGEgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bdG1wX3Jvd19pbmRleF1b J2RhdGEnXQorICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBvdXIgdW5pcXVlIHRyYWNraW5n IGtleQorICAgICAgICAgICAgICAgICAgICBkYXRhLnBvcChjbGllbnRfcHJpbWFyeV9rZXksIE5v bmUpCisgICAgICAgICAgICAgICAgICAgIGRhdGEucG9wKCdpc19yb3dfY29waWVkJywgTm9uZSkK KyAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9yb3dpZC5hcHBlbmQoZGF0YS5nZXQoY2xpZW50 X3ByaW1hcnlfa2V5KSkKKworICAgICAgICAgICAgICAgICAgICAjIFVwZGF0ZSBjb2x1bW5zIHZh bHVlIHdpdGggY29sdW1ucyBoYXZpbmcKKyAgICAgICAgICAgICAgICAgICAgIyBub3RfbnVsbD1G YWxzZSBhbmQgaGFzIG5vIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgY29sdW1u X2RhdGEudXBkYXRlKGRhdGEpCisKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW2NvbW1hbmRfb2JqLnNx bF9wYXRoLCAnaW5zZXJ0LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9f YmVfc2F2ZWQ9Y29sdW1uX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tl eXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9uYW1lPWNvbW1hbmRfb2Jq Lm9iamVjdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9Y29tbWFuZF9v YmoubnNwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU9Y29sdW1uX3R5 cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBwa19uYW1lcz1wa19uYW1lcywKKyAgICAgICAg ICAgICAgICAgICAgICAgIGhhc19vaWRzPWhhc19vaWRzCisgICAgICAgICAgICAgICAgICAgICkK KworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rfc3FsID0gcmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW2NvbW1hbmRfb2JqLnNxbF9wYXRoLCAnc2Vs ZWN0LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9uYW1lPWNvbW1hbmRf b2JqLm9iamVjdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9Y29tbWFu ZF9vYmoubnNwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleXM9cHJp bWFyeV9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgaGFzX29pZHM9aGFzX29pZHMKKyAg ICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29m X3R5cGVdLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgICAgICAgICAnc3FsJzogc3FsLCAnZGF0 YSc6IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAnY2xpZW50X3Jvdyc6IHRtcF9yb3df aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2VsZWN0X3NxbCc6IHNlbGVjdF9zcWwK KyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgIyBSZXNldCBjb2x1 bW4gZGF0YQorICAgICAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YSA9IHt9CisKKyAgICAgICAg ICAgICMgRm9yIHVwZGF0ZWQgcm93cworICAgICAgICAgICAgZWxpZiBvZl90eXBlID09ICd1cGRh dGVkJzoKKyAgICAgICAgICAgICAgICBsaXN0X29mX3NxbFtvZl90eXBlXSA9IFtdCisgICAgICAg ICAgICAgICAgZm9yIGVhY2hfcm93IGluIGNoYW5nZWRfZGF0YVtvZl90eXBlXToKKyAgICAgICAg ICAgICAgICAgICAgZGF0YSA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd11bJ2RhdGEn XQorICAgICAgICAgICAgICAgICAgICBwayA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jv d11bJ3ByaW1hcnlfa2V5cyddCisgICAgICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1w bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtjb21tYW5kX29iai5zcWxf cGF0aCwgJ3VwZGF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2Jl X3NhdmVkPWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleXM9cGssCisg ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfbmFtZT1jb21tYW5kX29iai5vYmplY3RfbmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zcF9uYW1lPWNvbW1hbmRfb2JqLm5zcF9uYW1l LAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBlPWNvbHVtbl90eXBlCisgICAgICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0u YXBwZW5kKHsnc3FsJzogc3FsLCAnZGF0YSc6IGRhdGF9KQorICAgICAgICAgICAgICAgICAgICBs aXN0X29mX3Jvd2lkLmFwcGVuZChkYXRhLmdldChjbGllbnRfcHJpbWFyeV9rZXkpKQorCisgICAg ICAgICAgICAjIEZvciBkZWxldGVkIHJvd3MKKyAgICAgICAgICAgIGVsaWYgb2ZfdHlwZSA9PSAn ZGVsZXRlZCc6CisgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0gPSBbXQorICAg ICAgICAgICAgICAgIGlzX2ZpcnN0ID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJvd3NfdG9fZGVs ZXRlID0gW10KKyAgICAgICAgICAgICAgICBrZXlzID0gTm9uZQorICAgICAgICAgICAgICAgIG5v X29mX2tleXMgPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIGVhY2hfcm93IGluIGNoYW5nZWRf ZGF0YVtvZl90eXBlXToKKyAgICAgICAgICAgICAgICAgICAgcm93c190b19kZWxldGUuYXBwZW5k KGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd10pCisgICAgICAgICAgICAgICAgICAgICMg RmV0Y2ggdGhlIGtleXMgZm9yIFNRTCBnZW5lcmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGlm IGlzX2ZpcnN0OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNvdmVydCBk aWN0X2tleXMgdG8gbm9ybWFsIGxpc3QgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgUHl0 aG9uMworICAgICAgICAgICAgICAgICAgICAgICAgIyBJbiBQeXRob24yLCBpdCdzIGFscmVhZHkg YSBsaXN0ICYgV2Ugd2lsbCBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgICAjIGZldGNoIGNv bHVtbiBuYW1lcyB1c2luZyBpbmRleAorICAgICAgICAgICAgICAgICAgICAgICAga2V5cyA9IGxp c3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZF9kYXRhW29mX3R5cGVdW2Vh Y2hfcm93XS5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAg ICAgICAgICAgIG5vX29mX2tleXMgPSBsZW4oa2V5cykKKyAgICAgICAgICAgICAgICAgICAgICAg IGlzX2ZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAjIE1hcCBpbmRleCB3aXRoIGNvbHVt biBuYW1lIGZvciBlYWNoIHJvdworICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcm93c190b19k ZWxldGU6CisgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHJvdy5pdGVtcygpOgorICAg ICAgICAgICAgICAgICAgICAgICAgIyBTZXQgcHJpbWFyeSBrZXkgd2l0aCBsYWJlbCAmIGRlbGV0 ZSBpbmRleCBiYXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXBwZWQga2V5CisgICAg ICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93 W2NoYW5nZWRfZGF0YVsnY29sdW1ucyddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFtpbnQoayldWyduYW1lJ11dID0gdgorICAgICAgICAgICAgICAgICAgICAg ICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCByb3dba10KKworICAgICAgICAgICAgICAg IHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW2Nv bW1hbmRfb2JqLnNxbF9wYXRoLCAnZGVsZXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAg ZGF0YT1yb3dzX3RvX2RlbGV0ZSwKKyAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlfbGFi ZWxzPWtleXMsCisgICAgICAgICAgICAgICAgICAgIG5vX29mX2tleXM9bm9fb2Zfa2V5cywKKyAg ICAgICAgICAgICAgICAgICAgb2JqZWN0X25hbWU9Y29tbWFuZF9vYmoub2JqZWN0X25hbWUsCisg ICAgICAgICAgICAgICAgICAgIG5zcF9uYW1lPWNvbW1hbmRfb2JqLm5zcF9uYW1lCisgICAgICAg ICAgICAgICAgKQorICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVdLmFwcGVuZCh7 J3NxbCc6IHNxbCwgJ2RhdGEnOiB7fX0pCisKKyAgICAgICAgZm9yIG9wciwgc3FscyBpbiBsaXN0 X29mX3NxbC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc3FsczoKKyAgICAgICAg ICAgICAgICBpZiBpdGVtWydzcWwnXToKKyAgICAgICAgICAgICAgICAgICAgcm93X2FkZGVkID0g Tm9uZQorCisgICAgICAgICAgICAgICAgICAgICMgRmV0Y2ggb2lkcy9wcmltYXJ5IGtleXMKKyAg ICAgICAgICAgICAgICAgICAgaWYgJ3NlbGVjdF9zcWwnIGluIGl0ZW0gYW5kIGl0ZW1bJ3NlbGVj dF9zcWwnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVj dXRlX2RpY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVsnc3FsJ10sIGl0ZW1b J2RhdGEnXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVjdXRlX3ZvaWQoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaXRlbVsnc3FsJ10sIGl0ZW1bJ2RhdGEnXSkKKworICAgICAgICAgICAgICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5leGVjdXRlX3Zv aWQoJ1JPTExCQUNLOycpCisgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIHJvbGwgYmFj a2VkIGV2ZXJ5IHRoaW5nIHRoZW4gdXBkYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAg IyBtZXNzYWdlIGZvciBlYWNoIHNxbCBxdWVyeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZv ciB2YWwgaW4gcXVlcnlfcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1ZXJ5 X3Jlc1t2YWxdWydzdGF0dXMnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVl cnlfcmVzW3ZhbF1bJ3Jlc3VsdCddID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ1RyYW5zYWN0aW9uIFJPTExCQUNLJworCisgICAgICAgICAgICAgICAgICAgICAgICAj IElmIGxpc3QgaXMgZW1wdHkgc2V0IHJvd2lkIHRvIDEKKyAgICAgICAgICAgICAgICAgICAgICAg IHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaXN0X29mX3Jvd2lkOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcm93aWQgPSBsaXN0X29mX3Jvd2lkW2NvdW50 XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9yb3dpZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBF eGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gMAorCisgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCByZXMsIHF1ZXJ5X3JlcywgX3Jvd2lk CisKKyAgICAgICAgICAgICAgICAgICAgIyBTZWxlY3QgYWRkZWQgcm93IGZyb20gdGhlIHRhYmxl CisgICAgICAgICAgICAgICAgICAgIGlmICdzZWxlY3Rfc3FsJyBpbiBpdGVtOgorICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxfcmVzID0gY29ubi5leGVjdXRlX2RpY3QoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVsnc2VsZWN0X3NxbCddLCByZXNbJ3Jvd3MnXVsw XSkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25uLmV4ZWN1dGVfdm9pZCgnUk9MTEJBQ0s7JykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIElmIHdlIHJvbGwgYmFja2VkIGV2ZXJ5IHRoaW5nIHRoZW4g dXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgbWVzc2FnZSBmb3IgZWFj aCBzcWwgcXVlcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiBxdWVy eV9yZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1ZXJ5X3Jlc1t2YWxd WydzdGF0dXMnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jl c1t2YWxdWydyZXN1bHQnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnVHJhbnNhY3Rpb24gUk9MTEJBQ0snCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIElmIGxpc3QgaXMgZW1wdHkgc2V0IHJvd2lkIHRvIDEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpc3Rfb2Zf cm93aWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcm93aWQgPSBsaXN0 X29mX3Jvd2lkW2NvdW50XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gMQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9yb3dpZCA9IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBzdGF0dXMsIHNlbF9yZXMsIHF1ZXJ5X3JlcywgX3Jvd2lkCisKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmICdyb3dzJyBpbiBzZWxfcmVzIGFuZCBsZW4oc2VsX3Jlc1sncm93cyddKSA+ IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X2FkZGVkID0geworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpdGVtWydjbGllbnRfcm93J106IHNlbF9yZXNbJ3Jvd3Mn XVswXX0KKworICAgICAgICAgICAgICAgICAgICByb3dzX2FmZmVjdGVkID0gY29ubi5yb3dzX2Fm ZmVjdGVkKCkKKyAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgcmVzdWx0IG9mIGVhY2gg cXVlcnkgaW4gZGljdGlvbmFyeQorICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXNbY291bnRd ID0geworICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cywKKyAgICAgICAg ICAgICAgICAgICAgICAgICdyZXN1bHQnOiBOb25lIGlmIHJvd19hZGRlZCBlbHNlIHJlcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICdzcWwnOiBpdGVtWydzcWwnXSwgJ3Jvd3NfYWZmZWN0ZWQn OiByb3dzX2FmZmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Jvd19hZGRlZCc6IHJv d19hZGRlZAorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY291 bnQgKz0gMQorCisgICAgICAgICMgQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiBpZiB0aGVyZSBpcyBu byBlcnJvciBmb3VuZAorICAgICAgICBpZiBhdXRvX2NvbW1pdDoKKyAgICAgICAgICAgIGNvbm4u ZXhlY3V0ZV92b2lkKCdDT01NSVQ7JykKKworICAgIHJldHVybiBzdGF0dXMsIHJlcywgcXVlcnlf cmVzLCBfcm93aWQKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci91dGls cy9zdGFydF9ydW5uaW5nX3F1ZXJ5LnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3V0 aWxzL3N0YXJ0X3J1bm5pbmdfcXVlcnkucHkKaW5kZXggYTUzOTk3NzQuLmVjZTExZjljIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdXRpbHMvc3RhcnRfcnVubmluZ19x dWVyeS5weQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdXRpbHMvc3RhcnRfcnVu bmluZ19xdWVyeS5weQpAQCAtNDUsNiArNDUsOSBAQCBjbGFzcyBTdGFydFJ1bm5pbmdRdWVyeToK ICAgICAgICAgaWYgdHlwZShzZXNzaW9uX29iaikgaXMgUmVzcG9uc2U6CiAgICAgICAgICAgICBy ZXR1cm4gc2Vzc2lvbl9vYmoKIAorICAgICAgICAjIFJlbW92ZSBhbnkgZXhpc3RpbmcgcHJpbWFy eSBrZXlzIGluIHNlc3Npb25fb2JqCisgICAgICAgIHNlc3Npb25fb2JqLnBvcCgncHJpbWFyeV9r ZXlzJywgTm9uZSkKKwogICAgICAgICB0cmFuc2FjdGlvbl9vYmplY3QgPSBwaWNrbGUubG9hZHMo c2Vzc2lvbl9vYmpbJ2NvbW1hbmRfb2JqJ10pCiAgICAgICAgIGNhbl9lZGl0ID0gRmFsc2UKICAg ICAgICAgY2FuX2ZpbHRlciA9IEZhbHNlCg== --0000000000009b2c89058ba65bee--