ngx-edu-sharing-ui 9999.0.2 → 9999.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/actionbar/actionbar.component.mjs +31 -16
- package/esm2022/lib/directives/icon.directive.mjs +24 -7
- package/esm2022/lib/dropdown/dropdown.component.mjs +15 -8
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +3 -3
- package/esm2022/lib/node-entries/entries-model.mjs +1 -1
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +6 -4
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +12 -9
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +2 -2
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +5 -3
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +8 -3
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +7 -5
- package/esm2022/lib/pipes/file-size.pipe.mjs +6 -5
- package/esm2022/lib/pipes/node-title.pipe.mjs +7 -1
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +3 -3
- package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
- package/esm2022/lib/services/node-helper.service.mjs +5 -2
- package/esm2022/lib/services/options-helper-data.service.mjs +2 -2
- package/esm2022/lib/services/search-helper.service.mjs +52 -0
- package/esm2022/lib/services/ui.service.mjs +16 -1
- package/esm2022/lib/translations/translation-loader.mjs +7 -6
- package/esm2022/lib/translations/translations.service.mjs +14 -4
- package/esm2022/lib/types/option-item.mjs +6 -1
- package/esm2022/module.mjs +2 -1
- package/fesm2022/ngx-edu-sharing-ui.mjs +208 -68
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/lib/actionbar/actionbar.component.d.ts +13 -3
- package/lib/directives/icon.directive.d.ts +5 -3
- package/lib/dropdown/dropdown.component.d.ts +6 -3
- package/lib/list-items/list-text/list-text.component.d.ts +1 -1
- package/lib/list-items/list-widget.d.ts +1 -1
- package/lib/node-entries/entries-model.d.ts +1 -1
- package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +1 -1
- package/lib/node-entries/option-button/option-button.component.d.ts +2 -1
- package/lib/pipes/node-title.pipe.d.ts +2 -1
- package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
- package/lib/services/abstract/options-helper.service.d.ts +1 -1
- package/lib/services/node-helper.service.d.ts +2 -2
- package/lib/services/options-helper-data.service.d.ts +3 -3
- package/lib/services/search-helper.service.d.ts +21 -0
- package/lib/services/ui.service.d.ts +7 -1
- package/lib/translations/translations.service.d.ts +5 -2
- package/lib/types/option-item.d.ts +7 -2
- package/module.d.ts +1 -0
- package/package.json +1 -1
|
@@ -65,7 +65,7 @@ export class NodeEntriesCardComponent {
|
|
|
65
65
|
return [];
|
|
66
66
|
// return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);
|
|
67
67
|
}
|
|
68
|
-
openContextmenu(event) {
|
|
68
|
+
openContextmenu(event, node) {
|
|
69
69
|
event.stopPropagation();
|
|
70
70
|
event.preventDefault();
|
|
71
71
|
if (!this.dropdown) {
|
|
@@ -85,6 +85,8 @@ export class NodeEntriesCardComponent {
|
|
|
85
85
|
}
|
|
86
86
|
// Wait for the menu to reflect changed options.
|
|
87
87
|
setTimeout(() => {
|
|
88
|
+
this.dropdown.callbackObject = node;
|
|
89
|
+
this.dropdown.ngOnChanges();
|
|
88
90
|
if (this.dropdown.canShowDropdown()) {
|
|
89
91
|
this.menuTrigger.openMenu();
|
|
90
92
|
}
|
|
@@ -115,11 +117,11 @@ export class NodeEntriesCardComponent {
|
|
|
115
117
|
}, this.node);
|
|
116
118
|
}
|
|
117
119
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardComponent, deps: [{ token: i1.NodeEntriesService }, { token: i2.NodeHelperService }, { token: i0.ApplicationRef }, { token: i3.ConfigService }, { token: i3.AuthenticationService }, { token: i4.NodeEntriesTemplatesService }, { token: i5.NodeEntriesGlobalService }, { token: i6.Toast, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
118
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: { dropdown: "dropdown", node: "node" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate: { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate: { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i9.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i10.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i11.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i15.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i16.NodeRatingComponent, selector: "es-node-rating", inputs: ["node"] }, { kind: "component", type: i17.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }, { kind: "component", type: i18.NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: ["node"] }, { kind: "component", type: i19.OptionButtonComponent, selector: "es-option-button", inputs: ["option", "node"] }, { kind: "component", type: i20.NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: ["node", "backgroundStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i21.PropertySlugPipe, name: "propertySlug" }, { kind: "pipe", type: i22.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }, { kind: "pipe", type: i24.ListItemLabelPipe, name: "esListItemLabel" }] }); }
|
|
120
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: { dropdown: "dropdown", node: "node" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i9.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i10.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i11.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i15.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i16.NodeRatingComponent, selector: "es-node-rating", inputs: ["node"] }, { kind: "component", type: i17.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }, { kind: "component", type: i18.NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: ["node"] }, { kind: "component", type: i19.OptionButtonComponent, selector: "es-option-button", inputs: ["option", "node"] }, { kind: "component", type: i20.NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: ["node", "backgroundStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i21.PropertySlugPipe, name: "propertySlug" }, { kind: "pipe", type: i22.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }, { kind: "pipe", type: i24.ListItemLabelPipe, name: "esListItemLabel" }] }); }
|
|
119
121
|
}
|
|
120
122
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardComponent, decorators: [{
|
|
121
123
|
type: Component,
|
|
122
|
-
args: [{ selector: 'es-node-entries-card', template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate: { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate: { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
|
|
124
|
+
args: [{ selector: 'es-node-entries-card', template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
|
|
123
125
|
}], ctorParameters: () => [{ type: i1.NodeEntriesService }, { type: i2.NodeHelperService }, { type: i0.ApplicationRef }, { type: i3.ConfigService }, { type: i3.AuthenticationService }, { type: i4.NodeEntriesTemplatesService }, { type: i5.NodeEntriesGlobalService }, { type: i6.Toast, decorators: [{
|
|
124
126
|
type: Optional
|
|
125
127
|
}] }], propDecorators: { dropdown: [{
|
|
@@ -130,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
130
132
|
}], node: [{
|
|
131
133
|
type: Input
|
|
132
134
|
}] } });
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU92QyxNQUFNLE9BQU8sd0JBQXdCO0lBY2pDLFlBQ1csY0FBcUMsRUFDckMsVUFBNkIsRUFDN0IsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIscUJBQTRDLEVBQzVDLGdCQUE2QyxFQUM3Qyx3QkFBa0QsRUFDckMsS0FBWTtRQVB6QixtQkFBYyxHQUFkLGNBQWMs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Q3pDLENBQUMsQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUE0QjtRQUNwQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsQ0FDdkQ7WUFDSSxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUk7U0FDUCxFQUNELElBQUksQ0FBQyxJQUFZLENBQ3BCLENBQUM7SUFDTixDQUFDOzhHQXhHUSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw2T0M3QnJDLDZ5TUFpTEE7OzJGRHBKYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0ksc0JBQXNCOzswQkEwQjNCLFFBQVE7eUNBakJKLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRW9CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFFZixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBDbGlja1NvdXJjZSwgSW50ZXJhY3Rpb25UeXBlIH0gZnJvbSAnLi4vZW50cmllcy1tb2RlbCc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRTcGVjaWFsVHlwZSwgTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzL29wdGlvbi1pdGVtJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UsIENvbmZpZ1NlcnZpY2UsIE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IENvbG9ySGVscGVyLCBQcmVmZXJyZWRDb2xvciB9IGZyb20gJy4uLy4uL3V0aWwvY29sb3ItaGVscGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2FzdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Fic3RyYWN0L3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXMtbm9kZS1lbnRyaWVzLWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub2RlLWVudHJpZXMtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlRW50cmllc0NhcmRDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIHJlYWRvbmx5IEludGVyYWN0aW9uVHlwZSA9IEludGVyYWN0aW9uVHlwZTtcbiAgICByZWFkb25seSBUYXJnZXQgPSBUYXJnZXQ7XG4gICAgcmVhZG9ubHkgQ2xpY2tTb3VyY2UgPSBDbGlja1NvdXJjZTtcbiAgICByZWFkb25seSBDdXN0b21GaWVsZFNwZWNpYWxUeXBlID0gQ3VzdG9tRmllbGRTcGVjaWFsVHlwZTtcbiAgICBASW5wdXQoKSBkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdtZW51VHJpZ2dlcicpIG1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICAgIEBJbnB1dCgpIG5vZGU6IFQ7XG4gICAgZHJvcGRvd25MZWZ0OiBudW1iZXI7XG4gICAgZHJvcGRvd25Ub3A6IG51bWJlcjtcbiAgICBzaG93UmF0aW5ncyA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIGlzQ29sbGVjdGlvbjogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVudHJpZXNTZXJ2aWNlOiBOb2RlRW50cmllc1NlcnZpY2U8VD4sXG4gICAgICAgIHB1YmxpYyBub2RlSGVscGVyOiBOb2RlSGVscGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHVibGljIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0OiBUb2FzdCxcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDb2xsZWN0aW9uID0gdGhpcy5ub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24oY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGdldFRleHRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIENvbG9ySGVscGVyLmdldFByZWZlcnJlZENvbG9yKHRoaXMubm9kZS5jb2xsZWN0aW9uLmNvbG9yKSA9PT0gUHJlZmVycmVkQ29sb3IuQmxhY2tcbiAgICAgICAgICAgID8gJyMwMDAnXG4gICAgICAgICAgICA6ICcjZmZmJztcbiAgICB9XG4gICAgb3B0aW9uc09uQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9ucz8uW1RhcmdldC5MaXN0XTtcbiAgICAgICAgY29uc3QgYWx3YXlzID0gb3B0aW9ucz8uZmlsdGVyKChvKSA9PiBvLnNob3dBbHdheXMpO1xuICAgICAgICBpZiAoYWx3YXlzPy5zb21lKChvKSA9PiBvLnNob3dDYWxsYmFjayh0aGlzLm5vZGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFsd2F5cztcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBkbyBOT1Qgc2hvdyBhbnkgYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgLy8gcmV0dXJuIG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLnNob3dBc0FjdGlvbiAmJiBvLnNob3dDYWxsYmFjayh0aGlzLm5vZGUpKS5zbGljZSgwLCAzKTtcbiAgICB9XG5cbiAgICBvcGVuQ29udGV4dG1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICAvLyBDYWxsIGBwcmV2ZW50RGVmYXVsdCgpYCBldmVuIHdoZW4gdGhlcmUgaXMgbm8gbWVudSwgc28gd2UgY2FuIHVzZSBgY2RrRHJhZ2Agd2l0aCBhXG4gICAgICAgICAgICAvLyBzdGFydCBkZWxheSB3aXRob3V0IGJlaW5nIGludGVycnVwdGVkIGJ5IHRoZSBzdGFuZGFyZCBsb25nLXRhcCBhY3Rpb24uXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICAgICAgKHsgY2xpZW50WDogdGhpcy5kcm9wZG93bkxlZnQsIGNsaWVudFk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICh7IHg6IHRoaXMuZHJvcGRvd25MZWZ0LCB5OiB0aGlzLmRyb3Bkb3duVG9wIH0gPSAoXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLmluY2x1ZGVzKHRoaXMubm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0IGZvciB0aGUgbWVudSB0byByZWZsZWN0IGNoYW5nZWQgb3B0aW9ucy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5jYW5TaG93RHJvcGRvd24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVudVRyaWdnZXIub3Blbk1lbnUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC50b2FzdCgnTk9fQVZBSUxBQkxFX09QVElPTlMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXNTZXJ2aWNlLmNvbHVtbnM/LmZpbHRlcigoYykgPT4gYy52aXNpYmxlKTtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuTWVudShub2RlOiBUKSB7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xpY2tTb3VyY2UgPSBDbGlja1NvdXJjZS5Ecm9wZG93bjtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblJlZi50aWNrKCk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24ubWVudS5mb2N1c0ZpcnN0SXRlbSgpO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZ1NlcnZpY2Uub2JzZXJ2ZUNvbmZpZygpLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gICAgICAgIHRoaXMuc2hvd1JhdGluZ3MubmV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pbnN0YW50KCdyYXRpbmcubW9kZScsICdub25lJykgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgICAgIChhd2FpdCB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5oYXNUb29scGVybWlzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgUmVzdENvbnN0YW50cy5UT09MUEVSTUlTU0lPTl9SQVRFX1JFQUQsXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGVtcGxhdGUobmFtZTogQ3VzdG9tRmllbGRTcGVjaWFsVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlRW50cmllc0dsb2JhbFNlcnZpY2UuZ2V0Q3VzdG9tRmllbGRUZW1wbGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTk9ERScsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLm5vZGUgYXMgTm9kZSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIFtjbGFzc109XCJcbiAgICAnZ3JpZC1jYXJkJyArXG4gICAgKGlzQ29sbGVjdGlvblxuICAgICAgPyAnIGdyaWQtY2FyZC1jb2xsZWN0aW9uIGdyaWQtY2FyZC1jb2xsZWN0aW9uLXNjb3BlLScgK1xuICAgICAgICBub2RlLmNvbGxlY3Rpb24uc2NvcGUgK1xuICAgICAgICAnIGdyaWQtY2FyZC1jb2xsZWN0aW9uLXR5cGUtJyArXG4gICAgICAgIG5vZGUuY29sbGVjdGlvbi50eXBlXG4gICAgICA6ICcnKSArXG4gICAgKCRhbnkobm9kZSkudmlydHVhbCA/ICcgZ3JpZC1jYXJkLXZpcnR1YWwnIDogJycpICtcbiAgICAnICcgK1xuICAgIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21Dc3NDbGFzcyhub2RlKVxuICBcIlxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc0NvbGxlY3Rpb24gPyBub2RlLmNvbGxlY3Rpb24uY29sb3IgOiBudWxsXCJcbiAgW2NsYXNzLmR5bmFtaWMtc2luZ2xlLWNsaWNrXT1cImVudHJpZXNTZXJ2aWNlLnNpbmdsZUNsaWNrSGludCA9PT0gJ2R5bmFtaWMnXCJcbiAgW2NsYXNzLnNlbGVjdGVkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgKGNvbnRleHRtZW51KT1cIm9wZW5Db250ZXh0bWVudSgkZXZlbnQpXCJcbiAgKGtleWRvd24uQ29udGV4dE1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudClcIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ0ZW1wbGF0ZXNTZXJ2aWNlLm92ZXJsYXlcIlxuICAgIGNsYXNzPVwiY2FyZC1vdmVybGF5XCJcbiAgICAoY2xpY2spPVwiXG4gICAgICBlbnRyaWVzU2VydmljZS5jbGlja0l0ZW0uZW1pdCh7XG4gICAgICAgIGVsZW1lbnQ6IG5vZGUsXG4gICAgICAgIHNvdXJjZTogQ2xpY2tTb3VyY2UuT3ZlcmxheSxcbiAgICAgIH0pXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzU2VydmljZS5vdmVybGF5OyBjb250ZXh0OiB7IGVsZW1lbnQ6IG5vZGUgfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiZHJvcGRvd25cIlxuICAgICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICBtYXQtYnV0dG9uXG4gICAgY2xhc3M9XCJkcm9wZG93bi1kdW1teSBjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJkcm9wZG93bkxlZnRcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiZHJvcGRvd25Ub3BcIlxuICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJkcm9wZG93bi5tZW51XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICA+PC9idXR0b24+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXJcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc0NvbGxlY3Rpb24gPyBub2RlLmNvbGxlY3Rpb24uY29sb3IgOiBudWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtdG9wLWJhci1jb2xsZWN0aW9uLWNvbG9yXCIgKm5nSWY9XCJub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24obm9kZSlcIj48L2Rpdj5cbiAgICA8ZXMtbm9kZS10eXBlLWJhZGdlIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtdHlwZS1iYWRnZT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUuY29sbGVjdGlvbi5waW5uZWRcIiBjbGFzcz1cImNhcmQtdG9wLWJhci1mbGFnXCI+XG4gICAgICA8aSBlc0ljb249XCJlZHUtcGluXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItZW1wdHlcIj48L2Rpdj5cbiAgICA8ZXMtbm9kZS1zdGF0cy1iYWRnZXMgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1zdGF0cy1iYWRnZXM+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtdG9wLWJhci1jaGVja2JveFwiICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuY2hlY2tib3hcIj5cbiAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgW2NoZWNrZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAoY2hhbmdlKT1cImVudHJpZXNTZXJ2aWNlLm9uQ2hlY2tib3hDaGFuZ2VkKG5vZGUsICRldmVudC5jaGVja2VkKVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJ7eyAnU0VMRUNUJyB8IHRyYW5zbGF0ZTogeyBlbGVtZW50OiAobm9kZSB8IG5vZGVUaXRsZSkgfSB9fVwiXG4gICAgICA+PC9tYXQtY2hlY2tib3g+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZXMtbm9kZS11cmxcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgPT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbW9kZT1cIndyYXBwZXJcIlxuICAgIFtub2RlXT1cIm5vZGVcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2VzLW5vZGUtdXJsPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuRGVmYXVsdEFjdGlvbkxpbmtcIlxuICAgIG1hdFJpcHBsZVxuICAgIChjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLm9uQ2xpY2tlZCh7XG4gICAgICAgIGV2ZW50OiAkZXZlbnQsXG4gICAgICAgIGVsZW1lbnQ6IG5vZGUsXG4gICAgICAgIHNvdXJjZTogQ2xpY2tTb3VyY2UuTWV0YWRhdGEsXG4gICAgICB9KVxuICAgIFwiXG4gICAgKGRibGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2UuZGJsQ2xpY2tJdGVtLmVtaXQoe1xuICAgICAgICBlbGVtZW50OiBub2RlLFxuICAgICAgICBzb3VyY2U6IENsaWNrU291cmNlLk1ldGFkYXRhLFxuICAgICAgfSlcbiAgICBcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9uc1wiICpuZ0lmPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucyB8fCBzaG93UmF0aW5nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhdGluZy1hcmVhXCI+XG4gICAgICA8ZXMtbm9kZS1yYXRpbmcgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1yYXRpbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1hcmVhXCI+XG4gICAgICA8ZXMtb3B0aW9uLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNPbkNhcmQoKVwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1vcHRpb25zLWFsd2F5c1wiXG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICA+PC9lcy1vcHRpb24tYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93blwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib3Blbk1lbnUobm9kZSlcIlxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09QVElPTlNfRk9SJyB8IHRyYW5zbGF0ZTogeyBlbGVtZW50OiAobm9kZSB8IG5vZGVUaXRsZSkgfVwiXG4gICAgICAgIGRhdGEtdGVzdD1cImNhcmQtb3B0aW9ucy1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8aSBlc0ljb249XCJtb3JlX3ZlcnRcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjaW1hZ2UgbGV0LXBsYXlBbmltYXRpb249XCJwbGF5QW5pbWF0aW9uXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLWltYWdlLWFyZWFcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRlbXBsYXRlKEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUucHJldmlldykgYXMgcmVmXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWY7IGNvbnRleHQ6IHsgbm9kZTogdGhpcy5ub2RlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpXCI+XG4gICAgICAgIDxlcy1wcmV2aWV3LWltYWdlXG4gICAgICAgICAgKm5nSWY9XCIhKGlzQ29sbGVjdGlvbiAmJiBub2RlLnByZXZpZXcuaXNJY29uKVwiXG4gICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgW3BsYXlBbmltYXRpb25dPVwicGxheUFuaW1hdGlvblwiXG4gICAgICAgID48L2VzLXByZXZpZXctaW1hZ2U+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvblwiIGNsYXNzPVwiY2FyZC1jb2xsZWN0aW9uLWltYWdlXCI+XG4gICAgICAgICAgPGkgZXNJY29uPVwibGF5ZXJzXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI21ldGEgbGV0LWxpbms9XCJsaW5rXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtbWV0YVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgZGlzcGxheVBhcnQgb2YgZ2V0VmlzaWJsZUNvbHVtbnMoKTsgbGV0IGZpcnN0ID0gZmlyc3RcIlxuICAgICAgICBjbGFzcz1cImNhcmQtbWV0YS1yb3cgY2FyZC1tZXRhLXJvdy17eyBkaXNwbGF5UGFydC5uYW1lIHwgbG93ZXJjYXNlIHwgcHJvcGVydHlTbHVnIH19XCJcbiAgICAgICAgW2NsYXNzLmNhcmQtbWV0YS1yb3ctcHJpbWFyeV09XCJmaXJzdFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaXJzdFwiPlxuICAgICAgICAgIDxlcy1ub2RlLXVybFxuICAgICAgICAgICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuRGVmYXVsdEFjdGlvbkxpbmtcIlxuICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAjbGlua1xuICAgICAgICAgID5cbiAgICAgICAgICAgIDxlcy1saXN0LWJhc2UgW2l0ZW1dPVwiZGlzcGxheVBhcnRcIiBbbm9kZV09XCJub2RlXCIgW3Byb3ZpZGVMYWJlbF09XCJmYWxzZVwiPiA8L2VzLWxpc3QtYmFzZT5cbiAgICAgICAgICA8L2VzLW5vZGUtdXJsPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuRGVmYXVsdEFjdGlvbkxpbmtcIj5cbiAgICAgICAgICAgIDxlcy1saXN0LWJhc2UgW2l0ZW1dPVwiZGlzcGxheVBhcnRcIiBbbm9kZV09XCJub2RlXCIgW3Byb3ZpZGVMYWJlbF09XCJmYWxzZVwiPiA8L2VzLWxpc3QtYmFzZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlyc3RcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyBkaXNwbGF5UGFydCB8IGVzTGlzdEl0ZW1MYWJlbCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU92QyxNQUFNLE9BQU8sd0JBQXdCO0lBY2pDLFlBQ1csY0FBcUMsRUFDckMsVUFBNkIsRUFDN0IsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIscUJBQTRDLEVBQzVDLGdCQUE2QyxFQUM3Qyx3QkFBa0QsRUFDckMsS0FBWTtRQVB6QixtQkFBYyxHQUFkLGNBQWMs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YSxFQUFFLE1BQU0sQ0FBQyxLQUFLLE1BQU07WUFDeEQsQ0FBQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FDL0MsYUFBYSxDQUFDLHdCQUF3QixDQUN6QyxDQUFDLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBNEI7UUFDcEMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQ3ZEO1lBQ0ksSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJO1NBQ1AsRUFDRCxJQUFJLENBQUMsSUFBWSxDQUNwQixDQUFDO0lBQ04sQ0FBQzs4R0ExR1Esd0JBQXdCO2tHQUF4Qix3QkFBd0IsNk9DN0JyQywyek1BaUxBOzsyRkRwSmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLHNCQUFzQjs7MEJBMEIzQixRQUFRO3lDQWpCSixRQUFRO3NCQUFoQixLQUFLO2dCQUVvQixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBRWYsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgQ2xpY2tTb3VyY2UsIEludGVyYWN0aW9uVHlwZSB9IGZyb20gJy4uL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUsIE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICcuLi8uLi90eXBlcy9vcHRpb24taXRlbSc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWVudHJpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlLCBDb25maWdTZXJ2aWNlLCBOb2RlLCBSZXN0Q29uc3RhbnRzIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBDb2xvckhlbHBlciwgUHJlZmVycmVkQ29sb3IgfSBmcm9tICcuLi8uLi91dGlsL2NvbG9yLWhlbHBlcic7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9hc3QgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hYnN0cmFjdC90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy1jYXJkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ25vZGUtZW50cmllcy1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNDYXJkQ29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgICByZWFkb25seSBJbnRlcmFjdGlvblR5cGUgPSBJbnRlcmFjdGlvblR5cGU7XG4gICAgcmVhZG9ubHkgVGFyZ2V0ID0gVGFyZ2V0O1xuICAgIHJlYWRvbmx5IENsaWNrU291cmNlID0gQ2xpY2tTb3VyY2U7XG4gICAgcmVhZG9ubHkgQ3VzdG9tRmllbGRTcGVjaWFsVHlwZSA9IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGU7XG4gICAgQElucHV0KCkgZHJvcGRvd246IERyb3Bkb3duQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnbWVudVRyaWdnZXInKSBtZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XG5cbiAgICBASW5wdXQoKSBub2RlOiBUO1xuICAgIGRyb3Bkb3duTGVmdDogbnVtYmVyO1xuICAgIGRyb3Bkb3duVG9wOiBudW1iZXI7XG4gICAgc2hvd1JhdGluZ3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBpc0NvbGxlY3Rpb246IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbnRyaWVzU2VydmljZTogTm9kZUVudHJpZXNTZXJ2aWNlPFQ+LFxuICAgICAgICBwdWJsaWMgbm9kZUhlbHBlcjogTm9kZUhlbHBlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0ZW1wbGF0ZXNTZXJ2aWNlOiBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBub2RlRW50cmllc0dsb2JhbFNlcnZpY2U6IE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdDogVG9hc3QsXG4gICAgKSB7fVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQ29sbGVjdGlvbiA9IHRoaXMubm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKGNoYW5nZXMubm9kZT8uY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRUZXh0Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiBDb2xvckhlbHBlci5nZXRQcmVmZXJyZWRDb2xvcih0aGlzLm5vZGUuY29sbGVjdGlvbi5jb2xvcikgPT09IFByZWZlcnJlZENvbG9yLkJsYWNrXG4gICAgICAgICAgICA/ICcjMDAwJ1xuICAgICAgICAgICAgOiAnI2ZmZic7XG4gICAgfVxuICAgIG9wdGlvbnNPbkNhcmQoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLm9wdGlvbnM/LltUYXJnZXQuTGlzdF07XG4gICAgICAgIGNvbnN0IGFsd2F5cyA9IG9wdGlvbnM/LmZpbHRlcigobykgPT4gby5zaG93QWx3YXlzKTtcbiAgICAgICAgaWYgKGFsd2F5cz8uc29tZSgobykgPT4gby5zaG93Q2FsbGJhY2sodGhpcy5ub2RlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhbHdheXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgZG8gTk9UIHNob3cgYW55IGFkZGl0aW9uYWwgYWN0aW9uc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICAgIC8vIHJldHVybiBvcHRpb25zLmZpbHRlcigobykgPT4gby5zaG93QXNBY3Rpb24gJiYgby5zaG93Q2FsbGJhY2sodGhpcy5ub2RlKSkuc2xpY2UoMCwgMyk7XG4gICAgfVxuXG4gICAgb3BlbkNvbnRleHRtZW51KGV2ZW50OiBNb3VzZUV2ZW50IHwgRXZlbnQsIG5vZGU6IFQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICghdGhpcy5kcm9wZG93bikge1xuICAgICAgICAgICAgLy8gQ2FsbCBgcHJldmVudERlZmF1bHQoKWAgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIG1lbnUsIHNvIHdlIGNhbiB1c2UgYGNka0RyYWdgIHdpdGggYVxuICAgICAgICAgICAgLy8gc3RhcnQgZGVsYXkgd2l0aG91dCBiZWluZyBpbnRlcnJ1cHRlZCBieSB0aGUgc3RhbmRhcmQgbG9uZy10YXAgYWN0aW9uLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgICh7IGNsaWVudFg6IHRoaXMuZHJvcGRvd25MZWZ0LCBjbGllbnRZOiB0aGlzLmRyb3Bkb3duVG9wIH0gPSBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAoeyB4OiB0aGlzLmRyb3Bkb3duTGVmdCwgeTogdGhpcy5kcm9wZG93blRvcCB9ID0gKFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgICAgICAgKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZC5pbmNsdWRlcyh0aGlzLm5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KHRoaXMubm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIG1lbnUgdG8gcmVmbGVjdCBjaGFuZ2VkIG9wdGlvbnMuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jYWxsYmFja09iamVjdCA9IG5vZGU7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm5nT25DaGFuZ2VzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5jYW5TaG93RHJvcGRvd24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVudVRyaWdnZXIub3Blbk1lbnUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC50b2FzdCgnTk9fQVZBSUxBQkxFX09QVElPTlMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXNTZXJ2aWNlLmNvbHVtbnM/LmZpbHRlcigoYykgPT4gYy52aXNpYmxlKTtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuTWVudShub2RlOiBUKSB7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xpY2tTb3VyY2UgPSBDbGlja1NvdXJjZS5Ecm9wZG93bjtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblJlZi50aWNrKCk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24ubWVudS5mb2N1c0ZpcnN0SXRlbSgpO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZ1NlcnZpY2Uub2JzZXJ2ZUNvbmZpZygpLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gICAgICAgIHRoaXMuc2hvd1JhdGluZ3MubmV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pbnN0YW50KCdyYXRpbmcubW9kZScsICdub25lJykgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgICAgIChhd2FpdCB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5oYXNUb29scGVybWlzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgUmVzdENvbnN0YW50cy5UT09MUEVSTUlTU0lPTl9SQVRFX1JFQUQsXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGVtcGxhdGUobmFtZTogQ3VzdG9tRmllbGRTcGVjaWFsVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlRW50cmllc0dsb2JhbFNlcnZpY2UuZ2V0Q3VzdG9tRmllbGRUZW1wbGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTk9ERScsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLm5vZGUgYXMgTm9kZSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIFtjbGFzc109XCJcbiAgICAnZ3JpZC1jYXJkJyArXG4gICAgKGlzQ29sbGVjdGlvblxuICAgICAgPyAnIGdyaWQtY2FyZC1jb2xsZWN0aW9uIGdyaWQtY2FyZC1jb2xsZWN0aW9uLXNjb3BlLScgK1xuICAgICAgICBub2RlLmNvbGxlY3Rpb24uc2NvcGUgK1xuICAgICAgICAnIGdyaWQtY2FyZC1jb2xsZWN0aW9uLXR5cGUtJyArXG4gICAgICAgIG5vZGUuY29sbGVjdGlvbi50eXBlXG4gICAgICA6ICcnKSArXG4gICAgKCRhbnkobm9kZSkudmlydHVhbCA/ICcgZ3JpZC1jYXJkLXZpcnR1YWwnIDogJycpICtcbiAgICAnICcgK1xuICAgIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21Dc3NDbGFzcyhub2RlKVxuICBcIlxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc0NvbGxlY3Rpb24gPyBub2RlLmNvbGxlY3Rpb24uY29sb3IgOiBudWxsXCJcbiAgW2NsYXNzLmR5bmFtaWMtc2luZ2xlLWNsaWNrXT1cImVudHJpZXNTZXJ2aWNlLnNpbmdsZUNsaWNrSGludCA9PT0gJ2R5bmFtaWMnXCJcbiAgW2NsYXNzLnNlbGVjdGVkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgKGNvbnRleHRtZW51KT1cIm9wZW5Db250ZXh0bWVudSgkZXZlbnQsIG5vZGUpXCJcbiAgKGtleWRvd24uQ29udGV4dE1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudCwgbm9kZSlcIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ0ZW1wbGF0ZXNTZXJ2aWNlLm92ZXJsYXlcIlxuICAgIGNsYXNzPVwiY2FyZC1vdmVybGF5XCJcbiAgICAoY2xpY2spPVwiXG4gICAgICBlbnRyaWVzU2VydmljZS5jbGlja0l0ZW0uZW1pdCh7XG4gICAgICAgIGVsZW1lbnQ6IG5vZGUsXG4gICAgICAgIHNvdXJjZTogQ2xpY2tTb3VyY2UuT3ZlcmxheSxcbiAgICAgIH0pXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzU2VydmljZS5vdmVybGF5OyBjb250ZXh0OiB7IGVsZW1lbnQ6IG5vZGUgfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiZHJvcGRvd25cIlxuICAgICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICBtYXQtYnV0dG9uXG4gICAgY2xhc3M9XCJkcm9wZG93bi1kdW1teSBjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJkcm9wZG93bkxlZnRcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiZHJvcGRvd25Ub3BcIlxuICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJkcm9wZG93bi5tZW51XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICA+PC9idXR0b24+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXJcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc0NvbGxlY3Rpb24gPyBub2RlLmNvbGxlY3Rpb24uY29sb3IgOiBudWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtdG9wLWJhci1jb2xsZWN0aW9uLWNvbG9yXCIgKm5nSWY9XCJub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24obm9kZSlcIj48L2Rpdj5cbiAgICA8ZXMtbm9kZS10eXBlLWJhZGdlIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtdHlwZS1iYWRnZT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUuY29sbGVjdGlvbi5waW5uZWRcIiBjbGFzcz1cImNhcmQtdG9wLWJhci1mbGFnXCI+XG4gICAgICA8aSBlc0ljb249XCJlZHUtcGluXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItZW1wdHlcIj48L2Rpdj5cbiAgICA8ZXMtbm9kZS1zdGF0cy1iYWRnZXMgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1zdGF0cy1iYWRnZXM+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtdG9wLWJhci1jaGVja2JveFwiICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuY2hlY2tib3hcIj5cbiAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgW2NoZWNrZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAoY2hhbmdlKT1cImVudHJpZXNTZXJ2aWNlLm9uQ2hlY2tib3hDaGFuZ2VkKG5vZGUsICRldmVudC5jaGVja2VkKVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJ7eyAnU0VMRUNUJyB8IHRyYW5zbGF0ZSA6IHsgZWxlbWVudDogKG5vZGUgfCBub2RlVGl0bGUpIH0gfX1cIlxuICAgICAgPjwvbWF0LWNoZWNrYm94PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGVzLW5vZGUtdXJsXG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuRGVmYXVsdEFjdGlvbkxpbmtcIlxuICAgIG1vZGU9XCJ3cmFwcGVyXCJcbiAgICBbbm9kZV09XCJub2RlXCJcbiAgICBlc0ZvY3VzU3RhdGVcbiAgICAjY2FyZEZvY3VzU3RhdGU9XCJlc0ZvY3VzU3RhdGVcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgaW1hZ2U7XG4gICAgICAgIGNvbnRleHQ6IHsgcGxheUFuaW1hdGlvbjogY2FyZEZvY3VzU3RhdGUuaG92ZXJpbmcgfHwgY2FyZEZvY3VzU3RhdGUuaGFzRm9jdXMgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1ldGFcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9lcy1ub2RlLXVybD5cbiAgPGRpdlxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtYXRSaXBwbGVcbiAgICAoY2xpY2spPVwiXG4gICAgICBlbnRyaWVzU2VydmljZS5vbkNsaWNrZWQoe1xuICAgICAgICBldmVudDogJGV2ZW50LFxuICAgICAgICBlbGVtZW50OiBub2RlLFxuICAgICAgICBzb3VyY2U6IENsaWNrU291cmNlLk1ldGFkYXRhLFxuICAgICAgfSlcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRibENsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YSxcbiAgICAgIH0pXG4gICAgXCJcbiAgICBlc0ZvY3VzU3RhdGVcbiAgICAjY2FyZEZvY3VzU3RhdGU9XCJlc0ZvY3VzU3RhdGVcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgaW1hZ2U7XG4gICAgICAgIGNvbnRleHQ6IHsgcGxheUFuaW1hdGlvbjogY2FyZEZvY3VzU3RhdGUuaG92ZXJpbmcgfHwgY2FyZEZvY3VzU3RhdGUuaGFzRm9jdXMgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1ldGFcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLW9wdGlvbnNcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLm9wdGlvbnMgfHwgc2hvd1JhdGluZ3NcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1yYXRpbmctYXJlYVwiPlxuICAgICAgPGVzLW5vZGUtcmF0aW5nIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtcmF0aW5nPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLW9wdGlvbnMtYXJlYVwiPlxuICAgICAgPGVzLW9wdGlvbi1idXR0b25cbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zT25DYXJkKClcIlxuICAgICAgICBjbGFzcz1cImNhcmQtb3B0aW9ucy1hbHdheXNcIlxuICAgICAgICBbb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgPjwvZXMtb3B0aW9uLWJ1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLW9wdGlvbnMtc3BhY2VyXCI+PC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiZHJvcGRvd25cIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5NZW51KG5vZGUpXCJcbiAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImRyb3Bkb3duLm1lbnVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidPUFRJT05TX0ZPUicgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9XCJcbiAgICAgICAgZGF0YS10ZXN0PVwiY2FyZC1vcHRpb25zLWJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxpIGVzSWNvbj1cIm1vcmVfdmVydFwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNpbWFnZSBsZXQtcGxheUFuaW1hdGlvbj1cInBsYXlBbmltYXRpb25cIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQtaW1hZ2UtYXJlYVwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc0NvbGxlY3Rpb24gPyBub2RlLmNvbGxlY3Rpb24uY29sb3IgOiBudWxsXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VGVtcGxhdGUoQ3VzdG9tRmllbGRTcGVjaWFsVHlwZS5wcmV2aWV3KSBhcyByZWZcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlZjsgY29udGV4dDogeyBub2RlOiB0aGlzLm5vZGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdldFRlbXBsYXRlKEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUucHJldmlldylcIj5cbiAgICAgICAgPGVzLXByZXZpZXctaW1hZ2VcbiAgICAgICAgICAqbmdJZj1cIiEoaXNDb2xsZWN0aW9uICYmIG5vZGUucHJldmlldy5pc0ljb24pXCJcbiAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICBbcGxheUFuaW1hdGlvbl09XCJwbGF5QW5pbWF0aW9uXCJcbiAgICAgICAgPjwvZXMtcHJldmlldy1pbWFnZT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLnByZXZpZXcuaXNJY29uXCIgY2xhc3M9XCJjYXJkLWNvbGxlY3Rpb24taW1hZ2VcIj5cbiAgICAgICAgICA8aSBlc0ljb249XCJsYXllcnNcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjbWV0YSBsZXQtbGluaz1cImxpbmtcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1tZXRhXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBkaXNwbGF5UGFydCBvZiBnZXRWaXNpYmxlQ29sdW1ucygpOyBsZXQgZmlyc3QgPSBmaXJzdFwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1tZXRhLXJvdyBjYXJkLW1ldGEtcm93LXt7IGRpc3BsYXlQYXJ0Lm5hbWUgfCBsb3dlcmNhc2UgfCBwcm9wZXJ0eVNsdWcgfX1cIlxuICAgICAgICBbY2xhc3MuY2FyZC1tZXRhLXJvdy1wcmltYXJ5XT1cImZpcnN0XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpcnN0XCI+XG4gICAgICAgICAgPGVzLW5vZGUtdXJsXG4gICAgICAgICAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgPT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICNsaW5rXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICAgIDwvZXMtbm9kZS11cmw+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiPlxuICAgICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaXJzdFwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIHt7IGRpc3BsYXlQYXJ0IHwgZXNMaXN0SXRlbUxhYmVsIHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxlcy1saXN0LWJhc2UgW2l0ZW1dPVwiZGlzcGxheVBhcnRcIiBbbm9kZV09XCJub2RlXCIgW3Byb3ZpZGVMYWJlbF09XCJmYWxzZVwiPiA8L2VzLWxpc3QtYmFzZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|
package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs
CHANGED
|
@@ -209,14 +209,17 @@ export class NodeEntriesCardGridComponent {
|
|
|
209
209
|
.concat(new ListItemSort('NODE', 'score'), new ListItemSort('NODE', RestConstants.CCM_PROP_COLLECTION_ORDERED_POSITION), new ListItemSort('NODE', RestConstants.CM_PROP_TITLE), new ListItemSort('NODE', RestConstants.CM_NAME), new ListItemSort('NODE', RestConstants.CM_PROP_C_CREATED), new ListItemSort('NODE', RestConstants.CM_MODIFIED_DATE), new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONMODIFIED), new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCETIMESTAMP))
|
|
210
210
|
.some((c2) => c.type === c2.type && c2.name === c.name);
|
|
211
211
|
if (!result && !this.entriesService.configureColumns) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
212
|
+
return this.entriesService.sort?.columns;
|
|
213
|
+
/*
|
|
214
|
+
const warning =
|
|
215
|
+
'Sort field ' +
|
|
216
|
+
c.name +
|
|
217
|
+
' was specified but is not present as a column. ' +
|
|
218
|
+
'It will be ignored. Please also configure this field in the <lists> section';
|
|
219
|
+
if (!displayedWarnings.includes(warning)) {
|
|
220
|
+
console.warn(warning);
|
|
221
|
+
displayedWarnings.push(warning);
|
|
222
|
+
}*/
|
|
220
223
|
}
|
|
221
224
|
return result;
|
|
222
225
|
});
|
|
@@ -319,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
319
322
|
type: HostBinding,
|
|
320
323
|
args: ['style.--scroll-gradient-color']
|
|
321
324
|
}] } });
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9ub2RlLWVudHJpZXMtY2FyZC1ncmlkL25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC9ub2RlLWVudHJpZXMtY2FyZC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBUSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUFjLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUseUJBQXlCLEVBQUUs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UUFBUSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLFlBQVkseUJBQXlCLENBQUM7SUFDL0UsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDO0lBQ3BGLENBQUM7OEdBM1VRLDRCQUE0QjtrR0FBNUIsNEJBQTRCLDZiQWMxQix3QkFBd0Isc0pBUXJCLFdBQVcsaUdBRUssVUFBVSw2QkNsRTVDLDQ3UUFpT0E7OzJGRHZMYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0ksMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNO3FOQVlaLG9CQUFvQjtzQkFBdEQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBQ1csT0FBTztzQkFBbEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsQyxTQUFTO3NCQURaLFNBQVM7dUJBQUMsd0JBQXdCO2dCQVFSLGNBQWM7c0JBQXhDLFlBQVk7dUJBQUMsV0FBVztnQkFDTixPQUFPO3NCQUF6QixTQUFTO3VCQUFDLE1BQU07Z0JBQzJCLFFBQVE7c0JBQW5ELFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDakMsV0FBVztzQkFBbkIsS0FBSztnQkEyQndDLG1CQUFtQjtzQkFBaEUsV0FBVzt1QkFBQywrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRW50ZXIsIENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR3JpZExheW91dCwgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSB9IGZyb20gJy4uL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgSXRlbXNDYXAgfSBmcm9tICcuLi9pdGVtcy1jYXAnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9zb3J0LXNlbGVjdC1wYW5lbC9zb3J0LXNlbGVjdC1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzRGF0YVNvdXJjZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMtZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1lbnRyaWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBMaXN0SXRlbVNvcnQgfSBmcm9tICcuLi8uLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRHJhZ0RhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcblxubGV0IGRpc3BsYXllZFdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy1jYXJkLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnbm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNDYXJkR3JpZENvbXBvbmVudDxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcmVhZG9ubHkgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSA9IE5vZGVFbnRyaWVzRGlzcGxheVR5cGU7XG4gICAgcmVhZG9ubHkgVGFyZ2V0ID0gVGFyZ2V0O1xuICAgIC8qKlxuICAgICAqIHJlbGF0aXZlIHNjcm9sbGluZyB3aGVuIGEgc2Nyb2xsaW5nIGFycm93IChsZWZ0IG9yIHJpZ2h0KSBpcyB1c2VkXG4gICAgICogYSB2YWx1ZSBvZiAxIHdvdWxkIG1lYW4gdG8gc2Nyb2xsIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBlbnRpcmUgY29udGVudFxuICAgICAqL1xuICAgIHJlYWRvbmx5IFNjcm9sbGluZ09mZnNldFBlcmNlbnRhZ2UgPSAwLjQ7XG5cbiAgICBjb2x1bW5DaG9vc2VyVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBAVmlld0NoaWxkKCdjb2x1bW5DaG9vc2VyVHJpZ2dlcicpIGNvbHVtbkNob29zZXJUcmlnZ2VyOiBDZGtPdmVybGF5T3JpZ2luO1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRUb3AnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZXQgZ3JpZFRvcCh2YWx1ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckdyaWRUb3AodmFsdWUpO1xuICAgIH1cbiAgICBAVmlld0NoaWxkKFNvcnRTZWxlY3RQYW5lbENvbXBvbmVudClcbiAgICBzZXQgc29ydFBhbmVsKHZhbHVlOiBTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQpIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlUmVtb3RlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBhcyBhbnkpLnNvcnRQYW5lbCA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBAVmlld0NoaWxkcmVuKENka0Ryb3BMaXN0KSBkcm9wTGlzdHNRdWVyeTogUXVlcnlMaXN0PENka0Ryb3BMaXN0PjtcbiAgICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZFJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKCdpdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGl0ZW1SZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICAgIEBJbnB1dCgpIGRpc3BsYXlUeXBlOiBOb2RlRW50cmllc0Rpc3BsYXlUeXBlO1xuXG4gICAgaXNEcmFnZ2luZyA9IGZhbHNlOyAvLyBEcmFnLWFuZC1kcm9wLCBub3QgcmVhcnJhbmdlXG4gICAgZHJvcExpc3RzOiBDZGtEcm9wTGlzdFtdO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzaG93biBpdGVtcyBpcyBsaW1pdGVkIGJ5IGBncmlkQ29uZmlnLm1heFJvd3NgLlxuICAgICAqXG4gICAgICogQSB2YWx1ZSBvZiBgdHJ1ZWAgZG9lcyBub3QgbWVhbiwgdGhhdCB0aGVyZSB3b3VsZCBiZSBtb3JlIGl0ZW1zIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICB2aXNpYmxlSXRlbXNMaW1pdGVkID0gZmFsc2U7XG4gICAgbGF5b3V0OiBHcmlkTGF5b3V0O1xuICAgIC8qKlxuICAgICAqIHVwZGF0ZXMgdmlhIGJveE9ic2VydmVyXG4gICAgICogYW5kIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBpZiBzY3JvbGxpbmcgaW4gdGhlIGRpcmVjdGlvbiBpcyBjdXJyZW50bHkgZmVhc2libGVcbiAgICAgKi9cbiAgICBzY3JvbGwgPSB7XG4gICAgICAgIGxlZnQ6IGZhbHNlLFxuICAgICAgICByaWdodDogZmFsc2UsXG4gICAgfTtcblxuICAgIHJlYWRvbmx5IG5vZGVzJDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heFJvd3MkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGF5b3V0JDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zUGVyUm93U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gICAgcmVhZG9ubHkgaXRlbXNDYXAgPSBuZXcgSXRlbXNDYXA8VD4oKTtcbiAgICBwcml2YXRlIGdsb2JhbEN1cnNvclN0eWxlOiBIVE1MU3R5bGVFbGVtZW50O1xuICAgIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0tc2Nyb2xsLWdyYWRpZW50LWNvbG9yJykgc2Nyb2xsR3JhZGllbnRDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbnRyaWVzU2VydmljZTogTm9kZUVudHJpZXNTZXJ2aWNlPFQ+LFxuICAgICAgICBwdWJsaWMgZW50cmllc0dsb2JhbFNlcnZpY2U6IE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHVibGljIHVpOiBVSVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgKSB7XG4gICAgICAgIHRoaXMubm9kZXMkID0gdGhpcy5lbnRyaWVzU2VydmljZS5kYXRhU291cmNlJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChkYXRhU291cmNlKSA9PiBkYXRhU291cmNlPy5jb25uZWN0KCkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1heFJvd3MkID0gdGhpcy5lbnRyaWVzU2VydmljZS5ncmlkQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgbWFwKChncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnPy5tYXhSb3dzIHx8IG51bGwpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sYXlvdXQkID0gdGhpcy5lbnRyaWVzU2VydmljZS5ncmlkQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgbWFwKChncmlkQ29uZmlnKSA9PiBncmlkQ29uZmlnPy5sYXlvdXQgfHwgJ2dyaWQnKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KCgpID0+ICh0aGlzLnNjcm9sbEdyYWRpZW50Q29sb3IgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLnNjcm9sbEdyYWRpZW50Q29sb3IoKSkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdGVySXRlbXNDYXAoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckxheW91dCgpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaWJsZUl0ZW1zTGltaXRlZCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckdyaWRUb3AoZ3JpZFRvcDogVGVtcGxhdGVSZWY8dW5rbm93bj4pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1NlcnZpY2UuZW50cmllc1RvcE1hdHRlciA9IGdyaWRUb3A7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVzU2VydmljZS5lbnRyaWVzVG9wTWF0dGVyID09PSBncmlkVG9wKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzU2VydmljZS5lbnRyaWVzVG9wTWF0dGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3Rlckl0ZW1zQ2FwKCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YVNvdXJjZSkgPT4gKGRhdGFTb3VyY2UuaXRlbXNDYXAgPSB0aGlzLml0ZW1zQ2FwKSk7XG4gICAgICAgIHJ4anMuY29tYmluZUxhdGVzdChbdGhpcy5pdGVtc1BlclJvd1N1YmplY3QucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSwgdGhpcy5tYXhSb3dzJF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtpdGVtc1BlclJvdywgbWF4Um93c10pID0+XG4gICAgICAgICAgICAgICAgICAgIG1heFJvd3MgPiAwICYmIGl0ZW1zUGVyUm93ICE9PSBudWxsID8gaXRlbXNQZXJSb3cgKiBtYXhSb3dzIDogbnVsbCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2FwKSA9PiAodGhpcy5pdGVtc0NhcC5jYXAgPSBjYXApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGF5b3V0KCkge1xuICAgICAgICB0aGlzLmxheW91dCQuc3Vic2NyaWJlKChsYXlvdXQpID0+ICh0aGlzLmxheW91dCA9IGxheW91dCkpO1xuICAgIH1cblxuICAgIG9uU29ydENoYW5nZShzb3J0OiBTb3J0KSB7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydC5hY3RpdmUgPSBzb3J0LmFjdGl2ZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0LmRpcmVjdGlvbiA9IHNvcnQuZGlyZWN0aW9uO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQpO1xuICAgIH1cblxuICAgIGxvYWREYXRhKHNvdXJjZTogJ3Njcm9sbCcgfCAnYnV0dG9uJykge1xuICAgICAgICAvLyBAVE9ETzogTWF5YmUgdGhpcyBpcyBiZXR0ZXIgaGFuZGxlZCBpbiBhIG1vcmUgY2VudHJhbGVkIHNlcnZpY2VcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgZm9vdGVyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb290ZXInKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMuaXRlbSgwKS5pbm5lckhUTUwudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvdWxkTG9hZE1vcmUgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLmxvYWRNb3JlKHNvdXJjZSk7XG4gICAgICAgIGlmIChjb3VsZExvYWRNb3JlICYmIHNvdXJjZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdE5ld0l0ZW1XaGVuTG9hZGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkN1c3RvbVNvcnRpbmdJblByb2dyZXNzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERyb3BMaXN0cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdFbnRlcmVkKCRldmVudDogQ2RrRHJhZ0VudGVyKSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5nZXREYXRhKCksXG4gICAgICAgICAgICAkZXZlbnQuaXRlbS5kYXRhLFxuICAgICAgICAgICAgJGV2ZW50LmNvbnRhaW5lci5kYXRhLFxuICAgICAgICApO1xuICAgICAgICAvLyBgQ2RrRHJhZ2AgZG9lc24ndCByZWFsbHkgd2FudCB1cyB0byByZWFycmFuZ2UgdGhlIGl0ZW1zIHdoaWxlIGRyYWdnaW5nLiBJdHMgY2FjaGVkXG4gICAgICAgIC8vIGVsZW1lbnQgcG9zaXRpb25zIGdldCBvdXQgb2Ygc3luYyB1bmxlc3Mgd2UgdXBkYXRlIHRoZW0gbWFudWFsbHkuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wTGlzdHM/LmZvckVhY2goKGxpc3QpID0+IChsaXN0Ll9kcm9wTGlzdFJlZiBhcyBhbnkpWydfY2FjaGVJdGVtcyddKCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdTdGFydGVkKCkge1xuICAgICAgICB0aGlzLmdsb2JhbEN1cnNvclN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmdsb2JhbEN1cnNvclN0eWxlKTtcbiAgICAgICAgdGhpcy5nbG9iYWxDdXJzb3JTdHlsZS5pbm5lckhUTUwgPSBgKiB7Y3Vyc29yOiBncmFiYmluZyAhaW1wb3J0YW50OyB9YDtcbiAgICB9XG5cbiAgICBvblJlYXJyYW5nZURyYWdFbmRlZCgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmdsb2JhbEN1cnNvclN0eWxlKTtcbiAgICAgICAgdGhpcy5nbG9iYWxDdXJzb3JTdHlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RHJhZ1N0YXJ0RGVsYXkoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMudWkuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDUwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclZpc2libGVJdGVtc0xpbWl0ZWQoKSB7XG4gICAgICAgIHRoaXMubWF4Um93cyQuc3Vic2NyaWJlKChtYXhSb3dzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVJdGVtc0xpbWl0ZWQgPSBtYXhSb3dzID4gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoRHJvcExpc3RzKCkge1xuICAgICAgICB0aGlzLmRyb3BMaXN0cyA9IHRoaXMuZHJvcExpc3RzUXVlcnkudG9BcnJheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNGaXJzdE5ld0l0ZW1XaGVuTG9hZGVkKCkge1xuICAgICAgICBjb25zdCBvbGRMZW5ndGggPSB0aGlzLml0ZW1SZWZzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5pdGVtUmVmcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IE5vZGVFbnRyaWVzQ2FyZEdyaWRDb21wb25lbnQ8VD5bJ2l0ZW1SZWZzJ10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gb2xkTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbmNlKGl0ZW1zLmdldChvbGRMZW5ndGgpLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNPbmNlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgb25HcmlkU2l6ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUm93ID0gdGhpcy5nZXRJdGVtc1BlclJvdygpO1xuICAgICAgICB0aGlzLml0ZW1zUGVyUm93U3ViamVjdC5uZXh0KGl0ZW1zUGVyUm93KTtcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbXNQZXJSb3coKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCdncmlkLXRlbXBsYXRlLWNvbHVtbnMnKVxuICAgICAgICAgICAgLnNwbGl0KCcgJykubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldFNvcnRDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0Py5jb2x1bW5zPy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCAnc2NvcmUnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfQ09MTEVDVElPTl9PUkRFUkVEX1BPU0lUSU9OKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ01fUFJPUF9USVRMRSksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNNX05BTUUpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DTV9QUk9QX0NfQ1JFQVRFRCksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNNX01PRElGSUVEX0RBVEUpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DQ01fUFJPUF9SRVBMSUNBVElPTk1PRElGSUVEKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfUkVQTElDQVRJT05TT1VSQ0VUSU1FU1RBTVApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc29tZSgoYzIpID0+IGMudHlwZSA9PT0gYzIudHlwZSAmJiBjMi5uYW1lID09PSBjLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgIXRoaXMuZW50cmllc1NlcnZpY2UuY29uZmlndXJlQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5pbmcgPVxuICAgICAgICAgICAgICAgICAgICAnU29ydCBmaWVsZCAnICtcbiAgICAgICAgICAgICAgICAgICAgYy5uYW1lICtcbiAgICAgICAgICAgICAgICAgICAgJyB3YXMgc3BlY2lmaWVkIGJ1dCBpcyBub3QgcHJlc2VudCBhcyBhIGNvbHVtbi4gJyArXG4gICAgICAgICAgICAgICAgICAgICdJdCB3aWxsIGJlIGlnbm9yZWQuIFBsZWFzZSBhbHNvIGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGluIHRoZSA8bGlzdHM+IHNlY3Rpb24nO1xuICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZ3MuaW5jbHVkZXMod2FybmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5ncy5wdXNoKHdhcm5pbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbkRyb3BOb2RlcyA9IChkcmFnRGF0YTogRHJhZ0RhdGE8VD4pID0+IHRoaXMuZW50cmllc1NlcnZpY2UuZHJhZ0Ryb3AuZHJvcEFsbG93ZWQ/LihkcmFnRGF0YSk7XG5cbiAgICBvbk5vZGVzRHJvcHBlZChkcmFnRGF0YTogRHJhZ0RhdGE8Tm9kZT4pIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kcmFnRHJvcC5kcm9wcGVkKGRyYWdEYXRhLnRhcmdldCwge1xuICAgICAgICAgICAgZWxlbWVudDogZHJhZ0RhdGEuZHJhZ2dlZE5vZGVzLFxuICAgICAgICAgICAgbW9kZTogZHJhZ0RhdGEuYWN0aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREcmFnRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWkuaXNUb3VjaFN1YmplY3QucGlwZShcbiAgICAgICAgICAgIG1hcCgodG91Y2gpID0+ICF0b3VjaCAmJiB0aGlzLmVudHJpZXNTZXJ2aWNlLmRyYWdEcm9wPy5kcmFnQWxsb3dlZCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0RHJhZ0RhdGEobm9kZTogVCk6IFRbXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnRlZChub2RlOiBUKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZGVkKCkge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhblNjcm9sbChkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnNjcm9sbExlZnQgPiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICB1c2UgYSBzbWFsbCBwaXhlbCBidWZmZXIgKDEwcHgpIGJlY2F1c2Ugc2Nyb2xsaW5nIGFsaWducyB3aXRoIHRoZSBzdGFydCBvZiBlYWNoIGNhcmQgYW5kXG4gICAgICAgICAgICAgICAgIGl0IGNhbiBjYXVzZSBzbGlnaHQgYWxpZ25tZW50IGlzc3VlcyBvbiB0aGUgZW5kIG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxMZWZ0IDwgZWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQuY2xpZW50V2lkdGggLSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxheW91dCA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLmxlZnQgPSB0aGlzLmNhblNjcm9sbCgnbGVmdCcpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwucmlnaHQgPSB0aGlzLmNhblNjcm9sbCgncmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvU2Nyb2xsKGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0Jykge1xuICAgICAgICAvLyAxIGlzIGVub3VnaCBiZWNhdXNlIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGl0IHZpYSBjc3Mgc25hcHBpbmdcbiAgICAgICAgY29uc3QgbGVmdFNjcm9sbCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAvLyB1c2luZyBzY3JvbGwgYmVjYXVzZSBpdCB3b3JrcyBtb3JlIHJlbGlhYmxlIHRoYW4gc2Nyb2xsQnlcbiAgICAgICAgdGhpcy5ncmlkUmVmPy5uYXRpdmVFbGVtZW50LnNjcm9sbCh7XG4gICAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgICAgIGxlZnRTY3JvbGwgK1xuICAgICAgICAgICAgICAgIE1hdGgubWF4KDI1MCwgcmVjdC53aWR0aCAqIHRoaXMuU2Nyb2xsaW5nT2Zmc2V0UGVyY2VudGFnZSkgKlxuICAgICAgICAgICAgICAgICAgICAoZGlyZWN0aW9uID09PSAncmlnaHQnID8gMSA6IC0xKSxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNDdXN0b21UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIEN1c3RvbVRlbXBsYXRlc0RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgaXNCbG9ja2VkKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucHJvcGVydGllcz8uW1Jlc3RDb25zdGFudHMuQ0NNX1BST1BfSU1QT1JUX0JMT0NLRURdPy5bMF0gPT09ICd0cnVlJztcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2dyaWRUb3A+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNvbmZpZ3VyZUNvbHVtbnNcIlxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIChjbGljayk9XCJjb2x1bW5DaG9vc2VyVmlzaWJsZSQubmV4dCghY29sdW1uQ2hvb3NlclZpc2libGUkLnZhbHVlKVwiXG4gICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICNjb2x1bW5DaG9vc2VyVHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgIFttYXRUb29sdGlwXT1cIidMSVNUX1RBQkxFLkNPTkZJR1VSRV9DT0xVTU5TJyB8IHRyYW5zbGF0ZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTElTVF9UQUJMRS5DT05GSUdVUkVfQ09MVU1OUycgfCB0cmFuc2xhdGVcIlxuICA+XG4gICAgPGkgZXNJY29uPVwic2V0dGluZ3NcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8ZXMtc29ydC1zZWxlY3QtcGFuZWxcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLnNvcnQ/LmFsbG93ZWRcIlxuICAgIGNsYXNzPVwib3JkZXItcGFuZWxcIlxuICAgIFthY3RpdmVdPVwiZW50cmllc1NlcnZpY2Uuc29ydC5hY3RpdmVcIlxuICAgIFtkaXJlY3Rpb25dPVwiZW50cmllc1NlcnZpY2Uuc29ydC5kaXJlY3Rpb25cIlxuICAgIFtjb2x1bW5zXT1cImdldFNvcnRDb2x1bW5zKClcIlxuICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICBbKGN1c3RvbVNvcnRpbmdJblByb2dyZXNzKV09XCJlbnRyaWVzU2VydmljZS5zb3J0LmN1c3RvbVNvcnRpbmdJblByb2dyZXNzXCJcbiAgICAoY3VzdG9tU29ydGluZ0luUHJvZ3Jlc3NDaGFuZ2UpPVwib25DdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc0NoYW5nZSgpXCJcbiAgPjwvZXMtc29ydC1zZWxlY3QtcGFuZWw+XG48L25nLXRlbXBsYXRlPlxuPGVzLWNvbHVtbi1jaG9vc2VyXG4gICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuY29uZmlndXJlQ29sdW1uc1wiXG4gIFsoY29sdW1ucyldPVwiZW50cmllc1NlcnZpY2UuY29sdW1uc1wiXG4gIFtjb2x1bW5DaG9vc2VyVmlzaWJsZV09XCJjb2x1bW5DaG9vc2VyVmlzaWJsZSQgfCBhc3luY1wiXG4gIFtvcmlnaW5dPVwiY29sdW1uQ2hvb3NlclRyaWdnZXJcIlxuICAoY29sdW1uQ2hvb3NlclZpc2libGVDaGFuZ2UpPVwiY29sdW1uQ2hvb3NlclZpc2libGUkLm5leHQoJGV2ZW50KVwiXG4+PC9lcy1jb2x1bW4tY2hvb3Nlcj5cbjxlcy1kcm9wZG93biAjZHJvcGRvd24gW29wdGlvbnNdPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucz8uW1RhcmdldC5MaXN0RHJvcGRvd25dXCI+PC9lcy1kcm9wZG93bj5cblxuPCEtLSBEbyBub3QgcmVuZGVyIHRoZSBsaXN0IGVsZW1lbnQgKGByb2xlPVwibGlzdFwiYCBvciBgbGlgKSB3aGVuIHRoZXJlIGFyZSBubyBsaXN0IGl0ZW1zLiAtLT5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCIobm9kZXMkIHwgYXN5bmMpPy5sZW5ndGggPiAwIHx8IChlbnRyaWVzU2VydmljZS5nbG9iYWxPcHRpb25zU3ViamVjdCB8IGFzeW5jKT8ubGVuZ3RoID4gMFwiXG4+XG4gIDwhLS0gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkIHVzZSBuYXRpdmUgYHVsYCBhbmQgYGxpYCBlbGVtZW50cywgYnV0IHRoZXNlIGhhdmUgYSBzdHJpY3QgbW9kZWwsXG4gIHRoYXQgb25seSBhbGxvd3MgYGxpYCBlbGVtZW50cyBhcyBkaXJlY3QgY2hpbGRyZW4gb2YgYHVsYCBlbGVtZW50cy4gU28gd2Ugd291bGQgbmVlZCB0byB1c2UgdGhlXG4gIG5hdGl2ZSBlbGVtZW50cyBhdCBhbGwgcGxhY2VzIHdpdGhvdXQgYW55IGVsZW1lbnRzIGJldHdlZW4gYHVsYCBhbmQgYGxpYC4gLS0+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLnNvcnQ/LmN1c3RvbVNvcnRpbmdJblByb2dyZXNzXCJcbiAgICByb2xlPVwibGlzdFwiXG4gICAgY2xhc3M9XCJjYXJkLWdyaWQgY2FyZC1ncmlkLXJlb3JkZXJcIlxuICAgIGNka0Ryb3BMaXN0R3JvdXBcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlcyQgfCBhc3luYyBhcyBub2Rlc1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNhcmQtZ3JpZC1vcmRlci13cmFwcGVyXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImRyb3BMaXN0c1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiaVwiXG4gICAgICA+XG4gICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZFxuICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuR3JpZFwiXG4gICAgICAgICAgI2l0ZW1cbiAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiaVwiXG4gICAgICAgICAgW2Nka0RyYWdTdGFydERlbGF5XT1cImdldERyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIGNka0RyYWdQcmV2aWV3Q2xhc3M9XCJlcy1jYXJkLWdyaWQtcmVhcnJhbmdlLWRyYWctcHJldmlld1wiXG4gICAgICAgICAgKGNka0RyYWdFbnRlcmVkKT1cIm9uUmVhcnJhbmdlRHJhZ0VudGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uUmVhcnJhbmdlRHJhZ1N0YXJ0ZWQoKVwiXG4gICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvblJlYXJyYW5nZURyYWdFbmRlZCgpXCJcbiAgICAgICAgPjwvZXMtbm9kZS1lbnRyaWVzLWNhcmQ+XG4gICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZC1zbWFsbFxuICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuU21hbGxHcmlkXCJcbiAgICAgICAgICAjaXRlbVxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpXCJcbiAgICAgICAgICBbY2RrRHJhZ1N0YXJ0RGVsYXldPVwiZ2V0RHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgY2RrRHJhZ1ByZXZpZXdDbGFzcz1cImVzLWNhcmQtZ3JpZC1yZWFycmFuZ2UtZHJhZy1wcmV2aWV3XCJcbiAgICAgICAgICAoY2RrRHJhZ0VudGVyZWQpPVwib25SZWFycmFuZ2VEcmFnRW50ZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25SZWFycmFuZ2VEcmFnU3RhcnRlZCgpXCJcbiAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uUmVhcnJhbmdlRHJhZ0VuZGVkKClcIlxuICAgICAgICA+PC9lcy1ub2RlLWVudHJpZXMtY2FyZC1zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtZ3JpZC13cmFwcGVyXCIgKm5nSWY9XCIhZW50cmllc1NlcnZpY2Uuc29ydD8uY3VzdG9tU29ydGluZ0luUHJvZ3Jlc3NcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2Nyb2xsSGVscGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgcm9sZT1cImxpc3RcIlxuICAgICAgY2xhc3M9XCJjYXJkLWdyaWQgY2FyZC1ncmlkLWxheW91dC17eyBsYXlvdXQgfX1cIlxuICAgICAgI2dyaWRcbiAgICAgIChlc0JvcmRlckJveE9ic2VydmVyKT1cIm9uR3JpZFNpemVDaGFuZ2VzKClcIlxuICAgICAgZXNJbmZpbml0ZVNjcm9sbFxuICAgICAgKHNjcm9sbCk9XCJ1cGRhdGVTY3JvbGxTdGF0ZSgpXCJcbiAgICAgIChzY3JvbGxlZCk9XCIhdmlzaWJsZUl0ZW1zTGltaXRlZCAmJiBsb2FkRGF0YSgnc2Nyb2xsJylcIlxuICAgID5cbiAgICAgIDxlcy1ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnNcbiAgICAgICAgKm5nSWY9XCIoZW50cmllc1NlcnZpY2UuZ2xvYmFsT3B0aW9uc1N1YmplY3QgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICAgIFtkaXNwbGF5VHlwZV09XCJkaXNwbGF5VHlwZVwiXG4gICAgICA+XG4gICAgICA8L2VzLW5vZGUtZW50cmllcy1nbG9iYWwtb3B0aW9ucz5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlcyQgfCBhc3luYyBhcyBub2Rlc1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLWdyaWQtZHJhZy13cmFwcGVyXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBub2RlczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgIFtlc05vZGVzRHJvcFRhcmdldF09XCJub2RlXCJcbiAgICAgICAgICBbY2FuRHJvcE5vZGVzXT1cImNhbkRyb3BOb2Rlc1wiXG4gICAgICAgICAgKG5vZGVEcm9wcGVkKT1cIm9uTm9kZXNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICNkcm9wVGFyZ2V0PVwiZXNOb2Rlc0Ryb3BUYXJnZXRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ3VzdG9tVGVtcGxhdGUoKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiRhbnkobm9kZSlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ3VzdG9tVGVtcGxhdGUoKVwiPlxuICAgICAgICAgICAgPGVzLW5vZGUtZW50cmllcy1jYXJkXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuR3JpZFwiXG4gICAgICAgICAgICAgICNpdGVtXG4gICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICBbZHJvcGRvd25dPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIShnZXREcmFnRW5hYmxlZCgpIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImdldERyYWdEYXRhKG5vZGUpXCJcbiAgICAgICAgICAgICAgZXNOb2Rlc0RyYWdcbiAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKClcIlxuICAgICAgICAgICAgICBbY2xhc3MuY2FyZC1pbXBvcnQtYmxvY2tlZF09XCJpc0Jsb2NrZWQobm9kZSlcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtd2hlbi1kcmFnZ2luZ109XCJcbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nICYmIGVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZFxuICAgICAgICAgICAgICAgICAgKmNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICA/IGVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtZHJhZy1wcmV2aWV3XCJcbiAgICAgICAgICAgICAgICA+PC9lcy1ub2RlLWVudHJpZXMtY2FyZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2VzLW5vZGUtZW50cmllcy1jYXJkPlxuICAgICAgICAgICAgPGVzLW5vZGUtZW50cmllcy1jYXJkLXNtYWxsXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuU21hbGxHcmlkXCJcbiAgICAgICAgICAgICAgI2l0ZW1cbiAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiXG4gICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhKGdldERyYWdFbmFibGVkKCkgfCBhc3luYylcIlxuICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiW25vZGVdXCJcbiAgICAgICAgICAgICAgZXNOb2Rlc0RyYWdcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZXMtbm9kZS1lbnRyaWVzLWNhcmQtc21hbGw+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJkcm9wVGFyZ2V0LmFjdGl2ZT8uY2FuRHJvcD8uZGVueUV4cGxpY2l0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ncmlkLWRyb3AtYmxvY2tlZC1jb250YWluZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGVzSWNvbj1cImNhbmNlbFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcFRhcmdldC5hY3RpdmU/LmNhbkRyb3A/LmFjY2VwdFwiIGNsYXNzPVwiY2FyZC1ncmlkLWRyb3AtYWxsb3dlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtlc0ljb25dPVwiZHJvcFRhcmdldC5hY3RpdmUuYWN0aW9uID09PSAnY29weScgPyAnYWRkX2NpcmNsZV9vdXRsaW5lJyA6ICdhcmNoaXZlJ1wiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIlxuICAgICFlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZyAmJlxuICAgIGVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaGFzTW9yZSgpICYmXG4gICAgIXZpc2libGVJdGVtc0xpbWl0ZWQgJiZcbiAgICBlbnRyaWVzU2VydmljZS5wYWdpbmF0aW9uU3RyYXRlZ3kgPT09ICdpbmZpbml0ZS1zY3JvbGwnICYmXG4gICAgbGF5b3V0ICE9PSAnc2Nyb2xsJ1xuICBcIlxuPlxuICA8ZGl2IGNsYXNzPVwibG9hZC1tb3JlXCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJsb2FkRGF0YSgnYnV0dG9uJylcIj5cbiAgICAgIDxpIGVzSWNvbj1cInJlZnJlc2hcIj48L2k+XG4gICAgICA8c3Bhbj57eyAnTE9BRF9NT1JFJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICBlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZyA9PT0gdHJ1ZSB8fFxuICAgIGVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaXNMb2FkaW5nID09PSAnaW5pdGlhbCcgfHxcbiAgICAoZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgPT09ICdwYWdlJyAmJlxuICAgICAgZW50cmllc1NlcnZpY2UucGFnaW5hdGlvblN0cmF0ZWd5ID09PSAnaW5maW5pdGUtc2Nyb2xsJylcbiAgXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxlcy1zcGlubmVyPjwvZXMtc3Bpbm5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Njcm9sbEhlbHBlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dCA9PT0gJ3Njcm9sbCdcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNjcm9sbC1oZWxwZXItbGVmdFwiXG4gICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgIChjbGljayk9XCJkb1Njcm9sbCgnbGVmdCcpXCJcbiAgICAgICpuZ0lmPVwic2Nyb2xsLmxlZnRcIlxuICAgID5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRvU2Nyb2xsKCdsZWZ0JylcIj5cbiAgICAgICAgPGkgZXNJY29uPVwia2V5Ym9hcmRfYXJyb3dfbGVmdFwiIFthcmlhXT1cInRydWVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNjcm9sbC1oZWxwZXItcmlnaHRcIlxuICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAoY2xpY2spPVwiZG9TY3JvbGwoJ3JpZ2h0JylcIlxuICAgICAgKm5nSWY9XCJzY3JvbGwucmlnaHRcIlxuICAgID5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRvU2Nyb2xsKCdyaWdodCcpXCI+XG4gICAgICAgIDxpIGVzSWNvbj1cImtleWJvYXJkX2Fycm93X3JpZ2h0XCIgW2FyaWFdPVwidHJ1ZVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9ub2RlLWVudHJpZXMtY2FyZC1ncmlkL25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQtZ3JpZC9ub2RlLWVudHJpZXMtY2FyZC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBUSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUFjLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSXJELElBQUksaUJBQWlCLEdBQWEsRUFBRSxDQUFDO0FBUXJDLE1BQU0sT0FBTyw0QkFBNEI7SUFXckMsSUFBNEMsT0FBTyxDQUFDLEtBQTJCO1FBQzNFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQ0ksU0FBUyxDQUFDLEtBQStCO1FBQ3pDLHdFQUF3RTtRQUN4RSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFrQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJO0lBQ1IsQ0FBQztJQWlDRCxZQUNXLGNBQXFDLEVBQ3JDLG9CQUE4QyxFQUM5QyxnQkFBNkMsRUFDN0MsRUFBYSxFQUNaLE1BQWM7UUFKZixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUEwQjtRQUM5QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTZCO1FBQzdDLE9BQUUsR0FBRixFQUFFLENBQVc7UUFDWixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBMURqQiwyQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUNoRCxXQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCOzs7V0FHRztRQUNNLDhCQUF5QixHQUFHLEdBQUcsQ0FBQztRQUV6QywwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQWtCbkQsZUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtRQUVuRDs7OztXQUlHO1FBQ0gsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCOzs7V0FHRztRQUNILFdBQU0sR0FBRztZQUNMLElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBS2UsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3RFLGFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBSyxDQUFDO1FBRTlCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBMk14QyxpQkFBWSxHQUFHLENBQUMsUUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFqTTNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM5QyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUNuRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2hELEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFDaEQsb0JBQW9CLEVBQUUsQ0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUMvQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLEVBQ2pELG9CQUFvQixFQUFFLENBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDM0UsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQTZCO1FBQ2pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNyRCxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7YUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwRixJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUMzQixPQUFPLEdBQUcsQ0FBQyxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckUsQ0FDSjthQUNBLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUEyQjtRQUNoQyxrRUFBa0U7UUFDbEUsSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsNkJBQTZCO1lBQzdCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDdkQsT0FBTztZQUNYLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxhQUFhLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsK0JBQStCO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFvQjtRQUN2QyxlQUFlLENBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUNoQixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDeEIsQ0FBQztRQUNGLHFGQUFxRjtRQUNyRixvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFJLENBQUMsWUFBb0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQ2pGLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxtQ0FBbUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87YUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLEtBQWtELEVBQUUsRUFBRTtZQUM5RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sU0FBUyxDQUFDLE9BQW9CO1FBQ2xDLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDOUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7YUFDekMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTztpQkFDckMsTUFBTSxDQUNILElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFDakMsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUM1RSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUNyRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUMvQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQ3pELElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFDeEQsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxFQUNwRSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLG1DQUFtQyxDQUFDLENBQzlFO2lCQUNBLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25ELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2dCQUN6Qzs7Ozs7Ozs7O3VCQVNPO1lBQ1gsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUlELGNBQWMsQ0FBQyxRQUF3QjtRQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNsRCxPQUFPLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDOUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1NBQ3hCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQ3RFLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQU87UUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUNoRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBTztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFTyxTQUFTLENBQUMsU0FBMkI7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7UUFDNUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixPQUFPLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7aUJBQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQy9COzs7bUJBR0c7Z0JBQ0gsT0FBTyxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDL0UsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUEyQjtRQUNoQyxrRUFBa0U7UUFDbEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakUsNERBQTREO1FBQzVELElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUMvQixJQUFJLEVBQ0EsVUFBVTtnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztvQkFDdEQsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxRQUFRO1NBQ3JCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxZQUFZLHlCQUF5QixDQUFDO0lBQy9FLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBVTtRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztJQUNwRixDQUFDOzhHQTdVUSw0QkFBNEI7a0dBQTVCLDRCQUE0Qiw2YkFjMUIsd0JBQXdCLHNKQVFyQixXQUFXLGlHQUVLLFVBQVUsNkJDbEU1Qyw0N1FBaU9BOzsyRkR2TGEsNEJBQTRCO2tCQU54QyxTQUFTOytCQUNJLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTTtxTkFZWixvQkFBb0I7c0JBQXRELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNXLE9BQU87c0JBQWxELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEMsU0FBUztzQkFEWixTQUFTO3VCQUFDLHdCQUF3QjtnQkFRUixjQUFjO3NCQUF4QyxZQUFZO3VCQUFDLFdBQVc7Z0JBQ04sT0FBTztzQkFBekIsU0FBUzt1QkFBQyxNQUFNO2dCQUMyQixRQUFRO3NCQUFuRCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2pDLFdBQVc7c0JBQW5CLEtBQUs7Z0JBMkJ3QyxtQkFBbUI7c0JBQWhFLFdBQVc7dUJBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0VudGVyLCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBOb2RlLCBSZXN0Q29uc3RhbnRzIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEdyaWRMYXlvdXQsIE5vZGVFbnRyaWVzRGlzcGxheVR5cGUgfSBmcm9tICcuLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IEl0ZW1zQ2FwIH0gZnJvbSAnLi4vaXRlbXMtY2FwJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ydFNlbGVjdFBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vc29ydC1zZWxlY3QtcGFuZWwvc29ydC1zZWxlY3QtcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc0RhdGFTb3VyY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLWRhdGEtc291cmNlJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzL29wdGlvbi1pdGVtJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlzdEl0ZW1Tb3J0IH0gZnJvbSAnLi4vLi4vdHlwZXMvbGlzdC1pdGVtJztcbmltcG9ydCB7IERyYWdEYXRhIH0gZnJvbSAnLi4vLi4vdHlwZXMvZHJhZy1kcm9wJztcbmltcG9ydCB7IENka092ZXJsYXlPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbmxldCBkaXNwbGF5ZWRXYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLWVudHJpZXMtY2FyZC1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ25vZGUtZW50cmllcy1jYXJkLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub2RlLWVudHJpZXMtY2FyZC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVFbnRyaWVzQ2FyZEdyaWRDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHJlYWRvbmx5IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUgPSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlO1xuICAgIHJlYWRvbmx5IFRhcmdldCA9IFRhcmdldDtcbiAgICAvKipcbiAgICAgKiByZWxhdGl2ZSBzY3JvbGxpbmcgd2hlbiBhIHNjcm9sbGluZyBhcnJvdyAobGVmdCBvciByaWdodCkgaXMgdXNlZFxuICAgICAqIGEgdmFsdWUgb2YgMSB3b3VsZCBtZWFuIHRvIHNjcm9sbCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZW50aXJlIGNvbnRlbnRcbiAgICAgKi9cbiAgICByZWFkb25seSBTY3JvbGxpbmdPZmZzZXRQZXJjZW50YWdlID0gMC40O1xuXG4gICAgY29sdW1uQ2hvb3NlclZpc2libGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgQFZpZXdDaGlsZCgnY29sdW1uQ2hvb3NlclRyaWdnZXInKSBjb2x1bW5DaG9vc2VyVHJpZ2dlcjogQ2RrT3ZlcmxheU9yaWdpbjtcbiAgICBAVmlld0NoaWxkKCdncmlkVG9wJywgeyBzdGF0aWM6IHRydWUgfSkgc2V0IGdyaWRUb3AodmFsdWU6IFRlbXBsYXRlUmVmPHVua25vd24+KSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJHcmlkVG9wKHZhbHVlKTtcbiAgICB9XG4gICAgQFZpZXdDaGlsZChTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQpXG4gICAgc2V0IHNvcnRQYW5lbCh2YWx1ZTogU29ydFNlbGVjdFBhbmVsQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIGlmICh0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBOb2RlRGF0YVNvdXJjZVJlbW90ZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICh0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UgYXMgYW55KS5zb3J0UGFuZWwgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG4gICAgQFZpZXdDaGlsZHJlbihDZGtEcm9wTGlzdCkgZHJvcExpc3RzUXVlcnk6IFF1ZXJ5TGlzdDxDZGtEcm9wTGlzdD47XG4gICAgQFZpZXdDaGlsZCgnZ3JpZCcpIGdyaWRSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZHJlbignaXRlbScsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpdGVtUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcbiAgICBASW5wdXQoKSBkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZTtcblxuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTsgLy8gRHJhZy1hbmQtZHJvcCwgbm90IHJlYXJyYW5nZVxuICAgIGRyb3BMaXN0czogQ2RrRHJvcExpc3RbXTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2hvd24gaXRlbXMgaXMgbGltaXRlZCBieSBgZ3JpZENvbmZpZy5tYXhSb3dzYC5cbiAgICAgKlxuICAgICAqIEEgdmFsdWUgb2YgYHRydWVgIGRvZXMgbm90IG1lYW4sIHRoYXQgdGhlcmUgd291bGQgYmUgbW9yZSBpdGVtcyBhdmFpbGFibGUuXG4gICAgICovXG4gICAgdmlzaWJsZUl0ZW1zTGltaXRlZCA9IGZhbHNlO1xuICAgIGxheW91dDogR3JpZExheW91dDtcbiAgICAvKipcbiAgICAgKiB1cGRhdGVzIHZpYSBib3hPYnNlcnZlclxuICAgICAqIGFuZCBob2xkcyB0aGUgaW5mb3JtYXRpb24gaWYgc2Nyb2xsaW5nIGluIHRoZSBkaXJlY3Rpb24gaXMgY3VycmVudGx5IGZlYXNpYmxlXG4gICAgICovXG4gICAgc2Nyb2xsID0ge1xuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICByZWFkb25seSBub2RlcyQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXhSb3dzJDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheW91dCQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtc1BlclJvd1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgIHJlYWRvbmx5IGl0ZW1zQ2FwID0gbmV3IEl0ZW1zQ2FwPFQ+KCk7XG4gICAgcHJpdmF0ZSBnbG9iYWxDdXJzb3JTdHlsZTogSFRNTFN0eWxlRWxlbWVudDtcbiAgICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tLXNjcm9sbC1ncmFkaWVudC1jb2xvcicpIHNjcm9sbEdyYWRpZW50Q29sb3I6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIGVudHJpZXNHbG9iYWxTZXJ2aWNlOiBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0ZW1wbGF0ZXNTZXJ2aWNlOiBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB1aTogVUlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICkge1xuICAgICAgICB0aGlzLm5vZGVzJCA9IHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoZGF0YVNvdXJjZSkgPT4gZGF0YVNvdXJjZT8uY29ubmVjdCgpKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYXhSb3dzJCA9IHRoaXMuZW50cmllc1NlcnZpY2UuZ3JpZENvbmZpZyQucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3JpZENvbmZpZykgPT4gZ3JpZENvbmZpZz8ubWF4Um93cyB8fCBudWxsKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubGF5b3V0JCA9IHRoaXMuZW50cmllc1NlcnZpY2UuZ3JpZENvbmZpZyQucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3JpZENvbmZpZykgPT4gZ3JpZENvbmZpZz8ubGF5b3V0IHx8ICdncmlkJyksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiAodGhpcy5zY3JvbGxHcmFkaWVudENvbG9yID0gdGhpcy5lbnRyaWVzU2VydmljZS5zY3JvbGxHcmFkaWVudENvbG9yKCkpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWdpc3Rlckl0ZW1zQ2FwKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2libGVJdGVtc0xpbWl0ZWQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJHcmlkVG9wKGdyaWRUb3A6IFRlbXBsYXRlUmVmPHVua25vd24+KTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmVudHJpZXNUb3BNYXR0ZXIgPSBncmlkVG9wO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbXBsYXRlc1NlcnZpY2UuZW50cmllc1RvcE1hdHRlciA9PT0gZ3JpZFRvcCkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1NlcnZpY2UuZW50cmllc1RvcE1hdHRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJJdGVtc0NhcCgpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kYXRhU291cmNlJFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGFTb3VyY2UpID0+IChkYXRhU291cmNlLml0ZW1zQ2FwID0gdGhpcy5pdGVtc0NhcCkpO1xuICAgICAgICByeGpzLmNvbWJpbmVMYXRlc3QoW3RoaXMuaXRlbXNQZXJSb3dTdWJqZWN0LnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksIHRoaXMubWF4Um93cyRdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbaXRlbXNQZXJSb3csIG1heFJvd3NdKSA9PlxuICAgICAgICAgICAgICAgICAgICBtYXhSb3dzID4gMCAmJiBpdGVtc1BlclJvdyAhPT0gbnVsbCA/IGl0ZW1zUGVyUm93ICogbWF4Um93cyA6IG51bGwsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNhcCkgPT4gKHRoaXMuaXRlbXNDYXAuY2FwID0gY2FwKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckxheW91dCgpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQkLnN1YnNjcmliZSgobGF5b3V0KSA9PiAodGhpcy5sYXlvdXQgPSBsYXlvdXQpKTtcbiAgICB9XG5cbiAgICBvblNvcnRDaGFuZ2Uoc29ydDogU29ydCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQuYWN0aXZlID0gc29ydC5hY3RpdmU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydC5kaXJlY3Rpb24gPSBzb3J0LmRpcmVjdGlvbjtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0Q2hhbmdlLmVtaXQodGhpcy5lbnRyaWVzU2VydmljZS5zb3J0KTtcbiAgICB9XG5cbiAgICBsb2FkRGF0YShzb3VyY2U6ICdzY3JvbGwnIHwgJ2J1dHRvbicpIHtcbiAgICAgICAgLy8gQFRPRE86IE1heWJlIHRoaXMgaXMgYmV0dGVyIGhhbmRsZWQgaW4gYSBtb3JlIGNlbnRyYWxlZCBzZXJ2aWNlXG4gICAgICAgIGlmIChzb3VyY2UgPT09ICdzY3JvbGwnKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIGZvb3RlclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZm9vdGVyJyk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoICYmIGVsZW1lbnRzLml0ZW0oMCkuaW5uZXJIVE1MLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3VsZExvYWRNb3JlID0gdGhpcy5lbnRyaWVzU2VydmljZS5sb2FkTW9yZShzb3VyY2UpO1xuICAgICAgICBpZiAoY291bGRMb2FkTW9yZSAmJiBzb3VyY2UgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRmlyc3ROZXdJdGVtV2hlbkxvYWRlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc0NoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0Q2hhbmdlLmVtaXQodGhpcy5lbnRyaWVzU2VydmljZS5zb3J0KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEcm9wTGlzdHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25SZWFycmFuZ2VEcmFnRW50ZXJlZCgkZXZlbnQ6IENka0RyYWdFbnRlcikge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuZ2V0RGF0YSgpLFxuICAgICAgICAgICAgJGV2ZW50Lml0ZW0uZGF0YSxcbiAgICAgICAgICAgICRldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gYENka0RyYWdgIGRvZXNuJ3QgcmVhbGx5IHdhbnQgdXMgdG8gcmVhcnJhbmdlIHRoZSBpdGVtcyB3aGlsZSBkcmFnZ2luZy4gSXRzIGNhY2hlZFxuICAgICAgICAvLyBlbGVtZW50IHBvc2l0aW9ucyBnZXQgb3V0IG9mIHN5bmMgdW5sZXNzIHdlIHVwZGF0ZSB0aGVtIG1hbnVhbGx5LlxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcExpc3RzPy5mb3JFYWNoKChsaXN0KSA9PiAobGlzdC5fZHJvcExpc3RSZWYgYXMgYW55KVsnX2NhY2hlSXRlbXMnXSgpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25SZWFycmFuZ2VEcmFnU3RhcnRlZCgpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxDdXJzb3JTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5nbG9iYWxDdXJzb3JTdHlsZSk7XG4gICAgICAgIHRoaXMuZ2xvYmFsQ3Vyc29yU3R5bGUuaW5uZXJIVE1MID0gYCoge2N1cnNvcjogZ3JhYmJpbmcgIWltcG9ydGFudDsgfWA7XG4gICAgfVxuXG4gICAgb25SZWFycmFuZ2VEcmFnRW5kZWQoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5nbG9iYWxDdXJzb3JTdHlsZSk7XG4gICAgICAgIHRoaXMuZ2xvYmFsQ3Vyc29yU3R5bGUgPSBudWxsO1xuICAgIH1cblxuICAgIGdldERyYWdTdGFydERlbGF5KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnVpLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiA1MDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJWaXNpYmxlSXRlbXNMaW1pdGVkKCkge1xuICAgICAgICB0aGlzLm1heFJvd3MkLnN1YnNjcmliZSgobWF4Um93cykgPT4ge1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlSXRlbXNMaW1pdGVkID0gbWF4Um93cyA+IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaERyb3BMaXN0cygpIHtcbiAgICAgICAgdGhpcy5kcm9wTGlzdHMgPSB0aGlzLmRyb3BMaXN0c1F1ZXJ5LnRvQXJyYXkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzRmlyc3ROZXdJdGVtV2hlbkxvYWRlZCgpIHtcbiAgICAgICAgY29uc3Qgb2xkTGVuZ3RoID0gdGhpcy5pdGVtUmVmcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuaXRlbVJlZnMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zOiBOb2RlRW50cmllc0NhcmRHcmlkQ29tcG9uZW50PFQ+WydpdGVtUmVmcyddKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IG9sZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25jZShpdGVtcy5nZXQob2xkTGVuZ3RoKS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzT25jZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIG9uR3JpZFNpemVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtc1BlclJvdyA9IHRoaXMuZ2V0SXRlbXNQZXJSb3coKTtcbiAgICAgICAgdGhpcy5pdGVtc1BlclJvd1N1YmplY3QubmV4dChpdGVtc1BlclJvdyk7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1zUGVyUm93KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJylcbiAgICAgICAgICAgIC5zcGxpdCgnICcpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRTb3J0Q29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydD8uY29sdW1ucz8uZmlsdGVyKChjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgJ3Njb3JlJyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNDTV9QUk9QX0NPTExFQ1RJT05fT1JERVJFRF9QT1NJVElPTiksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNNX1BST1BfVElUTEUpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DTV9OQU1FKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ01fUFJPUF9DX0NSRUFURUQpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdEl0ZW1Tb3J0KCdOT0RFJywgUmVzdENvbnN0YW50cy5DTV9NT0RJRklFRF9EQVRFKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IExpc3RJdGVtU29ydCgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfUkVQTElDQVRJT05NT0RJRklFRCksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0SXRlbVNvcnQoJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNDTV9QUk9QX1JFUExJQ0FUSU9OU09VUkNFVElNRVNUQU1QKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnNvbWUoKGMyKSA9PiBjLnR5cGUgPT09IGMyLnR5cGUgJiYgYzIubmFtZSA9PT0gYy5uYW1lKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0ICYmICF0aGlzLmVudHJpZXNTZXJ2aWNlLmNvbmZpZ3VyZUNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0Py5jb2x1bW5zO1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5pbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgJ1NvcnQgZmllbGQgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBjLm5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyB3YXMgc3BlY2lmaWVkIGJ1dCBpcyBub3QgcHJlc2VudCBhcyBhIGNvbHVtbi4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnSXQgd2lsbCBiZSBpZ25vcmVkLiBQbGVhc2UgYWxzbyBjb25maWd1cmUgdGhpcyBmaWVsZCBpbiB0aGUgPGxpc3RzPiBzZWN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNwbGF5ZWRXYXJuaW5ncy5pbmNsdWRlcyh3YXJuaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkV2FybmluZ3MucHVzaCh3YXJuaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfSovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjYW5Ecm9wTm9kZXMgPSAoZHJhZ0RhdGE6IERyYWdEYXRhPFQ+KSA9PiB0aGlzLmVudHJpZXNTZXJ2aWNlLmRyYWdEcm9wLmRyb3BBbGxvd2VkPy4oZHJhZ0RhdGEpO1xuXG4gICAgb25Ob2Rlc0Ryb3BwZWQoZHJhZ0RhdGE6IERyYWdEYXRhPE5vZGU+KSB7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZHJhZ0Ryb3AuZHJvcHBlZChkcmFnRGF0YS50YXJnZXQsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGRyYWdEYXRhLmRyYWdnZWROb2RlcyxcbiAgICAgICAgICAgIG1vZGU6IGRyYWdEYXRhLmFjdGlvbixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0RHJhZ0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVpLmlzVG91Y2hTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICBtYXAoKHRvdWNoKSA9PiAhdG91Y2ggJiYgdGhpcy5lbnRyaWVzU2VydmljZS5kcmFnRHJvcD8uZHJhZ0FsbG93ZWQpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldERyYWdEYXRhKG5vZGU6IFQpOiBUW10ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbjtcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtub2RlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0ZWQobm9kZTogVCkge1xuICAgICAgICBpZiAoIXRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkRyYWdFbmRlZCgpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5TY3JvbGwoZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdyaWRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxMZWZ0ID4gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgdXNlIGEgc21hbGwgcGl4ZWwgYnVmZmVyICgxMHB4KSBiZWNhdXNlIHNjcm9sbGluZyBhbGlnbnMgd2l0aCB0aGUgc3RhcnQgb2YgZWFjaCBjYXJkIGFuZFxuICAgICAgICAgICAgICAgICBpdCBjYW4gY2F1c2Ugc2xpZ2h0IGFsaWdubWVudCBpc3N1ZXMgb24gdGhlIGVuZCBvZiB0aGUgY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsTGVmdCA8IGVsZW1lbnQuc2Nyb2xsV2lkdGggLSBlbGVtZW50LmNsaWVudFdpZHRoIC0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbFN0YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT09ICdzY3JvbGwnKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5sZWZ0ID0gdGhpcy5jYW5TY3JvbGwoJ2xlZnQnKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLnJpZ2h0ID0gdGhpcy5jYW5TY3JvbGwoJ3JpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkb1Njcm9sbChkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcpIHtcbiAgICAgICAgLy8gMSBpcyBlbm91Z2ggYmVjYXVzZSB0aGUgYnJvd3NlciB3aWxsIGhhbmRsZSBpdCB2aWEgY3NzIHNuYXBwaW5nXG4gICAgICAgIGNvbnN0IGxlZnRTY3JvbGwgPSB0aGlzLmdyaWRSZWY/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gdXNpbmcgc2Nyb2xsIGJlY2F1c2UgaXQgd29ya3MgbW9yZSByZWxpYWJsZSB0aGFuIHNjcm9sbEJ5XG4gICAgICAgIHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudC5zY3JvbGwoe1xuICAgICAgICAgICAgbGVmdDpcbiAgICAgICAgICAgICAgICBsZWZ0U2Nyb2xsICtcbiAgICAgICAgICAgICAgICBNYXRoLm1heCgyNTAsIHJlY3Qud2lkdGggKiB0aGlzLlNjcm9sbGluZ09mZnNldFBlcmNlbnRhZ2UpICpcbiAgICAgICAgICAgICAgICAgICAgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IDEgOiAtMSksXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzQ3VzdG9tVGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDdXN0b21UZW1wbGF0ZXNEYXRhU291cmNlO1xuICAgIH1cblxuICAgIGlzQmxvY2tlZChub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLnByb3BlcnRpZXM/LltSZXN0Q29uc3RhbnRzLkNDTV9QUk9QX0lNUE9SVF9CTE9DS0VEXT8uWzBdID09PSAndHJ1ZSc7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNncmlkVG9wPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5jb25maWd1cmVDb2x1bW5zXCJcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICAoY2xpY2spPVwiY29sdW1uQ2hvb3NlclZpc2libGUkLm5leHQoIWNvbHVtbkNob29zZXJWaXNpYmxlJC52YWx1ZSlcIlxuICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAjY29sdW1uQ2hvb3NlclRyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICBbbWF0VG9vbHRpcF09XCInTElTVF9UQUJMRS5DT05GSUdVUkVfQ09MVU1OUycgfCB0cmFuc2xhdGVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0xJU1RfVEFCTEUuQ09ORklHVVJFX0NPTFVNTlMnIHwgdHJhbnNsYXRlXCJcbiAgPlxuICAgIDxpIGVzSWNvbj1cInNldHRpbmdzXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPGVzLXNvcnQtc2VsZWN0LXBhbmVsXG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5zb3J0Py5hbGxvd2VkXCJcbiAgICBjbGFzcz1cIm9yZGVyLXBhbmVsXCJcbiAgICBbYWN0aXZlXT1cImVudHJpZXNTZXJ2aWNlLnNvcnQuYWN0aXZlXCJcbiAgICBbZGlyZWN0aW9uXT1cImVudHJpZXNTZXJ2aWNlLnNvcnQuZGlyZWN0aW9uXCJcbiAgICBbY29sdW1uc109XCJnZXRTb3J0Q29sdW1ucygpXCJcbiAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgWyhjdXN0b21Tb3J0aW5nSW5Qcm9ncmVzcyldPVwiZW50cmllc1NlcnZpY2Uuc29ydC5jdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc1wiXG4gICAgKGN1c3RvbVNvcnRpbmdJblByb2dyZXNzQ2hhbmdlKT1cIm9uQ3VzdG9tU29ydGluZ0luUHJvZ3Jlc3NDaGFuZ2UoKVwiXG4gID48L2VzLXNvcnQtc2VsZWN0LXBhbmVsPlxuPC9uZy10ZW1wbGF0ZT5cbjxlcy1jb2x1bW4tY2hvb3NlclxuICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNvbmZpZ3VyZUNvbHVtbnNcIlxuICBbKGNvbHVtbnMpXT1cImVudHJpZXNTZXJ2aWNlLmNvbHVtbnNcIlxuICBbY29sdW1uQ2hvb3NlclZpc2libGVdPVwiY29sdW1uQ2hvb3NlclZpc2libGUkIHwgYXN5bmNcIlxuICBbb3JpZ2luXT1cImNvbHVtbkNob29zZXJUcmlnZ2VyXCJcbiAgKGNvbHVtbkNob29zZXJWaXNpYmxlQ2hhbmdlKT1cImNvbHVtbkNob29zZXJWaXNpYmxlJC5uZXh0KCRldmVudClcIlxuPjwvZXMtY29sdW1uLWNob29zZXI+XG48ZXMtZHJvcGRvd24gI2Ryb3Bkb3duIFtvcHRpb25zXT1cImVudHJpZXNTZXJ2aWNlLm9wdGlvbnM/LltUYXJnZXQuTGlzdERyb3Bkb3duXVwiPjwvZXMtZHJvcGRvd24+XG5cbjwhLS0gRG8gbm90IHJlbmRlciB0aGUgbGlzdCBlbGVtZW50IChgcm9sZT1cImxpc3RcImAgb3IgYGxpYCkgd2hlbiB0aGVyZSBhcmUgbm8gbGlzdCBpdGVtcy4gLS0+XG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwiKG5vZGVzJCB8IGFzeW5jKT8ubGVuZ3RoID4gMCB8fCAoZW50cmllc1NlcnZpY2UuZ2xvYmFsT3B0aW9uc1N1YmplY3QgfCBhc3luYyk/Lmxlbmd0aCA+IDBcIlxuPlxuICA8IS0tIEZJWE1FOiBJZGVhbGx5LCB3ZSB3b3VsZCB1c2UgbmF0aXZlIGB1bGAgYW5kIGBsaWAgZWxlbWVudHMsIGJ1dCB0aGVzZSBoYXZlIGEgc3RyaWN0IG1vZGVsLFxuICB0aGF0IG9ubHkgYWxsb3dzIGBsaWAgZWxlbWVudHMgYXMgZGlyZWN0IGNoaWxkcmVuIG9mIGB1bGAgZWxlbWVudHMuIFNvIHdlIHdvdWxkIG5lZWQgdG8gdXNlIHRoZVxuICBuYXRpdmUgZWxlbWVudHMgYXQgYWxsIHBsYWNlcyB3aXRob3V0IGFueSBlbGVtZW50cyBiZXR3ZWVuIGB1bGAgYW5kIGBsaWAuIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5zb3J0Py5jdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc1wiXG4gICAgcm9sZT1cImxpc3RcIlxuICAgIGNsYXNzPVwiY2FyZC1ncmlkIGNhcmQtZ3JpZC1yZW9yZGVyXCJcbiAgICBjZGtEcm9wTGlzdEdyb3VwXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXMkIHwgYXN5bmMgYXMgbm9kZXNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjYXJkLWdyaWQtb3JkZXItd3JhcHBlclwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIG5vZGVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJkcm9wTGlzdHNcIlxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImlcIlxuICAgICAgPlxuICAgICAgICA8ZXMtbm9kZS1lbnRyaWVzLWNhcmRcbiAgICAgICAgICAqbmdJZj1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLkdyaWRcIlxuICAgICAgICAgICNpdGVtXG4gICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgcm9sZT1cImxpc3RpdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImlcIlxuICAgICAgICAgIFtjZGtEcmFnU3RhcnREZWxheV09XCJnZXREcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBjZGtEcmFnUHJldmlld0NsYXNzPVwiZXMtY2FyZC1ncmlkLXJlYXJyYW5nZS1kcmFnLXByZXZpZXdcIlxuICAgICAgICAgIChjZGtEcmFnRW50ZXJlZCk9XCJvblJlYXJyYW5nZURyYWdFbnRlcmVkKCRldmVudClcIlxuICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvblJlYXJyYW5nZURyYWdTdGFydGVkKClcIlxuICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25SZWFycmFuZ2VEcmFnRW5kZWQoKVwiXG4gICAgICAgID48L2VzLW5vZGUtZW50cmllcy1jYXJkPlxuICAgICAgICA8ZXMtbm9kZS1lbnRyaWVzLWNhcmQtc21hbGxcbiAgICAgICAgICAqbmdJZj1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZFwiXG4gICAgICAgICAgI2l0ZW1cbiAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiaVwiXG4gICAgICAgICAgW2Nka0RyYWdTdGFydERlbGF5XT1cImdldERyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIGNka0RyYWdQcmV2aWV3Q2xhc3M9XCJlcy1jYXJkLWdyaWQtcmVhcnJhbmdlLWRyYWctcHJldmlld1wiXG4gICAgICAgICAgKGNka0RyYWdFbnRlcmVkKT1cIm9uUmVhcnJhbmdlRHJhZ0VudGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uUmVhcnJhbmdlRHJhZ1N0YXJ0ZWQoKVwiXG4gICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvblJlYXJyYW5nZURyYWdFbmRlZCgpXCJcbiAgICAgICAgPjwvZXMtbm9kZS1lbnRyaWVzLWNhcmQtc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWdyaWQtd3JhcHBlclwiICpuZ0lmPVwiIWVudHJpZXNTZXJ2aWNlLnNvcnQ/LmN1c3RvbVNvcnRpbmdJblByb2dyZXNzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNjcm9sbEhlbHBlclwiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgIHJvbGU9XCJsaXN0XCJcbiAgICAgIGNsYXNzPVwiY2FyZC1ncmlkIGNhcmQtZ3JpZC1sYXlvdXQte3sgbGF5b3V0IH19XCJcbiAgICAgICNncmlkXG4gICAgICAoZXNCb3JkZXJCb3hPYnNlcnZlcik9XCJvbkdyaWRTaXplQ2hhbmdlcygpXCJcbiAgICAgIGVzSW5maW5pdGVTY3JvbGxcbiAgICAgIChzY3JvbGwpPVwidXBkYXRlU2Nyb2xsU3RhdGUoKVwiXG4gICAgICAoc2Nyb2xsZWQpPVwiIXZpc2libGVJdGVtc0xpbWl0ZWQgJiYgbG9hZERhdGEoJ3Njcm9sbCcpXCJcbiAgICA+XG4gICAgICA8ZXMtbm9kZS1lbnRyaWVzLWdsb2JhbC1vcHRpb25zXG4gICAgICAgICpuZ0lmPVwiKGVudHJpZXNTZXJ2aWNlLmdsb2JhbE9wdGlvbnNTdWJqZWN0IHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgICBbZGlzcGxheVR5cGVdPVwiZGlzcGxheVR5cGVcIlxuICAgICAgPlxuICAgICAgPC9lcy1ub2RlLWVudHJpZXMtZ2xvYmFsLW9wdGlvbnM+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXMkIHwgYXN5bmMgYXMgbm9kZXNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ncmlkLWRyYWctd3JhcHBlclwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICBbZXNOb2Rlc0Ryb3BUYXJnZXRdPVwibm9kZVwiXG4gICAgICAgICAgW2NhbkRyb3BOb2Rlc109XCJjYW5Ecm9wTm9kZXNcIlxuICAgICAgICAgIChub2RlRHJvcHBlZCk9XCJvbk5vZGVzRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgICAjZHJvcFRhcmdldD1cImVzTm9kZXNEcm9wVGFyZ2V0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0N1c3RvbVRlbXBsYXRlKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCIkYW55KG5vZGUpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0N1c3RvbVRlbXBsYXRlKClcIj5cbiAgICAgICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZFxuICAgICAgICAgICAgICAqbmdJZj1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLkdyaWRcIlxuICAgICAgICAgICAgICAjaXRlbVxuICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgW2Ryb3Bkb3duXT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgcm9sZT1cImxpc3RpdGVtXCJcbiAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiEoZ2V0RHJhZ0VuYWJsZWQoKSB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJnZXREcmFnRGF0YShub2RlKVwiXG4gICAgICAgICAgICAgIGVzTm9kZXNEcmFnXG4gICAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNhcmQtaW1wb3J0LWJsb2NrZWRdPVwiaXNCbG9ja2VkKG5vZGUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLXdoZW4tZHJhZ2dpbmddPVwiXG4gICAgICAgICAgICAgICAgaXNEcmFnZ2luZyAmJiBlbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICA8ZXMtbm9kZS1lbnRyaWVzLWNhcmRcbiAgICAgICAgICAgICAgICAgICpjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgPyBlbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWRyYWctcHJldmlld1wiXG4gICAgICAgICAgICAgICAgPjwvZXMtbm9kZS1lbnRyaWVzLWNhcmQ+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9lcy1ub2RlLWVudHJpZXMtY2FyZD5cbiAgICAgICAgICAgIDxlcy1ub2RlLWVudHJpZXMtY2FyZC1zbWFsbFxuICAgICAgICAgICAgICAqbmdJZj1cImRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZFwiXG4gICAgICAgICAgICAgICNpdGVtXG4gICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIShnZXREcmFnRW5hYmxlZCgpIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cIltub2RlXVwiXG4gICAgICAgICAgICAgIGVzTm9kZXNEcmFnXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2VzLW5vZGUtZW50cmllcy1jYXJkLXNtYWxsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiZHJvcFRhcmdldC5hY3RpdmU/LmNhbkRyb3A/LmRlbnlFeHBsaWNpdFwiXG4gICAgICAgICAgICBjbGFzcz1cImNhcmQtZ3JpZC1kcm9wLWJsb2NrZWQtY29udGFpbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBlc0ljb249XCJjYW5jZWxcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3BUYXJnZXQuYWN0aXZlPy5jYW5Ecm9wPy5hY2NlcHRcIiBjbGFzcz1cImNhcmQtZ3JpZC1kcm9wLWFsbG93ZWQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBbZXNJY29uXT1cImRyb3BUYXJnZXQuYWN0aXZlLmFjdGlvbiA9PT0gJ2NvcHknID8gJ2FkZF9jaXJjbGVfb3V0bGluZScgOiAnYXJjaGl2ZSdcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICAhZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgJiZcbiAgICBlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmhhc01vcmUoKSAmJlxuICAgICF2aXNpYmxlSXRlbXNMaW1pdGVkICYmXG4gICAgZW50cmllc1NlcnZpY2UucGFnaW5hdGlvblN0cmF0ZWd5ID09PSAnaW5maW5pdGUtc2Nyb2xsJyAmJlxuICAgIGxheW91dCAhPT0gJ3Njcm9sbCdcbiAgXCJcbj5cbiAgPGRpdiBjbGFzcz1cImxvYWQtbW9yZVwiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwibG9hZERhdGEoJ2J1dHRvbicpXCI+XG4gICAgICA8aSBlc0ljb249XCJyZWZyZXNoXCI+PC9pPlxuICAgICAgPHNwYW4+e3sgJ0xPQURfTU9SRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwiXG4gICAgZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgPT09IHRydWUgfHxcbiAgICBlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZyA9PT0gJ2luaXRpYWwnIHx8XG4gICAgKGVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaXNMb2FkaW5nID09PSAncGFnZScgJiZcbiAgICAgIGVudHJpZXNTZXJ2aWNlLnBhZ2luYXRpb25TdHJhdGVneSA9PT0gJ2luZmluaXRlLXNjcm9sbCcpXG4gIFwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8ZXMtc3Bpbm5lcj48L2VzLXNwaW5uZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzY3JvbGxIZWxwZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXQgPT09ICdzY3JvbGwnXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzY3JvbGwtaGVscGVyLWxlZnRcIlxuICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAoY2xpY2spPVwiZG9TY3JvbGwoJ2xlZnQnKVwiXG4gICAgICAqbmdJZj1cInNjcm9sbC5sZWZ0XCJcbiAgICA+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkb1Njcm9sbCgnbGVmdCcpXCI+XG4gICAgICAgIDxpIGVzSWNvbj1cImtleWJvYXJkX2Fycm93X2xlZnRcIiBbYXJpYV09XCJ0cnVlXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzY3JvbGwtaGVscGVyLXJpZ2h0XCJcbiAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgKGNsaWNrKT1cImRvU2Nyb2xsKCdyaWdodCcpXCJcbiAgICAgICpuZ0lmPVwic2Nyb2xsLnJpZ2h0XCJcbiAgICA+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkb1Njcm9sbCgncmlnaHQnKVwiPlxuICAgICAgICA8aSBlc0ljb249XCJrZXlib2FyZF9hcnJvd19yaWdodFwiIFthcmlhXT1cInRydWVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|