@fundamental-ngx/platform 0.51.2-rc.2 → 0.51.2-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
|
@@ -524,7 +524,7 @@ export class PlatformValueHelpDialogComponent extends VhdComponent {
|
|
|
524
524
|
provide: VhdComponent,
|
|
525
525
|
useExisting: PlatformValueHelpDialogComponent
|
|
526
526
|
}
|
|
527
|
-
], queries: [{ propertyName: "filters", predicate: VhdFilterComponent }, { propertyName: "columnDef", predicate: ValueHelpColumnDefDirective }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"header\">\n <ng-template [ngTemplateOutlet]=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-template>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [attr.dir]=\"_dir$()\">\n @if (!mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n @if (mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.selectFromList) {\n <ng-template [ngTemplateOutlet]=\"selectionContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.defineConditions) {\n <ng-template [ngTemplateOutlet]=\"defineConditionsContent\"></ng-template>\n }\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"footer\">\n @if (!isMobileAdvancedSearchActive) {\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectionBarLabel' | fdTranslate\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n @if (hasSelectedAndConditions) {\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n } @else {\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n }\n </h5>\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer>\n <fd-token\n *ngFor=\"\n let item of selectedItems;\n trackBy: _trackBySelectedFn;\n index as selectedIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n >{{\n !!tokenizerFn ? (item | displayFnPipe: tokenizerFn) : item[tokenViewField]\n }}\n </fd-token>\n <fd-token\n *ngFor=\"\n let item of validConditions;\n trackBy: _trackByConditionFn;\n index as conditionIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-template>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n }\n <div class=\"fdp-value-help-dialog__actions-row\">\n @if (mobile && isOpenAdvanced) {\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"searchAdvanced()\"\n ></button>\n }\n @if (selectedTab !== _tabTypes.advancedSearch) {\n <button\n fd-button\n data-succes\n [disabled]=\"loadingState\"\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"success()\"\n ></button>\n }\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n<ng-template #advancedSearchContent>\n @if (isSelectionTab) {\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n @if (!mobile || (mobile && !isOpenAdvanced)) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchPlaceholder' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n @if (_hasAdvanced) {\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n @if (_hasAdvanced) {\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n }\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n }\n </div>\n </fd-layout-grid>\n }\n @if (isOpenAdvanced && _hasAdvanced) {\n <div [id]=\"'advanced-search-content-' + id\" class=\"fdp-value-help-dialog__advanced-filters\">\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n @if (_firstLoadingDone) {\n <fd-layout-grid\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n @for (\n filter of _displayedFilters | slice: 0 : shownFilterCount + 1;\n track _trackByFilterFn($index, filter)\n ) {\n @if (filter.advanced) {\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label\n class=\"fd-form-group__header\"\n fd-form-label\n [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n @if (filter.filterDef) {\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n } @else {\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n }\n </div>\n }\n }\n @if (filters.length > maxShownInitialFilters) {\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n }\n </div>\n </fd-layout-grid>\n } @else {\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n }\n </fd-busy-indicator>\n </div>\n }\n </form>\n }\n</ng-template>\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n @if (selectedTab === type && showSelectionTab && showDefineTab) {\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n }\n @if (selectedTab !== type) {\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n }\n</ng-template>\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n<ng-template #desktopDialogTitle>\n <ng-template [ngTemplateOutlet]=\"dialogTitleText\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"desktopTabs\"></ng-template>\n</ng-template>\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n @if (hasSelectedTab) {\n <ng-template [ngTemplateOutlet]=\"selectedTabHeader\"></ng-template>\n } @else {\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n }\n </div>\n <ng-template [ngTemplateOutlet]=\"mobileTabs\"></ng-template>\n</ng-template>\n<ng-template #desktopTabs>\n @if (showSelectionTab && showDefineTab) {\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\">\n @if (showSelectionTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n @if (showDefineTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n </nav>\n }\n</ng-template>\n<ng-template #mobileTabs>\n @if (!hasSelectedTab && showSelectionTab && showDefineTab) {\n <div>\n @if (showSelectionTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n @if (showDefineTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #selectedTabHeader>\n @switch (selectedTab) {\n @case (_tabTypes.selectFromList) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n @case (_tabTypes.advancedSearch) {\n <ng-template [ngTemplateOutlet]=\"advancedHeader\"></ng-template>\n }\n @case (_tabTypes.defineConditions) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n }\n</ng-template>\n<ng-template #conditionValue let-item=\"item\">\n @if (item.strategy !== 'empty' && item.strategy !== 'not_empty') {\n <span>\n {{ item | displayFnPipe: conditionDisplayFn : _displayedFilters }}\n </span>\n } @else {\n @if (item.strategy === 'not_empty') {\n !(<ng-template [ngTemplateOutlet]=\"emptyConditionText\"></ng-template>)\n } @else {\n <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}>\n }\n }\n</ng-template>\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"], dependencies: [{ kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ScrollbarDirective, selector: "[fdScrollbar], [fd-scrollbar]", inputs: ["noHorizontalScroll", "noVerticalScroll", "alwaysVisible"] }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "glyphFont", "moreTerm", "open", "showOverflowPopover"], outputs: ["moreClickedEvent"] }, { kind: "component", type: TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "directive", type: ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: TokenizerInputDirective, selector: "[fdTokenizerInput], [fd-tokenizer-input]", inputs: ["class"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "directive", type: LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "component", type: ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "component", type: SelectTabComponent, selector: "fdp-select-tab", inputs: ["selectTabTitleId", "selectTabCountId", "selected", "loading", "filters", "selection", "allowSelectAll", "uniqueKey", "pageSize", "defaultMobileHeaders", "displayedData"], outputs: ["select"] }, { kind: "component", type: DefineTabComponent, selector: "fdp-define-tab", inputs: ["titleId", "selectedId", "conditions", "strategyLabels"], outputs: ["includeChange", "excludeChange", "conditionChange"] }, { kind: "directive", type: ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "component", type: TabNavComponent, selector: "[fd-tab-nav]", inputs: ["class", "mode", "size"] }, { kind: "directive", type: TabItemDirective, selector: "[fd-tab-item]", inputs: ["class", "tabItemState", "header", "disabled", "fdTabItemClass"] }, { kind: "directive", type: TabLinkDirective, selector: "[fd-tab-link]", inputs: ["active", "disabled"], outputs: ["keyDown", "focused"] }, { kind: "directive", type: TabTagDirective, selector: "[fdTabTag], [fd-tab-tag]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "pipe", type: SlicePipe, name: "slice" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: DisplayFnPipe, name: "displayFnPipe" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
527
|
+
], queries: [{ propertyName: "filters", predicate: VhdFilterComponent }, { propertyName: "columnDef", predicate: ValueHelpColumnDefDirective }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"header\">\n <ng-template [ngTemplateOutlet]=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-template>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [attr.dir]=\"_dir$()\">\n @if (!mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n @if (mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.selectFromList) {\n <ng-template [ngTemplateOutlet]=\"selectionContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.defineConditions) {\n <ng-template [ngTemplateOutlet]=\"defineConditionsContent\"></ng-template>\n }\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"footer\">\n @if (!isMobileAdvancedSearchActive) {\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectedAndConditionLabel' | fdTranslate\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n @if (hasSelectedAndConditions) {\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n } @else {\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n }\n </h5>\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer>\n <fd-token\n *ngFor=\"\n let item of selectedItems;\n trackBy: _trackBySelectedFn;\n index as selectedIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n >{{\n !!tokenizerFn ? (item | displayFnPipe: tokenizerFn) : item[tokenViewField]\n }}\n </fd-token>\n <fd-token\n *ngFor=\"\n let item of validConditions;\n trackBy: _trackByConditionFn;\n index as conditionIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-template>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n }\n <div class=\"fdp-value-help-dialog__actions-row\">\n @if (mobile && isOpenAdvanced) {\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"searchAdvanced()\"\n ></button>\n }\n @if (selectedTab !== _tabTypes.advancedSearch) {\n <button\n fd-button\n data-succes\n [disabled]=\"loadingState\"\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"success()\"\n ></button>\n }\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n<ng-template #advancedSearchContent>\n @if (isSelectionTab) {\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n @if (!mobile || (mobile && !isOpenAdvanced)) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchPlaceholder' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n @if (_hasAdvanced) {\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n @if (_hasAdvanced) {\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n }\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n }\n </div>\n </fd-layout-grid>\n }\n @if (isOpenAdvanced && _hasAdvanced) {\n <div [id]=\"'advanced-search-content-' + id\" class=\"fdp-value-help-dialog__advanced-filters\">\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n @if (_firstLoadingDone) {\n <fd-layout-grid\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n @for (\n filter of _displayedFilters | slice: 0 : shownFilterCount + 1;\n track _trackByFilterFn($index, filter)\n ) {\n @if (filter.advanced) {\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label\n class=\"fd-form-group__header\"\n fd-form-label\n [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n @if (filter.filterDef) {\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n } @else {\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n }\n </div>\n }\n }\n @if (filters.length > maxShownInitialFilters) {\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n }\n </div>\n </fd-layout-grid>\n } @else {\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n }\n </fd-busy-indicator>\n </div>\n }\n </form>\n }\n</ng-template>\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n @if (selectedTab === type && showSelectionTab && showDefineTab) {\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n }\n @if (selectedTab !== type) {\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n }\n</ng-template>\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n<ng-template #desktopDialogTitle>\n <ng-template [ngTemplateOutlet]=\"dialogTitleText\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"desktopTabs\"></ng-template>\n</ng-template>\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n @if (hasSelectedTab) {\n <ng-template [ngTemplateOutlet]=\"selectedTabHeader\"></ng-template>\n } @else {\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n }\n </div>\n <ng-template [ngTemplateOutlet]=\"mobileTabs\"></ng-template>\n</ng-template>\n<ng-template #desktopTabs>\n @if (showSelectionTab && showDefineTab) {\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\">\n @if (showSelectionTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n @if (showDefineTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n </nav>\n }\n</ng-template>\n<ng-template #mobileTabs>\n @if (!hasSelectedTab && showSelectionTab && showDefineTab) {\n <div>\n @if (showSelectionTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n @if (showDefineTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #selectedTabHeader>\n @switch (selectedTab) {\n @case (_tabTypes.selectFromList) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n @case (_tabTypes.advancedSearch) {\n <ng-template [ngTemplateOutlet]=\"advancedHeader\"></ng-template>\n }\n @case (_tabTypes.defineConditions) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n }\n</ng-template>\n<ng-template #conditionValue let-item=\"item\">\n @if (item.strategy !== 'empty' && item.strategy !== 'not_empty') {\n <span>\n {{ item | displayFnPipe: conditionDisplayFn : _displayedFilters }}\n </span>\n } @else {\n @if (item.strategy === 'not_empty') {\n !(<ng-template [ngTemplateOutlet]=\"emptyConditionText\"></ng-template>)\n } @else {\n <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}>\n }\n }\n</ng-template>\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"], dependencies: [{ kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ScrollbarDirective, selector: "[fdScrollbar], [fd-scrollbar]", inputs: ["noHorizontalScroll", "noVerticalScroll", "alwaysVisible"] }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "glyphFont", "moreTerm", "open", "showOverflowPopover"], outputs: ["moreClickedEvent"] }, { kind: "component", type: TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "directive", type: ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: TokenizerInputDirective, selector: "[fdTokenizerInput], [fd-tokenizer-input]", inputs: ["class"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "directive", type: LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "component", type: ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "component", type: SelectTabComponent, selector: "fdp-select-tab", inputs: ["selectTabTitleId", "selectTabCountId", "selected", "loading", "filters", "selection", "allowSelectAll", "uniqueKey", "pageSize", "defaultMobileHeaders", "displayedData"], outputs: ["select"] }, { kind: "component", type: DefineTabComponent, selector: "fdp-define-tab", inputs: ["titleId", "selectedId", "conditions", "strategyLabels"], outputs: ["includeChange", "excludeChange", "conditionChange"] }, { kind: "directive", type: ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "component", type: TabNavComponent, selector: "[fd-tab-nav]", inputs: ["class", "mode", "size"] }, { kind: "directive", type: TabItemDirective, selector: "[fd-tab-item]", inputs: ["class", "tabItemState", "header", "disabled", "fdTabItemClass"] }, { kind: "directive", type: TabLinkDirective, selector: "[fd-tab-link]", inputs: ["active", "disabled"], outputs: ["keyDown", "focused"] }, { kind: "directive", type: TabTagDirective, selector: "[fdTabTag], [fd-tab-tag]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "pipe", type: SlicePipe, name: "slice" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: DisplayFnPipe, name: "displayFnPipe" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
528
528
|
}
|
|
529
529
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: PlatformValueHelpDialogComponent, decorators: [{
|
|
530
530
|
type: Component,
|
|
@@ -577,7 +577,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
577
577
|
FdTranslatePipe,
|
|
578
578
|
DisplayFnPipe,
|
|
579
579
|
NgForOf
|
|
580
|
-
], template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"header\">\n <ng-template [ngTemplateOutlet]=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-template>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [attr.dir]=\"_dir$()\">\n @if (!mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n @if (mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.selectFromList) {\n <ng-template [ngTemplateOutlet]=\"selectionContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.defineConditions) {\n <ng-template [ngTemplateOutlet]=\"defineConditionsContent\"></ng-template>\n }\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"footer\">\n @if (!isMobileAdvancedSearchActive) {\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectionBarLabel' | fdTranslate\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n @if (hasSelectedAndConditions) {\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n } @else {\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n }\n </h5>\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer>\n <fd-token\n *ngFor=\"\n let item of selectedItems;\n trackBy: _trackBySelectedFn;\n index as selectedIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n >{{\n !!tokenizerFn ? (item | displayFnPipe: tokenizerFn) : item[tokenViewField]\n }}\n </fd-token>\n <fd-token\n *ngFor=\"\n let item of validConditions;\n trackBy: _trackByConditionFn;\n index as conditionIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-template>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n }\n <div class=\"fdp-value-help-dialog__actions-row\">\n @if (mobile && isOpenAdvanced) {\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"searchAdvanced()\"\n ></button>\n }\n @if (selectedTab !== _tabTypes.advancedSearch) {\n <button\n fd-button\n data-succes\n [disabled]=\"loadingState\"\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"success()\"\n ></button>\n }\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n<ng-template #advancedSearchContent>\n @if (isSelectionTab) {\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n @if (!mobile || (mobile && !isOpenAdvanced)) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchPlaceholder' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n @if (_hasAdvanced) {\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n @if (_hasAdvanced) {\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n }\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n }\n </div>\n </fd-layout-grid>\n }\n @if (isOpenAdvanced && _hasAdvanced) {\n <div [id]=\"'advanced-search-content-' + id\" class=\"fdp-value-help-dialog__advanced-filters\">\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n @if (_firstLoadingDone) {\n <fd-layout-grid\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n @for (\n filter of _displayedFilters | slice: 0 : shownFilterCount + 1;\n track _trackByFilterFn($index, filter)\n ) {\n @if (filter.advanced) {\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label\n class=\"fd-form-group__header\"\n fd-form-label\n [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n @if (filter.filterDef) {\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n } @else {\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n }\n </div>\n }\n }\n @if (filters.length > maxShownInitialFilters) {\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n }\n </div>\n </fd-layout-grid>\n } @else {\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n }\n </fd-busy-indicator>\n </div>\n }\n </form>\n }\n</ng-template>\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n @if (selectedTab === type && showSelectionTab && showDefineTab) {\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n }\n @if (selectedTab !== type) {\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n }\n</ng-template>\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n<ng-template #desktopDialogTitle>\n <ng-template [ngTemplateOutlet]=\"dialogTitleText\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"desktopTabs\"></ng-template>\n</ng-template>\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n @if (hasSelectedTab) {\n <ng-template [ngTemplateOutlet]=\"selectedTabHeader\"></ng-template>\n } @else {\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n }\n </div>\n <ng-template [ngTemplateOutlet]=\"mobileTabs\"></ng-template>\n</ng-template>\n<ng-template #desktopTabs>\n @if (showSelectionTab && showDefineTab) {\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\">\n @if (showSelectionTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n @if (showDefineTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n </nav>\n }\n</ng-template>\n<ng-template #mobileTabs>\n @if (!hasSelectedTab && showSelectionTab && showDefineTab) {\n <div>\n @if (showSelectionTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n @if (showDefineTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #selectedTabHeader>\n @switch (selectedTab) {\n @case (_tabTypes.selectFromList) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n @case (_tabTypes.advancedSearch) {\n <ng-template [ngTemplateOutlet]=\"advancedHeader\"></ng-template>\n }\n @case (_tabTypes.defineConditions) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n }\n</ng-template>\n<ng-template #conditionValue let-item=\"item\">\n @if (item.strategy !== 'empty' && item.strategy !== 'not_empty') {\n <span>\n {{ item | displayFnPipe: conditionDisplayFn : _displayedFilters }}\n </span>\n } @else {\n @if (item.strategy === 'not_empty') {\n !(<ng-template [ngTemplateOutlet]=\"emptyConditionText\"></ng-template>)\n } @else {\n <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}>\n }\n }\n</ng-template>\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"] }]
|
|
580
|
+
], template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"header\">\n <ng-template [ngTemplateOutlet]=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-template>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [attr.dir]=\"_dir$()\">\n @if (!mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n @if (mobile) {\n <ng-template [ngTemplateOutlet]=\"advancedSearchContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.selectFromList) {\n <ng-template [ngTemplateOutlet]=\"selectionContent\"></ng-template>\n }\n @if (selectedTab === _tabTypes.defineConditions) {\n <ng-template [ngTemplateOutlet]=\"defineConditionsContent\"></ng-template>\n }\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [attr.dir]=\"_dir$()\">\n <ng-template fdkTemplate=\"footer\">\n @if (!isMobileAdvancedSearchActive) {\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectedAndConditionLabel' | fdTranslate\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n @if (hasSelectedAndConditions) {\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n } @else {\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n }\n </h5>\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer>\n <fd-token\n *ngFor=\"\n let item of selectedItems;\n trackBy: _trackBySelectedFn;\n index as selectedIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n >{{\n !!tokenizerFn ? (item | displayFnPipe: tokenizerFn) : item[tokenViewField]\n }}\n </fd-token>\n <fd-token\n *ngFor=\"\n let item of validConditions;\n trackBy: _trackByConditionFn;\n index as conditionIndex\n \"\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-template>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n }\n <div class=\"fdp-value-help-dialog__actions-row\">\n @if (mobile && isOpenAdvanced) {\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"searchAdvanced()\"\n ></button>\n }\n @if (selectedTab !== _tabTypes.advancedSearch) {\n <button\n fd-button\n data-succes\n [disabled]=\"loadingState\"\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n (click)=\"success()\"\n ></button>\n }\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n<ng-template #advancedSearchContent>\n @if (isSelectionTab) {\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n @if (!mobile || (mobile && !isOpenAdvanced)) {\n <fd-layout-grid>\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchPlaceholder' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n @if (_hasAdvanced) {\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n @if (_hasAdvanced) {\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n }\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n }\n </div>\n </fd-layout-grid>\n }\n @if (isOpenAdvanced && _hasAdvanced) {\n <div [id]=\"'advanced-search-content-' + id\" class=\"fdp-value-help-dialog__advanced-filters\">\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n @if (_firstLoadingDone) {\n <fd-layout-grid\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n @for (\n filter of _displayedFilters | slice: 0 : shownFilterCount + 1;\n track _trackByFilterFn($index, filter)\n ) {\n @if (filter.advanced) {\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label\n class=\"fd-form-group__header\"\n fd-form-label\n [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n @if (filter.filterDef) {\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n } @else {\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n }\n </div>\n }\n }\n @if (filters.length > maxShownInitialFilters) {\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n }\n </div>\n </fd-layout-grid>\n } @else {\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n }\n </fd-busy-indicator>\n </div>\n }\n </form>\n }\n</ng-template>\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n @if (selectedTab === type && showSelectionTab && showDefineTab) {\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n }\n @if (selectedTab !== type) {\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n }\n</ng-template>\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n<ng-template #desktopDialogTitle>\n <ng-template [ngTemplateOutlet]=\"dialogTitleText\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"desktopTabs\"></ng-template>\n</ng-template>\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n @if (hasSelectedTab) {\n <ng-template [ngTemplateOutlet]=\"selectedTabHeader\"></ng-template>\n } @else {\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n }\n </div>\n <ng-template [ngTemplateOutlet]=\"mobileTabs\"></ng-template>\n</ng-template>\n<ng-template #desktopTabs>\n @if (showSelectionTab && showDefineTab) {\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\">\n @if (showSelectionTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n @if (showDefineTab) {\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n }\n </nav>\n }\n</ng-template>\n<ng-template #mobileTabs>\n @if (!hasSelectedTab && showSelectionTab && showDefineTab) {\n <div>\n @if (showSelectionTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n @if (showDefineTab) {\n <div fd-bar [inPage]=\"true\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate: { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #selectedTabHeader>\n @switch (selectedTab) {\n @case (_tabTypes.selectFromList) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n @case (_tabTypes.advancedSearch) {\n <ng-template [ngTemplateOutlet]=\"advancedHeader\"></ng-template>\n }\n @case (_tabTypes.defineConditions) {\n <ng-template\n [ngTemplateOutlet]=\"tabLink\"\n [ngTemplateOutletContext]=\"{\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\"\n ></ng-template>\n }\n }\n</ng-template>\n<ng-template #conditionValue let-item=\"item\">\n @if (item.strategy !== 'empty' && item.strategy !== 'not_empty') {\n <span>\n {{ item | displayFnPipe: conditionDisplayFn : _displayedFilters }}\n </span>\n } @else {\n @if (item.strategy === 'not_empty') {\n !(<ng-template [ngTemplateOutlet]=\"emptyConditionText\"></ng-template>)\n } @else {\n <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}>\n }\n }\n</ng-template>\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"] }]
|
|
581
581
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DialogService }, { type: i2.RtlService, decorators: [{
|
|
582
582
|
type: Optional
|
|
583
583
|
}] }], propDecorators: { id: [{
|
|
@@ -642,4 +642,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
642
642
|
type: ViewChild,
|
|
643
643
|
args: ['container', { read: TemplateRef }]
|
|
644
644
|
}] } });
|
|
645
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG1CQUFt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S0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBS0YsVUFBVTtzQkFEYixLQUFLO2dCQVlOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQU1OLGNBQWM7c0JBRGIsS0FBSztnQkFNTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQU9OLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFxQk4sV0FBVztzQkFEVixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkFJUCxPQUFPO3NCQUROLGVBQWU7dUJBQUMsa0JBQWtCO2dCQUtuQyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsMkJBQTJCO2dCQUs1QyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBjb21wdXRlZCxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZpbHRlciwgaXNPYnNlcnZhYmxlLCBvZiwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBOZ0Zvck9mLCBOZ1RlbXBsYXRlT3V0bGV0LCBTbGljZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEaXNwbGF5Rm5QaXBlLCBSdGxTZXJ2aWNlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQmFyQ29tcG9uZW50LFxuICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgQmFyTGVmdERpcmVjdGl2ZSxcbiAgICBCYXJSaWdodERpcmVjdGl2ZSxcbiAgICBCdXR0b25CYXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICBEaWFsb2dDb25maWcsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICBEaWFsb2dSZWYsXG4gICAgRGlhbG9nU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50LCBGb3JtTGFiZWxDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBMYXlvdXRHcmlkQ29sRGlyZWN0aXZlLCBMYXlvdXRHcmlkQ29tcG9uZW50LCBMYXlvdXRHcmlkUm93RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xheW91dC1ncmlkJztcbmltcG9ydCB7IExpc3RJY29uRGlyZWN0aXZlLCBMaXN0TGlua0RpcmVjdGl2ZSwgTGlzdFRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Njcm9sbGJhcic7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQgeyBUYWJJdGVtRGlyZWN0aXZlLCBUYWJMaW5rRGlyZWN0aXZlLCBUYWJOYXZDb21wb25lbnQsIFRhYlRhZ0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90YWJzJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50LCBUb2tlbml6ZXJDb21wb25lbnQsIFRva2VuaXplcklucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQsIFRvb2xiYXJJdGVtRGlyZWN0aXZlLCBUb29sYmFyU3BhY2VyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rvb2xiYXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlYXJjaEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IERlZmluZVRhYkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVmaW5lLXRhYi9kZWZpbmUtdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RUYWJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NlbGVjdC10YWIvc2VsZWN0LXRhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmhkRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy92YWx1ZS1oZWxwLWRpYWxvZy1maWx0ZXIvdmFsdWUtaGVscC1kaWFsb2ctZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuIH0gZnJvbSAnLi4vY29uc3RhbnMvY29uZGl0aW9uLWRpc3BsYXkuZnVuY3Rpb24nO1xuaW1wb3J0IHsgVmFsdWVIZWxwQ29sdW1uRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy92YWx1ZS1oZWxwLWNvbHVtbi1kZWYuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgQXJyYXlWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlLFxuICAgIEJhc2VFbnRpdHksXG4gICAgT2JzZXJ2YWJsZVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2UsXG4gICAgVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZSxcbiAgICBWZGhUYWJsZVNlbGVjdGlvbixcbiAgICBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3ksXG4gICAgVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LFxuICAgIFZoZEZpbHRlcixcbiAgICBWaGRUYWIsXG4gICAgVmhkVmFsdWUsXG4gICAgVmhkVmFsdWVDaGFuZ2VFdmVudFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgVmhkQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWxzL3ZoZC1jb21wb25lbnQubW9kZWwnO1xuXG5sZXQgdmhkSGVhZGVyVW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgdHlwZSBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+ID1cbiAgICB8IFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD5cbiAgICB8IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPlxuICAgIHwgT2JzZXJ2YWJsZVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD47XG5cbmxldCB2aGlVbmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXZhbHVlLWhlbHAtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVmhkQ29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFBsYXRmb3JtVmFsdWVIZWxwRGlhbG9nQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIFNjcm9sbGJhckRpcmVjdGl2ZSxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVG9rZW5pemVyQ29tcG9uZW50LFxuICAgICAgICBUb2tlbkNvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgICAgICBUb2tlbml6ZXJJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTGF5b3V0R3JpZENvbXBvbmVudCxcbiAgICAgICAgTGF5b3V0R3JpZFJvd0RpcmVjdGl2ZSxcbiAgICAgICAgTGF5b3V0R3JpZENvbERpcmVjdGl2ZSxcbiAgICAgICAgU2VhcmNoRmllbGRDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJTcGFjZXJEaXJlY3RpdmUsXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JDb21wb25lbnQsXG4gICAgICAgIEZvcm1MYWJlbENvbXBvbmVudCxcbiAgICAgICAgU2tlbGV0b25Db21wb25lbnQsXG4gICAgICAgIFNlbGVjdFRhYkNvbXBvbmVudCxcbiAgICAgICAgRGVmaW5lVGFiQ29tcG9uZW50LFxuICAgICAgICBMaXN0TGlua0RpcmVjdGl2ZSxcbiAgICAgICAgTGlzdFRpdGxlRGlyZWN0aXZlLFxuICAgICAgICBMaXN0SWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgVGFiTmF2Q29tcG9uZW50LFxuICAgICAgICBUYWJJdGVtRGlyZWN0aXZlLFxuICAgICAgICBUYWJMaW5rRGlyZWN0aXZlLFxuICAgICAgICBUYWJUYWdEaXJlY3RpdmUsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyTGVmdERpcmVjdGl2ZSxcbiAgICAgICAgQmFyRWxlbWVudERpcmVjdGl2ZSxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkJhckNvbXBvbmVudCxcbiAgICAgICAgU2xpY2VQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIERpc3BsYXlGblBpcGUsXG4gICAgICAgIE5nRm9yT2ZcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtVmFsdWVIZWxwRGlhbG9nQ29tcG9uZW50PFQgPSBhbnk+IGV4dGVuZHMgVmhkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBJZCBvZiB0aGUgcG9wb3ZlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICdmZHAtdmhkLScgKyB2aGlVbmlxdWVJZCsrO1xuXG4gICAgLyoqIEluaXRpYWwgc3RhdGUgb2YgVmFsdWUgaGVscCBkaWFsb2cgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlOiBWaGRWYWx1ZTxUPiA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFtdLFxuICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgIH07XG5cbiAgICAvKiogRGlhbG9nIHRpdGxlICovXG4gICAgQElucHV0KClcbiAgICBkaWFsb2dUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFNlbGVjdCBmcm9tIGxpc3QgdGFiIGFjdGl2YXRpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIGluaXRpYWxUYWIgPSBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG5cbiAgICAvKiogVmlzaWJsZSB0YWJzICovXG4gICAgQElucHV0KClcbiAgICB0YWJzOiAnYm90aCcgfCAnc2VsZWN0JyB8ICdkZWZpbmUnID0gJ2JvdGgnO1xuXG4gICAgLyoqIEluaXRpYWwgZXhwYW5kIHN0YXRlIGZvciBhZHZhbmNlZCBzZWFyY2ggcGFuZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbHVlOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy50b0RhdGFTdHJlYW0odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBEaWFsb2cncyBjdXN0b20gY29uZmlnICovXG4gICAgQElucHV0KClcbiAgICBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyA9IHt9O1xuXG4gICAgLyoqIFVuaXF1ZSBrZXkgZnJvbSB0aGUgc291cmNlIGZpZWxkIG5hbWVzLiBSZXF1aXJlZCBmaWVsZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVuaXF1ZUtleTogc3RyaW5nO1xuXG4gICAgLyoqIElkIGF0dHJpYnV0ZSBmb3IgZGlhbG9nIHRpdGxlICovXG4gICAgQElucHV0KClcbiAgICBoZWFkZXJJZCA9IGBmZHAtdmhkLWhlYWRlci1pZC0ke3ZoZEhlYWRlclVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBGaWVsZCBuYW1lIGZvciBkZWZhdWx0IHJlbmRlciBmcm9tIGRhdGEuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5pemVyRm4gaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5WaWV3RmllbGQ6IHN0cmluZztcblxuICAgIC8qKiBUb2tlbml6ZXIgZnVuY3Rpb24gZm9yIGN1c3RvbSB0b2tlbiByZW5kZXIsIGl0IGhhcyBoaWdoZXIgcHJpbyB0aGF0IGB0b2tlblZpZXdGaWVsZGAuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5WaWV3RmllbGQgaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5pemVyRm46IChpdGVtOiBUKSA9PiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIHZpZXcgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIEl0IHNob3VsZCBiZSBhYmxlIGlmIHlvdSB1c2UgbXVsdGlwbGUgc2VsZWN0aW9uICovXG4gICAgQElucHV0KClcbiAgICBmb3JtYXRUb2tlbjogKHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50PFQ+KSA9PiB2b2lkO1xuXG4gICAgLyoqIFRva2VuaXplciBmdW5jdGlvbiBmb3IgY29uZGl0aW9uJ3MgdG9rZW4gcmVuZGVyICovXG4gICAgQElucHV0KClcbiAgICBjb25kaXRpb25EaXNwbGF5Rm4gPSBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuO1xuXG4gICAgLyoqIFZhbGlkYXRvciBmdW5jdGlvbi4gQ2FsbGVkIHdoZW4gdXNlciBzdWJtaXRzIFZIRCBkaWFsb2cuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlblZhbGlkYXRvcjogKCh2YWx1ZTogVmhkVmFsdWVDaGFuZ2VFdmVudCkgPT4gT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIFNlbGVjdGlvbiBtb2RlIGZvciBzZWFyY2ggdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFNlbGVjdGlvbjogVmRoVGFibGVTZWxlY3Rpb24gPSAnbXVsdGknO1xuXG4gICAgLyoqIEl0ZW1zIHBlciBwYWdlIGZvciBwYWdpbmF0aW9uIGJlbG93IHNlYXJjaCB0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVGFibGVQYWdlU2l6ZSA9IDIwO1xuXG4gICAgLyoqIENvdW50IG9mIGRlZmF1bHQgbW9iaWxlIGhlYWRlciBmcm9tIHNlYXJjaCB0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVGFibGVNb2JpbGVIZWFkZXJzID0gMjtcblxuICAgIC8qKiBNYXggc2hvd24gaW5pdGlhbCBmaWx0ZXJzIG9uIG9wZW4uIERlc2t0b3Agb25seSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4U2hvd25Jbml0aWFsRmlsdGVycyA9IDQ7XG5cbiAgICAvKiogTG9hZGluZyBzdGF0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IHVzZXJzIHRvIHNlbGVjdCBhbGwgdGFibGUgZW50cmllcyB3aXRoIG9uZSBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93U2VsZWN0QWxsID0gdHJ1ZTtcblxuICAgIC8qKiBDdXN0b20gc3RyYXRlZ2llcyBsYWJlbHNcbiAgICAgKiBBbGxvd2VkIGtleXM6IGNvbnRhaW5zLCBlcXVhbFRvLCBiZXR3ZWVuLCBzdGFydHNXaXRoLCBlbmRzV2l0aCwgbGVzc1RoYW4sIGxlc3NUaGFuRXF1YWwsIGdyZWF0ZXJUaGFuLCBncmVhdGVyVGhhbkVxdWFsLCBlbXB0eVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lU3RyYXRlZ3lMYWJlbHM6IHtcbiAgICAgICAgW2tleSBpbiBrZXlvZiAodHlwZW9mIFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSB8IHR5cGVvZiBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kpXT86IHN0cmluZztcbiAgICB9ID0ge1xuICAgICAgICBjb250YWluczogJ2NvbnRhaW5zJyxcbiAgICAgICAgZXF1YWxUbzogJ2VxdWFsIHRvJyxcbiAgICAgICAgYmV0d2VlbjogJ2JldHdlZW4nLFxuICAgICAgICBzdGFydHNXaXRoOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICBlbmRzV2l0aDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIGxlc3NUaGFuOiAnbGVzcyB0aGFuJyxcbiAgICAgICAgbGVzc1RoYW5FcXVhbDogJ2xlc3MgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGdyZWF0ZXJUaGFuOiAnZ3JlYXRlciB0aGFuJyxcbiAgICAgICAgZ3JlYXRlclRoYW5FcXVhbDogJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGVtcHR5OiAnZW1wdHknLFxuICAgICAgICBub3RfZXF1YWxUbzogJ25vdCBlcXVhbCB0bycsXG4gICAgICAgIG5vdF9lbXB0eTogJ25vdCBlbXB0eSdcbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyBvdXRwdXRzICovXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBmaWx0ZXJzL3Rva2VucyB3ZXJlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFZoZFZhbHVlQ2hhbmdlRXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBGaXRsZXJzIGZvciBzZWFyY2ggdGFibGUgYW5kIGRlZmluY2UgY29uZGl0aW9ucyAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVmhkRmlsdGVyQ29tcG9uZW50KVxuICAgIGZpbHRlcnM6IFF1ZXJ5TGlzdDxWaGRGaWx0ZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFZhbHVlSGVscENvbHVtbkRlZkRpcmVjdGl2ZSlcbiAgICBjb2x1bW5EZWY6IFF1ZXJ5TGlzdDxWYWx1ZUhlbHBDb2x1bW5EZWZEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gSW50ZXJuYWwgY29udGFpbmVyIGZvciBkaWFsb2cgKi9cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgZGlhbG9nQ29udGFpbmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhY3RpdmVEaWFsb2c/OiBEaWFsb2dSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90YWJUeXBlcyA9IFZoZFRhYjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc0FkdmFuY2VkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXllZEZpbHRlcnM6IFZoZEZpbHRlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5ZWREYXRhOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21haW5TZWFyY2ggPSAnJztcblxuICAgIC8qKiBoYW5kbGVzIHJ0bCBzZXJ2aWNlXG4gICAgICogQGhpZGRlbiAqL1xuICAgIF9kaXIkID0gY29tcHV0ZWQ8RGlyZWN0aW9uPigoKSA9PiAodGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKCkgPyAncnRsJyA6ICdsdHInKSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkVGFiOiBWaGRUYWIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2hvd25GaWx0ZXJDb3VudCA9IEluZmluaXR5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbG9hZGluZ1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nID8/IHRoaXMuX2ludGVybmFsTG9hZGluZ1N0YXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpcnN0IGxvYWRpbmcgd2hlbiBza2VsZXRvbnMgYmUgc2hvd24gYW5kIHN1YnNlcXVlbnQgbG9hZGluZ3Mgd2hlbiBidXN5IGluZGljYXRvciBiZSBzaG93blxuICAgICAqL1xuICAgIF9maXJzdExvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3llZCA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEBoaWRkZW4gZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiBQcmV2aW91cyBzdGF0ZSAqL1xuICAgIHByaXZhdGUgX3ByZXZTdGF0ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuICAgIC8qKiBAaGlkZGVuIEN1cnJlbnQgZGF0YSBmb3IgbG9jYWwgbWFudXB1bGF0aW9uICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFZhbHVlOiBWaGRWYWx1ZTxUPiA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFtdLFxuICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ludGVybmFsTG9hZGluZ1N0YXRlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvKiogRGVmYXVsdCBkaXNwbGF5IGZ1bmN0aW9uIGZvciBkZWZpbmUgY29uZGl0aW9ucyAqL1xuICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uRGlzcGxheUZuIHx8IHR5cGVvZiB0aGlzLmNvbmRpdGlvbkRpc3BsYXlGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25EaXNwbGF5Rm4gPSBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNNb2JpbGVBZHZhbmNlZFNlYXJjaEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaGFzU2VsZWN0ZWRUYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFiICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZFRhYiBpbiBWaGRUYWI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2hvd1NlbGVjdGlvblRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFicyAhPT0gJ2RlZmluZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2hvd0RlZmluZVRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFicyAhPT0gJ3NlbGVjdCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNTZWxlY3Rpb25UYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFiID09PSBWaGRUYWIuc2VsZWN0RnJvbUxpc3QgfHwgdGhpcy5zZWxlY3RlZFRhYiA9PT0gVmhkVGFiLmFkdmFuY2VkU2VhcmNoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNlbGVjdGVkSXRlbXMoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjb25kaXRpb25JdGVtcygpOiBCYXNlRW50aXR5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgdmFsaWRDb25kaXRpb25zKCk6IEJhc2VFbnRpdHlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRWYWxpZENvbmRpdGlvbih0aGlzLmNvbmRpdGlvbkl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBoYXNTZWxlY3RlZEFuZENvbmRpdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggKyB0aGlzLnZhbGlkQ29uZGl0aW9ucy5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzU2hvd0FsbEZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzICYmIHRoaXMuc2hvd25GaWx0ZXJDb3VudCA+IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuYWN0aXZlRGlhbG9nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIGlmICgnZGF0YVNvdXJjZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEUygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogT3BlbiBkaWFsb2cgKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZE9wdGlvbnMoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgY2hlY2sgcmVxdWlyZWQgZmllbGRzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2F2ZVByZXZpb3VzU3RhdGUoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVycygpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRFMoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVRhYigpO1xuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nQ29uZmlnLmFyaWFMYWJlbGxlZEJ5KSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZy5hcmlhTGFiZWxsZWRCeSA9IHRoaXMuaGVhZGVySWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dDb250YWluZXIsIHtcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xpY2tDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXNjS2V5Q2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpYWxvZ1BhbmVsQ2xhc3M6IGBmZHAtdmFsdWUtaGVscC1kaWFsb2cgJHt0aGlzLm1vYmlsZSA/ICdmZHAtdmFsdWUtaGVscC1kaWFsb2ctbW9iaWxlJyA6ICcnfWAsXG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcblxuICAgICAgICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6ICc5MiUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzEwODBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzk4JSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkRpYWxvZ0V2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBhZHZhbmNlZCBzZWFyY2ggcGFuZWxcbiAgICAgKi9cbiAgICB0b2dnbGVBZHZhbmNlZFNlYXJjaChzdGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBzdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSAhdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuaXNPcGVuQWR2YW5jZWQgPyBWaGRUYWIuYWR2YW5jZWRTZWFyY2ggOiBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGJ5IG9ubHkgdGhlIHNlYXJjaCB0ZXJtLiAqL1xuICAgIHNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGJ5IGFsbCBmaWxsZWQgZmlsdGVycywgaW5jbHVkaW5nIHRoZSBzZWFyY2ggdGVybS5cbiAgICAgKi9cbiAgICBmaWx0ZXIob25seVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAoIW9ubHlTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEZpbHRlcnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IHZhbHVlIH0pID0+XG4gICAgICAgICAgICAgICAgICAgICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKS5sZW5ndGggOiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlKSA9PiBub25FbXB0eUZpbHRlcnMuc2V0KGUua2V5LCBlLnZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFpblNlYXJjaC5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5vbkVtcHR5RmlsdGVycy5zZXQoJyonLCB0aGlzLl9tYWluU2VhcmNoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/Lm1hdGNoKG5vbkVtcHR5RmlsdGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgc2VhcmNoIGZyb20gYWR2YW5jZWQgZmlsdGVycyB2aWV3LCB1c2luZyB3aGVuIG1vYmlsZSB2aWV3IGlzIGFjdGl2ZVxuICAgICAqL1xuICAgIHNlYXJjaEFkdmFuY2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSBpdGVtIGZyb20gc2VsZWN0ZWQgYXJyYXkgKi9cbiAgICByZW1vdmVTZWxlY3RlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGNvbmRpdGlvbiBpdGVtXG4gICAgICovXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgPSB0aGlzLmNvbmRpdGlvbkl0ZW1zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggdGFiIGJ5IHR5cGVcbiAgICAgKi9cbiAgICBzd2l0Y2hUYWIodHlwZTogVmhkVGFiIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggdmFsdWU7XG4gICAgICovXG4gICAgc3VjY2VzcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50ID0ge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHRoaXMudmFsaWRDb25kaXRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2dldFZhbGlkYXRvckZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigocikgPT4gciksXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1hdFRva2VuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0VG9rZW4odmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZz8uY2xvc2UodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSBhZHZhbmNlZCBzZWFyY2ggb24gbW9iaWxlIHZpZXcgYW5kIGlmIGl0J3Mgb3BlbmVkXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggbnVsbCB2YWx1ZTtcbiAgICAgKi9cbiAgICBkaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgdGhpcy5pc09wZW5BZHZhbmNlZCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLnNlbGVjdEZyb21MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3ByZXZTdGF0ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5U2VsZWN0ZWRGbjogKF9pbmRleDogbnVtYmVyLCBpdGVtOiBUKSA9PiBudW1iZXIgfCBzdHJpbmcgPSAoX2luZGV4OiBudW1iZXIsIGl0ZW06IFQpID0+XG4gICAgICAgIGl0ZW0gJiYgaXRlbVt0aGlzLnVuaXF1ZUtleV07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5RmlsdGVyRm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IFZoZEZpbHRlcik6IG51bWJlciB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtICYmIGl0ZW0ua2V5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlDb25kaXRpb25GbihfaW5kZXg6IG51bWJlciwgaXRlbTogQmFzZUVudGl0eSk6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBpdGVtID8gaXRlbS52YWx1ZSArIGl0ZW0udmFsdWVUbyArIGl0ZW0uc3RyYXRlZ3kgKyBpdGVtLmtleSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uU2VsZWN0KCRldmVudDogVFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9ICRldmVudDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFNlbGVjdGlvbiA9PT0gJ29uY2UnKSB7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Db25kaXRpb25DaGFuZ2UoJGV2ZW50OiBCYXNlRW50aXR5W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9nZ2xlU2hvd25GaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3duRmlsdGVyQ291bnQgPVxuICAgICAgICAgICAgdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzID09PSB0aGlzLnNob3duRmlsdGVyQ291bnQgPyBJbmZpbml0eSA6IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTaG93bkZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd25GaWx0ZXJDb3VudCA9IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycyB8fCBJbmZpbml0eTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFZhbGlkQ29uZGl0aW9uKGl0ZW1zOiBCYXNlRW50aXR5W10gPSBbXSk6IEJhc2VFbnRpdHlbXSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpdGVtLnN0cmF0ZWd5ID09PSBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3kuZW1wdHkgfHxcbiAgICAgICAgICAgICAgICBpdGVtLnN0cmF0ZWd5ID09PSBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kubm90X2VtcHR5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnN0cmF0ZWd5ID09PSBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3kuYmV0d2Vlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGl0ZW0udmFsdWUubGVuZ3RoICYmIGl0ZW0udmFsdWVUby5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpdGVtLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXRlbS52YWx1ZS5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEUyhkczogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkID0gdGhpcy5kYXRhU291cmNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U291cmNlU3RyZWFtKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICBkcz8ub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlcXVlc3RlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICBkcz8ub25EYXRhUmVjZWl2ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbExvYWRpbmdTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdExvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWNlaXZlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRzU3ViID0gdGhpcy5vcGVuRGF0YVN0cmVhbSgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5ZWREYXRhID0gZGF0YS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGRzU3ViKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNhdmUgcHJldmlvdXMgc3RhdGUgKi9cbiAgICBwcml2YXRlIF9zYXZlUHJldmlvdXNTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjbG9uZURlZXAodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wcmV2U3RhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVUYWIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNob3dTZWxlY3Rpb25UYWIgJiYgdGhpcy5zaG93RGVmaW5lVGFiKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYih0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6IHRoaXMuaW5pdGlhbFRhYik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYihWaGRUYWIuc2VsZWN0RnJvbUxpc3QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd0RlZmluZVRhYikge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLmRlZmluZUNvbmRpdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRTaG93bkZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkRpYWxvZ0V2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nLmFmdGVyQ2xvc2VkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9yZXNldFN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbHRlcnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVycygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U291cmNlU3RyZWFtKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheWVkRmlsdGVycyA9IHRoaXMuZmlsdGVycy5tYXAoKGUpID0+ICh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgbGFiZWw6IGUubGFiZWwgfHwgZS5rZXlcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2hhc0FkdmFuY2VkID0gdGhpcy5fZGlzcGxheWVkRmlsdGVycy5zb21lKChlOiBWaGRGaWx0ZXIpID0+ICEhZS5hZHZhbmNlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIG9wZW5EYXRhU3RyZWFtKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLm1hdGNoKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSB0b0RhdGFTdHJlYW0oZHM6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4pOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkcyBhcyBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyBhcyBPYnNlcnZhYmxlPFRbXT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0U291cmNlU3RyZWFtKCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAhIXRoaXMuZGF0YVNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVuaXF1ZUtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHRoaXMudG9rZW5WaWV3RmllbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0aGlzLnRva2VuaXplckZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRWYWxpZGF0b3JGdW5jdGlvbih2YWx1ZTogVmhkVmFsdWVDaGFuZ2VFdmVudCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0eXBlb2YgdGhpcy50b2tlblZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMudG9rZW5WYWxpZGF0b3IodmFsdWUpIDogb2YodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZSh2YWxpZGF0b3IpID8gdmFsaWRhdG9yIDogb2YodmFsaWRhdG9yKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW2ZkRGlhbG9nVGVtcGxhdGVdIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNjb250YWluZXI+XG4gICAgPGZkLWRpYWxvZyBbZGlhbG9nQ29uZmlnXT1cImRpYWxvZ0NvbmZpZ1wiIFtkaWFsb2dSZWZdPVwiZGlhbG9nXCI+XG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyIFthdHRyLmRpcl09XCJfZGlyJCgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9iaWxlID8gbW9iaWxlRGlhbG9nVGl0bGUgOiBkZXNrdG9wRGlhbG9nVGl0bGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHkgW2F0dHIuZGlyXT1cIl9kaXIkKClcIj5cbiAgICAgICAgICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhZHZhbmNlZFNlYXJjaENvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBmZC1zY3JvbGxiYXIgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2NvbnRlbnQtaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgQGlmIChtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFkdmFuY2VkU2VhcmNoQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0aW9uQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkZWZpbmVDb25kaXRpb25zQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyIFthdHRyLmRpcl09XCJfZGlyJCgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCFpc01vYmlsZUFkdmFuY2VkU2VhcmNoQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19yb3cgZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdGlvbkJhckxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGZkLXRpdGxlIGNsYXNzPVwic2VsZWN0ZWQtYW5kLWNvbmRpdGlvbi10aXRsZVwiIFtpZF09XCJpZCArICctc2VsZWN0ZWQtaXRlbSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc1NlbGVjdGVkQW5kQ29uZGl0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuc2VsZWN0ZWRBbmRDb25kaXRpb25MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3sgc2VsZWN0ZWRJdGVtcy5sZW5ndGggKyB2YWxpZENvbmRpdGlvbnMubGVuZ3RoIH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuc2VsZWN0ZWRFbXB0eUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3Rva2Vucy13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdG9rZW5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0ZWQgaXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlbml6ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlTZWxlY3RlZEZuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBhcyBzZWxlY3RlZEluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJoaWdoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cInJlbW92ZVNlbGVjdGVkKHNlbGVjdGVkSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISF0b2tlbml6ZXJGbiA/IChpdGVtIHwgZGlzcGxheUZuUGlwZTogdG9rZW5pemVyRm4pIDogaXRlbVt0b2tlblZpZXdGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC10b2tlbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiB2YWxpZENvbmRpdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IF90cmFja0J5Q29uZGl0aW9uRm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IGFzIGNvbmRpdGlvbkluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJoaWdoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbihjb25kaXRpb25JbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb25kaXRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZkLWZvcm0tY29udHJvbCBmZC10b2tlbml6ZXItaW5wdXQgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEFuZENvbmRpdGlvbnNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuaXplcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2tlbnMtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEFuZENvbmRpdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1WSEQuZm9vdGVyQ2xlYXJTZWxlY3RlZFRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJkZWNsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1WSEQuZm9vdGVyQ2xlYXJTZWxlY3RlZEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hY3Rpb25zLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1vYmlsZSAmJiBpc09wZW5BZHZhbmNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ28tYWR2YW5jZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoQWR2YW5jZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZFRhYiAhPT0gX3RhYlR5cGVzLmFkdmFuY2VkU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zdWNjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1N0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnN1Y2Nlc3NCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Y2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3MtZGlhbG9nXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELmNhbmNlbEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNtaXNzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZHZhbmNlZFNlYXJjaENvbnRlbnQ+XG4gICAgQGlmIChpc1NlbGVjdGlvblRhYikge1xuICAgICAgICA8Zm9ybSBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fcm93IGZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fYWR2YW5jZWQtc2VhcmNoXCIgW2lkXT1cIidhZHZhbmNlZC1zZWFyY2gtJyArIGlkXCI+XG4gICAgICAgICAgICBAaWYgKCFtb2JpbGUgfHwgKG1vYmlsZSAmJiAhaXNPcGVuQWR2YW5jZWQpKSB7XG4gICAgICAgICAgICAgICAgPGZkLWxheW91dC1ncmlkPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiIFtjb2xNZF09XCIxMlwiIFtjb2xMZ109XCJtb2JpbGUgPyAxMiA6IDZcIiBbY29sWGxdPVwibW9iaWxlID8gMTIgOiA2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1zZWFyY2gtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVZIRC5zZWFyY2hQbGFjZWhvbGRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWFyY2hTdWJtaXQpPVwic2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwiX21haW5TZWFyY2ggPSAkZXZlbnQudGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLXNlYXJjaC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfaGFzQWR2YW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sTWRdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sTGddPVwibW9iaWxlID8gMTIgOiA2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cIm1vYmlsZSA/IDEyIDogNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyIFtjbGVhckJvcmRlcl09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX2hhc0FkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVkhELnNlYXJjaEFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc09wZW5BZHZhbmNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1WSEQuc2VhcmNoSGlkZUFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVZIRC5zZWFyY2hTaG93QWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWRTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuc2VhcmNoQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9mZC1sYXlvdXQtZ3JpZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaXNPcGVuQWR2YW5jZWQgJiYgX2hhc0FkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2FkdmFuY2VkLXNlYXJjaC1jb250ZW50LScgKyBpZFwiIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1maWx0ZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIiBbYmxvY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfZmlyc3RMb2FkaW5nRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1sYXlvdXQtZ3JpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLXZhbHVlLWhlbHAtZGlhbG9nX193aXRoLXRvZ2dsZS1hbGxdPVwiZmlsdGVycy5sZW5ndGggPiBtYXhTaG93bkluaXRpYWxGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyIG9mIF9kaXNwbGF5ZWRGaWx0ZXJzIHwgc2xpY2U6IDAgOiBzaG93bkZpbHRlckNvdW50ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBfdHJhY2tCeUZpbHRlckZuKCRpbmRleCwgZmlsdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIuYWR2YW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCIgW2NvbE1kXT1cIjEyXCIgW2NvbExnXT1cIjZcIiBbY29sWGxdPVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1mb3JtLWdyb3VwX19oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidpbnB1dCcgKyBmaWx0ZXIua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZmlsdGVyLmxhYmVsIH19OjwvbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyLmZpbHRlckRlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXIuZmlsdGVyRGVmLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInc2VhcmNoLWJ5LScgKyBmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2lucHV0JyArIGZpbHRlci5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVycy5sZW5ndGggPiBtYXhTaG93bkluaXRpYWxGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xHcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sTWRdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sTGddPVwiNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xYbF09XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3RvZ2dsZS1maWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3duRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNTaG93QWxsRmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hIaWRlQWxsQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1WSEQuc2VhcmNoU2hvd0FsbEFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtbGF5b3V0LWdyaWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwcHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMzUlXCIgeT1cIjIwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI2MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI4MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZm9ybT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzZWxlY3Rpb25Db250ZW50PlxuICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICBbYmxvY2tdPVwidHJ1ZVwiXG4gICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190YWJsZS1idXN5LWluZGljYXRvclwiXG4gICAgPlxuICAgICAgICA8ZmRwLXNlbGVjdC10YWJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZEl0ZW1zXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdTdGF0ZSAmJiAhX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgW3VpZF09XCJpZFwiXG4gICAgICAgICAgICBbZGlzcGxheWVkRGF0YV09XCJfZGlzcGxheWVkRGF0YVwiXG4gICAgICAgICAgICBbdGFiVGl0bGVdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdFRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VhcmNoU2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFt1bmlxdWVLZXldPVwidW5pcXVlS2V5XCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJzZWFyY2hUYWJsZVBhZ2VTaXplXCJcbiAgICAgICAgICAgIFtkZWZhdWx0TW9iaWxlSGVhZGVyc109XCJzZWFyY2hUYWJsZU1vYmlsZUhlYWRlcnNcIlxuICAgICAgICAgICAgW2ZpbHRlcnNdPVwiX2Rpc3BsYXllZEZpbHRlcnNcIlxuICAgICAgICAgICAgW2FsbG93U2VsZWN0QWxsXT1cImFsbG93U2VsZWN0QWxsXCJcbiAgICAgICAgICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkcC1zZWxlY3QtdGFiPlxuICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZpbmVDb25kaXRpb25zQ29udGVudD5cbiAgICA8ZGl2IGZkLXNjcm9sbGJhcj5cbiAgICAgICAgPGZkcC1kZWZpbmUtdGFiXG4gICAgICAgICAgICBbc3RyYXRlZ3lMYWJlbHNdPVwiZGVmaW5lU3RyYXRlZ3lMYWJlbHNcIlxuICAgICAgICAgICAgW2NvbmRpdGlvbnNdPVwiY29uZGl0aW9uSXRlbXNcIlxuICAgICAgICAgICAgW3VpZF09XCJpZFwiXG4gICAgICAgICAgICBbdGFiVGl0bGVdPVwiJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIChjb25kaXRpb25DaGFuZ2UpPVwib25Db25kaXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkcC1kZWZpbmUtdGFiPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVGl0bGVUZXh0PlxuICAgIDxoNSBbYXR0ci5pZF09XCJoZWFkZXJJZFwiIGZkLXRpdGxlPnt7IGRpYWxvZ1RpdGxlIH19PC9oNT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RhYkxpbmsgbGV0LXRpdGxlPVwidGl0bGVcIiBsZXQtdHlwZT1cInR5cGVcIj5cbiAgICBAaWYgKHNlbGVjdGVkVGFiID09PSB0eXBlICYmIHNob3dTZWxlY3Rpb25UYWIgJiYgc2hvd0RlZmluZVRhYikge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1sZWZ0LWFycm93XCJcbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYkJhY2tCdG5UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGg1IGZkLXRpdGxlPnt7IHRpdGxlIH19PC9oNT5cbiAgICB9XG4gICAgQGlmIChzZWxlY3RlZFRhYiAhPT0gdHlwZSkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgZmQtbGlzdC1saW5rXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKHR5cGUpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlVGFiQnRuT3BlbkRpYWxvZ0xhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyB0aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxpIGZkLWxpc3QtaWNvbiBnbHlwaD1cIm5hdmlnYXRpb24tcmlnaHQtYXJyb3dcIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZHZhbmNlZEhlYWRlcj5cbiAgICA8YnV0dG9uIGZkLWJ1dHRvbiBnbHlwaD1cIm5hdmlnYXRpb24tbGVmdC1hcnJvd1wiIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkU2VhcmNoKClcIj48L2J1dHRvbj5cbiAgICA8aDUgZmQtdGl0bGU+e3sgJ3BsYXRmb3JtVkhELnNlYXJjaEFkdmFuY2VkU2VhcmNoTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2g1PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVza3RvcERpYWxvZ1RpdGxlPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkaWFsb2dUaXRsZVRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkZXNrdG9wVGFic1wiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtb2JpbGVEaWFsb2dUaXRsZT5cbiAgICA8ZGl2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19tb2JpbGUtdGl0bGVcIj5cbiAgICAgICAgQGlmIChoYXNTZWxlY3RlZFRhYikge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGVkVGFiSGVhZGVyXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aDUgW2F0dHIuaWRdPVwiaGVhZGVySWRcIiBmZC10aXRsZT57eyBkaWFsb2dUaXRsZSB9fTwvaDU+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9iaWxlVGFic1wiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGFicz5cbiAgICBAaWYgKHNob3dTZWxlY3Rpb25UYWIgJiYgc2hvd0RlZmluZVRhYikge1xuICAgICAgICA8bmF2IGZkLXRhYi1uYXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3RhYnNcIj5cbiAgICAgICAgICAgIEBpZiAoc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgICAgIDxkaXYgZmQtdGFiLWl0ZW0gKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC10YWItbGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0ID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4gZmQtdGFiLXRhZz57eyAncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+PC9hXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc2hvd0RlZmluZVRhYikge1xuICAgICAgICAgICAgICAgIDxkaXYgZmQtdGFiLWl0ZW0gKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9ucylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRhYi1saW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4gZmQtdGFiLXRhZz57eyAncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+PC9hXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9uYXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVGFicz5cbiAgICBAaWYgKCFoYXNTZWxlY3RlZFRhYiAmJiBzaG93U2VsZWN0aW9uVGFiICYmIHNob3dEZWZpbmVUYWIpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIEBpZiAoc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyIFtpblBhZ2VdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJUaXRsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlOiB7IHRpdGxlOiAncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc2hvd0RlZmluZVRhYikge1xuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyIFtpblBhZ2VdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJUaXRsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlOiB7IHRpdGxlOiAncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzZWxlY3RlZFRhYkhlYWRlcj5cbiAgICBAc3dpdGNoIChzZWxlY3RlZFRhYikge1xuICAgICAgICBAY2FzZSAoX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0KSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJMaW5rXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ3BsYXRmb3JtVkhELnNlbGVjdFRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3RlZFRhYlxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKF90YWJUeXBlcy5hZHZhbmNlZFNlYXJjaCkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFkdmFuY2VkSGVhZGVyXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYkxpbmtcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGVkVGFiXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbmRpdGlvblZhbHVlIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIEBpZiAoaXRlbS5zdHJhdGVneSAhPT0gJ2VtcHR5JyAmJiBpdGVtLnN0cmF0ZWd5ICE9PSAnbm90X2VtcHR5Jykge1xuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7IGl0ZW0gfCBkaXNwbGF5Rm5QaXBlOiBjb25kaXRpb25EaXNwbGF5Rm4gOiBfZGlzcGxheWVkRmlsdGVycyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAoaXRlbS5zdHJhdGVneSA9PT0gJ25vdF9lbXB0eScpIHtcbiAgICAgICAgICAgICEoPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5Q29uZGl0aW9uVGV4dFwiPjwvbmctdGVtcGxhdGU+KVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICZsdDt7eyAncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlQ29uZGl0aW9uRW1wdHknIHwgZmRUcmFuc2xhdGUgfX0mZ3Q7XG4gICAgICAgIH1cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNlbXB0eUNvbmRpdGlvblRleHQ+ICZsdDt7eyAncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlQ29uZGl0aW9uRW1wdHknIHwgZmRUcmFuc2xhdGUgfX0mZ3Q7IDwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
645
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG1CQUFt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S0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBS0YsVUFBVTtzQkFEYixLQUFLO2dCQVlOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQU1OLGNBQWM7c0JBRGIsS0FBSztnQkFNTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQU9OLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFxQk4sV0FBVztzQkFEVixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkFJUCxPQUFPO3NCQUROLGVBQWU7dUJBQUMsa0JBQWtCO2dCQUtuQyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsMkJBQTJCO2dCQUs1QyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBjb21wdXRlZCxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZpbHRlciwgaXNPYnNlcnZhYmxlLCBvZiwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBOZ0Zvck9mLCBOZ1RlbXBsYXRlT3V0bGV0LCBTbGljZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEaXNwbGF5Rm5QaXBlLCBSdGxTZXJ2aWNlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQmFyQ29tcG9uZW50LFxuICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgQmFyTGVmdERpcmVjdGl2ZSxcbiAgICBCYXJSaWdodERpcmVjdGl2ZSxcbiAgICBCdXR0b25CYXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICBEaWFsb2dDb25maWcsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICBEaWFsb2dSZWYsXG4gICAgRGlhbG9nU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50LCBGb3JtTGFiZWxDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBMYXlvdXRHcmlkQ29sRGlyZWN0aXZlLCBMYXlvdXRHcmlkQ29tcG9uZW50LCBMYXlvdXRHcmlkUm93RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xheW91dC1ncmlkJztcbmltcG9ydCB7IExpc3RJY29uRGlyZWN0aXZlLCBMaXN0TGlua0RpcmVjdGl2ZSwgTGlzdFRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Njcm9sbGJhcic7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQgeyBUYWJJdGVtRGlyZWN0aXZlLCBUYWJMaW5rRGlyZWN0aXZlLCBUYWJOYXZDb21wb25lbnQsIFRhYlRhZ0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90YWJzJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50LCBUb2tlbml6ZXJDb21wb25lbnQsIFRva2VuaXplcklucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQsIFRvb2xiYXJJdGVtRGlyZWN0aXZlLCBUb29sYmFyU3BhY2VyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rvb2xiYXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlYXJjaEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IERlZmluZVRhYkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVmaW5lLXRhYi9kZWZpbmUtdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RUYWJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NlbGVjdC10YWIvc2VsZWN0LXRhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmhkRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy92YWx1ZS1oZWxwLWRpYWxvZy1maWx0ZXIvdmFsdWUtaGVscC1kaWFsb2ctZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuIH0gZnJvbSAnLi4vY29uc3RhbnMvY29uZGl0aW9uLWRpc3BsYXkuZnVuY3Rpb24nO1xuaW1wb3J0IHsgVmFsdWVIZWxwQ29sdW1uRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy92YWx1ZS1oZWxwLWNvbHVtbi1kZWYuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgQXJyYXlWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlLFxuICAgIEJhc2VFbnRpdHksXG4gICAgT2JzZXJ2YWJsZVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2UsXG4gICAgVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZSxcbiAgICBWZGhUYWJsZVNlbGVjdGlvbixcbiAgICBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3ksXG4gICAgVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LFxuICAgIFZoZEZpbHRlcixcbiAgICBWaGRUYWIsXG4gICAgVmhkVmFsdWUsXG4gICAgVmhkVmFsdWVDaGFuZ2VFdmVudFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgVmhkQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWxzL3ZoZC1jb21wb25lbnQubW9kZWwnO1xuXG5sZXQgdmhkSGVhZGVyVW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgdHlwZSBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+ID1cbiAgICB8IFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD5cbiAgICB8IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPlxuICAgIHwgT2JzZXJ2YWJsZVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD47XG5cbmxldCB2aGlVbmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXZhbHVlLWhlbHAtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVmhkQ29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFBsYXRmb3JtVmFsdWVIZWxwRGlhbG9nQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIFNjcm9sbGJhckRpcmVjdGl2ZSxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVG9rZW5pemVyQ29tcG9uZW50LFxuICAgICAgICBUb2tlbkNvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgICAgICBUb2tlbml6ZXJJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTGF5b3V0R3JpZENvbXBvbmVudCxcbiAgICAgICAgTGF5b3V0R3JpZFJvd0RpcmVjdGl2ZSxcbiAgICAgICAgTGF5b3V0R3JpZENvbERpcmVjdGl2ZSxcbiAgICAgICAgU2VhcmNoRmllbGRDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJTcGFjZXJEaXJlY3RpdmUsXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JDb21wb25lbnQsXG4gICAgICAgIEZvcm1MYWJlbENvbXBvbmVudCxcbiAgICAgICAgU2tlbGV0b25Db21wb25lbnQsXG4gICAgICAgIFNlbGVjdFRhYkNvbXBvbmVudCxcbiAgICAgICAgRGVmaW5lVGFiQ29tcG9uZW50LFxuICAgICAgICBMaXN0TGlua0RpcmVjdGl2ZSxcbiAgICAgICAgTGlzdFRpdGxlRGlyZWN0aXZlLFxuICAgICAgICBMaXN0SWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgVGFiTmF2Q29tcG9uZW50LFxuICAgICAgICBUYWJJdGVtRGlyZWN0aXZlLFxuICAgICAgICBUYWJMaW5rRGlyZWN0aXZlLFxuICAgICAgICBUYWJUYWdEaXJlY3RpdmUsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyTGVmdERpcmVjdGl2ZSxcbiAgICAgICAgQmFyRWxlbWVudERpcmVjdGl2ZSxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkJhckNvbXBvbmVudCxcbiAgICAgICAgU2xpY2VQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIERpc3BsYXlGblBpcGUsXG4gICAgICAgIE5nRm9yT2ZcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtVmFsdWVIZWxwRGlhbG9nQ29tcG9uZW50PFQgPSBhbnk+IGV4dGVuZHMgVmhkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBJZCBvZiB0aGUgcG9wb3ZlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICdmZHAtdmhkLScgKyB2aGlVbmlxdWVJZCsrO1xuXG4gICAgLyoqIEluaXRpYWwgc3RhdGUgb2YgVmFsdWUgaGVscCBkaWFsb2cgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlOiBWaGRWYWx1ZTxUPiA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFtdLFxuICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgIH07XG5cbiAgICAvKiogRGlhbG9nIHRpdGxlICovXG4gICAgQElucHV0KClcbiAgICBkaWFsb2dUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFNlbGVjdCBmcm9tIGxpc3QgdGFiIGFjdGl2YXRpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIGluaXRpYWxUYWIgPSBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG5cbiAgICAvKiogVmlzaWJsZSB0YWJzICovXG4gICAgQElucHV0KClcbiAgICB0YWJzOiAnYm90aCcgfCAnc2VsZWN0JyB8ICdkZWZpbmUnID0gJ2JvdGgnO1xuXG4gICAgLyoqIEluaXRpYWwgZXhwYW5kIHN0YXRlIGZvciBhZHZhbmNlZCBzZWFyY2ggcGFuZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbHVlOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy50b0RhdGFTdHJlYW0odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBEaWFsb2cncyBjdXN0b20gY29uZmlnICovXG4gICAgQElucHV0KClcbiAgICBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyA9IHt9O1xuXG4gICAgLyoqIFVuaXF1ZSBrZXkgZnJvbSB0aGUgc291cmNlIGZpZWxkIG5hbWVzLiBSZXF1aXJlZCBmaWVsZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVuaXF1ZUtleTogc3RyaW5nO1xuXG4gICAgLyoqIElkIGF0dHJpYnV0ZSBmb3IgZGlhbG9nIHRpdGxlICovXG4gICAgQElucHV0KClcbiAgICBoZWFkZXJJZCA9IGBmZHAtdmhkLWhlYWRlci1pZC0ke3ZoZEhlYWRlclVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBGaWVsZCBuYW1lIGZvciBkZWZhdWx0IHJlbmRlciBmcm9tIGRhdGEuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5pemVyRm4gaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5WaWV3RmllbGQ6IHN0cmluZztcblxuICAgIC8qKiBUb2tlbml6ZXIgZnVuY3Rpb24gZm9yIGN1c3RvbSB0b2tlbiByZW5kZXIsIGl0IGhhcyBoaWdoZXIgcHJpbyB0aGF0IGB0b2tlblZpZXdGaWVsZGAuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5WaWV3RmllbGQgaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5pemVyRm46IChpdGVtOiBUKSA9PiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIHZpZXcgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIEl0IHNob3VsZCBiZSBhYmxlIGlmIHlvdSB1c2UgbXVsdGlwbGUgc2VsZWN0aW9uICovXG4gICAgQElucHV0KClcbiAgICBmb3JtYXRUb2tlbjogKHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50PFQ+KSA9PiB2b2lkO1xuXG4gICAgLyoqIFRva2VuaXplciBmdW5jdGlvbiBmb3IgY29uZGl0aW9uJ3MgdG9rZW4gcmVuZGVyICovXG4gICAgQElucHV0KClcbiAgICBjb25kaXRpb25EaXNwbGF5Rm4gPSBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuO1xuXG4gICAgLyoqIFZhbGlkYXRvciBmdW5jdGlvbi4gQ2FsbGVkIHdoZW4gdXNlciBzdWJtaXRzIFZIRCBkaWFsb2cuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlblZhbGlkYXRvcjogKCh2YWx1ZTogVmhkVmFsdWVDaGFuZ2VFdmVudCkgPT4gT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIFNlbGVjdGlvbiBtb2RlIGZvciBzZWFyY2ggdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFNlbGVjdGlvbjogVmRoVGFibGVTZWxlY3Rpb24gPSAnbXVsdGknO1xuXG4gICAgLyoqIEl0ZW1zIHBlciBwYWdlIGZvciBwYWdpbmF0aW9uIGJlbG93IHNlYXJjaCB0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVGFibGVQYWdlU2l6ZSA9IDIwO1xuXG4gICAgLyoqIENvdW50IG9mIGRlZmF1bHQgbW9iaWxlIGhlYWRlciBmcm9tIHNlYXJjaCB0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVGFibGVNb2JpbGVIZWFkZXJzID0gMjtcblxuICAgIC8qKiBNYXggc2hvd24gaW5pdGlhbCBmaWx0ZXJzIG9uIG9wZW4uIERlc2t0b3Agb25seSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4U2hvd25Jbml0aWFsRmlsdGVycyA9IDQ7XG5cbiAgICAvKiogTG9hZGluZyBzdGF0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IHVzZXJzIHRvIHNlbGVjdCBhbGwgdGFibGUgZW50cmllcyB3aXRoIG9uZSBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93U2VsZWN0QWxsID0gdHJ1ZTtcblxuICAgIC8qKiBDdXN0b20gc3RyYXRlZ2llcyBsYWJlbHNcbiAgICAgKiBBbGxvd2VkIGtleXM6IGNvbnRhaW5zLCBlcXVhbFRvLCBiZXR3ZWVuLCBzdGFydHNXaXRoLCBlbmRzV2l0aCwgbGVzc1RoYW4sIGxlc3NUaGFuRXF1YWwsIGdyZWF0ZXJUaGFuLCBncmVhdGVyVGhhbkVxdWFsLCBlbXB0eVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lU3RyYXRlZ3lMYWJlbHM6IHtcbiAgICAgICAgW2tleSBpbiBrZXlvZiAodHlwZW9mIFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSB8IHR5cGVvZiBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kpXT86IHN0cmluZztcbiAgICB9ID0ge1xuICAgICAgICBjb250YWluczogJ2NvbnRhaW5zJyxcbiAgICAgICAgZXF1YWxUbzogJ2VxdWFsIHRvJyxcbiAgICAgICAgYmV0d2VlbjogJ2JldHdlZW4nLFxuICAgICAgICBzdGFydHNXaXRoOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICBlbmRzV2l0aDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIGxlc3NUaGFuOiAnbGVzcyB0aGFuJyxcbiAgICAgICAgbGVzc1RoYW5FcXVhbDogJ2xlc3MgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGdyZWF0ZXJUaGFuOiAnZ3JlYXRlciB0aGFuJyxcbiAgICAgICAgZ3JlYXRlclRoYW5FcXVhbDogJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGVtcHR5OiAnZW1wdHknLFxuICAgICAgICBub3RfZXF1YWxUbzogJ25vdCBlcXVhbCB0bycsXG4gICAgICAgIG5vdF9lbXB0eTogJ25vdCBlbXB0eSdcbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyBvdXRwdXRzICovXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBmaWx0ZXJzL3Rva2VucyB3ZXJlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFZoZFZhbHVlQ2hhbmdlRXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBGaXRsZXJzIGZvciBzZWFyY2ggdGFibGUgYW5kIGRlZmluY2UgY29uZGl0aW9ucyAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVmhkRmlsdGVyQ29tcG9uZW50KVxuICAgIGZpbHRlcnM6IFF1ZXJ5TGlzdDxWaGRGaWx0ZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFZhbHVlSGVscENvbHVtbkRlZkRpcmVjdGl2ZSlcbiAgICBjb2x1bW5EZWY6IFF1ZXJ5TGlzdDxWYWx1ZUhlbHBDb2x1bW5EZWZEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gSW50ZXJuYWwgY29udGFpbmVyIGZvciBkaWFsb2cgKi9cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgZGlhbG9nQ29udGFpbmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhY3RpdmVEaWFsb2c/OiBEaWFsb2dSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90YWJUeXBlcyA9IFZoZFRhYjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc0FkdmFuY2VkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXllZEZpbHRlcnM6IFZoZEZpbHRlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5ZWREYXRhOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21haW5TZWFyY2ggPSAnJztcblxuICAgIC8qKiBoYW5kbGVzIHJ0bCBzZXJ2aWNlXG4gICAgICogQGhpZGRlbiAqL1xuICAgIF9kaXIkID0gY29tcHV0ZWQ8RGlyZWN0aW9uPigoKSA9PiAodGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKCkgPyAncnRsJyA6ICdsdHInKSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkVGFiOiBWaGRUYWIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2hvd25GaWx0ZXJDb3VudCA9IEluZmluaXR5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbG9hZGluZ1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nID8/IHRoaXMuX2ludGVybmFsTG9hZGluZ1N0YXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpcnN0IGxvYWRpbmcgd2hlbiBza2VsZXRvbnMgYmUgc2hvd24gYW5kIHN1YnNlcXVlbnQgbG9hZGluZ3Mgd2hlbiBidXN5IGluZGljYXRvciBiZSBzaG93blxuICAgICAqL1xuICAgIF9maXJzdExvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3llZCA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEBoaWRkZW4gZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiBQcmV2aW91cyBzdGF0ZSAqL1xuICAgIHByaXZhdGUgX3ByZXZTdGF0ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuICAgIC8qKiBAaGlkZGVuIEN1cnJlbnQgZGF0YSBmb3IgbG9jYWwgbWFudXB1bGF0aW9uICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFZhbHVlOiBWaGRWYWx1ZTxUPiA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFtdLFxuICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ludGVybmFsTG9hZGluZ1N0YXRlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvKiogRGVmYXVsdCBkaXNwbGF5IGZ1bmN0aW9uIGZvciBkZWZpbmUgY29uZGl0aW9ucyAqL1xuICAgICAgICBpZiAoIXRoaXMuY29uZGl0aW9uRGlzcGxheUZuIHx8IHR5cGVvZiB0aGlzLmNvbmRpdGlvbkRpc3BsYXlGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25EaXNwbGF5Rm4gPSBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNNb2JpbGVBZHZhbmNlZFNlYXJjaEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaGFzU2VsZWN0ZWRUYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFiICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZFRhYiBpbiBWaGRUYWI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2hvd1NlbGVjdGlvblRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFicyAhPT0gJ2RlZmluZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2hvd0RlZmluZVRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFicyAhPT0gJ3NlbGVjdCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNTZWxlY3Rpb25UYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFiID09PSBWaGRUYWIuc2VsZWN0RnJvbUxpc3QgfHwgdGhpcy5zZWxlY3RlZFRhYiA9PT0gVmhkVGFiLmFkdmFuY2VkU2VhcmNoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNlbGVjdGVkSXRlbXMoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjb25kaXRpb25JdGVtcygpOiBCYXNlRW50aXR5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgdmFsaWRDb25kaXRpb25zKCk6IEJhc2VFbnRpdHlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRWYWxpZENvbmRpdGlvbih0aGlzLmNvbmRpdGlvbkl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBoYXNTZWxlY3RlZEFuZENvbmRpdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggKyB0aGlzLnZhbGlkQ29uZGl0aW9ucy5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzU2hvd0FsbEZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzICYmIHRoaXMuc2hvd25GaWx0ZXJDb3VudCA+IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuYWN0aXZlRGlhbG9nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIGlmICgnZGF0YVNvdXJjZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEUygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogT3BlbiBkaWFsb2cgKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZE9wdGlvbnMoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgY2hlY2sgcmVxdWlyZWQgZmllbGRzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2F2ZVByZXZpb3VzU3RhdGUoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVycygpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRFMoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVRhYigpO1xuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nQ29uZmlnLmFyaWFMYWJlbGxlZEJ5KSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZy5hcmlhTGFiZWxsZWRCeSA9IHRoaXMuaGVhZGVySWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dDb250YWluZXIsIHtcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xpY2tDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXNjS2V5Q2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpYWxvZ1BhbmVsQ2xhc3M6IGBmZHAtdmFsdWUtaGVscC1kaWFsb2cgJHt0aGlzLm1vYmlsZSA/ICdmZHAtdmFsdWUtaGVscC1kaWFsb2ctbW9iaWxlJyA6ICcnfWAsXG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcblxuICAgICAgICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6ICc5MiUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzEwODBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzk4JSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkRpYWxvZ0V2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBhZHZhbmNlZCBzZWFyY2ggcGFuZWxcbiAgICAgKi9cbiAgICB0b2dnbGVBZHZhbmNlZFNlYXJjaChzdGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBzdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSAhdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuaXNPcGVuQWR2YW5jZWQgPyBWaGRUYWIuYWR2YW5jZWRTZWFyY2ggOiBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGJ5IG9ubHkgdGhlIHNlYXJjaCB0ZXJtLiAqL1xuICAgIHNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGJ5IGFsbCBmaWxsZWQgZmlsdGVycywgaW5jbHVkaW5nIHRoZSBzZWFyY2ggdGVybS5cbiAgICAgKi9cbiAgICBmaWx0ZXIob25seVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAoIW9ubHlTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEZpbHRlcnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IHZhbHVlIH0pID0+XG4gICAgICAgICAgICAgICAgICAgICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKS5sZW5ndGggOiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlKSA9PiBub25FbXB0eUZpbHRlcnMuc2V0KGUua2V5LCBlLnZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFpblNlYXJjaC5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5vbkVtcHR5RmlsdGVycy5zZXQoJyonLCB0aGlzLl9tYWluU2VhcmNoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/Lm1hdGNoKG5vbkVtcHR5RmlsdGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgc2VhcmNoIGZyb20gYWR2YW5jZWQgZmlsdGVycyB2aWV3LCB1c2luZyB3aGVuIG1vYmlsZSB2aWV3IGlzIGFjdGl2ZVxuICAgICAqL1xuICAgIHNlYXJjaEFkdmFuY2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSBpdGVtIGZyb20gc2VsZWN0ZWQgYXJyYXkgKi9cbiAgICByZW1vdmVTZWxlY3RlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGNvbmRpdGlvbiBpdGVtXG4gICAgICovXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgPSB0aGlzLmNvbmRpdGlvbkl0ZW1zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggdGFiIGJ5IHR5cGVcbiAgICAgKi9cbiAgICBzd2l0Y2hUYWIodHlwZTogVmhkVGFiIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggdmFsdWU7XG4gICAgICovXG4gICAgc3VjY2VzcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50ID0ge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHRoaXMudmFsaWRDb25kaXRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2dldFZhbGlkYXRvckZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigocikgPT4gciksXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1hdFRva2VuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0VG9rZW4odmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZz8uY2xvc2UodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSBhZHZhbmNlZCBzZWFyY2ggb24gbW9iaWxlIHZpZXcgYW5kIGlmIGl0J3Mgb3BlbmVkXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggbnVsbCB2YWx1ZTtcbiAgICAgKi9cbiAgICBkaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgdGhpcy5pc09wZW5BZHZhbmNlZCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLnNlbGVjdEZyb21MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3ByZXZTdGF0ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5U2VsZWN0ZWRGbjogKF9pbmRleDogbnVtYmVyLCBpdGVtOiBUKSA9PiBudW1iZXIgfCBzdHJpbmcgPSAoX2luZGV4OiBudW1iZXIsIGl0ZW06IFQpID0+XG4gICAgICAgIGl0ZW0gJiYgaXRlbVt0aGlzLnVuaXF1ZUtleV07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5RmlsdGVyRm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IFZoZEZpbHRlcik6IG51bWJlciB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtICYmIGl0ZW0ua2V5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlDb25kaXRpb25GbihfaW5kZXg6IG51bWJlciwgaXRlbTogQmFzZUVudGl0eSk6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBpdGVtID8gaXRlbS52YWx1ZSArIGl0ZW0udmFsdWVUbyArIGl0ZW0uc3RyYXRlZ3kgKyBpdGVtLmtleSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uU2VsZWN0KCRldmVudDogVFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9ICRldmVudDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFNlbGVjdGlvbiA9PT0gJ29uY2UnKSB7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Db25kaXRpb25DaGFuZ2UoJGV2ZW50OiBCYXNlRW50aXR5W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9nZ2xlU2hvd25GaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3duRmlsdGVyQ291bnQgPVxuICAgICAgICAgICAgdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzID09PSB0aGlzLnNob3duRmlsdGVyQ291bnQgPyBJbmZpbml0eSA6IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTaG93bkZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd25GaWx0ZXJDb3VudCA9IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycyB8fCBJbmZpbml0eTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFZhbGlkQ29uZGl0aW9uKGl0ZW1zOiBCYXNlRW50aXR5W10gPSBbXSk6IEJhc2VFbnRpdHlbXSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpdGVtLnN0cmF0ZWd5ID09PSBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3kuZW1wdHkgfHxcbiAgICAgICAgICAgICAgICBpdGVtLnN0cmF0ZWd5ID09PSBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kubm90X2VtcHR5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnN0cmF0ZWd5ID09PSBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3kuYmV0d2Vlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGl0ZW0udmFsdWUubGVuZ3RoICYmIGl0ZW0udmFsdWVUby5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpdGVtLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXRlbS52YWx1ZS5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEUyhkczogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkID0gdGhpcy5kYXRhU291cmNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U291cmNlU3RyZWFtKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICBkcz8ub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlcXVlc3RlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICBkcz8ub25EYXRhUmVjZWl2ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbExvYWRpbmdTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdExvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWNlaXZlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRzU3ViID0gdGhpcy5vcGVuRGF0YVN0cmVhbSgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5ZWREYXRhID0gZGF0YS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGRzU3ViKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNhdmUgcHJldmlvdXMgc3RhdGUgKi9cbiAgICBwcml2YXRlIF9zYXZlUHJldmlvdXNTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjbG9uZURlZXAodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wcmV2U3RhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVUYWIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNob3dTZWxlY3Rpb25UYWIgJiYgdGhpcy5zaG93RGVmaW5lVGFiKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYih0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6IHRoaXMuaW5pdGlhbFRhYik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYihWaGRUYWIuc2VsZWN0RnJvbUxpc3QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd0RlZmluZVRhYikge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLmRlZmluZUNvbmRpdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRTaG93bkZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkRpYWxvZ0V2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nLmFmdGVyQ2xvc2VkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9yZXNldFN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbHRlcnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVycygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U291cmNlU3RyZWFtKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheWVkRmlsdGVycyA9IHRoaXMuZmlsdGVycy5tYXAoKGUpID0+ICh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgbGFiZWw6IGUubGFiZWwgfHwgZS5rZXlcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2hhc0FkdmFuY2VkID0gdGhpcy5fZGlzcGxheWVkRmlsdGVycy5zb21lKChlOiBWaGRGaWx0ZXIpID0+ICEhZS5hZHZhbmNlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIG9wZW5EYXRhU3RyZWFtKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLm1hdGNoKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSB0b0RhdGFTdHJlYW0oZHM6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4pOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkcyBhcyBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyBhcyBPYnNlcnZhYmxlPFRbXT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0U291cmNlU3RyZWFtKCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAhIXRoaXMuZGF0YVNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVuaXF1ZUtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHRoaXMudG9rZW5WaWV3RmllbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0aGlzLnRva2VuaXplckZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRWYWxpZGF0b3JGdW5jdGlvbih2YWx1ZTogVmhkVmFsdWVDaGFuZ2VFdmVudCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0eXBlb2YgdGhpcy50b2tlblZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMudG9rZW5WYWxpZGF0b3IodmFsdWUpIDogb2YodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZSh2YWxpZGF0b3IpID8gdmFsaWRhdG9yIDogb2YodmFsaWRhdG9yKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW2ZkRGlhbG9nVGVtcGxhdGVdIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNjb250YWluZXI+XG4gICAgPGZkLWRpYWxvZyBbZGlhbG9nQ29uZmlnXT1cImRpYWxvZ0NvbmZpZ1wiIFtkaWFsb2dSZWZdPVwiZGlhbG9nXCI+XG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyIFthdHRyLmRpcl09XCJfZGlyJCgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9iaWxlID8gbW9iaWxlRGlhbG9nVGl0bGUgOiBkZXNrdG9wRGlhbG9nVGl0bGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHkgW2F0dHIuZGlyXT1cIl9kaXIkKClcIj5cbiAgICAgICAgICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhZHZhbmNlZFNlYXJjaENvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBmZC1zY3JvbGxiYXIgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2NvbnRlbnQtaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgQGlmIChtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFkdmFuY2VkU2VhcmNoQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0aW9uQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkZWZpbmVDb25kaXRpb25zQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyIFthdHRyLmRpcl09XCJfZGlyJCgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCFpc01vYmlsZUFkdmFuY2VkU2VhcmNoQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19yb3cgZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdGVkQW5kQ29uZGl0aW9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgZmQtdGl0bGUgY2xhc3M9XCJzZWxlY3RlZC1hbmQtY29uZGl0aW9uLXRpdGxlXCIgW2lkXT1cImlkICsgJy1zZWxlY3RlZC1pdGVtJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RlZEFuZENvbmRpdGlvbkxhYmVsJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7eyBzZWxlY3RlZEl0ZW1zLmxlbmd0aCArIHZhbGlkQ29uZGl0aW9ucy5sZW5ndGggfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RlZEVtcHR5TGFiZWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdG9rZW5zLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2tlbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBpdGVtcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuaXplcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeVNlbGVjdGVkRm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IGFzIHNlbGVjdGVkSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cImhpZ2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsb3NlQ2xpY2spPVwicmVtb3ZlU2VsZWN0ZWQoc2VsZWN0ZWRJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIXRva2VuaXplckZuID8gKGl0ZW0gfCBkaXNwbGF5Rm5QaXBlOiB0b2tlbml6ZXJGbikgOiBpdGVtW3Rva2VuVmlld0ZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIHZhbGlkQ29uZGl0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlDb25kaXRpb25GbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgY29uZGl0aW9uSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cImhpZ2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsb3NlQ2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGNvbmRpdGlvbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmRpdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZmQtZm9ybS1jb250cm9sIGZkLXRva2VuaXplci1pbnB1dCBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkQW5kQ29uZGl0aW9uc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW5pemVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRBbmRDb25kaXRpb25JdGVtcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3Rva2Vucy1jbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkQW5kQ29uZGl0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5mb290ZXJDbGVhclNlbGVjdGVkVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybVZIRC5mb290ZXJDbGVhclNlbGVjdGVkQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FjdGlvbnMtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobW9iaWxlICYmIGlzT3BlbkFkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1nby1hZHZhbmNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuc2VhcmNoQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hBZHZhbmNlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkVGFiICE9PSBfdGFiVHlwZXMuYWR2YW5jZWRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXN1Y2Nlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuc3VjY2Vzc0J1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VjY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcy1kaWFsb2dcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuY2FuY2VsQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc21pc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICA8L2ZkLWRpYWxvZz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2FkdmFuY2VkU2VhcmNoQ29udGVudD5cbiAgICBAaWYgKGlzU2VsZWN0aW9uVGFiKSB7XG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19yb3cgZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1zZWFyY2hcIiBbaWRdPVwiJ2FkdmFuY2VkLXNlYXJjaC0nICsgaWRcIj5cbiAgICAgICAgICAgIEBpZiAoIW1vYmlsZSB8fCAobW9iaWxlICYmICFpc09wZW5BZHZhbmNlZCkpIHtcbiAgICAgICAgICAgICAgICA8ZmQtbGF5b3V0LWdyaWQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCIgW2NvbE1kXT1cIjEyXCIgW2NvbExnXT1cIm1vYmlsZSA/IDEyIDogNlwiIFtjb2xYbF09XCJtb2JpbGUgPyAxMiA6IDZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLXNlYXJjaC1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFN1Ym1pdCk9XCJzZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJfbWFpblNlYXJjaCA9ICRldmVudC50ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZHAtc2VhcmNoLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKF9oYXNBZHZhbmNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xNZF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCJtb2JpbGUgPyAxMiA6IDZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwibW9iaWxlID8gMTIgOiA2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FkdmFuY2VkLWFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfaGFzQWR2YW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1WSEQuc2VhcmNoQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzT3BlbkFkdmFuY2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hIaWRlQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVkhELnNlYXJjaFNob3dBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBZHZhbmNlZFNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVZIRC5zZWFyY2hCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2ZkLWxheW91dC1ncmlkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChpc09wZW5BZHZhbmNlZCAmJiBfaGFzQWR2YW5jZWQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCInYWR2YW5jZWQtc2VhcmNoLWNvbnRlbnQtJyArIGlkXCIgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FkdmFuY2VkLWZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1c3ktaW5kaWNhdG9yIFtsb2FkaW5nXT1cImxvYWRpbmdTdGF0ZSAmJiBfZmlyc3RMb2FkaW5nRG9uZVwiIFtibG9ja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKF9maXJzdExvYWRpbmdEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWxheW91dC1ncmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtdmFsdWUtaGVscC1kaWFsb2dfX3dpdGgtdG9nZ2xlLWFsbF09XCJmaWx0ZXJzLmxlbmd0aCA+IG1heFNob3duSW5pdGlhbEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmZExheW91dEdyaWRSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgb2YgX2Rpc3BsYXllZEZpbHRlcnMgfCBzbGljZTogMCA6IHNob3duRmlsdGVyQ291bnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIF90cmFja0J5RmlsdGVyRm4oJGluZGV4LCBmaWx0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpbHRlci5hZHZhbmNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiMTJcIiBbY29sTWRdPVwiMTJcIiBbY29sTGddPVwiNlwiIFtjb2xYbF09XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWZvcm0tZ3JvdXBfX2hlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtZm9ybS1sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ2lucHV0JyArIGZpbHRlci5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBmaWx0ZXIubGFiZWwgfX06PC9sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIuZmlsdGVyRGVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlci5maWx0ZXJEZWYudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlciB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidzZWFyY2gtYnktJyArIGZpbHRlci5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInaW5wdXQnICsgZmlsdGVyLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJzLmxlbmd0aCA+IG1heFNob3duSW5pdGlhbEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEdyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xNZF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdG9nZ2xlLWZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd25GaWx0ZXJzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc1Nob3dBbGxGaWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVkhELnNlYXJjaEhpZGVBbGxBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVZIRC5zZWFyY2hTaG93QWxsQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1sYXlvdXQtZ3JpZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDBweFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIyMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjM1JVwiIHk9XCIwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjYwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjgwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1idXN5LWluZGljYXRvcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mb3JtPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3NlbGVjdGlvbkNvbnRlbnQ+XG4gICAgPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdTdGF0ZSAmJiBfZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3RhYmxlLWJ1c3ktaW5kaWNhdG9yXCJcbiAgICA+XG4gICAgICAgIDxmZHAtc2VsZWN0LXRhYlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkSXRlbXNcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1N0YXRlICYmICFfZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgICAgICAgICBbdWlkXT1cImlkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5ZWREYXRhXT1cIl9kaXNwbGF5ZWREYXRhXCJcbiAgICAgICAgICAgIFt0YWJUaXRsZV09XCIncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJzZWFyY2hTZWxlY3Rpb25cIlxuICAgICAgICAgICAgW3VuaXF1ZUtleV09XCJ1bmlxdWVLZXlcIlxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cInNlYXJjaFRhYmxlUGFnZVNpemVcIlxuICAgICAgICAgICAgW2RlZmF1bHRNb2JpbGVIZWFkZXJzXT1cInNlYXJjaFRhYmxlTW9iaWxlSGVhZGVyc1wiXG4gICAgICAgICAgICBbZmlsdGVyc109XCJfZGlzcGxheWVkRmlsdGVyc1wiXG4gICAgICAgICAgICBbYWxsb3dTZWxlY3RBbGxdPVwiYWxsb3dTZWxlY3RBbGxcIlxuICAgICAgICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgPjwvZmRwLXNlbGVjdC10YWI+XG4gICAgPC9mZC1idXN5LWluZGljYXRvcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmluZUNvbmRpdGlvbnNDb250ZW50PlxuICAgIDxkaXYgZmQtc2Nyb2xsYmFyPlxuICAgICAgICA8ZmRwLWRlZmluZS10YWJcbiAgICAgICAgICAgIFtzdHJhdGVneUxhYmVsc109XCJkZWZpbmVTdHJhdGVneUxhYmVsc1wiXG4gICAgICAgICAgICBbY29uZGl0aW9uc109XCJjb25kaXRpb25JdGVtc1wiXG4gICAgICAgICAgICBbdWlkXT1cImlkXCJcbiAgICAgICAgICAgIFt0YWJUaXRsZV09XCIncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgKGNvbmRpdGlvbkNoYW5nZSk9XCJvbkNvbmRpdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvZmRwLWRlZmluZS10YWI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkaWFsb2dUaXRsZVRleHQ+XG4gICAgPGg1IFthdHRyLmlkXT1cImhlYWRlcklkXCIgZmQtdGl0bGU+e3sgZGlhbG9nVGl0bGUgfX08L2g1PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdGFiTGluayBsZXQtdGl0bGU9XCJ0aXRsZVwiIGxldC10eXBlPVwidHlwZVwiPlxuICAgIEBpZiAoc2VsZWN0ZWRUYWIgPT09IHR5cGUgJiYgc2hvd1NlbGVjdGlvblRhYiAmJiBzaG93RGVmaW5lVGFiKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLWxlZnQtYXJyb3dcIlxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYigpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlVGFiQmFja0J0blRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8aDUgZmQtdGl0bGU+e3sgdGl0bGUgfX08L2g1PlxuICAgIH1cbiAgICBAaWYgKHNlbGVjdGVkVGFiICE9PSB0eXBlKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICBmZC1saXN0LWxpbmtcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIodHlwZSlcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJCdG5PcGVuRGlhbG9nTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgPGkgZmQtbGlzdC1pY29uIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiPjwvaT5cbiAgICAgICAgPC9hPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2FkdmFuY2VkSGVhZGVyPlxuICAgIDxidXR0b24gZmQtYnV0dG9uIGdseXBoPVwibmF2aWdhdGlvbi1sZWZ0LWFycm93XCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWRTZWFyY2goKVwiPjwvYnV0dG9uPlxuICAgIDxoNSBmZC10aXRsZT57eyAncGxhdGZvcm1WSEQuc2VhcmNoQWR2YW5jZWRTZWFyY2hMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvaDU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wRGlhbG9nVGl0bGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpYWxvZ1RpdGxlVGV4dFwiPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRlc2t0b3BUYWJzXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI21vYmlsZURpYWxvZ1RpdGxlPlxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX21vYmlsZS10aXRsZVwiPlxuICAgICAgICBAaWYgKGhhc1NlbGVjdGVkVGFiKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0ZWRUYWJIZWFkZXJcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxoNSBbYXR0ci5pZF09XCJoZWFkZXJJZFwiIGZkLXRpdGxlPnt7IGRpYWxvZ1RpdGxlIH19PC9oNT5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGVUYWJzXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Rlc2t0b3BUYWJzPlxuICAgIEBpZiAoc2hvd1NlbGVjdGlvblRhYiAmJiBzaG93RGVmaW5lVGFiKSB7XG4gICAgICAgIDxuYXYgZmQtdGFiLW5hdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdGFic1wiPlxuICAgICAgICAgICAgQGlmIChzaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBmZC10YWItaXRlbSAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRhYi1saW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48c3BhbiBmZC10YWItdGFnPnt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj48L2FcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzaG93RGVmaW5lVGFiKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBmZC10YWItaXRlbSAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtdGFiLWxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48c3BhbiBmZC10YWItdGFnPnt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj48L2FcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L25hdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtb2JpbGVUYWJzPlxuICAgIEBpZiAoIWhhc1NlbGVjdGVkVGFiICYmIHNob3dTZWxlY3Rpb25UYWIgJiYgc2hvd0RlZmluZVRhYikge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgQGlmIChzaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXIgW2luUGFnZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLWxlZnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELnNlbGVjdFRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYlRpdGxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGU6IHsgdGl0bGU6ICdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzaG93RGVmaW5lVGFiKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXIgW2luUGFnZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLWxlZnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYlRpdGxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGU6IHsgdGl0bGU6ICdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3NlbGVjdGVkVGFiSGVhZGVyPlxuICAgIEBzd2l0Y2ggKHNlbGVjdGVkVGFiKSB7XG4gICAgICAgIEBjYXNlIChfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYkxpbmtcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGVkVGFiXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoX3RhYlR5cGVzLmFkdmFuY2VkU2VhcmNoKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWR2YW5jZWRIZWFkZXJcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlIChfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9ucykge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiTGlua1wiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogc2VsZWN0ZWRUYWJcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjY29uZGl0aW9uVmFsdWUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgQGlmIChpdGVtLnN0cmF0ZWd5ICE9PSAnZW1wdHknICYmIGl0ZW0uc3RyYXRlZ3kgIT09ICdub3RfZW1wdHknKSB7XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3sgaXRlbSB8IGRpc3BsYXlGblBpcGU6IGNvbmRpdGlvbkRpc3BsYXlGbiA6IF9kaXNwbGF5ZWRGaWx0ZXJzIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgQGlmIChpdGVtLnN0cmF0ZWd5ID09PSAnbm90X2VtcHR5Jykge1xuICAgICAgICAgICAgISg8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlDb25kaXRpb25UZXh0XCI+PC9uZy10ZW1wbGF0ZT4pXG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgJmx0O3t7ICdwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVDb25kaXRpb25FbXB0eScgfCBmZFRyYW5zbGF0ZSB9fSZndDtcbiAgICAgICAgfVxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5Q29uZGl0aW9uVGV4dD4gJmx0O3t7ICdwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVDb25kaXRpb25FbXB0eScgfCBmZFRyYW5zbGF0ZSB9fSZndDsgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|