application-sidebar 1.0.6 → 1.0.8
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/esm2022/lib/application-sidebar.component.mjs +107 -76
- package/esm2022/lib/constants.mjs +9 -1020
- package/esm2022/lib/nav-menus/nav-menus.component.mjs +41 -37
- package/esm2022/lib/navmenu1.mjs +1573 -0
- package/esm2022/lib/services/application-sidebar.service.mjs +230 -90
- package/esm2022/lib/services/rest-api.services.mjs +26 -29
- package/esm2022/lib/services/translation.service.mjs +46 -0
- package/esm2022/lib/translations/translations-en.mjs +89 -33
- package/esm2022/lib/translations/translations-ja.mjs +89 -33
- package/fesm2022/application-sidebar.mjs +614 -1302
- package/fesm2022/application-sidebar.mjs.map +1 -1
- package/lib/application-sidebar.component.d.ts +11 -5
- package/lib/constants.d.ts +8 -497
- package/lib/nav-menus/nav-menus.component.d.ts +5 -2
- package/lib/navmenu1.d.ts +936 -0
- package/lib/services/application-sidebar.service.d.ts +15 -5
- package/lib/services/rest-api.services.d.ts +7 -10
- package/lib/services/translation.service.d.ts +12 -0
- package/lib/translations/translations-en.d.ts +88 -32
- package/lib/translations/translations-ja.d.ts +88 -32
- package/package.json +1 -1
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { MENULIST } from '../constants';
|
|
3
|
-
import { GLOBAL_SETTING_LIST } from '../constants';
|
|
4
2
|
import { RestApiService } from './rest-api.services';
|
|
5
3
|
import { ActivatedRoute } from '@angular/router';
|
|
6
4
|
import { UrlContextService } from './url-context.service';
|
|
5
|
+
import { TranslationService } from './translation.service';
|
|
7
6
|
import * as i0 from "@angular/core";
|
|
8
7
|
import * as i1 from "./rest-api.services";
|
|
9
8
|
import * as i2 from "@angular/router";
|
|
10
|
-
import * as i3 from "./
|
|
9
|
+
import * as i3 from "./translation.service";
|
|
10
|
+
import * as i4 from "./url-context.service";
|
|
11
11
|
export class ApplicationSidebarService {
|
|
12
12
|
RestApiService;
|
|
13
13
|
activatedRoute;
|
|
14
|
+
translate;
|
|
14
15
|
urlContextService;
|
|
15
|
-
conditions = ['org_user_ctrl', 'visibility_roles', 'visibility_roles_not_in', 'account_ids', 'organization_ids', 'organization_ids_not_in', 'account_type', 'account_ids_not_in', 'organization_setting', 'organization_setting_not_in', 'campaign_types', 'incontext_campaign_targeting', 'incontext_campaign_targeting_walmart', 'subscription_types', 'siteIds', 'siteNotIds', 'not_account_type', 'not_account_name', 'disable_readonly_org', 'user_emails', 'app_org_setting'];
|
|
16
|
+
conditions = ['org_user_ctrl', 'visibility_roles', 'visibility_roles_not_in', 'account_ids', 'customer_types_not_in', 'customer_types', 'organization_ids', 'organization_ids_not_in', 'account_type', 'account_ids_not_in', 'organization_setting', 'organization_setting_not_in', 'campaign_types', 'incontext_campaign_targeting', 'incontext_campaign_targeting_walmart', 'subscription_types', 'siteIds', 'siteNotIds', 'not_account_type', 'not_account_name', 'disable_readonly_org', 'user_emails', 'app_org_setting', 'app_org_setting_not_in', 'ng_app_setting', 'ng_app_setting_not_in', 'targetting_types', 'targetting_types_not_in'];
|
|
16
17
|
MenuList = [];
|
|
17
|
-
applicationIds = [
|
|
18
|
+
applicationIds = [];
|
|
18
19
|
enableAllMenusByOrg = [30780];
|
|
19
20
|
appDetails;
|
|
20
21
|
isStructureApiSupport;
|
|
21
22
|
SettingsMenuList;
|
|
22
23
|
appNames;
|
|
24
|
+
menulists;
|
|
23
25
|
contentAppRoutes = ['content-insight', 'content-analytics', 'content', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
|
|
24
26
|
sovAppRoutes = ['insights', 'share-of-voice', 'sov', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
|
|
25
27
|
sellerAnalyticsAppRoutes = ['seller/insights', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
|
|
@@ -46,9 +48,10 @@ export class ApplicationSidebarService {
|
|
|
46
48
|
'COMPETITOR_PRODUCT': true,
|
|
47
49
|
'SPONSORED_BRAND_KEYWORD': true
|
|
48
50
|
};
|
|
49
|
-
constructor(RestApiService, activatedRoute, urlContextService) {
|
|
51
|
+
constructor(RestApiService, activatedRoute, translate, urlContextService) {
|
|
50
52
|
this.RestApiService = RestApiService;
|
|
51
53
|
this.activatedRoute = activatedRoute;
|
|
54
|
+
this.translate = translate;
|
|
52
55
|
this.urlContextService = urlContextService;
|
|
53
56
|
}
|
|
54
57
|
getTypeStatusConfigs() {
|
|
@@ -73,11 +76,22 @@ export class ApplicationSidebarService {
|
|
|
73
76
|
}
|
|
74
77
|
return menuItems;
|
|
75
78
|
}
|
|
76
|
-
getMenuList(appDetails) {
|
|
79
|
+
getMenuList(appDetails, menulists) {
|
|
77
80
|
this.appDetails = appDetails;
|
|
78
81
|
this.MenuList = [];
|
|
79
|
-
let appendChildMenus
|
|
80
|
-
|
|
82
|
+
//let appendChildMenus = this.constructChildMenus(this.menulists);
|
|
83
|
+
menulists.forEach((menu) => {
|
|
84
|
+
menu.name = this.translate.translateName(menu.name);
|
|
85
|
+
menu.children && menu.children.forEach((childMenu) => {
|
|
86
|
+
childMenu.name = this.translate.translateName(childMenu.name);
|
|
87
|
+
childMenu.children && childMenu.children.forEach((child) => {
|
|
88
|
+
child.name = this.translate.translateName(child.name);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
this.menulists = menulists.filter(list => list.id !== 'app_global_settings');
|
|
93
|
+
let sortedMenulists = this.menulists.sort((a, b) => (a.order > b.order) ? 1 : -1);
|
|
94
|
+
this.applicationIds = sortedMenulists.map((appId) => appId.id);
|
|
81
95
|
this.appNames = this.applicationIds;
|
|
82
96
|
if ((this.appDetails.currentOrganization.organizationId === 10390 ||
|
|
83
97
|
this.appDetails.currentOrganization.organizationId === 10530) &&
|
|
@@ -86,7 +100,7 @@ export class ApplicationSidebarService {
|
|
|
86
100
|
return (name != 'ads_amazon_content_share_of_voice' && name != 'ads_amazon_content_content_analytics');
|
|
87
101
|
});
|
|
88
102
|
}
|
|
89
|
-
for (let appName of
|
|
103
|
+
for (let appName of sortedMenulists) {
|
|
90
104
|
if (this.appNames.indexOf(appName.id) >= 0) {
|
|
91
105
|
let list = this.getApplicationMenuItem(appName);
|
|
92
106
|
if (list && list.children != undefined) {
|
|
@@ -122,7 +136,7 @@ export class ApplicationSidebarService {
|
|
|
122
136
|
let allKeys = Object.keys(currentMenuItem);
|
|
123
137
|
const hasConditionstoCheck = this.conditions.some(condition => allKeys.includes(condition));
|
|
124
138
|
if (hasConditionstoCheck) {
|
|
125
|
-
let isMenuAllowed = this.checkAllConditions(currentMenuItem, allKeys);
|
|
139
|
+
let isMenuAllowed = this.checkAllConditions(currentMenuItem, this.conditions, allKeys);
|
|
126
140
|
if (isMenuAllowed) {
|
|
127
141
|
menuItem = currentMenuItem;
|
|
128
142
|
}
|
|
@@ -138,7 +152,7 @@ export class ApplicationSidebarService {
|
|
|
138
152
|
else {
|
|
139
153
|
let allKeys = Object.keys(currentMenuItem);
|
|
140
154
|
const hasConditionstoCheck = this.conditions.some(condition => allKeys.includes(condition));
|
|
141
|
-
if (!hasConditionstoCheck || (hasConditionstoCheck && this.checkAllConditions(currentMenuItem, allKeys))) {
|
|
155
|
+
if (!hasConditionstoCheck || (hasConditionstoCheck && this.checkAllConditions(currentMenuItem, this.conditions, allKeys))) {
|
|
142
156
|
Object.keys(currentMenuItem).forEach((key) => {
|
|
143
157
|
if (typeof currentMenuItem[key] != "object") {
|
|
144
158
|
menuItem[key] = currentMenuItem[key];
|
|
@@ -165,10 +179,11 @@ export class ApplicationSidebarService {
|
|
|
165
179
|
}
|
|
166
180
|
return menuItem;
|
|
167
181
|
}
|
|
168
|
-
getGlobalSettingsMenu(appDetails) {
|
|
182
|
+
getGlobalSettingsMenu(appDetails, menulists) {
|
|
169
183
|
this.appDetails = appDetails;
|
|
170
184
|
this.SettingsMenuList = [];
|
|
171
|
-
let
|
|
185
|
+
let globalSettingMenus = menulists.filter(list => list.id == 'app_global_settings');
|
|
186
|
+
let GLOBAL_SETTING_LIST_SORTED = globalSettingMenus.sort((a, b) => (a.order > b.order) ? 1 : -1);
|
|
172
187
|
for (let appName of GLOBAL_SETTING_LIST_SORTED) {
|
|
173
188
|
if (appName.type == 'expandable') {
|
|
174
189
|
let list = this.getApplicationMenuItem(appName);
|
|
@@ -185,9 +200,10 @@ export class ApplicationSidebarService {
|
|
|
185
200
|
}
|
|
186
201
|
return this.SettingsMenuList;
|
|
187
202
|
}
|
|
188
|
-
checkAllConditions(currentMenuItem, allKeys) {
|
|
203
|
+
checkAllConditions(currentMenuItem, conditions, allKeys) {
|
|
189
204
|
let includeMenu = false;
|
|
190
|
-
if ((!this.appDetails.currentAccount && currentMenuItem.id == "ads_overview" &&
|
|
205
|
+
if ((!this.appDetails.currentAccount && currentMenuItem.id == "ads_overview" &&
|
|
206
|
+
!this.appDetails.currentOrganization['noActiveAccounts'])) {
|
|
191
207
|
return true;
|
|
192
208
|
}
|
|
193
209
|
else if (currentMenuItem.id === "ads_signup_overview") {
|
|
@@ -198,7 +214,7 @@ export class ApplicationSidebarService {
|
|
|
198
214
|
return false;
|
|
199
215
|
}
|
|
200
216
|
}
|
|
201
|
-
for (let cond of
|
|
217
|
+
for (let cond of conditions) {
|
|
202
218
|
if (currentMenuItem[cond] != undefined) {
|
|
203
219
|
switch (cond) {
|
|
204
220
|
case 'visibility_roles': {
|
|
@@ -260,17 +276,23 @@ export class ApplicationSidebarService {
|
|
|
260
276
|
break;
|
|
261
277
|
}
|
|
262
278
|
case 'not_account_name': {
|
|
263
|
-
|
|
279
|
+
if (this.appDetails.currentAccount) {
|
|
280
|
+
includeMenu = this.checkForNotAccName(currentMenuItem[cond]);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
includeMenu = false;
|
|
284
|
+
}
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case 'account_type': {
|
|
288
|
+
if (this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
|
|
289
|
+
includeMenu = this.checkForAccType(currentMenuItem);
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
includeMenu = false;
|
|
293
|
+
}
|
|
264
294
|
break;
|
|
265
295
|
}
|
|
266
|
-
// case 'account_type' : {
|
|
267
|
-
// if(this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
|
|
268
|
-
// includeMenu = this.checkForAccType(currentMenuItem);
|
|
269
|
-
// } else {
|
|
270
|
-
// includeMenu = false;
|
|
271
|
-
// }
|
|
272
|
-
// break;
|
|
273
|
-
// }
|
|
274
296
|
case 'organization_setting': {
|
|
275
297
|
includeMenu = this.checkForOrgSettings(currentMenuItem[cond]);
|
|
276
298
|
break;
|
|
@@ -279,6 +301,10 @@ export class ApplicationSidebarService {
|
|
|
279
301
|
includeMenu = this.checkForOrgAppSettings(currentMenuItem[cond]);
|
|
280
302
|
break;
|
|
281
303
|
}
|
|
304
|
+
case 'app_org_setting_not_in': {
|
|
305
|
+
includeMenu = this.checkForOrgAppSettingsNotIn(currentMenuItem[cond]);
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
282
308
|
case 'organization_setting_not_in': {
|
|
283
309
|
includeMenu = this.checkForNotOrgSettings(currentMenuItem[cond]);
|
|
284
310
|
break;
|
|
@@ -291,22 +317,25 @@ export class ApplicationSidebarService {
|
|
|
291
317
|
includeMenu = this.checkForSiteNotIds(currentMenuItem[cond]);
|
|
292
318
|
break;
|
|
293
319
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
320
|
+
case 'subscription_types': {
|
|
321
|
+
if (currentMenuItem['account_type'] == undefined) {
|
|
322
|
+
if (this.appDetails.currentAccount && this.appDetails.currentAccount.subscription) {
|
|
323
|
+
includeMenu = this.checkForSubscriptions(currentMenuItem[cond]);
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
includeMenu = false;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
if (this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
|
|
331
|
+
includeMenu = this.checkForAccType(currentMenuItem);
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
includeMenu = false;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
310
339
|
case 'campaign_types': {
|
|
311
340
|
if (this.appDetails.campaignInContext) {
|
|
312
341
|
includeMenu = this.checkForCampaignType(currentMenuItem[cond]);
|
|
@@ -316,6 +345,24 @@ export class ApplicationSidebarService {
|
|
|
316
345
|
}
|
|
317
346
|
break;
|
|
318
347
|
}
|
|
348
|
+
case 'targetting_types': {
|
|
349
|
+
if (this.appDetails.campaignInContext) {
|
|
350
|
+
includeMenu = this.checkForTargettingType(currentMenuItem[cond]);
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
includeMenu = true;
|
|
354
|
+
}
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
case 'targetting_types_not_in': {
|
|
358
|
+
if (this.appDetails.campaignInContext) {
|
|
359
|
+
includeMenu = this.checkForNotTargettingType(currentMenuItem[cond]);
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
includeMenu = true;
|
|
363
|
+
}
|
|
364
|
+
break;
|
|
365
|
+
}
|
|
319
366
|
case 'incontext_campaign_targeting': {
|
|
320
367
|
if (this.appDetails.campaignInContext) {
|
|
321
368
|
includeMenu = this.checkForCampaignTargeting(currentMenuItem[cond]);
|
|
@@ -338,6 +385,24 @@ export class ApplicationSidebarService {
|
|
|
338
385
|
includeMenu = this.authenticateUserMailMenu(currentMenuItem[cond]);
|
|
339
386
|
break;
|
|
340
387
|
}
|
|
388
|
+
case 'ng_app_setting': {
|
|
389
|
+
if (!this.appDetails.campaignInContext) {
|
|
390
|
+
includeMenu = this.checkContextSettings(currentMenuItem[cond]);
|
|
391
|
+
}
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
case 'ng_app_setting_not_in': {
|
|
395
|
+
includeMenu = this.checkContextSettingNotIn(currentMenuItem[cond]);
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
case 'customer_types': {
|
|
399
|
+
includeMenu = this.checkCustomerTypeIn(currentMenuItem[cond]);
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
case 'customer_types_not_in': {
|
|
403
|
+
includeMenu = this.checkCustomerTypeNotIn(currentMenuItem[cond]);
|
|
404
|
+
break;
|
|
405
|
+
}
|
|
341
406
|
// default: {
|
|
342
407
|
// //statements;
|
|
343
408
|
// break;
|
|
@@ -369,6 +434,20 @@ export class ApplicationSidebarService {
|
|
|
369
434
|
return false;
|
|
370
435
|
}
|
|
371
436
|
}
|
|
437
|
+
checkForTargettingType(possibleValues) {
|
|
438
|
+
var allow = false;
|
|
439
|
+
if (this.appDetails.campaignInContext && possibleValues.indexOf(this.appDetails.campaignInContext[0].targetingType) >= 0) {
|
|
440
|
+
allow = true;
|
|
441
|
+
}
|
|
442
|
+
return allow;
|
|
443
|
+
}
|
|
444
|
+
checkForNotTargettingType(possibleValues) {
|
|
445
|
+
var allow = true;
|
|
446
|
+
if (this.appDetails.campaignInContext && possibleValues.indexOf(this.appDetails.campaignInContext[0].targetingType) >= 0) {
|
|
447
|
+
allow = false;
|
|
448
|
+
}
|
|
449
|
+
return allow;
|
|
450
|
+
}
|
|
372
451
|
checkForCampaignTargeting(possibleValues) {
|
|
373
452
|
if (this.appDetails.campaignInContext && possibleValues.indexOf(this.appDetails.campaignInContext[0].campaignTargeting) >= 0) {
|
|
374
453
|
return true;
|
|
@@ -397,7 +476,7 @@ export class ApplicationSidebarService {
|
|
|
397
476
|
return false;
|
|
398
477
|
}
|
|
399
478
|
checkForSiteIds(possibleValues) {
|
|
400
|
-
if (this.appDetails.sidebarInfo && this.appDetails.sidebarInfo.siteId && possibleValues.
|
|
479
|
+
if (this.appDetails.sidebarInfo && this.appDetails.sidebarInfo.siteId && possibleValues.includes(Number(this.appDetails.sidebarInfo.siteId))) {
|
|
401
480
|
return true;
|
|
402
481
|
}
|
|
403
482
|
else {
|
|
@@ -405,7 +484,7 @@ export class ApplicationSidebarService {
|
|
|
405
484
|
}
|
|
406
485
|
}
|
|
407
486
|
checkForSiteNotIds(possibleValues) {
|
|
408
|
-
if (this.appDetails.sidebarInfo && this.appDetails.sidebarInfo.siteId && possibleValues.includes(this.appDetails.sidebarInfo.siteId)) {
|
|
487
|
+
if (this.appDetails.sidebarInfo && this.appDetails.sidebarInfo.siteId && possibleValues.includes(Number(this.appDetails.sidebarInfo.siteId))) {
|
|
409
488
|
return false;
|
|
410
489
|
}
|
|
411
490
|
else {
|
|
@@ -413,16 +492,23 @@ export class ApplicationSidebarService {
|
|
|
413
492
|
}
|
|
414
493
|
}
|
|
415
494
|
checkForOrgSettings(possibleValues) {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
495
|
+
try {
|
|
496
|
+
var allow = false;
|
|
497
|
+
if (this.appDetails.orgSettings && this.appDetails.orgSettings.length > 0) {
|
|
498
|
+
allow = this.appDetails.orgSettings.some(function (orgSetting) {
|
|
499
|
+
if (!orgSetting.value || orgSetting.value && orgSetting.value == 'ACTIVE') {
|
|
500
|
+
return possibleValues.includes(orgSetting.setting);
|
|
501
|
+
}
|
|
502
|
+
;
|
|
503
|
+
});
|
|
504
|
+
return allow;
|
|
505
|
+
}
|
|
506
|
+
else {
|
|
507
|
+
return allow;
|
|
421
508
|
}
|
|
422
|
-
return false;
|
|
423
509
|
}
|
|
424
|
-
|
|
425
|
-
|
|
510
|
+
catch (error) {
|
|
511
|
+
console.error(error);
|
|
426
512
|
}
|
|
427
513
|
}
|
|
428
514
|
checkForOrgAppSettings(possibleValues) {
|
|
@@ -438,22 +524,76 @@ export class ApplicationSidebarService {
|
|
|
438
524
|
return false;
|
|
439
525
|
}
|
|
440
526
|
}
|
|
527
|
+
checkForOrgAppSettingsNotIn(possibleValues) {
|
|
528
|
+
try {
|
|
529
|
+
var allow = true;
|
|
530
|
+
if (this.appDetails.orgAppSettings && this.appDetails.orgAppSettings.length > 0) {
|
|
531
|
+
allow = this.appDetails.orgAppSettings.some((orgAppSetting) => {
|
|
532
|
+
return (!possibleValues.includes(orgAppSetting.type) ||
|
|
533
|
+
(possibleValues.includes(orgAppSetting.type) &&
|
|
534
|
+
orgAppSetting.status && orgAppSetting.status == 'IN_ACTIVE'));
|
|
535
|
+
});
|
|
536
|
+
return allow;
|
|
537
|
+
}
|
|
538
|
+
else {
|
|
539
|
+
return allow;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
catch (error) {
|
|
543
|
+
console.error(error);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
checkCustomerTypeIn(possibleValues) {
|
|
547
|
+
if (this.appDetails.currentOrganization.customerType &&
|
|
548
|
+
possibleValues.includes(this.appDetails.currentOrganization.customerType)) {
|
|
549
|
+
return true;
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
return false;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
checkCustomerTypeNotIn(possibleValues) {
|
|
556
|
+
if (!this.appDetails.currentOrganization.customerType || (this.appDetails.currentOrganization.customerType &&
|
|
557
|
+
!possibleValues.includes(this.appDetails.currentOrganization.customerType))) {
|
|
558
|
+
return true;
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
return false;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
441
564
|
checkForNotOrgSettings(possibleValues) {
|
|
442
565
|
let allow = true;
|
|
443
|
-
const role = ['SUPER_ADMIN', 'SUPER_ADMIN_READ_ONLY'];
|
|
444
|
-
const isAdminRole = role.indexOf(this.appDetails.userInfo.role) > -1 ? true : false;
|
|
445
566
|
if (this.appDetails.orgSettings && this.appDetails.orgSettings.length > 0) {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
567
|
+
allow = this.appDetails.orgSettings.some(function (orgSetting) {
|
|
568
|
+
return (!possibleValues.includes(orgSetting.setting) ||
|
|
569
|
+
(possibleValues.includes(orgSetting.setting) &&
|
|
570
|
+
orgSetting.value && orgSetting.value == 'IN_ACTIVE'));
|
|
571
|
+
});
|
|
451
572
|
return allow;
|
|
452
573
|
}
|
|
453
574
|
else {
|
|
454
575
|
return allow;
|
|
455
576
|
}
|
|
456
577
|
}
|
|
578
|
+
checkContextSettings(possibleValues) {
|
|
579
|
+
var allow = false;
|
|
580
|
+
if (this.appDetails.ngOrgSettings) {
|
|
581
|
+
for (let item of possibleValues) {
|
|
582
|
+
allow = this.appDetails.ngOrgSettings[item];
|
|
583
|
+
allow = allow == undefined ? true : allow;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
return allow;
|
|
587
|
+
}
|
|
588
|
+
checkContextSettingNotIn(possibleValues) {
|
|
589
|
+
var allow = true;
|
|
590
|
+
if (this.appDetails.ngOrgSettings) {
|
|
591
|
+
for (let item of possibleValues) {
|
|
592
|
+
allow = !this.appDetails.ngOrgSettings[item];
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
return allow;
|
|
596
|
+
}
|
|
457
597
|
checkForAccType(menuItem) {
|
|
458
598
|
if (menuItem['account_type'].indexOf(this.appDetails.currentAccount.type) >= 0) {
|
|
459
599
|
return true;
|
|
@@ -492,28 +632,17 @@ export class ApplicationSidebarService {
|
|
|
492
632
|
}
|
|
493
633
|
}
|
|
494
634
|
checkForOrgWithUserRole(possibleValues, currentMenuItem, id) {
|
|
635
|
+
let allow = true;
|
|
495
636
|
if (possibleValues && possibleValues.length > 0) {
|
|
637
|
+
var flagArray = [];
|
|
496
638
|
for (let item of possibleValues) {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
return true;
|
|
501
|
-
}
|
|
502
|
-
else {
|
|
503
|
-
return false;
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
else if (item.organization_setting) {
|
|
507
|
-
if ((this.checkForOrgSettings(item.organization_setting) && item.visibilityroles.includes(this.appDetails.userInfo.role)) ||
|
|
508
|
-
item.visibility_sa_roles.includes(this.appDetails.userInfo.role)) {
|
|
509
|
-
return true;
|
|
510
|
-
}
|
|
511
|
-
else {
|
|
512
|
-
return false;
|
|
513
|
-
}
|
|
514
|
-
}
|
|
639
|
+
var allKeys = Object.keys(item);
|
|
640
|
+
var flag = this.checkAllConditions(item, allKeys, allKeys);
|
|
641
|
+
flagArray.push(flag);
|
|
515
642
|
}
|
|
643
|
+
allow = flagArray.includes(true) ? true : false;
|
|
516
644
|
}
|
|
645
|
+
return allow;
|
|
517
646
|
}
|
|
518
647
|
checkForSpecifiedIdsNotIn(possibleValues, currentMenuItem, id) {
|
|
519
648
|
return possibleValues.indexOf(id) < 0;
|
|
@@ -522,20 +651,26 @@ export class ApplicationSidebarService {
|
|
|
522
651
|
return possibleValues.indexOf(id) < 0;
|
|
523
652
|
}
|
|
524
653
|
checkForRoles(possibleValues) {
|
|
525
|
-
if (possibleValues.
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
654
|
+
if (possibleValues && possibleValues.length > 0) {
|
|
655
|
+
if (possibleValues.indexOf(this.appDetails.userInfo.role) >= 0) {
|
|
656
|
+
return true;
|
|
657
|
+
}
|
|
658
|
+
else {
|
|
659
|
+
return false;
|
|
660
|
+
}
|
|
530
661
|
}
|
|
662
|
+
return true;
|
|
531
663
|
}
|
|
532
664
|
checkForvisibilityRolesNotIn(possibleValues) {
|
|
533
|
-
if (possibleValues.
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
665
|
+
if (possibleValues && possibleValues.length > 0) {
|
|
666
|
+
if (possibleValues.indexOf(this.appDetails.userInfo.role) >= 0) {
|
|
667
|
+
return false;
|
|
668
|
+
}
|
|
669
|
+
else {
|
|
670
|
+
return true;
|
|
671
|
+
}
|
|
538
672
|
}
|
|
673
|
+
return true;
|
|
539
674
|
}
|
|
540
675
|
disableForOrgwithReadOnly(possibleValues) {
|
|
541
676
|
if (this.appDetails.userInfo.role === 'READ_ONLY' && possibleValues.indexOf(this.appDetails.currentAccount.organizationId) >= 0) {
|
|
@@ -551,6 +686,11 @@ export class ApplicationSidebarService {
|
|
|
551
686
|
if (applicationId) {
|
|
552
687
|
params = { ...params, ...applicationId };
|
|
553
688
|
}
|
|
689
|
+
if (route.indexOf('?') > -1 && route.indexOf('usermgmt') > -1) {
|
|
690
|
+
route = route.split('?')[0];
|
|
691
|
+
let newQParam = { usermgmt: true };
|
|
692
|
+
params = { ...params, ...newQParam };
|
|
693
|
+
}
|
|
554
694
|
let urlToNavigate = this.urlContextService.prepareUrlWithQueryParams(route, params);
|
|
555
695
|
urlToNavigate = `${window.location.origin}/${urlToNavigate}`;
|
|
556
696
|
// urlToNavigate = `http://localhost:3000/${urlToNavigate}`
|
|
@@ -627,7 +767,7 @@ export class ApplicationSidebarService {
|
|
|
627
767
|
return "ads_amazon_content_share_of_voice";
|
|
628
768
|
}
|
|
629
769
|
}
|
|
630
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, deps: [{ token: i1.RestApiService }, { token: i2.ActivatedRoute }, { token: i3.UrlContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
770
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, deps: [{ token: i1.RestApiService }, { token: i2.ActivatedRoute }, { token: i3.TranslationService }, { token: i4.UrlContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
631
771
|
/** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, providedIn: 'root' });
|
|
632
772
|
}
|
|
633
773
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, decorators: [{
|
|
@@ -635,5 +775,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
635
775
|
args: [{
|
|
636
776
|
providedIn: 'root'
|
|
637
777
|
}]
|
|
638
|
-
}], ctorParameters: function () { return [{ type: i1.RestApiService }, { type: i2.ActivatedRoute }, { type: i3.UrlContextService }]; } });
|
|
639
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL3NlcnZpY2VzL2FwcGxpY2F0aW9uLXNpZGViYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7O0FBTzFELE1BQU0sT0FBTyx5QkFBeUI7SUE0QzVCO0lBQ0E7SUFDQTtJQTVDVCxVQUFVLEdBQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUcseUJBQXlCLEVBQUcsYUFBYSxFQUFHLGtCQUFrQixFQUFFLHlCQUF5QixFQUFDLGNBQWMsRUFBRyxvQkFBb0IsRUFBQyxzQkFBc0IsRUFBRyw2QkFBNkIsRUFBQyxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRyxvQkFBb0IsRUFBRSxTQUFTLEVBQUMsWUFBWSxFQUFDLGtCQUFrQixFQUFDLGtCQUFrQixFQUFDLHNCQUFzQixFQUFDLGFBQWEsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BkLFFBQVEsR0FBTSxFQUFFLENBQUM7SUFFakIsY0FBYyxHQUFLLENBQUMsd0JBQXdCLEVBQUMsa0JBQWtCLEVBQUMsa0JBQWtCLEVBQUMsbUNBQW1DLEVBQUMsc0NBQXNDLEVBQUMsZ0JBQWdCLEVBQUMsd0JBQXdCLEVBQUUsZUFBZSxF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bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUVOVUxJU1QgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgR0xPQkFMX1NFVFRJTkdfTElTVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4vcmVzdC1hcGkuc2VydmljZXMnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVcmxDb250ZXh0U2VydmljZSB9IGZyb20gJy4vdXJsLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBFTl9MQUJFTFMgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLWVuJztcbmltcG9ydCB7IEpBX0xBQkVMUyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMtamEnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlIHtcblxuXHRjb25kaXRpb25zIFx0XHRcdD0gWydvcmdfdXNlcl9jdHJsJywgJ3Zpc2liaWxpdHlfcm9sZXMnICwgJ3Zpc2liaWxpdHlfcm9sZXNfbm90X2luJyAsICdhY2NvdW50X2lkcycgLCAnb3JnYW5pemF0aW9uX2lkcycsICdvcmdhbml6YXRpb25faWRzX25vdF9pbicsJ2FjY291bnRfdHlwZScgLCAnYWNjb3VudF9pZHNfbm90X2luJywnb3JnYW5pemF0aW9uX3NldHRpbmcnICwgJ29yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbicsJ2NhbXBhaWduX3R5cGVzJywgJ2luY29udGV4dF9jYW1wYWlnbl90YXJnZXRpbmcnLCAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0JyAsICdzdWJzY3JpcHRpb25fdHlwZXMnICwnc2l0ZUlkcycsJ3NpdGVOb3RJZHMnLCdub3RfYWNjb3VudF90eXBlJywnbm90X2FjY291bnRfbmFtZScsJ2Rpc2FibGVfcmVhZG9ubHlfb3JnJywndXNlcl9lbWFpbHMnLCdhcHBfb3JnX3NldHRpbmcnXTtcblx0TWVudUxpc3QgXHRcdFx0PSBbXTtcblxuXHRhcHBsaWNhdGlvbklkcyBcdFx0PSBbJ2Fkc19hbWF6b25fYWR2ZXJ0aXNpbmcnLCdhZHNfc2VsbGVyX3NhbGVzJywnYWRzX3ZlbmRvcl9zYWxlcycsJ2Fkc19hbWF6b25fY29udGVudF9zaGFyZV9vZl92b2ljZScsJ2Fkc19hbWF6b25fY29udGVudF9jb250ZW50X2FuYWx5dGljcycsJ2Fkc19hbWF6b25fZHNwJywnYWRzX2FtYXpvbl9hdHRyaWJ1dGlvbicsICdhZHNfaW5zdGFjYXJ0JywnYWRzX2NyaXRlbycsJ2Fkc193YWxtYXJ0JywnYWRzX2RhdGFfcGxhdGZvcm0nLCdhbWMtcGxhdGZvcm0td2ViJywnYWRzX2FtYXpvbl9zZWxsZXJfc2VsbGVyX2FuYWx5dGljcycsJ2Fkc19hbWF6b25fc2VsbGVyX3ZlbmRvcl9hbmFseXRpY3MnXTtcblx0ZW5hYmxlQWxsTWVudXNCeU9yZyA9IFszMDc4MF1cblx0XG5cdGFwcERldGFpbHM6XHRhbnk7XG5cdGlzU3RydWN0dXJlQXBpU3VwcG9ydDpcdGFueTtcblx0U2V0dGluZ3NNZW51TGlzdDogYW55W107XG5cdGFwcE5hbWVzOiBzdHJpbmdbXTtcblxuXHRjb250ZW50QXBwUm91dGVzPVsnY29udGVudC1pbnNpZ2h0JywnY29udGVudC1hbmFseXRpY3MnLCdjb250ZW50JywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncyddXG5cdHNvdkFwcFJvdXRlcz1bJ2luc2lnaHRzJywnc2hhcmUtb2Ytdm9pY2UnLCdzb3YnLCdwcm9kdWN0LW1ldGEtZGF0YScsJ2JyYW5kLXRlcm1zLXNldHRpbmdzJywnbGFiZWxzLXNldHRpbmdzJywnc3ViLWJyYW5kcycsJ3N1Yi1icmFuZHMtbWFwcGluZycsJ3Nvdi1zZXR0aW5ncycgLCdjb250ZW50LXNldHRpbmdzJ11cblx0c2VsbGVyQW5hbHl0aWNzQXBwUm91dGVzPVsnc2VsbGVyL2luc2lnaHRzJywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncyddXG5cdHZlbmRvckFuYWx5dGljc0FwcFJvdXRlcz1bJ3ZlbmRvci9pbnNpZ2h0cycsJ3Byb2R1Y3QtbWV0YS1kYXRhJywnYnJhbmQtdGVybXMtc2V0dGluZ3MnLCdsYWJlbHMtc2V0dGluZ3MnLCdzdWItYnJhbmRzJywnc3ViLWJyYW5kcy1tYXBwaW5nJywnc292LXNldHRpbmdzJyAsJ2NvbnRlbnQtc2V0dGluZ3MnXVxuXHRcblx0dHlwZVN0YXR1c0NvbmZpZ3MgPSB7XG4gICAgICAgICdTUE9OU09SRURfS0VZV09SRF9CSURTJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfUFJPRFVDVF9NQU5VQUxfVEFSR0VUSU5HX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9QUk9EVUNUX0FVVE9fVEFSR0VUSU5HX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9LRVlXT1JEX0FVVE8nIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9LRVlXT1JEJyA6IHRydWUsXG4gICAgICAgICdTUF9LRVlXT1JEU19CSURfR0FQJyA6IGZhbHNlLFxuICAgICAgICAnU1BfUExBQ0VNRU5UX0JJRCcgOiBmYWxzZSxcbiAgICAgICAgJ1NQX1RBUkdFVElOR19UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ1NQX01BVENIX1RZUEVfQlJFQUtET1dOJyA6IGZhbHNlLFxuICAgICAgICAnU1BfU0JfS0VZV09SRF9QQVJJVFknIDogdHJ1ZSxcbiAgICAgICAgJ0hFQURMSU5FX0tFWVdPUkRfQklEUycgOiB0cnVlLFxuICAgICAgICAnU0JfS0VZV09SRFNfQklEX0dBUCcgOiBmYWxzZSxcbiAgICAgICAgJ1NCX01BVENIX1RZUEVfQlJFQUtET1dOJyA6IGZhbHNlLFxuICAgICAgICAnU0JfU1BfS0VZV09SRF9QQVJJVFknIDogdHJ1ZSxcbiAgICAgICAgJ05PX0tFWVdPUkRfQklEUycgOiB0cnVlLFxuICAgICAgICAnQ0FNUEFJR05fVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdBVVRPX1RPX01BTlVBTF9BU0lOX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnTUFOVUFMX1RPX0FVVE9fQVNJTl9QQVJJVFknIDogdHJ1ZSxcbiAgICAgICAgJ0NPTVBFVElUT1JfUFJPRFVDVCcgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX0JSQU5EX0tFWVdPUkQnOiB0cnVlXG4gICAgfVxuXG5cdFxuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgUmVzdEFwaVNlcnZpY2U6IFJlc3RBcGlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYWN0aXZhdGVkUm91dGU6QWN0aXZhdGVkUm91dGUsXG5cdFx0cHJpdmF0ZSB1cmxDb250ZXh0U2VydmljZTogVXJsQ29udGV4dFNlcnZpY2UpIHt9XG5cblx0Z2V0VHlwZVN0YXR1c0NvbmZpZ3MoKXtcblx0XHRyZXR1cm4gdGhpcy50eXBlU3RhdHVzQ29uZmlncztcblx0fVxuXHRjb25zdHJ1Y3RDaGlsZE1lbnVzKG1lbnVJdGVtcyl7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmxpc3RNZW51cyl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIG1lbnVJdGVtcykge1xuXHRcdFx0XHRpZiAodGhpcy5hcHBEZXRhaWxzLmFwcFNldCkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmlkLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy5hcHBsaWNhdGlvbklkKSkge1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgbGlzdE1lbnVJdGVtIG9mIHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXMpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uaWQgPT0gbGlzdE1lbnVJdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aXRlbS5jaGlsZHJlbiA9IGxpc3RNZW51SXRlbS5jaGlsZHJlblxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gdGhpcy5hcHBEZXRhaWxzLmFwcGxpY2F0aW9uSWQpIHtcblx0XHRcdFx0XHRpdGVtLmNoaWxkcmVuID0gdGhpcy5hcHBEZXRhaWxzLmxpc3RNZW51c1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtZW51SXRlbXM7XG5cdH1cblxuXHRnZXRNZW51TGlzdChhcHBEZXRhaWxzIDogYW55KSB7XHRcblx0XHR0aGlzLmFwcERldGFpbHMgXHRcdD0gYXBwRGV0YWlscztcblx0XHR0aGlzLk1lbnVMaXN0IFx0XHRcdD0gW107XG5cdFx0bGV0IGFwcGVuZENoaWxkTWVudXMgXHQ9IHRoaXMuY29uc3RydWN0Q2hpbGRNZW51cyhNRU5VTElTVCk7XG5cdFx0bGV0IE1FTlVMSVNUX1NPUlRFRCBcdD0gTUVOVUxJU1Quc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPiBiLm9yZGVyKSA/IDEgOiAtMSk7XG5cdFx0dGhpcy5hcHBOYW1lcyBcdFx0XHQ9IHRoaXMuYXBwbGljYXRpb25JZHM7XG5cblx0XHRpZigodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQgPT09IDEwMzkwIHx8IFxuXHRcdFx0dGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQgPT09IDEwNTMwKSAmJiBcblx0XHRcdHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5lbWFpbCA9PSBcInNyZWVuYXRoQGludGVudHdpc2UuY29tXCIpe1xuXG5cdFx0XHR0aGlzLmFwcE5hbWVzID0gdGhpcy5hcHBsaWNhdGlvbklkcy5maWx0ZXIoKG5hbWUpPT57XG5cdFx0XHRcdHJldHVybiAobmFtZSAhPSAnYWRzX2FtYXpvbl9jb250ZW50X3NoYXJlX29mX3ZvaWNlJyAmJiBuYW1lICE9ICdhZHNfYW1hem9uX2NvbnRlbnRfY29udGVudF9hbmFseXRpY3MnKVxuXHRcdFx0fSk7XG5cdFx0XHRcblx0XHR9XG5cblx0XHRmb3IgKGxldCBhcHBOYW1lIG9mIE1FTlVMSVNUX1NPUlRFRCkge1xuXHRcdFx0aWYodGhpcy5hcHBOYW1lcy5pbmRleE9mKGFwcE5hbWUuaWQpID49IDApe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAmJiBsaXN0LmNoaWxkcmVuICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0aWYoYXBwTmFtZS5pZCA9PSdhZHNfYW1hem9uX2RzcCcpe1xuXHRcdFx0XHRcdFx0aWYobGlzdC5jaGlsZHJlbiAmJiBsaXN0LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHRmb3IobGV0IGNoaWxkIG9mIGxpc3QuY2hpbGRyZW4pe1xuXHRcdFx0XHRcdFx0XHRcdGlmKCF0aGlzLmlzU3RydWN0dXJlQXBpU3VwcG9ydCAmJiBjaGlsZC5pZCA9PVwiYW1zX2RzcF9zZXR0aW5nc1wiKXtcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkLmNoaWxkcmVuID0gY2hpbGQuY2hpbGRyZW4uZmlsdGVyKHNfY2hpbGQgPT4gc19jaGlsZC5pZCAhPT0gJ2Ftc19kc3BfcnVsZXMnKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuTWVudUxpc3QucHVzaChsaXN0KTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHRoaXMuTWVudUxpc3QucHVzaChsaXN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdH1lbHNlIGlmKGFwcE5hbWUudHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdHRoaXMuTWVudUxpc3QucHVzaChsaXN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLk1lbnVMaXN0O1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25NZW51SXRlbShjdXJyZW50TWVudUl0ZW06YW55KTogYW55IHtcblx0XHRsZXQgbWVudUl0ZW0gPSB7XG5cdFx0XHRjaGlsZHJlbiA6IFtdXG5cdFx0fTtcblxuXHRcdGlmKGN1cnJlbnRNZW51SXRlbS50eXBlICE9ICdleHBhbmRhYmxlJyl7XG5cdFx0XHRsZXQgYWxsS2V5cyA9IE9iamVjdC5rZXlzKGN1cnJlbnRNZW51SXRlbSk7XG5cdFx0XHRjb25zdCBoYXNDb25kaXRpb25zdG9DaGVjayA9IHRoaXMuY29uZGl0aW9ucy5zb21lKGNvbmRpdGlvbiA9PiBhbGxLZXlzLmluY2x1ZGVzKGNvbmRpdGlvbikpXG5cdFx0XHRpZihoYXNDb25kaXRpb25zdG9DaGVjayl7XG5cdFx0XHRcdGxldCBpc01lbnVBbGxvd2VkID0gdGhpcy5jaGVja0FsbENvbmRpdGlvbnMoY3VycmVudE1lbnVJdGVtICwgYWxsS2V5cyk7XG5cdFx0XHRcdGlmKGlzTWVudUFsbG93ZWQpe1xuXHRcdFx0XHRcdG1lbnVJdGVtID0gY3VycmVudE1lbnVJdGVtO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3JldHVybiBlbXB0eScpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0bWVudUl0ZW0gPSBjdXJyZW50TWVudUl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRsZXQgYWxsS2V5cyA9IE9iamVjdC5rZXlzKGN1cnJlbnRNZW51SXRlbSk7XG5cdFx0XHRjb25zdCBoYXNDb25kaXRpb25zdG9DaGVjayA9IHRoaXMuY29uZGl0aW9ucy5zb21lKGNvbmRpdGlvbiA9PiBhbGxLZXlzLmluY2x1ZGVzKGNvbmRpdGlvbikpXG5cdFx0XHRpZighaGFzQ29uZGl0aW9uc3RvQ2hlY2sgfHwgKGhhc0NvbmRpdGlvbnN0b0NoZWNrICYmIHRoaXMuY2hlY2tBbGxDb25kaXRpb25zKGN1cnJlbnRNZW51SXRlbSAsIGFsbEtleXMpKSkge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhjdXJyZW50TWVudUl0ZW0pLmZvckVhY2goKGtleSk9PnsgXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50TWVudUl0ZW1ba2V5XSAhPSBcIm9iamVjdFwiICkge1xuXHRcdFx0XHRcdFx0bWVudUl0ZW1ba2V5XSA9IGN1cnJlbnRNZW51SXRlbVtrZXldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0bWVudUl0ZW0uY2hpbGRyZW4gPSBbXTtcblx0XHRcdFx0Zm9yKGxldCBjaGlsZCBvZiBjdXJyZW50TWVudUl0ZW0uY2hpbGRyZW4pe1xuXHRcdFx0XHRcdGxldCBuYXZfbWVudSA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShjaGlsZCk7XG5cdFx0XHRcdFx0aWYobmF2X21lbnUgIT0gbnVsbCl7IFxuXHRcdFx0XHRcdFx0aWYobmF2X21lbnUuY2hpbGRyZW4gIT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHRcdFx0aWYobmF2X21lbnUuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0bWVudUl0ZW0uY2hpbGRyZW4ucHVzaChuYXZfbWVudSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuLnB1c2gobmF2X21lbnUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cdFx0XHRcblx0XHR9XG5cdFx0cmV0dXJuIG1lbnVJdGVtO1xuXHR9XG5cblx0Z2V0R2xvYmFsU2V0dGluZ3NNZW51KGFwcERldGFpbHMgOiBhbnkpIHtcblx0XHR0aGlzLmFwcERldGFpbHMgPSBhcHBEZXRhaWxzO1x0XG5cdFx0dGhpcy5TZXR0aW5nc01lbnVMaXN0ID0gW107XG5cdFx0bGV0IEdMT0JBTF9TRVRUSU5HX0xJU1RfU09SVEVEID0gR0xPQkFMX1NFVFRJTkdfTElTVC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciA+IGIub3JkZXIpID8gMSA6IC0xKTtcblx0XHRmb3IgKGxldCBhcHBOYW1lIG9mIEdMT0JBTF9TRVRUSU5HX0xJU1RfU09SVEVEKSB7XG5cdFx0XHRpZihhcHBOYW1lLnR5cGUgPT0gJ2V4cGFuZGFibGUnKXtcblx0XHRcdFx0bGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG5cdFx0XHRcdGlmKGxpc3QgJiYgbGlzdC5jaGlsZHJlbiAmJiBsaXN0LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpO1xuXHRcdFx0XHR9XHRcdFx0XHRcblx0XHRcdH1lbHNlIGlmKGFwcE5hbWUudHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XHRcdFxuXHRcdHJldHVybiB0aGlzLlNldHRpbmdzTWVudUxpc3Q7XG5cdH1cblxuXHRjaGVja0FsbENvbmRpdGlvbnMoY3VycmVudE1lbnVJdGVtOiBhbnksIGFsbEtleXM6IHN0cmluZ1tdKTogYW55IHtcblx0XHRsZXQgaW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRpZigoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiBjdXJyZW50TWVudUl0ZW0uaWQgPT0gXCJhZHNfb3ZlcnZpZXdcIiAmJiAhdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb25bJ25vQWN0aXZlQWNjb3VudHMnXSkpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2UgaWYoY3VycmVudE1lbnVJdGVtLmlkID09PSBcImFkc19zaWdudXBfb3ZlcnZpZXdcIikge1xuXHRcdFx0aWYoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvblsnbm9BY3RpdmVBY2NvdW50cyddKXtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvcihsZXQgY29uZCBvZiB0aGlzLmNvbmRpdGlvbnMpe1xuXHRcdFx0aWYoY3VycmVudE1lbnVJdGVtW2NvbmRdICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdHN3aXRjaChjb25kKXtcblx0XHRcdFx0XHRjYXNlICd2aXNpYmlsaXR5X3JvbGVzJzogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclJvbGVzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAndmlzaWJpbGl0eV9yb2xlc19ub3RfaW4nOiB7IFxuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdkaXNhYmxlX3JlYWRvbmx5X29yZyc6e1xuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX2lkcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkcyhjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSBpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9pZHNfbm90X2luJyA6IHtcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yU3BlY2lmaWVkSWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkc05vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdfdXNlcl9jdHJsJzp7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdXaXRoVXNlclJvbGUoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzX25vdF9pbicgOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRBY2NvdW50SWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Y2FzZSAnbm90X2FjY291bnRfbmFtZScgOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RBY2NOYW1lKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY2FzZSAnYWNjb3VudF90eXBlJyA6IHsgXG5cdFx0XHRcdFx0Ly8gXHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LnR5cGUpIHtcblx0XHRcdFx0XHQvLyBcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9Y2FzZSAnYXBwX29yZ19zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdBcHBTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX3NldHRpbmdfbm90X2luJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ3NpdGVJZHMnIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNpdGVJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdzaXRlTm90SWRzJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTaXRlTm90SWRzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Ly8gY2FzZSAnc3Vic2NyaXB0aW9uX3R5cGVzJyA6IHsgXG5cdFx0XHRcdFx0Ly8gXHRpZihjdXJyZW50TWVudUl0ZW1bJ2FjY291bnRfdHlwZSddID09IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0Ly8gXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuc3Vic2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gXHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yU3Vic2NyaXB0aW9ucyhjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0Ly8gXHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gXHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBcdFx0fVxuXHRcdFx0XHRcdC8vIFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQudHlwZSkge1xuXHRcdFx0XHRcdC8vIFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvckFjY1R5cGUoY3VycmVudE1lbnVJdGVtKTtcblx0XHRcdFx0XHQvLyBcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdC8vIFx0XHR9XG5cdFx0XHRcdFx0Ly8gXHR9XG5cdFx0XHRcdFx0Ly8gYnJlYWs7IFxuXHRcdFx0XHRcdC8vIH0gXG5cdFx0XHRcdFx0Y2FzZSAnY2FtcGFpZ25fdHlwZXMnIDoge1xuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0KXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQ2FtcGFpZ25UeXBlKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZycgOiB7IFxuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0KXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmcoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0JyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0KXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmdXYWxtYXJ0KGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ3VzZXJfZW1haWxzJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuYXV0aGVudGljYXRlVXNlck1haWxNZW51KGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGRlZmF1bHQ6IHsgXG5cdFx0XHRcdFx0Ly8gLy9zdGF0ZW1lbnRzOyBcblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfSBcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighaW5jbHVkZU1lbnUpe1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVx0XHRcdFxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdGluY2x1ZGVNZW51ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaW5jbHVkZU1lbnU7XG5cdH1cblxuXHRjaGVja0Zvck5vdEFjY05hbWUocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm5hbWUpID09IC0xKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yQ2FtcGFpZ25UeXBlKHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLmRhdGFUeXBlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmcocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHRbMF0uY2FtcGFpZ25UYXJnZXRpbmcpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JDYW1wYWlnblRhcmdldGluZ1dhbG1hcnQocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0d2FsbWFydFswXS5jYW1wYWlnblRhcmdldGluZykgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhdXRoZW50aWNhdGVVc2VyTWFpbE1lbnUocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRyZXR1cm4gcG9zc2libGVWYWx1ZXMgJiYgcG9zc2libGVWYWx1ZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLmVtYWlsKTtcblx0fVxuXG5cdGNoZWNrRm9yU3Vic2NyaXB0aW9ucyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbntcblx0XHRmb3IobGV0IHNldHRpbmdzIG9mIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24pe1xuXHRcdFx0aWYoKHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3MudHlwZSkgPj0gMCkgJiYgc2V0dGluZ3Muc3RhdHVzID09IFwiQUNUSVZFXCIpe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y2hlY2tGb3JTaXRlSWRzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8gJiYgdGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKCt0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0ZvclNpdGVOb3RJZHMocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mbyAmJiB0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkICYmIHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mby5zaXRlSWQpKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yT3JnU2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncyl7XG5cdFx0XHRmb3IobGV0IHNldHRpbmdzIG9mIHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncyl7XG5cdFx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3Muc2V0dGluZykgPj0gMCl7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjaGVja0Zvck9yZ0FwcFNldHRpbmdzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMub3JnQXBwU2V0dGluZ3Mpe1xuXHRcdFx0Zm9yKGxldCBzZXR0aW5ncyBvZiB0aGlzLmFwcERldGFpbHMub3JnQXBwU2V0dGluZ3Mpe1xuXHRcdFx0XHRpZihwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHNldHRpbmdzLnR5cGUpID49IDAgJiYgc2V0dGluZ3Muc3RhdHVzID09ICdBQ1RJVkUnKXtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yTm90T3JnU2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGxldCBhbGxvdyA9IHRydWU7XG5cdFx0Y29uc3Qgcm9sZSA9IFsnU1VQRVJfQURNSU4nLCAnU1VQRVJfQURNSU5fUkVBRF9PTkxZJ107XG5cdFx0Y29uc3QgaXNBZG1pblJvbGUgPSByb2xlLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID4gLTEgPyB0cnVlIDogZmFsc2U7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzICYmIHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncy5sZW5ndGggPiAwKXtcblx0XHRcdGZvcihsZXQgc2V0dGluZ3Mgb2YgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzKXtcblx0XHRcdFx0aWYoIWlzQWRtaW5Sb2xlICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3Muc2V0dGluZykgPiAtMSApe1xuXHRcdFx0XHRcdGFsbG93ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxvdztcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiBhbGxvdztcblx0XHR9XG5cdH1cblx0XG5cblx0Y2hlY2tGb3JBY2NUeXBlKG1lbnVJdGVtOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihtZW51SXRlbVsnYWNjb3VudF90eXBlJ10uaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQudHlwZSkgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdGlmKG1lbnVJdGVtWydzdWJzY3JpcHRpb25fdHlwZXMnXSl7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNoZWNrRm9yU3Vic2NyaXB0aW9ucyhtZW51SXRlbVsnc3Vic2NyaXB0aW9uX3R5cGVzJ10pXG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JTcGVjaWZpZWRJZHMocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlc1swXS5pZCl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdGlmKCBpdGVtLmlkID09PSBpZCApe1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGl0ZW0pLmZvckVhY2goKGtleSk9PnsgXG5cdFx0XHRcdFx0XHRpZiAoa2V5ICE9ICdpZCcpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudE1lbnVJdGVtW2tleV0gPSBpdGVtW2tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnTGluayBjaGFuZ2VkIHRvICcrY3VycmVudE1lbnVJdGVtLmxpbmsrJyBhbmQgcm91dGUgY2hhbmdlZCB0byAnK2N1cnJlbnRNZW51SXRlbS5yb3V0ZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YoaWQpID49IDApe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JPcmdXaXRoVXNlclJvbGUocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKXtcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgcG9zc2libGVWYWx1ZXMpIHtcblx0XHRcdFx0aWYoaXRlbS5vcmdhbml6YXRpb25zKXtcblx0XHRcdFx0XHRpZihpdGVtLnZpc2liaWxpdHlfc2Ffcm9sZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpIHx8IFxuXHRcdFx0XHRcdCAgKGl0ZW0ub3JnYW5pemF0aW9ucyAmJiBpdGVtLnZpc2liaWxpdHlyb2xlcyAmJiBpdGVtLm9yZ2FuaXphdGlvbnMuaW5jbHVkZXMoaWQpICYmIGl0ZW0udmlzaWJpbGl0eXJvbGVzLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSkpe1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ZWxzZSBpZihpdGVtLm9yZ2FuaXphdGlvbl9zZXR0aW5nKXtcblx0XHRcdFx0XHRpZiAoKHRoaXMuY2hlY2tGb3JPcmdTZXR0aW5ncyhpdGVtLm9yZ2FuaXphdGlvbl9zZXR0aW5nKSAmJiBpdGVtLnZpc2liaWxpdHlyb2xlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkpIHx8XG5cdFx0XHRcdFx0XHRpdGVtLnZpc2liaWxpdHlfc2Ffcm9sZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNoZWNrRm9yU3BlY2lmaWVkSWRzTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gcG9zc2libGVWYWx1ZXMuaW5kZXhPZihpZCkgPCAwO1xuXHR9XG5cblx0Y2hlY2tGb3JTcGVjaWZpZWRBY2NvdW50SWRzTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gcG9zc2libGVWYWx1ZXMuaW5kZXhPZihpZCkgPCAwO1xuXHR9XG5cblx0Y2hlY2tGb3JSb2xlcyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjaGVja0ZvcnZpc2liaWxpdHlSb2xlc05vdEluKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSA+PSAwKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBkaXNhYmxlRm9yT3Jnd2l0aFJlYWRPbmx5KHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFue1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlID09PSAnUkVBRF9PTkxZJyAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCkgPj0gMCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0SG9zdE9yaWdpbkFuZE5hdmlnYXRlKHJvdXRlICwgYXBwbGljYXRpb25JZD11bmRlZmluZWQpIHtcblx0XHRpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihyb3V0ZSkgPT0gLTEpIHtcblx0XHRcdHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG5cdFx0XHRcdGlmIChhcHBsaWNhdGlvbklkKSB7XG5cdFx0XHRcdFx0cGFyYW1zID0gey4uLnBhcmFtcywgLi4uYXBwbGljYXRpb25JZH07XHRcblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgdXJsVG9OYXZpZ2F0ZSA9IHRoaXMudXJsQ29udGV4dFNlcnZpY2UucHJlcGFyZVVybFdpdGhRdWVyeVBhcmFtcyhyb3V0ZSwgcGFyYW1zKTtcblx0XHRcdFx0dXJsVG9OYXZpZ2F0ZSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59LyR7dXJsVG9OYXZpZ2F0ZX1gXG5cdFx0XHRcdC8vIHVybFRvTmF2aWdhdGUgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwLyR7dXJsVG9OYXZpZ2F0ZX1gXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdOYXZpZ2F0aW5nIHRvIC0gJyx1cmxUb05hdmlnYXRlKTtcblx0XHRcdFx0d2luZG93Lm9wZW4odXJsVG9OYXZpZ2F0ZSwgJ19zZWxmJyk7XG5cdFx0XHR9KTtcblx0XHR9XG4gICAgfVxuXHRcblx0cHVibGljIGZldGNoS2V5VmFsdWUoa2V5OiBzdHJpbmcpIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50KSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudFtrZXldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdFxuXHR9XG5cblx0cHVibGljIHNldEFjdGl2ZVJlY29Db3VudChjb3VudDpudW1iZXIpe1xuXHRcdHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudFsnYWN0aXZlUmVjb21tZW5kYXRpb24nXSA9IGNvdW50O1xuXHR9XG5cdFxuXHRwdWJsaWMgaXNIYXZpbmdBbnlBY3RpdmVTdWJzKGlkLHN1YnMsdHlwZSl7XG4gICAgaWYoaWQgPT09ICdhZHNfYW1hem9uX2F0dHJpYnV0aW9uJyAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdBTVNfQVRUUklCVVRJT04nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmKGlkID09PSAnYWRzX2FtYXpvbl9kc3AnICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0RTUCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoKGlkID09PSAnYWRzX2FtYXpvbl9jb250ZW50JykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnQ09OVEVOVCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoKGlkID09PSAnYWRzX2luc3RhY2FydCcpICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0lOU1RBQ0FSVCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9ZWxzZSBpZigoaWQgPT09ICdhZHNfY3JpdGVvJykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnQ1JJVEVPJykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoKGlkID09PSAnYWRzX3dhbG1hcnQnKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdXQUxNQVJUJykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoaWQgPT09ICdhZHNfZGF0YV9wbGF0Zm9ybSd8fCBpZCA9PT0gJ2FtYy1wbGF0Zm9ybS13ZWInIHx8IGlkID09PSAnYWRzX2FtYXpvbl9zZWxsZXInKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1lbHNlIGlmKGlkID09PSAnYWRzX2FtYXpvbl9hZHZlcnRpc2luZycgfHwgaWQgPT09ICdhZHNfdmVuZG9yX3NhbGVzJyB8fCBpZCA9PT0gJ2Fkc19zZWxsZXJfc2FsZXMnKSB7XG4gICAgICBmb3IobGV0IHNldHRpbmdzIG9mIHN1YnMpe1xuICAgICAgICBpZihzZXR0aW5ncy50eXBlICE9IHR5cGUgJiYgc2V0dGluZ3Muc3RhdHVzID09IFwiQUNUSVZFXCIpe1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICBcdH1cblxuXHRwdWJsaWMgY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgYWNjVHlwZSAsc3ViVHlwZSkge1xuXHRcdGlmKHN1YlR5cGUgPT09IGFjY1R5cGUpe1xuXHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50VHlwZVN1YiA9IHN1YnMuZmlsdGVyKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udHlwZSA9PT0gc3ViVHlwZSk7XG5cdFx0aWYoY3VycmVudFR5cGVTdWIubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudFR5cGVTdWJbMF0uc3RhdHVzID09PSAnQUNUSVZFJyB8fCBjdXJyZW50VHlwZVN1YlswXS50eXBlID09PSBhY2NUeXBlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRBcHBsaWNhdGlvbklEKCkge1xuXHRcdGxldCB1cmxBcnJheSA9IHRoaXMudXJsQ29udGV4dFNlcnZpY2Uucm91dGVyLnVybC5zcGxpdCgnLycpO1xuXHRcdGxldCBjdXJyZW50Um91dGUgPSB1cmxBcnJheVt1cmxBcnJheS5sZW5ndGggLSAxXTtcblx0XHRcblx0XHRpZih0aGlzLmNvbnRlbnRBcHBSb3V0ZXMuaW5kZXhPZihjdXJyZW50Um91dGUpPi0xICkge1xuXHRcdFx0cmV0dXJuIFwiYWRzX2FtYXpvbl9jb250ZW50X2NvbnRlbnRfYW5hbHl0aWNzXCI7XG5cdFx0fSBlbHNlIGlmKHRoaXMuc292QXBwUm91dGVzLmluZGV4T2YoY3VycmVudFJvdXRlKT4tMSkge1xuXHRcdFx0cmV0dXJuIFwiYWRzX2FtYXpvbl9jb250ZW50X3NoYXJlX29mX3ZvaWNlXCI7XG5cdFx0fVxuXHR9XG59Il19
|
|
778
|
+
}], ctorParameters: function () { return [{ type: i1.RestApiService }, { type: i2.ActivatedRoute }, { type: i3.TranslationService }, { type: i4.UrlContextService }]; } });
|
|
779
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL3NlcnZpY2VzL2FwcGxpY2F0aW9uLXNpZGViYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUszRCxNQUFNLE9BQU8seUJBQXlCO0lBNEM1QjtJQUNBO0lBQ0E7SUFDQTtJQTdDVCxVQUFVLEdBQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFDLGdCQUFnQixFQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBQyx3QkFBd0IsRUFBQyxnQkFBZ0IsRUFBQyx1QkFBdUIsRUFBQyxrQkFBa0IsRUFBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9tQixRQUFRLEdBQU0sRUFBRSxDQUFDO0lBRWpCLGNBQWMsR0FBSyxFQUFFLENBQUM7SUFDdEIsbUJBQW1CLEdBQUcsQ0FBQyxLQUFLLENBQUMs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RUFBRTtZQUNyRCxPQUFPLG1DQUFtQyxDQUFDO1NBQzNDO0lBQ0YsQ0FBQzsySEE5dkJXLHlCQUF5QjsrSEFBekIseUJBQXlCLGNBRnhCLE1BQU07OzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4vcmVzdC1hcGkuc2VydmljZXMnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVcmxDb250ZXh0U2VydmljZSB9IGZyb20gJy4vdXJsLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBFTl9MQUJFTFMgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLWVuJztcbmltcG9ydCB7IEpBX0xBQkVMUyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMtamEnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25TaWRlYmFyU2VydmljZSB7XG5cblx0Y29uZGl0aW9ucyBcdFx0XHQ9IFsnb3JnX3VzZXJfY3RybCcsICd2aXNpYmlsaXR5X3JvbGVzJywgJ3Zpc2liaWxpdHlfcm9sZXNfbm90X2luJywgJ2FjY291bnRfaWRzJywgJ2N1c3RvbWVyX3R5cGVzX25vdF9pbicsJ2N1c3RvbWVyX3R5cGVzJywnb3JnYW5pemF0aW9uX2lkcycsICdvcmdhbml6YXRpb25faWRzX25vdF9pbicsICdhY2NvdW50X3R5cGUnLCAnYWNjb3VudF9pZHNfbm90X2luJywgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJywgJ29yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbicsICdjYW1wYWlnbl90eXBlcycsICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nJywgJ2luY29udGV4dF9jYW1wYWlnbl90YXJnZXRpbmdfd2FsbWFydCcsICdzdWJzY3JpcHRpb25fdHlwZXMnLCAnc2l0ZUlkcycsICdzaXRlTm90SWRzJywgJ25vdF9hY2NvdW50X3R5cGUnLCAnbm90X2FjY291bnRfbmFtZScsICdkaXNhYmxlX3JlYWRvbmx5X29yZycsICd1c2VyX2VtYWlscycsICdhcHBfb3JnX3NldHRpbmcnLCdhcHBfb3JnX3NldHRpbmdfbm90X2luJywnbmdfYXBwX3NldHRpbmcnLCduZ19hcHBfc2V0dGluZ19ub3RfaW4nLCd0YXJnZXR0aW5nX3R5cGVzJywndGFyZ2V0dGluZ190eXBlc19ub3RfaW4nXTtcblx0TWVudUxpc3QgXHRcdFx0PSBbXTtcblxuXHRhcHBsaWNhdGlvbklkcyBcdFx0PSBbXTtcblx0ZW5hYmxlQWxsTWVudXNCeU9yZyA9IFszMDc4MF1cblx0XG5cdGFwcERldGFpbHM6XHRhbnk7XG5cdGlzU3RydWN0dXJlQXBpU3VwcG9ydDpcdGFueTtcblx0U2V0dGluZ3NNZW51TGlzdDogYW55W107XG5cdGFwcE5hbWVzOiBzdHJpbmdbXTtcblx0cHJpdmF0ZSBtZW51bGlzdHM6IGFueTtcblx0Y29udGVudEFwcFJvdXRlc1x0XHRcdD1bJ2NvbnRlbnQtaW5zaWdodCcsJ2NvbnRlbnQtYW5hbHl0aWNzJywnY29udGVudCcsJ3Byb2R1Y3QtbWV0YS1kYXRhJywnYnJhbmQtdGVybXMtc2V0dGluZ3MnLCdsYWJlbHMtc2V0dGluZ3MnLCdzdWItYnJhbmRzJywnc3ViLWJyYW5kcy1tYXBwaW5nJywnc292LXNldHRpbmdzJyAsJ2NvbnRlbnQtc2V0dGluZ3MnXVxuXHRzb3ZBcHBSb3V0ZXNcdFx0XHRcdD1bJ2luc2lnaHRzJywnc2hhcmUtb2Ytdm9pY2UnLCdzb3YnLCdwcm9kdWN0LW1ldGEtZGF0YScsJ2JyYW5kLXRlcm1zLXNldHRpbmdzJywnbGFiZWxzLXNldHRpbmdzJywnc3ViLWJyYW5kcycsJ3N1Yi1icmFuZHMtbWFwcGluZycsJ3Nvdi1zZXR0aW5ncycgLCdjb250ZW50LXNldHRpbmdzJ11cblx0c2VsbGVyQW5hbHl0aWNzQXBwUm91dGVzIFx0PVsnc2VsbGVyL2luc2lnaHRzJywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncyddXG5cdHZlbmRvckFuYWx5dGljc0FwcFJvdXRlc1x0PVsndmVuZG9yL2luc2lnaHRzJywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncyddXG5cdFxuXHR0eXBlU3RhdHVzQ29uZmlncyA9IHtcbiAgICAgICAgJ1NQT05TT1JFRF9LRVlXT1JEX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9QUk9EVUNUX01BTlVBTF9UQVJHRVRJTkdfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX1BST0RVQ1RfQVVUT19UQVJHRVRJTkdfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkRfQVVUTycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkQnIDogdHJ1ZSxcbiAgICAgICAgJ1NQX0tFWVdPUkRTX0JJRF9HQVAnIDogZmFsc2UsXG4gICAgICAgICdTUF9QTEFDRU1FTlRfQklEJyA6IGZhbHNlLFxuICAgICAgICAnU1BfVEFSR0VUSU5HX1RZUEVfQlJFQUtET1dOJyA6IGZhbHNlLFxuICAgICAgICAnU1BfTUFUQ0hfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTUF9TQl9LRVlXT1JEX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnSEVBRExJTkVfS0VZV09SRF9CSURTJyA6IHRydWUsXG4gICAgICAgICdTQl9LRVlXT1JEU19CSURfR0FQJyA6IGZhbHNlLFxuICAgICAgICAnU0JfTUFUQ0hfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTQl9TUF9LRVlXT1JEX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnTk9fS0VZV09SRF9CSURTJyA6IHRydWUsXG4gICAgICAgICdDQU1QQUlHTl9UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ0FVVE9fVE9fTUFOVUFMX0FTSU5fUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdNQU5VQUxfVE9fQVVUT19BU0lOX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnQ09NUEVUSVRPUl9QUk9EVUNUJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfQlJBTkRfS0VZV09SRCc6IHRydWVcbiAgICB9XG5cblx0XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBSZXN0QXBpU2VydmljZTogUmVzdEFwaVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxcblx0XHRwcml2YXRlIHRyYW5zbGF0ZTpUcmFuc2xhdGlvblNlcnZpY2UsXG5cdFx0cHJpdmF0ZSB1cmxDb250ZXh0U2VydmljZTogVXJsQ29udGV4dFNlcnZpY2UpIHt9XG5cblx0Z2V0VHlwZVN0YXR1c0NvbmZpZ3MoKXtcblx0XHRyZXR1cm4gdGhpcy50eXBlU3RhdHVzQ29uZmlncztcblx0fVxuXHRjb25zdHJ1Y3RDaGlsZE1lbnVzKG1lbnVJdGVtcyl7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmxpc3RNZW51cyl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIG1lbnVJdGVtcykge1xuXHRcdFx0XHRpZiAodGhpcy5hcHBEZXRhaWxzLmFwcFNldCkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmlkLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy5hcHBsaWNhdGlvbklkKSkge1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgbGlzdE1lbnVJdGVtIG9mIHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXMpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uaWQgPT0gbGlzdE1lbnVJdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aXRlbS5jaGlsZHJlbiA9IGxpc3RNZW51SXRlbS5jaGlsZHJlblxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gdGhpcy5hcHBEZXRhaWxzLmFwcGxpY2F0aW9uSWQpIHtcblx0XHRcdFx0XHRpdGVtLmNoaWxkcmVuID0gdGhpcy5hcHBEZXRhaWxzLmxpc3RNZW51c1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtZW51SXRlbXM7XG5cdH1cblxuXHRnZXRNZW51TGlzdChhcHBEZXRhaWxzLCBtZW51bGlzdHMpIHtcblxuXHRcdHRoaXMuYXBwRGV0YWlscyA9IGFwcERldGFpbHM7XG5cdFx0dGhpcy5NZW51TGlzdCA9IFtdO1xuXHRcdC8vbGV0IGFwcGVuZENoaWxkTWVudXMgXHQ9IHRoaXMuY29uc3RydWN0Q2hpbGRNZW51cyh0aGlzLm1lbnVsaXN0cyk7XG5cdFx0XG5cdFx0bWVudWxpc3RzLmZvckVhY2goKG1lbnUpID0+IHtcblx0XHRcdG1lbnUubmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zbGF0ZU5hbWUobWVudS5uYW1lKTtcblx0XHRcdG1lbnUuY2hpbGRyZW4gJiYgbWVudS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZE1lbnUpID0+IHtcblx0XHRcdFx0Y2hpbGRNZW51Lm5hbWUgPSB0aGlzLnRyYW5zbGF0ZS50cmFuc2xhdGVOYW1lKGNoaWxkTWVudS5uYW1lKTtcblx0XHRcdFx0Y2hpbGRNZW51LmNoaWxkcmVuICYmIGNoaWxkTWVudS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuXHRcdFx0XHRcdGNoaWxkLm5hbWUgPSB0aGlzLnRyYW5zbGF0ZS50cmFuc2xhdGVOYW1lKGNoaWxkLm5hbWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMubWVudWxpc3RzID0gbWVudWxpc3RzLmZpbHRlcihsaXN0PT4gbGlzdC5pZCAhPT0gJ2FwcF9nbG9iYWxfc2V0dGluZ3MnKTtcblx0XHRsZXQgc29ydGVkTWVudWxpc3RzID0gdGhpcy5tZW51bGlzdHMuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPiBiLm9yZGVyKSA/IDEgOiAtMSk7XG5cdFx0dGhpcy5hcHBsaWNhdGlvbklkcyA9IHNvcnRlZE1lbnVsaXN0cy5tYXAoKGFwcElkOiBhbnkpID0+IGFwcElkLmlkKTtcblx0XHR0aGlzLmFwcE5hbWVzID0gdGhpcy5hcHBsaWNhdGlvbklkcztcblxuXHRcdGlmKCh0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCA9PT0gMTAzOTAgfHwgXG5cdFx0XHR0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCA9PT0gMTA1MzApICYmIFxuXHRcdFx0dGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLmVtYWlsID09IFwic3JlZW5hdGhAaW50ZW50d2lzZS5jb21cIil7XG5cblx0XHRcdHRoaXMuYXBwTmFtZXMgPSB0aGlzLmFwcGxpY2F0aW9uSWRzLmZpbHRlcigobmFtZSk9Pntcblx0XHRcdFx0cmV0dXJuIChuYW1lICE9ICdhZHNfYW1hem9uX2NvbnRlbnRfc2hhcmVfb2Zfdm9pY2UnICYmIG5hbWUgIT0gJ2Fkc19hbWF6b25fY29udGVudF9jb250ZW50X2FuYWx5dGljcycpXG5cdFx0XHR9KTtcblx0XHRcdFxuXHRcdH1cblxuXHRcdGZvciAobGV0IGFwcE5hbWUgb2Ygc29ydGVkTWVudWxpc3RzKSB7XG5cdFx0XHRpZih0aGlzLmFwcE5hbWVzLmluZGV4T2YoYXBwTmFtZS5pZCkgPj0gMCl7XG5cdFx0XHRcdGxldCBsaXN0ID0gdGhpcy5nZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGFwcE5hbWUpO1xuXHRcdFx0XHRpZihsaXN0ICYmIGxpc3QuY2hpbGRyZW4gIT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHRpZihhcHBOYW1lLmlkID09J2Fkc19hbWF6b25fZHNwJyl7XG5cdFx0XHRcdFx0XHRpZihsaXN0LmNoaWxkcmVuICYmIGxpc3QuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgY2hpbGQgb2YgbGlzdC5jaGlsZHJlbil7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIXRoaXMuaXNTdHJ1Y3R1cmVBcGlTdXBwb3J0ICYmIGNoaWxkLmlkID09XCJhbXNfZHNwX3NldHRpbmdzXCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGQuY2hpbGRyZW4gPSBjaGlsZC5jaGlsZHJlbi5maWx0ZXIoc19jaGlsZCA9PiBzX2NoaWxkLmlkICE9PSAnYW1zX2RzcF9ydWxlcycpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5NZW51TGlzdC5wdXNoKGxpc3QpO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0dGhpcy5NZW51TGlzdC5wdXNoKGxpc3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0fWVsc2UgaWYoYXBwTmFtZS50eXBlICE9ICdleHBhbmRhYmxlJyl7XG5cdFx0XHRcdGxldCBsaXN0ID0gdGhpcy5nZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGFwcE5hbWUpO1xuXHRcdFx0XHRpZihsaXN0ICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0dGhpcy5NZW51TGlzdC5wdXNoKGxpc3QpXG5cdFx0XHRcdH1cblx0XHRcdH1cdFx0XHRcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuTWVudUxpc3Q7XG5cdH1cblxuXHRnZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGN1cnJlbnRNZW51SXRlbTphbnkpOiBhbnkge1xuXHRcdGxldCBtZW51SXRlbSA9IHtcblx0XHRcdGNoaWxkcmVuIDogW11cblx0XHR9O1xuXG5cdFx0aWYoY3VycmVudE1lbnVJdGVtLnR5cGUgIT0gJ2V4cGFuZGFibGUnKXtcblx0XHRcdGxldCBhbGxLZXlzID0gT2JqZWN0LmtleXMoY3VycmVudE1lbnVJdGVtKTtcblx0XHRcdGNvbnN0IGhhc0NvbmRpdGlvbnN0b0NoZWNrID0gdGhpcy5jb25kaXRpb25zLnNvbWUoY29uZGl0aW9uID0+IGFsbEtleXMuaW5jbHVkZXMoY29uZGl0aW9uKSlcblx0XHRcdGlmKGhhc0NvbmRpdGlvbnN0b0NoZWNrKXtcblx0XHRcdFx0bGV0IGlzTWVudUFsbG93ZWQgPSB0aGlzLmNoZWNrQWxsQ29uZGl0aW9ucyhjdXJyZW50TWVudUl0ZW0sIHRoaXMuY29uZGl0aW9ucywgYWxsS2V5cyk7XG5cdFx0XHRcdGlmKGlzTWVudUFsbG93ZWQpe1xuXHRcdFx0XHRcdG1lbnVJdGVtID0gY3VycmVudE1lbnVJdGVtO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3JldHVybiBlbXB0eScpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0bWVudUl0ZW0gPSBjdXJyZW50TWVudUl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRsZXQgYWxsS2V5cyA9IE9iamVjdC5rZXlzKGN1cnJlbnRNZW51SXRlbSk7XG5cdFx0XHRjb25zdCBoYXNDb25kaXRpb25zdG9DaGVjayA9IHRoaXMuY29uZGl0aW9ucy5zb21lKGNvbmRpdGlvbiA9PiBhbGxLZXlzLmluY2x1ZGVzKGNvbmRpdGlvbikpXG5cdFx0XHRpZighaGFzQ29uZGl0aW9uc3RvQ2hlY2sgfHwgKGhhc0NvbmRpdGlvbnN0b0NoZWNrICYmIHRoaXMuY2hlY2tBbGxDb25kaXRpb25zKGN1cnJlbnRNZW51SXRlbSwgdGhpcy5jb25kaXRpb25zLCBhbGxLZXlzKSkpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY3VycmVudE1lbnVJdGVtKS5mb3JFYWNoKChrZXkpPT57IFxuXHRcdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudE1lbnVJdGVtW2tleV0gIT0gXCJvYmplY3RcIiApIHtcblx0XHRcdFx0XHRcdG1lbnVJdGVtW2tleV0gPSBjdXJyZW50TWVudUl0ZW1ba2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuID0gW107XG5cdFx0XHRcdGZvcihsZXQgY2hpbGQgb2YgY3VycmVudE1lbnVJdGVtLmNoaWxkcmVuKXtcblx0XHRcdFx0XHRsZXQgbmF2X21lbnUgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oY2hpbGQpO1xuXHRcdFx0XHRcdGlmKG5hdl9tZW51ICE9IG51bGwpeyBcblx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuLnB1c2gobmF2X21lbnUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRtZW51SXRlbS5jaGlsZHJlbi5wdXNoKG5hdl9tZW51KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1lbHNle1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVxuXHRcdHJldHVybiBtZW51SXRlbTtcblx0fVxuXG5cdGdldEdsb2JhbFNldHRpbmdzTWVudShhcHBEZXRhaWxzIDogYW55LCBtZW51bGlzdHMpIHtcblx0XHR0aGlzLmFwcERldGFpbHMgPSBhcHBEZXRhaWxzO1x0XG5cdFx0dGhpcy5TZXR0aW5nc01lbnVMaXN0ID0gW107XG5cdFx0bGV0IGdsb2JhbFNldHRpbmdNZW51cyA9IG1lbnVsaXN0cy5maWx0ZXIobGlzdD0+IGxpc3QuaWQgPT0gJ2FwcF9nbG9iYWxfc2V0dGluZ3MnKVxuXHRcdGxldCBHTE9CQUxfU0VUVElOR19MSVNUX1NPUlRFRCA9IGdsb2JhbFNldHRpbmdNZW51cy5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciA+IGIub3JkZXIpID8gMSA6IC0xKTtcblx0XHRmb3IgKGxldCBhcHBOYW1lIG9mIEdMT0JBTF9TRVRUSU5HX0xJU1RfU09SVEVEKSB7XG5cdFx0XHRpZihhcHBOYW1lLnR5cGUgPT0gJ2V4cGFuZGFibGUnKXtcblx0XHRcdFx0bGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG5cdFx0XHRcdGlmKGxpc3QgJiYgbGlzdC5jaGlsZHJlbiAmJiBsaXN0LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpO1xuXHRcdFx0XHR9XHRcdFx0XHRcblx0XHRcdH1lbHNlIGlmKGFwcE5hbWUudHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XHRcdFxuXHRcdHJldHVybiB0aGlzLlNldHRpbmdzTWVudUxpc3Q7XG5cdH1cblxuXHRjaGVja0FsbENvbmRpdGlvbnMoY3VycmVudE1lbnVJdGVtOiBhbnksIGNvbmRpdGlvbnMsIGFsbEtleXM6IHN0cmluZ1tdKTogYW55IHtcblx0XHRsZXQgaW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRpZigoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiBjdXJyZW50TWVudUl0ZW0uaWQgPT0gXCJhZHNfb3ZlcnZpZXdcIiAmJiBcblx0XHRcdCF0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvblsnbm9BY3RpdmVBY2NvdW50cyddKSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZSBpZihjdXJyZW50TWVudUl0ZW0uaWQgPT09IFwiYWRzX3NpZ251cF9vdmVydmlld1wiKSB7XG5cdFx0XHRpZighdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uWydub0FjdGl2ZUFjY291bnRzJ10pe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yKGxldCBjb25kIG9mIGNvbmRpdGlvbnMpe1xuXHRcdFx0aWYoY3VycmVudE1lbnVJdGVtW2NvbmRdICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdHN3aXRjaChjb25kKXtcblx0XHRcdFx0XHRjYXNlICd2aXNpYmlsaXR5X3JvbGVzJzogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclJvbGVzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAndmlzaWJpbGl0eV9yb2xlc19ub3RfaW4nOiB7IFxuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdkaXNhYmxlX3JlYWRvbmx5X29yZyc6e1xuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX2lkcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkcyhjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSBpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9pZHNfbm90X2luJyA6IHtcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yU3BlY2lmaWVkSWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkc05vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdfdXNlcl9jdHJsJzp7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdXaXRoVXNlclJvbGUoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzX25vdF9pbicgOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRBY2NvdW50SWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Y2FzZSAnbm90X2FjY291bnRfbmFtZScgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RBY2NOYW1lKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnYWNjb3VudF90eXBlJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9Y2FzZSAnYXBwX29yZ19zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdBcHBTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnYXBwX29yZ19zZXR0aW5nX25vdF9pbic6IHtcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0Zvck9yZ0FwcFNldHRpbmdzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdhbml6YXRpb25fc2V0dGluZ19ub3RfaW4nIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0Zvck5vdE9yZ1NldHRpbmdzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAnc2l0ZUlkcycgOiB7IFxuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yU2l0ZUlkcyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ3NpdGVOb3RJZHMnIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNpdGVOb3RJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdzdWJzY3JpcHRpb25fdHlwZXMnIDogeyBcblx0XHRcdFx0XHRcdGlmKGN1cnJlbnRNZW51SXRlbVsnYWNjb3VudF90eXBlJ10gPT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdjYW1wYWlnbl90eXBlcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblR5cGUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICd0YXJnZXR0aW5nX3R5cGVzJzoge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JUYXJnZXR0aW5nVHlwZShjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ3RhcmdldHRpbmdfdHlwZXNfbm90X2luJzoge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RUYXJnZXR0aW5nVHlwZShjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2luY29udGV4dF9jYW1wYWlnbl90YXJnZXRpbmcnIDogeyBcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCl7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvckNhbXBhaWduVGFyZ2V0aW5nKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0JyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0KXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmdXYWxtYXJ0KGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAndXNlcl9lbWFpbHMnIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5hdXRoZW50aWNhdGVVc2VyTWFpbE1lbnUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICduZ19hcHBfc2V0dGluZyc6IHtcblx0XHRcdFx0XHRcdGlmICghdGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0KSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0NvbnRleHRTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnbmdfYXBwX3NldHRpbmdfbm90X2luJzoge1xuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrQ29udGV4dFNldHRpbmdOb3RJbihjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2N1c3RvbWVyX3R5cGVzJzoge1xuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrQ3VzdG9tZXJUeXBlSW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdjdXN0b21lcl90eXBlc19ub3RfaW4nOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tDdXN0b21lclR5cGVOb3RJbihjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGRlZmF1bHQ6IHsgXG5cdFx0XHRcdFx0Ly8gLy9zdGF0ZW1lbnRzOyBcblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfSBcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighaW5jbHVkZU1lbnUpe1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVx0XHRcdFxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdGluY2x1ZGVNZW51ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaW5jbHVkZU1lbnU7XG5cdH1cblxuXHRjaGVja0Zvck5vdEFjY05hbWUocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm5hbWUpID09IC0xKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yQ2FtcGFpZ25UeXBlKHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLmRhdGFUeXBlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0ZvclRhcmdldHRpbmdUeXBlKHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0dmFyIGFsbG93ID0gZmFsc2U7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLnRhcmdldGluZ1R5cGUpID49IDApe1xuXHRcdFx0YWxsb3cgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gYWxsb3c7XG5cdH1cblx0Y2hlY2tGb3JOb3RUYXJnZXR0aW5nVHlwZShwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdHZhciBhbGxvdyA9IHRydWU7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLnRhcmdldGluZ1R5cGUpID49IDApe1xuXHRcdFx0YWxsb3cgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGFsbG93O1xuXHR9XG5cdGNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmcocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHRbMF0uY2FtcGFpZ25UYXJnZXRpbmcpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JDYW1wYWlnblRhcmdldGluZ1dhbG1hcnQocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0d2FsbWFydFswXS5jYW1wYWlnblRhcmdldGluZykgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhdXRoZW50aWNhdGVVc2VyTWFpbE1lbnUocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRyZXR1cm4gcG9zc2libGVWYWx1ZXMgJiYgcG9zc2libGVWYWx1ZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLmVtYWlsKTtcblx0fVxuXG5cdGNoZWNrRm9yU3Vic2NyaXB0aW9ucyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbntcblx0XHRmb3IobGV0IHNldHRpbmdzIG9mIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24pe1xuXHRcdFx0aWYoKHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3MudHlwZSkgPj0gMCkgJiYgc2V0dGluZ3Muc3RhdHVzID09IFwiQUNUSVZFXCIpe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y2hlY2tGb3JTaXRlSWRzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8gJiYgdGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCAmJiBwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyhOdW1iZXIodGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCkpKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0ZvclNpdGVOb3RJZHMocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mbyAmJiB0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkICYmIHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKE51bWJlcih0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkKSkpe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JPcmdTZXR0aW5ncyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0dHJ5e1xuXHRcdFx0dmFyIGFsbG93ID0gZmFsc2U7XG5cdFx0XHRpZiAodGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzICYmIHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFsbG93ID0gdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLnNvbWUoZnVuY3Rpb24ob3JnU2V0dGluZyl7XG5cdFx0XHRcdFx0aWYoIW9yZ1NldHRpbmcudmFsdWUgfHwgb3JnU2V0dGluZy52YWx1ZSAmJiBvcmdTZXR0aW5nLnZhbHVlID09ICdBQ1RJVkUnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcG9zc2libGVWYWx1ZXMuaW5jbHVkZXMob3JnU2V0dGluZy5zZXR0aW5nKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KVxuXHRcdFx0XHRyZXR1cm4gYWxsb3c7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYWxsb3c7XG5cdFx0XHR9XG5cdFx0fWNhdGNoKGVycm9yKXtcblx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JPcmdBcHBTZXR0aW5ncyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLm9yZ0FwcFNldHRpbmdzKXtcblx0XHRcdGZvcihsZXQgc2V0dGluZ3Mgb2YgdGhpcy5hcHBEZXRhaWxzLm9yZ0FwcFNldHRpbmdzKXtcblx0XHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZihzZXR0aW5ncy50eXBlKSA+PSAwICYmIHNldHRpbmdzLnN0YXR1cyA9PSAnQUNUSVZFJyl7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JPcmdBcHBTZXR0aW5nc05vdEluKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHR0cnl7XG5cdFx0XHR2YXIgYWxsb3cgPSB0cnVlO1xuXHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncyAmJiB0aGlzLmFwcERldGFpbHMub3JnQXBwU2V0dGluZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhbGxvdyA9IHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncy5zb21lKChvcmdBcHBTZXR0aW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuICghcG9zc2libGVWYWx1ZXMuaW5jbHVkZXMob3JnQXBwU2V0dGluZy50eXBlKSB8fCBcblx0XHRcdFx0XHRcdFx0KHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKG9yZ0FwcFNldHRpbmcudHlwZSkgJiYgXG5cdFx0XHRcdFx0XHRcdG9yZ0FwcFNldHRpbmcuc3RhdHVzICYmIG9yZ0FwcFNldHRpbmcuc3RhdHVzID09ICdJTl9BQ1RJVkUnKSlcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBhbGxvdztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhbGxvdztcblx0XHRcdH1cblx0XHR9Y2F0Y2goZXJyb3Ipe1xuXHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjaGVja0N1c3RvbWVyVHlwZUluKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24uY3VzdG9tZXJUeXBlICYmIFxuXHRcdFx0cG9zc2libGVWYWx1ZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24uY3VzdG9tZXJUeXBlKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0N1c3RvbWVyVHlwZU5vdEluKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLmN1c3RvbWVyVHlwZSB8fCAodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24uY3VzdG9tZXJUeXBlICYmIFxuXHRcdFx0IXBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLmN1c3RvbWVyVHlwZSkpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdGNoZWNrRm9yTm90T3JnU2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGxldCBhbGxvdyA9IHRydWU7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzICYmIHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncy5sZW5ndGggPiAwKXtcblx0XHRcdGFsbG93ID0gdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLnNvbWUoZnVuY3Rpb24ob3JnU2V0dGluZyl7XG5cdFx0XHRcdHJldHVybiAoIXBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKG9yZ1NldHRpbmcuc2V0dGluZykgfHwgXG5cdFx0XHRcdFx0KHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKG9yZ1NldHRpbmcuc2V0dGluZykgJiYgXG5cdFx0XHRcdFx0b3JnU2V0dGluZy52YWx1ZSAmJiBvcmdTZXR0aW5nLnZhbHVlID09ICdJTl9BQ1RJVkUnKSlcblx0XHRcdFx0ICAgXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhbGxvdztcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiBhbGxvdztcblx0XHR9XG5cdH1cblx0XG5cdGNoZWNrQ29udGV4dFNldHRpbmdzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHR2YXIgYWxsb3cgPSBmYWxzZTtcblx0XHRpZih0aGlzLmFwcERldGFpbHMubmdPcmdTZXR0aW5ncyl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdGFsbG93ID0gdGhpcy5hcHBEZXRhaWxzLm5nT3JnU2V0dGluZ3NbaXRlbV07XG5cdFx0XHRcdGFsbG93ID0gYWxsb3cgPT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFsbG93O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWxsb3c7XG5cdH1cblxuXHRjaGVja0NvbnRleHRTZXR0aW5nTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHZhciBhbGxvdyA9IHRydWU7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLm5nT3JnU2V0dGluZ3Mpe1xuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiBwb3NzaWJsZVZhbHVlcykge1xuXHRcdFx0XHRhbGxvdyA9ICF0aGlzLmFwcERldGFpbHMubmdPcmdTZXR0aW5nc1tpdGVtXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFsbG93O1xuXHR9XG5cblx0Y2hlY2tGb3JBY2NUeXBlKG1lbnVJdGVtOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihtZW51SXRlbVsnYWNjb3VudF90eXBlJ10uaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQudHlwZSkgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdGlmKG1lbnVJdGVtWydzdWJzY3JpcHRpb25fdHlwZXMnXSl7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNoZWNrRm9yU3Vic2NyaXB0aW9ucyhtZW51SXRlbVsnc3Vic2NyaXB0aW9uX3R5cGVzJ10pXG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JTcGVjaWZpZWRJZHMocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlc1swXS5pZCl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdGlmKCBpdGVtLmlkID09PSBpZCApe1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGl0ZW0pLmZvckVhY2goKGtleSk9PnsgXG5cdFx0XHRcdFx0XHRpZiAoa2V5ICE9ICdpZCcpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudE1lbnVJdGVtW2tleV0gPSBpdGVtW2tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnTGluayBjaGFuZ2VkIHRvICcrY3VycmVudE1lbnVJdGVtLmxpbmsrJyBhbmQgcm91dGUgY2hhbmdlZCB0byAnK2N1cnJlbnRNZW51SXRlbS5yb3V0ZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YoaWQpID49IDApe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JPcmdXaXRoVXNlclJvbGUocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRsZXQgYWxsb3cgPSB0cnVlO1xuXHRcdGlmIChwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR2YXIgZmxhZ0FycmF5ID0gW107XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdHZhciBhbGxLZXlzID0gT2JqZWN0LmtleXMoaXRlbSk7XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5jaGVja0FsbENvbmRpdGlvbnMoaXRlbSwgYWxsS2V5cywgYWxsS2V5cylcblx0XHRcdFx0ZmxhZ0FycmF5LnB1c2goZmxhZyk7XG5cdFx0XHR9XG5cdFx0XHRhbGxvdyA9IGZsYWdBcnJheS5pbmNsdWRlcyh0cnVlKSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFxuXHRcdH1cblx0XHRyZXR1cm4gYWxsb3c7XG5cdH1cblx0Y2hlY2tGb3JTcGVjaWZpZWRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclNwZWNpZmllZEFjY291bnRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclJvbGVzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKXtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID49IDApe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjaGVja0ZvcnZpc2liaWxpdHlSb2xlc05vdEluKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKXtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID49IDApe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHVibGljIGRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUgPT09ICdSRUFEX09OTFknICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSA+PSAwKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUocm91dGUgLCBhcHBsaWNhdGlvbklkPXVuZGVmaW5lZCkge1xuXHRcdGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHJvdXRlKSA9PSAtMSkge1xuXHRcdFx0dGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcblx0XHRcdFx0aWYgKGFwcGxpY2F0aW9uSWQpIHtcblx0XHRcdFx0XHRwYXJhbXMgPSB7Li4ucGFyYW1zLCAuLi5hcHBsaWNhdGlvbklkfTtcdFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJvdXRlLmluZGV4T2YoJz8nKSA+IC0xICYmIHJvdXRlLmluZGV4T2YoJ3VzZXJtZ210JykgPiAtMSl7XG5cdFx0XHRcdFx0cm91dGUgPSByb3V0ZS5zcGxpdCgnPycpWzBdO1xuXHRcdFx0XHRcdGxldCBuZXdRUGFyYW0gPSB7IHVzZXJtZ210IDogdHJ1ZX1cblx0XHRcdFx0XHRwYXJhbXMgPSB7IC4uLnBhcmFtcyAsIC4uLm5ld1FQYXJhbX1cblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgdXJsVG9OYXZpZ2F0ZSA9IHRoaXMudXJsQ29udGV4dFNlcnZpY2UucHJlcGFyZVVybFdpdGhRdWVyeVBhcmFtcyhyb3V0ZSwgcGFyYW1zKTtcblx0XHRcdFx0dXJsVG9OYXZpZ2F0ZSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59LyR7dXJsVG9OYXZpZ2F0ZX1gXG5cdFx0XHRcdC8vIHVybFRvTmF2aWdhdGUgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwLyR7dXJsVG9OYXZpZ2F0ZX1gXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdOYXZpZ2F0aW5nIHRvIC0gJyx1cmxUb05hdmlnYXRlKTtcblx0XHRcdFx0d2luZG93Lm9wZW4odXJsVG9OYXZpZ2F0ZSwgJ19zZWxmJyk7XG5cdFx0XHR9KTtcblx0XHR9XG4gICAgfVxuXHRcblx0cHVibGljIGZldGNoS2V5VmFsdWUoa2V5OiBzdHJpbmcpIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50KSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudFtrZXldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdFxuXHR9XG5cblx0cHVibGljIHNldEFjdGl2ZVJlY29Db3VudChjb3VudDpudW1iZXIpe1xuXHRcdHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudFsnYWN0aXZlUmVjb21tZW5kYXRpb24nXSA9IGNvdW50O1xuXHR9XG5cdFxuXHRwdWJsaWMgaXNIYXZpbmdBbnlBY3RpdmVTdWJzKGlkLHN1YnMsdHlwZSl7XG4gICAgaWYoaWQgPT09ICdhZHNfYW1hem9uX2F0dHJpYnV0aW9uJyAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdBTVNfQVRUUklCVVRJT04nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmKGlkID09PSAnYWRzX2FtYXpvbl9kc3AnICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0RTUCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoKGlkID09PSAnYWRzX2FtYXpvbl9jb250ZW50JykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnQ09OVEVOVCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoKGlkID09PSAnYWRzX2luc3RhY2FydCcpICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0lOU1RBQ0FSVCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9ZWxzZSBpZigoaWQgPT09ICdhZHNfY3JpdGVvJykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnQ1JJVEVPJykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoKGlkID09PSAnYWRzX3dhbG1hcnQnKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdXQUxNQVJUJykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoaWQgPT09ICdhZHNfZGF0YV9wbGF0Zm9ybSd8fCBpZCA9PT0gJ2FtYy1wbGF0Zm9ybS13ZWInIHx8IGlkID09PSAnYWRzX2FtYXpvbl9zZWxsZXInKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1lbHNlIGlmKGlkID09PSAnYWRzX2FtYXpvbl9hZHZlcnRpc2luZycgfHwgaWQgPT09ICdhZHNfdmVuZG9yX3NhbGVzJyB8fCBpZCA9PT0gJ2Fkc19zZWxsZXJfc2FsZXMnKSB7XG4gICAgICBmb3IobGV0IHNldHRpbmdzIG9mIHN1YnMpe1xuICAgICAgICBpZihzZXR0aW5ncy50eXBlICE9IHR5cGUgJiYgc2V0dGluZ3Muc3RhdHVzID09IFwiQUNUSVZFXCIpe1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICBcdH1cblxuXHRwdWJsaWMgY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgYWNjVHlwZSAsc3ViVHlwZSkge1xuXHRcdGlmKHN1YlR5cGUgPT09IGFjY1R5cGUpe1xuXHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50VHlwZVN1YiA9IHN1YnMuZmlsdGVyKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udHlwZSA9PT0gc3ViVHlwZSk7XG5cdFx0aWYoY3VycmVudFR5cGVTdWIubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudFR5cGVTdWJbMF0uc3RhdHVzID09PSAnQUNUSVZFJyB8fCBjdXJyZW50VHlwZVN1YlswXS50eXBlID09PSBhY2NUeXBlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRBcHBsaWNhdGlvbklEKCkge1xuXHRcdGxldCB1cmxBcnJheSA9IHRoaXMudXJsQ29udGV4dFNlcnZpY2Uucm91dGVyLnVybC5zcGxpdCgnLycpO1xuXHRcdGxldCBjdXJyZW50Um91dGUgPSB1cmxBcnJheVt1cmxBcnJheS5sZW5ndGggLSAxXTtcblx0XHRcblx0XHRpZih0aGlzLmNvbnRlbnRBcHBSb3V0ZXMuaW5kZXhPZihjdXJyZW50Um91dGUpPi0xICkge1xuXHRcdFx0cmV0dXJuIFwiYWRzX2FtYXpvbl9jb250ZW50X2NvbnRlbnRfYW5hbHl0aWNzXCI7XG5cdFx0fSBlbHNlIGlmKHRoaXMuc292QXBwUm91dGVzLmluZGV4T2YoY3VycmVudFJvdXRlKT4tMSkge1xuXHRcdFx0cmV0dXJuIFwiYWRzX2FtYXpvbl9jb250ZW50X3NoYXJlX29mX3ZvaWNlXCI7XG5cdFx0fVxuXHR9XG59Il19
|