@bnsights/bbsf-admin-portal 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/bnsights-bbsf-admin-portal-1.1.6.tgz +0 -0
- package/esm2022/lib/Pages/ActiveDirectories/active-directories.component.mjs +1 -1
- package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +146 -146
- package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +152 -152
- package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +1 -1
- package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +15 -15
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/error/error.component.mjs +7 -7
- package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +12 -12
- package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +19 -19
- package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +15 -15
- package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +12 -12
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +102 -102
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +7 -7
- package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +271 -271
- package/esm2022/lib/Pages/core/auth.module.mjs +1 -1
- package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +1 -1
- package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +3 -3
- package/esm2022/lib/Pages/departments/department/department.component.mjs +48 -48
- package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +32 -32
- package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +52 -52
- package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +20 -20
- package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +100 -100
- package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +151 -151
- package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +72 -72
- package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +27 -27
- package/esm2022/lib/Pages/empty-data/empty-data.component.mjs +1 -1
- package/esm2022/lib/Pages/empty-data/empty-data.module.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +84 -84
- package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +56 -56
- package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +58 -58
- package/esm2022/lib/Pages/home/home.component.mjs +7 -7
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +129 -129
- package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +14 -14
- package/esm2022/lib/Pages/license/license/license.component.mjs +11 -11
- package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +41 -41
- package/esm2022/lib/Pages/localizations/localizations.component.mjs +125 -125
- package/esm2022/lib/Pages/logs/log/log.component.mjs +11 -11
- package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +120 -120
- package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +34 -34
- package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +83 -83
- package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +35 -35
- package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +53 -53
- package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +50 -50
- package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +16 -16
- package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +20 -20
- package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +135 -135
- package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +186 -186
- package/esm2022/lib/Pages/providers/provider/provider.component.mjs +122 -122
- package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +120 -120
- package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +29 -29
- package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +57 -57
- package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +79 -79
- package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +35 -35
- package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +27 -27
- package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +27 -27
- package/esm2022/lib/Pages/shared/Services/AccountService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LogsService.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/provider.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +36 -36
- package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +74 -74
- package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +8 -8
- package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +10 -10
- package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +89 -89
- package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +7 -7
- package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +9 -9
- package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +10 -10
- package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +222 -222
- package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +7 -7
- package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +257 -257
- package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +25 -25
- package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +24 -24
- package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +6 -6
- package/esm2022/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +52 -52
- package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +16 -16
- package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +20 -20
- package/esm2022/lib/Pages/shared/components/survey/survey.component.mjs +69 -69
- package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +180 -180
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +3 -3
- package/esm2022/lib/Pages/users/users.component.mjs +190 -190
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +176 -176
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +364 -364
- package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +67 -67
- package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +227 -227
- package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +31 -31
- package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +56 -56
- package/fesm2022/bnsights-bbsf-admin-portal.mjs +5187 -5187
- package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
- package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +0 -1
- package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +2 -2
- package/lib/Pages/workflows/tabs/tabs.component.d.ts +1 -1
- package/package.json +3 -3
- package/esm2022/bnsights-test-test-admin-portal.mjs +0 -5
- package/fesm2022/bnsights-test-test-admin-portal.mjs +0 -27181
- package/fesm2022/bnsights-test-test-admin-portal.mjs.map +0 -1
|
@@ -53,81 +53,81 @@ export class SurveyFormComponent {
|
|
|
53
53
|
///TextBox
|
|
54
54
|
case SurveyOptionType.Text.toLocaleLowerCase():
|
|
55
55
|
var Text = new TextBoxOptions();
|
|
56
|
-
Text.
|
|
57
|
-
Text.
|
|
56
|
+
Text.name = 'q' + element.iD_GUID;
|
|
57
|
+
Text.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
58
58
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
59
59
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
60
|
-
Text.
|
|
61
|
-
Text.
|
|
60
|
+
Text.hideLabel = false;
|
|
61
|
+
Text.isRequired = element.isRelatedToSurveyQuestion
|
|
62
62
|
? false
|
|
63
63
|
: element.options.isRequired;
|
|
64
|
-
Text.
|
|
65
|
-
Text.
|
|
66
|
-
Text.
|
|
67
|
-
Text.
|
|
68
|
-
Text.
|
|
64
|
+
Text.isReadonly = element.isRelatedToSurveyQuestion;
|
|
65
|
+
Text.isDisabled = this.options.Readonly;
|
|
66
|
+
Text.labelExtraClasses = this.labelClass;
|
|
67
|
+
Text.viewType = ControlLayout.Vertical;
|
|
68
|
+
Text.labelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
69
69
|
? element.options.description.arabic
|
|
70
70
|
: element.options.description.english;
|
|
71
71
|
if (element.value.text)
|
|
72
|
-
Text.
|
|
72
|
+
Text.value = element.value.text;
|
|
73
73
|
if (element.options.maxLength)
|
|
74
|
-
Text.
|
|
74
|
+
Text.maxLength = element.options.maxLength;
|
|
75
75
|
if (element.options.minLength)
|
|
76
|
-
Text.
|
|
77
|
-
Text.
|
|
76
|
+
Text.minLength = element.options.minLength;
|
|
77
|
+
Text.type = InputType.Text;
|
|
78
78
|
if (element.isRelatedToSurveyQuestion)
|
|
79
79
|
this.checkList.push(Text);
|
|
80
80
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Text, element.options.size);
|
|
81
81
|
break;
|
|
82
82
|
case SurveyOptionType.Email.toLocaleLowerCase():
|
|
83
83
|
let Email = new TextBoxOptions();
|
|
84
|
-
Email.
|
|
85
|
-
Email.
|
|
84
|
+
Email.name = 'q' + element.iD_GUID;
|
|
85
|
+
Email.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
86
86
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
87
87
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
88
|
-
Email.
|
|
89
|
-
Email.
|
|
90
|
-
Email.
|
|
88
|
+
Email.hideLabel = false;
|
|
89
|
+
Email.labelExtraClasses = this.labelClass;
|
|
90
|
+
Email.isRequired = element.isRelatedToSurveyQuestion
|
|
91
91
|
? false
|
|
92
92
|
: element.options.isRequired;
|
|
93
|
-
Email.
|
|
94
|
-
Email.
|
|
95
|
-
Email.
|
|
96
|
-
Email.
|
|
93
|
+
Email.isReadonly = element.isRelatedToSurveyQuestion;
|
|
94
|
+
Email.viewType = ControlLayout.Vertical;
|
|
95
|
+
Email.isDisabled = this.options.Readonly;
|
|
96
|
+
Email.labelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
97
97
|
? element.options.description.arabic
|
|
98
98
|
: element.options.description.english;
|
|
99
|
-
Email.
|
|
99
|
+
Email.type = InputType.Email;
|
|
100
100
|
if (element.value.text)
|
|
101
|
-
Email.
|
|
101
|
+
Email.value = element.value.text;
|
|
102
102
|
if (element.isRelatedToSurveyQuestion)
|
|
103
103
|
this.checkList.push(Email);
|
|
104
104
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Email, element.options.size);
|
|
105
105
|
break;
|
|
106
106
|
case SurveyOptionType.Number.toLocaleLowerCase():
|
|
107
107
|
let Number = new TextBoxOptions();
|
|
108
|
-
Number.
|
|
109
|
-
Number.
|
|
110
|
-
Number.
|
|
111
|
-
Number.
|
|
108
|
+
Number.name = 'q' + element.iD_GUID;
|
|
109
|
+
Number.hideLabel = false;
|
|
110
|
+
Number.labelExtraClasses = this.labelClass;
|
|
111
|
+
Number.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
112
112
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
113
113
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
114
|
-
Number.
|
|
114
|
+
Number.isRequired = element.isRelatedToSurveyQuestion
|
|
115
115
|
? false
|
|
116
116
|
: element.options.isRequired;
|
|
117
|
-
Number.
|
|
118
|
-
Number.
|
|
119
|
-
Number.
|
|
120
|
-
Number.
|
|
117
|
+
Number.isReadonly = element.isRelatedToSurveyQuestion;
|
|
118
|
+
Number.viewType = ControlLayout.Vertical;
|
|
119
|
+
Number.isDisabled = this.options.Readonly;
|
|
120
|
+
Number.labelDescription =
|
|
121
121
|
this.utilityService.isCurrentLanguageArabic()
|
|
122
122
|
? element.options.description.arabic
|
|
123
123
|
: element.options.description.english;
|
|
124
|
-
Number.
|
|
124
|
+
Number.type = InputType.Number;
|
|
125
125
|
let rangeNumber = new RangeNumber();
|
|
126
|
-
rangeNumber.
|
|
127
|
-
rangeNumber.
|
|
128
|
-
Number.
|
|
126
|
+
rangeNumber.to = element.options.maxLength;
|
|
127
|
+
rangeNumber.from = element.options.minLength;
|
|
128
|
+
Number.numberRange = rangeNumber;
|
|
129
129
|
if (element.value.text)
|
|
130
|
-
Number.
|
|
130
|
+
Number.value = element.value.text;
|
|
131
131
|
if (element.isRelatedToSurveyQuestion)
|
|
132
132
|
this.checkList.push(Number);
|
|
133
133
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Number, element.options.size);
|
|
@@ -135,53 +135,53 @@ export class SurveyFormComponent {
|
|
|
135
135
|
///DateTime
|
|
136
136
|
case SurveyOptionType.Date.toLocaleLowerCase():
|
|
137
137
|
let Date = new DatePickerOptions();
|
|
138
|
-
Date.
|
|
139
|
-
Date.
|
|
140
|
-
Date.
|
|
141
|
-
Date.
|
|
138
|
+
Date.name = 'q' + element.iD_GUID;
|
|
139
|
+
Date.hideLabel = false;
|
|
140
|
+
Date.labelExtraClasses = this.labelClass;
|
|
141
|
+
Date.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
142
142
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
143
143
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
144
|
-
Date.
|
|
144
|
+
Date.isRequired = element.isRelatedToSurveyQuestion
|
|
145
145
|
? false
|
|
146
146
|
: element.options.isRequired;
|
|
147
|
-
Date.
|
|
148
|
-
Date.
|
|
149
|
-
Date.
|
|
150
|
-
Date.
|
|
147
|
+
Date.isReadonly = element.isRelatedToSurveyQuestion;
|
|
148
|
+
Date.viewType = ControlLayout.Vertical;
|
|
149
|
+
Date.isDisabled = this.options.Readonly;
|
|
150
|
+
Date.labelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
151
151
|
? element.options.description.arabic
|
|
152
152
|
: element.options.description.english;
|
|
153
|
-
Date.
|
|
154
|
-
Date.
|
|
155
|
-
Date.
|
|
153
|
+
Date.pickerType = PickerType.Calendar;
|
|
154
|
+
Date.selectMode = SelectMode.Single;
|
|
155
|
+
Date.startView = StartView.Month;
|
|
156
156
|
if (element.value.dateTime)
|
|
157
|
-
Date.
|
|
157
|
+
Date.value = element.value.dateTime;
|
|
158
158
|
if (element.isRelatedToSurveyQuestion)
|
|
159
159
|
this.checkList.push(Date);
|
|
160
160
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Date, element.options.size);
|
|
161
161
|
break;
|
|
162
162
|
case SurveyOptionType.DateTime.toLocaleLowerCase():
|
|
163
163
|
let DateTime = new DatePickerOptions();
|
|
164
|
-
DateTime.
|
|
165
|
-
DateTime.
|
|
166
|
-
DateTime.
|
|
167
|
-
DateTime.
|
|
164
|
+
DateTime.name = 'q' + element.iD_GUID;
|
|
165
|
+
DateTime.hideLabel = false;
|
|
166
|
+
DateTime.labelExtraClasses = this.labelClass;
|
|
167
|
+
DateTime.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
168
168
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
169
169
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
170
|
-
DateTime.
|
|
170
|
+
DateTime.isRequired = element.isRelatedToSurveyQuestion
|
|
171
171
|
? false
|
|
172
172
|
: element.options.isRequired;
|
|
173
|
-
DateTime.
|
|
174
|
-
DateTime.
|
|
175
|
-
DateTime.
|
|
176
|
-
DateTime.
|
|
173
|
+
DateTime.isReadonly = element.isRelatedToSurveyQuestion;
|
|
174
|
+
DateTime.viewType = ControlLayout.Vertical;
|
|
175
|
+
DateTime.isDisabled = this.options.Readonly;
|
|
176
|
+
DateTime.labelDescription =
|
|
177
177
|
this.utilityService.isCurrentLanguageArabic()
|
|
178
178
|
? element.options.description.arabic
|
|
179
179
|
: element.options.description.english;
|
|
180
|
-
DateTime.
|
|
181
|
-
DateTime.
|
|
182
|
-
DateTime.
|
|
180
|
+
DateTime.pickerType = PickerType.Both;
|
|
181
|
+
DateTime.selectMode = SelectMode.Single;
|
|
182
|
+
DateTime.startView = StartView.Month;
|
|
183
183
|
if (element.value.dateTime)
|
|
184
|
-
DateTime.
|
|
184
|
+
DateTime.value = element.value.dateTime;
|
|
185
185
|
if (element.isRelatedToSurveyQuestion)
|
|
186
186
|
this.checkList.push(DateTime);
|
|
187
187
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, DateTime, element.options.size);
|
|
@@ -189,22 +189,22 @@ export class SurveyFormComponent {
|
|
|
189
189
|
//Dropdown
|
|
190
190
|
case SurveyOptionType.SingleSelect.toLocaleLowerCase():
|
|
191
191
|
let SingleSelect = new DropdownOptions();
|
|
192
|
-
SingleSelect.
|
|
193
|
-
SingleSelect.
|
|
194
|
-
SingleSelect.
|
|
195
|
-
SingleSelect.
|
|
192
|
+
SingleSelect.name = 'q' + element.iD_GUID;
|
|
193
|
+
SingleSelect.hideLabel = false;
|
|
194
|
+
SingleSelect.labelExtraClasses = this.labelClass;
|
|
195
|
+
SingleSelect.labelValue =
|
|
196
196
|
this.utilityService.isCurrentLanguageArabic()
|
|
197
197
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
198
198
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
199
|
-
SingleSelect.
|
|
199
|
+
SingleSelect.isRequired = element.isRelatedToSurveyQuestion
|
|
200
200
|
? false
|
|
201
201
|
: element.options.isRequired;
|
|
202
|
-
SingleSelect.
|
|
203
|
-
SingleSelect.
|
|
202
|
+
SingleSelect.isReadonly = element.isRelatedToSurveyQuestion;
|
|
203
|
+
SingleSelect.placeholder =
|
|
204
204
|
this.utilityService.getResourceValue('DefaultOptionText');
|
|
205
|
-
SingleSelect.
|
|
206
|
-
SingleSelect.
|
|
207
|
-
SingleSelect.
|
|
205
|
+
SingleSelect.viewType = ControlLayout.Vertical;
|
|
206
|
+
SingleSelect.isDisabled = this.options.Readonly;
|
|
207
|
+
SingleSelect.labelDescription =
|
|
208
208
|
this.utilityService.isCurrentLanguageArabic()
|
|
209
209
|
? element.options.description.arabic
|
|
210
210
|
: element.options.description.english;
|
|
@@ -218,31 +218,31 @@ export class SurveyFormComponent {
|
|
|
218
218
|
: option.name.english;
|
|
219
219
|
dataSource.push(item);
|
|
220
220
|
}
|
|
221
|
-
SingleSelect.
|
|
222
|
-
SingleSelect.
|
|
223
|
-
SingleSelect.
|
|
224
|
-
SingleSelect.
|
|
221
|
+
SingleSelect.dataSource = dataSource;
|
|
222
|
+
SingleSelect.singleSelection = true;
|
|
223
|
+
SingleSelect.showCheckbox = false;
|
|
224
|
+
SingleSelect.allowSearchFilter = true;
|
|
225
225
|
if (element.value.selectedIDs)
|
|
226
|
-
SingleSelect.
|
|
226
|
+
SingleSelect.selectedItems = element.value.selectedIDs[0];
|
|
227
227
|
if (element.isRelatedToSurveyQuestion)
|
|
228
228
|
this.checkList.push(SingleSelect);
|
|
229
229
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, SingleSelect, element.options.size);
|
|
230
230
|
break;
|
|
231
231
|
case SurveyOptionType.RadioButton.toLocaleLowerCase():
|
|
232
232
|
let radioButton = new RadioButtonOptions();
|
|
233
|
-
radioButton.
|
|
234
|
-
radioButton.
|
|
235
|
-
radioButton.
|
|
236
|
-
radioButton.
|
|
233
|
+
radioButton.name = 'q' + element.iD_GUID;
|
|
234
|
+
radioButton.hideLabel = false;
|
|
235
|
+
radioButton.labelExtraClasses = this.labelClass;
|
|
236
|
+
radioButton.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
237
237
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
238
238
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
239
|
-
radioButton.
|
|
239
|
+
radioButton.isRequired = element.isRelatedToSurveyQuestion
|
|
240
240
|
? false
|
|
241
241
|
: element.options.isRequired;
|
|
242
|
-
radioButton.
|
|
243
|
-
radioButton.
|
|
244
|
-
radioButton.
|
|
245
|
-
radioButton.
|
|
242
|
+
radioButton.isReadonly = element.isRelatedToSurveyQuestion;
|
|
243
|
+
radioButton.viewType = ControlLayout.Vertical;
|
|
244
|
+
radioButton.isDisabled = this.options.Readonly;
|
|
245
|
+
radioButton.labelDescription =
|
|
246
246
|
this.utilityService.isCurrentLanguageArabic()
|
|
247
247
|
? element.options.description.arabic
|
|
248
248
|
: element.options.description.english;
|
|
@@ -256,31 +256,31 @@ export class SurveyFormComponent {
|
|
|
256
256
|
: option.name.english;
|
|
257
257
|
dataSourceRadio.push(item);
|
|
258
258
|
}
|
|
259
|
-
radioButton.
|
|
259
|
+
radioButton.items = dataSourceRadio;
|
|
260
260
|
if (element.value.selectedIDs)
|
|
261
|
-
radioButton.
|
|
261
|
+
radioButton.value = element.value.selectedIDs[0];
|
|
262
262
|
if (element.isRelatedToSurveyQuestion)
|
|
263
263
|
this.checkList.push(radioButton);
|
|
264
264
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, radioButton, element.options.size);
|
|
265
265
|
break;
|
|
266
266
|
case SurveyOptionType.MultipleSelect.toLocaleLowerCase():
|
|
267
267
|
let MulipleSelect = new DropdownOptions();
|
|
268
|
-
MulipleSelect.
|
|
269
|
-
MulipleSelect.
|
|
270
|
-
MulipleSelect.
|
|
271
|
-
MulipleSelect.
|
|
268
|
+
MulipleSelect.name = 'q' + element.iD_GUID;
|
|
269
|
+
MulipleSelect.hideLabel = false;
|
|
270
|
+
MulipleSelect.labelExtraClasses = this.labelClass;
|
|
271
|
+
MulipleSelect.labelValue =
|
|
272
272
|
this.utilityService.isCurrentLanguageArabic()
|
|
273
273
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
274
274
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
275
|
-
MulipleSelect.
|
|
275
|
+
MulipleSelect.isRequired = element.isRelatedToSurveyQuestion
|
|
276
276
|
? false
|
|
277
277
|
: element.options.isRequired;
|
|
278
|
-
MulipleSelect.
|
|
279
|
-
MulipleSelect.
|
|
278
|
+
MulipleSelect.isReadonly = element.isRelatedToSurveyQuestion;
|
|
279
|
+
MulipleSelect.placeholder =
|
|
280
280
|
this.utilityService.getResourceValue('DefaultOptionText');
|
|
281
|
-
MulipleSelect.
|
|
282
|
-
MulipleSelect.
|
|
283
|
-
MulipleSelect.
|
|
281
|
+
MulipleSelect.viewType = ControlLayout.Vertical;
|
|
282
|
+
MulipleSelect.isDisabled = this.options.Readonly;
|
|
283
|
+
MulipleSelect.labelDescription =
|
|
284
284
|
this.utilityService.isCurrentLanguageArabic()
|
|
285
285
|
? element.options.description.arabic
|
|
286
286
|
: element.options.description.english;
|
|
@@ -294,40 +294,40 @@ export class SurveyFormComponent {
|
|
|
294
294
|
: option.name.english;
|
|
295
295
|
multipleSelectDataSource.push(item);
|
|
296
296
|
}
|
|
297
|
-
MulipleSelect.
|
|
298
|
-
MulipleSelect.
|
|
299
|
-
MulipleSelect.
|
|
300
|
-
MulipleSelect.
|
|
297
|
+
MulipleSelect.dataSource = multipleSelectDataSource;
|
|
298
|
+
MulipleSelect.singleSelection = false;
|
|
299
|
+
MulipleSelect.showCheckbox = false;
|
|
300
|
+
MulipleSelect.allowSearchFilter = true;
|
|
301
301
|
if (element.value.selectedIDs)
|
|
302
|
-
MulipleSelect.
|
|
302
|
+
MulipleSelect.selectedItems = element.value.selectedIDs;
|
|
303
303
|
if (element.isRelatedToSurveyQuestion)
|
|
304
304
|
this.checkList.push(MulipleSelect);
|
|
305
305
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, MulipleSelect, element.options.size);
|
|
306
306
|
break;
|
|
307
307
|
case SurveyOptionType.Country.toLocaleLowerCase():
|
|
308
308
|
let Country = new DropdownOptions();
|
|
309
|
-
Country.
|
|
310
|
-
Country.
|
|
311
|
-
Country.
|
|
312
|
-
Country.
|
|
309
|
+
Country.name = 'q' + element.iD_GUID;
|
|
310
|
+
Country.hideLabel = false;
|
|
311
|
+
Country.labelExtraClasses = this.labelClass;
|
|
312
|
+
Country.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
313
313
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
314
314
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
315
|
-
Country.
|
|
315
|
+
Country.isRequired = element.isRelatedToSurveyQuestion
|
|
316
316
|
? false
|
|
317
317
|
: element.options.isRequired;
|
|
318
|
-
Country.
|
|
319
|
-
Country.
|
|
320
|
-
Country.
|
|
321
|
-
Country.
|
|
318
|
+
Country.isReadonly = element.isRelatedToSurveyQuestion;
|
|
319
|
+
Country.viewType = ControlLayout.Vertical;
|
|
320
|
+
Country.isDisabled = this.options.Readonly;
|
|
321
|
+
Country.labelDescription =
|
|
322
322
|
this.utilityService.isCurrentLanguageArabic()
|
|
323
323
|
? element.options.description.arabic
|
|
324
324
|
: element.options.description.english;
|
|
325
|
-
Country.
|
|
326
|
-
Country.
|
|
327
|
-
Country.
|
|
328
|
-
Country.
|
|
325
|
+
Country.singleSelection = true;
|
|
326
|
+
Country.showCheckbox = false;
|
|
327
|
+
Country.allowSearchFilter = true;
|
|
328
|
+
Country.dataSource = element.options.dataSource;
|
|
329
329
|
if (element.value.selectedIDs)
|
|
330
|
-
Country.
|
|
330
|
+
Country.selectedItems = element.value.selectedIDs[0];
|
|
331
331
|
if (element.isRelatedToSurveyQuestion)
|
|
332
332
|
this.checkList.push(Country);
|
|
333
333
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Country, element.options.size);
|
|
@@ -335,25 +335,25 @@ export class SurveyFormComponent {
|
|
|
335
335
|
//FileUpload
|
|
336
336
|
case SurveyOptionType.MultiFile.toLocaleLowerCase():
|
|
337
337
|
let MultiFile = new FileUploadOptions();
|
|
338
|
-
MultiFile.
|
|
339
|
-
MultiFile.
|
|
340
|
-
MultiFile.
|
|
341
|
-
MultiFile.
|
|
338
|
+
MultiFile.name = 'q' + element.iD_GUID;
|
|
339
|
+
MultiFile.hideLabel = false;
|
|
340
|
+
MultiFile.labelExtraClasses = this.labelClass;
|
|
341
|
+
MultiFile.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
342
342
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
343
343
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
344
|
-
MultiFile.
|
|
344
|
+
MultiFile.isRequired = element.isRelatedToSurveyQuestion
|
|
345
345
|
? false
|
|
346
346
|
: element.options.isRequired;
|
|
347
|
-
MultiFile.
|
|
348
|
-
MultiFile.
|
|
349
|
-
MultiFile.
|
|
350
|
-
MultiFile.
|
|
347
|
+
MultiFile.isReadonly = element.isRelatedToSurveyQuestion;
|
|
348
|
+
MultiFile.viewType = ControlLayout.Vertical;
|
|
349
|
+
MultiFile.isDisabled = this.options.Readonly;
|
|
350
|
+
MultiFile.labelDescription =
|
|
351
351
|
this.utilityService.isCurrentLanguageArabic()
|
|
352
352
|
? element.options.description.arabic
|
|
353
353
|
: element.options.description.english;
|
|
354
|
-
MultiFile.
|
|
355
|
-
MultiFile.
|
|
356
|
-
MultiFile.
|
|
354
|
+
MultiFile.maxSizeForAllFilesInMB = element.options.maxFileSizeInMB;
|
|
355
|
+
MultiFile.maxNoOfFiles = element.options.maxFileCount;
|
|
356
|
+
MultiFile.isMultipleFile = true;
|
|
357
357
|
let acceptedTypes = [];
|
|
358
358
|
for (let index = 0; index < element.options.allowedExtensions.length; index++) {
|
|
359
359
|
const elementValue = element.options.allowedExtensions[index];
|
|
@@ -377,10 +377,10 @@ export class SurveyFormComponent {
|
|
|
377
377
|
break;
|
|
378
378
|
}
|
|
379
379
|
}
|
|
380
|
-
MultiFile.
|
|
380
|
+
MultiFile.fileUploadAcceptsTypes = acceptedTypes;
|
|
381
381
|
if (element.value.fileCorrelationDTO) {
|
|
382
382
|
let model = this.toCamel(element.value.fileCorrelationDTO);
|
|
383
|
-
MultiFile.
|
|
383
|
+
MultiFile.value = model;
|
|
384
384
|
}
|
|
385
385
|
if (element.isRelatedToSurveyQuestion)
|
|
386
386
|
this.checkList.push(MultiFile);
|
|
@@ -388,22 +388,22 @@ export class SurveyFormComponent {
|
|
|
388
388
|
break;
|
|
389
389
|
case SurveyOptionType.File.toLocaleLowerCase():
|
|
390
390
|
let File = new FileUploadOptions();
|
|
391
|
-
File.
|
|
392
|
-
File.
|
|
393
|
-
File.
|
|
394
|
-
File.
|
|
391
|
+
File.name = 'q' + element.iD_GUID;
|
|
392
|
+
File.hideLabel = false;
|
|
393
|
+
File.labelExtraClasses = this.labelClass;
|
|
394
|
+
File.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
395
395
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
396
396
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
397
|
-
File.
|
|
397
|
+
File.isRequired = element.isRelatedToSurveyQuestion
|
|
398
398
|
? false
|
|
399
399
|
: element.options.isRequired;
|
|
400
|
-
File.
|
|
401
|
-
File.
|
|
402
|
-
File.
|
|
403
|
-
File.
|
|
400
|
+
File.isReadonly = element.isRelatedToSurveyQuestion;
|
|
401
|
+
File.viewType = ControlLayout.Vertical;
|
|
402
|
+
File.isDisabled = this.options.Readonly;
|
|
403
|
+
File.labelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
404
404
|
? element.options.description.arabic
|
|
405
405
|
: element.options.description.english;
|
|
406
|
-
File.
|
|
406
|
+
File.fileMaxSizeInMB = element.options.maxFileSizeInMB;
|
|
407
407
|
let acceptedTypesFile = [];
|
|
408
408
|
debugger;
|
|
409
409
|
for (let index = 0; index < element.options.allowedExtensions.length; index++) {
|
|
@@ -430,9 +430,9 @@ export class SurveyFormComponent {
|
|
|
430
430
|
}
|
|
431
431
|
if (element.value.fileDTO) {
|
|
432
432
|
let model = this.toCamel(element.value.fileDTO);
|
|
433
|
-
File.
|
|
433
|
+
File.value = model;
|
|
434
434
|
}
|
|
435
|
-
File.
|
|
435
|
+
File.fileUploadAcceptsTypes = acceptedTypesFile;
|
|
436
436
|
if (element.isRelatedToSurveyQuestion)
|
|
437
437
|
this.checkList.push(File);
|
|
438
438
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, File, element.options.size);
|
|
@@ -440,59 +440,59 @@ export class SurveyFormComponent {
|
|
|
440
440
|
//ImageUpload
|
|
441
441
|
case SurveyOptionType.Image.toLocaleLowerCase():
|
|
442
442
|
let Image = new ImageUploadOptions();
|
|
443
|
-
Image.
|
|
444
|
-
Image.
|
|
445
|
-
Image.
|
|
446
|
-
Image.
|
|
443
|
+
Image.name = 'q' + element.iD_GUID;
|
|
444
|
+
Image.hideLabel = false;
|
|
445
|
+
Image.labelExtraClasses = this.labelClass;
|
|
446
|
+
Image.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
447
447
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
448
448
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
449
|
-
Image.
|
|
449
|
+
Image.isRequired = element.isRelatedToSurveyQuestion
|
|
450
450
|
? false
|
|
451
451
|
: element.options.isRequired;
|
|
452
|
-
Image.
|
|
453
|
-
Image.
|
|
454
|
-
Image.
|
|
455
|
-
Image.
|
|
452
|
+
Image.isReadonly = element.isRelatedToSurveyQuestion;
|
|
453
|
+
Image.viewType = ControlLayout.Vertical;
|
|
454
|
+
Image.isDisabled = this.options.Readonly;
|
|
455
|
+
Image.labelDescription = this.utilityService.isCurrentLanguageArabic()
|
|
456
456
|
? element.options.description.arabic
|
|
457
457
|
: element.options.description.english;
|
|
458
458
|
if (element.options.maxFileSizeInMB)
|
|
459
|
-
Image.
|
|
459
|
+
Image.fileMaxSizeInMB = element.options.maxFileSizeInMB;
|
|
460
460
|
if (element.isRelatedToSurveyQuestion)
|
|
461
461
|
this.checkList.push(Image);
|
|
462
462
|
if (element.value.fileDTO)
|
|
463
|
-
Image.
|
|
463
|
+
Image.value = element.value.fileDTO;
|
|
464
464
|
this.renderComponentService.renderDynamicComponent(viewContainerRef, SurveyFormItemComponent, this.filedGroup, Image, element.options.size);
|
|
465
465
|
break;
|
|
466
466
|
//MultilineText
|
|
467
467
|
case SurveyOptionType.MultilineText.toLocaleLowerCase():
|
|
468
468
|
let MultilineText = new TextAreaOptions();
|
|
469
|
-
MultilineText.
|
|
470
|
-
MultilineText.
|
|
471
|
-
MultilineText.
|
|
472
|
-
MultilineText.
|
|
469
|
+
MultilineText.name = 'q' + element.iD_GUID;
|
|
470
|
+
MultilineText.hideLabel = false;
|
|
471
|
+
MultilineText.labelExtraClasses = this.labelClass;
|
|
472
|
+
MultilineText.labelValue =
|
|
473
473
|
this.utilityService.isCurrentLanguageArabic()
|
|
474
474
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
475
475
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
476
|
-
MultilineText.
|
|
476
|
+
MultilineText.isRequired = element.isRelatedToSurveyQuestion
|
|
477
477
|
? false
|
|
478
478
|
: element.options.isRequired;
|
|
479
|
-
MultilineText.
|
|
480
|
-
MultilineText.
|
|
481
|
-
MultilineText.
|
|
482
|
-
MultilineText.
|
|
479
|
+
MultilineText.isReadonly = element.isRelatedToSurveyQuestion;
|
|
480
|
+
MultilineText.viewType = ControlLayout.Vertical;
|
|
481
|
+
MultilineText.isDisabled = this.options.Readonly;
|
|
482
|
+
MultilineText.labelDescription =
|
|
483
483
|
this.utilityService.isCurrentLanguageArabic()
|
|
484
484
|
? element.options.description.arabic
|
|
485
485
|
: element.options.description.english;
|
|
486
486
|
if (element.options.maxLength)
|
|
487
|
-
MultilineText.
|
|
487
|
+
MultilineText.maxLength = element.options.maxLength;
|
|
488
488
|
if (element.options.minLength)
|
|
489
|
-
MultilineText.
|
|
490
|
-
MultilineText.
|
|
489
|
+
MultilineText.minLength = element.options.minLength;
|
|
490
|
+
MultilineText.rows = element.options.rows;
|
|
491
491
|
if (element.value.text)
|
|
492
|
-
MultilineText.
|
|
492
|
+
MultilineText.value = element.value.text;
|
|
493
493
|
if (element.isRelatedToSurveyQuestion)
|
|
494
494
|
this.checkList.push(MultilineText);
|
|
495
|
-
MultilineText.
|
|
495
|
+
MultilineText.forceDirection =
|
|
496
496
|
this.utilityService.isCurrentLanguageArabic()
|
|
497
497
|
? ForceDirection.Arabic
|
|
498
498
|
: ForceDirection.English;
|
|
@@ -501,20 +501,20 @@ export class SurveyFormComponent {
|
|
|
501
501
|
//HTML
|
|
502
502
|
case SurveyOptionType.Boolean.toLocaleLowerCase():
|
|
503
503
|
let Boolean = new ToggleSlideOptions();
|
|
504
|
-
Boolean.
|
|
505
|
-
Boolean.
|
|
506
|
-
Boolean.
|
|
507
|
-
Boolean.
|
|
508
|
-
Boolean.
|
|
509
|
-
Boolean.
|
|
504
|
+
Boolean.name = 'q' + element.iD_GUID;
|
|
505
|
+
Boolean.labelExtraClasses = this.labelClass;
|
|
506
|
+
Boolean.viewType = ControlLayout.Vertical;
|
|
507
|
+
Boolean.isReadonly = element.isRelatedToSurveyQuestion;
|
|
508
|
+
Boolean.isDisabled = this.options.Readonly;
|
|
509
|
+
Boolean.hideLabel = false;
|
|
510
510
|
if (element.value.boolean)
|
|
511
|
-
Boolean.
|
|
511
|
+
Boolean.value = element.value.boolean;
|
|
512
512
|
if (element.isRelatedToSurveyQuestion)
|
|
513
513
|
this.checkList.push(Boolean);
|
|
514
|
-
Boolean.
|
|
514
|
+
Boolean.labelValue = this.utilityService.isCurrentLanguageArabic()
|
|
515
515
|
? element.text.arabic + `.${element.questionTypeItemID}`
|
|
516
516
|
: element.text.english + `.${element.questionTypeItemID}`;
|
|
517
|
-
Boolean.
|
|
517
|
+
Boolean.labelDescription =
|
|
518
518
|
this.utilityService.isCurrentLanguageArabic()
|
|
519
519
|
? element.options.description.arabic
|
|
520
520
|
: element.options.description.english;
|
|
@@ -693,4 +693,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
693
693
|
type: ViewChild,
|
|
694
694
|
args: [NgForm]
|
|
695
695
|
}] } });
|
|
696
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9zaGFyZWQvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS9zdXJ2ZXktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS1mb3JtL3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQ0wsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFvQixlQUFlLEVBQ2pGLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFDL0Ysa0JBQWtCLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFDL0YsY0FBYyxFQUFFLGtCQUFrQixFQUNuQyxNQUFNLHlCQUF5QixDQUFDO0FBR2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7O0FBT3pGLE1BQU0sT0FBTyxt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QUFDLGtCQUFrQixDQUFDLGtFQUtwQixXQUFXLHdGQUNYLHFCQUFxQixtRkFXckIsTUFBTSxnRENwQ25CLDRGQUlBOzsyRkRpQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWEsYUFFWixDQUFDLGtCQUFrQixDQUFDO2tMQUd0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNvQyxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWhDLE9BQU87c0JBRGQsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBV2hDLGdCQUFnQjtzQkFBbEMsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sTGF5b3V0LCBEYXRlUGlja2VyT3B0aW9ucywgRHJvcGRvd25MaXN0Q29tcG9uZW50LCBEcm9wZG93bkxpc3RJdGVtLCBEcm9wZG93bk9wdGlvbnMsXHJcbiAgRmlsZURUTywgRmlsZVR5cGUsIEZpbGVVcGxvYWRPcHRpb25zLCBGb3JjZURpcmVjdGlvbiwgSW1hZ2VVcGxvYWRPcHRpb25zLCBJbnB1dFR5cGUsIFBpY2tlclR5cGUsXHJcbiAgUmFkaW9CdXR0b25PcHRpb25zLCBSYW5nZU51bWJlciwgUmVuZGVyQ29tcG9uZW50U2VydmljZSwgU2VsZWN0TW9kZSwgU3RhcnRWaWV3LCBUZXh0QXJlYU9wdGlvbnMsXHJcbiAgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9uc1xyXG59IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuaW1wb3J0IHsgU3VydmV5T3B0aW9uVHlwZSB9IGZyb20gJy4uLy4uL0VudW1zL0VudW1zJztcclxuaW1wb3J0IHsgU3VydmV5RmlsZWRWYWx1ZURUTyB9IGZyb20gJy4uLy4uL21vZGVscy9TdXJ2ZXlNb2RlbHMvc3VydmV5LWZpbGVkLXZhbHVlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybU9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvU3VydmV5TW9kZWxzL3N1cnZleS1mb3JtLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBZERpcmVjdGl2ZSB9IGZyb20gJy4uL0FkRGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zdXJ2ZXktZm9ybS1pdGVtL3N1cnZleS1mb3JtLWl0ZW0uY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3VydmV5LWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbRm9ybUdyb3VwRGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogU3VydmV5Rm9ybU9wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZChBZERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgYWRIb3N0ITogQWREaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChEcm9wZG93bkxpc3RDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHByaXZhdGUgbXlDaGlsZDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG5cclxuICBmaWxlZEdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgcmVzdWx0OiBTdXJ2ZXlGaWxlZFZhbHVlRFRPW10gPSBbXTtcclxuICBjaGlsZElkTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBjaGlsZFF1ZXN0aW9uTGlzdDogYW55W10gPSBbXTtcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgY2hhbGxlbmdlQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xJbmRleCA9IDA7XHJcbiAgY2hhbGxlbmdlQ29udHJvbEluZGV4ID0gMDtcclxuICBAVmlld0NoaWxkKE5nRm9ybSkgZG9jdW1lbnRFZGl0Rm9ybSE6IE5nRm9ybTtcclxuICBpc0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrTGlzdDogYW55W10gPSBbXTtcclxuICBzaG93ZWRDaGlsZFF1ZXN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIFRleHRDb250ZXh0OiBhbnk7XHJcbiAgaXNGaXJzdFZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBsYWJlbENsYXNzOiBzdHJpbmcgPSAnVGVzdHRzYWRmdic7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnRTZXJ2aWNlOiBSZW5kZXJDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgVGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuYWRIb3N0LnZpZXdDb250YWluZXJSZWY7XHJcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICB0aGlzLmZpbGVkR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgdGhpcy5maWxlZEdyb3VwKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdHcm91cCcsIGUpO1xyXG4gICAgfSk7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuUXVlc3Rpb25MaXN0W2luZGV4XTtcclxuXHJcbiAgICAgIHN3aXRjaCAoZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAvLy9UZXh0Qm94XHJcblxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5UZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICB2YXIgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgVGV4dC5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIFRleHQuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBUZXh0LklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgVGV4dC5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgVGV4dC5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgVGV4dC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFRleHQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgVGV4dC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgVGV4dC5WYWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lk1heExlbmd0aCA9IGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgVGV4dC5NaW5MZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgVGV4dC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKFRleHQpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBUZXh0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBFbWFpbCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgRW1haWwuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIEVtYWlsLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRW1haWwuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBFbWFpbC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEVtYWlsLklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgRW1haWwuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEVtYWlsLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIEVtYWlsLklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBFbWFpbC5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRW1haWwuVHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpIEVtYWlsLlZhbHVlID0gZWxlbWVudC52YWx1ZS50ZXh0O1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChFbWFpbCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEVtYWlsLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5OdW1iZXIudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBOdW1iZXIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIE51bWJlci5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTnVtYmVyLkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTnVtYmVyLkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgTnVtYmVyLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTnVtYmVyLklzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgTnVtYmVyLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBOdW1iZXIuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgTnVtYmVyLklzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBOdW1iZXIuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBOdW1iZXIuVHlwZSA9IElucHV0VHlwZS5OdW1iZXI7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLlRvID0gZWxlbWVudC5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLkZyb20gPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgTnVtYmVyLk51bWJlclJhbmdlID0gcmFuZ2VOdW1iZXI7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS50ZXh0KSBOdW1iZXIuVmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKE51bWJlcik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE51bWJlcixcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLy9EYXRlVGltZVxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgRGF0ZS5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIERhdGUuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBEYXRlLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIERhdGUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIERhdGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRGF0ZS5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZS5QaWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgIERhdGUuU2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgRGF0ZS5TdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5kYXRlVGltZSkgRGF0ZS5WYWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBEYXRlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlVGltZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IERhdGVUaW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICBEYXRlVGltZS5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBEYXRlVGltZS5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIERhdGVUaW1lLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBEYXRlVGltZS5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIERhdGVUaW1lLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuUGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQm90aDtcclxuICAgICAgICAgIERhdGVUaW1lLlNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIERhdGVUaW1lLlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmRhdGVUaW1lKSBEYXRlVGltZS5WYWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGVUaW1lKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Ecm9wZG93blxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5TaW5nbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBTaW5nbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbFZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5QbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVmYXVsdE9wdGlvblRleHQnKTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5MYWJlbERlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGxldCBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSBlbGVtZW50LnF1ZXN0aW9uT3B0aW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIGxldCBpdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgaXRlbS5rZXkgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gb3B0aW9uLm5hbWUuYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBvcHRpb24ubmFtZS5lbmdsaXNoO1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuRGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5TaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgU2luZ2xlU2VsZWN0LlNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChTaW5nbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBTaW5nbGVTZWxlY3QsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlJhZGlvQnV0dG9uLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgcmFkaW9CdXR0b24gPSBuZXcgUmFkaW9CdXR0b25PcHRpb25zKCk7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgbGV0IGRhdGFTb3VyY2VSYWRpbzogYW55W10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0uVmFsdWUgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS5UZXh0ID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBvcHRpb24ubmFtZS5hcmFiaWNcclxuICAgICAgICAgICAgICA6IG9wdGlvbi5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VSYWRpby5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmFkaW9CdXR0b24uSXRlbXMgPSBkYXRhU291cmNlUmFkaW87XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgcmFkaW9CdXR0b24uVmFsdWUgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChyYWRpb0J1dHRvbik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIHJhZGlvQnV0dG9uLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IE11bGlwbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0Lk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuTGFiZWxWYWx1ZSA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuUGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlZmF1bHRPcHRpb25UZXh0Jyk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBsZXQgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlOiBEcm9wZG93bkxpc3RJdGVtW10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0ua2V5ID0gb3B0aW9uLmlEX0dVSUQ7XHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IG9wdGlvbi5uYW1lLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogb3B0aW9uLm5hbWUuZW5nbGlzaDtcclxuICAgICAgICAgICAgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LkRhdGFTb3VyY2UgPSBtdWx0aXBsZVNlbGVjdERhdGFTb3VyY2U7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5TaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIE11bGlwbGVTZWxlY3QuU2VsZWN0ZWRJdGVtcyA9IGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHM7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKE11bGlwbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBNdWxpcGxlU2VsZWN0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5Db3VudHJ5LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgQ291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIENvdW50cnkuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIENvdW50cnkuSGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBDb3VudHJ5LkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgQ291bnRyeS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIENvdW50cnkuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBDb3VudHJ5LklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBDb3VudHJ5LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIENvdW50cnkuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIENvdW50cnkuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBDb3VudHJ5LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LlNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgQ291bnRyeS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LkRhdGFTb3VyY2UgPSBlbGVtZW50Lm9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzKVxyXG4gICAgICAgICAgICBDb3VudHJ5LlNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChDb3VudHJ5KTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgQ291bnRyeSxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL0ZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuTmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIE11bHRpRmlsZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpRmlsZS5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bHRpRmlsZS5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpRmlsZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bHRpRmlsZS5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpRmlsZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTXVsdGlGaWxlLkxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLk1heFNpemVGb3JBbGxGaWxlc0luTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLk1heE5vT2ZGaWxlcyA9IGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuSXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGFjY2VwdGVkVHlwZXM6IEZpbGVUeXBlW10gPSBbXTtcclxuICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgIGluZGV4IDwgZWxlbWVudC5vcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgaW5kZXgrK1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUERGKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuRXhjZWwpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMyc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuSW1hZ2VUeXBlcyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICcxNSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIE11bHRpRmlsZS5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlcztcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVDb3JyZWxhdGlvbkRUTykge1xyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLnRvQ2FtZWwoZWxlbWVudC52YWx1ZS5maWxlQ29ycmVsYXRpb25EVE8pO1xyXG4gICAgICAgICAgICBNdWx0aUZpbGUuVmFsdWUgPSBtb2RlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlGaWxlKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgTXVsdGlGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgRmlsZS5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRmlsZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEZpbGUuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBGaWxlLkxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRmlsZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEZpbGUuSXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEZpbGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRmlsZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRmlsZS5MYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRmlsZS5GaWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG5cclxuICAgICAgICAgIGxldCBhY2NlcHRlZFR5cGVzRmlsZTogRmlsZVR5cGVbXSA9IFtdO1xyXG4gICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBpbmRleCA8IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGluZGV4KytcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lm9wdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5QREYpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLkV4Y2VsKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5JbWFnZVR5cGVzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzE1JzpcclxuICAgICAgICAgICAgICAgIGFjY2VwdGVkVHlwZXNGaWxlLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVEVE8pIHtcclxuICAgICAgICAgICAgbGV0IG1vZGVsID0gdGhpcy50b0NhbWVsKGVsZW1lbnQudmFsdWUuZmlsZURUTykgYXMgRmlsZURUTztcclxuICAgICAgICAgICAgRmlsZS5WYWx1ZSA9IG1vZGVsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRmlsZS5GaWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlc0ZpbGU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEZpbGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vSW1hZ2VVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuSW1hZ2UudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBJbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIEltYWdlLk5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBJbWFnZS5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEltYWdlLkxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgSW1hZ2UuTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBJbWFnZS5Jc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEltYWdlLklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBJbWFnZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBJbWFnZS5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgSW1hZ2UuTGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CKVxyXG4gICAgICAgICAgICBJbWFnZS5GaWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChJbWFnZSk7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5maWxlRFRPKSBJbWFnZS5WYWx1ZSA9IGVsZW1lbnQudmFsdWUuZmlsZURUTztcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgSW1hZ2UsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9NdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBNdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuTGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LkxhYmVsVmFsdWUgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuSXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LklzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LlZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuSXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgTXVsdGlsaW5lVGV4dC5NYXhMZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQuTWluTGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuUm93cyA9IGVsZW1lbnQub3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgTXVsdGlsaW5lVGV4dC5WYWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlsaW5lVGV4dCk7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LkZvcmNlRGlyZWN0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBGb3JjZURpcmVjdGlvbi5BcmFiaWNcclxuICAgICAgICAgICAgICA6IEZvcmNlRGlyZWN0aW9uLkVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9IVE1MXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkJvb2xlYW4udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBCb29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgQm9vbGVhbi5OYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgQm9vbGVhbi5MYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEJvb2xlYW4uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgQm9vbGVhbi5Jc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgQm9vbGVhbi5Jc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgQm9vbGVhbi5IaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmJvb2xlYW4pIEJvb2xlYW4uVmFsdWUgPSBlbGVtZW50LnZhbHVlLmJvb2xlYW47XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEJvb2xlYW4pO1xyXG4gICAgICAgICAgQm9vbGVhbi5MYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIEJvb2xlYW4uTGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Mb2NhdGlvblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5SZWFkb25seSlcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFtpbmRleF0uVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgdGhpcy5maWxlZEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGVzKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmlsZWRHcm91cCk7XHJcbiAgICAgIHRoaXMucmVzdWx0ID0gW107XHJcbiAgICAgIHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbiA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWxlZEdyb3VwLmNvbnRyb2xzLCBrZXkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsZXQgc2NvcmUgPSAwO1xyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgIGxldCBpZCA9IGtleS5yZXBsYWNlKCdxJywgJycpO1xyXG4gICAgICAgICAgdmFyIGZpbHRlcmVkSXRlbSA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGlkXHJcbiAgICAgICAgICApWzBdO1xyXG5cclxuICAgICAgICAgIGxldCBpdGVtID0gbmV3IFN1cnZleUZpbGVkVmFsdWVEVE8oKTtcclxuICAgICAgICAgIGl0ZW0uUXVlc3Rpb25GaWVsZElEID0gaWQ7XHJcbiAgICAgICAgICBpdGVtLlF1ZXN0aW9uVHlwZUl0ZW1JRCA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQ7XHJcbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTnVtYmVyLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQm9vbGVhbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uQm9vbGVhbiA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5EYXRlVGltZSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZVRpbWUudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkRhdGVUaW1lID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlNpbmdsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5SYWRpb0J1dHRvbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQudmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LnZhbHVlW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbS5pc0FsbG93U2NvcmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzY29yZVZhbHVlID0gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaXRlbU9wdGlvbnMpID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIClbMF0/LnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1PcHRpb25zKSA9PiBpdGVtT3B0aW9ucy5pRF9HVUlEID09IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIClbMF0uc2NvcmVcclxuICAgICAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICAgICAgICBzY29yZSA9IHNjb3JlVmFsdWUgKyBzY29yZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQ291bnRyeS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5JbWFnZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRmlsZURUTyA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICBpdGVtLkZpbGVEVE8gPSBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgPyBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgOiBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5GaWxlQ29ycmVsYXRpb25EVE8gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyZWRJdGVtLnZhbHVlID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlcmVkSXRlbS52YWx1ZS5zY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLlZhbHVlc0xpc3QgPSB0aGlzLnJlc3VsdDtcclxuICAgICAgdGhpcy5jaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkU2hvd2VkQ2hpbGRRdWVzdGlvbnMobmV3S2V5KSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIHF1ZXN0aW9uT3B0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdFtpbmRleF0ucXVlc3Rpb25PcHRpb25zO1xyXG4gICAgICBsZXQgT3B0aW9uID0gcXVlc3Rpb25PcHRpb24uZmlsdGVyKCh4KSA9PiB4LmlEX0dVSUQgPT09IG5ld0tleSlbMF07XHJcbiAgICAgIGlmIChPcHRpb24gJiYgT3B0aW9uPy5saW5rZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPcHRpb24ubGlua2VkUXVlc3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgbGlua2VkUXVlc3Rpb24gPSBPcHRpb24ubGlua2VkUXVlc3Rpb25zW2luZGV4XTtcclxuICAgICAgICAgIGxldCBjaGVja0lzUXVlc3Rpb25FeGlzdCA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbi5zb21lKFxyXG4gICAgICAgICAgICAoeCkgPT4geCA9PT0gYHEke2xpbmtlZFF1ZXN0aW9ufWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIWNoZWNrSXNRdWVzdGlvbkV4aXN0KVxyXG4gICAgICAgICAgICB0aGlzLnNob3dlZENoaWxkUXVlc3Rpb24ucHVzaChgcSR7bGlua2VkUXVlc3Rpb259YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKSB7XHJcbiAgICBsZXQgcXVlc3Rpb25zID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBsZXQgY2hlY2tJZkV4aXN0ID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uLnNvbWUoXHJcbiAgICAgICAgKHgpID0+IHggPT09IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChjaGVja0lmRXhpc3QpIHtcclxuICAgICAgICBsZXQgcXVlc3Rpb25JZCA9IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lLnJlcGxhY2UoJ3EnLCAnJyk7XHJcbiAgICAgICAgbGV0IFF1ZXN0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IHF1ZXN0aW9uSWRcclxuICAgICAgICApWzBdO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKFF1ZXN0aW9uLm9wdGlvbnMuaXNSZXF1aXJlZCAmJiAhdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVxdWlyZWQpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZmlsZWRHcm91cFxyXG4gICAgICAgICAgICAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKVxyXG4gICAgICAgICAgICAuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gbnVsbCB8fFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS52YWx1ZSA9PVxyXG4gICAgICAgICAgICB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gJydcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwXHJcbiAgICAgICAgICAgICAgLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSlcclxuICAgICAgICAgICAgICAuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNbdGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWVdLnJlbW92ZVZhbGlkYXRvcnMoXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvQ2FtZWwgPSAob2JqKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgIHJldHVybiBvYmoubWFwKCh2KSA9PiB0aGlzLnRvQ2FtZWwodikpO1xyXG4gICAgfSBlbHNlIGlmIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2VSaWdodChcclxuICAgICAgICAocmVzdWx0LCBrZXkpID0+ICh7XHJcbiAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICBbKGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSB8fCBrZXkpLnRvU3RyaW5nKCldOlxyXG4gICAgICAgICAgICB0aGlzLnRvQ2FtZWwob2JqW2tleV0pLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHt9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH07XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN1cnZleS1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgYWRIb3N0PjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19
|
|
696
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9zaGFyZWQvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS9zdXJ2ZXktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC9jb21wb25lbnRzL3N1cnZleS1mb3JtL3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQ0wsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFvQixlQUFlLEVBQ2pGLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFDL0Ysa0JBQWtCLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFDL0YsY0FBYyxFQUFFLGtCQUFrQixFQUNuQyxNQUFNLHlCQUF5QixDQUFDO0FBR2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7O0FBT3pGLE1BQU0sT0FBTyxt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QUFDLGtCQUFrQixDQUFDLGtFQUtwQixXQUFXLHdGQUNYLHFCQUFxQixtRkFXckIsTUFBTSxnRENwQ25CLDRGQUlBOzsyRkRpQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWEsYUFFWixDQUFDLGtCQUFrQixDQUFDO2tMQUd0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNvQyxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWhDLE9BQU87c0JBRGQsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBV2hDLGdCQUFnQjtzQkFBbEMsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sTGF5b3V0LCBEYXRlUGlja2VyT3B0aW9ucywgRHJvcGRvd25MaXN0Q29tcG9uZW50LCBEcm9wZG93bkxpc3RJdGVtLCBEcm9wZG93bk9wdGlvbnMsXHJcbiAgRmlsZURUTywgRmlsZVR5cGUsIEZpbGVVcGxvYWRPcHRpb25zLCBGb3JjZURpcmVjdGlvbiwgSW1hZ2VVcGxvYWRPcHRpb25zLCBJbnB1dFR5cGUsIFBpY2tlclR5cGUsXHJcbiAgUmFkaW9CdXR0b25PcHRpb25zLCBSYW5nZU51bWJlciwgUmVuZGVyQ29tcG9uZW50U2VydmljZSwgU2VsZWN0TW9kZSwgU3RhcnRWaWV3LCBUZXh0QXJlYU9wdGlvbnMsXHJcbiAgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9uc1xyXG59IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuaW1wb3J0IHsgU3VydmV5T3B0aW9uVHlwZSB9IGZyb20gJy4uLy4uL0VudW1zL0VudW1zJztcclxuaW1wb3J0IHsgU3VydmV5RmlsZWRWYWx1ZURUTyB9IGZyb20gJy4uLy4uL21vZGVscy9TdXJ2ZXlNb2RlbHMvc3VydmV5LWZpbGVkLXZhbHVlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybU9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvU3VydmV5TW9kZWxzL3N1cnZleS1mb3JtLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBZERpcmVjdGl2ZSB9IGZyb20gJy4uL0FkRGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zdXJ2ZXktZm9ybS1pdGVtL3N1cnZleS1mb3JtLWl0ZW0uY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3VydmV5LWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbRm9ybUdyb3VwRGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogU3VydmV5Rm9ybU9wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZChBZERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgYWRIb3N0ITogQWREaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChEcm9wZG93bkxpc3RDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHByaXZhdGUgbXlDaGlsZDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG5cclxuICBmaWxlZEdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgcmVzdWx0OiBTdXJ2ZXlGaWxlZFZhbHVlRFRPW10gPSBbXTtcclxuICBjaGlsZElkTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBjaGlsZFF1ZXN0aW9uTGlzdDogYW55W10gPSBbXTtcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgY2hhbGxlbmdlQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBhcmVhT2ZGb2N1c0NvbnRyb2xJbmRleCA9IDA7XHJcbiAgY2hhbGxlbmdlQ29udHJvbEluZGV4ID0gMDtcclxuICBAVmlld0NoaWxkKE5nRm9ybSkgZG9jdW1lbnRFZGl0Rm9ybSE6IE5nRm9ybTtcclxuICBpc0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrTGlzdDogYW55W10gPSBbXTtcclxuICBzaG93ZWRDaGlsZFF1ZXN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIFRleHRDb250ZXh0OiBhbnk7XHJcbiAgaXNGaXJzdFZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBsYWJlbENsYXNzOiBzdHJpbmcgPSAnVGVzdHRzYWRmdic7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnRTZXJ2aWNlOiBSZW5kZXJDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgVGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuYWRIb3N0LnZpZXdDb250YWluZXJSZWY7XHJcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICB0aGlzLmZpbGVkR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgdGhpcy5maWxlZEdyb3VwKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdHcm91cCcsIGUpO1xyXG4gICAgfSk7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuUXVlc3Rpb25MaXN0W2luZGV4XTtcclxuXHJcbiAgICAgIHN3aXRjaCAoZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAvLy9UZXh0Qm94XHJcblxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5UZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICB2YXIgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgVGV4dC5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIFRleHQuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBUZXh0LmlzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgVGV4dC5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgVGV4dC5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgVGV4dC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFRleHQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgVGV4dC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgVGV4dC52YWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lm1heExlbmd0aCA9IGVsZW1lbnQub3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgVGV4dC5taW5MZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgVGV4dC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKFRleHQpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBUZXh0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBFbWFpbCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgRW1haWwubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIEVtYWlsLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRW1haWwuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBFbWFpbC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEVtYWlsLmlzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgRW1haWwuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEVtYWlsLnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIEVtYWlsLmlzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBFbWFpbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRW1haWwudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnRleHQpIEVtYWlsLnZhbHVlID0gZWxlbWVudC52YWx1ZS50ZXh0O1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChFbWFpbCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEVtYWlsLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5OdW1iZXIudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBOdW1iZXIgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIE51bWJlci5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTnVtYmVyLmhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTnVtYmVyLmxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgTnVtYmVyLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTnVtYmVyLmlzUmVxdWlyZWQgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb25cclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgTnVtYmVyLmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBOdW1iZXIudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgTnVtYmVyLmlzRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuUmVhZG9ubHk7XHJcbiAgICAgICAgICBOdW1iZXIubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBOdW1iZXIudHlwZSA9IElucHV0VHlwZS5OdW1iZXI7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLnRvID0gZWxlbWVudC5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIHJhbmdlTnVtYmVyLmZyb20gPSBlbGVtZW50Lm9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgTnVtYmVyLm51bWJlclJhbmdlID0gcmFuZ2VOdW1iZXI7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS50ZXh0KSBOdW1iZXIudmFsdWUgPSBlbGVtZW50LnZhbHVlLnRleHQ7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKE51bWJlcik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE51bWJlcixcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLy9EYXRlVGltZVxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgRGF0ZS5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIERhdGUubGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBEYXRlLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIERhdGUuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIERhdGUudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRGF0ZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgIERhdGUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgRGF0ZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5kYXRlVGltZSkgRGF0ZS52YWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBEYXRlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlVGltZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IERhdGVUaW1lID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICBEYXRlVGltZS5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBEYXRlVGltZS5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIERhdGVUaW1lLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBEYXRlVGltZS5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgRGF0ZVRpbWUudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRGF0ZVRpbWUuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIERhdGVUaW1lLmxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRGF0ZVRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQm90aDtcclxuICAgICAgICAgIERhdGVUaW1lLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIERhdGVUaW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmRhdGVUaW1lKSBEYXRlVGltZS52YWx1ZSA9IGVsZW1lbnQudmFsdWUuZGF0ZVRpbWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKERhdGVUaW1lKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Ecm9wZG93blxyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5TaW5nbGVTZWxlY3QudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBTaW5nbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5sYWJlbFZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5wbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVmYXVsdE9wdGlvblRleHQnKTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5sYWJlbERlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGxldCBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQucXVlc3Rpb25PcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSBlbGVtZW50LnF1ZXN0aW9uT3B0aW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIGxldCBpdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgaXRlbS5rZXkgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gb3B0aW9uLm5hbWUuYXJhYmljXHJcbiAgICAgICAgICAgICAgOiBvcHRpb24ubmFtZS5lbmdsaXNoO1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3QuZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgICBTaW5nbGVTZWxlY3Quc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIFNpbmdsZVNlbGVjdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgU2luZ2xlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChTaW5nbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBTaW5nbGVTZWxlY3QsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlJhZGlvQnV0dG9uLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgcmFkaW9CdXR0b24gPSBuZXcgUmFkaW9CdXR0b25PcHRpb25zKCk7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICByYWRpb0J1dHRvbi5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24udmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIHJhZGlvQnV0dG9uLmxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgbGV0IGRhdGFTb3VyY2VSYWRpbzogYW55W10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0uVmFsdWUgPSBvcHRpb24uaURfR1VJRDtcclxuICAgICAgICAgICAgaXRlbS5UZXh0ID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBvcHRpb24ubmFtZS5hcmFiaWNcclxuICAgICAgICAgICAgICA6IG9wdGlvbi5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VSYWRpby5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmFkaW9CdXR0b24uaXRlbXMgPSBkYXRhU291cmNlUmFkaW87XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5zZWxlY3RlZElEcylcclxuICAgICAgICAgICAgcmFkaW9CdXR0b24udmFsdWUgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3QucHVzaChyYWRpb0J1dHRvbik7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIHJhZGlvQnV0dG9uLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgbGV0IE11bGlwbGVTZWxlY3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0Lm5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LmhpZGVMYWJlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QubGFiZWxWYWx1ZSA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QucGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlZmF1bHRPcHRpb25UZXh0Jyk7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBsZXQgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlOiBEcm9wZG93bkxpc3RJdGVtW10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50LnF1ZXN0aW9uT3B0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZWxlbWVudC5xdWVzdGlvbk9wdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGl0ZW0ua2V5ID0gb3B0aW9uLmlEX0dVSUQ7XHJcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IG9wdGlvbi5uYW1lLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogb3B0aW9uLm5hbWUuZW5nbGlzaDtcclxuICAgICAgICAgICAgbXVsdGlwbGVTZWxlY3REYXRhU291cmNlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LmRhdGFTb3VyY2UgPSBtdWx0aXBsZVNlbGVjdERhdGFTb3VyY2U7XHJcbiAgICAgICAgICBNdWxpcGxlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgTXVsaXBsZVNlbGVjdC5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIE11bGlwbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHMpXHJcbiAgICAgICAgICAgIE11bGlwbGVTZWxlY3Quc2VsZWN0ZWRJdGVtcyA9IGVsZW1lbnQudmFsdWUuc2VsZWN0ZWRJRHM7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdC5wdXNoKE11bGlwbGVTZWxlY3QpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBNdWxpcGxlU2VsZWN0LFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5Db3VudHJ5LnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgQ291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIENvdW50cnkubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIENvdW50cnkuaGlkZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICBDb3VudHJ5LmxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgQ291bnRyeS5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIENvdW50cnkuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBDb3VudHJ5LmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBDb3VudHJ5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIENvdW50cnkuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIENvdW50cnkubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBDb3VudHJ5LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgQ291bnRyeS5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICBDb3VudHJ5LmRhdGFTb3VyY2UgPSBlbGVtZW50Lm9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzKVxyXG4gICAgICAgICAgICBDb3VudHJ5LnNlbGVjdGVkSXRlbXMgPSBlbGVtZW50LnZhbHVlLnNlbGVjdGVkSURzWzBdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChDb3VudHJ5KTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgQ291bnRyeSxcclxuICAgICAgICAgICAgZWxlbWVudC5vcHRpb25zLnNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvL0ZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgTXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBNdWx0aUZpbGUubmFtZSA9ICdxJyArIGVsZW1lbnQuaURfR1VJRDtcclxuICAgICAgICAgIE11bHRpRmlsZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpRmlsZS5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIE11bHRpRmlsZS5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpRmlsZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIE11bHRpRmlsZS5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpRmlsZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgTXVsdGlGaWxlLmxhYmVsRGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLm1heFNpemVGb3JBbGxGaWxlc0luTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgTXVsdGlGaWxlLm1heE5vT2ZGaWxlcyA9IGVsZW1lbnQub3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBNdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGFjY2VwdGVkVHlwZXM6IEZpbGVUeXBlW10gPSBbXTtcclxuICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgIGluZGV4IDwgZWxlbWVudC5vcHRpb25zLmFsbG93ZWRFeHRlbnNpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgaW5kZXgrK1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9uc1tpbmRleF07XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMCc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUERGKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlcy5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuRXhjZWwpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMyc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuSW1hZ2VUeXBlcyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICcxNSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIE11bHRpRmlsZS5maWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlcztcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVDb3JyZWxhdGlvbkRUTykge1xyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLnRvQ2FtZWwoZWxlbWVudC52YWx1ZS5maWxlQ29ycmVsYXRpb25EVE8pO1xyXG4gICAgICAgICAgICBNdWx0aUZpbGUudmFsdWUgPSBtb2RlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlGaWxlKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgTXVsdGlGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICBsZXQgRmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgRmlsZS5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgRmlsZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEZpbGUubGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBGaWxlLmxhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgPyBlbGVtZW50LnRleHQuYXJhYmljICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWBcclxuICAgICAgICAgICAgOiBlbGVtZW50LnRleHQuZW5nbGlzaCArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gO1xyXG4gICAgICAgICAgRmlsZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEZpbGUuaXNSZWFkb25seSA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbjtcclxuICAgICAgICAgIEZpbGUudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgRmlsZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgRmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICA6IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICAgICAgRmlsZS5maWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG5cclxuICAgICAgICAgIGxldCBhY2NlcHRlZFR5cGVzRmlsZTogRmlsZVR5cGVbXSA9IFtdO1xyXG4gICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBpbmRleCA8IGVsZW1lbnQub3B0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGluZGV4KytcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lm9wdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnNbaW5kZXhdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5QREYpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLldvcmQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgICAgICBhY2NlcHRlZFR5cGVzRmlsZS5wdXNoKEZpbGVUeXBlLkV4Y2VsKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRUeXBlc0ZpbGUucHVzaChGaWxlVHlwZS5JbWFnZVR5cGVzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJzE1JzpcclxuICAgICAgICAgICAgICAgIGFjY2VwdGVkVHlwZXNGaWxlLnB1c2goRmlsZVR5cGUuUG93ZXJQb2ludCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmZpbGVEVE8pIHtcclxuICAgICAgICAgICAgbGV0IG1vZGVsID0gdGhpcy50b0NhbWVsKGVsZW1lbnQudmFsdWUuZmlsZURUTykgYXMgRmlsZURUTztcclxuICAgICAgICAgICAgRmlsZS52YWx1ZSA9IG1vZGVsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRmlsZS5maWxlVXBsb2FkQWNjZXB0c1R5cGVzID0gYWNjZXB0ZWRUeXBlc0ZpbGU7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEZpbGUpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8U3VydmV5Rm9ybUl0ZW1Db21wb25lbnQ+KFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLFxyXG4gICAgICAgICAgICBGaWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50Lm9wdGlvbnMuc2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vSW1hZ2VVcGxvYWRcclxuICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuSW1hZ2UudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBJbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIEltYWdlLm5hbWUgPSAncScgKyBlbGVtZW50LmlEX0dVSUQ7XHJcbiAgICAgICAgICBJbWFnZS5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIEltYWdlLmxhYmVsRXh0cmFDbGFzc2VzID0gdGhpcy5sYWJlbENsYXNzO1xyXG4gICAgICAgICAgSW1hZ2UubGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICA6IGVsZW1lbnQudGV4dC5lbmdsaXNoICsgYC4ke2VsZW1lbnQucXVlc3Rpb25UeXBlSXRlbUlEfWA7XHJcbiAgICAgICAgICBJbWFnZS5pc1JlcXVpcmVkID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uXHJcbiAgICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIEltYWdlLmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBJbWFnZS52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgICBJbWFnZS5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgSW1hZ2UubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICA/IGVsZW1lbnQub3B0aW9ucy5kZXNjcmlwdGlvbi5hcmFiaWNcclxuICAgICAgICAgICAgOiBlbGVtZW50Lm9wdGlvbnMuZGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CKVxyXG4gICAgICAgICAgICBJbWFnZS5maWxlTWF4U2l6ZUluTUIgPSBlbGVtZW50Lm9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvbikgdGhpcy5jaGVja0xpc3QucHVzaChJbWFnZSk7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZS5maWxlRFRPKSBJbWFnZS52YWx1ZSA9IGVsZW1lbnQudmFsdWUuZmlsZURUTztcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFN1cnZleUZvcm1JdGVtQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgU3VydmV5Rm9ybUl0ZW1Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZWRHcm91cCxcclxuICAgICAgICAgICAgSW1hZ2UsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9NdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBNdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgTXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQubGFiZWxFeHRyYUNsYXNzZXMgPSB0aGlzLmxhYmVsQ2xhc3M7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LmxhYmVsVmFsdWUgPVxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlQXJhYmljKClcclxuICAgICAgICAgICAgICA/IGVsZW1lbnQudGV4dC5hcmFiaWMgKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YFxyXG4gICAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuaXNSZXF1aXJlZCA9IGVsZW1lbnQuaXNSZWxhdGVkVG9TdXJ2ZXlRdWVzdGlvblxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LmlzUmVhZG9ubHkgPSBlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb247XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQuaXNEaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5SZWFkb25seTtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgTXVsdGlsaW5lVGV4dC5tYXhMZW5ndGggPSBlbGVtZW50Lm9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQub3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQubWluTGVuZ3RoID0gZWxlbWVudC5vcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIE11bHRpbGluZVRleHQucm93cyA9IGVsZW1lbnQub3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUudGV4dCkgTXVsdGlsaW5lVGV4dC52YWx1ZSA9IGVsZW1lbnQudmFsdWUudGV4dDtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVsYXRlZFRvU3VydmV5UXVlc3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0LnB1c2goTXVsdGlsaW5lVGV4dCk7XHJcbiAgICAgICAgICBNdWx0aWxpbmVUZXh0LmZvcmNlRGlyZWN0aW9uID1cclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgICAgPyBGb3JjZURpcmVjdGlvbi5BcmFiaWNcclxuICAgICAgICAgICAgICA6IEZvcmNlRGlyZWN0aW9uLkVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIE11bHRpbGluZVRleHQsXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9IVE1MXHJcbiAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLkJvb2xlYW4udG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgIGxldCBCb29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgQm9vbGVhbi5uYW1lID0gJ3EnICsgZWxlbWVudC5pRF9HVUlEO1xyXG4gICAgICAgICAgQm9vbGVhbi5sYWJlbEV4dHJhQ2xhc3NlcyA9IHRoaXMubGFiZWxDbGFzcztcclxuICAgICAgICAgIEJvb2xlYW4udmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgICAgQm9vbGVhbi5pc1JlYWRvbmx5ID0gZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uO1xyXG4gICAgICAgICAgQm9vbGVhbi5pc0Rpc2FibGVkID0gdGhpcy5vcHRpb25zLlJlYWRvbmx5O1xyXG4gICAgICAgICAgQm9vbGVhbi5oaWRlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlLmJvb2xlYW4pIEJvb2xlYW4udmFsdWUgPSBlbGVtZW50LnZhbHVlLmJvb2xlYW47XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pc1JlbGF0ZWRUb1N1cnZleVF1ZXN0aW9uKSB0aGlzLmNoZWNrTGlzdC5wdXNoKEJvb2xlYW4pO1xyXG4gICAgICAgICAgQm9vbGVhbi5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUFyYWJpYygpXHJcbiAgICAgICAgICAgID8gZWxlbWVudC50ZXh0LmFyYWJpYyArIGAuJHtlbGVtZW50LnF1ZXN0aW9uVHlwZUl0ZW1JRH1gXHJcbiAgICAgICAgICAgIDogZWxlbWVudC50ZXh0LmVuZ2xpc2ggKyBgLiR7ZWxlbWVudC5xdWVzdGlvblR5cGVJdGVtSUR9YDtcclxuICAgICAgICAgIEJvb2xlYW4ubGFiZWxEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VBcmFiaWMoKVxyXG4gICAgICAgICAgICAgID8gZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmFyYWJpY1xyXG4gICAgICAgICAgICAgIDogZWxlbWVudC5vcHRpb25zLmRlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxTdXJ2ZXlGb3JtSXRlbUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIFN1cnZleUZvcm1JdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAsXHJcbiAgICAgICAgICAgIEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGVsZW1lbnQub3B0aW9ucy5zaXplXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy9Mb2NhdGlvblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5SZWFkb25seSlcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFtpbmRleF0uVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgdGhpcy5maWxlZEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGVzKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmlsZWRHcm91cCk7XHJcbiAgICAgIHRoaXMucmVzdWx0ID0gW107XHJcbiAgICAgIHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbiA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWxlZEdyb3VwLmNvbnRyb2xzLCBrZXkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsZXQgc2NvcmUgPSAwO1xyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgIGxldCBpZCA9IGtleS5yZXBsYWNlKCdxJywgJycpO1xyXG4gICAgICAgICAgdmFyIGZpbHRlcmVkSXRlbSA9IHRoaXMub3B0aW9ucy5RdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGlkXHJcbiAgICAgICAgICApWzBdO1xyXG5cclxuICAgICAgICAgIGxldCBpdGVtID0gbmV3IFN1cnZleUZpbGVkVmFsdWVEVE8oKTtcclxuICAgICAgICAgIGl0ZW0uUXVlc3Rpb25GaWVsZElEID0gaWQ7XHJcbiAgICAgICAgICBpdGVtLlF1ZXN0aW9uVHlwZUl0ZW1JRCA9IGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQ7XHJcbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlcmVkSXRlbS5xdWVzdGlvblR5cGVJdGVtSUQpIHtcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTnVtYmVyLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5UZXh0ID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLk11bHRpbGluZVRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLlRleHQgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQm9vbGVhbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uQm9vbGVhbiA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5EYXRlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5EYXRlVGltZSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuRGF0ZVRpbWUudG9Mb2NhbGVMb3dlckNhc2UoKTpcclxuICAgICAgICAgICAgICBpdGVtLkRhdGVUaW1lID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdXJ2ZXlPcHRpb25UeXBlLlNpbmdsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5SYWRpb0J1dHRvbi50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtLmlzQWxsb3dTY29yaW5nKVxyXG4gICAgICAgICAgICAgICAgc2NvcmUgPSBmaWx0ZXJlZEl0ZW0ucXVlc3Rpb25PcHRpb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaURfR1VJRCA9PSBlbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICApWzBdPy5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IGVsZW1lbnQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgKVswXS5zY29yZVxyXG4gICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5NdWx0aXBsZVNlbGVjdC50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnQudmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LnZhbHVlW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZGRTaG93ZWRDaGlsZFF1ZXN0aW9ucyhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbS5pc0FsbG93U2NvcmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzY29yZVZhbHVlID0gZmlsdGVyZWRJdGVtLnF1ZXN0aW9uT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaXRlbU9wdGlvbnMpID0+IGl0ZW1PcHRpb25zLmlEX0dVSUQgPT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIClbMF0/LnNjb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkSXRlbS5xdWVzdGlvbk9wdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1PcHRpb25zKSA9PiBpdGVtT3B0aW9ucy5pRF9HVUlEID09IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIClbMF0uc2NvcmVcclxuICAgICAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICAgICAgICBzY29yZSA9IHNjb3JlVmFsdWUgKyBzY29yZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuQ291bnRyeS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uU2VsZWN0ZWRJRHMgPSBbZWxlbWVudC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5JbWFnZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlxyXG4gICAgICAgICAgICAgIGl0ZW0uRmlsZURUTyA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3VydmV5T3B0aW9uVHlwZS5GaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICBpdGVtLkZpbGVEVE8gPSBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgPyBlbGVtZW50LnZhbHVlLkZpbGVcclxuICAgICAgICAgICAgICAgICAgOiBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN1cnZleU9wdGlvblR5cGUuTXVsdGlGaWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgICAgICAgaXRlbS5GaWxlQ29ycmVsYXRpb25EVE8gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsdGVyZWRJdGVtLnZhbHVlID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlcmVkSXRlbS52YWx1ZS5zY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLlZhbHVlc0xpc3QgPSB0aGlzLnJlc3VsdDtcclxuICAgICAgdGhpcy5jaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkU2hvd2VkQ2hpbGRRdWVzdGlvbnMobmV3S2V5KSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIHF1ZXN0aW9uT3B0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdFtpbmRleF0ucXVlc3Rpb25PcHRpb25zO1xyXG4gICAgICBsZXQgT3B0aW9uID0gcXVlc3Rpb25PcHRpb24uZmlsdGVyKCh4KSA9PiB4LmlEX0dVSUQgPT09IG5ld0tleSlbMF07XHJcbiAgICAgIGlmIChPcHRpb24gJiYgT3B0aW9uPy5saW5rZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPcHRpb24ubGlua2VkUXVlc3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgbGlua2VkUXVlc3Rpb24gPSBPcHRpb24ubGlua2VkUXVlc3Rpb25zW2luZGV4XTtcclxuICAgICAgICAgIGxldCBjaGVja0lzUXVlc3Rpb25FeGlzdCA9IHRoaXMuc2hvd2VkQ2hpbGRRdWVzdGlvbi5zb21lKFxyXG4gICAgICAgICAgICAoeCkgPT4geCA9PT0gYHEke2xpbmtlZFF1ZXN0aW9ufWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIWNoZWNrSXNRdWVzdGlvbkV4aXN0KVxyXG4gICAgICAgICAgICB0aGlzLnNob3dlZENoaWxkUXVlc3Rpb24ucHVzaChgcSR7bGlua2VkUXVlc3Rpb259YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VIaWRkZW5RdWVzdGlvbnNTdGF0dXMoKSB7XHJcbiAgICBsZXQgcXVlc3Rpb25zID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hlY2tMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBsZXQgY2hlY2tJZkV4aXN0ID0gdGhpcy5zaG93ZWRDaGlsZFF1ZXN0aW9uLnNvbWUoXHJcbiAgICAgICAgKHgpID0+IHggPT09IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChjaGVja0lmRXhpc3QpIHtcclxuICAgICAgICBsZXQgcXVlc3Rpb25JZCA9IHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lLnJlcGxhY2UoJ3EnLCAnJyk7XHJcbiAgICAgICAgbGV0IFF1ZXN0aW9uID0gdGhpcy5vcHRpb25zLlF1ZXN0aW9uTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pRF9HVUlEID09IHF1ZXN0aW9uSWRcclxuICAgICAgICApWzBdO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKFF1ZXN0aW9uLm9wdGlvbnMuaXNSZXF1aXJlZCAmJiAhdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVxdWlyZWQpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZmlsZWRHcm91cFxyXG4gICAgICAgICAgICAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKVxyXG4gICAgICAgICAgICAuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gbnVsbCB8fFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS52YWx1ZSA9PVxyXG4gICAgICAgICAgICB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSkudmFsdWUgPT0gJydcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgdGhpcy5maWxlZEdyb3VwXHJcbiAgICAgICAgICAgICAgLmdldCh0aGlzLmNoZWNrTGlzdFtpbmRleF0uTmFtZSlcclxuICAgICAgICAgICAgICAuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuZmlsZWRHcm91cC5nZXQodGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLklzUmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0W2luZGV4XS5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RbaW5kZXhdLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuY29udHJvbHNbdGhpcy5jaGVja0xpc3RbaW5kZXhdLk5hbWVdLnJlbW92ZVZhbGlkYXRvcnMoXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpbGVkR3JvdXAuZ2V0KHRoaXMuY2hlY2tMaXN0W2luZGV4XS5OYW1lKS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvQ2FtZWwgPSAob2JqKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgIHJldHVybiBvYmoubWFwKCh2KSA9PiB0aGlzLnRvQ2FtZWwodikpO1xyXG4gICAgfSBlbHNlIGlmIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2VSaWdodChcclxuICAgICAgICAocmVzdWx0LCBrZXkpID0+ICh7XHJcbiAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICBbKGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSB8fCBrZXkpLnRvU3RyaW5nKCldOlxyXG4gICAgICAgICAgICB0aGlzLnRvQ2FtZWwob2JqW2tleV0pLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHt9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH07XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN1cnZleS1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgYWRIb3N0PjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19
|