ngx-extended-pdf-viewer
Version:
Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.
152 lines • 33.3 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../pdf-toggle-sidebar/pdf-toggle-sidebar.component";
import * as i2 from "../pdf-find-button/pdf-find-button.component";
import * as i3 from "../pdf-paging-area/pdf-paging-area.component";
import * as i4 from "../pdf-zoom-toolbar/pdf-zoom-toolbar.component";
import * as i5 from "../pdf-document-properties/pdf-document-properties.component";
import * as i6 from "../pdf-no-spread/pdf-no-spread.component";
import * as i7 from "../pdf-odd-spread/pdf-odd-spread.component";
import * as i8 from "../pdf-even-spread/pdf-even-spread.component";
import * as i9 from "../pdf-single-page-mode/pdf-single-page-mode.component";
import * as i10 from "../pdf-vertical-scroll-button/pdf-vertical-scroll-mode.component";
import * as i11 from "../pdf-horizontal-scroll/pdf-horizontal-scroll.component";
import * as i12 from "../pdf-wrapped-scroll-mode/pdf-wrapped-scroll-mode.component";
import * as i13 from "../pdf-infinite-scroll/pdf-infinite-scroll.component";
import * as i14 from "../pdf-book-mode/pdf-book-mode.component";
import * as i15 from "../pdf-hand-tool/pdf-hand-tool.component";
import * as i16 from "../pdf-select-tool/pdf-select-tool.component";
import * as i17 from "../pdf-rotate-page/pdf-rotate-page.component";
import * as i18 from "../pdf-presentation-mode/pdf-presentation-mode.component";
import * as i19 from "../pdf-open-file/pdf-open-file.component";
import * as i20 from "../pdf-print/pdf-print.component";
import * as i21 from "../pdf-download/pdf-download.component";
import * as i22 from "../pdf-editor/pdf-editor.component";
import * as i23 from "../pdf-toggle-secondary-toolbar/pdf-toggle-secondary-toolbar.component";
import * as i24 from "@angular/common";
export class PdfToolbarComponent {
constructor(elementRef) {
this.elementRef = elementRef;
this.mobileFriendlyZoomScale = 1;
this.primaryMenuVisible = true;
this.showDownloadButton = true;
this.showDrawEditor = false;
this.showTextEditor = false;
this.showStampEditor = false;
this.showFindButton = undefined;
this.showHandToolButton = true;
this.showOpenFileButton = true;
this.showPrintButton = true;
this.showPagingButtons = true;
this.showPresentationModeButton = false;
this.showRotateButton = true;
this.showSecondaryToolbarButton = true;
this.showSidebarButton = true;
this.sidebarVisible = false;
this.showZoomButtons = true;
this.textLayer = undefined;
this.toolbarMarginTop = '0px';
this.toolbarWidth = '100%';
this.zoomLevels = ['auto', 'page-actual', 'page-fit', 'page-width', 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4];
this.pageViewModeChange = new EventEmitter();
this.showPropertiesButton = true;
this.showSpreadButton = true;
this.showSinglePageModeButton = true;
this.showVerticalScrollButton = true;
this.showHorizontalScrollButton = true;
this.showWrappedScrollButton = true;
this.showInfiniteScrollButton = true;
this.showBookModeButton = true;
this.onToolbarLoaded = new EventEmitter();
this.findbarVisible = false;
}
ngAfterViewInit() {
this.onToolbarLoaded.emit(this.elementRef.nativeElement.getElementsByClassName('toolbar')[0]);
}
updatePageViewMode(pageViewMode) {
if (pageViewMode) {
console.log(pageViewMode);
this.pageViewModeChange.emit(pageViewMode);
this.pageViewMode = pageViewMode;
}
}
}
PdfToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: PdfToolbarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
PdfToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: PdfToolbarComponent, selector: "pdf-toolbar", inputs: { customToolbar: "customToolbar", mobileFriendlyZoomScale: "mobileFriendlyZoomScale", primaryMenuVisible: "primaryMenuVisible", showDownloadButton: "showDownloadButton", showDrawEditor: "showDrawEditor", showTextEditor: "showTextEditor", showStampEditor: "showStampEditor", showFindButton: "showFindButton", showHandToolButton: "showHandToolButton", showOpenFileButton: "showOpenFileButton", showPrintButton: "showPrintButton", showPagingButtons: "showPagingButtons", showPresentationModeButton: "showPresentationModeButton", showRotateButton: "showRotateButton", showSecondaryToolbarButton: "showSecondaryToolbarButton", showSidebarButton: "showSidebarButton", sidebarVisible: "sidebarVisible", showZoomButtons: "showZoomButtons", textLayer: "textLayer", toolbarMarginTop: "toolbarMarginTop", toolbarWidth: "toolbarWidth", zoomLevels: "zoomLevels", pageViewMode: "pageViewMode", spread: "spread", scrollMode: "scrollMode", showPropertiesButton: "showPropertiesButton", showSpreadButton: "showSpreadButton", showSinglePageModeButton: "showSinglePageModeButton", showVerticalScrollButton: "showVerticalScrollButton", showHorizontalScrollButton: "showHorizontalScrollButton", showWrappedScrollButton: "showWrappedScrollButton", showInfiniteScrollButton: "showInfiniteScrollButton", showBookModeButton: "showBookModeButton", findbarVisible: "findbarVisible" }, outputs: { pageViewModeChange: "pageViewModeChange", onToolbarLoaded: "onToolbarLoaded" }, ngImport: i0, template: "<div\n class=\"toolbar\"\n [class.invisible]=\"!primaryMenuVisible\"\n [style.transform]=\"'scale(' + mobileFriendlyZoomScale + ')'\"\n [style.transformOrigin]=\"'left center'\"\n [style.width]=\"toolbarWidth\"\n [style.marginTop]=\"toolbarMarginTop\"\n>\n <div id=\"toolbarContainer\">\n <ng-content *ngTemplateOutlet=\"customToolbar ? customToolbar : defaultToolbar\"></ng-content>\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultToolbar>\n <div id=\"toolbarViewer\">\n <div id=\"toolbarViewerLeft\">\n <pdf-toggle-sidebar [show]=\"showSidebarButton\" [sidebarVisible]=\"sidebarVisible\"></pdf-toggle-sidebar>\n <pdf-find-button [showFindButton]=\"showFindButton\" [textLayer]=\"textLayer\" [findbarVisible]=\"findbarVisible\"></pdf-find-button>\n <pdf-paging-area [showPagingButtons]=\"showPagingButtons\"></pdf-paging-area>\n </div>\n <pdf-zoom-toolbar [showZoomButtons]=\"showZoomButtons\" [zoomLevels]=\"zoomLevels\"></pdf-zoom-toolbar>\n <div id=\"toolbarViewerRight\">\n <pdf-document-properties [show]=\"showPropertiesButton\"></pdf-document-properties>\n <pdf-no-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-no-spread>\n <pdf-odd-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-odd-spread>\n <pdf-even-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-even-spread>\n <pdf-single-page-mode\n [show]=\"showSinglePageModeButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-single-page-mode>\n <pdf-vertical-scroll-mode\n [show]=\"showVerticalScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-vertical-scroll-mode>\n <pdf-horizontal-scroll\n [show]=\"showHorizontalScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-horizontal-scroll>\n <pdf-wrapped-scroll-mode\n [show]=\"showWrappedScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-wrapped-scroll-mode>\n <pdf-infinite-scroll\n [show]=\"showInfiniteScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-infinite-scroll>\n <pdf-book-mode\n [show]=\"showBookModeButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-book-mode>\n <pdf-hand-tool [showHandToolButton]=\"showHandToolButton\"></pdf-hand-tool>\n <pdf-select-tool [showSelectToolButton]=\"showHandToolButton\"></pdf-select-tool>\n <pdf-rotate-page [showRotateButton]=\"showRotateButton\" [clockwise]=\"true\" [counterClockwise]=\"false\"> </pdf-rotate-page>\n <pdf-rotate-page [showRotateButton]=\"showRotateButton\" [clockwise]=\"false\" [counterClockwise]=\"true\"> </pdf-rotate-page>\n <pdf-presentation-mode [showPresentationModeButton]=\"showPresentationModeButton\"></pdf-presentation-mode>\n <pdf-open-file [showOpenFileButton]=\"showOpenFileButton\"></pdf-open-file>\n <pdf-print [showPrintButton]=\"showPrintButton\"></pdf-print>\n <pdf-download [showDownloadButton]=\"showDownloadButton\"></pdf-download>\n\n <pdf-editor [showDrawEditor]=\"showDrawEditor\" [showTextEditor]=\"showTextEditor\" [showStampEditor]=\"showStampEditor\"></pdf-editor>\n <pdf-toggle-secondary-toolbar [showSecondaryToolbarButton]=\"showSecondaryToolbarButton\"> </pdf-toggle-secondary-toolbar>\n </div>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: i1.PdfToggleSidebarComponent, selector: "pdf-toggle-sidebar", inputs: ["show", "sidebarVisible"], outputs: ["showChange"] }, { type: i2.PdfFindButtonComponent, selector: "pdf-find-button", inputs: ["showFindButton", "textLayer", "findbarVisible"] }, { type: i3.PdfPagingAreaComponent, selector: "pdf-paging-area", inputs: ["showPagingButtons"] }, { type: i4.PdfZoomToolbarComponent, selector: "pdf-zoom-toolbar", inputs: ["showZoomButtons", "zoomLevels"] }, { type: i5.PdfDocumentPropertiesComponent, selector: "pdf-document-properties", inputs: ["show"] }, { type: i6.PdfNoSpreadComponent, selector: "pdf-no-spread", inputs: ["show", "scrollMode"] }, { type: i7.PdfOddSpreadComponent, selector: "pdf-odd-spread", inputs: ["show", "scrollMode"] }, { type: i8.PdfEvenSpreadComponent, selector: "pdf-even-spread", inputs: ["show", "scrollMode"] }, { type: i9.PdfSinglePageModeComponent, selector: "pdf-single-page-mode", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { type: i10.PdfVerticalScrollModeComponent, selector: "pdf-vertical-scroll-mode", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { type: i11.PdfHorizontalScrollComponent, selector: "pdf-horizontal-scroll", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { type: i12.PdfWrappedScrollModeComponent, selector: "pdf-wrapped-scroll-mode", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { type: i13.PdfInfiniteScrollComponent, selector: "pdf-infinite-scroll", inputs: ["show", "pageViewMode", "scrollMode"], outputs: ["pageViewModeChange"] }, { type: i14.PdfBookModeComponent, selector: "pdf-book-mode", inputs: ["show", "pageViewMode", "scrollMode"], outputs: ["pageViewModeChange"] }, { type: i15.PdfHandToolComponent, selector: "pdf-hand-tool", inputs: ["showHandToolButton"] }, { type: i16.PdfSelectToolComponent, selector: "pdf-select-tool", inputs: ["showSelectToolButton"] }, { type: i17.PdfRotatePageComponent, selector: "pdf-rotate-page", inputs: ["showRotateButton", "clockwise", "counterClockwise"] }, { type: i18.PdfPresentationModeComponent, selector: "pdf-presentation-mode", inputs: ["showPresentationModeButton"] }, { type: i19.PdfOpenFileComponent, selector: "pdf-open-file", inputs: ["showOpenFileButton"] }, { type: i20.PdfPrintComponent, selector: "pdf-print", inputs: ["showPrintButton"] }, { type: i21.PdfDownloadComponent, selector: "pdf-download", inputs: ["showDownloadButton"] }, { type: i22.PdfEditorComponent, selector: "pdf-editor", inputs: ["showDrawEditor", "showTextEditor", "showStampEditor"] }, { type: i23.PdfToggleSecondaryToolbarComponent, selector: "pdf-toggle-secondary-toolbar", inputs: ["showSecondaryToolbarButton"] }], directives: [{ type: i24.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: PdfToolbarComponent, decorators: [{
type: Component,
args: [{ selector: 'pdf-toolbar', template: "<div\n class=\"toolbar\"\n [class.invisible]=\"!primaryMenuVisible\"\n [style.transform]=\"'scale(' + mobileFriendlyZoomScale + ')'\"\n [style.transformOrigin]=\"'left center'\"\n [style.width]=\"toolbarWidth\"\n [style.marginTop]=\"toolbarMarginTop\"\n>\n <div id=\"toolbarContainer\">\n <ng-content *ngTemplateOutlet=\"customToolbar ? customToolbar : defaultToolbar\"></ng-content>\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultToolbar>\n <div id=\"toolbarViewer\">\n <div id=\"toolbarViewerLeft\">\n <pdf-toggle-sidebar [show]=\"showSidebarButton\" [sidebarVisible]=\"sidebarVisible\"></pdf-toggle-sidebar>\n <pdf-find-button [showFindButton]=\"showFindButton\" [textLayer]=\"textLayer\" [findbarVisible]=\"findbarVisible\"></pdf-find-button>\n <pdf-paging-area [showPagingButtons]=\"showPagingButtons\"></pdf-paging-area>\n </div>\n <pdf-zoom-toolbar [showZoomButtons]=\"showZoomButtons\" [zoomLevels]=\"zoomLevels\"></pdf-zoom-toolbar>\n <div id=\"toolbarViewerRight\">\n <pdf-document-properties [show]=\"showPropertiesButton\"></pdf-document-properties>\n <pdf-no-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-no-spread>\n <pdf-odd-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-odd-spread>\n <pdf-even-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-even-spread>\n <pdf-single-page-mode\n [show]=\"showSinglePageModeButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-single-page-mode>\n <pdf-vertical-scroll-mode\n [show]=\"showVerticalScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-vertical-scroll-mode>\n <pdf-horizontal-scroll\n [show]=\"showHorizontalScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-horizontal-scroll>\n <pdf-wrapped-scroll-mode\n [show]=\"showWrappedScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-wrapped-scroll-mode>\n <pdf-infinite-scroll\n [show]=\"showInfiniteScrollButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-infinite-scroll>\n <pdf-book-mode\n [show]=\"showBookModeButton\"\n [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\"\n [scrollMode]=\"scrollMode\"\n ></pdf-book-mode>\n <pdf-hand-tool [showHandToolButton]=\"showHandToolButton\"></pdf-hand-tool>\n <pdf-select-tool [showSelectToolButton]=\"showHandToolButton\"></pdf-select-tool>\n <pdf-rotate-page [showRotateButton]=\"showRotateButton\" [clockwise]=\"true\" [counterClockwise]=\"false\"> </pdf-rotate-page>\n <pdf-rotate-page [showRotateButton]=\"showRotateButton\" [clockwise]=\"false\" [counterClockwise]=\"true\"> </pdf-rotate-page>\n <pdf-presentation-mode [showPresentationModeButton]=\"showPresentationModeButton\"></pdf-presentation-mode>\n <pdf-open-file [showOpenFileButton]=\"showOpenFileButton\"></pdf-open-file>\n <pdf-print [showPrintButton]=\"showPrintButton\"></pdf-print>\n <pdf-download [showDownloadButton]=\"showDownloadButton\"></pdf-download>\n\n <pdf-editor [showDrawEditor]=\"showDrawEditor\" [showTextEditor]=\"showTextEditor\" [showStampEditor]=\"showStampEditor\"></pdf-editor>\n <pdf-toggle-secondary-toolbar [showSecondaryToolbarButton]=\"showSecondaryToolbarButton\"> </pdf-toggle-secondary-toolbar>\n </div>\n </div>\n</ng-template>\n", styles: [""] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { customToolbar: [{
type: Input
}], mobileFriendlyZoomScale: [{
type: Input
}], primaryMenuVisible: [{
type: Input
}], showDownloadButton: [{
type: Input
}], showDrawEditor: [{
type: Input
}], showTextEditor: [{
type: Input
}], showStampEditor: [{
type: Input
}], showFindButton: [{
type: Input
}], showHandToolButton: [{
type: Input
}], showOpenFileButton: [{
type: Input
}], showPrintButton: [{
type: Input
}], showPagingButtons: [{
type: Input
}], showPresentationModeButton: [{
type: Input
}], showRotateButton: [{
type: Input
}], showSecondaryToolbarButton: [{
type: Input
}], showSidebarButton: [{
type: Input
}], sidebarVisible: [{
type: Input
}], showZoomButtons: [{
type: Input
}], textLayer: [{
type: Input
}], toolbarMarginTop: [{
type: Input
}], toolbarWidth: [{
type: Input
}], zoomLevels: [{
type: Input
}], pageViewMode: [{
type: Input
}], pageViewModeChange: [{
type: Output
}], spread: [{
type: Input
}], scrollMode: [{
type: Input
}], showPropertiesButton: [{
type: Input
}], showSpreadButton: [{
type: Input
}], showSinglePageModeButton: [{
type: Input
}], showVerticalScrollButton: [{
type: Input
}], showHorizontalScrollButton: [{
type: Input
}], showWrappedScrollButton: [{
type: Input
}], showInfiniteScrollButton: [{
type: Input
}], showBookModeButton: [{
type: Input
}], onToolbarLoaded: [{
type: Output
}], findbarVisible: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIvc3JjL2xpYi90b29sYmFyL3BkZi10b29sYmFyL3BkZi10b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdG9vbGJhci9wZGYtdG9vbGJhci9wZGYtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVL0csTUFBTSxPQUFPLG1CQUFtQjtJQTZHOUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXhHbkMsNEJBQXVCLEdBQUcsQ0FBQyxDQUFDO1FBRzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUcxQix1QkFBa0IsR0FBeUIsSUFBSSxDQUFDO1FBR2hELG1CQUFjLEdBQXlCLEtBQUssQ0FBQztRQUc3QyxtQkFBYyxHQUF5QixLQUFLLENBQUM7UUFHN0Msb0JBQWUsR0FBeUIsS0FBSyxDQUFDO1FBRzlDLG1CQUFjLEdBQXFDLFNBQVMsQ0FBQztRQUc3RCx1QkFBa0IsR0FBeUIsSUFBSSxDQUFDO1FBR2hELHVCQUFrQixHQUF5QixJQUFJLENBQUM7UUFHaEQsb0JBQWUsR0FBeUIsSUFBSSxDQUFDO1FBRzdDLHNCQUFpQixHQUF5QixJQUFJLENBQUM7UUFHL0MsK0JBQTBCLEdBQXlCLEtBQUssQ0FBQztRQUd6RCxxQkFBZ0IsR0FBeUIsSUFBSSxDQUFDO1FBRzlDLCtCQUEwQixHQUF5QixJQUFJLENBQUM7UUFHeEQsc0JBQWlCLEdBQXlCLElBQUks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c0JBRDdCLEtBQUs7Z0JBSUMsd0JBQXdCO3NCQUQ5QixLQUFLO2dCQUlDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxlQUFlO3NCQURyQixNQUFNO2dCQUlBLGNBQWM7c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2VWaWV3TW9kZVR5cGUsIFNjcm9sbE1vZGVUeXBlIH0gZnJvbSAnLi4vLi4vb3B0aW9ucy9wZGYtdmlld2VyJztcbmltcG9ydCB7IFNwcmVhZFR5cGUgfSBmcm9tICcuLi8uLi9vcHRpb25zL3NwcmVhZC10eXBlJztcbmltcG9ydCB7IFJlc3BvbnNpdmVWaXNpYmlsaXR5IH0gZnJvbSAnLi4vLi4vcmVzcG9uc2l2ZS12aXNpYmlsaXR5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRmLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZGYtdG9vbGJhci5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBkZlRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGN1c3RvbVRvb2xiYXI6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1vYmlsZUZyaWVuZGx5Wm9vbVNjYWxlID0gMTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcHJpbWFyeU1lbnVWaXNpYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0Rvd25sb2FkQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dEcmF3RWRpdG9yOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93VGV4dEVkaXRvcjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1N0YW1wRWRpdG9yOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RmluZEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dIYW5kVG9vbEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93T3BlbkZpbGVCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1ByaW50QnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dQYWdpbmdCdXR0b25zOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dQcmVzZW50YXRpb25Nb2RlQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Um90YXRlQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dTZWNvbmRhcnlUb29sYmFyQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dTaWRlYmFyQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNpZGViYXJWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dab29tQnV0dG9uczogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZXh0TGF5ZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRvb2xiYXJNYXJnaW5Ub3AgPSAnMHB4JztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdG9vbGJhcldpZHRoID0gJzEwMCUnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b29tTGV2ZWxzID0gWydhdXRvJywgJ3BhZ2UtYWN0dWFsJywgJ3BhZ2UtZml0JywgJ3BhZ2Utd2lkdGgnLCAwLjUsIDAuNzUsIDEsIDEuMjUsIDEuNSwgMiwgMywgNF07XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBhZ2VWaWV3TW9kZTogUGFnZVZpZXdNb2RlVHlwZTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHBhZ2VWaWV3TW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZVZpZXdNb2RlVHlwZT4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3ByZWFkOiBTcHJlYWRUeXBlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzY3JvbGxNb2RlOiBTY3JvbGxNb2RlVHlwZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1Byb3BlcnRpZXNCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1NwcmVhZEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93U2luZ2xlUGFnZU1vZGVCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1ZlcnRpY2FsU2Nyb2xsQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dIb3Jpem9udGFsU2Nyb2xsQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dXcmFwcGVkU2Nyb2xsQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dJbmZpbml0ZVNjcm9sbEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Qm9va01vZGVCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uVG9vbGJhckxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpbmRiYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG9vbGJhckxvYWRlZC5lbWl0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Rvb2xiYXInKVswXSBhcyBIVE1MRWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogUGFnZVZpZXdNb2RlVHlwZSk6IHZvaWQge1xuICAgIGlmIChwYWdlVmlld01vZGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKHBhZ2VWaWV3TW9kZSk7XG4gICAgICB0aGlzLnBhZ2VWaWV3TW9kZUNoYW5nZS5lbWl0KHBhZ2VWaWV3TW9kZSk7XG4gICAgICB0aGlzLnBhZ2VWaWV3TW9kZSA9IHBhZ2VWaWV3TW9kZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0b29sYmFyXCJcbiAgW2NsYXNzLmludmlzaWJsZV09XCIhcHJpbWFyeU1lbnVWaXNpYmxlXCJcbiAgW3N0eWxlLnRyYW5zZm9ybV09XCInc2NhbGUoJyArIG1vYmlsZUZyaWVuZGx5Wm9vbVNjYWxlICsgJyknXCJcbiAgW3N0eWxlLnRyYW5zZm9ybU9yaWdpbl09XCInbGVmdCBjZW50ZXInXCJcbiAgW3N0eWxlLndpZHRoXT1cInRvb2xiYXJXaWR0aFwiXG4gIFtzdHlsZS5tYXJnaW5Ub3BdPVwidG9vbGJhck1hcmdpblRvcFwiXG4+XG4gIDxkaXYgaWQ9XCJ0b29sYmFyQ29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Ub29sYmFyID8gY3VzdG9tVG9vbGJhciA6IGRlZmF1bHRUb29sYmFyXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgaWQ9XCJsb2FkaW5nQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdsaW1tZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUb29sYmFyPlxuICA8ZGl2IGlkPVwidG9vbGJhclZpZXdlclwiPlxuICAgIDxkaXYgaWQ9XCJ0b29sYmFyVmlld2VyTGVmdFwiPlxuICAgICAgPHBkZi10b2dnbGUtc2lkZWJhciBbc2hvd109XCJzaG93U2lkZWJhckJ1dHRvblwiIFtzaWRlYmFyVmlzaWJsZV09XCJzaWRlYmFyVmlzaWJsZVwiPjwvcGRmLXRvZ2dsZS1zaWRlYmFyPlxuICAgICAgPHBkZi1maW5kLWJ1dHRvbiBbc2hvd0ZpbmRCdXR0b25dPVwic2hvd0ZpbmRCdXR0b25cIiBbdGV4dExheWVyXT1cInRleHRMYXllclwiIFtmaW5kYmFyVmlzaWJsZV09XCJmaW5kYmFyVmlzaWJsZVwiPjwvcGRmLWZpbmQtYnV0dG9uPlxuICAgICAgPHBkZi1wYWdpbmctYXJlYSBbc2hvd1BhZ2luZ0J1dHRvbnNdPVwic2hvd1BhZ2luZ0J1dHRvbnNcIj48L3BkZi1wYWdpbmctYXJlYT5cbiAgICA8L2Rpdj5cbiAgICA8cGRmLXpvb20tdG9vbGJhciBbc2hvd1pvb21CdXR0b25zXT1cInNob3dab29tQnV0dG9uc1wiIFt6b29tTGV2ZWxzXT1cInpvb21MZXZlbHNcIj48L3BkZi16b29tLXRvb2xiYXI+XG4gICAgPGRpdiBpZD1cInRvb2xiYXJWaWV3ZXJSaWdodFwiPlxuICAgICAgPHBkZi1kb2N1bWVudC1wcm9wZXJ0aWVzIFtzaG93XT1cInNob3dQcm9wZXJ0aWVzQnV0dG9uXCI+PC9wZGYtZG9jdW1lbnQtcHJvcGVydGllcz5cbiAgICAgIDxwZGYtbm8tc3ByZWFkIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIiBbc2hvd109XCJzaG93U3ByZWFkQnV0dG9uXCI+PC9wZGYtbm8tc3ByZWFkPlxuICAgICAgPHBkZi1vZGQtc3ByZWFkIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIiBbc2hvd109XCJzaG93U3ByZWFkQnV0dG9uXCI+PC9wZGYtb2RkLXNwcmVhZD5cbiAgICAgIDxwZGYtZXZlbi1zcHJlYWQgW3Njcm9sbE1vZGVdPVwic2Nyb2xsTW9kZVwiIFtzaG93XT1cInNob3dTcHJlYWRCdXR0b25cIj48L3BkZi1ldmVuLXNwcmVhZD5cbiAgICAgIDxwZGYtc2luZ2xlLXBhZ2UtbW9kZVxuICAgICAgICBbc2hvd109XCJzaG93U2luZ2xlUGFnZU1vZGVCdXR0b25cIlxuICAgICAgICBbcGFnZVZpZXdNb2RlXT1cInBhZ2VWaWV3TW9kZVwiXG4gICAgICAgIChwYWdlVmlld01vZGVDaGFuZ2UpPVwidXBkYXRlUGFnZVZpZXdNb2RlKCRldmVudClcIlxuICAgICAgICBbc2Nyb2xsTW9kZV09XCJzY3JvbGxNb2RlXCJcbiAgICAgID48L3BkZi1zaW5nbGUtcGFnZS1tb2RlPlxuICAgICAgPHBkZi12ZXJ0aWNhbC1zY3JvbGwtbW9kZVxuICAgICAgICBbc2hvd109XCJzaG93VmVydGljYWxTY3JvbGxCdXR0b25cIlxuICAgICAgICBbcGFnZVZpZXdNb2RlXT1cInBhZ2VWaWV3TW9kZVwiXG4gICAgICAgIChwYWdlVmlld01vZGVDaGFuZ2UpPVwidXBkYXRlUGFnZVZpZXdNb2RlKCRldmVudClcIlxuICAgICAgICBbc2Nyb2xsTW9kZV09XCJzY3JvbGxNb2RlXCJcbiAgICAgID48L3BkZi12ZXJ0aWNhbC1zY3JvbGwtbW9kZT5cbiAgICAgIDxwZGYtaG9yaXpvbnRhbC1zY3JvbGxcbiAgICAgICAgW3Nob3ddPVwic2hvd0hvcml6b250YWxTY3JvbGxCdXR0b25cIlxuICAgICAgICBbcGFnZVZpZXdNb2RlXT1cInBhZ2VWaWV3TW9kZVwiXG4gICAgICAgIChwYWdlVmlld01vZGVDaGFuZ2UpPVwidXBkYXRlUGFnZVZpZXdNb2RlKCRldmVudClcIlxuICAgICAgICBbc2Nyb2xsTW9kZV09XCJzY3JvbGxNb2RlXCJcbiAgICAgID48L3BkZi1ob3Jpem9udGFsLXNjcm9sbD5cbiAgICAgIDxwZGYtd3JhcHBlZC1zY3JvbGwtbW9kZVxuICAgICAgICBbc2hvd109XCJzaG93V3JhcHBlZFNjcm9sbEJ1dHRvblwiXG4gICAgICAgIFtwYWdlVmlld01vZGVdPVwicGFnZVZpZXdNb2RlXCJcbiAgICAgICAgKHBhZ2VWaWV3TW9kZUNoYW5nZSk9XCJ1cGRhdGVQYWdlVmlld01vZGUoJGV2ZW50KVwiXG4gICAgICAgIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIlxuICAgICAgPjwvcGRmLXdyYXBwZWQtc2Nyb2xsLW1vZGU+XG4gICAgICA8cGRmLWluZmluaXRlLXNjcm9sbFxuICAgICAgICBbc2hvd109XCJzaG93SW5maW5pdGVTY3JvbGxCdXR0b25cIlxuICAgICAgICBbcGFnZVZpZXdNb2RlXT1cInBhZ2VWaWV3TW9kZVwiXG4gICAgICAgIChwYWdlVmlld01vZGVDaGFuZ2UpPVwidXBkYXRlUGFnZVZpZXdNb2RlKCRldmVudClcIlxuICAgICAgICBbc2Nyb2xsTW9kZV09XCJzY3JvbGxNb2RlXCJcbiAgICAgID48L3BkZi1pbmZpbml0ZS1zY3JvbGw+XG4gICAgICA8cGRmLWJvb2stbW9kZVxuICAgICAgICBbc2hvd109XCJzaG93Qm9va01vZGVCdXR0b25cIlxuICAgICAgICBbcGFnZVZpZXdNb2RlXT1cInBhZ2VWaWV3TW9kZVwiXG4gICAgICAgIChwYWdlVmlld01vZGVDaGFuZ2UpPVwidXBkYXRlUGFnZVZpZXdNb2RlKCRldmVudClcIlxuICAgICAgICBbc2Nyb2xsTW9kZV09XCJzY3JvbGxNb2RlXCJcbiAgICAgID48L3BkZi1ib29rLW1vZGU+XG4gICAgICA8cGRmLWhhbmQtdG9vbCBbc2hvd0hhbmRUb29sQnV0dG9uXT1cInNob3dIYW5kVG9vbEJ1dHRvblwiPjwvcGRmLWhhbmQtdG9vbD5cbiAgICAgIDxwZGYtc2VsZWN0LXRvb2wgW3Nob3dTZWxlY3RUb29sQnV0dG9uXT1cInNob3dIYW5kVG9vbEJ1dHRvblwiPjwvcGRmLXNlbGVjdC10b29sPlxuICAgICAgPHBkZi1yb3RhdGUtcGFnZSBbc2hvd1JvdGF0ZUJ1dHRvbl09XCJzaG93Um90YXRlQnV0dG9uXCIgW2Nsb2Nrd2lzZV09XCJ0cnVlXCIgW2NvdW50ZXJDbG9ja3dpc2VdPVwiZmFsc2VcIj4gPC9wZGYtcm90YXRlLXBhZ2U+XG4gICAgICA8cGRmLXJvdGF0ZS1wYWdlIFtzaG93Um90YXRlQnV0dG9uXT1cInNob3dSb3RhdGVCdXR0b25cIiBbY2xvY2t3aXNlXT1cImZhbHNlXCIgW2NvdW50ZXJDbG9ja3dpc2VdPVwidHJ1ZVwiPiA8L3BkZi1yb3RhdGUtcGFnZT5cbiAgICAgIDxwZGYtcHJlc2VudGF0aW9uLW1vZGUgW3Nob3dQcmVzZW50YXRpb25Nb2RlQnV0dG9uXT1cInNob3dQcmVzZW50YXRpb25Nb2RlQnV0dG9uXCI+PC9wZGYtcHJlc2VudGF0aW9uLW1vZGU+XG4gICAgICA8cGRmLW9wZW4tZmlsZSBbc2hvd09wZW5GaWxlQnV0dG9uXT1cInNob3dPcGVuRmlsZUJ1dHRvblwiPjwvcGRmLW9wZW4tZmlsZT5cbiAgICAgIDxwZGYtcHJpbnQgW3Nob3dQcmludEJ1dHRvbl09XCJzaG93UHJpbnRCdXR0b25cIj48L3BkZi1wcmludD5cbiAgICAgIDxwZGYtZG93bmxvYWQgW3Nob3dEb3dubG9hZEJ1dHRvbl09XCJzaG93RG93bmxvYWRCdXR0b25cIj48L3BkZi1kb3dubG9hZD5cblxuICAgICAgPHBkZi1lZGl0b3IgW3Nob3dEcmF3RWRpdG9yXT1cInNob3dEcmF3RWRpdG9yXCIgW3Nob3dUZXh0RWRpdG9yXT1cInNob3dUZXh0RWRpdG9yXCIgW3Nob3dTdGFtcEVkaXRvcl09XCJzaG93U3RhbXBFZGl0b3JcIj48L3BkZi1lZGl0b3I+XG4gICAgICA8cGRmLXRvZ2dsZS1zZWNvbmRhcnktdG9vbGJhciBbc2hvd1NlY29uZGFyeVRvb2xiYXJCdXR0b25dPVwic2hvd1NlY29uZGFyeVRvb2xiYXJCdXR0b25cIj4gPC9wZGYtdG9nZ2xlLXNlY29uZGFyeS10b29sYmFyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=