@ecodev/natural 61.1.1 → 61.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge1VudHlwZWRNb2RlbFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uPFQgZXh0ZW5kcyBVbnR5cGVkTW9kZWxTZXJ2aWNlID0gVW50eXBlZE1vZGVsU2VydmljZT4gPSB7XG4gICAgLyoqXG4gICAgICogQW4gQWJzdHJhY3RNb2RlbFNlcnZpY2UgdG8gYmUgdXNlZCB0byBmZXRjaCBpdGVtc1xuICAgICAqL1xuICAgIHNlcnZpY2U6IFR5cGU8VD47XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgRmlsdGVyQ29uZGl0aW9uRmllbGQgbmFtZSB0byBmaWx0ZXIgaXRlbXNcbiAgICAgKlxuICAgICAqIFRob3NlIHdpbGwgYmUgdXNlZCBkaXJlY3RseSB0byBidWlsZCBmaWx0ZXIgdG8gZmV0Y2ggaXRlbXMsIHNvIHRoZXkgbXVzdCBiZVxuICAgICAqIHZhbGlkIEFQSSBGaWx0ZXJDb25kaXRpb25GaWVsZCBuYW1lcyBmb3IgdGhlIGdpdmVuIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBFZzogZ2l2ZW4gdGhlIFF1ZXN0aW9uU2VydmljZSwgcG9zc2libGUgbmFtZXMgd291bGQgYmU6XG4gICAgICpcbiAgICAgKiAtIFwiY2hhcHRlclwiIHRvIGZpbHRlciBieSB0aGUgcXVlc3Rpb24ncyBjaGFwdGVyXG4gICAgICogLSBcInBhcmVudFwiIHRvIGZpbHRlciBieSB0aGUgcXVlc3Rpb24ncyBwYXJlbnQgcXVlc3Rpb25cbiAgICAgKi9cbiAgICBwYXJlbnRzUmVsYXRpb25OYW1lcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIEZpbHRlckNvbmRpdGlvbkZpZWxkIG5hbWUgdG8gZGVjbGFyZSBoaWVyYXJjaHlcbiAgICAgKlxuICAgICAqIFRob3NlIG11c3QgYmUgdGhlIGBwYXJlbnRzUmVsYXRpb25OYW1lc2AgbmFtZSwgdGhhdCBjb3JyZXNwb25kIHRvIHRoaXMgc2VydmljZSxcbiAgICAgKiBvZiBhbGwgY2hpbGRyZW4gc2VydmljZXMuXG4gICAgICpcbiAgICAgKiBFZzogZ2l2ZW4gdGhlIFF1ZXN0aW9uU2VydmljZSwgcG9zc2libGUgbmFtZXMgd291bGQgYmU6XG4gICAgICpcbiAgICAgKiAtIFwicXVlc3Rpb25zXCIgY29taW5nIGZyb20gQ2hhcHRlclNlcnZpY2VcbiAgICAgKiAtIFwicXVlc3Rpb25zXCIgY29taW5nIGZyb20gUXVlc3Rpb25TZXJ2aWNlXG4gICAgICovXG4gICAgY2hpbGRyZW5SZWxhdGlvbk5hbWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGZpbHRlcnMgYXBwbGllZCBpbiB0aGUgcXVlcnkgc2VudCBieSBnZXRMaXN0IGZ1bmN0aW9uXG4gICAgICovXG4gICAgZmlsdGVyPzogUXVlcnlWYXJpYWJsZXNbJ2ZpbHRlciddO1xuXG4gICAgLyoqXG4gICAgICogS2V5IG9mIHRoZSByZXR1cm5lZCBsaXRlcmFsIGNvbnRhaW5lciBtb2RlbHMgYnkgY29uZmlnIC8gc2VydmljZVxuICAgICAqL1xuICAgIHNlbGVjdGFibGVBdEtleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERpc3BsYXllZCBpY29uIGZvciBpdGVtcyByZXRyaWV2ZWQgZm9yIHRoYXQgY29uZmlnXG4gICAgICovXG4gICAgaWNvbj86IHN0cmluZztcbiAgICBpbmplY3RlZFNlcnZpY2U/OiBUO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGJvb2xlYW4uIElmIHRydWUgdGhlIGl0ZW0gaXMgc2VsZWN0YWJsZSwgaWYgZmFsc2UsIGl0J3Mgbm90LlxuICAgICAqIElmIG1pc3NpbmcsIGl0ZW0gaXMgc2VsZWN0YWJsZS5cbiAgICAgKi9cbiAgICBpc1NlbGVjdGFibGVDYWxsYmFjaz86IChpdGVtOiBhbnkpID0+IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbnMgdGhhdCByZWNlaXZlcyBhIG1vZGVsIGFuZCByZXR1cm5zIGEgc3RyaW5nIGZvciBkaXNwbGF5IHZhbHVlXG4gICAgICpcbiAgICAgKiBJZiBtaXNzaW5nLCBmYWxsYmFjayBvbiBnbG9iYWwgYE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JDb21wb25lbnQuZGlzcGxheVdpdGhgXG4gICAgICovXG4gICAgZGlzcGxheVdpdGg/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBOYXR1cmFsSGllcmFyY2hpY1NlcnZpY2VDb25maWd1cmF0aW9uPFQgZXh0ZW5kcyBVbnR5cGVkTW9kZWxTZXJ2aWNlID0gVW50eXBlZE1vZGVsU2VydmljZT4gPSB7XG4gICAgaW5qZWN0ZWRTZXJ2aWNlOiBUO1xufSAmIE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbjxUPjtcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge1VudHlwZWRNb2RlbFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uPFQgZXh0ZW5kcyBVbnR5cGVkTW9kZWxTZXJ2aWNlID0gVW50eXBlZE1vZGVsU2VydmljZT4gPSB7XG4gICAgLyoqXG4gICAgICogQW4gQWJzdHJhY3RNb2RlbFNlcnZpY2UgdG8gYmUgdXNlZCB0byBmZXRjaCBpdGVtc1xuICAgICAqL1xuICAgIHNlcnZpY2U6IFR5cGU8VD47XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgRmlsdGVyQ29uZGl0aW9uRmllbGQgbmFtZSB0byBmaWx0ZXIgaXRlbXNcbiAgICAgKlxuICAgICAqIFRob3NlIHdpbGwgYmUgdXNlZCBkaXJlY3RseSB0byBidWlsZCBmaWx0ZXIgdG8gZmV0Y2ggaXRlbXMsIHNvIHRoZXkgbXVzdCBiZVxuICAgICAqIHZhbGlkIEFQSSBGaWx0ZXJDb25kaXRpb25GaWVsZCBuYW1lcyBmb3IgdGhlIGdpdmVuIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBFZzogZ2l2ZW4gdGhlIFF1ZXN0aW9uU2VydmljZSwgcG9zc2libGUgbmFtZXMgd291bGQgYmU6XG4gICAgICpcbiAgICAgKiAtIFwiY2hhcHRlclwiIHRvIGZpbHRlciBieSB0aGUgcXVlc3Rpb24ncyBjaGFwdGVyXG4gICAgICogLSBcInBhcmVudFwiIHRvIGZpbHRlciBieSB0aGUgcXVlc3Rpb24ncyBwYXJlbnQgcXVlc3Rpb25cbiAgICAgKi9cbiAgICBwYXJlbnRzUmVsYXRpb25OYW1lcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIEZpbHRlckNvbmRpdGlvbkZpZWxkIG5hbWUgdG8gZGVjbGFyZSBoaWVyYXJjaHlcbiAgICAgKlxuICAgICAqIFRob3NlIG11c3QgYmUgdGhlIGBwYXJlbnRzUmVsYXRpb25OYW1lc2AgbmFtZSwgdGhhdCBjb3JyZXNwb25kIHRvIHRoaXMgc2VydmljZSxcbiAgICAgKiBvZiBhbGwgY2hpbGRyZW4gc2VydmljZXMuXG4gICAgICpcbiAgICAgKiBFZzogZ2l2ZW4gdGhlIFF1ZXN0aW9uU2VydmljZSwgcG9zc2libGUgbmFtZXMgd291bGQgYmU6XG4gICAgICpcbiAgICAgKiAtIFwicXVlc3Rpb25zXCIgY29taW5nIGZyb20gQ2hhcHRlclNlcnZpY2VcbiAgICAgKiAtIFwicXVlc3Rpb25zXCIgY29taW5nIGZyb20gUXVlc3Rpb25TZXJ2aWNlXG4gICAgICovXG4gICAgY2hpbGRyZW5SZWxhdGlvbk5hbWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGZpbHRlcnMgYXBwbGllZCBpbiB0aGUgcXVlcnkgc2VudCBieSBnZXRMaXN0IGZ1bmN0aW9uXG4gICAgICovXG4gICAgZmlsdGVyPzogUXVlcnlWYXJpYWJsZXNbJ2ZpbHRlciddO1xuXG4gICAgLyoqXG4gICAgICogS2V5IG9mIHRoZSByZXR1cm5lZCBsaXRlcmFsIGNvbnRhaW5lciBtb2RlbHMgYnkgY29uZmlnIC8gc2VydmljZVxuICAgICAqL1xuICAgIHNlbGVjdGFibGVBdEtleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERpc3BsYXllZCBpY29uIGZvciBpdGVtcyByZXRyaWV2ZWQgZm9yIHRoYXQgY29uZmlnXG4gICAgICovXG4gICAgaWNvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBib29sZWFuLiBJZiB0cnVlIHRoZSBpdGVtIGlzIHNlbGVjdGFibGUsIGlmIGZhbHNlLCBpdCdzIG5vdC5cbiAgICAgKiBJZiBtaXNzaW5nLCBpdGVtIGlzIHNlbGVjdGFibGUuXG4gICAgICovXG4gICAgaXNTZWxlY3RhYmxlQ2FsbGJhY2s/OiAoaXRlbTogYW55KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb25zIHRoYXQgcmVjZWl2ZXMgYSBtb2RlbCBhbmQgcmV0dXJucyBhIHN0cmluZyBmb3IgZGlzcGxheSB2YWx1ZVxuICAgICAqXG4gICAgICogSWYgbWlzc2luZywgZmFsbGJhY2sgb24gZ2xvYmFsIGBOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yQ29tcG9uZW50LmRpc3BsYXlXaXRoYFxuICAgICAqL1xuICAgIGRpc3BsYXlXaXRoPzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xufTtcbiJdfQ==
@@ -358,7 +358,7 @@ export class NaturalHierarchicSelectorComponent {
358
358
  return model.__typename + '-' + model.id;
359
359
  }
360
360
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHierarchicSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
361
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalHierarchicSelectorComponent, isStandalone: true, selector: "natural-hierarchic-selector", inputs: { displayWith: "displayWith", config: "config", multiple: "multiple", selected: "selected", allowUnselect: "allowUnselect", filters: "filters", searchFacets: "searchFacets", searchSelections: "searchSelections" }, outputs: { searchSelectionChange: "searchSelectionChange", selectionChange: "selectionChange" }, providers: [NaturalHierarchicSelectorService], usesOnChanges: true, ngImport: i0, template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search (selectionChange)=\"search($event)\" [facets]=\"searchFacets\" [selections]=\"searchSelections\" />\n</div>\n\n<div class=\"body\">\n @if (loading) {\n <mat-progress-spinner [diameter]=\"36\" mode=\"indeterminate\" style=\"margin: 10px\" />\n }\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n @if (node.expandable) {\n <button\n (click)=\"loadChildren(node)\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n @if (node.loading) {\n <mat-progress-spinner [diameter]=\"24\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n }\n @if (!node.loading) {\n <mat-icon [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\" />\n }\n </button>\n }\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n @if (node.node.config.icon) {\n <mat-icon [naturalIcon]=\"node.node.config.icon\" style=\"margin-right: 10px\" />\n }\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n @for (node of selectedNodes; track node.model.id) {\n <mat-chip-option (removed)=\"unselectModelNode(node)\" [removable]=\"true\" [selectable]=\"false\">\n @if (node.config.icon) {\n <mat-icon [naturalIcon]=\"node.config.icon\" />\n }\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <button matChipRemove>\n <mat-icon naturalIcon=\"cancel\" />\n </button>\n </mat-chip-option>\n } @empty {\n <p class=\"mat-body nat-padding-horizontal\" i18n>Aucune s\u00E9lection</p>\n }\n </mat-chip-listbox>\n</div>\n\n@if (!loading && !dataSource.data.length) {\n <div i18n>Aucun r\u00E9sultat</div>\n}\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"], dependencies: [{ kind: "component", type: NaturalSearchComponent, selector: "natural-search", inputs: ["placeholder", "facets", "multipleGroups", "dropdownTitle", "selections"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i3.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i3.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i7.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i7.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }] });
361
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalHierarchicSelectorComponent, isStandalone: true, selector: "natural-hierarchic-selector", inputs: { displayWith: "displayWith", config: "config", multiple: "multiple", selected: "selected", allowUnselect: "allowUnselect", filters: "filters", searchFacets: "searchFacets", searchSelections: "searchSelections" }, outputs: { searchSelectionChange: "searchSelectionChange", selectionChange: "selectionChange" }, providers: [NaturalHierarchicSelectorService], usesOnChanges: true, ngImport: i0, template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search (selectionChange)=\"search($event)\" [facets]=\"searchFacets\" [selections]=\"searchSelections\" />\n</div>\n\n<div class=\"body\">\n @if (loading) {\n <mat-progress-spinner [diameter]=\"36\" mode=\"indeterminate\" style=\"margin: 10px\" />\n }\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n @if (node.expandable) {\n <button\n (click)=\"loadChildren(node)\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n @if (node.loading) {\n <mat-progress-spinner [diameter]=\"24\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n }\n @if (!node.loading) {\n <mat-icon [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\" />\n }\n </button>\n }\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n @if (node.node.config.icon) {\n <mat-icon [naturalIcon]=\"node.node.config.icon\" style=\"margin-right: 10px\" />\n }\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n @for (node of selectedNodes; track node.model.id) {\n <mat-chip-option (removed)=\"unselectModelNode(node)\" [removable]=\"true\" [selectable]=\"false\">\n @if (node.config.icon) {\n <mat-icon matChipAvatar [naturalIcon]=\"node.config.icon\" />\n }\n {{ node.model.name || node.model.fullName }}\n <button matChipRemove>\n <mat-icon naturalIcon=\"cancel\" />\n </button>\n </mat-chip-option>\n } @empty {\n <p class=\"mat-body nat-padding-horizontal\" i18n>Aucune s\u00E9lection</p>\n }\n </mat-chip-listbox>\n</div>\n\n@if (!loading && !dataSource.data.length) {\n <div i18n>Aucun r\u00E9sultat</div>\n}\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"], dependencies: [{ kind: "component", type: NaturalSearchComponent, selector: "natural-search", inputs: ["placeholder", "facets", "multipleGroups", "dropdownTitle", "selections"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i3.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i3.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "directive", type: i7.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i7.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i7.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }] });
362
362
  }
363
363
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHierarchicSelectorComponent, decorators: [{
364
364
  type: Component,
@@ -372,7 +372,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
372
372
  NaturalIconDirective,
373
373
  MatCheckboxModule,
374
374
  MatChipsModule,
375
- ], template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search (selectionChange)=\"search($event)\" [facets]=\"searchFacets\" [selections]=\"searchSelections\" />\n</div>\n\n<div class=\"body\">\n @if (loading) {\n <mat-progress-spinner [diameter]=\"36\" mode=\"indeterminate\" style=\"margin: 10px\" />\n }\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n @if (node.expandable) {\n <button\n (click)=\"loadChildren(node)\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n @if (node.loading) {\n <mat-progress-spinner [diameter]=\"24\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n }\n @if (!node.loading) {\n <mat-icon [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\" />\n }\n </button>\n }\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n @if (node.node.config.icon) {\n <mat-icon [naturalIcon]=\"node.node.config.icon\" style=\"margin-right: 10px\" />\n }\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n @for (node of selectedNodes; track node.model.id) {\n <mat-chip-option (removed)=\"unselectModelNode(node)\" [removable]=\"true\" [selectable]=\"false\">\n @if (node.config.icon) {\n <mat-icon [naturalIcon]=\"node.config.icon\" />\n }\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <button matChipRemove>\n <mat-icon naturalIcon=\"cancel\" />\n </button>\n </mat-chip-option>\n } @empty {\n <p class=\"mat-body nat-padding-horizontal\" i18n>Aucune s\u00E9lection</p>\n }\n </mat-chip-listbox>\n</div>\n\n@if (!loading && !dataSource.data.length) {\n <div i18n>Aucun r\u00E9sultat</div>\n}\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"] }]
375
+ ], template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search (selectionChange)=\"search($event)\" [facets]=\"searchFacets\" [selections]=\"searchSelections\" />\n</div>\n\n<div class=\"body\">\n @if (loading) {\n <mat-progress-spinner [diameter]=\"36\" mode=\"indeterminate\" style=\"margin: 10px\" />\n }\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n @if (node.expandable) {\n <button\n (click)=\"loadChildren(node)\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n @if (node.loading) {\n <mat-progress-spinner [diameter]=\"24\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n }\n @if (!node.loading) {\n <mat-icon [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\" />\n }\n </button>\n }\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n @if (node.node.config.icon) {\n <mat-icon [naturalIcon]=\"node.node.config.icon\" style=\"margin-right: 10px\" />\n }\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n @for (node of selectedNodes; track node.model.id) {\n <mat-chip-option (removed)=\"unselectModelNode(node)\" [removable]=\"true\" [selectable]=\"false\">\n @if (node.config.icon) {\n <mat-icon matChipAvatar [naturalIcon]=\"node.config.icon\" />\n }\n {{ node.model.name || node.model.fullName }}\n <button matChipRemove>\n <mat-icon naturalIcon=\"cancel\" />\n </button>\n </mat-chip-option>\n } @empty {\n <p class=\"mat-body nat-padding-horizontal\" i18n>Aucune s\u00E9lection</p>\n }\n </mat-chip-listbox>\n</div>\n\n@if (!loading && !dataSource.data.length) {\n <div i18n>Aucun r\u00E9sultat</div>\n}\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"] }]
376
376
  }], propDecorators: { displayWith: [{
377
377
  type: Input
378
378
  }], config: [{
@@ -395,4 +395,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
395
395
  }], selectionChange: [{
396
396
  type: Output
397
397
  }] } });
398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFOUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGlCQUFpQixF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TUFBTTtzQkFBckMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBS1AsUUFBUTtzQkFBdkIsS0FBSztnQkFNVSxRQUFRO3NCQUF2QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxZQUFZO3NCQUEzQixLQUFLO2dCQUtVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFLb0IscUJBQXFCO3NCQUE5QyxNQUFNO2dCQVdtQixlQUFlO3NCQUF4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RmxhdFRyZWVDb250cm9sfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciwgTWF0VHJlZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaW5hbGl6ZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHt0b0dyYXBoUUxEb2N0cmluZUZpbHRlcn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZSc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hGYWNldHN9IGZyb20gJy4uLy4uL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi8uLi9zZWFyY2gvdHlwZXMvdmFsdWVzJztcbmltcG9ydCB7SGllcmFyY2hpY0ZsYXROb2RlfSBmcm9tICcuLi9jbGFzc2VzL2ZsYXQtbm9kZSc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL2NsYXNzZXMvaGllcmFyY2hpYy1maWx0ZXJzLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljTW9kZWxOb2RlfSBmcm9tICcuLi9jbGFzc2VzL21vZGVsLW5vZGUnO1xuaW1wb3J0IHtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSwgT3JnYW5pemVkTW9kZWxTZWxlY3Rpb259IGZyb20gJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7cmVwbGFjZU9iamVjdEtlZXBpbmdSZWZlcmVuY2V9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5pbXBvcnQge01hdENoaXBzTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQge01hdENoZWNrYm94TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoQ29tcG9uZW50fSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWhpZXJhcmNoaWMtc2VsZWN0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOYXR1cmFsU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0VHJlZU1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdENoaXBzTW9kdWxlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSA9IGluamVjdChOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgbW9kZWwgYW5kIHJldHVybnMgYSBzdHJpbmcgZm9yIGRpc3BsYXkgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVdpdGg/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWcgZm9yIGl0ZW1zIGFuZCByZWxhdGlvbnMgYXJyYW5nZW1lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGNvbmZpZyE6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdO1xuXG4gICAgLyoqXG4gICAgICogSWYgbXVsdGlwbGUgb3Igc2luZ2xlIGl0ZW0gc2VsZWN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBpdGVtc1xuICAgICAqIE9yZ2FuaXplZCBieSBrZXksIGNvbnRhaW5pbmcgZWFjaCBhbiBhcnJheSBvZiBzZWxlY3RlZCBpdGVtcyBvZiBzYW1lIHR5cGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNlbGVjdGFibGUgZWxlbWVudHMgY2FuIGJlIHVuc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dVbnNlbGVjdCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoYXQgYXBwbHkgdG8gZWFjaCBxdWVyeVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJzPzogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmYWNldHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb25zIHRvIGFwcGx5IG9uIG5hdHVyYWwtc2VhcmNoIG9uIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiBuYXR1cmFsLXNlYXJjaCBzZWxlY3Rpb25zIGNoYW5nZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoU2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucz4oKTtcblxuICAgIC8qKlxuICAgICAqIElubmVyIHJlcHJlc2VudGF0aW9uIG9mIHNlbGVjdGVkIEBJbnB1dCgpIHRvIGFsbG93IGZsYXQgbGlzdGluZyBhcyBtYXQtY2hpcC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWROb2RlczogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzZWxlY3Rpb24gY2hhbmdlXG4gICAgICogUmV0dXJucyBhIExpdGVyYWwgd2hlcmUgc2VsZWN0ZWQgbW9kZWxzIGFyZSBvcmdhbml6ZWQgYnkga2V5XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uPigpO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxlciBmb3Igbm9kZXMgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGZsYXROb2Rlc1NlbGVjdGlvbiE6IFNlbGVjdGlvbk1vZGVsPEhpZXJhcmNoaWNGbGF0Tm9kZT47XG5cbiAgICBwdWJsaWMgdHJlZUNvbnRyb2whOiBGbGF0VHJlZUNvbnRyb2w8SGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgdHJlZUZsYXR0ZW5lciE6IE1hdFRyZWVGbGF0dGVuZXI8SGllcmFyY2hpY01vZGVsTm9kZSwgSGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgZGF0YVNvdXJjZSE6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxIaWVyYXJjaGljTW9kZWxOb2RlLCBIaWVyYXJjaGljRmxhdE5vZGU+O1xuXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciB0cmFuc2Zvcm1lZCBub2Rlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZmxhdE5vZGVNYXA6IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4gPSBuZXcgTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPigpO1xuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkNoYW5nZSBpbXBsZW1lbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkICYmICFjaGFuZ2VzLnNlbGVjdGVkLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubmVyU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlsdGVycyAmJiAhY2hhbmdlcy5maWx0ZXJzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSb290cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkluaXQgaW1wbGVtZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEluaXQgdHJlZSBjaGVja2JveCBzZWxlY3RvcnNcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLm11bHRpcGxlKTtcblxuICAgICAgICAvLyBUcmVlIGNvbnRyb2xsZXJzIGFuZCBtYW5pcHVsYXRvcnNcbiAgICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVyKCksXG4gICAgICAgICAgICB0aGlzLmdldExldmVsKCksXG4gICAgICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZSgpLFxuICAgICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxIaWVyYXJjaGljRmxhdE5vZGU+KHRoaXMuZ2V0TGV2ZWwoKSwgdGhpcy5pc0V4cGFuZGFibGUoKSk7XG5cbiAgICAgICAgLy8gVGhlIGRhdGFTb3VyY2UgY29udGFpbnMgYSBuZXN0ZWQgTW9kZWxOb2RlcyBsaXN0LiBFYWNoIE1vZGVsTm9kZSBoYXMgYSBjaGlsZCBhdHRyaWJ1dGUgdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUuXG4gICAgICAgIC8vIFRoZSBkYXRhU291cmNlIGNvbnRhaW5zIGEgZmxhdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmVzdGVkIE1vZGVsTm9kZXMgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHRyZWVGbGF0dGVuZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBkYXRhU291cmNlIHdoZW4gcmVjZWl2aW5nIG5ldyBsaXN0IC0+IHdlIGFzc2lnbiB0aGUgd2hvbGUgdHJlZVxuICAgICAgICAvLyBUaGUgdHJlZUNvbnRyb2wgYW5kIHRyZWVGbGF0dGVuZXIgd2lsbCBnZW5lcmF0ZSB0aGUgZGlzcGxheWVkIHRyZWVcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmRhdGFDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+ICh0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGEpKTtcblxuICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IHNjcmVlbiBvbiBmaXJzdCBsb2FkIGFuZCBpbml0IE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlIHdpdGggaW5wdXR0ZWQgY29uZmlndXJhdGlvblxuICAgICAgICBsZXQgdmFyaWFibGVzO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hTZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCB0aGlzLnNlYXJjaFNlbGVjdGlvbnMpfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRSb290cyh2YXJpYWJsZXMpO1xuXG4gICAgICAgIC8vIE9yZ2FuaXplZFNlbGVjdGlvbiBpbnRvIGxpc3QgdXNhYmxlIGJ5IHRlbXBsYXRlXG4gICAgICAgIHRoaXMudXBkYXRlSW5uZXJTZWxlY3Rpb24odGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHNlbGVjdGlvbiBvZiBhIEZsYXROb2RlLCBjb25zaWRlcmluZyBpZiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgYWN0aXZhdGVkIG9yIG5vdFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAvLyBJcyBtdWx0aXBsZSBhbGxvd2VkLCBqdXN0IHRvZ2dsZSBlbGVtZW50XG4gICAgICAgICAgICBpZiAodGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZmxhdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdFNpbmdsZUZsYXROb2RlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIG5vdCBtdWx0aXBsZSwgYW5kIHdlIHdhbnQgdG8gc2VsZWN0IGFuIGVsZW1lbnQsIHVuc2VsZWN0IGV2ZXJ5dGhpbmcgYmVmb3JlIHRvIGtlZXAgYSBzaW5nbGUgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHVuc2VsZWN0aW5nIGFuIGVsZW1lbnQgZnJvbSB0aGUgbWF0LWNoaXBzLCBpdCBjYW4gYmUgZGVlcCBpbiB0aGUgaGllcmFyY2h5LCBhbmQgdGhlIHRyZWUgZWxlbWVudCBtYXkgbm90IGV4aXN0Li4uXG4gICAgICogLi4uIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBtYXQtY2hpcHMgbGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdW5zZWxlY3RNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGNoaXBzIGxpc3Qgb25seSBpZiBubyBmbGF0Tm9kZSwgYmVjYXVzZSB1bnNlbGVjdEZsYXROb2RlKCkgYWxyZWFkeSBkZWFscyB3aXRoIGl0LlxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb2RlbE5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzTm9kZVRvZ2dsYWJsZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKGZsYXROb2RlLm5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGUuZGVzZWxlY3RhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlLnNlbGVjdGFibGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERpc3BsYXlGbihjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbik6IChpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgICAgIGlmIChjb25maWcuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbSA9PiAoaXRlbSA/IGl0ZW0uZnVsbE5hbWUgfHwgaXRlbS5uYW1lIDogJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkQ2hpbGRyZW4oZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihmbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZWQgdG8gY29sbGFwc2UgYWxsIGNoaWxkcmVuIHdoZW4gY2xvc2luZyBhIHBhcmVudCwgYnV0IG5vdCBzdXJlIGl0J3MgZ29vZC5cbiAgICAgKi9cbiAgICAvLyBwdWJsaWMgbG9hZENoaWxkcmVuKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChmbGF0Tm9kZSkpIHtcbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgY2FjaGVkRmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgIC8vICAgICAgICAgaWYgKGNhY2hlZEZsYXROb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihjYWNoZWRGbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIENsb3NlIGNoaWxkcmVuXG4gICAgLy8gICAgICAgICAgICAgY2FjaGVkRmxhdE5vZGUubm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShjaGlsZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuY29sbGFwc2UoY2hpbGROb2RlKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGlsZHJlbigpOiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSkgPT4gT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+IHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuQ2hhbmdlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYSBIaWVyYXJjaGljTW9kZWxOb2RlIGludG8gYSBGbGF0Tm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtZXIoKTogKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpID0+IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVGbGF0Tm9kZShub2RlLCBsZXZlbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGRlZXAgb2YgdGhlIG5vZGUgaW4gdGhlIHRyZWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExldmVsKCk6IChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IG51bWJlciB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5sZXZlbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBhbHdheXMgZXhwYW5kYWJsZSBiZWNhdXNlIHdlIGxvYWQgb24gZGVtYW5kLCB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIGFyZSBjaGlsZHJlbiB5ZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzRXhwYW5kYWJsZSgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZUZsYXROb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpOiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICAvLyBSZXR1cm4gRmxhdE5vZGUgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZsYXROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gbmV3IEZsYXROb2RlXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZsYXROb2RlKG5vZGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9ucyk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCBzZWxlY3Rpb25zKX07XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Uuc2VhcmNoKHZhcmlhYmxlcywgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvb3RzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRSb290cyhzZWFyY2hWYXJpYWJsZXM/OiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZsYXROb2RlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4oKTtcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlXG4gICAgICAgICAgICAuaW5pdCh0aGlzLmNvbmZpZywgdGhpcy5maWx0ZXJzLCBzZWFyY2hWYXJpYWJsZXMgfHwgbnVsbClcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN5bmMgaW5uZXIgc2VsZWN0aW9uICh0cmVlIGFuZCBtYXQtY2hpcHMpIGFjY29yZGluZyB0byBzZWxlY3RlZCBpbnB1dCBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUlubmVyU2VsZWN0aW9uKHNlbGVjdGVkOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbik6IHZvaWQge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gYW4gT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gaW50byBhIE1vZGVsTm9kZSBsaXN0IHRoYXQgaXMgdXNlZCBpbiB0aGUgc2VsZWN0ZWQgem9uZSBvZiB0aGUgY29tcG9uZW50IChzZWUgdGVtcGxhdGUpXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5mcm9tT3JnYW5pemVkU2VsZWN0aW9uKHNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZWxlY3QgYSBub2RlLCBrZWVwaW5nIHRoZSByZXN0IG9mIHRoZSBzZWxlY3RlZCB1bnRvdWNoZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kZWxOb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIG5vZGUgZnJvbSBjaGlwIGxpc3RzXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5kZXggPSB0aGlzLnNlbGVjdGVkTm9kZXMuZmluZEluZGV4KG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5zcGxpY2Uoc2VsZWN0aW9uSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIG5vZGUsIGtlZXBpbmcgdGggcmVzdCBvZiB0aGUgc2VsZWN0ZWQgdW50b3VjaGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5wdXNoKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBzZWxlY3RlZCBhbmQgc2VsZWN0IHRoZSBnaXZlbiBub2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtmbGF0Tm9kZS5ub2RlXTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgYW5kIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdW5zZWxlY3RTaW5nbGVGbGF0Tm9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHRoZSBnaXZlbiBlbGVtZW50cyBpbnRvIHRoZSBvcmdhbml6ZWQgc2VsZWN0aW9uIHRoYXQgaXMgZW1pdHRlZCB0byBvdXRwdXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihzZWxlY3RlZDogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbiA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS50b09yZ2FuaXplZFNlbGVjdGlvbihzZWxlY3RlZCk7XG4gICAgICAgIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKHRoaXMuc2VsZWN0ZWQsIG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQob3JnYW5pemVkRmxhdE5vZGVzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTm9kZVNlbGVjdGVkKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5zb21lKG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0Tm9kZU1hcC5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcik6IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXREaXNwbGF5Rm4obm9kZS5jb25maWcpKG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBleHBhbmRhYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQ3VzdG9tU2VsZWN0YWJsZSA9IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrXG4gICAgICAgICAgICA/IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrKG5vZGUubW9kZWwpXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZSA9ICEhbm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5ICYmIGlzQ3VzdG9tU2VsZWN0YWJsZTtcblxuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IG5ldyBIaWVyYXJjaGljRmxhdE5vZGUobm9kZSwgbmFtZSwgbGV2ZWwsIGV4cGFuZGFibGUsIGlzU2VsZWN0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmNvdW50SXRlbXMoZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG5cbiAgICAgICAgLy8gTWFyayBub2RlIGFzIHNlbGVjdGVkIGlmIG5lZWRlZCAoY2hlY2tzIHRoZSBzZWxlY3RlZCBwcm9jZXNzZWQgaW5wdXQpXG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dVbnNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGZsYXROb2RlLmRlc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIEZsYXROb2RlXG4gICAgICAgIHRoaXMuZmxhdE5vZGVNYXAuc2V0KGtleSwgZmxhdE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGlkZW50aWZpZXIga2V5IGZvciBtYXAgY2FjaGVcbiAgICAgKiBBcyBtYW55IG9iamVjdCB0eXBlcyBjYW4gYmUgdXNlZCwgdGhpcyBmdW5jdGlvbiBjb25zaWRlcnMgdHlwZW5hbWUgYW5kIElEIHRvIHJldHVybiBzb21ldGhpbmcgbGlrZSBkb2N1bWVudC0xMjNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hcEtleShtb2RlbDogTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtb2RlbC5fX3R5cGVuYW1lICsgJy0nICsgbW9kZWwuaWQ7XG4gICAgfVxufVxuIiwiPGRpdiBbc3R5bGUubWFyZ2luLWJvdHRvbS5weF09XCIyMFwiPlxuICAgIDxuYXR1cmFsLXNlYXJjaCAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCIgW2ZhY2V0c109XCJzZWFyY2hGYWNldHNcIiBbc2VsZWN0aW9uc109XCJzZWFyY2hTZWxlY3Rpb25zXCIgLz5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYm9keVwiPlxuICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjM2XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBzdHlsZT1cIm1hcmdpbjogMTBweFwiIC8+XG4gICAgfVxuXG4gICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIj5cbiAgICAgICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBbbmdDbGFzc109XCJ7bGVhZjogIW5vZGUuZXhwYW5kYWJsZX1cIiBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgICAgICAgICBAaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRDaGlsZHJlbihub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3RvZ2dsZSAnICsgbm9kZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtkaWFtZXRlcl09XCIyNFwiIFtzdHJva2VXaWR0aF09XCI1XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIW5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJ0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRmxhdE5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzTm9kZVRvZ2dsYWJsZShub2RlKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAobm9kZS5ub2RlLmNvbmZpZy5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwibm9kZS5ub2RlLmNvbmZpZy5pY29uXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBub2RlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgIDwvbWF0LXRyZWU+XG5cbiAgICA8bWF0LWNoaXAtbGlzdGJveCBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIiBjbGFzcz1cIm1hdC1tZGMtY2hpcC1zZXQtc3RhY2tlZFwiPlxuICAgICAgICBAZm9yIChub2RlIG9mIHNlbGVjdGVkTm9kZXM7IHRyYWNrIG5vZGUubW9kZWwuaWQpIHtcbiAgICAgICAgICAgIDxtYXQtY2hpcC1vcHRpb24gKHJlbW92ZWQpPVwidW5zZWxlY3RNb2RlbE5vZGUobm9kZSlcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbc2VsZWN0YWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIEBpZiAobm9kZS5jb25maWcuaWNvbikge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cIm5vZGUuY29uZmlnLmljb25cIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHkgY2hpcC1sYWJlbFwiPnt7IG5vZGUubW9kZWwubmFtZSB8fCBub2RlLm1vZGVsLmZ1bGxOYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbmF0dXJhbEljb249XCJjYW5jZWxcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1vcHRpb24+XG4gICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWF0LWJvZHkgbmF0LXBhZGRpbmctaG9yaXpvbnRhbFwiIGkxOG4+QXVjdW5lIHPDqWxlY3Rpb248L3A+XG4gICAgICAgIH1cbiAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG48L2Rpdj5cblxuQGlmICghbG9hZGluZyAmJiAhZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCkge1xuICAgIDxkaXYgaTE4bj5BdWN1biByw6lzdWx0YXQ8L2Rpdj5cbn1cbiJdfQ==
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFOUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGlCQUFpQixF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TUFBTTtzQkFBckMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBS1AsUUFBUTtzQkFBdkIsS0FBSztnQkFNVSxRQUFRO3NCQUF2QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxZQUFZO3NCQUEzQixLQUFLO2dCQUtVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFLb0IscUJBQXFCO3NCQUE5QyxNQUFNO2dCQVdtQixlQUFlO3NCQUF4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RmxhdFRyZWVDb250cm9sfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciwgTWF0VHJlZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaW5hbGl6ZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHt0b0dyYXBoUUxEb2N0cmluZUZpbHRlcn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZSc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hGYWNldHN9IGZyb20gJy4uLy4uL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi8uLi9zZWFyY2gvdHlwZXMvdmFsdWVzJztcbmltcG9ydCB7SGllcmFyY2hpY0ZsYXROb2RlfSBmcm9tICcuLi9jbGFzc2VzL2ZsYXQtbm9kZSc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL2NsYXNzZXMvaGllcmFyY2hpYy1maWx0ZXJzLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljTW9kZWxOb2RlfSBmcm9tICcuLi9jbGFzc2VzL21vZGVsLW5vZGUnO1xuaW1wb3J0IHtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSwgT3JnYW5pemVkTW9kZWxTZWxlY3Rpb259IGZyb20gJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7cmVwbGFjZU9iamVjdEtlZXBpbmdSZWZlcmVuY2V9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5pbXBvcnQge01hdENoaXBzTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQge01hdENoZWNrYm94TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoQ29tcG9uZW50fSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWhpZXJhcmNoaWMtc2VsZWN0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOYXR1cmFsU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0VHJlZU1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdENoaXBzTW9kdWxlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSA9IGluamVjdChOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgbW9kZWwgYW5kIHJldHVybnMgYSBzdHJpbmcgZm9yIGRpc3BsYXkgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVdpdGg/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWcgZm9yIGl0ZW1zIGFuZCByZWxhdGlvbnMgYXJyYW5nZW1lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGNvbmZpZyE6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdO1xuXG4gICAgLyoqXG4gICAgICogSWYgbXVsdGlwbGUgb3Igc2luZ2xlIGl0ZW0gc2VsZWN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBpdGVtc1xuICAgICAqIE9yZ2FuaXplZCBieSBrZXksIGNvbnRhaW5pbmcgZWFjaCBhbiBhcnJheSBvZiBzZWxlY3RlZCBpdGVtcyBvZiBzYW1lIHR5cGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNlbGVjdGFibGUgZWxlbWVudHMgY2FuIGJlIHVuc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dVbnNlbGVjdCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoYXQgYXBwbHkgdG8gZWFjaCBxdWVyeVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJzPzogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmYWNldHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb25zIHRvIGFwcGx5IG9uIG5hdHVyYWwtc2VhcmNoIG9uIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiBuYXR1cmFsLXNlYXJjaCBzZWxlY3Rpb25zIGNoYW5nZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoU2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucz4oKTtcblxuICAgIC8qKlxuICAgICAqIElubmVyIHJlcHJlc2VudGF0aW9uIG9mIHNlbGVjdGVkIEBJbnB1dCgpIHRvIGFsbG93IGZsYXQgbGlzdGluZyBhcyBtYXQtY2hpcC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWROb2RlczogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzZWxlY3Rpb24gY2hhbmdlXG4gICAgICogUmV0dXJucyBhIExpdGVyYWwgd2hlcmUgc2VsZWN0ZWQgbW9kZWxzIGFyZSBvcmdhbml6ZWQgYnkga2V5XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uPigpO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxlciBmb3Igbm9kZXMgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGZsYXROb2Rlc1NlbGVjdGlvbiE6IFNlbGVjdGlvbk1vZGVsPEhpZXJhcmNoaWNGbGF0Tm9kZT47XG5cbiAgICBwdWJsaWMgdHJlZUNvbnRyb2whOiBGbGF0VHJlZUNvbnRyb2w8SGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgdHJlZUZsYXR0ZW5lciE6IE1hdFRyZWVGbGF0dGVuZXI8SGllcmFyY2hpY01vZGVsTm9kZSwgSGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgZGF0YVNvdXJjZSE6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxIaWVyYXJjaGljTW9kZWxOb2RlLCBIaWVyYXJjaGljRmxhdE5vZGU+O1xuXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciB0cmFuc2Zvcm1lZCBub2Rlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZmxhdE5vZGVNYXA6IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4gPSBuZXcgTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPigpO1xuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkNoYW5nZSBpbXBsZW1lbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkICYmICFjaGFuZ2VzLnNlbGVjdGVkLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubmVyU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlsdGVycyAmJiAhY2hhbmdlcy5maWx0ZXJzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSb290cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkluaXQgaW1wbGVtZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEluaXQgdHJlZSBjaGVja2JveCBzZWxlY3RvcnNcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLm11bHRpcGxlKTtcblxuICAgICAgICAvLyBUcmVlIGNvbnRyb2xsZXJzIGFuZCBtYW5pcHVsYXRvcnNcbiAgICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVyKCksXG4gICAgICAgICAgICB0aGlzLmdldExldmVsKCksXG4gICAgICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZSgpLFxuICAgICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxIaWVyYXJjaGljRmxhdE5vZGU+KHRoaXMuZ2V0TGV2ZWwoKSwgdGhpcy5pc0V4cGFuZGFibGUoKSk7XG5cbiAgICAgICAgLy8gVGhlIGRhdGFTb3VyY2UgY29udGFpbnMgYSBuZXN0ZWQgTW9kZWxOb2RlcyBsaXN0LiBFYWNoIE1vZGVsTm9kZSBoYXMgYSBjaGlsZCBhdHRyaWJ1dGUgdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUuXG4gICAgICAgIC8vIFRoZSBkYXRhU291cmNlIGNvbnRhaW5zIGEgZmxhdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmVzdGVkIE1vZGVsTm9kZXMgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHRyZWVGbGF0dGVuZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBkYXRhU291cmNlIHdoZW4gcmVjZWl2aW5nIG5ldyBsaXN0IC0+IHdlIGFzc2lnbiB0aGUgd2hvbGUgdHJlZVxuICAgICAgICAvLyBUaGUgdHJlZUNvbnRyb2wgYW5kIHRyZWVGbGF0dGVuZXIgd2lsbCBnZW5lcmF0ZSB0aGUgZGlzcGxheWVkIHRyZWVcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmRhdGFDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+ICh0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGEpKTtcblxuICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IHNjcmVlbiBvbiBmaXJzdCBsb2FkIGFuZCBpbml0IE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlIHdpdGggaW5wdXR0ZWQgY29uZmlndXJhdGlvblxuICAgICAgICBsZXQgdmFyaWFibGVzO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hTZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCB0aGlzLnNlYXJjaFNlbGVjdGlvbnMpfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRSb290cyh2YXJpYWJsZXMpO1xuXG4gICAgICAgIC8vIE9yZ2FuaXplZFNlbGVjdGlvbiBpbnRvIGxpc3QgdXNhYmxlIGJ5IHRlbXBsYXRlXG4gICAgICAgIHRoaXMudXBkYXRlSW5uZXJTZWxlY3Rpb24odGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHNlbGVjdGlvbiBvZiBhIEZsYXROb2RlLCBjb25zaWRlcmluZyBpZiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgYWN0aXZhdGVkIG9yIG5vdFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAvLyBJcyBtdWx0aXBsZSBhbGxvd2VkLCBqdXN0IHRvZ2dsZSBlbGVtZW50XG4gICAgICAgICAgICBpZiAodGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZmxhdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdFNpbmdsZUZsYXROb2RlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIG5vdCBtdWx0aXBsZSwgYW5kIHdlIHdhbnQgdG8gc2VsZWN0IGFuIGVsZW1lbnQsIHVuc2VsZWN0IGV2ZXJ5dGhpbmcgYmVmb3JlIHRvIGtlZXAgYSBzaW5nbGUgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHVuc2VsZWN0aW5nIGFuIGVsZW1lbnQgZnJvbSB0aGUgbWF0LWNoaXBzLCBpdCBjYW4gYmUgZGVlcCBpbiB0aGUgaGllcmFyY2h5LCBhbmQgdGhlIHRyZWUgZWxlbWVudCBtYXkgbm90IGV4aXN0Li4uXG4gICAgICogLi4uIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBtYXQtY2hpcHMgbGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdW5zZWxlY3RNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGNoaXBzIGxpc3Qgb25seSBpZiBubyBmbGF0Tm9kZSwgYmVjYXVzZSB1bnNlbGVjdEZsYXROb2RlKCkgYWxyZWFkeSBkZWFscyB3aXRoIGl0LlxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb2RlbE5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzTm9kZVRvZ2dsYWJsZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKGZsYXROb2RlLm5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGUuZGVzZWxlY3RhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlLnNlbGVjdGFibGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERpc3BsYXlGbihjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbik6IChpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgICAgIGlmIChjb25maWcuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbSA9PiAoaXRlbSA/IGl0ZW0uZnVsbE5hbWUgfHwgaXRlbS5uYW1lIDogJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkQ2hpbGRyZW4oZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihmbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZWQgdG8gY29sbGFwc2UgYWxsIGNoaWxkcmVuIHdoZW4gY2xvc2luZyBhIHBhcmVudCwgYnV0IG5vdCBzdXJlIGl0J3MgZ29vZC5cbiAgICAgKi9cbiAgICAvLyBwdWJsaWMgbG9hZENoaWxkcmVuKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChmbGF0Tm9kZSkpIHtcbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgY2FjaGVkRmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgIC8vICAgICAgICAgaWYgKGNhY2hlZEZsYXROb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihjYWNoZWRGbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIENsb3NlIGNoaWxkcmVuXG4gICAgLy8gICAgICAgICAgICAgY2FjaGVkRmxhdE5vZGUubm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShjaGlsZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuY29sbGFwc2UoY2hpbGROb2RlKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGlsZHJlbigpOiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSkgPT4gT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+IHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuQ2hhbmdlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYSBIaWVyYXJjaGljTW9kZWxOb2RlIGludG8gYSBGbGF0Tm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtZXIoKTogKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpID0+IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVGbGF0Tm9kZShub2RlLCBsZXZlbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGRlZXAgb2YgdGhlIG5vZGUgaW4gdGhlIHRyZWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExldmVsKCk6IChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IG51bWJlciB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5sZXZlbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBhbHdheXMgZXhwYW5kYWJsZSBiZWNhdXNlIHdlIGxvYWQgb24gZGVtYW5kLCB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIGFyZSBjaGlsZHJlbiB5ZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzRXhwYW5kYWJsZSgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZUZsYXROb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpOiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICAvLyBSZXR1cm4gRmxhdE5vZGUgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZsYXROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gbmV3IEZsYXROb2RlXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZsYXROb2RlKG5vZGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9ucyk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCBzZWxlY3Rpb25zKX07XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Uuc2VhcmNoKHZhcmlhYmxlcywgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvb3RzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRSb290cyhzZWFyY2hWYXJpYWJsZXM/OiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZsYXROb2RlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4oKTtcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlXG4gICAgICAgICAgICAuaW5pdCh0aGlzLmNvbmZpZywgdGhpcy5maWx0ZXJzLCBzZWFyY2hWYXJpYWJsZXMgfHwgbnVsbClcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN5bmMgaW5uZXIgc2VsZWN0aW9uICh0cmVlIGFuZCBtYXQtY2hpcHMpIGFjY29yZGluZyB0byBzZWxlY3RlZCBpbnB1dCBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUlubmVyU2VsZWN0aW9uKHNlbGVjdGVkOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbik6IHZvaWQge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gYW4gT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gaW50byBhIE1vZGVsTm9kZSBsaXN0IHRoYXQgaXMgdXNlZCBpbiB0aGUgc2VsZWN0ZWQgem9uZSBvZiB0aGUgY29tcG9uZW50IChzZWUgdGVtcGxhdGUpXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5mcm9tT3JnYW5pemVkU2VsZWN0aW9uKHNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZWxlY3QgYSBub2RlLCBrZWVwaW5nIHRoZSByZXN0IG9mIHRoZSBzZWxlY3RlZCB1bnRvdWNoZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kZWxOb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIG5vZGUgZnJvbSBjaGlwIGxpc3RzXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5kZXggPSB0aGlzLnNlbGVjdGVkTm9kZXMuZmluZEluZGV4KG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5zcGxpY2Uoc2VsZWN0aW9uSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIG5vZGUsIGtlZXBpbmcgdGggcmVzdCBvZiB0aGUgc2VsZWN0ZWQgdW50b3VjaGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5wdXNoKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBzZWxlY3RlZCBhbmQgc2VsZWN0IHRoZSBnaXZlbiBub2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtmbGF0Tm9kZS5ub2RlXTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgYW5kIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdW5zZWxlY3RTaW5nbGVGbGF0Tm9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHRoZSBnaXZlbiBlbGVtZW50cyBpbnRvIHRoZSBvcmdhbml6ZWQgc2VsZWN0aW9uIHRoYXQgaXMgZW1pdHRlZCB0byBvdXRwdXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihzZWxlY3RlZDogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbiA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS50b09yZ2FuaXplZFNlbGVjdGlvbihzZWxlY3RlZCk7XG4gICAgICAgIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKHRoaXMuc2VsZWN0ZWQsIG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQob3JnYW5pemVkRmxhdE5vZGVzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTm9kZVNlbGVjdGVkKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5zb21lKG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0Tm9kZU1hcC5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcik6IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXREaXNwbGF5Rm4obm9kZS5jb25maWcpKG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBleHBhbmRhYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQ3VzdG9tU2VsZWN0YWJsZSA9IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrXG4gICAgICAgICAgICA/IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrKG5vZGUubW9kZWwpXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZSA9ICEhbm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5ICYmIGlzQ3VzdG9tU2VsZWN0YWJsZTtcblxuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IG5ldyBIaWVyYXJjaGljRmxhdE5vZGUobm9kZSwgbmFtZSwgbGV2ZWwsIGV4cGFuZGFibGUsIGlzU2VsZWN0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmNvdW50SXRlbXMoZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG5cbiAgICAgICAgLy8gTWFyayBub2RlIGFzIHNlbGVjdGVkIGlmIG5lZWRlZCAoY2hlY2tzIHRoZSBzZWxlY3RlZCBwcm9jZXNzZWQgaW5wdXQpXG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dVbnNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGZsYXROb2RlLmRlc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIEZsYXROb2RlXG4gICAgICAgIHRoaXMuZmxhdE5vZGVNYXAuc2V0KGtleSwgZmxhdE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGlkZW50aWZpZXIga2V5IGZvciBtYXAgY2FjaGVcbiAgICAgKiBBcyBtYW55IG9iamVjdCB0eXBlcyBjYW4gYmUgdXNlZCwgdGhpcyBmdW5jdGlvbiBjb25zaWRlcnMgdHlwZW5hbWUgYW5kIElEIHRvIHJldHVybiBzb21ldGhpbmcgbGlrZSBkb2N1bWVudC0xMjNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hcEtleShtb2RlbDogTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtb2RlbC5fX3R5cGVuYW1lICsgJy0nICsgbW9kZWwuaWQ7XG4gICAgfVxufVxuIiwiPGRpdiBbc3R5bGUubWFyZ2luLWJvdHRvbS5weF09XCIyMFwiPlxuICAgIDxuYXR1cmFsLXNlYXJjaCAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCIgW2ZhY2V0c109XCJzZWFyY2hGYWNldHNcIiBbc2VsZWN0aW9uc109XCJzZWFyY2hTZWxlY3Rpb25zXCIgLz5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYm9keVwiPlxuICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjM2XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBzdHlsZT1cIm1hcmdpbjogMTBweFwiIC8+XG4gICAgfVxuXG4gICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIj5cbiAgICAgICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBbbmdDbGFzc109XCJ7bGVhZjogIW5vZGUuZXhwYW5kYWJsZX1cIiBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgICAgICAgICBAaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRDaGlsZHJlbihub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3RvZ2dsZSAnICsgbm9kZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtkaWFtZXRlcl09XCIyNFwiIFtzdHJva2VXaWR0aF09XCI1XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIW5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJ0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRmxhdE5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzTm9kZVRvZ2dsYWJsZShub2RlKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAobm9kZS5ub2RlLmNvbmZpZy5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwibm9kZS5ub2RlLmNvbmZpZy5pY29uXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBub2RlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgIDwvbWF0LXRyZWU+XG5cbiAgICA8bWF0LWNoaXAtbGlzdGJveCBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIiBjbGFzcz1cIm1hdC1tZGMtY2hpcC1zZXQtc3RhY2tlZFwiPlxuICAgICAgICBAZm9yIChub2RlIG9mIHNlbGVjdGVkTm9kZXM7IHRyYWNrIG5vZGUubW9kZWwuaWQpIHtcbiAgICAgICAgICAgIDxtYXQtY2hpcC1vcHRpb24gKHJlbW92ZWQpPVwidW5zZWxlY3RNb2RlbE5vZGUobm9kZSlcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbc2VsZWN0YWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIEBpZiAobm9kZS5jb25maWcuaWNvbikge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcEF2YXRhciBbbmF0dXJhbEljb25dPVwibm9kZS5jb25maWcuaWNvblwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHt7IG5vZGUubW9kZWwubmFtZSB8fCBub2RlLm1vZGVsLmZ1bGxOYW1lIH19XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbmF0dXJhbEljb249XCJjYW5jZWxcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1vcHRpb24+XG4gICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWF0LWJvZHkgbmF0LXBhZGRpbmctaG9yaXpvbnRhbFwiIGkxOG4+QXVjdW5lIHPDqWxlY3Rpb248L3A+XG4gICAgICAgIH1cbiAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG48L2Rpdj5cblxuQGlmICghbG9hZGluZyAmJiAhZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCkge1xuICAgIDxkaXYgaTE4bj5BdWN1biByw6lzdWx0YXQ8L2Rpdj5cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { Injectable, Injector, inject } from '@angular/core';
1
+ import { inject, Injectable, Injector } from '@angular/core';
2
2
  import { intersection } from 'lodash-es';
3
3
  import { BehaviorSubject, first, forkJoin } from 'rxjs';
4
4
  import { finalize, map } from 'rxjs/operators';
@@ -25,7 +25,7 @@ export class NaturalHierarchicSelectorService {
25
25
  */
26
26
  init(config, contextFilter = null, searchVariables = null) {
27
27
  this.validateConfiguration(config);
28
- this.configuration = this.injectServicesInConfiguration(config);
28
+ this.configuration = config;
29
29
  return this.getList(null, contextFilter, searchVariables).pipe(map(data => this.dataChange.next(data)));
30
30
  }
31
31
  /**
@@ -58,7 +58,7 @@ export class NaturalHierarchicSelectorService {
58
58
  */
59
59
  getList(node = null, contextFilters = null, searchVariables = null) {
60
60
  const configurations = this.getContextualizedConfigs(node, contextFilters, searchVariables);
61
- const observables = configurations.map(c => c.configuration.injectedService.getAll(c.variablesManager));
61
+ const observables = configurations.map(c => c.injectedService.getAll(c.variablesManager));
62
62
  // Fire queries, and merge results, transforming apollo items into Node Object.
63
63
  return forkJoin(observables).pipe(map(results => {
64
64
  const listing = [];
@@ -74,7 +74,7 @@ export class NaturalHierarchicSelectorService {
74
74
  }
75
75
  countItems(node, contextFilters = null) {
76
76
  const configurations = this.getContextualizedConfigs(node, contextFilters, null);
77
- const observables = configurations.map(c => c.configuration.injectedService.count(c.variablesManager).pipe(first()));
77
+ const observables = configurations.map(c => c.injectedService.count(c.variablesManager).pipe(first()));
78
78
  forkJoin(observables).subscribe(results => {
79
79
  const totalItems = results.reduce((total, length) => total + length, 0);
80
80
  node.expandable = totalItems > 0;
@@ -91,10 +91,9 @@ export class NaturalHierarchicSelectorService {
91
91
  const configs = node ? this.getNextConfigs(node.node.config) : this.configuration;
92
92
  const pagination = { pageIndex: 0, pageSize: 999 };
93
93
  for (const config of configs) {
94
- const item = {};
95
94
  const contextFilter = this.getFilterByService(config, contextFilters);
96
95
  const filter = this.getServiceFilter(node, config, contextFilter, !!searchVariables);
97
- if (!filter || !config.injectedService) {
96
+ if (!filter) {
98
97
  continue;
99
98
  }
100
99
  const variablesManager = new NaturalQueryVariablesManager();
@@ -103,11 +102,12 @@ export class NaturalHierarchicSelectorService {
103
102
  if (searchVariables) {
104
103
  variablesManager.set('natural-search', searchVariables);
105
104
  }
106
- // Cast NaturalHierarchicServiceConfiguration because the undefined
107
- // injectedServices are filtered earlier and we can validate value
108
- item.configuration = config;
109
- item.variablesManager = variablesManager;
110
- configsAndServices.push(item);
105
+ const injectedService = this.injector.get(config.service);
106
+ configsAndServices.push({
107
+ configuration: config,
108
+ injectedService: injectedService,
109
+ variablesManager: variablesManager,
110
+ });
111
111
  }
112
112
  return configsAndServices;
113
113
  }
@@ -147,14 +147,6 @@ export class NaturalHierarchicSelectorService {
147
147
  }
148
148
  return result;
149
149
  }
150
- injectServicesInConfiguration(configurations) {
151
- for (const config of configurations) {
152
- if (!config.injectedService) {
153
- config.injectedService = this.injector.get(config.service);
154
- }
155
- }
156
- return configurations;
157
- }
158
150
  /**
159
151
  * Checks that each configuration.selectableAtKey attribute is unique
160
152
  */
@@ -248,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
248
240
  type: Injectable,
249
241
  args: [{ providedIn: 'root' }]
250
242
  }] });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsNEJBQTRCLEVBQWlCLE1BQU0seUNBQXlDLENBQUM7QUFVckcsT0FBTyxFQUFrQixtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQVkzRSxNQUFNLE9BQU8sZ0NBQWdDO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0M7Ozs7T0FJRztJQUNhLFVBQVUsR0FBMkMsSUFBSSxlQUFlLENBQXdCLEVBQUUsQ0FBQyxDQUFDO0lBRXBIOzs7O09BSUc7SUFDSyxhQUFhLEdBQXFDLEVBQUUsQ0FBQztJQUU3RDs7O09BR0c7SUFDSSxJQUFJLENBQ1AsTUFBd0MsRUFDeEMsZ0JBQXVELElBQUksRUFDM0Qsa0JBQXlDLElBQUk7UUFFN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFD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TyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQzt1R0E1VFEsZ0NBQWdDOzJHQUFoQyxnQ0FBZ0MsY0FEcEIsTUFBTTs7MkZBQ2xCLGdDQUFnQztrQkFENUMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpbnRlcnNlY3Rpb259IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZmlyc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmluYWxpemUsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7SGllcmFyY2hpY0ZsYXROb2RlfSBmcm9tICcuLi9jbGFzc2VzL2ZsYXQtbm9kZSc7XG5pbXBvcnQge1xuICAgIE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICBOYXR1cmFsSGllcmFyY2hpY1NlcnZpY2VDb25maWd1cmF0aW9uLFxufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1xuICAgIEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uLFxuICAgIEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNNb2RlbCwgSGllcmFyY2hpY01vZGVsTm9kZX0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RlbC1ub2RlJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtGaWx0ZXJHcm91cENvbmRpdGlvbn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZS50eXBlcyc7XG5cbmV4cG9ydCB0eXBlIE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uID0gUmVjb3JkPHN0cmluZywgYW55W10+O1xuXG50eXBlIENvbnRleHR1YWxpemVkQ29uZmlnID0ge1xuICAgIGNvbmZpZ3VyYXRpb246IE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb247XG4gICAgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjtcbn07XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB0aGUgZ2xvYmFsIHJlc3VsdCBvZiB0aGUgdHJlZVxuICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBjb250YWlucyBOb2RlLlxuICAgICAqIFdoZW4gaXQncyB1cGRhdGVkLCB0aGUgVHJlZUNvbnRyb2xsZXIgYW5kIFRyZWVGbGF0dGVuZXIgcHJvY2VzcyB0aGUgbmV3IGFycmF5IHRvIGdlbmVyYXRlIHRoZSBmbGF0IHRyZWUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGFDaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIaWVyYXJjaGljTW9kZWxOb2RlW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIHJlbGF0aW9ucyBhbmQgc2VsZWN0aW9uIGNvbnN0cmFpbnRzXG4gICAgICpcbiAgICAgKiBUaGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGluIHRoZSBvcmRlciBvZiB0aGUgaGllcmFyY2hpYyAobGlzdCBmaXJzdCBwYXJlbnQgcnVsZXMsIHRoZW4gY2hpbGQgcnVsZXMpXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogSW5pdCBjb21wb25lbnQgYnkgc2F2aW5nIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlbiByZXRyaWV2aW5nIHJvb3QgZWxlbWVudHMuXG4gICAgICogVXBkYXRlcyAqKmFub3RoZXIqKiBvYnNlcnZhYmxlICh0aGlzLmRhdGFDaGFuZ2UpIHdoZW4gZGF0YSBpcyByZXRyaWV2ZWQuXG4gICAgICovXG4gICAgcHVibGljIGluaXQoXG4gICAgICAgIGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10sXG4gICAgICAgIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICAgICBzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCA9IG51bGwsXG4gICAgKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHRoaXMuaW5qZWN0U2VydmljZXNJbkNvbmZpZ3VyYXRpb24oY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdChudWxsLCBjb250ZXh0RmlsdGVyLCBzZWFyY2hWYXJpYWJsZXMpLnBpcGUobWFwKGRhdGEgPT4gdGhpcy5kYXRhQ2hhbmdlLm5leHQoZGF0YSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiBjaGlsZHJlbiwgY29uc2lkZXJpbmcgZ2l2ZW4gRmxhdE5vZGUgaWQgYXMgYSBwYXJlbnQuXG4gICAgICogTWFyayBsb2FkaW5nIHN0YXR1cyBpbmRpdmlkdWFsbHkgb24gbm9kZXMuXG4gICAgICovXG4gICAgcHVibGljIGxvYWRDaGlsZHJlbihcbiAgICAgICAgZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSxcbiAgICAgICAgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIERvbnQgcmVmZXRjaCBjaGlsZHJlbi4gSW1wcm92ZSBwZXJmb3JtYW5jZXNcbiAgICAgICAgLy8gUHJldmVudHMgaW50ZXJmZXJlbmNlcyBiZXR3ZWVuIEhpZXJhcmNoaWNNb2RlbE5vZGUgc3RydWN0dXJlIGFuZCBhbmd1bGFyIGNvbXBvbmVudHMgbmF2aWdhdGlvbi5cbiAgICAgICAgLy8gUHJldmVudHMgYSBidWcgd2hlcmUgZ3JhbmQgY2hpbGRyZW4gd2VyZSBsb3N0IGlmIGNsb3Npbmcgcm9vdFxuICAgICAgICBpZiAoZmxhdE5vZGUubm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZsYXROb2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldExpc3QoZmxhdE5vZGUsIGNvbnRleHRGaWx0ZXIpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAoZmxhdE5vZGUubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICBmbGF0Tm9kZS5ub2RlLmNoaWxkcmVuQ2hhbmdlLm5leHQoaXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YUNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlYXJjaFZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMsIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0TGlzdChudWxsLCBjb250ZXh0RmlsdGVyLCBzZWFyY2hWYXJpYWJsZXMpLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dChpdGVtcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGVsZW1lbnRzIGZyb20gdGhlIHNlcnZlclxuICAgICAqIEdldCByb290IGVsZW1lbnRzIGlmIG5vZGUgaXMgbnVsbCwgb3IgY2hpbGQgZWxlbWVudHMgaWYgbm9kZSBpcyBnaXZlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TGlzdChcbiAgICAgICAgbm9kZTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICAgICAgc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgPSBudWxsLFxuICAgICk6IE9ic2VydmFibGU8SGllcmFyY2hpY01vZGVsTm9kZVtdPiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25zID0gdGhpcy5nZXRDb250ZXh0dWFsaXplZENvbmZpZ3Mobm9kZSwgY29udGV4dEZpbHRlcnMsIHNlYXJjaFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gY29uZmlndXJhdGlvbnMubWFwKGMgPT4gYy5jb25maWd1cmF0aW9uLmluamVjdGVkU2VydmljZS5nZXRBbGwoYy52YXJpYWJsZXNNYW5hZ2VyKSk7XG5cbiAgICAgICAgLy8gRmlyZSBxdWVyaWVzLCBhbmQgbWVyZ2UgcmVzdWx0cywgdHJhbnNmb3JtaW5nIGFwb2xsbyBpdGVtcyBpbnRvIE5vZGUgT2JqZWN0LlxuICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGluZzogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG5cbiAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCByZXN1bHQgb2YgYW4gb2JzZXJ2YWJsZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCBpdGVtIG9mIHRoZSByZXN1bHQsIGNvbnZlcnQgaW50byBOb2RlIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVzdWx0c1tpXS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZy5wdXNoKHRoaXMuZ2V0T3JDcmVhdGVNb2RlbE5vZGUoaXRlbSwgY29uZmlndXJhdGlvbnNbaV0uY29uZmlndXJhdGlvbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Rpbmc7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY291bnRJdGVtcyhub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUsIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dHVhbGl6ZWRDb25maWdzKG5vZGUsIGNvbnRleHRGaWx0ZXJzLCBudWxsKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBjb25maWd1cmF0aW9ucy5tYXAoYyA9PlxuICAgICAgICAgICAgYy5jb25maWd1cmF0aW9uLmluamVjdGVkU2VydmljZS5jb3VudChjLnZhcmlhYmxlc01hbmFnZXIpLnBpcGUoZmlyc3QoKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsSXRlbXMgPSByZXN1bHRzLnJlZHVjZSgodG90YWwsIGxlbmd0aCkgPT4gdG90YWwgKyBsZW5ndGgsIDApO1xuICAgICAgICAgICAgbm9kZS5leHBhbmRhYmxlID0gdG90YWxJdGVtcyA+IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGV4dHVhbGl6ZWRDb25maWdzKFxuICAgICAgICBub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsID0gbnVsbCxcbiAgICAgICAgY29udGV4dEZpbHRlcnM6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICAgICBzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCA9IG51bGwsXG4gICAgKTogQ29udGV4dHVhbGl6ZWRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NBbmRTZXJ2aWNlczogQ29udGV4dHVhbGl6ZWRDb25maWdbXSA9IFtdO1xuXG4gICAgICAgIC8vIENvbnNpZGVyaW5nIHRoZSB3aG9sZSBjb25maWd1cmF0aW9uIG1heSBjYXVzZSBxdWVyaWVzIHdpdGggbm8vd3JvbmcgcmVzdWx0cyB3ZSBoYXZlIGltcGVyYXRpdmVseSB0byBhdm9pZCAhXG4gICAgICAgIC8vIGUuZyB0aGVyZSBhcmUgY3Jvc3MgZGVwZW5kZW5jaWVzIGJldHdlZW4gZXF1aXBtZW50cyBhbmQgdGF4b25vbWllcyBmaWx0ZXJzLiBCb3RoIGhhdmUgXCJwYXJlbnRzXCIgYW5kIFwidGF4b25vbWllc1wiIGZpbHRlcnMuLi5cbiAgICAgICAgLy8gV2hlbiBjbGlja2luZyBvbiBhIGVxdWlwbWVudCwgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGF4b25vbWllcyB3aXRoIG1hdGNoIFwicGFyZW50c1wiIGZpbHRlciwgYnV0IHVzZSB0aGUgaWQgb2YgdGhlIGVxdWlwbWVudFxuICAgICAgICAvLyBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIG9ubHkgY29uc2lkZXIgY29uZmlndXJhdGlvbiBhZnRlciB0aGUgb25lIGdpdmVuIGJ5IHRoZSBub2RlIHBhc3NlZCBhcyBhcmd1bWVudC5cbiAgICAgICAgLy8gVGhhdCB3b3VsZCBtZWFuIDogbm8gY2hpbGQgY2FuIGFmZmVjdCBwYXJlbnQuXG4gICAgICAgIC8vIFRoYXQgd291bGQgbWVhbiA6IHNvcnRpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaGF2ZSBzZW1hbnRpYy9oaWVyYXJjaHkgaW1wbGljYXRpb25zXG4gICAgICAgIGNvbnN0IGNvbmZpZ3MgPSBub2RlID8gdGhpcy5nZXROZXh0Q29uZmlncyhub2RlLm5vZGUuY29uZmlnKSA6IHRoaXMuY29uZmlndXJhdGlvbjtcblxuICAgICAgICBjb25zdCBwYWdpbmF0aW9uID0ge3BhZ2VJbmRleDogMCwgcGFnZVNpemU6IDk5OX07XG5cbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuICAgICAgICAgICAgY29uc3QgaXRlbTogQ29udGV4dHVhbGl6ZWRDb25maWcgPSB7fSBhcyBDb250ZXh0dWFsaXplZENvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRGaWx0ZXIgPSB0aGlzLmdldEZpbHRlckJ5U2VydmljZShjb25maWcsIGNvbnRleHRGaWx0ZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ2V0U2VydmljZUZpbHRlcihub2RlLCBjb25maWcsIGNvbnRleHRGaWx0ZXIsICEhc2VhcmNoVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgIWNvbmZpZy5pbmplY3RlZFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzTWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyKCk7XG5cbiAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCd2YXJpYWJsZXMnLCB7ZmlsdGVyOiBmaWx0ZXIsIHBhZ2luYXRpb246IHBhZ2luYXRpb259KTtcbiAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCdjb25maWctZmlsdGVyJywge2ZpbHRlcjogY29uZmlnLmZpbHRlcn0pO1xuXG4gICAgICAgICAgICBpZiAoc2VhcmNoVmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVzTWFuYWdlci5zZXQoJ25hdHVyYWwtc2VhcmNoJywgc2VhcmNoVmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FzdCBOYXR1cmFsSGllcmFyY2hpY1NlcnZpY2VDb25maWd1cmF0aW9uIGJlY2F1c2UgdGhlIHVuZGVmaW5lZFxuICAgICAgICAgICAgLy8gaW5qZWN0ZWRTZXJ2aWNlcyBhcmUgZmlsdGVyZWQgZWFybGllciBhbmQgd2UgY2FuIHZhbGlkYXRlIHZhbHVlXG4gICAgICAgICAgICBpdGVtLmNvbmZpZ3VyYXRpb24gPSBjb25maWcgYXMgTmF0dXJhbEhpZXJhcmNoaWNTZXJ2aWNlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIGl0ZW0udmFyaWFibGVzTWFuYWdlciA9IHZhcmlhYmxlc01hbmFnZXI7XG4gICAgICAgICAgICBjb25maWdzQW5kU2VydmljZXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWdzQW5kU2VydmljZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIG1vZGVscyBtYXRjaGluZyBnaXZlbiBGbGF0Tm9kZXNcbiAgICAgKiBSZXR1cm5zIGEgTGl0ZXJhbCBvZiBtb2RlbHMgZ3JvdXBlZCBieSB0aGVpciBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZSBcInNlbGVjdGFibGVBdEtleVwiXG4gICAgICovXG4gICAgcHVibGljIHRvT3JnYW5pemVkU2VsZWN0aW9uKG5vZGVzOiBIaWVyYXJjaGljTW9kZWxOb2RlW10pOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbi5yZWR1Y2U8TGl0ZXJhbD4oKGdyb3VwLCBjb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBbY29uZmlnLnNlbGVjdGFibGVBdEtleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgaWYgKG5vZGUuY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbltub2RlLmNvbmZpZy5zZWxlY3RhYmxlQXRLZXldLnB1c2gobm9kZS5tb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYW4gT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gaW50byBhIGxpc3Qgb2YgTW9kZWxOb2Rlc1xuICAgICAqL1xuICAgIHB1YmxpYyBmcm9tT3JnYW5pemVkU2VsZWN0aW9uKG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbik6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSB7XG4gICAgICAgIGlmICghb3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc2VsZWN0YWJsZUF0S2V5IG9mIE9iamVjdC5rZXlzKG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWd1cmF0aW9uQnlTZWxlY3RhYmxlS2V5KHNlbGVjdGFibGVBdEtleSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBvcmdhbml6ZWRNb2RlbFNlbGVjdGlvbltzZWxlY3RhYmxlQXRLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBIaWVyYXJjaGljTW9kZWxOb2RlKG1vZGVsLCBjb25maWcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdFNlcnZpY2VzSW5Db25maWd1cmF0aW9uKFxuICAgICAgICBjb25maWd1cmF0aW9uczogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10sXG4gICAgKTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFjb25maWcuaW5qZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmluamVjdGVkU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KGNvbmZpZy5zZXJ2aWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhhdCBlYWNoIGNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZUF0S2V5IGF0dHJpYnV0ZSBpcyB1bmlxdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uczogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUF0S2V5QXR0cmlidXRlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5kZXggPSBzZWxlY3RhYmxlQXRLZXlBdHRyaWJ1dGVzLmluZGV4T2YoY29uZmlnLnNlbGVjdGFibGVBdEtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IC0xICYmIGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZUF0S2V5QXR0cmlidXRlcy5wdXNoKGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gOiByZW1vdmUgP1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5YmUgZGFuZ2Vyb3VzIGluIGNhc2Ugd2UgcmUtb3BlbiBoaWVyYXJjaGljYWwgc2VsZWN0b3Igd2l0aCB0aGUgbGFzdCByZXR1cm5lZCBjb25maWcgaGF2aW5nIG5vbi11bmlxdWVcbiAgICAgICAgICAgICAgICAvLyBrZXlzXG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4IDwgLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGhpZXJhcmNoaWMgY29uZmlndXJhdGlvbiA6IHNlbGVjdGFibGVBdEtleSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVuaXF1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjb25maWd1cmF0aW9ucyBzZXR1cCBpbiB0aGUgbGlzdCBhZnRlciB0aGUgZ2l2ZW4gb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXROZXh0Q29uZmlncyhjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbik6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdIHtcbiAgICAgICAgY29uc3QgY29uZmlnSW5kZXggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZmluZEluZGV4KGMgPT4gYyA9PT0gY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5zbGljZShjb25maWdJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHF1ZXJ5VmFyaWFibGVzIGZpbHRlciBmb3IgY2hpbGRyZW4gcXVlcnlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNlcnZpY2VGaWx0ZXIoXG4gICAgICAgIGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsLFxuICAgICAgICBjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICAgICAgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGFsbERlZXBzID0gZmFsc2UsXG4gICAgKTogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZGl0aW9uOiBGaWx0ZXJHcm91cENvbmRpdGlvbiA9IHt9O1xuXG4gICAgICAgIC8vIGlmIG5vIHBhcmVudCwgZmlsdGVyIGVtcHR5IGVsZW1lbnRzXG4gICAgICAgIGlmICghZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRGaWx0ZXIgPyBjb250ZXh0RmlsdGVyIDoge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWxsRGVlcHMpIHtcbiAgICAgICAgICAgICAgICBjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRDb25kaXRpb25bZl0gPSB7ZW1wdHk6IHt9fTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZmxhdE5vZGUubm9kZS5jb25maWcuY2hpbGRyZW5SZWxhdGlvbk5hbWVzIHx8ICFjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdGaWx0ZXJzID0gaW50ZXJzZWN0aW9uKFxuICAgICAgICAgICAgICAgIGZsYXROb2RlLm5vZGUuY29uZmlnLmNoaWxkcmVuUmVsYXRpb25OYW1lcyxcbiAgICAgICAgICAgICAgICBjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFtYXRjaGluZ0ZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZENvbmRpdGlvblttYXRjaGluZ0ZpbHRlcnNbMF1dID0ge2hhdmU6IHt2YWx1ZXM6IFtmbGF0Tm9kZS5ub2RlLm1vZGVsLmlkXX19O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHtncm91cHM6IFt7Y29uZGl0aW9uczogW2ZpZWxkQ29uZGl0aW9uXX1dfTtcblxuICAgICAgICAvLyB0b2RvIDogaXMgaXQgcmlnaHQgPyBzaG91bGRuJ3QgaXQgYmUgbWFuYWdlZCB3aXRoIFF1ZXJ5VmFyaWFibGVzTWFuYWdlcidzIGNoYW5uZWxzID8gP1xuICAgICAgICBpZiAoY29udGV4dEZpbHRlcikge1xuICAgICAgICAgICAgZmlsdGVycy5ncm91cHMucHVzaCguLi5jb250ZXh0RmlsdGVyLmdyb3Vwcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBjb250ZXh0IGZpbHRlciBhcHBsaWNhYmxlIHRvIHRoZSBzZXJ2aWNlIGZvciBnaXZlbiBjb25maWdcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25maWcgQXBwbGljYWJsZSBjb25maWdcbiAgICAgKiBAcGFyYW0gY29udGV4dEZpbHRlcnMgTGlzdCBvZiBjb250ZXh0IGZpbHRlcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEZpbHRlckJ5U2VydmljZShcbiAgICAgICAgY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvbltdIHwgbnVsbCxcbiAgICApOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvblsnZmlsdGVyJ10gfCBudWxsIHtcbiAgICAgICAgaWYgKCFjb250ZXh0RmlsdGVycyB8fCAhY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGNvbnRleHRGaWx0ZXJzLmZpbmQoZiA9PiBmLnNlcnZpY2UgPT09IGNvbmZpZy5zZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlciA/IGZpbHRlci5maWx0ZXIgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpbiBjb25maWd1cmF0aW9ucy5zZWxlY3RhYmxlQXRLZXkgYXR0cmlidXRlIHRvIGZpbmQgZ2l2ZW4ga2V5IGFuZCByZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENvbmZpZ3VyYXRpb25CeVNlbGVjdGFibGVLZXkoXG4gICAgICAgIGtleTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uWydzZWxlY3RhYmxlQXRLZXknXSxcbiAgICApOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24gfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5maW5kKGNvbmYgPT4gY29uZi5zZWxlY3RhYmxlQXRLZXkgPT09IGtleSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yQ3JlYXRlTW9kZWxOb2RlKFxuICAgICAgICBpdGVtOiBIaWVyYXJjaGljTW9kZWwsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICApOiBIaWVyYXJjaGljTW9kZWxOb2RlIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZGF0YUNoYW5nZS52YWx1ZS5maW5kKG4gPT4gbi5tb2RlbC5pZCA9PT0gaXRlbS5pZCAmJiBuLm1vZGVsLl9fdHlwZW5hbWUgPT09IGl0ZW0uX190eXBlbmFtZSk7XG4gICAgICAgIHJldHVybiBub2RlIHx8IG5ldyBIaWVyYXJjaGljTW9kZWxOb2RlKGl0ZW0sIGNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiJdfQ==
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsNEJBQTRCLEVBQWlCLE1BQU0seUNBQXlDLENBQUM7QUFPckcsT0FBTyxFQUFrQixtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQWEzRSxNQUFNLE9BQU8sZ0NBQWdDO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0M7Ozs7T0FJRztJQUNhLFVBQVUsR0FBMkMsSUFBSSxlQUFlLENBQXdCLEVBQUUsQ0FBQyxDQUFDO0lBRXBIOzs7O09BSUc7SUFDSyxhQUFhLEdBQXFDLEVBQUUsQ0FBQztJQUU3RDs7O09BR0c7SUFDSSxJQUFJLENBQ1AsTUFBd0MsRUFDeEMsZ0JBQXVELElBQUksRUFDM0Qsa0JBQXlDLElBQUk7UUFFN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxF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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNLLCtCQUErQixDQUNuQyxHQUFzRDtRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDakYsQ0FBQztJQUVPLG9CQUFvQixDQUN4QixJQUFxQixFQUNyQixhQUE2QztRQUU3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRyxPQUFPLElBQUksSUFBSSxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDO3VHQTlTUSxnQ0FBZ0M7MkdBQWhDLGdDQUFnQyxjQURwQixNQUFNOzsyRkFDbEIsZ0NBQWdDO2tCQUQ1QyxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2ludGVyc2VjdGlvbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmaXJzdCwgZm9ya0pvaW4sIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaW5hbGl6ZSwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsIFF1ZXJ5VmFyaWFibGVzfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtIaWVyYXJjaGljRmxhdE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvZmxhdC1ub2RlJztcbmltcG9ydCB7TmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1xuICAgIEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uLFxuICAgIEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNNb2RlbCwgSGllcmFyY2hpY01vZGVsTm9kZX0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RlbC1ub2RlJztcbmltcG9ydCB7TGl0ZXJhbCwgVW50eXBlZE1vZGVsU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtGaWx0ZXJHcm91cENvbmRpdGlvbn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZS50eXBlcyc7XG5cbmV4cG9ydCB0eXBlIE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uID0gUmVjb3JkPHN0cmluZywgYW55W10+O1xuXG50eXBlIENvbnRleHR1YWxpemVkQ29uZmlnPFQgZXh0ZW5kcyBVbnR5cGVkTW9kZWxTZXJ2aWNlID0gVW50eXBlZE1vZGVsU2VydmljZT4gPSB7XG4gICAgY29uZmlndXJhdGlvbjogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uO1xuICAgIGluamVjdGVkU2VydmljZTogVDtcbiAgICB2YXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyO1xufTtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHRoZSBnbG9iYWwgcmVzdWx0IG9mIHRoZSB0cmVlXG4gICAgICogVGhpcyBvYnNlcnZhYmxlIGNvbnRhaW5zIE5vZGUuXG4gICAgICogV2hlbiBpdCdzIHVwZGF0ZWQsIHRoZSBUcmVlQ29udHJvbGxlciBhbmQgVHJlZUZsYXR0ZW5lciBwcm9jZXNzIHRoZSBuZXcgYXJyYXkgdG8gZ2VuZXJhdGUgdGhlIGZsYXQgdHJlZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YUNoYW5nZTogQmVoYXZpb3JTdWJqZWN0PEhpZXJhcmNoaWNNb2RlbE5vZGVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhpZXJhcmNoaWNNb2RlbE5vZGVbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgcmVsYXRpb25zIGFuZCBzZWxlY3Rpb24gY29uc3RyYWludHNcbiAgICAgKlxuICAgICAqIFRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgaW4gdGhlIG9yZGVyIG9mIHRoZSBoaWVyYXJjaGljIChsaXN0IGZpcnN0IHBhcmVudCBydWxlcywgdGhlbiBjaGlsZCBydWxlcylcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb246IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBJbml0IGNvbXBvbmVudCBieSBzYXZpbmcgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGVuIHJldHJpZXZpbmcgcm9vdCBlbGVtZW50cy5cbiAgICAgKiBVcGRhdGVzICoqYW5vdGhlcioqIG9ic2VydmFibGUgKHRoaXMuZGF0YUNoYW5nZSkgd2hlbiBkYXRhIGlzIHJldHJpZXZlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdChcbiAgICAgICAgY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSxcbiAgICAgICAgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHNlYXJjaFZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsID0gbnVsbCxcbiAgICApOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlnKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlnO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaXN0KG51bGwsIGNvbnRleHRGaWx0ZXIsIHNlYXJjaFZhcmlhYmxlcykucGlwZShtYXAoZGF0YSA9PiB0aGlzLmRhdGFDaGFuZ2UubmV4dChkYXRhKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBsaXN0IG9mIGNoaWxkcmVuLCBjb25zaWRlcmluZyBnaXZlbiBGbGF0Tm9kZSBpZCBhcyBhIHBhcmVudC5cbiAgICAgKiBNYXJrIGxvYWRpbmcgc3RhdHVzIGluZGl2aWR1YWxseSBvbiBub2Rlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZENoaWxkcmVuKFxuICAgICAgICBmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlLFxuICAgICAgICBjb250ZXh0RmlsdGVyOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgLy8gRG9udCByZWZldGNoIGNoaWxkcmVuLiBJbXByb3ZlIHBlcmZvcm1hbmNlc1xuICAgICAgICAvLyBQcmV2ZW50cyBpbnRlcmZlcmVuY2VzIGJldHdlZW4gSGllcmFyY2hpY01vZGVsTm9kZSBzdHJ1Y3R1cmUgYW5kIGFuZ3VsYXIgY29tcG9uZW50cyBuYXZpZ2F0aW9uLlxuICAgICAgICAvLyBQcmV2ZW50cyBhIGJ1ZyB3aGVyZSBncmFuZCBjaGlsZHJlbiB3ZXJlIGxvc3QgaWYgY2xvc2luZyByb290XG4gICAgICAgIGlmIChmbGF0Tm9kZS5ub2RlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZmxhdE5vZGUubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0TGlzdChmbGF0Tm9kZSwgY29udGV4dEZpbHRlcilcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IChmbGF0Tm9kZS5sb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgIGZsYXROb2RlLm5vZGUuY2hpbGRyZW5DaGFuZ2UubmV4dChpdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhQ2hhbmdlLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2goc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcywgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRMaXN0KG51bGwsIGNvbnRleHRGaWx0ZXIsIHNlYXJjaFZhcmlhYmxlcykuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KGl0ZW1zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgZWxlbWVudHMgZnJvbSB0aGUgc2VydmVyXG4gICAgICogR2V0IHJvb3QgZWxlbWVudHMgaWYgbm9kZSBpcyBudWxsLCBvciBjaGlsZCBlbGVtZW50cyBpZiBub2RlIGlzIGdpdmVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRMaXN0KFxuICAgICAgICBub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsID0gbnVsbCxcbiAgICAgICAgY29udGV4dEZpbHRlcnM6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICAgICBzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCA9IG51bGwsXG4gICAgKTogT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+IHtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSB0aGlzLmdldENvbnRleHR1YWxpemVkQ29uZmlncyhub2RlLCBjb250ZXh0RmlsdGVycywgc2VhcmNoVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBjb25maWd1cmF0aW9ucy5tYXAoYyA9PiBjLmluamVjdGVkU2VydmljZS5nZXRBbGwoYy52YXJpYWJsZXNNYW5hZ2VyKSk7XG5cbiAgICAgICAgLy8gRmlyZSBxdWVyaWVzLCBhbmQgbWVyZ2UgcmVzdWx0cywgdHJhbnNmb3JtaW5nIGFwb2xsbyBpdGVtcyBpbnRvIE5vZGUgT2JqZWN0LlxuICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGluZzogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG5cbiAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCByZXN1bHQgb2YgYW4gb2JzZXJ2YWJsZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCBpdGVtIG9mIHRoZSByZXN1bHQsIGNvbnZlcnQgaW50byBOb2RlIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVzdWx0c1tpXS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZy5wdXNoKHRoaXMuZ2V0T3JDcmVhdGVNb2RlbE5vZGUoaXRlbSwgY29uZmlndXJhdGlvbnNbaV0uY29uZmlndXJhdGlvbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Rpbmc7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY291bnRJdGVtcyhub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUsIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dHVhbGl6ZWRDb25maWdzKG5vZGUsIGNvbnRleHRGaWx0ZXJzLCBudWxsKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBjb25maWd1cmF0aW9ucy5tYXAoYyA9PiBjLmluamVjdGVkU2VydmljZS5jb3VudChjLnZhcmlhYmxlc01hbmFnZXIpLnBpcGUoZmlyc3QoKSkpO1xuXG4gICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gcmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBsZW5ndGgpID0+IHRvdGFsICsgbGVuZ3RoLCAwKTtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kYWJsZSA9IHRvdGFsSXRlbXMgPiAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRleHR1YWxpemVkQ29uZmlncyhcbiAgICAgICAgbm9kZTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICAgICAgc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgPSBudWxsLFxuICAgICk6IENvbnRleHR1YWxpemVkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBjb25maWdzQW5kU2VydmljZXM6IENvbnRleHR1YWxpemVkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICAvLyBDb25zaWRlcmluZyB0aGUgd2hvbGUgY29uZmlndXJhdGlvbiBtYXkgY2F1c2UgcXVlcmllcyB3aXRoIG5vL3dyb25nIHJlc3VsdHMgd2UgaGF2ZSBpbXBlcmF0aXZlbHkgdG8gYXZvaWQgIVxuICAgICAgICAvLyBlLmcgdGhlcmUgYXJlIGNyb3NzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVxdWlwbWVudHMgYW5kIHRheG9ub21pZXMgZmlsdGVycy4gQm90aCBoYXZlIFwicGFyZW50c1wiIGFuZCBcInRheG9ub21pZXNcIiBmaWx0ZXJzLi4uXG4gICAgICAgIC8vIFdoZW4gY2xpY2tpbmcgb24gYSBlcXVpcG1lbnQsIHRoZSBjb25maWd1cmF0aW9uIG9mIHRheG9ub21pZXMgd2l0aCBtYXRjaCBcInBhcmVudHNcIiBmaWx0ZXIsIGJ1dCB1c2UgdGhlIGlkIG9mIHRoZSBlcXVpcG1lbnRcbiAgICAgICAgLy8gVG8gZml4IHRoaXMsIHdlIHNob3VsZCBvbmx5IGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgdGhlIG9uZSBnaXZlbiBieSB0aGUgbm9kZSBwYXNzZWQgYXMgYXJndW1lbnQuXG4gICAgICAgIC8vIFRoYXQgd291bGQgbWVhbiA6IG5vIGNoaWxkIGNhbiBhZmZlY3QgcGFyZW50LlxuICAgICAgICAvLyBUaGF0IHdvdWxkIG1lYW4gOiBzb3J0aW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGhhdmUgc2VtYW50aWMvaGllcmFyY2h5IGltcGxpY2F0aW9uc1xuICAgICAgICBjb25zdCBjb25maWdzID0gbm9kZSA/IHRoaXMuZ2V0TmV4dENvbmZpZ3Mobm9kZS5ub2RlLmNvbmZpZykgOiB0aGlzLmNvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHtwYWdlSW5kZXg6IDAsIHBhZ2VTaXplOiA5OTl9O1xuXG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRGaWx0ZXIgPSB0aGlzLmdldEZpbHRlckJ5U2VydmljZShjb25maWcsIGNvbnRleHRGaWx0ZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ2V0U2VydmljZUZpbHRlcihub2RlLCBjb25maWcsIGNvbnRleHRGaWx0ZXIsICEhc2VhcmNoVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzTWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyKCk7XG5cbiAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCd2YXJpYWJsZXMnLCB7ZmlsdGVyOiBmaWx0ZXIsIHBhZ2luYXRpb246IHBhZ2luYXRpb259KTtcbiAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCdjb25maWctZmlsdGVyJywge2ZpbHRlcjogY29uZmlnLmZpbHRlcn0pO1xuXG4gICAgICAgICAgICBpZiAoc2VhcmNoVmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVzTWFuYWdlci5zZXQoJ25hdHVyYWwtc2VhcmNoJywgc2VhcmNoVmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5qZWN0ZWRTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoY29uZmlnLnNlcnZpY2UpO1xuICAgICAgICAgICAgY29uZmlnc0FuZFNlcnZpY2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZyxcbiAgICAgICAgICAgICAgICBpbmplY3RlZFNlcnZpY2U6IGluamVjdGVkU2VydmljZSxcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXNNYW5hZ2VyOiB2YXJpYWJsZXNNYW5hZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnc0FuZFNlcnZpY2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBtb2RlbHMgbWF0Y2hpbmcgZ2l2ZW4gRmxhdE5vZGVzXG4gICAgICogUmV0dXJucyBhIExpdGVyYWwgb2YgbW9kZWxzIGdyb3VwZWQgYnkgdGhlaXIgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGUgXCJzZWxlY3RhYmxlQXRLZXlcIlxuICAgICAqL1xuICAgIHB1YmxpYyB0b09yZ2FuaXplZFNlbGVjdGlvbihub2RlczogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24ucmVkdWNlPExpdGVyYWw+KChncm91cCwgY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgIGdyb3VwW2NvbmZpZy5zZWxlY3RhYmxlQXRLZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25bbm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5XS5wdXNoKG5vZGUubW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm1zIGFuIE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uIGludG8gYSBsaXN0IG9mIE1vZGVsTm9kZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZnJvbU9yZ2FuaXplZFNlbGVjdGlvbihvcmdhbml6ZWRNb2RlbFNlbGVjdGlvbjogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pOiBIaWVyYXJjaGljTW9kZWxOb2RlW10ge1xuICAgICAgICBpZiAoIW9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGFibGVBdEtleSBvZiBPYmplY3Qua2V5cyhvcmdhbml6ZWRNb2RlbFNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbkJ5U2VsZWN0YWJsZUtleShzZWxlY3RhYmxlQXRLZXkpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2Ygb3JnYW5pemVkTW9kZWxTZWxlY3Rpb25bc2VsZWN0YWJsZUF0S2V5XSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgSGllcmFyY2hpY01vZGVsTm9kZShtb2RlbCwgY29uZmlnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoYXQgZWFjaCBjb25maWd1cmF0aW9uLnNlbGVjdGFibGVBdEtleSBhdHRyaWJ1dGUgaXMgdW5pcXVlXG4gICAgICovXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbnM6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGVBdEtleUF0dHJpYnV0ZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZGV4ID0gc2VsZWN0YWJsZUF0S2V5QXR0cmlidXRlcy5pbmRleE9mKGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4ID09PSAtMSAmJiBjb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVBdEtleUF0dHJpYnV0ZXMucHVzaChjb25maWcuc2VsZWN0YWJsZUF0S2V5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIDogcmVtb3ZlID9cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIG1heWJlIGRhbmdlcm91cyBpbiBjYXNlIHdlIHJlLW9wZW4gaGllcmFyY2hpY2FsIHNlbGVjdG9yIHdpdGggdGhlIGxhc3QgcmV0dXJuZWQgY29uZmlnIGhhdmluZyBub24tdW5pcXVlXG4gICAgICAgICAgICAgICAgLy8ga2V5c1xuICAgICAgICAgICAgICAgIGlmIChrZXlJbmRleCA8IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBoaWVyYXJjaGljIGNvbmZpZ3VyYXRpb24gOiBzZWxlY3RhYmxlQXRLZXkgYXR0cmlidXRlIHNob3VsZCBiZSB1bmlxdWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gY29uZmlndXJhdGlvbnMgc2V0dXAgaW4gdGhlIGxpc3QgYWZ0ZXIgdGhlIGdpdmVuIG9uZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TmV4dENvbmZpZ3MoY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24pOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0luZGV4ID0gdGhpcy5jb25maWd1cmF0aW9uLmZpbmRJbmRleChjID0+IGMgPT09IGNvbmZpZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uc2xpY2UoY29uZmlnSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBxdWVyeVZhcmlhYmxlcyBmaWx0ZXIgZm9yIGNoaWxkcmVuIHF1ZXJ5XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRTZXJ2aWNlRmlsdGVyKFxuICAgICAgICBmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCxcbiAgICAgICAgY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uWydmaWx0ZXInXSB8IG51bGwgPSBudWxsLFxuICAgICAgICBhbGxEZWVwcyA9IGZhbHNlLFxuICAgICk6IEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uWydmaWx0ZXInXSB8IG51bGwge1xuICAgICAgICBjb25zdCBmaWVsZENvbmRpdGlvbjogRmlsdGVyR3JvdXBDb25kaXRpb24gPSB7fTtcblxuICAgICAgICAvLyBpZiBubyBwYXJlbnQsIGZpbHRlciBlbXB0eSBlbGVtZW50c1xuICAgICAgICBpZiAoIWZsYXROb2RlKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0RmlsdGVyID8gY29udGV4dEZpbHRlciA6IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFsbERlZXBzKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkQ29uZGl0aW9uW2ZdID0ge2VtcHR5OiB7fX07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZsYXROb2RlLm5vZGUuY29uZmlnLmNoaWxkcmVuUmVsYXRpb25OYW1lcyB8fCAhY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nRmlsdGVycyA9IGludGVyc2VjdGlvbihcbiAgICAgICAgICAgICAgICBmbGF0Tm9kZS5ub2RlLmNvbmZpZy5jaGlsZHJlblJlbGF0aW9uTmFtZXMsXG4gICAgICAgICAgICAgICAgY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2hpbmdGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRDb25kaXRpb25bbWF0Y2hpbmdGaWx0ZXJzWzBdXSA9IHtoYXZlOiB7dmFsdWVzOiBbZmxhdE5vZGUubm9kZS5tb2RlbC5pZF19fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtmaWVsZENvbmRpdGlvbl19XX07XG5cbiAgICAgICAgLy8gdG9kbyA6IGlzIGl0IHJpZ2h0ID8gc2hvdWxkbid0IGl0IGJlIG1hbmFnZWQgd2l0aCBRdWVyeVZhcmlhYmxlc01hbmFnZXIncyBjaGFubmVscyA/ID9cbiAgICAgICAgaWYgKGNvbnRleHRGaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlcnMuZ3JvdXBzLnB1c2goLi4uY29udGV4dEZpbHRlci5ncm91cHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgY29udGV4dCBmaWx0ZXIgYXBwbGljYWJsZSB0byB0aGUgc2VydmljZSBmb3IgZ2l2ZW4gY29uZmlnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIEFwcGxpY2FibGUgY29uZmlnXG4gICAgICogQHBhcmFtIGNvbnRleHRGaWx0ZXJzIExpc3Qgb2YgY29udGV4dCBmaWx0ZXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJCeVNlcnZpY2UoXG4gICAgICAgIGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uLFxuICAgICAgICBjb250ZXh0RmlsdGVyczogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bXSB8IG51bGwsXG4gICAgKTogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udGV4dEZpbHRlcnMgfHwgIWNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBjb250ZXh0RmlsdGVycy5maW5kKGYgPT4gZi5zZXJ2aWNlID09PSBjb25maWcuc2VydmljZSk7XG4gICAgICAgIHJldHVybiBmaWx0ZXIgPyBmaWx0ZXIuZmlsdGVyIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggaW4gY29uZmlndXJhdGlvbnMuc2VsZWN0YWJsZUF0S2V5IGF0dHJpYnV0ZSB0byBmaW5kIGdpdmVuIGtleSBhbmQgcmV0dXJuIHRoZSBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDb25maWd1cmF0aW9uQnlTZWxlY3RhYmxlS2V5KFxuICAgICAgICBrZXk6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvblsnc2VsZWN0YWJsZUF0S2V5J10sXG4gICAgKTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uZmluZChjb25mID0+IGNvbmYuc2VsZWN0YWJsZUF0S2V5ID09PSBrZXkpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZU1vZGVsTm9kZShcbiAgICAgICAgaXRlbTogSGllcmFyY2hpY01vZGVsLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24sXG4gICAgKTogSGllcmFyY2hpY01vZGVsTm9kZSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRhdGFDaGFuZ2UudmFsdWUuZmluZChuID0+IG4ubW9kZWwuaWQgPT09IGl0ZW0uaWQgJiYgbi5tb2RlbC5fX3R5cGVuYW1lID09PSBpdGVtLl9fdHlwZW5hbWUpO1xuICAgICAgICByZXR1cm4gbm9kZSB8fCBuZXcgSGllcmFyY2hpY01vZGVsTm9kZShpdGVtLCBjb25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iXX0=