application-sidebar 1.0.41 → 2.0.0

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,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE5hdk1lbnVJdGVtIHtcbiAgICBpZDpzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6c3RyaW5nO1xuICAgIGxldmVsPzpzdHJpbmc7XG4gICAgbGluazogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgc3ltYm9sPzpzdHJpbmc7XG4gICAgYmFkZ2U/OnN0cmluZztcbiAgICBjb3VudEtleT86c3RyaW5nO1xuICAgIHJlY0NvdW50PzpzdHJpbmc7XG4gICAgcm91dGU6IHN0cmluZztcbiAgICBleHRlcm5hbF9saW5rPzpzdHJpbmc7XG4gICAgYWNjb3VudF90eXBlPzphbnlbXTtcbiAgICB2aXNpYmlsaXR5X3JvbGVzPzphbnlbXTtcbiAgICBhY2NvdW50X2lkcz86YW55W10sXG4gICAgYWNjb3VudF9pZHNfbm90X2luPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzX25vdF9pbj86YW55W10sXG4gICAgb3JnYW5pemF0aW9uX3NldHRpbmc/OmFueVtdO1xuICAgIG9yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbj86YW55W10sXG4gICAgc3Vic2NyaXB0aW9uX3R5cGVzPzphbnlbXTtcbiAgICBjYW1wYWlnbl90eXBlcz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0PzphbnlbXTtcbiAgICBub3RfYWNjb3VudF9uYW1lPzphbnlbXTtcbiAgICB1c2VyX2VtYWlscz86YW55W107XG4gICAgaGlkZV9mb3JfdXNlcj86Ym9vbGVhbjtcbiAgICBzdHlsZV9jbGFzc2VzPzpzdHJpbmc7XG4gICAgc2l0ZUlkcz8gOiBhbnk7XG4gICAgc2l0ZU5vdElkcz8gOiBhbnk7XG4gICAgZGVmYXVsdHVybD86c3RyaW5nO1xuICAgIG1hdGNoUm91dGVzPzphbnlbXTtcbiAgICB2aXNpYmlsaXR5X3JvbGVzX25vdF9pbj86YW55W107XG4gICAgYXBwX3NwYWNpZmljX2NvbmZpZ19jaGVjaz86QXJyYXk8U3RyaW5nPjtcbiAgfVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE5hdk1lbnVJdGVtIHtcbiAgICBpZDpzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6c3RyaW5nO1xuICAgIGxldmVsPzpzdHJpbmc7XG4gICAgbGluazogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgc3ltYm9sPzpzdHJpbmc7XG4gICAgYmFkZ2U/OnN0cmluZztcbiAgICBjb3VudEtleT86c3RyaW5nO1xuICAgIHJlY0NvdW50PzpzdHJpbmc7XG4gICAgcm91dGU6IHN0cmluZztcbiAgICBleHRlcm5hbF9saW5rPzpzdHJpbmc7XG4gICAgYWNjb3VudF90eXBlPzphbnlbXTtcbiAgICB2aXNpYmlsaXR5X3JvbGVzPzphbnlbXTtcbiAgICBhY2NvdW50X2lkcz86YW55W10sXG4gICAgYWNjb3VudF9pZHNfbm90X2luPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzX25vdF9pbj86YW55W10sXG4gICAgb3JnYW5pemF0aW9uX3NldHRpbmc/OmFueVtdO1xuICAgIG9yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbj86YW55W10sXG4gICAgc3Vic2NyaXB0aW9uX3R5cGVzPzphbnlbXTtcbiAgICBjYW1wYWlnbl90eXBlcz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0PzphbnlbXTtcbiAgICBub3RfYWNjb3VudF9uYW1lPzphbnlbXTtcbiAgICB1c2VyX2VtYWlscz86YW55W107XG4gICAgaGlkZV9mb3JfdXNlcj86Ym9vbGVhbjtcbiAgICBzdHlsZV9jbGFzc2VzPzpzdHJpbmc7XG4gICAgc2l0ZUlkcz8gOiBhbnk7XG4gICAgc2l0ZU5vdElkcz8gOiBhbnk7XG4gICAgZGVmYXVsdHVybD86c3RyaW5nO1xuICAgIG1hdGNoUm91dGVzPzphbnlbXTtcbiAgICBjaGlsZF9yb3V0ZXM/OmFueVtdO1xuICAgIHZpc2liaWxpdHlfcm9sZXNfbm90X2luPzphbnlbXTtcbiAgICBhcHBfc3BhY2lmaWNfY29uZmlnX2NoZWNrPzpBcnJheTxTdHJpbmc+O1xuICAgIG93bmVyQXBwSWQ/OiBzdHJpbmc7XG4gICAgc291cmNlTWVudUlkPzogc3RyaW5nO1xuICAgIHNvdXJjZVBhcmVudElkPzogc3RyaW5nO1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmdbXTtcbiAgICBjaGlsZHJlbj86IE5hdk1lbnVJdGVtW107XG4gICAgYWxsX2FjY291bnRzPzogYm9vbGVhbjtcbiAgfVxuIl19
@@ -137,7 +137,21 @@ export class NavMenusComponent {
137
137
  }
138
138
  if ((this.parentMenuId.indexOf(this.applicationId) >= 0 && !appId) || (appId && appId.indexOf(this.applicationId) >= 0)) {
139
139
  if (listMenu.route != '') {
140
- if (this.urlContextService.validateKeyStroke(event)) {
140
+ // Legacy ui-router targets ship as `#!/...` in `route` (see navmenu1); Angular Router cannot navigate those.
141
+ if (typeof listMenu.route === 'string' && listMenu.route.indexOf('#') >= 0) {
142
+ const hostExtras = { appId: this.applicationId };
143
+ if (this.urlContextService.validateKeyStroke(event)) {
144
+ this.openInNewTab(listMenu.route, false, hostExtras);
145
+ resolve();
146
+ }
147
+ else {
148
+ this.showLoader();
149
+ this.navigation.getHostOriginAndNavigate(listMenu.route, hostExtras);
150
+ this.menuClicked.emit({ activePanel: this.parentPanelId });
151
+ resolve();
152
+ }
153
+ }
154
+ else if (this.urlContextService.validateKeyStroke(event)) {
141
155
  this.openInNewTab(listMenu.route, true);
142
156
  resolve();
143
157
  }
@@ -166,14 +180,19 @@ export class NavMenusComponent {
166
180
  }
167
181
  }
168
182
  else {
169
- const url = listMenu.link;
183
+ let url = listMenu.link;
184
+ let hostNavExtras = undefined;
185
+ if (this.navigation.shouldUseHashRouteForCrossAppHostNav(listMenu)) {
186
+ url = listMenu.route;
187
+ hostNavExtras = { appId: this.applicationId };
188
+ }
170
189
  if (this.urlContextService.validateKeyStroke(event)) {
171
- this.openInNewTab(url, false);
190
+ this.openInNewTab(url, false, hostNavExtras);
172
191
  resolve();
173
192
  }
174
193
  else {
175
194
  this.showLoader();
176
- this.navigation.getHostOriginAndNavigate(url);
195
+ this.navigation.getHostOriginAndNavigate(url, hostNavExtras);
177
196
  resolve();
178
197
  }
179
198
  }
@@ -213,8 +232,13 @@ export class NavMenusComponent {
213
232
  }
214
233
  }
215
234
  else {
216
- const url = item.link;
217
- this.openInNewTab(url, false);
235
+ let url = item.link;
236
+ let hostNavExtras = undefined;
237
+ if (this.navigation.shouldUseHashRouteForCrossAppHostNav(item)) {
238
+ url = item.route;
239
+ hostNavExtras = { appId: this.applicationId };
240
+ }
241
+ this.openInNewTab(url, false, hostNavExtras);
218
242
  }
219
243
  }
220
244
  }
@@ -268,11 +292,11 @@ export class NavMenusComponent {
268
292
  }, 5000);
269
293
  }
270
294
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavMenusComponent, deps: [{ token: i1.ApplicationSidebarService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.UrlContextService }, { token: i4.CookieService }, { token: i5.TranslationService }], target: i0.ɵɵFactoryTarget.Component });
271
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NavMenusComponent, selector: "lnc-nav-menus", inputs: { item: "item", applicationId: "applicationId", parentMenuId: "parentMenuId", parentPanelId: "parentPanelId", isActiveItem: "isActiveItem" }, outputs: { menuClicked: "menuClicked" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'global_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text font-color-black navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{selectedApplication(item)}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <!-- <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> -->\n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" class=\"activeRecCount\" *ngIf=\"hasWalmartRecommendation(item)\">{{recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:13px!important;line-height:36px;color:#202b37}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#fdeeec;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"], dependencies: [{ kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i9.MatLine, selector: "[mat-line], [matLine]" }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i12.OffsetTopDirective, selector: "[appOffsetTop]", inputs: ["isActiveItem"] }] });
295
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NavMenusComponent, selector: "lnc-nav-menus", inputs: { item: "item", applicationId: "applicationId", parentMenuId: "parentMenuId", parentPanelId: "parentPanelId", isActiveItem: "isActiveItem" }, outputs: { menuClicked: "menuClicked" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'global_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{selectedApplication(item)}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <!-- <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> -->\n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" class=\"activeRecCount\" *ngIf=\"hasWalmartRecommendation(item)\">{{recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:15.5px!important;line-height:36px;color:#202b37;margin:0!important}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none;background-color:#f6f6f6}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#f6f6f6;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"], dependencies: [{ kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i9.MatLine, selector: "[mat-line], [matLine]" }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i12.OffsetTopDirective, selector: "[appOffsetTop]", inputs: ["isActiveItem"] }] });
272
296
  }
273
297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavMenusComponent, decorators: [{
274
298
  type: Component,
275
- args: [{ selector: 'lnc-nav-menus', template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'global_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text font-color-black navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{selectedApplication(item)}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <!-- <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> -->\n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" class=\"activeRecCount\" *ngIf=\"hasWalmartRecommendation(item)\">{{recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:13px!important;line-height:36px;color:#202b37}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#fdeeec;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"] }]
299
+ args: [{ selector: 'lnc-nav-menus', template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'global_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{selectedApplication(item)}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <!-- <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> -->\n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" class=\"activeRecCount\" *ngIf=\"hasWalmartRecommendation(item)\">{{recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:15.5px!important;line-height:36px;color:#202b37;margin:0!important}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none;background-color:#f6f6f6}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#f6f6f6;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"] }]
276
300
  }], ctorParameters: function () { return [{ type: i1.ApplicationSidebarService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.UrlContextService }, { type: i4.CookieService }, { type: i5.TranslationService }]; }, propDecorators: { menuClicked: [{
277
301
  type: Output
278
302
  }], item: [{
@@ -289,4 +313,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
289
313
  type: ViewChild,
290
314
  args: [MatMenuTrigger]
291
315
  }] } });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTJCLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU1yRSxNQUFNLE9BQU8saUJBQWlCO0lBbUJuQjtJQUNDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF2QkEsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDMUMsSUFBSSxDQUFjO0lBQ2xCLGFBQWEsQ0FBUTtJQUNyQixZQUFZLENBQVE7SUFDcEIsYUFBYSxDQUFRO0lBQ3JCLFlBQVksQ0FBUTtJQUM3QixRQUFRLENBQVU7SUFFbEIsV0FBVyxDQUFNO0lBRWpCLFdBQVcsQ0FBaUI7SUFFNUIsbUJBQW1CLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxF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cG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZNZW51SXRlbSB9IGZyb20gJy4uL25hdi1tZW51LWl0ZW0nO1xuaW1wb3J0IHtSb3V0ZXIsQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TaWRlYmFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uLXNpZGViYXIuc2VydmljZSdcbmltcG9ydCB7IFVybENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXJsLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xuYy1uYXYtbWVudXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LW1lbnVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmF2LW1lbnVzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmF2TWVudXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAT3V0cHV0KCkgbWVudUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQElucHV0KCkgaXRlbTogTmF2TWVudUl0ZW07XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uSWQ6c3RyaW5nO1xuICBASW5wdXQoKSBwYXJlbnRNZW51SWQ6c3RyaW5nO1xuICBASW5wdXQoKSBwYXJlbnRQYW5lbElkOnN0cmluZztcbiAgQElucHV0KCkgaXNBY3RpdmVJdGVtOmJvb2xlYW5cbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG5cbiAgcXVlcnlQYXJhbXM6IGFueTtcbiAgQFZpZXdDaGlsZChNYXRNZW51VHJpZ2dlcilcbiAgY29udGV4dE1lbnU6IE1hdE1lbnVUcmlnZ2VyO1xuXG4gIGNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6ICcwcHgnLCB5OiAnMHB4JyB9O1xuXG4gIHRyYW5zbGF0aW9uOiBhbnk7XG4gIHJlY0NvdW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hdmlnYXRpb246IEFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UsIFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHVybENvbnRleHRTZXJ2aWNlOiBVcmxDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIGNvb2tpZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTpUcmFuc2xhdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgfVxuXG4gIHB1YmxpYyBoYXNJY29uKGl0ZW06TmF2TWVudUl0ZW0pe1xuICAgIHJldHVybiAoaXRlbS5pY29uICE9IHVuZGVmaW5lZCAmJiBpdGVtLmljb24gIT0gJycpO1xuICB9XG5cbiAgcHVibGljIGhhc1dhbG1hcnRSZWNvbW1lbmRhdGlvbihpdGVtOk5hdk1lbnVJdGVtKXtcbiAgICBpZihpdGVtLmlkID09IFwid2FsbWFydF9yZWNvbW1lbmRhdGlvbnNcIil7XG4gICAgICB0aGlzLnJlY0NvdW50ID0gdGhpcy5uYXZpZ2F0aW9uLmFwcERldGFpbHMucmVjQ291bnQ7XG4gICAgICBpZih0aGlzLnJlY0NvdW50ICYmIHRoaXMucmVjQ291bnQ+MCl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgcHVibGljIHNlbGVjdGVkQXBwbGljYXRpb24obmFtZSl7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLnNlbGVjdGVkQXBwbGljYXRpb24odGhpcy5uYXZpZ2F0aW9uLmFwcERldGFpbHMsIG5hbWUpO1xuICB9XG4gIFxuICBwdWJsaWMgZ2V0U3BlY2lmaWVkVmFsdWUoa2V5OnN0cmluZyl7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbi5mZXRjaEtleVZhbHVlKGtleSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RNZW51KGV2ZW50OmFueSxsaXN0TWVudTpOYXZNZW51SXRlbSwgYXBwSWQ/OmFueSkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2FwcElkJyAsIHRoaXMucGFyZW50UGFuZWxJZCAsIHRoaXMuYXBwbGljYXRpb25JZCk7XG4gICAgICAvLyBvbiBzaGlmdCtjbGljayBvcGVuIHVybCBpbiBuZXcgdGFiIGFsb25nIHdpdGggY29udGV4dCBwYXJhbXNcbiAgICAgIGlmKCh0aGlzLnBhcmVudFBhbmVsSWQgPT09ICdpYWNfaW5zaWdodHMnICYmIHRoaXMuYXBwbGljYXRpb25JZCA9PT0gJ2Fkc19kYXRhX3BsYXRmb3JtJykgfHwgdGhpcy5wYXJlbnRNZW51SWQgPT09ICdhcHBfZ2xvYmFsX3NldHRpbmdzJyB8fCBhcHBJZCA9PT0gJ2FwcF9nbG9iYWxfc2V0dGluZ3MnKXtcbiAgICAgICAgaWYobGlzdE1lbnUuaWQgPT09ICdnbG9iYWxfYWNjb3VudF9tZ210JyB8fCBsaXN0TWVudS5pZCA9PT0gJ2lhY19pbnNpZ2h0c191c2VyX21nbXQnKXtcbiAgICAgICAgICBjb25zdCB1cmwgPSBsaXN0TWVudS5yb3V0ZTtcbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbklkID09IFwiYWRzX2FtYXpvbl9jb250ZW50XCIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IHRoaXMubmF2aWdhdGlvbi5nZXRBcHBsaWNhdGlvbklEKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih1cmwsZmFsc2UseyBhcHBJZCA6IHRoaXMuYXBwbGljYXRpb25JZH0pXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsICwgeyBhcHBJZCA6IHRoaXMuYXBwbGljYXRpb25JZH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgaWYgKGxpc3RNZW51LnJvdXRlICE9ICcnKSB7XG4gICAgICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIobGlzdE1lbnUucm91dGUsdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdWVyeSBQYXJhbXMgPSBcIiAsdGhpcy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGlzdE1lbnUucm91dGVdICwgeyBxdWVyeVBhcmFtcyA6IHRoaXMucXVlcnlQYXJhbXMgfSlcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVudUNsaWNrZWQuZW1pdCh7YWN0aXZlUGFuZWwgOiB0aGlzLnBhcmVudFBhbmVsSWR9KTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgYWxlcnQoJ25vIHJvdXRlIHRvIG5hdmlnYXRlJyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ZWxzZSBpZihsaXN0TWVudS5kZWZhdWx0dXJsKXtcbiAgICAgICAgY29uc3QgdXJsID0gbGlzdE1lbnUuZGVmYXVsdHVybDtcbiAgICAgICAgaWYobGlzdE1lbnUuaWQgPT0gXCJhZHNfdmVuZG9yX3NhbGVzXCIgfHwgbGlzdE1lbnUuaWQgPT0gJ2Fkc19zZWxsZXJfc2FsZXMnKXtcbiAgICAgICAgICB0aGlzLnNob3dMb2FkZXIoKTtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb24uZ2V0SG9zdE9yaWdpbkFuZE5hdmlnYXRlKHVybCwgeyBhcHBJZCA6IGxpc3RNZW51LmlkfSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMuc2hvd0xvYWRlcigpO1xuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICBpZihsaXN0TWVudS5leHRlcm5hbF9saW5rICYmIGxpc3RNZW51LmV4dGVybmFsX2xpbmsgIT0gJycpe1xuICAgICAgICAgIHdpbmRvdy5vcGVuKGAke2xpc3RNZW51LmV4dGVybmFsX2xpbmt9YCwgJ19ibGFuaycpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZigodGhpcy5wYXJlbnRNZW51SWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uSWQpID49IDAgJiYgIWFwcElkKSB8fCAoYXBwSWQgJiYgYXBwSWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uSWQpID49IDApICl7XG4gICAgICAgICAgaWYgKGxpc3RNZW51LnJvdXRlICE9ICcnKSB7XG4gICAgICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIobGlzdE1lbnUucm91dGUsdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTGVuZ3RoID0gXCIgLHRoaXMucXVlcnlQYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlSXRlbSA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgaWYoT2JqZWN0LmtleXModGhpcy5xdWVyeVBhcmFtcykubGVuZ3RoICE9IDApe1xuICBcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpc3RNZW51LnJvdXRlXSwgeyBxdWVyeVBhcmFtcyA6IHRoaXMucXVlcnlQYXJhbXMgfSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51Q2xpY2tlZC5lbWl0KHthY3RpdmVQYW5lbCA6IHRoaXMucGFyZW50UGFuZWxJZH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGlzdE1lbnUucm91dGVdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVDbGlja2VkLmVtaXQoe2FjdGl2ZVBhbmVsIDogdGhpcy5wYXJlbnRQYW5lbElkfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSBcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgYWxlcnQoJ25vIHJvdXRlIHRvIG5hdmlnYXRlJyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBjb25zdCB1cmwgPSBsaXN0TWVudS5saW5rO1xuICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih1cmwsZmFsc2UpXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbnRleHRNZW51KGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBOYXZNZW51SXRlbSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnggPSBldmVudC5jbGllbnRYICsgJ3B4JztcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueSA9IGV2ZW50LmNsaWVudFkgKyAncHgnO1xuICAgIHRoaXMuY29udGV4dE1lbnUubWVudURhdGEgPSB7ICdpdGVtJzogaXRlbSB9O1xuICAgIHRoaXMuY29udGV4dE1lbnUubWVudS5mb2N1c0ZpcnN0SXRlbSgnbW91c2UnKTtcbiAgICB0aGlzLmNvbnRleHRNZW51Lm9wZW5NZW51KCk7XG4gIH1cblxuICBvbkNvbnRleHRNZW51QWN0aW9uKGl0ZW06IE5hdk1lbnVJdGVtKSB7XG5cbiAgICBpZih0aGlzLnBhcmVudE1lbnVJZCA9PT0gJ2FwcF9nbG9iYWxfc2V0dGluZ3MnKXtcbiAgICAgIGlmKGl0ZW0uaWQgPT09ICdnbG9iYWxfYWNjb3VudF9tZ210Jyl7XG4gICAgICAgIGNvbnN0IHVybCA9IGl0ZW0ucm91dGU7XG4gICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHVybCxmYWxzZSx7IGFwcElkIDogdGhpcy5hcHBsaWNhdGlvbklkfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXRlbS5yb3V0ZSAhPSAnJykge1xuICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihpdGVtLnJvdXRlLHRydWUpXG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBpZihpdGVtLmV4dGVybmFsX2xpbmsgJiYgaXRlbS5leHRlcm5hbF9saW5rICE9ICcnKXtcbiAgICAgICAgd2luZG93Lm9wZW4oYCR7aXRlbS5leHRlcm5hbF9saW5rfWAsICdfYmxhbmsnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZihpdGVtLmlkID09PSAnaWFjX2luc2lnaHRzX3VzZXJfbWdtdCcpe1xuICAgICAgICBjb25zdCB1cmwgPSBpdGVtLnJvdXRlLnNwbGl0KCc/JylbMF07XG4gICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHVybCxmYWxzZSx7IGFwcElkIDogdGhpcy5hcHBsaWNhdGlvbklkICwgdXNlcm1nbXQgOiB0cnVlfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodGhpcy5wYXJlbnRNZW51SWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uSWQpID49IDAgICl7XG4gICAgICAgIGlmIChpdGVtLnJvdXRlICE9ICcnKSB7XG4gICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIoaXRlbS5yb3V0ZSx0cnVlKVxuICAgICAgICB9XG4gICAgICB9IFxuICAgICAgZWxzZXtcbiAgICAgICAgICBjb25zdCB1cmwgPSBpdGVtLmxpbms7XG4gICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuSW5OZXdUYWIobGluayxpc1JvdXRlckxpbmssYXBwbGljYXRpb25JZCA9IHVuZGVmaW5lZCl7XG4gICAgbGV0IGRhdGVUaXRsZSA9IHRoaXMuZmV0Y2hEYXRlUmFuZ2UoKTtcbiAgICBsZXQgZGF0ZVJhbmdlVmFsID0gdGhpcy51cmxDb250ZXh0U2VydmljZS5zZXREYXRlUmFuZ2VVcmxWYWwoZGF0ZVRpdGxlKTtcbiAgICBcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgPT0gdW5kZWZpbmVkKXtcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgb2lkIDogdGhpcy5uYXZpZ2F0aW9uLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCxcbiAgICAgICAgZHIgOiBkYXRlUmFuZ2VWYWwsXG4gICAgICB9XG4gICAgICBpZihhcHBsaWNhdGlvbklkKXtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSB7Li4ucXVlcnlQYXJhbXMsIC4uLmFwcGxpY2F0aW9uSWR9XG4gICAgICB9XG4gICAgICB0aGlzLnVybENvbnRleHRTZXJ2aWNlLnNldFVybEFuZE9wZW5UYWIobGluayxxdWVyeVBhcmFtcyxpc1JvdXRlckxpbmspO1xuICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgIGFpZCA6IHRoaXMubmF2aWdhdGlvbi5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCxcbiAgICAgICAgYmlkIDogdGhpcy5uYXZpZ2F0aW9uLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYnVzaW5lc3NHcm91cElkLFxuICAgICAgICBvaWQgOiB0aGlzLm5hdmlnYXRpb24uYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCxcbiAgICAgICAgZHIgOiBkYXRlUmFuZ2VWYWwsXG4gICAgICB9XG4gICAgICBpZihhcHBsaWNhdGlvbklkKXtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSB7Li4ucXVlcnlQYXJhbXMsIC4uLmFwcGxpY2F0aW9uSWR9XG4gICAgICB9XG4gICAgICB0aGlzLnVybENvbnRleHRTZXJ2aWNlLnNldFVybEFuZE9wZW5UYWIobGluayxxdWVyeVBhcmFtcyxpc1JvdXRlckxpbmspO1xuICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hEYXRlUmFuZ2UoKXtcbiAgICBpZih0aGlzLnF1ZXJ5UGFyYW1zLmhhc093blByb3BlcnR5KCd0aWQnKSAmJiB0aGlzLnF1ZXJ5UGFyYW1zLmhhc093blByb3BlcnR5KCdkcicpKXtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5UGFyYW1zWydkciddO1xuICAgIH1lbHNle1xuICAgICAgY29uc3QgbG9nZ2VkSW5Vc2VyID0gSlNPTi5wYXJzZSh0aGlzLmNvb2tpZS5nZXQoJ2xvZ2dlZEluVXNlcicpKTtcbiAgICAgIGNvbnNvbGUubG9nKCdMb2dnZWQgPSAnLGxvZ2dlZEluVXNlcik7XG4gICAgICByZXR1cm4gbG9nZ2VkSW5Vc2VyLmRhdGVSYW5nZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvd0xvYWRlcigpe1xuICAgIGxldCBsb2FkZXJfZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2FkZXJfc292Jyk7XG4gICAgICBpZihsb2FkZXJfZGl2KXtcbiAgICAgICAgbG9hZGVyX2Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfVxuICAgXG4gICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZihsb2FkZXJfZGl2KXtcbiAgICAgICAgIGxvYWRlcl9kaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgICB9LCA1MDAwKTtcbiAgfVxuXG59XG4iLCI8YSBhcHBPZmZzZXRUb3AgY2xhc3M9XCJzaWRlbWVudS1vcHRpb24ge3tpdGVtLnN0eWxlX2NsYXNzZXN9fVwiIG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm9uU2VsZWN0TWVudSgkZXZlbnQsaXRlbSlcIlxuICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2xlYWYnXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZUl0ZW19XCIgKGNvbnRleHRtZW51KT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50LCBpdGVtKVwiPlxuICA8IS0tIDxzcGFuIGNsYXNzPVwie3tpdGVtLmlkfX1faWNvblwiICpuZ0lmPVwiaXRlbS5pZCA9PSAnZ2xvYmFsX2FjY291bnRfbWdtdCdcIj48L3NwYW4+IC0tPlxuICA8aDMgbWF0TGluZSBjbGFzcz1cInNpZGVtZW51LXRleHQgZm9udC1jb2xvci1ibGFjayBuYXZNZW51cyBhcHBsaWNhdGlvbk1lbnVcIiBbbmdDbGFzc109XCJ7J21hcmdpbi1sZWZ0LTEwJzogaXRlbS5sZXZlbCA9PSAndHdvJywgXG4gICAgJ21hcmdpbi1sZWZ0LTM2JzogaXRlbS5sZXZlbCAhPSAndHdvJ31cIj5cbiAgICB7e3NlbGVjdGVkQXBwbGljYXRpb24oaXRlbSl9fVxuICAgIDxzcGFuIGlkPVwiYWN0aXZlQ291bnRcIiAqbmdJZj1cIml0ZW0uY291bnRLZXkgJiYgZ2V0U3BlY2lmaWVkVmFsdWUoaXRlbS5jb3VudEtleSlcIiBjbGFzcz1cIm5nLWJpbmRpbmcgbmctc2NvcGVcIj5cbiAgICAgIHt7IGdldFNwZWNpZmllZFZhbHVlKGl0ZW0uY291bnRLZXkpIH19XG4gICAgPC9zcGFuPlxuICAgIDwhLS0gPHNwYW4gaWQ9XCJhY3RpdmVSZWNDb3VudFwiICpuZ0lmPVwiaXRlbS5uYW1lID09ICdSZWNvbW1lbmRhdGlvbnMnICYmIGl0ZW0ucmVjQ291bnQgIT0gJycgJiYgaXRlbS5yZWNDb3VudCAhPSAnMCcgJiYgaXRlbS5yZWNDb3VudCAhPSBudWxsXCIgY2xhc3M9XCJhY3RpdmVSZWNDb3VudFwiPnt7aXRlbS5yZWNDb3VudH19PC9zcGFuPiAgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCIgW2lubmVySFRNTF09XCJpdGVtLmJhZGdlXCI+PC9zcGFuPlxuICAgIDxzcGFuIGlkPVwiYWN0aXZlUmVjQ291bnRcIiBjbGFzcz1cImFjdGl2ZVJlY0NvdW50XCIgKm5nSWY9XCJoYXNXYWxtYXJ0UmVjb21tZW5kYXRpb24oaXRlbSlcIj57e3JlY0NvdW50fX08L3NwYW4+IFxuICA8L2gzPlxuPC9hPlxuPGRpdiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcbiAgW3N0eWxlLnRvcF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIj5cbjwvZGl2PlxuPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cIm5ld1RhYk1lbnVcIj48L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uQ29udGV4dE1lbnVBY3Rpb24oaXRlbSlcIiBjbGFzcz1cIm5ld1RhYk1lbnVcIiBpZD1cIm5ld1RhYkFjdGlvbkJ0blwiPk9wZW4gaW4gbmV3XG4gICAgICB0YWI8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJuZXdUYWJNZW51XCI+PC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuPG1hdC1kaXZpZGVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnc2VwYXJhdG9yJ1wiIGNsYXNzPVwic2VwYXJhdG9yXCI+PC9tYXQtZGl2aWRlcj4iXX0=
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTJCLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU1yRSxNQUFNLE9BQU8saUJBQWlCO0lBbUJuQjtJQUNDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF2QkEsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDMUMsSUFBSSxDQUFjO0lBQ2xCLGFBQWEsQ0FBUTtJQUNyQixZQUFZLENBQVE7SUFDcEIsYUFBYSxDQUFRO0lBQ3JCLFlBQVksQ0FBUTtJQUM3QixRQUFRLENBQVU7SUFFbEIsV0FBVyxDQUFNO0lBRWpCLFdBQVcsQ0FBaUI7SUFFNUIsbUJBQW1CLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxF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c0JBQXBCLEtBQUs7Z0JBS04sV0FBVztzQkFEVixTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdk1lbnVJdGVtIH0gZnJvbSAnLi4vbmF2LW1lbnUtaXRlbSc7XG5pbXBvcnQge1JvdXRlcixBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlJ1xuaW1wb3J0IHsgVXJsQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91cmwtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbG5jLW5hdi1tZW51cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXYtbWVudXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYXYtbWVudXMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZNZW51c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBtZW51Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBASW5wdXQoKSBpdGVtOiBOYXZNZW51SXRlbTtcbiAgQElucHV0KCkgYXBwbGljYXRpb25JZDpzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmVudE1lbnVJZDpzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmVudFBhbmVsSWQ6c3RyaW5nO1xuICBASW5wdXQoKSBpc0FjdGl2ZUl0ZW06Ym9vbGVhblxuICBleHBhbmRlZDogYm9vbGVhbjtcblxuICBxdWVyeVBhcmFtczogYW55O1xuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKVxuICBjb250ZXh0TWVudTogTWF0TWVudVRyaWdnZXI7XG5cbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogJzBweCcsIHk6ICcwcHgnIH07XG5cbiAgdHJhbnNsYXRpb246IGFueTtcbiAgcmVjQ291bnQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmF2aWdhdGlvbjogQXBwbGljYXRpb25TaWRlYmFyU2VydmljZSwgXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOkFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdXJsQ29udGV4dFNlcnZpY2U6IFVybENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29va2llOiBDb29raWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOlRyYW5zbGF0aW9uU2VydmljZVxuICAgICkge1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKTtcbiAgICB9KTtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXhwYW5kZWQnKSBhcmlhRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xuICB9XG5cbiAgcHVibGljIGhhc0ljb24oaXRlbTpOYXZNZW51SXRlbSl7XG4gICAgcmV0dXJuIChpdGVtLmljb24gIT0gdW5kZWZpbmVkICYmIGl0ZW0uaWNvbiAhPSAnJyk7XG4gIH1cblxuICBwdWJsaWMgaGFzV2FsbWFydFJlY29tbWVuZGF0aW9uKGl0ZW06TmF2TWVudUl0ZW0pe1xuICAgIGlmKGl0ZW0uaWQgPT0gXCJ3YWxtYXJ0X3JlY29tbWVuZGF0aW9uc1wiKXtcbiAgICAgIHRoaXMucmVjQ291bnQgPSB0aGlzLm5hdmlnYXRpb24uYXBwRGV0YWlscy5yZWNDb3VudDtcbiAgICAgIGlmKHRoaXMucmVjQ291bnQgJiYgdGhpcy5yZWNDb3VudD4wKXtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9ICAgIFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIFxuICBwdWJsaWMgc2VsZWN0ZWRBcHBsaWNhdGlvbihuYW1lKXtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuc2VsZWN0ZWRBcHBsaWNhdGlvbih0aGlzLm5hdmlnYXRpb24uYXBwRGV0YWlscywgbmFtZSk7XG4gIH1cbiAgXG4gIHB1YmxpYyBnZXRTcGVjaWZpZWRWYWx1ZShrZXk6c3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uLmZldGNoS2V5VmFsdWUoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdE1lbnUoZXZlbnQ6YW55LGxpc3RNZW51Ok5hdk1lbnVJdGVtLCBhcHBJZD86YW55KSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnYXBwSWQnICwgdGhpcy5wYXJlbnRQYW5lbElkICwgdGhpcy5hcHBsaWNhdGlvbklkKTtcbiAgICAgIC8vIG9uIHNoaWZ0K2NsaWNrIG9wZW4gdXJsIGluIG5ldyB0YWIgYWxvbmcgd2l0aCBjb250ZXh0IHBhcmFtc1xuICAgICAgaWYoKHRoaXMucGFyZW50UGFuZWxJZCA9PT0gJ2lhY19pbnNpZ2h0cycgJiYgdGhpcy5hcHBsaWNhdGlvbklkID09PSAnYWRzX2RhdGFfcGxhdGZvcm0nKSB8fCB0aGlzLnBhcmVudE1lbnVJZCA9PT0gJ2FwcF9nbG9iYWxfc2V0dGluZ3MnIHx8IGFwcElkID09PSAnYXBwX2dsb2JhbF9zZXR0aW5ncycpe1xuICAgICAgICBpZihsaXN0TWVudS5pZCA9PT0gJ2dsb2JhbF9hY2NvdW50X21nbXQnIHx8IGxpc3RNZW51LmlkID09PSAnaWFjX2luc2lnaHRzX3VzZXJfbWdtdCcpe1xuICAgICAgICAgIGNvbnN0IHVybCA9IGxpc3RNZW51LnJvdXRlO1xuICAgICAgICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uSWQgPT0gXCJhZHNfYW1hem9uX2NvbnRlbnRcIikge1xuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbklkID0gdGhpcy5uYXZpZ2F0aW9uLmdldEFwcGxpY2F0aW9uSUQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYodGhpcy51cmxDb250ZXh0U2VydmljZS52YWxpZGF0ZUtleVN0cm9rZShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHVybCxmYWxzZSx7IGFwcElkIDogdGhpcy5hcHBsaWNhdGlvbklkfSlcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlcigpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZSh1cmwgLCB7IGFwcElkIDogdGhpcy5hcHBsaWNhdGlvbklkfSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBpZiAobGlzdE1lbnUucm91dGUgIT0gJycpIHtcbiAgICAgICAgICAgICAgaWYodGhpcy51cmxDb250ZXh0U2VydmljZS52YWxpZGF0ZUtleVN0cm9rZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihsaXN0TWVudS5yb3V0ZSx0cnVlKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlF1ZXJ5IFBhcmFtcyA9IFwiICx0aGlzLnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaXN0TWVudS5yb3V0ZV0gLCB7IHF1ZXJ5UGFyYW1zIDogdGhpcy5xdWVyeVBhcmFtcyB9KVxuICAgICAgICAgICAgICAgICAgdGhpcy5tZW51Q2xpY2tlZC5lbWl0KHthY3RpdmVQYW5lbCA6IHRoaXMucGFyZW50UGFuZWxJZH0pO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBhbGVydCgnbm8gcm91dGUgdG8gbmF2aWdhdGUnKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1lbHNlIGlmKGxpc3RNZW51LmRlZmF1bHR1cmwpe1xuICAgICAgICBjb25zdCB1cmwgPSBsaXN0TWVudS5kZWZhdWx0dXJsO1xuICAgICAgICBpZihsaXN0TWVudS5pZCA9PSBcImFkc192ZW5kb3Jfc2FsZXNcIiB8fCBsaXN0TWVudS5pZCA9PSAnYWRzX3NlbGxlcl9zYWxlcycpe1xuICAgICAgICAgIHRoaXMuc2hvd0xvYWRlcigpO1xuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsLCB7IGFwcElkIDogbGlzdE1lbnUuaWR9KTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy51cmxDb250ZXh0U2VydmljZS52YWxpZGF0ZUtleVN0cm9rZShldmVudCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih1cmwsZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5zaG93TG9hZGVyKCk7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZSh1cmwpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfWVsc2V7XG4gICAgICAgIGlmKGxpc3RNZW51LmV4dGVybmFsX2xpbmsgJiYgbGlzdE1lbnUuZXh0ZXJuYWxfbGluayAhPSAnJyl7XG4gICAgICAgICAgd2luZG93Lm9wZW4oYCR7bGlzdE1lbnUuZXh0ZXJuYWxfbGlua31gLCAnX2JsYW5rJyk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCh0aGlzLnBhcmVudE1lbnVJZC5pbmRleE9mKHRoaXMuYXBwbGljYXRpb25JZCkgPj0gMCAmJiAhYXBwSWQpIHx8IChhcHBJZCAmJiBhcHBJZC5pbmRleE9mKHRoaXMuYXBwbGljYXRpb25JZCkgPj0gMCkgKXtcbiAgICAgICAgICBpZiAobGlzdE1lbnUucm91dGUgIT0gJycpIHtcbiAgICAgICAgICAgICAgLy8gTGVnYWN5IHVpLXJvdXRlciB0YXJnZXRzIHNoaXAgYXMgYCMhLy4uLmAgaW4gYHJvdXRlYCAoc2VlIG5hdm1lbnUxKTsgQW5ndWxhciBSb3V0ZXIgY2Fubm90IG5hdmlnYXRlIHRob3NlLlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIGxpc3RNZW51LnJvdXRlID09PSAnc3RyaW5nJyAmJiBsaXN0TWVudS5yb3V0ZS5pbmRleE9mKCcjJykgPj0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RFeHRyYXMgPSB7IGFwcElkOiB0aGlzLmFwcGxpY2F0aW9uSWQgfTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51cmxDb250ZXh0U2VydmljZS52YWxpZGF0ZUtleVN0cm9rZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKGxpc3RNZW51LnJvdXRlLCBmYWxzZSwgaG9zdEV4dHJhcyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlcigpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZShsaXN0TWVudS5yb3V0ZSwgaG9zdEV4dHJhcyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lbnVDbGlja2VkLmVtaXQoe2FjdGl2ZVBhbmVsIDogdGhpcy5wYXJlbnRQYW5lbElkfSk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYodGhpcy51cmxDb250ZXh0U2VydmljZS52YWxpZGF0ZUtleVN0cm9rZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihsaXN0TWVudS5yb3V0ZSx0cnVlKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJMZW5ndGggPSBcIiAsdGhpcy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVJdGVtID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5UGFyYW1zKS5sZW5ndGggIT0gMCl7XG4gIFxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGlzdE1lbnUucm91dGVdLCB7IHF1ZXJ5UGFyYW1zIDogdGhpcy5xdWVyeVBhcmFtcyB9KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVDbGlja2VkLmVtaXQoe2FjdGl2ZVBhbmVsIDogdGhpcy5wYXJlbnRQYW5lbElkfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaXN0TWVudS5yb3V0ZV0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudUNsaWNrZWQuZW1pdCh7YWN0aXZlUGFuZWwgOiB0aGlzLnBhcmVudFBhbmVsSWR9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGFsZXJ0KCdubyByb3V0ZSB0byBuYXZpZ2F0ZScpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgbGV0IHVybCA9IGxpc3RNZW51Lmxpbms7XG4gICAgICAgICAgbGV0IGhvc3ROYXZFeHRyYXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbi5zaG91bGRVc2VIYXNoUm91dGVGb3JDcm9zc0FwcEhvc3ROYXYobGlzdE1lbnUpKSB7XG4gICAgICAgICAgICB1cmwgPSBsaXN0TWVudS5yb3V0ZTtcbiAgICAgICAgICAgIGhvc3ROYXZFeHRyYXMgPSB7IGFwcElkOiB0aGlzLmFwcGxpY2F0aW9uSWQgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYodGhpcy51cmxDb250ZXh0U2VydmljZS52YWxpZGF0ZUtleVN0cm9rZShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHVybCxmYWxzZSwgaG9zdE5hdkV4dHJhcylcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlcigpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLmdldEhvc3RPcmlnaW5BbmROYXZpZ2F0ZSh1cmwsIGhvc3ROYXZFeHRyYXMpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IE5hdk1lbnVJdGVtKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueCA9IGV2ZW50LmNsaWVudFggKyAncHgnO1xuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55ID0gZXZlbnQuY2xpZW50WSArICdweCc7XG4gICAgdGhpcy5jb250ZXh0TWVudS5tZW51RGF0YSA9IHsgJ2l0ZW0nOiBpdGVtIH07XG4gICAgdGhpcy5jb250ZXh0TWVudS5tZW51LmZvY3VzRmlyc3RJdGVtKCdtb3VzZScpO1xuICAgIHRoaXMuY29udGV4dE1lbnUub3Blbk1lbnUoKTtcbiAgfVxuXG4gIG9uQ29udGV4dE1lbnVBY3Rpb24oaXRlbTogTmF2TWVudUl0ZW0pIHtcblxuICAgIGlmKHRoaXMucGFyZW50TWVudUlkID09PSAnYXBwX2dsb2JhbF9zZXR0aW5ncycpe1xuICAgICAgaWYoaXRlbS5pZCA9PT0gJ2dsb2JhbF9hY2NvdW50X21nbXQnKXtcbiAgICAgICAgY29uc3QgdXJsID0gaXRlbS5yb3V0ZTtcbiAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlLHsgYXBwSWQgOiB0aGlzLmFwcGxpY2F0aW9uSWR9KVxuICAgICAgfVxuICAgICAgZWxzZSBpZihpdGVtLnJvdXRlICE9ICcnKSB7XG4gICAgICAgIHRoaXMub3BlbkluTmV3VGFiKGl0ZW0ucm91dGUsdHJ1ZSlcbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIGlmKGl0ZW0uZXh0ZXJuYWxfbGluayAmJiBpdGVtLmV4dGVybmFsX2xpbmsgIT0gJycpe1xuICAgICAgICB3aW5kb3cub3BlbihgJHtpdGVtLmV4dGVybmFsX2xpbmt9YCwgJ19ibGFuaycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmKGl0ZW0uaWQgPT09ICdpYWNfaW5zaWdodHNfdXNlcl9tZ210Jyl7XG4gICAgICAgIGNvbnN0IHVybCA9IGl0ZW0ucm91dGUuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlLHsgYXBwSWQgOiB0aGlzLmFwcGxpY2F0aW9uSWQgLCB1c2VybWdtdCA6IHRydWV9KVxuICAgICAgfVxuICAgICAgZWxzZSBpZih0aGlzLnBhcmVudE1lbnVJZC5pbmRleE9mKHRoaXMuYXBwbGljYXRpb25JZCkgPj0gMCAgKXtcbiAgICAgICAgaWYgKGl0ZW0ucm91dGUgIT0gJycpIHtcbiAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihpdGVtLnJvdXRlLHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgICBlbHNle1xuICAgICAgICAgIGxldCB1cmwgPSBpdGVtLmxpbms7XG4gICAgICAgICAgbGV0IGhvc3ROYXZFeHRyYXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbi5zaG91bGRVc2VIYXNoUm91dGVGb3JDcm9zc0FwcEhvc3ROYXYoaXRlbSkpIHtcbiAgICAgICAgICAgIHVybCA9IGl0ZW0ucm91dGU7XG4gICAgICAgICAgICBob3N0TmF2RXh0cmFzID0geyBhcHBJZDogdGhpcy5hcHBsaWNhdGlvbklkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHVybCxmYWxzZSwgaG9zdE5hdkV4dHJhcylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbkluTmV3VGFiKGxpbmssaXNSb3V0ZXJMaW5rLGFwcGxpY2F0aW9uSWQgPSB1bmRlZmluZWQpe1xuICAgIGxldCBkYXRlVGl0bGUgPSB0aGlzLmZldGNoRGF0ZVJhbmdlKCk7XG4gICAgbGV0IGRhdGVSYW5nZVZhbCA9IHRoaXMudXJsQ29udGV4dFNlcnZpY2Uuc2V0RGF0ZVJhbmdlVXJsVmFsKGRhdGVUaXRsZSk7XG4gICAgXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbi5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ID09IHVuZGVmaW5lZCl7XG4gICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgIG9pZCA6IHRoaXMubmF2aWdhdGlvbi5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQsXG4gICAgICAgIGRyIDogZGF0ZVJhbmdlVmFsLFxuICAgICAgfVxuICAgICAgaWYoYXBwbGljYXRpb25JZCl7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gey4uLnF1ZXJ5UGFyYW1zLCAuLi5hcHBsaWNhdGlvbklkfVxuICAgICAgfVxuICAgICAgdGhpcy51cmxDb250ZXh0U2VydmljZS5zZXRVcmxBbmRPcGVuVGFiKGxpbmsscXVlcnlQYXJhbXMsaXNSb3V0ZXJMaW5rKTtcbiAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICBhaWQgOiB0aGlzLm5hdmlnYXRpb24uYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5hbXNBY2NvdW50SWQsXG4gICAgICAgIGJpZCA6IHRoaXMubmF2aWdhdGlvbi5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmJ1c2luZXNzR3JvdXBJZCxcbiAgICAgICAgb2lkIDogdGhpcy5uYXZpZ2F0aW9uLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQsXG4gICAgICAgIGRyIDogZGF0ZVJhbmdlVmFsLFxuICAgICAgfVxuICAgICAgaWYoYXBwbGljYXRpb25JZCl7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gey4uLnF1ZXJ5UGFyYW1zLCAuLi5hcHBsaWNhdGlvbklkfVxuICAgICAgfVxuICAgICAgdGhpcy51cmxDb250ZXh0U2VydmljZS5zZXRVcmxBbmRPcGVuVGFiKGxpbmsscXVlcnlQYXJhbXMsaXNSb3V0ZXJMaW5rKTtcbiAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoRGF0ZVJhbmdlKCl7XG4gICAgaWYodGhpcy5xdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndGlkJykgJiYgdGhpcy5xdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZHInKSl7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyeVBhcmFtc1snZHInXTtcbiAgICB9ZWxzZXtcbiAgICAgIGNvbnN0IGxvZ2dlZEluVXNlciA9IEpTT04ucGFyc2UodGhpcy5jb29raWUuZ2V0KCdsb2dnZWRJblVzZXInKSk7XG4gICAgICBjb25zb2xlLmxvZygnTG9nZ2VkID0gJyxsb2dnZWRJblVzZXIpO1xuICAgICAgcmV0dXJuIGxvZ2dlZEluVXNlci5kYXRlUmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3dMb2FkZXIoKXtcbiAgICBsZXQgbG9hZGVyX2Rpdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGVyX3NvdicpO1xuICAgICAgaWYobG9hZGVyX2Rpdil7XG4gICAgICAgIGxvYWRlcl9kaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH1cbiAgIFxuICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYobG9hZGVyX2Rpdil7XG4gICAgICAgICBsb2FkZXJfZGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH1cbiAgICAgfSwgNTAwMCk7XG4gIH1cblxufVxuIiwiPGEgYXBwT2Zmc2V0VG9wIGNsYXNzPVwic2lkZW1lbnUtb3B0aW9uIHt7aXRlbS5zdHlsZV9jbGFzc2VzfX1cIiBtYXQtbGlzdC1pdGVtIChjbGljayk9XCJvblNlbGVjdE1lbnUoJGV2ZW50LGl0ZW0pXCJcbiAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdsZWFmJ1wiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVJdGVtfVwiIChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIj5cbiAgPCEtLSA8c3BhbiBjbGFzcz1cInt7aXRlbS5pZH19X2ljb25cIiAqbmdJZj1cIml0ZW0uaWQgPT0gJ2dsb2JhbF9hY2NvdW50X21nbXQnXCI+PC9zcGFuPiAtLT5cbiAgPGgzIG1hdExpbmUgY2xhc3M9XCJzaWRlbWVudS10ZXh0IG5hdk1lbnVzIGFwcGxpY2F0aW9uTWVudVwiIFtuZ0NsYXNzXT1cInsnbWFyZ2luLWxlZnQtMTAnOiBpdGVtLmxldmVsID09ICd0d28nLCBcbiAgICAnbWFyZ2luLWxlZnQtMzYnOiBpdGVtLmxldmVsICE9ICd0d28nfVwiPlxuICAgIHt7c2VsZWN0ZWRBcHBsaWNhdGlvbihpdGVtKX19XG4gICAgPHNwYW4gaWQ9XCJhY3RpdmVDb3VudFwiICpuZ0lmPVwiaXRlbS5jb3VudEtleSAmJiBnZXRTcGVjaWZpZWRWYWx1ZShpdGVtLmNvdW50S2V5KVwiIGNsYXNzPVwibmctYmluZGluZyBuZy1zY29wZVwiPlxuICAgICAge3sgZ2V0U3BlY2lmaWVkVmFsdWUoaXRlbS5jb3VudEtleSkgfX1cbiAgICA8L3NwYW4+XG4gICAgPCEtLSA8c3BhbiBpZD1cImFjdGl2ZVJlY0NvdW50XCIgKm5nSWY9XCJpdGVtLm5hbWUgPT0gJ1JlY29tbWVuZGF0aW9ucycgJiYgaXRlbS5yZWNDb3VudCAhPSAnJyAmJiBpdGVtLnJlY0NvdW50ICE9ICcwJyAmJiBpdGVtLnJlY0NvdW50ICE9IG51bGxcIiBjbGFzcz1cImFjdGl2ZVJlY0NvdW50XCI+e3tpdGVtLnJlY0NvdW50fX08L3NwYW4+ICAtLT5cbiAgICA8c3BhbiAqbmdJZj1cIml0ZW0uYmFkZ2VcIiBjbGFzcz1cImJhZGdlLXRleHQgc292LWJldGEtcG9zaXRpb25cIiBbaW5uZXJIVE1MXT1cIml0ZW0uYmFkZ2VcIj48L3NwYW4+XG4gICAgPHNwYW4gaWQ9XCJhY3RpdmVSZWNDb3VudFwiIGNsYXNzPVwiYWN0aXZlUmVjQ291bnRcIiAqbmdJZj1cImhhc1dhbG1hcnRSZWNvbW1lbmRhdGlvbihpdGVtKVwiPnt7cmVjQ291bnR9fTwvc3Bhbj4gXG4gIDwvaDM+XG48L2E+XG48ZGl2IHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogZml4ZWRcIiBbc3R5bGUubGVmdF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnhcIlxuICBbc3R5bGUudG9wXT1cImNvbnRleHRNZW51UG9zaXRpb24ueVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiPlxuPC9kaXY+XG48bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwibmV3VGFiTWVudVwiPjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25Db250ZXh0TWVudUFjdGlvbihpdGVtKVwiIGNsYXNzPVwibmV3VGFiTWVudVwiIGlkPVwibmV3VGFiQWN0aW9uQnRuXCI+T3BlbiBpbiBuZXdcbiAgICAgIHRhYjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cIm5ld1RhYk1lbnVcIj48L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG48bWF0LWRpdmlkZXIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InXCIgY2xhc3M9XCJzZXBhcmF0b3JcIj48L21hdC1kaXZpZGVyPiJdfQ==