@libs-ui/components-image-editor 0.2.296 → 0.2.298

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.
@@ -764,7 +764,7 @@ export class LibsUiComponentsImageEditorComponent {
764
764
  this.dynamicComponentService.remove(this.resizeComponentRef);
765
765
  }
766
766
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorComponent, deps: [{ token: LINK_IMAGE_ERROR_TOKEN_INJECT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
767
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 [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 [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 [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 class=\"mr-[24px]\"\n [label]=\"'i18n_save'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n (outClick)=\"handlerSaveFile($event,'save-file')\" />\n }\n @else {\n <libs_ui-components-buttons-button [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 [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 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 #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]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] left-0 top-0 z-[1] rounded-bl-[8px]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] right-0 top-0 z-[1]\">\n </div>\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] bottom-0 left-[32px] z-[1]\">\n </div>\n <div #imageContainer\n class=\"relative w-full h-full rounded-bl-[8px] min-h-0\">\n <div #circleTL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleTR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <img #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 #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]\">\n </div>\n <div #cropArea\n class=\"absolute z-[2] border-[4px] border-[#8e61ee] rounded-[4px]\">\n <div class=\"relative w-full h-full\">\n <div #cropTL\n class=\"absolute z-[2] left-[-18px] top-[-17px] cursor-nwse-resize\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBL\n class=\"absolute z-[2] left-[-17px] bottom-[-18px] cursor-nesw-resize rotate-[270deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropTR\n class=\"absolute z-[2] right-[-17px] top-[-17px] cursor-nesw-resize rotate-[90deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBR\n class=\"absolute z-[2] right-[-18px] bottom-[-17px] cursor-nwse-resize rotate-[180deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropLineVL\n class=\"absolute z-[1] w-[12px] left-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineVR\n class=\"absolute z-[1] w-[12px] right-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineHT\n class=\"absolute z-[1] h-[12px] left-0 top-[-6px] right-0 cursor-ns-resize\">\n </div>\n <div #cropLineHB\n class=\"absolute z-[1] h-[12px] left-0 right-0 bottom-[-6px] cursor-ns-resize\">\n </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 [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 [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 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 [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 [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 [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 [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 [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 xmlns=\"http://www.w3.org/2000/svg\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\">\n <path 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 xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\">\n <circle 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", "deboundTimeValiate"], 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 });
767
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 [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 [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 [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 class=\"mr-[24px]\"\n [label]=\"'i18n_save'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n (outClick)=\"handlerSaveFile($event,'save-file')\" />\n }\n @else {\n <libs_ui-components-buttons-button [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 [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 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 #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]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] left-0 top-0 z-[1] rounded-bl-[8px]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] right-0 top-0 z-[1]\">\n </div>\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] bottom-0 left-[32px] z-[1]\">\n </div>\n <div #imageContainer\n class=\"relative w-full h-full rounded-bl-[8px] min-h-0\">\n <div #circleTL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleTR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <img #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 #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]\">\n </div>\n <div #cropArea\n class=\"absolute z-[2] border-[4px] border-[#8e61ee] rounded-[4px]\">\n <div class=\"relative w-full h-full\">\n <div #cropTL\n class=\"absolute z-[2] left-[-18px] top-[-17px] cursor-nwse-resize\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBL\n class=\"absolute z-[2] left-[-17px] bottom-[-18px] cursor-nesw-resize rotate-[270deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropTR\n class=\"absolute z-[2] right-[-17px] top-[-17px] cursor-nesw-resize rotate-[90deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBR\n class=\"absolute z-[2] right-[-18px] bottom-[-17px] cursor-nwse-resize rotate-[180deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropLineVL\n class=\"absolute z-[1] w-[12px] left-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineVR\n class=\"absolute z-[1] w-[12px] right-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineHT\n class=\"absolute z-[1] h-[12px] left-0 top-[-6px] right-0 cursor-ns-resize\">\n </div>\n <div #cropLineHB\n class=\"absolute z-[1] h-[12px] left-0 right-0 bottom-[-6px] cursor-ns-resize\">\n </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 [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 [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 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 [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 [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 [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 [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 [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 xmlns=\"http://www.w3.org/2000/svg\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\">\n <path 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 xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\">\n <circle 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 });
768
768
  }
769
769
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorComponent, decorators: [{
770
770
  type: Component,
@@ -778,4 +778,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
778
778
  type: Inject,
779
779
  args: [LINK_IMAGE_ERROR_TOKEN_INJECT]
780
780
  }] }] });
781
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ltYWdlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFnQixVQUFVLEVBQWMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFC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QUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3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QUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBZTtRQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxH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Q0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBR25ELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzlGLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUss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LEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdEUsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQztJQUVRLHFCQUFxQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDOUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQzlHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDO1FB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SUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFVBQVUsSUFBSSxDQUFDO1lBQ2pFLENBQUM7WUFDRCxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsU0FBUyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDOUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsU0FBUyxJQUFJLENBQUM7WUFDL0QsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsU0FBUyxJQUFJLENBQUM7UUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN2RSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUU1QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxHQUFHLE9BQU8sS0FBSyxPQUFPLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztJQUNuRyxDQUFDO0lBRU8saUJBQWlCLENBQUMsT0FBbUIsRUFBRSxNQUFlLEVBQUUsbUJBQTZCO1FBQzNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsT0FBTztZQUNULENBQUM7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQXIyQlUsb0NBQW9DLGtCQStEZiw2QkFBNkI7NEZBL0RsRCxvQ0FBb0MsZ3NHQy9CakQsdWthQWdTQSxvMUNEclFJLGdCQUFnQixtSkFBRSxlQUFlLDRGQUFFLGdDQUFnQyxvZ0JBQUUsOEJBQThCLG10QkFDbkcsb0NBQW9DLG8xREFBRSxzQ0FBc0Msc2pCQUFFLGdDQUFnQzs7NEZBR3JHLG9DQUFvQztrQkFaaEQsU0FBUzsrQkFFRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEI7d0JBQ25HLG9DQUFvQyxFQUFFLHNDQUFzQyxFQUFFLGdDQUFnQztxQkFDL0c7OzBCQWlFWSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBJbmplY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lcic7XG5pbXBvcnQgeyBJQXNwZWN0UmF0aW8sIElCb3VuZGluZ0NsaWVudFJlY3QsIElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iLCBnZXQsIGlzTmlsLCBMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNyb3BSYXRpb25JdGVtcywgZ2V0Q3JvcFJlY3RJbWFnZSwgZ2V0RGF0YVVybCwgZ2V0U3R5bGVzT2ZFbGVtZW50LCBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3cgfSBmcm9tICcuL2RlZmluZXMvaW1hZ2UtZWRpdG9yLmRlZmluZSc7XG5pbXBvcnQgeyBJSW1hZ2VFZGl0b3JGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ3JvcFJhdGlvSXRlbSwgSUNyb3BTaXplLCBJUmVjdENsaXAsIElSZXNpemVEYXRhLCBJU2F2ZUZpbGUsIElTdGFydE1vdXNlRGltLCBJU3R5bGVzLCBNT0RFX0VESVQsIFRZUEVfTU9ERV9TQVZFLCBUWVBFX1JFU0laRV9TVEFURSB9IGZyb20gJy4vaW50ZXJmYWNlcy9pbWFnZS1lZGl0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWltYWdlX2VkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LCBUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0ltYWdlID0gc2lnbmFsKHRydWUpO1xuICBwcm90ZWN0ZWQgY2hhbmdlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBvcmlnaW5XaWR0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgb3JpZ2luSGVpZ2h0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBjcm9wUmF0aW9JdGVtcyA9IHNpZ25hbDxBcnJheTxJQ3JvcFJhdGlvSXRlbT4+KGNyb3BSYXRpb25JdGVtcygpKTtcbiAgcHJvdGVjdGVkIGNyb3BSYXRpb0l0ZW1TZWxlY3RlZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGNyb3BTaXplID0gc2lnbmFsPElDcm9wU2l6ZT4oeyB3aWR0aDogMjAsIGhlaWdodDogMjAgfSk7XG4gIHByb3RlY3RlZCByZXNpemVEYXRhID0gc2lnbmFsPElSZXNpemVEYXRhPih7IHJhdGlvOiAxMDAsIHdpZHRoOiA2MDAsIGhlaWdodDogODAwIH0pO1xuICBwcm90ZWN0ZWQgZHJhZ0dyaWRDcm9wID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGltYWdlID0gbmV3IEltYWdlKCk7XG4gIHByaXZhdGUgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIHByaXZhdGUgY29udGFpbmVySGVpZ2h0ID0gc2lnbmFsKDgwMCk7XG4gIHByaXZhdGUgY29udGFpbmVyV2lkdGggPSBzaWduYWwoMTIwMCk7XG4gIHByaXZhdGUgaW1nQ29udGFpbmVyUmVjdCA9IHNpZ25hbDxJQm91bmRpbmdDbGllbnRSZWN0Pih7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSByZWN0Q2xpcCA9IHNpZ25hbDxJUmVjdENsaXA+KHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xuICBwcml2YXRlIHJlc2l6ZVN0YXRlID0gc2lnbmFsPFRZUEVfUkVTSVpFX1NUQVRFPignbm9uZScpO1xuICBwcml2YXRlIG1vdmVTdGF0ZSA9IHNpZ25hbDwnY2xpcCcgfCAnaW1hZ2UnIHwgJ25vbmUnPignbm9uZScpO1xuICBwcml2YXRlIHN0YXJ0TW91c2VEaW0gPSBzaWduYWw8SVN0YXJ0TW91c2VEaW0+KHsgY2xpZW50WDogMCwgY2xpZW50WTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwLCBpbWFnZVRvcDogMCwgaW1hZ2VMZWZ0OiAwLCBpbWFnZVdpZHRoOiAwLCBpbWFnZUhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSBkYXRhVXJsT3JpZ2luID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJhdGlvVmFsdWUgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5IZWlnaHQgPSAyMDtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5XaWR0aCA9IDIwO1xuICBwcml2YXRlIHJlc2l6ZUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JSZXNpemVDb21wb25lbnQ+O1xuXG5cbiAgcmVhZG9ubHkgbW9kZVNob3dCdXR0b24gPSBpbnB1dDxNT0RFX0VESVQ+KCdzYXZlLWZpbGUnKTtcbiAgcmVhZG9ubHkgbWltZXR5cGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oMTIwMCk7XG4gIHJlYWRvbmx5IGltZ1NyYyA9IG1vZGVsLnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3JpZ2luVXJsID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBuYW1lRmlsZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaGFzWm9vbSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYXNwZWN0UmF0aW8gPSBpbnB1dDxJQXNwZWN0UmF0aW8+KCk7XG4gIHJlYWRvbmx5IHJlcXVpcmVkQ3JvcEZvbGxvd1JhdGlvID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGltYWdlT3JpZ2luID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdpbWFnZU9yaWdpbicpO1xuICByZWFkb25seSBpbWFnZUNsaXAgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlQ2xpcCcpO1xuICByZWFkb25seSBpbWFnZUVkaXRvckNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VFZGl0b3JDb250YWluZXInKTtcbiAgcmVhZG9ubHkgaW1hZ2VDb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlQ29udGFpbmVyJyk7XG4gIHJlYWRvbmx5IGNyb3BBcmVhID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wQXJlYScpO1xuICByZWFkb25seSBjcm9wVEwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BUTCcpO1xuICByZWFkb25seSBjcm9wQkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BCTCcpO1xuICByZWFkb25seSBjcm9wQlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BCUicpO1xuICByZWFkb25seSBjcm9wVFIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BUUicpO1xuICByZWFkb25seSBjcm9wTGluZVZMID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZVZMJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lVlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lVlInKTtcbiAgcmVhZG9ubHkgY3JvcExpbmVIVCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcExpbmVIVCcpO1xuICByZWFkb25seSBjcm9wTGluZUhCID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZUhCJyk7XG4gIHJlYWRvbmx5IGNpcmNsZVRMID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVUTCcpO1xuICByZWFkb25seSBjaXJjbGVUUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY2lyY2xlVFInKTtcbiAgcmVhZG9ubHkgY2lyY2xlQkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZUJMJyk7XG4gIHJlYWRvbmx5IGNpcmNsZUJSID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVCUicpO1xuXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHsgaXNDbGlja0J1dHRvbkNsb3NlOiBib29sZWFuIH0+KCk7XG4gIHJlYWRvbmx5IG91dFNhdmVGaWxlID0gb3V0cHV0PElTYXZlRmlsZT4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJSW1hZ2VFZGl0b3JGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZilcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCkgcHJpdmF0ZSBsaW5rSW1hZ2VFcnJvcjogc3RyaW5nKSB7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXNwZWN0UmF0aW8oKSkge1xuICAgICAgdGhpcy5kcmFnR3JpZENyb3Auc2V0KHRydWUpO1xuICAgICAgY29uc3QgYXNwZWN0UmF0aW9Gb3VuZCA9IHRoaXMuY3JvcFJhdGlvSXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IHRoaXMuYXNwZWN0UmF0aW8oKT8ua2V5KTtcblxuICAgICAgdGhpcy5jcm9wUmF0aW9JdGVtU2VsZWN0ZWQuc2V0KGFzcGVjdFJhdGlvRm91bmQ/LmtleSB8fCB0aGlzLmNyb3BSYXRpb0l0ZW1zKClbMF0ua2V5KTtcbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZU1vZGFsU2l6ZSgpO1xuICAgIHRoaXMuaW5pdERhdGEoKTtcbiAgICB0aGlzLmluaXRNb3VzZUV2ZW50KCk7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgY3JvcEltYWdlOiB0aGlzLmNyb3BJbWFnZS5iaW5kKHRoaXMpLFxuICAgICAgc2V0TG9hZGluZ1N0YXRlOiAobG9hZGluZzogYm9vbGVhbikgPT4gdGhpcy5sb2FkaW5nLnNldChsb2FkaW5nKVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUxvYWRlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTW9kYWxTaXplKCk7XG4gICAgICB0aGlzLmxvYWRpbmdJbWFnZS5zZXQoZmFsc2UpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCkge1xuICAgIGNvbnNvbGUubG9nKCdlJywgZSk7XG4gICAgKGUgYXMgSUV2ZW50KS50YXJnZXQuc3JjID0gdGhpcy5saW5rSW1hZ2VFcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kYWxTaXplKCkge1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwMDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gNDAwO1xuXG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQuc2V0KG1heEhlaWdodCAtIDEyNCk7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5zZXQobWF4V2lkdGggLSAzODQpO1xuICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhKCkge1xuICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgIHRoaXMuaW1hZ2Uuc2V0QXR0cmlidXRlKCdjcm9zc29yaWdpbicsICdhbm9ueW1vdXMnKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5pbWFnZS5oZWlnaHQpO1xuICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQodGhpcy5pbWFnZS53aWR0aCk7XG5cbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpPy5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgICB0aGlzLmRhdGFVcmxPcmlnaW4uc2V0KGdldERhdGFVcmwodGhpcy5jYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpKTtcbiAgICAgIHRoaXMuaW1nU3JjLnNldCh0aGlzLmRhdGFVcmxPcmlnaW4oKSk7XG4gICAgfTtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNb3VzZUV2ZW50KCkge1xuICAgIGNvbnN0IG1vdXNlVXAgPSB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IGRvY3VtZW50IH0sICdtb3VzZXVwJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgdW5kZWZpbmVkLCAoKSA9PiB0aGlzLmhhbmRsZXJNb3VzZXVwKCkpO1xuICAgIGNvbnN0IG1vdXNlTW92ZSA9IHRoaXMuaW5pdEV2ZW50KHsgbmF0aXZlRWxlbWVudDogZG9jdW1lbnQgfSwgJ21vdXNlbW92ZScsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0pLnBpcGUodGFrZVVudGlsKG1vdXNlVXApKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuaW1hZ2VFZGl0b3JDb250YWluZXIoKSwgJ3doZWVsJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlIH0sIHVuZGVmaW5lZCwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZXdoZWVsKGUpKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IHdpbmRvdyB9LCAncmVzaXplJywge30sIHVuZGVmaW5lZCwgKCkgPT4gdGhpcy51cGRhdGVNb2RhbFNpemUoKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5pbWFnZUNvbnRhaW5lcigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGUpKS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdUTCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wQkwoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB7IHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ0JMJykgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BCUigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnQlInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdUUicpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZVZMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdWTCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZVZSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdWUicpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZUhUKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdIVCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZUhCKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdIQicpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wQXJlYSgpLCAnbW91c2Vkb3duJywge30sIHVuZGVmaW5lZCwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZWRvd25Dcm9wQXJlYShlKSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEV2ZW50KGVsZW1lbnQ6IEVsZW1lbnRSZWYsIGV2ZW50TmFtZTogc3RyaW5nLCBmbGFnOiB7IGNhbGxTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuLCBjYWxsUHJldmVudERlZmF1bHQ/OiBib29sZWFuIH0sIG9ic01lcmdlPzogT2JzZXJ2YWJsZTxFdmVudD4sIGNhbGxiYWNrPzogKGU6IEV2ZW50KSA9PiB2b2lkKTogT2JzZXJ2YWJsZTxFdmVudD4ge1xuICAgIGNvbnN0IG9icyA9IGZyb21FdmVudDxFdmVudD4oZWxlbWVudC5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUpLnBpcGUoXG4gICAgICB0YXAoKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChmbGFnLmNhbGxTdG9wUHJvcGFnYXRpb24gJiYgZT8uc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmxhZy5jYWxsUHJldmVudERlZmF1bHQgJiYgZT8ucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpO1xuXG4gICAgaWYgKG9ic01lcmdlKSB7XG4gICAgICByZXR1cm4gb2JzLnBpcGUobWVyZ2VNYXAoKCkgPT4gb2JzTWVyZ2UpLCAodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzO1xuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlT3JpZ2luSW1hZ2VTaXplKCkge1xuICAgIGxldCB3aWR0aCA9IHRoaXMub3JpZ2luV2lkdGgoKTtcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5vcmlnaW5IZWlnaHQoKTtcbiAgICBjb25zdCByYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xuXG4gICAgaWYgKHdpZHRoID49IGhlaWdodCkge1xuICAgICAgd2lkdGggPSBNYXRoLm1pbih0aGlzLmNvbnRhaW5lcldpZHRoKCksIHdpZHRoKTtcbiAgICAgIGhlaWdodCA9IE1hdGgubWluKHdpZHRoIC8gcmF0aW8sIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgd2lkdGggPSBoZWlnaHQgKiByYXRpbztcbiAgICB9IGVsc2Uge1xuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4odGhpcy5jb250YWluZXJIZWlnaHQoKSwgaGVpZ2h0KTtcbiAgICAgIHdpZHRoID0gaGVpZ2h0ICogcmF0aW87XG4gICAgfVxuICAgIHRoaXMuc2V0SW1hZ2VQb3NpdGlvbih3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbWFnZVBvc2l0aW9uKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuY29udGFpbmVyV2lkdGgoKSAvIDIgLSB3aWR0aCAvIDI7XG4gICAgY29uc3QgdG9wID0gdGhpcy5jb250YWluZXJIZWlnaHQoKSAvIDIgLSBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IHN0eWxlcyA9IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0LCBkaXNwbGF5OiAnYmxvY2snIH07XG5cbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgc3R5bGVzKTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHN0eWxlcyk7XG4gICAgdGhpcy5zZXRDaXJjbGVQb3NpdGlvbihzdHlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaXJjbGVQb3NpdGlvbihzdHlsZXM6IElTdHlsZXMpIHtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY2lyY2xlVEwoKSwgeyB0b3A6IChzdHlsZXMudG9wIHx8IDApIC0gNSwgbGVmdDogKHN0eWxlcy5sZWZ0IHx8IDApIC0gNSB9KTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY2lyY2xlVFIoKSwgeyB0b3A6IChzdHlsZXMudG9wIHx8IDApIC0gNSwgbGVmdDogKHN0eWxlcy5sZWZ0IHx8IDApICsgKHN0eWxlcy53aWR0aCB8fCAwKSAtIDEwIH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVCTCgpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgKyAoc3R5bGVzLmhlaWdodCB8fCAwKSAtIDEwLCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgLSA1IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVCUigpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgKyAoc3R5bGVzLmhlaWdodCB8fCAwKSAtIDEwLCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgKyAoc3R5bGVzLndpZHRoIHx8IDApIC0gMTAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNyb3BBcmVhUG9zKCkge1xuICAgIGNvbnN0IFtpbWdUb3AsIGltZ0xlZnQsIGltZ1dpZHRoLCBpbWdIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LCBbJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0JywgJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCddKTtcblxuICAgIGNvbnN0IHJlY3RJbWc6IElCb3VuZGluZ0NsaWVudFJlY3QgPSB7XG4gICAgICB0b3A6IE1hdGgubWF4KDAsIGltZ1RvcCksXG4gICAgICBsZWZ0OiBNYXRoLm1heCgwLCBpbWdMZWZ0KSxcbiAgICAgIHdpZHRoOiBpbWdXaWR0aCxcbiAgICAgIGhlaWdodDogaW1nSGVpZ2h0XG4gICAgfTtcblxuICAgIHJlY3RJbWcud2lkdGggPSBNYXRoLm1pbihpbWdXaWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpIC0gaW1nTGVmdCk7XG4gICAgaWYgKGltZ0xlZnQgPCAwKSB7XG4gICAgICByZWN0SW1nLndpZHRoID0gTWF0aC5taW4oaW1nV2lkdGggKyBpbWdMZWZ0LCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgIH1cbiAgICByZWN0SW1nLmhlaWdodCA9IE1hdGgubWluKGltZ0hlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSAtIGltZ1RvcCk7XG4gICAgaWYgKGltZ1RvcCA8IDApIHtcbiAgICAgIHJlY3RJbWcuaGVpZ2h0ID0gTWF0aC5taW4oaW1nVG9wICsgaW1nSGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICB9XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICghdGhpcy5yYXRpb1ZhbHVlKCkpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCByZWN0SW1nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgd2lkdGggPSByZWN0SW1nLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB3aWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuXG4gICAgd2lkdGggPSBNYXRoLm1pbihyZWN0SW1nLndpZHRoLCB3aWR0aCk7XG4gICAgaGVpZ2h0ID0gd2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICBoZWlnaHQgPSBNYXRoLm1pbihyZWN0SW1nLmhlaWdodCwgaGVpZ2h0KTtcbiAgICB3aWR0aCA9IGhlaWdodCAqIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgIGNvbnN0IHRvcCA9IHJlY3RJbWcudG9wICsgKHJlY3RJbWcuaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgbGVmdCA9IHJlY3RJbWcubGVmdCArIChyZWN0SW1nLndpZHRoIC0gd2lkdGgpIC8gMjtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3JvcFJhdGlvVmFsdWUoKSB7XG4gICAgY29uc3QgY3JvcFJhdGlvID0gdGhpcy5hc3BlY3RSYXRpbygpIHx8IHRoaXMuY3JvcFJhdGlvSXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkKCkpO1xuXG4gICAgaWYgKCFjcm9wUmF0aW8pIHtcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbldpZHRoKCkgLyB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIH1cblxuICAgIHJldHVybiBjcm9wUmF0aW8udmFsdWUgPz8gMDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUmVjdENsaXBQb3MoKSB7XG4gICAgY29uc3QgcmVhY3RDbGlwID0gdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG5cbiAgICB0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2xpcCA9IGByZWN0KCR7cmVhY3RDbGlwLnRvcH1weCwgJHtyZWFjdENsaXAucmlnaHR9cHgsICR7cmVhY3RDbGlwLmJvdHRvbX1weCwgJHtyZWFjdENsaXAubGVmdH1weClgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWN0Q2xpcEltYWdlKCkge1xuXG4gICAgY29uc3QgaW1hZ2VSZWN0ID0gdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmICghaW1hZ2VSZWN0LndpZHRoKSB7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlY3RDbGlwKCk7XG4gICAgfVxuICAgIGNvbnN0IGNyb3BSZWN0ID0gdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLnJvdW5kKGNyb3BSZWN0LndpZHRoKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLnJvdW5kKGNyb3BSZWN0LmhlaWdodCk7XG4gICAgY29uc3QgbGVmdCA9IGNyb3BSZWN0LmxlZnQgLSBpbWFnZVJlY3QubGVmdDtcbiAgICBjb25zdCB0b3AgPSBjcm9wUmVjdC50b3AgLSBpbWFnZVJlY3QudG9wO1xuICAgIGNvbnN0IHJpZ2h0ID0gTWF0aC5yb3VuZChsZWZ0ICsgd2lkdGgpO1xuICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgucm91bmQodG9wICsgaGVpZ2h0KTtcbiAgICBjb25zdCByYXRpbyA9IHRoaXMub3JpZ2luV2lkdGgoKSAvIGltYWdlUmVjdC53aWR0aDtcblxuXG4gICAgdGhpcy5yZWN0Q2xpcC5zZXQoeyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5jcm9wU2l6ZS5zZXQoe1xuICAgICAgaGVpZ2h0OiB0b3AgPj0gMCA/IChNYXRoLnJvdW5kKChib3R0b20gLSB0b3ApICogcmF0aW8pKSA6IChNYXRoLmZsb29yKChib3R0b20gLSB0b3ApICogcmF0aW8pKSxcbiAgICAgIHdpZHRoOiB0b3AgPj0gMCA/IChNYXRoLnJvdW5kKCgocmlnaHQgLSBsZWZ0KSAqICh0aGlzLnJhdGlvVmFsdWUoKSA/PyAxKSkgKiByYXRpbykpIDogKE1hdGguZmxvb3IoKChyaWdodCAtIGxlZnQpICogKHRoaXMucmF0aW9WYWx1ZSgpID8/IDEpKSAqIHJhdGlvKSlcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnJlY3RDbGlwKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJNb3VzZW1vdmUoZTogYW55KSB7XG4gICAgY29uc3QgdHlwZVN0YXRlID0gWydCTCcsICdUTCcsICdUUicsICdCUicsICdWTCcsICdWUicsICdIVCcsICdIQiddO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBgcmVzaXplQ3JvcEZvbGxvdyR7dGhpcy5yZXNpemVTdGF0ZSgpfURpcmA7IC8vIHJlc2l6ZUNyb3BGb2xsb3dCTERpciwgcmVzaXplQ3JvcEZvbGxvd1RMRGlyLCByZXNpemVDcm9wRm9sbG93VFJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dCUkRpciwgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyLCByZXNpemVDcm9wRm9sbG93VlJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dIVERpciwgcmVzaXplQ3JvcEZvbGxvd0hCRGlyXG5cbiAgICBpZiAodHlwZVN0YXRlLmluY2x1ZGVzKHRoaXMucmVzaXplU3RhdGUoKSkpIHtcbiAgICAgICh0aGlzIGFzIGFueSlbbWV0aG9kTmFtZV0oZSk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb3ZlU3RhdGUoKSkge1xuICAgICAgY2FzZSAnY2xpcCc6XG4gICAgICAgIHRoaXMubW92ZUNsaXBBcmVhKGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICB0aGlzLm1vdmVJbWFnZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dCTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogLTEsIGhlaWdodDogMSwgbGVmdDogMSwgdG9wOiAwIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyB0aGlzLnJhdGlvVmFsdWUoKSAqIG1vbWVudFkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUUkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlV2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IC0xLCBsZWZ0OiAwLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBoZWlnaHQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93QlJEaXIoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IHRoaXMucmF0aW9WYWx1ZSgpID8gbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IDAsIHRvcDogMCB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFggLyB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZSRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRYIC8gdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wIH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogLTEsIGxlZnQ6IDAsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIVERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIQkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IC0xLCB0b3A6IDAgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgaGVpZ2h0LCBsZWZ0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcml2YXRlIGdldFJlY3RSZXNpemVDcm9wRm9sbG93KHJhdGlvOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0sIG1vbWVudFg6IG51bWJlciwgbW9tZW50WTogbnVtYmVyKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIG1vbWVudFggKiByYXRpby53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgKyBtb21lbnRZICogcmF0aW8uaGVpZ2h0O1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFkgKiByYXRpby50b3A7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYICogcmF0aW8ubGVmdDtcblxuICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V1cCgpIHtcbiAgICB0aGlzLmltYWdlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldCgnbm9uZScpO1xuICAgIHRoaXMubW92ZVN0YXRlLnNldCgnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V3aGVlbChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmhhc1pvb20oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xuICAgICAgdGhpcy56b29tSW1hZ2UoMSAvIDEuMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy56b29tSW1hZ2UoMS4xKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZVN0YXRlKCkgPT09ICdub25lJyAmJiB0aGlzLm1vdmVTdGF0ZSgpID09PSAnbm9uZScpIHtcbiAgICAgIHRoaXMubW92ZVN0YXRlLnNldCgnaW1hZ2UnKTtcbiAgICAgIHRoaXMuaGFuZGxlck1vdXNlZG93bihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJDcm9wUmVzaXplKGU6IGFueSwgcmVzaXplVHlwZTogVFlQRV9SRVNJWkVfU1RBVEUpIHtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldChyZXNpemVUeXBlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZTogYW55KSB7XG4gICAgdGhpcy5tb3ZlU3RhdGUuc2V0KCdjbGlwJyk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VUb3AsIGltYWdlTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1ncmFiYmluZycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NsaXAnOlxuICAgICAgICBpZiAod2lkdGggPT09IGltYWdlV2lkdGggJiYgaGVpZ2h0ID09PSBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRNb3VzZURpbS5zZXQoe1xuICAgICAgY2xpZW50WDogZS5jbGllbnRYLFxuICAgICAgY2xpZW50WTogZS5jbGllbnRZLFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3A6IHRvcCxcbiAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICBpbWFnZVRvcDogaW1hZ2VUb3AsXG4gICAgICBpbWFnZUxlZnQ6IGltYWdlTGVmdCxcbiAgICAgIGltYWdlV2lkdGg6IGltYWdlV2lkdGgsXG4gICAgICBpbWFnZUhlaWdodDogaW1hZ2VIZWlnaHRcbiAgICB9KTtcbiAgICB0aGlzLnJhdGlvVmFsdWUuc2V0KHRoaXMuZ2V0Q3JvcFJhdGlvVmFsdWUoKSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVJbWFnZShlOiBJRXZlbnQpIHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBpbWdUb3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIG1vbWVudFk7XG4gICAgY29uc3QgaW1nTGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdCArIG1vbWVudFg7XG4gICAgY29uc3QgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgbW9tZW50WTtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIG1vbWVudFg7XG5cblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHRvcDogaW1nVG9wLCBsZWZ0OiBpbWdMZWZ0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyB0b3A6IGltZ1RvcCwgbGVmdDogaW1nTGVmdCB9KTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQgfSk7XG4gICAgdGhpcy5zZXRDaXJjbGVQb3NpdGlvbih7IHRvcDogaW1nVG9wLCBsZWZ0OiBpbWdMZWZ0LCB3aWR0aDogdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUhlaWdodCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUNsaXBBcmVhKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFtpbWdXaWR0aCwgaW1nSGVpZ2h0LCBpbWdUb3AsIGltZ0xlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCBbY3JvcFdpZHRoLCBjcm9wSGVpZ2h0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCddKTtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBsZXQgdG9wID0gTWF0aC5tYXgoaW1nVG9wLCB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyBtb21lbnRZKTtcbiAgICBsZXQgbGVmdCA9IE1hdGgubWF4KGltZ0xlZnQsIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYKTtcblxuICAgIHRvcCA9IE1hdGgubWluKHRvcCwgaW1nVG9wICsgaW1nSGVpZ2h0IC0gY3JvcEhlaWdodCk7XG4gICAgbGVmdCA9IE1hdGgubWluKGxlZnQsIGltZ0xlZnQgKyBpbWdXaWR0aCAtIGNyb3BXaWR0aCk7XG5cbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQgfSwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHpvb21JbWFnZShzY2FsZTogbnVtYmVyKSB7XG4gICAgY29uc3QgW2N1cnJXaWR0aCwgY3VyckhlaWdodCwgY3VyclRvcCwgY3VyckxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoY3VycldpZHRoICogc2NhbGUsIDUwKTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB3aWR0aCAvIHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGN1cnJlbnQgdmlld1xuICAgIGNvbnN0IGNlbnRlclggPSBjdXJyTGVmdCArIGN1cnJXaWR0aCAvIDI7XG4gICAgY29uc3QgY2VudGVyWSA9IGN1cnJUb3AgKyBjdXJySGVpZ2h0IC8gMjtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgcG9zaXRpb24gdG8gbWFpbnRhaW4gY2VudGVyIHBvaW50XG4gICAgY29uc3QgdG9wID0gY2VudGVyWSAtIGhlaWdodCAvIDI7XG4gICAgY29uc3QgbGVmdCA9IGNlbnRlclggLSB3aWR0aCAvIDI7XG5cbiAgICAvLyBHZXQgY3VycmVudCBjcm9wIGFyZWEgZGltZW5zaW9ucyBhbmQgcG9zaXRpb25cbiAgICBsZXQgW2Nyb3BXaWR0aCwgY3JvcEhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgY29uc3QgW2Nyb3BUb3AsIGNyb3BMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LCBbJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuXG4gICAgLy8gU2NhbGUgY3JvcCBhcmVhIGRpbWVuc2lvbnMgcHJvcG9ydGlvbmFsbHlcbiAgICBjcm9wV2lkdGggPSBjcm9wV2lkdGggKiBzY2FsZTtcbiAgICBjcm9wSGVpZ2h0ID0gY3JvcEhlaWdodCAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG5ldyBjcm9wIGFyZWEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGltYWdlXG4gICAgY29uc3QgY3JvcFRvcE5ldyA9IHRvcCArIChjcm9wVG9wIC0gY3VyclRvcCkgKiBzY2FsZTtcbiAgICBjb25zdCBjcm9wTGVmdE5ldyA9IGxlZnQgKyAoY3JvcExlZnQgLSBjdXJyTGVmdCkgKiBzY2FsZTtcblxuICAgIC8vIEVuc3VyZSBjcm9wIGFyZWEgc3RheXMgd2l0aGluIGJvdW5kc1xuICAgIGNvbnN0IG1heENyb3BXaWR0aCA9IHdpZHRoO1xuICAgIGNvbnN0IG1heENyb3BIZWlnaHQgPSBoZWlnaHQ7XG4gICAgY29uc3QgbWluV2lkdGggPSAyMDtcbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMDtcblxuICAgIGNyb3BXaWR0aCA9IE1hdGgubWluKGNyb3BXaWR0aCwgbWF4Q3JvcFdpZHRoKTtcbiAgICBjcm9wSGVpZ2h0ID0gTWF0aC5taW4oY3JvcEhlaWdodCwgbWF4Q3JvcEhlaWdodCk7XG4gICAgY3JvcFdpZHRoID0gTWF0aC5tYXgoY3JvcFdpZHRoLCBtaW5XaWR0aCk7XG4gICAgY3JvcEhlaWdodCA9IE1hdGgubWF4KGNyb3BIZWlnaHQsIG1pbkhlaWdodCk7XG5cbiAgICB0aGlzLnJhdGlvVmFsdWUuc2V0KHRoaXMuZ2V0Q3JvcFJhdGlvVmFsdWUoKSk7XG4gICAgaWYgKHRoaXMucmF0aW9WYWx1ZSgpKSB7XG4gICAgICBjcm9wSGVpZ2h0ID0gY3JvcFdpZHRoIC8gdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICBjcm9wSGVpZ2h0ID0gTWF0aC5taW4oY3JvcEhlaWdodCwgbWF4Q3JvcEhlaWdodCk7XG4gICAgICBjcm9wSGVpZ2h0ID0gTWF0aC5tYXgoY3JvcEhlaWdodCwgbWluSGVpZ2h0KTtcbiAgICAgIGNyb3BXaWR0aCA9IGNyb3BIZWlnaHQgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY2xpcHBpbmcgcmVjdGFuZ2xlXG4gICAgdGhpcy5yZWN0Q2xpcC51cGRhdGUocmVjdCA9PiB7XG4gICAgICBjb25zdCByZWN0VG9wID0gY3JvcFRvcE5ldyAtIHRvcDtcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gY3JvcExlZnROZXcgLSBsZWZ0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVjdCxcbiAgICAgICAgdG9wOiByZWN0VG9wLFxuICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgcmlnaHQ6IHJlY3RMZWZ0ICsgY3JvcFdpZHRoLFxuICAgICAgICBib3R0b206IHJlY3RUb3AgKyBjcm9wSGVpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2xpcCA9IGByZWN0KCR7dGhpcy5yZWN0Q2xpcCgpLnRvcH1weCwgJHt0aGlzLnJlY3RDbGlwKCkucmlnaHR9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmJvdHRvbX1weCwgJHt0aGlzLnJlY3RDbGlwKCkubGVmdH1weClgO1xuXG4gICAgLy8gVXBkYXRlIGFsbCBlbGVtZW50cyB3aXRoIG5ldyBwb3NpdGlvbnMgYW5kIGRpbWVuc2lvbnNcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3A6IGNyb3BUb3BOZXcsIGxlZnQ6IGNyb3BMZWZ0TmV3LCB3aWR0aDogY3JvcFdpZHRoLCBoZWlnaHQ6IGNyb3BIZWlnaHQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgdG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IGNsaXAsIHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUm90YXRlSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXG4gICAgICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBvcmlnaW5IZWlnaHQgPSB0aGlzLmltYWdlLmhlaWdodDtcbiAgICAgIGxldCB0b3AgPSBwYXJzZUludCh0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zdHlsZS50b3ApO1xuICAgICAgbGV0IGxlZnQgPSBwYXJzZUludCh0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0KTtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSB3aWR0aDtcbiAgICAgIGxldCBuZXdXaWR0aCA9IGhlaWdodDtcbiAgICAgIGNvbnN0IHJhdGlvID0gbmV3V2lkdGggLyBuZXdIZWlnaHQ7XG5cbiAgICAgIGNhbnZhcy5oZWlnaHQgPSBvcmlnaW5XaWR0aDtcbiAgICAgIGNhbnZhcy53aWR0aCA9IG9yaWdpbkhlaWdodDtcbiAgICAgIGN0eD8udHJhbnNsYXRlKG9yaWdpbkhlaWdodCAvIDIsIG9yaWdpbldpZHRoIC8gMik7XG4gICAgICBjdHg/LnJvdGF0ZShNYXRoLlBJIC8gMik7XG4gICAgICBjdHg/LmRyYXdJbWFnZSh0aGlzLmltYWdlLCAtb3JpZ2luV2lkdGggLyAyLCAtb3JpZ2luSGVpZ2h0IC8gMik7XG4gICAgICBjb25zdCBzcmMgPSBnZXREYXRhVXJsKGNhbnZhcywgdGhpcy5taW1ldHlwZSgpLCB0aGlzLmltYWdlLnNyYyk7XG5cbiAgICAgIHRoaXMuaW1nU3JjLnNldChzcmMpO1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1heChuZXdXaWR0aCwgb3JpZ2luSGVpZ2h0KTtcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5taW4obmV3V2lkdGgsIHRoaXMuY29udGFpbmVyV2lkdGgoKSk7XG4gICAgICBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvO1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5tYXgobmV3SGVpZ2h0LCBvcmlnaW5XaWR0aCk7XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbihuZXdIZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiByYXRpbztcbiAgICAgIHRvcCA9IHRvcCAtIChuZXdIZWlnaHQgLyAyIC0gaGVpZ2h0IC8gMik7XG4gICAgICBsZWZ0ID0gbGVmdCAtIChuZXdXaWR0aCAvIDIgLSB3aWR0aCAvIDIpO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHNyYywgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5nZXRPcmlnaW5hbEltYWdlU2l6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY3JvcFNpemUuc2V0KHsgd2lkdGg6IHRoaXMub3JpZ2luV2lkdGgoKSwgaGVpZ2h0OiB0aGlzLm9yaWdpbkhlaWdodCgpIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9yaWdpbmFsSW1hZ2VTaXplKGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KHRoaXMuaW1hZ2Uud2lkdGgpO1xuICAgICAgdGhpcy5vcmlnaW5IZWlnaHQuc2V0KHRoaXMuaW1hZ2UuaGVpZ2h0KTtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoYW5nZWRJbWFnZShzdGF0dXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNoYW5nZWQuc2V0KHN0YXR1cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZsaXBJbWFnZShldmVudDogRXZlbnQsIG1vZGU6ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlLmhlaWdodDtcblxuICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSh3aWR0aCwgMCk7XG4gICAgICAgICAgY3R4LnNjYWxlKC0xLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgaGVpZ2h0KTtcbiAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhVXJsID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICB0aGlzLmltZ1NyYy5zZXQoZGF0YVVybCk7XG4gICAgICB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LnNyYyA9IGRhdGFVcmw7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXN0b3JlSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWdTcmMuc2V0KHRoaXMuZGF0YVVybE9yaWdpbigpKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZ2V0T3JpZ2luYWxJbWFnZVNpemUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKGZhbHNlKTtcbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldCgnJyk7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyb3BJbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gb3JpZ2luV2lkdGggLyB3aWR0aDtcbiAgICAgICAgY29uc3QgcmVjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcbiAgICAgICAgY29uc3QgY3JvcFJlY3QgPSBnZXRDcm9wUmVjdEltYWdlKHJlY3RDbGlwLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZSk7XG5cbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGNyb3BSZWN0LmhlaWdodDtcbiAgICAgICAgY2FudmFzLndpZHRoID0gY3JvcFJlY3Qud2lkdGg7XG4gICAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldChjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQoY2FudmFzLndpZHRoKTtcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgY3JvcFJlY3QubGVmdCwgY3JvcFJlY3QudG9wLCBjcm9wUmVjdC53aWR0aCwgY3JvcFJlY3QuaGVpZ2h0LCAwLCAwLCBjcm9wUmVjdC53aWR0aCwgY3JvcFJlY3QuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhVXJsID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgICAgICByZXNvbHZlKGRhdGFVcmwpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2F2ZUZpbGUoZXZlbnQ6IEV2ZW50LCBtb2RlU2F2ZTogVFlQRV9NT0RFX1NBVkUpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5jcm9wSW1hZ2UoKTtcbiAgICBjb25zdCBmaWxlID0gY29udmVydEJhc2U2NFRvQmxvYihkYXRhVXJsKTtcblxuICAgIHRoaXMub3V0U2F2ZUZpbGUuZW1pdCh7IGZpbGU6IGZpbGUsIHVybDogZGF0YVVybCwgbW9kZTogbW9kZVNhdmUgfSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xvc2UoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5vdXRDbG9zZS5lbWl0KHsgaXNDbGlja0J1dHRvbkNsb3NlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RDcm9wUmF0aW9JdGVtKGV2ZW50OiBFdmVudCwga2V5OiBzdHJpbmcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNyb3BSYXRpb0l0ZW1TZWxlY3RlZC5zZXQoa2V5KTtcbiAgICB0aGlzLmNoYW5nZWQuc2V0KHRydWUpO1xuICAgIHRoaXMuZHJhZ0dyaWRDcm9wLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNpemUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucmVzaXplQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzaXplQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JSZXNpemVDb21wb25lbnQpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5yZXNpemVDb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgY29uc3Qgc3VicyA9IGluc3RhbmNlLm91dENsb3NlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZik7XG4gICAgICB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGluc3RhbmNlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgaW5zdGFuY2UubWltZXR5cGUgPSB0aGlzLm1pbWV0eXBlKCk7XG4gICAgaW5zdGFuY2UuekluZGV4ID0gdGhpcy56SW5kZXgoKTtcbiAgICBzdWJzLmFkZChpbnN0YW5jZS5vdXRTYXZlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICB0aGlzLnJlc2l6ZURhdGEuc2V0KGV2ZW50KTtcbiAgICAgIHRoaXMuc2F2ZVJlc2l6ZSgpO1xuICAgIH0pKTtcbiAgICBpbnN0YW5jZS5yZXNpemVEYXRhID0geyByYXRpbzogMTAwLCB3aWR0aDogdGhpcy5vcmlnaW5XaWR0aCgpLCBoZWlnaHQ6IHRoaXMub3JpZ2luSGVpZ2h0KCkgfTtcbiAgICBpbnN0YW5jZS5vcmlnaW5XaWR0aCA9IHRoaXMub3JpZ2luV2lkdGgoKTtcbiAgICBpbnN0YW5jZS5vcmlnaW5IZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlUmVzaXplKCkge1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgICBjYW52YXMud2lkdGggPSB0aGlzLnJlc2l6ZURhdGEoKS53aWR0aDtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQ7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzcmMgPSBnZXREYXRhVXJsKGNhbnZhcywgdGhpcy5taW1ldHlwZSgpLCB0aGlzLmltYWdlLnNyYyk7XG4gICAgICBjb25zdCBbY3VycldpZHRoLCBjdXJySGVpZ2h0LCBjdXJyVG9wLCBjdXJyTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgICBjb25zdCByYXRpbyA9IGN1cnJXaWR0aCAvIGN1cnJIZWlnaHQ7XG4gICAgICBsZXQgbmV3V2lkdGggPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpKTtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvO1xuXG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiByYXRpbztcbiAgICAgIE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLmhlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBjb25zdCB0b3AgPSBjdXJyVG9wICsgKGN1cnJIZWlnaHQgLSBuZXdIZWlnaHQpIC8gMjtcbiAgICAgIGNvbnN0IGxlZnQgPSBjdXJyTGVmdCArIChjdXJyV2lkdGggLSBuZXdXaWR0aCkgLyAyO1xuICAgICAgY29uc3QgbW92ZW1lbnRZID0gY3VyclRvcCAtIHRvcDtcbiAgICAgIGNvbnN0IG1vdmVtZW50WCA9IGN1cnJMZWZ0IC0gbGVmdDtcblxuICAgICAgdGhpcy5yZWN0Q2xpcC51cGRhdGUocmVjdCA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3RUb3AgPSByZWN0LnRvcCArIG1vdmVtZW50WTtcbiAgICAgICAgY29uc3QgcmVjdExlZnQgPSByZWN0LmxlZnQgKyBtb3ZlbWVudFg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVjdCxcbiAgICAgICAgICB0b3A6IHJlY3RUb3AsXG4gICAgICAgICAgbGVmdDogcmVjdExlZnQsXG4gICAgICAgICAgcmlnaHQ6IHJlY3RMZWZ0ICsgbmV3V2lkdGgsXG4gICAgICAgICAgYm90dG9tOiByZWN0VG9wICsgbmV3SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHNyYywgY2xpcCwgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5pbWdTcmMuc2V0KHNyYyk7XG4gICAgICB0aGlzLm9yaWdpbldpZHRoLnNldCh0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCk7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5yZXNpemVEYXRhKCkuaGVpZ2h0KTtcbiAgICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICAgIHRoaXMudXBkYXRlUmVjdENsaXBQb3MoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNyb3BXaWR0aCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnd2lkdGgnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ3JvcEhlaWdodCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnaGVpZ2h0Jyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDcm9wV2lkdGhPckhlaWdodChjcm9wQnk6ICd3aWR0aCcgfCAnaGVpZ2h0Jykge1xuICAgIHRoaXMucmF0aW9WYWx1ZS5zZXQodGhpcy5nZXRDcm9wUmF0aW9WYWx1ZSgpKTtcbiAgICBjb25zdCBbY3VyckltZ1dpZHRoLCBjdXJySW1nSGVpZ2h0LCBjdXJySW1nVG9wLCBjdXJySW1nTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSBjdXJySW1nTGVmdCArIGN1cnJJbWdXaWR0aCAtIGNyb3BMZWZ0O1xuICAgIGNvbnN0IG1heENyb3BIZWlnaHQgPSBjdXJySW1nSGVpZ2h0ICsgY3VyckltZ1RvcCAtIGNyb3BUb3A7XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLm9yaWdpbldpZHRoKCkgLyBjdXJySW1nV2lkdGg7XG4gICAgbGV0IGNyb3BWYWx1ZSA9IGdldCh0aGlzLmNyb3BTaXplLCBjcm9wQnkpIC8gcmF0aW87XG5cbiAgICBjcm9wVmFsdWUgPSBNYXRoLm1pbihjcm9wVmFsdWUsIGNyb3BCeSA9PT0gJ3dpZHRoJyA/IG1heENyb3BXaWR0aCA6IG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BWYWx1ZSA9IE1hdGgubWF4KDEsIGNyb3BWYWx1ZSk7XG4gICAgaWYgKHRoaXMucmF0aW9WYWx1ZSgpKSB7XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnd2lkdGgnKSB7XG4gICAgICAgIGNyb3BIZWlnaHQgPSBjcm9wVmFsdWUgLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKGNyb3BTaXplID0+ICh7IC4uLmNyb3BTaXplLCBoZWlnaHQ6IE1hdGgucm91bmQoY3JvcEhlaWdodCAqIHJhdGlvKSB9KSk7XG4gICAgICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2Nyb3BIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgICAgaWYgKGNyb3BCeSA9PT0gJ2hlaWdodCcpIHtcbiAgICAgICAgY3JvcFdpZHRoID0gY3JvcFZhbHVlICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIGNyb3BXaWR0aCA9IE1hdGgubWluKGNyb3BXaWR0aCwgbWF4Q3JvcFdpZHRoKTtcbiAgICAgICAgY3JvcFZhbHVlID0gY3JvcFdpZHRoIC8gdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKGNyb3BTaXplID0+ICh7IC4uLmNyb3BTaXplLCB3aWR0aDogTWF0aC5yb3VuZChjcm9wV2lkdGggKiByYXRpbykgfSkpO1xuICAgICAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2Nyb3BXaWR0aH1weGA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKGNyb3BTaXplID0+ICh7IC4uLmNyb3BTaXplLCBbY3JvcEJ5XTogTWF0aC5yb3VuZChjcm9wVmFsdWUgKiByYXRpbykgfSkpO1xuICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlW2Nyb3BCeV0gPSBgJHtjcm9wVmFsdWV9cHhgO1xuICAgIGNvbnN0IGltYWdlUmVjdCA9IHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjcm9wUmVjdCA9IHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY3JvcFJlY3Q7XG4gICAgY29uc3QgbGVmdCA9IGNyb3BSZWN0LmxlZnQgLSBpbWFnZVJlY3QubGVmdDtcbiAgICBjb25zdCB0b3AgPSBjcm9wUmVjdC50b3AgLSBpbWFnZVJlY3QudG9wO1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHt0b3B9cHgsICR7cmlnaHR9cHgsICR7Ym90dG9tfXB4LCAke2xlZnR9cHgpYDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGVzRWxlbWVudHMoZWxlbWVudDogRWxlbWVudFJlZiwgc3R5bGVzOiBJU3R5bGVzLCBpc1VwZGF0ZVJlY3RDbGlwUG9zPzogYm9vbGVhbikge1xuICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQoc3R5bGVzLCBrZXkpO1xuICAgICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXQoZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLCBrZXksIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyBgJHt2YWx1ZX1weGAgOiB2YWx1ZSk7XG4gICAgfSk7XG4gICAgaWYgKGlzVXBkYXRlUmVjdENsaXBQb3MpIHtcbiAgICAgIHRoaXMudXBkYXRlUmVjdENsaXBQb3MoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZik7XG4gIH1cbn1cbiIsIjxsaWJzX3VpLWNvbXBvbmVudHMtbW9kYWwgW3dpZHRoXT1cIidjYWxjKDEwMHZ3IC0gNDAwcHgpJ1wiXG4gIFtoZWlnaHRdPVwiJ2NhbGMoMTAwdmggLSAxMDBweCknXCJcbiAgW21pbldpZHRoXT1cIicxMjAwcHgnXCJcbiAgW2hlYWRlckNvbmZpZ109XCJ7aWdub3JlSGVhZGVyVGhlbWU6IHRydWUsIHJlbW92ZUJ1dHRvbkNsb3NlOiB0cnVlfVwiXG4gIFtib2R5Q29uZmlnXT1cIntjbGFzc0luY2x1ZGU6ICchcC0wJywgc2Nyb2xsT3ZlcmxheU9wdGlvbnM6IHtzY3JvbGxYOiAnaGlkZGVuJywgc2Nyb2xsWTogJ2hpZGRlbid9fVwiXG4gIFtmb290ZXJDb25maWddPVwie2hpZGRlbjogdHJ1ZX1cIlxuICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgW2J1dHRvbnNGb290ZXJdPVwiW11cIlxuICBbbW9kZV09XCInY2VudGVyJ1wiPlxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1tb2RhbC1oZWFkZXItY3VzdG9tIHctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlIG14LVsyNHB4XSBoLVsxNnB4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGxpYnMtdWktZm9udC1oNHMgYWJzb2x1dGVcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7ekluZGV4OiB6SW5kZXgoKX1cIj5cbiAgICAgICAgICB7eyAnaTE4bl9lZGl0X2ZpbGVfbmFtZScgfCB0cmFuc2xhdGU6e2ZpbGVfbmFtZTogbmFtZUZpbGUoKX0gfX1cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgQGlmIChtb2RlU2hvd0J1dHRvbigpID09PSAnc2F2ZS1maWxlJykge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fY2FuY2VsJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0gbXItWzE2cHhdJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbG9zZSgkZXZlbnQpXCIgLz5cblxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGNsYXNzPVwibXItWzI0cHhdXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fc2F2ZSdcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncHktWzZweF0gcHgtWzEycHhdJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTYXZlRmlsZSgkZXZlbnQsJ3NhdmUtZmlsZScpXCIgLz5cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbbGFiZWxdPVwiJ2kxOG5fc2F2ZV90b19uZXdfZmlsZSdcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ214LVsxNnB4XSBweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTYXZlRmlsZSgkZXZlbnQsJ3NhdmUtYXBpLWFzLW5ldy1maWxlJylcIiAvPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgW2xhYmVsXT1cIidpMThuX3NhdmUnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTYXZlRmlsZSgkZXZlbnQsJ3NhdmUtYXBpJylcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC1bMTJweF0gbGlicy11aS1ib3JkZXItbGVmdC1nZW5lcmFsIG14LVsxNnB4XVwiPjwvZGl2PlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGNsYXNzPVwibXItWzI0cHhdXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs2cHhdJ1wiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi10aGlyZC1ob3Zlci1kYW5nZXInXCJcbiAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKVwiXG4gICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzoge2NvbnRlbnQ6ICdpMThuX2V4aXRfZWRpdF9tb2RlJywgekluZGV4OiB6SW5kZXgoKX19XCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWNsb3NlJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbG9zZSgkZXZlbnQpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLW1vZGFsLWJvZHktY3VzdG9tIGgtZnVsbCB3LWZ1bGwgZmxleFwiPlxuICAgIDxkaXYgI2ltYWdlRWRpdG9yQ29udGFpbmVyXG4gICAgICBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgYmctWyNlNmU3ZWFdIGJvcmRlci1yYWRpdXMtYm90dG9tLWxlZnQtOHB4IHAtWzMycHhdIGxpYnMtdWktaW5wdXQtaW1hZ2UtZWRpdG9yLWNvbnRhaW5lci1sZWZ0XCI+XG4gICAgICBAaWYgKGxvYWRpbmdJbWFnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIGJnLVsjZTZlN2VhXSB0b3AtMCBsZWZ0LTAgei1bNV1cIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIHRvcC0wIGxlZnQtWzMycHhdIHotWzFdXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB3LVszMnB4XSBoLWZ1bGwgYmctWyNlNmU3ZWFiOF0gbGVmdC0wIHRvcC0wIHotWzFdIHJvdW5kZWQtYmwtWzhweF1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHctWzMycHhdIGgtZnVsbCBiZy1bI2U2ZTdlYWI4XSByaWdodC0wIHRvcC0wIHotWzFdXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIGJvdHRvbS0wIGxlZnQtWzMycHhdIHotWzFdXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI2ltYWdlQ29udGFpbmVyXG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCByb3VuZGVkLWJsLVs4cHhdIG1pbi1oLTBcIj5cbiAgICAgICAgPGRpdiAjY2lyY2xlVExcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY2lyY2xlVFJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY2lyY2xlQkxcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY2lyY2xlQlJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGltZyAjaW1hZ2VPcmlnaW5cbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGJvcmRlci1bNHB4XSBib3JkZXItWyM4ZTYxZWVdIHJvdW5kZWQtWzRweF0gdG9wLVstMTAwMHB4XSBsZWZ0LVstMTAwMHB4XVwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgIFtzcmNdPVwiaW1nU3JjKClcIlxuICAgICAgICAgIChsb2FkKT1cImhhbmRsZXJJbWFnZUxvYWRlZCgpXCJcbiAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxpbWcgI2ltYWdlQ2xpcFxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gIHRvcC1bLTEwMDBweF0gbGVmdC1bLTEwMDBweF1cIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBbc3JjXT1cImltZ1NyYygpXCJcbiAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBib3R0b20tMCBiZy1bI2U2ZTdlYWI4XVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY3JvcEFyZWFcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIGJvcmRlci1bNHB4XSBib3JkZXItWyM4ZTYxZWVdIHJvdW5kZWQtWzRweF1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiAjY3JvcFRMXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gbGVmdC1bLTE4cHhdIHRvcC1bLTE3cHhdIGN1cnNvci1ud3NlLXJlc2l6ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BCTFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIGxlZnQtWy0xN3B4XSBib3R0b20tWy0xOHB4XSBjdXJzb3ItbmVzdy1yZXNpemUgcm90YXRlLVsyNzBkZWddXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAjY3JvcFRSXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gcmlnaHQtWy0xN3B4XSB0b3AtWy0xN3B4XSBjdXJzb3ItbmVzdy1yZXNpemUgcm90YXRlLVs5MGRlZ11cIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wQlJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSByaWdodC1bLTE4cHhdIGJvdHRvbS1bLTE3cHhdIGN1cnNvci1ud3NlLXJlc2l6ZSByb3RhdGUtWzE4MGRlZ11cIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZVZMXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gdy1bMTJweF0gbGVmdC1bLTZweF0gdG9wLTAgYm90dG9tLTAgY3Vyc29yLWV3LXJlc2l6ZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZVZSXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gdy1bMTJweF0gcmlnaHQtWy02cHhdIHRvcC0wIGJvdHRvbS0wIGN1cnNvci1ldy1yZXNpemVcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAjY3JvcExpbmVIVFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIGgtWzEycHhdIGxlZnQtMCB0b3AtWy02cHhdIHJpZ2h0LTAgY3Vyc29yLW5zLXJlc2l6ZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZUhCXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gaC1bMTJweF0gbGVmdC0wIHJpZ2h0LTAgYm90dG9tLVstNnB4XSBjdXJzb3ItbnMtcmVzaXplXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzFweF0gdG9wLTAgbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSBoLVsxcHhdIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgdy1bMXB4XSB0b3AtMCBsZWZ0LTAgYm90dG9tLTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsxcHhdIHRvcC0wIGJvdHRvbS0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSBoLVsycHhdIHRvcC1bMzMlXSBsZWZ0LTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzJweF0gdG9wLVs2NiVdIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgdy1bMnB4XSB0b3AtMCBib3R0b20tMCBsZWZ0LVszMyVdXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgdy1bMnB4XSB0b3AtMCBib3R0b20tMCBsZWZ0LVs2NiVdXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LVszMjBweF0gc2hyaW5rLTAgcC1bMTZweF0gYmctWyNmZmZmZmZdIHJvdW5kZWQtYnItWzhweF0gei1bMl0gbGlicy11aS1pbnB1dC1pbWFnZS1lZGl0b3ItY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLVsxNnB4XVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg0bVwiPnt7ICdpMThuX2N1dHRpbmdfcmF0aW8nIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXRoaXJkJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yZWZyZXNoJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncC1bNnB4XSBtci1bOHB4XSdcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cIntjb25maWc6IHtjb250ZW50OiAnaTE4bl9yZXN0b3JlX3RoZV9vcmlnaW5hbF9zdGF0ZScsIHpJbmRleDogekluZGV4KCl9fVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpIHx8ICFjaGFuZ2VkKClcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVzdG9yZUltYWdlKCRldmVudClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItWzE2cHhdIGxpYnMtdWktaW1hZ2UtZWRpdG9yLWVkaXQtZGlzcGxheS1ncmlkLWdhcC0xNlwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGNyb3BSYXRpb0l0ZW1zKCk7IHRyYWNrIGl0ZW0ua2V5KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidsYXJnZSdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgcmVxdWlyZWRDcm9wRm9sbG93UmF0aW8oKVwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJpdGVtLmljb24rJyAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cIml0ZW0ua2V5ID09PSBjcm9wUmF0aW9JdGVtU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2VsZWN0Q3JvcFJhdGlvSXRlbSgkZXZlbnQsIGl0ZW0ua2V5KVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAgICB7eyAoaXRlbS5rZXkgPT09ICdmcmVlJyA/ICdpMThuX2N1c3RvbScgOiBpdGVtLmtleSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1bMTZweF0gZmxleFwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCBjbGFzcz1cIm1yLVsxNnB4XVwiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbGFiZWxDb25maWddPVwie2xhYmVsTGVmdDogJ2kxOG5fd2lkdGgnLCBjbGFzc0luY2x1ZGU6ICdtYi1bNHB4XScsIGxhYmVsTGVmdENsYXNzOiAnbGlicy11aS1mb250LWg3cid9XCJcbiAgICAgICAgICBbZmllbGROYW1lQmluZF09XCInd2lkdGgnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cImNyb3BTaXplXCJcbiAgICAgICAgICBbdW5pdHNSaWdodF09XCJbe2lkOiAncHgnLCBsYWJlbDogJ3B4J31dXCJcbiAgICAgICAgICBba2V5U2VsZWN0ZWRVbml0UmlnaHRdPVwiJ3B4J1wiXG4gICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cIjFcIlxuICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJvcmlnaW5XaWR0aCgpXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyQ3JvcFdpZHRoKClcIiAvPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJ7bGFiZWxMZWZ0OiAnaTE4bl9sZW5ndGgnLCBjbGFzc0luY2x1ZGU6ICdtYi1bNHB4XScsIGxhYmVsTGVmdENsYXNzOiAnbGlicy11aS1mb250LWg3cid9XCJcbiAgICAgICAgICBbZmllbGROYW1lQmluZF09XCInaGVpZ2h0J1wiXG4gICAgICAgICAgWyhpdGVtKV09XCJjcm9wU2l6ZVwiXG4gICAgICAgICAgW3VuaXRzUmlnaHRdPVwiW3tpZDogJ3B4JywgbGFiZWw6ICdweCd9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwib3JpZ2luSGVpZ2h0KClcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgKG91dFZhbHVlQ2hhbmdlKT1cImhhbmRsZXJDcm9wSGVpZ2h0KClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg0bSBtYi1bMTZweF1cIj57eyAnaTE4bl9yb3RhdGVfcGhvdG9zJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggbGlicy11aS1pbWFnZS1lZGl0b3ItZWRpdC1kaXNwbGF5LWdyaWQtZ2FwLTE2XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidsYXJnZSdcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yb3RhdGUtaW1hZ2Utb3V0bGluZSAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUm90YXRlSW1hZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgIHt7ICdpMThuX3JvdGF0ZV9uaW5ldHlfZGVncmVlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWZsaXAtdmVydGljYWwgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckZsaXBJbWFnZSgkZXZlbnQsICd2ZXJ0aWNhbCcpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fdmVydGljYWxfZmxpcCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWZsaXAtaG9yaXpvbnRhbCAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRmxpcEltYWdlKCRldmVudCwgJ2hvcml6b250YWwnKVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgIHt7ICdpMThuX2hvcml6b250YWxfZmxpcCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXNjYWxlICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZXNpemUoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgIHt7ICdpMThuX3Jlc2l6ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2xpYnNfdWktY29tcG9uZW50cy1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNzdmdBcnJvdz5cbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICB3aWR0aD1cIjQwXCJcbiAgICBoZWlnaHQ9XCI0MFwiXG4gICAgdmlld0JveD1cIjAgMCA0MCA0MFwiXG4gICAgZmlsbD1cIm5vbmVcIj5cbiAgICA8cGF0aCBkPVwiTTMzLjY5ODcgMTQuNjk2OUwxOC4zMzA5IDE0LjY5NjlDMTYuNTE2IDE0LjY5NjkgMTUuMDMxMSAxNi4xODE4IDE1LjAzMTEgMTcuOTk2N0wxNS4wMzExIDMzLjM2NDVcIlxuICAgICAgc3Ryb2tlPVwid2hpdGVcIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiNS44MzMzM1wiXG4gICAgICBzdHJva2UtbWl0ZXJsaW1pdD1cIjEwXCJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICA8L3N2Zz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3ZnQ2lyY2xlPlxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgIHdpZHRoPVwiMTVcIlxuICAgIGhlaWdodD1cIjE1XCJcbiAgICB2aWV3Qm94PVwiMCAwIDE1IDE1XCJcbiAgICBmaWxsPVwibm9uZVwiPlxuICAgIDxjaXJjbGUgY3g9XCI3LjVcIlxuICAgICAgY3k9XCI3LjVcIlxuICAgICAgcj1cIjcuNVwiXG4gICAgICBmaWxsPVwid2hpdGVcIiAvPlxuICA8L3N2Zz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
781
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ltYWdlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFnQixVQUFVLEVBQWMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFC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QUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3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QUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBZTtRQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxH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Q0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBR25ELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzlGLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUss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LEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdEUsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQztJQUVRLHFCQUFxQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDOUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQzlHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDO1FB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SUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFVBQVUsSUFBSSxDQUFDO1lBQ2pFLENBQUM7WUFDRCxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsU0FBUyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDOUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsU0FBUyxJQUFJLENBQUM7WUFDL0QsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsU0FBUyxJQUFJLENBQUM7UUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN2RSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUU1QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxHQUFHLE9BQU8sS0FBSyxPQUFPLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztJQUNuRyxDQUFDO0lBRU8saUJBQWlCLENBQUMsT0FBbUIsRUFBRSxNQUFlLEVBQUUsbUJBQTZCO1FBQzNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsT0FBTztZQUNULENBQUM7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQXIyQlUsb0NBQW9DLGtCQStEZiw2QkFBNkI7NEZBL0RsRCxvQ0FBb0MsZ3NHQy9CakQsdWthQWdTQSxvMUNEclFJLGdCQUFnQixtSkFBRSxlQUFlLDRGQUFFLGdDQUFnQyxvZ0JBQUUsOEJBQThCLG10QkFDbkcsb0NBQW9DLHMxREFBRSxzQ0FBc0Msc2pCQUFFLGdDQUFnQzs7NEZBR3JHLG9DQUFvQztrQkFaaEQsU0FBUzsrQkFFRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEI7d0JBQ25HLG9DQUFvQyxFQUFFLHNDQUFzQyxFQUFFLGdDQUFnQztxQkFDL0c7OzBCQWlFWSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBJbmplY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lcic7XG5pbXBvcnQgeyBJQXNwZWN0UmF0aW8sIElCb3VuZGluZ0NsaWVudFJlY3QsIElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iLCBnZXQsIGlzTmlsLCBMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNyb3BSYXRpb25JdGVtcywgZ2V0Q3JvcFJlY3RJbWFnZSwgZ2V0RGF0YVVybCwgZ2V0U3R5bGVzT2ZFbGVtZW50LCBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3cgfSBmcm9tICcuL2RlZmluZXMvaW1hZ2UtZWRpdG9yLmRlZmluZSc7XG5pbXBvcnQgeyBJSW1hZ2VFZGl0b3JGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ3JvcFJhdGlvSXRlbSwgSUNyb3BTaXplLCBJUmVjdENsaXAsIElSZXNpemVEYXRhLCBJU2F2ZUZpbGUsIElTdGFydE1vdXNlRGltLCBJU3R5bGVzLCBNT0RFX0VESVQsIFRZUEVfTU9ERV9TQVZFLCBUWVBFX1JFU0laRV9TVEFURSB9IGZyb20gJy4vaW50ZXJmYWNlcy9pbWFnZS1lZGl0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWltYWdlX2VkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LCBUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0ltYWdlID0gc2lnbmFsKHRydWUpO1xuICBwcm90ZWN0ZWQgY2hhbmdlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBvcmlnaW5XaWR0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgb3JpZ2luSGVpZ2h0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBjcm9wUmF0aW9JdGVtcyA9IHNpZ25hbDxBcnJheTxJQ3JvcFJhdGlvSXRlbT4+KGNyb3BSYXRpb25JdGVtcygpKTtcbiAgcHJvdGVjdGVkIGNyb3BSYXRpb0l0ZW1TZWxlY3RlZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGNyb3BTaXplID0gc2lnbmFsPElDcm9wU2l6ZT4oeyB3aWR0aDogMjAsIGhlaWdodDogMjAgfSk7XG4gIHByb3RlY3RlZCByZXNpemVEYXRhID0gc2lnbmFsPElSZXNpemVEYXRhPih7IHJhdGlvOiAxMDAsIHdpZHRoOiA2MDAsIGhlaWdodDogODAwIH0pO1xuICBwcm90ZWN0ZWQgZHJhZ0dyaWRDcm9wID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGltYWdlID0gbmV3IEltYWdlKCk7XG4gIHByaXZhdGUgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIHByaXZhdGUgY29udGFpbmVySGVpZ2h0ID0gc2lnbmFsKDgwMCk7XG4gIHByaXZhdGUgY29udGFpbmVyV2lkdGggPSBzaWduYWwoMTIwMCk7XG4gIHByaXZhdGUgaW1nQ29udGFpbmVyUmVjdCA9IHNpZ25hbDxJQm91bmRpbmdDbGllbnRSZWN0Pih7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSByZWN0Q2xpcCA9IHNpZ25hbDxJUmVjdENsaXA+KHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xuICBwcml2YXRlIHJlc2l6ZVN0YXRlID0gc2lnbmFsPFRZUEVfUkVTSVpFX1NUQVRFPignbm9uZScpO1xuICBwcml2YXRlIG1vdmVTdGF0ZSA9IHNpZ25hbDwnY2xpcCcgfCAnaW1hZ2UnIHwgJ25vbmUnPignbm9uZScpO1xuICBwcml2YXRlIHN0YXJ0TW91c2VEaW0gPSBzaWduYWw8SVN0YXJ0TW91c2VEaW0+KHsgY2xpZW50WDogMCwgY2xpZW50WTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwLCBpbWFnZVRvcDogMCwgaW1hZ2VMZWZ0OiAwLCBpbWFnZVdpZHRoOiAwLCBpbWFnZUhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSBkYXRhVXJsT3JpZ2luID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJhdGlvVmFsdWUgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5IZWlnaHQgPSAyMDtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5XaWR0aCA9IDIwO1xuICBwcml2YXRlIHJlc2l6ZUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JSZXNpemVDb21wb25lbnQ+O1xuXG5cbiAgcmVhZG9ubHkgbW9kZVNob3dCdXR0b24gPSBpbnB1dDxNT0RFX0VESVQ+KCdzYXZlLWZpbGUnKTtcbiAgcmVhZG9ubHkgbWltZXR5cGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oMTIwMCk7XG4gIHJlYWRvbmx5IGltZ1NyYyA9IG1vZGVsLnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3JpZ2luVXJsID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBuYW1lRmlsZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaGFzWm9vbSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYXNwZWN0UmF0aW8gPSBpbnB1dDxJQXNwZWN0UmF0aW8+KCk7XG4gIHJlYWRvbmx5IHJlcXVpcmVkQ3JvcEZvbGxvd1JhdGlvID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGltYWdlT3JpZ2luID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdpbWFnZU9yaWdpbicpO1xuICByZWFkb25seSBpbWFnZUNsaXAgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlQ2xpcCcpO1xuICByZWFkb25seSBpbWFnZUVkaXRvckNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VFZGl0b3JDb250YWluZXInKTtcbiAgcmVhZG9ubHkgaW1hZ2VDb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlQ29udGFpbmVyJyk7XG4gIHJlYWRvbmx5IGNyb3BBcmVhID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wQXJlYScpO1xuICByZWFkb25seSBjcm9wVEwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BUTCcpO1xuICByZWFkb25seSBjcm9wQkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BCTCcpO1xuICByZWFkb25seSBjcm9wQlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BCUicpO1xuICByZWFkb25seSBjcm9wVFIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BUUicpO1xuICByZWFkb25seSBjcm9wTGluZVZMID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZVZMJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lVlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lVlInKTtcbiAgcmVhZG9ubHkgY3JvcExpbmVIVCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcExpbmVIVCcpO1xuICByZWFkb25seSBjcm9wTGluZUhCID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZUhCJyk7XG4gIHJlYWRvbmx5IGNpcmNsZVRMID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVUTCcpO1xuICByZWFkb25seSBjaXJjbGVUUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY2lyY2xlVFInKTtcbiAgcmVhZG9ubHkgY2lyY2xlQkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZUJMJyk7XG4gIHJlYWRvbmx5IGNpcmNsZUJSID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVCUicpO1xuXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHsgaXNDbGlja0J1dHRvbkNsb3NlOiBib29sZWFuIH0+KCk7XG4gIHJlYWRvbmx5IG91dFNhdmVGaWxlID0gb3V0cHV0PElTYXZlRmlsZT4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJSW1hZ2VFZGl0b3JGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZilcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCkgcHJpdmF0ZSBsaW5rSW1hZ2VFcnJvcjogc3RyaW5nKSB7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXNwZWN0UmF0aW8oKSkge1xuICAgICAgdGhpcy5kcmFnR3JpZENyb3Auc2V0KHRydWUpO1xuICAgICAgY29uc3QgYXNwZWN0UmF0aW9Gb3VuZCA9IHRoaXMuY3JvcFJhdGlvSXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IHRoaXMuYXNwZWN0UmF0aW8oKT8ua2V5KTtcblxuICAgICAgdGhpcy5jcm9wUmF0aW9JdGVtU2VsZWN0ZWQuc2V0KGFzcGVjdFJhdGlvRm91bmQ/LmtleSB8fCB0aGlzLmNyb3BSYXRpb0l0ZW1zKClbMF0ua2V5KTtcbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZU1vZGFsU2l6ZSgpO1xuICAgIHRoaXMuaW5pdERhdGEoKTtcbiAgICB0aGlzLmluaXRNb3VzZUV2ZW50KCk7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgY3JvcEltYWdlOiB0aGlzLmNyb3BJbWFnZS5iaW5kKHRoaXMpLFxuICAgICAgc2V0TG9hZGluZ1N0YXRlOiAobG9hZGluZzogYm9vbGVhbikgPT4gdGhpcy5sb2FkaW5nLnNldChsb2FkaW5nKVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUxvYWRlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTW9kYWxTaXplKCk7XG4gICAgICB0aGlzLmxvYWRpbmdJbWFnZS5zZXQoZmFsc2UpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCkge1xuICAgIGNvbnNvbGUubG9nKCdlJywgZSk7XG4gICAgKGUgYXMgSUV2ZW50KS50YXJnZXQuc3JjID0gdGhpcy5saW5rSW1hZ2VFcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kYWxTaXplKCkge1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwMDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gNDAwO1xuXG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQuc2V0KG1heEhlaWdodCAtIDEyNCk7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5zZXQobWF4V2lkdGggLSAzODQpO1xuICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhKCkge1xuICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgIHRoaXMuaW1hZ2Uuc2V0QXR0cmlidXRlKCdjcm9zc29yaWdpbicsICdhbm9ueW1vdXMnKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuaW1nQ29udGFpbmVyUmVjdC5zZXQodGhpcy5pbWFnZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5pbWFnZS5oZWlnaHQpO1xuICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQodGhpcy5pbWFnZS53aWR0aCk7XG5cbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpPy5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgICB0aGlzLmRhdGFVcmxPcmlnaW4uc2V0KGdldERhdGFVcmwodGhpcy5jYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpKTtcbiAgICAgIHRoaXMuaW1nU3JjLnNldCh0aGlzLmRhdGFVcmxPcmlnaW4oKSk7XG4gICAgfTtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNb3VzZUV2ZW50KCkge1xuICAgIGNvbnN0IG1vdXNlVXAgPSB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IGRvY3VtZW50IH0sICdtb3VzZXVwJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgdW5kZWZpbmVkLCAoKSA9PiB0aGlzLmhhbmRsZXJNb3VzZXVwKCkpO1xuICAgIGNvbnN0IG1vdXNlTW92ZSA9IHRoaXMuaW5pdEV2ZW50KHsgbmF0aXZlRWxlbWVudDogZG9jdW1lbnQgfSwgJ21vdXNlbW92ZScsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0pLnBpcGUodGFrZVVudGlsKG1vdXNlVXApKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuaW1hZ2VFZGl0b3JDb250YWluZXIoKSwgJ3doZWVsJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlIH0sIHVuZGVmaW5lZCwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZXdoZWVsKGUpKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IHdpbmRvdyB9LCAncmVzaXplJywge30sIHVuZGVmaW5lZCwgKCkgPT4gdGhpcy51cGRhdGVNb2RhbFNpemUoKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5pbWFnZUNvbnRhaW5lcigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGUpKS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdUTCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wQkwoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB7IHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ0JMJykgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BCUigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnQlInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcFRSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdUUicpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZVZMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdWTCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZVZSKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdWUicpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZUhUKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdIVCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wTGluZUhCKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdIQicpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wQXJlYSgpLCAnbW91c2Vkb3duJywge30sIHVuZGVmaW5lZCwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZWRvd25Dcm9wQXJlYShlKSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEV2ZW50KGVsZW1lbnQ6IEVsZW1lbnRSZWYsIGV2ZW50TmFtZTogc3RyaW5nLCBmbGFnOiB7IGNhbGxTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuLCBjYWxsUHJldmVudERlZmF1bHQ/OiBib29sZWFuIH0sIG9ic01lcmdlPzogT2JzZXJ2YWJsZTxFdmVudD4sIGNhbGxiYWNrPzogKGU6IEV2ZW50KSA9PiB2b2lkKTogT2JzZXJ2YWJsZTxFdmVudD4ge1xuICAgIGNvbnN0IG9icyA9IGZyb21FdmVudDxFdmVudD4oZWxlbWVudC5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUpLnBpcGUoXG4gICAgICB0YXAoKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChmbGFnLmNhbGxTdG9wUHJvcGFnYXRpb24gJiYgZT8uc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmxhZy5jYWxsUHJldmVudERlZmF1bHQgJiYgZT8ucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpO1xuXG4gICAgaWYgKG9ic01lcmdlKSB7XG4gICAgICByZXR1cm4gb2JzLnBpcGUobWVyZ2VNYXAoKCkgPT4gb2JzTWVyZ2UpLCAodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzO1xuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlT3JpZ2luSW1hZ2VTaXplKCkge1xuICAgIGxldCB3aWR0aCA9IHRoaXMub3JpZ2luV2lkdGgoKTtcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5vcmlnaW5IZWlnaHQoKTtcbiAgICBjb25zdCByYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xuXG4gICAgaWYgKHdpZHRoID49IGhlaWdodCkge1xuICAgICAgd2lkdGggPSBNYXRoLm1pbih0aGlzLmNvbnRhaW5lcldpZHRoKCksIHdpZHRoKTtcbiAgICAgIGhlaWdodCA9IE1hdGgubWluKHdpZHRoIC8gcmF0aW8sIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgd2lkdGggPSBoZWlnaHQgKiByYXRpbztcbiAgICB9IGVsc2Uge1xuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4odGhpcy5jb250YWluZXJIZWlnaHQoKSwgaGVpZ2h0KTtcbiAgICAgIHdpZHRoID0gaGVpZ2h0ICogcmF0aW87XG4gICAgfVxuICAgIHRoaXMuc2V0SW1hZ2VQb3NpdGlvbih3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbWFnZVBvc2l0aW9uKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuY29udGFpbmVyV2lkdGgoKSAvIDIgLSB3aWR0aCAvIDI7XG4gICAgY29uc3QgdG9wID0gdGhpcy5jb250YWluZXJIZWlnaHQoKSAvIDIgLSBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IHN0eWxlcyA9IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0LCBkaXNwbGF5OiAnYmxvY2snIH07XG5cbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgc3R5bGVzKTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHN0eWxlcyk7XG4gICAgdGhpcy5zZXRDaXJjbGVQb3NpdGlvbihzdHlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaXJjbGVQb3NpdGlvbihzdHlsZXM6IElTdHlsZXMpIHtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY2lyY2xlVEwoKSwgeyB0b3A6IChzdHlsZXMudG9wIHx8IDApIC0gNSwgbGVmdDogKHN0eWxlcy5sZWZ0IHx8IDApIC0gNSB9KTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY2lyY2xlVFIoKSwgeyB0b3A6IChzdHlsZXMudG9wIHx8IDApIC0gNSwgbGVmdDogKHN0eWxlcy5sZWZ0IHx8IDApICsgKHN0eWxlcy53aWR0aCB8fCAwKSAtIDEwIH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVCTCgpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgKyAoc3R5bGVzLmhlaWdodCB8fCAwKSAtIDEwLCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgLSA1IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVCUigpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgKyAoc3R5bGVzLmhlaWdodCB8fCAwKSAtIDEwLCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgKyAoc3R5bGVzLndpZHRoIHx8IDApIC0gMTAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNyb3BBcmVhUG9zKCkge1xuICAgIGNvbnN0IFtpbWdUb3AsIGltZ0xlZnQsIGltZ1dpZHRoLCBpbWdIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LCBbJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0JywgJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCddKTtcblxuICAgIGNvbnN0IHJlY3RJbWc6IElCb3VuZGluZ0NsaWVudFJlY3QgPSB7XG4gICAgICB0b3A6IE1hdGgubWF4KDAsIGltZ1RvcCksXG4gICAgICBsZWZ0OiBNYXRoLm1heCgwLCBpbWdMZWZ0KSxcbiAgICAgIHdpZHRoOiBpbWdXaWR0aCxcbiAgICAgIGhlaWdodDogaW1nSGVpZ2h0XG4gICAgfTtcblxuICAgIHJlY3RJbWcud2lkdGggPSBNYXRoLm1pbihpbWdXaWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpIC0gaW1nTGVmdCk7XG4gICAgaWYgKGltZ0xlZnQgPCAwKSB7XG4gICAgICByZWN0SW1nLndpZHRoID0gTWF0aC5taW4oaW1nV2lkdGggKyBpbWdMZWZ0LCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgIH1cbiAgICByZWN0SW1nLmhlaWdodCA9IE1hdGgubWluKGltZ0hlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSAtIGltZ1RvcCk7XG4gICAgaWYgKGltZ1RvcCA8IDApIHtcbiAgICAgIHJlY3RJbWcuaGVpZ2h0ID0gTWF0aC5taW4oaW1nVG9wICsgaW1nSGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICB9XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICghdGhpcy5yYXRpb1ZhbHVlKCkpIHtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCByZWN0SW1nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgd2lkdGggPSByZWN0SW1nLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB3aWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuXG4gICAgd2lkdGggPSBNYXRoLm1pbihyZWN0SW1nLndpZHRoLCB3aWR0aCk7XG4gICAgaGVpZ2h0ID0gd2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICBoZWlnaHQgPSBNYXRoLm1pbihyZWN0SW1nLmhlaWdodCwgaGVpZ2h0KTtcbiAgICB3aWR0aCA9IGhlaWdodCAqIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgIGNvbnN0IHRvcCA9IHJlY3RJbWcudG9wICsgKHJlY3RJbWcuaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgbGVmdCA9IHJlY3RJbWcubGVmdCArIChyZWN0SW1nLndpZHRoIC0gd2lkdGgpIC8gMjtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3JvcFJhdGlvVmFsdWUoKSB7XG4gICAgY29uc3QgY3JvcFJhdGlvID0gdGhpcy5hc3BlY3RSYXRpbygpIHx8IHRoaXMuY3JvcFJhdGlvSXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkKCkpO1xuXG4gICAgaWYgKCFjcm9wUmF0aW8pIHtcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbldpZHRoKCkgLyB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIH1cblxuICAgIHJldHVybiBjcm9wUmF0aW8udmFsdWUgPz8gMDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUmVjdENsaXBQb3MoKSB7XG4gICAgY29uc3QgcmVhY3RDbGlwID0gdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG5cbiAgICB0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2xpcCA9IGByZWN0KCR7cmVhY3RDbGlwLnRvcH1weCwgJHtyZWFjdENsaXAucmlnaHR9cHgsICR7cmVhY3RDbGlwLmJvdHRvbX1weCwgJHtyZWFjdENsaXAubGVmdH1weClgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWN0Q2xpcEltYWdlKCkge1xuXG4gICAgY29uc3QgaW1hZ2VSZWN0ID0gdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmICghaW1hZ2VSZWN0LndpZHRoKSB7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlY3RDbGlwKCk7XG4gICAgfVxuICAgIGNvbnN0IGNyb3BSZWN0ID0gdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLnJvdW5kKGNyb3BSZWN0LndpZHRoKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLnJvdW5kKGNyb3BSZWN0LmhlaWdodCk7XG4gICAgY29uc3QgbGVmdCA9IGNyb3BSZWN0LmxlZnQgLSBpbWFnZVJlY3QubGVmdDtcbiAgICBjb25zdCB0b3AgPSBjcm9wUmVjdC50b3AgLSBpbWFnZVJlY3QudG9wO1xuICAgIGNvbnN0IHJpZ2h0ID0gTWF0aC5yb3VuZChsZWZ0ICsgd2lkdGgpO1xuICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgucm91bmQodG9wICsgaGVpZ2h0KTtcbiAgICBjb25zdCByYXRpbyA9IHRoaXMub3JpZ2luV2lkdGgoKSAvIGltYWdlUmVjdC53aWR0aDtcblxuXG4gICAgdGhpcy5yZWN0Q2xpcC5zZXQoeyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5jcm9wU2l6ZS5zZXQoe1xuICAgICAgaGVpZ2h0OiB0b3AgPj0gMCA/IChNYXRoLnJvdW5kKChib3R0b20gLSB0b3ApICogcmF0aW8pKSA6IChNYXRoLmZsb29yKChib3R0b20gLSB0b3ApICogcmF0aW8pKSxcbiAgICAgIHdpZHRoOiB0b3AgPj0gMCA/IChNYXRoLnJvdW5kKCgocmlnaHQgLSBsZWZ0KSAqICh0aGlzLnJhdGlvVmFsdWUoKSA/PyAxKSkgKiByYXRpbykpIDogKE1hdGguZmxvb3IoKChyaWdodCAtIGxlZnQpICogKHRoaXMucmF0aW9WYWx1ZSgpID8/IDEpKSAqIHJhdGlvKSlcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnJlY3RDbGlwKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJNb3VzZW1vdmUoZTogYW55KSB7XG4gICAgY29uc3QgdHlwZVN0YXRlID0gWydCTCcsICdUTCcsICdUUicsICdCUicsICdWTCcsICdWUicsICdIVCcsICdIQiddO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBgcmVzaXplQ3JvcEZvbGxvdyR7dGhpcy5yZXNpemVTdGF0ZSgpfURpcmA7IC8vIHJlc2l6ZUNyb3BGb2xsb3dCTERpciwgcmVzaXplQ3JvcEZvbGxvd1RMRGlyLCByZXNpemVDcm9wRm9sbG93VFJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dCUkRpciwgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyLCByZXNpemVDcm9wRm9sbG93VlJEaXIsIHJlc2l6ZUNyb3BGb2xsb3dIVERpciwgcmVzaXplQ3JvcEZvbGxvd0hCRGlyXG5cbiAgICBpZiAodHlwZVN0YXRlLmluY2x1ZGVzKHRoaXMucmVzaXplU3RhdGUoKSkpIHtcbiAgICAgICh0aGlzIGFzIGFueSlbbWV0aG9kTmFtZV0oZSk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb3ZlU3RhdGUoKSkge1xuICAgICAgY2FzZSAnY2xpcCc6XG4gICAgICAgIHRoaXMubW92ZUNsaXBBcmVhKGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICB0aGlzLm1vdmVJbWFnZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dCTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogLTEsIGhlaWdodDogMSwgbGVmdDogMSwgdG9wOiAwIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUTERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyB0aGlzLnJhdGlvVmFsdWUoKSAqIG1vbWVudFkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dUUkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyAtbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlV2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0O1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IC0xLCBsZWZ0OiAwLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBoZWlnaHQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93QlJEaXIoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IHRoaXMucmF0aW9WYWx1ZSgpID8gbW9tZW50WSAqIHRoaXMucmF0aW9WYWx1ZSgpIDogZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlSGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IDAsIHRvcDogMCB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFggLyB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1ZSRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFggPSBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1vbWVudFkgPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRYIC8gdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wIH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogLTEsIGxlZnQ6IDAsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIVERpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0O1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGxldCB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAtMSwgbGVmdDogMSwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dIQkRpciA9IChlOiBJRXZlbnQpID0+IHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiAwO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAxLCBoZWlnaHQ6IDEsIGxlZnQ6IC0xLCB0b3A6IDAgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgaGVpZ2h0LCBsZWZ0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcml2YXRlIGdldFJlY3RSZXNpemVDcm9wRm9sbG93KHJhdGlvOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0sIG1vbWVudFg6IG51bWJlciwgbW9tZW50WTogbnVtYmVyKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIG1vbWVudFggKiByYXRpby53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgKyBtb21lbnRZICogcmF0aW8uaGVpZ2h0O1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFkgKiByYXRpby50b3A7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYICogcmF0aW8ubGVmdDtcblxuICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V1cCgpIHtcbiAgICB0aGlzLmltYWdlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldCgnbm9uZScpO1xuICAgIHRoaXMubW92ZVN0YXRlLnNldCgnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V3aGVlbChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmhhc1pvb20oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xuICAgICAgdGhpcy56b29tSW1hZ2UoMSAvIDEuMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy56b29tSW1hZ2UoMS4xKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZVN0YXRlKCkgPT09ICdub25lJyAmJiB0aGlzLm1vdmVTdGF0ZSgpID09PSAnbm9uZScpIHtcbiAgICAgIHRoaXMubW92ZVN0YXRlLnNldCgnaW1hZ2UnKTtcbiAgICAgIHRoaXMuaGFuZGxlck1vdXNlZG93bihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJDcm9wUmVzaXplKGU6IGFueSwgcmVzaXplVHlwZTogVFlQRV9SRVNJWkVfU1RBVEUpIHtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldChyZXNpemVUeXBlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZTogYW55KSB7XG4gICAgdGhpcy5tb3ZlU3RhdGUuc2V0KCdjbGlwJyk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VUb3AsIGltYWdlTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1ncmFiYmluZycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NsaXAnOlxuICAgICAgICBpZiAod2lkdGggPT09IGltYWdlV2lkdGggJiYgaGVpZ2h0ID09PSBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRNb3VzZURpbS5zZXQoe1xuICAgICAgY2xpZW50WDogZS5jbGllbnRYLFxuICAgICAgY2xpZW50WTogZS5jbGllbnRZLFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3A6IHRvcCxcbiAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICBpbWFnZVRvcDogaW1hZ2VUb3AsXG4gICAgICBpbWFnZUxlZnQ6IGltYWdlTGVmdCxcbiAgICAgIGltYWdlV2lkdGg6IGltYWdlV2lkdGgsXG4gICAgICBpbWFnZUhlaWdodDogaW1hZ2VIZWlnaHRcbiAgICB9KTtcbiAgICB0aGlzLnJhdGlvVmFsdWUuc2V0KHRoaXMuZ2V0Q3JvcFJhdGlvVmFsdWUoKSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVJbWFnZShlOiBJRXZlbnQpIHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBjb25zdCBpbWdUb3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcCArIG1vbWVudFk7XG4gICAgY29uc3QgaW1nTGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdCArIG1vbWVudFg7XG4gICAgY29uc3QgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgbW9tZW50WTtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIG1vbWVudFg7XG5cblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHRvcDogaW1nVG9wLCBsZWZ0OiBpbWdMZWZ0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyB0b3A6IGltZ1RvcCwgbGVmdDogaW1nTGVmdCB9KTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQgfSk7XG4gICAgdGhpcy5zZXRDaXJjbGVQb3NpdGlvbih7IHRvcDogaW1nVG9wLCBsZWZ0OiBpbWdMZWZ0LCB3aWR0aDogdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUhlaWdodCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUNsaXBBcmVhKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFtpbWdXaWR0aCwgaW1nSGVpZ2h0LCBpbWdUb3AsIGltZ0xlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCBbY3JvcFdpZHRoLCBjcm9wSGVpZ2h0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCddKTtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gZS5jbGllbnRYIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WDtcbiAgICBsZXQgdG9wID0gTWF0aC5tYXgoaW1nVG9wLCB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyBtb21lbnRZKTtcbiAgICBsZXQgbGVmdCA9IE1hdGgubWF4KGltZ0xlZnQsIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYKTtcblxuICAgIHRvcCA9IE1hdGgubWluKHRvcCwgaW1nVG9wICsgaW1nSGVpZ2h0IC0gY3JvcEhlaWdodCk7XG4gICAgbGVmdCA9IE1hdGgubWluKGxlZnQsIGltZ0xlZnQgKyBpbWdXaWR0aCAtIGNyb3BXaWR0aCk7XG5cbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGxlZnQgfSwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHpvb21JbWFnZShzY2FsZTogbnVtYmVyKSB7XG4gICAgY29uc3QgW2N1cnJXaWR0aCwgY3VyckhlaWdodCwgY3VyclRvcCwgY3VyckxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoY3VycldpZHRoICogc2NhbGUsIDUwKTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB3aWR0aCAvIHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGN1cnJlbnQgdmlld1xuICAgIGNvbnN0IGNlbnRlclggPSBjdXJyTGVmdCArIGN1cnJXaWR0aCAvIDI7XG4gICAgY29uc3QgY2VudGVyWSA9IGN1cnJUb3AgKyBjdXJySGVpZ2h0IC8gMjtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgcG9zaXRpb24gdG8gbWFpbnRhaW4gY2VudGVyIHBvaW50XG4gICAgY29uc3QgdG9wID0gY2VudGVyWSAtIGhlaWdodCAvIDI7XG4gICAgY29uc3QgbGVmdCA9IGNlbnRlclggLSB3aWR0aCAvIDI7XG5cbiAgICAvLyBHZXQgY3VycmVudCBjcm9wIGFyZWEgZGltZW5zaW9ucyBhbmQgcG9zaXRpb25cbiAgICBsZXQgW2Nyb3BXaWR0aCwgY3JvcEhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgY29uc3QgW2Nyb3BUb3AsIGNyb3BMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LCBbJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuXG4gICAgLy8gU2NhbGUgY3JvcCBhcmVhIGRpbWVuc2lvbnMgcHJvcG9ydGlvbmFsbHlcbiAgICBjcm9wV2lkdGggPSBjcm9wV2lkdGggKiBzY2FsZTtcbiAgICBjcm9wSGVpZ2h0ID0gY3JvcEhlaWdodCAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG5ldyBjcm9wIGFyZWEgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGltYWdlXG4gICAgY29uc3QgY3JvcFRvcE5ldyA9IHRvcCArIChjcm9wVG9wIC0gY3VyclRvcCkgKiBzY2FsZTtcbiAgICBjb25zdCBjcm9wTGVmdE5ldyA9IGxlZnQgKyAoY3JvcExlZnQgLSBjdXJyTGVmdCkgKiBzY2FsZTtcblxuICAgIC8vIEVuc3VyZSBjcm9wIGFyZWEgc3RheXMgd2l0aGluIGJvdW5kc1xuICAgIGNvbnN0IG1heENyb3BXaWR0aCA9IHdpZHRoO1xuICAgIGNvbnN0IG1heENyb3BIZWlnaHQgPSBoZWlnaHQ7XG4gICAgY29uc3QgbWluV2lkdGggPSAyMDtcbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMDtcblxuICAgIGNyb3BXaWR0aCA9IE1hdGgubWluKGNyb3BXaWR0aCwgbWF4Q3JvcFdpZHRoKTtcbiAgICBjcm9wSGVpZ2h0ID0gTWF0aC5taW4oY3JvcEhlaWdodCwgbWF4Q3JvcEhlaWdodCk7XG4gICAgY3JvcFdpZHRoID0gTWF0aC5tYXgoY3JvcFdpZHRoLCBtaW5XaWR0aCk7XG4gICAgY3JvcEhlaWdodCA9IE1hdGgubWF4KGNyb3BIZWlnaHQsIG1pbkhlaWdodCk7XG5cbiAgICB0aGlzLnJhdGlvVmFsdWUuc2V0KHRoaXMuZ2V0Q3JvcFJhdGlvVmFsdWUoKSk7XG4gICAgaWYgKHRoaXMucmF0aW9WYWx1ZSgpKSB7XG4gICAgICBjcm9wSGVpZ2h0ID0gY3JvcFdpZHRoIC8gdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICBjcm9wSGVpZ2h0ID0gTWF0aC5taW4oY3JvcEhlaWdodCwgbWF4Q3JvcEhlaWdodCk7XG4gICAgICBjcm9wSGVpZ2h0ID0gTWF0aC5tYXgoY3JvcEhlaWdodCwgbWluSGVpZ2h0KTtcbiAgICAgIGNyb3BXaWR0aCA9IGNyb3BIZWlnaHQgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY2xpcHBpbmcgcmVjdGFuZ2xlXG4gICAgdGhpcy5yZWN0Q2xpcC51cGRhdGUocmVjdCA9PiB7XG4gICAgICBjb25zdCByZWN0VG9wID0gY3JvcFRvcE5ldyAtIHRvcDtcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gY3JvcExlZnROZXcgLSBsZWZ0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVjdCxcbiAgICAgICAgdG9wOiByZWN0VG9wLFxuICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgcmlnaHQ6IHJlY3RMZWZ0ICsgY3JvcFdpZHRoLFxuICAgICAgICBib3R0b206IHJlY3RUb3AgKyBjcm9wSGVpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2xpcCA9IGByZWN0KCR7dGhpcy5yZWN0Q2xpcCgpLnRvcH1weCwgJHt0aGlzLnJlY3RDbGlwKCkucmlnaHR9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmJvdHRvbX1weCwgJHt0aGlzLnJlY3RDbGlwKCkubGVmdH1weClgO1xuXG4gICAgLy8gVXBkYXRlIGFsbCBlbGVtZW50cyB3aXRoIG5ldyBwb3NpdGlvbnMgYW5kIGRpbWVuc2lvbnNcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3A6IGNyb3BUb3BOZXcsIGxlZnQ6IGNyb3BMZWZ0TmV3LCB3aWR0aDogY3JvcFdpZHRoLCBoZWlnaHQ6IGNyb3BIZWlnaHQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgdG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IGNsaXAsIHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUm90YXRlSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXG4gICAgICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBvcmlnaW5IZWlnaHQgPSB0aGlzLmltYWdlLmhlaWdodDtcbiAgICAgIGxldCB0b3AgPSBwYXJzZUludCh0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zdHlsZS50b3ApO1xuICAgICAgbGV0IGxlZnQgPSBwYXJzZUludCh0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0KTtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSB3aWR0aDtcbiAgICAgIGxldCBuZXdXaWR0aCA9IGhlaWdodDtcbiAgICAgIGNvbnN0IHJhdGlvID0gbmV3V2lkdGggLyBuZXdIZWlnaHQ7XG5cbiAgICAgIGNhbnZhcy5oZWlnaHQgPSBvcmlnaW5XaWR0aDtcbiAgICAgIGNhbnZhcy53aWR0aCA9IG9yaWdpbkhlaWdodDtcbiAgICAgIGN0eD8udHJhbnNsYXRlKG9yaWdpbkhlaWdodCAvIDIsIG9yaWdpbldpZHRoIC8gMik7XG4gICAgICBjdHg/LnJvdGF0ZShNYXRoLlBJIC8gMik7XG4gICAgICBjdHg/LmRyYXdJbWFnZSh0aGlzLmltYWdlLCAtb3JpZ2luV2lkdGggLyAyLCAtb3JpZ2luSGVpZ2h0IC8gMik7XG4gICAgICBjb25zdCBzcmMgPSBnZXREYXRhVXJsKGNhbnZhcywgdGhpcy5taW1ldHlwZSgpLCB0aGlzLmltYWdlLnNyYyk7XG5cbiAgICAgIHRoaXMuaW1nU3JjLnNldChzcmMpO1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1heChuZXdXaWR0aCwgb3JpZ2luSGVpZ2h0KTtcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5taW4obmV3V2lkdGgsIHRoaXMuY29udGFpbmVyV2lkdGgoKSk7XG4gICAgICBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvO1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5tYXgobmV3SGVpZ2h0LCBvcmlnaW5XaWR0aCk7XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbihuZXdIZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiByYXRpbztcbiAgICAgIHRvcCA9IHRvcCAtIChuZXdIZWlnaHQgLyAyIC0gaGVpZ2h0IC8gMik7XG4gICAgICBsZWZ0ID0gbGVmdCAtIChuZXdXaWR0aCAvIDIgLSB3aWR0aCAvIDIpO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHNyYywgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5nZXRPcmlnaW5hbEltYWdlU2l6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY3JvcFNpemUuc2V0KHsgd2lkdGg6IHRoaXMub3JpZ2luV2lkdGgoKSwgaGVpZ2h0OiB0aGlzLm9yaWdpbkhlaWdodCgpIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9yaWdpbmFsSW1hZ2VTaXplKGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KHRoaXMuaW1hZ2Uud2lkdGgpO1xuICAgICAgdGhpcy5vcmlnaW5IZWlnaHQuc2V0KHRoaXMuaW1hZ2UuaGVpZ2h0KTtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoYW5nZWRJbWFnZShzdGF0dXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNoYW5nZWQuc2V0KHN0YXR1cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZsaXBJbWFnZShldmVudDogRXZlbnQsIG1vZGU6ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlLmhlaWdodDtcblxuICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZSh3aWR0aCwgMCk7XG4gICAgICAgICAgY3R4LnNjYWxlKC0xLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgaGVpZ2h0KTtcbiAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhVXJsID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICB0aGlzLmltZ1NyYy5zZXQoZGF0YVVybCk7XG4gICAgICB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LnNyYyA9IGRhdGFVcmw7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXN0b3JlSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWdTcmMuc2V0KHRoaXMuZGF0YVVybE9yaWdpbigpKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZ2V0T3JpZ2luYWxJbWFnZVNpemUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKGZhbHNlKTtcbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldCgnJyk7XG4gICAgICB0aGlzLnVwZGF0ZUNyb3BBcmVhUG9zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyb3BJbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gb3JpZ2luV2lkdGggLyB3aWR0aDtcbiAgICAgICAgY29uc3QgcmVjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcbiAgICAgICAgY29uc3QgY3JvcFJlY3QgPSBnZXRDcm9wUmVjdEltYWdlKHJlY3RDbGlwLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZSk7XG5cbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGNyb3BSZWN0LmhlaWdodDtcbiAgICAgICAgY2FudmFzLndpZHRoID0gY3JvcFJlY3Qud2lkdGg7XG4gICAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldChjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5vcmlnaW5XaWR0aC5zZXQoY2FudmFzLndpZHRoKTtcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgY3JvcFJlY3QubGVmdCwgY3JvcFJlY3QudG9wLCBjcm9wUmVjdC53aWR0aCwgY3JvcFJlY3QuaGVpZ2h0LCAwLCAwLCBjcm9wUmVjdC53aWR0aCwgY3JvcFJlY3QuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhVXJsID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgICAgICByZXNvbHZlKGRhdGFVcmwpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2F2ZUZpbGUoZXZlbnQ6IEV2ZW50LCBtb2RlU2F2ZTogVFlQRV9NT0RFX1NBVkUpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5jcm9wSW1hZ2UoKTtcbiAgICBjb25zdCBmaWxlID0gY29udmVydEJhc2U2NFRvQmxvYihkYXRhVXJsKTtcblxuICAgIHRoaXMub3V0U2F2ZUZpbGUuZW1pdCh7IGZpbGU6IGZpbGUsIHVybDogZGF0YVVybCwgbW9kZTogbW9kZVNhdmUgfSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xvc2UoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5vdXRDbG9zZS5lbWl0KHsgaXNDbGlja0J1dHRvbkNsb3NlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RDcm9wUmF0aW9JdGVtKGV2ZW50OiBFdmVudCwga2V5OiBzdHJpbmcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNyb3BSYXRpb0l0ZW1TZWxlY3RlZC5zZXQoa2V5KTtcbiAgICB0aGlzLmNoYW5nZWQuc2V0KHRydWUpO1xuICAgIHRoaXMuZHJhZ0dyaWRDcm9wLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNpemUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucmVzaXplQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzaXplQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JSZXNpemVDb21wb25lbnQpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5yZXNpemVDb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgY29uc3Qgc3VicyA9IGluc3RhbmNlLm91dENsb3NlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZik7XG4gICAgICB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGluc3RhbmNlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgaW5zdGFuY2UubWltZXR5cGUgPSB0aGlzLm1pbWV0eXBlKCk7XG4gICAgaW5zdGFuY2UuekluZGV4ID0gdGhpcy56SW5kZXgoKTtcbiAgICBzdWJzLmFkZChpbnN0YW5jZS5vdXRTYXZlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICB0aGlzLnJlc2l6ZURhdGEuc2V0KGV2ZW50KTtcbiAgICAgIHRoaXMuc2F2ZVJlc2l6ZSgpO1xuICAgIH0pKTtcbiAgICBpbnN0YW5jZS5yZXNpemVEYXRhID0geyByYXRpbzogMTAwLCB3aWR0aDogdGhpcy5vcmlnaW5XaWR0aCgpLCBoZWlnaHQ6IHRoaXMub3JpZ2luSGVpZ2h0KCkgfTtcbiAgICBpbnN0YW5jZS5vcmlnaW5XaWR0aCA9IHRoaXMub3JpZ2luV2lkdGgoKTtcbiAgICBpbnN0YW5jZS5vcmlnaW5IZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlUmVzaXplKCkge1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgICBjYW52YXMud2lkdGggPSB0aGlzLnJlc2l6ZURhdGEoKS53aWR0aDtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQ7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgaWYgKGN0eCkge1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzcmMgPSBnZXREYXRhVXJsKGNhbnZhcywgdGhpcy5taW1ldHlwZSgpLCB0aGlzLmltYWdlLnNyYyk7XG4gICAgICBjb25zdCBbY3VycldpZHRoLCBjdXJySGVpZ2h0LCBjdXJyVG9wLCBjdXJyTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgICBjb25zdCByYXRpbyA9IGN1cnJXaWR0aCAvIGN1cnJIZWlnaHQ7XG4gICAgICBsZXQgbmV3V2lkdGggPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCwgdGhpcy5jb250YWluZXJXaWR0aCgpKTtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSBuZXdXaWR0aCAvIHJhdGlvO1xuXG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbih0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgICAgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiByYXRpbztcbiAgICAgIE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLmhlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBjb25zdCB0b3AgPSBjdXJyVG9wICsgKGN1cnJIZWlnaHQgLSBuZXdIZWlnaHQpIC8gMjtcbiAgICAgIGNvbnN0IGxlZnQgPSBjdXJyTGVmdCArIChjdXJyV2lkdGggLSBuZXdXaWR0aCkgLyAyO1xuICAgICAgY29uc3QgbW92ZW1lbnRZID0gY3VyclRvcCAtIHRvcDtcbiAgICAgIGNvbnN0IG1vdmVtZW50WCA9IGN1cnJMZWZ0IC0gbGVmdDtcblxuICAgICAgdGhpcy5yZWN0Q2xpcC51cGRhdGUocmVjdCA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3RUb3AgPSByZWN0LnRvcCArIG1vdmVtZW50WTtcbiAgICAgICAgY29uc3QgcmVjdExlZnQgPSByZWN0LmxlZnQgKyBtb3ZlbWVudFg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVjdCxcbiAgICAgICAgICB0b3A6IHJlY3RUb3AsXG4gICAgICAgICAgbGVmdDogcmVjdExlZnQsXG4gICAgICAgICAgcmlnaHQ6IHJlY3RMZWZ0ICsgbmV3V2lkdGgsXG4gICAgICAgICAgYm90dG9tOiByZWN0VG9wICsgbmV3SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlT3JpZ2luKCksIHsgc3JjLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmltYWdlQ2xpcCgpLCB7IHNyYywgY2xpcCwgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5pbWdTcmMuc2V0KHNyYyk7XG4gICAgICB0aGlzLm9yaWdpbldpZHRoLnNldCh0aGlzLnJlc2l6ZURhdGEoKS53aWR0aCk7XG4gICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQodGhpcy5yZXNpemVEYXRhKCkuaGVpZ2h0KTtcbiAgICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICAgIHRoaXMudXBkYXRlUmVjdENsaXBQb3MoKTtcbiAgICAgIHRoaXMuY2hhbmdlZEltYWdlKHRydWUpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNyb3BXaWR0aCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnd2lkdGgnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ3JvcEhlaWdodCgpIHtcbiAgICB0aGlzLnByb2Nlc3NDcm9wV2lkdGhPckhlaWdodCgnaGVpZ2h0Jyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDcm9wV2lkdGhPckhlaWdodChjcm9wQnk6ICd3aWR0aCcgfCAnaGVpZ2h0Jykge1xuICAgIHRoaXMucmF0aW9WYWx1ZS5zZXQodGhpcy5nZXRDcm9wUmF0aW9WYWx1ZSgpKTtcbiAgICBjb25zdCBbY3VyckltZ1dpZHRoLCBjdXJySW1nSGVpZ2h0LCBjdXJySW1nVG9wLCBjdXJySW1nTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSBjdXJySW1nTGVmdCArIGN1cnJJbWdXaWR0aCAtIGNyb3BMZWZ0O1xuICAgIGNvbnN0IG1heENyb3BIZWlnaHQgPSBjdXJySW1nSGVpZ2h0ICsgY3VyckltZ1RvcCAtIGNyb3BUb3A7XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLm9yaWdpbldpZHRoKCkgLyBjdXJySW1nV2lkdGg7XG4gICAgbGV0IGNyb3BWYWx1ZSA9IGdldCh0aGlzLmNyb3BTaXplLCBjcm9wQnkpIC8gcmF0aW87XG5cbiAgICBjcm9wVmFsdWUgPSBNYXRoLm1pbihjcm9wVmFsdWUsIGNyb3BCeSA9PT0gJ3dpZHRoJyA/IG1heENyb3BXaWR0aCA6IG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BWYWx1ZSA9IE1hdGgubWF4KDEsIGNyb3BWYWx1ZSk7XG4gICAgaWYgKHRoaXMucmF0aW9WYWx1ZSgpKSB7XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnd2lkdGgnKSB7XG4gICAgICAgIGNyb3BIZWlnaHQgPSBjcm9wVmFsdWUgLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKGNyb3BTaXplID0+ICh7IC4uLmNyb3BTaXplLCBoZWlnaHQ6IE1hdGgucm91bmQoY3JvcEhlaWdodCAqIHJhdGlvKSB9KSk7XG4gICAgICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2Nyb3BIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgICAgaWYgKGNyb3BCeSA9PT0gJ2hlaWdodCcpIHtcbiAgICAgICAgY3JvcFdpZHRoID0gY3JvcFZhbHVlICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIGNyb3BXaWR0aCA9IE1hdGgubWluKGNyb3BXaWR0aCwgbWF4Q3JvcFdpZHRoKTtcbiAgICAgICAgY3JvcFZhbHVlID0gY3JvcFdpZHRoIC8gdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKGNyb3BTaXplID0+ICh7IC4uLmNyb3BTaXplLCB3aWR0aDogTWF0aC5yb3VuZChjcm9wV2lkdGggKiByYXRpbykgfSkpO1xuICAgICAgICB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2Nyb3BXaWR0aH1weGA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY3JvcFNpemUudXBkYXRlKGNyb3BTaXplID0+ICh7IC4uLmNyb3BTaXplLCBbY3JvcEJ5XTogTWF0aC5yb3VuZChjcm9wVmFsdWUgKiByYXRpbykgfSkpO1xuICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlW2Nyb3BCeV0gPSBgJHtjcm9wVmFsdWV9cHhgO1xuICAgIGNvbnN0IGltYWdlUmVjdCA9IHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjcm9wUmVjdCA9IHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY3JvcFJlY3Q7XG4gICAgY29uc3QgbGVmdCA9IGNyb3BSZWN0LmxlZnQgLSBpbWFnZVJlY3QubGVmdDtcbiAgICBjb25zdCB0b3AgPSBjcm9wUmVjdC50b3AgLSBpbWFnZVJlY3QudG9wO1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHt0b3B9cHgsICR7cmlnaHR9cHgsICR7Ym90dG9tfXB4LCAke2xlZnR9cHgpYDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGVzRWxlbWVudHMoZWxlbWVudDogRWxlbWVudFJlZiwgc3R5bGVzOiBJU3R5bGVzLCBpc1VwZGF0ZVJlY3RDbGlwUG9zPzogYm9vbGVhbikge1xuICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQoc3R5bGVzLCBrZXkpO1xuICAgICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXQoZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLCBrZXksIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyBgJHt2YWx1ZX1weGAgOiB2YWx1ZSk7XG4gICAgfSk7XG4gICAgaWYgKGlzVXBkYXRlUmVjdENsaXBQb3MpIHtcbiAgICAgIHRoaXMudXBkYXRlUmVjdENsaXBQb3MoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZik7XG4gIH1cbn1cbiIsIjxsaWJzX3VpLWNvbXBvbmVudHMtbW9kYWwgW3dpZHRoXT1cIidjYWxjKDEwMHZ3IC0gNDAwcHgpJ1wiXG4gIFtoZWlnaHRdPVwiJ2NhbGMoMTAwdmggLSAxMDBweCknXCJcbiAgW21pbldpZHRoXT1cIicxMjAwcHgnXCJcbiAgW2hlYWRlckNvbmZpZ109XCJ7aWdub3JlSGVhZGVyVGhlbWU6IHRydWUsIHJlbW92ZUJ1dHRvbkNsb3NlOiB0cnVlfVwiXG4gIFtib2R5Q29uZmlnXT1cIntjbGFzc0luY2x1ZGU6ICchcC0wJywgc2Nyb2xsT3ZlcmxheU9wdGlvbnM6IHtzY3JvbGxYOiAnaGlkZGVuJywgc2Nyb2xsWTogJ2hpZGRlbid9fVwiXG4gIFtmb290ZXJDb25maWddPVwie2hpZGRlbjogdHJ1ZX1cIlxuICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgW2J1dHRvbnNGb290ZXJdPVwiW11cIlxuICBbbW9kZV09XCInY2VudGVyJ1wiPlxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1tb2RhbC1oZWFkZXItY3VzdG9tIHctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlIG14LVsyNHB4XSBoLVsxNnB4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGxpYnMtdWktZm9udC1oNHMgYWJzb2x1dGVcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7ekluZGV4OiB6SW5kZXgoKX1cIj5cbiAgICAgICAgICB7eyAnaTE4bl9lZGl0X2ZpbGVfbmFtZScgfCB0cmFuc2xhdGU6e2ZpbGVfbmFtZTogbmFtZUZpbGUoKX0gfX1cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgQGlmIChtb2RlU2hvd0J1dHRvbigpID09PSAnc2F2ZS1maWxlJykge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fY2FuY2VsJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0gbXItWzE2cHhdJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbG9zZSgkZXZlbnQpXCIgLz5cblxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGNsYXNzPVwibXItWzI0cHhdXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fc2F2ZSdcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncHktWzZweF0gcHgtWzEycHhdJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTYXZlRmlsZSgkZXZlbnQsJ3NhdmUtZmlsZScpXCIgLz5cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbbGFiZWxdPVwiJ2kxOG5fc2F2ZV90b19uZXdfZmlsZSdcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ214LVsxNnB4XSBweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTYXZlRmlsZSgkZXZlbnQsJ3NhdmUtYXBpLWFzLW5ldy1maWxlJylcIiAvPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgW2xhYmVsXT1cIidpMThuX3NhdmUnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTYXZlRmlsZSgkZXZlbnQsJ3NhdmUtYXBpJylcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC1bMTJweF0gbGlicy11aS1ib3JkZXItbGVmdC1nZW5lcmFsIG14LVsxNnB4XVwiPjwvZGl2PlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGNsYXNzPVwibXItWzI0cHhdXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs2cHhdJ1wiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi10aGlyZC1ob3Zlci1kYW5nZXInXCJcbiAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKVwiXG4gICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzoge2NvbnRlbnQ6ICdpMThuX2V4aXRfZWRpdF9tb2RlJywgekluZGV4OiB6SW5kZXgoKX19XCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWNsb3NlJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbG9zZSgkZXZlbnQpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLW1vZGFsLWJvZHktY3VzdG9tIGgtZnVsbCB3LWZ1bGwgZmxleFwiPlxuICAgIDxkaXYgI2ltYWdlRWRpdG9yQ29udGFpbmVyXG4gICAgICBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgYmctWyNlNmU3ZWFdIGJvcmRlci1yYWRpdXMtYm90dG9tLWxlZnQtOHB4IHAtWzMycHhdIGxpYnMtdWktaW5wdXQtaW1hZ2UtZWRpdG9yLWNvbnRhaW5lci1sZWZ0XCI+XG4gICAgICBAaWYgKGxvYWRpbmdJbWFnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIGJnLVsjZTZlN2VhXSB0b3AtMCBsZWZ0LTAgei1bNV1cIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIHRvcC0wIGxlZnQtWzMycHhdIHotWzFdXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB3LVszMnB4XSBoLWZ1bGwgYmctWyNlNmU3ZWFiOF0gbGVmdC0wIHRvcC0wIHotWzFdIHJvdW5kZWQtYmwtWzhweF1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHctWzMycHhdIGgtZnVsbCBiZy1bI2U2ZTdlYWI4XSByaWdodC0wIHRvcC0wIHotWzFdXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBoLVszMnB4XSB3LVtjYWxjKDEwMCUtNjRweCldIGJnLVsjZTZlN2VhYjhdIGJvdHRvbS0wIGxlZnQtWzMycHhdIHotWzFdXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI2ltYWdlQ29udGFpbmVyXG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCByb3VuZGVkLWJsLVs4cHhdIG1pbi1oLTBcIj5cbiAgICAgICAgPGRpdiAjY2lyY2xlVExcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY2lyY2xlVFJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY2lyY2xlQkxcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY2lyY2xlQlJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFkcmFnR3JpZENyb3AoKVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiZHJhZ0dyaWRDcm9wKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdDaXJjbGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGltZyAjaW1hZ2VPcmlnaW5cbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGJvcmRlci1bNHB4XSBib3JkZXItWyM4ZTYxZWVdIHJvdW5kZWQtWzRweF0gdG9wLVstMTAwMHB4XSBsZWZ0LVstMTAwMHB4XVwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgIFtzcmNdPVwiaW1nU3JjKClcIlxuICAgICAgICAgIChsb2FkKT1cImhhbmRsZXJJbWFnZUxvYWRlZCgpXCJcbiAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxpbWcgI2ltYWdlQ2xpcFxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gIHRvcC1bLTEwMDBweF0gbGVmdC1bLTEwMDBweF1cIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBbc3JjXT1cImltZ1NyYygpXCJcbiAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBib3R0b20tMCBiZy1bI2U2ZTdlYWI4XVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjY3JvcEFyZWFcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIGJvcmRlci1bNHB4XSBib3JkZXItWyM4ZTYxZWVdIHJvdW5kZWQtWzRweF1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiAjY3JvcFRMXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gbGVmdC1bLTE4cHhdIHRvcC1bLTE3cHhdIGN1cnNvci1ud3NlLXJlc2l6ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BCTFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIGxlZnQtWy0xN3B4XSBib3R0b20tWy0xOHB4XSBjdXJzb3ItbmVzdy1yZXNpemUgcm90YXRlLVsyNzBkZWddXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAjY3JvcFRSXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gcmlnaHQtWy0xN3B4XSB0b3AtWy0xN3B4XSBjdXJzb3ItbmVzdy1yZXNpemUgcm90YXRlLVs5MGRlZ11cIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wQlJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSByaWdodC1bLTE4cHhdIGJvdHRvbS1bLTE3cHhdIGN1cnNvci1ud3NlLXJlc2l6ZSByb3RhdGUtWzE4MGRlZ11cIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZVZMXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gdy1bMTJweF0gbGVmdC1bLTZweF0gdG9wLTAgYm90dG9tLTAgY3Vyc29yLWV3LXJlc2l6ZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZVZSXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gdy1bMTJweF0gcmlnaHQtWy02cHhdIHRvcC0wIGJvdHRvbS0wIGN1cnNvci1ldy1yZXNpemVcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAjY3JvcExpbmVIVFxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzFdIGgtWzEycHhdIGxlZnQtMCB0b3AtWy02cHhdIHJpZ2h0LTAgY3Vyc29yLW5zLXJlc2l6ZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZUhCXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gaC1bMTJweF0gbGVmdC0wIHJpZ2h0LTAgYm90dG9tLVstNnB4XSBjdXJzb3ItbnMtcmVzaXplXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzFweF0gdG9wLTAgbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSBoLVsxcHhdIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgdy1bMXB4XSB0b3AtMCBsZWZ0LTAgYm90dG9tLTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsxcHhdIHRvcC0wIGJvdHRvbS0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSBoLVsycHhdIHRvcC1bMzMlXSBsZWZ0LTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzJweF0gdG9wLVs2NiVdIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgdy1bMnB4XSB0b3AtMCBib3R0b20tMCBsZWZ0LVszMyVdXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgdy1bMnB4XSB0b3AtMCBib3R0b20tMCBsZWZ0LVs2NiVdXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LVszMjBweF0gc2hyaW5rLTAgcC1bMTZweF0gYmctWyNmZmZmZmZdIHJvdW5kZWQtYnItWzhweF0gei1bMl0gbGlicy11aS1pbnB1dC1pbWFnZS1lZGl0b3ItY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLVsxNnB4XVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg0bVwiPnt7ICdpMThuX2N1dHRpbmdfcmF0aW8nIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXRoaXJkJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yZWZyZXNoJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncC1bNnB4XSBtci1bOHB4XSdcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cIntjb25maWc6IHtjb250ZW50OiAnaTE4bl9yZXN0b3JlX3RoZV9vcmlnaW5hbF9zdGF0ZScsIHpJbmRleDogekluZGV4KCl9fVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpIHx8ICFjaGFuZ2VkKClcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVzdG9yZUltYWdlKCRldmVudClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItWzE2cHhdIGxpYnMtdWktaW1hZ2UtZWRpdG9yLWVkaXQtZGlzcGxheS1ncmlkLWdhcC0xNlwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGNyb3BSYXRpb0l0ZW1zKCk7IHRyYWNrIGl0ZW0ua2V5KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidsYXJnZSdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgcmVxdWlyZWRDcm9wRm9sbG93UmF0aW8oKVwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJpdGVtLmljb24rJyAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cIml0ZW0ua2V5ID09PSBjcm9wUmF0aW9JdGVtU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2VsZWN0Q3JvcFJhdGlvSXRlbSgkZXZlbnQsIGl0ZW0ua2V5KVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAgICB7eyAoaXRlbS5rZXkgPT09ICdmcmVlJyA/ICdpMThuX2N1c3RvbScgOiBpdGVtLmtleSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1bMTZweF0gZmxleFwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCBjbGFzcz1cIm1yLVsxNnB4XVwiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbGFiZWxDb25maWddPVwie2xhYmVsTGVmdDogJ2kxOG5fd2lkdGgnLCBjbGFzc0luY2x1ZGU6ICdtYi1bNHB4XScsIGxhYmVsTGVmdENsYXNzOiAnbGlicy11aS1mb250LWg3cid9XCJcbiAgICAgICAgICBbZmllbGROYW1lQmluZF09XCInd2lkdGgnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cImNyb3BTaXplXCJcbiAgICAgICAgICBbdW5pdHNSaWdodF09XCJbe2lkOiAncHgnLCBsYWJlbDogJ3B4J31dXCJcbiAgICAgICAgICBba2V5U2VsZWN0ZWRVbml0UmlnaHRdPVwiJ3B4J1wiXG4gICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cIjFcIlxuICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJvcmlnaW5XaWR0aCgpXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyQ3JvcFdpZHRoKClcIiAvPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJ7bGFiZWxMZWZ0OiAnaTE4bl9sZW5ndGgnLCBjbGFzc0luY2x1ZGU6ICdtYi1bNHB4XScsIGxhYmVsTGVmdENsYXNzOiAnbGlicy11aS1mb250LWg3cid9XCJcbiAgICAgICAgICBbZmllbGROYW1lQmluZF09XCInaGVpZ2h0J1wiXG4gICAgICAgICAgWyhpdGVtKV09XCJjcm9wU2l6ZVwiXG4gICAgICAgICAgW3VuaXRzUmlnaHRdPVwiW3tpZDogJ3B4JywgbGFiZWw6ICdweCd9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwib3JpZ2luSGVpZ2h0KClcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgKG91dFZhbHVlQ2hhbmdlKT1cImhhbmRsZXJDcm9wSGVpZ2h0KClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg0bSBtYi1bMTZweF1cIj57eyAnaTE4bl9yb3RhdGVfcGhvdG9zJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggbGlicy11aS1pbWFnZS1lZGl0b3ItZWRpdC1kaXNwbGF5LWdyaWQtZ2FwLTE2XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidsYXJnZSdcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tb3V0bGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yb3RhdGUtaW1hZ2Utb3V0bGluZSAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUm90YXRlSW1hZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgIHt7ICdpMThuX3JvdGF0ZV9uaW5ldHlfZGVncmVlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWZsaXAtdmVydGljYWwgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckZsaXBJbWFnZSgkZXZlbnQsICd2ZXJ0aWNhbCcpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fdmVydGljYWxfZmxpcCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWZsaXAtaG9yaXpvbnRhbCAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRmxpcEltYWdlKCRldmVudCwgJ2hvcml6b250YWwnKVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgIHt7ICdpMThuX2hvcml6b250YWxfZmxpcCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXNjYWxlICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZXNpemUoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnIgdGV4dC1bIzZhNzM4M10gbXQtWzRweF1cIj5cbiAgICAgICAgICAgIHt7ICdpMThuX3Jlc2l6ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2xpYnNfdWktY29tcG9uZW50cy1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNzdmdBcnJvdz5cbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICB3aWR0aD1cIjQwXCJcbiAgICBoZWlnaHQ9XCI0MFwiXG4gICAgdmlld0JveD1cIjAgMCA0MCA0MFwiXG4gICAgZmlsbD1cIm5vbmVcIj5cbiAgICA8cGF0aCBkPVwiTTMzLjY5ODcgMTQuNjk2OUwxOC4zMzA5IDE0LjY5NjlDMTYuNTE2IDE0LjY5NjkgMTUuMDMxMSAxNi4xODE4IDE1LjAzMTEgMTcuOTk2N0wxNS4wMzExIDMzLjM2NDVcIlxuICAgICAgc3Ryb2tlPVwid2hpdGVcIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiNS44MzMzM1wiXG4gICAgICBzdHJva2UtbWl0ZXJsaW1pdD1cIjEwXCJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICA8L3N2Zz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3ZnQ2lyY2xlPlxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgIHdpZHRoPVwiMTVcIlxuICAgIGhlaWdodD1cIjE1XCJcbiAgICB2aWV3Qm94PVwiMCAwIDE1IDE1XCJcbiAgICBmaWxsPVwibm9uZVwiPlxuICAgIDxjaXJjbGUgY3g9XCI3LjVcIlxuICAgICAgY3k9XCI3LjVcIlxuICAgICAgcj1cIjcuNVwiXG4gICAgICBmaWxsPVwid2hpdGVcIiAvPlxuICA8L3N2Zz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=