@libs-ui/components-image-editor 0.2.339-0 → 0.2.340-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -782,7 +782,7 @@ export class LibsUiComponentsImageEditorComponent {
|
|
|
782
782
|
this.dynamicComponentService.remove(this.resizeComponentRef);
|
|
783
783
|
}
|
|
784
784
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsImageEditorComponent, deps: [{ token: LINK_IMAGE_ERROR_TOKEN_INJECT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
785
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsImageEditorComponent, isStandalone: true, selector: "libs_ui-components-image_editor", inputs: { modeShowButton: { classPropertyName: "modeShowButton", publicName: "modeShowButton", isSignal: true, isRequired: false, transformFunction: null }, mimetype: { classPropertyName: "mimetype", publicName: "mimetype", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: true, transformFunction: null }, originUrl: { classPropertyName: "originUrl", publicName: "originUrl", isSignal: true, isRequired: false, transformFunction: null }, nameFile: { classPropertyName: "nameFile", publicName: "nameFile", isSignal: true, isRequired: false, transformFunction: null }, hasZoom: { classPropertyName: "hasZoom", publicName: "hasZoom", isSignal: true, isRequired: false, transformFunction: null }, aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, requiredCropFollowRatio: { classPropertyName: "requiredCropFollowRatio", publicName: "requiredCropFollowRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imgSrc: "imgSrcChange", outClose: "outClose", outSaveFile: "outSaveFile", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "imageOrigin", first: true, predicate: ["imageOrigin"], descendants: true, isSignal: true }, { propertyName: "imageClip", first: true, predicate: ["imageClip"], descendants: true, isSignal: true }, { propertyName: "imageEditorContainer", first: true, predicate: ["imageEditorContainer"], descendants: true, isSignal: true }, { propertyName: "imageContainer", first: true, predicate: ["imageContainer"], descendants: true, isSignal: true }, { propertyName: "cropArea", first: true, predicate: ["cropArea"], descendants: true, isSignal: true }, { propertyName: "cropTL", first: true, predicate: ["cropTL"], descendants: true, isSignal: true }, { propertyName: "cropBL", first: true, predicate: ["cropBL"], descendants: true, isSignal: true }, { propertyName: "cropBR", first: true, predicate: ["cropBR"], descendants: true, isSignal: true }, { propertyName: "cropTR", first: true, predicate: ["cropTR"], descendants: true, isSignal: true }, { propertyName: "cropLineVL", first: true, predicate: ["cropLineVL"], descendants: true, isSignal: true }, { propertyName: "cropLineVR", first: true, predicate: ["cropLineVR"], descendants: true, isSignal: true }, { propertyName: "cropLineHT", first: true, predicate: ["cropLineHT"], descendants: true, isSignal: true }, { propertyName: "cropLineHB", first: true, predicate: ["cropLineHB"], descendants: true, isSignal: true }, { propertyName: "circleTL", first: true, predicate: ["circleTL"], descendants: true, isSignal: true }, { propertyName: "circleTR", first: true, predicate: ["circleTR"], descendants: true, isSignal: true }, { propertyName: "circleBL", first: true, predicate: ["circleBL"], descendants: true, isSignal: true }, { propertyName: "circleBR", first: true, predicate: ["circleBR"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-modal\n [width]=\"'calc(100vw - 400px)'\"\n [height]=\"'calc(100vh - 100px)'\"\n [minWidth]=\"'1200px'\"\n [headerConfig]=\"{ ignoreHeaderTheme: true, removeButtonClose: true }\"\n [bodyConfig]=\"{ classInclude: '!p-0', scrollOverlayOptions: { scrollX: 'hidden', scrollY: 'hidden' } }\"\n [footerConfig]=\"{ hidden: true }\"\n [zIndex]=\"zIndex()\"\n [buttonsFooter]=\"[]\"\n [mode]=\"'center'\">\n <div class=\"libs-ui-modal-header-custom w-full flex items-center justify-between\">\n <div class=\"w-full relative mx-[24px] h-[16px]\">\n <div class=\"flex w-full libs-ui-font-h4s absolute\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [config]=\"{ zIndex: zIndex() }\">\n {{ 'i18n_edit_file_name' | translate: { file_name: nameFile() } }}\n </libs_ui-components-popover>\n </div>\n </div>\n <div class=\"flex items-center\">\n @if (modeShowButton() === 'save-file') {\n <libs_ui-components-buttons-button\n [type]=\"'button-third'\"\n [label]=\"'i18n_cancel'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px] mr-[16px]'\"\n (outClick)=\"handlerClose($event)\" />\n\n <libs_ui-components-buttons-button\n class=\"mr-[24px]\"\n [label]=\"'i18n_save'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n (outClick)=\"handlerSaveFile($event, 'save-file')\" />\n } @else {\n <libs_ui-components-buttons-button\n [label]=\"'i18n_save_to_new_file'\"\n [type]=\"'button-outline'\"\n [classInclude]=\"'mx-[16px] py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event, 'save-api-as-new-file')\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-secondary'\"\n [label]=\"'i18n_save'\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event, 'save-api')\" />\n <div class=\"h-[12px] libs-ui-border-left-general mx-[16px]\"></div>\n <libs_ui-components-buttons-button\n class=\"mr-[24px]\"\n [classInclude]=\"'p-[6px]'\"\n [type]=\"'button-third-hover-danger'\"\n [iconOnlyType]=\"true\"\n [disable]=\"loading()\"\n [popover]=\"{ config: { content: 'i18n_exit_edit_mode', zIndex: zIndex() } }\"\n [classIconLeft]=\"'libs-ui-icon-close'\"\n (outClick)=\"handlerClose($event)\" />\n }\n </div>\n </div>\n <div class=\"libs-ui-modal-body-custom h-full w-full flex\">\n <div\n #imageEditorContainer\n class=\"relative w-full h-full bg-[#e6e7ea] border-radius-bottom-left-8px p-[32px] libs-ui-input-image-editor-container-left\">\n @if (loadingImage()) {\n <div class=\"absolute h-full w-full bg-[#e6e7ea] top-0 left-0 z-[5]\">\n <libs_ui-components-spinner [size]=\"'medium'\" />\n </div>\n }\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] top-0 left-[32px] z-[1]\"></div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] left-0 top-0 z-[1] rounded-bl-[8px]\"></div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] right-0 top-0 z-[1]\"></div>\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] bottom-0 left-[32px] z-[1]\"></div>\n <div\n #imageContainer\n class=\"relative w-full h-full rounded-bl-[8px] min-h-0\">\n <div\n #circleTL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div\n #circleTR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div\n #circleBL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div\n #circleBR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <img\n #imageOrigin\n class=\"absolute border-[4px] border-[#8e61ee] rounded-[4px] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (load)=\"handlerImageLoaded()\"\n (error)=\"handlerImageError($event)\" />\n <img\n #imageClip\n class=\"absolute z-[1] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (error)=\"handlerImageError($event)\" />\n <div class=\"absolute top-0 left-0 right-0 bottom-0 bg-[#e6e7eab8]\"></div>\n <div\n #cropArea\n class=\"absolute z-[2] border-[4px] border-[#8e61ee] rounded-[4px]\">\n <div class=\"relative w-full h-full\">\n <div\n #cropTL\n class=\"absolute z-[2] left-[-18px] top-[-17px] cursor-nwse-resize\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropBL\n class=\"absolute z-[2] left-[-17px] bottom-[-18px] cursor-nesw-resize rotate-[270deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropTR\n class=\"absolute z-[2] right-[-17px] top-[-17px] cursor-nesw-resize rotate-[90deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropBR\n class=\"absolute z-[2] right-[-18px] bottom-[-17px] cursor-nwse-resize rotate-[180deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropLineVL\n class=\"absolute z-[1] w-[12px] left-[-6px] top-0 bottom-0 cursor-ew-resize\"></div>\n <div\n #cropLineVR\n class=\"absolute z-[1] w-[12px] right-[-6px] top-0 bottom-0 cursor-ew-resize\"></div>\n <div\n #cropLineHT\n class=\"absolute z-[1] h-[12px] left-0 top-[-6px] right-0 cursor-ns-resize\"></div>\n <div\n #cropLineHB\n class=\"absolute z-[1] h-[12px] left-0 right-0 bottom-[-6px] cursor-ns-resize\"></div>\n\n <div class=\"bg-white absolute h-[1px] top-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[1px] bottom-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 left-0 bottom-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 bottom-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[33%] left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[66%] left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[33%]\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[66%]\"></div>\n </div>\n </div>\n </div>\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n <div class=\"w-[320px] shrink-0 p-[16px] bg-[#ffffff] rounded-br-[8px] z-[2] libs-ui-input-image-editor-container-right\">\n <div class=\"flex items-center justify-between mb-[16px]\">\n <div class=\"libs-ui-font-h4m\">{{ 'i18n_cutting_ratio' | translate }}</div>\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [type]=\"'button-third'\"\n [classIconLeft]=\"'libs-ui-icon-refresh'\"\n [classInclude]=\"'p-[6px] mr-[8px]'\"\n [popover]=\"{ config: { content: 'i18n_restore_the_original_state', zIndex: zIndex() } }\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerRestoreImage($event)\" />\n </div>\n <div class=\"mb-[16px] libs-ui-image-editor-edit-display-grid-gap-16\">\n @for (item of cropRatioItems(); track item.key) {\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage() || requiredCropFollowRatio()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"item.icon + ' !text-[20px]'\"\n [isActive]=\"item.key === cropRatioItemSelected()\"\n (outClick)=\"handlerSelectCropRatioItem($event, item.key)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ (item.key === 'free' ? 'i18n_custom' : item.key) | translate }}\n </div>\n </div>\n }\n </div>\n <div class=\"mb-[16px] flex\">\n <libs_ui-components-inputs-valid\n class=\"mr-[16px]\"\n [dataType]=\"'int'\"\n [labelConfig]=\"{ labelLeft: 'i18n_width', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r' }\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originWidth()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropWidth()\" />\n <libs_ui-components-inputs-valid\n [dataType]=\"'int'\"\n [labelConfig]=\"{ labelLeft: 'i18n_length', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r' }\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originHeight()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropHeight()\" />\n </div>\n <div class=\"libs-ui-font-h4m mb-[16px]\">{{ 'i18n_rotate_photos' | translate }}</div>\n <div class=\"flex libs-ui-image-editor-edit-display-grid-gap-16\">\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-rotate-image-outline !text-[20px]'\"\n (outClick)=\"handlerRotateImage($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_rotate_ninety_degrees' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-vertical !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'vertical')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_vertical_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-horizontal !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'horizontal')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_horizontal_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-scale !text-[20px]'\"\n (outClick)=\"handlerResize($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_resize' | translate }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n\n<ng-template #svgArrow>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\">\n <path\n d=\"M33.6987 14.6969L18.3309 14.6969C16.516 14.6969 15.0311 16.1818 15.0311 17.9967L15.0311 33.3645\"\n stroke=\"white\"\n stroke-width=\"5.83333\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n</ng-template>\n\n<ng-template #svgCircle>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\">\n <circle\n cx=\"7.5\"\n cy=\"7.5\"\n r=\"7.5\"\n fill=\"white\" />\n </svg>\n</ng-template>\n", styles: [".libs-ui-image-editor-edit-display-grid-gap-16{display:grid;gap:16px;grid-template-columns:1fr 1fr 1fr 1fr}.libs-ui-image-editor-edit-top-33{top:33.33%}.libs-ui-image-editor-edit-top-66{top:66.66%}.libs-ui-image-editor-edit-left-33{left:33.33%}.libs-ui-image-editor-edit-left-66{left:66.66%}.libs-ui-image-editor-edit-action-item{display:flex;flex-direction:column;align-items:center;width:60px;cursor:pointer}.libs-ui-image-editor-edit-action-item-icon{padding:12px;border-radius:8px;width:max-content;border:1px solid #e6e7ea}.libs-ui-image-editor-edit-action-item-icon:before{font-size:20px}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-hover)}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-bright-20)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-active)!important;background-color:var(--mo-global-color-primary-background-95)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-active)!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { 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: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
785
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsImageEditorComponent, isStandalone: true, selector: "libs_ui-components-image_editor", inputs: { modeShowButton: { classPropertyName: "modeShowButton", publicName: "modeShowButton", isSignal: true, isRequired: false, transformFunction: null }, mimetype: { classPropertyName: "mimetype", publicName: "mimetype", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: true, transformFunction: null }, originUrl: { classPropertyName: "originUrl", publicName: "originUrl", isSignal: true, isRequired: false, transformFunction: null }, nameFile: { classPropertyName: "nameFile", publicName: "nameFile", isSignal: true, isRequired: false, transformFunction: null }, hasZoom: { classPropertyName: "hasZoom", publicName: "hasZoom", isSignal: true, isRequired: false, transformFunction: null }, aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, requiredCropFollowRatio: { classPropertyName: "requiredCropFollowRatio", publicName: "requiredCropFollowRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imgSrc: "imgSrcChange", outClose: "outClose", outSaveFile: "outSaveFile", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "imageOrigin", first: true, predicate: ["imageOrigin"], descendants: true, isSignal: true }, { propertyName: "imageClip", first: true, predicate: ["imageClip"], descendants: true, isSignal: true }, { propertyName: "imageEditorContainer", first: true, predicate: ["imageEditorContainer"], descendants: true, isSignal: true }, { propertyName: "imageContainer", first: true, predicate: ["imageContainer"], descendants: true, isSignal: true }, { propertyName: "cropArea", first: true, predicate: ["cropArea"], descendants: true, isSignal: true }, { propertyName: "cropTL", first: true, predicate: ["cropTL"], descendants: true, isSignal: true }, { propertyName: "cropBL", first: true, predicate: ["cropBL"], descendants: true, isSignal: true }, { propertyName: "cropBR", first: true, predicate: ["cropBR"], descendants: true, isSignal: true }, { propertyName: "cropTR", first: true, predicate: ["cropTR"], descendants: true, isSignal: true }, { propertyName: "cropLineVL", first: true, predicate: ["cropLineVL"], descendants: true, isSignal: true }, { propertyName: "cropLineVR", first: true, predicate: ["cropLineVR"], descendants: true, isSignal: true }, { propertyName: "cropLineHT", first: true, predicate: ["cropLineHT"], descendants: true, isSignal: true }, { propertyName: "cropLineHB", first: true, predicate: ["cropLineHB"], descendants: true, isSignal: true }, { propertyName: "circleTL", first: true, predicate: ["circleTL"], descendants: true, isSignal: true }, { propertyName: "circleTR", first: true, predicate: ["circleTR"], descendants: true, isSignal: true }, { propertyName: "circleBL", first: true, predicate: ["circleBL"], descendants: true, isSignal: true }, { propertyName: "circleBR", first: true, predicate: ["circleBR"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-modal\n [width]=\"'calc(100vw - 400px)'\"\n [height]=\"'calc(100vh - 100px)'\"\n [minWidth]=\"'1200px'\"\n [headerConfig]=\"{ ignoreHeaderTheme: true, removeButtonClose: true }\"\n [bodyConfig]=\"{ classInclude: '!p-0', scrollOverlayOptions: { scrollX: 'hidden', scrollY: 'hidden' } }\"\n [footerConfig]=\"{ hidden: true }\"\n [zIndex]=\"zIndex()\"\n [buttonsFooter]=\"[]\"\n [mode]=\"'center'\">\n <div class=\"libs-ui-modal-header-custom w-full flex items-center justify-between\">\n <div class=\"w-full relative mx-[24px] h-[16px]\">\n <div class=\"flex w-full libs-ui-font-h4s absolute\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [config]=\"{ zIndex: zIndex() }\">\n {{ 'i18n_edit_file_name' | translate: { file_name: nameFile() } }}\n </libs_ui-components-popover>\n </div>\n </div>\n <div class=\"flex items-center\">\n @if (modeShowButton() === 'save-file') {\n <libs_ui-components-buttons-button\n [type]=\"'button-third'\"\n [label]=\"'i18n_cancel'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px] mr-[16px]'\"\n (outClick)=\"handlerClose($event)\" />\n\n <libs_ui-components-buttons-button\n class=\"mr-[24px]\"\n [label]=\"'i18n_save'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n (outClick)=\"handlerSaveFile($event, 'save-file')\" />\n } @else {\n <libs_ui-components-buttons-button\n [label]=\"'i18n_save_to_new_file'\"\n [type]=\"'button-outline'\"\n [classInclude]=\"'mx-[16px] py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event, 'save-api-as-new-file')\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-secondary'\"\n [label]=\"'i18n_save'\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event, 'save-api')\" />\n <div class=\"h-[12px] libs-ui-border-left-general mx-[16px]\"></div>\n <libs_ui-components-buttons-button\n class=\"mr-[24px]\"\n [classInclude]=\"'p-[6px]'\"\n [type]=\"'button-third-hover-danger'\"\n [iconOnlyType]=\"true\"\n [disable]=\"loading()\"\n [popover]=\"{ config: { content: 'i18n_exit_edit_mode', zIndex: zIndex() } }\"\n [classIconLeft]=\"'libs-ui-icon-close'\"\n (outClick)=\"handlerClose($event)\" />\n }\n </div>\n </div>\n <div class=\"libs-ui-modal-body-custom h-full w-full flex\">\n <div\n #imageEditorContainer\n class=\"relative w-full h-full bg-[#e6e7ea] border-radius-bottom-left-8px p-[32px] libs-ui-input-image-editor-container-left\">\n @if (loadingImage()) {\n <div class=\"absolute h-full w-full bg-[#e6e7ea] top-0 left-0 z-[5]\">\n <libs_ui-components-spinner [size]=\"'medium'\" />\n </div>\n }\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] top-0 left-[32px] z-[1]\"></div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] left-0 top-0 z-[1] rounded-bl-[8px]\"></div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] right-0 top-0 z-[1]\"></div>\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] bottom-0 left-[32px] z-[1]\"></div>\n <div\n #imageContainer\n class=\"relative w-full h-full rounded-bl-[8px] min-h-0\">\n <div\n #circleTL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div\n #circleTR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div\n #circleBL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div\n #circleBR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <img\n #imageOrigin\n class=\"absolute border-[4px] border-[#8e61ee] rounded-[4px] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (load)=\"handlerImageLoaded()\"\n (error)=\"handlerImageError($event)\" />\n <img\n #imageClip\n class=\"absolute z-[1] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (error)=\"handlerImageError($event)\" />\n <div class=\"absolute top-0 left-0 right-0 bottom-0 bg-[#e6e7eab8]\"></div>\n <div\n #cropArea\n class=\"absolute z-[2] border-[4px] border-[#8e61ee] rounded-[4px]\">\n <div class=\"relative w-full h-full\">\n <div\n #cropTL\n class=\"absolute z-[2] left-[-18px] top-[-17px] cursor-nwse-resize\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropBL\n class=\"absolute z-[2] left-[-17px] bottom-[-18px] cursor-nesw-resize rotate-[270deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropTR\n class=\"absolute z-[2] right-[-17px] top-[-17px] cursor-nesw-resize rotate-[90deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropBR\n class=\"absolute z-[2] right-[-18px] bottom-[-17px] cursor-nwse-resize rotate-[180deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div\n #cropLineVL\n class=\"absolute z-[1] w-[12px] left-[-6px] top-0 bottom-0 cursor-ew-resize\"></div>\n <div\n #cropLineVR\n class=\"absolute z-[1] w-[12px] right-[-6px] top-0 bottom-0 cursor-ew-resize\"></div>\n <div\n #cropLineHT\n class=\"absolute z-[1] h-[12px] left-0 top-[-6px] right-0 cursor-ns-resize\"></div>\n <div\n #cropLineHB\n class=\"absolute z-[1] h-[12px] left-0 right-0 bottom-[-6px] cursor-ns-resize\"></div>\n\n <div class=\"bg-white absolute h-[1px] top-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[1px] bottom-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 left-0 bottom-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 bottom-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[33%] left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[66%] left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[33%]\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[66%]\"></div>\n </div>\n </div>\n </div>\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n <div class=\"w-[320px] shrink-0 p-[16px] bg-[#ffffff] rounded-br-[8px] z-[2] libs-ui-input-image-editor-container-right\">\n <div class=\"flex items-center justify-between mb-[16px]\">\n <div class=\"libs-ui-font-h4m\">{{ 'i18n_cutting_ratio' | translate }}</div>\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [type]=\"'button-third'\"\n [classIconLeft]=\"'libs-ui-icon-refresh'\"\n [classInclude]=\"'p-[6px] mr-[8px]'\"\n [popover]=\"{ config: { content: 'i18n_restore_the_original_state', zIndex: zIndex() } }\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerRestoreImage($event)\" />\n </div>\n <div class=\"mb-[16px] libs-ui-image-editor-edit-display-grid-gap-16\">\n @for (item of cropRatioItems(); track item.key) {\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage() || requiredCropFollowRatio()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"item.icon + ' !text-[20px]'\"\n [isActive]=\"item.key === cropRatioItemSelected()\"\n (outClick)=\"handlerSelectCropRatioItem($event, item.key)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ (item.key === 'free' ? 'i18n_custom' : item.key) | translate }}\n </div>\n </div>\n }\n </div>\n <div class=\"mb-[16px] flex\">\n <libs_ui-components-inputs-valid\n class=\"mr-[16px]\"\n [dataType]=\"'int'\"\n [labelConfig]=\"{ labelLeft: 'i18n_width', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r' }\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originWidth()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropWidth()\" />\n <libs_ui-components-inputs-valid\n [dataType]=\"'int'\"\n [labelConfig]=\"{ labelLeft: 'i18n_length', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r' }\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{ id: 'px', label: 'px' }]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originHeight()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropHeight()\" />\n </div>\n <div class=\"libs-ui-font-h4m mb-[16px]\">{{ 'i18n_rotate_photos' | translate }}</div>\n <div class=\"flex libs-ui-image-editor-edit-display-grid-gap-16\">\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-rotate-image-outline !text-[20px]'\"\n (outClick)=\"handlerRotateImage($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_rotate_ninety_degrees' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-vertical !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'vertical')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_vertical_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-horizontal !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'horizontal')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_horizontal_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button\n [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-scale !text-[20px]'\"\n (outClick)=\"handlerResize($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_resize' | translate }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n\n<ng-template #svgArrow>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\">\n <path\n d=\"M33.6987 14.6969L18.3309 14.6969C16.516 14.6969 15.0311 16.1818 15.0311 17.9967L15.0311 33.3645\"\n stroke=\"white\"\n stroke-width=\"5.83333\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n</ng-template>\n\n<ng-template #svgCircle>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\">\n <circle\n cx=\"7.5\"\n cy=\"7.5\"\n r=\"7.5\"\n fill=\"white\" />\n </svg>\n</ng-template>\n", styles: [".libs-ui-image-editor-edit-display-grid-gap-16{display:grid;gap:16px;grid-template-columns:1fr 1fr 1fr 1fr}.libs-ui-image-editor-edit-top-33{top:33.33%}.libs-ui-image-editor-edit-top-66{top:66.66%}.libs-ui-image-editor-edit-left-33{left:33.33%}.libs-ui-image-editor-edit-left-66{left:66.66%}.libs-ui-image-editor-edit-action-item{display:flex;flex-direction:column;align-items:center;width:60px;cursor:pointer}.libs-ui-image-editor-edit-action-item-icon{padding:12px;border-radius:8px;width:max-content;border:1px solid #e6e7ea}.libs-ui-image-editor-edit-action-item-icon:before{font-size:20px}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-hover)}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-bright-20)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-active)!important;background-color:var(--mo-global-color-primary-background-95)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-active)!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { 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: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "escapeKeyboardCloseModal", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
786
786
|
}
|
|
787
787
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsImageEditorComponent, decorators: [{
|
|
788
788
|
type: Component,
|
|
@@ -793,4 +793,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
793
793
|
type: Inject,
|
|
794
794
|
args: [LINK_IMAGE_ERROR_TOKEN_INJECT]
|
|
795
795
|
}] }] });
|
|
796
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ltYWdlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFnQixVQUFVLEVBQWMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2xKLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFVdkYsTUFBTSxPQUFPLG9DQUFvQztJQThEd0I7SUE3RDdELE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLFdBQVcsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsWUFBWSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqQyxjQUFjLEdBQUcsTUFBTSxDQUF3QixlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLHFCQUFxQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxRQUFRLEdBQUcsTUFBTSxDQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RCxVQUFVLEdBQUcsTUFBTSxDQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0IsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDcEIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLGdCQUFnQixHQUFHLE1BQU0sQ0FBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6RixRQUFRLEdBQUcsTUFBTSxDQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLFdBQVcsR0FBRyxNQUFNLENBQW9CLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELFNBQVMsR0FBRyxNQUFNLENBQTRCLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELGFBQWEsR0FBRyxNQUFNLENBQWlCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkssYUFBYSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDZixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLGtCQUFrQixDQUE0RDtJQUU3RSxjQUFjLEdBQUcsS0FBSyxDQUFZLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLFFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUMzQixNQUFNLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7SUFDbEMsU0FBUyxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQzVCLFFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUMzQixPQUFPLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFdBQVcsR0FBRyxLQUFLLEVBQWdCLENBQUM7SUFDcEMsdUJBQXVCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRWhELFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGFBQWEsQ0FBQyxDQUFDO0lBQzVELFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsc0JBQXNCLENBQUMsQ0FBQztJQUM5RSxjQUFjLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xFLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFlBQVksQ0FBQyxDQUFDO0lBQzFELFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFlBQVksQ0FBQyxDQUFDO0lBQzFELFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFlBQVksQ0FBQyxDQUFDO0lBQzFELFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFlBQVksQ0FBQyxDQUFDO0lBQzFELFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLFVBQVUsQ0FBQyxDQUFDO0lBRXRELFFBQVEsR0FBRyxNQUFNLEVBQW1DLENBQUM7SUFDckQsV0FBVyxHQUFHLE1BQU0sRUFBYSxDQUFDO0lBQ2xDLG1CQUFtQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztJQUVsRSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBRXhFLFlBQXVFLGNBQXNCO1FBQXRCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO0lBQUcsQ0FBQztJQUVqRyxlQUFlO1FBQ2IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpKLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3BDLGVBQWUsRUFBRSxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztTQUNqRSxDQUFDO0lBQ0osQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxDQUFhO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25CLENBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDakQsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFFekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV2QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3hLLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTdKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwSixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFO1lBQzFILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7WUFDMUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUMxSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFO1lBQzFILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7WUFDOUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUM5SCxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFO1lBQzlILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7WUFDOUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hLLENBQUM7SUFFTyxTQUFTLENBQUMsT0FBbUIsRUFBRSxTQUFpQixFQUFFLElBQXFFLEVBQUUsUUFBNEIsRUFBRSxRQUE2QjtRQUMxTCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQVEsT0FBTyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQ2pFLEdBQUcsQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUNuRCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdEIsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFDRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3BDLENBQUM7UUFFRixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUNiLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDeEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQyxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7UUFFN0IsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDekQsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEQsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3BELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTlELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQWU7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3SCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5SCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkosQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsa0JBQWtCLENBQVMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFdEssTUFBTSxPQUFPLEdBQXdCO1lBQ25DLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztZQUMxQixLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUM7UUFFRixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNwRSxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDdEUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVqRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV2QyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUVsRyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9FLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxTQUFTLENBQUMsR0FBRyxPQUFPLFNBQVMsQ0FBQyxLQUFLLE9BQU8sU0FBUyxDQUFDLE1BQU0sT0FBTyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDM0ksQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDaEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzFGLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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QUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQXozQlUsb0NBQW9DLGtCQThEZiw2QkFBNkI7NEZBOURsRCxvQ0FBb0MsZ3NHQzVCakQscTVhQTBUQSxvMUNEaFNZLGdCQUFnQixtSkFBRSxlQUFlLDRGQUFFLGdDQUFnQyxvZ0JBQUUsOEJBQThCLG10QkFBRSxvQ0FBb0MsczFEQUFFLHNDQUFzQyxzakJBQUUsZ0NBQWdDOzs0RkFFbE4sb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLGlDQUFpQyxtQkFHMUIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZ0NBQWdDLEVBQUUsOEJBQThCLEVBQUUsb0NBQW9DLEVBQUUsc0NBQXNDLEVBQUUsZ0NBQWdDLENBQUM7OzBCQWdFak4sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgSW5qZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPcHRpb25hbCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbW9kYWwnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNwaW5uZXInO1xuaW1wb3J0IHsgSUFzcGVjdFJhdGlvLCBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgY29udmVydEJhc2U2NFRvQmxvYiwgZ2V0LCBpc05pbCwgTElOS19JTUFHRV9FUlJPUl9UT0tFTl9JTkpFQ1QsIHNldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjcm9wUmF0aW9uSXRlbXMsIGdldENyb3BSZWN0SW1hZ2UsIGdldERhdGFVcmwsIGdldFN0eWxlc09mRWxlbWVudCwgZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93IH0gZnJvbSAnLi9kZWZpbmVzL2ltYWdlLWVkaXRvci5kZWZpbmUnO1xuaW1wb3J0IHsgSUltYWdlRWRpdG9yRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNyb3BSYXRpb0l0ZW0sIElDcm9wU2l6ZSwgSVJlY3RDbGlwLCBJUmVzaXplRGF0YSwgSVNhdmVGaWxlLCBJU3RhcnRNb3VzZURpbSwgSVN0eWxlcywgTU9ERV9FRElULCBUWVBFX01PREVfU0FWRSwgVFlQRV9SRVNJWkVfU1RBVEUgfSBmcm9tICcuL2ludGVyZmFjZXMvaW1hZ2UtZWRpdG9yLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JSZXNpemVDb21wb25lbnQgfSBmcm9tICcuL3Jlc2l6ZS9yZXNpemUuY29tcG9uZW50JztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbWFnZV9lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2ltYWdlLWVkaXRvci5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgVHJhbnNsYXRlTW9kdWxlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdJbWFnZSA9IHNpZ25hbCh0cnVlKTtcbiAgcHJvdGVjdGVkIGNoYW5nZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgb3JpZ2luV2lkdGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIG9yaWdpbkhlaWdodCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgY3JvcFJhdGlvSXRlbXMgPSBzaWduYWw8QXJyYXk8SUNyb3BSYXRpb0l0ZW0+Pihjcm9wUmF0aW9uSXRlbXMoKSk7XG4gIHByb3RlY3RlZCBjcm9wUmF0aW9JdGVtU2VsZWN0ZWQgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBjcm9wU2l6ZSA9IHNpZ25hbDxJQ3JvcFNpemU+KHsgd2lkdGg6IDIwLCBoZWlnaHQ6IDIwIH0pO1xuICBwcm90ZWN0ZWQgcmVzaXplRGF0YSA9IHNpZ25hbDxJUmVzaXplRGF0YT4oeyByYXRpbzogMTAwLCB3aWR0aDogNjAwLCBoZWlnaHQ6IDgwMCB9KTtcbiAgcHJvdGVjdGVkIGRyYWdHcmlkQ3JvcCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICBwcml2YXRlIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICBwcml2YXRlIGNvbnRhaW5lckhlaWdodCA9IHNpZ25hbCg4MDApO1xuICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gc2lnbmFsKDEyMDApO1xuICBwcml2YXRlIGltZ0NvbnRhaW5lclJlY3QgPSBzaWduYWw8SUJvdW5kaW5nQ2xpZW50UmVjdD4oeyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG4gIHByaXZhdGUgcmVjdENsaXAgPSBzaWduYWw8SVJlY3RDbGlwPih7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSByZXNpemVTdGF0ZSA9IHNpZ25hbDxUWVBFX1JFU0laRV9TVEFURT4oJ25vbmUnKTtcbiAgcHJpdmF0ZSBtb3ZlU3RhdGUgPSBzaWduYWw8J2NsaXAnIHwgJ2ltYWdlJyB8ICdub25lJz4oJ25vbmUnKTtcbiAgcHJpdmF0ZSBzdGFydE1vdXNlRGltID0gc2lnbmFsPElTdGFydE1vdXNlRGltPih7IGNsaWVudFg6IDAsIGNsaWVudFk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCwgaW1hZ2VUb3A6IDAsIGltYWdlTGVmdDogMCwgaW1hZ2VXaWR0aDogMCwgaW1hZ2VIZWlnaHQ6IDAgfSk7XG4gIHByaXZhdGUgZGF0YVVybE9yaWdpbiA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSByYXRpb1ZhbHVlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWluSGVpZ2h0ID0gMjA7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWluV2lkdGggPSAyMDtcbiAgcHJpdmF0ZSByZXNpemVDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yUmVzaXplQ29tcG9uZW50PjtcblxuICByZWFkb25seSBtb2RlU2hvd0J1dHRvbiA9IGlucHV0PE1PREVfRURJVD4oJ3NhdmUtZmlsZScpO1xuICByZWFkb25seSBtaW1ldHlwZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgaW1nU3JjID0gbW9kZWwucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvcmlnaW5VcmwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG5hbWVGaWxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYXNab29tID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhc3BlY3RSYXRpbyA9IGlucHV0PElBc3BlY3RSYXRpbz4oKTtcbiAgcmVhZG9ubHkgcmVxdWlyZWRDcm9wRm9sbG93UmF0aW8gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaW1hZ2VPcmlnaW4gPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlT3JpZ2luJyk7XG4gIHJlYWRvbmx5IGltYWdlQ2xpcCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDbGlwJyk7XG4gIHJlYWRvbmx5IGltYWdlRWRpdG9yQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdpbWFnZUVkaXRvckNvbnRhaW5lcicpO1xuICByZWFkb25seSBpbWFnZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDb250YWluZXInKTtcbiAgcmVhZG9ubHkgY3JvcEFyZWEgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BBcmVhJyk7XG4gIHJlYWRvbmx5IGNyb3BUTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRMJyk7XG4gIHJlYWRvbmx5IGNyb3BCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJMJyk7XG4gIHJlYWRvbmx5IGNyb3BCUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJSJyk7XG4gIHJlYWRvbmx5IGNyb3BUUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRSJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lVkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lVkwnKTtcbiAgcmVhZG9ubHkgY3JvcExpbmVWUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcExpbmVWUicpO1xuICByZWFkb25seSBjcm9wTGluZUhUID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZUhUJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lSEIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lSEInKTtcbiAgcmVhZG9ubHkgY2lyY2xlVEwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZVRMJyk7XG4gIHJlYWRvbmx5IGNpcmNsZVRSID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVUUicpO1xuICByZWFkb25seSBjaXJjbGVCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY2lyY2xlQkwnKTtcbiAgcmVhZG9ubHkgY2lyY2xlQlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZUJSJyk7XG5cbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8eyBpc0NsaWNrQnV0dG9uQ2xvc2U6IGJvb2xlYW4gfT4oKTtcbiAgcmVhZG9ubHkgb3V0U2F2ZUZpbGUgPSBvdXRwdXQ8SVNhdmVGaWxlPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbWFnZUVkaXRvckZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCkgcHJpdmF0ZSBsaW5rSW1hZ2VFcnJvcjogc3RyaW5nKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBhc3BlY3RSYXRpb0ZvdW5kID0gdGhpcy5hc3BlY3RSYXRpbygpPy5rZXkgPyB0aGlzLmNyb3BSYXRpb0l0ZW1zKCkuZmluZCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IHRoaXMuYXNwZWN0UmF0aW8oKT8ua2V5KSA6IHRoaXMuY3JvcFJhdGlvSXRlbXMoKVswXTtcblxuICAgIGlmIChhc3BlY3RSYXRpb0ZvdW5kKSB7XG4gICAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG5cbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldChhc3BlY3RSYXRpb0ZvdW5kPy5rZXkpO1xuICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTW9kYWxTaXplKCk7XG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICAgIHRoaXMuaW5pdE1vdXNlRXZlbnQoKTtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICB9XG5cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElJbWFnZUVkaXRvckZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JvcEltYWdlOiB0aGlzLmNyb3BJbWFnZS5iaW5kKHRoaXMpLFxuICAgICAgc2V0TG9hZGluZ1N0YXRlOiAobG9hZGluZzogYm9vbGVhbikgPT4gdGhpcy5sb2FkaW5nLnNldChsb2FkaW5nKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUxvYWRlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTW9kYWxTaXplKCk7XG4gICAgICB0aGlzLmxvYWRpbmdJbWFnZS5zZXQoZmFsc2UpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCkge1xuICAgIGNvbnNvbGUubG9nKCdlJywgZSk7XG4gICAgKGUgYXMgSUV2ZW50KS50YXJnZXQuc3JjID0gdGhpcy5saW5rSW1hZ2VFcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kYWxTaXplKCkge1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwMDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gNDAwO1xuXG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQuc2V0KG1heEhlaWdodCAtIDEyNCk7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5zZXQobWF4V2lkdGggLSAzODQpO1xuICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhKCkge1xuICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgIHRoaXMuaW1hZ2Uuc2V0QXR0cmlidXRlKCdjcm9zc29yaWdpbicsICdhbm9ueW1vdXMnKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5pbWFnZS5oZWlnaHQpO1xuICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQodGhpcy5pbWFnZS53aWR0aCk7XG5cbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpPy5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgICB0aGlzLmRhdGFVcmxPcmlnaW4uc2V0KGdldERhdGFVcmwodGhpcy5jYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpKTtcbiAgICAgIHRoaXMuaW1nU3JjLnNldCh0aGlzLmRhdGFVcmxPcmlnaW4oKSk7XG4gICAgfTtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNb3VzZUV2ZW50KCkge1xuICAgIGNvbnN0IG1vdXNlVXAgPSB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IGRvY3VtZW50IH0sICdtb3VzZXVwJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgdW5kZWZpbmVkLCAoKSA9PiB0aGlzLmhhbmRsZXJNb3VzZXVwKCkpO1xuICAgIGNvbnN0IG1vdXNlTW92ZSA9IHRoaXMuaW5pdEV2ZW50KHsgbmF0aXZlRWxlbWVudDogZG9jdW1lbnQgfSwgJ21vdXNlbW92ZScsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0pLnBpcGUodGFrZVVudGlsKG1vdXNlVXApKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuaW1hZ2VFZGl0b3JDb250YWluZXIoKSwgJ3doZWVsJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlIH0sIHVuZGVmaW5lZCwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZXdoZWVsKGUpKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IHdpbmRvdyB9LCAncmVzaXplJywge30sIHVuZGVmaW5lZCwgKCkgPT4gdGhpcy51cGRhdGVNb2RhbFNpemUoKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5pbWFnZUNvbnRhaW5lcigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGUpKS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVEwnKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEJMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnQkwnKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEJSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnQlInKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVFInKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVWTCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ1ZMJyk7XG4gICAgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BMaW5lVlIoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdWUicpO1xuICAgIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZUhUKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnSFQnKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVIQigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ0hCJyk7XG4gICAgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BBcmVhKCksICdtb3VzZWRvd24nLCB7fSwgdW5kZWZpbmVkLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlZG93bkNyb3BBcmVhKGUpKS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RXZlbnQoZWxlbWVudDogRWxlbWVudFJlZiwgZXZlbnROYW1lOiBzdHJpbmcsIGZsYWc6IHsgY2FsbFN0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW47IGNhbGxQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW4gfSwgb2JzTWVyZ2U/OiBPYnNlcnZhYmxlPEV2ZW50PiwgY2FsbGJhY2s/OiAoZTogRXZlbnQpID0+IHZvaWQpOiBPYnNlcnZhYmxlPEV2ZW50PiB7XG4gICAgY29uc3Qgb2JzID0gZnJvbUV2ZW50PEV2ZW50PihlbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSkucGlwZShcbiAgICAgIHRhcCgoZTogRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGZsYWcuY2FsbFN0b3BQcm9wYWdhdGlvbiAmJiBlPy5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmbGFnLmNhbGxQcmV2ZW50RGVmYXVsdCAmJiBlPy5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICk7XG5cbiAgICBpZiAob2JzTWVyZ2UpIHtcbiAgICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gb2JzTWVyZ2UpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVPcmlnaW5JbWFnZVNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gdGhpcy5vcmlnaW5XaWR0aCgpO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIGNvbnN0IHJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XG5cbiAgICBpZiAod2lkdGggPj0gaGVpZ2h0KSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHRoaXMuY29udGFpbmVyV2lkdGgoKSwgd2lkdGgpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4od2lkdGggLyByYXRpbywgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICB3aWR0aCA9IGhlaWdodCAqIHJhdGlvO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLmNvbnRhaW5lckhlaWdodCgpLCBoZWlnaHQpO1xuICAgICAgd2lkdGggPSBoZWlnaHQgKiByYXRpbztcbiAgICB9XG4gICAgdGhpcy5zZXRJbWFnZVBvc2l0aW9uKHdpZHRoLCBoZWlnaHQpO1xuICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEltYWdlUG9zaXRpb24od2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5jb250YWluZXJXaWR0aCgpIC8gMiAtIHdpZHRoIC8gMjtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmNvbnRhaW5lckhlaWdodCgpIC8gMiAtIGhlaWdodCAvIDI7XG4gICAgY29uc3Qgc3R5bGVzID0geyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQsIGRpc3BsYXk6ICdibG9jaycgfTtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCBzdHlsZXMpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgc3R5bGVzKTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHN0eWxlcyk7XG4gIH1cblxuICBwcml2YXRlIHNldENpcmNsZVBvc2l0aW9uKHN0eWxlczogSVN0eWxlcykge1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUTCgpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgLSA1IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUUigpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgKyAoc3R5bGVzLndpZHRoIHx8IDApIC0gMTAgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJMKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSAtIDUgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJSKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSArIChzdHlsZXMud2lkdGggfHwgMCkgLSAxMCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ3JvcEFyZWFQb3MoKSB7XG4gICAgY29uc3QgW2ltZ1RvcCwgaW1nTGVmdCwgaW1nV2lkdGgsIGltZ0hlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQsIFsnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnLCAnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuXG4gICAgY29uc3QgcmVjdEltZzogSUJvdW5kaW5nQ2xpZW50UmVjdCA9IHtcbiAgICAgIHRvcDogTWF0aC5tYXgoMCwgaW1nVG9wKSxcbiAgICAgIGxlZnQ6IE1hdGgubWF4KDAsIGltZ0xlZnQpLFxuICAgICAgd2lkdGg6IGltZ1dpZHRoLFxuICAgICAgaGVpZ2h0OiBpbWdIZWlnaHQsXG4gICAgfTtcblxuICAgIHJlY3RJbWcud2lkdGggPSBNYXRoLm1pbihpbWdXaWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpIC0gaW1nTGVmdCk7XG4gICAgaWYgKGltZ0xlZnQgPCAwKSB7XG4gICAgICByZWN0SW1nLndpZHRoID0gTWF0aC5taW4oaW1nV2lkdGggKyBpbWdMZWZ0LCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgIH1cbiAgICByZWN0SW1nLmhlaWdodCA9IE1hdGgubWluKGltZ0hlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSAtIGltZ1RvcCk7XG4gICAgaWYgKGltZ1RvcCA8IDApIHtcbiAgICAgIHJlY3RJbWcuaGVpZ2h0ID0gTWF0aC5taW4oaW1nVG9wICsgaW1nSGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICB9XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICghdGhpcy5yYXRpb1ZhbHVlKCkpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCByZWN0SW1nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgd2lkdGggPSByZWN0SW1nLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB3aWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuXG4gICAgd2lkdGggPSBNYXRoLm1pbihyZWN0SW1nLndpZHRoLCB3aWR0aCk7XG4gICAgaGVpZ2h0ID0gd2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICBoZWlnaHQgPSBNYXRoLm1pbihyZWN0SW1nLmhlaWdodCwgaGVpZ2h0KTtcbiAgICB3aWR0aCA9IGhlaWdodCAqIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgIGNvbnN0IHRvcCA9IHJlY3RJbWcudG9wICsgKHJlY3RJbWcuaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgbGVmdCA9IHJlY3RJbWcubGVmdCArIChyZWN0SW1nLndpZHRoIC0gd2lkdGgpIC8gMjtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3JvcFJhdGlvVmFsdWUoKSB7XG4gICAgY29uc3QgY3JvcFJhdGlvID0gdGhpcy5jcm9wUmF0aW9JdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSB0aGlzLmNyb3BSYXRpb0l0ZW1TZWxlY3RlZCgpKTtcblxuICAgIGlmICghY3JvcFJhdGlvPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNwZWN0UmF0aW8oKT8udmFsdWUgfHwgdGhpcy5vcmlnaW5XaWR0aCgpIC8gdGhpcy5vcmlnaW5IZWlnaHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JvcFJhdGlvLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZWN0Q2xpcFBvcygpIHtcbiAgICBjb25zdCByZWFjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHtyZWFjdENsaXAudG9wfXB4LCAke3JlYWN0Q2xpcC5yaWdodH1weCwgJHtyZWFjdENsaXAuYm90dG9tfXB4LCAke3JlYWN0Q2xpcC5sZWZ0fXB4KWA7XG4gIH1cblxuICBwcml2YXRlIGdldFJlY3RDbGlwSW1hZ2UoKSB7XG4gICAgY29uc3QgaW1hZ2VSZWN0ID0gdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmICghaW1hZ2VSZWN0LndpZHRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWN0Q2xpcCgpO1xuICAgIH1cbiAgICBjb25zdCBjcm9wUmVjdCA9IHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5yb3VuZChjcm9wUmVjdC53aWR0aCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5yb3VuZChjcm9wUmVjdC5oZWlnaHQpO1xuICAgIGNvbnN0IGxlZnQgPSBjcm9wUmVjdC5sZWZ0IC0gaW1hZ2VSZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gY3JvcFJlY3QudG9wIC0gaW1hZ2VSZWN0LnRvcDtcbiAgICBjb25zdCByaWdodCA9IE1hdGgucm91bmQobGVmdCArIHdpZHRoKTtcbiAgICBjb25zdCBib3R0b20gPSBNYXRoLnJvdW5kKHRvcCArIGhlaWdodCk7XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLm9yaWdpbldpZHRoKCkgLyBpbWFnZVJlY3Qud2lkdGg7XG5cbiAgICB0aGlzLnJlY3RDbGlwLnNldCh7IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLmNyb3BTaXplLnNldCh7XG4gICAgICBoZWlnaHQ6IHRvcCA+PSAwID8gTWF0aC5yb3VuZCgoYm90dG9tIC0gdG9wKSAqIHJhdGlvKSA6IE1hdGguZmxvb3IoKGJvdHRvbSAtIHRvcCkgKiByYXRpbyksXG4gICAgICB3aWR0aDogdG9wID49IDAgPyBNYXRoLnJvdW5kKChyaWdodCAtIGxlZnQpICogKHRoaXMucmF0aW9WYWx1ZSgpID8/IDEpICogcmF0aW8pIDogTWF0aC5mbG9vcigocmlnaHQgLSBsZWZ0KSAqICh0aGlzLnJhdGlvVmFsdWUoKSA/PyAxKSAqIHJhdGlvKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnJlY3RDbGlwKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJNb3VzZW1vdmUoZTogYW55KSB7XG4gICAgY29uc3QgdHlwZVN0YXRlID0gWydCTCcsICdUTCcsICdUUicsICdCUicsICdWTCcsICdWUicsICdIVCcsICdIQiddO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBgcmVzaXplQ3JvcEZvbGxvdyR7dGhpcy5yZXNpemVTdGF0ZSgpfURpcmA7IC8vIHJlc2l6ZUNyb3BGb2xsb3dCTERpciwgcmVzaXplQ3JvcEZvbGxvd1RMRGlyLCByZXNpemVDcm9wRm9sbG93VFJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dCUkRpciwgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyLCByZXNpemVDcm9wRm9sbG93VlJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dIVERpciwgcmVzaXplQ3JvcEZvbGxvd0hCRGlyXG5cbiAgICBpZiAodHlwZVN0YXRlLmluY2x1ZGVzKHRoaXMucmVzaXplU3RhdGUoKSkpIHtcbiAgICAgICh0aGlzIGFzIGFueSlbbWV0aG9kTmFtZV0oZSk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb3ZlU3RhdGUoKSkge1xuICAgICAgY2FzZSAnY2xpcCc6XG4gICAgICAgIHRoaXMubW92ZUNsaXBBcmVhKGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICB0aGlzLm1vdmVJbWFnZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dCTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogLTEsIGhlaWdodDogMSwgbGVmdDogMSwgdG9wOiAwIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyB0aGlzLnJhdGlvVmFsdWUoKSAqIG1vbWVudFkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUUkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlV2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IC0xLCBsZWZ0OiAwLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBoZWlnaHQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93QlJEaXIoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IHRoaXMucmF0aW9WYWx1ZSgpID8gbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IDAsIHRvcDogMCB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFggLyB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZSRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRYIC8gdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wIH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogLTEsIGxlZnQ6IDAsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIVERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIQkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IC0xLCB0b3A6IDAgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgaGVpZ2h0LCBsZWZ0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcml2YXRlIGdldFJlY3RSZXNpemVDcm9wRm9sbG93KHJhdGlvOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0sIG1vbWVudFg6IG51bWJlciwgbW9tZW50WTogbnVtYmVyKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIG1vbWVudFggKiByYXRpby53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgKyBtb21lbnRZICogcmF0aW8uaGVpZ2h0O1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFkgKiByYXRpby50b3A7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYICogcmF0aW8ubGVmdDtcblxuICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V1cCgpIHtcbiAgICB0aGlzLmltYWdlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldCgnbm9uZScpO1xuICAgIHRoaXMubW92ZVN0YXRlLnNldCgnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V3aGVlbChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmhhc1pvb20oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xuICAgICAgdGhpcy56b29tSW1hZ2UoMSAvIDEuMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy56b29tSW1hZ2UoMS4xKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZVN0YXRlKCkgPT09ICdub25lJyAmJiB0aGlzLm1vdmVTdGF0ZSgpID09PSAnbm9uZScpIHtcbiAgICAgIHRoaXMubW92ZVN0YXRlLnNldCgnaW1hZ2UnKTtcbiAgICAgIHRoaXMuaGFuZGxlck1vdXNlZG93bihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJDcm9wUmVzaXplKGU6IGFueSwgcmVzaXplVHlwZTogVFlQRV9SRVNJWkVfU1RBVEUpIHtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldChyZXNpemVUeXBlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZTogYW55KSB7XG4gICAgdGhpcy5tb3ZlU3RhdGUuc2V0KCdjbGlwJyk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VUb3AsIGltYWdlTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1ncmFiYmluZycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NsaXAnOlxuICAgICAgICBpZiAod2lkdGggPT09IGltYWdlV2lkdGggJiYgaGVpZ2h0ID09PSBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRNb3VzZURpbS5zZXQoe1xuICAgICAgY2xpZW50WDogZS5jbGllbnRYLFxuICAgICAgY2xpZW50WTogZS5jbGllbnRZLFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3A6IHRvcCxcbiAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICBpbWFnZVRvcDogaW1hZ2VUb3AsXG4gICAgICBpbWFnZUxlZnQ6IGltYWdlTGVmdCxcbiAgICAgIGltYWdlV2lkdGg6IGltYWdlV2lkdGgsXG4gICAgICBpbWFnZUhlaWdodDogaW1hZ2VIZWlnaHQsXG4gICAgfSk7XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlSW1hZ2UoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgaW1nVG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3AgKyBtb21lbnRZO1xuICAgIGNvbnN0IGltZ0xlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyBtb21lbnRYO1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFk7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYO1xuXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgdG9wOiBpbWdUb3AsIGxlZnQ6IGltZ0xlZnQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHRvcDogaW1nVG9wLCBsZWZ0OiBpbWdMZWZ0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCB9KTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wOiBpbWdUb3AsIGxlZnQ6IGltZ0xlZnQsIHdpZHRoOiB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVdpZHRoLCBoZWlnaHQ6IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQ2xpcEFyZWEoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgW2ltZ1dpZHRoLCBpbWdIZWlnaHQsIGltZ1RvcCwgaW1nTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGxldCB0b3AgPSBNYXRoLm1heChpbWdUb3AsIHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFkpO1xuICAgIGxldCBsZWZ0ID0gTWF0aC5tYXgoaW1nTGVmdCwgdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIG1vbWVudFgpO1xuXG4gICAgdG9wID0gTWF0aC5taW4odG9wLCBpbWdUb3AgKyBpbWdIZWlnaHQgLSBjcm9wSGVpZ2h0KTtcbiAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgaW1nTGVmdCArIGltZ1dpZHRoIC0gY3JvcFdpZHRoKTtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCB9LCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgem9vbUltYWdlKHNjYWxlOiBudW1iZXIpIHtcbiAgICBjb25zdCBbY3VycldpZHRoLCBjdXJySGVpZ2h0LCBjdXJyVG9wLCBjdXJyTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChjdXJyV2lkdGggKiBzY2FsZSwgNTApO1xuICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB3aWR0aCkgLyB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBjdXJyZW50IHZpZXdcbiAgICBjb25zdCBjZW50ZXJYID0gY3VyckxlZnQgKyBjdXJyV2lkdGggLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSBjdXJyVG9wICsgY3VyckhlaWdodCAvIDI7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHBvc2l0aW9uIHRvIG1haW50YWluIGNlbnRlciBwb2ludFxuICAgIGNvbnN0IHRvcCA9IGNlbnRlclkgLSBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IGxlZnQgPSBjZW50ZXJYIC0gd2lkdGggLyAyO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgY3JvcCBhcmVhIGRpbWVuc2lvbnMgYW5kIHBvc2l0aW9uXG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcblxuICAgIC8vIFNjYWxlIGNyb3AgYXJlYSBkaW1lbnNpb25zIHByb3BvcnRpb25hbGx5XG4gICAgY3JvcFdpZHRoID0gY3JvcFdpZHRoICogc2NhbGU7XG4gICAgY3JvcEhlaWdodCA9IGNyb3BIZWlnaHQgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgY3JvcCBhcmVhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBpbWFnZVxuICAgIGNvbnN0IGNyb3BUb3BOZXcgPSB0b3AgKyAoY3JvcFRvcCAtIGN1cnJUb3ApICogc2NhbGU7XG4gICAgY29uc3QgY3JvcExlZnROZXcgPSBsZWZ0ICsgKGNyb3BMZWZ0IC0gY3VyckxlZnQpICogc2NhbGU7XG5cbiAgICAvLyBFbnN1cmUgY3JvcCBhcmVhIHN0YXlzIHdpdGhpbiBib3VuZHNcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSB3aWR0aDtcbiAgICBjb25zdCBtYXhDcm9wSGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNvbnN0IG1pbldpZHRoID0gMjA7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gMjA7XG5cbiAgICBjcm9wV2lkdGggPSBNYXRoLm1pbihjcm9wV2lkdGgsIG1heENyb3BXaWR0aCk7XG4gICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BXaWR0aCA9IE1hdGgubWF4KGNyb3BXaWR0aCwgbWluV2lkdGgpO1xuICAgIGNyb3BIZWlnaHQgPSBNYXRoLm1heChjcm9wSGVpZ2h0LCBtaW5IZWlnaHQpO1xuXG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICh0aGlzLnJhdGlvVmFsdWUoKSkge1xuICAgICAgY3JvcEhlaWdodCA9IGNyb3BXaWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWF4KGNyb3BIZWlnaHQsIG1pbkhlaWdodCk7XG4gICAgICBjcm9wV2lkdGggPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNsaXBwaW5nIHJlY3RhbmdsZVxuICAgIHRoaXMucmVjdENsaXAudXBkYXRlKChyZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWN0VG9wID0gY3JvcFRvcE5ldyAtIHRvcDtcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gY3JvcExlZnROZXcgLSBsZWZ0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVjdCxcbiAgICAgICAgdG9wOiByZWN0VG9wLFxuICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgcmlnaHQ6IHJlY3RMZWZ0ICsgY3JvcFdpZHRoLFxuICAgICAgICBib3R0b206IHJlY3RUb3AgKyBjcm9wSGVpZ2h0LFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgIC8vIFVwZGF0ZSBhbGwgZWxlbWVudHMgd2l0aCBuZXcgcG9zaXRpb25zIGFuZCBkaW1lbnNpb25zXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wOiBjcm9wVG9wTmV3LCBsZWZ0OiBjcm9wTGVmdE5ldywgd2lkdGg6IGNyb3BXaWR0aCwgaGVpZ2h0OiBjcm9wSGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyBjbGlwLCB0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJvdGF0ZUltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCddKTtcbiAgICAgIGNvbnN0IG9yaWdpbldpZHRoID0gdGhpcy5pbWFnZS53aWR0aDtcbiAgICAgIGNvbnN0IG9yaWdpbkhlaWdodCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuICAgICAgbGV0IHRvcCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCk7XG4gICAgICBsZXQgbGVmdCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQpO1xuICAgICAgbGV0IG5ld0hlaWdodCA9IHdpZHRoO1xuICAgICAgbGV0IG5ld1dpZHRoID0gaGVpZ2h0O1xuICAgICAgY29uc3QgcmF0aW8gPSBuZXdXaWR0aCAvIG5ld0hlaWdodDtcblxuICAgICAgY2FudmFzLmhlaWdodCA9IG9yaWdpbldpZHRoO1xuICAgICAgY2FudmFzLndpZHRoID0gb3JpZ2luSGVpZ2h0O1xuICAgICAgY3R4Py50cmFuc2xhdGUob3JpZ2luSGVpZ2h0IC8gMiwgb3JpZ2luV2lkdGggLyAyKTtcbiAgICAgIGN0eD8ucm90YXRlKE1hdGguUEkgLyAyKTtcbiAgICAgIGN0eD8uZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIC1vcmlnaW5XaWR0aCAvIDIsIC1vcmlnaW5IZWlnaHQgLyAyKTtcbiAgICAgIGNvbnN0IHNyYyA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgdGhpcy5pbWdTcmMuc2V0KHNyYyk7XG4gICAgICBuZXdXaWR0aCA9IE1hdGgubWF4KG5ld1dpZHRoLCBvcmlnaW5IZWlnaHQpO1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1pbihuZXdXaWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpKTtcbiAgICAgIG5ld0hlaWdodCA9IG5ld1dpZHRoIC8gcmF0aW87XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1heChuZXdIZWlnaHQsIG9yaWdpbldpZHRoKTtcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKG5ld0hlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIHJhdGlvO1xuICAgICAgdG9wID0gdG9wIC0gKG5ld0hlaWdodCAvIDIgLSBoZWlnaHQgLyAyKTtcbiAgICAgIGxlZnQgPSBsZWZ0IC0gKG5ld1dpZHRoIC8gMiAtIHdpZHRoIC8gMik7XG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgeyBzcmMsIHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLmdldE9yaWdpbmFsSW1hZ2VTaXplKCgpID0+IHtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS5zZXQoeyB3aWR0aDogdGhpcy5vcmlnaW5XaWR0aCgpLCBoZWlnaHQ6IHRoaXMub3JpZ2luSGVpZ2h0KCkgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0T3JpZ2luYWxJbWFnZVNpemUoY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQodGhpcy5pbWFnZS53aWR0aCk7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5pbWFnZS5oZWlnaHQpO1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hhbmdlZEltYWdlKHN0YXR1czogYm9vbGVhbikge1xuICAgIHRoaXMuY2hhbmdlZC5zZXQoc3RhdHVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRmxpcEltYWdlKGV2ZW50OiBFdmVudCwgbW9kZTogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlLmhlaWdodDtcblxuICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSh3aWR0aCwgMCk7XG4gICAgICAgICAgY3R4LnNjYWxlKC0xLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgaGVpZ2h0KTtcbiAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhVXJsID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICB0aGlzLmltZ1NyYy5zZXQoZGF0YVVybCk7XG4gICAgICB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LnNyYyA9IGRhdGFVcmw7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXN0b3JlSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWdTcmMuc2V0KHRoaXMuZGF0YVVybE9yaWdpbigpKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZ2V0T3JpZ2luYWxJbWFnZVNpemUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKGZhbHNlKTtcbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldCgnJyk7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyb3BJbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gb3JpZ2luV2lkdGggLyB3aWR0aDtcbiAgICAgICAgY29uc3QgcmVjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcbiAgICAgICAgY29uc3QgY3JvcFJlY3QgPSBnZXRDcm9wUmVjdEltYWdlKHJlY3RDbGlwLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZSk7XG5cbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGNyb3BSZWN0LmhlaWdodDtcbiAgICAgICAgY2FudmFzLndpZHRoID0gY3JvcFJlY3Qud2lkdGg7XG4gICAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldChjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQoY2FudmFzLndpZHRoKTtcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIGNyb3BSZWN0LmxlZnQsIGNyb3BSZWN0LnRvcCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCwgMCwgMCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVVybCA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhVXJsKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNhdmVGaWxlKGV2ZW50OiBFdmVudCwgbW9kZVNhdmU6IFRZUEVfTU9ERV9TQVZFKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuY3JvcEltYWdlKCk7XG4gICAgY29uc3QgZmlsZSA9IGNvbnZlcnRCYXNlNjRUb0Jsb2IoZGF0YVVybCk7XG5cbiAgICB0aGlzLm91dFNhdmVGaWxlLmVtaXQoeyBmaWxlOiBmaWxlLCB1cmw6IGRhdGFVcmwsIG1vZGU6IG1vZGVTYXZlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbG9zZShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQoeyBpc0NsaWNrQnV0dG9uQ2xvc2U6IHRydWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdENyb3BSYXRpb0l0ZW0oZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldChrZXkpO1xuICAgIHRoaXMuY2hhbmdlZC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5kcmFnR3JpZENyb3Auc2V0KHRydWUpO1xuICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc2l6ZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5yZXNpemVDb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZXNpemVDb21wb25lbnRSZWYgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudCk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBjb25zdCBzdWJzID0gaW5zdGFuY2Uub3V0Q2xvc2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgICAgIHRoaXMucmVzaXplQ29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgaW5zdGFuY2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICBpbnN0YW5jZS5taW1ldHlwZSA9IHRoaXMubWltZXR5cGUoKTtcbiAgICBpbnN0YW5jZS56SW5kZXggPSB0aGlzLnpJbmRleCgpO1xuICAgIHN1YnMuYWRkKFxuICAgICAgaW5zdGFuY2Uub3V0U2F2ZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucmVzaXplRGF0YS5zZXQoZXZlbnQpO1xuICAgICAgICB0aGlzLnNhdmVSZXNpemUoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBpbnN0YW5jZS5yZXNpemVEYXRhID0geyByYXRpbzogMTAwLCB3aWR0aDogdGhpcy5vcmlnaW5XaWR0aCgpLCBoZWlnaHQ6IHRoaXMub3JpZ2luSGVpZ2h0KCkgfTtcbiAgICBpbnN0YW5jZS5vcmlnaW5XaWR0aCA9IHRoaXMub3JpZ2luV2lkdGgoKTtcbiAgICBpbnN0YW5jZS5vcmlnaW5IZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlUmVzaXplKCkge1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgICBjYW52YXMud2lkdGggPSB0aGlzLnJlc2l6ZURhdGEoKS53aWR0aDtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQ7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzcmMgPSBnZXREYXRhVXJsKGNhbnZhcywgdGhpcy5taW1ldHlwZSgpLCB0aGlzLmltYWdlLnNyYyk7XG4gICAgICBjb25zdCBbY3VycldpZHRoLCBjdXJySGVpZ2h0LCBjdXJyVG9wLCBjdXJyTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgICBjb25zdCByYXRpbyA9IGN1cnJXaWR0aCAvIGN1cnJIZWlnaHQ7XG4gICAgICBsZXQgbmV3V2lkdGggPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpKTtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvO1xuXG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiByYXRpbztcbiAgICAgIE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLmhlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBjb25zdCB0b3AgPSBjdXJyVG9wICsgKGN1cnJIZWlnaHQgLSBuZXdIZWlnaHQpIC8gMjtcbiAgICAgIGNvbnN0IGxlZnQgPSBjdXJyTGVmdCArIChjdXJyV2lkdGggLSBuZXdXaWR0aCkgLyAyO1xuICAgICAgY29uc3QgbW92ZW1lbnRZID0gY3VyclRvcCAtIHRvcDtcbiAgICAgIGNvbnN0IG1vdmVtZW50WCA9IGN1cnJMZWZ0IC0gbGVmdDtcblxuICAgICAgdGhpcy5yZWN0Q2xpcC51cGRhdGUoKHJlY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdFRvcCA9IHJlY3QudG9wICsgbW92ZW1lbnRZO1xuICAgICAgICBjb25zdCByZWN0TGVmdCA9IHJlY3QubGVmdCArIG1vdmVtZW50WDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZWN0LFxuICAgICAgICAgIHRvcDogcmVjdFRvcCxcbiAgICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgICByaWdodDogcmVjdExlZnQgKyBuZXdXaWR0aCxcbiAgICAgICAgICBib3R0b206IHJlY3RUb3AgKyBuZXdIZWlnaHQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHNyYywgY2xpcCwgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5pbWdTcmMuc2V0KHNyYyk7XG4gICAgICB0aGlzLm9yaWdpbldpZHRoLnNldCh0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCk7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5yZXNpemVEYXRhKCkuaGVpZ2h0KTtcbiAgICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICAgIHRoaXMudXBkYXRlUmVjdENsaXBQb3MoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNyb3BXaWR0aCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnd2lkdGgnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ3JvcEhlaWdodCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnaGVpZ2h0Jyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDcm9wV2lkdGhPckhlaWdodChjcm9wQnk6ICd3aWR0aCcgfCAnaGVpZ2h0Jykge1xuICAgIHRoaXMucmF0aW9WYWx1ZS5zZXQodGhpcy5nZXRDcm9wUmF0aW9WYWx1ZSgpKTtcbiAgICBjb25zdCBbY3VyckltZ1dpZHRoLCBjdXJySW1nSGVpZ2h0LCBjdXJySW1nVG9wLCBjdXJySW1nTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSBjdXJySW1nTGVmdCArIGN1cnJJbWdXaWR0aCAtIGNyb3BMZWZ0O1xuICAgIGNvbnN0IG1heENyb3BIZWlnaHQgPSBjdXJySW1nSGVpZ2h0ICsgY3VyckltZ1RvcCAtIGNyb3BUb3A7XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLm9yaWdpbldpZHRoKCkgLyBjdXJySW1nV2lkdGg7XG4gICAgbGV0IGNyb3BWYWx1ZSA9IGdldCh0aGlzLmNyb3BTaXplLCBjcm9wQnkpIC8gcmF0aW87XG5cbiAgICBjcm9wVmFsdWUgPSBNYXRoLm1pbihjcm9wVmFsdWUsIGNyb3BCeSA9PT0gJ3dpZHRoJyA/IG1heENyb3BXaWR0aCA6IG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BWYWx1ZSA9IE1hdGgubWF4KDEsIGNyb3BWYWx1ZSk7XG4gICAgaWYgKHRoaXMucmF0aW9WYWx1ZSgpKSB7XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnd2lkdGgnKSB7XG4gICAgICAgIGNyb3BIZWlnaHQgPSBjcm9wVmFsdWUgLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKChjcm9wU2l6ZSkgPT4gKHsgLi4uY3JvcFNpemUsIGhlaWdodDogTWF0aC5yb3VuZChjcm9wSGVpZ2h0ICogcmF0aW8pIH0pKTtcbiAgICAgICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7Y3JvcEhlaWdodH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnaGVpZ2h0Jykge1xuICAgICAgICBjcm9wV2lkdGggPSBjcm9wVmFsdWUgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcFdpZHRoID0gTWF0aC5taW4oY3JvcFdpZHRoLCBtYXhDcm9wV2lkdGgpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wV2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoKGNyb3BTaXplKSA9PiAoeyAuLi5jcm9wU2l6ZSwgd2lkdGg6IE1hdGgucm91bmQoY3JvcFdpZHRoICogcmF0aW8pIH0pKTtcbiAgICAgICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjcm9wV2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNyb3BTaXplLnVwZGF0ZSgoY3JvcFNpemUpID0+ICh7IC4uLmNyb3BTaXplLCBbY3JvcEJ5XTogTWF0aC5yb3VuZChjcm9wVmFsdWUgKiByYXRpbykgfSkpO1xuICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlW2Nyb3BCeV0gPSBgJHtjcm9wVmFsdWV9cHhgO1xuICAgIGNvbnN0IGltYWdlUmVjdCA9IHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjcm9wUmVjdCA9IHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY3JvcFJlY3Q7XG4gICAgY29uc3QgbGVmdCA9IGNyb3BSZWN0LmxlZnQgLSBpbWFnZVJlY3QubGVmdDtcbiAgICBjb25zdCB0b3AgPSBjcm9wUmVjdC50b3AgLSBpbWFnZVJlY3QudG9wO1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHt0b3B9cHgsICR7cmlnaHR9cHgsICR7Ym90dG9tfXB4LCAke2xlZnR9cHgpYDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGVzRWxlbWVudHMoZWxlbWVudDogRWxlbWVudFJlZiwgc3R5bGVzOiBJU3R5bGVzLCBpc1VwZGF0ZVJlY3RDbGlwUG9zPzogYm9vbGVhbikge1xuICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldChzdHlsZXMsIGtleSBhcyBrZXlvZiBJU3R5bGVzKTtcbiAgICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0KGVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZSwga2V5LCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gYCR7dmFsdWV9cHhgIDogdmFsdWUpO1xuICAgIH0pO1xuICAgIGlmIChpc1VwZGF0ZVJlY3RDbGlwUG9zKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy5yZXNpemVDb21wb25lbnRSZWYpO1xuICB9XG59XG4iLCI8bGlic191aS1jb21wb25lbnRzLW1vZGFsXG4gIFt3aWR0aF09XCInY2FsYygxMDB2dyAtIDQwMHB4KSdcIlxuICBbaGVpZ2h0XT1cIidjYWxjKDEwMHZoIC0gMTAwcHgpJ1wiXG4gIFttaW5XaWR0aF09XCInMTIwMHB4J1wiXG4gIFtoZWFkZXJDb25maWddPVwieyBpZ25vcmVIZWFkZXJUaGVtZTogdHJ1ZSwgcmVtb3ZlQnV0dG9uQ2xvc2U6IHRydWUgfVwiXG4gIFtib2R5Q29uZmlnXT1cInsgY2xhc3NJbmNsdWRlOiAnIXAtMCcsIHNjcm9sbE92ZXJsYXlPcHRpb25zOiB7IHNjcm9sbFg6ICdoaWRkZW4nLCBzY3JvbGxZOiAnaGlkZGVuJyB9IH1cIlxuICBbZm9vdGVyQ29uZmlnXT1cInsgaGlkZGVuOiB0cnVlIH1cIlxuICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgW2J1dHRvbnNGb290ZXJdPVwiW11cIlxuICBbbW9kZV09XCInY2VudGVyJ1wiPlxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1tb2RhbC1oZWFkZXItY3VzdG9tIHctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlIG14LVsyNHB4XSBoLVsxNnB4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGxpYnMtdWktZm9udC1oNHMgYWJzb2x1dGVcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbY29uZmlnXT1cInsgekluZGV4OiB6SW5kZXgoKSB9XCI+XG4gICAgICAgICAge3sgJ2kxOG5fZWRpdF9maWxlX25hbWUnIHwgdHJhbnNsYXRlOiB7IGZpbGVfbmFtZTogbmFtZUZpbGUoKSB9IH19XG4gICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIEBpZiAobW9kZVNob3dCdXR0b24oKSA9PT0gJ3NhdmUtZmlsZScpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fY2FuY2VsJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0gbXItWzE2cHhdJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbG9zZSgkZXZlbnQpXCIgLz5cblxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJtci1bMjRweF1cIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9zYXZlJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwgJ3NhdmUtZmlsZScpXCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIidpMThuX3NhdmVfdG9fbmV3X2ZpbGUnXCJcbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidteC1bMTZweF0gcHktWzZweF0gcHgtWzEycHhdJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpIHx8ICFjaGFuZ2VkKClcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2F2ZUZpbGUoJGV2ZW50LCAnc2F2ZS1hcGktYXMtbmV3LWZpbGUnKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXNlY29uZGFyeSdcIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9zYXZlJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncHktWzZweF0gcHgtWzEycHhdJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpIHx8ICFjaGFuZ2VkKClcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2F2ZUZpbGUoJGV2ZW50LCAnc2F2ZS1hcGknKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLVsxMnB4XSBsaWJzLXVpLWJvcmRlci1sZWZ0LWdlbmVyYWwgbXgtWzE2cHhdXCI+PC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBjbGFzcz1cIm1yLVsyNHB4XVwiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncC1bNnB4XSdcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQtaG92ZXItZGFuZ2VyJ1wiXG4gICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKClcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuX2V4aXRfZWRpdF9tb2RlJywgekluZGV4OiB6SW5kZXgoKSB9IH1cIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY2xvc2UnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsb3NlKCRldmVudClcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbW9kYWwtYm9keS1jdXN0b20gaC1mdWxsIHctZnVsbCBmbGV4XCI+XG4gICAgPGRpdlxuICAgICAgI2ltYWdlRWRpdG9yQ29udGFpbmVyXG4gICAgICBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgYmctWyNlNmU3ZWFdIGJvcmRlci1yYWRpdXMtYm90dG9tLWxlZnQtOHB4IHAtWzMycHhdIGxpYnMtdWktaW5wdXQtaW1hZ2UtZWRpdG9yLWNvbnRhaW5lci1sZWZ0XCI+XG4gICAgICBAaWYgKGxvYWRpbmdJbWFnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIGJnLVsjZTZlN2VhXSB0b3AtMCBsZWZ0LTAgei1bNV1cIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIHRvcC0wIGxlZnQtWzMycHhdIHotWzFdXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdy1bMzJweF0gaC1mdWxsIGJnLVsjZTZlN2VhYjhdIGxlZnQtMCB0b3AtMCB6LVsxXSByb3VuZGVkLWJsLVs4cHhdXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdy1bMzJweF0gaC1mdWxsIGJnLVsjZTZlN2VhYjhdIHJpZ2h0LTAgdG9wLTAgei1bMV1cIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIGJvdHRvbS0wIGxlZnQtWzMycHhdIHotWzFdXCI+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICNpbWFnZUNvbnRhaW5lclxuICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcm91bmRlZC1ibC1bOHB4XSBtaW4taC0wXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjY2lyY2xlVExcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICNjaXJjbGVUUlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI2NpcmNsZUJMXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXVwiXG4gICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhZHJhZ0dyaWRDcm9wKClcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4XT1cImRyYWdHcmlkQ3JvcCgpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQ2lyY2xlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjY2lyY2xlQlJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICNpbWFnZU9yaWdpblxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgYm9yZGVyLVs0cHhdIGJvcmRlci1bIzhlNjFlZV0gcm91bmRlZC1bNHB4XSB0b3AtWy0xMDAwcHhdIGxlZnQtWy0xMDAwcHhdXCJcbiAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgW3NyY109XCJpbWdTcmMoKVwiXG4gICAgICAgICAgKGxvYWQpPVwiaGFuZGxlckltYWdlTG9hZGVkKClcIlxuICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICNpbWFnZUNsaXBcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIHRvcC1bLTEwMDBweF0gbGVmdC1bLTEwMDBweF1cIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBbc3JjXT1cImltZ1NyYygpXCJcbiAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBib3R0b20tMCBiZy1bI2U2ZTdlYWI4XVwiPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI2Nyb3BBcmVhXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSBib3JkZXItWzRweF0gYm9yZGVyLVsjOGU2MWVlXSByb3VuZGVkLVs0cHhdXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2Nyb3BUTFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIGxlZnQtWy0xOHB4XSB0b3AtWy0xN3B4XSBjdXJzb3ItbndzZS1yZXNpemVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNjcm9wQkxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSBsZWZ0LVstMTdweF0gYm90dG9tLVstMThweF0gY3Vyc29yLW5lc3ctcmVzaXplIHJvdGF0ZS1bMjcwZGVnXVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2Nyb3BUUlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIHJpZ2h0LVstMTdweF0gdG9wLVstMTdweF0gY3Vyc29yLW5lc3ctcmVzaXplIHJvdGF0ZS1bOTBkZWddXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcEJSXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gcmlnaHQtWy0xOHB4XSBib3R0b20tWy0xN3B4XSBjdXJzb3ItbndzZS1yZXNpemUgcm90YXRlLVsxODBkZWddXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcExpbmVWTFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIHctWzEycHhdIGxlZnQtWy02cHhdIHRvcC0wIGJvdHRvbS0wIGN1cnNvci1ldy1yZXNpemVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2Nyb3BMaW5lVlJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSB3LVsxMnB4XSByaWdodC1bLTZweF0gdG9wLTAgYm90dG9tLTAgY3Vyc29yLWV3LXJlc2l6ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcExpbmVIVFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIGgtWzEycHhdIGxlZnQtMCB0b3AtWy02cHhdIHJpZ2h0LTAgY3Vyc29yLW5zLXJlc2l6ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcExpbmVIQlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIGgtWzEycHhdIGxlZnQtMCByaWdodC0wIGJvdHRvbS1bLTZweF0gY3Vyc29yLW5zLXJlc2l6ZVwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMXB4XSB0b3AtMCBsZWZ0LTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzFweF0gYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsxcHhdIHRvcC0wIGxlZnQtMCBib3R0b20tMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIHctWzFweF0gdG9wLTAgYm90dG9tLTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzJweF0gdG9wLVszMyVdIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMnB4XSB0b3AtWzY2JV0gbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzMzJV1cIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzY2JV1cIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctWzMyMHB4XSBzaHJpbmstMCBwLVsxNnB4XSBiZy1bI2ZmZmZmZl0gcm91bmRlZC1ici1bOHB4XSB6LVsyXSBsaWJzLXVpLWlucHV0LWltYWdlLWVkaXRvci1jb250YWluZXItcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItWzE2cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCI+e3sgJ2kxOG5fY3V0dGluZ19yYXRpbycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tcmVmcmVzaCdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3AtWzZweF0gbXItWzhweF0nXCJcbiAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9yZXN0b3JlX3RoZV9vcmlnaW5hbF9zdGF0ZScsIHpJbmRleDogekluZGV4KCkgfSB9XCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZXN0b3JlSW1hZ2UoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1bMTZweF0gbGlicy11aS1pbWFnZS1lZGl0b3ItZWRpdC1kaXNwbGF5LWdyaWQtZ2FwLTE2XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgY3JvcFJhdGlvSXRlbXMoKTsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCByZXF1aXJlZENyb3BGb2xsb3dSYXRpbygpXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIml0ZW0uaWNvbiArICcgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJpdGVtLmtleSA9PT0gY3JvcFJhdGlvSXRlbVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNlbGVjdENyb3BSYXRpb0l0ZW0oJGV2ZW50LCBpdGVtLmtleSlcIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgICAge3sgKGl0ZW0ua2V5ID09PSAnZnJlZScgPyAnaTE4bl9jdXN0b20nIDogaXRlbS5rZXkpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItWzE2cHhdIGZsZXhcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgICAgICBjbGFzcz1cIm1yLVsxNnB4XVwiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbGFiZWxDb25maWddPVwieyBsYWJlbExlZnQ6ICdpMThuX3dpZHRoJywgY2xhc3NJbmNsdWRlOiAnbWItWzRweF0nLCBsYWJlbExlZnRDbGFzczogJ2xpYnMtdWktZm9udC1oN3InIH1cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIid3aWR0aCdcIlxuICAgICAgICAgIFsoaXRlbSldPVwiY3JvcFNpemVcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7IGlkOiAncHgnLCBsYWJlbDogJ3B4JyB9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwib3JpZ2luV2lkdGgoKVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNyb3BXaWR0aCgpXCIgLz5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgICAgICBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJ7IGxhYmVsTGVmdDogJ2kxOG5fbGVuZ3RoJywgY2xhc3NJbmNsdWRlOiAnbWItWzRweF0nLCBsYWJlbExlZnRDbGFzczogJ2xpYnMtdWktZm9udC1oN3InIH1cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIidoZWlnaHQnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cImNyb3BTaXplXCJcbiAgICAgICAgICBbdW5pdHNSaWdodF09XCJbeyBpZDogJ3B4JywgbGFiZWw6ICdweCcgfV1cIlxuICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCIncHgnXCJcbiAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm9yaWdpbkhlaWdodCgpXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyQ3JvcEhlaWdodCgpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNG0gbWItWzE2cHhdXCI+e3sgJ2kxOG5fcm90YXRlX3Bob3RvcycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGxpYnMtdWktaW1hZ2UtZWRpdG9yLWVkaXQtZGlzcGxheS1ncmlkLWdhcC0xNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJvdGF0ZS1pbWFnZS1vdXRsaW5lICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSb3RhdGVJbWFnZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcm90YXRlX25pbmV0eV9kZWdyZWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWZsaXAtdmVydGljYWwgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckZsaXBJbWFnZSgkZXZlbnQsICd2ZXJ0aWNhbCcpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fdmVydGljYWxfZmxpcCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidsYXJnZSdcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1mbGlwLWhvcml6b250YWwgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckZsaXBJbWFnZSgkZXZlbnQsICdob3Jpem9udGFsJylcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZyIHRleHQtWyM2YTczODNdIG10LVs0cHhdXCI+XG4gICAgICAgICAgICB7eyAnaTE4bl9ob3Jpem9udGFsX2ZsaXAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tc2NhbGUgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclJlc2l6ZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcmVzaXplJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbGlic191aS1jb21wb25lbnRzLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI3N2Z0Fycm93PlxuICA8c3ZnXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgd2lkdGg9XCI0MFwiXG4gICAgaGVpZ2h0PVwiNDBcIlxuICAgIHZpZXdCb3g9XCIwIDAgNDAgNDBcIlxuICAgIGZpbGw9XCJub25lXCI+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMzMuNjk4NyAxNC42OTY5TDE4LjMzMDkgMTQuNjk2OUMxNi41MTYgMTQuNjk2OSAxNS4wMzExIDE2LjE4MTggMTUuMDMxMSAxNy45OTY3TDE1LjAzMTEgMzMuMzY0NVwiXG4gICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICBzdHJva2Utd2lkdGg9XCI1LjgzMzMzXCJcbiAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIlxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdmdDaXJjbGU+XG4gIDxzdmdcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICB3aWR0aD1cIjE1XCJcbiAgICBoZWlnaHQ9XCIxNVwiXG4gICAgdmlld0JveD1cIjAgMCAxNSAxNVwiXG4gICAgZmlsbD1cIm5vbmVcIj5cbiAgICA8Y2lyY2xlXG4gICAgICBjeD1cIjcuNVwiXG4gICAgICBjeT1cIjcuNVwiXG4gICAgICByPVwiNy41XCJcbiAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
796
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ltYWdlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFnQixVQUFVLEVBQWMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFC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SSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDaEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzFGLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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QUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQXozQlUsb0NBQW9DLGtCQThEZiw2QkFBNkI7NEZBOURsRCxvQ0FBb0MsZ3NHQzVCakQscTVhQTBUQSxvMUNEaFNZLGdCQUFnQixtSkFBRSxlQUFlLDRGQUFFLGdDQUFnQyxvZ0JBQUUsOEJBQThCLCt1QkFBRSxvQ0FBb0MsczFEQUFFLHNDQUFzQyxzakJBQUUsZ0NBQWdDOzs0RkFFbE4sb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLGlDQUFpQyxtQkFHMUIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZ0NBQWdDLEVBQUUsOEJBQThCLEVBQUUsb0NBQW9DLEVBQUUsc0NBQXNDLEVBQUUsZ0NBQWdDLENBQUM7OzBCQWdFak4sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgSW5qZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPcHRpb25hbCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbW9kYWwnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNwaW5uZXInO1xuaW1wb3J0IHsgSUFzcGVjdFJhdGlvLCBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgY29udmVydEJhc2U2NFRvQmxvYiwgZ2V0LCBpc05pbCwgTElOS19JTUFHRV9FUlJPUl9UT0tFTl9JTkpFQ1QsIHNldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjcm9wUmF0aW9uSXRlbXMsIGdldENyb3BSZWN0SW1hZ2UsIGdldERhdGFVcmwsIGdldFN0eWxlc09mRWxlbWVudCwgZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93IH0gZnJvbSAnLi9kZWZpbmVzL2ltYWdlLWVkaXRvci5kZWZpbmUnO1xuaW1wb3J0IHsgSUltYWdlRWRpdG9yRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNyb3BSYXRpb0l0ZW0sIElDcm9wU2l6ZSwgSVJlY3RDbGlwLCBJUmVzaXplRGF0YSwgSVNhdmVGaWxlLCBJU3RhcnRNb3VzZURpbSwgSVN0eWxlcywgTU9ERV9FRElULCBUWVBFX01PREVfU0FWRSwgVFlQRV9SRVNJWkVfU1RBVEUgfSBmcm9tICcuL2ludGVyZmFjZXMvaW1hZ2UtZWRpdG9yLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JSZXNpemVDb21wb25lbnQgfSBmcm9tICcuL3Jlc2l6ZS9yZXNpemUuY29tcG9uZW50JztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbWFnZV9lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2ltYWdlLWVkaXRvci5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgVHJhbnNsYXRlTW9kdWxlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdJbWFnZSA9IHNpZ25hbCh0cnVlKTtcbiAgcHJvdGVjdGVkIGNoYW5nZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgb3JpZ2luV2lkdGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIG9yaWdpbkhlaWdodCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgY3JvcFJhdGlvSXRlbXMgPSBzaWduYWw8QXJyYXk8SUNyb3BSYXRpb0l0ZW0+Pihjcm9wUmF0aW9uSXRlbXMoKSk7XG4gIHByb3RlY3RlZCBjcm9wUmF0aW9JdGVtU2VsZWN0ZWQgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBjcm9wU2l6ZSA9IHNpZ25hbDxJQ3JvcFNpemU+KHsgd2lkdGg6IDIwLCBoZWlnaHQ6IDIwIH0pO1xuICBwcm90ZWN0ZWQgcmVzaXplRGF0YSA9IHNpZ25hbDxJUmVzaXplRGF0YT4oeyByYXRpbzogMTAwLCB3aWR0aDogNjAwLCBoZWlnaHQ6IDgwMCB9KTtcbiAgcHJvdGVjdGVkIGRyYWdHcmlkQ3JvcCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICBwcml2YXRlIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICBwcml2YXRlIGNvbnRhaW5lckhlaWdodCA9IHNpZ25hbCg4MDApO1xuICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gc2lnbmFsKDEyMDApO1xuICBwcml2YXRlIGltZ0NvbnRhaW5lclJlY3QgPSBzaWduYWw8SUJvdW5kaW5nQ2xpZW50UmVjdD4oeyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG4gIHByaXZhdGUgcmVjdENsaXAgPSBzaWduYWw8SVJlY3RDbGlwPih7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSByZXNpemVTdGF0ZSA9IHNpZ25hbDxUWVBFX1JFU0laRV9TVEFURT4oJ25vbmUnKTtcbiAgcHJpdmF0ZSBtb3ZlU3RhdGUgPSBzaWduYWw8J2NsaXAnIHwgJ2ltYWdlJyB8ICdub25lJz4oJ25vbmUnKTtcbiAgcHJpdmF0ZSBzdGFydE1vdXNlRGltID0gc2lnbmFsPElTdGFydE1vdXNlRGltPih7IGNsaWVudFg6IDAsIGNsaWVudFk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCwgaW1hZ2VUb3A6IDAsIGltYWdlTGVmdDogMCwgaW1hZ2VXaWR0aDogMCwgaW1hZ2VIZWlnaHQ6IDAgfSk7XG4gIHByaXZhdGUgZGF0YVVybE9yaWdpbiA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSByYXRpb1ZhbHVlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWluSGVpZ2h0ID0gMjA7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWluV2lkdGggPSAyMDtcbiAgcHJpdmF0ZSByZXNpemVDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yUmVzaXplQ29tcG9uZW50PjtcblxuICByZWFkb25seSBtb2RlU2hvd0J1dHRvbiA9IGlucHV0PE1PREVfRURJVD4oJ3NhdmUtZmlsZScpO1xuICByZWFkb25seSBtaW1ldHlwZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgaW1nU3JjID0gbW9kZWwucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvcmlnaW5VcmwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG5hbWVGaWxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYXNab29tID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhc3BlY3RSYXRpbyA9IGlucHV0PElBc3BlY3RSYXRpbz4oKTtcbiAgcmVhZG9ubHkgcmVxdWlyZWRDcm9wRm9sbG93UmF0aW8gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaW1hZ2VPcmlnaW4gPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlT3JpZ2luJyk7XG4gIHJlYWRvbmx5IGltYWdlQ2xpcCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDbGlwJyk7XG4gIHJlYWRvbmx5IGltYWdlRWRpdG9yQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdpbWFnZUVkaXRvckNvbnRhaW5lcicpO1xuICByZWFkb25seSBpbWFnZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDb250YWluZXInKTtcbiAgcmVhZG9ubHkgY3JvcEFyZWEgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BBcmVhJyk7XG4gIHJlYWRvbmx5IGNyb3BUTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRMJyk7XG4gIHJlYWRvbmx5IGNyb3BCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJMJyk7XG4gIHJlYWRvbmx5IGNyb3BCUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJSJyk7XG4gIHJlYWRvbmx5IGNyb3BUUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRSJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lVkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lVkwnKTtcbiAgcmVhZG9ubHkgY3JvcExpbmVWUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcExpbmVWUicpO1xuICByZWFkb25seSBjcm9wTGluZUhUID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZUhUJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lSEIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lSEInKTtcbiAgcmVhZG9ubHkgY2lyY2xlVEwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZVRMJyk7XG4gIHJlYWRvbmx5IGNpcmNsZVRSID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVUUicpO1xuICByZWFkb25seSBjaXJjbGVCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY2lyY2xlQkwnKTtcbiAgcmVhZG9ubHkgY2lyY2xlQlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZUJSJyk7XG5cbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8eyBpc0NsaWNrQnV0dG9uQ2xvc2U6IGJvb2xlYW4gfT4oKTtcbiAgcmVhZG9ubHkgb3V0U2F2ZUZpbGUgPSBvdXRwdXQ8SVNhdmVGaWxlPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbWFnZUVkaXRvckZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCkgcHJpdmF0ZSBsaW5rSW1hZ2VFcnJvcjogc3RyaW5nKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBhc3BlY3RSYXRpb0ZvdW5kID0gdGhpcy5hc3BlY3RSYXRpbygpPy5rZXkgPyB0aGlzLmNyb3BSYXRpb0l0ZW1zKCkuZmluZCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IHRoaXMuYXNwZWN0UmF0aW8oKT8ua2V5KSA6IHRoaXMuY3JvcFJhdGlvSXRlbXMoKVswXTtcblxuICAgIGlmIChhc3BlY3RSYXRpb0ZvdW5kKSB7XG4gICAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG5cbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldChhc3BlY3RSYXRpb0ZvdW5kPy5rZXkpO1xuICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTW9kYWxTaXplKCk7XG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICAgIHRoaXMuaW5pdE1vdXNlRXZlbnQoKTtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICB9XG5cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElJbWFnZUVkaXRvckZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JvcEltYWdlOiB0aGlzLmNyb3BJbWFnZS5iaW5kKHRoaXMpLFxuICAgICAgc2V0TG9hZGluZ1N0YXRlOiAobG9hZGluZzogYm9vbGVhbikgPT4gdGhpcy5sb2FkaW5nLnNldChsb2FkaW5nKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUxvYWRlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTW9kYWxTaXplKCk7XG4gICAgICB0aGlzLmxvYWRpbmdJbWFnZS5zZXQoZmFsc2UpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCkge1xuICAgIGNvbnNvbGUubG9nKCdlJywgZSk7XG4gICAgKGUgYXMgSUV2ZW50KS50YXJnZXQuc3JjID0gdGhpcy5saW5rSW1hZ2VFcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kYWxTaXplKCkge1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwMDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gNDAwO1xuXG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQuc2V0KG1heEhlaWdodCAtIDEyNCk7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5zZXQobWF4V2lkdGggLSAzODQpO1xuICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhKCkge1xuICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgIHRoaXMuaW1hZ2Uuc2V0QXR0cmlidXRlKCdjcm9zc29yaWdpbicsICdhbm9ueW1vdXMnKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5pbWFnZS5oZWlnaHQpO1xuICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQodGhpcy5pbWFnZS53aWR0aCk7XG5cbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpPy5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgICB0aGlzLmRhdGFVcmxPcmlnaW4uc2V0KGdldERhdGFVcmwodGhpcy5jYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpKTtcbiAgICAgIHRoaXMuaW1nU3JjLnNldCh0aGlzLmRhdGFVcmxPcmlnaW4oKSk7XG4gICAgfTtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNb3VzZUV2ZW50KCkge1xuICAgIGNvbnN0IG1vdXNlVXAgPSB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IGRvY3VtZW50IH0sICdtb3VzZXVwJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgdW5kZWZpbmVkLCAoKSA9PiB0aGlzLmhhbmRsZXJNb3VzZXVwKCkpO1xuICAgIGNvbnN0IG1vdXNlTW92ZSA9IHRoaXMuaW5pdEV2ZW50KHsgbmF0aXZlRWxlbWVudDogZG9jdW1lbnQgfSwgJ21vdXNlbW92ZScsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0pLnBpcGUodGFrZVVudGlsKG1vdXNlVXApKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuaW1hZ2VFZGl0b3JDb250YWluZXIoKSwgJ3doZWVsJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlIH0sIHVuZGVmaW5lZCwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZXdoZWVsKGUpKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IHdpbmRvdyB9LCAncmVzaXplJywge30sIHVuZGVmaW5lZCwgKCkgPT4gdGhpcy51cGRhdGVNb2RhbFNpemUoKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5pbWFnZUNvbnRhaW5lcigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGUpKS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVEwnKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEJMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnQkwnKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEJSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnQlInKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVFInKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVWTCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ1ZMJyk7XG4gICAgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BMaW5lVlIoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdWUicpO1xuICAgIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZUhUKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnSFQnKTtcbiAgICB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVIQigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ0hCJyk7XG4gICAgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BBcmVhKCksICdtb3VzZWRvd24nLCB7fSwgdW5kZWZpbmVkLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlZG93bkNyb3BBcmVhKGUpKS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RXZlbnQoZWxlbWVudDogRWxlbWVudFJlZiwgZXZlbnROYW1lOiBzdHJpbmcsIGZsYWc6IHsgY2FsbFN0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW47IGNhbGxQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW4gfSwgb2JzTWVyZ2U/OiBPYnNlcnZhYmxlPEV2ZW50PiwgY2FsbGJhY2s/OiAoZTogRXZlbnQpID0+IHZvaWQpOiBPYnNlcnZhYmxlPEV2ZW50PiB7XG4gICAgY29uc3Qgb2JzID0gZnJvbUV2ZW50PEV2ZW50PihlbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSkucGlwZShcbiAgICAgIHRhcCgoZTogRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGZsYWcuY2FsbFN0b3BQcm9wYWdhdGlvbiAmJiBlPy5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmbGFnLmNhbGxQcmV2ZW50RGVmYXVsdCAmJiBlPy5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICk7XG5cbiAgICBpZiAob2JzTWVyZ2UpIHtcbiAgICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gb2JzTWVyZ2UpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVPcmlnaW5JbWFnZVNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gdGhpcy5vcmlnaW5XaWR0aCgpO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIGNvbnN0IHJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XG5cbiAgICBpZiAod2lkdGggPj0gaGVpZ2h0KSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHRoaXMuY29udGFpbmVyV2lkdGgoKSwgd2lkdGgpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4od2lkdGggLyByYXRpbywgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICB3aWR0aCA9IGhlaWdodCAqIHJhdGlvO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLmNvbnRhaW5lckhlaWdodCgpLCBoZWlnaHQpO1xuICAgICAgd2lkdGggPSBoZWlnaHQgKiByYXRpbztcbiAgICB9XG4gICAgdGhpcy5zZXRJbWFnZVBvc2l0aW9uKHdpZHRoLCBoZWlnaHQpO1xuICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEltYWdlUG9zaXRpb24od2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5jb250YWluZXJXaWR0aCgpIC8gMiAtIHdpZHRoIC8gMjtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmNvbnRhaW5lckhlaWdodCgpIC8gMiAtIGhlaWdodCAvIDI7XG4gICAgY29uc3Qgc3R5bGVzID0geyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQsIGRpc3BsYXk6ICdibG9jaycgfTtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCBzdHlsZXMpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgc3R5bGVzKTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHN0eWxlcyk7XG4gIH1cblxuICBwcml2YXRlIHNldENpcmNsZVBvc2l0aW9uKHN0eWxlczogSVN0eWxlcykge1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUTCgpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgLSA1IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUUigpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgKyAoc3R5bGVzLndpZHRoIHx8IDApIC0gMTAgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJMKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSAtIDUgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJSKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSArIChzdHlsZXMud2lkdGggfHwgMCkgLSAxMCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ3JvcEFyZWFQb3MoKSB7XG4gICAgY29uc3QgW2ltZ1RvcCwgaW1nTGVmdCwgaW1nV2lkdGgsIGltZ0hlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQsIFsnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnLCAnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuXG4gICAgY29uc3QgcmVjdEltZzogSUJvdW5kaW5nQ2xpZW50UmVjdCA9IHtcbiAgICAgIHRvcDogTWF0aC5tYXgoMCwgaW1nVG9wKSxcbiAgICAgIGxlZnQ6IE1hdGgubWF4KDAsIGltZ0xlZnQpLFxuICAgICAgd2lkdGg6IGltZ1dpZHRoLFxuICAgICAgaGVpZ2h0OiBpbWdIZWlnaHQsXG4gICAgfTtcblxuICAgIHJlY3RJbWcud2lkdGggPSBNYXRoLm1pbihpbWdXaWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpIC0gaW1nTGVmdCk7XG4gICAgaWYgKGltZ0xlZnQgPCAwKSB7XG4gICAgICByZWN0SW1nLndpZHRoID0gTWF0aC5taW4oaW1nV2lkdGggKyBpbWdMZWZ0LCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgIH1cbiAgICByZWN0SW1nLmhlaWdodCA9IE1hdGgubWluKGltZ0hlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSAtIGltZ1RvcCk7XG4gICAgaWYgKGltZ1RvcCA8IDApIHtcbiAgICAgIHJlY3RJbWcuaGVpZ2h0ID0gTWF0aC5taW4oaW1nVG9wICsgaW1nSGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICB9XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICghdGhpcy5yYXRpb1ZhbHVlKCkpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCByZWN0SW1nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgd2lkdGggPSByZWN0SW1nLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB3aWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuXG4gICAgd2lkdGggPSBNYXRoLm1pbihyZWN0SW1nLndpZHRoLCB3aWR0aCk7XG4gICAgaGVpZ2h0ID0gd2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICBoZWlnaHQgPSBNYXRoLm1pbihyZWN0SW1nLmhlaWdodCwgaGVpZ2h0KTtcbiAgICB3aWR0aCA9IGhlaWdodCAqIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgIGNvbnN0IHRvcCA9IHJlY3RJbWcudG9wICsgKHJlY3RJbWcuaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgbGVmdCA9IHJlY3RJbWcubGVmdCArIChyZWN0SW1nLndpZHRoIC0gd2lkdGgpIC8gMjtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3JvcFJhdGlvVmFsdWUoKSB7XG4gICAgY29uc3QgY3JvcFJhdGlvID0gdGhpcy5jcm9wUmF0aW9JdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSB0aGlzLmNyb3BSYXRpb0l0ZW1TZWxlY3RlZCgpKTtcblxuICAgIGlmICghY3JvcFJhdGlvPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNwZWN0UmF0aW8oKT8udmFsdWUgfHwgdGhpcy5vcmlnaW5XaWR0aCgpIC8gdGhpcy5vcmlnaW5IZWlnaHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JvcFJhdGlvLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZWN0Q2xpcFBvcygpIHtcbiAgICBjb25zdCByZWFjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHtyZWFjdENsaXAudG9wfXB4LCAke3JlYWN0Q2xpcC5yaWdodH1weCwgJHtyZWFjdENsaXAuYm90dG9tfXB4LCAke3JlYWN0Q2xpcC5sZWZ0fXB4KWA7XG4gIH1cblxuICBwcml2YXRlIGdldFJlY3RDbGlwSW1hZ2UoKSB7XG4gICAgY29uc3QgaW1hZ2VSZWN0ID0gdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmICghaW1hZ2VSZWN0LndpZHRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWN0Q2xpcCgpO1xuICAgIH1cbiAgICBjb25zdCBjcm9wUmVjdCA9IHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5yb3VuZChjcm9wUmVjdC53aWR0aCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5yb3VuZChjcm9wUmVjdC5oZWlnaHQpO1xuICAgIGNvbnN0IGxlZnQgPSBjcm9wUmVjdC5sZWZ0IC0gaW1hZ2VSZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gY3JvcFJlY3QudG9wIC0gaW1hZ2VSZWN0LnRvcDtcbiAgICBjb25zdCByaWdodCA9IE1hdGgucm91bmQobGVmdCArIHdpZHRoKTtcbiAgICBjb25zdCBib3R0b20gPSBNYXRoLnJvdW5kKHRvcCArIGhlaWdodCk7XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLm9yaWdpbldpZHRoKCkgLyBpbWFnZVJlY3Qud2lkdGg7XG5cbiAgICB0aGlzLnJlY3RDbGlwLnNldCh7IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLmNyb3BTaXplLnNldCh7XG4gICAgICBoZWlnaHQ6IHRvcCA+PSAwID8gTWF0aC5yb3VuZCgoYm90dG9tIC0gdG9wKSAqIHJhdGlvKSA6IE1hdGguZmxvb3IoKGJvdHRvbSAtIHRvcCkgKiByYXRpbyksXG4gICAgICB3aWR0aDogdG9wID49IDAgPyBNYXRoLnJvdW5kKChyaWdodCAtIGxlZnQpICogKHRoaXMucmF0aW9WYWx1ZSgpID8/IDEpICogcmF0aW8pIDogTWF0aC5mbG9vcigocmlnaHQgLSBsZWZ0KSAqICh0aGlzLnJhdGlvVmFsdWUoKSA/PyAxKSAqIHJhdGlvKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnJlY3RDbGlwKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJNb3VzZW1vdmUoZTogYW55KSB7XG4gICAgY29uc3QgdHlwZVN0YXRlID0gWydCTCcsICdUTCcsICdUUicsICdCUicsICdWTCcsICdWUicsICdIVCcsICdIQiddO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBgcmVzaXplQ3JvcEZvbGxvdyR7dGhpcy5yZXNpemVTdGF0ZSgpfURpcmA7IC8vIHJlc2l6ZUNyb3BGb2xsb3dCTERpciwgcmVzaXplQ3JvcEZvbGxvd1RMRGlyLCByZXNpemVDcm9wRm9sbG93VFJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dCUkRpciwgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyLCByZXNpemVDcm9wRm9sbG93VlJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dIVERpciwgcmVzaXplQ3JvcEZvbGxvd0hCRGlyXG5cbiAgICBpZiAodHlwZVN0YXRlLmluY2x1ZGVzKHRoaXMucmVzaXplU3RhdGUoKSkpIHtcbiAgICAgICh0aGlzIGFzIGFueSlbbWV0aG9kTmFtZV0oZSk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb3ZlU3RhdGUoKSkge1xuICAgICAgY2FzZSAnY2xpcCc6XG4gICAgICAgIHRoaXMubW92ZUNsaXBBcmVhKGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICB0aGlzLm1vdmVJbWFnZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dCTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogLTEsIGhlaWdodDogMSwgbGVmdDogMSwgdG9wOiAwIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyB0aGlzLnJhdGlvVmFsdWUoKSAqIG1vbWVudFkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUUkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlV2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IC0xLCBsZWZ0OiAwLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBoZWlnaHQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93QlJEaXIoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IHRoaXMucmF0aW9WYWx1ZSgpID8gbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IDAsIHRvcDogMCB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFggLyB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZSRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRYIC8gdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wIH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogLTEsIGxlZnQ6IDAsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIVERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIQkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IC0xLCB0b3A6IDAgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgaGVpZ2h0LCBsZWZ0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcml2YXRlIGdldFJlY3RSZXNpemVDcm9wRm9sbG93KHJhdGlvOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0sIG1vbWVudFg6IG51bWJlciwgbW9tZW50WTogbnVtYmVyKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIG1vbWVudFggKiByYXRpby53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgKyBtb21lbnRZICogcmF0aW8uaGVpZ2h0O1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFkgKiByYXRpby50b3A7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYICogcmF0aW8ubGVmdDtcblxuICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V1cCgpIHtcbiAgICB0aGlzLmltYWdlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldCgnbm9uZScpO1xuICAgIHRoaXMubW92ZVN0YXRlLnNldCgnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V3aGVlbChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmhhc1pvb20oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xuICAgICAgdGhpcy56b29tSW1hZ2UoMSAvIDEuMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy56b29tSW1hZ2UoMS4xKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZVN0YXRlKCkgPT09ICdub25lJyAmJiB0aGlzLm1vdmVTdGF0ZSgpID09PSAnbm9uZScpIHtcbiAgICAgIHRoaXMubW92ZVN0YXRlLnNldCgnaW1hZ2UnKTtcbiAgICAgIHRoaXMuaGFuZGxlck1vdXNlZG93bihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJDcm9wUmVzaXplKGU6IGFueSwgcmVzaXplVHlwZTogVFlQRV9SRVNJWkVfU1RBVEUpIHtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldChyZXNpemVUeXBlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZTogYW55KSB7XG4gICAgdGhpcy5tb3ZlU3RhdGUuc2V0KCdjbGlwJyk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VUb3AsIGltYWdlTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1ncmFiYmluZycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NsaXAnOlxuICAgICAgICBpZiAod2lkdGggPT09IGltYWdlV2lkdGggJiYgaGVpZ2h0ID09PSBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRNb3VzZURpbS5zZXQoe1xuICAgICAgY2xpZW50WDogZS5jbGllbnRYLFxuICAgICAgY2xpZW50WTogZS5jbGllbnRZLFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3A6IHRvcCxcbiAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICBpbWFnZVRvcDogaW1hZ2VUb3AsXG4gICAgICBpbWFnZUxlZnQ6IGltYWdlTGVmdCxcbiAgICAgIGltYWdlV2lkdGg6IGltYWdlV2lkdGgsXG4gICAgICBpbWFnZUhlaWdodDogaW1hZ2VIZWlnaHQsXG4gICAgfSk7XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlSW1hZ2UoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgaW1nVG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3AgKyBtb21lbnRZO1xuICAgIGNvbnN0IGltZ0xlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyBtb21lbnRYO1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFk7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYO1xuXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgdG9wOiBpbWdUb3AsIGxlZnQ6IGltZ0xlZnQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHRvcDogaW1nVG9wLCBsZWZ0OiBpbWdMZWZ0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCB9KTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wOiBpbWdUb3AsIGxlZnQ6IGltZ0xlZnQsIHdpZHRoOiB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVdpZHRoLCBoZWlnaHQ6IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQ2xpcEFyZWEoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgW2ltZ1dpZHRoLCBpbWdIZWlnaHQsIGltZ1RvcCwgaW1nTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGxldCB0b3AgPSBNYXRoLm1heChpbWdUb3AsIHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFkpO1xuICAgIGxldCBsZWZ0ID0gTWF0aC5tYXgoaW1nTGVmdCwgdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIG1vbWVudFgpO1xuXG4gICAgdG9wID0gTWF0aC5taW4odG9wLCBpbWdUb3AgKyBpbWdIZWlnaHQgLSBjcm9wSGVpZ2h0KTtcbiAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgaW1nTGVmdCArIGltZ1dpZHRoIC0gY3JvcFdpZHRoKTtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCB9LCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgem9vbUltYWdlKHNjYWxlOiBudW1iZXIpIHtcbiAgICBjb25zdCBbY3VycldpZHRoLCBjdXJySGVpZ2h0LCBjdXJyVG9wLCBjdXJyTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChjdXJyV2lkdGggKiBzY2FsZSwgNTApO1xuICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB3aWR0aCkgLyB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBjdXJyZW50IHZpZXdcbiAgICBjb25zdCBjZW50ZXJYID0gY3VyckxlZnQgKyBjdXJyV2lkdGggLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSBjdXJyVG9wICsgY3VyckhlaWdodCAvIDI7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHBvc2l0aW9uIHRvIG1haW50YWluIGNlbnRlciBwb2ludFxuICAgIGNvbnN0IHRvcCA9IGNlbnRlclkgLSBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IGxlZnQgPSBjZW50ZXJYIC0gd2lkdGggLyAyO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgY3JvcCBhcmVhIGRpbWVuc2lvbnMgYW5kIHBvc2l0aW9uXG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcblxuICAgIC8vIFNjYWxlIGNyb3AgYXJlYSBkaW1lbnNpb25zIHByb3BvcnRpb25hbGx5XG4gICAgY3JvcFdpZHRoID0gY3JvcFdpZHRoICogc2NhbGU7XG4gICAgY3JvcEhlaWdodCA9IGNyb3BIZWlnaHQgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgY3JvcCBhcmVhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBpbWFnZVxuICAgIGNvbnN0IGNyb3BUb3BOZXcgPSB0b3AgKyAoY3JvcFRvcCAtIGN1cnJUb3ApICogc2NhbGU7XG4gICAgY29uc3QgY3JvcExlZnROZXcgPSBsZWZ0ICsgKGNyb3BMZWZ0IC0gY3VyckxlZnQpICogc2NhbGU7XG5cbiAgICAvLyBFbnN1cmUgY3JvcCBhcmVhIHN0YXlzIHdpdGhpbiBib3VuZHNcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSB3aWR0aDtcbiAgICBjb25zdCBtYXhDcm9wSGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNvbnN0IG1pbldpZHRoID0gMjA7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gMjA7XG5cbiAgICBjcm9wV2lkdGggPSBNYXRoLm1pbihjcm9wV2lkdGgsIG1heENyb3BXaWR0aCk7XG4gICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BXaWR0aCA9IE1hdGgubWF4KGNyb3BXaWR0aCwgbWluV2lkdGgpO1xuICAgIGNyb3BIZWlnaHQgPSBNYXRoLm1heChjcm9wSGVpZ2h0LCBtaW5IZWlnaHQpO1xuXG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICh0aGlzLnJhdGlvVmFsdWUoKSkge1xuICAgICAgY3JvcEhlaWdodCA9IGNyb3BXaWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWF4KGNyb3BIZWlnaHQsIG1pbkhlaWdodCk7XG4gICAgICBjcm9wV2lkdGggPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNsaXBwaW5nIHJlY3RhbmdsZVxuICAgIHRoaXMucmVjdENsaXAudXBkYXRlKChyZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWN0VG9wID0gY3JvcFRvcE5ldyAtIHRvcDtcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gY3JvcExlZnROZXcgLSBsZWZ0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVjdCxcbiAgICAgICAgdG9wOiByZWN0VG9wLFxuICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgcmlnaHQ6IHJlY3RMZWZ0ICsgY3JvcFdpZHRoLFxuICAgICAgICBib3R0b206IHJlY3RUb3AgKyBjcm9wSGVpZ2h0LFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgIC8vIFVwZGF0ZSBhbGwgZWxlbWVudHMgd2l0aCBuZXcgcG9zaXRpb25zIGFuZCBkaW1lbnNpb25zXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wOiBjcm9wVG9wTmV3LCBsZWZ0OiBjcm9wTGVmdE5ldywgd2lkdGg6IGNyb3BXaWR0aCwgaGVpZ2h0OiBjcm9wSGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyBjbGlwLCB0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJvdGF0ZUltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCddKTtcbiAgICAgIGNvbnN0IG9yaWdpbldpZHRoID0gdGhpcy5pbWFnZS53aWR0aDtcbiAgICAgIGNvbnN0IG9yaWdpbkhlaWdodCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuICAgICAgbGV0IHRvcCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCk7XG4gICAgICBsZXQgbGVmdCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQpO1xuICAgICAgbGV0IG5ld0hlaWdodCA9IHdpZHRoO1xuICAgICAgbGV0IG5ld1dpZHRoID0gaGVpZ2h0O1xuICAgICAgY29uc3QgcmF0aW8gPSBuZXdXaWR0aCAvIG5ld0hlaWdodDtcblxuICAgICAgY2FudmFzLmhlaWdodCA9IG9yaWdpbldpZHRoO1xuICAgICAgY2FudmFzLndpZHRoID0gb3JpZ2luSGVpZ2h0O1xuICAgICAgY3R4Py50cmFuc2xhdGUob3JpZ2luSGVpZ2h0IC8gMiwgb3JpZ2luV2lkdGggLyAyKTtcbiAgICAgIGN0eD8ucm90YXRlKE1hdGguUEkgLyAyKTtcbiAgICAgIGN0eD8uZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIC1vcmlnaW5XaWR0aCAvIDIsIC1vcmlnaW5IZWlnaHQgLyAyKTtcbiAgICAgIGNvbnN0IHNyYyA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgdGhpcy5pbWdTcmMuc2V0KHNyYyk7XG4gICAgICBuZXdXaWR0aCA9IE1hdGgubWF4KG5ld1dpZHRoLCBvcmlnaW5IZWlnaHQpO1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1pbihuZXdXaWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpKTtcbiAgICAgIG5ld0hlaWdodCA9IG5ld1dpZHRoIC8gcmF0aW87XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1heChuZXdIZWlnaHQsIG9yaWdpbldpZHRoKTtcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKG5ld0hlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIHJhdGlvO1xuICAgICAgdG9wID0gdG9wIC0gKG5ld0hlaWdodCAvIDIgLSBoZWlnaHQgLyAyKTtcbiAgICAgIGxlZnQgPSBsZWZ0IC0gKG5ld1dpZHRoIC8gMiAtIHdpZHRoIC8gMik7XG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgeyBzcmMsIHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLmdldE9yaWdpbmFsSW1hZ2VTaXplKCgpID0+IHtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS5zZXQoeyB3aWR0aDogdGhpcy5vcmlnaW5XaWR0aCgpLCBoZWlnaHQ6IHRoaXMub3JpZ2luSGVpZ2h0KCkgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0T3JpZ2luYWxJbWFnZVNpemUoY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQodGhpcy5pbWFnZS53aWR0aCk7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5pbWFnZS5oZWlnaHQpO1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hhbmdlZEltYWdlKHN0YXR1czogYm9vbGVhbikge1xuICAgIHRoaXMuY2hhbmdlZC5zZXQoc3RhdHVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRmxpcEltYWdlKGV2ZW50OiBFdmVudCwgbW9kZTogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlLmhlaWdodDtcblxuICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSh3aWR0aCwgMCk7XG4gICAgICAgICAgY3R4LnNjYWxlKC0xLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgaGVpZ2h0KTtcbiAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhVXJsID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICB0aGlzLmltZ1NyYy5zZXQoZGF0YVVybCk7XG4gICAgICB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LnNyYyA9IGRhdGFVcmw7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXN0b3JlSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWdTcmMuc2V0KHRoaXMuZGF0YVVybE9yaWdpbigpKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZ2V0T3JpZ2luYWxJbWFnZVNpemUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKGZhbHNlKTtcbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldCgnJyk7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyb3BJbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gb3JpZ2luV2lkdGggLyB3aWR0aDtcbiAgICAgICAgY29uc3QgcmVjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcbiAgICAgICAgY29uc3QgY3JvcFJlY3QgPSBnZXRDcm9wUmVjdEltYWdlKHJlY3RDbGlwLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZSk7XG5cbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGNyb3BSZWN0LmhlaWdodDtcbiAgICAgICAgY2FudmFzLndpZHRoID0gY3JvcFJlY3Qud2lkdGg7XG4gICAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldChjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQoY2FudmFzLndpZHRoKTtcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIGNyb3BSZWN0LmxlZnQsIGNyb3BSZWN0LnRvcCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCwgMCwgMCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVVybCA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhVXJsKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNhdmVGaWxlKGV2ZW50OiBFdmVudCwgbW9kZVNhdmU6IFRZUEVfTU9ERV9TQVZFKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuY3JvcEltYWdlKCk7XG4gICAgY29uc3QgZmlsZSA9IGNvbnZlcnRCYXNlNjRUb0Jsb2IoZGF0YVVybCk7XG5cbiAgICB0aGlzLm91dFNhdmVGaWxlLmVtaXQoeyBmaWxlOiBmaWxlLCB1cmw6IGRhdGFVcmwsIG1vZGU6IG1vZGVTYXZlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbG9zZShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQoeyBpc0NsaWNrQnV0dG9uQ2xvc2U6IHRydWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdENyb3BSYXRpb0l0ZW0oZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldChrZXkpO1xuICAgIHRoaXMuY2hhbmdlZC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5kcmFnR3JpZENyb3Auc2V0KHRydWUpO1xuICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc2l6ZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5yZXNpemVDb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZXNpemVDb21wb25lbnRSZWYgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudCk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBjb25zdCBzdWJzID0gaW5zdGFuY2Uub3V0Q2xvc2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgICAgIHRoaXMucmVzaXplQ29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgaW5zdGFuY2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICBpbnN0YW5jZS5taW1ldHlwZSA9IHRoaXMubWltZXR5cGUoKTtcbiAgICBpbnN0YW5jZS56SW5kZXggPSB0aGlzLnpJbmRleCgpO1xuICAgIHN1YnMuYWRkKFxuICAgICAgaW5zdGFuY2Uub3V0U2F2ZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucmVzaXplRGF0YS5zZXQoZXZlbnQpO1xuICAgICAgICB0aGlzLnNhdmVSZXNpemUoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBpbnN0YW5jZS5yZXNpemVEYXRhID0geyByYXRpbzogMTAwLCB3aWR0aDogdGhpcy5vcmlnaW5XaWR0aCgpLCBoZWlnaHQ6IHRoaXMub3JpZ2luSGVpZ2h0KCkgfTtcbiAgICBpbnN0YW5jZS5vcmlnaW5XaWR0aCA9IHRoaXMub3JpZ2luV2lkdGgoKTtcbiAgICBpbnN0YW5jZS5vcmlnaW5IZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlUmVzaXplKCkge1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgICBjYW52YXMud2lkdGggPSB0aGlzLnJlc2l6ZURhdGEoKS53aWR0aDtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQ7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzcmMgPSBnZXREYXRhVXJsKGNhbnZhcywgdGhpcy5taW1ldHlwZSgpLCB0aGlzLmltYWdlLnNyYyk7XG4gICAgICBjb25zdCBbY3VycldpZHRoLCBjdXJySGVpZ2h0LCBjdXJyVG9wLCBjdXJyTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgICBjb25zdCByYXRpbyA9IGN1cnJXaWR0aCAvIGN1cnJIZWlnaHQ7XG4gICAgICBsZXQgbmV3V2lkdGggPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpKTtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvO1xuXG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiByYXRpbztcbiAgICAgIE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLmhlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBjb25zdCB0b3AgPSBjdXJyVG9wICsgKGN1cnJIZWlnaHQgLSBuZXdIZWlnaHQpIC8gMjtcbiAgICAgIGNvbnN0IGxlZnQgPSBjdXJyTGVmdCArIChjdXJyV2lkdGggLSBuZXdXaWR0aCkgLyAyO1xuICAgICAgY29uc3QgbW92ZW1lbnRZID0gY3VyclRvcCAtIHRvcDtcbiAgICAgIGNvbnN0IG1vdmVtZW50WCA9IGN1cnJMZWZ0IC0gbGVmdDtcblxuICAgICAgdGhpcy5yZWN0Q2xpcC51cGRhdGUoKHJlY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdFRvcCA9IHJlY3QudG9wICsgbW92ZW1lbnRZO1xuICAgICAgICBjb25zdCByZWN0TGVmdCA9IHJlY3QubGVmdCArIG1vdmVtZW50WDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZWN0LFxuICAgICAgICAgIHRvcDogcmVjdFRvcCxcbiAgICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgICByaWdodDogcmVjdExlZnQgKyBuZXdXaWR0aCxcbiAgICAgICAgICBib3R0b206IHJlY3RUb3AgKyBuZXdIZWlnaHQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHNyYywgY2xpcCwgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5pbWdTcmMuc2V0KHNyYyk7XG4gICAgICB0aGlzLm9yaWdpbldpZHRoLnNldCh0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCk7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5yZXNpemVEYXRhKCkuaGVpZ2h0KTtcbiAgICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICAgIHRoaXMudXBkYXRlUmVjdENsaXBQb3MoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNyb3BXaWR0aCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnd2lkdGgnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ3JvcEhlaWdodCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnaGVpZ2h0Jyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDcm9wV2lkdGhPckhlaWdodChjcm9wQnk6ICd3aWR0aCcgfCAnaGVpZ2h0Jykge1xuICAgIHRoaXMucmF0aW9WYWx1ZS5zZXQodGhpcy5nZXRDcm9wUmF0aW9WYWx1ZSgpKTtcbiAgICBjb25zdCBbY3VyckltZ1dpZHRoLCBjdXJySW1nSGVpZ2h0LCBjdXJySW1nVG9wLCBjdXJySW1nTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSBjdXJySW1nTGVmdCArIGN1cnJJbWdXaWR0aCAtIGNyb3BMZWZ0O1xuICAgIGNvbnN0IG1heENyb3BIZWlnaHQgPSBjdXJySW1nSGVpZ2h0ICsgY3VyckltZ1RvcCAtIGNyb3BUb3A7XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLm9yaWdpbldpZHRoKCkgLyBjdXJySW1nV2lkdGg7XG4gICAgbGV0IGNyb3BWYWx1ZSA9IGdldCh0aGlzLmNyb3BTaXplLCBjcm9wQnkpIC8gcmF0aW87XG5cbiAgICBjcm9wVmFsdWUgPSBNYXRoLm1pbihjcm9wVmFsdWUsIGNyb3BCeSA9PT0gJ3dpZHRoJyA/IG1heENyb3BXaWR0aCA6IG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BWYWx1ZSA9IE1hdGgubWF4KDEsIGNyb3BWYWx1ZSk7XG4gICAgaWYgKHRoaXMucmF0aW9WYWx1ZSgpKSB7XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnd2lkdGgnKSB7XG4gICAgICAgIGNyb3BIZWlnaHQgPSBjcm9wVmFsdWUgLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKChjcm9wU2l6ZSkgPT4gKHsgLi4uY3JvcFNpemUsIGhlaWdodDogTWF0aC5yb3VuZChjcm9wSGVpZ2h0ICogcmF0aW8pIH0pKTtcbiAgICAgICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7Y3JvcEhlaWdodH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnaGVpZ2h0Jykge1xuICAgICAgICBjcm9wV2lkdGggPSBjcm9wVmFsdWUgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcFdpZHRoID0gTWF0aC5taW4oY3JvcFdpZHRoLCBtYXhDcm9wV2lkdGgpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wV2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoKGNyb3BTaXplKSA9PiAoeyAuLi5jcm9wU2l6ZSwgd2lkdGg6IE1hdGgucm91bmQoY3JvcFdpZHRoICogcmF0aW8pIH0pKTtcbiAgICAgICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjcm9wV2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNyb3BTaXplLnVwZGF0ZSgoY3JvcFNpemUpID0+ICh7IC4uLmNyb3BTaXplLCBbY3JvcEJ5XTogTWF0aC5yb3VuZChjcm9wVmFsdWUgKiByYXRpbykgfSkpO1xuICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlW2Nyb3BCeV0gPSBgJHtjcm9wVmFsdWV9cHhgO1xuICAgIGNvbnN0IGltYWdlUmVjdCA9IHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjcm9wUmVjdCA9IHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY3JvcFJlY3Q7XG4gICAgY29uc3QgbGVmdCA9IGNyb3BSZWN0LmxlZnQgLSBpbWFnZVJlY3QubGVmdDtcbiAgICBjb25zdCB0b3AgPSBjcm9wUmVjdC50b3AgLSBpbWFnZVJlY3QudG9wO1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHt0b3B9cHgsICR7cmlnaHR9cHgsICR7Ym90dG9tfXB4LCAke2xlZnR9cHgpYDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGVzRWxlbWVudHMoZWxlbWVudDogRWxlbWVudFJlZiwgc3R5bGVzOiBJU3R5bGVzLCBpc1VwZGF0ZVJlY3RDbGlwUG9zPzogYm9vbGVhbikge1xuICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldChzdHlsZXMsIGtleSBhcyBrZXlvZiBJU3R5bGVzKTtcbiAgICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0KGVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZSwga2V5LCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gYCR7dmFsdWV9cHhgIDogdmFsdWUpO1xuICAgIH0pO1xuICAgIGlmIChpc1VwZGF0ZVJlY3RDbGlwUG9zKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy5yZXNpemVDb21wb25lbnRSZWYpO1xuICB9XG59XG4iLCI8bGlic191aS1jb21wb25lbnRzLW1vZGFsXG4gIFt3aWR0aF09XCInY2FsYygxMDB2dyAtIDQwMHB4KSdcIlxuICBbaGVpZ2h0XT1cIidjYWxjKDEwMHZoIC0gMTAwcHgpJ1wiXG4gIFttaW5XaWR0aF09XCInMTIwMHB4J1wiXG4gIFtoZWFkZXJDb25maWddPVwieyBpZ25vcmVIZWFkZXJUaGVtZTogdHJ1ZSwgcmVtb3ZlQnV0dG9uQ2xvc2U6IHRydWUgfVwiXG4gIFtib2R5Q29uZmlnXT1cInsgY2xhc3NJbmNsdWRlOiAnIXAtMCcsIHNjcm9sbE92ZXJsYXlPcHRpb25zOiB7IHNjcm9sbFg6ICdoaWRkZW4nLCBzY3JvbGxZOiAnaGlkZGVuJyB9IH1cIlxuICBbZm9vdGVyQ29uZmlnXT1cInsgaGlkZGVuOiB0cnVlIH1cIlxuICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgW2J1dHRvbnNGb290ZXJdPVwiW11cIlxuICBbbW9kZV09XCInY2VudGVyJ1wiPlxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1tb2RhbC1oZWFkZXItY3VzdG9tIHctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlIG14LVsyNHB4XSBoLVsxNnB4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGxpYnMtdWktZm9udC1oNHMgYWJzb2x1dGVcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbY29uZmlnXT1cInsgekluZGV4OiB6SW5kZXgoKSB9XCI+XG4gICAgICAgICAge3sgJ2kxOG5fZWRpdF9maWxlX25hbWUnIHwgdHJhbnNsYXRlOiB7IGZpbGVfbmFtZTogbmFtZUZpbGUoKSB9IH19XG4gICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIEBpZiAobW9kZVNob3dCdXR0b24oKSA9PT0gJ3NhdmUtZmlsZScpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fY2FuY2VsJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0gbXItWzE2cHhdJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbG9zZSgkZXZlbnQpXCIgLz5cblxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJtci1bMjRweF1cIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9zYXZlJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwgJ3NhdmUtZmlsZScpXCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIidpMThuX3NhdmVfdG9fbmV3X2ZpbGUnXCJcbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidteC1bMTZweF0gcHktWzZweF0gcHgtWzEycHhdJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpIHx8ICFjaGFuZ2VkKClcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2F2ZUZpbGUoJGV2ZW50LCAnc2F2ZS1hcGktYXMtbmV3LWZpbGUnKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXNlY29uZGFyeSdcIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9zYXZlJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncHktWzZweF0gcHgtWzEycHhdJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpIHx8ICFjaGFuZ2VkKClcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2F2ZUZpbGUoJGV2ZW50LCAnc2F2ZS1hcGknKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLVsxMnB4XSBsaWJzLXVpLWJvcmRlci1sZWZ0LWdlbmVyYWwgbXgtWzE2cHhdXCI+PC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBjbGFzcz1cIm1yLVsyNHB4XVwiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncC1bNnB4XSdcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQtaG92ZXItZGFuZ2VyJ1wiXG4gICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKClcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuX2V4aXRfZWRpdF9tb2RlJywgekluZGV4OiB6SW5kZXgoKSB9IH1cIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY2xvc2UnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsb3NlKCRldmVudClcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbW9kYWwtYm9keS1jdXN0b20gaC1mdWxsIHctZnVsbCBmbGV4XCI+XG4gICAgPGRpdlxuICAgICAgI2ltYWdlRWRpdG9yQ29udGFpbmVyXG4gICAgICBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgYmctWyNlNmU3ZWFdIGJvcmRlci1yYWRpdXMtYm90dG9tLWxlZnQtOHB4IHAtWzMycHhdIGxpYnMtdWktaW5wdXQtaW1hZ2UtZWRpdG9yLWNvbnRhaW5lci1sZWZ0XCI+XG4gICAgICBAaWYgKGxvYWRpbmdJbWFnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIGJnLVsjZTZlN2VhXSB0b3AtMCBsZWZ0LTAgei1bNV1cIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIHRvcC0wIGxlZnQtWzMycHhdIHotWzFdXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdy1bMzJweF0gaC1mdWxsIGJnLVsjZTZlN2VhYjhdIGxlZnQtMCB0b3AtMCB6LVsxXSByb3VuZGVkLWJsLVs4cHhdXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdy1bMzJweF0gaC1mdWxsIGJnLVsjZTZlN2VhYjhdIHJpZ2h0LTAgdG9wLTAgei1bMV1cIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIGJvdHRvbS0wIGxlZnQtWzMycHhdIHotWzFdXCI+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICNpbWFnZUNvbnRhaW5lclxuICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcm91bmRlZC1ibC1bOHB4XSBtaW4taC0wXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjY2lyY2xlVExcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICNjaXJjbGVUUlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI2NpcmNsZUJMXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXVwiXG4gICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhZHJhZ0dyaWRDcm9wKClcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4XT1cImRyYWdHcmlkQ3JvcCgpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQ2lyY2xlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjY2lyY2xlQlJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICNpbWFnZU9yaWdpblxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgYm9yZGVyLVs0cHhdIGJvcmRlci1bIzhlNjFlZV0gcm91bmRlZC1bNHB4XSB0b3AtWy0xMDAwcHhdIGxlZnQtWy0xMDAwcHhdXCJcbiAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgW3NyY109XCJpbWdTcmMoKVwiXG4gICAgICAgICAgKGxvYWQpPVwiaGFuZGxlckltYWdlTG9hZGVkKClcIlxuICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICNpbWFnZUNsaXBcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIHRvcC1bLTEwMDBweF0gbGVmdC1bLTEwMDBweF1cIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBbc3JjXT1cImltZ1NyYygpXCJcbiAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBib3R0b20tMCBiZy1bI2U2ZTdlYWI4XVwiPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI2Nyb3BBcmVhXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSBib3JkZXItWzRweF0gYm9yZGVyLVsjOGU2MWVlXSByb3VuZGVkLVs0cHhdXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2Nyb3BUTFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIGxlZnQtWy0xOHB4XSB0b3AtWy0xN3B4XSBjdXJzb3ItbndzZS1yZXNpemVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNjcm9wQkxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSBsZWZ0LVstMTdweF0gYm90dG9tLVstMThweF0gY3Vyc29yLW5lc3ctcmVzaXplIHJvdGF0ZS1bMjcwZGVnXVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2Nyb3BUUlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIHJpZ2h0LVstMTdweF0gdG9wLVstMTdweF0gY3Vyc29yLW5lc3ctcmVzaXplIHJvdGF0ZS1bOTBkZWddXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcEJSXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gcmlnaHQtWy0xOHB4XSBib3R0b20tWy0xN3B4XSBjdXJzb3ItbndzZS1yZXNpemUgcm90YXRlLVsxODBkZWddXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcExpbmVWTFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIHctWzEycHhdIGxlZnQtWy02cHhdIHRvcC0wIGJvdHRvbS0wIGN1cnNvci1ldy1yZXNpemVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2Nyb3BMaW5lVlJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSB3LVsxMnB4XSByaWdodC1bLTZweF0gdG9wLTAgYm90dG9tLTAgY3Vyc29yLWV3LXJlc2l6ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcExpbmVIVFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIGgtWzEycHhdIGxlZnQtMCB0b3AtWy02cHhdIHJpZ2h0LTAgY3Vyc29yLW5zLXJlc2l6ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY3JvcExpbmVIQlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIGgtWzEycHhdIGxlZnQtMCByaWdodC0wIGJvdHRvbS1bLTZweF0gY3Vyc29yLW5zLXJlc2l6ZVwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMXB4XSB0b3AtMCBsZWZ0LTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzFweF0gYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsxcHhdIHRvcC0wIGxlZnQtMCBib3R0b20tMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIHctWzFweF0gdG9wLTAgYm90dG9tLTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzJweF0gdG9wLVszMyVdIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMnB4XSB0b3AtWzY2JV0gbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzMzJV1cIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzY2JV1cIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctWzMyMHB4XSBzaHJpbmstMCBwLVsxNnB4XSBiZy1bI2ZmZmZmZl0gcm91bmRlZC1ici1bOHB4XSB6LVsyXSBsaWJzLXVpLWlucHV0LWltYWdlLWVkaXRvci1jb250YWluZXItcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItWzE2cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCI+e3sgJ2kxOG5fY3V0dGluZ19yYXRpbycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tcmVmcmVzaCdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3AtWzZweF0gbXItWzhweF0nXCJcbiAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9yZXN0b3JlX3RoZV9vcmlnaW5hbF9zdGF0ZScsIHpJbmRleDogekluZGV4KCkgfSB9XCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZXN0b3JlSW1hZ2UoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1bMTZweF0gbGlicy11aS1pbWFnZS1lZGl0b3ItZWRpdC1kaXNwbGF5LWdyaWQtZ2FwLTE2XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgY3JvcFJhdGlvSXRlbXMoKTsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCByZXF1aXJlZENyb3BGb2xsb3dSYXRpbygpXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIml0ZW0uaWNvbiArICcgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJpdGVtLmtleSA9PT0gY3JvcFJhdGlvSXRlbVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNlbGVjdENyb3BSYXRpb0l0ZW0oJGV2ZW50LCBpdGVtLmtleSlcIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgICAge3sgKGl0ZW0ua2V5ID09PSAnZnJlZScgPyAnaTE4bl9jdXN0b20nIDogaXRlbS5rZXkpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItWzE2cHhdIGZsZXhcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgICAgICBjbGFzcz1cIm1yLVsxNnB4XVwiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbGFiZWxDb25maWddPVwieyBsYWJlbExlZnQ6ICdpMThuX3dpZHRoJywgY2xhc3NJbmNsdWRlOiAnbWItWzRweF0nLCBsYWJlbExlZnRDbGFzczogJ2xpYnMtdWktZm9udC1oN3InIH1cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIid3aWR0aCdcIlxuICAgICAgICAgIFsoaXRlbSldPVwiY3JvcFNpemVcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7IGlkOiAncHgnLCBsYWJlbDogJ3B4JyB9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwib3JpZ2luV2lkdGgoKVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNyb3BXaWR0aCgpXCIgLz5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgICAgICBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJ7IGxhYmVsTGVmdDogJ2kxOG5fbGVuZ3RoJywgY2xhc3NJbmNsdWRlOiAnbWItWzRweF0nLCBsYWJlbExlZnRDbGFzczogJ2xpYnMtdWktZm9udC1oN3InIH1cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIidoZWlnaHQnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cImNyb3BTaXplXCJcbiAgICAgICAgICBbdW5pdHNSaWdodF09XCJbeyBpZDogJ3B4JywgbGFiZWw6ICdweCcgfV1cIlxuICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCIncHgnXCJcbiAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm9yaWdpbkhlaWdodCgpXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyQ3JvcEhlaWdodCgpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNG0gbWItWzE2cHhdXCI+e3sgJ2kxOG5fcm90YXRlX3Bob3RvcycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGxpYnMtdWktaW1hZ2UtZWRpdG9yLWVkaXQtZGlzcGxheS1ncmlkLWdhcC0xNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJvdGF0ZS1pbWFnZS1vdXRsaW5lICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSb3RhdGVJbWFnZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcm90YXRlX25pbmV0eV9kZWdyZWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWZsaXAtdmVydGljYWwgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckZsaXBJbWFnZSgkZXZlbnQsICd2ZXJ0aWNhbCcpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fdmVydGljYWxfZmxpcCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidsYXJnZSdcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1mbGlwLWhvcml6b250YWwgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckZsaXBJbWFnZSgkZXZlbnQsICdob3Jpem9udGFsJylcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZyIHRleHQtWyM2YTczODNdIG10LVs0cHhdXCI+XG4gICAgICAgICAgICB7eyAnaTE4bl9ob3Jpem9udGFsX2ZsaXAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tc2NhbGUgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclJlc2l6ZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcmVzaXplJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbGlic191aS1jb21wb25lbnRzLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI3N2Z0Fycm93PlxuICA8c3ZnXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgd2lkdGg9XCI0MFwiXG4gICAgaGVpZ2h0PVwiNDBcIlxuICAgIHZpZXdCb3g9XCIwIDAgNDAgNDBcIlxuICAgIGZpbGw9XCJub25lXCI+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMzMuNjk4NyAxNC42OTY5TDE4LjMzMDkgMTQuNjk2OUMxNi41MTYgMTQuNjk2OSAxNS4wMzExIDE2LjE4MTggMTUuMDMxMSAxNy45OTY3TDE1LjAzMTEgMzMuMzY0NVwiXG4gICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICBzdHJva2Utd2lkdGg9XCI1LjgzMzMzXCJcbiAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIlxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdmdDaXJjbGU+XG4gIDxzdmdcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICB3aWR0aD1cIjE1XCJcbiAgICBoZWlnaHQ9XCIxNVwiXG4gICAgdmlld0JveD1cIjAgMCAxNSAxNVwiXG4gICAgZmlsbD1cIm5vbmVcIj5cbiAgICA8Y2lyY2xlXG4gICAgICBjeD1cIjcuNVwiXG4gICAgICBjeT1cIjcuNVwiXG4gICAgICByPVwiNy41XCJcbiAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|