Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b0m0c-00034O-0O for pgadmin-hackers@arkaria.postgresql.org; Thu, 12 May 2016 08:30:14 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1b0m0b-0006lp-6b for pgadmin-hackers@arkaria.postgresql.org; Thu, 12 May 2016 08:30:13 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1b0ZC1-0000CZ-19 for pgadmin-hackers@postgresql.org; Wed, 11 May 2016 18:49:09 +0000 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1b0ZBr-0006Ds-NC for pgadmin-hackers@postgresql.org; Wed, 11 May 2016 18:49:07 +0000 Received: by mail-wm0-x232.google.com with SMTP id g17so35248177wme.0 for ; Wed, 11 May 2016 11:48:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=Aa65aimI8QHt2v9mCcljP6lS6y9gyl/efS4xDeLIDIA=; b=gYmlgIikutpX40+69ZqjMlc9muKrVeXHZXHXQ8n0+1B+LixS1BmNsdLFGqhIgVbpKj LlHMLKzdBd85b7fp50r68an3CF6y5ap1Z8I8BC3xpzrm0eqvbJEJr2ZJxtNdlAF6Xett DaSviq8w75z3tzcpZFj9dwVcBUmJ+AD1HBOWoCuMMJu44S1fg9fF+10r7bUmWeb8rtZg fxLBPH6tcaEcPXW0Lgy+0uy7eKKwl0jt6Dm9druV9dte7Io4RtQzZeKxZJkJKPR8PKYK 2cpPL5yvrVQINzXXz5hnnBvDi0Do5YdoV+omiNnQkTQcp47+uYdYRzGms2ZxdmkDInaL cD6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=Aa65aimI8QHt2v9mCcljP6lS6y9gyl/efS4xDeLIDIA=; b=WKdWsPMviplazVdVuVHin/oE/ezR251VF+1CtRw/uiTZ9+Apf9XGfQBADL2MFDHVSO OBqzwDL9KCjRgENjp0G9vUFyO2ECU68R9B9lTGCtJHJ77OgFEnwiILtCA3Kbz9d8pON8 KoxRmN9fwLTH8Ez18cdgfKuiPGTQQFY2CYWPESXO0sj1cqTf1kARmbE0kxXBB9w2/kX9 BGhIuC0bPfw6U+yfAZ50pPhNiN+B5haXKg5TGLrxEVuesISjoJjSWkYWzy9BeLNBugJc C9qflWp68evigC1FhfYCeZhmhZWpqifRViKcoSdMe9aUgArYisNTC8Fv9wUY7gVupdMS Lb7Q== X-Gm-Message-State: AOPr4FVjc4o3KDpZ3JwKk3po1+k+1WqoEUcREYsjh7OU7u2K40wZpfK9TSxuxEKLYSdeFb/bjF4uPW3BvGDDSoUv X-Received: by 10.28.216.83 with SMTP id p80mr1719877wmg.49.1462992537707; Wed, 11 May 2016 11:48:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.14.212 with HTTP; Wed, 11 May 2016 11:48:27 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Thu, 12 May 2016 00:18:27 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch]: File Manager & Backform FileControl To: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a11469060857bcb0532957eb0 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a11469060857bcb0532957eb0 Content-Type: multipart/alternative; boundary=001a11469060857bc50532957eae --001a11469060857bc50532957eae Content-Type: text/plain; charset=UTF-8 Hi, PFA updated patch with following issues fixed: 1. not listing files based on default file type selected. 2. load css file using 'get_own_stylesheets' method instead of loading from 'base.html'. 3. setting custom dialog title and button not working. On Wed, May 11, 2016 at 3:03 PM, Surinder Kumar < surinder.kumar@enterprisedb.com> wrote: > > ---------- Forwarded message ---------- > From: Surinder Kumar > Date: Tue, May 10, 2016 at 11:43 PM > Subject: Re: [pgadmin-hackers][pgAdmin4][Patch]: File Manager & Backform > FileControl > To: Neel Patel > Cc: pgadmin-hackers > > > Hi, > > Please find updated path with couple of review comments given by Ashesh > Vashi. > 1. Add variable *STORAGE_DIR* in configuration settings which decides the > directory to list when *File manager* is opens, previously > we have provided this option in preferences which is removed due to > security issues. > 2. List all available Volumes by default when *STORAGE_DIR *is set to > empty for *Windows* platform. > 3. Also, added support to allow user to provide > *Dialog title and custom name for primary(OK) button,* > > Usage: > > 1. Set variable *STORAGE_DIR *to some value in config.py. > 2. Import it in your module as following: > * import config* > * config.**STORAGE_DIR* > > *Usage*: Backform FilleControl > > schema:[{ > id: 'select_file', label: '{{ _('Select File')}}', > type: 'text', *control*: *Backform.FileControl*, > *dialog_type: '*select_file*'*, *supp_types: [*'*', 'pdf', 'text', > 'patch', 'py'*],* > * dialog_title: '*Title to appear on dialog*", * > * btn_primary: '*Save File*'* > }] > > Please review the patch. > > On Wed, May 4, 2016 at 6:35 PM, Surinder Kumar < > surinder.kumar@enterprisedb.com> wrote: > >> Hi >> >> PFA updated patch with resolved review comments. >> >> On Thu, Apr 28, 2016 at 6:39 PM, Neel Patel >> wrote: >> >>> Hi Surinder, >>> >>> Please find additional comments as below. >>> >>> 1. In Windows OS, when we try to open the dialog with default >>> preference value then it gives error as below. >>> >>> 2016-04-28 13:07:44,716: ERROR pgadmin: Exception on >>> /file_manager/filemanager/2530270/ [POST] >>> Traceback (most recent call last): >>> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", >>> line 1817, in wsgi_app >>> response = self.full_dispatch_request() >>> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", >>> line 1477, in full_dispatch_request >>> rv = self.handle_user_exception(e) >>> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", >>> line 1381, in handle_user_exception >>> reraise(exc_type, exc_value, tb) >>> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", >>> line 1475, in full_dispatch_request >>> rv = self.dispatch_request() >>> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.py", >>> line 1461, in dispatch_request >>> return self.view_functions[rule.endpoint](**req.view_args) >>> File "C:\Projects\venv_python_2_7\Lib\site-packages\flask_login.py", >>> line 758, in decorated_view >>> return func(*args, **kwargs) >>> File "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", >>> line 629, in file_manager >>> return getattr(myFilemanager, mode)(**kwargs) >>> File "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", >>> line 421, in getfolder >>> filelist = self.list_filesystem(dir, path, trans_data, file_type) >>> File "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", >>> line 331, in list_filesystem >>> for f in sorted(os.listdir(orig_path)): >>> WindowsError: [Error 161] The specified path is invalid: '//*.*' >>> >>> Now the default path will always be the users directory. I have used *os.path.expanduser('~') >> *which prints user directory. It works for all operating systems. >> >>> >>> 2. Folder having write only permission should not allow to read the >>> directory. Same way read only permission folder should not allow to create >>> the folder. Currently it gives below error. >>> >>> PermissionError: [Errno 13] Permission denied: >>> '/home/neel/Projects/pgadmin4_file_manager/write_only_premission/' >>> >> Fixed. >> >>> >>> 3. In Windows OS, when we open the file manager dialog, no directories >>> listed though we have directories in the folder. Due to that we are not >>> able to >>> test all the functionality in windows. Once we fix this issue then >>> we test all the functionality in windows OS. >>> >>> We debug the issue and found that issue is with the json response >>> which includes the HTML tags. >>> >> Fixed. It still have issues in very older browsers. I will fix it. >> >>> >>> 4. In Windows OS, file manager dialog have issue with layout. We are >>> getting some margin at top before buttons. >>> >> Fixed. >> >>> >>> 5. When we give any special characters to folder name that it gives >>> error saying "Folder does not exist". >>> Same is applicable when we give dialog_type to create_file >>> >> Fixed. >> >>> >>> 6. In create_file mode, after giving the filename it should display the >>> name of the file to text control. >>> >> Fixed. >> >>> >>> 7. In create_file mode, when user gives the filename and click on the >>> any blank area of dialog then name is getting cleared. >>> >> Fixed. >> >>> >>> 8. When we upload the new file through file manager then it is not >>> showing in the list though we have selected "All files" options. >>> >> Fixed. >> >>> >>> 9. When we rename the folder in "Table mode" then font-family gets >>> changed. It is not happened in "Grid" mode. >>> >> Fixed. >> >>> >>> 10. When we try to download the file then it goes into loop and opens up >>> 20-30 dialogs at the same time. >>> >> Fixed. >> >>> >>> 11. "Rename" button is enabled even though we have not selected the >>> files/folder to rename and when we click on the "Rename" button it gives >>> below >>> error. >>> >>> TypeError: orig_value is undefined >>> >> Fixed. >> >>> 12. "Delete" button is enabled even though we have not selected the >>> files/folder to delete and when we click on the "Delete" button it gives >>> below error. >>> TypeError: path is undefined >>> >> Fixed. >> >>> >>> Do let us know if you have queries. >>> >>> Thanks, >>> Neel Patel >>> >>> On Wed, Apr 27, 2016 at 9:15 PM, Neel Patel >> > wrote: >>> >>>> Hi Surinder, >>>> >>>> I have applied the patch file and below are some observations. >>>> >>>> - When we create the new folder and hit the enter then we are >>>> getting the below error. >>>> >>>> TypeError: argument of type 'NoneType' is not iterable >>>> >>>> - I have just added the new control in "Import" dialog and observed >>>> that new control is getting added in new tab called "General". I think it >>>> should not create the new "General" tab. >>>> - "Select" and "Cancel" buttons font is different then other >>>> dialogs. >>>> >>>> >>>> Thanks, >>>> Neel Patel >>>> >>>> On Wed, Apr 27, 2016 at 6:18 PM, Surinder Kumar < >>>> surinder.kumar@enterprisedb.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> The patch is for *File Manager and Backform FileControl*. >>>>> >>>>> *File Manager:* It allows user to store their files at one place. The >>>>> user can set path to this directory in preferences which file manger will >>>>> use. >>>>> >>>>> It will be used by various modules of pgAdmin4 such as >>>>> *import data from file, query tool, backup & recovery tool* so on.. >>>>> It allows user to perform various operations such as: >>>>> >>>>> - File deletion >>>>> - File upload >>>>> - Create new directory >>>>> - File rename >>>>> - File download and >>>>> - List files & folders in list and grid view. >>>>> >>>>> *FileControl: *This control is used with *File Manager. *It can be >>>>> used for: >>>>> >>>>> - File Selection >>>>> - Folder Selection >>>>> - File Creation >>>>> - Storage Manager Dialog.( it supports all operations listed >>>>> above). >>>>> >>>>> >>>>> Usage*:* >>>>> >>>>> schema:[{ >>>>> id: 'select_file', label: '{{ _('Select File')}}', >>>>> type: 'text', *control*: *Backform.FileControl*, >>>>> *dialog_type: 'select_file'*, *supp_types: ['*', 'pdf', 'text', >>>>> 'patch', 'py']* >>>>> } >>>>> >>>>> Where: >>>>> >>>>> - *control* - It should be *Backform.FileControl* >>>>> - *dialog_type *- the type of dialog to use. >>>>> - options can be: *select_file, select_folder, create_file & >>>>> storage_dialog*. >>>>> - *supp_types(*not mandatory) - the types of files allowed to show >>>>> and upload. >>>>> >>>>> Please review the patch and let me know for the review comments. >>>>> >>>>> >>>>> Thanks >>>>> Surinder Kumar >>>>> >>>>> >>>>> -- >>>>> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) >>>>> To make changes to your subscription: >>>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>>> >>>>> >>>> >>> >> > > --001a11469060857bc50532957eae Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

PFA updated patch with following is= sues fixed:
1. not listing files based on default file type selec= ted.
2. load css file using 'get_own_stylesheets' method = instead of loading from 'base.html'.
3. setting custom di= alog title and button not working.
On Wed, May 11, 2016 at 3:03 PM, Surinder Kuma= r <surinder.kumar@enterprisedb.com> wrote:
=

---------- Forwarded message --= --------
From: Surinder Kumar <surinder.kumar@enterprisedb.com>
Date: Tue, May 10= , 2016 at 11:43 PM
Subject: Re: [pgadmin-hackers][pgAdmin4][Patch]: File= Manager & Backform FileControl
To: Neel Patel <neel.patel@enterprisedb.com= >
Cc: pgadmin-hackers <pgadmin-hackers@postgresql.org>

=
Hi,

Please find updated path with c= ouple of review comments given by Ashesh Vashi.
1. Add variable <= b>STORAGE_DIR in configuration settings which decides the directory to = list when File manager is opens, previously
we have provid= ed this option in preferences which is removed due to security issues.
2. List all available Volumes by default when=C2=A0STORAGE_DIR is set to empty for Windows platform.
3. Also, added supp= ort to allow user to provide
Dialog title and custom name for = primary(OK) button,

Usage:
1. Set variable=C2=A0STORAGE_DIR to some value=C2=A0in = config.py.
2. Import it in your module as following:
=C2=A0 =C2=A0import config
=C2=A0 =C2=A0config.STO= RAGE_DIR

Usage: Backform=C2=A0FilleCont= rol

schema:[{
=C2=A0 id: 'select_file', label:= '{{ _('Select File')}}',=C2=A0
=C2=A0 type: 'text'= ;,=C2=A0control:=C2=A0Backform.FileControl,
=C2=A0=C2= =A0dialog_type: 'select_file',=C2=A0supp_types: [<= /b>'*', 'pdf', 'text', 'patch', 'py'= ;],
=C2=A0 dialog_title: 'Title to appear on dialog&q= uot;,=C2=A0
=C2= =A0 btn_primary: 'Save File'
}]
=
Please review the patch.

On Wed, May 4, 2016 at 6:3= 5 PM, Surinder Kumar <surinder.kumar@enterprisedb.com>= ; wrote:
Hi
<= br>
PFA updated patch with resolved review comments.

On Thu, Apr 28, 20= 16 at 6:39 PM, Neel Patel <neel.patel@enterprisedb.com> wrote:
Hi Surinder,
<= br>
Please find additional comments as below.
1.=C2=A0 In Windows OS, when we try to open the dialog wit= h default preference value then it gives error as below.

2016-04-28 13:07:44,716: ERROR =C2=A0pgadmin: =C2=A0 =C2=A0 =C2=A0 = =C2=A0Exception on /file_manager/filemanager/2530270/ [POST]
Trac= eback (most recent call last):
=C2=A0 File "C:\Projects\venv= _python_2_7\Lib\site-packages\flask\app.py", line 1817, in wsgi_app
=C2=A0 =C2=A0 response =3D self.full_dispatch_request()
= =C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\app.p= y", line 1477, in full_dispatch_request
=C2=A0 =C2=A0 rv =3D= self.handle_user_exception(e)
=C2=A0 File "C:\Projects\venv= _python_2_7\Lib\site-packages\flask\app.py", line 1381, in handle_user= _exception
=C2=A0 =C2=A0 reraise(exc_type, exc_value, tb)
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-packages\flask\ap= p.py", line 1475, in full_dispatch_request
=C2=A0 =C2=A0 rv = =3D self.dispatch_request()
=C2=A0 File "C:\Projects\venv_py= thon_2_7\Lib\site-packages\flask\app.py", line 1461, in dispatch_reque= st
=C2=A0 =C2=A0 return self.view_functions[rule.endpoint](**req.= view_args)
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site= -packages\flask_login.py", line 758, in decorated_view
=C2= =A0 =C2=A0 return func(*args, **kwargs)
=C2=A0 File "C:\Proj= ects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", line 629, in= file_manager
=C2=A0 =C2=A0 return getattr(myFilemanager, mode)(*= *kwargs)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\misc\= file_manager\__init__.py", line 421, in getfolder
=C2=A0 =C2= =A0 filelist =3D self.list_filesystem(dir, path, trans_data, file_type)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\misc\file_manager= \__init__.py", line 331, in list_filesystem
=C2=A0 =C2=A0 fo= r f in sorted(os.listdir(orig_path)):
WindowsError: [Error 161] T= he specified path is invalid: '//*.*'

Now the default path will always be the users d= irectory. I have used os.path.expanduser('~') which prints u= ser directory.=C2=A0It works for all operating systems.=C2=A0

2. Fold= er having write only permission should not allow to read the directory. Sam= e way read only permission folder should not allow to create the folder. = =C2=A0 =C2=A0 Currently it gives below error.

=C2= =A0 =C2=A0PermissionError: [Errno 13] Permission denied: '/home/neel/Pr= ojects/pgadmin4_file_manager/write_only_premission/'
<= /blockquote>
Fixed.=C2=A0

3. In Windows OS, when we open the file m= anager dialog, no directories listed though we have directories in the fold= er. Due to that we are not able to=C2=A0
=C2=A0 =C2=A0 test all t= he functionality in windows. Once we fix this issue then we test all the fu= nctionality in windows OS.
=C2=A0 =C2=A0
=C2=A0 =C2=A0W= e debug the issue and found that issue is with the json response which incl= udes the HTML tags.
Fixed. It sti= ll have issues in very older browsers. I will fix it.

4. In Windows OS, file man= ager dialog have issue with layout. We are getting some margin at top befor= e buttons.
Fixed.=C2=A0

5. When we giv= e any special characters to folder name that it gives error saying "Fo= lder does not exist".
=C2=A0 =C2=A0 Same is applicable when = we give dialog_type to create_file
Fixed.=C2=A0
=C2= =A0 =C2=A0
6. In create_file mode, after giving the filename it s= hould display the name of the file to text control.
Fixed.=C2=A0

7. In create_file mode, when user gives the file= name and click on the any blank area of dialog then name is getting cleared= .
Fixed.=C2=A0

8. When we upload the n= ew file through file manager then it is not showing in the list though we h= ave selected "All files" options.
<= /span>
Fixed.=C2=A0
=

9. When we rename the folder in "Table mode" = then font-family gets changed. It is not happened in "Grid" mode.=
Fixed.=C2=A0

10. When we try to downl= oad the file then it goes into loop and opens up 20-30 dialogs at the same = time.
Fixed.=C2=A0

11. "Rename&qu= ot; button is enabled even though we have not selected the files/folder to = rename and when we click on the "Rename" button it gives below=C2= =A0
=C2=A0 =C2=A0 =C2=A0error.

=C2=A0 = =C2=A0 TypeError: orig_value is undefined
Fixed.=C2=A0
12. "Delete&= quot; button is enabled even though we have not selected the files/folder t= o delete and when we click on the "Delete" button it gives below = error.
=C2=A0 =C2=A0 =C2=A0TypeError: path is undefined
Fixed.=C2=A0

Do let us know if you have que= ries.

Thanks,
Neel Patel

On We= d, Apr 27, 2016 at 9:15 PM, Neel Patel <neel.patel@enterprisedb.= com> wrote:
Hi Surinder,=

I have applied the patch file and below are some observ= ations.
  • When we create the new folder and hit the enter t= hen we are getting the below error.
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0TypeError: argument of type = 9;NoneType' is not iterable
  • I have just added t= he new control in "Import" dialog and observed that new control i= s getting added in new tab called "General". I think it should no= t create the new "General" tab.
  • "Select" and &q= uot;Cancel" buttons font is different then other dialogs.

Thanks,
Neel Patel

On Wed, Apr 27, 2= 016 at 6:18 PM, Surinder Kumar <surinder.kumar@enterprisedb.= com> wrote:
Hi,

The patch is for File Manager and Backf= orm=C2=A0FileControl.

File Manager:<= /b>=C2=A0It allows user to store their files at one place. The user can set= path to this directory in preferences which file manger will use.

It will be used by various modules of pgAdmin4 such as
import data from file, query tool, backup & recovery tool= =C2=A0so on.. It allows user to perform various operations such as:=C2=A0
  • File deletion
  • File upload
  • Create new d= irectory
  • File rename
  • File download and=C2=A0
  • Li= st files & folders in list and grid view.
FileControl:=C2=A0This control is used with=C2=A0File Manager.= =C2=A0It=C2=A0can be used for:
  • File Selection =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
  • Folder=C2=A0Selection=C2=A0 = =C2=A0 =C2=A0=C2=A0
  • File Creation =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=C2=A0
  • Storage Manager Dialog.( it supports all op= erations listed above).

Usage:

schema:[{
=C2= =A0 id: 'select_file', label: '{{ _('Select File')}}= 9;,=C2=A0
=C2=A0 type: &= #39;text',=C2=A0control:=C2=A0Backform.FileControl,
=C2=A0=C2=A0dialog_type: &= #39;select_file',=C2=A0supp_types: ['*', 'pdf', = 'text', 'patch', 'py']
}

Where:
  • control=C2=A0- It should be=C2=A0Backform.FileControl
  • dialog_typ= e=C2=A0- the type of dialog to use.
  • options can be:=C2=A0= =C2=A0select_file, select_folder, create_file & storage_dialog.<= br>
  • supp_types(not mandatory)=C2=A0- the types of fil= es allowed to show and upload.
Please revie= w the patch and let me know for the review comments.


Thanks
Surinder K= umar


--
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers=







--001a11469060857bc50532957eae-- --001a11469060857bcb0532957eb0 Content-Type: application/octet-stream; name="FileManager_v3.patch" Content-Disposition: attachment; filename="FileManager_v3.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io37tqvq1 ZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29uZmlnLnB5Cmlu ZGV4IGJjNjdlYWQuLmJlZjIxM2IgMTAwNjQ0Ci0tLSBhL3dlYi9jb25maWcu cHkKKysrIGIvd2ViL2NvbmZpZy5weQpAQCAtMTMsNiArMTMsMTcgQEAKIAog ZnJvbSBsb2dnaW5nIGltcG9ydCAqCiBpbXBvcnQgb3MKK2ltcG9ydCBzdHJp bmcKK2Zyb20gc3lzIGltcG9ydCBwbGF0Zm9ybSBhcyBfcGxhdGZvcm0KKyMg Q2hlY2tzIGlmIHBsYXRmb3JtIGlzIFdpbmRvd3MKK2lmIF9wbGF0Zm9ybSA9 PSAid2luMzIiOgorICAgIGZyb20gY3R5cGVzIGltcG9ydCB3aW5kbGwKKwor IyB1cHBlcmNhc2Ugc3VwcG9ydGVkIGluIHB5MiwgYXNjaWlfdXBwZXJjYXNl IHN1cHBvcnRlZCBpbiBweTMKK3RyeToKKyAgICBsZXR0ZXJzID0gc3RyaW5n LnVwcGVyY2FzZQorZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBsZXR0ZXJzID0g c3RyaW5nLmFzY2lpX3VwcGVyY2FzZQogCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwogIyBBcHBsaWNhdGlvbiBzZXR0aW5ncwpAQCAtMjI3LDYg KzIzOCw0OCBAQCBVUEdSQURFX0NIRUNLX0VOQUJMRUQgPSBUcnVlCiBVUEdS QURFX0NIRUNLX1VSTCA9ICdodHRwOi8vd3d3LnBnYWRtaW4ub3JnL3ZlcnNp b25zLmpzb24nCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFN0b3JhZ2UgTWFuYWdlciBzdG9yYWdlIHVybCBjb25maWcgc2V0dGluZ3MK KyMgSWYgdXNlciBzZXRzIFNUT1JBR0VfRElSIHRvIGVtcHR5IGl0IHdpbGwg c2hvdyBhbGwgdm9sdW1lcyBpZiBwbGF0Zm9ybQorIyBpcyBXaW5kb3dzLCAn LycgaWYgaXQgaXMgTGludXgsIE1hYyBvciBhbnkgb3RoZXIgdW5peCB0eXBl IHN5c3RlbS4KKworIyBGb3IgZXhhbXBsZToKKyMgMS4gU1RPUkFHRV9ESVIg PSBnZXRfZHJpdmUoIkMiKSBvciBnZXRfZHJpdmUoKSAjIHJldHVybiBDOi8g YnkgZGVmYXVsdAorIyB3aGVyZSBDIGNhbiBiZSBhbnkgZHJpdmUgY2hhcmFj dGVyIHN1Y2ggYXMgIkQiLCAiRSIsICJHIiBldGMKKyMgMi4gU2V0IHBhdGgg bWFudWFsbHkgbGlrZQorIyBTVE9SQUdFX0RJUiA9ICIvcGF0aC90by9kaXJl Y3RvcnkvIgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCitk ZWYgZ2V0X2RyaXZlcyhkcml2ZV9uYW1lPU5vbmUpOgorICAgICIiIgorICAg IFRoaXMgaXMgYSBnZW5lcmljIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhl IGRlZmF1bHQgcGF0aCBmb3Igc3RvcmFnZQorICAgIG1hbmFnZXIgZGlhbG9n IGlycmVzcGVjdGl2ZSBvZiBhbnkgUGxhdGZvcm0gdHlwZSB0byBsaXN0IGFs bAorICAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyAgICBQbGF0Zm9ybSB3 aW5kb3dzOgorICAgIGlmIG5vIHBhdGggaXMgZ2l2ZW4sIGl0IHdpbGwgbGlz dCB2b2x1bWVzLCBlbHNlIGxpc3QgZGlyZWN0b3J5CisgICAgUGxhdGZvcm0g dW5peDoKKyAgICBpdCByZXR1cm5zIHBhdGggdG8gcm9vdCBkaXJlY3Rvcnkg aWYgbm8gcGF0aCBpcyBzcGVjaWZpZWQuCisgICAgIiIiCisgICAgaWYgX3Bs YXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg IGRyaXZlcyA9IFtdCisgICAgICAgICAgICBiaXRtYXNrID0gd2luZGxsLmtl cm5lbDMyLkdldExvZ2ljYWxEcml2ZXMoKQorICAgICAgICAgICAgZm9yIGxl dHRlciBpbiBsZXR0ZXJzOgorICAgICAgICAgICAgICAgIGlmIGJpdG1hc2sg JiAxOgorICAgICAgICAgICAgICAgICAgICBkcml2ZXMuYXBwZW5kKGxldHRl cikKKyAgICAgICAgICAgICAgICBiaXRtYXNrID4+PSAxCisgICAgICAgICAg ICBpZiAoZHJpdmVfbmFtZSAhPSAnJyBhbmQgZHJpdmVfbmFtZSBpcyBub3Qg Tm9uZSBhbmQKKyAgICAgICAgICAgICAgIGRyaXZlX25hbWUgaW4gZHJpdmVz KToKKyAgICAgICAgICAgICAgICByZXR1cm4gInswfXsxfSIuZm9ybWF0KGRy aXZlX25hbWUsICc6LycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg ICAgICAgIHJldHVybiBkcml2ZXMgICMgcmV0dXJuIGRyaXZlcyBpZiBubyBh cmd1bWVudCBpcyBwYXNzZWQKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK KyAgICAgICAgICAgIHJldHVybiAnQzovJworICAgIGVsc2U6CisgICAgICAg IHJldHVybiAnLycKK1NUT1JBR0VfRElSID0gIi9Vc2Vycy9zdXJpbmRlci9E b2N1bWVudHMvUHJvamVjdHMvcGdhZG1pbjRfdGVzdC8iCisKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIExvY2FsIGNvbmZpZyBzZXR0aW5n cwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19pbml0X18ucHkg Yi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci9fX2luaXRfXy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQzMGI0Ci0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFn ZXIvX19pbml0X18ucHkKQEAgLTAsMCArMSw4MTkgQEAKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVT UUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxNiwgVGhl IHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlz IHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIkltcGxlbWVudHMg RmlsZSBNYW5hZ2VyIiIiCisKK2Zyb20gcGdhZG1pbi51dGlscyBpbXBvcnQg UGdBZG1pbk1vZHVsZQorZnJvbSBmbGFzay5leHQuYmFiZWwgaW1wb3J0IGdl dHRleHQKK2Zyb20gZmxhc2suZXh0LnNlY3VyaXR5IGltcG9ydCBsb2dpbl9y ZXF1aXJlZAorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCBS ZXNwb25zZSwgc2Vzc2lvbiwgcmVxdWVzdCBhcyByZXEsIHVybF9mb3IKK2Zy b20gcGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBtYWtlX2pzb25fcmVzcG9u c2UKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgK K2ltcG9ydCB0aW1lCitpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCitpbXBv cnQgc3RyaW5nCitpbXBvcnQgY29uZmlnCitmcm9tIHN5cyBpbXBvcnQgcGxh dGZvcm0gYXMgX3BsYXRmb3JtCisKKyMgQ2hlY2tzIGlmIHBsYXRmb3JtIGlz IFdpbmRvd3MKK2lmIF9wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgIGltcG9y dCBjdHlwZXMKKyAgICBmaWxlX3Jvb3QgPSAiIgorCisjIHVwcGVyY2FzZSBz dXBwb3J0ZWQgaW4gcHkyLCBhc2NpaV91cHBlcmNhc2Ugc3VwcG9ydGVkIGlu IHB5MwordHJ5OgorICAgIGxldHRlcnMgPSBzdHJpbmcudXBwZXJjYXNlCitl eGNlcHQgRXhjZXB0aW9uOgorICAgIGxldHRlcnMgPSBzdHJpbmcuYXNjaWlf dXBwZXJjYXNlCisKKyMgaW1wb3J0IHVucXVvdGUgZnJvbSB1cmxpYiBmb3Ig cHl0aG9uMi54IGFuZCBweXRob24zLngKK3RyeToKKyAgICBmcm9tIHVybGxp YiBpbXBvcnQgdW5xdW90ZQorZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAg IGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1bnF1b3RlCisKKworTU9EVUxF X05BTUUgPSAnZmlsZV9tYW5hZ2VyJworZ2xvYmFsIHRyYW5zaWQKKworcGF0 aF9leGlzdHMgPSBvcy5wYXRoLmV4aXN0cworc3BsaXRfcGF0aCA9IG9zLnBh dGguc3BsaXQKK2VuY29kZV9qc29uID0ganNvbi5KU09ORW5jb2RlcigpLmVu Y29kZQorCisKKyMgdXRpbGl0eSBmdW5jdGlvbnMKKyMgY29udmVydCBieXRl cyB0eXBlIHRvIGh1bWFuIHJlYWRhYmxlIGZvcm1hdAorZGVmIHNpemVvZl9m bXQobnVtLCBzdWZmaXg9J0InKToKKyAgICBmb3IgdW5pdCBpbiBbJycsICdL JywgJ00nLCAnRycsICdUJywgJ1AnLCAnRScsICdaJ106CisgICAgICAgIGlm IGFicyhudW0pIDwgMTAyNC4wOgorICAgICAgICAgICAgcmV0dXJuICIlMy4x ZiAlcyVzIiAlIChudW0sIHVuaXQsIHN1ZmZpeCkKKyAgICAgICAgbnVtIC89 IDEwMjQuMAorICAgIHJldHVybiAiJS4xZiAlcyVzIiAlIChudW0sICdZJywg c3VmZml4KQorCisKKyMgcmV0dXJuIHNpemUgb2YgZmlsZQorZGVmIGdldFNp emUocGF0aCk6CisgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgcmV0dXJu IHN0LnN0X3NpemUKKworCitkZWYgZ2V0RHJpdmVTaXplKHBhdGgpOgorICAg IGlmIF9wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICBmcmVlX2J5dGVz ID0gY3R5cGVzLmNfdWxvbmdsb25nKDApCisgICAgICAgIGN0eXBlcy53aW5k bGwua2VybmVsMzIuR2V0RGlza0ZyZWVTcGFjZUV4VygKKyAgICAgICAgICAg IGN0eXBlcy5jX3djaGFyX3AocGF0aCksIE5vbmUsIE5vbmUsIGN0eXBlcy5w b2ludGVyKGZyZWVfYnl0ZXMpKQorICAgICAgICByZXR1cm4gZnJlZV9ieXRl cy52YWx1ZQorCisKKyMgc3BsaXQgZXh0ZW5zaW9uIGZvciBmaWxlcworZGVm IHNwbGl0ZXh0KHBhdGgpOgorICAgIGZvciBleHQgaW4gWycudGFyLmd6Jywg Jy50YXIuYnoyJ106CisgICAgICAgIGlmIHBhdGguZW5kc3dpdGgoZXh0KToK KyAgICAgICAgICAgIHBhdGgsIGV4dCA9IHBhdGhbOi1sZW4oZXh0KV0sIHBh dGhbLWxlbihleHQpOl0KKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToK KyAgICAgICAgcGF0aCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChwYXRoKQor ICAgIHJldHVybiBleHRbMTpdCisKKworIyBjaGVjayBpZiBmaWxlIGlzIGhp ZGRlbiBpbiB3aW5kb3dzIHBsYXRmb3JtCitkZWYgaXNfZm9sZGVyX2hpZGRl bihmaWxlcGF0aCk6CisgICAgaWYgX3BsYXRmb3JtID09ICJ3aW4zMiI6Cisg ICAgICAgIHRyeToKKyAgICAgICAgICAgIGF0dHJzID0gY3R5cGVzLndpbmRs bC5rZXJuZWwzMi5HZXRGaWxlQXR0cmlidXRlc1coCisgICAgICAgICAgICAg ICAgdW5pY29kZShmaWxlcGF0aCkpCisgICAgICAgICAgICBhc3NlcnQgYXR0 cnMgIT0gLTEKKyAgICAgICAgICAgIHJlc3VsdCA9IGJvb2woYXR0cnMgJiAy KQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBBc3NlcnRpb25F cnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBy ZXR1cm4gcmVzdWx0CisgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgRmls ZU1hbmFnZXJNb2R1bGUoUGdBZG1pbk1vZHVsZSk6CisgICAgIiIiCisgICAg RmlsZU1hbmFnZXIgbGlzdHMgZmlsZXMgYW5kIGZvbGRlcnMgYW5kIGRvZXMK KyAgICBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKyAgICAtIEZpbGUgc2VsZWN0 aW9uCisgICAgLSBGb2xkZXIgc2VsZWN0aW9uCisgICAgLSBPcGVuIGZpbGUK KyAgICAtIENyZWF0ZSBGaWxlCisgICAgYW5kIGFsc28gc3VwcG9ydHM6Cisg ICAgLSBSZW5hbWUgZmlsZQorICAgIC0gRGVsZXRlIGZpbGUKKyAgICAtIFVw bG9hZCBmaWxlCisgICAgLSBDcmVhdGUgZm9sZGVyCisgICAgIiIiCisKKyAg ICBMQUJFTCA9IGdldHRleHQoIlN0b3JhZ2UiKQorCisgICAgZGVmIGdldF9v d25famF2YXNjcmlwdHMoc2VsZik6CisgICAgICAgIHJldHVybiBbCisgICAg ICAgICAgeworICAgICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5maWxlX21h bmFnZXInLAorICAgICAgICAgICAgJ3BhdGgnOiB1cmxfZm9yKCdmaWxlX21h bmFnZXIuaW5kZXgnKSArICdmaWxlX21hbmFnZXInLAorICAgICAgICAgICAg J3doZW4nOiBOb25lCisgICAgICAgICAgfSwKKyAgICAgICAgICBdCisKKyAg ICBkZWYgZ2V0X293bl9zdHlsZXNoZWV0cyhzZWxmKToKKyAgICAgICAgcmV0 dXJuIFsKKyAgICAgICAgICAgICAgdXJsX2Zvcignc3RhdGljJywgZmlsZW5h bWU9J2Nzcy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuY3NzJyksCisgICAg ICAgICAgICAgIHVybF9mb3IoJ2ZpbGVfbWFuYWdlci5zdGF0aWMnLCBmaWxl bmFtZT0nY3NzL2ZpbGVfbWFuYWdlci5jc3MnKQorICAgICAgICAgICAgXQor CisgICAgZGVmIGdldF9vd25fbWVudWl0ZW1zKHNlbGYpOgorICAgICAgICBy ZXR1cm4geworICAgICAgICAgICAgJ2ZpbGVfaXRlbXMnOiBbXQorICAgICAg ICB9CisKKyAgICBkZWYgZ2V0X2ZpbGVfc2l6ZV9wcmVmZXJlbmNlKHNlbGYp OgorICAgICAgICByZXR1cm4gc2VsZi5maWxlX3VwbG9hZF9zaXplCisKKyAg ICBkZWYgcmVnaXN0ZXJfcHJlZmVyZW5jZXMoc2VsZik6CisgICAgICAgICMg UmVnaXN0ZXIgJ2ZpbGUgdXBsb2FkIHNpemUnIHByZWZlcmVuY2UKKyAgICAg ICAgc2VsZi5maWxlX3VwbG9hZF9zaXplID0gc2VsZi5wcmVmZXJlbmNlLnJl Z2lzdGVyKAorICAgICAgICAgICAgJ29wdGlvbnMnLCAnZmlsZV91cGxvYWRf c2l6ZScsCisgICAgICAgICAgICBnZXR0ZXh0KCJNYXhpbXVtIGZpbGUgdXBs b2FkIHNpemUoTUIpIiksICdpbnRlZ2VyJywgNTAsCisgICAgICAgICAgICBj YXRlZ29yeV9sYWJlbD1nZXR0ZXh0KCdPcHRpb25zJykKKyAgICAgICAgICAg ICkKKworIyBJbml0aWFsaXNlIHRoZSBtb2R1bGUKK2JsdWVwcmludCA9IEZp bGVNYW5hZ2VyTW9kdWxlKAorICAgIE1PRFVMRV9OQU1FLAorICAgIF9fbmFt ZV9fLAorICAgICkKKworCitAYmx1ZXByaW50LnJvdXRlKCIvIikKK0Bsb2dp bl9yZXF1aXJlZAorZGVmIGluZGV4KCk6CisgICAgIiIiUmVuZGVyIHRoZSBw cmVmZXJlbmNlcyBkaWFsb2cuIiIiCisgICAgcmV0dXJuIHJlbmRlcl90ZW1w bGF0ZSgKKyAgICAgICAgICAgIE1PRFVMRV9OQU1FICsgIi9pbmRleC5odG1s IiwgXz1nZXR0ZXh0KQorCisKK0BibHVlcHJpbnQucm91dGUoIi91dGlsaXR5 LmpzIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHV0aWxpdHkoKToKKyAgICAi IiJyZW5kZXIgdGhlIHJlcXVpcmVkIGphdmFzY3JpcHQiIiIKKyAgICByZXR1 cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVyX3RlbXBsYXRlKAorICAgICAg ICAiZmlsZV9tYW5hZ2VyL2pzL3V0aWxpdHkuanMiLCBfPWdldHRleHQpLAor ICAgICAgICBzdGF0dXM9MjAwLAorICAgICAgICBtaW1ldHlwZT0iYXBwbGlj YXRpb24vamF2YXNjcmlwdCIpCisKKworQGJsdWVwcmludC5yb3V0ZSgiL2Zp bGVfbWFuYWdlci5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBmaWxlX21h bmFnZXJfanMoKToKKyAgICAiIiJyZW5kZXIgdGhlIHJlcXVpcmVkIGphdmFz Y3JpcHQiIiIKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVy X3RlbXBsYXRlKAorICAgICAgICAiZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFu YWdlci5qcyIsIF89Z2V0dGV4dCksCisgICAgICAgIHN0YXR1cz0yMDAsCisg ICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IikKKwor CitAYmx1ZXByaW50LnJvdXRlKCIvZW4uanMiKQorQGxvZ2luX3JlcXVpcmVk CitkZWYgbGFuZ3VhZ2UoKToKKyAgICAiIiJyZW5kZXIgdGhlIHJlcXVpcmVk IGphdmFzY3JpcHQiIiIKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9 cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAiZmlsZV9tYW5hZ2VyL2pzL2xh bmd1YWdlcy9lbi5qcyIsIF89Z2V0dGV4dCksCisgICAgICAgIHN0YXR1cz0y MDAsCisgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0 IikKKworCitAYmx1ZXByaW50LnJvdXRlKCIvZmlsZV9tYW5hZ2VyX2NvbmZp Zy5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBmaWxlX21hbmFnZXJfY29u ZmlnX2pzKCk6CisgICAgIiIicmVuZGVyIHRoZSByZXF1aXJlZCBqYXZhc2Ny aXB0IiIiCisgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJlbmRlcl90 ZW1wbGF0ZSgKKyAgICAgICAgImZpbGVfbWFuYWdlci9qcy9maWxlX21hbmFn ZXJfY29uZmlnLmpzIiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgc3RhdHVzPTIw MCwKKyAgICAgICAgbWltZXR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQi KQorCisKK0BibHVlcHJpbnQucm91dGUoIi88aW50OnRyYW5zX2lkPi9maWxl X21hbmFnZXJfY29uZmlnLmpzb24iKQorQGxvZ2luX3JlcXVpcmVkCitkZWYg ZmlsZV9tYW5hZ2VyX2NvbmZpZyh0cmFuc19pZCk6CisgICAgIiIicmVuZGVy IHRoZSByZXF1aXJlZCBqc29uIiIiCisgICAgIyB0cmFuc19pZCA9IEZpbGVt YW5hZ2VyLmNyZWF0ZV9uZXdfdHJhbnNhY3Rpb24oKQorICAgIGRhdGEgPSBG aWxlbWFuYWdlci5nZXRfdHJhc2FjdGlvbl9zZWxlY3Rpb24odHJhbnNfaWQp CisgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0 ZSgKKyAgICAgICAgImZpbGVfbWFuYWdlci9qcy9maWxlX21hbmFnZXJfY29u ZmlnLmpzb24iLCBfPWdldHRleHQsCisgICAgICAgIGRhdGE9ZGF0YSksCisg ICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNh dGlvbi9qc29uIikKKworCitAYmx1ZXByaW50LnJvdXRlKCIvZ2V0X3RyYW5z X2lkIiwgbWV0aG9kcz1bIkdFVCIsICJQT1NUIl0pCitAbG9naW5fcmVxdWly ZWQKK2RlZiBnZXRfdHJhbnNfaWQoKToKKyAgICBpZiBsZW4ocmVxLmRhdGEp ICE9IDA6CisgICAgICAgIGNvbmZpZ3MgPSBqc29uLmxvYWRzKHJlcS5kYXRh KQorICAgICAgICB0cmFuc19pZCA9IEZpbGVtYW5hZ2VyLmNyZWF0ZV9uZXdf dHJhbnNhY3Rpb24oY29uZmlncykKKyAgICAgICAgZ2xvYmFsIHRyYW5zaWQK KyAgICAgICAgdHJhbnNpZCA9IHRyYW5zX2lkCisgICAgcmV0dXJuIG1ha2Vf anNvbl9yZXNwb25zZSgKKyAgICAgICAgZGF0YT17J2ZpbGVUcmFuc0lkJzog dHJhbnNpZCwgJ3N0YXR1cyc6IFRydWV9CisgICAgKQorCisKK0BibHVlcHJp bnQucm91dGUoIi9kZWxfdHJhbnNfaWQvPGludDp0cmFuc19pZD4iLCBtZXRo b2RzPVsiR0VUIiwgIlBPU1QiXSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIGRl bGV0ZV90cmFuc19pZCh0cmFuc19pZCk6CisgICAgRmlsZW1hbmFnZXIucmVs ZWFzZV90cmFuc2FjdGlvbih0cmFuc19pZCkKKyAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKAorICAgICAgICBkYXRhPXsnc3RhdHVzJzogVHJ1ZX0K KyAgICApCisKKworY2xhc3MgRmlsZW1hbmFnZXIob2JqZWN0KToKKyAgICAi IiJGaWxlTWFuYWdlciBDbGFzcy4iIiIKKyAgICBkZWYgX19pbml0X18oc2Vs ZiwgdHJhbnNfaWQpOgorICAgICAgICBzZWxmLnRyYW5zX2lkID0gdHJhbnNf aWQKKyAgICAgICAgc2VsZi5wYXRoZXJyb3IgPSBlbmNvZGVfanNvbigKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICdFcnJvcic6 IGdldHRleHQoJ05vIHBlcm1pc3Npb24gdG8gb3BlcmF0ZSBvbiBzcGVjaWZp ZWQgcGF0aC4nKSwKKyAgICAgICAgICAgICAgICAgICAgJ0NvZGUnOiAtMQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICkKKyAgICAgICAgc2Vs Zi5kaXIgPSBjb25maWcuU1RPUkFHRV9ESVIKKworICAgICAgICBpZiBpc2lu c3RhbmNlKHNlbGYuZGlyLCBsaXN0KToKKyAgICAgICAgICAgIHNlbGYuZGly ID0gIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX25l d190cmFuc2FjdGlvbihwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAg SXQgd2lsbCBhbHNvIGNyZWF0ZSBhIHVuaXF1ZSB0cmFuc2FjdGlvbiBpZCBh bmQKKyAgICAgICAgc3RvcmUgdGhlIGluZm9ybWF0aW9uIGludG8gc2Vzc2lv biB2YXJpYWJsZS4KKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGNhcGFi aWxpdGllczogQWxsb3cvRGlzYWxsb3cgdXNlciB0byBwZXJmb3JtCisgICAg ICAgICAgICBzZWxlY3Rpb24sIHJlbmFtZSwgZGVsZXRlIGV0Yy4KKyAgICAg ICAgIiIiCisKKyAgICAgICAgIyBEZWZpbmUgY29uZmlncyBmb3IgZGlhbG9n IHR5cGVzCisgICAgICAgICMgc2VsZWN0IGZpbGUsIHNlbGVjdCBmb2xkZXIs IGNyZWF0ZSBtb2RlCisgICAgICAgIGZtX3R5cGUgPSBwYXJhbXNbJ2RpYWxv Z190eXBlJ10KKyAgICAgICAgc3RvcmFnZV9kaXIgPSBjb25maWcuU1RPUkFH RV9ESVIKKworICAgICAgICAjIEl0IGlzIHVzZWQgaW4gdXRpdGxpdHkganMg dG8gZGVjaWRlIHRvCisgICAgICAgICMgc2hvdyBvciBoaWRlIHNlbGVjdCBm aWxlIHR5cGUgb3B0aW9ucworICAgICAgICBzaG93X3ZvbHVtZXMgPSBUcnVl IGlmIChpc2luc3RhbmNlKHN0b3JhZ2VfZGlyLCBsaXN0KSBvcgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3RvcmFnZV9kaXIpIGVs c2UgRmFsc2UKKyAgICAgICAgc3VwcF90eXBlcyA9IGFsbG93X3VwbG9hZF9m aWxlcyA9IHBhcmFtc1snc3VwcG9ydGVkX3R5cGVzJ10gXAorICAgICAgICAg ICAgaWYgJ3N1cHBvcnRlZF90eXBlcycgaW4gcGFyYW1zIGVsc2UgW10KKyAg ICAgICAgaWYgZm1fdHlwZSA9PSAnc2VsZWN0X2ZpbGUnOgorICAgICAgICAg ICAgY2FwYWJpbGl0aWVzID0gWydzZWxlY3RfZmlsZScsICdyZW5hbWUnLCAn dXBsb2FkJywgJ2NyZWF0ZSddCisgICAgICAgICAgICBzdXBwX3R5cGVzID0g c3VwcF90eXBlcworICAgICAgICAgICAgZmlsZXNfb25seSA9IFRydWUKKyAg ICAgICAgICAgIGZvbGRlcnNfb25seSA9IEZhbHNlCisgICAgICAgICAgICB0 aXRsZSA9ICJTZWxlY3QgRmlsZSIKKyAgICAgICAgZWxpZiBmbV90eXBlID09 ICdzZWxlY3RfZm9sZGVyJzoKKyAgICAgICAgICAgIGNhcGFiaWxpdGllcyA9 IFsnc2VsZWN0X2ZvbGRlcicsICdyZW5hbWUnLCAnY3JlYXRlJ10KKyAgICAg ICAgICAgIGZpbGVzX29ubHkgPSBGYWxzZQorICAgICAgICAgICAgZm9sZGVy c19vbmx5ID0gVHJ1ZQorICAgICAgICAgICAgdGl0bGUgPSAiU2VsZWN0IEZv bGRlciIKKyAgICAgICAgZWxpZiBmbV90eXBlID09ICdjcmVhdGVfZmlsZSc6 CisgICAgICAgICAgICBjYXBhYmlsaXRpZXMgPSBbJ3NlbGVjdF9maWxlJywg J3JlbmFtZScsICdjcmVhdGUnXQorICAgICAgICAgICAgc3VwcF90eXBlcyA9 IHN1cHBfdHlwZXMKKyAgICAgICAgICAgIGZpbGVzX29ubHkgPSBUcnVlCisg ICAgICAgICAgICBmb2xkZXJzX29ubHkgPSBGYWxzZQorICAgICAgICAgICAg dGl0bGUgPSAiQ3JlYXRlIEZpbGUiCisgICAgICAgIGVsaWYgZm1fdHlwZSA9 PSAnc3RvcmFnZV9kaWFsb2cnOgorICAgICAgICAgICAgY2FwYWJpbGl0aWVz ID0gWydzZWxlY3RfZm9sZGVyJywgJ3NlbGVjdF9maWxlJywgJ2Rvd25sb2Fk JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVuYW1lJywgJ2Rl bGV0ZScsICd1cGxvYWQnLCAnY3JlYXRlJ10KKyAgICAgICAgICAgIHN1cHBf dHlwZXMgPSBzdXBwX3R5cGVzCisgICAgICAgICAgICBmaWxlc19vbmx5ID0g VHJ1ZQorICAgICAgICAgICAgZm9sZGVyc19vbmx5ID0gRmFsc2UKKyAgICAg ICAgICAgIHRpdGxlID0gIlN0b3JhZ2UgTWFuYWdlciIKKworICAgICAgICAj IGNyZWF0ZSBjb25maWdzIHVzaW5nIGFib3ZlIGNvbmZpZ3MKKyAgICAgICAg Y29uZmlncyA9IHsKKyAgICAgICAgICAiZmlsZXJvb3QiOiAiLyIsCisgICAg ICAgICAgImRpYWxvZ190eXBlIjogZm1fdHlwZSwKKyAgICAgICAgICAidGl0 bGUiOiB0aXRsZSwKKyAgICAgICAgICAidXBsb2FkIjogeworICAgICAgICAg ICAgICAibXVsdGlwbGUiOiBUcnVlCisgICAgICAgICAgfSwKKyAgICAgICAg ICAiY2FwYWJpbGl0aWVzIjogY2FwYWJpbGl0aWVzLAorICAgICAgICAgICJz ZWN1cml0eSI6IHsKKyAgICAgICAgICAgICAgInVwbG9hZFBvbGljeSI6ICIi LAorICAgICAgICAgICAgICAidXBsb2FkUmVzdHJpY3Rpb25zIjogYWxsb3df dXBsb2FkX2ZpbGVzCisgICAgICAgICAgfSwKKyAgICAgICAgICAiZmlsZXNf b25seSI6IGZpbGVzX29ubHksCisgICAgICAgICAgImZvbGRlcnNfb25seSI6 IGZvbGRlcnNfb25seSwKKyAgICAgICAgICAic3VwcG9ydGVkX3R5cGVzIjog c3VwcF90eXBlcywKKyAgICAgICAgICAicGxhdGZvcm1fdHlwZSI6IF9wbGF0 Zm9ybSwKKyAgICAgICAgICAic2hvd192b2x1bWVzIjogc2hvd192b2x1bWVz CisgICAgICAgIH0KKworICAgICAgICAjIENyZWF0ZSBhIHVuaXF1ZSBpZCBm b3IgdGhlIHRyYW5zYWN0aW9uCisgICAgICAgIHRyYW5zX2lkID0gc3RyKHJh bmRvbS5yYW5kaW50KDEsIDk5OTk5OTkpKQorCisgICAgICAgIGlmICdmaWxl TWFuYWdlckRhdGEnIG5vdCBpbiBzZXNzaW9uOgorICAgICAgICAgICAgZmls ZV9tYW5hZ2VyX2RhdGEgPSBkaWN0KCkKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIGZpbGVfbWFuYWdlcl9kYXRhID0gc2Vzc2lvblsnZmlsZU1hbmFn ZXJEYXRhJ10KKworICAgICAgICBmaWxlX3VwbG9hZF9zaXplID0gYmx1ZXBy aW50LmdldF9maWxlX3NpemVfcHJlZmVyZW5jZSgpLmdldCgpCisgICAgICAg IGNvbmZpZ3NbJ3VwbG9hZCddWydmaWxlU2l6ZUxpbWl0J10gPSBmaWxlX3Vw bG9hZF9zaXplCisgICAgICAgIGZpbGVfbWFuYWdlcl9kYXRhW3RyYW5zX2lk XSA9IGNvbmZpZ3MKKyAgICAgICAgc2Vzc2lvblsnZmlsZU1hbmFnZXJEYXRh J10gPSBmaWxlX21hbmFnZXJfZGF0YQorCisgICAgICAgIHJldHVybiB0cmFu c19pZAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRfdHJhc2Fj dGlvbl9zZWxlY3Rpb24odHJhbnNfaWQpOgorICAgICAgICAiIiIKKyAgICAg ICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgaW5mb3JtYXRpb24gb2YgdW5p cXVlIHRyYW5zYWN0aW9uCisgICAgICAgIGlkIGZyb20gdGhlIHNlc3Npb24g dmFyaWFibGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRyYW5z X2lkOiB1bmlxdWUgdHJhbnNhY3Rpb24gaWQKKyAgICAgICAgIiIiCisgICAg ICAgIGZpbGVfbWFuYWdlcl9kYXRhID0gc2Vzc2lvblsnZmlsZU1hbmFnZXJE YXRhJ10KKworICAgICAgICAjIFJldHVybiBmcm9tIHRoZSBmdW5jdGlvbiBp ZiB0cmFuc2FjdGlvbiBpZCBub3QgZm91bmQKKyAgICAgICAgaWYgc3RyKHRy YW5zX2lkKSBpbiBmaWxlX21hbmFnZXJfZGF0YToKKyAgICAgICAgICAgIHJl dHVybiBmaWxlX21hbmFnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAg QHN0YXRpY21ldGhvZAorICAgIGRlZiByZWxlYXNlX3RyYW5zYWN0aW9uKHRy YW5zX2lkKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0aG9kIGlz IHRvIHJlbW92ZSB0aGUgaW5mb3JtYXRpb24gb2YgdW5pcXVlIHRyYW5zYWN0 aW9uCisgICAgICAgIGlkIGZyb20gdGhlIHNlc3Npb24gdmFyaWFibGUuCisK KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRyYW5zX2lkOiB1bmlxdWUg dHJhbnNhY3Rpb24gaWQKKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVfbWFu YWdlcl9kYXRhID0gc2Vzc2lvblsnZmlsZU1hbmFnZXJEYXRhJ10KKyAgICAg ICAgIyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaWYgdHJhbnNhY3Rpb24g aWQgbm90IGZvdW5kCisgICAgICAgIGlmIHN0cih0cmFuc19pZCkgbm90IGlu IGZpbGVfbWFuYWdlcl9kYXRhOgorICAgICAgICAgICAgcmV0dXJuIG1ha2Vf anNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogVHJ1ZX0pCisKKyAgICAg ICAgIyBSZW1vdmUgdGhlIGluZm9ybWF0aW9uIG9mIHVuaXF1ZSB0cmFuc2Fj dGlvbiBpZAorICAgICAgICAjIGZyb20gdGhlIHNlc3Npb24gdmFyaWFibGUu CisgICAgICAgIGZpbGVfbWFuYWdlcl9kYXRhLnBvcChzdHIodHJhbnNfaWQp LCBOb25lKQorICAgICAgICBzZXNzaW9uWydmaWxlTWFuYWdlckRhdGEnXSA9 IGZpbGVfbWFuYWdlcl9kYXRhCisKKyAgICAgICAgcmV0dXJuIG1ha2VfanNv bl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogVHJ1ZX0pCisKKyAgICBAc3Rh dGljbWV0aG9kCisgICAgZGVmIGxpc3RfZmlsZXN5c3RlbShkaXIsIHBhdGgs IHRyYW5zX2RhdGEsIGZpbGVfdHlwZSk6CisgICAgICAgICIiIgorICAgICAg ICBJdCBsaXN0cyBhbGwgZmlsZSBhbmQgZm9sZGVycyB3aXRoaW4gdGhlIGdp dmVuCisgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAg IGZpbGVzID0ge30KKyAgICAgICAgaWYgKF9wbGF0Zm9ybSA9PSAid2luMzIi IGFuZCBwYXRoID09ICcvJykgYW5kIChub3QgZGlyKToKKyAgICAgICAgICAg IGltcG9ydCBjb25maWcKKyAgICAgICAgICAgIGRyaXZlcyA9IGNvbmZpZy5n ZXRfZHJpdmVzKCkKKyAgICAgICAgICAgIGZvciBkcml2ZSBpbiBkcml2ZXM6 CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkID0gMAorICAgICAgICAgICAg ICAgIHBhdGggPSBmaWxlX25hbWUgPSAiezB9Oi8iLmZvcm1hdChkcml2ZSkK KyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRy aXZlX3NpemUgPSBnZXREcml2ZVNpemUocGF0aCkKKyAgICAgICAgICAgICAg ICAgICAgZHJpdmVfc2l6ZV9pbl91bml0cyA9IHNpemVvZl9mbXQoZHJpdmVf c2l6ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAg ICAgICAgIGRyaXZlX3NpemUgPSAwCisgICAgICAgICAgICAgICAgcHJvdGVj dGVkID0gMSBpZiBkcml2ZV9zaXplID09IDAgZWxzZSAwCisgICAgICAgICAg ICAgICAgZmlsZXNbZHJpdmVdID0geworICAgICAgICAgICAgICAgICAgICAi RmlsZW5hbWUiOiBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICJQ YXRoIjogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgImZpbGVfdHlwZSI6 ICdkcml2ZScsCisgICAgICAgICAgICAgICAgICAgICJQcm90ZWN0ZWQiOiBw cm90ZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICJQcm9wZXJ0aWVzIjog eworICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGUgQ3JlYXRlZCI6ICIi LAorICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGUgTW9kaWZpZWQiOiAi IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIjogZHJpdmVfc2l6 ZV9pbl91bml0cworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmlsZXMKKworICAgICAg ICBvcmlnX3BhdGggPSAiezB9ezF9Ii5mb3JtYXQoZGlyLCBwYXRoKQorICAg ICAgICB1c2VyX2RpciA9IHBhdGgKKyAgICAgICAgZm9sZGVyc19vbmx5ID0g dHJhbnNfZGF0YVsnZm9sZGVyc19vbmx5J10gaWYgJ2ZvbGRlcnNfb25seScg aW4gXAorICAgICAgICAgICAgdHJhbnNfZGF0YSBlbHNlICcnCisgICAgICAg IGZpbGVzX29ubHkgPSB0cmFuc19kYXRhWydmaWxlc19vbmx5J10gaWYgJ2Zp bGVzX29ubHknIGluIFwKKyAgICAgICAgICAgIHRyYW5zX2RhdGEgZWxzZSAn JworICAgICAgICBzdXBwb3J0ZWRfdHlwZXMgPSB0cmFuc19kYXRhWydzdXBw b3J0ZWRfdHlwZXMnXSBcCisgICAgICAgICAgICBpZiAnc3VwcG9ydGVkX3R5 cGVzJyBpbiB0cmFuc19kYXRhIGVsc2UgW10KKworICAgICAgICBvcmlnX3Bh dGggPSB1bnF1b3RlKG9yaWdfcGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAg ICAgICAgZm9yIGYgaW4gc29ydGVkKG9zLmxpc3RkaXIob3JpZ19wYXRoKSk6 CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkID0gMAorICAgICAgICAgICAg ICAgIHN5c3RlbV9wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguam9pbihv cmlnX3BhdGgsIGYpKQorCisgICAgICAgICAgICAgICAgIyBjb250aW51ZSBp ZiBmaWxlL2ZvbGRlciBpcyBoaWRkZW4KKyAgICAgICAgICAgICAgICBpZiAo aXNfZm9sZGVyX2hpZGRlbihzeXN0ZW1fcGF0aCkgb3IgZi5zdGFydHN3aXRo KCcuJykpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAg ICAgICAgICAgICAgdXNlcl9wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGgu am9pbih1c2VyX2RpciwgZikpCisgICAgICAgICAgICAgICAgY3JlYXRlZCA9 IHRpbWUuY3RpbWUob3MucGF0aC5nZXRjdGltZShzeXN0ZW1fcGF0aCkpCisg ICAgICAgICAgICAgICAgbW9kaWZpZWQgPSB0aW1lLmN0aW1lKG9zLnBhdGgu Z2V0bXRpbWUoc3lzdGVtX3BhdGgpKQorICAgICAgICAgICAgICAgIGZpbGVf ZXh0ZW5zaW9uID0gc3RyKHNwbGl0ZXh0KHN5c3RlbV9wYXRoKSkKKworICAg ICAgICAgICAgICAgICMgc2V0IHByb3RlY3RlZCB0byAxIGlmIG5vIHdyaXRl IG9yIHJlYWQgcGVybWlzc2lvbgorICAgICAgICAgICAgICAgIGlmKG5vdCBv cy5hY2Nlc3Moc3lzdGVtX3BhdGgsIG9zLlJfT0spIG9yCisgICAgICAgICAg ICAgICAgICAgbm90IG9zLmFjY2VzcyhzeXN0ZW1fcGF0aCwgb3MuV19PSykp OgorICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgPSAxCisKKyAgICAg ICAgICAgICAgICAjIGxpc3QgZmlsZXMgb25seSBvciBmb2xkZXJzIG9ubHkK KyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHN5c3RlbV9wYXRo KToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZXNfb25seSA9PSAndHJ1 ZSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg ICAgICAgICAgICAgICBmaWxlX2V4dGVuc2lvbiA9IHN0cignZGlyJykKKyAg ICAgICAgICAgICAgICAgICAgdXNlcl9wYXRoID0gInswfS8iLmZvcm1hdCh1 c2VyX3BhdGgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICAgICAgIyBmaWx0ZXIgZmlsZXMgYmFzZWQgb24gZmlsZV90eXBlCisg ICAgICAgICAgICAgICAgICAgIGlmIGZpbGVfdHlwZSBpcyBub3QgTm9uZSBh bmQgZmlsZV90eXBlICE9ICIqIjoKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIGZvbGRlcnNfb25seSBvciBsZW4oc3VwcG9ydGVkX3R5cGVzKSA+IDAg YW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9leHRlbnNp b24gbm90IGluIHN1cHBvcnRlZF90eXBlcyBvciBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGZpbGVfdHlwZSAhPSBmaWxlX2V4dGVuc2lvbjoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAg ICAgICAgICAgIyBjcmVhdGUgYSBsaXN0IG9mIGZpbGVzIGFuZCBmb2xkZXJz CisgICAgICAgICAgICAgICAgZmlsZXNbdXNlcl9wYXRoXSA9IHsKKyAgICAg ICAgICAgICAgICAgICJGaWxlbmFtZSI6IGYsCisgICAgICAgICAgICAgICAg ICAiUGF0aCI6IHVzZXJfcGF0aCwKKyAgICAgICAgICAgICAgICAgICJmaWxl X3R5cGUiOiBmaWxlX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICJQ cm90ZWN0ZWQiOiBwcm90ZWN0ZWQsCisgICAgICAgICAgICAgICAgICAiUHJv cGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkRhdGUgQ3JlYXRl ZCI6IGNyZWF0ZWQsCisgICAgICAgICAgICAgICAgICAgICJEYXRlIE1vZGlm aWVkIjogbW9kaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICJTaXplIjog c2l6ZW9mX2ZtdChnZXRTaXplKHN5c3RlbV9wYXRoKSkKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIGV4Y2VwdCBF eGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGlmIGUuc3RyZXJyb3IgPT0g Z2V0dGV4dCgnUGVybWlzc2lvbiBkZW5pZWQnKToKKyAgICAgICAgICAgICAg ICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVycm9yKQor ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJfbXNnID0g IkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVycm9yKQorICAgICAgICAgICAg ZmlsZXMgPSB7CisgICAgICAgICAgICAgICdDb2RlJzogMCwKKyAgICAgICAg ICAgICAgJ2Vycl9tc2cnOiBlcnJfbXNnCisgICAgICAgICAgICB9CisgICAg ICAgIHJldHVybiBmaWxlcworCisgICAgZGVmIHZhbGlkYXRlX3JlcXVlc3Qo c2VsZiwgY2FwYWJpbGl0eSk6CisgICAgICAgICIiIgorICAgICAgICBJdCB2 YWxpZGF0ZXMgdGhlIGNhcGFiaWxpdHkgd2l0aCB0aGUgY2FwYWJpbGl0aWVz CisgICAgICAgIHN0b3JlZCBpbiB0aGUgc2Vzc2lvbgorICAgICAgICAiIiIK KyAgICAgICAgdHJhbnNfZGF0YSA9IEZpbGVtYW5hZ2VyLmdldF90cmFzYWN0 aW9uX3NlbGVjdGlvbihzZWxmLnRyYW5zX2lkKQorICAgICAgICByZXR1cm4g RmFsc2UgaWYgY2FwYWJpbGl0eSBub3QgaW4gdHJhbnNfZGF0YVsnY2FwYWJp bGl0aWVzJ10gZWxzZSBUcnVlCisKKyAgICBkZWYgZ2V0aW5mbyhzZWxmLCBw YXRoPU5vbmUsIGdldHNpemU9VHJ1ZSwgbmFtZT1Ob25lLCByZXE9Tm9uZSk6 CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEgSlNPTiBvYmplY3Qg Y29udGFpbmluZyBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCB0aGUgZ2l2 ZW4gZmlsZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcGF0aCA9IHVucXVv dGUocGF0aCkKKyAgICAgICAgb3JpZ19wYXRoID0gInswfXsxfSIuZm9ybWF0 KHNlbGYuZGlyLCBwYXRoKQorICAgICAgICB1c2VyX2RpciA9IHBhdGgKKyAg ICAgICAgdGhlZmlsZSA9IHsKKyAgICAgICAgICAgICdGaWxlbmFtZSc6IHNw bGl0X3BhdGgob3JpZ19wYXRoKVstMV0sCisgICAgICAgICAgICAnRmlsZSBU eXBlJzogJycsCisgICAgICAgICAgICAnUGF0aCc6IHVzZXJfZGlyLAorICAg ICAgICAgICAgJ0Vycm9yJzogJycsCisgICAgICAgICAgICAnQ29kZSc6IDAs CisgICAgICAgICAgICAnUHJvcGVydGllcyc6IHsKKyAgICAgICAgICAgICAg ICAgICAgJ0RhdGUgQ3JlYXRlZCc6ICcnLAorICAgICAgICAgICAgICAgICAg ICAnRGF0ZSBNb2RpZmllZCc6ICcnLAorICAgICAgICAgICAgICAgICAgICAn V2lkdGgnOiAnJywKKyAgICAgICAgICAgICAgICAgICAgJ0hlaWdodCc6ICcn LAorICAgICAgICAgICAgICAgICAgICAnU2l6ZSc6ICcnCisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIGlmIG5vdCBwYXRo X2V4aXN0cyhvcmlnX3BhdGgpOgorICAgICAgICAgICAgdGhlZmlsZVsnRXJy b3InXSA9IGdldHRleHQoJ0ZpbGUgZG9lcyBub3QgZXhpc3QuJykKKyAgICAg ICAgICAgIHJldHVybiAoZW5jb2RlX2pzb24odGhlZmlsZSksIE5vbmUsICdh cHBsaWNhdGlvbi9qc29uJykKKworICAgICAgICBpZiBzcGxpdF9wYXRoKHVz ZXJfZGlyKVstMV0gPT0gJy8nOgorICAgICAgICAgICAgdGhlZmlsZVsnRmls ZSBUeXBlJ10gPSAnRGlyZWN0b3J5JworICAgICAgICBlbHNlOgorICAgICAg ICAgICAgdGhlZmlsZVsnRmlsZSBUeXBlJ10gPSBzcGxpdGV4dCh1c2VyX2Rp cikKKworICAgICAgICBjcmVhdGVkID0gdGltZS5jdGltZShvcy5wYXRoLmdl dGN0aW1lKG9yaWdfcGF0aCkpCisgICAgICAgIG1vZGlmaWVkID0gdGltZS5j dGltZShvcy5wYXRoLmdldG10aW1lKG9yaWdfcGF0aCkpCisKKyAgICAgICAg dGhlZmlsZVsnUHJvcGVydGllcyddWydEYXRlIENyZWF0ZWQnXSA9IGNyZWF0 ZWQKKyAgICAgICAgdGhlZmlsZVsnUHJvcGVydGllcyddWydEYXRlIE1vZGlm aWVkJ10gPSBtb2RpZmllZAorICAgICAgICB0aGVmaWxlWydQcm9wZXJ0aWVz J11bJ1NpemUnXSA9IHNpemVvZl9mbXQoZ2V0U2l6ZShvcmlnX3BhdGgpKQor CisgICAgICAgIHJldHVybiB0aGVmaWxlCisKKyAgICBkZWYgZ2V0Zm9sZGVy KHNlbGYsIHBhdGg9Tm9uZSwgZmlsZV90eXBlPSIiLCBuYW1lPU5vbmUsIHJl cT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgZmlsZXMg YW5kIGZvbGRlcnMgaW4gZ2l2ZSBwYXRoCisgICAgICAgICIiIgorICAgICAg ICB0cmFuc19kYXRhID0gRmlsZW1hbmFnZXIuZ2V0X3RyYXNhY3Rpb25fc2Vs ZWN0aW9uKHNlbGYudHJhbnNfaWQpCisgICAgICAgIGRpciA9IHNlbGYuZGly CisgICAgICAgIGZpbGVsaXN0ID0gc2VsZi5saXN0X2ZpbGVzeXN0ZW0oZGly LCBwYXRoLCB0cmFuc19kYXRhLCBmaWxlX3R5cGUpCisgICAgICAgIHJldHVy biBmaWxlbGlzdAorCisgICAgZGVmIHJlbmFtZShzZWxmLCBvbGQ9Tm9uZSwg bmV3PU5vbmUsIHJlcT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJl bmFtZSBmaWxlIG9yIGZvbGRlcgorICAgICAgICAiIiIKKyAgICAgICAgaWYg bm90IHNlbGYudmFsaWRhdGVfcmVxdWVzdCgncmVuYW1lJyk6CisgICAgICAg ICAgICByZXR1cm4geworICAgICAgICAgICAgICdFcnJvcic6IGdldHRleHQo J05vdCBhbGxvd2VkJyksCisgICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAg ICAgICAgICB9CisKKyAgICAgICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAg IyBjaGVjayBpZiBpdCdzIGRpcgorICAgICAgICBpZiBvbGRbLTFdID09ICcv JzoKKyAgICAgICAgICAgIG9sZCA9IG9sZFs6LTFdCisKKyAgICAgICAgIyBl eHRyYWN0IGZpbGVuYW1lCisgICAgICAgIG9sZG5hbWUgPSBzcGxpdF9wYXRo KG9sZClbLTFdCisgICAgICAgIHBhdGggPSBzdHIob2xkKQorICAgICAgICBw YXRoID0gc3BsaXRfcGF0aChwYXRoKVswXSAgIyBleHRyYWN0IHBhdGgKKwor ICAgICAgICBpZiBub3QgcGF0aFstMV0gPT0gJy8nOgorICAgICAgICAgICAg cGF0aCArPSAnLycKKworICAgICAgICAjIG5ld25hbWUgPSBlbmNvZGVfdXJs cGF0aChuZXcpCisgICAgICAgIG5ld25hbWUgPSBuZXcKKyAgICAgICAgbmV3 cGF0aCA9IHBhdGggKyBuZXduYW1lCisKKyAgICAgICAgIyBtYWtlIHN5c3Rl bSBvbGQgcGF0aAorICAgICAgICBvbGRwYXRoX3N5cyA9ICJ7MH17MX0iLmZv cm1hdChkaXIsIG9sZCkKKyAgICAgICAgbmV3cGF0aF9zeXMgPSAiezB9ezF9 Ii5mb3JtYXQoZGlyLCBuZXdwYXRoKQorCisgICAgICAgIGVycm9yX21zZyA9 IGdldHRleHQoJ1JlbmFtZWQgU3VjY2Vzc2Z1bGx5LicpCisgICAgICAgIGNv ZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbmFtZShv bGRwYXRoX3N5cywgbmV3cGF0aF9zeXMpCisgICAgICAgICAgICBjb2RlID0g MAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAg ICBlcnJvcl9tc2cgPSAiezB9IC0gezF9Ii5mb3JtYXQoCisgICAgICAgICAg ICAgICAgZ2V0dGV4dCgnVGhlcmUgd2FzIGFuIGVycm9yIHJlbmFtaW5nIHRo ZSBmaWxlLicpLAorICAgICAgICAgICAgICAgIHN0cihlKSkKKworICAgICAg ICByZXN1bHQgPSB7CisgICAgICAgICAgICAnT2xkIFBhdGgnOiBvbGQsCisg ICAgICAgICAgICAnT2xkIE5hbWUnOiBvbGRuYW1lLAorICAgICAgICAgICAg J05ldyBQYXRoJzogbmV3cGF0aCwKKyAgICAgICAgICAgICdOZXcgTmFtZSc6 IG5ld25hbWUsCisgICAgICAgICAgICAnRXJyb3InOiBlcnJvcl9tc2csCisg ICAgICAgICAgICAnQ29kZSc6IGNvZGUKKyAgICAgICAgfQorCisgICAgICAg IHJldHVybiByZXN1bHQKKworICAgIGRlZiBkZWxldGUoc2VsZiwgcGF0aD1O b25lLCByZXE9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBEZWxldGUg ZmlsZSBvciBmb2xkZXIKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBz ZWxmLnZhbGlkYXRlX3JlcXVlc3QoJ2RlbGV0ZScpOgorICAgICAgICAgICAg cmV0dXJuIHsKKyAgICAgICAgICAgICAnRXJyb3InOiBnZXR0ZXh0KCdOb3Qg YWxsb3dlZCcpLAorICAgICAgICAgICAgICdDb2RlJzogMQorICAgICAgICAg ICAgfQorCisgICAgICAgIGRpciA9IHNlbGYuZGlyCisgICAgICAgIG9yaWdf cGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisKKyAgICAgICAg ZXJyX21zZyA9ICcnCisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToK KyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3JpZ19wYXRoKToKKyAg ICAgICAgICAgICAgICBvcy5ybWRpcihvcmlnX3BhdGgpCisgICAgICAgICAg ICAgICAgY29kZSA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgb3MucmVtb3ZlKG9yaWdfcGF0aCkKKyAgICAgICAgICAgICAgICBj b2RlID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAg ICAgICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVy cm9yKQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICdQYXRo JzogcGF0aCwKKyAgICAgICAgICAgICdFcnJvcic6IGVycl9tc2csCisgICAg ICAgICAgICAnQ29kZSc6IGNvZGUKKyAgICAgICAgfQorCisgICAgICAgIHJl dHVybiByZXN1bHQKKworICAgIGRlZiBhZGQoc2VsZiwgcmVxPU5vbmUpOgor ICAgICAgICAiIiIKKyAgICAgICAgRmlsZSB1cGxvYWQgZnVuY3Rpb25hbGl0 eQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYudmFsaWRhdGVf cmVxdWVzdCgndXBsb2FkJyk6CisgICAgICAgICAgICByZXR1cm4geworICAg ICAgICAgICAgICdFcnJvcic6IGdldHRleHQoJ05vdCBhbGxvd2VkJyksCisg ICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAgICB9CisKKyAgICAg ICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAgZXJyX21zZyA9ICcnCisgICAg ICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGgg PSByZXEuZm9ybS5nZXQoJ2N1cnJlbnRwYXRoJykKKyAgICAgICAgICAgIG9y aWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisgICAgICAg ICAgICB0aGVmaWxlID0gcmVxLmZpbGVzWyduZXdmaWxlJ10KKyAgICAgICAg ICAgIG5ld05hbWUgPSAnezB9ezF9Jy5mb3JtYXQob3JpZ19wYXRoLCB0aGVm aWxlLmZpbGVuYW1lKQorCisgICAgICAgICAgICB3aXRoIG9wZW4obmV3TmFt ZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRoZWZp bGUucmVhZCgpKQorICAgICAgICAgICAgY29kZSA9IDAKKyAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyX21zZyA9ICJF cnJvcjogezB9Ii5mb3JtYXQoZS5zdHJlcnJvcikKKworICAgICAgICByZXN1 bHQgPSB7CisgICAgICAgICAgICAnUGF0aCc6IHBhdGgsCisgICAgICAgICAg ICAnTmFtZSc6IG5ld05hbWUsCisgICAgICAgICAgICAnRXJyb3InOiBlcnJf bXNnLAorICAgICAgICAgICAgJ0NvZGUnOiBjb2RlCisgICAgICAgIH0KKwor ICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgaXNfZmlsZV9leGlz dChzZWxmLCBwYXRoLCBuYW1lLCByZXE9Tm9uZSk6CisgICAgICAgICIiIgor ICAgICAgICBDaGVja3Mgd2hldGhlciBnaXZlbiBmaWxlIGV4aXN0cyBvciBu b3QKKyAgICAgICAgIiIiCisgICAgICAgIGRpciA9IHNlbGYuZGlyCisgICAg ICAgIGVycl9tc2cgPSAnJworICAgICAgICBjb2RlID0gMQorICAgICAgICB0 cnk6CisgICAgICAgICAgICBvcmlnX3BhdGggPSAiezB9ezF9Ii5mb3JtYXQo ZGlyLCBwYXRoKQorICAgICAgICAgICAgbmV3TmFtZSA9ICd7MH17MX0nLmZv cm1hdChvcmlnX3BhdGgsIG5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRo LmV4aXN0cyhuZXdOYW1lKToKKyAgICAgICAgICAgICAgICBjb2RlID0gMAor ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb2RlID0gMQor ICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBl cnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVycm9yKQorCisg ICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICdQYXRoJzogcGF0aCwK KyAgICAgICAgICAgICdOYW1lJzogbmV3TmFtZSwKKyAgICAgICAgICAgICdF cnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29kZSc6IGNvZGUKKyAg ICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBj cmVhdGVfZmlsZShzZWxmLCBwYXRoLCBuYW1lLCByZXE9Tm9uZSk6CisgICAg ICAgICIiIgorICAgICAgICBDcmVhdGUgbmV3IGZpbGUgZnVuY3Rpb25hbGl0 eQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYudmFsaWRhdGVf cmVxdWVzdCgnY3JlYXRlJyk6CisgICAgICAgICAgICByZXR1cm4geworICAg ICAgICAgICAgICdFcnJvcic6IGdldHRleHQoJ05vdCBhbGxvd2VkJyksCisg ICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAgICB9CisKKyAgICAg ICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAgZXJyX21zZyA9ICcnCisgICAg ICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9yaWdf cGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisgICAgICAgICAg ICBuZXdOYW1lID0gJ3swfXsxfScuZm9ybWF0KG9yaWdfcGF0aCwgbmFtZSkK KyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdOYW1lKToK KyAgICAgICAgICAgICAgICBvcGVuKG5ld05hbWUsICd3JykKKyAgICAgICAg ICAgICAgICBjb2RlID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICBlcnJfbXNnID0gZ2V0dGV4dCgiRXJyb3I6IEZpbGUgYWxyZWFk eSBleGlzdHMiKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Cisg ICAgICAgICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0 cmVycm9yKQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICdQ YXRoJzogcGF0aCwKKyAgICAgICAgICAgICdOYW1lJzogbmV3TmFtZSwKKyAg ICAgICAgICAgICdFcnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29k ZSc6IGNvZGUKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQK KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0TmV3TmFtZShkaXIs IHBhdGgsIG5ld05hbWUsIGNvdW50PTEpOgorICAgICAgICAiIiIKKyAgICAg ICAgVXRpbGl0eSB0byBwcm92aWRlIG5ldyBuYW1lIGZvciBmb2xkZXIgaWYg ZmlsZQorICAgICAgICB3aXRoIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cwor ICAgICAgICAiIiIKKyAgICAgICAgbGFzdF9jaGFyID0gbmV3TmFtZVstMV0K KyAgICAgICAgdG5ld1BhdGggPSBkaXIgKyAnLycgKyBwYXRoICsgbmV3TmFt ZSArICdfJytzdHIoY291bnQpCisgICAgICAgIGlmIGxhc3RfY2hhciA9PSAn cicgYW5kIG5vdCBwYXRoX2V4aXN0cyh0bmV3UGF0aCk6CisgICAgICAgICAg ICByZXR1cm4gdG5ld1BhdGgsIG5ld05hbWUKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIGxhc3RfY2hhciA9IGludCh0bmV3UGF0aFstMV0pICsgMQor ICAgICAgICAgICAgbmV3UGF0aCA9IGRpciArICcvJyArIHBhdGggKyBuZXdO YW1lICsgJ18nK3N0cihsYXN0X2NoYXIpCisgICAgICAgICAgICBpZiBwYXRo X2V4aXN0cyhuZXdQYXRoKToKKyAgICAgICAgICAgICAgICBjb3VudCArPSAx CisgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVtYW5hZ2VyLmdldE5ld05h bWUoZGlyLCBwYXRoLCBuZXdOYW1lLCBjb3VudCkKKyAgICAgICAgICAgIGVs c2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1BhdGgsIG5ld05hbWUK KworICAgIGRlZiBhZGRmb2xkZXIoc2VsZiwgcGF0aCwgbmFtZSk6CisgICAg ICAgICIiIgorICAgICAgICBGdW5jdGlvbmFsaXR5IHRvIGNyZWF0ZSBuZXcg Zm9sZGVyCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi52YWxp ZGF0ZV9yZXF1ZXN0KCdjcmVhdGUnKToKKyAgICAgICAgICAgIHJldHVybiB7 CisgICAgICAgICAgICAgJ0Vycm9yJzogZ2V0dGV4dCgnTm90IGFsbG93ZWQn KSwKKyAgICAgICAgICAgICAnQ29kZSc6IDEKKyAgICAgICAgICAgIH0KKwor ICAgICAgICBkaXIgPSBzZWxmLmRpcgorICAgICAgICBuZXdOYW1lID0gbmFt ZQorICAgICAgICBpZiBkaXIgIT0gIiI6CisgICAgICAgICAgICBuZXdQYXRo ID0gZGlyICsgJy8nICsgcGF0aCArIG5ld05hbWUgKyAnLycKKyAgICAgICAg ZWxzZToKKyAgICAgICAgICAgIG5ld1BhdGggPSBwYXRoICsgbmV3TmFtZSAr ICcvJworCisgICAgICAgIGVycl9tc2cgPSAnJworICAgICAgICBjb2RlID0g MQorICAgICAgICBpZiBub3QgcGF0aF9leGlzdHMobmV3UGF0aCk6CisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIobmV3UGF0 aCkKKyAgICAgICAgICAgICAgICBjb2RlID0gMAorICAgICAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGVycl9tc2cg PSAiRXJyb3I6IHswfSIuZm9ybWF0KGUuc3RyZXJyb3IpCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICBuZXdQYXRoLCBuZXdOYW1lID0gc2VsZi5nZXRO ZXdOYW1lKGRpciwgcGF0aCwgbmV3TmFtZSkKKyAgICAgICAgICAgIHRyeToK KyAgICAgICAgICAgICAgICBvcy5ta2RpcihuZXdQYXRoKQorICAgICAgICAg ICAgICAgIGNvZGUgPSAwCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CisgICAgICAgICAgICAgICAgZXJyX21zZyA9ICJFcnJvcjogezB9 Ii5mb3JtYXQoZS5zdHJlcnJvcikKKworICAgICAgICByZXN1bHQgPSB7Cisg ICAgICAgICAgICAnUGFyZW50JzogcGF0aCwKKyAgICAgICAgICAgICdOYW1l JzogbmV3TmFtZSwKKyAgICAgICAgICAgICdFcnJvcic6IGVycl9tc2csCisg ICAgICAgICAgICAnQ29kZSc6IGNvZGUKKyAgICAgICAgfQorCisgICAgICAg IHJldHVybiByZXN1bHQKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCBwYXRo PU5vbmUsIG5hbWU9Tm9uZSwgcmVxPU5vbmUpOgorICAgICAgICAiIiIKKyAg ICAgICAgRnVuY3Rpb25hbGl0eSB0byBkb3dubG9hZCBmaWxlCisgICAgICAg ICIiIgorICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9yZXF1ZXN0KCdk b3dubG9hZCcpOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg ICAnRXJyb3InOiBnZXR0ZXh0KCdOb3QgYWxsb3dlZCcpLAorICAgICAgICAg ICAgICdDb2RlJzogMQorICAgICAgICAgICAgfQorCisgICAgICAgIGRpciA9 IHNlbGYuZGlyCisgICAgICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1h dChkaXIsIHBhdGgpCisgICAgICAgIG5hbWUgPSBwYXRoLnNwbGl0KCcvJylb LTFdCisgICAgICAgIGNvbnRlbnQgPSBvcGVuKG9yaWdfcGF0aCwgJ3InKQor ICAgICAgICByZXNwID0gUmVzcG9uc2UoY29udGVudCkKKyAgICAgICAgcmVz cC5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVu dDsgZmlsZW5hbWU9JytuYW1lCisgICAgICAgIHJldHVybiByZXNwCisKKwor QGJsdWVwcmludC5yb3V0ZSgiL2ZpbGVtYW5hZ2VyLzxpbnQ6dHJhbnNfaWQ+ LyIsIG1ldGhvZHM9WyJHRVQiLCAiUE9TVCJdKQorQGxvZ2luX3JlcXVpcmVk CitkZWYgZmlsZV9tYW5hZ2VyKHRyYW5zX2lkKToKKyAgICAiIiIKKyAgICBJ dCBpcyB0aGUgY29tbW9uIGZ1bmN0aW9uIGZvciBldmVyeSBjYWxsIHdoaWNo IGlzIG1hZGUKKyAgICBhbmQgdGFrZXMgZnVuY3Rpb24gbmFtZSBmcm9tIHBv c3QgcmVxdWVzdCBhbmQgY2FsbHMgaXQuCisgICAgSXQgZ2V0cyB1bmlxdWUg dHJhbnNhY3Rpb24gaWQgZnJvbSBwb3N0IHJlcXVlc3QgYW5kCisgICAgcm90 YXRlIGl0IGludG8gRmlsZW1hbmFnZXIgY2xhc3MuCisgICAgIiIiCisgICAg bXlGaWxlbWFuYWdlciA9IEZpbGVtYW5hZ2VyKHRyYW5zX2lkKQorICAgIG1v ZGUgPSAnJworICAgIGt3YXJncyA9IHt9CisgICAgaWYgcmVxLm1ldGhvZCA9 PSAnUE9TVCc6CisgICAgICAgIGlmIHJlcS5maWxlczoKKyAgICAgICAgICAg IG1vZGUgPSAnYWRkJworICAgICAgICAgICAga3dhcmdzID0geydyZXEnOiBy ZXF9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrd2FyZ3MgPSBqc29u LmxvYWRzKHJlcS5kYXRhKQorICAgICAgICAgICAga3dhcmdzWydyZXEnXSA9 IHJlcQorICAgICAgICAgICAgbW9kZSA9IGt3YXJnc1snbW9kZSddCisgICAg ICAgICAgICBkZWwga3dhcmdzWydtb2RlJ10KKyAgICBlbGlmIHJlcS5tZXRo b2QgPT0gJ0dFVCc6CisgICAgICAgIGt3YXJncyA9IHsKKyAgICAgICAgICAn cGF0aCc6IHJlcS5hcmdzWydwYXRoJ10sCisgICAgICAgICAgJ25hbWUnOiBy ZXEuYXJnc1snbmFtZSddIGlmICduYW1lJyBpbiByZXEuYXJncyBlbHNlICcn CisgICAgICAgIH0KKyAgICAgICAgbW9kZSA9IHJlcS5hcmdzWydtb2RlJ10K KworICAgIHRyeToKKyAgICAgICAgZnVuYyA9IGdldGF0dHIobXlGaWxlbWFu YWdlciwgbW9kZSkKKyAgICAgICAgcmVzID0gZnVuYygqKmt3YXJncykKKyAg ICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsncmVzdWx0 JzogcmVzLCAnc3RhdHVzJzogVHJ1ZX0pCisgICAgZXhjZXB0IEV4Y2VwdGlv bjoKKyAgICAgICAgcmV0dXJuIGdldGF0dHIobXlGaWxlbWFuYWdlciwgbW9k ZSkoKiprd2FyZ3MpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2Zp bGVfbWFuYWdlci9zdGF0aWMvY3NzL2ZpbGVfbWFuYWdlci5jc3MgYi93ZWIv cGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci9zdGF0aWMvY3NzL2ZpbGVfbWFu YWdlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u Y2ViZWQxNwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mv ZmlsZV9tYW5hZ2VyL3N0YXRpYy9jc3MvZmlsZV9tYW5hZ2VyLmNzcwpAQCAt MCwwICsxLDY2MCBAQAorLyoKKyAqIENTUyBmb3IgU3RvcmFnZSBNYW5hZ2Vy IERpYWxvZworICovCisKKy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIHsKKyAg cGFkZGluZzogMnB4IDRweDsKKyAgYm9yZGVyLXdpZHRoOiAxcHg7CisgIGRp c3BsYXk6IGJsb2NrOworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgaGVpZ2h0 OiBhdXRvOworICBtaW4taGVpZ2h0OjMwcHg7CisgIG1heC1oZWlnaHQ6IDgw cHg7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIGJvcmRlci1ib3R0b206IDFw eDsKKyAgdG9wOiAzNXB4OworfQorCisjdXBsb2FkZXIgaDEgeworICBmb250 LXNpemU6IDE0cHg7CisgIG1hcmdpbjogMDsKKyAgbWFyZ2luLWxlZnQ6IDVw eDsKKyAgcGFkZGluZzogMDsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZsb2F0 OiBsZWZ0OworICB0ZXh0LWFsaWduOiBsZWZ0OworICBsaW5lLWhlaWdodDox LjllbTsKKyAgdGV4dC1zaGFkb3c6MXB4IDFweCAwcHggI2ZmZmZmZjsKK30K KworI3VwbG9hZGVyIGgxIGIgeworICBmb250LXdlaWdodDogbm9ybWFsOwor fQorCisudXBsb2FkcmVzcG9uc2UgeworICBkaXNwbGF5OiBub25lOworfQor CisuZmlsZWluZm8geworICBtaW4td2lkdGg6IDEwMHB4OworICBvdmVyZmxv dzogYXV0bzsKKyAgLyogbm8gbWFyZ2luIG9yIGJvcmRlciBhbGxvd2VkICov Cit9CisKKy5maWxlaW5mbyAjY29udGVudHMgbGkuc2VsZWN0ZWQsIC5maWxl aW5mbyAjY29udGVudHMgdGJvZHkgdHIuc2VsZWN0ZWQgeworICBiYWNrZ3Jv dW5kOiAjRDlFREY3OworfQorCisuZmlsZWluZm8gI2NvbnRlbnRzIGxpIC5m bV9maWxlX3JlbmFtZSwKKy5maWxlaW5mbyB0YWJsZSNjb250ZW50cyB0ciB0 ZDpmaXJzdC1jaGlsZCBpbnB1dC5mbV9maWxlX3JlbmFtZSB7CisgIGRpc3Bs YXk6IG5vbmU7CisgIHdpZHRoOiA4MHB4OworICBtYXJnaW46IDAgYXV0bzsK KyAgdGV4dC1hbGlnbjogY2VudGVyOworICBoZWlnaHQ6IDE3cHg7Cit9CisK Ky5maWxlaW5mbyB0YWJsZSNjb250ZW50cyB0ciB0ZCBwIHsKKyAgZGlzcGxh eTogaW5saW5lLWJsb2NrOworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisu ZmlsZWluZm8gdGFibGUjY29udGVudHMgdHIgdGQgcCB7CisgIGZvbnQtZmFt aWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5z LXNlcmlmOworfQorCisuZmlsZWluZm8gPiBoMSB7CisgIGZvbnQtc2l6ZTog MTZweDsKKyAgbWFyZ2luOiAxMDBweCBhdXRvOworfQorCisjdG9vbGJhciB7 CisgIGRpc3BsYXk6IGJsb2NrOworICBjbGVhcjogbGVmdDsKKyAgbWFyZ2lu OiA1MHB4IGF1dG87Cit9CisKKy5mbV9mb2xkZXIgeworICBmb250LXNpemU6 IHh4LWxhcmdlICFpbXBvcnRhbnQ7CisgIGNvbG9yOiByZ2IoMjU1LCAyMDQs IDApOworfQorCisuZm1fZHJpdmUgeworICBmb250LXNpemU6IHh4LWxhcmdl ICFpbXBvcnRhbnQ7CisgIGNvbG9yOiBkYXJrZ3JheTsKK30KKworLmZtX2Zp bGUgeworICBmb250LXNpemU6IHh4LWxhcmdlICFpbXBvcnRhbnQ7Cit9CisK Ky5maWxlX21hbmFnZXIgYnV0dG9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjog I0MwQzBDMDsKK30KKworLmZpbGVfbWFuYWdlciBoMSB7CisgIGZvbnQtc2l6 ZTogbWVkaXVtOworfQorCisvKiogSW5wdXQgZmlsZSBSZXBsYWNlbWVudCAq LworLmZpbGUtaW5wdXQtY29udGFpbmVyIHsKKyAgbWFyZ2luOjA7CisgIHBv c2l0aW9uOnJlbGF0aXZlOworICB0b3A6MHB4OworICB3aWR0aDoyMTVweDsK KyAgaGVpZ2h0OjMycHg7CisgIG92ZXJmbG93OiBoaWRkZW47Cit9CisKKy8q KiBGaXJlZm94IGhhY2sgKi8KK0AtbW96LWRvY3VtZW50IHVybC1wcmVmaXgo KSB7CisgIC5maWxlLWlucHV0LWNvbnRhaW5lciAgeworICAgIHRvcDoxMXB4 OworICAgIHdpZHRoOjI1NXB4OworICB9Cit9CisKKy8qKiBPcGVyYSBoYWNr ICovCit4Oi1vLXByZWZvY3VzLCAuZmlsZS1pbnB1dC1jb250YWluZXIge3Rv cDoxNnB4O3dpZHRoOjE5OHB4O30KKworLm5ld2ZpbGUgeworICBwb3NpdGlv bjogYWJzb2x1dGU7CisgIHRvcDowOworICBsZWZ0OiAzcHg7CisgIHJpZ2h0 OjA7CisgIHdpZHRoOiAxNTJweDsKKyAgaGVpZ2h0OjIzcHg7CisgIG9wYWNp dHk6MDsgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsKKyAgY3Vyc29yOiBw b2ludGVyOworICBib3JkZXI6MXB4IHNvbGlkIGJsdWU7Cit9CisKKy5hbHQt ZmlsZWlucHV0IHsKKyAgZGlzcGxheTogaW5saW5lOworICB3cmFwOiBuby13 cmFwOworfQorCisuZmlsZXBhdGggeworICBiYWNrZ3JvdW5kLWNvbG9yOiAj RjRGMUVEOworICBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjOworICBtYXJn aW46IDA7CisgIHBhZGRpbmc6IDAuMWVtIDAuM2VtOworICBsaW5lLWhlaWdo dDogMS43ZW07CisgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czog NnB4OworICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDZw eDsKKyAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDZweDsKKyAgLW1v ei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDZweDsKKyAgYm9yZGVyLXRv cC1sZWZ0LXJhZGl1czogNnB4OworICBib3JkZXItYm90dG9tLWxlZnQtcmFk aXVzOiA2cHg7Cit9CisKK0AtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKSB7 CisgIC5maWxlcGF0aCB7CisgICAgcGFkZGluZzowLjJlbSAwLjNlbTsKKyAg fQorfQorCisvKiogSW5wdXQgZmlsZSBSZXBsYWNlbWVudCAtIGVuZCAqLwor LmZpbGVfbGlzdGluZyAjY29udGVudHMuZ3JpZCB7CisgIHBhZGRpbmc6IDI1 cHg7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5maWxlX2xpc3Rpbmcg I2NvbnRlbnRzLmdyaWQgbGkgeworICBkaXNwbGF5OiBibG9jazsKKyAgZmxv YXQ6IGxlZnQ7CisgIHdpZHRoOiAxMDBweDsKKyAgbWluLWhlaWdodDogODBw eDsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBvdmVyZmxvdzogaGlkZGVu OworICBtYXJnaW4tYm90dG9tOiAxMHB4OworICAtd2Via2l0LWJvcmRlci1y YWRpdXM6IDJweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAycHg7CisgIGJv cmRlci1yYWRpdXM6IDJweDsKK30KKworZGl2LmNsaXAgeworICB3aWR0aDog MzBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBtYXJnaW46IDEwcHggYXV0bzsK KyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLmZpbGVfbGlzdGluZyAjY29u dGVudHMuZ3JpZCBwIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHRleHQtYWxp Z246IGNlbnRlcjsKKyAgbWFyZ2luLWJvdHRvbTogMTBweDsKK30KKworLmZp bGVfbGlzdGluZyAjY29udGVudHMubGlzdCB7CisgIHdpZHRoOiAxMDAlOwor fQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRoLAorLmZpbGVf bGlzdGluZyAjY29udGVudHMubGlzdCB0ZCB7CisgIHRleHQtYWxpZ246IGxl ZnQ7CisgIHBhZGRpbmc6IDZweDsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsK K30KKworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0aGVhZCB7Cisg IGJhY2tncm91bmQ6IHJnYigyNDQsMjQxLDIzNyk7IC8qIE9sZCBicm93c2Vy cyAqLworICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3As IHJnYmEoMjQ0LDI0MSwyMzcsMSkgMCUsIHJnYmEoMjE0LDIxMiwyMDksMSkg MTAwJSk7IC8qIEZGMy42KyAqLworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdy YWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1z dG9wKDAlLHJnYmEoMjQ0LDI0MSwyMzcsMSkpLCBjb2xvci1zdG9wKDEwMCUs cmdiYSgyMTQsMjEyLDIwOSwxKSkpOyAvKiBDaHJvbWUsU2FmYXJpNCsgKi8K KyAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCBy Z2JhKDI0NCwyNDEsMjM3LDEpIDAlLHJnYmEoMjE0LDIxMiwyMDksMSkgMTAw JSk7IC8qIENocm9tZTEwKyxTYWZhcmk1LjErICovCisgIGJhY2tncm91bmQ6 IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMjQ0LDI0MSwyMzcsMSkg MCUscmdiYSgyMTQsMjEyLDIwOSwxKSAxMDAlKTsgLyogT3BlcmEgMTEuMTAr ICovCisgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCBy Z2JhKDI0NCwyNDEsMjM3LDEpIDAlLHJnYmEoMjE0LDIxMiwyMDksMSkgMTAw JSk7IC8qIElFMTArICovCisgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVu dCh0byBib3R0b20sIHJnYmEoMjQ0LDI0MSwyMzcsMSkgMCUscmdiYSgyMTQs MjEyLDIwOSwxKSAxMDAlKTsgLyogVzNDICovCisgIGJvcmRlci1ib3R0b206 IDFweCBzb2xpZCAjY2NjOworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cisg IHdpZHRoOiAxMDAlOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5s aXN0IHRoIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGN1cnNvcjogcG9p bnRlcjsKK30KKworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0aC50 YWJsZXNvcnRlci1oZWFkZXJBc2MsCisuZmlsZV9saXN0aW5nICNjb250ZW50 cy5saXN0IHRoLnRhYmxlc29ydGVyLWhlYWRlckRlc2MgeworICBiYWNrZ3Jv dW5kOiByZ2IoMjE0LDIxMiwyMDkpOyAvKiBPbGQgYnJvd3NlcnMgKi8KKyAg YmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDIx NCwyMTIsMjA5LDEpIDAlLCByZ2JhKDI0NCwyNDEsMjM3LDEpIDEwMCUpOyAv KiBGRjMuNisgKi8KKyAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChs aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSxy Z2JhKDIxNCwyMTIsMjA5LDEpKSwgY29sb3Itc3RvcCgxMDAlLHJnYmEoMjQ0 LDI0MSwyMzcsMSkpKTsgLyogQ2hyb21lLFNhZmFyaTQrICovCisgIGJhY2tn cm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgyMTQs MjEyLDIwOSwxKSAwJSxyZ2JhKDI0NCwyNDEsMjM3LDEpIDEwMCUpOyAvKiBD aHJvbWUxMCssU2FmYXJpNS4xKyAqLworICBiYWNrZ3JvdW5kOiAtby1saW5l YXItZ3JhZGllbnQodG9wLCByZ2JhKDIxNCwyMTIsMjA5LDEpIDAlLHJnYmEo MjQ0LDI0MSwyMzcsMSkgMTAwJSk7IC8qIE9wZXJhIDExLjEwKyAqLworICBi YWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgyMTQs MjEyLDIwOSwxKSAwJSxyZ2JhKDI0NCwyNDEsMjM3LDEpIDEwMCUpOyAvKiBJ RTEwKyAqLworICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90 dG9tLCByZ2JhKDIxNCwyMTIsMjA5LDEpIDAlLHJnYmEoMjQ0LDI0MSwyMzcs MSkgMTAwJSk7IC8qIFczQyAqLworfQorCisuZmlsZV9saXN0aW5nICNjb250 ZW50cy5saXN0IHRkIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAj Y2NjOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRkOmZp cnN0LWNoaWxkIHsKKyAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgcGFkZGlu Zy1sZWZ0OiAwOworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy1sZWZ0OiAy MnB4OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBiYWNr Z3JvdW5kLXBvc2l0aW9uOiAzcHggY2VudGVyOworfQorCisuZmlsZV9saXN0 aW5nICNjb250ZW50cy5saXN0IHRkLnRibF9mb2xkZXI6Zmlyc3QtY2hpbGQ6 YmVmb3JlIHsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7CisgIGNvbG9yOiByZ2Io MjU1LCAyMDQsIDApOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5s aXN0IHRkLnRibF9maWxlOmZpcnN0LWNoaWxkOmJlZm9yZSB7CisgIG1hcmdp bi1yaWdodDogNXB4OworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5s aXN0IHRkLnRibF9kcml2ZTpmaXJzdC1jaGlsZDpiZWZvcmUgeworICBjb2xv cjogZGFya2dyYXk7CisgIG1hcmdpbi1yaWdodDogNXB4OworfQorCisuZmls ZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRib2R5IHRyOmhvdmVyIHsKKyAg YmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgY3Vyc29yOiBwb2ludGVyOwor fQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5ncmlkIGxpOmhvdmVyIHsK KyAgYm9yZGVyOiAxcHggc29saWQgI0U1RTVFNTsKKyAgYmFja2dyb3VuZC1j b2xvcjogI0Y3RjdGNzsKKyAgY3Vyc29yOiBwb2ludGVyOworICBtYXgtaGVp Z2h0OiA3OHB4OworfQorCisubWV0YSB7CisgIGRpc3BsYXk6IG5vbmU7Cit9 CisKKyNhY3Rpdml0eSB7CisgIG1hcmdpbjogMTAwcHggYXV0bzsKK30KKwor YnV0dG9uLmdyaWQgc3BhbiwKK2J1dHRvbi5saXN0IHNwYW4geworICB3aWR0 aDogMjBweDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAg YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKK30KKworLmZp bGVfbGlzdGluZyAjY29udGVudHMgbGkgeworICBwb3NpdGlvbjogcmVsYXRp dmU7Cit9CisKKyNkcm9wem9uZS1jb250YWluZXIgaDIgeworICBmb250LXNp emU6IDIwcHg7CisgIG1hcmdpbi10b3A6IDA7Cit9CisKKy5wZ2FkbWluLXN0 b3JhZ2UtYm9keSB7CisgIG1pbi13aWR0aDogNzUwcHggIWltcG9ydGFudDsK KyAgbWluLWhlaWdodDogMzgwcHggIWltcG9ydGFudDsKK30KKworLnBnYWRt aW4tc3RvcmFnZS1ib2R5IC5hanMtY29udGVudCB7CisgIHRvcDogMHB4ICFp bXBvcnRhbnQ7CisgIGxlZnQ6IDAgIWltcG9ydGFudDsKKyAgcmlnaHQ6IDAg IWltcG9ydGFudDsKKyAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CisgIHdp ZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cit9CisKKy5zdG9yYWdlX2RpYWxvZyB7 CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKy5zdG9y YWdlX2NvbnRlbnQgeworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAxMDAl OworfQorCisuZmlsZV9tYW5hZ2VyIHsKKyAgYm90dG9tOiAwOworICBsZWZ0 OiAwOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHJpZ2h0OiAwOworICB0 b3A6IDA7Cit9CisKKy5idG4tZ3JvdXAuZmlsZW1hbmFnZXItYnRuLWdyb3Vw IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7Cisg IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0E5QTlBOTsKK30KKworLmZpbGVf bWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAgewor ICBwYWRkaW5nOiAwOworICBkaXNwbGF5OiBibG9jazsKKyAgYm9yZGVyOiAx cHggc29saWQgZGFya2dyZXk7CisgIGhlaWdodDogMzBweDsKKyAgYm9yZGVy LXJhZGl1czogNXB4OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsK KyAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CisgIGZsb2F0OiBsZWZ0Owor ICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cit9CisKKy5maWxlX21hbmFnZXIgI3Vw bG9hZGVyIC5idG4tZ3JvdXAgLmJ0bltkaXNhYmxlZF0geworICBjb2xvcjog Izg4ODsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsKK30KKworLmZpbGVf bWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLWJ0bi1ncm91cCB7Cisg IGJvcmRlcjogMXB4IHNvbGlkIGRhcmtncmV5OworICBib3JkZXItcmFkaXVz OiA1cHg7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworICAtbW96 LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgd2lkdGg6IGF1dG87CisgIGZsb2F0 OiBsZWZ0OworICBvdmVyZmxvdzogaGlkZGVuOworfQorCisuZmlsZV9tYW5h Z2VyIC5idG4tZ3JvdXAgeworICBtYXJnaW46IDJweCAzcHg7Cit9CisKKy5m aWxlX21hbmFnZXIgLmZpbGVpbmZvIHsKKyAgaGVpZ2h0OiBjYWxjKDEwMCUg LSAxMDlweCk7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIHBvc2l0aW9uOiBy ZWxhdGl2ZTsKKyAgdG9wOiAzNXB4OworICBmb250LXNpemU6IDEycHg7Cit9 CisKKy5maWxlX21hbmFnZXIgLmZpbGVpbmZvICNjb250ZW50c3sKKyAgcGFk ZGluZzogNXB4OworICB0ZXh0LWFsaWduOiBsZWZ0OworICBkaXNwbGF5OiBp bmxpbmUtYmxvY2s7CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6IDEwMCU7 CisgIG92ZXJmbG93OiBhdXRvOworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxl aW5mbyAjY29udGVudHMgdGhlYWQgdHJ7CisgIHBvc2l0aW9uOiByZWxhdGl2 ZTsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDAlOworfQorCisu ZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGhlYWQgdHIgdGg6 bnRoLWNoaWxkKDEpLAorLmZpbGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRl bnRzIHRib2R5IHRyIHRkOm50aC1jaGlsZCgxKSB7CisgIHBvc2l0aW9uOiBy ZWxhdGl2ZTsKKyAgd2lkdGg6IDEwMCU7CisgIG1pbi13aWR0aDogMTAwJTsK KyAgbWF4LXdpZHRoOiAxMDAlOworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxl aW5mbyAjY29udGVudHMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpIHsKKyAg d2lkdGg6IDE1MnB4OworICBtaW4td2lkdGg6IDE1MnB4OworICBtYXgtd2lk dGg6IDE1MnB4OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29u dGVudHMgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDIpIHsKKyAgd2lkdGg6IDE1 MHB4OworICBtaW4td2lkdGg6IDE1MHB4OworICBtYXgtd2lkdGg6IDE1MHB4 OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGhl YWQgdHIgdGg6bnRoLWNoaWxkKDMpIHsKKyAgd2lkdGg6IDE5N3B4OworICBt aW4td2lkdGg6IDE5N3B4OworICBtYXgtd2lkdGg6IDE5N3B4OworfQorCisu ZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGJvZHkgdHIgdGQ6 bnRoLWNoaWxkKDMpIHsKKyAgd2lkdGg6IDE4MHB4OworICBtaW4td2lkdGg6 IDE4MHB4OworICBtYXgtd2lkdGg6IDE4MHB4OworfQorCisuZmlsZV9tYW5h Z2VyIC5maWxlaW5mbyAjY29udGVudHMgdGJvZHkgeworICBkaXNwbGF5OiBi bG9jazsKKyAgb3ZlcmZsb3c6IGF1dG87CisgIHdpZHRoOiAxMDAlOworICBo ZWlnaHQ6IGNhbGMoMTAwJSAtIDMwcHgpOworfQorLmZpbGVfbWFuYWdlciAu ZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5IHRyeworICBkaXNwbGF5OiB0YWJs ZTsKKyAgbWF4LXdpZHRoOiAxMDAlOworICB3aWR0aDogMTAwJTsKK30KKwor LmZpbGVfbWFuYWdlciAudXBsb2FkX2ZpbGUgeworICBkaXNwbGF5OiBub25l OworICB6LWluZGV4OiAxOworICBtYXJnaW4tYm90dG9tOiBhdXRvOworICB0 b3A6IDA7CisgIG1hcmdpbi10b3A6IDA7CisgIGhlaWdodDogY2FsYygxMDAl IC0gNXB4KTsKKyAgd2lkdGg6IDEwMCU7CisgIGJvcmRlcjogbm9uZTsKKyAg cG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDA7CisgIGJhY2tncm91 bmQtY29sb3I6IGJsYWNrOworICBwYWRkaW5nOiAwcHg7CisgIHBhZGRpbmct dG9wOiAyMnB4OworICBwYWRkaW5nLWxlZnQ6IDEwcHg7Cit9CisKKy5maWxl X21hbmFnZXIgLnVwbG9hZF9maWxlICNkcm9wem9uZS1jb250YWluZXIgewor ICBoZWlnaHQ6IDEwMCU7Cit9CisKKy5maWxlX21hbmFnZXIgLnVwbG9hZF9m aWxlICNtdWx0aXBsZS11cGxvYWRzIHsKKyAgYmFja2dyb3VuZDogYmxhY2s7 CisgIGNvbG9yOiB3aGl0ZTsKKyAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7 CisgIGhlaWdodDogY2FsYygxMDAlIC0gMjBweCk7CisgIG92ZXJmbG93OiBh dXRvOworICB3aWR0aDogMTAwJTsKK30KKworLmZpbGVpbmZvIC5wcm9tcHQt aW5mbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgY29sb3I6ICNmZmY7 Cit9CisKKy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5idG4tZ3JvdXAgLnNo b3dfc2VsZWN0ZWRfZmlsZSB7CisgIGZsb2F0OiBsZWZ0OworICB0ZXh0LWFs aWduOiBsZWZ0OworICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICBwYWRk aW5nOiA0cHggMCAwIDVweDsKKyAgaGVpZ2h0OiAxMDAlOworfQorCisuZmls ZWluZm8gLmZpbGVfbGlzdGluZyB7CisgIGRpc3BsYXk6IGJsb2NrOworICBo ZWlnaHQ6IGNhbGMoMTAwJSAtIDM1cHgpOworICBib3JkZXI6IDFweCBzb2xp ZCAjY2NjOworICBib3JkZXItYm90dG9tOiBub25lOworICBmb250LXNpemU6 IDEycHg7Cit9CisKKy5maWxlaW5mbyAuYWxsb3dlZF9maWxlX3R5cGVzIHsK KyAgZGlzcGxheTogYmxvY2s7CisgIGhlaWdodDogMjVweDsKKyAgcG9zaXRp b246IGFic29sdXRlOworICByaWdodDogMDsKKyAgYm9yZGVyLXRvcDogMXB4 IHNvbGlkICNjY2M7CisgIHBhZGRpbmctdG9wOiA0cHg7CisgIGJvdHRvbTog NHB4OworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZDogI2ZmZjsKK30K KworLmFsbG93ZWRfZmlsZV90eXBlcyAuY3JlYXRlX2lucHV0IHsKKyAgcG9z aXRpb246IGFic29sdXRlOworICBsZWZ0OiA1cHg7CisgIHdpZHRoOiAyMzBw eDsKK30KKworLmFsbG93ZWRfZmlsZV90eXBlcyAuY3JlYXRlX2lucHV0IHNw YW4geworICBwYWRkaW5nLXJpZ2h0OiA1cHg7Cit9CisKKy5hbGxvd2VkX2Zp bGVfdHlwZXMgLmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0gewor ICBib3JkZXItcmFkaXVzOiAzcHg7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1 czogM3B4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgaGVpZ2h0 OiAyMnB4OworICB3aWR0aDogMTQwcHg7CisgIGZvbnQtc2l6ZTogMTNweDsK KyAgZGlzcGxheTogaW5saW5lOworfQorCisuYWxsb3dlZF9maWxlX3R5cGVz IC5jaGFuZ2VfZmlsZV90eXBlcyB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK KyAgdG9wOiA0cHg7CisgIHJpZ2h0OiAwOworfQorCisuYWxsb3dlZF9maWxl X3R5cGVzIC5jaGFuZ2VfZmlsZV90eXBlcyBzZWxlY3QgeworICB3aWR0aDog NzVweDsKKyAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgIGZsb2F0OiByaWdodDsK KyAgaGVpZ2h0OiAyMnB4OworfQorCisuYWxsb3dlZF9maWxlX3R5cGVzIC5j aGFuZ2VfZmlsZV90eXBlcyBsYWJlbCB7CisgIGZsb2F0OiByaWdodDsKKyAg cGFkZGluZy10b3A6IDNweDsKK30KKworLnVwbG9hZF9maWxlIC5maWxlX3Vw bG9hZF9tYWluIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBoZWlnaHQ6 IDEyN3B4OzsKKyAgd2lkdGg6IDEyMHB4OworICBkaXNwbGF5OiBpbmxpbmUt YmxvY2s7CisgIG1hcmdpbjogMCAxNXB4IDE1cHggMCAhaW1wb3J0YW50Owor ICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgcG9zaXRpb246IHJlbGF0 aXZlOworICBib3JkZXItcmFkaXVzOiA1cHg7CisgIC13ZWJraXQtYm9yZGVy LXJhZGl1czogNXB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKKyAg YmFja2dyb3VuZDogI2ZmZjsKKyAgbWFyZ2luOiAycHg7CisgIG9wYWNpdHk6 IDE7Cit9CisKKy51cGxvYWRfZmlsZSAuZmlsZV91cGxvYWRfbWFpbiAuc2hv d19lcnJvciB7CisgIHBhZGRpbmc6IDEwcHggMCAwIDEwcHg7CisgIGNvbG9y OiAjMDAwOworfQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4g LnNob3dfZXJyb3IgcC5zaXplIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOwor fQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4gLnNob3dfZXJy b3IgcC5uYW1lIHsKKyAgZm9udC1zaXplOiAxM3B4OworICBvdmVyZmxvdzog aGlkZGVuOworICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKKyAgdGV4dC1h bGlnbjogY2VudGVyOworfQorCisuZmlsZV91cGxvYWRfbWFpbiAuZHotcHJl dmlldyB7CisgIG1hcmdpbjogMDsKK30KKworLmZpbGVfdXBsb2FkX21haW4g LmR6LXByb2dyZXNzIHsKKyAgdG9wOiA4M3B4ICFpbXBvcnRhbnQ7CisgIGJv cmRlcjogMXB4IHNvbGlkICM4YTZkM2I7CisgIGJvcmRlci1yYWRpdXM6IDAg IWltcG9ydGFudDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwICFpbXBvcnRh bnQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50Owor fQorCisuZmlsZV91cGxvYWRfbWFpbiAuZHotcHJvZ3Jlc3MgLmR6LXVwbG9h ZCB7CisgIGJhY2tncm91bmQ6ICNkOWVkZjcgIWltcG9ydGFudDsKKyAgdGV4 dC1hbGlnbjogY2VudGVyOworfQorCisuZmlsZV91cGxvYWRfbWFpbiAuZHot cHJvZ3Jlc3MgLmR6LXVwbG9hZC5zdWNjZXNzIHsKKyAgYmFja2dyb3VuZDog Z3JlZW4gIWltcG9ydGFudDsKK30KKworYS5kei1yZW1vdmUgeworICBkaXNw bGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CisKKy51cGxvYWRfZmlsZSAuZmls ZV91cGxvYWRfbWFpbiBhLmR6X2ZpbGVfcmVtb3ZlIHsKKyAgcG9zaXRpb246 IGFic29sdXRlOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBjb2xvcjog I0ZGMDAwMDsKKyAgY3Vyc29yOiBwb2ludGVyOworICBib3JkZXItcmFkaXVz OiA1cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4OworICAtd2Via2l0 LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgZm9udC1zaXplOiBsYXJnZTsKK30K KworLnVwbG9hZF9maWxlIC5maWxlX3VwbG9hZF9tYWluIGEuZHpfZmlsZV9y ZW1vdmU6aG92ZXIgeworICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKK30K KworLmZpbGVpbmZvIC5kZWxldGVfaXRlbSwgLmZpbGVpbmZvIC5yZXBsYWNl X2ZpbGUgeworICBkaXNwbGF5OiBub25lOworICBwYWRkaW5nOiA3cHggNXB4 OworICBvcGFjaXR5OiAwLjg7CisgIGNvbG9yOiAjZmZmOworICBib3JkZXI6 IDFweCBzb2xpZCBkYXJrZ3JleTsKKyAgYmFja2dyb3VuZDogIzAwMDsKKyAg Ym94LXNoYWRvdzogMXB4IDBweCAzcHggMXB4IHJlZDsKK30KKworLmZpbGVp bmZvIC5kZWxldGVfaXRlbSBzcGFuLnB1bGwtcmlnaHQgLmJ0biwKKy5maWxl aW5mbyAucmVwbGFjZV9maWxlIHNwYW4ucHVsbC1yaWdodCAuYnRuIHsKKyAg cGFkZGluZzogMHB4IDVweDsKKyAgY29sb3I6ICMwMDA7CisgIGJhY2tncm91 bmQ6ICNmZmY7CisgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLmZpbGVpbmZv IC5kZWxldGVfaXRlbSBzcGFuLAorLmZpbGVpbmZvIC5yZXBsYWNlX2ZpbGUg c3BhbiB7CisgIG1hcmdpbi1yaWdodDogMTBweDsKK30KKworLnVwbG9hZF9m aWxlIC5kel9jcm9zc19idG4geworICBjb2xvcjogI2ZmZjsKKyAgZm9udC1z aXplOiB4LWxhcmdlOworICByaWdodDogLTRweDsKKyAgcG9zaXRpb246IGFi c29sdXRlOworICB0b3A6IC0xcHg7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFy ZW50OworICBib3JkZXI6IG5vbmU7Cit9CisKKy5maWxlX21hbmFnZXIgLmZp bGVpbmZvICNjb250ZW50cyAuZm1fbG9ja19pY29uIHsKKyAgY29sb3I6IHJl ZDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDZweDsKKyAgcmln aHQ6IDA7CisgIGxlZnQ6IDE5cHg7CisgIGZvbnQtc2l6ZTogMTZweDsKK30K KworLmZpbGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRlbnRzIC5mYS1sb2Nr LnRibF9sb2NrX2ljb24geworICBjb2xvcjogcmVkOworICBwb3NpdGlvbjog YWJzb2x1dGU7CisgIGxlZnQ6IDI5cHg7CisgIHRvcDogNXB4OworICBmb250 LXNpemU6IDEwcHg7Cit9CisKKy5maWxlaW5mbyAuYWN0aXZpdHkgeworICBw b3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDUwJTsKKyAgZm9udC1zaXpl OiB4eC1sYXJnZTsKKyAgdG9wOiAzMCU7CisgIHotaW5kZXg6IDE7Cit9CisK Ky5maWxlX21hbmFnZXIgYnV0dG9uLk9OIHsKKyAgYmFja2dyb3VuZDogI0Y5 RjhGNzsKKyAgYm9yZGVyOiAxcHggaW5zZXQgI2NjYzsKK30KZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9m aWxlX21hbmFnZXIvaW5kZXguaHRtbCBiL3dlYi9wZ2FkbWluL21pc2MvZmls ZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvaW5kZXguaHRtbApu ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MTA0NGRhCi0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFn ZXIvdGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9pbmRleC5odG1sCkBAIC0wLDAg KzEsNTUgQEAKK++7vzxodG1sPgorPGhlYWQ+CisgIDxzY3JpcHQgdHlwZT0i dGV4dC9qYXZhc2NyaXB0IiBzcmM9Int7IHVybF9mb3IoJ3N0YXRpYycsIGZp bGVuYW1lPSdqcy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuanMnKSB9fSI+ PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz cmM9Int7IHVybF9mb3IoJ2ZpbGVfbWFuYWdlci5pbmRleCcpIH19dXRpbGl0 eS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9 ImZpbGVfbWFuYWdlciI+CisgIDxmb3JtIGlkPSJ1cGxvYWRlciIgbWV0aG9k PSJwb3N0IiBjbGFzcz0nY29sLXhzLTEyJz4KKyAgICA8ZGl2IGNsYXNzPSJi dG4tZ3JvdXAgZmlsZW1hbmFnZXItcGF0aC1ncm91cCBjb2wtc20tNyBjb2wt eHMtMTIiIHJvbGU9Imdyb3VwIj4KKyAgICAgIDxidXR0b24gbmFtZT0iaG9t ZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSG9tZSIgdGl0bGU9IkhvbWUiIGNs YXNzPSJmYSBmYS1ob21lIGJ0biBob21lIj48c3Bhbj48L3NwYW4+PC9idXR0 b24+CisgICAgICA8YnV0dG9uIG5hbWU9ImxldmVsLXVwIiB0eXBlPSJidXR0 b24iIHRpdGxlPSJCYWNrIiB2YWx1ZT0iTGV2ZWxVcCIgY2xhc3M9ImJ0biBm YSBmYS1sZXZlbC11cCBsZXZlbC11cCIgZGlzYWJsZWQ+PHNwYW4+PC9zcGFu PjwvYnV0dG9uPgorICAgICAgPGgxIHRpdGxlPScnPjwvaDE+CisgICAgPC9k aXY+CisgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIGZpbGVtYW5hZ2VyLWJ0 bi1ncm91cCIgcm9sZT0iZ3JvdXAiPgorICAgICAgPGRpdiBjbGFzcz0idXBs b2FkcmVzcG9uc2UiPjwvZGl2PgorICAgICAgPGlucHV0IGNsYXNzPSJtb2Rl IiBuYW1lPSJtb2RlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJhZGQiIC8+Cisg ICAgICA8aW5wdXQgY2xhc3M9ImN1cnJlbnRwYXRoIiBuYW1lPSJjdXJyZW50 cGF0aCIgdHlwZT0iaGlkZGVuIiAvPgorICAgICAgPGJ1dHRvbiB0eXBlPSJi dXR0b24iIHRpdGxlPSJSZWZyZXNoIiBjbGFzcz0iYnRuIGZhIGZhLXJlZnJl c2ggcmVmcmVzaCI+PC9idXR0b24+CisgICAgICA8YnV0dG9uIHR5cGU9InN1 Ym1pdCIgdGl0bGU9IlVwbG9hZCBGaWxlIiB2YWx1ZT0iVXBsb2FkIiBjbGFz cz0iYnRuIGZhIGZhLXVwbG9hZCB1cGxvYWQiPjxzcGFuPjwvc3Bhbj48L2J1 dHRvbj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iRG93 bmxvYWQgRmlsZSIgY2xhc3M9ImJ0biBmYSBmYS1kb3dubG9hZCBkb3dubG9h ZCIgZGlzYWJsZWQ+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPgorICAgICAgPGJ1 dHRvbiBuYW1lPSJkZWxldGUiIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IkRlbGV0 ZSBGaWxlL0ZvbGRlciIgY2xhc3M9ImJ0biBmYSBmYS10cmFzaCBkZWxldGUi IGRpc2FibGVkPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4KKyAgICAgIDxidXR0 b24gbmFtZT0icmVuYW1lIiB0eXBlPSJidXR0b24iIHRpdGxlPSJSZW5hbWUg RmlsZS9Gb2xkZXIiIGNsYXNzPSJidG4gZmEgZmEtcGVuY2lsLXNxdWFyZS1v IHJlbmFtZSI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPgorICAgICAgPGJ1dHRv biBuYW1lPSJuZXdmb2xkZXIiIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IkNyZWF0 ZSBuZXcgZm9sZGVyIiB2YWx1ZT0iTmV3IEZvbGRlciIgY2xhc3M9ImJ0biBm YSBmYS1mb2xkZXItb3BlbiBjcmVhdGUiPjxzcGFuPjwvc3Bhbj48L2J1dHRv bj4KKyAgICAgIDxidXR0b24gY2xhc3M9Ik9OIGZhIGZhLXRoIGJ0biBncmlk IiB0eXBlPSJidXR0b24iIHRpdGxlPSJWaWV3IGFzIGdyaWQiPjxzcGFuPjwv c3Bhbj48L2J1dHRvbj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBj bGFzcz0iYnRuIGZhIGZhLWxpc3QgbGlzdCIgdGl0bGU9IlZpZXcgYXMgVGFi bGUiPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4KKyAgICA8L2Rpdj4KKyAgPC9m b3JtPgorICA8ZGl2IGNsYXNzPSJmaWxlaW5mbyI+CisgICAgPHNwYW4gY2xh c3M9ImFjdGl2aXR5Ij4KKyAgICAgIDxpbWcgc3JjPSJ7eyB1cmxfZm9yKCdi cm93c2VyLnN0YXRpYycsIGZpbGVuYW1lPSdjc3MvYWNpVHJlZS9pbWFnZS9s b2FkLXJvb3QuZ2lmJykgfX0iPgorICAgIDwvc3Bhbj4KKyAgICA8ZGl2IGNs YXNzPSdkZWxldGVfaXRlbSc+CisgICAgICA8c3Bhbj5BcmUgeW91IHN1cmUg eW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbSA/PC9zcGFuPgorICAgICAg ICA8c3BhbiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgPGJ1dHRv biB0eXBlPSdidXR0b24nIGNsYXNzPSdidG4gYnRuX3llcyc+WUVTPC9idXR0 b24+CisgICAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSdi dG4gYnRuX25vJz5OTzwvYnV0dG9uPgorICAgICAgICA8L3NwYW4+CisgICAg PC9kaXY+CisgICAgPGRpdiBjbGFzcz0ncmVwbGFjZV9maWxlJz4KKyAgICAg IDxzcGFuPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXBsYWNlIHRoaXMg ZmlsZSA/PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1yaWdo dCI+CisgICAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSdi dG4gYnRuX3llcyc+WUVTPC9idXR0b24+CisgICAgICAgICAgPGJ1dHRvbiB0 eXBlPSdidXR0b24nIGNsYXNzPSdidG4gYnRuX25vJz5OTzwvYnV0dG9uPgor ICAgICAgICA8L3NwYW4+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0i ZmlsZV9saXN0aW5nIj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ1 cGxvYWRfZmlsZSBkcm9wem9uZSI+CisgICAgPC9kaXY+CisgICAgPGRpdiBj bGFzcz0iYWxsb3dlZF9maWxlX3R5cGVzIj4KKyAgICA8L2Rpdj4KKyAgPC9k aXY+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21h bmFnZXIvanMvZmlsZV9tYW5hZ2VyLmpzIGIvd2ViL3BnYWRtaW4vbWlzYy9m aWxlX21hbmFnZXIvdGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9qcy9maWxlX21h bmFnZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NTM1YTg5MAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mv ZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMvZmlsZV9t YW5hZ2VyLmpzCkBAIC0wLDAgKzEsNTkxIEBACitkZWZpbmUoWworICAgICAg J2pxdWVyeScsICd1bmRlcnNjb3JlJywgJ2FsZXJ0aWZ5J10sCisKKyAgLy8g VGhpcyBkZWZpbmVzIEZpbGUgTWFuYWdlciBkaWFsb2cKKyAgZnVuY3Rpb24o JCwgXywgYWxlcnRpZnkpIHsKKyAgICBwZ0FkbWluID0gcGdBZG1pbiB8fCB3 aW5kb3cucGdBZG1pbiB8fCB7fTsKKworICAgIC8qCisgICAgICogSG1tLi4u IHRoaXMgbW9kdWxlIGlzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCwgd2Ug Y2FuIHJlZmVyIHRvIHRoZSBvbGQKKyAgICAgKiBvYmplY3QgZnJvbSBoZXJl LgorICAgICAqLworICAgIGlmIChwZ0FkbWluLkZpbGVNYW5hZ2VyKQorICAg ICAgICByZXR1cm4gcGdBZG1pbi5GaWxlTWFuYWdlcjsKKworICAgIHBnQWRt aW4uRmlsZU1hbmFnZXIgPSB7CisgICAgICBpbml0OiBmdW5jdGlvbigpIHsK KyAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgcmV0 dXJuOworCisgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlOworCisg ICAgICAgIHZhciBtb2R1bGVfdXJsID0gInt7IHVybF9mb3IoJ2ZpbGVfbWFu YWdlci5pbmRleCcpIH19IiwKKyAgICAgICAgICAgIGZpbGVDb25uZWN0b3Ig PSBtb2R1bGVfdXJsICsgImZpbGVtYW5hZ2VyLyI7CisKKyAgICAgICAgICAv LyBzZW5kIGEgcmVxdWVzdCB0byBnZXQgdHJhbnNhY3Rpb24gaWQKKyAgICAg ICAgICB2YXIgZ2V0VHJhbnNJZCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHsKKyAg ICAgICAgICAgIHJldHVybiAkLmFqYXgoeworICAgICAgICAgICAgICBkYXRh OiBjb25maWdzLAorICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAg ICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgdXJsOiBt b2R1bGVfdXJsICsgImdldF90cmFuc19pZCIsCisgICAgICAgICAgICAgIGRh dGFUeXBlOiAianNvbiIsCisgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAi YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsCisgICAgICAgICAg ICB9KTsKKyAgICAgICAgICB9OworCisgICAgICAgICAgLy8gRnVuY3Rpb24g dG8gcmVtb3ZlIHRyYW5zIGlkIGZyb20gc2Vzc2lvbgorICAgICAgICAgIHZh ciByZW1vdmVUcmFuc0lkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBy ZXR1cm4gJC5hamF4KHsKKyAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCisg ICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgdXJs OiBtb2R1bGVfdXJsICsgImRlbF90cmFuc19pZC8iICsgdHJhbnNfaWQsCisg ICAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCisgICAgICAgICAgICAg IGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYt OCIsCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9OworICAgICAgICAv LyBEZWNsYXJlIHRoZSBTdG9yYWdlIGRpYWxvZworICAgICAgICBhbGVydGlm eS5kaWFsb2coJ3N0b3JhZ2VNYW5hZ2VyRGxnJywgZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgdmFyIGNvbnRyb2xzID0gW10sIC8vIEtlZXAgdHJhY2tpbmcg b2YgYWxsIHRoZSBiYWNrZm9ybSBjb250cm9scworICAgICAgICAgICAgICAv LyBEaWFsb2cgY29udGFpbnRlcgorICAgICAgICAgICAgICAkY29udGFpbmVy ID0gJCgiPGRpdiBjbGFzcz0nc3RvcmFnZV9kaWFsb2cnPjwvZGl2PiIpOwor CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBGdW5jdGlvbjogcmVuZGVy U3RvcmFnZVBhbmVsCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBSZW5k ZXJzIHRoZSBGaWxlTWFuYWdlciBpbiB0aGUgY29udGVudCBkaXYgYmFzZWQg b24gdGhlIGdpdmVuCisgICAgICAgICAgICogY29uZmlndXJhdGlvbiBwYXJh bWV0ZXJzLgorICAgICAgICAgICAqLworICAgICAgICAgIHZhciByZW5kZXJT dG9yYWdlUGFuZWwgPSBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAgICAg IC8qCisgICAgICAgICAgICAgKiBDbGVhciB0aGUgZXhpc3RpbmcgaHRtbCBp biB0aGUgc3RvcmFnZSBjb250ZW50CisgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIHZhciBjb250ZW50ID0gJGNvbnRhaW5lci5maW5kKCcuc3RvcmFn ZV9jb250ZW50Jyk7CisgICAgICAgICAgICBjb250ZW50LmVtcHR5KCk7CisK KyAgICAgICAgICAgICQuZ2V0KCJ7eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIu aW5kZXgnKSB9fSIsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAg Y29udGVudC5hcHBlbmQoZGF0YSk7CisgICAgICAgICAgICB9KTsKKworICAg ICAgICAgICAgdHJhbnNJZCA9IGdldFRyYW5zSWQocGFyYW1zKTsKKyAgICAg ICAgICAgIGlmICh0cmFuc0lkLnJlYWR5U3RhdGUgPT0gNCkKKyAgICAgICAg ICAgICAgdF9yZXMgPSBKU09OLnBhcnNlKHRyYW5zSWQucmVzcG9uc2VUZXh0 KTsKKyAgICAgICAgICAgIHRyYW5zX2lkID0gdF9yZXMuZGF0YS5maWxlVHJh bnNJZDsKKworICAgICAgICAgIH07CisKKyAgICAgICAgICAvLyBEaWFsb2cg cHJvcGVydHkKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbWFp bjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgICAgICAgIC8vIFNldCB0 aXRsZSBhbmQgYnV0dG9uIG5hbWUKKyAgICAgICAgICAgICAgaWYgKF8uaXNV bmRlZmluZWQocGFyYW1zWydkaWFsb2dfdGl0bGUnXSkpCisgICAgICAgICAg ICAgICAgcGFyYW1zWydkaWFsb2dfdGl0bGUnXSA9ICdTdG9yYWdlIG1hbmFn ZXInOworICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCBwYXJhbXNb J2RpYWxvZ190aXRsZSddKTsKKyAgICAgICAgICAgICAgaWYgKF8uaXNVbmRl ZmluZWQocGFyYW1zWydidG5fcHJpbWFyeSddKSkKKyAgICAgICAgICAgICAg ICBwYXJhbXNbJ2J0bl9wcmltYXJ5J10gPSAnU2VsZWN0JzsKKyAgICAgICAg ICAgICAgdGhpcy5zZXQoJ2xhYmVsJywgcGFyYW1zWydidG5fcHJpbWFyeSdd KTsKKworICAgICAgICAgICAgICB2YXIgdHJhbnNfaWQ7CisgICAgICAgICAg ICAgIHRoaXMudGl0bGUgPSBwYXJhbXMuZGlhbG9nX3RpdGxlOworCisgICAg ICAgICAgICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7Cisg ICAgICAgICAgICAgICRjb250YWluZXIuZmluZCgnLnN0b3JhZ2VfY29udGVu dCcpLnJlbW92ZSgpOworICAgICAgICAgICAgICAkY29udGFpbmVyLmFwcGVu ZCgiPGRpdiBjbGFzcz0nc3RvcmFnZV9jb250ZW50Jz48L2Rpdj4iKTsKKyAg ICAgICAgICAgICAgcmVuZGVyU3RvcmFnZVBhbmVsKHBhcmFtcyk7CisgICAg ICAgICAgICAgIHRoaXMuc2hvdygpOworICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgIHNldHRpbmdzOiB7CisgICAgICAgICAgICAgIGxhYmVsOiB1bmRl ZmluZWQKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXR0aW5nVXBk YXRlZDogZnVuY3Rpb24gKGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7Cisg ICAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgICAgICAgIGNh c2UgJ21lc3NhZ2UnOgorICAgICAgICAgICAgICAgICAgdGhpcy5zZXRNZXNz YWdlKG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlICdsYWJlbCc6CisgICAgICAgICAgICAgICAgICBp ZiAodGhpcy5fX2ludGVybmFsLmJ1dHRvbnNbMF0uZWxlbWVudCkgeworICAg ICAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzBd LmVsZW1lbnQuaW5uZXJIVE1MID0gbmV3VmFsdWU7CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldHVwOmZ1bmN0 aW9uKCkgeworICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg ICAgIGJ1dHRvbnM6WworICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICB0ZXh0OiAie3sgXygnU2VsZWN0JykgfX0iLCBrZXk6IDEz LCBjbGFzc05hbWU6ICJidG4gYnRuLXByaW1hcnkgZmEgZmEtZmlsZSBmaWxl X21hbmFnZXJfb2sgcGctYWxlcnRpZnktYnV0dG9uIGRpc2FibGVkIgorICAg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgdGV4dDogInt7IF8oJ0NhbmNlbCcpIH19IiwgY2xh c3NOYW1lOiAiYnRuIGJ0bi1kYW5nZXIgZmEgZmEtdGltZXMgcGctYWxlcnRp ZnktYnV0dG9uIgorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIF0sCisgICAgICAgICAgICAgICAgZm9jdXM6IHsgZWxlbWVudDogMCB9 LAorICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKKyAgICAgICAgICAgICAg ICAgIGNsb3NhYmxlQnlEaW1tZXI6IGZhbHNlLAorCisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbihjbG9zZUV2ZW50KSB7CisgICAg ICAgICAgICAgIGlmIChjbG9zZUV2ZW50LmJ1dHRvbi5rZXkgPT0gMTMpIHsK KyAgICAgICAgICAgICAgICAvL2Nsb3NlRXZlbnQuY2FuY2VsID0gdHJ1ZTsK KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoY2xvc2VFdmVu dC5idXR0b24udGV4dCA9PSAie3sgXygnU2VsZWN0JykgfX0iKSB7CisgICAg ICAgICAgICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09 ICdncmlkJyl7CisgICAgICAgICAgICAgICAgICBzZWxfZmlsZSA9ICQoJy5m aWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxlY3RlZCBwIHNwYW4n KS5hdHRyKCd0aXRsZScpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICBzZWxfZmlsZSA9ICQoJy5maWxlaW5mbyB0Ym9k eSB0ci5zZWxlY3RlZCB0ZCBwIHNwYW4nKS5hdHRyKCd0aXRsZScpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgbmV3RmlsZSA9 ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpICsgc2VsX2ZpbGU7CisgICAgICAg ICAgICAgICAgbmV3RmlsZSA9IG5ld0ZpbGUuc3Vic3RyKDEpOworICAgICAg ICAgICAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJpZ2dlcigncGdh ZG1pbi1zdG9yYWdlOmZpbmlzaF9idG46c3RvcmFnZV9kaWFsb2cnLCBuZXdG aWxlKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZW1vdmVU cmFuc0lkKHRyYW5zX2lkKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg ICBidWlsZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHRoaXMuZWxl bWVudHMuY29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgwKSk7 CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaG9va3M6IHsKKyAgICAg ICAgICAgICAgb25zaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg ICAkKHRoaXMuZWxlbWVudHMuYm9keSkuYWRkQ2xhc3MoJ3BnYWRtaW4tc3Rv cmFnZS1ib2R5Jyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICB9OworICAgICAgICB9KTsKKworICAgICAgICAvLyBEZWNs YXJlIHRoZSBTZWxlY3Rpb24gZGlhbG9nCisgICAgICAgIGFsZXJ0aWZ5LmRp YWxvZygnZmlsZVNlbGVjdGlvbkRsZycsIGZ1bmN0aW9uKCkgeworICAgICAg ICAgIHZhciBjb250cm9scyA9IFtdLCAvLyBLZWVwIHRyYWNraW5nIG9mIGFs bCB0aGUgYmFja2Zvcm0gY29udHJvbHMKKyAgICAgICAgICAgICAgLy8gRGlh bG9nIGNvbnRhaW50ZXIKKyAgICAgICAgICAgICAgJGNvbnRhaW5lciA9ICQo IjxkaXYgY2xhc3M9J3N0b3JhZ2VfZGlhbG9nIGZpbGVfc2VsZWN0aW9uX2Rs Zyc+PC9kaXY+Iik7CisKKyAgICAgICAgICAvLyBzZW5kIGEgcmVxdWVzdCB0 byBnZXQgdHJhbnNhY3Rpb24gaWQKKyAgICAgICAgICAvKgorICAgICAgICAg ICAqIEZ1bmN0aW9uOiByZW5kZXJTdG9yYWdlUGFuZWwKKyAgICAgICAgICAg KgorICAgICAgICAgICAqIFJlbmRlcnMgdGhlIEZpbGVNYW5hZ2VyIGluIHRo ZSBjb250ZW50IGRpdiBiYXNlZCBvbiB0aGUgZ2l2ZW4KKyAgICAgICAgICAg KiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAgICovCisg ICAgICAgICAgdmFyIHJlbmRlclN0b3JhZ2VQYW5lbCA9IGZ1bmN0aW9uKGNv bmZpZ3MpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDbGVh ciB0aGUgZXhpc3RpbmcgaHRtbCBpbiB0aGUgc3RvcmFnZSBjb250ZW50Cisg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gJGNv bnRhaW5lci5maW5kKCcuc3RvcmFnZV9jb250ZW50Jyk7CisgICAgICAgICAg ICBjb250ZW50LmVtcHR5KCk7CisKKyAgICAgICAgICAgICQuZ2V0KCJ7eyB1 cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5kZXgnKSB9fSIsIGZ1bmN0aW9uKGRh dGEpIHsKKyAgICAgICAgICAgICAgY29udGVudC5hcHBlbmQoZGF0YSk7Cisg ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdHJhbnNJZCA9IGdldFRy YW5zSWQoY29uZmlncyk7CisgICAgICAgICAgICBpZiAodHJhbnNJZC5yZWFk eVN0YXRlID09IDQpCisgICAgICAgICAgICAgIHRfcmVzID0gSlNPTi5wYXJz ZSh0cmFuc0lkLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICB0cmFuc19p ZCA9IHRfcmVzLmRhdGEuZmlsZVRyYW5zSWQ7CisgICAgICAgICAgfTsKKwor ICAgICAgICAgIC8vIERpYWxvZyBwcm9wZXJ0eQorICAgICAgICAgIHJldHVy biB7CisgICAgICAgICAgICBtYWluOiBmdW5jdGlvbihwYXJhbXMpIHsKKyAg ICAgICAgICAgICAgLy8gU2V0IHRpdGxlIGFuZCBidXR0b24gbmFtZQorICAg ICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXNbJ2RpYWxvZ190 aXRsZSddKSkKKyAgICAgICAgICAgICAgICBwYXJhbXNbJ2RpYWxvZ190aXRs ZSddID0gJ1NlbGVjdCBmaWxlJzsKKyAgICAgICAgICAgICAgdGhpcy5zZXQo J3RpdGxlJywgcGFyYW1zWydkaWFsb2dfdGl0bGUnXSk7CisgICAgICAgICAg ICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtc1snYnRuX3ByaW1hcnknXSkp CisgICAgICAgICAgICAgICAgcGFyYW1zWydidG5fcHJpbWFyeSddID0gJ1Nl bGVjdCc7CisgICAgICAgICAgICAgIHRoaXMuc2V0KCdsYWJlbCcsIHBhcmFt c1snYnRuX3ByaW1hcnknXSk7CisKKyAgICAgICAgICAgICAgdmFyIHRyYW5z X2lkOworICAgICAgICAgICAgICB0aGlzLnRpdGxlID0gcGFyYW1zLmRpYWxv Z190aXRsZTsKKworICAgICAgICAgICAgICBwYXJhbXMgPSBKU09OLnN0cmlu Z2lmeShwYXJhbXMpOworICAgICAgICAgICAgICAkY29udGFpbmVyLmZpbmQo Jy5zdG9yYWdlX2NvbnRlbnQnKS5yZW1vdmUoKTsKKyAgICAgICAgICAgICAg JGNvbnRhaW5lci5hcHBlbmQoIjxkaXYgY2xhc3M9J3N0b3JhZ2VfY29udGVu dCc+PC9kaXY+Iik7CisgICAgICAgICAgICAgIHJlbmRlclN0b3JhZ2VQYW5l bChwYXJhbXMpOworICAgICAgICAgICAgICB0aGlzLnNob3coKTsKKyAgICAg ICAgICAgIH0sCisgICAgICAgICAgICBzZXR0aW5nczogeworICAgICAgICAg ICAgICBsYWJlbDogdW5kZWZpbmVkCisgICAgICAgICAgICB9LAorICAgICAg ICAgICAgc2V0dGluZ1VwZGF0ZWQ6IGZ1bmN0aW9uIChrZXksIG9sZFZhbHVl LCBuZXdWYWx1ZSkgeworICAgICAgICAgICAgICBzd2l0Y2ggKGtleSkgewor ICAgICAgICAgICAgICBjYXNlICdtZXNzYWdlJzoKKyAgICAgICAgICAgICAg ICAgIHRoaXMuc2V0TWVzc2FnZShuZXdWYWx1ZSk7CisgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnbGFiZWwnOgorICAg ICAgICAgICAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzBd LmVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9faW50 ZXJuYWwuYnV0dG9uc1swXS5lbGVtZW50LmlubmVySFRNTCA9IG5ld1ZhbHVl OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAg ICAgICBzZXR1cDpmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0dXJu IHsKKyAgICAgICAgICAgICAgICBidXR0b25zOlsKKyAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogInt7IF8oJ1NlbGVj dCcpIH19Iiwga2V5OiAxMywgY2xhc3NOYW1lOiAiYnRuIGJ0bi1wcmltYXJ5 IGZhIGZhLWZpbGUgZmlsZV9tYW5hZ2VyX29rIHBnLWFsZXJ0aWZ5LWJ1dHRv biBkaXNhYmxlZCIKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ7eyBfKCdD YW5jZWwnKSB9fSIsIGtleTogMjcsIGNsYXNzTmFtZTogImJ0biBidG4tZGFu Z2VyIGZhIGZhLXRpbWVzIHBnLWFsZXJ0aWZ5LWJ1dHRvbiIKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAg ICAgIGZvY3VzOiB7IGVsZW1lbnQ6IDAgfSwKKyAgICAgICAgICAgICAgICBv cHRpb25zOiB7CisgICAgICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGltbWVy OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSwKKyAgICAg ICAgICAgICAgICAgIG1vdmFibGU6IHRydWUKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LAorICAgICAgICAg ICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGNsb3NlRXZlbnQpIHsKKyAgICAgICAg ICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0dG9uLnRleHQgPT0gInt7IF8oJ1Nl bGVjdCcpIH19IikgeworICAgICAgICAgICAgICAgIGlmKCQoJy5maWxlaW5m bycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAgICAgICAgICAgICAg ICAgc2VsX2ZpbGUgPSAkKCcuZmlsZWluZm8nKS5maW5kKCcjY29udGVudHMg bGkuc2VsZWN0ZWQgIHAgc3BhbicpLmF0dHIoJ3RpdGxlJyk7CisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHNlbF9maWxl ID0gJCgnLmZpbGVpbmZvIHRib2R5IHRyLnNlbGVjdGVkIHRkIHAgc3Bhbicp LmF0dHIoJ3RpdGxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIHZhciBuZXdGaWxlID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCkg KyBzZWxfZmlsZTsKKyAgICAgICAgICAgICAgICBuZXdGaWxlID0gbmV3Rmls ZS5zdWJzdHIoMSk7CisgICAgICAgICAgICAgICAgcGdBZG1pbi5Ccm93c2Vy LkV2ZW50cy50cmlnZ2VyKCdwZ2FkbWluLXN0b3JhZ2U6ZmluaXNoX2J0bjpz ZWxlY3RfZmlsZScsIG5ld0ZpbGUpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIHJlbW92ZVRyYW5zSWQodHJhbnNfaWQpOworICAgICAgICAg ICAgfSwKKyAgICAgICAgICAgIGJ1aWxkOiBmdW5jdGlvbigpIHsKKyAgICAg ICAgICAgICAgdGhpcy5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKCRj b250YWluZXIuZ2V0KDApKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg ICBob29rczogeworICAgICAgICAgICAgICBvbnNob3c6IGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgICAgICQodGhpcy5lbGVtZW50cy5ib2R5KS5hZGRD bGFzcygncGdhZG1pbi1zdG9yYWdlLWJvZHknKTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgIH0pOwor CisgICAgICAgIC8vIERlY2xhcmUgdGhlIEZvbGRlciBTZWxlY3Rpb24gZGlh bG9nCisgICAgICAgIGFsZXJ0aWZ5LmRpYWxvZygnZm9sZGVyU2VsZWN0aW9u RGxnJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGNvbnRyb2xzID0g W10sIC8vIEtlZXAgdHJhY2tpbmcgb2YgYWxsIHRoZSBiYWNrZm9ybSBjb250 cm9scworICAgICAgICAgICAgICAvLyBEaWFsb2cgY29udGFpbnRlcgorICAg ICAgICAgICAgICAkY29udGFpbmVyID0gJCgiPGRpdiBjbGFzcz0nc3RvcmFn ZV9kaWFsb2cgZm9sZGVyX3NlbGVjdGlvbl9kbGcnPjwvZGl2PiIpOworCisg ICAgICAgICAgLy8gc2VuZCBhIHJlcXVlc3QgdG8gZ2V0IHRyYW5zYWN0aW9u IGlkCisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBGdW5jdGlvbjogcmVu ZGVyU3RvcmFnZVBhbmVsCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBS ZW5kZXJzIHRoZSBGaWxlTWFuYWdlciBpbiB0aGUgY29udGVudCBkaXYgYmFz ZWQgb24gdGhlIGdpdmVuCisgICAgICAgICAgICogY29uZmlndXJhdGlvbiBw YXJhbWV0ZXJzLgorICAgICAgICAgICAqLworICAgICAgICAgIHZhciByZW5k ZXJTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAg ICAgIC8qCisgICAgICAgICAgICAgKiBDbGVhciB0aGUgZXhpc3RpbmcgaHRt bCBpbiB0aGUgc3RvcmFnZSBjb250ZW50CisgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgIHZhciBjb250ZW50ID0gJGNvbnRhaW5lci5maW5kKCcuc3Rv cmFnZV9jb250ZW50Jyk7CisgICAgICAgICAgICBjb250ZW50LmVtcHR5KCk7 CisKKyAgICAgICAgICAgICQuZ2V0KCJ7eyB1cmxfZm9yKCdmaWxlX21hbmFn ZXIuaW5kZXgnKSB9fSIsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAg ICAgY29udGVudC5hcHBlbmQoZGF0YSk7CisgICAgICAgICAgICB9KTsKKwor ICAgICAgICAgICAgdHJhbnNJZCA9IGdldFRyYW5zSWQocGFyYW1zKTsKKyAg ICAgICAgICAgIGlmICh0cmFuc0lkLnJlYWR5U3RhdGUgPT0gNCkKKyAgICAg ICAgICAgICAgdF9yZXMgPSBKU09OLnBhcnNlKHRyYW5zSWQucmVzcG9uc2VU ZXh0KTsKKyAgICAgICAgICAgIHRyYW5zX2lkID0gdF9yZXMuZGF0YS5maWxl VHJhbnNJZDsKKworICAgICAgICAgIH07CisKKyAgICAgICAgICAvLyBEaWFs b2cgcHJvcGVydHkKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg bWFpbjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgICAgICAgIC8vIFNl dCB0aXRsZSBhbmQgYnV0dG9uIG5hbWUKKyAgICAgICAgICAgICAgaWYgKF8u aXNVbmRlZmluZWQocGFyYW1zWydkaWFsb2dfdGl0bGUnXSkpCisgICAgICAg ICAgICAgICAgcGFyYW1zWydkaWFsb2dfdGl0bGUnXSA9ICdTZWxlY3QgZm9s ZGVyJzsKKyAgICAgICAgICAgICAgdGhpcy5zZXQoJ3RpdGxlJywgcGFyYW1z WydkaWFsb2dfdGl0bGUnXSk7CisgICAgICAgICAgICAgIGlmIChfLmlzVW5k ZWZpbmVkKHBhcmFtc1snYnRuX3ByaW1hcnknXSkpCisgICAgICAgICAgICAg ICAgcGFyYW1zWydidG5fcHJpbWFyeSddID0gJ1NlbGVjdCc7CisgICAgICAg ICAgICAgIHRoaXMuc2V0KCdsYWJlbCcsIHBhcmFtc1snYnRuX3ByaW1hcnkn XSk7CisKKyAgICAgICAgICAgICAgdmFyIHRyYW5zX2lkOworICAgICAgICAg ICAgICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpOworICAgICAg ICAgICAgICAkY29udGFpbmVyLmZpbmQoJy5zdG9yYWdlX2NvbnRlbnQnKS5y ZW1vdmUoKTsKKyAgICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoIjxk aXYgY2xhc3M9J3N0b3JhZ2VfY29udGVudCc+PC9kaXY+Iik7CisgICAgICAg ICAgICAgIHJlbmRlclN0b3JhZ2VQYW5lbChwYXJhbXMpOworICAgICAgICAg ICAgICB0aGlzLnNob3coKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg ICBzZXR0aW5nczogeworICAgICAgICAgICAgICBsYWJlbDogdW5kZWZpbmVk CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0dGluZ1VwZGF0ZWQ6 IGZ1bmN0aW9uIChrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSkgeworICAgICAg ICAgICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICAgICAgICBjYXNlICdt ZXNzYWdlJzoKKyAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVzc2FnZShu ZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSAnbGFiZWwnOgorICAgICAgICAgICAgICAgICAgaWYgKHRo aXMuX19pbnRlcm5hbC5idXR0b25zWzBdLmVsZW1lbnQpIHsKKyAgICAgICAg ICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWwuYnV0dG9uc1swXS5lbGVt ZW50LmlubmVySFRNTCA9IG5ld1ZhbHVlOworICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXR1cDpmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBi dXR0b25zOlsKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgdGV4dDogInt7IF8oJ1NlbGVjdCcpIH19Iiwga2V5OiAxMywgY2xh c3NOYW1lOiAiYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLWZpbGUgZmlsZV9tYW5h Z2VyX29rIHBnLWFsZXJ0aWZ5LWJ1dHRvbiBkaXNhYmxlZCIKKyAgICAgICAg ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgIHRleHQ6ICJ7eyBfKCdDYW5jZWwnKSB9fSIsIGtleTogMjcs IGNsYXNzTmFtZTogImJ0biBidG4tZGFuZ2VyIGZhIGZhLXRpbWVzIHBnLWFs ZXJ0aWZ5LWJ1dHRvbiIKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBdLAorICAgICAgICAgICAgICAgIGZvY3VzOiB7IGVsZW1lbnQ6 IDAgfSwKKyAgICAgICAgICAgICAgICBvcHRpb25zOiB7CisgICAgICAgICAg ICAgICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgIG1heGltaXphYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg IGNsb3NhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1vdmFibGU6 IHRydWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH07Cisg ICAgICAgICAgICB9LAorICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9u KGNsb3NlRXZlbnQpIHsKKyAgICAgICAgICAgICAgaWYgKGNsb3NlRXZlbnQu YnV0dG9uLnRleHQgPT0gInt7IF8oJ1NlbGVjdCcpIH19IikgeworICAgICAg ICAgICAgICAgIGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAn Z3JpZCcpeworICAgICAgICAgICAgICAgICAgc2VsX2ZpbGUgPSAkKCcuZmls ZWluZm8nKS5maW5kKCcjY29udGVudHMgbGkuc2VsZWN0ZWQgcCBzcGFuJyku YXR0cigndGl0bGUnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgc2VsX2ZpbGUgPSAkKCcuZmlsZWluZm8gdGJvZHkg dHIuc2VsZWN0ZWQgdGQgcCBzcGFuJykuYXR0cigndGl0bGUnKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAk KCcuY3VycmVudHBhdGgnKS52YWwoKSArIHNlbF9maWxlOworICAgICAgICAg ICAgICAgIG5ld0ZpbGUgPSBuZXdGaWxlLnN1YnN0cigxKTsKKyAgICAgICAg ICAgICAgICBwZ0FkbWluLkJyb3dzZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRt aW4tc3RvcmFnZTpmaW5pc2hfYnRuOnNlbGVjdF9mb2xkZXInLCBuZXdGaWxl KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZW1vdmVUcmFu c0lkKHRyYW5zX2lkKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBi dWlsZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHRoaXMuZWxlbWVu dHMuY29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgwKSk7Cisg ICAgICAgICAgICB9LAorICAgICAgICAgICAgaG9va3M6IHsKKyAgICAgICAg ICAgICAgb25zaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAk KHRoaXMuZWxlbWVudHMuYm9keSkuYWRkQ2xhc3MoJ3BnYWRtaW4tc3RvcmFn ZS1ib2R5Jyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICB9OworICAgICAgICB9KTsKKworICAgICAgICAvLyBEZWNsYXJl IHRoZSBDcmVhdGUgbW9kZSBkaWFsb2cKKyAgICAgICAgYWxlcnRpZnkuZGlh bG9nKCdjcmVhdGVNb2RlRGxnJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg dmFyIGNvbnRyb2xzID0gW10sIC8vIEtlZXAgdHJhY2tpbmcgb2YgYWxsIHRo ZSBiYWNrZm9ybSBjb250cm9scworICAgICAgICAgICAgICAvLyBEaWFsb2cg Y29udGFpbnRlcgorICAgICAgICAgICAgICAkY29udGFpbmVyID0gJCgiPGRp diBjbGFzcz0nc3RvcmFnZV9kaWFsb2cgY3JlYXRlX21vZGVfZGxnJz48L2Rp dj4iKTsKKworICAgICAgICAgIC8qCisgICAgICAgICAgICogRnVuY3Rpb246 IHJlbmRlclN0b3JhZ2VQYW5lbAorICAgICAgICAgICAqCisgICAgICAgICAg ICogUmVuZGVycyB0aGUgRmlsZU1hbmFnZXIgaW4gdGhlIGNvbnRlbnQgZGl2 IGJhc2VkIG9uIHRoZSBnaXZlbgorICAgICAgICAgICAqIGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICB2YXIg cmVuZGVyU3RvcmFnZVBhbmVsID0gZnVuY3Rpb24ocGFyYW1zKSB7CisgICAg ICAgICAgICAvKgorICAgICAgICAgICAgICogQ2xlYXIgdGhlIGV4aXN0aW5n IGh0bWwgaW4gdGhlIHN0b3JhZ2UgY29udGVudAorICAgICAgICAgICAgICov CisgICAgICAgICAgICB2YXIgY29udGVudCA9ICRjb250YWluZXIuZmluZCgn LnN0b3JhZ2VfY29udGVudCcpOworICAgICAgICAgICAgY29udGVudC5lbXB0 eSgpOworCisgICAgICAgICAgICAkLmdldCgie3sgdXJsX2ZvcignZmlsZV9t YW5hZ2VyLmluZGV4JykgfX0iLCBmdW5jdGlvbihkYXRhKSB7CisgICAgICAg ICAgICAgIGNvbnRlbnQuYXBwZW5kKGRhdGEpOworICAgICAgICAgICAgfSk7 CisKKyAgICAgICAgICAgIHRyYW5zSWQgPSBnZXRUcmFuc0lkKHBhcmFtcyk7 CisgICAgICAgICAgICBpZiAodHJhbnNJZC5yZWFkeVN0YXRlID09IDQpCisg ICAgICAgICAgICAgIHRfcmVzID0gSlNPTi5wYXJzZSh0cmFuc0lkLnJlc3Bv bnNlVGV4dCk7CisgICAgICAgICAgICB0cmFuc19pZCA9IHRfcmVzLmRhdGEu ZmlsZVRyYW5zSWQ7CisKKyAgICAgICAgICB9OworCisgICAgICAgICAgLy8g RGlhbG9nIHByb3BlcnR5CisgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg ICAgIG1haW46IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAgICAgICAgICB2 YXIgdHJhbnNfaWQ7CisgICAgICAgICAgICAgIC8vIFNldCB0aXRsZSBhbmQg YnV0dG9uIG5hbWUKKyAgICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQo cGFyYW1zWydkaWFsb2dfdGl0bGUnXSkpCisgICAgICAgICAgICAgICAgcGFy YW1zWydkaWFsb2dfdGl0bGUnXSA9ICdDcmVhdGUgZmlsZSc7CisgICAgICAg ICAgICAgIHRoaXMuc2V0KCd0aXRsZScsIHBhcmFtc1snZGlhbG9nX3RpdGxl J10pOworICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXNb J2J0bl9wcmltYXJ5J10pKQorICAgICAgICAgICAgICAgIHBhcmFtc1snYnRu X3ByaW1hcnknXSA9ICdDcmVhdGUnOworICAgICAgICAgICAgICB0aGlzLnNl dCgnbGFiZWwnLCBwYXJhbXNbJ2J0bl9wcmltYXJ5J10pOworCisgICAgICAg ICAgICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7CisgICAg ICAgICAgICAgICRjb250YWluZXIuZmluZCgnLnN0b3JhZ2VfY29udGVudCcp LnJlbW92ZSgpOworICAgICAgICAgICAgICAkY29udGFpbmVyLmFwcGVuZCgi PGRpdiBjbGFzcz0nc3RvcmFnZV9jb250ZW50Jz48L2Rpdj4iKTsKKyAgICAg ICAgICAgICAgcmVuZGVyU3RvcmFnZVBhbmVsKHBhcmFtcyk7CisgICAgICAg ICAgICAgIHRoaXMuc2hvdygpOworICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgIHNldHRpbmdzOiB7CisgICAgICAgICAgICAgIGxhYmVsOiB1bmRlZmlu ZWQKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXR0aW5nVXBkYXRl ZDogZnVuY3Rpb24gKGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7CisgICAg ICAgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgICAgICAgIGNhc2Ug J21lc3NhZ2UnOgorICAgICAgICAgICAgICAgICAgdGhpcy5zZXRNZXNzYWdl KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICBjYXNlICdsYWJlbCc6CisgICAgICAgICAgICAgICAgICBpZiAo dGhpcy5fX2ludGVybmFsLmJ1dHRvbnNbMF0uZWxlbWVudCkgeworICAgICAg ICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzBdLmVs ZW1lbnQuaW5uZXJIVE1MID0gbmV3VmFsdWU7CisgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldHVwOmZ1bmN0aW9u KCkgeworICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg IGJ1dHRvbnM6WworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICB0ZXh0OiAie3sgXygnQ3JlYXRlJykgfX0iLCBrZXk6IDEzLCBj bGFzc05hbWU6ICJidG4gYnRuLXByaW1hcnkgZmEgZmEtZmlsZSBmaWxlX21h bmFnZXJfY3JlYXRlIGZpbGVfbWFuYWdlcl9vayBwZy1hbGVydGlmeS1idXR0 b24gZGlzYWJsZWQiCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAie3sgXygn Q2FuY2VsJykgfX0iLCBrZXk6IDI3LCBjbGFzc05hbWU6ICJidG4gYnRuLWRh bmdlciBmYSBmYS10aW1lcyBmaWxlX21hbmFnZXJfY3JlYXRlX2NhbmNlbCBw Zy1hbGVydGlmeS1idXR0b24iCisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBmb2N1czogeyBlbGVt ZW50OiAwIH0sCisgICAgICAgICAgICAgICAgb3B0aW9uczogeworICAgICAg ICAgICAgICAgICAgY2xvc2FibGVCeURpbW1lcjogZmFsc2UsCisgICAgICAg ICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsCisgICAgICAgICAgICAg ICAgICBjbG9zYWJsZTogZmFsc2UsCisgICAgICAgICAgICAgICAgICBtb3Zh YmxlOiB0cnVlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9 OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlcGxhY2VfZmlsZTog ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgJCgnLnJlcGxhY2VfZmls ZScpLnNob3coKTsKKyAgICAgICAgICAgICAgICAkKCcucmVwbGFjZV9maWxl IC5idG5feWVzJykuY2xpY2soZnVuY3Rpb24oc2VsZikgeworICAgICAgICAg ICAgICAgICAgJCgnLnJlcGxhY2VfZmlsZScpLmhpZGUoKTsKKyAgICAgICAg ICAgICAgICAgIHZhciBzZWxlY3RlZF9pdGVtID0gJCgnLmFsbG93ZWRfZmls ZV90eXBlcyAuY3JlYXRlX2lucHV0IGlucHV0W3R5cGU9InRleHQiXScpLnZh bCgpLAorICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUgPSAkKCcuY3Vy cmVudHBhdGgnKS52YWwoKSArIHNlbGVjdGVkX2l0ZW0sCisgICAgICAgICAg ICAgICAgICAgICAgbmV3RmlsZSA9IG5ld0ZpbGUuc3Vic3RyKDEpOworICAg ICAgICAgICAgICAgICAgcGdBZG1pbi5Ccm93c2VyLkV2ZW50cy50cmlnZ2Vy KCdwZ2FkbWluLXN0b3JhZ2U6ZmluaXNoX2J0bjpjcmVhdGVfZmlsZScsIG5l d0ZpbGUpOworICAgICAgICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlcl9j cmVhdGVfY2FuY2VsJykudHJpZ2dlcignY2xpY2snKTsKKyAgICAgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgICAgICAkKCcucmVwbGFjZV9maWxlIC5i dG5fbm8nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg ICQoJy5yZXBsYWNlX2ZpbGUnKS5oaWRlKCk7CisgICAgICAgICAgICAgICAg fSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaXNfZmlsZV9leGlz dDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHZhciBzZWxlY3RlZF9p dGVtID0gJCgnLmFsbG93ZWRfZmlsZV90eXBlcyAuY3JlYXRlX2lucHV0IGlu cHV0W3R5cGU9InRleHQiXScpLnZhbCgpLAorICAgICAgICAgICAgICAgICAg aXNfZXhpc3QgPSBmYWxzZTsKKworICAgICAgICAgICAgICB2YXIgZmlsZV9k YXRhID0geworICAgICAgICAgICAgICAgICdwYXRoJzogJCgnLmN1cnJlbnRw YXRoJykudmFsKCksCisgICAgICAgICAgICAgICAgJ25hbWUnOiBzZWxlY3Rl ZF9pdGVtLAorICAgICAgICAgICAgICAgICdtb2RlJzogJ2lzX2ZpbGVfZXhp c3QnCisgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgJC5hamF4 KHsKKyAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsCisgICAgICAgICAg ICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZmlsZV9kYXRhKSwKKyAgICAg ICAgICAgICAgICB1cmw6IGZpbGVDb25uZWN0b3IgKyB0cmFuc19pZCsnLycs CisgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywKKyAgICAgICAg ICAgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtZG93bmxvYWQ7 IGNoYXJzZXQ9dXRmLTgiLAorICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxz ZSwKKyAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwKXsK KyAgICAgICAgICAgICAgICAgIGRhdGEgPSByZXNwLmRhdGEucmVzdWx0Owor ICAgICAgICAgICAgICAgICAgaWYoZGF0YVsnQ29kZSddID09PSAwKXsKKyAg ICAgICAgICAgICAgICAgICAgaXNfZXhpc3QgPSB0cnVlOworICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaXNfZXhp c3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICByZXR1 cm4gaXNfZXhpc3Q7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY3Jl YXRlX2ZpbGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICB2YXIgc2Vs ZWN0ZWRfaXRlbSA9ICQoJy5hbGxvd2VkX2ZpbGVfdHlwZXMgLmNyZWF0ZV9p bnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0nKS52YWwoKSwKKyAgICAgICAgICAg ICAgICAgIGlzX2V4aXN0ID0gZmFsc2UsCisgICAgICAgICAgICAgICAgICBp c19jcmVhdGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgdmFyIHBvc3Rf ZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAncGF0aCc6ICQoJy5jdXJyZW50 cGF0aCcpLnZhbCgpLAorICAgICAgICAgICAgICAgICduYW1lJzogc2VsZWN0 ZWRfaXRlbSwKKyAgICAgICAgICAgICAgICAnbW9kZSc6ICdjcmVhdGVfZmls ZScKKyAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAkLmFqYXgo eworICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJywKKyAgICAgICAgICAg ICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0X2RhdGEpLAorICAgICAg ICAgICAgICAgIHVybDogZmlsZUNvbm5lY3RvciArIHRyYW5zX2lkKycvJywK KyAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAorICAgICAgICAg ICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC1kb3dubG9hZDsg Y2hhcnNldD11dGYtOCIsCisgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNl LAorICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3Apewor ICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3AuZGF0YS5yZXN1bHQ7Cisg ICAgICAgICAgICAgICAgICBpZihkYXRhWydDb2RlJ10gPT09IDApeworICAg ICAgICAgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKCJOZXcgRmlsZSBj cmVhdGVkIHN1Y2Nlc3NmdWxseS4iKTsKKyAgICAgICAgICAgICAgICAgICAg aXNfY3JlYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5lcnJvcihkYXRhWydF cnJvciddKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICAgIHJldHVybiBpc19jcmVhdGVk OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5j dGlvbihjbG9zZUV2ZW50KSB7CisgICAgICAgICAgICAgIGlmIChjbG9zZUV2 ZW50LmJ1dHRvbi50ZXh0ID09ICJ7eyBfKCdDcmVhdGUnKSB9fSIpeworICAg ICAgICAgICAgICAgIHZhciBzZWxlY3RlZF9pdGVtID0gJCgnLmFsbG93ZWRf ZmlsZV90eXBlcyAuY3JlYXRlX2lucHV0IGlucHV0W3R5cGU9InRleHQiXScp LnZhbCgpOworICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJCgnLmN1 cnJlbnRwYXRoJykudmFsKCkgKyBzZWxlY3RlZF9pdGVtOworICAgICAgICAg ICAgICAgIG5ld0ZpbGUgPSBuZXdGaWxlLnN1YnN0cigxKTsKKyAgICAgICAg ICAgICAgICBpZighXy5pc1VuZGVmaW5lZChzZWxlY3RlZF9pdGVtKSAmJiBz ZWxlY3RlZF9pdGVtICE9PSAnJyAmJiB0aGlzLmlzX2ZpbGVfZXhpc3QoKSkg eworICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlX2ZpbGUoKTsKKyAg ICAgICAgICAgICAgICAgIGNsb3NlRXZlbnQuY2FuY2VsID0gdHJ1ZTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg ICAgICAgICAgICAgICB2YXIgaXNfY3JlYXRlZCA9IHRoaXMuY3JlYXRlX2Zp bGUoKTsKKyAgICAgICAgICAgICAgICAgIGlmIChpc19jcmVhdGVkKSB7Cisg ICAgICAgICAgICAgICAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJp Z2dlcigncGdhZG1pbi1zdG9yYWdlOmZpbmlzaF9idG46Y3JlYXRlX2ZpbGUn LCBuZXdGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNJ ZCh0cmFuc19pZCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VFdmVu dC5jYW5jZWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBp ZiAoY2xvc2VFdmVudC5idXR0b24udGV4dCA9PSAie3sgXygnQ2FuY2VsJykg fX0iKXsKKyAgICAgICAgICAgICAgICByZW1vdmVUcmFuc0lkKHRyYW5zX2lk KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgIGJ1aWxkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgdGhpcy5l bGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKCRjb250YWluZXIuZ2V0KDAp KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBob29rczogeworICAg ICAgICAgICAgICBvbnNob3c6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg ICAgICQodGhpcy5lbGVtZW50cy5ib2R5KS5hZGRDbGFzcygncGdhZG1pbi1z dG9yYWdlLWJvZHknKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgfSwKKyAgICAg IHNob3dfc3RvcmFnZV9kbGc6IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAg ICBhbGVydGlmeS5zdG9yYWdlTWFuYWdlckRsZyhwYXJhbXMpLnJlc2l6ZVRv KCc2MCUnLCAnODAlJyk7CisgICAgICB9LAorICAgICAgc2hvd19maWxlX3Nl bGVjdGlvbjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgIGFsZXJ0aWZ5 LmZpbGVTZWxlY3Rpb25EbGcocGFyYW1zKS5yZXNpemVUbygnNjAlJywgJzgw JScpOworICAgICAgfSwKKyAgICAgIHNob3dfZm9sZGVyX3NlbGVjdGlvbjog ZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgIGFsZXJ0aWZ5LmZvbGRlclNl bGVjdGlvbkRsZyhwYXJhbXMpLnJlc2l6ZVRvKCc2MCUnLCAnODAlJyk7Cisg ICAgICB9LAorICAgICAgc2hvd19jcmVhdGVfZGxnOiBmdW5jdGlvbihwYXJh bXMpIHsKKyAgICAgICAgYWxlcnRpZnkuY3JlYXRlTW9kZURsZyhwYXJhbXMp LnJlc2l6ZVRvKCc2MCUnLCAnODAlJyk7CisgICAgICB9LAorICAgICAgLy8g Y2FsbCBkaWFsb2dzIHN1YmplY3QgdG8gZGlhbG9nX3R5cGUgcGFyYW0KKyAg ICAgIHNob3dfZGlhbG9nOiBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAg aWYocGFyYW1zLmRpYWxvZ190eXBlID09ICdzZWxlY3RfZmlsZScpIHsKKyAg ICAgICAgICB0aGlzLnNob3dfZmlsZV9zZWxlY3Rpb24ocGFyYW1zKTsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXJhbXMuZGlhbG9nX3R5cGUg PT0gJ3NlbGVjdF9mb2xkZXInKSB7CisgICAgICAgICAgdGhpcy5zaG93X2Zv bGRlcl9zZWxlY3Rpb24ocGFyYW1zKTsKKyAgICAgICAgfQorICAgICAgICBl bHNlIGlmIChwYXJhbXMuZGlhbG9nX3R5cGUgPT0gJ2NyZWF0ZV9maWxlJykg eworICAgICAgICAgIHRoaXMuc2hvd19jcmVhdGVfZGxnKHBhcmFtcyk7Cisg ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdGhpcy5zaG93 X3N0b3JhZ2VfZGxnKHBhcmFtcyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg ICB9OworCisgICAgcmV0dXJuIHBnQWRtaW4uRmlsZU1hbmFnZXI7CisgIH0p OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIv dGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9qcy9maWxlX21hbmFnZXJfY29uZmln Lmpzb24gYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0 ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9jb25maWcuanNvbgpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmI3ZmNiCi0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFn ZXIvdGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9qcy9maWxlX21hbmFnZXJfY29u ZmlnLmpzb24KQEAgLTAsMCArMSwyNSBAQAoreworICAgICJvcHRpb25zIjog eworICAgICAgICAiY3VsdHVyZSI6ICJlbiIsCisgICAgICAgICJsYW5nIjog InB5IiwKKyAgICAgICAgImRlZmF1bHRWaWV3TW9kZSI6ICJncmlkIiwKKyAg ICAgICAgImF1dG9sb2FkIjogdHJ1ZSwKKyAgICAgICAgInNob3dGdWxsUGF0 aCI6IGZhbHNlLAorICAgICAgICAiZGlhbG9nX3R5cGUiOiAie3tkYXRhLmRp YWxvZ190eXBlfX0iLAorICAgICAgICAiZmlsZVJvb3QiOiAie3tkYXRhLmZp bGVyb290fX0iLAorICAgICAgICAiY2FwYWJpbGl0aWVzIjogW3slIGZvciBp IGluIGRhdGEuY2FwYWJpbGl0aWVzICV9eyUgaWYgbG9vcC5pbmRleCAhPSAx ICV9LCB7JSBlbmRpZiAlfSJ7e2l9fSJ7JSBlbmRmb3IgJX1dLAorICAgICAg ICAiYWxsb3dlZF9maWxlX3R5cGVzIjogW3slIGZvciBpIGluIGRhdGEuc3Vw cG9ydGVkX3R5cGVzICV9eyUgaWYgbG9vcC5pbmRleCAhPSAxICV9LCB7JSBl bmRpZiAlfSJ7e2l9fSJ7JSBlbmRmb3IgJX1dLAorICAgICAgICAicGxhdGZv cm1fdHlwZSI6ICJ7eyBkYXRhLnBsYXRmb3JtX3R5cGUgfX0iLAorICAgICAg ICAic2hvd192b2x1bWVzIjoie3tkYXRhLnNob3dfdm9sdW1lc319IgorICAg IH0sCisgICAgInNlY3VyaXR5IjogeworICAgICAgICAidXBsb2FkUG9saWN5 IjogInt7IGRhdGEuc2VjdXJpdHkudXBsb2FkUG9saWN5IH19IiwKKyAgICAg ICAgInVwbG9hZFJlc3RyaWN0aW9ucyI6IFt7JSBmb3IgaSBpbiBkYXRhLnNl Y3VyaXR5LnVwbG9hZFJlc3RyaWN0aW9ucyAlfXslIGlmIGxvb3AuaW5kZXgg IT0gMSAlfSwgeyUgZW5kaWYgJX0ie3tpfX0ieyUgZW5kZm9yICV9XQorICAg IH0sCisgICAgInVwbG9hZCI6IHsKKyAgICAgICAgIm11bHRpcGxlIjogInt7 IGRhdGEudXBsb2FkLm11bHRpcGxlIH19IiwKKyAgICAgICAgIm51bWJlciI6 IDIwLAorICAgICAgICAiZmlsZVNpemVMaW1pdCI6ICJ7eyBkYXRhLnVwbG9h ZC5maWxlU2l6ZUxpbWl0IH19IiwKKyAgICAgICAgImltYWdlc09ubHkiOiBm YWxzZQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv ZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMvbGFuZ3Vh Z2VzL2VuLmpzIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvdGVt cGxhdGVzL2ZpbGVfbWFuYWdlci9qcy9sYW5ndWFnZXMvZW4uanMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhODVlOAotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3Rl bXBsYXRlcy9maWxlX21hbmFnZXIvanMvbGFuZ3VhZ2VzL2VuLmpzCkBAIC0w LDAgKzEsNDEgQEAKK3sKKyAgICAiTEFOR1VBR0VfRklMRV9OT1RfRk9VTkQi OiAiTGFuZ3VhZ2UgZmlsZSBub3QgZm91bmQuIiwKKyAgICAidXBsb2FkX3N1 Y2Nlc3MiOiAiRmlsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkuIiwKKyAgICAi dXBsb2FkX2Vycm9yIjogIkVycm9yIHVwbG9hZGluZyBmaWxlIiwKKyAgICAi YnJvd3NlIjogIkJyb3dzZS4uLiIsCisgICAgImJ5dGVzIjogIiBieXRlcyIs CisgICAgImNhbmNlbCI6ICJDYW5jZWwiLAorICAgICJjbG9zZSI6ICJDbG9z ZSIsCisgICAgImNvbmZpcm1hdGlvbl9kZWxldGUiOiAiQXJlIHlvdSBzdXJl IHlvdSB3aXNoIHRvIGRlbGV0ZSB0aGlzIGZpbGU/IiwKKyAgICAiY3VycmVu dF9mb2xkZXIiOiAiIiwKKyAgICAiZGVsIjogIkRlbGV0ZSIsCisgICAgImRv d25sb2FkIjogIkRvd25sb2FkIiwKKyAgICAiZHpfZGljdERlZmF1bHRNZXNz YWdlIjogIkRyb3AgZmlsZXMgaGVyZSB0byB1cGxvYWQiLAorICAgICJkel9k aWN0RmFsbGJhY2tNZXNzYWdlIjogIllvdXIgYnJvd3NlciBkb2VzIG5vdCBz dXBwb3J0IGRyYWcnbidkcm9wIGZpbGUgdXBsb2Fkcy4iLAorICAgICJkel9k aWN0TWF4RmlsZXNFeGNlZWRlZCI6ICJPbmx5ICVzIHNpbXVsdGFuZW91cyB1 cGxvYWRzIGFyZSBhbGxvd2VkLiIsCisgICAgImR6X2RpY3RJbnZhbGlkRmls ZVR5cGUiOiAiWW91IGNhbid0IHVwbG9hZCBmaWxlcyBvZiB0aGlzIHR5cGUu IiwKKyAgICAiZWRpdCI6ICJFZGl0IGZpbGUiLAorICAgICJmaWxlX3NpemVf bGltaXQiOiAiVGhlIGZpbGUgc2l6ZSBsaW1pdCAocGVyIGZpbGUpIGlzICIs CisgICAgImZpbGVfdG9vX2JpZyI6ICJUaGUgZmlsZSBpcyB0b28gYmlnLiIs CisgICAgImdiIjogImdiIiwKKyAgICAiZ3JpZF92aWV3IjogIlN3aXRjaCB0 byBncmlkIHZpZXcuIiwKKyAgICAiaXRlbXMiOiAiaXRlbXMiLAorICAgICJr YiI6ICJrYiIsCisgICAgImxpc3RfdmlldyI6ICJTd2l0Y2ggdG8gbGlzdCB2 aWV3LiIsCisgICAgIm1iIjogIm1iIiwKKyAgICAibW9kaWZpZWQiOiAiTW9k aWZpZWQiLAorICAgICJtb3ZlIjogIk1vdmUgdG8gLi4uIiwKKyAgICAibmFt ZSI6ICJOYW1lIiwKKyAgICAibmV3X2ZvbGRlciI6ICJOZXcgRm9sZGVyIiwK KyAgICAibm8iOiAiTm8iLAorICAgICJub19mb2xkZXJuYW1lIjogIk5vIGZv bGRlciBuYW1lIHdhcyBwcm92aWRlZC4iLAorICAgICJyZW5hbWUiOiAiUmVu YW1lIiwKKyAgICAic2F2ZSI6ICJTYXZlIiwKKyAgICAic2VsZWN0IjogIlNl bGVjdCIsCisgICAgInNpemUiOiAiU2l6ZSIsCisgICAgInN1Y2Nlc3NmdWxf YWRkZWRfZm9sZGVyIjogIk5ldyBmb2xkZXIgYWRkZWQgc3VjY2Vzc2Z1bGx5 LiIsCisgICAgInN1Y2Nlc3NmdWxfZGVsZXRlIjogIkRlbGV0ZSBzdWNjZXNz ZnVsLiIsCisgICAgInN1Y2Nlc3NmdWxfcmVuYW1lIjogIlJlbmFtZSBzdWNj ZXNzZnVsLiIsCisgICAgInVwbG9hZCI6ICJVcGxvYWQiLAorICAgICJ5ZXMi OiAiWWVzIgorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9maWxl X21hbmFnZXIvdGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9qcy91dGlsaXR5Lmpz IGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvdGVtcGxhdGVzL2Zp bGVfbWFuYWdlci9qcy91dGlsaXR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1 CmluZGV4IDAwMDAwMDAuLjYxYWI5YTcKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9t YW5hZ2VyL2pzL3V0aWxpdHkuanMKQEAgLTAsMCArMSwxNTI5IEBACisvKioK KyAqIEZpbGVtYW5hZ2VyIEpTIGNvcmUKKyAqCisgKiBmaWxlbWFuYWdlci5q cworICoKKyAqICBAbGljZW5zZSAgTUlUIExpY2Vuc2UKKyAqICBAYXV0aG9y IEphc29uIEh1Y2sgLSBDb3JlIEZpdmUgTGFicworICogIEBhdXRob3IgU2lt b24gR2VvcmdldCA8c2ltb24gKGF0KSBsaW5lYTIxIChkb3QpIGNvbT4KKyAq ICBAY29weXJpZ2h0ICBBdXRob3JzCisgKi8KKworKGZ1bmN0aW9uKCQpIHsK KworLy8gVXNlciBhbGVydGlmeSBvYmplY3QKK3ZhciBhbGVydGlmeSA9IHJl cXVpcmUoImFsZXJ0aWZ5Iik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVm aW5lIGZ1bmN0aW9ucyB1c2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCisKKy8vIGZ1bmN0aW9uIHRvIHJldHJpZXZlIEdFVCBw YXJhbXMKKyQudXJsUGFyYW0gPSBmdW5jdGlvbihuYW1lKSB7CisgIHZhciBy ZXN1bHRzID0gbmV3IFJlZ0V4cCgnW1xcPyZdJyArIG5hbWUgKyAnPShbXiYj XSopJykuZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7CisgIGlmIChyZXN1 bHRzKQorICAgIHJldHVybiByZXN1bHRzWzFdOworICBlbHNlCisgICAgcmV0 dXJuIDA7Cit9OworCit2YXIgZ2V0RmlsZUV4dGVuc2lvbiA9IGZ1bmN0aW9u KG5hbWUpIHsKKyAgICB2YXIgZm91bmQgPSBuYW1lLmxhc3RJbmRleE9mKCcu JykgKyAxOworICAgIHJldHVybiAoZm91bmQgPiAwID8gbmFtZS5zdWJzdHIo Zm91bmQpIDogIiIpOworfTsKKwordmFyIGdldEZpbGVOYW1lID0gZnVuY3Rp b24obmFtZSkgeworICB2YXIgZm1fZmlsZW5hbWUgPSBuYW1lOworICBpZiAo Zm1fZmlsZW5hbWUubGVuZ3RoID4gMTUgKSB7CisgICAgICBmbV9maWxlbmFt ZSA9IG5hbWUuc3Vic3RyKDAsIDEwKSArJy4uLic7CisgIH0KKyAgcmV0dXJu IGZtX2ZpbGVuYW1lOworfTsKKworLy8gc2VuZCBhIHJlcXVlc3QgdG8gZ2V0 IHRyYW5zYWN0aW9uIGlkCit2YXIgZ2V0VHJhbnNJZCA9IGZ1bmN0aW9uKCkg eworICByZXR1cm4gJC5hamF4KHsKKyAgICBhc3luYzogZmFsc2UsCisgICAg dXJsOiAie3sgdXJsX2ZvcignZmlsZV9tYW5hZ2VyLmluZGV4JykgfX1nZXRf dHJhbnNfaWQiLAorICAgIGRhdGFUeXBlOiAianNvbnAiCisgIH0pOworfTsK KworLy8gTG9hZCBsYW5ndWFnZSBmaWxlCit2YXIgbG9hZExhbmdGaWxlID0g ZnVuY3Rpb24oZW5qcykgeworICBpZigkLnVybFBhcmFtKCdsYW5nQ29kZScp ICE9PSAwICYmIGZpbGVfZXhpc3RzIChlbmpzKSkgY3VsdHVyZSA9ICQudXJs UGFyYW0oJ2xhbmdDb2RlJyk7CisgIHJldHVybiAkLmFqYXgoeworICAgIGFz eW5jOiBmYWxzZSwKKyAgICB1cmw6IGVuanMsCisgICAgZGF0YVR5cGU6ICdq c29ucCcsCisgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uOyBj aGFyc2V0PXV0Zi04IgorICB9KTsKK307CisKKy8vIFdlIHJldHJpZXZlIGNv bmZpZyBzZXR0aW5ncyBmcm9tIGZpbGVtYW5hZ2VyLmNvbmZpZy5qcwordmFy IGxvYWRDb25maWdGaWxlID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAgdHlwZSA9 ICh0eXBlb2YgdHlwZSA9PT0gInVuZGVmaW5lZCIpID8gInVzZXIiIDogdHlw ZTsKKyAgaWYgKHR5cGUgPT0gJ3VzZXInKSB7CisgICAgdXJsID0gZmlsZV9t YW5hZ2VyX2NvbmZpZ19qc29uOworICAgIHVzZXJjb25maWcgPSBmaWxlX21h bmFnZXJfY29uZmlnX2pzb247CisgIH0KKyAgcmV0dXJuICQuYWpheCh7Cisg ICAgYXN5bmM6IGZhbHNlLAorICAgIHVybDogdXJsLAorICAgIGRhdGFUeXBl OiAianNvbnAiLAorICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNv bjsgY2hhcnNldD11dGYtOCIKKyAgfSk7Cit9OworCisvKgorICogRm9yY2Vz IGNvbHVtbnMgdG8gZmlsbCB0aGUgbGF5b3V0IHZlcnRpY2FsbHkuCisgKiBD YWxsZWQgb24gaW5pdGlhbCBwYWdlIGxvYWQgYW5kIG9uIHJlc2l6ZS4KKyAq LwordmFyIHNldERpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIG1h aW5fY29udGFpbmVyX2hlaWdodCA9ICggJCh3aW5kb3cpLmhlaWdodCgpICkg LyAyICsgMzUsCisgICAgICBuZXdIID0gbWFpbl9jb250YWluZXJfaGVpZ2h0 IC0gJCgnI3VwbG9hZGVyJykuaGVpZ2h0KCkgLSAzMDsKK307CisKKy8vIERp c3BsYXkgTWluIFBhdGgKK3ZhciBkaXNwbGF5UGF0aCA9IGZ1bmN0aW9uKHBh dGgpIHsKKyAgaWYoY29uZmlnLm9wdGlvbnMuc2hvd0Z1bGxQYXRoID09PSBm YWxzZSkgeworICAgIC8vIGlmIGEgImRpc3BsYXlQYXRoRGVjb3JhdG9yIiBm dW5jdGlvbiBpcyBkZWZpbmVkLCB1c2UgaXQgdG8gZGVjb3JhdGUgcGF0aAor ICAgIHJldHVybiAnZnVuY3Rpb24nID09PSAodHlwZW9mIGRpc3BsYXlQYXRo RGVjb3JhdG9yKQorICAgICAgICAgPyBkaXNwbGF5UGF0aERlY29yYXRvcihw YXRoKQorICAgICAgICAgOiBwYXRoLnJlcGxhY2UoZmlsZVJvb3QsICIvIik7 CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHBhdGg7CisgIH0KK307CisKKy8v IFNldCB0aGUgdmlldyBidXR0b25zIHN0YXRlCit2YXIgc2V0Vmlld0J1dHRv bnNGb3IgPSBmdW5jdGlvbih2aWV3TW9kZSkgeworICAgIGlmICh2aWV3TW9k ZSA9PSAnZ3JpZCcpIHsKKyAgICAgICAgJCgnLmdyaWQnKS5hZGRDbGFzcygn T04nKTsKKyAgICAgICAgJCgnLmxpc3QnKS5yZW1vdmVDbGFzcygnT04nKTsK KyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICQoJy5saXN0JykuYWRkQ2xh c3MoJ09OJyk7CisgICAgICAgICQoJy5ncmlkJykucmVtb3ZlQ2xhc3MoJ09O Jyk7CisgICAgfQorfTsKKworLyoKKyAqIHByZWdfcmVwbGFjZQorICovCit2 YXIgcHJlZ19yZXBsYWNlID0gZnVuY3Rpb24oYXJyYXlfcGF0dGVybiwgYXJy YXlfcGF0dGVybl9yZXBsYWNlLCBzdHIpICB7CisgIHZhciBuZXdfc3RyID0g U3RyaW5nIChzdHIpOworICAgIGZvciAoaT0wOyBpPGFycmF5X3BhdHRlcm4u bGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciByZWdfZXhwPSBSZWdFeHAoYXJy YXlfcGF0dGVybltpXSwgImciKTsKKyAgICAgIHZhciB2YWxfdG9fcmVwbGFj ZSA9IGFycmF5X3BhdHRlcm5fcmVwbGFjZVtpXTsKKyAgICAgIG5ld19zdHIg PSBuZXdfc3RyLnJlcGxhY2UgKHJlZ19leHAsIHZhbF90b19yZXBsYWNlKTsK KyAgICB9CisgICAgcmV0dXJuIG5ld19zdHI7CisgIH07CisKKy8qCisgKiBj bGVhblN0cmluZyAoKSwgb24gdGhlIHNhbWUgbW9kZWwgYXMgc2VydmVyIHNp ZGUgKGNvbm5lY3RvcikKKyAqIGNsZWFuU3RyaW5nCisgKi8KK3ZhciBjbGVh blN0cmluZyA9IGZ1bmN0aW9uKHN0cikgeworICB2YXIgY2xlYW5lZCA9ICIi OworICB2YXIgcF9zZWFyY2ggID0gICBuZXcgQXJyYXkoIsWgIiwgIsWhIiwg IsSQIiwgIsSRIiwgIsW9IiwgIsW+IiwgIsSMIiwgIsSNIiwgIsSGIiwgIsSH IiwgIsOAIiwKKyAgICAgICAgICAgICLDgSIsICLDgiIsICLDgyIsICLDhCIs ICLDhSIsICLDhiIsICLDhyIsICLDiCIsICLDiSIsICLDiiIsICLDiyIsICLD jCIsICLDjSIsICLDjiIsICLDjyIsCisgICAgICAgICAgICAiw5EiLCAiw5Ii LCAiw5MiLCAiw5QiLCAiw5UiLCAiw5YiLCAixZAiLCAiw5giLCAiw5kiLCAi w5oiLCAiw5siLCAiw5wiLCAiw50iLCAiw54iLCAiw58iLAorICAgICAgICAg ICAgIsOgIiwgIsOhIiwgIsOiIiwgIsOjIiwgIsOkIiwgIsOlIiwgIsOmIiwg IsOnIiwgIsOoIiwgIsOpIiwgIsOqIiwgIsOrIiwgIsOsIiwgICLDrSIsCisg ICAgICAgICAgICAiw64iLCAiw68iLCAiw7AiLCAiw7EiLCAiw7IiLCAiw7Mi LCAiw7QiLCAiw7UiLCAiw7YiLCAixZEiLCAiw7giLCAiw7kiLCAiw7oiLCAi w7siLCAiw70iLAorICAgICAgICAgICAgIsO9IiwgIsO+IiwgIsO/IiwgIsWU IiwgIsWVIiwgIiAiLCAiJyIsICIvIgorICAgICAgICAgICAgKTsKKyAgdmFy IHBfcmVwbGFjZSA9ICAgbmV3IEFycmF5KCJTIiwgInMiLCAiRGoiLCAiZGoi LCAiWiIsICJ6IiwgIkMiLCAiYyIsICJDIiwgImMiLCAiQSIsCisgICAgICAg ICAgICAiQSIsICJBIiwgIkEiLCAiQSIsICJBIiwgIkEiLCAiQyIsICJFIiwg IkUiLCAiRSIsICJFIiwgIkkiLCAiSSIsICJJIiwgIkkiLAorICAgICAgICAg ICAgIk4iLCAiTyIsICJPIiwgIk8iLCAiTyIsICJPIiwgIk8iLCAiTyIsICJV IiwgIlUiLCAiVSIsICJVIiwgIlkiLCAiQiIsICJTcyIsCisgICAgICAgICAg ICAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJjIiwgImUi LCAiZSIsICJlIiwgImUiLCAiaSIsICJpIiwKKyAgICAgICAgICAgICJpIiwg ImkiLCAibyIsICJuIiwgIm8iLCAibyIsICJvIiwgIm8iLCAibyIsICJvIiwg Im8iLCAidSIsICJ1IiwgInUiLCAieSIsCisgICAgICAgICAgICAieSIsICJi IiwgInkiLCAiUiIsICJyIiwgIl8iLCAiXyIsICIiCisgICAgICAgICAgKTsK KworICBjbGVhbmVkID0gcHJlZ19yZXBsYWNlKHBfc2VhcmNoLCBwX3JlcGxh Y2UsIHN0cik7CisgIGNsZWFuZWQgPSBjbGVhbmVkLnJlcGxhY2UoL1teX2Et ekEtWjAtOV0vZywgIiIpOworICBjbGVhbmVkID0gY2xlYW5lZC5yZXBsYWNl KC9bX10rL2csICJfIik7CisKKyAgcmV0dXJuIGNsZWFuZWQ7Cit9OworCisv KgorICogbmFtZUZvcm1hdCAoKSwgc2VwYXJhdGUgZmlsZW5hbWUgZnJvbSBl eHRlbnNpb24gYmVmb3JlIGNhbGxpbmcgY2xlYW5TdHJpbmcoKQorICogbmFt ZUZvcm1hdAorICovCit2YXIgbmFtZUZvcm1hdCA9IGZ1bmN0aW9uKGlucHV0 KSB7CisgIGZpbGVuYW1lID0gJyc7CisgIGlmKGlucHV0Lmxhc3RJbmRleE9m KCcuJykgIT0gLTEpIHsKKyAgICBmaWxlbmFtZSAgPSBjbGVhblN0cmluZyhp bnB1dC5zdWJzdHIoMCwgaW5wdXQubGFzdEluZGV4T2YoJy4nKSkpOworICAg IGZpbGVuYW1lICs9ICcuJyArIGlucHV0LnNwbGl0KCcuJykucG9wKCk7Cisg IH0gZWxzZSB7CisgICAgZmlsZW5hbWUgPSBjbGVhblN0cmluZyhpbnB1dCk7 CisgIH0KKyAgcmV0dXJuIGZpbGVuYW1lOworfTsKKworLy9Db252ZXJ0cyBi eXRlcyB0byBrYiwgbWIsIG9yIGdiIGFzIG5lZWRlZCBmb3IgZGlzcGxheS4K K3ZhciBmb3JtYXRCeXRlcyA9IGZ1bmN0aW9uKGJ5dGVzKXsKKyAgdmFyIG4g PSBwYXJzZUZsb2F0KGJ5dGVzKTsKKyAgdmFyIGQgPSBwYXJzZUZsb2F0KDEw MjQpOworICB2YXIgYyA9IDA7CisgIHZhciB1ID0gW2xnLmJ5dGVzLGxnLmti LGxnLm1iLGxnLmdiXTsKKworICB3aGlsZSh0cnVlKXsKKyAgICBpZihuIDwg ZCl7CisgICAgICBuID0gTWF0aC5yb3VuZChuICogMTAwKSAvIDEwMDsKKyAg ICAgIHJldHVybiBuICsgdVtjXTsKKyAgICB9IGVsc2UgeworICAgICAgbiAv PSBkOworICAgICAgYyArPSAxOworICAgIH0KKyAgfQorfTsKKworLyoKKyAq IEhhbmRsZSBFcnJvci4gRnJlZXplIGludGVyYWN0aXZlIGJ1dHRvbnMgYW5k IGRpc3BsYXkKKyAqIGVycm9yIG1lc3NhZ2UuIEFsc28gY2FsbGVkIHdoZW4g YXV0aCgpIGZ1bmN0aW9uIHJldHVybiBmYWxzZSAoQ29kZSA9PSAiLTEiKQor ICovCit2YXIgaGFuZGxlRXJyb3IgPSBmdW5jdGlvbihlcnJNc2cpIHsKKyAg JCgnLnN0b3JhZ2VfZGlhbG9nIC5uZXdmaWxlJykuYXR0cigiZGlzYWJsZWQi LCAiZGlzYWJsZWQiKTsKKyAgJCgnLnN0b3JhZ2VfZGlhbG9nIC51cGxvYWQn KS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAkKCcuc3RvcmFn ZV9kaWFsb2cgLmNyZWF0ZScpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVk Iik7Cit9OworCisvKgorICogVGVzdCBpZiBEYXRhIHN0cnVjdHVyZSBoYXMg dGhlICdjYXAnIGNhcGFiaWxpdHkKKyAqICdjYXAnIGlzIG9uZSBvZiAnc2Vs ZWN0JywgJ3JlbmFtZScsICdkZWxldGUnLCAnZG93bmxvYWQnCisgKi8KK2Z1 bmN0aW9uIGhhc19jYXBhYmlsaXR5KGRhdGEsIGNhcCkgeworICBpZiAodHlw ZW9mKGRhdGFbJ0NhcGFiaWxpdGllcyddKSA9PSAidW5kZWZpbmVkIikgcmV0 dXJuIHRydWU7CisgIGVsc2UgcmV0dXJuICQuaW5BcnJheShjYXAsIGRhdGFb J0NhcGFiaWxpdGllcyddKSA+IC0xOworfQorCisvLyBUZXN0IGlmIGZpbGUg aXMgYXV0aG9yaXplZAordmFyIGlzQXV0aG9yaXplZEZpbGUgPSBmdW5jdGlv bihmaWxlbmFtZSkgeworICBpZihjb25maWcuc2VjdXJpdHkudXBsb2FkUG9s aWN5ID09ICdESVNBTExPV19BTEwnKSB7CisgICAgaWYoJC5pbkFycmF5KGdl dEV4dGVuc2lvbihmaWxlbmFtZSksIGNvbmZpZy5zZWN1cml0eS51cGxvYWRS ZXN0cmljdGlvbnMpICE9IC0xKSByZXR1cm4gdHJ1ZTsKKyAgfQorICBpZihj b25maWcuc2VjdXJpdHkudXBsb2FkUG9saWN5ID09ICdBTExPV19BTEwnKSB7 CisgICAgaWYoJC5pbkFycmF5KGdldEV4dGVuc2lvbihmaWxlbmFtZSksIGNv bmZpZy5zZWN1cml0eS51cGxvYWRSZXN0cmljdGlvbnMpID09IC0xKSByZXR1 cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9OworCisvLyByZXR1 cm4gZmlsZW5hbWUgZXh0ZW5zaW9uCit2YXIgZ2V0RXh0ZW5zaW9uID0gZnVu Y3Rpb24oZmlsZW5hbWUpIHsKKyAgaWYoZmlsZW5hbWUuc3BsaXQoJy4nKS5s ZW5ndGggPT0gMSkKKyAgICByZXR1cm4gIiI7CisgIHJldHVybiBmaWxlbmFt ZS5zcGxpdCgnLicpLnBvcCgpOworfTsKKworLy8gcmV0dXJuIGZpbGVuYW1l IHdpdGhvdXQgZXh0ZW5zaW9uIHsKK3ZhciBnZXRGaWxlbmFtZSA9IGZ1bmN0 aW9uKGZpbGVuYW1lKSB7CisgIGlmKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcu JykgIT0gLTEpCisgICAgcmV0dXJuIGZpbGVuYW1lLnN1YnN0cmluZygwLCBm aWxlbmFtZS5sYXN0SW5kZXhPZignLicpKTsKKyAgZWxzZQorICAgIHJldHVy biBmaWxlbmFtZTsKK307CisKKy8vIGhlbHBmdWwgaW4gc2hvdy9oaWRlIHRv b2xiYXIgYnV0dG9uIGZvciBXaW5kb3dzCit2YXIgaGlkZUJ1dHRvbnMgPSBm dW5jdGlvbigpIHsKKyAgICB2YXIgY3VycmVudF9wYXRoID0gJCgnLmN1cnJl bnRwYXRoJykudmFsKCk7CisgICAgaWYoY29uZmlnLm9wdGlvbnMucGxhdGZv cm1fdHlwZSA9PSAnd2luMzInICYmIGN1cnJlbnRfcGF0aCA9PSAiLyIpCisg ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK307CisK Ky8qCisgKiBTZXRzIHRoZSBmb2xkZXIgc3RhdHVzLCB1cGxvYWQsIGFuZCBu ZXcgZm9sZGVyIGZ1bmN0aW9ucworICogdG8gdGhlIHBhdGggc3BlY2lmaWVk LiBDYWxsZWQgb24gaW5pdGlhbCBwYWdlIGxvYWQgYW5kCisgKiB3aGVuZXZl ciBhIG5ldyBkaXJlY3RvcnkgaXMgc2VsZWN0ZWQuCisgKi8KK3ZhciBzZXRV cGxvYWRlciA9IGZ1bmN0aW9uKHBhdGgpeworICAkKCcuc3RvcmFnZV9kaWFs b2cgI3VwbG9hZGVyJykuZmluZCgnYScpLnJlbW92ZSgpOworICAkKCcuc3Rv cmFnZV9kaWFsb2cgI3VwbG9hZGVyJykuZmluZCgnYicpLnJlbW92ZSgpOwor CisgIHBhdGggPSBkZWNvZGVVUkkocGF0aCk7CisgIHZhciBkaXNwbGF5X3N0 cmluZyA9IGRpc3BsYXlQYXRoKHBhdGgpOworICB2YXIgbXlwYXRoID0gJyc7 CisKKyAgLy8gc3BsaXQgcGF0aAorICBzcGxpdF9wYXRoID0gZGlzcGxheV9z dHJpbmcuc3BsaXQoJy8nKTsKKyAgc3BsaXRfcGF0aCA9IHNwbGl0X3BhdGgu ZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlO30pOworCisgIC8vIHNldCBl bXB0eSBwYXRoIGlmIGl0IGlzIHdpbmRvd3MKKyAgaWYgKGNvbmZpZy5vcHRp b25zLnBsYXRmb3JtX3R5cGUgPT09ICJ3aW4zMiIgJiYgY29uZmlnLm9wdGlv bnMuc2hvd192b2x1bWVzKSB7CisgICAgICBteXBhdGggPSAiIjsKKyAgfQor ICBlbHNlIGlmIChzcGxpdF9wYXRoLmxlbmd0aCA9PT0gMCkKKyAgICBteXBh dGggPSAkKCc8Yj4vPC9iPicpOworICBlbHNlCisgICAgbXlwYXRoID0gJCgn PGEgY2xhc3M9ImJyZWFkY3J1bWJzIiBocmVmPSIjIiBkYXRhLXBhdGg9Ii8i Pi88L2E+Jyk7CisgICQobXlwYXRoKS5hcHBlbmRUbygkKCcuc3RvcmFnZV9k aWFsb2cgI3VwbG9hZGVyIGgxJykpOworCisgIGZvcih2YXIgaSBpbiBzcGxp dF9wYXRoKSB7CisgICAgaWYgKGkgPCBzcGxpdF9wYXRoLmxlbmd0aC0xKSB7 CisgICAgICBteXBhdGggPSAkKCc8YSBjbGFzcz0iYnJlYWRjcnVtYnMiIGhy ZWY9IiMiIGRhdGEtcGF0aD0iJytkaXNwbGF5X3N0cmluZy5yZXBsYWNlKHNw bGl0X3BhdGhbaSsxXSwgJycpKyciPicrc3BsaXRfcGF0aFtpXSsnLzwvYT4n KTsKKyAgICAgICQobXlwYXRoKS5hcHBlbmRUbygkKCcuc3RvcmFnZV9kaWFs b2cgI3VwbG9hZGVyIGgxJykpOworICAgfQorICAgZWxzZSB7CisgICAgIG15 cGF0aCA9ICQoJzxiPicrc3BsaXRfcGF0aFtpXSsnPC9iPicpOworICAgICAk KG15cGF0aCkuYXBwZW5kVG8oJCgnLnN0b3JhZ2VfZGlhbG9nICN1cGxvYWRl ciBoMScpKTsKKyAgIH0KKyAgfQorCisgICQoJy5jdXJyZW50cGF0aCcpLnZh bChwYXRoKTsKKyAgaWYoJCgnLnN0b3JhZ2VfZGlhbG9nICN1cGxvYWRlciBo MSBzcGFuJykubGVuZ3RoID09PSAwKSB7CisgICAgJCgnPHNwYW4+JytsZy5j dXJyZW50X2ZvbGRlcisnPC9zcGFuPicpLmFwcGVuZFRvKCQoJy5zdG9yYWdl X2RpYWxvZyAjdXBsb2FkZXIgaDEnKSk7CisgIH0KKworICAkKCcuc3RvcmFn ZV9kaWFsb2cgI3VwbG9hZGVyIGgxJykuYXR0cigndGl0bGUnLCBkaXNwbGF5 X3N0cmluZyk7CisgICQoJy5zdG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEn KS5hdHRyKCdkYXRhLXBhdGgnLCBkaXNwbGF5X3N0cmluZyk7CisKKyAgLy8g Y3JlYXRlIG5ldyBmb2xkZXIKKyAgJCgnLmNyZWF0ZScpLnVuYmluZCgpLmNs aWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIGZvbGRlcm5hbWUgPSAgbGcuZGVm YXVsdF9mb2xkZXJuYW1lOworICAgIHZhciAkZmlsZV9lbGVtZW50LAorICAg ICAgICAkZmlsZV9lbGVtZW50X2xpc3Q7CisKKyAgICAkKCcuZmlsZV9tYW5h Z2VyIGJ1dHRvbi5jcmVhdGUnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxl ZCcpOworICAgIGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAn Z3JpZCcpeworCisgICAgICAvLyB0ZW1wbGF0ZSBmb3IgY3JlYXRpbmcgbmV3 IGZvbGRlcgorICAgICAgdmFyIGZvbGRlcl9kaXYgPSAiPGxpIGNsYXNzPSdj YXBfZG93bmxvYWRjYXBfZGVsZXRlY2FwX3NlbGVjdF9maWxlY2FwX3NlbGVj dF9mb2xkZXJjYXBfcmVuYW1lY2FwX2NyZWF0ZWNhcF91cGxvYWQnPiIrCisg ICAgICAgICAgIjxkaXYgY2xhc3M9J2NsaXAnPjxzcGFuIGRhdGEtYWx0PScn IGNsYXNzPSdmYSBmYS1mb2xkZXItb3BlbiBmbV9mb2xkZXInPjwvc3Bhbj48 L2Rpdj4iKworICAgICAgICAgICI8cD48aW5wdXQgdHlwZT0ndGV4dCcgY2xh c3M9J2ZtX2ZpbGVfcmVuYW1lJz48c3BhbiB0aXRsZT0nJz5OZXdfRm9sZGVy PC9zcGFuPjwvcD4iKworICAgICAgICAgICI8c3BhbiBjbGFzcz0nbWV0YSBz aXplJz48L3NwYW4+PHNwYW4gY2xhc3M9J21ldGEgY3JlYXRlZCc+PC9zcGFu PjxzcGFuIGNsYXNzPSdtZXRhIG1vZGlmaWVkJz48L3NwYW4+PC9saT4iOwor CisgICAgICB2YXIgcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpLAor ICAgICAgICAgICRmaWxlX2VsZW1lbnQgPSAgJChmb2xkZXJfZGl2KTsKKyAg ICAgICQoJy5maWxlaW5mbyAjY29udGVudHMuZ3JpZCcpLmFwcGVuZCgkZmls ZV9lbGVtZW50KTsKKyAgICAgICRmaWxlX2VsZW1lbnQuZmluZCgncCBzcGFu JykudG9nZ2xlKCk7CisgICAgICAkZmlsZV9lbGVtZW50LmZpbmQoJ3AgaW5w dXQnKS50b2dnbGUoKS52YWwobGcubmV3X2ZvbGRlcikuc2VsZWN0KCk7CisK KyAgICAgIC8vIHJlbmFtZSBmb2xkZXIvZmlsZSBvbiBwcmVzc2luZyBlbnRl ciBrZXkKKyAgICAgICQoJy5maWxlX21hbmFnZXInKS5iaW5kKCkub24oJ2tl eXVwJywgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZS5rZXlDb2RlID09 IDEzKSB7CisgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAg ICAgICAkZmlsZV9lbGVtZW50LmZpbmQoJ3AgaW5wdXQnKS50cmlnZ2VyKCdi bHVyJyk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICAvLyByZW5h bWUgZm9sZGVyL2ZpbGUgb24gYmx1ciAKKyAgICAgICRmaWxlX2VsZW1lbnQu ZmluZCgncCBpbnB1dCcpLm9uKCdibHVyJywgZnVuY3Rpb24oZSkgeworICAg ICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5jcmVhdGUnKS5yZW1vdmVB dHRyKCdkaXNhYmxlZCcpOworICAgICAgICB2YXIgdGV4dF92YWx1ZSA9ICRm aWxlX2VsZW1lbnQuZmluZCgncCBpbnB1dCcpLnZhbCgpLAorICAgICAgICAg ICAgcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpOworICAgICAgICAk ZmlsZV9lbGVtZW50LmZpbmQoJ3AgaW5wdXQnKS50b2dnbGUoKTsKKyAgICAg ICAgJGZpbGVfZWxlbWVudC5maW5kKCdwIHNwYW4nKS50b2dnbGUoKS5odG1s KHRleHRfdmFsdWUpOworICAgICAgICBpZih0ZXh0X3ZhbHVlID09PSB1bmRl ZmluZWQpIHRleHRfdmFsdWUgPSBsZy5uZXdfZm9sZGVyOworICAgICAgICBn ZXRGb2xkZXJOYW1lKHRleHRfdmFsdWUpOworICAgICAgICBnZXRGb2xkZXJJ bmZvKHBhdGgpOworICAgICAgfSk7CisKKyAgICB9CisgICAgZWxzZSBpZigk KCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2xpc3QnKXsKKworICAg ICAgLy8gdGVtcGxhdGUgdG8gY3JlYXRlIG5ldyBmb2xkZXIgaW4gdGFibGUg dmlldworICAgICAgdmFyIGZvbGRlcl9kaXYgPSAkKCI8dHIgY2xhc3M9J2Nh cF9kb3dubG9hZCBjYXBfZGVsZXRlIGNhcF9zZWxlY3RfZmlsZSBjYXBfc2Vs ZWN0X2ZvbGRlciBjYXBfcmVuYW1lIGNhcF9jcmVhdGUgY2FwX3VwbG9hZCc+ IisKKyAgICAgICAgIjx0ZCB0aXRsZT0nJyBjbGFzcz0nZmEgZmEtZm9sZGVy LW9wZW4gdGJsX2ZvbGRlcic+IisKKyAgICAgICAgICAiPHA+PGlucHV0IHR5 cGU9J3RleHQnIGNsYXNzPSdmbV9maWxlX3JlbmFtZSc+PHNwYW4+IitsZy5u ZXdfZm9sZGVyKyI8L3NwYW4+PC9wPiIrCisgICAgICAgICAgIjwvdGQ+PHRk PiIrCisgICAgICAgICAgIjxhYmJyIHRpdGxlPScnPjwvYWJicj48L3RkPiIr CisgICAgICAgICAgIjx0ZD48L3RkPiIrCisgICAgICAgICI8L3RyPiIpOwor CisgICAgICAkZmlsZV9lbGVtZW50X2xpc3QgPSAgJChmb2xkZXJfZGl2KTsK KyAgICAgICQoJy5maWxlaW5mbyAjY29udGVudHMubGlzdCcpLnByZXBlbmQo JGZpbGVfZWxlbWVudF9saXN0KTsKKyAgICAgICRmaWxlX2VsZW1lbnRfbGlz dC5maW5kKCdwIHNwYW4nKS50b2dnbGUoKTsKKyAgICAgICRmaWxlX2VsZW1l bnRfbGlzdC5maW5kKCdwIGlucHV0JykudG9nZ2xlKCkudmFsKGxnLm5ld19m b2xkZXIpLnNlbGVjdCgpOworCisgICAgICAvLyByZW5hbWUgZm9sZGVyL2Zp bGUgb24gcHJlc3NpbmcgZW50ZXIga2V5CisgICAgICAkKCcuZmlsZV9tYW5h Z2VyJykuYmluZCgpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHsKKyAgICAg ICAgaWYgKGUua2V5Q29kZSA9PSAxMykgeworICAgICAgICAgIGUuc3RvcFBy b3BhZ2F0aW9uKCk7CisgICAgICAgICAgJGZpbGVfZWxlbWVudF9saXN0LmZp bmQoJ3AgaW5wdXQnKS50cmlnZ2VyKCdibHVyJyk7CisgICAgICAgIH0KKyAg ICAgIH0pOworCisgICAgICAvLyByZW5hbWUgZm9sZGVyL2ZpbGUgb24gYmx1 ciAKKyAgICAgICRmaWxlX2VsZW1lbnRfbGlzdC5maW5kKCdwIGlucHV0Jyku b24oJ2JsdXInLCBmdW5jdGlvbihlKSB7CisgICAgICAgICQoJy5maWxlX21h bmFnZXIgYnV0dG9uLmNyZWF0ZScpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7 CisgICAgICAgIHZhciB0ZXh0X3ZhbHVlID0gJGZpbGVfZWxlbWVudF9saXN0 LmZpbmQoJ3AgaW5wdXQnKS52YWwoKSwKKyAgICAgICAgICAgIHBhdGggPSAk KCcuY3VycmVudHBhdGgnKS52YWwoKTsKKyAgICAgICAgJGZpbGVfZWxlbWVu dF9saXN0LmZpbmQoJ3AgaW5wdXQnKS50b2dnbGUoKTsKKyAgICAgICAgJGZp bGVfZWxlbWVudF9saXN0LmZpbmQoJ3Agc3BhbicpLnRvZ2dsZSgpLmh0bWwo dGV4dF92YWx1ZSk7CisgICAgICAgIGlmKHRleHRfdmFsdWUgPT09IHVuZGVm aW5lZCkgdGV4dF92YWx1ZSA9IGxnLm5ld19mb2xkZXI7CisgICAgICAgIGdl dEZvbGRlck5hbWUodGV4dF92YWx1ZSk7CisgICAgICAgIGdldEZvbGRlcklu Zm8ocGF0aCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBjcmVhdGUg YSBuZXcgZm9sZGVyCisgICAgdmFyIGdldEZvbGRlck5hbWUgPSBmdW5jdGlv bih2YWx1ZSl7CisgICAgICB2YXIgZm5hbWUgPSB2YWx1ZTsKKworICAgICAg aWYoZm5hbWUgIT0gJycpeworICAgICAgICBmb2xkZXJuYW1lID0gY2xlYW5T dHJpbmcoZm5hbWUpOworICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCk7IC8v IHRvIHByZXZlbnQgSUUgY2FjaGUgaXNzdWVzCisgICAgICAgICQuZ2V0SlNP TihmaWxlQ29ubmVjdG9yICsgJz9tb2RlPWFkZGZvbGRlciZwYXRoPScgKyAk KCcuY3VycmVudHBhdGgnKS52YWwoKSArICcmbmFtZT0nICsgZm9sZGVybmFt ZSArICcmdGltZT0nICsgZC5nZXRNaWxsaXNlY29uZHMoKSwgZnVuY3Rpb24o cmVzcCl7CisgICAgICAgICAgcmVzdWx0ID0gcmVzcC5kYXRhLnJlc3VsdDsK KyAgICAgICAgICBpZihyZXN1bHRbJ0NvZGUnXSA9PT0gMCl7CisgICAgICAg ICAgICBhbGVydGlmeS5zdWNjZXNzKGxnLnN1Y2Nlc3NmdWxfYWRkZWRfZm9s ZGVyKTsKKyAgICAgICAgICAgIGdldEZvbGRlckluZm8ocmVzdWx0WydQYXJl bnQnXSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsZXJ0 aWZ5LmVycm9yKHJlc3VsdFsnRXJyb3InXSk7CisgICAgICAgICAgfQorICAg ICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0aWZ5LmVy cm9yKGxnLm5vX2ZvbGRlcm5hbWUpOworICAgICAgfQorICAgIH07CisKKyAg fSk7Cit9OworCisvKgorICogQmluZHMgc3BlY2lmaWMgYWN0aW9ucyB0byB0 aGUgdG9vbGJhciBiYXNlZCBvbiBjYXBhYmlsaXR5LgorICogYW5kIHNob3cv aGlkZSBidXR0b25zCisgKi8KK3ZhciBiaW5kVG9vbGJhciA9IGZ1bmN0aW9u KGRhdGEpeworICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEsICd1cGxvYWQn KSB8fCBoaWRlQnV0dG9ucygpKSB7CisgICAgJCgnLmZpbGVfbWFuYWdlcicp LmZpbmQoJ2J1dHRvbi51cGxvYWQnKS5oaWRlKCk7CisgIH0KKyAgZWxzZSB7 CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi51cGxvYWQn KS5zaG93KCk7CisgIH0KKworICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEs ICdjcmVhdGUnKSB8fCBoaWRlQnV0dG9ucygpKSB7CisgICAgJCgnLmZpbGVf bWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5jcmVhdGUnKS5oaWRlKCk7CisgIH0K KyAgZWxzZSB7CisgICAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0 dG9uLmNyZWF0ZScpLnNob3coKTsKKyAgfQorCisgIGlmICghaGFzX2NhcGFi aWxpdHkoZGF0YSwgJ2RlbGV0ZScpIHx8IGhpZGVCdXR0b25zKCkpIHsKKyAg ICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmRlbGV0ZScpLmhp ZGUoKTsKKyAgfSBlbHNlIHsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmlu ZCgnYnV0dG9uLmRlbGV0ZScpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAk KCcuZmlsZWluZm8gLmRlbGV0ZV9pdGVtJykuc2hvdygpOworICAgIH0pOwor CisgICAgLy8gdGFrZSBhY3Rpb24gYmFzZWQgb24gcHJlc3NlZCBidXR0b24g eWVzIG9yIG5vCisgICAgJCgnLmZpbGVpbmZvIC5kZWxldGVfaXRlbSBidXR0 b24uYnRuX3llcycpLnVuYmluZCgpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkg eworICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09ICdn cmlkJyl7CisgICAgICAgIHZhciBwYXRoID0gJCgnLmZpbGVpbmZvJykuZmlu ZCgnI2NvbnRlbnRzIGxpLnNlbGVjdGVkIC5jbGlwIHNwYW4nKS5hdHRyKCdk YXRhLWFsdCcpOworICAgICAgICBpZihwYXRoLmxhc3RJbmRleE9mKCcvJykg PT0gcGF0aC5sZW5ndGggLSAxKXsKKyAgICAgICAgICBkYXRhWydQYXRoJ10g PSBwYXRoOworICAgICAgICAgIGRlbGV0ZUl0ZW0oZGF0YSk7CisgICAgICAg IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZGVsZXRlSXRlbShkYXRh KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAg IHZhciBwYXRoID0gJCgnLmZpbGVpbmZvJykuZmluZCgndGFibGUjY29udGVu dHMgdGJvZHkgdHIuc2VsZWN0ZWQgdGQ6Zmlyc3QtY2hpbGQnKS5hdHRyKCd0 aXRsZScpOworICAgICAgICBpZihwYXRoLmxhc3RJbmRleE9mKCcvJykgPT0g cGF0aC5sZW5ndGggLSAxKXsKKyAgICAgICAgICBkYXRhWydQYXRoJ10gPSBw YXRoOworICAgICAgICAgIGRlbGV0ZUl0ZW0oZGF0YSk7CisgICAgICAgIH0K KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZGVsZXRlSXRlbShkYXRhKTsK KyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgIH0KKworICAvLyBE b3dubG9hZCBmaWxlIG9uIGRvd25sb2FkIGJ1dHRvbiBjbGljaworICBpZiAo IWhhc19jYXBhYmlsaXR5KGRhdGEsICdkb3dubG9hZCcpIHx8IGhpZGVCdXR0 b25zKCkpIHsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9u LmRvd25sb2FkJykuaGlkZSgpOworICB9IGVsc2UgeworICAgICQoJy5maWxl X21hbmFnZXInKS5maW5kKCdidXR0b24uZG93bmxvYWQnKS51bmJpbmQoKS5j bGljayhmdW5jdGlvbigpeworICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0 YSgndmlldycpID09ICdncmlkJyl7CisgICAgICAgIHZhciBwYXRoID0gJCgn LmZpbGVpbmZvIGxpLnNlbGVjdGVkJykuZmluZCgnLmNsaXAgc3BhbicpLmF0 dHIoJ2RhdGEtYWx0Jyk7CisgICAgICAgIHdpbmRvdy5vcGVuKGZpbGVDb25u ZWN0b3IgKyAnP21vZGU9ZG93bmxvYWQmcGF0aD0nICsgZW5jb2RlVVJJQ29t cG9uZW50KHBhdGgpLCAnX2JsYW5rJyk7CisgICAgICB9CisgICAgICBlbHNl IHsKKyAgICAgICAgdmFyIHBhdGggPSAkKCcuZmlsZWluZm8nKS5maW5kKCd0 YWJsZSNjb250ZW50cyB0Ym9keSB0ci5zZWxlY3RlZCB0ZDpmaXJzdC1jaGls ZCcpLmF0dHIoJ3RpdGxlJyk7CisgICAgICAgIHdpbmRvdy5vcGVuKGZpbGVD b25uZWN0b3IgKyAnP21vZGU9ZG93bmxvYWQmcGF0aD0nICsgZW5jb2RlVVJJ Q29tcG9uZW50KHBhdGgpLCAnX2JsYW5rJyk7CisgICAgICB9CisgICAgfSk7 CisgIH0KKworICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEsICdyZW5hbWUn KSB8fCBoaWRlQnV0dG9ucygpKSB7CisgICAgJCgnLmZpbGVfbWFuYWdlcicp LmZpbmQoJ2J1dHRvbi5yZW5hbWUnKS5oaWRlKCk7CisgIH0KKyAgZWxzZSB7 CisgICAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLnJlbmFt ZScpLnNob3coKTsKKyAgfQorfTsKKworLy8gZW5hYmxlL2Rpc2FibGUgYnV0 dG9uIHdoZW4gZmlsZXMvZm9sZGVyIGFyZSBsb2FkZWQKK3ZhciBlbmFibGVf ZGlzYWJsZV9idG4gPSBmdW5jdGlvbigpIHsKKyAgaWYoJCgnLmZpbGVpbmZv JykuZGF0YSgndmlldycpID09ICdncmlkJyl7CisgICAgdmFyICRncmlkX2Zp bGUgPSAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnI2NvbnRlbnRzIGxpLnNl bGVjdGVkJyk7CisgICAgJGdyaWRfZmlsZS5yZW1vdmVDbGFzcygnc2VsZWN0 ZWQnKTsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmRl bGV0ZScpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgJCgnLmZpbGVf bWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5kb3dubG9hZCcpLnByb3AoJ2Rpc2Fi bGVkJywgdHJ1ZSk7CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1 dHRvbi5yZW5hbWUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgIGlm ICgkZ3JpZF9maWxlLmxlbmd0aCA+IDApIHsKKyAgICAgICQoJy5jcmVhdGVf aW5wdXQgaW5wdXRbdHlwZT0idGV4dCJdJykudmFsKCcnKTsKKyAgICAgICQo Jy5maWxlX21hbmFnZXJfb2snKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKKyAg ICB9CisgIH0gZWxzZSB7CisgICAgdmFyICRsaXN0X2ZpbGUgPSAkKCcuZmls ZWluZm8nKS5maW5kKCd0YWJsZSNjb250ZW50cyB0Ym9keSB0ci5zZWxlY3Rl ZCcpOworICAgICRsaXN0X2ZpbGUucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7 CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5kZWxldGUn KS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICQoJy5maWxlX21hbmFn ZXInKS5maW5kKCdidXR0b24uZG93bmxvYWQnKS5wcm9wKCdkaXNhYmxlZCcs IHRydWUpOworICAgICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24u cmVuYW1lJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICBpZiAoJGxp c3RfZmlsZS5sZW5ndGggPiAwKSB7CisgICAgICAkKCcuY3JlYXRlX2lucHV0 IGlucHV0W3R5cGU9InRleHQiXScpLnZhbCgnJyk7CisgICAgICAkKCcuZmls ZV9tYW5hZ2VyX29rJykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CisgICAgfQor ICB9CisKKyAgJCgnLmRlbGV0ZV9pdGVtJykuaGlkZSgpOworICAvLyBjbGVh ciBhZGRyZXNzIGJhcgorICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciBo MScpLnNob3coKTsKKyAgJCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLnNo b3dfc2VsZWN0ZWRfZmlsZScpLnJlbW92ZSgpOworfTsKKworLy8gc3dpdGNo IHRvIGZvbGRlciB2aWV3CiskKCcuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbycp Lm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKKyAgZW5hYmxlX2Rpc2FibGVf YnRuKCk7Cit9KTsKKworCisvLyByZWZyZXNoIGN1cnJlbnQgZGlyZWN0b3J5 CiskKCcuZmlsZV9tYW5hZ2VyIC5yZWZyZXNoJykub24oJ2NsaWNrJywgZnVu Y3Rpb24oZSkgeworICBlbmFibGVfZGlzYWJsZV9idG4oKTsKKyAgdmFyIGN1 cnJfcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpOworICBwYXRoID0g Y3Vycl9wYXRoLnN1YnN0cmluZygwLCBjdXJyX3BhdGgubGFzdEluZGV4T2Yo Ii8iKSkgKyAiLyI7CisgIGdldEZvbGRlckluZm8ocGF0aCk7Cit9KTsKKwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgSXRlbSBBY3Rpb25zCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworCisvKgorICogUmVuYW1lIHRoZSBjdXJyZW50IGl0ZW0gYW5kIHJldHVy bnMgdGhlIG5ldyBuYW1lLgorICogYnkgZG91YmxlIGNsaWNraW5nIG9yIGJ5 IGNsaWNraW5nIHRoZSAiUmVuYW1lIiBidXR0b24gaW4KKyAqIHRhYmxlKGxp c3QpIHZpZXdzLgorICovCit2YXIgcmVuYW1lSXRlbSA9IGZ1bmN0aW9uKGRh dGEpeworICB2YXIgb3JpZ19uYW1lID0gZ2V0RmlsZW5hbWUoZGF0YVsnRmls ZW5hbWUnXSksCisgICAgICBmaW5hbE5hbWUgPSAnJzsKKworICB2YXIgZ2V0 TmV3TmFtZSA9IGZ1bmN0aW9uKHJuYW1lKXsKKyAgICBpZihybmFtZSAhPT0g JycpeworICAgICAgdmFyIGdpdmVuTmFtZSA9IG5hbWVGb3JtYXQocm5hbWUp LAorICAgICAgICAgIHN1ZmZpeCA9IGdldEV4dGVuc2lvbihkYXRhWydGaWxl bmFtZSddKTsKKyAgICAgIGlmKHN1ZmZpeC5sZW5ndGggPiAwKSB7CisgICAg ICAgIGdpdmVuTmFtZSA9IGdpdmVuTmFtZSArICcuJyArIHN1ZmZpeDsKKyAg ICAgIH0KKworICAgICAgdmFyIG9sZFBhdGggPSBkYXRhWydQYXRoJ10sCisg ICAgICAgICAgcG9zdF9kYXRhID0geworICAgICAgICAibW9kZSI6ICJyZW5h bWUiLAorICAgICAgICAib2xkIjogZGF0YVsnUGF0aCddLAorICAgICAgICAi bmV3IjogZ2l2ZW5OYW1lLAorICAgICAgfTsKKworICAgICAgJC5hamF4KHsK KyAgICAgICAgdHlwZTogJ1BPU1QnLAorICAgICAgICBkYXRhOiBKU09OLnN0 cmluZ2lmeShwb3N0X2RhdGEpLAorICAgICAgICB1cmw6IGZpbGVDb25uZWN0 b3IsCisgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCisgICAgICAgIGNvbnRl bnRUeXBlOiAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsCisg ICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rp b24ocmVzcCl7CisgICAgICAgICAgcmVzdWx0ID0gcmVzcC5kYXRhLnJlc3Vs dDsKKyAgICAgICAgICBpZihyZXN1bHRbJ0NvZGUnXSA9PT0gMCl7CisgICAg ICAgICAgICB2YXIgbmV3UGF0aCA9IHJlc3VsdFsnTmV3IFBhdGgnXSwKKyAg ICAgICAgICAgICAgICBuZXdOYW1lID0gcmVzdWx0WydOZXcgTmFtZSddLAor ICAgICAgICAgICAgICAgIHRpdGxlID0gJCgiI3ByZXZpZXcgaDEiKS5hdHRy KCJ0aXRsZSIpOworCisgICAgICAgICAgICBpZiAodHlwZW9mIHRpdGxlICE9 InVuZGVmaW5lZCIgJiYgdGl0bGUgPT0gb2xkUGF0aCkKKyAgICAgICAgICAg ICAgJCgnI3ByZXZpZXcgaDEnKS50ZXh0KG5ld05hbWUpOworCisgICAgICAg ICAgICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQn KXsKKyAgICAgICAgICAgICAgJCgnLmZpbGVpbmZvIHNwYW5bZGF0YS1hbHQ9 IicgKyBvbGRQYXRoICsgJyJdJykucGFyZW50KCkubmV4dCgncCBzcGFuJyku dGV4dChuZXdOYW1lKTsKKyAgICAgICAgICAgICAgJCgnLmZpbGVpbmZvIHNw YW5bZGF0YS1hbHQ9IicgKyBvbGRQYXRoICsgJyJdJykuYXR0cignZGF0YS1h bHQnLCBuZXdQYXRoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICQoJy5maWxlaW5mbyB0ZFt0aXRsZT0iJyArIG9sZFBhdGggKyAn Il0nKS50ZXh0KG5ld05hbWUpOworICAgICAgICAgICAgICAkKCcuZmlsZWlu Zm8gdGRbdGl0bGU9IicgKyBvbGRQYXRoICsgJyJdJykuYXR0cigndGl0bGUn LCBuZXdQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQoIiNw cmV2aWV3IGgxIikuaHRtbChuZXdOYW1lKTsKKworICAgICAgICAgICAgLy8g YWN0dWFsaXplZCBkYXRhIGZvciBiaW5kaW5nCisgICAgICAgICAgICBkYXRh WydQYXRoJ109bmV3UGF0aDsKKyAgICAgICAgICAgIGRhdGFbJ0ZpbGVuYW1l J109bmV3TmFtZTsKKworICAgICAgICAgICAgLy8gVW5CaW5kIHRvb2xiYXIg ZnVuY3Rpb25zLgorICAgICAgICAgICAgJCgnLmZpbGVpbmZvJykuZmluZCgn YnV0dG9uLnJlbmFtZSwgYnV0dG9uLmRlbGV0ZSwgYnV0dG9uLmRvd25sb2Fk JykudW5iaW5kKCk7CisKKyAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3Mo bGcuc3VjY2Vzc2Z1bF9yZW5hbWUpOworICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKHJlc3VsdFsnRXJyb3InXSk7 CisgICAgICAgICAgfQorCisgICAgICAgICAgZmluYWxOYW1lID0gcmVzdWx0 WydOZXcgTmFtZSddOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9Cisg IH07CisKKyAgZ2V0TmV3TmFtZShkYXRhWydOZXdGaWxlbmFtZSddKTsKKyAg cmV0dXJuIGZpbmFsTmFtZTsKK307CisKKy8qCisgKiBkZWxldGUgdGhlIGZv bGRlciBvciBmaWxlcyBieSBjbGlja2luZyB0aGUgIkRlbGV0ZSIgYnV0dG9u CisgKiBpbiB0YWJsZShsaXN0KSB2aWV3CisgKi8KK3ZhciBkZWxldGVJdGVt ID0gZnVuY3Rpb24oZGF0YSl7CisgIHZhciBpc0RlbGV0ZWQgPSBmYWxzZSwK KyAgICAgIG1zZyA9IGxnLmNvbmZpcm1hdGlvbl9kZWxldGU7CisKKyAgdmFy IGRvRGVsZXRlID0gZnVuY3Rpb24oZGF0YSl7CisgICAgdmFyIHBhcmVudCA9 IGRhdGFbJ1BhdGgnXS5zcGxpdCgnLycpLnJldmVyc2UoKS5zbGljZSgxKS5y ZXZlcnNlKCkuam9pbignLycpICsgJy8nOworICAgIHZhciBwb3N0X2RhdGEg PSB7CisgICAgICAibW9kZSI6ICJkZWxldGUiLAorICAgICAgInBhdGgiOiBk YXRhWydQYXRoJ10KKyAgICB9OworCisgICAgJC5hamF4KHsKKyAgICAgIHR5 cGU6ICdQT1NUJywKKyAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3Rf ZGF0YSksCisgICAgICB1cmw6IGZpbGVDb25uZWN0b3IsCisgICAgICBkYXRh VHlwZTogJ2pzb24nLAorICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlv bi9qc29uOyBjaGFyc2V0PXV0Zi04IiwKKyAgICAgIGFzeW5jOiBmYWxzZSwK KyAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApeworICAgICAgICByZXN1 bHQgPSByZXNwLmRhdGEucmVzdWx0OworICAgICAgICBpZihyZXN1bHRbJ0Nv ZGUnXSA9PT0gMCl7CisgICAgICAgICAgaXNEZWxldGVkID0gdHJ1ZTsKKyAg ICAgICAgICBpZihpc0RlbGV0ZWQpIHsKKyAgICAgICAgICAgIGFsZXJ0aWZ5 LnN1Y2Nlc3MobGcuc3VjY2Vzc2Z1bF9kZWxldGUpOworICAgICAgICAgICAg dmFyIHJvb3RwYXRoID0gcmVzdWx0WydQYXRoJ10uc3Vic3RyaW5nKDAsIHJl c3VsdFsnUGF0aCddLmxlbmd0aC0xKTsgLy8gcmVtb3ZpbmcgdGhlIGxhc3Qg c2xhc2gKKyAgICAgICAgICAgICAgICByb290cGF0aCA9IHJvb3RwYXRoLnN1 YnN0cigwLCByb290cGF0aC5sYXN0SW5kZXhPZignLycpICsgMSk7CisgICAg ICAgICAgICBnZXRGb2xkZXJJbmZvKHJvb3RwYXRoKTsKKyAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaXNEZWxldGVkID0gZmFs c2U7CisgICAgICAgICAgYWxlcnRpZnkuZXJyb3IocmVzdWx0WydFcnJvcidd KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICAgIHJldHVybiBp c0RlbGV0ZWQ7CisgIH07CisKKyAgZG9EZWxldGUoZGF0YSk7CisgIHJldHVy biBpc0RlbGV0ZWQ7Cit9OworCisKKy8vIGhpZGUgbWVzc2FnZSBwcm9tcHQg aWYgY2xpY2tlZCBubworJCgnLmRlbGV0ZV9pdGVtIGJ1dHRvbi5idG5fbm8n KS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgJCgnLmRlbGV0ZV9pdGVt JykuaGlkZSgpOworfSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZ1bmN0aW9u cyB0byBSZXRyaWV2ZSBGaWxlIGFuZCBGb2xkZXIgRGV0YWlscworLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKi8KKworLyogRGVjaWRlcyB3aGV0aGVyIHRvIHJldHJpZXZlIGZp bGUgb3IgZm9sZGVyIGluZm8gYmFzZWQgb24KKyAqIHRoZSBwYXRoIHByb3Zp ZGVkLgorICovCit2YXIgZ2V0RGV0YWlsVmlldyA9IGZ1bmN0aW9uKHBhdGgp eworICBpZihwYXRoLmxhc3RJbmRleE9mKCcvJykgPT0gcGF0aC5sZW5ndGgg LSAxKXsKKyAgICB2YXIgYWxsb3dlZF90eXBlcyA9IGNvbmZpZy5vcHRpb25z LmFsbG93ZWRfZmlsZV90eXBlczsKKyAgICBnZXRGb2xkZXJJbmZvKHBhdGgs IGFsbG93ZWRfdHlwZXNbMF0pOworICB9Cit9OworCisvKgorICogUmV0cmll dmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBh IEpTT04KKyAqIG9iamVjdCBhbmQgdXNlcyB0aGF0IGRhdGEgdG8gcG9wdWxh dGUgYSB0ZW1wbGF0ZSBmb3IKKyAqIGxpc3Qgdmlld3MuIEJpbmRzIHRoZSB0 b29sYmFyIGZvciB0aGF0IGZpbGUvZm9sZGVyIHRvCisgKiBlbmFibGUgc3Bl Y2lmaWMgYWN0aW9ucy4gQ2FsbGVkIHdoZW5ldmVyIGFuIGl0ZW0gaXMKKyAq IGNsaWNrZWQgaW4gbGlzdCB2aWV3cy4KKyAqLwordmFyIGdldEZpbGVJbmZv ID0gZnVuY3Rpb24oZmlsZSl7CisgIC8vIFVwZGF0ZSBsb2NhdGlvbiBmb3Ig c3RhdHVzLCB1cGxvYWQsICYgbmV3IGZvbGRlciBmdW5jdGlvbnMuCisgIHZh ciBjdXJyZW50cGF0aCA9IGZpbGUuc3Vic3RyKDAsIGZpbGUubGFzdEluZGV4 T2YoJy8nKSArIDEpOworICBzZXRVcGxvYWRlcihjdXJyZW50cGF0aCk7CisK KyAgLy8gUmV0cmlldmUgdGhlIGRhdGEgJiBwb3B1bGF0ZSB0aGUgdGVtcGxh dGUuCisgIHZhciBkID0gbmV3IERhdGUoKTsgLy8gdG8gcHJldmVudCBJRSBj YWNoZSBpc3N1ZXMKKyAgdmFyIHBvc3RfZGF0YSA9IHsKKyAgICAncGF0aCc6 IGZpbGUsCisgICAgJ21vZGUnOiAnZ2V0aW5mbycKKyAgfTsKKworICAkLmFq YXgoeworICAgIHR5cGU6ICdQT1NUJywKKyAgICBkYXRhOiBKU09OLnN0cmlu Z2lmeShwb3N0X2RhdGEpLAorICAgIHVybDogZmlsZUNvbm5lY3RvciwKKyAg ICBkYXRhVHlwZTogJ2pzb24nLAorICAgIGNvbnRlbnRUeXBlOiAiYXBwbGlj YXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsCisgICAgYXN5bmM6IGZhbHNl LAorICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApeworICAgICAgZGF0YSA9 IHJlc3AuZGF0YS5yZXN1bHQ7CisgICAgICBpZihkYXRhWydDb2RlJ10gPT09 IDApeworICAgICAgICB2YXIgcHJvcGVydGllcyA9ICcnOworICAgICAgICBp ZihkYXRhWydQcm9wZXJ0aWVzJ11bJ1NpemUnXSB8fCBwYXJzZUludChkYXRh WydQcm9wZXJ0aWVzJ11bJ1NpemUnXSk9PTApIHByb3BlcnRpZXMgKz0gJzxk dD4nICsgbGcuc2l6ZSArICc8L2R0PjxkZD4nICsgZm9ybWF0Qnl0ZXMoZGF0 YVsnUHJvcGVydGllcyddWydTaXplJ10pICsgJzwvZGQ+JzsKKyAgICAgICAg ZGF0YVsnQ2FwYWJpbGl0aWVzJ10gPSBjYXBhYmlsaXRpZXM7CisgICAgICAg IGJpbmRUb29sYmFyKGRhdGEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg YWxlcnRpZnkuZXJyb3IoZGF0YVsnRXJyb3InXSk7CisgICAgICB9CisgICAg fQorICB9KTsKK307CisKKy8qCisgKiBSZXRyaWV2ZXMgZGF0YSBmb3IgYWxs IGl0ZW1zIHdpdGhpbiB0aGUgZ2l2ZW4gZm9sZGVyIGFuZAorICogY3JlYXRl cyBhIGxpc3Qgdmlldy4KKyAqLwordmFyIGdldEZvbGRlckluZm8gPSBmdW5j dGlvbihwYXRoLCBmaWxlX3R5cGU9JycpeworICAvLyBVcGRhdGUgbG9jYXRp b24gZm9yIHN0YXR1cywgdXBsb2FkLCAmIG5ldyBmb2xkZXIgZnVuY3Rpb25z LgorICBzZXRVcGxvYWRlcihwYXRoKTsKKworICAvLyBzZXQgZGVmYXVsdCBz ZWxlY3RlZCBmaWxlIHR5cGUKKyAgaWYgKGZpbGVfdHlwZSA9PT0gJycpCisg ICAgdmFyIGZpbGVfdHlwZSA9ICQoJy5jaGFuZ2VfZmlsZV90eXBlcyBzZWxl Y3QnKS52YWwoKTsKKworICAvLyBuYXZpZ2F0ZSB0byBkaXJlY3Rvcnkgb3Ig cGF0aCB3aGVuIGNsaWNrZWQgb24gYnJlYWRjcnVtYnMgCisgICQoJy5maWxl X21hbmFnZXIgYS5icmVhZGNydW1icycpLnVuYmluZCgpLm9uKCdjbGljaycs IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXRoID0gJCh0aGlzKS5hdHRyKCdk YXRhLXBhdGgnKSwKKyAgICAgICAgY3VycmVudF9kaXIgPSAkKHRoaXMpLmh0 bWwoKSwKKyAgICAgICAgbW92ZV90byA9IHBhdGguc3Vic3RyaW5nKDAsIHBh dGgubGFzdEluZGV4T2YoY3VycmVudF9kaXIpKStjdXJyZW50X2RpcjsKKyAg ICBnZXRGb2xkZXJJbmZvKG1vdmVfdG8pOworICAgIGVuYWJfZGlzX2xldmVs X3VwKCk7CisgIH0pOworCisgICAvLyBoaWRlIHNlbGVjdCBmaWxlIGlmIHdl IGFyZSBsaXN0aW5nIGRyaXZlcyBpbiB3aW5kb3dzLgorICAgaWYgKGhpZGVC dXR0b25zKCkpIHsKKyAgICAgJCgiLmFsbG93ZWRfZmlsZV90eXBlcyAuY2hh bmdlX2ZpbGVfdHlwZXMiKS5oaWRlKCk7CisgICB9CisgICBlbHNlIHsKKyAg ICAgJCgiLmFsbG93ZWRfZmlsZV90eXBlcyAuY2hhbmdlX2ZpbGVfdHlwZXMi KS5zaG93KCk7CisgICB9CisKKyAgLy8gRGlzcGxheSBhbiBhY3Rpdml0eSBp bmRpY2F0b3IuCisgICQoJy5maWxlaW5mbycpLmZpbmQoJ3NwYW4uYWN0aXZp dHknKS5odG1sKCI8aW1nIHNyYz0ne3sgdXJsX2ZvcignYnJvd3Nlci5zdGF0 aWMnLCBmaWxlbmFtZT0nY3NzL2FjaVRyZWUvaW1hZ2UvbG9hZC1yb290Lmdp ZicpIH19Jz4iKTsKKworICAvLyBSZXRyaWV2ZSB0aGUgZGF0YSBhbmQgZ2Vu ZXJhdGUgdGhlIG1hcmt1cC4KKyAgdmFyIGQgPSBuZXcgRGF0ZSgpOyAvLyB0 byBwcmV2ZW50IElFIGNhY2hlIGlzc3VlcworICBpZiAoJC51cmxQYXJhbSgn dHlwZScpKSB1cmwgKz0gJyZ0eXBlPScgKyAkLnVybFBhcmFtKCd0eXBlJyk7 CisKKyAgdmFyIHBvc3RfZGF0YSA9IHsKKyAgICAncGF0aCc6IHBhdGgsCisg ICAgJ21vZGUnOiAnZ2V0Zm9sZGVyJywKKyAgICAnZmlsZV90eXBlJzogZmls ZV90eXBlIHx8ICIqIgorICB9OworCisgICQuYWpheCh7CisgICAgdHlwZTog J1BPU1QnLAorICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RfZGF0YSks CisgICAgdXJsOiBmaWxlQ29ubmVjdG9yLAorICAgIGRhdGFUeXBlOiAnanNv bicsCisgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFy c2V0PXV0Zi04IiwKKyAgICBhc3luYzogZmFsc2UsCisgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzcCl7CisgICAgdmFyIHJlc3VsdCA9ICcnOworICAgIGRh dGEgPSByZXNwLmRhdGEucmVzdWx0OworCisgICAgLy8gaGlkZSBhY3Rpdml0 eSBpbmRpY2F0b3IKKyAgICAkKCcuZmlsZWluZm8nKS5maW5kKCdzcGFuLmFj dGl2aXR5JykuaGlkZSgpOworICAgIGlmKGRhdGEuQ29kZSA9PT0gMCkgewor ICAgICAgYWxlcnRpZnkuZXJyb3IoZGF0YS5lcnJfbXNnKTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisKKyAgICAvLyBnZW5lcmF0ZSBIVE1MIGZvciBmaWxl cy9mb2xkZXIgYW5kIHJlbmRlciBpbnRvIGNvbnRhaW5lcgorICAgIGlmKGRh dGEpeworICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09 ICdncmlkJykgeworICAgICAgICByZXN1bHQgKz0gJzx1bCBpZD0iY29udGVu dHMiIGNsYXNzPSJncmlkIj4nOworICAgICAgICBmb3Ioa2V5IGluIGRhdGEp IHsKKyAgICAgICAgICB2YXIgcHJvcHMgPSBkYXRhW2tleV1bJ1Byb3BlcnRp ZXMnXSwKKyAgICAgICAgICAgICAgY2FwX2NsYXNzZXMgPSAiIjsKKyAgICAg ICAgICBmb3IgKGNhcCBpbiBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgICAg IGlmIChoYXNfY2FwYWJpbGl0eShkYXRhW2tleV0sIGNhcGFiaWxpdGllc1tj YXBdKSkgeworICAgICAgICAgICAgICBjYXBfY2xhc3NlcyArPSAiY2FwXyIg KyBjYXBhYmlsaXRpZXNbY2FwXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisKKyAgICAgICAgICBkYXRhW2tleV1bJ0NhcGFiaWxpdGllcyddID0g Y2FwYWJpbGl0aWVzOworICAgICAgICAgIGJpbmRUb29sYmFyKGRhdGFba2V5 XSk7CisKKyAgICAgICAgICB2YXIgY2xhc3NfdHlwZTsKKyAgICAgICAgICBp ZihkYXRhW2tleV1bJ2ZpbGVfdHlwZSddID09ICdkaXInKSB7CisgICAgICAg ICAgICBjbGFzc190eXBlID0gJ2ZhIGZhLWZvbGRlci1vcGVuIGZtX2ZvbGRl cic7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoZGF0YVtrZXld WydmaWxlX3R5cGUnXSA9PSAnZHJpdmUnKSB7CisgICAgICAgICAgICBjbGFz c190eXBlID0gJ2ZhIGZhLWhkZC1vIGZtX2RyaXZlJzsKKyAgICAgICAgICB9 CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbGFzc190eXBlID0g J2ZhIGZhLWZpbGUtdGV4dCBmbV9maWxlJzsKKyAgICAgICAgICB9CisKKyAg ICAgICAgICB2YXIgZm1fZmlsZW5hbWUgPSBkYXRhW2tleV1bJ0ZpbGVuYW1l J107CisgICAgICAgICAgaWYgKGZtX2ZpbGVuYW1lLmxlbmd0aCA+IDE1ICkg eworICAgICAgICAgICAgICBmbV9maWxlbmFtZSA9IGRhdGFba2V5XVsnRmls ZW5hbWUnXS5zdWJzdHIoMCwgMTApICsnLi4uJzsKKyAgICAgICAgICB9CisK KyAgICAgICAgICB2YXIgZmlsZV9uYW1lX29yaWdpbmFsID0gZW5jb2RlVVJJ KGRhdGFba2V5XVsnRmlsZW5hbWUnXSk7CisgICAgICAgICAgdmFyIGZpbGVf cGF0aF9vcmlnID0gZW5jb2RlVVJJKGRhdGFba2V5XVsnUGF0aCddKTsKKyAg ICAgICAgICByZXN1bHQgKz0gJzxsaSBjbGFzcz0iJyArIGNhcF9jbGFzc2Vz ICsgJyI+PGRpdiBjbGFzcz0iY2xpcCI+PHNwYW4gZGF0YS1hbHQ9IicgKyBm aWxlX3BhdGhfb3JpZyArICciIGNsYXNzPSInICsgY2xhc3NfdHlwZSArICci Pjwvc3Bhbj4nOworICAgICAgICAgIGlmIChkYXRhW2tleV1bJ1Byb3RlY3Rl ZCddID09IDEpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHNwYW4gY2xh c3M9ImZhIGZhLWxvY2sgZm1fbG9ja19pY29uIiBkYXRhLXByb3RlY3RlZD0i cHJvdGVjdGVkIj48L3NwYW4+JzsKKyAgICAgICAgICB9CisgICAgICAgICAg cmVzdWx0ICs9ICc8L2Rpdj4nOworICAgICAgICAgIGlmKCFoYXNfY2FwYWJp bGl0eShkYXRhW2tleV0sICdyZW5hbWUnKSkKKyAgICAgICAgICAgIHJlc3Vs dCArPSAnPHNwYW4+JyArIGZtX2ZpbGVuYW1lICsgJzwvc3Bhbj4nOworICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHA+PGlucHV0 IHR5cGU9InRleHQiIGNsYXNzPSJmbV9maWxlX3JlbmFtZSIgLz48c3BhbiB0 aXRsZT0iJytmaWxlX25hbWVfb3JpZ2luYWwrJyI+JyArIGZtX2ZpbGVuYW1l ICsgJzwvc3Bhbj48L3A+JzsKKyAgICAgICAgICBpZihwcm9wc1snV2lkdGgn XSAmJiBwcm9wc1snV2lkdGgnXSAhPSAnJykgcmVzdWx0ICs9ICc8c3BhbiBj bGFzcz0ibWV0YSBkaW1lbnNpb25zIj4nICsgcHJvcHNbJ1dpZHRoJ10gKyAn eCcgKyBwcm9wc1snSGVpZ2h0J10gKyAnPC9zcGFuPic7CisgICAgICAgICAg aWYocHJvcHNbJ1NpemUnXSAmJiBwcm9wc1snU2l6ZSddICE9ICcnKSByZXN1 bHQgKz0gJzxzcGFuIGNsYXNzPSJtZXRhIHNpemUiPicgKyBwcm9wc1snU2l6 ZSddICsgJzwvc3Bhbj4nOworICAgICAgICAgIGlmKHByb3BzWydEYXRlIENy ZWF0ZWQnXSAmJiBwcm9wc1snRGF0ZSBDcmVhdGVkJ10gIT0gJycpIHJlc3Vs dCArPSAnPHNwYW4gY2xhc3M9Im1ldGEgY3JlYXRlZCI+JyArIHByb3BzWydE YXRlIENyZWF0ZWQnXSArICc8L3NwYW4+JzsKKyAgICAgICAgICBpZihwcm9w c1snRGF0ZSBNb2RpZmllZCddICYmIHByb3BzWydEYXRlIE1vZGlmaWVkJ10g IT0gJycpIHJlc3VsdCArPSAnPHNwYW4gY2xhc3M9Im1ldGEgbW9kaWZpZWQi PicgKyBwcm9wc1snRGF0ZSBNb2RpZmllZCddICsgJzwvc3Bhbj4nOworICAg ICAgICAgIHJlc3VsdCArPSAnPC9saT4nOworICAgICAgICB9CisKKyAgICAg ICAgcmVzdWx0ICs9ICc8L3VsPic7CisgICAgICB9IGVsc2UgeworICAgICAg ICByZXN1bHQgKz0gJzx0YWJsZSBpZD0iY29udGVudHMiIGNsYXNzPSJsaXN0 Ij4nOworICAgICAgICByZXN1bHQgKz0gJzx0aGVhZD48dHI+PHRoIGNsYXNz PSJoZWFkZXJTb3J0RG93biI+PHNwYW4+JyArIGxnLm5hbWUgKyAnPC9zcGFu PjwvdGg+PHRoPjxzcGFuPicgKyBsZy5zaXplICsgJzwvc3Bhbj48L3RoPjx0 aD48c3Bhbj4nICsgbGcubW9kaWZpZWQgKyAnPC9zcGFuPjwvdGg+PC90cj48 L3RoZWFkPic7CisgICAgICAgIHJlc3VsdCArPSAnPHRib2R5Pic7CisKKyAg ICAgICAgZm9yKGtleSBpbiBkYXRhKXsKKyAgICAgICAgICB2YXIgcGF0aCA9 IGVuY29kZVVSSShkYXRhW2tleV1bJ1BhdGgnXSksCisgICAgICAgICAgICAg IHByb3BzID0gZGF0YVtrZXldWydQcm9wZXJ0aWVzJ10sCisgICAgICAgICAg ICAgIGNhcF9jbGFzc2VzID0gIiI7CisgICAgICAgICAgZm9yIChjYXAgaW4g Y2FwYWJpbGl0aWVzKSB7CisgICAgICAgICAgICBpZiAoaGFzX2NhcGFiaWxp dHkoZGF0YVtrZXldLCBjYXBhYmlsaXRpZXNbY2FwXSkpIHsKKyAgICAgICAg ICAgICAgY2FwX2NsYXNzZXMgKz0gIiBjYXBfIiArIGNhcGFiaWxpdGllc1tj YXBdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAg IGRhdGFba2V5XVsnQ2FwYWJpbGl0aWVzJ10gPSBjYXBhYmlsaXRpZXM7Cisg ICAgICAgICAgYmluZFRvb2xiYXIoZGF0YVtrZXldKTsKKworICAgICAgICAg IHZhciBjbGFzc190eXBlOworICAgICAgICAgIGlmKGRhdGFba2V5XVsnZmls ZV90eXBlJ10gPT0gJ2RpcicpIHsKKyAgICAgICAgICAgIGNsYXNzX3R5cGUg PSAnZmEgZmEtZm9sZGVyLW9wZW4gdGJsX2ZvbGRlcic7CisgICAgICAgICAg fQorICAgICAgICAgIGVsc2UgaWYoZGF0YVtrZXldWydmaWxlX3R5cGUnXSA9 PSAnZHJpdmUnKSB7CisgICAgICAgICAgICBjbGFzc190eXBlID0gJ2ZhIGZh LWhkZC1vIHRibF9kcml2ZSc7CisgICAgICAgICAgfQorICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgY2xhc3NfdHlwZSA9ICdmYSBmYS1maWxlLXRl eHQgdGJsX2ZpbGUnCisgICAgICAgICAgfQorCisgICAgICAgICAgdmFyIGZp bGVfbmFtZV9vcmlnaW5hbCA9IGVuY29kZVVSSShkYXRhW2tleV1bJ0ZpbGVu YW1lJ10pOworICAgICAgICAgIHJlc3VsdCArPSAnPHRyIGNsYXNzPSInICsg Y2FwX2NsYXNzZXMgKyAnIj4nOworCisgICAgICAgICAgdmFyIGZtX2ZpbGVu YW1lID0gZGF0YVtrZXldWydGaWxlbmFtZSddOworICAgICAgICAgIGlmIChm bV9maWxlbmFtZS5sZW5ndGggPiAxNSApIHsKKyAgICAgICAgICAgICAgZm1f ZmlsZW5hbWUgPSBkYXRhW2tleV1bJ0ZpbGVuYW1lJ10uc3Vic3RyKDAsIDEw KSArJy4uLic7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmVzdWx0ICs9 ICc8dGQgdGl0bGU9IicgKyBwYXRoICsgJyIgY2xhc3M9IicrY2xhc3NfdHlw ZSsnIj4nOworICAgICAgICAgIGlmKGRhdGFba2V5XVsnUHJvdGVjdGVkJ10g PT0gMSkgeworICAgICAgICAgICAgcmVzdWx0ICs9ICc8aSBjbGFzcz0iZmEg ZmEtbG9jayB0YmxfbG9ja19pY29uIiBkYXRhLXByb3RlY3RlZD0icHJvdGVj dGVkIj48L2k+JzsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoIWhhc19j YXBhYmlsaXR5KGRhdGFba2V5XSwgJ3JlbmFtZScpKQorICAgICAgICAgICAg cmVzdWx0ICs9ICc8c3BhbiB0aXRsZT0iJyArIGRhdGFba2V5XVsnRmlsZW5h bWUnXSArICciPicgKyBmbV9maWxlbmFtZSArICc8L3NwYW4+PC90ZD4nOwor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHA+PGlu cHV0IHR5cGU9InRleHQiIGNsYXNzPSJmbV9maWxlX3JlbmFtZSIgLz48c3Bh biB0aXRsZT0iJyArIGZpbGVfbmFtZV9vcmlnaW5hbCArICciPicgKyBmbV9m aWxlbmFtZSArICc8L3NwYW4+PC9wPjwvdGQ+JzsKKworICAgICAgICAgIGlm KHByb3BzWydTaXplJ10gJiYgcHJvcHNbJ1NpemUnXSAhPSAnJyl7CisgICAg ICAgICAgICByZXN1bHQgKz0gJzx0ZD48YWJiciB0aXRsZT0iJyArIHByb3Bz WydTaXplJ10gKyAnIj4nICsgcHJvcHNbJ1NpemUnXSArICc8L2FiYnI+PC90 ZD4nOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQg Kz0gJzx0ZD48L3RkPic7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYo cHJvcHNbJ0RhdGUgTW9kaWZpZWQnXSAmJiBwcm9wc1snRGF0ZSBNb2RpZmll ZCddICE9ICcnKXsKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHRkPicgKyBw cm9wc1snRGF0ZSBNb2RpZmllZCddICsgJzwvdGQ+JzsKKyAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ICs9ICc8dGQ+PC90ZD4nOwor ICAgICAgICAgIH0KKworICAgICAgICAgIHJlc3VsdCArPSAnPC90cj4nOwor ICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ICs9ICc8L3Rib2R5Pic7Cisg ICAgICAgIHJlc3VsdCArPSAnPC90YWJsZT4nOworICAgICAgfQorICAgIH0g ZWxzZSB7CisgICAgICByZXN1bHQgKz0gJzxoMT4nICsgbGcuY291bGRfbm90 X3JldHJpZXZlX2ZvbGRlciArICc8L2gxPic7CisgICAgfQorCisgICAgLy8g QWRkIHRoZSBuZXcgbWFya3VwIHRvIHRoZSBET00uCisgICAgJCgnLmZpbGVp bmZvIC5maWxlX2xpc3RpbmcnKS5odG1sKHJlc3VsdCk7CisKKyAgICAvLyBy ZW5hbWUgZmlsZS9mb2xkZXIKKyAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRv bi5yZW5hbWUnKS51bmJpbmQoKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpewor ICAgICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09ICdncmlk Jyl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIHZh ciAkdGhpcyA9ICQoJy5maWxlX21hbmFnZXInKS5maW5kKCcjY29udGVudHMg bGkuc2VsZWN0ZWQgcCcpLAorICAgICAgICAgICAgb3JpZ192YWx1ZSA9IGRl Y29kZVVSSSgkdGhpcy5maW5kKCdzcGFuJykuYXR0cigndGl0bGUnKSksCisg ICAgICAgICAgICBuZXd2YWx1ZSA9IG9yaWdfdmFsdWUuc3Vic3RyaW5nKDAs IG9yaWdfdmFsdWUuaW5kZXhPZignLicpKTsKKworICAgICAgICBpZiAobmV3 dmFsdWUgPT09ICcnKQorICAgICAgICAgIG5ld3ZhbHVlID0gZGVjb2RlVVJJ KG9yaWdfdmFsdWUpOworCisgICAgICAgICR0aGlzLmZpbmQoJ2lucHV0Jyku dG9nZ2xlKCkudmFsKG5ld3ZhbHVlKS5mb2N1cygpOworICAgICAgICAkdGhp cy5maW5kKCdzcGFuJykudG9nZ2xlKCk7CisKKyAgICAgICAgLy8gUmVuYW1l IGZvbGRlci9maWxlIG9uIHByZXNzaW5nIGVudGVyIGtleQorICAgICAgICAk KCcuZmlsZV9tYW5hZ2VyJykudW5iaW5kKCkub24oJ2tleXVwJywgZnVuY3Rp b24oZSkgeworICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIHsKKyAg ICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgICAk KCcuZmlsZWluZm8gI2NvbnRlbnRzIGxpLnNlbGVjdGVkIHAnKS5maW5kKCdp bnB1dCcpLnRyaWdnZXIoJ2JsdXInKTsKKyAgICAgICAgICB9CisgICAgICAg IH0pOworCisgICAgICB9CisgICAgICBlbHNlIGlmKCQoJy5maWxlaW5mbycp LmRhdGEoJ3ZpZXcnKSA9PSAnbGlzdCcpeworICAgICAgICBlLnN0b3BQcm9w YWdhdGlvbigpOworICAgICAgICB2YXIgJHRoaXMgPSAkKCcuZmlsZWluZm8n KS5maW5kKCd0YWJsZSNjb250ZW50cyB0Ym9keSB0ci5zZWxlY3RlZCB0ZDpm aXJzdC1jaGlsZCBwJyksCisgICAgICAgICAgICBvcmlnX3ZhbHVlID0gZGVj b2RlVVJJKCR0aGlzLmZpbmQoJ3NwYW4nKS5odG1sKCkpLAorICAgICAgICAg ICAgbmV3dmFsdWUgPSBvcmlnX3ZhbHVlLnN1YnN0cmluZygwLCBvcmlnX3Zh bHVlLmluZGV4T2YoJy4nKSk7CisgICAgICAgIGlmIChuZXd2YWx1ZSA9PT0g JycpCisgICAgICAgICAgbmV3dmFsdWUgPSBvcmlnX3ZhbHVlOworCisgICAg ICAgICR0aGlzLmZpbmQoJ2lucHV0JykudG9nZ2xlKCkudmFsKG5ld3ZhbHVl KS5mb2N1cygpOworICAgICAgICAkdGhpcy5maW5kKCdzcGFuJykudG9nZ2xl KCk7CisKKyAgICAgICAgLy8gUmVuYW1lIGZvbGRlci9maWxlIG9uIHByZXNz aW5nIGVudGVyIGtleQorICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyJykudW5i aW5kKCkub24oJ2tleXVwJywgZnVuY3Rpb24oZSkgeworICAgICAgICAgIGlm IChlLmtleUNvZGUgPT0gMTMpIHsKKyAgICAgICAgICAgIGUuc3RvcFByb3Bh Z2F0aW9uKCk7CisgICAgICAgICAgICAkKCcuZmlsZWluZm8gdGFibGUjY29u dGVudHMgdHIuc2VsZWN0ZWQgdGQgcCcpLmZpbmQoJ2lucHV0JykudHJpZ2dl cignYmx1cicpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9 CisgICAgfSk7CisKKyAgICAkKCcuZmlsZWluZm8gI2NvbnRlbnRzIGxpIHAn KS5vbignZGJsY2xpY2snLGZ1bmN0aW9uKGUpeworICAgICAgZS5zdG9wUHJv cGFnYXRpb24oKTsKKyAgICAgICR0aGlzID0gJCh0aGlzKTsKKyAgICAgIHZh ciBvcmlnX3ZhbHVlID0gZGVjb2RlVVJJKCR0aGlzLmZpbmQoJ3NwYW4nKS5h dHRyKCd0aXRsZScpKSwKKyAgICAgICAgICBuZXd2YWx1ZSA9IG9yaWdfdmFs dWUuc3Vic3RyaW5nKDAsIG9yaWdfdmFsdWUuaW5kZXhPZignLicpKTsKKwor ICAgICAgaWYgKG5ld3ZhbHVlID09PSAnJykKKyAgICAgICAgbmV3dmFsdWUg PSBvcmlnX3ZhbHVlOworCisgICAgICAkdGhpcy5maW5kKCdpbnB1dCcpLnRv Z2dsZSgpLnZhbChuZXd2YWx1ZSkuZm9jdXMoKTsKKyAgICAgICR0aGlzLmZp bmQoJ3NwYW4nKS50b2dnbGUoKTsKKworICAgICAgLy8gUmVuYW1lIGZvbGRl ci9maWxlIG9uIHByZXNzaW5nIGVudGVyIGtleQorICAgICAgJCgnLmZpbGVf bWFuYWdlcicpLnVuYmluZCgpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHsK KyAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgeworICAgICAgICAgIGUu c3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgJHRoaXMuZmluZCgnaW5w dXQnKS50cmlnZ2VyKCdibHVyJyk7CisgICAgICAgIH0KKyAgICAgIH0pOwor ICAgIH0pOworCisgICAgLy8gUmVuYW1lIFVJIGhhbmRsaW5nCisgICAgJCgn LmZpbGVpbmZvICNjb250ZW50cyBsaSBwJykub24oJ2JsdXIgZGJsY2xpY2sn LCdpbnB1dCcsIGZ1bmN0aW9uKGUpeworICAgICAgZS5zdG9wUHJvcGFnYXRp b24oKTsKKyAgICAgIHZhciBvbGRfbmFtZSA9IGRlY29kZVVSSSgkKHRoaXMp LnNpYmxpbmdzKCdzcGFuJykuYXR0cigndGl0bGUnKSksCisgICAgICAgICAg bmV3dmFsdWUgPSBvbGRfbmFtZS5zdWJzdHJpbmcoMCwgb2xkX25hbWUuaW5k ZXhPZignLicpKTsKKyAgICAgICAgICBsYXN0ID0gZ2V0RmlsZUV4dGVuc2lv bihvbGRfbmFtZSk7CisgICAgICBpZihvbGRfbmFtZS5pbmRleE9mKCcuJykg PT0gMCkKKyAgICAgICAgbGFzdCA9ICcnCisKKyAgICAgIGlmIChuZXd2YWx1 ZSA9PSAnJykKKyAgICAgICAgbmV3dmFsdWUgPSBkZWNvZGVVUkkob2xkX25h bWUpOworCisgICAgICBpZihlLnR5cGU9PSJrZXlkb3duIikKKyAgICAgIHsK KyAgICAgICAgaWYoZS53aGljaD09MTMpCisgICAgICAgIHsKKyAgICAgICAg ICB2YXIgZnVsbF9uYW1lID0gZGVjb2RlVVJJKCQodGhpcykudmFsKCkpICsg KGxhc3QgIT09ICcnID8gJy4nICsgbGFzdDogJycpOworICAgICAgICAgICQo dGhpcykudG9nZ2xlKCk7CisgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygn c3BhbicpLnRvZ2dsZSgpLmh0bWwoZnVsbF9uYW1lKTsKKworICAgICAgICAg IHZhciBuZXdfbmFtZSA9IGRlY29kZVVSSSgkKHRoaXMpLnZhbCgpKSwKKyAg ICAgICAgICAgICAgcGF0aCA9IGRlY29kZVVSSSgkKHRoaXMpLnBhcmVudCgp LnBhcmVudCgpLmZpbmQoJ3NwYW4nKS5hdHRyKCdkYXRhLWFsdCcpKTsKKwor ICAgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgICAgJ0ZpbGVuYW1l Jzogb2xkX25hbWUsCisgICAgICAgICAgICAnUGF0aCc6IHBhdGgsCisgICAg ICAgICAgICAnTmV3RmlsZW5hbWUnOiBuZXdfbmFtZQorICAgICAgICAgIH07 CisKKyAgICAgICAgICBpZiAobmV3dmFsdWUgIT09IG5ld19uYW1lKSB7Cisg ICAgICAgICAgICByZW5hbWVJdGVtKGRhdGEpOworICAgICAgICAgICAgdmFy IHBhcmVudCA9ICQoJy5jdXJyZW50cGF0aCcpLnZhbCgpOworICAgICAgICAg ICAgZ2V0Rm9sZGVySW5mbyhwYXJlbnQpOworICAgICAgICAgIH0KKyAgICAg ICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB9CisgICAgICAg IGlmKGUud2hpY2g9PTM4IHx8IGUud2hpY2g9PTQwIHx8IGUud2hpY2g9PTM3 IHx8IGUud2hpY2g9PTM5IHx8IGUua2V5Q29kZSA9PSAzMikKKyAgICAgICAg eworICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0K KyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZS50eXBlPT0iZm9jdXNvdXQiKQor ICAgICAgeworICAgICAgICBpZigkKHRoaXMpLmNzcygnZGlzcGxheScpPT0i aW5saW5lLWJsb2NrIikKKyAgICAgICAgeworICAgICAgICAgIHZhciBmdWxs X25hbWUgPSBkZWNvZGVVUkkoJCh0aGlzKS52YWwoKSkgKyAobGFzdCAhPT0g Jyc/ICcuJyArIGxhc3Q6ICcnKTsKKyAgICAgICAgICAkKHRoaXMpLnRvZ2ds ZSgpOworICAgICAgICAgICQodGhpcykuc2libGluZ3MoJ3NwYW4nKS50b2dn bGUoKS5odG1sKGZ1bGxfbmFtZSk7CisKKyAgICAgICAgICB2YXIgbmV3X25h bWUgPSBkZWNvZGVVUkkoJCh0aGlzKS52YWwoKSksCisgICAgICAgICAgICAg IHBhdGggPSBkZWNvZGVVUkkoJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5m aW5kKCdzcGFuJykuYXR0cignZGF0YS1hbHQnKSk7CisKKyAgICAgICAgICB2 YXIgZGF0YSA9IHsKKyAgICAgICAgICAgICdGaWxlbmFtZSc6IG9sZF9uYW1l LAorICAgICAgICAgICAgJ1BhdGgnOiBwYXRoLAorICAgICAgICAgICAgJ05l d0ZpbGVuYW1lJzogbmV3X25hbWUKKyAgICAgICAgICB9OworCisgICAgICAg ICAgaWYgKG5ld3ZhbHVlICE9PSBuZXdfbmFtZSkgeworICAgICAgICAgICAg cmVuYW1lSXRlbShkYXRhKTsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSAk KCcuY3VycmVudHBhdGgnKS52YWwoKTsKKyAgICAgICAgICAgIGdldEZvbGRl ckluZm8ocGFyZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZS5zdG9wUHJvcGFn YXRpb24oKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgICQoJy5maWxlaW5m byB0YWJsZSNjb250ZW50cyB0ciB0ZCBwJykub24oJ2RibGNsaWNrJyxmdW5j dGlvbihlKXsKKyAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAv LyBQcm9tcHQgdG8gcmVuYW1lIGZpbGUvZm9sZGVyCisgICAgICAkdGhpcyA9 ICQodGhpcyk7CisgICAgICB2YXIgb3JpZ192YWx1ZSA9IGRlY29kZVVSSSgk dGhpcy5maW5kKCdzcGFuJykuYXR0cigndGl0bGUnKSksCisgICAgICAgICAg bmV3dmFsdWUgPSBvcmlnX3ZhbHVlLnN1YnN0cmluZygwLCBvcmlnX3ZhbHVl LmluZGV4T2YoJy4nKSk7CisKKyAgICAgIGlmIChuZXd2YWx1ZSA9PT0gJycp CisgICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1ZTsKKworICAgICAgJHRo aXMuZmluZCgnaW5wdXQnKS50b2dnbGUoKS52YWwobmV3dmFsdWUpLmZvY3Vz KCk7CisgICAgICAkdGhpcy5maW5kKCdzcGFuJykudG9nZ2xlKCk7CisKKyAg ICAgIC8vIFJlbmFtZSBmb2xkZXIvZmlsZSBvbiBwcmVzc2luZyBlbnRlciBr ZXkKKyAgICAgICQoJy5maWxlX21hbmFnZXInKS51bmJpbmQoKS5vbigna2V5 dXAnLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlLmtleUNvZGUgPT0g MTMpIHsKKyAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAg ICAgICR0aGlzLmZpbmQoJ2lucHV0JykudHJpZ2dlcignYmx1cicpOworICAg ICAgICB9CisgICAgICB9KTsKKyAgICB9KTsKKworICAgICQoJy5maWxlaW5m byB0YWJsZSNjb250ZW50cyB0ciB0ZCBwJykub24oJ2JsdXIgZGJsY2xpY2sn LCdpbnB1dCcsZnVuY3Rpb24oZSl7CisgICAgICB2YXIgb2xkX25hbWUgPSBk ZWNvZGVVUkkoJCh0aGlzKS5zaWJsaW5ncygnc3BhbicpLmF0dHIoJ3RpdGxl JykpLAorICAgICAgICAgIG5ld3ZhbHVlID0gb2xkX25hbWUuc3Vic3RyaW5n KDAsIG9sZF9uYW1lLmluZGV4T2YoJy4nKSk7CisgICAgICAgICAgbGFzdCA9 IGdldEZpbGVFeHRlbnNpb24ob2xkX25hbWUpOworICAgICAgaWYob2xkX25h bWUuaW5kZXhPZignLicpID09IDApCisgICAgICAgIGxhc3QgPSAnJworCisg ICAgICBpZiAobmV3dmFsdWUgPT0gJycpCisgICAgICAgIG5ld3ZhbHVlID0g b2xkX25hbWU7CisKKyAgICAgIGlmKGUudHlwZT09ImZvY3Vzb3V0IikKKyAg ICAgIHsKKyAgICAgICAgaWYoJCh0aGlzKS5jc3MoJ2Rpc3BsYXknKT09Imlu bGluZS1ibG9jayIpCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgZnVsbF9u YW1lID0gZGVjb2RlVVJJKCQodGhpcykudmFsKCkpICsgKGxhc3QgIT09ICcn PyAnLicgKyBsYXN0OiAnJyk7CisgICAgICAgICAgJCh0aGlzKS50b2dnbGUo KTsKKyAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCdzcGFuJykudG9nZ2xl KCkuaHRtbChmdWxsX25hbWUpOworCisgICAgICAgICAgdmFyIG5ld19uYW1l ID0gZGVjb2RlVVJJKCQodGhpcykudmFsKCkpLAorICAgICAgICAgICAgICBw YXRoID0gZGVjb2RlVVJJKCQodGhpcykucGFyZW50KCkucGFyZW50KCkuYXR0 cigndGl0bGUnKSk7CisKKyAgICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAg ICAgICAgICdGaWxlbmFtZSc6IG9sZF9uYW1lLAorICAgICAgICAgICAgJ1Bh dGgnOiBwYXRoLAorICAgICAgICAgICAgJ05ld0ZpbGVuYW1lJzogbmV3X25h bWUKKyAgICAgICAgICB9OworCisgICAgICAgICAgaWYgKG5ld3ZhbHVlICE9 PSBuZXdfbmFtZSkgeworICAgICAgICAgICAgcmVuYW1lSXRlbShkYXRhKTsK KyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBwYXRoLnNwbGl0KCcvJykucmV2 ZXJzZSgpLnNsaWNlKDIpLnJldmVyc2UoKS5qb2luKCcvJykgKyAnLyc7Cisg ICAgICAgICAgICBnZXRGb2xkZXJJbmZvKHBhcmVudCk7CisgICAgICAgICAg fQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7Cisg ICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICB9CisgICAgfSk7 CisKKyAgICAvKgorICAgICAqIEJpbmQgY2xpY2sgZXZlbnRzCisgICAgICog U2VsZWN0IGl0ZW1zIC0gYWZvbGRlciBkYmxjbGljaworICAgICAqLworICAg IGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpewor ICAgICAgLy8gR2V0IGludG8gZm9sZGVyIG9uIGRibGNsaWNrCisgICAgICAk KCcuZmlsZWluZm8nKS5maW5kKCcjY29udGVudHMgbGknKS5kYmxjbGljayhm dW5jdGlvbihlKXsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKwor ICAgICAgICAvLyBFbmFibGUvRGlzYWJsZSBsZXZlbCB1cCBidXR0b24KKyAg ICAgICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKKyAgICAgICAgdmFyIHBhdGgg PSBkZWNvZGVVUkkoJCh0aGlzKS5maW5kKCdzcGFuJykuYXR0cignZGF0YS1h bHQnKSk7CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoIi8iKSA9PSBw YXRoLmxlbmd0aCAtIDEpeworICAgICAgICAgICQoJy5maWxlX21hbmFnZXJf b2snKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAgICB2YXIgJGNy ZWF0ZV9pbnB1dCA9ICQoJy5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4 dCJdJyk7CisgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uZGVs ZXRlLCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5hdHRyKCdkaXNh YmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgICQoJy5maWxlX21hbmFn ZXIgYnV0dG9uLmRvd25sb2FkJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJs ZWQnKTsKKyAgICAgICAgICBnZXRGb2xkZXJJbmZvKHBhdGgpOworICAgICAg ICAgIGlmICgkY3JlYXRlX2lucHV0Lmxlbmd0aCAhPSAwICYmICRjcmVhdGVf aW5wdXQudmFsKCkgIT0gJycpIHsKKyAgICAgICAgICAgICQoJy5maWxlX21h bmFnZXJfb2snKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ2V0RmlsZUluZm8o cGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICBkYXRhX2Nh cCA9IHt9CisgICAgICBkYXRhX2NhcFsnQ2FwYWJpbGl0aWVzJ10gPSBjYXBh YmlsaXRpZXM7CisgICAgICAkKCcuZmlsZWluZm8nKS5maW5kKCcjY29udGVu dHMgbGknKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICAgICAgZS5zdG9wUHJv cGFnYXRpb24oKTsKKyAgICAgICAgdmFyIHBhdGggPSBkZWNvZGVVUkkoJCh0 aGlzKS5maW5kKCcuY2xpcCBzcGFuJykuYXR0cignZGF0YS1hbHQnKSksCisg ICAgICAgICAgICBmaWxlX25hbWUgPSAkKHRoaXMpLmZpbmQoJ3Agc3Bhbicp LmF0dHIoJ3RpdGxlJyksCisgICAgICAgICAgICBpc19wcm90ZWN0ZWQgPSAk KHRoaXMpLmZpbmQoJy5jbGlwIHNwYW4uZm1fbG9ja19pY29uJykuYXR0cign ZGF0YS1wcm90ZWN0ZWQnKTsKKyAgICAgICAgaWYocGF0aC5sYXN0SW5kZXhP ZignLycpID09IHBhdGgubGVuZ3RoIC0gMSl7CisgICAgICAgICAgaWYoaGFz X2NhcGFiaWxpdHkoZGF0YV9jYXAsICdzZWxlY3RfZm9sZGVyJykgJiYgaXNf cHJvdGVjdGVkID09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgJCh0aGlz KS5wYXJlbnQoKS5maW5kKCdsaS5zZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCdz ZWxlY3RlZCcpOworICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnc2Vs ZWN0ZWQnKTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXJfb2snKS5y ZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAgICAgICQoJy5maWxl X21hbmFnZXIgYnV0dG9uLmRlbGV0ZSwgLmZpbGVfbWFuYWdlciBidXR0b24u cmVuYW1lJykucmVtb3ZlQXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsK KyAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmRvd25sb2Fk JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgICAgICAg IC8vIHNldCBzZWxlY3RlZCBmb2xkZXIgbmFtZSBpbiBicmVhZGNydW1zCisg ICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciBoMScpLmhp ZGUoKTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgI3VwbG9hZGVy IC5zaG93X3NlbGVjdGVkX2ZpbGUnKS5yZW1vdmUoKTsKKyAgICAgICAgICAg ICQoJzxzcGFuIGNsYXNzPSJzaG93X3NlbGVjdGVkX2ZpbGUiPicrcGF0aCsn PC9zcGFuPicpLmFwcGVuZFRvKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciAu ZmlsZW1hbmFnZXItcGF0aC1ncm91cCcpOworICAgICAgICAgIH0KKyAgICAg ICAgICAvL2dldEZvbGRlckluZm8ocGF0aCk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgaWYoaGFzX2NhcGFiaWxpdHkoZGF0YV9jYXAsICdzZWxl Y3RfZmlsZScpICYmIGlzX3Byb3RlY3RlZCA9PSB1bmRlZmluZWQpIHsKKyAg ICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgnbGkuc2VsZWN0ZWQn KS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICQodGhp cykuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAkKCcuZmls ZV9tYW5hZ2VyX29rJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7CisgICAg ICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kZWxldGUsIC5maWxl X21hbmFnZXIgYnV0dG9uLmRvd25sb2FkLCAuZmlsZV9tYW5hZ2VyIGJ1dHRv bi5yZW5hbWUnKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgICAg ICAgLy8gc2V0IHNlbGVjdGVkIGZvbGRlciBuYW1lIGluIGJyZWFkY3J1bXMK KyAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIGgxJyku aGlkZSgpOworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciAjdXBsb2Fk ZXIgLnNob3dfc2VsZWN0ZWRfZmlsZScpLnJlbW92ZSgpOworICAgICAgICAg ICAgJCgnPHNwYW4gY2xhc3M9InNob3dfc2VsZWN0ZWRfZmlsZSI+JytwYXRo Kyc8L3NwYW4+JykuYXBwZW5kVG8oJy5maWxlX21hbmFnZXIgI3VwbG9hZGVy IC5maWxlbWFuYWdlci1wYXRoLWdyb3VwJyk7CisgICAgICAgICAgfQorICAg ICAgICAgIGlmKGNvbmZpZy5vcHRpb25zLmRpYWxvZ190eXBlID09ICdjcmVh dGVfZmlsZScgJiYgaXNfcHJvdGVjdGVkID09IHVuZGVmaW5lZCkgeworICAg ICAgICAgICAgJCgnLmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0n KS52YWwoZmlsZV9uYW1lKTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFn ZXJfb2ssIC5maWxlX21hbmFnZXJfY3JlYXRlJykucmVtb3ZlQ2xhc3MoJ2Rp c2FibGVkJyk7CisgICAgICAgICAgfQorICAgICAgICAgIGdldEZpbGVJbmZv KHBhdGgpOworICAgICAgICB9CisKKyAgICAgIH0pOworICAgIH0gZWxzZSB7 CisgICAgICAkKCcuZmlsZWluZm8gdGFibGUjY29udGVudHMgdGJvZHkgdHIn KS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKKyAgICAgICAgZS5zdG9wUHJv cGFnYXRpb24oKTsKKyAgICAgICAgdmFyIHBhdGggPSBkZWNvZGVVUkkoJCgn dGQ6Zmlyc3QtY2hpbGQnLCB0aGlzKS5hdHRyKCd0aXRsZScpKSwKKyAgICAg ICAgICAgIGZpbGVfbmFtZSA9IGRlY29kZVVSSSgkKCd0ZDpmaXJzdC1jaGls ZCBwIHNwYW4nLCB0aGlzKS5hdHRyKCd0aXRsZScpKSwKKyAgICAgICAgICAg IGlzX3Byb3RlY3RlZCA9ICQoJ3RkOmZpcnN0LWNoaWxkJywgdGhpcykuZmlu ZCgnaS50YmxfbG9ja19pY29uJykuYXR0cignZGF0YS1wcm90ZWN0ZWQnKTsK KyAgICAgICAgaWYocGF0aC5sYXN0SW5kZXhPZignLycpID09IHBhdGgubGVu Z3RoIC0gMSl7CisgICAgICAgICAgaWYoaGFzX2NhcGFiaWxpdHkoZGF0YV9j YXAsICdzZWxlY3RfZm9sZGVyJykgJiYgaXNfcHJvdGVjdGVkID09IHVuZGVm aW5lZCkgeworICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKCd0 ci5zZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworICAgICAg ICAgICAgJCgndGQ6Zmlyc3QtY2hpbGQnLCB0aGlzKS5wYXJlbnQoKS5hZGRD bGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFn ZXJfb2snKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAgICAg ICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmRvd25sb2FkJykuYXR0cignZGlz YWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgICAgICAgICQoJy5maWxlX21h bmFnZXIgYnV0dG9uLmRlbGV0ZSwgLmZpbGVfbWFuYWdlciBidXR0b24ucmVu YW1lJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAgICAgIC8v IHNldCBzZWxlY3RlZCBmb2xkZXIgbmFtZSBpbiBicmVhZGNydW1zCisgICAg ICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciBoMScpLmhpZGUo KTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5z aG93X3NlbGVjdGVkX2ZpbGUnKS5yZW1vdmUoKTsKKyAgICAgICAgICAgICQo JzxzcGFuIGNsYXNzPSJzaG93X3NlbGVjdGVkX2ZpbGUiPicrcGF0aCsnPC9z cGFuPicpLmFwcGVuZFRvKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciAuZmls ZW1hbmFnZXItcGF0aC1ncm91cCcpOworICAgICAgICAgIH0KKyAgICAgICAg ICAvL2dldEZvbGRlckluZm8ocGF0aCk7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgaWYoaGFzX2NhcGFiaWxpdHkoZGF0YV9jYXAsICdzZWxlY3Rf ZmlsZScpICYmIGlzX3Byb3RlY3RlZCA9PSB1bmRlZmluZWQpIHsKKyAgICAg ICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgndHIuc2VsZWN0ZWQnKS5y ZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICQoJ3RkOmZp cnN0LWNoaWxkJywgdGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ3NlbGVjdGVk Jyk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykucmVtb3Zl Q2xhc3MoJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5h Z2VyIGJ1dHRvbi5kZWxldGUsIC5maWxlX21hbmFnZXIgYnV0dG9uLmRvd25s b2FkLCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5yZW1vdmVBdHRy KCdkaXNhYmxlZCcpOworICAgICAgICAgICAgLy8gc2V0IHNlbGVjdGVkIGZv bGRlciBuYW1lIGluIGJyZWFkY3J1bXMKKyAgICAgICAgICAgICQoJy5maWxl X21hbmFnZXIgI3VwbG9hZGVyIGgxJykuaGlkZSgpOworICAgICAgICAgICAg JCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLnNob3dfc2VsZWN0ZWRfZmls ZScpLnJlbW92ZSgpOworICAgICAgICAgICAgJCgnPHNwYW4gY2xhc3M9InNo b3dfc2VsZWN0ZWRfZmlsZSI+JytwYXRoKyc8L3NwYW4+JykuYXBwZW5kVG8o Jy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5maWxlbWFuYWdlci1wYXRoLWdy b3VwJyk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGNvbmZpZy5vcHRp b25zLmRpYWxvZ190eXBlID09ICdjcmVhdGVfZmlsZScgJiYgaXNfcHJvdGVj dGVkID09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgJCgnLmNyZWF0ZV9p bnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0nKS52YWwoZmlsZV9uYW1lKTsKKyAg ICAgICAgICAgICQoJy5maWxlX21hbmFnZXJfb2ssIC5maWxlX21hbmFnZXJf Y3JlYXRlJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7CisgICAgICAgICAg fQorICAgICAgICAgIGdldEZpbGVJbmZvKHBhdGgpOworICAgICAgICB9CisK KworICAgICAgfSk7CisKKyAgICAgICQoJy5maWxlaW5mbyB0YWJsZSNjb250 ZW50cyB0Ym9keSB0cicpLm9uKCdkYmxjbGljaycsIGZ1bmN0aW9uKGUpewor ICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworCisgICAgICAgIC8vIEVu YWJsZS9EaXNhYmxlIGxldmVsIHVwIGJ1dHRvbgorICAgICAgICBlbmFiX2Rp c19sZXZlbF91cCgpOworICAgICAgICB2YXIgcGF0aCA9ICQoJ3RkOmZpcnN0 LWNoaWxkJywgdGhpcykuYXR0cigndGl0bGUnKTsKKyAgICAgICAgaWYocGF0 aC5sYXN0SW5kZXhPZignLycpID09IHBhdGgubGVuZ3RoIC0gMSl7CisgICAg ICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLnJlbW92ZUNsYXNzKCdkaXNh YmxlZCcpOworICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmRv d25sb2FkJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAg ICAgICAkKCcuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kZWxldGUsIC5maWxlX21h bmFnZXIgYnV0dG9uLnJlbmFtZScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2Fi bGVkJyk7CisgICAgICAgICAgZ2V0Rm9sZGVySW5mbyhwYXRoKTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICBnZXRGaWxlSW5mbyhwYXRoKTsKKyAg ICAgICAgfQorICAgICAgfSk7CisKKyAgICB9CisgICB9CisgIH0pOworfTsK KworLy8gRW5hYmxlL0Rpc2FibGUgbGV2ZWwgdXAgYnV0dG9uCit2YXIgZW5h Yl9kaXNfbGV2ZWxfdXAgPSBmdW5jdGlvbigpIHsKKworICAkKCcuZmlsZV9t YW5hZ2VyICN1cGxvYWRlciBoMScpLnNob3coKTsKKyAgJCgnLnNob3dfc2Vs ZWN0ZWRfZmlsZScpLnJlbW92ZSgpOworICBzZXRUaW1lb3V0KGZ1bmN0aW9u KCkgeworICAgIHZhciBiID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCksCisg ICAgICAgICRsZXZlbF91cCA9ICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdi dXR0b24ubGV2ZWwtdXAnKTsKKyAgICAgICAgJGhvbWVfYnRuID0gJCgnLmZp bGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5ob21lJyk7CisgICAgaWYgKGIg PT09IGZpbGVSb290KSB7CisgICAgICAkbGV2ZWxfdXAuYXR0cignZGlzYWJs ZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgICRob21lX2J0bi5hdHRyKCdkaXNh YmxlZCcsICdkaXNhYmxlZCcpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg ICRob21lX2J0bi5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgJGxl dmVsX3VwLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgfQorICB9LCAx MDApOworfQorCisvLyBHZXQgdHJhbnNhY3Rpb24gaWQgdG8gZ2VuZXJhdGUg cmVxdWVzdCB1cmwgYW5kCisvLyB0byBnZW5lcmF0ZSBjb25maWcgZmlsZXMg b24gcnVudGltZQordmFyIHRyYW5zSWQgPSBnZXRUcmFuc0lkKCksCisgICAg dF9pZCA9ICcnOworCitpZiAodHJhbnNJZC5yZWFkeVN0YXRlID09IDQpCisg IHRfcmVzID0gSlNPTi5wYXJzZSh0cmFuc0lkLnJlc3BvbnNlVGV4dCk7Cit0 X2lkID0gdF9yZXMuZGF0YS5maWxlVHJhbnNJZDsKKwordmFyIHJvb3RfdXJs ID0gJ3t7IHVybF9mb3IoImZpbGVfbWFuYWdlci5pbmRleCIpIH19JywKKyAg ICBmaWxlX21hbmFnZXJfY29uZmlnX2pzb24gPSByb290X3VybCt0X2lkKycv ZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uJywKKyAgICBmaWxlX21hbmFnZXJf Y29uZmlnX2pzID0gcm9vdF91cmwrJ2ZpbGVfbWFuYWdlcl9jb25maWcuanMn LAorICAgIGZpbGVDb25uZWN0b3IgPSByb290X3VybCsnZmlsZW1hbmFnZXIv Jyt0X2lkKycvJywKKyAgICBjb25mZyA9IGxvYWRDb25maWdGaWxlKCk7CisK KworLy8gbG9hZCB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZQoraWYgKGNvbmZn LnJlYWR5U3RhdGUgPT0gNCkKKyAgY29uZmlnID0gSlNPTi5wYXJzZShjb25m Zy5yZXNwb25zZVRleHQpOworCit2YXIgZmlsZVJvb3QgPSBjb25maWcub3B0 aW9ucy5maWxlUm9vdCwKKyAgICBjYXBhYmlsaXRpZXMgPSBjb25maWcub3B0 aW9ucy5jYXBhYmlsaXRpZXM7CisKKy8qCisgKiBHZXQgbG9jYWxpemVkIG1l c3NhZ2VzIGZyb20gZmlsZQorICogdGhyb3VnaCBjdWx0dXJlIHZhciBvciBm cm9tIFVSTAorICovCit2YXIgbGcgPSBbXSwKKyAgICBlbmpzID0gJ3t7IHVy bF9mb3IoImZpbGVfbWFuYWdlci5pbmRleCIpIH19JysiZW4uanMiLAorICAg IGxnZiA9IGxvYWRMYW5nRmlsZShlbmpzKTsKKworaWYgKGxnZi5yZWFkeVN0 YXRlID09IDQpCisgIGxnID0gSlNPTi5wYXJzZShsZ2YucmVzcG9uc2VUZXh0 KTsKKworLy8gRGlzYWJsZSBob21lIGJ1dHRvbiBvbiBsb2FkCiskKCcuZmls ZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmhvbWUnKS5hdHRyKCdkaXNhYmxl ZCcsICdkaXNhYmxlZCcpOworJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1 dHRvbi5yZW5hbWUnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwor CitpZiAoY29uZmlnLm9wdGlvbnMuZGlhbG9nX3R5cGUgPT0gJ3NlbGVjdF9m aWxlJyB8fAorCWNvbmZpZy5vcHRpb25zLmRpYWxvZ190eXBlID09ICdjcmVh dGVfZmlsZScgfHwKKwljb25maWcub3B0aW9ucy5kaWFsb2dfdHlwZSA9PSAn c3RvcmFnZV9kaWFsb2cnKSB7CisKKyAgLy8gQ3JlYXRlIGZpbGUgc2VsZWN0 aW9uIGRyb3Bkb3duCisgIHZhciBhbGxvd2VkX3R5cGVzID0gY29uZmlnLm9w dGlvbnMuYWxsb3dlZF9maWxlX3R5cGVzLAorICAgICAgdHlwZXNfbGVuID0g YWxsb3dlZF90eXBlcy5sZW5ndGg7CisgIGlmKHR5cGVzX2xlbiA+IDApIHsK KyAgICB2YXIgaSA9IDAsCisgICAgICAgIHNlbGVjdF9ib3ggPSAiPGRpdiBj bGFzcz0nY2hhbmdlX2ZpbGVfdHlwZXMnPjxzZWxlY3QgbmFtZT0ndHlwZSc+ IjsKKyAgICB3aGlsZShpIDwgdHlwZXNfbGVuKSB7CisgICAgICBzZWxlY3Rf Ym94ICs9ICI8b3B0aW9uIHZhbHVlPSIrYWxsb3dlZF90eXBlc1tpXSsiPiIr KGFsbG93ZWRfdHlwZXNbaV0gPT0gJyonID8gJ0FsbCBGaWxlcyc6IGFsbG93 ZWRfdHlwZXNbaV0pKyI8L29wdGlvbj4iOworICAgICAgaSsrOworICAgIH0K KyAgICBzZWxlY3RfYm94ICs9ICI8L3NlbGVjdD4iOworICAgIHNlbGVjdF9i b3ggKz0gIjxsYWJlbD5Gb3JtYXQ6IDwvbGFiZWw+PC9kaXY+IjsKKyAgfQor CisgICQoIi5hbGxvd2VkX2ZpbGVfdHlwZXMiKS5odG1sKHNlbGVjdF9ib3gp OworCisgICQoIi5hbGxvd2VkX2ZpbGVfdHlwZXMgc2VsZWN0Iikub24oJ2No YW5nZScsIGZ1bmN0aW9uKCkgeworICAgIHZhciBzZWxlY3RlZF92YWwgPSAk KHRoaXMpLnZhbCgpLAorICAgICAgICBjdXJyX3BhdGggPSAkKCcuY3VycmVu dHBhdGgnKS52YWwoKTsKKyAgICBnZXRGb2xkZXJJbmZvKGN1cnJfcGF0aCwg c2VsZWN0ZWRfdmFsKTsKKyAgfSk7Cit9CisKK2lmIChjb25maWcub3B0aW9u cy5kaWFsb2dfdHlwZSA9PSAnY3JlYXRlX2ZpbGUnKSB7CisgIHZhciBjcmVh dGVfZmlsZV9odG1sID0gJzxkaXYgY2xhc3M9ImNyZWF0ZV9pbnB1dCI+JysK KyAgICAgICc8c3Bhbj5GaWxlbmFtZTo8L3NwYW4+JysKKyAgICAgICc8aW5w dXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X2ZpbGVuYW1lIiBjbGFzcz0iZm1f Y3JlYXRlX2lucHV0IGZvcm0tY29udHJvbCIgLz4nKworICAgICc8L2Rpdj4n OworCisgICQoJy5jcmVhdGVfbW9kZV9kbGcnKS5maW5kKCcuYWxsb3dlZF9m aWxlX3R5cGVzJykucHJlcGVuZChjcmVhdGVfZmlsZV9odG1sKTsKKworICAk KCcuY3JlYXRlX2lucHV0IGlucHV0W3R5cGU9InRleHQiXScpLm9uKCdrZXlw cmVzcywga2V5ZG93bicsIGZ1bmN0aW9uKCkgeworICAgIHZhciBpbnB1dF90 ZXh0X2xlbiA9ICQodGhpcykudmFsKCkubGVuZ3RoOworICAgIGlmKGlucHV0 X3RleHRfbGVuID4gMCApIHsKKyAgICAgICQoJy5maWxlX21hbmFnZXJfb2sn KS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAgICB9CisgICAgZWxzZSB7 CisgICAgICAkKCcuZmlsZV9tYW5hZ2VyX29rJykuYWRkQ2xhc3MoJ2Rpc2Fi bGVkJyk7CisgICAgfQorICB9KTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIElu aXRpYWxpemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiskKGZ1bmN0aW9uKCl7 CisgIGlmKGNvbmZpZy5leHRyYV9qcykgeworICAgIGZvcih2YXIgaT0wOyBp PCBjb25maWcuZXh0cmFfanMubGVuZ3RoOyBpKyspIHsKKyAgICAgICQuYWph eCh7CisgICAgICAgIHVybDogY29uZmlnLmV4dHJhX2pzW2ldLAorICAgICAg ICBkYXRhVHlwZTogInNjcmlwdCIsCisgICAgICAgIGFzeW5jOiBleHRyYV9q c19hc3luYworICAgICAgfSk7CisgICAgfQorICB9CisKKyAgaWYoJC51cmxQ YXJhbSgnZXhwYW5kZWRGb2xkZXInKSAhPSAwKSB7CisgICAgZXhwYW5kZWRG b2xkZXIgPSAkLnVybFBhcmFtKCdleHBhbmRlZEZvbGRlcicpOworICAgIGZ1 bGxleHBhbmRlZEZvbGRlciA9IGZpbGVSb290ICsgZXhwYW5kZWRGb2xkZXI7 CisgIH0gZWxzZSB7CisgICAgZXhwYW5kZWRGb2xkZXIgPSAnJzsKKyAgICBm dWxsZXhwYW5kZWRGb2xkZXIgPSBudWxsOworICB9CisKKyAgLy8gQWRqdXN0 IGxheW91dC4KKyAgc2V0RGltZW5zaW9ucygpOworCisgIC8vIHdlIGZpbmFs aXplIHRoZSBGaWxlTWFuYWdlciBVSSBpbml0aWFsaXphdGlvbgorICAvLyB3 aXRoIGxvY2FsaXplZCB0ZXh0IGlmIG5lY2Vzc2FyeQorICBpZihjb25maWcu YXV0b2xvYWQgPT0gdHJ1ZSkgeworICAgICQoJy51cGxvYWQnKS5hcHBlbmQo bGcudXBsb2FkKTsKKyAgICAkKCcuY3JlYXRlJykuYXBwZW5kKGxnLm5ld19m b2xkZXIpOworICAgICQoJy5ncmlkJykuYXR0cigndGl0bGUnLCBsZy5ncmlk X3ZpZXcpOworICAgICQoJy5saXN0JykuYXR0cigndGl0bGUnLCBsZy5saXN0 X3ZpZXcpOworICAgICQoJy5maWxlaW5mbyBoMScpLmFwcGVuZChsZy5zZWxl Y3RfZnJvbV9sZWZ0KTsKKyAgICAkKCcjaXRlbU9wdGlvbnMgYVtocmVmJD0i I3NlbGVjdCJdJykuYXBwZW5kKGxnLnNlbGVjdCk7CisgICAgJCgnI2l0ZW1P cHRpb25zIGFbaHJlZiQ9Ii5kb3dubG9hZCJdJykuYXBwZW5kKGxnLmRvd25s b2FkKTsKKyAgICAkKCcjaXRlbU9wdGlvbnMgYVtocmVmJD0iLnJlbmFtZSJd JykuYXBwZW5kKGxnLnJlbmFtZSk7CisgICAgJCgnI2l0ZW1PcHRpb25zIGFb aHJlZiQ9Ii5kZWxldGUiXScpLmFwcGVuZChsZy5kZWwpOworICAgIC8qKiBJ bnB1dCBmaWxlIFJlcGxhY2VtZW50ICovCisgICAgJCgnLmJyb3dzZScpLmFw cGVuZCgnKycpOworCisgICAgJCgnLmJyb3dzZScpLmF0dHIoJ3RpdGxlJywg bGcuYnJvd3NlKTsKKworICAgICQoIi5uZXdmaWxlIikuY2hhbmdlKGZ1bmN0 aW9uKCkgeworICAgICAgJCgiLmZpbGVwYXRoIikudmFsKCQodGhpcykudmFs KCkpOworICAgIH0pOworCisgICAgLyoqIElucHV0IGZpbGUgUmVwbGFjZW1l bnQgLSBlbmQgKi8KKyAgfQorCisgIC8vIFNldCBpbml0aWFsIHZpZXcgc3Rh dGUuCisgICQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnLCBjb25maWcub3B0 aW9ucy5kZWZhdWx0Vmlld01vZGUpOworICBzZXRWaWV3QnV0dG9uc0Zvcihj b25maWcub3B0aW9ucy5kZWZhdWx0Vmlld01vZGUpOworCisgIC8vIFVwbG9h ZCBjbGljayBldmVudAorICAkKCcuZmlsZV9tYW5hZ2VyIC51cGxvYWRlcicp Lm9uKCdjbGljaycsICdhJywgZnVuY3Rpb24oZSkgeworICAgIGUucHJldmVu dERlZmF1bHQoKTsKKyAgICB2YXIgYiA9ICQoJy5jdXJyZW50cGF0aCcpLnZh bCgpOworICAgIHZhciBub2RlX3ZhbCA9ICQodGhpcykubmV4dCgpLnRleHQo KTsKKyAgICBwYXJlbnQgPSBiLnN1YnN0cmluZygwLCBiLnNsaWNlKDAsIC0x KS5sYXN0SW5kZXhPZihub2RlX3ZhbCkpOworICAgIGdldEZvbGRlckluZm8o cGFyZW50KTsKKyAgfSk7CisKKyAgLy8gcmUtcmVuZGVyIHRoZSBob21lIHZp ZXcKKyAgJCgnLmZpbGVfbWFuYWdlciAuaG9tZScpLmNsaWNrKGZ1bmN0aW9u KCl7CisgICAgdmFyIGN1cnJlbnRWaWV3TW9kZSA9ICQoJy5maWxlaW5mbycp LmRhdGEoJ3ZpZXcnKTsKKyAgICAkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3 JywgY3VycmVudFZpZXdNb2RlKTsKKyAgICBnZXRGb2xkZXJJbmZvKGZpbGVS b290KTsKKyAgICBlbmFiX2Rpc19sZXZlbF91cCgpOworICB9KTsKKworICAv LyBHbyBvbmUgZGlyZWN0b3J5IGJhY2sKKyAgJCgiLmZpbGVfbWFuYWdlciAu bGV2ZWwtdXAiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICB2YXIgYiA9ICQo Jy5jdXJyZW50cGF0aCcpLnZhbCgpOworCisgICAgLy8gRW5hYmxlL0Rpc2Fi bGUgbGV2ZWwgdXAgYnV0dG9uCisgICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsK KworICAgIGlmIChiICE9IGZpbGVSb290KSB7CisgICAgICAgIHBhcmVudCA9 IGIuc3Vic3RyaW5nKDAsIGIuc2xpY2UoMCwgLTEpLmxhc3RJbmRleE9mKCIv IikpICsgIi8iOworICAgICAgICB2YXIgZCA9ICQoIi5maWxlaW5mbyIpLmRh dGEoInZpZXciKTsKKyAgICAgICAgJCgiLmZpbGVpbmZvIikuZGF0YSgidmll dyIsIGQpOworICAgICAgICBnZXRGb2xkZXJJbmZvKHBhcmVudCk7CisgICAg fQorICB9KTsKKworICAvLyBzZXQgYnV0dG9ucyB0byBzd2l0Y2ggYmV0d2Vl biBncmlkIGFuZCBsaXN0IHZpZXdzLgorICAkKCcuZmlsZV9tYW5hZ2VyIC5n cmlkJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICBzZXRWaWV3QnV0dG9uc0Zv cignZ3JpZCcpOworICAgICQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnLCAn Z3JpZCcpOworICAgIGVuYWJsZV9kaXNhYmxlX2J0bigpOworICAgIGdldEZv bGRlckluZm8oJCgnLmN1cnJlbnRwYXRoJykudmFsKCkpOworICB9KTsKKwor ICAvLyBTaG93IGxpc3QgbW9kZQorICAkKCcuZmlsZV9tYW5hZ2VyIC5saXN0 JykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICBzZXRWaWV3QnV0dG9uc0Zvcign bGlzdCcpOworICAgICQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnLCAnbGlz dCcpOworICAgIGVuYWJsZV9kaXNhYmxlX2J0bigpOworICAgIGdldEZvbGRl ckluZm8oJCgnLmN1cnJlbnRwYXRoJykudmFsKCkpOworICB9KTsKKworICAv LyBQcm92aWRlIGluaXRpYWwgdmFsdWVzIGZvciB1cGxvYWQgZm9ybSwgc3Rh dHVzLCBldGMuCisgIHNldFVwbG9hZGVyKGZpbGVSb290KTsKKworICAkKCcj dXBsb2FkZXInKS5hdHRyKCdhY3Rpb24nLCBmaWxlQ29ubmVjdG9yKTsKKwor ICBkYXRhID0geworICAgICdDYXBhYmlsaXRpZXMnOiBjYXBhYmlsaXRpZXMK KyAgfTsKKyAgaWYgKGhhc19jYXBhYmlsaXR5KGRhdGEsICd1cGxvYWQnKSkg eworICAgIERyb3B6b25lLmF1dG9EaXNjb3ZlciA9IGZhbHNlOworICAgIC8v IHdlIHJlbW92ZSBzaW1wbGUgZmlsZSB1cGxvYWQgZWxlbWVudAorICAgICQo Jy5maWxlLWlucHV0LWNvbnRhaW5lcicpLnJlbW92ZSgpOworICAgICQoJy51 cGxvYWQnKS5yZW1vdmUoKTsKKyAgICAkKCAiLmNyZWF0ZSIgKS5iZWZvcmUo ICc8YnV0dG9uIHZhbHVlPSJVcGxvYWQiIHR5cGU9ImJ1dHRvbiIgdGl0bGU9 IlVwbG9hZCBGaWxlIiBuYW1lPSJ1cGxvYWQiIGlkPSJ1cGxvYWQiIGNsYXNz PSJidG4gZmEgZmEtdXBsb2FkIHVwbG9hZCI+PHNwYW4+PC9zcGFuPjwvYnV0 dG9uPiAnICk7CisKKyAgICAkKCcudXBsb2FkJykudW5iaW5kKCkuY2xpY2so ZnVuY3Rpb24oKSB7CisgICAgICAvLyB3ZSBjcmVhdGUgcHJvbXB0CisgICAg ICB2YXIgbXNnICA9ICc8ZGl2IGlkPSJkcm9wem9uZS1jb250YWluZXIiPic7 CisgICAgICAgIG1zZyArPSAnPGJ1dHRvbiBjbGFzcz0iZmEgZmEtdGltZXMg ZHpfY3Jvc3NfYnRuIj48L2J1dHRvbj4nOworICAgICAgICBtc2cgKz0gJzxk aXYgaWQ9Im11bHRpcGxlLXVwbG9hZHMiIGNsYXNzPSJkcm9wem9uZSI+PC9k aXY+JzsKKyAgICAgICAgbXNnICs9ICc8ZGl2IGNsYXNzPSJwcm9tcHQtaW5m byI+JytsZy5maWxlX3NpemVfbGltaXQgKyBjb25maWcudXBsb2FkLmZpbGVT aXplTGltaXQgKyAnICcgKyBsZy5tYiArICcuPC9kaXY+JzsKKworICAgICAg ZXJyb3JfZmxhZyA9IGZhbHNlOworICAgICAgdmFyIHBhdGggPSAkKCcuY3Vy cmVudHBhdGgnKS52YWwoKSwKKyAgICAgICAgICBmaWxlU2l6ZSA9IChjb25m aWcudXBsb2FkLmZpbGVTaXplTGltaXQgIT0gJ2F1dG8nKSA/IGNvbmZpZy51 cGxvYWQuZmlsZVNpemVMaW1pdCA6IDI1NjsgLy8gZGVmYXVsdCBkcm9wem9u ZSB2YWx1ZQorCisgICAgICBpZihjb25maWcuc2VjdXJpdHkudXBsb2FkUG9s aWN5ID09ICdESVNBTExPV19BTEwnKSB7CisgICAgICAgIHZhciBhbGxvd2Vk RmlsZXMgPSAnLicgKyBjb25maWcuc2VjdXJpdHkudXBsb2FkUmVzdHJpY3Rp b25zLmpvaW4oJywuJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyB3 ZSBhbGxvdyBhbnkgZXh0ZW5zaW9uIHNpbmNlIHdlIGhhdmUgbm8gZWFzeSB3 YXkgdG8gaGFuZGxlIHRoZSB0aGUgYnVpbHQtaW4gYGFjY2VwdGVkRmlsZXNg IHBhcmFtcworICAgICAgICAvLyBXb3VsZCBiZSBoYW5kbGVkIGxhdGVyIGJ5 IHRoZSBjb25uZWN0b3IKKyAgICAgICAgdmFyIGFsbG93ZWRGaWxlcyA9IG51 bGw7CisgICAgICB9CisKKyAgICAgIGlmICgkLnVybFBhcmFtKCd0eXBlJyku dG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09ICdpbWFnZXMnIHx8IGNvbmZp Zy51cGxvYWQuaW1hZ2VzT25seSkgeworICAgICAgICB2YXIgYWxsb3dlZEZp bGVzID0gJy4nICsgY29uZmlnLmltYWdlcy5pbWFnZXNFeHQuam9pbignLC4n KTsKKyAgICAgIH0KKworICAgICAgJCgnLmZpbGVfbWFuYWdlciAudXBsb2Fk X2ZpbGUnKS50b2dnbGUoKTsKKyAgICAgICQoJy5maWxlX21hbmFnZXIgLnVw bG9hZF9maWxlJykuaHRtbChtc2cpOworCisgICAgICAvL3ZhciBwcmV2aWV3 VGVtcGxhdGUgPSAnPGRpdiBpZD0iZHJvcHpvbmUtY29udGFpbmVyIj4nOwor ICAgICAgdmFyIHByZXZpZXdUZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPSJmaWxl X3VwbG9hZF9tYWluIGR6LXByZXZpZXcgZHotZmlsZS1wcmV2aWV3Ij4nKwor ICAgICAgICAgICAgJzxkaXYgY2xhc3M9InNob3dfZXJyb3IiPicrCisgICAg ICAgICAgICAgICc8cCBjbGFzcz0ic2l6ZSBkei1zaXplIiBkYXRhLWR6LXNp emU+PC9wPicrCisgICAgICAgICAgICAgICc8cCBjbGFzcz0ibmFtZSBkei1m aWxlbmFtZSIgZGF0YS1kei1uYW1lPjwvcD4nKworICAgICAgICAgICAgJzwv ZGl2PicrCisgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZHotcHJvZ3Jlc3Mi PjxzcGFuIGNsYXNzPSJkei11cGxvYWQiIGRhdGEtZHotdXBsb2FkcHJvZ3Jl c3M+PC9zcGFuPjwvZGl2PicrCisgICAgICAgICAgICAnPGRpdiBjbGFzcz0i ZHotc3VjY2Vzcy1tYXJrIj48c3Bhbj48L3NwYW4+PC9kaXY+JysKKyAgICAg ICAgICAgICc8ZGl2IGNsYXNzPSJkei1lcnJvci1tYXJrIj48c3Bhbj48L3Nw YW4+PC9kaXY+JysKKyAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJkei1lcnJv ci1tZXNzYWdlIj48c3BhbiBkYXRhLWR6LWVycm9ybWVzc2FnZT48L3NwYW4+ PC9kaXY+JysKKyAgICAgICAgICAgICc8YSBocmVmPSJqYXZhc2NyaXB0OnZv aWQoMCk7IiBjbGFzcz0iZmEgZmEtdHJhc2ggZHpfZmlsZV9yZW1vdmUiIGRh dGEtZHotcmVtb3ZlPjwvYT4nKworICAgICAgICAgICc8L2Rpdj4nOworCisg ICAgICAkKCJkaXYjbXVsdGlwbGUtdXBsb2FkcyIpLmRyb3B6b25lKHsKKyAg ICAgICAgcGFyYW1OYW1lOiAibmV3ZmlsZSIsCisgICAgICAgIHVybDogZmls ZUNvbm5lY3RvciArICc/Y29uZmlnPScgKyB1c2VyY29uZmlnLAorICAgICAg ICBtYXhGaWxlc2l6ZTogZmlsZVNpemUsCisgICAgICAgIG1heEZpbGVzOiBj b25maWcudXBsb2FkLm51bWJlciwKKyAgICAgICAgYWRkUmVtb3ZlTGlua3M6 IHRydWUsCisgICAgICAgIHByZXZpZXdUZW1wbGF0ZTogcHJldmlld1RlbXBs YXRlLAorICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IGNvbmZpZy51cGxvYWQu bnVtYmVyLAorICAgICAgICBkaWN0TWF4RmlsZXNFeGNlZWRlZDogbGcuZHpf ZGljdE1heEZpbGVzRXhjZWVkZWQucmVwbGFjZSgiJXMiLCBjb25maWcudXBs b2FkLm51bWJlciksCisgICAgICAgIGRpY3REZWZhdWx0TWVzc2FnZTogbGcu ZHpfZGljdERlZmF1bHRNZXNzYWdlLAorICAgICAgICBkaWN0SW52YWxpZEZp bGVUeXBlOiBsZy5kel9kaWN0SW52YWxpZEZpbGVUeXBlLAorICAgICAgICBk aWN0RmlsZVRvb0JpZzogbGcuZmlsZV90b29fYmlnICsgJyAnICsgbGcuZmls ZV9zaXplX2xpbWl0ICsgY29uZmlnLnVwbG9hZC5maWxlU2l6ZUxpbWl0ICsg JyAnICsgbGcubWIsCisgICAgICAgIGFjY2VwdGVkRmlsZXM6IGFsbG93ZWRG aWxlcywKKyAgICAgICAgYXV0b1Byb2Nlc3NRdWV1ZTogdHJ1ZSwKKyAgICAg ICAgaW5pdDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGRyb3B6b25l ID0gdGhpczsKKyAgICAgICAgICAkKCcuZHpfY3Jvc3NfYnRuJykudW5iaW5k KCkub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAkKCcu ZmlsZV9tYW5hZ2VyIC51cGxvYWRfZmlsZScpLnRvZ2dsZSgpOworICAgICAg ICAgIH0pOworCisgICAgICAgIH0sCisgICAgICAgIHNlbmRpbmc6IGZ1bmN0 aW9uKGZpbGUsIHhociwgZm9ybURhdGEpIHsKKyAgICAgICAgICBmb3JtRGF0 YS5hcHBlbmQoIm1vZGUiLCAiYWRkIik7CisgICAgICAgICAgZm9ybURhdGEu YXBwZW5kKCJjdXJyZW50cGF0aCIsIHBhdGgpOworICAgICAgICAgICQoJy51 cGxvYWRfZmlsZSAuZHpfY3Jvc3NfYnRuJykuYXR0cignZGlzYWJsZWQnLCAn ZGlzYWJsZWQnKTsKKyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg e30sIDEwMDAwKTsKKyAgICAgICAgfSwKKyAgICAgICAgc3VjY2VzczogZnVu Y3Rpb24oZmlsZSwgcmVzcG9uc2UpIHsKKyAgICAgICAgICB2YXIgcmVzcG9u c2UgPSBqUXVlcnkucGFyc2VKU09OKHJlc3BvbnNlKSwKKyAgICAgICAgICAg ICAgZGF0YSA9IHJlc3BvbnNlLmRhdGEucmVzdWx0LAorICAgICAgICAgICAg ICAkdGhpcyA9ICQoZmlsZS5wcmV2aWV3VGVtcGxhdGUpOworCisgICAgICAg ICAgaWYgKGRhdGFbJ0NvZGUnXSA9PSAwKSB7CisgICAgICAgICAgICBzZXRU aW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICR0aGlzLmZpbmQo Ii5kei11cGxvYWQiKS5hZGRDbGFzcygic3VjY2VzcyIpOworICAgICAgICAg ICAgfSwgMTAwMCk7CisgICAgICAgICAgICAkdGhpcy5maW5kKCIuZHotdXBs b2FkIikuY3NzKCd3aWR0aCcsICIxMDAlIikuaHRtbCgiMTAwJSIpOworICAg ICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhsZy51cGxvYWRfc3VjY2Vzcyk7 CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICR0aGlzLmZpbmQo Ii5kei11cGxvYWQiKS5hZGRDbGFzcygiZXJyb3IiKTsKKyAgICAgICAgICAg ICR0aGlzLmZpbmQoIi5kei11cGxvYWQiKS5jc3MoJ3dpZHRoJywgIjAlIiku aHRtbCgiMCUiKTsKKyAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKGRhdGFb J0Vycm9yJ10pOworICAgICAgICAgIH0KKyAgICAgICAgICBnZXRGb2xkZXJJ bmZvKHBhdGgpOworICAgICAgICB9LAorICAgICAgICB0b3RhbHVwbG9hZHBy b2dyZXNzOiBmdW5jdGlvbihwcm9ncmVzcykgeworICAgICAgICB9LAorICAg ICAgICBjb21wbGV0ZTogZnVuY3Rpb24oZmlsZSkgeworICAgICAgICAgIGlm ICh0aGlzLmdldFVwbG9hZGluZ0ZpbGVzKCkubGVuZ3RoID09PSAwICYmIHRo aXMuZ2V0UXVldWVkRmlsZXMoKS5sZW5ndGggPT09IDApIHsKKyAgICAgICAg ICB9CisgICAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09ICJlcnJvciIpIHsK KyAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKGxnLkVSUk9SX1VQTE9BRElO R19GSUxFKTsKKyAgICAgICAgICB9CisgICAgICAgICAgJCgnLnVwbG9hZF9m aWxlIC5kel9jcm9zc19idG4nKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOwor ICAgICAgICAgIGdldEZvbGRlckluZm8ocGF0aCk7CisgICAgICAgIH0KKyAg ICAgIH0pOworCisgICAgfSk7CisgIH0KKworICAvLyBEaXNhYmxlIHNlbGVj dCBmdW5jdGlvbiBpZiBubyB3aW5kb3cub3BlbmVyCisgIGlmKCEgKHdpbmRv dy5vcGVuZXIgfHwgd2luZG93LnRpbnlNQ0VQb3B1cCkgKSAkKCcjaXRlbU9w dGlvbnMgYVtocmVmJD0iI3NlbGVjdCJdJykucmVtb3ZlKCk7CisgIC8vIEtl ZXAgb25seSBicm93c2VPbmx5IGZlYXR1cmVzIGlmIG5lZWRlZAorICBpZihj b25maWcub3B0aW9ucy5icm93c2VPbmx5ID09IHRydWUpIHsKKyAgICAkKCcu bmV3ZmlsZScpLnJlbW92ZSgpOworICAgICQoJy51cGxvYWQnKS5yZW1vdmUo KTsKKyAgICAkKCcuY3JlYXRlJykucmVtb3ZlKCk7CisgICAgJCgnI3Rvb2xi YXInKS5yZW1vdmUoJy5yZW5hbWUnKTsKKyAgICAkKCcuY29udGV4dE1lbnUg LnJlbmFtZScpLnJlbW92ZSgpOworICAgICQoJy5jb250ZXh0TWVudSAuZGVs ZXRlJykucmVtb3ZlKCk7CisgIH0KKyAgZ2V0RGV0YWlsVmlldyhmaWxlUm9v dCArIGV4cGFuZGVkRm9sZGVyKTsKK30pOworCit9KShqUXVlcnkpOwpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2Nzcy9qcXVlcnkuZHJvcHpv bmUvZHJvcHpvbmUuY3NzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2Nzcy9qcXVl cnkuZHJvcHpvbmUvZHJvcHpvbmUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjA0OTRkMWMKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvY3NzL2pxdWVyeS5kcm9wem9uZS9kcm9wem9u ZS5jc3MKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiBUaGUgTUlUIExpY2Vu c2UKKyAqIENvcHlyaWdodCAoYykgMjAxMiBNYXRpYXMgTWVubyA8bUB0aWFz Lm1lPgorICovCitALXdlYmtpdC1rZXlmcmFtZXMgcGFzc2luZy10aHJvdWdo IHsKKyAgMCUgeworICAgIG9wYWNpdHk6IDA7CisgICAgLXdlYmtpdC10cmFu c2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1vei10cmFuc2Zvcm06 IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNs YXRlWSg0MHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBw eCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOyB9CisgIDMw JSwgNzAlIHsKKyAgICBvcGFjaXR5OiAxOworICAgIC13ZWJraXQtdHJhbnNm b3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1vei10cmFuc2Zvcm06IHRy YW5zbGF0ZVkoMHB4KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZ KDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7Cisg ICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7IH0KKyAgMTAwJSB7Cisg ICAgb3BhY2l0eTogMDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNs YXRlWSgtNDBweCk7CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVko LTQwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgp OworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7CisgICAg dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsgfSB9CitALW1vei1rZXlm cmFtZXMgcGFzc2luZy10aHJvdWdoIHsKKyAgMCUgeworICAgIG9wYWNpdHk6 IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7 CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAg LW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtby10cmFu c2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFu c2xhdGVZKDQwcHgpOyB9CisgIDMwJSwgNzAlIHsKKyAgICBvcGFjaXR5OiAx OworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7Cisg ICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtbXMt dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW8tdHJhbnNmb3Jt OiB0cmFuc2xhdGVZKDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZ KDBweCk7IH0KKyAgMTAwJSB7CisgICAgb3BhY2l0eTogMDsKKyAgICAtd2Vi a2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7CisgICAgLW1vei10 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIC1tcy10cmFuc2Zv cm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJh bnNsYXRlWSgtNDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00 MHB4KTsgfSB9CitAa2V5ZnJhbWVzIHBhc3NpbmctdGhyb3VnaCB7CisgIDAl IHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0 cmFuc2xhdGVZKDQwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xh dGVZKDQwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBw eCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAg IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsgfQorICAzMCUsIDcwJSB7 CisgICAgb3BhY2l0eTogMTsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJh bnNsYXRlWSgwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZ KDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwor ICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIHRyYW5z Zm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9CisgIDEwMCUgeworICAgIG9wYWNp dHk6IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQw cHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsK KyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAgICAt by10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIHRyYW5zZm9y bTogdHJhbnNsYXRlWSgtNDBweCk7IH0gfQorQC13ZWJraXQta2V5ZnJhbWVz IHNsaWRlLWluIHsKKyAgMCUgeworICAgIG9wYWNpdHk6IDA7CisgICAgLXdl YmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1vei10 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW1zLXRyYW5zZm9y bTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5z bGF0ZVkoNDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgp OyB9CisgIDMwJSB7CisgICAgb3BhY2l0eTogMTsKKyAgICAtd2Via2l0LXRy YW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tb3otdHJhbnNmb3Jt OiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNs YXRlWSgwcHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgp OworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9IH0KK0AtbW96 LWtleWZyYW1lcyBzbGlkZS1pbiB7CisgIDAlIHsKKyAgICBvcGFjaXR5OiAw OworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOwor ICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1t cy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW8tdHJhbnNm b3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNs YXRlWSg0MHB4KTsgfQorICAzMCUgeworICAgIG9wYWNpdHk6IDE7CisgICAg LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtbW96 LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tcy10cmFuc2Zv cm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5z bGF0ZVkoMHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsg fSB9CitAa2V5ZnJhbWVzIHNsaWRlLWluIHsKKyAgMCUgeworICAgIG9wYWNp dHk6IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBw eCk7CisgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7Cisg ICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtby10 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgdHJhbnNmb3JtOiB0 cmFuc2xhdGVZKDQwcHgpOyB9CisgIDMwJSB7CisgICAgb3BhY2l0eTogMTsK KyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAg IC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1zLXRy YW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1vLXRyYW5zZm9ybTog dHJhbnNsYXRlWSgwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgw cHgpOyB9IH0KK0Atd2Via2l0LWtleWZyYW1lcyBwdWxzZSB7CisgIDAlIHsK KyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW1vei10 cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxl KDEpOworICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgdHJhbnNm b3JtOiBzY2FsZSgxKTsgfQorICAxMCUgeworICAgIC13ZWJraXQtdHJhbnNm b3JtOiBzY2FsZSgxLjEpOworICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgx LjEpOworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEuMSk7CisgICAgLW8t dHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIHRyYW5zZm9ybTogc2NhbGUo MS4xKTsgfQorICAyMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2Fs ZSgxKTsKKyAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW1z LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW8tdHJhbnNmb3JtOiBzY2Fs ZSgxKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IH0KK0AtbW96LWtl eWZyYW1lcyBwdWxzZSB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9y bTogc2NhbGUoMSk7CisgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpOwor ICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1vLXRyYW5zZm9y bTogc2NhbGUoMSk7CisgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfQorICAx MCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAg IC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIC1tcy10cmFuc2Zv cm06IHNjYWxlKDEuMSk7CisgICAgLW8tdHJhbnNmb3JtOiBzY2FsZSgxLjEp OworICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsgfQorICAyMCUgeworICAg IC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbW96LXRyYW5z Zm9ybTogc2NhbGUoMSk7CisgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMSk7 CisgICAgLW8tdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICB0cmFuc2Zvcm06 IHNjYWxlKDEpOyB9IH0KK0BrZXlmcmFtZXMgcHVsc2UgeworICAwJSB7Cisg ICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tb3otdHJh bnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgx KTsKKyAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIHRyYW5zZm9y bTogc2NhbGUoMSk7IH0KKyAgMTAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9y bTogc2NhbGUoMS4xKTsKKyAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMS4x KTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIC1vLXRy YW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxlKDEu MSk7IH0KKyAgMjAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUo MSk7CisgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tcy10 cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1vLXRyYW5zZm9ybTogc2NhbGUo MSk7CisgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSB9CisuZHJvcHpvbmUs IC5kcm9wem9uZSAqIHsKKyAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQor CisuZHJvcHpvbmUgeworICBtaW4taGVpZ2h0OiAxNTBweDsKKyAgYm9yZGVy OiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjMpOworICBiYWNrZ3JvdW5k OiB3aGl0ZTsKKyAgcGFkZGluZzogMjBweCAyMHB4OyB9CisgIC5kcm9wem9u ZS5kei1jbGlja2FibGUgeworICAgIGN1cnNvcjogcG9pbnRlcjsgfQorICAg IC5kcm9wem9uZS5kei1jbGlja2FibGUgKiB7CisgICAgICBjdXJzb3I6IGRl ZmF1bHQ7IH0KKyAgICAuZHJvcHpvbmUuZHotY2xpY2thYmxlIC5kei1tZXNz YWdlLCAuZHJvcHpvbmUuZHotY2xpY2thYmxlIC5kei1tZXNzYWdlICogewor ICAgICAgY3Vyc29yOiBwb2ludGVyOyB9CisgIC5kcm9wem9uZS5kei1zdGFy dGVkIC5kei1tZXNzYWdlIHsKKyAgICBkaXNwbGF5OiBub25lOyB9CisgIC5k cm9wem9uZS5kei1kcmFnLWhvdmVyIHsKKyAgICBib3JkZXItc3R5bGU6IHNv bGlkOyB9CisgICAgLmRyb3B6b25lLmR6LWRyYWctaG92ZXIgLmR6LW1lc3Nh Z2UgeworICAgICAgb3BhY2l0eTogMC41OyB9CisgIC5kcm9wem9uZSAuZHot bWVzc2FnZSB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIG1hcmdp bjogMmVtIDA7IH0KKyAgLmRyb3B6b25lIC5kei1wcmV2aWV3IHsKKyAgICBw b3NpdGlvbjogcmVsYXRpdmU7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgICAgbWFyZ2luOiAxNnB4 OworICAgIG1pbi1oZWlnaHQ6IDEwMHB4OyB9CisgICAgLmRyb3B6b25lIC5k ei1wcmV2aWV3OmhvdmVyIHsKKyAgICAgIHotaW5kZXg6IDEwMDA7IH0KKyAg ICAgIC5kcm9wem9uZSAuZHotcHJldmlldzpob3ZlciAuZHotZGV0YWlscyB7 CisgICAgICAgIG9wYWNpdHk6IDE7IH0KKyAgICAuZHJvcHpvbmUgLmR6LXBy ZXZpZXcuZHotZmlsZS1wcmV2aWV3IC5kei1pbWFnZSB7CisgICAgICBib3Jk ZXItcmFkaXVzOiAyMHB4OworICAgICAgYmFja2dyb3VuZDogIzk5OTsKKyAg ICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNl ZWUsICNkZGQpOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWZp bGUtcHJldmlldyAuZHotZGV0YWlscyB7CisgICAgICBvcGFjaXR5OiAxOyB9 CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWltYWdlLXByZXZpZXcg eworICAgICAgYmFja2dyb3VuZDogd2hpdGU7IH0KKyAgICAgIC5kcm9wem9u ZSAuZHotcHJldmlldy5kei1pbWFnZS1wcmV2aWV3IC5kei1kZXRhaWxzIHsK KyAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGlu ZWFyOworICAgICAgICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBs aW5lYXI7CisgICAgICAgIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMg bGluZWFyOworICAgICAgICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMg bGluZWFyOworICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGlu ZWFyOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1yZW1vdmUg eworICAgICAgZm9udC1zaXplOiAxNHB4OworICAgICAgdGV4dC1hbGlnbjog Y2VudGVyOworICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICBjdXJzb3I6 IHBvaW50ZXI7CisgICAgICBib3JkZXI6IG5vbmU7IH0KKyAgICAgIC5kcm9w em9uZSAuZHotcHJldmlldyAuZHotcmVtb3ZlOmhvdmVyIHsKKyAgICAgICAg dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKyAgICAuZHJvcHpvbmUg LmR6LXByZXZpZXc6aG92ZXIgLmR6LWRldGFpbHMgeworICAgICAgb3BhY2l0 eTogMTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWls cyB7CisgICAgICB6LWluZGV4OiAyMDsKKyAgICAgIHBvc2l0aW9uOiBhYnNv bHV0ZTsKKyAgICAgIHRvcDogMDsKKyAgICAgIGxlZnQ6IDA7CisgICAgICBv cGFjaXR5OiAwOworICAgICAgZm9udC1zaXplOiAxM3B4OworICAgICAgbWlu LXdpZHRoOiAxMDAlOworICAgICAgbWF4LXdpZHRoOiAxMDAlOworICAgICAg cGFkZGluZzogMmVtIDFlbTsKKyAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsK KyAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7CisgICAgICBsaW5l LWhlaWdodDogMTUwJTsgfQorICAgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3 IC5kei1kZXRhaWxzIC5kei1zaXplIHsKKyAgICAgICAgbWFyZ2luLWJvdHRv bTogMWVtOworICAgICAgICBmb250LXNpemU6IDE2cHg7IH0KKyAgICAgIC5k cm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotZmlsZW5hbWUg eworICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CisgICAgICAgIC5k cm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotZmlsZW5hbWU6 aG92ZXIgc3BhbiB7CisgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdi YSgyMDAsIDIwMCwgMjAwLCAwLjgpOworICAgICAgICAgIGJhY2tncm91bmQt Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfQorICAgICAgICAu ZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVuYW1l Om5vdCg6aG92ZXIpIHsKKyAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwor ICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9CisgICAgICAg ICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1kZXRhaWxzIC5kei1maWxl bmFtZTpub3QoOmhvdmVyKSBzcGFuIHsKKyAgICAgICAgICAgIGJvcmRlcjog MXB4IHNvbGlkIHRyYW5zcGFyZW50OyB9CisgICAgICAuZHJvcHpvbmUgLmR6 LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVuYW1lIHNwYW4sIC5kcm9w em9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotc2l6ZSBzcGFuIHsK KyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1 LCAwLjQpOworICAgICAgICBwYWRkaW5nOiAwIDAuNGVtOworICAgICAgICBi b3JkZXItcmFkaXVzOiAzcHg7IH0KKyAgICAuZHJvcHpvbmUgLmR6LXByZXZp ZXc6aG92ZXIgLmR6LWltYWdlIGltZyB7CisgICAgICAtd2Via2l0LXRyYW5z Zm9ybTogc2NhbGUoMS4wNSwgMS4wNSk7CisgICAgICAtbW96LXRyYW5zZm9y bTogc2NhbGUoMS4wNSwgMS4wNSk7CisgICAgICAtbXMtdHJhbnNmb3JtOiBz Y2FsZSgxLjA1LCAxLjA1KTsKKyAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGUo MS4wNSwgMS4wNSk7CisgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUsIDEu MDUpOworICAgICAgLXdlYmtpdC1maWx0ZXI6IGJsdXIoOHB4KTsKKyAgICAg IGZpbHRlcjogYmx1cig4cHgpOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2 aWV3IC5kei1pbWFnZSB7CisgICAgICBib3JkZXItcmFkaXVzOiAyMHB4Owor ICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICAgIHdpZHRoOiAxMjBweDsK KyAgICAgIGhlaWdodDogMTIwcHg7CisgICAgICBwb3NpdGlvbjogcmVsYXRp dmU7CisgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgIHotaW5kZXg6IDEw OyB9CisgICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWltYWdlIGlt ZyB7CisgICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9CisgICAgLmRyb3B6b25l IC5kei1wcmV2aWV3LmR6LXN1Y2Nlc3MgLmR6LXN1Y2Nlc3MtbWFyayB7Cisg ICAgICAtd2Via2l0LWFuaW1hdGlvbjogcGFzc2luZy10aHJvdWdoIDNzIGN1 YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAgICAtbW96LWFu aW1hdGlvbjogcGFzc2luZy10aHJvdWdoIDNzIGN1YmljLWJlemllcigwLjc3 LCAwLCAwLjE3NSwgMSk7CisgICAgICAtbXMtYW5pbWF0aW9uOiBwYXNzaW5n LXRocm91Z2ggM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAxKTsK KyAgICAgIC1vLWFuaW1hdGlvbjogcGFzc2luZy10aHJvdWdoIDNzIGN1Ymlj LWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAgICBhbmltYXRpb246 IHBhc3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4x NzUsIDEpOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWVycm9y IC5kei1lcnJvci1tYXJrIHsKKyAgICAgIG9wYWNpdHk6IDE7CisgICAgICAt d2Via2l0LWFuaW1hdGlvbjogc2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAu NzcsIDAsIDAuMTc1LCAxKTsKKyAgICAgIC1tb3otYW5pbWF0aW9uOiBzbGlk ZS1pbiAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpOworICAg ICAgLW1zLWFuaW1hdGlvbjogc2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAu NzcsIDAsIDAuMTc1LCAxKTsKKyAgICAgIC1vLWFuaW1hdGlvbjogc2xpZGUt aW4gM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAxKTsKKyAgICAg IGFuaW1hdGlvbjogc2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAs IDAuMTc1LCAxKTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHot c3VjY2Vzcy1tYXJrLCAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWVycm9y LW1hcmsgeworICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgICBv cGFjaXR5OiAwOworICAgICAgei1pbmRleDogNTAwOworICAgICAgcG9zaXRp b246IGFic29sdXRlOworICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICB0 b3A6IDUwJTsKKyAgICAgIGxlZnQ6IDUwJTsKKyAgICAgIG1hcmdpbi1sZWZ0 OiAtMjdweDsKKyAgICAgIG1hcmdpbi10b3A6IC0yN3B4OyB9CisgICAgICAu ZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LXN1Y2Nlc3MtbWFyayBzdmcsIC5k cm9wem9uZSAuZHotcHJldmlldyAuZHotZXJyb3ItbWFyayBzdmcgeworICAg ICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgd2lkdGg6IDU0cHg7Cisg ICAgICAgIGhlaWdodDogNTRweDsgfQorICAgIC5kcm9wem9uZSAuZHotcHJl dmlldy5kei1wcm9jZXNzaW5nIC5kei1wcm9ncmVzcyB7CisgICAgICBvcGFj aXR5OiAxOworICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBs aW5lYXI7CisgICAgICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjJzIGxpbmVh cjsKKyAgICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4ycyBsaW5lYXI7Cisg ICAgICAtby10cmFuc2l0aW9uOiBhbGwgMC4ycyBsaW5lYXI7CisgICAgICB0 cmFuc2l0aW9uOiBhbGwgMC4ycyBsaW5lYXI7IH0KKyAgICAuZHJvcHpvbmUg LmR6LXByZXZpZXcuZHotY29tcGxldGUgLmR6LXByb2dyZXNzIHsKKyAgICAg IG9wYWNpdHk6IDA7CisgICAgICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNp dHkgMC40cyBlYXNlLWluOworICAgICAgLW1vei10cmFuc2l0aW9uOiBvcGFj aXR5IDAuNHMgZWFzZS1pbjsKKyAgICAgIC1tcy10cmFuc2l0aW9uOiBvcGFj aXR5IDAuNHMgZWFzZS1pbjsKKyAgICAgIC1vLXRyYW5zaXRpb246IG9wYWNp dHkgMC40cyBlYXNlLWluOworICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAw LjRzIGVhc2UtaW47IH0KKyAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXc6bm90 KC5kei1wcm9jZXNzaW5nKSAuZHotcHJvZ3Jlc3MgeworICAgICAgLXdlYmtp dC1hbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7CisgICAgICAt bW96LWFuaW1hdGlvbjogcHVsc2UgNnMgZWFzZSBpbmZpbml0ZTsKKyAgICAg IC1tcy1hbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7CisgICAg ICAtby1hbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7CisgICAg ICBhbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7IH0KKyAgICAu ZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LXByb2dyZXNzIHsKKyAgICAgIG9w YWNpdHk6IDE7CisgICAgICB6LWluZGV4OiAxMDAwOworICAgICAgcG9pbnRl ci1ldmVudHM6IG5vbmU7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg ICAgICBoZWlnaHQ6IDE2cHg7CisgICAgICBsZWZ0OiA1MCU7CisgICAgICB0 b3A6IDUwJTsKKyAgICAgIG1hcmdpbi10b3A6IC04cHg7CisgICAgICB3aWR0 aDogODBweDsKKyAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDsKKyAgICAgIGJh Y2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKKyAgICAgIC13 ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAgIGJvcmRlci1yYWRp dXM6IDhweDsKKyAgICAgIG92ZXJmbG93OiBoaWRkZW47IH0KKyAgICAgIC5k cm9wem9uZSAuZHotcHJldmlldyAuZHotcHJvZ3Jlc3MgLmR6LXVwbG9hZCB7 CisgICAgICAgIGJhY2tncm91bmQ6ICMzMzM7CisgICAgICAgIGJhY2tncm91 bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM2NjYsICM0NDQpOwor ICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDogMDsK KyAgICAgICAgbGVmdDogMDsKKyAgICAgICAgYm90dG9tOiAwOworICAgICAg ICB3aWR0aDogMDsKKyAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0 aCAzMDBtcyBlYXNlLWluLW91dDsKKyAgICAgICAgLW1vei10cmFuc2l0aW9u OiB3aWR0aCAzMDBtcyBlYXNlLWluLW91dDsKKyAgICAgICAgLW1zLXRyYW5z aXRpb246IHdpZHRoIDMwMG1zIGVhc2UtaW4tb3V0OworICAgICAgICAtby10 cmFuc2l0aW9uOiB3aWR0aCAzMDBtcyBlYXNlLWluLW91dDsKKyAgICAgICAg dHJhbnNpdGlvbjogd2lkdGggMzAwbXMgZWFzZS1pbi1vdXQ7IH0KKyAgICAu ZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotZXJyb3IgLmR6LWVycm9yLW1lc3Nh Z2UgeworICAgICAgZGlzcGxheTogYmxvY2s7IH0KKyAgICAuZHJvcHpvbmUg LmR6LXByZXZpZXcuZHotZXJyb3I6aG92ZXIgLmR6LWVycm9yLW1lc3NhZ2Ug eworICAgICAgb3BhY2l0eTogMTsKKyAgICAgIHBvaW50ZXItZXZlbnRzOiBh dXRvOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1lcnJvci1t ZXNzYWdlIHsKKyAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOworICAgICAg ei1pbmRleDogMTAwMDsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg ICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgZGlzcGxheTogbm9uZTsKKyAg ICAgIG9wYWNpdHk6IDA7CisgICAgICAtd2Via2l0LXRyYW5zaXRpb246IG9w YWNpdHkgMC4zcyBlYXNlOworICAgICAgLW1vei10cmFuc2l0aW9uOiBvcGFj aXR5IDAuM3MgZWFzZTsKKyAgICAgIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5 IDAuM3MgZWFzZTsKKyAgICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4z cyBlYXNlOworICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7 CisgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CisgICAgICBmb250LXNpemU6 IDEzcHg7CisgICAgICB0b3A6IDEzMHB4OworICAgICAgbGVmdDogLTEwcHg7 CisgICAgICB3aWR0aDogMTQwcHg7CisgICAgICBiYWNrZ3JvdW5kOiAjYmUy NjI2OworICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJv dHRvbSwgI2JlMjYyNiwgI2E5MjIyMik7CisgICAgICBwYWRkaW5nOiAwLjVl bSAxLjJlbTsKKyAgICAgIGNvbG9yOiB3aGl0ZTsgfQorICAgICAgLmRyb3B6 b25lIC5kei1wcmV2aWV3IC5kei1lcnJvci1tZXNzYWdlOmFmdGVyIHsKKyAg ICAgICAgY29udGVudDogJyc7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0 ZTsKKyAgICAgICAgdG9wOiAtNnB4OworICAgICAgICBsZWZ0OiA2NHB4Owor ICAgICAgICB3aWR0aDogMDsKKyAgICAgICAgaGVpZ2h0OiAwOworICAgICAg ICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgICAg ICBib3JkZXItcmlnaHQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICAg ICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkICNiZTI2MjY7IH0KZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVzLmNzcyBi L3dlYi9wZ2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVzLmNzcwppbmRleCAw MGE5ODI5Li5kMzdkYjY0IDEwMDc1NQotLS0gYS93ZWIvcGdhZG1pbi9zdGF0 aWMvY3NzL292ZXJyaWRlcy5jc3MKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGlj L2Nzcy9vdmVycmlkZXMuY3NzCkBAIC0xMTA0LDQgKzExMDQsNTUgQEAgZGl2 LmJhY2tmb3JtX2NvbnRyb2xfbm90ZXMgbGFiZWwuY29udHJvbC1sYWJlbCB7 CiAKIGZvcm1bbmFtZT0iY2hhbmdlX3Bhc3N3b3JkX2Zvcm0iXSAuaGVscC1i bG9jayB7CiAgICAgY29sb3I6ICNBOTQ0NDIgIWltcG9ydGFudDsKLX0KXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CisKKworLmZpbGVfc2VsZWN0 aW9uX2N0cmwgLmNyZWF0ZV9pbnB1dCBzcGFuIHsKKyAgcGFkZGluZy1yaWdo dDogMTBweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5maWxlX3Nl bGVjdGlvbl9jdHJsIC5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJd IHsKKyAgaGVpZ2h0OiAyM3B4OworICBwYWRkaW5nOiAycHg7CisgIHdpZHRo OiAxOTRweDsKKyAgYm9yZGVyLXJhZGl1czogMnB4OworfQorCisuZmlsZV9z ZWxlY3Rpb25fY3RybCAuYnJvd3NlX2ZpbGVfaW5wdXQgeworICBkaXNwbGF5 OiBpbmxpbmUtYmxvY2s7CisgIHdpZHRoOiAyMjBweDsKKyAgbWFyZ2luLXJp Z2h0OiAwOworfQorCisuZmlsZV9zZWxlY3Rpb25fY3RybCBidXR0b24uc2Vs ZWN0X2l0ZW0geworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQ6 ICM3Nzc7CisgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50 KCM3NzcsICM5OTk5OTkpOworICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3Jh ZGllbnQoIzc3NywgIzk5OSk7CisgIGJhY2tncm91bmQ6IC1tb3otbGluZWFy LWdyYWRpZW50KCM3NzcsICM5OTkpOworICBiYWNrZ3JvdW5kOiBsaW5lYXIt Z3JhZGllbnQoIzc3NywgIzk5OSk7CisgIGNvbG9yOiAjZmZmOworICBwYWRk aW5nOiA5cHggMHB4IDlweCAwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7Cisg IG1hcmdpbi1yaWdodDogLTdweDsKKyAgbWFyZ2luLXRvcDogLTRweDsKKyAg bWluLXdpZHRoOiAzMHB4OworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAw OworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOworfQorCisuZmls ZV9zZWxlY3Rpb25fY3RybCBidXR0b24uc2VsZWN0X2l0ZW06Zm9jdXMsCisu ZmlsZV9zZWxlY3Rpb25fY3RybCBidXR0b24uc2VsZWN0X2l0ZW06YWN0aXZl IHsKKyAgb3V0bGluZTogbm9uZTsKKyAgYm94LXNoYWRvdzogbm9uZTsKK30K KworLmZpbGVfc2VsZWN0aW9uX2N0cmwgaW5wdXRbdHlwZT0idGV4dCJdIHsK KyAgd2lkdGg6IGNhbGMoMTAwJSAtIDE3cHgpOworICBib3JkZXI6IG5vbmU7 CisgIG1hcmdpbi1sZWZ0OiAtNnB4OworICBtYXJnaW4tdG9wOiAtM3B4Owor ICBoZWlnaHQ6IDMycHg7CisgIHBhZGRpbmctbGVmdDogNXB4OworfQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2tmb3JtLnBnYWRt aW4uanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0ucGdhZG1p bi5qcwppbmRleCAyMDFlY2MxLi4xMjVlMTMzIDEwMDY0NAotLS0gYS93ZWIv cGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0ucGdhZG1pbi5qcworKysgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0ucGdhZG1pbi5qcwpAQCAt MjAzOCw1ICsyMDM4LDcxIEBACiAgICAgXS5qb2luKCJcbiIpKQogICB9KTsK IAorICAvKgorICAqIElucHV0IEZpbGUgQ29udHJvbDogVGhpcyBjb250cm9s IGlzIHVzZWQgd2l0aCBTdG9yYWdlIE1hbmFnZXIgRGlhbG9nLAorICAqIEl0 IGFsbG93cyB1c2VyIHRvIHBlcmZvcm0gZm9sbG93aW5nIG9wZXJhdGlvbnM6 CisgICogLSBTZWxlY3QgRmlsZQorICAqIC0gU2VsZWN0IEZvbGRlcgorICAq IC0gQ3JlYXRlIEZpbGUKKyAgKiAtIE9wZW5pbmcgU3RvcmFnZSBNYW5hZ2Vy IERpYWxvZyBpdHNlbGYuCisgICovCisgIHZhciBGaWxlQ29udHJvbCA9IEJh Y2tmb3JtLkZpbGVDb250cm9sID0gQmFja2Zvcm0uSW5wdXRDb250cm9sLmV4 dGVuZCh7CisgICAgZGVmYXVsdHM6IHsKKyAgICAgIHR5cGU6ICJ0ZXh0IiwK KyAgICAgIGxhYmVsOiAiIiwKKyAgICAgIG1pbjogdW5kZWZpbmVkLAorICAg ICAgbWF4OiB1bmRlZmluZWQsCisgICAgICBtYXhsZW5ndGg6IDI1NSwKKyAg ICAgIGV4dHJhQ2xhc3NlczogW10sCisgICAgICBkaWFsb2dfdGl0bGU6ICcn LAorICAgICAgYnRuX3ByaW1hcnk6ICcnLAorICAgICAgaGVscE1lc3NhZ2U6 IG51bGwsCisgICAgICBkaWFsb2dfdHlwZTogJ3NlbGVjdF9maWxlJworICAg IH0sCisgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKyAgICAgIEJhY2tm b3JtLklucHV0Q29udHJvbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0 aGlzLCBhcmd1bWVudHMpOworCisgICAgICAvLyBMaXN0ZW4gY2xpY2sgZXZl bnRzIG9mIFN0b3JhZ2UgTWFuYWdlciBkaWFsb2cgYnV0dG9ucworICAgICAg cGdBZG1pbi5Ccm93c2VyLkV2ZW50cy5vbigncGdhZG1pbi1zdG9yYWdlOmZp bmlzaF9idG46Jyt0aGlzLmZpZWxkLmdldCgnZGlhbG9nX3R5cGUnKSwgdGhp cy5zdG9yYWdlX2RsZ19oYW5kZXIsIHRoaXMpOworICAgIH0sCisgICAgdGVt cGxhdGU6IF8udGVtcGxhdGUoWworICAgICAgJzxsYWJlbCBjbGFzcz0iPCU9 QmFja2Zvcm0uY29udHJvbExhYmVsQ2xhc3NOYW1lJT4iPjwlPWxhYmVsJT48 L2xhYmVsPicsCisgICAgICAnPGRpdiBjbGFzcz0iPCU9QmFja2Zvcm0uY29u dHJvbHNDbGFzc05hbWUlPiI+JywKKyAgICAgICAgJzxkaXYgY2xhc3M9ImZp bGVfc2VsZWN0aW9uX2N0cmwgZm9ybS1jb250cm9sIj4nLAorICAgICAgICAg ICc8aW5wdXQgdHlwZT0iPCU9dHlwZSU+IiBjbGFzcz0iYnJvd3NlX2ZpbGVf aW5wdXQgZm9ybS1jb250cm9sIDwlPWV4dHJhQ2xhc3Nlcy5qb2luKFwnIFwn KSU+IiBuYW1lPSI8JT1uYW1lJT4iIG1pbj0iPCU9bWluJT4iIG1heD0iPCU9 bWF4JT4ibWF4bGVuZ3RoPSI8JT1tYXhsZW5ndGglPiIgdmFsdWU9IjwlLXZh bHVlJT4iIHBsYWNlaG9sZGVyPSI8JS1wbGFjZWhvbGRlciU+IiA8JT1kaXNh YmxlZCA/ICJkaXNhYmxlZCIgOiAiIiU+IDwlPXJlcXVpcmVkID8gInJlcXVp cmVkIiA6ICIiJT4gLz4nLAorICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJi dG4gZmEgZmEtZWxsaXBzaXMtaCBzZWxlY3RfaXRlbSBwdWxsLXJpZ2h0IiA8 JT1kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIiU+ID48L2J1dHRvbj4nLAor ICAgICAgICAgICc8JSBpZiAoaGVscE1lc3NhZ2UgJiYgaGVscE1lc3NhZ2Uu bGVuZ3RoKSB7ICU+JywKKyAgICAgICAgICAnPHNwYW4gY2xhc3M9IjwlPUJh Y2tmb3JtLmhlbHBNZXNzYWdlQ2xhc3NOYW1lJT4iPjwlPWhlbHBNZXNzYWdl JT48L3NwYW4+JywKKyAgICAgICAgICAnPCUgfSAlPicsCisgICAgICAgICc8 L2Rpdj4nLAorICAgICAgJzwvZGl2PicKKyAgICBdLmpvaW4oIlxuIikpLAor ICAgIGV2ZW50czogeworICAgICAgImNsaWNrIC5zZWxlY3RfaXRlbSI6ICJv blNlbGVjdCIsCisgICAgfSwKKyAgICBvblNlbGVjdDogZnVuY3Rpb24oZSkg eworICAgICAgdmFyIGRpYWxvZ190eXBlID0gdGhpcy5maWVsZC5nZXQoJ2Rp YWxvZ190eXBlJyk7CisgICAgICAgICAgc3VwcF90eXBlcyA9IHRoaXMuZmll bGQuZ2V0KCdzdXBwX3R5cGVzJyksCisgICAgICAgICAgYnRuX3ByaW1hcnkg PSB0aGlzLmZpZWxkLmdldCgnYnRuX3ByaW1hcnknKSwKKyAgICAgICAgICBk aWFsb2dfdGl0bGUgPSB0aGlzLmZpZWxkLmdldCgnZGlhbG9nX3RpdGxlJyk7 CisgICAgICB2YXIgcGFyYW1zID0geworICAgICAgICBzdXBwb3J0ZWRfdHlw ZXM6IHN1cHBfdHlwZXMsCisgICAgICAgIGRpYWxvZ190eXBlOiBkaWFsb2df dHlwZSwKKyAgICAgICAgZGlhbG9nX3RpdGxlOiBkaWFsb2dfdGl0bGUsCisg ICAgICAgIGJ0bl9wcmltYXJ5OiBidG5fcHJpbWFyeQorICAgICAgfTsKKyAg ICAgIHBnQWRtaW4uRmlsZU1hbmFnZXIuaW5pdCgpOworICAgICAgcGdBZG1p bi5GaWxlTWFuYWdlci5zaG93X2RpYWxvZyhwYXJhbXMpOworICAgIH0sCisg ICAgc3RvcmFnZV9kbGdfaGFuZGVyOiBmdW5jdGlvbih2YWx1ZSkgeworICAg ICAgdmFyIGZpZWxkID0gXy5kZWZhdWx0cyh0aGlzLmZpZWxkLnRvSlNPTigp LCB0aGlzLmRlZmF1bHRzKSwKKyAgICAgICAgICBhdHRyQXJyID0gdGhpcy5m aWVsZC5nZXQoIm5hbWUiKS5zcGxpdCgnLicpLAorICAgICAgICAgIG5hbWUg PSBhdHRyQXJyLnNoaWZ0KCk7CisKKyAgICAgIC8vIFNldCBzZWxlY3RlZCB2 YWx1ZSBpbnRvIHRoZSBtb2RlbAorICAgICAgdGhpcy5tb2RlbC5zZXQobmFt ZSwgZGVjb2RlVVJJKHZhbHVlKSk7CisgICAgfQorICB9KTsKKwogICByZXR1 cm4gQmFja2Zvcm07CiB9KSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9z dGF0aWMvanMvanF1ZXJ5LmRyb3B6b25lL2Ryb3B6b25lLmpzIGIvd2ViL3Bn YWRtaW4vc3RhdGljL2pzL2pxdWVyeS5kcm9wem9uZS9kcm9wem9uZS5qcwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDVmMzllCi0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2pxdWVy eS5kcm9wem9uZS9kcm9wem9uZS5qcwpAQCAtMCwwICsxLDE3NjcgQEAKKwor LyoKKyAqCisgKiBNb3JlIGluZm8gYXQgW3d3dy5kcm9wem9uZWpzLmNvbV0o aHR0cDovL3d3dy5kcm9wem9uZWpzLmNvbSkKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTIsIE1hdGlhcyBNZW5vCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks IHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMK KyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqLwor CisoZnVuY3Rpb24oKSB7CisgIHZhciBEcm9wem9uZSwgRW1pdHRlciwgY2Ft ZWxpemUsIGNvbnRlbnRMb2FkZWQsIGRldGVjdFZlcnRpY2FsU3F1YXNoLCBk cmF3SW1hZ2VJT1NGaXgsIG5vb3AsIHdpdGhvdXQsCisgICAgX19zbGljZSA9 IFtdLnNsaWNlLAorICAgIF9faGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5 LAorICAgIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsg Zm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoX19oYXNQcm9wLmNhbGwo cGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVu Y3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0 b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90 eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnBy b3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9OworCisgIG5vb3AgPSBmdW5jdGlv bigpIHt9OworCisgIEVtaXR0ZXIgPSAoZnVuY3Rpb24oKSB7CisgICAgZnVu Y3Rpb24gRW1pdHRlcigpIHt9CisKKyAgICBFbWl0dGVyLnByb3RvdHlwZS5h ZGRFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub247CisKKyAg ICBFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50LCBmbikg eworICAgICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8 IHt9OworICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3NbZXZlbnRdKSB7Cisg ICAgICAgIHRoaXMuX2NhbGxiYWNrc1tldmVudF0gPSBbXTsKKyAgICAgIH0K KyAgICAgIHRoaXMuX2NhbGxiYWNrc1tldmVudF0ucHVzaChmbik7CisgICAg ICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgRW1pdHRlci5wcm90b3R5 cGUuZW1pdCA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGFyZ3MsIGNhbGxi YWNrLCBjYWxsYmFja3MsIGV2ZW50LCBfaSwgX2xlbjsKKyAgICAgIGV2ZW50 ID0gYXJndW1lbnRzWzBdLCBhcmdzID0gMiA8PSBhcmd1bWVudHMubGVuZ3Ro ID8gX19zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiBbXTsKKyAgICAgIHRo aXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTsKKyAgICAg IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07CisgICAgICBp ZiAoY2FsbGJhY2tzKSB7CisgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0g Y2FsbGJhY2tzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAg ICAgY2FsbGJhY2sgPSBjYWxsYmFja3NbX2ldOworICAgICAgICAgIGNhbGxi YWNrLmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAgICB9CisgICAgICB9Cisg ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgRW1pdHRlci5wcm90 b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7 CisKKyAgICBFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMg PSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7CisKKyAgICBFbWl0dGVyLnByb3Rv dHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUu b2ZmOworCisgICAgRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24o ZXZlbnQsIGZuKSB7CisgICAgICB2YXIgY2FsbGJhY2ssIGNhbGxiYWNrcywg aSwgX2ksIF9sZW47CisgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrcyB8fCBh cmd1bWVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHRoaXMuX2NhbGxi YWNrcyA9IHt9OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0KKyAg ICAgIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07CisgICAg ICBpZiAoIWNhbGxiYWNrcykgeworICAgICAgICByZXR1cm4gdGhpczsKKyAg ICAgIH0KKyAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7Cisg ICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdOworICAgICAg ICByZXR1cm4gdGhpczsKKyAgICAgIH0KKyAgICAgIGZvciAoaSA9IF9pID0g MCwgX2xlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IF9pIDwgX2xlbjsgaSA9ICsr X2kpIHsKKyAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFja3NbaV07CisgICAg ICAgIGlmIChjYWxsYmFjayA9PT0gZm4pIHsKKyAgICAgICAgICBjYWxsYmFj a3Muc3BsaWNlKGksIDEpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgICB9CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAg cmV0dXJuIEVtaXR0ZXI7CisKKyAgfSkoKTsKKworICBEcm9wem9uZSA9IChm dW5jdGlvbihfc3VwZXIpIHsKKyAgICB2YXIgZXh0ZW5kLCByZXNvbHZlT3B0 aW9uOworCisgICAgX19leHRlbmRzKERyb3B6b25lLCBfc3VwZXIpOworCisg ICAgRHJvcHpvbmUucHJvdG90eXBlLkVtaXR0ZXIgPSBFbWl0dGVyOworCisK KyAgICAvKgorICAgIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUg ZXZlbnRzIHlvdSBjYW4gcmVnaXN0ZXIgb24gYSBkcm9wem9uZSBvYmplY3Qu CisKKyAgICBZb3UgY2FuIHJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRsZXIgbGlr ZSB0aGlzOgorCisgICAgICAgIGRyb3B6b25lLm9uKCJkcmFnRW50ZXIiLCBm dW5jdGlvbigpIHsgfSk7CisgICAgICovCisKKyAgICBEcm9wem9uZS5wcm90 b3R5cGUuZXZlbnRzID0gWyJkcm9wIiwgImRyYWdzdGFydCIsICJkcmFnZW5k IiwgImRyYWdlbnRlciIsICJkcmFnb3ZlciIsICJkcmFnbGVhdmUiLCAiYWRk ZWRmaWxlIiwgImFkZGVkZmlsZXMiLCAicmVtb3ZlZGZpbGUiLCAidGh1bWJu YWlsIiwgImVycm9yIiwgImVycm9ybXVsdGlwbGUiLCAicHJvY2Vzc2luZyIs ICJwcm9jZXNzaW5nbXVsdGlwbGUiLCAidXBsb2FkcHJvZ3Jlc3MiLCAidG90 YWx1cGxvYWRwcm9ncmVzcyIsICJzZW5kaW5nIiwgInNlbmRpbmdtdWx0aXBs ZSIsICJzdWNjZXNzIiwgInN1Y2Nlc3NtdWx0aXBsZSIsICJjYW5jZWxlZCIs ICJjYW5jZWxlZG11bHRpcGxlIiwgImNvbXBsZXRlIiwgImNvbXBsZXRlbXVs dGlwbGUiLCAicmVzZXQiLCAibWF4ZmlsZXNleGNlZWRlZCIsICJtYXhmaWxl c3JlYWNoZWQiLCAicXVldWVjb21wbGV0ZSJdOworCisgICAgRHJvcHpvbmUu cHJvdG90eXBlLmRlZmF1bHRPcHRpb25zID0geworICAgICAgdXJsOiBudWxs LAorICAgICAgbWV0aG9kOiAicG9zdCIsCisgICAgICB3aXRoQ3JlZGVudGlh bHM6IGZhbHNlLAorICAgICAgcGFyYWxsZWxVcGxvYWRzOiAyLAorICAgICAg dXBsb2FkTXVsdGlwbGU6IGZhbHNlLAorICAgICAgbWF4RmlsZXNpemU6IDI1 NiwKKyAgICAgIHBhcmFtTmFtZTogImZpbGUiLAorICAgICAgY3JlYXRlSW1h Z2VUaHVtYm5haWxzOiB0cnVlLAorICAgICAgbWF4VGh1bWJuYWlsRmlsZXNp emU6IDEwLAorICAgICAgdGh1bWJuYWlsV2lkdGg6IDEyMCwKKyAgICAgIHRo dW1ibmFpbEhlaWdodDogMTIwLAorICAgICAgZmlsZXNpemVCYXNlOiAxMDAw LAorICAgICAgbWF4RmlsZXM6IG51bGwsCisgICAgICBwYXJhbXM6IHt9LAor ICAgICAgY2xpY2thYmxlOiB0cnVlLAorICAgICAgaWdub3JlSGlkZGVuRmls ZXM6IHRydWUsCisgICAgICBhY2NlcHRlZEZpbGVzOiBudWxsLAorICAgICAg YWNjZXB0ZWRNaW1lVHlwZXM6IG51bGwsCisgICAgICBhdXRvUHJvY2Vzc1F1 ZXVlOiB0cnVlLAorICAgICAgYXV0b1F1ZXVlOiB0cnVlLAorICAgICAgYWRk UmVtb3ZlTGlua3M6IGZhbHNlLAorICAgICAgcHJldmlld3NDb250YWluZXI6 IG51bGwsCisgICAgICBoaWRkZW5JbnB1dENvbnRhaW5lcjogImJvZHkiLAor ICAgICAgY2FwdHVyZTogbnVsbCwKKyAgICAgIHJlbmFtZUZpbGVuYW1lOiBu dWxsLAorICAgICAgZGljdERlZmF1bHRNZXNzYWdlOiAiRHJvcCBmaWxlcyBo ZXJlIHRvIHVwbG9hZCIsCisgICAgICBkaWN0RmFsbGJhY2tNZXNzYWdlOiAi WW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZHJhZyduJ2Ryb3AgZmls ZSB1cGxvYWRzLiIsCisgICAgICBkaWN0RmFsbGJhY2tUZXh0OiAiUGxlYXNl IHVzZSB0aGUgZmFsbGJhY2sgZm9ybSBiZWxvdyB0byB1cGxvYWQgeW91ciBm aWxlcyBsaWtlIGluIHRoZSBvbGRlbiBkYXlzLiIsCisgICAgICBkaWN0Rmls ZVRvb0JpZzogIkZpbGUgaXMgdG9vIGJpZyAoe3tmaWxlc2l6ZX19TWlCKS4g TWF4IGZpbGVzaXplOiB7e21heEZpbGVzaXplfX1NaUIuIiwKKyAgICAgIGRp Y3RJbnZhbGlkRmlsZVR5cGU6ICJZb3UgY2FuJ3QgdXBsb2FkIGZpbGVzIG9m IHRoaXMgdHlwZS4iLAorICAgICAgZGljdFJlc3BvbnNlRXJyb3I6ICJTZXJ2 ZXIgcmVzcG9uZGVkIHdpdGgge3tzdGF0dXNDb2RlfX0gY29kZS4iLAorICAg ICAgZGljdENhbmNlbFVwbG9hZDogIkNhbmNlbCB1cGxvYWQiLAorICAgICAg ZGljdENhbmNlbFVwbG9hZENvbmZpcm1hdGlvbjogIkFyZSB5b3Ugc3VyZSB5 b3Ugd2FudCB0byBjYW5jZWwgdGhpcyB1cGxvYWQ/IiwKKyAgICAgIGRpY3RS ZW1vdmVGaWxlOiAiUmVtb3ZlIGZpbGUiLAorICAgICAgZGljdFJlbW92ZUZp bGVDb25maXJtYXRpb246IG51bGwsCisgICAgICBkaWN0TWF4RmlsZXNFeGNl ZWRlZDogIllvdSBjYW4gbm90IHVwbG9hZCBhbnkgbW9yZSBmaWxlcy4iLAor ICAgICAgYWNjZXB0OiBmdW5jdGlvbihmaWxlLCBkb25lKSB7CisgICAgICAg IHJldHVybiBkb25lKCk7CisgICAgICB9LAorICAgICAgaW5pdDogZnVuY3Rp b24oKSB7CisgICAgICAgIHJldHVybiBub29wOworICAgICAgfSwKKyAgICAg IGZvcmNlRmFsbGJhY2s6IGZhbHNlLAorICAgICAgZmFsbGJhY2s6IGZ1bmN0 aW9uKCkgeworICAgICAgICB2YXIgY2hpbGQsIG1lc3NhZ2VFbGVtZW50LCBz cGFuLCBfaSwgX2xlbiwgX3JlZjsKKyAgICAgICAgdGhpcy5lbGVtZW50LmNs YXNzTmFtZSA9ICIiICsgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSArICIgZHot YnJvd3Nlci1ub3Qtc3VwcG9ydGVkIjsKKyAgICAgICAgX3JlZiA9IHRoaXMu ZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7CisgICAgICAg IGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsg X2krKykgeworICAgICAgICAgIGNoaWxkID0gX3JlZltfaV07CisgICAgICAg ICAgaWYgKC8oXnwgKWR6LW1lc3NhZ2UoJHwgKS8udGVzdChjaGlsZC5jbGFz c05hbWUpKSB7CisgICAgICAgICAgICBtZXNzYWdlRWxlbWVudCA9IGNoaWxk OworICAgICAgICAgICAgY2hpbGQuY2xhc3NOYW1lID0gImR6LW1lc3NhZ2Ui OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGlmICghbWVzc2FnZUVsZW1lbnQpIHsKKyAgICAgICAg ICBtZXNzYWdlRWxlbWVudCA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQoIjxk aXYgY2xhc3M9XCJkei1tZXNzYWdlXCI+PHNwYW4+PC9zcGFuPjwvZGl2PiIp OworICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtZXNzYWdl RWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgc3BhbiA9IG1lc3NhZ2VF bGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzcGFuIilbMF07CisgICAg ICAgIGlmIChzcGFuKSB7CisgICAgICAgICAgaWYgKHNwYW4udGV4dENvbnRl bnQgIT0gbnVsbCkgeworICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9 IHRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tNZXNzYWdlOworICAgICAgICAg IH0gZWxzZSBpZiAoc3Bhbi5pbm5lclRleHQgIT0gbnVsbCkgeworICAgICAg ICAgICAgc3Bhbi5pbm5lclRleHQgPSB0aGlzLm9wdGlvbnMuZGljdEZhbGxi YWNrTWVzc2FnZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmdldEZhbGxi YWNrRm9ybSgpKTsKKyAgICAgIH0sCisgICAgICByZXNpemU6IGZ1bmN0aW9u KGZpbGUpIHsKKyAgICAgICAgdmFyIGluZm8sIHNyY1JhdGlvLCB0cmdSYXRp bzsKKyAgICAgICAgaW5mbyA9IHsKKyAgICAgICAgICBzcmNYOiAwLAorICAg ICAgICAgIHNyY1k6IDAsCisgICAgICAgICAgc3JjV2lkdGg6IGZpbGUud2lk dGgsCisgICAgICAgICAgc3JjSGVpZ2h0OiBmaWxlLmhlaWdodAorICAgICAg ICB9OworICAgICAgICBzcmNSYXRpbyA9IGZpbGUud2lkdGggLyBmaWxlLmhl aWdodDsKKyAgICAgICAgaW5mby5vcHRXaWR0aCA9IHRoaXMub3B0aW9ucy50 aHVtYm5haWxXaWR0aDsKKyAgICAgICAgaW5mby5vcHRIZWlnaHQgPSB0aGlz Lm9wdGlvbnMudGh1bWJuYWlsSGVpZ2h0OworICAgICAgICBpZiAoKGluZm8u b3B0V2lkdGggPT0gbnVsbCkgJiYgKGluZm8ub3B0SGVpZ2h0ID09IG51bGwp KSB7CisgICAgICAgICAgaW5mby5vcHRXaWR0aCA9IGluZm8uc3JjV2lkdGg7 CisgICAgICAgICAgaW5mby5vcHRIZWlnaHQgPSBpbmZvLnNyY0hlaWdodDsK KyAgICAgICAgfSBlbHNlIGlmIChpbmZvLm9wdFdpZHRoID09IG51bGwpIHsK KyAgICAgICAgICBpbmZvLm9wdFdpZHRoID0gc3JjUmF0aW8gKiBpbmZvLm9w dEhlaWdodDsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLm9wdEhlaWdodCA9 PSBudWxsKSB7CisgICAgICAgICAgaW5mby5vcHRIZWlnaHQgPSAoMSAvIHNy Y1JhdGlvKSAqIGluZm8ub3B0V2lkdGg7CisgICAgICAgIH0KKyAgICAgICAg dHJnUmF0aW8gPSBpbmZvLm9wdFdpZHRoIC8gaW5mby5vcHRIZWlnaHQ7Cisg ICAgICAgIGlmIChmaWxlLmhlaWdodCA8IGluZm8ub3B0SGVpZ2h0IHx8IGZp bGUud2lkdGggPCBpbmZvLm9wdFdpZHRoKSB7CisgICAgICAgICAgaW5mby50 cmdIZWlnaHQgPSBpbmZvLnNyY0hlaWdodDsKKyAgICAgICAgICBpbmZvLnRy Z1dpZHRoID0gaW5mby5zcmNXaWR0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICBpZiAoc3JjUmF0aW8gPiB0cmdSYXRpbykgeworICAgICAgICAg ICAgaW5mby5zcmNIZWlnaHQgPSBmaWxlLmhlaWdodDsKKyAgICAgICAgICAg IGluZm8uc3JjV2lkdGggPSBpbmZvLnNyY0hlaWdodCAqIHRyZ1JhdGlvOwor ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbmZvLnNyY1dpZHRo ID0gZmlsZS53aWR0aDsKKyAgICAgICAgICAgIGluZm8uc3JjSGVpZ2h0ID0g aW5mby5zcmNXaWR0aCAvIHRyZ1JhdGlvOworICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBpbmZvLnNyY1ggPSAoZmlsZS53aWR0aCAtIGluZm8u c3JjV2lkdGgpIC8gMjsKKyAgICAgICAgaW5mby5zcmNZID0gKGZpbGUuaGVp Z2h0IC0gaW5mby5zcmNIZWlnaHQpIC8gMjsKKyAgICAgICAgcmV0dXJuIGlu Zm87CisgICAgICB9LAorCisgICAgICAvKgorICAgICAgVGhvc2UgZnVuY3Rp b25zIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgdG8gdGhlIGV2ZW50cyBvbiBpbml0 IGFuZCBoYW5kbGUgYWxsCisgICAgICB0aGUgdXNlciBpbnRlcmZhY2Ugc3Bl Y2lmaWMgc3R1ZmYuIE92ZXJ3cml0aW5nIHRoZW0gd29uJ3QgYnJlYWsgdGhl IHVwbG9hZAorICAgICAgYnV0IGNhbiBicmVhayB0aGUgd2F5IGl0J3MgZGlz cGxheWVkLgorICAgICAgWW91IGNhbiBvdmVyd3JpdGUgdGhlbSBpZiB5b3Ug ZG9uJ3QgbGlrZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSWYgeW91IGp1c3QK KyAgICAgIHdhbnQgdG8gYWRkIGFuIGFkZGl0aW9uYWwgZXZlbnQgaGFuZGxl ciwgcmVnaXN0ZXIgaXQgb24gdGhlIGRyb3B6b25lIG9iamVjdAorICAgICAg YW5kIGRvbid0IG92ZXJ3cml0ZSB0aG9zZSBvcHRpb25zLgorICAgICAgICov CisgICAgICBkcm9wOiBmdW5jdGlvbihlKSB7CisgICAgICAgIHJldHVybiB0 aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotZHJhZy1ob3ZlciIp OworICAgICAgfSwKKyAgICAgIGRyYWdzdGFydDogbm9vcCwKKyAgICAgIGRy YWdlbmQ6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxl bWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1kcmFnLWhvdmVyIik7CisgICAg ICB9LAorICAgICAgZHJhZ2VudGVyOiBmdW5jdGlvbihlKSB7CisgICAgICAg IHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotZHJhZy1o b3ZlciIpOworICAgICAgfSwKKyAgICAgIGRyYWdvdmVyOiBmdW5jdGlvbihl KSB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFk ZCgiZHotZHJhZy1ob3ZlciIpOworICAgICAgfSwKKyAgICAgIGRyYWdsZWF2 ZTogZnVuY3Rpb24oZSkgeworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50 LmNsYXNzTGlzdC5yZW1vdmUoImR6LWRyYWctaG92ZXIiKTsKKyAgICAgIH0s CisgICAgICBwYXN0ZTogbm9vcCwKKyAgICAgIHJlc2V0OiBmdW5jdGlvbigp IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVt b3ZlKCJkei1zdGFydGVkIik7CisgICAgICB9LAorICAgICAgYWRkZWRmaWxl OiBmdW5jdGlvbihmaWxlKSB7CisgICAgICAgIHZhciBub2RlLCByZW1vdmVG aWxlRXZlbnQsIHJlbW92ZUxpbmssIF9pLCBfaiwgX2ssIF9sZW4sIF9sZW4x LCBfbGVuMiwgX3JlZiwgX3JlZjEsIF9yZWYyLCBfcmVzdWx0czsKKyAgICAg ICAgaWYgKHRoaXMuZWxlbWVudCA9PT0gdGhpcy5wcmV2aWV3c0NvbnRhaW5l cikgeworICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJk ei1zdGFydGVkIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMucHJl dmlld3NDb250YWluZXIpIHsKKyAgICAgICAgICBmaWxlLnByZXZpZXdFbGVt ZW50ID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMucHJl dmlld1RlbXBsYXRlLnRyaW0oKSk7CisgICAgICAgICAgZmlsZS5wcmV2aWV3 VGVtcGxhdGUgPSBmaWxlLnByZXZpZXdFbGVtZW50OworICAgICAgICAgIHRo aXMucHJldmlld3NDb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsZS5wcmV2aWV3 RWxlbWVudCk7CisgICAgICAgICAgX3JlZiA9IGZpbGUucHJldmlld0VsZW1l bnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtZHotbmFtZV0iKTsKKyAgICAg ICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9s ZW47IF9pKyspIHsKKyAgICAgICAgICAgIG5vZGUgPSBfcmVmW19pXTsKKyAg ICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSB0aGlzLl9yZW5hbWVGaWxl bmFtZShmaWxlLm5hbWUpOworICAgICAgICAgIH0KKyAgICAgICAgICBfcmVm MSA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2Rh dGEtZHotc2l6ZV0iKTsKKyAgICAgICAgICBmb3IgKF9qID0gMCwgX2xlbjEg PSBfcmVmMS5sZW5ndGg7IF9qIDwgX2xlbjE7IF9qKyspIHsKKyAgICAgICAg ICAgIG5vZGUgPSBfcmVmMVtfal07CisgICAgICAgICAgICBub2RlLmlubmVy SFRNTCA9IHRoaXMuZmlsZXNpemUoZmlsZS5zaXplKTsKKyAgICAgICAgICB9 CisgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRSZW1vdmVMaW5rcykg eworICAgICAgICAgICAgZmlsZS5fcmVtb3ZlTGluayA9IERyb3B6b25lLmNy ZWF0ZUVsZW1lbnQoIjxhIGNsYXNzPVwiZHotcmVtb3ZlXCIgaHJlZj1cImph dmFzY3JpcHQ6dW5kZWZpbmVkO1wiIGRhdGEtZHotcmVtb3ZlPiIgKyB0aGlz Lm9wdGlvbnMuZGljdFJlbW92ZUZpbGUgKyAiPC9hPiIpOworICAgICAgICAg ICAgZmlsZS5wcmV2aWV3RWxlbWVudC5hcHBlbmRDaGlsZChmaWxlLl9yZW1v dmVMaW5rKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVtb3ZlRmlsZUV2 ZW50ID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgICAgICByZXR1cm4g ZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0 KCk7CisgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAg ICAgICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuVVBMT0FE SU5HKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERyb3B6b25lLmNvbmZp cm0oX3RoaXMub3B0aW9ucy5kaWN0Q2FuY2VsVXBsb2FkQ29uZmlybWF0aW9u LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhp cy5yZW1vdmVGaWxlKGZpbGUpOworICAgICAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChfdGhp cy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uKSB7CisgICAg ICAgICAgICAgICAgICByZXR1cm4gRHJvcHpvbmUuY29uZmlybShfdGhpcy5v cHRpb25zLmRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uLCBmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnJlbW92ZUZp bGUoZmlsZSk7CisgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlz LnJlbW92ZUZpbGUoZmlsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgIH0pKHRoaXMp OworICAgICAgICAgIF9yZWYyID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVy eVNlbGVjdG9yQWxsKCJbZGF0YS1kei1yZW1vdmVdIik7CisgICAgICAgICAg X3Jlc3VsdHMgPSBbXTsKKyAgICAgICAgICBmb3IgKF9rID0gMCwgX2xlbjIg PSBfcmVmMi5sZW5ndGg7IF9rIDwgX2xlbjI7IF9rKyspIHsKKyAgICAgICAg ICAgIHJlbW92ZUxpbmsgPSBfcmVmMltfa107CisgICAgICAgICAgICBfcmVz dWx0cy5wdXNoKHJlbW92ZUxpbmsuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si LCByZW1vdmVGaWxlRXZlbnQpKTsKKyAgICAgICAgICB9CisgICAgICAgICAg cmV0dXJuIF9yZXN1bHRzOworICAgICAgICB9CisgICAgICB9LAorICAgICAg cmVtb3ZlZGZpbGU6IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAgdmFyIF9y ZWY7CisgICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7CisgICAg ICAgICAgaWYgKChfcmVmID0gZmlsZS5wcmV2aWV3RWxlbWVudCkgIT0gbnVs bCkgeworICAgICAgICAgICAgX3JlZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KGZpbGUucHJldmlld0VsZW1lbnQpOworICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlTWF4RmlsZXNSZWFjaGVk Q2xhc3MoKTsKKyAgICAgIH0sCisgICAgICB0aHVtYm5haWw6IGZ1bmN0aW9u KGZpbGUsIGRhdGFVcmwpIHsKKyAgICAgICAgdmFyIHRodW1ibmFpbEVsZW1l bnQsIF9pLCBfbGVuLCBfcmVmOworICAgICAgICBpZiAoZmlsZS5wcmV2aWV3 RWxlbWVudCkgeworICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xh c3NMaXN0LnJlbW92ZSgiZHotZmlsZS1wcmV2aWV3Iik7CisgICAgICAgICAg X3JlZiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgi W2RhdGEtZHotdGh1bWJuYWlsXSIpOworICAgICAgICAgIGZvciAoX2kgPSAw LCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAg ICAgICAgICAgdGh1bWJuYWlsRWxlbWVudCA9IF9yZWZbX2ldOworICAgICAg ICAgICAgdGh1bWJuYWlsRWxlbWVudC5hbHQgPSBmaWxlLm5hbWU7CisgICAg ICAgICAgICB0aHVtYm5haWxFbGVtZW50LnNyYyA9IGRhdGFVcmw7CisgICAg ICAgICAgfQorICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgoZnVuY3Rp b24oX3RoaXMpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsK KyAgICAgICAgICAgICAgcmV0dXJuIGZpbGUucHJldmlld0VsZW1lbnQuY2xh c3NMaXN0LmFkZCgiZHotaW1hZ2UtcHJldmlldyIpOworICAgICAgICAgICAg fTsKKyAgICAgICAgICB9KSh0aGlzKSksIDEpOworICAgICAgICB9CisgICAg ICB9LAorICAgICAgZXJyb3I6IGZ1bmN0aW9uKGZpbGUsIG1lc3NhZ2UpIHsK KyAgICAgICAgdmFyIG5vZGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsK KyAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHsKKyAgICAgICAg ICBmaWxlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LWVycm9y Iik7CisgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSAiU3RyaW5n IiAmJiBtZXNzYWdlLmVycm9yKSB7CisgICAgICAgICAgICBtZXNzYWdlID0g bWVzc2FnZS5lcnJvcjsKKyAgICAgICAgICB9CisgICAgICAgICAgX3JlZiA9 IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEt ZHotZXJyb3JtZXNzYWdlXSIpOworICAgICAgICAgIF9yZXN1bHRzID0gW107 CisgICAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsg X2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgICAgICBub2RlID0gX3JlZltf aV07CisgICAgICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUudGV4dENvbnRl bnQgPSBtZXNzYWdlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJu IF9yZXN1bHRzOworICAgICAgICB9CisgICAgICB9LAorICAgICAgZXJyb3Jt dWx0aXBsZTogbm9vcCwKKyAgICAgIHByb2Nlc3Npbmc6IGZ1bmN0aW9uKGZp bGUpIHsKKyAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHsKKyAg ICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6 LXByb2Nlc3NpbmciKTsKKyAgICAgICAgICBpZiAoZmlsZS5fcmVtb3ZlTGlu aykgeworICAgICAgICAgICAgcmV0dXJuIGZpbGUuX3JlbW92ZUxpbmsudGV4 dENvbnRlbnQgPSB0aGlzLm9wdGlvbnMuZGljdENhbmNlbFVwbG9hZDsKKyAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBwcm9jZXNz aW5nbXVsdGlwbGU6IG5vb3AsCisgICAgICB1cGxvYWRwcm9ncmVzczogZnVu Y3Rpb24oZmlsZSwgcHJvZ3Jlc3MsIGJ5dGVzU2VudCkgeworICAgICAgICB2 YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgICBp ZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkgeworICAgICAgICAgIF9yZWYgPSBm aWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6 LXVwbG9hZHByb2dyZXNzXSIpOworICAgICAgICAgIF9yZXN1bHRzID0gW107 CisgICAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsg X2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgICAgICBub2RlID0gX3JlZltf aV07CisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1BST0dS RVNTJykgeworICAgICAgICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUudmFs dWUgPSBwcm9ncmVzcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUuc3R5bGUud2lkdGggPSAiIiAr IHByb2dyZXNzICsgIiUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9 CisgICAgICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgICAgICB9CisgICAg ICB9LAorICAgICAgdG90YWx1cGxvYWRwcm9ncmVzczogbm9vcCwKKyAgICAg IHNlbmRpbmc6IG5vb3AsCisgICAgICBzZW5kaW5nbXVsdGlwbGU6IG5vb3As CisgICAgICBzdWNjZXNzOiBmdW5jdGlvbihmaWxlKSB7CisgICAgICAgIGlm IChmaWxlLnByZXZpZXdFbGVtZW50KSB7CisgICAgICAgICAgcmV0dXJuIGZp bGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotc3VjY2VzcyIp OworICAgICAgICB9CisgICAgICB9LAorICAgICAgc3VjY2Vzc211bHRpcGxl OiBub29wLAorICAgICAgY2FuY2VsZWQ6IGZ1bmN0aW9uKGZpbGUpIHsKKyAg ICAgICAgcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLCBmaWxlLCAiVXBsb2Fk IGNhbmNlbGVkLiIpOworICAgICAgfSwKKyAgICAgIGNhbmNlbGVkbXVsdGlw bGU6IG5vb3AsCisgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oZmlsZSkgewor ICAgICAgICBpZiAoZmlsZS5fcmVtb3ZlTGluaykgeworICAgICAgICAgIGZp bGUuX3JlbW92ZUxpbmsudGV4dENvbnRlbnQgPSB0aGlzLm9wdGlvbnMuZGlj dFJlbW92ZUZpbGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbGUucHJl dmlld0VsZW1lbnQpIHsKKyAgICAgICAgICByZXR1cm4gZmlsZS5wcmV2aWV3 RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1jb21wbGV0ZSIpOworICAgICAg ICB9CisgICAgICB9LAorICAgICAgY29tcGxldGVtdWx0aXBsZTogbm9vcCwK KyAgICAgIG1heGZpbGVzZXhjZWVkZWQ6IG5vb3AsCisgICAgICBtYXhmaWxl c3JlYWNoZWQ6IG5vb3AsCisgICAgICBxdWV1ZWNvbXBsZXRlOiBub29wLAor ICAgICAgYWRkZWRmaWxlczogbm9vcCwKKyAgICAgIHByZXZpZXdUZW1wbGF0 ZTogIjxkaXYgY2xhc3M9XCJkei1wcmV2aWV3IGR6LWZpbGUtcHJldmlld1wi PlxuICA8ZGl2IGNsYXNzPVwiZHotaW1hZ2VcIj48aW1nIGRhdGEtZHotdGh1 bWJuYWlsIC8+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkei1kZXRhaWxzXCI+ XG4gICAgPGRpdiBjbGFzcz1cImR6LXNpemVcIj48c3BhbiBkYXRhLWR6LXNp emU+PC9zcGFuPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkei1maWxlbmFt ZVwiPjxzcGFuIGRhdGEtZHotbmFtZT48L3NwYW4+PC9kaXY+XG4gIDwvZGl2 PlxuICA8ZGl2IGNsYXNzPVwiZHotcHJvZ3Jlc3NcIj48c3BhbiBjbGFzcz1c ImR6LXVwbG9hZFwiIGRhdGEtZHotdXBsb2FkcHJvZ3Jlc3M+PC9zcGFuPjwv ZGl2PlxuICA8ZGl2IGNsYXNzPVwiZHotZXJyb3ItbWVzc2FnZVwiPjxzcGFu IGRhdGEtZHotZXJyb3JtZXNzYWdlPjwvc3Bhbj48L2Rpdj5cbiAgPGRpdiBj bGFzcz1cImR6LXN1Y2Nlc3MtbWFya1wiPlxuICAgIDxzdmcgd2lkdGg9XCI1 NHB4XCIgaGVpZ2h0PVwiNTRweFwiIHZpZXdCb3g9XCIwIDAgNTQgNTRcIiB2 ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAw L3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94 bGlua1wiIHhtbG5zOnNrZXRjaD1cImh0dHA6Ly93d3cuYm9oZW1pYW5jb2Rp bmcuY29tL3NrZXRjaC9uc1wiPlxuICAgICAgPHRpdGxlPkNoZWNrPC90aXRs ZT5cbiAgICAgIDxkZWZzPjwvZGVmcz5cbiAgICAgIDxnIGlkPVwiUGFnZS0x XCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwi bm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBza2V0Y2g6dHlwZT1cIk1T UGFnZVwiPlxuICAgICAgICA8cGF0aCBkPVwiTTIzLjUsMzEuODQzMTQ1OCBM MTcuNTg1MjQxOSwyNS45MjgzODc3IEMxNi4wMjQ4MjUzLDI0LjM2Nzk3MTEg MTMuNDkxMDI5NCwyNC4zNjY4MzUgMTEuOTI4OTMyMiwyNS45Mjg5MzIyIEMx MC4zNzAwMTM2LDI3LjQ4Nzg1MDggMTAuMzY2NTkxMiwzMC4wMjM0NDU1IDEx LjkyODM4NzcsMzEuNTg1MjQxOSBMMjAuNDE0NzU4MSw0MC4wNzE2MTIzIEMy MC41MTMzOTk5LDQwLjE3MDI1NDEgMjAuNjE1OTMxNSw0MC4yNjI2NjQ5IDIw LjcyMTg2MTUsNDAuMzQ4ODQzNSBDMjIuMjgzNTY2OSw0MS44NzI1NjUxIDI0 Ljc5NDIzNCw0MS44NjI2MjAyIDI2LjM0NjE1NjQsNDAuMzEwNjk3OCBMNDMu MzEwNjk3OCwyMy4zNDYxNTY0IEM0NC44NzcxMDIxLDIxLjc3OTc1MjEgNDQu ODc1ODA1NywxOS4yNDgzODg3IDQzLjMxMzcwODUsMTcuNjg2MjkxNSBDNDEu NzU0Nzg5OSwxNi4xMjczNzI5IDM5LjIxNzYwMzUsMTYuMTI1NTQyMiAzNy42 NTM4NDM2LDE3LjY4OTMwMjIgTDIzLjUsMzEuODQzMTQ1OCBaIE0yNyw1MyBD NDEuMzU5NDAzNSw1MyA1Myw0MS4zNTk0MDM1IDUzLDI3IEM1MywxMi42NDA1 OTY1IDQxLjM1OTQwMzUsMSAyNywxIEMxMi42NDA1OTY1LDEgMSwxMi42NDA1 OTY1IDEsMjcgQzEsNDEuMzU5NDAzNSAxMi42NDA1OTY1LDUzIDI3LDUzIFpc IiBpZD1cIk92YWwtMlwiIHN0cm9rZS1vcGFjaXR5PVwiMC4xOTg3OTQxNThc IiBzdHJva2U9XCIjNzQ3NDc0XCIgZmlsbC1vcGFjaXR5PVwiMC44MTY1MTk0 NzVcIiBmaWxsPVwiI0ZGRkZGRlwiIHNrZXRjaDp0eXBlPVwiTVNTaGFwZUdy b3VwXCI+PC9wYXRoPlxuICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuICA8L2Rp dj5cbiAgPGRpdiBjbGFzcz1cImR6LWVycm9yLW1hcmtcIj5cbiAgICA8c3Zn IHdpZHRoPVwiNTRweFwiIGhlaWdodD1cIjU0cHhcIiB2aWV3Qm94PVwiMCAw IDU0IDU0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53 My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMu b3JnLzE5OTkveGxpbmtcIiB4bWxuczpza2V0Y2g9XCJodHRwOi8vd3d3LmJv aGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnNcIj5cbiAgICAgIDx0aXRsZT5F cnJvcjwvdGl0bGU+XG4gICAgICA8ZGVmcz48L2RlZnM+XG4gICAgICA8ZyBp ZD1cIlBhZ2UtMVwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIx XCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIgc2tldGNo OnR5cGU9XCJNU1BhZ2VcIj5cbiAgICAgICAgPGcgaWQ9XCJDaGVjay0rLU92 YWwtMlwiIHNrZXRjaDp0eXBlPVwiTVNMYXllckdyb3VwXCIgc3Ryb2tlPVwi Izc0NzQ3NFwiIHN0cm9rZS1vcGFjaXR5PVwiMC4xOTg3OTQxNThcIiBmaWxs PVwiI0ZGRkZGRlwiIGZpbGwtb3BhY2l0eT1cIjAuODE2NTE5NDc1XCI+XG4g ICAgICAgICAgPHBhdGggZD1cIk0zMi42NTY4NTQyLDI5IEwzOC4zMTA2OTc4 LDIzLjM0NjE1NjQgQzM5Ljg3NzEwMjEsMjEuNzc5NzUyMSAzOS44NzU4MDU3 LDE5LjI0ODM4ODcgMzguMzEzNzA4NSwxNy42ODYyOTE1IEMzNi43NTQ3ODk5 LDE2LjEyNzM3MjkgMzQuMjE3NjAzNSwxNi4xMjU1NDIyIDMyLjY1Mzg0MzYs MTcuNjg5MzAyMiBMMjcsMjMuMzQzMTQ1OCBMMjEuMzQ2MTU2NCwxNy42ODkz MDIyIEMxOS43ODIzOTY1LDE2LjEyNTU0MjIgMTcuMjQ1MjEwMSwxNi4xMjcz NzI5IDE1LjY4NjI5MTUsMTcuNjg2MjkxNSBDMTQuMTI0MTk0MywxOS4yNDgz ODg3IDE0LjEyMjg5NzksMjEuNzc5NzUyMSAxNS42ODkzMDIyLDIzLjM0NjE1 NjQgTDIxLjM0MzE0NTgsMjkgTDE1LjY4OTMwMjIsMzQuNjUzODQzNiBDMTQu MTIyODk3OSwzNi4yMjAyNDc5IDE0LjEyNDE5NDMsMzguNzUxNjExMyAxNS42 ODYyOTE1LDQwLjMxMzcwODUgQzE3LjI0NTIxMDEsNDEuODcyNjI3MSAxOS43 ODIzOTY1LDQxLjg3NDQ1NzggMjEuMzQ2MTU2NCw0MC4zMTA2OTc4IEwyNywz NC42NTY4NTQyIEwzMi42NTM4NDM2LDQwLjMxMDY5NzggQzM0LjIxNzYwMzUs NDEuODc0NDU3OCAzNi43NTQ3ODk5LDQxLjg3MjYyNzEgMzguMzEzNzA4NSw0 MC4zMTM3MDg1IEMzOS44NzU4MDU3LDM4Ljc1MTYxMTMgMzkuODc3MTAyMSwz Ni4yMjAyNDc5IDM4LjMxMDY5NzgsMzQuNjUzODQzNiBMMzIuNjU2ODU0Miwy OSBaIE0yNyw1MyBDNDEuMzU5NDAzNSw1MyA1Myw0MS4zNTk0MDM1IDUzLDI3 IEM1MywxMi42NDA1OTY1IDQxLjM1OTQwMzUsMSAyNywxIEMxMi42NDA1OTY1 LDEgMSwxMi42NDA1OTY1IDEsMjcgQzEsNDEuMzU5NDAzNSAxMi42NDA1OTY1 LDUzIDI3LDUzIFpcIiBpZD1cIk92YWwtMlwiIHNrZXRjaDp0eXBlPVwiTVNT aGFwZUdyb3VwXCI+PC9wYXRoPlxuICAgICAgICA8L2c+XG4gICAgICA8L2c+ XG4gICAgPC9zdmc+XG4gIDwvZGl2PlxuPC9kaXY+IgorICAgIH07CisKKyAg ICBleHRlbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBrZXksIG9iamVj dCwgb2JqZWN0cywgdGFyZ2V0LCB2YWwsIF9pLCBfbGVuOworICAgICAgdGFy Z2V0ID0gYXJndW1lbnRzWzBdLCBvYmplY3RzID0gMiA8PSBhcmd1bWVudHMu bGVuZ3RoID8gX19zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiBbXTsKKyAg ICAgIGZvciAoX2kgPSAwLCBfbGVuID0gb2JqZWN0cy5sZW5ndGg7IF9pIDwg X2xlbjsgX2krKykgeworICAgICAgICBvYmplY3QgPSBvYmplY3RzW19pXTsK KyAgICAgICAgZm9yIChrZXkgaW4gb2JqZWN0KSB7CisgICAgICAgICAgdmFs ID0gb2JqZWN0W2tleV07CisgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7 CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiB0YXJnZXQ7Cisg ICAgfTsKKworICAgIGZ1bmN0aW9uIERyb3B6b25lKGVsZW1lbnQsIG9wdGlv bnMpIHsKKyAgICAgIHZhciBlbGVtZW50T3B0aW9ucywgZmFsbGJhY2ssIF9y ZWY7CisgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OworICAgICAgdGhp cy52ZXJzaW9uID0gRHJvcHpvbmUudmVyc2lvbjsKKyAgICAgIHRoaXMuZGVm YXVsdE9wdGlvbnMucHJldmlld1RlbXBsYXRlID0gdGhpcy5kZWZhdWx0T3B0 aW9ucy5wcmV2aWV3VGVtcGxhdGUucmVwbGFjZSgvXG4qL2csICIiKTsKKyAg ICAgIHRoaXMuY2xpY2thYmxlRWxlbWVudHMgPSBbXTsKKyAgICAgIHRoaXMu bGlzdGVuZXJzID0gW107CisgICAgICB0aGlzLmZpbGVzID0gW107CisgICAg ICBpZiAodHlwZW9mIHRoaXMuZWxlbWVudCA9PT0gInN0cmluZyIpIHsKKyAg ICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0 aGlzLmVsZW1lbnQpOworICAgICAgfQorICAgICAgaWYgKCEodGhpcy5lbGVt ZW50ICYmICh0aGlzLmVsZW1lbnQubm9kZVR5cGUgIT0gbnVsbCkpKSB7Cisg ICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkcm9wem9uZSBlbGVt ZW50LiIpOworICAgICAgfQorICAgICAgaWYgKHRoaXMuZWxlbWVudC5kcm9w em9uZSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRyb3B6b25lIGFs cmVhZHkgYXR0YWNoZWQuIik7CisgICAgICB9CisgICAgICBEcm9wem9uZS5p bnN0YW5jZXMucHVzaCh0aGlzKTsKKyAgICAgIHRoaXMuZWxlbWVudC5kcm9w em9uZSA9IHRoaXM7CisgICAgICBlbGVtZW50T3B0aW9ucyA9IChfcmVmID0g RHJvcHpvbmUub3B0aW9uc0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSkgIT0g bnVsbCA/IF9yZWYgOiB7fTsKKyAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVu ZCh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgZWxlbWVudE9wdGlvbnMsIG9w dGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMgOiB7fSk7CisgICAgICBpZiAodGhp cy5vcHRpb25zLmZvcmNlRmFsbGJhY2sgfHwgIURyb3B6b25lLmlzQnJvd3Nl clN1cHBvcnRlZCgpKSB7CisgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMu ZmFsbGJhY2suY2FsbCh0aGlzKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlz Lm9wdGlvbnMudXJsID09IG51bGwpIHsKKyAgICAgICAgdGhpcy5vcHRpb25z LnVybCA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOwor ICAgICAgfQorICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudXJsKSB7CisgICAg ICAgIHRocm93IG5ldyBFcnJvcigiTm8gVVJMIHByb3ZpZGVkLiIpOworICAg ICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzICYm IHRoaXMub3B0aW9ucy5hY2NlcHRlZE1pbWVUeXBlcykgeworICAgICAgICB0 aHJvdyBuZXcgRXJyb3IoIllvdSBjYW4ndCBwcm92aWRlIGJvdGggJ2FjY2Vw dGVkRmlsZXMnIGFuZCAnYWNjZXB0ZWRNaW1lVHlwZXMnLiAnYWNjZXB0ZWRN aW1lVHlwZXMnIGlzIGRlcHJlY2F0ZWQuIik7CisgICAgICB9CisgICAgICBp ZiAodGhpcy5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzKSB7CisgICAgICAg IHRoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzID0gdGhpcy5vcHRpb25zLmFj Y2VwdGVkTWltZVR5cGVzOworICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25z LmFjY2VwdGVkTWltZVR5cGVzOworICAgICAgfQorICAgICAgdGhpcy5vcHRp b25zLm1ldGhvZCA9IHRoaXMub3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2Uo KTsKKyAgICAgIGlmICgoZmFsbGJhY2sgPSB0aGlzLmdldEV4aXN0aW5nRmFs bGJhY2soKSkgJiYgZmFsbGJhY2sucGFyZW50Tm9kZSkgeworICAgICAgICBm YWxsYmFjay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZhbGxiYWNrKTsKKyAg ICAgIH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmlld3NDb250YWlu ZXIgIT09IGZhbHNlKSB7CisgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucHJl dmlld3NDb250YWluZXIpIHsKKyAgICAgICAgICB0aGlzLnByZXZpZXdzQ29u dGFpbmVyID0gRHJvcHpvbmUuZ2V0RWxlbWVudCh0aGlzLm9wdGlvbnMucHJl dmlld3NDb250YWluZXIsICJwcmV2aWV3c0NvbnRhaW5lciIpOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgIHRoaXMucHJldmlld3NDb250YWluZXIg PSB0aGlzLmVsZW1lbnQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlm ICh0aGlzLm9wdGlvbnMuY2xpY2thYmxlKSB7CisgICAgICAgIGlmICh0aGlz Lm9wdGlvbnMuY2xpY2thYmxlID09PSB0cnVlKSB7CisgICAgICAgICAgdGhp cy5jbGlja2FibGVFbGVtZW50cyA9IFt0aGlzLmVsZW1lbnRdOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuY2xpY2thYmxlRWxlbWVudHMg PSBEcm9wem9uZS5nZXRFbGVtZW50cyh0aGlzLm9wdGlvbnMuY2xpY2thYmxl LCAiY2xpY2thYmxlIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHRo aXMuaW5pdCgpOworICAgIH0KKworICAgIERyb3B6b25lLnByb3RvdHlwZS5n ZXRBY2NlcHRlZEZpbGVzID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZmls ZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRo aXMuZmlsZXM7CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChf aSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7 CisgICAgICAgIGZpbGUgPSBfcmVmW19pXTsKKyAgICAgICAgaWYgKGZpbGUu YWNjZXB0ZWQpIHsKKyAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpOwor ICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRSZWplY3RlZEZp bGVzID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZmlsZSwgX2ksIF9sZW4s IF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMuZmlsZXM7Cisg ICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4g PSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZp bGUgPSBfcmVmW19pXTsKKyAgICAgICAgaWYgKCFmaWxlLmFjY2VwdGVkKSB7 CisgICAgICAgICAgX3Jlc3VsdHMucHVzaChmaWxlKTsKKyAgICAgICAgfQor ICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0RmlsZXNXaXRoU3RhdHVzID0gZnVu Y3Rpb24oc3RhdHVzKSB7CisgICAgICB2YXIgZmlsZSwgX2ksIF9sZW4sIF9y ZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMuZmlsZXM7CisgICAg ICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBf cmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZpbGUg PSBfcmVmW19pXTsKKyAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBzdGF0 dXMpIHsKKyAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpOworICAgICAg ICB9CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsK KworICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRRdWV1ZWRGaWxlcyA9IGZ1 bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZXNXaXRoU3Rh dHVzKERyb3B6b25lLlFVRVVFRCk7CisgICAgfTsKKworICAgIERyb3B6b25l LnByb3RvdHlwZS5nZXRVcGxvYWRpbmdGaWxlcyA9IGZ1bmN0aW9uKCkgewor ICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZXNXaXRoU3RhdHVzKERyb3B6b25l LlVQTE9BRElORyk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlw ZS5nZXRBZGRlZEZpbGVzID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4g dGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoRHJvcHpvbmUuQURERUQpOworICAg IH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0QWN0aXZlRmlsZXMg PSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3Jl ZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5maWxlczsKKyAgICAg IF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9y ZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZmlsZSA9 IF9yZWZbX2ldOworICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09IERyb3B6 b25lLlVQTE9BRElORyB8fCBmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuUVVF VUVEKSB7CisgICAgICAgICAgX3Jlc3VsdHMucHVzaChmaWxlKTsKKyAgICAg ICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkg eworICAgICAgdmFyIGV2ZW50TmFtZSwgbm9Qcm9wYWdhdGlvbiwgc2V0dXBI aWRkZW5GaWxlSW5wdXQsIF9pLCBfbGVuLCBfcmVmLCBfcmVmMTsKKyAgICAg IGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZSA9PT0gImZvcm0iKSB7CisgICAg ICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImVuY3R5cGUiLCAibXVs dGlwYXJ0L2Zvcm0tZGF0YSIpOworICAgICAgfQorICAgICAgaWYgKHRoaXMu ZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImRyb3B6b25lIikgJiYgIXRo aXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZHotbWVzc2FnZSIpKSB7Cisg ICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChEcm9wem9uZS5jcmVh dGVFbGVtZW50KCI8ZGl2IGNsYXNzPVwiZHotZGVmYXVsdCBkei1tZXNzYWdl XCI+PHNwYW4+IiArIHRoaXMub3B0aW9ucy5kaWN0RGVmYXVsdE1lc3NhZ2Ug KyAiPC9zcGFuPjwvZGl2PiIpKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlz LmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCkgeworICAgICAgICBzZXR1cEhp ZGRlbkZpbGVJbnB1dCA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICAg IHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChfdGhpcy5o aWRkZW5GaWxlSW5wdXQpIHsKKyAgICAgICAgICAgICAgX3RoaXMuaGlkZGVu RmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoX3RoaXMuaGlkZGVu RmlsZUlucHV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlz LmhpZGRlbkZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlu cHV0Iik7CisgICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc2V0 QXR0cmlidXRlKCJ0eXBlIiwgImZpbGUiKTsKKyAgICAgICAgICAgIGlmICgo X3RoaXMub3B0aW9ucy5tYXhGaWxlcyA9PSBudWxsKSB8fCBfdGhpcy5vcHRp b25zLm1heEZpbGVzID4gMSkgeworICAgICAgICAgICAgICBfdGhpcy5oaWRk ZW5GaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJtdWx0aXBsZSIsICJtdWx0aXBs ZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX3RoaXMuaGlkZGVu RmlsZUlucHV0LmNsYXNzTmFtZSA9ICJkei1oaWRkZW4taW5wdXQiOworICAg ICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyAhPSBu dWxsKSB7CisgICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5z ZXRBdHRyaWJ1dGUoImFjY2VwdCIsIF90aGlzLm9wdGlvbnMuYWNjZXB0ZWRG aWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX3RoaXMu b3B0aW9ucy5jYXB0dXJlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgX3Ro aXMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZSgiY2FwdHVyZSIsIF90 aGlzLm9wdGlvbnMuY2FwdHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUudmlzaWJpbGl0eSA9 ICJoaWRkZW4iOworICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0 LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAgICAgICAgICAgIF90 aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS50b3AgPSAiMCI7CisgICAgICAg ICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUubGVmdCA9ICIwIjsK KyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5oZWln aHQgPSAiMCI7CisgICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQu c3R5bGUud2lkdGggPSAiMCI7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVy eVNlbGVjdG9yKF90aGlzLm9wdGlvbnMuaGlkZGVuSW5wdXRDb250YWluZXIp LmFwcGVuZENoaWxkKF90aGlzLmhpZGRlbkZpbGVJbnB1dCk7CisgICAgICAg ICAgICByZXR1cm4gX3RoaXMuaGlkZGVuRmlsZUlucHV0LmFkZEV2ZW50TGlz dGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICB2 YXIgZmlsZSwgZmlsZXMsIF9pLCBfbGVuOworICAgICAgICAgICAgICBmaWxl cyA9IF90aGlzLmhpZGRlbkZpbGVJbnB1dC5maWxlczsKKyAgICAgICAgICAg ICAgaWYgKGZpbGVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGZvciAo X2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKysp IHsKKyAgICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tfaV07CisgICAg ICAgICAgICAgICAgICBfdGhpcy5hZGRGaWxlKGZpbGUpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBfdGhp cy5lbWl0KCJhZGRlZGZpbGVzIiwgZmlsZXMpOworICAgICAgICAgICAgICBy ZXR1cm4gc2V0dXBIaWRkZW5GaWxlSW5wdXQoKTsKKyAgICAgICAgICAgIH0p OworICAgICAgICAgIH07CisgICAgICAgIH0pKHRoaXMpOworICAgICAgICBz ZXR1cEhpZGRlbkZpbGVJbnB1dCgpOworICAgICAgfQorICAgICAgdGhpcy5V UkwgPSAoX3JlZiA9IHdpbmRvdy5VUkwpICE9IG51bGwgPyBfcmVmIDogd2lu ZG93LndlYmtpdFVSTDsKKyAgICAgIF9yZWYxID0gdGhpcy5ldmVudHM7Cisg ICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYxLmxlbmd0aDsgX2kgPCBf bGVuOyBfaSsrKSB7CisgICAgICAgIGV2ZW50TmFtZSA9IF9yZWYxW19pXTsK KyAgICAgICAgdGhpcy5vbihldmVudE5hbWUsIHRoaXMub3B0aW9uc1tldmVu dE5hbWVdKTsKKyAgICAgIH0KKyAgICAgIHRoaXMub24oInVwbG9hZHByb2dy ZXNzIiwgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBmdW5j dGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gX3RoaXMudXBkYXRlVG90YWxV cGxvYWRQcm9ncmVzcygpOworICAgICAgICB9OworICAgICAgfSkodGhpcykp OworICAgICAgdGhpcy5vbigicmVtb3ZlZGZpbGUiLCAoZnVuY3Rpb24oX3Ro aXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAg IHJldHVybiBfdGhpcy51cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzKCk7Cisg ICAgICAgIH07CisgICAgICB9KSh0aGlzKSk7CisgICAgICB0aGlzLm9uKCJj YW5jZWxlZCIsIChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4g ZnVuY3Rpb24oZmlsZSkgeworICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0 KCJjb21wbGV0ZSIsIGZpbGUpOworICAgICAgICB9OworICAgICAgfSkodGhp cykpOworICAgICAgdGhpcy5vbigiY29tcGxldGUiLCAoZnVuY3Rpb24oX3Ro aXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAg ICAgICBpZiAoX3RoaXMuZ2V0QWRkZWRGaWxlcygpLmxlbmd0aCA9PT0gMCAm JiBfdGhpcy5nZXRVcGxvYWRpbmdGaWxlcygpLmxlbmd0aCA9PT0gMCAmJiBf dGhpcy5nZXRRdWV1ZWRGaWxlcygpLmxlbmd0aCA9PT0gMCkgeworICAgICAg ICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgeworICAgICAg ICAgICAgICByZXR1cm4gX3RoaXMuZW1pdCgicXVldWVjb21wbGV0ZSIpOwor ICAgICAgICAgICAgfSksIDApOworICAgICAgICAgIH0KKyAgICAgICAgfTsK KyAgICAgIH0pKHRoaXMpKTsKKyAgICAgIG5vUHJvcGFnYXRpb24gPSBmdW5j dGlvbihlKSB7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAg ICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgICAgcmV0dXJu IGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICB9 CisgICAgICB9OworICAgICAgdGhpcy5saXN0ZW5lcnMgPSBbCisgICAgICAg IHsKKyAgICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnQsCisgICAgICAg ICAgZXZlbnRzOiB7CisgICAgICAgICAgICAiZHJhZ3N0YXJ0IjogKGZ1bmN0 aW9uKF90aGlzKSB7CisgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihl KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoImRyYWdz dGFydCIsIGUpOworICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSko dGhpcyksCisgICAgICAgICAgICAiZHJhZ2VudGVyIjogKGZ1bmN0aW9uKF90 aGlzKSB7CisgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7Cisg ICAgICAgICAgICAgICAgbm9Qcm9wYWdhdGlvbihlKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gX3RoaXMuZW1pdCgiZHJhZ2VudGVyIiwgZSk7CisgICAg ICAgICAgICAgIH07CisgICAgICAgICAgICB9KSh0aGlzKSwKKyAgICAgICAg ICAgICJkcmFnb3ZlciI6IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICAg ICAgICByZXR1cm4gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIHZh ciBlZmN0OworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg ICAgICBlZmN0ID0gZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZDsKKyAg ICAgICAgICAgICAgICB9IGNhdGNoIChfZXJyb3IpIHt9CisgICAgICAgICAg ICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJyA9PT0g ZWZjdCB8fCAnbGlua01vdmUnID09PSBlZmN0ID8gJ21vdmUnIDogJ2NvcHkn OworICAgICAgICAgICAgICAgIG5vUHJvcGFnYXRpb24oZSk7CisgICAgICAg ICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoImRyYWdvdmVyIiwgZSk7Cisg ICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KSh0aGlzKSwKKyAgICAg ICAgICAgICJkcmFnbGVhdmUiOiAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAg ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gX3RoaXMuZW1pdCgiZHJhZ2xlYXZlIiwgZSk7CisgICAgICAg ICAgICAgIH07CisgICAgICAgICAgICB9KSh0aGlzKSwKKyAgICAgICAgICAg ICJkcm9wIjogKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgICAgICAgIHJl dHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgbm9Qcm9wYWdh dGlvbihlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZHJvcChl KTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRoaXMpLAor ICAgICAgICAgICAgImRyYWdlbmQiOiAoZnVuY3Rpb24oX3RoaXMpIHsKKyAg ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg ICAgICByZXR1cm4gX3RoaXMuZW1pdCgiZHJhZ2VuZCIsIGUpOworICAgICAg ICAgICAgICB9OworICAgICAgICAgICAgfSkodGhpcykKKyAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgIF07CisgICAgICB0aGlzLmNsaWNrYWJsZUVs ZW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJl dHVybiBmdW5jdGlvbihjbGlja2FibGVFbGVtZW50KSB7CisgICAgICAgICAg cmV0dXJuIF90aGlzLmxpc3RlbmVycy5wdXNoKHsKKyAgICAgICAgICAgIGVs ZW1lbnQ6IGNsaWNrYWJsZUVsZW1lbnQsCisgICAgICAgICAgICBldmVudHM6 IHsKKyAgICAgICAgICAgICAgImNsaWNrIjogZnVuY3Rpb24oZXZ0KSB7Cisg ICAgICAgICAgICAgICAgaWYgKChjbGlja2FibGVFbGVtZW50ICE9PSBfdGhp cy5lbGVtZW50KSB8fCAoZXZ0LnRhcmdldCA9PT0gX3RoaXMuZWxlbWVudCB8 fCBEcm9wem9uZS5lbGVtZW50SW5zaWRlKGV2dC50YXJnZXQsIF90aGlzLmVs ZW1lbnQucXVlcnlTZWxlY3RvcigiLmR6LW1lc3NhZ2UiKSkpKSB7CisgICAg ICAgICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuY2xpY2soKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICB9KTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpKTsKKyAgICAgIHRo aXMuZW5hYmxlKCk7CisgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmluaXQu Y2FsbCh0aGlzKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBl LmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBfcmVmOworICAg ICAgdGhpcy5kaXNhYmxlKCk7CisgICAgICB0aGlzLnJlbW92ZUFsbEZpbGVz KHRydWUpOworICAgICAgaWYgKChfcmVmID0gdGhpcy5oaWRkZW5GaWxlSW5w dXQpICE9IG51bGwgPyBfcmVmLnBhcmVudE5vZGUgOiB2b2lkIDApIHsKKyAg ICAgICAgdGhpcy5oaWRkZW5GaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVD aGlsZCh0aGlzLmhpZGRlbkZpbGVJbnB1dCk7CisgICAgICAgIHRoaXMuaGlk ZGVuRmlsZUlucHV0ID0gbnVsbDsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZSB0 aGlzLmVsZW1lbnQuZHJvcHpvbmU7CisgICAgICByZXR1cm4gRHJvcHpvbmUu aW5zdGFuY2VzLnNwbGljZShEcm9wem9uZS5pbnN0YW5jZXMuaW5kZXhPZih0 aGlzKSwgMSk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS51 cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzID0gZnVuY3Rpb24oKSB7CisgICAg ICB2YXIgYWN0aXZlRmlsZXMsIGZpbGUsIHRvdGFsQnl0ZXMsIHRvdGFsQnl0 ZXNTZW50LCB0b3RhbFVwbG9hZFByb2dyZXNzLCBfaSwgX2xlbiwgX3JlZjsK KyAgICAgIHRvdGFsQnl0ZXNTZW50ID0gMDsKKyAgICAgIHRvdGFsQnl0ZXMg PSAwOworICAgICAgYWN0aXZlRmlsZXMgPSB0aGlzLmdldEFjdGl2ZUZpbGVz KCk7CisgICAgICBpZiAoYWN0aXZlRmlsZXMubGVuZ3RoKSB7CisgICAgICAg IF9yZWYgPSB0aGlzLmdldEFjdGl2ZUZpbGVzKCk7CisgICAgICAgIGZvciAo X2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykg eworICAgICAgICAgIGZpbGUgPSBfcmVmW19pXTsKKyAgICAgICAgICB0b3Rh bEJ5dGVzU2VudCArPSBmaWxlLnVwbG9hZC5ieXRlc1NlbnQ7CisgICAgICAg ICAgdG90YWxCeXRlcyArPSBmaWxlLnVwbG9hZC50b3RhbDsKKyAgICAgICAg fQorICAgICAgICB0b3RhbFVwbG9hZFByb2dyZXNzID0gMTAwICogdG90YWxC eXRlc1NlbnQgLyB0b3RhbEJ5dGVzOworICAgICAgfSBlbHNlIHsKKyAgICAg ICAgdG90YWxVcGxvYWRQcm9ncmVzcyA9IDEwMDsKKyAgICAgIH0KKyAgICAg IHJldHVybiB0aGlzLmVtaXQoInRvdGFsdXBsb2FkcHJvZ3Jlc3MiLCB0b3Rh bFVwbG9hZFByb2dyZXNzLCB0b3RhbEJ5dGVzLCB0b3RhbEJ5dGVzU2VudCk7 CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fZ2V0UGFyYW1O YW1lID0gZnVuY3Rpb24obikgeworICAgICAgaWYgKHR5cGVvZiB0aGlzLm9w dGlvbnMucGFyYW1OYW1lID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIHJl dHVybiB0aGlzLm9wdGlvbnMucGFyYW1OYW1lKG4pOworICAgICAgfSBlbHNl IHsKKyAgICAgICAgcmV0dXJuICIiICsgdGhpcy5vcHRpb25zLnBhcmFtTmFt ZSArICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUgPyAiWyIgKyBuICsg Il0iIDogIiIpOworICAgICAgfQorICAgIH07CisKKyAgICBEcm9wem9uZS5w cm90b3R5cGUuX3JlbmFtZUZpbGVuYW1lID0gZnVuY3Rpb24obmFtZSkgewor ICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMucmVuYW1lRmlsZW5hbWUg IT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAg ICB9CisgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJlbmFtZUZpbGVuYW1l KG5hbWUpOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0 RmFsbGJhY2tGb3JtID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZXhpc3Rp bmdGYWxsYmFjaywgZmllbGRzLCBmaWVsZHNTdHJpbmcsIGZvcm07CisgICAg ICBpZiAoZXhpc3RpbmdGYWxsYmFjayA9IHRoaXMuZ2V0RXhpc3RpbmdGYWxs YmFjaygpKSB7CisgICAgICAgIHJldHVybiBleGlzdGluZ0ZhbGxiYWNrOwor ICAgICAgfQorICAgICAgZmllbGRzU3RyaW5nID0gIjxkaXYgY2xhc3M9XCJk ei1mYWxsYmFja1wiPiI7CisgICAgICBpZiAodGhpcy5vcHRpb25zLmRpY3RG YWxsYmFja1RleHQpIHsKKyAgICAgICAgZmllbGRzU3RyaW5nICs9ICI8cD4i ICsgdGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja1RleHQgKyAiPC9wPiI7Cisg ICAgICB9CisgICAgICBmaWVsZHNTdHJpbmcgKz0gIjxpbnB1dCB0eXBlPVwi ZmlsZVwiIG5hbWU9XCIiICsgKHRoaXMuX2dldFBhcmFtTmFtZSgwKSkgKyAi XCIgIiArICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUgPyAnbXVsdGlw bGU9Im11bHRpcGxlIicgOiB2b2lkIDApICsgIiAvPjxpbnB1dCB0eXBlPVwi c3VibWl0XCIgdmFsdWU9XCJVcGxvYWQhXCI+PC9kaXY+IjsKKyAgICAgIGZp ZWxkcyA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQoZmllbGRzU3RyaW5nKTsK KyAgICAgIGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZSAhPT0gIkZPUk0iKSB7 CisgICAgICAgIGZvcm0gPSBEcm9wem9uZS5jcmVhdGVFbGVtZW50KCI8Zm9y bSBhY3Rpb249XCIiICsgdGhpcy5vcHRpb25zLnVybCArICJcIiBlbmN0eXBl PVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIG1ldGhvZD1cIiIgKyB0aGlzLm9w dGlvbnMubWV0aG9kICsgIlwiPjwvZm9ybT4iKTsKKyAgICAgICAgZm9ybS5h cHBlbmRDaGlsZChmaWVsZHMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiZW5jdHlwZSIsICJtdWx0aXBh cnQvZm9ybS1kYXRhIik7CisgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRy aWJ1dGUoIm1ldGhvZCIsIHRoaXMub3B0aW9ucy5tZXRob2QpOworICAgICAg fQorICAgICAgcmV0dXJuIGZvcm0gIT0gbnVsbCA/IGZvcm0gOiBmaWVsZHM7 CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRFeGlzdGlu Z0ZhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZmFsbGJhY2ss IGdldEZhbGxiYWNrLCB0YWdOYW1lLCBfaSwgX2xlbiwgX3JlZjsKKyAgICAg IGdldEZhbGxiYWNrID0gZnVuY3Rpb24oZWxlbWVudHMpIHsKKyAgICAgICAg dmFyIGVsLCBfaSwgX2xlbjsKKyAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4g PSBlbGVtZW50cy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAg ICAgIGVsID0gZWxlbWVudHNbX2ldOworICAgICAgICAgIGlmICgvKF58IClm YWxsYmFjaygkfCApLy50ZXN0KGVsLmNsYXNzTmFtZSkpIHsKKyAgICAgICAg ICAgIHJldHVybiBlbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IH07CisgICAgICBfcmVmID0gWyJkaXYiLCAiZm9ybSJdOworICAgICAgZm9y IChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsr KSB7CisgICAgICAgIHRhZ05hbWUgPSBfcmVmW19pXTsKKyAgICAgICAgaWYg KGZhbGxiYWNrID0gZ2V0RmFsbGJhY2sodGhpcy5lbGVtZW50LmdldEVsZW1l bnRzQnlUYWdOYW1lKHRhZ05hbWUpKSkgeworICAgICAgICAgIHJldHVybiBm YWxsYmFjazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgICBE cm9wem9uZS5wcm90b3R5cGUuc2V0dXBFdmVudExpc3RlbmVycyA9IGZ1bmN0 aW9uKCkgeworICAgICAgdmFyIGVsZW1lbnRMaXN0ZW5lcnMsIGV2ZW50LCBs aXN0ZW5lciwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3Jl ZiA9IHRoaXMubGlzdGVuZXJzOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAg ICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xl bjsgX2krKykgeworICAgICAgICBlbGVtZW50TGlzdGVuZXJzID0gX3JlZltf aV07CisgICAgICAgIF9yZXN1bHRzLnB1c2goKGZ1bmN0aW9uKCkgeworICAg ICAgICAgIHZhciBfcmVmMSwgX3Jlc3VsdHMxOworICAgICAgICAgIF9yZWYx ID0gZWxlbWVudExpc3RlbmVycy5ldmVudHM7CisgICAgICAgICAgX3Jlc3Vs dHMxID0gW107CisgICAgICAgICAgZm9yIChldmVudCBpbiBfcmVmMSkgewor ICAgICAgICAgICAgbGlzdGVuZXIgPSBfcmVmMVtldmVudF07CisgICAgICAg ICAgICBfcmVzdWx0czEucHVzaChlbGVtZW50TGlzdGVuZXJzLmVsZW1lbnQu YWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKSk7Cisg ICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBfcmVzdWx0czE7CisgICAg ICAgIH0pKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOwor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRM aXN0ZW5lcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBlbGVtZW50TGlz dGVuZXJzLCBldmVudCwgbGlzdGVuZXIsIF9pLCBfbGVuLCBfcmVmLCBfcmVz dWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmxpc3RlbmVyczsKKyAgICAgIF9y ZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYu bGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZWxlbWVudExp c3RlbmVycyA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKChm dW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgX3JlZjEsIF9yZXN1bHRzMTsK KyAgICAgICAgICBfcmVmMSA9IGVsZW1lbnRMaXN0ZW5lcnMuZXZlbnRzOwor ICAgICAgICAgIF9yZXN1bHRzMSA9IFtdOworICAgICAgICAgIGZvciAoZXZl bnQgaW4gX3JlZjEpIHsKKyAgICAgICAgICAgIGxpc3RlbmVyID0gX3JlZjFb ZXZlbnRdOworICAgICAgICAgICAgX3Jlc3VsdHMxLnB1c2goZWxlbWVudExp c3RlbmVycy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxp c3RlbmVyLCBmYWxzZSkpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1 cm4gX3Jlc3VsdHMxOworICAgICAgICB9KSgpKTsKKyAgICAgIH0KKyAgICAg IHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJv dG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBmaWxl LCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICB0aGlzLmNsaWNr YWJsZUVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkgeworICAg ICAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1jbGlj a2FibGUiKTsKKyAgICAgIH0pOworICAgICAgdGhpcy5yZW1vdmVFdmVudExp c3RlbmVycygpOworICAgICAgX3JlZiA9IHRoaXMuZmlsZXM7CisgICAgICBf cmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVm Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZpbGUgPSBf cmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLmNhbmNlbFVw bG9hZChmaWxlKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7 CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5lbmFibGUgPSBm dW5jdGlvbigpIHsKKyAgICAgIHRoaXMuY2xpY2thYmxlRWxlbWVudHMuZm9y RWFjaChmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBlbGVt ZW50LmNsYXNzTGlzdC5hZGQoImR6LWNsaWNrYWJsZSIpOworICAgICAgfSk7 CisgICAgICByZXR1cm4gdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5maWxlc2l6ZSA9IGZ1 bmN0aW9uKHNpemUpIHsKKyAgICAgIHZhciBjdXRvZmYsIGksIHNlbGVjdGVk U2l6ZSwgc2VsZWN0ZWRVbml0LCB1bml0LCB1bml0cywgX2ksIF9sZW47Cisg ICAgICBzZWxlY3RlZFNpemUgPSAwOworICAgICAgc2VsZWN0ZWRVbml0ID0g ImIiOworICAgICAgaWYgKHNpemUgPiAwKSB7CisgICAgICAgIHVuaXRzID0g WydUQicsICdHQicsICdNQicsICdLQicsICdiJ107CisgICAgICAgIGZvciAo aSA9IF9pID0gMCwgX2xlbiA9IHVuaXRzLmxlbmd0aDsgX2kgPCBfbGVuOyBp ID0gKytfaSkgeworICAgICAgICAgIHVuaXQgPSB1bml0c1tpXTsKKyAgICAg ICAgICBjdXRvZmYgPSBNYXRoLnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVC YXNlLCA0IC0gaSkgLyAxMDsKKyAgICAgICAgICBpZiAoc2l6ZSA+PSBjdXRv ZmYpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkU2l6ZSA9IHNpemUgLyBNYXRo LnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVCYXNlLCA0IC0gaSk7CisgICAg ICAgICAgICBzZWxlY3RlZFVuaXQgPSB1bml0OworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNlbGVjdGVk U2l6ZSA9IE1hdGgucm91bmQoMTAgKiBzZWxlY3RlZFNpemUpIC8gMTA7Cisg ICAgICB9CisgICAgICByZXR1cm4gIjxzdHJvbmc+IiArIHNlbGVjdGVkU2l6 ZSArICI8L3N0cm9uZz4gIiArIHNlbGVjdGVkVW5pdDsKKyAgICB9OworCisg ICAgRHJvcHpvbmUucHJvdG90eXBlLl91cGRhdGVNYXhGaWxlc1JlYWNoZWRD bGFzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCh0aGlzLm9wdGlvbnMu bWF4RmlsZXMgIT0gbnVsbCkgJiYgdGhpcy5nZXRBY2NlcHRlZEZpbGVzKCku bGVuZ3RoID49IHRoaXMub3B0aW9ucy5tYXhGaWxlcykgeworICAgICAgICBp ZiAodGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVuZ3RoID09PSB0aGlzLm9w dGlvbnMubWF4RmlsZXMpIHsKKyAgICAgICAgICB0aGlzLmVtaXQoJ21heGZp bGVzcmVhY2hlZCcsIHRoaXMuZmlsZXMpOworICAgICAgICB9CisgICAgICAg IHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotbWF4LWZp bGVzLXJlYWNoZWQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy biB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotbWF4LWZpbGVz LXJlYWNoZWQiKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgRHJvcHpvbmUu cHJvdG90eXBlLmRyb3AgPSBmdW5jdGlvbihlKSB7CisgICAgICB2YXIgZmls ZXMsIGl0ZW1zOworICAgICAgaWYgKCFlLmRhdGFUcmFuc2ZlcikgeworICAg ICAgICByZXR1cm47CisgICAgICB9CisgICAgICB0aGlzLmVtaXQoImRyb3Ai LCBlKTsKKyAgICAgIGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7Cisg ICAgICB0aGlzLmVtaXQoImFkZGVkZmlsZXMiLCBmaWxlcyk7CisgICAgICBp ZiAoZmlsZXMubGVuZ3RoKSB7CisgICAgICAgIGl0ZW1zID0gZS5kYXRhVHJh bnNmZXIuaXRlbXM7CisgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5n dGggJiYgKGl0ZW1zWzBdLndlYmtpdEdldEFzRW50cnkgIT0gbnVsbCkpIHsK KyAgICAgICAgICB0aGlzLl9hZGRGaWxlc0Zyb21JdGVtcyhpdGVtcyk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5oYW5kbGVGaWxlcyhm aWxlcyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OworCisgICAgRHJv cHpvbmUucHJvdG90eXBlLnBhc3RlID0gZnVuY3Rpb24oZSkgeworICAgICAg dmFyIGl0ZW1zLCBfcmVmOworICAgICAgaWYgKChlICE9IG51bGwgPyAoX3Jl ZiA9IGUuY2xpcGJvYXJkRGF0YSkgIT0gbnVsbCA/IF9yZWYuaXRlbXMgOiB2 b2lkIDAgOiB2b2lkIDApID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuOwor ICAgICAgfQorICAgICAgdGhpcy5lbWl0KCJwYXN0ZSIsIGUpOworICAgICAg aXRlbXMgPSBlLmNsaXBib2FyZERhdGEuaXRlbXM7CisgICAgICBpZiAoaXRl bXMubGVuZ3RoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9hZGRGaWxlc0Zy b21JdGVtcyhpdGVtcyk7CisgICAgICB9CisgICAgfTsKKworICAgIERyb3B6 b25lLnByb3RvdHlwZS5oYW5kbGVGaWxlcyA9IGZ1bmN0aW9uKGZpbGVzKSB7 CisgICAgICB2YXIgZmlsZSwgX2ksIF9sZW4sIF9yZXN1bHRzOworICAgICAg X3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmls ZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZmlsZSA9 IGZpbGVzW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLmFkZEZp bGUoZmlsZSkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOwor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX2FkZEZpbGVzRnJv bUl0ZW1zID0gZnVuY3Rpb24oaXRlbXMpIHsKKyAgICAgIHZhciBlbnRyeSwg aXRlbSwgX2ksIF9sZW4sIF9yZXN1bHRzOworICAgICAgX3Jlc3VsdHMgPSBb XTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gaXRlbXMubGVuZ3RoOyBf aSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgaXRlbSA9IGl0ZW1zW19pXTsK KyAgICAgICAgaWYgKChpdGVtLndlYmtpdEdldEFzRW50cnkgIT0gbnVsbCkg JiYgKGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCkpKSB7CisgICAg ICAgICAgaWYgKGVudHJ5LmlzRmlsZSkgeworICAgICAgICAgICAgX3Jlc3Vs dHMucHVzaCh0aGlzLmFkZEZpbGUoaXRlbS5nZXRBc0ZpbGUoKSkpOworICAg ICAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHsKKyAgICAg ICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5fYWRkRmlsZXNGcm9tRGlyZWN0 b3J5KGVudHJ5LCBlbnRyeS5uYW1lKSk7CisgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTsKKyAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5nZXRBc0ZpbGUgIT0gbnVs bCkgeworICAgICAgICAgIGlmICgoaXRlbS5raW5kID09IG51bGwpIHx8IGl0 ZW0ua2luZCA9PT0gImZpbGUiKSB7CisgICAgICAgICAgICBfcmVzdWx0cy5w dXNoKHRoaXMuYWRkRmlsZShpdGVtLmdldEFzRmlsZSgpKSk7CisgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAw KTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg X3Jlc3VsdHMucHVzaCh2b2lkIDApOworICAgICAgICB9CisgICAgICB9Cisg ICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsKKworICAgIERyb3B6b25l LnByb3RvdHlwZS5fYWRkRmlsZXNGcm9tRGlyZWN0b3J5ID0gZnVuY3Rpb24o ZGlyZWN0b3J5LCBwYXRoKSB7CisgICAgICB2YXIgZGlyUmVhZGVyLCBlcnJv ckhhbmRsZXIsIHJlYWRFbnRyaWVzOworICAgICAgZGlyUmVhZGVyID0gZGly ZWN0b3J5LmNyZWF0ZVJlYWRlcigpOworICAgICAgZXJyb3JIYW5kbGVyID0g ZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVvZiBjb25z b2xlICE9PSAidW5kZWZpbmVkIiAmJiBjb25zb2xlICE9PSBudWxsID8gdHlw ZW9mIGNvbnNvbGUubG9nID09PSAiZnVuY3Rpb24iID8gY29uc29sZS5sb2co ZXJyb3IpIDogdm9pZCAwIDogdm9pZCAwOworICAgICAgfTsKKyAgICAgIHJl YWRFbnRyaWVzID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVy biBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gZGlyUmVhZGVyLnJl YWRFbnRyaWVzKGZ1bmN0aW9uKGVudHJpZXMpIHsKKyAgICAgICAgICAgIHZh ciBlbnRyeSwgX2ksIF9sZW47CisgICAgICAgICAgICBpZiAoZW50cmllcy5s ZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVu ID0gZW50cmllcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAg ICAgICAgICAgIGVudHJ5ID0gZW50cmllc1tfaV07CisgICAgICAgICAgICAg ICAgaWYgKGVudHJ5LmlzRmlsZSkgeworICAgICAgICAgICAgICAgICAgZW50 cnkuZmlsZShmdW5jdGlvbihmaWxlKSB7CisgICAgICAgICAgICAgICAgICAg IGlmIChfdGhpcy5vcHRpb25zLmlnbm9yZUhpZGRlbkZpbGVzICYmIGZpbGUu bmFtZS5zdWJzdHJpbmcoMCwgMSkgPT09ICcuJykgeworICAgICAgICAgICAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBmaWxlLmZ1bGxQYXRoID0gIiIgKyBwYXRoICsg Ii8iICsgZmlsZS5uYW1lOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g X3RoaXMuYWRkRmlsZShmaWxlKTsKKyAgICAgICAgICAgICAgICAgIH0pOwor ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3Rvcnkp IHsKKyAgICAgICAgICAgICAgICAgIF90aGlzLl9hZGRGaWxlc0Zyb21EaXJl Y3RvcnkoZW50cnksICIiICsgcGF0aCArICIvIiArIGVudHJ5Lm5hbWUpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICByZWFkRW50cmllcygpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgfSwgZXJyb3JIYW5kbGVyKTsK KyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAgcmV0dXJuIHJl YWRFbnRyaWVzKCk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlw ZS5hY2NlcHQgPSBmdW5jdGlvbihmaWxlLCBkb25lKSB7CisgICAgICBpZiAo ZmlsZS5zaXplID4gdGhpcy5vcHRpb25zLm1heEZpbGVzaXplICogMTAyNCAq IDEwMjQpIHsKKyAgICAgICAgcmV0dXJuIGRvbmUodGhpcy5vcHRpb25zLmRp Y3RGaWxlVG9vQmlnLnJlcGxhY2UoInt7ZmlsZXNpemV9fSIsIE1hdGgucm91 bmQoZmlsZS5zaXplIC8gMTAyNCAvIDEwLjI0KSAvIDEwMCkucmVwbGFjZSgi e3ttYXhGaWxlc2l6ZX19IiwgdGhpcy5vcHRpb25zLm1heEZpbGVzaXplKSk7 CisgICAgICB9IGVsc2UgaWYgKCFEcm9wem9uZS5pc1ZhbGlkRmlsZShmaWxl LCB0aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcykpIHsKKyAgICAgICAgcmV0 dXJuIGRvbmUodGhpcy5vcHRpb25zLmRpY3RJbnZhbGlkRmlsZVR5cGUpOwor ICAgICAgfSBlbHNlIGlmICgodGhpcy5vcHRpb25zLm1heEZpbGVzICE9IG51 bGwpICYmIHRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aCA+PSB0aGlz Lm9wdGlvbnMubWF4RmlsZXMpIHsKKyAgICAgICAgZG9uZSh0aGlzLm9wdGlv bnMuZGljdE1heEZpbGVzRXhjZWVkZWQucmVwbGFjZSgie3ttYXhGaWxlc319 IiwgdGhpcy5vcHRpb25zLm1heEZpbGVzKSk7CisgICAgICAgIHJldHVybiB0 aGlzLmVtaXQoIm1heGZpbGVzZXhjZWVkZWQiLCBmaWxlKTsKKyAgICAgIH0g ZWxzZSB7CisgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYWNjZXB0LmNh bGwodGhpcywgZmlsZSwgZG9uZSk7CisgICAgICB9CisgICAgfTsKKworICAg IERyb3B6b25lLnByb3RvdHlwZS5hZGRGaWxlID0gZnVuY3Rpb24oZmlsZSkg eworICAgICAgZmlsZS51cGxvYWQgPSB7CisgICAgICAgIHByb2dyZXNzOiAw LAorICAgICAgICB0b3RhbDogZmlsZS5zaXplLAorICAgICAgICBieXRlc1Nl bnQ6IDAKKyAgICAgIH07CisgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZSk7 CisgICAgICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLkFEREVEOworICAgICAg dGhpcy5lbWl0KCJhZGRlZGZpbGUiLCBmaWxlKTsKKyAgICAgIHRoaXMuX2Vu cXVldWVUaHVtYm5haWwoZmlsZSk7CisgICAgICByZXR1cm4gdGhpcy5hY2Nl cHQoZmlsZSwgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBm dW5jdGlvbihlcnJvcikgeworICAgICAgICAgIGlmIChlcnJvcikgeworICAg ICAgICAgICAgZmlsZS5hY2NlcHRlZCA9IGZhbHNlOworICAgICAgICAgICAg X3RoaXMuX2Vycm9yUHJvY2Vzc2luZyhbZmlsZV0sIGVycm9yKTsKKyAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmlsZS5hY2NlcHRlZCA9IHRy dWU7CisgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hdXRvUXVldWUp IHsKKyAgICAgICAgICAgICAgX3RoaXMuZW5xdWV1ZUZpbGUoZmlsZSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBf dGhpcy5fdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3MoKTsKKyAgICAgICAg fTsKKyAgICAgIH0pKHRoaXMpKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUu cHJvdG90eXBlLmVucXVldWVGaWxlcyA9IGZ1bmN0aW9uKGZpbGVzKSB7Cisg ICAgICB2YXIgZmlsZSwgX2ksIF9sZW47CisgICAgICBmb3IgKF9pID0gMCwg X2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAg ICAgIGZpbGUgPSBmaWxlc1tfaV07CisgICAgICAgIHRoaXMuZW5xdWV1ZUZp bGUoZmlsZSk7CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9 OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmVucXVldWVGaWxlID0gZnVu Y3Rpb24oZmlsZSkgeworICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9w em9uZS5BRERFRCAmJiBmaWxlLmFjY2VwdGVkID09PSB0cnVlKSB7CisgICAg ICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuUVVFVUVEOworICAgICAgICBp ZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpIHsKKyAgICAgICAg ICByZXR1cm4gc2V0VGltZW91dCgoKGZ1bmN0aW9uKF90aGlzKSB7CisgICAg ICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHJl dHVybiBfdGhpcy5wcm9jZXNzUXVldWUoKTsKKyAgICAgICAgICAgIH07Cisg ICAgICAgICAgfSkodGhpcykpLCAwKTsKKyAgICAgICAgfQorICAgICAgfSBl bHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGZpbGUgY2Fu J3QgYmUgcXVldWVkIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9j ZXNzZWQgb3Igd2FzIHJlamVjdGVkLiIpOworICAgICAgfQorICAgIH07CisK KyAgICBEcm9wem9uZS5wcm90b3R5cGUuX3RodW1ibmFpbFF1ZXVlID0gW107 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX3Byb2Nlc3NpbmdUaHVtYm5h aWwgPSBmYWxzZTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5fZW5xdWV1 ZVRodW1ibmFpbCA9IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgIGlmICh0aGlz Lm9wdGlvbnMuY3JlYXRlSW1hZ2VUaHVtYm5haWxzICYmIGZpbGUudHlwZS5t YXRjaCgvaW1hZ2UuKi8pICYmIGZpbGUuc2l6ZSA8PSB0aGlzLm9wdGlvbnMu bWF4VGh1bWJuYWlsRmlsZXNpemUgKiAxMDI0ICogMTAyNCkgeworICAgICAg ICB0aGlzLl90aHVtYm5haWxRdWV1ZS5wdXNoKGZpbGUpOworICAgICAgICBy ZXR1cm4gc2V0VGltZW91dCgoKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAg ICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIF90 aGlzLl9wcm9jZXNzVGh1bWJuYWlsUXVldWUoKTsKKyAgICAgICAgICB9Owor ICAgICAgICB9KSh0aGlzKSksIDApOworICAgICAgfQorICAgIH07CisKKyAg ICBEcm9wem9uZS5wcm90b3R5cGUuX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSA9 IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuX3Byb2Nlc3NpbmdUaHVt Ym5haWwgfHwgdGhpcy5fdGh1bWJuYWlsUXVldWUubGVuZ3RoID09PSAwKSB7 CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHRoaXMuX3Byb2Nl c3NpbmdUaHVtYm5haWwgPSB0cnVlOworICAgICAgcmV0dXJuIHRoaXMuY3Jl YXRlVGh1bWJuYWlsKHRoaXMuX3RodW1ibmFpbFF1ZXVlLnNoaWZ0KCksIChm dW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7 CisgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NpbmdUaHVtYm5haWwgPSBmYWxz ZTsKKyAgICAgICAgICByZXR1cm4gX3RoaXMuX3Byb2Nlc3NUaHVtYm5haWxR dWV1ZSgpOworICAgICAgICB9OworICAgICAgfSkodGhpcykpOworICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucmVtb3ZlRmlsZSA9IGZ1bmN0 aW9uKGZpbGUpIHsKKyAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpv bmUuVVBMT0FESU5HKSB7CisgICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGZp bGUpOworICAgICAgfQorICAgICAgdGhpcy5maWxlcyA9IHdpdGhvdXQodGhp cy5maWxlcywgZmlsZSk7CisgICAgICB0aGlzLmVtaXQoInJlbW92ZWRmaWxl IiwgZmlsZSk7CisgICAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPT09IDAp IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZW1pdCgicmVzZXQiKTsKKyAgICAg IH0KKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLnJlbW92ZUFs bEZpbGVzID0gZnVuY3Rpb24oY2FuY2VsSWZOZWNlc3NhcnkpIHsKKyAgICAg IHZhciBmaWxlLCBfaSwgX2xlbiwgX3JlZjsKKyAgICAgIGlmIChjYW5jZWxJ Zk5lY2Vzc2FyeSA9PSBudWxsKSB7CisgICAgICAgIGNhbmNlbElmTmVjZXNz YXJ5ID0gZmFsc2U7CisgICAgICB9CisgICAgICBfcmVmID0gdGhpcy5maWxl cy5zbGljZSgpOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxl bmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZpbGUgPSBfcmVm W19pXTsKKyAgICAgICAgaWYgKGZpbGUuc3RhdHVzICE9PSBEcm9wem9uZS5V UExPQURJTkcgfHwgY2FuY2VsSWZOZWNlc3NhcnkpIHsKKyAgICAgICAgICB0 aGlzLnJlbW92ZUZpbGUoZmlsZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg ICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90 b3R5cGUuY3JlYXRlVGh1bWJuYWlsID0gZnVuY3Rpb24oZmlsZSwgY2FsbGJh Y2spIHsKKyAgICAgIHZhciBmaWxlUmVhZGVyOworICAgICAgZmlsZVJlYWRl ciA9IG5ldyBGaWxlUmVhZGVyOworICAgICAgZmlsZVJlYWRlci5vbmxvYWQg PSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u KCkgeworICAgICAgICAgIGlmIChmaWxlLnR5cGUgPT09ICJpbWFnZS9zdmcr eG1sIikgeworICAgICAgICAgICAgX3RoaXMuZW1pdCgidGh1bWJuYWlsIiwg ZmlsZSwgZmlsZVJlYWRlci5yZXN1bHQpOworICAgICAgICAgICAgaWYgKGNh bGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgY2FsbGJhY2soKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICB9CisgICAgICAgICAgcmV0dXJuIF90aGlzLmNyZWF0ZVRodW1ibmFpbEZy b21VcmwoZmlsZSwgZmlsZVJlYWRlci5yZXN1bHQsIGNhbGxiYWNrKTsKKyAg ICAgICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAgcmV0dXJuIGZpbGVS ZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKKyAgICB9OworCisgICAgRHJv cHpvbmUucHJvdG90eXBlLmNyZWF0ZVRodW1ibmFpbEZyb21VcmwgPSBmdW5j dGlvbihmaWxlLCBpbWFnZVVybCwgY2FsbGJhY2ssIGNyb3NzT3JpZ2luKSB7 CisgICAgICB2YXIgaW1nOworICAgICAgaW1nID0gZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgiaW1nIik7CisgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHsKKyAg ICAgICAgaW1nLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47CisgICAgICB9 CisgICAgICBpbWcub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAg ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgY2FudmFz LCBjdHgsIHJlc2l6ZUluZm8sIHRodW1ibmFpbCwgX3JlZiwgX3JlZjEsIF9y ZWYyLCBfcmVmMzsKKyAgICAgICAgICBmaWxlLndpZHRoID0gaW1nLndpZHRo OworICAgICAgICAgIGZpbGUuaGVpZ2h0ID0gaW1nLmhlaWdodDsKKyAgICAg ICAgICByZXNpemVJbmZvID0gX3RoaXMub3B0aW9ucy5yZXNpemUuY2FsbChf dGhpcywgZmlsZSk7CisgICAgICAgICAgaWYgKHJlc2l6ZUluZm8udHJnV2lk dGggPT0gbnVsbCkgeworICAgICAgICAgICAgcmVzaXplSW5mby50cmdXaWR0 aCA9IHJlc2l6ZUluZm8ub3B0V2lkdGg7CisgICAgICAgICAgfQorICAgICAg ICAgIGlmIChyZXNpemVJbmZvLnRyZ0hlaWdodCA9PSBudWxsKSB7CisgICAg ICAgICAgICByZXNpemVJbmZvLnRyZ0hlaWdodCA9IHJlc2l6ZUluZm8ub3B0 SGVpZ2h0OworICAgICAgICAgIH0KKyAgICAgICAgICBjYW52YXMgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgICAgICAgICBjdHgg PSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICAgICAgICBjYW52YXMu d2lkdGggPSByZXNpemVJbmZvLnRyZ1dpZHRoOworICAgICAgICAgIGNhbnZh cy5oZWlnaHQgPSByZXNpemVJbmZvLnRyZ0hlaWdodDsKKyAgICAgICAgICBk cmF3SW1hZ2VJT1NGaXgoY3R4LCBpbWcsIChfcmVmID0gcmVzaXplSW5mby5z cmNYKSAhPSBudWxsID8gX3JlZiA6IDAsIChfcmVmMSA9IHJlc2l6ZUluZm8u c3JjWSkgIT0gbnVsbCA/IF9yZWYxIDogMCwgcmVzaXplSW5mby5zcmNXaWR0 aCwgcmVzaXplSW5mby5zcmNIZWlnaHQsIChfcmVmMiA9IHJlc2l6ZUluZm8u dHJnWCkgIT0gbnVsbCA/IF9yZWYyIDogMCwgKF9yZWYzID0gcmVzaXplSW5m by50cmdZKSAhPSBudWxsID8gX3JlZjMgOiAwLCByZXNpemVJbmZvLnRyZ1dp ZHRoLCByZXNpemVJbmZvLnRyZ0hlaWdodCk7CisgICAgICAgICAgdGh1bWJu YWlsID0gY2FudmFzLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7CisgICAgICAg ICAgX3RoaXMuZW1pdCgidGh1bWJuYWlsIiwgZmlsZSwgdGh1bWJuYWlsKTsK KyAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAg ICAgcmV0dXJuIGNhbGxiYWNrKCk7CisgICAgICAgICAgfQorICAgICAgICB9 OworICAgICAgfSkodGhpcyk7CisgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVs bCkgeworICAgICAgICBpbWcub25lcnJvciA9IGNhbGxiYWNrOworICAgICAg fQorICAgICAgcmV0dXJuIGltZy5zcmMgPSBpbWFnZVVybDsKKyAgICB9Owor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLnByb2Nlc3NRdWV1ZSA9IGZ1bmN0 aW9uKCkgeworICAgICAgdmFyIGksIHBhcmFsbGVsVXBsb2FkcywgcHJvY2Vz c2luZ0xlbmd0aCwgcXVldWVkRmlsZXM7CisgICAgICBwYXJhbGxlbFVwbG9h ZHMgPSB0aGlzLm9wdGlvbnMucGFyYWxsZWxVcGxvYWRzOworICAgICAgcHJv Y2Vzc2luZ0xlbmd0aCA9IHRoaXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5n dGg7CisgICAgICBpID0gcHJvY2Vzc2luZ0xlbmd0aDsKKyAgICAgIGlmIChw cm9jZXNzaW5nTGVuZ3RoID49IHBhcmFsbGVsVXBsb2FkcykgeworICAgICAg ICByZXR1cm47CisgICAgICB9CisgICAgICBxdWV1ZWRGaWxlcyA9IHRoaXMu Z2V0UXVldWVkRmlsZXMoKTsKKyAgICAgIGlmICghKHF1ZXVlZEZpbGVzLmxl bmd0aCA+IDApKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAg IGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHsKKyAgICAgICAg cmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGVzKHF1ZXVlZEZpbGVzLnNsaWNlKDAs IHBhcmFsbGVsVXBsb2FkcyAtIHByb2Nlc3NpbmdMZW5ndGgpKTsKKyAgICAg IH0gZWxzZSB7CisgICAgICAgIHdoaWxlIChpIDwgcGFyYWxsZWxVcGxvYWRz KSB7CisgICAgICAgICAgaWYgKCFxdWV1ZWRGaWxlcy5sZW5ndGgpIHsKKyAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhp cy5wcm9jZXNzRmlsZShxdWV1ZWRGaWxlcy5zaGlmdCgpKTsKKyAgICAgICAg ICBpKys7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OworCisgICAgRHJv cHpvbmUucHJvdG90eXBlLnByb2Nlc3NGaWxlID0gZnVuY3Rpb24oZmlsZSkg eworICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGVzKFtmaWxlXSk7Cisg ICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5wcm9jZXNzRmlsZXMg PSBmdW5jdGlvbihmaWxlcykgeworICAgICAgdmFyIGZpbGUsIF9pLCBfbGVu OworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9p IDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxlID0gZmlsZXNbX2ldOwor ICAgICAgICBmaWxlLnByb2Nlc3NpbmcgPSB0cnVlOworICAgICAgICBmaWxl LnN0YXR1cyA9IERyb3B6b25lLlVQTE9BRElORzsKKyAgICAgICAgdGhpcy5l bWl0KCJwcm9jZXNzaW5nIiwgZmlsZSk7CisgICAgICB9CisgICAgICBpZiAo dGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7CisgICAgICAgIHRoaXMu ZW1pdCgicHJvY2Vzc2luZ211bHRpcGxlIiwgZmlsZXMpOworICAgICAgfQor ICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZXMoZmlsZXMpOworICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX2dldEZpbGVzV2l0aFhociA9 IGZ1bmN0aW9uKHhocikgeworICAgICAgdmFyIGZpbGUsIGZpbGVzOworICAg ICAgcmV0dXJuIGZpbGVzID0gKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg X2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgICBfcmVmID0gdGhp cy5maWxlczsKKyAgICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgICAgZm9y IChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsr KSB7CisgICAgICAgICAgZmlsZSA9IF9yZWZbX2ldOworICAgICAgICAgIGlm IChmaWxlLnhociA9PT0geGhyKSB7CisgICAgICAgICAgICBfcmVzdWx0cy5w dXNoKGZpbGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4gX3Jlc3VsdHM7CisgICAgICB9KS5jYWxsKHRoaXMpOworICAgIH07 CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuY2FuY2VsVXBsb2FkID0gZnVu Y3Rpb24oZmlsZSkgeworICAgICAgdmFyIGdyb3VwZWRGaWxlLCBncm91cGVk RmlsZXMsIF9pLCBfaiwgX2xlbiwgX2xlbjEsIF9yZWY7CisgICAgICBpZiAo ZmlsZS5zdGF0dXMgPT09IERyb3B6b25lLlVQTE9BRElORykgeworICAgICAg ICBncm91cGVkRmlsZXMgPSB0aGlzLl9nZXRGaWxlc1dpdGhYaHIoZmlsZS54 aHIpOworICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGdyb3VwZWRGaWxl cy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICAgIGdyb3Vw ZWRGaWxlID0gZ3JvdXBlZEZpbGVzW19pXTsKKyAgICAgICAgICBncm91cGVk RmlsZS5zdGF0dXMgPSBEcm9wem9uZS5DQU5DRUxFRDsKKyAgICAgICAgfQor ICAgICAgICBmaWxlLnhoci5hYm9ydCgpOworICAgICAgICBmb3IgKF9qID0g MCwgX2xlbjEgPSBncm91cGVkRmlsZXMubGVuZ3RoOyBfaiA8IF9sZW4xOyBf aisrKSB7CisgICAgICAgICAgZ3JvdXBlZEZpbGUgPSBncm91cGVkRmlsZXNb X2pdOworICAgICAgICAgIHRoaXMuZW1pdCgiY2FuY2VsZWQiLCBncm91cGVk RmlsZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51 cGxvYWRNdWx0aXBsZSkgeworICAgICAgICAgIHRoaXMuZW1pdCgiY2FuY2Vs ZWRtdWx0aXBsZSIsIGdyb3VwZWRGaWxlcyk7CisgICAgICAgIH0KKyAgICAg IH0gZWxzZSBpZiAoKF9yZWYgPSBmaWxlLnN0YXR1cykgPT09IERyb3B6b25l LkFEREVEIHx8IF9yZWYgPT09IERyb3B6b25lLlFVRVVFRCkgeworICAgICAg ICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLkNBTkNFTEVEOworICAgICAgICB0 aGlzLmVtaXQoImNhbmNlbGVkIiwgZmlsZSk7CisgICAgICAgIGlmICh0aGlz Lm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHsKKyAgICAgICAgICB0aGlzLmVt aXQoImNhbmNlbGVkbXVsdGlwbGUiLCBbZmlsZV0pOworICAgICAgICB9Cisg ICAgICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVl dWUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCk7Cisg ICAgICB9CisgICAgfTsKKworICAgIHJlc29sdmVPcHRpb24gPSBmdW5jdGlv bigpIHsKKyAgICAgIHZhciBhcmdzLCBvcHRpb247CisgICAgICBvcHRpb24g PSBhcmd1bWVudHNbMF0sIGFyZ3MgPSAyIDw9IGFyZ3VtZW50cy5sZW5ndGgg PyBfX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSA6IFtdOworICAgICAgaWYg KHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgcmV0 dXJuIG9wdGlvbi5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAgIH0KKyAgICAg IHJldHVybiBvcHRpb247CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3Rv dHlwZS51cGxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSkgeworICAgICAgcmV0 dXJuIHRoaXMudXBsb2FkRmlsZXMoW2ZpbGVdKTsKKyAgICB9OworCisgICAg RHJvcHpvbmUucHJvdG90eXBlLnVwbG9hZEZpbGVzID0gZnVuY3Rpb24oZmls ZXMpIHsKKyAgICAgIHZhciBmaWxlLCBmb3JtRGF0YSwgaGFuZGxlRXJyb3Is IGhlYWRlck5hbWUsIGhlYWRlclZhbHVlLCBoZWFkZXJzLCBpLCBpbnB1dCwg aW5wdXROYW1lLCBpbnB1dFR5cGUsIGtleSwgbWV0aG9kLCBvcHRpb24sIHBy b2dyZXNzT2JqLCByZXNwb25zZSwgdXBkYXRlUHJvZ3Jlc3MsIHVybCwgdmFs dWUsIHhociwgX2ksIF9qLCBfaywgX2wsIF9sZW4sIF9sZW4xLCBfbGVuMiwg X2xlbjMsIF9tLCBfcmVmLCBfcmVmMSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwg X3JlZjU7CisgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAg ICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9s ZW47IF9pKyspIHsKKyAgICAgICAgZmlsZSA9IGZpbGVzW19pXTsKKyAgICAg ICAgZmlsZS54aHIgPSB4aHI7CisgICAgICB9CisgICAgICBtZXRob2QgPSBy ZXNvbHZlT3B0aW9uKHRoaXMub3B0aW9ucy5tZXRob2QsIGZpbGVzKTsKKyAg ICAgIHVybCA9IHJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLnVybCwgZmls ZXMpOworICAgICAgeGhyLm9wZW4obWV0aG9kLCB1cmwsIHRydWUpOworICAg ICAgeGhyLndpdGhDcmVkZW50aWFscyA9ICEhdGhpcy5vcHRpb25zLndpdGhD cmVkZW50aWFsczsKKyAgICAgIHJlc3BvbnNlID0gbnVsbDsKKyAgICAgIGhh bmRsZUVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVy biBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgX2osIF9sZW4xLCBfcmVz dWx0czsKKyAgICAgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgICAgIGZv ciAoX2ogPSAwLCBfbGVuMSA9IGZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsg X2orKykgeworICAgICAgICAgICAgZmlsZSA9IGZpbGVzW19qXTsKKyAgICAg ICAgICAgIF9yZXN1bHRzLnB1c2goX3RoaXMuX2Vycm9yUHJvY2Vzc2luZyhm aWxlcywgcmVzcG9uc2UgfHwgX3RoaXMub3B0aW9ucy5kaWN0UmVzcG9uc2VF cnJvci5yZXBsYWNlKCJ7e3N0YXR1c0NvZGV9fSIsIHhoci5zdGF0dXMpLCB4 aHIpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIF9yZXN1bHRz OworICAgICAgICB9OworICAgICAgfSkodGhpcyk7CisgICAgICB1cGRhdGVQ cm9ncmVzcyA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4g ZnVuY3Rpb24oZSkgeworICAgICAgICAgIHZhciBhbGxGaWxlc0ZpbmlzaGVk LCBwcm9ncmVzcywgX2osIF9rLCBfbCwgX2xlbjEsIF9sZW4yLCBfbGVuMywg X3Jlc3VsdHM7CisgICAgICAgICAgaWYgKGUgIT0gbnVsbCkgeworICAgICAg ICAgICAgcHJvZ3Jlc3MgPSAxMDAgKiBlLmxvYWRlZCAvIGUudG90YWw7Cisg ICAgICAgICAgICBmb3IgKF9qID0gMCwgX2xlbjEgPSBmaWxlcy5sZW5ndGg7 IF9qIDwgX2xlbjE7IF9qKyspIHsKKyAgICAgICAgICAgICAgZmlsZSA9IGZp bGVzW19qXTsKKyAgICAgICAgICAgICAgZmlsZS51cGxvYWQgPSB7CisgICAg ICAgICAgICAgICAgcHJvZ3Jlc3M6IHByb2dyZXNzLAorICAgICAgICAgICAg ICAgIHRvdGFsOiBlLnRvdGFsLAorICAgICAgICAgICAgICAgIGJ5dGVzU2Vu dDogZS5sb2FkZWQKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxsRmlsZXNGaW5p c2hlZCA9IHRydWU7CisgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMDsKKyAg ICAgICAgICAgIGZvciAoX2sgPSAwLCBfbGVuMiA9IGZpbGVzLmxlbmd0aDsg X2sgPCBfbGVuMjsgX2srKykgeworICAgICAgICAgICAgICBmaWxlID0gZmls ZXNbX2tdOworICAgICAgICAgICAgICBpZiAoIShmaWxlLnVwbG9hZC5wcm9n cmVzcyA9PT0gMTAwICYmIGZpbGUudXBsb2FkLmJ5dGVzU2VudCA9PT0gZmls ZS51cGxvYWQudG90YWwpKSB7CisgICAgICAgICAgICAgICAgYWxsRmlsZXNG aW5pc2hlZCA9IGZhbHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGZpbGUudXBsb2FkLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisgICAgICAg ICAgICAgIGZpbGUudXBsb2FkLmJ5dGVzU2VudCA9IGZpbGUudXBsb2FkLnRv dGFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFsbEZpbGVz RmluaXNoZWQpIHsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBfcmVzdWx0cyA9IFtdOwor ICAgICAgICAgIGZvciAoX2wgPSAwLCBfbGVuMyA9IGZpbGVzLmxlbmd0aDsg X2wgPCBfbGVuMzsgX2wrKykgeworICAgICAgICAgICAgZmlsZSA9IGZpbGVz W19sXTsKKyAgICAgICAgICAgIF9yZXN1bHRzLnB1c2goX3RoaXMuZW1pdCgi dXBsb2FkcHJvZ3Jlc3MiLCBmaWxlLCBwcm9ncmVzcywgZmlsZS51cGxvYWQu Ynl0ZXNTZW50KSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBf cmVzdWx0czsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAg eGhyLm9ubG9hZCA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1 cm4gZnVuY3Rpb24oZSkgeworICAgICAgICAgIHZhciBfcmVmOworICAgICAg ICAgIGlmIChmaWxlc1swXS5zdGF0dXMgPT09IERyb3B6b25lLkNBTkNFTEVE KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAg ICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkgeworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgICByZXNwb25zZSA9IHho ci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgaWYgKHhoci5nZXRSZXNwb25z ZUhlYWRlcigiY29udGVudC10eXBlIikgJiYgfnhoci5nZXRSZXNwb25zZUhl YWRlcigiY29udGVudC10eXBlIikuaW5kZXhPZigiYXBwbGljYXRpb24vanNv biIpKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICByZXNw b25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpOworICAgICAgICAgICAgfSBj YXRjaCAoX2Vycm9yKSB7CisgICAgICAgICAgICAgIGUgPSBfZXJyb3I7Cisg ICAgICAgICAgICAgIHJlc3BvbnNlID0gIkludmFsaWQgSlNPTiByZXNwb25z ZSBmcm9tIHNlcnZlci4iOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K KyAgICAgICAgICB1cGRhdGVQcm9ncmVzcygpOworICAgICAgICAgIGlmICgh KCgyMDAgPD0gKF9yZWYgPSB4aHIuc3RhdHVzKSAmJiBfcmVmIDwgMzAwKSkp IHsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigpOworICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2Zpbmlz aGVkKGZpbGVzLCByZXNwb25zZSwgZSk7CisgICAgICAgICAgfQorICAgICAg ICB9OworICAgICAgfSkodGhpcyk7CisgICAgICB4aHIub25lcnJvciA9IChm dW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7 CisgICAgICAgICAgaWYgKGZpbGVzWzBdLnN0YXR1cyA9PT0gRHJvcHpvbmUu Q0FOQ0VMRUQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9 CisgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCk7CisgICAgICAgIH07 CisgICAgICB9KSh0aGlzKTsKKyAgICAgIHByb2dyZXNzT2JqID0gKF9yZWYg PSB4aHIudXBsb2FkKSAhPSBudWxsID8gX3JlZiA6IHhocjsKKyAgICAgIHBy b2dyZXNzT2JqLm9ucHJvZ3Jlc3MgPSB1cGRhdGVQcm9ncmVzczsKKyAgICAg IGhlYWRlcnMgPSB7CisgICAgICAgICJBY2NlcHQiOiAiYXBwbGljYXRpb24v anNvbiIsCisgICAgICAgICJDYWNoZS1Db250cm9sIjogIm5vLWNhY2hlIiwK KyAgICAgICAgIlgtUmVxdWVzdGVkLVdpdGgiOiAiWE1MSHR0cFJlcXVlc3Qi CisgICAgICB9OworICAgICAgaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJzKSB7 CisgICAgICAgIGV4dGVuZChoZWFkZXJzLCB0aGlzLm9wdGlvbnMuaGVhZGVy cyk7CisgICAgICB9CisgICAgICBmb3IgKGhlYWRlck5hbWUgaW4gaGVhZGVy cykgeworICAgICAgICBoZWFkZXJWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyTmFt ZV07CisgICAgICAgIGlmIChoZWFkZXJWYWx1ZSkgeworICAgICAgICAgIHho ci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlck5hbWUsIGhlYWRlclZhbHVlKTsK KyAgICAgICAgfQorICAgICAgfQorICAgICAgZm9ybURhdGEgPSBuZXcgRm9y bURhdGEoKTsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMucGFyYW1zKSB7Cisg ICAgICAgIF9yZWYxID0gdGhpcy5vcHRpb25zLnBhcmFtczsKKyAgICAgICAg Zm9yIChrZXkgaW4gX3JlZjEpIHsKKyAgICAgICAgICB2YWx1ZSA9IF9yZWYx W2tleV07CisgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUp OworICAgICAgICB9CisgICAgICB9CisgICAgICBmb3IgKF9qID0gMCwgX2xl bjEgPSBmaWxlcy5sZW5ndGg7IF9qIDwgX2xlbjE7IF9qKyspIHsKKyAgICAg ICAgZmlsZSA9IGZpbGVzW19qXTsKKyAgICAgICAgdGhpcy5lbWl0KCJzZW5k aW5nIiwgZmlsZSwgeGhyLCBmb3JtRGF0YSk7CisgICAgICB9CisgICAgICBp ZiAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7CisgICAgICAgIHRo aXMuZW1pdCgic2VuZGluZ211bHRpcGxlIiwgZmlsZXMsIHhociwgZm9ybURh dGEpOworICAgICAgfQorICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1l ID09PSAiRk9STSIpIHsKKyAgICAgICAgX3JlZjIgPSB0aGlzLmVsZW1lbnQu cXVlcnlTZWxlY3RvckFsbCgiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1 dHRvbiIpOworICAgICAgICBmb3IgKF9rID0gMCwgX2xlbjIgPSBfcmVmMi5s ZW5ndGg7IF9rIDwgX2xlbjI7IF9rKyspIHsKKyAgICAgICAgICBpbnB1dCA9 IF9yZWYyW19rXTsKKyAgICAgICAgICBpbnB1dE5hbWUgPSBpbnB1dC5nZXRB dHRyaWJ1dGUoIm5hbWUiKTsKKyAgICAgICAgICBpbnB1dFR5cGUgPSBpbnB1 dC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKKyAgICAgICAgICBpZiAoaW5wdXQu dGFnTmFtZSA9PT0gIlNFTEVDVCIgJiYgaW5wdXQuaGFzQXR0cmlidXRlKCJt dWx0aXBsZSIpKSB7CisgICAgICAgICAgICBfcmVmMyA9IGlucHV0Lm9wdGlv bnM7CisgICAgICAgICAgICBmb3IgKF9sID0gMCwgX2xlbjMgPSBfcmVmMy5s ZW5ndGg7IF9sIDwgX2xlbjM7IF9sKyspIHsKKyAgICAgICAgICAgICAgb3B0 aW9uID0gX3JlZjNbX2xdOworICAgICAgICAgICAgICBpZiAob3B0aW9uLnNl bGVjdGVkKSB7CisgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGlu cHV0TmFtZSwgb3B0aW9uLnZhbHVlKTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAoIWlucHV0VHlwZSB8 fCAoKF9yZWY0ID0gaW5wdXRUeXBlLnRvTG93ZXJDYXNlKCkpICE9PSAiY2hl Y2tib3giICYmIF9yZWY0ICE9PSAicmFkaW8iKSB8fCBpbnB1dC5jaGVja2Vk KSB7CisgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoaW5wdXROYW1lLCBp bnB1dC52YWx1ZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9 CisgICAgICBmb3IgKGkgPSBfbSA9IDAsIF9yZWY1ID0gZmlsZXMubGVuZ3Ro IC0gMTsgMCA8PSBfcmVmNSA/IF9tIDw9IF9yZWY1IDogX20gPj0gX3JlZjU7 IGkgPSAwIDw9IF9yZWY1ID8gKytfbSA6IC0tX20pIHsKKyAgICAgICAgZm9y bURhdGEuYXBwZW5kKHRoaXMuX2dldFBhcmFtTmFtZShpKSwgZmlsZXNbaV0s IHRoaXMuX3JlbmFtZUZpbGVuYW1lKGZpbGVzW2ldLm5hbWUpKTsKKyAgICAg IH0KKyAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlcXVlc3QoeGhyLCBmb3Jt RGF0YSwgZmlsZXMpOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5 cGUuc3VibWl0UmVxdWVzdCA9IGZ1bmN0aW9uKHhociwgZm9ybURhdGEsIGZp bGVzKSB7CisgICAgICByZXR1cm4geGhyLnNlbmQoZm9ybURhdGEpOworICAg IH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX2ZpbmlzaGVkID0gZnVu Y3Rpb24oZmlsZXMsIHJlc3BvbnNlVGV4dCwgZSkgeworICAgICAgdmFyIGZp bGUsIF9pLCBfbGVuOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxl cy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxlID0g ZmlsZXNbX2ldOworICAgICAgICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLlNV Q0NFU1M7CisgICAgICAgIHRoaXMuZW1pdCgic3VjY2VzcyIsIGZpbGUsIHJl c3BvbnNlVGV4dCwgZSk7CisgICAgICAgIHRoaXMuZW1pdCgiY29tcGxldGUi LCBmaWxlKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBs b2FkTXVsdGlwbGUpIHsKKyAgICAgICAgdGhpcy5lbWl0KCJzdWNjZXNzbXVs dGlwbGUiLCBmaWxlcywgcmVzcG9uc2VUZXh0LCBlKTsKKyAgICAgICAgdGhp cy5lbWl0KCJjb21wbGV0ZW11bHRpcGxlIiwgZmlsZXMpOworICAgICAgfQor ICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKSB7Cisg ICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpOworICAgICAgfQor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX2Vycm9yUHJvY2Vz c2luZyA9IGZ1bmN0aW9uKGZpbGVzLCBtZXNzYWdlLCB4aHIpIHsKKyAgICAg IHZhciBmaWxlLCBfaSwgX2xlbjsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVu ID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAg ZmlsZSA9IGZpbGVzW19pXTsKKyAgICAgICAgZmlsZS5zdGF0dXMgPSBEcm9w em9uZS5FUlJPUjsKKyAgICAgICAgdGhpcy5lbWl0KCJlcnJvciIsIGZpbGUs IG1lc3NhZ2UsIHhocik7CisgICAgICAgIHRoaXMuZW1pdCgiY29tcGxldGUi LCBmaWxlKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBs b2FkTXVsdGlwbGUpIHsKKyAgICAgICAgdGhpcy5lbWl0KCJlcnJvcm11bHRp cGxlIiwgZmlsZXMsIG1lc3NhZ2UsIHhocik7CisgICAgICAgIHRoaXMuZW1p dCgiY29tcGxldGVtdWx0aXBsZSIsIGZpbGVzKTsKKyAgICAgIH0KKyAgICAg IGlmICh0aGlzLm9wdGlvbnMuYXV0b1Byb2Nlc3NRdWV1ZSkgeworICAgICAg ICByZXR1cm4gdGhpcy5wcm9jZXNzUXVldWUoKTsKKyAgICAgIH0KKyAgICB9 OworCisgICAgcmV0dXJuIERyb3B6b25lOworCisgIH0pKEVtaXR0ZXIpOwor CisgIERyb3B6b25lLnZlcnNpb24gPSAiNC4zLjAiOworCisgIERyb3B6b25l Lm9wdGlvbnMgPSB7fTsKKworICBEcm9wem9uZS5vcHRpb25zRm9yRWxlbWVu dCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBpZiAoZWxlbWVudC5nZXRB dHRyaWJ1dGUoImlkIikpIHsKKyAgICAgIHJldHVybiBEcm9wem9uZS5vcHRp b25zW2NhbWVsaXplKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpKV07Cisg ICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB2b2lkIDA7CisgICAgfQorICB9 OworCisgIERyb3B6b25lLmluc3RhbmNlcyA9IFtdOworCisgIERyb3B6b25l LmZvckVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgaWYgKHR5 cGVvZiBlbGVtZW50ID09PSAic3RyaW5nIikgeworICAgICAgZWxlbWVudCA9 IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7CisgICAgfQorICAg IGlmICgoZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5kcm9wem9uZSA6IHZv aWQgMCkgPT0gbnVsbCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBE cm9wem9uZSBmb3VuZCBmb3IgZ2l2ZW4gZWxlbWVudC4gVGhpcyBpcyBwcm9i YWJseSBiZWNhdXNlIHlvdSdyZSB0cnlpbmcgdG8gYWNjZXNzIGl0IGJlZm9y ZSBEcm9wem9uZSBoYWQgdGhlIHRpbWUgdG8gaW5pdGlhbGl6ZS4gVXNlIHRo ZSBgaW5pdGAgb3B0aW9uIHRvIHNldHVwIGFueSBhZGRpdGlvbmFsIG9ic2Vy dmVycyBvbiB5b3VyIERyb3B6b25lLiIpOworICAgIH0KKyAgICByZXR1cm4g ZWxlbWVudC5kcm9wem9uZTsKKyAgfTsKKworICBEcm9wem9uZS5hdXRvRGlz Y292ZXIgPSB0cnVlOworCisgIERyb3B6b25lLmRpc2NvdmVyID0gZnVuY3Rp b24oKSB7CisgICAgdmFyIGNoZWNrRWxlbWVudHMsIGRyb3B6b25lLCBkcm9w em9uZXMsIF9pLCBfbGVuLCBfcmVzdWx0czsKKyAgICBpZiAoZG9jdW1lbnQu cXVlcnlTZWxlY3RvckFsbCkgeworICAgICAgZHJvcHpvbmVzID0gZG9jdW1l bnQucXVlcnlTZWxlY3RvckFsbCgiLmRyb3B6b25lIik7CisgICAgfSBlbHNl IHsKKyAgICAgIGRyb3B6b25lcyA9IFtdOworICAgICAgY2hlY2tFbGVtZW50 cyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7CisgICAgICAgIHZhciBlbCwgX2ks IF9sZW4sIF9yZXN1bHRzOworICAgICAgICBfcmVzdWx0cyA9IFtdOworICAg ICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGVsZW1lbnRzLmxlbmd0aDsgX2kg PCBfbGVuOyBfaSsrKSB7CisgICAgICAgICAgZWwgPSBlbGVtZW50c1tfaV07 CisgICAgICAgICAgaWYgKC8oXnwgKWRyb3B6b25lKCR8ICkvLnRlc3QoZWwu Y2xhc3NOYW1lKSkgeworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChkcm9w em9uZXMucHVzaChlbCkpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7CisgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICAgIH07Cisg ICAgICBjaGVja0VsZW1lbnRzKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO YW1lKCJkaXYiKSk7CisgICAgICBjaGVja0VsZW1lbnRzKGRvY3VtZW50Lmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIikpOworICAgIH0KKyAgICBfcmVz dWx0cyA9IFtdOworICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZHJvcHpvbmVz Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICBkcm9wem9uZSA9 IGRyb3B6b25lc1tfaV07CisgICAgICBpZiAoRHJvcHpvbmUub3B0aW9uc0Zv ckVsZW1lbnQoZHJvcHpvbmUpICE9PSBmYWxzZSkgeworICAgICAgICBfcmVz dWx0cy5wdXNoKG5ldyBEcm9wem9uZShkcm9wem9uZSkpOworICAgICAgfSBl bHNlIHsKKyAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApOworICAgICAg fQorICAgIH0KKyAgICByZXR1cm4gX3Jlc3VsdHM7CisgIH07CisKKyAgRHJv cHpvbmUuYmxhY2tsaXN0ZWRCcm93c2VycyA9IFsvb3BlcmEuKk1hY2ludG9z aC4qdmVyc2lvblwvMTIvaV07CisKKyAgRHJvcHpvbmUuaXNCcm93c2VyU3Vw cG9ydGVkID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGNhcGFibGVCcm93c2Vy LCByZWdleCwgX2ksIF9sZW4sIF9yZWY7CisgICAgY2FwYWJsZUJyb3dzZXIg PSB0cnVlOworICAgIGlmICh3aW5kb3cuRmlsZSAmJiB3aW5kb3cuRmlsZVJl YWRlciAmJiB3aW5kb3cuRmlsZUxpc3QgJiYgd2luZG93LkJsb2IgJiYgd2lu ZG93LkZvcm1EYXRhICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpIHsKKyAg ICAgIGlmICghKCJjbGFzc0xpc3QiIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoImEiKSkpIHsKKyAgICAgICAgY2FwYWJsZUJyb3dzZXIgPSBmYWxzZTsK KyAgICAgIH0gZWxzZSB7CisgICAgICAgIF9yZWYgPSBEcm9wem9uZS5ibGFj a2xpc3RlZEJyb3dzZXJzOworICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9 IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICBy ZWdleCA9IF9yZWZbX2ldOworICAgICAgICAgIGlmIChyZWdleC50ZXN0KG5h dmlnYXRvci51c2VyQWdlbnQpKSB7CisgICAgICAgICAgICBjYXBhYmxlQnJv d3NlciA9IGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg IGNhcGFibGVCcm93c2VyID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBj YXBhYmxlQnJvd3NlcjsKKyAgfTsKKworICB3aXRob3V0ID0gZnVuY3Rpb24o bGlzdCwgcmVqZWN0ZWRJdGVtKSB7CisgICAgdmFyIGl0ZW0sIF9pLCBfbGVu LCBfcmVzdWx0czsKKyAgICBfcmVzdWx0cyA9IFtdOworICAgIGZvciAoX2kg PSAwLCBfbGVuID0gbGlzdC5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgewor ICAgICAgaXRlbSA9IGxpc3RbX2ldOworICAgICAgaWYgKGl0ZW0gIT09IHJl amVjdGVkSXRlbSkgeworICAgICAgICBfcmVzdWx0cy5wdXNoKGl0ZW0pOwor ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gX3Jlc3VsdHM7CisgIH07CisK KyAgY2FtZWxpemUgPSBmdW5jdGlvbihzdHIpIHsKKyAgICByZXR1cm4gc3Ry LnJlcGxhY2UoL1tcLV9dKFx3KS9nLCBmdW5jdGlvbihtYXRjaCkgeworICAg ICAgcmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpOworICAg IH0pOworICB9OworCisgIERyb3B6b25lLmNyZWF0ZUVsZW1lbnQgPSBmdW5j dGlvbihzdHJpbmcpIHsKKyAgICB2YXIgZGl2OworICAgIGRpdiA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGRpdi5pbm5lckhUTUwg PSBzdHJpbmc7CisgICAgcmV0dXJuIGRpdi5jaGlsZE5vZGVzWzBdOworICB9 OworCisgIERyb3B6b25lLmVsZW1lbnRJbnNpZGUgPSBmdW5jdGlvbihlbGVt ZW50LCBjb250YWluZXIpIHsKKyAgICBpZiAoZWxlbWVudCA9PT0gY29udGFp bmVyKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgd2hpbGUg KGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpIHsKKyAgICAgIGlmIChl bGVtZW50ID09PSBjb250YWluZXIpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7 CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKwor ICBEcm9wem9uZS5nZXRFbGVtZW50ID0gZnVuY3Rpb24oZWwsIG5hbWUpIHsK KyAgICB2YXIgZWxlbWVudDsKKyAgICBpZiAodHlwZW9mIGVsID09PSAic3Ry aW5nIikgeworICAgICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0 b3IoZWwpOworICAgIH0gZWxzZSBpZiAoZWwubm9kZVR5cGUgIT0gbnVsbCkg eworICAgICAgZWxlbWVudCA9IGVsOworICAgIH0KKyAgICBpZiAoZWxlbWVu dCA9PSBudWxsKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg YCIgKyBuYW1lICsgImAgb3B0aW9uIHByb3ZpZGVkLiBQbGVhc2UgcHJvdmlk ZSBhIENTUyBzZWxlY3RvciBvciBhIHBsYWluIEhUTUwgZWxlbWVudC4iKTsK KyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH07CisKKyAgRHJvcHpv bmUuZ2V0RWxlbWVudHMgPSBmdW5jdGlvbihlbHMsIG5hbWUpIHsKKyAgICB2 YXIgZSwgZWwsIGVsZW1lbnRzLCBfaSwgX2osIF9sZW4sIF9sZW4xLCBfcmVm OworICAgIGlmIChlbHMgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgZWxl bWVudHMgPSBbXTsKKyAgICAgIHRyeSB7CisgICAgICAgIGZvciAoX2kgPSAw LCBfbGVuID0gZWxzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAg ICAgICAgZWwgPSBlbHNbX2ldOworICAgICAgICAgIGVsZW1lbnRzLnB1c2go dGhpcy5nZXRFbGVtZW50KGVsLCBuYW1lKSk7CisgICAgICAgIH0KKyAgICAg IH0gY2F0Y2ggKF9lcnJvcikgeworICAgICAgICBlID0gX2Vycm9yOworICAg ICAgICBlbGVtZW50cyA9IG51bGw7CisgICAgICB9CisgICAgfSBlbHNlIGlm ICh0eXBlb2YgZWxzID09PSAic3RyaW5nIikgeworICAgICAgZWxlbWVudHMg PSBbXTsKKyAgICAgIF9yZWYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs KGVscyk7CisgICAgICBmb3IgKF9qID0gMCwgX2xlbjEgPSBfcmVmLmxlbmd0 aDsgX2ogPCBfbGVuMTsgX2orKykgeworICAgICAgICBlbCA9IF9yZWZbX2pd OworICAgICAgICBlbGVtZW50cy5wdXNoKGVsKTsKKyAgICAgIH0KKyAgICB9 IGVsc2UgaWYgKGVscy5ub2RlVHlwZSAhPSBudWxsKSB7CisgICAgICBlbGVt ZW50cyA9IFtlbHNdOworICAgIH0KKyAgICBpZiAoISgoZWxlbWVudHMgIT0g bnVsbCkgJiYgZWxlbWVudHMubGVuZ3RoKSkgeworICAgICAgdGhyb3cgbmV3 IEVycm9yKCJJbnZhbGlkIGAiICsgbmFtZSArICJgIG9wdGlvbiBwcm92aWRl ZC4gUGxlYXNlIHByb3ZpZGUgYSBDU1Mgc2VsZWN0b3IsIGEgcGxhaW4gSFRN TCBlbGVtZW50IG9yIGEgbGlzdCBvZiB0aG9zZS4iKTsKKyAgICB9CisgICAg cmV0dXJuIGVsZW1lbnRzOworICB9OworCisgIERyb3B6b25lLmNvbmZpcm0g PSBmdW5jdGlvbihxdWVzdGlvbiwgYWNjZXB0ZWQsIHJlamVjdGVkKSB7Cisg ICAgaWYgKHdpbmRvdy5jb25maXJtKHF1ZXN0aW9uKSkgeworICAgICAgcmV0 dXJuIGFjY2VwdGVkKCk7CisgICAgfSBlbHNlIGlmIChyZWplY3RlZCAhPSBu dWxsKSB7CisgICAgICByZXR1cm4gcmVqZWN0ZWQoKTsKKyAgICB9CisgIH07 CisKKyAgRHJvcHpvbmUuaXNWYWxpZEZpbGUgPSBmdW5jdGlvbihmaWxlLCBh Y2NlcHRlZEZpbGVzKSB7CisgICAgdmFyIGJhc2VNaW1lVHlwZSwgbWltZVR5 cGUsIHZhbGlkVHlwZSwgX2ksIF9sZW47CisgICAgaWYgKCFhY2NlcHRlZEZp bGVzKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgYWNjZXB0 ZWRGaWxlcyA9IGFjY2VwdGVkRmlsZXMuc3BsaXQoIiwiKTsKKyAgICBtaW1l VHlwZSA9IGZpbGUudHlwZTsKKyAgICBiYXNlTWltZVR5cGUgPSBtaW1lVHlw ZS5yZXBsYWNlKC9cLy4qJC8sICIiKTsKKyAgICBmb3IgKF9pID0gMCwgX2xl biA9IGFjY2VwdGVkRmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsK KyAgICAgIHZhbGlkVHlwZSA9IGFjY2VwdGVkRmlsZXNbX2ldOworICAgICAg dmFsaWRUeXBlID0gdmFsaWRUeXBlLnRyaW0oKTsKKyAgICAgIGlmICh2YWxp ZFR5cGUuY2hhckF0KDApID09PSAiLiIpIHsKKyAgICAgICAgaWYgKGZpbGUu bmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsaWRUeXBlLnRvTG93ZXJD YXNlKCksIGZpbGUubmFtZS5sZW5ndGggLSB2YWxpZFR5cGUubGVuZ3RoKSAh PT0gLTEpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor ICAgICAgfSBlbHNlIGlmICgvXC9cKiQvLnRlc3QodmFsaWRUeXBlKSkgewor ICAgICAgICBpZiAoYmFzZU1pbWVUeXBlID09PSB2YWxpZFR5cGUucmVwbGFj ZSgvXC8uKiQvLCAiIikpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1pbWVUeXBl ID09PSB2YWxpZFR5cGUpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cisg IH07CisKKyAgaWYgKHR5cGVvZiBqUXVlcnkgIT09ICJ1bmRlZmluZWQiICYm IGpRdWVyeSAhPT0gbnVsbCkgeworICAgIGpRdWVyeS5mbi5kcm9wem9uZSA9 IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiB0aGlzLmVhY2go ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBuZXcgRHJvcHpvbmUodGhp cywgb3B0aW9ucyk7CisgICAgICB9KTsKKyAgICB9OworICB9CisKKyAgaWYg KHR5cGVvZiBtb2R1bGUgIT09ICJ1bmRlZmluZWQiICYmIG1vZHVsZSAhPT0g bnVsbCkgeworICAgIG1vZHVsZS5leHBvcnRzID0gRHJvcHpvbmU7CisgIH0g ZWxzZSB7CisgICAgd2luZG93LkRyb3B6b25lID0gRHJvcHpvbmU7CisgIH0K KworICBEcm9wem9uZS5BRERFRCA9ICJhZGRlZCI7CisKKyAgRHJvcHpvbmUu UVVFVUVEID0gInF1ZXVlZCI7CisKKyAgRHJvcHpvbmUuQUNDRVBURUQgPSBE cm9wem9uZS5RVUVVRUQ7CisKKyAgRHJvcHpvbmUuVVBMT0FESU5HID0gInVw bG9hZGluZyI7CisKKyAgRHJvcHpvbmUuUFJPQ0VTU0lORyA9IERyb3B6b25l LlVQTE9BRElORzsKKworICBEcm9wem9uZS5DQU5DRUxFRCA9ICJjYW5jZWxl ZCI7CisKKyAgRHJvcHpvbmUuRVJST1IgPSAiZXJyb3IiOworCisgIERyb3B6 b25lLlNVQ0NFU1MgPSAic3VjY2VzcyI7CisKKworICAvKgorCisgIEJ1Z2Zp eCBmb3IgaU9TIDYgYW5kIDcKKyAgU291cmNlOiBodHRwOi8vc3RhY2tvdmVy Zmxvdy5jb20vcXVlc3Rpb25zLzExOTI5MDk5L2h0bWw1LWNhbnZhcy1kcmF3 aW1hZ2UtcmF0aW8tYnVnLWlvcworICBiYXNlZCBvbiB0aGUgd29yayBvZiBo dHRwczovL2dpdGh1Yi5jb20vc3RvbWl0YS9pb3MtaW1hZ2VmaWxlLW1lZ2Fw aXhlbAorICAgKi8KKworICBkZXRlY3RWZXJ0aWNhbFNxdWFzaCA9IGZ1bmN0 aW9uKGltZykgeworICAgIHZhciBhbHBoYSwgY2FudmFzLCBjdHgsIGRhdGEs IGV5LCBpaCwgaXcsIHB5LCByYXRpbywgc3k7CisgICAgaXcgPSBpbWcubmF0 dXJhbFdpZHRoOworICAgIGloID0gaW1nLm5hdHVyYWxIZWlnaHQ7CisgICAg Y2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Cisg ICAgY2FudmFzLndpZHRoID0gMTsKKyAgICBjYW52YXMuaGVpZ2h0ID0gaWg7 CisgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY3R4 LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAgIGRhdGEgPSBjdHguZ2V0SW1h Z2VEYXRhKDAsIDAsIDEsIGloKS5kYXRhOworICAgIHN5ID0gMDsKKyAgICBl eSA9IGloOworICAgIHB5ID0gaWg7CisgICAgd2hpbGUgKHB5ID4gc3kpIHsK KyAgICAgIGFscGhhID0gZGF0YVsocHkgLSAxKSAqIDQgKyAzXTsKKyAgICAg IGlmIChhbHBoYSA9PT0gMCkgeworICAgICAgICBleSA9IHB5OworICAgICAg fSBlbHNlIHsKKyAgICAgICAgc3kgPSBweTsKKyAgICAgIH0KKyAgICAgIHB5 ID0gKGV5ICsgc3kpID4+IDE7CisgICAgfQorICAgIHJhdGlvID0gcHkgLyBp aDsKKyAgICBpZiAocmF0aW8gPT09IDApIHsKKyAgICAgIHJldHVybiAxOwor ICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gcmF0aW87CisgICAgfQorICB9 OworCisgIGRyYXdJbWFnZUlPU0ZpeCA9IGZ1bmN0aW9uKGN0eCwgaW1nLCBz eCwgc3ksIHN3LCBzaCwgZHgsIGR5LCBkdywgZGgpIHsKKyAgICB2YXIgdmVy dFNxdWFzaFJhdGlvOworICAgIHZlcnRTcXVhc2hSYXRpbyA9IGRldGVjdFZl cnRpY2FsU3F1YXNoKGltZyk7CisgICAgcmV0dXJuIGN0eC5kcmF3SW1hZ2Uo aW1nLCBzeCwgc3ksIHN3LCBzaCwgZHgsIGR5LCBkdywgZGggLyB2ZXJ0U3F1 YXNoUmF0aW8pOworICB9OworCisKKyAgLyoKKyAgICogY29udGVudGxvYWRl ZC5qcworICAgKgorICAgKiBBdXRob3I6IERpZWdvIFBlcmluaSAoZGllZ28u cGVyaW5pIGF0IGdtYWlsLmNvbSkKKyAgICogU3VtbWFyeTogY3Jvc3MtYnJv d3NlciB3cmFwcGVyIGZvciBET01Db250ZW50TG9hZGVkCisgICAqIFVwZGF0 ZWQ6IDIwMTAxMDIwCisgICAqIExpY2Vuc2U6IE1JVAorICAgKiBWZXJzaW9u OiAxLjIKKyAgICoKKyAgICogVVJMOgorICAgKiBodHRwOi8vamF2YXNjcmlw dC5ud2JveC5jb20vQ29udGVudExvYWRlZC8KKyAgICogaHR0cDovL2phdmFz Y3JpcHQubndib3guY29tL0NvbnRlbnRMb2FkZWQvTUlULUxJQ0VOU0UKKyAg ICovCisKKyAgY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKHdpbiwgZm4pIHsK KyAgICB2YXIgYWRkLCBkb2MsIGRvbmUsIGluaXQsIHBvbGwsIHByZSwgcmVt LCByb290LCB0b3A7CisgICAgZG9uZSA9IGZhbHNlOworICAgIHRvcCA9IHRy dWU7CisgICAgZG9jID0gd2luLmRvY3VtZW50OworICAgIHJvb3QgPSBkb2Mu ZG9jdW1lbnRFbGVtZW50OworICAgIGFkZCA9IChkb2MuYWRkRXZlbnRMaXN0 ZW5lciA/ICJhZGRFdmVudExpc3RlbmVyIiA6ICJhdHRhY2hFdmVudCIpOwor ICAgIHJlbSA9IChkb2MuYWRkRXZlbnRMaXN0ZW5lciA/ICJyZW1vdmVFdmVu dExpc3RlbmVyIiA6ICJkZXRhY2hFdmVudCIpOworICAgIHByZSA9IChkb2Mu YWRkRXZlbnRMaXN0ZW5lciA/ICIiIDogIm9uIik7CisgICAgaW5pdCA9IGZ1 bmN0aW9uKGUpIHsKKyAgICAgIGlmIChlLnR5cGUgPT09ICJyZWFkeXN0YXRl Y2hhbmdlIiAmJiBkb2MucmVhZHlTdGF0ZSAhPT0gImNvbXBsZXRlIikgewor ICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICAoZS50eXBlID09PSAi bG9hZCIgPyB3aW4gOiBkb2MpW3JlbV0ocHJlICsgZS50eXBlLCBpbml0LCBm YWxzZSk7CisgICAgICBpZiAoIWRvbmUgJiYgKGRvbmUgPSB0cnVlKSkgewor ICAgICAgICByZXR1cm4gZm4uY2FsbCh3aW4sIGUudHlwZSB8fCBlKTsKKyAg ICAgIH0KKyAgICB9OworICAgIHBvbGwgPSBmdW5jdGlvbigpIHsKKyAgICAg IHZhciBlOworICAgICAgdHJ5IHsKKyAgICAgICAgcm9vdC5kb1Njcm9sbCgi bGVmdCIpOworICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7CisgICAgICAgIGUg PSBfZXJyb3I7CisgICAgICAgIHNldFRpbWVvdXQocG9sbCwgNTApOworICAg ICAgICByZXR1cm47CisgICAgICB9CisgICAgICByZXR1cm4gaW5pdCgicG9s bCIpOworICAgIH07CisgICAgaWYgKGRvYy5yZWFkeVN0YXRlICE9PSAiY29t cGxldGUiKSB7CisgICAgICBpZiAoZG9jLmNyZWF0ZUV2ZW50T2JqZWN0ICYm IHJvb3QuZG9TY3JvbGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICB0 b3AgPSAhd2luLmZyYW1lRWxlbWVudDsKKyAgICAgICAgfSBjYXRjaCAoX2Vy cm9yKSB7fQorICAgICAgICBpZiAodG9wKSB7CisgICAgICAgICAgcG9sbCgp OworICAgICAgICB9CisgICAgICB9CisgICAgICBkb2NbYWRkXShwcmUgKyAi RE9NQ29udGVudExvYWRlZCIsIGluaXQsIGZhbHNlKTsKKyAgICAgIGRvY1th ZGRdKHByZSArICJyZWFkeXN0YXRlY2hhbmdlIiwgaW5pdCwgZmFsc2UpOwor ICAgICAgcmV0dXJuIHdpblthZGRdKHByZSArICJsb2FkIiwgaW5pdCwgZmFs c2UpOworICAgIH0KKyAgfTsKKworICBEcm9wem9uZS5fYXV0b0Rpc2NvdmVy RnVuY3Rpb24gPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoRHJvcHpvbmUuYXV0 b0Rpc2NvdmVyKSB7CisgICAgICByZXR1cm4gRHJvcHpvbmUuZGlzY292ZXIo KTsKKyAgICB9CisgIH07CisKKyAgY29udGVudExvYWRlZCh3aW5kb3csIERy b3B6b25lLl9hdXRvRGlzY292ZXJGdW5jdGlvbik7CisKK30pLmNhbGwodGhp cyk7Cg== --001a11469060857bcb0532957eb0 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a11469060857bcb0532957eb0--