@libs-ui/components-gallery 0.2.156 → 0.2.158
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +2 -1
- package/esm2022/viewer/viewer.component.mjs +4 -3
- package/fesm2022/libs-ui-components-gallery.mjs +319 -4
- package/fesm2022/libs-ui-components-gallery.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/package.json +1 -1
- package/viewer/viewer.component.d.ts +2 -1
- package/fesm2022/libs-ui-components-gallery-viewer.component-D0_2RTr8.mjs +0 -315
- package/fesm2022/libs-ui-components-gallery-viewer.component-D0_2RTr8.mjs.map +0 -1
package/esm2022/index.mjs
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from './gallery.component';
|
|
2
|
-
|
|
2
|
+
export * from './viewer/viewer.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZ2FsbGVyeS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9nYWxsZXJ5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdlci92aWV3ZXIuY29tcG9uZW50JzsiXX0=
|
|
@@ -33,6 +33,7 @@ export class LibsUiComponentsGalleryViewerComponent {
|
|
|
33
33
|
removeBackdrop = input();
|
|
34
34
|
zIndex = input(1200);
|
|
35
35
|
singleImage = input(false);
|
|
36
|
+
classContainerInclude = input();
|
|
36
37
|
// #region OUTPUT
|
|
37
38
|
outClose = output();
|
|
38
39
|
/* VIEW CHILD */
|
|
@@ -300,13 +301,13 @@ export class LibsUiComponentsGalleryViewerComponent {
|
|
|
300
301
|
this.onDestroy.complete();
|
|
301
302
|
}
|
|
302
303
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
303
|
-
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\" [class.bg-[transparent]]=\"removeBackdrop()\" [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef class=\"libs-ui-gallery-img-popup-container\">\n <div class=\"flex w-full 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\" (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef 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 [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\" (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\" (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\n [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:1300}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event,'out')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover\n [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event,'in')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover\n [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\n 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 libs-ui-gallery-text-restore\" [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}\n </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\" [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\" [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 overflow-hidden\">\n <div class=\"flex h-full overflow-hidden\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef 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:#030b1850;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-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.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: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
304
|
+
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 }, classContainerInclude: { classPropertyName: "classContainerInclude", publicName: "classContainerInclude", 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 {{ classContainerInclude() || '' }}\">\n <div class=\"flex w-full 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 <i class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event,'out')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event,'in')\"> </i>\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 libs-ui-gallery-text-restore\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}\n </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 items-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 overflow-hidden\">\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:#030b1850;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-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.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: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
304
305
|
}
|
|
305
306
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryViewerComponent, decorators: [{
|
|
306
307
|
type: Component,
|
|
307
308
|
args: [{ selector: 'libs_ui-components-gallery-viewer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
308
309
|
TranslateModule,
|
|
309
310
|
LibsUiComponentsPopoverComponent,
|
|
310
|
-
], template: "@if (images() || singleImage()) {\n <div class=\"libs-ui-gallery-img-popup\" [class.bg-[transparent]]=\"removeBackdrop()\" [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef class=\"libs-ui-gallery-img-popup-container\">\n <div class=\"flex w-full 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\" (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef 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 [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\" (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\" (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\n [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:1300}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event,'out')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover\n [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event,'in')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover\n [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\n 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 libs-ui-gallery-text-restore\" [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}\n </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\" [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\" [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 overflow-hidden\">\n <div class=\"flex h-full overflow-hidden\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef 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:#030b1850;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-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.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"] }]
|
|
311
|
+
], 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 {{ classContainerInclude() || '' }}\">\n <div class=\"flex w-full 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 <i class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event,'out')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:1300}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event,'in')\"> </i>\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 libs-ui-gallery-text-restore\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}\n </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 items-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 overflow-hidden\">\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:#030b1850;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-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.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"] }]
|
|
311
312
|
}], ctorParameters: () => [] });
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWMsS0FBSyxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25MLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWN0RCxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELG1CQUFtQjtJQUNULGFBQWEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLEdBQUcsTUFBTSxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEMsWUFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hDLHFCQUFxQixHQUFHLE1BQU0sQ0FB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QUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXhXVSxzQ0FBc0M7NEZBQXRDLHNDQUFzQyxpakRDckJuRCxpN1VBd0lBLHlrRUR2SEksZUFBZSw0RkFDZixnQ0FBZ0M7OzRGQUd2QixzQ0FBc0M7a0JBWmxELFNBQVM7K0JBRUUsbUNBQW1DLGNBR2pDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxlQUFlO3dCQUNmLGdDQUFnQztxQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgSVpvb21EcmFnSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy96b29tLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1nYWxsZXJ5LXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBpbmRleFNlbGVjdGVkID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBzY2FsZVZhbHVlID0gc2lnbmFsPG51bWJlcj4oMSk7XG4gIHByb3RlY3RlZCByYXRpbyA9IHNpZ25hbDxzdHJpbmc+KCcxMDAlJyk7XG4gIHByb3RlY3RlZCBmdWxsU2NyZWVuID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGlzU2hvd0J1dHRvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgaG92ZXJDb250ZW50Vmlld0ltYWdlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBwcml2YXRlIGltYWdlc0VsZW1lbnRSZWYgPSBzaWduYWw8QXJyYXk8RWxlbWVudFJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBzdGVwID0gc2lnbmFsPG51bWJlcj4oMC4xKTtcbiAgcHJpdmF0ZSBkcmFnZ2FibGVFbCA9IHNpZ25hbDxJWm9vbURyYWdIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHdpZHRoRGVmYXVsdCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIGhlaWdodERlZmF1bHQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB2aWV3UG9ydCA9IHNpZ25hbDxJQm91bmRpbmdDbGllbnRSZWN0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNhbkRyYWcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHdpZHRoSW1hZ2UgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpc0ZpcnN0UmVuZGVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB0aW1lb3V0cyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaW1hZ2VzID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+KCk7XG4gIHJlYWRvbmx5IGZpZWxkRGlzcGxheVNyY0ltYWdlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpbWFnZVNlbGVjdGVkID0gbW9kZWw8UmVjb3JkPHN0cmluZywgYW55Pj4oKTtcbiAgcmVhZG9ubHkgcmVtb3ZlQmFja2Ryb3AgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KDEyMDApO1xuICByZWFkb25seSBzaW5nbGVJbWFnZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRDbG9zZSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGNvbnRhaW5lclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyUmVmJyk7XG4gIHByb3RlY3RlZCBzaW5nbGVJbWFnZVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignc2luZ2xlSW1hZ2VSZWYnKTtcbiAgcHJvdGVjdGVkIGVsZW1lbnRSYXRpb1JlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWxlbWVudFJhdGlvUmVmJyk7XG4gIHByb3RlY3RlZCBmdWxsQ29udGFpbmVyUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdmdWxsQ29udGFpbmVyUmVmJyk7XG4gIHByb3RlY3RlZCBpbWFnZXNSZWYgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ2ltYWdlc1JlZicpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmltYWdlcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdGhpcy5maWVsZERpc3BsYXlTcmNJbWFnZSgpXSA9PT0gdGhpcy5pbWFnZVNlbGVjdGVkKCk/Llt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkLnNldChpbmRleFNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLmNyZWF0ZVRpbWVvdXQoKGlkKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgICAgICB0aGlzLmltYWdlc1JlZigpW3RoaXMuaW5kZXhTZWxlY3RlZCgpXS5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXl1cCcpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICB0aGlzLmhhbmRsZXJQcmV2aW91c0ltYWdlKGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyTmV4dEltYWdlKGV2ZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pc0ZpcnN0UmVuZGVyLnNldCh0cnVlKTtcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5zZXRXaWR0aEltYWdlcy5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICB0aGlzLnNldFdpZHRoSW1hZ2VzKCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIHNldFdpZHRoSW1hZ2VzKCkge1xuICAgIGlmICghdGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgIHRoaXMuaW1hZ2VzUmVmKCkuZm9yRWFjaChpbWFnZSA9PiB7XG4gICAgICAgIGltYWdlLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBpbWFnZS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCArICdweCc7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc2luZ2xlSW1hZ2VSZWYgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk7XG4gICAgaWYgKHNpbmdsZUltYWdlUmVmKSB7XG4gICAgICBzaW5nbGVJbWFnZVJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gJyc7XG4gICAgICBzaW5nbGVJbWFnZVJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xuICAgIH1cbiAgICB0aGlzLnZpZXdQb3J0LnNldCh0aGlzLmNvbnRhaW5lclJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGltZy5zcmMgPSB0aGlzLmltYWdlU2VsZWN0ZWQoKT8uW3RoaXMuZmllbGREaXNwbGF5U3JjSW1hZ2UoKV0gYXMgc3RyaW5nO1xuICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLndpZHRoRGVmYXVsdC5zZXQoaW1nLm5hdHVyYWxXaWR0aCk7XG4gICAgICB0aGlzLmhlaWdodERlZmF1bHQuc2V0KGltZy5uYXR1cmFsSGVpZ2h0KTtcbiAgICAgIHRoaXMud2lkdGhJbWFnZS5zZXQodGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50LndpZHRoKTtcblxuICAgICAgdGhpcy5zZXRTdHlsZVNlbGVjdEltYWdlKCk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VFcnJvcihlOiBFcnJvckV2ZW50LCBpbWFnZTogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IGV2ZW50ID0gZSBhcyBJRXZlbnQ7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGltYWdlWydpc0Vycm9yJ10gPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTaG93QnV0dG9uKGlzU2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuaXNTaG93QnV0dG9uLnNldChpc1Nob3cpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJNb3VzZUV2ZW50KGV2ZW50OiBFdmVudCwgc3RhdHVzOiBib29sZWFuKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5ob3ZlckNvbnRlbnRWaWV3SW1hZ2Uuc2V0KHN0YXR1cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsb3NlUG9wdXAoZTogRXZlbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMub3V0Q2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJab29tKGV2ZW50OiBNb3VzZUV2ZW50LCB0eXBlOiAnaW4nIHwgJ291dCcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRmlyc3RSZW5kZXIuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmRpc2FibGUuc2V0KGZhbHNlKTtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRyYWdnYWJsZUVsID0gdGhpcy5tYWtlRWxlbWVudERyYWdnYWJsZSh7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgaXNPdmVyZmxvd0hpZGRlbkRlc2lyZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYWdnYWJsZUVsLnNldChkcmFnZ2FibGVFbCk7XG5cbiAgICBpZiAodGhpcy5zY2FsZVZhbHVlKCkgKiB0aGlzLndpZHRoRGVmYXVsdCgpIC8gdGhpcy53aWR0aEltYWdlKCkgKiAxMDAgPCAxKSB7XG4gICAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KDEgLyAxMDAgKiB0aGlzLndpZHRoSW1hZ2UoKSAvIHRoaXMud2lkdGhEZWZhdWx0KCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2FsZVZhbHVlKCkgKiB0aGlzLndpZHRoRGVmYXVsdCgpIC8gdGhpcy53aWR0aEltYWdlKCkgKiAxMDAgPiA1MDAwICogMC45KSB7XG4gICAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KDUwMDAgKiAwLjkgLyAxMDAgKiB0aGlzLndpZHRoSW1hZ2UoKSAvIHRoaXMud2lkdGhEZWZhdWx0KCkpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2luJykge1xuICAgICAgY29uc3Qgc2NhbGVWYWx1ZSA9IHRoaXMuc2NhbGVWYWx1ZSgpICogKDEgKyB0aGlzLnN0ZXAoKSk7XG4gICAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KHNjYWxlVmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ291dCcpIHtcbiAgICAgIGNvbnN0IHNjYWxlVmFsdWUgPSB0aGlzLnNjYWxlVmFsdWUoKSAvICgxICsgdGhpcy5zdGVwKCkpO1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldChzY2FsZVZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5zZXRXaWR0aEhlaWdodChlbGVtZW50KTtcbiAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gYGFic29sdXRlYDtcbiAgICBpZiAoIXRoaXMuY2FuRHJhZyAmJiB0aGlzLmRyYWdnYWJsZUVsKCkgJiYgdGhpcy5kcmFnZ2FibGVFbCgpPy5zdG9wRHJhZ2dhYmxlQmVoYXZpb3IpIHtcblxuICAgICAgdGhpcy5kcmFnZ2FibGVFbCgpPy5zdG9wRHJhZ2dhYmxlQmVoYXZpb3I/LigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTmV4dEltYWdlKGU6IEV2ZW50KSB7XG4gICAgY29uc3QgaW5kZXhTZWxlY3RlZCA9IHRoaXMuaW5kZXhTZWxlY3RlZCgpICsgMTtcblxuICAgIHRoaXMuaGFuZGxlclNlbGVjdEltYWdlKGUsIHRoaXMuaW1hZ2VzKClbaW5kZXhTZWxlY3RlZF0sIGluZGV4U2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQcmV2aW91c0ltYWdlKGU6IEV2ZW50KSB7XG4gICAgY29uc3QgaW5kZXhTZWxlY3RlZCA9IHRoaXMuaW5kZXhTZWxlY3RlZCgpIC0gMTtcblxuICAgIHRoaXMuaGFuZGxlclNlbGVjdEltYWdlKGUsIHRoaXMuaW1hZ2VzKClbaW5kZXhTZWxlY3RlZF0sIGluZGV4U2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RJbWFnZShlOiBFdmVudCwgaW1hZ2VTZWxlY3RlZDogUmVjb3JkPHN0cmluZywgYW55PiwgaW5kZXhTZWxlY3RlZDogbnVtYmVyKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIWltYWdlU2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0ZpcnN0UmVuZGVyLnNldCh0cnVlKTtcbiAgICBjb25zdCBlbGVtZW50UmF0aW8gPSB0aGlzLmVsZW1lbnRSYXRpb1JlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnRSYXRpbykge1xuICAgICAgZWxlbWVudFJhdGlvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIHRoaXMuaW1hZ2VTZWxlY3RlZC5zZXQoaW1hZ2VTZWxlY3RlZCk7XG4gICAgdGhpcy5pbmRleFNlbGVjdGVkLnNldChpbmRleFNlbGVjdGVkKTtcbiAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KDEpO1xuICAgIHRoaXMuaW1hZ2VzUmVmKClbaW5kZXhTZWxlY3RlZF0ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgIHRoaXMuc2V0V2lkdGhJbWFnZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRnVsbFNjcmVlbigpIHtcbiAgICB0aGlzLmNyZWF0ZVRpbWVvdXQoKGlkKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgdGhpcy5kaXNhYmxlLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBmdWxsRWxlbWVudCA9IHRoaXMuZnVsbENvbnRhaW5lclJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICB0aGlzLmZ1bGxTY3JlZW4uc2V0KCF0aGlzLmZ1bGxTY3JlZW4oKSk7XG5cbiAgICAgIGlmICghZnVsbEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLndpZHRoID0gJzk1JSc7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLmhlaWdodCA9ICc5NSUnO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS53aWR0aCA9ICc4MCUnO1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnOTAlJztcbiAgICAgIH1cbiAgICAgIHRoaXMudmlld1BvcnQuc2V0KHRoaXMuY29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSh0cnVlKTtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGB1bnNldGA7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGB1bnNldGA7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc2V0KCkge1xuICAgIHRoaXMuZGlzYWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRTdHlsZVNlbGVjdEltYWdlKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRWxlbWVudERyYWdnYWJsZSA9ICh7XG4gICAgZWxlbWVudCxcbiAgICBEUkFHR0FCTEVfQ1NTX0NMQVNTID0gJ2RyYWdnYWJsZS1lbGVtZW50JyxcbiAgfToge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpc092ZXJmbG93SGlkZGVuRGVzaXJlZD86IGJvb2xlYW47XG4gICAgRFJBR0dBQkxFX0NTU19DTEFTUz86IHN0cmluZztcbiAgfSk6IElab29tRHJhZ0hUTUxFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXNUaGVSZXF1aXJlZENTU0FscmVhZHlJblBsYWNlID0gISFBcnJheS5mcm9tKFxuICAgICAgZWxlbWVudC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpXG4gICAgKS5maWx0ZXIoKHN0eWxlRWwpID0+XG4gICAgICBzdHlsZUVsPy50ZXh0Q29udGVudD8uaW5jbHVkZXMoYC4ke0RSQUdHQUJMRV9DU1NfQ0xBU1N9YClcbiAgICApPy5bMF07XG5cbiAgICBpZiAoIWlzVGhlUmVxdWlyZWRDU1NBbHJlYWR5SW5QbGFjZSkge1xuICAgICAgZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksIHtcbiAgICAgICAgICB0ZXh0Q29udGVudDogYFxuICAgICAgICAgIC4ke0RSQUdHQUJMRV9DU1NfQ0xBU1N9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGN1cnNvcjogZ3JhYmJpbmcgIWltcG9ydGFudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhEUkFHR0FCTEVfQ1NTX0NMQVNTKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKERSQUdHQUJMRV9DU1NfQ0xBU1MpO1xuICAgIH1cbiAgICBlbGVtZW50Lm9ubW91c2Vkb3duID0gKG1vdXNlRG93bkV2ZW50KSA9PiB7XG4gICAgICBtb3VzZURvd25FdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxlbWVudC5vbm1vdXNlbW92ZSA9IChtb3VzZU1vdmVFdmVudCkgPT4ge1xuICAgICAgICBtb3VzZU1vdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKHJlY3RFbGVtZW50LmxlZnQgKyByZWN0RWxlbWVudC53aWR0aCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WCA+ICh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSAmJiByZWN0RWxlbWVudC5sZWZ0ICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRYIDwgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQub2Zmc2V0TGVmdCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WH1weGA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3RFbGVtZW50LnRvcCArIHJlY3RFbGVtZW50LmhlaWdodCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WSA+ICh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSAmJiByZWN0RWxlbWVudC50b3AgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFkgPCAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke2VsZW1lbnQub2Zmc2V0VG9wICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRZfXB4YDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudC5vbm1vdXNldXAgPSAobW91c2VVcEV2ZW50KSA9PiB7XG4gICAgICBtb3VzZVVwRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbGVtZW50LCB7XG4gICAgICBzdG9wRHJhZ2dhYmxlQmVoYXZpb3IoKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShEUkFHR0FCTEVfQ1NTX0NMQVNTKTtcbiAgICAgICAgZWxlbWVudC5vbm1vdXNlZG93biA9IG51bGw7XG4gICAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgICBlbGVtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9ICd1bnNldCc7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gJ3Vuc2V0JztcblxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZVNlbGVjdEltYWdlKHJlc2V0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVWYWx1ZSA9ICgoKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKSA8ICgodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkgLSAodGhpcy5zaW5nbGVJbWFnZSgpID8gMCA6IDQwKSkgLyB0aGlzLmhlaWdodERlZmF1bHQoKSkgPyAoKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKSA6ICgodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkgLSAodGhpcy5zaW5nbGVJbWFnZSgpID8gMCA6IDQwKSkgLyB0aGlzLmhlaWdodERlZmF1bHQoKTtcblxuICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoc2NhbGVWYWx1ZSk7XG5cbiAgICBpZiAodGhpcy5zY2FsZVZhbHVlKCkgPiAxICYmIChyZXNldCB8fCB0aGlzLmlzRmlyc3RSZW5kZXIoKSkgJiYgIXRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KDEpO1xuICAgIH1cbiAgICB0aGlzLnNldFdpZHRoSGVpZ2h0KGVsZW1lbnQpO1xuICAgIGlmICh0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IGB1bnNldGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFdpZHRoSGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2NhbGVWYWx1ZSgpICogdGhpcy53aWR0aERlZmF1bHQoKX1weGA7XG4gICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMuaGVpZ2h0RGVmYXVsdCgpfXB4YDtcbiAgICB0aGlzLmNhbkRyYWcuc2V0KGZhbHNlKTtcbiAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAoKHJlY3RFbGVtZW50LndpZHRoID4gKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkpIHx8IChyZWN0RWxlbWVudC5oZWlnaHQgPiAodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkpKSB7XG4gICAgICB0aGlzLmNhbkRyYWcuc2V0KHRydWUpO1xuICAgIH1cbiAgICBpZiAocmVjdEVsZW1lbnQubGVmdCArIHJlY3RFbGVtZW50LndpZHRoIDwgKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgKyAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApIHx8IHJlY3RFbGVtZW50LmxlZnQgPiAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgdW5zZXRgO1xuICAgIH1cbiAgICBpZiAocmVjdEVsZW1lbnQudG9wICsgcmVjdEVsZW1lbnQuaGVpZ2h0IDwgKHRoaXMudmlld1BvcnQoKT8udG9wIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIHx8IHJlY3RFbGVtZW50LnRvcCA+ICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgdW5zZXRgO1xuICAgIH1cblxuICAgIHRoaXMuc2V0RGlzcGxheVJhdGlvKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXlSYXRpbygpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5yYXRpby5zZXQoYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGVsZW1lbnQud2lkdGggLyB0aGlzLndpZHRoRGVmYXVsdCgpICogMTAwLCBmYWxzZSwgMCl9JWApO1xuICAgIGNvbnN0IGVsZW1lbnRSYXRpbyA9IHRoaXMuZWxlbWVudFJhdGlvUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBlbGVtZW50UmF0aW8uc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICB0aGlzLmNyZWF0ZVRpbWVvdXQoKGlkKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgZWxlbWVudFJhdGlvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRpbWVvdXQoY2FsbGJhY2s6IChpZDogbnVtYmVyKSA9PiB2b2lkLCBkZWxheTogbnVtYmVyKSB7XG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayh0aW1lb3V0SWQpLCBkZWxheSkgYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgdGhpcy50aW1lb3V0cy51cGRhdGUoaWRzID0+IFsuLi5pZHMsIHRpbWVvdXRJZF0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50aW1lb3V0cygpLmZvckVhY2goaXRlbSA9PiBjbGVhclRpbWVvdXQoaXRlbSkpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59IiwiQGlmIChpbWFnZXMoKSB8fCBzaW5nbGVJbWFnZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXBcIiBbY2xhc3MuYmctW3RyYW5zcGFyZW50XV09XCJyZW1vdmVCYWNrZHJvcCgpXCIgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXgoKVwiPlxuICAgICAgICA8ZGl2ICNmdWxsQ29udGFpbmVyUmVmIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtYi1bMTZweF0gei0xMFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNsb3NlIHRleHQtWzI0cHhdIHRleHQtWyNmZmZmZmZdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbG9zZVBvcHVwKCRldmVudClcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXcgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbCByZWxhdGl2ZVwiIChtb3VzZWVudGVyKT1cImhhbmRsZXJTaG93QnV0dG9uKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVyU2hvd0J1dHRvbihmYWxzZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNjb250YWluZXJSZWYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZXJNb3VzZUV2ZW50KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWVsZERpc3BsYXlTcmNJbWFnZSgpICYmIGltYWdlU2VsZWN0ZWQoKTsgYXMgaW1hZ2VTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgI3NpbmdsZUltYWdlUmVmIFtzcmNdPVwiaW1hZ2VTZWxlY3RlZFtmaWVsZERpc3BsYXlTcmNJbWFnZSgpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtLVthdXRvXVwiIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGltYWdlU2VsZWN0ZWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI2VsZW1lbnRSYXRpb1JlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1yYXRpbyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg1bSB0ZXh0LVsjZTZlN2VhXSB3LVs4MHB4XSBoLVszNHB4XSByb3VuZGVkLVs0cHhdIGFic29sdXRlIHRvcC1bNTAlXSBsZWZ0LVs1MCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmF0aW8oKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWltYWdlU2VsZWN0ZWQoKT8uWydlcnJvciddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIiAobW91c2VlbnRlcik9XCJoYW5kbGVyTW91c2VFdmVudCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWhvdmVyQ29udGVudFZpZXdJbWFnZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg1ciBhYnNvbHV0ZSB6LTEwIHRvcC1bLTQ0cHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6ICdpMThuX3pvb21fb3V0JywgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OjEzMDB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gcm91bmRlZC1sLVs4cHhdIGxpYnMtdWktaWNvbi16b29tLW91dCBiZWZvcmU6dGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwnb3V0JylcIj4gPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6ICdpMThuX3pvb21faW4nLCBkaXJlY3Rpb246ICd0b3AnLCB6SW5kZXg6MTMwMH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvbiBsaWJzLXVpLWljb24tem9vbS1pbiBiZWZvcmU6dGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwnaW4nKVwiPiA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDogZnVsbFNjcmVlbigpID8gJ2kxOG5fYWN0aW9uX2V4aXRfZnVsbF9zY3JlZW4nIDogJ2kxOG5fYWN0aW9uX3ZpZXdfZnVsbF9zY3JlZW4nLCBkaXJlY3Rpb246ICd0b3AnLCB6SW5kZXg6MTMwMH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyRnVsbFNjcmVlbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgZnVsbFNjcmVlbigpID8gJ2xpYnMtdWktaWNvbi1mdWxsc2NyZWVuLWV4aXQnIDogJ2xpYnMtdWktaWNvbi1mdWxsc2NyZWVuLW9wZW4nIH19IHRleHQtWyNmZmZmZmZdIHRleHQtWzE2cHhdXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvbiByb3VuZGVkLXItWzhweF0gYm9yZGVyLWwgYm9yZGVyLWwtMSBib3JkZXItWyM1ZDYzNmJdIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJSZXNldCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLXJlZnJlc2ggdGV4dC0xNnB4IG1yLVs4cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjZmZmZmZmXV09XCIhZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCJkaXNhYmxlKClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIGxpYnMtdWktZ2FsbGVyeS10ZXh0LXJlc3RvcmVcIiBbY2xhc3MudGV4dC1bI2ZmZmZmZl1dPVwiIWRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiZGlzYWJsZSgpXCI+e3sgJ2kxOG5fcmVzdG9yZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXNpbmdsZUltYWdlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg1ciB0ZXh0LVsjZmZmZmZmXSBtdC1bMTJweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZnVsbFNjcmVlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVsxNnB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm90YXRlLTE4MFwiIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUHJldmlvdXNJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaW5kZXhTZWxlY3RlZCgpKzEgfX0ve3sgaW1hZ2VzKCkubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzE2cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gaW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IGltYWdlcygpLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJOZXh0SW1hZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LVsyNHB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2luZ2xlSW1hZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLWxpc3QgcHgtWzMycHhdIG10LVsyNHB4XSBmbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCJmdWxsU2NyZWVuKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzI0cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3RhdGUtMTgwXCIgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQcmV2aW91c0ltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1heC13LVs4MCVdIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpbWFnZSBvZiBpbWFnZXMoKTsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI2ltYWdlc1JlZiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLWxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tci1bMTJweF1dPVwiIWxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaW1hZ2VbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV0gPT09IGltYWdlU2VsZWN0ZWQoKT8uW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyU2VsZWN0SW1hZ2UoJGV2ZW50LGltYWdlLGluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggbWF4LWgtZnVsbCBtYXgtdy1mdWxsIG0tW2F1dG9dXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWFnZUVycm9yKCRldmVudCwgaW1hZ2UpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsyNHB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlck5leHRJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT1pbWFnZXMoKS5sZW5ndGggLSAxXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfVxuIl19
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWMsS0FBSyxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25MLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWN0RCxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELG1CQUFtQjtJQUNULGFBQWEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLEdBQUcsTUFBTSxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEMsWUFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hDLHFCQUFxQixHQUFHLE1BQU0sQ0FB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RSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXpXVSxzQ0FBc0M7NEZBQXRDLHNDQUFzQyx5dERDckJuRCx1eFFBZ0pBLHlrRUQvSEksZUFBZSw0RkFDZixnQ0FBZ0M7OzRGQUd2QixzQ0FBc0M7a0JBWmxELFNBQVM7K0JBRUUsbUNBQW1DLGNBR2pDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxlQUFlO3dCQUNmLGdDQUFnQztxQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgSVpvb21EcmFnSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy96b29tLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1nYWxsZXJ5LXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBpbmRleFNlbGVjdGVkID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBzY2FsZVZhbHVlID0gc2lnbmFsPG51bWJlcj4oMSk7XG4gIHByb3RlY3RlZCByYXRpbyA9IHNpZ25hbDxzdHJpbmc+KCcxMDAlJyk7XG4gIHByb3RlY3RlZCBmdWxsU2NyZWVuID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGlzU2hvd0J1dHRvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgaG92ZXJDb250ZW50Vmlld0ltYWdlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBwcml2YXRlIGltYWdlc0VsZW1lbnRSZWYgPSBzaWduYWw8QXJyYXk8RWxlbWVudFJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBzdGVwID0gc2lnbmFsPG51bWJlcj4oMC4xKTtcbiAgcHJpdmF0ZSBkcmFnZ2FibGVFbCA9IHNpZ25hbDxJWm9vbURyYWdIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHdpZHRoRGVmYXVsdCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIGhlaWdodERlZmF1bHQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB2aWV3UG9ydCA9IHNpZ25hbDxJQm91bmRpbmdDbGllbnRSZWN0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNhbkRyYWcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHdpZHRoSW1hZ2UgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpc0ZpcnN0UmVuZGVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB0aW1lb3V0cyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaW1hZ2VzID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+KCk7XG4gIHJlYWRvbmx5IGZpZWxkRGlzcGxheVNyY0ltYWdlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpbWFnZVNlbGVjdGVkID0gbW9kZWw8UmVjb3JkPHN0cmluZywgYW55Pj4oKTtcbiAgcmVhZG9ubHkgcmVtb3ZlQmFja2Ryb3AgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KDEyMDApO1xuICByZWFkb25seSBzaW5nbGVJbWFnZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcm90ZWN0ZWQgY29udGFpbmVyUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdjb250YWluZXJSZWYnKTtcbiAgcHJvdGVjdGVkIHNpbmdsZUltYWdlUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdzaW5nbGVJbWFnZVJlZicpO1xuICBwcm90ZWN0ZWQgZWxlbWVudFJhdGlvUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdlbGVtZW50UmF0aW9SZWYnKTtcbiAgcHJvdGVjdGVkIGZ1bGxDb250YWluZXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2Z1bGxDb250YWluZXJSZWYnKTtcbiAgcHJvdGVjdGVkIGltYWdlc1JlZiA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPignaW1hZ2VzUmVmJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNpbmdsZUltYWdlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXhTZWxlY3RlZCA9IHRoaXMuaW1hZ2VzKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbVt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldID09PSB0aGlzLmltYWdlU2VsZWN0ZWQoKT8uW3RoaXMuZmllbGREaXNwbGF5U3JjSW1hZ2UoKV0pO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWQuc2V0KGluZGV4U2VsZWN0ZWQpO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgICAgIHRoaXMuaW1hZ2VzUmVmKClbdGhpcy5pbmRleFNlbGVjdGVkKCldLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJykucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlclByZXZpb3VzSW1hZ2UoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICB0aGlzLmhhbmRsZXJOZXh0SW1hZ2UoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlzRmlyc3RSZW5kZXIuc2V0KHRydWUpO1xuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSh0aGlzLnNldFdpZHRoSW1hZ2VzLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIHRoaXMuc2V0V2lkdGhJbWFnZXMoKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByaXZhdGUgc2V0V2lkdGhJbWFnZXMoKSB7XG4gICAgaWYgKCF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgdGhpcy5pbWFnZXNSZWYoKS5mb3JFYWNoKGltYWdlID0+IHtcbiAgICAgICAgaW1hZ2UubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGltYWdlLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICsgJ3B4JztcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzaW5nbGVJbWFnZVJlZiA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKTtcbiAgICBpZiAoc2luZ2xlSW1hZ2VSZWYpIHtcbiAgICAgIHNpbmdsZUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSAnJztcbiAgICAgIHNpbmdsZUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgfVxuICAgIHRoaXMudmlld1BvcnQuc2V0KHRoaXMuY29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaW1nLnNyYyA9IHRoaXMuaW1hZ2VTZWxlY3RlZCgpPy5bdGhpcy5maWVsZERpc3BsYXlTcmNJbWFnZSgpXSBhcyBzdHJpbmc7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMud2lkdGhEZWZhdWx0LnNldChpbWcubmF0dXJhbFdpZHRoKTtcbiAgICAgIHRoaXMuaGVpZ2h0RGVmYXVsdC5zZXQoaW1nLm5hdHVyYWxIZWlnaHQpO1xuICAgICAgdGhpcy53aWR0aEltYWdlLnNldCh0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQud2lkdGgpO1xuXG4gICAgICB0aGlzLnNldFN0eWxlU2VsZWN0SW1hZ2UoKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUVycm9yKGU6IEVycm9yRXZlbnQsIGltYWdlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgY29uc3QgZXZlbnQgPSBlIGFzIElFdmVudDtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaW1hZ2VbJ2lzRXJyb3InXSA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNob3dCdXR0b24oaXNTaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1Nob3dCdXR0b24uc2V0KGlzU2hvdyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck1vdXNlRXZlbnQoZXZlbnQ6IEV2ZW50LCBzdGF0dXM6IGJvb2xlYW4pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhvdmVyQ29udGVudFZpZXdJbWFnZS5zZXQoc3RhdHVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xvc2VQb3B1cChlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclpvb20oZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6ICdpbicgfCAnb3V0Jykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZGlzYWJsZS5zZXQoZmFsc2UpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHJhZ2dhYmxlRWwgPSB0aGlzLm1ha2VFbGVtZW50RHJhZ2dhYmxlKHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBpc092ZXJmbG93SGlkZGVuRGVzaXJlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ2dhYmxlRWwuc2V0KGRyYWdnYWJsZUVsKTtcblxuICAgIGlmICh0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCkgLyB0aGlzLndpZHRoSW1hZ2UoKSAqIDEwMCA8IDEpIHtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoMSAvIDEwMCAqIHRoaXMud2lkdGhJbWFnZSgpIC8gdGhpcy53aWR0aERlZmF1bHQoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCkgLyB0aGlzLndpZHRoSW1hZ2UoKSAqIDEwMCA+IDUwMDAgKiAwLjkpIHtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoNTAwMCAqIDAuOSAvIDEwMCAqIHRoaXMud2lkdGhJbWFnZSgpIC8gdGhpcy53aWR0aERlZmF1bHQoKSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnaW4nKSB7XG4gICAgICBjb25zdCBzY2FsZVZhbHVlID0gdGhpcy5zY2FsZVZhbHVlKCkgKiAoMSArIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoc2NhbGVWYWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnb3V0Jykge1xuICAgICAgY29uc3Qgc2NhbGVWYWx1ZSA9IHRoaXMuc2NhbGVWYWx1ZSgpIC8gKDEgKyB0aGlzLnN0ZXAoKSk7XG4gICAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KHNjYWxlVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnNldFdpZHRoSGVpZ2h0KGVsZW1lbnQpO1xuICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBgYWJzb2x1dGVgO1xuICAgIGlmICghdGhpcy5jYW5EcmFnICYmIHRoaXMuZHJhZ2dhYmxlRWwoKSAmJiB0aGlzLmRyYWdnYWJsZUVsKCk/LnN0b3BEcmFnZ2FibGVCZWhhdmlvcikge1xuXG4gICAgICB0aGlzLmRyYWdnYWJsZUVsKCk/LnN0b3BEcmFnZ2FibGVCZWhhdmlvcj8uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJOZXh0SW1hZ2UoZTogRXZlbnQpIHtcbiAgICBjb25zdCBpbmRleFNlbGVjdGVkID0gdGhpcy5pbmRleFNlbGVjdGVkKCkgKyAxO1xuXG4gICAgdGhpcy5oYW5kbGVyU2VsZWN0SW1hZ2UoZSwgdGhpcy5pbWFnZXMoKVtpbmRleFNlbGVjdGVkXSwgaW5kZXhTZWxlY3RlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclByZXZpb3VzSW1hZ2UoZTogRXZlbnQpIHtcbiAgICBjb25zdCBpbmRleFNlbGVjdGVkID0gdGhpcy5pbmRleFNlbGVjdGVkKCkgLSAxO1xuXG4gICAgdGhpcy5oYW5kbGVyU2VsZWN0SW1hZ2UoZSwgdGhpcy5pbWFnZXMoKVtpbmRleFNlbGVjdGVkXSwgaW5kZXhTZWxlY3RlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdEltYWdlKGU6IEV2ZW50LCBpbWFnZVNlbGVjdGVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpbmRleFNlbGVjdGVkOiBudW1iZXIpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghaW1hZ2VTZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzRmlyc3RSZW5kZXIuc2V0KHRydWUpO1xuICAgIGNvbnN0IGVsZW1lbnRSYXRpbyA9IHRoaXMuZWxlbWVudFJhdGlvUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoZWxlbWVudFJhdGlvKSB7XG4gICAgICBlbGVtZW50UmF0aW8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gICAgdGhpcy5pbWFnZVNlbGVjdGVkLnNldChpbWFnZVNlbGVjdGVkKTtcbiAgICB0aGlzLmluZGV4U2VsZWN0ZWQuc2V0KGluZGV4U2VsZWN0ZWQpO1xuICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoMSk7XG4gICAgdGhpcy5pbWFnZXNSZWYoKVtpbmRleFNlbGVjdGVkXS5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgdGhpcy5zZXRXaWR0aEltYWdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdWxsU2NyZWVuKCkge1xuICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICB0aGlzLmRpc2FibGUuc2V0KHRydWUpO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGZ1bGxFbGVtZW50ID0gdGhpcy5mdWxsQ29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIHRoaXMuZnVsbFNjcmVlbi5zZXQoIXRoaXMuZnVsbFNjcmVlbigpKTtcblxuICAgICAgaWYgKCFmdWxsRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgZnVsbEVsZW1lbnQuc3R5bGUud2lkdGggPSAnOTUlJztcbiAgICAgICAgZnVsbEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzk1JSc7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLndpZHRoID0gJzgwJSc7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLmhlaWdodCA9ICc5MCUnO1xuICAgICAgfVxuICAgICAgdGhpcy52aWV3UG9ydC5zZXQodGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdHlsZVNlbGVjdEltYWdlKHRydWUpO1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYHVuc2V0YDtcbiAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYHVuc2V0YDtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzZXQoKSB7XG4gICAgdGhpcy5kaXNhYmxlLnNldCh0cnVlKTtcbiAgICB0aGlzLnNldFN0eWxlU2VsZWN0SW1hZ2UodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG1ha2VFbGVtZW50RHJhZ2dhYmxlID0gKHtcbiAgICBlbGVtZW50LFxuICAgIERSQUdHQUJMRV9DU1NfQ0xBU1MgPSAnZHJhZ2dhYmxlLWVsZW1lbnQnLFxuICB9OiB7XG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlzT3ZlcmZsb3dIaWRkZW5EZXNpcmVkPzogYm9vbGVhbjtcbiAgICBEUkFHR0FCTEVfQ1NTX0NMQVNTPzogc3RyaW5nO1xuICB9KTogSVpvb21EcmFnSFRNTEVsZW1lbnQgfCBudWxsID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpc1RoZVJlcXVpcmVkQ1NTQWxyZWFkeUluUGxhY2UgPSAhIUFycmF5LmZyb20oXG4gICAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N0eWxlJylcbiAgICApLmZpbHRlcigoc3R5bGVFbCkgPT5cbiAgICAgIHN0eWxlRWw/LnRleHRDb250ZW50Py5pbmNsdWRlcyhgLiR7RFJBR0dBQkxFX0NTU19DTEFTU31gKVxuICAgICk/LlswXTtcblxuICAgIGlmICghaXNUaGVSZXF1aXJlZENTU0FscmVhZHlJblBsYWNlKSB7XG4gICAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChcbiAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSwge1xuICAgICAgICAgIHRleHRDb250ZW50OiBgXG4gICAgICAgICAgLiR7RFJBR0dBQkxFX0NTU19DTEFTU30ge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgY3Vyc29yOiBncmFiYmluZyAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBgLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKERSQUdHQUJMRV9DU1NfQ0xBU1MpKSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoRFJBR0dBQkxFX0NTU19DTEFTUyk7XG4gICAgfVxuICAgIGVsZW1lbnQub25tb3VzZWRvd24gPSAobW91c2VEb3duRXZlbnQpID0+IHtcbiAgICAgIG1vdXNlRG93bkV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbGVtZW50Lm9ubW91c2Vtb3ZlID0gKG1vdXNlTW92ZUV2ZW50KSA9PiB7XG4gICAgICAgIG1vdXNlTW92ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHJlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAocmVjdEVsZW1lbnQubGVmdCArIHJlY3RFbGVtZW50LndpZHRoICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRYID4gKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgKyAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApICYmIHJlY3RFbGVtZW50LmxlZnQgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFggPCAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7ZWxlbWVudC5vZmZzZXRMZWZ0ICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRYfXB4YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjdEVsZW1lbnQudG9wICsgcmVjdEVsZW1lbnQuaGVpZ2h0ICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRZID4gKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8udG9wIHx8IDApICYmIHJlY3RFbGVtZW50LnRvcCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WSA8ICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7ZWxlbWVudC5vZmZzZXRUb3AgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFl9cHhgO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50Lm9ubW91c2V1cCA9IChtb3VzZVVwRXZlbnQpID0+IHtcbiAgICAgIG1vdXNlVXBFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxlbWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGVsZW1lbnQsIHtcbiAgICAgIHN0b3BEcmFnZ2FibGVCZWhhdmlvcigpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKERSQUdHQUJMRV9DU1NfQ0xBU1MpO1xuICAgICAgICBlbGVtZW50Lm9ubW91c2Vkb3duID0gbnVsbDtcbiAgICAgICAgZWxlbWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XG4gICAgICAgIGVsZW1lbnQub25tb3VzZXVwID0gbnVsbDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gJ3Vuc2V0JztcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSAndW5zZXQnO1xuXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHNldFN0eWxlU2VsZWN0SW1hZ2UocmVzZXQ/OiBib29sZWFuKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZVZhbHVlID0gKCgodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSAvIHRoaXMud2lkdGhEZWZhdWx0KCkpIDwgKCh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSAtICh0aGlzLnNpbmdsZUltYWdlKCkgPyAwIDogNDApKSAvIHRoaXMuaGVpZ2h0RGVmYXVsdCgpKSA/ICgodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSAvIHRoaXMud2lkdGhEZWZhdWx0KCkpIDogKCh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSAtICh0aGlzLnNpbmdsZUltYWdlKCkgPyAwIDogNDApKSAvIHRoaXMuaGVpZ2h0RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5zY2FsZVZhbHVlLnNldChzY2FsZVZhbHVlKTtcblxuICAgIGlmICh0aGlzLnNjYWxlVmFsdWUoKSA+IDEgJiYgKHJlc2V0IHx8IHRoaXMuaXNGaXJzdFJlbmRlcigpKSAmJiAhdGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoMSk7XG4gICAgfVxuICAgIHRoaXMuc2V0V2lkdGhIZWlnaHQoZWxlbWVudCk7XG4gICAgaWYgKHRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gYHVuc2V0YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0V2lkdGhIZWlnaHQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dGhpcy5zY2FsZVZhbHVlKCkgKiB0aGlzLndpZHRoRGVmYXVsdCgpfXB4YDtcbiAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3RoaXMuc2NhbGVWYWx1ZSgpICogdGhpcy5oZWlnaHREZWZhdWx0KCl9cHhgO1xuICAgIHRoaXMuY2FuRHJhZy5zZXQoZmFsc2UpO1xuICAgIGNvbnN0IHJlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGlmICgocmVjdEVsZW1lbnQud2lkdGggPiAodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSkgfHwgKHJlY3RFbGVtZW50LmhlaWdodCA+ICh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSkpIHtcbiAgICAgIHRoaXMuY2FuRHJhZy5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChyZWN0RWxlbWVudC5sZWZ0ICsgcmVjdEVsZW1lbnQud2lkdGggPCAodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LmxlZnQgfHwgMCkgfHwgcmVjdEVsZW1lbnQubGVmdCA+ICh0aGlzLnZpZXdQb3J0KCk/LmxlZnQgfHwgMCkpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGB1bnNldGA7XG4gICAgfVxuICAgIGlmIChyZWN0RWxlbWVudC50b3AgKyByZWN0RWxlbWVudC5oZWlnaHQgPCAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkgKyAodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkgfHwgcmVjdEVsZW1lbnQudG9wID4gKHRoaXMudmlld1BvcnQoKT8udG9wIHx8IDApKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGB1bnNldGA7XG4gICAgfVxuXG4gICAgdGhpcy5zZXREaXNwbGF5UmF0aW8oKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzcGxheVJhdGlvKCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLnJhdGlvLnNldChgJHt2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoZWxlbWVudC53aWR0aCAvIHRoaXMud2lkdGhEZWZhdWx0KCkgKiAxMDAsIGZhbHNlLCAwKX0lYCk7XG4gICAgY29uc3QgZWxlbWVudFJhdGlvID0gdGhpcy5lbGVtZW50UmF0aW9SZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICBlbGVtZW50UmF0aW8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGltZW91dChjYWxsYmFjazogKGlkOiBudW1iZXIpID0+IHZvaWQsIGRlbGF5OiBudW1iZXIpIHtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKHRpbWVvdXRJZCksIGRlbGF5KSBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICB0aGlzLnRpbWVvdXRzLnVwZGF0ZShpZHMgPT4gWy4uLmlkcywgdGltZW91dElkXSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRpbWVvdXRzKCkuZm9yRWFjaChpdGVtID0+IGNsZWFyVGltZW91dChpdGVtKSk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn0iLCJAaWYgKGltYWdlcygpIHx8IHNpbmdsZUltYWdlKCkpIHtcbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXBcIlxuICAgIFtjbGFzcy4hYmctW3RyYW5zcGFyZW50XV09XCJyZW1vdmVCYWNrZHJvcCgpXCJcbiAgICBbc3R5bGUuekluZGV4XT1cInpJbmRleCgpXCI+XG4gICAgPGRpdiAjZnVsbENvbnRhaW5lclJlZlxuICAgICAgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lciB7eyBjbGFzc0NvbnRhaW5lckluY2x1ZGUoKSB8fCAnJyB9fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktZW5kIG1iLVsxNnB4XSB6LTEwXCI+XG4gICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNsb3NlIHRleHQtWzI0cHhdIHRleHQtWyNmZmZmZmZdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsb3NlUG9wdXAoJGV2ZW50KVwiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldyB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlclNob3dCdXR0b24odHJ1ZSlcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVyU2hvd0J1dHRvbihmYWxzZSlcIj5cbiAgICAgICAgICAgICAgPGRpdiAjY29udGFpbmVyUmVmXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVyTW91c2VFdmVudCgkZXZlbnQsZmFsc2UpXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkRGlzcGxheVNyY0ltYWdlKCkgJiYgaW1hZ2VTZWxlY3RlZCgpOyBhcyBpbWFnZVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgI3NpbmdsZUltYWdlUmVmXG4gICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVNlbGVjdGVkW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggbS1bYXV0b11cIlxuICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGltYWdlU2VsZWN0ZWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxkaXYgI2VsZW1lbnRSYXRpb1JlZlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctcmF0aW8gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNW0gdGV4dC1bI2U2ZTdlYV0gdy1bODBweF0gaC1bMzRweF0gcm91bmRlZC1bNHB4XSBhYnNvbHV0ZSB0b3AtWzUwJV0gbGVmdC1bNTAlXVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyByYXRpbygpIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoIWltYWdlU2VsZWN0ZWQoKT8uWydlcnJvciddKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVyTW91c2VFdmVudCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWhvdmVyQ29udGVudFZpZXdJbWFnZSgpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg1ciBhYnNvbHV0ZSB6LTEwIHRvcC1bLTQ0cHhdXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl96b29tX291dCcsIGRpcmVjdGlvbjogJ3RvcCcsIHpJbmRleDoxMzAwfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gcm91bmRlZC1sLVs4cHhdIGxpYnMtdWktaWNvbi16b29tLW91dCBiZWZvcmU6dGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwnb3V0JylcIj4gPC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDogJ2kxOG5fem9vbV9pbicsIGRpcmVjdGlvbjogJ3RvcCcsIHpJbmRleDoxMzAwfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gbGlicy11aS1pY29uLXpvb20taW4gYmVmb3JlOnRleHQtWzE2cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyWm9vbSgkZXZlbnQsJ2luJylcIj4gPC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDogZnVsbFNjcmVlbigpID8gJ2kxOG5fYWN0aW9uX2V4aXRfZnVsbF9zY3JlZW4nIDogJ2kxOG5fYWN0aW9uX3ZpZXdfZnVsbF9zY3JlZW4nLCBkaXJlY3Rpb246ICd0b3AnLCB6SW5kZXg6MTMwMH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJGdWxsU2NyZWVuKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwie3sgZnVsbFNjcmVlbigpID8gJ2xpYnMtdWktaWNvbi1mdWxsc2NyZWVuLWV4aXQnIDogJ2xpYnMtdWktaWNvbi1mdWxsc2NyZWVuLW9wZW4nIH19IHRleHQtWyNmZmZmZmZdIHRleHQtWzE2cHhdXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gcm91bmRlZC1yLVs4cHhdIGJvcmRlci1sIGJvcmRlci1sLTEgYm9yZGVyLVsjNWQ2MzZiXSBmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJSZXNldCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tcmVmcmVzaCB0ZXh0LTE2cHggbXItWzhweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtWyNmZmZmZmZdXT1cIiFkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cImRpc2FibGUoKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg1ciBsaWJzLXVpLWdhbGxlcnktdGV4dC1yZXN0b3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjZmZmZmZmXV09XCIhZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCJkaXNhYmxlKClcIj57eyAnaTE4bl9yZXN0b3JlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoIXNpbmdsZUltYWdlKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyNmZmZmZmZdIG10LVsxMnB4XVwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChmdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVsxNnB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3RhdGUtMTgwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUHJldmlvdXNJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGluZGV4U2VsZWN0ZWQoKSsxIH19L3t7IGltYWdlcygpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZnVsbFNjcmVlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bMTZweF0gZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09IGltYWdlcygpLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSBpbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyTmV4dEltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT1pbWFnZXMoKS5sZW5ndGggLSAxXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIEBpZiAoIXNpbmdsZUltYWdlKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1saXN0IHB4LVszMnB4XSBtdC1bMjRweF0gZmxleFwiXG4gICAgICAgICAgICAgIFtjbGFzcy4haGlkZGVuXT1cImZ1bGxTY3JlZW4oKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzI0cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdGF0ZS0xODBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQcmV2aW91c0ltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gMFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWF4LXctWzgwJV0gcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaW1hZ2Ugb2YgaW1hZ2VzKCk7IHRyYWNrIGluZGV4OyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjaW1hZ2VzUmVmXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tci1bMTJweF1dPVwiIWxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpbWFnZVtmaWVsZERpc3BsYXlTcmNJbWFnZSgpXSA9PT0gaW1hZ2VTZWxlY3RlZCgpPy5bZmllbGREaXNwbGF5U3JjSW1hZ2UoKV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaC1mdWxsIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEltYWdlKCRldmVudCxpbWFnZSxpbmRleClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVtmaWVsZERpc3BsYXlTcmNJbWFnZSgpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IG1heC1oLWZ1bGwgbWF4LXctZnVsbCBtLVthdXRvXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWFnZUVycm9yKCRldmVudCwgaW1hZ2UpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bMjRweF0gZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlck5leHRJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICB9XG4iXX0=
|