UNPKG

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.

87 lines 25.5 kB
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-hand-tool/pdf-hand-tool.component"; import * as i6 from "../pdf-select-tool/pdf-select-tool.component"; import * as i7 from "../pdf-rotate-page/pdf-rotate-page.component"; import * as i8 from "../pdf-presentation-mode/pdf-presentation-mode.component"; import * as i9 from "../pdf-open-file/pdf-open-file.component"; import * as i10 from "../pdf-print/pdf-print.component"; import * as i11 from "../pdf-download/pdf-download.component"; import * as i12 from "../pdf-bookmark/pdf-bookmark.component"; import * as i13 from "../pdf-toggle-secondary-toolbar/pdf-toggle-secondary-toolbar.component"; import * as i14 from "@angular/common"; export class PdfToolbarComponent { constructor(elementRef) { this.mobileFriendlyZoomScale = 1; this.primaryMenuVisible = true; this.showBookmarkButton = true; this.showDownloadButton = true; 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.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.onToolbarLoaded = new EventEmitter(); this.onToolbarLoaded.emit(elementRef.nativeElement.getElementsByClassName('toolbar')[0]); } } PdfToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PdfToolbarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); PdfToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PdfToolbarComponent, selector: "pdf-toolbar", inputs: { customToolbar: "customToolbar", mobileFriendlyZoomScale: "mobileFriendlyZoomScale", primaryMenuVisible: "primaryMenuVisible", showBookmarkButton: "showBookmarkButton", showDownloadButton: "showDownloadButton", showFindButton: "showFindButton", showHandToolButton: "showHandToolButton", showOpenFileButton: "showOpenFileButton", showPrintButton: "showPrintButton", showPagingButtons: "showPagingButtons", showPresentationModeButton: "showPresentationModeButton", showRotateButton: "showRotateButton", showSecondaryToolbarButton: "showSecondaryToolbarButton", showSidebarButton: "showSidebarButton", showZoomButtons: "showZoomButtons", textLayer: "textLayer", toolbarMarginTop: "toolbarMarginTop", toolbarWidth: "toolbarWidth", zoomLevels: "zoomLevels" }, outputs: { onToolbarLoaded: "onToolbarLoaded" }, ngImport: i0, template: "<div class=\"toolbar\" [class.invisible]=\"!primaryMenuVisible\"\n [style.transform]=\"'scale(' + mobileFriendlyZoomScale + ')'\" [style.transformOrigin]=\"'left center'\"\n [style.width]=\"toolbarWidth\" [style.marginTop]=\"toolbarMarginTop\">\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 [showSidebarButton]=\"showSidebarButton\"></pdf-toggle-sidebar>\n <pdf-find-button [showFindButton]=\"showFindButton\" [textLayer]=\"textLayer\"></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 <div id=\"editorModeButtons\" class=\"splitToolbarButton hidden\" role=\"radiogroup\">\n <button id=\"editorNone\" class=\"toolbarButton\" title=\"Disable Annotation Editing\" role=\"radio\"\n aria-checked=\"false\" data-l10n-id=\"editor_none\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M12.07 5L9.24 7.83L19 17.59L17.58 19L7.82 9.25L5 12.07V5Z\" />\n </svg>\n <span data-l10n-id=\"editor_none_label\">Disable Editing</span>\n </button>\n <button id=\"editorFreeText\" class=\"toolbarButton\" title=\"Add FreeText Annotation\" role=\"radio\"\n aria-checked=\"false\" data-l10n-id=\"editor_free_text\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z\" />\n </svg>\n <span data-l10n-id=\"editor_free_text_label\">FreeText Annotation</span>\n </button>\n <button id=\"editorInk\" class=\"toolbarButton\" title=\"Add Ink Annotation\" role=\"radio\" aria-checked=\"false\"\n tabindex=\"33\" data-l10n-id=\"editor_ink\">\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\" enable-background=\"new 0 0 16 16\">\n <g>\n <g transform=\"scale(0.03125)\">\n <path\n d=\"m455.1,137.9l-32.4,32.4-81-81.1 32.4-32.4c6.6-6.6 18.1-6.6 24.7,0l56.3,56.4c6.8,6.8 6.8,17.9 0,24.7zm-270.7,271l-81-81.1 209.4-209.7 81,81.1-209.4,209.7zm-99.7-42l60.6,60.7-84.4,23.8 23.8-84.5zm399.3-282.6l-56.3-56.4c-11-11-50.7-31.8-82.4,0l-285.3,285.5c-2.5,2.5-4.3,5.5-5.2,8.9l-43,153.1c-2,7.1 0.1,14.7 5.2,20 5.2,5.3 15.6,6.2 20,5.2l153-43.1c3.4-0.9 6.4-2.7 8.9-5.2l285.1-285.5c22.7-22.7 22.7-59.7 0-82.5z\" />\n </g>\n </g>\n </svg>\n <span data-l10n-id=\"editor_ink_label\">Ink Annotation</span>\n </button>\n </div>\n\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\">\n </pdf-rotate-page>\n <pdf-rotate-page [showRotateButton]=\"showRotateButton\" [clockwise]=\"false\" [counterClockwise]=\"true\">\n </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 <pdf-bookmark [showBookmarkButton]=\"showBookmarkButton\"></pdf-bookmark>\n <pdf-toggle-secondary-toolbar [showSecondaryToolbarButton]=\"showSecondaryToolbarButton\">\n </pdf-toggle-secondary-toolbar>\n </div>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: i1.PdfToggleSidebarComponent, selector: "pdf-toggle-sidebar", inputs: ["showSidebarButton"] }, { type: i2.PdfFindButtonComponent, selector: "pdf-find-button", inputs: ["showFindButton", "textLayer"] }, { type: i3.PdfPagingAreaComponent, selector: "pdf-paging-area", inputs: ["showPagingButtons"] }, { type: i4.PdfZoomToolbarComponent, selector: "pdf-zoom-toolbar", inputs: ["showZoomButtons", "zoomLevels"] }, { type: i5.PdfHandToolComponent, selector: "pdf-hand-tool", inputs: ["showHandToolButton"] }, { type: i6.PdfSelectToolComponent, selector: "pdf-select-tool", inputs: ["showSelectToolButton"] }, { type: i7.PdfRotatePageComponent, selector: "pdf-rotate-page", inputs: ["showRotateButton", "clockwise", "counterClockwise"] }, { type: i8.PdfPresentationModeComponent, selector: "pdf-presentation-mode", inputs: ["showPresentationModeButton"] }, { type: i9.PdfOpenFileComponent, selector: "pdf-open-file", inputs: ["showOpenFileButton"] }, { type: i10.PdfPrintComponent, selector: "pdf-print", inputs: ["showPrintButton"] }, { type: i11.PdfDownloadComponent, selector: "pdf-download", inputs: ["showDownloadButton"] }, { type: i12.PdfBookmarkComponent, selector: "pdf-bookmark", inputs: ["showBookmarkButton"] }, { type: i13.PdfToggleSecondaryToolbarComponent, selector: "pdf-toggle-secondary-toolbar", inputs: ["showSecondaryToolbarButton"] }], directives: [{ type: i14.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PdfToolbarComponent, decorators: [{ type: Component, args: [{ selector: 'pdf-toolbar', template: "<div class=\"toolbar\" [class.invisible]=\"!primaryMenuVisible\"\n [style.transform]=\"'scale(' + mobileFriendlyZoomScale + ')'\" [style.transformOrigin]=\"'left center'\"\n [style.width]=\"toolbarWidth\" [style.marginTop]=\"toolbarMarginTop\">\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 [showSidebarButton]=\"showSidebarButton\"></pdf-toggle-sidebar>\n <pdf-find-button [showFindButton]=\"showFindButton\" [textLayer]=\"textLayer\"></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 <div id=\"editorModeButtons\" class=\"splitToolbarButton hidden\" role=\"radiogroup\">\n <button id=\"editorNone\" class=\"toolbarButton\" title=\"Disable Annotation Editing\" role=\"radio\"\n aria-checked=\"false\" data-l10n-id=\"editor_none\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M12.07 5L9.24 7.83L19 17.59L17.58 19L7.82 9.25L5 12.07V5Z\" />\n </svg>\n <span data-l10n-id=\"editor_none_label\">Disable Editing</span>\n </button>\n <button id=\"editorFreeText\" class=\"toolbarButton\" title=\"Add FreeText Annotation\" role=\"radio\"\n aria-checked=\"false\" data-l10n-id=\"editor_free_text\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z\" />\n </svg>\n <span data-l10n-id=\"editor_free_text_label\">FreeText Annotation</span>\n </button>\n <button id=\"editorInk\" class=\"toolbarButton\" title=\"Add Ink Annotation\" role=\"radio\" aria-checked=\"false\"\n tabindex=\"33\" data-l10n-id=\"editor_ink\">\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\" enable-background=\"new 0 0 16 16\">\n <g>\n <g transform=\"scale(0.03125)\">\n <path\n d=\"m455.1,137.9l-32.4,32.4-81-81.1 32.4-32.4c6.6-6.6 18.1-6.6 24.7,0l56.3,56.4c6.8,6.8 6.8,17.9 0,24.7zm-270.7,271l-81-81.1 209.4-209.7 81,81.1-209.4,209.7zm-99.7-42l60.6,60.7-84.4,23.8 23.8-84.5zm399.3-282.6l-56.3-56.4c-11-11-50.7-31.8-82.4,0l-285.3,285.5c-2.5,2.5-4.3,5.5-5.2,8.9l-43,153.1c-2,7.1 0.1,14.7 5.2,20 5.2,5.3 15.6,6.2 20,5.2l153-43.1c3.4-0.9 6.4-2.7 8.9-5.2l285.1-285.5c22.7-22.7 22.7-59.7 0-82.5z\" />\n </g>\n </g>\n </svg>\n <span data-l10n-id=\"editor_ink_label\">Ink Annotation</span>\n </button>\n </div>\n\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\">\n </pdf-rotate-page>\n <pdf-rotate-page [showRotateButton]=\"showRotateButton\" [clockwise]=\"false\" [counterClockwise]=\"true\">\n </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 <pdf-bookmark [showBookmarkButton]=\"showBookmarkButton\"></pdf-bookmark>\n <pdf-toggle-secondary-toolbar [showSecondaryToolbarButton]=\"showSecondaryToolbarButton\">\n </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 }], showBookmarkButton: [{ type: Input }], showDownloadButton: [{ 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 }], showZoomButtons: [{ type: Input }], textLayer: [{ type: Input }], toolbarMarginTop: [{ type: Input }], toolbarWidth: [{ type: Input }], zoomLevels: [{ type: Input }], onToolbarLoaded: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIvc3JjL2xpYi90b29sYmFyL3BkZi10b29sYmFyL3BkZi10b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdG9vbGJhci9wZGYtdG9vbGJhci9wZGYtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBT2hHLE1BQU0sT0FBTyxtQkFBbUI7SUE2RDlCLFlBQVksVUFBc0I7UUF4RDNCLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQUc1Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFHMUIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRzFCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUcxQixtQkFBYyxHQUF3QixTQUFTLENBQUM7UUFHaEQsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRzFCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUcxQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUd2QixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFHekIsK0JBQTBCLEdBQUcsS0FBSyxDQUFDO1FBR25DLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUd4QiwrQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFHbEMsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBR3pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBR3ZCLGNBQVMsR0FBd0IsU0FBUyxDQUFDO1FBRzNDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUd6QixpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQUd0QixlQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBR2pHLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUd2RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQyxDQUFDO0lBQzFHLENBQUM7O2lIQS9EVSxtQkFBbUI7cUdBQW5CLG1CQUFtQixnMkJDUGhDLHV1SUFxRUE7NEZEOURhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxhQUFhO2lHQU1oQixhQUFhO3NCQURuQixLQUFLO2dCQUlDLHVCQUF1QjtzQkFEN0IsS0FBSztnQkFJQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBSUMsZUFBZTtzQkFEckIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsMEJBQTBCO3NCQURoQyxLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFJQywwQkFBMEI7c0JBRGhDLEtBQUs7Z0JBSUMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsZUFBZTtzQkFEckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwZGYtdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGYtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BkZi10b29sYmFyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGRmVG9vbGJhckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21Ub29sYmFyOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtb2JpbGVGcmllbmRseVpvb21TY2FsZSA9IDE7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHByaW1hcnlNZW51VmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dCb29rbWFya0J1dHRvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dEb3dubG9hZEJ1dHRvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dGaW5kQnV0dG9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93SGFuZFRvb2xCdXR0b24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93T3BlbkZpbGVCdXR0b24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93UHJpbnRCdXR0b24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93UGFnaW5nQnV0dG9ucyA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dQcmVzZW50YXRpb25Nb2RlQnV0dG9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dSb3RhdGVCdXR0b24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93U2Vjb25kYXJ5VG9vbGJhckJ1dHRvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dTaWRlYmFyQnV0dG9uID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1pvb21CdXR0b25zID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGV4dExheWVyOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyTWFyZ2luVG9wID0gJzBweCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRvb2xiYXJXaWR0aCA9ICcxMDAlJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgem9vbUxldmVscyA9IFsnYXV0bycsICdwYWdlLWFjdHVhbCcsICdwYWdlLWZpdCcsICdwYWdlLXdpZHRoJywgMC41LCAwLjc1LCAxLCAxLjI1LCAxLjUsIDIsIDMsIDRdO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Ub29sYmFyTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudD4oKTtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5vblRvb2xiYXJMb2FkZWQuZW1pdChlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndG9vbGJhcicpWzBdIGFzIEhUTUxFbGVtZW50KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRvb2xiYXJcIiBbY2xhc3MuaW52aXNpYmxlXT1cIiFwcmltYXJ5TWVudVZpc2libGVcIlxuICBbc3R5bGUudHJhbnNmb3JtXT1cIidzY2FsZSgnICsgbW9iaWxlRnJpZW5kbHlab29tU2NhbGUgKyAnKSdcIiBbc3R5bGUudHJhbnNmb3JtT3JpZ2luXT1cIidsZWZ0IGNlbnRlcidcIlxuICBbc3R5bGUud2lkdGhdPVwidG9vbGJhcldpZHRoXCIgW3N0eWxlLm1hcmdpblRvcF09XCJ0b29sYmFyTWFyZ2luVG9wXCI+XG4gIDxkaXYgaWQ9XCJ0b29sYmFyQ29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Ub29sYmFyID8gY3VzdG9tVG9vbGJhciA6IGRlZmF1bHRUb29sYmFyXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgaWQ9XCJsb2FkaW5nQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdsaW1tZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUb29sYmFyPlxuICA8ZGl2IGlkPVwidG9vbGJhclZpZXdlclwiPlxuICAgIDxkaXYgaWQ9XCJ0b29sYmFyVmlld2VyTGVmdFwiPlxuICAgICAgPHBkZi10b2dnbGUtc2lkZWJhciBbc2hvd1NpZGViYXJCdXR0b25dPVwic2hvd1NpZGViYXJCdXR0b25cIj48L3BkZi10b2dnbGUtc2lkZWJhcj5cbiAgICAgIDxwZGYtZmluZC1idXR0b24gW3Nob3dGaW5kQnV0dG9uXT1cInNob3dGaW5kQnV0dG9uXCIgW3RleHRMYXllcl09XCJ0ZXh0TGF5ZXJcIj48L3BkZi1maW5kLWJ1dHRvbj5cbiAgICAgIDxwZGYtcGFnaW5nLWFyZWEgW3Nob3dQYWdpbmdCdXR0b25zXT1cInNob3dQYWdpbmdCdXR0b25zXCI+PC9wZGYtcGFnaW5nLWFyZWE+XG4gICAgPC9kaXY+XG4gICAgPHBkZi16b29tLXRvb2xiYXIgW3Nob3dab29tQnV0dG9uc109XCJzaG93Wm9vbUJ1dHRvbnNcIiBbem9vbUxldmVsc109XCJ6b29tTGV2ZWxzXCI+PC9wZGYtem9vbS10b29sYmFyPlxuICAgIDxkaXYgaWQ9XCJ0b29sYmFyVmlld2VyUmlnaHRcIj5cbiAgICAgIDxkaXYgaWQ9XCJlZGl0b3JNb2RlQnV0dG9uc1wiIGNsYXNzPVwic3BsaXRUb29sYmFyQnV0dG9uIGhpZGRlblwiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJlZGl0b3JOb25lXCIgY2xhc3M9XCJ0b29sYmFyQnV0dG9uXCIgdGl0bGU9XCJEaXNhYmxlIEFubm90YXRpb24gRWRpdGluZ1wiIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgICAgYXJpYS1jaGVja2VkPVwiZmFsc2VcIiBkYXRhLWwxMG4taWQ9XCJlZGl0b3Jfbm9uZVwiPlxuICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDoyNHB4O2hlaWdodDoyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTIuMDcgNUw5LjI0IDcuODNMMTkgMTcuNTlMMTcuNTggMTlMNy44MiA5LjI1TDUgMTIuMDdWNVpcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImVkaXRvcl9ub25lX2xhYmVsXCI+RGlzYWJsZSBFZGl0aW5nPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImVkaXRvckZyZWVUZXh0XCIgY2xhc3M9XCJ0b29sYmFyQnV0dG9uXCIgdGl0bGU9XCJBZGQgRnJlZVRleHQgQW5ub3RhdGlvblwiIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgICAgYXJpYS1jaGVja2VkPVwiZmFsc2VcIiBkYXRhLWwxMG4taWQ9XCJlZGl0b3JfZnJlZV90ZXh0XCI+XG4gICAgICAgICAgPHN2ZyBzdHlsZT1cIndpZHRoOjI0cHg7aGVpZ2h0OjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgZD1cIk0yMC43MSw3LjA0QzIxLjEsNi42NSAyMS4xLDYgMjAuNzEsNS42M0wxOC4zNywzLjI5QzE4LDIuOSAxNy4zNSwyLjkgMTYuOTYsMy4yOUwxNS4xMiw1LjEyTDE4Ljg3LDguODdNMywxNy4yNVYyMUg2Ljc1TDE3LjgxLDkuOTNMMTQuMDYsNi4xOEwzLDE3LjI1WlwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiZWRpdG9yX2ZyZWVfdGV4dF9sYWJlbFwiPkZyZWVUZXh0IEFubm90YXRpb248L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwiZWRpdG9ySW5rXCIgY2xhc3M9XCJ0b29sYmFyQnV0dG9uXCIgdGl0bGU9XCJBZGQgSW5rIEFubm90YXRpb25cIiByb2xlPVwicmFkaW9cIiBhcmlhLWNoZWNrZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgdGFiaW5kZXg9XCIzM1wiIGRhdGEtbDEwbi1pZD1cImVkaXRvcl9pbmtcIj5cbiAgICAgICAgICA8c3ZnIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiBlbmFibGUtYmFja2dyb3VuZD1cIm5ldyAwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJzY2FsZSgwLjAzMTI1KVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBkPVwibTQ1NS4xLDEzNy45bC0zMi40LDMyLjQtODEtODEuMSAzMi40LTMyLjRjNi42LTYuNiAxOC4xLTYuNiAyNC43LDBsNTYuMyw1Ni40YzYuOCw2LjggNi44LDE3LjkgMCwyNC43em0tMjcwLjcsMjcxbC04MS04MS4xIDIwOS40LTIwOS43IDgxLDgxLjEtMjA5LjQsMjA5Ljd6bS05OS43LTQybDYwLjYsNjAuNy04NC40LDIzLjggMjMuOC04NC41em0zOTkuMy0yODIuNmwtNTYuMy01Ni40Yy0xMS0xMS01MC43LTMxLjgtODIuNCwwbC0yODUuMywyODUuNWMtMi41LDIuNS00LjMsNS41LTUuMiw4LjlsLTQzLDE1My4xYy0yLDcuMSAwLjEsMTQuNyA1LjIsMjAgNS4yLDUuMyAxNS42LDYuMiAyMCw1LjJsMTUzLTQzLjFjMy40LTAuOSA2LjQtMi43IDguOS01LjJsMjg1LjEtMjg1LjVjMjIuNy0yMi43IDIyLjctNTkuNyAwLTgyLjV6XCIgLz5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImVkaXRvcl9pbmtfbGFiZWxcIj5JbmsgQW5ub3RhdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHBkZi1oYW5kLXRvb2wgW3Nob3dIYW5kVG9vbEJ1dHRvbl09XCJzaG93SGFuZFRvb2xCdXR0b25cIj48L3BkZi1oYW5kLXRvb2w+XG4gICAgICA8cGRmLXNlbGVjdC10b29sIFtzaG93U2VsZWN0VG9vbEJ1dHRvbl09XCJzaG93SGFuZFRvb2xCdXR0b25cIj48L3BkZi1zZWxlY3QtdG9vbD5cbiAgICAgIDxwZGYtcm90YXRlLXBhZ2UgW3Nob3dSb3RhdGVCdXR0b25dPVwic2hvd1JvdGF0ZUJ1dHRvblwiIFtjbG9ja3dpc2VdPVwidHJ1ZVwiIFtjb3VudGVyQ2xvY2t3aXNlXT1cImZhbHNlXCI+XG4gICAgICA8L3BkZi1yb3RhdGUtcGFnZT5cbiAgICAgIDxwZGYtcm90YXRlLXBhZ2UgW3Nob3dSb3RhdGVCdXR0b25dPVwic2hvd1JvdGF0ZUJ1dHRvblwiIFtjbG9ja3dpc2VdPVwiZmFsc2VcIiBbY291bnRlckNsb2Nrd2lzZV09XCJ0cnVlXCI+XG4gICAgICA8L3BkZi1yb3RhdGUtcGFnZT5cbiAgICAgIDxwZGYtcHJlc2VudGF0aW9uLW1vZGUgW3Nob3dQcmVzZW50YXRpb25Nb2RlQnV0dG9uXT1cInNob3dQcmVzZW50YXRpb25Nb2RlQnV0dG9uXCI+PC9wZGYtcHJlc2VudGF0aW9uLW1vZGU+XG4gICAgICA8cGRmLW9wZW4tZmlsZSBbc2hvd09wZW5GaWxlQnV0dG9uXT1cInNob3dPcGVuRmlsZUJ1dHRvblwiPjwvcGRmLW9wZW4tZmlsZT5cbiAgICAgIDxwZGYtcHJpbnQgW3Nob3dQcmludEJ1dHRvbl09XCJzaG93UHJpbnRCdXR0b25cIj48L3BkZi1wcmludD5cbiAgICAgIDxwZGYtZG93bmxvYWQgW3Nob3dEb3dubG9hZEJ1dHRvbl09XCJzaG93RG93bmxvYWRCdXR0b25cIj48L3BkZi1kb3dubG9hZD5cbiAgICAgIDxwZGYtYm9va21hcmsgW3Nob3dCb29rbWFya0J1dHRvbl09XCJzaG93Qm9va21hcmtCdXR0b25cIj48L3BkZi1ib29rbWFyaz5cbiAgICAgIDxwZGYtdG9nZ2xlLXNlY29uZGFyeS10b29sYmFyIFtzaG93U2Vjb25kYXJ5VG9vbGJhckJ1dHRvbl09XCJzaG93U2Vjb25kYXJ5VG9vbGJhckJ1dHRvblwiPlxuICAgICAgPC9wZGYtdG9nZ2xlLXNlY29uZGFyeS10b29sYmFyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=