@libs-ui/components-pages-template-full-screen 0.2.356-3 → 0.2.356-30
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/full-screen-v2/full-screen-v2.component.mjs +23 -12
- package/esm2022/full-screen-v2/interfaces/full-screen-v2.interface.mjs +1 -1
- package/esm2022/full-screen.component.mjs +6 -2
- package/fesm2022/libs-ui-components-pages-template-full-screen.mjs +29 -14
- package/fesm2022/libs-ui-components-pages-template-full-screen.mjs.map +1 -1
- package/full-screen-v2/full-screen-v2.component.d.ts +7 -1
- package/full-screen-v2/interfaces/full-screen-v2.interface.d.ts +3 -0
- package/full-screen.component.d.ts +3 -0
- package/package.json +13 -12
|
@@ -47,10 +47,14 @@ export class LibsUiComponentsPagesTemplateFullScreenV2Component {
|
|
|
47
47
|
outClickButton = output();
|
|
48
48
|
// #endregion
|
|
49
49
|
// #region --- INTERNAL STATE ---
|
|
50
|
+
functionsControl = signal({ emitClosePageFullEvent: () => this.emitClosePageFullEvent() });
|
|
50
51
|
idOverlay = signal(uuid()).asReadonly();
|
|
51
52
|
destroyRef = inject(DestroyRef);
|
|
52
53
|
functionControlMenu;
|
|
53
54
|
// #endregion
|
|
55
|
+
// #region --- INTERNAL STATE ---
|
|
56
|
+
pipeEmptyConfig = { valueIsEmpty: null };
|
|
57
|
+
// #endregion
|
|
54
58
|
// #region --- COMPUTED ---
|
|
55
59
|
/** State reactive để truyền vào component outlet */
|
|
56
60
|
sectionData = computed(() => ({
|
|
@@ -74,6 +78,7 @@ export class LibsUiComponentsPagesTemplateFullScreenV2Component {
|
|
|
74
78
|
state: true,
|
|
75
79
|
idOverlay: this.idOverlay(),
|
|
76
80
|
timeLiveUpdate: getDayjs().unix(),
|
|
81
|
+
ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,
|
|
77
82
|
},
|
|
78
83
|
};
|
|
79
84
|
UtilsCommunicateMicro.PostMessageToParent(data);
|
|
@@ -87,6 +92,9 @@ export class LibsUiComponentsPagesTemplateFullScreenV2Component {
|
|
|
87
92
|
}
|
|
88
93
|
}
|
|
89
94
|
}
|
|
95
|
+
get FunctionsControl() {
|
|
96
|
+
return this.functionsControl();
|
|
97
|
+
}
|
|
90
98
|
// #region --- EVENT HANDLERS ---
|
|
91
99
|
handlerEdit() {
|
|
92
100
|
this.outEdit.emit();
|
|
@@ -113,21 +121,24 @@ export class LibsUiComponentsPagesTemplateFullScreenV2Component {
|
|
|
113
121
|
this.functionControlMenu = event;
|
|
114
122
|
}
|
|
115
123
|
// #endregion
|
|
124
|
+
emitClosePageFullEvent() {
|
|
125
|
+
const data = {
|
|
126
|
+
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
127
|
+
response: {
|
|
128
|
+
message: 'close',
|
|
129
|
+
state: false,
|
|
130
|
+
idOverlay: this.idOverlay(),
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
UtilsCommunicateMicro.PostMessageToParent(data);
|
|
134
|
+
}
|
|
116
135
|
ngOnDestroy() {
|
|
117
136
|
if (!this.ignoreClosePageFullEvent()) {
|
|
118
|
-
|
|
119
|
-
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
120
|
-
response: {
|
|
121
|
-
message: 'close',
|
|
122
|
-
state: false,
|
|
123
|
-
idOverlay: this.idOverlay(),
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
UtilsCommunicateMicro.PostMessageToParent(data);
|
|
137
|
+
this.emitClosePageFullEvent();
|
|
127
138
|
}
|
|
128
139
|
}
|
|
129
140
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPagesTemplateFullScreenV2Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
130
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPagesTemplateFullScreenV2Component, isStandalone: true, selector: "libs_ui-components-pages_template_full_screen_v2", inputs: { classHeaderInclude: { classPropertyName: "classHeaderInclude", publicName: "classHeaderInclude", isSignal: true, isRequired: false, transformFunction: null }, labelLeft: { classPropertyName: "labelLeft", publicName: "labelLeft", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonCenter: { classPropertyName: "buttonCenter", publicName: "buttonCenter", isSignal: true, isRequired: false, transformFunction: null }, buttonRight: { classPropertyName: "buttonRight", publicName: "buttonRight", isSignal: true, isRequired: false, transformFunction: null }, hasEdit: { classPropertyName: "hasEdit", publicName: "hasEdit", isSignal: true, isRequired: false, transformFunction: null }, menuDropDownConfigs: { classPropertyName: "menuDropDownConfigs", publicName: "menuDropDownConfigs", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreClosePageFullEvent: { classPropertyName: "ignoreClosePageFullEvent", publicName: "ignoreClosePageFullEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreBackgroundColor: { classPropertyName: "ignoreBackgroundColor", publicName: "ignoreBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, divideClassHeader: { classPropertyName: "divideClassHeader", publicName: "divideClassHeader", isSignal: true, isRequired: false, transformFunction: null }, centerTemplate: { classPropertyName: "centerTemplate", publicName: "centerTemplate", isSignal: true, isRequired: false, transformFunction: null }, templateRight: { classPropertyName: "templateRight", publicName: "templateRight", isSignal: true, isRequired: false, transformFunction: null }, leftTemplate: { classPropertyName: "leftTemplate", publicName: "leftTemplate", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, bodyConfig: { classPropertyName: "bodyConfig", publicName: "bodyConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outClose: "outClose", outEdit: "outEdit", outSelectedMenuDropdown: "outSelectedMenuDropdown", outClickButton: "outClickButton" }, ngImport: i0, template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (gi\u1EEF nguy\u00EAn 100% t\u1EEB V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '—'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n \n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load ho\u1EB7c ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsStatusComponent, selector: "libs_ui-components-buttons-status", inputs: ["config"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSkeletonComponent, selector: "libs_ui-components-skeleton", inputs: ["config"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [NgComponentOutlet]] });
|
|
141
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPagesTemplateFullScreenV2Component, isStandalone: true, selector: "libs_ui-components-pages_template_full_screen_v2", inputs: { classHeaderInclude: { classPropertyName: "classHeaderInclude", publicName: "classHeaderInclude", isSignal: true, isRequired: false, transformFunction: null }, labelLeft: { classPropertyName: "labelLeft", publicName: "labelLeft", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonCenter: { classPropertyName: "buttonCenter", publicName: "buttonCenter", isSignal: true, isRequired: false, transformFunction: null }, buttonRight: { classPropertyName: "buttonRight", publicName: "buttonRight", isSignal: true, isRequired: false, transformFunction: null }, hasEdit: { classPropertyName: "hasEdit", publicName: "hasEdit", isSignal: true, isRequired: false, transformFunction: null }, menuDropDownConfigs: { classPropertyName: "menuDropDownConfigs", publicName: "menuDropDownConfigs", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreClosePageFullEvent: { classPropertyName: "ignoreClosePageFullEvent", publicName: "ignoreClosePageFullEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreBackgroundColor: { classPropertyName: "ignoreBackgroundColor", publicName: "ignoreBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, divideClassHeader: { classPropertyName: "divideClassHeader", publicName: "divideClassHeader", isSignal: true, isRequired: false, transformFunction: null }, centerTemplate: { classPropertyName: "centerTemplate", publicName: "centerTemplate", isSignal: true, isRequired: false, transformFunction: null }, templateRight: { classPropertyName: "templateRight", publicName: "templateRight", isSignal: true, isRequired: false, transformFunction: null }, leftTemplate: { classPropertyName: "leftTemplate", publicName: "leftTemplate", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, bodyConfig: { classPropertyName: "bodyConfig", publicName: "bodyConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outClose: "outClose", outEdit: "outEdit", outSelectedMenuDropdown: "outSelectedMenuDropdown", outClickButton: "outClickButton" }, ngImport: i0, template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (gi\u1EEF nguy\u00EAn 100% t\u1EEB V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '—'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n \n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load ho\u1EB7c ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : pipeEmptyConfig | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : pipeEmptyConfig | async;\n @if (constHtmlCompBody) {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "dropdownTemplateRefNotSearchNoData", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsStatusComponent, selector: "libs_ui-components-buttons-status", inputs: ["config"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSkeletonComponent, selector: "libs_ui-components-skeleton", inputs: ["config"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
131
142
|
}
|
|
132
143
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPagesTemplateFullScreenV2Component, decorators: [{
|
|
133
144
|
type: Component,
|
|
@@ -145,6 +156,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
145
156
|
LibsUiPipesCallFunctionInTemplatePipe,
|
|
146
157
|
LibsUiPipesEscapeHtmlPipe,
|
|
147
158
|
LibsUiComponentsLabelComponent,
|
|
148
|
-
], template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (gi\u1EEF nguy\u00EAn 100% t\u1EEB V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '—'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n \n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load ho\u1EB7c ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"] }]
|
|
159
|
+
], template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (gi\u1EEF nguy\u00EAn 100% t\u1EEB V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '—'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n \n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load ho\u1EB7c ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : pipeEmptyConfig | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : pipeEmptyConfig | async;\n @if (constHtmlCompBody) {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"] }]
|
|
149
160
|
}] });
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4tdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi12Mi9mdWxsLXNjcmVlbi12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZnVsbC1zY3JlZW4vc3JjL2Z1bGwtc2NyZWVuLXYyL2Z1bGwtc2NyZWVuLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNoSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQTRELGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0ksT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFtQixpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xHLE9BQU8sRUFBZ0IsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRixPQUFPLEVBQUUscUNBQXFD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S0ksU0FBUyw4Q0FFVCxnQkFBZ0IsbUpBQ2hCLGVBQWUsK0JBQ2YsaUNBQWlDLGkxREFDakMsK0JBQStCLHFKQUMvQixzQ0FBc0Msc2pCQUN0QyxzQ0FBc0Msa0dBQ3RDLGdDQUFnQyxvZ0JBQ2hDLGlDQUFpQyx1RkFDakMscUNBQXFDLHlFQUNyQyx5QkFBeUIsa0VBQ3pCLDhCQUE4QixzdUJBWDlCLGlCQUFpQjs7NEZBY1Isa0RBQWtEO2tCQXZCOUQsU0FBUzsrQkFFRSxrREFBa0QsY0FHaEQsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsaUNBQWlDO3dCQUNqQywrQkFBK0I7d0JBQy9CLHNDQUFzQzt3QkFDdEMsc0NBQXNDO3dCQUN0QyxnQ0FBZ0M7d0JBQ2hDLGlDQUFpQzt3QkFDakMscUNBQXFDO3dCQUNyQyx5QkFBeUI7d0JBQ3pCLDhCQUE4QjtxQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBTaWduYWwsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1N0YXR1c0NvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zdGF0dXMnO1xuaW1wb3J0IHsgSURyb3Bkb3duLCBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJU2tlbGV0b25Db25maWcsIExpYnNVaUNvbXBvbmVudHNTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2tlbGV0b24nO1xuaW1wb3J0IHsgSVN3aXRjaEV2ZW50LCBMaWJzVWlDb21wb25lbnRzU3dpdGNoQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zd2l0Y2gnO1xuaW1wb3J0IHsgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1lc2NhcGUtaHRtbCc7XG5pbXBvcnQgeyBnZXQsIGdldERheWpzLCBVdGlsc0NvbW11bmljYXRlTWljcm8sIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRnVsbFNjcmVlblYyQm9keUNvbmZpZywgSUZ1bGxTY3JlZW5WMlNlY3Rpb25EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bGwtc2NyZWVuLXYyLmludGVyZmFjZSc7XG5cbi8qKlxuICogRnVsbCBTY3JlZW4gVGVtcGxhdGUgVjIg4oCUIEvhur8gdGjhu6thIHRvw6BuIGLhu5kgVjEsIGLhu5Ugc3VuZyBsYXp5IGxvYWRpbmcgY2hvIGJvZHkuXG4gKiBIZWFkZXIgZ2nhu68gbmd1ecOqbiAxMDAlLiBCb2R5IGjhu5cgdHLhu6MgZHluYW1pYyBjb21wb25lbnQgaW5qZWN0aW9uIHbhu5tpIHNrZWxldG9uIHThu7EgxJHhu5luZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXBhZ2VzX3RlbXBsYXRlX2Z1bGxfc2NyZWVuX3YyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Z1bGwtc2NyZWVuLXYyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnVsbC1zY3JlZW4tdjIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTdGF0dXNDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1NrZWxldG9uQ29tcG9uZW50LFxuICAgIExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUsXG4gICAgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNQYWdlc1RlbXBsYXRlRnVsbFNjcmVlblYyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIC0tLSBJTlBVVFMgKGvhur8gdGjhu6thIHThu6sgVjEpIC0tLVxuICByZWFkb25seSBjbGFzc0hlYWRlckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxhYmVsTGVmdCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9iYWNrX3RvX2xpc3QnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/ICdpMThuX2JhY2tfdG9fbGlzdCcgfSk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBidXR0b25DZW50ZXIgPSBpbnB1dDxBcnJheTxJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBidXR0b25SaWdodCA9IGlucHV0PEFycmF5PElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbj4+KCk7XG4gIHJlYWRvbmx5IGhhc0VkaXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1lbnVEcm9wRG93bkNvbmZpZ3MgPSBpbnB1dDxJRHJvcGRvd24+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMDAwLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IDEwMDAgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBpZ25vcmVCYWNrZ3JvdW5kQ29sb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXZpZGVDbGFzc0hlYWRlciA9IGlucHV0PHsgY2xhc3NCdXR0b25DYW5jZWw6IHN0cmluZzsgY2xhc3NCdXR0b25DZW50ZXI6IHN0cmluZzsgY2xhc3NCdXR0b25SaWdodDogc3RyaW5nIH0gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNlbnRlclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsZWZ0VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gLS0tIElOUFVUUyAobeG7m2kgdHJvbmcgVjIpIC0tLVxuICAvKiogQ29uZmlnIGxhenkgbG9hZCBjb21wb25lbnQgdsOgbyBib2R5LiBO4bq/dSBraMO0bmcgdHJ1eeG7gW4gZ2V0Q29tcG9uZW50T3V0bGV0IOKGkiB04buxIMSR4buZbmcgZMO5bmcgbmctY29udGVudC4gKi9cbiAgcmVhZG9ubHkgYm9keUNvbmZpZyA9IGlucHV0PElGdWxsU2NyZWVuVjJCb2R5Q29uZmlnLCBJRnVsbFNjcmVlblYyQm9keUNvbmZpZyB8IHVuZGVmaW5lZD4oe30sIHsgdHJhbnNmb3JtOiAodikgPT4gdiB8fCB7fSB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gLS0tIE9VVFBVVFMgLS0tXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dEVkaXQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0ZWRNZW51RHJvcGRvd24gPSBvdXRwdXQ8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG91dENsaWNrQnV0dG9uID0gb3V0cHV0PElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbj4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gLS0tIElOVEVSTkFMIFNUQVRFIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGlkT3ZlcmxheSA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSkuYXNSZWFkb25seSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sTWVudTogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIC0tLSBDT01QVVRFRCAtLS1cbiAgLyoqIFN0YXRlIHJlYWN0aXZlIMSR4buDIHRydXnhu4FuIHbDoG8gY29tcG9uZW50IG91dGxldCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VjdGlvbkRhdGEgPSBjb21wdXRlZDxJRnVsbFNjcmVlblYyU2VjdGlvbkRhdGE+KCgpID0+ICh7XG4gICAgZGlzYWJsZTogdGhpcy5kaXNhYmxlKCksXG4gIH0pKTtcblxuICAvKiogU2tlbGV0b24gYm9keSDigJQgZmFsbGJhY2sgduG7gSBjb25maWcgbeG6t2MgxJHhu4tuaCBu4bq/dSBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc29sdmVkU2tlbGV0b25Cb2R5OiBTaWduYWw8SVNrZWxldG9uQ29uZmlnPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgZ2V0KHRoaXMuYm9keUNvbmZpZywgJ3NrZWxldG9uQ29uZmlnJykgPz8ge1xuICAgICAgICByZXBlYXQ6IDMsXG4gICAgICAgIHN0eWxlTWFyZ2luQm90dG9tOiAxNixcbiAgICAgICAgcm93czogW3sgaXRlbTogeyBjbGFzc0luY2x1ZGU6ICd3LWZ1bGwgaC1bMTIwcHhdIHJvdW5kZWQtWzhweF0nIH0gfV0sXG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG4gIC8vICNlbmRyZWdpb25cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaWdub3JlQ2xvc2VQYWdlRnVsbEV2ZW50KCkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIHR5cGU6IFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbC5LRVlfTUVTU0FHRV9NT0RBTCxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnb3BlbicsXG4gICAgICAgICAgc3RhdGU6IHRydWUsXG4gICAgICAgICAgaWRPdmVybGF5OiB0aGlzLmlkT3ZlcmxheSgpLFxuICAgICAgICAgIHRpbWVMaXZlVXBkYXRlOiBnZXREYXlqcygpLnVuaXgoKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuXG4gICAgICBpZiAoIVV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbC5JR05PUkVfSU5URVJWQUxfVVBEQVRFX1RJTUVfTElWRV9FVkVOVF9NT0RBTCkge1xuICAgICAgICBpbnRlcnZhbCgyMDAwKVxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZGF0YS5yZXNwb25zZS50aW1lTGl2ZVVwZGF0ZSA9IGdldERheWpzKCkudW5peCgpO1xuICAgICAgICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gI3JlZ2lvbiAtLS0gRVZFTlQgSEFORExFUlMgLS0tXG4gIHByb3RlY3RlZCBoYW5kbGVyRWRpdCgpIHtcbiAgICB0aGlzLm91dEVkaXQuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbmNlbCgpIHtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tCdXR0b24oYnV0dG9uOiBJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24pIHtcbiAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi5hY3Rpb24pIHtcbiAgICAgIGF3YWl0IGJ1dHRvbi5hY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbi5lbWl0KGJ1dHRvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclN3aXRjaChldmVudDogSVN3aXRjaEV2ZW50LCBidXR0b246IElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbikge1xuICAgIGlmIChidXR0b24gJiYgYnV0dG9uLmFjdGlvbikge1xuICAgICAgYXdhaXQgYnV0dG9uLmFjdGlvbihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm91dFNlbGVjdGVkTWVudURyb3Bkb3duLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuZnVuY3Rpb25Db250cm9sTWVudT8ucmVzZXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ29udHJvbERyb3Bkb3duTWVudShldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbE1lbnUgPSBldmVudDtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuS0VZX01FU1NBR0VfTU9EQUwsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ2Nsb3NlJyxcbiAgICAgICAgICBzdGF0ZTogZmFsc2UsXG4gICAgICAgICAgaWRPdmVybGF5OiB0aGlzLmlkT3ZlcmxheSgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1wYWdlX2Z1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXgoKVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlnbm9yZUJhY2tncm91bmRDb2xvcigpID8gJ3RyYW5zcGFyZW50JyA6ICcjZjJmNWY3J1wiPlxuICA8IS0tID09PT09PT09PT09PT09PT09PT09PSBIRUFERVIgKGdp4buvIG5ndXnDqm4gMTAwJSB04burIFYxKSA9PT09PT09PT09PT09PT09PT09PT0gLS0+XG4gIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9mdWxsLWhlYWRlciAnICsgY2xhc3NIZWFkZXJJbmNsdWRlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DYW5jZWwgfHwgJ3ctWzI1JV0nIH19XCI+XG4gICAgICBAaWYgKGxlZnRUZW1wbGF0ZSgpOyBhcyBsZWZ0VGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxlZnRUZW1wbGF0ZVwiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGxhYmVsTGVmdCgpOyBhcyBsYWJlbExlZnQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExlZnRcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSBiZWZvcmU6dGV4dC1bMTZweF0nXCJcbiAgICAgICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg0cidcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJjYW5jZWwoKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGNlbnRlclRlbXBsYXRlKCk7IGFzIGNlbnRlclRlbXBsYXRlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DZW50ZXIgfHwgJ3ctWzQwJV0nIH19IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZW50ZXJUZW1wbGF0ZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNlbnRlciB8fCAndy1bNDAlXScgfX0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtjb25maWddPVwieyBtYXhXaWR0aDogMjUwLCB6SW5kZXg6IHpJbmRleCgpICsgMSB9XCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidsaWJzLXVpLWZvbnQtaDJzJ1wiXG4gICAgICAgICAgW2lubmVySHRtbF09XCJ0aXRsZSgpID8gKHRpdGxlKCkgfCBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlKSA6ICcmbWRhc2g7J1wiIC8+XG4gICAgICAgIEBpZiAoaGFzRWRpdCgpOyBhcyBoYXNFZGl0KSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRWRpdCgpXCJcbiAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbWwtWzRweF0nXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uQ2VudGVyKCk7IHRyYWNrIGJ1dHRvbi5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzEycHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCIoYnV0dG9uLmNsYXNzTGFiZWwgfHwgJycpICsgJyBsaWJzLXVpLWZvbnQtaGVhZC00cydcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYnV0dG9uLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJidXR0b24uY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiYnV0dG9uLmlzUGVuZGluZyB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbihidXR0b24pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2J1dHRvbi1zdGF0dXMnICYmIGJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXMpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXN0YXR1c1xuICAgICAgICAgICAgICAgIFtjbGFzc109XCJidXR0b24uY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXNcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnc3dpdGNoJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXN3aXRjaFxuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiYnV0dG9uLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGJ1dHRvbi5jbGFzc0luY2x1ZGUgfX1cIlxuICAgICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnbGFiZWwnICYmIGJ1dHRvbi5sYWJlbENvbmZpZykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24ubGFiZWxDb25maWcuY2xhc3NJbmNsdWRlICsgJyBwYi0wIHRleHQtd2hpdGUnXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJidXR0b24ubGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICAgIFtidXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICAgIFtoYXNUb2dnbGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgICAgICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgICAgICAgICAgICBbbGltaXRMZW5ndGhdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgICAgICAgICBbY291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInt7IGRpdmlkZUNsYXNzSGVhZGVyKCk/LmNsYXNzQnV0dG9uUmlnaHQgfHwgJ3ctWzM1JV0nIH19IGZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyXCI+XG4gICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uUmlnaHQoKTsgdHJhY2sgYnV0dG9uLmtleSkge1xuICAgICAgICA8ZGl2IFtjbGFzcy5tbC1bMTJweF1dPVwiISRmaXJzdFwiPlxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2xhYmVsJyAmJiBidXR0b24ubGFiZWxDb25maWcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24ubGFiZWxDb25maWcuY2xhc3NJbmNsdWRlICsgJyBwYi0wJ1wiXG4gICAgICAgICAgICAgIFtsYWJlbExlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgICAgICAgICAgW29ubHlTaG93Q291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICAgICAgICBbYnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICBbaGFzVG9nZ2xlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgICAgICAgICBbdG9nZ2xlQWN0aXZlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgICAgICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgICAgICAgICBbbGltaXRMZW5ndGhdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgICAgICAgW2NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jb3VudFwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ3N3aXRjaCcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3dpdGNoXG4gICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3sgYnV0dG9uLmNsYXNzSW5jbHVkZSB9fVwiXG4gICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b24/LmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiKGJ1dHRvbi5jbGFzc0xhYmVsIHx8ICcnKSArICcgbGlicy11aS1mb250LWg0cydcIlxuICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZSB8fCAnYnV0dG9uLXByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiYnV0dG9uLmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLnBvcG92ZXIgfHwge31cIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICBbaXNQZW5kaW5nXT1cImJ1dHRvbi5pc1BlbmRpbmcgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cImJ1dHRvbi5pY29uT25seVR5cGUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdsaW5lLXNwYWNlJykge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImJnLVsjNjY2Yjc5XSB3LVsxcHhdIGgtWzI4cHhdXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGVcIj5cbiAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChtZW51RHJvcERvd25Db25maWdzKCk7IGFzIG1lbnVEcm9wRG93bkNvbmZpZ3MpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsxMnB4XVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cIm1lbnVEcm9wRG93bkNvbmZpZ3MubGlzdENvbmZpZ1wiXG4gICAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwibWVudURyb3BEb3duQ29uZmlncy5wb3BvdmVyQ3VzdG9tQ29uZmlnXCJcbiAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJDb250cm9sRHJvcGRvd25NZW51KCRldmVudClcIlxuICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs4cHhdJ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHRleHQtWyMzMzMzMzNdIHRleHQtWzEycHhdJ1wiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuXzR4X290aGVyX29wZXJhdGlvbnMnIH0gfVwiXG4gICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHRlbXBsYXRlUmlnaHQoKTsgYXMgdGVtcGxhdGVSaWdodCkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSaWdodFwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09IEJPRFkgKFYyOiBMYXp5IExvYWQgaG/hurdjIG5nLWNvbnRlbnQpID09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgQGlmIChib2R5Q29uZmlnKCkuZ2V0Q29tcG9uZW50T3V0bGV0OyBhcyBnZXRCb2R5Q29tcG9uZW50T3V0bGV0KSB7XG4gICAgPCEtLSBMYXp5IGxvYWQgbW9kZSAtLT5cbiAgICA8ZGl2IFtjbGFzc109XCInbGlicy11aS1jb21wb25lbnRzLXBhZ2VfZnVsbC1ib2R5ICcgKyAoYm9keUNvbmZpZygpLmNsYXNzSW5jbHVkZSB8fCAnJylcIj5cbiAgICAgIEBsZXQgY29uc3RIdG1sQ29tcEJvZHkgPSB1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBnZXRCb2R5Q29tcG9uZW50T3V0bGV0IDogc2VjdGlvbkRhdGEoKSA6IG51bGwgOiB7IHZhbHVlSXNFbXB0eTogbnVsbCB9IHwgYXN5bmM7XG4gICAgICBAbGV0IGNvbnN0SHRtbElucHV0c0JvZHkgPSB1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBib2R5Q29uZmlnKCkuZ2V0RGF0YUNvbXBvbmVudE91dGxldCA6IHNlY3Rpb25EYXRhKCkgOiBudWxsIDogeyB2YWx1ZUlzRW1wdHk6IG51bGwgfSB8IGFzeW5jO1xuICAgICAgQGlmIChjb25zdEh0bWxDb21wQm9keSkge1xuICAgICAgICBAZGVmZXIge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiY29uc3RIdG1sQ29tcEJvZHk7IGlucHV0czogY29uc3RIdG1sSW5wdXRzQm9keVwiIC8+XG4gICAgICAgIH0gQGxvYWRpbmcge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc2tlbGV0b24gW2NvbmZpZ109XCJyZXNvbHZlZFNrZWxldG9uQm9keSgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc2tlbGV0b24gW2NvbmZpZ109XCJyZXNvbHZlZFNrZWxldG9uQm9keSgpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4tdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi12Mi9mdWxsLXNjcmVlbi12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZnVsbC1zY3JlZW4vc3JjL2Z1bGwtc2NyZWVuLXYyL2Z1bGwtc2NyZWVuLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNoSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQTRELGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0ksT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFtQixpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xHLE9BQU8sRUFBZ0IsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRixPQUFPLEVBQUUscUNBQXFD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RCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLEtBQUssRUFBRSxLQUFLO2dCQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO2FBQzVCO1NBQ0YsQ0FBQztRQUNGLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7d0dBMUlVLGtEQUFrRDs0RkFBbEQsa0RBQWtELDQvRUM5Qy9ELHdqVUFrTUEsK3BCRG5LSSxTQUFTLDhDQUNULGlCQUFpQixvUEFDakIsZ0JBQWdCLG1KQUNoQixlQUFlLCtCQUNmLGlDQUFpQyx1M0RBQ2pDLCtCQUErQixxSkFDL0Isc0NBQXNDLHNqQkFDdEMsc0NBQXNDLGtHQUN0QyxnQ0FBZ0Msb2dCQUNoQyxpQ0FBaUMsdUZBQ2pDLHFDQUFxQyx5RUFDckMseUJBQXlCLGtFQUN6Qiw4QkFBOEI7OzRGQUdyQixrREFBa0Q7a0JBdkI5RCxTQUFTOytCQUVFLGtEQUFrRCxjQUdoRCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixpQ0FBaUM7d0JBQ2pDLCtCQUErQjt3QkFDL0Isc0NBQXNDO3dCQUN0QyxzQ0FBc0M7d0JBQ3RDLGdDQUFnQzt3QkFDaEMsaUNBQWlDO3dCQUNqQyxxQ0FBcUM7d0JBQ3JDLHlCQUF5Qjt3QkFDekIsOEJBQThCO3FCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDb21wb25lbnRPdXRsZXQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIFNpZ25hbCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXN0YXR1cyc7XG5pbXBvcnQgeyBJRHJvcGRvd24sIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElTa2VsZXRvbkNvbmZpZywgTGlic1VpQ29tcG9uZW50c1NrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1za2VsZXRvbic7XG5pbXBvcnQgeyBJU3dpdGNoRXZlbnQsIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWNhbGwtZnVuY3Rpb24taW4tdGVtcGxhdGUnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWVzY2FwZS1odG1sJztcbmltcG9ydCB7IGdldCwgZ2V0RGF5anMsIFV0aWxzQ29tbXVuaWNhdGVNaWNybywgVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGdWxsU2NyZWVuVjJCb2R5Q29uZmlnLCBJRnVsbFNjcmVlblYyU2VjdGlvbkRhdGEsIElGdW5jdGlvbkNvbnRyb2xQYWdlRnVsbFNjcmVlbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdWxsLXNjcmVlbi12Mi5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEZ1bGwgU2NyZWVuIFRlbXBsYXRlIFYyIOKAlCBL4bq/IHRo4burYSB0b8OgbiBi4buZIFYxLCBi4buVIHN1bmcgbGF6eSBsb2FkaW5nIGNobyBib2R5LlxuICogSGVhZGVyIGdp4buvIG5ndXnDqm4gMTAwJS4gQm9keSBo4buXIHRy4bujIGR5bmFtaWMgY29tcG9uZW50IGluamVjdGlvbiB24bubaSBza2VsZXRvbiB04buxIMSR4buZbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1wYWdlc190ZW1wbGF0ZV9mdWxsX3NjcmVlbl92MicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mdWxsLXNjcmVlbi12Mi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Z1bGwtc2NyZWVuLXYyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIE5nQ29tcG9uZW50T3V0bGV0LFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3dpdGNoQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTa2VsZXRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlLFxuICAgIExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5WMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiAtLS0gSU5QVVRTIChr4bq/IHRo4burYSB04burIFYxKSAtLS1cbiAgcmVhZG9ubHkgY2xhc3NIZWFkZXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsYWJlbExlZnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fYmFja190b19saXN0JywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAnaTE4bl9iYWNrX3RvX2xpc3QnIH0pO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYnV0dG9uQ2VudGVyID0gaW5wdXQ8QXJyYXk8SVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uPiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgYnV0dG9uUmlnaHQgPSBpbnB1dDxBcnJheTxJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24+PigpO1xuICByZWFkb25seSBoYXNFZGl0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBtZW51RHJvcERvd25Db25maWdzID0gaW5wdXQ8SURyb3Bkb3duPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAwMCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMDAwIH0pO1xuICByZWFkb25seSBpZ25vcmVDbG9zZVBhZ2VGdWxsRXZlbnQgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlQmFja2dyb3VuZENvbG9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGl2aWRlQ2xhc3NIZWFkZXIgPSBpbnB1dDx7IGNsYXNzQnV0dG9uQ2FuY2VsOiBzdHJpbmc7IGNsYXNzQnV0dG9uQ2VudGVyOiBzdHJpbmc7IGNsYXNzQnV0dG9uUmlnaHQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBjZW50ZXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVSaWdodCA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgbGVmdFRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIC0tLSBJTlBVVFMgKG3hu5tpIHRyb25nIFYyKSAtLS1cbiAgLyoqIENvbmZpZyBsYXp5IGxvYWQgY29tcG9uZW50IHbDoG8gYm9keS4gTuG6v3Uga2jDtG5nIHRydXnhu4FuIGdldENvbXBvbmVudE91dGxldCDihpIgdOG7sSDEkeG7mW5nIGTDuW5nIG5nLWNvbnRlbnQuICovXG4gIHJlYWRvbmx5IGJvZHlDb25maWcgPSBpbnB1dDxJRnVsbFNjcmVlblYyQm9keUNvbmZpZywgSUZ1bGxTY3JlZW5WMkJvZHlDb25maWcgfCB1bmRlZmluZWQ+KHt9LCB7IHRyYW5zZm9ybTogKHYpID0+IHYgfHwge30gfSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIC0tLSBPVVRQVVRTIC0tLVxuICByZWFkb25seSBvdXRDbG9zZSA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXRFZGl0ID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdGVkTWVudURyb3Bkb3duID0gb3V0cHV0PElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbiA9IG91dHB1dDxJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIC0tLSBJTlRFUk5BTCBTVEFURSAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBmdW5jdGlvbnNDb250cm9sID0gc2lnbmFsPElGdW5jdGlvbkNvbnRyb2xQYWdlRnVsbFNjcmVlbj4oeyBlbWl0Q2xvc2VQYWdlRnVsbEV2ZW50OiAoKSA9PiB0aGlzLmVtaXRDbG9zZVBhZ2VGdWxsRXZlbnQoKSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBpZE92ZXJsYXkgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpLmFzUmVhZG9ubHkoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbE1lbnU6IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiAtLS0gSU5URVJOQUwgU1RBVEUgLS0tXG4gIHByb3RlY3RlZCByZWFkb25seSBwaXBlRW1wdHlDb25maWcgPSB7IHZhbHVlSXNFbXB0eTogbnVsbCB9IGFzIGNvbnN0O1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiAtLS0gQ09NUFVURUQgLS0tXG4gIC8qKiBTdGF0ZSByZWFjdGl2ZSDEkeG7gyB0cnV54buBbiB2w6BvIGNvbXBvbmVudCBvdXRsZXQgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlY3Rpb25EYXRhID0gY29tcHV0ZWQ8SUZ1bGxTY3JlZW5WMlNlY3Rpb25EYXRhPigoKSA9PiAoe1xuICAgIGRpc2FibGU6IHRoaXMuZGlzYWJsZSgpLFxuICB9KSk7XG5cbiAgLyoqIFNrZWxldG9uIGJvZHkg4oCUIGZhbGxiYWNrIHbhu4EgY29uZmlnIG3hurdjIMSR4buLbmggbuG6v3Uga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZXNvbHZlZFNrZWxldG9uQm9keTogU2lnbmFsPElTa2VsZXRvbkNvbmZpZz4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGdldCh0aGlzLmJvZHlDb25maWcsICdza2VsZXRvbkNvbmZpZycpID8/IHtcbiAgICAgICAgcmVwZWF0OiAzLFxuICAgICAgICBzdHlsZU1hcmdpbkJvdHRvbTogMTYsXG4gICAgICAgIHJvd3M6IFt7IGl0ZW06IHsgY2xhc3NJbmNsdWRlOiAndy1mdWxsIGgtWzEyMHB4XSByb3VuZGVkLVs4cHhdJyB9IH1dLFxuICAgICAgfVxuICAgICk7XG4gIH0pO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuS0VZX01FU1NBR0VfTU9EQUwsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ29wZW4nLFxuICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgIGlkT3ZlcmxheTogdGhpcy5pZE92ZXJsYXkoKSxcbiAgICAgICAgICB0aW1lTGl2ZVVwZGF0ZTogZ2V0RGF5anMoKS51bml4KCksXG4gICAgICAgICAgaWdub3JlSW50ZXJ2YWxVcGRhdGVUaW1lTGl2ZUV2ZW50OiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuSUdOT1JFX0lOVEVSVkFMX1VQREFURV9USU1FX0xJVkVfRVZFTlRfTU9EQUwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcblxuICAgICAgaWYgKCFVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuSUdOT1JFX0lOVEVSVkFMX1VQREFURV9USU1FX0xJVkVfRVZFTlRfTU9EQUwpIHtcbiAgICAgICAgaW50ZXJ2YWwoMjAwMClcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGRhdGEucmVzcG9uc2UudGltZUxpdmVVcGRhdGUgPSBnZXREYXlqcygpLnVuaXgoKTtcbiAgICAgICAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJRnVuY3Rpb25Db250cm9sUGFnZUZ1bGxTY3JlZW4ge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uc0NvbnRyb2woKTtcbiAgfVxuXG4gIC8vICNyZWdpb24gLS0tIEVWRU5UIEhBTkRMRVJTIC0tLVxuICBwcm90ZWN0ZWQgaGFuZGxlckVkaXQoKSB7XG4gICAgdGhpcy5vdXRFZGl0LmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5jZWwoKSB7XG4gICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsaWNrQnV0dG9uKGJ1dHRvbjogSVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uKSB7XG4gICAgaWYgKGJ1dHRvbiAmJiBidXR0b24uYWN0aW9uKSB7XG4gICAgICBhd2FpdCBidXR0b24uYWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMub3V0Q2xpY2tCdXR0b24uZW1pdChidXR0b24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTd2l0Y2goZXZlbnQ6IElTd2l0Y2hFdmVudCwgYnV0dG9uOiBJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24pIHtcbiAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi5hY3Rpb24pIHtcbiAgICAgIGF3YWl0IGJ1dHRvbi5hY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5vdXRTZWxlY3RlZE1lbnVEcm9wZG93bi5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbE1lbnU/LnJlc2V0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNvbnRyb2xEcm9wZG93bk1lbnUoZXZlbnQ6IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xNZW51ID0gZXZlbnQ7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByaXZhdGUgZW1pdENsb3NlUGFnZUZ1bGxFdmVudCgpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgdHlwZTogVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLktFWV9NRVNTQUdFX01PREFMLFxuICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgbWVzc2FnZTogJ2Nsb3NlJyxcbiAgICAgICAgc3RhdGU6IGZhbHNlLFxuICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5KCksXG4gICAgICB9LFxuICAgIH07XG4gICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaWdub3JlQ2xvc2VQYWdlRnVsbEV2ZW50KCkpIHtcbiAgICAgIHRoaXMuZW1pdENsb3NlUGFnZUZ1bGxFdmVudCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1wYWdlX2Z1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXgoKVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlnbm9yZUJhY2tncm91bmRDb2xvcigpID8gJ3RyYW5zcGFyZW50JyA6ICcjZjJmNWY3J1wiPlxuICA8IS0tID09PT09PT09PT09PT09PT09PT09PSBIRUFERVIgKGdp4buvIG5ndXnDqm4gMTAwJSB04burIFYxKSA9PT09PT09PT09PT09PT09PT09PT0gLS0+XG4gIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9mdWxsLWhlYWRlciAnICsgY2xhc3NIZWFkZXJJbmNsdWRlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DYW5jZWwgfHwgJ3ctWzI1JV0nIH19XCI+XG4gICAgICBAaWYgKGxlZnRUZW1wbGF0ZSgpOyBhcyBsZWZ0VGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxlZnRUZW1wbGF0ZVwiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGxhYmVsTGVmdCgpOyBhcyBsYWJlbExlZnQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExlZnRcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSBiZWZvcmU6dGV4dC1bMTZweF0nXCJcbiAgICAgICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg0cidcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJjYW5jZWwoKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGNlbnRlclRlbXBsYXRlKCk7IGFzIGNlbnRlclRlbXBsYXRlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DZW50ZXIgfHwgJ3ctWzQwJV0nIH19IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZW50ZXJUZW1wbGF0ZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNlbnRlciB8fCAndy1bNDAlXScgfX0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtjb25maWddPVwieyBtYXhXaWR0aDogMjUwLCB6SW5kZXg6IHpJbmRleCgpICsgMSB9XCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidsaWJzLXVpLWZvbnQtaDJzJ1wiXG4gICAgICAgICAgW2lubmVySHRtbF09XCJ0aXRsZSgpID8gKHRpdGxlKCkgfCBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlKSA6ICcmbWRhc2g7J1wiIC8+XG4gICAgICAgIEBpZiAoaGFzRWRpdCgpOyBhcyBoYXNFZGl0KSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRWRpdCgpXCJcbiAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbWwtWzRweF0nXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uQ2VudGVyKCk7IHRyYWNrIGJ1dHRvbi5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzEycHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCIoYnV0dG9uLmNsYXNzTGFiZWwgfHwgJycpICsgJyBsaWJzLXVpLWZvbnQtaGVhZC00cydcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYnV0dG9uLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJidXR0b24uY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiYnV0dG9uLmlzUGVuZGluZyB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbihidXR0b24pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2J1dHRvbi1zdGF0dXMnICYmIGJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXMpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXN0YXR1c1xuICAgICAgICAgICAgICAgIFtjbGFzc109XCJidXR0b24uY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXNcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnc3dpdGNoJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXN3aXRjaFxuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiYnV0dG9uLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGJ1dHRvbi5jbGFzc0luY2x1ZGUgfX1cIlxuICAgICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnbGFiZWwnICYmIGJ1dHRvbi5sYWJlbENvbmZpZykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24ubGFiZWxDb25maWcuY2xhc3NJbmNsdWRlICsgJyBwYi0wIHRleHQtd2hpdGUnXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJidXR0b24ubGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICAgIFtidXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICAgIFtoYXNUb2dnbGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgICAgICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgICAgICAgICAgICBbbGltaXRMZW5ndGhdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgICAgICAgICBbY291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInt7IGRpdmlkZUNsYXNzSGVhZGVyKCk/LmNsYXNzQnV0dG9uUmlnaHQgfHwgJ3ctWzM1JV0nIH19IGZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyXCI+XG4gICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uUmlnaHQoKTsgdHJhY2sgYnV0dG9uLmtleSkge1xuICAgICAgICA8ZGl2IFtjbGFzcy5tbC1bMTJweF1dPVwiISRmaXJzdFwiPlxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2xhYmVsJyAmJiBidXR0b24ubGFiZWxDb25maWcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24ubGFiZWxDb25maWcuY2xhc3NJbmNsdWRlICsgJyBwYi0wJ1wiXG4gICAgICAgICAgICAgIFtsYWJlbExlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgICAgICAgICAgW29ubHlTaG93Q291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICAgICAgICBbYnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICBbaGFzVG9nZ2xlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgICAgICAgICBbdG9nZ2xlQWN0aXZlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgICAgICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgICAgICAgICBbbGltaXRMZW5ndGhdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgICAgICAgW2NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jb3VudFwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ3N3aXRjaCcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3dpdGNoXG4gICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3sgYnV0dG9uLmNsYXNzSW5jbHVkZSB9fVwiXG4gICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b24/LmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiKGJ1dHRvbi5jbGFzc0xhYmVsIHx8ICcnKSArICcgbGlicy11aS1mb250LWg0cydcIlxuICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZSB8fCAnYnV0dG9uLXByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiYnV0dG9uLmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLnBvcG92ZXIgfHwge31cIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICBbaXNQZW5kaW5nXT1cImJ1dHRvbi5pc1BlbmRpbmcgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cImJ1dHRvbi5pY29uT25seVR5cGUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdsaW5lLXNwYWNlJykge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImJnLVsjNjY2Yjc5XSB3LVsxcHhdIGgtWzI4cHhdXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGVcIj5cbiAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChtZW51RHJvcERvd25Db25maWdzKCk7IGFzIG1lbnVEcm9wRG93bkNvbmZpZ3MpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsxMnB4XVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cIm1lbnVEcm9wRG93bkNvbmZpZ3MubGlzdENvbmZpZ1wiXG4gICAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwibWVudURyb3BEb3duQ29uZmlncy5wb3BvdmVyQ3VzdG9tQ29uZmlnXCJcbiAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJDb250cm9sRHJvcGRvd25NZW51KCRldmVudClcIlxuICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs4cHhdJ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHRleHQtWyMzMzMzMzNdIHRleHQtWzEycHhdJ1wiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuXzR4X290aGVyX29wZXJhdGlvbnMnIH0gfVwiXG4gICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHRlbXBsYXRlUmlnaHQoKTsgYXMgdGVtcGxhdGVSaWdodCkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSaWdodFwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09IEJPRFkgKFYyOiBMYXp5IExvYWQgaG/hurdjIG5nLWNvbnRlbnQpID09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgQGlmIChib2R5Q29uZmlnKCkuZ2V0Q29tcG9uZW50T3V0bGV0OyBhcyBnZXRCb2R5Q29tcG9uZW50T3V0bGV0KSB7XG4gICAgPCEtLSBMYXp5IGxvYWQgbW9kZSAtLT5cbiAgICA8ZGl2IFtjbGFzc109XCInbGlicy11aS1jb21wb25lbnRzLXBhZ2VfZnVsbC1ib2R5ICcgKyAoYm9keUNvbmZpZygpLmNsYXNzSW5jbHVkZSB8fCAnJylcIj5cbiAgICAgIEBsZXQgY29uc3RIdG1sQ29tcEJvZHkgPSB1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBnZXRCb2R5Q29tcG9uZW50T3V0bGV0IDogc2VjdGlvbkRhdGEoKSA6IG51bGwgOiBwaXBlRW1wdHlDb25maWcgfCBhc3luYztcbiAgICAgIEBsZXQgY29uc3RIdG1sSW5wdXRzQm9keSA9IHVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGJvZHlDb25maWcoKS5nZXREYXRhQ29tcG9uZW50T3V0bGV0IDogc2VjdGlvbkRhdGEoKSA6IG51bGwgOiBwaXBlRW1wdHlDb25maWcgfCBhc3luYztcbiAgICAgIEBpZiAoY29uc3RIdG1sQ29tcEJvZHkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb25zdEh0bWxDb21wQm9keTsgaW5wdXRzOiBjb25zdEh0bWxJbnB1dHNCb2R5XCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNrZWxldG9uIFtjb25maWddPVwicmVzb2x2ZWRTa2VsZXRvbkJvZHkoKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4tdjIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi12Mi9pbnRlcmZhY2VzL2Z1bGwtc2NyZWVuLXYyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElTa2VsZXRvbkNvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2tlbGV0b24nO1xuaW1wb3J0IHsgVFlQRV9GVU5DVElPTiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG4vKipcbiAqIENvbmZpZyBkw6BuaCByacOqbmcgY2hvIHbDuW5nIGJvZHkgVjIg4oCUIGjhu5cgdHLhu6MgbGF6eSBsb2FkIGNvbXBvbmVudCDEkeG7mW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGdWxsU2NyZWVuVjJCb2R5Q29uZmlnIHtcbiAgLyoqIEjDoG0gdHLhuqMgduG7gSBPYnNlcnZhYmxlPFR5cGU8YW55Pj4gxJHhu4MgbGF6eSBsb2FkIGNvbXBvbmVudCB2w6BvIGJvZHkgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogVFlQRV9GVU5DVElPTjxhbnk+O1xuICAvKiogSMOgbSB0cuG6oyB24buBIE9ic2VydmFibGU8UmVjb3JkPiDEkeG7gyB0cnV54buBbiBk4buvIGxp4buHdSAoaW5wdXRzKSB2w6BvIGNvbXBvbmVudCDEkcaw4bujYyBsb2FkICovXG4gIGdldERhdGFDb21wb25lbnRPdXRsZXQ/OiBUWVBFX0ZVTkNUSU9OPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgLyoqIFNrZWxldG9uIHTDuXkgY2jhu4luaCB0cm9uZyBsw7pjIE9ic2VydmFibGUgY2jhu50gcmVzb2x2ZSDigJQgZMO5bmcgV3JpdGFibGVTaWduYWwgxJHhu4MgcmVhY3RpdmUgKi9cbiAgc2tlbGV0b25Db25maWc/OiBXcml0YWJsZVNpZ25hbDxJU2tlbGV0b25Db25maWc+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4tdjIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi12Mi9pbnRlcmZhY2VzL2Z1bGwtc2NyZWVuLXYyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElTa2VsZXRvbkNvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2tlbGV0b24nO1xuaW1wb3J0IHsgVFlQRV9GVU5DVElPTiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG4vKipcbiAqIENvbmZpZyBkw6BuaCByacOqbmcgY2hvIHbDuW5nIGJvZHkgVjIg4oCUIGjhu5cgdHLhu6MgbGF6eSBsb2FkIGNvbXBvbmVudCDEkeG7mW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGdWxsU2NyZWVuVjJCb2R5Q29uZmlnIHtcbiAgLyoqIEjDoG0gdHLhuqMgduG7gSBPYnNlcnZhYmxlPFR5cGU8YW55Pj4gxJHhu4MgbGF6eSBsb2FkIGNvbXBvbmVudCB2w6BvIGJvZHkgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogVFlQRV9GVU5DVElPTjxhbnk+O1xuICAvKiogSMOgbSB0cuG6oyB24buBIE9ic2VydmFibGU8UmVjb3JkPiDEkeG7gyB0cnV54buBbiBk4buvIGxp4buHdSAoaW5wdXRzKSB2w6BvIGNvbXBvbmVudCDEkcaw4bujYyBsb2FkICovXG4gIGdldERhdGFDb21wb25lbnRPdXRsZXQ/OiBUWVBFX0ZVTkNUSU9OPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgLyoqIFNrZWxldG9uIHTDuXkgY2jhu4luaCB0cm9uZyBsw7pjIE9ic2VydmFibGUgY2jhu50gcmVzb2x2ZSDigJQgZMO5bmcgV3JpdGFibGVTaWduYWwgxJHhu4MgcmVhY3RpdmUgKi9cbiAgc2tlbGV0b25Db25maWc/OiBXcml0YWJsZVNpZ25hbDxJU2tlbGV0b25Db25maWc+O1xuICAvKiogQ2xhc3MgdGjDqm0gdsOgbyB2w7luZyBib2R5IHdyYXBwZXIgbmdvw6BpICovXG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbn1cblxuLyoqIEThu68gbGnhu4d1IHJlYWN0aXZlIHRydXnhu4FuIHbDoG8gQ29tcG9uZW50IE91dGxldCBib2R5ICovXG5leHBvcnQgaW50ZXJmYWNlIElGdWxsU2NyZWVuVjJTZWN0aW9uRGF0YSB7XG4gIGRpc2FibGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZ1bmN0aW9uQ29udHJvbFBhZ2VGdWxsU2NyZWVuIHtcbiAgZW1pdENsb3NlUGFnZUZ1bGxFdmVudDogKCkgPT4gdm9pZDtcbn1cbiJdfQ==
|