@openziti/ziti-console-lib 0.4.10 → 0.5.1
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/assets/styles/global.scss +156 -1
- package/assets/styles/ziti.css +7 -0
- package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +5 -2
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +11 -3
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +13 -3
- package/esm2022/lib/features/data-table/data-table.component.mjs +18 -9
- package/esm2022/lib/features/data-table/data-table.service.mjs +5 -5
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +11 -5
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +20 -4
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +12 -9
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -3
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +13 -11
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +8 -9
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +8 -1
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +83 -23
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +137 -31
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +9 -2
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +13 -11
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +14 -12
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +248 -0
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +131 -0
- package/esm2022/lib/features/wrappers/zac-wrapper-service.class.mjs +4 -1
- package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +5 -4
- package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +3 -3
- package/esm2022/lib/models/config.mjs +2 -1
- package/esm2022/lib/models/edge-router-policy.mjs +2 -1
- package/esm2022/lib/models/service-edge-router-policy.mjs +2 -1
- package/esm2022/lib/models/service-policy.mjs +2 -1
- package/esm2022/lib/models/terminator.mjs +14 -0
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +1 -1
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +1 -1
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +1 -1
- package/esm2022/lib/pages/identities/identities-page.component.mjs +1 -1
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +1 -1
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +1 -1
- package/esm2022/lib/pages/services/services-page.component.mjs +1 -1
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +96 -0
- package/esm2022/lib/pages/terminators/terminators-page.service.mjs +185 -0
- package/esm2022/lib/services/settings-service.class.mjs +2 -2
- package/esm2022/lib/services/ziti-controller-data.service.mjs +7 -3
- package/esm2022/lib/services/ziti-data.service.mjs +1 -1
- package/esm2022/lib/shared/list-page-component.class.mjs +2 -2
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/lib/ziti-console-lib.module.mjs +20 -8
- package/esm2022/public-api.mjs +6 -1
- package/fesm2022/openziti-ziti-console-lib.mjs +4236 -3371
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/custom-tags/custom-tags.component.d.ts +3 -2
- package/lib/features/custom-tags/custom-tags.component.d.ts.map +1 -1
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts +1 -0
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +1 -1
- package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
- package/lib/features/data-table/data-table.component.d.ts +4 -1
- package/lib/features/data-table/data-table.component.d.ts.map +1 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +3 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -1
- package/lib/features/preview-list/preview-list.component.d.ts +2 -1
- package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +7 -0
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +4 -2
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +21 -3
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +59 -0
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -0
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts +33 -0
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts.map +1 -0
- package/lib/features/wrappers/zac-wrapper-service.class.d.ts.map +1 -1
- package/lib/features/wrappers/zac-wrapper.component.d.ts.map +1 -1
- package/lib/features/wrappers/zac-wrapper.service.d.ts +1 -0
- package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
- package/lib/models/config.d.ts +1 -0
- package/lib/models/config.d.ts.map +1 -1
- package/lib/models/edge-router-policy.d.ts +1 -0
- package/lib/models/edge-router-policy.d.ts.map +1 -1
- package/lib/models/service-edge-router-policy.d.ts +1 -0
- package/lib/models/service-edge-router-policy.d.ts.map +1 -1
- package/lib/models/service-policy.d.ts +1 -0
- package/lib/models/service-policy.d.ts.map +1 -1
- package/lib/models/terminator.d.ts +11 -0
- package/lib/models/terminator.d.ts.map +1 -0
- package/lib/pages/terminators/terminators-page.component.d.ts +29 -0
- package/lib/pages/terminators/terminators-page.component.d.ts.map +1 -0
- package/lib/pages/terminators/terminators-page.service.d.ts +31 -0
- package/lib/pages/terminators/terminators-page.service.d.ts.map +1 -0
- package/lib/services/ziti-controller-data.service.d.ts +1 -1
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/services/ziti-data.service.d.ts +1 -1
- package/lib/services/ziti-data.service.d.ts.map +1 -1
- package/lib/ziti-console-lib.module.d.ts +20 -18
- package/lib/ziti-console-lib.module.d.ts.map +1 -1
- package/package.json +3 -3
- package/public-api.d.ts +5 -0
- package/public-api.d.ts.map +1 -1
|
@@ -24,17 +24,19 @@ import * as i0 from "@angular/core";
|
|
|
24
24
|
import * as i1 from "../../messaging/growler.service";
|
|
25
25
|
import * as i2 from "../../../services/schema.service";
|
|
26
26
|
import * as i3 from "../../../services/validation.service";
|
|
27
|
-
import * as i4 from "
|
|
28
|
-
import * as i5 from "../../../services/
|
|
27
|
+
import * as i4 from "@angular/router";
|
|
28
|
+
import * as i5 from "../../../services/settings.service";
|
|
29
|
+
import * as i6 from "../../../services/ziti-data.service";
|
|
29
30
|
export const SERVICE_EXTENSION_SERVICE = new InjectionToken('SERVICE_EXTENSION_SERVICE');
|
|
30
31
|
class ServiceFormService {
|
|
31
|
-
constructor(settingsService, zitiService, growlerService, extService, schemaSvc, validationService) {
|
|
32
|
+
constructor(settingsService, zitiService, growlerService, extService, schemaSvc, validationService, router) {
|
|
32
33
|
this.settingsService = settingsService;
|
|
33
34
|
this.zitiService = zitiService;
|
|
34
35
|
this.growlerService = growlerService;
|
|
35
36
|
this.extService = extService;
|
|
36
37
|
this.schemaSvc = schemaSvc;
|
|
37
38
|
this.validationService = validationService;
|
|
39
|
+
this.router = router;
|
|
38
40
|
this.paging = {
|
|
39
41
|
filter: "",
|
|
40
42
|
noSearch: true,
|
|
@@ -50,6 +52,7 @@ class ServiceFormService {
|
|
|
50
52
|
this.configs = [];
|
|
51
53
|
this.configTypes = [];
|
|
52
54
|
this.filteredConfigs = [];
|
|
55
|
+
this.configsLoading = false;
|
|
53
56
|
this.showCfgPreviewOption = false;
|
|
54
57
|
this.selectedConfigName = '';
|
|
55
58
|
this.selectedConfigTypeId = '';
|
|
@@ -77,9 +80,20 @@ class ServiceFormService {
|
|
|
77
80
|
this.associatedConfigs = [];
|
|
78
81
|
this.associatedConfigsMap = {};
|
|
79
82
|
this.associatedTerminators = [];
|
|
83
|
+
this.associatedTerminatorNames = [];
|
|
84
|
+
this.associatedTerminatorsMap = {};
|
|
85
|
+
this.associatedTerminatorsTotal = 0;
|
|
80
86
|
this.associatedServicePolicies = [];
|
|
81
87
|
this.associatedServicePolicyNames = [];
|
|
82
88
|
this.associatedServicePoliciesMap = {};
|
|
89
|
+
this.associatedServicePoliciesTotal = 0;
|
|
90
|
+
this.associatedConfigsLoading = false;
|
|
91
|
+
this.associatedServicePoliciesLoading = false;
|
|
92
|
+
this.associatedTerminatorsLoading = false;
|
|
93
|
+
this.headerComponentParams = {
|
|
94
|
+
filterType: 'TEXTINPUT',
|
|
95
|
+
enableSorting: true
|
|
96
|
+
};
|
|
83
97
|
this.lColorArray = [
|
|
84
98
|
'white',
|
|
85
99
|
'white',
|
|
@@ -147,24 +161,99 @@ class ServiceFormService {
|
|
|
147
161
|
});
|
|
148
162
|
}
|
|
149
163
|
getAssociatedServicePolicies() {
|
|
150
|
-
this.zitiService.
|
|
164
|
+
const paging = this.zitiService.DEFAULT_PAGING;
|
|
165
|
+
paging.total = 5;
|
|
166
|
+
this.associatedServicePoliciesLoading = true;
|
|
167
|
+
this.zitiService.getSubdata('services', this.formData.id, 'service-policies', paging).then((result) => {
|
|
151
168
|
this.associatedServicePolicies = result.data;
|
|
169
|
+
this.associatedServicePoliciesTotal = result.meta?.pagination.totalCount || 0;
|
|
152
170
|
this.associatedServicePolicyNames = this.associatedServicePolicies.map((policy) => {
|
|
153
171
|
this.associatedServicePoliciesMap[policy.name] = policy;
|
|
172
|
+
policy.href = '/service-policies/' + policy.id;
|
|
154
173
|
return policy.name;
|
|
155
174
|
});
|
|
175
|
+
if (this.associatedServicePoliciesTotal > 5) {
|
|
176
|
+
let roleAttributes = cloneDeep(this.formData.roleAttributes);
|
|
177
|
+
roleAttributes = roleAttributes.map((attribute) => {
|
|
178
|
+
return '%23' + attribute;
|
|
179
|
+
});
|
|
180
|
+
roleAttributes.push('%40' + this.formData.id);
|
|
181
|
+
let urlParam = '';
|
|
182
|
+
roleAttributes.forEach((param, index) => {
|
|
183
|
+
if (index > 0) {
|
|
184
|
+
urlParam += ',';
|
|
185
|
+
}
|
|
186
|
+
urlParam += param;
|
|
187
|
+
});
|
|
188
|
+
const searchFilter = {
|
|
189
|
+
columnId: 'serviceRoles',
|
|
190
|
+
value: roleAttributes,
|
|
191
|
+
label: '@' + this.formData.name,
|
|
192
|
+
filterName: 'Service Attributes',
|
|
193
|
+
type: 'ATTRIBUTE'
|
|
194
|
+
};
|
|
195
|
+
localStorage.setItem('search_filters', JSON.stringify([searchFilter]));
|
|
196
|
+
this.associatedServicePolicies.push({
|
|
197
|
+
name: 'show more results...',
|
|
198
|
+
href: '/service-policies?serviceRoles=' + urlParam,
|
|
199
|
+
linkClass: 'preview-more-results',
|
|
200
|
+
//iconClass: 'icon-open',
|
|
201
|
+
skipSort: true
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}).finally(() => {
|
|
205
|
+
this.associatedServicePoliciesLoading = false;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
getAssociatedTerminators() {
|
|
209
|
+
this.associatedTerminatorsLoading = true;
|
|
210
|
+
this.zitiService.getSubdata('services', this.formData.id, 'terminators').then((result) => {
|
|
211
|
+
this.associatedTerminators = result.data;
|
|
212
|
+
this.associatedTerminatorsTotal = result.meta?.pagination.totalCount || 0;
|
|
213
|
+
this.associatedTerminatorNames = this.associatedTerminators.map((terminator) => {
|
|
214
|
+
this.associatedTerminatorsMap[terminator.id] = terminator.binding + ': ' + terminator.address;
|
|
215
|
+
terminator.name = terminator.router.name + ': ' + terminator.address;
|
|
216
|
+
terminator.href = '/terminators/' + terminator.id;
|
|
217
|
+
return terminator.binding + ': ' + terminator.address;
|
|
218
|
+
});
|
|
219
|
+
if (this.associatedTerminatorsTotal > 5) {
|
|
220
|
+
const searchFilter = {
|
|
221
|
+
columnId: 'service',
|
|
222
|
+
value: this.formData.id,
|
|
223
|
+
label: this.formData.name,
|
|
224
|
+
filterName: 'Service',
|
|
225
|
+
type: 'TEXTINPUT',
|
|
226
|
+
verb: '='
|
|
227
|
+
};
|
|
228
|
+
localStorage.setItem('search_filters', JSON.stringify([searchFilter]));
|
|
229
|
+
this.associatedTerminators.push({
|
|
230
|
+
name: 'show more results...',
|
|
231
|
+
href: '/terminators?service=' + this.formData.id,
|
|
232
|
+
linkClass: 'preview-more-results',
|
|
233
|
+
//iconClass: 'icon-open',
|
|
234
|
+
skipSort: true
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}).finally(() => {
|
|
238
|
+
this.associatedTerminatorsLoading = false;
|
|
156
239
|
});
|
|
157
240
|
}
|
|
158
241
|
previewConfig(configName, router) {
|
|
159
242
|
this.showCfgPreviewOption = true;
|
|
160
|
-
|
|
161
|
-
router.navigate(['/configs/' +
|
|
243
|
+
const selectedConfig = this.associatedConfigsMap[configName];
|
|
244
|
+
router.navigate(['/configs/' + selectedConfig.id]);
|
|
162
245
|
return;
|
|
163
246
|
}
|
|
164
247
|
previewPolicy(policyName, router) {
|
|
165
248
|
this.showCfgPreviewOption = true;
|
|
166
|
-
|
|
167
|
-
router.navigate(['/service-policies/' +
|
|
249
|
+
const selectedPolicy = this.associatedServicePoliciesMap[policyName];
|
|
250
|
+
router.navigate(['/service-policies/' + selectedPolicy.id]);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
previewTerminator(policyName, router) {
|
|
254
|
+
this.showCfgPreviewOption = true;
|
|
255
|
+
const selectedTerminator = this.associatedTerminatorsMap[policyName];
|
|
256
|
+
router.navigate(['/terminators/' + selectedTerminator.id]);
|
|
168
257
|
return;
|
|
169
258
|
}
|
|
170
259
|
addTerminators(serviceId) {
|
|
@@ -190,10 +279,17 @@ class ServiceFormService {
|
|
|
190
279
|
this.configTypes = result.data;
|
|
191
280
|
});
|
|
192
281
|
}
|
|
193
|
-
getConfigs() {
|
|
194
|
-
|
|
282
|
+
getConfigs(filters = [], page = 1) {
|
|
283
|
+
this.configsLoading = true;
|
|
284
|
+
const paging = cloneDeep(this.paging);
|
|
285
|
+
if (filters.length > 0) {
|
|
286
|
+
paging.noSearch = false;
|
|
287
|
+
}
|
|
288
|
+
return this.zitiService.get('configs', paging, filters).then((result) => {
|
|
195
289
|
this.configs = result.data;
|
|
196
290
|
this.configTypeChanged();
|
|
291
|
+
}).finally(() => {
|
|
292
|
+
this.configsLoading = false;
|
|
197
293
|
});
|
|
198
294
|
}
|
|
199
295
|
getRouters() {
|
|
@@ -202,6 +298,7 @@ class ServiceFormService {
|
|
|
202
298
|
});
|
|
203
299
|
}
|
|
204
300
|
getAssociatedConfigs() {
|
|
301
|
+
this.associatedConfigsLoading = true;
|
|
205
302
|
this.zitiService.getSubdata('services', this.formData.id, 'configs').then((result) => {
|
|
206
303
|
this.associatedConfigs = result.data;
|
|
207
304
|
this.associatedConfigsMap = {};
|
|
@@ -210,14 +307,8 @@ class ServiceFormService {
|
|
|
210
307
|
cfg.href = '/configs/' + cfg.id;
|
|
211
308
|
return cfg;
|
|
212
309
|
});
|
|
213
|
-
})
|
|
214
|
-
|
|
215
|
-
getAssociatedTerminators() {
|
|
216
|
-
this.zitiService.getSubdata('services', this.formData.id, 'terminators').then((result) => {
|
|
217
|
-
this.associatedTerminators = result.data;
|
|
218
|
-
this.addedTerminatorNames = this.associatedTerminators.map((cfg) => {
|
|
219
|
-
return cfg.router?.name;
|
|
220
|
-
});
|
|
310
|
+
}).finally(() => {
|
|
311
|
+
this.associatedConfigsLoading = false;
|
|
221
312
|
});
|
|
222
313
|
}
|
|
223
314
|
createConfig(configData) {
|
|
@@ -239,6 +330,13 @@ class ServiceFormService {
|
|
|
239
330
|
this.filteredConfigs = this.configs.filter((config) => {
|
|
240
331
|
return config.configTypeId === this.selectedConfigTypeId;
|
|
241
332
|
});
|
|
333
|
+
const defaultOptions = [
|
|
334
|
+
{
|
|
335
|
+
name: 'Add a New Config',
|
|
336
|
+
id: 'add-new'
|
|
337
|
+
}
|
|
338
|
+
];
|
|
339
|
+
this.filteredConfigs = [...defaultOptions, ...this.filteredConfigs];
|
|
242
340
|
this.configTypes.forEach((configType) => {
|
|
243
341
|
if (this.selectedConfigTypeId === configType.id) {
|
|
244
342
|
this.selectedConfigType = configType;
|
|
@@ -348,15 +446,9 @@ class ServiceFormService {
|
|
|
348
446
|
}
|
|
349
447
|
}
|
|
350
448
|
removeConfig(configToRemove) {
|
|
351
|
-
|
|
352
|
-
this.configs.forEach((availableConfig) => {
|
|
353
|
-
if (availableConfig.name === configToRemove.name) {
|
|
354
|
-
configIdToRemove = availableConfig.id;
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
if (configIdToRemove) {
|
|
449
|
+
if (configToRemove.id) {
|
|
358
450
|
const newConfigs = filter(this.formData.configs, configId => {
|
|
359
|
-
return configId !==
|
|
451
|
+
return configId !== configToRemove.id;
|
|
360
452
|
});
|
|
361
453
|
const newConfigItems = filter(this.addedConfigs, (config) => {
|
|
362
454
|
return config.name !== configToRemove.name;
|
|
@@ -438,7 +530,21 @@ class ServiceFormService {
|
|
|
438
530
|
};
|
|
439
531
|
return data;
|
|
440
532
|
}
|
|
441
|
-
|
|
533
|
+
openTerminatorEditForm(id) {
|
|
534
|
+
this.router.navigate(['terminator/' + id]);
|
|
535
|
+
}
|
|
536
|
+
sort(sortBy, ordering = 'asc') {
|
|
537
|
+
const terminatorSort = { sortBy, ordering };
|
|
538
|
+
this.getAssociatedTerminators();
|
|
539
|
+
}
|
|
540
|
+
hasSelectedText() {
|
|
541
|
+
let text = '';
|
|
542
|
+
if (window.getSelection) {
|
|
543
|
+
text = window.getSelection().toString();
|
|
544
|
+
}
|
|
545
|
+
return text?.length > 0;
|
|
546
|
+
}
|
|
547
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceFormService, deps: [{ token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i1.GrowlerService }, { token: SERVICE_EXTENSION_SERVICE }, { token: i2.SchemaService }, { token: i3.ValidationService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
442
548
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceFormService, providedIn: 'root' }); }
|
|
443
549
|
}
|
|
444
550
|
export { ServiceFormService };
|
|
@@ -447,14 +553,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
447
553
|
args: [{
|
|
448
554
|
providedIn: 'root'
|
|
449
555
|
}]
|
|
450
|
-
}], ctorParameters: function () { return [{ type:
|
|
556
|
+
}], ctorParameters: function () { return [{ type: i5.SettingsService, decorators: [{
|
|
451
557
|
type: Inject,
|
|
452
558
|
args: [SETTINGS_SERVICE]
|
|
453
|
-
}] }, { type:
|
|
559
|
+
}] }, { type: i6.ZitiDataService, decorators: [{
|
|
454
560
|
type: Inject,
|
|
455
561
|
args: [ZITI_DATA_SERVICE]
|
|
456
562
|
}] }, { type: i1.GrowlerService }, { type: undefined, decorators: [{
|
|
457
563
|
type: Inject,
|
|
458
564
|
args: [SERVICE_EXTENSION_SERVICE]
|
|
459
|
-
}] }, { type: i2.SchemaService }, { type: i3.ValidationService }]; } });
|
|
460
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS9zZXJ2aWNlLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFtQixNQUFNLFFBQVEsQ0FBQztBQUNqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFFdkYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQUlsQyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FBTSwyQkFBMkIsQ0FBQyxDQUFDO0FBRTlGLE1BR2Esa0JBQWtCO0lBa0UzQixZQUNxQyxlQUFnQyxFQUM5QixXQUE0QixFQUN2RCxjQUE4QixFQUNJLFVBQTRCLEVBQzlELFNBQXdCLEVBQ3hCLGlCQUFvQztRQUxYLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0ksZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDOUQs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O29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBb0VRLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7aXNFbXB0eSwgaXNTdHJpbmcsIGtleXMsIHNvbWUsIGRlZmVyLCBjbG9uZURlZXAsIGZpbHRlciwgaXNOaWwsIGlzQm9vbGVhbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvc2VydmljZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IGR5bmFtaWMgZnJvbSBcImFqdi9kaXN0L3ZvY2FidWxhcmllcy9keW5hbWljXCI7XG5pbXBvcnQge1NjaGVtYVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zY2hlbWEuc2VydmljZVwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0NvbmZpZ0VkaXRvckNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2NvbmZpZy1lZGl0b3IvY29uZmlnLWVkaXRvci5jb21wb25lbnRcIjtcbmltcG9ydCB7VmFsaWRhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2VcIjtcblxuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRScpO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlcnZpY2VGb3JtU2VydmljZSB7XG5cbiAgICBwYWdpbmcgPSB7XG4gICAgICAgIGZpbHRlcjogXCJcIixcbiAgICAgICAgbm9TZWFyY2g6IHRydWUsXG4gICAgICAgIG9yZGVyOiBcImFzY1wiLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBzZWFyY2hPbjogXCJuYW1lXCIsXG4gICAgICAgIHNvcnQ6IFwibmFtZVwiLFxuICAgICAgICB0b3RhbDogMTAwXG4gICAgfVxuXG4gICAgZm9ybURhdGE6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkQ29uZmlnOiBhbnkgPSB7fTtcbiAgICBjb25maWdEYXRhOiBhbnk7XG4gICAgc2VsZWN0ZWRDb25maWdJZDogYW55ID0gJyc7XG4gICAgY29uZmlnczogYW55ID0gW107XG4gICAgY29uZmlnVHlwZXM6IGFueSA9IFtdO1xuICAgIGZpbHRlcmVkQ29uZmlnczogYW55ID0gW107XG4gICAgc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSBmYWxzZTtcbiAgICBzZWxlY3RlZENvbmZpZ05hbWU6IGFueSA9ICcnO1xuICAgIHNlbGVjdGVkQ29uZmlnVHlwZUlkOiBhbnkgPSAnJztcbiAgICBzZWxlY3RlZENvbmZpZ1R5cGU6IGFueSA9IHt9O1xuICAgIGFkZGVkQ29uZmlnczogYW55ID0gW107XG4gICAgYWRkZWRUZXJtaW5hdG9yTmFtZXM6IGFueSA9IFtdO1xuICAgIGFkZGVkVGVybWluYXRvcnM6IGFueSA9IFtdO1xuICAgIGNvbmZpZ0pzb25WaWV3ID0gZmFsc2U7XG4gICAgaGlkZUNvbmZpZ0pTT04gPSBmYWxzZTtcbiAgICBjb25maWdFcnJvcnM6IGFueSA9IHt9O1xuICAgIHRlcm1pbmF0b3JFcnJvcnM6IGFueSA9IHt9O1xuICAgIG5ld0NvbmZpZ05hbWU6IHN0cmluZyA9ICcnO1xuICAgIHRlcm1pbmF0b3JIb3N0OiBzdHJpbmcgPSAnJztcbiAgICB0ZXJtaW5hdG9yUG9ydDogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRTY2hlbWE6IGFueSA9IHt9O1xuICAgIGl0ZW1zOiBhbnkgPSBbXTtcbiAgICByb3V0ZXJzOiBhbnkgPSBbXTtcbiAgICBjb25maWdEYXRhTGFiZWwgPSAnQ29uZmlndXJhdGlvbiBGb3JtJztcbiAgICBhdHRhY2hMYWJlbCA9ICdDcmVhdGUgYW5kIEF0dGFjaCc7XG4gICAgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICBzZWxlY3RlZFJvdXRlcklkOiBzdHJpbmcgPSAnJztcbiAgICBzZWxlY3RlZFJvdXRlcjogYW55O1xuICAgIHNlbGVjdGVkQmluZGluZ0lkOiBzdHJpbmcgPSAnJztcbiAgICB0ZXJtaW5hdG9yUHJvdG9jb2wgPSAndWRwJztcbiAgICBzYXZlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBhc3NvY2lhdGVkQ29uZmlnczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZENvbmZpZ3NNYXA6IGFueSA9IHt9O1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY3lOYW1lczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc01hcDogYW55ID0ge307XG5cbiAgICBsQ29sb3JBcnJheSA9IFtcbiAgICAgICAgJ3doaXRlJyxcbiAgICAgICAgJ3doaXRlJyxcbiAgICAgICAgJ3doaXRlJyxcbiAgICBdXG5cbiAgICBiQ29sb3JBcnJheSA9IFtcbiAgICAgICAgJ3ZhcigtLWZvcm1CYXNlKScsXG4gICAgICAgICd2YXIoLS1mb3JtR3JvdXApJyxcbiAgICAgICAgJ3ZhcigtLWZvcm1TdWJHcm91cCknXG4gICAgXVxuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBjb25maWdFZGl0b3I6IENvbmZpZ0VkaXRvckNvbXBvbmVudDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSlwcml2YXRlIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2NoZW1hU3ZjOiBTY2hlbWFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZVxuICAgICkge31cblxuICAgIHJlc2V0Rm9ybURhdGEoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdOYW1lID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlncyA9IFtdO1xuICAgICAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgICAgICB0aGlzLm5ld0NvbmZpZ05hbWUgPSAnJztcbiAgICB9XG5cbiAgICBzYXZlKGZvcm1EYXRhKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaXNVcGRhdGUgPSAhaXNFbXB0eShmb3JtRGF0YS5pZCk7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZ2V0U2VydmljZURhdGFNb2RlbChmb3JtRGF0YSwgaXNVcGRhdGUpO1xuICAgICAgICBsZXQgcHJvbTtcbiAgICAgICAgaWYgKGlzVXBkYXRlKSB7XG4gICAgICAgICAgICBwcm9tID0gdGhpcy56aXRpU2VydmljZS5wYXRjaCgnc2VydmljZXMnLCBkYXRhLCBmb3JtRGF0YS5pZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9tID0gdGhpcy56aXRpU2VydmljZS5wb3N0KCdzZXJ2aWNlcycsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb20udGhlbihhc3luYyAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXNVcGRhdGUgPyBmb3JtRGF0YS5pZCA6IChyZXN1bHQ/LmRhdGE/LmlkIHx8IHJlc3VsdD8uaWQpO1xuICAgICAgICAgICAgbGV0IHN2YyA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCBpZCwgJycpLnRoZW4oKHN2Y0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ZjRGF0YS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhU2F2ZWQoc3ZjKS50aGVuKChmb3JtU2F2ZWRSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZm9ybVNhdmVkUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdmM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGBTZXJ2aWNlcyAke2lzVXBkYXRlID8gJ1VwZGF0ZWQnIDogJ0NyZWF0ZWQnfWAsXG4gICAgICAgICAgICAgICAgICAgIGBTdWNjZXNzZnVsbHkgJHtpc1VwZGF0ZSA/ICd1cGRhdGVkJyA6ICdjcmVhdGVkJ30gU2VydmljZTogJHtmb3JtRGF0YS5uYW1lfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmM7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKChyZXNwKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgaWYgKHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXNwPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5tZXNzYWdlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5yZWFzb24pIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXNwPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5yZWFzb247XG4gICAgICAgICAgICB9ZWxzZSBpZiAocmVzcD8uZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXNwPy5lcnJvcj8ubWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICBgRXJyb3IgQ3JlYXRpbmcgU2VydmljZWAsXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB0aHJvdyByZXNwO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldEFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMoKSB7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAnc2VydmljZS1wb2xpY2llcycpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY3lOYW1lcyA9IHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcy5tYXAoKHBvbGljeSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc01hcFtwb2xpY3kubmFtZV0gPSBwb2xpY3k7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGljeS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpZXdDb25maWcoY29uZmlnTmFtZSwgcm91dGVyKSB7XG4gICAgICAgIHRoaXMuc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjb25maWdOYW1lXTtcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKFsnL2NvbmZpZ3MvJyArIHRoaXMuc2VsZWN0ZWRDb25maWcuaWRdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZpZXdQb2xpY3kocG9saWN5TmFtZSwgcm91dGVyKSB7XG4gICAgICAgIHRoaXMuc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTWFwW3BvbGljeU5hbWVdO1xuICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvc2VydmljZS1wb2xpY2llcy8nICsgdGhpcy5zZWxlY3RlZENvbmZpZy5pZF0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRkVGVybWluYXRvcnMoc2VydmljZUlkKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIHRoaXMuYWRkZWRUZXJtaW5hdG9ycy5mb3JFYWNoKCh0ZXJtaW5hdG9yKSA9PiB7XG4gICAgICAgICAgICB0ZXJtaW5hdG9yLnNlcnZpY2UgPSBzZXJ2aWNlSWRcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy56aXRpU2VydmljZS5wb3N0KCd0ZXJtaW5hdG9ycycsIHRlcm1pbmF0b3IpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2VydmljZURhdGFNb2RlbChmb3JtRGF0YSwgaXNVcGRhdGUpIHtcbiAgICAgICAgY29uc3Qgc2F2ZU1vZGVsID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgbW9kZWxQcm9wZXJ0aWVzID0ga2V5cyhzYXZlTW9kZWwpO1xuICAgICAgICBtb2RlbFByb3BlcnRpZXMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoKHByb3ApIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzYXZlTW9kZWxbcHJvcF0gPSBmb3JtRGF0YVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzYXZlTW9kZWw7XG4gICAgfVxuXG4gICAgZ2V0Q29uZmlnVHlwZXMoKSB7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdjb25maWctdHlwZXMnLCB0aGlzLnBhZ2luZywgW10pLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1R5cGVzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldENvbmZpZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlncycsIHRoaXMucGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jb25maWdUeXBlQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRSb3V0ZXJzKCkge1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnZWRnZS1yb3V0ZXJzJywgdGhpcy5wYWdpbmcsIFtdKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXJzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFzc29jaWF0ZWRDb25maWdzKCkge1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ2NvbmZpZ3MnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSB0aGlzLmFzc29jaWF0ZWRDb25maWdzLm1hcCgoY2ZnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjZmcubmFtZV0gPSBjZmc7XG4gICAgICAgICAgICAgICAgY2ZnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIGNmZy5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2ZnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFzc29jaWF0ZWRUZXJtaW5hdG9ycygpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICd0ZXJtaW5hdG9ycycpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9ycyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5hZGRlZFRlcm1pbmF0b3JOYW1lcyA9IHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzLm1hcCgoY2ZnKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNmZy5yb3V0ZXI/Lm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29uZmlnKGNvbmZpZ0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdCgnY29uZmlncycsIGNvbmZpZ0RhdGEsIHRydWUpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHJlc3BvbnNlPy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBtc2cgPSByZXNwb25zZT8uZXJyb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1zZyA9IHJlc3BvbnNlPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5yZWFzb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBOZXcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlnVHlwZUNoYW5nZWQocmVzZXREYXRhPykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncyA9IHRoaXMuY29uZmlncy5maWx0ZXIoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5jb25maWdUeXBlSWQgPT09IHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbmZpZ1R5cGVzLmZvckVhY2goKGNvbmZpZ1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID09PSBjb25maWdUeXBlLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUgPSBjb25maWdUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAhaXNFbXB0eSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkKSA/ICdhZGQtbmV3JyA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZChyZXNldERhdGEpO1xuICAgIH1cblxuICAgIHVwZGF0ZWRBZGRlZENvbmZpZ3MoKSB7XG4gICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gW107XG4gICAgICAgIHRoaXMuY29uZmlncy5mb3JFYWNoKChhdmFpbGFibGVDb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNmZ0V4aXN0cyA9IHNvbWUodGhpcy5mb3JtRGF0YS5jb25maWdzLCBjb25maWdJZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUNvbmZpZy5pZCA9PSBjb25maWdJZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNmZ0V4aXN0cykge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUNvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBhdmFpbGFibGVDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChhdmFpbGFibGVDb25maWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gWy4uLnRoaXMuYWRkZWRDb25maWdzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0b2dnbGVKU09OVmlldygpIHtcbiAgICAgICAgdGhpcy5jb25maWdKc29uVmlldyA9ICF0aGlzLmNvbmZpZ0pzb25WaWV3O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGFMYWJlbCA9IHRoaXMuY29uZmlnSnNvblZpZXcgPyAnSlNPTiBDb25maWd1cmF0aW9uJyA6ICdDb25maWd1cmF0aW9uIEZvcm0nO1xuICAgICAgICBpZiAodGhpcy5jb25maWdKc29uVmlldykge1xuICAgICAgICAgICAgLy90aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGF0dGFjaENvbmZpZyhhZGRlZENvbmZpZ0lkKSB7XG4gICAgICAgIGxldCBjb25maWdJZDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ2FkZC1uZXcnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDb25maWcoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIFZhbGlkYXRpbmcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICAgICAgJ1RoZSBlbnRlcmVkIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gUGxlYXNlIHVwZGF0ZSBtaXNzaW5nL2ludmFsaWQgZmllbGRzIGFuZCB0cnkgYWdhaW4uJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgY29uZmlnVHlwZUlkOiB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkLFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29uZmlnRGF0YSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5ld0NvbmZpZ05hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0NvbmZpZy5kYXRhID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5yZWRlZmluZU9iamVjdChuZXdDb25maWcuZGF0YSk7XG4gICAgICAgICAgICBjb25maWdJZCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29uZmlnKG5ld0NvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmZyA9IHJlc3VsdD8uZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmlkID0gcmVzdWx0Py5pZCA/IHJlc3VsdC5pZCA6IHJlc3VsdD8uZGF0YT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBuZXdDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXBbbmV3Q29uZmlnLm5hbWVdID0ge2RhdGE6IG5ld0NvbmZpZy5kYXRhLCBuYW1lOiBuZXdDb25maWcubmFtZSwgY29uZmlnVHlwZUlkOiBuZXdDb25maWcuY29uZmlnVHlwZUlkfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yRmllbGQgPSByZXN1bHQ/LmVycm9yPy5lcnJvcj8uY2F1c2U/LmZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHkoZXJyb3JGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRXJyb3JzW2Vycm9yRmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSByZXN1bHQ/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBgRXJyb3IgQ3JlYXRpbmcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eShjb25maWdJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5wdXNoKGNvbmZpZ0lkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncy5wdXNoKG5ld0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBbLi4udGhpcy5hZGRlZENvbmZpZ3NdO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29uZmlncygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGBOZXcgQ29uZmlnIEF0dGFjaGVkYCxcbiAgICAgICAgICAgICAgICAgICAgYE5ldyBDb25maWcgJHt0aGlzLm5ld0NvbmZpZ05hbWV9IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDb25maWdOYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRWRpdG9yPy5nZXRDb25maWdEYXRhRnJvbUZvcm0oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29uZmlnQWRkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5mb3JFYWNoKChjb25maWdJZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdJZCA9PT0gYWRkZWRDb25maWdJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWdBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ0FkZGVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0NvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuaWQgPT09IGFkZGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChuZXdDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IFsuLi50aGlzLmFkZGVkQ29uZmlnc107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5wdXNoKGFkZGVkQ29uZmlnSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgJ0luZm8nLFxuICAgICAgICAgICAgICAgICAgICBgQ29uZmlnIEFscmVhZHkgQXR0YWNoZWRgLFxuICAgICAgICAgICAgICAgICAgICAnQ29uZmlnIGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQgdG8gdGhpcyBzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb25maWcoY29uZmlnVG9SZW1vdmUpIHtcbiAgICAgICAgbGV0IGNvbmZpZ0lkVG9SZW1vdmU7XG4gICAgICAgIHRoaXMuY29uZmlncy5mb3JFYWNoKChhdmFpbGFibGVDb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmIChhdmFpbGFibGVDb25maWcubmFtZSA9PT0gY29uZmlnVG9SZW1vdmUubmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZ0lkVG9SZW1vdmUgPSBhdmFpbGFibGVDb25maWcuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29uZmlnSWRUb1JlbW92ZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlncyA9IGZpbHRlcih0aGlzLmZvcm1EYXRhLmNvbmZpZ3MsIGNvbmZpZ0lkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnSWQgIT09IGNvbmZpZ0lkVG9SZW1vdmU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZ0l0ZW1zID0gZmlsdGVyKHRoaXMuYWRkZWRDb25maWdzLCAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5uYW1lICE9PSBjb25maWdUb1JlbW92ZS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmNvbmZpZ3MgPSBuZXdDb25maWdzO1xuICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBuZXdDb25maWdJdGVtcztcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09ICdwcmV2aWV3JyAmJiBjb25maWdUb1JlbW92ZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkQ29uZmlnTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNvbmZpZ0NoYW5nZWQocmVzZXREYXRhID0gdHJ1ZSkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSByZXNldERhdGEgPyB1bmRlZmluZWQgOiB0aGlzLmNvbmZpZ0RhdGE7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICBsZXQgYXR0YWNoTGFiZWwgPSAnQXR0YWNoIHRvIFNlcnZpY2UnO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSAncHJldmlldycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY2hlbWEgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnNjaGVtYSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZS5zY2hlbWEpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ2FkZC1uZXcnKSB7XG4gICAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2NoZW1hID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5zY2hlbWEodGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUuc2NoZW1hKTtcbiAgICAgICAgICAgIGF0dGFjaExhYmVsID0gJ0NyZWF0ZSBhbmQgQXR0YWNoJztcbiAgICAgICAgICAgIC8vdGhpcy5jcmVhdGVGb3JtKGR5bmFtaWNGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRDb25maWdzLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09IGNvbmZpZy5pZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGEgPSBzZWxlY3RlZENvbmZpZz8uZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vdGhpcy51cGRhdGVDb25maWdEYXRhKCk7XG4gICAgICAgIHRoaXMuYXR0YWNoTGFiZWwgPSBhdHRhY2hMYWJlbDtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5uYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5lcnJvcnMpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlQ29uZmlnKCkge1xuICAgICAgICB0aGlzLmNvbmZpZ0Vycm9ycyA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0VkaXRvcj8udmFsaWRhdGVDb25maWcoKTtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5uZXdDb25maWdOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdFcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5jb25maWdFcnJvcnMpO1xuICAgIH1cblxuICAgIF9hcGlEYXRhID0ge307XG4gICAgc2V0IGFwaURhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBnZXQgYXBpRGF0YSgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtRGF0YT8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzOiB0aGlzLmZvcm1EYXRhPy5yb2xlQXR0cmlidXRlcyB8fCBbXSxcbiAgICAgICAgICAgIGNvbmZpZ3M6IHRoaXMuZm9ybURhdGE/LmNvbmZpZ3MgfHwgW10sXG4gICAgICAgICAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRoaXMuZm9ybURhdGE/LmVuY3J5cHRpb25SZXF1aXJlZCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JTdHJhdGVneTogdGhpcy5mb3JtRGF0YT8udGVybWluYXRvclN0cmF0ZWd5IHx8ICcnLFxuICAgICAgICAgICAgdGFnczogdGhpcy5mb3JtRGF0YT8udGFncyB8fCB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxufSJdfQ==
|
|
565
|
+
}] }, { type: i2.SchemaService }, { type: i3.ValidationService }, { type: i4.Router }]; } });
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS9zZXJ2aWNlLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFtQixNQUFNLFFBQVEsQ0FBQztBQUNqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFFdkYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFTbEMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQU0sMkJBQTJCLENBQUMsQ0FBQztBQUU5RixNQUdhLGtCQUFrQjtJQStFM0IsWUFDcUMsZUFBZ0MsRUFDOUIsV0FBNEIsRUFDdkQsY0FBOEIsRUFDSSxVQUE0QixFQUM5RCxTQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsTUFBYztRQU5XLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0ksZUFBVSxHQUFWLFVBQVUs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LFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFpRlEsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBRXhCLE1BQU07MkJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3QsIEluamVjdGlvblRva2VufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtpc0VtcHR5LCBpc1N0cmluZywga2V5cywgc29tZSwgZGVmZXIsIGNsb25lRGVlcCwgZmlsdGVyLCBpc05pbCwgaXNCb29sZWFufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7U2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9zZXJ2aWNlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgZHluYW1pYyBmcm9tIFwiYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2R5bmFtaWNcIjtcbmltcG9ydCB7U2NoZW1hU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NjaGVtYS5zZXJ2aWNlXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Q29uZmlnRWRpdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vY29uZmlnLWVkaXRvci9jb25maWctZWRpdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnRcbn0gZnJvbSBcIi4uLy4uL2RhdGEtdGFibGUvY29sdW1uLWhlYWRlcnMvdGFibGUtY29sdW1uLWRlZmF1bHQvdGFibGUtY29sdW1uLWRlZmF1bHQuY29tcG9uZW50XCI7XG5pbXBvcnQge1RhYmxlQ2VsbE5hbWVDb21wb25lbnR9IGZyb20gXCIuLi8uLi9kYXRhLXRhYmxlL2NlbGxzL3RhYmxlLWNlbGwtbmFtZS90YWJsZS1jZWxsLW5hbWUuY29tcG9uZW50XCI7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuXG5leHBvcnQgY29uc3QgU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnk+KCdTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VydmljZUZvcm1TZXJ2aWNlIHtcblxuICAgIHBhZ2luZyA9IHtcbiAgICAgICAgZmlsdGVyOiBcIlwiLFxuICAgICAgICBub1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgb3JkZXI6IFwiYXNjXCIsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHNlYXJjaE9uOiBcIm5hbWVcIixcbiAgICAgICAgc29ydDogXCJuYW1lXCIsXG4gICAgICAgIHRvdGFsOiAxMDBcbiAgICB9XG5cbiAgICBmb3JtRGF0YTogYW55ID0ge307XG4gICAgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgIGNvbmZpZ0RhdGE6IGFueTtcbiAgICBzZWxlY3RlZENvbmZpZ0lkOiBhbnkgPSAnJztcbiAgICBjb25maWdzOiBhbnkgPSBbXTtcbiAgICBjb25maWdUeXBlczogYW55ID0gW107XG4gICAgZmlsdGVyZWRDb25maWdzOiBhbnkgPSBbXTtcbiAgICBjb25maWdzTG9hZGluZyA9IGZhbHNlO1xuICAgIHNob3dDZmdQcmV2aWV3T3B0aW9uID0gZmFsc2U7XG4gICAgc2VsZWN0ZWRDb25maWdOYW1lOiBhbnkgPSAnJztcbiAgICBzZWxlY3RlZENvbmZpZ1R5cGVJZDogYW55ID0gJyc7XG4gICAgc2VsZWN0ZWRDb25maWdUeXBlOiBhbnkgPSB7fTtcbiAgICBhZGRlZENvbmZpZ3M6IGFueSA9IFtdO1xuICAgIGFkZGVkVGVybWluYXRvck5hbWVzOiBhbnkgPSBbXTtcbiAgICBhZGRlZFRlcm1pbmF0b3JzOiBhbnkgPSBbXTtcbiAgICBjb25maWdKc29uVmlldyA9IGZhbHNlO1xuICAgIGhpZGVDb25maWdKU09OID0gZmFsc2U7XG4gICAgY29uZmlnRXJyb3JzOiBhbnkgPSB7fTtcbiAgICB0ZXJtaW5hdG9yRXJyb3JzOiBhbnkgPSB7fTtcbiAgICBuZXdDb25maWdOYW1lOiBzdHJpbmcgPSAnJztcbiAgICB0ZXJtaW5hdG9ySG9zdDogc3RyaW5nID0gJyc7XG4gICAgdGVybWluYXRvclBvcnQ6IHN0cmluZyA9ICcnO1xuICAgIHNlbGVjdGVkU2NoZW1hOiBhbnkgPSB7fTtcbiAgICBpdGVtczogYW55ID0gW107XG4gICAgcm91dGVyczogYW55ID0gW107XG4gICAgY29uZmlnRGF0YUxhYmVsID0gJ0NvbmZpZ3VyYXRpb24gRm9ybSc7XG4gICAgYXR0YWNoTGFiZWwgPSAnQ3JlYXRlIGFuZCBBdHRhY2gnO1xuICAgIGVycm9yczogYW55ID0ge307XG4gICAgc2VsZWN0ZWRSb3V0ZXJJZDogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRSb3V0ZXI6IGFueTtcbiAgICBzZWxlY3RlZEJpbmRpbmdJZDogc3RyaW5nID0gJyc7XG4gICAgdGVybWluYXRvclByb3RvY29sID0gJ3VkcCc7XG4gICAgc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgYXNzb2NpYXRlZENvbmZpZ3M6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRDb25maWdzTWFwOiBhbnkgPSB7fTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvcnM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yTmFtZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcDogYW55ID0ge307XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPSAwO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXA6IGFueSA9IHt9O1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNUb3RhbCA9IDA7XG4gICAgYXNzb2NpYXRlZENvbmZpZ3NMb2FkaW5nID0gZmFsc2U7XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvcnNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBoZWFkZXJDb21wb25lbnRQYXJhbXMgPSB7XG4gICAgICAgIGZpbHRlclR5cGU6ICdURVhUSU5QVVQnLFxuICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlXG4gICAgfTtcblxuICAgIGxDb2xvckFycmF5ID0gW1xuICAgICAgICAnd2hpdGUnLFxuICAgICAgICAnd2hpdGUnLFxuICAgICAgICAnd2hpdGUnLFxuICAgIF1cblxuICAgIGJDb2xvckFycmF5ID0gW1xuICAgICAgICAndmFyKC0tZm9ybUJhc2UpJyxcbiAgICAgICAgJ3ZhcigtLWZvcm1Hcm91cCknLFxuICAgICAgICAndmFyKC0tZm9ybVN1Ykdyb3VwKSdcbiAgICBdXG5cbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIGNvbmZpZ0VkaXRvcjogQ29uZmlnRWRpdG9yQ29tcG9uZW50O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFKXByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzY2hlbWFTdmM6IFNjaGVtYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7fVxuXG4gICAgcmVzZXRGb3JtRGF0YSgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ05hbWUgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRDb25maWdzTWFwID0ge307XG4gICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRDb25maWdzID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIHRoaXMubmV3Q29uZmlnTmFtZSA9ICcnO1xuICAgIH1cblxuICAgIHNhdmUoZm9ybURhdGEpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRTZXJ2aWNlRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSk7XG4gICAgICAgIGxldCBwcm9tO1xuICAgICAgICBpZiAoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLnppdGlTZXJ2aWNlLnBhdGNoKCdzZXJ2aWNlcycsIGRhdGEsIGZvcm1EYXRhLmlkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ3NlcnZpY2VzJywgZGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbS50aGVuKGFzeW5jIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpc1VwZGF0ZSA/IGZvcm1EYXRhLmlkIDogKHJlc3VsdD8uZGF0YT8uaWQgfHwgcmVzdWx0Py5pZCk7XG4gICAgICAgICAgICBsZXQgc3ZjID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIGlkLCAnJykudGhlbigoc3ZjRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmNEYXRhLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dFNlcnZpY2UuZm9ybURhdGFTYXZlZChzdmMpLnRoZW4oKGZvcm1TYXZlZFJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtU2F2ZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN2YztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgYFNlcnZpY2VzICR7aXNVcGRhdGUgPyAnVXBkYXRlZCcgOiAnQ3JlYXRlZCd9YCxcbiAgICAgICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSAke2lzVXBkYXRlID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnfSBTZXJ2aWNlOiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN2YztcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAocmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbikge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbjtcbiAgICAgICAgICAgIH1lbHNlIGlmIChyZXNwPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5tZXNzYWdlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBTZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIHRocm93IHJlc3A7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcygpIHtcbiAgICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy56aXRpU2VydmljZS5ERUZBVUxUX1BBR0lORztcbiAgICAgICAgcGFnaW5nLnRvdGFsID0gNTtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAnc2VydmljZS1wb2xpY2llcycsIHBhZ2luZykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzVG90YWwgPSByZXN1bHQubWV0YT8ucGFnaW5hdGlvbi50b3RhbENvdW50IHx8IDA7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMubWFwKChwb2xpY3kpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXBbcG9saWN5Lm5hbWVdID0gcG9saWN5O1xuICAgICAgICAgICAgICAgIHBvbGljeS5ocmVmID0gJy9zZXJ2aWNlLXBvbGljaWVzLycgKyBwb2xpY3kuaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGljeS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzVG90YWwgPiA1KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJvbGVBdHRyaWJ1dGVzID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEucm9sZUF0dHJpYnV0ZXMpO1xuXG4gICAgICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcy5tYXAoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyUyMycgKyBhdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXMucHVzaCgnJTQwJyArIHRoaXMuZm9ybURhdGEuaWQpO1xuICAgICAgICAgICAgICAgIGxldCB1cmxQYXJhbSA9ICcnO1xuICAgICAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzLmZvckVhY2goKHBhcmFtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbSArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW0gKz0gcGFyYW1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hGaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbklkOiAnc2VydmljZVJvbGVzJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvbGVBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0AnICsgdGhpcy5mb3JtRGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lOiAnU2VydmljZSBBdHRyaWJ1dGVzJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FUVFJJQlVURSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWFyY2hfZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KFtzZWFyY2hGaWx0ZXJdKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdyBtb3JlIHJlc3VsdHMuLi4nLFxuICAgICAgICAgICAgICAgICAgICBocmVmOiAnL3NlcnZpY2UtcG9saWNpZXM/c2VydmljZVJvbGVzPScgKyB1cmxQYXJhbSxcbiAgICAgICAgICAgICAgICAgICAgbGlua0NsYXNzOiAncHJldmlldy1tb3JlLXJlc3VsdHMnLFxuICAgICAgICAgICAgICAgICAgICAvL2ljb25DbGFzczogJ2ljb24tb3BlbicsXG4gICAgICAgICAgICAgICAgICAgIHNraXBTb3J0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkVGVybWluYXRvcnMoKSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAndGVybWluYXRvcnMnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPSByZXN1bHQubWV0YT8ucGFnaW5hdGlvbi50b3RhbENvdW50IHx8IDA7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yTmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9ycy5tYXAoKHRlcm1pbmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcFt0ZXJtaW5hdG9yLmlkXSA9IHRlcm1pbmF0b3IuYmluZGluZyArICc6ICAgICAgJyArIHRlcm1pbmF0b3IuYWRkcmVzcztcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yLm5hbWUgPSB0ZXJtaW5hdG9yLnJvdXRlci5uYW1lICsgJzogICAgICAgJyArIHRlcm1pbmF0b3IuYWRkcmVzcztcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yLmhyZWYgPSAnL3Rlcm1pbmF0b3JzLycgKyB0ZXJtaW5hdG9yLmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXJtaW5hdG9yLmJpbmRpbmcgKyAnOiAgICAgICcgKyB0ZXJtaW5hdG9yLmFkZHJlc3M7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc1RvdGFsID4gNSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSWQ6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybURhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmZvcm1EYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck5hbWU6ICdTZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICAgICAgICAgICAgICAgIHZlcmI6ICc9J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlYXJjaF9maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoW3NlYXJjaEZpbHRlcl0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cgbW9yZSByZXN1bHRzLi4uJyxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogJy90ZXJtaW5hdG9ycz9zZXJ2aWNlPScgKyB0aGlzLmZvcm1EYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICBsaW5rQ2xhc3M6ICdwcmV2aWV3LW1vcmUtcmVzdWx0cycsXG4gICAgICAgICAgICAgICAgICAgIC8vaWNvbkNsYXNzOiAnaWNvbi1vcGVuJyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcFNvcnQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJldmlld0NvbmZpZyhjb25maWdOYW1lLCByb3V0ZXIpIHtcbiAgICAgICAgdGhpcy5zaG93Q2ZnUHJldmlld09wdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ29uZmlnID0gdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjb25maWdOYW1lXTtcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKFsnL2NvbmZpZ3MvJyArIHNlbGVjdGVkQ29uZmlnLmlkXSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcmV2aWV3UG9saWN5KHBvbGljeU5hbWUsIHJvdXRlcikge1xuICAgICAgICB0aGlzLnNob3dDZmdQcmV2aWV3T3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQb2xpY3kgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXBbcG9saWN5TmFtZV07XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy9zZXJ2aWNlLXBvbGljaWVzLycgKyBzZWxlY3RlZFBvbGljeS5pZF0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlld1Rlcm1pbmF0b3IocG9saWN5TmFtZSwgcm91dGVyKSB7XG4gICAgICAgIHRoaXMuc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFRlcm1pbmF0b3IgPSB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcFtwb2xpY3lOYW1lXTtcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKFsnL3Rlcm1pbmF0b3JzLycgKyBzZWxlY3RlZFRlcm1pbmF0b3IuaWRdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFkZFRlcm1pbmF0b3JzKHNlcnZpY2VJZCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLmFkZGVkVGVybWluYXRvcnMuZm9yRWFjaCgodGVybWluYXRvcikgPT4ge1xuICAgICAgICAgICAgdGVybWluYXRvci5zZXJ2aWNlID0gc2VydmljZUlkXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMueml0aVNlcnZpY2UucG9zdCgndGVybWluYXRvcnMnLCB0ZXJtaW5hdG9yKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNlcnZpY2VEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHNhdmVNb2RlbCA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IGtleXMoc2F2ZU1vZGVsKTtcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgIHN3aXRjaChwcm9wKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2F2ZU1vZGVsW3Byb3BdID0gZm9ybURhdGFbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2F2ZU1vZGVsO1xuICAgIH1cblxuICAgIGdldENvbmZpZ1R5cGVzKCkge1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlnLXR5cGVzJywgdGhpcy5wYWdpbmcsIFtdKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25maWdUeXBlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDb25maWdzKGZpbHRlcnMgPSBbXSwgcGFnZSA9IDEpIHtcbiAgICAgICAgdGhpcy5jb25maWdzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhZ2luZyA9IGNsb25lRGVlcCh0aGlzLnBhZ2luZyk7XG4gICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBhZ2luZy5ub1NlYXJjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlncycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jb25maWdUeXBlQ2hhbmdlZCgpO1xuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Um91dGVycygpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2VkZ2Utcm91dGVycycsIHRoaXMucGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVycyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkQ29uZmlncygpIHtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ2NvbmZpZ3MnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSB0aGlzLmFzc29jaWF0ZWRDb25maWdzLm1hcCgoY2ZnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjZmcubmFtZV0gPSBjZmc7XG4gICAgICAgICAgICAgICAgY2ZnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIGNmZy5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2ZnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29uZmlnKGNvbmZpZ0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdCgnY29uZmlncycsIGNvbmZpZ0RhdGEsIHRydWUpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHJlc3BvbnNlPy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBtc2cgPSByZXNwb25zZT8uZXJyb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1zZyA9IHJlc3BvbnNlPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5yZWFzb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBOZXcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlnVHlwZUNoYW5nZWQocmVzZXREYXRhPykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncyA9IHRoaXMuY29uZmlncy5maWx0ZXIoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5jb25maWdUeXBlSWQgPT09IHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQWRkIGEgTmV3IENvbmZpZycsXG4gICAgICAgICAgICAgICAgaWQ6ICdhZGQtbmV3J1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncyA9IFsuLi5kZWZhdWx0T3B0aW9ucywgLi4udGhpcy5maWx0ZXJlZENvbmZpZ3NdO1xuICAgICAgICB0aGlzLmNvbmZpZ1R5cGVzLmZvckVhY2goKGNvbmZpZ1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID09PSBjb25maWdUeXBlLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUgPSBjb25maWdUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAhaXNFbXB0eSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkKSA/ICdhZGQtbmV3JyA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZChyZXNldERhdGEpO1xuICAgIH1cblxuICAgIHVwZGF0ZWRBZGRlZENvbmZpZ3MoKSB7XG4gICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gW107XG4gICAgICAgIHRoaXMuY29uZmlncy5mb3JFYWNoKChhdmFpbGFibGVDb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNmZ0V4aXN0cyA9IHNvbWUodGhpcy5mb3JtRGF0YS5jb25maWdzLCBjb25maWdJZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUNvbmZpZy5pZCA9PSBjb25maWdJZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNmZ0V4aXN0cykge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUNvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBhdmFpbGFibGVDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChhdmFpbGFibGVDb25maWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gWy4uLnRoaXMuYWRkZWRDb25maWdzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0b2dnbGVKU09OVmlldygpIHtcbiAgICAgICAgdGhpcy5jb25maWdKc29uVmlldyA9ICF0aGlzLmNvbmZpZ0pzb25WaWV3O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGFMYWJlbCA9IHRoaXMuY29uZmlnSnNvblZpZXcgPyAnSlNPTiBDb25maWd1cmF0aW9uJyA6ICdDb25maWd1cmF0aW9uIEZvcm0nO1xuICAgICAgICBpZiAodGhpcy5jb25maWdKc29uVmlldykge1xuICAgICAgICAgICAgLy90aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGF0dGFjaENvbmZpZyhhZGRlZENvbmZpZ0lkKSB7XG4gICAgICAgIGxldCBjb25maWdJZDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ2FkZC1uZXcnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDb25maWcoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIFZhbGlkYXRpbmcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICAgICAgJ1RoZSBlbnRlcmVkIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gUGxlYXNlIHVwZGF0ZSBtaXNzaW5nL2ludmFsaWQgZmllbGRzIGFuZCB0cnkgYWdhaW4uJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgY29uZmlnVHlwZUlkOiB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkLFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29uZmlnRGF0YSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5ld0NvbmZpZ05hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0NvbmZpZy5kYXRhID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5yZWRlZmluZU9iamVjdChuZXdDb25maWcuZGF0YSk7XG4gICAgICAgICAgICBjb25maWdJZCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29uZmlnKG5ld0NvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmZyA9IHJlc3VsdD8uZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmlkID0gcmVzdWx0Py5pZCA/IHJlc3VsdC5pZCA6IHJlc3VsdD8uZGF0YT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBuZXdDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXBbbmV3Q29uZmlnLm5hbWVdID0ge2RhdGE6IG5ld0NvbmZpZy5kYXRhLCBuYW1lOiBuZXdDb25maWcubmFtZSwgY29uZmlnVHlwZUlkOiBuZXdDb25maWcuY29uZmlnVHlwZUlkfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yRmllbGQgPSByZXN1bHQ/LmVycm9yPy5lcnJvcj8uY2F1c2U/LmZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHkoZXJyb3JGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRXJyb3JzW2Vycm9yRmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSByZXN1bHQ/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBgRXJyb3IgQ3JlYXRpbmcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eShjb25maWdJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5wdXNoKGNvbmZpZ0lkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncy5wdXNoKG5ld0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBbLi4udGhpcy5hZGRlZENvbmZpZ3NdO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29uZmlncygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGBOZXcgQ29uZmlnIEF0dGFjaGVkYCxcbiAgICAgICAgICAgICAgICAgICAgYE5ldyBDb25maWcgJHt0aGlzLm5ld0NvbmZpZ05hbWV9IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDb25maWdOYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRWRpdG9yPy5nZXRDb25maWdEYXRhRnJvbUZvcm0oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29uZmlnQWRkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5mb3JFYWNoKChjb25maWdJZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdJZCA9PT0gYWRkZWRDb25maWdJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWdBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ0FkZGVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0NvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuaWQgPT09IGFkZGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChuZXdDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IFsuLi50aGlzLmFkZGVkQ29uZmlnc107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5wdXNoKGFkZGVkQ29uZmlnSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgJ0luZm8nLFxuICAgICAgICAgICAgICAgICAgICBgQ29uZmlnIEFscmVhZHkgQXR0YWNoZWRgLFxuICAgICAgICAgICAgICAgICAgICAnQ29uZmlnIGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQgdG8gdGhpcyBzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb25maWcoY29uZmlnVG9SZW1vdmUpIHtcbiAgICAgICAgaWYgKGNvbmZpZ1RvUmVtb3ZlLmlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWdzID0gZmlsdGVyKHRoaXMuZm9ybURhdGEuY29uZmlncywgY29uZmlnSWQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdJZCAhPT0gY29uZmlnVG9SZW1vdmUuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZ0l0ZW1zID0gZmlsdGVyKHRoaXMuYWRkZWRDb25maWdzLCAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5uYW1lICE9PSBjb25maWdUb1JlbW92ZS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmNvbmZpZ3MgPSBuZXdDb25maWdzO1xuICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBuZXdDb25maWdJdGVtcztcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09ICdwcmV2aWV3JyAmJiBjb25maWdUb1JlbW92ZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkQ29uZmlnTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNvbmZpZ0NoYW5nZWQocmVzZXREYXRhID0gdHJ1ZSkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSByZXNldERhdGEgPyB1bmRlZmluZWQgOiB0aGlzLmNvbmZpZ0RhdGE7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICBsZXQgYXR0YWNoTGFiZWwgPSAnQXR0YWNoIHRvIFNlcnZpY2UnO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSAncHJldmlldycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY2hlbWEgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnNjaGVtYSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZS5zY2hlbWEpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ2FkZC1uZXcnKSB7XG4gICAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2NoZW1hID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5zY2hlbWEodGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUuc2NoZW1hKTtcbiAgICAgICAgICAgIGF0dGFjaExhYmVsID0gJ0NyZWF0ZSBhbmQgQXR0YWNoJztcbiAgICAgICAgICAgIC8vdGhpcy5jcmVhdGVGb3JtKGR5bmFtaWNGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRDb25maWdzLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09IGNvbmZpZy5pZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGEgPSBzZWxlY3RlZENvbmZpZz8uZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vdGhpcy51cGRhdGVDb25maWdEYXRhKCk7XG4gICAgICAgIHRoaXMuYXR0YWNoTGFiZWwgPSBhdHRhY2hMYWJlbDtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5uYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5lcnJvcnMpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlQ29uZmlnKCkge1xuICAgICAgICB0aGlzLmNvbmZpZ0Vycm9ycyA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0VkaXRvcj8udmFsaWRhdGVDb25maWcoKTtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5uZXdDb25maWdOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdFcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5jb25maWdFcnJvcnMpO1xuICAgIH1cblxuICAgIF9hcGlEYXRhID0ge307XG4gICAgc2V0IGFwaURhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBnZXQgYXBpRGF0YSgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtRGF0YT8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzOiB0aGlzLmZvcm1EYXRhPy5yb2xlQXR0cmlidXRlcyB8fCBbXSxcbiAgICAgICAgICAgIGNvbmZpZ3M6IHRoaXMuZm9ybURhdGE/LmNvbmZpZ3MgfHwgW10sXG4gICAgICAgICAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRoaXMuZm9ybURhdGE/LmVuY3J5cHRpb25SZXF1aXJlZCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JTdHJhdGVneTogdGhpcy5mb3JtRGF0YT8udGVybWluYXRvclN0cmF0ZWd5IHx8ICcnLFxuICAgICAgICAgICAgdGFnczogdGhpcy5mb3JtRGF0YT8udGFncyB8fCB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIG9wZW5UZXJtaW5hdG9yRWRpdEZvcm0oaWQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd0ZXJtaW5hdG9yLycgKyBpZF0pXG4gICAgfVxuXG4gICAgc29ydChzb3J0QnksIG9yZGVyaW5nPSAnYXNjJykge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdG9yU29ydCA9IHtzb3J0QnksIG9yZGVyaW5nfTtcbiAgICAgICAgdGhpcy5nZXRBc3NvY2lhdGVkVGVybWluYXRvcnMoKTtcbiAgICB9XG5cbiAgICBoYXNTZWxlY3RlZFRleHQoKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ/Lmxlbmd0aCA+IDA7XG4gICAgfVxufSJdfQ==
|