mmhglobal-dynamicform 1.5.0 → 1.6.0

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/README.md CHANGED
@@ -3,6 +3,9 @@
3
3
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
4
4
 
5
5
  ## Changelog
6
+ `1.6.0`<br/>
7
+ [zReport] - improved zReport to in sync with V2 zReport fixes and enhancement.
8
+
6
9
  `1.5.0`<br/>
7
10
  [mainservice] - WI#3205 enhanced to default show alert if no changes made to the form when update.
8
11
 
@@ -6,122 +6,176 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "mmhglobal-zcore";
7
7
  import * as i2 from "@progress/telerik-angular-report-viewer";
8
8
  export class ZreportComponent {
9
- constructor(resourceApiService) {
9
+ constructor(resourceApiService, authService, alertService) {
10
10
  this.resourceApiService = resourceApiService;
11
+ this.authService = authService;
12
+ this.alertService = alertService;
11
13
  this.componentProperties = new ZComponentProperties();
12
- this.title = "Report Viewer";
14
+ this.allowPrintPDF = true;
15
+ this.isVisible = true;
16
+ this.serviceUrl = null;
17
+ this.reportSource = null;
13
18
  this.viewerContainerStyle = {
14
19
  position: "relative",
15
20
  width: "100%",
16
21
  height: "800px",
17
- ['font-family']: 'ms sans serif'
22
+ fontFamily: 'Arial, sans-serif',
23
+ backgroundColor: '#f9f9f9',
24
+ boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',
25
+ fontSize: '16px',
26
+ lineHeight: '1.5',
27
+ color: '#333',
18
28
  };
19
- this.resourceURL = null;
20
- this.ReportSource = null;
21
- this.isVisible = true;
22
- this.paramToResizeReportViewer = false;
23
29
  }
24
30
  ngOnInit() {
25
31
  ZComponentHelper.setComponentProperties(this);
26
32
  ZComponentHelper.registerComponent(this);
27
- this.resourceURL = this.resourceApiService.getURL(this.data.ResourceURL);
28
- if (!this.resourceURL) {
33
+ this.onExportBegin = this.exportBegin.bind(this);
34
+ this.onExportEnd = this.exportEnd.bind(this);
35
+ this.onRenderingBegin = this.renderingBegin.bind(this);
36
+ this.onRenderingEnd = this.renderingEnd.bind(this);
37
+ this.onPrintBegin = this.printBegin.bind(this);
38
+ this.onPrintEnd = this.printEnd.bind(this);
39
+ this.serviceUrl = this.resourceApiService.getURL(this.data.ResourceURL);
40
+ if (!this.serviceUrl) {
29
41
  console.log("resourceURL is empty.");
30
42
  }
31
43
  if (!!this.data.IsAutoGenerateReport) {
32
- this.ReportSource = ZComponentHelper.getGroupEvalValue.call(this, this.data.ReportSource);
44
+ this.reportSource = ZComponentHelper.getGroupEvalValue.call(this, this.data.ReportSource);
33
45
  }
34
46
  }
35
47
  ngAfterViewInit() {
36
- // Localization.
37
- const language = navigator.language;
38
48
  let resources = 'Loading...'; // Default.
39
49
  this.viewer.viewerObject.stringResources = Object.assign(this.viewer.viewerObject.stringResources, resources);
40
50
  }
41
- ready() {
51
+ onResize() {
52
+ console.log("Report resized.");
53
+ }
54
+ onReady() {
42
55
  console.log("Report ready.");
43
- //if (this.data['hideHistoryBack']) { $("[data-command*='telerik_ReportViewer_historyBack']").parent().hide(); }
44
- //if (this.data['hideHistoryForward']) { $("[data-command*='telerik_ReportViewer_historyForward']").parent().hide(); }
45
- //if (this.data['hideRefresh']) { $("[data-command*='telerik_ReportViewer_refresh']").parent().hide(); }
46
- //if (this.data['hideStopRendering']) { $("[data-command*='telerik_ReportViewer_stopRendering']").parent().hide(); }
47
- //if (this.data['hideGoToFirstPage']) { $("[data-command*='telerik_ReportViewer_goToFirstPage']").parent().hide(); }
48
- //if (this.data['hideGoToPrevPage']) { $("[data-command*='telerik_ReportViewer_goToPrevPage']").parent().hide(); }
49
- //if (this.data['hideGoToNextPage']) { $("[data-command*='telerik_ReportViewer_goToNextPage']").parent().hide(); }
50
- //if (this.data['hideGoToLastPage']) { $("[data-command*='telerik_ReportViewer_goToLastPage']").parent().hide(); }
51
- //if (this.data['hideTogglePrintPreview']) { $("[data-command*='telerik_ReportViewer_togglePrintPreview']").parent().hide(); }
52
- //if (this.data['hideExport']) { $("[data-command*='telerik_ReportViewer_export']").parent().hide(); }
53
- //if (this.data['hidePrint']) { $("[data-command*='telerik_ReportViewer_print']").parent().hide(); }
56
+ $("[data-command*='telerik_ReportViewer_historyBack']").parent().hide();
57
+ $("[data-command*='telerik_ReportViewer_historyForward']").parent().hide();
58
+ $("[data-command*='telerik_ReportViewer_stopRendering']").parent().hide();
59
+ //$("[data-command*='telerik_ReportViewer_refresh']").parent().hide();
60
+ //$("[data-command*='telerik_ReportViewer_goToFirstPage']").parent().hide();
61
+ //$("[data-command*='telerik_ReportViewer_goToPrevPage']").parent().hide();
62
+ //$("[data-command*='telerik_ReportViewer_goToNextPage']").parent().hide();
63
+ //$("[data-command*='telerik_ReportViewer_goToLastPage']").parent().hide();
64
+ //$("[data-command*='telerik_ReportViewer_togglePrintPreview']").parent().hide();
65
+ //$("[data-command*='telerik_ReportViewer_export']").parent().hide();
66
+ //$("[data-command*='telerik_ReportViewer_print']").parent().hide();
54
67
  $("[data-command*='telerik_ReportViewer_toggleDocumentMap']").parent().hide();
55
68
  $("[data-command*='telerik_ReportViewer_toggleParametersArea']").parent().hide();
56
- //if (this.data['hideZoomIn']) { $("[data-command*='telerik_ReportViewer_zoomIn']").parent().hide(); }
57
- //if (this.data['hideZoomOut']) { $("[data-command*='telerik_ReportViewer_zoomOut']").parent().hide(); }
58
- //if (this.data['hideToggleZoomMode']) { $("[data-command*='telerik_ReportViewer_toggleZoomMode']").parent().hide(); }
69
+ //$("[data-command*='telerik_ReportViewer_zoomIn']").parent().hide();
70
+ //$("[data-command*='telerik_ReportViewer_zoomOut']").parent().hide();
71
+ //$("[data-command*='telerik_ReportViewer_toggleZoomMode']").parent().hide();
59
72
  $("[data-command*='telerik_ReportViewer_toggleSearchDialog']").parent().hide();
60
73
  }
61
- onPageReady(e, args) {
62
- // doesnt seem to work in angular 13
63
- //this.resizeViewer(e, args);
64
- }
65
- onResize() {
66
- console.log("Report resized.");
67
- }
68
- viewerToolTipOpening(e, args) {
69
- console.log('viewerToolTipOpening ' + args.toolTip.text);
70
- }
71
- exportBeginHandler(e, args) {
74
+ exportBegin(e, args) {
72
75
  console.log("Export begin.");
73
76
  }
74
- exportEndHandler(e, args) {
77
+ exportEnd(e, args) {
75
78
  console.log("Export end.");
76
79
  }
77
- onRenderingEnd(e, args) {
78
- // Occurs after rendering the report.
80
+ renderingBegin(e, args) {
81
+ console.log("Rendering started.");
82
+ if (this.reportSource.parameters && this.reportSource.parameters.Authorization !== this.authService.authorizationBearer.Authorization) {
83
+ console.warn("Updated invalid authorization token.");
84
+ this.reportSource.parameters.Authorization = this.authService.authorizationBearer.Authorization;
85
+ this.viewer.setReportSource(this.reportSource);
86
+ }
87
+ }
88
+ renderingEnd(e, args) {
79
89
  console.log("Rendering ended.");
80
90
  }
91
+ generateEmptyPdf() {
92
+ // Create an empty PDF file with just a header
93
+ const pdfContent = '%PDF-1.3\n1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n2 0 obj\n<< /Type /Pages /Kids [] /Count 0 >>\nendobj\nxref\n0 3\n0000000000 65535 f \n0000000010 00000 n \ntrailer\n<< /Root 1 0 R /Size 3 >>\nstartxref\n205\n%%EOF';
94
+ return new Blob([pdfContent], { type: 'application/pdf' });
95
+ }
96
+ printBegin(e, args) {
97
+ console.log("Print begin.");
98
+ const alertTitle = 'Print PDF Error';
99
+ const pdfBlob = this.generateEmptyPdf();
100
+ const pdfUrl = URL.createObjectURL(pdfBlob);
101
+ const userAgent = navigator.userAgent;
102
+ const iframe = document.createElement('iframe');
103
+ let isChrome = false;
104
+ let isEdge = false;
105
+ if (/Edg/.test(userAgent)) {
106
+ isEdge = true;
107
+ }
108
+ else if (/Chrome/.test(userAgent)) {
109
+ isChrome = true;
110
+ }
111
+ iframe.src = pdfUrl;
112
+ iframe.onload = () => {
113
+ console.log('Checking browser is report able to print.', iframe.contentDocument);
114
+ try {
115
+ const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
116
+ const pdfElement = iframeDocument.querySelector('embed[type="application/pdf"], object[type="application/pdf"], iframe');
117
+ // If no PDF element found, alert user about potential issue
118
+ if (!pdfElement) {
119
+ this.allowPrintPDF = false;
120
+ if (isChrome) {
121
+ this.alertService.showOkay(alertTitle, "Step 1: Please navigate to 'chrome://settings/content/pdfDocuments' in the brower.<br/>Step 2: Select 'Open PDFs in Chrome' in the setting before printing the report.", ["col-6"]);
122
+ }
123
+ else if (isEdge) {
124
+ this.alertService.showOkay(alertTitle, "Step 1: Please navigate to 'edge://settings/content/pdfDocuments' in the brower.<br/>Step 2: Enable 'PDF view settings' and Disable 'Always Download PDF files' in the setting before printing the report.", ["col-6"]);
125
+ }
126
+ else {
127
+ this.alertService.showOkay(alertTitle, "The browser settings cannot be detected, please reach out to support for assistance.", ["col-4"]);
128
+ }
129
+ }
130
+ else {
131
+ this.allowPrintPDF = true;
132
+ }
133
+ }
134
+ catch (error) {
135
+ // If accessing iframe content throws an error, alert user about potential issue
136
+ this.allowPrintPDF = false;
137
+ // PDF failed to load or display properly
138
+ console.log('PDF failed to load or display properly in the iframe.');
139
+ this.alertService.showOkay(alertTitle, "The browser settings cannot be detected, please reach out to support for assistance.", ["col-4"]);
140
+ }
141
+ };
142
+ iframe.onerror = () => {
143
+ this.allowPrintPDF = false;
144
+ // PDF failed to load or display properly
145
+ console.log('PDF failed to load or display properly in the iframe.');
146
+ this.alertService.showOkay(alertTitle, "The browser settings cannot be detected, please reach out to support for assistance.", ["col-4"]);
147
+ };
148
+ iframe.style.display = 'none';
149
+ document.body.appendChild(iframe);
150
+ }
151
+ printEnd(e, args) {
152
+ console.log("Print end.");
153
+ if (!this.allowPrintPDF) {
154
+ console.warn('Browser incorrect configuration, unable to print the PDF.');
155
+ args.handled = true;
156
+ }
157
+ }
81
158
  generateReport() {
82
- const rs = this.group["ReportSource"];
83
- this.resourceURL = rs['url'];
84
- this.viewer.setReportSource(rs);
85
- this.viewer.refreshReport();
86
- //if (this.viewer['height']) {
87
- // this.viewer['height'](10);
88
- //}
89
- //var documentMapSplitter = $(".trv-document-map-splitter").data("kendoSplitter");
90
- //documentMapSplitter.resize(true);
91
- //var parameterSplitter = $(".trv-parameters-splitter").data("kendoSplitter");
92
- //parameterSplitter.resize(true);
93
- //if (this.data['AutoResize']) {
94
- // this.paramToResizeReportViewer = true;
95
- //} else {
96
- // this.paramToResizeReportViewer = false;
97
- //}
159
+ this.reportSource = this.group["ReportSource"];
160
+ if (this.reportSource.parameters && !this.reportSource.parameters.Authorization) {
161
+ this.reportSource.parameters.Authorization = this.authService.authorizationBearer.Authorization;
162
+ }
163
+ if (this.reportSource['url']) {
164
+ this.serviceUrl = this.reportSource['url'];
165
+ }
166
+ this.viewer.setReportSource(this.reportSource);
167
+ //this.viewer.refreshReport();
98
168
  }
99
169
  getFontAwesome(iconName) {
100
170
  return ZComponentHelper.getFontAwesome(iconName);
101
171
  }
102
- resizeViewer(e, args) {
103
- //console.log("Page ready.");
104
- if (this.paramToResizeReportViewer) {
105
- //currently doesn't seem to work.
106
- const pageHeight = $(".trv-pages-area .trv-page-wrapper").height() + $(".trv-nav").outerHeight() + 2; // Calculate the report page height
107
- const viewer = $("#reportViewer1");
108
- const viewerHeight = viewer.height();
109
- if (viewerHeight !== pageHeight) {
110
- viewer.height(pageHeight);
111
- const documentMapSplitter = $(".trv-document-map-splitter").data("kendoSplitter");
112
- documentMapSplitter.resize(true);
113
- const parameterSplitter = $(".trv-parameters-splitter").data("kendoSplitter");
114
- parameterSplitter.resize(true);
115
- }
116
- }
117
- }
118
172
  }
119
- ZreportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZreportComponent, deps: [{ token: i1.ResourceApiService }], target: i0.ɵɵFactoryTarget.Component });
120
- ZreportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZreportComponent, selector: "app-zreport", inputs: { data: "data", group: "group" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "viewer", first: true, predicate: ["reportViewer1"], descendants: true }], ngImport: i0, template: "<div width=\"100%\" height=\"800px\">\r\n <!--<ion-button class=\"button-container\"\r\n fill=\"outline\"\r\n color=\"dark\"\r\n size=\"small\"\r\n strong=\"false\"\r\n [hidden]=\"false\"\r\n [disabled]=\"false\"\r\n (click)=\"ReportViewer.refreshReport()\">\r\n <div style=\"padding-right: 5px;\"></div>\r\n <span class=\"ion-text-capitalize\">Refresh</span>\r\n </ion-button>\r\n\r\n <ion-button class=\"button-container\"\r\n fill=\"outline\"\r\n color=\"dark\"\r\n size=\"small\"\r\n strong=\"false\"\r\n [hidden]=\"false\"\r\n [disabled]=\"false\"\r\n (click)=\"ReportViewer.commands.print.exec()\">\r\n <fa-icon [icon]=\"getFontAwesome('print')\"></fa-icon>\r\n <div style=\"padding-right: 5px;\"></div>\r\n <span class=\"ion-text-capitalize\">Print</span>\r\n </ion-button>-->\r\n \r\n <tr-viewer #reportViewer1\r\n [containerStyle]=\"viewerContainerStyle\"\r\n [serviceUrl]=\"resourceURL\"\r\n [reportSource]=\"ReportSource\"\r\n [viewMode]=\"'INTERACTIVE'\"\r\n [scaleMode]=\"'SPECIFIC'\"\r\n [scale]=\"1.0\"\r\n [enableAccessibility]=\"false\"\r\n [ready]=\"ready\"\r\n [viewerToolTipOpening]=\"viewerToolTipOpening\"\r\n [exportBegin]=\"exportBeginHandler\"\r\n [exportEnd]=\"exportEndHandler\"\r\n [pageReady]=\"onPageReady\"\r\n [renderingEnd]=\"onRenderingEnd\">\r\n </tr-viewer>\r\n</div>\r\n", styles: ["#reportViewer1{height:200px}#reportViewer1 .k-splitter .k-scrollable{overflow:hidden}.k-pdf-export,.k-pdf-export *{font-family:Arial Unicode MS}\n"], components: [{ type: i2.TelerikReportViewerComponent, selector: "tr-viewer", inputs: ["keepClientAlive", "id", "serviceUrl", "reportServer", "templateUrl", "initialPageAreaImageUrl", "reportSource", "sendEmail", "parameters", "scale", "scaleMode", "viewMode", "pageMode", "persistSession", "parameterEditors", "authenticationToken", "printMode", "selector", "disabledButtonClass", "checkedButtonClass", "enableAccessibility", "searchMetadataOnDemand", "parametersAreaVisible", "documentMapVisible", "ready", "error", "parametersAreaPosition", "documentMapAreaPosition", "exportBegin", "exportEnd", "sendEmailBegin", "sendEmailEnd", "pageReady", "printBegin", "printEnd", "renderingBegin", "renderingEnd", "updateUi", "interactiveActionExecuting", "interactiveActionEnter", "interactiveActionLeave", "viewerToolTipOpening", "containerStyle"] }] });
173
+ ZreportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZreportComponent, deps: [{ token: i1.ResourceApiService }, { token: i1.AuthService }, { token: i1.AlertService }], target: i0.ɵɵFactoryTarget.Component });
174
+ ZreportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZreportComponent, selector: "app-zreport", inputs: { data: "data", group: "group" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "viewer", first: true, predicate: ["reportViewer1"], descendants: true }], ngImport: i0, template: "<div width=\"100%\" height=\"800px\">\r\n <tr-viewer #reportViewer1\r\n [containerStyle]=\"viewerContainerStyle\"\r\n [serviceUrl]=\"serviceUrl\"\r\n [reportSource]=\"reportSource\"\r\n [viewMode]=\"'INTERACTIVE'\"\r\n [scaleMode]=\"'SPECIFIC'\"\r\n [scale]=\"1.0\"\r\n [enableAccessibility]=\"false\"\r\n [ready]=\"onReady\"\r\n [exportBegin]=\"onExportBegin\"\r\n [exportEnd]=\"onExportEnd\"\r\n [renderingBegin]=\"onRenderingBegin\"\r\n [renderingEnd]=\"onRenderingEnd\"\r\n [printBegin]=\"onPrintBegin\"\r\n [printEnd]=\"onPrintEnd\">\r\n </tr-viewer>\r\n</div>\r\n", styles: ["#reportViewer1{height:200px}#reportViewer1 .k-splitter .k-scrollable{overflow:hidden}.k-pdf-export,.k-pdf-export *{font-family:Arial Unicode MS}\n"], components: [{ type: i2.TelerikReportViewerComponent, selector: "tr-viewer", inputs: ["keepClientAlive", "id", "serviceUrl", "reportServer", "templateUrl", "initialPageAreaImageUrl", "reportSource", "sendEmail", "parameters", "scale", "scaleMode", "viewMode", "pageMode", "persistSession", "parameterEditors", "authenticationToken", "printMode", "selector", "disabledButtonClass", "checkedButtonClass", "enableAccessibility", "searchMetadataOnDemand", "parametersAreaVisible", "documentMapVisible", "ready", "error", "parametersAreaPosition", "documentMapAreaPosition", "exportBegin", "exportEnd", "sendEmailBegin", "sendEmailEnd", "pageReady", "printBegin", "printEnd", "renderingBegin", "renderingEnd", "updateUi", "interactiveActionExecuting", "interactiveActionEnter", "interactiveActionLeave", "viewerToolTipOpening", "containerStyle"] }] });
121
175
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZreportComponent, decorators: [{
122
176
  type: Component,
123
- args: [{ selector: "app-zreport", template: "<div width=\"100%\" height=\"800px\">\r\n <!--<ion-button class=\"button-container\"\r\n fill=\"outline\"\r\n color=\"dark\"\r\n size=\"small\"\r\n strong=\"false\"\r\n [hidden]=\"false\"\r\n [disabled]=\"false\"\r\n (click)=\"ReportViewer.refreshReport()\">\r\n <div style=\"padding-right: 5px;\"></div>\r\n <span class=\"ion-text-capitalize\">Refresh</span>\r\n </ion-button>\r\n\r\n <ion-button class=\"button-container\"\r\n fill=\"outline\"\r\n color=\"dark\"\r\n size=\"small\"\r\n strong=\"false\"\r\n [hidden]=\"false\"\r\n [disabled]=\"false\"\r\n (click)=\"ReportViewer.commands.print.exec()\">\r\n <fa-icon [icon]=\"getFontAwesome('print')\"></fa-icon>\r\n <div style=\"padding-right: 5px;\"></div>\r\n <span class=\"ion-text-capitalize\">Print</span>\r\n </ion-button>-->\r\n \r\n <tr-viewer #reportViewer1\r\n [containerStyle]=\"viewerContainerStyle\"\r\n [serviceUrl]=\"resourceURL\"\r\n [reportSource]=\"ReportSource\"\r\n [viewMode]=\"'INTERACTIVE'\"\r\n [scaleMode]=\"'SPECIFIC'\"\r\n [scale]=\"1.0\"\r\n [enableAccessibility]=\"false\"\r\n [ready]=\"ready\"\r\n [viewerToolTipOpening]=\"viewerToolTipOpening\"\r\n [exportBegin]=\"exportBeginHandler\"\r\n [exportEnd]=\"exportEndHandler\"\r\n [pageReady]=\"onPageReady\"\r\n [renderingEnd]=\"onRenderingEnd\">\r\n </tr-viewer>\r\n</div>\r\n", styles: ["#reportViewer1{height:200px}#reportViewer1 .k-splitter .k-scrollable{overflow:hidden}.k-pdf-export,.k-pdf-export *{font-family:Arial Unicode MS}\n"] }]
124
- }], ctorParameters: function () { return [{ type: i1.ResourceApiService }]; }, propDecorators: { viewer: [{
177
+ args: [{ selector: "app-zreport", template: "<div width=\"100%\" height=\"800px\">\r\n <tr-viewer #reportViewer1\r\n [containerStyle]=\"viewerContainerStyle\"\r\n [serviceUrl]=\"serviceUrl\"\r\n [reportSource]=\"reportSource\"\r\n [viewMode]=\"'INTERACTIVE'\"\r\n [scaleMode]=\"'SPECIFIC'\"\r\n [scale]=\"1.0\"\r\n [enableAccessibility]=\"false\"\r\n [ready]=\"onReady\"\r\n [exportBegin]=\"onExportBegin\"\r\n [exportEnd]=\"onExportEnd\"\r\n [renderingBegin]=\"onRenderingBegin\"\r\n [renderingEnd]=\"onRenderingEnd\"\r\n [printBegin]=\"onPrintBegin\"\r\n [printEnd]=\"onPrintEnd\">\r\n </tr-viewer>\r\n</div>\r\n", styles: ["#reportViewer1{height:200px}#reportViewer1 .k-splitter .k-scrollable{overflow:hidden}.k-pdf-export,.k-pdf-export *{font-family:Arial Unicode MS}\n"] }]
178
+ }], ctorParameters: function () { return [{ type: i1.ResourceApiService }, { type: i1.AuthService }, { type: i1.AlertService }]; }, propDecorators: { viewer: [{
125
179
  type: ViewChild,
126
180
  args: ['reportViewer1', { static: false }]
127
181
  }], data: [{
@@ -132,4 +186,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
132
186
  type: HostListener,
133
187
  args: ['window:resize', ['$event']]
134
188
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cmVwb3J0L3pyZXBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenJlcG9ydC96cmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFlBQVksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFPcEgsMkNBQTJDO0FBQzNDLE9BQU8sRUFDK0Isb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQzNFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFZekIsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUNVLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBUWhELHdCQUFtQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUVqRCxVQUFLLEdBQUcsZUFBZSxDQUFDO1FBQ3hCLHlCQUFvQixHQUFHO1lBQ3JCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE9BQU87WUFDZixDQUFDLGFBQWEsQ0FBQyxFQUFFLGVBQWU7U0FDakMsQ0FBQztRQUVGLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBbkJsQyxDQUFDO0lBcUJELFFBQVE7UUFDTixnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMs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LGFBQWE7eUdBV3dCLE1BQU07c0JBQXBELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDcEMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFtRU4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBIb3N0TGlzdGVuZXIsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqLyBcclxuaW1wb3J0IHsgVGVsZXJpa1JlcG9ydFZpZXdlckNvbXBvbmVudCB9IGZyb20gXCJAcHJvZ3Jlc3MvdGVsZXJpay1hbmd1bGFyLXJlcG9ydC12aWV3ZXJcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBSZXNvdXJjZUFwaVNlcnZpY2UsIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgWkNvbXBvbmVudEhlbHBlclxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG4vLyBpbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16cmVwb3J0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96cmVwb3J0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pyZXBvcnQuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgLy9lbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBacmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2VcclxuICApIHtcclxuICB9XHJcbiAgIFxyXG4gIEBWaWV3Q2hpbGQoJ3JlcG9ydFZpZXdlcjEnLCB7IHN0YXRpYzogZmFsc2UgfSkgdmlld2VyOiBUZWxlcmlrUmVwb3J0Vmlld2VyQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG5cclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gIHRpdGxlID0gXCJSZXBvcnQgVmlld2VyXCI7XHJcbiAgdmlld2VyQ29udGFpbmVyU3R5bGUgPSB7XHJcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxyXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgaGVpZ2h0OiBcIjgwMHB4XCIsXHJcbiAgICBbJ2ZvbnQtZmFtaWx5J106ICdtcyBzYW5zIHNlcmlmJ1xyXG4gIH07XHJcblxyXG4gIHJlc291cmNlVVJMID0gbnVsbDtcclxuICBSZXBvcnRTb3VyY2UgPSBudWxsO1xyXG4gIGlzVmlzaWJsZSA9IHRydWU7XHJcbiAgcGFyYW1Ub1Jlc2l6ZVJlcG9ydFZpZXdlciA9IGZhbHNlO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgdGhpcy5yZXNvdXJjZVVSTCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCh0aGlzLmRhdGEuUmVzb3VyY2VVUkwpO1xyXG5cclxuICAgIGlmICghdGhpcy5yZXNvdXJjZVVSTCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInJlc291cmNlVVJMIGlzIGVtcHR5LlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLmRhdGEuSXNBdXRvR2VuZXJhdGVSZXBvcnQpIHtcclxuICAgICAgdGhpcy5SZXBvcnRTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlJlcG9ydFNvdXJjZSk7XHJcbiAgICB9IFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gTG9jYWxpemF0aW9uLlxyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XHJcbiAgICBsZXQgcmVzb3VyY2VzID0gJ0xvYWRpbmcuLi4nOyAvLyBEZWZhdWx0LlxyXG5cclxuICAgIHRoaXMudmlld2VyLnZpZXdlck9iamVjdC5zdHJpbmdSZXNvdXJjZXMgPSBPYmplY3QuYXNzaWduKHRoaXMudmlld2VyLnZpZXdlck9iamVjdC5zdHJpbmdSZXNvdXJjZXMsIHJlc291cmNlcyk7XHJcbiAgfVxyXG5cclxuICByZWFkeSgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUmVwb3J0IHJlYWR5LlwiKTtcclxuICAgIC8vaWYgKHRoaXMuZGF0YVsnaGlkZUhpc3RvcnlCYWNrJ10pIHsgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9oaXN0b3J5QmFjayddXCIpLnBhcmVudCgpLmhpZGUoKTsgfVxyXG4gICAgLy9pZiAodGhpcy5kYXRhWydoaWRlSGlzdG9yeUZvcndhcmQnXSkgeyAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2hpc3RvcnlGb3J3YXJkJ11cIikucGFyZW50KCkuaGlkZSgpOyB9XHJcbiAgICAvL2lmICh0aGlzLmRhdGFbJ2hpZGVSZWZyZXNoJ10pIHsgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9yZWZyZXNoJ11cIikucGFyZW50KCkuaGlkZSgpOyB9XHJcbiAgICAvL2lmICh0aGlzLmRhdGFbJ2hpZGVTdG9wUmVuZGVyaW5nJ10pIHsgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9zdG9wUmVuZGVyaW5nJ11cIikucGFyZW50KCkuaGlkZSgpOyB9XHJcbiAgICAvL2lmICh0aGlzLmRhdGFbJ2hpZGVHb1RvRmlyc3RQYWdlJ10pIHsgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9nb1RvRmlyc3RQYWdlJ11cIikucGFyZW50KCkuaGlkZSgpOyB9XHJcbiAgICAvL2lmICh0aGlzLmRhdGFbJ2hpZGVHb1RvUHJldlBhZ2UnXSkgeyAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2dvVG9QcmV2UGFnZSddXCIpLnBhcmVudCgpLmhpZGUoKTsgfVxyXG4gICAgLy9pZiAodGhpcy5kYXRhWydoaWRlR29Ub05leHRQYWdlJ10pIHsgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9nb1RvTmV4dFBhZ2UnXVwiKS5wYXJlbnQoKS5oaWRlKCk7IH1cclxuICAgIC8vaWYgKHRoaXMuZGF0YVsnaGlkZUdvVG9MYXN0UGFnZSddKSB7ICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfZ29Ub0xhc3RQYWdlJ11cIikucGFyZW50KCkuaGlkZSgpOyB9XHJcbiAgICAvL2lmICh0aGlzLmRhdGFbJ2hpZGVUb2dnbGVQcmludFByZXZpZXcnXSkgeyAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZVByaW50UHJldmlldyddXCIpLnBhcmVudCgpLmhpZGUoKTsgfVxyXG4gICAgLy9pZiAodGhpcy5kYXRhWydoaWRlRXhwb3J0J10pIHsgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9leHBvcnQnXVwiKS5wYXJlbnQoKS5oaWRlKCk7IH1cclxuICAgIC8vaWYgKHRoaXMuZGF0YVsnaGlkZVByaW50J10pIHsgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9wcmludCddXCIpLnBhcmVudCgpLmhpZGUoKTsgfVxyXG4gICAgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl90b2dnbGVEb2N1bWVudE1hcCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfdG9nZ2xlUGFyYW1ldGVyc0FyZWEnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvL2lmICh0aGlzLmRhdGFbJ2hpZGVab29tSW4nXSkgeyAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3pvb21JbiddXCIpLnBhcmVudCgpLmhpZGUoKTsgfVxyXG4gICAgLy9pZiAodGhpcy5kYXRhWydoaWRlWm9vbU91dCddKSB7ICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfem9vbU91dCddXCIpLnBhcmVudCgpLmhpZGUoKTsgfVxyXG4gICAgLy9pZiAodGhpcy5kYXRhWydoaWRlVG9nZ2xlWm9vbU1vZGUnXSkgeyAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZVpvb21Nb2RlJ11cIikucGFyZW50KCkuaGlkZSgpOyB9XHJcbiAgICAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZVNlYXJjaERpYWxvZyddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVJlYWR5KGU6IGFueSwgYXJnczogYW55KSB7XHJcbiAgICAvLyBkb2VzbnQgc2VlbSB0byB3b3JrIGluIGFuZ3VsYXIgMTNcclxuICAgIC8vdGhpcy5yZXNpemVWaWV3ZXIoZSwgYXJncyk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUmVwb3J0IHJlc2l6ZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgdmlld2VyVG9vbFRpcE9wZW5pbmcoZTogYW55LCBhcmdzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCd2aWV3ZXJUb29sVGlwT3BlbmluZyAnICsgYXJncy50b29sVGlwLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0QmVnaW5IYW5kbGVyKGU6IGFueSwgYXJnczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkV4cG9ydCBiZWdpbi5cIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnRFbmRIYW5kbGVyKGU6IGFueSwgYXJnczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkV4cG9ydCBlbmQuXCIpO1xyXG4gIH1cclxuICAgXHJcbiAgb25SZW5kZXJpbmdFbmQoZTogYW55LCBhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIE9jY3VycyBhZnRlciByZW5kZXJpbmcgdGhlIHJlcG9ydC5cclxuICAgIGNvbnNvbGUubG9nKFwiUmVuZGVyaW5nIGVuZGVkLlwiKTtcclxuICB9IFxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVSZXBvcnQoKSB7XHJcbiAgICBjb25zdCBycyA9IHRoaXMuZ3JvdXBbXCJSZXBvcnRTb3VyY2VcIl07XHJcbiAgICB0aGlzLnJlc291cmNlVVJMID0gcnNbJ3VybCddO1xyXG4gICAgdGhpcy52aWV3ZXIuc2V0UmVwb3J0U291cmNlKHJzKTtcclxuICAgIHRoaXMudmlld2VyLnJlZnJlc2hSZXBvcnQoKTtcclxuXHJcblxyXG4gICAgLy9pZiAodGhpcy52aWV3ZXJbJ2hlaWdodCddKSB7XHJcbiAgICAvLyAgdGhpcy52aWV3ZXJbJ2hlaWdodCddKDEwKTtcclxuICAgIC8vfVxyXG5cclxuICAgIC8vdmFyIGRvY3VtZW50TWFwU3BsaXR0ZXIgPSAkKFwiLnRydi1kb2N1bWVudC1tYXAtc3BsaXR0ZXJcIikuZGF0YShcImtlbmRvU3BsaXR0ZXJcIik7XHJcbiAgICAvL2RvY3VtZW50TWFwU3BsaXR0ZXIucmVzaXplKHRydWUpO1xyXG5cclxuICAgIC8vdmFyIHBhcmFtZXRlclNwbGl0dGVyID0gJChcIi50cnYtcGFyYW1ldGVycy1zcGxpdHRlclwiKS5kYXRhKFwia2VuZG9TcGxpdHRlclwiKTtcclxuICAgIC8vcGFyYW1ldGVyU3BsaXR0ZXIucmVzaXplKHRydWUpO1xyXG4gICAgXHJcblxyXG4gICAgLy9pZiAodGhpcy5kYXRhWydBdXRvUmVzaXplJ10pIHtcclxuICAgIC8vICB0aGlzLnBhcmFtVG9SZXNpemVSZXBvcnRWaWV3ZXIgPSB0cnVlO1xyXG4gICAgLy99IGVsc2Uge1xyXG4gICAgLy8gIHRoaXMucGFyYW1Ub1Jlc2l6ZVJlcG9ydFZpZXdlciA9IGZhbHNlO1xyXG4gICAgLy99XHJcbiAgfVxyXG5cclxuICBnZXRGb250QXdlc29tZShpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRGb250QXdlc29tZShpY29uTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZVZpZXdlcihlPzogYW55LCBhcmdzPzogYW55KSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwiUGFnZSByZWFkeS5cIik7XHJcbiAgICBpZiAodGhpcy5wYXJhbVRvUmVzaXplUmVwb3J0Vmlld2VyKSB7XHJcbiAgICAgIC8vY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLiBcclxuICAgICAgY29uc3QgcGFnZUhlaWdodCA9ICQoXCIudHJ2LXBhZ2VzLWFyZWEgLnRydi1wYWdlLXdyYXBwZXJcIikuaGVpZ2h0KCkgKyAkKFwiLnRydi1uYXZcIikub3V0ZXJIZWlnaHQoKSArIDI7IC8vIENhbGN1bGF0ZSB0aGUgcmVwb3J0IHBhZ2UgaGVpZ2h0XHJcbiAgICAgIGNvbnN0IHZpZXdlciA9ICQoXCIjcmVwb3J0Vmlld2VyMVwiKTtcclxuICAgICAgY29uc3Qgdmlld2VySGVpZ2h0ID0gdmlld2VyLmhlaWdodCgpO1xyXG5cclxuICAgICAgaWYgKHZpZXdlckhlaWdodCAhPT0gcGFnZUhlaWdodCkge1xyXG4gICAgICAgIHZpZXdlci5oZWlnaHQocGFnZUhlaWdodCk7XHJcbiAgICAgICAgY29uc3QgZG9jdW1lbnRNYXBTcGxpdHRlciA9ICQoXCIudHJ2LWRvY3VtZW50LW1hcC1zcGxpdHRlclwiKS5kYXRhKFwia2VuZG9TcGxpdHRlclwiKTtcclxuICAgICAgICBkb2N1bWVudE1hcFNwbGl0dGVyLnJlc2l6ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyU3BsaXR0ZXIgPSAkKFwiLnRydi1wYXJhbWV0ZXJzLXNwbGl0dGVyXCIpLmRhdGEoXCJrZW5kb1NwbGl0dGVyXCIpO1xyXG4gICAgICAgIHBhcmFtZXRlclNwbGl0dGVyLnJlc2l6ZSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjgwMHB4XCI+XHJcbiAgPCEtLTxpb24tYnV0dG9uIGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgIGNvbG9yPVwiZGFya1wiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2hpZGRlbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiUmVwb3J0Vmlld2VyLnJlZnJlc2hSZXBvcnQoKVwiPlxyXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiaW9uLXRleHQtY2FwaXRhbGl6ZVwiPlJlZnJlc2g8L3NwYW4+XHJcbiAgPC9pb24tYnV0dG9uPlxyXG5cclxuICA8aW9uLWJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICBjb2xvcj1cImRhcmtcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlJlcG9ydFZpZXdlci5jb21tYW5kcy5wcmludC5leGVjKClcIj5cclxuICAgIDxmYS1pY29uIFtpY29uXT1cImdldEZvbnRBd2Vzb21lKCdwcmludCcpXCI+PC9mYS1pY29uPlxyXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2Rpdj5cclxuICAgIDxzcGFuIGNsYXNzPVwiaW9uLXRleHQtY2FwaXRhbGl6ZVwiPlByaW50PC9zcGFuPlxyXG4gIDwvaW9uLWJ1dHRvbj4tLT5cclxuIFxyXG4gIDx0ci12aWV3ZXIgI3JlcG9ydFZpZXdlcjFcclxuICAgICAgICAgICAgIFtjb250YWluZXJTdHlsZV09XCJ2aWV3ZXJDb250YWluZXJTdHlsZVwiXHJcbiAgICAgICAgICAgICBbc2VydmljZVVybF09XCJyZXNvdXJjZVVSTFwiXHJcbiAgICAgICAgICAgICBbcmVwb3J0U291cmNlXT1cIlJlcG9ydFNvdXJjZVwiXHJcbiAgICAgICAgICAgICBbdmlld01vZGVdPVwiJ0lOVEVSQUNUSVZFJ1wiXHJcbiAgICAgICAgICAgICBbc2NhbGVNb2RlXT1cIidTUEVDSUZJQydcIlxyXG4gICAgICAgICAgICAgW3NjYWxlXT1cIjEuMFwiXHJcbiAgICAgICAgICAgICBbZW5hYmxlQWNjZXNzaWJpbGl0eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICBbcmVhZHldPVwicmVhZHlcIlxyXG4gICAgICAgICAgICAgW3ZpZXdlclRvb2xUaXBPcGVuaW5nXT1cInZpZXdlclRvb2xUaXBPcGVuaW5nXCJcclxuICAgICAgICAgICAgIFtleHBvcnRCZWdpbl09XCJleHBvcnRCZWdpbkhhbmRsZXJcIlxyXG4gICAgICAgICAgICAgW2V4cG9ydEVuZF09XCJleHBvcnRFbmRIYW5kbGVyXCJcclxuICAgICAgICAgICAgIFtwYWdlUmVhZHldPVwib25QYWdlUmVhZHlcIlxyXG4gICAgICAgICAgICAgW3JlbmRlcmluZ0VuZF09XCJvblJlbmRlcmluZ0VuZFwiPlxyXG4gIDwvdHItdmlld2VyPlxyXG48L2Rpdj5cclxuIl19
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cmVwb3J0L3pyZXBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenJlcG9ydC96cmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFlBQVksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFPcEgsMkNBQTJDO0FBQzNDLE9BQU8sRUFDK0Isb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQzNFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFZekIsTUFBTSxPQUFPLGdCQUFnQjtJQStCM0IsWUFDVSxrQkFBc0MsRUFDdEMsV0FBd0IsRUFDeEIsWUFBMEI7UUFGMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQTdCcEMsd0JBQW1CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBU3pDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRS9CLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQix5QkFBb0IsR0FBRztZQUM1QixRQUFRLEVBQUUsVUFBVTtZQUNwQixLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxPQUFPO1lBQ2YsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixlQUFlLEVBQUUsU0FBUztZQUMxQixTQUFTLEVBQUUsOEJBQThCO1lBQ3pDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFVB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KioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBIb3N0TGlzdGVuZXIsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqLyBcclxuaW1wb3J0IHsgVGVsZXJpa1JlcG9ydFZpZXdlckNvbXBvbmVudCB9IGZyb20gXCJAcHJvZ3Jlc3MvdGVsZXJpay1hbmd1bGFyLXJlcG9ydC12aWV3ZXJcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBSZXNvdXJjZUFwaVNlcnZpY2UsIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgWkNvbXBvbmVudEhlbHBlciwgQXV0aFNlcnZpY2UsIEFsZXJ0U2VydmljZVxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG4vLyBpbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16cmVwb3J0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96cmVwb3J0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pyZXBvcnQuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgLy9lbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBacmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdyZXBvcnRWaWV3ZXIxJywgeyBzdGF0aWM6IGZhbHNlIH0pIHZpZXdlcjogVGVsZXJpa1JlcG9ydFZpZXdlckNvbXBvbmVudDtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuXHJcbiAgY29tcG9uZW50UHJvcGVydGllcyA9IG5ldyBaQ29tcG9uZW50UHJvcGVydGllcygpO1xyXG5cclxuICBwdWJsaWMgb25FeHBvcnRCZWdpbjogRnVuY3Rpb247XHJcbiAgcHVibGljIG9uRXhwb3J0RW5kOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgb25SZW5kZXJpbmdCZWdpbjogRnVuY3Rpb247XHJcbiAgcHVibGljIG9uUmVuZGVyaW5nRW5kOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgb25QcmludEJlZ2luOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgb25QcmludEVuZDogRnVuY3Rpb247XHJcblxyXG4gIHByaXZhdGUgYWxsb3dQcmludFBERjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyBpc1Zpc2libGUgPSB0cnVlO1xyXG4gIHB1YmxpYyBzZXJ2aWNlVXJsID0gbnVsbDtcclxuICBwdWJsaWMgcmVwb3J0U291cmNlID0gbnVsbDtcclxuICBwdWJsaWMgdmlld2VyQ29udGFpbmVyU3R5bGUgPSB7XHJcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxyXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgaGVpZ2h0OiBcIjgwMHB4XCIsXHJcbiAgICBmb250RmFtaWx5OiAnQXJpYWwsIHNhbnMtc2VyaWYnLFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZjlmOScsXHJcbiAgICBib3hTaGFkb3c6ICcwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcclxuICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICBsaW5lSGVpZ2h0OiAnMS41JyxcclxuICAgIGNvbG9yOiAnIzMzMycsXHJcbiAgfTsgXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuICAgIFxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uRXhwb3J0QmVnaW4gPSB0aGlzLmV4cG9ydEJlZ2luLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLm9uRXhwb3J0RW5kID0gdGhpcy5leHBvcnRFbmQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMub25SZW5kZXJpbmdCZWdpbiA9IHRoaXMucmVuZGVyaW5nQmVnaW4uYmluZCh0aGlzKTtcclxuICAgIHRoaXMub25SZW5kZXJpbmdFbmQgPSB0aGlzLnJlbmRlcmluZ0VuZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5vblByaW50QmVnaW4gPSB0aGlzLnByaW50QmVnaW4uYmluZCh0aGlzKTtcclxuICAgIHRoaXMub25QcmludEVuZCA9IHRoaXMucHJpbnRFbmQuYmluZCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLnNlcnZpY2VVcmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwodGhpcy5kYXRhLlJlc291cmNlVVJMKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuc2VydmljZVVybCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInJlc291cmNlVVJMIGlzIGVtcHR5LlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLmRhdGEuSXNBdXRvR2VuZXJhdGVSZXBvcnQpIHtcclxuICAgICAgdGhpcy5yZXBvcnRTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlJlcG9ydFNvdXJjZSk7XHJcbiAgICB9IFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQgeyBcclxuICAgIGxldCByZXNvdXJjZXMgPSAnTG9hZGluZy4uLic7IC8vIERlZmF1bHQuXHJcblxyXG4gICAgdGhpcy52aWV3ZXIudmlld2VyT2JqZWN0LnN0cmluZ1Jlc291cmNlcyA9IE9iamVjdC5hc3NpZ24odGhpcy52aWV3ZXIudmlld2VyT2JqZWN0LnN0cmluZ1Jlc291cmNlcywgcmVzb3VyY2VzKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJSZXBvcnQgcmVzaXplZC5cIik7XHJcbiAgfVxyXG5cclxuICBvblJlYWR5KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJSZXBvcnQgcmVhZHkuXCIpO1xyXG4gICAgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9oaXN0b3J5QmFjayddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfaGlzdG9yeUZvcndhcmQnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3N0b3BSZW5kZXJpbmcnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfcmVmcmVzaCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9nb1RvRmlyc3RQYWdlJ11cIikucGFyZW50KCkuaGlkZSgpOyBcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9nb1RvUHJldlBhZ2UnXVwiKS5wYXJlbnQoKS5oaWRlKCk7IFxyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2dvVG9OZXh0UGFnZSddXCIpLnBhcmVudCgpLmhpZGUoKTsgXHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfZ29Ub0xhc3RQYWdlJ11cIikucGFyZW50KCkuaGlkZSgpOyBcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl90b2dnbGVQcmludFByZXZpZXcnXVwiKS5wYXJlbnQoKS5oaWRlKCk7IFxyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2V4cG9ydCddXCIpLnBhcmVudCgpLmhpZGUoKTsgXHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfcHJpbnQnXVwiKS5wYXJlbnQoKS5oaWRlKCk7IFxyXG4gICAgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl90b2dnbGVEb2N1bWVudE1hcCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfdG9nZ2xlUGFyYW1ldGVyc0FyZWEnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfem9vbUluJ11cIikucGFyZW50KCkuaGlkZSgpOyBcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl96b29tT3V0J11cIikucGFyZW50KCkuaGlkZSgpOyBcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl90b2dnbGVab29tTW9kZSddXCIpLnBhcmVudCgpLmhpZGUoKTsgXHJcbiAgICAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZVNlYXJjaERpYWxvZyddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRCZWdpbihlOiBhbnksIGFyZ3M6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJFeHBvcnQgYmVnaW4uXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cG9ydEVuZChlOiBhbnksIGFyZ3M6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJFeHBvcnQgZW5kLlwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJpbmdCZWdpbihlOiBhbnksIGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJSZW5kZXJpbmcgc3RhcnRlZC5cIik7XHJcbiAgICBpZiAodGhpcy5yZXBvcnRTb3VyY2UucGFyYW1ldGVycyAmJiB0aGlzLnJlcG9ydFNvdXJjZS5wYXJhbWV0ZXJzLkF1dGhvcml6YXRpb24gIT09IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkJlYXJlci5BdXRob3JpemF0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIlVwZGF0ZWQgaW52YWxpZCBhdXRob3JpemF0aW9uIHRva2VuLlwiKTtcclxuXHJcbiAgICAgIHRoaXMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMuQXV0aG9yaXphdGlvbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkJlYXJlci5BdXRob3JpemF0aW9uO1xyXG4gICAgICB0aGlzLnZpZXdlci5zZXRSZXBvcnRTb3VyY2UodGhpcy5yZXBvcnRTb3VyY2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcmluZ0VuZChlOiBhbnksIGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJSZW5kZXJpbmcgZW5kZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUVtcHR5UGRmKCk6IEJsb2Ige1xyXG4gICAgLy8gQ3JlYXRlIGFuIGVtcHR5IFBERiBmaWxlIHdpdGgganVzdCBhIGhlYWRlclxyXG4gICAgY29uc3QgcGRmQ29udGVudCA9ICclUERGLTEuM1xcbjEgMCBvYmpcXG48PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj5cXG5lbmRvYmpcXG4yIDAgb2JqXFxuPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFtdIC9Db3VudCAwID4+XFxuZW5kb2JqXFxueHJlZlxcbjAgM1xcbjAwMDAwMDAwMDAgNjU1MzUgZiBcXG4wMDAwMDAwMDEwIDAwMDAwIG4gXFxudHJhaWxlclxcbjw8IC9Sb290IDEgMCBSIC9TaXplIDMgPj5cXG5zdGFydHhyZWZcXG4yMDVcXG4lJUVPRic7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW3BkZkNvbnRlbnRdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByaW50QmVnaW4oZTogYW55LCBhcmdzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUHJpbnQgYmVnaW4uXCIpO1xyXG5cclxuICAgIGNvbnN0IGFsZXJ0VGl0bGUgPSAnUHJpbnQgUERGIEVycm9yJztcclxuICAgIGNvbnN0IHBkZkJsb2IgPSB0aGlzLmdlbmVyYXRlRW1wdHlQZGYoKTtcclxuICAgIGNvbnN0IHBkZlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwocGRmQmxvYik7IGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcclxuICAgIGxldCBpc0Nocm9tZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzRWRnZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmICgvRWRnLy50ZXN0KHVzZXJBZ2VudCkpIHtcclxuICAgICAgaXNFZGdlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKC9DaHJvbWUvLnRlc3QodXNlckFnZW50KSkge1xyXG4gICAgICBpc0Nocm9tZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWZyYW1lLnNyYyA9IHBkZlVybDtcclxuICAgIGlmcmFtZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdDaGVja2luZyBicm93c2VyIGlzIHJlcG9ydCBhYmxlIHRvIHByaW50LicsIGlmcmFtZS5jb250ZW50RG9jdW1lbnQpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XHJcbiAgICAgICAgY29uc3QgcGRmRWxlbWVudCA9IGlmcmFtZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2VtYmVkW3R5cGU9XCJhcHBsaWNhdGlvbi9wZGZcIl0sIG9iamVjdFt0eXBlPVwiYXBwbGljYXRpb24vcGRmXCJdLCBpZnJhbWUnKTtcclxuXHJcbiAgICAgICAgLy8gSWYgbm8gUERGIGVsZW1lbnQgZm91bmQsIGFsZXJ0IHVzZXIgYWJvdXQgcG90ZW50aWFsIGlzc3VlXHJcbiAgICAgICAgaWYgKCFwZGZFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93UHJpbnRQREYgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoaXNDaHJvbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd09rYXkoYWxlcnRUaXRsZSwgXCJTdGVwIDE6IFBsZWFzZSBuYXZpZ2F0ZSB0byAnY2hyb21lOi8vc2V0dGluZ3MvY29udGVudC9wZGZEb2N1bWVudHMnIGluIHRoZSBicm93ZXIuPGJyLz5TdGVwIDI6IFNlbGVjdCAnT3BlbiBQREZzIGluIENocm9tZScgaW4gdGhlIHNldHRpbmcgYmVmb3JlIHByaW50aW5nIHRoZSByZXBvcnQuXCIsIFtcImNvbC02XCJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGlzRWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93T2theShhbGVydFRpdGxlLCBcIlN0ZXAgMTogUGxlYXNlIG5hdmlnYXRlIHRvICdlZGdlOi8vc2V0dGluZ3MvY29udGVudC9wZGZEb2N1bWVudHMnIGluIHRoZSBicm93ZXIuPGJyLz5TdGVwIDI6IEVuYWJsZSAnUERGIHZpZXcgc2V0dGluZ3MnIGFuZCBEaXNhYmxlICdBbHdheXMgRG93bmxvYWQgUERGIGZpbGVzJyBpbiB0aGUgc2V0dGluZyBiZWZvcmUgcHJpbnRpbmcgdGhlIHJlcG9ydC5cIiwgW1wiY29sLTZcIl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dPa2F5KGFsZXJ0VGl0bGUsIFwiVGhlIGJyb3dzZXIgc2V0dGluZ3MgY2Fubm90IGJlIGRldGVjdGVkLCBwbGVhc2UgcmVhY2ggb3V0IHRvIHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFtcImNvbC00XCJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93UHJpbnRQREYgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAvLyBJZiBhY2Nlc3NpbmcgaWZyYW1lIGNvbnRlbnQgdGhyb3dzIGFuIGVycm9yLCBhbGVydCB1c2VyIGFib3V0IHBvdGVudGlhbCBpc3N1ZVxyXG4gICAgICAgIHRoaXMuYWxsb3dQcmludFBERiA9IGZhbHNlO1xyXG4gICAgICAgIC8vIFBERiBmYWlsZWQgdG8gbG9hZCBvciBkaXNwbGF5IHByb3Blcmx5XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1BERiBmYWlsZWQgdG8gbG9hZCBvciBkaXNwbGF5IHByb3Blcmx5IGluIHRoZSBpZnJhbWUuJyk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd09rYXkoYWxlcnRUaXRsZSwgXCJUaGUgYnJvd3NlciBzZXR0aW5ncyBjYW5ub3QgYmUgZGV0ZWN0ZWQsIHBsZWFzZSByZWFjaCBvdXQgdG8gc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgW1wiY29sLTRcIl0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmcmFtZS5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmFsbG93UHJpbnRQREYgPSBmYWxzZTtcclxuICAgICAgLy8gUERGIGZhaWxlZCB0byBsb2FkIG9yIGRpc3BsYXkgcHJvcGVybHlcclxuICAgICAgY29uc29sZS5sb2coJ1BERiBmYWlsZWQgdG8gbG9hZCBvciBkaXNwbGF5IHByb3Blcmx5IGluIHRoZSBpZnJhbWUuJyk7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dPa2F5KGFsZXJ0VGl0bGUsIFwiVGhlIGJyb3dzZXIgc2V0dGluZ3MgY2Fubm90IGJlIGRldGVjdGVkLCBwbGVhc2UgcmVhY2ggb3V0IHRvIHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFtcImNvbC00XCJdKTtcclxuICAgIH07XHJcblxyXG4gICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJpbnRFbmQoZTogYW55LCBhcmdzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUHJpbnQgZW5kLlwiKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuYWxsb3dQcmludFBERikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0Jyb3dzZXIgaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24sIHVuYWJsZSB0byBwcmludCB0aGUgUERGLicpXHJcbiAgICAgIGFyZ3MuaGFuZGxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVSZXBvcnQoKSB7XHJcbiAgICB0aGlzLnJlcG9ydFNvdXJjZSA9IHRoaXMuZ3JvdXBbXCJSZXBvcnRTb3VyY2VcIl07XHJcblxyXG4gICAgaWYgKHRoaXMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMgJiYgIXRoaXMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMuQXV0aG9yaXphdGlvbikge1xyXG4gICAgICB0aGlzLnJlcG9ydFNvdXJjZS5wYXJhbWV0ZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25CZWFyZXIuQXV0aG9yaXphdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXBvcnRTb3VyY2VbJ3VybCddKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVVybCA9IHRoaXMucmVwb3J0U291cmNlWyd1cmwnXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdlci5zZXRSZXBvcnRTb3VyY2UodGhpcy5yZXBvcnRTb3VyY2UpO1xyXG4gICAgLy90aGlzLnZpZXdlci5yZWZyZXNoUmVwb3J0KCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb250QXdlc29tZShpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRGb250QXdlc29tZShpY29uTmFtZSk7XHJcbiAgfSBcclxufVxyXG4iLCI8ZGl2IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjgwMHB4XCI+XHJcbiAgPHRyLXZpZXdlciAjcmVwb3J0Vmlld2VyMVxyXG4gICAgICAgICAgICAgW2NvbnRhaW5lclN0eWxlXT1cInZpZXdlckNvbnRhaW5lclN0eWxlXCJcclxuICAgICAgICAgICAgIFtzZXJ2aWNlVXJsXT1cInNlcnZpY2VVcmxcIlxyXG4gICAgICAgICAgICAgW3JlcG9ydFNvdXJjZV09XCJyZXBvcnRTb3VyY2VcIlxyXG4gICAgICAgICAgICAgW3ZpZXdNb2RlXT1cIidJTlRFUkFDVElWRSdcIlxyXG4gICAgICAgICAgICAgW3NjYWxlTW9kZV09XCInU1BFQ0lGSUMnXCJcclxuICAgICAgICAgICAgIFtzY2FsZV09XCIxLjBcIlxyXG4gICAgICAgICAgICAgW2VuYWJsZUFjY2Vzc2liaWxpdHldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgW3JlYWR5XT1cIm9uUmVhZHlcIlxyXG4gICAgICAgICAgICAgW2V4cG9ydEJlZ2luXT1cIm9uRXhwb3J0QmVnaW5cIlxyXG4gICAgICAgICAgICAgW2V4cG9ydEVuZF09XCJvbkV4cG9ydEVuZFwiXHJcbiAgICAgICAgICAgICBbcmVuZGVyaW5nQmVnaW5dPVwib25SZW5kZXJpbmdCZWdpblwiXHJcbiAgICAgICAgICAgICBbcmVuZGVyaW5nRW5kXT1cIm9uUmVuZGVyaW5nRW5kXCJcclxuICAgICAgICAgICAgIFtwcmludEJlZ2luXT1cIm9uUHJpbnRCZWdpblwiXHJcbiAgICAgICAgICAgICBbcHJpbnRFbmRdPVwib25QcmludEVuZFwiPlxyXG4gIDwvdHItdmlld2VyPlxyXG48L2Rpdj5cclxuIl19