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 1hfHga-0005TZ-Jb for pgadmin-hackers@arkaria.postgresql.org; Mon, 24 Jun 2019 05:38:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hfHgZ-0000aI-6U for pgadmin-hackers@arkaria.postgresql.org; Mon, 24 Jun 2019 05:38:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hfHgY-0000VF-9d for pgadmin-hackers@lists.postgresql.org; Mon, 24 Jun 2019 05:38:34 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hfHgH-0002lJ-6S for pgadmin-hackers@postgresql.org; Mon, 24 Jun 2019 05:38:32 +0000 Received: by mail-qt1-x82e.google.com with SMTP id n11so1998458qtl.5 for ; Sun, 23 Jun 2019 22:38:16 -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; bh=/OkX0yGtkwK8ak3s2/2gp3GQ3avRgQh0g+4yZsiMYb0=; b=QycBhqth1BZpWp+UDjWg3KFcJU3uykoJEGLyhbV8j7iF2eRvJMaffo9kUrxhQy+xyd P1aTBBz7M+CDzXRXZz61vH6eGNpIcsrydNhpyfrds+zUJInApMdmwncdV8Qx23nZBlpM Zg5aYRJU+6Hz1/oOl1f34s+MavpzeLk7zXzOhmaUhLXnbaxaFkly8pMB+UBhvKmqlz3K 6UL9HqLiq7W40Z5AGtdPAbKiCroJknYWbh/j/zN4ZsN0fD5LesqDlT4C8n+zIr2I3C41 Q/Lt5eK+cArEsNKGPkFCv/AZbGpLSPGUYW2SL/CVLtn0fXlvKLAC+cUL/U0mgJLRB5bk JpLA== 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; bh=/OkX0yGtkwK8ak3s2/2gp3GQ3avRgQh0g+4yZsiMYb0=; b=n1E//1ryFgvMEphTH8H630Yi1mSml9+TFmltWxEe/JoBTykyBpNInQ1cwOFLwFQUS2 WE52/LYNqfMnruTUnaj65HTyMjt2b/w5WtkuhoBxvReimsvuZIKWZnp+NL8ZVKvqx+KF 1iZIqWdb6k69XX4NccjWZsTlAXRlpNnzzYyFMpUbbGMKqSy4HkXXajFsQpfGJn3XvE3I Lb5APa1ourhGVqcQjmcuB/Xp43afLsU990ElekOBYfm0nJw6Im81RZJA7Fz9MDaTMtki +Yz7IH9m9vDERGO1DFOhT8qiIFHQa8Ww+evD/hy0WdXecUnlLMu160DCHncHcc0ybgmW A8uQ== X-Gm-Message-State: APjAAAXZHo5es1Xp7xSG5sf3VEsz7GN6otmP5valG24WJnDzteXib9y7 OBzF7lAsyBus14c/XEymP5fjx19kF0tIiCIypjU= X-Google-Smtp-Source: APXvYqwW1RsAywdZSvFzje9qbO++iORpZyb8ALLVTAYlH5AjY+UAppiOF4Ksvz4Ej1uTIci6TIq0nGZcKPkiHcr8B5E= X-Received: by 2002:ad4:5283:: with SMTP id v3mr56078476qvr.207.1561354695613; Sun, 23 Jun 2019 22:38:15 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Yosry Muhammad Date: Mon, 24 Jun 2019 07:38:03 +0200 Message-ID: Subject: Re: [GSoC][Patch] Automatic Mode Detection V1 To: Aditya Toshniwal , Dave Page , pgadmin-hackers@postgresql.org Content-Type: multipart/mixed; boundary="00000000000000762d058c0b3824" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000000762d058c0b3824 Content-Type: multipart/alternative; boundary="00000000000000762b058c0b3822" --00000000000000762b058c0b3822 Content-Type: text/plain; charset="UTF-8" Hi all, Please find attached a patch with all the changes (from the beginning of the project). What I added in this patch: 1- Fixed #1 and #2 that Mr. Toshniwal pointed out in his code review. Still waiting for a reply on #3. 2- When data is edited in Query Tool with auto-commit turned off, the notification message now tells the user that they need to commit these changes. 3- The new icon is added and the functionality of both icons are now completely separated as follows: a) Save File button: exclusively for saving the query file (disabled in View Table mode). b) Save Data Changes button: for saving changes in data grid in both modes. I completely separated the 2 functionalities in all related files and modules. I also fixed an existing bug that went as follows: - The user has unsaved edits (existed in View Table mode). - The user tries to close the panel, they are asked if they want to save the changes. - If they choose to save and the save failed (null in a non-null column for example), the panel closes anyway. The panel now does not close if the save failed. Something that is missing with the new button is the shortcut, I don't know how to modify the Preferences in the configuration database. I could not find the code responsible for adding data in the Preferences table and so. Any help? 4- A savepoint is now created before any attempts are made to save data changes, if the operation fails, the transaction is rolled back only till the savepoint, keeping the previous SQL in the same transaction unharmed. The whole transaction is rolled back if none existed in the first place. 5- Fixed a bug with all Alertiy.js confirm dialogs where line break would break words. 6- I re-implemented the code responsible for handling the panel close event in following way: - The event used to handle one of two mutually exclusive events (or neither): exiting with unsaved changes in the query or exiting with unsaved changes in the data. - As both can happen simultaneously now, I re-implemented this code to check for multiple cases and produce sequential dialogs for different cases (asynchronously to avoid freezing the page) . I also added a dialog that asks for user confirmation when exiting with an un-commited transaction (or data changes save). I have several questions: - How can I edit the data in the configuration database (specifically the preferences), what parts of the code are responsible for this? - For running python tests, how should I produce an appropriate test_config.json.in file for my environment? - After running python and feature tests, changes were made to nearly all the files (git status shows modifications in a ton of files), is there something I have done wrong? - When closing a panel in pgAdmin 4, my browser keeps asking me if I want to leave the page or stay which I think might be annoying to some users (specially when closing several tabs at once). We already produce dialogs if any changes are unsaved, the browsers' ones are unnecessary. Is this produces by our code or automatically by the browser? any way around it? I use Firefox. - What else is missing from this patch to make it applicable ? I would like to produce a release-ready patch if possible. If so, I can continue working on the project on following patches, I just want to know what is the minimum amount of work needed to make this patch release-ready (especially that changes are being made in the master branch that require me to re-edit parts of the code that I have written before to keep things in-sync). - For the bug that I reported before (generated queries in Query History appear in a distorted way for the user), to get the actual query that is being executed I can use the mogirfy() function of psycopg2 but I need access to a cursor. I can get one directly in save_changed_data() function by using conn.conn.cursor() but then I would be bypassing the wrapper Connection class. Should I modify the wrapper Connection class and add a function that can provide a cursor (or a wrapper around cursor.mogrify() )? Thoughts? Here are things I think I might be working on next (share your thoughts): - Make the transaction status more prominent. - Handle cases where one or more columns can be made read-only for the remaining of the resultset to be updatable (for example: SELECT col1, col2, col1 || col2 as concat FROM some_table;). This will require modifying some of the data that is sent from the backend to the frontend and a lot o modifications (i think) in the front-end for handling columns individually. Thanks everyone and sorry for the long email ! On Thu, Jun 20, 2019 at 4:54 PM Yosry Muhammad wrote: > > > On Thu, Jun 20, 2019 at 7:49 AM Aditya Toshniwal < > aditya.toshniwal@enterprisedb.com> wrote: > >> [forked the mail chain for code review] >> Hi Yosry, >> >> On Wed, Jun 19, 2019 at 5:24 PM Dave Page wrote: >> >>> >>> Aditya; can you do a quick code review please? Bear in mind it's a work >>> in progress and there are no docs or tests etc. yet. >>> >> Nice work there. :) >> >> I just had look on the code changes, and have few suggestions: >> 1) I found the code around primary key in the function >> check_for_updatable_resultset_and_primary_keys repeating. Try if you >> cpuld modify/reuse the get_primary_keys function. >> 2) The function name check_for_updatable_resultset_and_primary_keys could >> be shorter, something like check_updatabale_rset_pkeys. Same for >> __set_updatable_resultset_attributes to __set_updatable_rset_attr >> 3) You've used background: #f4f4f4; for .highlighted_grid_cells class. >> This should go to sqleditor.scss with appropriate color from >> web/pgadmin/static/scss/resources/_default.variables.scss. Hard coded color >> codes are highly discouraged. >> Otherwise, looks good (didn't run and check) >> >>> >>> >> > I shortened both function names and fixed the hard-coded color. For #1, in > the QueryToolCommand different processing of the primary keys occur in > is_query_resultset_updatable function, where the attribute number of the > primary keys is compared against columns and so. The only repeated part in > check_for_updatable_resultset_and_primary_keys is the part where pk_names > string is created in the required format (which is only a few lines of > code). I could factor it out to a utility function - takes primary_keys > dict and returns the pk_names string in the required format. What do you > think? > > These changes (together with other changes that I am working on) will be > included in the next version of this patch. > > 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/ > -- *Yosry Muhammad Yosry* Computer Engineering student, The Faculty of Engineering, Cairo University (2021). Class representative of CMP 2021. https://www.linkedin.com/in/yosrym93/ --00000000000000762b058c0b3822 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi all,
Please find attached a patch with a= ll the changes (from the beginning of the project). What I added in this pa= tch:

1- Fixed #1 and #2 that Mr. Toshniwal pointed= out in his code review. Still waiting for a reply on #3.

2- When data is edited in Query Tool with auto-commit turned off, t= he notification message now tells the user that they need to commit these c= hanges.

3- The new icon is added and the functiona= lity of both icons are now completely separated as follows:
=C2= =A0=C2=A0=C2=A0 a) Save File button: exclusively for saving the query file = (disabled in View Table mode).
=C2=A0=C2=A0=C2=A0 b) Save Dat= a Changes button: for saving changes in data grid in both modes.
<= div>I completely separated the 2 functionalities in all related files and m= odules. I also fixed an existing bug that went as follows:
= =C2=A0=C2=A0=C2=A0 - The user has unsaved edits (existed in View Table mode= ).
=C2=A0=C2=A0=C2=A0 - The user tries to close the panel, th= ey are asked if they want to save the changes.
=C2=A0=C2=A0=C2=A0= - If they choose to save and the save failed (null in a non-null column fo= r example), the panel closes anyway.
The panel now does not c= lose if the save failed.

Something that is missing with t= he new button is the shortcut, I don't know how to modify the Preferenc= es in the configuration database. I could not find the code responsible for= adding data in the Preferences table and so. Any help?

4= - A savepoint is now created before any attempts are made to save data chan= ges, if the operation fails, the transaction is rolled back only till the s= avepoint, keeping the previous SQL in the same transaction unharmed. The wh= ole transaction is rolled back if none existed in the first place.

5- Fixed a bug with all Alertiy.js confirm dialogs where l= ine break would break words.

6- I re-implemented t= he code responsible for handling the panel close event in following way:
- The event used to handle one of tw= o mutually exclusive events (or neither): exiting with unsaved changes in t= he query or exiting with unsaved changes in the data.
- As both can happen simultaneously now, I re-implemented t= his code to check for multiple cases and produce sequential dialogs for dif= ferent cases (asynchronously to avoid freezing the page) . I also added a d= ialog that asks for user confirmation when exiting with an un-commited tran= saction (or data changes save).

I have several questions:
- How can I edit the data in t= he configuration database (specifically the preferences), what parts of the= code are responsible for this?
- For running python tests, how s= hould I produce an appropriate test_= config.json.in file for my environment?
- After running pytho= n and feature tests, changes were made to nearly all the files (git status = shows modifications in a ton of files), is there something I have done wron= g?
- When closing a panel in pgAdmin 4, my browser keeps asking m= e if I want to leave the page or stay which I think might be annoying to so= me users (specially when closing several tabs at once). We already produce = dialogs if any changes are unsaved, the browsers' ones are unnecessary.= Is this produces by our code or automatically by the browser? any way arou= nd it? I use Firefox.
- What else is missing from this patch to m= ake it applicable ? I would like to produce a release-ready patch if possib= le. If so, I can continue working on the project on following patches, I ju= st want to know what is the minimum amount of work needed to make this patc= h release-ready (especially that changes are being made in the master branc= h that require me to re-edit parts of the code that I have written before t= o keep things in-sync).
- For the bug that I reported before (gen= erated queries in Query History appear in a distorted way for the user), to= get the actual query that is being executed I can use the mogirfy() functi= on of psycopg2 but I need access to a cursor. I can get one directly in sav= e_changed_data() function by using conn.conn.cursor() but then I would be b= ypassing the wrapper Connection class. Should I modify the wrapper Connecti= on class and add a function that can provide a cursor (or a wrapper around = cursor.mogrify() )? Thoughts?

Here are things = I think I might be working on next (share your thoughts):
- Make = the transaction status more prominent.
- Handle cases where one o= r more columns can be made read-only for the remaining of the resultset to = be updatable (for example: SELECT col1, col2, col1 || col2 as concat FROM s= ome_table;). This will require modifying some of the data that is sent from= the backend to the frontend and a lot o modifications (i think) in the fro= nt-end for handling columns individually.

Than= ks everyone and sorry for the long email !

On Thu, Jun 20, 2019 at= 4:54 PM Yosry Muhammad <yosrym93@= gmail.com> wrote:


On Thu, Jun 20, 2019 at 7:= 49 AM Aditya Toshniwal <aditya.toshniwal@enterprisedb.com> wrote:
=
[forked the ma= il chain for code review]
Hi Yosry,

On Wed, Jun 19, 2019 at 5:24 PM Dave Page <dpage@pgadmin.org> wrote:=

Aditya; can you do a quick code revie= w please? Bear in mind it's a work in progress and there are no docs or= tests etc. yet.
Nice work there. :)<= /div>
=C2=A0
I just had look on the code changes, and have few= suggestions:
1) I found the code around primary key in the fu= nction check_for_updatable_result= set_and_primary_keys repeating. Try if you cpuld modify/reuse=C2=A0th= e get_primary_keys function.
2) The function name check_for_updatable_re= sultset_and_primary_keys could be shorter, something like check_updatabale_= rset_pkeys. Same for __set_updatable_resultset_attributes to __set_updatabl= e_rset_attr
3) You've used background: #f4f4f4; for .highlighted_gri= d_cells class. This should go to sqleditor.scss with appropriate color from= web/pgadmin/static/scss/resources/_default.variables.scss. Hard coded colo= r codes are highly discouraged.
Otherwise, looks good (didn't run and check)
=C2=A0

I shortened both function names and fixed the hard-c= oded color. For #1, in the QueryToolCommand different processing of the pri= mary keys occur in is_query_resultset_updatable function, where the attribu= te number of the primary keys is compared against columns and so. The only = repeated part in check_for_updatable_resultset_and_primary_keys is the part= where pk_names string is created in the required format (which is only a f= ew lines of code). I could factor it out to a utility function - takes prim= ary_keys dict and returns the pk_names string in the required format. What = do you think?
=C2=A0
These changes (together with o= ther changes that I am working on) will be included in the next version of = this patch.

Thanks !


--
Yosry Muham= mad Yosry

Computer Engineering student,
The Faculty of Engineering,
Cairo University (2021).
Class representative of CMP 2021.


--
Yosry= Muhammad Yosry

<= /i>
Computer Engineering student,
=
The Faculty of Engineering,
Cairo University (2021).
Class representative of CMP 2021.
--00000000000000762b058c0b3822-- --00000000000000762d058c0b3824 Content-Type: text/x-patch; charset="US-ASCII"; name="query_tool_automatic_mode_switch_v3.patch" Content-Disposition: attachment; filename="query_tool_automatic_mode_switch_v3.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jx9y3ldu0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3IvY2FsbF9yZW5kZXJf YWZ0ZXJfcG9sbC5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3IvY2FsbF9yZW5k ZXJfYWZ0ZXJfcG9sbC5qcwppbmRleCAzZjMyZDU3MS4uNTFjMjMwMmIgMTAwNjQ0Ci0tLSBhL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3IvY2FsbF9yZW5kZXJfYWZ0ZXJfcG9sbC5qcwor KysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc3FsZWRpdG9yL2NhbGxfcmVuZGVyX2FmdGVyX3Bv bGwuanMKQEAgLTM3LDcgKzM3LDcgQEAgZXhwb3J0IGZ1bmN0aW9uIGNhbGxSZW5kZXJBZnRlclBv bGwoc3FsRWRpdG9yLCBhbGVydGlmeSwgcmVzKSB7CiAgICAgY29uc3QgbXNnID0gc3ByaW50ZigK ICAgICAgIGdldHRleHQoJ1F1ZXJ5IHJldHVybmVkIHN1Y2Nlc3NmdWxseSBpbiAlcy4nKSwgc3Fs RWRpdG9yLnRvdGFsX3RpbWUpOwogICAgIHJlcy5yZXN1bHQgKz0gJ1xuXG4nICsgbXNnOwotICAg IHNxbEVkaXRvci51cGRhdGVfbXNnX2hpc3RvcnkodHJ1ZSwgcmVzLnJlc3VsdCwgZmFsc2UpOwor ICAgIHNxbEVkaXRvci51cGRhdGVfbXNnX2hpc3RvcnkodHJ1ZSwgcmVzLnJlc3VsdCwgdHJ1ZSk7 CiAgICAgaWYgKGlzTm90aWZpY2F0aW9uRW5hYmxlZChzcWxFZGl0b3IpKSB7CiAgICAgICBhbGVy dGlmeS5zdWNjZXNzKG1zZywgc3FsRWRpdG9yLmluZm9fbm90aWZpZXJfdGltZW91dCk7CiAgICAg fQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NxbGVkaXRvci9xdWVyeV90b29s X3ByZWZlcmVuY2VzLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NxbGVkaXRvci9xdWVyeV90 b29sX3ByZWZlcmVuY2VzLmpzCmluZGV4IGMzOTA2YWFhLi41OTVjYmIyYSAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vc3RhdGljL2pzL3NxbGVkaXRvci9xdWVyeV90b29sX3ByZWZlcmVuY2VzLmpz CisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3IvcXVlcnlfdG9vbF9wcmVmZXJl bmNlcy5qcwpAQCAtOTcsNiArOTcsOSBAQCBmdW5jdGlvbiB1cGRhdGVVSVByZWZlcmVuY2VzKHNx bEVkaXRvcikgewogICAgIC5hdHRyKCd0aXRsZScsCiAgICAgICBzaG9ydGN1dF90aXRsZSgnRG93 bmxvYWQgYXMgQ1NWJyxwcmVmZXJlbmNlcy5kb3dubG9hZF9jc3YpKTsKIAorICAkZWwuZmluZCgn I2J0bi1zYXZlLWRhdGEnKQorICAgIC5hdHRyKCd0aXRsZScsICdTYXZlIERhdGEgQ2hhbmdlcycp OyAvLyBUT0RPOiBBZGQgc2hvcnRjdXQgdG8gcHJlZmVyZW5jZXMKKwogICAkZWwuZmluZCgnI2J0 bi1jb21taXQnKQogICAgIC5hdHRyKCd0aXRsZScsCiAgICAgICBzaG9ydGN1dF90aXRsZSgnQ29t bWl0JyxwcmVmZXJlbmNlcy5jb21taXRfdHJhbnNhY3Rpb24pKTsKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL3N0YXRpYy9zY3NzL19hbGVydGlmeS5vdmVycmlkZXMuc2NzcyBiL3dlYi9wZ2FkbWlu L3N0YXRpYy9zY3NzL19hbGVydGlmeS5vdmVycmlkZXMuc2NzcwppbmRleCA0MTNlMDllNy4uZDQz YmVjZDUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9zY3NzL19hbGVydGlmeS5vdmVy cmlkZXMuc2NzcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvc2Nzcy9fYWxlcnRpZnkub3ZlcnJp ZGVzLnNjc3MKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBib3R0b206ICRmb290ZXItaGVpZ2h0LWNh bGMgIWltcG9ydGFudDsKICAgfQogICAuYWpzLXdyYXAtdGV4dCB7Ci0gICAgd29yZC1icmVhazog YnJlYWstYWxsOworICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKICAgICB3b3JkLXdyYXA6IGJyZWFr LXdvcmQ7CiAgIH0KICAgLyogUmVtb3ZlcyBwYWRkaW5nIGZyb20gYWxlcnRpZnkgZm9vdGVyICov CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvc2Nzcy9yZXNvdXJjZXMvX2RlZmF1bHQu dmFyaWFibGVzLnNjc3MgYi93ZWIvcGdhZG1pbi9zdGF0aWMvc2Nzcy9yZXNvdXJjZXMvX2RlZmF1 bHQudmFyaWFibGVzLnNjc3MKaW5kZXggMDlhYWY4YWUuLmZmOGZhZTZiIDEwMDY0NAotLS0gYS93 ZWIvcGdhZG1pbi9zdGF0aWMvc2Nzcy9yZXNvdXJjZXMvX2RlZmF1bHQudmFyaWFibGVzLnNjc3MK KysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL3Njc3MvcmVzb3VyY2VzL19kZWZhdWx0LnZhcmlhYmxl cy5zY3NzCkBAIC00NCw2ICs0NCw4IEBAICRjb2xvci1lZGl0b3ItbnVtYmVyOiAjOTY0ICFkZWZh dWx0OwogJGNvbG9yLWVkaXRvci1mb2xkbWFya2VyOiAjMDAwMEZGICFkZWZhdWx0OwogJGNvbG9y LWVkaXRvci1hY3RpdmVsaW5lOiAjNTBCMEYwICFkZWZhdWx0OwogCiskY29sb3ItaGlnaGxpZ2h0 ZWQtZ3JpZC1jZWxsOiAjRjRGNEY0OworCiAvKiBUeXBvZ3JhcGh5ICovCiAkZm9udC1mYW1pbHkt cHJpbWFyeTogIlJvYm90byIsICJIZWx2ZXRpY2EgTmV1ZSIsIC1hcHBsZS1zeXN0ZW0sIEJsaW5r TWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xv ciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xv ciBFbW9qaSIgIWRlZmF1bHQ7CiAkZm9udC1mYW1pbHktc2VtaWJvbGQ6ICJSb2JvdG8gTWVkaXVt IiAhZGVmYXVsdDsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3RlbXBs YXRlcy9kYXRhZ3JpZC9pbmRleC5odG1sIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvdGVt cGxhdGVzL2RhdGFncmlkL2luZGV4Lmh0bWwKaW5kZXggZjEzOGI5YTQuLjU2M2Y4MTEwIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdyaWQvaW5k ZXguaHRtbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdy aWQvaW5kZXguaHRtbApAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAg dGFiaW5kZXg9IjAiPgogICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtZm9sZGVy LW9wZW4tbyBzcWwtaWNvbi1sZyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4KICAgICAgICAgICAg ICAgICA8L2J1dHRvbj4KLSAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2F2ZSIgdHlw ZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5IgorICAgICAgICAgICAg ICAgIDxidXR0b24gaWQ9ImJ0bi1zYXZlLWZpbGUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBi dG4tc20gYnRuLXNlY29uZGFyeSIKICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSIiCiAg ICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NrZXk9IiIKICAgICAgICAgICAgICAgICAgICAg ICAgIGRpc2FibGVkPgpAQCAtMTI4LDYgKzEyOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICA8 aSBjbGFzcz0iZmEgZmEtdHJhc2ggc3FsLWljb24tbGciIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+ CiAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAg ICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCBtci0xIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0i Ij4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2F2ZS1kYXRhIiB0eXBlPSJidXR0 b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkiCisgICAgICAgICAgICAgICAgICAg ICAgICB0aXRsZT0iIgorICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNza2V5PSIiCisgICAg ICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD0iMCIgZGlzYWJsZWQ+CisgICAgICAgICAgICAg ICAgICAgIDxpIGNsYXNzPSJpY29uLXNhdmUtZGF0YS1jaGFuZ2VzIHNxbC1pY29uLWxnIiBhcmlh LWhpZGRlbj0idHJ1ZSI+PC9pPgorICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAg ICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAgbXItMSIgcm9sZT0i Z3JvdXAiIGFyaWEtbGFiZWw9IiI+CiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWVk aXQtZHJvcGRvd24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLXNlY29uZGFy eSBkcm9wZG93bi10b2dnbGUiCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT0i ZHJvcGRvd24iIGFyaWEtaGFzcG9wdXA9InRydWUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5IGIvd2ViL3Bn YWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5CmluZGV4IGFjOTIzYTU1Li4wNjdiZmY3 YiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5Cisr KyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weQpAQCAtMzg1LDYgKzM4 NSw4IEBAIGRlZiBwb2xsKHRyYW5zX2lkKToKICAgICByc2V0ID0gTm9uZQogICAgIGhhc19vaWRz ID0gRmFsc2UKICAgICBvaWRzID0gTm9uZQorICAgIGFkZGl0aW9uYWxfbWVzc2FnZXMgPSBOb25l CisgICAgbm90aWZpZXMgPSBOb25lCiAKICAgICAjIENoZWNrIHRoZSB0cmFuc2FjdGlvbiBhbmQg Y29ubmVjdGlvbiBzdGF0dXMKICAgICBzdGF0dXMsIGVycm9yX21zZywgY29ubiwgdHJhbnNfb2Jq LCBzZXNzaW9uX29iaiA9IFwKQEAgLTQyMyw2ICs0MjUsMjIgQEAgZGVmIHBvbGwodHJhbnNfaWQp OgogCiAgICAgICAgICAgICBzdCwgcmVzdWx0ID0gY29ubi5hc3luY19mZXRjaG1hbnlfMmRhcnJh eShPTl9ERU1BTkRfUkVDT1JEX0NPVU5UKQogCisgICAgICAgICAgICAjIFRoZXJlIG1heSBiZSBh ZGRpdGlvbmFsIG1lc3NhZ2VzIGV2ZW4gaWYgcmVzdWx0IGlzIHByZXNlbnQKKyAgICAgICAgICAg ICMgZWc6IEZ1bmN0aW9uIGNhbiBwcm92aWRlIHJlc3VsdCBhcyB3ZWxsIGFzIFJBSVNFIG1lc3Nh Z2VzCisgICAgICAgICAgICBtZXNzYWdlcyA9IGNvbm4ubWVzc2FnZXMoKQorICAgICAgICAgICAg aWYgbWVzc2FnZXM6CisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9tZXNzYWdlcyA9ICcnLmpv aW4obWVzc2FnZXMpCisgICAgICAgICAgICBub3RpZmllcyA9IGNvbm4uZ2V0X25vdGlmaWVzKCkK KworICAgICAgICAgICAgIyBQcm9jZWR1cmUvRnVuY3Rpb24gb3V0cHV0IG1heSBjb21lcyBpbiB0 aGUgZm9ybSBvZiBOb3RpY2VzCisgICAgICAgICAgICAjIGZyb20gdGhlIGRhdGFiYXNlIHNlcnZl ciwgc28gd2UgbmVlZCB0byBhcHBlbmQgdGhvc2Ugb3V0cHV0cworICAgICAgICAgICAgIyB3aXRo IHRoZSBvcmlnaW5hbCByZXN1bHQuCisgICAgICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAg ICAgICAgICAgICAgICByZXN1bHQgPSBjb25uLnN0YXR1c19tZXNzYWdlKCkKKyAgICAgICAgICAg ICAgICBpZiAocmVzdWx0ICE9ICdTRUxFQ1QgMScgb3IgcmVzdWx0ICE9ICdTRUxFQ1QgMCcpIGFu ZCBcCisgICAgICAgICAgICAgICAgICAgcmVzdWx0IGlzIG5vdCBOb25lIGFuZCBhZGRpdGlvbmFs X21lc3NhZ2VzOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRpdGlvbmFsX21lc3Nh Z2VzICsgcmVzdWx0CisKICAgICAgICAgICAgIGlmIHN0OgogICAgICAgICAgICAgICAgIGlmICdw cmltYXJ5X2tleXMnIGluIHNlc3Npb25fb2JqOgogICAgICAgICAgICAgICAgICAgICBwcmltYXJ5 X2tleXMgPSBzZXNzaW9uX29ialsncHJpbWFyeV9rZXlzJ10KQEAgLTQzOSwxMCArNDU3LDIyIEBA IGRlZiBwb2xsKHRyYW5zX2lkKToKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAg c2Vzc2lvbl9vYmpbJ2NsaWVudF9wcmltYXJ5X2tleSddID0gY2xpZW50X3ByaW1hcnlfa2V5CiAK LSAgICAgICAgICAgICAgICBpZiBjb2x1bW5zX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAg ICAgICAgIyBJZiB0cmFuc19vYmogaXMgYSBRdWVyeVRvb2xDb21tYW5kIHRoZW4gY2hlY2sgZm9y IHVwZGF0YWJsZQorICAgICAgICAgICAgICAgICMgcmVzdWx0c2V0cyBhbmQgcHJpbWFyeSBrZXlz CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc19vYmosIFF1ZXJ5VG9vbENvbW1h bmQpOgorICAgICAgICAgICAgICAgICAgICB0cmFuc19vYmouY2hlY2tfdXBkYXRhYmxlX3Jlc3Vs dHNfcGtleXMoKQorICAgICAgICAgICAgICAgICAgICBwa19uYW1lcywgcHJpbWFyeV9rZXlzID0g dHJhbnNfb2JqLmdldF9wcmltYXJ5X2tleXMoKQorICAgICAgICAgICAgICAgICAgICAjIElmIHBy aW1hcnlfa2V5cyBleGlzdCwgYWRkIHRoZW0gdG8gdGhlIHNlc3Npb25fb2JqIHRvCisgICAgICAg ICAgICAgICAgICAgICMgYWxsb3cgZm9yIHNhdmluZyBhbnkgY2hhbmdlcyB0byB0aGUgZGF0YQor ICAgICAgICAgICAgICAgICAgICBpZiBwcmltYXJ5X2tleXMgaXMgbm90IE5vbmU6CisgICAgICAg ICAgICAgICAgICAgICAgICBzZXNzaW9uX29ialsncHJpbWFyeV9rZXlzJ10gPSBwcmltYXJ5X2tl eXMKIAotICAgICAgICAgICAgICAgICAgICBjb21tYW5kX29iaiA9IHBpY2tsZS5sb2FkcyhzZXNz aW9uX29ialsnY29tbWFuZF9vYmonXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihj b21tYW5kX29iaiwgJ29ial9pZCcpOgorICAgICAgICAgICAgICAgIGlmIGNvbHVtbnNfaW5mbyBp cyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBpdCBpcyBhIFF1ZXJ5VG9vbENv bW1hbmQgdGhhdCBoYXMgb2JqX2lkIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAjIHRo ZW4gaXQgc2hvdWxkIGFsc28gYmUgZWRpdGFibGUKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFz YXR0cih0cmFuc19vYmosICdvYmpfaWQnKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAg KG5vdCBpc2luc3RhbmNlKHRyYW5zX29iaiwgUXVlcnlUb29sQ29tbWFuZCkgb3IKKyAgICAgICAg ICAgICAgICAgICAgICAgICB0cmFuc19vYmouY2FuX2VkaXQoKSk6CiAgICAgICAgICAgICAgICAg ICAgICAgICAjIEdldCB0aGUgdGVtcGxhdGUgcGF0aCBmb3IgdGhlIGNvbHVtbgogICAgICAgICAg ICAgICAgICAgICAgICAgdGVtcGxhdGVfcGF0aCA9ICdjb2x1bW5zL3NxbC8jezB9IycuZm9ybWF0 KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4ubWFuYWdlci52ZXJzaW9uCkBAIC00 NTAsNyArNDgwLDcgQEAgZGVmIHBvbGwodHJhbnNfaWQpOgogCiAgICAgICAgICAgICAgICAgICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICdub2Rlcy5zcWwnXSksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGlkPWNvbW1hbmRfb2JqLm9ial9pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aWQ9dHJhbnNfb2JqLm9ial9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBoYXNfb2lkcz1UcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAg ICAgICAgICAgICAjIHJvd3Mgd2l0aCBhdHRyaWJ1dGUgbm90X251bGwKQEAgLTUyNSwyNiArNTU1 LDggQEAgZGVmIHBvbGwodHJhbnNfaWQpOgogICAgICAgICBzdGF0dXMgPSAnTm90Q29ubmVjdGVk JwogICAgICAgICByZXN1bHQgPSBlcnJvcl9tc2cKIAotICAgICMgVGhlcmUgbWF5IGJlIGFkZGl0 aW9uYWwgbWVzc2FnZXMgZXZlbiBpZiByZXN1bHQgaXMgcHJlc2VudAotICAgICMgZWc6IEZ1bmN0 aW9uIGNhbiBwcm92aWRlIHJlc3VsdCBhcyB3ZWxsIGFzIFJBSVNFIG1lc3NhZ2VzCi0gICAgYWRk aXRpb25hbF9tZXNzYWdlcyA9IE5vbmUKLSAgICBub3RpZmllcyA9IE5vbmUKLSAgICBpZiBzdGF0 dXMgPT0gJ1N1Y2Nlc3MnOgotICAgICAgICBtZXNzYWdlcyA9IGNvbm4ubWVzc2FnZXMoKQotICAg ICAgICBpZiBtZXNzYWdlczoKLSAgICAgICAgICAgIGFkZGl0aW9uYWxfbWVzc2FnZXMgPSAnJy5q b2luKG1lc3NhZ2VzKQotICAgICAgICBub3RpZmllcyA9IGNvbm4uZ2V0X25vdGlmaWVzKCkKLQot ICAgICMgUHJvY2VkdXJlL0Z1bmN0aW9uIG91dHB1dCBtYXkgY29tZXMgaW4gdGhlIGZvcm0gb2Yg Tm90aWNlcyBmcm9tIHRoZQotICAgICMgZGF0YWJhc2Ugc2VydmVyLCBzbyB3ZSBuZWVkIHRvIGFw cGVuZCB0aG9zZSBvdXRwdXRzIHdpdGggdGhlCi0gICAgIyBvcmlnaW5hbCByZXN1bHQuCi0gICAg aWYgc3RhdHVzID09ICdTdWNjZXNzJyBhbmQgcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgIHJlc3Vs dCA9IGNvbm4uc3RhdHVzX21lc3NhZ2UoKQotICAgICAgICBpZiAocmVzdWx0ICE9ICdTRUxFQ1Qg MScgb3IgcmVzdWx0ICE9ICdTRUxFQ1QgMCcpIGFuZCBcCi0gICAgICAgICAgIHJlc3VsdCBpcyBu b3QgTm9uZSBhbmQgYWRkaXRpb25hbF9tZXNzYWdlczoKLSAgICAgICAgICAgIHJlc3VsdCA9IGFk ZGl0aW9uYWxfbWVzc2FnZXMgKyByZXN1bHQKLQogICAgIHRyYW5zYWN0aW9uX3N0YXR1cyA9IGNv bm4udHJhbnNhY3Rpb25fc3RhdHVzKCkKKwogICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2Uo CiAgICAgICAgIGRhdGE9ewogICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6 IHJlc3VsdCwKQEAgLTczMyw3ICs3NDUsOCBAQCBkZWYgc2F2ZSh0cmFuc19pZCk6CiAgICAgICAg dHJhbnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKIAogICAg ICAgICAjIElmIHRoZXJlIGlzIG5vIHByaW1hcnkga2V5IGZvdW5kIHRoZW4gcmV0dXJuIGZyb20g dGhlIGZ1bmN0aW9uLgotICAgICAgICBpZiAobGVuKHNlc3Npb25fb2JqWydwcmltYXJ5X2tleXMn XSkgPD0gMCBvcgorICAgICAgICBpZiAoJ3ByaW1hcnlfa2V5cycgbm90IGluIHNlc3Npb25fb2Jq IG9yCisgICAgICAgICAgIGxlbihzZXNzaW9uX29ialsncHJpbWFyeV9rZXlzJ10pIDw9IDAgb3IK ICAgICAgICAgICAgbGVuKGNoYW5nZWRfZGF0YSkgPD0gMCkgYW5kIFwKICAgICAgICAgICAgJ2hh c19vaWRzJyBub3QgaW4gc2Vzc2lvbl9vYmo6CiAgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29u X3Jlc3BvbnNlKApAQCAtNzQ2LDMyICs3NTksMzggQEAgZGVmIHNhdmUodHJhbnNfaWQpOgogCiAg ICAgICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKAogICAgICAgICAgICAgUEdfREVGQVVMVF9EUklW RVIpLmNvbm5lY3Rpb25fbWFuYWdlcih0cmFuc19vYmouc2lkKQotICAgICAgICBkZWZhdWx0X2Nv bm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXRyYW5zX29iai5kaWQpCisgICAgICAgIGlmIGhh c2F0dHIodHJhbnNfb2JqLCAnY29ubl9pZCcpOgorICAgICAgICAgICAgY29ubiA9IG1hbmFnZXIu Y29ubmVjdGlvbihkaWQ9dHJhbnNfb2JqLmRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29ubl9pZD10cmFuc19vYmouY29ubl9pZCkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXRyYW5zX29iai5kaWQpICAj IGRlZmF1bHQgY29ubmVjdGlvbgogCiAgICAgICAgICMgQ29ubmVjdCB0byB0aGUgU2VydmVyIGlm IG5vdCBjb25uZWN0ZWQuCi0gICAgICAgIGlmIG5vdCBkZWZhdWx0X2Nvbm4uY29ubmVjdGVkKCk6 Ci0gICAgICAgICAgICBzdGF0dXMsIG1zZyA9IGRlZmF1bHRfY29ubi5jb25uZWN0KCkKKyAgICAg ICAgaWYgbm90IGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgICAgICBzdGF0dXMsIG1zZyA9IGNv bm4uY29ubmVjdCgpCiAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAg IHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCiAgICAgICAgICAgICAgICAgICAgIGRhdGE9eydz dGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiB1Int9Ii5mb3JtYXQobXNnKX0KICAgICAgICAgICAg ICAgICApCi0KLSAgICAgICAgc3RhdHVzLCByZXMsIHF1ZXJ5X3JlcywgX3Jvd2lkID0gdHJhbnNf b2JqLnNhdmUoCisgICAgICAgIHN0YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9yb3dpZCwgaXNfY29t bWl0X3JlcXVpcmVkID0gdHJhbnNfb2JqLnNhdmUoCiAgICAgICAgICAgICBjaGFuZ2VkX2RhdGEs CiAgICAgICAgICAgICBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10sCiAgICAgICAgICAgICBz ZXNzaW9uX29ialsnY2xpZW50X3ByaW1hcnlfa2V5J10sCi0gICAgICAgICAgICBkZWZhdWx0X2Nv bm4pCisgICAgICAgICAgICBjb25uKQogICAgIGVsc2U6CiAgICAgICAgIHN0YXR1cyA9IEZhbHNl CiAgICAgICAgIHJlcyA9IGVycm9yX21zZwogICAgICAgICBxdWVyeV9yZXMgPSBOb25lCisgICAg ICAgIF9yb3dpZCA9IE5vbmUKKyAgICAgICAgaXNfY29tbWl0X3JlcXVpcmVkID0gTm9uZQogCiAg ICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKICAgICAgICAgZGF0YT17CiAgICAgICAgICAg ICAnc3RhdHVzJzogc3RhdHVzLAogICAgICAgICAgICAgJ3Jlc3VsdCc6IHJlcywKICAgICAgICAg ICAgICdxdWVyeV9yZXN1bHQnOiBxdWVyeV9yZXMsCi0gICAgICAgICAgICAnX3Jvd2lkJzogX3Jv d2lkCisgICAgICAgICAgICAnX3Jvd2lkJzogX3Jvd2lkLAorICAgICAgICAgICAgJ2lzX2NvbW1p dF9yZXF1aXJlZCc6IGlzX2NvbW1pdF9yZXF1aXJlZAogICAgICAgICB9CiAgICAgKQogCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5weSBiL3dlYi9wZ2Fk bWluL3Rvb2xzL3NxbGVkaXRvci9jb21tYW5kLnB5CmluZGV4IDI4YjdjYzQ0Li4wOGYwMjMxMCAx MDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL2NvbW1hbmQucHkKKysrIGIv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL2NvbW1hbmQucHkKQEAgLTE5LDYgKzE5LDEwIEBA IGZyb20gZmxhc2sgaW1wb3J0IHJlbmRlcl90ZW1wbGF0ZQogZnJvbSBmbGFza19iYWJlbGV4IGlt cG9ydCBnZXR0ZXh0CiBmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgZm9yYmlkZGVuCiBm cm9tIHBnYWRtaW4udXRpbHMuZHJpdmVyIGltcG9ydCBnZXRfZHJpdmVyCitmcm9tIHBnYWRtaW4u dG9vbHMuc3FsZWRpdG9yLnV0aWxzLmNvbnN0YW50X2RlZmluaXRpb24gaW1wb3J0IEFTWU5DX09L Citmcm9tIHBnYWRtaW4udG9vbHMuc3FsZWRpdG9yLnV0aWxzLmlzX3F1ZXJ5X3Jlc3VsdHNldF91 cGRhdGFibGUgXAorICAgIGltcG9ydCBpc19xdWVyeV9yZXN1bHRzZXRfdXBkYXRhYmxlCitmcm9t IHBnYWRtaW4udG9vbHMuc3FsZWRpdG9yLnV0aWxzLnNhdmVfY2hhbmdlZF9kYXRhIGltcG9ydCBz YXZlX2NoYW5nZWRfZGF0YQogCiBmcm9tIGNvbmZpZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIK IApAQCAtNjY4LDI2OCArNjcyLDExIEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6 CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb25uID0gZGVmYXVsdF9jb25uCiAKLSAgICAg ICAgc3RhdHVzID0gRmFsc2UKLSAgICAgICAgcmVzID0gTm9uZQotICAgICAgICBxdWVyeV9yZXMg PSBkaWN0KCkKLSAgICAgICAgY291bnQgPSAwCi0gICAgICAgIGxpc3Rfb2Zfcm93aWQgPSBbXQot ICAgICAgICBvcGVyYXRpb25zID0gKCdhZGRlZCcsICd1cGRhdGVkJywgJ2RlbGV0ZWQnKQotICAg ICAgICBsaXN0X29mX3NxbCA9IHt9Ci0gICAgICAgIF9yb3dpZCA9IE5vbmUKLQotICAgICAgICBw Z2FkbWluX2FsaWFzID0gewotICAgICAgICAgICAgY29sX25hbWU6IGNvbF9pbmZvWydwZ2FkbWlu X2FsaWFzJ10KLSAgICAgICAgICAgIGZvciBjb2xfbmFtZSwgY29sX2luZm8gaW4gY29sdW1uc19p bmZvCi0gICAgICAgICAgICAuaXRlbXMoKQotICAgICAgICB9Ci0gICAgICAgIGlmIGNvbm4uY29u bmVjdGVkKCk6Ci0KLSAgICAgICAgICAgICMgU3RhcnQgdGhlIHRyYW5zYWN0aW9uCi0gICAgICAg ICAgICBjb25uLmV4ZWN1dGVfdm9pZCgnQkVHSU47JykKLQotICAgICAgICAgICAgIyBJdGVyYXRl IHRvdGFsIG51bWJlciBvZiByZWNvcmRzIHRvIGJlIHVwZGF0ZWQvaW5zZXJ0ZWQKLSAgICAgICAg ICAgIGZvciBvZl90eXBlIGluIGNoYW5nZWRfZGF0YToKLSAgICAgICAgICAgICAgICAjIE5vIG5l ZWQgdG8gZ28gZnVydGhlciBpZiBpdHMgbm90IGFkZC91cGRhdGUvZGVsZXRlIG9wZXJhdGlvbgot ICAgICAgICAgICAgICAgIGlmIG9mX3R5cGUgbm90IGluIG9wZXJhdGlvbnM6Ci0gICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgIyBpZiBubyBkYXRhIHRvIGJlIHNh dmUgdGhlbiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIGxlbihjaGFuZ2VkX2RhdGFbb2Zf dHlwZV0pIDwgMToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAg ICAgIGNvbHVtbl90eXBlID0ge30KLSAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YSA9IHt9Ci0g ICAgICAgICAgICAgICAgZm9yIGVhY2hfY29sIGluIGNvbHVtbnNfaW5mbzoKLSAgICAgICAgICAg ICAgICAgICAgaWYgKAotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc19pbmZvW2VhY2hf Y29sXVsnbm90X251bGwnXSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb2x1bW5z X2luZm9bZWFjaF9jb2xdWydoYXNfZGVmYXVsdF92YWwnXQotICAgICAgICAgICAgICAgICAgICAp OgotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGFbZWFjaF9jb2xdID0gTm9uZQot ICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX3R5cGVbZWFjaF9jb2xdID1cCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29sdW1uc19pbmZvW2VhY2hfY29sXVsndHlwZV9uYW1lJ10K LSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVt bl90eXBlW2VhY2hfY29sXSA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5z X2luZm9bZWFjaF9jb2xdWyd0eXBlX25hbWUnXQotCi0gICAgICAgICAgICAgICAgIyBGb3IgbmV3 bHkgYWRkZWQgcm93cwotICAgICAgICAgICAgICAgIGlmIG9mX3R5cGUgPT0gJ2FkZGVkJzoKLSAg ICAgICAgICAgICAgICAgICAgIyBQeXRob24gZGljdCBkb2VzIG5vdCBob25vdXIgdGhlIGluc2Vy dGVkIGl0ZW0gb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgIyBTbyB0byBpbnNlcnQgZGF0YSBp biB0aGUgb3JkZXIsIHdlIG5lZWQgdG8gbWFrZSBvcmRlcmVkCi0gICAgICAgICAgICAgICAgICAg ICMgbGlzdCBvZiBhZGRlZCBpbmRleCBXZSBkb24ndCBuZWVkIHRoaXMgbWVjaGFuaXNtIGluCi0g ICAgICAgICAgICAgICAgICAgICMgdXBkYXRlZC9kZWxldGVkIHJvd3MgYXMgaXQgZG9lcyBub3Qg bWF0dGVyIGluCi0gICAgICAgICAgICAgICAgICAgICMgdGhvc2Ugb3BlcmF0aW9ucwotICAgICAg ICAgICAgICAgICAgICBhZGRlZF9pbmRleCA9IE9yZGVyZWREaWN0KAotICAgICAgICAgICAgICAg ICAgICAgICAgc29ydGVkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRfZGF0 YVsnYWRkZWRfaW5kZXgnXS5pdGVtcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eT1sYW1iZGEgeDogaW50KHhbMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAg ICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0g PSBbXQotCi0gICAgICAgICAgICAgICAgICAgICMgV2hlbiBuZXcgcm93cyBhcmUgYWRkZWQsIG9u bHkgY2hhbmdlZCBjb2x1bW5zIGRhdGEgaXMKLSAgICAgICAgICAgICAgICAgICAgIyBzZW50IGZy b20gY2xpZW50IHNpZGUuIEJ1dCBpZiBjb2x1bW4gaXMgbm90X251bGwgYW5kIGhhcwotICAgICAg ICAgICAgICAgICAgICAjIG5vX2RlZmF1bHRfdmFsdWUsIHNldCBjb2x1bW4gdG8gYmxhbmssIGlu c3RlYWQKLSAgICAgICAgICAgICAgICAgICAgIyBvZiBub3QgbnVsbCB3aGljaCBpcyBzZXQgYnkg ZGVmYXVsdC4KLSAgICAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGEgPSB7fQotICAgICAgICAg ICAgICAgICAgICBwa19uYW1lcywgcHJpbWFyeV9rZXlzID0gc2VsZi5nZXRfcHJpbWFyeV9rZXlz KCkKLSAgICAgICAgICAgICAgICAgICAgaGFzX29pZHMgPSAnb2lkJyBpbiBjb2x1bW5fdHlwZQot Ci0gICAgICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBhZGRlZF9pbmRleDoKLSAgICAg ICAgICAgICAgICAgICAgICAgICMgR2V0IHRoZSByb3cgaW5kZXggdG8gbWF0Y2ggd2l0aCB0aGUg YWRkZWQgcm93cwotICAgICAgICAgICAgICAgICAgICAgICAgIyBkaWN0IGtleQotICAgICAgICAg ICAgICAgICAgICAgICAgdG1wX3Jvd19pbmRleCA9IGFkZGVkX2luZGV4W2VhY2hfcm93XQotICAg ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVt0bXBfcm93 X2luZGV4XVsnZGF0YSddCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBvdXIgdW5p cXVlIHRyYWNraW5nIGtleQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wb3AoY2xpZW50 X3ByaW1hcnlfa2V5LCBOb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wb3AoJ2lz X3Jvd19jb3BpZWQnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9yb3dp ZC5hcHBlbmQoZGF0YS5nZXQoY2xpZW50X3ByaW1hcnlfa2V5KSkKLQotICAgICAgICAgICAgICAg ICAgICAgICAgIyBVcGRhdGUgY29sdW1ucyB2YWx1ZSB3aXRoIGNvbHVtbnMgaGF2aW5nCi0gICAg ICAgICAgICAgICAgICAgICAgICAjIG5vdF9udWxsPUZhbHNlIGFuZCBoYXMgbm8gZGVmYXVsdCB2 YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGEudXBkYXRlKGRhdGEpCi0K LSAgICAgICAgICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ2luc2VydC5zcWwn XSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19iZV9zYXZlZD1jb2x1bW5f ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ2FkbWluX2FsaWFzPXBnYWRtaW5f YWxpYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzPU5vbmUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X25hbWU9c2VsZi5vYmplY3RfbmFtZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1zZWxmLm5zcF9uYW1lLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZT1jb2x1bW5fdHlwZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwa19uYW1lcz1wa19uYW1lcywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYXNfb2lkcz1oYXNfb2lkcwotICAgICAgICAgICAgICAgICAgICAgICAgKQot Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rfc3FsID0gcmVuZGVyX3RlbXBsYXRlKAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnNxbF9wYXRoLCAnc2Vs ZWN0LnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfbmFtZT1zZWxm Lm9iamVjdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcF9uYW1lPXNlbGYu bnNwX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzPXByaW1h cnlfa2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfb2lkcz1oYXNfb2lkcwot ICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0 X29mX3NxbFtvZl90eXBlXS5hcHBlbmQoewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdz cWwnOiBzcWwsICdkYXRhJzogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xp ZW50X3Jvdyc6IHRtcF9yb3dfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nl bGVjdF9zcWwnOiBzZWxlY3Rfc3FsCi0gICAgICAgICAgICAgICAgICAgICAgICB9KQotICAgICAg ICAgICAgICAgICAgICAgICAgIyBSZXNldCBjb2x1bW4gZGF0YQotICAgICAgICAgICAgICAgICAg ICAgICAgY29sdW1uX2RhdGEgPSB7fQotCi0gICAgICAgICAgICAgICAgIyBGb3IgdXBkYXRlZCBy b3dzCi0gICAgICAgICAgICAgICAgZWxpZiBvZl90eXBlID09ICd1cGRhdGVkJzoKLSAgICAgICAg ICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0gPSBbXQotICAgICAgICAgICAgICAgICAg ICBmb3IgZWFjaF9yb3cgaW4gY2hhbmdlZF9kYXRhW29mX3R5cGVdOgotICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YSA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd11bJ2RhdGEnXQot ICAgICAgICAgICAgICAgICAgICAgICAgcGtfZXNjYXBlZCA9IHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwazogcGtfdmFsLnJlcGxhY2UoJyUnLCAnJSUnKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciBwaywgcGtfdmFsIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhbmdlZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XVsncHJpbWFyeV9rZXlzJ10KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuaXRlbXMoKQotICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnNxbF9wYXRoLCAndXBkYXRlLnNx bCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2JlX3NhdmVkPWRhdGEs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdhZG1pbl9hbGlhcz1wZ2FkbWluX2FsaWFz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5cz1wa19lc2NhcGVkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9uYW1lPXNlbGYub2JqZWN0X25hbWUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9c2VsZi5uc3BfbmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU9Y29sdW1uX3R5cGUKLSAgICAgICAg ICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29m X3R5cGVdLmFwcGVuZCh7J3NxbCc6IHNxbCwgJ2RhdGEnOiBkYXRhfSkKLSAgICAgICAgICAgICAg ICAgICAgICAgIGxpc3Rfb2Zfcm93aWQuYXBwZW5kKGRhdGEuZ2V0KGNsaWVudF9wcmltYXJ5X2tl eSkpCi0KLSAgICAgICAgICAgICAgICAjIEZvciBkZWxldGVkIHJvd3MKLSAgICAgICAgICAgICAg ICBlbGlmIG9mX3R5cGUgPT0gJ2RlbGV0ZWQnOgotICAgICAgICAgICAgICAgICAgICBsaXN0X29m X3NxbFtvZl90eXBlXSA9IFtdCi0gICAgICAgICAgICAgICAgICAgIGlzX2ZpcnN0ID0gVHJ1ZQot ICAgICAgICAgICAgICAgICAgICByb3dzX3RvX2RlbGV0ZSA9IFtdCi0gICAgICAgICAgICAgICAg ICAgIGtleXMgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIG5vX29mX2tleXMgPSBOb25lCi0g ICAgICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV06 Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3dzX3RvX2RlbGV0ZS5hcHBlbmQoY2hhbmdlZF9k YXRhW29mX3R5cGVdW2VhY2hfcm93XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICMgRmV0Y2gg dGhlIGtleXMgZm9yIFNRTCBnZW5lcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBp c19maXJzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gY292ZXJ0 IGRpY3Rfa2V5cyB0byBub3JtYWwgbGlzdCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgUHl0aG9uMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gUHl0aG9uMiwgaXQn cyBhbHJlYWR5IGEgbGlzdCAmIFdlIHdpbGwgYWxzbwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgZmV0Y2ggY29sdW1uIG5hbWVzIHVzaW5nIGluZGV4Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAga2V5cyA9IGxpc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd10ua2V5cygpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX29mX2tleXMgPSBsZW4o a2V5cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19maXJzdCA9IEZhbHNlCi0gICAg ICAgICAgICAgICAgICAgICMgTWFwIGluZGV4IHdpdGggY29sdW1uIG5hbWUgZm9yIGVhY2ggcm93 Ci0gICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcm93c190b19kZWxldGU6Ci0gICAgICAg ICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiByb3cuaXRlbXMoKToKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIFNldCBwcmltYXJ5IGtleSB3aXRoIGxhYmVsICYgZGVsZXRlIGluZGV4 IGJhc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXBwZWQga2V5Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByb3dbY2hhbmdlZF9kYXRhWydjb2x1bW5zJ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFtpbnQoayldWyduYW1lJ11dID0gdgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCByb3dba10KLQotICAgICAg ICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAgICAgICAgICAg ICAgICAiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAg ICAgICAgICAgICAgICBkYXRhPXJvd3NfdG9fZGVsZXRlLAotICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbWFyeV9rZXlfbGFiZWxzPWtleXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBub19v Zl9rZXlzPW5vX29mX2tleXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfbmFtZT1z ZWxmLm9iamVjdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9c2VsZi5u c3BfbmFtZQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgIGxpc3Rf b2Zfc3FsW29mX3R5cGVdLmFwcGVuZCh7J3NxbCc6IHNxbCwgJ2RhdGEnOiB7fX0pCi0KLSAgICAg ICAgICAgIGZvciBvcHIsIHNxbHMgaW4gbGlzdF9vZl9zcWwuaXRlbXMoKToKLSAgICAgICAgICAg ICAgICBmb3IgaXRlbSBpbiBzcWxzOgotICAgICAgICAgICAgICAgICAgICBpZiBpdGVtWydzcWwn XToKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ2RhdGEnXSA9IHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ2FkbWluX2FsaWFzW2tdIGlmIGsgaW4gcGdhZG1pbl9hbGlhcyBl bHNlIGs6IHYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBpdGVtWydk YXRhJ10uaXRlbXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg ICAgICAgICAgICByb3dfYWRkZWQgPSBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRl ZiBmYWlsdXJlX2hhbmRsZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uZXhl Y3V0ZV92b2lkKCdST0xMQkFDSzsnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYg d2Ugcm9sbCBiYWNrZWQgZXZlcnkgdGhpbmcgdGhlbiB1cGRhdGUgdGhlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBtZXNzYWdlIGZvciBlYWNoIHNxbCBxdWVyeS4KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3IgdmFsIGluIHF1ZXJ5X3JlczoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgcXVlcnlfcmVzW3ZhbF1bJ3N0YXR1cyddOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzW3ZhbF1bJ3Jlc3VsdCddID0gXAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUcmFuc2FjdGlvbiBST0xMQkFD SycKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgbGlzdCBpcyBlbXB0eSBzZXQg cm93aWQgdG8gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgbGlzdF9vZl9yb3dpZDoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9IGxpc3Rfb2Zfcm93aWRbY291bnRdCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfcm93aWQgPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0 IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gMAot Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgcmVzLCBxdWVyeV9y ZXMsIF9yb3dpZAotCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBGZXRjaCBvaWRzL3ByaW1hcnkga2V5cwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICdzZWxlY3Rfc3FsJyBpbiBpdGVtIGFuZCBpdGVtWydzZWxlY3Rfc3Fs J106Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5l eGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtWydz cWwnXSwgaXRlbVsnZGF0YSddKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVjdXRl X3ZvaWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtWydzcWwnXSwg aXRlbVsnZGF0YSddKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBh cyBfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVfaGFuZGxlKCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBp ZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJl X2hhbmRsZSgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgU2VsZWN0IGFkZGVkIHJvdyBm cm9tIHRoZSB0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3NlbGVjdF9zcWwnIGlu IGl0ZW06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxfcmVzID0gY29u bi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bJ3Nl bGVjdF9zcWwnXSwgcmVzWydyb3dzJ11bMF0pCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmV4 ZWN1dGVfdm9pZCgnUk9MTEJBQ0s7JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBJZiB3ZSByb2xsIGJhY2tlZCBldmVyeSB0aGluZyB0aGVuIHVwZGF0ZQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIHRoZSBtZXNzYWdlIGZvciBlYWNoIHNxbCBxdWVyeS4KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiBxdWVyeV9yZXM6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxdWVyeV9yZXNbdmFsXVsnc3RhdHVz J106Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzW3Zh bF1bJ3Jlc3VsdCddID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnVHJhbnNhY3Rpb24gUk9MTEJBQ0snCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBJZiBsaXN0IGlzIGVtcHR5IHNldCByb3dpZCB0byAxCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIGxpc3Rfb2Zfcm93aWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX3Jvd2lkID0gbGlzdF9vZl9yb3dpZFtjb3VudF0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX3Jvd2lkID0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhj ZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0gMAot Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIHNlbF9yZXMs IHF1ZXJ5X3JlcywgX3Jvd2lkCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAncm93 cycgaW4gc2VsX3JlcyBhbmQgbGVuKHNlbF9yZXNbJ3Jvd3MnXSkgPiAwOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByb3dfYWRkZWQgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpdGVtWydjbGllbnRfcm93J106IHNlbF9yZXNbJ3Jvd3MnXVswXX0KLQot ICAgICAgICAgICAgICAgICAgICAgICAgcm93c19hZmZlY3RlZCA9IGNvbm4ucm93c19hZmZlY3Rl ZCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgdGhlIHJlc3VsdCBvZiBlYWNo IHF1ZXJ5IGluIGRpY3Rpb25hcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jlc1tj b3VudF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzdWx0JzogTm9uZSBpZiByb3dfYWRkZWQg ZWxzZSByZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxbCc6IHNxbCwgJ3Jvd3Nf YWZmZWN0ZWQnOiByb3dzX2FmZmVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdy b3dfYWRkZWQnOiByb3dfYWRkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQotCi0gICAgICAgICAgICAjIENvbW1pdCB0aGUg dHJhbnNhY3Rpb24gaWYgdGhlcmUgaXMgbm8gZXJyb3IgZm91bmQKLSAgICAgICAgICAgIGNvbm4u ZXhlY3V0ZV92b2lkKCdDT01NSVQ7JykKLQotICAgICAgICByZXR1cm4gc3RhdHVzLCByZXMsIHF1 ZXJ5X3JlcywgX3Jvd2lkCisgICAgICAgIHJldHVybiBzYXZlX2NoYW5nZWRfZGF0YShjaGFuZ2Vk X2RhdGE9Y2hhbmdlZF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s dW1uc19pbmZvPWNvbHVtbnNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbW1hbmRfb2JqPXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGll bnRfcHJpbWFyeV9rZXk9Y2xpZW50X3ByaW1hcnlfa2V5LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29ubj1jb25uKQogCiAKIGNsYXNzIFZpZXdDb21tYW5kKEdyaWRDb21tYW5k KToKQEAgLTExMTMsMTggKzg2MCw4OCBAQCBjbGFzcyBRdWVyeVRvb2xDb21tYW5kKEJhc2VDb21t YW5kLCBGZXRjaGVkUm93VHJhY2tlcik6CiAgICAgICAgIHNlbGYuYXV0b19yb2xsYmFjayA9IEZh bHNlCiAgICAgICAgIHNlbGYuYXV0b19jb21taXQgPSBUcnVlCiAKKyAgICAgICAgIyBBdHRyaWJ1 dGVzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGVkaXQgdXBkYXRhYmxlIHJlc3VsdHNlbHRzCisgICAg ICAgIHNlbGYuaXNfdXBkYXRhYmxlX3Jlc3VsdHNldCA9IEZhbHNlCisgICAgICAgIHNlbGYucHJp bWFyeV9rZXlzID0gTm9uZQorICAgICAgICBzZWxmLnBrX25hbWVzID0gTm9uZQorCiAgICAgZGVm IGdldF9zcWwoc2VsZiwgZGVmYXVsdF9jb25uPU5vbmUpOgogICAgICAgICByZXR1cm4gTm9uZQog CiAgICAgZGVmIGdldF9hbGxfY29sdW1uc193aXRoX29yZGVyKHNlbGYsIGRlZmF1bHRfY29ubj1O b25lKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAorICAgIGRlZiBnZXRfcHJpbWFyeV9rZXlzKHNl bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wa19uYW1lcywgc2VsZi5wcmltYXJ5X2tleXMKKwog ICAgIGRlZiBjYW5fZWRpdChzZWxmKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJl dHVybiBzZWxmLmlzX3VwZGF0YWJsZV9yZXN1bHRzZXQKIAogICAgIGRlZiBjYW5fZmlsdGVyKHNl bGYpOgogICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgIGRlZiBjaGVja191cGRhdGFibGVfcmVz dWx0c19wa2V5cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9u IGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgbGFzdCBzdWNjZXNzZnVsIHF1ZXJ5CisgICAg ICAgICAgICBwcm9kdWNlZCB1cGRhdGFibGUgcmVzdWx0cyBhbmQgc2V0cyB0aGUgbmVjZXNzYXJ5 IGZsYWdzIGFuZAorICAgICAgICAgICAgYXR0cmlidXRlcyBhY2NvcmRpbmdseQorICAgICAgICAi IiIKKyAgICAgICAgIyBGZXRjaCB0aGUgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgZHJpdmVy ID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikKKyAgICAgICAgbWFuYWdlciA9IGRyaXZl ci5jb25uZWN0aW9uX21hbmFnZXIoc2VsZi5zaWQpCisgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNv bm5lY3Rpb24oZGlkPXNlbGYuZGlkLCBjb25uX2lkPXNlbGYuY29ubl9pZCkKKworICAgICAgICAj IENoZWNrIHRoYXQgdGhlIHF1ZXJ5IHJlc3VsdHMgYXJlIHJlYWR5IGZpcnN0CisgICAgICAgIHN0 YXR1cywgcmVzdWx0ID0gY29ubi5wb2xsKAorICAgICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlv bl9tc2c9VHJ1ZSwgbm9fcmVzdWx0PVRydWUpCisgICAgICAgIGlmIHN0YXR1cyAhPSBBU1lOQ19P SzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgR2V0IHRoZSBwYXRoIHRvIHRoZSBz cWwgdGVtcGxhdGVzCisgICAgICAgIHNxbF9wYXRoID0gJ3NxbGVkaXRvci9zcWwvI3swfSMnLmZv cm1hdChtYW5hZ2VyLnZlcnNpb24pCisKKyAgICAgICAgc2VsZi5pc191cGRhdGFibGVfcmVzdWx0 c2V0LCBzZWxmLnByaW1hcnlfa2V5cywgcGtfbmFtZXMsIHRhYmxlX29pZCA9IFwKKyAgICAgICAg ICAgIGlzX3F1ZXJ5X3Jlc3VsdHNldF91cGRhdGFibGUoY29ubiwgc3FsX3BhdGgpCisKKyAgICAg ICAgIyBDcmVhdGUgcGtfbmFtZXMgYXR0cmlidXRlIGluIHRoZSByZXF1aXJlZCBmb3JtYXQKKyAg ICAgICAgaWYgcGtfbmFtZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnBrX25hbWVz ID0gJycKKworICAgICAgICAgICAgZm9yIHBrX25hbWUgaW4gcGtfbmFtZXM6CisgICAgICAgICAg ICAgICAgc2VsZi5wa19uYW1lcyArPSBkcml2ZXIucXRJZGVudChjb25uLCBwa19uYW1lKSArICcs JworCisgICAgICAgICAgICBpZiBzZWxmLnBrX25hbWVzICE9ICcnOgorICAgICAgICAgICAgICAg ICMgUmVtb3ZlIGxhc3QgY2hhcmFjdGVyIGZyb20gdGhlIHN0cmluZworICAgICAgICAgICAgICAg IHNlbGYucGtfbmFtZXMgPSBzZWxmLnBrX25hbWVzWzotMV0KKworICAgICAgICAjIEFkZCBhdHRy aWJ1dGVzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gdXBkYXRlIHRhYmxlIGRhdGEKKyAgICAgICAg aWYgc2VsZi5pc191cGRhdGFibGVfcmVzdWx0c2V0OgorICAgICAgICAgICAgc2VsZi5fX3NldF91 cGRhdGFibGVfcmVzdWx0c19hdHRycyhzcWxfcGF0aD1zcWxfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfb2lkPXRhYmxlX29pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubj1jb25uKQor CisgICAgZGVmIHNhdmUoc2VsZiwKKyAgICAgICAgICAgICBjaGFuZ2VkX2RhdGEsCisgICAgICAg ICAgICAgY29sdW1uc19pbmZvLAorICAgICAgICAgICAgIGNsaWVudF9wcmltYXJ5X2tleT0nX190 ZW1wX1BLJywKKyAgICAgICAgICAgICBkZWZhdWx0X2Nvbm49Tm9uZSk6CisgICAgICAgIGlmIG5v dCBzZWxmLmlzX3VwZGF0YWJsZV9yZXN1bHRzZXQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2Us IGdldHRleHQoJ1Jlc3VsdHNldCBpcyBub3QgdXBkYXRhYmxlLicpLCBOb25lLCBOb25lCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICBkcml2ZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJ VkVSKQorICAgICAgICAgICAgaWYgZGVmYXVsdF9jb25uIGlzIE5vbmU6CisgICAgICAgICAgICAg ICAgbWFuYWdlciA9IGRyaXZlci5jb25uZWN0aW9uX21hbmFnZXIoc2VsZi5zaWQpCisgICAgICAg ICAgICAgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9c2VsZi5kaWQsIGNvbm5faWQ9 c2VsZi5jb25uX2lkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb25uID0g ZGVmYXVsdF9jb25uCisKKyAgICAgICAgICAgIHJldHVybiBzYXZlX2NoYW5nZWRfZGF0YShjaGFu Z2VkX2RhdGE9Y2hhbmdlZF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbHVtbnNfaW5mbz1jb2x1bW5zX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29ubj1jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbW1hbmRfb2JqPXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2xpZW50X3ByaW1hcnlfa2V5PWNsaWVudF9wcmltYXJ5X2tleSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhdXRvX2NvbW1pdD1zZWxmLmF1dG9fY29tbWl0KQorCiAg ICAgZGVmIHNldF9jb25uZWN0aW9uX2lkKHNlbGYsIGNvbm5faWQpOgogICAgICAgICBzZWxmLmNv bm5faWQgPSBjb25uX2lkCiAKQEAgLTExMzMsMyArOTUwLDI4IEBAIGNsYXNzIFF1ZXJ5VG9vbENv bW1hbmQoQmFzZUNvbW1hbmQsIEZldGNoZWRSb3dUcmFja2VyKToKIAogICAgIGRlZiBzZXRfYXV0 b19jb21taXQoc2VsZiwgYXV0b19jb21taXQpOgogICAgICAgICBzZWxmLmF1dG9fY29tbWl0ID0g YXV0b19jb21taXQKKworICAgIGRlZiBfX3NldF91cGRhdGFibGVfcmVzdWx0c19hdHRycyhzZWxm LCBzcWxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVf b2lkLCBjb25uKToKKyAgICAgICAgIyBTZXQgdGVtcGxhdGUgcGF0aCBmb3Igc3FsIHNjcmlwdHMg YW5kIHRoZSB0YWJsZSBvYmplY3QgaWQKKyAgICAgICAgc2VsZi5zcWxfcGF0aCA9IHNxbF9wYXRo CisgICAgICAgIHNlbGYub2JqX2lkID0gdGFibGVfb2lkCisKKyAgICAgICAgaWYgY29ubi5jb25u ZWN0ZWQoKToKKyAgICAgICAgICAgICMgRmV0Y2ggdGhlIE5hbWVzcGFjZSBOYW1lIGFuZCBvYmpl Y3QgTmFtZQorICAgICAgICAgICAgcXVlcnkgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAg ICAgICAgIi8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICdvYmplY3RuYW1lLnNxbCddKSwKKyAgICAg ICAgICAgICAgICBvYmpfaWQ9c2VsZi5vYmpfaWQKKyAgICAgICAgICAgICkKKworICAgICAgICAg ICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1dGVfZGljdChxdWVyeSkKKyAgICAgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHJlc3VsdCkK KworICAgICAgICAgICAgc2VsZi5uc3BfbmFtZSA9IHJlc3VsdFsncm93cyddWzBdWyduc3BuYW1l J10KKyAgICAgICAgICAgIHNlbGYub2JqZWN0X25hbWUgPSByZXN1bHRbJ3Jvd3MnXVswXVsncmVs bmFtZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZ2V0dGV4 dCgKKyAgICAgICAgICAgICAgICAnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgb3IgY29ubmVjdGlv biB3aXRoIHRoZSBzZXJ2ZXIgJworICAgICAgICAgICAgICAgICdoYXMgYmVlbiBjbG9zZWQuJykK KyAgICAgICAgICAgICkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9z dGF0aWMvY3NzL3NxbGVkaXRvci5jc3MgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3Rh dGljL2Nzcy9zcWxlZGl0b3IuY3NzCmluZGV4IDg2ZDNkZWZjLi4yMTQ0ODMyNyAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcwor KysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3IuY3Nz CkBAIC0yOTEsNyArMjkxLDcgQEAgaW5wdXQuZWRpdG9yLWNoZWNrYm94OmZvY3VzIHsKICAgYmFj a2dyb3VuZC1pbWFnZTogdXJsKCcuLi9pbWcvZGlzY29ubmVjdC5zdmcnKTsKIH0KIAotLmljb24t Y29tbWl0LCAuaWNvbi1yb2xsYmFjayB7CisuaWNvbi1jb21taXQsIC5pY29uLXJvbGxiYWNrLCAu aWNvbi1zYXZlLWRhdGEtY2hhbmdlcyB7CiAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgYWxp Z24tY29udGVudDogY2VudGVyOwogICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwpAQCAtMzExLDYg KzMxMSwxMCBAQCBpbnB1dC5lZGl0b3ItY2hlY2tib3g6Zm9jdXMgewogICBiYWNrZ3JvdW5kLWlt YWdlOiB1cmwoJy4uL2ltZy9yb2xsYmFjay5zdmcnKSAhaW1wb3J0YW50OwogfQogCisuaWNvbi1z YXZlLWRhdGEtY2hhbmdlcyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vaW1nL3NhdmVf ZGF0YV9jaGFuZ2VzLnN2ZycpICFpbXBvcnRhbnQ7Cit9CisKIC5hanMtYm9keSAud2Fybi1oZWFk ZXIgewogICBmb250LXNpemU6IDEzcHg7CiAgIGZvbnQtd2VpZ2h0OiBib2xkOwpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9pbWcvc2F2ZV9kYXRhX2NoYW5n ZXMuc3ZnIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9pbWcvc2F2ZV9kYXRh X2NoYW5nZXMuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iZDJjNTE4 ZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMv aW1nL3NhdmVfZGF0YV9jaGFuZ2VzLnN2ZwpAQCAtMCwwICsxLDExIEBACis8c3ZnIHZlcnNpb249 IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0 cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAw IDAgMTc5MiAxNzkyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjE3OTIiIGhlaWdodD0i MTc5MiI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAl IiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz4KKzxzdHlsZSB0eXBlPSJ0 ZXh0L2NzcyI+CisJLnN0MHtmaWxsOiNGRkZGRkY7fQorPC9zdHlsZT4KKzx0aXRsZT5zYXZlX2Rh dGFfY2hhbmdlczwvdGl0bGU+CisKKworPGcgY2xhc3M9ImN1cnJlbnRMYXllciIgc3R5bGU9IiI+ PHRpdGxlPkxheWVyIDE8L3RpdGxlPjxwYXRoIGQ9Ik02MjMuMDMxOTgyNDIxODc1LDEzODUuMTMw ODk0MTg0MTEyNSB2LTE3Mi4xMjk4ODI4MTI1IGMwLC04LjMzNzU0MDYyNjUyNTg3OSAtMi41NzI0 NTg3NDQwNDkwNzIzLC0xNS4yNDA2NjYzODk0NjUzMzIgLTcuNzE3Mzc2MjMyMTQ3MjE3LC0yMC42 MTk3MjQyNzM2ODE2NCBzLTExLjc0NzU2MTQ1NDc3Mjk1LC04LjA2ODU4ODI1NjgzNTkzOCAtMTku NzIyMTgzMjI3NTM5MDYyLC04LjA2ODU4ODI1NjgzNTkzOCBIMzIxLjE5Nzk2NzUyOTI5NjkgYy03 Ljk3NDYyMjI0OTYwMzI3MTUsMCAtMTQuNTc3MjY2NjkzMTE1MjM0LDIuNjg5NTI5NDE4OTQ1MzEy NSAtMTkuNzIyMTgzMjI3NTM5MDYyLDguMDY4NTg4MjU2ODM1OTM4IHMtNy43MTczNzYyMzIxNDcy MTcsMTIuMjgyMTgzNjQ3MTU1NzYyIC03LjcxNzM3NjIzMjE0NzIxNywyMC42MTk3MjQyNzM2ODE2 NCB2MTcyLjEyOTg4MjgxMjUgYzAsOC4zMzc1NDA2MjY1MjU4NzkgMi41NzI0NTg3NDQwNDkwNzIz LDE1LjI0MDY2NjM4OTQ2NTMzMiA3LjcxNzM3NjIzMjE0NzIxNywyMC42MTk3MjQyNzM2ODE2NCBz MTEuNzQ3NTYxNDU0NzcyOTUsOC4wNjg1ODgyNTY4MzU5MzggMTkuNzIyMTgzMjI3NTM5MDYyLDgu MDY4NTg4MjU2ODM1OTM4IGgyNzQuMzk1NTk5MzY1MjM0NCBjNy45NzQ2MjIyNDk2MDMyNzE1LDAg MTQuNTc3MjY2NjkzMTE1MjM0LC0yLjY4OTUyOTQxODk0NTMxMjUgMTkuNzIyMTgzMjI3NTM5MDYy LC04LjA2ODU4ODI1NjgzNTkzOCBTNjIzLjAzMTk4MjQyMTg3NSwxMzkzLjQ2ODQxODU5ODE3NSA2 MjMuMDMxOTgyNDIxODc1LDEzODUuMTMwODk0MTg0MTEyNSB6TTYyMy4wMzE5ODI0MjE4NzUsMTA0 MC44Njk3ODU3ODU2NzUgVjg2OC43Mzk1OTc3OTczOTM4IGMwLC04LjMzNzU0MDYyNjUyNTg3OSAt Mi41NzI0NTg3NDQwNDkwNzIzLC0xNS4yNDA2NjYzODk0NjUzMzIgLTcuNzE3Mzc2MjMyMTQ3MjE3 LC0yMC42MTk3MjQyNzM2ODE2NCBzLTExLjc0NzU2MTQ1NDc3Mjk1LC04LjA2ODU4ODI1NjgzNTkz OCAtMTkuNzIyMTgzMjI3NTM5MDYyLC04LjA2ODU4ODI1NjgzNTkzOCBIMzIxLjE5Nzk2NzUyOTI5 NjkgYy03Ljk3NDYyMjI0OTYwMzI3MTUsMCAtMTQuNTc3MjY2NjkzMTE1MjM0LDIuNjg5NTI5NDE4 OTQ1MzEyNSAtMTkuNzIyMTgzMjI3NTM5MDYyLDguMDY4NTg4MjU2ODM1OTM4IHMtNy43MTczNzYy MzIxNDcyMTcsMTIuMjgyMTgzNjQ3MTU1NzYyIC03LjcxNzM3NjIzMjE0NzIxNywyMC42MTk3MjQy NzM2ODE2NCB2MTcyLjEyOTg4MjgxMjUgYzAsOC4zMzc1NDA2MjY1MjU4NzkgMi41NzI0NTg3NDQw NDkwNzIzLDE1LjI0MDY2NjM4OTQ2NTMzMiA3LjcxNzM3NjIzMjE0NzIxNywyMC42MTk3MjQyNzM2 ODE2NCBzMTEuNzQ3NTYxNDU0NzcyOTUsOC4wNjg1ODgyNTY4MzU5MzggMTkuNzIyMTgzMjI3NTM5 MDYyLDguMDY4NTg4MjU2ODM1OTM4IGgyNzQuMzk1NTk5MzY1MjM0NCBjNy45NzQ2MjIyNDk2MDMy NzE1LDAgMTQuNTc3MjY2NjkzMTE1MjM0LC0yLjY4OTUyOTQxODk0NTMxMjUgMTkuNzIyMTgzMjI3 NTM5MDYyLC04LjA2ODU4ODI1NjgzNTkzOCBTNjIzLjAzMTk4MjQyMTg3NSwxMDQ5LjIwNzU1NDM0 MDM2MjUgNjIzLjAzMTk4MjQyMTg3NSwxMDQwLjg2OTc4NTc4NTY3NSB6TTEwNjIuMDY1NjczODI4 MTI1LDEzODUuMTMwODk0MTg0MTEyNSB2LTE3Mi4xMjk4ODI4MTI1IGMwLC04LjMzNzU0MDYyNjUy NTg3OSAtMi41NzI0NTg3NDQwNDkwNzIzLC0xNS4yNDA2NjYzODk0NjUzMzIgLTcuNzE3Mzc2MjMy MTQ3MjE3LC0yMC42MTk3MjQyNzM2ODE2NCBzLTExLjc0NzU2MTQ1NDc3Mjk1LC04LjA2ODU4ODI1 NjgzNTkzOCAtMTkuNzIyMTgzMjI3NTM5MDYyLC04LjA2ODU4ODI1NjgzNTkzOCBINzYwLjIyOTY3 NTI5Mjk2ODggYy03Ljk3NDYyMjI0OTYwMzI3MTUsMCAtMTQuNTc3MjY2NjkzMTE1MjM0LDIuNjg5 NTI5NDE4OTQ1MzEyNSAtMTkuNzIyMTgzMjI3NTM5MDYyLDguMDY4NTg4MjU2ODM1OTM4IHMtNy43 MTczNzYyMzIxNDcyMTcsMTIuMjgyMTgzNjQ3MTU1NzYyIC03LjcxNzM3NjIzMjE0NzIxNywyMC42 MTk3MjQyNzM2ODE2NCB2MTcyLjEyOTg4MjgxMjUgYzAsOC4zMzc1NDA2MjY1MjU4NzkgMi41NzI0 NTg3NDQwNDkwNzIzLDE1LjI0MDY2NjM4OTQ2NTMzMiA3LjcxNzM3NjIzMjE0NzIxNywyMC42MTk3 MjQyNzM2ODE2NCBzMTEuNzQ3NTYxNDU0NzcyOTUsOC4wNjg1ODgyNTY4MzU5MzggMTkuNzIyMTgz MjI3NTM5MDYyLDguMDY4NTg4MjU2ODM1OTM4IGgyNzQuMzk1NTk5MzY1MjM0NCBjNy45NzQ2MjIy NDk2MDMyNzE1LDAgMTQuNTc3MjY2NjkzMTE1MjM0LC0yLjY4OTUyOTQxODk0NTMxMjUgMTkuNzIy MTgzMjI3NTM5MDYyLC04LjA2ODU4ODI1NjgzNTkzOCBTMTA2Mi4wNjU2NzM4MjgxMjUsMTM5My40 Njg0MTg1OTgxNzUgMTA2Mi4wNjU2NzM4MjgxMjUsMTM4NS4xMzA4OTQxODQxMTI1IHpNNjIzLjAz MTk4MjQyMTg3NSw2OTYuNjA5NzE0OTg0ODkzOCBWNTI0LjQ4MDUwMzU1OTExMjUgYzAsLTguMzM3 NTQwNjI2NTI1ODc5IC0yLjU3MjQ1ODc0NDA0OTA3MjMsLTE1LjI0MDY2NjM4OTQ2NTMzMiAtNy43 MTczNzYyMzIxNDcyMTcsLTIwLjYxOTcyNDI3MzY4MTY0IHMtMTEuNzQ3NTYxNDU0NzcyOTUsLTgu MDY4NTg4MjU2ODM1OTM4IC0xOS43MjIxODMyMjc1MzkwNjIsLTguMDY4NTg4MjU2ODM1OTM4IEgz MjEuMTk3OTY3NTI5Mjk2OSBjLTcuOTc0NjIyMjQ5NjAzMjcxNSwwIC0xNC41NzcyNjY2OTMxMTUy MzQsMi42ODk1Mjk0MTg5NDUzMTI1IC0xOS43MjIxODMyMjc1MzkwNjIsOC4wNjg1ODgyNTY4MzU5 Mzggcy03LjcxNzM3NjIzMjE0NzIxNywxMi4yODIxODM2NDcxNTU3NjIgLTcuNzE3Mzc2MjMyMTQ3 MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHYxNzIuMTI5ODgyODEyNSBjMCw4LjMzNzU0MDYyNjUyNTg3 OSAyLjU3MjQ1ODc0NDA0OTA3MjMsMTUuMjQwNjY2Mzg5NDY1MzMyIDcuNzE3Mzc2MjMyMTQ3MjE3 LDIwLjYxOTcyNDI3MzY4MTY0IHMxMS43NDc1NjE0NTQ3NzI5NSw4LjA2ODU4ODI1NjgzNTkzOCAx OS43MjIxODMyMjc1MzkwNjIsOC4wNjg1ODgyNTY4MzU5MzggaDI3NC4zOTU1OTkzNjUyMzQ0IGM3 Ljk3NDYyMjI0OTYwMzI3MTUsMCAxNC41NzcyNjY2OTMxMTUyMzQsLTIuNjg5NTI5NDE4OTQ1MzEy NSAxOS43MjIxODMyMjc1MzkwNjIsLTguMDY4NTg4MjU2ODM1OTM4IFM2MjMuMDMxOTgyNDIxODc1 LDcwNC45NDcyMzkzOTg5NTYzIDYyMy4wMzE5ODI0MjE4NzUsNjk2LjYwOTcxNDk4NDg5Mzggek0x MDYyLjA2NTY3MzgyODEyNSwxMDQwLjg2OTc4NTc4NTY3NSBWODY4LjczOTU5Nzc5NzM5MzggYzAs LTguMzM3NTQwNjI2NTI1ODc5IC0yLjU3MjQ1ODc0NDA0OTA3MjMsLTE1LjI0MDY2NjM4OTQ2NTMz MiAtNy43MTczNzYyMzIxNDcyMTcsLTIwLjYxOTcyNDI3MzY4MTY0IHMtMTEuNzQ3NTYxNDU0Nzcy OTUsLTguMDY4NTg4MjU2ODM1OTM4IC0xOS43MjIxODMyMjc1MzkwNjIsLTguMDY4NTg4MjU2ODM1 OTM4IEg3NjAuMjI5Njc1MjkyOTY4OCBjLTcuOTc0NjIyMjQ5NjAzMjcxNSwwIC0xNC41NzcyNjY2 OTMxMTUyMzQsMi42ODk1Mjk0MTg5NDUzMTI1IC0xOS43MjIxODMyMjc1MzkwNjIsOC4wNjg1ODgy NTY4MzU5Mzggcy03LjcxNzM3NjIzMjE0NzIxNywxMi4yODIxODM2NDcxNTU3NjIgLTcuNzE3Mzc2 MjMyMTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHYxNzIuMTI5ODgyODEyNSBjMCw4LjMzNzU0MDYy NjUyNTg3OSAyLjU3MjQ1ODc0NDA0OTA3MjMsMTUuMjQwNjY2Mzg5NDY1MzMyIDcuNzE3Mzc2MjMy MTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHMxMS43NDc1NjE0NTQ3NzI5NSw4LjA2ODU4ODI1Njgz NTkzOCAxOS43MjIxODMyMjc1MzkwNjIsOC4wNjg1ODgyNTY4MzU5MzggaDI3NC4zOTU1OTkzNjUy MzQ0IGM3Ljk3NDYyMjI0OTYwMzI3MTUsMCAxNC41NzcyNjY2OTMxMTUyMzQsLTIuNjg5NTI5NDE4 OTQ1MzEyNSAxOS43MjIxODMyMjc1MzkwNjIsLTguMDY4NTg4MjU2ODM1OTM4IFMxMDYyLjA2NTY3 MzgyODEyNSwxMDQ5LjIwNzU1NDM0MDM2MjUgMTA2Mi4wNjU2NzM4MjgxMjUsMTA0MC44Njk3ODU3 ODU2NzUgek0xNTAxLjEwMDM0MTc5Njg3NSwxMzg1LjEzMDg5NDE4NDExMjUgdi0xNzIuMTI5ODgy ODEyNSBjMCwtOC4zMzc1NDA2MjY1MjU4NzkgLTIuNTcyNDU4NzQ0MDQ5MDcyMywtMTUuMjQwNjY2 Mzg5NDY1MzMyIC03LjcxNzM3NjIzMjE0NzIxNywtMjAuNjE5NzI0MjczNjgxNjQgcy0xMS43NDc1 NjE0NTQ3NzI5NSwtOC4wNjg1ODgyNTY4MzU5MzggLTE5LjcyMjE4MzIyNzUzOTA2MiwtOC4wNjg1 ODgyNTY4MzU5MzggaC0yNzQuMzk1NTk5MzY1MjM0NCBjLTcuOTc0NjIyMjQ5NjAzMjcxNSwwIC0x NC41NzcyNjY2OTMxMTUyMzQsMi42ODk1Mjk0MTg5NDUzMTI1IC0xOS43MjIxODMyMjc1MzkwNjIs OC4wNjg1ODgyNTY4MzU5Mzggcy03LjcxNzM3NjIzMjE0NzIxNywxMi4yODIxODM2NDcxNTU3NjIg LTcuNzE3Mzc2MjMyMTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHYxNzIuMTI5ODgyODEyNSBjMCw4 LjMzNzU0MDYyNjUyNTg3OSAyLjU3MjQ1ODc0NDA0OTA3MjMsMTUuMjQwNjY2Mzg5NDY1MzMyIDcu NzE3Mzc2MjMyMTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHMxMS43NDc1NjE0NTQ3NzI5NSw4LjA2 ODU4ODI1NjgzNTkzOCAxOS43MjIxODMyMjc1MzkwNjIsOC4wNjg1ODgyNTY4MzU5MzggaDI3NC4z OTU1OTkzNjUyMzQ0IGM3Ljk3NDYyMjI0OTYwMzI3MTUsMCAxNC41NzcyNjY2OTMxMTUyMzQsLTIu Njg5NTI5NDE4OTQ1MzEyNSAxOS43MjIxODMyMjc1MzkwNjIsLTguMDY4NTg4MjU2ODM1OTM4IFMx NTAxLjEwMDM0MTc5Njg3NSwxMzkzLjQ2ODQxODU5ODE3NSAxNTAxLjEwMDM0MTc5Njg3NSwxMzg1 LjEzMDg5NDE4NDExMjUgek0xMDYyLjA2NTY3MzgyODEyNSw2OTYuNjA5NzE0OTg0ODkzOCBWNTI0 LjQ4MDUwMzU1OTExMjUgYzAsLTguMzM3NTQwNjI2NTI1ODc5IC0yLjU3MjQ1ODc0NDA0OTA3MjMs LTE1LjI0MDY2NjM4OTQ2NTMzMiAtNy43MTczNzYyMzIxNDcyMTcsLTIwLjYxOTcyNDI3MzY4MTY0 IHMtMTEuNzQ3NTYxNDU0NzcyOTUsLTguMDY4NTg4MjU2ODM1OTM4IC0xOS43MjIxODMyMjc1Mzkw NjIsLTguMDY4NTg4MjU2ODM1OTM4IEg3NjAuMjI5Njc1MjkyOTY4OCBjLTcuOTc0NjIyMjQ5NjAz MjcxNSwwIC0xNC41NzcyNjY2OTMxMTUyMzQsMi42ODk1Mjk0MTg5NDUzMTI1IC0xOS43MjIxODMy Mjc1MzkwNjIsOC4wNjg1ODgyNTY4MzU5Mzggcy03LjcxNzM3NjIzMjE0NzIxNywxMi4yODIxODM2 NDcxNTU3NjIgLTcuNzE3Mzc2MjMyMTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHYxNzIuMTI5ODgy ODEyNSBjMCw4LjMzNzU0MDYyNjUyNTg3OSAyLjU3MjQ1ODc0NDA0OTA3MjMsMTUuMjQwNjY2Mzg5 NDY1MzMyIDcuNzE3Mzc2MjMyMTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHMxMS43NDc1NjE0NTQ3 NzI5NSw4LjA2ODU4ODI1NjgzNTkzOCAxOS43MjIxODMyMjc1MzkwNjIsOC4wNjg1ODgyNTY4MzU5 MzggaDI3NC4zOTU1OTkzNjUyMzQ0IGM3Ljk3NDYyMjI0OTYwMzI3MTUsMCAxNC41NzcyNjY2OTMx MTUyMzQsLTIuNjg5NTI5NDE4OTQ1MzEyNSAxOS43MjIxODMyMjc1MzkwNjIsLTguMDY4NTg4MjU2 ODM1OTM4IFMxMDYyLjA2NTY3MzgyODEyNSw3MDQuOTQ3MjM5Mzk4OTU2MyAxMDYyLjA2NTY3Mzgy ODEyNSw2OTYuNjA5NzE0OTg0ODkzOCB6TTE1MDEuMTAwMzQxNzk2ODc1LDEwNDAuODY5Nzg1Nzg1 Njc1IFY4NjguNzM5NTk3Nzk3MzkzOCBjMCwtOC4zMzc1NDA2MjY1MjU4NzkgLTIuNTcyNDU4NzQ0 MDQ5MDcyMywtMTUuMjQwNjY2Mzg5NDY1MzMyIC03LjcxNzM3NjIzMjE0NzIxNywtMjAuNjE5NzI0 MjczNjgxNjQgcy0xMS43NDc1NjE0NTQ3NzI5NSwtOC4wNjg1ODgyNTY4MzU5MzggLTE5LjcyMjE4 MzIyNzUzOTA2MiwtOC4wNjg1ODgyNTY4MzU5MzggaC0yNzQuMzk1NTk5MzY1MjM0NCBjLTcuOTc0 NjIyMjQ5NjAzMjcxNSwwIC0xNC41NzcyNjY2OTMxMTUyMzQsMi42ODk1Mjk0MTg5NDUzMTI1IC0x OS43MjIxODMyMjc1MzkwNjIsOC4wNjg1ODgyNTY4MzU5Mzggcy03LjcxNzM3NjIzMjE0NzIxNywx Mi4yODIxODM2NDcxNTU3NjIgLTcuNzE3Mzc2MjMyMTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHYx NzIuMTI5ODgyODEyNSBjMCw4LjMzNzU0MDYyNjUyNTg3OSAyLjU3MjQ1ODc0NDA0OTA3MjMsMTUu MjQwNjY2Mzg5NDY1MzMyIDcuNzE3Mzc2MjMyMTQ3MjE3LDIwLjYxOTcyNDI3MzY4MTY0IHMxMS43 NDc1NjE0NTQ3NzI5NSw4LjA2ODU4ODI1NjgzNTkzOCAxOS43MjIxODMyMjc1MzkwNjIsOC4wNjg1 ODgyNTY4MzU5MzggaDI3NC4zOTU1OTkzNjUyMzQ0IGM3Ljk3NDYyMjI0OTYwMzI3MTUsMCAxNC41 NzcyNjY2OTMxMTUyMzQsLTIuNjg5NTI5NDE4OTQ1MzEyNSAxOS43MjIxODMyMjc1MzkwNjIsLTgu MDY4NTg4MjU2ODM1OTM4IFMxNTAxLjEwMDM0MTc5Njg3NSwxMDQ5LjIwNzU1NDM0MDM2MjUgMTUw MS4xMDAzNDE3OTY4NzUsMTA0MC44Njk3ODU3ODU2NzUgek0xNTAxLjEwMDM0MTc5Njg3NSw2OTYu NjA5NzE0OTg0ODkzOCBWNTI0LjQ4MDUwMzU1OTExMjUgYzAsLTguMzM3NTQwNjI2NTI1ODc5IC0y LjU3MjQ1ODc0NDA0OTA3MjMsLTE1LjI0MDY2NjM4OTQ2NTMzMiAtNy43MTczNzYyMzIxNDcyMTcs LTIwLjYxOTcyNDI3MzY4MTY0IHMtMTEuNzQ3NTYxNDU0NzcyOTUsLTguMDY4NTg4MjU2ODM1OTM4 IC0xOS43MjIxODMyMjc1MzkwNjIsLTguMDY4NTg4MjU2ODM1OTM4IGgtMjc0LjM5NTU5OTM2NTIz NDQgYy03Ljk3NDYyMjI0OTYwMzI3MTUsMCAtMTQuNTc3MjY2NjkzMTE1MjM0LDIuNjg5NTI5NDE4 OTQ1MzEyNSAtMTkuNzIyMTgzMjI3NTM5MDYyLDguMDY4NTg4MjU2ODM1OTM4IHMtNy43MTczNzYy MzIxNDcyMTcsMTIuMjgyMTgzNjQ3MTU1NzYyIC03LjcxNzM3NjIzMjE0NzIxNywyMC42MTk3MjQy NzM2ODE2NCB2MTcyLjEyOTg4MjgxMjUgYzAsOC4zMzc1NDA2MjY1MjU4NzkgMi41NzI0NTg3NDQw NDkwNzIzLDE1LjI0MDY2NjM4OTQ2NTMzMiA3LjcxNzM3NjIzMjE0NzIxNywyMC42MTk3MjQyNzM2 ODE2NCBzMTEuNzQ3NTYxNDU0NzcyOTUsOC4wNjg1ODgyNTY4MzU5MzggMTkuNzIyMTgzMjI3NTM5 MDYyLDguMDY4NTg4MjU2ODM1OTM4IGgyNzQuMzk1NTk5MzY1MjM0NCBjNy45NzQ2MjIyNDk2MDMy NzE1LDAgMTQuNTc3MjY2NjkzMTE1MjM0LC0yLjY4OTUyOTQxODk0NTMxMjUgMTkuNzIyMTgzMjI3 NTM5MDYyLC04LjA2ODU4ODI1NjgzNTkzOCBTMTUwMS4xMDAzNDE3OTY4NzUsNzA0Ljk0NzIzOTM5 ODk1NjMgMTUwMS4xMDAzNDE3OTY4NzUsNjk2LjYwOTcxNDk4NDg5Mzggek0xNjEwLjg1ODY0MjU3 ODEyNSw0MDkuNzI3MzkwNzY2MTQzOCB2OTc1LjQwMjY0ODkyNTc4MTIgYzAsMzkuNDQ2NDMwMjA2 Mjk4ODMgLTEzLjQ2MjUzMzk1MDgwNTY2NCw3My4yNDQ4NDI1MjkyOTY4OCAtNDAuMzAxODUzMTc5 OTMxNjQsMTAxLjMwNTYwMzAyNzM0Mzc1IHMtNTkuMTY2NTQ5NjgyNjE3MTksNDIuMTM1OTU5NjI1 MjQ0MTQgLTk2Ljg5NTk0MjY4Nzk4ODI4LDQyLjEzNTk1OTYyNTI0NDE0IEgzMjEuMTk3OTY3NTI5 Mjk2OSBjLTM3LjcyOTM5MzAwNTM3MTA5NCwwIC03MC4wNTY2MjUzNjYyMTA5NCwtMTQuMDc1MjAy OTQxODk0NTMxIC05Ni44OTU5NDI2ODc5ODgyOCwtNDIuMTM1OTU5NjI1MjQ0MTQgcy00MC4zMDE4 NTMxNzk5MzE2NCwtNjEuODU5MTcyODIxMDQ0OTIgLTQwLjMwMTg1MzE3OTkzMTY0LC0xMDEuMzA1 NjAzMDI3MzQzNzUgVjQwOS43MjczOTA3NjYxNDM4IGMwLC0zOS40NDY0MzAyMDYyOTg4MyAxMy40 NjI1MzM5NTA4MDU2NjQsLTczLjI0NDg0MjUyOTI5Njg4IDQwLjMwMTg1MzE3OTkzMTY0LC0xMDEu MzA1NjAzMDI3MzQzNzUgczU5LjE2NjU0OTY4MjYxNzE5LC00Mi4xMzU5NTk2MjUyNDQxNCA5Ni44 OTU5NDI2ODc5ODgyOCwtNDIuMTM1OTU5NjI1MjQ0MTQgaDExNTIuNDYxNTQ3ODUxNTYyNSBjMzcu NzI5MzkzMDA1MzcxMDk0LDAgNzAuMDU2NjI1MzY2MjEwOTQsMTQuMDc1MjAyOTQxODk0NTMxIDk2 Ljg5NTk0MjY4Nzk4ODI4LDQyLjEzNTk1OTYyNTI0NDE0IFMxNjEwLjg1ODY0MjU3ODEyNSwzNzAu MjgwOTc5NjMzMzMxMyAxNjEwLjg1ODY0MjU3ODEyNSw0MDkuNzI3MzkwNzY2MTQzOCB6IiBpZD0i c3ZnXzEiIGNsYXNzPSIiLz48ZyBpZD0ic3ZnXzIiIGNsYXNzPSJzZWxlY3RlZCI+CisJPHBhdGgg ZD0iTTkwMS4xODU5MzkzMTE5ODEyLDEzMDMuNzEwOTM3NSBjLTIyLjkzNjU0NDQxODMzNDk2LDAg LTQzLjUzNDQ2MTk3NTA5NzY1NiwtOC4xMjE2ODMxMjA3Mjc1MzkgLTU5LjU0NTA3MDY0ODE5MzM2 LC0yMy41ODc0NDA0OTA3MjI2NTYgbC0yOTIuNTA4NDUzMzY5MTQwNiwtMjgxLjQwNzY4NDMyNjE3 MTkgYy0xNi41NTAyOTI5Njg3NSwtMTUuMTIwMTU0MzgwNzk4MzQgLTI1LjI3NTE3MzE4NzI1NTg2 LC0zNC45OTIzNTUzNDY2Nzk2OSAtMjUuMjc1MTczMTg3MjU1ODYsLTU3LjQ1NjU5MjU1OTgxNDQ1 IGMwLC0yMi4yOTE0Mjc2MTIzMDQ2ODggOC4zNjUwOTQxODQ4NzU0ODgsLTQxLjY0NTIyNTUyNDkw MjM0NCAyNC45MTUzODgxMDcyOTk4MDUsLTU3LjU0Mjk5MTYzODE4MzU5NCBsMzMuMTkwNTMyNjg0 MzI2MTcsLTMyLjMxMzkzNDMyNjE3MTg3NSBjMC4xNzk4OTQ0NzcxMjg5ODI1NCwtMC4xNzI4MDE3 NjI4MTkyOTAxNiAwLjQ0OTczNjE3NzkyMTI5NTE3LC0wLjQzMjAwNDQ1MTc1MTcwOSAwLjYyOTYz MDYyNTI0Nzk1NTMsLTAuNjA0ODA2MjQ0MzczMzIxNSBjMTYuNjQwMjM5NzE1NTc2MTcyLC0xNS4x MjAxNTQzODA3OTgzNCAzNy4xNDgyMDg2MTgxNjQwNiwtMjMuMDY5MDM2NDgzNzY0NjUgNTkuNDU1 MTIzOTAxMzY3MTksLTIzLjA2OTAzNjQ4Mzc2NDY1IGMyMi45MzY1NDQ0MTgzMzQ5NiwwIDQzLjUz NDQ2MTk3NTA5NzY1Niw4LjEyMTY4MzEyMDcyNzUzOSA1OS41NDUwNzA2NDgxOTMzNiwyMy41ODc0 NDA0OTA3MjI2NTYgbDg2LjE2OTQ0ODg1MjUzOTA2LDgyLjc3MjA1NjU3OTU4OTg0IFY2OTIuMzM2 MzY0NzQ2MDkzOCBjMCwtMjEuNjg2NjI0NTI2OTc3NTQgOC42MzQ5MzYzMzI3MDI2MzcsLTQxLjQ3 MjQyMzU1MzQ2NjggMjUuMDA1MzMyOTQ2Nzc3MzQ0LC01Ny4xOTczOTE1MTAwMDk3NjYgYzE2LjM3 MDM5OTQ3NTA5NzY1NiwtMTUuNzI0OTYxMjgwODIyNzU0IDM2Ljk2ODMxODkzOTIwODk4NCwtMjQu MDE5NDQ1NDE5MzExNTIzIDU5LjU0NTA3MDY0ODE5MzM2LC0yNC4wMTk0NDU0MTkzMTE1MjMgaDU3 LjU2NjIzMDc3MzkyNTc4IGMyMi41NzY3NTc0MzEwMzAyNzMsMCA0My4xNzQ2NzQ5ODc3OTI5Nyw4 LjI5NDQ4NjA0NTgzNzQwMiA1OS41NDUwNzA2NDgxOTMzNiwyNC4wMTk0NDU0MTkzMTE1MjMgYzE2 LjM3MDM5OTQ3NTA5NzY1NiwxNS43MjQ5NjEyODA4MjI3NTQgMjUuMDA1MzMyOTQ2Nzc3MzQ0LDM1 LjUxMDc1NzQ0NjI4OTA2IDI1LjAwNTMzMjk0Njc3NzM0NCw1Ny4xOTczOTE1MTAwMDk3NjYgdjI0 MS41NzY4NTg1MjA1MDc4IGw4Ni4xNjk0NDg4NTI1MzkwNiwtODIuNzcyMDU2NTc5NTg5ODQgYzE2 LjEwMDU1NzMyNzI3MDUwOCwtMTUuNDY1NzU3MzY5OTk1MTE3IDM2LjYwODUyODEzNzIwNzAzLC0y My41ODc0NDA0OTA3MjI2NTYgNTkuNTQ1MDcwNjQ4MTkzMzYsLTIzLjU4NzQ0MDQ5MDcyMjY1NiBj MjIuMzA2OTEzMzc1ODU0NDkyLDAgNDIuOTA0ODM0NzQ3MzE0NDUsNy45NDg4ODE2MjYxMjkxNSA1 OS40NTUxMjM5MDEzNjcxOSwyMy4wNjkwMzY0ODM3NjQ2NSBjMC4xNzk4OTQ0NzcxMjg5ODI1NCww LjE3MjgwMTc2MjgxOTI5MDE2IDAuMzU5Nzg4OTU0MjU3OTY1MSwwLjM0NTYwMzUyNTYzODU4MDMg MC41Mzk2ODM1MjA3OTM5MTQ4LDAuNTE4NDA1Mzc3ODY0ODM3NiBsMzMuNzMwMjE2OTc5OTgwNDcs MzIuNDAwMzMzNDA0NTQxMDE2IGMwLjE3OTg5NDQ3NzEyODk4MjU0LDAuMTcyODAxNzYyODE5Mjkw MTYgMC4zNTk3ODg5NTQyNTc5NjUxLDAuMzQ1NjAzNTI1NjM4NTgwMyAwLjUzOTY4MzUyMDc5Mzkx NDgsMC41MTg0MDUzNzc4NjQ4Mzc2IGMxNS43NDA3Njc0Nzg5NDI4NzEsMTUuOTg0MTYzMjg0MzAx NzU4IDI0LjAxNTkxMTEwMjI5NDkyMiwzNS42ODM1NjcwNDcxMTkxNCAyNC4wMTU5MTExMDIyOTQ5 MjIsNTcuMTEwOTgwOTg3NTQ4ODMgYzAsMjIuMDMyMjI4NDY5ODQ4NjMzIC04LjQ1NTAzOTk3ODAy NzM0NCw0MS44MTgwMzEzMTEwMzUxNTYgLTI0LjU1NTU5NTM5Nzk0OTIyLDU3LjE5NzM5MTUxMDAw OTc2NiBsLTI5Mi43NzgyMjg3NTk3NjU2LDI4MS42NjY5MzExNTIzNDM3NSBjLTAuMTc5ODk0NDc3 MTI4OTgyNTQsMC4xNzI4MDE3NjI4MTkyOTAxNiAtMC4zNTk3ODg5NTQyNTc5NjUxLDAuMzQ1NjAz NTI1NjM4NTgwMyAtMC41Mzk2ODM1MjA3OTM5MTQ4LDAuNTE4NDA1Mzc3ODY0ODM3NiBDOTQ0LjA5 MDg0NjUzODU0MzcsMTI5NS42NzU3ODEyNSA5MjMuNDkzMDY4MjE4MjMxMiwxMzAzLjcxMDkzNzUg OTAxLjE4NTkzOTMxMTk4MTIsMTMwMy43MTA5Mzc1IHoiIGlkPSJzdmdfMyIvPgorCTxwYXRoIGNs YXNzPSJzdDAiIGQ9Ik05MjkuOTY5MjAzNDcyMTM3NSw2MzcuMDM5ODU1OTU3MDMxMiBjMTUuNTYw ODcyMDc3OTQxODk1LDAgMjkuMDUyOTU5NDQyMTM4NjcyLDUuNDQzMjU1OTAxMzM2NjcgNDAuNDc2 MjU3MzI0MjE4NzUsMTYuNDE2MTY4MjEyODkwNjI1IHMxNy4wODk5NzUzNTcwNTU2NjQsMjMuOTMz MDQ4MjQ4MjkxMDE2IDE3LjA4OTk3NTM1NzA1NTY2NCwzOC44ODA0MDE2MTEzMjgxMjUgdjMwNC4x MzExMzQwMzMyMDMxIGwxMzIuMjIyNDI3MzY4MTY0MDYsLTEyNy4wMDkzMDAyMzE5MzM2IGMxMS4w NjM1MTE4NDg0NDk3MDcsLTEwLjYyNzMxMDc1Mjg2ODY1MiAyNC41NTU1OTUzOTc5NDkyMiwtMTUu OTg0MTYzMjg0MzAxNzU4IDQwLjQ3NjI1NzMyNDIxODc1LC0xNS45ODQxNjMyODQzMDE3NTggYzE1 LjU2MDg3MjA3Nzk0MTg5NSwwIDI5LjIzMjg1NDg0MzEzOTY1LDUuMzU2ODU1MzkyNDU2MDU1IDQw LjkyNTk5ODY4Nzc0NDE0LDE1Ljk4NDE2MzI4NDMwMTc1OCBsMzMuNzMwMjE2OTc5OTgwNDcsMzIu NDAwMzMzNDA0NTQxMDE2IGMxMS4wNjM1MTE4NDg0NDk3MDcsMTEuMjMyMTEzODM4MTk1OCAxNi42 NDAyMzk3MTU1NzYxNzIsMjQuMzY1MDUxMjY5NTMxMjUgMTYuNjQwMjM5NzE1NTc2MTcyLDM5LjMx MjQwNDYzMjU2ODM2IGMwLDE1LjI5Mjk1OTIxMzI1NjgzNiAtNS41NzY3MjgzNDM5NjM2MjMsMjgu MjUzMDg5OTA0Nzg1MTU2IC0xNi42NDAyMzk3MTU1NzYxNzIsMzguODgwNDAxNjExMzI4MTI1IGwt MjkyLjc3ODIyODc1OTc2NTYsMjgxLjY2NjkzMTE1MjM0Mzc1IGMtMTEuNjkzMTM5MDc2MjMyOTEs MTAuNjI3MzEwNzUyODY4NjUyIC0yNS4zNjUxMjE4NDE0MzA2NjQsMTUuOTg0MTYzMjg0MzAxNzU4 IC00MC45MjU5OTg2ODc3NDQxNCwxNS45ODQxNjMyODQzMDE3NTggYy0xNS45MjA2NjE5MjYyNjk1 MzEsMCAtMjkuNDEyNzUwMjQ0MTQwNjI1LC01LjM1Njg1NTM5MjQ1NjA1NSAtNDAuNDc2MjU3MzI0 MjE4NzUsLTE1Ljk4NDE2MzI4NDMwMTc1OCBsLTI5Mi43NzgyMjg3NTk3NjU2LC0yODEuNjY2OTMx MTUyMzQzNzUgYy0xMS40MjMzMDA3NDMxMDMwMjcsLTEwLjM2ODEwNTg4ODM2NjcgLTE3LjA4OTk3 NTM1NzA1NTY2NCwtMjMuMzI4MjM5NDQwOTE3OTcgLTE3LjA4OTk3NTM1NzA1NTY2NCwtMzguODgw NDAxNjExMzI4MTI1IGMwLC0xNS4yOTI5NTkyMTMyNTY4MzYgNS42NjY2NzYwNDQ0NjQxMTEsLTI4 LjMzOTQ4ODk4MzE1NDI5NyAxNy4wODk5NzUzNTcwNTU2NjQsLTM5LjMxMjQwNDYzMjU2ODM2IGwz My4yODA0Nzk0MzExNTIzNDQsLTMyLjQwMDMzMzQwNDU0MTAxNiBjMTEuNjkzMTM5MDc2MjMyOTEs LTEwLjYyNzMxMDc1Mjg2ODY1MiAyNS4zNjUxMjE4NDE0MzA2NjQsLTE1Ljk4NDE2MzI4NDMwMTc1 OCA0MC45MjU5OTg2ODc3NDQxNCwtMTUuOTg0MTYzMjg0MzAxNzU4IGMxNS45MjA2NjE5MjYyNjk1 MzEsMCAyOS40MTI3NTAyNDQxNDA2MjUsNS4zNTY4NTUzOTI0NTYwNTUgNDAuNDc2MjU3MzI0MjE4 NzUsMTUuOTg0MTYzMjg0MzAxNzU4IGwxMzIuMjIyNDI3MzY4MTY0MDYsMTI3LjAwOTMwMDIzMTkz MzYgdi0zMDQuMTMxMTM0MDMzMjAzMSBjMCwtMTQuOTQ3MzUzMzYzMDM3MTEgNS42NjY2NzYwNDQ0 NjQxMTEsLTI3LjkwNzQ4NTk2MTkxNDA2MiAxNy4wODk5NzUzNTcwNTU2NjQsLTM4Ljg4MDQwMTYx MTMyODEyNSBzMjQuOTE1Mzg4MTA3Mjk5ODA1LC0xNi40MTYxNjgyMTI4OTA2MjUgNDAuNDc2MjU3 MzI0MjE4NzUsLTE2LjQxNjE2ODIxMjg5MDYyNSBIOTI5Ljk2OTIwMzQ3MjEzNzUgTTkyOS45Njky MDM0NzIxMzc1LDU4NS4xOTkyNzk3ODUxNTYyIGgtNTcuNTY2MjMwNzczOTI1NzggYy0yOS45NTI0 MzI2MzI0NDYyOSwwIC01Ny4xMTY1MDA4NTQ0OTIxOSwxMC44ODY1MTE4MDI2NzMzNCAtNzguNjEz ODkxNjAxNTYyNSwzMS42MjI3MjI2MjU3MzI0MjIgQzc3Mi4yMDE2ODYzODIyOTM3LDYzNy41NTgx NjY1MDM5MDYyIDc2MC44NjgzNzMzOTQwMTI1LDY2My42NTEyNDUxMTcxODc1IDc2MC44NjgzNzMz OTQwMTI1LDY5Mi4zMzYzNjQ3NDYwOTM4IHYxNzguOTM2MjMzNTIwNTA3OCBsLTQwLjExNjQ3MDMz NjkxNDA2LC0zOC41MzQ3OTM4NTM3NTk3NjYgYy0yMS4yMjc1NTA1MDY1OTE3OTcsLTIwLjM5MDYw OTc0MTIxMDkzOCAtNDguMzkxNjE2ODIxMjg5MDYsLTMxLjE5MDcxOTYwNDQ5MjE4OCAtNzguNjEz ODkxNjAxNTYyNSwtMzEuMTkwNzE5NjA0NDkyMTg4IGMtMjkuMzIyODAxNTg5OTY1ODIsMCAtNTYu MzA2OTY4Njg4OTY0ODQ0LDEwLjQ1NDUwNzgyNzc1ODc4OSAtNzcuOTg0MjYwNTU5MDgyMDMsMzAu MTUzOTEzNDk3OTI0ODA1IGMtMC40NDk3MzYxNzc5MjEyOTUxNywwLjQzMjAwNDQ1MTc1MTcwOSAt MC44OTk0NzIzNTU4NDI1OTAzLDAuODY0MDA4OTAzNTAzNDE4IC0xLjM0OTIwODU5MzM2ODUzMDMs MS4yMDk2MTI0ODg3NDY2NDMgbC0zMy4xOTA1MzI2ODQzMjYxNywzMi4zMTM5MzQzMjYxNzE4NzUg Yy0yMS40MDc0NDU5MDc1OTI3NzMsMjAuNjQ5ODEyNjk4MzY0MjU4IC0zMi43NDA3OTg5NTAxOTUz MSw0Ni44MjkyNzcwMzg1NzQyMiAtMzIuNzQwNzk4OTUwMTk1MzEsNzUuODU5OTc3NzIyMTY3OTcg YzAsMjkuNjM1NTA1Njc2MjY5NTMgMTEuNTEzMjQ2NTM2MjU0ODgzLDU1LjgxNDk3MTkyMzgyODEy NSAzMy4zNzA0MjYxNzc5Nzg1MTYsNzUuOTQ2MzgwNjE1MjM0MzggbDI5Mi4zMjg1MjE3Mjg1MTU2 LDI4MS4yMzQ4NjMyODEyNSBjMjEuMjI3NTUwNTA2NTkxNzk3LDIwLjM5MDYwOTc0MTIxMDkzOCA0 OC40ODE1NjczODI4MTI1LDMxLjE5MDcxOTYwNDQ5MjE4OCA3OC43MDM4MzQ1MzM2OTE0LDMxLjE5 MDcxOTYwNDQ5MjE4OCBjMjkuMzIyODAxNTg5OTY1ODIsMCA1Ni4zMDY5Njg2ODg5NjQ4NDQsLTEw LjQ1NDUwNzgyNzc1ODc4OSA3Ny45ODQyNjA1NTkwODIwMywtMzAuMTUzOTEzNDk3OTI0ODA1IGMw LjM1OTc4ODk1NDI1Nzk2NTEsLTAuMzQ1NjAzNTI1NjM4NTgwMyAwLjcxOTU3NzkwODUxNTkzMDIs LTAuNjkxMjA3MDUxMjc3MTYwNiAxLjA3OTM2NzA0MTU4NzgyOTYsLTEuMDM2ODEwNzU1NzI5Njc1 MyBsMjkyLjc3ODIyODc1OTc2NTYsLTI4MS42NjY5MzExNTIzNDM3NSBjMjEuMjI3NTUwNTA2NTkx Nzk3LC0yMC4zOTA2MDk3NDEyMTA5MzggMzIuMzgxMDAwNTE4Nzk4ODMsLTQ2LjQ4MzY3MzA5NTcw MzEyNSAzMi4zODEwMDA1MTg3OTg4MywtNzUuNTE0MzgxNDA4NjkxNCBjMCwtMjguMTY2Njg4OTE5 MDY3MzgzIC0xMC44ODM2MTU0OTM3NzQ0MTQsLTU0LjA4Njk1NjAyNDE2OTkyIC0zMS4zOTE1ODgy MTEwNTk1NywtNzQuOTA5NTY4Nzg2NjIxMSBjLTAuMzU5Nzg4OTU0MjU3OTY1MSwtMC4zNDU2MDM1 MjU2Mzg1ODAzIC0wLjcxOTU3NzkwODUxNTkzMDIsLTAuNjkxMjA3MDUxMjc3MTYwNiAtMS4wNzkz NjcwNDE1ODc4Mjk2LC0xLjAzNjgxMDc1NTcyOTY3NTMgbC0zMy43MzAyMTY5Nzk5ODA0NywtMzIu NDAwMzMzNDA0NTQxMDE2IGMtMC4zNTk3ODg5NTQyNTc5NjUxLC0wLjM0NTYwMzUyNTYzODU4MDMg LTAuNzE5NTc3OTA4NTE1OTMwMiwtMC42OTEyMDcwNTEyNzcxNjA2IC0xLjA3OTM2NzA0MTU4Nzgy OTYsLTEuMDM2ODEwNzU1NzI5Njc1MyBjLTIxLjY3NzI4NjE0ODA3MTI5LC0xOS42OTk0MDE4NTU0 Njg3NSAtNDguNjYxNDU3MDYxNzY3NTgsLTMwLjE1MzkxMzQ5NzkyNDgwNSAtNzcuOTg0MjYwNTU5 MDgyMDMsLTMwLjE1MzkxMzQ5NzkyNDgwNSBjLTMwLjIyMjI3Mjg3MjkyNDgwNSwwIC01Ny4zODYz NDQ5MDk2Njc5NywxMC44MDAxMTE3NzA2Mjk4ODMgLTc4LjYxMzg5MTYwMTU2MjUsMzEuMTkwNzE5 NjA0NDkyMTg4IGwtNDAuMTE2NDcwMzM2OTE0MDYsMzguNTM0NzkzODUzNzU5NzY2IFY2OTIuMzM2 MzY0NzQ2MDkzOCBjMCwtMjguNzcxNDk1ODE5MDkxNzk3IC0xMS4zMzMzNTIwODg5MjgyMjMsLTU0 Ljg2NDU2Mjk4ODI4MTI1IC0zMi45MjA2ODg2MjkxNTAzOSwtNzUuNTE0MzgxNDA4NjkxNCBDOTg3 LjA4NTY1ODU1MDI2MjUsNTk2LjE3MjE4MDE3NTc4MTIgOTU5LjkyMTY1NzA4NTQxODcsNTg1LjE5 OTI3OTc4NTE1NjIgOTI5Ljk2OTIwMzQ3MjEzNzUsNTg1LjE5OTI3OTc4NTE1NjIgTDkyOS45Njky MDM0NzIxMzc1LDU4NS4xOTkyNzk3ODUxNTYyIHoiIGlkPSJzdmdfNCIvPgorPC9nPjwvZz48L3N2 Zz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90 b29scy9zcWxlZGl0b3Ivc3RhdGljL2pzL3NxbGVkaXRvci5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xz L3NxbGVkaXRvci9zdGF0aWMvanMvc3FsZWRpdG9yLmpzCmluZGV4IGUyZDY5Zjc4Li4wM2UzOTg4 OSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9qcy9zcWxl ZGl0b3IuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9qcy9zcWxl ZGl0b3IuanMKQEAgLTg1LDggKzg1LDggQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAg ICAgLy8gQmluZCBhbGwgdGhlIGV2ZW50cwogICAgIGV2ZW50czogewogICAgICAgJ2NsaWNrIC5i dG4tbG9hZC1maWxlJzogJ29uX2ZpbGVfbG9hZCcsCi0gICAgICAnY2xpY2sgI2J0bi1zYXZlJzog J29uX3NhdmUnLAotICAgICAgJ2NsaWNrICNidG4tZmlsZS1tZW51LXNhdmUnOiAnb25fc2F2ZScs CisgICAgICAnY2xpY2sgI2J0bi1zYXZlLWZpbGUnOiAnb25fc2F2ZV9maWxlJywKKyAgICAgICdj bGljayAjYnRuLWZpbGUtbWVudS1zYXZlJzogJ29uX3NhdmVfZmlsZScsCiAgICAgICAnY2xpY2sg I2J0bi1maWxlLW1lbnUtc2F2ZS1hcyc6ICdvbl9zYXZlX2FzJywKICAgICAgICdjbGljayAjYnRu LWZpbmQnOiAnb25fZmluZCcsCiAgICAgICAnY2xpY2sgI2J0bi1maW5kLW1lbnUtZmluZCc6ICdv bl9maW5kJywKQEAgLTk3LDYgKzk3LDcgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAg ICAgICAnY2xpY2sgI2J0bi1maW5kLW1lbnUtZmluZC1wZXJzaXN0ZW50JzogJ29uX2ZpbmRfcGVy c2lzdGVudCcsCiAgICAgICAnY2xpY2sgI2J0bi1maW5kLW1lbnUtanVtcCc6ICdvbl9qdW1wJywK ICAgICAgICdjbGljayAjYnRuLWRlbGV0ZS1yb3cnOiAnb25fZGVsZXRlJywKKyAgICAgICdjbGlj ayAjYnRuLXNhdmUtZGF0YSc6ICdvbl9zYXZlX2RhdGEnLAogICAgICAgJ2NsaWNrICNidG4tZmls dGVyJzogJ29uX3Nob3dfZmlsdGVyJywKICAgICAgICdjbGljayAjYnRuLWZpbHRlci1tZW51Jzog J29uX3Nob3dfZmlsdGVyJywKICAgICAgICdjbGljayAjYnRuLWluY2x1ZGUtZmlsdGVyJzogJ29u X2luY2x1ZGVfZmlsdGVyJywKQEAgLTM1MSwyNiArMzUyLDcgQEAgZGVmaW5lKCd0b29scy5xdWVy eXRvb2wnLCBbCiAgICAgICAgIF8uZWFjaCh3aW5kb3cudG9wLnBnQWRtaW4uQnJvd3Nlci5kb2Nr ZXIuZmluZFBhbmVscygnZnJtX2RhdGFncmlkJyksIGZ1bmN0aW9uKHApIHsKICAgICAgICAgICBp ZiAocC5pc1Zpc2libGUoKSkgewogICAgICAgICAgICAgcC5vbih3Y0RvY2tlci5FVkVOVC5DTE9T SU5HLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgLy8gT25seSBpZiB3ZSBjYW4gZWRpdCBk YXRhIHRoZW4gcGVyZm9ybSB0aGlzIGNoZWNrCi0gICAgICAgICAgICAgIHZhciBub3RpZnkgPSBm YWxzZSwKLSAgICAgICAgICAgICAgICBtc2c7Ci0gICAgICAgICAgICAgIGlmIChzZWxmLmhhbmRs ZXIuY2FuX2VkaXQKLSAgICAgICAgICAgICAgICAgICYmIHNlbGYucHJlZmVyZW5jZXMucHJvbXB0 X3NhdmVfZGF0YV9jaGFuZ2VzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGFfc3RvcmUgPSBz ZWxmLmhhbmRsZXIuZGF0YV9zdG9yZTsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YV9zdG9yZSAm JiAoXy5zaXplKGRhdGFfc3RvcmUuYWRkZWQpIHx8Ci0gICAgICAgICAgICAgICAgICAgIF8uc2l6 ZShkYXRhX3N0b3JlLnVwZGF0ZWQpKSkgewotICAgICAgICAgICAgICAgICAgbXNnID0gZ2V0dGV4 dCgnVGhlIGRhdGEgaGFzIGNoYW5nZWQuIERvIHlvdSB3YW50IHRvIHNhdmUgY2hhbmdlcz8nKTsK LSAgICAgICAgICAgICAgICAgIG5vdGlmeSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuaGFuZGxlci5pc19xdWVyeV90b29sICYmIHNlbGYu aGFuZGxlci5pc19xdWVyeV9jaGFuZ2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2Vs Zi5wcmVmZXJlbmNlcy5wcm9tcHRfc2F2ZV9xdWVyeV9jaGFuZ2VzKSB7Ci0gICAgICAgICAgICAg ICAgbXNnID0gZ2V0dGV4dCgnVGhlIHRleHQgaGFzIGNoYW5nZWQuIERvIHlvdSB3YW50IHRvIHNh dmUgY2hhbmdlcz8nKTsKLSAgICAgICAgICAgICAgICBub3RpZnkgPSB0cnVlOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIGlmIChub3RpZnkpIHsKLSAgICAgICAgICAgICAgICByZXR1 cm4gc2VsZi51c2VyX2NvbmZpcm1hdGlvbihwLCBtc2cpOwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVy LmNoZWNrX25lZWRlZF9jb25maXJtYXRpb25zX2JlZm9yZV9jbG9zaW5nX3BhbmVsKHRydWUpOwog ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIC8vIFNldCBmb2N1cyBvbiBxdWVyeSB0b29s IG9mIGFjdGl2ZSBwYW5lbApAQCAtNjE1LDYyICs1OTcsNiBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5 dG9vbCcsIFsKICAgICAgIH0KICAgICB9LAogCi0gICAgLyogVG8gcHJvbXB0IHVzZXIgZm9yIHVu c2F2ZWQgY2hhbmdlcyAqLwotICAgIHVzZXJfY29uZmlybWF0aW9uOiBmdW5jdGlvbihwYW5lbCwg bXNnKSB7Ci0gICAgICAvLyBJZiB0aGVyZSBpcyBhbnl0aGluZyB0byBzYXZlIHRoZW4gcHJvbXB0 IHVzZXIKLSAgICAgIHZhciB0aGF0ID0gdGhpczsKLQotICAgICAgYWxlcnRpZnkuY29uZmlybVNh dmUgfHwgYWxlcnRpZnkuZGlhbG9nKCdjb25maXJtU2F2ZScsIGZ1bmN0aW9uKCkgewotICAgICAg ICByZXR1cm4gewotICAgICAgICAgIG1haW46IGZ1bmN0aW9uKHRpdGxlLCBtZXNzYWdlKSB7Ci0g ICAgICAgICAgICB0aGlzLnNldEhlYWRlcih0aXRsZSk7Ci0gICAgICAgICAgICB0aGlzLnNldENv bnRlbnQobWVzc2FnZSk7Ci0gICAgICAgICAgfSwKLSAgICAgICAgICBzZXR1cDogZnVuY3Rpb24o KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICBidXR0b25zOiBbewotICAg ICAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0NhbmNlbCcpLAotICAgICAgICAgICAgICAgIGtl eTogMjcsIC8vIEVTQwotICAgICAgICAgICAgICAgIGludm9rZU9uQ2xvc2U6IHRydWUsCi0gICAg ICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zZWNvbmRhcnkgZmEgZmEtbGcgZmEtdGlt ZXMgcGctYWxlcnRpZnktYnV0dG9uJywKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAg ICAgIHRleHQ6IGdldHRleHQoJ0RvblwndCBzYXZlJyksCi0gICAgICAgICAgICAgICAgY2xhc3NO YW1lOiAnYnRuIGJ0bi1zZWNvbmRhcnkgZmEgZmEtbGcgZmEtdHJhc2gtbyBwZy1hbGVydGlmeS1i dXR0b24nLAotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdGV4dDogZ2V0dGV4 dCgnU2F2ZScpLAotICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tcHJpbWFyeSBm YSBmYS1sZyBmYS1zYXZlIHBnLWFsZXJ0aWZ5LWJ1dHRvbicsCi0gICAgICAgICAgICAgIH1dLAot ICAgICAgICAgICAgICBmb2N1czogewotICAgICAgICAgICAgICAgIGVsZW1lbnQ6IDAsCi0gICAg ICAgICAgICAgICAgc2VsZWN0OiBmYWxzZSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg ICAgb3B0aW9uczogewotICAgICAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSwKLSAgICAg ICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLAotICAgICAgICAgICAgICB9LAotICAgICAgICAg ICAgfTsKLSAgICAgICAgICB9LAotICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbihjbG9zZUV2 ZW50KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNsb3NlRXZlbnQuaW5kZXgpIHsKLSAgICAgICAg ICAgIGNhc2UgMDogLy8gQ2FuY2VsCi0gICAgICAgICAgICAgIC8vRG8gbm90aGluZy4KLSAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6IC8vIERvbid0IFNhdmUKLSAgICAg ICAgICAgICAgdGhhdC5oYW5kbGVyLmNsb3NlX29uX3NhdmUgPSBmYWxzZTsKLSAgICAgICAgICAg ICAgdGhhdC5oYW5kbGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSAyOiAvL1NhdmUKLSAgICAgICAgICAgICAgdGhhdC5oYW5kbGVyLmNsb3NlX29uX3Nh dmUgPSB0cnVlOwotICAgICAgICAgICAgICB0aGF0LmhhbmRsZXIuX3NhdmUodGhhdCwgdGhhdC5o YW5kbGVyKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg fSwKLSAgICAgICAgfTsKLSAgICAgIH0pOwotICAgICAgYWxlcnRpZnkuY29uZmlybVNhdmUoZ2V0 dGV4dCgnU2F2ZSBjaGFuZ2VzPycpLCBtc2cpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0s Ci0KICAgICAvKiBSZWdhcmRpbmcgU2xpY2tHcmlkIHVzYWdlIGluIHJlbmRlcl9ncmlkIGZ1bmN0 aW9uLgogCiAgICAgIFNsaWNrR3JpZCBQbHVnaW5zOgpAQCAtNzM0LDYgKzY2MCw4IEBAIGRlZmlu ZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgIHJlbmRlcl9ncmlkOiBmdW5jdGlvbihjb2xsZWN0 aW9uLCBjb2x1bW5zLCBpc19lZGl0YWJsZSwgY2xpZW50X3ByaW1hcnlfa2V5LCByb3dzX2FmZmVj dGVkKSB7CiAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAKKyAgICAgIHNlbGYuaGFuZGxlci5udW1i ZXJPZk1vZGlmaWVkQ2VsbHMgPSAwOworCiAgICAgICAvLyBUaGlzIHdpbGwgd29yayBhcyBkYXRh IHN0b3JlIGFuZCBob2xkcyBhbGwgdGhlCiAgICAgICAvLyBpbnNlcnRlZC91cGRhdGVkL2RlbGV0 ZWQgZGF0YSBmcm9tIGdyaWQKICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlID0gewpAQCAt MTA2Nyw2ICs5OTUsMTQgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAgICAg X3BrID0gYXJncy5pdGVtW3NlbGYuY2xpZW50X3ByaW1hcnlfa2V5XSB8fCBudWxsLCAvLyBVbmlx dWUga2V5IHRvIGlkZW50aWZ5IHJvdwogICAgICAgICAgIGNvbHVtbl9kYXRhID0ge307CiAKKyAg ICAgICAgLy8gSGlnaGxpZ2h0IHRoZSBjaGFuZ2VkIGNlbGwKKyAgICAgICAgc2VsZi5oYW5kbGVy Lm51bWJlck9mTW9kaWZpZWRDZWxscysrOworICAgICAgICBhcmdzLmdyaWQuYWRkQ2VsbENzc1N0 eWxlcyhzZWxmLmhhbmRsZXIubnVtYmVyT2ZNb2RpZmllZENlbGxzLCB7CisgICAgICAgICAgW2Fy Z3Mucm93XSA6IHsKKyAgICAgICAgICAgIFtjaGFuZ2VkX2NvbHVtbl06ICdoaWdobGlnaHRlZF9n cmlkX2NlbGxzJywKKyAgICAgICAgICB9LAorICAgICAgICB9KTsKKwogICAgICAgICAvLyBBY2Nl c3MgdG8gcm93L2NlbGwgdmFsdWUgYWZ0ZXIgYSBjZWxsIGlzIGNoYW5nZWQuCiAgICAgICAgIC8v IFRoZSBwdXJwb3NlIGlzIHRvIHJlbW92ZSByb3dfaWQgZnJvbSB0ZW1wX25ld19yb3cKICAgICAg ICAgLy8gaWYgbmV3IHJvdyBoYXMgcHJpbWFyeSBrZXkgaW5zdGVhZCBvZiBbZGVmYXVsdF92YWx1 ZV0KQEAgLTExMjIsNyArMTA1OCw3IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAg ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvLyBFbmFibGUgc2F2ZSBidXR0b24KLSAgICAg ICAgJCgnI2J0bi1zYXZlJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICQoJyNi dG4tc2F2ZS1kYXRhJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAgICAgICB9LmJpbmQoZWRp dG9yX2RhdGEpKTsKIAogICAgICAgLy8gTGlzdGVuZXIgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBj YWxsZWQgd2hlbiB1c2VyIGFkZHMgbmV3IHJvd3MKQEAgLTExNTAsNiArMTA4Niw3IEBAIGRlZmlu ZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAgICdkYXRhJzogaXRlbSwKICAgICAgICAg fTsKICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUuYWRkZWRfaW5kZXhbZGF0YV9sZW5n dGhdID0gX2tleTsKKwogICAgICAgICAvLyBGZXRjaCBkYXRhIHR5cGUgJiBhZGQgaXQgZm9yIHRo ZSBjb2x1bW4KICAgICAgICAgdmFyIHRlbXAgPSB7fTsKICAgICAgICAgdGVtcFtjb2x1bW4ubmFt ZV0gPSBfLndoZXJlKHRoaXMuY29sdW1ucywgewpAQCAtMTE1OCw4ICsxMDk1LDE3IEBAIGRlZmlu ZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICBncmlkLnVwZGF0ZVJvd0NvdW50KCk7CiAg ICAgICAgIGdyaWQucmVuZGVyKCk7CiAKKyAgICAgICAgLy8gSGlnaGxpZ2h0IHRoZSBmaXJzdCBh ZGRlZCBjZWxsIG9mIHRoZSBuZXcgcm93CisgICAgICAgIHZhciByb3cgPSBkYXRhVmlldy5nZXRS b3dCeUl0ZW0oaXRlbSk7CisgICAgICAgIHNlbGYuaGFuZGxlci5udW1iZXJPZk1vZGlmaWVkQ2Vs bHMrKzsKKyAgICAgICAgYXJncy5ncmlkLmFkZENlbGxDc3NTdHlsZXMoc2VsZi5oYW5kbGVyLm51 bWJlck9mTW9kaWZpZWRDZWxscywgeworICAgICAgICAgIFtyb3ddIDogeworICAgICAgICAgICAg W2NvbHVtbi5maWVsZF06ICdoaWdobGlnaHRlZF9ncmlkX2NlbGxzJywKKyAgICAgICAgICB9LAor ICAgICAgICB9KTsKKwogICAgICAgICAvLyBFbmFibGUgc2F2ZSBidXR0b24KLSAgICAgICAgJCgn I2J0bi1zYXZlJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICQoJyNidG4tc2F2 ZS1kYXRhJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAgICAgICB9LmJpbmQoZWRpdG9yX2Rh dGEpKTsKIAogICAgICAgLy8gTGlzdGVuIGdyaWQgdmlld3BvcnRDaGFuZ2VkIGV2ZW50IHRvIGxv YWQgbmV4dCBjaHVuayBvZiBkYXRhLgpAQCAtMTIwOCw5ICsxMTU0LDExIEBAIGRlZmluZSgndG9v bHMucXVlcnl0b29sJywgWwogICAgICAgfQogICAgICAgZGF0YVZpZXcuc2V0SXRlbXMoY29sbGVj dGlvbiwgc2VsZi5jbGllbnRfcHJpbWFyeV9rZXkpOwogICAgIH0sCisKICAgICBmZXRjaF9uZXh0 X2FsbDogZnVuY3Rpb24oY2IpIHsKICAgICAgIHRoaXMuZmV0Y2hfbmV4dCh0cnVlLCBjYik7CiAg ICAgfSwKKwogICAgIGZldGNoX25leHQ6IGZ1bmN0aW9uKGZldGNoX2FsbCwgY2IpIHsKICAgICAg IHZhciBzZWxmID0gdGhpcywKICAgICAgICAgdXJsID0gJyc7CkBAIC0xMzk0LDYgKzEzNDIsMTgg QEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICApOwogICAgIH0sCiAKKyAgICAv LyBDYWxsYmFjayBmdW5jdGlvbiBmb3IgU2F2ZSBEYXRhIENoYW5nZXMgYnV0dG9uIGNsaWNrLgor ICAgIG9uX3NhdmVfZGF0YTogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisK KyAgICAgIHNlbGYuaGFuZGxlci5jbG9zZV9vbl9zYXZlID0gZmFsc2U7CisgICAgICAvLyBUcmln Z2VyIHRoZSBzYXZlX2RhdGEgc2lnbmFsIHRvIHRoZSBTcWxFZGl0b3JDb250cm9sbGVyIGNsYXNz CisgICAgICBzZWxmLmhhbmRsZXIudHJpZ2dlcigKKyAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9y OmJ1dHRvbjpzYXZlX2RhdGEnLAorICAgICAgICBzZWxmCisgICAgICApOworICAgIH0sCisKICAg ICBfc3RvcEV2ZW50UHJvcG9nYXRpb246IGZ1bmN0aW9uKGV2KSB7CiAgICAgICBldiA9IGV2IHx8 IHdpbmRvdy5ldmVudDsKICAgICAgIGV2LmNhbmNlbEJ1YmJsZSA9IHRydWU7CkBAIC0xNDEwLDcg KzEzNzAsNyBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICB9LAogCiAgICAgLy8g Q2FsbGJhY2sgZnVuY3Rpb24gZm9yIFNhdmUgYnV0dG9uIGNsaWNrLgotICAgIG9uX3NhdmU6IGZ1 bmN0aW9uKGV2KSB7CisgICAgb25fc2F2ZV9maWxlOiBmdW5jdGlvbihldikgewogICAgICAgdmFy IHNlbGYgPSB0aGlzOwogCiAgICAgICB0aGlzLl9zdG9wRXZlbnRQcm9wb2dhdGlvbihldik7CkBA IC0xNDE5LDkgKzEzNzksNyBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgIHNl bGYuaGFuZGxlci5jbG9zZV9vbl9zYXZlID0gZmFsc2U7CiAgICAgICAvLyBUcmlnZ2VyIHRoZSBz YXZlIHNpZ25hbCB0byB0aGUgU3FsRWRpdG9yQ29udHJvbGxlciBjbGFzcwogICAgICAgc2VsZi5o YW5kbGVyLnRyaWdnZXIoCi0gICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246c2F2ZScs Ci0gICAgICAgIHNlbGYsCi0gICAgICAgIHNlbGYuaGFuZGxlcgorICAgICAgICAncGdhZG1pbi1z cWxlZGl0b3I6YnV0dG9uOnNhdmVfZmlsZScKICAgICAgICk7CiAgICAgfSwKIApAQCAtMTQzNSw3 ICsxMzkzLDcgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICBzZWxmLmhhbmRs ZXIuY2xvc2Vfb25fc2F2ZSA9IGZhbHNlOwogICAgICAgLy8gVHJpZ2dlciB0aGUgc2F2ZSBzaWdu YWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKICAgICAgIHNlbGYuaGFuZGxlci50 cmlnZ2VyKAotICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOnNhdmUnLAorICAgICAg ICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOnNhdmVfZmlsZScsCiAgICAgICAgIHNlbGYsCiAg ICAgICAgIHNlbGYuaGFuZGxlciwKICAgICAgICAgdHJ1ZQpAQCAtMjE5NCw4ICsyMTUyLDkgQEAg ZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAKICAgICAgICAgLy8gTGlzdGVuIG9uIGV2ZW50 cyBjb21lIGZyb20gU1FMRWRpdG9yVmlldyBmb3IgdGhlIGJ1dHRvbiBjbGlja2VkLgogICAgICAg ICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246bG9hZF9maWxlJywgc2VsZi5fbG9h ZF9maWxlLCBzZWxmKTsKLSAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9u OnNhdmUnLCBzZWxmLl9zYXZlLCBzZWxmKTsKKyAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxl ZGl0b3I6YnV0dG9uOnNhdmVfZmlsZScsIHNlbGYuX3NhdmVfZmlsZSwgc2VsZik7CiAgICAgICAg IHNlbGYub24oJ3BnYWRtaW4tc3FsZWRpdG9yOmJ1dHRvbjpkZWxldGVyb3cnLCBzZWxmLl9kZWxl dGUsIHNlbGYpOworICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246c2F2 ZV9kYXRhJywgc2VsZi5fc2F2ZV9kYXRhLCBzZWxmKTsKICAgICAgICAgc2VsZi5vbigncGdhZG1p bi1zcWxlZGl0b3I6YnV0dG9uOnNob3dfZmlsdGVyJywgc2VsZi5fc2hvd19maWx0ZXIsIHNlbGYp OwogICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246aW5jbHVkZV9maWx0 ZXInLCBzZWxmLl9pbmNsdWRlX2ZpbHRlciwgc2VsZik7CiAgICAgICAgIHNlbGYub24oJ3BnYWRt aW4tc3FsZWRpdG9yOmJ1dHRvbjpleGNsdWRlX2ZpbHRlcicsIHNlbGYuX2V4Y2x1ZGVfZmlsdGVy LCBzZWxmKTsKQEAgLTIzMDksOCArMjI2OCw3IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywg WwogICAgICAgICAgICAgICAgICQoJyNidG4tZmlsdGVyJykuYWRkQ2xhc3MoJ2J0bi1zZWNvbmRh cnknKTsKICAgICAgICAgICAgICAgICAkKCcjYnRuLWZpbHRlci1kcm9wZG93bicpLmFkZENsYXNz KCdidG4tc2Vjb25kYXJ5Jyk7CiAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgJCgnI2J0 bi1zYXZlJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKLSAgICAgICAgICAgICAgJCgnI2J0bi1m aWxlLW1lbnUtZHJvcGRvd24nKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworCiAgICAgICAgICAg ICAgICQoJyNidG4tY29weS1yb3cnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOwogICAgICAgICAg ICAgICAkKCcjYnRuLXBhc3RlLXJvdycpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAKQEAgLTIz NzYsNiArMjMzNCwxOCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgZWxz ZQogICAgICAgICAgIHNlbGYuY2FuX2VkaXQgPSB0cnVlOwogCisgICAgICAgIC8qIElmIHRoZSBx dWVyeSByZXN1bHRzIGFyZSB1cGRhdGFibGUgdGhlbiBrZWVwIHRyYWNrIG9mIG5ld2x5IGFkZGVk CisgICAgICAgICAqIHJvd3MKKyAgICAgICAgICovCisgICAgICAgIGlmIChzZWxmLmlzX3F1ZXJ5 X3Rvb2wgJiYgc2VsZi5jYW5fZWRpdCkgeworICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbmV3 bHkgYWRkZWQgcm93cworICAgICAgICAgIHNlbGYucm93c190b19kaXNhYmxlID0gbmV3IEFycmF5 KCk7CisgICAgICAgICAgLy8gVGVtcG9yYXJpbHkgaG9sZCBuZXcgcm93cyBhZGRlZAorICAgICAg ICAgIHNlbGYudGVtcF9uZXdfcm93cyA9IG5ldyBBcnJheSgpOworICAgICAgICAgIHNlbGYuaGFz X21vcmVfcm93cyA9IGZhbHNlOworICAgICAgICAgIHNlbGYuZmV0Y2hpbmdfcm93cyA9IGZhbHNl OworICAgICAgICB9CisKICAgICAgICAgLyogSWYgdXNlciBjYW4gZmlsdGVyIHRoZSBkYXRhIHRo ZW4gd2Ugc2hvdWxkIGVuYWJsZWQKICAgICAgICAgICogRmlsdGVyIGFuZCBMaW1pdCBidXR0b25z LgogICAgICAgICAgKi8KQEAgLTIzODYsMTMgKzIzNTYsMTIgQEAgZGVmaW5lKCd0b29scy5xdWVy eXRvb2wnLCBbCiAgICAgICAgICAgJCgnI2J0bi1maWx0ZXItZHJvcGRvd24nKS5wcm9wKCdkaXNh YmxlZCcsIGZhbHNlKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIE5vIGRhdGEgdG8gc2F2ZSBp bml0aWFsbHkKKyAgICAgICAgJCgnI2J0bi1zYXZlLWRhdGEnKS5wcm9wKCdkaXNhYmxlZCcsIHRy dWUpOworCiAgICAgICAgIC8vIEluaXRpYWwgc2V0dGluZ3MgZm9yIGRlbGV0ZSByb3csIGNvcHkg cm93IGFuZCBwYXN0ZSByb3cgYnV0dG9ucy4KICAgICAgICAgJCgnI2J0bi1kZWxldGUtcm93Jyku cHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKLSAgICAgICAgLy8gRG8gbm90IGRpc2FibGUgc2F2ZSBi dXR0b24gaW4gcXVlcnkgdG9vbAotICAgICAgICBpZiAoIXNlbGYuaXNfcXVlcnlfdG9vbCAmJiAh c2VsZi5jYW5fZWRpdCkgewotICAgICAgICAgICQoJyNidG4tc2F2ZScpLnByb3AoJ2Rpc2FibGVk JywgdHJ1ZSk7Ci0gICAgICAgICAgJCgnI2J0bi1maWxlLW1lbnUtZHJvcGRvd24nKS5wcm9wKCdk aXNhYmxlZCcsIHRydWUpOwotICAgICAgICB9CisKICAgICAgICAgaWYgKCFzZWxmLmNhbl9lZGl0 KSB7CiAgICAgICAgICAgJCgnI2J0bi1kZWxldGUtcm93JykucHJvcCgnZGlzYWJsZWQnLCB0cnVl KTsKICAgICAgICAgICAkKCcjYnRuLWNvcHktcm93JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsK QEAgLTI3NzYsOSArMjc0NSw5IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAg ICAgIGlmIChfLnNpemUoc2VsZi5kYXRhX3N0b3JlLmFkZGVkKSB8fCBpc191cGRhdGVkKSB7CiAg ICAgICAgICAgICAvLyBEbyBub3QgZGlzYWJsZSBzYXZlIGJ1dHRvbiBpZiB0aGVyZSBhcmUKICAg ICAgICAgICAgIC8vIGFueSBvdGhlciBjaGFuZ2VzIHByZXNlbnQgaW4gZ3JpZCBkYXRhCi0gICAg ICAgICAgICAkKCcjYnRuLXNhdmUnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICAg ICAgICQoJyNidG4tc2F2ZS1kYXRhJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICQoJyNidG4tc2F2ZScpLnByb3AoJ2Rpc2FibGVkJywg dHJ1ZSk7CisgICAgICAgICAgICAkKCcjYnRuLXNhdmUtZGF0YScpLnByb3AoJ2Rpc2FibGVkJywg dHJ1ZSk7CiAgICAgICAgICAgfQogICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MoZ2V0dGV4dCgn Um93KHMpIGRlbGV0ZWQuJykpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjgwNyw0MSArMjc3Niwz OSBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgICBpZiAoXy5zaXplKHNl bGYuZGF0YV9zdG9yZS5hZGRlZCkgfHwgaXNfdXBkYXRlZCB8fCBfLnNpemUoc2VsZi5kYXRhX3N0 b3JlLmRlbGV0ZWQpKSB7CiAgICAgICAgICAgICAvLyBEbyBub3QgZGlzYWJsZSBzYXZlIGJ1dHRv biBpZiB0aGVyZSBhcmUKICAgICAgICAgICAgIC8vIGFueSBvdGhlciBjaGFuZ2VzIHByZXNlbnQg aW4gZ3JpZCBkYXRhCi0gICAgICAgICAgICAkKCcjYnRuLXNhdmUnKS5wcm9wKCdkaXNhYmxlZCcs IGZhbHNlKTsKKyAgICAgICAgICAgICQoJyNidG4tc2F2ZS1kYXRhJykucHJvcCgnZGlzYWJsZWQn LCBmYWxzZSk7CiAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICQoJyNidG4tc2F2ZScp LnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICAgICAkKCcjYnRuLXNhdmUtZGF0YScp LnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9 LAogCisgICAgICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG9wZW4gc2F2ZSBmaWxlIGRpYWxvZyBj b25kaXRpb25hbGx5LgorCisgICAgICBfc2F2ZV9maWxlOiBmdW5jdGlvbihzYXZlX2FzPWZhbHNl KSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICB2YXIgY3VycmVudF9maWxl ID0gc2VsZi5ncmlkVmlldy5jdXJyZW50X2ZpbGU7CisgICAgICAgIGlmICghXy5pc1VuZGVmaW5l ZChjdXJyZW50X2ZpbGUpICYmICFzYXZlX2FzKSB7CisgICAgICAgICAgc2VsZi5fc2F2ZV9maWxl X2hhbmRsZXIoY3VycmVudF9maWxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBw cm92aWRlIGN1c3RvbSBvcHRpb24gdG8gc2F2ZSBmaWxlIGRpYWxvZworICAgICAgICAgIHZhciBw YXJhbXMgPSB7CisgICAgICAgICAgICAnc3VwcG9ydGVkX3R5cGVzJzogWycqJywgJ3NxbCddLAor ICAgICAgICAgICAgJ2RpYWxvZ190eXBlJzogJ2NyZWF0ZV9maWxlJywKKyAgICAgICAgICAgICdk aWFsb2dfdGl0bGUnOiAnU2F2ZSBGaWxlJywKKyAgICAgICAgICAgICdidG5fcHJpbWFyeSc6ICdT YXZlJywKKyAgICAgICAgICB9OworICAgICAgICAgIHBnQWRtaW4uRmlsZU1hbmFnZXIuaW5pdCgp OworICAgICAgICAgIHBnQWRtaW4uRmlsZU1hbmFnZXIuc2hvd19kaWFsb2cocGFyYW1zKTsKKyAg ICAgICAgfQorICAgICAgfSwKKwogICAgICAgLyogVGhpcyBmdW5jdGlvbiB3aWxsIGZldGNoIHRo ZSBsaXN0IG9mIGNoYW5nZWQgbW9kZWxzIGFuZCBtYWtlCiAgICAgICAgKiB0aGUgYWpheCBjYWxs IHRvIHNhdmUgdGhlIGRhdGEgaW50byB0aGUgZGF0YWJhc2Ugc2VydmVyLgotICAgICAgICogYW5k IHdpbGwgb3BlbiBzYXZlIGZpbGUgZGlhbG9nIGNvbmRpdGlvbmFsbHkuCiAgICAgICAgKi8KLSAg ICAgIF9zYXZlOiBmdW5jdGlvbih2aWV3LCBjb250cm9sbGVyLCBzYXZlX2FzKSB7Ci0gICAgICAg IHZhciBzZWxmID0gdGhpcywKLSAgICAgICAgICBzYXZlX2RhdGEgPSB0cnVlOwotCi0gICAgICAg IC8vIE9wZW4gc2F2ZSBmaWxlIGRpYWxvZyBpZiBxdWVyeSB0b29sCi0gICAgICAgIGlmIChzZWxm LmlzX3F1ZXJ5X3Rvb2wpIHsKLSAgICAgICAgICB2YXIgY3VycmVudF9maWxlID0gc2VsZi5ncmlk Vmlldy5jdXJyZW50X2ZpbGU7Ci0gICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGN1cnJlbnRf ZmlsZSkgJiYgIXNhdmVfYXMpIHsKLSAgICAgICAgICAgIHNlbGYuX3NhdmVfZmlsZV9oYW5kbGVy KGN1cnJlbnRfZmlsZSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHByb3Zp ZGUgY3VzdG9tIG9wdGlvbiB0byBzYXZlIGZpbGUgZGlhbG9nCi0gICAgICAgICAgICB2YXIgcGFy YW1zID0gewotICAgICAgICAgICAgICAnc3VwcG9ydGVkX3R5cGVzJzogWycqJywgJ3NxbCddLAot ICAgICAgICAgICAgICAnZGlhbG9nX3R5cGUnOiAnY3JlYXRlX2ZpbGUnLAotICAgICAgICAgICAg ICAnZGlhbG9nX3RpdGxlJzogJ1NhdmUgRmlsZScsCi0gICAgICAgICAgICAgICdidG5fcHJpbWFy eSc6ICdTYXZlJywKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBwZ0FkbWluLkZpbGVNYW5h Z2VyLmluaXQoKTsKLSAgICAgICAgICAgIHBnQWRtaW4uRmlsZU1hbmFnZXIuc2hvd19kaWFsb2co cGFyYW1zKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg ICAgICQoJyNidG4tc2F2ZScpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Ci0gICAgICAgICQoJyNi dG4tZmlsZS1tZW51LWRyb3Bkb3duJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAgIF9z YXZlX2RhdGE6IGZ1bmN0aW9uKHZpZXcpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogCiAg ICAgICAgIHZhciBpc19hZGRlZCA9IF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUuYWRkZWQpLAogICAg ICAgICAgIGlzX3VwZGF0ZWQgPSBfLnNpemUoc2VsZi5kYXRhX3N0b3JlLnVwZGF0ZWQpLApAQCAt Mjg1MSwxNTQgKzI4MTgsMTc5IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAg ICAgIHJldHVybjsgLy8gTm90aGluZyB0byBzYXZlIGhlcmUKICAgICAgICAgfQogCi0gICAgICAg IGlmIChzYXZlX2RhdGEpIHsKKyAgICAgICAgc2VsZi50cmlnZ2VyKAorICAgICAgICAgICdwZ2Fk bWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246c2hvdycsCisgICAgICAgICAgZ2V0dGV4dCgnU2F2 aW5nIHRoZSB1cGRhdGVkIGRhdGEuLi4nKQorICAgICAgICApOwogCi0gICAgICAgICAgc2VsZi50 cmlnZ2VyKAotICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpzaG93 JywKLSAgICAgICAgICAgIGdldHRleHQoJ1NhdmluZyB0aGUgdXBkYXRlZCBkYXRhLi4uJykKLSAg ICAgICAgICApOworICAgICAgICAvLyBBZGQgdGhlIGNvbHVtbnMgdG8gdGhlIGRhdGEgc28gdGhl IHNlcnZlciBjYW4gcmVtYXAgdGhlIGRhdGEKKyAgICAgICAgdmFyIHJlcV9kYXRhID0gc2VsZi5k YXRhX3N0b3JlOworICAgICAgICByZXFfZGF0YS5jb2x1bW5zID0gdmlldyA/IHZpZXcuaGFuZGxl ci5jb2x1bW5zIDogc2VsZi5jb2x1bW5zOwogCi0gICAgICAgICAgLy8gQWRkIHRoZSBjb2x1bW5z IHRvIHRoZSBkYXRhIHNvIHRoZSBzZXJ2ZXIgY2FuIHJlbWFwIHRoZSBkYXRhCi0gICAgICAgICAg dmFyIHJlcV9kYXRhID0gc2VsZi5kYXRhX3N0b3JlOwotICAgICAgICAgIHJlcV9kYXRhLmNvbHVt bnMgPSB2aWV3ID8gdmlldy5oYW5kbGVyLmNvbHVtbnMgOiBzZWxmLmNvbHVtbnM7CisgICAgICAg IHZhciBzYXZlX3N1Y2Nlc3NmdWwgPSBmYWxzZTsKIAotICAgICAgICAgIC8vIE1ha2UgYWpheCBj YWxsIHRvIHNhdmUgdGhlIGRhdGEKLSAgICAgICAgICAkLmFqYXgoewotICAgICAgICAgICAgdXJs OiB1cmxfZm9yKCdzcWxlZGl0b3Iuc2F2ZScsIHsKLSAgICAgICAgICAgICAgJ3RyYW5zX2lkJzog c2VsZi50cmFuc0lkLAotICAgICAgICAgICAgfSksCi0gICAgICAgICAgICBtZXRob2Q6ICdQT1NU JywKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsCi0gICAgICAg ICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShyZXFfZGF0YSksCi0gICAgICAgICAgfSkKLSAgICAg ICAgICAgIC5kb25lKGZ1bmN0aW9uKHJlcykgewotICAgICAgICAgICAgICB2YXIgZ3JpZCA9IHNl bGYuc2xpY2tncmlkLAotICAgICAgICAgICAgICAgIGRhdGFWaWV3ID0gZ3JpZC5nZXREYXRhKCks Ci0gICAgICAgICAgICAgICAgZGF0YV9sZW5ndGggPSBkYXRhVmlldy5nZXRMZW5ndGgoKSwKLSAg ICAgICAgICAgICAgICBkYXRhID0gW107Ci0KLSAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0 YXR1cykgewotICAgICAgICAgICAgICAgIGlmKGlzX2FkZGVkKSB7Ci0gICAgICAgICAgICAgICAg Ly8gVXBkYXRlIHRoZSByb3dzIGluIGEgZ3JpZCBhZnRlciBhZGRpdGlvbgotICAgICAgICAgICAg ICAgICAgZGF0YVZpZXcuYmVnaW5VcGRhdGUoKTsKLSAgICAgICAgICAgICAgICAgIF8uZWFjaChy ZXMuZGF0YS5xdWVyeV9yZXN1bHQsIGZ1bmN0aW9uKHIpIHsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCFfLmlzTnVsbChyLnJvd19hZGRlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmV0 Y2ggdGVtcF9pZCByZXR1cm5lZCBieSBzZXJ2ZXIgYWZ0ZXIgYWRkaXRpb24KLSAgICAgICAgICAg ICAgICAgICAgICB2YXIgcm93X2lkID0gT2JqZWN0LmtleXMoci5yb3dfYWRkZWQpWzBdOwotICAg ICAgICAgICAgICAgICAgICAgIF8uZWFjaChyZXFfZGF0YS5hZGRlZF9pbmRleCwgZnVuY3Rpb24o diwgaykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gcm93X2lkKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAvLyBGZXRjaCBpdGVtIGRhdGEgdGhyb3VnaCByb3cgaW5kZXgK LSAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBncmlkLmdldERhdGFJdGVtKGsp OwotICAgICAgICAgICAgICAgICAgICAgICAgICBfLmV4dGVuZChpdGVtLCByLnJvd19hZGRlZFty b3dfaWRdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg ICAgICAgICAgICAgICBkYXRhVmlldy5lbmRVcGRhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGZsYWcgaXNfcm93X2NvcGllZCBmcm9tIGNvcGllZCBy b3dzCi0gICAgICAgICAgICAgICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKHJvdykgewotICAgICAg ICAgICAgICAgICAgaWYgKHJvdy5pc19yb3dfY29waWVkKSB7Ci0gICAgICAgICAgICAgICAgICAg IGRlbGV0ZSByb3cuaXNfcm93X2NvcGllZDsKKyAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8g c2F2ZSB0aGUgZGF0YQorICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDogdXJsX2Zvcign c3FsZWRpdG9yLnNhdmUnLCB7CisgICAgICAgICAgICAndHJhbnNfaWQnOiBzZWxmLnRyYW5zSWQs CisgICAgICAgICAgfSksCisgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCisgICAgICAgICAgY29u dGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJywKKyAgICAgICAgICBkYXRhOiBKU09OLnN0cmlu Z2lmeShyZXFfZGF0YSksCisgICAgICAgIH0pCisgICAgICAgICAgLmRvbmUoZnVuY3Rpb24ocmVz KSB7CisgICAgICAgICAgICB2YXIgZ3JpZCA9IHNlbGYuc2xpY2tncmlkLAorICAgICAgICAgICAg ICBkYXRhVmlldyA9IGdyaWQuZ2V0RGF0YSgpLAorICAgICAgICAgICAgICBkYXRhX2xlbmd0aCA9 IGRhdGFWaWV3LmdldExlbmd0aCgpLAorICAgICAgICAgICAgICBkYXRhID0gW107CisKKyAgICAg ICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgLy8gRGlzYWJsZSBT YXZlIERhdGEgQ2hhbmdlcyBidXR0b24KKyAgICAgICAgICAgICAgJCgnI2J0bi1zYXZlLWRhdGEn KS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworCisgICAgICAgICAgICAgIHNhdmVfc3VjY2Vzc2Z1 bCA9IHRydWU7CisKKyAgICAgICAgICAgICAgLy8gUmVtb3ZlIGhpZ2hsaWdodGVkIGNlbGxzIHN0 eWxpbmcKKyAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gc2VsZi5udW1iZXJPZk1v ZGlmaWVkQ2VsbHM7IGkrKykKKyAgICAgICAgICAgICAgICBncmlkLnJlbW92ZUNlbGxDc3NTdHls ZXMoaSk7CisKKyAgICAgICAgICAgICAgc2VsZi5udW1iZXJPZk1vZGlmaWVkQ2VsbHMgPSAwOwor CisgICAgICAgICAgICAgIGlmKGlzX2FkZGVkKSB7CisgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0 aGUgcm93cyBpbiBhIGdyaWQgYWZ0ZXIgYWRkaXRpb24KKyAgICAgICAgICAgICAgICBkYXRhVmll dy5iZWdpblVwZGF0ZSgpOworICAgICAgICAgICAgICAgIF8uZWFjaChyZXMuZGF0YS5xdWVyeV9y ZXN1bHQsIGZ1bmN0aW9uKHIpIHsKKyAgICAgICAgICAgICAgICAgIGlmICghXy5pc051bGwoci5y b3dfYWRkZWQpKSB7CisgICAgICAgICAgICAgICAgICAvLyBGZXRjaCB0ZW1wX2lkIHJldHVybmVk IGJ5IHNlcnZlciBhZnRlciBhZGRpdGlvbgorICAgICAgICAgICAgICAgICAgICB2YXIgcm93X2lk ID0gT2JqZWN0LmtleXMoci5yb3dfYWRkZWQpWzBdOworICAgICAgICAgICAgICAgICAgICBfLmVh Y2gocmVxX2RhdGEuYWRkZWRfaW5kZXgsIGZ1bmN0aW9uKHYsIGspIHsKKyAgICAgICAgICAgICAg ICAgICAgICBpZiAodiA9PSByb3dfaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBGZXRj aCBpdGVtIGRhdGEgdGhyb3VnaCByb3cgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh ciBpdGVtID0gZ3JpZC5nZXREYXRhSXRlbShrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF8u ZXh0ZW5kKGl0ZW0sIHIucm93X2FkZGVkW3Jvd19pZF0pOworICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1vdmUgMmQgY29waWVkX3Jvd3Mg YXJyYXkKLSAgICAgICAgICAgICAgICBpZiAoZ3JpZC5jb3BpZWRfcm93cykgewotICAgICAgICAg ICAgICAgICAgZGVsZXRlIGdyaWQuY29waWVkX3Jvd3M7CisgICAgICAgICAgICAgICAgZGF0YVZp ZXcuZW5kVXBkYXRlKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLy8gUmVtb3Zl IGZsYWcgaXNfcm93X2NvcGllZCBmcm9tIGNvcGllZCByb3dzCisgICAgICAgICAgICAgIF8uZWFj aChkYXRhLCBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgICAgICAgICBpZiAocm93LmlzX3Jvd19j b3BpZWQpIHsKKyAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb3cuaXNfcm93X2NvcGllZDsKICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgIC8vIFJl bW92ZSAyZCBjb3BpZWRfcm93cyBhcnJheQorICAgICAgICAgICAgICBpZiAoZ3JpZC5jb3BpZWRf cm93cykgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBncmlkLmNvcGllZF9yb3dzOworICAgICAg ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZGVsZXRlZCByb3dzIGZyb20g Y2xpZW50IGFzIHdlbGwKLSAgICAgICAgICAgICAgICBpZiAoaXNfZGVsZXRlZCkgewotICAgICAg ICAgICAgICAgICAgdmFyIHJvd3MgPSBfLmtleXMoc2VsZi5kYXRhX3N0b3JlLmRlbGV0ZWQpOwot ICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfbGVuZ3RoID09IHJvd3MubGVuZ3RoKSB7Ci0gICAg ICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIGFsbCB0aGUgcm93cyBhcmUgc2VsZWN0ZWQsIGNs ZWFyIGFsbCBkYXRhCi0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbXTsKLSAgICAgICAgICAg ICAgICAgICAgZGF0YVZpZXcuc2V0SXRlbXMoZGF0YSwgc2VsZi5jbGllbnRfcHJpbWFyeV9rZXkp OwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YVZp ZXcuYmVnaW5VcGRhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg PCByb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBn cmlkLmdldERhdGFJdGVtKHJvd3NbaV0pOwotICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVz aChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhVmlldy5kZWxldGVJdGVtKGl0ZW1b c2VsZi5jbGllbnRfcHJpbWFyeV9rZXldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICBkYXRhVmlldy5lbmRVcGRhdGUoKTsKKyAgICAgICAgICAgICAgLy8gUmVt b3ZlIGRlbGV0ZWQgcm93cyBmcm9tIGNsaWVudCBhcyB3ZWxsCisgICAgICAgICAgICAgIGlmIChp c19kZWxldGVkKSB7CisgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSBfLmtleXMoc2VsZi5kYXRh X3N0b3JlLmRlbGV0ZWQpOworICAgICAgICAgICAgICAgIGlmIChkYXRhX2xlbmd0aCA9PSByb3dz Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgYWxsIHRoZSByb3dzIGFy ZSBzZWxlY3RlZCwgY2xlYXIgYWxsIGRhdGEKKyAgICAgICAgICAgICAgICAgIGRhdGEgPSBbXTsK KyAgICAgICAgICAgICAgICAgIGRhdGFWaWV3LnNldEl0ZW1zKGRhdGEsIHNlbGYuY2xpZW50X3By aW1hcnlfa2V5KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ZGF0YVZpZXcuYmVnaW5VcGRhdGUoKTsKKyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw OyBpIDwgcm93cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9 IGdyaWQuZ2V0RGF0YUl0ZW0ocm93c1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEucHVz aChpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVZpZXcuZGVsZXRlSXRlbShpdGVtW3Nl bGYuY2xpZW50X3ByaW1hcnlfa2V5XSk7CiAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICBzZWxmLnJvd3NfdG9fZGVsZXRlLmFwcGx5KHNlbGYsIFtkYXRhXSk7Ci0gICAgICAg ICAgICAgICAgICBncmlkLnNldFNlbGVjdGVkUm93cyhbXSk7CisgICAgICAgICAgICAgICAgICBk YXRhVmlldy5lbmRVcGRhdGUoKTsKICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAg ICBzZWxmLnJvd3NfdG9fZGVsZXRlLmFwcGx5KHNlbGYsIFtkYXRhXSk7CiAgICAgICAgICAgICAg ICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3MoW10pOworICAgICAgICAgICAgICB9CiAKLSAgICAgICAg ICAgICAgICAvLyBSZXNldCBkYXRhIHN0b3JlCi0gICAgICAgICAgICAgICAgc2VsZi5kYXRhX3N0 b3JlID0gewotICAgICAgICAgICAgICAgICAgJ2FkZGVkJzoge30sCi0gICAgICAgICAgICAgICAg ICAndXBkYXRlZCc6IHt9LAotICAgICAgICAgICAgICAgICAgJ2RlbGV0ZWQnOiB7fSwKLSAgICAg ICAgICAgICAgICAgICdhZGRlZF9pbmRleCc6IHt9LAotICAgICAgICAgICAgICAgICAgJ3VwZGF0 ZWRfaW5kZXgnOiB7fSwKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICBncmlkLnNl dFNlbGVjdGVkUm93cyhbXSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZXNldCBvbGQgcHJpbWFy eSBrZXkgZGF0YSBub3cKLSAgICAgICAgICAgICAgICBzZWxmLnByaW1hcnlfa2V5c19kYXRhID0g e307CisgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgc3RvcmUKKyAgICAgICAgICAgICAgc2Vs Zi5kYXRhX3N0b3JlID0geworICAgICAgICAgICAgICAgICdhZGRlZCc6IHt9LAorICAgICAgICAg ICAgICAgICd1cGRhdGVkJzoge30sCisgICAgICAgICAgICAgICAgJ2RlbGV0ZWQnOiB7fSwKKyAg ICAgICAgICAgICAgICAnYWRkZWRfaW5kZXgnOiB7fSwKKyAgICAgICAgICAgICAgICAndXBkYXRl ZF9pbmRleCc6IHt9LAorICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgLy8gQ2xl YXIgbXNncyBhZnRlciBzdWNjZXNzZnVsIHNhdmUKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9z cWxfbWVzc2FnZSgnJyk7CisgICAgICAgICAgICAgIC8vIFJlc2V0IG9sZCBwcmltYXJ5IGtleSBk YXRhIG5vdworICAgICAgICAgICAgICBzZWxmLnByaW1hcnlfa2V5c19kYXRhID0ge307CiAKLSAg ICAgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGdldHRleHQoJ0RhdGEgc2F2ZWQgc3VjY2Vz c2Z1bGx5LicpKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLy8gU29t ZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgc2F2aW5nIGRhdGEgb24gdGhlIGRiIHNlcnZlcgotICAg ICAgICAgICAgICAgICQoJyNidG4tZmxhc2gnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKLSAg ICAgICAgICAgICAgICAkKCcjYnRuLWRvd25sb2FkJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7 Ci0gICAgICAgICAgICAgICAgc2VsZi5zZXRfc3FsX21lc3NhZ2UocmVzLmRhdGEucmVzdWx0KTsK LSAgICAgICAgICAgICAgICB2YXIgZXJyX21zZyA9IFMoZ2V0dGV4dCgnJXMuJykpLnNwcmludGYo cmVzLmRhdGEucmVzdWx0KS52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9y KGVycl9tc2csIDIwKTsKLSAgICAgICAgICAgICAgICBncmlkLnNldFNlbGVjdGVkUm93cyhbXSk7 Ci0gICAgICAgICAgICAgICAgLy8gVG8gaGlnaGxpZ2h0IHRoZSByb3cgYXQgZmF1bHQKLSAgICAg ICAgICAgICAgICBpZiAoXy5oYXMocmVzLmRhdGEsICdfcm93aWQnKSAmJgotICAgICAgICAgICAg ICAgICghXy5pc1VuZGVmaW5lZChyZXMuZGF0YS5fcm93aWQpIHx8ICFfLmlzTnVsbChyZXMuZGF0 YS5fcm93aWQpKSkgewotICAgICAgICAgICAgICAgICAgdmFyIF9yb3dfaW5kZXggPSBzZWxmLl9m aW5kX3Jvd2luZGV4KHJlcy5kYXRhLl9yb3dpZCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoX3Jv d19pbmRleCBpbiBzZWxmLmRhdGFfc3RvcmUuYWRkZWRfaW5kZXgpIHsKLSAgICAgICAgICAgICAg ICAgIC8vIFJlbW92ZSBuZXcgcm93IGluZGV4IGZyb20gdGVtcF9saXN0IGlmIHNhdmUgb3BlcmF0 aW9uCi0gICAgICAgICAgICAgICAgICAvLyBmYWlscwotICAgICAgICAgICAgICAgICAgICB2YXIg aW5kZXggPSBzZWxmLmhhbmRsZXIudGVtcF9uZXdfcm93cy5pbmRleE9mKHJlcy5kYXRhLl9yb3dp ZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgc2VsZi5oYW5kbGVyLnRlbXBfbmV3X3Jvd3Muc3BsaWNlKGluZGV4LCAxKTsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUu YWRkZWRbc2VsZi5kYXRhX3N0b3JlLmFkZGVkX2luZGV4W19yb3dfaW5kZXhdXS5lcnIgPSB0cnVl OwotICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfcm93X2luZGV4IGluIHNlbGYuZGF0YV9z dG9yZS51cGRhdGVkX2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YV9zdG9y ZS51cGRhdGVkW3NlbGYuZGF0YV9zdG9yZS51cGRhdGVkX2luZGV4W19yb3dfaW5kZXhdXS5lcnIg PSB0cnVlOworICAgICAgICAgICAgICAvLyBDbGVhciBtc2dzIGFmdGVyIHN1Y2Nlc3NmdWwgc2F2 ZQorICAgICAgICAgICAgICBzZWxmLnNldF9zcWxfbWVzc2FnZSgnJyk7CisKKyAgICAgICAgICAg ICAgdmFyIG1zZywgaXNfY29tbWl0X3JlcXVpcmVkID0gXy5oYXMocmVzLmRhdGEsICdpc19jb21t aXRfcmVxdWlyZWQnKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAhXy5pc051bGwocmVzLmRhdGEuaXNfY29tbWl0X3JlcXVpcmVkKSAmJgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZGF0YS5pc19jb21taXRfcmVx dWlyZWQ7CisKKyAgICAgICAgICAgICAgaWYoaXNfY29tbWl0X3JlcXVpcmVkKSB7CisgICAgICAg ICAgICAgICAgbXNnID0gZ2V0dGV4dCgnRGF0YSBzYXZlZCBzdWNjZXNzZnVsbHksIHlvdSBzdGls bCBuZWVkIHRvIGNvbW1pdCBjaGFuZ2VzIHRvIHRoZSBkYXRhYmFzZS4nKTsKKyAgICAgICAgICAg ICAgICBzZWxmLmRpc2FibGVfdHJhbnNhY3Rpb25fYnV0dG9ucyhmYWxzZSk7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1zZyA9IGdldHRleHQo J0RhdGEgc2F2ZWQgc3VjY2Vzc2Z1bGx5LicpOworCisgICAgICAgICAgICAgIGFsZXJ0aWZ5LnN1 Y2Nlc3MobXNnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTb21ldGhp bmcgd2VudCB3cm9uZyB3aGlsZSBzYXZpbmcgZGF0YSBvbiB0aGUgZGIgc2VydmVyCisgICAgICAg ICAgICAgIHNlbGYuc2V0X3NxbF9tZXNzYWdlKHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAg ICAgIHZhciBlcnJfbXNnID0gUyhnZXR0ZXh0KCclcy4nKSkuc3ByaW50ZihyZXMuZGF0YS5yZXN1 bHQpLnZhbHVlKCk7CisgICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKGVycl9tc2csIDIwKTsK KyAgICAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3MoW10pOworICAgICAgICAgICAgICAv LyBUbyBoaWdobGlnaHQgdGhlIHJvdyBhdCBmYXVsdAorICAgICAgICAgICAgICBpZiAoXy5oYXMo cmVzLmRhdGEsICdfcm93aWQnKSAmJgorICAgICAgICAgICAgICAoIV8uaXNVbmRlZmluZWQocmVz LmRhdGEuX3Jvd2lkKSB8fCAhXy5pc051bGwocmVzLmRhdGEuX3Jvd2lkKSkpIHsKKyAgICAgICAg ICAgICAgICB2YXIgX3Jvd19pbmRleCA9IHNlbGYuX2ZpbmRfcm93aW5kZXgocmVzLmRhdGEuX3Jv d2lkKTsKKyAgICAgICAgICAgICAgICBpZiAoX3Jvd19pbmRleCBpbiBzZWxmLmRhdGFfc3RvcmUu YWRkZWRfaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgbmV3IHJvdyBpbmRleCBm cm9tIHRlbXBfbGlzdCBpZiBzYXZlIG9wZXJhdGlvbgorICAgICAgICAgICAgICAgIC8vIGZhaWxz CisgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLmhhbmRsZXIudGVtcF9uZXdfcm93 cy5pbmRleE9mKHJlcy5kYXRhLl9yb3dpZCk7CisgICAgICAgICAgICAgICAgICBpZiAoaW5kZXgg PiAtMSkgeworICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIudGVtcF9uZXdfcm93cy5z cGxpY2UoaW5kZXgsIDEpOwogICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg c2VsZi5kYXRhX3N0b3JlLmFkZGVkW3NlbGYuZGF0YV9zdG9yZS5hZGRlZF9pbmRleFtfcm93X2lu ZGV4XV0uZXJyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9yb3dfaW5kZXgg aW4gc2VsZi5kYXRhX3N0b3JlLnVwZGF0ZWRfaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHNl bGYuZGF0YV9zdG9yZS51cGRhdGVkW3NlbGYuZGF0YV9zdG9yZS51cGRhdGVkX2luZGV4W19yb3df aW5kZXhdXS5lcnIgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBn cmlkLmdvdG9DZWxsKF9yb3dfaW5kZXgsIDEpOwogICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGdyaWQuZ290b0NlbGwoX3Jvd19pbmRleCwgMSk7CisgICAgICAgICAgICB9CiAKLSAgICAg ICAgICAgICAgLy8gVXBkYXRlIHRoZSBzcWwgcmVzdWx0cyBpbiBoaXN0b3J5IHRhYgotICAgICAg ICAgICAgICBfLmVhY2gocmVzLmRhdGEucXVlcnlfcmVzdWx0LCBmdW5jdGlvbihyKSB7Ci0gICAg ICAgICAgICAgICAgc2VsZi5ncmlkVmlldy5oaXN0b3J5X2NvbGxlY3Rpb24uYWRkKHsKLSAgICAg ICAgICAgICAgICAgICdzdGF0dXMnOiByLnN0YXR1cywKLSAgICAgICAgICAgICAgICAgICdzdGFy dF90aW1lJzogc2VsZi5xdWVyeV9zdGFydF90aW1lLAotICAgICAgICAgICAgICAgICAgJ3F1ZXJ5 Jzogci5zcWwsCi0gICAgICAgICAgICAgICAgICAncm93X2FmZmVjdGVkJzogci5yb3dzX2FmZmVj dGVkLAotICAgICAgICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiBzZWxmLnRvdGFsX3RpbWUsCi0g ICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IHIucmVzdWx0LAotICAgICAgICAgICAgICAgIH0p OworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzcWwgcmVzdWx0cyBpbiBoaXN0b3J5IHRhYgor ICAgICAgICAgICAgXy5lYWNoKHJlcy5kYXRhLnF1ZXJ5X3Jlc3VsdCwgZnVuY3Rpb24ocikgewor ICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3Lmhpc3RvcnlfY29sbGVjdGlvbi5hZGQoeworICAg ICAgICAgICAgICAgICdzdGF0dXMnOiByLnN0YXR1cywKKyAgICAgICAgICAgICAgICAnc3RhcnRf dGltZSc6IHNlbGYucXVlcnlfc3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAncXVlcnknOiBy LnNxbCwKKyAgICAgICAgICAgICAgICAncm93X2FmZmVjdGVkJzogci5yb3dzX2FmZmVjdGVkLAor ICAgICAgICAgICAgICAgICd0b3RhbF90aW1lJzogc2VsZi50b3RhbF90aW1lLAorICAgICAgICAg ICAgICAgICdtZXNzYWdlJzogci5yZXN1bHQsCiAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg ICAgICBzZWxmLnRyaWdnZXIoJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRlJyk7 CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHNlbGYudHJpZ2dlcigncGdhZG1pbi1zcWxl ZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKIAotICAgICAgICAgICAgICBncmlkLmludmFsaWRh dGUoKTsKLSAgICAgICAgICAgICAgaWYgKHNlbGYuY2xvc2Vfb25fc2F2ZSkgewotICAgICAgICAg ICAgICAgIHNlbGYuY2xvc2UoKTsKKyAgICAgICAgICAgIGdyaWQuaW52YWxpZGF0ZSgpOworICAg ICAgICAgICAgaWYgKHNlbGYuY2xvc2Vfb25fc2F2ZSkgeworICAgICAgICAgICAgICBpZihzYXZl X3N1Y2Nlc3NmdWwpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgYW55IG90aGVyIG5l ZWRlZCBjb25maXJtYXRpb25zIGJlZm9yZSBjbG9zaW5nCisgICAgICAgICAgICAgICAgc2VsZi5j aGVja19uZWVkZWRfY29uZmlybWF0aW9uc19iZWZvcmVfY2xvc2luZ19wYW5lbCgpOwogICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9KQotICAgICAgICAgICAgLmZhaWwoZnVuY3Rpb24oZSkg ewotICAgICAgICAgICAgICBsZXQgc3RhdGVQYXJhbXMgPSBbdmlldywgY29udHJvbGxlciwgc2F2 ZV9hc107Ci0gICAgICAgICAgICAgIGxldCBtc2cgPSBodHRwRXJyb3JIYW5kbGVyLmhhbmRsZVF1 ZXJ5VG9vbEFqYXhFcnJvcigKLSAgICAgICAgICAgICAgICBwZ0FkbWluLCBzZWxmLCBlLCAnX3Nh dmUnLCBzdGF0ZVBhcmFtcywgdHJ1ZQotICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICBz ZWxmLnVwZGF0ZV9tc2dfaGlzdG9yeShmYWxzZSwgbXNnKTsKLSAgICAgICAgICAgIH0pOwotICAg ICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlbGYuY2xvc2Vf b25fc2F2ZSA9IGZhbHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgfSkKKyAgICAgICAgICAuZmFpbChmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBsZXQgc3Rh dGVQYXJhbXMgPSBbdmlld107CisgICAgICAgICAgICBsZXQgbXNnID0gaHR0cEVycm9ySGFuZGxl ci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAgICAgIHBnQWRtaW4sIHNlbGYs IGUsICdfc2F2ZGF0YScsIHN0YXRlUGFyYW1zLCB0cnVlCisgICAgICAgICAgICApOworICAgICAg ICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsIG1zZyk7CisgICAgICAgICAgfSk7 CiAgICAgICB9LAogCiAgICAgICAvLyBGaW5kIGluZGV4IG9mIHJvdyBhdCBmYXVsdCBmcm9tIGdy aWQgZGF0YQpAQCAtMzA0Miw3ICszMDM0LDcgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBb CiAKICAgICAgIC8vIFNhdmUgYXMKICAgICAgIF9zYXZlX2FzOiBmdW5jdGlvbigpIHsKLSAgICAg ICAgcmV0dXJuIHRoaXMuX3NhdmUodHJ1ZSk7CisgICAgICAgIHJldHVybiB0aGlzLl9zYXZlX2Zp bGUodHJ1ZSk7CiAgICAgICB9LAogCiAgICAgICAvLyBTZXQgcGFuZWwgdGl0bGUuCkBAIC0zMTMy LDcgKzMxMjQsNyBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgICAgICRi dXN5X2ljb25fZGl2LnJlbW92ZUNsYXNzKCdzaG93X3Byb2dyZXNzJyk7CiAKICAgICAgICAgICAg IC8vIGRpc2FibGUgc2F2ZSBidXR0b24gb24gZmlsZSBzYXZlCi0gICAgICAgICAgICAkKCcjYnRu LXNhdmUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAgICAgJCgnI2J0bi1zYXZl LWZpbGUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOwogICAgICAgICAgICAgJCgnI2J0bi1maWxl LW1lbnUtc2F2ZScpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAKICAgICAgICAgICAgIC8vIFVw ZGF0ZSB0aGUgZmxhZyBhcyBuZXcgY29udGVudCBpcyBqdXN0IGxvYWRlZC4KQEAgLTMxNzcsNyAr MzE2OSw3IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAgICAgICBzZWxm LmdyaWRWaWV3LmN1cnJlbnRfZmlsZSA9IGU7CiAgICAgICAgICAgICAgIHNlbGYuc2V0VGl0bGUo c2VsZi5ncmlkVmlldy5jdXJyZW50X2ZpbGUucmVwbGFjZSgvXi4qW1xcXC9dL2csICcnKSwgdHJ1 ZSk7CiAgICAgICAgICAgICAgIC8vIGRpc2FibGUgc2F2ZSBidXR0b24gb24gZmlsZSBzYXZlCi0g ICAgICAgICAgICAgICQoJyNidG4tc2F2ZScpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAg ICAgICAgICAgICQoJyNidG4tc2F2ZS1maWxlJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKICAg ICAgICAgICAgICAgJCgnI2J0bi1maWxlLW1lbnUtc2F2ZScpLmNzcygnZGlzcGxheScsICdub25l Jyk7CiAKICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBmbGFnIGFzIHF1ZXJ5IGlzIGFscmVh ZHkgc2F2ZWQuCkBAIC0zMTg2LDcgKzMxNzgsOCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcs IFsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigncGdhZG1pbi1zcWxl ZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKICAgICAgICAgICAgIGlmIChzZWxmLmNsb3NlX29u X3NhdmUpIHsKLSAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpOworICAgICAgICAgICAgICAvLyBD aGVjayBmb3IgYW55IG90aGVyIG5lZWRlZCBjb25maXJtYXRpb25zIGJlZm9yZSBjbG9zaW5nCisg ICAgICAgICAgICAgIHNlbGYuY2hlY2tfbmVlZGVkX2NvbmZpcm1hdGlvbnNfYmVmb3JlX2Nsb3Np bmdfcGFuZWwoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9KQogICAgICAgICAgIC5mYWls KGZ1bmN0aW9uKGUpIHsKQEAgLTMyMjYsNyArMzIxOSw3IEBAIGRlZmluZSgndG9vbHMucXVlcnl0 b29sJywgWwogICAgICAgICAgICAgc2VsZi5zZXRUaXRsZSh0aXRsZSk7CiAgICAgICAgICAgfQog Ci0gICAgICAgICAgJCgnI2J0bi1zYXZlJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisgICAg ICAgICAgJCgnI2J0bi1zYXZlLWZpbGUnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKICAgICAg ICAgICAkKCcjYnRuLWZpbGUtbWVudS1zYXZlJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CiAg ICAgICAgICAgJCgnI2J0bi1maWxlLW1lbnUtZHJvcGRvd24nKS5wcm9wKCdkaXNhYmxlZCcsIGZh bHNlKTsKICAgICAgICAgfQpAQCAtMzQ2MCw3ICszNDUzLDcgQEAgZGVmaW5lKCd0b29scy5xdWVy eXRvb2wnLCBbCiAgICAgICAgIGlmIChjb3BpZWRfcm93cy5sZW5ndGggPiAwKSB7CiAgICAgICAg ICAgLy8gRW5hYmxlIHNhdmUgYnV0dG9uIHNvIHRoYXQgdXNlciBjYW4KICAgICAgICAgICAvLyBz YXZlIG5ld2x5IHBhc3RlZCByb3dzIG9uIHNlcnZlcgotICAgICAgICAgICQoJyNidG4tc2F2ZScp LnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAgICQoJyNidG4tc2F2ZS1kYXRhJyku cHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAKICAgICAgICAgICB2YXIgYXJyX3RvX29iamVjdCA9 IGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICAgdmFyIG9iaiA9IHt9OwpAQCAtMzU2Myw3ICsz NTU2LDcgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAgICQoJyNidG4tZXhw bGFpbi1vcHRpb25zLWRyb3Bkb3duJykucHJvcCgnZGlzYWJsZWQnLCBtb2RlX2Rpc2FibGVkKTsK ICAgICAgICAgJCgnI2J0bi1lZGl0LWRyb3Bkb3duJykucHJvcCgnZGlzYWJsZWQnLCBtb2RlX2Rp c2FibGVkKTsKICAgICAgICAgJCgnI2J0bi1sb2FkLWZpbGUnKS5wcm9wKCdkaXNhYmxlZCcsIG1v ZGVfZGlzYWJsZWQpOwotICAgICAgICAkKCcjYnRuLXNhdmUnKS5wcm9wKCdkaXNhYmxlZCcsIG1v ZGVfZGlzYWJsZWQpOworICAgICAgICAkKCcjYnRuLXNhdmUtZmlsZScpLnByb3AoJ2Rpc2FibGVk JywgbW9kZV9kaXNhYmxlZCk7CiAgICAgICAgICQoJyNidG4tZmlsZS1tZW51LWRyb3Bkb3duJyku cHJvcCgnZGlzYWJsZWQnLCBtb2RlX2Rpc2FibGVkKTsKICAgICAgICAgJCgnI2J0bi1maW5kJyku cHJvcCgnZGlzYWJsZWQnLCBtb2RlX2Rpc2FibGVkKTsKICAgICAgICAgJCgnI2J0bi1maW5kLW1l bnUtZHJvcGRvd24nKS5wcm9wKCdkaXNhYmxlZCcsIG1vZGVfZGlzYWJsZWQpOwpAQCAtMzU5Miw4 ICszNTg1LDM2IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgLy8gVGhpcyBm dW5jdGlvbiB3aWxsIGZldGNoIHRoZSBzcWwgcXVlcnkgZnJvbSB0aGUgdGV4dCBib3gKICAgICAg IC8vIGFuZCBleGVjdXRlIHRoZSBxdWVyeS4KICAgICAgIGV4ZWN1dGU6IGZ1bmN0aW9uKGV4cGxh aW5fcHJlZml4LCBzaG91bGRSZWNvbm5lY3Q9ZmFsc2UpIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0 aGlzLAotICAgICAgICAgIHNxbCA9ICcnOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAg ICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGEgZ3JpZCBoYXMgYW55IGNoYW5nZXMgYmVmb3JlIHJ1 bm5pbmcgcXVlcnkKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGEgZ3JpZCBoYXMgYW55IGNo YW5nZXMgYmVmb3JlIHJ1bm5pbmcgcXVlcnkKKyAgICAgICAgaWYgKHNlbGYuY2FuX2VkaXQgJiYg Xy5oYXMoc2VsZiwgJ2RhdGFfc3RvcmUnKSAmJgorICAgICAgICAgIChfLnNpemUoc2VsZi5kYXRh X3N0b3JlLmFkZGVkKSB8fAorICAgICAgICAgICAgXy5zaXplKHNlbGYuZGF0YV9zdG9yZS51cGRh dGVkKSB8fAorICAgICAgICAgICAgXy5zaXplKHNlbGYuZGF0YV9zdG9yZS5kZWxldGVkKSkKKyAg ICAgICAgKSB7CisgICAgICAgICAgYWxlcnRpZnkuY29uZmlybShnZXR0ZXh0KCdVbnNhdmVkIGNo YW5nZXMnKSwKKyAgICAgICAgICAgIGdldHRleHQoJ1RoZSBkYXRhIGhhcyBiZWVuIG1vZGlmaWVk LCBidXQgbm90IHNhdmVkLiBBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gZGlzY2FyZCB0aGUgY2hh bmdlcz8nKSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAvLyBEbyBu b3RoaW5nIGFzIHVzZXIgZG8gbm90IHdhbnQgdG8gc2F2ZSwganVzdCBjb250aW51ZQorICAgICAg ICAgICAgICBzZWxmLl9leGVjdXRlX3NxbF9xdWVyeShleHBsYWluX3ByZWZpeCwgc2hvdWxkUmVj b25uZWN0KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAg ICAgICAgICAgLy8gU3RvcCwgVXNlciB3YW50cyB0byBzYXZlCisgICAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICkuc2V0KCdsYWJlbHMnLCB7CisgICAg ICAgICAgICBvazogZ2V0dGV4dCgnWWVzJyksCisgICAgICAgICAgICBjYW5jZWw6IGdldHRleHQo J05vJyksCisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2VsZi5f ZXhlY3V0ZV9zcWxfcXVlcnkoZXhwbGFpbl9wcmVmaXgsIHNob3VsZFJlY29ubmVjdCk7CisgICAg ICAgIH0KKyAgICAgIH0sCisKKyAgICAgIF9leGVjdXRlX3NxbF9xdWVyeTogZnVuY3Rpb24oZXhw bGFpbl9wcmVmaXgsIHNob3VsZFJlY29ubmVjdCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXMs IHNxbCA9ICcnOwogCiAgICAgICAgIHNlbGYuaGFzX21vcmVfcm93cyA9IGZhbHNlOwogICAgICAg ICBzZWxmLmZldGNoaW5nX3Jvd3MgPSBmYWxzZTsKQEAgLTM2MDIsOCArMzYyMyw4IEBAIGRlZmlu ZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAgIHNxbCA9IHNlbGYuc3BlY2lhbF9zcWw7 CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgLyogSWYgY29kZSBpcyBzZWxlY3RlZCBpbiB0 aGUgY29kZSBtaXJyb3IgdGhlbiBleGVjdXRlCi0gICAgICAgICAgICogdGhlIHNlbGVjdGVkIHBh cnQgZWxzZSBleGVjdXRlIHRoZSBjb21wbGV0ZSBjb2RlLgotICAgICAgICAgICAqLworICAgICAg ICAgICogdGhlIHNlbGVjdGVkIHBhcnQgZWxzZSBleGVjdXRlIHRoZSBjb21wbGV0ZSBjb2RlLgor ICAgICAgICAgICovCiAgICAgICAgICAgdmFyIHNlbGVjdGVkX2NvZGUgPSBzZWxmLmdyaWRWaWV3 LnF1ZXJ5X3Rvb2xfb2JqLmdldFNlbGVjdGlvbigpOwogICAgICAgICAgIGlmIChzZWxlY3RlZF9j b2RlLmxlbmd0aCA+IDApCiAgICAgICAgICAgICBzcWwgPSBzZWxlY3RlZF9jb2RlOwpAQCAtMzk5 OCw2ICs0MDE5LDE0NCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgaXNf cXVlcnlfcnVubmluZyA9IHZhbHVlOwogICAgICAgfSwKIAorICAgICAgLyogQ2hlY2tzIGlmIHRo ZXJlIGlzIGFueSB1bnNhdmVkIGRhdGEgY2hhbmdlcywgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBx dWVyeQorICAgICAgb3IgdW5jb21taXRlZCB0cmFuc2FjdGlvbnMgYmVmb3JlIGNsb3NpbmcgYSBw YW5lbCAqLworICAgICAgY2hlY2tfbmVlZGVkX2NvbmZpcm1hdGlvbnNfYmVmb3JlX2Nsb3Npbmdf cGFuZWw6IGZ1bmN0aW9uKGlzX2Nsb3NlX2V2ZW50X2NhbGwgPSBmYWxzZSkgeworICAgICAgICB2 YXIgc2VsZiA9IHRoaXMsIG1zZzsKKworICAgICAgICAvKgorICAgICAgICAgaXNfY2xvc2VfZXZl bnRfY2FsbCA9IHRydWUgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUK KyAgICAgICAgIGNsb3NlIHBhbmVsIGV2ZW50IGlzIHRyaWdnZXJlZCwgb3RoZXJ3aXNlIGl0IGlz IGZhbHNlCisgICAgICAgICovCisgICAgICAgIGlmKCFzZWxmLmlnbm9yZV9vbl9jbG9zZSB8fCBp c19jbG9zZV9ldmVudF9jYWxsKQorICAgICAgICAgIHNlbGYuaWdub3JlX29uX2Nsb3NlID0gewor ICAgICAgICAgICAgdW5zYXZlZF9kYXRhOiBmYWxzZSwKKyAgICAgICAgICAgIHVuc2F2ZWRfcXVl cnk6IGZhbHNlLAorICAgICAgICAgICAgdW5jb21taXRlZF90cmFuc2FjdGlvbjogZmFsc2UsCisg ICAgICAgICAgfTsKKworICAgICAgICB2YXIgaWdub3JlX3Vuc2F2ZWRfZGF0YSA9IHNlbGYuaWdu b3JlX29uX2Nsb3NlLnVuc2F2ZWRfZGF0YSwKKyAgICAgICAgICBpZ25vcmVfdW5zYXZlZF9xdWVy eSA9IHNlbGYuaWdub3JlX29uX2Nsb3NlLnVuc2F2ZWRfcXVlcnksCisgICAgICAgICAgaWdub3Jl X3VuY29tbWl0ZWRfdHJhbnNhY3Rpb24gPSBzZWxmLmlnbm9yZV9vbl9jbG9zZS51bmNvbW1pdGVk X3RyYW5zYWN0aW9uOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIHVuc2F2ZWQgZGF0YSBjaGFu Z2VzIGluIHRoZSBncmlkCisgICAgICAgIGlmICghaWdub3JlX3Vuc2F2ZWRfZGF0YSAmJiBzZWxm LmNhbl9lZGl0CisgICAgICAgICAgICAmJiBzZWxmLnByZWZlcmVuY2VzLnByb21wdF9zYXZlX2Rh dGFfY2hhbmdlcyAmJgorICAgICAgICAgICAgc2VsZi5kYXRhX3N0b3JlICYmCisgICAgICAgICAg ICAgKF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUuYWRkZWQpIHx8CisgICAgICAgICAgICAgIF8uc2l6 ZShzZWxmLmRhdGFfc3RvcmUudXBkYXRlZCkgfHwKKyAgICAgICAgICAgICAgXy5zaXplKHNlbGYu ZGF0YV9zdG9yZS5kZWxldGVkKSkpIHsKKyAgICAgICAgICBtc2cgPSBnZXR0ZXh0KCdUaGUgZGF0 YSBoYXMgY2hhbmdlZC4gRG8geW91IHdhbnQgdG8gc2F2ZSBjaGFuZ2VzPycpOworICAgICAgICAg IHNlbGYudW5zYXZlZF9jaGFuZ2VzX3VzZXJfY29uZmlybWF0aW9uKG1zZywgdHJ1ZSk7CisgICAg ICAgIH0gLy8gSWYgdGhlcmUgaXMgdW5zYXZlZCBxdWVyeSBjaGFuZ2VzIGluIHRoZSBxdWVyeSBl ZGl0b3IKKyAgICAgICAgZWxzZSBpZiAoIWlnbm9yZV91bnNhdmVkX3F1ZXJ5ICYmIHNlbGYuaXNf cXVlcnlfdG9vbAorICAgICAgICAgICAgICAgICAgICYmIHNlbGYuaXNfcXVlcnlfY2hhbmdlZAor ICAgICAgICAgICAgICAgICAgICYmIHNlbGYucHJlZmVyZW5jZXMucHJvbXB0X3NhdmVfcXVlcnlf Y2hhbmdlcykgeworICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1RoZSB0ZXh0IGhhcyBjaGFuZ2Vk LiBEbyB5b3Ugd2FudCB0byBzYXZlIGNoYW5nZXM/Jyk7CisgICAgICAgICAgc2VsZi51bnNhdmVk X2NoYW5nZXNfdXNlcl9jb25maXJtYXRpb24obXNnLCBmYWxzZSk7CisgICAgICAgIH0gLy8gSWYg YSB0cmFuc2FjdGlvbiBpcyBjdXJyZW50bHkgb25nb2luZworICAgICAgICBlbHNlIGlmICghaWdu b3JlX3VuY29tbWl0ZWRfdHJhbnNhY3Rpb24gJiYgU3FsRWRpdG9yVXRpbHMucHJldmlvdXNTdGF0 dXMgIT0gMCkgeworICAgICAgICAgIHNlbGYudW5jb21taXRlZF90cmFuc2FjdGlvbl91c2VyX2Nv bmZpcm1hdGlvbigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8vIE5v IG90aGVyIGZ1bmN0aW9uIHNob3VsZCBjYWxsIGNsb3NlKCkgZXhjZXB0IHRocm91Z2ggdGhpcyBm dW5jdGlvbgorICAgICAgICAgIC8vIGluIG9yZGVyIHRvIHBlcmZvcm0gbmVjZXNzYXJ5IGNoZWNr cworICAgICAgICAgIHNlbGYuaWdub3JlX29uX2Nsb3NlID0gdW5kZWZpbmVkOworICAgICAgICAg IHNlbGYuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXR1cm4gZmFsc2Ugc28gdGhh dCB0aGUgcGFuZWwgZG9lcyBub3QgY2xvc2UgdW5sZXNzIGNsb3NlKCkKKyAgICAgICAgLy8gaXMg Y2FsbGVkIGV4cGxpY2l0bHkgKHdoZW4gYWxsIG5lZWRlZCBwcm9tcHRzIGFyZSBpc3N1ZWQpLgor ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9LAorCisgICAgICAvKiBUbyBwcm9tcHQgdGhl IHVzZXIgZm9yIHVuY29tbWl0ZWQgdHJhbnNhY3Rpb24gKi8KKyAgICAgIHVuY29tbWl0ZWRfdHJh bnNhY3Rpb25fdXNlcl9jb25maXJtYXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2Vs ZiA9IHRoaXM7CisKKyAgICAgICAgYWxlcnRpZnkuY29uZmlybSgKKyAgICAgICAgICBnZXR0ZXh0 KCdVbmNvbW1pdGVkIHRyYW5zYWN0aW9uJyksCisgICAgICAgICAgZ2V0dGV4dChgVGhlIGN1cnJl bnQgdHJhbnNhY3Rpb24gd2FzIG5vdCBjb21taXRlZCB0byB0aGUgZGF0YWJhc2UuCisgICAgICAg ICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoZSBjdXJyZW50IHRyYW5zYWN0 aW9uP2ApLAorICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgLy8gR28gYmFjayB0 byBjaGVjayBmb3IgYW55IG90aGVyIG5lZWRlZCBjb25maXJtYXRpb25zIGJlZm9yZSBjbG9zaW5n CisgICAgICAgICAgICBzZWxmLmlnbm9yZV9vbl9jbG9zZS51bmNvbW1pdGVkX3RyYW5zYWN0aW9u ID0gdHJ1ZTsKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfbmVlZGVkX2NvbmZpcm1hdGlvbnNfYmVm b3JlX2Nsb3NpbmdfcGFuZWwoKTsKKyAgICAgICAgICB9LAorICAgICAgICAgIGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgKS5zZXQoJ2xhYmVs cycsIHsKKyAgICAgICAgICBvazogZ2V0dGV4dCgnWWVzJyksCisgICAgICAgICAgY2FuY2VsOiBn ZXR0ZXh0KCdObycpLAorICAgICAgICB9KTsKKyAgICAgIH0sCisKKyAgICAgIC8qIFRvIHByb21w dCB1c2VyIGZvciB1bnNhdmVkIGNoYW5nZXMgKi8KKyAgICAgIHVuc2F2ZWRfY2hhbmdlc191c2Vy X2NvbmZpcm1hdGlvbjogZnVuY3Rpb24obXNnLCBpc191bnNhdmVkX2RhdGEpIHsKKyAgICAgICAg Ly8gSWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gc2F2ZSB0aGVuIHByb21wdCB1c2VyCisgICAgICAg IHZhciBzZWxmID0gdGhpczsKKworICAgICAgICBhbGVydGlmeS5jb25maXJtU2F2ZSB8fCBhbGVy dGlmeS5kaWFsb2coJ2NvbmZpcm1TYXZlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmV0dXJu IHsKKyAgICAgICAgICAgIG1haW46IGZ1bmN0aW9uKHRpdGxlLCBtZXNzYWdlLCBpc191bnNhdmVk X2RhdGEpIHsKKyAgICAgICAgICAgICAgdGhpcy5pc191bnNhdmVkX2RhdGEgPSBpc191bnNhdmVk X2RhdGE7CisgICAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyKHRpdGxlKTsKKyAgICAgICAgICAg ICAgdGhpcy5zZXRDb250ZW50KG1lc3NhZ2UpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAg IHNldHVwOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg ICAgICBidXR0b25zOiBbeworICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0dGV4dCgnQ2FuY2Vs JyksCisgICAgICAgICAgICAgICAgICBrZXk6IDI3LCAvLyBFU0MKKyAgICAgICAgICAgICAgICAg IGludm9rZU9uQ2xvc2U6IHRydWUsCisgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4g YnRuLXNlY29uZGFyeSBmYSBmYS1sZyBmYS10aW1lcyBwZy1hbGVydGlmeS1idXR0b24nLAorICAg ICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0Rvblwn dCBzYXZlJyksCisgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLXNlY29uZGFy eSBmYSBmYS1sZyBmYS10cmFzaC1vIHBnLWFsZXJ0aWZ5LWJ1dHRvbicsCisgICAgICAgICAgICAg ICAgfSwgeworICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0dGV4dCgnU2F2ZScpLAorICAgICAg ICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLWxnIGZhLXNhdmUg cGctYWxlcnRpZnktYnV0dG9uJywKKyAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAg ICBmb2N1czogeworICAgICAgICAgICAgICAgICAgZWxlbWVudDogMCwKKyAgICAgICAgICAgICAg ICAgIHNlbGVjdDogZmFsc2UsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBv cHRpb25zOiB7CisgICAgICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsCisgICAgICAg ICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgIH07CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9u KGNsb3NlRXZlbnQpIHsKKyAgICAgICAgICAgICAgc3dpdGNoIChjbG9zZUV2ZW50LmluZGV4KSB7 CisgICAgICAgICAgICAgIGNhc2UgMDogLy8gQ2FuY2VsCisgICAgICAgICAgICAgICAgLy9EbyBu b3RoaW5nLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDE6IC8v IERvbid0IFNhdmUKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX29uX3NhdmUgPSBmYWxzZTsK KyAgICAgICAgICAgICAgICBpZih0aGlzLmlzX3Vuc2F2ZWRfZGF0YSkKKyAgICAgICAgICAgICAg ICAgIHNlbGYuaWdub3JlX29uX2Nsb3NlLnVuc2F2ZWRfZGF0YSA9IHRydWU7CisgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc2VsZi5pZ25vcmVfb25fY2xvc2UudW5zYXZl ZF9xdWVyeSA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8gR28gYmFjayB0byBjaGVjayBmb3Ig YW55IG90aGVyIG5lZWRlZCBjb25maXJtYXRpb25zIGJlZm9yZSBjbG9zaW5nCisgICAgICAgICAg ICAgICAgc2VsZi5jaGVja19uZWVkZWRfY29uZmlybWF0aW9uc19iZWZvcmVfY2xvc2luZ19wYW5l bCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IC8vU2F2 ZQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2Vfb25fc2F2ZSA9IHRydWU7CisgICAgICAgICAg ICAgICAgaWYodGhpcy5pc191bnNhdmVkX2RhdGEpIHsKKyAgICAgICAgICAgICAgICAgIHNlbGYu X3NhdmVfZGF0YShzZWxmLmdyaWRWaWV3KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICBzZWxmLl9zYXZlX2ZpbGUoKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgICAgIGFsZXJ0aWZ5 LmNvbmZpcm1TYXZlKGdldHRleHQoJ1NhdmUgY2hhbmdlcz8nKSwgbXNnLCBpc191bnNhdmVkX2Rh dGEpOworICAgICAgfSwKKwogICAgICAgY2xvc2U6IGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIg c2VsZiA9IHRoaXM7CiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9z dGF0aWMvc2Nzcy9fc3FsZWRpdG9yLnNjc3MgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Iv c3RhdGljL3Njc3MvX3NxbGVkaXRvci5zY3NzCmluZGV4IGViZjViMTgwLi40YjI1Njg0NiAxMDA2 NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9zY3NzL19zcWxlZGl0 b3Iuc2NzcworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL3Njc3MvX3Nx bGVkaXRvci5zY3NzCkBAIC0yMDksNiArMjA5LDEzIEBAIGxpLkNvZGVNaXJyb3ItaGludC1hY3Rp dmUgewogICBjb2xvcjogJHRleHQtbXV0ZWQ7CiB9CiAKKy8qIEhpZ2hsaWdodGVkIChtb2RpZmll ZCBvciBuZXcpIGNlbGwgKi8KKy5ncmlkLWNhbnZhcyAuaGlnaGxpZ2h0ZWRfZ3JpZF9jZWxscyB7 CisgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRlZC1ncmlkLWNlbGw7CisgIGZvbnQtd2Vp Z2h0OiBib2xkOworfQorCisKIC8qIE92ZXJyaWRlIHNlbGVjdGVkIHJvdyBjb2xvciAqLwogI2Rh dGFncmlkIC5zbGljay1yb3cgLnNsaWNrLWNlbGwuc2VsZWN0ZWQgewogICAgIGJhY2tncm91bmQt Y29sb3I6ICR0YWJsZS1iZy1zZWxlY3RlZDsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz 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 MDAwMDAwLi4wY2Y3NjEyZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3Nx bGVkaXRvci91dGlscy9zYXZlX2NoYW5nZWRfZGF0YS5weQpAQCAtMCwwICsxLDMxOCBAQAorIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBD b3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE5LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisj IFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQor IworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRl Citmcm9tIHBnYWRtaW4udG9vbHMuc3FsZWRpdG9yLnV0aWxzLmNvbnN0YW50X2RlZmluaXRpb24g aW1wb3J0IFRYX1NUQVRVU19JRExFCit0cnk6CisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQg T3JkZXJlZERpY3QKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIG9yZGVyZWRkaWN0IGlt cG9ydCBPcmRlcmVkRGljdAorCisKK2RlZiBzYXZlX2NoYW5nZWRfZGF0YShjaGFuZ2VkX2RhdGEs IGNvbHVtbnNfaW5mbywgY29ubiwgY29tbWFuZF9vYmosCisgICAgICAgICAgICAgICAgICAgICAg Y2xpZW50X3ByaW1hcnlfa2V5LCBhdXRvX2NvbW1pdD1UcnVlKToKKyAgICAiIiIKKyAgICBUaGlz IGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2F2ZSB0aGUgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZS4KKyAg ICBEZXBlbmRpbmcgb24gY29uZGl0aW9uIGl0IHdpbGwgZWl0aGVyIHVwZGF0ZSBvciBpbnNlcnQg dGhlCisgICAgbmV3IHJvdyBpbnRvIHRoZSBkYXRhYmFzZS4KKworICAgIEFyZ3M6CisgICAgICAg IGNoYW5nZWRfZGF0YTogQ29udGFpbnMgZGF0YSB0byBiZSBzYXZlZAorICAgICAgICBjb21tYW5k X29iajogVGhlIHRyYW5zYWN0aW9uIG9iamVjdCAoY29tbWFuZF9vYmogb3IgdHJhbnNfb2JqKQor ICAgICAgICBjb25uOiBUaGUgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgY29sdW1uc19pbmZv OiBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10KKyAgICAgICAgY2xpZW50X3ByaW1hcnlfa2V5 OiBzZXNzaW9uX29ialsnY2xpZW50X3ByaW1hcnlfa2V5J10KKyAgICAgICAgYXV0b19jb21taXQ6 IElmIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBjb21taXRlZCBhdXRvbWF0aWNhbGx5LgorICAgICIi IgorICAgIHN0YXR1cyA9IEZhbHNlCisgICAgcmVzID0gTm9uZQorICAgIHF1ZXJ5X3JlcyA9IGRp Y3QoKQorICAgIGNvdW50ID0gMAorICAgIGxpc3Rfb2Zfcm93aWQgPSBbXQorICAgIG9wZXJhdGlv bnMgPSAoJ2FkZGVkJywgJ3VwZGF0ZWQnLCAnZGVsZXRlZCcpCisgICAgbGlzdF9vZl9zcWwgPSB7 fQorICAgIF9yb3dpZCA9IE5vbmUKKyAgICBpc19jb21taXRfcmVxdWlyZWQgPSBGYWxzZQorCisg ICAgcGdhZG1pbl9hbGlhcyA9IHsKKyAgICAgICAgY29sX25hbWU6IGNvbF9pbmZvWydwZ2FkbWlu X2FsaWFzJ10KKyAgICAgICAgZm9yIGNvbF9uYW1lLCBjb2xfaW5mbyBpbiBjb2x1bW5zX2luZm8K KyAgICAgICAgICAgIC5pdGVtcygpCisgICAgfQorCisgICAgaWYgY29ubi5jb25uZWN0ZWQoKToK KyAgICAgICAgaXNfc2F2ZXBvaW50ID0gRmFsc2UKKyAgICAgICAgIyBTdGFydCB0aGUgdHJhbnNh Y3Rpb24gaWYgdGhlIHNlc3Npb24gaXMgaWRsZQorICAgICAgICBpZiBjb25uLnRyYW5zYWN0aW9u X3N0YXR1cygpID09IFRYX1NUQVRVU19JRExFOgorICAgICAgICAgICAgY29ubi5leGVjdXRlX3Zv aWQoJ0JFR0lOOycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uLmV4ZWN1dGVfdm9p ZCgnU0FWRVBPSU5UIHNhdmVfZGF0YTsnKQorICAgICAgICAgICAgaXNfc2F2ZXBvaW50ID0gVHJ1 ZQorCisgICAgICAgICMgSXRlcmF0ZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyB0byBiZSB1cGRh dGVkL2luc2VydGVkCisgICAgICAgIGZvciBvZl90eXBlIGluIGNoYW5nZWRfZGF0YToKKyAgICAg ICAgICAgICMgTm8gbmVlZCB0byBnbyBmdXJ0aGVyIGlmIGl0cyBub3QgYWRkL3VwZGF0ZS9kZWxl dGUgb3BlcmF0aW9uCisgICAgICAgICAgICBpZiBvZl90eXBlIG5vdCBpbiBvcGVyYXRpb25zOgor ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIGlmIG5vIGRhdGEgdG8gYmUg c2F2ZSB0aGVuIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsZW4oY2hhbmdlZF9kYXRhW29mX3R5 cGVdKSA8IDE6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgY29sdW1u X3R5cGUgPSB7fQorICAgICAgICAgICAgY29sdW1uX2RhdGEgPSB7fQorICAgICAgICAgICAgZm9y IGVhY2hfY29sIGluIGNvbHVtbnNfaW5mbzoKKyAgICAgICAgICAgICAgICBpZiAoCisgICAgICAg ICAgICAgICAgICAgIGNvbHVtbnNfaW5mb1tlYWNoX2NvbF1bJ25vdF9udWxsJ10gYW5kCisgICAg ICAgICAgICAgICAgICAgIG5vdCBjb2x1bW5zX2luZm9bZWFjaF9jb2xdWydoYXNfZGVmYXVsdF92 YWwnXQorICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRh W2VhY2hfY29sXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uX3R5cGVbZWFjaF9j b2xdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc19pbmZvW2VhY2hfY29sXVsn dHlwZV9uYW1lJ10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBj b2x1bW5fdHlwZVtlYWNoX2NvbF0gPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5z X2luZm9bZWFjaF9jb2xdWyd0eXBlX25hbWUnXQorCisgICAgICAgICAgICAjIEZvciBuZXdseSBh ZGRlZCByb3dzCisgICAgICAgICAgICBpZiBvZl90eXBlID09ICdhZGRlZCc6CisgICAgICAgICAg ICAgICAgIyBQeXRob24gZGljdCBkb2VzIG5vdCBob25vdXIgdGhlIGluc2VydGVkIGl0ZW0gb3Jk ZXIKKyAgICAgICAgICAgICAgICAjIFNvIHRvIGluc2VydCBkYXRhIGluIHRoZSBvcmRlciwgd2Ug bmVlZCB0byBtYWtlIG9yZGVyZWQKKyAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgYWRkZWQgaW5k ZXggV2UgZG9uJ3QgbmVlZCB0aGlzIG1lY2hhbmlzbSBpbgorICAgICAgICAgICAgICAgICMgdXBk YXRlZC9kZWxldGVkIHJvd3MgYXMgaXQgZG9lcyBub3QgbWF0dGVyIGluCisgICAgICAgICAgICAg ICAgIyB0aG9zZSBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgYWRkZWRfaW5kZXggPSBPcmRl cmVkRGljdCgKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkKAorICAgICAgICAgICAgICAgICAg ICAgICAgY2hhbmdlZF9kYXRhWydhZGRlZF9pbmRleCddLml0ZW1zKCksCisgICAgICAgICAgICAg ICAgICAgICAgICBrZXk9bGFtYmRhIHg6IGludCh4WzBdKQorICAgICAgICAgICAgICAgICAgICAp CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsW29mX3R5cGVd ID0gW10KKworICAgICAgICAgICAgICAgICMgV2hlbiBuZXcgcm93cyBhcmUgYWRkZWQsIG9ubHkg Y2hhbmdlZCBjb2x1bW5zIGRhdGEgaXMKKyAgICAgICAgICAgICAgICAjIHNlbnQgZnJvbSBjbGll bnQgc2lkZS4gQnV0IGlmIGNvbHVtbiBpcyBub3RfbnVsbCBhbmQgaGFzCisgICAgICAgICAgICAg ICAgIyBub19kZWZhdWx0X3ZhbHVlLCBzZXQgY29sdW1uIHRvIGJsYW5rLCBpbnN0ZWFkCisgICAg ICAgICAgICAgICAgIyBvZiBub3QgbnVsbCB3aGljaCBpcyBzZXQgYnkgZGVmYXVsdC4KKyAgICAg ICAgICAgICAgICBjb2x1bW5fZGF0YSA9IHt9CisgICAgICAgICAgICAgICAgcGtfbmFtZXMsIHBy aW1hcnlfa2V5cyA9IGNvbW1hbmRfb2JqLmdldF9wcmltYXJ5X2tleXMoKQorICAgICAgICAgICAg ICAgIGhhc19vaWRzID0gJ29pZCcgaW4gY29sdW1uX3R5cGUKKworICAgICAgICAgICAgICAgIGZv ciBlYWNoX3JvdyBpbiBhZGRlZF9pbmRleDoKKyAgICAgICAgICAgICAgICAgICAgIyBHZXQgdGhl IHJvdyBpbmRleCB0byBtYXRjaCB3aXRoIHRoZSBhZGRlZCByb3dzCisgICAgICAgICAgICAgICAg ICAgICMgZGljdCBrZXkKKyAgICAgICAgICAgICAgICAgICAgdG1wX3Jvd19pbmRleCA9IGFkZGVk X2luZGV4W2VhY2hfcm93XQorICAgICAgICAgICAgICAgICAgICBkYXRhID0gY2hhbmdlZF9kYXRh W29mX3R5cGVdW3RtcF9yb3dfaW5kZXhdWydkYXRhJ10KKyAgICAgICAgICAgICAgICAgICAgIyBS ZW1vdmUgb3VyIHVuaXF1ZSB0cmFja2luZyBrZXkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5w b3AoY2xpZW50X3ByaW1hcnlfa2V5LCBOb25lKQorICAgICAgICAgICAgICAgICAgICBkYXRhLnBv cCgnaXNfcm93X2NvcGllZCcsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfcm93 aWQuYXBwZW5kKGRhdGEuZ2V0KGNsaWVudF9wcmltYXJ5X2tleSkpCisKKyAgICAgICAgICAgICAg ICAgICAgIyBVcGRhdGUgY29sdW1ucyB2YWx1ZSB3aXRoIGNvbHVtbnMgaGF2aW5nCisgICAgICAg ICAgICAgICAgICAgICMgbm90X251bGw9RmFsc2UgYW5kIGhhcyBubyBkZWZhdWx0IHZhbHVlCisg ICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhLnVwZGF0ZShkYXRhKQorCisgICAgICAgICAg ICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAg ICIvIi5qb2luKFtjb21tYW5kX29iai5zcWxfcGF0aCwgJ2luc2VydC5zcWwnXSksCisgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhX3RvX2JlX3NhdmVkPWNvbHVtbl9kYXRhLAorICAgICAgICAg ICAgICAgICAgICAgICAgcGdhZG1pbl9hbGlhcz1wZ2FkbWluX2FsaWFzLAorICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbWFyeV9rZXlzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBv YmplY3RfbmFtZT1jb21tYW5kX29iai5vYmplY3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIG5zcF9uYW1lPWNvbW1hbmRfb2JqLm5zcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YV90eXBlPWNvbHVtbl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgcGtfbmFt ZXM9cGtfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNfb2lkcz1oYXNfb2lkcwor ICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0X3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtjb21t YW5kX29iai5zcWxfcGF0aCwgJ3NlbGVjdC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICBvYmplY3RfbmFtZT1jb21tYW5kX29iai5vYmplY3RfbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgIG5zcF9uYW1lPWNvbW1hbmRfb2JqLm5zcF9uYW1lLAorICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbWFyeV9rZXlzPXByaW1hcnlfa2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAg IGhhc19vaWRzPWhhc19vaWRzCisgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAg ICAgICAgICBsaXN0X29mX3NxbFtvZl90eXBlXS5hcHBlbmQoeworICAgICAgICAgICAgICAgICAg ICAgICAgJ3NxbCc6IHNxbCwgJ2RhdGEnOiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAg J2NsaWVudF9yb3cnOiB0bXBfcm93X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nl bGVjdF9zcWwnOiBzZWxlY3Rfc3FsCisgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAg ICAgICAgICAgICMgUmVzZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgY29sdW1u X2RhdGEgPSB7fQorCisgICAgICAgICAgICAjIEZvciB1cGRhdGVkIHJvd3MKKyAgICAgICAgICAg IGVsaWYgb2ZfdHlwZSA9PSAndXBkYXRlZCc6CisgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxb b2ZfdHlwZV0gPSBbXQorICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBjaGFuZ2VkX2Rh dGFbb2ZfdHlwZV06CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjaGFuZ2VkX2RhdGFbb2Zf dHlwZV1bZWFjaF9yb3ddWydkYXRhJ10KKyAgICAgICAgICAgICAgICAgICAgcGtfZXNjYXBlZCA9 IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrOiBwa192YWwucmVwbGFjZSgnJScsICclJScp CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGssIHBrX3ZhbCBpbgorICAgICAgICAgICAg ICAgICAgICAgICAgY2hhbmdlZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XVsncHJpbWFyeV9rZXlz J10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXRlbXMoKQorICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtjb21tYW5kX29iai5zcWxfcGF0aCwgJ3VwZGF0 ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2JlX3NhdmVkPWRhdGEs CisgICAgICAgICAgICAgICAgICAgICAgICBwZ2FkbWluX2FsaWFzPXBnYWRtaW5fYWxpYXMsCisg ICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleXM9cGtfZXNjYXBlZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIG9iamVjdF9uYW1lPWNvbW1hbmRfb2JqLm9iamVjdF9uYW1lLAorICAg ICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9Y29tbWFuZF9vYmoubnNwX25hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU9Y29sdW1uX3R5cGUKKyAgICAgICAgICAgICAg ICAgICAgKQorICAgICAgICAgICAgICAgICAgICBsaXN0X29mX3NxbFtvZl90eXBlXS5hcHBlbmQo eydzcWwnOiBzcWwsICdkYXRhJzogZGF0YX0pCisgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zf cm93aWQuYXBwZW5kKGRhdGEuZ2V0KGNsaWVudF9wcmltYXJ5X2tleSkpCisKKyAgICAgICAgICAg ICMgRm9yIGRlbGV0ZWQgcm93cworICAgICAgICAgICAgZWxpZiBvZl90eXBlID09ICdkZWxldGVk JzoKKyAgICAgICAgICAgICAgICBsaXN0X29mX3NxbFtvZl90eXBlXSA9IFtdCisgICAgICAgICAg ICAgICAgaXNfZmlyc3QgPSBUcnVlCisgICAgICAgICAgICAgICAgcm93c190b19kZWxldGUgPSBb XQorICAgICAgICAgICAgICAgIGtleXMgPSBOb25lCisgICAgICAgICAgICAgICAgbm9fb2Zfa2V5 cyA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgZWFjaF9yb3cgaW4gY2hhbmdlZF9kYXRhW29m X3R5cGVdOgorICAgICAgICAgICAgICAgICAgICByb3dzX3RvX2RlbGV0ZS5hcHBlbmQoY2hhbmdl ZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XSkKKyAgICAgICAgICAgICAgICAgICAgIyBGZXRjaCB0 aGUga2V5cyBmb3IgU1FMIGdlbmVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNfZmly c3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gY292ZXJ0IGRpY3Rfa2V5 cyB0byBub3JtYWwgbGlzdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQeXRob24zCisg ICAgICAgICAgICAgICAgICAgICAgICAjIEluIFB5dGhvbjIsIGl0J3MgYWxyZWFkeSBhIGxpc3Qg JiBXZSB3aWxsIGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgICMgZmV0Y2ggY29sdW1uIG5h bWVzIHVzaW5nIGluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0gbGlzdCgKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3dd LmtleXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAg ICAgbm9fb2Zfa2V5cyA9IGxlbihrZXlzKQorICAgICAgICAgICAgICAgICAgICAgICAgaXNfZmly c3QgPSBGYWxzZQorICAgICAgICAgICAgICAgICMgTWFwIGluZGV4IHdpdGggY29sdW1uIG5hbWUg Zm9yIGVhY2ggcm93CisgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByb3dzX3RvX2RlbGV0ZToK KyAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gcm93Lml0ZW1zKCk6CisgICAgICAgICAg ICAgICAgICAgICAgICAjIFNldCBwcmltYXJ5IGtleSB3aXRoIGxhYmVsICYgZGVsZXRlIGluZGV4 IGJhc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAjIG1hcHBlZCBrZXkKKyAgICAgICAgICAg ICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY2hhbmdl ZF9kYXRhWydjb2x1bW5zJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgW2ludChrKV1bJ25hbWUnXV0gPSB2CisgICAgICAgICAgICAgICAgICAgICAgICBleGNl cHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAg ICAgICAgICAgICAgICAgICAgICAgZGVsIHJvd1trXQorCisgICAgICAgICAgICAgICAgc3FsID0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbY29tbWFuZF9v Ymouc3FsX3BhdGgsICdkZWxldGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICBkYXRhPXJv d3NfdG9fZGVsZXRlLAorICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2tleV9sYWJlbHM9a2V5 cywKKyAgICAgICAgICAgICAgICAgICAgbm9fb2Zfa2V5cz1ub19vZl9rZXlzLAorICAgICAgICAg ICAgICAgICAgICBvYmplY3RfbmFtZT1jb21tYW5kX29iai5vYmplY3RfbmFtZSwKKyAgICAgICAg ICAgICAgICAgICAgbnNwX25hbWU9Y29tbWFuZF9vYmoubnNwX25hbWUKKyAgICAgICAgICAgICAg ICApCisgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWxbb2ZfdHlwZV0uYXBwZW5kKHsnc3FsJzog c3FsLCAnZGF0YSc6IHt9fSkKKworICAgICAgICBmb3Igb3ByLCBzcWxzIGluIGxpc3Rfb2Zfc3Fs Lml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgaXRlbSBpbiBzcWxzOgorICAgICAgICAgICAgICAg IGlmIGl0ZW1bJ3NxbCddOgorICAgICAgICAgICAgICAgICAgICBpdGVtWydkYXRhJ10gPSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwZ2FkbWluX2FsaWFzW2tdIGlmIGsgaW4gcGdhZG1pbl9h bGlhcyBlbHNlIGs6IHYKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIGl0ZW1b J2RhdGEnXS5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg ICAgICByb3dfYWRkZWQgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIGZhaWx1cmVf aGFuZGxlKHJlcyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc19zYXZlcG9pbnQ6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ1JPTExCQUNLIFRP IFNBVkVQT0lOVCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3NhdmVfZGF0YTsnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdRdWVy eSBST0xMQkFDSywgYnV0IHRoZSBjdXJyZW50ICcgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICd0cmFuc2FjdGlvbiBpcyBzdGlsbCBvbmdvaW5nLicKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXMgKz0gJyBTYXZpbmcgUk9MTEJBQ0ssIGJ1dCB0aGUgY3VycmVudCAn IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9uIGlzIHN0 aWxsIG9uZ29pbmcnCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbm4uZXhlY3V0ZV92b2lkKCdST0xMQkFDSzsnKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1zZyA9ICdUcmFuc2FjdGlvbiBST0xMQkFDSycKKyAgICAgICAg ICAgICAgICAgICAgICAgICMgSWYgd2Ugcm9sbCBiYWNrZWQgZXZlcnkgdGhpbmcgdGhlbiB1cGRh dGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAjIG1lc3NhZ2UgZm9yIGVhY2ggc3FsIHF1 ZXJ5LgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiBxdWVyeV9yZXM6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgcXVlcnlfcmVzW3ZhbF1bJ3N0YXR1cyddOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXNbdmFsXVsncmVzdWx0J10gPSBt c2cKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBsaXN0IGlzIGVtcHR5IHNldCByb3dp ZCB0byAxCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgbGlzdF9vZl9yb3dpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX3Jvd2lkID0gbGlzdF9vZl9yb3dpZFtjb3VudF0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcm93aWQgPSAxCisg ICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9yb3dpZCA9IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHN0YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9yb3dpZCxcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaXNfY29tbWl0X3JlcXVpcmVkCisKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAg ICAgICAgICAgICAgICAgICAgICAgIyBGZXRjaCBvaWRzL3ByaW1hcnkga2V5cworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgJ3NlbGVjdF9zcWwnIGluIGl0ZW0gYW5kIGl0ZW1bJ3NlbGVjdF9z cWwnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhl Y3V0ZV9kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtWydzcWwnXSwg aXRlbVsnZGF0YSddKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV92b2lkKAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtWydzcWwnXSwgaXRlbVsnZGF0YSddKQorICAg ICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIF86CisgICAgICAgICAgICAgICAg ICAgICAgICBmYWlsdXJlX2hhbmRsZShyZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlz ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gZmFpbHVyZV9oYW5kbGUocmVzKQorCisgICAgICAgICAgICAgICAgICAg ICMgU2VsZWN0IGFkZGVkIHJvdyBmcm9tIHRoZSB0YWJsZQorICAgICAgICAgICAgICAgICAgICBp ZiAnc2VsZWN0X3NxbCcgaW4gaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywg c2VsX3JlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGl0ZW1bJ3NlbGVjdF9zcWwnXSwgcmVzWydyb3dzJ11bMF0pCisKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNf c2F2ZXBvaW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmV4ZWN1dGVf dm9pZCgnUk9MTEJBQ0sgVE8gU0FWRVBPSU5UJworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnIHNhdmVfZGF0YTsnKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtc2cgPSAnUXVlcnkgUk9MTEJBQ0ssIHRoZSBjdXJyZW50JyBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdHJhbnNhY3Rpb24gaXMgc3RpbGwg b25nb2luZy4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ1JPTExCQUNLOycpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdUcmFuc2FjdGlvbiBST0xMQkFDSycK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIHJvbGwgYmFja2VkIGV2ZXJ5IHRo aW5nIHRoZW4gdXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgbWVzc2Fn ZSBmb3IgZWFjaCBzcWwgcXVlcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZh bCBpbiBxdWVyeV9yZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1ZXJ5 X3Jlc1t2YWxdWydzdGF0dXMnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHF1ZXJ5X3Jlc1t2YWxdWydyZXN1bHQnXSA9IG1zZworCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBJZiBsaXN0IGlzIGVtcHR5IHNldCByb3dpZCB0byAxCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaXN0 X29mX3Jvd2lkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd2lkID0g bGlzdF9vZl9yb3dpZFtjb3VudF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dpZCA9IDEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfcm93aWQgPSAwCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gc3RhdHVzLCBzZWxfcmVzLCBxdWVyeV9yZXMsIF9yb3dpZCxcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlzX2NvbW1pdF9yZXF1aXJlZAorCisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAncm93cycgaW4gc2VsX3JlcyBhbmQgbGVuKHNlbF9yZXNbJ3Jvd3MnXSkg PiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd19hZGRlZCA9IHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVsnY2xpZW50X3JvdyddOiBzZWxfcmVzWydyb3dz J11bMF19CisKKyAgICAgICAgICAgICAgICAgICAgcm93c19hZmZlY3RlZCA9IGNvbm4ucm93c19h ZmZlY3RlZCgpCisgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgdGhlIHJlc3VsdCBvZiBlYWNo IHF1ZXJ5IGluIGRpY3Rpb25hcnkKKyAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzW2NvdW50 XSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAncmVzdWx0JzogTm9uZSBpZiByb3dfYWRkZWQgZWxzZSByZXMsCisg ICAgICAgICAgICAgICAgICAgICAgICAnc3FsJzogaXRlbVsnc3FsJ10sICdyb3dzX2FmZmVjdGVk Jzogcm93c19hZmZlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyb3dfYWRkZWQnOiBy b3dfYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNv dW50ICs9IDEKKworICAgICAgICAjIENvbW1pdCB0aGUgdHJhbnNhY3Rpb24gaWYgbm8gZXJyb3Ig aXMgZm91bmQgJiBhdXRvY29tbWl0IGlzIGFjdGl2YXRlZAorICAgICAgICBpZiBhdXRvX2NvbW1p dDoKKyAgICAgICAgICAgIGNvbm4uZXhlY3V0ZV92b2lkKCdDT01NSVQ7JykKKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIGlzX2NvbW1pdF9yZXF1aXJlZCA9IFRydWUKKworICAgIHJldHVybiBz dGF0dXMsIHJlcywgcXVlcnlfcmVzLCBfcm93aWQsIGlzX2NvbW1pdF9yZXF1aXJlZApkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3V0aWxzL3N0YXJ0X3J1bm5pbmdfcXVl cnkucHkgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdXRpbHMvc3RhcnRfcnVubmluZ19x dWVyeS5weQppbmRleCBhNTM5OTc3NC4uZWNlMTFmOWMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L3Rvb2xzL3NxbGVkaXRvci91dGlscy9zdGFydF9ydW5uaW5nX3F1ZXJ5LnB5CisrKyBiL3dlYi9w Z2FkbWluL3Rvb2xzL3NxbGVkaXRvci91dGlscy9zdGFydF9ydW5uaW5nX3F1ZXJ5LnB5CkBAIC00 NSw2ICs0NSw5IEBAIGNsYXNzIFN0YXJ0UnVubmluZ1F1ZXJ5OgogICAgICAgICBpZiB0eXBlKHNl c3Npb25fb2JqKSBpcyBSZXNwb25zZToKICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uX29iagog CisgICAgICAgICMgUmVtb3ZlIGFueSBleGlzdGluZyBwcmltYXJ5IGtleXMgaW4gc2Vzc2lvbl9v YmoKKyAgICAgICAgc2Vzc2lvbl9vYmoucG9wKCdwcmltYXJ5X2tleXMnLCBOb25lKQorCiAgICAg ICAgIHRyYW5zYWN0aW9uX29iamVjdCA9IHBpY2tsZS5sb2FkcyhzZXNzaW9uX29ialsnY29tbWFu ZF9vYmonXSkKICAgICAgICAgY2FuX2VkaXQgPSBGYWxzZQogICAgICAgICBjYW5fZmlsdGVyID0g RmFsc2UKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc3FsZWRpdG9yL2Nh bGxfcmVuZGVyX2FmdGVyX3BvbGxfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQv c3FsZWRpdG9yL2NhbGxfcmVuZGVyX2FmdGVyX3BvbGxfc3BlYy5qcwppbmRleCBkNjhmNWVlMS4u NWRhZDg0NzAgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc3FsZWRpdG9y L2NhbGxfcmVuZGVyX2FmdGVyX3BvbGxfc3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L3NxbGVkaXRvci9jYWxsX3JlbmRlcl9hZnRlcl9wb2xsX3NwZWMuanMKQEAgLTM3LDcg KzM3LDcgQEAgZGVzY3JpYmUoJyNjYWxsUmVuZGVyQWZ0ZXJQb2xsJywgKCkgPT4gewogICAgICAg c3FsRWRpdG9yU3B5LmlzX3F1ZXJ5X3Rvb2wgPSBmYWxzZTsKICAgICB9KTsKIAotICAgIGRlc2Ny aWJlKCdxdWVyeSB3YXMgc3VjY2Vzc2Z1bCBidXQgaGFkIG5vIHJlc3VsdCB0byBkaXNwbGF5Jywg KCkgPT4geworICAgIGRlc2NyaWJlKCdxdWVyeSB3YXMgc3VjY2Vzc2Z1bCBhbmQgaGF2ZSByZXN1 bHRzJywgKCkgPT4gewogICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CiAgICAgICAgIHF1ZXJ5UmVz dWx0ID0gewogICAgICAgICAgIHJvd3NfYWZmZWN0ZWQ6IDEwLApAQCAtNjUsNyArNjUsNyBAQCBk ZXNjcmliZSgnI2NhbGxSZW5kZXJBZnRlclBvbGwnLCAoKSA9PiB7CiAgICAgICB9KTsKICAgICB9 KTsKIAotICAgIGRlc2NyaWJlKCdxdWVyeSB3YXMgc3VjY2Vzc2Z1bCBhbmQgaGF2ZSByZXN1bHRz JywgKCkgPT4geworICAgIGRlc2NyaWJlKCdxdWVyeSB3YXMgc3VjY2Vzc2Z1bCBidXQgaGFkIG5v IHJlc3VsdCB0byBkaXNwbGF5JywgKCkgPT4gewogICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CiAg ICAgICAgIHF1ZXJ5UmVzdWx0ID0gewogICAgICAgICAgIHJvd3NfYWZmZWN0ZWQ6IDEwLApAQCAt ODEsNyArODEsNyBAQCBkZXNjcmliZSgnI2NhbGxSZW5kZXJBZnRlclBvbGwnLCAoKSA9PiB7CiAg ICAgICAgIGV4cGVjdChzcWxFZGl0b3JTcHkudXBkYXRlX21zZ19oaXN0b3J5KS50b0hhdmVCZWVu Q2FsbGVkV2l0aCgKICAgICAgICAgICB0cnVlLAogICAgICAgICAgICdTb21lIHJlc3VsdFxuXG5R dWVyeSByZXR1cm5lZCBzdWNjZXNzZnVsbHkgaW4gMCBtc2VjLicsCi0gICAgICAgICAgZmFsc2UK KyAgICAgICAgICB0cnVlCiAgICAgICAgICk7CiAgICAgICB9KTsKIApAQCAtMTE2LDcgKzExNiw3 IEBAIGRlc2NyaWJlKCcjY2FsbFJlbmRlckFmdGVyUG9sbCcsICgpID0+IHsKICAgICAgIHNxbEVk aXRvclNweS5pc19xdWVyeV90b29sID0gdHJ1ZTsKICAgICB9KTsKIAotICAgIGRlc2NyaWJlKCdx dWVyeSB3YXMgc3VjY2Vzc2Z1bCBidXQgaGFkIG5vIHJlc3VsdCB0byBkaXNwbGF5JywgKCkgPT4g eworICAgIGRlc2NyaWJlKCdxdWVyeSB3YXMgc3VjY2Vzc2Z1bCBhbmQgaGF2ZSByZXN1bHRzJywg KCkgPT4gewogICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CiAgICAgICAgIHF1ZXJ5UmVzdWx0ID0g ewogICAgICAgICAgIHJvd3NfYWZmZWN0ZWQ6IDEwLApAQCAtMTUwLDcgKzE1MCw3IEBAIGRlc2Ny aWJlKCcjY2FsbFJlbmRlckFmdGVyUG9sbCcsICgpID0+IHsKICAgICAgIH0pOwogICAgIH0pOwog Ci0gICAgZGVzY3JpYmUoJ3F1ZXJ5IHdhcyBzdWNjZXNzZnVsIGFuZCBoYXZlIHJlc3VsdHMnLCAo KSA9PiB7CisgICAgZGVzY3JpYmUoJ3F1ZXJ5IHdhcyBzdWNjZXNzZnVsIGJ1dCBoYWQgbm8gcmVz dWx0IHRvIGRpc3BsYXknLCAoKSA9PiB7CiAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKICAgICAg ICAgcXVlcnlSZXN1bHQgPSB7CiAgICAgICAgICAgcm93c19hZmZlY3RlZDogMTAsCkBAIC0xNjYs NyArMTY2LDcgQEAgZGVzY3JpYmUoJyNjYWxsUmVuZGVyQWZ0ZXJQb2xsJywgKCkgPT4gewogICAg ICAgICBleHBlY3Qoc3FsRWRpdG9yU3B5LnVwZGF0ZV9tc2dfaGlzdG9yeSkudG9IYXZlQmVlbkNh bGxlZFdpdGgoCiAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAnU29tZSByZXN1bHRcblxuUXVl cnkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5IGluIDAgbXNlYy4nLAotICAgICAgICAgIGZhbHNlCisg ICAgICAgICAgdHJ1ZQogICAgICAgICApOwogICAgICAgfSk7CiAK --00000000000000762d058c0b3824--