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.

455 lines 57.9 kB
import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core'; import { pdfDefaultOptions } from './options/pdf-default-options'; import { PdfSidebarView } from './options/pdf-sidebar-views'; import { VerbosityLevel } from './options/verbosity-level'; import { PdfDummyComponentsComponent } from './pdf-dummy-components/pdf-dummy-components.component'; import * as i0 from "@angular/core"; import * as i1 from "./theme/pdf-dark-theme/pdf-dark-theme.component"; import * as i2 from "./theme/pdf-light-theme/pdf-light-theme.component"; import * as i3 from "./dynamic-css/dynamic-css.component"; import * as i4 from "./pdf-dummy-components/pdf-dummy-components.component"; import * as i5 from "@angular/common"; export class NgxExtendedPdfViewerServerComponent { constructor() { this.customFindbarButtons = undefined; this.showFreeFloatingBar = true; this.enableDragAndDrop = true; this.formData = {}; this.formDataChange = new EventEmitter(); this.pageViewMode = 'multiple'; this.progress = new EventEmitter(); this.srcChange = new EventEmitter(); this.scrollMode = undefined; this.scrollModeChange = new EventEmitter(); this.authorization = undefined; this.httpHeaders = undefined; this.contextMenuAllowed = true; this.afterPrint = new EventEmitter(); this.beforePrint = new EventEmitter(); this.currentZoomFactor = new EventEmitter(); this.enablePrint = true; /** * Number of milliseconds to wait between initializing the PDF viewer and loading the PDF file. * Most users can let this parameter safely at it's default value of zero. * Set this to 1000 or higher if you run into timing problems (typically caused by loading the locale files * after the PDF files, so they are not available when the PDF viewer is initialized). */ this.delayFirstView = 0; /** How many log messages should be printed? * Legal values: VerbosityLevel.INFOS (= 5), VerbosityLevel.WARNINGS (= 1), VerbosityLevel.ERRORS (= 0) */ this.logLevel = VerbosityLevel.WARNINGS; /** Use the minified (minifiedJSLibraries="true", which is the default) or the user-readable pdf.js library (minifiedJSLibraries="false") */ this.minifiedJSLibraries = true; this.primaryMenuVisible = true; /** option to increase (or reduce) print resolution. Default is 150 (dpi). Sensible values * are 300, 600, and 1200. Note the increase memory consumption, which may even result in a browser crash. */ this.printResolution = null; this.rotationChange = new EventEmitter(); this.annotationLayerRendered = new EventEmitter(); this.annotationEditorLayerRendered = new EventEmitter(); this.xfaLayerRendered = new EventEmitter(); this.outlineLoaded = new EventEmitter(); this.attachmentsloaded = new EventEmitter(); this.layersloaded = new EventEmitter(); this.minHeight = undefined; /** * If this flag is true, this components adds a link to the locale assets. The pdf viewer * sees this link and uses it to load the locale files automatically. * @param useBrowserLocale boolean */ this.useBrowserLocale = false; this.forceUsingLegacyES5 = false; this.backgroundColor = '#e8e8eb'; this.pdfBackground = '#ffffff'; this.pdfBackgroundColorToReplace = '#ffffff'; /** Allows the user to define the name of the file after clicking "download" */ this.filenameForDownload = 'document.pdf'; /** Allows the user to disable the keyboard bindings completely */ this.ignoreKeyboard = false; /** Allows the user to disable a list of key bindings. */ this.ignoreKeys = []; /** Allows the user to enable a list of key bindings explicitly. If this property is set, every other key binding is ignored. */ this.acceptKeys = []; /** Allows the user to put the viewer's svg images into an arbitrary folder */ this.imageResourcesPath = './' + pdfDefaultOptions.assetsFolder + '/images/'; /** Allows the user to put their locale folder into an arbitrary folder */ this.localeFolderPath = './' + pdfDefaultOptions.assetsFolder + '/locale'; /** Override the default locale. This must be the complete locale name, such as "es-ES". The string is allowed to be all lowercase. */ this.language = undefined; /** By default, listening to the URL is deactivated because often the anchor tag is used for the Angular router */ this.listenToURL = false; /** Navigate to a certain "named destination" */ this.nameddest = undefined; /** allows you to pass a password to read password-protected files */ this.password = undefined; /** pdf.js can show signatures, but fails to verify them. So they are switched off by default. * Set "[showUnverifiedSignatures]"="true" to display e-signatures nonetheless. */ this.showUnverifiedSignatures = false; this.sidebarVisible = undefined; this.sidebarVisibleChange = new EventEmitter(); this.activeSidebarView = PdfSidebarView.OUTLINE; this.activeSidebarViewChange = new EventEmitter(); this.showFindButton = undefined; this.showFindHighlightAll = true; this.showFindMatchCase = true; this.showFindCurrentPageOnly = true; this.showFindPageRange = true; this.showFindEntireWord = true; this.showFindEntirePhrase = true; this.showFindIgnoreAccents = true; this.showFindFuzzySearch = true; this.showFindResultsCount = true; this.showFindMessages = true; this.showPagingButtons = true; this.showZoomButtons = true; this.showPresentationModeButton = false; this.showOpenFileButton = true; this.showPrintButton = true; this.showDownloadButton = true; this.theme = 'light'; this.formTheme = 'light'; this.showToolbar = true; this.showSecondaryToolbarButton = true; /** Set by the event (secondaryMenuIsEmpty) */ this.hideKebabMenuForSecondaryToolbar = false; this.showRotateButton = true; this.handTool = true; this.handToolChange = new EventEmitter(); this.showHandToolButton = false; this.showScrollingButton = true; this.showSpreadButton = true; this.showPropertiesButton = true; this.showBorders = true; this.spreadChange = new EventEmitter(); this.thumbnailDrawn = new EventEmitter(); this._page = undefined; this.pageChange = new EventEmitter(); this.pageLabel = undefined; this.pageLabelChange = new EventEmitter(); this.pagesLoaded = new EventEmitter(); this.pageRender = new EventEmitter(); this.pageRendered = new EventEmitter(); this.pdfDownloaded = new EventEmitter(); this.pdfLoaded = new EventEmitter(); this.pdfLoadingStarts = new EventEmitter(); this.pdfLoadingFailed = new EventEmitter(); this.textLayer = undefined; this.textLayerRendered = new EventEmitter(); this.updateFindMatchesCount = new EventEmitter(); this.updateFindState = new EventEmitter(); /** Legal values: undefined, 'auto', 'page-actual', 'page-fit', 'page-width', or '50' (or any other percentage) */ this.zoom = undefined; this.zoomChange = new EventEmitter(); this.zoomLevels = ['auto', 'page-actual', 'page-fit', 'page-width', 0.5, 1, 1.25, 1.5, 2, 3, 4]; this.maxZoom = 10; this.minZoom = 0.1; /** This attributes allows you to increase the size of the UI elements so you can use them on small mobile devices. * This attribute is a string with a percent character at the end (e.g. "150%"). */ this._mobileFriendlyZoom = '100%'; this.mobileFriendlyZoomScale = 1; this.wheelAction = 'scroll'; this.toolbarMarginTop = '0px'; this.toolbarWidth = '100%'; this.toolbarWidthInPixels = 100; this.secondaryToolbarTop = undefined; // dirty IE11 hack - temporary solution this.findbarTop = undefined; // dirty IE11 hack - temporary solution this.findbarLeft = undefined; // Additional PDF Form Field Types #567: Used to store the exported values of radio and checkbox buttons this.buttonValues = {}; } set src(url) { } set base64Src(base64) { } set height(h) { } get showSidebarButton() { return true; } set showSidebarButton(show) { } get page() { return this._page; } set page(p) { } // NOSONAR get mobileFriendlyZoom() { return this._mobileFriendlyZoom; } /** * This attributes allows you to increase the size of the UI elements so you can use them on small mobile devices. * This attribute is a string with a percent character at the end (e.g. "150%"). */ set mobileFriendlyZoom(zoom) { } // NOSONAR get sidebarPositionTop() { return '32px'; } ngOnChanges(changes) { } ngOnInit() { } ngAfterViewInit() { } ngOnDestroy() { } onContextMenu() { return this.contextMenuAllowed; } } NgxExtendedPdfViewerServerComponent.ngxExtendedPdfViewerInitialized = false; NgxExtendedPdfViewerServerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NgxExtendedPdfViewerServerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); NgxExtendedPdfViewerServerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: NgxExtendedPdfViewerServerComponent, selector: "ngx-extended-pdf-viewer", inputs: { customFindbarInputArea: "customFindbarInputArea", customToolbar: "customToolbar", customFindbar: "customFindbar", customFindbarButtons: "customFindbarButtons", customPdfViewer: "customPdfViewer", customSecondaryToolbar: "customSecondaryToolbar", customSidebar: "customSidebar", customThumbnail: "customThumbnail", customFreeFloatingBar: "customFreeFloatingBar", showFreeFloatingBar: "showFreeFloatingBar", enableDragAndDrop: "enableDragAndDrop", formData: "formData", pageViewMode: "pageViewMode", scrollMode: "scrollMode", authorization: "authorization", httpHeaders: "httpHeaders", contextMenuAllowed: "contextMenuAllowed", enablePrint: "enablePrint", delayFirstView: "delayFirstView", showEditor: "showEditor", logLevel: "logLevel", minifiedJSLibraries: "minifiedJSLibraries", printResolution: "printResolution", rotation: "rotation", src: "src", base64Src: "base64Src", minHeight: "minHeight", height: "height", useBrowserLocale: "useBrowserLocale", forceUsingLegacyES5: "forceUsingLegacyES5", backgroundColor: "backgroundColor", pdfBackground: "pdfBackground", pdfBackgroundColorToReplace: "pdfBackgroundColorToReplace", filenameForDownload: "filenameForDownload", ignoreKeyboard: "ignoreKeyboard", ignoreKeys: "ignoreKeys", acceptKeys: "acceptKeys", imageResourcesPath: "imageResourcesPath", localeFolderPath: "localeFolderPath", language: "language", listenToURL: "listenToURL", nameddest: "nameddest", password: "password", replaceBrowserPrint: "replaceBrowserPrint", showUnverifiedSignatures: "showUnverifiedSignatures", startTabindex: "startTabindex", showSidebarButton: "showSidebarButton", sidebarVisible: "sidebarVisible", activeSidebarView: "activeSidebarView", showFindButton: "showFindButton", showFindHighlightAll: "showFindHighlightAll", showFindMatchCase: "showFindMatchCase", showFindCurrentPageOnly: "showFindCurrentPageOnly", showFindPageRange: "showFindPageRange", showFindEntireWord: "showFindEntireWord", showFindEntirePhrase: "showFindEntirePhrase", showFindIgnoreAccents: "showFindIgnoreAccents", showFindFuzzySearch: "showFindFuzzySearch", showFindResultsCount: "showFindResultsCount", showFindMessages: "showFindMessages", showPagingButtons: "showPagingButtons", showZoomButtons: "showZoomButtons", showPresentationModeButton: "showPresentationModeButton", showOpenFileButton: "showOpenFileButton", showPrintButton: "showPrintButton", showDownloadButton: "showDownloadButton", theme: "theme", formTheme: "formTheme", showToolbar: "showToolbar", showSecondaryToolbarButton: "showSecondaryToolbarButton", showRotateButton: "showRotateButton", handTool: "handTool", showHandToolButton: "showHandToolButton", showScrollingButton: "showScrollingButton", showSpreadButton: "showSpreadButton", showPropertiesButton: "showPropertiesButton", showBorders: "showBorders", spread: "spread", page: "page", pageLabel: "pageLabel", textLayer: "textLayer", zoom: "zoom", zoomLevels: "zoomLevels", maxZoom: "maxZoom", minZoom: "minZoom", wheelAction: "wheelAction", mobileFriendlyZoom: "mobileFriendlyZoom" }, outputs: { formDataChange: "formDataChange", progress: "progress", srcChange: "srcChange", scrollModeChange: "scrollModeChange", afterPrint: "afterPrint", beforePrint: "beforePrint", currentZoomFactor: "currentZoomFactor", rotationChange: "rotationChange", annotationLayerRendered: "annotationLayerRendered", annotationEditorLayerRendered: "annotationEditorLayerRendered", xfaLayerRendered: "xfaLayerRendered", outlineLoaded: "outlineLoaded", attachmentsloaded: "attachmentsloaded", layersloaded: "layersloaded", sidebarVisibleChange: "sidebarVisibleChange", activeSidebarViewChange: "activeSidebarViewChange", handToolChange: "handToolChange", spreadChange: "spreadChange", thumbnailDrawn: "thumbnailDrawn", pageChange: "pageChange", pageLabelChange: "pageLabelChange", pagesLoaded: "pagesLoaded", pageRender: "pageRender", pageRendered: "pageRendered", pdfDownloaded: "pdfDownloaded", pdfLoaded: "pdfLoaded", pdfLoadingStarts: "pdfLoadingStarts", pdfLoadingFailed: "pdfLoadingFailed", textLayerRendered: "textLayerRendered", updateFindMatchesCount: "updateFindMatchesCount", updateFindState: "updateFindState", zoomChange: "zoomChange" }, host: { listeners: { "contextmenu": "onContextMenu()" } }, viewQueries: [{ propertyName: "dummyComponents", first: true, predicate: PdfDummyComponentsComponent, descendants: true }, { propertyName: "root", first: true, predicate: ["root"], descendants: true }, { propertyName: "secondaryToolbarComponent", first: true, predicate: ["pdfSecondaryToolbarComponent"], descendants: true }, { propertyName: "sidebarComponent", first: true, predicate: ["pdfsidebar"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<link *ngIf=\"useBrowserLocale\" rel=\"resource\" type=\"application/l10n\" [attr.xhref]=\"localeFolderPath+'/locale.properties'\" origin=\"ngx-extended-pdf-viewer\" />\n<pdf-dark-theme *ngIf=\"theme==='dark'\"></pdf-dark-theme>\n<pdf-light-theme *ngIf=\"theme==='light'\"></pdf-light-theme>\n\n<pdf-dynamic-css [zoom]=\"mobileFriendlyZoomScale\" [width]=\"toolbarWidthInPixels\"></pdf-dynamic-css>\n<div class=\"zoom\" [style.height]=\"height\">\n <div class=\"html\">\n <div id=\"mainContainer\">\n <pdf-dummy-components></pdf-dummy-components>\n </div>\n </div>\n</div>\n\n<ng-template #defaultFreeFloatingBar>\n\n</ng-template>\n", components: [{ type: i1.PdfDarkThemeComponent, selector: "pdf-dark-theme" }, { type: i2.PdfLightThemeComponent, selector: "pdf-light-theme" }, { type: i3.DynamicCssComponent, selector: "pdf-dynamic-css", inputs: ["zoom", "width"] }, { type: i4.PdfDummyComponentsComponent, selector: "pdf-dummy-components" }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NgxExtendedPdfViewerServerComponent, decorators: [{ type: Component, args: [{ selector: 'ngx-extended-pdf-viewer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<link *ngIf=\"useBrowserLocale\" rel=\"resource\" type=\"application/l10n\" [attr.xhref]=\"localeFolderPath+'/locale.properties'\" origin=\"ngx-extended-pdf-viewer\" />\n<pdf-dark-theme *ngIf=\"theme==='dark'\"></pdf-dark-theme>\n<pdf-light-theme *ngIf=\"theme==='light'\"></pdf-light-theme>\n\n<pdf-dynamic-css [zoom]=\"mobileFriendlyZoomScale\" [width]=\"toolbarWidthInPixels\"></pdf-dynamic-css>\n<div class=\"zoom\" [style.height]=\"height\">\n <div class=\"html\">\n <div id=\"mainContainer\">\n <pdf-dummy-components></pdf-dummy-components>\n </div>\n </div>\n</div>\n\n<ng-template #defaultFreeFloatingBar>\n\n</ng-template>\n" }] }], propDecorators: { dummyComponents: [{ type: ViewChild, args: [PdfDummyComponentsComponent] }], root: [{ type: ViewChild, args: ['root'] }], customFindbarInputArea: [{ type: Input }], customToolbar: [{ type: Input }], customFindbar: [{ type: Input }], customFindbarButtons: [{ type: Input }], customPdfViewer: [{ type: Input }], customSecondaryToolbar: [{ type: Input }], customSidebar: [{ type: Input }], customThumbnail: [{ type: Input }], customFreeFloatingBar: [{ type: Input }], showFreeFloatingBar: [{ type: Input }], enableDragAndDrop: [{ type: Input }], formData: [{ type: Input }], formDataChange: [{ type: Output }], pageViewMode: [{ type: Input }], progress: [{ type: Output }], secondaryToolbarComponent: [{ type: ViewChild, args: ['pdfSecondaryToolbarComponent'] }], sidebarComponent: [{ type: ViewChild, args: ['pdfsidebar'] }], srcChange: [{ type: Output }], scrollMode: [{ type: Input }], scrollModeChange: [{ type: Output }], authorization: [{ type: Input }], httpHeaders: [{ type: Input }], contextMenuAllowed: [{ type: Input }], afterPrint: [{ type: Output }], beforePrint: [{ type: Output }], currentZoomFactor: [{ type: Output }], enablePrint: [{ type: Input }], delayFirstView: [{ type: Input }], showEditor: [{ type: Input }], logLevel: [{ type: Input }], minifiedJSLibraries: [{ type: Input }], printResolution: [{ type: Input }], rotation: [{ type: Input }], rotationChange: [{ type: Output }], annotationLayerRendered: [{ type: Output }], annotationEditorLayerRendered: [{ type: Output }], xfaLayerRendered: [{ type: Output }], outlineLoaded: [{ type: Output }], attachmentsloaded: [{ type: Output }], layersloaded: [{ type: Output }], src: [{ type: Input }], base64Src: [{ type: Input }], minHeight: [{ type: Input }], height: [{ type: Input }], useBrowserLocale: [{ type: Input }], forceUsingLegacyES5: [{ type: Input }], backgroundColor: [{ type: Input }], pdfBackground: [{ type: Input }], pdfBackgroundColorToReplace: [{ type: Input }], filenameForDownload: [{ type: Input }], ignoreKeyboard: [{ type: Input }], ignoreKeys: [{ type: Input }], acceptKeys: [{ type: Input }], imageResourcesPath: [{ type: Input }], localeFolderPath: [{ type: Input }], language: [{ type: Input }], listenToURL: [{ type: Input }], nameddest: [{ type: Input }], password: [{ type: Input }], replaceBrowserPrint: [{ type: Input }], showUnverifiedSignatures: [{ type: Input }], startTabindex: [{ type: Input }], showSidebarButton: [{ type: Input }], sidebarVisible: [{ type: Input }], sidebarVisibleChange: [{ type: Output }], activeSidebarView: [{ type: Input }], activeSidebarViewChange: [{ type: Output }], showFindButton: [{ type: Input }], showFindHighlightAll: [{ type: Input }], showFindMatchCase: [{ type: Input }], showFindCurrentPageOnly: [{ type: Input }], showFindPageRange: [{ type: Input }], showFindEntireWord: [{ type: Input }], showFindEntirePhrase: [{ type: Input }], showFindIgnoreAccents: [{ type: Input }], showFindFuzzySearch: [{ type: Input }], showFindResultsCount: [{ type: Input }], showFindMessages: [{ type: Input }], showPagingButtons: [{ type: Input }], showZoomButtons: [{ type: Input }], showPresentationModeButton: [{ type: Input }], showOpenFileButton: [{ type: Input }], showPrintButton: [{ type: Input }], showDownloadButton: [{ type: Input }], theme: [{ type: Input }], formTheme: [{ type: Input }], showToolbar: [{ type: Input }], showSecondaryToolbarButton: [{ type: Input }], showRotateButton: [{ type: Input }], handTool: [{ type: Input }], handToolChange: [{ type: Output }], showHandToolButton: [{ type: Input }], showScrollingButton: [{ type: Input }], showSpreadButton: [{ type: Input }], showPropertiesButton: [{ type: Input }], showBorders: [{ type: Input }], spread: [{ type: Input }], spreadChange: [{ type: Output }], thumbnailDrawn: [{ type: Output }], page: [{ type: Input }], pageChange: [{ type: Output }], pageLabel: [{ type: Input }], pageLabelChange: [{ type: Output }], pagesLoaded: [{ type: Output }], pageRender: [{ type: Output }], pageRendered: [{ type: Output }], pdfDownloaded: [{ type: Output }], pdfLoaded: [{ type: Output }], pdfLoadingStarts: [{ type: Output }], pdfLoadingFailed: [{ type: Output }], textLayer: [{ type: Input }], textLayerRendered: [{ type: Output }], updateFindMatchesCount: [{ type: Output }], updateFindState: [{ type: Output }], zoom: [{ type: Input }], zoomChange: [{ type: Output }], zoomLevels: [{ type: Input }], maxZoom: [{ type: Input }], minZoom: [{ type: Input }], wheelAction: [{ type: Input }], mobileFriendlyZoom: [{ type: Input }], onContextMenu: [{ type: HostListener, args: ['contextmenu'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWV4dGVuZGVkLXBkZi12aWV3ZXItc2VydmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXItc2VydmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXItc2VydmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFvQnZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7QUFVcEcsTUFBTSxPQUFPLG1DQUFtQztJQUxoRDtRQThCUyx5QkFBb0IsR0FBaUMsU0FBUyxDQUFDO1FBa0IvRCx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFHM0Isc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBR3pCLGFBQVEsR0FBaUIsRUFBRSxDQUFDO1FBRzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFHbEQsaUJBQVksR0FBdUQsVUFBVSxDQUFDO1FBRzlFLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQVNoRCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUd2QyxlQUFVLEdBQStC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QkFJQSxlQUFlO3NCQURyQixNQUFNO2dCQUtBLElBQUk7c0JBRFYsS0FBSztnQkFJQyxVQUFVO3NCQURoQixNQUFNO2dCQUlBLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFXQyxXQUFXO3NCQURqQixLQUFLO2dCQTRCSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBZ0JDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFubm90YXRpb25FZGl0b3JMYXllclJlbmRlcmVkRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9hbm5vdGF0aW9uLWVkaXRvci1sYXllci1yZW5kZXJlZC1ldmVudCc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uTGF5ZXJSZW5kZXJlZEV2ZW50IH0gZnJvbSAnLi9ldmVudHMvYW5ub3RhdGlvbi1sYXllci1yZW5kZXJlZC1ldmVudCc7XG5pbXBvcnQgeyBBdHRhY2htZW50TG9hZGVkRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9hdHRhY2htZW50LWxvYWRlZC1ldmVudCc7XG5cbmltcG9ydCB7IEZpbmRSZXN1bHRNYXRjaGVzQ291bnQsIEZpbmRTdGF0ZSB9IGZyb20gJy4vZXZlbnRzL2ZpbmQtcmVzdWx0JztcbmltcG9ydCB7IExheWVyc0xvYWRlZEV2ZW50IH0gZnJvbSAnLi9ldmVudHMvbGF5ZXJzLWxvYWRlZC1ldmVudCc7XG5pbXBvcnQgeyBPdXRsaW5lTG9hZGVkRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9vdXRsaW5lLWxvYWRlZC1ldmVudCc7XG5pbXBvcnQgeyBQYWdlUmVuZGVyRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9wYWdlLXJlbmRlci1ldmVudCc7XG5pbXBvcnQgeyBQYWdlUmVuZGVyZWRFdmVudCB9IGZyb20gJy4vZXZlbnRzL3BhZ2UtcmVuZGVyZWQtZXZlbnQnO1xuaW1wb3J0IHsgUGFnZXNMb2FkZWRFdmVudCB9IGZyb20gJy4vZXZlbnRzL3BhZ2VzLWxvYWRlZC1ldmVudCc7XG5pbXBvcnQgeyBQZGZEb3dubG9hZGVkRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9wZGYtZG93bmxvYWRlZC1ldmVudCc7XG5pbXBvcnQgeyBQZGZMb2FkZWRFdmVudCB9IGZyb20gJy4vZXZlbnRzL3BkZi1sb2FkZWQtZXZlbnQnO1xuaW1wb3J0IHsgUGRmTG9hZGluZ1N0YXJ0c0V2ZW50IH0gZnJvbSAnLi9ldmVudHMvcGRmLWxvYWRpbmctc3RhcnRzLWV2ZW50JztcbmltcG9ydCB7IFBkZlRodW1ibmFpbERyYXduRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9wZGYtdGh1bWJuYWlsLWRyYXduLWV2ZW50JztcbmltcG9ydCB7IFByb2dyZXNzQmFyRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9wcm9ncmVzcy1iYXItZXZlbnQnO1xuaW1wb3J0IHsgVGV4dExheWVyUmVuZGVyZWRFdmVudCB9IGZyb20gJy4vZXZlbnRzL3RleHRsYXllci1yZW5kZXJlZCc7XG5pbXBvcnQgeyBYZmFMYXllclJlbmRlcmVkRXZlbnQgfSBmcm9tICcuL2V2ZW50cy94ZmEtbGF5ZXItcmVuZGVyZWQtZXZlbnQnO1xuaW1wb3J0IHsgRm9ybURhdGFUeXBlIH0gZnJvbSAnLi9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGRmQmFja2dyb3VuZCB9IGZyb20gJy4vb3B0aW9ucy9wZGYtYmFja2dyb3VuZCc7XG5pbXBvcnQgeyBwZGZEZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucy9wZGYtZGVmYXVsdC1vcHRpb25zJztcbmltcG9ydCB7IFBkZlNpZGViYXJWaWV3IH0gZnJvbSAnLi9vcHRpb25zL3BkZi1zaWRlYmFyLXZpZXdzJztcbmltcG9ydCB7IFNjcm9sbE1vZGVUeXBlIH0gZnJvbSAnLi9vcHRpb25zL3BkZi12aWV3ZXInO1xuaW1wb3J0IHsgVmVyYm9zaXR5TGV2ZWwgfSBmcm9tICcuL29wdGlvbnMvdmVyYm9zaXR5LWxldmVsJztcbmltcG9ydCB7IFBkZkR1bW15Q29tcG9uZW50c0NvbXBvbmVudCB9IGZyb20gJy4vcGRmLWR1bW15LWNvbXBvbmVudHMvcGRmLWR1bW15LWNvbXBvbmVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IFJlc3BvbnNpdmVWaXNpYmlsaXR5IH0gZnJvbSAnLi9yZXNwb25zaXZlLXZpc2liaWxpdHknO1xuaW1wb3J0IHsgUGRmU2Vjb25kYXJ5VG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vc2Vjb25kYXJ5LXRvb2xiYXIvcGRmLXNlY29uZGFyeS10b29sYmFyL3BkZi1zZWNvbmRhcnktdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGRmU2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4vc2lkZWJhci9wZGYtc2lkZWJhci9wZGYtc2lkZWJhci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlci1zZXJ2ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd4RXh0ZW5kZWRQZGZWaWV3ZXJTZXJ2ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHVibGljIHN0YXRpYyBuZ3hFeHRlbmRlZFBkZlZpZXdlckluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBkdW1teSBjb21wb25lbnRzIGFyZSBpbnNlcnRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHVzZXIgY3VzdG9taXplcyB0aGUgdG9vbGJhclxuICAgKiB3aXRob3V0IGFkZGluZyBldmVyeSBvcmlnaW5hbCB0b29sYmFyIGl0ZW0uIFdpdGhvdXQgdGhlIGR1bW15IGNvbXBvbmVudHMsIHRoZVxuICAgKiBpbml0aWFsaXphdGlvbiBjb2RlIG9mIHBkZi5qcyBjcmFzaGVzIGJlY2F1c2UgaXQgYXNzdW1lIHRoYXQgZXZlcnkgc3RhbmRhcmQgd2lkZ2V0IGlzIHRoZXJlLlxuICAgKi9cbiAgQFZpZXdDaGlsZChQZGZEdW1teUNvbXBvbmVudHNDb21wb25lbnQpXG4gIHB1YmxpYyBkdW1teUNvbXBvbmVudHM6IFBkZkR1bW15Q29tcG9uZW50c0NvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdyb290JylcbiAgcHVibGljIHJvb3Q6IEVsZW1lbnRSZWY7XG5cbiAgLyogVUkgdGVtcGxhdGVzICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21GaW5kYmFySW5wdXRBcmVhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21Ub29sYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21GaW5kYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21GaW5kYmFyQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY3VzdG9tUGRmVmlld2VyOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21TZWNvbmRhcnlUb29sYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21TaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21UaHVtYm5haWw6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGN1c3RvbUZyZWVGbG9hdGluZ0JhcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0ZyZWVGbG9hdGluZ0JhciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZURyYWdBbmREcm9wID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9ybURhdGE6IEZvcm1EYXRhVHlwZSA9IHt9O1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZm9ybURhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1EYXRhVHlwZT4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcGFnZVZpZXdNb2RlOiAnc2luZ2xlJyB8ICdib29rJyB8ICdtdWx0aXBsZScgfCAnaW5maW5pdGUtc2Nyb2xsJyA9ICdtdWx0aXBsZSc7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBwcm9ncmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZ3Jlc3NCYXJFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdwZGZTZWNvbmRhcnlUb29sYmFyQ29tcG9uZW50JylcbiAgcHJpdmF0ZSBzZWNvbmRhcnlUb29sYmFyQ29tcG9uZW50OiBQZGZTZWNvbmRhcnlUb29sYmFyQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3BkZnNpZGViYXInKVxuICBwcml2YXRlIHNpZGViYXJDb21wb25lbnQ6IFBkZlNpZGViYXJDb21wb25lbnQ7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzcmNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2Nyb2xsTW9kZTogU2Nyb2xsTW9kZVR5cGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzY3JvbGxNb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTY3JvbGxNb2RlVHlwZT4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0aG9yaXphdGlvbjogT2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBodHRwSGVhZGVyczogT2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb250ZXh0TWVudUFsbG93ZWQgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgYWZ0ZXJQcmludCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGJlZm9yZVByaW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY3VycmVudFpvb21GYWN0b3IgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZW5hYmxlUHJpbnQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBpbml0aWFsaXppbmcgdGhlIFBERiB2aWV3ZXIgYW5kIGxvYWRpbmcgdGhlIFBERiBmaWxlLlxuICAgKiBNb3N0IHVzZXJzIGNhbiBsZXQgdGhpcyBwYXJhbWV0ZXIgc2FmZWx5IGF0IGl0J3MgZGVmYXVsdCB2YWx1ZSBvZiB6ZXJvLlxuICAgKiBTZXQgdGhpcyB0byAxMDAwIG9yIGhpZ2hlciBpZiB5b3UgcnVuIGludG8gdGltaW5nIHByb2JsZW1zICh0eXBpY2FsbHkgY2F1c2VkIGJ5IGxvYWRpbmcgdGhlIGxvY2FsZSBmaWxlc1xuICAgKiBhZnRlciB0aGUgUERGIGZpbGVzLCBzbyB0aGV5IGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdGhlIFBERiB2aWV3ZXIgaXMgaW5pdGlhbGl6ZWQpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRlbGF5Rmlyc3RWaWV3ID0gMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0VkaXRvcjogYm9vbGVhbjtcblxuICAvKiogc3RvcmUgdGhlIHRpbWVvdXQgaWQgc28gaXQgY2FuIGJlIGNhbmNlbGVkIGlmIHVzZXIgbGVhdmVzIHRoZSBwYWdlIGJlZm9yZSB0aGUgUERGIGlzIHNob3duICovXG4gIHByaXZhdGUgaW5pdFRpbWVvdXQ6IGFueTtcblxuICAvKiogSG93IG1hbnkgbG9nIG1lc3NhZ2VzIHNob3VsZCBiZSBwcmludGVkP1xuICAgKiBMZWdhbCB2YWx1ZXM6IFZlcmJvc2l0eUxldmVsLklORk9TICg9IDUpLCBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUyAoPSAxKSwgVmVyYm9zaXR5TGV2ZWwuRVJST1JTICg9IDApICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2dMZXZlbCA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG4gIC8qKiBVc2UgdGhlIG1pbmlmaWVkIChtaW5pZmllZEpTTGlicmFyaWVzPVwidHJ1ZVwiLCB3aGljaCBpcyB0aGUgZGVmYXVsdCkgb3IgdGhlIHVzZXItcmVhZGFibGUgcGRmLmpzIGxpYnJhcnkgKG1pbmlmaWVkSlNMaWJyYXJpZXM9XCJmYWxzZVwiKSAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluaWZpZWRKU0xpYnJhcmllcyA9IHRydWU7XG5cbiAgcHVibGljIHByaW1hcnlNZW51VmlzaWJsZSA9IHRydWU7XG5cbiAgLyoqIG9wdGlvbiB0byBpbmNyZWFzZSAob3IgcmVkdWNlKSBwcmludCByZXNvbHV0aW9uLiBEZWZhdWx0IGlzIDE1MCAoZHBpKS4gU2Vuc2libGUgdmFsdWVzXG4gICAqIGFyZSAzMDAsIDYwMCwgYW5kIDEyMDAuIE5vdGUgdGhlIGluY3JlYXNlIG1lbW9yeSBjb25zdW1wdGlvbiwgd2hpY2ggbWF5IGV2ZW4gcmVzdWx0IGluIGEgYnJvd3NlciBjcmFzaC4gKi9cbiAgQElucHV0KClcbiAgcHVibGljIHByaW50UmVzb2x1dGlvbiA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHJvdGF0aW9uOiAwIHwgOTAgfCAxODAgfCAyNzA7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3RhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8MCB8IDkwIHwgMTgwIHwgMjcwPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgYW5ub3RhdGlvbkxheWVyUmVuZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFubm90YXRpb25MYXllclJlbmRlcmVkRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhbm5vdGF0aW9uRWRpdG9yTGF5ZXJSZW5kZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QW5ub3RhdGlvbkVkaXRvckxheWVyUmVuZGVyZWRFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHhmYUxheWVyUmVuZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFhmYUxheWVyUmVuZGVyZWRFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG91dGxpbmVMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE91dGxpbmVMb2FkZWRFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGF0dGFjaG1lbnRzbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBdHRhY2htZW50TG9hZGVkRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBsYXllcnNsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPExheWVyc0xvYWRlZEV2ZW50PigpO1xuXG4gIHB1YmxpYyBoYXNTaWduYXR1cmU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzcmModXJsOiBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IEJsb2IgfCBVaW50OEFycmF5IHwgVVJMIHwgeyByYW5nZTogYW55IH0pIHt9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBiYXNlNjRTcmMoYmFzZTY0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7fVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5IZWlnaHQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhlaWdodChoOiBzdHJpbmcpIHt9XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgZmxhZyBpcyB0cnVlLCB0aGlzIGNvbXBvbmVudHMgYWRkcyBhIGxpbmsgdG8gdGhlIGxvY2FsZSBhc3NldHMuIFRoZSBwZGYgdmlld2VyXG4gICAqIHNlZXMgdGhpcyBsaW5rIGFuZCB1c2VzIGl0IHRvIGxvYWQgdGhlIGxvY2FsZSBmaWxlcyBhdXRvbWF0aWNhbGx5LlxuICAgKiBAcGFyYW0gdXNlQnJvd3NlckxvY2FsZSBib29sZWFuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdXNlQnJvd3NlckxvY2FsZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmb3JjZVVzaW5nTGVnYWN5RVM1ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmRDb2xvciA9ICcjZThlOGViJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcGRmQmFja2dyb3VuZDogUGRmQmFja2dyb3VuZCA9ICcjZmZmZmZmJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcGRmQmFja2dyb3VuZENvbG9yVG9SZXBsYWNlOiBzdHJpbmcgfCAoKHBhZ2U6IG51bWJlciwgcGFnZUxhYmVsOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZCkgfCB1bmRlZmluZWQgPSAnI2ZmZmZmZic7XG5cbiAgLyoqIEFsbG93cyB0aGUgdXNlciB0byBkZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYWZ0ZXIgY2xpY2tpbmcgXCJkb3dubG9hZFwiICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWxlbmFtZUZvckRvd25sb2FkID0gJ2RvY3VtZW50LnBkZic7XG5cbiAgLyoqIEFsbG93cyB0aGUgdXNlciB0byBkaXNhYmxlIHRoZSBrZXlib2FyZCBiaW5kaW5ncyBjb21wbGV0ZWx5ICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpZ25vcmVLZXlib2FyZCA9IGZhbHNlO1xuXG4gIC8qKiBBbGxvd3MgdGhlIHVzZXIgdG8gZGlzYWJsZSBhIGxpc3Qgb2Yga2V5IGJpbmRpbmdzLiAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaWdub3JlS2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIC8qKiBBbGxvd3MgdGhlIHVzZXIgdG8gZW5hYmxlIGEgbGlzdCBvZiBrZXkgYmluZGluZ3MgZXhwbGljaXRseS4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBzZXQsIGV2ZXJ5IG90aGVyIGtleSBiaW5kaW5nIGlzIGlnbm9yZWQuICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhY2NlcHRLZXlzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgLyoqIEFsbG93cyB0aGUgdXNlciB0byBwdXQgdGhlIHZpZXdlcidzIHN2ZyBpbWFnZXMgaW50byBhbiBhcmJpdHJhcnkgZm9sZGVyICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbWFnZVJlc291cmNlc1BhdGggPSAnLi8nICsgcGRmRGVmYXVsdE9wdGlvbnMuYXNzZXRzRm9sZGVyICsgJy9pbWFnZXMvJztcblxuICAvKiogQWxsb3dzIHRoZSB1c2VyIHRvIHB1dCB0aGVpciBsb2NhbGUgZm9sZGVyIGludG8gYW4gYXJiaXRyYXJ5IGZvbGRlciAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbG9jYWxlRm9sZGVyUGF0aCA9ICcuLycgKyBwZGZEZWZhdWx0T3B0aW9ucy5hc3NldHNGb2xkZXIgKyAnL2xvY2FsZSc7XG5cbiAgLyoqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGxvY2FsZS4gVGhpcyBtdXN0IGJlIHRoZSBjb21wbGV0ZSBsb2NhbGUgbmFtZSwgc3VjaCBhcyBcImVzLUVTXCIuIFRoZSBzdHJpbmcgaXMgYWxsb3dlZCB0byBiZSBhbGwgbG93ZXJjYXNlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqIEJ5IGRlZmF1bHQsIGxpc3RlbmluZyB0byB0aGUgVVJMIGlzIGRlYWN0aXZhdGVkIGJlY2F1c2Ugb2Z0ZW4gdGhlIGFuY2hvciB0YWcgaXMgdXNlZCBmb3IgdGhlIEFuZ3VsYXIgcm91dGVyICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsaXN0ZW5Ub1VSTCA9IGZhbHNlO1xuXG4gIC8qKiBOYXZpZ2F0ZSB0byBhIGNlcnRhaW4gXCJuYW1lZCBkZXN0aW5hdGlvblwiICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBuYW1lZGRlc3Q6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKiogYWxsb3dzIHlvdSB0byBwYXNzIGEgcGFzc3dvcmQgdG8gcmVhZCBwYXNzd29yZC1wcm90ZWN0ZWQgZmlsZXMgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHJlcGxhY2VCcm93c2VyUHJpbnQ6IGJvb2xlYW47XG5cbiAgLyoqIHBkZi5qcyBjYW4gc2hvdyBzaWduYXR1cmVzLCBidXQgZmFpbHMgdG8gdmVyaWZ5IHRoZW0uIFNvIHRoZXkgYXJlIHN3aXRjaGVkIG9mZiBieSBkZWZhdWx0LlxuICAgKiBTZXQgXCJbc2hvd1VudmVyaWZpZWRTaWduYXR1cmVzXVwiPVwidHJ1ZVwiIHRvIGRpc3BsYXkgZS1zaWduYXR1cmVzIG5vbmV0aGVsZXNzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dVbnZlcmlmaWVkU2lnbmF0dXJlcyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGFydFRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGdldCBzaG93U2lkZWJhckJ1dHRvbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNob3dTaWRlYmFyQnV0dG9uKHNob3c6IFJlc3BvbnNpdmVWaXNpYmlsaXR5KSB7fVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaWRlYmFyVmlzaWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHNpZGViYXJWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhY3RpdmVTaWRlYmFyVmlldzogUGRmU2lkZWJhclZpZXcgPSBQZGZTaWRlYmFyVmlldy5PVVRMSU5FO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgYWN0aXZlU2lkZWJhclZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBkZlNpZGViYXJWaWV3PigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RmluZEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dGaW5kSGlnaGxpZ2h0QWxsID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0ZpbmRNYXRjaENhc2UgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RmluZEN1cnJlbnRQYWdlT25seSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dGaW5kUGFnZVJhbmdlID0gdHJ1