@libs-ui/components-list 0.2.344-3 → 0.2.344-5
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/interfaces/config-item.interface.mjs +1 -1
- package/esm2022/templates/group/group.component.mjs +6 -5
- package/esm2022/templates/group/item/item.component.mjs +4 -4
- package/fesm2022/libs-ui-components-list.mjs +8 -7
- package/fesm2022/libs-ui-components-list.mjs.map +1 -1
- package/interfaces/config-item.interface.d.ts +5 -4
- package/package.json +23 -23
|
@@ -46,7 +46,7 @@ export class LibsUiComponentsListGroupItemComponent {
|
|
|
46
46
|
if (disable || (field_key && this.keysDisableItem() && this.keysDisableItem()?.length && this.keysDisableItem()?.some((key) => key === field_key))) {
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
-
if (item.level !== item.maxLevelGroup && this.configTemplateGroup()?.ignoreCheckboxItem) {
|
|
49
|
+
if (item.level !== item.maxLevelGroup && !item.isAcceptSelectItem && this.configTemplateGroup()?.ignoreCheckboxItem) {
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
52
|
this.outChange.emit({ item });
|
|
@@ -61,7 +61,7 @@ export class LibsUiComponentsListGroupItemComponent {
|
|
|
61
61
|
this.outChangStageFlagMousePopover.emit(flag);
|
|
62
62
|
}
|
|
63
63
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsListGroupItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsListGroupItemComponent, isStandalone: true, selector: "libs_ui-components-list-templates_group-item", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, configTemplateGroup: { classPropertyName: "configTemplateGroup", publicName: "configTemplateGroup", isSignal: true, isRequired: false, transformFunction: null }, keySearch: { classPropertyName: "keySearch", publicName: "keySearch", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, keysChecked: { classPropertyName: "keysChecked", publicName: "keysChecked", isSignal: true, isRequired: false, transformFunction: null }, keysDisableItem: { classPropertyName: "keysDisableItem", publicName: "keysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, parentItem: { classPropertyName: "parentItem", publicName: "parentItem", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, keysStillOtherOptions: { classPropertyName: "keysStillOtherOptions", publicName: "keysStillOtherOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outChangeView: "outChangeView", outChange: "outChange", outChangStageFlagMousePopover: "outChangStageFlagMousePopover" }, ngImport: i0, template: "@if (configTemplateGroup(); as configTemplateGroup) {\n @if ((configTemplateGroup.isViewTree && !!items().length) || (parentItem().maxLevelGroup > 2 && parentItem().level > 1)) {\n <div\n class=\"libs-ui-list-group-item-line-vertical\"\n [style.left.px]=\"\n parentItem().level\n | LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe\n : parentItem().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"></div>\n }\n @if (items() && items().length) {\n @for (item of items(); track item()[fieldKey()]) {\n <div>\n <div\n [style.marginLeft.px]=\"\n item().level\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"\n [style.paddingLeft.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [style.paddingRight.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [class]=\"'libs-ui-bg-list-hover py-[6px] pr-[16px] flex items-center relative libs-ui-bg-list-hover-active ' + item()?.classInclude\"\n [class.libs-ui-bg-list-active]=\"configTemplateGroup.singleSelectItem && item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [class.libs-ui-disable]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.pointer-events-none]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.cursor-pointer]=\"!disable() && !(configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup) && !(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.libs-ui-bg-list-active]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.hasBackgroundColorWhenItemSelected && item().isCheckManual\"\n (click)=\"handlerChangeChecked(item(), item()[fieldKey()], disable() || (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup))\">\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTree) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]()?.length) {\n <div [class]=\"'p-[5px]'\">\n <div\n [class]=\"'libs-ui-list-group-json_icon-item-parent'\"\n [attr.disabled]=\"disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) || false\"></div>\n </div>\n }\n <div class=\"flex w-full relative\">\n <div\n #labelRef\n class=\"invisible\"\n [class.hidden]=\"configTemplateGroup.ignoreFixHeightItem\">\n .\n </div>\n <div\n class=\"flex items-center w-full\"\n [class.absolute]=\"!configTemplateGroup.ignoreFixHeightItem\"\n [style.height.px]=\"!configTemplateGroup.ignoreFixHeightItem ? labelRef.clientHeight : 'auto'\">\n @let constHtmlClassIncludeItem = (configTemplateGroup.classIncludeItem || '') + ' w-full';\n @if (!configTemplateGroup.isViewRadio) {\n <libs_ui-components-checkbox-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.ml-[8px]]=\"configTemplateGroup.isViewTree || (configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]?.()?.length)\"\n [ignoreCheckbox]=\"configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.-w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"\n ((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) ||\n (configTemplateGroup.widthLabelSub24WhenNotTreeView &&\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) &&\n configTemplateGroup.singleSelectItem &&\n (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey))) &&\n !configTemplateGroup.ignoreIconExpandMarginRight\n \"\n [clickExactly]=\"false\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !configTemplateGroup.isViewTreeJson) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [stillOtherOptions]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysStillOtherOptions() : keysStillOtherOptions().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'libs-ui-color-default libs-ui-font-h5r'\n : 'libs-ui-font-h5r'\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"configTemplateGroup.getImage ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getImage : item() | async) : (item()[configTemplateGroup.fieldGetAvatarItem || ''] | async)\"\n [linkImageError]=\"configTemplateGroup.getLinkImageError ? ('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getLinkImageError : item() | async) : ''\"\n [imgTypeIcon]=\"configTemplateGroup.imgTypeIcon\"\n [iconImageClass]=\"item().iconImageClass ? item().iconImageClass : undefined\"\n [classImageInclude]=\"configTemplateGroup.classImageInclude || ''\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEventPopover)=\"handlerEventPopover($event, item())\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n @if (configTemplateGroup.isViewRadio) {\n <libs_ui-components-radio-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.!ml-[8px]]=\"configTemplateGroup.isViewTree\"\n [ignoreRadio]=\"configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && !configTemplateGroup.ignoreIconExpandMarginRight\"\n [clickExactly]=\"false\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.disableItemNotLastLevel && !!item()[configTemplateGroup.fieldGetItems]?.()?.length) ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [active]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'text-[#009cdb] libs-ui-font-h5r '\n : ' libs-ui-font-h5r '\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"\n configTemplateGroup.getImage\n ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: (item().specific_loadImgError && configTemplateGroup.getLinkImageError ? configTemplateGroup.getLinkImageError : configTemplateGroup.getImage) : item() | async)\n : item()[configTemplateGroup.fieldGetAvatarItem || '']\n \"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n </div>\n </div>\n @if ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey)) {\n <i\n class=\"libs-ui-icon-check before:!text-[16px]\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n [class.libs-ui-icon-check]=\"configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\"></i>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length && !configTemplateGroup.isViewTree && !configTemplateGroup.isViewTreeJson) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n </div>\n @if (item().expand || configTemplateGroup.isViewTreeJson) {\n @if (item().level < item().maxLevelGroup && !item()[configTemplateGroup.fieldGetItems]?.()?.length && configTemplateGroup.isViewTree) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n item().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [class.!py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.!py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"item().classIncludeItemNoData || ''\">\n @if (!keySearch()) {\n <span>{{ 'i18n_no_data_yet' | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length) {\n <libs_ui-components-list-templates_group-item\n [keySearch]=\"keySearch()\"\n [items]=\"item()[configTemplateGroup.fieldGetItems]()\"\n [parentItem]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keysChecked]=\"keysChecked()\"\n [disable]=\"(disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)) && !configTemplateGroup.isViewTreeJson\"\n [keysDisableItem]=\"keysDisableItem()\"\n [configTemplateGroup]=\"configTemplateGroup\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChangeView)=\"handlerChangeView($event)\"\n (outChange)=\"handlerChangeChecked($event.item)\" />\n }\n }\n </div>\n }\n }\n\n @if ((!items() || !items().length) && parentItem().level < parentItem().maxLevelGroup) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n parentItem().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : parentItem().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [style.paddingLeft.px]=\"parentItem().level + 1 | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: parentItem().maxLevelGroup + 1 : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : false\"\n [class.py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"parentItem().classIncludeItemNoData || ''\">\n @if (parentItem().iconEmptyDataInGroup) {\n <div class=\"pb-[16px]\">\n <ng-container *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\" />\n </div>\n }\n @if (!keySearch()) {\n @let constHtmlTextNoData = parentItem().textDescriptionGroupWhenNoData || config()?.textNoData || 'i18n_no_result';\n <span>{{ constHtmlTextNoData | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n}\n", styles: [":host{position:relative}:host .libs-ui-list-group-item-line-vertical{position:absolute;width:1px;height:100%;background-color:#e6e7ea}.libs-ui-icon-check{--color: var(--libs-ui-color-default, #226ff5)}.libs-ui-icon-check:before{font-size:16px;color:var(--libs-ui-color-default, #226ff5)}[class*=libs-ui-icon-chevron]:before{color:#6a7383}.libs-ui-list-group-json_icon-item-parent{min-width:6px;min-height:6px;height:6px;width:6px;border-radius:50%;background-color:#226ff5}.libs-ui-list-group-json_icon-item-parent[disabled=true]{background-color:#6a7383!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsListGroupItemComponent, selector: "libs_ui-components-list-templates_group-item", inputs: ["items", "configTemplateGroup", "keySearch", "fieldKey", "keysChecked", "keysDisableItem", "parentItem", "disable", "disableLabel", "config", "keysStillOtherOptions"], outputs: ["outChangeView", "outChange", "outChangStageFlagMousePopover"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe, name: "LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe" }, { kind: "pipe", type: LibsUiComponentsListGroupCalculatorMarginLeftItemPipe, name: "LibsUiComponentsListGroupCalculatorMarginLeftItemPipe" }, { kind: "pipe", type: LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe, name: "LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder", "dataComponentOutlet", "componentOutlet"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon", "dataComponentOutlet", "componentOutlet"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
64
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsListGroupItemComponent, isStandalone: true, selector: "libs_ui-components-list-templates_group-item", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, configTemplateGroup: { classPropertyName: "configTemplateGroup", publicName: "configTemplateGroup", isSignal: true, isRequired: false, transformFunction: null }, keySearch: { classPropertyName: "keySearch", publicName: "keySearch", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, keysChecked: { classPropertyName: "keysChecked", publicName: "keysChecked", isSignal: true, isRequired: false, transformFunction: null }, keysDisableItem: { classPropertyName: "keysDisableItem", publicName: "keysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, parentItem: { classPropertyName: "parentItem", publicName: "parentItem", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, keysStillOtherOptions: { classPropertyName: "keysStillOtherOptions", publicName: "keysStillOtherOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outChangeView: "outChangeView", outChange: "outChange", outChangStageFlagMousePopover: "outChangStageFlagMousePopover" }, ngImport: i0, template: "@if (configTemplateGroup(); as configTemplateGroup) {\n @if ((configTemplateGroup.isViewTree && !!items().length) || (parentItem().maxLevelGroup > 2 && parentItem().level > 1)) {\n <div\n class=\"libs-ui-list-group-item-line-vertical\"\n [style.left.px]=\"\n parentItem().level\n | LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe\n : parentItem().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"></div>\n }\n @if (items() && items().length) {\n @for (item of items(); track item()[fieldKey()]) {\n <div>\n <div\n [style.marginLeft.px]=\"\n item().level\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"\n [style.paddingLeft.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [style.paddingRight.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [class]=\"'libs-ui-bg-list-hover py-[6px] pr-[16px] flex items-center relative libs-ui-bg-list-hover-active ' + item()?.classInclude\"\n [class.libs-ui-bg-list-active]=\"configTemplateGroup.singleSelectItem && item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [class.libs-ui-disable]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.pointer-events-none]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.cursor-pointer]=\"\n !disable() && !(configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !item().isAcceptSelectItem) && !(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\n \"\n [class.libs-ui-bg-list-active]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.hasBackgroundColorWhenItemSelected && item().isCheckManual\"\n (click)=\"handlerChangeChecked(item(), item()[fieldKey()], disable() || (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !item().isAcceptSelectItem))\">\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTree) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]()?.length) {\n <div [class]=\"'p-[5px]'\">\n <div\n [class]=\"'libs-ui-list-group-json_icon-item-parent'\"\n [attr.disabled]=\"disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) || false\"></div>\n </div>\n }\n <div class=\"flex w-full relative\">\n <div\n #labelRef\n class=\"invisible\"\n [class.hidden]=\"configTemplateGroup.ignoreFixHeightItem\">\n .\n </div>\n <div\n class=\"flex items-center w-full\"\n [class.absolute]=\"!configTemplateGroup.ignoreFixHeightItem\"\n [style.height.px]=\"!configTemplateGroup.ignoreFixHeightItem ? labelRef.clientHeight : 'auto'\">\n @let constHtmlClassIncludeItem = (configTemplateGroup.classIncludeItem || '') + ' w-full';\n @if (!configTemplateGroup.isViewRadio) {\n <libs_ui-components-checkbox-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.ml-[8px]]=\"configTemplateGroup.isViewTree || (configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]?.()?.length)\"\n [ignoreCheckbox]=\"configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.-w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"\n ((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) ||\n (configTemplateGroup.widthLabelSub24WhenNotTreeView &&\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) &&\n configTemplateGroup.singleSelectItem &&\n (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey))) &&\n !configTemplateGroup.ignoreIconExpandMarginRight\n \"\n [clickExactly]=\"false\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !item().isAcceptSelectItem && !configTemplateGroup.isViewTreeJson) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [stillOtherOptions]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysStillOtherOptions() : keysStillOtherOptions().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'libs-ui-color-default libs-ui-font-h5r'\n : 'libs-ui-font-h5r'\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"configTemplateGroup.getImage ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getImage : item() | async) : (item()[configTemplateGroup.fieldGetAvatarItem || ''] | async)\"\n [linkImageError]=\"configTemplateGroup.getLinkImageError ? ('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getLinkImageError : item() | async) : ''\"\n [imgTypeIcon]=\"configTemplateGroup.imgTypeIcon\"\n [iconImageClass]=\"item().iconImageClass ? item().iconImageClass : undefined\"\n [classImageInclude]=\"configTemplateGroup.classImageInclude || ''\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEventPopover)=\"handlerEventPopover($event, item())\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n @if (configTemplateGroup.isViewRadio) {\n <libs_ui-components-radio-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.!ml-[8px]]=\"configTemplateGroup.isViewTree\"\n [ignoreRadio]=\"configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && !configTemplateGroup.ignoreIconExpandMarginRight\"\n [clickExactly]=\"false\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.disableItemNotLastLevel && !!item()[configTemplateGroup.fieldGetItems]?.()?.length) ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [active]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'text-[#009cdb] libs-ui-font-h5r '\n : ' libs-ui-font-h5r '\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"\n configTemplateGroup.getImage\n ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: (item().specific_loadImgError && configTemplateGroup.getLinkImageError ? configTemplateGroup.getLinkImageError : configTemplateGroup.getImage) : item() | async)\n : item()[configTemplateGroup.fieldGetAvatarItem || '']\n \"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n </div>\n </div>\n @if ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey)) {\n <i\n class=\"libs-ui-icon-check before:!text-[16px]\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n [class.libs-ui-icon-check]=\"configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\"></i>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length && !configTemplateGroup.isViewTree && !configTemplateGroup.isViewTreeJson) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n </div>\n @if (item().expand || configTemplateGroup.isViewTreeJson) {\n @if (item().level < item().maxLevelGroup && !item()[configTemplateGroup.fieldGetItems]?.()?.length && configTemplateGroup.isViewTree) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n item().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [class.!py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.!py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"item().classIncludeItemNoData || ''\">\n @if (!keySearch()) {\n <span>{{ 'i18n_no_data_yet' | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length) {\n <libs_ui-components-list-templates_group-item\n [keySearch]=\"keySearch()\"\n [items]=\"item()[configTemplateGroup.fieldGetItems]()\"\n [parentItem]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keysChecked]=\"keysChecked()\"\n [disable]=\"(disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)) && !configTemplateGroup.isViewTreeJson\"\n [keysDisableItem]=\"keysDisableItem()\"\n [configTemplateGroup]=\"configTemplateGroup\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChangeView)=\"handlerChangeView($event)\"\n (outChange)=\"handlerChangeChecked($event.item)\" />\n }\n }\n </div>\n }\n }\n\n @if ((!items() || !items().length) && parentItem().level < parentItem().maxLevelGroup) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n parentItem().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : parentItem().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [style.paddingLeft.px]=\"parentItem().level + 1 | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: parentItem().maxLevelGroup + 1 : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : false\"\n [class.py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"parentItem().classIncludeItemNoData || ''\">\n @if (parentItem().iconEmptyDataInGroup) {\n <div class=\"pb-[16px]\">\n <ng-container *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\" />\n </div>\n }\n @if (!keySearch()) {\n @let constHtmlTextNoData = parentItem().textDescriptionGroupWhenNoData || config()?.textNoData || 'i18n_no_result';\n <span>{{ constHtmlTextNoData | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n}\n", styles: [":host{position:relative}:host .libs-ui-list-group-item-line-vertical{position:absolute;width:1px;height:100%;background-color:#e6e7ea}.libs-ui-icon-check{--color: var(--libs-ui-color-default, #226ff5)}.libs-ui-icon-check:before{font-size:16px;color:var(--libs-ui-color-default, #226ff5)}[class*=libs-ui-icon-chevron]:before{color:#6a7383}.libs-ui-list-group-json_icon-item-parent{min-width:6px;min-height:6px;height:6px;width:6px;border-radius:50%;background-color:#226ff5}.libs-ui-list-group-json_icon-item-parent[disabled=true]{background-color:#6a7383!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsListGroupItemComponent, selector: "libs_ui-components-list-templates_group-item", inputs: ["items", "configTemplateGroup", "keySearch", "fieldKey", "keysChecked", "keysDisableItem", "parentItem", "disable", "disableLabel", "config", "keysStillOtherOptions"], outputs: ["outChangeView", "outChange", "outChangStageFlagMousePopover"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe, name: "LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe" }, { kind: "pipe", type: LibsUiComponentsListGroupCalculatorMarginLeftItemPipe, name: "LibsUiComponentsListGroupCalculatorMarginLeftItemPipe" }, { kind: "pipe", type: LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe, name: "LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder", "dataComponentOutlet", "componentOutlet"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon", "dataComponentOutlet", "componentOutlet"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
65
65
|
}
|
|
66
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsListGroupItemComponent, decorators: [{
|
|
67
67
|
type: Component,
|
|
@@ -77,6 +77,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
77
77
|
LibsUiComponentsCheckboxSingleComponent,
|
|
78
78
|
LibsUiPipesCallFunctionInTemplatePipe,
|
|
79
79
|
LibsUiComponentsRadioSingleComponent,
|
|
80
|
-
], template: "@if (configTemplateGroup(); as configTemplateGroup) {\n @if ((configTemplateGroup.isViewTree && !!items().length) || (parentItem().maxLevelGroup > 2 && parentItem().level > 1)) {\n <div\n class=\"libs-ui-list-group-item-line-vertical\"\n [style.left.px]=\"\n parentItem().level\n | LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe\n : parentItem().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"></div>\n }\n @if (items() && items().length) {\n @for (item of items(); track item()[fieldKey()]) {\n <div>\n <div\n [style.marginLeft.px]=\"\n item().level\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"\n [style.paddingLeft.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [style.paddingRight.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [class]=\"'libs-ui-bg-list-hover py-[6px] pr-[16px] flex items-center relative libs-ui-bg-list-hover-active ' + item()?.classInclude\"\n [class.libs-ui-bg-list-active]=\"configTemplateGroup.singleSelectItem && item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [class.libs-ui-disable]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.pointer-events-none]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.cursor-pointer]=\"!disable() && !(configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup) && !(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.libs-ui-bg-list-active]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.hasBackgroundColorWhenItemSelected && item().isCheckManual\"\n (click)=\"handlerChangeChecked(item(), item()[fieldKey()], disable() || (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup))\">\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTree) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]()?.length) {\n <div [class]=\"'p-[5px]'\">\n <div\n [class]=\"'libs-ui-list-group-json_icon-item-parent'\"\n [attr.disabled]=\"disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) || false\"></div>\n </div>\n }\n <div class=\"flex w-full relative\">\n <div\n #labelRef\n class=\"invisible\"\n [class.hidden]=\"configTemplateGroup.ignoreFixHeightItem\">\n .\n </div>\n <div\n class=\"flex items-center w-full\"\n [class.absolute]=\"!configTemplateGroup.ignoreFixHeightItem\"\n [style.height.px]=\"!configTemplateGroup.ignoreFixHeightItem ? labelRef.clientHeight : 'auto'\">\n @let constHtmlClassIncludeItem = (configTemplateGroup.classIncludeItem || '') + ' w-full';\n @if (!configTemplateGroup.isViewRadio) {\n <libs_ui-components-checkbox-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.ml-[8px]]=\"configTemplateGroup.isViewTree || (configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]?.()?.length)\"\n [ignoreCheckbox]=\"configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.-w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"\n ((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) ||\n (configTemplateGroup.widthLabelSub24WhenNotTreeView &&\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) &&\n configTemplateGroup.singleSelectItem &&\n (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey))) &&\n !configTemplateGroup.ignoreIconExpandMarginRight\n \"\n [clickExactly]=\"false\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !configTemplateGroup.isViewTreeJson) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [stillOtherOptions]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysStillOtherOptions() : keysStillOtherOptions().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'libs-ui-color-default libs-ui-font-h5r'\n : 'libs-ui-font-h5r'\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"configTemplateGroup.getImage ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getImage : item() | async) : (item()[configTemplateGroup.fieldGetAvatarItem || ''] | async)\"\n [linkImageError]=\"configTemplateGroup.getLinkImageError ? ('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getLinkImageError : item() | async) : ''\"\n [imgTypeIcon]=\"configTemplateGroup.imgTypeIcon\"\n [iconImageClass]=\"item().iconImageClass ? item().iconImageClass : undefined\"\n [classImageInclude]=\"configTemplateGroup.classImageInclude || ''\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEventPopover)=\"handlerEventPopover($event, item())\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n @if (configTemplateGroup.isViewRadio) {\n <libs_ui-components-radio-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.!ml-[8px]]=\"configTemplateGroup.isViewTree\"\n [ignoreRadio]=\"configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && !configTemplateGroup.ignoreIconExpandMarginRight\"\n [clickExactly]=\"false\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.disableItemNotLastLevel && !!item()[configTemplateGroup.fieldGetItems]?.()?.length) ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [active]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'text-[#009cdb] libs-ui-font-h5r '\n : ' libs-ui-font-h5r '\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"\n configTemplateGroup.getImage\n ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: (item().specific_loadImgError && configTemplateGroup.getLinkImageError ? configTemplateGroup.getLinkImageError : configTemplateGroup.getImage) : item() | async)\n : item()[configTemplateGroup.fieldGetAvatarItem || '']\n \"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n </div>\n </div>\n @if ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey)) {\n <i\n class=\"libs-ui-icon-check before:!text-[16px]\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n [class.libs-ui-icon-check]=\"configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\"></i>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length && !configTemplateGroup.isViewTree && !configTemplateGroup.isViewTreeJson) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n </div>\n @if (item().expand || configTemplateGroup.isViewTreeJson) {\n @if (item().level < item().maxLevelGroup && !item()[configTemplateGroup.fieldGetItems]?.()?.length && configTemplateGroup.isViewTree) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n item().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [class.!py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.!py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"item().classIncludeItemNoData || ''\">\n @if (!keySearch()) {\n <span>{{ 'i18n_no_data_yet' | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length) {\n <libs_ui-components-list-templates_group-item\n [keySearch]=\"keySearch()\"\n [items]=\"item()[configTemplateGroup.fieldGetItems]()\"\n [parentItem]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keysChecked]=\"keysChecked()\"\n [disable]=\"(disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)) && !configTemplateGroup.isViewTreeJson\"\n [keysDisableItem]=\"keysDisableItem()\"\n [configTemplateGroup]=\"configTemplateGroup\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChangeView)=\"handlerChangeView($event)\"\n (outChange)=\"handlerChangeChecked($event.item)\" />\n }\n }\n </div>\n }\n }\n\n @if ((!items() || !items().length) && parentItem().level < parentItem().maxLevelGroup) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n parentItem().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : parentItem().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [style.paddingLeft.px]=\"parentItem().level + 1 | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: parentItem().maxLevelGroup + 1 : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : false\"\n [class.py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"parentItem().classIncludeItemNoData || ''\">\n @if (parentItem().iconEmptyDataInGroup) {\n <div class=\"pb-[16px]\">\n <ng-container *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\" />\n </div>\n }\n @if (!keySearch()) {\n @let constHtmlTextNoData = parentItem().textDescriptionGroupWhenNoData || config()?.textNoData || 'i18n_no_result';\n <span>{{ constHtmlTextNoData | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n}\n", styles: [":host{position:relative}:host .libs-ui-list-group-item-line-vertical{position:absolute;width:1px;height:100%;background-color:#e6e7ea}.libs-ui-icon-check{--color: var(--libs-ui-color-default, #226ff5)}.libs-ui-icon-check:before{font-size:16px;color:var(--libs-ui-color-default, #226ff5)}[class*=libs-ui-icon-chevron]:before{color:#6a7383}.libs-ui-list-group-json_icon-item-parent{min-width:6px;min-height:6px;height:6px;width:6px;border-radius:50%;background-color:#226ff5}.libs-ui-list-group-json_icon-item-parent[disabled=true]{background-color:#6a7383!important}\n"] }]
|
|
80
|
+
], template: "@if (configTemplateGroup(); as configTemplateGroup) {\n @if ((configTemplateGroup.isViewTree && !!items().length) || (parentItem().maxLevelGroup > 2 && parentItem().level > 1)) {\n <div\n class=\"libs-ui-list-group-item-line-vertical\"\n [style.left.px]=\"\n parentItem().level\n | LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe\n : parentItem().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"></div>\n }\n @if (items() && items().length) {\n @for (item of items(); track item()[fieldKey()]) {\n <div>\n <div\n [style.marginLeft.px]=\"\n item().level\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n \"\n [style.paddingLeft.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [style.paddingRight.px]=\"\n item().level | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: item().maxLevelGroup : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : !!item()[configTemplateGroup.fieldGetItems]?.()?.length\n \"\n [class]=\"'libs-ui-bg-list-hover py-[6px] pr-[16px] flex items-center relative libs-ui-bg-list-hover-active ' + item()?.classInclude\"\n [class.libs-ui-bg-list-active]=\"configTemplateGroup.singleSelectItem && item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [class.libs-ui-disable]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.pointer-events-none]=\"configTemplateGroup.allowDisableLabel && (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\"\n [class.cursor-pointer]=\"\n !disable() && !(configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !item().isAcceptSelectItem) && !(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)\n \"\n [class.libs-ui-bg-list-active]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.hasBackgroundColorWhenItemSelected && item().isCheckManual\"\n (click)=\"handlerChangeChecked(item(), item()[fieldKey()], disable() || (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !item().isAcceptSelectItem))\">\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTree) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n @if (item().level < item().maxLevelGroup && configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]()?.length) {\n <div [class]=\"'p-[5px]'\">\n <div\n [class]=\"'libs-ui-list-group-json_icon-item-parent'\"\n [attr.disabled]=\"disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) || false\"></div>\n </div>\n }\n <div class=\"flex w-full relative\">\n <div\n #labelRef\n class=\"invisible\"\n [class.hidden]=\"configTemplateGroup.ignoreFixHeightItem\">\n .\n </div>\n <div\n class=\"flex items-center w-full\"\n [class.absolute]=\"!configTemplateGroup.ignoreFixHeightItem\"\n [style.height.px]=\"!configTemplateGroup.ignoreFixHeightItem ? labelRef.clientHeight : 'auto'\">\n @let constHtmlClassIncludeItem = (configTemplateGroup.classIncludeItem || '') + ' w-full';\n @if (!configTemplateGroup.isViewRadio) {\n <libs_ui-components-checkbox-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.ml-[8px]]=\"configTemplateGroup.isViewTree || (configTemplateGroup.isViewTreeJson && !!item()[configTemplateGroup.fieldGetItems]?.()?.length)\"\n [ignoreCheckbox]=\"configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.-w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"\n ((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) ||\n (configTemplateGroup.widthLabelSub24WhenNotTreeView &&\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) &&\n configTemplateGroup.singleSelectItem &&\n (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey))) &&\n !configTemplateGroup.ignoreIconExpandMarginRight\n \"\n [clickExactly]=\"false\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup && !item().isAcceptSelectItem && !configTemplateGroup.isViewTreeJson) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [stillOtherOptions]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysStillOtherOptions() : keysStillOtherOptions().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'libs-ui-color-default libs-ui-font-h5r'\n : 'libs-ui-font-h5r'\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"configTemplateGroup.getImage ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getImage : item() | async) : (item()[configTemplateGroup.fieldGetAvatarItem || ''] | async)\"\n [linkImageError]=\"configTemplateGroup.getLinkImageError ? ('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getLinkImageError : item() | async) : ''\"\n [imgTypeIcon]=\"configTemplateGroup.imgTypeIcon\"\n [iconImageClass]=\"item().iconImageClass ? item().iconImageClass : undefined\"\n [classImageInclude]=\"configTemplateGroup.classImageInclude || ''\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEventPopover)=\"handlerEventPopover($event, item())\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n @if (configTemplateGroup.isViewRadio) {\n <libs_ui-components-radio-single\n [avatarConfig]=\"item().avatarConfig\"\n [class.!ml-[8px]]=\"configTemplateGroup.isViewTree\"\n [ignoreRadio]=\"configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem\"\n [class]=\"constHtmlClassIncludeItem\"\n [class.w-auto]=\"configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem\"\n [class.max-w-[calc(100%-12px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && configTemplateGroup.ignoreIconExpandMarginRight\"\n [class.max-w-[calc(100%-24px)]]=\"((configTemplateGroup.isViewTree && !configTemplateGroup.hasIconCheckSingleSelectItem) || configTemplateGroup.widthLabelSub24WhenNotTreeView) && !configTemplateGroup.ignoreIconExpandMarginRight\"\n [clickExactly]=\"false\"\n [disable]=\"\n disable() ||\n (configTemplateGroup.disableItemNotLastLevel && !!item()[configTemplateGroup.fieldGetItems]?.()?.length) ||\n (configTemplateGroup.singleSelectItem && item().level < item().maxLevelGroup) ||\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length) ||\n false\n \"\n [label]=\"item().fieldLabel\"\n [zIndexLabel]=\"configTemplateGroup.zIndexLabel ?? 1\"\n [active]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length\"\n [classLabelInclude]=\"\n (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\n ? 'text-[#009cdb] libs-ui-font-h5r '\n : ' libs-ui-font-h5r '\n \"\n [dataComponentOutlet]=\"undefined | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getDataComponentOutletItem : item() : fieldKey() : { valueIsEmpty: { item: item() } } | async\"\n [componentOutlet]=\"0 | LibsUiPipesCallFunctionInTemplatePipe: configTemplateGroup.getComponentOutletItem : item() : fieldKey() : { valueIs0: 0 } | async\"\n [popover]=\"item().dataPopover\"\n [linkImage]=\"\n configTemplateGroup.getImage\n ? ('avatar' | LibsUiPipesCallFunctionInTemplatePipe: (item().specific_loadImgError && configTemplateGroup.getLinkImageError ? configTemplateGroup.getLinkImageError : configTemplateGroup.getImage) : item() | async)\n : item()[configTemplateGroup.fieldGetAvatarItem || '']\n \"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChange)=\"handlerChangeChecked(item())\" />\n }\n </div>\n </div>\n @if ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysChecked() : keysChecked().length) && configTemplateGroup.singleSelectItem && (configTemplateGroup.hasIconCheckSingleSelectItem || item().isCheckedByDefaultKey)) {\n <i\n class=\"libs-ui-icon-check before:!text-[16px]\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n [class.libs-ui-icon-check]=\"configTemplateGroup.colorBlueWhenItemSelected && item().isCheckManual\"></i>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length && !configTemplateGroup.isViewTree && !configTemplateGroup.isViewTreeJson) {\n <i\n class=\"libs-ui-icon-chevron-right before:!text-[16px]\"\n [class.rotate-90]=\"item().expand\"\n [class.!ml-[8px]]=\"item().dataPopover\"\n (click)=\"handlerToggleExpand($event, item)\"></i>\n }\n </div>\n @if (item().expand || configTemplateGroup.isViewTreeJson) {\n @if (item().level < item().maxLevelGroup && !item()[configTemplateGroup.fieldGetItems]?.()?.length && configTemplateGroup.isViewTree) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n item().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : item().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [class.!py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.!py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"item().classIncludeItemNoData || ''\">\n @if (!keySearch()) {\n <span>{{ 'i18n_no_data_yet' | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n @if (!!item()[configTemplateGroup.fieldGetItems]?.()?.length) {\n <libs_ui-components-list-templates_group-item\n [keySearch]=\"keySearch()\"\n [items]=\"item()[configTemplateGroup.fieldGetItems]()\"\n [parentItem]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keysChecked]=\"keysChecked()\"\n [disable]=\"(disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe: keysDisableItem() : keysDisableItem()?.length)) && !configTemplateGroup.isViewTreeJson\"\n [keysDisableItem]=\"keysDisableItem()\"\n [configTemplateGroup]=\"configTemplateGroup\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outChangeView)=\"handlerChangeView($event)\"\n (outChange)=\"handlerChangeChecked($event.item)\" />\n }\n }\n </div>\n }\n }\n\n @if ((!items() || !items().length) && parentItem().level < parentItem().maxLevelGroup) {\n <div\n class=\"libs-ui-font-h5r text-[#9ca2ad] relative\"\n [style.marginLeft.px]=\"\n parentItem().level + 1\n | LibsUiComponentsListGroupCalculatorMarginLeftItemPipe\n : parentItem().maxLevelGroup + 1\n : configTemplateGroup.isViewTree\n : configTemplateGroup.isViewTreeJson\n : !(configTemplateGroup.ignoreCheckboxItem || configTemplateGroup.ignoreRadioItem || configTemplateGroup.singleSelectItem)\n : true\n \"\n [style.paddingLeft.px]=\"parentItem().level + 1 | LibsUiComponentsListGroupCalculatorPaddingLeftItemPipe: parentItem().maxLevelGroup + 1 : configTemplateGroup.isViewTree : configTemplateGroup.isViewTreeJson : false\"\n [class.py-[8px]]=\"configTemplateGroup.fieldGetAvatarItem\"\n [class.py-[4px]]=\"!configTemplateGroup.fieldGetAvatarItem\">\n <div [class]=\"parentItem().classIncludeItemNoData || ''\">\n @if (parentItem().iconEmptyDataInGroup) {\n <div class=\"pb-[16px]\">\n <ng-container *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\" />\n </div>\n }\n @if (!keySearch()) {\n @let constHtmlTextNoData = parentItem().textDescriptionGroupWhenNoData || config()?.textNoData || 'i18n_no_result';\n <span>{{ constHtmlTextNoData | translate }}</span>\n }\n @if (keySearch()) {\n <span>{{ 'i18n_no_result' | translate }}</span>\n }\n </div>\n </div>\n }\n}\n", styles: [":host{position:relative}:host .libs-ui-list-group-item-line-vertical{position:absolute;width:1px;height:100%;background-color:#e6e7ea}.libs-ui-icon-check{--color: var(--libs-ui-color-default, #226ff5)}.libs-ui-icon-check:before{font-size:16px;color:var(--libs-ui-color-default, #226ff5)}[class*=libs-ui-icon-chevron]:before{color:#6a7383}.libs-ui-list-group-json_icon-item-parent{min-width:6px;min-height:6px;height:6px;width:6px;border-radius:50%;background-color:#226ff5}.libs-ui-list-group-json_icon-item-parent[disabled=true]{background-color:#6a7383!important}\n"] }]
|
|
81
81
|
}] });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2dyb3VwL2l0ZW0vaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2dyb3VwL2l0ZW0vaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTlGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsMkRBQTJELEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMvSCxPQUFPLEVBQUUscURBQXFELEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNsSCxPQUFPLEVBQUUsc0RBQXNELEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7O0FBc0JwSCxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELGdCQUFnQjtJQUNQLEtBQUssR0FBRyxLQUFLLENBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLG1CQUFtQixHQUFHLEtBQUssRUFBd0IsQ0FBQztJQUNwRCxTQUFTLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDNUIsUUFBUSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsQ0FBQztJQUMvQixXQUFXLEdBQUcsS0FBSyxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUN2QyxlQUFlLEdBQUcsS0FBSyxFQUFjLENBQUM7SUFDdEMsVUFBVSxHQUFHLEtBQUssRUFBTyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxLQUFLLENBQXNCLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELFlBQVksR0FBRyxLQUFLLENBQXNCLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sR0FBRyxLQUFLLEVBQW1CLENBQUM7SUFDbEMscUJBQXFCLEdBQUcsS0FBSyxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUUxRCxpQkFBaUI7SUFDUixhQUFhLEdBQUcsTUFBTSxFQUFXLENBQUM7SUFDbEMsU0FBUyxHQUFHLE1BQU0sRUFBTyxDQUFDO0lBQzFCLDZCQUE2QixHQUFHLE1BQU0sRUFBYyxDQUFDO0lBRTlELGVBQWU7SUFDTCxtQkFBbUIsQ0FBQyxDQUFRLEVBQUUsSUFBeUI7UUFDL0QsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN0QixPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUVqQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxNQUFlO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFUyxvQkFBb0IsQ0FBQyxJQUFTLEVBQUUsU0FBa0IsRUFBRSxPQUFpQjtRQUM3RSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25KLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztZQUN4RixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsbUJBQW1CLENBQUMsS0FBeUIsRUFBRSxJQUFTO1FBQ2hFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO1lBQ2xILE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLDBCQUEwQixDQUFDLElBQWdCO1FBQ25ELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQzt3R0F0RFUsc0NBQXNDOzRGQUF0QyxzQ0FBc0MsNnVEQ3BDbkQsa3lnQkEyT0EsaW5CRHZNYSxzQ0FBc0Msb1ZBYi9DLGlCQUFpQiwrT0FDakIsU0FBUyw2Q0FDVCxlQUFlLHVGQUNmLHNEQUFzRCwwRkFDdEQscURBQXFELHlGQUNyRCwyREFBMkQsK0ZBQzNELCtCQUErQixtRUFDL0IsNEJBQTRCLHFFQUM1Qix1Q0FBdUMscXBCQUN2QyxxQ0FBcUMsOEVBQ3JDLG9DQUFvQzs7NEZBRzNCLHNDQUFzQztrQkFwQmxELFNBQVM7K0JBQ0UsOENBQThDLGNBRzVDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxpQkFBaUI7d0JBQ2pCLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixzREFBc0Q7d0JBQ3RELHFEQUFxRDt3QkFDckQsMkRBQTJEO3dCQUMzRCwrQkFBK0I7d0JBQy9CLDRCQUE0Qjt3QkFDNUIsdUNBQXVDO3dCQUN2QyxxQ0FBcUM7d0JBQ3JDLG9DQUFvQztxQkFDckMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBUWVBFX1BPUE9WRVJfRVZFTlQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gJ0BsaWJzLXVpL2ljb25zJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSUxpc3RDb25maWdJdGVtLCBJTGlzdENvbmZpZ0l0ZW1Hcm91cCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9jaGVjay1zZWxlY3RlZC1ieS1rZXkucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvckxlZnRMaW5lVmVydGljYWxJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NhbGN1bGF0b3ItbGVmdC1saW5lLXZlcnRpY2FsLWl0ZW0ucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvck1hcmdpbkxlZnRJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NhbGN1bGF0b3ItbWFyZ2luLWxlZnQtaXRlbS5waXBlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0R3JvdXBDYWxjdWxhdG9yUGFkZGluZ0xlZnRJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NhbGN1bGF0b3ItcGFkZGluZy1sZWZ0LWl0ZW0ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19ncm91cC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2l0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvclBhZGRpbmdMZWZ0SXRlbVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JMZWZ0TGluZVZlcnRpY2FsSXRlbVBpcGUsXG4gICAgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSxcbiAgICBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cEl0ZW1Db21wb25lbnQge1xuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQ8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+KFtdKTtcbiAgcmVhZG9ubHkgY29uZmlnVGVtcGxhdGVHcm91cCA9IGlucHV0PElMaXN0Q29uZmlnSXRlbUdyb3VwPigpO1xuICByZWFkb25seSBrZXlTZWFyY2ggPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGZpZWxkS2V5ID0gaW5wdXQ8c3RyaW5nPignaWQnKTtcbiAgcmVhZG9ubHkga2V5c0NoZWNrZWQgPSBpbnB1dDxBcnJheTxzdHJpbmc+PihbXSk7XG4gIHJlYWRvbmx5IGtleXNEaXNhYmxlSXRlbSA9IGlucHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IHBhcmVudEl0ZW0gPSBpbnB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dDxJTGlzdENvbmZpZ0l0ZW0+KCk7XG4gIHJlYWRvbmx5IGtleXNTdGlsbE90aGVyT3B0aW9ucyA9IGlucHV0PEFycmF5PHN0cmluZz4+KFtdKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRDaGFuZ2VWaWV3ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBoYW5kbGVyVG9nZ2xlRXhwYW5kKGU6IEV2ZW50LCBpdGVtOiBXcml0YWJsZVNpZ25hbDxhbnk+KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGl0ZW0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50LmV4cGFuZCA9ICFjdXJyZW50LmV4cGFuZDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5vdXRDaGFuZ2VWaWV3LmVtaXQoaXRlbSgpLmV4cGFuZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVZpZXcoZXhwYW5kOiBib29sZWFuKSB7XG4gICAgdGhpcy5vdXRDaGFuZ2VWaWV3LmVtaXQoZXhwYW5kKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlQ2hlY2tlZChpdGVtOiBhbnksIGZpZWxkX2tleT86IHN0cmluZywgZGlzYWJsZT86IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlzYWJsZSB8fCAoZmllbGRfa2V5ICYmIHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgJiYgdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoICYmIHRoaXMua2V5c0Rpc2FibGVJdGVtKCk/LnNvbWUoKGtleSkgPT4ga2V5ID09PSBmaWVsZF9rZXkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXRlbS5sZXZlbCAhPT0gaXRlbS5tYXhMZXZlbEdyb3VwICYmIHRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpPy5pZ25vcmVDaGVja2JveEl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh7IGl0ZW0gfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50UG9wb3ZlcihldmVudDogVFlQRV9QT1BPVkVSX0VWRU5ULCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uZGF0YVBvcG92ZXIgfHwgIXRoaXMuY29uZmlnVGVtcGxhdGVHcm91cCgpIHx8ICF0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uYWN0aW9uUG9wb3ZlckJ5SXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uYWN0aW9uUG9wb3ZlckJ5SXRlbT8uKGl0ZW0sIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5lbWl0KGZsYWcpO1xuICB9XG59XG4iLCJAaWYgKGNvbmZpZ1RlbXBsYXRlR3JvdXAoKTsgYXMgY29uZmlnVGVtcGxhdGVHcm91cCkge1xuICBAaWYgKChjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWUgJiYgISFpdGVtcygpLmxlbmd0aCkgfHwgKHBhcmVudEl0ZW0oKS5tYXhMZXZlbEdyb3VwID4gMiAmJiBwYXJlbnRJdGVtKCkubGV2ZWwgPiAxKSkge1xuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlicy11aS1saXN0LWdyb3VwLWl0ZW0tbGluZS12ZXJ0aWNhbFwiXG4gICAgICBbc3R5bGUubGVmdC5weF09XCJcbiAgICAgICAgcGFyZW50SXRlbSgpLmxldmVsXG4gICAgICAgICAgfCBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvckxlZnRMaW5lVmVydGljYWxJdGVtUGlwZVxuICAgICAgICAgICAgOiBwYXJlbnRJdGVtKCkubWF4TGV2ZWxHcm91cFxuICAgICAgICAgICAgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVcbiAgICAgICAgICAgIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvblxuICAgICAgICAgICAgOiAhKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlQ2hlY2tib3hJdGVtIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlUmFkaW9JdGVtIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSlcbiAgICAgIFwiPjwvZGl2PlxuICB9XG4gIEBpZiAoaXRlbXMoKSAmJiBpdGVtcygpLmxlbmd0aCkge1xuICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXMoKTsgdHJhY2sgaXRlbSgpW2ZpZWxkS2V5KCldKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiXG4gICAgICAgICAgICBpdGVtKCkubGV2ZWxcbiAgICAgICAgICAgICAgfCBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvck1hcmdpbkxlZnRJdGVtUGlwZVxuICAgICAgICAgICAgICAgIDogaXRlbSgpLm1heExldmVsR3JvdXBcbiAgICAgICAgICAgICAgICA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZVxuICAgICAgICAgICAgICAgIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvblxuICAgICAgICAgICAgICAgIDogIShjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVJhZGlvSXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3R5bGUucGFkZGluZ0xlZnQucHhdPVwiXG4gICAgICAgICAgICBpdGVtKCkubGV2ZWwgfCBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvclBhZGRpbmdMZWZ0SXRlbVBpcGU6IGl0ZW0oKS5tYXhMZXZlbEdyb3VwIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbiA6ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtzdHlsZS5wYWRkaW5nUmlnaHQucHhdPVwiXG4gICAgICAgICAgICBpdGVtKCkubGV2ZWwgfCBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvclBhZGRpbmdMZWZ0SXRlbVBpcGU6IGl0ZW0oKS5tYXhMZXZlbEdyb3VwIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbiA6ICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzc109XCInbGlicy11aS1iZy1saXN0LWhvdmVyIHB5LVs2cHhdIHByLVsxNnB4XSBmbGV4IGl0ZW1zLWNlbnRlciByZWxhdGl2ZSBsaWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlICcgKyBpdGVtKCk/LmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktYmctbGlzdC1hY3RpdmVdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtICYmIGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6IGtleXNDaGVja2VkKCkgOiBrZXlzQ2hlY2tlZCgpLmxlbmd0aFwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmFsbG93RGlzYWJsZUxhYmVsICYmIChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpXCJcbiAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmFsbG93RGlzYWJsZUxhYmVsICYmIChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpXCJcbiAgICAgICAgICBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiIWRpc2FibGUoKSAmJiAhKGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSAmJiBpdGVtKCkubGV2ZWwgPCBpdGVtKCkubWF4TGV2ZWxHcm91cCkgJiYgIShpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWFjdGl2ZV09XCIoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoKSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0JhY2tncm91bmRDb2xvcldoZW5JdGVtU2VsZWN0ZWQgJiYgaXRlbSgpLmlzQ2hlY2tNYW51YWxcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2hhbmdlQ2hlY2tlZChpdGVtKCksIGl0ZW0oKVtmaWVsZEtleSgpXSwgZGlzYWJsZSgpIHx8IChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0gJiYgaXRlbSgpLmxldmVsIDwgaXRlbSgpLm1heExldmVsR3JvdXApKVwiPlxuICAgICAgICAgIEBpZiAoaXRlbSgpLmxldmVsIDwgaXRlbSgpLm1heExldmVsR3JvdXAgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlKSB7XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IGJlZm9yZTohdGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICBbY2xhc3Mucm90YXRlLTkwXT1cIml0ZW0oKS5leHBhbmRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclRvZ2dsZUV4cGFuZCgkZXZlbnQsIGl0ZW0pXCI+PC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGl0ZW0oKS5sZXZlbCA8IGl0ZW0oKS5tYXhMZXZlbEdyb3VwICYmIGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb24gJiYgISFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSgpPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidwLVs1cHhdJ1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWxpc3QtZ3JvdXAtanNvbl9pY29uLWl0ZW0tcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZSgpIHx8IChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpIHx8IGZhbHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNsYWJlbFJlZlxuICAgICAgICAgICAgICBjbGFzcz1cImludmlzaWJsZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVGaXhIZWlnaHRJdGVtXCI+XG4gICAgICAgICAgICAgIC5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hYnNvbHV0ZV09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVGaXhIZWlnaHRJdGVtXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVGaXhIZWlnaHRJdGVtID8gbGFiZWxSZWYuY2xpZW50SGVpZ2h0IDogJ2F1dG8nXCI+XG4gICAgICAgICAgICAgIEBsZXQgY29uc3RIdG1sQ2xhc3NJbmNsdWRlSXRlbSA9IChjb25maWdUZW1wbGF0ZUdyb3VwLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycpICsgJyB3LWZ1bGwnO1xuICAgICAgICAgICAgICBAaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGVcbiAgICAgICAgICAgICAgICAgIFthdmF0YXJDb25maWddPVwiaXRlbSgpLmF2YXRhckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWwtWzhweF1dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlIHx8IChjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uICYmICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpXCJcbiAgICAgICAgICAgICAgICAgIFtpZ25vcmVDaGVja2JveF09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbnN0SHRtbENsYXNzSW5jbHVkZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLi13LWF1dG9dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1heC13LVtjYWxjKDEwMCUtMTJweCldXT1cIigoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0pIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAud2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3KSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUljb25FeHBhbmRNYXJnaW5SaWdodFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWF4LXctW2NhbGMoMTAwJS0yNHB4KV1dPVwiXG4gICAgICAgICAgICAgICAgICAgICgoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ1RlbXBsYXRlR3JvdXAud2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlnVGVtcGxhdGVHcm91cC5oYXNJY29uQ2hlY2tTaW5nbGVTZWxlY3RJdGVtIHx8IGl0ZW0oKS5pc0NoZWNrZWRCeURlZmF1bHRLZXkpKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlSWNvbkV4cGFuZE1hcmdpblJpZ2h0XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbekluZGV4TGFiZWxdPVwiY29uZmlnVGVtcGxhdGVHcm91cC56SW5kZXhMYWJlbCA/PyAxXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSAmJiBpdGVtKCkubGV2ZWwgPCBpdGVtKCkubWF4TGV2ZWxHcm91cCAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6IGtleXNEaXNhYmxlSXRlbSgpIDoga2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbSgpLmZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgIFtzdGlsbE90aGVyT3B0aW9uc109XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzU3RpbGxPdGhlck9wdGlvbnMoKSA6IGtleXNTdGlsbE90aGVyT3B0aW9ucygpLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzQ2hlY2tlZCgpIDoga2V5c0NoZWNrZWQoKS5sZW5ndGgpICYmIGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmNvbG9yQmx1ZVdoZW5JdGVtU2VsZWN0ZWQgJiYgaXRlbSgpLmlzQ2hlY2tNYW51YWxcbiAgICAgICAgICAgICAgICAgICAgICA/ICdsaWJzLXVpLWNvbG9yLWRlZmF1bHQgbGlicy11aS1mb250LWg1cidcbiAgICAgICAgICAgICAgICAgICAgICA6ICdsaWJzLXVpLWZvbnQtaDVyJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhQ29tcG9uZW50T3V0bGV0XT1cInVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0RGF0YUNvbXBvbmVudE91dGxldEl0ZW0gOiBpdGVtKCkgOiBmaWVsZEtleSgpIDogeyB2YWx1ZUlzRW1wdHk6IHsgaXRlbTogaXRlbSgpIH0gfSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRPdXRsZXRdPVwiMCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q29tcG9uZW50T3V0bGV0SXRlbSA6IGl0ZW0oKSA6IGZpZWxkS2V5KCkgOiB7IHZhbHVlSXMwOiAwIH0gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlID8gKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogY29uZmlnVGVtcGxhdGVHcm91cC5nZXRJbWFnZSA6IGl0ZW0oKSB8IGFzeW5jKSA6IChpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW0gfHwgJyddIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgIFtsaW5rSW1hZ2VFcnJvcl09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmdldExpbmtJbWFnZUVycm9yID8gKCdhdmF0YXJfZXJyb3InIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA6IGl0ZW0oKSB8IGFzeW5jKSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtpbWdUeXBlSWNvbl09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmltZ1R5cGVJY29uXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uSW1hZ2VDbGFzc109XCJpdGVtKCkuaWNvbkltYWdlQ2xhc3MgPyBpdGVtKCkuaWNvbkltYWdlQ2xhc3MgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW1hZ2VJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbWFnZUluY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKG91dEV2ZW50UG9wb3Zlcik9XCJoYW5kbGVyRXZlbnRQb3BvdmVyKCRldmVudCwgaXRlbSgpKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VDaGVja2VkKGl0ZW0oKSlcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdSYWRpbykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tc2luZ2xlXG4gICAgICAgICAgICAgICAgICBbYXZhdGFyQ29uZmlnXT1cIml0ZW0oKS5hdmF0YXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLiFtbC1bOHB4XV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVcIlxuICAgICAgICAgICAgICAgICAgW2lnbm9yZVJhZGlvXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlUmFkaW9JdGVtIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29uc3RIdG1sQ2xhc3NJbmNsdWRlSXRlbVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Mudy1hdXRvXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5oYXNJY29uQ2hlY2tTaW5nbGVTZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5tYXgtdy1bY2FsYygxMDAlLTEycHgpXV09XCIoKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5oYXNJY29uQ2hlY2tTaW5nbGVTZWxlY3RJdGVtKSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLndpZHRoTGFiZWxTdWIyNFdoZW5Ob3RUcmVlVmlldykgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVJY29uRXhwYW5kTWFyZ2luUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1heC13LVtjYWxjKDEwMCUtMjRweCldXT1cIigoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0pIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAud2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3KSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVJY29uRXhwYW5kTWFyZ2luUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb25maWdUZW1wbGF0ZUdyb3VwLmRpc2FibGVJdGVtTm90TGFzdExldmVsICYmICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0gJiYgaXRlbSgpLmxldmVsIDwgaXRlbSgpLm1heExldmVsR3JvdXApIHx8XG4gICAgICAgICAgICAgICAgICAgIChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0oKS5maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFt6SW5kZXhMYWJlbF09XCJjb25maWdUZW1wbGF0ZUdyb3VwLnpJbmRleExhYmVsID8/IDFcIlxuICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzQ2hlY2tlZCgpIDoga2V5c0NoZWNrZWQoKS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzTGFiZWxJbmNsdWRlXT1cIlxuICAgICAgICAgICAgICAgICAgICAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoKSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0gJiYgY29uZmlnVGVtcGxhdGVHcm91cC5jb2xvckJsdWVXaGVuSXRlbVNlbGVjdGVkICYmIGl0ZW0oKS5pc0NoZWNrTWFudWFsXG4gICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1bIzAwOWNkYl0gbGlicy11aS1mb250LWg1ciAnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnIGxpYnMtdWktZm9udC1oNXIgJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhQ29tcG9uZW50T3V0bGV0XT1cInVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0RGF0YUNvbXBvbmVudE91dGxldEl0ZW0gOiBpdGVtKCkgOiBmaWVsZEtleSgpIDogeyB2YWx1ZUlzRW1wdHk6IHsgaXRlbTogaXRlbSgpIH0gfSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRPdXRsZXRdPVwiMCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q29tcG9uZW50T3V0bGV0SXRlbSA6IGl0ZW0oKSA6IGZpZWxkS2V5KCkgOiB7IHZhbHVlSXMwOiAwIH0gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgID8gKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogKGl0ZW0oKS5zcGVjaWZpY19sb2FkSW1nRXJyb3IgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0TGlua0ltYWdlRXJyb3IgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlKSA6IGl0ZW0oKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgIDogaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZUNoZWNrZWQoaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6IGtleXNDaGVja2VkKCkgOiBrZXlzQ2hlY2tlZCgpLmxlbmd0aCkgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtICYmIChjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0gfHwgaXRlbSgpLmlzQ2hlY2tlZEJ5RGVmYXVsdEtleSkpIHtcbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWNoZWNrIGJlZm9yZTohdGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICBbY2xhc3MuIW1sLVs4cHhdXT1cIml0ZW0oKS5kYXRhUG9wb3ZlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tY2hlY2tdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5jb2xvckJsdWVXaGVuSXRlbVNlbGVjdGVkICYmIGl0ZW0oKS5pc0NoZWNrTWFudWFsXCI+PC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGggJiYgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbikge1xuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCBiZWZvcmU6IXRleHQtWzE2cHhdXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnJvdGF0ZS05MF09XCJpdGVtKCkuZXhwYW5kXCJcbiAgICAgICAgICAgICAgW2NsYXNzLiFtbC1bOHB4XV09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclRvZ2dsZUV4cGFuZCgkZXZlbnQsIGl0ZW0pXCI+PC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoaXRlbSgpLmV4cGFuZCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uKSB7XG4gICAgICAgICAgQGlmIChpdGVtKCkubGV2ZWwgPCBpdGVtKCkubWF4TGV2ZWxHcm91cCAmJiAhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGggJiYgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg1ciB0ZXh0LVsjOWNhMmFkXSByZWxhdGl2ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgIGl0ZW0oKS5sZXZlbCArIDFcbiAgICAgICAgICAgICAgICAgIHwgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGVcbiAgICAgICAgICAgICAgICAgICAgOiBpdGVtKCkubWF4TGV2ZWxHcm91cCArIDFcbiAgICAgICAgICAgICAgICAgICAgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVcbiAgICAgICAgICAgICAgICAgICAgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uXG4gICAgICAgICAgICAgICAgICAgIDogIShjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVJhZGlvSXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuIXB5LVs4cHhdXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtXCJcbiAgICAgICAgICAgICAgW2NsYXNzLiFweS1bNHB4XV09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiaXRlbSgpLmNsYXNzSW5jbHVkZUl0ZW1Ob0RhdGEgfHwgJydcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ2kxOG5fbm9fZGF0YV95ZXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGtleVNlYXJjaCgpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnaTE4bl9ub19yZXN1bHQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX2dyb3VwLWl0ZW1cbiAgICAgICAgICAgICAgW2tleVNlYXJjaF09XCJrZXlTZWFyY2goKVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSgpXCJcbiAgICAgICAgICAgICAgW3BhcmVudEl0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgICBba2V5c0NoZWNrZWRdPVwia2V5c0NoZWNrZWQoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cIihkaXNhYmxlKCkgfHwgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6IGtleXNEaXNhYmxlSXRlbSgpIDoga2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aCkpICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uXCJcbiAgICAgICAgICAgICAgW2tleXNEaXNhYmxlSXRlbV09XCJrZXlzRGlzYWJsZUl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtjb25maWdUZW1wbGF0ZUdyb3VwXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXBcIlxuICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvdXRDaGFuZ2VWaWV3KT1cImhhbmRsZXJDaGFuZ2VWaWV3KCRldmVudClcIlxuICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VDaGVja2VkKCRldmVudC5pdGVtKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cblxuICBAaWYgKCghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpICYmIHBhcmVudEl0ZW0oKS5sZXZlbCA8IHBhcmVudEl0ZW0oKS5tYXhMZXZlbEdyb3VwKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyM5Y2EyYWRdIHJlbGF0aXZlXCJcbiAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cIlxuICAgICAgICBwYXJlbnRJdGVtKCkubGV2ZWwgKyAxXG4gICAgICAgICAgfCBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvck1hcmdpbkxlZnRJdGVtUGlwZVxuICAgICAgICAgICAgOiBwYXJlbnRJdGVtKCkubWF4TGV2ZWxHcm91cCArIDFcbiAgICAgICAgICAgIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlXG4gICAgICAgICAgICA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb25cbiAgICAgICAgICAgIDogIShjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVJhZGlvSXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgIFwiXG4gICAgICBbc3R5bGUucGFkZGluZ0xlZnQucHhdPVwicGFyZW50SXRlbSgpLmxldmVsICsgMSB8IExpYnNVaUNvbXBvbmVudHNMaXN0R3JvdXBDYWxjdWxhdG9yUGFkZGluZ0xlZnRJdGVtUGlwZTogcGFyZW50SXRlbSgpLm1heExldmVsR3JvdXAgKyAxIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbiA6IGZhbHNlXCJcbiAgICAgIFtjbGFzcy5weS1bOHB4XV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0QXZhdGFySXRlbVwiXG4gICAgICBbY2xhc3MucHktWzRweF1dPVwiIWNvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtXCI+XG4gICAgICA8ZGl2IFtjbGFzc109XCJwYXJlbnRJdGVtKCkuY2xhc3NJbmNsdWRlSXRlbU5vRGF0YSB8fCAnJ1wiPlxuICAgICAgICBAaWYgKHBhcmVudEl0ZW0oKS5pY29uRW1wdHlEYXRhSW5Hcm91cCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi1bMTZweF1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiKGtleVNlYXJjaCgpID8gJ25vLXJlc3VsdCcgOiAnbm8tZGF0YScpIHwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB8IGFzeW5jXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSkge1xuICAgICAgICAgIEBsZXQgY29uc3RIdG1sVGV4dE5vRGF0YSA9IHBhcmVudEl0ZW0oKS50ZXh0RGVzY3JpcHRpb25Hcm91cFdoZW5Ob0RhdGEgfHwgY29uZmlnKCk/LnRleHROb0RhdGEgfHwgJ2kxOG5fbm9fcmVzdWx0JztcbiAgICAgICAgICA8c3Bhbj57eyBjb25zdEh0bWxUZXh0Tm9EYXRhIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoa2V5U2VhcmNoKCkpIHtcbiAgICAgICAgICA8c3Bhbj57eyAnaTE4bl9ub19yZXN1bHQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2dyb3VwL2l0ZW0vaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2dyb3VwL2l0ZW0vaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTlGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsMkRBQTJELEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMvSCxPQUFPLEVBQUUscURBQXFELEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNsSCxPQUFPLEVBQUUsc0RBQXNELEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7O0FBc0JwSCxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELGdCQUFnQjtJQUNQLEtBQUssR0FBRyxLQUFLLENBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLG1CQUFtQixHQUFHLEtBQUssRUFBd0IsQ0FBQztJQUNwRCxTQUFTLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDNUIsUUFBUSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsQ0FBQztJQUMvQixXQUFXLEdBQUcsS0FBSyxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUN2QyxlQUFlLEdBQUcsS0FBSyxFQUFjLENBQUM7SUFDdEMsVUFBVSxHQUFHLEtBQUssRUFBTyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxLQUFLLENBQXNCLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELFlBQVksR0FBRyxLQUFLLENBQXNCLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sR0FBRyxLQUFLLEVBQW1CLENBQUM7SUFDbEMscUJBQXFCLEdBQUcsS0FBSyxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUUxRCxpQkFBaUI7SUFDUixhQUFhLEdBQUcsTUFBTSxFQUFXLENBQUM7SUFDbEMsU0FBUyxHQUFHLE1BQU0sRUFBTyxDQUFDO0lBQzFCLDZCQUE2QixHQUFHLE1BQU0sRUFBYyxDQUFDO0lBRTlELGVBQWU7SUFDTCxtQkFBbUIsQ0FBQyxDQUFRLEVBQUUsSUFBeUI7UUFDL0QsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN0QixPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUVqQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxNQUFlO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFUyxvQkFBb0IsQ0FBQyxJQUFTLEVBQUUsU0FBa0IsRUFBRSxPQUFpQjtRQUM3RSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25KLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztZQUNwSCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsbUJBQW1CLENBQUMsS0FBeUIsRUFBRSxJQUFTO1FBQ2hFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO1lBQ2xILE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLDBCQUEwQixDQUFDLElBQWdCO1FBQ25ELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQzt3R0F0RFUsc0NBQXNDOzRGQUF0QyxzQ0FBc0MsNnVEQ3BDbkQsczVnQkE2T0EsaW5CRHpNYSxzQ0FBc0Msb1ZBYi9DLGlCQUFpQiwrT0FDakIsU0FBUyw2Q0FDVCxlQUFlLHVGQUNmLHNEQUFzRCwwRkFDdEQscURBQXFELHlGQUNyRCwyREFBMkQsK0ZBQzNELCtCQUErQixtRUFDL0IsNEJBQTRCLHFFQUM1Qix1Q0FBdUMscXBCQUN2QyxxQ0FBcUMsOEVBQ3JDLG9DQUFvQzs7NEZBRzNCLHNDQUFzQztrQkFwQmxELFNBQVM7K0JBQ0UsOENBQThDLGNBRzVDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxpQkFBaUI7d0JBQ2pCLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixzREFBc0Q7d0JBQ3RELHFEQUFxRDt3QkFDckQsMkRBQTJEO3dCQUMzRCwrQkFBK0I7d0JBQy9CLDRCQUE0Qjt3QkFDNUIsdUNBQXVDO3dCQUN2QyxxQ0FBcUM7d0JBQ3JDLG9DQUFvQztxQkFDckMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBUWVBFX1BPUE9WRVJfRVZFTlQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gJ0BsaWJzLXVpL2ljb25zJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSUxpc3RDb25maWdJdGVtLCBJTGlzdENvbmZpZ0l0ZW1Hcm91cCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9jaGVjay1zZWxlY3RlZC1ieS1rZXkucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvckxlZnRMaW5lVmVydGljYWxJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NhbGN1bGF0b3ItbGVmdC1saW5lLXZlcnRpY2FsLWl0ZW0ucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvck1hcmdpbkxlZnRJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NhbGN1bGF0b3ItbWFyZ2luLWxlZnQtaXRlbS5waXBlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0R3JvdXBDYWxjdWxhdG9yUGFkZGluZ0xlZnRJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NhbGN1bGF0b3ItcGFkZGluZy1sZWZ0LWl0ZW0ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19ncm91cC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2l0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvclBhZGRpbmdMZWZ0SXRlbVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JMZWZ0TGluZVZlcnRpY2FsSXRlbVBpcGUsXG4gICAgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSxcbiAgICBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cEl0ZW1Db21wb25lbnQge1xuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQ8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+KFtdKTtcbiAgcmVhZG9ubHkgY29uZmlnVGVtcGxhdGVHcm91cCA9IGlucHV0PElMaXN0Q29uZmlnSXRlbUdyb3VwPigpO1xuICByZWFkb25seSBrZXlTZWFyY2ggPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGZpZWxkS2V5ID0gaW5wdXQ8c3RyaW5nPignaWQnKTtcbiAgcmVhZG9ubHkga2V5c0NoZWNrZWQgPSBpbnB1dDxBcnJheTxzdHJpbmc+PihbXSk7XG4gIHJlYWRvbmx5IGtleXNEaXNhYmxlSXRlbSA9IGlucHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IHBhcmVudEl0ZW0gPSBpbnB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dDxJTGlzdENvbmZpZ0l0ZW0+KCk7XG4gIHJlYWRvbmx5IGtleXNTdGlsbE90aGVyT3B0aW9ucyA9IGlucHV0PEFycmF5PHN0cmluZz4+KFtdKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRDaGFuZ2VWaWV3ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBoYW5kbGVyVG9nZ2xlRXhwYW5kKGU6IEV2ZW50LCBpdGVtOiBXcml0YWJsZVNpZ25hbDxhbnk+KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGl0ZW0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50LmV4cGFuZCA9ICFjdXJyZW50LmV4cGFuZDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gICAgdGhpcy5vdXRDaGFuZ2VWaWV3LmVtaXQoaXRlbSgpLmV4cGFuZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVZpZXcoZXhwYW5kOiBib29sZWFuKSB7XG4gICAgdGhpcy5vdXRDaGFuZ2VWaWV3LmVtaXQoZXhwYW5kKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlQ2hlY2tlZChpdGVtOiBhbnksIGZpZWxkX2tleT86IHN0cmluZywgZGlzYWJsZT86IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlzYWJsZSB8fCAoZmllbGRfa2V5ICYmIHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgJiYgdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoICYmIHRoaXMua2V5c0Rpc2FibGVJdGVtKCk/LnNvbWUoKGtleSkgPT4ga2V5ID09PSBmaWVsZF9rZXkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXRlbS5sZXZlbCAhPT0gaXRlbS5tYXhMZXZlbEdyb3VwICYmICFpdGVtLmlzQWNjZXB0U2VsZWN0SXRlbSAmJiB0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKT8uaWdub3JlQ2hlY2tib3hJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoeyBpdGVtIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudFBvcG92ZXIoZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCwgaXRlbTogYW55KSB7XG4gICAgaWYgKCFpdGVtIHx8ICFpdGVtLmRhdGFQb3BvdmVyIHx8ICF0aGlzLmNvbmZpZ1RlbXBsYXRlR3JvdXAoKSB8fCAhdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmFjdGlvblBvcG92ZXJCeUl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZUdyb3VwKCk/LmFjdGlvblBvcG92ZXJCeUl0ZW0/LihpdGVtLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZzogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIuZW1pdChmbGFnKTtcbiAgfVxufVxuIiwiQGlmIChjb25maWdUZW1wbGF0ZUdyb3VwKCk7IGFzIGNvbmZpZ1RlbXBsYXRlR3JvdXApIHtcbiAgQGlmICgoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICEhaXRlbXMoKS5sZW5ndGgpIHx8IChwYXJlbnRJdGVtKCkubWF4TGV2ZWxHcm91cCA+IDIgJiYgcGFyZW50SXRlbSgpLmxldmVsID4gMSkpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpYnMtdWktbGlzdC1ncm91cC1pdGVtLWxpbmUtdmVydGljYWxcIlxuICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXG4gICAgICAgIHBhcmVudEl0ZW0oKS5sZXZlbFxuICAgICAgICAgIHwgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JMZWZ0TGluZVZlcnRpY2FsSXRlbVBpcGVcbiAgICAgICAgICAgIDogcGFyZW50SXRlbSgpLm1heExldmVsR3JvdXBcbiAgICAgICAgICAgIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlXG4gICAgICAgICAgICA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb25cbiAgICAgICAgICAgIDogIShjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVJhZGlvSXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXG4gICAgICBcIj48L2Rpdj5cbiAgfVxuICBAaWYgKGl0ZW1zKCkgJiYgaXRlbXMoKS5sZW5ndGgpIHtcbiAgICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXSkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cIlxuICAgICAgICAgICAgaXRlbSgpLmxldmVsXG4gICAgICAgICAgICAgIHwgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGVcbiAgICAgICAgICAgICAgICA6IGl0ZW0oKS5tYXhMZXZlbEdyb3VwXG4gICAgICAgICAgICAgICAgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVcbiAgICAgICAgICAgICAgICA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb25cbiAgICAgICAgICAgICAgICA6ICEoY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVDaGVja2JveEl0ZW0gfHwgY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVSYWRpb0l0ZW0gfHwgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3N0eWxlLnBhZGRpbmdMZWZ0LnB4XT1cIlxuICAgICAgICAgICAgaXRlbSgpLmxldmVsIHwgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JQYWRkaW5nTGVmdEl0ZW1QaXBlOiBpdGVtKCkubWF4TGV2ZWxHcm91cCA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb24gOiAhIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3R5bGUucGFkZGluZ1JpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgaXRlbSgpLmxldmVsIHwgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JQYWRkaW5nTGVmdEl0ZW1QaXBlOiBpdGVtKCkubWF4TGV2ZWxHcm91cCA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb24gOiAhIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktYmctbGlzdC1ob3ZlciBweS1bNnB4XSBwci1bMTZweF0gZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmUgbGlicy11aS1iZy1saXN0LWhvdmVyLWFjdGl2ZSAnICsgaXRlbSgpPy5jbGFzc0luY2x1ZGVcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtYWN0aXZlXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSAmJiBpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzQ2hlY2tlZCgpIDoga2V5c0NoZWNrZWQoKS5sZW5ndGhcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5hbGxvd0Rpc2FibGVMYWJlbCAmJiAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0Rpc2FibGVJdGVtKCkgOiBrZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5hbGxvd0Rpc2FibGVMYWJlbCAmJiAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0Rpc2FibGVJdGVtKCkgOiBrZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIlxuICAgICAgICAgICAgIWRpc2FibGUoKSAmJiAhKGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSAmJiBpdGVtKCkubGV2ZWwgPCBpdGVtKCkubWF4TGV2ZWxHcm91cCAmJiAhaXRlbSgpLmlzQWNjZXB0U2VsZWN0SXRlbSkgJiYgIShpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWFjdGl2ZV09XCIoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoKSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0JhY2tncm91bmRDb2xvcldoZW5JdGVtU2VsZWN0ZWQgJiYgaXRlbSgpLmlzQ2hlY2tNYW51YWxcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2hhbmdlQ2hlY2tlZChpdGVtKCksIGl0ZW0oKVtmaWVsZEtleSgpXSwgZGlzYWJsZSgpIHx8IChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0gJiYgaXRlbSgpLmxldmVsIDwgaXRlbSgpLm1heExldmVsR3JvdXAgJiYgIWl0ZW0oKS5pc0FjY2VwdFNlbGVjdEl0ZW0pKVwiPlxuICAgICAgICAgIEBpZiAoaXRlbSgpLmxldmVsIDwgaXRlbSgpLm1heExldmVsR3JvdXAgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlKSB7XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IGJlZm9yZTohdGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICBbY2xhc3Mucm90YXRlLTkwXT1cIml0ZW0oKS5leHBhbmRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclRvZ2dsZUV4cGFuZCgkZXZlbnQsIGl0ZW0pXCI+PC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGl0ZW0oKS5sZXZlbCA8IGl0ZW0oKS5tYXhMZXZlbEdyb3VwICYmIGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb24gJiYgISFpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSgpPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidwLVs1cHhdJ1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWxpc3QtZ3JvdXAtanNvbl9pY29uLWl0ZW0tcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZSgpIHx8IChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpIHx8IGZhbHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNsYWJlbFJlZlxuICAgICAgICAgICAgICBjbGFzcz1cImludmlzaWJsZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVGaXhIZWlnaHRJdGVtXCI+XG4gICAgICAgICAgICAgIC5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hYnNvbHV0ZV09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVGaXhIZWlnaHRJdGVtXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVGaXhIZWlnaHRJdGVtID8gbGFiZWxSZWYuY2xpZW50SGVpZ2h0IDogJ2F1dG8nXCI+XG4gICAgICAgICAgICAgIEBsZXQgY29uc3RIdG1sQ2xhc3NJbmNsdWRlSXRlbSA9IChjb25maWdUZW1wbGF0ZUdyb3VwLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycpICsgJyB3LWZ1bGwnO1xuICAgICAgICAgICAgICBAaWYgKCFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGVcbiAgICAgICAgICAgICAgICAgIFthdmF0YXJDb25maWddPVwiaXRlbSgpLmF2YXRhckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWwtWzhweF1dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlIHx8IChjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uICYmICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpXCJcbiAgICAgICAgICAgICAgICAgIFtpZ25vcmVDaGVja2JveF09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbnN0SHRtbENsYXNzSW5jbHVkZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLi13LWF1dG9dPVwiY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1heC13LVtjYWxjKDEwMCUtMTJweCldXT1cIigoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0pIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAud2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3KSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUljb25FeHBhbmRNYXJnaW5SaWdodFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWF4LXctW2NhbGMoMTAwJS0yNHB4KV1dPVwiXG4gICAgICAgICAgICAgICAgICAgICgoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ1RlbXBsYXRlR3JvdXAud2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlnVGVtcGxhdGVHcm91cC5oYXNJY29uQ2hlY2tTaW5nbGVTZWxlY3RJdGVtIHx8IGl0ZW0oKS5pc0NoZWNrZWRCeURlZmF1bHRLZXkpKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlSWNvbkV4cGFuZE1hcmdpblJpZ2h0XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbekluZGV4TGFiZWxdPVwiY29uZmlnVGVtcGxhdGVHcm91cC56SW5kZXhMYWJlbCA/PyAxXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSAmJiBpdGVtKCkubGV2ZWwgPCBpdGVtKCkubWF4TGV2ZWxHcm91cCAmJiAhaXRlbSgpLmlzQWNjZXB0U2VsZWN0SXRlbSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6IGtleXNEaXNhYmxlSXRlbSgpIDoga2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbSgpLmZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgIFtzdGlsbE90aGVyT3B0aW9uc109XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzU3RpbGxPdGhlck9wdGlvbnMoKSA6IGtleXNTdGlsbE90aGVyT3B0aW9ucygpLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzQ2hlY2tlZCgpIDoga2V5c0NoZWNrZWQoKS5sZW5ndGgpICYmIGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLmNvbG9yQmx1ZVdoZW5JdGVtU2VsZWN0ZWQgJiYgaXRlbSgpLmlzQ2hlY2tNYW51YWxcbiAgICAgICAgICAgICAgICAgICAgICA/ICdsaWJzLXVpLWNvbG9yLWRlZmF1bHQgbGlicy11aS1mb250LWg1cidcbiAgICAgICAgICAgICAgICAgICAgICA6ICdsaWJzLXVpLWZvbnQtaDVyJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhQ29tcG9uZW50T3V0bGV0XT1cInVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0RGF0YUNvbXBvbmVudE91dGxldEl0ZW0gOiBpdGVtKCkgOiBmaWVsZEtleSgpIDogeyB2YWx1ZUlzRW1wdHk6IHsgaXRlbTogaXRlbSgpIH0gfSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRPdXRsZXRdPVwiMCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q29tcG9uZW50T3V0bGV0SXRlbSA6IGl0ZW0oKSA6IGZpZWxkS2V5KCkgOiB7IHZhbHVlSXMwOiAwIH0gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlID8gKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogY29uZmlnVGVtcGxhdGVHcm91cC5nZXRJbWFnZSA6IGl0ZW0oKSB8IGFzeW5jKSA6IChpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW0gfHwgJyddIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgIFtsaW5rSW1hZ2VFcnJvcl09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmdldExpbmtJbWFnZUVycm9yID8gKCdhdmF0YXJfZXJyb3InIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA6IGl0ZW0oKSB8IGFzeW5jKSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtpbWdUeXBlSWNvbl09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmltZ1R5cGVJY29uXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uSW1hZ2VDbGFzc109XCJpdGVtKCkuaWNvbkltYWdlQ2xhc3MgPyBpdGVtKCkuaWNvbkltYWdlQ2xhc3MgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW1hZ2VJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuY2xhc3NJbWFnZUluY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKG91dEV2ZW50UG9wb3Zlcik9XCJoYW5kbGVyRXZlbnRQb3BvdmVyKCRldmVudCwgaXRlbSgpKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VDaGVja2VkKGl0ZW0oKSlcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdSYWRpbykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tc2luZ2xlXG4gICAgICAgICAgICAgICAgICBbYXZhdGFyQ29uZmlnXT1cIml0ZW0oKS5hdmF0YXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLiFtbC1bOHB4XV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVcIlxuICAgICAgICAgICAgICAgICAgW2lnbm9yZVJhZGlvXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaWdub3JlUmFkaW9JdGVtIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAuc2luZ2xlU2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29uc3RIdG1sQ2xhc3NJbmNsdWRlSXRlbVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Mudy1hdXRvXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5oYXNJY29uQ2hlY2tTaW5nbGVTZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5tYXgtdy1bY2FsYygxMDAlLTEycHgpXV09XCIoKGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5oYXNJY29uQ2hlY2tTaW5nbGVTZWxlY3RJdGVtKSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLndpZHRoTGFiZWxTdWIyNFdoZW5Ob3RUcmVlVmlldykgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVJY29uRXhwYW5kTWFyZ2luUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1heC13LVtjYWxjKDEwMCUtMjRweCldXT1cIigoY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0pIHx8IGNvbmZpZ1RlbXBsYXRlR3JvdXAud2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3KSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pZ25vcmVJY29uRXhwYW5kTWFyZ2luUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb25maWdUZW1wbGF0ZUdyb3VwLmRpc2FibGVJdGVtTm90TGFzdExldmVsICYmICEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0gJiYgaXRlbSgpLmxldmVsIDwgaXRlbSgpLm1heExldmVsR3JvdXApIHx8XG4gICAgICAgICAgICAgICAgICAgIChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzRGlzYWJsZUl0ZW0oKSA6IGtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0oKS5maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFt6SW5kZXhMYWJlbF09XCJjb25maWdUZW1wbGF0ZUdyb3VwLnpJbmRleExhYmVsID8/IDFcIlxuICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOiBrZXlzQ2hlY2tlZCgpIDoga2V5c0NoZWNrZWQoKS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzTGFiZWxJbmNsdWRlXT1cIlxuICAgICAgICAgICAgICAgICAgICAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZToga2V5c0NoZWNrZWQoKSA6IGtleXNDaGVja2VkKCkubGVuZ3RoKSAmJiBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0gJiYgY29uZmlnVGVtcGxhdGVHcm91cC5jb2xvckJsdWVXaGVuSXRlbVNlbGVjdGVkICYmIGl0ZW0oKS5pc0NoZWNrTWFudWFsXG4gICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1bIzAwOWNkYl0gbGlicy11aS1mb250LWg1ciAnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnIGxpYnMtdWktZm9udC1oNXIgJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhQ29tcG9uZW50T3V0bGV0XT1cInVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0RGF0YUNvbXBvbmVudE91dGxldEl0ZW0gOiBpdGVtKCkgOiBmaWVsZEtleSgpIDogeyB2YWx1ZUlzRW1wdHk6IHsgaXRlbTogaXRlbSgpIH0gfSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRPdXRsZXRdPVwiMCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0Q29tcG9uZW50T3V0bGV0SXRlbSA6IGl0ZW0oKSA6IGZpZWxkS2V5KCkgOiB7IHZhbHVlSXMwOiAwIH0gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgID8gKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTogKGl0ZW0oKS5zcGVjaWZpY19sb2FkSW1nRXJyb3IgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5nZXRMaW5rSW1hZ2VFcnJvciA/IGNvbmZpZ1RlbXBsYXRlR3JvdXAuZ2V0TGlua0ltYWdlRXJyb3IgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmdldEltYWdlKSA6IGl0ZW0oKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgIDogaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtIHx8ICcnXVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZUNoZWNrZWQoaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6IGtleXNDaGVja2VkKCkgOiBrZXlzQ2hlY2tlZCgpLmxlbmd0aCkgJiYgY29uZmlnVGVtcGxhdGVHcm91cC5zaW5nbGVTZWxlY3RJdGVtICYmIChjb25maWdUZW1wbGF0ZUdyb3VwLmhhc0ljb25DaGVja1NpbmdsZVNlbGVjdEl0ZW0gfHwgaXRlbSgpLmlzQ2hlY2tlZEJ5RGVmYXVsdEtleSkpIHtcbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWNoZWNrIGJlZm9yZTohdGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICBbY2xhc3MuIW1sLVs4cHhdXT1cIml0ZW0oKS5kYXRhUG9wb3ZlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tY2hlY2tdPVwiY29uZmlnVGVtcGxhdGVHcm91cC5jb2xvckJsdWVXaGVuSXRlbVNlbGVjdGVkICYmIGl0ZW0oKS5pc0NoZWNrTWFudWFsXCI+PC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCEhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGggJiYgIWNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZSAmJiAhY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbikge1xuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCBiZWZvcmU6IXRleHQtWzE2cHhdXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnJvdGF0ZS05MF09XCJpdGVtKCkuZXhwYW5kXCJcbiAgICAgICAgICAgICAgW2NsYXNzLiFtbC1bOHB4XV09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclRvZ2dsZUV4cGFuZCgkZXZlbnQsIGl0ZW0pXCI+PC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoaXRlbSgpLmV4cGFuZCB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uKSB7XG4gICAgICAgICAgQGlmIChpdGVtKCkubGV2ZWwgPCBpdGVtKCkubWF4TGV2ZWxHcm91cCAmJiAhaXRlbSgpW2NvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRJdGVtc10/LigpPy5sZW5ndGggJiYgY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg1ciB0ZXh0LVsjOWNhMmFkXSByZWxhdGl2ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgIGl0ZW0oKS5sZXZlbCArIDFcbiAgICAgICAgICAgICAgICAgIHwgTGlic1VpQ29tcG9uZW50c0xpc3RHcm91cENhbGN1bGF0b3JNYXJnaW5MZWZ0SXRlbVBpcGVcbiAgICAgICAgICAgICAgICAgICAgOiBpdGVtKCkubWF4TGV2ZWxHcm91cCArIDFcbiAgICAgICAgICAgICAgICAgICAgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVcbiAgICAgICAgICAgICAgICAgICAgOiBjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uXG4gICAgICAgICAgICAgICAgICAgIDogIShjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVJhZGlvSXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuIXB5LVs4cHhdXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtXCJcbiAgICAgICAgICAgICAgW2NsYXNzLiFweS1bNHB4XV09XCIhY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEF2YXRhckl0ZW1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiaXRlbSgpLmNsYXNzSW5jbHVkZUl0ZW1Ob0RhdGEgfHwgJydcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ2kxOG5fbm9fZGF0YV95ZXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGtleVNlYXJjaCgpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnaTE4bl9ub19yZXN1bHQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghIWl0ZW0oKVtjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0SXRlbXNdPy4oKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX2dyb3VwLWl0ZW1cbiAgICAgICAgICAgICAgW2tleVNlYXJjaF09XCJrZXlTZWFyY2goKVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtKClbY29uZmlnVGVtcGxhdGVHcm91cC5maWVsZEdldEl0ZW1zXSgpXCJcbiAgICAgICAgICAgICAgW3BhcmVudEl0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgICBba2V5c0NoZWNrZWRdPVwia2V5c0NoZWNrZWQoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cIihkaXNhYmxlKCkgfHwgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6IGtleXNEaXNhYmxlSXRlbSgpIDoga2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aCkpICYmICFjb25maWdUZW1wbGF0ZUdyb3VwLmlzVmlld1RyZWVKc29uXCJcbiAgICAgICAgICAgICAgW2tleXNEaXNhYmxlSXRlbV09XCJrZXlzRGlzYWJsZUl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtjb25maWdUZW1wbGF0ZUdyb3VwXT1cImNvbmZpZ1RlbXBsYXRlR3JvdXBcIlxuICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvdXRDaGFuZ2VWaWV3KT1cImhhbmRsZXJDaGFuZ2VWaWV3KCRldmVudClcIlxuICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VDaGVja2VkKCRldmVudC5pdGVtKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cblxuICBAaWYgKCghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpICYmIHBhcmVudEl0ZW0oKS5sZXZlbCA8IHBhcmVudEl0ZW0oKS5tYXhMZXZlbEdyb3VwKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyM5Y2EyYWRdIHJlbGF0aXZlXCJcbiAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cIlxuICAgICAgICBwYXJlbnRJdGVtKCkubGV2ZWwgKyAxXG4gICAgICAgICAgfCBMaWJzVWlDb21wb25lbnRzTGlzdEdyb3VwQ2FsY3VsYXRvck1hcmdpbkxlZnRJdGVtUGlwZVxuICAgICAgICAgICAgOiBwYXJlbnRJdGVtKCkubWF4TGV2ZWxHcm91cCArIDFcbiAgICAgICAgICAgIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlXG4gICAgICAgICAgICA6IGNvbmZpZ1RlbXBsYXRlR3JvdXAuaXNWaWV3VHJlZUpzb25cbiAgICAgICAgICAgIDogIShjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZUNoZWNrYm94SXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLmlnbm9yZVJhZGlvSXRlbSB8fCBjb25maWdUZW1wbGF0ZUdyb3VwLnNpbmdsZVNlbGVjdEl0ZW0pXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgIFwiXG4gICAgICBbc3R5bGUucGFkZGluZ0xlZnQucHhdPVwicGFyZW50SXRlbSgpLmxldmVsICsgMSB8IExpYnNVaUNvbXBvbmVudHNMaXN0R3JvdXBDYWxjdWxhdG9yUGFkZGluZ0xlZnRJdGVtUGlwZTogcGFyZW50SXRlbSgpLm1heExldmVsR3JvdXAgKyAxIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlIDogY29uZmlnVGVtcGxhdGVHcm91cC5pc1ZpZXdUcmVlSnNvbiA6IGZhbHNlXCJcbiAgICAgIFtjbGFzcy5weS1bOHB4XV09XCJjb25maWdUZW1wbGF0ZUdyb3VwLmZpZWxkR2V0QXZhdGFySXRlbVwiXG4gICAgICBbY2xhc3MucHktWzRweF1dPVwiIWNvbmZpZ1RlbXBsYXRlR3JvdXAuZmllbGRHZXRBdmF0YXJJdGVtXCI+XG4gICAgICA8ZGl2IFtjbGFzc109XCJwYXJlbnRJdGVtKCkuY2xhc3NJbmNsdWRlSXRlbU5vRGF0YSB8fCAnJ1wiPlxuICAgICAgICBAaWYgKHBhcmVudEl0ZW0oKS5pY29uRW1wdHlEYXRhSW5Hcm91cCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi1bMTZweF1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiKGtleVNlYXJjaCgpID8gJ25vLXJlc3VsdCcgOiAnbm8tZGF0YScpIHwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB8IGFzeW5jXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSkge1xuICAgICAgICAgIEBsZXQgY29uc3RIdG1sVGV4dE5vRGF0YSA9IHBhcmVudEl0ZW0oKS50ZXh0RGVzY3JpcHRpb25Hcm91cFdoZW5Ob0RhdGEgfHwgY29uZmlnKCk/LnRleHROb0RhdGEgfHwgJ2kxOG5fbm9fcmVzdWx0JztcbiAgICAgICAgICA8c3Bhbj57eyBjb25zdEh0bWxUZXh0Tm9EYXRhIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoa2V5U2VhcmNoKCkpIHtcbiAgICAgICAgICA8c3Bhbj57eyAnaTE4bl9ub19yZXN1bHQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|