@libs-ui/components-dropdown 0.2.306-4 → 0.2.306-6
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/dropdown.component.d.ts +1 -0
- package/esm2022/dropdown.component.mjs +21 -23
- package/esm2022/index.mjs +1 -1
- package/esm2022/interfaces/dropdown.interface.mjs +1 -1
- package/esm2022/interfaces/index.mjs +1 -1
- package/esm2022/tabs/tabs.component.mjs +5 -5
- package/fesm2022/libs-ui-components-dropdown.mjs +22 -24
- package/fesm2022/libs-ui-components-dropdown.mjs.map +1 -1
- package/interfaces/dropdown.interface.d.ts +4 -4
- package/package.json +11 -11
- package/tabs/tabs.component.d.ts +1 -1
|
@@ -44,7 +44,7 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
44
44
|
textDisplayWhenNoSelect = input('i18n_select_information');
|
|
45
45
|
textDisplayWhenMultiSelect = input('i18n_selecting_options');
|
|
46
46
|
classIncludeTextDisplayWhenNoSelect = input('libs-ui-font-h5r');
|
|
47
|
-
fieldLabel = input('labelDisplay', { transform: value => value || 'labelDisplay' });
|
|
47
|
+
fieldLabel = input('labelDisplay', { transform: (value) => value || 'labelDisplay' });
|
|
48
48
|
fieldGetLabel = input();
|
|
49
49
|
labelPopoverConfig = input();
|
|
50
50
|
labelPopoverFullWidth = input(true);
|
|
@@ -56,7 +56,7 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
56
56
|
fieldGetIcon = input();
|
|
57
57
|
fieldGetTextAvatar = input('username');
|
|
58
58
|
fieldGetColorAvatar = input();
|
|
59
|
-
classAvatarInclude = input('mr-[8px]', { transform: value => value || 'mr-[8px]' });
|
|
59
|
+
classAvatarInclude = input('mr-[8px]', { transform: (value) => value || 'mr-[8px]' });
|
|
60
60
|
getLastTextAfterSpace = input();
|
|
61
61
|
linkImageError = input();
|
|
62
62
|
showError = input(true);
|
|
@@ -65,7 +65,7 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
65
65
|
readonly = input();
|
|
66
66
|
labelConfig = input();
|
|
67
67
|
disableLabel = input();
|
|
68
|
-
listSearchConfig = input({ noBorder: true }, { transform: value => value || { noBorder: true } });
|
|
68
|
+
listSearchConfig = input({ noBorder: true }, { transform: (value) => value || { noBorder: true } });
|
|
69
69
|
isSearchOnline = input(false);
|
|
70
70
|
listHiddenInputSearch = input();
|
|
71
71
|
listSearchPadding = input();
|
|
@@ -89,7 +89,7 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
89
89
|
onlyEmitDataWhenReset = input(); // true khi muốn emit sự kiện thay đổi key
|
|
90
90
|
resetKeyWhenSelectAllKey = input();
|
|
91
91
|
listConfigHasDivider = input(true);
|
|
92
|
-
classIncludeIcon = input('ml-[8px]', { transform: value => value || 'ml-[8px]' });
|
|
92
|
+
classIncludeIcon = input('ml-[8px]', { transform: (value) => value || 'ml-[8px]' });
|
|
93
93
|
classIncludeContent = input();
|
|
94
94
|
listIgnoreClassDisableDefaultWhenUseKeysDisableItem = input(); // bỏ chế độ disable item trên html list view để disable từng phần trong rows
|
|
95
95
|
tabKeyActive = model();
|
|
@@ -166,20 +166,23 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
166
166
|
}
|
|
167
167
|
this.outDataChange.emit(this.items());
|
|
168
168
|
}
|
|
169
|
-
this.outFunctionsControl.emit(
|
|
169
|
+
this.outFunctionsControl.emit(this.FunctionsControl);
|
|
170
|
+
this.checkValid(true);
|
|
171
|
+
}
|
|
172
|
+
/* FUNCTIONS */
|
|
173
|
+
get FunctionsControl() {
|
|
174
|
+
return {
|
|
170
175
|
reset: this.reset.bind(this),
|
|
171
176
|
checkIsValid: this.valid.bind(this),
|
|
172
177
|
resetError: this.resetError.bind(this),
|
|
173
178
|
setError: this.setError.bind(this),
|
|
174
179
|
removeList: async () => this.popoverFunctionControl()?.removePopoverOverlay(),
|
|
175
180
|
getDisable: async () => this.disable() ?? false,
|
|
176
|
-
updateLabelItemSelected: async (label) => this.itemsSelected.update(value => ({ ...value, [this.fieldLabel()]: this.translate.instant(label) })),
|
|
181
|
+
updateLabelItemSelected: async (label) => this.itemsSelected.update((value) => ({ ...value, [this.fieldLabel()]: this.translate.instant(label) })),
|
|
177
182
|
refreshList: async () => this.listFunctionControl()?.refresh(),
|
|
178
|
-
setItemSelectedByKey: this.setItemSelectedByKey.bind(this)
|
|
179
|
-
}
|
|
180
|
-
this.checkValid(true);
|
|
183
|
+
setItemSelectedByKey: this.setItemSelectedByKey.bind(this),
|
|
184
|
+
};
|
|
181
185
|
}
|
|
182
|
-
/* FUNCTIONS */
|
|
183
186
|
defaultConvertItemSelected(item) {
|
|
184
187
|
if (!item) {
|
|
185
188
|
return;
|
|
@@ -227,7 +230,7 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
227
230
|
}
|
|
228
231
|
const keys = [];
|
|
229
232
|
const mapKeys = [];
|
|
230
|
-
items.forEach(item => {
|
|
233
|
+
items.forEach((item) => {
|
|
231
234
|
const key = get(item, this.fieldKey());
|
|
232
235
|
if (isNil(key)) {
|
|
233
236
|
return;
|
|
@@ -286,7 +289,7 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
286
289
|
if (!itemSelected) {
|
|
287
290
|
itemSelected = {
|
|
288
291
|
[this.fieldKey()]: key,
|
|
289
|
-
[this.fieldLabel()]: CHARACTER_DATA_EMPTY
|
|
292
|
+
[this.fieldLabel()]: CHARACTER_DATA_EMPTY,
|
|
290
293
|
};
|
|
291
294
|
this.itemsSelected.set(itemSelected);
|
|
292
295
|
}
|
|
@@ -302,9 +305,9 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
302
305
|
}
|
|
303
306
|
async handlerSelectMultiKey(event, isClickManual = false) {
|
|
304
307
|
if (this.listConfig()?.configTemplateGroup?.()?.singleSelectItem && event?.mapKeys?.length) {
|
|
305
|
-
const itemClickManual = event.mapKeys.find(mapKey => mapKey.item && mapKey.item.isCheckManual);
|
|
308
|
+
const itemClickManual = event.mapKeys.find((mapKey) => mapKey.item && mapKey.item.isCheckManual);
|
|
306
309
|
if (itemClickManual) {
|
|
307
|
-
setTimeout(() => itemClickManual.item.isCheckManual = false);
|
|
310
|
+
setTimeout(() => (itemClickManual.item.isCheckManual = false));
|
|
308
311
|
event.keys = [itemClickManual.key];
|
|
309
312
|
event.mapKeys = [itemClickManual];
|
|
310
313
|
this.popoverFunctionControl()?.removePopoverOverlay();
|
|
@@ -319,7 +322,7 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
319
322
|
return;
|
|
320
323
|
}
|
|
321
324
|
const key = event?.keys[0];
|
|
322
|
-
let item = event?.mapKeys?.find(item => item.key === key)?.item;
|
|
325
|
+
let item = event?.mapKeys?.find((item) => item.key === key)?.item;
|
|
323
326
|
if (this.lengthKeys() && !item && this.httpRequestDetailItemById()) {
|
|
324
327
|
item = await this.setItemSelectedByKey(key);
|
|
325
328
|
this.outSelectMultiKey.emit({ keys: [key], mapKeys: [{ key, item }], isClickManual, tabKeyActive: this.tabKeyActive() });
|
|
@@ -435,15 +438,10 @@ export class LibsUiComponentsDropdownComponent {
|
|
|
435
438
|
this.outChangStageFlagMouse.emit(flag);
|
|
436
439
|
}
|
|
437
440
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
438
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDropdownComponent, isStandalone: true, selector: "libs_ui-components-dropdown", inputs: { useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, popoverElementRefCustom: { classPropertyName: "popoverElementRefCustom", publicName: "popoverElementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, flagMouseContent: { classPropertyName: "flagMouseContent", publicName: "flagMouseContent", isSignal: true, isRequired: false, transformFunction: null }, popoverCustomConfig: { classPropertyName: "popoverCustomConfig", publicName: "popoverCustomConfig", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, convertItemSelected: { classPropertyName: "convertItemSelected", publicName: "convertItemSelected", isSignal: true, isRequired: false, transformFunction: null }, getPopoverItemSelected: { classPropertyName: "getPopoverItemSelected", publicName: "getPopoverItemSelected", isSignal: true, isRequired: false, transformFunction: null }, httpRequestDetailItemById: { classPropertyName: "httpRequestDetailItemById", publicName: "httpRequestDetailItemById", isSignal: true, isRequired: false, transformFunction: null }, lengthKeys: { classPropertyName: "lengthKeys", publicName: "lengthKeys", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenNoSelect: { classPropertyName: "textDisplayWhenNoSelect", publicName: "textDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenMultiSelect: { classPropertyName: "textDisplayWhenMultiSelect", publicName: "textDisplayWhenMultiSelect", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, fieldGetLabel: { classPropertyName: "fieldGetLabel", publicName: "fieldGetLabel", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverConfig: { classPropertyName: "labelPopoverConfig", publicName: "labelPopoverConfig", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverFullWidth: { classPropertyName: "labelPopoverFullWidth", publicName: "labelPopoverFullWidth", isSignal: true, isRequired: false, transformFunction: null }, hasContentUnitRight: { classPropertyName: "hasContentUnitRight", publicName: "hasContentUnitRight", isSignal: true, isRequired: false, transformFunction: null }, listSearchNoDataTemplateRef: { classPropertyName: "listSearchNoDataTemplateRef", publicName: "listSearchNoDataTemplateRef", isSignal: true, isRequired: false, transformFunction: null }, fieldGetImage: { classPropertyName: "fieldGetImage", publicName: "fieldGetImage", isSignal: true, isRequired: false, transformFunction: null }, imageSize: { classPropertyName: "imageSize", publicName: "imageSize", isSignal: true, isRequired: false, transformFunction: null }, typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, fieldGetIcon: { classPropertyName: "fieldGetIcon", publicName: "fieldGetIcon", isSignal: true, isRequired: false, transformFunction: null }, fieldGetTextAvatar: { classPropertyName: "fieldGetTextAvatar", publicName: "fieldGetTextAvatar", isSignal: true, isRequired: false, transformFunction: null }, fieldGetColorAvatar: { classPropertyName: "fieldGetColorAvatar", publicName: "fieldGetColorAvatar", isSignal: true, isRequired: false, transformFunction: null }, classAvatarInclude: { classPropertyName: "classAvatarInclude", publicName: "classAvatarInclude", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, listSearchConfig: { classPropertyName: "listSearchConfig", publicName: "listSearchConfig", isSignal: true, isRequired: false, transformFunction: null }, isSearchOnline: { classPropertyName: "isSearchOnline", publicName: "isSearchOnline", isSignal: true, isRequired: false, transformFunction: null }, listHiddenInputSearch: { classPropertyName: "listHiddenInputSearch", publicName: "listHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null }, listSearchPadding: { classPropertyName: "listSearchPadding", publicName: "listSearchPadding", isSignal: true, isRequired: false, transformFunction: null }, listKeySearch: { classPropertyName: "listKeySearch", publicName: "listKeySearch", isSignal: true, isRequired: false, transformFunction: null }, listDividerClassInclude: { classPropertyName: "listDividerClassInclude", publicName: "listDividerClassInclude", isSignal: true, isRequired: false, transformFunction: null }, listConfig: { classPropertyName: "listConfig", publicName: "listConfig", isSignal: true, isRequired: false, transformFunction: null }, listButtonsOther: { classPropertyName: "listButtonsOther", publicName: "listButtonsOther", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, listClickExactly: { classPropertyName: "listClickExactly", publicName: "listClickExactly", isSignal: true, isRequired: false, transformFunction: null }, listBackgroundCustom: { classPropertyName: "listBackgroundCustom", publicName: "listBackgroundCustom", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listMultiKeySelected: { classPropertyName: "listMultiKeySelected", publicName: "listMultiKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, listKeysHidden: { classPropertyName: "listKeysHidden", publicName: "listKeysHidden", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMaxItemSelected: { classPropertyName: "validMaxItemSelected", publicName: "validMaxItemSelected", isSignal: true, isRequired: false, transformFunction: null }, changeValidUndefinedResetError: { classPropertyName: "changeValidUndefinedResetError", publicName: "changeValidUndefinedResetError", isSignal: true, isRequired: false, transformFunction: null }, allowSelectItemMultiple: { classPropertyName: "allowSelectItemMultiple", publicName: "allowSelectItemMultiple", isSignal: true, isRequired: false, transformFunction: null }, focusInputSearch: { classPropertyName: "focusInputSearch", publicName: "focusInputSearch", isSignal: true, isRequired: false, transformFunction: null }, onlyEmitDataWhenReset: { classPropertyName: "onlyEmitDataWhenReset", publicName: "onlyEmitDataWhenReset", isSignal: true, isRequired: false, transformFunction: null }, resetKeyWhenSelectAllKey: { classPropertyName: "resetKeyWhenSelectAllKey", publicName: "resetKeyWhenSelectAllKey", isSignal: true, isRequired: false, transformFunction: null }, listConfigHasDivider: { classPropertyName: "listConfigHasDivider", publicName: "listConfigHasDivider", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContent: { classPropertyName: "classIncludeContent", publicName: "classIncludeContent", isSignal: true, isRequired: false, transformFunction: null }, listIgnoreClassDisableDefaultWhenUseKeysDisableItem: { classPropertyName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", publicName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, tabKeyActive: { classPropertyName: "tabKeyActive", publicName: "tabKeyActive", isSignal: true, isRequired: false, transformFunction: null }, tabsConfig: { classPropertyName: "tabsConfig", publicName: "tabsConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderBottom: { classPropertyName: "ignoreBorderBottom", publicName: "ignoreBorderBottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", flagMouseContent: "flagMouseContentChange", lengthKeys: "lengthKeysChange", showBorderError: "showBorderErrorChange", listKeySelected: "listKeySelectedChange", listMultiKeySelected: "listMultiKeySelectedChange", tabKeyActive: "tabKeyActiveChange", outSelectKey: "outSelectKey", outSelectMultiKey: "outSelectMultiKey", outFunctionsControl: "outFunctionsControl", outValidEvent: "outValidEvent", outChangStageFlagMouse: "outChangStageFlagMouse", outDataChange: "outDataChange", outClickButtonOther: "outClickButtonOther", outShowList: "outShowList", outChangeTabKeyActive: "outChangeTabKeyActive" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: '!rounded-[4px] overflow-hidden ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general '),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + (classIncludeContent() || '')\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\"\n [class.libs-ui-dropdown-placeholder]=\"!lengthKeys()\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"/>\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 text-[#6a7383] {{ classIncludeIcon() }}\"\n [class.libs-ui-disable]=\"readonly() || disable()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig(); as tabsConfig) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [autoSelectedFirstItemCallOutsideBefore]=\"autoSelectedFirstItemCallOutsideBefore()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? false\"\n [disable]=\"disable() || loadingDetail()\"\n [disableLabel]=\"disableLabel()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { 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"] }, { 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: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containertextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "component", type: LibsUiComponentsDropdownTabsComponent, selector: "libs_ui-components-dropdown-tabs", inputs: ["ignoreBorderBottom", "tabsConfig", "tabKeyActive", "disable"], outputs: ["tabKeyActiveChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
441
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDropdownComponent, isStandalone: true, selector: "libs_ui-components-dropdown", inputs: { useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, popoverElementRefCustom: { classPropertyName: "popoverElementRefCustom", publicName: "popoverElementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, flagMouseContent: { classPropertyName: "flagMouseContent", publicName: "flagMouseContent", isSignal: true, isRequired: false, transformFunction: null }, popoverCustomConfig: { classPropertyName: "popoverCustomConfig", publicName: "popoverCustomConfig", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, convertItemSelected: { classPropertyName: "convertItemSelected", publicName: "convertItemSelected", isSignal: true, isRequired: false, transformFunction: null }, getPopoverItemSelected: { classPropertyName: "getPopoverItemSelected", publicName: "getPopoverItemSelected", isSignal: true, isRequired: false, transformFunction: null }, httpRequestDetailItemById: { classPropertyName: "httpRequestDetailItemById", publicName: "httpRequestDetailItemById", isSignal: true, isRequired: false, transformFunction: null }, lengthKeys: { classPropertyName: "lengthKeys", publicName: "lengthKeys", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenNoSelect: { classPropertyName: "textDisplayWhenNoSelect", publicName: "textDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenMultiSelect: { classPropertyName: "textDisplayWhenMultiSelect", publicName: "textDisplayWhenMultiSelect", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, fieldGetLabel: { classPropertyName: "fieldGetLabel", publicName: "fieldGetLabel", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverConfig: { classPropertyName: "labelPopoverConfig", publicName: "labelPopoverConfig", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverFullWidth: { classPropertyName: "labelPopoverFullWidth", publicName: "labelPopoverFullWidth", isSignal: true, isRequired: false, transformFunction: null }, hasContentUnitRight: { classPropertyName: "hasContentUnitRight", publicName: "hasContentUnitRight", isSignal: true, isRequired: false, transformFunction: null }, listSearchNoDataTemplateRef: { classPropertyName: "listSearchNoDataTemplateRef", publicName: "listSearchNoDataTemplateRef", isSignal: true, isRequired: false, transformFunction: null }, fieldGetImage: { classPropertyName: "fieldGetImage", publicName: "fieldGetImage", isSignal: true, isRequired: false, transformFunction: null }, imageSize: { classPropertyName: "imageSize", publicName: "imageSize", isSignal: true, isRequired: false, transformFunction: null }, typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, fieldGetIcon: { classPropertyName: "fieldGetIcon", publicName: "fieldGetIcon", isSignal: true, isRequired: false, transformFunction: null }, fieldGetTextAvatar: { classPropertyName: "fieldGetTextAvatar", publicName: "fieldGetTextAvatar", isSignal: true, isRequired: false, transformFunction: null }, fieldGetColorAvatar: { classPropertyName: "fieldGetColorAvatar", publicName: "fieldGetColorAvatar", isSignal: true, isRequired: false, transformFunction: null }, classAvatarInclude: { classPropertyName: "classAvatarInclude", publicName: "classAvatarInclude", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, listSearchConfig: { classPropertyName: "listSearchConfig", publicName: "listSearchConfig", isSignal: true, isRequired: false, transformFunction: null }, isSearchOnline: { classPropertyName: "isSearchOnline", publicName: "isSearchOnline", isSignal: true, isRequired: false, transformFunction: null }, listHiddenInputSearch: { classPropertyName: "listHiddenInputSearch", publicName: "listHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null }, listSearchPadding: { classPropertyName: "listSearchPadding", publicName: "listSearchPadding", isSignal: true, isRequired: false, transformFunction: null }, listKeySearch: { classPropertyName: "listKeySearch", publicName: "listKeySearch", isSignal: true, isRequired: false, transformFunction: null }, listDividerClassInclude: { classPropertyName: "listDividerClassInclude", publicName: "listDividerClassInclude", isSignal: true, isRequired: false, transformFunction: null }, listConfig: { classPropertyName: "listConfig", publicName: "listConfig", isSignal: true, isRequired: false, transformFunction: null }, listButtonsOther: { classPropertyName: "listButtonsOther", publicName: "listButtonsOther", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, listClickExactly: { classPropertyName: "listClickExactly", publicName: "listClickExactly", isSignal: true, isRequired: false, transformFunction: null }, listBackgroundCustom: { classPropertyName: "listBackgroundCustom", publicName: "listBackgroundCustom", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listMultiKeySelected: { classPropertyName: "listMultiKeySelected", publicName: "listMultiKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, listKeysHidden: { classPropertyName: "listKeysHidden", publicName: "listKeysHidden", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMaxItemSelected: { classPropertyName: "validMaxItemSelected", publicName: "validMaxItemSelected", isSignal: true, isRequired: false, transformFunction: null }, changeValidUndefinedResetError: { classPropertyName: "changeValidUndefinedResetError", publicName: "changeValidUndefinedResetError", isSignal: true, isRequired: false, transformFunction: null }, allowSelectItemMultiple: { classPropertyName: "allowSelectItemMultiple", publicName: "allowSelectItemMultiple", isSignal: true, isRequired: false, transformFunction: null }, focusInputSearch: { classPropertyName: "focusInputSearch", publicName: "focusInputSearch", isSignal: true, isRequired: false, transformFunction: null }, onlyEmitDataWhenReset: { classPropertyName: "onlyEmitDataWhenReset", publicName: "onlyEmitDataWhenReset", isSignal: true, isRequired: false, transformFunction: null }, resetKeyWhenSelectAllKey: { classPropertyName: "resetKeyWhenSelectAllKey", publicName: "resetKeyWhenSelectAllKey", isSignal: true, isRequired: false, transformFunction: null }, listConfigHasDivider: { classPropertyName: "listConfigHasDivider", publicName: "listConfigHasDivider", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContent: { classPropertyName: "classIncludeContent", publicName: "classIncludeContent", isSignal: true, isRequired: false, transformFunction: null }, listIgnoreClassDisableDefaultWhenUseKeysDisableItem: { classPropertyName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", publicName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, tabKeyActive: { classPropertyName: "tabKeyActive", publicName: "tabKeyActive", isSignal: true, isRequired: false, transformFunction: null }, tabsConfig: { classPropertyName: "tabsConfig", publicName: "tabsConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderBottom: { classPropertyName: "ignoreBorderBottom", publicName: "ignoreBorderBottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", flagMouseContent: "flagMouseContentChange", lengthKeys: "lengthKeysChange", showBorderError: "showBorderErrorChange", listKeySelected: "listKeySelectedChange", listMultiKeySelected: "listMultiKeySelectedChange", tabKeyActive: "tabKeyActiveChange", outSelectKey: "outSelectKey", outSelectMultiKey: "outSelectMultiKey", outFunctionsControl: "outFunctionsControl", outValidEvent: "outValidEvent", outChangStageFlagMouse: "outChangStageFlagMouse", outDataChange: "outDataChange", outClickButtonOther: "outClickButtonOther", outShowList: "outShowList", outChangeTabKeyActive: "outChangeTabKeyActive" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label\n [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required\"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover\n [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: '!rounded-[4px] overflow-hidden ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general '),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width,\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div\n [class]=\"'libs-ui-dropdown ' + (classIncludeContent() || '')\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div\n class=\"flex items-center w-full absolute\"\n [class.libs-ui-dropdown-placeholder]=\"!lengthKeys()\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar\n [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate: { value: lengthKeys() } | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"\n [config]=\"{ maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0 }\"\n [ignoreStopPropagationEvent]=\"true\" />\n\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover\n [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"></i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i\n class=\"text-[16px] libs-ui-icon-move-right rotate-90 text-[#6a7383] {{ classIncludeIcon() }}\"\n [class.libs-ui-disable]=\"readonly() || disable()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div\n class=\"mt-[8px] libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"error.message || ' ' | translate: error.interpolateParams || {}\"></div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column\">\n @if (tabsConfig(); as tabsConfig) {\n <libs_ui-components-dropdown-tabs\n [tabsConfig]=\"tabsConfig\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list\n [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [autoSelectedFirstItemCallOutsideBefore]=\"autoSelectedFirstItemCallOutsideBefore()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? false\"\n [disable]=\"disable() || loadingDetail()\"\n [disableLabel]=\"disableLabel()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { 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"] }, { 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: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containertextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "component", type: LibsUiComponentsDropdownTabsComponent, selector: "libs_ui-components-dropdown-tabs", inputs: ["ignoreBorderBottom", "tabsConfig", "tabKeyActive", "disable"], outputs: ["tabKeyActiveChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
439
442
|
}
|
|
440
443
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDropdownComponent, decorators: [{
|
|
441
444
|
type: Component,
|
|
442
|
-
args: [{ selector: 'libs_ui-components-dropdown', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
443
|
-
TranslateModule, LibsUiPipesSecurityTrustPipe, AsyncPipe,
|
|
444
|
-
LibsUiComponentsLabelComponent, LibsUiComponentsPopoverComponent,
|
|
445
|
-
LibsUiComponentsAvatarComponent, LibsUiComponentsListComponent,
|
|
446
|
-
LibsUiComponentsDropdownTabsComponent
|
|
447
|
-
], template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: '!rounded-[4px] overflow-hidden ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general '),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + (classIncludeContent() || '')\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\"\n [class.libs-ui-dropdown-placeholder]=\"!lengthKeys()\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"/>\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 text-[#6a7383] {{ classIncludeIcon() }}\"\n [class.libs-ui-disable]=\"readonly() || disable()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig(); as tabsConfig) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [autoSelectedFirstItemCallOutsideBefore]=\"autoSelectedFirstItemCallOutsideBefore()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? false\"\n [disable]=\"disable() || loadingDetail()\"\n [disableLabel]=\"disableLabel()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"] }]
|
|
445
|
+
args: [{ selector: 'libs_ui-components-dropdown', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiPipesSecurityTrustPipe, AsyncPipe, LibsUiComponentsLabelComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsAvatarComponent, LibsUiComponentsListComponent, LibsUiComponentsDropdownTabsComponent], template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label\n [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required\"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover\n [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: '!rounded-[4px] overflow-hidden ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general '),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width,\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div\n [class]=\"'libs-ui-dropdown ' + (classIncludeContent() || '')\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div\n class=\"flex items-center w-full absolute\"\n [class.libs-ui-dropdown-placeholder]=\"!lengthKeys()\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar\n [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate: { value: lengthKeys() } | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"\n [config]=\"{ maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0 }\"\n [ignoreStopPropagationEvent]=\"true\" />\n\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover\n [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"></i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i\n class=\"text-[16px] libs-ui-icon-move-right rotate-90 text-[#6a7383] {{ classIncludeIcon() }}\"\n [class.libs-ui-disable]=\"readonly() || disable()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div\n class=\"mt-[8px] libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"error.message || ' ' | translate: error.interpolateParams || {}\"></div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column\">\n @if (tabsConfig(); as tabsConfig) {\n <libs_ui-components-dropdown-tabs\n [tabsConfig]=\"tabsConfig\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list\n [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [autoSelectedFirstItemCallOutsideBefore]=\"autoSelectedFirstItemCallOutsideBefore()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? false\"\n [disable]=\"disable() || loadingDetail()\"\n [disableLabel]=\"disableLabel()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"] }]
|
|
448
446
|
}], ctorParameters: () => [] });
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSwrQkFBK0IsRUFBOEMsTUFBTSw0QkFBNEIsQ0FBQztBQUd6SCxPQUFPLEVBQVUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQXVGLDZCQUE2QixFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBQ2hNLE9BQU8sRUFBdUUsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDeEssT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFzQix3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0ksT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3hFLE9BQU8s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QkFFRSw2QkFBNkIsY0FHM0IsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxTQUFTO3dCQUN4RCw4QkFBOEIsRUFBRSxnQ0FBZ0M7d0JBQ2hFLCtCQUErQixFQUFFLDZCQUE2Qjt3QkFDOUQscUNBQXFDO3FCQUN0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgVFlQRV9TSEFQRV9BVkFUQVIsIFRZUEVfU0laRV9BVkFUQVJfQ09ORklHIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1hdmF0YXInO1xuaW1wb3J0IHsgSUJ1dHRvbiB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSUlucHV0U2VhcmNoQ29uZmlnIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtc2VhcmNoJztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBnZXRGaWVsZEtleUJ5VHlwZSwgSUxpc3REYXRhRW1pdEtleSwgSUxpc3REYXRhRW1pdE11bHRpS2V5LCBJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJTGlzdENvbmZpZ0l0ZW0sIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50LCBUWVBFX1RFTVBMQVRFIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IElGbGFnTW91c2UsIElQb3BvdmVyLCBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJUG9wb3Zlck92ZXJsYXksIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBUWVBFX1BPUE9WRVJfRVZFTlQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNTZWN1cml0eVRydXN0UGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLXNlY3VyaXR5LXRydXN0JztcbmltcG9ydCB7IElIdHRwUmVxdWVzdENvbmZpZywgTGlic1VpSHR0cFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0JztcbmltcG9ydCB7IENIQVJBQ1RFUl9EQVRBX0VNUFRZLCBjbG9uZURlZXAsIEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIEVSUk9SX01FU1NBR0VfTUFYX1ZBTElELCBnZXQsIGlzRXF1YWwsIGlzTmlsLCBzZXQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElEcm9wZG93blRhYnNJdGVtLCBJRW1pdE11bHRpS2V5LCBJRW1pdFNlbGVjdEtleSwgSVBvcG92ZXJDdXN0b21Db25maWcsIElWYWxpZE1heEl0ZW1TZWxlY3RlZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9kcm9wZG93bi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duVGFic0NvbXBvbmVudCB9IGZyb20gJy4vdGFicy90YWJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJTWVzc2FnZVRyYW5zbGF0ZSB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSwgTGlic1VpUGlwZXNTZWN1cml0eVRydXN0UGlwZSwgQXN5bmNQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duVGFic0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgZXJyb3IgPSBzaWduYWw8SU1lc3NhZ2VUcmFuc2xhdGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBzaG93TGlzdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpdGVtc1NlbGVjdGVkID0gc2lnbmFsPGFueT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdEZXRhaWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0xpc3QgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXRlbXMgPSBzaWduYWw8QXJyYXk8dW5rbm93bj4+KFtdKTtcbiAgcHJvdGVjdGVkIHBvcG92ZXJJdGVtU2VsZWN0ZWQgPSBzaWduYWw8SVBvcG92ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsYWJlbEl0ZW1TZWxlY3RlZENvbXB1dGVkID0gY29tcHV0ZWQodGhpcy5nZXRMYWJlbEl0ZW1TZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgcHJvdGVjdGVkIGF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIGtleXNTZWxlY3RlZCA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBmaWVsZEtleSA9IHNpZ25hbDxzdHJpbmc+KCdpZCcpO1xuICBwcml2YXRlIGxpc3RGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IHVzZVhzc0ZpbHRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckVsZW1lbnRSZWZDdXN0b20gPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlID0gbW9kZWw8SUZsYWdNb3VzZT4oeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlQ29udGVudCA9IG1vZGVsPElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDdXN0b21Db25maWcgPSBpbnB1dDxJUG9wb3ZlckN1c3RvbUNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgaXNOZ0NvbnRlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNvbnZlcnRJdGVtU2VsZWN0ZWQgPSBpbnB1dDwoaXRlbTogdW5rbm93biwgdHJhbnNsYXRlPzogVHJhbnNsYXRlU2VydmljZSkgPT4gdm9pZD4odGhpcy5kZWZhdWx0Q29udmVydEl0ZW1TZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgcmVhZG9ubHkgZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCA9IGlucHV0PChpdGVtOiB1bmtub3duLCB0cmFuc2xhdGU/OiBUcmFuc2xhdGVTZXJ2aWNlKSA9PiBQcm9taXNlPElQb3BvdmVyIHwgdW5kZWZpbmVkPj4oKTtcbiAgcmVhZG9ubHkgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCA9IGlucHV0PElIdHRwUmVxdWVzdENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgbGVuZ3RoS2V5cyA9IG1vZGVsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignaTE4bl9zZWxlY3RfaW5mb3JtYXRpb24nKTtcbiAgcmVhZG9ubHkgdGV4dERpc3BsYXlXaGVuTXVsdGlTZWxlY3QgPSBpbnB1dDxzdHJpbmc+KCdpMThuX3NlbGVjdGluZ19vcHRpb25zJyk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignbGlicy11aS1mb250LWg1cicpO1xuICByZWFkb25seSBmaWVsZExhYmVsID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdsYWJlbERpc3BsYXknLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgfHwgJ2xhYmVsRGlzcGxheScgfSk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0TGFiZWwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxhYmVsUG9wb3ZlckNvbmZpZyA9IGlucHV0PElQb3BvdmVyT3ZlcmxheT4oKTtcbiAgcmVhZG9ubHkgbGFiZWxQb3BvdmVyRnVsbFdpZHRoID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGhhc0NvbnRlbnRVbml0UmlnaHQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0U2VhcmNoTm9EYXRhVGVtcGxhdGVSZWYgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRJbWFnZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaW1hZ2VTaXplID0gaW5wdXQ8VFlQRV9TSVpFX0FWQVRBUl9DT05GSUc+KDE2KTtcbiAgcmVhZG9ubHkgdHlwZVNoYXBlID0gaW5wdXQ8VFlQRV9TSEFQRV9BVkFUQVI+KCdjaXJjbGUnKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRJY29uID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBmaWVsZEdldFRleHRBdmF0YXIgPSBpbnB1dDxzdHJpbmc+KCd1c2VybmFtZScpO1xuICByZWFkb25seSBmaWVsZEdldENvbG9yQXZhdGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0F2YXRhckluY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ21yLVs4cHhdJywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlIHx8ICdtci1bOHB4XScgfSk7XG4gIHJlYWRvbmx5IGdldExhc3RUZXh0QWZ0ZXJTcGFjZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxpbmtJbWFnZUVycm9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBzaG93RXJyb3IgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2hvd0JvcmRlckVycm9yID0gbW9kZWw8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWw+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVMYWJlbCA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgbGlzdFNlYXJjaENvbmZpZyA9IGlucHV0PElJbnB1dFNlYXJjaENvbmZpZywgSUlucHV0U2VhcmNoQ29uZmlnIHwgdW5kZWZpbmVkPih7IG5vQm9yZGVyOiB0cnVlIH0sIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSB8fCB7IG5vQm9yZGVyOiB0cnVlIH0gfSk7XG4gIHJlYWRvbmx5IGlzU2VhcmNoT25saW5lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBsaXN0SGlkZGVuSW5wdXRTZWFyY2ggPSBpbnB1dDxib29sZWFuPigpXG4gIHJlYWRvbmx5IGxpc3RTZWFyY2hQYWRkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEtleVNlYXJjaCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlzdERpdmlkZXJDbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RDb25maWcgPSBpbnB1dDxJTGlzdENvbmZpZ0l0ZW0+KCk7XG4gIHJlYWRvbmx5IGxpc3RCdXR0b25zT3RoZXIgPSBpbnB1dDxBcnJheTxJQnV0dG9uPj4oKTtcbiAgcmVhZG9ubHkgbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdENsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxpc3RCYWNrZ3JvdW5kQ3VzdG9tID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0TWF4SXRlbVNob3cgPSBpbnB1dDxudW1iZXI+KDUpO1xuICByZWFkb25seSBsaXN0S2V5U2VsZWN0ZWQgPSBtb2RlbDx1bmtub3duPigpO1xuICByZWFkb25seSBsaXN0TXVsdGlLZXlTZWxlY3RlZCA9IG1vZGVsPEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBsaXN0S2V5c0Rpc2FibGUgPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgbGlzdEtleXNIaWRkZW4gPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElNZXNzYWdlVHJhbnNsYXRlPigpO1xuICByZWFkb25seSB2YWxpZE1heEl0ZW1TZWxlY3RlZCA9IGlucHV0PElWYWxpZE1heEl0ZW1TZWxlY3RlZD4oKTtcbiAgcmVhZG9ubHkgY2hhbmdlVmFsaWRVbmRlZmluZWRSZXNldEVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWxsb3dTZWxlY3RJdGVtTXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmb2N1c0lucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IG9ubHlFbWl0RGF0YVdoZW5SZXNldCA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIHRydWUga2hpIG114buRbiBlbWl0IHPhu7Ega2nhu4duIHRoYXkgxJHhu5VpIGtleVxuICByZWFkb25seSByZXNldEtleVdoZW5TZWxlY3RBbGxLZXkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0Q29uZmlnSGFzRGl2aWRlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVJY29uID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdtbC1bOHB4XScsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSB8fCAnbWwtWzhweF0nIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVDb250ZW50ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0SWdub3JlQ2xhc3NEaXNhYmxlRGVmYXVsdFdoZW5Vc2VLZXlzRGlzYWJsZUl0ZW0gPSBpbnB1dDxib29sZWFuPigpOyAvLyBi4buPIGNo4bq/IMSR4buZIGRpc2FibGUgaXRlbSB0csOqbiBodG1sIGxpc3QgdmlldyDEkeG7gyBkaXNhYmxlIHThu6tuZyBwaOG6p24gdHJvbmcgcm93c1xuICByZWFkb25seSB0YWJLZXlBY3RpdmUgPSBtb2RlbDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHRhYnNDb25maWcgPSBpbnB1dDxBcnJheTxJRHJvcGRvd25UYWJzSXRlbT4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUJvcmRlckJvdHRvbSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0U2VsZWN0S2V5ID0gb3V0cHV0PElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkPigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaOG7jW4gMS5cbiAgcmVhZG9ubHkgb3V0U2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8SUVtaXRNdWx0aUtleSB8IHVuZGVmaW5lZD4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIHR5cGUgY2hvIHBow6lwIGNo4buNbiBuaGnhu4F1LlxuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRWYWxpZEV2ZW50ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0RGF0YUNoYW5nZSA9IG91dHB1dDxBcnJheTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2xpY2tCdXR0b25PdGhlciA9IG91dHB1dDxJQnV0dG9uPigpO1xuICByZWFkb25seSBvdXRTaG93TGlzdCA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VUYWJLZXlBY3RpdmUgPSBvdXRwdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIC8qIElOSkVDVCovXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIGh0dHBSZXF1ZXN0U2VydmljZSA9IGluamVjdChMaWJzVWlIdHRwUmVxdWVzdFNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBsaXN0Q29uZmlnID0gdGhpcy5saXN0Q29uZmlnKCk7XG4gICAgICBpZiAobGlzdENvbmZpZykge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5maWVsZEtleS5zZXQoZ2V0RmllbGRLZXlCeVR5cGUobGlzdENvbmZpZywgJ2lkJykpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc05pbCh0aGlzLmxpc3RLZXlTZWxlY3RlZCgpKSAmJiB0aGlzLmxpc3RLZXlTZWxlY3RlZCgpICE9PSAnJyAmJiAhdGhpcy5pdGVtc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJTZWxlY3RlZEtleSh7IGtleTogdGhpcy5saXN0S2V5U2VsZWN0ZWQoKSwgaXRlbTogdW5kZWZpbmVkLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZVZhbGlkVW5kZWZpbmVkUmVzZXRFcnJvcigpICYmIHRoaXMudmFsaWRSZXF1aXJlZCgpKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLnJlc2V0RXJyb3IoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5rZXlzU2VsZWN0ZWQoKSB8fCBbXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCkgfHwgW107XG5cbiAgICAgICAgICBpZiAoaXNFcXVhbChjbG9uZURlZXAocHJldmlvdXNWYWx1ZSksIGNsb25lRGVlcChjdXJyZW50VmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogY3VycmVudFZhbHVlLCBtYXBLZXlzOiBbXSwgaXNDbGlja01hbnVhbDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBsaXN0Q29uZmlnID0gdGhpcy5saXN0Q29uZmlnKCk7XG4gICAgXG4gICAgaWYgKHRoaXMubGlzdEtleVNlbGVjdGVkKCkgfHwgdGhpcy5saXN0TXVsdGlLZXlTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLmxlbmd0aEtleXMuc2V0KHRoaXMubGlzdEtleVNlbGVjdGVkKCkgPyAxIDogdGhpcy5saXN0TXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggfHwgMCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxlbmd0aEtleXMoKSAmJiBsaXN0Q29uZmlnICYmIChsaXN0Q29uZmlnLmF1dG9TZWxlY3RGaXJzdEl0ZW0gfHwgbGlzdENvbmZpZy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uYXV0b1NlbGVjdEFsbEl0ZW0gfHwgbGlzdENvbmZpZy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uZmxhdEl0ZW1zU3VwcG9ydEF1dG9TZWxlY3QpICYmIGxpc3RDb25maWcuaHR0cFJlcXVlc3REYXRhKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KHRydWUpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdERhdGEgPSBsaXN0Q29uZmlnLmh0dHBSZXF1ZXN0RGF0YSgpO1xuICAgICAgICBjb25zdCB7IGFyZ3VtZW50c1ZhbHVlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB9ID0gaHR0cFJlcXVlc3REYXRhO1xuICAgICAgICB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS51cGRhdGVBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUsIHsgLi4udGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuZmFrZVJlc3BvbnNlUGFnaW5nQXBpKCksIGRyb3Bkb3duVGFiS2V5QWN0aXZlOiB0aGlzLnRhYktleUFjdGl2ZSB9LCB7fSwgJycsIHRydWUsIGZhbHNlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmNhbGxBcGkoaHR0cFJlcXVlc3REYXRhKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nRGV0YWlsLnNldChmYWxzZSk7XG4gICAgICAgIGlmIChyZXN1bHQ/LmRhdGEpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnNldChyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgdGhpcy5lbWl0QXV0b1NlbGVjdEtleShyZXN1bHQuZGF0YSwgbGlzdENvbmZpZy50eXBlKTtcbiAgICAgICAgICB0aGlzLmF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQoZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXREYXRhQ2hhbmdlLmVtaXQodGhpcy5pdGVtcygpKTtcbiAgICB9XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgcmVzZXQ6IHRoaXMucmVzZXQuYmluZCh0aGlzKSxcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy52YWxpZC5iaW5kKHRoaXMpLFxuICAgICAgcmVzZXRFcnJvcjogdGhpcy5yZXNldEVycm9yLmJpbmQodGhpcyksXG4gICAgICBzZXRFcnJvcjogdGhpcy5zZXRFcnJvci5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlTGlzdDogYXN5bmMgKCkgPT4gdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCksXG4gICAgICBnZXREaXNhYmxlOiBhc3luYyAoKSA9PiB0aGlzLmRpc2FibGUoKSA/PyBmYWxzZSxcbiAgICAgIHVwZGF0ZUxhYmVsSXRlbVNlbGVjdGVkOiBhc3luYyAobGFiZWwpID0+IHRoaXMuaXRlbXNTZWxlY3RlZC51cGRhdGUodmFsdWUgPT4gKHsgLi4udmFsdWUsIFt0aGlzLmZpZWxkTGFiZWwoKV06IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobGFiZWwpIH0pKSxcbiAgICAgIHJlZnJlc2hMaXN0OiBhc3luYyAoKSA9PiB0aGlzLmxpc3RGdW5jdGlvbkNvbnRyb2woKT8ucmVmcmVzaCgpLFxuICAgICAgc2V0SXRlbVNlbGVjdGVkQnlLZXk6IHRoaXMuc2V0SXRlbVNlbGVjdGVkQnlLZXkuYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tWYWxpZCh0cnVlKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIGRlZmF1bHRDb252ZXJ0SXRlbVNlbGVjdGVkKGl0ZW06IHVua25vd24pIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmllbGRHZXRMYWJlbCA9IHRoaXMuZmllbGRHZXRMYWJlbCgpO1xuICAgIGNvbnN0IHZhbHVlID0gZmllbGRHZXRMYWJlbCA/IGdldChpdGVtLCBmaWVsZEdldExhYmVsKSA6IHVuZGVmaW5lZDtcbiAgICBzZXQoaXRlbSwgdGhpcy5maWVsZExhYmVsKCksIHZhbHVlID8/IGdldChpdGVtLCAnbGFiZWwnKSA/PyBnZXQoaXRlbSwgJ25hbWUnKSA/PyAnICcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYWJlbEl0ZW1TZWxlY3RlZCgpIHtcbiAgICBsZXQgbGFiZWwgPSAnICc7XG4gICAgaWYgKCF0aGlzLmxlbmd0aEtleXMoKSkge1xuICAgICAgbGFiZWwgPSB0aGlzLnRleHREaXNwbGF5V2hlbk5vU2VsZWN0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSA+IDEpIHtcbiAgICAgIGxhYmVsID0gdGhpcy50ZXh0RGlzcGxheVdoZW5NdWx0aVNlbGVjdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW5ndGhLZXlzKCkgPT09IDEpIHtcbiAgICAgIGxhYmVsID0gdGhpcy5pdGVtc1NlbGVjdGVkKCk/Llt0aGlzLmZpZWxkTGFiZWwoKV0gfHwgdGhpcy50ZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBwcml2YXRlIGVtaXRBdXRvU2VsZWN0S2V5KGl0ZW1zOiBBcnJheTx1bmtub3duPiwgdHlwZTogVFlQRV9URU1QTEFURSkge1xuICAgIGNvbnN0IGxpc3RDb25maWcgPSB0aGlzLmxpc3RDb25maWcoKTtcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGggfHwgIWxpc3RDb25maWcgfHwgKCFsaXN0Q29uZmlnLmF1dG9TZWxlY3RGaXJzdEl0ZW0gJiYgIWxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/LmF1dG9TZWxlY3RBbGxJdGVtICYmICFsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5mbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdEl0ZW1zU3VwcG9ydEF1dG9TZWxlY3QgPSBsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5mbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdDtcbiAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJyAmJiBmbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCkge1xuICAgICAgaXRlbXMgPSBmbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdChpdGVtcyk7XG4gICAgfVxuICAgIGlmIChsaXN0Q29uZmlnLmF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1swXTtcbiAgICAgIGNvbnN0IGtleSA9IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpO1xuICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycgfHwgdHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdGVkS2V5KHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5saXN0S2V5U2VsZWN0ZWQuc2V0KGtleSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogW2tleV0sIG1hcEtleXM6IFt7IGtleSwgaXRlbSwgaXNDbGlja01hbnVhbDogZmFsc2UgfV0sIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5saXN0TXVsdGlLZXlTZWxlY3RlZC5zZXQoW2tleV0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gJ2NoZWNrYm94JyAmJiB0eXBlICE9PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBtYXBLZXlzOiBBcnJheTxJTGlzdERhdGFFbWl0S2V5PiA9IFtdO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKTtcbiAgICAgIGlmIChpc05pbChrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgbWFwS2V5cy5wdXNoKHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RNdWx0aUtleSh7IGtleXMsIG1hcEtleXMsIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KGtleXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudCh0eXBlOiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMuc2hvd0xpc3Quc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0U2hvd0xpc3QuZW1pdCh0aGlzLnNob3dMaXN0KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dMaXN0LnNldCh0cnVlKTtcbiAgICB0aGlzLm91dFNob3dMaXN0LmVtaXQodGhpcy5zaG93TGlzdCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRGF0YUNoYW5nZShpdGVtczogQXJyYXk8dW5rbm93bj4pIHtcbiAgICB0aGlzLml0ZW1zLnNldChpdGVtcyk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24oKTtcbiAgICB0aGlzLm91dERhdGFDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoZXZlbnQ6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLmZsYWdNb3VzZUNvbnRlbnQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLm1lcmdlRmxhZ01vdXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uT3RoZXIoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbk90aGVyLmVtaXQoYnV0dG9uKTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50Py5rZXk7XG4gICAgY29uc3QgaXRlbSA9IGV2ZW50Py5pdGVtO1xuICAgIGNvbnN0IGlzQ2xpY2tNYW51YWwgPSBldmVudD8uaXNDbGlja01hbnVhbDtcbiAgICB0aGlzLmxlbmd0aEtleXMuc2V0KCEoaXNOaWwoa2V5KSB8fCAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5ID09PSAnJykpID8gMSA6IDApO1xuICAgIHRoaXMubGlzdEtleVNlbGVjdGVkLnNldChrZXkpO1xuICAgIGlmICghdGhpcy5hbGxvd1NlbGVjdEl0ZW1NdWx0aXBsZSgpICYmIHRoaXMuaXRlbXNTZWxlY3RlZCgpICYmIGdldCh0aGlzLml0ZW1zU2VsZWN0ZWQoKSwgdGhpcy5maWVsZEtleSgpKSA9PT0ga2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0NsaWNrTWFudWFsKSB7XG4gICAgICBpZiAoIShpc05pbChrZXkpIHx8ICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkgPT09ICcnKSkgJiYgKGl0ZW0gfHwgdGhpcy5pdGVtc1NlbGVjdGVkKCkpKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICBpZiAodGhpcy5sZW5ndGhLZXlzKCkgJiYgIWl0ZW0gJiYgdGhpcy5odHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKCkpIHtcbiAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBhd2FpdCB0aGlzLnNldEl0ZW1TZWxlY3RlZEJ5S2V5KGtleSk7XG4gICAgICBpZiAoIWl0ZW1TZWxlY3RlZCkge1xuICAgICAgICBpdGVtU2VsZWN0ZWQgPSB7XG4gICAgICAgICAgW3RoaXMuZmllbGRLZXkoKV06IGtleSxcbiAgICAgICAgICBbdGhpcy5maWVsZExhYmVsKCldOiBDSEFSQUNURVJfREFUQV9FTVBUWVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQuc2V0KGl0ZW1TZWxlY3RlZCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuaXRlbSA9IGl0ZW1TZWxlY3RlZDtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0U2VsZWN0S2V5LmVtaXQoeyAuLi5ldmVudCwgdGFiS2V5QWN0aXZlOiB0aGlzLnRhYktleUFjdGl2ZSgpIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zU2VsZWN0ZWQuc2V0KGNsb25lRGVlcChpdGVtKSk7XG4gICAgdGhpcy5idWlsZERpc3BsYXkoKTtcbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsgLi4uZXZlbnQsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0TXVsdGlLZXkoZXZlbnQ6IElMaXN0RGF0YUVtaXRNdWx0aUtleSB8IHVuZGVmaW5lZCwgaXNDbGlja01hbnVhbCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMubGlzdENvbmZpZygpPy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uc2luZ2xlU2VsZWN0SXRlbSAmJiBldmVudD8ubWFwS2V5cz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpdGVtQ2xpY2tNYW51YWwgPSBldmVudC5tYXBLZXlzLmZpbmQobWFwS2V5ID0+IG1hcEtleS5pdGVtICYmIG1hcEtleS5pdGVtLmlzQ2hlY2tNYW51YWwpO1xuICAgICAgaWYgKGl0ZW1DbGlja01hbnVhbCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGl0ZW1DbGlja01hbnVhbC5pdGVtLmlzQ2hlY2tNYW51YWwgPSBmYWxzZSk7XG4gICAgICAgIGV2ZW50LmtleXMgPSBbaXRlbUNsaWNrTWFudWFsLmtleV07XG4gICAgICAgIGV2ZW50Lm1hcEtleXMgPSBbaXRlbUNsaWNrTWFudWFsXTtcbiAgICAgICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChbLi4uKGV2ZW50Py5rZXlzIHx8IFtdKV0pO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KFsuLi4oZXZlbnQ/LmtleXMgfHwgW10pXSk7XG4gICAgdGhpcy5sZW5ndGhLZXlzLnNldChldmVudD8ua2V5cz8ubGVuZ3RoIHx8IDApO1xuICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSA+IDEpIHtcbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IC4uLihldmVudCB8fCB7fSksIGlzQ2xpY2tNYW51YWwsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gZXZlbnQ/LmtleXNbMF07XG4gICAgbGV0IGl0ZW0gPSBldmVudD8ubWFwS2V5cz8uZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBrZXkpPy5pdGVtO1xuXG4gICAgaWYgKHRoaXMubGVuZ3RoS2V5cygpICYmICFpdGVtICYmIHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCgpKSB7XG4gICAgICBpdGVtID0gYXdhaXQgdGhpcy5zZXRJdGVtU2VsZWN0ZWRCeUtleShrZXkpO1xuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHsga2V5czogW2tleV0sIG1hcEtleXM6IFt7IGtleSwgaXRlbSB9XSwgaXNDbGlja01hbnVhbCwgdGFiS2V5QWN0aXZlOiB0aGlzLnRhYktleUFjdGl2ZSgpIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zU2VsZWN0ZWQuc2V0KGNsb25lRGVlcChpdGVtKSk7XG4gICAgdGhpcy5idWlsZERpc3BsYXkoKTtcbiAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyAuLi4oZXZlbnQgfHwge30pLCBpc0NsaWNrTWFudWFsLCB0YWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldEl0ZW1TZWxlY3RlZEJ5S2V5KGtleTogdW5rbm93bikge1xuICAgIGNvbnN0IGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQgPSB0aGlzLmh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQoKTtcbiAgICBpZiAoIWh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQgfHwgdGhpcy5sb2FkaW5nRGV0YWlsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQodHJ1ZSk7XG4gICAgICBjb25zdCB7IGFyZ3VtZW50c1ZhbHVlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB9ID0gaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZDtcbiAgICAgIHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyBrZXksIGRyb3Bkb3duVGFiS2V5QWN0aXZlOiB0aGlzLnRhYktleUFjdGl2ZSgpIH0sIHt9LCAnJywgZmFsc2UsIGZhbHNlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5jYWxsQXBpKGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQpO1xuICAgICAgY29uc3QgaXRlbSA9IGNsb25lRGVlcChyZXN1bHQ/LmRhdGE/LlswXSB8fCByZXN1bHQ/LmRhdGEpO1xuICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChpdGVtKTtcbiAgICAgIHRoaXMuYnVpbGREaXNwbGF5KCk7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVRhYigpIHtcbiAgICB0aGlzLm91dENoYW5nZVRhYktleUFjdGl2ZS5lbWl0KHRoaXMudGFiS2V5QWN0aXZlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJMb2FkaW5nTGlzdChldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMubG9hZGluZ0xpc3Quc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0RXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3Iuc2V0KHsgbWVzc2FnZTogZXJyb3IgfSk7XG4gICAgdGhpcy5zaG93Qm9yZGVyRXJyb3Iuc2V0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZCgpIHtcbiAgICBpZiAodGhpcy5lcnJvcigpPy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tWYWxpZCh2YWxpZGF0ZURlZmF1bHQ/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgdGhpcy5lcnJvci5zZXQodW5kZWZpbmVkKTtcbiAgICBjb25zdCB2YWxpZCA9IHsgcmVxdWlyZWQ6IHRydWUsIGxpbWl0TWF4SXRlbVNlbGVjdDogdHJ1ZSB9O1xuICAgIGNvbnN0IHZhbGlkTWF4SXRlbVNlbGVjdGVkID0gdGhpcy52YWxpZE1heEl0ZW1TZWxlY3RlZCgpO1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiAhdGhpcy5sZW5ndGhLZXlzKCkpIHtcbiAgICAgIHZhbGlkLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWxpZE1heEl0ZW1TZWxlY3RlZCAmJiB0aGlzLmxlbmd0aEtleXMoKSA+IHZhbGlkTWF4SXRlbVNlbGVjdGVkLnZhbHVlKSB7XG4gICAgICB2YWxpZC5saW1pdE1heEl0ZW1TZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZURlZmF1bHQgJiYgdmFsaWQucmVxdWlyZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB2YWxpZFJlcXVpcmVkID0gdGhpcy52YWxpZFJlcXVpcmVkKCk7XG4gICAgICB0aGlzLmVycm9yLnNldCh7IC4uLih2YWxpZFJlcXVpcmVkIHx8IHt9KSwgbWVzc2FnZTogdmFsaWRSZXF1aXJlZD8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEIH0pO1xuICAgIH1cbiAgICBpZiAoIXZhbGlkYXRlRGVmYXVsdCAmJiAhdGhpcy5lcnJvcigpICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHZhbGlkTWF4SXRlbVNlbGVjdGVkID0gdGhpcy52YWxpZE1heEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgdGhpcy5lcnJvci5zZXQoeyAuLi4odmFsaWRNYXhJdGVtU2VsZWN0ZWQgfHwge30pLCBtZXNzYWdlOiB2YWxpZE1heEl0ZW1TZWxlY3RlZD8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHsgdmFsdWU6IHZhbGlkTWF4SXRlbVNlbGVjdGVkPy52YWx1ZSB9IH0pXG4gICAgfVxuICAgIHRoaXMub3V0VmFsaWRFdmVudC5lbWl0KHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCk7XG4gICAgcmV0dXJuIHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRFcnJvcigpIHtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2hvd0JvcmRlckVycm9yLnNldChmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckxpc3RGdW5jdGlvbnNDb250cm9sKGV2ZW50OiBJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5saXN0RnVuY3Rpb25Db250cm9sLnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZzogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMuZmxhZ01vdXNlLnNldChmbGFnKTtcbiAgICB0aGlzLm1lcmdlRmxhZ01vdXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmxlbmd0aEtleXMuc2V0KDApO1xuICAgIHRoaXMubGlzdEZ1bmN0aW9uQ29udHJvbCgpPy5yZXNldEtleVNlbGVjdGVkKCk7XG4gICAgaWYgKCF0aGlzLnNob3dMaXN0KCkgJiYgdGhpcy5vbmx5RW1pdERhdGFXaGVuUmVzZXQoKSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHRoaXMubGlzdEtleVNlbGVjdGVkLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZERpc3BsYXkoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXNTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLmNvbnZlcnRJdGVtU2VsZWN0ZWQoKSh0aGlzLml0ZW1zU2VsZWN0ZWQoKSwgdGhpcy50cmFuc2xhdGUpO1xuICAgICAgY29uc3QgZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCA9IHRoaXMuZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCgpO1xuICAgICAgaWYgKGdldFBvcG92ZXJJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVySXRlbVNlbGVjdGVkLnNldChhd2FpdCBnZXRQb3BvdmVySXRlbVNlbGVjdGVkKHRoaXMuaXRlbXNTZWxlY3RlZCwgdGhpcy50cmFuc2xhdGUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRmxhZ01vdXNlKCkge1xuICAgIGNvbnN0IGZsYWc6IElGbGFnTW91c2UgPSB7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlLCBpc0NvbnRhaW5lckhhc1Njcm9sbDogZmFsc2UgfTtcbiAgICBpZiAodGhpcy5mbGFnTW91c2VDb250ZW50KCk/LmlzTW91c2VFbnRlciB8fCB0aGlzLmZsYWdNb3VzZSgpLmlzTW91c2VFbnRlcikge1xuICAgICAgZmxhZy5pc01vdXNlRW50ZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5mbGFnTW91c2VDb250ZW50KCk/LmlzTW91c2VFbnRlckNvbnRlbnQgfHwgdGhpcy5mbGFnTW91c2UoKS5pc01vdXNlRW50ZXJDb250ZW50KSB7XG4gICAgICBmbGFnLmlzTW91c2VFbnRlckNvbnRlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5mbGFnTW91c2VDb250ZW50KCk/LmlzQ29udGFpbmVySGFzU2Nyb2xsIHx8IHRoaXMuZmxhZ01vdXNlKCkuaXNDb250YWluZXJIYXNTY3JvbGwpIHtcbiAgICAgIGZsYWcuaXNDb250YWluZXJIYXNTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnKTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cbiAgQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbCkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWwgW2NsYXNzSW5jbHVkZV09XCJsYWJlbC5jbGFzc0luY2x1ZGVcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbC5sYWJlbExlZnRcIlxuICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgIFtyZXF1aXJlZF09XCJsYWJlbC5yZXF1aXJlZCBcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWwubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbC5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbC5idXR0b25zTGVmdFwiXG4gICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsLmJ1dHRvbnNSaWdodFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImxhYmVsLmRpc2FibGVCdXR0b25zTGVmdCB8fCBkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImxhYmVsLmRpc2FibGVCdXR0b25zUmlnaHQgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsLmhhc1RvZ2dsZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICBbdG9nZ2xlRGlzYWJsZV09XCJsYWJlbC50b2dnbGVEaXNhYmxlIHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWwucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbC5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWwuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbC5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWwuY291bnRcIiAvPlxuICB9XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbaWdub3JlU2hvd1BvcG92ZXJdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICBbY2xhc3NdPVwiY2xhc3NJbmNsdWRlKCkgfHwgJ3ctZnVsbCdcIlxuICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICBbZmxhZ01vdXNlXT1cImZsYWdNb3VzZSgpXCJcbiAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICBbaWdub3JlQ3Vyc29yUG9pbnRlck1vZGVMaWtlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KClcIlxuICAgIFtlbGVtZW50UmVmQ3VzdG9tXT1cInBvcG92ZXJFbGVtZW50UmVmQ3VzdG9tKClcIlxuICAgIFtjb25maWddPVwie1xuICAgICAgYW5pbWF0aW9uQ29uZmlnOiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/LmFuaW1hdGlvbkNvbmZpZyB8fCB7fSxcbiAgICAgIHpJbmRleDogekluZGV4KCkgPz8gMTAwMCxcbiAgICAgIHdpZHRoQnlQYXJlbnQ6IHBvcG92ZXJDdXN0b21Db25maWcoKT8ud2lkdGhCeVBhcmVudCA/PyB0cnVlLFxuICAgICAgcGFyZW50Qm9yZGVyV2lkdGg6IHBvcG92ZXJDdXN0b21Db25maWcoKT8ucGFyZW50Qm9yZGVyV2lkdGggPz8gMCxcbiAgICAgIG1heEhlaWdodDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5tYXhIZWlnaHQgPz8gMjA0OCxcbiAgICAgIG1heFdpZHRoOiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/Lm1heFdpZHRoID8/IDIwNDgsXG4gICAgICBkaXJlY3Rpb246IHBvcG92ZXJDdXN0b21Db25maWcoKT8uZGlyZWN0aW9uID8/ICdib3R0b20nLFxuICAgICAgdGVtcGxhdGU6IGxpc3RWaWV3RWwsXG4gICAgICB3aGl0ZVRoZW1lOiB0cnVlLFxuICAgICAgdGltZXJEZXN0cm95OiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/LnRpbWVyRGVzdHJveSA/PyAwLFxuICAgICAgaWdub3JlQXJyb3c6IHBvcG92ZXJDdXN0b21Db25maWcoKT8uaWdub3JlQXJyb3cgPz8gdHJ1ZSxcbiAgICAgIGRpcmVjdGlvbkRpc3RhbmNlOiAyLFxuICAgICAgY2xhc3NJbmNsdWRlOiAnIXJvdW5kZWQtWzRweF0gb3ZlcmZsb3ctaGlkZGVuICcgKyAocG9wb3ZlckN1c3RvbUNvbmZpZygpPy5jbGFzc0luY2x1ZGUgPz8gJ2xpYnMtdWktYm9yZGVyLWdlbmVyYWwgJyksXG4gICAgICBwb3NpdGlvbjogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwIH0sXG4gICAgICB3aWR0aDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy53aWR0aFxuICAgIH1cIlxuICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyQ29udHJvbEV2ZW50KCRldmVudClcIlxuICAgIChvdXRFdmVudCk9XCJoYW5kbGVyRXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCI+XG4gICAgQGlmICghaXNOZ0NvbnRlbnQoKSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktZHJvcGRvd24gJyArIChjbGFzc0luY2x1ZGVDb250ZW50KCkgfHwgJycpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWdlbmVyYWxdPVwiIWVycm9yKCkgJiYgIXNob3dCb3JkZXJFcnJvcigpICYmICFzaG93TGlzdCgpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLXByaW1hcnktZm9jdXMtZ2VuZXJhbF09XCIhZXJyb3IoKSAmJiAhc2hvd0JvcmRlckVycm9yKCkgJiYgc2hvd0xpc3QoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cImVycm9yKCkgfHwgc2hvd0JvcmRlckVycm9yKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHktYmFja2dyb3VuZF09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiEoZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKSB8fCByZWFkb25seSgpKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGUtYmFja2dyb3VuZF09XCJkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwibG9hZGluZ0RldGFpbCgpXCJcbiAgICAgICAgW2NsYXNzLnJvdW5kZWQtdHItMF09XCJoYXNDb250ZW50VW5pdFJpZ2h0KClcIlxuICAgICAgICBbY2xhc3Mucm91bmRlZC1ici0wXT1cImhhc0NvbnRlbnRVbml0UmlnaHQoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBhYnNvbHV0ZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRyb3Bkb3duLXBsYWNlaG9sZGVyXT1cIiFsZW5ndGhLZXlzKClcIj5cbiAgICAgICAgICAgICAgQGlmIChsZW5ndGhLZXlzKCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW1zU2VsZWN0ZWQoKTsgYXMgaXRlbXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgQGlmIChmaWVsZEdldEltYWdlKCk7IGFzIGZpZWxkR2V0SW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1hdmF0YXIgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0F2YXRhckluY2x1ZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVTaGFwZV09XCJ0eXBlU2hhcGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiaW1hZ2VTaXplKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsaW5rQXZhdGFyXT1cIml0ZW1zU2VsZWN0ZWRbZmllbGRHZXRJbWFnZV1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsaW5rQXZhdGFyRXJyb3JdPVwibGlua0ltYWdlRXJyb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkR2VuQ29sb3JdPVwiaXRlbXNTZWxlY3RlZFtmaWVsZEdldENvbG9yQXZhdGFyKCkgfHwgZmllbGRHZXRUZXh0QXZhdGFyKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZ2V0TGFzdFRleHRBZnRlclNwYWNlXT1cImdldExhc3RUZXh0QWZ0ZXJTcGFjZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJpdGVtc1NlbGVjdGVkW2ZpZWxkR2V0VGV4dEF2YXRhcigpXVwiLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRHZXRJY29uKCk7IGFzIGZpZWxkR2V0SWNvbikge1xuICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbXNTZWxlY3RlZFtmaWVsZEdldEljb25dICsgJyBtci1bOHB4XSdcIj48L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGxhYmVsUG9wb3ZlckZ1bGxXaWR0aCgpID8gJ3ctMTAwICcgOiAnJykgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsSXRlbVNlbGVjdGVkQ29tcHV0ZWQoKSB8IHRyYW5zbGF0ZTp7dmFsdWU6IGxlbmd0aEtleXMoKX0gfCBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlOidodG1sJzp1c2VYc3NGaWx0ZXIoKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDogbGFiZWxQb3BvdmVyQ29uZmlnKCk/Lm1heFdpZHRoIHx8IDI1MCwgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OiBsYWJlbFBvcG92ZXJDb25maWcoKT8uekluZGV4LCB0aW1lckRlc3Ryb3k6IGxhYmVsUG9wb3ZlckNvbmZpZygpPy50aW1lckRlc3Ryb3kgfHwgMH1cIlxuICAgICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cblxuICAgICAgICAgICAgICBAaWYgKHBvcG92ZXJJdGVtU2VsZWN0ZWQoKTsgYXMgcG9wb3Zlckl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCJwb3BvdmVySXRlbVNlbGVjdGVkLnR5cGUgfHwgJ290aGVyJ1wiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInBvcG92ZXJJdGVtU2VsZWN0ZWQuY29uZmlnIHx8IHt9XCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHBvcG92ZXJJdGVtU2VsZWN0ZWQuZGF0YVZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cInBvcG92ZXJJdGVtU2VsZWN0ZWQuZGF0YVZpZXcgfCB0cmFuc2xhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi10b29sdGlwLW91dGxpbmUgdGV4dC1bMTZweF0gbXgtWzhweF1cIj4gPC9pPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMTZweF0gbGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwIHRleHQtWyM2YTczODNdIHt7IGNsYXNzSW5jbHVkZUljb24oKSB9fVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cInJlYWRvbmx5KCkgfHwgZGlzYWJsZSgpXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIH1cbiAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgQGlmIChzaG93RXJyb3IoKSkge1xuICAgIEBpZiAoZXJyb3IoKTsgYXMgZXJyb3IpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC1bOHB4XSBsaWJzLXVpLXRleHQtZXJyb3IgbGlicy11aS1mb250LWg3clwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiKGVycm9yLm1lc3NhZ2UgfHwgJyAnKSB8IHRyYW5zbGF0ZTooZXJyb3IuaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pXCI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsaXN0Vmlld0VsPlxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cbiAgICBAaWYgKHRhYnNDb25maWcoKTsgYXMgdGFic0NvbmZpZykge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bi10YWJzIFt0YWJzQ29uZmlnXT1cInRhYnNDb25maWdcIlxuICAgICAgICBbKHRhYktleUFjdGl2ZSldPVwidGFiS2V5QWN0aXZlXCJcbiAgICAgICAgW2lnbm9yZUJvcmRlckJvdHRvbV09XCJpZ25vcmVCb3JkZXJCb3R0b20oKVwiXG4gICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgbG9hZGluZ0xpc3QoKVwiXG4gICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRhYigpXCIgLz5cbiAgICB9XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0IFtzZWFyY2hDb25maWddPVwibGlzdFNlYXJjaENvbmZpZygpXCJcbiAgICAgIFtpc1NlYXJjaE9ubGluZV09XCJpc1NlYXJjaE9ubGluZSgpXCJcbiAgICAgIFtkcm9wZG93blRhYktleUFjdGl2ZV09XCJ0YWJLZXlBY3RpdmUoKVwiXG4gICAgICBba2V5U2VhcmNoXT1cImxpc3RLZXlTZWFyY2goKVwiXG4gICAgICBbY29uZmlnXT1cImxpc3RDb25maWcoKVwiXG4gICAgICBbYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmVdPVwiYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUoKVwiXG4gICAgICBbcGFkZGluZ0xlZnRJdGVtXT1cInBvcG92ZXJDdXN0b21Db25maWcoKT8ucGFkZGluZ0xlZnRJdGVtID8/IGZhbHNlXCJcbiAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICBbaGlkZGVuSW5wdXRTZWFyY2hdPVwibGlzdEhpZGRlbklucHV0U2VhcmNoKClcIlxuICAgICAgW3NlYXJjaFBhZGRpbmddPVwibGlzdFNlYXJjaFBhZGRpbmcoKVwiXG4gICAgICBbbWF4SXRlbVNob3ddPVwibGlzdE1heEl0ZW1TaG93KClcIlxuICAgICAgW2tleVNlbGVjdGVkXT1cImxpc3RLZXlTZWxlY3RlZCgpXCJcbiAgICAgIFttdWx0aUtleVNlbGVjdGVkXT1cImxpc3RNdWx0aUtleVNlbGVjdGVkKClcIlxuICAgICAgW2NsaWNrRXhhY3RseV09XCJwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/LmNsaWNrRXhhY3RseSA/PyBmYWxzZVwiXG4gICAgICBbZGl2aWRlckNsYXNzSW5jbHVkZV09XCJsaXN0U2VhcmNoQ29uZmlnKCkgPyBsaXN0RGl2aWRlckNsYXNzSW5jbHVkZSgpIDogJ2hpZGRlbidcIlxuICAgICAgW2J1dHRvbnNPdGhlcl09XCJsaXN0QnV0dG9uc090aGVyKClcIlxuICAgICAgW2JhY2tncm91bmRMaXN0Q3VzdG9tXT1cImxpc3RCYWNrZ3JvdW5kQ3VzdG9tKClcIlxuICAgICAgW2tleXNEaXNhYmxlSXRlbV09XCJsaXN0S2V5c0Rpc2FibGUoKVwiXG4gICAgICBba2V5c0hpZGRlbkl0ZW1dPVwibGlzdEtleXNIaWRkZW4oKVwiXG4gICAgICBbaGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwibGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uKCkgPz8gKCFwb3BvdmVyQ3VzdG9tQ29uZmlnKCkgJiYgIWxhYmVsQ29uZmlnKCk/LnJlcXVpcmVkICYmIChsaXN0Q29uZmlnKCk/LnR5cGUgPT09ICd0ZXh0JyB8fCBsaXN0Q29uZmlnKCk/LnR5cGUgPT09ICdyYWRpbycpKVwiXG4gICAgICBbdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGFdPVwibGlzdFNlYXJjaE5vRGF0YVRlbXBsYXRlUmVmKClcIlxuICAgICAgW2ZvY3VzSW5wdXRTZWFyY2hdPVwiZm9jdXNJbnB1dFNlYXJjaCgpXCJcbiAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgW3Jlc2V0S2V5V2hlblNlbGVjdEFsbEtleURyb3Bkb3duXT1cInJlc2V0S2V5V2hlblNlbGVjdEFsbEtleSgpXCJcbiAgICAgIFtpZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbV09XCJsaXN0SWdub3JlQ2xhc3NEaXNhYmxlRGVmYXVsdFdoZW5Vc2VLZXlzRGlzYWJsZUl0ZW0oKVwiXG4gICAgICBbaGFzRGl2aWRlcl09XCJsaXN0Q29uZmlnSGFzRGl2aWRlcigpXCJcbiAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkS2V5KCRldmVudClcIlxuICAgICAgKG91dFNlbGVjdE11bHRpS2V5KT1cImhhbmRsZXJTZWxlY3RNdWx0aUtleSgkZXZlbnQsIHRydWUpXCJcbiAgICAgIChvdXRDaGFuZ2VWaWV3KT1cImhhbmRsZXJEYXRhQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG91dENsaWNrQnV0dG9uT3RoZXIpPVwiaGFuZGxlckNsaWNrQnV0dG9uT3RoZXIoJGV2ZW50KVwiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyTGlzdEZ1bmN0aW9uc0NvbnRyb2woJGV2ZW50KVwiXG4gICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAob3V0TG9hZGluZyk9XCJoYW5kbGVyTG9hZGluZ0xpc3QoJGV2ZW50KVwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSwrQkFBK0IsRUFBOEMsTUFBTSw0QkFBNEIsQ0FBQztBQUd6SCxPQUFPLEVBQVUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQXVGLDZCQUE2QixFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBQ2hNLE9BQU8sRUFBdUUsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDeEssT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFzQix3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0ksT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3hFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFZOUUsTUFBTSxPQUFPLGlDQUFpQztJQUM1QyxtQkFBbUI7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFnQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxRQUFRLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLGFBQWEsR0FBRyxNQUFNLENBQU0sU0FBUyxDQUFDLENBQUM7SUFDdkMsYUFBYSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN2QyxXQUFXLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLEtBQUssR0FBRyxNQUFNLENBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLG1CQUFtQixHQUFHLE1BQU0sQ0FBdUIsU0FBUyxDQUFDLENBQUM7SUFDOUQseUJBQXlCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxzQ0FBc0MsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFbEUsWUFBWSxHQUFHLE1BQU0sQ0FBaUIsRUFBRSxDQUFDLENBQUM7SUFDMUMsc0JBQXNCLEdBQUcsTUFBTSxDQUEyQyxTQUFTLENBQUMsQ0FBQztJQUNyRixRQUFRLEdBQUcsTUFBTSxDQUFTLElBQUksQ0FBQyxDQUFDO0lBQ2hDLG1CQUFtQixHQUFHLE1BQU0sQ0FBd0MsU0FBUyxDQUFDLENBQUM7SUFFdkYsZ0JBQWdCO0lBQ1AsWUFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNyQyx1QkFBdUIsR0FBRyxLQUFLLEVBQWUsQ0FBQztJQUMvQyxZQUFZLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDL0IsMEJBQTBCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ25ELFNBQVMsR0FBRyxLQUFLLENBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbkYsZ0JBQWdCLEdBQUcsS0FBSyxFQUFjLENBQUM7SUFDdkMsbUJBQW1CLEdBQUcsS0FBSyxFQUF3QixDQUFDO0lBQ3BELFdBQVcsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUMvQixNQUFNLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDekIsbUJBQW1CLEdBQUcsS0FBSyxDQUF3RCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0gsc0JBQXNCLEdBQUcsS0FBSyxFQUFrRixDQUFDO0lBQ2pILHlCQUF5QixHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN4RCxVQUFVLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlCLHVCQUF1QixHQUFHLEtBQUssQ0FBUyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ25FLDBCQUEwQixHQUFHLEtBQUssQ0FBUyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3JFLG1DQUFtQyxHQUFHLEtBQUssQ0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3hFLFVBQVUsR0FBRyxLQUFLLENBQTZCLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbEgsYUFBYSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ2hDLGtCQUFrQixHQUFHLEtBQUssRUFBbUIsQ0FBQztJQUM5QyxxQkFBcUIsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDN0MsbUJBQW1CLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDdkMsMkJBQTJCLEdBQUcsS0FBSyxFQUF3QixDQUFDO0lBQzVELGFBQWEsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUNoQyxTQUFTLEdBQUcsS0FBSyxDQUEwQixFQUFFLENBQUMsQ0FBQztJQUMvQyxTQUFTLEdBQUcsS0FBSyxDQUFvQixRQUFRLENBQUMsQ0FBQztJQUMvQyxZQUFZLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDL0Isa0JBQWtCLEdBQUcsS0FBSyxDQUFTLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLG1CQUFtQixHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3RDLGtCQUFrQixHQUFHLEtBQUssQ0FBNkIsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNsSCxxQkFBcUIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUN6QyxjQUFjLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDakMsU0FBUyxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNqQyxlQUFlLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDbkMsT0FBTyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzNCLFFBQVEsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUM1QixXQUFXLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDOUIsWUFBWSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBRWhDLGdCQUFnQixHQUFHLEtBQUssQ0FBcUQsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEosY0FBYyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN2QyxxQkFBcUIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUN6QyxpQkFBaUIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUNyQyxhQUFhLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDaEMsdUJBQXVCLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDMUMsVUFBVSxHQUFHLEtBQUssRUFBbUIsQ0FBQztJQUN0QyxnQkFBZ0IsR0FBRyxLQUFLLEVBQWtCLENBQUM7SUFDM0MsMkJBQTJCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDL0MsZ0JBQWdCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDcEMsb0JBQW9CLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDdkMsZUFBZSxHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuQyxlQUFlLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDbkMsb0JBQW9CLEdBQUcsS0FBSyxFQUFrQixDQUFDO0lBQy9DLGVBQWUsR0FBRyxLQUFLLEVBQWlCLENBQUMsQ0FBQyw2RkFBNkY7SUFDdkksY0FBYyxHQUFHLEtBQUssRUFBaUIsQ0FBQyxDQUFDLDZGQUE2RjtJQUN0SSxhQUFhLEdBQUcsS0FBSyxFQUFxQixDQUFDO0lBQzNDLG9CQUFvQixHQUFHLEtBQUssRUFBeUIsQ0FBQztJQUN0RCw4QkFBOEIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUNsRCx1QkFBdUIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUMzQyxnQkFBZ0IsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDeEMscUJBQXFCLEdBQUcsS0FBSyxFQUFXLENBQUMsQ0FBQywwQ0FBMEM7SUFDcEYsd0JBQXdCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDNUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQzVDLGdCQUFnQixHQUFHLEtBQUssQ0FBNkIsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoSCxtQkFBbUIsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN0QyxtREFBbUQsR0FBRyxLQUFLLEVBQVcsQ0FBQyxDQUFDLDZFQUE2RTtJQUNySixZQUFZLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDL0IsVUFBVSxHQUFHLEtBQUssRUFBNEIsQ0FBQztJQUMvQyxrQkFBa0IsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUUvQyxpQkFBaUI7SUFDUixZQUFZLEdBQUcsTUFBTSxFQUE4QixDQUFDLENBQUMsMkJBQTJCO0lBQ2hGLGlCQUFpQixHQUFHLE1BQU0sRUFBNkIsQ0FBQyxDQUFDLHdDQUF3QztJQUNqRyxtQkFBbUIsR0FBRyxNQUFNLEVBQWlDLENBQUM7SUFDOUQsYUFBYSxHQUFHLE1BQU0sRUFBVyxDQUFDO0lBQ2xDLHNCQUFzQixHQUFHLE1BQU0sRUFBYyxDQUFDO0lBQzlDLGFBQWEsR0FBRyxNQUFNLEVBQWtCLENBQUM7SUFDekMsbUJBQW1CLEdBQUcsTUFBTSxFQUFXLENBQUM7SUFDeEMsV0FBVyxHQUFHLE1BQU0sRUFBVyxDQUFDO0lBQ2hDLHFCQUFxQixHQUFHLE1BQU0sRUFBc0IsQ0FBQztJQUU5RCxXQUFXO0lBQ0gsU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBRTlEO1FBQ0UsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztnQkFDN0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2xHLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLDhCQUE4QixFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ2xFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFFdkQsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQy9ELE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3hGLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXJDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLElBQUksVUFBVSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxpQkFBaUIsSUFBSSxVQUFVLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLDBCQUEwQixDQUFDLElBQUksVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JPLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLEdBQUcsZUFBZSxDQUFDO2dCQUMxRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixFQUFFLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO2dCQUM3TSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3JELElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hELENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWU7SUFDZixJQUFXLGdCQUFnQjtRQUN6QixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1QixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ25DLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsQyxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRTtZQUM3RSxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksS0FBSztZQUMvQyx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xKLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRTtZQUM5RCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVPLDBCQUEwQixDQUFDLElBQWE7UUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbkUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixLQUFLLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN0RixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBcUIsRUFBRSxJQUFtQjtRQUNsRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLDBCQUEwQixDQUFDLEVBQUUsQ0FBQztZQUNoTixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sMEJBQTBCLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQztRQUNsRyxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUNuRCxLQUFLLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2xILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFrQixFQUFFLENBQUM7UUFDL0IsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUM1QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBd0I7UUFDN0MsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFxQjtRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSw0QkFBNEIsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxLQUFpQjtRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRVMsdUJBQXVCLENBQUMsTUFBZTtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLG9CQUFvQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVTLDBCQUEwQixDQUFDLEtBQW1DO1FBQ3RFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVTLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFtQztRQUNwRSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUM7UUFDekIsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNsSCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQy9GLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLG9CQUFvQixFQUFFLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztZQUNuRSxJQUFJLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLFlBQVksR0FBRztvQkFDYixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUc7b0JBQ3RCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsb0JBQW9CO2lCQUMxQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEtBQUssQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1lBQzVCLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVTLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUF3QyxFQUFFLGFBQWEsR0FBRyxLQUFLO1FBQ25HLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzNGLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BHLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7UUFFbEUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztZQUNuRSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pILE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQVk7UUFDN0MsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuRSxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDdkQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLEdBQUcseUJBQXlCLENBQUM7WUFDcEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLDZCQUE2QixDQUFDLENBQUM7WUFDakssTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDaEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVTLGdCQUFnQjtRQUN4QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFjO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sS0FBSyxDQUFDLEtBQUs7UUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLFVBQVUsQ0FBQyxlQUF5QjtRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN6RCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQy9DLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLG9CQUFvQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzRSxLQUFLLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFDN0csQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLGtCQUFrQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzVFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sSUFBSSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEwsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEUsT0FBTyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRCxDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVU7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLDJCQUEyQixDQUFDLEtBQWdDO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVTLDBCQUEwQixDQUFDLElBQWdCO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sS0FBSyxDQUFDLEtBQUs7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVk7UUFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDN0QsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sSUFBSSxHQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDMUcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLG1CQUFtQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsb0JBQW9CLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDM0YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO3dHQXpjVSxpQ0FBaUM7NEZBQWpDLGlDQUFpQywyL1ZDM0I5QyxxclNBa0xBLDBSRHpKWSxlQUFlLHVGQUFFLDRCQUE0QixnRUFBRSxTQUFTLDhDQUFFLDhCQUE4Qiw0cUJBQUUsZ0NBQWdDLG9nQkFBRSwrQkFBK0IsNlhBQUUsNkJBQTZCLDYvQkFBRSxxQ0FBcUM7OzRGQUVoTyxpQ0FBaUM7a0JBVDdDLFNBQVM7K0JBRUUsNkJBQTZCLGNBRzNCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxTQUFTLEVBQUUsOEJBQThCLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsNkJBQTZCLEVBQUUscUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsIFRZUEVfU0hBUEVfQVZBVEFSLCBUWVBFX1NJWkVfQVZBVEFSX0NPTkZJRyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYXZhdGFyJztcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCc7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgZ2V0RmllbGRLZXlCeVR5cGUsIElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSwgSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCwgSUxpc3RDb25maWdJdGVtLCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCwgVFlQRV9URU1QTEFURSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBJUG9wb3ZlciwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVBvcG92ZXJPdmVybGF5LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBJSHR0cFJlcXVlc3RDb25maWcsIExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdCc7XG5pbXBvcnQgeyBDSEFSQUNURVJfREFUQV9FTVBUWSwgY2xvbmVEZWVwLCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgZ2V0LCBpc0VxdWFsLCBpc05pbCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJRHJvcGRvd25UYWJzSXRlbSwgSUVtaXRNdWx0aUtleSwgSUVtaXRTZWxlY3RLZXksIElQb3BvdmVyQ3VzdG9tQ29uZmlnLCBJVmFsaWRNYXhJdGVtU2VsZWN0ZWQgfSBmcm9tICcuL2ludGVyZmFjZXMvZHJvcGRvd24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEcm9wZG93blRhYnNDb21wb25lbnQgfSBmcm9tICcuL3RhYnMvdGFicy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU1lc3NhZ2VUcmFuc2xhdGUgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUsIEFzeW5jUGlwZSwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNEcm9wZG93blRhYnNDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBlcnJvciA9IHNpZ25hbDxJTWVzc2FnZVRyYW5zbGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHNob3dMaXN0ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGl0ZW1zU2VsZWN0ZWQgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0RldGFpbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nTGlzdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpdGVtcyA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcm90ZWN0ZWQgcG9wb3Zlckl0ZW1TZWxlY3RlZCA9IHNpZ25hbDxJUG9wb3ZlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxhYmVsSXRlbVNlbGVjdGVkQ29tcHV0ZWQgPSBjb21wdXRlZCh0aGlzLmdldExhYmVsSXRlbVNlbGVjdGVkLmJpbmQodGhpcykpO1xuICBwcm90ZWN0ZWQgYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUga2V5c1NlbGVjdGVkID0gc2lnbmFsPEFycmF5PHVua25vd24+PihbXSk7XG4gIHByaXZhdGUgcG9wb3ZlckZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGZpZWxkS2V5ID0gc2lnbmFsPHN0cmluZz4oJ2lkJyk7XG4gIHByaXZhdGUgbGlzdEZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgdXNlWHNzRmlsdGVyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBwb3BvdmVyRWxlbWVudFJlZkN1c3RvbSA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBtb2RlbDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSBmbGFnTW91c2VDb250ZW50ID0gbW9kZWw8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckN1c3RvbUNvbmZpZyA9IGlucHV0PElQb3BvdmVyQ3VzdG9tQ29uZmlnPigpO1xuICByZWFkb25seSBpc05nQ29udGVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgY29udmVydEl0ZW1TZWxlY3RlZCA9IGlucHV0PChpdGVtOiB1bmtub3duLCB0cmFuc2xhdGU/OiBUcmFuc2xhdGVTZXJ2aWNlKSA9PiB2b2lkPih0aGlzLmRlZmF1bHRDb252ZXJ0SXRlbVNlbGVjdGVkLmJpbmQodGhpcykpO1xuICByZWFkb25seSBnZXRQb3BvdmVySXRlbVNlbGVjdGVkID0gaW5wdXQ8KGl0ZW06IHVua25vd24sIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2UpID0+IFByb21pc2U8SVBvcG92ZXIgfCB1bmRlZmluZWQ+PigpO1xuICByZWFkb25seSBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkID0gaW5wdXQ8SUh0dHBSZXF1ZXN0Q29uZmlnPigpO1xuICByZWFkb25seSBsZW5ndGhLZXlzID0gbW9kZWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgdGV4dERpc3BsYXlXaGVuTm9TZWxlY3QgPSBpbnB1dDxzdHJpbmc+KCdpMThuX3NlbGVjdF9pbmZvcm1hdGlvbicpO1xuICByZWFkb25seSB0ZXh0RGlzcGxheVdoZW5NdWx0aVNlbGVjdCA9IGlucHV0PHN0cmluZz4oJ2kxOG5fc2VsZWN0aW5nX29wdGlvbnMnKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlVGV4dERpc3BsYXlXaGVuTm9TZWxlY3QgPSBpbnB1dDxzdHJpbmc+KCdsaWJzLXVpLWZvbnQtaDVyJyk7XG4gIHJlYWRvbmx5IGZpZWxkTGFiZWwgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2xhYmVsRGlzcGxheScsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdsYWJlbERpc3BsYXknIH0pO1xuICByZWFkb25seSBmaWVsZEdldExhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsYWJlbFBvcG92ZXJDb25maWcgPSBpbnB1dDxJUG9wb3Zlck92ZXJsYXk+KCk7XG4gIHJlYWRvbmx5IGxhYmVsUG9wb3ZlckZ1bGxXaWR0aCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBoYXNDb250ZW50VW5pdFJpZ2h0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdFNlYXJjaE5vRGF0YVRlbXBsYXRlUmVmID0gaW5wdXQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0SW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGltYWdlU2l6ZSA9IGlucHV0PFRZUEVfU0laRV9BVkFUQVJfQ09ORklHPigxNik7XG4gIHJlYWRvbmx5IHR5cGVTaGFwZSA9IGlucHV0PFRZUEVfU0hBUEVfQVZBVEFSPignY2lyY2xlJyk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0SWNvbiA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRUZXh0QXZhdGFyID0gaW5wdXQ8c3RyaW5nPigndXNlcm5hbWUnKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRDb2xvckF2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NBdmF0YXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdtci1bOHB4XScsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdtci1bOHB4XScgfSk7XG4gIHJlYWRvbmx5IGdldExhc3RUZXh0QWZ0ZXJTcGFjZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxpbmtJbWFnZUVycm9yID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBzaG93RXJyb3IgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2hvd0JvcmRlckVycm9yID0gbW9kZWw8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWw+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVMYWJlbCA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgbGlzdFNlYXJjaENvbmZpZyA9IGlucHV0PElJbnB1dFNlYXJjaENvbmZpZywgSUlucHV0U2VhcmNoQ29uZmlnIHwgdW5kZWZpbmVkPih7IG5vQm9yZGVyOiB0cnVlIH0sIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHsgbm9Cb3JkZXI6IHRydWUgfSB9KTtcbiAgcmVhZG9ubHkgaXNTZWFyY2hPbmxpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxpc3RIaWRkZW5JbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxpc3RTZWFyY2hQYWRkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEtleVNlYXJjaCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlzdERpdmlkZXJDbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RDb25maWcgPSBpbnB1dDxJTGlzdENvbmZpZ0l0ZW0+KCk7XG4gIHJlYWRvbmx5IGxpc3RCdXR0b25zT3RoZXIgPSBpbnB1dDxBcnJheTxJQnV0dG9uPj4oKTtcbiAgcmVhZG9ubHkgbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdENsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxpc3RCYWNrZ3JvdW5kQ3VzdG9tID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0TWF4SXRlbVNob3cgPSBpbnB1dDxudW1iZXI+KDUpO1xuICByZWFkb25seSBsaXN0S2V5U2VsZWN0ZWQgPSBtb2RlbDx1bmtub3duPigpO1xuICByZWFkb25seSBsaXN0TXVsdGlLZXlTZWxlY3RlZCA9IG1vZGVsPEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBsaXN0S2V5c0Rpc2FibGUgPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgbGlzdEtleXNIaWRkZW4gPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElNZXNzYWdlVHJhbnNsYXRlPigpO1xuICByZWFkb25seSB2YWxpZE1heEl0ZW1TZWxlY3RlZCA9IGlucHV0PElWYWxpZE1heEl0ZW1TZWxlY3RlZD4oKTtcbiAgcmVhZG9ubHkgY2hhbmdlVmFsaWRVbmRlZmluZWRSZXNldEVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWxsb3dTZWxlY3RJdGVtTXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmb2N1c0lucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IG9ubHlFbWl0RGF0YVdoZW5SZXNldCA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIHRydWUga2hpIG114buRbiBlbWl0IHPhu7Ega2nhu4duIHRoYXkgxJHhu5VpIGtleVxuICByZWFkb25seSByZXNldEtleVdoZW5TZWxlY3RBbGxLZXkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0Q29uZmlnSGFzRGl2aWRlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVJY29uID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdtbC1bOHB4XScsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdtbC1bOHB4XScgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUNvbnRlbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RJZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIGLhu48gY2jhur8gxJHhu5kgZGlzYWJsZSBpdGVtIHRyw6puIGh0bWwgbGlzdCB2aWV3IMSR4buDIGRpc2FibGUgdOG7q25nIHBo4bqnbiB0cm9uZyByb3dzXG4gIHJlYWRvbmx5IHRhYktleUFjdGl2ZSA9IG1vZGVsPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgdGFic0NvbmZpZyA9IGlucHV0PEFycmF5PElEcm9wZG93blRhYnNJdGVtPj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQm9yZGVyQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTZWxlY3RLZXkgPSBvdXRwdXQ8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNo4buNbiAxLlxuICByZWFkb25seSBvdXRTZWxlY3RNdWx0aUtleSA9IG91dHB1dDxJRW1pdE11bHRpS2V5IHwgdW5kZWZpbmVkPigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFZhbGlkRXZlbnQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXREYXRhQ2hhbmdlID0gb3V0cHV0PEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbk90aGVyID0gb3V0cHV0PElCdXR0b24+KCk7XG4gIHJlYWRvbmx5IG91dFNob3dMaXN0ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVRhYktleUFjdGl2ZSA9IG91dHB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgaHR0cFJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGxpc3RDb25maWcgPSB0aGlzLmxpc3RDb25maWcoKTtcbiAgICAgIGlmIChsaXN0Q29uZmlnKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmZpZWxkS2V5LnNldChnZXRGaWVsZEtleUJ5VHlwZShsaXN0Q29uZmlnLCAnaWQnKSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWlzTmlsKHRoaXMubGlzdEtleVNlbGVjdGVkKCkpICYmIHRoaXMubGlzdEtleVNlbGVjdGVkKCkgIT09ICcnICYmICF0aGlzLml0ZW1zU2VsZWN0ZWQoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdGVkS2V5KHsga2V5OiB0aGlzLmxpc3RLZXlTZWxlY3RlZCgpLCBpdGVtOiB1bmRlZmluZWQsIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hhbmdlVmFsaWRVbmRlZmluZWRSZXNldEVycm9yKCkgJiYgdGhpcy52YWxpZFJlcXVpcmVkKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMucmVzZXRFcnJvcigpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLmtleXNTZWxlY3RlZCgpIHx8IFtdO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXTtcblxuICAgICAgICAgIGlmIChpc0VxdWFsKGNsb25lRGVlcChwcmV2aW91c1ZhbHVlKSwgY2xvbmVEZWVwKGN1cnJlbnRWYWx1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5oYW5kbGVyU2VsZWN0TXVsdGlLZXkoeyBrZXlzOiBjdXJyZW50VmFsdWUsIG1hcEtleXM6IFtdLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBsaXN0Q29uZmlnID0gdGhpcy5saXN0Q29uZmlnKCk7XG5cbiAgICBpZiAodGhpcy5saXN0S2V5U2VsZWN0ZWQoKSB8fCB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMubGVuZ3RoS2V5cy5zZXQodGhpcy5saXN0S2V5U2VsZWN0ZWQoKSA/IDEgOiB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCB8fCAwKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubGVuZ3RoS2V5cygpICYmIGxpc3RDb25maWcgJiYgKGxpc3RDb25maWcuYXV0b1NlbGVjdEZpcnN0SXRlbSB8fCBsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5hdXRvU2VsZWN0QWxsSXRlbSB8fCBsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5mbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCkgJiYgbGlzdENvbmZpZy5odHRwUmVxdWVzdERhdGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0RGF0YSA9IGxpc3RDb25maWcuaHR0cFJlcXVlc3REYXRhKCk7XG4gICAgICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSBodHRwUmVxdWVzdERhdGE7XG4gICAgICAgIHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyAuLi50aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKSwgZHJvcGRvd25UYWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlIH0sIHt9LCAnJywgdHJ1ZSwgZmFsc2UsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuY2FsbEFwaShodHRwUmVxdWVzdERhdGEpO1xuICAgICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgICAgaWYgKHJlc3VsdD8uZGF0YSkge1xuICAgICAgICAgIHRoaXMuaXRlbXMuc2V0KHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICB0aGlzLmVtaXRBdXRvU2VsZWN0S2V5KHJlc3VsdC5kYXRhLCBsaXN0Q29uZmlnLnR5cGUpO1xuICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nRGV0YWlsLnNldChmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dERhdGFDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICAgIH1cbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICAgIHRoaXMuY2hlY2tWYWxpZCh0cnVlKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICByZXNldDogdGhpcy5yZXNldC5iaW5kKHRoaXMpLFxuICAgICAgY2hlY2tJc1ZhbGlkOiB0aGlzLnZhbGlkLmJpbmQodGhpcyksXG4gICAgICByZXNldEVycm9yOiB0aGlzLnJlc2V0RXJyb3IuYmluZCh0aGlzKSxcbiAgICAgIHNldEVycm9yOiB0aGlzLnNldEVycm9yLmJpbmQodGhpcyksXG4gICAgICByZW1vdmVMaXN0OiBhc3luYyAoKSA9PiB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKSxcbiAgICAgIGdldERpc2FibGU6IGFzeW5jICgpID0+IHRoaXMuZGlzYWJsZSgpID8/IGZhbHNlLFxuICAgICAgdXBkYXRlTGFiZWxJdGVtU2VsZWN0ZWQ6IGFzeW5jIChsYWJlbCkgPT4gdGhpcy5pdGVtc1NlbGVjdGVkLnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBbdGhpcy5maWVsZExhYmVsKCldOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGxhYmVsKSB9KSksXG4gICAgICByZWZyZXNoTGlzdDogYXN5bmMgKCkgPT4gdGhpcy5saXN0RnVuY3Rpb25Db250cm9sKCk/LnJlZnJlc2goKSxcbiAgICAgIHNldEl0ZW1TZWxlY3RlZEJ5S2V5OiB0aGlzLnNldEl0ZW1TZWxlY3RlZEJ5S2V5LmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdENvbnZlcnRJdGVtU2VsZWN0ZWQoaXRlbTogdW5rbm93bikge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZEdldExhYmVsID0gdGhpcy5maWVsZEdldExhYmVsKCk7XG4gICAgY29uc3QgdmFsdWUgPSBmaWVsZEdldExhYmVsID8gZ2V0KGl0ZW0sIGZpZWxkR2V0TGFiZWwpIDogdW5kZWZpbmVkO1xuICAgIHNldChpdGVtLCB0aGlzLmZpZWxkTGFiZWwoKSwgdmFsdWUgPz8gZ2V0KGl0ZW0sICdsYWJlbCcpID8/IGdldChpdGVtLCAnbmFtZScpID8/ICcgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldExhYmVsSXRlbVNlbGVjdGVkKCkge1xuICAgIGxldCBsYWJlbCA9ICcgJztcbiAgICBpZiAoIXRoaXMubGVuZ3RoS2V5cygpKSB7XG4gICAgICBsYWJlbCA9IHRoaXMudGV4dERpc3BsYXlXaGVuTm9TZWxlY3QoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuZ3RoS2V5cygpID4gMSkge1xuICAgICAgbGFiZWwgPSB0aGlzLnRleHREaXNwbGF5V2hlbk11bHRpU2VsZWN0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSA9PT0gMSkge1xuICAgICAgbGFiZWwgPSB0aGlzLml0ZW1zU2VsZWN0ZWQoKT8uW3RoaXMuZmllbGRMYWJlbCgpXSB8fCB0aGlzLnRleHREaXNwbGF5V2hlbk5vU2VsZWN0KCk7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEF1dG9TZWxlY3RLZXkoaXRlbXM6IEFycmF5PHVua25vd24+LCB0eXBlOiBUWVBFX1RFTVBMQVRFKSB7XG4gICAgY29uc3QgbGlzdENvbmZpZyA9IHRoaXMubGlzdENvbmZpZygpO1xuICAgIGlmICghaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCB8fCAhbGlzdENvbmZpZyB8fCAoIWxpc3RDb25maWcuYXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAhbGlzdENvbmZpZy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uYXV0b1NlbGVjdEFsbEl0ZW0gJiYgIWxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVHcm91cD8uKCk/LmZsYXRJdGVtc1N1cHBvcnRBdXRvU2VsZWN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCA9IGxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVHcm91cD8uKCk/LmZsYXRJdGVtc1N1cHBvcnRBdXRvU2VsZWN0O1xuICAgIGlmICh0eXBlID09PSAnZ3JvdXAnICYmIGZsYXRJdGVtc1N1cHBvcnRBdXRvU2VsZWN0KSB7XG4gICAgICBpdGVtcyA9IGZsYXRJdGVtc1N1cHBvcnRBdXRvU2VsZWN0KGl0ZW1zKTtcbiAgICB9XG4gICAgaWYgKGxpc3RDb25maWcuYXV0b1NlbGVjdEZpcnN0SXRlbSkge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zWzBdO1xuICAgICAgY29uc3Qga2V5ID0gZ2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSk7XG4gICAgICBpZiAodHlwZSA9PT0gJ3JhZGlvJyB8fCB0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyU2VsZWN0ZWRLZXkoeyBrZXksIGl0ZW0sIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLmxpc3RLZXlTZWxlY3RlZC5zZXQoa2V5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5oYW5kbGVyU2VsZWN0TXVsdGlLZXkoeyBrZXlzOiBba2V5XSwgbWFwS2V5czogW3sga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9XSwgaXNDbGlja01hbnVhbDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkLnNldChba2V5XSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSAnY2hlY2tib3gnICYmIHR5cGUgIT09ICdncm91cCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGNvbnN0IG1hcEtleXM6IEFycmF5PElMaXN0RGF0YUVtaXRLZXk+ID0gW107XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gZ2V0KGl0ZW0sIHRoaXMuZmllbGRLZXkoKSk7XG4gICAgICBpZiAoaXNOaWwoa2V5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIG1hcEtleXMucHVzaCh7IGtleSwgaXRlbSwgaXNDbGlja01hbnVhbDogZmFsc2UgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW5kbGVyU2VsZWN0TXVsdGlLZXkoeyBrZXlzLCBtYXBLZXlzLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkLnNldChrZXlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnQodHlwZTogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgaWYgKHR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdyZW1vdmUnKSB7XG4gICAgICB0aGlzLnNob3dMaXN0LnNldChmYWxzZSk7XG4gICAgICB0aGlzLm91dFNob3dMaXN0LmVtaXQodGhpcy5zaG93TGlzdCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93TGlzdC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vdXRTaG93TGlzdC5lbWl0KHRoaXMuc2hvd0xpc3QoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckRhdGFDaGFuZ2UoaXRlbXM6IEFycmF5PHVua25vd24+KSB7XG4gICAgdGhpcy5pdGVtcy5zZXQoaXRlbXMpO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy51cGRhdGVQb3BvdmVyT3ZlcmxheVBvc2l0aW9uKCk7XG4gICAgdGhpcy5vdXREYXRhQ2hhbmdlLmVtaXQodGhpcy5pdGVtcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKGV2ZW50OiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5mbGFnTW91c2VDb250ZW50LnNldChldmVudCk7XG4gICAgdGhpcy5tZXJnZUZsYWdNb3VzZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0J1dHRvbk90aGVyKGJ1dHRvbjogSUJ1dHRvbikge1xuICAgIHRoaXMub3V0Q2xpY2tCdXR0b25PdGhlci5lbWl0KGJ1dHRvbik7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJDb250cm9sRXZlbnQoZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2wuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ6IElMaXN0RGF0YUVtaXRLZXkgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudD8ua2V5O1xuICAgIGNvbnN0IGl0ZW0gPSBldmVudD8uaXRlbTtcbiAgICBjb25zdCBpc0NsaWNrTWFudWFsID0gZXZlbnQ/LmlzQ2xpY2tNYW51YWw7XG4gICAgdGhpcy5sZW5ndGhLZXlzLnNldCghKGlzTmlsKGtleSkgfHwgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSA9PT0gJycpKSA/IDEgOiAwKTtcbiAgICB0aGlzLmxpc3RLZXlTZWxlY3RlZC5zZXQoa2V5KTtcbiAgICBpZiAoIXRoaXMuYWxsb3dTZWxlY3RJdGVtTXVsdGlwbGUoKSAmJiB0aGlzLml0ZW1zU2VsZWN0ZWQoKSAmJiBnZXQodGhpcy5pdGVtc1NlbGVjdGVkKCksIHRoaXMuZmllbGRLZXkoKSkgPT09IGtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNDbGlja01hbnVhbCkge1xuICAgICAgaWYgKCEoaXNOaWwoa2V5KSB8fCAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5ID09PSAnJykpICYmIChpdGVtIHx8IHRoaXMuaXRlbXNTZWxlY3RlZCgpKSkge1xuICAgICAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGVja1ZhbGlkKCk7XG4gICAgaWYgKHRoaXMubGVuZ3RoS2V5cygpICYmICFpdGVtICYmIHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCgpKSB7XG4gICAgICBsZXQgaXRlbVNlbGVjdGVkID0gYXdhaXQgdGhpcy5zZXRJdGVtU2VsZWN0ZWRCeUtleShrZXkpO1xuICAgICAgaWYgKCFpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgaXRlbVNlbGVjdGVkID0ge1xuICAgICAgICAgIFt0aGlzLmZpZWxkS2V5KCldOiBrZXksXG4gICAgICAgICAgW3RoaXMuZmllbGRMYWJlbCgpXTogQ0hBUkFDVEVSX0RBVEFfRU1QVFksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQoaXRlbVNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5pdGVtID0gaXRlbVNlbGVjdGVkO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh7IC4uLmV2ZW50LCB0YWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQoY2xvbmVEZWVwKGl0ZW0pKTtcbiAgICB0aGlzLmJ1aWxkRGlzcGxheSgpO1xuICAgIHRoaXMub3V0U2VsZWN0S2V5LmVtaXQoeyAuLi5ldmVudCwgdGFiS2V5QWN0aXZlOiB0aGlzLnRhYktleUFjdGl2ZSgpIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RNdWx0aUtleShldmVudDogSUxpc3REYXRhRW1pdE11bHRpS2V5IHwgdW5kZWZpbmVkLCBpc0NsaWNrTWFudWFsID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5saXN0Q29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5zaW5nbGVTZWxlY3RJdGVtICYmIGV2ZW50Py5tYXBLZXlzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGl0ZW1DbGlja01hbnVhbCA9IGV2ZW50Lm1hcEtleXMuZmluZCgobWFwS2V5KSA9PiBtYXBLZXkuaXRlbSAmJiBtYXBLZXkuaXRlbS5pc0NoZWNrTWFudWFsKTtcbiAgICAgIGlmIChpdGVtQ2xpY2tNYW51YWwpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAoaXRlbUNsaWNrTWFudWFsLml0ZW0uaXNDaGVja01hbnVhbCA9IGZhbHNlKSk7XG4gICAgICAgIGV2ZW50LmtleXMgPSBbaXRlbUNsaWNrTWFudWFsLmtleV07XG4gICAgICAgIGV2ZW50Lm1hcEtleXMgPSBbaXRlbUNsaWNrTWFudWFsXTtcbiAgICAgICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChbLi4uKGV2ZW50Py5rZXlzIHx8IFtdKV0pO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KFsuLi4oZXZlbnQ/LmtleXMgfHwgW10pXSk7XG4gICAgdGhpcy5sZW5ndGhLZXlzLnNldChldmVudD8ua2V5cz8ubGVuZ3RoIHx8IDApO1xuICAgIHRoaXMuY2hlY2tWYWxpZCgpO1xuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSA+IDEpIHtcbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IC4uLihldmVudCB8fCB7fSksIGlzQ2xpY2tNYW51YWwsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gZXZlbnQ/LmtleXNbMF07XG4gICAgbGV0IGl0ZW0gPSBldmVudD8ubWFwS2V5cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IGtleSk/Lml0ZW07XG5cbiAgICBpZiAodGhpcy5sZW5ndGhLZXlzKCkgJiYgIWl0ZW0gJiYgdGhpcy5odHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKCkpIHtcbiAgICAgIGl0ZW0gPSBhd2FpdCB0aGlzLnNldEl0ZW1TZWxlY3RlZEJ5S2V5KGtleSk7XG4gICAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiBba2V5XSwgbWFwS2V5czogW3sga2V5LCBpdGVtIH1dLCBpc0NsaWNrTWFudWFsLCB0YWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQoY2xvbmVEZWVwKGl0ZW0pKTtcbiAgICB0aGlzLmJ1aWxkRGlzcGxheSgpO1xuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IC4uLihldmVudCB8fCB7fSksIGlzQ2xpY2tNYW51YWwsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0SXRlbVNlbGVjdGVkQnlLZXkoa2V5OiB1bmtub3duKSB7XG4gICAgY29uc3QgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCA9IHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCgpO1xuICAgIGlmICghaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCB8fCB0aGlzLmxvYWRpbmdEZXRhaWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2FkaW5nRGV0YWlsLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkO1xuICAgICAgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB7IGtleSwgZHJvcGRvd25UYWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSwge30sICcnLCBmYWxzZSwgZmFsc2UsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmNhbGxBcGkoaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCk7XG4gICAgICBjb25zdCBpdGVtID0gY2xvbmVEZWVwKHJlc3VsdD8uZGF0YT8uWzBdIHx8IHJlc3VsdD8uZGF0YSk7XG4gICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQuc2V0KGl0ZW0pO1xuICAgICAgdGhpcy5idWlsZERpc3BsYXkoKTtcbiAgICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVGFiKCkge1xuICAgIHRoaXMub3V0Q2hhbmdlVGFiS2V5QWN0aXZlLmVtaXQodGhpcy50YWJLZXlBY3RpdmUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckxvYWRpbmdMaXN0KGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5sb2FkaW5nTGlzdC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRFcnJvcihlcnJvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5lcnJvci5zZXQoeyBtZXNzYWdlOiBlcnJvciB9KTtcbiAgICB0aGlzLnNob3dCb3JkZXJFcnJvci5zZXQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkKCkge1xuICAgIGlmICh0aGlzLmVycm9yKCk/Lm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1ZhbGlkKHZhbGlkYXRlRGVmYXVsdD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIGNvbnN0IHZhbGlkID0geyByZXF1aXJlZDogdHJ1ZSwgbGltaXRNYXhJdGVtU2VsZWN0OiB0cnVlIH07XG4gICAgY29uc3QgdmFsaWRNYXhJdGVtU2VsZWN0ZWQgPSB0aGlzLnZhbGlkTWF4SXRlbVNlbGVjdGVkKCk7XG4gICAgaWYgKHRoaXMudmFsaWRSZXF1aXJlZCgpICYmICF0aGlzLmxlbmd0aEtleXMoKSkge1xuICAgICAgdmFsaWQucmVxdWlyZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbGlkTWF4SXRlbVNlbGVjdGVkICYmIHRoaXMubGVuZ3RoS2V5cygpID4gdmFsaWRNYXhJdGVtU2VsZWN0ZWQudmFsdWUpIHtcbiAgICAgIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXZhbGlkYXRlRGVmYXVsdCAmJiB2YWxpZC5yZXF1aXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHZhbGlkUmVxdWlyZWQgPSB0aGlzLnZhbGlkUmVxdWlyZWQoKTtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KHsgLi4uKHZhbGlkUmVxdWlyZWQgfHwge30pLCBtZXNzYWdlOiB2YWxpZFJlcXVpcmVkPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQgfSk7XG4gICAgfVxuICAgIGlmICghdmFsaWRhdGVEZWZhdWx0ICYmICF0aGlzLmVycm9yKCkgJiYgdmFsaWQubGltaXRNYXhJdGVtU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgdmFsaWRNYXhJdGVtU2VsZWN0ZWQgPSB0aGlzLnZhbGlkTWF4SXRlbVNlbGVjdGVkKCk7XG4gICAgICB0aGlzLmVycm9yLnNldCh7IC4uLih2YWxpZE1heEl0ZW1TZWxlY3RlZCB8fCB7fSksIG1lc3NhZ2U6IHZhbGlkTWF4SXRlbVNlbGVjdGVkPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX1ZBTElELCBpbnRlcnBvbGF0ZVBhcmFtczogeyB2YWx1ZTogdmFsaWRNYXhJdGVtU2VsZWN0ZWQ/LnZhbHVlIH0gfSk7XG4gICAgfVxuICAgIHRoaXMub3V0VmFsaWRFdmVudC5lbWl0KHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCk7XG4gICAgcmV0dXJuIHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRFcnJvcigpIHtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2hvd0JvcmRlckVycm9yLnNldChmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckxpc3RGdW5jdGlvbnNDb250cm9sKGV2ZW50OiBJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5saXN0RnVuY3Rpb25Db250cm9sLnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZzogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMuZmxhZ01vdXNlLnNldChmbGFnKTtcbiAgICB0aGlzLm1lcmdlRmxhZ01vdXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmxlbmd0aEtleXMuc2V0KDApO1xuICAgIHRoaXMubGlzdEZ1bmN0aW9uQ29udHJvbCgpPy5yZXNldEtleVNlbGVjdGVkKCk7XG4gICAgaWYgKCF0aGlzLnNob3dMaXN0KCkgJiYgdGhpcy5vbmx5RW1pdERhdGFXaGVuUmVzZXQoKSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHRoaXMubGlzdEtleVNlbGVjdGVkLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZERpc3BsYXkoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXNTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLmNvbnZlcnRJdGVtU2VsZWN0ZWQoKSh0aGlzLml0ZW1zU2VsZWN0ZWQoKSwgdGhpcy50cmFuc2xhdGUpO1xuICAgICAgY29uc3QgZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCA9IHRoaXMuZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCgpO1xuICAgICAgaWYgKGdldFBvcG92ZXJJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVySXRlbVNlbGVjdGVkLnNldChhd2FpdCBnZXRQb3BvdmVySXRlbVNlbGVjdGVkKHRoaXMuaXRlbXNTZWxlY3RlZCwgdGhpcy50cmFuc2xhdGUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRmxhZ01vdXNlKCkge1xuICAgIGNvbnN0IGZsYWc6IElGbGFnTW91c2UgPSB7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlLCBpc0NvbnRhaW5lckhhc1Njcm9sbDogZmFsc2UgfTtcbiAgICBpZiAodGhpcy5mbGFnTW91c2VDb250ZW50KCk/LmlzTW91c2VFbnRlciB8fCB0aGlzLmZsYWdNb3VzZSgpLmlzTW91c2VFbnRlcikge1xuICAgICAgZmxhZy5pc01vdXNlRW50ZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5mbGFnTW91c2VDb250ZW50KCk/LmlzTW91c2VFbnRlckNvbnRlbnQgfHwgdGhpcy5mbGFnTW91c2UoKS5pc01vdXNlRW50ZXJDb250ZW50KSB7XG4gICAgICBmbGFnLmlzTW91c2VFbnRlckNvbnRlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5mbGFnTW91c2VDb250ZW50KCk/LmlzQ29udGFpbmVySGFzU2Nyb2xsIHx8IHRoaXMuZmxhZ01vdXNlKCkuaXNDb250YWluZXJIYXNTY3JvbGwpIHtcbiAgICAgIGZsYWcuaXNDb250YWluZXJIYXNTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gIEBpZiAobGFiZWxDb25maWcoKTsgYXMgbGFiZWwpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICBbY2xhc3NJbmNsdWRlXT1cImxhYmVsLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWwubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsLnJlcXVpcmVkXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCJsYWJlbC5kZXNjcmlwdGlvblwiXG4gICAgICBbZGVzY3JpcHRpb25DbGFzc109XCJsYWJlbC5kZXNjcmlwdGlvbkNsYXNzXCJcbiAgICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsLmxhYmVsUmlnaHRcIlxuICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJsYWJlbC5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWwub25seVNob3dDb3VudFwiXG4gICAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWwuYnV0dG9uc0xlZnRcIlxuICAgICAgW2J1dHRvbnNSaWdodF09XCJsYWJlbC5idXR0b25zUmlnaHRcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbC5kaXNhYmxlQnV0dG9uc0xlZnQgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJsYWJlbC5kaXNhYmxlQnV0dG9uc1JpZ2h0IHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbC5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbC50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWwudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtwb3BvdmVyXT1cImxhYmVsLnBvcG92ZXJcIlxuICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwibGFiZWwuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbC5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbC5saW1pdExlbmd0aFwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbC5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uIHx8IGRpc2FibGUoKVwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwibGFiZWwuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgW2NvdW50XT1cImxhYmVsLmNvdW50XCIgLz5cbiAgfVxuICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICBbY2xhc3NdPVwiY2xhc3NJbmNsdWRlKCkgfHwgJ3ctZnVsbCdcIlxuICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICBbZmxhZ01vdXNlXT1cImZsYWdNb3VzZSgpXCJcbiAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICBbaWdub3JlQ3Vyc29yUG9pbnRlck1vZGVMaWtlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KClcIlxuICAgIFtlbGVtZW50UmVmQ3VzdG9tXT1cInBvcG92ZXJFbGVtZW50UmVmQ3VzdG9tKClcIlxuICAgIFtjb25maWddPVwie1xuICAgICAgYW5pbWF0aW9uQ29uZmlnOiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/LmFuaW1hdGlvbkNvbmZpZyB8fCB7fSxcbiAgICAgIHpJbmRleDogekluZGV4KCkgPz8gMTAwMCxcbiAgICAgIHdpZHRoQnlQYXJlbnQ6IHBvcG92ZXJDdXN0b21Db25maWcoKT8ud2lkdGhCeVBhcmVudCA/PyB0cnVlLFxuICAgICAgcGFyZW50Qm9yZGVyV2lkdGg6IHBvcG92ZXJDdXN0b21Db25maWcoKT8ucGFyZW50Qm9yZGVyV2lkdGggPz8gMCxcbiAgICAgIG1heEhlaWdodDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5tYXhIZWlnaHQgPz8gMjA0OCxcbiAgICAgIG1heFdpZHRoOiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/Lm1heFdpZHRoID8/IDIwNDgsXG4gICAgICBkaXJlY3Rpb246IHBvcG92ZXJDdXN0b21Db25maWcoKT8uZGlyZWN0aW9uID8/ICdib3R0b20nLFxuICAgICAgdGVtcGxhdGU6IGxpc3RWaWV3RWwsXG4gICAgICB3aGl0ZVRoZW1lOiB0cnVlLFxuICAgICAgdGltZXJEZXN0cm95OiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/LnRpbWVyRGVzdHJveSA/PyAwLFxuICAgICAgaWdub3JlQXJyb3c6IHBvcG92ZXJDdXN0b21Db25maWcoKT8uaWdub3JlQXJyb3cgPz8gdHJ1ZSxcbiAgICAgIGRpcmVjdGlvbkRpc3RhbmNlOiAyLFxuICAgICAgY2xhc3NJbmNsdWRlOiAnIXJvdW5kZWQtWzRweF0gb3ZlcmZsb3ctaGlkZGVuICcgKyAocG9wb3ZlckN1c3RvbUNvbmZpZygpPy5jbGFzc0luY2x1ZGUgPz8gJ2xpYnMtdWktYm9yZGVyLWdlbmVyYWwgJyksXG4gICAgICBwb3NpdGlvbjogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwIH0sXG4gICAgICB3aWR0aDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy53aWR0aCxcbiAgICB9XCJcbiAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudCgkZXZlbnQpXCJcbiAgICAob3V0RXZlbnQpPVwiaGFuZGxlckV2ZW50KCRldmVudClcIlxuICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiPlxuICAgIEBpZiAoIWlzTmdDb250ZW50KCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWRyb3Bkb3duICcgKyAoY2xhc3NJbmNsdWRlQ29udGVudCgpIHx8ICcnKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1nZW5lcmFsXT1cIiFlcnJvcigpICYmICFzaG93Qm9yZGVyRXJyb3IoKSAmJiAhc2hvd0xpc3QoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1wcmltYXJ5LWZvY3VzLWdlbmVyYWxdPVwiIWVycm9yKCkgJiYgIXNob3dCb3JkZXJFcnJvcigpICYmIHNob3dMaXN0KClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJlcnJvcigpIHx8IHNob3dCb3JkZXJFcnJvcigpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCIhKGRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgcmVhZG9ubHkoKSlcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgIFtjbGFzcy5yb3VuZGVkLXRyLTBdPVwiaGFzQ29udGVudFVuaXRSaWdodCgpXCJcbiAgICAgICAgW2NsYXNzLnJvdW5kZWQtYnItMF09XCJoYXNDb250ZW50VW5pdFJpZ2h0KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgYWJzb2x1dGVcIlxuICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kcm9wZG93bi1wbGFjZWhvbGRlcl09XCIhbGVuZ3RoS2V5cygpXCI+XG4gICAgICAgICAgICAgIEBpZiAobGVuZ3RoS2V5cygpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtc1NlbGVjdGVkKCk7IGFzIGl0ZW1zU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRHZXRJbWFnZSgpOyBhcyBmaWVsZEdldEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0F2YXRhckluY2x1ZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVTaGFwZV09XCJ0eXBlU2hhcGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiaW1hZ2VTaXplKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsaW5rQXZhdGFyXT1cIml0ZW1zU2VsZWN0ZWRbZmllbGRHZXRJbWFnZV1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsaW5rQXZhdGFyRXJyb3JdPVwibGlua0ltYWdlRXJyb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkR2VuQ29sb3JdPVwiaXRlbXNTZWxlY3RlZFtmaWVsZEdldENvbG9yQXZhdGFyKCkgfHwgZmllbGRHZXRUZXh0QXZhdGFyKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZ2V0TGFzdFRleHRBZnRlclNwYWNlXT1cImdldExhc3RUZXh0QWZ0ZXJTcGFjZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJpdGVtc1NlbGVjdGVkW2ZpZWxkR2V0VGV4dEF2YXRhcigpXVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkR2V0SWNvbigpOyBhcyBmaWVsZEdldEljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIml0ZW1zU2VsZWN0ZWRbZmllbGRHZXRJY29uXSArICcgbXItWzhweF0nXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGxhYmVsUG9wb3ZlckZ1bGxXaWR0aCgpID8gJ3ctMTAwICcgOiAnJykgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsSXRlbVNlbGVjdGVkQ29tcHV0ZWQoKSB8IHRyYW5zbGF0ZTogeyB2YWx1ZTogbGVuZ3RoS2V5cygpIH0gfCBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlOiAnaHRtbCcgOiB1c2VYc3NGaWx0ZXIoKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cInsgbWF4V2lkdGg6IGxhYmVsUG9wb3ZlckNvbmZpZygpPy5tYXhXaWR0aCB8fCAyNTAsIGRpcmVjdGlvbjogJ3RvcCcsIHpJbmRleDogbGFiZWxQb3BvdmVyQ29uZmlnKCk/LnpJbmRleCwgdGltZXJEZXN0cm95OiBsYWJlbFBvcG92ZXJDb25maWcoKT8udGltZXJEZXN0cm95IHx8IDAgfVwiXG4gICAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIiAvPlxuXG4gICAgICAgICAgICAgIEBpZiAocG9wb3Zlckl0ZW1TZWxlY3RlZCgpOyBhcyBwb3BvdmVySXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCJwb3BvdmVySXRlbVNlbGVjdGVkLnR5cGUgfHwgJ290aGVyJ1wiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInBvcG92ZXJJdGVtU2VsZWN0ZWQuY29uZmlnIHx8IHt9XCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHBvcG92ZXJJdGVtU2VsZWN0ZWQuZGF0YVZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cInBvcG92ZXJJdGVtU2VsZWN0ZWQuZGF0YVZpZXcgfCB0cmFuc2xhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi10b29sdGlwLW91dGxpbmUgdGV4dC1bMTZweF0gbXgtWzhweF1cIj48L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1bMTZweF0gbGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwIHRleHQtWyM2YTczODNdIHt7IGNsYXNzSW5jbHVkZUljb24oKSB9fVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cInJlYWRvbmx5KCkgfHwgZGlzYWJsZSgpXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIH1cbiAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgQGlmIChzaG93RXJyb3IoKSkge1xuICAgIEBpZiAoZXJyb3IoKTsgYXMgZXJyb3IpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtdC1bOHB4XSBsaWJzLXVpLXRleHQtZXJyb3IgbGlicy11aS1mb250LWg3clwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiZXJyb3IubWVzc2FnZSB8fCAnICcgfCB0cmFuc2xhdGU6IGVycm9yLmludGVycG9sYXRlUGFyYW1zIHx8IHt9XCI+PC9kaXY+XG4gICAgfVxuICB9XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbGlzdFZpZXdFbD5cbiAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW5cIj5cbiAgICBAaWYgKHRhYnNDb25maWcoKTsgYXMgdGFic0NvbmZpZykge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bi10YWJzXG4gICAgICAgIFt0YWJzQ29uZmlnXT1cInRhYnNDb25maWdcIlxuICAgICAgICBbKHRhYktleUFjdGl2ZSldPVwidGFiS2V5QWN0aXZlXCJcbiAgICAgICAgW2lnbm9yZUJvcmRlckJvdHRvbV09XCJpZ25vcmVCb3JkZXJCb3R0b20oKVwiXG4gICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgbG9hZGluZ0xpc3QoKVwiXG4gICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRhYigpXCIgLz5cbiAgICB9XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0XG4gICAgICBbc2VhcmNoQ29uZmlnXT1cImxpc3RTZWFyY2hDb25maWcoKVwiXG4gICAgICBbaXNTZWFyY2hPbmxpbmVdPVwiaXNTZWFyY2hPbmxpbmUoKVwiXG4gICAgICBbZHJvcGRvd25UYWJLZXlBY3RpdmVdPVwidGFiS2V5QWN0aXZlKClcIlxuICAgICAgW2tleVNlYXJjaF09XCJsaXN0S2V5U2VhcmNoKClcIlxuICAgICAgW2NvbmZpZ109XCJsaXN0Q29uZmlnKClcIlxuICAgICAgW2F1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlXT1cImF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlKClcIlxuICAgICAgW3BhZGRpbmdMZWZ0SXRlbV09XCJwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/LnBhZGRpbmdMZWZ0SXRlbSA/PyBmYWxzZVwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgW2hpZGRlbklucHV0U2VhcmNoXT1cImxpc3RIaWRkZW5JbnB1dFNlYXJjaCgpXCJcbiAgICAgIFtzZWFyY2hQYWRkaW5nXT1cImxpc3RTZWFyY2hQYWRkaW5nKClcIlxuICAgICAgW21heEl0ZW1TaG93XT1cImxpc3RNYXhJdGVtU2hvdygpXCJcbiAgICAgIFtrZXlTZWxlY3RlZF09XCJsaXN0S2V5U2VsZWN0ZWQoKVwiXG4gICAgICBbbXVsdGlLZXlTZWxlY3RlZF09XCJsaXN0TXVsdGlLZXlTZWxlY3RlZCgpXCJcbiAgICAgIFtjbGlja0V4YWN0bHldPVwicG9wb3ZlckN1c3RvbUNvbmZpZygpPy5jbGlja0V4YWN0bHkgPz8gZmFsc2VcIlxuICAgICAgW2RpdmlkZXJDbGFzc0luY2x1ZGVdPVwibGlzdFNlYXJjaENvbmZpZygpID8gbGlzdERpdmlkZXJDbGFzc0luY2x1ZGUoKSA6ICdoaWRkZW4nXCJcbiAgICAgIFtidXR0b25zT3RoZXJdPVwibGlzdEJ1dHRvbnNPdGhlcigpXCJcbiAgICAgIFtiYWNrZ3JvdW5kTGlzdEN1c3RvbV09XCJsaXN0QmFja2dyb3VuZEN1c3RvbSgpXCJcbiAgICAgIFtrZXlzRGlzYWJsZUl0ZW1dPVwibGlzdEtleXNEaXNhYmxlKClcIlxuICAgICAgW2tleXNIaWRkZW5JdGVtXT1cImxpc3RLZXlzSGlkZGVuKClcIlxuICAgICAgW2hhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImxpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbigpID8/ICghcG9wb3ZlckN1c3RvbUNvbmZpZygpICYmICFsYWJlbENvbmZpZygpPy5yZXF1aXJlZCAmJiAobGlzdENvbmZpZygpPy50eXBlID09PSAndGV4dCcgfHwgbGlzdENvbmZpZygpPy50eXBlID09PSAncmFkaW8nKSlcIlxuICAgICAgW3RlbXBsYXRlUmVmU2VhcmNoTm9EYXRhXT1cImxpc3RTZWFyY2hOb0RhdGFUZW1wbGF0ZVJlZigpXCJcbiAgICAgIFtmb2N1c0lucHV0U2VhcmNoXT1cImZvY3VzSW5wdXRTZWFyY2goKVwiXG4gICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgIFtyZXNldEtleVdoZW5TZWxlY3RBbGxLZXlEcm9wZG93bl09XCJyZXNldEtleVdoZW5TZWxlY3RBbGxLZXkoKVwiXG4gICAgICBbaWdub3JlQ2xhc3NEaXNhYmxlRGVmYXVsdFdoZW5Vc2VLZXlzRGlzYWJsZUl0ZW1dPVwibGlzdElnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtKClcIlxuICAgICAgW2hhc0RpdmlkZXJdPVwibGlzdENvbmZpZ0hhc0RpdmlkZXIoKVwiXG4gICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZEtleSgkZXZlbnQpXCJcbiAgICAgIChvdXRTZWxlY3RNdWx0aUtleSk9XCJoYW5kbGVyU2VsZWN0TXVsdGlLZXkoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAob3V0Q2hhbmdlVmlldyk9XCJoYW5kbGVyRGF0YUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChvdXRDbGlja0J1dHRvbk90aGVyKT1cImhhbmRsZXJDbGlja0J1dHRvbk90aGVyKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckxpc3RGdW5jdGlvbnNDb250cm9sKCRldmVudClcIlxuICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgKG91dExvYWRpbmcpPVwiaGFuZGxlckxvYWRpbmdMaXN0KCRldmVudClcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|