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.
@@ -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 "./url-context.service";
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 = ['ads_amazon_advertising', 'ads_seller_sales', 'ads_vendor_sales', 'ads_amazon_content_share_of_voice', 'ads_amazon_content_content_analytics', 'ads_amazon_dsp', 'ads_amazon_attribution', 'ads_instacart', 'ads_criteo', 'ads_walmart', 'ads_data_platform', 'amc-platform-web', 'ads_amazon_seller_seller_analytics', 'ads_amazon_seller_vendor_analytics'];
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 = this.constructChildMenus(MENULIST);
80
- let MENULIST_SORTED = MENULIST.sort((a, b) => (a.order > b.order) ? 1 : -1);
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 MENULIST_SORTED) {
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 GLOBAL_SETTING_LIST_SORTED = GLOBAL_SETTING_LIST.sort((a, b) => (a.order > b.order) ? 1 : -1);
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" && !this.appDetails.currentOrganization['noActiveAccounts'])) {
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 this.conditions) {
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
- includeMenu = this.checkForNotAccName(currentMenuItem[cond]);
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
- // case 'subscription_types' : {
295
- // if(currentMenuItem['account_type'] == undefined){
296
- // if(this.appDetails.currentAccount && this.appDetails.currentAccount.subscription) {
297
- // includeMenu = this.checkForSubscriptions(currentMenuItem[cond])
298
- // } else {
299
- // includeMenu = false;
300
- // }
301
- // }else{
302
- // if(this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
303
- // includeMenu = this.checkForAccType(currentMenuItem);
304
- // } else {
305
- // includeMenu = false;
306
- // }
307
- // }
308
- // break;
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.indexOf(+this.appDetails.sidebarInfo.siteId) >= 0) {
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
- if (this.appDetails.orgSettings) {
417
- for (let settings of this.appDetails.orgSettings) {
418
- if (possibleValues.indexOf(settings.setting) >= 0) {
419
- return true;
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
- else {
425
- return false;
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
- for (let settings of this.appDetails.orgSettings) {
447
- if (!isAdminRole && possibleValues.indexOf(settings.setting) > -1) {
448
- allow = false;
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
- if (item.organizations) {
498
- if (item.visibility_sa_roles.includes(this.appDetails.userInfo.role) ||
499
- (item.organizations && item.visibilityroles && item.organizations.includes(id) && item.visibilityroles.includes(this.appDetails.userInfo.role))) {
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.indexOf(this.appDetails.userInfo.role) >= 0) {
526
- return true;
527
- }
528
- else {
529
- return false;
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.indexOf(this.appDetails.userInfo.role) >= 0) {
534
- return false;
535
- }
536
- else {
537
- return true;
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