cps-ui-kit 17.14.0 → 17.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -339,7 +339,7 @@ export class TableColumnFilterComponent {
339
339
  this._tableInstance?.onFilter?.unsubscribe();
340
340
  }
341
341
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TableColumnFilterComponent, deps: [{ token: i0.ElementRef }, { token: i1.Table, optional: true }, { token: i2.TreeTable, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
342
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: TableColumnFilterComponent, isStandalone: true, selector: "table-column-filter", inputs: { field: "field", type: "type", persistent: "persistent", showClearButton: "showClearButton", showApplyButton: "showApplyButton", showCloseButton: "showCloseButton", showMatchModes: "showMatchModes", matchModes: "matchModes", showOperator: "showOperator", maxConstraints: "maxConstraints", headerTitle: "headerTitle", hideOnClear: "hideOnClear", categoryOptions: "categoryOptions", asButtonToggle: "asButtonToggle", singleSelection: "singleSelection", placeholder: "placeholder" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseOver()", "mouseleave": "onMouseLeave()" } }, viewQueries: [{ propertyName: "columnFilterMenu", first: true, predicate: ["columnFilterMenu"], descendants: true }, { propertyName: "constraintCompList", predicate: ["constraintComponent"], descendants: true }], ngImport: i0, template: "<div class=\"cps-table-col-filter\">\n <cps-menu\n #columnFilterMenu\n [withArrow]=\"false\"\n hideTransitionOptions=\"0s linear\"\n [persistent]=\"persistent || (showApplyButton && isCategoryDropdownOpened)\"\n (menuShown)=\"onMenuShown()\"\n (menuHidden)=\"onMenuHidden()\"\n (beforeMenuHidden)=\"onBeforeMenuHidden()\">\n <div class=\"cps-table-col-filter-menu-content\">\n <div\n class=\"cps-table-col-filter-menu-content-header\"\n *ngIf=\"showCloseButton || headerTitle\">\n <span class=\"cps-table-col-filter-menu-content-header-title\">\n {{ headerTitle }}\n </span>\n <cps-icon\n *ngIf=\"showCloseButton\"\n icon=\"close-x\"\n (click)=\"onCloseClick()\"></cps-icon>\n </div>\n <div\n class=\"cps-table-col-filter-menu-content-operator\"\n *ngIf=\"isShowOperator\">\n <cps-select\n [hideDetails]=\"true\"\n [disabled]=\"!fieldConstraints || fieldConstraints.length < 2\"\n [returnObject]=\"false\"\n [options]=\"operatorOptions\"\n [ngModel]=\"operator\"\n (valueChanged)=\"onOperatorChange($event)\"></cps-select>\n </div>\n <div class=\"cps-table-col-filter-menu-content-constraints\">\n <div\n *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\"\n class=\"cps-table-col-filter-menu-content-constraint\">\n <cps-select\n *ngIf=\"showMatchModes && currentMatchModes\"\n class=\"cps-table-col-filter-match-mode-select\"\n [hideDetails]=\"true\"\n [returnObject]=\"false\"\n [options]=\"currentMatchModes\"\n [ngModel]=\"fieldConstraint.matchMode\"\n (valueChanged)=\"\n onMenuMatchModeChange($event, fieldConstraint)\n \"></cps-select>\n <table-column-filter-constraint\n #constraintComponent\n [type]=\"type\"\n [field]=\"field\"\n [asButtonToggle]=\"asButtonToggle\"\n [singleSelection]=\"singleSelection\"\n [categoryOptions]=\"categoryOptions\"\n [filterConstraint]=\"fieldConstraint\"\n [hasApplyButton]=\"showApplyButton\"\n [placeholder]=\"placeholder\">\n </table-column-filter-constraint>\n <div\n class=\"cps-table-col-filter-remove-rule-btn\"\n *ngIf=\"showRemoveIcon\">\n <cps-button\n type=\"borderless\"\n width=\"100%\"\n size=\"small\"\n color=\"prepared\"\n icon=\"delete\"\n (clicked)=\"removeConstraint(fieldConstraint)\"\n label=\"Remove condition\">\n </cps-button>\n </div>\n </div>\n </div>\n <div\n class=\"cps-table-col-filter-add-rule-btn\"\n *ngIf=\"isShowAddConstraint\">\n <cps-button\n label=\"Add condition\"\n type=\"borderless\"\n width=\"100%\"\n size=\"small\"\n color=\"surprise\"\n icon=\"add\"\n (clicked)=\"addConstraint()\">\n </cps-button>\n </div>\n <div class=\"cps-table-col-filter-buttonbar\">\n <cps-button\n *ngIf=\"showClearButton\"\n (clicked)=\"clearFilter()\"\n type=\"borderless\"\n color=\"prepared\"\n size=\"small\"\n label=\"Clear\"></cps-button>\n <cps-button\n *ngIf=\"showApplyButton\"\n (clicked)=\"applyFilter()\"\n color=\"prepared\"\n size=\"small\"\n label=\"Apply\"></cps-button>\n </div>\n </div>\n </cps-menu>\n <cps-icon\n [icon]=\"isFilterApplied ? 'filter-funnel-filled' : 'filter-funnel'\"\n size=\"13\"\n (click)=\"columnFilterMenu.toggle($event)\"\n class=\"cps-table-col-filter-menu-button\"\n [ngClass]=\"{\n 'cps-table-col-filter-menu-button-active': isFilterApplied\n }\"\n >>\n </cps-icon>\n</div>\n", styles: [":host .cps-table-col-filter{display:inline-flex}:host .cps-table-col-filter .cps-table-col-filter-menu-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative;padding-left:8px;padding-right:4px}:host .cps-table-col-filter .cps-table-col-filter-menu-button:not(.cps-table-col-filter-menu-button-active):hover{color:var(--cps-color-text-dark)}:host .cps-table-col-filter .cps-table-col-filter-menu-button-active{color:var(--cps-color-calm-lighten1)}.cps-table-col-filter-menu-content{padding-bottom:12px;min-width:200px;max-height:500px;overflow:auto}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header{min-height:32px;padding:8px;border-bottom:1px solid var(--cps-color-line-mid);background:var(--cps-color-bg-light);display:flex;justify-content:space-between;align-items:center}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header-title{font-family:Source Sans Pro,sans-serif;color:var(--cps-color-text-darkest);max-width:390px;cursor:default}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header cps-icon{margin-left:8px;cursor:pointer}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header cps-icon:hover{color:var(--cps-color-calm)}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-operator{padding:12px;border-bottom:1px solid var(--cps-color-line-mid);background:var(--cps-color-bg-light)}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-menu-content-constraint{border-bottom:1px solid var(--cps-color-line-mid);padding:12px}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-menu-content-constraint .cps-table-col-filter-match-mode-select{margin-bottom:8px}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-menu-content-constraint:last-child{border-bottom:none}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-remove-rule-btn{padding-top:8px}.cps-table-col-filter-menu-content .cps-table-col-filter-add-rule-btn{padding:8px 12px}.cps-table-col-filter-menu-content .cps-table-col-filter-buttonbar{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "borderRadius", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "value"], outputs: ["valueChanged"] }, { kind: "component", type: TableColumnFilterConstraintComponent, selector: "table-column-filter-constraint", inputs: ["type", "field", "filterConstraint", "categoryOptions", "asButtonToggle", "singleSelection", "placeholder", "hasApplyButton"] }] }); }
342
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: TableColumnFilterComponent, isStandalone: true, selector: "table-column-filter", inputs: { field: "field", type: "type", persistent: "persistent", showClearButton: "showClearButton", showApplyButton: "showApplyButton", showCloseButton: "showCloseButton", showMatchModes: "showMatchModes", matchModes: "matchModes", showOperator: "showOperator", maxConstraints: "maxConstraints", headerTitle: "headerTitle", hideOnClear: "hideOnClear", categoryOptions: "categoryOptions", asButtonToggle: "asButtonToggle", singleSelection: "singleSelection", placeholder: "placeholder" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseOver()", "mouseleave": "onMouseLeave()" } }, viewQueries: [{ propertyName: "columnFilterMenu", first: true, predicate: ["columnFilterMenu"], descendants: true }, { propertyName: "constraintCompList", predicate: ["constraintComponent"], descendants: true }], ngImport: i0, template: "<div class=\"cps-table-col-filter\">\n <cps-menu\n #columnFilterMenu\n [withArrow]=\"false\"\n hideTransitionOptions=\"0s linear\"\n [persistent]=\"persistent || (showApplyButton && isCategoryDropdownOpened)\"\n (menuShown)=\"onMenuShown()\"\n (menuHidden)=\"onMenuHidden()\"\n (beforeMenuHidden)=\"onBeforeMenuHidden()\">\n <div class=\"cps-table-col-filter-menu-content\">\n <div\n class=\"cps-table-col-filter-menu-content-header\"\n *ngIf=\"showCloseButton || headerTitle\">\n <span class=\"cps-table-col-filter-menu-content-header-title\">\n {{ headerTitle }}\n </span>\n <cps-icon\n *ngIf=\"showCloseButton\"\n icon=\"close-x\"\n (click)=\"onCloseClick()\"></cps-icon>\n </div>\n <div\n class=\"cps-table-col-filter-menu-content-operator\"\n *ngIf=\"isShowOperator\">\n <cps-select\n [hideDetails]=\"true\"\n [disabled]=\"!fieldConstraints || fieldConstraints.length < 2\"\n [returnObject]=\"false\"\n [options]=\"operatorOptions\"\n [ngModel]=\"operator\"\n (valueChanged)=\"onOperatorChange($event)\"></cps-select>\n </div>\n <div class=\"cps-table-col-filter-menu-content-constraints\">\n <div\n *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\"\n class=\"cps-table-col-filter-menu-content-constraint\">\n <cps-select\n *ngIf=\"showMatchModes && currentMatchModes\"\n class=\"cps-table-col-filter-match-mode-select\"\n [hideDetails]=\"true\"\n [returnObject]=\"false\"\n [options]=\"currentMatchModes\"\n [ngModel]=\"fieldConstraint.matchMode\"\n (valueChanged)=\"\n onMenuMatchModeChange($event, fieldConstraint)\n \"></cps-select>\n <table-column-filter-constraint\n #constraintComponent\n [type]=\"type\"\n [field]=\"field\"\n [asButtonToggle]=\"asButtonToggle\"\n [singleSelection]=\"singleSelection\"\n [categoryOptions]=\"categoryOptions\"\n [filterConstraint]=\"fieldConstraint\"\n [hasApplyButton]=\"showApplyButton\"\n [placeholder]=\"placeholder\">\n </table-column-filter-constraint>\n <div\n class=\"cps-table-col-filter-remove-rule-btn\"\n *ngIf=\"showRemoveIcon\">\n <cps-button\n type=\"borderless\"\n width=\"100%\"\n size=\"small\"\n color=\"prepared\"\n icon=\"delete\"\n (clicked)=\"removeConstraint(fieldConstraint)\"\n label=\"Remove condition\">\n </cps-button>\n </div>\n </div>\n </div>\n <div\n class=\"cps-table-col-filter-add-rule-btn\"\n *ngIf=\"isShowAddConstraint\">\n <cps-button\n label=\"Add condition\"\n type=\"borderless\"\n width=\"100%\"\n size=\"small\"\n color=\"surprise\"\n icon=\"add\"\n (clicked)=\"addConstraint()\">\n </cps-button>\n </div>\n <div class=\"cps-table-col-filter-buttonbar\">\n <cps-button\n *ngIf=\"showClearButton\"\n (clicked)=\"clearFilter()\"\n type=\"borderless\"\n color=\"prepared\"\n size=\"small\"\n label=\"Clear\"></cps-button>\n <cps-button\n *ngIf=\"showApplyButton\"\n (clicked)=\"applyFilter()\"\n color=\"prepared\"\n size=\"small\"\n label=\"Apply\"></cps-button>\n </div>\n </div>\n </cps-menu>\n <cps-icon\n [icon]=\"isFilterApplied ? 'filter-funnel-filled' : 'filter-funnel'\"\n size=\"13\"\n (click)=\"columnFilterMenu.toggle($event)\"\n class=\"cps-table-col-filter-menu-button\"\n [ngClass]=\"{\n 'cps-table-col-filter-menu-button-active': isFilterApplied\n }\"\n >>\n </cps-icon>\n</div>\n", styles: [":host .cps-table-col-filter{display:inline-flex}:host .cps-table-col-filter .cps-table-col-filter-menu-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative;padding-left:8px;padding-right:4px}:host .cps-table-col-filter .cps-table-col-filter-menu-button:not(.cps-table-col-filter-menu-button-active):hover{color:var(--cps-color-text-dark)}:host .cps-table-col-filter .cps-table-col-filter-menu-button-active{color:var(--cps-color-calm-lighten1)}.cps-table-col-filter-menu-content{padding-bottom:12px;min-width:200px;max-height:500px;overflow:auto}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header{min-height:32px;padding:8px;border-bottom:1px solid var(--cps-color-line-mid);background:var(--cps-color-bg-light);display:flex;justify-content:space-between;align-items:center}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header-title{font-family:Source Sans Pro,sans-serif;color:var(--cps-color-text-darkest);max-width:390px;cursor:default}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header cps-icon{margin-left:8px;cursor:pointer}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-header cps-icon:hover{color:var(--cps-color-calm)}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-operator{padding:12px;border-bottom:1px solid var(--cps-color-line-mid);background:var(--cps-color-bg-light)}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-menu-content-constraint{border-bottom:1px solid var(--cps-color-line-mid);padding:12px}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-menu-content-constraint .cps-table-col-filter-match-mode-select{margin-bottom:8px}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-menu-content-constraint:last-child{border-bottom:none}.cps-table-col-filter-menu-content .cps-table-col-filter-menu-content-constraints .cps-table-col-filter-remove-rule-btn{padding-top:8px}.cps-table-col-filter-menu-content .cps-table-col-filter-add-rule-btn{padding:8px 12px}.cps-table-col-filter-menu-content .cps-table-col-filter-buttonbar{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "borderRadius", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "showChevron", "value"], outputs: ["valueChanged"] }, { kind: "component", type: TableColumnFilterConstraintComponent, selector: "table-column-filter-constraint", inputs: ["type", "field", "filterConstraint", "categoryOptions", "asButtonToggle", "singleSelection", "placeholder", "hasApplyButton"] }] }); }
343
343
  }
344
344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: TableColumnFilterComponent, decorators: [{
345
345
  type: Component,
@@ -404,4 +404,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
404
404
  type: HostListener,
405
405
  args: ['mouseleave']
406
406
  }] } });
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtdGFibGUvY29tcG9uZW50cy9pbnRlcm5hbC90YWJsZS1jb2x1bW4tZmlsdGVyL3RhYmxlLWNvbHVtbi1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRhYmxlL2NvbXBvbmVudHMvaW50ZXJuYWwvdGFibGUtY29sdW1uLWZpbHRlci90YWJsZS1jb2x1bW4tZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBRVIsU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBa0IsY0FBYyxFQUFjLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEMsT0FBTyxFQUVMLHdCQUF3QixFQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pG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b21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlck1ldGFkYXRhLCBGaWx0ZXJPcGVyYXRvciwgU2VsZWN0SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQge1xuICBDcHNDb2x1bW5GaWx0ZXJDYXRlZ29yeU9wdGlvbixcbiAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLFxuICBDcHNDb2x1bW5GaWx0ZXJUeXBlXG59IGZyb20gJy4uLy4uLy4uL2Nwcy1jb2x1bW4tZmlsdGVyLXR5cGVzJztcbmltcG9ydCB7IENwc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5GaWx0ZXJDb25zdHJhaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtY29sdW1uLWZpbHRlci1jb25zdHJhaW50L3RhYmxlLWNvbHVtbi1maWx0ZXItY29uc3RyYWludC5jb21wb25lbnQnO1xuXG4vKipcbiAqIFRhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50IGlzIGFuIGludGVybmFsIGZpbHRlciBjb21wb25lbnQgaW4gdGFibGUgYW5kIHRyZWV0YWJsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFibGUtY29sdW1uLWZpbHRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ3BzQnV0dG9uQ29tcG9uZW50LFxuICAgIENwc01lbnVDb21wb25lbnQsXG4gICAgQ3BzSWNvbkNvbXBvbmVudCxcbiAgICBDcHNTZWxlY3RDb21wb25lbnQsXG4gICAgVGFibGVDb2x1bW5GaWx0ZXJDb25zdHJhaW50Q29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb2x1bW4tZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29sdW1uLWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY29sdW1uIHRvIGJlIGZpbHRlcmVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgZmlsdGVyIGluIHRhYmxlLCBpdCBjYW4gYmUgb2YgdHlwZSBcIm51bWJlclwiLCBcImJvb2xlYW5cIiwgXCJ0ZXh0XCIsIFwiZGF0ZVwiIG9yIFwiY2F0ZWdvcnlcIi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0eXBlOiBDcHNDb2x1bW5GaWx0ZXJUeXBlID0gJ3RleHQnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBtZW51IHNob3VsZCBiZSBwZXJzaXN0ZW50LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHBlcnNpc3RlbnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2hvdWxkIGhhdmUgY2xlYXIgYnV0dG9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dDbGVhckJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIHNob3VsZCBoYXZlIGFwcGx5IGJ1dHRvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93QXBwbHlCdXR0b24gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91bGQgaGF2ZSBjbG9zZSBidXR0b24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0Nsb3NlQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIHNob3VsZCBoYXZlIG1hdGNoIG1vZGVzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dNYXRjaE1vZGVzID0gdHJ1ZTtcblxuICAvKipcbiAgICogTWF0Y2ggbW9kZXMgZm9yIGZpbHRlci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtYXRjaE1vZGVzOiBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91bGQgaGF2ZSBvcGVyYXRvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93T3BlcmF0b3IgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBjb25zdHJhaW50cy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtYXhDb25zdHJhaW50cyA9IDI7XG5cbiAgLyoqXG4gICAqIFRpdGxlIG9mIHRoZSBmaWx0ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGVhZGVyVGl0bGUgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2hvdWxkIGhpZGUgb24gY2xlYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGlkZU9uQ2xlYXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY2F0ZWdvcnkgZmlsdGVyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNhdGVnb3J5T3B0aW9uczogQ3BzQ29sdW1uRmlsdGVyQ2F0ZWdvcnlPcHRpb25bXSB8IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGNhdGVnb3J5IGZpbHRlciBhcyBidXR0b24gdG9nZ2xlcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhc0J1dHRvblRvZ2dsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaW5nbGUgc2VsZWN0aW9uIGZvciBjYXRlZ29yeSBmaWx0ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIGZvciBmaWx0ZXIgY29uc3RyYWludHMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICBAVmlld0NoaWxkcmVuKCdjb25zdHJhaW50Q29tcG9uZW50JylcbiAgY29uc3RyYWludENvbXBMaXN0ITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uRmlsdGVyQ29uc3RyYWludENvbXBvbmVudD47XG5cbiAgb3BlcmF0b3I6IHN0cmluZyA9IEZpbHRlck9wZXJhdG9yLkFORDtcblxuICBvcGVyYXRvck9wdGlvbnMgPSBbXG4gICAgeyBsYWJlbDogJ01hdGNoIEFsbCcsIHZhbHVlOiBGaWx0ZXJPcGVyYXRvci5BTkQsIGluZm86ICdBTkQnIH0sXG4gICAgeyBsYWJlbDogJ01hdGNoIEFueScsIHZhbHVlOiBGaWx0ZXJPcGVyYXRvci5PUiwgaW5mbzogJ09SJyB9XG4gIF07XG5cbiAgcHJpdmF0ZSBtYXRjaE1vZGVMYWJlbHMgPSB7XG4gICAgc3RhcnRzV2l0aDogJ1N0YXJ0cyB3aXRoJyxcbiAgICBjb250YWluczogJ0NvbnRhaW5zJyxcbiAgICBub3RDb250YWluczogJ0RvZXMgbm90IGNvbnRhaW4nLFxuICAgIGVuZHNXaXRoOiAnRW5kcyB3aXRoJyxcbiAgICBlcXVhbHM6ICdFcXVhbHMnLFxuICAgIG5vdEVxdWFsczogJ0RvZXMgbm90IGVxdWFsJyxcbiAgICBsdDogJ0xlc3MgdGhhbicsXG4gICAgbHRlOiAnTGVzcyB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICBndDogJ0dyZWF0ZXIgdGhhbicsXG4gICAgZ3RlOiAnR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICBkYXRlSXM6ICdEYXRlIGlzJyxcbiAgICBkYXRlSXNOb3Q6ICdEYXRlIGlzIG5vdCcsXG4gICAgZGF0ZUJlZm9yZTogJ0RhdGUgaXMgYmVmb3JlJyxcbiAgICBkYXRlQWZ0ZXI6ICdEYXRlIGlzIGFmdGVyJ1xuICB9IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgcHJpdmF0ZSBmaWx0ZXJNYXRjaE1vZGVPcHRpb25zID0ge1xuICAgIHRleHQ6IFtcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5TVEFSVFNfV0lUSCxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5DT05UQUlOUyxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5OT1RfQ09OVEFJTlMsXG4gICAgICBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuRU5EU19XSVRILFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUyxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5OT1RfRVFVQUxTXG4gICAgXSxcbiAgICBudW1iZXI6IFtcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5FUVVBTFMsXG4gICAgICBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUyxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5MRVNTX1RIQU4sXG4gICAgICBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOX09SX0VRVUFMX1RPLFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTixcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9cbiAgICBdLFxuICAgIGRhdGU6IFtcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5EQVRFX0lTLFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVNfTk9ULFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQkVGT1JFLFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQUZURVJcbiAgICBdXG4gIH0gYXMgeyBba2V5OiBzdHJpbmddOiBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGVbXSB9O1xuXG4gIGN1cnJlbnRNYXRjaE1vZGVzOiBTZWxlY3RJdGVtW10gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnY29sdW1uRmlsdGVyTWVudScpXG4gIGNvbHVtbkZpbHRlck1lbnUhOiBDcHNNZW51Q29tcG9uZW50O1xuXG4gIF90YWJsZUluc3RhbmNlOiBUYWJsZSB8IFRyZWVUYWJsZTtcblxuICBpc0ZpbHRlckFwcGxpZWQgPSBmYWxzZTtcblxuICBnZXQgaXNDYXRlZ29yeURyb3Bkb3duT3BlbmVkKCkge1xuICAgIGlmICh0aGlzLnR5cGUgIT09ICdjYXRlZ29yeScpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50Q29tcExpc3Q/LmZpcnN0Py5pc0NhdGVnb3J5RHJvcGRvd25PcGVuZWQgfHwgZmFsc2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgZHQ6IFRhYmxlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyB0dDogVHJlZVRhYmxlXG4gICkge1xuICAgIHRoaXMuX3RhYmxlSW5zdGFuY2UgPSBkdCB8fCB0dDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm1hdGNoTW9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWx0ZXJNYXRjaE1vZGVPcHRpb25zW3RoaXMudHlwZV0gPSB0aGlzLm1hdGNoTW9kZXM7XG4gICAgfVxuICAgIHRoaXMuX3RhYmxlSW5zdGFuY2U/Lm9uRmlsdGVyPy5zdWJzY3JpYmUoKHZhbHVlKSA9PlxuICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyQXBwbGllZCh2YWx1ZSlcbiAgICApO1xuICAgIGlmICghdGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF0pIHtcbiAgICAgIHRoaXMuX2luaXRGaWVsZEZpbHRlckNvbnN0cmFpbnQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhDb25zdHJhaW50cyA+IDEgJiYgdGhpcy50eXBlICE9PSAnY2F0ZWdvcnknKSB7XG4gICAgICB0aGlzLnNob3dBcHBseUJ1dHRvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnNob3dBcHBseUJ1dHRvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudE1hdGNoTW9kZXMgPSB0aGlzLmZpbHRlck1hdGNoTW9kZU9wdGlvbnNbdGhpcy50eXBlXT8ubWFwKFxuICAgICAgKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGxhYmVsOiB0aGlzLm1hdGNoTW9kZUxhYmVsc1trZXldLCB2YWx1ZToga2V5IH07XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUZpbHRlckFwcGxpZWQodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkRmlsdGVyID0gdmFsdWUuZmlsdGVyc1s8c3RyaW5nPnRoaXMuZmllbGRdO1xuICAgIGlmIChmaWVsZEZpbHRlcikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRGaWx0ZXIpKSB7XG4gICAgICAgIHRoaXMuaXNGaWx0ZXJBcHBsaWVkID0gKDxGaWx0ZXJNZXRhZGF0YVtdPmZpZWxkRmlsdGVyKS5zb21lKFxuICAgICAgICAgIChtZXRhKSA9PiAhdGhpcy5fdGFibGVJbnN0YW5jZS5pc0ZpbHRlckJsYW5rKG1ldGEudmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzRmlsdGVyQXBwbGllZCA9ICF0aGlzLl90YWJsZUluc3RhbmNlLmlzRmlsdGVyQmxhbmsoXG4gICAgICAgICAgZmllbGRGaWx0ZXIudmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0ZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pbml0RmllbGRGaWx0ZXJDb25zdHJhaW50KCkge1xuICAgIGNvbnN0IGRlZmF1bHRNYXRjaE1vZGUgPSB0aGlzLmdldERlZmF1bHRNYXRjaE1vZGUoKTtcbiAgICBpZiAodGhpcy5fdGFibGVJbnN0YW5jZSBpbnN0YW5jZW9mIFRhYmxlKSB7XG4gICAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIG1hdGNoTW9kZTogZGVmYXVsdE1hdGNoTW9kZSxcbiAgICAgICAgICBvcGVyYXRvcjogdGhpcy5vcGVyYXRvclxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXSA9IHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIG1hdGNoTW9kZTogZGVmYXVsdE1hdGNoTW9kZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBvbkNsb3NlQ2xpY2soKSB7XG4gICAgdGhpcy5oaWRlKCk7XG4gIH1cblxuICBvbk1lbnVNYXRjaE1vZGVDaGFuZ2UodmFsdWU6IGFueSwgZmlsdGVyTWV0YTogRmlsdGVyTWV0YWRhdGEpIHtcbiAgICBmaWx0ZXJNZXRhLm1hdGNoTW9kZSA9IHZhbHVlO1xuXG4gICAgaWYgKCF0aGlzLnNob3dBcHBseUJ1dHRvbikge1xuICAgICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29uc3RyYWludCgpIHtcbiAgICAoPEZpbHRlck1ldGFkYXRhW10+dGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF0pLnB1c2goe1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBtYXRjaE1vZGU6IHRoaXMuZ2V0RGVmYXVsdE1hdGNoTW9kZSgpLFxuICAgICAgb3BlcmF0b3I6IHRoaXMuZ2V0RGVmYXVsdE9wZXJhdG9yKClcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUNvbnN0cmFpbnQoZmlsdGVyTWV0YTogRmlsdGVyTWV0YWRhdGEpIHtcbiAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXSA9ICg8RmlsdGVyTWV0YWRhdGFbXT4oXG4gICAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXVxuICAgICkpLmZpbHRlcigobWV0YSkgPT4gbWV0YSAhPT0gZmlsdGVyTWV0YSk7XG4gICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gIH1cblxuICBvbk9wZXJhdG9yQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAoPEZpbHRlck1ldGFkYXRhW10+dGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF0pLmZvckVhY2goXG4gICAgICAoZmlsdGVyTWV0YSkgPT4ge1xuICAgICAgICBmaWx0ZXJNZXRhLm9wZXJhdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLnNob3dBcHBseUJ1dHRvbikge1xuICAgICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdE1hdGNoTW9kZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGdldE1hdGNoTW9kZSA9ICh2YWw6IENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZSkgPT4ge1xuICAgICAgaWYgKHRoaXMudHlwZSBpbiB0aGlzLmZpbHRlck1hdGNoTW9kZU9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTWF0Y2hNb2RlT3B0aW9uc1t0aGlzLnR5cGVdLmluY2x1ZGVzKHZhbClcbiAgICAgICAgICA/IHZhbFxuICAgICAgICAgIDogdGhpcy5maWx0ZXJNYXRjaE1vZGVPcHRpb25zW3RoaXMudHlwZV1bMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBnZXRNYXRjaE1vZGUoQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRIKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBnZXRNYXRjaE1vZGUoQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUyk7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIGdldE1hdGNoTW9kZShDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuREFURV9JUyk7XG4gICAgICBjYXNlICdjYXRlZ29yeSc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpbmdsZVNlbGVjdGlvblxuICAgICAgICAgID8gQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLklTXG4gICAgICAgICAgOiBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuSU47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZ2V0TWF0Y2hNb2RlKENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5DT05UQUlOUyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdE9wZXJhdG9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlSW5zdGFuY2UuZmlsdGVyc1xuICAgICAgPyAoPEZpbHRlck1ldGFkYXRhW10+KFxuICAgICAgICAgIHRoaXMuX3RhYmxlSW5zdGFuY2UuZmlsdGVyc1s8c3RyaW5nPig8c3RyaW5nPnRoaXMuZmllbGQpXVxuICAgICAgICApKVswXS5vcGVyYXRvclxuICAgICAgOiB0aGlzLm9wZXJhdG9yO1xuICB9XG5cbiAgZ2V0IGZpZWxkQ29uc3RyYWludHMoKTogRmlsdGVyTWV0YWRhdGFbXSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIGlmICh0aGlzLl90YWJsZUluc3RhbmNlIGluc3RhbmNlb2YgVGFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNcbiAgICAgICAgPyA8RmlsdGVyTWV0YWRhdGFbXT50aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXVxuICAgICAgICA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNcbiAgICAgICAgPyA8RmlsdGVyTWV0YWRhdGFbXT5bdGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF1dXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd1JlbW92ZUljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRDb25zdHJhaW50cyA/IHRoaXMuZmllbGRDb25zdHJhaW50cy5sZW5ndGggPiAxIDogZmFsc2U7XG4gIH1cblxuICBnZXQgaXNTaG93T3BlcmF0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd09wZXJhdG9yICYmXG4gICAgICB0aGlzLm1heENvbnN0cmFpbnRzID4gMSAmJlxuICAgICAgIVsnYm9vbGVhbicsICdjYXRlZ29yeSddLmluY2x1ZGVzKHRoaXMudHlwZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzU2hvd0FkZENvbnN0cmFpbnQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICAhWydib29sZWFuJywgJ2NhdGVnb3J5J10uaW5jbHVkZXModGhpcy50eXBlKSAmJlxuICAgICAgdGhpcy5maWVsZENvbnN0cmFpbnRzICYmXG4gICAgICB0aGlzLmZpZWxkQ29uc3RyYWludHMubGVuZ3RoIDwgdGhpcy5tYXhDb25zdHJhaW50c1xuICAgICk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuY29sdW1uRmlsdGVyTWVudS5oaWRlKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9pbml0RmllbGRGaWx0ZXJDb25zdHJhaW50KCk7XG4gICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gICAgaWYgKHRoaXMuaGlkZU9uQ2xlYXIpIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXJWYWx1ZXMoKSB7XG4gICAgdGhpcy5faW5pdEZpZWxkRmlsdGVyQ29uc3RyYWludCgpO1xuICAgIHRoaXMuaXNGaWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcbiAgICB0aGlzLl90YWJsZUluc3RhbmNlLl9maWx0ZXIoKTtcbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxuXG4gIG9uTWVudVNob3duKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucGFyZW50RWxlbWVudDtcbiAgICBjb25zdCBjbGFzc05hbWUgPSAnY3BzLXRhYmxlLWNvbC1maWx0ZXItbWVudS1vcGVuJztcbiAgICBwYXJlbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG5cbiAgb25CZWZvcmVNZW51SGlkZGVuKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbHRlckFwcGxpZWQpIHRoaXMuX2luaXRGaWVsZEZpbHRlckNvbnN0cmFpbnQoKTtcbiAgfVxuXG4gIG9uTWVudUhpZGRlbigpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gJ2Nwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtb3Blbic7XG4gICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljayhldmVudDogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTb3J0SWNvbkNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1bnNvcnRlZFVwID1cbiAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucGFyZW50RWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5zb3J0LXVuc29ydGVkLWFycm93LXVwJ1xuICAgICAgKTtcbiAgICBpZiAodW5zb3J0ZWRVcCkge1xuICAgICAgdW5zb3J0ZWRVcC5zdHlsZS5ib3JkZXJCb3R0b21Db2xvciA9IGNvbG9yO1xuICAgIH1cbiAgICBjb25zdCB1bnNvcnRlZERvd24gPVxuICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5wYXJlbnRFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnNvcnQtdW5zb3J0ZWQtYXJyb3ctZG93bidcbiAgICAgICk7XG4gICAgaWYgKHVuc29ydGVkRG93bikge1xuICAgICAgdW5zb3J0ZWREb3duLnN0eWxlLmJvcmRlclRvcENvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpIG9uTW91c2VPdmVyKCkge1xuICAgIHRoaXMuX3VwZGF0ZVNvcnRJY29uQ29sb3IoJ3ZhcigtLWNwcy1jb2xvci1saW5lLWRhcmspJyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJykgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuX3VwZGF0ZVNvcnRJY29uQ29sb3IoJycpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fdGFibGVJbnN0YW5jZT8ub25GaWx0ZXI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlclwiPlxuICA8Y3BzLW1lbnVcbiAgICAjY29sdW1uRmlsdGVyTWVudVxuICAgIFt3aXRoQXJyb3ddPVwiZmFsc2VcIlxuICAgIGhpZGVUcmFuc2l0aW9uT3B0aW9ucz1cIjBzIGxpbmVhclwiXG4gICAgW3BlcnNpc3RlbnRdPVwicGVyc2lzdGVudCB8fCAoc2hvd0FwcGx5QnV0dG9uICYmIGlzQ2F0ZWdvcnlEcm9wZG93bk9wZW5lZClcIlxuICAgIChtZW51U2hvd24pPVwib25NZW51U2hvd24oKVwiXG4gICAgKG1lbnVIaWRkZW4pPVwib25NZW51SGlkZGVuKClcIlxuICAgIChiZWZvcmVNZW51SGlkZGVuKT1cIm9uQmVmb3JlTWVudUhpZGRlbigpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudC1oZWFkZXJcIlxuICAgICAgICAqbmdJZj1cInNob3dDbG9zZUJ1dHRvbiB8fCBoZWFkZXJUaXRsZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudC1oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICB7eyBoZWFkZXJUaXRsZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0Nsb3NlQnV0dG9uXCJcbiAgICAgICAgICBpY29uPVwiY2xvc2UteFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCI+PC9jcHMtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudC1vcGVyYXRvclwiXG4gICAgICAgICpuZ0lmPVwiaXNTaG93T3BlcmF0b3JcIj5cbiAgICAgICAgPGNwcy1zZWxlY3RcbiAgICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWVsZENvbnN0cmFpbnRzIHx8IGZpZWxkQ29uc3RyYWludHMubGVuZ3RoIDwgMlwiXG4gICAgICAgICAgW3JldHVybk9iamVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwib3BlcmF0b3JPcHRpb25zXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcGVyYXRvclwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlZCk9XCJvbk9wZXJhdG9yQ2hhbmdlKCRldmVudClcIj48L2Nwcy1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1tZW51LWNvbnRlbnQtY29uc3RyYWludHNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZENvbnN0cmFpbnQgb2YgZmllbGRDb25zdHJhaW50czsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1tZW51LWNvbnRlbnQtY29uc3RyYWludFwiPlxuICAgICAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cInNob3dNYXRjaE1vZGVzICYmIGN1cnJlbnRNYXRjaE1vZGVzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLWNvbC1maWx0ZXItbWF0Y2gtbW9kZS1zZWxlY3RcIlxuICAgICAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIlxuICAgICAgICAgICAgW3JldHVybk9iamVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJjdXJyZW50TWF0Y2hNb2Rlc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJmaWVsZENvbnN0cmFpbnQubWF0Y2hNb2RlXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwiXG4gICAgICAgICAgICAgIG9uTWVudU1hdGNoTW9kZUNoYW5nZSgkZXZlbnQsIGZpZWxkQ29uc3RyYWludClcbiAgICAgICAgICAgIFwiPjwvY3BzLXNlbGVjdD5cbiAgICAgICAgICA8dGFibGUtY29sdW1uLWZpbHRlci1jb25zdHJhaW50XG4gICAgICAgICAgICAjY29uc3RyYWludENvbXBvbmVudFxuICAgICAgICAgICAgW3R5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW2FzQnV0dG9uVG9nZ2xlXT1cImFzQnV0dG9uVG9nZ2xlXCJcbiAgICAgICAgICAgIFtzaW5nbGVTZWxlY3Rpb25dPVwic2luZ2xlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtjYXRlZ29yeU9wdGlvbnNdPVwiY2F0ZWdvcnlPcHRpb25zXCJcbiAgICAgICAgICAgIFtmaWx0ZXJDb25zdHJhaW50XT1cImZpZWxkQ29uc3RyYWludFwiXG4gICAgICAgICAgICBbaGFzQXBwbHlCdXR0b25dPVwic2hvd0FwcGx5QnV0dG9uXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiPlxuICAgICAgICAgIDwvdGFibGUtY29sdW1uLWZpbHRlci1jb25zdHJhaW50PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLWNvbC1maWx0ZXItcmVtb3ZlLXJ1bGUtYnRuXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1JlbW92ZUljb25cIj5cbiAgICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVDb25zdHJhaW50KGZpZWxkQ29uc3RyYWludClcIlxuICAgICAgICAgICAgICBsYWJlbD1cIlJlbW92ZSBjb25kaXRpb25cIj5cbiAgICAgICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1hZGQtcnVsZS1idG5cIlxuICAgICAgICAqbmdJZj1cImlzU2hvd0FkZENvbnN0cmFpbnRcIj5cbiAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICBsYWJlbD1cIkFkZCBjb25kaXRpb25cIlxuICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgY29sb3I9XCJzdXJwcmlzZVwiXG4gICAgICAgICAgaWNvbj1cImFkZFwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiYWRkQ29uc3RyYWludCgpXCI+XG4gICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLWJ1dHRvbmJhclwiPlxuICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJjbGVhckZpbHRlcigpXCJcbiAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBsYWJlbD1cIkNsZWFyXCI+PC9jcHMtYnV0dG9uPlxuICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0FwcGx5QnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJhcHBseUZpbHRlcigpXCJcbiAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIGxhYmVsPVwiQXBwbHlcIj48L2Nwcy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9jcHMtbWVudT5cbiAgPGNwcy1pY29uXG4gICAgW2ljb25dPVwiaXNGaWx0ZXJBcHBsaWVkID8gJ2ZpbHRlci1mdW5uZWwtZmlsbGVkJyA6ICdmaWx0ZXItZnVubmVsJ1wiXG4gICAgc2l6ZT1cIjEzXCJcbiAgICAoY2xpY2spPVwiY29sdW1uRmlsdGVyTWVudS50b2dnbGUoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1tZW51LWJ1dHRvblwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2Nwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtYnV0dG9uLWFjdGl2ZSc6IGlzRmlsdGVyQXBwbGllZFxuICAgIH1cIlxuICAgID4+XG4gIDwvY3BzLWljb24+XG48L2Rpdj5cbiJdfQ==
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtdGFibGUvY29tcG9uZW50cy9pbnRlcm5hbC90YWJsZS1jb2x1bW4tZmlsdGVyL3RhYmxlLWNvbHVtbi1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRhYmxlL2NvbXBvbmVudHMvaW50ZXJuYWwvdGFibGUtY29sdW1uLWZpbHRlci90YWJsZS1jb2x1bW4tZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBRVIsU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBa0IsY0FBYyxFQUFjLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEMsT0FBTyxFQUVMLHdCQUF3QixFQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pG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b21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlck1ldGFkYXRhLCBGaWx0ZXJPcGVyYXRvciwgU2VsZWN0SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQge1xuICBDcHNDb2x1bW5GaWx0ZXJDYXRlZ29yeU9wdGlvbixcbiAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLFxuICBDcHNDb2x1bW5GaWx0ZXJUeXBlXG59IGZyb20gJy4uLy4uLy4uL2Nwcy1jb2x1bW4tZmlsdGVyLXR5cGVzJztcbmltcG9ydCB7IENwc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5GaWx0ZXJDb25zdHJhaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtY29sdW1uLWZpbHRlci1jb25zdHJhaW50L3RhYmxlLWNvbHVtbi1maWx0ZXItY29uc3RyYWludC5jb21wb25lbnQnO1xuXG4vKipcbiAqIFRhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50IGlzIGFuIGludGVybmFsIGZpbHRlciBjb21wb25lbnQgaW4gdGFibGUgYW5kIHRyZWV0YWJsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFibGUtY29sdW1uLWZpbHRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ3BzQnV0dG9uQ29tcG9uZW50LFxuICAgIENwc01lbnVDb21wb25lbnQsXG4gICAgQ3BzSWNvbkNvbXBvbmVudCxcbiAgICBDcHNTZWxlY3RDb21wb25lbnQsXG4gICAgVGFibGVDb2x1bW5GaWx0ZXJDb25zdHJhaW50Q29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb2x1bW4tZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29sdW1uLWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY29sdW1uIHRvIGJlIGZpbHRlcmVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgZmlsdGVyIGluIHRhYmxlLCBpdCBjYW4gYmUgb2YgdHlwZSBcIm51bWJlclwiLCBcImJvb2xlYW5cIiwgXCJ0ZXh0XCIsIFwiZGF0ZVwiIG9yIFwiY2F0ZWdvcnlcIi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0eXBlOiBDcHNDb2x1bW5GaWx0ZXJUeXBlID0gJ3RleHQnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBtZW51IHNob3VsZCBiZSBwZXJzaXN0ZW50LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHBlcnNpc3RlbnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2hvdWxkIGhhdmUgY2xlYXIgYnV0dG9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dDbGVhckJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIHNob3VsZCBoYXZlIGFwcGx5IGJ1dHRvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93QXBwbHlCdXR0b24gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91bGQgaGF2ZSBjbG9zZSBidXR0b24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0Nsb3NlQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIHNob3VsZCBoYXZlIG1hdGNoIG1vZGVzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dNYXRjaE1vZGVzID0gdHJ1ZTtcblxuICAvKipcbiAgICogTWF0Y2ggbW9kZXMgZm9yIGZpbHRlci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtYXRjaE1vZGVzOiBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91bGQgaGF2ZSBvcGVyYXRvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93T3BlcmF0b3IgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBjb25zdHJhaW50cy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtYXhDb25zdHJhaW50cyA9IDI7XG5cbiAgLyoqXG4gICAqIFRpdGxlIG9mIHRoZSBmaWx0ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGVhZGVyVGl0bGUgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2hvdWxkIGhpZGUgb24gY2xlYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGlkZU9uQ2xlYXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY2F0ZWdvcnkgZmlsdGVyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNhdGVnb3J5T3B0aW9uczogQ3BzQ29sdW1uRmlsdGVyQ2F0ZWdvcnlPcHRpb25bXSB8IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGNhdGVnb3J5IGZpbHRlciBhcyBidXR0b24gdG9nZ2xlcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhc0J1dHRvblRvZ2dsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaW5nbGUgc2VsZWN0aW9uIGZvciBjYXRlZ29yeSBmaWx0ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIGZvciBmaWx0ZXIgY29uc3RyYWludHMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICBAVmlld0NoaWxkcmVuKCdjb25zdHJhaW50Q29tcG9uZW50JylcbiAgY29uc3RyYWludENvbXBMaXN0ITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uRmlsdGVyQ29uc3RyYWludENvbXBvbmVudD47XG5cbiAgb3BlcmF0b3I6IHN0cmluZyA9IEZpbHRlck9wZXJhdG9yLkFORDtcblxuICBvcGVyYXRvck9wdGlvbnMgPSBbXG4gICAgeyBsYWJlbDogJ01hdGNoIEFsbCcsIHZhbHVlOiBGaWx0ZXJPcGVyYXRvci5BTkQsIGluZm86ICdBTkQnIH0sXG4gICAgeyBsYWJlbDogJ01hdGNoIEFueScsIHZhbHVlOiBGaWx0ZXJPcGVyYXRvci5PUiwgaW5mbzogJ09SJyB9XG4gIF07XG5cbiAgcHJpdmF0ZSBtYXRjaE1vZGVMYWJlbHMgPSB7XG4gICAgc3RhcnRzV2l0aDogJ1N0YXJ0cyB3aXRoJyxcbiAgICBjb250YWluczogJ0NvbnRhaW5zJyxcbiAgICBub3RDb250YWluczogJ0RvZXMgbm90IGNvbnRhaW4nLFxuICAgIGVuZHNXaXRoOiAnRW5kcyB3aXRoJyxcbiAgICBlcXVhbHM6ICdFcXVhbHMnLFxuICAgIG5vdEVxdWFsczogJ0RvZXMgbm90IGVxdWFsJyxcbiAgICBsdDogJ0xlc3MgdGhhbicsXG4gICAgbHRlOiAnTGVzcyB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICBndDogJ0dyZWF0ZXIgdGhhbicsXG4gICAgZ3RlOiAnR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICBkYXRlSXM6ICdEYXRlIGlzJyxcbiAgICBkYXRlSXNOb3Q6ICdEYXRlIGlzIG5vdCcsXG4gICAgZGF0ZUJlZm9yZTogJ0RhdGUgaXMgYmVmb3JlJyxcbiAgICBkYXRlQWZ0ZXI6ICdEYXRlIGlzIGFmdGVyJ1xuICB9IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgcHJpdmF0ZSBmaWx0ZXJNYXRjaE1vZGVPcHRpb25zID0ge1xuICAgIHRleHQ6IFtcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5TVEFSVFNfV0lUSCxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5DT05UQUlOUyxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5OT1RfQ09OVEFJTlMsXG4gICAgICBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuRU5EU19XSVRILFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUyxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5OT1RfRVFVQUxTXG4gICAgXSxcbiAgICBudW1iZXI6IFtcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5FUVVBTFMsXG4gICAgICBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUyxcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5MRVNTX1RIQU4sXG4gICAgICBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOX09SX0VRVUFMX1RPLFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTixcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9cbiAgICBdLFxuICAgIGRhdGU6IFtcbiAgICAgIENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5EQVRFX0lTLFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVNfTk9ULFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQkVGT1JFLFxuICAgICAgQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQUZURVJcbiAgICBdXG4gIH0gYXMgeyBba2V5OiBzdHJpbmddOiBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGVbXSB9O1xuXG4gIGN1cnJlbnRNYXRjaE1vZGVzOiBTZWxlY3RJdGVtW10gfCB1bmRlZmluZWQ7XG5cbiAgQFZpZXdDaGlsZCgnY29sdW1uRmlsdGVyTWVudScpXG4gIGNvbHVtbkZpbHRlck1lbnUhOiBDcHNNZW51Q29tcG9uZW50O1xuXG4gIF90YWJsZUluc3RhbmNlOiBUYWJsZSB8IFRyZWVUYWJsZTtcblxuICBpc0ZpbHRlckFwcGxpZWQgPSBmYWxzZTtcblxuICBnZXQgaXNDYXRlZ29yeURyb3Bkb3duT3BlbmVkKCkge1xuICAgIGlmICh0aGlzLnR5cGUgIT09ICdjYXRlZ29yeScpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50Q29tcExpc3Q/LmZpcnN0Py5pc0NhdGVnb3J5RHJvcGRvd25PcGVuZWQgfHwgZmFsc2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgZHQ6IFRhYmxlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyB0dDogVHJlZVRhYmxlXG4gICkge1xuICAgIHRoaXMuX3RhYmxlSW5zdGFuY2UgPSBkdCB8fCB0dDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm1hdGNoTW9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWx0ZXJNYXRjaE1vZGVPcHRpb25zW3RoaXMudHlwZV0gPSB0aGlzLm1hdGNoTW9kZXM7XG4gICAgfVxuICAgIHRoaXMuX3RhYmxlSW5zdGFuY2U/Lm9uRmlsdGVyPy5zdWJzY3JpYmUoKHZhbHVlKSA9PlxuICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyQXBwbGllZCh2YWx1ZSlcbiAgICApO1xuICAgIGlmICghdGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF0pIHtcbiAgICAgIHRoaXMuX2luaXRGaWVsZEZpbHRlckNvbnN0cmFpbnQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhDb25zdHJhaW50cyA+IDEgJiYgdGhpcy50eXBlICE9PSAnY2F0ZWdvcnknKSB7XG4gICAgICB0aGlzLnNob3dBcHBseUJ1dHRvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnNob3dBcHBseUJ1dHRvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudE1hdGNoTW9kZXMgPSB0aGlzLmZpbHRlck1hdGNoTW9kZU9wdGlvbnNbdGhpcy50eXBlXT8ubWFwKFxuICAgICAgKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGxhYmVsOiB0aGlzLm1hdGNoTW9kZUxhYmVsc1trZXldLCB2YWx1ZToga2V5IH07XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUZpbHRlckFwcGxpZWQodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkRmlsdGVyID0gdmFsdWUuZmlsdGVyc1s8c3RyaW5nPnRoaXMuZmllbGRdO1xuICAgIGlmIChmaWVsZEZpbHRlcikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRGaWx0ZXIpKSB7XG4gICAgICAgIHRoaXMuaXNGaWx0ZXJBcHBsaWVkID0gKDxGaWx0ZXJNZXRhZGF0YVtdPmZpZWxkRmlsdGVyKS5zb21lKFxuICAgICAgICAgIChtZXRhKSA9PiAhdGhpcy5fdGFibGVJbnN0YW5jZS5pc0ZpbHRlckJsYW5rKG1ldGEudmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzRmlsdGVyQXBwbGllZCA9ICF0aGlzLl90YWJsZUluc3RhbmNlLmlzRmlsdGVyQmxhbmsoXG4gICAgICAgICAgZmllbGRGaWx0ZXIudmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0ZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pbml0RmllbGRGaWx0ZXJDb25zdHJhaW50KCkge1xuICAgIGNvbnN0IGRlZmF1bHRNYXRjaE1vZGUgPSB0aGlzLmdldERlZmF1bHRNYXRjaE1vZGUoKTtcbiAgICBpZiAodGhpcy5fdGFibGVJbnN0YW5jZSBpbnN0YW5jZW9mIFRhYmxlKSB7XG4gICAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIG1hdGNoTW9kZTogZGVmYXVsdE1hdGNoTW9kZSxcbiAgICAgICAgICBvcGVyYXRvcjogdGhpcy5vcGVyYXRvclxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXSA9IHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIG1hdGNoTW9kZTogZGVmYXVsdE1hdGNoTW9kZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBvbkNsb3NlQ2xpY2soKSB7XG4gICAgdGhpcy5oaWRlKCk7XG4gIH1cblxuICBvbk1lbnVNYXRjaE1vZGVDaGFuZ2UodmFsdWU6IGFueSwgZmlsdGVyTWV0YTogRmlsdGVyTWV0YWRhdGEpIHtcbiAgICBmaWx0ZXJNZXRhLm1hdGNoTW9kZSA9IHZhbHVlO1xuXG4gICAgaWYgKCF0aGlzLnNob3dBcHBseUJ1dHRvbikge1xuICAgICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29uc3RyYWludCgpIHtcbiAgICAoPEZpbHRlck1ldGFkYXRhW10+dGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF0pLnB1c2goe1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBtYXRjaE1vZGU6IHRoaXMuZ2V0RGVmYXVsdE1hdGNoTW9kZSgpLFxuICAgICAgb3BlcmF0b3I6IHRoaXMuZ2V0RGVmYXVsdE9wZXJhdG9yKClcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUNvbnN0cmFpbnQoZmlsdGVyTWV0YTogRmlsdGVyTWV0YWRhdGEpIHtcbiAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXSA9ICg8RmlsdGVyTWV0YWRhdGFbXT4oXG4gICAgICB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXVxuICAgICkpLmZpbHRlcigobWV0YSkgPT4gbWV0YSAhPT0gZmlsdGVyTWV0YSk7XG4gICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gIH1cblxuICBvbk9wZXJhdG9yQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAoPEZpbHRlck1ldGFkYXRhW10+dGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF0pLmZvckVhY2goXG4gICAgICAoZmlsdGVyTWV0YSkgPT4ge1xuICAgICAgICBmaWx0ZXJNZXRhLm9wZXJhdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLnNob3dBcHBseUJ1dHRvbikge1xuICAgICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdE1hdGNoTW9kZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGdldE1hdGNoTW9kZSA9ICh2YWw6IENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZSkgPT4ge1xuICAgICAgaWYgKHRoaXMudHlwZSBpbiB0aGlzLmZpbHRlck1hdGNoTW9kZU9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTWF0Y2hNb2RlT3B0aW9uc1t0aGlzLnR5cGVdLmluY2x1ZGVzKHZhbClcbiAgICAgICAgICA/IHZhbFxuICAgICAgICAgIDogdGhpcy5maWx0ZXJNYXRjaE1vZGVPcHRpb25zW3RoaXMudHlwZV1bMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBnZXRNYXRjaE1vZGUoQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRIKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBnZXRNYXRjaE1vZGUoQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUyk7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIGdldE1hdGNoTW9kZShDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuREFURV9JUyk7XG4gICAgICBjYXNlICdjYXRlZ29yeSc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpbmdsZVNlbGVjdGlvblxuICAgICAgICAgID8gQ3BzQ29sdW1uRmlsdGVyTWF0Y2hNb2RlLklTXG4gICAgICAgICAgOiBDcHNDb2x1bW5GaWx0ZXJNYXRjaE1vZGUuSU47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZ2V0TWF0Y2hNb2RlKENwc0NvbHVtbkZpbHRlck1hdGNoTW9kZS5DT05UQUlOUyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdE9wZXJhdG9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlSW5zdGFuY2UuZmlsdGVyc1xuICAgICAgPyAoPEZpbHRlck1ldGFkYXRhW10+KFxuICAgICAgICAgIHRoaXMuX3RhYmxlSW5zdGFuY2UuZmlsdGVyc1s8c3RyaW5nPig8c3RyaW5nPnRoaXMuZmllbGQpXVxuICAgICAgICApKVswXS5vcGVyYXRvclxuICAgICAgOiB0aGlzLm9wZXJhdG9yO1xuICB9XG5cbiAgZ2V0IGZpZWxkQ29uc3RyYWludHMoKTogRmlsdGVyTWV0YWRhdGFbXSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIGlmICh0aGlzLl90YWJsZUluc3RhbmNlIGluc3RhbmNlb2YgVGFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNcbiAgICAgICAgPyA8RmlsdGVyTWV0YWRhdGFbXT50aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNbPHN0cmluZz50aGlzLmZpZWxkXVxuICAgICAgICA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl90YWJsZUluc3RhbmNlLmZpbHRlcnNcbiAgICAgICAgPyA8RmlsdGVyTWV0YWRhdGFbXT5bdGhpcy5fdGFibGVJbnN0YW5jZS5maWx0ZXJzWzxzdHJpbmc+dGhpcy5maWVsZF1dXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd1JlbW92ZUljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRDb25zdHJhaW50cyA/IHRoaXMuZmllbGRDb25zdHJhaW50cy5sZW5ndGggPiAxIDogZmFsc2U7XG4gIH1cblxuICBnZXQgaXNTaG93T3BlcmF0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd09wZXJhdG9yICYmXG4gICAgICB0aGlzLm1heENvbnN0cmFpbnRzID4gMSAmJlxuICAgICAgIVsnYm9vbGVhbicsICdjYXRlZ29yeSddLmluY2x1ZGVzKHRoaXMudHlwZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzU2hvd0FkZENvbnN0cmFpbnQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICAhWydib29sZWFuJywgJ2NhdGVnb3J5J10uaW5jbHVkZXModGhpcy50eXBlKSAmJlxuICAgICAgdGhpcy5maWVsZENvbnN0cmFpbnRzICYmXG4gICAgICB0aGlzLmZpZWxkQ29uc3RyYWludHMubGVuZ3RoIDwgdGhpcy5tYXhDb25zdHJhaW50c1xuICAgICk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuY29sdW1uRmlsdGVyTWVudS5oaWRlKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9pbml0RmllbGRGaWx0ZXJDb25zdHJhaW50KCk7XG4gICAgdGhpcy5fdGFibGVJbnN0YW5jZS5fZmlsdGVyKCk7XG4gICAgaWYgKHRoaXMuaGlkZU9uQ2xlYXIpIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXJWYWx1ZXMoKSB7XG4gICAgdGhpcy5faW5pdEZpZWxkRmlsdGVyQ29uc3RyYWludCgpO1xuICAgIHRoaXMuaXNGaWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcbiAgICB0aGlzLl90YWJsZUluc3RhbmNlLl9maWx0ZXIoKTtcbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxuXG4gIG9uTWVudVNob3duKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucGFyZW50RWxlbWVudDtcbiAgICBjb25zdCBjbGFzc05hbWUgPSAnY3BzLXRhYmxlLWNvbC1maWx0ZXItbWVudS1vcGVuJztcbiAgICBwYXJlbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG5cbiAgb25CZWZvcmVNZW51SGlkZGVuKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbHRlckFwcGxpZWQpIHRoaXMuX2luaXRGaWVsZEZpbHRlckNvbnN0cmFpbnQoKTtcbiAgfVxuXG4gIG9uTWVudUhpZGRlbigpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gJ2Nwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtb3Blbic7XG4gICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljayhldmVudDogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTb3J0SWNvbkNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1bnNvcnRlZFVwID1cbiAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucGFyZW50RWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5zb3J0LXVuc29ydGVkLWFycm93LXVwJ1xuICAgICAgKTtcbiAgICBpZiAodW5zb3J0ZWRVcCkge1xuICAgICAgdW5zb3J0ZWRVcC5zdHlsZS5ib3JkZXJCb3R0b21Db2xvciA9IGNvbG9yO1xuICAgIH1cbiAgICBjb25zdCB1bnNvcnRlZERvd24gPVxuICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5wYXJlbnRFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnNvcnQtdW5zb3J0ZWQtYXJyb3ctZG93bidcbiAgICAgICk7XG4gICAgaWYgKHVuc29ydGVkRG93bikge1xuICAgICAgdW5zb3J0ZWREb3duLnN0eWxlLmJvcmRlclRvcENvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpIG9uTW91c2VPdmVyKCkge1xuICAgIHRoaXMuX3VwZGF0ZVNvcnRJY29uQ29sb3IoJ3ZhcigtLWNwcy1jb2xvci1saW5lLWRhcmspJyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJykgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuX3VwZGF0ZVNvcnRJY29uQ29sb3IoJycpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fdGFibGVJbnN0YW5jZT8ub25GaWx0ZXI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlclwiPlxuICA8Y3BzLW1lbnVcbiAgICAjY29sdW1uRmlsdGVyTWVudVxuICAgIFt3aXRoQXJyb3ddPVwiZmFsc2VcIlxuICAgIGhpZGVUcmFuc2l0aW9uT3B0aW9ucz1cIjBzIGxpbmVhclwiXG4gICAgW3BlcnNpc3RlbnRdPVwicGVyc2lzdGVudCB8fCAoc2hvd0FwcGx5QnV0dG9uICYmIGlzQ2F0ZWdvcnlEcm9wZG93bk9wZW5lZClcIlxuICAgIChtZW51U2hvd24pPVwib25NZW51U2hvd24oKVwiXG4gICAgKG1lbnVIaWRkZW4pPVwib25NZW51SGlkZGVuKClcIlxuICAgIChiZWZvcmVNZW51SGlkZGVuKT1cIm9uQmVmb3JlTWVudUhpZGRlbigpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudC1oZWFkZXJcIlxuICAgICAgICAqbmdJZj1cInNob3dDbG9zZUJ1dHRvbiB8fCBoZWFkZXJUaXRsZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudC1oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICB7eyBoZWFkZXJUaXRsZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0Nsb3NlQnV0dG9uXCJcbiAgICAgICAgICBpY29uPVwiY2xvc2UteFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCI+PC9jcHMtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtY29udGVudC1vcGVyYXRvclwiXG4gICAgICAgICpuZ0lmPVwiaXNTaG93T3BlcmF0b3JcIj5cbiAgICAgICAgPGNwcy1zZWxlY3RcbiAgICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWVsZENvbnN0cmFpbnRzIHx8IGZpZWxkQ29uc3RyYWludHMubGVuZ3RoIDwgMlwiXG4gICAgICAgICAgW3JldHVybk9iamVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwib3BlcmF0b3JPcHRpb25zXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcGVyYXRvclwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlZCk9XCJvbk9wZXJhdG9yQ2hhbmdlKCRldmVudClcIj48L2Nwcy1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1tZW51LWNvbnRlbnQtY29uc3RyYWludHNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZENvbnN0cmFpbnQgb2YgZmllbGRDb25zdHJhaW50czsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1tZW51LWNvbnRlbnQtY29uc3RyYWludFwiPlxuICAgICAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cInNob3dNYXRjaE1vZGVzICYmIGN1cnJlbnRNYXRjaE1vZGVzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLWNvbC1maWx0ZXItbWF0Y2gtbW9kZS1zZWxlY3RcIlxuICAgICAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIlxuICAgICAgICAgICAgW3JldHVybk9iamVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJjdXJyZW50TWF0Y2hNb2Rlc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJmaWVsZENvbnN0cmFpbnQubWF0Y2hNb2RlXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwiXG4gICAgICAgICAgICAgIG9uTWVudU1hdGNoTW9kZUNoYW5nZSgkZXZlbnQsIGZpZWxkQ29uc3RyYWludClcbiAgICAgICAgICAgIFwiPjwvY3BzLXNlbGVjdD5cbiAgICAgICAgICA8dGFibGUtY29sdW1uLWZpbHRlci1jb25zdHJhaW50XG4gICAgICAgICAgICAjY29uc3RyYWludENvbXBvbmVudFxuICAgICAgICAgICAgW3R5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW2FzQnV0dG9uVG9nZ2xlXT1cImFzQnV0dG9uVG9nZ2xlXCJcbiAgICAgICAgICAgIFtzaW5nbGVTZWxlY3Rpb25dPVwic2luZ2xlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtjYXRlZ29yeU9wdGlvbnNdPVwiY2F0ZWdvcnlPcHRpb25zXCJcbiAgICAgICAgICAgIFtmaWx0ZXJDb25zdHJhaW50XT1cImZpZWxkQ29uc3RyYWludFwiXG4gICAgICAgICAgICBbaGFzQXBwbHlCdXR0b25dPVwic2hvd0FwcGx5QnV0dG9uXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiPlxuICAgICAgICAgIDwvdGFibGUtY29sdW1uLWZpbHRlci1jb25zdHJhaW50PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLWNvbC1maWx0ZXItcmVtb3ZlLXJ1bGUtYnRuXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1JlbW92ZUljb25cIj5cbiAgICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVDb25zdHJhaW50KGZpZWxkQ29uc3RyYWludClcIlxuICAgICAgICAgICAgICBsYWJlbD1cIlJlbW92ZSBjb25kaXRpb25cIj5cbiAgICAgICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1hZGQtcnVsZS1idG5cIlxuICAgICAgICAqbmdJZj1cImlzU2hvd0FkZENvbnN0cmFpbnRcIj5cbiAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICBsYWJlbD1cIkFkZCBjb25kaXRpb25cIlxuICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgY29sb3I9XCJzdXJwcmlzZVwiXG4gICAgICAgICAgaWNvbj1cImFkZFwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiYWRkQ29uc3RyYWludCgpXCI+XG4gICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1jb2wtZmlsdGVyLWJ1dHRvbmJhclwiPlxuICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJjbGVhckZpbHRlcigpXCJcbiAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBsYWJlbD1cIkNsZWFyXCI+PC9jcHMtYnV0dG9uPlxuICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0FwcGx5QnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJhcHBseUZpbHRlcigpXCJcbiAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIGxhYmVsPVwiQXBwbHlcIj48L2Nwcy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9jcHMtbWVudT5cbiAgPGNwcy1pY29uXG4gICAgW2ljb25dPVwiaXNGaWx0ZXJBcHBsaWVkID8gJ2ZpbHRlci1mdW5uZWwtZmlsbGVkJyA6ICdmaWx0ZXItZnVubmVsJ1wiXG4gICAgc2l6ZT1cIjEzXCJcbiAgICAoY2xpY2spPVwiY29sdW1uRmlsdGVyTWVudS50b2dnbGUoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJjcHMtdGFibGUtY29sLWZpbHRlci1tZW51LWJ1dHRvblwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2Nwcy10YWJsZS1jb2wtZmlsdGVyLW1lbnUtYnV0dG9uLWFjdGl2ZSc6IGlzRmlsdGVyQXBwbGllZFxuICAgIH1cIlxuICAgID4+XG4gIDwvY3BzLWljb24+XG48L2Rpdj5cbiJdfQ==