@libs-ui/components-gallery 0.2.35 → 0.2.37

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.
@@ -298,13 +298,13 @@ export class LibsUiComponentsGalleryViewerComponent {
298
298
  this.onDestroy.complete();
299
299
  }
300
300
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
301
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryViewerComponent, isStandalone: true, selector: "libs_ui-components-gallery-viewer", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: true, transformFunction: null }, imageSelected: { classPropertyName: "imageSelected", publicName: "imageSelected", isSignal: true, isRequired: false, transformFunction: null }, removeBackdrop: { classPropertyName: "removeBackdrop", publicName: "removeBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, singleImage: { classPropertyName: "singleImage", publicName: "singleImage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageSelected: "imageSelectedChange", outClose: "outClose" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, isSignal: true }, { propertyName: "singleImageRef", first: true, predicate: ["singleImageRef"], descendants: true, isSignal: true }, { propertyName: "elementRatioRef", first: true, predicate: ["elementRatioRef"], descendants: true, isSignal: true }, { propertyName: "fullContainerRef", first: true, predicate: ["fullContainerRef"], descendants: true, isSignal: true }, { propertyName: "imagesRef", predicate: ["imagesRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if(images() || singleImage()) {\n<div class=\"libs-ui-gallery-img-popup\"\n [class.bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container\">\n <div class=\"flex justify-end mb-[16px] z-10\">\n <i class=\"libs-ui-icon-close text-[24px] text-[#ffffff] cursor-pointer\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef\n class=\"flex w-full h-full relative\">\n <div class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event,false)\">\n @if(fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ratio()}}</div>\n </div>\n </div>\n @if(!imageSelected()?.['error']) {\n <div class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5 absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px]\"\n (click)=\"handlerZoom($event,'out')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[14px] w-full h-full\">-</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerZoom($event,'in')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[12px] w-full h-full\">+</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div class=\"libs-ui-font-h5\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{'i18n_restore' | translate}}</div>\n </div>\n </div>\n </div>\n }\n @if(!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5 text-[#ffffff] mt-[12px]\">\n @if(fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex aitems-center\">\n {{indexSelected()+1}}/{{images().length}}\n </div>\n\n @if(fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if(!singleImage()) {\n <div class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative\">\n <div class=\"flex h-full overflow-[hidden]\">\n @for ( image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event,image,index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !==images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() ===images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n}", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;background-color:#000000b3;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #E6E7EA;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226FF5)}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
301
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryViewerComponent, isStandalone: true, selector: "libs_ui-components-gallery-viewer", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: true, transformFunction: null }, imageSelected: { classPropertyName: "imageSelected", publicName: "imageSelected", isSignal: true, isRequired: false, transformFunction: null }, removeBackdrop: { classPropertyName: "removeBackdrop", publicName: "removeBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, singleImage: { classPropertyName: "singleImage", publicName: "singleImage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageSelected: "imageSelectedChange", outClose: "outClose" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, isSignal: true }, { propertyName: "singleImageRef", first: true, predicate: ["singleImageRef"], descendants: true, isSignal: true }, { propertyName: "elementRatioRef", first: true, predicate: ["elementRatioRef"], descendants: true, isSignal: true }, { propertyName: "fullContainerRef", first: true, predicate: ["fullContainerRef"], descendants: true, isSignal: true }, { propertyName: "imagesRef", predicate: ["imagesRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (images() || singleImage()) {\n <div class=\"libs-ui-gallery-img-popup\"\n [class.bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container\">\n <div class=\"flex justify-end mb-[16px] z-10\">\n <i class=\"libs-ui-icon-close text-[24px] text-[#ffffff] cursor-pointer\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef\n class=\"flex w-full h-full relative\">\n <div class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event,false)\">\n @if (fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ ratio() }}\n </div>\n </div>\n </div>\n @if (!imageSelected()?.['error']) {\n <div class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5r absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px]\"\n (click)=\"handlerZoom($event,'out')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[14px] w-full h-full\">-</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerZoom($event,'in')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[12px] w-full h-full\">+</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{ fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div class=\"libs-ui-font-h5r\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}</div>\n </div>\n </div>\n </div>\n }\n @if (!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5r text-[#ffffff] mt-[12px]\">\n @if (fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex aitems-center\">\n {{ indexSelected()+1 }}/{{ images().length }}\n </div>\n\n @if (fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (!singleImage()) {\n <div class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative\">\n <div class=\"flex h-full overflow-[hidden]\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event,image,index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !==images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() ===images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;background-color:#000000b3;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #E6E7EA;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226FF5)}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
302
302
  }
303
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryViewerComponent, decorators: [{
304
304
  type: Component,
305
305
  args: [{ selector: 'libs_ui-components-gallery-viewer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
306
306
  TranslateModule,
307
307
  LibsUiComponentsPopoverComponent,
308
- ], template: "@if(images() || singleImage()) {\n<div class=\"libs-ui-gallery-img-popup\"\n [class.bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container\">\n <div class=\"flex justify-end mb-[16px] z-10\">\n <i class=\"libs-ui-icon-close text-[24px] text-[#ffffff] cursor-pointer\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef\n class=\"flex w-full h-full relative\">\n <div class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event,false)\">\n @if(fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ratio()}}</div>\n </div>\n </div>\n @if(!imageSelected()?.['error']) {\n <div class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5 absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px]\"\n (click)=\"handlerZoom($event,'out')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[14px] w-full h-full\">-</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerZoom($event,'in')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[12px] w-full h-full\">+</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div class=\"libs-ui-font-h5\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{'i18n_restore' | translate}}</div>\n </div>\n </div>\n </div>\n }\n @if(!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5 text-[#ffffff] mt-[12px]\">\n @if(fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex aitems-center\">\n {{indexSelected()+1}}/{{images().length}}\n </div>\n\n @if(fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if(!singleImage()) {\n <div class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative\">\n <div class=\"flex h-full overflow-[hidden]\">\n @for ( image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event,image,index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !==images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() ===images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n}", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;background-color:#000000b3;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #E6E7EA;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226FF5)}\n"] }]
308
+ ], template: "@if (images() || singleImage()) {\n <div class=\"libs-ui-gallery-img-popup\"\n [class.bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container\">\n <div class=\"flex justify-end mb-[16px] z-10\">\n <i class=\"libs-ui-icon-close text-[24px] text-[#ffffff] cursor-pointer\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef\n class=\"flex w-full h-full relative\">\n <div class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event,false)\">\n @if (fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ ratio() }}\n </div>\n </div>\n </div>\n @if (!imageSelected()?.['error']) {\n <div class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5r absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px]\"\n (click)=\"handlerZoom($event,'out')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[14px] w-full h-full\">-</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerZoom($event,'in')\">\n <div class=\"w-[16px] h-[16px] p-[1px] \">\n <div class=\"border-[#ffffff] border-[1px] rounded-[50%] text-[#ffffff] flex items-center justify-center text-[12px] w-full h-full\">+</div>\n </div>\n </div>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex:1300}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{ fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div class=\"libs-ui-font-h5r\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}</div>\n </div>\n </div>\n </div>\n }\n @if (!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5r text-[#ffffff] mt-[12px]\">\n @if (fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex aitems-center\">\n {{ indexSelected()+1 }}/{{ images().length }}\n </div>\n\n @if (fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (!singleImage()) {\n <div class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative\">\n <div class=\"flex h-full overflow-[hidden]\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event,image,index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !==images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() ===images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;background-color:#000000b3;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #E6E7EA;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226FF5)}\n"] }]
309
309
  }], ctorParameters: () => [] });
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWMsS0FBSyxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEssT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBY3RELE1BQU0sT0FBTyxzQ0FBc0M7SUFDakQsY0FBYztJQUNKLGFBQWEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLEdBQUcsTUFBTSxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEMsWUFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hDLHFCQUFxQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMs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QUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBdFdVLHNDQUFzQzs0RkFBdEMsc0NBQXNDLGlqRENyQm5ELHdrUUFxSkMseTNERHBJRyxlQUFlLDRGQUNmLGdDQUFnQzs7NEZBR3ZCLHNDQUFzQztrQkFabEQsU0FBUzsrQkFFRSxtQ0FBbUMsY0FHakMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsZ0NBQWdDO3FCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgSVpvb21EcmFnSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy96b29tLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1nYWxsZXJ5LXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgaW5kZXhTZWxlY3RlZCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgc2NhbGVWYWx1ZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcm90ZWN0ZWQgcmF0aW8gPSBzaWduYWw8c3RyaW5nPignMTAwJScpO1xuICBwcm90ZWN0ZWQgZnVsbFNjcmVlbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc1Nob3dCdXR0b24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZGlzYWJsZSA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcHJvdGVjdGVkIGhvdmVyQ29udGVudFZpZXdJbWFnZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gcHJpdmF0ZSBpbWFnZXNFbGVtZW50UmVmID0gc2lnbmFsPEFycmF5PEVsZW1lbnRSZWY+PihbXSk7XG4gIHByaXZhdGUgc3RlcCA9IHNpZ25hbDxudW1iZXI+KDAuMSk7XG4gIHByaXZhdGUgZHJhZ2dhYmxlRWwgPSBzaWduYWw8SVpvb21EcmFnSFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSB3aWR0aERlZmF1bHQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBoZWlnaHREZWZhdWx0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgdmlld1BvcnQgPSBzaWduYWw8SUJvdW5kaW5nQ2xpZW50UmVjdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjYW5EcmFnID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB3aWR0aEltYWdlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgaXNGaXJzdFJlbmRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgdGltZW91dHMgPSBzaWduYWw8QXJyYXk8bnVtYmVyPj4oW10pO1xuXG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSBpbWFnZXMgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj4oKTtcbiAgcmVhZG9ubHkgZmllbGREaXNwbGF5U3JjSW1hZ2UgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGltYWdlU2VsZWN0ZWQgPSBtb2RlbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuICByZWFkb25seSByZW1vdmVCYWNrZHJvcCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oMTIwMCk7XG4gIHJlYWRvbmx5IHNpbmdsZUltYWdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRDbG9zZSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGNvbnRhaW5lclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyUmVmJyk7XG4gIHByb3RlY3RlZCBzaW5nbGVJbWFnZVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignc2luZ2xlSW1hZ2VSZWYnKTtcbiAgcHJvdGVjdGVkIGVsZW1lbnRSYXRpb1JlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWxlbWVudFJhdGlvUmVmJyk7XG4gIHByb3RlY3RlZCBmdWxsQ29udGFpbmVyUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdmdWxsQ29udGFpbmVyUmVmJyk7XG4gIHByb3RlY3RlZCBpbWFnZXNSZWYgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ2ltYWdlc1JlZicpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmltYWdlcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdGhpcy5maWVsZERpc3BsYXlTcmNJbWFnZSgpXSA9PT0gdGhpcy5pbWFnZVNlbGVjdGVkKCk/Llt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldKTtcblxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkLnNldChpbmRleFNlbGVjdGVkKTtcblxuICAgICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgICB0aGlzLmltYWdlc1JlZigpW3RoaXMuaW5kZXhTZWxlY3RlZCgpXS5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5dXAnKS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyUHJldmlvdXNJbWFnZShldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlck5leHRJbWFnZShldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQodHJ1ZSk7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKHRoaXMuc2V0V2lkdGhJbWFnZXMuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNyZWF0ZVRpbWVvdXQoKGlkKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgdGhpcy5zZXRXaWR0aEltYWdlcygpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSBzZXRXaWR0aEltYWdlcygpIHtcbiAgICBpZiAoIXRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICB0aGlzLmltYWdlc1JlZigpLmZvckVhY2goaW1hZ2UgPT4ge1xuICAgICAgICBpbWFnZS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gaW1hZ2UubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKyAncHgnO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNpbmdsZUltYWdlUmVmID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpO1xuICAgIGlmIChzaW5nbGVJbWFnZVJlZikge1xuICAgICAgc2luZ2xlSW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgc2luZ2xlSW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB9XG4gICAgdGhpcy52aWV3UG9ydC5zZXQodGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICBpbWcuc3JjID0gdGhpcy5pbWFnZVNlbGVjdGVkKCk/Llt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldIGFzIHN0cmluZztcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy53aWR0aERlZmF1bHQuc2V0KGltZy5uYXR1cmFsV2lkdGgpO1xuICAgICAgdGhpcy5oZWlnaHREZWZhdWx0LnNldChpbWcubmF0dXJhbEhlaWdodCk7XG4gICAgICB0aGlzLndpZHRoSW1hZ2Uuc2V0KHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudC53aWR0aCk7XG5cbiAgICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSgpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCwgaW1hZ2U6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBjb25zdCBldmVudCA9IGUgYXMgSUV2ZW50O1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpbWFnZVsnaXNFcnJvciddID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2hvd0J1dHRvbihpc1Nob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU2hvd0J1dHRvbi5zZXQoaXNTaG93KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTW91c2VFdmVudChldmVudDogRXZlbnQsIHN0YXR1czogYm9vbGVhbikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaG92ZXJDb250ZW50Vmlld0ltYWdlLnNldChzdGF0dXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbG9zZVBvcHVwKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyWm9vbShldmVudDogTW91c2VFdmVudCwgdHlwZTogJ2luJyB8ICdvdXQnKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0ZpcnN0UmVuZGVyLnNldChmYWxzZSk7XG4gICAgdGhpcy5kaXNhYmxlLnNldChmYWxzZSk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkcmFnZ2FibGVFbCA9IHRoaXMubWFrZUVsZW1lbnREcmFnZ2FibGUoe1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGlzT3ZlcmZsb3dIaWRkZW5EZXNpcmVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFnZ2FibGVFbC5zZXQoZHJhZ2dhYmxlRWwpO1xuXG4gICAgaWYgKHRoaXMuc2NhbGVWYWx1ZSgpICogdGhpcy53aWR0aERlZmF1bHQoKSAvIHRoaXMud2lkdGhJbWFnZSgpICogMTAwIDwgMSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxIC8gMTAwICogdGhpcy53aWR0aEltYWdlKCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NhbGVWYWx1ZSgpICogdGhpcy53aWR0aERlZmF1bHQoKSAvIHRoaXMud2lkdGhJbWFnZSgpICogMTAwID4gNTAwMCAqIDAuOSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCg1MDAwICogMC45IC8gMTAwICogdGhpcy53aWR0aEltYWdlKCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdpbicpIHtcbiAgICAgIGNvbnN0IHNjYWxlVmFsdWUgPSB0aGlzLnNjYWxlVmFsdWUoKSAqICgxICsgdGhpcy5zdGVwKCkpO1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldChzY2FsZVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdvdXQnKSB7XG4gICAgICBjb25zdCBzY2FsZVZhbHVlID0gdGhpcy5zY2FsZVZhbHVlKCkgLyAoMSArIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoc2NhbGVWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0V2lkdGhIZWlnaHQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IGBhYnNvbHV0ZWA7XG4gICAgaWYgKCF0aGlzLmNhbkRyYWcgJiYgdGhpcy5kcmFnZ2FibGVFbCgpICYmIHRoaXMuZHJhZ2dhYmxlRWwoKT8uc3RvcERyYWdnYWJsZUJlaGF2aW9yKSB7XG5cbiAgICAgIHRoaXMuZHJhZ2dhYmxlRWwoKT8uc3RvcERyYWdnYWJsZUJlaGF2aW9yPy4oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck5leHRJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSArIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUHJldmlvdXNJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSAtIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0SW1hZ2UoZTogRXZlbnQsIGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGluZGV4U2VsZWN0ZWQ6IG51bWJlcikge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCFpbWFnZVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQodHJ1ZSk7XG4gICAgY29uc3QgZWxlbWVudFJhdGlvID0gdGhpcy5lbGVtZW50UmF0aW9SZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50UmF0aW8pIHtcbiAgICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLmltYWdlU2VsZWN0ZWQuc2V0KGltYWdlU2VsZWN0ZWQpO1xuICAgIHRoaXMuaW5kZXhTZWxlY3RlZC5zZXQoaW5kZXhTZWxlY3RlZCk7XG4gICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxKTtcbiAgICB0aGlzLmltYWdlc1JlZigpW2luZGV4U2VsZWN0ZWRdLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB0aGlzLnNldFdpZHRoSW1hZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bGxTY3JlZW4oKSB7XG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIHRoaXMuZGlzYWJsZS5zZXQodHJ1ZSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgZnVsbEVsZW1lbnQgPSB0aGlzLmZ1bGxDb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgdGhpcy5mdWxsU2NyZWVuLnNldCghdGhpcy5mdWxsU2NyZWVuKCkpO1xuXG4gICAgICBpZiAoIWZ1bGxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS53aWR0aCA9ICc5NSUnO1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnOTUlJztcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgZnVsbEVsZW1lbnQuc3R5bGUud2lkdGggPSAnODAlJztcbiAgICAgICAgZnVsbEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzkwJSc7XG4gICAgICB9XG4gICAgICB0aGlzLnZpZXdQb3J0LnNldCh0aGlzLmNvbnRhaW5lclJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0eWxlU2VsZWN0SW1hZ2UodHJ1ZSk7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgdW5zZXRgO1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgdW5zZXRgO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNldCgpIHtcbiAgICB0aGlzLmRpc2FibGUuc2V0KHRydWUpO1xuICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUVsZW1lbnREcmFnZ2FibGUgPSAoe1xuICAgIGVsZW1lbnQsXG4gICAgRFJBR0dBQkxFX0NTU19DTEFTUyA9ICdkcmFnZ2FibGUtZWxlbWVudCcsXG4gIH06IHtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaXNPdmVyZmxvd0hpZGRlbkRlc2lyZWQ/OiBib29sZWFuO1xuICAgIERSQUdHQUJMRV9DU1NfQ0xBU1M/OiBzdHJpbmc7XG4gIH0pOiBJWm9vbURyYWdIVE1MRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGlzVGhlUmVxdWlyZWRDU1NBbHJlYWR5SW5QbGFjZSA9ICEhQXJyYXkuZnJvbShcbiAgICAgIGVsZW1lbnQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3R5bGUnKVxuICAgICkuZmlsdGVyKChzdHlsZUVsKSA9PlxuICAgICAgc3R5bGVFbD8udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGAuJHtEUkFHR0FCTEVfQ1NTX0NMQVNTfWApXG4gICAgKT8uWzBdO1xuXG4gICAgaWYgKCFpc1RoZVJlcXVpcmVkQ1NTQWxyZWFkeUluUGxhY2UpIHtcbiAgICAgIGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFxuICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLCB7XG4gICAgICAgICAgdGV4dENvbnRlbnQ6IGBcbiAgICAgICAgICAuJHtEUkFHR0FCTEVfQ1NTX0NMQVNTfSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBjdXJzb3I6IGdyYWJiaW5nICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGAsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoRFJBR0dBQkxFX0NTU19DTEFTUykpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChEUkFHR0FCTEVfQ1NTX0NMQVNTKTtcbiAgICB9XG4gICAgZWxlbWVudC5vbm1vdXNlZG93biA9IChtb3VzZURvd25FdmVudCkgPT4ge1xuICAgICAgbW91c2VEb3duRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSAobW91c2VNb3ZlRXZlbnQpID0+IHtcbiAgICAgICAgbW91c2VNb3ZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChyZWN0RWxlbWVudC5sZWZ0ICsgcmVjdEVsZW1lbnQud2lkdGggKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFggPiAodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LmxlZnQgfHwgMCkgJiYgcmVjdEVsZW1lbnQubGVmdCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WCA8ICh0aGlzLnZpZXdQb3J0KCk/LmxlZnQgfHwgMCkpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtlbGVtZW50Lm9mZnNldExlZnQgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFh9cHhgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWN0RWxlbWVudC50b3AgKyByZWN0RWxlbWVudC5oZWlnaHQgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFkgPiAodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkgKyAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkgJiYgcmVjdEVsZW1lbnQudG9wICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRZIDwgKHRoaXMudmlld1BvcnQoKT8udG9wIHx8IDApKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtlbGVtZW50Lm9mZnNldFRvcCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WX1weGA7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQub25tb3VzZXVwID0gKG1vdXNlVXBFdmVudCkgPT4ge1xuICAgICAgbW91c2VVcEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbGVtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZWxlbWVudCwge1xuICAgICAgc3RvcERyYWdnYWJsZUJlaGF2aW9yKCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRFJBR0dBQkxFX0NTU19DTEFTUyk7XG4gICAgICAgIGVsZW1lbnQub25tb3VzZWRvd24gPSBudWxsO1xuICAgICAgICBlbGVtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICAgICAgZWxlbWVudC5vbm1vdXNldXAgPSBudWxsO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSAndW5zZXQnO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9ICd1bnNldCc7XG5cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgc2V0U3R5bGVTZWxlY3RJbWFnZShyZXNldD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlVmFsdWUgPSAoKCh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApIC8gdGhpcy53aWR0aERlZmF1bHQoKSkgPCAoKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIC0gKHRoaXMuc2luZ2xlSW1hZ2UoKSA/IDAgOiA0MCkpIC8gdGhpcy5oZWlnaHREZWZhdWx0KCkpID8gKCh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApIC8gdGhpcy53aWR0aERlZmF1bHQoKSkgOiAoKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIC0gKHRoaXMuc2luZ2xlSW1hZ2UoKSA/IDAgOiA0MCkpIC8gdGhpcy5oZWlnaHREZWZhdWx0KCk7XG5cbiAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KHNjYWxlVmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuc2NhbGVWYWx1ZSgpID4gMSAmJiAocmVzZXQgfHwgdGhpcy5pc0ZpcnN0UmVuZGVyKCkpICYmICF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxKTtcbiAgICB9XG4gICAgdGhpcy5zZXRXaWR0aEhlaWdodChlbGVtZW50KTtcbiAgICBpZiAodGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBgdW5zZXRgO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRXaWR0aEhlaWdodChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCl9cHhgO1xuICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5zY2FsZVZhbHVlKCkgKiB0aGlzLmhlaWdodERlZmF1bHQoKX1weGA7XG4gICAgdGhpcy5jYW5EcmFnLnNldChmYWxzZSk7XG4gICAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgaWYgKChyZWN0RWxlbWVudC53aWR0aCA+ICh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApKSB8fCAocmVjdEVsZW1lbnQuaGVpZ2h0ID4gKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApKSkge1xuICAgICAgdGhpcy5jYW5EcmFnLnNldCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKHJlY3RFbGVtZW50LmxlZnQgKyByZWN0RWxlbWVudC53aWR0aCA8ICh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSB8fCByZWN0RWxlbWVudC5sZWZ0ID4gKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYHVuc2V0YDtcbiAgICB9XG4gICAgaWYgKHJlY3RFbGVtZW50LnRvcCArIHJlY3RFbGVtZW50LmhlaWdodCA8ICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSB8fCByZWN0RWxlbWVudC50b3AgPiAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYHVuc2V0YDtcbiAgICB9XG5cbiAgICB0aGlzLnNldERpc3BsYXlSYXRpbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXNwbGF5UmF0aW8oKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMucmF0aW8uc2V0KGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShlbGVtZW50LndpZHRoIC8gdGhpcy53aWR0aERlZmF1bHQoKSAqIDEwMCwgZmFsc2UsIDApfSVgKTtcbiAgICBjb25zdCBlbGVtZW50UmF0aW8gPSB0aGlzLmVsZW1lbnRSYXRpb1JlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgZWxlbWVudFJhdGlvLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUaW1lb3V0KGNhbGxiYWNrOiAoaWQ6IG51bWJlcikgPT4gdm9pZCwgZGVsYXk6IG51bWJlcikge1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2sodGltZW91dElkKSwgZGVsYXkpIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIHRoaXMudGltZW91dHMudXBkYXRlKGlkcyA9PiBbLi4uaWRzLCB0aW1lb3V0SWRdKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudGltZW91dHMoKS5mb3JFYWNoKGl0ZW0gPT4gY2xlYXJUaW1lb3V0KGl0ZW0pKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufSIsIkBpZihpbWFnZXMoKSB8fCBzaW5nbGVJbWFnZSgpKSB7XG48ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cFwiXG4gIFtjbGFzcy5iZy1bdHJhbnNwYXJlbnRdXT1cInJlbW92ZUJhY2tkcm9wKClcIlxuICBbc3R5bGUuekluZGV4XT1cInpJbmRleCgpXCI+XG4gIDxkaXYgI2Z1bGxDb250YWluZXJSZWZcbiAgICBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgbWItWzE2cHhdIHotMTBcIj5cbiAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNsb3NlIHRleHQtWzI0cHhdIHRleHQtWyNmZmZmZmZdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbG9zZVBvcHVwKCRldmVudClcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGwganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3IHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZXJTaG93QnV0dG9uKHRydWUpXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhhbmRsZXJTaG93QnV0dG9uKGZhbHNlKVwiPlxuICAgICAgICAgICAgPGRpdiAjY29udGFpbmVyUmVmXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgIEBpZihmaWVsZERpc3BsYXlTcmNJbWFnZSgpICYmIGltYWdlU2VsZWN0ZWQoKTsgYXMgaW1hZ2VTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIDxpbWcgI3NpbmdsZUltYWdlUmVmXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlU2VsZWN0ZWRbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV1cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IG0tW2F1dG9dXCJcbiAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGltYWdlU2VsZWN0ZWQpXCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGRpdiAjZWxlbWVudFJhdGlvUmVmXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctcmF0aW8gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNW0gdGV4dC1bI2U2ZTdlYV0gdy1bODBweF0gaC1bMzRweF0gcm91bmRlZC1bNHB4XSBhYnNvbHV0ZSB0b3AtWzUwJV0gbGVmdC1bNTAlXVwiPlxuICAgICAgICAgICAgICAgICAge3tyYXRpbygpfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZighaW1hZ2VTZWxlY3RlZCgpPy5bJ2Vycm9yJ10pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVyTW91c2VFdmVudCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhaG92ZXJDb250ZW50Vmlld0ltYWdlKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNSBhYnNvbHV0ZSB6LTEwIHRvcC1bLTQ0cHhdXCI+XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtjb25maWddPVwie2NvbnRlbnQ6ICdpMThuX3pvb21fb3V0JywgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OjEzMDB9XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gcm91bmRlZC1sLVs4cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwnb3V0JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzE2cHhdIGgtWzE2cHhdIHAtWzFweF0gXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1bI2ZmZmZmZl0gYm9yZGVyLVsxcHhdIHJvdW5kZWQtWzUwJV0gdGV4dC1bI2ZmZmZmZl0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1bMTRweF0gdy1mdWxsIGgtZnVsbFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl96b29tX2luJywgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OjEzMDB9XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclpvb20oJGV2ZW50LCdpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxNnB4XSBoLVsxNnB4XSBwLVsxcHhdIFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItWyNmZmZmZmZdIGJvcmRlci1bMXB4XSByb3VuZGVkLVs1MCVdIHRleHQtWyNmZmZmZmZdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtWzEycHhdIHctZnVsbCBoLWZ1bGxcIj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDogZnVsbFNjcmVlbigpID8gJ2kxOG5fYWN0aW9uX2V4aXRfZnVsbF9zY3JlZW4nIDogJ2kxOG5fYWN0aW9uX3ZpZXdfZnVsbF9zY3JlZW4nLCBkaXJlY3Rpb246ICd0b3AnLCB6SW5kZXg6MTMwMH1cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyRnVsbFNjcmVlbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwie3tmdWxsU2NyZWVuKCkgPyAnbGlicy11aS1pY29uLWZ1bGxzY3JlZW4tZXhpdCcgOiAnbGlicy11aS1pY29uLWZ1bGxzY3JlZW4tb3BlbicgfX0gdGV4dC1bI2ZmZmZmZl0gdGV4dC1bMTZweF1cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvbiByb3VuZGVkLXItWzhweF0gYm9yZGVyLWwgYm9yZGVyLWwtMSBib3JkZXItWyM1ZDYzNmJdIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUmVzZXQoKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tcmVmcmVzaCB0ZXh0LTE2cHggbXItWzhweF1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bI2ZmZmZmZl1dPVwiIWRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCJkaXNhYmxlKClcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg1XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtWyNmZmZmZmZdXT1cIiFkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiZGlzYWJsZSgpXCI+e3snaTE4bl9yZXN0b3JlJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYoIXNpbmdsZUltYWdlKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNSB0ZXh0LVsjZmZmZmZmXSBtdC1bMTJweF1cIj5cbiAgICAgICAgICAgICAgQGlmKGZ1bGxTY3JlZW4oKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzE2cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdGF0ZS0xODBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQcmV2aW91c0ltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gMFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIHt7aW5kZXhTZWxlY3RlZCgpKzF9fS97e2ltYWdlcygpLmxlbmd0aH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIEBpZihmdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsxNnB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gaW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IGltYWdlcygpLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJOZXh0SW1hZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LVsyNHB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaW5kZXhTZWxlY3RlZCgpID09PWltYWdlcygpLmxlbmd0aCAtIDFcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmKCFzaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1saXN0IHB4LVszMnB4XSBtdC1bMjRweF0gZmxleFwiXG4gICAgICAgICAgW2NsYXNzLiFoaWRkZW5dPVwiZnVsbFNjcmVlbigpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVsyNHB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdGF0ZS0xODBcIlxuICAgICAgICAgICAgICBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiaW5kZXhTZWxlY3RlZCgpICE9PSAwXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQcmV2aW91c0ltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LVsyNHB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1heC13LVs4MCVdIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLWZ1bGwgb3ZlcmZsb3ctW2hpZGRlbl1cIj5cbiAgICAgICAgICAgICAgQGZvciAoIGltYWdlIG9mIGltYWdlcygpOyB0cmFjayBpbmRleDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgI2ltYWdlc1JlZlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubXItWzEycHhdXT1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaW1hZ2VbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV0gPT09IGltYWdlU2VsZWN0ZWQoKT8uW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGgtZnVsbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJTZWxlY3RJbWFnZSgkZXZlbnQsaW1hZ2UsaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtYXgtaC1mdWxsIG1heC13LWZ1bGwgbS1bYXV0b11cIlxuICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGltYWdlKVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bMjRweF0gZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT1pbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PWltYWdlcygpLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlck5leHRJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaW5kZXhTZWxlY3RlZCgpID09PWltYWdlcygpLmxlbmd0aCAtIDFcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxufSJdfQ==
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWMsS0FBSyxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEssT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBY3RELE1BQU0sT0FBTyxzQ0FBc0M7SUFDakQsY0FBYztJQUNKLGFBQWEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLEdBQUcsTUFBTSxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEMsWUFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hDLHFCQUFxQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMs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QUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBdFdVLHNDQUFzQzs0RkFBdEMsc0NBQXNDLGlqRENyQm5ELHNxUkF1SkEseTNERHRJSSxlQUFlLDRGQUNmLGdDQUFnQzs7NEZBR3ZCLHNDQUFzQztrQkFabEQsU0FBUzsrQkFFRSxtQ0FBbUMsY0FHakMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsZ0NBQWdDO3FCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgSVpvb21EcmFnSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy96b29tLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1nYWxsZXJ5LXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgaW5kZXhTZWxlY3RlZCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgc2NhbGVWYWx1ZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcm90ZWN0ZWQgcmF0aW8gPSBzaWduYWw8c3RyaW5nPignMTAwJScpO1xuICBwcm90ZWN0ZWQgZnVsbFNjcmVlbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc1Nob3dCdXR0b24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZGlzYWJsZSA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcHJvdGVjdGVkIGhvdmVyQ29udGVudFZpZXdJbWFnZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gcHJpdmF0ZSBpbWFnZXNFbGVtZW50UmVmID0gc2lnbmFsPEFycmF5PEVsZW1lbnRSZWY+PihbXSk7XG4gIHByaXZhdGUgc3RlcCA9IHNpZ25hbDxudW1iZXI+KDAuMSk7XG4gIHByaXZhdGUgZHJhZ2dhYmxlRWwgPSBzaWduYWw8SVpvb21EcmFnSFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSB3aWR0aERlZmF1bHQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBoZWlnaHREZWZhdWx0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgdmlld1BvcnQgPSBzaWduYWw8SUJvdW5kaW5nQ2xpZW50UmVjdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjYW5EcmFnID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB3aWR0aEltYWdlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgaXNGaXJzdFJlbmRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgdGltZW91dHMgPSBzaWduYWw8QXJyYXk8bnVtYmVyPj4oW10pO1xuXG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSBpbWFnZXMgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj4oKTtcbiAgcmVhZG9ubHkgZmllbGREaXNwbGF5U3JjSW1hZ2UgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGltYWdlU2VsZWN0ZWQgPSBtb2RlbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuICByZWFkb25seSByZW1vdmVCYWNrZHJvcCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oMTIwMCk7XG4gIHJlYWRvbmx5IHNpbmdsZUltYWdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRDbG9zZSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGNvbnRhaW5lclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyUmVmJyk7XG4gIHByb3RlY3RlZCBzaW5nbGVJbWFnZVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignc2luZ2xlSW1hZ2VSZWYnKTtcbiAgcHJvdGVjdGVkIGVsZW1lbnRSYXRpb1JlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWxlbWVudFJhdGlvUmVmJyk7XG4gIHByb3RlY3RlZCBmdWxsQ29udGFpbmVyUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdmdWxsQ29udGFpbmVyUmVmJyk7XG4gIHByb3RlY3RlZCBpbWFnZXNSZWYgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ2ltYWdlc1JlZicpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmltYWdlcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdGhpcy5maWVsZERpc3BsYXlTcmNJbWFnZSgpXSA9PT0gdGhpcy5pbWFnZVNlbGVjdGVkKCk/Llt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldKTtcblxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkLnNldChpbmRleFNlbGVjdGVkKTtcblxuICAgICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgICB0aGlzLmltYWdlc1JlZigpW3RoaXMuaW5kZXhTZWxlY3RlZCgpXS5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5dXAnKS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyUHJldmlvdXNJbWFnZShldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlck5leHRJbWFnZShldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQodHJ1ZSk7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKHRoaXMuc2V0V2lkdGhJbWFnZXMuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNyZWF0ZVRpbWVvdXQoKGlkKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgdGhpcy5zZXRXaWR0aEltYWdlcygpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSBzZXRXaWR0aEltYWdlcygpIHtcbiAgICBpZiAoIXRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICB0aGlzLmltYWdlc1JlZigpLmZvckVhY2goaW1hZ2UgPT4ge1xuICAgICAgICBpbWFnZS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gaW1hZ2UubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKyAncHgnO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNpbmdsZUltYWdlUmVmID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpO1xuICAgIGlmIChzaW5nbGVJbWFnZVJlZikge1xuICAgICAgc2luZ2xlSW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgc2luZ2xlSW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB9XG4gICAgdGhpcy52aWV3UG9ydC5zZXQodGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICBpbWcuc3JjID0gdGhpcy5pbWFnZVNlbGVjdGVkKCk/Llt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldIGFzIHN0cmluZztcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy53aWR0aERlZmF1bHQuc2V0KGltZy5uYXR1cmFsV2lkdGgpO1xuICAgICAgdGhpcy5oZWlnaHREZWZhdWx0LnNldChpbWcubmF0dXJhbEhlaWdodCk7XG4gICAgICB0aGlzLndpZHRoSW1hZ2Uuc2V0KHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudC53aWR0aCk7XG5cbiAgICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSgpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCwgaW1hZ2U6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBjb25zdCBldmVudCA9IGUgYXMgSUV2ZW50O1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpbWFnZVsnaXNFcnJvciddID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2hvd0J1dHRvbihpc1Nob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU2hvd0J1dHRvbi5zZXQoaXNTaG93KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTW91c2VFdmVudChldmVudDogRXZlbnQsIHN0YXR1czogYm9vbGVhbikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaG92ZXJDb250ZW50Vmlld0ltYWdlLnNldChzdGF0dXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbG9zZVBvcHVwKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyWm9vbShldmVudDogTW91c2VFdmVudCwgdHlwZTogJ2luJyB8ICdvdXQnKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0ZpcnN0UmVuZGVyLnNldChmYWxzZSk7XG4gICAgdGhpcy5kaXNhYmxlLnNldChmYWxzZSk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkcmFnZ2FibGVFbCA9IHRoaXMubWFrZUVsZW1lbnREcmFnZ2FibGUoe1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGlzT3ZlcmZsb3dIaWRkZW5EZXNpcmVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFnZ2FibGVFbC5zZXQoZHJhZ2dhYmxlRWwpO1xuXG4gICAgaWYgKHRoaXMuc2NhbGVWYWx1ZSgpICogdGhpcy53aWR0aERlZmF1bHQoKSAvIHRoaXMud2lkdGhJbWFnZSgpICogMTAwIDwgMSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxIC8gMTAwICogdGhpcy53aWR0aEltYWdlKCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NhbGVWYWx1ZSgpICogdGhpcy53aWR0aERlZmF1bHQoKSAvIHRoaXMud2lkdGhJbWFnZSgpICogMTAwID4gNTAwMCAqIDAuOSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCg1MDAwICogMC45IC8gMTAwICogdGhpcy53aWR0aEltYWdlKCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdpbicpIHtcbiAgICAgIGNvbnN0IHNjYWxlVmFsdWUgPSB0aGlzLnNjYWxlVmFsdWUoKSAqICgxICsgdGhpcy5zdGVwKCkpO1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldChzY2FsZVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdvdXQnKSB7XG4gICAgICBjb25zdCBzY2FsZVZhbHVlID0gdGhpcy5zY2FsZVZhbHVlKCkgLyAoMSArIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoc2NhbGVWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0V2lkdGhIZWlnaHQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IGBhYnNvbHV0ZWA7XG4gICAgaWYgKCF0aGlzLmNhbkRyYWcgJiYgdGhpcy5kcmFnZ2FibGVFbCgpICYmIHRoaXMuZHJhZ2dhYmxlRWwoKT8uc3RvcERyYWdnYWJsZUJlaGF2aW9yKSB7XG5cbiAgICAgIHRoaXMuZHJhZ2dhYmxlRWwoKT8uc3RvcERyYWdnYWJsZUJlaGF2aW9yPy4oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck5leHRJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSArIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUHJldmlvdXNJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSAtIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0SW1hZ2UoZTogRXZlbnQsIGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGluZGV4U2VsZWN0ZWQ6IG51bWJlcikge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCFpbWFnZVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQodHJ1ZSk7XG4gICAgY29uc3QgZWxlbWVudFJhdGlvID0gdGhpcy5lbGVtZW50UmF0aW9SZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50UmF0aW8pIHtcbiAgICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLmltYWdlU2VsZWN0ZWQuc2V0KGltYWdlU2VsZWN0ZWQpO1xuICAgIHRoaXMuaW5kZXhTZWxlY3RlZC5zZXQoaW5kZXhTZWxlY3RlZCk7XG4gICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxKTtcbiAgICB0aGlzLmltYWdlc1JlZigpW2luZGV4U2VsZWN0ZWRdLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB0aGlzLnNldFdpZHRoSW1hZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bGxTY3JlZW4oKSB7XG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIHRoaXMuZGlzYWJsZS5zZXQodHJ1ZSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgZnVsbEVsZW1lbnQgPSB0aGlzLmZ1bGxDb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgdGhpcy5mdWxsU2NyZWVuLnNldCghdGhpcy5mdWxsU2NyZWVuKCkpO1xuXG4gICAgICBpZiAoIWZ1bGxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS53aWR0aCA9ICc5NSUnO1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnOTUlJztcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgZnVsbEVsZW1lbnQuc3R5bGUud2lkdGggPSAnODAlJztcbiAgICAgICAgZnVsbEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzkwJSc7XG4gICAgICB9XG4gICAgICB0aGlzLnZpZXdQb3J0LnNldCh0aGlzLmNvbnRhaW5lclJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0eWxlU2VsZWN0SW1hZ2UodHJ1ZSk7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgdW5zZXRgO1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgdW5zZXRgO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNldCgpIHtcbiAgICB0aGlzLmRpc2FibGUuc2V0KHRydWUpO1xuICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUVsZW1lbnREcmFnZ2FibGUgPSAoe1xuICAgIGVsZW1lbnQsXG4gICAgRFJBR0dBQkxFX0NTU19DTEFTUyA9ICdkcmFnZ2FibGUtZWxlbWVudCcsXG4gIH06IHtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaXNPdmVyZmxvd0hpZGRlbkRlc2lyZWQ/OiBib29sZWFuO1xuICAgIERSQUdHQUJMRV9DU1NfQ0xBU1M/OiBzdHJpbmc7XG4gIH0pOiBJWm9vbURyYWdIVE1MRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGlzVGhlUmVxdWlyZWRDU1NBbHJlYWR5SW5QbGFjZSA9ICEhQXJyYXkuZnJvbShcbiAgICAgIGVsZW1lbnQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3R5bGUnKVxuICAgICkuZmlsdGVyKChzdHlsZUVsKSA9PlxuICAgICAgc3R5bGVFbD8udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGAuJHtEUkFHR0FCTEVfQ1NTX0NMQVNTfWApXG4gICAgKT8uWzBdO1xuXG4gICAgaWYgKCFpc1RoZVJlcXVpcmVkQ1NTQWxyZWFkeUluUGxhY2UpIHtcbiAgICAgIGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFxuICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpLCB7XG4gICAgICAgICAgdGV4dENvbnRlbnQ6IGBcbiAgICAgICAgICAuJHtEUkFHR0FCTEVfQ1NTX0NMQVNTfSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBjdXJzb3I6IGdyYWJiaW5nICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGAsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoRFJBR0dBQkxFX0NTU19DTEFTUykpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChEUkFHR0FCTEVfQ1NTX0NMQVNTKTtcbiAgICB9XG4gICAgZWxlbWVudC5vbm1vdXNlZG93biA9IChtb3VzZURvd25FdmVudCkgPT4ge1xuICAgICAgbW91c2VEb3duRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSAobW91c2VNb3ZlRXZlbnQpID0+IHtcbiAgICAgICAgbW91c2VNb3ZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChyZWN0RWxlbWVudC5sZWZ0ICsgcmVjdEVsZW1lbnQud2lkdGggKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFggPiAodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LmxlZnQgfHwgMCkgJiYgcmVjdEVsZW1lbnQubGVmdCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WCA8ICh0aGlzLnZpZXdQb3J0KCk/LmxlZnQgfHwgMCkpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtlbGVtZW50Lm9mZnNldExlZnQgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFh9cHhgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWN0RWxlbWVudC50b3AgKyByZWN0RWxlbWVudC5oZWlnaHQgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFkgPiAodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkgKyAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkgJiYgcmVjdEVsZW1lbnQudG9wICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRZIDwgKHRoaXMudmlld1BvcnQoKT8udG9wIHx8IDApKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtlbGVtZW50Lm9mZnNldFRvcCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WX1weGA7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQub25tb3VzZXVwID0gKG1vdXNlVXBFdmVudCkgPT4ge1xuICAgICAgbW91c2VVcEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbGVtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZWxlbWVudCwge1xuICAgICAgc3RvcERyYWdnYWJsZUJlaGF2aW9yKCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRFJBR0dBQkxFX0NTU19DTEFTUyk7XG4gICAgICAgIGVsZW1lbnQub25tb3VzZWRvd24gPSBudWxsO1xuICAgICAgICBlbGVtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICAgICAgZWxlbWVudC5vbm1vdXNldXAgPSBudWxsO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSAndW5zZXQnO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9ICd1bnNldCc7XG5cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgc2V0U3R5bGVTZWxlY3RJbWFnZShyZXNldD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlVmFsdWUgPSAoKCh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApIC8gdGhpcy53aWR0aERlZmF1bHQoKSkgPCAoKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIC0gKHRoaXMuc2luZ2xlSW1hZ2UoKSA/IDAgOiA0MCkpIC8gdGhpcy5oZWlnaHREZWZhdWx0KCkpID8gKCh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApIC8gdGhpcy53aWR0aERlZmF1bHQoKSkgOiAoKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIC0gKHRoaXMuc2luZ2xlSW1hZ2UoKSA/IDAgOiA0MCkpIC8gdGhpcy5oZWlnaHREZWZhdWx0KCk7XG5cbiAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KHNjYWxlVmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuc2NhbGVWYWx1ZSgpID4gMSAmJiAocmVzZXQgfHwgdGhpcy5pc0ZpcnN0UmVuZGVyKCkpICYmICF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxKTtcbiAgICB9XG4gICAgdGhpcy5zZXRXaWR0aEhlaWdodChlbGVtZW50KTtcbiAgICBpZiAodGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBgdW5zZXRgO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRXaWR0aEhlaWdodChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCl9cHhgO1xuICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5zY2FsZVZhbHVlKCkgKiB0aGlzLmhlaWdodERlZmF1bHQoKX1weGA7XG4gICAgdGhpcy5jYW5EcmFnLnNldChmYWxzZSk7XG4gICAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgaWYgKChyZWN0RWxlbWVudC53aWR0aCA+ICh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApKSB8fCAocmVjdEVsZW1lbnQuaGVpZ2h0ID4gKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApKSkge1xuICAgICAgdGhpcy5jYW5EcmFnLnNldCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKHJlY3RFbGVtZW50LmxlZnQgKyByZWN0RWxlbWVudC53aWR0aCA8ICh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSB8fCByZWN0RWxlbWVudC5sZWZ0ID4gKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYHVuc2V0YDtcbiAgICB9XG4gICAgaWYgKHJlY3RFbGVtZW50LnRvcCArIHJlY3RFbGVtZW50LmhlaWdodCA8ICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSB8fCByZWN0RWxlbWVudC50b3AgPiAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYHVuc2V0YDtcbiAgICB9XG5cbiAgICB0aGlzLnNldERpc3BsYXlSYXRpbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXNwbGF5UmF0aW8oKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMucmF0aW8uc2V0KGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShlbGVtZW50LndpZHRoIC8gdGhpcy53aWR0aERlZmF1bHQoKSAqIDEwMCwgZmFsc2UsIDApfSVgKTtcbiAgICBjb25zdCBlbGVtZW50UmF0aW8gPSB0aGlzLmVsZW1lbnRSYXRpb1JlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgZWxlbWVudFJhdGlvLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUaW1lb3V0KGNhbGxiYWNrOiAoaWQ6IG51bWJlcikgPT4gdm9pZCwgZGVsYXk6IG51bWJlcikge1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2sodGltZW91dElkKSwgZGVsYXkpIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIHRoaXMudGltZW91dHMudXBkYXRlKGlkcyA9PiBbLi4uaWRzLCB0aW1lb3V0SWRdKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudGltZW91dHMoKS5mb3JFYWNoKGl0ZW0gPT4gY2xlYXJUaW1lb3V0KGl0ZW0pKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufSIsIkBpZiAoaW1hZ2VzKCkgfHwgc2luZ2xlSW1hZ2UoKSkge1xuICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cFwiXG4gICAgW2NsYXNzLmJnLVt0cmFuc3BhcmVudF1dPVwicmVtb3ZlQmFja2Ryb3AoKVwiXG4gICAgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXgoKVwiPlxuICAgIDxkaXYgI2Z1bGxDb250YWluZXJSZWZcbiAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG1iLVsxNnB4XSB6LTEwXCI+XG4gICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNsb3NlIHRleHQtWzI0cHhdIHRleHQtWyNmZmZmZmZdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsb3NlUG9wdXAoJGV2ZW50KVwiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldyB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlclNob3dCdXR0b24odHJ1ZSlcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVyU2hvd0J1dHRvbihmYWxzZSlcIj5cbiAgICAgICAgICAgICAgPGRpdiAjY29udGFpbmVyUmVmXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVyTW91c2VFdmVudCgkZXZlbnQsZmFsc2UpXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkRGlzcGxheVNyY0ltYWdlKCkgJiYgaW1hZ2VTZWxlY3RlZCgpOyBhcyBpbWFnZVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgI3NpbmdsZUltYWdlUmVmXG4gICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVNlbGVjdGVkW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggbS1bYXV0b11cIlxuICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGltYWdlU2VsZWN0ZWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxkaXYgI2VsZW1lbnRSYXRpb1JlZlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctcmF0aW8gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNW0gdGV4dC1bI2U2ZTdlYV0gdy1bODBweF0gaC1bMzRweF0gcm91bmRlZC1bNHB4XSBhYnNvbHV0ZSB0b3AtWzUwJV0gbGVmdC1bNTAlXVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyByYXRpbygpIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoIWltYWdlU2VsZWN0ZWQoKT8uWydlcnJvciddKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVyTW91c2VFdmVudCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWhvdmVyQ29udGVudFZpZXdJbWFnZSgpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg1ciBhYnNvbHV0ZSB6LTEwIHRvcC1bLTQ0cHhdXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl96b29tX291dCcsIGRpcmVjdGlvbjogJ3RvcCcsIHpJbmRleDoxMzAwfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvbiByb3VuZGVkLWwtWzhweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwnb3V0JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxNnB4XSBoLVsxNnB4XSBwLVsxcHhdIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLVsjZmZmZmZmXSBib3JkZXItWzFweF0gcm91bmRlZC1bNTAlXSB0ZXh0LVsjZmZmZmZmXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LVsxNHB4XSB3LWZ1bGwgaC1mdWxsXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl96b29tX2luJywgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OjEzMDB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyWm9vbSgkZXZlbnQsJ2luJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxNnB4XSBoLVsxNnB4XSBwLVsxcHhdIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLVsjZmZmZmZmXSBib3JkZXItWzFweF0gcm91bmRlZC1bNTAlXSB0ZXh0LVsjZmZmZmZmXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LVsxMnB4XSB3LWZ1bGwgaC1mdWxsXCI+KzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OiBmdWxsU2NyZWVuKCkgPyAnaTE4bl9hY3Rpb25fZXhpdF9mdWxsX3NjcmVlbicgOiAnaTE4bl9hY3Rpb25fdmlld19mdWxsX3NjcmVlbicsIGRpcmVjdGlvbjogJ3RvcCcsIHpJbmRleDoxMzAwfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckZ1bGxTY3JlZW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7eyBmdWxsU2NyZWVuKCkgPyAnbGlicy11aS1pY29uLWZ1bGxzY3JlZW4tZXhpdCcgOiAnbGlicy11aS1pY29uLWZ1bGxzY3JlZW4tb3BlbicgfX0gdGV4dC1bI2ZmZmZmZl0gdGV4dC1bMTZweF1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvbiByb3VuZGVkLXItWzhweF0gYm9yZGVyLWwgYm9yZGVyLWwtMSBib3JkZXItWyM1ZDYzNmJdIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclJlc2V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1yZWZyZXNoIHRleHQtMTZweCBtci1bOHB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bI2ZmZmZmZl1dPVwiIWRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiZGlzYWJsZSgpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjZmZmZmZmXV09XCIhZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCJkaXNhYmxlKClcIj57eyAnaTE4bl9yZXN0b3JlJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoIXNpbmdsZUltYWdlKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyNmZmZmZmZdIG10LVsxMnB4XVwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChmdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVsxNnB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3RhdGUtMTgwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUHJldmlvdXNJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpbmRleFNlbGVjdGVkKCkrMSB9fS97eyBpbWFnZXMoKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICBAaWYgKGZ1bGxTY3JlZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzE2cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiaW5kZXhTZWxlY3RlZCgpICE9PSBpbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gaW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlck5leHRJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKCFzaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItbGlzdCBweC1bMzJweF0gbXQtWzI0cHhdIGZsZXhcIlxuICAgICAgICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCJmdWxsU2NyZWVuKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVsyNHB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3RhdGUtMTgwXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUHJldmlvdXNJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1heC13LVs4MCVdIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIG92ZXJmbG93LVtoaWRkZW5dXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpbWFnZSBvZiBpbWFnZXMoKTsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNpbWFnZXNSZWZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLWxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1yLVsxMnB4XV09XCIhbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYWN0aXZlXT1cImltYWdlW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldID09PSBpbWFnZVNlbGVjdGVkKCk/LltmaWVsZERpc3BsYXlTcmNJbWFnZSgpXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyU2VsZWN0SW1hZ2UoJGV2ZW50LGltYWdlLGluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggbWF4LWgtZnVsbCBtYXgtdy1mdWxsIG0tW2F1dG9dXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50LCBpbWFnZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsyNHB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT1pbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImluZGV4U2VsZWN0ZWQoKSA9PT1pbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyTmV4dEltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT1pbWFnZXMoKS5sZW5ndGggLSAxXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIH1cbiJdfQ==