Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1axxOZ-0000YB-Eq for pgadmin-hackers@arkaria.postgresql.org; Wed, 04 May 2016 14:03:20 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1axxOY-0007tf-RM for pgadmin-hackers@arkaria.postgresql.org; Wed, 04 May 2016 14:03:18 +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 1axwVY-0004nu-Go for pgadmin-hackers@postgresql.org; Wed, 04 May 2016 13:06:29 +0000 Received: from mail-wm0-x236.google.com ([2a00:1450:400c:c09::236]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1axwVP-00071L-0L for pgadmin-hackers@postgresql.org; Wed, 04 May 2016 13:06:26 +0000 Received: by mail-wm0-x236.google.com with SMTP id g17so93035013wme.1 for ; Wed, 04 May 2016 06:06:18 -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 :cc; bh=V6ADpxHQZ9HEKocwnJLZmcZVW/Vca6RmtCrzSzx2bak=; b=ClTAiHQcO/NWxofkrR29Z5jKLyx6IR+VCfC6UxWCsZWa3/8W8TRtln3J96L313uKMg DVIS+4UMyBFJry6Yz1gD43olfv38El9ZmAg+O5pLtrvSk66pm8rqAHVSBKXvxoLYq72w B7f/Z7kaJ8s+AhoNNWDG1GvNt/QJTfJ1lVakvRcN/Mme9yQg97bi/cuNYNaSjg+Grzq5 WoeQN5D/JS53yiqBjQEcckOU7f/vk7iyc7IyqfeuOkt3LyBvRvwvwJAwfn+XNmkv7EMP TDTmPPfvZUJAW23d9eLyTWKbSbhTR/uUMDyZNcm6S/b+E26m6T+AEBt7sTPzhIlkrPzo 5fpg== 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:cc; bh=V6ADpxHQZ9HEKocwnJLZmcZVW/Vca6RmtCrzSzx2bak=; b=A4uW6gu0hh/Q/LsLkXsybSMfbD0RLw09V9yz49jxCsbXxlfG5WFxPSzTkWQAHAsiAE GTlGz3cED814HDEvVFQiR9T8hnLl6a4uMIYRr/xSwTDyytj7FQSvbNDZBMnEmjH3+dkF VQMw8vIEpbJU8lF+VhNhj277PPbJf9xqQxCNrUexNsta9MHbCntnWRmvfFQ0GiaJL0ob MdgBfcvnOmDXguU6oXKh8K/QZjSvHg7PhmqkHtZMivZX9JG9SvNQ3BRF3C6DR84EG8gV w2adwqJ4OqLbHoDRfcCOqjUchQ7CnkiU+9Y35a52+qLrLTXN1wn+5iM0jTZFAmlJw4Qv C22w== X-Gm-Message-State: AOPr4FVUD4TQ2XmJO+34xBekVB4Mpp0tPVEZ6on7upEgJyRQeltxOqcQkRacsetteMrDQ/YUihfk6k1N2Uo7fUh9 X-Received: by 10.28.72.132 with SMTP id v126mr9194585wma.49.1462367176884; Wed, 04 May 2016 06:06:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.53.133 with HTTP; Wed, 4 May 2016 06:05:47 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Wed, 4 May 2016 18:35:47 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch]: File Manager & Backform FileControl To: Neel Patel Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114b6a7e1c6aff053203e4af 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 --001a114b6a7e1c6aff053203e4af Content-Type: multipart/alternative; boundary=001a114b6a7e1c6af9053203e4ad --001a114b6a7e1c6af9053203e4ad Content-Type: text/plain; charset=UTF-8 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 >>> >>> >> > --001a114b6a7e1c6af9053203e4ad Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

PFA updated patch with resolved revi= ew comments.

On Thu, Apr 28, 2016 at 6:39 PM, Neel Patel <neel.patel@enterp= risedb.com> wrote:
Hi Su= rinder,

Please find additional comments as below.
<= div>
1.=C2=A0 In Windows OS, when we try to open the dia= log with default preference value then it gives error as below.
<= br>
2016-04-28 13:07:44,716: ERROR =C2=A0pgadmin: =C2=A0 =C2=A0 = =C2=A0 =C2=A0Exception on /file_manager/filemanager/2530270/ [POST]
Traceback (most recent call last):
=C2=A0 File "C:\Projec= ts\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.py", line 1477, in full_dispatch_request
=C2=A0 =C2=A0 = rv =3D self.handle_user_exception(e)
=C2=A0 File "C:\Project= s\venv_python_2_7\Lib\site-packages\flask\app.py", line 1381, in handl= e_user_exception
=C2=A0 =C2=A0 reraise(exc_type, exc_value, tb)
=C2=A0 File "C:\Projects\venv_python_2_7\Lib\site-packages\fl= ask\app.py", line 1475, in full_dispatch_request
=C2=A0 =C2= =A0 rv =3D self.dispatch_request()
=C2=A0 File "C:\Projects\= venv_python_2_7\Lib\site-packages\flask\app.py", line 1461, in dispatc= h_request
=C2=A0 =C2=A0 return self.view_functions[rule.endpoint]= (**req.view_args)
=C2=A0 File "C:\Projects\venv_python_2_7\L= ib\site-packages\flask_login.py", line 758, in decorated_view
=C2=A0 =C2=A0 return func(*args, **kwargs)
=C2=A0 File "C:= \Projects\pgadmin4\web\pgadmin\misc\file_manager\__init__.py", line 62= 9, in file_manager
=C2=A0 =C2=A0 return getattr(myFilemanager, mo= de)(**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_ty= pe)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\misc\file_= manager\__init__.py", line 331, in list_filesystem
=C2=A0 = =C2=A0 for f in sorted(os.listdir(orig_path)):
WindowsError: [Err= or 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.=C2=A0It works for all operating systems.=C2=A0

2. Folder h= aving write only permission should not allow to read the directory. Same wa= y 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/Projects/= pgadmin4_file_manager/write_only_premission/'
Fixed.=C2=A0
3. In Windows OS, when we open the file manager dialog, no dire= ctories listed though we have directories in the folder. Due to that we are= not able to=C2=A0
=C2=A0 =C2=A0 test all the functionality in wi= ndows. Once we fix this issue then we test all the functionality in windows= OS.
=C2=A0 =C2=A0
=C2=A0 =C2=A0We 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.
<= br>
4. In Windows OS, file manager dialog have issue with layout.= We are getting some margin at top before buttons.
Fixed.=C2=A0
5. When we give any special characters to folder name that it = gives error saying "Folder does not exist".
=C2=A0 =C2= =A0 Same is applicable when we give dialog_type to create_file
<= /div>
Fixed.=C2=A0
=
=C2=A0 =C2=A0
6. In create_file mode, after giving the = filename it should 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 new file throu= gh file manager then it is not showing in the list though we have selected = "All files" options.
Fixed.=C2= =A0

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

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

11. "Rename" button is enabled even though we have not selecte= d the files/folder to rename and when we click on the "Rename" bu= tton it gives below=C2=A0
=C2=A0 =C2=A0 =C2=A0error.
=C2=A0 =C2=A0 TypeError: orig_value is undefined
Fixed.=C2=A0
<= div>
12. "= Delete" button is enabled even though we have not selected the files/f= older to 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 queries.

Thanks,
Neel Patel

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

I have applied the patch file and below a= re some observations.
  • When we create the new folder and h= it the enter then 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: argume= nt of type 'NoneType' is not iterable
  • I hav= e just added the new control in "Import" dialog and observed that= new control is getting added in new tab called "General". I thin= k it should not create the new "General" tab.
  • "Selec= t" and "Cancel" buttons font is different then other dialogs= .

Thanks,
Neel Patel

On We= d, Apr 27, 2016 at 6:18 PM, Surinder Kumar <surinder.kumar@e= nterprisedb.com> wrote:
=
Hi,

The patch is for File Manag= er and Backform=C2=A0FileControl.

File M= anager:=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 u= se.

It will be used by various modules of pgAdmin4= such as
import data from file, query tool, backup & recov= ery tool=C2=A0so on.. It allows user to perform various operations such= as:=C2=A0
  • File deletion
  • File upload
  • = Create new directory
  • File rename
  • File download and=C2=A0
  • List files & folders in list and grid view.
FileControl:=C2=A0This control is used with=C2=A0Fi= le Manager.=C2=A0It=C2=A0can be used for:
  • File Select= ion =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
  • Folder=C2=A0Selec= tion=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 supp= orts all operations listed above).

=
Usage:

schema:[{
=C2=A0 id: 'select_file', label: '{{ _('Select Fi= le')}}',=C2=A0
= =C2=A0 type: 'text',=C2=A0control:=C2=A0Backform.FileCont= rol,
=C2=A0=C2=A0= dialog_type: 'select_file',=C2=A0supp_types: ['*', &= #39;pdf', 'text', 'patch', 'py']
}

Where:
  • control=C2=A0- It should be=C2=A0Backform.FileControl
  • dialog_type=C2=A0- the type of dialog to use.
  • options c= an be:=C2=A0=C2=A0select_file, select_folder, create_file & storage_= dialog.
  • supp_types(not mandatory)=C2=A0- 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=




--001a114b6a7e1c6af9053203e4ad-- --001a114b6a7e1c6aff053203e4af Content-Type: application/octet-stream; name="FileManager_and_Backform_FileControl_v1.patch" Content-Disposition: attachment; filename="FileManager_and_Backform_FileControl_v1.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_insvnhi70 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL19f aW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvX19p bml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjYzMDRiOQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mv ZmlsZV9tYW5hZ2VyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNzUwIEBACisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQg LSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAt IDIwMTYsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBz b2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNl bmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiJJ bXBsZW1lbnRzIEZpbGUgTWFuYWdlciIiIgorCitmcm9tIHBnYWRtaW4udXRp bHMgaW1wb3J0IFBnQWRtaW5Nb2R1bGUKK2Zyb20gZmxhc2suZXh0LmJhYmVs IGltcG9ydCBnZXR0ZXh0Citmcm9tIGZsYXNrLmV4dC5zZWN1cml0eSBpbXBv cnQgbG9naW5fcmVxdWlyZWQKK2Zyb20gZmxhc2sgaW1wb3J0IHJlbmRlcl90 ZW1wbGF0ZSwgUmVzcG9uc2UsIHNlc3Npb24sIHJlcXVlc3QgYXMgcmVxLCB1 cmxfZm9yCitmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgbWFrZV9q c29uX3Jlc3BvbnNlCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgb3MKK2ltcG9y dCBvcy5wYXRoCitmcm9tIG9zLnBhdGggaW1wb3J0IGV4cGFuZHVzZXIKK2lt cG9ydCB0aW1lCitpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCisKKyMgaW1w b3J0IHVucXVvdGUgZnJvbSB1cmxpYiBmb3IgcHl0aG9uMi54IGFuZCBweXRo b24zLngKK3RyeToKKyAgICBmcm9tIHVybGxpYiBpbXBvcnQgdW5xdW90ZQor ZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgIGZyb20gdXJsbGliLnBhcnNl IGltcG9ydCB1bnF1b3RlCisKK01PRFVMRV9OQU1FID0gJ2ZpbGVfbWFuYWdl cicKK2dsb2JhbCB0cmFuc2lkCisKK3BhdGhfZXhpc3RzID0gb3MucGF0aC5l eGlzdHMKK3NwbGl0X3BhdGggPSBvcy5wYXRoLnNwbGl0CitlbmNvZGVfanNv biA9IGpzb24uSlNPTkVuY29kZXIoKS5lbmNvZGUKKworCisjIHV0aWxpdHkg ZnVuY3Rpb25zCisjIGNvbnZlcnQgYnl0ZXMgdHlwZSB0byBodW1hbiByZWFk YWJsZSBmb3JtYXQKK2RlZiBzaXplb2ZfZm10KG51bSwgc3VmZml4PSdCJyk6 CisgICAgZm9yIHVuaXQgaW4gWycnLCAnS2knLCAnTWknLCAnR2knLCAnVGkn LCAnUGknLCAnRWknLCAnWmknXToKKyAgICAgICAgaWYgYWJzKG51bSkgPCAx MDI0LjA6CisgICAgICAgICAgICByZXR1cm4gIiUzLjFmJXMlcyIgJSAobnVt LCB1bml0LCBzdWZmaXgpCisgICAgICAgIG51bSAvPSAxMDI0LjAKKyAgICBy ZXR1cm4gIiUuMWYlcyVzIiAlIChudW0sICdZaScsIHN1ZmZpeCkKKworCisj IHJldHVybiBzaXplIG9mIGZpbGUKK2RlZiBnZXRTaXplKHBhdGgpOgorICAg IHN0ID0gb3Muc3RhdChwYXRoKQorICAgIHJldHVybiBzdC5zdF9zaXplCisK KworIyBzcGxpdCBleHRlbnNpb24gZm9yIGZpbGVzCitkZWYgc3BsaXRleHQo cGF0aCk6CisgICAgZm9yIGV4dCBpbiBbJy50YXIuZ3onLCAnLnRhci5iejIn XToKKyAgICAgICAgaWYgcGF0aC5lbmRzd2l0aChleHQpOgorICAgICAgICAg ICAgcGF0aCwgZXh0ID0gcGF0aFs6LWxlbihleHQpXSwgcGF0aFstbGVuKGV4 dCk6XQorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBw YXRoLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHBhdGgpCisgICAgcmV0dXJu IGV4dFsxOl0KKworCitjbGFzcyBGaWxlTWFuYWdlck1vZHVsZShQZ0FkbWlu TW9kdWxlKToKKyAgICAiIiIKKyAgICBGaWxlTWFuYWdlciBsaXN0cyBmaWxl cyBhbmQgZm9sZGVycyBhbmQgZG9lcworICAgIGZvbGxvd2luZyBvcGVyYXRp b25zOgorICAgIC0gRmlsZSBzZWxlY3Rpb24KKyAgICAtIEZvbGRlciBzZWxl Y3Rpb24KKyAgICAtIE9wZW4gZmlsZQorICAgIC0gQ3JlYXRlIEZpbGUKKyAg ICBhbmQgYWxzbyBzdXBwb3J0czoKKyAgICAtIFJlbmFtZSBmaWxlCisgICAg LSBEZWxldGUgZmlsZQorICAgIC0gVXBsb2FkIGZpbGUKKyAgICAtIENyZWF0 ZSBmb2xkZXIKKyAgICAiIiIKKworICAgIExBQkVMID0gZ2V0dGV4dCgiU3Rv cmFnZSIpCisKKyAgICBkZWYgZ2V0X293bl9qYXZhc2NyaXB0cyhzZWxmKToK KyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICB7CisgICAgICAgICAgICAn bmFtZSc6ICdwZ2FkbWluLmZpbGVfbWFuYWdlcicsCisgICAgICAgICAgICAn cGF0aCc6IHVybF9mb3IoJ2ZpbGVfbWFuYWdlci5pbmRleCcpICsgJ2ZpbGVf bWFuYWdlcicsCisgICAgICAgICAgICAnd2hlbic6ICdzZXJ2ZXInCisgICAg ICAgICAgfSwKKyAgICAgICAgICBdCisKKyAgICBkZWYgZ2V0X293bl9zdHls ZXNoZWV0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAg ICAgdXJsX2Zvcignc3RhdGljJywgZmlsZW5hbWU9J2Nzcy9qcXVlcnkuZHJv cHpvbmUvZHJvcHpvbmUuY3NzJykKKyAgICAgICAgICAgIF0KKworICAgIGRl ZiBnZXRfb3duX21lbnVpdGVtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHsK KyAgICAgICAgICAgICdmaWxlX2l0ZW1zJzogW10KKyAgICAgICAgfQorCisg ICAgZGVmIGdldF9maWxlX3NpemVfcHJlZmVyZW5jZShzZWxmKToKKyAgICAg ICAgcmV0dXJuIHNlbGYuZmlsZV91cGxvYWRfc2l6ZQorCisgICAgZGVmIGdl dF9zdG9yYWdlX2Rpcl9wcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXR1 cm4gc2VsZi5zdG9yYWdlX2RpcgorCisgICAgZGVmIHJlZ2lzdGVyX3ByZWZl cmVuY2VzKHNlbGYpOgorICAgICAgICAjIFJlZ2lzdGVyICdmaWxlIHVwbG9h ZCBzaXplJyBwcmVmZXJlbmNlCisgICAgICAgIHNlbGYuZmlsZV91cGxvYWRf c2l6ZSA9IHNlbGYucHJlZmVyZW5jZS5yZWdpc3RlcigKKyAgICAgICAgICAg ICdvcHRpb25zJywgJ2ZpbGVfdXBsb2FkX3NpemUnLAorICAgICAgICAgICAg Z2V0dGV4dCgiTWF4aW11bSBmaWxlIHVwbG9hZCBzaXplKE1CKSIpLCAnaW50 ZWdlcicsIDUwLAorICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9Z2V0dGV4 dCgnT3B0aW9ucycpCisgICAgICAgICAgICApCisKKyAgICAgICAgIyBHZXQg Y3VycmVudCB1c2VyIGhvbWUgZGlyZWN0b3J5CisgICAgICAgIGhvbWUgPSBl eHBhbmR1c2VyKCJ+IikKKyAgICAgICAgIyBSZWdpc3RlciAnU3RvcmFnZSBE aXJlY3RvcnknIHByZWZlcmVuY2UKKyAgICAgICAgc2VsZi5zdG9yYWdlX2Rp ciA9IHNlbGYucHJlZmVyZW5jZS5yZWdpc3RlcigKKyAgICAgICAgICAgICdv cHRpb25zJywgJ3N0b3JhZ2VfZGlyJywKKyAgICAgICAgICAgIGdldHRleHQo IkRpcmVjdG9yeSBuYW1lIGZvciBTdG9yYWdlIE1hbmFnZXIiKSwgJ3RleHQn LCBob21lLAorICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9Z2V0dGV4dCgn T3B0aW9ucycpCisgICAgICAgICAgICApCisKKyMgSW5pdGlhbGlzZSB0aGUg bW9kdWxlCitibHVlcHJpbnQgPSBGaWxlTWFuYWdlck1vZHVsZSgKKyAgICBN T0RVTEVfTkFNRSwKKyAgICBfX25hbWVfXywKKyAgICApCisKKworQGJsdWVw cmludC5yb3V0ZSgiLyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBpbmRleCgp OgorICAgICIiIlJlbmRlciB0aGUgcHJlZmVyZW5jZXMgZGlhbG9nLiIiIgor ICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICBNT0RV TEVfTkFNRSArICIvaW5kZXguaHRtbCIsIF89Z2V0dGV4dCkKKworCitAYmx1 ZXByaW50LnJvdXRlKCIvdXRpbGl0eS5qcyIpCitAbG9naW5fcmVxdWlyZWQK K2RlZiB1dGlsaXR5KCk6CisgICAgIiIicmVuZGVyIHRoZSByZXF1aXJlZCBq YXZhc2NyaXB0IiIiCisgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJl bmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgImZpbGVfbWFuYWdlci9qcy91dGls aXR5LmpzIiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgc3RhdHVzPTIwMCwKKyAg ICAgICAgbWltZXR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiKQorCisK K0BibHVlcHJpbnQucm91dGUoIi9maWxlX21hbmFnZXIuanMiKQorQGxvZ2lu X3JlcXVpcmVkCitkZWYgZmlsZV9tYW5hZ2VyX2pzKCk6CisgICAgIiIicmVu ZGVyIHRoZSByZXF1aXJlZCBqYXZhc2NyaXB0IiIiCisgICAgcmV0dXJuIFJl c3BvbnNlKHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgImZp bGVfbWFuYWdlci9qcy9maWxlX21hbmFnZXIuanMiLCBfPWdldHRleHQpLAor ICAgICAgICBzdGF0dXM9MjAwLAorICAgICAgICBtaW1ldHlwZT0iYXBwbGlj YXRpb24vamF2YXNjcmlwdCIpCisKKworQGJsdWVwcmludC5yb3V0ZSgiL2Vu LmpzIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIGxhbmd1YWdlKCk6CisgICAg IiIicmVuZGVyIHRoZSByZXF1aXJlZCBqYXZhc2NyaXB0IiIiCisgICAgcmV0 dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgImZpbGVfbWFuYWdlci9qcy9sYW5ndWFnZXMvZW4uanMiLCBfPWdldHRl eHQpLAorICAgICAgICBzdGF0dXM9MjAwLAorICAgICAgICBtaW1ldHlwZT0i YXBwbGljYXRpb24vamF2YXNjcmlwdCIpCisKKworQGJsdWVwcmludC5yb3V0 ZSgiL2ZpbGVfbWFuYWdlcl9jb25maWcuanMiKQorQGxvZ2luX3JlcXVpcmVk CitkZWYgZmlsZV9tYW5hZ2VyX2NvbmZpZ19qcygpOgorICAgICIiInJlbmRl ciB0aGUgcmVxdWlyZWQgamF2YXNjcmlwdCIiIgorICAgIHJldHVybiBSZXNw b25zZShyZXNwb25zZT1yZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICJmaWxl X21hbmFnZXIvanMvZmlsZV9tYW5hZ2VyX2NvbmZpZy5qcyIsIF89Z2V0dGV4 dCksCisgICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgIG1pbWV0eXBlPSJh cHBsaWNhdGlvbi9qYXZhc2NyaXB0IikKKworCitAYmx1ZXByaW50LnJvdXRl KCIvPGludDp0cmFuc19pZD4vZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uIikK K0Bsb2dpbl9yZXF1aXJlZAorZGVmIGZpbGVfbWFuYWdlcl9jb25maWcodHJh bnNfaWQpOgorICAgICIiInJlbmRlciB0aGUgcmVxdWlyZWQganNvbiIiIgor ICAgICMgdHJhbnNfaWQgPSBGaWxlbWFuYWdlci5jcmVhdGVfbmV3X3RyYW5z YWN0aW9uKCkKKyAgICBkYXRhID0gRmlsZW1hbmFnZXIuZ2V0X3RyYXNhY3Rp b25fc2VsZWN0aW9uKHRyYW5zX2lkKQorICAgIHJldHVybiBSZXNwb25zZShy ZXNwb25zZT1yZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICJmaWxlX21hbmFn ZXIvanMvZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uIiwgXz1nZXR0ZXh0LAor ICAgICAgICBkYXRhPWRhdGEpLAorICAgICAgICBzdGF0dXM9MjAwLAorICAg ICAgICBtaW1ldHlwZT0iYXBwbGljYXRpb24vanNvbiIpCisKKworQGJsdWVw cmludC5yb3V0ZSgiL2dldF90cmFuc19pZCIsIG1ldGhvZHM9WyJHRVQiLCAi UE9TVCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgZ2V0X3RyYW5zX2lkKCk6 CisgICAgaWYgbGVuKHJlcS5kYXRhKSAhPSAwOgorICAgICAgICBjb25maWdz ID0ganNvbi5sb2FkcyhyZXEuZGF0YSkKKyAgICAgICAgdHJhbnNfaWQgPSBG aWxlbWFuYWdlci5jcmVhdGVfbmV3X3RyYW5zYWN0aW9uKGNvbmZpZ3MpCisg ICAgICAgIGdsb2JhbCB0cmFuc2lkCisgICAgICAgIHRyYW5zaWQgPSB0cmFu c19pZAorICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAg IGRhdGE9eydmaWxlVHJhbnNJZCc6IHRyYW5zaWQsICdzdGF0dXMnOiBUcnVl fQorICAgICkKKworCitAYmx1ZXByaW50LnJvdXRlKCIvZGVsX3RyYW5zX2lk LzxpbnQ6dHJhbnNfaWQ+IiwgbWV0aG9kcz1bIkdFVCIsICJQT1NUIl0pCitA bG9naW5fcmVxdWlyZWQKK2RlZiBkZWxldGVfdHJhbnNfaWQodHJhbnNfaWQp OgorICAgIEZpbGVtYW5hZ2VyLnJlbGVhc2VfdHJhbnNhY3Rpb24odHJhbnNf aWQpCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAg ZGF0YT17J3N0YXR1cyc6IFRydWV9CisgICAgKQorCisKK2NsYXNzIEZpbGVt YW5hZ2VyKG9iamVjdCk6CisgICAgIiIiRmlsZU1hbmFnZXIgQ2xhc3MuIiIi CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zX2lkKToKKyAgICAgICAg c2VsZi50cmFuc19pZCA9IHRyYW5zX2lkCisgICAgICAgIHNlbGYucGF0aGVy cm9yID0gZW5jb2RlX2pzb24oCisgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAnRXJyb3InOiAnTm8gcGVybWlzc2lvbiB0byBvcGVy YXRlIG9uIHNwZWNpZmllZCBwYXRoLicsCisgICAgICAgICAgICAgICAgICAg ICdDb2RlJzogLTEKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAp CisgICAgICAgIHNlbGYuZGlyID0gYmx1ZXByaW50LmdldF9zdG9yYWdlX2Rp cl9wcmVmZXJlbmNlKCkuZ2V0KCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAg ICBkZWYgY3JlYXRlX25ld190cmFuc2FjdGlvbihwYXJhbXMpOgorICAgICAg ICAiIiIKKyAgICAgICAgSXQgd2lsbCBhbHNvIGNyZWF0ZSBhIHVuaXF1ZSB0 cmFuc2FjdGlvbiBpZCBhbmQKKyAgICAgICAgc3RvcmUgdGhlIGluZm9ybWF0 aW9uIGludG8gc2Vzc2lvbiB2YXJpYWJsZS4KKyAgICAgICAgQXJnczoKKyAg ICAgICAgICAgIGNhcGFiaWxpdGllczogQWxsb3cvRGlzYWxsb3cgdXNlciB0 byBwZXJmb3JtCisgICAgICAgICAgICBzZWxlY3Rpb24sIHJlbmFtZSwgZGVs ZXRlIGV0Yy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBEZWZpbmUgY29u ZmlncyBmb3IgZGlhbG9nIHR5cGVzCisgICAgICAgICMgc2VsZWN0IGZpbGUs IHNlbGVjdCBmb2xkZXIsIGNyZWF0ZSBtb2RlCisgICAgICAgIGZtX3R5cGUg PSBwYXJhbXNbJ2RpYWxvZ190eXBlJ10KKyAgICAgICAgIyBzdXBwX3R5cGVz ID0gW10KKyAgICAgICAgc3VwcF90eXBlcyA9IGFsbG93X3VwbG9hZF9maWxl cyA9IHBhcmFtc1snc3VwcG9ydGVkX3R5cGVzJ10gXAorICAgICAgICAgICAg aWYgJ3N1cHBvcnRlZF90eXBlcycgaW4gcGFyYW1zIGVsc2UgW10KKyAgICAg ICAgaWYgZm1fdHlwZSA9PSAnc2VsZWN0X2ZpbGUnOgorICAgICAgICAgICAg Y2FwYWJpbGl0aWVzID0gWydzZWxlY3RfZmlsZScsICdyZW5hbWUnLCAndXBs b2FkJywgJ2NyZWF0ZSddCisgICAgICAgICAgICBzdXBwX3R5cGVzID0gc3Vw cF90eXBlcworICAgICAgICAgICAgZmlsZXNfb25seSA9IFRydWUKKyAgICAg ICAgICAgIGZvbGRlcnNfb25seSA9IEZhbHNlCisgICAgICAgICAgICB0aXRs ZSA9ICJTZWxlY3QgRmlsZSIKKyAgICAgICAgZWxpZiBmbV90eXBlID09ICdz ZWxlY3RfZm9sZGVyJzoKKyAgICAgICAgICAgIGNhcGFiaWxpdGllcyA9IFsn c2VsZWN0X2ZvbGRlcicsICdyZW5hbWUnLCAnY3JlYXRlJ10KKyAgICAgICAg ICAgIGZpbGVzX29ubHkgPSBGYWxzZQorICAgICAgICAgICAgZm9sZGVyc19v bmx5ID0gVHJ1ZQorICAgICAgICAgICAgdGl0bGUgPSAiU2VsZWN0IEZvbGRl ciIKKyAgICAgICAgZWxpZiBmbV90eXBlID09ICdjcmVhdGVfZmlsZSc6Cisg ICAgICAgICAgICBjYXBhYmlsaXRpZXMgPSBbJ3NlbGVjdF9maWxlJywgJ3Jl bmFtZScsICdjcmVhdGUnXQorICAgICAgICAgICAgc3VwcF90eXBlcyA9IHN1 cHBfdHlwZXMKKyAgICAgICAgICAgIGZpbGVzX29ubHkgPSBUcnVlCisgICAg ICAgICAgICBmb2xkZXJzX29ubHkgPSBGYWxzZQorICAgICAgICAgICAgdGl0 bGUgPSAiQ3JlYXRlIEZpbGUiCisgICAgICAgIGVsaWYgZm1fdHlwZSA9PSAn c3RvcmFnZV9kaWFsb2cnOgorICAgICAgICAgICAgY2FwYWJpbGl0aWVzID0g WydzZWxlY3RfZm9sZGVyJywgJ3NlbGVjdF9maWxlJywgJ2Rvd25sb2FkJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVuYW1lJywgJ2RlbGV0 ZScsICd1cGxvYWQnLCAnY3JlYXRlJ10KKyAgICAgICAgICAgIHN1cHBfdHlw ZXMgPSBzdXBwX3R5cGVzCisgICAgICAgICAgICBmaWxlc19vbmx5ID0gVHJ1 ZQorICAgICAgICAgICAgZm9sZGVyc19vbmx5ID0gRmFsc2UKKyAgICAgICAg ICAgIHRpdGxlID0gIlN0b3JhZ2UgTWFuYWdlciIKKworICAgICAgICAjIGNy ZWF0ZSBjb25maWdzIHVzaW5nIGFib3ZlIGNvbmZpZ3MKKyAgICAgICAgY29u ZmlncyA9IHsKKyAgICAgICAgICAiZmlsZXJvb3QiOiAiLyIsCisgICAgICAg ICAgImRpYWxvZ190eXBlIjogZm1fdHlwZSwKKyAgICAgICAgICAidGl0bGUi OiB0aXRsZSwKKyAgICAgICAgICAidXBsb2FkIjogeworICAgICAgICAgICAg ICAibXVsdGlwbGUiOiBUcnVlCisgICAgICAgICAgfSwKKyAgICAgICAgICAi Y2FwYWJpbGl0aWVzIjogY2FwYWJpbGl0aWVzLAorICAgICAgICAgICJzZWN1 cml0eSI6IHsKKyAgICAgICAgICAgICAgInVwbG9hZFBvbGljeSI6ICIiLAor ICAgICAgICAgICAgICAidXBsb2FkUmVzdHJpY3Rpb25zIjogYWxsb3dfdXBs b2FkX2ZpbGVzCisgICAgICAgICAgfSwKKyAgICAgICAgICAiZmlsZXNfb25s eSI6IGZpbGVzX29ubHksCisgICAgICAgICAgImZvbGRlcnNfb25seSI6IGZv bGRlcnNfb25seSwKKyAgICAgICAgICAic3VwcG9ydGVkX3R5cGVzIjogc3Vw cF90eXBlcworICAgICAgICB9CisKKyAgICAgICAgIyBDcmVhdGUgYSB1bmlx dWUgaWQgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAgICB0cmFuc19pZCA9 IHN0cihyYW5kb20ucmFuZGludCgxLCA5OTk5OTk5KSkKKworICAgICAgICBp ZiAnZmlsZU1hbmFnZXJEYXRhJyBub3QgaW4gc2Vzc2lvbjoKKyAgICAgICAg ICAgIGZpbGVfbWFuYWdlcl9kYXRhID0gZGljdCgpCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICBmaWxlX21hbmFnZXJfZGF0YSA9IHNlc3Npb25bJ2Zp bGVNYW5hZ2VyRGF0YSddCisKKyAgICAgICAgZmlsZV91cGxvYWRfc2l6ZSA9 IGJsdWVwcmludC5nZXRfZmlsZV9zaXplX3ByZWZlcmVuY2UoKS5nZXQoKQor ICAgICAgICBjb25maWdzWyd1cGxvYWQnXVsnZmlsZVNpemVMaW1pdCddID0g ZmlsZV91cGxvYWRfc2l6ZQorICAgICAgICBmaWxlX21hbmFnZXJfZGF0YVt0 cmFuc19pZF0gPSBjb25maWdzCisgICAgICAgIHNlc3Npb25bJ2ZpbGVNYW5h Z2VyRGF0YSddID0gZmlsZV9tYW5hZ2VyX2RhdGEKKworICAgICAgICByZXR1 cm4gdHJhbnNfaWQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0 X3RyYXNhY3Rpb25fc2VsZWN0aW9uKHRyYW5zX2lkKToKKyAgICAgICAgIiIi CisgICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGluZm9ybWF0aW9u IG9mIHVuaXF1ZSB0cmFuc2FjdGlvbgorICAgICAgICBpZCBmcm9tIHRoZSBz ZXNzaW9uIHZhcmlhYmxlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg ICB0cmFuc19pZDogdW5pcXVlIHRyYW5zYWN0aW9uIGlkCisgICAgICAgICIi IgorICAgICAgICBmaWxlX21hbmFnZXJfZGF0YSA9IHNlc3Npb25bJ2ZpbGVN YW5hZ2VyRGF0YSddCisKKyAgICAgICAgIyBSZXR1cm4gZnJvbSB0aGUgZnVu Y3Rpb24gaWYgdHJhbnNhY3Rpb24gaWQgbm90IGZvdW5kCisgICAgICAgIGlm IHN0cih0cmFuc19pZCkgaW4gZmlsZV9tYW5hZ2VyX2RhdGE6CisgICAgICAg ICAgICByZXR1cm4gZmlsZV9tYW5hZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0K KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmVsZWFzZV90cmFuc2Fj dGlvbih0cmFuc19pZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1l dGhvZCBpcyB0byByZW1vdmUgdGhlIGluZm9ybWF0aW9uIG9mIHVuaXF1ZSB0 cmFuc2FjdGlvbgorICAgICAgICBpZCBmcm9tIHRoZSBzZXNzaW9uIHZhcmlh YmxlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0cmFuc19pZDog dW5pcXVlIHRyYW5zYWN0aW9uIGlkCisgICAgICAgICIiIgorICAgICAgICBm aWxlX21hbmFnZXJfZGF0YSA9IHNlc3Npb25bJ2ZpbGVNYW5hZ2VyRGF0YSdd CisgICAgICAgICMgUmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uIGlmIHRyYW5z YWN0aW9uIGlkIG5vdCBmb3VuZAorICAgICAgICBpZiBzdHIodHJhbnNfaWQp IG5vdCBpbiBmaWxlX21hbmFnZXJfZGF0YToKKyAgICAgICAgICAgIHJldHVy biBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IFRydWV9KQor CisgICAgICAgICMgUmVtb3ZlIHRoZSBpbmZvcm1hdGlvbiBvZiB1bmlxdWUg dHJhbnNhY3Rpb24gaWQKKyAgICAgICAgIyBmcm9tIHRoZSBzZXNzaW9uIHZh cmlhYmxlLgorICAgICAgICBmaWxlX21hbmFnZXJfZGF0YS5wb3Aoc3RyKHRy YW5zX2lkKSwgTm9uZSkKKyAgICAgICAgc2Vzc2lvblsnZmlsZU1hbmFnZXJE YXRhJ10gPSBmaWxlX21hbmFnZXJfZGF0YQorCisgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IFRydWV9KQorCisg ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsaXN0X2ZpbGVzeXN0ZW0oZGly LCBwYXRoLCB0cmFuc19kYXRhLCBmaWxlX3R5cGUpOgorICAgICAgICAiIiIK KyAgICAgICAgSXQgbGlzdHMgYWxsIGZpbGUgYW5kIGZvbGRlcnMgd2l0aGlu IHRoZSBnaXZlbgorICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICIiIgor ICAgICAgICBvcmlnX3BhdGggPSAiezB9ezF9Ii5mb3JtYXQoZGlyLCBwYXRo KQorICAgICAgICB1c2VyX2RpciA9IHBhdGgKKyAgICAgICAgZmlsZXMgPSB7 fQorICAgICAgICBmb2xkZXJzX29ubHkgPSB0cmFuc19kYXRhWydmb2xkZXJz X29ubHknXSBpZiAnZm9sZGVyc19vbmx5JyBpbiBcCisgICAgICAgICAgICB0 cmFuc19kYXRhIGVsc2UgJycKKyAgICAgICAgZmlsZXNfb25seSA9IHRyYW5z X2RhdGFbJ2ZpbGVzX29ubHknXSBpZiAnZmlsZXNfb25seScgaW4gXAorICAg ICAgICAgICAgdHJhbnNfZGF0YSBlbHNlICcnCisgICAgICAgIHN1cHBvcnRl ZF90eXBlcyA9IHRyYW5zX2RhdGFbJ3N1cHBvcnRlZF90eXBlcyddIFwKKyAg ICAgICAgICAgIGlmICdzdXBwb3J0ZWRfdHlwZXMnIGluIHRyYW5zX2RhdGEg ZWxzZSBbXQorCisgICAgICAgIG9yaWdfcGF0aCA9IHVucXVvdGUob3JpZ19w YXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgZiBpbiBzb3J0 ZWQob3MubGlzdGRpcihvcmlnX3BhdGgpKToKKyAgICAgICAgICAgICAgICBw cm90ZWN0ZWQgPSAwCisgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRo KCcuJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg ICAgICAgICAgdXNlcl9wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguam9p bih1c2VyX2RpciwgZikpCisgICAgICAgICAgICAgICAgc3lzdGVtX3BhdGgg PSBvcy5wYXRoLmpvaW4ob3MucGF0aC5qb2luKG9yaWdfcGF0aCwgZikpCisg ICAgICAgICAgICAgICAgY3JlYXRlZCA9IHRpbWUuY3RpbWUob3MucGF0aC5n ZXRjdGltZShzeXN0ZW1fcGF0aCkpCisgICAgICAgICAgICAgICAgbW9kaWZp ZWQgPSB0aW1lLmN0aW1lKG9zLnBhdGguZ2V0bXRpbWUoc3lzdGVtX3BhdGgp KQorICAgICAgICAgICAgICAgIGZpbGVfZXh0ZW5zaW9uID0gc3RyKHNwbGl0 ZXh0KHN5c3RlbV9wYXRoKSkKKyAgICAgICAgICAgICAgICBpZihub3Qgb3Mu YWNjZXNzKHN5c3RlbV9wYXRoLCBvcy5SX09LKSBvcgorICAgICAgICAgICAg ICAgICAgIG5vdCBvcy5hY2Nlc3Moc3lzdGVtX3BhdGgsIG9zLldfT0spKToK KyAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkID0gMQorICAgICAgICAg ICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzdGVtX3BhdGgpOgorICAgICAg ICAgICAgICAgICAgICBpZiBmaWxlc19vbmx5ID09ICd0cnVlJzoKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg ICAgIGZpbGVfZXh0ZW5zaW9uID0gc3RyKCdkaXInKQorICAgICAgICAgICAg ICAgICAgICB1c2VyX3BhdGggPSAiezB9LyIuZm9ybWF0KHVzZXJfcGF0aCkK KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBp ZiBmaWxlX3R5cGUgaXMgbm90IE5vbmUgYW5kIGZpbGVfdHlwZSAhPSAiKiI6 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb2xkZXJzX29ubHkgb3Ig bGVuKHN1cHBvcnRlZF90eXBlcykgPiAwIGFuZCBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGZpbGVfZXh0ZW5zaW9uIG5vdCBpbiBzdXBwb3J0ZWRf dHlwZXMgb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5 cGUgIT0gZmlsZV9leHRlbnNpb246CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGZpbGVzW3VzZXJf cGF0aF0gPSB7CisgICAgICAgICAgICAgICAgICAiRmlsZW5hbWUiOiBmLAor ICAgICAgICAgICAgICAgICAgIlBhdGgiOiB1c2VyX3BhdGgsCisgICAgICAg ICAgICAgICAgICAiZmlsZV90eXBlIjogZmlsZV9leHRlbnNpb24sCisgICAg ICAgICAgICAgICAgICAiUHJvdGVjdGVkIjogcHJvdGVjdGVkLAorICAgICAg ICAgICAgICAgICAgIlByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICAg ICAgICJEYXRlIENyZWF0ZWQiOiBjcmVhdGVkLAorICAgICAgICAgICAgICAg ICAgICAiRGF0ZSBNb2RpZmllZCI6IG1vZGlmaWVkLAorICAgICAgICAgICAg ICAgICAgICAiZmlsZW10aW1lIjogMTQ1OTE4MjExNiwKKyAgICAgICAgICAg ICAgICAgICAgIkhlaWdodCI6ICcnLAorICAgICAgICAgICAgICAgICAgICAi V2lkdGgiOiAnJywKKyAgICAgICAgICAgICAgICAgICAgIlNpemUiOiBzaXpl b2ZfZm10KGdldFNpemUoc3lzdGVtX3BhdGgpKQorICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZXhjZXB0IEV4Y2Vw dGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgZS5zdHJlcnJvciA9PSAnUGVy bWlzc2lvbiBkZW5pZWQnOgorICAgICAgICAgICAgICAgIGVycl9tc2cgPSAi RXJyb3I6IHswfSIuZm9ybWF0KGUuc3RyZXJyb3IpCisgICAgICAgICAgICBl bHNlOgorICAgICAgICAgICAgICAgIGVycl9tc2cgPSAiRXJyb3I6IHswfSIu Zm9ybWF0KGUuc3RyZXJyb3IpCisgICAgICAgICAgICBmaWxlcyA9IHsKKyAg ICAgICAgICAgICAgJ0NvZGUnOiAwLAorICAgICAgICAgICAgICAnZXJyX21z Zyc6IGVycl9tc2cKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZp bGVzCisKKyAgICBkZWYgdmFsaWRhdGVfcmVxdWVzdChzZWxmLCBjYXBhYmls aXR5KToKKyAgICAgICAgIiIiCisgICAgICAgIEl0IHZhbGlkYXRlcyB0aGUg Y2FwYWJpbGl0eSB3aXRoIHRoZSBjYXBhYmlsaXRpZXMKKyAgICAgICAgc3Rv cmVkIGluIHRoZSBzZXNzaW9uCisgICAgICAgICIiIgorICAgICAgICB0cmFu c19kYXRhID0gRmlsZW1hbmFnZXIuZ2V0X3RyYXNhY3Rpb25fc2VsZWN0aW9u KHNlbGYudHJhbnNfaWQpCisgICAgICAgIHJldHVybiBGYWxzZSBpZiBjYXBh YmlsaXR5IG5vdCBpbiB0cmFuc19kYXRhWydjYXBhYmlsaXRpZXMnXSBlbHNl IFRydWUKKworICAgIGRlZiBnZXRpbmZvKHNlbGYsIHBhdGg9Tm9uZSwgZ2V0 c2l6ZT1UcnVlLCBuYW1lPU5vbmUsIHJlcT1Ob25lKToKKyAgICAgICAgIiIi CisgICAgICAgIFJldHVybnMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIGlu Zm9ybWF0aW9uCisgICAgICAgIGFib3V0IHRoZSBnaXZlbiBmaWxlLgorICAg ICAgICAiIiIKKworICAgICAgICBkaXIgPSBzZWxmLmRpcgorICAgICAgICBv cmlnX3BhdGggPSAiezB9ezF9Ii5mb3JtYXQoZGlyLCBwYXRoKQorICAgICAg ICB1c2VyX2RpciA9IHBhdGgKKyAgICAgICAgdGhlZmlsZSA9IHsKKyAgICAg ICAgICAgICdGaWxlbmFtZSc6IHNwbGl0X3BhdGgob3JpZ19wYXRoKVstMV0s CisgICAgICAgICAgICAnRmlsZSBUeXBlJzogJycsCisgICAgICAgICAgICAn UGF0aCc6IHVzZXJfZGlyLAorICAgICAgICAgICAgJ0Vycm9yJzogJycsCisg ICAgICAgICAgICAnQ29kZSc6IDAsCisgICAgICAgICAgICAnUHJvcGVydGll cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ0RhdGUgQ3JlYXRlZCc6ICcn LAorICAgICAgICAgICAgICAgICAgICAnRGF0ZSBNb2RpZmllZCc6ICcnLAor ICAgICAgICAgICAgICAgICAgICAnV2lkdGgnOiAnJywKKyAgICAgICAgICAg ICAgICAgICAgJ0hlaWdodCc6ICcnLAorICAgICAgICAgICAgICAgICAgICAn U2l6ZSc6ICcnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor CisgICAgICAgIGlmIG5vdCBwYXRoX2V4aXN0cyhvcmlnX3BhdGgpOgorICAg ICAgICAgICAgdGhlZmlsZVsnRXJyb3InXSA9IGdldHRleHQoJ0ZpbGUgZG9l cyBub3QgZXhpc3QuJykKKyAgICAgICAgICAgIHJldHVybiAoZW5jb2RlX2pz b24odGhlZmlsZSksIE5vbmUsICdhcHBsaWNhdGlvbi9qc29uJykKKworICAg ICAgICBpZiBzcGxpdF9wYXRoKHVzZXJfZGlyKVstMV0gPT0gJy8nOgorICAg ICAgICAgICAgdGhlZmlsZVsnRmlsZSBUeXBlJ10gPSAnRGlyZWN0b3J5Jwor ICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGhlZmlsZVsnRmlsZSBUeXBl J10gPSBzcGxpdGV4dCh1c2VyX2RpcikKKworICAgICAgICBjcmVhdGVkID0g dGltZS5jdGltZShvcy5wYXRoLmdldGN0aW1lKG9yaWdfcGF0aCkpCisgICAg ICAgIG1vZGlmaWVkID0gdGltZS5jdGltZShvcy5wYXRoLmdldG10aW1lKG9y aWdfcGF0aCkpCisKKyAgICAgICAgdGhlZmlsZVsnUHJvcGVydGllcyddWydE YXRlIENyZWF0ZWQnXSA9IGNyZWF0ZWQKKyAgICAgICAgdGhlZmlsZVsnUHJv cGVydGllcyddWydEYXRlIE1vZGlmaWVkJ10gPSBtb2RpZmllZAorICAgICAg ICB0aGVmaWxlWydQcm9wZXJ0aWVzJ11bJ1NpemUnXSA9IHNpemVvZl9mbXQo Z2V0U2l6ZShvcmlnX3BhdGgpKQorCisgICAgICAgIHJldHVybiB0aGVmaWxl CisKKyAgICBkZWYgZ2V0Zm9sZGVyKHNlbGYsIHBhdGg9Tm9uZSwgZmlsZV90 eXBlPSIiLCBuYW1lPU5vbmUsIHJlcT1Ob25lKToKKyAgICAgICAgIiIiCisg ICAgICAgIFJldHVybnMgZmlsZXMgYW5kIGZvbGRlcnMgaW4gZ2l2ZSBwYXRo CisgICAgICAgICIiIgorICAgICAgICB0cmFuc19kYXRhID0gRmlsZW1hbmFn ZXIuZ2V0X3RyYXNhY3Rpb25fc2VsZWN0aW9uKHNlbGYudHJhbnNfaWQpCisg ICAgICAgIGRpciA9IHNlbGYuZGlyCisgICAgICAgIGZpbGVsaXN0ID0gc2Vs Zi5saXN0X2ZpbGVzeXN0ZW0oZGlyLCBwYXRoLCB0cmFuc19kYXRhLCBmaWxl X3R5cGUpCisgICAgICAgIHJldHVybiBmaWxlbGlzdAorCisgICAgZGVmIHJl bmFtZShzZWxmLCBvbGQ9Tm9uZSwgbmV3PU5vbmUsIHJlcT1Ob25lKToKKyAg ICAgICAgIiIiCisgICAgICAgIFJlbmFtZSBmaWxlIG9yIGZvbGRlcgorICAg ICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYudmFsaWRhdGVfcmVxdWVz dCgncmVuYW1lJyk6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg ICAgICdFcnJvcic6IGdldHRleHQoJ05vdCBhbGxvd2VkJyksCisgICAgICAg ICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAgICB9CisKKyAgICAgICAgZGly ID0gc2VsZi5kaXIKKyAgICAgICAgIyBjaGVjayBpZiBpdCdzIGRpcgorICAg ICAgICBpZiBvbGRbLTFdID09ICcvJzoKKyAgICAgICAgICAgIG9sZCA9IG9s ZFs6LTFdCisKKyAgICAgICAgIyBleHRyYWN0IGZpbGVuYW1lCisgICAgICAg IG9sZG5hbWUgPSBzcGxpdF9wYXRoKG9sZClbLTFdCisgICAgICAgIHBhdGgg PSBzdHIob2xkKQorICAgICAgICBwYXRoID0gc3BsaXRfcGF0aChwYXRoKVsw XSAgIyBleHRyYWN0IHBhdGgKKworICAgICAgICBpZiBub3QgcGF0aFstMV0g PT0gJy8nOgorICAgICAgICAgICAgcGF0aCArPSAnLycKKworICAgICAgICAj IG5ld25hbWUgPSBlbmNvZGVfdXJscGF0aChuZXcpCisgICAgICAgIG5ld25h bWUgPSBuZXcKKyAgICAgICAgbmV3cGF0aCA9IHBhdGggKyBuZXduYW1lCisK KyAgICAgICAgIyBtYWtlIHN5c3RlbSBvbGQgcGF0aAorICAgICAgICBvbGRw YXRoX3N5cyA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIG9sZCkKKyAgICAgICAg bmV3cGF0aF9zeXMgPSAiezB9ezF9Ii5mb3JtYXQoZGlyLCBuZXdwYXRoKQor CisgICAgICAgIGVycm9yX21zZyA9IGdldHRleHQoJ1JlbmFtZWQgU3VjY2Vz c2Z1bGx5LicpCisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAg ICAgICAgICAgIG9zLnJlbmFtZShvbGRwYXRoX3N5cywgbmV3cGF0aF9zeXMp CisgICAgICAgICAgICBjb2RlID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0 aW9uIGFzIGU6CisgICAgICAgICAgICBlcnJvcl9tc2cgPSAiezB9IC0gezF9 Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgZ2V0dGV4dCgnVGhlcmUgd2Fz IGFuIGVycm9yIHJlbmFtaW5nIHRoZSBmaWxlLicpLAorICAgICAgICAgICAg ICAgIHN0cihlKSkKKworICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg ICAnT2xkIFBhdGgnOiBvbGQsCisgICAgICAgICAgICAnT2xkIE5hbWUnOiBv bGRuYW1lLAorICAgICAgICAgICAgJ05ldyBQYXRoJzogbmV3cGF0aCwKKyAg ICAgICAgICAgICdOZXcgTmFtZSc6IG5ld25hbWUsCisgICAgICAgICAgICAn RXJyb3InOiBlcnJvcl9tc2csCisgICAgICAgICAgICAnQ29kZSc6IGNvZGUK KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRl ZiBkZWxldGUoc2VsZiwgcGF0aD1Ob25lLCByZXE9Tm9uZSk6CisgICAgICAg ICIiIgorICAgICAgICBEZWxldGUgZmlsZSBvciBmb2xkZXIKKyAgICAgICAg IiIiCisgICAgICAgIGlmIG5vdCBzZWxmLnZhbGlkYXRlX3JlcXVlc3QoJ2Rl bGV0ZScpOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAn RXJyb3InOiBnZXR0ZXh0KCdOb3QgYWxsb3dlZCcpLAorICAgICAgICAgICAg ICdDb2RlJzogMQorICAgICAgICAgICAgfQorCisgICAgICAgIGRpciA9IHNl bGYuZGlyCisgICAgICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChk aXIsIHBhdGgpCisKKyAgICAgICAgZXJyX21zZyA9ICcnCisgICAgICAgIGNv ZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG9zLnBhdGgu aXNkaXIob3JpZ19wYXRoKToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihv cmlnX3BhdGgpCisgICAgICAgICAgICAgICAgY29kZSA9IDAKKyAgICAgICAg ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9yaWdfcGF0 aCkKKyAgICAgICAgICAgICAgICBjb2RlID0gMAorICAgICAgICBleGNlcHQg RXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlcnJfbXNnID0gIkVycm9y OiB7MH0iLmZvcm1hdChlLnN0cmVycm9yKQorCisgICAgICAgIHJlc3VsdCA9 IHsKKyAgICAgICAgICAgICdQYXRoJzogcGF0aCwKKyAgICAgICAgICAgICdF cnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29kZSc6IGNvZGUKKyAg ICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBh ZGQoc2VsZiwgcmVxPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmls ZSB1cGxvYWQgZnVuY3Rpb25hbGl0eQorICAgICAgICAiIiIKKyAgICAgICAg aWYgbm90IHNlbGYudmFsaWRhdGVfcmVxdWVzdCgndXBsb2FkJyk6CisgICAg ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICdFcnJvcic6ICdOb3Qg YWxsb3dlZCcsCisgICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAg ICB9CisKKyAgICAgICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAgZXJyX21z ZyA9ICcnCisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAg ICAgICAgIHBhdGggPSByZXEuZm9ybS5nZXQoJ2N1cnJlbnRwYXRoJykKKyAg ICAgICAgICAgIG9yaWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBh dGgpCisgICAgICAgICAgICB0aGVmaWxlID0gcmVxLmZpbGVzWyduZXdmaWxl J10KKyAgICAgICAgICAgIG5ld05hbWUgPSAnezB9ezF9Jy5mb3JtYXQob3Jp Z19wYXRoLCB0aGVmaWxlLmZpbGVuYW1lKQorCisgICAgICAgICAgICB3aXRo IG9wZW4obmV3TmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBm LndyaXRlKHRoZWZpbGUucmVhZCgpKQorICAgICAgICAgICAgY29kZSA9IDAK KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAg ZXJyX21zZyA9ICJFcnJvcjogezB9Ii5mb3JtYXQoZS5zdHJlcnJvcikKKwor ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAnUGF0aCc6IHBhdGgs CisgICAgICAgICAgICAnTmFtZSc6IG5ld05hbWUsCisgICAgICAgICAgICAn RXJyb3InOiBlcnJfbXNnLAorICAgICAgICAgICAgJ0NvZGUnOiBjb2RlCisg ICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYg aXNfZmlsZV9leGlzdChzZWxmLCBwYXRoLCBuYW1lLCByZXE9Tm9uZSk6Cisg ICAgICAgICIiIgorICAgICAgICBDaGVja3Mgd2hldGhlciBnaXZlbiBmaWxl IGV4aXN0cyBvciBub3QKKyAgICAgICAgIiIiCisgICAgICAgIGRpciA9IHNl bGYuZGlyCisgICAgICAgIGVycl9tc2cgPSAnJworICAgICAgICBjb2RlID0g MQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcmlnX3BhdGggPSAiezB9 ezF9Ii5mb3JtYXQoZGlyLCBwYXRoKQorICAgICAgICAgICAgbmV3TmFtZSA9 ICd7MH17MX0nLmZvcm1hdChvcmlnX3BhdGgsIG5hbWUpCisgICAgICAgICAg ICBpZiBvcy5wYXRoLmV4aXN0cyhuZXdOYW1lKToKKyAgICAgICAgICAgICAg ICBjb2RlID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg ICBjb2RlID0gMQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Cisg ICAgICAgICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0 cmVycm9yKQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICdQ YXRoJzogcGF0aCwKKyAgICAgICAgICAgICdOYW1lJzogbmV3TmFtZSwKKyAg ICAgICAgICAgICdFcnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29k ZSc6IGNvZGUKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQK KworICAgIGRlZiBjcmVhdGVfZmlsZShzZWxmLCBwYXRoLCBuYW1lLCByZXE9 Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgbmV3IGZpbGUg ZnVuY3Rpb25hbGl0eQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNl bGYudmFsaWRhdGVfcmVxdWVzdCgnY3JlYXRlJyk6CisgICAgICAgICAgICBy ZXR1cm4geworICAgICAgICAgICAgICdFcnJvcic6ICdOb3QgYWxsb3dlZCcs CisgICAgICAgICAgICAgJ0NvZGUnOiAxCisgICAgICAgICAgICB9CisKKyAg ICAgICAgZGlyID0gc2VsZi5kaXIKKyAgICAgICAgZXJyX21zZyA9ICcnCisg ICAgICAgIGNvZGUgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9y aWdfcGF0aCA9ICJ7MH17MX0iLmZvcm1hdChkaXIsIHBhdGgpCisgICAgICAg ICAgICBuZXdOYW1lID0gJ3swfXsxfScuZm9ybWF0KG9yaWdfcGF0aCwgbmFt ZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdOYW1l KToKKyAgICAgICAgICAgICAgICBvcGVuKG5ld05hbWUsICd3JykKKyAgICAg ICAgICAgICAgICBjb2RlID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICBlcnJfbXNnID0gIkVycm9yOiBGaWxlIGFscmVhZHkgZXhp c3RzIgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAg ICAgICBlcnJfbXNnID0gIkVycm9yOiB7MH0iLmZvcm1hdChlLnN0cmVycm9y KQorCisgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICdQYXRoJzog cGF0aCwKKyAgICAgICAgICAgICdOYW1lJzogbmV3TmFtZSwKKyAgICAgICAg ICAgICdFcnJvcic6IGVycl9tc2csCisgICAgICAgICAgICAnQ29kZSc6IGNv ZGUKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAg IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0TmV3TmFtZShkaXIsIHBhdGgs IG5ld05hbWUsIGNvdW50PTEpOgorICAgICAgICAiIiIKKyAgICAgICAgVXRp bGl0eSB0byBwcm92aWRlIG5ldyBuYW1lIGZvciBmb2xkZXIgaWYgZmlsZQor ICAgICAgICB3aXRoIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cworICAgICAg ICAiIiIKKyAgICAgICAgbGFzdF9jaGFyID0gbmV3TmFtZVstMV0KKyAgICAg ICAgdG5ld1BhdGggPSBkaXIgKyAnLycgKyBwYXRoICsgbmV3TmFtZSArICdf JytzdHIoY291bnQpCisgICAgICAgIGlmIGxhc3RfY2hhciA9PSAncicgYW5k IG5vdCBwYXRoX2V4aXN0cyh0bmV3UGF0aCk6CisgICAgICAgICAgICByZXR1 cm4gdG5ld1BhdGgsIG5ld05hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAg ICAgIGxhc3RfY2hhciA9IGludCh0bmV3UGF0aFstMV0pICsgMQorICAgICAg ICAgICAgbmV3UGF0aCA9IGRpciArICcvJyArIHBhdGggKyBuZXdOYW1lICsg J18nK3N0cihsYXN0X2NoYXIpCisgICAgICAgICAgICBpZiBwYXRoX2V4aXN0 cyhuZXdQYXRoKToKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAg ICAgICAgICAgICAgcmV0dXJuIEZpbGVtYW5hZ2VyLmdldE5ld05hbWUoZGly LCBwYXRoLCBuZXdOYW1lLCBjb3VudCkKKyAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgcmV0dXJuIG5ld1BhdGgsIG5ld05hbWUKKworICAg IGRlZiBhZGRmb2xkZXIoc2VsZiwgcGF0aCwgbmFtZSk6CisgICAgICAgICIi IgorICAgICAgICBGdW5jdGlvbmFsaXR5IHRvIGNyZWF0ZSBuZXcgZm9sZGVy CisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9y ZXF1ZXN0KCdjcmVhdGUnKToKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg ICAgICAgICAgJ0Vycm9yJzogJ05vdCBhbGxvd2VkJywKKyAgICAgICAgICAg ICAnQ29kZSc6IDEKKyAgICAgICAgICAgIH0KKworICAgICAgICBkaXIgPSBz ZWxmLmRpcgorICAgICAgICBuZXdOYW1lID0gbmFtZQorICAgICAgICBuZXdQ YXRoID0gZGlyICsgJy8nICsgcGF0aCArIG5ld05hbWUgKyAnLycKKworICAg ICAgICBlcnJfbXNnID0gJycKKyAgICAgICAgY29kZSA9IDEKKyAgICAgICAg aWYgbm90IHBhdGhfZXhpc3RzKG5ld1BhdGgpOgorICAgICAgICAgICAgdHJ5 OgorICAgICAgICAgICAgICAgIG9zLm1rZGlyKG5ld1BhdGgpCisgICAgICAg ICAgICAgICAgY29kZSA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRp b24gYXMgZToKKyAgICAgICAgICAgICAgICBlcnJfbXNnID0gIkVycm9yOiB7 MH0iLmZvcm1hdChlLnN0cmVycm9yKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgbmV3UGF0aCwgbmV3TmFtZSA9IHNlbGYuZ2V0TmV3TmFtZShkaXIs IHBhdGgsIG5ld05hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg ICAgICAgb3MubWtkaXIobmV3UGF0aCkKKyAgICAgICAgICAgICAgICBjb2Rl ID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAg ICAgICAgICAgICAgIGVycl9tc2cgPSAiRXJyb3I6IHswfSIuZm9ybWF0KGUu c3RyZXJyb3IpCisKKyAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg J1BhcmVudCc6IHBhdGgsCisgICAgICAgICAgICAnTmFtZSc6IG5ld05hbWUs CisgICAgICAgICAgICAnRXJyb3InOiBlcnJfbXNnLAorICAgICAgICAgICAg J0NvZGUnOiBjb2RlCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVz dWx0CisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgcGF0aD1Ob25lLCBuYW1l PU5vbmUsIHJlcT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZ1bmN0 aW9uYWxpdHkgdG8gZG93bmxvYWQgZmlsZQorICAgICAgICAiIiIKKyAgICAg ICAgaWYgbm90IHNlbGYudmFsaWRhdGVfcmVxdWVzdCgnZG93bmxvYWQnKToK KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgJ0Vycm9yJzog J05vdCBhbGxvd2VkJywKKyAgICAgICAgICAgICAnQ29kZSc6IDEKKyAgICAg ICAgICAgIH0KKworICAgICAgICBkaXIgPSBzZWxmLmRpcgorICAgICAgICBv cmlnX3BhdGggPSAiezB9ezF9Ii5mb3JtYXQoZGlyLCBwYXRoKQorICAgICAg ICBuYW1lID0gcGF0aC5zcGxpdCgnLycpWy0xXQorICAgICAgICBjb250ZW50 ID0gb3BlbihvcmlnX3BhdGgsICdyJykKKyAgICAgICAgcmVzcCA9IFJlc3Bv bnNlKGNvbnRlbnQpCisgICAgICAgIHJlc3AuaGVhZGVyc1snQ29udGVudC1E aXNwb3NpdGlvbiddID0gJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPScrbmFtZQor ICAgICAgICByZXR1cm4gcmVzcAorCisKK0BibHVlcHJpbnQucm91dGUoIi9m aWxlbWFuYWdlci88aW50OnRyYW5zX2lkPi8iLCBtZXRob2RzPVsiR0VUIiwg IlBPU1QiXSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIGZpbGVfbWFuYWdlcih0 cmFuc19pZCk6CisgICAgIiIiCisgICAgSXQgaXMgdGhlIGNvbW1vbiBmdW5j dGlvbiBmb3IgZXZlcnkgY2FsbCB3aGljaCBpcyBtYWRlCisgICAgYW5kIHRh a2VzIGZ1bmN0aW9uIG5hbWUgZnJvbSBwb3N0IHJlcXVlc3QgYW5kIGNhbGxz IGl0LgorICAgIEl0IGdldHMgdW5pcXVlIHRyYW5zYWN0aW9uIGlkIGZyb20g cG9zdCByZXF1ZXN0IGFuZAorICAgIHJvdGF0ZSBpdCBpbnRvIEZpbGVtYW5h Z2VyIGNsYXNzLgorICAgICIiIgorICAgIG15RmlsZW1hbmFnZXIgPSBGaWxl bWFuYWdlcih0cmFuc19pZCkKKyAgICBtb2RlID0gJycKKyAgICBrd2FyZ3Mg PSB7fQorICAgIGlmIHJlcS5tZXRob2QgPT0gJ1BPU1QnOgorICAgICAgICBp ZiByZXEuZmlsZXM6CisgICAgICAgICAgICBtb2RlID0gJ2FkZCcKKyAgICAg ICAgICAgIGt3YXJncyA9IHsncmVxJzogcmVxfQorICAgICAgICBlbHNlOgor ICAgICAgICAgICAga3dhcmdzID0ganNvbi5sb2FkcyhyZXEuZGF0YSkKKyAg ICAgICAgICAgIGt3YXJnc1sncmVxJ10gPSByZXEKKyAgICAgICAgICAgIG1v ZGUgPSBrd2FyZ3NbJ21vZGUnXQorICAgICAgICAgICAgZGVsIGt3YXJnc1sn bW9kZSddCisgICAgZWxpZiByZXEubWV0aG9kID09ICdHRVQnOgorICAgICAg ICBrd2FyZ3MgPSB7CisgICAgICAgICAgJ3BhdGgnOiByZXEuYXJnc1sncGF0 aCddLAorICAgICAgICAgICduYW1lJzogcmVxLmFyZ3NbJ25hbWUnXSBpZiAn bmFtZScgaW4gcmVxLmFyZ3MgZWxzZSAnJworICAgICAgICB9CisgICAgICAg IG1vZGUgPSByZXEuYXJnc1snbW9kZSddCisKKyAgICB0cnk6CisgICAgICAg IGZ1bmMgPSBnZXRhdHRyKG15RmlsZW1hbmFnZXIsIG1vZGUpCisgICAgICAg IHJlcyA9IGZ1bmMoKiprd2FyZ3MpCisgICAgICAgIHJldHVybiBtYWtlX2pz b25fcmVzcG9uc2UoZGF0YT17J3Jlc3VsdCc6IHJlcywgJ3N0YXR1cyc6IFRy dWV9KQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldHVybiBn ZXRhdHRyKG15RmlsZW1hbmFnZXIsIG1vZGUpKCoqa3dhcmdzKQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvc3RhdGljL2Nz cy9maWxlX21hbmFnZXIuY3NzIGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21h bmFnZXIvc3RhdGljL2Nzcy9maWxlX21hbmFnZXIuY3NzCm5ldyBmaWxlIG1v ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4ZGJlZjgKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci9zdGF0aWMv Y3NzL2ZpbGVfbWFuYWdlci5jc3MKQEAgLTAsMCArMSw2ODAgQEAKKy8qCisg KiBDU1MgZm9yIFN0b3JhZ2UgTWFuYWdlciBEaWFsb2cKKyAqLworCisuZmls ZV9tYW5hZ2VyICN1cGxvYWRlciB7CisgIHBhZGRpbmc6IDJweCA0cHg7Cisg IGJvcmRlci13aWR0aDogMXB4OworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4 dC1hbGlnbjogcmlnaHQ7CisgIGhlaWdodDogYXV0bzsKKyAgbWluLWhlaWdo dDozMHB4OworICBtYXgtaGVpZ2h0OiA4MHB4OworICBvdmVyZmxvdzogaGlk ZGVuOworICBib3JkZXItYm90dG9tOiAxcHg7CisgIHRvcDogMzVweDsKK30K KworI3VwbG9hZGVyIGgxIHsKKyAgZm9udC1zaXplOiAxNHB4OworICBtYXJn aW46IDA7CisgIG1hcmdpbi1sZWZ0OiA1cHg7CisgIHBhZGRpbmc6IDA7Cisg IGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbGVmdDsKKyAgdGV4dC1hbGln bjogbGVmdDsKKyAgbGluZS1oZWlnaHQ6MS45ZW07CisgIHRleHQtc2hhZG93 OjFweCAxcHggMHB4ICNmZmZmZmY7Cit9CisKKyN1cGxvYWRlciBoMSBiIHsK KyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLnVwbG9hZHJlc3BvbnNl IHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworLmZpbGVpbmZvIHsKKyAgbWlu LXdpZHRoOiAxMDBweDsKKyAgb3ZlcmZsb3c6IGF1dG87CisgIC8qIG5vIG1h cmdpbiBvciBib3JkZXIgYWxsb3dlZCAqLworfQorCisuZmlsZWluZm8gI2Nv bnRlbnRzIGxpLnNlbGVjdGVkLCAuZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5 IHRyLnNlbGVjdGVkIHsKKyAgYmFja2dyb3VuZDogI0Q5RURGNzsKK30KKwor LmZpbGVpbmZvICNjb250ZW50cyBsaSAuZm1fZmlsZV9yZW5hbWUsCisuZmls ZWluZm8gdGFibGUjY29udGVudHMgdHIgdGQ6Zmlyc3QtY2hpbGQgaW5wdXQu Zm1fZmlsZV9yZW5hbWUgeworICBkaXNwbGF5OiBub25lOworICB3aWR0aDog ODBweDsKKyAgbWFyZ2luOiAwIGF1dG87CisgIHRleHQtYWxpZ246IGNlbnRl cjsKKyAgaGVpZ2h0OiAxN3B4OworfQorCisuZmlsZWluZm8gdGFibGUjY29u dGVudHMgdHIgdGQgcCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAg bWFyZ2luLWJvdHRvbTogMDsKK30KKworLmZpbGVpbmZvIHRhYmxlI2NvbnRl bnRzIHRyIHRkIHAgeworCWZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUi LCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworfQorCisuZmlsZWlu Zm8gPiBoMSB7CisgIGZvbnQtc2l6ZTogMTZweDsKKyAgbWFyZ2luOiAxMDBw eCBhdXRvOworfQorCisjdG9vbGJhciB7CisgIGRpc3BsYXk6IGJsb2NrOwor ICBjbGVhcjogbGVmdDsKKyAgbWFyZ2luOiA1MHB4IGF1dG87Cit9CisKKy5m bV9mb2xkZXIgeworICBmb250LXNpemU6IHh4LWxhcmdlICFpbXBvcnRhbnQ7 CisgIGNvbG9yOiByZ2IoMjU1LCAyMDQsIDApOworfQorCisuZm1fZmlsZSB7 CisgIGZvbnQtc2l6ZTogeHgtbGFyZ2UgIWltcG9ydGFudDsKK30KKworLmZp bGVfbWFuYWdlciBidXR0b24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjQzBD MEMwOworfQorCisuZmlsZV9tYW5hZ2VyIGgxIHsKKyAgZm9udC1zaXplOiBt ZWRpdW07Cit9CisKKy8qKiBJbnB1dCBmaWxlIFJlcGxhY2VtZW50ICovCisu ZmlsZS1pbnB1dC1jb250YWluZXIgeworICBtYXJnaW46MDsKKyAgcG9zaXRp b246cmVsYXRpdmU7CisgIHRvcDowcHg7CisgIHdpZHRoOjIxNXB4OworICBo ZWlnaHQ6MzJweDsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLyoqIEZp cmVmb3ggaGFjayAqLworQC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpIHsK KyAgLmZpbGUtaW5wdXQtY29udGFpbmVyICB7CisgICAgdG9wOjExcHg7Cisg ICAgd2lkdGg6MjU1cHg7CisgIH0KK30KKworLyoqIE9wZXJhIGhhY2sgKi8K K3g6LW8tcHJlZm9jdXMsIC5maWxlLWlucHV0LWNvbnRhaW5lciB7dG9wOjE2 cHg7d2lkdGg6MTk4cHg7fQorCisubmV3ZmlsZSB7CisgIHBvc2l0aW9uOiBh YnNvbHV0ZTsKKyAgdG9wOjA7CisgIGxlZnQ6IDNweDsKKyAgcmlnaHQ6MDsK KyAgd2lkdGg6IDE1MnB4OworICBoZWlnaHQ6MjNweDsKKyAgb3BhY2l0eTow OyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOworICBjdXJzb3I6IHBvaW50 ZXI7CisgIGJvcmRlcjoxcHggc29saWQgYmx1ZTsKK30KKworLmFsdC1maWxl aW5wdXQgeworICBkaXNwbGF5OiBpbmxpbmU7CisgIHdyYXA6IG5vLXdyYXA7 Cit9CisKKy5maWxlcGF0aCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNGNEYx RUQ7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkY2RjZGM7CisgIG1hcmdpbjog MDsKKyAgcGFkZGluZzogMC4xZW0gMC4zZW07CisgIGxpbmUtaGVpZ2h0OiAx LjdlbTsKKyAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA2cHg7 CisgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNnB4Owor ICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNnB4OworICAtbW96LWJv cmRlci1yYWRpdXMtYm90dG9tbGVmdDogNnB4OworICBib3JkZXItdG9wLWxl ZnQtcmFkaXVzOiA2cHg7CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6 IDZweDsKK30KKworQC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpIHsKKyAg LmZpbGVwYXRoIHsKKyAgICBwYWRkaW5nOjAuMmVtIDAuM2VtOworICB9Cit9 CitidXR0b24uYnJvd3NlIHsKKyAgbWFyZ2luLWxlZnQ6MDsKKyAgLXdlYmtp dC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwcHg7CisgIC13ZWJraXQtYm9y ZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMHB4OworICAtbW96LWJvcmRlci1y YWRpdXMtdG9wbGVmdDogMHB4OworICAtbW96LWJvcmRlci1yYWRpdXMtYm90 dG9tbGVmdDogMHB4OworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwcHg7 CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBweDsKKyAgbWluLWhl aWdodDogMTZweDsKKyAgbWluLXdpZHRoOiA0MHB4OworfQorYnV0dG9uLmJy b3dzZSBzcGFuIHsKKyAgbWFyZ2luOjA7CisgIHBhZGRpbmc6MDsKKyAgZGlz cGxheTogYmxvY2s7CisgIGNvbG9yOiM2NjY7CisgIHRleHQtc2hhZG93OiBu b25lOworfQorLyoqIElucHV0IGZpbGUgUmVwbGFjZW1lbnQgLSBlbmQgKi8K KworLmZpbGVfbGlzdGluZyAjY29udGVudHMuZ3JpZCB7CisgIHBhZGRpbmc6 IDI1cHg7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5maWxlX2xpc3Rp bmcgI2NvbnRlbnRzLmdyaWQgbGkgeworICBkaXNwbGF5OiBibG9jazsKKyAg ZmxvYXQ6IGxlZnQ7CisgIHdpZHRoOiAxMDBweDsKKyAgbWluLWhlaWdodDog ODBweDsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBvdmVyZmxvdzogaGlk ZGVuOworICBtYXJnaW4tYm90dG9tOiAxMHB4OworICAtd2Via2l0LWJvcmRl ci1yYWRpdXM6IDJweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAycHg7Cisg IGJvcmRlci1yYWRpdXM6IDJweDsKK30KKworZGl2LmNsaXAgeworICB3aWR0 aDogMzBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBtYXJnaW46IDEwcHggYXV0 bzsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLmZpbGVfbGlzdGluZyAj Y29udGVudHMuZ3JpZCBsaSBpbWcgeworfQorCisuZmlsZV9saXN0aW5nICNj b250ZW50cy5ncmlkIHAgeworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4dC1h bGlnbjogY2VudGVyOworICBtYXJnaW4tYm90dG9tOiAxMHB4OworfQorCisu ZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHsKKyAgd2lkdGg6IDEwMCU7 Cit9CisKKy5maWxlX2xpc3RpbmcgI2NvbnRlbnRzLmxpc3QgdGgsCisuZmls ZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRkIHsKKyAgdGV4dC1hbGlnbjog bGVmdDsKKyAgcGFkZGluZzogNnB4OworICB3aGl0ZS1zcGFjZTogbm93cmFw OworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRoZWFkIHsK KyAgYmFja2dyb3VuZDogcmdiKDI0NCwyNDEsMjM3KTsgLyogT2xkIGJyb3dz ZXJzICovCisgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRv cCwgcmdiYSgyNDQsMjQxLDIzNywxKSAwJSwgcmdiYSgyMTQsMjEyLDIwOSwx KSAxMDAlKTsgLyogRkYzLjYrICovCisgIGJhY2tncm91bmQ6IC13ZWJraXQt Z3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9y LXN0b3AoMCUscmdiYSgyNDQsMjQxLDIzNywxKSksIGNvbG9yLXN0b3AoMTAw JSxyZ2JhKDIxNCwyMTIsMjA5LDEpKSk7IC8qIENocm9tZSxTYWZhcmk0KyAq LworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3As IHJnYmEoMjQ0LDI0MSwyMzcsMSkgMCUscmdiYSgyMTQsMjEyLDIwOSwxKSAx MDAlKTsgLyogQ2hyb21lMTArLFNhZmFyaTUuMSsgKi8KKyAgYmFja2dyb3Vu ZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgyNDQsMjQxLDIzNywx KSAwJSxyZ2JhKDIxNCwyMTIsMjA5LDEpIDEwMCUpOyAvKiBPcGVyYSAxMS4x MCsgKi8KKyAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3As IHJnYmEoMjQ0LDI0MSwyMzcsMSkgMCUscmdiYSgyMTQsMjEyLDIwOSwxKSAx MDAlKTsgLyogSUUxMCsgKi8KKyAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRp ZW50KHRvIGJvdHRvbSwgcmdiYSgyNDQsMjQxLDIzNywxKSAwJSxyZ2JhKDIx NCwyMTIsMjA5LDEpIDEwMCUpOyAvKiBXM0MgKi8KKyAgYm9yZGVyLWJvdHRv bTogMXB4IHNvbGlkICNjY2M7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK KyAgd2lkdGg6IDEwMCU7Cit9CisKKy5maWxlX2xpc3RpbmcgI2NvbnRlbnRz Lmxpc3QgdGggeworICBmb250LXdlaWdodDogYm9sZDsKKyAgY3Vyc29yOiBw b2ludGVyOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRo LnRhYmxlc29ydGVyLWhlYWRlckFzYywKKy5maWxlX2xpc3RpbmcgI2NvbnRl bnRzLmxpc3QgdGgudGFibGVzb3J0ZXItaGVhZGVyRGVzYyB7CisgIGJhY2tn cm91bmQ6IHJnYigyMTQsMjEyLDIwOSk7IC8qIE9sZCBicm93c2VycyAqLwor ICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEo MjE0LDIxMiwyMDksMSkgMCUsIHJnYmEoMjQ0LDI0MSwyMzcsMSkgMTAwJSk7 IC8qIEZGMy42KyAqLworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50 KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAl LHJnYmEoMjE0LDIxMiwyMDksMSkpLCBjb2xvci1zdG9wKDEwMCUscmdiYSgy NDQsMjQxLDIzNywxKSkpOyAvKiBDaHJvbWUsU2FmYXJpNCsgKi8KKyAgYmFj a2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDIx NCwyMTIsMjA5LDEpIDAlLHJnYmEoMjQ0LDI0MSwyMzcsMSkgMTAwJSk7IC8q IENocm9tZTEwKyxTYWZhcmk1LjErICovCisgIGJhY2tncm91bmQ6IC1vLWxp bmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMjE0LDIxMiwyMDksMSkgMCUscmdi YSgyNDQsMjQxLDIzNywxKSAxMDAlKTsgLyogT3BlcmEgMTEuMTArICovCisg IGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDIx NCwyMTIsMjA5LDEpIDAlLHJnYmEoMjQ0LDI0MSwyMzcsMSkgMTAwJSk7IC8q IElFMTArICovCisgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBi b3R0b20sIHJnYmEoMjE0LDIxMiwyMDksMSkgMCUscmdiYSgyNDQsMjQxLDIz NywxKSAxMDAlKTsgLyogVzNDICovCit9CisKKy5maWxlX2xpc3RpbmcgI2Nv bnRlbnRzLmxpc3QgdGgudGFibGVzb3J0ZXItaGVhZGVyQXNjIHNwYW4gewor ICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmct cmlnaHQ6IDIwcHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcv YnVsbGV0X2Fycm93X3VwLnBuZyk7CisgIGJhY2tncm91bmQtcmVwZWF0OiBu by1yZXBlYXQ7CisgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IGNlbnRl cjsKK30KKworLmZpbGVfbGlzdGluZyAjY29udGVudHMubGlzdCB0aC50YWJs ZXNvcnRlci1oZWFkZXJEZXNjIHNwYW4geworICBkaXNwbGF5OiBibG9jazsK KyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CisgIGJh Y2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvYnVsbGV0X2Fycm93X2Rvd24u cG5nKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgYmFj a2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgY2VudGVyOworfQorCisuZmlsZV9s aXN0aW5nICNjb250ZW50cy5saXN0IHRkIHsKKyAgYm9yZGVyLWJvdHRvbTog MXB4IGRvdHRlZCAjY2NjOworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50 cy5saXN0IHRkOmZpcnN0LWNoaWxkIHsKKyAgZGlzcGxheTogdGFibGUtY2Vs bDsKKyAgcGFkZGluZy1sZWZ0OiAwOworICB3aWR0aDogMTAwJTsKKyAgcGFk ZGluZy1sZWZ0OiAyMnB4OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVw ZWF0OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAzcHggY2VudGVyOworfQor CisuZmlsZV9saXN0aW5nICNjb250ZW50cy5saXN0IHRkLnRibF9mb2xkZXI6 Zmlyc3QtY2hpbGQ6YmVmb3JlIHsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7Cisg IGNvbG9yOiByZ2IoMjU1LCAyMDQsIDApOworfQorCisuZmlsZV9saXN0aW5n ICNjb250ZW50cy5saXN0IHRkLnRibF9maWxlOmZpcnN0LWNoaWxkOmJlZm9y ZSB7CisgIG1hcmdpbi1yaWdodDogNXB4OworfQorCisuZmlsZV9saXN0aW5n ICNjb250ZW50cy5saXN0IHRib2R5IHRyOmhvdmVyIHsKKyAgYmFja2dyb3Vu ZC1jb2xvcjogI2VlZTsKKyAgY3Vyc29yOiBwb2ludGVyOworfQorCisuZmls ZV9saXN0aW5nICNjb250ZW50cy5ncmlkIGxpOmhvdmVyIHsKKyAgYm9yZGVy OiAxcHggc29saWQgI0U1RTVFNTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0Y3 RjdGNzsKKyAgY3Vyc29yOiBwb2ludGVyOworICBtYXgtaGVpZ2h0OiA3OHB4 OworfQorCisubWV0YSB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyNhY3Rp dml0eSB7CisgIG1hcmdpbjogMTAwcHggYXV0bzsKK30KKy51cGxvYWQgc3Bh bi5sb2FkaW5nIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9hamF4 LWxvYWRlci5naWYpOyBjb2xvcjojNTU1NTU1O2ZvbnQtc2l6ZTowLjllbTsg fQorCitidXR0b24uZ3JpZCBzcGFuLAorYnV0dG9uLmxpc3Qgc3BhbiB7Cisg IHdpZHRoOiAyMHB4OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0 OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOworfQor CitidXR0b24uT04geworICBiYWNrZ3JvdW5kOm5vbmUgcmVwZWF0IHNjcm9s bCAwIDAgI0Y5RjhGNzsKKyAgYm9yZGVyOiAxcHggaW5zZXQgI2NjYzsKK30K KworYnV0dG9uLmxpc3QgeworICBtYXJnaW4tbGVmdDogMDsKK30KKworI3By b2dyZXNzYmFyIHsKKyAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCB1cmwoLi4v aW1nL2FqYXgtbG9hZGVyLmdpZikgbm8tcmVwZWF0IDAgMDsKKyAgZGlzcGxh eTppbmxpbmUtdGFibGU7CisgIHdpZHRoOjMwcHg7CisgIGhlaWdodDozMHB4 OworfQorCisuanFpYm94IHsKKyAgei1pbmRleDogMjAwMCAhaW1wb3J0YW50 OworfQorCisuZmlsZV9saXN0aW5nICNjb250ZW50cyBsaSB7CisgIHBvc2l0 aW9uOiByZWxhdGl2ZTsKK30KKworI2Ryb3B6b25lLWNvbnRhaW5lciBoMiB7 CisgIGZvbnQtc2l6ZTogMjBweDsKKyAgbWFyZ2luLXRvcDogMDsKK30KKwor LnBnYWRtaW4tc3RvcmFnZS1ib2R5IHsKKyAgbWluLXdpZHRoOiA3NTBweCAh aW1wb3J0YW50OworICBtaW4taGVpZ2h0OiAzODBweCAhaW1wb3J0YW50Owor fQorCisucGdhZG1pbi1zdG9yYWdlLWJvZHkgLmFqcy1jb250ZW50IHsKKyAg dG9wOiAwcHggIWltcG9ydGFudDsKKyAgbGVmdDogMCAhaW1wb3J0YW50Owor ICByaWdodDogMCAhaW1wb3J0YW50OworICBoZWlnaHQ6IDEwMCUgIWltcG9y dGFudDsKKyAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKK30KKworLnN0b3Jh Z2VfZGlhbG9nIHsKKyAgaGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsK K30KKworLnN0b3JhZ2VfY29udGVudCB7CisgIGhlaWdodDogMTAwJTsKKyAg d2lkdGg6IDEwMCU7Cit9CisKKy5maWxlX21hbmFnZXIgeworICBib3R0b206 IDA7CisgIGxlZnQ6IDA7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgcmln aHQ6IDA7CisgIHRvcDogMDsKK30KKworLmJ0bi1ncm91cC5maWxlbWFuYWdl ci1idG4tZ3JvdXAgLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3Qt Y2hpbGQpIHsKKwlib3JkZXItbGVmdDogMXB4IHNvbGlkICNBOUE5QTk7Cit9 CisKKy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIC5maWxlbWFuYWdlci1wYXRo LWdyb3VwIHsKKyAgcGFkZGluZzogMDsKKyAgZGlzcGxheTogYmxvY2s7Cisg IGJvcmRlcjogMXB4IHNvbGlkIGRhcmtncmV5OworICBoZWlnaHQ6IDMwcHg7 CisgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgZmxvYXQ6IGxlZnQ7CisgIG1h cmdpbi1yaWdodDogMTBweDsKK30KKworLmZpbGVfbWFuYWdlciAjdXBsb2Fk ZXIgLmJ0bi1ncm91cCAuYnRuW2Rpc2FibGVkXSB7CisgIGNvbG9yOiAjODg4 OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOworfQorCisuZmlsZV9tYW5h Z2VyICN1cGxvYWRlciAuZmlsZW1hbmFnZXItYnRuLWdyb3VwIHsKKyAgYm9y ZGVyOiAxcHggc29saWQgZGFya2dyZXk7CisgIGJvcmRlci1yYWRpdXM6IDVw eDsKKyAgd2lkdGg6IGF1dG87CisgIGZsb2F0OiBsZWZ0OworICBvdmVyZmxv dzogaGlkZGVuOworfQorCisuZmlsZV9tYW5hZ2VyIC5idG4tZ3JvdXAgewor ICBtYXJnaW46IDJweCAzcHg7Cit9CisKKy5maWxlX21hbmFnZXIgLmZpbGVp bmZvIHsKKyAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMDlweCk7CisgIG92ZXJm bG93OiBoaWRkZW47CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgdG9wOiAz NXB4OworICBmb250LXNpemU6IDEycHg7Cit9CisKKy5maWxlX21hbmFnZXIg LmZpbGVpbmZvICNjb250ZW50c3sKKyAgcGFkZGluZzogNXB4OworICB0ZXh0 LWFsaWduOiBsZWZ0OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGhl aWdodDogMTAwJTsKKyAgd2lkdGg6IDEwMCU7CisgIG92ZXJmbG93OiBhdXRv OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGhl YWQgdHJ7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZGlzcGxheTogYmxv Y2s7CisgIHdpZHRoOiAxMDAlOworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxl aW5mbyAjY29udGVudHMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDEpLAorLmZp bGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRlbnRzIHRib2R5IHRyIHRkOm50 aC1jaGlsZCgxKSB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgd2lkdGg6 IDEwMCU7CisgIG1pbi13aWR0aDogMTAwJTsKKyAgbWF4LXdpZHRoOiAxMDAl OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGhl YWQgdHIgdGg6bnRoLWNoaWxkKDIpIHsKKyAgd2lkdGg6IDE1MnB4OworICBt aW4td2lkdGg6IDE1MnB4OworICBtYXgtd2lkdGg6IDE1MnB4OworfQorCisu ZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29udGVudHMgdGJvZHkgdHIgdGQ6 bnRoLWNoaWxkKDIpIHsKKyAgd2lkdGg6IDE1MHB4OworICBtaW4td2lkdGg6 IDE1MHB4OworICBtYXgtd2lkdGg6IDE1MHB4OworfQorCisuZmlsZV9tYW5h Z2VyIC5maWxlaW5mbyAjY29udGVudHMgdGhlYWQgdHIgdGg6bnRoLWNoaWxk KDMpIHsKKyAgd2lkdGg6IDE5N3B4OworICBtaW4td2lkdGg6IDE5N3B4Owor ICBtYXgtd2lkdGg6IDE5N3B4OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxl aW5mbyAjY29udGVudHMgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDMpIHsKKyAg d2lkdGg6IDE4MHB4OworICBtaW4td2lkdGg6IDE4MHB4OworICBtYXgtd2lk dGg6IDE4MHB4OworfQorCisuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbyAjY29u dGVudHMgdGJvZHkgeworICBkaXNwbGF5OiBibG9jazsKKyAgb3ZlcmZsb3c6 IGF1dG87CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IGNhbGMoMTAwJSAt IDMwcHgpOworfQorLmZpbGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRlbnRz IHRib2R5IHRyeworICBkaXNwbGF5OiB0YWJsZTsKKyAgbWF4LXdpZHRoOiAx MDAlOworICB3aWR0aDogMTAwJTsKK30KKworLmZpbGVfbWFuYWdlciAudXBs b2FkX2ZpbGUgeworICBkaXNwbGF5OiBub25lOworICB6LWluZGV4OiAxOwor ICBtYXJnaW4tYm90dG9tOiBhdXRvOworICB0b3A6IDA7CisgIG1hcmdpbi10 b3A6IDA7CisgIGhlaWdodDogY2FsYygxMDAlIC0gNXB4KTsKKyAgd2lkdGg6 IDEwMCU7CisgIGJvcmRlcjogbm9uZTsKKyAgcG9zaXRpb246IGFic29sdXRl OworICBib3R0b206IDA7CisgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwor ICBwYWRkaW5nOiAwcHg7CisgIHBhZGRpbmctdG9wOiAyMnB4OworICBwYWRk aW5nLWxlZnQ6IDEwcHg7Cit9CisKKy5maWxlX21hbmFnZXIgLnVwbG9hZF9m aWxlICNkcm9wem9uZS1jb250YWluZXIgeworICBoZWlnaHQ6IDEwMCU7Cit9 CisKKy5maWxlX21hbmFnZXIgLnVwbG9hZF9maWxlICNtdWx0aXBsZS11cGxv YWRzIHsKKyAgYmFja2dyb3VuZDogYmxhY2s7CisgIGNvbG9yOiB3aGl0ZTsK KyAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7CisgIGhlaWdodDogY2FsYygx MDAlIC0gMjBweCk7CisgIG92ZXJmbG93OiBhdXRvOworICB3aWR0aDogMTAw JTsKK30KKworLmZpbGVpbmZvIC5wcm9tcHQtaW5mbyB7CisgIHRleHQtYWxp Z246IGNlbnRlcjsKKyAgY29sb3I6ICNmZmY7Cit9CisKKy5maWxlX21hbmFn ZXIgI3VwbG9hZGVyIC5idG4tZ3JvdXAgLnNob3dfc2VsZWN0ZWRfZmlsZSB7 CisgIGZsb2F0OiBsZWZ0OworICB0ZXh0LWFsaWduOiBsZWZ0OworICB2ZXJ0 aWNhbC1hbGlnbjogbWlkZGxlOworICBwYWRkaW5nOiA0cHggMCAwIDVweDsK KyAgaGVpZ2h0OiAxMDAlOworfQorCisuZmlsZWluZm8gLmZpbGVfbGlzdGlu ZyB7CisgIGRpc3BsYXk6IGJsb2NrOworICBoZWlnaHQ6IGNhbGMoMTAwJSAt IDM1cHgpOworICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICBib3JkZXIt Ym90dG9tOiBub25lOworICBmb250LXNpemU6IDEycHg7Cit9CisKKy5maWxl aW5mbyAuYWxsb3dlZF9maWxlX3R5cGVzIHsKKyAgZGlzcGxheTogYmxvY2s7 CisgIGhlaWdodDogMjVweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBy aWdodDogMDsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CisgIHBh ZGRpbmctdG9wOiA0cHg7CisgIGJvdHRvbTogNHB4OworICB3aWR0aDogMTAw JTsKKyAgYmFja2dyb3VuZDogI2ZmZjsKK30KKworLmFsbG93ZWRfZmlsZV90 eXBlcyAuY3JlYXRlX2lucHV0IHsKKyAgcG9zaXRpb246IGFic29sdXRlOwor ICBsZWZ0OiA1cHg7Cit9CisKKy5hbGxvd2VkX2ZpbGVfdHlwZXMgLmNyZWF0 ZV9pbnB1dCBzcGFuIHsKKyAgcGFkZGluZy1yaWdodDogNXB4OworfQorCisu YWxsb3dlZF9maWxlX3R5cGVzIC5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0i dGV4dCJdIHsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisuYWxsb3dl ZF9maWxlX3R5cGVzIC5jaGFuZ2VfZmlsZV90eXBlcyB7CisgIHBvc2l0aW9u OiBhYnNvbHV0ZTsKKyAgdG9wOiA0cHg7CisgIHJpZ2h0OiAwOworfQorCisu YWxsb3dlZF9maWxlX3R5cGVzIC5jaGFuZ2VfZmlsZV90eXBlcyBzZWxlY3Qg eworICB3aWR0aDogNzVweDsKKyAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgIGZs b2F0OiByaWdodDsKKyAgaGVpZ2h0OiAyMnB4OworfQorCisuYWxsb3dlZF9m aWxlX3R5cGVzIC5jaGFuZ2VfZmlsZV90eXBlcyBsYWJlbCB7CisgIGZsb2F0 OiByaWdodDsKKyAgcGFkZGluZy10b3A6IDNweDsKK30KKworLnVwbG9hZF9m aWxlIC5maWxlX3VwbG9hZF9tYWluIHsKKyAgcG9zaXRpb246IHJlbGF0aXZl OworICBoZWlnaHQ6IDEyN3B4OzsKKyAgd2lkdGg6IDEyMHB4OworICBkaXNw bGF5OiBpbmxpbmUtYmxvY2s7CisgIG1hcmdpbjogMCAxNXB4IDE1cHggMCAh aW1wb3J0YW50OworICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgcG9z aXRpb246IHJlbGF0aXZlOworICBib3JkZXItcmFkaXVzOiA1cHg7CisgIGJh Y2tncm91bmQ6ICNmZmY7CisgIG1hcmdpbjogMnB4OworICBvcGFjaXR5OiAx OworfQorCisudXBsb2FkX2ZpbGUgLmZpbGVfdXBsb2FkX21haW4gLnNob3df ZXJyb3IgeworICBwYWRkaW5nOiAxMHB4IDAgMCAxMHB4OworICBjb2xvcjog IzAwMDsKK30KKworLnVwbG9hZF9maWxlIC5maWxlX3VwbG9hZF9tYWluIC5z aG93X2Vycm9yIHAuc2l6ZSB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30K KworLnVwbG9hZF9maWxlIC5maWxlX3VwbG9hZF9tYWluIC5zaG93X2Vycm9y IHAubmFtZSB7CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgb3ZlcmZsb3c6IGhp ZGRlbjsKKyAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CisgIHRleHQtYWxp Z246IGNlbnRlcjsKK30KKworLmZpbGVfdXBsb2FkX21haW4gLmR6LXByZXZp ZXcgeworICBtYXJnaW46IDA7Cit9CisKKy5maWxlX3VwbG9hZF9tYWluIC5k ei1wcm9ncmVzcyB7CisgIHRvcDogODNweCAhaW1wb3J0YW50OworICBib3Jk ZXI6IDFweCBzb2xpZCAjOGE2ZDNiOworICBib3JkZXItcmFkaXVzOiAwICFp bXBvcnRhbnQ7Cit9CisKKy5maWxlX3VwbG9hZF9tYWluIC5kei1wcm9ncmVz cyAuZHotdXBsb2FkIHsKKyAgYmFja2dyb3VuZDogI2Q5ZWRmNyAhaW1wb3J0 YW50OworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5maWxlX3VwbG9h ZF9tYWluIC5kei1wcm9ncmVzcyAuZHotdXBsb2FkLnN1Y2Nlc3MgeworICBi YWNrZ3JvdW5kOiBncmVlbiAhaW1wb3J0YW50OworfQorCithLmR6LXJlbW92 ZSB7CisgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKK30KKworLnVwbG9h ZF9maWxlIC5maWxlX3VwbG9hZF9tYWluIGEuZHpfZmlsZV9yZW1vdmUgewor ICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgcmlnaHQ6IDA7 CisgIGNvbG9yOiAjRkYwMDAwOworICBjdXJzb3I6IHBvaW50ZXI7CisgIGJv cmRlci1yYWRpdXM6IDVweDsKKyAgZm9udC1zaXplOiBsYXJnZTsKK30KKwor LnVwbG9hZF9maWxlIC5maWxlX3VwbG9hZF9tYWluIGEuZHpfZmlsZV9yZW1v dmU6aG92ZXIgeworICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKK30KKwor LmZpbGVpbmZvIC5kZWxldGVfaXRlbSwgLmZpbGVpbmZvIC5yZXBsYWNlX2Zp bGUgeworICBkaXNwbGF5OiBub25lOworICBwYWRkaW5nOiA3cHggNXB4Owor ICBvcGFjaXR5OiAwLjg7CisgIGNvbG9yOiAjZmZmOworICBib3JkZXI6IDFw eCBzb2xpZCBkYXJrZ3JleTsKKyAgYmFja2dyb3VuZDogIzAwMDsKKyAgYm94 LXNoYWRvdzogMXB4IDBweCAzcHggMXB4IHJlZDsKK30KKworLmZpbGVpbmZv IC5kZWxldGVfaXRlbSBzcGFuLnB1bGwtcmlnaHQgLmJ0biwKKy5maWxlaW5m byAucmVwbGFjZV9maWxlIHNwYW4ucHVsbC1yaWdodCAuYnRuIHsKKyAgcGFk ZGluZzogMHB4IDVweDsKKyAgY29sb3I6ICMwMDA7CisgIGJhY2tncm91bmQ6 ICNmZmY7CisgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLmZpbGVpbmZvIC5k ZWxldGVfaXRlbSBzcGFuLAorLmZpbGVpbmZvIC5yZXBsYWNlX2ZpbGUgc3Bh biB7CisgIG1hcmdpbi1yaWdodDogMTBweDsKK30KKworLnVwbG9hZF9maWxl IC5kel9jcm9zc19idG4geworICBjb2xvcjogI2ZmZjsKKyAgZm9udC1zaXpl OiB4LWxhcmdlOworICByaWdodDogLTRweDsKKyAgcG9zaXRpb246IGFic29s dXRlOworICB0b3A6IC0xcHg7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50 OworICBib3JkZXI6IG5vbmU7Cit9CisKKy5maWxlX21hbmFnZXIgLmZpbGVp bmZvICNjb250ZW50cyAuZm1fbG9ja19pY29uIHsKKyAgY29sb3I6IHJlZDsK KyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDZweDsKKyAgcmlnaHQ6 IDA7CisgIGxlZnQ6IDE5cHg7CisgIGZvbnQtc2l6ZTogMTZweDsKK30KKwor LmZpbGVfbWFuYWdlciAuZmlsZWluZm8gI2NvbnRlbnRzIC5mYS1sb2NrLnRi bF9sb2NrX2ljb24geworICBjb2xvcjogcmVkOworICBwb3NpdGlvbjogYWJz b2x1dGU7CisgIGxlZnQ6IDI5cHg7CisgIHRvcDogNXB4OworICBmb250LXNp emU6IDEwcHg7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2Zp bGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2luZGV4Lmh0bWwg Yi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmls ZV9tYW5hZ2VyL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMC4uNWRhOGE1ZAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9w Z2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFn ZXIvaW5kZXguaHRtbApAQCAtMCwwICsxLDUyIEBACivvu788aHRtbD4KKzxo ZWFkPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7 eyB1cmxfZm9yKCdzdGF0aWMnLCBmaWxlbmFtZT0nanMvanF1ZXJ5LmRyb3B6 b25lL2Ryb3B6b25lLmpzJykgfX0iPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7eyB1cmxfZm9yKCdmaWxlX21h bmFnZXIuaW5kZXgnKSB9fXV0aWxpdHkuanMiPjwvc2NyaXB0PgorPC9oZWFk PgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJmaWxlX21hbmFnZXIiPgorICA8Zm9y bSBpZD0idXBsb2FkZXIiIG1ldGhvZD0icG9zdCIgY2xhc3M9J2NvbC14cy0x Mic+CisgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIGZpbGVtYW5hZ2VyLXBh dGgtZ3JvdXAgY29sLXNtLTcgY29sLXhzLTEyIiByb2xlPSJncm91cCI+Cisg ICAgICA8YnV0dG9uIG5hbWU9ImhvbWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9 IkhvbWUiIHRpdGxlPSJIb21lIiBjbGFzcz0iZmEgZmEtaG9tZSBidG4gaG9t ZSI+PHNwYW4+PC9zcGFuPjwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBuYW1l PSJsZXZlbC11cCIgdHlwZT0iYnV0dG9uIiB0aXRsZT0iQmFjayIgdmFsdWU9 IkxldmVsVXAiIGNsYXNzPSJidG4gZmEgZmEtbGV2ZWwtdXAgbGV2ZWwtdXAi IGRpc2FibGVkPjxzcGFuPjwvc3Bhbj48L2J1dHRvbj4KKyAgICAgIDxoMSB0 aXRsZT0nJz48L2gxPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImJ0 bi1ncm91cCBmaWxlbWFuYWdlci1idG4tZ3JvdXAiIHJvbGU9Imdyb3VwIj4K KyAgICAgIDxkaXYgY2xhc3M9InVwbG9hZHJlc3BvbnNlIj48L2Rpdj4KKyAg ICAgIDxpbnB1dCBjbGFzcz0ibW9kZSIgbmFtZT0ibW9kZSIgdHlwZT0iaGlk ZGVuIiB2YWx1ZT0iYWRkIiAvPgorICAgICAgPGlucHV0IGNsYXNzPSJjdXJy ZW50cGF0aCIgbmFtZT0iY3VycmVudHBhdGgiIHR5cGU9ImhpZGRlbiIgLz4K KyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iUmVmcmVzaCIg Y2xhc3M9ImJ0biBmYSBmYS1yZWZyZXNoIHJlZnJlc2giPjwvYnV0dG9uPgor ICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSJVcGxvYWQgRmls ZSIgdmFsdWU9IlVwbG9hZCIgY2xhc3M9ImJ0biBmYSBmYS11cGxvYWQgdXBs b2FkIj48c3Bhbj48L3NwYW4+PC9idXR0b24+CisgICAgICA8YnV0dG9uIHR5 cGU9ImJ1dHRvbiIgdGl0bGU9IkRvd25sb2FkIEZpbGUiIGNsYXNzPSJidG4g ZmEgZmEtZG93bmxvYWQgZG93bmxvYWQiIGRpc2FibGVkPjxzcGFuPjwvc3Bh bj48L2J1dHRvbj4KKyAgICAgIDxidXR0b24gbmFtZT0iZGVsZXRlIiB0eXBl PSJidXR0b24iIHRpdGxlPSJEZWxldGUgRmlsZS9Gb2xkZXIiIGNsYXNzPSJi dG4gZmEgZmEtdHJhc2ggZGVsZXRlIiBkaXNhYmxlZD48c3Bhbj48L3NwYW4+ PC9idXR0b24+CisgICAgICA8YnV0dG9uIG5hbWU9InJlbmFtZSIgdHlwZT0i YnV0dG9uIiB0aXRsZT0iUmVuYW1lIEZpbGUvRm9sZGVyIiBjbGFzcz0iYnRu IGZhIGZhLXBlbmNpbC1zcXVhcmUtbyByZW5hbWUiPjxzcGFuPjwvc3Bhbj48 L2J1dHRvbj4KKyAgICAgIDxidXR0b24gbmFtZT0ibmV3Zm9sZGVyIiB0eXBl PSJidXR0b24iIHRpdGxlPSJDcmVhdGUgbmV3IGZvbGRlciIgdmFsdWU9Ik5l dyBGb2xkZXIiIGNsYXNzPSJidG4gZmEgZmEtZm9sZGVyLW9wZW4gY3JlYXRl Ij48c3Bhbj48L3NwYW4+PC9idXR0b24+CisgICAgICA8YnV0dG9uIGNsYXNz PSJPTiBmYSBmYS10aCBidG4gZ3JpZCIgdHlwZT0iYnV0dG9uIiB0aXRsZT0i VmlldyBhcyBncmlkIj48c3Bhbj48L3NwYW4+PC9idXR0b24+CisgICAgICA8 YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBmYSBmYS1saXN0IGxp c3QiIHRpdGxlPSJWaWV3IGFzIFRhYmxlIj48c3Bhbj48L3NwYW4+PC9idXR0 b24+CisgICAgPC9kaXY+CisgIDwvZm9ybT4KKyAgPGRpdiBjbGFzcz0iZmls ZWluZm8iPgorICAgIDxkaXYgY2xhc3M9J2RlbGV0ZV9pdGVtJz4KKyAgICAg IDxzcGFuPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBp dGVtID88L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0 Ij4KKyAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J2J0 biBidG5feWVzJz5ZRVM8L2J1dHRvbj4KKyAgICAgICAgICA8YnV0dG9uIHR5 cGU9J2J1dHRvbicgY2xhc3M9J2J0biBidG5fbm8nPk5PPC9idXR0b24+Cisg ICAgICAgIDwvc3Bhbj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSdy ZXBsYWNlX2ZpbGUnPgorICAgICAgPHNwYW4+QXJlIHlvdSBzdXJlIHlvdSB3 YW50IHRvIHJlcGxhY2UgdGhpcyBmaWxlID88L3NwYW4+CisgICAgICAgIDxz cGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICA8YnV0dG9uIHR5 cGU9J2J1dHRvbicgY2xhc3M9J2J0biBidG5feWVzJz5ZRVM8L2J1dHRvbj4K KyAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J2J0biBi dG5fbm8nPk5PPC9idXR0b24+CisgICAgICAgIDwvc3Bhbj4KKyAgICA8L2Rp dj4KKyAgICA8ZGl2IGNsYXNzPSJmaWxlX2xpc3RpbmciPgorICAgIDwvZGl2 PgorICAgIDxkaXYgY2xhc3M9InVwbG9hZF9maWxlIGRyb3B6b25lIj4KKyAg ICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJhbGxvd2VkX2ZpbGVfdHlwZXMi PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgorPC9ib2R5PgorPC9o dG1sPgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFn ZXIvdGVtcGxhdGVzL2ZpbGVfbWFuYWdlci9qcy9maWxlX21hbmFnZXIuanMg Yi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmls ZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlci5qcwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi45NGFiNTJiCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vbWlzYy9maWxlX21hbmFnZXIvdGVtcGxhdGVzL2Zp bGVfbWFuYWdlci9qcy9maWxlX21hbmFnZXIuanMKQEAgLTAsMCArMSw1MDMg QEAKK2RlZmluZShbCisgICAgICAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAn dW5kZXJzY29yZS5zdHJpbmcnLCAnYWxlcnRpZnknLAorICAgICAgJ3BnYWRt aW4uYnJvd3NlcicsICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICdwZ2FkbWlu LmJyb3dzZXIubm9kZSddLAorCisgIC8vIFRoaXMgZGVmaW5lcyBGaWxlIE1h bmFnZXIgZGlhbG9nCisgIGZ1bmN0aW9uKCQsIF8sIFMsIGFsZXJ0aWZ5LCBw Z0Jyb3dzZXIsIEJhY2tib25lLCBCYWNrZ3JpZCwgcGdOb2RlKSB7CisgICAg cGdBZG1pbiA9IHBnQWRtaW4gfHwgd2luZG93LnBnQWRtaW4gfHwge307CisK KyAgICAvKgorICAgICAqIEhtbS4uLiB0aGlzIG1vZHVsZSBpcyBhbHJlYWR5 IGJlZW4gaW5pdGlhbGl6ZWQsIHdlIGNhbiByZWZlciB0byB0aGUgb2xkCisg ICAgICogb2JqZWN0IGZyb20gaGVyZS4KKyAgICAgKi8KKyAgICBpZiAocGdB ZG1pbi5GaWxlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIHBnQWRtaW4uRmls ZU1hbmFnZXI7CisKKyAgICBwZ0FkbWluLkZpbGVNYW5hZ2VyID0geworICAg ICAgaW5pdDogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLmluaXRp YWxpemVkKQorICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLmlu aXRpYWxpemVkID0gdHJ1ZTsKKworICAgICAgICB2YXIgbW9kdWxlX3VybCA9 ICJ7eyB1cmxfZm9yKCdmaWxlX21hbmFnZXIuaW5kZXgnKSB9fSIsCisgICAg ICAgICAgICBmaWxlQ29ubmVjdG9yID0gbW9kdWxlX3VybCArICJmaWxlbWFu YWdlci8iOworCisgICAgICAgICAgLy8gc2VuZCBhIHJlcXVlc3QgdG8gZ2V0 IHRyYW5zYWN0aW9uIGlkCisgICAgICAgICAgdmFyIGdldFRyYW5zSWQgPSBm dW5jdGlvbihjb25maWdzKSB7CisgICAgICAgICAgICByZXR1cm4gJC5hamF4 KHsKKyAgICAgICAgICAgICAgZGF0YTogY29uZmlncywKKyAgICAgICAgICAg ICAgdHlwZTogIlBPU1QiLAorICAgICAgICAgICAgICBhc3luYzogZmFsc2Us CisgICAgICAgICAgICAgIHVybDogbW9kdWxlX3VybCArICJnZXRfdHJhbnNf aWQiLAorICAgICAgICAgICAgICBkYXRhVHlwZTogImpzb24iLAorICAgICAg ICAgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb247IGNoYXJz ZXQ9dXRmLTgiLAorICAgICAgICAgICAgfSk7CisgICAgICAgICAgfTsKKwor ICAgICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlbW92ZSB0cmFucyBpZCBmcm9t IHNlc3Npb24KKyAgICAgICAgICB2YXIgcmVtb3ZlVHJhbnNJZCA9IGZ1bmN0 aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuICQuYWpheCh7CisgICAgICAg ICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICAgICAgICBhc3luYzogZmFs c2UsCisgICAgICAgICAgICAgIHVybDogbW9kdWxlX3VybCArICJkZWxfdHJh bnNfaWQvIiArIHRyYW5zX2lkLAorICAgICAgICAgICAgICBkYXRhVHlwZTog Impzb24iLAorICAgICAgICAgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0 aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLAorICAgICAgICAgICAgfSk7Cisg ICAgICAgICAgfTsKKyAgICAgICAgLy8gRGVjbGFyZSB0aGUgU3RvcmFnZSBk aWFsb2cKKyAgICAgICAgYWxlcnRpZnkuZGlhbG9nKCdzdG9yYWdlTWFuYWdl ckRsZycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBjb250cm9scyA9 IFtdLCAvLyBLZWVwIHRyYWNraW5nIG9mIGFsbCB0aGUgYmFja2Zvcm0gY29u dHJvbHMKKyAgICAgICAgICAgICAgLy8gRGlhbG9nIGNvbnRhaW50ZXIKKyAg ICAgICAgICAgICAgJGNvbnRhaW5lciA9ICQoIjxkaXYgY2xhc3M9J3N0b3Jh Z2VfZGlhbG9nJz48L2Rpdj4iKTsKKworICAgICAgICAgIC8qCisgICAgICAg ICAgICogRnVuY3Rpb246IHJlbmRlclN0b3JhZ2VQYW5lbAorICAgICAgICAg ICAqCisgICAgICAgICAgICogUmVuZGVycyB0aGUgRmlsZU1hbmFnZXIgaW4g dGhlIGNvbnRlbnQgZGl2IGJhc2VkIG9uIHRoZSBnaXZlbgorICAgICAgICAg ICAqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgKi8K KyAgICAgICAgICB2YXIgcmVuZGVyU3RvcmFnZVBhbmVsID0gZnVuY3Rpb24o cGFyYW1zKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2xl YXIgdGhlIGV4aXN0aW5nIGh0bWwgaW4gdGhlIHN0b3JhZ2UgY29udGVudAor ICAgICAgICAgICAgICovCisgICAgICAgICAgICB2YXIgY29udGVudCA9ICRj b250YWluZXIuZmluZCgnLnN0b3JhZ2VfY29udGVudCcpOworICAgICAgICAg ICAgY29udGVudC5lbXB0eSgpOworCisgICAgICAgICAgICAkLmdldCgie3sg dXJsX2ZvcignZmlsZV9tYW5hZ2VyLmluZGV4JykgfX0iLCBmdW5jdGlvbihk YXRhKSB7CisgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kKGRhdGEpOwor ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRyYW5zSWQgPSBnZXRU cmFuc0lkKHBhcmFtcyk7CisgICAgICAgICAgICBpZiAodHJhbnNJZC5yZWFk eVN0YXRlID09IDQpCisgICAgICAgICAgICAgIHRfcmVzID0gSlNPTi5wYXJz ZSh0cmFuc0lkLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICB0cmFuc19p ZCA9IHRfcmVzLmRhdGEuZmlsZVRyYW5zSWQ7CisKKyAgICAgICAgICB9Owor CisgICAgICAgICAgLy8gRGlhbG9nIHByb3BlcnR5CisgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgIG1haW46IGZ1bmN0aW9uKHBhcmFtcykgewor ICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCBwYXJhbXNbJ3RpdGxl J10pOworICAgICAgICAgICAgICB2YXIgdHJhbnNfaWQ7CisgICAgICAgICAg ICAgIHRoaXMudGl0bGUgPSBwYXJhbXMudGl0bGU7CisKKyAgICAgICAgICAg ICAgcGFyYW1zID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTsKKyAgICAgICAg ICAgICAgJGNvbnRhaW5lci5maW5kKCcuc3RvcmFnZV9jb250ZW50JykucmVt b3ZlKCk7CisgICAgICAgICAgICAgICRjb250YWluZXIuYXBwZW5kKCI8ZGl2 IGNsYXNzPSdzdG9yYWdlX2NvbnRlbnQnPjwvZGl2PiIpOworICAgICAgICAg ICAgICByZW5kZXJTdG9yYWdlUGFuZWwocGFyYW1zKTsKKyAgICAgICAgICAg ICAgdGhpcy5zaG93KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg c2V0dXA6ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHJldHVybiB7Cisg ICAgICAgICAgICAgICAgYnV0dG9uczpbCisgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ7eyBfKCdTZWxlY3QnKSB9 fSIsIGtleTogMTMsIGNsYXNzTmFtZTogImJ0biBidG4tcHJpbWFyeSBmYSBm YS1maWxlIGZpbGVfbWFuYWdlcl9vayBwZy1hbGVydGlmeS1idXR0b24gZGlz YWJsZWQiCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0OiAie3sgXygnQ2FuY2Vs JykgfX0iLCBjbGFzc05hbWU6ICJidG4gYnRuLWRhbmdlciBmYSBmYS10aW1l cyBwZy1hbGVydGlmeS1idXR0b24iCisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBmb2N1czogeyBl bGVtZW50OiAwIH0sCisgICAgICAgICAgICAgICAgb3B0aW9uczogeworICAg ICAgICAgICAgICAgICAgY2xvc2FibGVCeURpbW1lcjogZmFsc2UsCisKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH07CisgICAgICAgICAg ICB9LAorICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGNsb3NlRXZl bnQpIHsKKyAgICAgICAgICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0dG9uLmtl eSA9PSAxMykgeworICAgICAgICAgICAgICAgIC8vY2xvc2VFdmVudC5jYW5j ZWwgPSB0cnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlm IChjbG9zZUV2ZW50LmJ1dHRvbi50ZXh0ID09ICJ7eyBfKCdTZWxlY3QnKSB9 fSIpIHsKKyAgICAgICAgICAgICAgICBpZigkKCcuZmlsZWluZm8nKS5kYXRh KCd2aWV3JykgPT0gJ2dyaWQnKXsKKyAgICAgICAgICAgICAgICAgIHNlbF9m aWxlID0gJCgnLmZpbGVpbmZvJykuZmluZCgnI2NvbnRlbnRzIGxpLnNlbGVj dGVkIHAgc3BhbicpLmF0dHIoJ3RpdGxlJyk7CisgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHNlbF9maWxlID0gJCgnLmZp bGVpbmZvIHRib2R5IHRyLnNlbGVjdGVkIHRkIHAgc3BhbicpLmF0dHIoJ3Rp dGxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZh ciBuZXdGaWxlID0gJCgnLmN1cnJlbnRwYXRoJykudmFsKCkgKyBzZWxfZmls ZTsKKyAgICAgICAgICAgICAgICBwZ0FkbWluLkJyb3dzZXIuRXZlbnRzLnRy aWdnZXIoJ3BnYWRtaW4tc3RvcmFnZTpmaW5pc2hfYnRuOnN0b3JhZ2VfZGlh bG9nJywgbmV3RmlsZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgcmVtb3ZlVHJhbnNJZCh0cmFuc19pZCk7CisgICAgICAgICAgICB9LAor ICAgICAgICAgICAgYnVpbGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg ICB0aGlzLmVsZW1lbnRzLmNvbnRlbnQuYXBwZW5kQ2hpbGQoJGNvbnRhaW5l ci5nZXQoMCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGhvb2tz OiB7CisgICAgICAgICAgICAgIG9uc2hvdzogZnVuY3Rpb24oKSB7CisgICAg ICAgICAgICAgICAgJCh0aGlzLmVsZW1lbnRzLmJvZHkpLmFkZENsYXNzKCdw Z2FkbWluLXN0b3JhZ2UtYm9keScpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisKKyAgICAg ICAgLy8gRGVjbGFyZSB0aGUgU2VsZWN0aW9uIGRpYWxvZworICAgICAgICBh bGVydGlmeS5kaWFsb2coJ2ZpbGVTZWxlY3Rpb25EbGcnLCBmdW5jdGlvbigp IHsKKyAgICAgICAgICB2YXIgY29udHJvbHMgPSBbXSwgLy8gS2VlcCB0cmFj a2luZyBvZiBhbGwgdGhlIGJhY2tmb3JtIGNvbnRyb2xzCisgICAgICAgICAg ICAgIC8vIERpYWxvZyBjb250YWludGVyCisgICAgICAgICAgICAgICRjb250 YWluZXIgPSAkKCI8ZGl2IGNsYXNzPSdzdG9yYWdlX2RpYWxvZyBmaWxlX3Nl bGVjdGlvbl9kbGcnPjwvZGl2PiIpOworCisgICAgICAgICAgLy8gc2VuZCBh IHJlcXVlc3QgdG8gZ2V0IHRyYW5zYWN0aW9uIGlkCisgICAgICAgICAgLyoK KyAgICAgICAgICAgKiBGdW5jdGlvbjogcmVuZGVyU3RvcmFnZVBhbmVsCisg ICAgICAgICAgICoKKyAgICAgICAgICAgKiBSZW5kZXJzIHRoZSBGaWxlTWFu YWdlciBpbiB0aGUgY29udGVudCBkaXYgYmFzZWQgb24gdGhlIGdpdmVuCisg ICAgICAgICAgICogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAg ICAgICAqLworICAgICAgICAgIHZhciByZW5kZXJTdG9yYWdlUGFuZWwgPSBm dW5jdGlvbihjb25maWdzKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg ICAgICogQ2xlYXIgdGhlIGV4aXN0aW5nIGh0bWwgaW4gdGhlIHN0b3JhZ2Ug Y29udGVudAorICAgICAgICAgICAgICovCisgICAgICAgICAgICB2YXIgY29u dGVudCA9ICRjb250YWluZXIuZmluZCgnLnN0b3JhZ2VfY29udGVudCcpOwor ICAgICAgICAgICAgY29udGVudC5lbXB0eSgpOworCisgICAgICAgICAgICAk LmdldCgie3sgdXJsX2ZvcignZmlsZV9tYW5hZ2VyLmluZGV4JykgfX0iLCBm dW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5k KGRhdGEpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRyYW5z SWQgPSBnZXRUcmFuc0lkKGNvbmZpZ3MpOworICAgICAgICAgICAgaWYgKHRy YW5zSWQucmVhZHlTdGF0ZSA9PSA0KQorICAgICAgICAgICAgICB0X3JlcyA9 IEpTT04ucGFyc2UodHJhbnNJZC5yZXNwb25zZVRleHQpOworICAgICAgICAg ICAgdHJhbnNfaWQgPSB0X3Jlcy5kYXRhLmZpbGVUcmFuc0lkOworICAgICAg ICAgIH07CisKKyAgICAgICAgICAvLyBEaWFsb2cgcHJvcGVydHkKKyAgICAg ICAgICByZXR1cm4geworICAgICAgICAgICAgbWFpbjogZnVuY3Rpb24ocGFy YW1zKSB7CisgICAgICAgICAgICAgIHRoaXMuc2V0KCd0aXRsZScsIHBhcmFt c1sndGl0bGUnXSk7CisgICAgICAgICAgICAgIHZhciB0cmFuc19pZDsKKyAg ICAgICAgICAgICAgdGhpcy50aXRsZSA9IHBhcmFtcy50aXRsZTsKKworICAg ICAgICAgICAgICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpOwor ICAgICAgICAgICAgICAkY29udGFpbmVyLmZpbmQoJy5zdG9yYWdlX2NvbnRl bnQnKS5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBl bmQoIjxkaXYgY2xhc3M9J3N0b3JhZ2VfY29udGVudCc+PC9kaXY+Iik7Cisg ICAgICAgICAgICAgIHJlbmRlclN0b3JhZ2VQYW5lbChwYXJhbXMpOworICAg ICAgICAgICAgICB0aGlzLnNob3coKTsKKyAgICAgICAgICAgIH0sCisgICAg ICAgICAgICBzZXR1cDpmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgICAgICBidXR0b25zOlsKKyAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogInt7IF8oJ1Nl bGVjdCcpIH19Iiwga2V5OiAxMywgY2xhc3NOYW1lOiAiYnRuIGJ0bi1wcmlt YXJ5IGZhIGZhLWZpbGUgZmlsZV9tYW5hZ2VyX29rIHBnLWFsZXJ0aWZ5LWJ1 dHRvbiBkaXNhYmxlZCIKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ7eyBf KCdDYW5jZWwnKSB9fSIsIGtleTogMjcsIGNsYXNzTmFtZTogImJ0biBidG4t ZGFuZ2VyIGZhIGZhLXRpbWVzIHBnLWFsZXJ0aWZ5LWJ1dHRvbiIKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAg ICAgICAgIGZvY3VzOiB7IGVsZW1lbnQ6IDAgfSwKKyAgICAgICAgICAgICAg ICBvcHRpb25zOiB7CisgICAgICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGlt bWVyOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1heGltaXphYmxlOiBm YWxzZSwKKyAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSwKKyAg ICAgICAgICAgICAgICAgIG1vdmFibGU6IHRydWUKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LAorICAgICAg ICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGNsb3NlRXZlbnQpIHsKKyAgICAg ICAgICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0dG9uLnRleHQgPT0gInt7IF8o J1NlbGVjdCcpIH19IikgeworICAgICAgICAgICAgICAgIGlmKCQoJy5maWxl aW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3JpZCcpeworICAgICAgICAgICAg ICAgICAgc2VsX2ZpbGUgPSAkKCcuZmlsZWluZm8nKS5maW5kKCcjY29udGVu dHMgbGkuc2VsZWN0ZWQgIHAgc3BhbicpLmF0dHIoJ3RpdGxlJyk7CisgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHNlbF9m aWxlID0gJCgnLmZpbGVpbmZvIHRib2R5IHRyLnNlbGVjdGVkIHRkIHAgc3Bh bicpLmF0dHIoJ3RpdGxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIHZhciBuZXdGaWxlID0gJCgnLmN1cnJlbnRwYXRoJykudmFs KCkgKyBzZWxfZmlsZTsKKyAgICAgICAgICAgICAgICBwZ0FkbWluLkJyb3dz ZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRtaW4tc3RvcmFnZTpmaW5pc2hfYnRu OnNlbGVjdF9maWxlJywgbmV3RmlsZSk7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgcmVtb3ZlVHJhbnNJZCh0cmFuc19pZCk7CisgICAgICAg ICAgICB9LAorICAgICAgICAgICAgYnVpbGQ6IGZ1bmN0aW9uKCkgeworICAg ICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmNvbnRlbnQuYXBwZW5kQ2hpbGQo JGNvbnRhaW5lci5nZXQoMCkpOworICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgIGhvb2tzOiB7CisgICAgICAgICAgICAgIG9uc2hvdzogZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgICAgJCh0aGlzLmVsZW1lbnRzLmJvZHkpLmFk ZENsYXNzKCdwZ2FkbWluLXN0b3JhZ2UtYm9keScpOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfSk7 CisKKyAgICAgICAgLy8gRGVjbGFyZSB0aGUgRm9sZGVyIFNlbGVjdGlvbiBk aWFsb2cKKyAgICAgICAgYWxlcnRpZnkuZGlhbG9nKCdmb2xkZXJTZWxlY3Rp b25EbGcnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgY29udHJvbHMg PSBbXSwgLy8gS2VlcCB0cmFja2luZyBvZiBhbGwgdGhlIGJhY2tmb3JtIGNv bnRyb2xzCisgICAgICAgICAgICAgIC8vIERpYWxvZyBjb250YWludGVyCisg ICAgICAgICAgICAgICRjb250YWluZXIgPSAkKCI8ZGl2IGNsYXNzPSdzdG9y YWdlX2RpYWxvZyBmb2xkZXJfc2VsZWN0aW9uX2RsZyc+PC9kaXY+Iik7CisK KyAgICAgICAgICAvLyBzZW5kIGEgcmVxdWVzdCB0byBnZXQgdHJhbnNhY3Rp b24gaWQKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIEZ1bmN0aW9uOiBy ZW5kZXJTdG9yYWdlUGFuZWwKKyAgICAgICAgICAgKgorICAgICAgICAgICAq IFJlbmRlcnMgdGhlIEZpbGVNYW5hZ2VyIGluIHRoZSBjb250ZW50IGRpdiBi YXNlZCBvbiB0aGUgZ2l2ZW4KKyAgICAgICAgICAgKiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcnMuCisgICAgICAgICAgICovCisgICAgICAgICAgdmFyIHJl bmRlclN0b3JhZ2VQYW5lbCA9IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAg ICAgICAgLyoKKyAgICAgICAgICAgICAqIENsZWFyIHRoZSBleGlzdGluZyBo dG1sIGluIHRoZSBzdG9yYWdlIGNvbnRlbnQKKyAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSAkY29udGFpbmVyLmZpbmQoJy5z dG9yYWdlX2NvbnRlbnQnKTsKKyAgICAgICAgICAgIGNvbnRlbnQuZW1wdHko KTsKKworICAgICAgICAgICAgJC5nZXQoInt7IHVybF9mb3IoJ2ZpbGVfbWFu YWdlci5pbmRleCcpIH19IiwgZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAg ICAgICBjb250ZW50LmFwcGVuZChkYXRhKTsKKyAgICAgICAgICAgIH0pOwor CisgICAgICAgICAgICB0cmFuc0lkID0gZ2V0VHJhbnNJZChwYXJhbXMpOwor ICAgICAgICAgICAgaWYgKHRyYW5zSWQucmVhZHlTdGF0ZSA9PSA0KQorICAg ICAgICAgICAgICB0X3JlcyA9IEpTT04ucGFyc2UodHJhbnNJZC5yZXNwb25z ZVRleHQpOworICAgICAgICAgICAgdHJhbnNfaWQgPSB0X3Jlcy5kYXRhLmZp bGVUcmFuc0lkOworCisgICAgICAgICAgfTsKKworICAgICAgICAgIC8vIERp YWxvZyBwcm9wZXJ0eQorICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg ICBtYWluOiBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAgICAgICAgdGhp cy5zZXQoJ3RpdGxlJywgcGFyYW1zWyd0aXRsZSddKTsKKyAgICAgICAgICAg ICAgdmFyIHRyYW5zX2lkOworICAgICAgICAgICAgICBwYXJhbXMgPSBKU09O LnN0cmluZ2lmeShwYXJhbXMpOworICAgICAgICAgICAgICAkY29udGFpbmVy LmZpbmQoJy5zdG9yYWdlX2NvbnRlbnQnKS5yZW1vdmUoKTsKKyAgICAgICAg ICAgICAgJGNvbnRhaW5lci5hcHBlbmQoIjxkaXYgY2xhc3M9J3N0b3JhZ2Vf Y29udGVudCc+PC9kaXY+Iik7CisgICAgICAgICAgICAgIHJlbmRlclN0b3Jh Z2VQYW5lbChwYXJhbXMpOworICAgICAgICAgICAgICB0aGlzLnNob3coKTsK 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 ICAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJpZ2dlcigncGdhZG1p bi1zdG9yYWdlOmZpbmlzaF9idG46c2VsZWN0X2ZvbGRlcicsIG5ld0ZpbGUp OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJlbW92ZVRyYW5z SWQodHJhbnNfaWQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGJ1 aWxkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgdGhpcy5lbGVtZW50 cy5jb250ZW50LmFwcGVuZENoaWxkKCRjb250YWluZXIuZ2V0KDApKTsKKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBob29rczogeworICAgICAgICAg ICAgICBvbnNob3c6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQo dGhpcy5lbGVtZW50cy5ib2R5KS5hZGRDbGFzcygncGdhZG1pbi1zdG9yYWdl LWJvZHknKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgIH07CisgICAgICAgIH0pOworCisgICAgICAgIC8vIERlY2xhcmUg dGhlIENyZWF0ZSBtb2RlIGRpYWxvZworICAgICAgICBhbGVydGlmeS5kaWFs b2coJ2NyZWF0ZU1vZGVEbGcnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2 YXIgY29udHJvbHMgPSBbXSwgLy8gS2VlcCB0cmFja2luZyBvZiBhbGwgdGhl IGJhY2tmb3JtIGNvbnRyb2xzCisgICAgICAgICAgICAgIC8vIERpYWxvZyBj b250YWludGVyCisgICAgICAgICAgICAgICRjb250YWluZXIgPSAkKCI8ZGl2 IGNsYXNzPSdzdG9yYWdlX2RpYWxvZyBjcmVhdGVfbW9kZV9kbGcnPjwvZGl2 PiIpOworCisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBGdW5jdGlvbjog cmVuZGVyU3RvcmFnZVBhbmVsCisgICAgICAgICAgICoKKyAgICAgICAgICAg KiBSZW5kZXJzIHRoZSBGaWxlTWFuYWdlciBpbiB0aGUgY29udGVudCBkaXYg YmFzZWQgb24gdGhlIGdpdmVuCisgICAgICAgICAgICogY29uZmlndXJhdGlv biBwYXJhbWV0ZXJzLgorICAgICAgICAgICAqLworICAgICAgICAgIHZhciBy ZW5kZXJTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgKiBDbGVhciB0aGUgZXhpc3Rpbmcg aHRtbCBpbiB0aGUgc3RvcmFnZSBjb250ZW50CisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIHZhciBjb250ZW50ID0gJGNvbnRhaW5lci5maW5kKCcu c3RvcmFnZV9jb250ZW50Jyk7CisgICAgICAgICAgICBjb250ZW50LmVtcHR5 KCk7CisKKyAgICAgICAgICAgICQuZ2V0KCJ7eyB1cmxfZm9yKCdmaWxlX21h bmFnZXIuaW5kZXgnKSB9fSIsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAg ICAgICAgY29udGVudC5hcHBlbmQoZGF0YSk7CisgICAgICAgICAgICB9KTsK KworICAgICAgICAgICAgdHJhbnNJZCA9IGdldFRyYW5zSWQocGFyYW1zKTsK KyAgICAgICAgICAgIGlmICh0cmFuc0lkLnJlYWR5U3RhdGUgPT0gNCkKKyAg ICAgICAgICAgICAgdF9yZXMgPSBKU09OLnBhcnNlKHRyYW5zSWQucmVzcG9u c2VUZXh0KTsKKyAgICAgICAgICAgIHRyYW5zX2lkID0gdF9yZXMuZGF0YS5m aWxlVHJhbnNJZDsKKworICAgICAgICAgIH07CisKKyAgICAgICAgICAvLyBE aWFsb2cgcHJvcGVydHkKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAg ICAgbWFpbjogZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgICAgICAgIHRo aXMuc2V0KCd0aXRsZScsIHBhcmFtc1sndGl0bGUnXSk7CisgICAgICAgICAg ICAgIHZhciB0cmFuc19pZDsKKyAgICAgICAgICAgICAgcGFyYW1zID0gSlNP Ti5zdHJpbmdpZnkocGFyYW1zKTsKKyAgICAgICAgICAgICAgJGNvbnRhaW5l ci5maW5kKCcuc3RvcmFnZV9jb250ZW50JykucmVtb3ZlKCk7CisgICAgICAg ICAgICAgICRjb250YWluZXIuYXBwZW5kKCI8ZGl2IGNsYXNzPSdzdG9yYWdl X2NvbnRlbnQnPjwvZGl2PiIpOworICAgICAgICAgICAgICByZW5kZXJTdG9y YWdlUGFuZWwocGFyYW1zKTsKKyAgICAgICAgICAgICAgdGhpcy5zaG93KCk7 CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0dXA6ZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg YnV0dG9uczpbCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIHRleHQ6ICJ7eyBfKCdDcmVhdGUnKSB9fSIsIGtleTogMTMsIGNs YXNzTmFtZTogImJ0biBidG4tcHJpbWFyeSBmYSBmYS1maWxlIGZpbGVfbWFu YWdlcl9jcmVhdGUgZmlsZV9tYW5hZ2VyX29rIHBnLWFsZXJ0aWZ5LWJ1dHRv biBkaXNhYmxlZCIKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ7eyBfKCdD YW5jZWwnKSB9fSIsIGtleTogMjcsIGNsYXNzTmFtZTogImJ0biBidG4tZGFu Z2VyIGZhIGZhLXRpbWVzIGZpbGVfbWFuYWdlcl9jcmVhdGVfY2FuY2VsIHBn LWFsZXJ0aWZ5LWJ1dHRvbiIKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGZvY3VzOiB7IGVsZW1l bnQ6IDAgfSwKKyAgICAgICAgICAgICAgICBvcHRpb25zOiB7CisgICAgICAg ICAgICAgICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgIGNsb3NhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1vdmFi bGU6IHRydWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH07 CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcmVwbGFjZV9maWxlOiBm dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAkKCcucmVwbGFjZV9maWxl Jykuc2hvdygpOworICAgICAgICAgICAgICAgICQoJy5yZXBsYWNlX2ZpbGUg LmJ0bl95ZXMnKS5jbGljayhmdW5jdGlvbihzZWxmKSB7CisgICAgICAgICAg ICAgICAgICAkKCcucmVwbGFjZV9maWxlJykuaGlkZSgpOworICAgICAgICAg ICAgICAgICAgdmFyIHNlbGVjdGVkX2l0ZW0gPSAkKCcuYWxsb3dlZF9maWxl X3R5cGVzIC5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJdJykudmFs KCksCisgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9ICQoJy5jdXJy ZW50cGF0aCcpLnZhbCgpICsgc2VsZWN0ZWRfaXRlbTsKKyAgICAgICAgICAg ICAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJpZ2dlcigncGdhZG1p bi1zdG9yYWdlOmZpbmlzaF9idG46Y3JlYXRlX2ZpbGUnLCBuZXdGaWxlKTsK KyAgICAgICAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXJfY3JlYXRlX2Nh bmNlbCcpLnRyaWdnZXIoJ2NsaWNrJyk7CisgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICAgICAgJCgnLnJlcGxhY2VfZmlsZSAuYnRuX25vJyku Y2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAkKCcucmVw bGFjZV9maWxlJykuaGlkZSgpOworICAgICAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIGlzX2ZpbGVfZXhpc3Q6IGZ1bmN0 aW9uKCkgeworICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRfaXRlbSA9ICQo Jy5hbGxvd2VkX2ZpbGVfdHlwZXMgLmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBl PSJ0ZXh0Il0nKS52YWwoKSwKKyAgICAgICAgICAgICAgICAgIGlzX2V4aXN0 ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgdmFyIGZpbGVfZGF0YSA9IHsK KyAgICAgICAgICAgICAgICAncGF0aCc6ICQoJy5jdXJyZW50cGF0aCcpLnZh bCgpLAorICAgICAgICAgICAgICAgICduYW1lJzogc2VsZWN0ZWRfaXRlbSwK KyAgICAgICAgICAgICAgICAnbW9kZSc6ICdpc19maWxlX2V4aXN0JworICAg ICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICQuYWpheCh7CisgICAg ICAgICAgICAgICAgdHlwZTogJ1BPU1QnLAorICAgICAgICAgICAgICAgIGRh dGE6IEpTT04uc3RyaW5naWZ5KGZpbGVfZGF0YSksCisgICAgICAgICAgICAg ICAgdXJsOiBmaWxlQ29ubmVjdG9yICsgdHJhbnNfaWQrJy8nLAorICAgICAg ICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCisgICAgICAgICAgICAgICAg Y29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LWRvd25sb2FkOyBjaGFyc2V0 PXV0Zi04IiwKKyAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAg ICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcCl7CisgICAgICAg ICAgICAgICAgICBkYXRhID0gcmVzcC5kYXRhLnJlc3VsdDsKKyAgICAgICAg ICAgICAgICAgIGlmKGRhdGFbJ0NvZGUnXSA9PT0gMCl7CisgICAgICAgICAg ICAgICAgICAgIGlzX2V4aXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlzX2V4aXN0ID0gZmFs c2U7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgcmV0dXJuIGlzX2V4 aXN0OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNyZWF0ZV9maWxl OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkX2l0 ZW0gPSAkKCcuYWxsb3dlZF9maWxlX3R5cGVzIC5jcmVhdGVfaW5wdXQgaW5w dXRbdHlwZT0idGV4dCJdJykudmFsKCksCisgICAgICAgICAgICAgICAgICBp c19leGlzdCA9IGZhbHNlLAorICAgICAgICAgICAgICAgICAgaXNfY3JlYXRl ZCA9IGZhbHNlOworCisgICAgICAgICAgICAgIHZhciBwb3N0X2RhdGEgPSB7 CisgICAgICAgICAgICAgICAgJ3BhdGgnOiAkKCcuY3VycmVudHBhdGgnKS52 YWwoKSwKKyAgICAgICAgICAgICAgICAnbmFtZSc6IHNlbGVjdGVkX2l0ZW0s CisgICAgICAgICAgICAgICAgJ21vZGUnOiAnY3JlYXRlX2ZpbGUnCisgICAg ICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAg ICAgICAgICAgICB0eXBlOiAnUE9TVCcsCisgICAgICAgICAgICAgICAgZGF0 YTogSlNPTi5zdHJpbmdpZnkocG9zdF9kYXRhKSwKKyAgICAgICAgICAgICAg ICB1cmw6IGZpbGVDb25uZWN0b3IgKyB0cmFuc19pZCsnLycsCisgICAgICAg ICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywKKyAgICAgICAgICAgICAgICBj b250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtZG93bmxvYWQ7IGNoYXJzZXQ9 dXRmLTgiLAorICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAg ICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwKXsKKyAgICAgICAg ICAgICAgICAgIGRhdGEgPSByZXNwLmRhdGEucmVzdWx0OworICAgICAgICAg ICAgICAgICAgaWYoZGF0YVsnQ29kZSddID09PSAwKXsKKyAgICAgICAgICAg ICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcygiTmV3IEZpbGUgY3JlYXRlZCBz dWNjZXNzZnVsbHkuIik7CisgICAgICAgICAgICAgICAgICAgIGlzX2NyZWF0 ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgYWxlcnRpZnkuZXJyb3IoZGF0YVsnRXJyb3InXSk7 CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICByZXR1cm4gaXNfY3JlYXRlZDsKKyAgICAg ICAgICAgIH0sCisgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oY2xv c2VFdmVudCkgeworICAgICAgICAgICAgICBpZiAoY2xvc2VFdmVudC5idXR0 b24udGV4dCA9PSAie3sgXygnQ3JlYXRlJykgfX0iKXsKKyAgICAgICAgICAg ICAgICB2YXIgc2VsZWN0ZWRfaXRlbSA9ICQoJy5hbGxvd2VkX2ZpbGVfdHlw ZXMgLmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0nKS52YWwoKTsK KyAgICAgICAgICAgICAgICB2YXIgbmV3RmlsZSA9ICQoJy5jdXJyZW50cGF0 aCcpLnZhbCgpICsgc2VsZWN0ZWRfaXRlbTsKKyAgICAgICAgICAgICAgICBp ZighXy5pc1VuZGVmaW5lZChzZWxlY3RlZF9pdGVtKSAmJiBzZWxlY3RlZF9p dGVtICE9PSAnJyAmJiB0aGlzLmlzX2ZpbGVfZXhpc3QoKSkgeworICAgICAg ICAgICAgICAgICAgdGhpcy5yZXBsYWNlX2ZpbGUoKTsKKyAgICAgICAgICAg ICAgICAgIGNsb3NlRXZlbnQuY2FuY2VsID0gdHJ1ZTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg ICAgICB2YXIgaXNfY3JlYXRlZCA9IHRoaXMuY3JlYXRlX2ZpbGUoKTsKKyAg ICAgICAgICAgICAgICAgIGlmIChpc19jcmVhdGVkKSB7CisgICAgICAgICAg ICAgICAgICAgIHBnQWRtaW4uQnJvd3Nlci5FdmVudHMudHJpZ2dlcigncGdh ZG1pbi1zdG9yYWdlOmZpbmlzaF9idG46Y3JlYXRlX2ZpbGUnLCBuZXdGaWxl KTsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNJZCh0cmFuc19p ZCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VFdmVudC5jYW5jZWwg PSB0cnVlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoY2xvc2VF dmVudC5idXR0b24udGV4dCA9PSAie3sgXygnQ2FuY2VsJykgfX0iKXsKKyAg ICAgICAgICAgICAgICByZW1vdmVUcmFuc0lkKHRyYW5zX2lkKTsKKyAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGJ1aWxk OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5j b250ZW50LmFwcGVuZENoaWxkKCRjb250YWluZXIuZ2V0KDApKTsKKyAgICAg ICAgICAgIH0sCisgICAgICAgICAgICBob29rczogeworICAgICAgICAgICAg ICBvbnNob3c6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQodGhp cy5lbGVtZW50cy5ib2R5KS5hZGRDbGFzcygncGdhZG1pbi1zdG9yYWdlLWJv ZHknKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgIH07CisgICAgICAgIH0pOworICAgICAgfSwKKyAgICAgIHNob3dfc3Rv cmFnZV9kbGc6IGZ1bmN0aW9uKHBhcmFtcykgeworICAgICAgICBhbGVydGlm eS5zdG9yYWdlTWFuYWdlckRsZyhwYXJhbXMpLnJlc2l6ZVRvKCc2MCUnLCAn ODAlJyk7CisgICAgICB9LAorICAgICAgc2hvd19maWxlX3NlbGVjdGlvbjog ZnVuY3Rpb24ocGFyYW1zKSB7CisgICAgICAgIGFsZXJ0aWZ5LmZpbGVTZWxl Y3Rpb25EbGcocGFyYW1zKS5yZXNpemVUbygnNjAlJywgJzgwJScpOworICAg ICAgfSwKKyAgICAgIHNob3dfZm9sZGVyX3NlbGVjdGlvbjogZnVuY3Rpb24o cGFyYW1zKSB7CisgICAgICAgIGFsZXJ0aWZ5LmZvbGRlclNlbGVjdGlvbkRs ZyhwYXJhbXMpLnJlc2l6ZVRvKCc2MCUnLCAnODAlJyk7CisgICAgICB9LAor ICAgICAgc2hvd19jcmVhdGVfZGxnOiBmdW5jdGlvbihwYXJhbXMpIHsKKyAg ICAgICAgYWxlcnRpZnkuY3JlYXRlTW9kZURsZyhwYXJhbXMpLnJlc2l6ZVRv KCc2MCUnLCAnODAlJyk7CisgICAgICB9LAorICAgICAgLy8gY2FsbCBkaWFs b2dzIHN1YmplY3QgdG8gZGlhbG9nX3R5cGUgcGFyYW0KKyAgICAgIHNob3df ZGlhbG9nOiBmdW5jdGlvbihwYXJhbXMpIHsKKyAgICAgICAgaWYocGFyYW1z LmRpYWxvZ190eXBlID09ICdzZWxlY3RfZmlsZScpIHsKKyAgICAgICAgICBw YXJhbXNbJ3RpdGxlJ10gPSAnU2VsZWN0IEZpbGUnOworICAgICAgICAgIHRo aXMuc2hvd19maWxlX3NlbGVjdGlvbihwYXJhbXMpOworICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKHBhcmFtcy5kaWFsb2dfdHlwZSA9PSAnc2VsZWN0 X2ZvbGRlcicpIHsKKyAgICAgICAgICBwYXJhbXNbJ3RpdGxlJ10gPSAnU2Vs ZWN0IEZvbGRlcic7CisgICAgICAgICAgdGhpcy5zaG93X2ZvbGRlcl9zZWxl Y3Rpb24ocGFyYW1zKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChw YXJhbXMuZGlhbG9nX3R5cGUgPT0gJ2NyZWF0ZV9maWxlJykgeworICAgICAg ICAgIHBhcmFtc1sndGl0bGUnXSA9ICdDcmVhdGUgRmlsZSc7CisgICAgICAg ICAgdGhpcy5zaG93X2NyZWF0ZV9kbGcocGFyYW1zKTsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIHsKKyAgICAgICAgICBwYXJhbXNbJ3RpdGxlJ10gPSAn U3RvcmFnZSBNYW5hZ2VyJzsKKyAgICAgICAgICB0aGlzLnNob3dfc3RvcmFn ZV9kbGcocGFyYW1zKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisK KyAgICByZXR1cm4gcGdBZG1pbi5GaWxlTWFuYWdlcjsKKyAgfSk7CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0 ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9jb25maWcuanNvbiBi L3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxl X21hbmFnZXIvanMvZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZjczNzUKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1w bGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL2ZpbGVfbWFuYWdlcl9jb25maWcuanNv bgpAQCAtMCwwICsxLDIzIEBACit7CisgICAgIm9wdGlvbnMiOiB7CisgICAg ICAgICJjdWx0dXJlIjogImVuIiwKKyAgICAgICAgImxhbmciOiAicHkiLAor ICAgICAgICAiZGVmYXVsdFZpZXdNb2RlIjogImdyaWQiLAorICAgICAgICAi YXV0b2xvYWQiOiB0cnVlLAorICAgICAgICAic2hvd0Z1bGxQYXRoIjogZmFs c2UsCisgICAgICAgICJkaWFsb2dfdHlwZSI6ICJ7e2RhdGEuZGlhbG9nX3R5 cGV9fSIsCisgICAgICAgICJmaWxlUm9vdCI6ICJ7e2RhdGEuZmlsZXJvb3R9 fSIsCisgICAgICAgICJjYXBhYmlsaXRpZXMiOiBbeyUgZm9yIGkgaW4gZGF0 YS5jYXBhYmlsaXRpZXMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0sIHsl IGVuZGlmICV9Int7aX19InslIGVuZGZvciAlfV0sCisgICAgICAgICJhbGxv d2VkX2ZpbGVfdHlwZXMiOiBbeyUgZm9yIGkgaW4gZGF0YS5zdXBwb3J0ZWRf dHlwZXMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0sIHslIGVuZGlmICV9 Int7aX19InslIGVuZGZvciAlfV0KKyAgICB9LAorICAgICJzZWN1cml0eSI6 IHsKKyAgICAgICAgInVwbG9hZFBvbGljeSI6ICJ7eyBkYXRhLnNlY3VyaXR5 LnVwbG9hZFBvbGljeSB9fSIsCisgICAgICAgICJ1cGxvYWRSZXN0cmljdGlv bnMiOiBbeyUgZm9yIGkgaW4gZGF0YS5zZWN1cml0eS51cGxvYWRSZXN0cmlj dGlvbnMgJX17JSBpZiBsb29wLmluZGV4ICE9IDEgJX0sIHslIGVuZGlmICV9 Int7aX19InslIGVuZGZvciAlfV0KKyAgICB9LAorICAgICJ1cGxvYWQiOiB7 CisgICAgICAgICJtdWx0aXBsZSI6ICJ7eyBkYXRhLnVwbG9hZC5tdWx0aXBs ZSB9fSIsCisgICAgICAgICJudW1iZXIiOiAyMCwKKyAgICAgICAgImZpbGVT aXplTGltaXQiOiAie3sgZGF0YS51cGxvYWQuZmlsZVNpemVMaW1pdCB9fSIs CisgICAgICAgICJpbWFnZXNPbmx5IjogZmFsc2UKKyAgICB9Cit9CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0 ZXMvZmlsZV9tYW5hZ2VyL2pzL2xhbmd1YWdlcy9lbi5qcyBiL3dlYi9wZ2Fk bWluL21pc2MvZmlsZV9tYW5hZ2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIv anMvbGFuZ3VhZ2VzL2VuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmI3ZWQ4OTgKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2Vy L2pzL2xhbmd1YWdlcy9lbi5qcwpAQCAtMCwwICsxLDk2IEBACit7CisgICAg IkFMTE9XRURfRklMRV9UWVBFIjogIk9ubHkgZm9sbG93aW5nIGZpbGVzIGFy ZSBhbGxvd2VkIDogIiwKKyAgICAiQVVUSE9SSVpBVElPTl9SRVFVSVJFRCI6 ICJZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHVzZSBmaWxlbWFuYWdlci4i LAorICAgICJESVJFQ1RPUllfQUxSRUFEWV9FWElTVFMiOiAiVGhlIGRpcmVj dG9yeSAnJXMnIGFscmVhZHkgZXhpc3RzLiIsCisgICAgIkRJUkVDVE9SWV9O T1RfRVhJU1QiOiAiVGhlIGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdC4i LAorICAgICJESVNBTExPV0VEX0ZJTEVfVFlQRSI6ICJGb2xsb3dpbmcgZmls ZXMgYXJlIG5vdCBhbGxvd2VkIDogIiwKKyAgICAiRVJST1JfQ1JFQVRJTkdf WklQIjogIkVycm9yIGNyZWF0aW5nIFppcCBhcmNoaXZlIiwKKyAgICAiRVJS T1JfT1BFTklOR19GSUxFIjogIkVycm9yIG9wZW5pbmcgZmlsZS4iLAorICAg ICJFUlJPUl9SRU5BTUlOR19ESVJFQ1RPUlkiOiAiRXJyb3Igd2hpbGUgcmVu YW1pbmcgdGhlIGRpcmVjdG9yeSAlcyB0byAlcy4iLAorICAgICJFUlJPUl9S RU5BTUlOR19GSUxFIjogIkVycm9yIHdoaWxlIHJlbmFtaW5nIHRoZSBmaWxl ICVzIHRvICVzLiIsCisgICAgIkVSUk9SX1JFUExBQ0lOR19GSUxFIjogIlBs ZWFzZSwgcHJvdmlkZSBhIGZpbGUgaGF2aW5nIHRoZSBmb2xsb3dpbmcgZXh0 ZW5zaW9uIDoiLAorICAgICJFUlJPUl9TQVZJTkdfRklMRSI6ICJFcnJvciBz YXZpbmcgZmlsZS4iLAorICAgICJFUlJPUl9VUExPQURJTkdfRklMRSI6ICJF cnJvciB1cGxvYWRpbmcgZmlsZS4iLAorICAgICJFUlJPUl9XUklUSU5HX1BF Uk0iOiAiWW91IGRvbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgb24gdGhh dCBmaWxlLiIsCisgICAgIkZJTEVfQUxSRUFEWV9FWElTVFMiOiAiVGhlIGZp bGUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iLAorICAgICJGSUxFX0RPRVNfTk9U X0VYSVNUIjogIlRoZSBmaWxlICVzIGRvZXMgbm90IGV4aXN0LiIsCisgICAg IklOVkFMSURfQUNUSU9OIjogIkludmFsaWQgYWN0aW9uLiIsCisgICAgIklO VkFMSURfRElSRUNUT1JZX09SX0ZJTEUiOiAiSW52YWxpZCBkaXJlY3Rvcnkg b3IgZmlsZS4iLAorICAgICJJTlZBTElEX0ZJTEVfVFlQRSI6ICJGaWxlIHR5 cGUgaXMgbm90IGFsbG93ZWQuIiwKKyAgICAiSU5WQUxJRF9GSUxFX1VQTE9B RCI6ICJJbnZhbGlkIGZpbGUgdXBsb2FkLiIsCisgICAgIklOVkFMSURfVkFS IjogIkludmFsaWQgdmFyICVzLiIsCisgICAgIkxBTkdVQUdFX0ZJTEVfTk9U X0ZPVU5EIjogIkxhbmd1YWdlIGZpbGUgbm90IGZvdW5kLiIsCisgICAgIk1P REVfRVJST1IiOiAiTW9kZSBlcnJvci4iLAorICAgICJOT1RfQUxMT1dFRCI6 ICJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHByb2Nlc3MgdGhpcyBhY3Rpb24i LAorICAgICJOT1RfQUxMT1dFRF9TWVNURU0iOiAiU3lzdGVtIHBlcm1pc3Np b25zIGRvIG5vdCBhbGxvdyB5b3UgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbiIs CisgICAgIlVOQUJMRV9UT19DUkVBVEVfRElSRUNUT1JZIjogIlVuYWJsZSB0 byBjcmVhdGUgdGhlIGRpcmVjdG9yeSAlcy4iLAorICAgICJVTkFCTEVfVE9f T1BFTl9ESVJFQ1RPUlkiOiAiVW5hYmxlIHRvIG9wZW4gdGhlIGRpcmVjdG9y eSAlcy4iLAorICAgICJVUExPQURfRklMRVNfU01BTExFUl9USEFOIjogIlBs ZWFzZSB1cGxvYWQgb25seSBmaWxlcyBzbWFsbGVyIHRoYW4gJXMuIiwKKyAg ICAiVVBMT0FEX0lNQUdFU19PTkxZIjogIlBsZWFzZSB1cGxvYWQgb25seSBp bWFnZXMsIG5vIG90aGVyIGZpbGVzIGFyZSBzdXBwb3J0ZWQuIiwKKyAgICAi VVBMT0FEX0lNQUdFU19UWVBFX0pQRUdfR0lGX1BORyI6ICJQbGVhc2UgdXBs b2FkIG9ubHkgaW1hZ2VzIG9mIHR5cGUgSlBFRywgR0lGIG9yIFBORy4iLAor ICAgICJ1cGxvYWRfc3VjY2VzcyI6ICJGaWxlIHVwbG9hZGVkIHN1Y2Nlc3Nm dWxseS4iLAorICAgICJ1cGxvYWRfZXJyb3IiOiAiRXJyb3IgdXBsb2FkaW5n IGZpbGUiLAorICAgICJicm93c2UiOiAiQnJvd3NlLi4uIiwKKyAgICAiYnl0 ZXMiOiAiIGJ5dGVzIiwKKyAgICAiY2FuY2VsIjogIkNhbmNlbCIsCisgICAg ImNsb3NlIjogIkNsb3NlIiwKKyAgICAiY29uZmlybWF0aW9uX2RlbGV0ZSI6 ICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gZGVsZXRlIHRoaXMgZmlsZT8i LAorICAgICJjb3BpZWQiOiAiVVJMIGNvcGllZCAhIiwKKyAgICAiY29weV90 b19jbGlwYm9hcmQiOiAiQ29weSBVUkwgdG8gQ2xpcGJvYXJkIiwKKyAgICAi Y291bGRfbm90X3JldHJpZXZlX2ZvbGRlciI6ICJDb3VsZCBub3QgcmV0cmll dmUgZm9sZGVyIGNvbnRlbnRzLiIsCisgICAgImNyZWF0ZV9mb2xkZXIiOiAi Q3JlYXRlIEZvbGRlciIsCisgICAgImNyZWF0ZV9uZXdfZm9sZGVyIjogIkVu dGVyIHRoZSBuYW1lIGZvciBmb2xkZXIiLAorICAgICJjcmVhdGVkIjogIkNy ZWF0ZWQiLAorICAgICJjdXJyZW50X2ZvbGRlciI6ICIiLAorICAgICJkZWZh dWx0X2ZvbGRlcm5hbWUiOiAiTXkgZm9sZGVyIiwKKyAgICAiZGVsIjogIkRl bGV0ZSIsCisgICAgImRpbWVuc2lvbnMiOiAiRGltZW5zaW9ucyIsCisgICAg ImRvd25sb2FkIjogIkRvd25sb2FkIiwKKyAgICAiZmlsZV91cGxvYWQiOiAi RmlsZSBVcGxvYWQiLAorICAgICJkel9kaWN0RGVmYXVsdE1lc3NhZ2UiOiAi RHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCIsCisgICAgImR6X2RpY3RGYWxs YmFja01lc3NhZ2UiOiAiWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQg ZHJhZyduJ2Ryb3AgZmlsZSB1cGxvYWRzLiIsCisgICAgImR6X2RpY3RNYXhG aWxlc0V4Y2VlZGVkIjogIk9ubHkgJXMgc2ltdWx0YW5lb3VzIHVwbG9hZHMg YXJlIGFsbG93ZWQuIiwKKyAgICAiZHpfZGljdEludmFsaWRGaWxlVHlwZSI6 ICJZb3UgY2FuJ3QgdXBsb2FkIGZpbGVzIG9mIHRoaXMgdHlwZS4iLAorICAg ICJlZGl0IjogIkVkaXQgZmlsZSIsCisgICAgImZja19zZWxlY3RfaW50ZWdy YXRpb24iOiAiVGhlICdTZWxlY3QnIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBm b3IgaW50ZWdyYXRpb24gd2l0aCBGQ0tFZGl0b3IuIiwKKyAgICAiZmlsZV9z aXplX2xpbWl0IjogIlRoZSBmaWxlIHNpemUgbGltaXQgKHBlciBmaWxlKSBp cyAiLAorICAgICJmaWxlX3Rvb19iaWciOiAiVGhlIGZpbGUgaXMgdG9vIGJp Zy4iLAorICAgICJnYiI6ICJnYiIsCisgICAgImdyaWRfdmlldyI6ICJTd2l0 Y2ggdG8gZ3JpZCB2aWV3LiIsCisgICAgImhlbHBfbW92ZSI6ICJUaGUgdXNl IG9mICcuLi8nIGlzIGZvcmJpZGRlbi4gWW91IGNhbiBhY2Nlc3Mgcm9vdCBm b2xkZXIgYnkgdXNpbmcgJy8nLiIsCisgICAgIml0ZW1zIjogIml0ZW1zIiwK KyAgICAia2IiOiAia2IiLAorICAgICJsaXN0X3ZpZXciOiAiU3dpdGNoIHRv IGxpc3Qgdmlldy4iLAorICAgICJsb2FkaW5nX2RhdGEiOiAiVHJhbnNmZXJy aW5nIGRhdGEgLi4uIiwKKyAgICAibWIiOiAibWIiLAorICAgICJtb2RpZmll ZCI6ICJNb2RpZmllZCIsCisgICAgIm1vdmUiOiAiTW92ZSB0byAuLi4iLAor ICAgICJuYW1lIjogIk5hbWUiLAorICAgICJuZXdfZmlsZW5hbWUiOiAiRW50 ZXIgYSBuZXcgbmFtZSBmb3IgdGhlIGZpbGUiLAorICAgICJuZXdfZm9sZGVy IjogIk5ldyBmb2xkZXIiLAorICAgICJubyI6ICJObyIsCisgICAgIm5vX2Zv bGRlcm5hbWUiOiAiTm8gZm9sZGVyIG5hbWUgd2FzIHByb3ZpZGVkLiIsCisg ICAgInBhcmVudGZvbGRlciI6ICJQYXJlbnQgZm9sZGVyIiwKKyAgICAicHJv bXB0X2ZvbGRlcm5hbWUiOiAiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIG5ldyBm b2xkZXIiLAorICAgICJxdWl0X2VkaXRvciI6ICJRdWl0IGVkaXRvciIsCisg ICAgInJlbmFtZSI6ICJSZW5hbWUiLAorICAgICJyZW5hbWVfdGV4dCI6ICJF bnRlciB0aGUgbmV3IG5hbWUiLAorICAgICJyZXBsYWNlIjogIlJlcGxhY2Ug ZmlsZSIsCisgICAgInNhdmUiOiAiU2F2ZSIsCisgICAgInNlYXJjaCI6ICJT ZWFyY2giLAorICAgICJzZWFyY2hfcmVzZXQiOiAiUmVzZXQiLAorICAgICJz ZWxlY3QiOiAiU2VsZWN0IiwKKyAgICAic2VsZWN0X2Zyb21fbGVmdCI6ICJT ZWxlY3QgYW4gaXRlbSBmcm9tIHRoZSBsZWZ0LiIsCisgICAgInNpemUiOiAi U2l6ZSIsCisgICAgInN1Y2Nlc3NmdWxfYWRkZWRfZmlsZSI6ICJOZXcgZmls ZShzKSBhZGRlZCBzdWNjZXNzZnVsbHkuIiwKKyAgICAic3VjY2Vzc2Z1bF9h ZGRlZF9mb2xkZXIiOiAiTmV3IGZvbGRlciBhZGRlZCBzdWNjZXNzZnVsbHku IiwKKyAgICAic3VjY2Vzc2Z1bF9kZWxldGUiOiAiRGVsZXRlIHN1Y2Nlc3Nm dWwuIiwKKyAgICAic3VjY2Vzc2Z1bF9tb3ZlZCI6ICJNb3ZlIHN1Y2Nlc3Nm dWwuIiwKKyAgICAic3VjY2Vzc2Z1bF9yZXBsYWNlIjogIkZpbGUgcmVwbGFj ZW1lbnQgc3VjY2Vzc2Z1bC4iLAorICAgICJzdWNjZXNzZnVsX3JlbmFtZSI6 ICJSZW5hbWUgc3VjY2Vzc2Z1bC4iLAorICAgICJzdWNjZXNzZnVsX2VkaXQi OiAiQ29udGVudCB1cGRhdGUgc3VjY2Vzc2Z1bC4iLAorICAgICJzdWNjZXNz ZnVsX2NyZWF0ZSI6ICJOZXcgRm9sZGVyIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5 IiwKKyAgICAidXBsb2FkIjogIlVwbG9hZCIsCisgICAgInZlcnNpb24iOiAi dmVyc2lvbiIsCisgICAgInllcyI6ICJZZXMiCit9CmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9taXNjL2ZpbGVfbWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9t YW5hZ2VyL2pzL3V0aWxpdHkuanMgYi93ZWIvcGdhZG1pbi9taXNjL2ZpbGVf bWFuYWdlci90ZW1wbGF0ZXMvZmlsZV9tYW5hZ2VyL2pzL3V0aWxpdHkuanMK bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGFkOWJkMQot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2MvZmlsZV9tYW5h Z2VyL3RlbXBsYXRlcy9maWxlX21hbmFnZXIvanMvdXRpbGl0eS5qcwpAQCAt MCwwICsxLDE1MDQgQEAKKy8qKgorICogRmlsZW1hbmFnZXIgSlMgY29yZQor ICoKKyAqIGZpbGVtYW5hZ2VyLmpzCisgKgorICogIEBsaWNlbnNlICBNSVQg TGljZW5zZQorICogIEBhdXRob3IgSmFzb24gSHVjayAtIENvcmUgRml2ZSBM YWJzCisgKiAgQGF1dGhvciBTaW1vbiBHZW9yZ2V0IDxzaW1vbiAoYXQpIGxp bmVhMjEgKGRvdCkgY29tPgorICogIEBjb3B5cmlnaHQgIEF1dGhvcnMKKyAq LworCisoZnVuY3Rpb24oJCkgeworCisvLyBVc2VyIGFsZXJ0aWZ5IG9iamVj dAordmFyIGFsZXJ0aWZ5ID0gcmVxdWlyZSgiYWxlcnRpZnkiKTsKKworCisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICBEZWZpbmUgZnVuY3Rpb25zIHVzZWQgZm9yIHZh cmlvdXMgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gZnVuY3Rp b24gdG8gcmV0cmlldmUgR0VUIHBhcmFtcworJC51cmxQYXJhbSA9IGZ1bmN0 aW9uKG5hbWUpIHsKKyAgdmFyIHJlc3VsdHMgPSBuZXcgUmVnRXhwKCdbXFw/ Jl0nICsgbmFtZSArICc9KFteJiNdKiknKS5leGVjKHdpbmRvdy5sb2NhdGlv bi5ocmVmKTsKKyAgaWYgKHJlc3VsdHMpCisgICAgcmV0dXJuIHJlc3VsdHNb MV07CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK307CisKK3ZhciBnZXRGaWxl RXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSkgeworICAgIHZhciBmb3VuZCA9 IG5hbWUubGFzdEluZGV4T2YoJy4nKSArIDE7CisgICAgcmV0dXJuIChmb3Vu ZCA+IDAgPyBuYW1lLnN1YnN0cihmb3VuZCkgOiAiIik7Cit9OworCit2YXIg Z2V0RmlsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7CisgIHZhciBmbV9maWxl bmFtZSA9IG5hbWU7CisgIGlmIChmbV9maWxlbmFtZS5sZW5ndGggPiAxNSAp IHsKKyAgICAgIGZtX2ZpbGVuYW1lID0gbmFtZS5zdWJzdHIoMCwgMTApICsn Li4uJzsKKyAgfQorICByZXR1cm4gZm1fZmlsZW5hbWU7Cit9OworCisvLyBz ZW5kIGEgcmVxdWVzdCB0byBnZXQgdHJhbnNhY3Rpb24gaWQKK3ZhciBnZXRU cmFuc0lkID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAkLmFqYXgoeworICAg IGFzeW5jOiBmYWxzZSwKKyAgICB1cmw6ICJ7eyB1cmxfZm9yKCdmaWxlX21h bmFnZXIuaW5kZXgnKSB9fWdldF90cmFuc19pZCIsCisgICAgZGF0YVR5cGU6 ICJqc29ucCIKKyAgfSk7Cit9OworCisvLyBMb2FkIGxhbmd1YWdlIGZpbGUK K3ZhciBsb2FkTGFuZ0ZpbGUgPSBmdW5jdGlvbihlbmpzKSB7CisgIGlmKCQu dXJsUGFyYW0oJ2xhbmdDb2RlJykgIT09IDAgJiYgZmlsZV9leGlzdHMgKGVu anMpKSBjdWx0dXJlID0gJC51cmxQYXJhbSgnbGFuZ0NvZGUnKTsKKyAgcmV0 dXJuICQuYWpheCh7CisgICAgYXN5bmM6IGZhbHNlLAorICAgIHVybDogZW5q cywKKyAgICBkYXRhVHlwZTogJ2pzb25wJywKKyAgICBjb250ZW50VHlwZTog ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiCisgIH0pOworfTsK KworLy8gV2UgcmV0cmlldmUgY29uZmlnIHNldHRpbmdzIGZyb20gZmlsZW1h bmFnZXIuY29uZmlnLmpzCit2YXIgbG9hZENvbmZpZ0ZpbGUgPSBmdW5jdGlv biAodHlwZSkgeworICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAidW5kZWZp bmVkIikgPyAidXNlciIgOiB0eXBlOworICBpZiAodHlwZSA9PSAndXNlcicp IHsKKyAgICB1cmwgPSBmaWxlX21hbmFnZXJfY29uZmlnX2pzb247CisgICAg dXNlcmNvbmZpZyA9IGZpbGVfbWFuYWdlcl9jb25maWdfanNvbjsKKyAgfQor ICByZXR1cm4gJC5hamF4KHsKKyAgICBhc3luYzogZmFsc2UsCisgICAgdXJs OiB1cmwsCisgICAgZGF0YVR5cGU6ICJqc29ucCIsCisgICAgY29udGVudFR5 cGU6ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IgorICB9KTsK K307CisKKy8qCisgKiBGb3JjZXMgY29sdW1ucyB0byBmaWxsIHRoZSBsYXlv dXQgdmVydGljYWxseS4KKyAqIENhbGxlZCBvbiBpbml0aWFsIHBhZ2UgbG9h ZCBhbmQgb24gcmVzaXplLgorICovCit2YXIgc2V0RGltZW5zaW9ucyA9IGZ1 bmN0aW9uKCkgeworICB2YXIgbWFpbl9jb250YWluZXJfaGVpZ2h0ID0gKCAk KHdpbmRvdykuaGVpZ2h0KCkgKSAvIDIgKyAzNSwKKyAgICAgIG5ld0ggPSBt YWluX2NvbnRhaW5lcl9oZWlnaHQgLSAkKCcjdXBsb2FkZXInKS5oZWlnaHQo KSAtIDMwOworfTsKKworLy8gRGlzcGxheSBNaW4gUGF0aAordmFyIGRpc3Bs YXlQYXRoID0gZnVuY3Rpb24ocGF0aCkgeworICBpZihjb25maWcub3B0aW9u cy5zaG93RnVsbFBhdGggPT09IGZhbHNlKSB7CisgICAgLy8gaWYgYSAiZGlz cGxheVBhdGhEZWNvcmF0b3IiIGZ1bmN0aW9uIGlzIGRlZmluZWQsIHVzZSBp dCB0byBkZWNvcmF0ZSBwYXRoCisgICAgcmV0dXJuICdmdW5jdGlvbicgPT09 ICh0eXBlb2YgZGlzcGxheVBhdGhEZWNvcmF0b3IpCisgICAgICAgICA/IGRp c3BsYXlQYXRoRGVjb3JhdG9yKHBhdGgpCisgICAgICAgICA6IHBhdGgucmVw bGFjZShmaWxlUm9vdCwgIi8iKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4g cGF0aDsKKyAgfQorfTsKKworLy8gU2V0IHRoZSB2aWV3IGJ1dHRvbnMgc3Rh dGUKK3ZhciBzZXRWaWV3QnV0dG9uc0ZvciA9IGZ1bmN0aW9uKHZpZXdNb2Rl KSB7CisgICAgaWYgKHZpZXdNb2RlID09ICdncmlkJykgeworICAgICAgICAk KCcuZ3JpZCcpLmFkZENsYXNzKCdPTicpOworICAgICAgICAkKCcubGlzdCcp LnJlbW92ZUNsYXNzKCdPTicpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg ICAgJCgnLmxpc3QnKS5hZGRDbGFzcygnT04nKTsKKyAgICAgICAgJCgnLmdy aWQnKS5yZW1vdmVDbGFzcygnT04nKTsKKyAgICB9Cit9OworCisvKgorICog cHJlZ19yZXBsYWNlCisgKiBDb2RlIGZyb20gOiBodHRwOi8veHV4dS5mci8y MDA2LzA1LzIwL3ByZWctcmVwbGFjZS1qYXZhc2NyaXB0LworICovCit2YXIg cHJlZ19yZXBsYWNlID0gZnVuY3Rpb24oYXJyYXlfcGF0dGVybiwgYXJyYXlf cGF0dGVybl9yZXBsYWNlLCBzdHIpICB7CisgIHZhciBuZXdfc3RyID0gU3Ry aW5nIChzdHIpOworICAgIGZvciAoaT0wOyBpPGFycmF5X3BhdHRlcm4ubGVu Z3RoOyBpKyspIHsKKyAgICAgIHZhciByZWdfZXhwPSBSZWdFeHAoYXJyYXlf cGF0dGVybltpXSwgImciKTsKKyAgICAgIHZhciB2YWxfdG9fcmVwbGFjZSA9 IGFycmF5X3BhdHRlcm5fcmVwbGFjZVtpXTsKKyAgICAgIG5ld19zdHIgPSBu ZXdfc3RyLnJlcGxhY2UgKHJlZ19leHAsIHZhbF90b19yZXBsYWNlKTsKKyAg ICB9CisgICAgcmV0dXJuIG5ld19zdHI7CisgIH07CisKKy8qCisgKiBjbGVh blN0cmluZyAoKSwgb24gdGhlIHNhbWUgbW9kZWwgYXMgc2VydmVyIHNpZGUg KGNvbm5lY3RvcikKKyAqIGNsZWFuU3RyaW5nCisgKi8KK3ZhciBjbGVhblN0 cmluZyA9IGZ1bmN0aW9uKHN0cikgeworICB2YXIgY2xlYW5lZCA9ICIiOwor ICB2YXIgcF9zZWFyY2ggID0gICBuZXcgQXJyYXkoIsWgIiwgIsWhIiwgIsSQ IiwgIsSRIiwgIsW9IiwgIsW+IiwgIsSMIiwgIsSNIiwgIsSGIiwgIsSHIiwg IsOAIiwKKyAgICAgICAgICAgICLDgSIsICLDgiIsICLDgyIsICLDhCIsICLD hSIsICLDhiIsICLDhyIsICLDiCIsICLDiSIsICLDiiIsICLDiyIsICLDjCIs ICLDjSIsICLDjiIsICLDjyIsCisgICAgICAgICAgICAiw5EiLCAiw5IiLCAi w5MiLCAiw5QiLCAiw5UiLCAiw5YiLCAixZAiLCAiw5giLCAiw5kiLCAiw5oi LCAiw5siLCAiw5wiLCAiw50iLCAiw54iLCAiw58iLAorICAgICAgICAgICAg IsOgIiwgIsOhIiwgIsOiIiwgIsOjIiwgIsOkIiwgIsOlIiwgIsOmIiwgIsOn IiwgIsOoIiwgIsOpIiwgIsOqIiwgIsOrIiwgIsOsIiwgICLDrSIsCisgICAg ICAgICAgICAiw64iLCAiw68iLCAiw7AiLCAiw7EiLCAiw7IiLCAiw7MiLCAi w7QiLCAiw7UiLCAiw7YiLCAixZEiLCAiw7giLCAiw7kiLCAiw7oiLCAiw7si LCAiw70iLAorICAgICAgICAgICAgIsO9IiwgIsO+IiwgIsO/IiwgIsWUIiwg IsWVIiwgIiAiLCAiJyIsICIvIgorICAgICAgICAgICAgKTsKKyAgdmFyIHBf cmVwbGFjZSA9ICAgbmV3IEFycmF5KCJTIiwgInMiLCAiRGoiLCAiZGoiLCAi WiIsICJ6IiwgIkMiLCAiYyIsICJDIiwgImMiLCAiQSIsCisgICAgICAgICAg ICAiQSIsICJBIiwgIkEiLCAiQSIsICJBIiwgIkEiLCAiQyIsICJFIiwgIkUi LCAiRSIsICJFIiwgIkkiLCAiSSIsICJJIiwgIkkiLAorICAgICAgICAgICAg Ik4iLCAiTyIsICJPIiwgIk8iLCAiTyIsICJPIiwgIk8iLCAiTyIsICJVIiwg IlUiLCAiVSIsICJVIiwgIlkiLCAiQiIsICJTcyIsCisgICAgICAgICAgICAi YSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJjIiwgImUiLCAi ZSIsICJlIiwgImUiLCAiaSIsICJpIiwKKyAgICAgICAgICAgICJpIiwgImki LCAibyIsICJuIiwgIm8iLCAibyIsICJvIiwgIm8iLCAibyIsICJvIiwgIm8i LCAidSIsICJ1IiwgInUiLCAieSIsCisgICAgICAgICAgICAieSIsICJiIiwg InkiLCAiUiIsICJyIiwgIl8iLCAiXyIsICIiCisgICAgICAgICAgKTsKKwor ICBjbGVhbmVkID0gcHJlZ19yZXBsYWNlKHBfc2VhcmNoLCBwX3JlcGxhY2Us IHN0cik7CisgIGNsZWFuZWQgPSBjbGVhbmVkLnJlcGxhY2UoL1teX2EtekEt WjAtOV0vZywgIiIpOworICBjbGVhbmVkID0gY2xlYW5lZC5yZXBsYWNlKC9b X10rL2csICJfIik7CisKKyAgcmV0dXJuIGNsZWFuZWQ7Cit9OworCisvKgor ICogbmFtZUZvcm1hdCAoKSwgc2VwYXJhdGUgZmlsZW5hbWUgZnJvbSBleHRl bnNpb24gYmVmb3JlIGNhbGxpbmcgY2xlYW5TdHJpbmcoKQorICogbmFtZUZv cm1hdAorICovCit2YXIgbmFtZUZvcm1hdCA9IGZ1bmN0aW9uKGlucHV0KSB7 CisgIGZpbGVuYW1lID0gJyc7CisgIGlmKGlucHV0Lmxhc3RJbmRleE9mKCcu JykgIT0gLTEpIHsKKyAgICBmaWxlbmFtZSAgPSBjbGVhblN0cmluZyhpbnB1 dC5zdWJzdHIoMCwgaW5wdXQubGFzdEluZGV4T2YoJy4nKSkpOworICAgIGZp bGVuYW1lICs9ICcuJyArIGlucHV0LnNwbGl0KCcuJykucG9wKCk7CisgIH0g ZWxzZSB7CisgICAgZmlsZW5hbWUgPSBjbGVhblN0cmluZyhpbnB1dCk7Cisg IH0KKyAgcmV0dXJuIGZpbGVuYW1lOworfTsKKworLy9Db252ZXJ0cyBieXRl cyB0byBrYiwgbWIsIG9yIGdiIGFzIG5lZWRlZCBmb3IgZGlzcGxheS4KK3Zh ciBmb3JtYXRCeXRlcyA9IGZ1bmN0aW9uKGJ5dGVzKXsKKyAgdmFyIG4gPSBw YXJzZUZsb2F0KGJ5dGVzKTsKKyAgdmFyIGQgPSBwYXJzZUZsb2F0KDEwMjQp OworICB2YXIgYyA9IDA7CisgIHZhciB1ID0gW2xnLmJ5dGVzLGxnLmtiLGxn Lm1iLGxnLmdiXTsKKworICB3aGlsZSh0cnVlKXsKKyAgICBpZihuIDwgZCl7 CisgICAgICBuID0gTWF0aC5yb3VuZChuICogMTAwKSAvIDEwMDsKKyAgICAg IHJldHVybiBuICsgdVtjXTsKKyAgICB9IGVsc2UgeworICAgICAgbiAvPSBk OworICAgICAgYyArPSAxOworICAgIH0KKyAgfQorfTsKKworLyoKKyAqIEhh bmRsZSBFcnJvci4gRnJlZXplIGludGVyYWN0aXZlIGJ1dHRvbnMgYW5kIGRp c3BsYXkKKyAqIGVycm9yIG1lc3NhZ2UuIEFsc28gY2FsbGVkIHdoZW4gYXV0 aCgpIGZ1bmN0aW9uIHJldHVybiBmYWxzZSAoQ29kZSA9PSAiLTEiKQorICov Cit2YXIgaGFuZGxlRXJyb3IgPSBmdW5jdGlvbihlcnJNc2cpIHsKKyAgLy8k KCcuc3RvcmFnZV9kaWFsb2cgLmZpbGVpbmZvJykuaHRtbCgnPGgxPicgKyBl cnJNc2crICc8L2gxPicpOworICAkKCcuc3RvcmFnZV9kaWFsb2cgLm5ld2Zp bGUnKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAkKCcuc3Rv cmFnZV9kaWFsb2cgLnVwbG9hZCcpLmF0dHIoImRpc2FibGVkIiwgImRpc2Fi bGVkIik7CisgICQoJy5zdG9yYWdlX2RpYWxvZyAuY3JlYXRlJykuYXR0cigi ZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKK307CisKKy8qCisgKiBUZXN0IGlm IERhdGEgc3RydWN0dXJlIGhhcyB0aGUgJ2NhcCcgY2FwYWJpbGl0eQorICog J2NhcCcgaXMgb25lIG9mICdzZWxlY3QnLCAncmVuYW1lJywgJ2RlbGV0ZScs ICdkb3dubG9hZCcKKyAqLworZnVuY3Rpb24gaGFzX2NhcGFiaWxpdHkoZGF0 YSwgY2FwKSB7CisgIGlmICh0eXBlb2YoZGF0YVsnQ2FwYWJpbGl0aWVzJ10p ID09ICJ1bmRlZmluZWQiKSByZXR1cm4gdHJ1ZTsKKyAgZWxzZSByZXR1cm4g JC5pbkFycmF5KGNhcCwgZGF0YVsnQ2FwYWJpbGl0aWVzJ10pID4gLTE7Cit9 CisKKy8vIFRlc3QgaWYgZmlsZSBpcyBhdXRob3JpemVkCit2YXIgaXNBdXRo b3JpemVkRmlsZSA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7CisgIGlmKGNvbmZp Zy5zZWN1cml0eS51cGxvYWRQb2xpY3kgPT0gJ0RJU0FMTE9XX0FMTCcpIHsK KyAgICBpZigkLmluQXJyYXkoZ2V0RXh0ZW5zaW9uKGZpbGVuYW1lKSwgY29u ZmlnLnNlY3VyaXR5LnVwbG9hZFJlc3RyaWN0aW9ucykgIT0gLTEpIHJldHVy biB0cnVlOworICB9CisgIGlmKGNvbmZpZy5zZWN1cml0eS51cGxvYWRQb2xp Y3kgPT0gJ0FMTE9XX0FMTCcpIHsKKyAgICBpZigkLmluQXJyYXkoZ2V0RXh0 ZW5zaW9uKGZpbGVuYW1lKSwgY29uZmlnLnNlY3VyaXR5LnVwbG9hZFJlc3Ry aWN0aW9ucykgPT0gLTEpIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBm YWxzZTsKK307CisKKy8vIHJldHVybiBmaWxlbmFtZSBleHRlbnNpb24KK3Zh ciBnZXRFeHRlbnNpb24gPSBmdW5jdGlvbihmaWxlbmFtZSkgeworICBpZihm aWxlbmFtZS5zcGxpdCgnLicpLmxlbmd0aCA9PSAxKQorICAgIHJldHVybiAi IjsKKyAgcmV0dXJuIGZpbGVuYW1lLnNwbGl0KCcuJykucG9wKCk7Cit9Owor CisvLyByZXR1cm4gZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb24gewordmFy IGdldEZpbGVuYW1lID0gZnVuY3Rpb24oZmlsZW5hbWUpIHsKKyAgaWYoZmls ZW5hbWUubGFzdEluZGV4T2YoJy4nKSAhPSAtMSkKKyAgICByZXR1cm4gZmls ZW5hbWUuc3Vic3RyaW5nKDAsIGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykp OworICBlbHNlCisgICAgcmV0dXJuIGZpbGVuYW1lOworfTsKKworLyoKKyAq IFNldHMgdGhlIGZvbGRlciBzdGF0dXMsIHVwbG9hZCwgYW5kIG5ldyBmb2xk ZXIgZnVuY3Rpb25zCisgKiB0byB0aGUgcGF0aCBzcGVjaWZpZWQuIENhbGxl ZCBvbiBpbml0aWFsIHBhZ2UgbG9hZCBhbmQKKyAqIHdoZW5ldmVyIGEgbmV3 IGRpcmVjdG9yeSBpcyBzZWxlY3RlZC4KKyAqLwordmFyIHNldFVwbG9hZGVy ID0gZnVuY3Rpb24ocGF0aCl7CisKKyAgLy8gUmVtb3ZlIGFuY2hvciBhbmQg Ym9sZChiKSB0YWdzCisgICQoJy5zdG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIn KS5maW5kKCdhJykucmVtb3ZlKCk7CisgICQoJy5zdG9yYWdlX2RpYWxvZyAj dXBsb2FkZXInKS5maW5kKCdiJykucmVtb3ZlKCk7CisKKyAgcGF0aCA9IGRl Y29kZVVSSShwYXRoKTsKKyAgdmFyIGRpc3BsYXlfc3RyaW5nID0gZGlzcGxh eVBhdGgocGF0aCk7CisgIHZhciBteXBhdGggPSAnJzsKKworICAvLyBzcGxp dCBwYXRoCisgIHNwbGl0X3BhdGggPSBkaXNwbGF5X3N0cmluZy5zcGxpdCgn LycpOworICBzcGxpdF9wYXRoID0gc3BsaXRfcGF0aC5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIGU7fSk7CisKKyAgaWYgKHNwbGl0X3BhdGgubGVuZ3Ro ID09PSAwKQorICAgIG15cGF0aCA9ICQoJzxiPi88L2I+Jyk7CisgIGVsc2UK KyAgICBteXBhdGggPSAkKCc8YSBjbGFzcz0iYnJlYWRjcnVtYnMiIGhyZWY9 IiMiIGRhdGEtcGF0aD0iLyI+LzwvYT4nKTsKKyAgJChteXBhdGgpLmFwcGVu ZFRvKCQoJy5zdG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEnKSk7CisKKyAg Zm9yKHZhciBpIGluIHNwbGl0X3BhdGgpIHsKKyAgICBpZiAoaSA8IHNwbGl0 X3BhdGgubGVuZ3RoLTEpIHsKKyAgICAgIG15cGF0aCA9ICQoJzxhIGNsYXNz PSJicmVhZGNydW1icyIgaHJlZj0iIyIgZGF0YS1wYXRoPSInK2Rpc3BsYXlf c3RyaW5nLnJlcGxhY2Uoc3BsaXRfcGF0aFtpKzFdLCAnJykrJyI+JytzcGxp dF9wYXRoW2ldKycvPC9hPicpOworICAgICAgJChteXBhdGgpLmFwcGVuZFRv KCQoJy5zdG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEnKSk7CisgICB9Cisg ICBlbHNlIHsKKyAgICAgbXlwYXRoID0gJCgnPGI+JytzcGxpdF9wYXRoW2ld Kyc8L2I+Jyk7CisgICAgICQobXlwYXRoKS5hcHBlbmRUbygkKCcuc3RvcmFn ZV9kaWFsb2cgI3VwbG9hZGVyIGgxJykpOworICAgfQorICB9CisKKyAgJCgn LmN1cnJlbnRwYXRoJykudmFsKHBhdGgpOworICBpZigkKCcuc3RvcmFnZV9k aWFsb2cgI3VwbG9hZGVyIGgxIHNwYW4nKS5sZW5ndGggPT09IDApIHsKKyAg ICAkKCc8c3Bhbj4nK2xnLmN1cnJlbnRfZm9sZGVyKyc8L3NwYW4+JykuYXBw ZW5kVG8oJCgnLnN0b3JhZ2VfZGlhbG9nICN1cGxvYWRlciBoMScpKTsKKyAg fQorCisgICQoJy5zdG9yYWdlX2RpYWxvZyAjdXBsb2FkZXIgaDEnKS5hdHRy KCd0aXRsZScsIGRpc3BsYXlfc3RyaW5nKTsKKyAgJCgnLnN0b3JhZ2VfZGlh bG9nICN1cGxvYWRlciBoMScpLmF0dHIoJ2RhdGEtcGF0aCcsIGRpc3BsYXlf c3RyaW5nKTsKKworICAkKCcuY3JlYXRlJykudW5iaW5kKCkuY2xpY2soZnVu Y3Rpb24oKXsKKyAgICB2YXIgZm9sZGVybmFtZSA9ICBsZy5kZWZhdWx0X2Zv bGRlcm5hbWU7CisgICAgdmFyICRmaWxlX2VsZW1lbnQsCisgICAgICAgICRm aWxlX2VsZW1lbnRfbGlzdDsKKworICAgICQoJy5maWxlX21hbmFnZXIgYnV0 dG9uLmNyZWF0ZScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7Cisg ICAgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycpID09ICdncmlkJyl7 CisKKyAgICAgIHZhciBmb2xkZXJfZGl2ID0gIjxsaSBjbGFzcz0nY2FwX2Rv d25sb2FkY2FwX2RlbGV0ZWNhcF9zZWxlY3RfZmlsZWNhcF9zZWxlY3RfZm9s ZGVyY2FwX3JlbmFtZWNhcF9jcmVhdGVjYXBfdXBsb2FkJz4iKworICAgICAg ICAgICI8ZGl2IGNsYXNzPSdjbGlwJz48c3BhbiBkYXRhLWFsdD0nJyBjbGFz cz0nZmEgZmEtZm9sZGVyLW9wZW4gZm1fZm9sZGVyJz48L3NwYW4+PC9kaXY+ IisKKyAgICAgICAgICAiPHA+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdm bV9maWxlX3JlbmFtZSc+PHNwYW4gdGl0bGU9Jyc+TmV3X0ZvbGRlcjwvc3Bh bj48L3A+IisKKyAgICAgICAgICAiPHNwYW4gY2xhc3M9J21ldGEgc2l6ZSc+ PC9zcGFuPjxzcGFuIGNsYXNzPSdtZXRhIGNyZWF0ZWQnPjwvc3Bhbj48c3Bh biBjbGFzcz0nbWV0YSBtb2RpZmllZCc+PC9zcGFuPjwvbGk+IjsKKworICAg ICAgdmFyIHBhdGggPSAkKCcuY3VycmVudHBhdGgnKS52YWwoKSwKKyAgICAg ICAgICAkZmlsZV9lbGVtZW50ID0gICQoZm9sZGVyX2Rpdik7CisgICAgICAk KCcuZmlsZWluZm8gI2NvbnRlbnRzLmdyaWQnKS5hcHBlbmQoJGZpbGVfZWxl bWVudCk7CisgICAgICAkZmlsZV9lbGVtZW50LmZpbmQoJ3Agc3BhbicpLnRv Z2dsZSgpOworICAgICAgJGZpbGVfZWxlbWVudC5maW5kKCdwIGlucHV0Jyku dG9nZ2xlKCkudmFsKCdOZXcgRm9sZGVyJykuc2VsZWN0KCk7CisKKyAgICAg IC8vIFJlbmFtZSBmb2xkZXIvZmlsZSBvbiBwcmVzc2luZyBlbnRlciBrZXkK KyAgICAgICQoJy5maWxlX21hbmFnZXInKS5iaW5kKCkub24oJ2tleXVwJywg ZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7 CisgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAk ZmlsZV9lbGVtZW50LmZpbmQoJ3AgaW5wdXQnKS50cmlnZ2VyKCdibHVyJyk7 CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICAkZmlsZV9lbGVtZW50 LmZpbmQoJ3AgaW5wdXQnKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpIHsKKyAg ICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uY3JlYXRlJykucmVtb3Zl QXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAgdmFyIHRleHRfdmFsdWUgPSAk ZmlsZV9lbGVtZW50LmZpbmQoJ3AgaW5wdXQnKS52YWwoKSwKKyAgICAgICAg ICAgIHBhdGggPSAkKCcuY3VycmVudHBhdGgnKS52YWwoKTsKKyAgICAgICAg JGZpbGVfZWxlbWVudC5maW5kKCdwIGlucHV0JykudG9nZ2xlKCk7CisgICAg ICAgICRmaWxlX2VsZW1lbnQuZmluZCgncCBzcGFuJykudG9nZ2xlKCkuaHRt bCh0ZXh0X3ZhbHVlKTsKKyAgICAgICAgaWYodGV4dF92YWx1ZSA9PT0gdW5k ZWZpbmVkKSB0ZXh0X3ZhbHVlID0gJ05ldyBGb2xkZXInOworICAgICAgICBn ZXRGb2xkZXJOYW1lKHRleHRfdmFsdWUpOworICAgICAgICBnZXRGb2xkZXJJ bmZvKHBhdGgpOworICAgICAgfSk7CisKKyAgICB9CisgICAgZWxzZSBpZigk KCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2xpc3QnKXsKKworICAg ICAgdmFyIGZvbGRlcl9kaXYgPSAkKCI8dHIgY2xhc3M9J2NhcF9kb3dubG9h ZCBjYXBfZGVsZXRlIGNhcF9zZWxlY3RfZmlsZSBjYXBfc2VsZWN0X2ZvbGRl ciBjYXBfcmVuYW1lIGNhcF9jcmVhdGUgY2FwX3VwbG9hZCc+IisKKyAgICAg ICAgIjx0ZCB0aXRsZT0nJyBjbGFzcz0nZmEgZmEtZm9sZGVyLW9wZW4gdGJs X2ZvbGRlcic+IisKKyAgICAgICAgICAiPHA+PGlucHV0IHR5cGU9J3RleHQn IGNsYXNzPSdmbV9maWxlX3JlbmFtZSc+PHNwYW4+TmV3IEZvbGRlcjwvc3Bh bj48L3A+IisKKyAgICAgICAgICAiPC90ZD48dGQ+IisKKyAgICAgICAgICAi PGFiYnIgdGl0bGU9Jyc+PC9hYmJyPjwvdGQ+IisKKyAgICAgICAgICAiPHRk PjwvdGQ+IisKKyAgICAgICAgIjwvdHI+Iik7CisKKyAgICAgICRmaWxlX2Vs ZW1lbnRfbGlzdCA9ICAkKGZvbGRlcl9kaXYpOworICAgICAgJCgnLmZpbGVp bmZvICNjb250ZW50cy5saXN0JykucHJlcGVuZCgkZmlsZV9lbGVtZW50X2xp c3QpOworICAgICAgJGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3Agc3Bhbicp LnRvZ2dsZSgpOworICAgICAgJGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3Ag aW5wdXQnKS50b2dnbGUoKS52YWwoJ05ldyBGb2xkZXInKS5zZWxlY3QoKTsK KworICAgICAgLy8gUmVuYW1lIGZvbGRlci9maWxlIG9uIHByZXNzaW5nIGVu dGVyIGtleQorICAgICAgJCgnLmZpbGVfbWFuYWdlcicpLmJpbmQoKS5vbign a2V5dXAnLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlLmtleUNvZGUg PT0gMTMpIHsKKyAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAg ICAgICAgICRmaWxlX2VsZW1lbnRfbGlzdC5maW5kKCdwIGlucHV0JykudHJp Z2dlcignYmx1cicpOworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAg JGZpbGVfZWxlbWVudF9saXN0LmZpbmQoJ3AgaW5wdXQnKS5vbignYmx1cics IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0 b24uY3JlYXRlJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAg dmFyIHRleHRfdmFsdWUgPSAkZmlsZV9lbGVtZW50X2xpc3QuZmluZCgncCBp bnB1dCcpLnZhbCgpLAorICAgICAgICAgICAgcGF0aCA9ICQoJy5jdXJyZW50 cGF0aCcpLnZhbCgpOworICAgICAgICAkZmlsZV9lbGVtZW50X2xpc3QuZmlu ZCgncCBpbnB1dCcpLnRvZ2dsZSgpOworICAgICAgICAkZmlsZV9lbGVtZW50 X2xpc3QuZmluZCgncCBzcGFuJykudG9nZ2xlKCkuaHRtbCh0ZXh0X3ZhbHVl KTsKKyAgICAgICAgaWYodGV4dF92YWx1ZSA9PT0gdW5kZWZpbmVkKSB0ZXh0 X3ZhbHVlID0gJ05ldyBGb2xkZXInOworICAgICAgICBnZXRGb2xkZXJOYW1l KHRleHRfdmFsdWUpOworICAgICAgICBnZXRGb2xkZXJJbmZvKHBhdGgpOwor ICAgICAgfSk7CisgICAgfQorCisgICAgdmFyIGdldEZvbGRlck5hbWUgPSBm dW5jdGlvbih2YWx1ZSl7CisgICAgICB2YXIgZm5hbWUgPSB2YWx1ZTsKKwor ICAgICAgaWYoZm5hbWUgIT0gJycpeworICAgICAgICBmb2xkZXJuYW1lID0g Y2xlYW5TdHJpbmcoZm5hbWUpOworICAgICAgICB2YXIgZCA9IG5ldyBEYXRl KCk7IC8vIHRvIHByZXZlbnQgSUUgY2FjaGUgaXNzdWVzCisgICAgICAgICQu Z2V0SlNPTihmaWxlQ29ubmVjdG9yICsgJz9tb2RlPWFkZGZvbGRlciZwYXRo PScgKyAkKCcuY3VycmVudHBhdGgnKS52YWwoKSArICcmbmFtZT0nICsgZm9s ZGVybmFtZSArICcmdGltZT0nICsgZC5nZXRNaWxsaXNlY29uZHMoKSwgZnVu Y3Rpb24ocmVzcCl7CisgICAgICAgICAgcmVzdWx0ID0gcmVzcC5kYXRhLnJl c3VsdDsKKyAgICAgICAgICBpZihyZXN1bHRbJ0NvZGUnXSA9PT0gMCl7Cisg ICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGxnLnN1Y2Nlc3NmdWxfY3Jl YXRlKTsKKyAgICAgICAgICAgIGdldEZvbGRlckluZm8ocmVzdWx0WydQYXJl bnQnXSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsZXJ0 aWZ5LmVycm9yKHJlc3VsdFsnRXJyb3InXSk7CisgICAgICAgICAgfQorICAg ICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFsZXJ0aWZ5LmVy cm9yKGxnLm5vX2ZvbGRlcm5hbWUpOworICAgICAgfQorICAgIH07CisKKyAg fSk7Cit9OworCisvKgorICogQmluZHMgc3BlY2lmaWMgYWN0aW9ucyB0byB0 aGUgdG9vbGJhciBpbiBkZXRhaWwgdmlld3MuCisgKiBDYWxsZWQgd2hlbiBk ZXRhaWwgdmlld3MgYXJlIGxvYWRlZC4KKyAqLwordmFyIGJpbmRUb29sYmFy ID0gZnVuY3Rpb24oZGF0YSl7CisKKyAgaWYgKCFoYXNfY2FwYWJpbGl0eShk YXRhLCAndXBsb2FkJykpIHsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmlu ZCgnYnV0dG9uLnVwbG9hZCcpLmhpZGUoKTsKKyAgfQorCisgIGlmICghaGFz X2NhcGFiaWxpdHkoZGF0YSwgJ2NyZWF0ZScpKSB7CisgICAgJCgnLmZpbGVf bWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5jcmVhdGUnKS5oaWRlKCk7CisgIH0K KworICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEsICdkZWxldGUnKSkgewor ICAgICQoJy5maWxlX21hbmFnZXInKS5maW5kKCdidXR0b24uZGVsZXRlJyku aGlkZSgpOworICB9IGVsc2UgeworICAgICQoJy5maWxlX21hbmFnZXInKS5m aW5kKCdidXR0b24uZGVsZXRlJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAg ICQoJy5maWxlaW5mbyAuZGVsZXRlX2l0ZW0nKS5zaG93KCk7CisgICAgfSk7 CisKKyAgICAkKCcuZmlsZWluZm8gLmRlbGV0ZV9pdGVtIGJ1dHRvbi5idG5f eWVzJykudW5iaW5kKCkub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAg ICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQnKXsK KyAgICAgICAgdmFyIHBhdGggPSAkKCcuZmlsZWluZm8nKS5maW5kKCcjY29u dGVudHMgbGkuc2VsZWN0ZWQgLmNsaXAgc3BhbicpLmF0dHIoJ2RhdGEtYWx0 Jyk7CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PSBwYXRo Lmxlbmd0aCAtIDEpeworICAgICAgICAgIGRhdGFbJ1BhdGgnXSA9IHBhdGg7 CisgICAgICAgICAgZGVsZXRlSXRlbShkYXRhKTsKKyAgICAgICAgfQorICAg ICAgICBlbHNlIHsKKyAgICAgICAgICBkZWxldGVJdGVtKGRhdGEpOworICAg ICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdmFyIHBh dGggPSAkKCcuZmlsZWluZm8nKS5maW5kKCd0YWJsZSNjb250ZW50cyB0Ym9k eSB0ci5zZWxlY3RlZCB0ZDpmaXJzdC1jaGlsZCcpLmF0dHIoJ3RpdGxlJyk7 CisgICAgICAgIGlmKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PSBwYXRoLmxl bmd0aCAtIDEpeworICAgICAgICAgIGRhdGFbJ1BhdGgnXSA9IHBhdGg7Cisg ICAgICAgICAgZGVsZXRlSXRlbShkYXRhKTsKKyAgICAgICAgfQorICAgICAg ICBlbHNlIHsKKyAgICAgICAgICBkZWxldGVJdGVtKGRhdGEpOworICAgICAg ICB9CisgICAgICB9CisgICAgfSk7CisKKyAgfQorCisgIC8vIERvd25sb2Fk IGZpbGUgb24gY2xpY2sgb24gZG93bmxvYWQgYnV0dG9uIGFkb3dubG9hZAor ICBpZiAoIWhhc19jYXBhYmlsaXR5KGRhdGEsICdkb3dubG9hZCcpKSB7Cisg ICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5kb3dubG9hZCcp LmhpZGUoKTsKKyAgfSBlbHNlIHsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJyku ZmluZCgnYnV0dG9uLmRvd25sb2FkJykudW5iaW5kKCkuY2xpY2soZnVuY3Rp b24oKXsKKyAgICAgIGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9 PSAnZ3JpZCcpeworICAgICAgICB2YXIgcGF0aCA9ICQoJy5maWxlaW5mbyBs aS5zZWxlY3RlZCcpLmZpbmQoJy5jbGlwIHNwYW4nKS5hdHRyKCdkYXRhLWFs dCcpOworICAgICAgICB3aW5kb3cub3BlbihmaWxlQ29ubmVjdG9yICsgJz9t b2RlPWRvd25sb2FkJnBhdGg9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXRo KSwgJ19ibGFuaycpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAg IHZhciBwYXRoID0gJCgnLmZpbGVpbmZvJykuZmluZCgndGFibGUjY29udGVu dHMgdGJvZHkgdHIuc2VsZWN0ZWQgdGQ6Zmlyc3QtY2hpbGQnKS5hdHRyKCd0 aXRsZScpOworICAgICAgICB3aW5kb3cub3BlbihmaWxlQ29ubmVjdG9yICsg Jz9tb2RlPWRvd25sb2FkJnBhdGg9JyArIGVuY29kZVVSSUNvbXBvbmVudChw YXRoKSwgJ19ibGFuaycpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAg aWYgKCFoYXNfY2FwYWJpbGl0eShkYXRhLCAncmVuYW1lJykpIHsKKyAgICAk KCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLnJlbmFtZScpLmhpZGUo KTsKKyAgfQorfTsKKwordmFyIGVuYWJsZV9kaXNhYmxlX2J0biA9IGZ1bmN0 aW9uKCkgeworICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0g J2dyaWQnKXsKKyAgICB2YXIgJGdyaWRfZmlsZSA9ICQoJy5maWxlX21hbmFn ZXInKS5maW5kKCcjY29udGVudHMgbGkuc2VsZWN0ZWQnKTsKKyAgICAkZ3Jp ZF9maWxlLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworICAgICQoJy5maWxl X21hbmFnZXInKS5maW5kKCdidXR0b24uZGVsZXRlJykucHJvcCgnZGlzYWJs ZWQnLCB0cnVlKTsKKyAgICAkKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0 dG9uLmRvd25sb2FkJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAk KCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLnJlbmFtZScpLnByb3Ao J2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgaWYgKCRncmlkX2ZpbGUubGVuZ3Ro ID4gMCkgeworICAgICAgJCgnLmNyZWF0ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0 ZXh0Il0nKS52YWwoJycpOworICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycp LmFkZENsYXNzKCdkaXNhYmxlZCcpOworICAgIH0KKyAgfSBlbHNlIHsKKyAg ICB2YXIgJGxpc3RfZmlsZSA9ICQoJy5maWxlaW5mbycpLmZpbmQoJ3RhYmxl I2NvbnRlbnRzIHRib2R5IHRyLnNlbGVjdGVkJyk7CisgICAgJGxpc3RfZmls ZS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAkKCcuZmlsZV9tYW5h Z2VyJykuZmluZCgnYnV0dG9uLmRlbGV0ZScpLnByb3AoJ2Rpc2FibGVkJywg dHJ1ZSk7CisgICAgJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5k b3dubG9hZCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgJCgnLmZp bGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5yZW5hbWUnKS5wcm9wKCdkaXNh YmxlZCcsIHRydWUpOworICAgIGlmICgkbGlzdF9maWxlLmxlbmd0aCA+IDAp IHsKKyAgICAgICQoJy5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJd JykudmFsKCcnKTsKKyAgICAgICQoJy5maWxlX21hbmFnZXJfb2snKS5hZGRD bGFzcygnZGlzYWJsZWQnKTsKKyAgICB9CisgIH0KKworICAkKCcuZGVsZXRl X2l0ZW0nKS5oaWRlKCk7CisgIC8vIGNsZWFyIGFkZHJlc3MgYmFyCisgICQo Jy5maWxlX21hbmFnZXIgI3VwbG9hZGVyIGgxJykuc2hvdygpOworICAkKCcu ZmlsZV9tYW5hZ2VyICN1cGxvYWRlciAuc2hvd19zZWxlY3RlZF9maWxlJyku cmVtb3ZlKCk7Cit9OworCiskKCcuZmlsZV9tYW5hZ2VyIC5maWxlaW5mbycp Lm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKKyAgZW5hYmxlX2Rpc2FibGVf YnRuKCk7Cit9KTsKKworCiskKCcuZmlsZV9tYW5hZ2VyIC5yZWZyZXNoJyku b24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgeworICBlbmFibGVfZGlzYWJsZV9i dG4oKTsKKyAgdmFyIGN1cnJfcGF0aCA9ICQoJy5jdXJyZW50cGF0aCcpLnZh bCgpOworICBwYXRoID0gY3Vycl9wYXRoLnN1YnN0cmluZygwLCBjdXJyX3Bh dGgubGFzdEluZGV4T2YoIi8iKSkgKyAiLyI7CisgIGdldEZvbGRlckluZm8o cGF0aCk7Cit9KTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEl0ZW0gQWN0aW9ucwor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFJlbmFtZSB0aGUgY3VycmVudCBp dGVtIGFuZCByZXR1cm5zIHRoZSBuZXcgbmFtZS4KKyAqIGJ5IGRvdWJsZSBj bGlja2luZyBvciBieSBjbGlja2luZyB0aGUgIlJlbmFtZSIgYnV0dG9uIGlu CisgKiBsaXN0IHZpZXdzLgorICovCit2YXIgcmVuYW1lSXRlbSA9IGZ1bmN0 aW9uKGRhdGEpeworICB2YXIgb3JpZ19uYW1lID0gZ2V0RmlsZW5hbWUoZGF0 YVsnRmlsZW5hbWUnXSksCisgICAgICBmaW5hbE5hbWUgPSAnJzsKKworICB2 YXIgZ2V0TmV3TmFtZSA9IGZ1bmN0aW9uKHJuYW1lKXsKKyAgICBpZihybmFt ZSAhPT0gJycpeworICAgICAgdmFyIGdpdmVuTmFtZSA9IG5hbWVGb3JtYXQo cm5hbWUpLAorICAgICAgICAgIHN1ZmZpeCA9IGdldEV4dGVuc2lvbihkYXRh WydGaWxlbmFtZSddKTsKKyAgICAgIGlmKHN1ZmZpeC5sZW5ndGggPiAwKSB7 CisgICAgICAgIGdpdmVuTmFtZSA9IGdpdmVuTmFtZSArICcuJyArIHN1ZmZp eDsKKyAgICAgIH0KKworICAgICAgdmFyIG9sZFBhdGggPSBkYXRhWydQYXRo J10sCisgICAgICAgICAgcG9zdF9kYXRhID0geworICAgICAgICAibW9kZSI6 ICJyZW5hbWUiLAorICAgICAgICAib2xkIjogZGF0YVsnUGF0aCddLAorICAg ICAgICAibmV3IjogZ2l2ZW5OYW1lLAorICAgICAgfTsKKworICAgICAgJC5h amF4KHsKKyAgICAgICAgdHlwZTogJ1BPU1QnLAorICAgICAgICBkYXRhOiBK U09OLnN0cmluZ2lmeShwb3N0X2RhdGEpLAorICAgICAgICB1cmw6IGZpbGVD b25uZWN0b3IsCisgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCisgICAgICAg IGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYt OCIsCisgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzcCl7CisgICAgICAgICAgcmVzdWx0ID0gcmVzcC5kYXRh LnJlc3VsdDsKKyAgICAgICAgICBpZihyZXN1bHRbJ0NvZGUnXSA9PT0gMCl7 CisgICAgICAgICAgICB2YXIgbmV3UGF0aCA9IHJlc3VsdFsnTmV3IFBhdGgn XSwKKyAgICAgICAgICAgICAgICBuZXdOYW1lID0gcmVzdWx0WydOZXcgTmFt ZSddLAorICAgICAgICAgICAgICAgIHRpdGxlID0gJCgiI3ByZXZpZXcgaDEi KS5hdHRyKCJ0aXRsZSIpOworCisgICAgICAgICAgICBpZiAodHlwZW9mIHRp dGxlICE9InVuZGVmaW5lZCIgJiYgdGl0bGUgPT0gb2xkUGF0aCkKKyAgICAg ICAgICAgICAgJCgnI3ByZXZpZXcgaDEnKS50ZXh0KG5ld05hbWUpOworCisg ICAgICAgICAgICBpZigkKCcuZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0g J2dyaWQnKXsKKyAgICAgICAgICAgICAgJCgnLmZpbGVpbmZvIHNwYW5bZGF0 YS1hbHQ9IicgKyBvbGRQYXRoICsgJyJdJykucGFyZW50KCkubmV4dCgncCBz cGFuJykudGV4dChuZXdOYW1lKTsKKyAgICAgICAgICAgICAgJCgnLmZpbGVp bmZvIHNwYW5bZGF0YS1hbHQ9IicgKyBvbGRQYXRoICsgJyJdJykuYXR0cign ZGF0YS1hbHQnLCBuZXdQYXRoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICQoJy5maWxlaW5mbyB0ZFt0aXRsZT0iJyArIG9sZFBh dGggKyAnIl0nKS50ZXh0KG5ld05hbWUpOworICAgICAgICAgICAgICAkKCcu ZmlsZWluZm8gdGRbdGl0bGU9IicgKyBvbGRQYXRoICsgJyJdJykuYXR0cign dGl0bGUnLCBuZXdQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICQoIiNwcmV2aWV3IGgxIikuaHRtbChuZXdOYW1lKTsKKworICAgICAgICAg ICAgLy8gYWN0dWFsaXplZCBkYXRhIGZvciBiaW5kaW5nCisgICAgICAgICAg ICBkYXRhWydQYXRoJ109bmV3UGF0aDsKKyAgICAgICAgICAgIGRhdGFbJ0Zp bGVuYW1lJ109bmV3TmFtZTsKKworICAgICAgICAgICAgLy8gVW5CaW5kIHRv b2xiYXIgZnVuY3Rpb25zLgorICAgICAgICAgICAgJCgnLmZpbGVpbmZvJyku ZmluZCgnYnV0dG9uLnJlbmFtZSwgYnV0dG9uLmRlbGV0ZSwgYnV0dG9uLmRv d25sb2FkJykudW5iaW5kKCk7CisKKyAgICAgICAgICAgIGFsZXJ0aWZ5LnN1 Y2Nlc3MobGcuc3VjY2Vzc2Z1bF9yZW5hbWUpOworICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKHJlc3VsdFsnRXJy b3InXSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZmluYWxOYW1lID0g cmVzdWx0WydOZXcgTmFtZSddOworICAgICAgICB9CisgICAgICB9KTsKKyAg ICB9CisgIH07CisKKyAgZ2V0TmV3TmFtZShkYXRhWydOZXdGaWxlbmFtZSdd KTsKKyAgcmV0dXJuIGZpbmFsTmFtZTsKK307CisKKy8qCisgKiBQcm9tcHRz IGZvciBjb25maXJtYXRpb24sIHRoZW4gZGVsZXRlcyB0aGUgZm9sZGVyIHdp dGggc3ViIGZvbGRlcgorICogb3IgZmlsZXMgYnkgY2xpY2tpbmcgdGhlICJE ZWxldGUiIGJ1dHRvbiBpbiBsaXN0IHZpZXcKKyAqLwordmFyIGRlbGV0ZUl0 ZW0gPSBmdW5jdGlvbihkYXRhKXsKKyAgdmFyIGlzRGVsZXRlZCA9IGZhbHNl LAorICAgICAgbXNnID0gbGcuY29uZmlybWF0aW9uX2RlbGV0ZTsKKworICB2 YXIgZG9EZWxldGUgPSBmdW5jdGlvbihkYXRhKXsKKyAgICB2YXIgcGFyZW50 ID0gZGF0YVsnUGF0aCddLnNwbGl0KCcvJykucmV2ZXJzZSgpLnNsaWNlKDEp LnJldmVyc2UoKS5qb2luKCcvJykgKyAnLyc7CisgICAgdmFyIHBvc3RfZGF0 YSA9IHsKKyAgICAgICJtb2RlIjogImRlbGV0ZSIsCisgICAgICAicGF0aCI6 IGRhdGFbJ1BhdGgnXQorICAgIH07CisKKyAgICAkLmFqYXgoeworICAgICAg dHlwZTogJ1BPU1QnLAorICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocG9z dF9kYXRhKSwKKyAgICAgIHVybDogZmlsZUNvbm5lY3RvciwKKyAgICAgIGRh dGFUeXBlOiAnanNvbicsCisgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0 aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLAorICAgICAgYXN5bmM6IGZhbHNl LAorICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcCl7CisgICAgICAgIHJl c3VsdCA9IHJlc3AuZGF0YS5yZXN1bHQ7CisgICAgICAgIGlmKHJlc3VsdFsn Q29kZSddID09PSAwKXsKKyAgICAgICAgICBpc0RlbGV0ZWQgPSB0cnVlOwor ICAgICAgICAgIGlmKGlzRGVsZXRlZCkgeworICAgICAgICAgICAgYWxlcnRp Znkuc3VjY2VzcyhsZy5zdWNjZXNzZnVsX2RlbGV0ZSk7CisgICAgICAgICAg ICB2YXIgcm9vdHBhdGggPSByZXN1bHRbJ1BhdGgnXS5zdWJzdHJpbmcoMCwg cmVzdWx0WydQYXRoJ10ubGVuZ3RoLTEpOyAvLyByZW1vdmluZyB0aGUgbGFz dCBzbGFzaAorICAgICAgICAgICAgICAgIHJvb3RwYXRoID0gcm9vdHBhdGgu c3Vic3RyKDAsIHJvb3RwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKKyAg ICAgICAgICAgIGdldEZvbGRlckluZm8ocm9vdHBhdGgpOworICAgICAgICAg IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpc0RlbGV0ZWQgPSBm YWxzZTsKKyAgICAgICAgICBhbGVydGlmeS5lcnJvcihyZXN1bHRbJ0Vycm9y J10pOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJu IGlzRGVsZXRlZDsKKyAgfTsKKworICBkb0RlbGV0ZShkYXRhKTsKKyAgcmV0 dXJuIGlzRGVsZXRlZDsKK307CisKKworJCgnLmRlbGV0ZV9pdGVtIGJ1dHRv bi5idG5fbm8nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgJCgnLmRl bGV0ZV9pdGVtJykuaGlkZSgpOworfSk7CisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBG dW5jdGlvbnMgdG8gUmV0cmlldmUgRmlsZSBhbmQgRm9sZGVyIERldGFpbHMK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCisKKy8qIERlY2lkZXMgd2hldGhlciB0byByZXRy aWV2ZSBmaWxlIG9yIGZvbGRlciBpbmZvIGJhc2VkIG9uCisgKiB0aGUgcGF0 aCBwcm92aWRlZC4KKyAqLwordmFyIGdldERldGFpbFZpZXcgPSBmdW5jdGlv bihwYXRoKXsKKyAgaWYocGF0aC5sYXN0SW5kZXhPZignLycpID09IHBhdGgu bGVuZ3RoIC0gMSl7CisgICAgZ2V0Rm9sZGVySW5mbyhwYXRoKTsKKyAgfSBl bHNlIHsKKyAgICAvL2dldEZpbGVJbmZvKHBhdGgpOworICB9Cit9OworCisv KgorICogUmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZp ZWQgZmlsZSBhcyBhIEpTT04KKyAqIG9iamVjdCBhbmQgdXNlcyB0aGF0IGRh dGEgdG8gcG9wdWxhdGUgYSB0ZW1wbGF0ZSBmb3IKKyAqIGxpc3Qgdmlld3Mu IEJpbmRzIHRoZSB0b29sYmFyIGZvciB0aGF0IGZpbGUvZm9sZGVyIHRvCisg KiBlbmFibGUgc3BlY2lmaWMgYWN0aW9ucy4gQ2FsbGVkIHdoZW5ldmVyIGFu IGl0ZW0gaXMKKyAqIGNsaWNrZWQgaW4gbGlzdCB2aWV3cy4KKyAqLwordmFy IGdldEZpbGVJbmZvID0gZnVuY3Rpb24oZmlsZSl7CisgIC8vIFVwZGF0ZSBs b2NhdGlvbiBmb3Igc3RhdHVzLCB1cGxvYWQsICYgbmV3IGZvbGRlciBmdW5j dGlvbnMuCisgIHZhciBjdXJyZW50cGF0aCA9IGZpbGUuc3Vic3RyKDAsIGZp bGUubGFzdEluZGV4T2YoJy8nKSArIDEpOworICBzZXRVcGxvYWRlcihjdXJy ZW50cGF0aCk7CisKKyAgLy8gUmV0cmlldmUgdGhlIGRhdGEgJiBwb3B1bGF0 ZSB0aGUgdGVtcGxhdGUuCisgIHZhciBkID0gbmV3IERhdGUoKTsgLy8gdG8g cHJldmVudCBJRSBjYWNoZSBpc3N1ZXMKKyAgdmFyIHBvc3RfZGF0YSA9IHsK KyAgICAncGF0aCc6IGZpbGUsCisgICAgJ21vZGUnOiAnZ2V0aW5mbycKKyAg fTsKKworICAkLmFqYXgoeworICAgIHR5cGU6ICdQT1NUJywKKyAgICBkYXRh OiBKU09OLnN0cmluZ2lmeShwb3N0X2RhdGEpLAorICAgIHVybDogZmlsZUNv bm5lY3RvciwKKyAgICBkYXRhVHlwZTogJ2pzb24nLAorICAgIGNvbnRlbnRU eXBlOiAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsCisgICAg YXN5bmM6IGZhbHNlLAorICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3Apewor ICAgICAgZGF0YSA9IHJlc3AuZGF0YS5yZXN1bHQ7CisgICAgICBpZihkYXRh WydDb2RlJ10gPT09IDApeworICAgICAgICB2YXIgcHJvcGVydGllcyA9ICcn OworICAgICAgICBpZihkYXRhWydQcm9wZXJ0aWVzJ11bJ1dpZHRoJ10gJiYg ZGF0YVsnUHJvcGVydGllcyddWydXaWR0aCddICE9ICcnKSBwcm9wZXJ0aWVz ICs9ICc8ZHQ+JyArIGxnLmRpbWVuc2lvbnMgKyAnPC9kdD48ZGQ+JyArIGRh dGFbJ1Byb3BlcnRpZXMnXVsnV2lkdGgnXSArICd4JyArIGRhdGFbJ1Byb3Bl cnRpZXMnXVsnSGVpZ2h0J10gKyAnPC9kZD4nOworICAgICAgICBpZihkYXRh WydQcm9wZXJ0aWVzJ11bJ0RhdGUgQ3JlYXRlZCddICYmIGRhdGFbJ1Byb3Bl cnRpZXMnXVsnRGF0ZSBDcmVhdGVkJ10gIT0gJycpIHByb3BlcnRpZXMgKz0g JzxkdD4nICsgbGcuY3JlYXRlZCArICc8L2R0PjxkZD4nICsgZGF0YVsnUHJv cGVydGllcyddWydEYXRlIENyZWF0ZWQnXSArICc8L2RkPic7CisgICAgICAg IGlmKGRhdGFbJ1Byb3BlcnRpZXMnXVsnRGF0ZSBNb2RpZmllZCddICYmIGRh dGFbJ1Byb3BlcnRpZXMnXVsnRGF0ZSBNb2RpZmllZCddICE9ICcnKSBwcm9w ZXJ0aWVzICs9ICc8ZHQ+JyArIGxnLm1vZGlmaWVkICsgJzwvZHQ+PGRkPicg KyBkYXRhWydQcm9wZXJ0aWVzJ11bJ0RhdGUgTW9kaWZpZWQnXSArICc8L2Rk Pic7CisgICAgICAgIGlmKGRhdGFbJ1Byb3BlcnRpZXMnXVsnU2l6ZSddIHx8 IHBhcnNlSW50KGRhdGFbJ1Byb3BlcnRpZXMnXVsnU2l6ZSddKT09MCkgcHJv cGVydGllcyArPSAnPGR0PicgKyBsZy5zaXplICsgJzwvZHQ+PGRkPicgKyBm b3JtYXRCeXRlcyhkYXRhWydQcm9wZXJ0aWVzJ11bJ1NpemUnXSkgKyAnPC9k ZD4nOworICAgICAgICBkYXRhWydDYXBhYmlsaXRpZXMnXSA9IGNhcGFiaWxp dGllczsKKyAgICAgICAgYmluZFRvb2xiYXIoZGF0YSk7CisgICAgICB9IGVs c2UgeworICAgICAgICBhbGVydGlmeS5lcnJvcihkYXRhWydFcnJvciddKTsK KyAgICAgIH0KKyAgICB9CisgIH0pOworfTsKKworLyoKKyAqIFJldHJpZXZl cyBkYXRhIGZvciBhbGwgaXRlbXMgd2l0aGluIHRoZSBnaXZlbiBmb2xkZXIg YW5kCisgKiBjcmVhdGVzIGEgbGlzdCB2aWV3LgorICovCit2YXIgZ2V0Rm9s ZGVySW5mbyA9IGZ1bmN0aW9uKHBhdGgsIGZpbGVfdHlwZT0nJyl7CisgIC8v IFVwZGF0ZSBsb2NhdGlvbiBmb3Igc3RhdHVzLCB1cGxvYWQsICYgbmV3IGZv bGRlciBmdW5jdGlvbnMuCisgIHNldFVwbG9hZGVyKHBhdGgpOworCisgIC8v IEJyZWFkQ3J1bWIgY2xpY2sgZXZlbnQKKyAgJCgnLmZpbGVfbWFuYWdlciBh LmJyZWFkY3J1bWJzJykudW5iaW5kKCkub24oJ2NsaWNrJywgZnVuY3Rpb24o KSB7CisgICAgdmFyIHBhdGggPSAkKHRoaXMpLmF0dHIoJ2RhdGEtcGF0aCcp LAorICAgICAgICBjdXJyZW50X2RpciA9ICQodGhpcykuaHRtbCgpLAorICAg ICAgICBtb3ZlX3RvID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5k ZXhPZihjdXJyZW50X2RpcikpK2N1cnJlbnRfZGlyOworICAgIGdldEZvbGRl ckluZm8obW92ZV90byk7CisgICAgZW5hYl9kaXNfbGV2ZWxfdXAoKTsKKyAg fSk7CisKKyAgLy8gRGlzcGxheSBhbiBhY3Rpdml0eSBpbmRpY2F0b3IuCisg ICQoJy5maWxlaW5mbycpLmZpbmQoJ2ltZyNhY3Rpdml0eScpLnJlbW92ZSgp LmFwcGVuZCgnPGltZyBpZD0iYWN0aXZpdHkiIHNyYz0iLi4vZmlsZV9tYW5h Z2VyL3N0YXRpYy9pbWcvd2FpdDMwdHJhbnMuZ2lmIiB3aWR0aD0iMzAiIGhl aWdodD0iMzAiIC8+Jyk7CisgIC8vIFJldHJpZXZlIHRoZSBkYXRhIGFuZCBn ZW5lcmF0ZSB0aGUgbWFya3VwLgorICB2YXIgZCA9IG5ldyBEYXRlKCk7IC8v IHRvIHByZXZlbnQgSUUgY2FjaGUgaXNzdWVzCisgIGlmICgkLnVybFBhcmFt KCd0eXBlJykpIHVybCArPSAnJnR5cGU9JyArICQudXJsUGFyYW0oJ3R5cGUn KTsKKworICB2YXIgcG9zdF9kYXRhID0geworICAgICdwYXRoJzogcGF0aCwK KyAgICAnbW9kZSc6ICdnZXRmb2xkZXInLAorICAgICdmaWxlX3R5cGUnOiBm aWxlX3R5cGUgfHwgIioiCisgIH07CisKKyAgJC5hamF4KHsKKyAgICB0eXBl OiAnUE9TVCcsCisgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocG9zdF9kYXRh KSwKKyAgICB1cmw6IGZpbGVDb25uZWN0b3IsCisgICAgZGF0YVR5cGU6ICdq c29uJywKKyAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb247IGNo YXJzZXQ9dXRmLTgiLAorICAgIGFzeW5jOiBmYWxzZSwKKyAgICBzdWNjZXNz OiBmdW5jdGlvbihyZXNwKXsKKyAgICB2YXIgcmVzdWx0ID0gJyc7CisgICAg ZGF0YSA9IHJlc3AuZGF0YS5yZXN1bHQ7CisgICAgLy8gSXMgdGhlcmUgYW55 IGVycm9yIG9yIHVzZXIgaXMgdW5hdXRob3JpemVkPworICAgIGlmKGRhdGEu Q29kZSA9PSAwKSB7CisgICAgICBhbGVydGlmeS5lcnJvcihkYXRhLmVycl9t c2cpOworICAgICAgcmV0dXJuOworICAgIH07CisKKyAgICBpZihkYXRhKXsK KyAgICAgIGlmKCQoJy5maWxlaW5mbycpLmRhdGEoJ3ZpZXcnKSA9PSAnZ3Jp ZCcpeworICAgICAgICByZXN1bHQgKz0gJzx1bCBpZD0iY29udGVudHMiIGNs YXNzPSJncmlkIj4nOworICAgICAgICBmb3Ioa2V5IGluIGRhdGEpeworICAg ICAgICAgIHZhciBwcm9wcyA9IGRhdGFba2V5XVsnUHJvcGVydGllcyddLAor ICAgICAgICAgICAgICBjYXBfY2xhc3NlcyA9ICIiOworICAgICAgICAgIGZv ciAoY2FwIGluIGNhcGFiaWxpdGllcykgeworICAgICAgICAgICAgaWYgKGhh c19jYXBhYmlsaXR5KGRhdGFba2V5XSwgY2FwYWJpbGl0aWVzW2NhcF0pKSB7 CisgICAgICAgICAgICAgIGNhcF9jbGFzc2VzICs9ICJjYXBfIiArIGNhcGFi aWxpdGllc1tjYXBdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKwor ICAgICAgICAgIHZhciBzY2FsZWRXaWR0aCA9IDY0LAorICAgICAgICAgICAg ICBhY3R1YWxXaWR0aCA9IHByb3BzWydXaWR0aCddOworICAgICAgICAgIGlm KGFjdHVhbFdpZHRoID4gMSAmJiBhY3R1YWxXaWR0aCA8IHNjYWxlZFdpZHRo KSBzY2FsZWRXaWR0aCA9IGFjdHVhbFdpZHRoOworCisgICAgICAgICAgZGF0 YVtrZXldWydDYXBhYmlsaXRpZXMnXSA9IGNhcGFiaWxpdGllczsKKyAgICAg ICAgICBiaW5kVG9vbGJhcihkYXRhW2tleV0pOworCisgICAgICAgICAgdmFy IGNsYXNzX3R5cGUgPSAoZGF0YVtrZXldWydmaWxlX3R5cGUnXSA9PSAnZGly JyA/ICdmYSBmYS1mb2xkZXItb3BlbiBmbV9mb2xkZXInIDogJ2ZhIGZhLWZp bGUtdGV4dCBmbV9maWxlJykKKyAgICAgICAgICAgICAgZm1fZmlsZW5hbWUg PSBkYXRhW2tleV1bJ0ZpbGVuYW1lJ107CisgICAgICAgICAgaWYgKGZtX2Zp bGVuYW1lLmxlbmd0aCA+IDE1ICkgeworICAgICAgICAgICAgICBmbV9maWxl bmFtZSA9IGRhdGFba2V5XVsnRmlsZW5hbWUnXS5zdWJzdHIoMCwgMTApICsn Li4uJzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB2YXIgZmlsZV9uYW1l X29yaWdpbmFsID0gZW5jb2RlVVJJKGRhdGFba2V5XVsnRmlsZW5hbWUnXSk7 CisgICAgICAgICAgdmFyIGZpbGVfcGF0aF9vcmlnID0gZW5jb2RlVVJJKGRh dGFba2V5XVsnUGF0aCddKTsKKyAgICAgICAgICByZXN1bHQgKz0gJzxsaSBj bGFzcz0iJyArIGNhcF9jbGFzc2VzICsgJyI+PGRpdiBjbGFzcz0iY2xpcCI+ PHNwYW4gZGF0YS1hbHQ9IicgKyBmaWxlX3BhdGhfb3JpZyArICciIGNsYXNz PSInICsgY2xhc3NfdHlwZSArICciPjwvc3Bhbj4nOworICAgICAgICAgIGlm IChkYXRhW2tleV1bJ1Byb3RlY3RlZCddID09IDEpIHsKKyAgICAgICAgICAg IHJlc3VsdCArPSAnPHNwYW4gY2xhc3M9ImZhIGZhLWxvY2sgZm1fbG9ja19p Y29uIiBkYXRhLXByb3RlY3RlZD0icHJvdGVjdGVkIj48L3NwYW4+JzsKKyAg ICAgICAgICB9CisgICAgICAgICAgcmVzdWx0ICs9ICc8L2Rpdj4nOworICAg ICAgICAgIGlmKCFoYXNfY2FwYWJpbGl0eShkYXRhW2tleV0sICdyZW5hbWUn KSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHNwYW4+JyArIGZtX2ZpbGVu YW1lICsgJzwvc3Bhbj4nOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg IHJlc3VsdCArPSAnPHA+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmbV9m aWxlX3JlbmFtZSIgLz48c3BhbiB0aXRsZT0iJytmaWxlX25hbWVfb3JpZ2lu YWwrJyI+JyArIGZtX2ZpbGVuYW1lICsgJzwvc3Bhbj48L3A+JzsKKyAgICAg ICAgICBpZihwcm9wc1snV2lkdGgnXSAmJiBwcm9wc1snV2lkdGgnXSAhPSAn JykgcmVzdWx0ICs9ICc8c3BhbiBjbGFzcz0ibWV0YSBkaW1lbnNpb25zIj4n ICsgcHJvcHNbJ1dpZHRoJ10gKyAneCcgKyBwcm9wc1snSGVpZ2h0J10gKyAn PC9zcGFuPic7CisgICAgICAgICAgaWYocHJvcHNbJ1NpemUnXSAmJiBwcm9w c1snU2l6ZSddICE9ICcnKSByZXN1bHQgKz0gJzxzcGFuIGNsYXNzPSJtZXRh IHNpemUiPicgKyBwcm9wc1snU2l6ZSddICsgJzwvc3Bhbj4nOworICAgICAg ICAgIGlmKHByb3BzWydEYXRlIENyZWF0ZWQnXSAmJiBwcm9wc1snRGF0ZSBD cmVhdGVkJ10gIT0gJycpIHJlc3VsdCArPSAnPHNwYW4gY2xhc3M9Im1ldGEg Y3JlYXRlZCI+JyArIHByb3BzWydEYXRlIENyZWF0ZWQnXSArICc8L3NwYW4+ JzsKKyAgICAgICAgICBpZihwcm9wc1snRGF0ZSBNb2RpZmllZCddICYmIHBy b3BzWydEYXRlIE1vZGlmaWVkJ10gIT0gJycpIHJlc3VsdCArPSAnPHNwYW4g Y2xhc3M9Im1ldGEgbW9kaWZpZWQiPicgKyBwcm9wc1snRGF0ZSBNb2RpZmll ZCddICsgJzwvc3Bhbj4nOworICAgICAgICAgIHJlc3VsdCArPSAnPC9saT4n OworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ICs9ICc8L3VsPic7Cisg ICAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQgKz0gJzx0YWJsZSBpZD0i Y29udGVudHMiIGNsYXNzPSJsaXN0Ij4nOworICAgICAgICByZXN1bHQgKz0g Jzx0aGVhZD48dHI+PHRoIGNsYXNzPSJoZWFkZXJTb3J0RG93biI+PHNwYW4+ JyArIGxnLm5hbWUgKyAnPC9zcGFuPjwvdGg+PHRoPjxzcGFuPicgKyBsZy5z aXplICsgJzwvc3Bhbj48L3RoPjx0aD48c3Bhbj4nICsgbGcubW9kaWZpZWQg KyAnPC9zcGFuPjwvdGg+PC90cj48L3RoZWFkPic7CisgICAgICAgIHJlc3Vs dCArPSAnPHRib2R5Pic7CisKKyAgICAgICAgZm9yKGtleSBpbiBkYXRhKXsK KyAgICAgICAgICB2YXIgcGF0aCA9IGVuY29kZVVSSShkYXRhW2tleV1bJ1Bh dGgnXSksCisgICAgICAgICAgICAgIHByb3BzID0gZGF0YVtrZXldWydQcm9w ZXJ0aWVzJ10sCisgICAgICAgICAgICAgIGNhcF9jbGFzc2VzID0gIiI7Cisg ICAgICAgICAgZm9yIChjYXAgaW4gY2FwYWJpbGl0aWVzKSB7CisgICAgICAg ICAgICBpZiAoaGFzX2NhcGFiaWxpdHkoZGF0YVtrZXldLCBjYXBhYmlsaXRp ZXNbY2FwXSkpIHsKKyAgICAgICAgICAgICAgY2FwX2NsYXNzZXMgKz0gIiBj YXBfIiArIGNhcGFiaWxpdGllc1tjYXBdOworICAgICAgICAgICAgfQorICAg ICAgICAgIH0KKworICAgICAgICAgIGRhdGFba2V5XVsnQ2FwYWJpbGl0aWVz J10gPSBjYXBhYmlsaXRpZXM7CisgICAgICAgICAgYmluZFRvb2xiYXIoZGF0 YVtrZXldKTsKKworICAgICAgICAgIHZhciBjbGFzc190eXBlID0gKGRhdGFb a2V5XVsnZmlsZV90eXBlJ10gPT0gJ2RpcicgPyAnZmEgZmEtZm9sZGVyLW9w ZW4gdGJsX2ZvbGRlcicgOiAnZmEgZmEtZmlsZS10ZXh0IHRibF9maWxlJykK KworICAgICAgICAgIHZhciBmaWxlX25hbWVfb3JpZ2luYWwgPSBlbmNvZGVV UkkoZGF0YVtrZXldWydGaWxlbmFtZSddKTsKKyAgICAgICAgICByZXN1bHQg Kz0gJzx0ciBjbGFzcz0iJyArIGNhcF9jbGFzc2VzICsgJyI+JzsKKworICAg ICAgICAgIHZhciBmbV9maWxlbmFtZSA9IGRhdGFba2V5XVsnRmlsZW5hbWUn XTsKKyAgICAgICAgICBpZiAoZm1fZmlsZW5hbWUubGVuZ3RoID4gMTUgKSB7 CisgICAgICAgICAgICAgIGZtX2ZpbGVuYW1lID0gZGF0YVtrZXldWydGaWxl bmFtZSddLnN1YnN0cigwLCAxMCkgKycuLi4nOworICAgICAgICAgIH0KKwor ICAgICAgICAgIHJlc3VsdCArPSAnPHRkIHRpdGxlPSInICsgcGF0aCArICci IGNsYXNzPSInK2NsYXNzX3R5cGUrJyI+JzsKKyAgICAgICAgICBpZihkYXRh W2tleV1bJ1Byb3RlY3RlZCddID09IDEpIHsKKyAgICAgICAgICAgIHJlc3Vs dCArPSAnPGkgY2xhc3M9ImZhIGZhLWxvY2sgdGJsX2xvY2tfaWNvbiIgZGF0 YS1wcm90ZWN0ZWQ9InByb3RlY3RlZCI+PC9pPic7CisgICAgICAgICAgfQor ICAgICAgICAgIGlmKCFoYXNfY2FwYWJpbGl0eShkYXRhW2tleV0sICdyZW5h bWUnKSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHNwYW4gdGl0bGU9Iicg KyBkYXRhW2tleV1bJ0ZpbGVuYW1lJ10gKyAnIj4nICsgZm1fZmlsZW5hbWUg KyAnPC9zcGFuPjwvdGQ+JzsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAg ICByZXN1bHQgKz0gJzxwPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm1f ZmlsZV9yZW5hbWUiIC8+PHNwYW4gdGl0bGU9IicgKyBmaWxlX25hbWVfb3Jp Z2luYWwgKyAnIj4nICsgZm1fZmlsZW5hbWUgKyAnPC9zcGFuPjwvcD48L3Rk Pic7CisKKyAgICAgICAgICBpZihwcm9wc1snU2l6ZSddICYmIHByb3BzWydT aXplJ10gIT0gJycpeworICAgICAgICAgICAgcmVzdWx0ICs9ICc8dGQ+PGFi YnIgdGl0bGU9IicgKyBwcm9wc1snU2l6ZSddICsgJyI+JyArIGZvcm1hdEJ5 dGVzKHByb3BzWydTaXplJ10pICsgJzwvYWJicj48L3RkPic7CisgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAnPHRkPjwvdGQ+ JzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZihwcm9wc1snRGF0ZSBN b2RpZmllZCddICYmIHByb3BzWydEYXRlIE1vZGlmaWVkJ10gIT0gJycpewor ICAgICAgICAgICAgcmVzdWx0ICs9ICc8dGQ+JyArIHByb3BzWydEYXRlIE1v ZGlmaWVkJ10gKyAnPC90ZD4nOworICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICByZXN1bHQgKz0gJzx0ZD48L3RkPic7CisgICAgICAgICAgfQor CisgICAgICAgICAgcmVzdWx0ICs9ICc8L3RyPic7CisgICAgICAgIH0KKwor ICAgICAgICByZXN1bHQgKz0gJzwvdGJvZHk+JzsKKyAgICAgICAgcmVzdWx0 ICs9ICc8L3RhYmxlPic7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg IHJlc3VsdCArPSAnPGgxPicgKyBsZy5jb3VsZF9ub3RfcmV0cmlldmVfZm9s ZGVyICsgJzwvaDE+JzsKKyAgICB9CisKKyAgICAvLyBBZGQgdGhlIG5ldyBt YXJrdXAgdG8gdGhlIERPTS4KKyAgICAkKCcuZmlsZWluZm8gLmZpbGVfbGlz dGluZycpLmh0bWwocmVzdWx0KTsKKworICAgIC8vIHJlbmFtZSBmaWxlL2Zv bGRlcgorICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLnJlbmFtZScpLnVu YmluZCgpLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7CisgICAgICBpZigkKCcu ZmlsZWluZm8nKS5kYXRhKCd2aWV3JykgPT0gJ2dyaWQnKXsKKyAgICAgICAg ZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgdmFyICR0aGlzID0gJCgn LmZpbGVfbWFuYWdlcicpLmZpbmQoJyNjb250ZW50cyBsaS5zZWxlY3RlZCBw JyksCisgICAgICAgICAgICBvcmlnX3ZhbHVlID0gZGVjb2RlVVJJKCR0aGlz LmZpbmQoJ3NwYW4nKS5hdHRyKCd0aXRsZScpKSwKKyAgICAgICAgICAgIG5l d3ZhbHVlID0gb3JpZ192YWx1ZS5zdWJzdHJpbmcoMCwgb3JpZ192YWx1ZS5p bmRleE9mKCcuJykpOworCisgICAgICAgIGlmIChuZXd2YWx1ZSA9PT0gJycp CisgICAgICAgICAgbmV3dmFsdWUgPSBkZWNvZGVVUkkob3JpZ192YWx1ZSk7 CisKKyAgICAgICAgJHRoaXMuZmluZCgnaW5wdXQnKS50b2dnbGUoKS52YWwo bmV3dmFsdWUpLmZvY3VzKCk7CisgICAgICAgICR0aGlzLmZpbmQoJ3NwYW4n KS50b2dnbGUoKTsKKworICAgICAgICAvLyBSZW5hbWUgZm9sZGVyL2ZpbGUg b24gcHJlc3NpbmcgZW50ZXIga2V5CisgICAgICAgICQoJy5maWxlX21hbmFn ZXInKS51bmJpbmQoKS5vbigna2V5dXAnLCBmdW5jdGlvbihlKSB7CisgICAg ICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgeworICAgICAgICAgICAgZS5z dG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgICQoJy5maWxlaW5mbyAj Y29udGVudHMgbGkuc2VsZWN0ZWQgcCcpLmZpbmQoJ2lucHV0JykudHJpZ2dl cignYmx1cicpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAg IH0KKyAgICAgIGVsc2UgaWYoJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycp ID09ICdsaXN0Jyl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Cisg ICAgICAgIHZhciAkdGhpcyA9ICQoJy5maWxlaW5mbycpLmZpbmQoJ3RhYmxl I2NvbnRlbnRzIHRib2R5IHRyLnNlbGVjdGVkIHRkOmZpcnN0LWNoaWxkIHAn KSwKKyAgICAgICAgICAgIG9yaWdfdmFsdWUgPSBkZWNvZGVVUkkoJHRoaXMu ZmluZCgnc3BhbicpLmh0bWwoKSksCisgICAgICAgICAgICBuZXd2YWx1ZSA9 IG9yaWdfdmFsdWUuc3Vic3RyaW5nKDAsIG9yaWdfdmFsdWUuaW5kZXhPZign LicpKTsKKyAgICAgICAgaWYgKG5ld3ZhbHVlID09PSAnJykKKyAgICAgICAg ICBuZXd2YWx1ZSA9IG9yaWdfdmFsdWU7CisKKyAgICAgICAgJHRoaXMuZmlu ZCgnaW5wdXQnKS50b2dnbGUoKS52YWwobmV3dmFsdWUpLmZvY3VzKCk7Cisg ICAgICAgICR0aGlzLmZpbmQoJ3NwYW4nKS50b2dnbGUoKTsKKworICAgICAg ICAvLyBSZW5hbWUgZm9sZGVyL2ZpbGUgb24gcHJlc3NpbmcgZW50ZXIga2V5 CisgICAgICAgICQoJy5maWxlX21hbmFnZXInKS51bmJpbmQoKS5vbigna2V5 dXAnLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgaWYgKGUua2V5Q29kZSA9 PSAxMykgeworICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAg ICAgICAgICAgICQoJy5maWxlaW5mbyB0YWJsZSNjb250ZW50cyB0ci5zZWxl Y3RlZCB0ZCBwJykuZmluZCgnaW5wdXQnKS50cmlnZ2VyKCdibHVyJyk7Cisg ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9KTsKKwor ICAgICQoJy5maWxlaW5mbyAjY29udGVudHMgbGkgcCcpLm9uKCdkYmxjbGlj aycsZnVuY3Rpb24oZSl7CisgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwor ICAgICAgJHRoaXMgPSAkKHRoaXMpOworICAgICAgdmFyIG9yaWdfdmFsdWUg PSBkZWNvZGVVUkkoJHRoaXMuZmluZCgnc3BhbicpLmF0dHIoJ3RpdGxlJykp LAorICAgICAgICAgIG5ld3ZhbHVlID0gb3JpZ192YWx1ZS5zdWJzdHJpbmco MCwgb3JpZ192YWx1ZS5pbmRleE9mKCcuJykpOworCisgICAgICBpZiAobmV3 dmFsdWUgPT09ICcnKQorICAgICAgICBuZXd2YWx1ZSA9IG9yaWdfdmFsdWU7 CisKKyAgICAgICR0aGlzLmZpbmQoJ2lucHV0JykudG9nZ2xlKCkudmFsKG5l d3ZhbHVlKS5mb2N1cygpOworICAgICAgJHRoaXMuZmluZCgnc3BhbicpLnRv Z2dsZSgpOworCisgICAgICAvLyBSZW5hbWUgZm9sZGVyL2ZpbGUgb24gcHJl c3NpbmcgZW50ZXIga2V5CisgICAgICAkKCcuZmlsZV9tYW5hZ2VyJykudW5i aW5kKCkub24oJ2tleXVwJywgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAo ZS5rZXlDb2RlID09IDEzKSB7CisgICAgICAgICAgZS5zdG9wUHJvcGFnYXRp b24oKTsKKyAgICAgICAgICAkdGhpcy5maW5kKCdpbnB1dCcpLnRyaWdnZXIo J2JsdXInKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSk7CisKKyAg ICAvLyBSZW5hbWUgVUkgaGFuZGxpbmcKKyAgICAkKCcuZmlsZWluZm8gI2Nv bnRlbnRzIGxpIHAnKS5vbignYmx1ciBkYmxjbGljaycsJ2lucHV0JywgZnVu Y3Rpb24oZSl7CisgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAg dmFyIG9sZF9uYW1lID0gZGVjb2RlVVJJKCQodGhpcykuc2libGluZ3MoJ3Nw YW4nKS5hdHRyKCd0aXRsZScpKSwKKyAgICAgICAgICBuZXd2YWx1ZSA9IG9s ZF9uYW1lLnN1YnN0cmluZygwLCBvbGRfbmFtZS5pbmRleE9mKCcuJykpOwor ICAgICAgICAgIGxhc3QgPSBnZXRGaWxlRXh0ZW5zaW9uKG9sZF9uYW1lKTsK KyAgICAgIGlmKG9sZF9uYW1lLmluZGV4T2YoJy4nKSA9PSAwKQorICAgICAg ICBsYXN0ID0gJycKKworICAgICAgaWYgKG5ld3ZhbHVlID09ICcnKQorICAg ICAgICBuZXd2YWx1ZSA9IGRlY29kZVVSSShvbGRfbmFtZSk7CisKKyAgICAg IGlmKGUudHlwZT09ImtleWRvd24iKQorICAgICAgeworICAgICAgICBpZihl LndoaWNoPT0xMykKKyAgICAgICAgeworICAgICAgICAgIHZhciBmdWxsX25h bWUgPSBkZWNvZGVVUkkoJCh0aGlzKS52YWwoKSkgKyAobGFzdCAhPT0gJycg PyAnLicgKyBsYXN0OiAnJyk7CisgICAgICAgICAgJCh0aGlzKS50b2dnbGUo KTsKKyAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCdzcGFuJykudG9nZ2xl KCkuaHRtbChmdWxsX25hbWUpOworCisgICAgICAgICAgdmFyIG5ld19uYW1l ID0gZGVjb2RlVVJJKCQodGhpcykudmFsKCkpLAorICAgICAgICAgICAgICBw YXRoID0gZGVjb2RlVVJJKCQodGhpcykucGFyZW50KCkucGFyZW50KCkuZmlu ZCgnc3BhbicpLmF0dHIoJ2RhdGEtYWx0JykpOworCisgICAgICAgICAgdmFy IGRhdGEgPSB7CisgICAgICAgICAgICAnRmlsZW5hbWUnOiBvbGRfbmFtZSwK KyAgICAgICAgICAgICdQYXRoJzogcGF0aCwKKyAgICAgICAgICAgICdOZXdG aWxlbmFtZSc6IG5ld19uYW1lCisgICAgICAgICAgfTsKKworICAgICAgICAg IGlmIChuZXd2YWx1ZSAhPT0gbmV3X25hbWUpIHsKKyAgICAgICAgICAgIHJl bmFtZUl0ZW0oZGF0YSk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gJCgn LmN1cnJlbnRwYXRoJykudmFsKCk7CisgICAgICAgICAgICBnZXRGb2xkZXJJ bmZvKHBhcmVudCk7CisgICAgICAgICAgfQorICAgICAgICAgIGUuc3RvcFBy b3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoZS53aGljaD09 MzggfHwgZS53aGljaD09NDAgfHwgZS53aGljaD09MzcgfHwgZS53aGljaD09 MzkgfHwgZS5rZXlDb2RlID09IDMyKQorICAgICAgICB7CisgICAgICAgICAg ZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfQorICAgICAgfQorICAg ICAgZWxzZSBpZihlLnR5cGU9PSJmb2N1c291dCIpCisgICAgICB7CisgICAg ICAgIGlmKCQodGhpcykuY3NzKCdkaXNwbGF5Jyk9PSJpbmxpbmUtYmxvY2si KQorICAgICAgICB7CisgICAgICAgICAgdmFyIGZ1bGxfbmFtZSA9IGRlY29k ZVVSSSgkKHRoaXMpLnZhbCgpKSArIChsYXN0ICE9PSAnJz8gJy4nICsgbGFz dDogJycpOworICAgICAgICAgICQodGhpcykudG9nZ2xlKCk7CisgICAgICAg ICAgJCh0aGlzKS5zaWJsaW5ncygnc3BhbicpLnRvZ2dsZSgpLmh0bWwoZnVs bF9uYW1lKTsKKworICAgICAgICAgIHZhciBuZXdfbmFtZSA9IGRlY29kZVVS SSgkKHRoaXMpLnZhbCgpKSwKKyAgICAgICAgICAgICAgcGF0aCA9IGRlY29k ZVVSSSgkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJ3NwYW4nKS5h dHRyKCdkYXRhLWFsdCcpKTsKKworICAgICAgICAgIHZhciBkYXRhID0gewor ICAgICAgICAgICAgJ0ZpbGVuYW1lJzogb2xkX25hbWUsCisgICAgICAgICAg ICAnUGF0aCc6IHBhdGgsCisgICAgICAgICAgICAnTmV3RmlsZW5hbWUnOiBu ZXdfbmFtZQorICAgICAgICAgIH07CisKKyAgICAgICAgICBpZiAobmV3dmFs dWUgIT09IG5ld19uYW1lKSB7CisgICAgICAgICAgICByZW5hbWVJdGVtKGRh dGEpOworICAgICAgICAgICAgdmFyIHBhcmVudCA9ICQoJy5jdXJyZW50cGF0 aCcpLnZhbCgpOworICAgICAgICAgICAgZ2V0Rm9sZGVySW5mbyhwYXJlbnQp OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxz ZQorICAgICAgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAg ICAgfQorICAgIH0pOworCisgICAgJCgnLmZpbGVpbmZvIHRhYmxlI2NvbnRl bnRzIHRyIHRkIHAnKS5vbignZGJsY2xpY2snLGZ1bmN0aW9uKGUpeworICAg ICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgIC8vIFByb21wdCB0byBy ZW5hbWUgZmlsZS9mb2xkZXIKKyAgICAgICR0aGlzID0gJCh0aGlzKTsKKyAg ICAgIHZhciBvcmlnX3ZhbHVlID0gZGVjb2RlVVJJKCR0aGlzLmZpbmQoJ3Nw YW4nKS5hdHRyKCd0aXRsZScpKSwKKyAgICAgICAgICBuZXd2YWx1ZSA9IG9y aWdfdmFsdWUuc3Vic3RyaW5nKDAsIG9yaWdfdmFsdWUuaW5kZXhPZignLicp KTsKKworICAgICAgaWYgKG5ld3ZhbHVlID09PSAnJykKKyAgICAgICAgbmV3 dmFsdWUgPSBvcmlnX3ZhbHVlOworCisgICAgICAkdGhpcy5maW5kKCdpbnB1 dCcpLnRvZ2dsZSgpLnZhbChuZXd2YWx1ZSkuZm9jdXMoKTsKKyAgICAgICR0 aGlzLmZpbmQoJ3NwYW4nKS50b2dnbGUoKTsKKworICAgICAgLy8gUmVuYW1l IGZvbGRlci9maWxlIG9uIHByZXNzaW5nIGVudGVyIGtleQorICAgICAgJCgn LmZpbGVfbWFuYWdlcicpLnVuYmluZCgpLm9uKCdrZXl1cCcsIGZ1bmN0aW9u KGUpIHsKKyAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgeworICAgICAg ICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgJHRoaXMuZmlu ZCgnaW5wdXQnKS50cmlnZ2VyKCdibHVyJyk7CisgICAgICAgIH0KKyAgICAg IH0pOworICAgIH0pOworCisgICAgJCgnLmZpbGVpbmZvIHRhYmxlI2NvbnRl bnRzIHRyIHRkIHAnKS5vbignYmx1ciBkYmxjbGljaycsJ2lucHV0JyxmdW5j dGlvbihlKXsKKyAgICAgIHZhciBvbGRfbmFtZSA9IGRlY29kZVVSSSgkKHRo aXMpLnNpYmxpbmdzKCdzcGFuJykuYXR0cigndGl0bGUnKSksCisgICAgICAg ICAgbmV3dmFsdWUgPSBvbGRfbmFtZS5zdWJzdHJpbmcoMCwgb2xkX25hbWUu aW5kZXhPZignLicpKTsKKyAgICAgICAgICBsYXN0ID0gZ2V0RmlsZUV4dGVu c2lvbihvbGRfbmFtZSk7CisgICAgICBpZihvbGRfbmFtZS5pbmRleE9mKCcu JykgPT0gMCkKKyAgICAgICAgbGFzdCA9ICcnCisKKyAgICAgIGlmIChuZXd2 YWx1ZSA9PSAnJykKKyAgICAgICAgbmV3dmFsdWUgPSBvbGRfbmFtZTsKKwor ICAgICAgaWYoZS50eXBlPT0iZm9jdXNvdXQiKQorICAgICAgeworICAgICAg ICBpZigkKHRoaXMpLmNzcygnZGlzcGxheScpPT0iaW5saW5lLWJsb2NrIikK KyAgICAgICAgeworICAgICAgICAgIHZhciBmdWxsX25hbWUgPSBkZWNvZGVV UkkoJCh0aGlzKS52YWwoKSkgKyAobGFzdCAhPT0gJyc/ICcuJyArIGxhc3Q6 ICcnKTsKKyAgICAgICAgICAkKHRoaXMpLnRvZ2dsZSgpOworICAgICAgICAg ICQodGhpcykuc2libGluZ3MoJ3NwYW4nKS50b2dnbGUoKS5odG1sKGZ1bGxf bmFtZSk7CisKKyAgICAgICAgICB2YXIgbmV3X25hbWUgPSBkZWNvZGVVUkko JCh0aGlzKS52YWwoKSksCisgICAgICAgICAgICAgIHBhdGggPSBkZWNvZGVV UkkoJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5hdHRyKCd0aXRsZScpKTsK KworICAgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgICAgJ0ZpbGVu YW1lJzogb2xkX25hbWUsCisgICAgICAgICAgICAnUGF0aCc6IHBhdGgsCisg ICAgICAgICAgICAnTmV3RmlsZW5hbWUnOiBuZXdfbmFtZQorICAgICAgICAg IH07CisKKyAgICAgICAgICBpZiAobmV3dmFsdWUgIT09IG5ld19uYW1lKSB7 CisgICAgICAgICAgICByZW5hbWVJdGVtKGRhdGEpOworICAgICAgICAgICAg dmFyIHBhcmVudCA9IHBhdGguc3BsaXQoJy8nKS5yZXZlcnNlKCkuc2xpY2Uo MikucmV2ZXJzZSgpLmpvaW4oJy8nKSArICcvJzsKKyAgICAgICAgICAgIGdl dEZvbGRlckluZm8ocGFyZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZS5zdG9w UHJvcGFnYXRpb24oKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIC8qCisg ICAgICogQmluZCBjbGljayBldmVudHMKKyAgICAgKiBTZWxlY3QgaXRlbXMg LSBhZm9sZGVyIGRibGNsaWNrCisgICAgICovCisgICAgaWYoJCgnLmZpbGVp bmZvJykuZGF0YSgndmlldycpID09ICdncmlkJyl7CisgICAgICAvLyBHZXQg aW50byBmb2xkZXIgb24gZGJsY2xpY2sKKyAgICAgICQoJy5maWxlaW5mbycp LmZpbmQoJyNjb250ZW50cyBsaScpLmRibGNsaWNrKGZ1bmN0aW9uKGUpewor ICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworCisgICAgICAgIC8vIEVu YWJsZS9EaXNhYmxlIGxldmVsIHVwIGJ1dHRvbgorICAgICAgICBlbmFiX2Rp c19sZXZlbF91cCgpOworICAgICAgICB2YXIgcGF0aCA9ICQodGhpcykuZmlu ZCgnc3BhbicpLmF0dHIoJ2RhdGEtYWx0Jyk7CisKKyAgICAgICAgaWYocGF0 aC5sYXN0SW5kZXhPZignLycpID09IHBhdGgubGVuZ3RoIC0gMSl7CisgICAg ICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLmFkZENsYXNzKCdkaXNhYmxl ZCcpOworICAgICAgICAgIHZhciAkY3JlYXRlX2lucHV0ID0gJCgnLmNyZWF0 ZV9pbnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0nKTsKKyAgICAgICAgICAkKCcu ZmlsZV9tYW5hZ2VyIGJ1dHRvbi5kZWxldGUsIC5maWxlX21hbmFnZXIgYnV0 dG9uLnJlbmFtZScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7Cisg ICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uZG93bmxvYWQnKS5h dHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgIGdldEZv bGRlckluZm8ocGF0aCk7CisgICAgICAgICAgaWYgKCRjcmVhdGVfaW5wdXQu bGVuZ3RoICE9IDAgJiYgJGNyZWF0ZV9pbnB1dC52YWwoKSAhPSAnJykgewor ICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLnJlbW92ZUNsYXNz KCdkaXNhYmxlZCcpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICBnZXRGaWxlSW5mbyhwYXRoKTsKKyAgICAgICAgfQorICAg ICAgfSk7CisKKyAgICAgIGRhdGFfY2FwID0ge30KKyAgICAgIGRhdGFfY2Fw WydDYXBhYmlsaXRpZXMnXSA9IGNhcGFiaWxpdGllczsKKyAgICAgICQoJy5m aWxlaW5mbycpLmZpbmQoJyNjb250ZW50cyBsaScpLmNsaWNrKGZ1bmN0aW9u KGUpeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB2 YXIgcGF0aCA9IGRlY29kZVVSSSgkKHRoaXMpLmZpbmQoJy5jbGlwIHNwYW4n KS5hdHRyKCdkYXRhLWFsdCcpKSwKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9 ICQodGhpcykuZmluZCgncCBzcGFuJykuYXR0cigndGl0bGUnKSwKKyAgICAg ICAgICAgIGlzX3Byb3RlY3RlZCA9ICQodGhpcykuZmluZCgnLmNsaXAgc3Bh bi5mbV9sb2NrX2ljb24nKS5hdHRyKCdkYXRhLXByb3RlY3RlZCcpOworICAg ICAgICBpZihwYXRoLmxhc3RJbmRleE9mKCcvJykgPT0gcGF0aC5sZW5ndGgg LSAxKXsKKyAgICAgICAgICBpZihoYXNfY2FwYWJpbGl0eShkYXRhX2NhcCwg J3NlbGVjdF9mb2xkZXInKSAmJiBpc19wcm90ZWN0ZWQgPT0gdW5kZWZpbmVk KSB7CisgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJ2xpLnNl bGVjdGVkJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAg ICAkKHRoaXMpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICAgICAg JCgnLmZpbGVfbWFuYWdlcl9vaycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcp OworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uZGVsZXRl LCAuZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5yZW1vdmVBdHRyKCdk aXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgICAgJCgnLmZpbGVf bWFuYWdlciBidXR0b24uZG93bmxvYWQnKS5hdHRyKCdkaXNhYmxlZCcsICdk aXNhYmxlZCcpOworICAgICAgICAgICAgLy8gc2V0IHNlbGVjdGVkIGZvbGRl ciBuYW1lIGluIGJyZWFkY3J1bXMKKyAgICAgICAgICAgICQoJy5maWxlX21h bmFnZXIgI3VwbG9hZGVyIGgxJykuaGlkZSgpOworICAgICAgICAgICAgJCgn LmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLnNob3dfc2VsZWN0ZWRfZmlsZScp LnJlbW92ZSgpOworICAgICAgICAgICAgJCgnPHNwYW4gY2xhc3M9InNob3df c2VsZWN0ZWRfZmlsZSI+JytwYXRoKyc8L3NwYW4+JykuYXBwZW5kVG8oJy5m aWxlX21hbmFnZXIgI3VwbG9hZGVyIC5maWxlbWFuYWdlci1wYXRoLWdyb3Vw Jyk7CisgICAgICAgICAgfQorICAgICAgICAgIC8vZ2V0Rm9sZGVySW5mbyhw YXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZihoYXNfY2Fw YWJpbGl0eShkYXRhX2NhcCwgJ3NlbGVjdF9maWxlJykgJiYgaXNfcHJvdGVj dGVkID09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgJCh0aGlzKS5wYXJl bnQoKS5maW5kKCdsaS5zZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCdzZWxlY3Rl ZCcpOworICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnc2VsZWN0ZWQn KTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFnZXJfb2snKS5yZW1vdmVD bGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFn ZXIgYnV0dG9uLmRlbGV0ZSwgLmZpbGVfbWFuYWdlciBidXR0b24uZG93bmxv YWQsIC5maWxlX21hbmFnZXIgYnV0dG9uLnJlbmFtZScpLnJlbW92ZUF0dHIo J2Rpc2FibGVkJyk7CisgICAgICAgICAgICAvLyBzZXQgc2VsZWN0ZWQgZm9s ZGVyIG5hbWUgaW4gYnJlYWRjcnVtcworICAgICAgICAgICAgJCgnLmZpbGVf bWFuYWdlciAjdXBsb2FkZXIgaDEnKS5oaWRlKCk7CisgICAgICAgICAgICAk KCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciAuc2hvd19zZWxlY3RlZF9maWxl JykucmVtb3ZlKCk7CisgICAgICAgICAgICAkKCc8c3BhbiBjbGFzcz0ic2hv d19zZWxlY3RlZF9maWxlIj4nK3BhdGgrJzwvc3Bhbj4nKS5hcHBlbmRUbygn LmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3Jv dXAnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoY29uZmlnLm9wdGlv bnMuZGlhbG9nX3R5cGUgPT0gJ2NyZWF0ZV9maWxlJyAmJiBpc19wcm90ZWN0 ZWQgPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAkKCcuY3JlYXRlX2lu cHV0IGlucHV0W3R5cGU9InRleHQiXScpLnZhbChmaWxlX25hbWUpOworICAg ICAgICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaywgLmZpbGVfbWFuYWdlcl9j cmVhdGUnKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAgICAgICAgICB9 CisgICAgICAgICAgZ2V0RmlsZUluZm8ocGF0aCk7CisgICAgICAgIH0KKwor ICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICQoJy5maWxlaW5mbyB0 YWJsZSNjb250ZW50cyB0Ym9keSB0cicpLm9uKCdjbGljaycsIGZ1bmN0aW9u KGUpeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB2 YXIgcGF0aCA9IGRlY29kZVVSSSgkKCd0ZDpmaXJzdC1jaGlsZCcsIHRoaXMp LmF0dHIoJ3RpdGxlJykpLAorICAgICAgICAgICAgZmlsZV9uYW1lID0gZGVj b2RlVVJJKCQoJ3RkOmZpcnN0LWNoaWxkIHAgc3BhbicsIHRoaXMpLmF0dHIo J3RpdGxlJykpLAorICAgICAgICAgICAgaXNfcHJvdGVjdGVkID0gJCgndGQ6 Zmlyc3QtY2hpbGQnLCB0aGlzKS5maW5kKCdpLnRibF9sb2NrX2ljb24nKS5h dHRyKCdkYXRhLXByb3RlY3RlZCcpOworICAgICAgICBpZihwYXRoLmxhc3RJ bmRleE9mKCcvJykgPT0gcGF0aC5sZW5ndGggLSAxKXsKKyAgICAgICAgICBp ZihoYXNfY2FwYWJpbGl0eShkYXRhX2NhcCwgJ3NlbGVjdF9mb2xkZXInKSAm JiBpc19wcm90ZWN0ZWQgPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAk KHRoaXMpLnBhcmVudCgpLmZpbmQoJ3RyLnNlbGVjdGVkJykucmVtb3ZlQ2xh c3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAkKCd0ZDpmaXJzdC1jaGls ZCcsIHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworICAg ICAgICAgICAgJCgnLmZpbGVfbWFuYWdlcl9vaycpLnJlbW92ZUNsYXNzKCdk aXNhYmxlZCcpOworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0 b24uZG93bmxvYWQnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwor ICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciBidXR0b24uZGVsZXRlLCAu ZmlsZV9tYW5hZ2VyIGJ1dHRvbi5yZW5hbWUnKS5yZW1vdmVBdHRyKCdkaXNh YmxlZCcpOworICAgICAgICAgICAgLy8gc2V0IHNlbGVjdGVkIGZvbGRlciBu YW1lIGluIGJyZWFkY3J1bXMKKyAgICAgICAgICAgICQoJy5maWxlX21hbmFn ZXIgI3VwbG9hZGVyIGgxJykuaGlkZSgpOworICAgICAgICAgICAgJCgnLmZp bGVfbWFuYWdlciAjdXBsb2FkZXIgLnNob3dfc2VsZWN0ZWRfZmlsZScpLnJl bW92ZSgpOworICAgICAgICAgICAgJCgnPHNwYW4gY2xhc3M9InNob3dfc2Vs ZWN0ZWRfZmlsZSI+JytwYXRoKyc8L3NwYW4+JykuYXBwZW5kVG8oJy5maWxl X21hbmFnZXIgI3VwbG9hZGVyIC5maWxlbWFuYWdlci1wYXRoLWdyb3VwJyk7 CisgICAgICAgICAgfQorICAgICAgICAgIC8vZ2V0Rm9sZGVySW5mbyhwYXRo KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZihoYXNfY2FwYWJp bGl0eShkYXRhX2NhcCwgJ3NlbGVjdF9maWxlJykgJiYgaXNfcHJvdGVjdGVk ID09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQo KS5maW5kKCd0ci5zZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcp OworICAgICAgICAgICAgJCgndGQ6Zmlyc3QtY2hpbGQnLCB0aGlzKS5wYXJl bnQoKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICQoJy5m aWxlX21hbmFnZXJfb2snKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKKyAg ICAgICAgICAgICQoJy5maWxlX21hbmFnZXIgYnV0dG9uLmRlbGV0ZSwgLmZp bGVfbWFuYWdlciBidXR0b24uZG93bmxvYWQsIC5maWxlX21hbmFnZXIgYnV0 dG9uLnJlbmFtZScpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICAg ICAgICAvLyBzZXQgc2VsZWN0ZWQgZm9sZGVyIG5hbWUgaW4gYnJlYWRjcnVt cworICAgICAgICAgICAgJCgnLmZpbGVfbWFuYWdlciAjdXBsb2FkZXIgaDEn KS5oaWRlKCk7CisgICAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxv YWRlciAuc2hvd19zZWxlY3RlZF9maWxlJykucmVtb3ZlKCk7CisgICAgICAg ICAgICAkKCc8c3BhbiBjbGFzcz0ic2hvd19zZWxlY3RlZF9maWxlIj4nK3Bh dGgrJzwvc3Bhbj4nKS5hcHBlbmRUbygnLmZpbGVfbWFuYWdlciAjdXBsb2Fk ZXIgLmZpbGVtYW5hZ2VyLXBhdGgtZ3JvdXAnKTsKKyAgICAgICAgICB9Cisg ICAgICAgICAgaWYoY29uZmlnLm9wdGlvbnMuZGlhbG9nX3R5cGUgPT0gJ2Ny ZWF0ZV9maWxlJyAmJiBpc19wcm90ZWN0ZWQgPT0gdW5kZWZpbmVkKSB7Cisg ICAgICAgICAgICAkKCcuY3JlYXRlX2lucHV0IGlucHV0W3R5cGU9InRleHQi XScpLnZhbChmaWxlX25hbWUpOworICAgICAgICAgICAgJCgnLmZpbGVfbWFu YWdlcl9vaywgLmZpbGVfbWFuYWdlcl9jcmVhdGUnKS5yZW1vdmVDbGFzcygn ZGlzYWJsZWQnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZ2V0RmlsZUlu Zm8ocGF0aCk7CisgICAgICAgIH0KKworCisgICAgICB9KTsKKworICAgICAg JCgnLmZpbGVpbmZvIHRhYmxlI2NvbnRlbnRzIHRib2R5IHRyJykub24oJ2Ri bGNsaWNrJywgZnVuY3Rpb24oZSl7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0 aW9uKCk7CisKKyAgICAgICAgLy8gRW5hYmxlL0Rpc2FibGUgbGV2ZWwgdXAg YnV0dG9uCisgICAgICAgIGVuYWJfZGlzX2xldmVsX3VwKCk7CisgICAgICAg IHZhciBwYXRoID0gJCgndGQ6Zmlyc3QtY2hpbGQnLCB0aGlzKS5hdHRyKCd0 aXRsZScpOworICAgICAgICBpZihwYXRoLmxhc3RJbmRleE9mKCcvJykgPT0g cGF0aC5sZW5ndGggLSAxKXsKKyAgICAgICAgICAkKCcuZmlsZV9tYW5hZ2Vy X29rJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7CisgICAgICAgICAgJCgn LmZpbGVfbWFuYWdlciBidXR0b24uZG93bmxvYWQnKS5hdHRyKCdkaXNhYmxl ZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgICQoJy5maWxlX21hbmFnZXIg YnV0dG9uLmRlbGV0ZSwgLmZpbGVfbWFuYWdlciBidXR0b24ucmVuYW1lJyku YXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgICAgICBnZXRG b2xkZXJJbmZvKHBhdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg IGdldEZpbGVJbmZvKHBhdGgpOworICAgICAgICB9CisgICAgICB9KTsKKwor ICAgIH0KKyAgIH0KKyAgfSk7Cit9OworCisvLyBUbyBzYXZlIGZpbGUKK3Zh ciBzYXZlRmlsZSA9IGZ1bmN0aW9uKHBhdGgpIHsKKyAgdmFyIHBvc3RfZGF0 YSA9IHsKKyAgICAncGF0aCc6IHBhdGgsCisgICAgJ25hbWUnOiAndGVzdC50 eHQnLAorICAgICdtb2RlJzogJ2FkZCcKKyAgfTsKKworICAkLmFqYXgoewor ICAgIHR5cGU6ICdQT1NUJywKKyAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShw b3N0X2RhdGEpLAorICAgIHVybDogZmlsZUNvbm5lY3RvciwKKyAgICBkYXRh VHlwZTogJ2pzb24nLAorICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24v eC1kb3dubG9hZDsgY2hhcnNldD11dGYtOCIsCisgICAgYXN5bmM6IGZhbHNl LAorICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApeworICAgICAgZGF0YSA9 IHJlc3AuZGF0YS5yZXN1bHQ7CisgICAgICBpZihkYXRhWydDb2RlJ10gPT09 IDApeworICAgICAgICB2YXIgcHJvcGVydGllcyA9ICcnOworCisgICAgICAg IGRhdGFbJ0NhcGFiaWxpdGllcyddID0gY2FwYWJpbGl0aWVzOworICAgICAg ICBiaW5kVG9vbGJhcihkYXRhKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg IGFsZXJ0aWZ5LmVycm9yKGRhdGFbJ0Vycm9yJ10pOworICAgICAgfQorICAg IH0KKyAgfSk7Cit9CisKKworLy8gRW5hYmxlL0Rpc2FibGUgbGV2ZWwgdXAg YnV0dG9uCit2YXIgZW5hYl9kaXNfbGV2ZWxfdXAgPSBmdW5jdGlvbigpIHsK KworICAkKCcuZmlsZV9tYW5hZ2VyICN1cGxvYWRlciBoMScpLnNob3coKTsK KyAgJCgnLnNob3dfc2VsZWN0ZWRfZmlsZScpLnJlbW92ZSgpOworICBzZXRU aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgIHZhciBiID0gJCgnLmN1cnJlbnRw YXRoJykudmFsKCksCisgICAgICAgICRsZXZlbF91cCA9ICQoJy5maWxlX21h bmFnZXInKS5maW5kKCdidXR0b24ubGV2ZWwtdXAnKTsKKyAgICAgICAgJGhv bWVfYnRuID0gJCgnLmZpbGVfbWFuYWdlcicpLmZpbmQoJ2J1dHRvbi5ob21l Jyk7CisgICAgaWYgKGIgPT09IGZpbGVSb290KSB7CisgICAgICAkbGV2ZWxf dXAuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgICRob21l X2J0bi5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgIH0KKyAg ICBlbHNlIHsKKyAgICAgICRob21lX2J0bi5yZW1vdmVBdHRyKCdkaXNhYmxl ZCcpOworICAgICAgJGxldmVsX3VwLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7 CisgICAgfQorICB9LCAxMDApOworfQorCisvLyBHZXQgdHJhbnNhY3Rpb24g aWQgdG8gZ2VuZXJhdGUgcmVxdWVzdCB1cmwgYW5kCisvLyB0byBnZW5lcmF0 ZSBjb25maWcgZmlsZXMgb24gcnVudGltZQordmFyIHRyYW5zSWQgPSBnZXRU cmFuc0lkKCksCisgICAgdF9pZCA9ICcnOworCitpZiAodHJhbnNJZC5yZWFk eVN0YXRlID09IDQpCisgIHRfcmVzID0gSlNPTi5wYXJzZSh0cmFuc0lkLnJl c3BvbnNlVGV4dCk7Cit0X2lkID0gdF9yZXMuZGF0YS5maWxlVHJhbnNJZDsK KwordmFyIHJvb3RfdXJsID0gJ3t7IHVybF9mb3IoImZpbGVfbWFuYWdlci5p bmRleCIpIH19JywKKyAgICBmaWxlX21hbmFnZXJfY29uZmlnX2pzb24gPSBy b290X3VybCt0X2lkKycvZmlsZV9tYW5hZ2VyX2NvbmZpZy5qc29uJywKKyAg ICBmaWxlX21hbmFnZXJfY29uZmlnX2pzID0gcm9vdF91cmwrJ2ZpbGVfbWFu YWdlcl9jb25maWcuanMnLAorICAgIGZpbGVDb25uZWN0b3IgPSByb290X3Vy bCsnZmlsZW1hbmFnZXIvJyt0X2lkKycvJywKKyAgICBjb25mZyA9IGxvYWRD b25maWdGaWxlKCk7CisKKworLy8gbG9hZCB1c2VyIGNvbmZpZ3VyYXRpb24g ZmlsZQoraWYgKGNvbmZnLnJlYWR5U3RhdGUgPT0gNCkKKyAgY29uZmlnID0g SlNPTi5wYXJzZShjb25mZy5yZXNwb25zZVRleHQpOworCit2YXIgZmlsZVJv b3QgPSBjb25maWcub3B0aW9ucy5maWxlUm9vdCwKKyAgICBjYXBhYmlsaXRp ZXMgPSBjb25maWcub3B0aW9ucy5jYXBhYmlsaXRpZXM7CisKKy8qCisgKiBH ZXQgbG9jYWxpemVkIG1lc3NhZ2VzIGZyb20gZmlsZQorICogdGhyb3VnaCBj dWx0dXJlIHZhciBvciBmcm9tIFVSTAorICovCit2YXIgbGcgPSBbXSwKKyAg ICBlbmpzID0gJ3t7IHVybF9mb3IoImZpbGVfbWFuYWdlci5pbmRleCIpIH19 JysiZW4uanMiLAorICAgIGxnZiA9IGxvYWRMYW5nRmlsZShlbmpzKTsKKwor aWYgKGxnZi5yZWFkeVN0YXRlID09IDQpCisgIGxnID0gSlNPTi5wYXJzZShs Z2YucmVzcG9uc2VUZXh0KTsKKworLy8gRGlzYWJsZSBob21lIGJ1dHRvbiBv biBsb2FkCiskKCcuZmlsZV9tYW5hZ2VyJykuZmluZCgnYnV0dG9uLmhvbWUn KS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworJCgnLmZpbGVfbWFu YWdlcicpLmZpbmQoJ2J1dHRvbi5yZW5hbWUnKS5hdHRyKCdkaXNhYmxlZCcs ICdkaXNhYmxlZCcpOworCitpZiAoY29uZmlnLm9wdGlvbnMuZGlhbG9nX3R5 cGUgPT0gJ3NlbGVjdF9maWxlJyB8fAorCWNvbmZpZy5vcHRpb25zLmRpYWxv Z190eXBlID09ICdjcmVhdGVfZmlsZScgfHwKKwljb25maWcub3B0aW9ucy5k aWFsb2dfdHlwZSA9PSAnc3RvcmFnZV9kaWFsb2cnKSB7CisKKyAgLy8gQ3Jl YXRlIGZpbGUgc2VsZWN0aW9uIGRyb3Bkb3duCisgIHZhciBhbGxvd2VkX3R5 cGVzID0gY29uZmlnLm9wdGlvbnMuYWxsb3dlZF9maWxlX3R5cGVzLAorICAg ICAgdHlwZXNfbGVuID0gYWxsb3dlZF90eXBlcy5sZW5ndGg7CisgIGlmKHR5 cGVzX2xlbiA+IDApIHsKKyAgICB2YXIgaSA9IDAsCisgICAgICAgIHNlbGVj dF9ib3ggPSAiPGRpdiBjbGFzcz0nY2hhbmdlX2ZpbGVfdHlwZXMnPjxzZWxl Y3QgbmFtZT0ndHlwZSc+IjsKKyAgICB3aGlsZShpIDwgdHlwZXNfbGVuKSB7 CisgICAgICBzZWxlY3RfYm94ICs9ICI8b3B0aW9uIHZhbHVlPSIrYWxsb3dl ZF90eXBlc1tpXSsiPiIrKGFsbG93ZWRfdHlwZXNbaV0gPT0gJyonID8gJ0Fs bCBGaWxlcyc6IGFsbG93ZWRfdHlwZXNbaV0pKyI8L29wdGlvbj4iOworICAg ICAgaSsrOworICAgIH0KKyAgICBzZWxlY3RfYm94ICs9ICI8L3NlbGVjdD4i OworICAgIHNlbGVjdF9ib3ggKz0gIjxsYWJlbD5Gb3JtYXQ6IDwvbGFiZWw+ PC9kaXY+IjsKKyAgfQorCisgICQoIi5hbGxvd2VkX2ZpbGVfdHlwZXMiKS5o dG1sKHNlbGVjdF9ib3gpOworCisgICQoIi5hbGxvd2VkX2ZpbGVfdHlwZXMg c2VsZWN0Iikub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgIHZhciBz ZWxlY3RlZF92YWwgPSAkKHRoaXMpLnZhbCgpLAorICAgICAgICBjdXJyX3Bh dGggPSAkKCcuY3VycmVudHBhdGgnKS52YWwoKTsKKyAgICBnZXRGb2xkZXJJ bmZvKGN1cnJfcGF0aCwgc2VsZWN0ZWRfdmFsKTsKKyAgfSk7Cit9CisKK2lm IChjb25maWcub3B0aW9ucy5kaWFsb2dfdHlwZSA9PSAnY3JlYXRlX2ZpbGUn KSB7CisgIHZhciBjcmVhdGVfZmlsZV9odG1sID0gJzxkaXYgY2xhc3M9ImNy ZWF0ZV9pbnB1dCI+JysKKyAgICAgICc8c3Bhbj5GaWxlbmFtZTo8L3NwYW4+ JysKKyAgICAgICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X2ZpbGVu YW1lIiBjbGFzcz0iZm1fY3JlYXRlX2lucHV0IiAvPicrCisgICAgJzwvZGl2 Pic7CisKKyAgJCgnLmNyZWF0ZV9tb2RlX2RsZycpLmZpbmQoJy5hbGxvd2Vk X2ZpbGVfdHlwZXMnKS5wcmVwZW5kKGNyZWF0ZV9maWxlX2h0bWwpOworCisg ICQoJy5jcmVhdGVfaW5wdXQgaW5wdXRbdHlwZT0idGV4dCJdJykub24oJ2tl eXByZXNzLCBrZXlkb3duJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIGlucHV0 X3RleHRfbGVuID0gJCh0aGlzKS52YWwoKS5sZW5ndGg7CisgICAgaWYoaW5w dXRfdGV4dF9sZW4gPiAwICkgeworICAgICAgJCgnLmZpbGVfbWFuYWdlcl9v aycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOworICAgIH0KKyAgICBlbHNl IHsKKyAgICAgICQoJy5maWxlX21hbmFnZXJfb2snKS5hZGRDbGFzcygnZGlz YWJsZWQnKTsKKyAgICB9CisgIH0pOworfQorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg SW5pdGlhbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyQoZnVuY3Rpb24o KXsKKyAgaWYoY29uZmlnLmV4dHJhX2pzKSB7CisgICAgZm9yKHZhciBpPTA7 IGk8IGNvbmZpZy5leHRyYV9qcy5sZW5ndGg7IGkrKykgeworICAgICAgJC5h amF4KHsKKyAgICAgICAgdXJsOiBjb25maWcuZXh0cmFfanNbaV0sCisgICAg ICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKKyAgICAgICAgYXN5bmM6IGV4dHJh X2pzX2FzeW5jCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBpZigkLnVy bFBhcmFtKCdleHBhbmRlZEZvbGRlcicpICE9IDApIHsKKyAgICBleHBhbmRl ZEZvbGRlciA9ICQudXJsUGFyYW0oJ2V4cGFuZGVkRm9sZGVyJyk7CisgICAg ZnVsbGV4cGFuZGVkRm9sZGVyID0gZmlsZVJvb3QgKyBleHBhbmRlZEZvbGRl cjsKKyAgfSBlbHNlIHsKKyAgICBleHBhbmRlZEZvbGRlciA9ICcnOworICAg IGZ1bGxleHBhbmRlZEZvbGRlciA9IG51bGw7CisgIH0KKworICAvLyBBZGp1 c3QgbGF5b3V0LgorICBzZXREaW1lbnNpb25zKCk7CisKKyAgLy8gd2UgZmlu YWxpemUgdGhlIEZpbGVNYW5hZ2VyIFVJIGluaXRpYWxpemF0aW9uCisgIC8v IHdpdGggbG9jYWxpemVkIHRleHQgaWYgbmVjZXNzYXJ5CisgIGlmKGNvbmZp Zy5hdXRvbG9hZCA9PSB0cnVlKSB7CisgICAgJCgnLnVwbG9hZCcpLmFwcGVu ZChsZy51cGxvYWQpOworICAgICQoJy5jcmVhdGUnKS5hcHBlbmQobGcubmV3 X2ZvbGRlcik7CisgICAgJCgnLmdyaWQnKS5hdHRyKCd0aXRsZScsIGxnLmdy aWRfdmlldyk7CisgICAgJCgnLmxpc3QnKS5hdHRyKCd0aXRsZScsIGxnLmxp c3Rfdmlldyk7CisgICAgJCgnLmZpbGVpbmZvIGgxJykuYXBwZW5kKGxnLnNl bGVjdF9mcm9tX2xlZnQpOworICAgICQoJyNpdGVtT3B0aW9ucyBhW2hyZWYk PSIjc2VsZWN0Il0nKS5hcHBlbmQobGcuc2VsZWN0KTsKKyAgICAkKCcjaXRl bU9wdGlvbnMgYVtocmVmJD0iLmRvd25sb2FkIl0nKS5hcHBlbmQobGcuZG93 bmxvYWQpOworICAgICQoJyNpdGVtT3B0aW9ucyBhW2hyZWYkPSIucmVuYW1l Il0nKS5hcHBlbmQobGcucmVuYW1lKTsKKyAgICAkKCcjaXRlbU9wdGlvbnMg YVtocmVmJD0iLmRlbGV0ZSJdJykuYXBwZW5kKGxnLmRlbCk7CisgICAgLyoq IElucHV0IGZpbGUgUmVwbGFjZW1lbnQgKi8KKyAgICAkKCcuYnJvd3NlJyku YXBwZW5kKCcrJyk7CisKKyAgICAkKCcuYnJvd3NlJykuYXR0cigndGl0bGUn LCBsZy5icm93c2UpOworCisgICAgJCgiLm5ld2ZpbGUiKS5jaGFuZ2UoZnVu Y3Rpb24oKSB7CisgICAgICAkKCIuZmlsZXBhdGgiKS52YWwoJCh0aGlzKS52 YWwoKSk7CisgICAgfSk7CisKKyAgICAvKiogSW5wdXQgZmlsZSBSZXBsYWNl bWVudCAtIGVuZCAqLworICB9CisKKyAgLy8gU2V0IGluaXRpYWwgdmlldyBz dGF0ZS4KKyAgJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycsIGNvbmZpZy5v cHRpb25zLmRlZmF1bHRWaWV3TW9kZSk7CisgIHNldFZpZXdCdXR0b25zRm9y KGNvbmZpZy5vcHRpb25zLmRlZmF1bHRWaWV3TW9kZSk7CisKKyAgLy8gVXBs b2FkIGNsaWNrIGV2ZW50CisgICQoJy5maWxlX21hbmFnZXIgLnVwbG9hZGVy Jykub24oJ2NsaWNrJywgJ2EnLCBmdW5jdGlvbihlKSB7CisgICAgZS5wcmV2 ZW50RGVmYXVsdCgpOworICAgIHZhciBiID0gJCgnLmN1cnJlbnRwYXRoJyku dmFsKCk7CisgICAgdmFyIG5vZGVfdmFsID0gJCh0aGlzKS5uZXh0KCkudGV4 dCgpOworICAgIHBhcmVudCA9IGIuc3Vic3RyaW5nKDAsIGIuc2xpY2UoMCwg LTEpLmxhc3RJbmRleE9mKG5vZGVfdmFsKSk7CisgICAgZ2V0Rm9sZGVySW5m byhwYXJlbnQpOworICB9KTsKKworICAvLyByZS1yZW5kZXIgdGhlIGhvbWUg dmlldworICAkKCcuZmlsZV9tYW5hZ2VyIC5ob21lJykuY2xpY2soZnVuY3Rp b24oKXsKKyAgICB2YXIgY3VycmVudFZpZXdNb2RlID0gJCgnLmZpbGVpbmZv JykuZGF0YSgndmlldycpOworICAgICQoJy5maWxlaW5mbycpLmRhdGEoJ3Zp ZXcnLCBjdXJyZW50Vmlld01vZGUpOworICAgIGdldEZvbGRlckluZm8oZmls ZVJvb3QpOworICAgIGVuYWJfZGlzX2xldmVsX3VwKCk7CisgIH0pOworCisg IC8vIEdvIG9uZSBkaXJlY3RvcnkgYmFjaworICAkKCIuZmlsZV9tYW5hZ2Vy IC5sZXZlbC11cCIpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgIHZhciBiID0g JCgnLmN1cnJlbnRwYXRoJykudmFsKCk7CisKKyAgICAvLyBFbmFibGUvRGlz YWJsZSBsZXZlbCB1cCBidXR0b24KKyAgICBlbmFiX2Rpc19sZXZlbF91cCgp OworCisgICAgaWYgKGIgIT0gZmlsZVJvb3QpIHsKKyAgICAgICAgcGFyZW50 ID0gYi5zdWJzdHJpbmcoMCwgYi5zbGljZSgwLCAtMSkubGFzdEluZGV4T2Yo Ii8iKSkgKyAiLyI7CisgICAgICAgIHZhciBkID0gJCgiLmZpbGVpbmZvIiku ZGF0YSgidmlldyIpOworICAgICAgICAkKCIuZmlsZWluZm8iKS5kYXRhKCJ2 aWV3IiwgZCk7CisgICAgICAgIGdldEZvbGRlckluZm8ocGFyZW50KTsKKyAg ICB9CisgIH0pOworCisgIC8vIHNldCBidXR0b25zIHRvIHN3aXRjaCBiZXR3 ZWVuIGdyaWQgYW5kIGxpc3Qgdmlld3MuCisgICQoJy5maWxlX21hbmFnZXIg LmdyaWQnKS5jbGljayhmdW5jdGlvbigpeworICAgIHNldFZpZXdCdXR0b25z Rm9yKCdncmlkJyk7CisgICAgJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycs ICdncmlkJyk7CisgICAgZW5hYmxlX2Rpc2FibGVfYnRuKCk7CisgICAgZ2V0 Rm9sZGVySW5mbygkKCcuY3VycmVudHBhdGgnKS52YWwoKSk7CisgIH0pOwor CisgIC8vIFNob3cgbGlzdCBtb2RlCisgICQoJy5maWxlX21hbmFnZXIgLmxp c3QnKS5jbGljayhmdW5jdGlvbigpeworICAgIHNldFZpZXdCdXR0b25zRm9y KCdsaXN0Jyk7CisgICAgJCgnLmZpbGVpbmZvJykuZGF0YSgndmlldycsICds aXN0Jyk7CisgICAgZW5hYmxlX2Rpc2FibGVfYnRuKCk7CisgICAgZ2V0Rm9s ZGVySW5mbygkKCcuY3VycmVudHBhdGgnKS52YWwoKSk7CisgIH0pOworCisg IC8vIFByb3ZpZGUgaW5pdGlhbCB2YWx1ZXMgZm9yIHVwbG9hZCBmb3JtLCBz dGF0dXMsIGV0Yy4KKyAgc2V0VXBsb2FkZXIoZmlsZVJvb3QpOworCisgICQo JyN1cGxvYWRlcicpLmF0dHIoJ2FjdGlvbicsIGZpbGVDb25uZWN0b3IpOwor CisgIGRhdGEgPSB7CisgICAgJ0NhcGFiaWxpdGllcyc6IGNhcGFiaWxpdGll cworICB9OworICBpZiAoaGFzX2NhcGFiaWxpdHkoZGF0YSwgJ3VwbG9hZCcp KSB7CisgICAgRHJvcHpvbmUuYXV0b0Rpc2NvdmVyID0gZmFsc2U7CisgICAg Ly8gd2UgcmVtb3ZlIHNpbXBsZSBmaWxlIHVwbG9hZCBlbGVtZW50CisgICAg JCgnLmZpbGUtaW5wdXQtY29udGFpbmVyJykucmVtb3ZlKCk7CisgICAgJCgn LnVwbG9hZCcpLnJlbW92ZSgpOworICAgICQoICIuY3JlYXRlIiApLmJlZm9y ZSggJzxidXR0b24gdmFsdWU9IlVwbG9hZCIgdHlwZT0iYnV0dG9uIiB0aXRs ZT0iVXBsb2FkIEZpbGUiIG5hbWU9InVwbG9hZCIgaWQ9InVwbG9hZCIgY2xh c3M9ImJ0biBmYSBmYS11cGxvYWQgdXBsb2FkIj48c3Bhbj48L3NwYW4+PC9i dXR0b24+ICcgKTsKKworICAgICQoJy51cGxvYWQnKS51bmJpbmQoKS5jbGlj ayhmdW5jdGlvbigpIHsKKyAgICAgIC8vIHdlIGNyZWF0ZSBwcm9tcHQKKyAg ICAgIHZhciBtc2cgID0gJzxkaXYgaWQ9ImRyb3B6b25lLWNvbnRhaW5lciI+ JzsKKyAgICAgICAgbXNnICs9ICc8YnV0dG9uIGNsYXNzPSJmYSBmYS10aW1l cyBkel9jcm9zc19idG4iPjwvYnV0dG9uPic7CisgICAgICAgIG1zZyArPSAn PGRpdiBpZD0ibXVsdGlwbGUtdXBsb2FkcyIgY2xhc3M9ImRyb3B6b25lIj48 L2Rpdj4nOworICAgICAgICBtc2cgKz0gJzxkaXYgY2xhc3M9InByb21wdC1p bmZvIj4nK2xnLmZpbGVfc2l6ZV9saW1pdCArIGNvbmZpZy51cGxvYWQuZmls ZVNpemVMaW1pdCArICcgJyArIGxnLm1iICsgJy48L2Rpdj4nOworCisgICAg ICBlcnJvcl9mbGFnID0gZmFsc2U7CisgICAgICB2YXIgcGF0aCA9ICQoJy5j dXJyZW50cGF0aCcpLnZhbCgpLAorICAgICAgICAgIGZpbGVTaXplID0gKGNv bmZpZy51cGxvYWQuZmlsZVNpemVMaW1pdCAhPSAnYXV0bycpID8gY29uZmln LnVwbG9hZC5maWxlU2l6ZUxpbWl0IDogMjU2OyAvLyBkZWZhdWx0IGRyb3B6 b25lIHZhbHVlCisKKyAgICAgIGlmKGNvbmZpZy5zZWN1cml0eS51cGxvYWRQ b2xpY3kgPT0gJ0RJU0FMTE9XX0FMTCcpIHsKKyAgICAgICAgdmFyIGFsbG93 ZWRGaWxlcyA9ICcuJyArIGNvbmZpZy5zZWN1cml0eS51cGxvYWRSZXN0cmlj dGlvbnMuam9pbignLC4nKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8v IHdlIGFsbG93IGFueSBleHRlbnNpb24gc2luY2Ugd2UgaGF2ZSBubyBlYXN5 IHdheSB0byBoYW5kbGUgdGhlIHRoZSBidWlsdC1pbiBgYWNjZXB0ZWRGaWxl c2AgcGFyYW1zCisgICAgICAgIC8vIFdvdWxkIGJlIGhhbmRsZWQgbGF0ZXIg YnkgdGhlIGNvbm5lY3RvcgorICAgICAgICB2YXIgYWxsb3dlZEZpbGVzID0g bnVsbDsKKyAgICAgIH0KKworICAgICAgaWYgKCQudXJsUGFyYW0oJ3R5cGUn KS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gJ2ltYWdlcycgfHwgY29u ZmlnLnVwbG9hZC5pbWFnZXNPbmx5KSB7CisgICAgICAgIHZhciBhbGxvd2Vk RmlsZXMgPSAnLicgKyBjb25maWcuaW1hZ2VzLmltYWdlc0V4dC5qb2luKCcs LicpOworICAgICAgfQorCisgICAgICAkKCcuZmlsZV9tYW5hZ2VyIC51cGxv YWRfZmlsZScpLnRvZ2dsZSgpOworICAgICAgJCgnLmZpbGVfbWFuYWdlciAu dXBsb2FkX2ZpbGUnKS5odG1sKG1zZyk7CisKKyAgICAgIC8vdmFyIHByZXZp ZXdUZW1wbGF0ZSA9ICc8ZGl2IGlkPSJkcm9wem9uZS1jb250YWluZXIiPic7 CisgICAgICB2YXIgcHJldmlld1RlbXBsYXRlID0gJzxkaXYgY2xhc3M9ImZp bGVfdXBsb2FkX21haW4gZHotcHJldmlldyBkei1maWxlLXByZXZpZXciPicr CisgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic2hvd19lcnJvciI+JysKKyAg ICAgICAgICAgICAgJzxwIGNsYXNzPSJzaXplIGR6LXNpemUiIGRhdGEtZHot c2l6ZT48L3A+JysKKyAgICAgICAgICAgICAgJzxwIGNsYXNzPSJuYW1lIGR6 LWZpbGVuYW1lIiBkYXRhLWR6LW5hbWU+PC9wPicrCisgICAgICAgICAgICAn PC9kaXY+JysKKyAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJkei1wcm9ncmVz cyI+PHNwYW4gY2xhc3M9ImR6LXVwbG9hZCIgZGF0YS1kei11cGxvYWRwcm9n cmVzcz48L3NwYW4+PC9kaXY+JysKKyAgICAgICAgICAgICc8ZGl2IGNsYXNz PSJkei1zdWNjZXNzLW1hcmsiPjxzcGFuPjwvc3Bhbj48L2Rpdj4nKworICAg ICAgICAgICAgJzxkaXYgY2xhc3M9ImR6LWVycm9yLW1hcmsiPjxzcGFuPjwv c3Bhbj48L2Rpdj4nKworICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImR6LWVy cm9yLW1lc3NhZ2UiPjxzcGFuIGRhdGEtZHotZXJyb3JtZXNzYWdlPjwvc3Bh bj48L2Rpdj4nKworICAgICAgICAgICAgJzxhIGhyZWY9ImphdmFzY3JpcHQ6 dm9pZCgwKTsiIGNsYXNzPSJmYSBmYS10cmFzaCBkel9maWxlX3JlbW92ZSIg ZGF0YS1kei1yZW1vdmU+PC9hPicrCisgICAgICAgICAgJzwvZGl2Pic7CisK KyAgICAgICQoImRpdiNtdWx0aXBsZS11cGxvYWRzIikuZHJvcHpvbmUoewor ICAgICAgICBwYXJhbU5hbWU6ICJuZXdmaWxlIiwKKyAgICAgICAgdXJsOiBm aWxlQ29ubmVjdG9yICsgJz9jb25maWc9JyArIHVzZXJjb25maWcsCisgICAg ICAgIG1heEZpbGVzaXplOiBmaWxlU2l6ZSwKKyAgICAgICAgbWF4RmlsZXM6 IGNvbmZpZy51cGxvYWQubnVtYmVyLAorICAgICAgICBhZGRSZW1vdmVMaW5r czogdHJ1ZSwKKyAgICAgICAgcHJldmlld1RlbXBsYXRlOiBwcmV2aWV3VGVt cGxhdGUsCisgICAgICAgIHBhcmFsbGVsVXBsb2FkczogY29uZmlnLnVwbG9h ZC5udW1iZXIsCisgICAgICAgIGRpY3RNYXhGaWxlc0V4Y2VlZGVkOiBsZy5k el9kaWN0TWF4RmlsZXNFeGNlZWRlZC5yZXBsYWNlKCIlcyIsIGNvbmZpZy51 cGxvYWQubnVtYmVyKSwKKyAgICAgICAgZGljdERlZmF1bHRNZXNzYWdlOiBs Zy5kel9kaWN0RGVmYXVsdE1lc3NhZ2UsCisgICAgICAgIGRpY3RJbnZhbGlk RmlsZVR5cGU6IGxnLmR6X2RpY3RJbnZhbGlkRmlsZVR5cGUsCisgICAgICAg IGRpY3RGaWxlVG9vQmlnOiBsZy5maWxlX3Rvb19iaWcgKyAnICcgKyBsZy5m aWxlX3NpemVfbGltaXQgKyBjb25maWcudXBsb2FkLmZpbGVTaXplTGltaXQg KyAnICcgKyBsZy5tYiwKKyAgICAgICAgYWNjZXB0ZWRGaWxlczogYWxsb3dl ZEZpbGVzLAorICAgICAgICBhdXRvUHJvY2Vzc1F1ZXVlOiB0cnVlLAorICAg ICAgICBpbml0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgZHJvcHpv bmUgPSB0aGlzOworICAgICAgICAgICQoJy5kel9jcm9zc19idG4nKS51bmJp bmQoKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICQo Jy5maWxlX21hbmFnZXIgLnVwbG9hZF9maWxlJykudG9nZ2xlKCk7CisgICAg ICAgICAgfSk7CisKKyAgICAgICAgfSwKKyAgICAgICAgc2VuZGluZzogZnVu Y3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkgeworICAgICAgICAgIGZvcm1E YXRhLmFwcGVuZCgibW9kZSIsICJhZGQiKTsKKyAgICAgICAgICBmb3JtRGF0 YS5hcHBlbmQoImN1cnJlbnRwYXRoIiwgcGF0aCk7CisgICAgICAgICAgJCgn LnVwbG9hZF9maWxlIC5kel9jcm9zc19idG4nKS5hdHRyKCdkaXNhYmxlZCcs ICdkaXNhYmxlZCcpOworICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o KSB7fSwgMTAwMDApOworICAgICAgICB9LAorICAgICAgICBzdWNjZXNzOiBm dW5jdGlvbihmaWxlLCByZXNwb25zZSkgeworICAgICAgICAgIHZhciByZXNw b25zZSA9IGpRdWVyeS5wYXJzZUpTT04ocmVzcG9uc2UpLAorICAgICAgICAg ICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YS5yZXN1bHQsCisgICAgICAgICAg ICAgICR0aGlzID0gJChmaWxlLnByZXZpZXdUZW1wbGF0ZSk7CisKKyAgICAg ICAgICBpZiAoZGF0YVsnQ29kZSddID09IDApIHsKKyAgICAgICAgICAgIHNl dFRpbWVvdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgJHRoaXMuZmlu ZCgiLmR6LXVwbG9hZCIpLmFkZENsYXNzKCJzdWNjZXNzIik7CisgICAgICAg ICAgICB9LCAxMDAwKTsKKyAgICAgICAgICAgICR0aGlzLmZpbmQoIi5kei11 cGxvYWQiKS5jc3MoJ3dpZHRoJywgIjEwMCUiKS5odG1sKCIxMDAlIik7Cisg ICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGxnLnVwbG9hZF9zdWNjZXNz KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHRoaXMuZmlu ZCgiLmR6LXVwbG9hZCIpLmFkZENsYXNzKCJlcnJvciIpOworICAgICAgICAg ICAgJHRoaXMuZmluZCgiLmR6LXVwbG9hZCIpLmNzcygnd2lkdGgnLCAiMCUi KS5odG1sKCIwJSIpOworICAgICAgICAgICAgYWxlcnRpZnkuZXJyb3IoZGF0 YVsnRXJyb3InXSk7CisgICAgICAgICAgfQorICAgICAgICAgIGdldEZvbGRl ckluZm8ocGF0aCk7CisgICAgICAgIH0sCisgICAgICAgIHRvdGFsdXBsb2Fk cHJvZ3Jlc3M6IGZ1bmN0aW9uKHByb2dyZXNzKSB7CisgICAgICAgIH0sCisg ICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbihmaWxlKSB7CisgICAgICAgICAg aWYgKHRoaXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGggPT09IDAgJiYg dGhpcy5nZXRRdWV1ZWRGaWxlcygpLmxlbmd0aCA9PT0gMCkgeworICAgICAg ICAgIH0KKyAgICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT0gImVycm9yIikg eworICAgICAgICAgICAgYWxlcnRpZnkuZXJyb3IoIkVycm9yIHVwbG9hZGlu ZyBmaWxlIik7CisgICAgICAgICAgfQorICAgICAgICAgICQoJy51cGxvYWRf ZmlsZSAuZHpfY3Jvc3NfYnRuJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsK KyAgICAgICAgICBnZXRGb2xkZXJJbmZvKHBhdGgpOworICAgICAgICB9Cisg ICAgICB9KTsKKworICAgIH0pOworICB9CisKKyAgLy8gRGlzYWJsZSBzZWxl Y3QgZnVuY3Rpb24gaWYgbm8gd2luZG93Lm9wZW5lcgorICBpZighICh3aW5k b3cub3BlbmVyIHx8IHdpbmRvdy50aW55TUNFUG9wdXApICkgJCgnI2l0ZW1P cHRpb25zIGFbaHJlZiQ9IiNzZWxlY3QiXScpLnJlbW92ZSgpOworICAvLyBL ZWVwIG9ubHkgYnJvd3NlT25seSBmZWF0dXJlcyBpZiBuZWVkZWQKKyAgaWYo Y29uZmlnLm9wdGlvbnMuYnJvd3NlT25seSA9PSB0cnVlKSB7CisgICAgJCgn Lm5ld2ZpbGUnKS5yZW1vdmUoKTsKKyAgICAkKCcudXBsb2FkJykucmVtb3Zl KCk7CisgICAgJCgnLmNyZWF0ZScpLnJlbW92ZSgpOworICAgICQoJyN0b29s YmFyJykucmVtb3ZlKCcucmVuYW1lJyk7CisgICAgJCgnLmNvbnRleHRNZW51 IC5yZW5hbWUnKS5yZW1vdmUoKTsKKyAgICAkKCcuY29udGV4dE1lbnUgLmRl bGV0ZScpLnJlbW92ZSgpOworICB9CisgIGdldERldGFpbFZpZXcoZmlsZVJv b3QgKyBleHBhbmRlZEZvbGRlcik7Cit9KTsKKworfSkoalF1ZXJ5KTsKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3MvanF1ZXJ5LmRyb3B6 b25lL2Ryb3B6b25lLmNzcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3MvanF1 ZXJ5LmRyb3B6b25lL2Ryb3B6b25lLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4wNDk0ZDFjCi0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vc3RhdGljL2Nzcy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpv bmUuY3NzCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogVGhlIE1JVCBMaWNl bnNlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgTWF0aWFzIE1lbm8gPG1AdGlh cy5tZT4KKyAqLworQC13ZWJraXQta2V5ZnJhbWVzIHBhc3NpbmctdGhyb3Vn aCB7CisgIDAlIHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJh bnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tb3otdHJhbnNmb3Jt OiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5z bGF0ZVkoNDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQw cHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsgfQorICAz MCUsIDcwJSB7CisgICAgb3BhY2l0eTogMTsKKyAgICAtd2Via2l0LXRyYW5z Zm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0 cmFuc2xhdGVZKDBweCk7CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRl WSgwcHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwor ICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9CisgIDEwMCUgewor ICAgIG9wYWNpdHk6IDA7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5z bGF0ZVkoLTQwcHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZ KC00MHB4KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4 KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAg IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7IH0gfQorQC1tb3ota2V5 ZnJhbWVzIHBhc3NpbmctdGhyb3VnaCB7CisgIDAlIHsKKyAgICBvcGFjaXR5 OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgp OworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAg IC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW8tdHJh bnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIHRyYW5zZm9ybTogdHJh bnNsYXRlWSg0MHB4KTsgfQorICAzMCUsIDcwJSB7CisgICAgb3BhY2l0eTog MTsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwor ICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1z LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1vLXRyYW5zZm9y bTogdHJhbnNsYXRlWSgwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRl WSgwcHgpOyB9CisgIDEwMCUgeworICAgIG9wYWNpdHk6IDA7CisgICAgLXdl YmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpOworICAgIC1tb3ot dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAgICAtbXMtdHJhbnNm b3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRy YW5zbGF0ZVkoLTQwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgt NDBweCk7IH0gfQorQGtleWZyYW1lcyBwYXNzaW5nLXRocm91Z2ggeworICAw JSB7CisgICAgb3BhY2l0eTogMDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTog dHJhbnNsYXRlWSg0MHB4KTsKKyAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNs YXRlWSg0MHB4KTsKKyAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQw cHgpOworICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAg ICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7IH0KKyAgMzAlLCA3MCUg eworICAgIG9wYWNpdHk6IDE7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRy YW5zbGF0ZVkoMHB4KTsKKyAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRl WSgwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsK KyAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICB0cmFu c2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsgfQorICAxMDAlIHsKKyAgICBvcGFj aXR5OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00 MHB4KTsKKyAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7 CisgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7CisgICAg LW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KTsKKyAgICB0cmFuc2Zv cm06IHRyYW5zbGF0ZVkoLTQwcHgpOyB9IH0KK0Atd2Via2l0LWtleWZyYW1l cyBzbGlkZS1pbiB7CisgIDAlIHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13 ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tb3ot dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1tcy10cmFuc2Zv cm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFu c2xhdGVZKDQwcHgpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4 KTsgfQorICAzMCUgeworICAgIG9wYWNpdHk6IDE7CisgICAgLXdlYmtpdC10 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtbW96LXRyYW5zZm9y bTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tcy10cmFuc2Zvcm06IHRyYW5z bGF0ZVkoMHB4KTsKKyAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4 KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsgfSB9CitALW1v ei1rZXlmcmFtZXMgc2xpZGUtaW4geworICAwJSB7CisgICAgb3BhY2l0eTog MDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsK KyAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICAt bXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIC1vLXRyYW5z Zm9ybTogdHJhbnNsYXRlWSg0MHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5z bGF0ZVkoNDBweCk7IH0KKyAgMzAlIHsKKyAgICBvcGFjaXR5OiAxOworICAg IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW1v ei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtbXMtdHJhbnNm b3JtOiB0cmFuc2xhdGVZKDBweCk7CisgICAgLW8tdHJhbnNmb3JtOiB0cmFu c2xhdGVZKDBweCk7CisgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7 IH0gfQorQGtleWZyYW1lcyBzbGlkZS1pbiB7CisgIDAlIHsKKyAgICBvcGFj aXR5OiAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQw cHgpOworICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOwor ICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7CisgICAgLW8t dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDQwcHgpOworICAgIHRyYW5zZm9ybTog dHJhbnNsYXRlWSg0MHB4KTsgfQorICAzMCUgeworICAgIG9wYWNpdHk6IDE7 CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAg ICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOworICAgIC1tcy10 cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICAtby10cmFuc2Zvcm06 IHRyYW5zbGF0ZVkoMHB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVko MHB4KTsgfSB9CitALXdlYmtpdC1rZXlmcmFtZXMgcHVsc2UgeworICAwJSB7 CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1tb3ot dHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2Fs ZSgxKTsKKyAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIHRyYW5z Zm9ybTogc2NhbGUoMSk7IH0KKyAgMTAlIHsKKyAgICAtd2Via2l0LXRyYW5z Zm9ybTogc2NhbGUoMS4xKTsKKyAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUo MS4xKTsKKyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLjEpOworICAgIC1v LXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICB0cmFuc2Zvcm06IHNjYWxl KDEuMSk7IH0KKyAgMjAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2Nh bGUoMSk7CisgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1t cy10cmFuc2Zvcm06IHNjYWxlKDEpOworICAgIC1vLXRyYW5zZm9ybTogc2Nh bGUoMSk7CisgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSB9CitALW1vei1r ZXlmcmFtZXMgcHVsc2UgeworICAwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zv cm06IHNjYWxlKDEpOworICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxKTsK KyAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtby10cmFuc2Zv cm06IHNjYWxlKDEpOworICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7IH0KKyAg MTAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAg ICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICAtbXMtdHJhbnNm b3JtOiBzY2FsZSgxLjEpOworICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMS4x KTsKKyAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH0KKyAgMjAlIHsKKyAg ICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW1vei10cmFu c2Zvcm06IHNjYWxlKDEpOworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEp OworICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgdHJhbnNmb3Jt OiBzY2FsZSgxKTsgfSB9CitAa2V5ZnJhbWVzIHB1bHNlIHsKKyAgMCUgewor ICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbW96LXRy YW5zZm9ybTogc2NhbGUoMSk7CisgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUo MSk7CisgICAgLW8tdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICB0cmFuc2Zv cm06IHNjYWxlKDEpOyB9CisgIDEwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zv cm06IHNjYWxlKDEuMSk7CisgICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEu MSk7CisgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKKyAgICAtby10 cmFuc2Zvcm06IHNjYWxlKDEuMSk7CisgICAgdHJhbnNmb3JtOiBzY2FsZSgx LjEpOyB9CisgIDIwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxl KDEpOworICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtbXMt dHJhbnNmb3JtOiBzY2FsZSgxKTsKKyAgICAtby10cmFuc2Zvcm06IHNjYWxl KDEpOworICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7IH0gfQorLmRyb3B6b25l LCAuZHJvcHpvbmUgKiB7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0K KworLmRyb3B6b25lIHsKKyAgbWluLWhlaWdodDogMTUwcHg7CisgIGJvcmRl cjogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTsKKyAgYmFja2dyb3Vu ZDogd2hpdGU7CisgIHBhZGRpbmc6IDIwcHggMjBweDsgfQorICAuZHJvcHpv bmUuZHotY2xpY2thYmxlIHsKKyAgICBjdXJzb3I6IHBvaW50ZXI7IH0KKyAg ICAuZHJvcHpvbmUuZHotY2xpY2thYmxlICogeworICAgICAgY3Vyc29yOiBk ZWZhdWx0OyB9CisgICAgLmRyb3B6b25lLmR6LWNsaWNrYWJsZSAuZHotbWVz c2FnZSwgLmRyb3B6b25lLmR6LWNsaWNrYWJsZSAuZHotbWVzc2FnZSAqIHsK KyAgICAgIGN1cnNvcjogcG9pbnRlcjsgfQorICAuZHJvcHpvbmUuZHotc3Rh cnRlZCAuZHotbWVzc2FnZSB7CisgICAgZGlzcGxheTogbm9uZTsgfQorICAu ZHJvcHpvbmUuZHotZHJhZy1ob3ZlciB7CisgICAgYm9yZGVyLXN0eWxlOiBz b2xpZDsgfQorICAgIC5kcm9wem9uZS5kei1kcmFnLWhvdmVyIC5kei1tZXNz YWdlIHsKKyAgICAgIG9wYWNpdHk6IDAuNTsgfQorICAuZHJvcHpvbmUgLmR6 LW1lc3NhZ2UgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBtYXJn aW46IDJlbSAwOyB9CisgIC5kcm9wem9uZSAuZHotcHJldmlldyB7CisgICAg cG9zaXRpb246IHJlbGF0aXZlOworICAgIGRpc3BsYXk6IGlubGluZS1ibG9j azsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworICAgIG1hcmdpbjogMTZw eDsKKyAgICBtaW4taGVpZ2h0OiAxMDBweDsgfQorICAgIC5kcm9wem9uZSAu ZHotcHJldmlldzpob3ZlciB7CisgICAgICB6LWluZGV4OiAxMDAwOyB9Cisg ICAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXc6aG92ZXIgLmR6LWRldGFpbHMg eworICAgICAgICBvcGFjaXR5OiAxOyB9CisgICAgLmRyb3B6b25lIC5kei1w cmV2aWV3LmR6LWZpbGUtcHJldmlldyAuZHotaW1hZ2UgeworICAgICAgYm9y ZGVyLXJhZGl1czogMjBweDsKKyAgICAgIGJhY2tncm91bmQ6ICM5OTk7Cisg ICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAj ZWVlLCAjZGRkKTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldy5kei1m aWxlLXByZXZpZXcgLmR6LWRldGFpbHMgeworICAgICAgb3BhY2l0eTogMTsg fQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldy5kei1pbWFnZS1wcmV2aWV3 IHsKKyAgICAgIGJhY2tncm91bmQ6IHdoaXRlOyB9CisgICAgICAuZHJvcHpv bmUgLmR6LXByZXZpZXcuZHotaW1hZ2UtcHJldmlldyAuZHotZGV0YWlscyB7 CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGxp bmVhcjsKKyAgICAgICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMg bGluZWFyOworICAgICAgICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJz IGxpbmVhcjsKKyAgICAgICAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJz IGxpbmVhcjsKKyAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGxp bmVhcjsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotcmVtb3Zl IHsKKyAgICAgIGZvbnQtc2l6ZTogMTRweDsKKyAgICAgIHRleHQtYWxpZ246 IGNlbnRlcjsKKyAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgY3Vyc29y OiBwb2ludGVyOworICAgICAgYm9yZGVyOiBub25lOyB9CisgICAgICAuZHJv cHpvbmUgLmR6LXByZXZpZXcgLmR6LXJlbW92ZTpob3ZlciB7CisgICAgICAg IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CisgICAgLmRyb3B6b25l IC5kei1wcmV2aWV3OmhvdmVyIC5kei1kZXRhaWxzIHsKKyAgICAgIG9wYWNp dHk6IDE7IH0KKyAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFp bHMgeworICAgICAgei1pbmRleDogMjA7CisgICAgICBwb3NpdGlvbjogYWJz b2x1dGU7CisgICAgICB0b3A6IDA7CisgICAgICBsZWZ0OiAwOworICAgICAg b3BhY2l0eTogMDsKKyAgICAgIGZvbnQtc2l6ZTogMTNweDsKKyAgICAgIG1p bi13aWR0aDogMTAwJTsKKyAgICAgIG1heC13aWR0aDogMTAwJTsKKyAgICAg IHBhZGRpbmc6IDJlbSAxZW07CisgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7 CisgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpOworICAgICAgbGlu ZS1oZWlnaHQ6IDE1MCU7IH0KKyAgICAgIC5kcm9wem9uZSAuZHotcHJldmll dyAuZHotZGV0YWlscyAuZHotc2l6ZSB7CisgICAgICAgIG1hcmdpbi1ib3R0 b206IDFlbTsKKyAgICAgICAgZm9udC1zaXplOiAxNnB4OyB9CisgICAgICAu ZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVuYW1l IHsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQorICAgICAgICAu ZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVuYW1l OmhvdmVyIHNwYW4geworICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJn YmEoMjAwLCAyMDAsIDIwMCwgMC44KTsKKyAgICAgICAgICBiYWNrZ3JvdW5k LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7IH0KKyAgICAgICAg LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1kZXRhaWxzIC5kei1maWxlbmFt ZTpub3QoOmhvdmVyKSB7CisgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsK KyAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfQorICAgICAg ICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotZmls ZW5hbWU6bm90KDpob3Zlcikgc3BhbiB7CisgICAgICAgICAgICBib3JkZXI6 IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgfQorICAgICAgLmRyb3B6b25lIC5k ei1wcmV2aWV3IC5kei1kZXRhaWxzIC5kei1maWxlbmFtZSBzcGFuLCAuZHJv cHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LXNpemUgc3BhbiB7 CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1 NSwgMC40KTsKKyAgICAgICAgcGFkZGluZzogMCAwLjRlbTsKKyAgICAgICAg Ym9yZGVyLXJhZGl1czogM3B4OyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2 aWV3OmhvdmVyIC5kei1pbWFnZSBpbWcgeworICAgICAgLXdlYmtpdC10cmFu c2Zvcm06IHNjYWxlKDEuMDUsIDEuMDUpOworICAgICAgLW1vei10cmFuc2Zv cm06IHNjYWxlKDEuMDUsIDEuMDUpOworICAgICAgLW1zLXRyYW5zZm9ybTog c2NhbGUoMS4wNSwgMS4wNSk7CisgICAgICAtby10cmFuc2Zvcm06IHNjYWxl KDEuMDUsIDEuMDUpOworICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1LCAx LjA1KTsKKyAgICAgIC13ZWJraXQtZmlsdGVyOiBibHVyKDhweCk7CisgICAg ICBmaWx0ZXI6IGJsdXIoOHB4KTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJl dmlldyAuZHotaW1hZ2UgeworICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsK KyAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgICB3aWR0aDogMTIwcHg7 CisgICAgICBoZWlnaHQ6IDEyMHB4OworICAgICAgcG9zaXRpb246IHJlbGF0 aXZlOworICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICB6LWluZGV4OiAx MDsgfQorICAgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1pbWFnZSBp bWcgeworICAgICAgICBkaXNwbGF5OiBibG9jazsgfQorICAgIC5kcm9wem9u ZSAuZHotcHJldmlldy5kei1zdWNjZXNzIC5kei1zdWNjZXNzLW1hcmsgewor ICAgICAgLXdlYmtpdC1hbmltYXRpb246IHBhc3NpbmctdGhyb3VnaCAzcyBj dWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpOworICAgICAgLW1vei1h bmltYXRpb246IHBhc3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43 NywgMCwgMC4xNzUsIDEpOworICAgICAgLW1zLWFuaW1hdGlvbjogcGFzc2lu Zy10aHJvdWdoIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7 CisgICAgICAtby1hbmltYXRpb246IHBhc3NpbmctdGhyb3VnaCAzcyBjdWJp Yy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpOworICAgICAgYW5pbWF0aW9u OiBwYXNzaW5nLXRocm91Z2ggM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAu MTc1LCAxKTsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldy5kei1lcnJv ciAuZHotZXJyb3ItbWFyayB7CisgICAgICBvcGFjaXR5OiAxOworICAgICAg LXdlYmtpdC1hbmltYXRpb246IHNsaWRlLWluIDNzIGN1YmljLWJlemllcigw Ljc3LCAwLCAwLjE3NSwgMSk7CisgICAgICAtbW96LWFuaW1hdGlvbjogc2xp ZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAxKTsKKyAg ICAgIC1tcy1hbmltYXRpb246IHNsaWRlLWluIDNzIGN1YmljLWJlemllcigw Ljc3LCAwLCAwLjE3NSwgMSk7CisgICAgICAtby1hbmltYXRpb246IHNsaWRl LWluIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7CisgICAg ICBhbmltYXRpb246IHNsaWRlLWluIDNzIGN1YmljLWJlemllcigwLjc3LCAw LCAwLjE3NSwgMSk7IH0KKyAgICAuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6 LXN1Y2Nlc3MtbWFyaywgLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1lcnJv ci1tYXJrIHsKKyAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOworICAgICAg b3BhY2l0eTogMDsKKyAgICAgIHotaW5kZXg6IDUwMDsKKyAgICAgIHBvc2l0 aW9uOiBhYnNvbHV0ZTsKKyAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAg dG9wOiA1MCU7CisgICAgICBsZWZ0OiA1MCU7CisgICAgICBtYXJnaW4tbGVm dDogLTI3cHg7CisgICAgICBtYXJnaW4tdG9wOiAtMjdweDsgfQorICAgICAg LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1zdWNjZXNzLW1hcmsgc3ZnLCAu ZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWVycm9yLW1hcmsgc3ZnIHsKKyAg ICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgIHdpZHRoOiA1NHB4Owor ICAgICAgICBoZWlnaHQ6IDU0cHg7IH0KKyAgICAuZHJvcHpvbmUgLmR6LXBy ZXZpZXcuZHotcHJvY2Vzc2luZyAuZHotcHJvZ3Jlc3MgeworICAgICAgb3Bh Y2l0eTogMTsKKyAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnMg bGluZWFyOworICAgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4ycyBsaW5l YXI7CisgICAgICAtbXMtdHJhbnNpdGlvbjogYWxsIDAuMnMgbGluZWFyOwor ICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnMgbGluZWFyOworICAgICAg dHJhbnNpdGlvbjogYWxsIDAuMnMgbGluZWFyOyB9CisgICAgLmRyb3B6b25l IC5kei1wcmV2aWV3LmR6LWNvbXBsZXRlIC5kei1wcm9ncmVzcyB7CisgICAg ICBvcGFjaXR5OiAwOworICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFj aXR5IDAuNHMgZWFzZS1pbjsKKyAgICAgIC1tb3otdHJhbnNpdGlvbjogb3Bh Y2l0eSAwLjRzIGVhc2UtaW47CisgICAgICAtbXMtdHJhbnNpdGlvbjogb3Bh Y2l0eSAwLjRzIGVhc2UtaW47CisgICAgICAtby10cmFuc2l0aW9uOiBvcGFj aXR5IDAuNHMgZWFzZS1pbjsKKyAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkg MC40cyBlYXNlLWluOyB9CisgICAgLmRyb3B6b25lIC5kei1wcmV2aWV3Om5v dCguZHotcHJvY2Vzc2luZykgLmR6LXByb2dyZXNzIHsKKyAgICAgIC13ZWJr aXQtYW5pbWF0aW9uOiBwdWxzZSA2cyBlYXNlIGluZmluaXRlOworICAgICAg LW1vei1hbmltYXRpb246IHB1bHNlIDZzIGVhc2UgaW5maW5pdGU7CisgICAg ICAtbXMtYW5pbWF0aW9uOiBwdWxzZSA2cyBlYXNlIGluZmluaXRlOworICAg ICAgLW8tYW5pbWF0aW9uOiBwdWxzZSA2cyBlYXNlIGluZmluaXRlOworICAg ICAgYW5pbWF0aW9uOiBwdWxzZSA2cyBlYXNlIGluZmluaXRlOyB9CisgICAg LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1wcm9ncmVzcyB7CisgICAgICBv cGFjaXR5OiAxOworICAgICAgei1pbmRleDogMTAwMDsKKyAgICAgIHBvaW50 ZXItZXZlbnRzOiBub25lOworICAgICAgcG9zaXRpb246IGFic29sdXRlOwor ICAgICAgaGVpZ2h0OiAxNnB4OworICAgICAgbGVmdDogNTAlOworICAgICAg dG9wOiA1MCU7CisgICAgICBtYXJnaW4tdG9wOiAtOHB4OworICAgICAgd2lk dGg6IDgwcHg7CisgICAgICBtYXJnaW4tbGVmdDogLTQwcHg7CisgICAgICBi YWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CisgICAgICAt d2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CisgICAgICBib3JkZXItcmFk aXVzOiA4cHg7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOyB9CisgICAgICAu ZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LXByb2dyZXNzIC5kei11cGxvYWQg eworICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzOworICAgICAgICBiYWNrZ3Jv dW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNjY2LCAjNDQ0KTsK KyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICB0b3A6IDA7 CisgICAgICAgIGxlZnQ6IDA7CisgICAgICAgIGJvdHRvbTogMDsKKyAgICAg ICAgd2lkdGg6IDA7CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogd2lk dGggMzAwbXMgZWFzZS1pbi1vdXQ7CisgICAgICAgIC1tb3otdHJhbnNpdGlv bjogd2lkdGggMzAwbXMgZWFzZS1pbi1vdXQ7CisgICAgICAgIC1tcy10cmFu c2l0aW9uOiB3aWR0aCAzMDBtcyBlYXNlLWluLW91dDsKKyAgICAgICAgLW8t dHJhbnNpdGlvbjogd2lkdGggMzAwbXMgZWFzZS1pbi1vdXQ7CisgICAgICAg IHRyYW5zaXRpb246IHdpZHRoIDMwMG1zIGVhc2UtaW4tb3V0OyB9CisgICAg LmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWVycm9yIC5kei1lcnJvci1tZXNz YWdlIHsKKyAgICAgIGRpc3BsYXk6IGJsb2NrOyB9CisgICAgLmRyb3B6b25l IC5kei1wcmV2aWV3LmR6LWVycm9yOmhvdmVyIC5kei1lcnJvci1tZXNzYWdl IHsKKyAgICAgIG9wYWNpdHk6IDE7CisgICAgICBwb2ludGVyLWV2ZW50czog YXV0bzsgfQorICAgIC5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZXJyb3It bWVzc2FnZSB7CisgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKKyAgICAg IHotaW5kZXg6IDEwMDA7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg ICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgIGRpc3BsYXk6IG5vbmU7Cisg ICAgICBvcGFjaXR5OiAwOworICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBv cGFjaXR5IDAuM3MgZWFzZTsKKyAgICAgIC1tb3otdHJhbnNpdGlvbjogb3Bh Y2l0eSAwLjNzIGVhc2U7CisgICAgICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0 eSAwLjNzIGVhc2U7CisgICAgICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAu M3MgZWFzZTsKKyAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNl OworICAgICAgYm9yZGVyLXJhZGl1czogOHB4OworICAgICAgZm9udC1zaXpl OiAxM3B4OworICAgICAgdG9wOiAxMzBweDsKKyAgICAgIGxlZnQ6IC0xMHB4 OworICAgICAgd2lkdGg6IDE0MHB4OworICAgICAgYmFja2dyb3VuZDogI2Jl MjYyNjsKKyAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBi b3R0b20sICNiZTI2MjYsICNhOTIyMjIpOworICAgICAgcGFkZGluZzogMC41 ZW0gMS4yZW07CisgICAgICBjb2xvcjogd2hpdGU7IH0KKyAgICAgIC5kcm9w em9uZSAuZHotcHJldmlldyAuZHotZXJyb3ItbWVzc2FnZTphZnRlciB7Cisg ICAgICAgIGNvbnRlbnQ6ICcnOworICAgICAgICBwb3NpdGlvbjogYWJzb2x1 dGU7CisgICAgICAgIHRvcDogLTZweDsKKyAgICAgICAgbGVmdDogNjRweDsK KyAgICAgICAgd2lkdGg6IDA7CisgICAgICAgIGhlaWdodDogMDsKKyAgICAg ICAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICAg ICAgYm9yZGVyLXJpZ2h0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAg ICAgIGJvcmRlci1ib3R0b206IDZweCBzb2xpZCAjYmUyNjI2OyB9CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvY3NzL292ZXJyaWRlcy5jc3Mg Yi93ZWIvcGdhZG1pbi9zdGF0aWMvY3NzL292ZXJyaWRlcy5jc3MKaW5kZXgg MTkyN2ZmMS4uZjQ2Y2VjNCAxMDA3NTUKLS0tIGEvd2ViL3BnYWRtaW4vc3Rh dGljL2Nzcy9vdmVycmlkZXMuY3NzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9jc3Mvb3ZlcnJpZGVzLmNzcwpAQCAtMTEwMSwzICsxMTAxLDQ2IEBAIGJ1 dHRvbi5wZy1hbGVydGlmeS1idXR0b24gewogZGl2LmJhY2tmb3JtX2NvbnRy b2xfbm90ZXMgbGFiZWwuY29udHJvbC1sYWJlbCB7CiAgIG1pbi13aWR0aDog MHB4OwogfQorCisuZmlsZV9zZWxlY3Rpb25fY3RybCAuY3JlYXRlX2lucHV0 IHNwYW4geworICBwYWRkaW5nLXJpZ2h0OiAxMHB4OworICBmb250LXdlaWdo dDogYm9sZDsKK30KKworLmZpbGVfc2VsZWN0aW9uX2N0cmwgLmNyZWF0ZV9p bnB1dCBpbnB1dFt0eXBlPSJ0ZXh0Il0geworICBoZWlnaHQ6IDIzcHg7Cisg IHBhZGRpbmc6IDJweDsKKyAgd2lkdGg6IDE5NHB4OworICBib3JkZXItcmFk aXVzOiAycHg7Cit9CisKKy5maWxlX3NlbGVjdGlvbl9jdHJsIC5icm93c2Vf ZmlsZV9pbnB1dCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgd2lk dGg6IDIyMHB4OworICBtYXJnaW4tcmlnaHQ6IDA7Cit9CisKKy5maWxlX3Nl bGVjdGlvbl9jdHJsIGJ1dHRvbi5zZWxlY3RfaXRlbSB7CisgIGRpc3BsYXk6 IGlubGluZTsKKyAgYmFja2dyb3VuZDogIzc3NzsKKyAgYmFja2dyb3VuZDog LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoIzc3NywgIzk5OTk5OSk7CisgIGJh Y2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCgjNzc3LCAjOTk5KTsKKyAg YmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoIzc3NywgIzk5OSk7 CisgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgjNzc3LCAjOTk5KTsK KyAgY29sb3I6ICNmZmY7CisgIHBhZGRpbmc6IDlweCAwcHggOXB4IDBweDsK KyAgbWFyZ2luLXJpZ2h0OiAtN3B4OworICBtYXJnaW4tdG9wOiAtNHB4Owor ICBtaW4td2lkdGg6IDMwcHg7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6 IDA7CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7Cit9CisKKy5m aWxlX3NlbGVjdGlvbl9jdHJsIGlucHV0W3R5cGU9InRleHQiXSB7CisgIHdp ZHRoOiBjYWxjKDEwMCUgLSAyMnB4KTsKKyAgYm9yZGVyOiBub25lOworICBt YXJnaW4tbGVmdDogLTZweDsKKyAgbWFyZ2luLXRvcDogLTNweDsKKyAgaGVp Z2h0OiAzMnB4OworICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZm9ybS5wZ2FkbWluLmpz IGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2tmb3JtLnBnYWRtaW4uanMK aW5kZXggYWIyZjJmYi4uZWVlNGYzNSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRt aW4vc3RhdGljL2pzL2JhY2tmb3JtLnBnYWRtaW4uanMKKysrIGIvd2ViL3Bn YWRtaW4vc3RhdGljL2pzL2JhY2tmb3JtLnBnYWRtaW4uanMKQEAgLTIwMzMs NSArMjAzMyw2NSBAQAogICAgIF0uam9pbigiXG4iKSkKICAgfSk7CiAKKyAg LyoKKyAgKiBJbnB1dCBGaWxlIENvbnRyb2w6IFRoaXMgY29udHJvbCBpcyB1 c2VkIHdpdGggU3RvcmFnZSBNYW5hZ2VyIERpYWxvZywKKyAgKiBJdCBhbGxv d3MgdXNlciB0byBwZXJmb3JtIGZvbGxvd2luZyBvcGVyYXRpb25zOgorICAq IC0gU2VsZWN0IEZpbGUKKyAgKiAtIFNlbGVjdCBGb2xkZXIKKyAgKiAtIENy ZWF0ZSBGaWxlCisgICogLSBPcGVuaW5nIFN0b3JhZ2UgTWFuYWdlciBEaWFs b2cgaXRzZWxmLgorICAqLworICB2YXIgRmlsZUNvbnRyb2wgPSBCYWNrZm9y bS5GaWxlQ29udHJvbCA9IEJhY2tmb3JtLklucHV0Q29udHJvbC5leHRlbmQo eworICAgIGRlZmF1bHRzOiB7CisgICAgICB0eXBlOiAidGV4dCIsCisgICAg ICBsYWJlbDogIiIsCisgICAgICBtaW46IHVuZGVmaW5lZCwKKyAgICAgIG1h eDogdW5kZWZpbmVkLAorICAgICAgbWF4bGVuZ3RoOiAyNTUsCisgICAgICBl eHRyYUNsYXNzZXM6IFtdLAorICAgICAgaGVscE1lc3NhZ2U6IG51bGwsCisg ICAgICBkaWFsb2dfdHlwZTogJ3NlbGVjdF9maWxlJworICAgIH0sCisgICAg aW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKyAgICAgIEJhY2tmb3JtLklucHV0 Q29udHJvbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1 bWVudHMpOworCisgICAgICAvLyBMaXN0ZW4gY2xpY2sgZXZlbnRzIG9mIFN0 b3JhZ2UgTWFuYWdlciBkaWFsb2cgYnV0dG9ucworICAgICAgcGdBZG1pbi5C cm93c2VyLkV2ZW50cy5vbigncGdhZG1pbi1zdG9yYWdlOmZpbmlzaF9idG46 Jyt0aGlzLmZpZWxkLmdldCgnZGlhbG9nX3R5cGUnKSwgdGhpcy5zdG9yYWdl X2RsZ19oYW5kZXIsIHRoaXMpOworICAgIH0sCisgICAgdGVtcGxhdGU6IF8u dGVtcGxhdGUoWworICAgICAgJzxsYWJlbCBjbGFzcz0iPCU9QmFja2Zvcm0u Y29udHJvbExhYmVsQ2xhc3NOYW1lJT4iPjwlPWxhYmVsJT48L2xhYmVsPics CisgICAgICAnPGRpdiBjbGFzcz0iPCU9QmFja2Zvcm0uY29udHJvbHNDbGFz c05hbWUlPiI+JywKKyAgICAgICAgJzxkaXYgY2xhc3M9ImZpbGVfc2VsZWN0 aW9uX2N0cmwgZm9ybS1jb250cm9sIj4nLAorICAgICAgICAgICc8aW5wdXQg dHlwZT0iPCU9dHlwZSU+IiBjbGFzcz0iYnJvd3NlX2ZpbGVfaW5wdXQgPCU9 ZXh0cmFDbGFzc2VzLmpvaW4oXCcgXCcpJT4iIG5hbWU9IjwlPW5hbWUlPiIg bWluPSI8JT1taW4lPiIgbWF4PSI8JT1tYXglPiJtYXhsZW5ndGg9IjwlPW1h eGxlbmd0aCU+IiB2YWx1ZT0iPCUtdmFsdWUlPiIgcGxhY2Vob2xkZXI9Ijwl LXBsYWNlaG9sZGVyJT4iIDwlPWRpc2FibGVkID8gImRpc2FibGVkIiA6ICIi JT4gPCU9cmVxdWlyZWQgPyAicmVxdWlyZWQiIDogIiIlPiAvPicsCisgICAg ICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBmYSBmYS1lbGxpcHNpcy1oIHNl bGVjdF9pdGVtIHB1bGwtcmlnaHQiIDwlPWRpc2FibGVkID8gImRpc2FibGVk IiA6ICIiJT4gPjwvYnV0dG9uPicsCisgICAgICAgICAgJzwlIGlmIChoZWxw TWVzc2FnZSAmJiBoZWxwTWVzc2FnZS5sZW5ndGgpIHsgJT4nLAorICAgICAg ICAgICc8c3BhbiBjbGFzcz0iPCU9QmFja2Zvcm0uaGVscE1lc3NhZ2VDbGFz c05hbWUlPiI+PCU9aGVscE1lc3NhZ2UlPjwvc3Bhbj4nLAorICAgICAgICAg ICc8JSB9ICU+JywKKyAgICAgICAgJzwvZGl2PicsCisgICAgICAnPC9kaXY+ JworICAgIF0uam9pbigiXG4iKSksCisgICAgZXZlbnRzOiB7CisgICAgICAi Y2xpY2sgLnNlbGVjdF9pdGVtIjogIm9uU2VsZWN0IiwKKyAgICB9LAorICAg IG9uU2VsZWN0OiBmdW5jdGlvbihlKSB7CisgICAgICB2YXIgZGlhbG9nX3R5 cGUgPSB0aGlzLmZpZWxkLmdldCgnZGlhbG9nX3R5cGUnKTsKKyAgICAgICAg ICBzdXBwX3R5cGVzID0gdGhpcy5maWVsZC5nZXQoJ3N1cHBfdHlwZXMnKTsK KyAgICAgIHZhciBwYXJhbXMgPSB7CisgICAgICAgIHN1cHBvcnRlZF90eXBl czogc3VwcF90eXBlcywKKyAgICAgICAgZGlhbG9nX3R5cGU6IGRpYWxvZ190 eXBlCisgICAgICB9OworICAgICAgcGdBZG1pbi5GaWxlTWFuYWdlci5pbml0 KCk7CisgICAgICBwZ0FkbWluLkZpbGVNYW5hZ2VyLnNob3dfZGlhbG9nKHBh cmFtcyk7CisgICAgfSwKKyAgICBzdG9yYWdlX2RsZ19oYW5kZXI6IGZ1bmN0 aW9uKGUpIHsKKyAgICAgIHZhciBmaWVsZCA9IF8uZGVmYXVsdHModGhpcy5m aWVsZC50b0pTT04oKSwgdGhpcy5kZWZhdWx0cyksCisgICAgICAgICAgYXR0 ckFyciA9IHRoaXMuZmllbGQuZ2V0KCJuYW1lIikuc3BsaXQoJy4nKSwKKyAg ICAgICAgICBuYW1lID0gYXR0ckFyci5zaGlmdCgpOworCisgICAgICAvLyBT ZXQgc2VsZWN0ZWQgdmFsdWUgaW50byB0aGUgbW9kZWwKKyAgICAgIHRoaXMu bW9kZWwuc2V0KG5hbWUsIGUpOworICAgIH0KKyAgfSk7CisKICAgcmV0dXJu IEJhY2tmb3JtOwogfSkpOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3Rh dGljL2pzL2pxdWVyeS5kcm9wem9uZS9kcm9wem9uZS5qcyBiL3dlYi9wZ2Fk bWluL3N0YXRpYy9qcy9qcXVlcnkuZHJvcHpvbmUvZHJvcHpvbmUuanMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1ZjM5ZQotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9qcXVlcnku ZHJvcHpvbmUvZHJvcHpvbmUuanMKQEAgLTAsMCArMSwxNzY3IEBACisKKy8q CisgKgorICogTW9yZSBpbmZvIGF0IFt3d3cuZHJvcHpvbmVqcy5jb21dKGh0 dHA6Ly93d3cuZHJvcHpvbmVqcy5jb20pCisgKgorICogQ29weXJpZ2h0IChj KSAyMDEyLCBNYXRpYXMgTWVubworICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0 byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisg KiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxM IFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKwor KGZ1bmN0aW9uKCkgeworICB2YXIgRHJvcHpvbmUsIEVtaXR0ZXIsIGNhbWVs aXplLCBjb250ZW50TG9hZGVkLCBkZXRlY3RWZXJ0aWNhbFNxdWFzaCwgZHJh d0ltYWdlSU9TRml4LCBub29wLCB3aXRob3V0LAorICAgIF9fc2xpY2UgPSBb XS5zbGljZSwKKyAgICBfX2hhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eSwK KyAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZv ciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKF9faGFzUHJvcC5jYWxsKHBh cmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0 aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9y LnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlw ZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90 b3R5cGU7IHJldHVybiBjaGlsZDsgfTsKKworICBub29wID0gZnVuY3Rpb24o KSB7fTsKKworICBFbWl0dGVyID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0 aW9uIEVtaXR0ZXIoKSB7fQorCisgICAgRW1pdHRlci5wcm90b3R5cGUuYWRk RXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9uOworCisgICAg RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudCwgZm4pIHsK KyAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7 fTsKKyAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSkgeworICAg ICAgICB0aGlzLl9jYWxsYmFja3NbZXZlbnRdID0gW107CisgICAgICB9Cisg ICAgICB0aGlzLl9jYWxsYmFja3NbZXZlbnRdLnB1c2goZm4pOworICAgICAg cmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIEVtaXR0ZXIucHJvdG90eXBl LmVtaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBhcmdzLCBjYWxsYmFj aywgY2FsbGJhY2tzLCBldmVudCwgX2ksIF9sZW47CisgICAgICBldmVudCA9 IGFyZ3VtZW50c1swXSwgYXJncyA9IDIgPD0gYXJndW1lbnRzLmxlbmd0aCA/ IF9fc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107CisgICAgICB0aGlz Ll9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307CisgICAgICBj YWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdOworICAgICAgaWYg KGNhbGxiYWNrcykgeworICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGNh bGxiYWNrcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICAg IGNhbGxiYWNrID0gY2FsbGJhY2tzW19pXTsKKyAgICAgICAgICBjYWxsYmFj ay5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAgICAgfQorICAgICAgfQorICAg ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIEVtaXR0ZXIucHJvdG90 eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmOwor CisgICAgRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0g RW1pdHRlci5wcm90b3R5cGUub2ZmOworCisgICAgRW1pdHRlci5wcm90b3R5 cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9m ZjsKKworICAgIEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKGV2 ZW50LCBmbikgeworICAgICAgdmFyIGNhbGxiYWNrLCBjYWxsYmFja3MsIGks IF9pLCBfbGVuOworICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MgfHwgYXJn dW1lbnRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICB0aGlzLl9jYWxsYmFj a3MgPSB7fTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9CisgICAg ICBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdOworICAgICAg aWYgKCFjYWxsYmFja3MpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg ICB9CisgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgeworICAg ICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTsKKyAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgICB9CisgICAgICBmb3IgKGkgPSBfaSA9IDAs IF9sZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBfaSA8IF9sZW47IGkgPSArK19p KSB7CisgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tzW2ldOworICAgICAg ICBpZiAoY2FsbGJhY2sgPT09IGZuKSB7CisgICAgICAgICAgY2FsbGJhY2tz LnNwbGljZShpLCAxKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgICAgfQorICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIHJl dHVybiBFbWl0dGVyOworCisgIH0pKCk7CisKKyAgRHJvcHpvbmUgPSAoZnVu Y3Rpb24oX3N1cGVyKSB7CisgICAgdmFyIGV4dGVuZCwgcmVzb2x2ZU9wdGlv bjsKKworICAgIF9fZXh0ZW5kcyhEcm9wem9uZSwgX3N1cGVyKTsKKworICAg IERyb3B6b25lLnByb3RvdHlwZS5FbWl0dGVyID0gRW1pdHRlcjsKKworCisg ICAgLyoKKyAgICBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGV2 ZW50cyB5b3UgY2FuIHJlZ2lzdGVyIG9uIGEgZHJvcHpvbmUgb2JqZWN0Lgor CisgICAgWW91IGNhbiByZWdpc3RlciBhbiBldmVudCBoYW5kbGVyIGxpa2Ug dGhpczoKKworICAgICAgICBkcm9wem9uZS5vbigiZHJhZ0VudGVyIiwgZnVu Y3Rpb24oKSB7IH0pOworICAgICAqLworCisgICAgRHJvcHpvbmUucHJvdG90 eXBlLmV2ZW50cyA9IFsiZHJvcCIsICJkcmFnc3RhcnQiLCAiZHJhZ2VuZCIs ICJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJhZ2xlYXZlIiwgImFkZGVk ZmlsZSIsICJhZGRlZGZpbGVzIiwgInJlbW92ZWRmaWxlIiwgInRodW1ibmFp bCIsICJlcnJvciIsICJlcnJvcm11bHRpcGxlIiwgInByb2Nlc3NpbmciLCAi cHJvY2Vzc2luZ211bHRpcGxlIiwgInVwbG9hZHByb2dyZXNzIiwgInRvdGFs dXBsb2FkcHJvZ3Jlc3MiLCAic2VuZGluZyIsICJzZW5kaW5nbXVsdGlwbGUi LCAic3VjY2VzcyIsICJzdWNjZXNzbXVsdGlwbGUiLCAiY2FuY2VsZWQiLCAi Y2FuY2VsZWRtdWx0aXBsZSIsICJjb21wbGV0ZSIsICJjb21wbGV0ZW11bHRp cGxlIiwgInJlc2V0IiwgIm1heGZpbGVzZXhjZWVkZWQiLCAibWF4ZmlsZXNy ZWFjaGVkIiwgInF1ZXVlY29tcGxldGUiXTsKKworICAgIERyb3B6b25lLnBy b3RvdHlwZS5kZWZhdWx0T3B0aW9ucyA9IHsKKyAgICAgIHVybDogbnVsbCwK KyAgICAgIG1ldGhvZDogInBvc3QiLAorICAgICAgd2l0aENyZWRlbnRpYWxz OiBmYWxzZSwKKyAgICAgIHBhcmFsbGVsVXBsb2FkczogMiwKKyAgICAgIHVw bG9hZE11bHRpcGxlOiBmYWxzZSwKKyAgICAgIG1heEZpbGVzaXplOiAyNTYs CisgICAgICBwYXJhbU5hbWU6ICJmaWxlIiwKKyAgICAgIGNyZWF0ZUltYWdl VGh1bWJuYWlsczogdHJ1ZSwKKyAgICAgIG1heFRodW1ibmFpbEZpbGVzaXpl OiAxMCwKKyAgICAgIHRodW1ibmFpbFdpZHRoOiAxMjAsCisgICAgICB0aHVt Ym5haWxIZWlnaHQ6IDEyMCwKKyAgICAgIGZpbGVzaXplQmFzZTogMTAwMCwK KyAgICAgIG1heEZpbGVzOiBudWxsLAorICAgICAgcGFyYW1zOiB7fSwKKyAg ICAgIGNsaWNrYWJsZTogdHJ1ZSwKKyAgICAgIGlnbm9yZUhpZGRlbkZpbGVz OiB0cnVlLAorICAgICAgYWNjZXB0ZWRGaWxlczogbnVsbCwKKyAgICAgIGFj Y2VwdGVkTWltZVR5cGVzOiBudWxsLAorICAgICAgYXV0b1Byb2Nlc3NRdWV1 ZTogdHJ1ZSwKKyAgICAgIGF1dG9RdWV1ZTogdHJ1ZSwKKyAgICAgIGFkZFJl bW92ZUxpbmtzOiBmYWxzZSwKKyAgICAgIHByZXZpZXdzQ29udGFpbmVyOiBu dWxsLAorICAgICAgaGlkZGVuSW5wdXRDb250YWluZXI6ICJib2R5IiwKKyAg ICAgIGNhcHR1cmU6IG51bGwsCisgICAgICByZW5hbWVGaWxlbmFtZTogbnVs bCwKKyAgICAgIGRpY3REZWZhdWx0TWVzc2FnZTogIkRyb3AgZmlsZXMgaGVy ZSB0byB1cGxvYWQiLAorICAgICAgZGljdEZhbGxiYWNrTWVzc2FnZTogIllv dXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGRyYWcnbidkcm9wIGZpbGUg dXBsb2Fkcy4iLAorICAgICAgZGljdEZhbGxiYWNrVGV4dDogIlBsZWFzZSB1 c2UgdGhlIGZhbGxiYWNrIGZvcm0gYmVsb3cgdG8gdXBsb2FkIHlvdXIgZmls ZXMgbGlrZSBpbiB0aGUgb2xkZW4gZGF5cy4iLAorICAgICAgZGljdEZpbGVU b29CaWc6ICJGaWxlIGlzIHRvbyBiaWcgKHt7ZmlsZXNpemV9fU1pQikuIE1h eCBmaWxlc2l6ZToge3ttYXhGaWxlc2l6ZX19TWlCLiIsCisgICAgICBkaWN0 SW52YWxpZEZpbGVUeXBlOiAiWW91IGNhbid0IHVwbG9hZCBmaWxlcyBvZiB0 aGlzIHR5cGUuIiwKKyAgICAgIGRpY3RSZXNwb25zZUVycm9yOiAiU2VydmVy IHJlc3BvbmRlZCB3aXRoIHt7c3RhdHVzQ29kZX19IGNvZGUuIiwKKyAgICAg IGRpY3RDYW5jZWxVcGxvYWQ6ICJDYW5jZWwgdXBsb2FkIiwKKyAgICAgIGRp Y3RDYW5jZWxVcGxvYWRDb25maXJtYXRpb246ICJBcmUgeW91IHN1cmUgeW91 IHdhbnQgdG8gY2FuY2VsIHRoaXMgdXBsb2FkPyIsCisgICAgICBkaWN0UmVt b3ZlRmlsZTogIlJlbW92ZSBmaWxlIiwKKyAgICAgIGRpY3RSZW1vdmVGaWxl Q29uZmlybWF0aW9uOiBudWxsLAorICAgICAgZGljdE1heEZpbGVzRXhjZWVk ZWQ6ICJZb3UgY2FuIG5vdCB1cGxvYWQgYW55IG1vcmUgZmlsZXMuIiwKKyAg ICAgIGFjY2VwdDogZnVuY3Rpb24oZmlsZSwgZG9uZSkgeworICAgICAgICBy ZXR1cm4gZG9uZSgpOworICAgICAgfSwKKyAgICAgIGluaXQ6IGZ1bmN0aW9u KCkgeworICAgICAgICByZXR1cm4gbm9vcDsKKyAgICAgIH0sCisgICAgICBm b3JjZUZhbGxiYWNrOiBmYWxzZSwKKyAgICAgIGZhbGxiYWNrOiBmdW5jdGlv bigpIHsKKyAgICAgICAgdmFyIGNoaWxkLCBtZXNzYWdlRWxlbWVudCwgc3Bh biwgX2ksIF9sZW4sIF9yZWY7CisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFz c05hbWUgPSAiIiArIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgKyAiIGR6LWJy b3dzZXItbm90LXN1cHBvcnRlZCI7CisgICAgICAgIF9yZWYgPSB0aGlzLmVs ZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOworICAgICAgICBm b3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9p KyspIHsKKyAgICAgICAgICBjaGlsZCA9IF9yZWZbX2ldOworICAgICAgICAg IGlmICgvKF58IClkei1tZXNzYWdlKCR8ICkvLnRlc3QoY2hpbGQuY2xhc3NO YW1lKSkgeworICAgICAgICAgICAgbWVzc2FnZUVsZW1lbnQgPSBjaGlsZDsK KyAgICAgICAgICAgIGNoaWxkLmNsYXNzTmFtZSA9ICJkei1tZXNzYWdlIjsK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBpZiAoIW1lc3NhZ2VFbGVtZW50KSB7CisgICAgICAgICAg bWVzc2FnZUVsZW1lbnQgPSBEcm9wem9uZS5jcmVhdGVFbGVtZW50KCI8ZGl2 IGNsYXNzPVwiZHotbWVzc2FnZVwiPjxzcGFuPjwvc3Bhbj48L2Rpdj4iKTsK KyAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWVzc2FnZUVs ZW1lbnQpOworICAgICAgICB9CisgICAgICAgIHNwYW4gPSBtZXNzYWdlRWxl bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpWzBdOworICAgICAg ICBpZiAoc3BhbikgeworICAgICAgICAgIGlmIChzcGFuLnRleHRDb250ZW50 ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSB0 aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrTWVzc2FnZTsKKyAgICAgICAgICB9 IGVsc2UgaWYgKHNwYW4uaW5uZXJUZXh0ICE9IG51bGwpIHsKKyAgICAgICAg ICAgIHNwYW4uaW5uZXJUZXh0ID0gdGhpcy5vcHRpb25zLmRpY3RGYWxsYmFj a01lc3NhZ2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybiB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5nZXRGYWxsYmFj a0Zvcm0oKSk7CisgICAgICB9LAorICAgICAgcmVzaXplOiBmdW5jdGlvbihm aWxlKSB7CisgICAgICAgIHZhciBpbmZvLCBzcmNSYXRpbywgdHJnUmF0aW87 CisgICAgICAgIGluZm8gPSB7CisgICAgICAgICAgc3JjWDogMCwKKyAgICAg ICAgICBzcmNZOiAwLAorICAgICAgICAgIHNyY1dpZHRoOiBmaWxlLndpZHRo LAorICAgICAgICAgIHNyY0hlaWdodDogZmlsZS5oZWlnaHQKKyAgICAgICAg fTsKKyAgICAgICAgc3JjUmF0aW8gPSBmaWxlLndpZHRoIC8gZmlsZS5oZWln aHQ7CisgICAgICAgIGluZm8ub3B0V2lkdGggPSB0aGlzLm9wdGlvbnMudGh1 bWJuYWlsV2lkdGg7CisgICAgICAgIGluZm8ub3B0SGVpZ2h0ID0gdGhpcy5v cHRpb25zLnRodW1ibmFpbEhlaWdodDsKKyAgICAgICAgaWYgKChpbmZvLm9w dFdpZHRoID09IG51bGwpICYmIChpbmZvLm9wdEhlaWdodCA9PSBudWxsKSkg eworICAgICAgICAgIGluZm8ub3B0V2lkdGggPSBpbmZvLnNyY1dpZHRoOwor ICAgICAgICAgIGluZm8ub3B0SGVpZ2h0ID0gaW5mby5zcmNIZWlnaHQ7Cisg ICAgICAgIH0gZWxzZSBpZiAoaW5mby5vcHRXaWR0aCA9PSBudWxsKSB7Cisg ICAgICAgICAgaW5mby5vcHRXaWR0aCA9IHNyY1JhdGlvICogaW5mby5vcHRI ZWlnaHQ7CisgICAgICAgIH0gZWxzZSBpZiAoaW5mby5vcHRIZWlnaHQgPT0g bnVsbCkgeworICAgICAgICAgIGluZm8ub3B0SGVpZ2h0ID0gKDEgLyBzcmNS YXRpbykgKiBpbmZvLm9wdFdpZHRoOworICAgICAgICB9CisgICAgICAgIHRy Z1JhdGlvID0gaW5mby5vcHRXaWR0aCAvIGluZm8ub3B0SGVpZ2h0OworICAg ICAgICBpZiAoZmlsZS5oZWlnaHQgPCBpbmZvLm9wdEhlaWdodCB8fCBmaWxl LndpZHRoIDwgaW5mby5vcHRXaWR0aCkgeworICAgICAgICAgIGluZm8udHJn SGVpZ2h0ID0gaW5mby5zcmNIZWlnaHQ7CisgICAgICAgICAgaW5mby50cmdX aWR0aCA9IGluZm8uc3JjV2lkdGg7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgaWYgKHNyY1JhdGlvID4gdHJnUmF0aW8pIHsKKyAgICAgICAgICAg IGluZm8uc3JjSGVpZ2h0ID0gZmlsZS5oZWlnaHQ7CisgICAgICAgICAgICBp bmZvLnNyY1dpZHRoID0gaW5mby5zcmNIZWlnaHQgKiB0cmdSYXRpbzsKKyAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5mby5zcmNXaWR0aCA9 IGZpbGUud2lkdGg7CisgICAgICAgICAgICBpbmZvLnNyY0hlaWdodCA9IGlu Zm8uc3JjV2lkdGggLyB0cmdSYXRpbzsKKyAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgaW5mby5zcmNYID0gKGZpbGUud2lkdGggLSBpbmZvLnNy Y1dpZHRoKSAvIDI7CisgICAgICAgIGluZm8uc3JjWSA9IChmaWxlLmhlaWdo dCAtIGluZm8uc3JjSGVpZ2h0KSAvIDI7CisgICAgICAgIHJldHVybiBpbmZv OworICAgICAgfSwKKworICAgICAgLyoKKyAgICAgIFRob3NlIGZ1bmN0aW9u cyByZWdpc3RlciB0aGVtc2VsdmVzIHRvIHRoZSBldmVudHMgb24gaW5pdCBh bmQgaGFuZGxlIGFsbAorICAgICAgdGhlIHVzZXIgaW50ZXJmYWNlIHNwZWNp ZmljIHN0dWZmLiBPdmVyd3JpdGluZyB0aGVtIHdvbid0IGJyZWFrIHRoZSB1 cGxvYWQKKyAgICAgIGJ1dCBjYW4gYnJlYWsgdGhlIHdheSBpdCdzIGRpc3Bs YXllZC4KKyAgICAgIFlvdSBjYW4gb3ZlcndyaXRlIHRoZW0gaWYgeW91IGRv bid0IGxpa2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIElmIHlvdSBqdXN0Cisg ICAgICB3YW50IHRvIGFkZCBhbiBhZGRpdGlvbmFsIGV2ZW50IGhhbmRsZXIs IHJlZ2lzdGVyIGl0IG9uIHRoZSBkcm9wem9uZSBvYmplY3QKKyAgICAgIGFu ZCBkb24ndCBvdmVyd3JpdGUgdGhvc2Ugb3B0aW9ucy4KKyAgICAgICAqLwor ICAgICAgZHJvcDogZnVuY3Rpb24oZSkgeworICAgICAgICByZXR1cm4gdGhp cy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImR6LWRyYWctaG92ZXIiKTsK KyAgICAgIH0sCisgICAgICBkcmFnc3RhcnQ6IG5vb3AsCisgICAgICBkcmFn ZW5kOiBmdW5jdGlvbihlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1l bnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotZHJhZy1ob3ZlciIpOworICAgICAg fSwKKyAgICAgIGRyYWdlbnRlcjogZnVuY3Rpb24oZSkgeworICAgICAgICBy ZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LWRyYWctaG92 ZXIiKTsKKyAgICAgIH0sCisgICAgICBkcmFnb3ZlcjogZnVuY3Rpb24oZSkg eworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQo ImR6LWRyYWctaG92ZXIiKTsKKyAgICAgIH0sCisgICAgICBkcmFnbGVhdmU6 IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5j bGFzc0xpc3QucmVtb3ZlKCJkei1kcmFnLWhvdmVyIik7CisgICAgICB9LAor ICAgICAgcGFzdGU6IG5vb3AsCisgICAgICByZXNldDogZnVuY3Rpb24oKSB7 CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92 ZSgiZHotc3RhcnRlZCIpOworICAgICAgfSwKKyAgICAgIGFkZGVkZmlsZTog ZnVuY3Rpb24oZmlsZSkgeworICAgICAgICB2YXIgbm9kZSwgcmVtb3ZlRmls ZUV2ZW50LCByZW1vdmVMaW5rLCBfaSwgX2osIF9rLCBfbGVuLCBfbGVuMSwg X2xlbjIsIF9yZWYsIF9yZWYxLCBfcmVmMiwgX3Jlc3VsdHM7CisgICAgICAg IGlmICh0aGlzLmVsZW1lbnQgPT09IHRoaXMucHJldmlld3NDb250YWluZXIp IHsKKyAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHot c3RhcnRlZCIpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnByZXZp ZXdzQ29udGFpbmVyKSB7CisgICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVu dCA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnByZXZp ZXdUZW1wbGF0ZS50cmltKCkpOworICAgICAgICAgIGZpbGUucHJldmlld1Rl bXBsYXRlID0gZmlsZS5wcmV2aWV3RWxlbWVudDsKKyAgICAgICAgICB0aGlz LnByZXZpZXdzQ29udGFpbmVyLmFwcGVuZENoaWxkKGZpbGUucHJldmlld0Vs ZW1lbnQpOworICAgICAgICAgIF9yZWYgPSBmaWxlLnByZXZpZXdFbGVtZW50 LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6LW5hbWVdIik7CisgICAgICAg ICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVu OyBfaSsrKSB7CisgICAgICAgICAgICBub2RlID0gX3JlZltfaV07CisgICAg ICAgICAgICBub2RlLnRleHRDb250ZW50ID0gdGhpcy5fcmVuYW1lRmlsZW5h bWUoZmlsZS5uYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgICAgX3JlZjEg PSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRh LWR6LXNpemVdIik7CisgICAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0g X3JlZjEubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7CisgICAgICAgICAg ICBub2RlID0gX3JlZjFbX2pdOworICAgICAgICAgICAgbm9kZS5pbm5lckhU TUwgPSB0aGlzLmZpbGVzaXplKGZpbGUuc2l6ZSk7CisgICAgICAgICAgfQor ICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWRkUmVtb3ZlTGlua3MpIHsK KyAgICAgICAgICAgIGZpbGUuX3JlbW92ZUxpbmsgPSBEcm9wem9uZS5jcmVh dGVFbGVtZW50KCI8YSBjbGFzcz1cImR6LXJlbW92ZVwiIGhyZWY9XCJqYXZh c2NyaXB0OnVuZGVmaW5lZDtcIiBkYXRhLWR6LXJlbW92ZT4iICsgdGhpcy5v cHRpb25zLmRpY3RSZW1vdmVGaWxlICsgIjwvYT4iKTsKKyAgICAgICAgICAg IGZpbGUucHJldmlld0VsZW1lbnQuYXBwZW5kQ2hpbGQoZmlsZS5fcmVtb3Zl TGluayk7CisgICAgICAgICAgfQorICAgICAgICAgIHJlbW92ZUZpbGVFdmVu dCA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICAgICAgcmV0dXJuIGZ1 bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgp OworICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAg ICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09IERyb3B6b25lLlVQTE9BRElO RykgeworICAgICAgICAgICAgICAgIHJldHVybiBEcm9wem9uZS5jb25maXJt KF90aGlzLm9wdGlvbnMuZGljdENhbmNlbFVwbG9hZENvbmZpcm1hdGlvbiwg ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMu cmVtb3ZlRmlsZShmaWxlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoX3RoaXMu b3B0aW9ucy5kaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbikgeworICAgICAg ICAgICAgICAgICAgcmV0dXJuIERyb3B6b25lLmNvbmZpcm0oX3RoaXMub3B0 aW9ucy5kaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbiwgZnVuY3Rpb24oKSB7 CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmVGaWxl KGZpbGUpOworICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5y ZW1vdmVGaWxlKGZpbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICB9KSh0aGlzKTsK KyAgICAgICAgICBfcmVmMiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlT ZWxlY3RvckFsbCgiW2RhdGEtZHotcmVtb3ZlXSIpOworICAgICAgICAgIF9y ZXN1bHRzID0gW107CisgICAgICAgICAgZm9yIChfayA9IDAsIF9sZW4yID0g X3JlZjIubGVuZ3RoOyBfayA8IF9sZW4yOyBfaysrKSB7CisgICAgICAgICAg ICByZW1vdmVMaW5rID0gX3JlZjJbX2tdOworICAgICAgICAgICAgX3Jlc3Vs dHMucHVzaChyZW1vdmVMaW5rLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg cmVtb3ZlRmlsZUV2ZW50KSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJl dHVybiBfcmVzdWx0czsKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHJl bW92ZWRmaWxlOiBmdW5jdGlvbihmaWxlKSB7CisgICAgICAgIHZhciBfcmVm OworICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkgeworICAgICAg ICAgIGlmICgoX3JlZiA9IGZpbGUucHJldmlld0VsZW1lbnQpICE9IG51bGwp IHsKKyAgICAgICAgICAgIF9yZWYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChm aWxlLnByZXZpZXdFbGVtZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU1heEZpbGVzUmVhY2hlZENs YXNzKCk7CisgICAgICB9LAorICAgICAgdGh1bWJuYWlsOiBmdW5jdGlvbihm aWxlLCBkYXRhVXJsKSB7CisgICAgICAgIHZhciB0aHVtYm5haWxFbGVtZW50 LCBfaSwgX2xlbiwgX3JlZjsKKyAgICAgICAgaWYgKGZpbGUucHJldmlld0Vs ZW1lbnQpIHsKKyAgICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50LmNsYXNz TGlzdC5yZW1vdmUoImR6LWZpbGUtcHJldmlldyIpOworICAgICAgICAgIF9y ZWYgPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltk YXRhLWR6LXRodW1ibmFpbF0iKTsKKyAgICAgICAgICBmb3IgKF9pID0gMCwg X2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAg ICAgICAgIHRodW1ibmFpbEVsZW1lbnQgPSBfcmVmW19pXTsKKyAgICAgICAg ICAgIHRodW1ibmFpbEVsZW1lbnQuYWx0ID0gZmlsZS5uYW1lOworICAgICAg ICAgICAgdGh1bWJuYWlsRWxlbWVudC5zcmMgPSBkYXRhVXJsOworICAgICAg ICAgIH0KKyAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKGZ1bmN0aW9u KF90aGlzKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgIHJldHVybiBmaWxlLnByZXZpZXdFbGVtZW50LmNsYXNz TGlzdC5hZGQoImR6LWltYWdlLXByZXZpZXciKTsKKyAgICAgICAgICAgIH07 CisgICAgICAgICAgfSkodGhpcykpLCAxKTsKKyAgICAgICAgfQorICAgICAg fSwKKyAgICAgIGVycm9yOiBmdW5jdGlvbihmaWxlLCBtZXNzYWdlKSB7Cisg ICAgICAgIHZhciBub2RlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7Cisg ICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7CisgICAgICAgICAg ZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1lcnJvciIp OworICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gIlN0cmluZyIg JiYgbWVzc2FnZS5lcnJvcikgeworICAgICAgICAgICAgbWVzc2FnZSA9IG1l c3NhZ2UuZXJyb3I7CisgICAgICAgICAgfQorICAgICAgICAgIF9yZWYgPSBm aWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6 LWVycm9ybWVzc2FnZV0iKTsKKyAgICAgICAgICBfcmVzdWx0cyA9IFtdOwor ICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9p IDwgX2xlbjsgX2krKykgeworICAgICAgICAgICAgbm9kZSA9IF9yZWZbX2ld OworICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChub2RlLnRleHRDb250ZW50 ID0gbWVzc2FnZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBf cmVzdWx0czsKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIGVycm9ybXVs dGlwbGU6IG5vb3AsCisgICAgICBwcm9jZXNzaW5nOiBmdW5jdGlvbihmaWxl KSB7CisgICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7CisgICAg ICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1w cm9jZXNzaW5nIik7CisgICAgICAgICAgaWYgKGZpbGUuX3JlbW92ZUxpbmsp IHsKKyAgICAgICAgICAgIHJldHVybiBmaWxlLl9yZW1vdmVMaW5rLnRleHRD b250ZW50ID0gdGhpcy5vcHRpb25zLmRpY3RDYW5jZWxVcGxvYWQ7CisgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorICAgICAgcHJvY2Vzc2lu Z211bHRpcGxlOiBub29wLAorICAgICAgdXBsb2FkcHJvZ3Jlc3M6IGZ1bmN0 aW9uKGZpbGUsIHByb2dyZXNzLCBieXRlc1NlbnQpIHsKKyAgICAgICAgdmFy IG5vZGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgICAgaWYg KGZpbGUucHJldmlld0VsZW1lbnQpIHsKKyAgICAgICAgICBfcmVmID0gZmls ZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1kei11 cGxvYWRwcm9ncmVzc10iKTsKKyAgICAgICAgICBfcmVzdWx0cyA9IFtdOwor ICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9p IDwgX2xlbjsgX2krKykgeworICAgICAgICAgICAgbm9kZSA9IF9yZWZbX2ld OworICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdQUk9HUkVT UycpIHsKKyAgICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChub2RlLnZhbHVl ID0gcHJvZ3Jlc3MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgX3Jlc3VsdHMucHVzaChub2RlLnN0eWxlLndpZHRoID0gIiIgKyBw cm9ncmVzcyArICIlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor ICAgICAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICAgICAgfQorICAgICAg fSwKKyAgICAgIHRvdGFsdXBsb2FkcHJvZ3Jlc3M6IG5vb3AsCisgICAgICBz ZW5kaW5nOiBub29wLAorICAgICAgc2VuZGluZ211bHRpcGxlOiBub29wLAor ICAgICAgc3VjY2VzczogZnVuY3Rpb24oZmlsZSkgeworICAgICAgICBpZiAo ZmlsZS5wcmV2aWV3RWxlbWVudCkgeworICAgICAgICAgIHJldHVybiBmaWxl LnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LXN1Y2Nlc3MiKTsK KyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHN1Y2Nlc3NtdWx0aXBsZTog bm9vcCwKKyAgICAgIGNhbmNlbGVkOiBmdW5jdGlvbihmaWxlKSB7CisgICAg ICAgIHJldHVybiB0aGlzLmVtaXQoImVycm9yIiwgZmlsZSwgIlVwbG9hZCBj YW5jZWxlZC4iKTsKKyAgICAgIH0sCisgICAgICBjYW5jZWxlZG11bHRpcGxl OiBub29wLAorICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKGZpbGUpIHsKKyAg ICAgICAgaWYgKGZpbGUuX3JlbW92ZUxpbmspIHsKKyAgICAgICAgICBmaWxl Ll9yZW1vdmVMaW5rLnRleHRDb250ZW50ID0gdGhpcy5vcHRpb25zLmRpY3RS ZW1vdmVGaWxlOworICAgICAgICB9CisgICAgICAgIGlmIChmaWxlLnByZXZp ZXdFbGVtZW50KSB7CisgICAgICAgICAgcmV0dXJuIGZpbGUucHJldmlld0Vs ZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotY29tcGxldGUiKTsKKyAgICAgICAg fQorICAgICAgfSwKKyAgICAgIGNvbXBsZXRlbXVsdGlwbGU6IG5vb3AsCisg ICAgICBtYXhmaWxlc2V4Y2VlZGVkOiBub29wLAorICAgICAgbWF4ZmlsZXNy ZWFjaGVkOiBub29wLAorICAgICAgcXVldWVjb21wbGV0ZTogbm9vcCwKKyAg ICAgIGFkZGVkZmlsZXM6IG5vb3AsCisgICAgICBwcmV2aWV3VGVtcGxhdGU6 ICI8ZGl2IGNsYXNzPVwiZHotcHJldmlldyBkei1maWxlLXByZXZpZXdcIj5c biAgPGRpdiBjbGFzcz1cImR6LWltYWdlXCI+PGltZyBkYXRhLWR6LXRodW1i bmFpbCAvPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZHotZGV0YWlsc1wiPlxu ICAgIDxkaXYgY2xhc3M9XCJkei1zaXplXCI+PHNwYW4gZGF0YS1kei1zaXpl Pjwvc3Bhbj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZHotZmlsZW5hbWVc Ij48c3BhbiBkYXRhLWR6LW5hbWU+PC9zcGFuPjwvZGl2PlxuICA8L2Rpdj5c biAgPGRpdiBjbGFzcz1cImR6LXByb2dyZXNzXCI+PHNwYW4gY2xhc3M9XCJk ei11cGxvYWRcIiBkYXRhLWR6LXVwbG9hZHByb2dyZXNzPjwvc3Bhbj48L2Rp dj5cbiAgPGRpdiBjbGFzcz1cImR6LWVycm9yLW1lc3NhZ2VcIj48c3BhbiBk YXRhLWR6LWVycm9ybWVzc2FnZT48L3NwYW4+PC9kaXY+XG4gIDxkaXYgY2xh c3M9XCJkei1zdWNjZXNzLW1hcmtcIj5cbiAgICA8c3ZnIHdpZHRoPVwiNTRw eFwiIGhlaWdodD1cIjU0cHhcIiB2aWV3Qm94PVwiMCAwIDU0IDU0XCIgdmVy c2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z dmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp bmtcIiB4bWxuczpza2V0Y2g9XCJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5n LmNvbS9za2V0Y2gvbnNcIj5cbiAgICAgIDx0aXRsZT5DaGVjazwvdGl0bGU+ XG4gICAgICA8ZGVmcz48L2RlZnM+XG4gICAgICA8ZyBpZD1cIlBhZ2UtMVwi IHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5v bmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIgc2tldGNoOnR5cGU9XCJNU1Bh Z2VcIj5cbiAgICAgICAgPHBhdGggZD1cIk0yMy41LDMxLjg0MzE0NTggTDE3 LjU4NTI0MTksMjUuOTI4Mzg3NyBDMTYuMDI0ODI1MywyNC4zNjc5NzExIDEz LjQ5MTAyOTQsMjQuMzY2ODM1IDExLjkyODkzMjIsMjUuOTI4OTMyMiBDMTAu MzcwMDEzNiwyNy40ODc4NTA4IDEwLjM2NjU5MTIsMzAuMDIzNDQ1NSAxMS45 MjgzODc3LDMxLjU4NTI0MTkgTDIwLjQxNDc1ODEsNDAuMDcxNjEyMyBDMjAu NTEzMzk5OSw0MC4xNzAyNTQxIDIwLjYxNTkzMTUsNDAuMjYyNjY0OSAyMC43 MjE4NjE1LDQwLjM0ODg0MzUgQzIyLjI4MzU2NjksNDEuODcyNTY1MSAyNC43 OTQyMzQsNDEuODYyNjIwMiAyNi4zNDYxNTY0LDQwLjMxMDY5NzggTDQzLjMx MDY5NzgsMjMuMzQ2MTU2NCBDNDQuODc3MTAyMSwyMS43Nzk3NTIxIDQ0Ljg3 NTgwNTcsMTkuMjQ4Mzg4NyA0My4zMTM3MDg1LDE3LjY4NjI5MTUgQzQxLjc1 NDc4OTksMTYuMTI3MzcyOSAzOS4yMTc2MDM1LDE2LjEyNTU0MjIgMzcuNjUz ODQzNiwxNy42ODkzMDIyIEwyMy41LDMxLjg0MzE0NTggWiBNMjcsNTMgQzQx LjM1OTQwMzUsNTMgNTMsNDEuMzU5NDAzNSA1MywyNyBDNTMsMTIuNjQwNTk2 NSA0MS4zNTk0MDM1LDEgMjcsMSBDMTIuNjQwNTk2NSwxIDEsMTIuNjQwNTk2 NSAxLDI3IEMxLDQxLjM1OTQwMzUgMTIuNjQwNTk2NSw1MyAyNyw1MyBaXCIg aWQ9XCJPdmFsLTJcIiBzdHJva2Utb3BhY2l0eT1cIjAuMTk4Nzk0MTU4XCIg c3Ryb2tlPVwiIzc0NzQ3NFwiIGZpbGwtb3BhY2l0eT1cIjAuODE2NTE5NDc1 XCIgZmlsbD1cIiNGRkZGRkZcIiBza2V0Y2g6dHlwZT1cIk1TU2hhcGVHcm91 cFwiPjwvcGF0aD5cbiAgICAgIDwvZz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+ XG4gIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tYXJrXCI+XG4gICAgPHN2ZyB3 aWR0aD1cIjU0cHhcIiBoZWlnaHQ9XCI1NHB4XCIgdmlld0JveD1cIjAgMCA1 NCA1NFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMu b3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9y Zy8xOTk5L3hsaW5rXCIgeG1sbnM6c2tldGNoPVwiaHR0cDovL3d3dy5ib2hl bWlhbmNvZGluZy5jb20vc2tldGNoL25zXCI+XG4gICAgICA8dGl0bGU+RXJy b3I8L3RpdGxlPlxuICAgICAgPGRlZnM+PC9kZWZzPlxuICAgICAgPGcgaWQ9 XCJQYWdlLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwi IGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIHNrZXRjaDp0 eXBlPVwiTVNQYWdlXCI+XG4gICAgICAgIDxnIGlkPVwiQ2hlY2stKy1PdmFs LTJcIiBza2V0Y2g6dHlwZT1cIk1TTGF5ZXJHcm91cFwiIHN0cm9rZT1cIiM3 NDc0NzRcIiBzdHJva2Utb3BhY2l0eT1cIjAuMTk4Nzk0MTU4XCIgZmlsbD1c IiNGRkZGRkZcIiBmaWxsLW9wYWNpdHk9XCIwLjgxNjUxOTQ3NVwiPlxuICAg ICAgICAgIDxwYXRoIGQ9XCJNMzIuNjU2ODU0MiwyOSBMMzguMzEwNjk3OCwy My4zNDYxNTY0IEMzOS44NzcxMDIxLDIxLjc3OTc1MjEgMzkuODc1ODA1Nywx OS4yNDgzODg3IDM4LjMxMzcwODUsMTcuNjg2MjkxNSBDMzYuNzU0Nzg5OSwx Ni4xMjczNzI5IDM0LjIxNzYwMzUsMTYuMTI1NTQyMiAzMi42NTM4NDM2LDE3 LjY4OTMwMjIgTDI3LDIzLjM0MzE0NTggTDIxLjM0NjE1NjQsMTcuNjg5MzAy MiBDMTkuNzgyMzk2NSwxNi4xMjU1NDIyIDE3LjI0NTIxMDEsMTYuMTI3Mzcy OSAxNS42ODYyOTE1LDE3LjY4NjI5MTUgQzE0LjEyNDE5NDMsMTkuMjQ4Mzg4 NyAxNC4xMjI4OTc5LDIxLjc3OTc1MjEgMTUuNjg5MzAyMiwyMy4zNDYxNTY0 IEwyMS4zNDMxNDU4LDI5IEwxNS42ODkzMDIyLDM0LjY1Mzg0MzYgQzE0LjEy Mjg5NzksMzYuMjIwMjQ3OSAxNC4xMjQxOTQzLDM4Ljc1MTYxMTMgMTUuNjg2 MjkxNSw0MC4zMTM3MDg1IEMxNy4yNDUyMTAxLDQxLjg3MjYyNzEgMTkuNzgy Mzk2NSw0MS44NzQ0NTc4IDIxLjM0NjE1NjQsNDAuMzEwNjk3OCBMMjcsMzQu NjU2ODU0MiBMMzIuNjUzODQzNiw0MC4zMTA2OTc4IEMzNC4yMTc2MDM1LDQx Ljg3NDQ1NzggMzYuNzU0Nzg5OSw0MS44NzI2MjcxIDM4LjMxMzcwODUsNDAu MzEzNzA4NSBDMzkuODc1ODA1NywzOC43NTE2MTEzIDM5Ljg3NzEwMjEsMzYu MjIwMjQ3OSAzOC4zMTA2OTc4LDM0LjY1Mzg0MzYgTDMyLjY1Njg1NDIsMjkg WiBNMjcsNTMgQzQxLjM1OTQwMzUsNTMgNTMsNDEuMzU5NDAzNSA1MywyNyBD NTMsMTIuNjQwNTk2NSA0MS4zNTk0MDM1LDEgMjcsMSBDMTIuNjQwNTk2NSwx IDEsMTIuNjQwNTk2NSAxLDI3IEMxLDQxLjM1OTQwMzUgMTIuNjQwNTk2NSw1 MyAyNyw1MyBaXCIgaWQ9XCJPdmFsLTJcIiBza2V0Y2g6dHlwZT1cIk1TU2hh cGVHcm91cFwiPjwvcGF0aD5cbiAgICAgICAgPC9nPlxuICAgICAgPC9nPlxu ICAgIDwvc3ZnPlxuICA8L2Rpdj5cbjwvZGl2PiIKKyAgICB9OworCisgICAg ZXh0ZW5kID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIga2V5LCBvYmplY3Qs IG9iamVjdHMsIHRhcmdldCwgdmFsLCBfaSwgX2xlbjsKKyAgICAgIHRhcmdl dCA9IGFyZ3VtZW50c1swXSwgb2JqZWN0cyA9IDIgPD0gYXJndW1lbnRzLmxl bmd0aCA/IF9fc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107CisgICAg ICBmb3IgKF9pID0gMCwgX2xlbiA9IG9iamVjdHMubGVuZ3RoOyBfaSA8IF9s ZW47IF9pKyspIHsKKyAgICAgICAgb2JqZWN0ID0gb2JqZWN0c1tfaV07Cisg ICAgICAgIGZvciAoa2V5IGluIG9iamVjdCkgeworICAgICAgICAgIHZhbCA9 IG9iamVjdFtrZXldOworICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsOwor ICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gdGFyZ2V0OworICAg IH07CisKKyAgICBmdW5jdGlvbiBEcm9wem9uZShlbGVtZW50LCBvcHRpb25z KSB7CisgICAgICB2YXIgZWxlbWVudE9wdGlvbnMsIGZhbGxiYWNrLCBfcmVm OworICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKKyAgICAgIHRoaXMu dmVyc2lvbiA9IERyb3B6b25lLnZlcnNpb247CisgICAgICB0aGlzLmRlZmF1 bHRPcHRpb25zLnByZXZpZXdUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdE9wdGlv bnMucHJldmlld1RlbXBsYXRlLnJlcGxhY2UoL1xuKi9nLCAiIik7CisgICAg ICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzID0gW107CisgICAgICB0aGlzLmxp c3RlbmVycyA9IFtdOworICAgICAgdGhpcy5maWxlcyA9IFtdOworICAgICAg aWYgKHR5cGVvZiB0aGlzLmVsZW1lbnQgPT09ICJzdHJpbmciKSB7CisgICAg ICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhp cy5lbGVtZW50KTsKKyAgICAgIH0KKyAgICAgIGlmICghKHRoaXMuZWxlbWVu dCAmJiAodGhpcy5lbGVtZW50Lm5vZGVUeXBlICE9IG51bGwpKSkgeworICAg ICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZHJvcHpvbmUgZWxlbWVu dC4iKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLmVsZW1lbnQuZHJvcHpv bmUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEcm9wem9uZSBhbHJl YWR5IGF0dGFjaGVkLiIpOworICAgICAgfQorICAgICAgRHJvcHpvbmUuaW5z dGFuY2VzLnB1c2godGhpcyk7CisgICAgICB0aGlzLmVsZW1lbnQuZHJvcHpv bmUgPSB0aGlzOworICAgICAgZWxlbWVudE9wdGlvbnMgPSAoX3JlZiA9IERy b3B6b25lLm9wdGlvbnNGb3JFbGVtZW50KHRoaXMuZWxlbWVudCkpICE9IG51 bGwgPyBfcmVmIDoge307CisgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQo e30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIGVsZW1lbnRPcHRpb25zLCBvcHRp b25zICE9IG51bGwgPyBvcHRpb25zIDoge30pOworICAgICAgaWYgKHRoaXMu b3B0aW9ucy5mb3JjZUZhbGxiYWNrIHx8ICFEcm9wem9uZS5pc0Jyb3dzZXJT dXBwb3J0ZWQoKSkgeworICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZh bGxiYWNrLmNhbGwodGhpcyk7CisgICAgICB9CisgICAgICBpZiAodGhpcy5v cHRpb25zLnVybCA9PSBudWxsKSB7CisgICAgICAgIHRoaXMub3B0aW9ucy51 cmwgPSB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKTsKKyAg ICAgIH0KKyAgICAgIGlmICghdGhpcy5vcHRpb25zLnVybCkgeworICAgICAg ICB0aHJvdyBuZXcgRXJyb3IoIk5vIFVSTCBwcm92aWRlZC4iKTsKKyAgICAg IH0KKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyAmJiB0 aGlzLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMpIHsKKyAgICAgICAgdGhy b3cgbmV3IEVycm9yKCJZb3UgY2FuJ3QgcHJvdmlkZSBib3RoICdhY2NlcHRl ZEZpbGVzJyBhbmQgJ2FjY2VwdGVkTWltZVR5cGVzJy4gJ2FjY2VwdGVkTWlt ZVR5cGVzJyBpcyBkZXByZWNhdGVkLiIpOworICAgICAgfQorICAgICAgaWYg KHRoaXMub3B0aW9ucy5hY2NlcHRlZE1pbWVUeXBlcykgeworICAgICAgICB0 aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyA9IHRoaXMub3B0aW9ucy5hY2Nl cHRlZE1pbWVUeXBlczsKKyAgICAgICAgZGVsZXRlIHRoaXMub3B0aW9ucy5h Y2NlcHRlZE1pbWVUeXBlczsKKyAgICAgIH0KKyAgICAgIHRoaXMub3B0aW9u cy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7 CisgICAgICBpZiAoKGZhbGxiYWNrID0gdGhpcy5nZXRFeGlzdGluZ0ZhbGxi YWNrKCkpICYmIGZhbGxiYWNrLnBhcmVudE5vZGUpIHsKKyAgICAgICAgZmFs bGJhY2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmYWxsYmFjayk7CisgICAg ICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLnByZXZpZXdzQ29udGFpbmVy ICE9PSBmYWxzZSkgeworICAgICAgICBpZiAodGhpcy5vcHRpb25zLnByZXZp ZXdzQ29udGFpbmVyKSB7CisgICAgICAgICAgdGhpcy5wcmV2aWV3c0NvbnRh aW5lciA9IERyb3B6b25lLmdldEVsZW1lbnQodGhpcy5vcHRpb25zLnByZXZp ZXdzQ29udGFpbmVyLCAicHJldmlld3NDb250YWluZXIiKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnByZXZpZXdzQ29udGFpbmVyID0g dGhpcy5lbGVtZW50OworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAo dGhpcy5vcHRpb25zLmNsaWNrYWJsZSkgeworICAgICAgICBpZiAodGhpcy5v cHRpb25zLmNsaWNrYWJsZSA9PT0gdHJ1ZSkgeworICAgICAgICAgIHRoaXMu Y2xpY2thYmxlRWxlbWVudHMgPSBbdGhpcy5lbGVtZW50XTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzID0g RHJvcHpvbmUuZ2V0RWxlbWVudHModGhpcy5vcHRpb25zLmNsaWNrYWJsZSwg ImNsaWNrYWJsZSIpOworICAgICAgICB9CisgICAgICB9CisgICAgICB0aGlz LmluaXQoKTsKKyAgICB9CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0 QWNjZXB0ZWRGaWxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGZpbGUs IF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlz LmZpbGVzOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kg PSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgewor ICAgICAgICBmaWxlID0gX3JlZltfaV07CisgICAgICAgIGlmIChmaWxlLmFj Y2VwdGVkKSB7CisgICAgICAgICAgX3Jlc3VsdHMucHVzaChmaWxlKTsKKyAg ICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAg IH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0UmVqZWN0ZWRGaWxl cyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBf cmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmZpbGVzOworICAg ICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0g X3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxl ID0gX3JlZltfaV07CisgICAgICAgIGlmICghZmlsZS5hY2NlcHRlZCkgewor ICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmlsZSk7CisgICAgICAgIH0KKyAg ICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAg RHJvcHpvbmUucHJvdG90eXBlLmdldEZpbGVzV2l0aFN0YXR1cyA9IGZ1bmN0 aW9uKHN0YXR1cykgeworICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVm LCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmZpbGVzOworICAgICAg X3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3Jl Zi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxlID0g X3JlZltfaV07CisgICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gc3RhdHVz KSB7CisgICAgICAgICAgX3Jlc3VsdHMucHVzaChmaWxlKTsKKyAgICAgICAg fQorICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisK KyAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0UXVldWVkRmlsZXMgPSBmdW5j dGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1 cyhEcm9wem9uZS5RVUVVRUQpOworICAgIH07CisKKyAgICBEcm9wem9uZS5w cm90b3R5cGUuZ2V0VXBsb2FkaW5nRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAg ICAgIHJldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhEcm9wem9uZS5V UExPQURJTkcpOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUu Z2V0QWRkZWRGaWxlcyA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRo aXMuZ2V0RmlsZXNXaXRoU3RhdHVzKERyb3B6b25lLkFEREVEKTsKKyAgICB9 OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEFjdGl2ZUZpbGVzID0g ZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZmlsZSwgX2ksIF9sZW4sIF9yZWYs IF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMuZmlsZXM7CisgICAgICBf cmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVm Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZpbGUgPSBf cmVmW19pXTsKKyAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9wem9u ZS5VUExPQURJTkcgfHwgZmlsZS5zdGF0dXMgPT09IERyb3B6b25lLlFVRVVF RCkgeworICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmlsZSk7CisgICAgICAg IH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9Owor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsK KyAgICAgIHZhciBldmVudE5hbWUsIG5vUHJvcGFnYXRpb24sIHNldHVwSGlk ZGVuRmlsZUlucHV0LCBfaSwgX2xlbiwgX3JlZiwgX3JlZjE7CisgICAgICBp ZiAodGhpcy5lbGVtZW50LnRhZ05hbWUgPT09ICJmb3JtIikgeworICAgICAg ICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJlbmN0eXBlIiwgIm11bHRp cGFydC9mb3JtLWRhdGEiKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLmVs ZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkcm9wem9uZSIpICYmICF0aGlz LmVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmR6LW1lc3NhZ2UiKSkgeworICAg ICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoRHJvcHpvbmUuY3JlYXRl RWxlbWVudCgiPGRpdiBjbGFzcz1cImR6LWRlZmF1bHQgZHotbWVzc2FnZVwi PjxzcGFuPiIgKyB0aGlzLm9wdGlvbnMuZGljdERlZmF1bHRNZXNzYWdlICsg Ijwvc3Bhbj48L2Rpdj4iKSk7CisgICAgICB9CisgICAgICBpZiAodGhpcy5j bGlja2FibGVFbGVtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgc2V0dXBIaWRk ZW5GaWxlSW5wdXQgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgICBy ZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoX3RoaXMuaGlk ZGVuRmlsZUlucHV0KSB7CisgICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZp bGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF90aGlzLmhpZGRlbkZp bGVJbnB1dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfdGhpcy5o aWRkZW5GaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1 dCIpOworICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnNldEF0 dHJpYnV0ZSgidHlwZSIsICJmaWxlIik7CisgICAgICAgICAgICBpZiAoKF90 aGlzLm9wdGlvbnMubWF4RmlsZXMgPT0gbnVsbCkgfHwgX3RoaXMub3B0aW9u cy5tYXhGaWxlcyA+IDEpIHsKKyAgICAgICAgICAgICAgX3RoaXMuaGlkZGVu RmlsZUlucHV0LnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLCAibXVsdGlwbGUi KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZp bGVJbnB1dC5jbGFzc05hbWUgPSAiZHotaGlkZGVuLWlucHV0IjsKKyAgICAg ICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMgIT0gbnVs bCkgeworICAgICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc2V0 QXR0cmlidXRlKCJhY2NlcHQiLCBfdGhpcy5vcHRpb25zLmFjY2VwdGVkRmls ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF90aGlzLm9w dGlvbnMuY2FwdHVyZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgIF90aGlz LmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoImNhcHR1cmUiLCBfdGhp cy5vcHRpb25zLmNhcHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLnZpc2liaWxpdHkgPSAi aGlkZGVuIjsKKyAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5z dHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgICAgICAgICAgICBfdGhp cy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUudG9wID0gIjAiOworICAgICAgICAg ICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLmxlZnQgPSAiMCI7Cisg ICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUuaGVpZ2h0 ID0gIjAiOworICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnN0 eWxlLndpZHRoID0gIjAiOworICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlT ZWxlY3RvcihfdGhpcy5vcHRpb25zLmhpZGRlbklucHV0Q29udGFpbmVyKS5h cHBlbmRDaGlsZChfdGhpcy5oaWRkZW5GaWxlSW5wdXQpOworICAgICAgICAg ICAgcmV0dXJuIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5hZGRFdmVudExpc3Rl bmVyKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgdmFy IGZpbGUsIGZpbGVzLCBfaSwgX2xlbjsKKyAgICAgICAgICAgICAgZmlsZXMg PSBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuZmlsZXM7CisgICAgICAgICAgICAg IGlmIChmaWxlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKF9p ID0gMCwgX2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7 CisgICAgICAgICAgICAgICAgICBmaWxlID0gZmlsZXNbX2ldOworICAgICAg ICAgICAgICAgICAgX3RoaXMuYWRkRmlsZShmaWxlKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgX3RoaXMu ZW1pdCgiYWRkZWRmaWxlcyIsIGZpbGVzKTsKKyAgICAgICAgICAgICAgcmV0 dXJuIHNldHVwSGlkZGVuRmlsZUlucHV0KCk7CisgICAgICAgICAgICB9KTsK KyAgICAgICAgICB9OworICAgICAgICB9KSh0aGlzKTsKKyAgICAgICAgc2V0 dXBIaWRkZW5GaWxlSW5wdXQoKTsKKyAgICAgIH0KKyAgICAgIHRoaXMuVVJM ID0gKF9yZWYgPSB3aW5kb3cuVVJMKSAhPSBudWxsID8gX3JlZiA6IHdpbmRv dy53ZWJraXRVUkw7CisgICAgICBfcmVmMSA9IHRoaXMuZXZlbnRzOworICAg ICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmMS5sZW5ndGg7IF9pIDwgX2xl bjsgX2krKykgeworICAgICAgICBldmVudE5hbWUgPSBfcmVmMVtfaV07Cisg ICAgICAgIHRoaXMub24oZXZlbnROYW1lLCB0aGlzLm9wdGlvbnNbZXZlbnRO YW1lXSk7CisgICAgICB9CisgICAgICB0aGlzLm9uKCJ1cGxvYWRwcm9ncmVz cyIsIChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rp b24oKSB7CisgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZVRvdGFsVXBs b2FkUHJvZ3Jlc3MoKTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpKTsK KyAgICAgIHRoaXMub24oInJlbW92ZWRmaWxlIiwgKGZ1bmN0aW9uKF90aGlz KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBy ZXR1cm4gX3RoaXMudXBkYXRlVG90YWxVcGxvYWRQcm9ncmVzcygpOworICAg ICAgICB9OworICAgICAgfSkodGhpcykpOworICAgICAgdGhpcy5vbigiY2Fu Y2VsZWQiLCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1 bmN0aW9uKGZpbGUpIHsKKyAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdCgi Y29tcGxldGUiLCBmaWxlKTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMp KTsKKyAgICAgIHRoaXMub24oImNvbXBsZXRlIiwgKGZ1bmN0aW9uKF90aGlz KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlKSB7CisgICAgICAg ICAgaWYgKF90aGlzLmdldEFkZGVkRmlsZXMoKS5sZW5ndGggPT09IDAgJiYg X3RoaXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGggPT09IDAgJiYgX3Ro aXMuZ2V0UXVldWVkRmlsZXMoKS5sZW5ndGggPT09IDApIHsKKyAgICAgICAg ICAgIHJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKKyAgICAgICAg ICAgICAgcmV0dXJuIF90aGlzLmVtaXQoInF1ZXVlY29tcGxldGUiKTsKKyAg ICAgICAgICAgIH0pLCAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH07Cisg ICAgICB9KSh0aGlzKSk7CisgICAgICBub1Byb3BhZ2F0aW9uID0gZnVuY3Rp b24oZSkgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAg ICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICAgIHJldHVybiBl LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgcmV0dXJuIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICAgICAgfQor ICAgICAgfTsKKyAgICAgIHRoaXMubGlzdGVuZXJzID0gWworICAgICAgICB7 CisgICAgICAgICAgZWxlbWVudDogdGhpcy5lbGVtZW50LAorICAgICAgICAg IGV2ZW50czogeworICAgICAgICAgICAgImRyYWdzdGFydCI6IChmdW5jdGlv bihfdGhpcykgeworICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkg eworICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnc3Rh cnQiLCBlKTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRo aXMpLAorICAgICAgICAgICAgImRyYWdlbnRlciI6IChmdW5jdGlvbihfdGhp cykgeworICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkgeworICAg ICAgICAgICAgICAgIG5vUHJvcGFnYXRpb24oZSk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIF90aGlzLmVtaXQoImRyYWdlbnRlciIsIGUpOworICAgICAg ICAgICAgICB9OworICAgICAgICAgICAgfSkodGhpcyksCisgICAgICAgICAg ICAiZHJhZ292ZXIiOiAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgICAg ICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIg ZWZjdDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg ICAgZWZjdCA9IGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ7CisgICAg ICAgICAgICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7fQorICAgICAgICAgICAg ICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZScgPT09IGVm Y3QgfHwgJ2xpbmtNb3ZlJyA9PT0gZWZjdCA/ICdtb3ZlJyA6ICdjb3B5JzsK KyAgICAgICAgICAgICAgICBub1Byb3BhZ2F0aW9uKGUpOworICAgICAgICAg ICAgICAgIHJldHVybiBfdGhpcy5lbWl0KCJkcmFnb3ZlciIsIGUpOworICAg ICAgICAgICAgICB9OworICAgICAgICAgICAgfSkodGhpcyksCisgICAgICAg ICAgICAiZHJhZ2xlYXZlIjogKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAg ICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAg cmV0dXJuIF90aGlzLmVtaXQoImRyYWdsZWF2ZSIsIGUpOworICAgICAgICAg ICAgICB9OworICAgICAgICAgICAgfSkodGhpcyksCisgICAgICAgICAgICAi ZHJvcCI6IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICAgICAgICByZXR1 cm4gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIG5vUHJvcGFnYXRp b24oZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmRyb3AoZSk7 CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KSh0aGlzKSwKKyAg ICAgICAgICAgICJkcmFnZW5kIjogKGZ1bmN0aW9uKF90aGlzKSB7CisgICAg ICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAg ICAgcmV0dXJuIF90aGlzLmVtaXQoImRyYWdlbmQiLCBlKTsKKyAgICAgICAg ICAgICAgfTsKKyAgICAgICAgICAgIH0pKHRoaXMpCisgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICBdOworICAgICAgdGhpcy5jbGlja2FibGVFbGVt ZW50cy5mb3JFYWNoKChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1 cm4gZnVuY3Rpb24oY2xpY2thYmxlRWxlbWVudCkgeworICAgICAgICAgIHJl dHVybiBfdGhpcy5saXN0ZW5lcnMucHVzaCh7CisgICAgICAgICAgICBlbGVt ZW50OiBjbGlja2FibGVFbGVtZW50LAorICAgICAgICAgICAgZXZlbnRzOiB7 CisgICAgICAgICAgICAgICJjbGljayI6IGZ1bmN0aW9uKGV2dCkgeworICAg ICAgICAgICAgICAgIGlmICgoY2xpY2thYmxlRWxlbWVudCAhPT0gX3RoaXMu ZWxlbWVudCkgfHwgKGV2dC50YXJnZXQgPT09IF90aGlzLmVsZW1lbnQgfHwg RHJvcHpvbmUuZWxlbWVudEluc2lkZShldnQudGFyZ2V0LCBfdGhpcy5lbGVt ZW50LnF1ZXJ5U2VsZWN0b3IoIi5kei1tZXNzYWdlIikpKSkgeworICAgICAg ICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LmNsaWNrKCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg fSk7CisgICAgICAgIH07CisgICAgICB9KSh0aGlzKSk7CisgICAgICB0aGlz LmVuYWJsZSgpOworICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbml0LmNh bGwodGhpcyk7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5k ZXN0cm95ID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgX3JlZjsKKyAgICAg IHRoaXMuZGlzYWJsZSgpOworICAgICAgdGhpcy5yZW1vdmVBbGxGaWxlcyh0 cnVlKTsKKyAgICAgIGlmICgoX3JlZiA9IHRoaXMuaGlkZGVuRmlsZUlucHV0 KSAhPSBudWxsID8gX3JlZi5wYXJlbnROb2RlIDogdm9pZCAwKSB7CisgICAg ICAgIHRoaXMuaGlkZGVuRmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hp bGQodGhpcy5oaWRkZW5GaWxlSW5wdXQpOworICAgICAgICB0aGlzLmhpZGRl bkZpbGVJbnB1dCA9IG51bGw7CisgICAgICB9CisgICAgICBkZWxldGUgdGhp cy5lbGVtZW50LmRyb3B6b25lOworICAgICAgcmV0dXJuIERyb3B6b25lLmlu c3RhbmNlcy5zcGxpY2UoRHJvcHpvbmUuaW5zdGFuY2VzLmluZGV4T2YodGhp cyksIDEpOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUudXBk YXRlVG90YWxVcGxvYWRQcm9ncmVzcyA9IGZ1bmN0aW9uKCkgeworICAgICAg dmFyIGFjdGl2ZUZpbGVzLCBmaWxlLCB0b3RhbEJ5dGVzLCB0b3RhbEJ5dGVz U2VudCwgdG90YWxVcGxvYWRQcm9ncmVzcywgX2ksIF9sZW4sIF9yZWY7Cisg ICAgICB0b3RhbEJ5dGVzU2VudCA9IDA7CisgICAgICB0b3RhbEJ5dGVzID0g MDsKKyAgICAgIGFjdGl2ZUZpbGVzID0gdGhpcy5nZXRBY3RpdmVGaWxlcygp OworICAgICAgaWYgKGFjdGl2ZUZpbGVzLmxlbmd0aCkgeworICAgICAgICBf cmVmID0gdGhpcy5nZXRBY3RpdmVGaWxlcygpOworICAgICAgICBmb3IgKF9p ID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsK KyAgICAgICAgICBmaWxlID0gX3JlZltfaV07CisgICAgICAgICAgdG90YWxC eXRlc1NlbnQgKz0gZmlsZS51cGxvYWQuYnl0ZXNTZW50OworICAgICAgICAg IHRvdGFsQnl0ZXMgKz0gZmlsZS51cGxvYWQudG90YWw7CisgICAgICAgIH0K KyAgICAgICAgdG90YWxVcGxvYWRQcm9ncmVzcyA9IDEwMCAqIHRvdGFsQnl0 ZXNTZW50IC8gdG90YWxCeXRlczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg IHRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSAxMDA7CisgICAgICB9CisgICAgICBy ZXR1cm4gdGhpcy5lbWl0KCJ0b3RhbHVwbG9hZHByb2dyZXNzIiwgdG90YWxV cGxvYWRQcm9ncmVzcywgdG90YWxCeXRlcywgdG90YWxCeXRlc1NlbnQpOwor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX2dldFBhcmFtTmFt ZSA9IGZ1bmN0aW9uKG4pIHsKKyAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRp b25zLnBhcmFtTmFtZSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICByZXR1 cm4gdGhpcy5vcHRpb25zLnBhcmFtTmFtZShuKTsKKyAgICAgIH0gZWxzZSB7 CisgICAgICAgIHJldHVybiAiIiArIHRoaXMub3B0aW9ucy5wYXJhbU5hbWUg KyAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlID8gIlsiICsgbiArICJd IiA6ICIiKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgRHJvcHpvbmUucHJv dG90eXBlLl9yZW5hbWVGaWxlbmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAg ICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlbmFtZUZpbGVuYW1lICE9 PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgICAg fQorICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZW5hbWVGaWxlbmFtZShu YW1lKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEZh bGxiYWNrRm9ybSA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGV4aXN0aW5n RmFsbGJhY2ssIGZpZWxkcywgZmllbGRzU3RyaW5nLCBmb3JtOworICAgICAg aWYgKGV4aXN0aW5nRmFsbGJhY2sgPSB0aGlzLmdldEV4aXN0aW5nRmFsbGJh Y2soKSkgeworICAgICAgICByZXR1cm4gZXhpc3RpbmdGYWxsYmFjazsKKyAg ICAgIH0KKyAgICAgIGZpZWxkc1N0cmluZyA9ICI8ZGl2IGNsYXNzPVwiZHot ZmFsbGJhY2tcIj4iOworICAgICAgaWYgKHRoaXMub3B0aW9ucy5kaWN0RmFs bGJhY2tUZXh0KSB7CisgICAgICAgIGZpZWxkc1N0cmluZyArPSAiPHA+IiAr IHRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tUZXh0ICsgIjwvcD4iOworICAg ICAgfQorICAgICAgZmllbGRzU3RyaW5nICs9ICI8aW5wdXQgdHlwZT1cImZp bGVcIiBuYW1lPVwiIiArICh0aGlzLl9nZXRQYXJhbU5hbWUoMCkpICsgIlwi ICIgKyAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlID8gJ211bHRpcGxl PSJtdWx0aXBsZSInIDogdm9pZCAwKSArICIgLz48aW5wdXQgdHlwZT1cInN1 Ym1pdFwiIHZhbHVlPVwiVXBsb2FkIVwiPjwvZGl2PiI7CisgICAgICBmaWVs ZHMgPSBEcm9wem9uZS5jcmVhdGVFbGVtZW50KGZpZWxkc1N0cmluZyk7Cisg ICAgICBpZiAodGhpcy5lbGVtZW50LnRhZ05hbWUgIT09ICJGT1JNIikgewor ICAgICAgICBmb3JtID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudCgiPGZvcm0g YWN0aW9uPVwiIiArIHRoaXMub3B0aW9ucy51cmwgKyAiXCIgZW5jdHlwZT1c Im11bHRpcGFydC9mb3JtLWRhdGFcIiBtZXRob2Q9XCIiICsgdGhpcy5vcHRp b25zLm1ldGhvZCArICJcIj48L2Zvcm0+Iik7CisgICAgICAgIGZvcm0uYXBw ZW5kQ2hpbGQoZmllbGRzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRo aXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImVuY3R5cGUiLCAibXVsdGlwYXJ0 L2Zvcm0tZGF0YSIpOworICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmli dXRlKCJtZXRob2QiLCB0aGlzLm9wdGlvbnMubWV0aG9kKTsKKyAgICAgIH0K KyAgICAgIHJldHVybiBmb3JtICE9IG51bGwgPyBmb3JtIDogZmllbGRzOwor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0RXhpc3RpbmdG YWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGZhbGxiYWNrLCBn ZXRGYWxsYmFjaywgdGFnTmFtZSwgX2ksIF9sZW4sIF9yZWY7CisgICAgICBn ZXRGYWxsYmFjayA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7CisgICAgICAgIHZh ciBlbCwgX2ksIF9sZW47CisgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0g ZWxlbWVudHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAg ICBlbCA9IGVsZW1lbnRzW19pXTsKKyAgICAgICAgICBpZiAoLyhefCApZmFs bGJhY2soJHwgKS8udGVzdChlbC5jbGFzc05hbWUpKSB7CisgICAgICAgICAg ICByZXR1cm4gZWw7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9 OworICAgICAgX3JlZiA9IFsiZGl2IiwgImZvcm0iXTsKKyAgICAgIGZvciAo X2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykg eworICAgICAgICB0YWdOYW1lID0gX3JlZltfaV07CisgICAgICAgIGlmIChm YWxsYmFjayA9IGdldEZhbGxiYWNrKHRoaXMuZWxlbWVudC5nZXRFbGVtZW50 c0J5VGFnTmFtZSh0YWdOYW1lKSkpIHsKKyAgICAgICAgICByZXR1cm4gZmFs bGJhY2s7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OworCisgICAgRHJv cHpvbmUucHJvdG90eXBlLnNldHVwRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlv bigpIHsKKyAgICAgIHZhciBlbGVtZW50TGlzdGVuZXJzLCBldmVudCwgbGlz dGVuZXIsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYg PSB0aGlzLmxpc3RlbmVyczsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAg ICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47 IF9pKyspIHsKKyAgICAgICAgZWxlbWVudExpc3RlbmVycyA9IF9yZWZbX2ld OworICAgICAgICBfcmVzdWx0cy5wdXNoKChmdW5jdGlvbigpIHsKKyAgICAg ICAgICB2YXIgX3JlZjEsIF9yZXN1bHRzMTsKKyAgICAgICAgICBfcmVmMSA9 IGVsZW1lbnRMaXN0ZW5lcnMuZXZlbnRzOworICAgICAgICAgIF9yZXN1bHRz MSA9IFtdOworICAgICAgICAgIGZvciAoZXZlbnQgaW4gX3JlZjEpIHsKKyAg ICAgICAgICAgIGxpc3RlbmVyID0gX3JlZjFbZXZlbnRdOworICAgICAgICAg ICAgX3Jlc3VsdHMxLnB1c2goZWxlbWVudExpc3RlbmVycy5lbGVtZW50LmFk ZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBmYWxzZSkpOworICAg ICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3Jlc3VsdHMxOworICAgICAg ICB9KSgpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAg ICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlz dGVuZXJzID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZWxlbWVudExpc3Rl bmVycywgZXZlbnQsIGxpc3RlbmVyLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3Vs dHM7CisgICAgICBfcmVmID0gdGhpcy5saXN0ZW5lcnM7CisgICAgICBfcmVz dWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxl bmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGVsZW1lbnRMaXN0 ZW5lcnMgPSBfcmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaCgoZnVu Y3Rpb24oKSB7CisgICAgICAgICAgdmFyIF9yZWYxLCBfcmVzdWx0czE7Cisg ICAgICAgICAgX3JlZjEgPSBlbGVtZW50TGlzdGVuZXJzLmV2ZW50czsKKyAg ICAgICAgICBfcmVzdWx0czEgPSBbXTsKKyAgICAgICAgICBmb3IgKGV2ZW50 IGluIF9yZWYxKSB7CisgICAgICAgICAgICBsaXN0ZW5lciA9IF9yZWYxW2V2 ZW50XTsKKyAgICAgICAgICAgIF9yZXN1bHRzMS5wdXNoKGVsZW1lbnRMaXN0 ZW5lcnMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0 ZW5lciwgZmFsc2UpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJu IF9yZXN1bHRzMTsKKyAgICAgICAgfSkoKSk7CisgICAgICB9CisgICAgICBy ZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3Rv dHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZmlsZSwg X2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgdGhpcy5jbGlja2Fi bGVFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAg ICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotY2xpY2th YmxlIik7CisgICAgICB9KTsKKyAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0 ZW5lcnMoKTsKKyAgICAgIF9yZWYgPSB0aGlzLmZpbGVzOworICAgICAgX3Jl c3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5s ZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxlID0gX3Jl ZltfaV07CisgICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5jYW5jZWxVcGxv YWQoZmlsZSkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOwor ICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZW5hYmxlID0gZnVu Y3Rpb24oKSB7CisgICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmZvckVh Y2goZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICByZXR1cm4gZWxlbWVu dC5jbGFzc0xpc3QuYWRkKCJkei1jbGlja2FibGUiKTsKKyAgICAgIH0pOwor ICAgICAgcmV0dXJuIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpOworICAg IH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuZmlsZXNpemUgPSBmdW5j dGlvbihzaXplKSB7CisgICAgICB2YXIgY3V0b2ZmLCBpLCBzZWxlY3RlZFNp emUsIHNlbGVjdGVkVW5pdCwgdW5pdCwgdW5pdHMsIF9pLCBfbGVuOworICAg ICAgc2VsZWN0ZWRTaXplID0gMDsKKyAgICAgIHNlbGVjdGVkVW5pdCA9ICJi IjsKKyAgICAgIGlmIChzaXplID4gMCkgeworICAgICAgICB1bml0cyA9IFsn VEInLCAnR0InLCAnTUInLCAnS0InLCAnYiddOworICAgICAgICBmb3IgKGkg PSBfaSA9IDAsIF9sZW4gPSB1bml0cy5sZW5ndGg7IF9pIDwgX2xlbjsgaSA9 ICsrX2kpIHsKKyAgICAgICAgICB1bml0ID0gdW5pdHNbaV07CisgICAgICAg ICAgY3V0b2ZmID0gTWF0aC5wb3codGhpcy5vcHRpb25zLmZpbGVzaXplQmFz ZSwgNCAtIGkpIC8gMTA7CisgICAgICAgICAgaWYgKHNpemUgPj0gY3V0b2Zm KSB7CisgICAgICAgICAgICBzZWxlY3RlZFNpemUgPSBzaXplIC8gTWF0aC5w b3codGhpcy5vcHRpb25zLmZpbGVzaXplQmFzZSwgNCAtIGkpOworICAgICAg ICAgICAgc2VsZWN0ZWRVbml0ID0gdW5pdDsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzZWxlY3RlZFNp emUgPSBNYXRoLnJvdW5kKDEwICogc2VsZWN0ZWRTaXplKSAvIDEwOworICAg ICAgfQorICAgICAgcmV0dXJuICI8c3Ryb25nPiIgKyBzZWxlY3RlZFNpemUg KyAiPC9zdHJvbmc+ICIgKyBzZWxlY3RlZFVuaXQ7CisgICAgfTsKKworICAg IERyb3B6b25lLnByb3RvdHlwZS5fdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xh c3MgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICgodGhpcy5vcHRpb25zLm1h eEZpbGVzICE9IG51bGwpICYmIHRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxl bmd0aCA+PSB0aGlzLm9wdGlvbnMubWF4RmlsZXMpIHsKKyAgICAgICAgaWYg KHRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aCA9PT0gdGhpcy5vcHRp b25zLm1heEZpbGVzKSB7CisgICAgICAgICAgdGhpcy5lbWl0KCdtYXhmaWxl c3JlYWNoZWQnLCB0aGlzLmZpbGVzKTsKKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LW1heC1maWxl cy1yZWFjaGVkIik7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4g dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImR6LW1heC1maWxlcy1y ZWFjaGVkIik7CisgICAgICB9CisgICAgfTsKKworICAgIERyb3B6b25lLnBy b3RvdHlwZS5kcm9wID0gZnVuY3Rpb24oZSkgeworICAgICAgdmFyIGZpbGVz LCBpdGVtczsKKyAgICAgIGlmICghZS5kYXRhVHJhbnNmZXIpIHsKKyAgICAg ICAgcmV0dXJuOworICAgICAgfQorICAgICAgdGhpcy5lbWl0KCJkcm9wIiwg ZSk7CisgICAgICBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOworICAg ICAgdGhpcy5lbWl0KCJhZGRlZGZpbGVzIiwgZmlsZXMpOworICAgICAgaWYg KGZpbGVzLmxlbmd0aCkgeworICAgICAgICBpdGVtcyA9IGUuZGF0YVRyYW5z ZmVyLml0ZW1zOworICAgICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3Ro ICYmIChpdGVtc1swXS53ZWJraXRHZXRBc0VudHJ5ICE9IG51bGwpKSB7Cisg ICAgICAgICAgdGhpcy5fYWRkRmlsZXNGcm9tSXRlbXMoaXRlbXMpOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuaGFuZGxlRmlsZXMoZmls ZXMpOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKKworICAgIERyb3B6 b25lLnByb3RvdHlwZS5wYXN0ZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgIHZh ciBpdGVtcywgX3JlZjsKKyAgICAgIGlmICgoZSAhPSBudWxsID8gKF9yZWYg PSBlLmNsaXBib2FyZERhdGEpICE9IG51bGwgPyBfcmVmLml0ZW1zIDogdm9p ZCAwIDogdm9pZCAwKSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybjsKKyAg ICAgIH0KKyAgICAgIHRoaXMuZW1pdCgicGFzdGUiLCBlKTsKKyAgICAgIGl0 ZW1zID0gZS5jbGlwYm9hcmREYXRhLml0ZW1zOworICAgICAgaWYgKGl0ZW1z Lmxlbmd0aCkgeworICAgICAgICByZXR1cm4gdGhpcy5fYWRkRmlsZXNGcm9t SXRlbXMoaXRlbXMpOworICAgICAgfQorICAgIH07CisKKyAgICBEcm9wem9u ZS5wcm90b3R5cGUuaGFuZGxlRmlsZXMgPSBmdW5jdGlvbihmaWxlcykgewor ICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVzdWx0czsKKyAgICAgIF9y ZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVz Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZpbGUgPSBm aWxlc1tfaV07CisgICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5hZGRGaWxl KGZpbGUpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAg ICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLl9hZGRGaWxlc0Zyb21J dGVtcyA9IGZ1bmN0aW9uKGl0ZW1zKSB7CisgICAgICB2YXIgZW50cnksIGl0 ZW0sIF9pLCBfbGVuLCBfcmVzdWx0czsKKyAgICAgIF9yZXN1bHRzID0gW107 CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGl0ZW1zLmxlbmd0aDsgX2kg PCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGl0ZW0gPSBpdGVtc1tfaV07Cisg ICAgICAgIGlmICgoaXRlbS53ZWJraXRHZXRBc0VudHJ5ICE9IG51bGwpICYm IChlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpKSkgeworICAgICAg ICAgIGlmIChlbnRyeS5pc0ZpbGUpIHsKKyAgICAgICAgICAgIF9yZXN1bHRz LnB1c2godGhpcy5hZGRGaWxlKGl0ZW0uZ2V0QXNGaWxlKCkpKTsKKyAgICAg ICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7CisgICAgICAg ICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuX2FkZEZpbGVzRnJvbURpcmVjdG9y eShlbnRyeSwgZW50cnkubmFtZSkpOworICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7CisgICAgICAgICAg fQorICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZ2V0QXNGaWxlICE9IG51bGwp IHsKKyAgICAgICAgICBpZiAoKGl0ZW0ua2luZCA9PSBudWxsKSB8fCBpdGVt LmtpbmQgPT09ICJmaWxlIikgeworICAgICAgICAgICAgX3Jlc3VsdHMucHVz aCh0aGlzLmFkZEZpbGUoaXRlbS5nZXRBc0ZpbGUoKSkpOworICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7 CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIF9y ZXN1bHRzLnB1c2godm9pZCAwKTsKKyAgICAgICAgfQorICAgICAgfQorICAg ICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBEcm9wem9uZS5w cm90b3R5cGUuX2FkZEZpbGVzRnJvbURpcmVjdG9yeSA9IGZ1bmN0aW9uKGRp cmVjdG9yeSwgcGF0aCkgeworICAgICAgdmFyIGRpclJlYWRlciwgZXJyb3JI YW5kbGVyLCByZWFkRW50cmllczsKKyAgICAgIGRpclJlYWRlciA9IGRpcmVj dG9yeS5jcmVhdGVSZWFkZXIoKTsKKyAgICAgIGVycm9ySGFuZGxlciA9IGZ1 bmN0aW9uKGVycm9yKSB7CisgICAgICAgIHJldHVybiB0eXBlb2YgY29uc29s ZSAhPT0gInVuZGVmaW5lZCIgJiYgY29uc29sZSAhPT0gbnVsbCA/IHR5cGVv ZiBjb25zb2xlLmxvZyA9PT0gImZ1bmN0aW9uIiA/IGNvbnNvbGUubG9nKGVy cm9yKSA6IHZvaWQgMCA6IHZvaWQgMDsKKyAgICAgIH07CisgICAgICByZWFk RW50cmllcyA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4g ZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmV0dXJuIGRpclJlYWRlci5yZWFk RW50cmllcyhmdW5jdGlvbihlbnRyaWVzKSB7CisgICAgICAgICAgICB2YXIg ZW50cnksIF9pLCBfbGVuOworICAgICAgICAgICAgaWYgKGVudHJpZXMubGVu Z3RoID4gMCkgeworICAgICAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9 IGVudHJpZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAg ICAgICAgICBlbnRyeSA9IGVudHJpZXNbX2ldOworICAgICAgICAgICAgICAg IGlmIChlbnRyeS5pc0ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgIGVudHJ5 LmZpbGUoZnVuY3Rpb24oZmlsZSkgeworICAgICAgICAgICAgICAgICAgICBp ZiAoX3RoaXMub3B0aW9ucy5pZ25vcmVIaWRkZW5GaWxlcyAmJiBmaWxlLm5h bWUuc3Vic3RyaW5nKDAsIDEpID09PSAnLicpIHsKKyAgICAgICAgICAgICAg ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgZmlsZS5mdWxsUGF0aCA9ICIiICsgcGF0aCArICIv IiArIGZpbGUubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90 aGlzLmFkZEZpbGUoZmlsZSk7CisgICAgICAgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7 CisgICAgICAgICAgICAgICAgICBfdGhpcy5fYWRkRmlsZXNGcm9tRGlyZWN0 b3J5KGVudHJ5LCAiIiArIHBhdGggKyAiLyIgKyBlbnRyeS5uYW1lKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgcmVhZEVudHJpZXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHJldHVybiBudWxsOworICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7Cisg ICAgICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIHJldHVybiByZWFk RW50cmllcygpOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUu YWNjZXB0ID0gZnVuY3Rpb24oZmlsZSwgZG9uZSkgeworICAgICAgaWYgKGZp bGUuc2l6ZSA+IHRoaXMub3B0aW9ucy5tYXhGaWxlc2l6ZSAqIDEwMjQgKiAx MDI0KSB7CisgICAgICAgIHJldHVybiBkb25lKHRoaXMub3B0aW9ucy5kaWN0 RmlsZVRvb0JpZy5yZXBsYWNlKCJ7e2ZpbGVzaXplfX0iLCBNYXRoLnJvdW5k KGZpbGUuc2l6ZSAvIDEwMjQgLyAxMC4yNCkgLyAxMDApLnJlcGxhY2UoInt7 bWF4RmlsZXNpemV9fSIsIHRoaXMub3B0aW9ucy5tYXhGaWxlc2l6ZSkpOwor ICAgICAgfSBlbHNlIGlmICghRHJvcHpvbmUuaXNWYWxpZEZpbGUoZmlsZSwg dGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMpKSB7CisgICAgICAgIHJldHVy biBkb25lKHRoaXMub3B0aW9ucy5kaWN0SW52YWxpZEZpbGVUeXBlKTsKKyAg ICAgIH0gZWxzZSBpZiAoKHRoaXMub3B0aW9ucy5tYXhGaWxlcyAhPSBudWxs KSAmJiB0aGlzLmdldEFjY2VwdGVkRmlsZXMoKS5sZW5ndGggPj0gdGhpcy5v cHRpb25zLm1heEZpbGVzKSB7CisgICAgICAgIGRvbmUodGhpcy5vcHRpb25z LmRpY3RNYXhGaWxlc0V4Y2VlZGVkLnJlcGxhY2UoInt7bWF4RmlsZXN9fSIs IHRoaXMub3B0aW9ucy5tYXhGaWxlcykpOworICAgICAgICByZXR1cm4gdGhp cy5lbWl0KCJtYXhmaWxlc2V4Y2VlZGVkIiwgZmlsZSk7CisgICAgICB9IGVs c2UgeworICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFjY2VwdC5jYWxs KHRoaXMsIGZpbGUsIGRvbmUpOworICAgICAgfQorICAgIH07CisKKyAgICBE cm9wem9uZS5wcm90b3R5cGUuYWRkRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHsK KyAgICAgIGZpbGUudXBsb2FkID0geworICAgICAgICBwcm9ncmVzczogMCwK KyAgICAgICAgdG90YWw6IGZpbGUuc2l6ZSwKKyAgICAgICAgYnl0ZXNTZW50 OiAwCisgICAgICB9OworICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGUpOwor ICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5BRERFRDsKKyAgICAgIHRo aXMuZW1pdCgiYWRkZWRmaWxlIiwgZmlsZSk7CisgICAgICB0aGlzLl9lbnF1 ZXVlVGh1bWJuYWlsKGZpbGUpOworICAgICAgcmV0dXJuIHRoaXMuYWNjZXB0 KGZpbGUsIChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVu Y3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAg ICAgICAgIGZpbGUuYWNjZXB0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIF90 aGlzLl9lcnJvclByb2Nlc3NpbmcoW2ZpbGVdLCBlcnJvcik7CisgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbGUuYWNjZXB0ZWQgPSB0cnVl OworICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuYXV0b1F1ZXVlKSB7 CisgICAgICAgICAgICAgIF90aGlzLmVucXVldWVGaWxlKGZpbGUpOworICAg ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3Ro aXMuX3VwZGF0ZU1heEZpbGVzUmVhY2hlZENsYXNzKCk7CisgICAgICAgIH07 CisgICAgICB9KSh0aGlzKSk7CisgICAgfTsKKworICAgIERyb3B6b25lLnBy b3RvdHlwZS5lbnF1ZXVlRmlsZXMgPSBmdW5jdGlvbihmaWxlcykgeworICAg ICAgdmFyIGZpbGUsIF9pLCBfbGVuOworICAgICAgZm9yIChfaSA9IDAsIF9s ZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAg ICBmaWxlID0gZmlsZXNbX2ldOworICAgICAgICB0aGlzLmVucXVldWVGaWxl KGZpbGUpOworICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK KworICAgIERyb3B6b25lLnByb3RvdHlwZS5lbnF1ZXVlRmlsZSA9IGZ1bmN0 aW9uKGZpbGUpIHsKKyAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpv bmUuQURERUQgJiYgZmlsZS5hY2NlcHRlZCA9PT0gdHJ1ZSkgeworICAgICAg ICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLlFVRVVFRDsKKyAgICAgICAgaWYg KHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKSB7CisgICAgICAgICAg cmV0dXJuIHNldFRpbWVvdXQoKChmdW5jdGlvbihfdGhpcykgeworICAgICAg ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICByZXR1 cm4gX3RoaXMucHJvY2Vzc1F1ZXVlKCk7CisgICAgICAgICAgICB9OworICAg ICAgICAgIH0pKHRoaXMpKSwgMCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxz ZSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGhpcyBmaWxlIGNhbid0 IGJlIHF1ZXVlZCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vz c2VkIG9yIHdhcyByZWplY3RlZC4iKTsKKyAgICAgIH0KKyAgICB9OworCisg ICAgRHJvcHpvbmUucHJvdG90eXBlLl90aHVtYm5haWxRdWV1ZSA9IFtdOwor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLl9wcm9jZXNzaW5nVGh1bWJuYWls ID0gZmFsc2U7CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUuX2VucXVldWVU aHVtYm5haWwgPSBmdW5jdGlvbihmaWxlKSB7CisgICAgICBpZiAodGhpcy5v cHRpb25zLmNyZWF0ZUltYWdlVGh1bWJuYWlscyAmJiBmaWxlLnR5cGUubWF0 Y2goL2ltYWdlLiovKSAmJiBmaWxlLnNpemUgPD0gdGhpcy5vcHRpb25zLm1h eFRodW1ibmFpbEZpbGVzaXplICogMTAyNCAqIDEwMjQpIHsKKyAgICAgICAg dGhpcy5fdGh1bWJuYWlsUXVldWUucHVzaChmaWxlKTsKKyAgICAgICAgcmV0 dXJuIHNldFRpbWVvdXQoKChmdW5jdGlvbihfdGhpcykgeworICAgICAgICAg IHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBfdGhp cy5fcHJvY2Vzc1RodW1ibmFpbFF1ZXVlKCk7CisgICAgICAgICAgfTsKKyAg ICAgICAgfSkodGhpcykpLCAwKTsKKyAgICAgIH0KKyAgICB9OworCisgICAg RHJvcHpvbmUucHJvdG90eXBlLl9wcm9jZXNzVGh1bWJuYWlsUXVldWUgPSBm dW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLl9wcm9jZXNzaW5nVGh1bWJu YWlsIHx8IHRoaXMuX3RodW1ibmFpbFF1ZXVlLmxlbmd0aCA9PT0gMCkgewor ICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB0aGlzLl9wcm9jZXNz aW5nVGh1bWJuYWlsID0gdHJ1ZTsKKyAgICAgIHJldHVybiB0aGlzLmNyZWF0 ZVRodW1ibmFpbCh0aGlzLl90aHVtYm5haWxRdWV1ZS5zaGlmdCgpLCAoZnVu Y3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewor ICAgICAgICAgIF90aGlzLl9wcm9jZXNzaW5nVGh1bWJuYWlsID0gZmFsc2U7 CisgICAgICAgICAgcmV0dXJuIF90aGlzLl9wcm9jZXNzVGh1bWJuYWlsUXVl dWUoKTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpKTsKKyAgICB9Owor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLnJlbW92ZUZpbGUgPSBmdW5jdGlv bihmaWxlKSB7CisgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09IERyb3B6b25l LlVQTE9BRElORykgeworICAgICAgICB0aGlzLmNhbmNlbFVwbG9hZChmaWxl KTsKKyAgICAgIH0KKyAgICAgIHRoaXMuZmlsZXMgPSB3aXRob3V0KHRoaXMu ZmlsZXMsIGZpbGUpOworICAgICAgdGhpcy5lbWl0KCJyZW1vdmVkZmlsZSIs IGZpbGUpOworICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID09PSAwKSB7 CisgICAgICAgIHJldHVybiB0aGlzLmVtaXQoInJlc2V0Iik7CisgICAgICB9 CisgICAgfTsKKworICAgIERyb3B6b25lLnByb3RvdHlwZS5yZW1vdmVBbGxG aWxlcyA9IGZ1bmN0aW9uKGNhbmNlbElmTmVjZXNzYXJ5KSB7CisgICAgICB2 YXIgZmlsZSwgX2ksIF9sZW4sIF9yZWY7CisgICAgICBpZiAoY2FuY2VsSWZO ZWNlc3NhcnkgPT0gbnVsbCkgeworICAgICAgICBjYW5jZWxJZk5lY2Vzc2Fy eSA9IGZhbHNlOworICAgICAgfQorICAgICAgX3JlZiA9IHRoaXMuZmlsZXMu c2xpY2UoKTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5n dGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBmaWxlID0gX3JlZltf aV07CisgICAgICAgIGlmIChmaWxlLnN0YXR1cyAhPT0gRHJvcHpvbmUuVVBM T0FESU5HIHx8IGNhbmNlbElmTmVjZXNzYXJ5KSB7CisgICAgICAgICAgdGhp cy5yZW1vdmVGaWxlKGZpbGUpOworICAgICAgICB9CisgICAgICB9CisgICAg ICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90 eXBlLmNyZWF0ZVRodW1ibmFpbCA9IGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNr KSB7CisgICAgICB2YXIgZmlsZVJlYWRlcjsKKyAgICAgIGZpbGVSZWFkZXIg PSBuZXcgRmlsZVJlYWRlcjsKKyAgICAgIGZpbGVSZWFkZXIub25sb2FkID0g KGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigp IHsKKyAgICAgICAgICBpZiAoZmlsZS50eXBlID09PSAiaW1hZ2Uvc3ZnK3ht bCIpIHsKKyAgICAgICAgICAgIF90aGlzLmVtaXQoInRodW1ibmFpbCIsIGZp bGUsIGZpbGVSZWFkZXIucmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChjYWxs YmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg fQorICAgICAgICAgIHJldHVybiBfdGhpcy5jcmVhdGVUaHVtYm5haWxGcm9t VXJsKGZpbGUsIGZpbGVSZWFkZXIucmVzdWx0LCBjYWxsYmFjayk7CisgICAg ICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIHJldHVybiBmaWxlUmVh ZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CisgICAgfTsKKworICAgIERyb3B6 b25lLnByb3RvdHlwZS5jcmVhdGVUaHVtYm5haWxGcm9tVXJsID0gZnVuY3Rp b24oZmlsZSwgaW1hZ2VVcmwsIGNhbGxiYWNrLCBjcm9zc09yaWdpbikgewor ICAgICAgdmFyIGltZzsKKyAgICAgIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoImltZyIpOworICAgICAgaWYgKGNyb3NzT3JpZ2luKSB7CisgICAg ICAgIGltZy5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luOworICAgICAgfQor ICAgICAgaW1nLm9ubG9hZCA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAg ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGNhbnZhcywg Y3R4LCByZXNpemVJbmZvLCB0aHVtYm5haWwsIF9yZWYsIF9yZWYxLCBfcmVm MiwgX3JlZjM7CisgICAgICAgICAgZmlsZS53aWR0aCA9IGltZy53aWR0aDsK KyAgICAgICAgICBmaWxlLmhlaWdodCA9IGltZy5oZWlnaHQ7CisgICAgICAg ICAgcmVzaXplSW5mbyA9IF90aGlzLm9wdGlvbnMucmVzaXplLmNhbGwoX3Ro aXMsIGZpbGUpOworICAgICAgICAgIGlmIChyZXNpemVJbmZvLnRyZ1dpZHRo ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJlc2l6ZUluZm8udHJnV2lkdGgg PSByZXNpemVJbmZvLm9wdFdpZHRoOworICAgICAgICAgIH0KKyAgICAgICAg ICBpZiAocmVzaXplSW5mby50cmdIZWlnaHQgPT0gbnVsbCkgeworICAgICAg ICAgICAgcmVzaXplSW5mby50cmdIZWlnaHQgPSByZXNpemVJbmZvLm9wdEhl aWdodDsKKyAgICAgICAgICB9CisgICAgICAgICAgY2FudmFzID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgICAgICAgY3R4ID0g Y2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgICAgICAgY2FudmFzLndp ZHRoID0gcmVzaXplSW5mby50cmdXaWR0aDsKKyAgICAgICAgICBjYW52YXMu aGVpZ2h0ID0gcmVzaXplSW5mby50cmdIZWlnaHQ7CisgICAgICAgICAgZHJh d0ltYWdlSU9TRml4KGN0eCwgaW1nLCAoX3JlZiA9IHJlc2l6ZUluZm8uc3Jj WCkgIT0gbnVsbCA/IF9yZWYgOiAwLCAoX3JlZjEgPSByZXNpemVJbmZvLnNy Y1kpICE9IG51bGwgPyBfcmVmMSA6IDAsIHJlc2l6ZUluZm8uc3JjV2lkdGgs IHJlc2l6ZUluZm8uc3JjSGVpZ2h0LCAoX3JlZjIgPSByZXNpemVJbmZvLnRy Z1gpICE9IG51bGwgPyBfcmVmMiA6IDAsIChfcmVmMyA9IHJlc2l6ZUluZm8u dHJnWSkgIT0gbnVsbCA/IF9yZWYzIDogMCwgcmVzaXplSW5mby50cmdXaWR0 aCwgcmVzaXplSW5mby50cmdIZWlnaHQpOworICAgICAgICAgIHRodW1ibmFp bCA9IGNhbnZhcy50b0RhdGFVUkwoImltYWdlL3BuZyIpOworICAgICAgICAg IF90aGlzLmVtaXQoInRodW1ibmFpbCIsIGZpbGUsIHRodW1ibmFpbCk7Cisg ICAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAg IHJldHVybiBjYWxsYmFjaygpOworICAgICAgICAgIH0KKyAgICAgICAgfTsK KyAgICAgIH0pKHRoaXMpOworICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwp IHsKKyAgICAgICAgaW1nLm9uZXJyb3IgPSBjYWxsYmFjazsKKyAgICAgIH0K KyAgICAgIHJldHVybiBpbWcuc3JjID0gaW1hZ2VVcmw7CisgICAgfTsKKwor ICAgIERyb3B6b25lLnByb3RvdHlwZS5wcm9jZXNzUXVldWUgPSBmdW5jdGlv bigpIHsKKyAgICAgIHZhciBpLCBwYXJhbGxlbFVwbG9hZHMsIHByb2Nlc3Np bmdMZW5ndGgsIHF1ZXVlZEZpbGVzOworICAgICAgcGFyYWxsZWxVcGxvYWRz ID0gdGhpcy5vcHRpb25zLnBhcmFsbGVsVXBsb2FkczsKKyAgICAgIHByb2Nl c3NpbmdMZW5ndGggPSB0aGlzLmdldFVwbG9hZGluZ0ZpbGVzKCkubGVuZ3Ro OworICAgICAgaSA9IHByb2Nlc3NpbmdMZW5ndGg7CisgICAgICBpZiAocHJv Y2Vzc2luZ0xlbmd0aCA+PSBwYXJhbGxlbFVwbG9hZHMpIHsKKyAgICAgICAg cmV0dXJuOworICAgICAgfQorICAgICAgcXVldWVkRmlsZXMgPSB0aGlzLmdl dFF1ZXVlZEZpbGVzKCk7CisgICAgICBpZiAoIShxdWV1ZWRGaWxlcy5sZW5n dGggPiAwKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBp ZiAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7CisgICAgICAgIHJl dHVybiB0aGlzLnByb2Nlc3NGaWxlcyhxdWV1ZWRGaWxlcy5zbGljZSgwLCBw YXJhbGxlbFVwbG9hZHMgLSBwcm9jZXNzaW5nTGVuZ3RoKSk7CisgICAgICB9 IGVsc2UgeworICAgICAgICB3aGlsZSAoaSA8IHBhcmFsbGVsVXBsb2Fkcykg eworICAgICAgICAgIGlmICghcXVldWVkRmlsZXMubGVuZ3RoKSB7CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXMu cHJvY2Vzc0ZpbGUocXVldWVkRmlsZXMuc2hpZnQoKSk7CisgICAgICAgICAg aSsrOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKKworICAgIERyb3B6 b25lLnByb3RvdHlwZS5wcm9jZXNzRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHsK KyAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NGaWxlcyhbZmlsZV0pOworICAg IH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5cGUucHJvY2Vzc0ZpbGVzID0g ZnVuY3Rpb24oZmlsZXMpIHsKKyAgICAgIHZhciBmaWxlLCBfaSwgX2xlbjsK KyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8 IF9sZW47IF9pKyspIHsKKyAgICAgICAgZmlsZSA9IGZpbGVzW19pXTsKKyAg ICAgICAgZmlsZS5wcm9jZXNzaW5nID0gdHJ1ZTsKKyAgICAgICAgZmlsZS5z dGF0dXMgPSBEcm9wem9uZS5VUExPQURJTkc7CisgICAgICAgIHRoaXMuZW1p dCgicHJvY2Vzc2luZyIsIGZpbGUpOworICAgICAgfQorICAgICAgaWYgKHRo aXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkgeworICAgICAgICB0aGlzLmVt aXQoInByb2Nlc3NpbmdtdWx0aXBsZSIsIGZpbGVzKTsKKyAgICAgIH0KKyAg ICAgIHJldHVybiB0aGlzLnVwbG9hZEZpbGVzKGZpbGVzKTsKKyAgICB9Owor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLl9nZXRGaWxlc1dpdGhYaHIgPSBm dW5jdGlvbih4aHIpIHsKKyAgICAgIHZhciBmaWxlLCBmaWxlczsKKyAgICAg IHJldHVybiBmaWxlcyA9IChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIF9p LCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgICAgX3JlZiA9IHRoaXMu ZmlsZXM7CisgICAgICAgIF9yZXN1bHRzID0gW107CisgICAgICAgIGZvciAo X2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykg eworICAgICAgICAgIGZpbGUgPSBfcmVmW19pXTsKKyAgICAgICAgICBpZiAo ZmlsZS54aHIgPT09IHhocikgeworICAgICAgICAgICAgX3Jlc3VsdHMucHVz aChmaWxlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIF9yZXN1bHRzOworICAgICAgfSkuY2FsbCh0aGlzKTsKKyAgICB9Owor CisgICAgRHJvcHpvbmUucHJvdG90eXBlLmNhbmNlbFVwbG9hZCA9IGZ1bmN0 aW9uKGZpbGUpIHsKKyAgICAgIHZhciBncm91cGVkRmlsZSwgZ3JvdXBlZEZp bGVzLCBfaSwgX2osIF9sZW4sIF9sZW4xLCBfcmVmOworICAgICAgaWYgKGZp bGUuc3RhdHVzID09PSBEcm9wem9uZS5VUExPQURJTkcpIHsKKyAgICAgICAg Z3JvdXBlZEZpbGVzID0gdGhpcy5fZ2V0RmlsZXNXaXRoWGhyKGZpbGUueGhy KTsKKyAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBncm91cGVkRmlsZXMu bGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgICBncm91cGVk RmlsZSA9IGdyb3VwZWRGaWxlc1tfaV07CisgICAgICAgICAgZ3JvdXBlZEZp bGUuc3RhdHVzID0gRHJvcHpvbmUuQ0FOQ0VMRUQ7CisgICAgICAgIH0KKyAg ICAgICAgZmlsZS54aHIuYWJvcnQoKTsKKyAgICAgICAgZm9yIChfaiA9IDAs IF9sZW4xID0gZ3JvdXBlZEZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2or KykgeworICAgICAgICAgIGdyb3VwZWRGaWxlID0gZ3JvdXBlZEZpbGVzW19q XTsKKyAgICAgICAgICB0aGlzLmVtaXQoImNhbmNlbGVkIiwgZ3JvdXBlZEZp bGUpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBs b2FkTXVsdGlwbGUpIHsKKyAgICAgICAgICB0aGlzLmVtaXQoImNhbmNlbGVk bXVsdGlwbGUiLCBncm91cGVkRmlsZXMpOworICAgICAgICB9CisgICAgICB9 IGVsc2UgaWYgKChfcmVmID0gZmlsZS5zdGF0dXMpID09PSBEcm9wem9uZS5B RERFRCB8fCBfcmVmID09PSBEcm9wem9uZS5RVUVVRUQpIHsKKyAgICAgICAg ZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5DQU5DRUxFRDsKKyAgICAgICAgdGhp cy5lbWl0KCJjYW5jZWxlZCIsIGZpbGUpOworICAgICAgICBpZiAodGhpcy5v cHRpb25zLnVwbG9hZE11bHRpcGxlKSB7CisgICAgICAgICAgdGhpcy5lbWl0 KCJjYW5jZWxlZG11bHRpcGxlIiwgW2ZpbGVdKTsKKyAgICAgICAgfQorICAg ICAgfQorICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVl KSB7CisgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpOworICAg ICAgfQorICAgIH07CisKKyAgICByZXNvbHZlT3B0aW9uID0gZnVuY3Rpb24o KSB7CisgICAgICB2YXIgYXJncywgb3B0aW9uOworICAgICAgb3B0aW9uID0g YXJndW1lbnRzWzBdLCBhcmdzID0gMiA8PSBhcmd1bWVudHMubGVuZ3RoID8g X19zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiBbXTsKKyAgICAgIGlmICh0 eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHJldHVy biBvcHRpb24uYXBwbHkodGhpcywgYXJncyk7CisgICAgICB9CisgICAgICBy ZXR1cm4gb3B0aW9uOworICAgIH07CisKKyAgICBEcm9wem9uZS5wcm90b3R5 cGUudXBsb2FkRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgIHJldHVy biB0aGlzLnVwbG9hZEZpbGVzKFtmaWxlXSk7CisgICAgfTsKKworICAgIERy b3B6b25lLnByb3RvdHlwZS51cGxvYWRGaWxlcyA9IGZ1bmN0aW9uKGZpbGVz KSB7CisgICAgICB2YXIgZmlsZSwgZm9ybURhdGEsIGhhbmRsZUVycm9yLCBo ZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSwgaGVhZGVycywgaSwgaW5wdXQsIGlu cHV0TmFtZSwgaW5wdXRUeXBlLCBrZXksIG1ldGhvZCwgb3B0aW9uLCBwcm9n cmVzc09iaiwgcmVzcG9uc2UsIHVwZGF0ZVByb2dyZXNzLCB1cmwsIHZhbHVl LCB4aHIsIF9pLCBfaiwgX2ssIF9sLCBfbGVuLCBfbGVuMSwgX2xlbjIsIF9s ZW4zLCBfbSwgX3JlZiwgX3JlZjEsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9y ZWY1OworICAgICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAg ICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVu OyBfaSsrKSB7CisgICAgICAgIGZpbGUgPSBmaWxlc1tfaV07CisgICAgICAg IGZpbGUueGhyID0geGhyOworICAgICAgfQorICAgICAgbWV0aG9kID0gcmVz b2x2ZU9wdGlvbih0aGlzLm9wdGlvbnMubWV0aG9kLCBmaWxlcyk7CisgICAg ICB1cmwgPSByZXNvbHZlT3B0aW9uKHRoaXMub3B0aW9ucy51cmwsIGZpbGVz KTsKKyAgICAgIHhoci5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTsKKyAgICAg IHhoci53aXRoQ3JlZGVudGlhbHMgPSAhIXRoaXMub3B0aW9ucy53aXRoQ3Jl ZGVudGlhbHM7CisgICAgICByZXNwb25zZSA9IG51bGw7CisgICAgICBoYW5k bGVFcnJvciA9IChmdW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4g ZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIF9qLCBfbGVuMSwgX3Jlc3Vs dHM7CisgICAgICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgICAgICBmb3Ig KF9qID0gMCwgX2xlbjEgPSBmaWxlcy5sZW5ndGg7IF9qIDwgX2xlbjE7IF9q KyspIHsKKyAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tfal07CisgICAgICAg ICAgICBfcmVzdWx0cy5wdXNoKF90aGlzLl9lcnJvclByb2Nlc3NpbmcoZmls ZXMsIHJlc3BvbnNlIHx8IF90aGlzLm9wdGlvbnMuZGljdFJlc3BvbnNlRXJy b3IucmVwbGFjZSgie3tzdGF0dXNDb2RlfX0iLCB4aHIuc3RhdHVzKSwgeGhy KSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBfcmVzdWx0czsK KyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAgdXBkYXRlUHJv Z3Jlc3MgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1 bmN0aW9uKGUpIHsKKyAgICAgICAgICB2YXIgYWxsRmlsZXNGaW5pc2hlZCwg cHJvZ3Jlc3MsIF9qLCBfaywgX2wsIF9sZW4xLCBfbGVuMiwgX2xlbjMsIF9y ZXN1bHRzOworICAgICAgICAgIGlmIChlICE9IG51bGwpIHsKKyAgICAgICAg ICAgIHByb2dyZXNzID0gMTAwICogZS5sb2FkZWQgLyBlLnRvdGFsOworICAg ICAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gZmlsZXMubGVuZ3RoOyBf aiA8IF9sZW4xOyBfaisrKSB7CisgICAgICAgICAgICAgIGZpbGUgPSBmaWxl c1tfal07CisgICAgICAgICAgICAgIGZpbGUudXBsb2FkID0geworICAgICAg ICAgICAgICAgIHByb2dyZXNzOiBwcm9ncmVzcywKKyAgICAgICAgICAgICAg ICB0b3RhbDogZS50b3RhbCwKKyAgICAgICAgICAgICAgICBieXRlc1NlbnQ6 IGUubG9hZGVkCisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsbEZpbGVzRmluaXNo ZWQgPSB0cnVlOworICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxMDA7CisgICAg ICAgICAgICBmb3IgKF9rID0gMCwgX2xlbjIgPSBmaWxlcy5sZW5ndGg7IF9r IDwgX2xlbjI7IF9rKyspIHsKKyAgICAgICAgICAgICAgZmlsZSA9IGZpbGVz W19rXTsKKyAgICAgICAgICAgICAgaWYgKCEoZmlsZS51cGxvYWQucHJvZ3Jl c3MgPT09IDEwMCAmJiBmaWxlLnVwbG9hZC5ieXRlc1NlbnQgPT09IGZpbGUu dXBsb2FkLnRvdGFsKSkgeworICAgICAgICAgICAgICAgIGFsbEZpbGVzRmlu aXNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICBmaWxlLnVwbG9hZC5wcm9ncmVzcyA9IHByb2dyZXNzOworICAgICAgICAg ICAgICBmaWxlLnVwbG9hZC5ieXRlc1NlbnQgPSBmaWxlLnVwbG9hZC50b3Rh bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhbGxGaWxlc0Zp bmlzaGVkKSB7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9CisgICAgICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAg ICAgICAgICBmb3IgKF9sID0gMCwgX2xlbjMgPSBmaWxlcy5sZW5ndGg7IF9s IDwgX2xlbjM7IF9sKyspIHsKKyAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tf bF07CisgICAgICAgICAgICBfcmVzdWx0cy5wdXNoKF90aGlzLmVtaXQoInVw bG9hZHByb2dyZXNzIiwgZmlsZSwgcHJvZ3Jlc3MsIGZpbGUudXBsb2FkLmJ5 dGVzU2VudCkpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3Jl c3VsdHM7CisgICAgICAgIH07CisgICAgICB9KSh0aGlzKTsKKyAgICAgIHho ci5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJu IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICB2YXIgX3JlZjsKKyAgICAgICAg ICBpZiAoZmlsZXNbMF0uc3RhdHVzID09PSBEcm9wem9uZS5DQU5DRUxFRCkg eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAg ICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IDQpIHsKKyAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVzcG9uc2UgPSB4aHIu cmVzcG9uc2VUZXh0OworICAgICAgICAgIGlmICh4aHIuZ2V0UmVzcG9uc2VI ZWFkZXIoImNvbnRlbnQtdHlwZSIpICYmIH54aHIuZ2V0UmVzcG9uc2VIZWFk ZXIoImNvbnRlbnQtdHlwZSIpLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24i KSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgcmVzcG9u c2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTsKKyAgICAgICAgICAgIH0gY2F0 Y2ggKF9lcnJvcikgeworICAgICAgICAgICAgICBlID0gX2Vycm9yOworICAg ICAgICAgICAgICByZXNwb25zZSA9ICJJbnZhbGlkIEpTT04gcmVzcG9uc2Ug ZnJvbSBzZXJ2ZXIuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoKTsKKyAgICAgICAgICBpZiAoISgo MjAwIDw9IChfcmVmID0geGhyLnN0YXR1cykgJiYgX3JlZiA8IDMwMCkpKSB7 CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoKTsKKyAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9maW5pc2hl ZChmaWxlcywgcmVzcG9uc2UsIGUpOworICAgICAgICAgIH0KKyAgICAgICAg fTsKKyAgICAgIH0pKHRoaXMpOworICAgICAgeGhyLm9uZXJyb3IgPSAoZnVu Y3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewor ICAgICAgICAgIGlmIChmaWxlc1swXS5zdGF0dXMgPT09IERyb3B6b25lLkNB TkNFTEVEKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQor ICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigpOworICAgICAgICB9Owor ICAgICAgfSkodGhpcyk7CisgICAgICBwcm9ncmVzc09iaiA9IChfcmVmID0g eGhyLnVwbG9hZCkgIT0gbnVsbCA/IF9yZWYgOiB4aHI7CisgICAgICBwcm9n cmVzc09iai5vbnByb2dyZXNzID0gdXBkYXRlUHJvZ3Jlc3M7CisgICAgICBo ZWFkZXJzID0geworICAgICAgICAiQWNjZXB0IjogImFwcGxpY2F0aW9uL2pz b24iLAorICAgICAgICAiQ2FjaGUtQ29udHJvbCI6ICJuby1jYWNoZSIsCisg ICAgICAgICJYLVJlcXVlc3RlZC1XaXRoIjogIlhNTEh0dHBSZXF1ZXN0Igor ICAgICAgfTsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGVhZGVycykgewor ICAgICAgICBleHRlbmQoaGVhZGVycywgdGhpcy5vcHRpb25zLmhlYWRlcnMp OworICAgICAgfQorICAgICAgZm9yIChoZWFkZXJOYW1lIGluIGhlYWRlcnMp IHsKKyAgICAgICAgaGVhZGVyVmFsdWUgPSBoZWFkZXJzW2hlYWRlck5hbWVd OworICAgICAgICBpZiAoaGVhZGVyVmFsdWUpIHsKKyAgICAgICAgICB4aHIu c2V0UmVxdWVzdEhlYWRlcihoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSk7Cisg ICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1E YXRhKCk7CisgICAgICBpZiAodGhpcy5vcHRpb25zLnBhcmFtcykgeworICAg ICAgICBfcmVmMSA9IHRoaXMub3B0aW9ucy5wYXJhbXM7CisgICAgICAgIGZv ciAoa2V5IGluIF9yZWYxKSB7CisgICAgICAgICAgdmFsdWUgPSBfcmVmMVtr ZXldOworICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTsK KyAgICAgICAgfQorICAgICAgfQorICAgICAgZm9yIChfaiA9IDAsIF9sZW4x ID0gZmlsZXMubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7CisgICAgICAg IGZpbGUgPSBmaWxlc1tfal07CisgICAgICAgIHRoaXMuZW1pdCgic2VuZGlu ZyIsIGZpbGUsIHhociwgZm9ybURhdGEpOworICAgICAgfQorICAgICAgaWYg KHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkgeworICAgICAgICB0aGlz LmVtaXQoInNlbmRpbmdtdWx0aXBsZSIsIGZpbGVzLCB4aHIsIGZvcm1EYXRh KTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZSA9 PT0gIkZPUk0iKSB7CisgICAgICAgIF9yZWYyID0gdGhpcy5lbGVtZW50LnF1 ZXJ5U2VsZWN0b3JBbGwoImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBidXR0 b24iKTsKKyAgICAgICAgZm9yIChfayA9IDAsIF9sZW4yID0gX3JlZjIubGVu Z3RoOyBfayA8IF9sZW4yOyBfaysrKSB7CisgICAgICAgICAgaW5wdXQgPSBf cmVmMltfa107CisgICAgICAgICAgaW5wdXROYW1lID0gaW5wdXQuZ2V0QXR0 cmlidXRlKCJuYW1lIik7CisgICAgICAgICAgaW5wdXRUeXBlID0gaW5wdXQu Z2V0QXR0cmlidXRlKCJ0eXBlIik7CisgICAgICAgICAgaWYgKGlucHV0LnRh Z05hbWUgPT09ICJTRUxFQ1QiICYmIGlucHV0Lmhhc0F0dHJpYnV0ZSgibXVs dGlwbGUiKSkgeworICAgICAgICAgICAgX3JlZjMgPSBpbnB1dC5vcHRpb25z OworICAgICAgICAgICAgZm9yIChfbCA9IDAsIF9sZW4zID0gX3JlZjMubGVu Z3RoOyBfbCA8IF9sZW4zOyBfbCsrKSB7CisgICAgICAgICAgICAgIG9wdGlv biA9IF9yZWYzW19sXTsKKyAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxl Y3RlZCkgeworICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChpbnB1 dE5hbWUsIG9wdGlvbi52YWx1ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dFR5cGUgfHwg KChfcmVmNCA9IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpKSAhPT0gImNoZWNr Ym94IiAmJiBfcmVmNCAhPT0gInJhZGlvIikgfHwgaW5wdXQuY2hlY2tlZCkg eworICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGlucHV0TmFtZSwgaW5w dXQudmFsdWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQor ICAgICAgZm9yIChpID0gX20gPSAwLCBfcmVmNSA9IGZpbGVzLmxlbmd0aCAt IDE7IDAgPD0gX3JlZjUgPyBfbSA8PSBfcmVmNSA6IF9tID49IF9yZWY1OyBp ID0gMCA8PSBfcmVmNSA/ICsrX20gOiAtLV9tKSB7CisgICAgICAgIGZvcm1E YXRhLmFwcGVuZCh0aGlzLl9nZXRQYXJhbU5hbWUoaSksIGZpbGVzW2ldLCB0 aGlzLl9yZW5hbWVGaWxlbmFtZShmaWxlc1tpXS5uYW1lKSk7CisgICAgICB9 CisgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXF1ZXN0KHhociwgZm9ybURh dGEsIGZpbGVzKTsKKyAgICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBl LnN1Ym1pdFJlcXVlc3QgPSBmdW5jdGlvbih4aHIsIGZvcm1EYXRhLCBmaWxl cykgeworICAgICAgcmV0dXJuIHhoci5zZW5kKGZvcm1EYXRhKTsKKyAgICB9 OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLl9maW5pc2hlZCA9IGZ1bmN0 aW9uKGZpbGVzLCByZXNwb25zZVRleHQsIGUpIHsKKyAgICAgIHZhciBmaWxl LCBfaSwgX2xlbjsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmlsZXMu bGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgZmlsZSA9IGZp bGVzW19pXTsKKyAgICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5TVUND RVNTOworICAgICAgICB0aGlzLmVtaXQoInN1Y2Nlc3MiLCBmaWxlLCByZXNw b25zZVRleHQsIGUpOworICAgICAgICB0aGlzLmVtaXQoImNvbXBsZXRlIiwg ZmlsZSk7CisgICAgICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLnVwbG9h ZE11bHRpcGxlKSB7CisgICAgICAgIHRoaXMuZW1pdCgic3VjY2Vzc211bHRp cGxlIiwgZmlsZXMsIHJlc3BvbnNlVGV4dCwgZSk7CisgICAgICAgIHRoaXMu ZW1pdCgiY29tcGxldGVtdWx0aXBsZSIsIGZpbGVzKTsKKyAgICAgIH0KKyAg ICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1Byb2Nlc3NRdWV1ZSkgeworICAg ICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUXVldWUoKTsKKyAgICAgIH0KKyAg ICB9OworCisgICAgRHJvcHpvbmUucHJvdG90eXBlLl9lcnJvclByb2Nlc3Np bmcgPSBmdW5jdGlvbihmaWxlcywgbWVzc2FnZSwgeGhyKSB7CisgICAgICB2 YXIgZmlsZSwgX2ksIF9sZW47CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9 IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGZp bGUgPSBmaWxlc1tfaV07CisgICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpv bmUuRVJST1I7CisgICAgICAgIHRoaXMuZW1pdCgiZXJyb3IiLCBmaWxlLCBt ZXNzYWdlLCB4aHIpOworICAgICAgICB0aGlzLmVtaXQoImNvbXBsZXRlIiwg ZmlsZSk7CisgICAgICB9CisgICAgICBpZiAodGhpcy5vcHRpb25zLnVwbG9h ZE11bHRpcGxlKSB7CisgICAgICAgIHRoaXMuZW1pdCgiZXJyb3JtdWx0aXBs ZSIsIGZpbGVzLCBtZXNzYWdlLCB4aHIpOworICAgICAgICB0aGlzLmVtaXQo ImNvbXBsZXRlbXVsdGlwbGUiLCBmaWxlcyk7CisgICAgICB9CisgICAgICBp ZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpIHsKKyAgICAgICAg cmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCk7CisgICAgICB9CisgICAgfTsK KworICAgIHJldHVybiBEcm9wem9uZTsKKworICB9KShFbWl0dGVyKTsKKwor ICBEcm9wem9uZS52ZXJzaW9uID0gIjQuMy4wIjsKKworICBEcm9wem9uZS5v cHRpb25zID0ge307CisKKyAgRHJvcHpvbmUub3B0aW9uc0ZvckVsZW1lbnQg PSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgaWYgKGVsZW1lbnQuZ2V0QXR0 cmlidXRlKCJpZCIpKSB7CisgICAgICByZXR1cm4gRHJvcHpvbmUub3B0aW9u c1tjYW1lbGl6ZShlbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSldOworICAg IH0gZWxzZSB7CisgICAgICByZXR1cm4gdm9pZCAwOworICAgIH0KKyAgfTsK KworICBEcm9wem9uZS5pbnN0YW5jZXMgPSBbXTsKKworICBEcm9wem9uZS5m b3JFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGlmICh0eXBl b2YgZWxlbWVudCA9PT0gInN0cmluZyIpIHsKKyAgICAgIGVsZW1lbnQgPSBk b2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpOworICAgIH0KKyAgICBp ZiAoKGVsZW1lbnQgIT0gbnVsbCA/IGVsZW1lbnQuZHJvcHpvbmUgOiB2b2lk IDApID09IG51bGwpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gRHJv cHpvbmUgZm91bmQgZm9yIGdpdmVuIGVsZW1lbnQuIFRoaXMgaXMgcHJvYmFi bHkgYmVjYXVzZSB5b3UncmUgdHJ5aW5nIHRvIGFjY2VzcyBpdCBiZWZvcmUg RHJvcHpvbmUgaGFkIHRoZSB0aW1lIHRvIGluaXRpYWxpemUuIFVzZSB0aGUg YGluaXRgIG9wdGlvbiB0byBzZXR1cCBhbnkgYWRkaXRpb25hbCBvYnNlcnZl cnMgb24geW91ciBEcm9wem9uZS4iKTsKKyAgICB9CisgICAgcmV0dXJuIGVs ZW1lbnQuZHJvcHpvbmU7CisgIH07CisKKyAgRHJvcHpvbmUuYXV0b0Rpc2Nv dmVyID0gdHJ1ZTsKKworICBEcm9wem9uZS5kaXNjb3ZlciA9IGZ1bmN0aW9u KCkgeworICAgIHZhciBjaGVja0VsZW1lbnRzLCBkcm9wem9uZSwgZHJvcHpv bmVzLCBfaSwgX2xlbiwgX3Jlc3VsdHM7CisgICAgaWYgKGRvY3VtZW50LnF1 ZXJ5U2VsZWN0b3JBbGwpIHsKKyAgICAgIGRyb3B6b25lcyA9IGRvY3VtZW50 LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kcm9wem9uZSIpOworICAgIH0gZWxzZSB7 CisgICAgICBkcm9wem9uZXMgPSBbXTsKKyAgICAgIGNoZWNrRWxlbWVudHMg PSBmdW5jdGlvbihlbGVtZW50cykgeworICAgICAgICB2YXIgZWwsIF9pLCBf bGVuLCBfcmVzdWx0czsKKyAgICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAg ICAgZm9yIChfaSA9IDAsIF9sZW4gPSBlbGVtZW50cy5sZW5ndGg7IF9pIDwg X2xlbjsgX2krKykgeworICAgICAgICAgIGVsID0gZWxlbWVudHNbX2ldOwor ICAgICAgICAgIGlmICgvKF58IClkcm9wem9uZSgkfCApLy50ZXN0KGVsLmNs YXNzTmFtZSkpIHsKKyAgICAgICAgICAgIF9yZXN1bHRzLnB1c2goZHJvcHpv bmVzLnB1c2goZWwpKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApOworICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgICB9OworICAg ICAgY2hlY2tFbGVtZW50cyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt ZSgiZGl2IikpOworICAgICAgY2hlY2tFbGVtZW50cyhkb2N1bWVudC5nZXRF bGVtZW50c0J5VGFnTmFtZSgiZm9ybSIpKTsKKyAgICB9CisgICAgX3Jlc3Vs dHMgPSBbXTsKKyAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGRyb3B6b25lcy5s ZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgZHJvcHpvbmUgPSBk cm9wem9uZXNbX2ldOworICAgICAgaWYgKERyb3B6b25lLm9wdGlvbnNGb3JF bGVtZW50KGRyb3B6b25lKSAhPT0gZmFsc2UpIHsKKyAgICAgICAgX3Jlc3Vs dHMucHVzaChuZXcgRHJvcHpvbmUoZHJvcHpvbmUpKTsKKyAgICAgIH0gZWxz ZSB7CisgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTsKKyAgICAgIH0K KyAgICB9CisgICAgcmV0dXJuIF9yZXN1bHRzOworICB9OworCisgIERyb3B6 b25lLmJsYWNrbGlzdGVkQnJvd3NlcnMgPSBbL29wZXJhLipNYWNpbnRvc2gu KnZlcnNpb25cLzEyL2ldOworCisgIERyb3B6b25lLmlzQnJvd3NlclN1cHBv cnRlZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBjYXBhYmxlQnJvd3Nlciwg cmVnZXgsIF9pLCBfbGVuLCBfcmVmOworICAgIGNhcGFibGVCcm93c2VyID0g dHJ1ZTsKKyAgICBpZiAod2luZG93LkZpbGUgJiYgd2luZG93LkZpbGVSZWFk ZXIgJiYgd2luZG93LkZpbGVMaXN0ICYmIHdpbmRvdy5CbG9iICYmIHdpbmRv dy5Gb3JtRGF0YSAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSB7CisgICAg ICBpZiAoISgiY2xhc3NMaXN0IiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50 KCJhIikpKSB7CisgICAgICAgIGNhcGFibGVCcm93c2VyID0gZmFsc2U7Cisg ICAgICB9IGVsc2UgeworICAgICAgICBfcmVmID0gRHJvcHpvbmUuYmxhY2ts aXN0ZWRCcm93c2VyczsKKyAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBf cmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgICAgcmVn ZXggPSBfcmVmW19pXTsKKyAgICAgICAgICBpZiAocmVnZXgudGVzdChuYXZp Z2F0b3IudXNlckFnZW50KSkgeworICAgICAgICAgICAgY2FwYWJsZUJyb3dz ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBj YXBhYmxlQnJvd3NlciA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gY2Fw YWJsZUJyb3dzZXI7CisgIH07CisKKyAgd2l0aG91dCA9IGZ1bmN0aW9uKGxp c3QsIHJlamVjdGVkSXRlbSkgeworICAgIHZhciBpdGVtLCBfaSwgX2xlbiwg X3Jlc3VsdHM7CisgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICBmb3IgKF9pID0g MCwgX2xlbiA9IGxpc3QubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAg ICAgIGl0ZW0gPSBsaXN0W19pXTsKKyAgICAgIGlmIChpdGVtICE9PSByZWpl Y3RlZEl0ZW0pIHsKKyAgICAgICAgX3Jlc3VsdHMucHVzaChpdGVtKTsKKyAg ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIF9yZXN1bHRzOworICB9OworCisg IGNhbWVsaXplID0gZnVuY3Rpb24oc3RyKSB7CisgICAgcmV0dXJuIHN0ci5y ZXBsYWNlKC9bXC1fXShcdykvZywgZnVuY3Rpb24obWF0Y2gpIHsKKyAgICAg IHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTsKKyAgICB9 KTsKKyAgfTsKKworICBEcm9wem9uZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rp b24oc3RyaW5nKSB7CisgICAgdmFyIGRpdjsKKyAgICBkaXYgPSBkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkaXYuaW5uZXJIVE1MID0g c3RyaW5nOworICAgIHJldHVybiBkaXYuY2hpbGROb2Rlc1swXTsKKyAgfTsK KworICBEcm9wem9uZS5lbGVtZW50SW5zaWRlID0gZnVuY3Rpb24oZWxlbWVu dCwgY29udGFpbmVyKSB7CisgICAgaWYgKGVsZW1lbnQgPT09IGNvbnRhaW5l cikgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHdoaWxlIChl bGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSB7CisgICAgICBpZiAoZWxl bWVudCA9PT0gY29udGFpbmVyKSB7CisgICAgICAgIHJldHVybiB0cnVlOwor ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAg RHJvcHpvbmUuZ2V0RWxlbWVudCA9IGZ1bmN0aW9uKGVsLCBuYW1lKSB7Cisg ICAgdmFyIGVsZW1lbnQ7CisgICAgaWYgKHR5cGVvZiBlbCA9PT0gInN0cmlu ZyIpIHsKKyAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y KGVsKTsKKyAgICB9IGVsc2UgaWYgKGVsLm5vZGVUeXBlICE9IG51bGwpIHsK KyAgICAgIGVsZW1lbnQgPSBlbDsKKyAgICB9CisgICAgaWYgKGVsZW1lbnQg PT0gbnVsbCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGAi ICsgbmFtZSArICJgIG9wdGlvbiBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUg YSBDU1Mgc2VsZWN0b3Igb3IgYSBwbGFpbiBIVE1MIGVsZW1lbnQuIik7Cisg ICAgfQorICAgIHJldHVybiBlbGVtZW50OworICB9OworCisgIERyb3B6b25l LmdldEVsZW1lbnRzID0gZnVuY3Rpb24oZWxzLCBuYW1lKSB7CisgICAgdmFy IGUsIGVsLCBlbGVtZW50cywgX2ksIF9qLCBfbGVuLCBfbGVuMSwgX3JlZjsK KyAgICBpZiAoZWxzIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgIGVsZW1l bnRzID0gW107CisgICAgICB0cnkgeworICAgICAgICBmb3IgKF9pID0gMCwg X2xlbiA9IGVscy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAg ICAgIGVsID0gZWxzW19pXTsKKyAgICAgICAgICBlbGVtZW50cy5wdXNoKHRo aXMuZ2V0RWxlbWVudChlbCwgbmFtZSkpOworICAgICAgICB9CisgICAgICB9 IGNhdGNoIChfZXJyb3IpIHsKKyAgICAgICAgZSA9IF9lcnJvcjsKKyAgICAg ICAgZWxlbWVudHMgPSBudWxsOworICAgICAgfQorICAgIH0gZWxzZSBpZiAo dHlwZW9mIGVscyA9PT0gInN0cmluZyIpIHsKKyAgICAgIGVsZW1lbnRzID0g W107CisgICAgICBfcmVmID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChl bHMpOworICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gX3JlZi5sZW5ndGg7 IF9qIDwgX2xlbjE7IF9qKyspIHsKKyAgICAgICAgZWwgPSBfcmVmW19qXTsK KyAgICAgICAgZWxlbWVudHMucHVzaChlbCk7CisgICAgICB9CisgICAgfSBl bHNlIGlmIChlbHMubm9kZVR5cGUgIT0gbnVsbCkgeworICAgICAgZWxlbWVu dHMgPSBbZWxzXTsKKyAgICB9CisgICAgaWYgKCEoKGVsZW1lbnRzICE9IG51 bGwpICYmIGVsZW1lbnRzLmxlbmd0aCkpIHsKKyAgICAgIHRocm93IG5ldyBF cnJvcigiSW52YWxpZCBgIiArIG5hbWUgKyAiYCBvcHRpb24gcHJvdmlkZWQu IFBsZWFzZSBwcm92aWRlIGEgQ1NTIHNlbGVjdG9yLCBhIHBsYWluIEhUTUwg ZWxlbWVudCBvciBhIGxpc3Qgb2YgdGhvc2UuIik7CisgICAgfQorICAgIHJl dHVybiBlbGVtZW50czsKKyAgfTsKKworICBEcm9wem9uZS5jb25maXJtID0g ZnVuY3Rpb24ocXVlc3Rpb24sIGFjY2VwdGVkLCByZWplY3RlZCkgeworICAg IGlmICh3aW5kb3cuY29uZmlybShxdWVzdGlvbikpIHsKKyAgICAgIHJldHVy biBhY2NlcHRlZCgpOworICAgIH0gZWxzZSBpZiAocmVqZWN0ZWQgIT0gbnVs bCkgeworICAgICAgcmV0dXJuIHJlamVjdGVkKCk7CisgICAgfQorICB9Owor CisgIERyb3B6b25lLmlzVmFsaWRGaWxlID0gZnVuY3Rpb24oZmlsZSwgYWNj ZXB0ZWRGaWxlcykgeworICAgIHZhciBiYXNlTWltZVR5cGUsIG1pbWVUeXBl LCB2YWxpZFR5cGUsIF9pLCBfbGVuOworICAgIGlmICghYWNjZXB0ZWRGaWxl cykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGFjY2VwdGVk RmlsZXMgPSBhY2NlcHRlZEZpbGVzLnNwbGl0KCIsIik7CisgICAgbWltZVR5 cGUgPSBmaWxlLnR5cGU7CisgICAgYmFzZU1pbWVUeXBlID0gbWltZVR5cGUu cmVwbGFjZSgvXC8uKiQvLCAiIik7CisgICAgZm9yIChfaSA9IDAsIF9sZW4g PSBhY2NlcHRlZEZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7Cisg ICAgICB2YWxpZFR5cGUgPSBhY2NlcHRlZEZpbGVzW19pXTsKKyAgICAgIHZh bGlkVHlwZSA9IHZhbGlkVHlwZS50cmltKCk7CisgICAgICBpZiAodmFsaWRU eXBlLmNoYXJBdCgwKSA9PT0gIi4iKSB7CisgICAgICAgIGlmIChmaWxlLm5h bWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbGlkVHlwZS50b0xvd2VyQ2Fz ZSgpLCBmaWxlLm5hbWUubGVuZ3RoIC0gdmFsaWRUeXBlLmxlbmd0aCkgIT09 IC0xKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg ICAgIH0gZWxzZSBpZiAoL1wvXCokLy50ZXN0KHZhbGlkVHlwZSkpIHsKKyAg ICAgICAgaWYgKGJhc2VNaW1lVHlwZSA9PT0gdmFsaWRUeXBlLnJlcGxhY2Uo L1wvLiokLywgIiIpKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtaW1lVHlwZSA9 PT0gdmFsaWRUeXBlKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9 OworCisgIGlmICh0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiBq UXVlcnkgIT09IG51bGwpIHsKKyAgICBqUXVlcnkuZm4uZHJvcHpvbmUgPSBm dW5jdGlvbihvcHRpb25zKSB7CisgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1 bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gbmV3IERyb3B6b25lKHRoaXMs IG9wdGlvbnMpOworICAgICAgfSk7CisgICAgfTsKKyAgfQorCisgIGlmICh0 eXBlb2YgbW9kdWxlICE9PSAidW5kZWZpbmVkIiAmJiBtb2R1bGUgIT09IG51 bGwpIHsKKyAgICBtb2R1bGUuZXhwb3J0cyA9IERyb3B6b25lOworICB9IGVs c2UgeworICAgIHdpbmRvdy5Ecm9wem9uZSA9IERyb3B6b25lOworICB9CisK KyAgRHJvcHpvbmUuQURERUQgPSAiYWRkZWQiOworCisgIERyb3B6b25lLlFV RVVFRCA9ICJxdWV1ZWQiOworCisgIERyb3B6b25lLkFDQ0VQVEVEID0gRHJv cHpvbmUuUVVFVUVEOworCisgIERyb3B6b25lLlVQTE9BRElORyA9ICJ1cGxv YWRpbmciOworCisgIERyb3B6b25lLlBST0NFU1NJTkcgPSBEcm9wem9uZS5V UExPQURJTkc7CisKKyAgRHJvcHpvbmUuQ0FOQ0VMRUQgPSAiY2FuY2VsZWQi OworCisgIERyb3B6b25lLkVSUk9SID0gImVycm9yIjsKKworICBEcm9wem9u ZS5TVUNDRVNTID0gInN1Y2Nlc3MiOworCisKKyAgLyoKKworICBCdWdmaXgg Zm9yIGlPUyA2IGFuZCA3CisgIFNvdXJjZTogaHR0cDovL3N0YWNrb3ZlcmZs b3cuY29tL3F1ZXN0aW9ucy8xMTkyOTA5OS9odG1sNS1jYW52YXMtZHJhd2lt YWdlLXJhdGlvLWJ1Zy1pb3MKKyAgYmFzZWQgb24gdGhlIHdvcmsgb2YgaHR0 cHM6Ly9naXRodWIuY29tL3N0b21pdGEvaW9zLWltYWdlZmlsZS1tZWdhcGl4 ZWwKKyAgICovCisKKyAgZGV0ZWN0VmVydGljYWxTcXVhc2ggPSBmdW5jdGlv bihpbWcpIHsKKyAgICB2YXIgYWxwaGEsIGNhbnZhcywgY3R4LCBkYXRhLCBl eSwgaWgsIGl3LCBweSwgcmF0aW8sIHN5OworICAgIGl3ID0gaW1nLm5hdHVy YWxXaWR0aDsKKyAgICBpaCA9IGltZy5uYXR1cmFsSGVpZ2h0OworICAgIGNh bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAg IGNhbnZhcy53aWR0aCA9IDE7CisgICAgY2FudmFzLmhlaWdodCA9IGloOwor ICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGN0eC5k cmF3SW1hZ2UoaW1nLCAwLCAwKTsKKyAgICBkYXRhID0gY3R4LmdldEltYWdl RGF0YSgwLCAwLCAxLCBpaCkuZGF0YTsKKyAgICBzeSA9IDA7CisgICAgZXkg PSBpaDsKKyAgICBweSA9IGloOworICAgIHdoaWxlIChweSA+IHN5KSB7Cisg ICAgICBhbHBoYSA9IGRhdGFbKHB5IC0gMSkgKiA0ICsgM107CisgICAgICBp ZiAoYWxwaGEgPT09IDApIHsKKyAgICAgICAgZXkgPSBweTsKKyAgICAgIH0g ZWxzZSB7CisgICAgICAgIHN5ID0gcHk7CisgICAgICB9CisgICAgICBweSA9 IChleSArIHN5KSA+PiAxOworICAgIH0KKyAgICByYXRpbyA9IHB5IC8gaWg7 CisgICAgaWYgKHJhdGlvID09PSAwKSB7CisgICAgICByZXR1cm4gMTsKKyAg ICB9IGVsc2UgeworICAgICAgcmV0dXJuIHJhdGlvOworICAgIH0KKyAgfTsK KworICBkcmF3SW1hZ2VJT1NGaXggPSBmdW5jdGlvbihjdHgsIGltZywgc3gs IHN5LCBzdywgc2gsIGR4LCBkeSwgZHcsIGRoKSB7CisgICAgdmFyIHZlcnRT cXVhc2hSYXRpbzsKKyAgICB2ZXJ0U3F1YXNoUmF0aW8gPSBkZXRlY3RWZXJ0 aWNhbFNxdWFzaChpbWcpOworICAgIHJldHVybiBjdHguZHJhd0ltYWdlKGlt Zywgc3gsIHN5LCBzdywgc2gsIGR4LCBkeSwgZHcsIGRoIC8gdmVydFNxdWFz aFJhdGlvKTsKKyAgfTsKKworCisgIC8qCisgICAqIGNvbnRlbnRsb2FkZWQu anMKKyAgICoKKyAgICogQXV0aG9yOiBEaWVnbyBQZXJpbmkgKGRpZWdvLnBl cmluaSBhdCBnbWFpbC5jb20pCisgICAqIFN1bW1hcnk6IGNyb3NzLWJyb3dz ZXIgd3JhcHBlciBmb3IgRE9NQ29udGVudExvYWRlZAorICAgKiBVcGRhdGVk OiAyMDEwMTAyMAorICAgKiBMaWNlbnNlOiBNSVQKKyAgICogVmVyc2lvbjog MS4yCisgICAqCisgICAqIFVSTDoKKyAgICogaHR0cDovL2phdmFzY3JpcHQu bndib3guY29tL0NvbnRlbnRMb2FkZWQvCisgICAqIGh0dHA6Ly9qYXZhc2Ny aXB0Lm53Ym94LmNvbS9Db250ZW50TG9hZGVkL01JVC1MSUNFTlNFCisgICAq LworCisgIGNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbih3aW4sIGZuKSB7Cisg ICAgdmFyIGFkZCwgZG9jLCBkb25lLCBpbml0LCBwb2xsLCBwcmUsIHJlbSwg cm9vdCwgdG9wOworICAgIGRvbmUgPSBmYWxzZTsKKyAgICB0b3AgPSB0cnVl OworICAgIGRvYyA9IHdpbi5kb2N1bWVudDsKKyAgICByb290ID0gZG9jLmRv Y3VtZW50RWxlbWVudDsKKyAgICBhZGQgPSAoZG9jLmFkZEV2ZW50TGlzdGVu ZXIgPyAiYWRkRXZlbnRMaXN0ZW5lciIgOiAiYXR0YWNoRXZlbnQiKTsKKyAg ICByZW0gPSAoZG9jLmFkZEV2ZW50TGlzdGVuZXIgPyAicmVtb3ZlRXZlbnRM aXN0ZW5lciIgOiAiZGV0YWNoRXZlbnQiKTsKKyAgICBwcmUgPSAoZG9jLmFk ZEV2ZW50TGlzdGVuZXIgPyAiIiA6ICJvbiIpOworICAgIGluaXQgPSBmdW5j dGlvbihlKSB7CisgICAgICBpZiAoZS50eXBlID09PSAicmVhZHlzdGF0ZWNo YW5nZSIgJiYgZG9jLnJlYWR5U3RhdGUgIT09ICJjb21wbGV0ZSIpIHsKKyAg ICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgKGUudHlwZSA9PT0gImxv YWQiID8gd2luIDogZG9jKVtyZW1dKHByZSArIGUudHlwZSwgaW5pdCwgZmFs c2UpOworICAgICAgaWYgKCFkb25lICYmIChkb25lID0gdHJ1ZSkpIHsKKyAg ICAgICAgcmV0dXJuIGZuLmNhbGwod2luLCBlLnR5cGUgfHwgZSk7CisgICAg ICB9CisgICAgfTsKKyAgICBwb2xsID0gZnVuY3Rpb24oKSB7CisgICAgICB2 YXIgZTsKKyAgICAgIHRyeSB7CisgICAgICAgIHJvb3QuZG9TY3JvbGwoImxl ZnQiKTsKKyAgICAgIH0gY2F0Y2ggKF9lcnJvcikgeworICAgICAgICBlID0g X2Vycm9yOworICAgICAgICBzZXRUaW1lb3V0KHBvbGwsIDUwKTsKKyAgICAg ICAgcmV0dXJuOworICAgICAgfQorICAgICAgcmV0dXJuIGluaXQoInBvbGwi KTsKKyAgICB9OworICAgIGlmIChkb2MucmVhZHlTdGF0ZSAhPT0gImNvbXBs ZXRlIikgeworICAgICAgaWYgKGRvYy5jcmVhdGVFdmVudE9iamVjdCAmJiBy b290LmRvU2Nyb2xsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgdG9w ID0gIXdpbi5mcmFtZUVsZW1lbnQ7CisgICAgICAgIH0gY2F0Y2ggKF9lcnJv cikge30KKyAgICAgICAgaWYgKHRvcCkgeworICAgICAgICAgIHBvbGwoKTsK KyAgICAgICAgfQorICAgICAgfQorICAgICAgZG9jW2FkZF0ocHJlICsgIkRP TUNvbnRlbnRMb2FkZWQiLCBpbml0LCBmYWxzZSk7CisgICAgICBkb2NbYWRk XShwcmUgKyAicmVhZHlzdGF0ZWNoYW5nZSIsIGluaXQsIGZhbHNlKTsKKyAg ICAgIHJldHVybiB3aW5bYWRkXShwcmUgKyAibG9hZCIsIGluaXQsIGZhbHNl KTsKKyAgICB9CisgIH07CisKKyAgRHJvcHpvbmUuX2F1dG9EaXNjb3ZlckZ1 bmN0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKERyb3B6b25lLmF1dG9E aXNjb3ZlcikgeworICAgICAgcmV0dXJuIERyb3B6b25lLmRpc2NvdmVyKCk7 CisgICAgfQorICB9OworCisgIGNvbnRlbnRMb2FkZWQod2luZG93LCBEcm9w em9uZS5fYXV0b0Rpc2NvdmVyRnVuY3Rpb24pOworCit9KS5jYWxsKHRoaXMp OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL2Jhc2UuaHRt bCBiL3dlYi9wZ2FkbWluL3RlbXBsYXRlcy9iYXNlLmh0bWwKaW5kZXggZmMw MWY5Yy4uN2U4ZWFhZiAxMDA3NTUKLS0tIGEvd2ViL3BnYWRtaW4vdGVtcGxh dGVzL2Jhc2UuaHRtbAorKysgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvYmFz ZS5odG1sCkBAIC0yOCw2ICsyOCw3IEBACiAgICAgICAgIDxsaW5rIHR5cGU9 InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9Int7IHVybF9mb3Io J3N0YXRpYycsIGZpbGVuYW1lPSdjc3MvYmFja2dyaWQvYmFja2dyaWQtcGFn aW5hdG9yLmNzcycgaWYgY29uZmlnLkRFQlVHIGVsc2UgJ2Nzcy9iYWNrZ3Jp ZC9iYWNrZ3JpZC1wYWdpbmF0b3IubWluLmNzcycpfX0iLz4KICAgICAgICAg PGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i e3sgdXJsX2Zvcignc3RhdGljJywgZmlsZW5hbWU9J2Nzcy9iYWNrZ3JpZC9i YWNrZ3JpZC1maWx0ZXIuY3NzJyBpZiBjb25maWcuREVCVUcgZWxzZSAnY3Nz L2JhY2tncmlkL2JhY2tncmlkLWZpbHRlci5taW4uY3NzJyl9fSIvPgogICAg ICAgICA8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBo cmVmPSJ7eyB1cmxfZm9yKCdzdGF0aWMnLCBmaWxlbmFtZT0nY3NzL3NlbGVj dDIvc2VsZWN0Mi5jc3MnIGlmIGNvbmZpZy5ERUJVRyBlbHNlICdjc3Mvc2Vs ZWN0Mi9zZWxlY3QyLm1pbi5jc3MnKX19Ii8+CisgICAgICAgIDxsaW5rIHR5 cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9Int7IHVybF9m b3IoJ2ZpbGVfbWFuYWdlci5zdGF0aWMnLCBmaWxlbmFtZT0nY3NzL2ZpbGVf bWFuYWdlci5jc3MnKSB9fSI+CiAKICAgICAgICAgPCEtLSBWaWV3IHNwZWNp ZmllZCBzdHlsZXNoZWV0cyAtLT4KICAgICAgICAgeyUgZm9yIHN0eWxlc2hl ZXQgaW4gY3VycmVudF9hcHAuc3R5bGVzaGVldHMgJX0K --001a114b6a7e1c6aff053203e4af 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 --001a114b6a7e1c6aff053203e4af--