nuxeo-development-framework 4.5.3 → 4.5.5
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/bundles/nuxeo-development-framework.umd.js +360 -210
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +40 -32
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +209 -167
- package/esm2015/lib/components/pdf-tron/pdftron/silent-pdftron.service.js +94 -0
- package/esm2015/public-api.js +2 -1
- package/fesm2015/nuxeo-development-framework.js +325 -187
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +8 -8
- package/lib/components/pdf-tron/pdftron/pdftron.component.d.ts +8 -8
- package/lib/components/pdf-tron/pdftron/silent-pdftron.service.d.ts +16 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
var _PdftronComponent_instances, _PdftronComponent_updateSilentPdfTron, _PdftronComponent_afterLoadWebViewer, _PdftronComponent_docLoaded, _PdftronComponent_reset;
|
|
2
|
+
import { __awaiter, __classPrivateFieldGet } from "tslib";
|
|
3
|
+
import { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
|
|
3
4
|
import WebViewer from '@pdftron/webviewer';
|
|
4
5
|
import { APP_BASE_HREF } from '@angular/common';
|
|
5
6
|
import { SecurePipe } from '../../../pipes/secure.pipe';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "./pdftron.service";
|
|
8
9
|
import * as i2 from "../../../core/services/nuxeo/nuxeo.service";
|
|
9
|
-
import * as i3 from "../../../
|
|
10
|
-
import * as i4 from "
|
|
11
|
-
import * as i5 from "../../custom-toastr/services/custom-toastr.service";
|
|
10
|
+
import * as i3 from "../../../core/services/translation/translation.service";
|
|
11
|
+
import * as i4 from "./silent-pdftron.service";
|
|
12
12
|
/**
|
|
13
13
|
* A reusable file viewer based on PDFTron Library
|
|
14
14
|
* @title
|
|
@@ -23,15 +23,15 @@ import * as i5 from "../../custom-toastr/services/custom-toastr.service";
|
|
|
23
23
|
* </app-pdftron>
|
|
24
24
|
*/
|
|
25
25
|
export class PdftronComponent {
|
|
26
|
-
constructor(cdr, pdftronService, nuxeo, baseHref,
|
|
26
|
+
constructor(cdr, pdftronService, nuxeo, baseHref, translationService, silentPdfTronService, environment) {
|
|
27
27
|
this.cdr = cdr;
|
|
28
28
|
this.pdftronService = pdftronService;
|
|
29
29
|
this.nuxeo = nuxeo;
|
|
30
30
|
this.baseHref = baseHref;
|
|
31
|
-
this.securePipe = securePipe;
|
|
32
31
|
this.translationService = translationService;
|
|
33
|
-
this.
|
|
32
|
+
this.silentPdfTronService = silentPdfTronService;
|
|
34
33
|
this.environment = environment;
|
|
34
|
+
_PdftronComponent_instances.add(this);
|
|
35
35
|
this.actionClicked = false; // used to know if there is action clicked outside to start edit mode or not
|
|
36
36
|
this.DOCUMENT_TYPE = 'application/pdf';
|
|
37
37
|
this.fitMode = 'FitWidth';
|
|
@@ -46,8 +46,18 @@ export class PdftronComponent {
|
|
|
46
46
|
this.events = new EventEmitter();
|
|
47
47
|
this.SignatureEvent = new EventEmitter(); // used to export signature to outside
|
|
48
48
|
this.firstTimeLoad = true; //flage to control importing signatures in the first time load only
|
|
49
|
-
this.firstSignatureLoad = true; // flage to pass first load of imported signatures without emitting the event
|
|
49
|
+
this.firstSignatureLoad = true; // flage to pass first load of imported signatures without emitting the event
|
|
50
50
|
this.newSignCreation = false; // flage to indicate signature creation is created or choosed from stored ones
|
|
51
|
+
_PdftronComponent_docLoaded.set(this, () => {
|
|
52
|
+
let fitMode = this.webViewerInstance.FitMode.FitWidth;
|
|
53
|
+
if (this.fitMode === 'FitPage') {
|
|
54
|
+
fitMode = this.webViewerInstance.FitMode.FitPage;
|
|
55
|
+
}
|
|
56
|
+
else if (this.fitMode === 'Zoom') {
|
|
57
|
+
fitMode = this.webViewerInstance.FitMode.Zoom;
|
|
58
|
+
}
|
|
59
|
+
this.webViewerInstance.setFitMode(fitMode);
|
|
60
|
+
});
|
|
51
61
|
this.savedAnotations = [];
|
|
52
62
|
this.fileWithOcr = false;
|
|
53
63
|
this.newAnnotations = [];
|
|
@@ -56,7 +66,7 @@ export class PdftronComponent {
|
|
|
56
66
|
this.searchFn = (searchValue, options) => {
|
|
57
67
|
this.mySearchStringResults = [];
|
|
58
68
|
if (this.savedAnotations.length > 0) {
|
|
59
|
-
this.savedAnotations.map(annotation => {
|
|
69
|
+
this.savedAnotations.map((annotation) => {
|
|
60
70
|
annotation.Hidden = true;
|
|
61
71
|
// Always redraw annotation if rendering was updated
|
|
62
72
|
this.webViewerInstance.annotManager.redrawAnnotation(annotation);
|
|
@@ -73,13 +83,13 @@ export class PdftronComponent {
|
|
|
73
83
|
this.pages.pages.forEach((page, index) => {
|
|
74
84
|
this.pageHeight = page.page_height;
|
|
75
85
|
this.pageWidth = page.page_width;
|
|
76
|
-
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(
|
|
77
|
-
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(
|
|
78
|
-
page.zones.forEach(zone => {
|
|
79
|
-
zone.paragraphs.forEach(paragraph => {
|
|
80
|
-
paragraph.lines.forEach(line => {
|
|
86
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(index + 1);
|
|
87
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(index + 1);
|
|
88
|
+
page.zones.forEach((zone) => {
|
|
89
|
+
zone.paragraphs.forEach((paragraph) => {
|
|
90
|
+
paragraph.lines.forEach((line) => {
|
|
81
91
|
if (line.text.includes(searchValue)) {
|
|
82
|
-
this.SearchForWordInLine(mySearch, line,
|
|
92
|
+
this.SearchForWordInLine(mySearch, line, index + 1, page);
|
|
83
93
|
}
|
|
84
94
|
});
|
|
85
95
|
});
|
|
@@ -87,7 +97,7 @@ export class PdftronComponent {
|
|
|
87
97
|
});
|
|
88
98
|
}
|
|
89
99
|
else {
|
|
90
|
-
// then i am searching with only one word
|
|
100
|
+
// then i am searching with only one word
|
|
91
101
|
this.searchForWordInAllPages(searchValue);
|
|
92
102
|
}
|
|
93
103
|
this.webViewerInstance.docViewer.clearSearchResults();
|
|
@@ -101,69 +111,44 @@ export class PdftronComponent {
|
|
|
101
111
|
}
|
|
102
112
|
ngOnInit() {
|
|
103
113
|
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
this.transelationSubscrition = this.translationService.isArabic.subscribe(res => {
|
|
114
|
+
this.transelationSubscrition = this.translationService.isArabic.subscribe((res) => {
|
|
105
115
|
this.isArabic = res;
|
|
106
116
|
});
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
ngAfterViewInit() {
|
|
110
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
111
117
|
this.recivedSearchStringsArray = this.searchString.trim() ? this.searchString.split(',') : [];
|
|
112
118
|
if (this.fileTitle) {
|
|
113
119
|
if (this.fileTitle.endsWith('.ppt')) {
|
|
114
120
|
this.DOCUMENT_TYPE = 'application/vnd.ms-powerpoint';
|
|
115
121
|
}
|
|
116
122
|
else if (this.fileTitle.endsWith('.pptx')) {
|
|
117
|
-
this.DOCUMENT_TYPE =
|
|
118
|
-
'application/vnd.openxmlformats-officedocument.presentationml.presentation';
|
|
123
|
+
this.DOCUMENT_TYPE = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
|
|
119
124
|
}
|
|
120
125
|
else if (this.fileTitle.endsWith('.doc')) {
|
|
121
126
|
this.DOCUMENT_TYPE = 'application/msword';
|
|
122
127
|
}
|
|
123
128
|
else if (this.fileTitle.endsWith('.docx')) {
|
|
124
|
-
this.DOCUMENT_TYPE =
|
|
125
|
-
'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
|
|
129
|
+
this.DOCUMENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
|
|
126
130
|
}
|
|
131
|
+
}
|
|
132
|
+
if (this.silentPdfTronService.isEnabled) {
|
|
133
|
+
[this.silentPdfTron, this.webViewerInstance] = yield this.silentPdfTronService.getWebViewer();
|
|
134
|
+
__classPrivateFieldGet(this, _PdftronComponent_instances, "m", _PdftronComponent_afterLoadWebViewer).call(this, this.webViewerInstance);
|
|
135
|
+
this.resizeObserver = new ResizeObserver(() => __classPrivateFieldGet(this, _PdftronComponent_instances, "m", _PdftronComponent_updateSilentPdfTron).call(this));
|
|
136
|
+
this.resizeObserver.observe(this.viewerRef.nativeElement);
|
|
137
|
+
__classPrivateFieldGet(this, _PdftronComponent_instances, "m", _PdftronComponent_updateSilentPdfTron).call(this);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
127
140
|
WebViewer({
|
|
128
141
|
path: this.baseHref + '/assets/pdftrons',
|
|
129
142
|
forceClientSideInit: true,
|
|
130
143
|
streaming: true,
|
|
131
144
|
licenseKey: this.environment.pdftronLicenceKey,
|
|
132
|
-
css: this.isArabic
|
|
145
|
+
css: this.isArabic
|
|
146
|
+
? this.baseHref + '/assets/styles/ar-mypdftron.css'
|
|
147
|
+
: this.baseHref + '/assets/styles/en-mypdftron.css',
|
|
133
148
|
annotationUser: this.nuxeo.nuxeoClient.user.properties.firstName + ' ' + this.nuxeo.nuxeoClient.user.properties.lastName,
|
|
134
|
-
disabledElements: ['downloadButton', 'printButton']
|
|
149
|
+
disabledElements: ['downloadButton', 'printButton']
|
|
135
150
|
}, this.viewerRef.nativeElement).then((instance) => __awaiter(this, void 0, void 0, function* () {
|
|
136
|
-
this
|
|
137
|
-
this.pdftronService.instance = this.webViewerInstance = instance;
|
|
138
|
-
if (this.correspondance.facets.indexOf('ctocr') > -1) {
|
|
139
|
-
this.fileWithOcr = true;
|
|
140
|
-
this.pages = JSON.parse(this.correspondance.properties['ctocr:recognizedJson']);
|
|
141
|
-
// override search funtion to use our search in ocr not defult search
|
|
142
|
-
instance.overrideSearchExecution(this.searchFn);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
// if no ocr then add search lisner to lisne to internal search and catch results
|
|
146
|
-
this.addSearchListner();
|
|
147
|
-
}
|
|
148
|
-
this.addPrintButton();
|
|
149
|
-
this.addDownloadButton();
|
|
150
|
-
this.importSignature();
|
|
151
|
-
this.exportingSignature();
|
|
152
|
-
this.deleteAnnotation();
|
|
153
|
-
this.exportingSavedSignature();
|
|
154
|
-
if (this.useOutsideAnotations) {
|
|
155
|
-
this.importAnotationsFromOutside();
|
|
156
|
-
this.exportAnotationsToOutside();
|
|
157
|
-
}
|
|
158
|
-
this.webViewerInstance.docViewer.setSearchHighlightColors({
|
|
159
|
-
// setSearchHighlightColors accepts both Annotations.Color objects or 'rgba' strings
|
|
160
|
-
searchResult: new this.webViewerInstance.Annotations.Color(250, 206, 0, 0.50196),
|
|
161
|
-
activeSearchResult: new this.webViewerInstance.Annotations.Color(250, 206, 0, 0.50196),
|
|
162
|
-
});
|
|
163
|
-
if (this.recivedSearchStringsArray.length !== 0) {
|
|
164
|
-
this.automaticSearch(this.recivedSearchStringsArray);
|
|
165
|
-
}
|
|
166
|
-
this.loadDocument();
|
|
151
|
+
__classPrivateFieldGet(this, _PdftronComponent_instances, "m", _PdftronComponent_afterLoadWebViewer).call(this, instance);
|
|
167
152
|
}));
|
|
168
153
|
}
|
|
169
154
|
});
|
|
@@ -184,7 +169,7 @@ export class PdftronComponent {
|
|
|
184
169
|
this.webViewerInstance.annotManager.on('annotationChanged', (annotations, action, { imported }) => {
|
|
185
170
|
if (imported)
|
|
186
171
|
return;
|
|
187
|
-
this.webViewerInstance.annotManager.exportAnnotations().then(exctractedAnotations => {
|
|
172
|
+
this.webViewerInstance.annotManager.exportAnnotations().then((exctractedAnotations) => {
|
|
188
173
|
this.onAddingAnotation.emit(exctractedAnotations);
|
|
189
174
|
});
|
|
190
175
|
// if tracking signature location is enable then emit signature outside with every changes in it
|
|
@@ -213,7 +198,6 @@ export class PdftronComponent {
|
|
|
213
198
|
}
|
|
214
199
|
this.firstSignatureLoad = false;
|
|
215
200
|
});
|
|
216
|
-
;
|
|
217
201
|
}
|
|
218
202
|
exportingSignature() {
|
|
219
203
|
const documentViewer = this.webViewerInstance.docViewer;
|
|
@@ -225,11 +209,10 @@ export class PdftronComponent {
|
|
|
225
209
|
console.log(annotation);
|
|
226
210
|
}
|
|
227
211
|
});
|
|
228
|
-
;
|
|
229
212
|
}
|
|
230
213
|
extractAnotation(annotation, documentViewer) {
|
|
231
214
|
if (annotation['image']) {
|
|
232
|
-
// convert base64 signature into file and emit it to out side
|
|
215
|
+
// convert base64 signature into file and emit it to out side
|
|
233
216
|
let base64Img = annotation['image']['currentSrc'];
|
|
234
217
|
var arr = base64Img.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
|
|
235
218
|
while (n--) {
|
|
@@ -276,7 +259,10 @@ export class PdftronComponent {
|
|
|
276
259
|
});
|
|
277
260
|
}
|
|
278
261
|
addDownloadButton() {
|
|
279
|
-
if (this.allowDownloadSecretFile ||
|
|
262
|
+
if (this.allowDownloadSecretFile ||
|
|
263
|
+
(!this.allowDownloadSecretFile &&
|
|
264
|
+
this.correspondance.properties[this.secrecyProperty] &&
|
|
265
|
+
this.correspondance.properties[this.secrecyProperty] === 'Normal')) {
|
|
280
266
|
this.webViewerInstance.setHeaderItems((header) => {
|
|
281
267
|
header.push({
|
|
282
268
|
type: 'actionButton',
|
|
@@ -309,29 +295,30 @@ export class PdftronComponent {
|
|
|
309
295
|
// this.events.next('download');
|
|
310
296
|
// });
|
|
311
297
|
// }
|
|
312
|
-
})
|
|
298
|
+
})
|
|
313
299
|
});
|
|
314
300
|
});
|
|
315
301
|
}
|
|
316
302
|
}
|
|
317
303
|
addPrintButton() {
|
|
318
|
-
if (this.allowPrintSecretFile ||
|
|
304
|
+
if (this.allowPrintSecretFile ||
|
|
305
|
+
(!this.allowPrintSecretFile &&
|
|
306
|
+
this.correspondance.properties[this.secrecyProperty] &&
|
|
307
|
+
this.correspondance.properties[this.secrecyProperty] === 'Normal')) {
|
|
319
308
|
this.webViewerInstance.setHeaderItems((header) => {
|
|
320
309
|
header.push({
|
|
321
310
|
type: 'actionButton',
|
|
322
311
|
img: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs><style>.cls-1{fill:#abb0c4;}</style></defs><title>icon - header - print - line</title><path class="cls-1" d="M20,6H18V2H6V6H4A2,2,0,0,0,2,8v9a2,2,0,0,0,2,2H6v3H18V19h2a2,2,0,0,0,2-2V8A2,2,0,0,0,20,6ZM8,4h8V6H8Zm8,16H8V16h8Zm4-3H18V14H6v3H4V8H20Zm-4-7h2v2H16Zm-3,0h2v2H13Z"></path></svg>',
|
|
323
|
-
title: this.isArabic ?
|
|
312
|
+
title: this.isArabic ? 'طباعة' : 'Print',
|
|
324
313
|
onClick: () => {
|
|
325
314
|
this.pdftronService.instance.print();
|
|
326
315
|
this.events.next('print');
|
|
327
|
-
}
|
|
316
|
+
}
|
|
328
317
|
});
|
|
329
318
|
});
|
|
330
319
|
}
|
|
331
320
|
else {
|
|
332
|
-
this.webViewerInstance.disableElements([
|
|
333
|
-
'printModal',
|
|
334
|
-
]);
|
|
321
|
+
this.webViewerInstance.disableElements(['printModal']);
|
|
335
322
|
}
|
|
336
323
|
}
|
|
337
324
|
addWatermark() {
|
|
@@ -347,16 +334,7 @@ export class PdftronComponent {
|
|
|
347
334
|
return;
|
|
348
335
|
}
|
|
349
336
|
const { docViewer, annotManager, Annotations } = this.webViewerInstance;
|
|
350
|
-
docViewer.on('documentLoaded', (
|
|
351
|
-
let fitMode = this.webViewerInstance.FitMode.FitWidth;
|
|
352
|
-
if (this.fitMode === 'FitPage') {
|
|
353
|
-
fitMode = this.webViewerInstance.FitMode.FitPage;
|
|
354
|
-
}
|
|
355
|
-
else if (this.fitMode === 'Zoom') {
|
|
356
|
-
fitMode = this.webViewerInstance.FitMode.Zoom;
|
|
357
|
-
}
|
|
358
|
-
this.webViewerInstance.setFitMode(fitMode);
|
|
359
|
-
});
|
|
337
|
+
docViewer.on('documentLoaded', __classPrivateFieldGet(this, _PdftronComponent_docLoaded, "f"));
|
|
360
338
|
if (!this.editMode) {
|
|
361
339
|
this.webViewerInstance.annotManager.setReadOnly(true);
|
|
362
340
|
// instance.enableTools([]);
|
|
@@ -365,24 +343,25 @@ export class PdftronComponent {
|
|
|
365
343
|
this.webViewerInstance.loadDocument(this.fileURL, {
|
|
366
344
|
xodstreaming: true,
|
|
367
345
|
customHeaders: {
|
|
368
|
-
Authorization: this.authHeader
|
|
369
|
-
}
|
|
346
|
+
Authorization: this.authHeader
|
|
347
|
+
}
|
|
370
348
|
// withCredentials: true,
|
|
371
349
|
});
|
|
372
350
|
}
|
|
373
351
|
else {
|
|
374
352
|
this.webViewerInstance.loadDocument(new Blob([new Uint8Array(this.fileData)], { type: this.DOCUMENT_TYPE }), {
|
|
375
|
-
filename: this.fileTitle
|
|
353
|
+
filename: this.fileTitle
|
|
376
354
|
});
|
|
377
355
|
}
|
|
378
356
|
this.isFetching = false;
|
|
379
357
|
// if not negelcting adding water mark then check conditions for adding it
|
|
380
358
|
if (!this.negelectAddingWaterMark) {
|
|
381
359
|
if (this.correspondance !== undefined) {
|
|
382
|
-
// if we need to check on secrecy level for adding water mark or not
|
|
360
|
+
// if we need to check on secrecy level for adding water mark or not
|
|
383
361
|
if (this.environment.enableViewerWaterMark && this.secrecyProperty) {
|
|
384
362
|
// check for secrecy level befor adding watermark
|
|
385
|
-
if (this.correspondance.properties[this.secrecyProperty] &&
|
|
363
|
+
if (this.correspondance.properties[this.secrecyProperty] &&
|
|
364
|
+
this.correspondance.properties[this.secrecyProperty] !== 'Normal') {
|
|
386
365
|
this.addWatermark();
|
|
387
366
|
}
|
|
388
367
|
}
|
|
@@ -399,7 +378,7 @@ export class PdftronComponent {
|
|
|
399
378
|
const xfdfString = yield this.webViewerInstance.annotManager.exportAnnotations();
|
|
400
379
|
const data = yield doc.getFileData({
|
|
401
380
|
// saves the document with annotations in it
|
|
402
|
-
xfdfString
|
|
381
|
+
xfdfString
|
|
403
382
|
});
|
|
404
383
|
const arr = new Uint8Array(data);
|
|
405
384
|
const blob = new Blob([arr], { type: this.DOCUMENT_TYPE });
|
|
@@ -413,7 +392,7 @@ export class PdftronComponent {
|
|
|
413
392
|
'toolbarGroup-Shapes',
|
|
414
393
|
'toolbarGroup-Edit',
|
|
415
394
|
'toolbarGroup-Insert',
|
|
416
|
-
'toolbarGroup-Annotate'
|
|
395
|
+
'toolbarGroup-Annotate'
|
|
417
396
|
]);
|
|
418
397
|
this.webViewerInstance.annotManager.setReadOnly(true);
|
|
419
398
|
}
|
|
@@ -424,20 +403,14 @@ export class PdftronComponent {
|
|
|
424
403
|
'toolbarGroup-Shapes',
|
|
425
404
|
'toolbarGroup-Edit',
|
|
426
405
|
'toolbarGroup-Insert',
|
|
427
|
-
'toolbarGroup-Annotate'
|
|
406
|
+
'toolbarGroup-Annotate'
|
|
428
407
|
]);
|
|
429
408
|
let group;
|
|
430
409
|
if (this.editingType === 'signDoc') {
|
|
431
|
-
this.webViewerInstance.enableElements([
|
|
432
|
-
'toolbarGroup-Insert'
|
|
433
|
-
]);
|
|
410
|
+
this.webViewerInstance.enableElements(['toolbarGroup-Insert']);
|
|
434
411
|
}
|
|
435
412
|
else if (this.editingType === 'annotate') {
|
|
436
|
-
this.webViewerInstance.enableElements([
|
|
437
|
-
'toolbarGroup-Shapes',
|
|
438
|
-
'toolbarGroup-Edit',
|
|
439
|
-
'toolbarGroup-Annotate',
|
|
440
|
-
]);
|
|
413
|
+
this.webViewerInstance.enableElements(['toolbarGroup-Shapes', 'toolbarGroup-Edit', 'toolbarGroup-Annotate']);
|
|
441
414
|
}
|
|
442
415
|
}
|
|
443
416
|
else {
|
|
@@ -445,7 +418,7 @@ export class PdftronComponent {
|
|
|
445
418
|
'toolbarGroup-Shapes',
|
|
446
419
|
'toolbarGroup-Edit',
|
|
447
420
|
'toolbarGroup-Insert',
|
|
448
|
-
'toolbarGroup-Annotate'
|
|
421
|
+
'toolbarGroup-Annotate'
|
|
449
422
|
]);
|
|
450
423
|
}
|
|
451
424
|
this.webViewerInstance.annotManager.setReadOnly(false);
|
|
@@ -457,11 +430,9 @@ export class PdftronComponent {
|
|
|
457
430
|
this.toggleEdit();
|
|
458
431
|
if (changes.urlFileContent &&
|
|
459
432
|
changes.urlFileContent.previousValue &&
|
|
460
|
-
changes.urlFileContent.previousValue !==
|
|
461
|
-
changes.urlFileContent.currentValue) {
|
|
433
|
+
changes.urlFileContent.previousValue !== changes.urlFileContent.currentValue) {
|
|
462
434
|
this.ngOnDestroy();
|
|
463
435
|
this.ngOnInit();
|
|
464
|
-
this.ngAfterViewInit();
|
|
465
436
|
}
|
|
466
437
|
}
|
|
467
438
|
}
|
|
@@ -477,7 +448,7 @@ export class PdftronComponent {
|
|
|
477
448
|
const searchListener = (searchPattern, options, results) => {
|
|
478
449
|
this.mySearchStringResults = [];
|
|
479
450
|
if (this.savedAnotations.length > 0) {
|
|
480
|
-
this.savedAnotations.map(annotation => {
|
|
451
|
+
this.savedAnotations.map((annotation) => {
|
|
481
452
|
annotation.Hidden = true;
|
|
482
453
|
// Always redraw annotation if rendering was updated
|
|
483
454
|
annotManager.redrawAnnotation(annotation);
|
|
@@ -486,9 +457,9 @@ export class PdftronComponent {
|
|
|
486
457
|
// don't do any search until there is a search pattern
|
|
487
458
|
if (searchPattern.trim().length > 0) {
|
|
488
459
|
// add redaction annotation for each search result
|
|
489
|
-
this.newAnnotations = results.map(result => {
|
|
460
|
+
this.newAnnotations = results.map((result) => {
|
|
490
461
|
const annotation = new Annotations.TextHighlightAnnotation();
|
|
491
|
-
annotation.Quads = result.quads.map(quad => quad.getPoints());
|
|
462
|
+
annotation.Quads = result.quads.map((quad) => quad.getPoints());
|
|
492
463
|
annotation.PageNumber = result.pageNum;
|
|
493
464
|
annotation.StrokeColor = new Annotations.Color(250, 206, 0, 0.50196);
|
|
494
465
|
annotation.Author = this.webViewerInstance.annotManager.getCurrentUser();
|
|
@@ -506,31 +477,33 @@ export class PdftronComponent {
|
|
|
506
477
|
this.webViewerInstance.addSearchListener(searchListener);
|
|
507
478
|
});
|
|
508
479
|
}
|
|
509
|
-
// perform automatic search when intering the page
|
|
480
|
+
// perform automatic search when intering the page
|
|
510
481
|
automaticSearch(searchTextArray) {
|
|
511
482
|
const { annotManager, docViewer, Annotations } = this.webViewerInstance;
|
|
512
483
|
let searchOptions;
|
|
513
484
|
this.webViewerInstance.openElements(['searchPanel']);
|
|
514
485
|
docViewer.on('documentLoaded', () => {
|
|
515
|
-
const mode = this.webViewerInstance.CoreControls.Search.Mode.PAGE_STOP |
|
|
486
|
+
const mode = this.webViewerInstance.CoreControls.Search.Mode.PAGE_STOP |
|
|
487
|
+
this.webViewerInstance.CoreControls.Search.Mode.HIGHLIGHT |
|
|
488
|
+
this.webViewerInstance.CoreControls.Search.Mode.AMBIENT_STRING;
|
|
516
489
|
this.mySearchStringResults = []; // empty my search result when starting new search
|
|
517
490
|
if (this.fileWithOcr) {
|
|
518
491
|
// add redaction annotation for each search result
|
|
519
492
|
const annotation = new Annotations.TextHighlightAnnotation();
|
|
520
|
-
searchTextArray.map(searchText => {
|
|
493
|
+
searchTextArray.map((searchText) => {
|
|
521
494
|
let mySearch = searchText.split(' ');
|
|
522
495
|
if (mySearch.length > 1) {
|
|
523
496
|
// then i am searching with more than one word
|
|
524
497
|
this.pages.pages.forEach((page, index) => {
|
|
525
498
|
this.pageHeight = page.page_height;
|
|
526
499
|
this.pageWidth = page.page_width;
|
|
527
|
-
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(
|
|
528
|
-
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(
|
|
529
|
-
page.zones.forEach(zone => {
|
|
530
|
-
zone.paragraphs.forEach(paragraph => {
|
|
531
|
-
paragraph.lines.forEach(line => {
|
|
500
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(index + 1);
|
|
501
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(index + 1);
|
|
502
|
+
page.zones.forEach((zone) => {
|
|
503
|
+
zone.paragraphs.forEach((paragraph) => {
|
|
504
|
+
paragraph.lines.forEach((line) => {
|
|
532
505
|
if (line.text.includes(searchText)) {
|
|
533
|
-
this.SearchForWordInLine(mySearch, line,
|
|
506
|
+
this.SearchForWordInLine(mySearch, line, index + 1, page);
|
|
534
507
|
}
|
|
535
508
|
});
|
|
536
509
|
});
|
|
@@ -538,7 +511,7 @@ export class PdftronComponent {
|
|
|
538
511
|
});
|
|
539
512
|
}
|
|
540
513
|
else {
|
|
541
|
-
// then i am searching with only one word
|
|
514
|
+
// then i am searching with only one word
|
|
542
515
|
this.searchForWordInAllPages(searchText);
|
|
543
516
|
}
|
|
544
517
|
});
|
|
@@ -550,11 +523,11 @@ export class PdftronComponent {
|
|
|
550
523
|
// If true, a search of the entire document will be performed. Otherwise, a single search will be performed.
|
|
551
524
|
fullSearch: true,
|
|
552
525
|
// The callback function that is called when the search returns a result.
|
|
553
|
-
onResult: result => {
|
|
526
|
+
onResult: (result) => {
|
|
554
527
|
// with 'PAGE_STOP' mode, the callback is invoked after each page has been searched.
|
|
555
528
|
if (result.resultCode === this.webViewerInstance.CoreControls.Search.ResultCode.FOUND) {
|
|
556
529
|
const annotation = new Annotations.TextHighlightAnnotation();
|
|
557
|
-
annotation.Quads = result.quads.map(quad => quad.getPoints());
|
|
530
|
+
annotation.Quads = result.quads.map((quad) => quad.getPoints());
|
|
558
531
|
console.log(annotation.Quads);
|
|
559
532
|
annotation.PageNumber = result.pageNum;
|
|
560
533
|
annotation.StrokeColor = new Annotations.Color(250, 206, 0, 0.50196);
|
|
@@ -566,37 +539,39 @@ export class PdftronComponent {
|
|
|
566
539
|
}
|
|
567
540
|
}
|
|
568
541
|
};
|
|
569
|
-
searchTextArray.map(searchedText => {
|
|
542
|
+
searchTextArray.map((searchedText) => {
|
|
570
543
|
docViewer.textSearchInit(searchedText, mode, searchOptions);
|
|
571
544
|
});
|
|
572
545
|
}
|
|
573
546
|
});
|
|
574
547
|
}
|
|
575
|
-
// search for single word in all pages
|
|
548
|
+
// search for single word in all pages
|
|
576
549
|
searchForWordInAllPages(searchedWord) {
|
|
577
550
|
this.pages.pages.forEach((page, index) => {
|
|
578
551
|
this.pageHeight = page.page_height;
|
|
579
552
|
this.pageWidth = page.page_width;
|
|
580
|
-
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(
|
|
581
|
-
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(
|
|
582
|
-
const x =
|
|
583
|
-
const y =
|
|
584
|
-
page.zones.forEach(zone => {
|
|
585
|
-
zone.paragraphs.forEach(paragraph => {
|
|
586
|
-
paragraph.lines.forEach(line => {
|
|
587
|
-
line.words.forEach(word => {
|
|
553
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(index + 1);
|
|
554
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(index + 1);
|
|
555
|
+
const x = this.pageWidth / this.standardWidth; // width ratio
|
|
556
|
+
const y = this.pageHeight / this.standardHeight; // height ratio
|
|
557
|
+
page.zones.forEach((zone) => {
|
|
558
|
+
zone.paragraphs.forEach((paragraph) => {
|
|
559
|
+
paragraph.lines.forEach((line) => {
|
|
560
|
+
line.words.forEach((word) => {
|
|
588
561
|
if (word.text.includes(searchedWord)) {
|
|
589
562
|
// annotation.PageNumber = index+1;
|
|
590
|
-
let quads = [
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
563
|
+
let quads = [
|
|
564
|
+
{
|
|
565
|
+
x1: word.coordinates.upper_left.x / x,
|
|
566
|
+
x2: word.coordinates.bottom_right.x / x,
|
|
567
|
+
x3: word.coordinates.bottom_right.x / x,
|
|
568
|
+
x4: word.coordinates.upper_left.x / x,
|
|
569
|
+
y1: word.coordinates.upper_left.y / y,
|
|
570
|
+
y2: word.coordinates.upper_left.y / y,
|
|
571
|
+
y3: word.coordinates.bottom_right.y / y,
|
|
572
|
+
y4: word.coordinates.bottom_right.y / y
|
|
573
|
+
}
|
|
574
|
+
];
|
|
600
575
|
this.higlightText(quads, index + 1);
|
|
601
576
|
this.constructSearchResult(searchedWord, index + 1, quads, line.text);
|
|
602
577
|
}
|
|
@@ -606,14 +581,14 @@ export class PdftronComponent {
|
|
|
606
581
|
});
|
|
607
582
|
});
|
|
608
583
|
}
|
|
609
|
-
// search for word in single line
|
|
584
|
+
// search for word in single line
|
|
610
585
|
SearchForWordInLine(listOfSearchedWords, line, pagenumber, page) {
|
|
611
586
|
this.pageHeight = page.page_height;
|
|
612
587
|
this.pageWidth = page.page_width;
|
|
613
|
-
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(
|
|
614
|
-
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(
|
|
615
|
-
const x =
|
|
616
|
-
const y =
|
|
588
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight(pagenumber);
|
|
589
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth(pagenumber);
|
|
590
|
+
const x = this.pageWidth / this.standardWidth; // width ratio
|
|
591
|
+
const y = this.pageHeight / this.standardHeight; // height ratio
|
|
617
592
|
// find only words related to my search form the line
|
|
618
593
|
let myFoundedResults = [];
|
|
619
594
|
let correctResults = [];
|
|
@@ -624,27 +599,29 @@ export class PdftronComponent {
|
|
|
624
599
|
});
|
|
625
600
|
// find only words exist in my search sentence and not single and repeated word
|
|
626
601
|
myFoundedResults.map((result, index) => {
|
|
627
|
-
if (
|
|
628
|
-
(myFoundedResults[index
|
|
602
|
+
if (myFoundedResults[index]['wordIndex'] - 1 ===
|
|
603
|
+
(myFoundedResults[index - 1] && myFoundedResults[index - 1]['wordIndex']) ||
|
|
604
|
+
(myFoundedResults[index + 1] &&
|
|
605
|
+
myFoundedResults[index + 1]['wordIndex'] - 1 === myFoundedResults[index]['wordIndex'])) {
|
|
629
606
|
correctResults.push(result);
|
|
630
607
|
}
|
|
631
608
|
});
|
|
632
609
|
// highliht these words after eleminating all repeated and related words
|
|
633
610
|
// must be for loop sp i can control the step in each loop
|
|
634
611
|
let quads = [];
|
|
635
|
-
for (let i = 0; i < correctResults.length;
|
|
612
|
+
for (let i = 0; i < correctResults.length; i = i + listOfSearchedWords.length) {
|
|
636
613
|
quads.push({
|
|
637
|
-
x1:
|
|
638
|
-
x2:
|
|
639
|
-
x3:
|
|
640
|
-
x4:
|
|
641
|
-
y1:
|
|
642
|
-
y2:
|
|
643
|
-
y3:
|
|
644
|
-
y4:
|
|
614
|
+
x1: correctResults[i + listOfSearchedWords.length - 1].word.coordinates.upper_left.x / x,
|
|
615
|
+
x2: correctResults[i].word.coordinates.bottom_right.x / x,
|
|
616
|
+
x3: correctResults[i].word.coordinates.bottom_right.x / x,
|
|
617
|
+
x4: correctResults[i + listOfSearchedWords.length - 1].word.coordinates.upper_left.x / x,
|
|
618
|
+
y1: correctResults[i].word.coordinates.upper_left.y / y,
|
|
619
|
+
y2: correctResults[i + listOfSearchedWords.length - 1].word.coordinates.upper_left.y / y,
|
|
620
|
+
y3: correctResults[i + listOfSearchedWords.length - 1].word.coordinates.bottom_right.y / y,
|
|
621
|
+
y4: correctResults[i].word.coordinates.bottom_right.y / y
|
|
645
622
|
});
|
|
646
623
|
this.higlightText(quads, pagenumber);
|
|
647
|
-
this.constructSearchResult(listOfSearchedWords.join(
|
|
624
|
+
this.constructSearchResult(listOfSearchedWords.join(' '), pagenumber, quads, line.text);
|
|
648
625
|
}
|
|
649
626
|
}
|
|
650
627
|
constructSearchResult(searchedText, pageNum, quads, line) {
|
|
@@ -657,7 +634,8 @@ export class PdftronComponent {
|
|
|
657
634
|
resultStrEnd: mySeearchedTextEndIndex,
|
|
658
635
|
pageNum: pageNum,
|
|
659
636
|
resultCode: 2,
|
|
660
|
-
quads: [
|
|
637
|
+
quads: [
|
|
638
|
+
{
|
|
661
639
|
ea: quads[0]['y3'],
|
|
662
640
|
fa: quads[0]['y4'],
|
|
663
641
|
ha: quads[0]['x1'],
|
|
@@ -666,7 +644,8 @@ export class PdftronComponent {
|
|
|
666
644
|
qB: quads[0]['x4'],
|
|
667
645
|
rB: quads[0]['y1'],
|
|
668
646
|
sB: quads[0]['y2']
|
|
669
|
-
}
|
|
647
|
+
}
|
|
648
|
+
]
|
|
670
649
|
};
|
|
671
650
|
this.mySearchStringResults.push(searchResultObject);
|
|
672
651
|
console.log(this.mySearchStringResults);
|
|
@@ -690,34 +669,97 @@ export class PdftronComponent {
|
|
|
690
669
|
}
|
|
691
670
|
// ------------------------------------------------------------------------ ------------------------------------------
|
|
692
671
|
ngOnDestroy() {
|
|
693
|
-
if (this.
|
|
694
|
-
this
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
672
|
+
if (this.silentPdfTronService.isEnabled) {
|
|
673
|
+
__classPrivateFieldGet(this, _PdftronComponent_instances, "m", _PdftronComponent_reset).call(this);
|
|
674
|
+
}
|
|
675
|
+
else {
|
|
676
|
+
if (this.webViewerInstance) {
|
|
677
|
+
this.webViewerInstance.closeDocument().then(() => {
|
|
678
|
+
console.log('document closed!');
|
|
679
|
+
});
|
|
680
|
+
this.pdftronService.instance = this.webViewerInstance = null;
|
|
681
|
+
}
|
|
682
|
+
this.transelationSubscrition ? this.transelationSubscrition.unsubscribe() : null;
|
|
698
683
|
}
|
|
699
|
-
this.transelationSubscrition ? this.transelationSubscrition.unsubscribe() : null;
|
|
700
684
|
}
|
|
701
685
|
}
|
|
702
|
-
|
|
703
|
-
|
|
686
|
+
_PdftronComponent_docLoaded = new WeakMap(), _PdftronComponent_instances = new WeakSet(), _PdftronComponent_updateSilentPdfTron = function _PdftronComponent_updateSilentPdfTron() {
|
|
687
|
+
const rect = this.viewerRef.nativeElement.getBoundingClientRect();
|
|
688
|
+
Object.assign(this.silentPdfTron.style, {
|
|
689
|
+
position: 'absolute',
|
|
690
|
+
top: `${rect.top}px`,
|
|
691
|
+
left: `${rect.left}px`,
|
|
692
|
+
width: `${rect.width}px`,
|
|
693
|
+
height: `${rect.height}px`,
|
|
694
|
+
zIndex: '9999',
|
|
695
|
+
display: 'block'
|
|
696
|
+
});
|
|
697
|
+
}, _PdftronComponent_afterLoadWebViewer = function _PdftronComponent_afterLoadWebViewer(instance) {
|
|
698
|
+
this.isArabic ? instance.setLanguage('ar') : instance.setLanguage('en');
|
|
699
|
+
this.pdftronService.instance = this.webViewerInstance = instance;
|
|
700
|
+
if (this.correspondance.facets.indexOf('ctocr') > -1) {
|
|
701
|
+
this.fileWithOcr = true;
|
|
702
|
+
this.pages = JSON.parse(this.correspondance.properties['ctocr:recognizedJson']);
|
|
703
|
+
// override search funtion to use our search in ocr not defult search
|
|
704
|
+
instance.overrideSearchExecution(this.searchFn);
|
|
705
|
+
}
|
|
706
|
+
else {
|
|
707
|
+
// if no ocr then add search lisner to lisne to internal search and catch results
|
|
708
|
+
this.addSearchListner();
|
|
709
|
+
}
|
|
710
|
+
this.addPrintButton();
|
|
711
|
+
this.addDownloadButton();
|
|
712
|
+
this.importSignature();
|
|
713
|
+
this.exportingSignature();
|
|
714
|
+
this.deleteAnnotation();
|
|
715
|
+
this.exportingSavedSignature();
|
|
716
|
+
if (this.useOutsideAnotations) {
|
|
717
|
+
this.importAnotationsFromOutside();
|
|
718
|
+
this.exportAnotationsToOutside();
|
|
719
|
+
}
|
|
720
|
+
this.webViewerInstance.docViewer.setSearchHighlightColors({
|
|
721
|
+
// setSearchHighlightColors accepts both Annotations.Color objects or 'rgba' strings
|
|
722
|
+
searchResult: new this.webViewerInstance.Annotations.Color(250, 206, 0, 0.50196),
|
|
723
|
+
activeSearchResult: new this.webViewerInstance.Annotations.Color(250, 206, 0, 0.50196)
|
|
724
|
+
});
|
|
725
|
+
if (this.recivedSearchStringsArray.length !== 0) {
|
|
726
|
+
this.automaticSearch(this.recivedSearchStringsArray);
|
|
727
|
+
}
|
|
728
|
+
this.loadDocument();
|
|
729
|
+
}, _PdftronComponent_reset = function _PdftronComponent_reset() {
|
|
730
|
+
var _a;
|
|
731
|
+
this.webViewerInstance.closeDocument().then(() => {
|
|
732
|
+
console.log('document closed!');
|
|
733
|
+
});
|
|
734
|
+
this.pdftronService.instance = null;
|
|
735
|
+
this.transelationSubscrition ? this.transelationSubscrition.unsubscribe() : null;
|
|
736
|
+
this.silentPdfTron.style.display = 'none';
|
|
737
|
+
(_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
738
|
+
this.webViewerInstance.setHeaderItems((header) => {
|
|
739
|
+
header.headers.default = header.headers.default.filter((q) => { var _a; return !((_a = q.img) === null || _a === void 0 ? void 0 : _a.includes('<svg')); });
|
|
740
|
+
});
|
|
741
|
+
this.webViewerInstance.docViewer.off('documentLoaded', __classPrivateFieldGet(this, _PdftronComponent_docLoaded, "f"));
|
|
742
|
+
// maybe will need to reset signature & annotations
|
|
743
|
+
};
|
|
744
|
+
PdftronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PdftronComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PdftronService }, { token: i2.NuxeoService }, { token: APP_BASE_HREF }, { token: i3.TranslationService }, { token: i4.SilentPdfTronService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component });
|
|
745
|
+
PdftronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PdftronComponent, selector: "app-pdftron", inputs: { editMode: "editMode", actionClicked: "actionClicked", fileTitle: "fileTitle", docId: "docId", DOCUMENT_TYPE: "DOCUMENT_TYPE", fileData: "fileData", fitMode: "fitMode", authHeader: "authHeader", fileURL: "fileURL", correspondance: "correspondance", secrecyProperty: "secrecyProperty", editingType: "editingType", userSignatures: "userSignatures", searchString: "searchString", trackSignature: "trackSignature", useOutsideAnotations: "useOutsideAnotations", importedAnotations: "importedAnotations", allowDownloadSecretFile: "allowDownloadSecretFile", allowPrintSecretFile: "allowPrintSecretFile", negelectAddingWaterMark: "negelectAddingWaterMark" }, outputs: { onSignatureTracking: "onSignatureTracking", onAddingAnotation: "onAddingAnotation", events: "events", SignatureEvent: "SignatureEvent" }, providers: [SecurePipe], viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["fileViewer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #fileViewer style=\"width: 100%; height: 100%;\"></div>\r\n", styles: [""] });
|
|
704
746
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PdftronComponent, decorators: [{
|
|
705
747
|
type: Component,
|
|
706
748
|
args: [{
|
|
707
749
|
selector: 'app-pdftron',
|
|
708
750
|
templateUrl: './pdftron.component.html',
|
|
709
751
|
styleUrls: ['./pdftron.component.scss'],
|
|
710
|
-
providers: [SecurePipe]
|
|
752
|
+
providers: [SecurePipe]
|
|
711
753
|
}]
|
|
712
754
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PdftronService }, { type: i2.NuxeoService }, { type: undefined, decorators: [{
|
|
713
755
|
type: Inject,
|
|
714
756
|
args: [APP_BASE_HREF]
|
|
715
|
-
}] }, { type: i3.
|
|
757
|
+
}] }, { type: i3.TranslationService }, { type: i4.SilentPdfTronService }, { type: undefined, decorators: [{
|
|
716
758
|
type: Inject,
|
|
717
759
|
args: ['environment']
|
|
718
760
|
}] }]; }, propDecorators: { viewerRef: [{
|
|
719
761
|
type: ViewChild,
|
|
720
|
-
args: ['fileViewer']
|
|
762
|
+
args: ['fileViewer', { static: true }]
|
|
721
763
|
}], editMode: [{
|
|
722
764
|
type: Input
|
|
723
765
|
}], actionClicked: [{
|
|
@@ -767,4 +809,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
767
809
|
}], SignatureEvent: [{
|
|
768
810
|
type: Output
|
|
769
811
|
}] } });
|
|
770
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sU0FBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBTXhEOzs7Ozs7Ozs7Ozs7R0FZRztBQU9ILE1BQU0sT0FBTyxnQkFBZ0I7SUFvRDNCLFlBQ1MsR0FBc0IsRUFDckIsY0FBOEIsRUFDOUIsS0FBbUIsRUFDSSxRQUFnQixFQUN2QyxVQUFzQixFQUN0QixrQkFBc0MsRUFDdEMsT0FBNEIsRUFDTCxXQUFXO1FBUG5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ0ksYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDTCxnQkFBVyxHQUFYLFdB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aWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBXZWJWaWV3ZXIsIHsgQ29yZUNvbnRyb2xzIH0gZnJvbSAnQHBkZnRyb24vd2Vidmlld2VyJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGRmdHJvblNlcnZpY2UgfSBmcm9tICcuL3BkZnRyb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFQUF9CQVNFX0hSRUYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTZWN1cmVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvc2VjdXJlLnBpcGUnO1xyXG5pbXBvcnQgeyBUaHJvd1N0bXQgfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEEgcmV1c2FibGUgZmlsZSB2aWV3ZXIgYmFzZWQgb24gUERGVHJvbiBMaWJyYXJ5XHJcbiAqIEB0aXRsZVxyXG4gKiBQREZUcm9uIFZpZXdlclxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8YXBwLXBkZnRyb25cclxuICogICBbZmlsZURhdGFdPVwiZmlsZURhdGFcIlxyXG4gKiAgIFtlZGl0TW9kZV09XCJmYWxzZVwiXHJcbiAqICAgW2RvY0lkXT1cImZpbGVJZFwiXHJcbiAqICAgW2ZpbGVUaXRsZV09XCJmaWxlLnRpdGxlXCJcclxuICogPlxyXG4gKiA8L2FwcC1wZGZ0cm9uPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcGRmdHJvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BkZnRyb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BkZnRyb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtTZWN1cmVQaXBlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBkZnRyb25Db21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVWaWV3ZXInKSB2aWV3ZXJSZWY6IEVsZW1lbnRSZWY7XHJcbiAgd2ViVmlld2VySW5zdGFuY2U7XHJcbiAgLyoqIERpc2FibGUvRW5hYmxlIEFubm90YXRpb24gKi9cclxuICBASW5wdXQoKVxyXG4gIGVkaXRNb2RlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjdGlvbkNsaWNrZWQgPSBmYWxzZTsgLy8gdXNlZCB0byBrbm93IGlmIHRoZXJlIGlzIGFjdGlvbiBjbGlja2VkIG91dHNpZGUgdG8gc3RhcnQgZWRpdCBtb2RlIG9yIG5vdFxyXG4gIGlzRG9jdW1lbnRMb2FkaW5nOiBib29sZWFuO1xyXG4gIGlzRmV0Y2hpbmc6IGJvb2xlYW47XHJcbiAgLyoqIERvY3VtZW50IHRpdGxlICovXHJcbiAgQElucHV0KClcclxuICBmaWxlVGl0bGU6IHN0cmluZztcclxuICAvKiogRG9jdW1lbnQgSUQgKi9cclxuICBASW5wdXQoKVxyXG4gIGRvY0lkOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBET0NVTUVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL3BkZic7XHJcbiAgQElucHV0KClcclxuICBmaWxlRGF0YTtcclxuICBASW5wdXQoKVxyXG4gIGZpdE1vZGU6ICdGaXRXaWR0aCcgfCAnRml0UGFnZScgfCAnWm9vbScgPSAnRml0V2lkdGgnO1xyXG4gIEBJbnB1dCgpXHJcbiAgYXV0aEhlYWRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgZmlsZVVSTDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgY29ycmVzcG9uZGFuY2U7XHJcblxyXG4gIEBJbnB1dCgpIHNlY3JlY3lQcm9wZXJ0eTsgLy8gdXNlZCB0byBhZGQgd2F0ZXJtYXJrIGFjb3JkaW5nIGNlcnRhaW4gc2VjcmVjeSBsZXZlbFxyXG4gIEBJbnB1dCgpIGVkaXRpbmdUeXBlO1xyXG4gIEBJbnB1dCgpIHVzZXJTaWduYXR1cmVzO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFN0cmluZyA9ICcnOyAvLyBzdHJpbmcgdG8gc2VhcmNoIGZvciBpdCBpbiB0aGUgZG9jdW1lbnRcclxuXHJcbiAgQElucHV0KCkgdHJhY2tTaWduYXR1cmUgPSBmYWxzZTsgLy8gdG8gZW5hYmxlIHRyYWNraW5nIHNpZ25hdHVyZSBwb3NpdGlvbiBhbmQgZW1pdCBpdCBhZnRlciBldmVyeSBjaGFuZ2UgaXQgc2lnbmF0dXJlXHJcbiAgQE91dHB1dCgpIG9uU2lnbmF0dXJlVHJhY2tpbmcgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGV2ZW50IHRvIGVtaXQgc2lnbmF0dXJlIGNoYW5nZXNcclxuXHJcbiAgQElucHV0KCkgdXNlT3V0c2lkZUFub3RhdGlvbnMgPSBmYWxzZTsgLy8gZmxhZ2UgdG8gaW5kaWNhdCBpZiB1c2luZyBvdXQgc2lkZSBhbm90YXRpb25zIG9yIG5vdFxyXG4gIEBJbnB1dCgpIGltcG9ydGVkQW5vdGF0aW9uczsgLy8gaW1wb3J0ZWQgYW5vdGF0aW9ucyBmcm9tIG91dHNpZGVcclxuICBASW5wdXQoKSBhbGxvd0Rvd25sb2FkU2VjcmV0RmlsZSA9IHRydWU7IC8vIGFsbG93IG9yIHByZXZlbnQgZG93bmxvYWQgc2NyZWN0IGZpbGVzXHJcbiAgQElucHV0KCkgYWxsb3dQcmludFNlY3JldEZpbGUgPSB0cnVlOyAvLyBhbGxvdyBvciBwcmV2ZW50IHByaW50IHNjcmVjdCBmaWxlc1xyXG4gIEBJbnB1dCgpIG5lZ2VsZWN0QWRkaW5nV2F0ZXJNYXJrID0gZmFsc2U7IC8vIGRvbid0IGFkZCB3YXRlcm1hcmsgaGVyZSB3aGF0ZXZlciBlYXMgdGhlIGNvbmRpdGlvbnMgKHdlIG1heSBhZGQgaXQgZnJvbSBvdXRzaWRlIG9yIG5vdCBhZGQgaXQgYXQgYWxsKVxyXG5cclxuICBAT3V0cHV0KCkgb25BZGRpbmdBbm90YXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHVzZWQgdG8gZXhwb3J0IGFsbCBhbm90YXRpb25zIHRvIG91dHNpZGVcclxuICBAT3V0cHV0KClcclxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIFNpZ25hdHVyZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyB1c2VkIHRvIGV4cG9ydCBzaWduYXR1cmUgdG8gb3V0c2lkZVxyXG4gIGZpcnN0VGltZUxvYWQgPSB0cnVlOyAvL2ZsYWdlIHRvIGNvbnRyb2wgaW1wb3J0aW5nIHNpZ25hdHVyZXMgaW4gdGhlIGZpcnN0IHRpbWUgbG9hZCBvbmx5XHJcbiAgZmlyc3RTaWduYXR1cmVMb2FkID0gdHJ1ZTsgLy8gZmxhZ2UgdG8gcGFzcyBmaXJzdCBsb2FkIG9mIGltcG9ydGVkIHNpZ25hdHVyZXMgd2l0aG91dCBlbWl0dGluZyB0aGUgZXZlbnQgXHJcbiAgbmV3U2lnbkNyZWF0aW9uID0gZmFsc2U7IC8vIGZsYWdlIHRvIGluZGljYXRlIHNpZ25hdHVyZSBjcmVhdGlvbiBpcyBjcmVhdGVkIG9yIGNob29zZWQgZnJvbSBzdG9yZWQgb25lc1xyXG4gIHRyYW5zZWxhdGlvblN1YnNjcml0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgaXNBcmFiaWM7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcGRmdHJvblNlcnZpY2U6IFBkZnRyb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBudXhlbzogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgQEluamVjdChBUFBfQkFTRV9IUkVGKSBwcml2YXRlIGJhc2VIcmVmOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIHNlY3VyZVBpcGU6IFNlY3VyZVBpcGUsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdGVyOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50XHJcbiAgKSB7IH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnRyYW5zZWxhdGlvblN1YnNjcml0aW9uID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaXNBcmFiaWMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuaXNBcmFiaWMgPSByZXM7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gdGhpcy5zZWFyY2hTdHJpbmcudHJpbSgpID8gdGhpcy5zZWFyY2hTdHJpbmcuc3BsaXQoJywnKSA6IFtdO1xyXG4gICAgaWYodGhpcy5maWxlVGl0bGUpe1xyXG4gICAgICBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5wcHQnKSkge1xyXG4gICAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5wcHR4JykpIHtcclxuICAgICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPVxyXG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZVRpdGxlLmVuZHNXaXRoKCcuZG9jJykpIHtcclxuICAgICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vbXN3b3JkJztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLmRvY3gnKSkge1xyXG4gICAgICAgIHRoaXMuRE9DVU1FTlRfVFlQRSA9XHJcbiAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIFdlYlZpZXdlcihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXRoOiB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvcGRmdHJvbnMnLFxyXG4gICAgICAgICAgZm9yY2VDbGllbnRTaWRlSW5pdDogdHJ1ZSxcclxuICAgICAgICAgIHN0cmVhbWluZzogdHJ1ZSxcclxuICAgICAgICAgIGxpY2Vuc2VLZXk6IHRoaXMuZW52aXJvbm1lbnQucGRmdHJvbkxpY2VuY2VLZXksXHJcbiAgICAgICAgICBjc3M6IHRoaXMuaXNBcmFiaWMgPyAodGhpcy5iYXNlSHJlZiArICcvYXNzZXRzL3N0eWxlcy9hci1teXBkZnRyb24uY3NzJykgOiAodGhpcy5iYXNlSHJlZiArICcvYXNzZXRzL3N0eWxlcy9lbi1teXBkZnRyb24uY3NzJyksXHJcbiAgICAgICAgICBhbm5vdGF0aW9uVXNlcjogdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMuZmlyc3ROYW1lICsgJyAnICsgdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMubGFzdE5hbWUsXHJcbiAgICAgICAgICBkaXNhYmxlZEVsZW1lbnRzOiBbJ2Rvd25sb2FkQnV0dG9uJywgJ3ByaW50QnV0dG9uJ10sXHJcbiAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLnZpZXdlclJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICkudGhlbihhc3luYyAoaW5zdGFuY2UpID0+IHtcclxuICAgICAgICB0aGlzLmlzQXJhYmljID8gaW5zdGFuY2Uuc2V0TGFuZ3VhZ2UoJ2FyJykgOiBpbnN0YW5jZS5zZXRMYW5ndWFnZSgnZW4nKTtcclxuICAgICAgICB0aGlzLnBkZnRyb25TZXJ2aWNlLmluc3RhbmNlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlLmZhY2V0cy5pbmRleE9mKCdjdG9jcicpID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVdpdGhPY3IgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wYWdlcyA9IEpTT04ucGFyc2UodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzWydjdG9jcjpyZWNvZ25pemVkSnNvbiddKTtcclxuICAgICAgICAgIC8vIG92ZXJyaWRlIHNlYXJjaCBmdW50aW9uIHRvIHVzZSBvdXIgc2VhcmNoIGluIG9jciBub3QgZGVmdWx0IHNlYXJjaFxyXG4gICAgICAgICAgaW5zdGFuY2Uub3ZlcnJpZGVTZWFyY2hFeGVjdXRpb24odGhpcy5zZWFyY2hGbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGlmIG5vIG9jciB0aGVuIGFkZCBzZWFyY2ggbGlzbmVyIHRvIGxpc25lIHRvIGludGVybmFsIHNlYXJjaCBhbmQgY2F0Y2ggcmVzdWx0c1xyXG4gICAgICAgICAgdGhpcy5hZGRTZWFyY2hMaXN0bmVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkUHJpbnRCdXR0b24oKTtcclxuICAgICAgICB0aGlzLmFkZERvd25sb2FkQnV0dG9uKCk7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRTaWduYXR1cmUoKTtcclxuICAgICAgICB0aGlzLmV4cG9ydGluZ1NpZ25hdHVyZSgpO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlQW5ub3RhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZXhwb3J0aW5nU2F2ZWRTaWduYXR1cmUoKTtcclxuICAgICAgICBpZiAodGhpcy51c2VPdXRzaWRlQW5vdGF0aW9ucykge1xyXG4gICAgICAgICAgdGhpcy5pbXBvcnRBbm90YXRpb25zRnJvbU91dHNpZGUoKTtcclxuICAgICAgICAgIHRoaXMuZXhwb3J0QW5vdGF0aW9uc1RvT3V0c2lkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5zZXRTZWFyY2hIaWdobGlnaHRDb2xvcnMoe1xyXG4gICAgICAgICAgLy8gc2V0U2VhcmNoSGlnaGxpZ2h0Q29sb3JzIGFjY2VwdHMgYm90aCBBbm5vdGF0aW9ucy5Db2xvciBvYmplY3RzIG9yICdyZ2JhJyBzdHJpbmdzXHJcbiAgICAgICAgICBzZWFyY2hSZXN1bHQ6IG5ldyB0aGlzLndlYlZpZXdlckluc3RhbmNlLkFubm90YXRpb25zLkNvbG9yKDI1MCwgMjA2LCAwLCAwLjUwMTk2KSxcclxuICAgICAgICAgIGFjdGl2ZVNlYXJjaFJlc3VsdDogbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLCAyMDYsIDAsIDAuNTAxOTYpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnJlY2l2ZWRTZWFyY2hTdHJpbmdzQXJyYXkubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmF1dG9tYXRpY1NlYXJjaCh0aGlzLnJlY2l2ZWRTZWFyY2hTdHJpbmdzQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWREb2N1bWVudCgpO1xyXG4gIFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGltcG9ydEFub3RhdGlvbnNGcm9tT3V0c2lkZSgpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcblxyXG4gICAgZG9jdW1lbnRWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5pbXBvcnRBbm5vdGF0aW9ucyh0aGlzLmltcG9ydGVkQW5vdGF0aW9ucylcclxuICAgIH0pXHJcbiAgICAvLyAudGhlbihhbm5vdGF0aW9ucyA9PiB7XHJcbiAgICAvLyAgIGFubm90YXRpb25zLmZvckVhY2goYW5ub3RhdGlvbiA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihhbm5vdGF0aW9uKTtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIC8vIGV4Y3RyYWN0IGFsbCBhbm90YXRpb25zIG9uIHRoZSBmaWxlIGFuZCBzZW5kIGl0IG91dCBzaWRlIHRvIGJlIHNhdmVkIGFuZCBsZWF2ZSB0aGUgZmlsZSBhcyBpdCBpcyB3aXRob3V0IGFueSBhbm90YXRpb25zIG9uIGl0XHJcbiAgZXhwb3J0QW5vdGF0aW9uc1RvT3V0c2lkZSgpIHtcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLm9uKCdhbm5vdGF0aW9uQ2hhbmdlZCcsIChhbm5vdGF0aW9ucywgYWN0aW9uLCB7IGltcG9ydGVkIH0pID0+IHtcclxuICAgICAgaWYgKGltcG9ydGVkKSByZXR1cm47XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCkudGhlbihleGN0cmFjdGVkQW5vdGF0aW9ucyA9PiB7XHJcbiAgICAgICAgdGhpcy5vbkFkZGluZ0Fub3RhdGlvbi5lbWl0KGV4Y3RyYWN0ZWRBbm90YXRpb25zKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGlmIHRyYWNraW5nIHNpZ25hdHVyZSBsb2NhdGlvbiBpcyBlbmFibGUgdGhlbiBlbWl0IHNpZ25hdHVyZSBvdXRzaWRlIHdpdGggZXZlcnkgY2hhbmdlcyBpbiBpdFxyXG4gICAgICBpZiAodGhpcy50cmFja1NpZ25hdHVyZSkge1xyXG4gICAgICAgIHRoaXMub25TaWduYXR1cmVUcmFja2luZy5lbWl0KHsgYW5vdGF0aW9uczogYW5ub3RhdGlvbnMsIGFjdGlvbjogYWN0aW9uIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0U2lnbmF0dXJlKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IHNpZ25hdHVyZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcblxyXG4gICAgZG9jdW1lbnRWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5maXJzdFRpbWVMb2FkKSB7XHJcbiAgICAgICAgc2lnbmF0dXJlVG9vbC5pbXBvcnRTaWduYXR1cmVzKFsuLi50aGlzLnVzZXJTaWduYXR1cmVzXSk7XHJcbiAgICAgICAgdGhpcy5maXJzdFRpbWVMb2FkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBleHBvcnRpbmdTYXZlZFNpZ25hdHVyZSgpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcbiAgICBjb25zdCBTaWduYXR1cmVDcmVhdGVUb29sID0gZG9jdW1lbnRWaWV3ZXIuZ2V0VG9vbCgnQW5ub3RhdGlvbkNyZWF0ZVNpZ25hdHVyZScpXHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdzaWduYXR1cmVTYXZlZCcsIChhbm5vdGF0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5maXJzdFNpZ25hdHVyZUxvYWQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc2lnbmF0dXJlIHNhdmVkIHRyaWdlcmVkJyk7XHJcbiAgICAgICAgdGhpcy5uZXdTaWduQ3JlYXRpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZmlyc3RTaWduYXR1cmVMb2FkID0gZmFsc2U7XHJcbiAgICB9KTs7XHJcbiAgfVxyXG5cclxuICBleHBvcnRpbmdTaWduYXR1cmUoKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKVxyXG4gICAgU2lnbmF0dXJlQ3JlYXRlVG9vbC5vbignYW5ub3RhdGlvbkFkZGVkJywgKGFubm90YXRpb24pID0+IHtcclxuICAgICAgaWYgKGFubm90YXRpb24gJiYgdGhpcy5uZXdTaWduQ3JlYXRpb24pIHtcclxuICAgICAgICB0aGlzLm5ld1NpZ25DcmVhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFjdEFub3RhdGlvbihhbm5vdGF0aW9uLCBkb2N1bWVudFZpZXdlcik7XHJcbiAgICAgICAgY29uc29sZS5sb2coYW5ub3RhdGlvbilcclxuICAgICAgfVxyXG4gICAgfSk7O1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdEFub3RhdGlvbihhbm5vdGF0aW9uLCBkb2N1bWVudFZpZXdlcikge1xyXG4gICAgaWYgKGFubm90YXRpb25bJ2ltYWdlJ10pIHtcclxuICAgICAgLy8gY29udmVydCBiYXNlNjQgc2lnbmF0dXJlIGludG8gZmlsZSBhbmQgZW1pdCBpdCB0byBvdXQgc2lkZSBcclxuICAgICAgbGV0IGJhc2U2NEltZyA9IGFubm90YXRpb25bJ2ltYWdlJ11bJ2N1cnJlbnRTcmMnXTtcclxuICAgICAgdmFyIGFyciA9IGJhc2U2NEltZy5zcGxpdCgnLCcpLFxyXG4gICAgICAgIG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxcclxuICAgICAgICBic3RyID0gYXRvYihhcnJbMV0pLFxyXG4gICAgICAgIG4gPSBic3RyLmxlbmd0aCxcclxuICAgICAgICB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xyXG4gICAgICB3aGlsZSAobi0tKSB7XHJcbiAgICAgICAgdThhcnJbbl0gPSBic3RyLmNoYXJDb2RlQXQobik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG5hbWUgPSBtaW1lLnJlcGxhY2UoJy8nLCAnLicpXHJcbiAgICAgIGxldCBteUZpbGUgPSBuZXcgRmlsZShbdThhcnJdLCAnbXlTaWduYXR1cmUucG5nJywgeyB0eXBlOiBtaW1lIH0pO1xyXG4gICAgICB0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiBteUZpbGUsIGV2ZW50TmFtZTogJ2V4cG9ydCcgfSk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHRyYWN0QW5ub3RhdGlvblNpZ25hdHVyZShhbm5vdGF0aW9uLCBkb2N1bWVudFZpZXdlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGV4dHJhY3RBbm5vdGF0aW9uU2lnbmF0dXJlKGFubm90YXRpb24sIGRvY1ZpZXdlcikge1xyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IENhbnZhcyB0byBkcmF3IHRoZSBBbm5vdGF0aW9uIG9uXHJcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIC8vIFJlZmVyZW5jZSB0aGUgYW5ub3RhdGlvbiBmcm9tIHRoZSBEb2N1bWVudFxyXG4gICAgY29uc3QgcGFnZU1hdHJpeCA9IGRvY1ZpZXdlci5nZXREb2N1bWVudCgpLmdldFBhZ2VNYXRyaXgoYW5ub3RhdGlvbi5QYWdlTnVtYmVyKTtcclxuICAgIC8vIFNldCB0aGUgaGVpZ2h0ICYgd2lkdGggb2YgdGhlIGNhbnZhcyB0byBtYWRlbGV0ZVNhdmVkU2lnbmF0dXJldGNoIHRoZSBhbm5vdGF0aW9uXHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gYW5ub3RhdGlvbi5IZWlnaHQ7XHJcbiAgICBjYW52YXMud2lkdGggPSBhbm5vdGF0aW9uLldpZHRoO1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAvLyBUcmFuc2xhdGUgdGhlIEFubm90YXRpb24gdG8gdGhlIHRvcCBUb3AgTGVmdCBDb3JuZXIgb2YgdGhlIENhbnZhcyBpZSAoMCwgMClcclxuICAgIGN0eC50cmFuc2xhdGUoLWFubm90YXRpb24uWCwgLWFubm90YXRpb24uWSk7XHJcbiAgICAvLyBEcmF3IHRoZSBBbm5vdGF0aW9uIG9udG8gdGhlIENhbnZhc1xyXG4gICAgYW5ub3RhdGlvbi5kcmF3KGN0eCwgcGFnZU1hdHJpeCk7XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBDYW52YXMgdG8gYSBCbG9iIE9iamVjdCBmb3IgVXBsb2FkXHJcbiAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgIC8vIENhbGwgeW91ciBCbG9iIFN0b3JhZ2UgVXBsb2FkIEZ1bmN0aW9uXHJcbiAgICAgIGxldCBuYW1lID0gYmxvYi50eXBlLnJlcGxhY2UoJy8nLCAnLicpXHJcbiAgICAgIGxldCBteUZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIG5hbWUpO1xyXG4gICAgICB0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiBteUZpbGUsIGV2ZW50TmFtZTogJ2V4cG9ydCcgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUFubm90YXRpb24oKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKTtcclxuICAgIFNpZ25hdHVyZUNyZWF0ZVRvb2wub24oJ3NpZ25hdHVyZURlbGV0ZWQnLCAoYW5ub3RhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3RoZXJlIHdlcmUgYW5ub3RhdGlvbnMgZGVsZXRlZCcpO1xyXG4gICAgICB0aGlzLnVzZXJTaWduYXR1cmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMuU2lnbmF0dXJlRXZlbnQuZW1pdCh7IGRhdGE6IHsgc2lnbmF0dXJlOiBhbm5vdGF0aW9uLCBpbmRleDogaW5kZXggfSwgZXZlbnROYW1lOiAnZGVsZXRlJyB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkRG93bmxvYWRCdXR0b24oKSB7XHJcbiAgICBpZiAodGhpcy5hbGxvd0Rvd25sb2FkU2VjcmV0RmlsZSB8fCAoIXRoaXMuYWxsb3dEb3dubG9hZFNlY3JldEZpbGUgJiYgdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJiB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldID09PSAnTm9ybWFsJykpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRIZWFkZXJJdGVtcygoaGVhZGVyKSA9PiB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ2FjdGlvbkJ1dHRvbicsXHJcbiAgICAgICAgICBpbWc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJiaSBiaS1maWxlLWVhcm1hcmstYXJyb3ctZG93blwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj4gPHBhdGggZD1cIk04LjUgNi41YS41LjUgMCAwIDAtMSAwdjMuNzkzTDYuMzU0IDkuMTQ2YS41LjUgMCAxIDAtLjcwOC43MDhsMiAyYS41LjUgMCAwIDAgLjcwOCAwbDItMmEuNS41IDAgMCAwLS43MDgtLjcwOEw4LjUgMTAuMjkzVjYuNXpcIi8+IDxwYXRoIGQ9XCJNMTQgMTRWNC41TDkuNSAwSDRhMiAyIDAgMCAwLTIgMnYxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMnpNOS41IDNBMS41IDEuNSAwIDAgMCAxMSA0LjVoMlYxNGExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMVYyYTEgMSAwIDAgMSAxLTFoNS41djJ6XCIvPjwvc3ZnPicsXHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5pc0FyYWJpYyA/ICfYqtmG2LLZitmEJyA6ICdEb3dubG9hZCcsXHJcbiAgICAgICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgRG9jdW1lbnRWaWV3ZXIsIEFubm90YXRpb25NYW5hZ2VyLCBTYXZlT3B0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHM7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHhmZGZTdHJpbmcgPSBhd2FpdCBBbm5vdGF0aW9uTWFuYWdlci5leHBvcnRBbm5vdGF0aW9ucygpO1xyXG4gICAgICAgICAgICBjb25zdCBzYXZlT3B0aW9ucyA9IFNhdmVPcHRpb25zO1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmNvcnJlc3BvbmRhbmNlLnRpdGxlID8gdGhpcy5jb3JyZXNwb25kYW5jZS50aXRsZSA6ICdteURvY3VtZW50LnBkZicsXHJcbiAgICAgICAgICAgICAgLy8geGZkZlN0cmluZyxcclxuICAgICAgICAgICAgICBmbGFnczogc2F2ZU9wdGlvbnMuTElORUFSSVpFRCxcclxuICAgICAgICAgICAgICBkb3dubG9hZFR5cGU6ICdwZGYnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBkZnRyb25TZXJ2aWNlLmluc3RhbmNlLmRvd25sb2FkUGRmKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5uZXh0KCdkb3dubG9hZCcpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGxldCB1cmwgPSB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXMuY29udGVudC5kYXRhO1xyXG4gICAgICAgICAgICAvLyBsZXQgZmlsZU5hbWUgPSB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXMuY29udGVudC5uYW1lO1xyXG4gICAgICAgICAgICAvLyBpZiAodXJsICYmIGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAgIC8vICAgbGV0IHNhZmVVcmwgPSB0aGlzLnNlY3VyZVBpcGUudHJhbnNmb3JtKHVybCk7XHJcbiAgICAgICAgICAgIC8vICAgc2FmZVVybC5zdWJzY3JpYmUoKHVybDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAvLyAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAvLyAgICAgbGluay5ocmVmID0gdXJsLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7XHJcbiAgICAgICAgICAgIC8vICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIC8vICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgICAgICAvLyAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuZXZlbnRzLm5leHQoJ2Rvd25sb2FkJyk7XHJcbiAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkUHJpbnRCdXR0b24oKSB7XHJcbiAgICBpZiAodGhpcy5hbGxvd1ByaW50U2VjcmV0RmlsZSB8fCAoIXRoaXMuYWxsb3dQcmludFNlY3JldEZpbGUgJiYgdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJiB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldID09PSAnTm9ybWFsJykpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRIZWFkZXJJdGVtcygoaGVhZGVyKSA9PiB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ2FjdGlvbkJ1dHRvbicsXHJcbiAgICAgICAgICBpbWc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNhYmIwYzQ7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5pY29uIC0gaGVhZGVyIC0gcHJpbnQgLSBsaW5lPC90aXRsZT48cGF0aCBjbGFzcz1cImNscy0xXCIgZD1cIk0yMCw2SDE4VjJINlY2SDRBMiwyLDAsMCwwLDIsOHY5YTIsMiwwLDAsMCwyLDJINnYzSDE4VjE5aDJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyMCw2Wk04LDRoOFY2SDhabTgsMTZIOFYxNmg4Wm00LTNIMThWMTRINnYzSDRWOEgyMFptLTQtN2gydjJIMTZabS0zLDBoMnYySDEzWlwiPjwvcGF0aD48L3N2Zz4nLFxyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuaXNBcmFiaWMgPyBcIti32KjYp9i52KlcIiA6ICdQcmludCcsXHJcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UucHJpbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHMubmV4dCgncHJpbnQnKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICdwcmludE1vZGFsJyxcclxuICAgICAgXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRXYXRlcm1hcmsoKSB7XHJcbiAgICBjb25zdCB1c2VyaW5mbyA9IHRoaXMubnV4ZW8ubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzO1xyXG4gICAgdGhpcy5wZGZ0cm9uU2VydmljZS5hZGRXYXRlcm1hcmsoXHJcbiAgICAgIGAke3VzZXJpbmZvLnVzZXJuYW1lfSAgICBgXHJcbiAgICAgIC8vIGAke3VzZXJpbmZvLmZpcnN0TmFtZX0gJHtcclxuICAgICAgLy8gICB1c2VyaW5mby5sYXN0TmFtZVxyXG4gICAgICAvLyB9IGBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2FkRG9jdW1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMud2ViVmlld2VySW5zdGFuY2UgfHwgKCF0aGlzLmZpbGVEYXRhICYmICF0aGlzLmZpbGVVUkwpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZG9jVmlld2VyLCBhbm5vdE1hbmFnZXIsIEFubm90YXRpb25zIH0gPSB0aGlzLndlYlZpZXdlckluc3RhbmNlO1xyXG4gICAgZG9jVmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgbGV0IGZpdE1vZGUgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLkZpdE1vZGUuRml0V2lkdGg7XHJcbiAgICAgIGlmICh0aGlzLmZpdE1vZGUgPT09ICdGaXRQYWdlJykge1xyXG4gICAgICAgIGZpdE1vZGUgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLkZpdE1vZGUuRml0UGFnZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpdE1vZGUgPT09ICdab29tJykge1xyXG4gICAgICAgIGZpdE1vZGUgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLkZpdE1vZGUuWm9vbTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldEZpdE1vZGUoZml0TW9kZSk7XHJcbiAgICB9KTtcclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5zZXRSZWFkT25seSh0cnVlKTtcclxuICAgICAgLy8gaW5zdGFuY2UuZW5hYmxlVG9vbHMoW10pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsZVVSTCAmJiB0aGlzLmZpbGVVUkwubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UubG9hZERvY3VtZW50KHRoaXMuZmlsZVVSTCwge1xyXG4gICAgICAgIHhvZHN0cmVhbWluZzogdHJ1ZSxcclxuICAgICAgICBjdXN0b21IZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLmF1dGhIZWFkZXIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQoXHJcbiAgICAgICAgbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHRoaXMuZmlsZURhdGEpXSwgeyB0eXBlOiB0aGlzLkRPQ1VNRU5UX1RZUEUgfSksXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZVRpdGxlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgIC8vIGlmIG5vdCBuZWdlbGN0aW5nIGFkZGluZyB3YXRlciBtYXJrIHRoZW4gY2hlY2sgY29uZGl0aW9ucyBmb3IgYWRkaW5nIGl0XHJcbiAgICBpZighdGhpcy5uZWdlbGVjdEFkZGluZ1dhdGVyTWFyayl7XHJcbiAgICAgIGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyBpZiB3ZSBuZWVkIHRvIGNoZWNrIG9uIHNlY3JlY3kgbGV2ZWwgZm9yIGFkZGluZyB3YXRlciBtYXJrIG9yIG5vdCBcclxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5lbmFibGVWaWV3ZXJXYXRlck1hcmsgJiYgdGhpcy5zZWNyZWN5UHJvcGVydHkpIHtcclxuICAgICAgICAgIC8vIGNoZWNrIGZvciBzZWNyZWN5IGxldmVsIGJlZm9yIGFkZGluZyB3YXRlcm1hcmtcclxuICAgICAgICAgIGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldICYmIHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllc1t0aGlzLnNlY3JlY3lQcm9wZXJ0eV0gIT09ICdOb3JtYWwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkV2F0ZXJtYXJrKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5lbnZpcm9ubWVudC5lbmFibGVWaWV3ZXJXYXRlck1hcmsgJiYgIXRoaXMuc2VjcmVjeVByb3BlcnR5KSB7XHJcbiAgICAgICAgICB0aGlzLmFkZFdhdGVybWFyaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXhwb3J0QXNCbG9iKCk6IFByb21pc2U8QmxvYj4ge1xyXG4gICAgY29uc3QgZG9jID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0RG9jdW1lbnQoKTtcclxuICAgIGNvbnN0IHhmZGZTdHJpbmcgPVxyXG4gICAgICBhd2FpdCB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5leHBvcnRBbm5vdGF0aW9ucygpO1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGRvYy5nZXRGaWxlRGF0YSh7XHJcbiAgICAgIC8vIHNhdmVzIHRoZSBkb2N1bWVudCB3aXRoIGFubm90YXRpb25zIGluIGl0XHJcbiAgICAgIHhmZGZTdHJpbmcsXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFthcnJdLCB7IHR5cGU6IHRoaXMuRE9DVU1FTlRfVFlQRSB9KTtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmxvYik7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFZGl0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFjdGlvbkNsaWNrZWQpIHtcclxuICAgICAgLy8gYWN0aW9uIGNsaWNrZWQgaXMgbm90IGNsaWNrZWQgdGhlbiBubyB1cGRhdGUgbW9kZSBvcGVuZWRcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0JyxcclxuICAgICAgICAndG9vbGJhckdyb3VwLUFubm90YXRlJyxcclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnNldFJlYWRPbmx5KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZWRpdCBtb2RlIG9wZW5lZCBhbmQgbXVzdCBiZSB3aGVuIGFjdGlvbiBpcyBjbGlja2VkXHJcbiAgICAgIGlmICh0aGlzLmVkaXRpbmdUeXBlKSB7XHJcbiAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0JyxcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIGxldCBncm91cDtcclxuICAgICAgICBpZiAodGhpcy5lZGl0aW5nVHlwZSA9PT0gJ3NpZ25Eb2MnKSB7XHJcbiAgICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmVuYWJsZUVsZW1lbnRzKFtcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnXHJcbiAgICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVkaXRpbmdUeXBlID09PSAnYW5ub3RhdGUnKSB7XHJcbiAgICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmVuYWJsZUVsZW1lbnRzKFtcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgICAndG9vbGJhckdyb3VwLUFubm90YXRlJyxcclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmVuYWJsZUVsZW1lbnRzKFtcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuICAgICAgICAgICd0b29sYmFyR3JvdXAtRWRpdCcsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUluc2VydCcsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUFubm90YXRlJyxcclxuICAgICAgICBdKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5zZXRSZWFkT25seShmYWxzZSk7XHJcbiAgICAgIC8vIHRoaXMud2ViVmlld2VySW5zdGFuY2Uuc2V0VG9vbGJhckdyb3VwKCd0b29sYmFyR3JvdXAtQW5ub3RhdGUnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLndlYlZpZXdlckluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRWRpdCgpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY2hhbmdlcy51cmxGaWxlQ29udGVudCAmJlxyXG4gICAgICAgIGNoYW5nZXMudXJsRmlsZUNvbnRlbnQucHJldmlvdXNWYWx1ZSAmJlxyXG4gICAgICAgIGNoYW5nZXMudXJsRmlsZUNvbnRlbnQucHJldmlvdXNWYWx1ZSAhPT1cclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LmN1cnJlbnRWYWx1ZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGRmVHJvbkV2ZW50KGV2ZW50KSB7XHJcbiAgICBpZiAodGhpc1tldmVudC5hY3Rpb25dKSB7XHJcbiAgICAgIC8vIG1ldGhvZCBleGlzdHMgaW4gdGhlIGNvbXBvbmVudFxyXG4gICAgICAvLyAgdGhpc1tldmVudC5hY3Rpb25dKGV2ZW50LnBhcmFtcyk7IC8vIGNhbGwgaXRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2VhcmNoIHJlc3VsdHMgc2VjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcGFnZXM6IGFueTtcclxuICBzdGFuZGFyZEhlaWdodDtcclxuICBzdGFuZGFyZFdpZHRoO1xyXG4gIHBhZ2VIZWlnaHQ7XHJcbiAgcGFnZVdpZHRoO1xyXG4gIHNhdmVkQW5vdGF0aW9ucyA9IFtdO1xyXG4gIGZpbGVXaXRoT2NyID0gZmFsc2U7XHJcbiAgbmV3QW5ub3RhdGlvbnMgPSBbXTtcclxuICBteVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICByZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gW107XHJcblxyXG4gIC8vIGFkZGluZyBzZWFyY2ggbGlzbmVyIHRvIGxpc2VuIHRvIGludGVybmFsIHNlYXJjaCBmcm9tIHVpIGFuZCB3aXRob3V0IG9jclxyXG4gIGFkZFNlYXJjaExpc3RuZXIoKSB7XHJcbiAgICBjb25zdCB7IGFubm90TWFuYWdlciwgZG9jVmlld2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGNvbnN0IHNlYXJjaExpc3RlbmVyID0gKHNlYXJjaFBhdHRlcm4sIG9wdGlvbnMsIHJlc3VsdHMpID0+IHtcclxuXHJcbiAgICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107XHJcbiAgICAgIGlmICh0aGlzLnNhdmVkQW5vdGF0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZEFub3RhdGlvbnMubWFwKGFubm90YXRpb24gPT4ge1xyXG4gICAgICAgICAgYW5ub3RhdGlvbi5IaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gQWx3YXlzIHJlZHJhdyBhbm5vdGF0aW9uIGlmIHJlbmRlcmluZyB3YXMgdXBkYXRlZFxyXG4gICAgICAgICAgYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZG9uJ3QgZG8gYW55IHNlYXJjaCB1bnRpbCB0aGVyZSBpcyBhIHNlYXJjaCBwYXR0ZXJuXHJcbiAgICAgIGlmIChzZWFyY2hQYXR0ZXJuLnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gYWRkIHJlZGFjdGlvbiBhbm5vdGF0aW9uIGZvciBlYWNoIHNlYXJjaCByZXN1bHRcclxuICAgICAgICB0aGlzLm5ld0Fubm90YXRpb25zID0gcmVzdWx0cy5tYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgIGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKHF1YWQgPT4gcXVhZC5nZXRQb2ludHMoKSk7XHJcbiAgICAgICAgICBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSByZXN1bHQucGFnZU51bTtcclxuICAgICAgICAgIGFubm90YXRpb24uU3Ryb2tlQ29sb3IgPSBuZXcgQW5ub3RhdGlvbnMuQ29sb3IoMjUwLCAyMDYsIDAsIDAuNTAxOTYpO1xyXG4gICAgICAgICAgYW5ub3RhdGlvbi5BdXRob3IgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgICAgcmV0dXJuIGFubm90YXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zYXZlZEFub3RhdGlvbnMucHVzaCguLi50aGlzLm5ld0Fubm90YXRpb25zKTtcclxuICAgICAgICBhbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbnModGhpcy5uZXdBbm5vdGF0aW9ucyk7XHJcbiAgICAgICAgYW5ub3RNYW5hZ2VyLmRyYXdBbm5vdGF0aW9uc0Zyb21MaXN0KHRoaXMubmV3QW5ub3RhdGlvbnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRvY1ZpZXdlci5jbGVhclNlYXJjaFJlc3VsdHMoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBkb2NWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFkZFNlYXJjaExpc3RlbmVyKHNlYXJjaExpc3RlbmVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gcGVyZm9ybSBhdXRvbWF0aWMgc2VhcmNoIHdoZW4gaW50ZXJpbmcgdGhlIHBhZ2UgXHJcbiAgYXV0b21hdGljU2VhcmNoKHNlYXJjaFRleHRBcnJheSkge1xyXG4gICAgY29uc3QgeyBhbm5vdE1hbmFnZXIsIGRvY1ZpZXdlciwgQW5ub3RhdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2U7XHJcbiAgICBsZXQgc2VhcmNoT3B0aW9ucztcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uub3BlbkVsZW1lbnRzKFsnc2VhcmNoUGFuZWwnXSk7XHJcbiAgICBkb2NWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuUEFHRV9TVE9QIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuSElHSExJR0hUIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuQU1CSUVOVF9TVFJJTkc7XHJcbiAgICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107IC8vIGVtcHR5IG15IHNlYXJjaCByZXN1bHQgd2hlbiBzdGFydGluZyBuZXcgc2VhcmNoXHJcbiAgICAgIGlmICh0aGlzLmZpbGVXaXRoT2NyKSB7XHJcblxyXG4gICAgICAgIC8vIGFkZCByZWRhY3Rpb24gYW5ub3RhdGlvbiBmb3IgZWFjaCBzZWFyY2ggcmVzdWx0XHJcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbiA9IG5ldyBBbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG4gICAgICAgIHNlYXJjaFRleHRBcnJheS5tYXAoc2VhcmNoVGV4dCA9PiB7XHJcbiAgICAgICAgICBsZXQgbXlTZWFyY2ggPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICBpZiAobXlTZWFyY2gubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JkXHJcbiAgICAgICAgICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRIZWlnaHQgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlSGVpZ2h0KChpbmRleCArIDEpKTtcclxuICAgICAgICAgICAgICB0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoKGluZGV4ICsgMSkpO1xyXG4gICAgICAgICAgICAgIHBhZ2Uuem9uZXMuZm9yRWFjaCh6b25lID0+IHtcclxuICAgICAgICAgICAgICAgIHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVGV4dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU2VhcmNoRm9yV29yZEluTGluZShteVNlYXJjaCwgbGluZSwgKGluZGV4ICsgMSksIHBhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggb25seSBvbmUgd29yZCBcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JXb3JkSW5BbGxQYWdlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgIHRoaXMuZGlzcGFsYXlTZWFyY2hSZXN1bHRzKGRvY1ZpZXdlcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VhcmNoT3B0aW9ucyA9IHtcclxuICAgICAgICAgIC8vIElmIHRydWUsIGEgc2VhcmNoIG9mIHRoZSBlbnRpcmUgZG9jdW1lbnQgd2lsbCBiZSBwZXJmb3JtZWQuIE90aGVyd2lzZSwgYSBzaW5nbGUgc2VhcmNoIHdpbGwgYmUgcGVyZm9ybWVkLlxyXG4gICAgICAgICAgZnVsbFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBzZWFyY2ggcmV0dXJucyBhIHJlc3VsdC5cclxuICAgICAgICAgIG9uUmVzdWx0OiByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAvLyB3aXRoICdQQUdFX1NUT1AnIG1vZGUsIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkIGFmdGVyIGVhY2ggcGFnZSBoYXMgYmVlbiBzZWFyY2hlZC5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRDb2RlID09PSB0aGlzLndlYlZpZXdlckluc3RhbmNlLkNvcmVDb250cm9scy5TZWFyY2guUmVzdWx0Q29kZS5GT1VORCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlF1YWRzID0gcmVzdWx0LnF1YWRzLm1hcChxdWFkID0+IHF1YWQuZ2V0UG9pbnRzKCkpO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGFubm90YXRpb24uUXVhZHMpO1xyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uUGFnZU51bWJlciA9IHJlc3VsdC5wYWdlTnVtO1xyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uU3Ryb2tlQ29sb3IgPSBuZXcgQW5ub3RhdGlvbnMuQ29sb3IoMjUwLCAyMDYsIDAsIDAuNTAxOTYpO1xyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uQXV0aG9yID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICAgICAgICB0aGlzLnNhdmVkQW5vdGF0aW9ucy5wdXNoKGFubm90YXRpb24pO1xyXG4gICAgICAgICAgICAgIGFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9ucyhbYW5ub3RhdGlvbl0pO1xyXG4gICAgICAgICAgICAgIGFubm90TWFuYWdlci5kcmF3QW5ub3RhdGlvbnNGcm9tTGlzdChbYW5ub3RhdGlvbl0pO1xyXG4gICAgICAgICAgICAgIGRvY1ZpZXdlci5kaXNwbGF5QWRkaXRpb25hbFNlYXJjaFJlc3VsdHMoW3Jlc3VsdF0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2VhcmNoVGV4dEFycmF5Lm1hcChzZWFyY2hlZFRleHQgPT4ge1xyXG4gICAgICAgICAgZG9jVmlld2VyLnRleHRTZWFyY2hJbml0KHNlYXJjaGVkVGV4dCwgbW9kZSwgc2VhcmNoT3B0aW9ucyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIHNlYXJjaCBmb3Igc2luZ2xlIHdvcmQgaW4gYWxsIHBhZ2VzIFxyXG4gIHNlYXJjaEZvcldvcmRJbkFsbFBhZ2VzKHNlYXJjaGVkV29yZCkge1xyXG4gICAgdGhpcy5wYWdlcy5wYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHBhZ2UucGFnZV93aWR0aDtcclxuICAgICAgdGhpcy5zdGFuZGFyZEhlaWdodCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoKGluZGV4ICsgMSkpO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoKGluZGV4ICsgMSkpO1xyXG4gICAgICBjb25zdCB4ID0gKHRoaXMucGFnZVdpZHRoIC8gdGhpcy5zdGFuZGFyZFdpZHRoKTsgLy8gd2lkdGggcmF0aW9cclxuICAgICAgY29uc3QgeSA9ICh0aGlzLnBhZ2VIZWlnaHQgLyB0aGlzLnN0YW5kYXJkSGVpZ2h0KTsgLy8gaGVpZ2h0IHJhdGlvXHJcbiAgICAgIHBhZ2Uuem9uZXMuZm9yRWFjaCh6b25lID0+IHtcclxuICAgICAgICB6b25lLnBhcmFncmFwaHMuZm9yRWFjaChwYXJhZ3JhcGggPT4ge1xyXG4gICAgICAgICAgcGFyYWdyYXBoLmxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgIGxpbmUud29yZHMuZm9yRWFjaCh3b3JkID0+IHtcclxuICAgICAgICAgICAgICBpZiAod29yZC50ZXh0LmluY2x1ZGVzKHNlYXJjaGVkV29yZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFubm90YXRpb24uUGFnZU51bWJlciA9IGluZGV4KzE7XHJcbiAgICAgICAgICAgICAgICBsZXQgcXVhZHMgPSBbe1xyXG4gICAgICAgICAgICAgICAgICB4MTogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgIHgyOiAod29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICB4MzogKHdvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnggLyB4KSxcclxuICAgICAgICAgICAgICAgICAgeDQ6ICh3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICB5MTogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgIHkyOiAod29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgICAgICAgICAgeTM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgIHk0OiAod29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueSAvIHkpLFxyXG4gICAgICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgICAgIHRoaXMuaGlnbGlnaHRUZXh0KFxyXG4gICAgICAgICAgICAgICAgICBxdWFkcyxcclxuICAgICAgICAgICAgICAgICAgaW5kZXggKyAxXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRXb3JkLCBpbmRleCArIDEsIHF1YWRzLCBsaW5lLnRleHQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gc2VhcmNoIGZvciB3b3JkIGluIHNpbmdsZSBsaW5lIFxyXG4gIFNlYXJjaEZvcldvcmRJbkxpbmUobGlzdE9mU2VhcmNoZWRXb3JkcywgbGluZSwgcGFnZW51bWJlciwgcGFnZSkge1xyXG4gICAgdGhpcy5wYWdlSGVpZ2h0ID0gcGFnZS5wYWdlX2hlaWdodDtcclxuICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgdGhpcy5zdGFuZGFyZEhlaWdodCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoKHBhZ2VudW1iZXIpKTtcclxuICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgocGFnZW51bWJlcikpO1xyXG4gICAgY29uc3QgeCA9ICh0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aCk7IC8vIHdpZHRoIHJhdGlvXHJcbiAgICBjb25zdCB5ID0gKHRoaXMucGFnZUhlaWdodCAvIHRoaXMuc3RhbmRhcmRIZWlnaHQpOyAvLyBoZWlnaHQgcmF0aW9cclxuICAgIC8vIGZpbmQgb25seSB3b3JkcyByZWxhdGVkIHRvIG15IHNlYXJjaCBmb3JtIHRoZSBsaW5lXHJcbiAgICBsZXQgbXlGb3VuZGVkUmVzdWx0cyA9IFtdO1xyXG4gICAgbGV0IGNvcnJlY3RSZXN1bHRzID0gW107XHJcbiAgICBsaW5lLndvcmRzLmZvckVhY2goKHdvcmQsIHdvcmRJbmRleCkgPT4ge1xyXG4gICAgICBpZiAobGlzdE9mU2VhcmNoZWRXb3Jkcy5pbmRleE9mKHdvcmQudGV4dCkgPiAtMSkge1xyXG4gICAgICAgIG15Rm91bmRlZFJlc3VsdHMucHVzaCh7IHdvcmQ6IHdvcmQsIHdvcmRJbmRleDogd29yZEluZGV4IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGZpbmQgb25seSB3b3JkcyBleGlzdCBpbiBteSBzZWFyY2ggc2VudGVuY2UgYW5kIG5vdCBzaW5nbGUgYW5kIHJlcGVhdGVkIHdvcmRcclxuICAgIG15Rm91bmRlZFJlc3VsdHMubWFwKChyZXN1bHQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICgobXlGb3VuZGVkUmVzdWx0c1tpbmRleF1bJ3dvcmRJbmRleCddIC0gMSA9PT0gKG15Rm91bmRlZFJlc3VsdHNbaW5kZXggLSAxXSAmJiBteUZvdW5kZWRSZXN1bHRzW2luZGV4IC0gMV1bJ3dvcmRJbmRleCddKSkgfHxcclxuICAgICAgICAobXlGb3VuZGVkUmVzdWx0c1tpbmRleCArIDFdICYmIChteUZvdW5kZWRSZXN1bHRzW2luZGV4ICsgMV1bJ3dvcmRJbmRleCddIC0gMSA9PT0gbXlGb3VuZGVkUmVzdWx0c1tpbmRleF1bJ3dvcmRJbmRleCddKSkpIHtcclxuICAgICAgICBjb3JyZWN0UmVzdWx0cy5wdXNoKHJlc3VsdClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBoaWdobGlodCB0aGVzZSB3b3JkcyBhZnRlciBlbGVtaW5hdGluZyBhbGwgcmVwZWF0ZWQgYW5kIHJlbGF0ZWQgd29yZHNcclxuICAgIC8vIG11c3QgYmUgZm9yIGxvb3Agc3AgaSBjYW4gY29udHJvbCB0aGUgc3RlcCBpbiBlYWNoIGxvb3BcclxuICAgIGxldCBxdWFkcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3JyZWN0UmVzdWx0cy5sZW5ndGg7IChpID0gaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSkge1xyXG4gICAgICBxdWFkcy5wdXNoKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHgxOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCksXHJcbiAgICAgICAgICB4MjogKGNvcnJlY3RSZXN1bHRzW2ldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnggLyB4KSxcclxuICAgICAgICAgIHgzOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgeDQ6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4KSxcclxuICAgICAgICAgIHkxOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgIHkyOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICB5MzogKGNvcnJlY3RSZXN1bHRzWygoaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSAtIDEpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICB5NDogKGNvcnJlY3RSZXN1bHRzW2ldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5KSxcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5oaWdsaWdodFRleHQoXHJcbiAgICAgICAgcXVhZHMsXHJcbiAgICAgICAgcGFnZW51bWJlclxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdFNlYXJjaFJlc3VsdChsaXN0T2ZTZWFyY2hlZFdvcmRzLmpvaW4oXCIgXCIpLCBwYWdlbnVtYmVyLCBxdWFkcywgbGluZS50ZXh0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0U2VhcmNoUmVzdWx0KHNlYXJjaGVkVGV4dCwgcGFnZU51bSwgcXVhZHMsIGxpbmUpIHtcclxuICAgIGxldCBteVNlYXJjaFN0YXJ0VGV4dEluZGV4ID0gbGluZS5pbmRleE9mKHNlYXJjaGVkVGV4dCk7XHJcbiAgICBsZXQgbXlTZWVhcmNoZWRUZXh0RW5kSW5kZXggPSBteVNlYXJjaFN0YXJ0VGV4dEluZGV4ICsgc2VhcmNoZWRUZXh0Lmxlbmd0aDtcclxuICAgIGxldCBzZWFyY2hSZXN1bHRPYmplY3QgPSB7XHJcbiAgICAgIGFtYmllbnRTdHI6IGxpbmUsXHJcbiAgICAgIHJlc3VsdFN0cjogc2VhcmNoZWRUZXh0LFxyXG4gICAgICByZXN1bHRTdHJTdGFydDogbXlTZWFyY2hTdGFydFRleHRJbmRleCxcclxuICAgICAgcmVzdWx0U3RyRW5kOiBteVNlZWFyY2hlZFRleHRFbmRJbmRleCxcclxuICAgICAgcGFnZU51bTogcGFnZU51bSxcclxuICAgICAgcmVzdWx0Q29kZTogMixcclxuICAgICAgcXVhZHM6IFt7XHJcbiAgICAgICAgZWE6IHF1YWRzWzBdWyd5MyddLFxyXG4gICAgICAgIGZhOiBxdWFkc1swXVsneTQnXSxcclxuICAgICAgICBoYTogcXVhZHNbMF1bJ3gxJ10sXHJcbiAgICAgICAgaWE6IHF1YWRzWzBdWyd4MiddLFxyXG4gICAgICAgIHBCOiBxdWFkc1swXVsneDMnXSxcclxuICAgICAgICBxQjogcXVhZHNbMF1bJ3g0J10sXHJcbiAgICAgICAgckI6IHF1YWRzWzBdWyd5MSddLFxyXG4gICAgICAgIHNCOiBxdWFkc1swXVsneTInXVxyXG4gICAgICB9XVxyXG4gICAgfVxyXG4gICAgdGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMucHVzaChzZWFyY2hSZXN1bHRPYmplY3QpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgZGlzcGFsYXlTZWFyY2hSZXN1bHRzKGRvY1ZpZXdlcikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGRvY1ZpZXdlci5kaXNwbGF5QWRkaXRpb25hbFNlYXJjaFJlc3VsdHModGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8vIGRyYXcgaGlsaWd0aGluZyBhcm91bmQgY2VydGFpbiBjaGFyYXRhY3RlcnNcclxuICBoaWdsaWdodFRleHQocXVhZHMsIHBhZ2VOdW1iZXIpIHtcclxuICAgIGNvbnN0IGhpZ2hsaWdodGluZ0Fubm90ID0gbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgIGhpZ2hsaWdodGluZ0Fubm90LlN0cm9rZUNvbG9yID0gbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLCAyMDYsIDAsIDAuNTAxOTYpO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuUXVhZHMgPSBxdWFkcztcclxuICAgIGhpZ2hsaWdodGluZ0Fubm90LlBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuQXV0aG9yID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goaGlnaGxpZ2h0aW5nQW5ub3QpO1xyXG4gICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbihoaWdobGlnaHRpbmdBbm5vdCk7XHJcblxyXG4gICAgLy8gbmVlZCB0byBkcmF3IHRoZSBhbm5vdGF0aW9uIG90aGVyd2lzZSBpdCB3b24ndCBzaG93IHVwIHVudGlsIHRoZSBwYWdlIGlzIHJlZnJlc2hlZFxyXG4gICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihoaWdobGlnaHRpbmdBbm5vdCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hGbiA9IChzZWFyY2hWYWx1ZSwgb3B0aW9ucykgPT4ge1xyXG4gICAgdGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICAgIGlmICh0aGlzLnNhdmVkQW5vdGF0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLm1hcChhbm5vdGF0aW9uID0+IHtcclxuICAgICAgICBhbm5vdGF0aW9uLkhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgLy8gQWx3YXlzIHJlZHJhdyBhbm5vdGF0aW9uIGlmIHJlbmRlcmluZyB3YXMgdXBkYXRlZFxyXG4gICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gZG9uJ3QgZG8gYW55IHNlYXJjaCB1bnRpbCB0aGVyZSBpcyBhIHNlYXJjaCBwYXR0ZXJuXHJcbiAgICBpZiAoc2VhcmNoVmFsdWUudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMuZmlsZVdpdGhPY3IpIHtcclxuICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgIC8vIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICBsZXQgbXlTZWFyY2ggPSBzZWFyY2hWYWx1ZS5zcGxpdCgnICcpO1xyXG4gICAgICAgIGlmIChteVNlYXJjaC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JkXHJcbiAgICAgICAgICB0aGlzLnBhZ2VzLnBhZ2VzLmZvckVhY2goKHBhZ2UsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXggKyAxKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgoaW5kZXggKyAxKSk7XHJcbiAgICAgICAgICAgIHBhZ2Uuem9uZXMuZm9yRWFjaCh6b25lID0+IHtcclxuICAgICAgICAgICAgICB6b25lLnBhcmFncmFwaHMuZm9yRWFjaChwYXJhZ3JhcGggPT4ge1xyXG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoLmxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5TZWFyY2hGb3JXb3JkSW5MaW5lKG15U2VhcmNoLCBsaW5lLCAoaW5kZXggKyAxKSwgcGFnZSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggb25seSBvbmUgd29yZCBcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoVmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgIHRoaXMuZGlzcGFsYXlTZWFyY2hSZXN1bHRzKHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuY2xlYXJTZWFyY2hSZXN1bHRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2ViVmlld2VySW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5jbG9zZURvY3VtZW50KCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RvY3VtZW50IGNsb3NlZCEnKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24gPyB0aGlzLnRyYW5zZWxhdGlvblN1YnNjcml0aW9uLnVuc3Vic2NyaWJlKCkgOiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNmaWxlVmlld2VyIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIj48L2Rpdj5cclxuIl19
|
|
812
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFHTixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUczQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFLeEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjtJQXdENUIsWUFDUSxHQUFzQixFQUNyQixjQUE4QixFQUM5QixLQUFtQixFQUNJLFFBQWdCLEVBQ3ZDLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDbkIsV0FBVztRQU5uQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNJLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFBOztRQXpEbEMsa0JBQWEsR0FBRyxLQUFL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S0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRSxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFUCxNQUFNO3NCQURMLE1BQU07Z0JBRUcsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRDb21wb25lbnQsXHJcblx0RWxlbWVudFJlZixcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0SW5qZWN0LFxyXG5cdElucHV0LFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IFdlYlZpZXdlciBmcm9tICdAcGRmdHJvbi93ZWJ2aWV3ZXInO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZGZ0cm9uU2VydmljZSB9IGZyb20gJy4vcGRmdHJvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBQX0JBU0VfSFJFRiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNlY3VyZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9zZWN1cmUucGlwZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTaWxlbnRQZGZUcm9uU2VydmljZSB9IGZyb20gJy4vc2lsZW50LXBkZnRyb24uc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQSByZXVzYWJsZSBmaWxlIHZpZXdlciBiYXNlZCBvbiBQREZUcm9uIExpYnJhcnlcclxuICogQHRpdGxlXHJcbiAqIFBERlRyb24gVmlld2VyXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxhcHAtcGRmdHJvblxyXG4gKiAgIFtmaWxlRGF0YV09XCJmaWxlRGF0YVwiXHJcbiAqICAgW2VkaXRNb2RlXT1cImZhbHNlXCJcclxuICogICBbZG9jSWRdPVwiZmlsZUlkXCJcclxuICogICBbZmlsZVRpdGxlXT1cImZpbGUudGl0bGVcIlxyXG4gKiA+XHJcbiAqIDwvYXBwLXBkZnRyb24+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1wZGZ0cm9uJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcGRmdHJvbi5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vcGRmdHJvbi5jb21wb25lbnQuc2NzcyddLFxyXG5cdHByb3ZpZGVyczogW1NlY3VyZVBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZGZ0cm9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcblx0QFZpZXdDaGlsZCgnZmlsZVZpZXdlcicsIHsgc3RhdGljOiB0cnVlIH0pIHZpZXdlclJlZjogRWxlbWVudFJlZjtcclxuXHR3ZWJWaWV3ZXJJbnN0YW5jZTtcclxuXHQvKiogRGlzYWJsZS9FbmFibGUgQW5ub3RhdGlvbiAqL1xyXG5cdEBJbnB1dCgpXHJcblx0ZWRpdE1vZGU6IGJvb2xlYW47XHJcblx0QElucHV0KCkgYWN0aW9uQ2xpY2tlZCA9IGZhbHNlOyAvLyB1c2VkIHRvIGtub3cgaWYgdGhlcmUgaXMgYWN0aW9uIGNsaWNrZWQgb3V0c2lkZSB0byBzdGFydCBlZGl0IG1vZGUgb3Igbm90XHJcblx0aXNEb2N1bWVudExvYWRpbmc6IGJvb2xlYW47XHJcblx0aXNGZXRjaGluZzogYm9vbGVhbjtcclxuXHQvKiogRG9jdW1lbnQgdGl0bGUgKi9cclxuXHRASW5wdXQoKVxyXG5cdGZpbGVUaXRsZTogc3RyaW5nO1xyXG5cdC8qKiBEb2N1bWVudCBJRCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0ZG9jSWQ6IHN0cmluZztcclxuXHRASW5wdXQoKVxyXG5cdERPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vcGRmJztcclxuXHRASW5wdXQoKVxyXG5cdGZpbGVEYXRhO1xyXG5cdEBJbnB1dCgpXHJcblx0Zml0TW9kZTogJ0ZpdFdpZHRoJyB8ICdGaXRQYWdlJyB8ICdab29tJyA9ICdGaXRXaWR0aCc7XHJcblx0QElucHV0KClcclxuXHRhdXRoSGVhZGVyOiBzdHJpbmc7XHJcblx0QElucHV0KClcclxuXHRmaWxlVVJMOiBzdHJpbmc7XHJcblx0QElucHV0KClcclxuXHRjb3JyZXNwb25kYW5jZTtcclxuXHJcblx0QElucHV0KCkgc2VjcmVjeVByb3BlcnR5OyAvLyB1c2VkIHRvIGFkZCB3YXRlcm1hcmsgYWNvcmRpbmcgY2VydGFpbiBzZWNyZWN5IGxldmVsXHJcblx0QElucHV0KCkgZWRpdGluZ1R5cGU7XHJcblx0QElucHV0KCkgdXNlclNpZ25hdHVyZXM7XHJcblx0QElucHV0KCkgc2VhcmNoU3RyaW5nID0gJyc7IC8vIHN0cmluZyB0byBzZWFyY2ggZm9yIGl0IGluIHRoZSBkb2N1bWVudFxyXG5cclxuXHRASW5wdXQoKSB0cmFja1NpZ25hdHVyZSA9IGZhbHNlOyAvLyB0byBlbmFibGUgdHJhY2tpbmcgc2lnbmF0dXJlIHBvc2l0aW9uIGFuZCBlbWl0IGl0IGFmdGVyIGV2ZXJ5IGNoYW5nZSBpdCBzaWduYXR1cmVcclxuXHRAT3V0cHV0KCkgb25TaWduYXR1cmVUcmFja2luZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gZXZlbnQgdG8gZW1pdCBzaWduYXR1cmUgY2hhbmdlc1xyXG5cclxuXHRASW5wdXQoKSB1c2VPdXRzaWRlQW5vdGF0aW9ucyA9IGZhbHNlOyAvLyBmbGFnZSB0byBpbmRpY2F0IGlmIHVzaW5nIG91dCBzaWRlIGFub3RhdGlvbnMgb3Igbm90XHJcblx0QElucHV0KCkgaW1wb3J0ZWRBbm90YXRpb25zOyAvLyBpbXBvcnRlZCBhbm90YXRpb25zIGZyb20gb3V0c2lkZVxyXG5cdEBJbnB1dCgpIGFsbG93RG93bmxvYWRTZWNyZXRGaWxlID0gdHJ1ZTsgLy8gYWxsb3cgb3IgcHJldmVudCBkb3dubG9hZCBzY3JlY3QgZmlsZXNcclxuXHRASW5wdXQoKSBhbGxvd1ByaW50U2VjcmV0RmlsZSA9IHRydWU7IC8vIGFsbG93IG9yIHByZXZlbnQgcHJpbnQgc2NyZWN0IGZpbGVzXHJcblx0QElucHV0KCkgbmVnZWxlY3RBZGRpbmdXYXRlck1hcmsgPSBmYWxzZTsgLy8gZG9uJ3QgYWRkIHdhdGVybWFyayBoZXJlIHdoYXRldmVyIGVhcyB0aGUgY29uZGl0aW9ucyAod2UgbWF5IGFkZCBpdCBmcm9tIG91dHNpZGUgb3Igbm90IGFkZCBpdCBhdCBhbGwpXHJcblxyXG5cdEBPdXRwdXQoKSBvbkFkZGluZ0Fub3RhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gdXNlZCB0byBleHBvcnQgYWxsIGFub3RhdGlvbnMgdG8gb3V0c2lkZVxyXG5cdEBPdXRwdXQoKVxyXG5cdGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRAT3V0cHV0KCkgU2lnbmF0dXJlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHVzZWQgdG8gZXhwb3J0IHNpZ25hdHVyZSB0byBvdXRzaWRlXHJcblx0Zmlyc3RUaW1lTG9hZCA9IHRydWU7IC8vZmxhZ2UgdG8gY29udHJvbCBpbXBvcnRpbmcgc2lnbmF0dXJlcyBpbiB0aGUgZmlyc3QgdGltZSBsb2FkIG9ubHlcclxuXHRmaXJzdFNpZ25hdHVyZUxvYWQgPSB0cnVlOyAvLyBmbGFnZSB0byBwYXNzIGZpcnN0IGxvYWQgb2YgaW1wb3J0ZWQgc2lnbmF0dXJlcyB3aXRob3V0IGVtaXR0aW5nIHRoZSBldmVudFxyXG5cdG5ld1NpZ25DcmVhdGlvbiA9IGZhbHNlOyAvLyBmbGFnZSB0byBpbmRpY2F0ZSBzaWduYXR1cmUgY3JlYXRpb24gaXMgY3JlYXRlZCBvciBjaG9vc2VkIGZyb20gc3RvcmVkIG9uZXNcclxuXHR0cmFuc2VsYXRpb25TdWJzY3JpdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdGlzQXJhYmljO1xyXG5cclxuXHQvL3NpbGVudCBwZGZUcm9uXHJcblx0c2lsZW50UGRmVHJvbjogSFRNTEVsZW1lbnQ7XHJcblx0cmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHJpdmF0ZSBwZGZ0cm9uU2VydmljZTogUGRmdHJvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIG51eGVvOiBOdXhlb1NlcnZpY2UsXHJcblx0XHRASW5qZWN0KEFQUF9CQVNFX0hSRUYpIHByaXZhdGUgYmFzZUhyZWY6IHN0cmluZyxcclxuXHRcdHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHNpbGVudFBkZlRyb25TZXJ2aWNlOiBTaWxlbnRQZGZUcm9uU2VydmljZSxcclxuXHRcdEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudFxyXG5cdCkge31cclxuXHJcblx0YXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHR0aGlzLnRyYW5zZWxhdGlvblN1YnNjcml0aW9uID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaXNBcmFiaWMuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0dGhpcy5pc0FyYWJpYyA9IHJlcztcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMucmVjaXZlZFNlYXJjaFN0cmluZ3NBcnJheSA9IHRoaXMuc2VhcmNoU3RyaW5nLnRyaW0oKSA/IHRoaXMuc2VhcmNoU3RyaW5nLnNwbGl0KCcsJykgOiBbXTtcclxuXHRcdGlmICh0aGlzLmZpbGVUaXRsZSkge1xyXG5cdFx0XHRpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5wcHQnKSkge1xyXG5cdFx0XHRcdHRoaXMuRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCc7XHJcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5wcHR4JykpIHtcclxuXHRcdFx0XHR0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbic7XHJcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5kb2MnKSkge1xyXG5cdFx0XHRcdHRoaXMuRE9DVU1FTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuZmlsZVRpdGxlLmVuZHNXaXRoKCcuZG9jeCcpKSB7XHJcblx0XHRcdFx0dGhpcy5ET0NVTUVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpbGVudFBkZlRyb25TZXJ2aWNlLmlzRW5hYmxlZCkge1xyXG5cdFx0XHRbdGhpcy5zaWxlbnRQZGZUcm9uLCB0aGlzLndlYlZpZXdlckluc3RhbmNlXSA9IGF3YWl0IHRoaXMuc2lsZW50UGRmVHJvblNlcnZpY2UuZ2V0V2ViVmlld2VyKCk7XHJcblx0XHRcdHRoaXMuI2FmdGVyTG9hZFdlYlZpZXdlcih0aGlzLndlYlZpZXdlckluc3RhbmNlKTtcclxuXHRcdFx0dGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB0aGlzLiN1cGRhdGVTaWxlbnRQZGZUcm9uKCkpO1xyXG5cdFx0XHR0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy52aWV3ZXJSZWYubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdHRoaXMuI3VwZGF0ZVNpbGVudFBkZlRyb24oKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdFdlYlZpZXdlcihcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRwYXRoOiB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvcGRmdHJvbnMnLFxyXG5cdFx0XHRcdFx0Zm9yY2VDbGllbnRTaWRlSW5pdDogdHJ1ZSxcclxuXHRcdFx0XHRcdHN0cmVhbWluZzogdHJ1ZSxcclxuXHRcdFx0XHRcdGxpY2Vuc2VLZXk6IHRoaXMuZW52aXJvbm1lbnQucGRmdHJvbkxpY2VuY2VLZXksXHJcblx0XHRcdFx0XHRjc3M6IHRoaXMuaXNBcmFiaWNcclxuXHRcdFx0XHRcdFx0PyB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvc3R5bGVzL2FyLW15cGRmdHJvbi5jc3MnXHJcblx0XHRcdFx0XHRcdDogdGhpcy5iYXNlSHJlZiArICcvYXNzZXRzL3N0eWxlcy9lbi1teXBkZnRyb24uY3NzJyxcclxuXHRcdFx0XHRcdGFubm90YXRpb25Vc2VyOlxyXG5cdFx0XHRcdFx0XHR0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy5maXJzdE5hbWUgKyAnICcgKyB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy5sYXN0TmFtZSxcclxuXHRcdFx0XHRcdGRpc2FibGVkRWxlbWVudHM6IFsnZG93bmxvYWRCdXR0b24nLCAncHJpbnRCdXR0b24nXVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy52aWV3ZXJSZWYubmF0aXZlRWxlbWVudFxyXG5cdFx0XHQpLnRoZW4oYXN5bmMgKGluc3RhbmNlKSA9PiB7XHJcblx0XHRcdFx0dGhpcy4jYWZ0ZXJMb2FkV2ViVmlld2VyKGluc3RhbmNlKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdCN1cGRhdGVTaWxlbnRQZGZUcm9uKCkge1xyXG5cdFx0Y29uc3QgcmVjdCA9IHRoaXMudmlld2VyUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRPYmplY3QuYXNzaWduKHRoaXMuc2lsZW50UGRmVHJvbi5zdHlsZSwge1xyXG5cdFx0XHRwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuXHRcdFx0dG9wOiBgJHtyZWN0LnRvcH1weGAsXHJcblx0XHRcdGxlZnQ6IGAke3JlY3QubGVmdH1weGAsXHJcblx0XHRcdHdpZHRoOiBgJHtyZWN0LndpZHRofXB4YCxcclxuXHRcdFx0aGVpZ2h0OiBgJHtyZWN0LmhlaWdodH1weGAsXHJcblx0XHRcdHpJbmRleDogJzk5OTknLFxyXG5cdFx0XHRkaXNwbGF5OiAnYmxvY2snXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdCNhZnRlckxvYWRXZWJWaWV3ZXIoaW5zdGFuY2UpIHtcclxuXHRcdHRoaXMuaXNBcmFiaWMgPyBpbnN0YW5jZS5zZXRMYW5ndWFnZSgnYXInKSA6IGluc3RhbmNlLnNldExhbmd1YWdlKCdlbicpO1xyXG5cdFx0dGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuXHRcdGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlLmZhY2V0cy5pbmRleE9mKCdjdG9jcicpID4gLTEpIHtcclxuXHRcdFx0dGhpcy5maWxlV2l0aE9jciA9IHRydWU7XHJcblx0XHRcdHRoaXMucGFnZXMgPSBKU09OLnBhcnNlKHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllc1snY3RvY3I6cmVjb2duaXplZEpzb24nXSk7XHJcblx0XHRcdC8vIG92ZXJyaWRlIHNlYXJjaCBmdW50aW9uIHRvIHVzZSBvdXIgc2VhcmNoIGluIG9jciBub3QgZGVmdWx0IHNlYXJjaFxyXG5cdFx0XHRpbnN0YW5jZS5vdmVycmlkZVNlYXJjaEV4ZWN1dGlvbih0aGlzLnNlYXJjaEZuKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIGlmIG5vIG9jciB0aGVuIGFkZCBzZWFyY2ggbGlzbmVyIHRvIGxpc25lIHRvIGludGVybmFsIHNlYXJjaCBhbmQgY2F0Y2ggcmVzdWx0c1xyXG5cdFx0XHR0aGlzLmFkZFNlYXJjaExpc3RuZXIoKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuYWRkUHJpbnRCdXR0b24oKTtcclxuXHRcdHRoaXMuYWRkRG93bmxvYWRCdXR0b24oKTtcclxuXHRcdHRoaXMuaW1wb3J0U2lnbmF0dXJlKCk7XHJcblx0XHR0aGlzLmV4cG9ydGluZ1NpZ25hdHVyZSgpO1xyXG5cdFx0dGhpcy5kZWxldGVBbm5vdGF0aW9uKCk7XHJcblx0XHR0aGlzLmV4cG9ydGluZ1NhdmVkU2lnbmF0dXJlKCk7XHJcblx0XHRpZiAodGhpcy51c2VPdXRzaWRlQW5vdGF0aW9ucykge1xyXG5cdFx0XHR0aGlzLmltcG9ydEFub3RhdGlvbnNGcm9tT3V0c2lkZSgpO1xyXG5cdFx0XHR0aGlzLmV4cG9ydEFub3RhdGlvbnNUb091dHNpZGUoKTtcclxuXHRcdH1cclxuXHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLnNldFNlYXJjaEhpZ2hsaWdodENvbG9ycyh7XHJcblx0XHRcdC8vIHNldFNlYXJjaEhpZ2hsaWdodENvbG9ycyBhY2NlcHRzIGJvdGggQW5ub3RhdGlvbnMuQ29sb3Igb2JqZWN0cyBvciAncmdiYScgc3RyaW5nc1xyXG5cdFx0XHRzZWFyY2hSZXN1bHQ6IG5ldyB0aGlzLndlYlZpZXdlckluc3RhbmNlLkFubm90YXRpb25zLkNvbG9yKDI1MCwgMjA2LCAwLCAwLjUwMTk2KSxcclxuXHRcdFx0YWN0aXZlU2VhcmNoUmVzdWx0OiBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsIDIwNiwgMCwgMC41MDE5NilcclxuXHRcdH0pO1xyXG5cdFx0aWYgKHRoaXMucmVjaXZlZFNlYXJjaFN0cmluZ3NBcnJheS5sZW5ndGggIT09IDApIHtcclxuXHRcdFx0dGhpcy5hdXRvbWF0aWNTZWFyY2godGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5KTtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9hZERvY3VtZW50KCk7XHJcblx0fVxyXG5cclxuXHRpbXBvcnRBbm90YXRpb25zRnJvbU91dHNpZGUoKSB7XHJcblx0XHRjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG5cclxuXHRcdGRvY3VtZW50Vmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuaW1wb3J0QW5ub3RhdGlvbnModGhpcy5pbXBvcnRlZEFub3RhdGlvbnMpO1xyXG5cdFx0fSk7XHJcblx0XHQvLyAudGhlbihhbm5vdGF0aW9ucyA9PiB7XHJcblx0XHQvLyAgIGFubm90YXRpb25zLmZvckVhY2goYW5ub3RhdGlvbiA9PiB7XHJcblx0XHQvLyAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihhbm5vdGF0aW9uKTtcclxuXHRcdC8vICAgfSk7XHJcblx0XHQvLyB9KTtcclxuXHR9XHJcblxyXG5cdC8vIGV4Y3RyYWN0IGFsbCBhbm90YXRpb25zIG9uIHRoZSBmaWxlIGFuZCBzZW5kIGl0IG91dCBzaWRlIHRvIGJlIHNhdmVkIGFuZCBsZWF2ZSB0aGUgZmlsZSBhcyBpdCBpcyB3aXRob3V0IGFueSBhbm90YXRpb25zIG9uIGl0XHJcblx0ZXhwb3J0QW5vdGF0aW9uc1RvT3V0c2lkZSgpIHtcclxuXHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLm9uKCdhbm5vdGF0aW9uQ2hhbmdlZCcsIChhbm5vdGF0aW9ucywgYWN0aW9uLCB7IGltcG9ydGVkIH0pID0+IHtcclxuXHRcdFx0aWYgKGltcG9ydGVkKSByZXR1cm47XHJcblx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCkudGhlbigoZXhjdHJhY3RlZEFub3RhdGlvbnMpID0+IHtcclxuXHRcdFx0XHR0aGlzLm9uQWRkaW5nQW5vdGF0aW9uLmVtaXQoZXhjdHJhY3RlZEFub3RhdGlvbnMpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8gaWYgdHJhY2tpbmcgc2lnbmF0dXJlIGxvY2F0aW9uIGlzIGVuYWJsZSB0aGVuIGVtaXQgc2lnbmF0dXJlIG91dHNpZGUgd2l0aCBldmVyeSBjaGFuZ2VzIGluIGl0XHJcblx0XHRcdGlmICh0aGlzLnRyYWNrU2lnbmF0dXJlKSB7XHJcblx0XHRcdFx0dGhpcy5vblNpZ25hdHVyZVRyYWNraW5nLmVtaXQoeyBhbm90YXRpb25zOiBhbm5vdGF0aW9ucywgYWN0aW9uOiBhY3Rpb24gfSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aW1wb3J0U2lnbmF0dXJlKCkge1xyXG5cdFx0Y29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuXHRcdGNvbnN0IHNpZ25hdHVyZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcblxyXG5cdFx0ZG9jdW1lbnRWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5maXJzdFRpbWVMb2FkKSB7XHJcblx0XHRcdFx0c2lnbmF0dXJlVG9vbC5pbXBvcnRTaWduYXR1cmVzKFsuLi50aGlzLnVzZXJTaWduYXR1cmVzXSk7XHJcblx0XHRcdFx0dGhpcy5maXJzdFRpbWVMb2FkID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0aW5nU2F2ZWRTaWduYXR1cmUoKSB7XHJcblx0XHRjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG5cdFx0Y29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKTtcclxuXHRcdFNpZ25hdHVyZUNyZWF0ZVRvb2wub24oJ3NpZ25hdHVyZVNhdmVkJywgKGFubm90YXRpb24pID0+IHtcclxuXHRcdFx0aWYgKCF0aGlzLmZpcnN0U2lnbmF0dXJlTG9hZCkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdzaWduYXR1cmUgc2F2ZWQgdHJpZ2VyZWQnKTtcclxuXHRcdFx0XHR0aGlzLm5ld1NpZ25DcmVhdGlvbiA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5maXJzdFNpZ25hdHVyZUxvYWQgPSBmYWxzZTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0aW5nU2lnbmF0dXJlKCkge1xyXG5cdFx0Y29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuXHRcdGNvbnN0IFNpZ25hdHVyZUNyZWF0ZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcblx0XHRTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdhbm5vdGF0aW9uQWRkZWQnLCAoYW5ub3RhdGlvbikgPT4ge1xyXG5cdFx0XHRpZiAoYW5ub3RhdGlvbiAmJiB0aGlzLm5ld1NpZ25DcmVhdGlvbikge1xyXG5cdFx0XHRcdHRoaXMubmV3U2lnbkNyZWF0aW9uID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5leHRyYWN0QW5vdGF0aW9uKGFubm90YXRpb24sIGRvY3VtZW50Vmlld2VyKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhhbm5vdGF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRleHRyYWN0QW5vdGF0aW9uKGFubm90YXRpb24sIGRvY3VtZW50Vmlld2VyKSB7XHJcblx0XHRpZiAoYW5ub3RhdGlvblsnaW1hZ2UnXSkge1xyXG5cdFx0XHQvLyBjb252ZXJ0IGJhc2U2NCBzaWduYXR1cmUgaW50byBmaWxlIGFuZCBlbWl0IGl0IHRvIG91dCBzaWRlXHJcblx0XHRcdGxldCBiYXNlNjRJbWcgPSBhbm5vdGF0aW9uWydpbWFnZSddWydjdXJyZW50U3JjJ107XHJcblx0XHRcdHZhciBhcnIgPSBiYXNlNjRJbWcuc3BsaXQoJywnKSxcclxuXHRcdFx0XHRtaW1lID0gYXJyWzBdLm1hdGNoKC86KC4qPyk7LylbMV0sXHJcblx0XHRcdFx0YnN0ciA9IGF0b2IoYXJyWzFdKSxcclxuXHRcdFx0XHRuID0gYnN0ci5sZW5ndGgsXHJcblx0XHRcdFx0dThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcclxuXHRcdFx0d2hpbGUgKG4tLSkge1xyXG5cdFx0XHRcdHU4YXJyW25dID0gYnN0ci5jaGFyQ29kZUF0KG4pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBuYW1lID0gbWltZS5yZXBsYWNlKCcvJywgJy4nKTtcclxuXHRcdFx0bGV0IG15RmlsZSA9IG5ldyBGaWxlKFt1OGFycl0sICdteVNpZ25hdHVyZS5wbmcnLCB7IHR5cGU6IG1pbWUgfSk7XHJcblx0XHRcdHRoaXMuU2lnbmF0dXJlRXZlbnQuZW1pdCh7IGRhdGE6IG15RmlsZSwgZXZlbnROYW1lOiAnZXhwb3J0JyB9KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiwgZG9jdW1lbnRWaWV3ZXIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXN5bmMgZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiwgZG9jVmlld2VyKSB7XHJcblx0XHQvLyBDcmVhdGUgYSBuZXcgQ2FudmFzIHRvIGRyYXcgdGhlIEFubm90YXRpb24gb25cclxuXHRcdGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG5cdFx0Ly8gUmVmZXJlbmNlIHRoZSBhbm5vdGF0aW9uIGZyb20gdGhlIERvY3VtZW50XHJcblx0XHRjb25zdCBwYWdlTWF0cml4ID0gZG9jVmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFnZU1hdHJpeChhbm5vdGF0aW9uLlBhZ2VOdW1iZXIpO1xyXG5cdFx0Ly8gU2V0IHRoZSBoZWlnaHQgJiB3aWR0aCBvZiB0aGUgY2FudmFzIHRvIG1hZGVsZXRlU2F2ZWRTaWduYXR1cmV0Y2ggdGhlIGFubm90YXRpb25cclxuXHRcdGNhbnZhcy5oZWlnaHQgPSBhbm5vdGF0aW9uLkhlaWdodDtcclxuXHRcdGNhbnZhcy53aWR0aCA9IGFubm90YXRpb24uV2lkdGg7XHJcblx0XHRjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHRcdC8vIFRyYW5zbGF0ZSB0aGUgQW5ub3RhdGlvbiB0byB0aGUgdG9wIFRvcCBMZWZ0IENvcm5lciBvZiB0aGUgQ2FudmFzIGllICgwLCAwKVxyXG5cdFx0Y3R4LnRyYW5zbGF0ZSgtYW5ub3RhdGlvbi5YLCAtYW5ub3RhdGlvbi5ZKTtcclxuXHRcdC8vIERyYXcgdGhlIEFubm90YXRpb24gb250byB0aGUgQ2FudmFzXHJcblx0XHRhbm5vdGF0aW9uLmRyYXcoY3R4LCBwYWdlTWF0cml4KTtcclxuXHRcdC8vIENvbnZlcnQgdGhlIENhbnZhcyB0byBhIEJsb2IgT2JqZWN0IGZvciBVcGxvYWRcclxuXHRcdGNhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcclxuXHRcdFx0Ly8gQ2FsbCB5b3VyIEJsb2IgU3RvcmFnZSBVcGxvYWQgRnVuY3Rpb25cclxuXHRcdFx0bGV0IG5hbWUgPSBibG9iLnR5cGUucmVwbGFjZSgnLycsICcuJyk7XHJcblx0XHRcdGxldCBteUZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIG5hbWUpO1xyXG5cdFx0XHR0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiBteUZpbGUsIGV2ZW50TmFtZTogJ2V4cG9ydCcgfSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUFubm90YXRpb24oKSB7XHJcblx0XHRjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG5cdFx0Y29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKTtcclxuXHRcdFNpZ25hdHVyZUNyZWF0ZVRvb2wub24oJ3NpZ25hdHVyZURlbGV0ZWQnLCAoYW5ub3RhdGlvbiwgaW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ3RoZXJlIHdlcmUgYW5ub3RhdGlvbnMgZGVsZXRlZCcpO1xyXG5cdFx0XHR0aGlzLnVzZXJTaWduYXR1cmVzLnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdHRoaXMuU2lnbmF0dXJlRXZlbnQuZW1pdCh7IGRhdGE6IHsgc2lnbmF0dXJlOiBhbm5vdGF0aW9uLCBpbmRleDogaW5kZXggfSwgZXZlbnROYW1lOiAnZGVsZXRlJyB9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YWRkRG93bmxvYWRCdXR0b24oKSB7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuYWxsb3dEb3dubG9hZFNlY3JldEZpbGUgfHxcclxuXHRcdFx0KCF0aGlzLmFsbG93RG93bmxvYWRTZWNyZXRGaWxlICYmXHJcblx0XHRcdFx0dGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJlxyXG5cdFx0XHRcdHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllc1t0aGlzLnNlY3JlY3lQcm9wZXJ0eV0gPT09ICdOb3JtYWwnKVxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2Uuc2V0SGVhZGVySXRlbXMoKGhlYWRlcikgPT4ge1xyXG5cdFx0XHRcdGhlYWRlci5wdXNoKHtcclxuXHRcdFx0XHRcdHR5cGU6ICdhY3Rpb25CdXR0b24nLFxyXG5cdFx0XHRcdFx0aW1nOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiYmkgYmktZmlsZS1lYXJtYXJrLWFycm93LWRvd25cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+IDxwYXRoIGQ9XCJNOC41IDYuNWEuNS41IDAgMCAwLTEgMHYzLjc5M0w2LjM1NCA5LjE0NmEuNS41IDAgMSAwLS43MDguNzA4bDIgMmEuNS41IDAgMCAwIC43MDggMGwyLTJhLjUuNSAwIDAgMC0uNzA4LS43MDhMOC41IDEwLjI5M1Y2LjV6XCIvPiA8cGF0aCBkPVwiTTE0IDE0VjQuNUw5LjUgMEg0YTIgMiAwIDAgMC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJ6TTkuNSAzQTEuNSAxLjUgMCAwIDAgMTEgNC41aDJWMTRhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuNXYyelwiLz48L3N2Zz4nLFxyXG5cdFx0XHRcdFx0dGl0bGU6IHRoaXMuaXNBcmFiaWMgPyAn2KrZhtiy2YrZhCcgOiAnRG93bmxvYWQnLFxyXG5cdFx0XHRcdFx0b25DbGljazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zdCB7IERvY3VtZW50Vmlld2VyLCBBbm5vdGF0aW9uTWFuYWdlciwgU2F2ZU9wdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zdCB4ZmRmU3RyaW5nID0gYXdhaXQgQW5ub3RhdGlvbk1hbmFnZXIuZXhwb3J0QW5ub3RhdGlvbnMoKTtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2F2ZU9wdGlvbnMgPSBTYXZlT3B0aW9ucztcclxuXHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcclxuXHRcdFx0XHRcdFx0XHRmaWxlbmFtZTogdGhpcy5jb3JyZXNwb25kYW5jZS50aXRsZSA/IHRoaXMuY29ycmVzcG9uZGFuY2UudGl0bGUgOiAnbXlEb2N1bWVudC5wZGYnLFxyXG5cdFx0XHRcdFx0XHRcdC8vIHhmZGZTdHJpbmcsXHJcblx0XHRcdFx0XHRcdFx0ZmxhZ3M6IHNhdmVPcHRpb25zLkxJTkVBUklaRUQsXHJcblx0XHRcdFx0XHRcdFx0ZG93bmxvYWRUeXBlOiAncGRmJ1xyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5kb3dubG9hZFBkZihvcHRpb25zKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5ldmVudHMubmV4dCgnZG93bmxvYWQnKTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIGxldCB1cmwgPSB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXMuY29udGVudC5kYXRhO1xyXG5cdFx0XHRcdFx0XHQvLyBsZXQgZmlsZU5hbWUgPSB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXMuY29udGVudC5uYW1lO1xyXG5cdFx0XHRcdFx0XHQvLyBpZiAodXJsICYmIGZpbGVOYW1lKSB7XHJcblx0XHRcdFx0XHRcdC8vICAgbGV0IHNhZmVVcmwgPSB0aGlzLnNlY3VyZVBpcGUudHJhbnNmb3JtKHVybCk7XHJcblx0XHRcdFx0XHRcdC8vICAgc2FmZVVybC5zdWJzY3JpYmUoKHVybDogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cdFx0XHRcdFx0XHQvLyAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0XHQvLyAgICAgbGluay5ocmVmID0gdXJsLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7XHJcblx0XHRcdFx0XHRcdC8vICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcblx0XHRcdFx0XHRcdC8vICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG5cdFx0XHRcdFx0XHQvLyAgICAgbGluay5jbGljaygpO1xyXG5cdFx0XHRcdFx0XHQvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuXHRcdFx0XHRcdFx0Ly8gICAgIHRoaXMuZXZlbnRzLm5leHQoJ2Rvd25sb2FkJyk7XHJcblx0XHRcdFx0XHRcdC8vICAgfSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhZGRQcmludEJ1dHRvbigpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5hbGxvd1ByaW50U2VjcmV0RmlsZSB8fFxyXG5cdFx0XHQoIXRoaXMuYWxsb3dQcmludFNlY3JldEZpbGUgJiZcclxuXHRcdFx0XHR0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldICYmXHJcblx0XHRcdFx0dGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSA9PT0gJ05vcm1hbCcpXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRIZWFkZXJJdGVtcygoaGVhZGVyKSA9PiB7XHJcblx0XHRcdFx0aGVhZGVyLnB1c2goe1xyXG5cdFx0XHRcdFx0dHlwZTogJ2FjdGlvbkJ1dHRvbicsXHJcblx0XHRcdFx0XHRpbWc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNhYmIwYzQ7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5pY29uIC0gaGVhZGVyIC0gcHJpbnQgLSBsaW5lPC90aXRsZT48cGF0aCBjbGFzcz1cImNscy0xXCIgZD1cIk0yMCw2SDE4VjJINlY2SDRBMiwyLDAsMCwwLDIsOHY5YTIsMiwwLDAsMCwyLDJINnYzSDE4VjE5aDJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyMCw2Wk04LDRoOFY2SDhabTgsMTZIOFYxNmg4Wm00LTNIMThWMTRINnYzSDRWOEgyMFptLTQtN2gydjJIMTZabS0zLDBoMnYySDEzWlwiPjwvcGF0aD48L3N2Zz4nLFxyXG5cdFx0XHRcdFx0dGl0bGU6IHRoaXMuaXNBcmFiaWMgPyAn2LfYqNin2LnYqScgOiAnUHJpbnQnLFxyXG5cdFx0XHRcdFx0b25DbGljazogKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBkZnRyb25TZXJ2aWNlLmluc3RhbmNlLnByaW50KCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXZlbnRzLm5leHQoJ3ByaW50Jyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoWydwcmludE1vZGFsJ10pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YWRkV2F0ZXJtYXJrKCkge1xyXG5cdFx0Y29uc3QgdXNlcmluZm8gPSB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcztcclxuXHRcdHRoaXMucGRmdHJvblNlcnZpY2UuYWRkV2F0ZXJtYXJrKFxyXG5cdFx0XHRgJHt1c2VyaW5mby51c2VybmFtZX0gICAgYFxyXG5cdFx0XHQvLyBgJHt1c2VyaW5mby5maXJzdE5hbWV9ICR7XHJcblx0XHRcdC8vICAgdXNlcmluZm8ubGFzdE5hbWVcclxuXHRcdFx0Ly8gfSBgXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0I2RvY0xvYWRlZCA9ICgpID0+IHtcclxuXHRcdGxldCBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFdpZHRoO1xyXG5cdFx0aWYgKHRoaXMuZml0TW9kZSA9PT0gJ0ZpdFBhZ2UnKSB7XHJcblx0XHRcdGZpdE1vZGUgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLkZpdE1vZGUuRml0UGFnZTtcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5maXRNb2RlID09PSAnWm9vbScpIHtcclxuXHRcdFx0Zml0TW9kZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuRml0TW9kZS5ab29tO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRGaXRNb2RlKGZpdE1vZGUpO1xyXG5cdH07XHJcblx0bG9hZERvY3VtZW50KCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLndlYlZpZXdlckluc3RhbmNlIHx8ICghdGhpcy5maWxlRGF0YSAmJiAhdGhpcy5maWxlVVJMKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCB7IGRvY1ZpZXdlciwgYW5ub3RNYW5hZ2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuXHRcdGRvY1ZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCB0aGlzLiNkb2NMb2FkZWQpO1xyXG5cdFx0aWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcblx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnNldFJlYWRPbmx5KHRydWUpO1xyXG5cdFx0XHQvLyBpbnN0YW5jZS5lbmFibGVUb29scyhbXSk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5maWxlVVJMICYmIHRoaXMuZmlsZVVSTC5sZW5ndGgpIHtcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQodGhpcy5maWxlVVJMLCB7XHJcblx0XHRcdFx0eG9kc3RyZWFtaW5nOiB0cnVlLFxyXG5cdFx0XHRcdGN1c3RvbUhlYWRlcnM6IHtcclxuXHRcdFx0XHRcdEF1dGhvcml6YXRpb246IHRoaXMuYXV0aEhlYWRlclxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQobmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHRoaXMuZmlsZURhdGEpXSwgeyB0eXBlOiB0aGlzLkRPQ1VNRU5UX1RZUEUgfSksIHtcclxuXHRcdFx0XHRmaWxlbmFtZTogdGhpcy5maWxlVGl0bGVcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcblx0XHQvLyBpZiBub3QgbmVnZWxjdGluZyBhZGRpbmcgd2F0ZXIgbWFyayB0aGVuIGNoZWNrIGNvbmRpdGlvbnMgZm9yIGFkZGluZyBpdFxyXG5cdFx0aWYgKCF0aGlzLm5lZ2VsZWN0QWRkaW5nV2F0ZXJNYXJrKSB7XHJcblx0XHRcdGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHQvLyBpZiB3ZSBuZWVkIHRvIGNoZWNrIG9uIHNlY3JlY3kgbGV2ZWwgZm9yIGFkZGluZyB3YXRlciBtYXJrIG9yIG5vdFxyXG5cdFx0XHRcdGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiB0aGlzLnNlY3JlY3lQcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0Ly8gY2hlY2sgZm9yIHNlY3JlY3kgbGV2ZWwgYmVmb3IgYWRkaW5nIHdhdGVybWFya1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldICYmXHJcblx0XHRcdFx0XHRcdHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllc1t0aGlzLnNlY3JlY3lQcm9wZXJ0eV0gIT09ICdOb3JtYWwnXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5hZGRXYXRlcm1hcmsoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlVmlld2VyV2F0ZXJNYXJrICYmICF0aGlzLnNlY3JlY3lQcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0dGhpcy5hZGRXYXRlcm1hcmsoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGV4cG9ydEFzQmxvYigpOiBQcm9taXNlPEJsb2I+IHtcclxuXHRcdGNvbnN0IGRvYyA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldERvY3VtZW50KCk7XHJcblx0XHRjb25zdCB4ZmRmU3RyaW5nID0gYXdhaXQgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZXhwb3J0QW5ub3RhdGlvbnMoKTtcclxuXHRcdGNvbnN0IGRhdGEgPSBhd2FpdCBkb2MuZ2V0RmlsZURhdGEoe1xyXG5cdFx0XHQvLyBzYXZlcyB0aGUgZG9jdW1lbnQgd2l0aCBhbm5vdGF0aW9ucyBpbiBpdFxyXG5cdFx0XHR4ZmRmU3RyaW5nXHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xyXG5cdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFthcnJdLCB7IHR5cGU6IHRoaXMuRE9DVU1FTlRfVFlQRSB9KTtcclxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYmxvYik7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVFZGl0KCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmFjdGlvbkNsaWNrZWQpIHtcclxuXHRcdFx0Ly8gYWN0aW9uIGNsaWNrZWQgaXMgbm90IGNsaWNrZWQgdGhlbiBubyB1cGRhdGUgbW9kZSBvcGVuZWRcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kaXNhYmxlRWxlbWVudHMoW1xyXG5cdFx0XHRcdCd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuXHRcdFx0XHQndG9vbGJhckdyb3VwLUVkaXQnLFxyXG5cdFx0XHRcdCd0b29sYmFyR3JvdXAtSW5zZXJ0JyxcclxuXHRcdFx0XHQndG9vbGJhckdyb3VwLUFubm90YXRlJ1xyXG5cdFx0XHRdKTtcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBlZGl0IG1vZGUgb3BlbmVkIGFuZCBtdXN0IGJlIHdoZW4gYWN0aW9uIGlzIGNsaWNrZWRcclxuXHRcdFx0aWYgKHRoaXMuZWRpdGluZ1R5cGUpIHtcclxuXHRcdFx0XHR0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcblx0XHRcdFx0XHQndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcblx0XHRcdFx0XHQndG9vbGJhckdyb3VwLUVkaXQnLFxyXG5cdFx0XHRcdFx0J3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG5cdFx0XHRcdFx0J3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZSdcclxuXHRcdFx0XHRdKTtcclxuXHRcdFx0XHRsZXQgZ3JvdXA7XHJcblx0XHRcdFx0aWYgKHRoaXMuZWRpdGluZ1R5cGUgPT09ICdzaWduRG9jJykge1xyXG5cdFx0XHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbJ3Rvb2xiYXJHcm91cC1JbnNlcnQnXSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmVkaXRpbmdUeXBlID09PSAnYW5ub3RhdGUnKSB7XHJcblx0XHRcdFx0XHR0aGlzLndlYlZpZXdlckluc3RhbmNlLmVuYWJsZUVsZW1lbnRzKFsndG9vbGJhckdyb3VwLVNoYXBlcycsICd0b29sYmFyR3JvdXAtRWRpdCcsICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuZW5hYmxlRWxlbWVudHMoW1xyXG5cdFx0XHRcdFx0J3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG5cdFx0XHRcdFx0J3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuXHRcdFx0XHRcdCd0b29sYmFyR3JvdXAtSW5zZXJ0JyxcclxuXHRcdFx0XHRcdCd0b29sYmFyR3JvdXAtQW5ub3RhdGUnXHJcblx0XHRcdFx0XSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkoZmFsc2UpO1xyXG5cdFx0XHQvLyB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldFRvb2xiYXJHcm91cCgndG9vbGJhckdyb3VwLUFubm90YXRlJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG5cdFx0XHR0aGlzLnRvZ2dsZUVkaXQoKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGNoYW5nZXMudXJsRmlsZUNvbnRlbnQgJiZcclxuXHRcdFx0XHRjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgJiZcclxuXHRcdFx0XHRjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMudXJsRmlsZUNvbnRlbnQuY3VycmVudFZhbHVlXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHRoaXMubmdPbkRlc3Ryb3koKTtcclxuXHRcdFx0XHR0aGlzLm5nT25Jbml0KCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGRmVHJvbkV2ZW50KGV2ZW50KSB7XHJcblx0XHRpZiAodGhpc1tldmVudC5hY3Rpb25dKSB7XHJcblx0XHRcdC8vIG1ldGhvZCBleGlzdHMgaW4gdGhlIGNvbXBvbmVudFxyXG5cdFx0XHQvLyAgdGhpc1tldmVudC5hY3Rpb25dKGV2ZW50LnBhcmFtcyk7IC8vIGNhbGwgaXRcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2VhcmNoIHJlc3VsdHMgc2VjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0cGFnZXM6IGFueTtcclxuXHRzdGFuZGFyZEhlaWdodDtcclxuXHRzdGFuZGFyZFdpZHRoO1xyXG5cdHBhZ2VIZWlnaHQ7XHJcblx0cGFnZVdpZHRoO1xyXG5cdHNhdmVkQW5vdGF0aW9ucyA9IFtdO1xyXG5cdGZpbGVXaXRoT2NyID0gZmFsc2U7XHJcblx0bmV3QW5ub3RhdGlvbnMgPSBbXTtcclxuXHRteVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuXHRyZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gW107XHJcblxyXG5cdC8vIGFkZGluZyBzZWFyY2ggbGlzbmVyIHRvIGxpc2VuIHRvIGludGVybmFsIHNlYXJjaCBmcm9tIHVpIGFuZCB3aXRob3V0IG9jclxyXG5cdGFkZFNlYXJjaExpc3RuZXIoKSB7XHJcblx0XHRjb25zdCB7IGFubm90TWFuYWdlciwgZG9jVmlld2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuXHRcdGNvbnN0IHNlYXJjaExpc3RlbmVyID0gKHNlYXJjaFBhdHRlcm4sIG9wdGlvbnMsIHJlc3VsdHMpID0+IHtcclxuXHRcdFx0dGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuXHRcdFx0aWYgKHRoaXMuc2F2ZWRBbm90YXRpb25zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLnNhdmVkQW5vdGF0aW9ucy5tYXAoKGFubm90YXRpb24pID0+IHtcclxuXHRcdFx0XHRcdGFubm90YXRpb24uSGlkZGVuID0gdHJ1ZTtcclxuXHRcdFx0XHRcdC8vIEFsd2F5cyByZWRyYXcgYW5ub3RhdGlvbiBpZiByZW5kZXJpbmcgd2FzIHVwZGF0ZWRcclxuXHRcdFx0XHRcdGFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGFubm90YXRpb24pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGRvbid0IGRvIGFueSBzZWFyY2ggdW50aWwgdGhlcmUgaXMgYSBzZWFyY2ggcGF0dGVyblxyXG5cdFx0XHRpZiAoc2VhcmNoUGF0dGVybi50cmltKCkubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdC8vIGFkZCByZWRhY3Rpb24gYW5ub3RhdGlvbiBmb3IgZWFjaCBzZWFyY2ggcmVzdWx0XHJcblx0XHRcdFx0dGhpcy5uZXdBbm5vdGF0aW9ucyA9IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuXHRcdFx0XHRcdGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKChxdWFkKSA9PiBxdWFkLmdldFBvaW50cygpKTtcclxuXHRcdFx0XHRcdGFubm90YXRpb24uUGFnZU51bWJlciA9IHJlc3VsdC5wYWdlTnVtO1xyXG5cdFx0XHRcdFx0YW5ub3RhdGlvbi5TdHJva2VDb2xvciA9IG5ldyBBbm5vdGF0aW9ucy5Db2xvcigyNTAsIDIwNiwgMCwgMC41MDE5Nik7XHJcblx0XHRcdFx0XHRhbm5vdGF0aW9uLkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbjtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnNhdmVkQW5vdGF0aW9ucy5wdXNoKC4uLnRoaXMubmV3QW5ub3RhdGlvbnMpO1xyXG5cdFx0XHRcdGFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9ucyh0aGlzLm5ld0Fubm90YXRpb25zKTtcclxuXHRcdFx0XHRhbm5vdE1hbmFnZXIuZHJhd0Fubm90YXRpb25zRnJvbUxpc3QodGhpcy5uZXdBbm5vdGF0aW9ucyk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdGRvY1ZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcblx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuYWRkU2VhcmNoTGlzdGVuZXIoc2VhcmNoTGlzdGVuZXIpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBwZXJmb3JtIGF1dG9tYXRpYyBzZWFyY2ggd2hlbiBpbnRlcmluZyB0aGUgcGFnZVxyXG5cdGF1dG9tYXRpY1NlYXJjaChzZWFyY2hUZXh0QXJyYXkpIHtcclxuXHRcdGNvbnN0IHsgYW5ub3RNYW5hZ2VyLCBkb2NWaWV3ZXIsIEFubm90YXRpb25zIH0gPSB0aGlzLndlYlZpZXdlckluc3RhbmNlO1xyXG5cdFx0bGV0IHNlYXJjaE9wdGlvbnM7XHJcblx0XHR0aGlzLndlYlZpZXdlckluc3RhbmNlLm9wZW5FbGVtZW50cyhbJ3NlYXJjaFBhbmVsJ10pO1xyXG5cdFx0ZG9jVmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuXHRcdFx0Y29uc3QgbW9kZSA9XHJcblx0XHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuUEFHRV9TVE9QIHxcclxuXHRcdFx0XHR0aGlzLndlYlZpZXdlckluc3RhbmNlLkNvcmVDb250cm9scy5TZWFyY2guTW9kZS5ISUdITElHSFQgfFxyXG5cdFx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzLlNlYXJjaC5Nb2RlLkFNQklFTlRfU1RSSU5HO1xyXG5cdFx0XHR0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyA9IFtdOyAvLyBlbXB0eSBteSBzZWFyY2ggcmVzdWx0IHdoZW4gc3RhcnRpbmcgbmV3IHNlYXJjaFxyXG5cdFx0XHRpZiAodGhpcy5maWxlV2l0aE9jcikge1xyXG5cdFx0XHRcdC8vIGFkZCByZWRhY3Rpb24gYW5ub3RhdGlvbiBmb3IgZWFjaCBzZWFyY2ggcmVzdWx0XHJcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbiA9IG5ldyBBbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG5cdFx0XHRcdHNlYXJjaFRleHRBcnJheS5tYXAoKHNlYXJjaFRleHQpID0+IHtcclxuXHRcdFx0XHRcdGxldCBteVNlYXJjaCA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcclxuXHRcdFx0XHRcdGlmIChteVNlYXJjaC5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0XHRcdC8vIHRoZW4gaSBhbSBzZWFyY2hpbmcgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmRcclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdlcy5wYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGFuZGFyZEhlaWdodCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoaW5kZXggKyAxKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoaW5kZXggKyAxKTtcclxuXHRcdFx0XHRcdFx0XHRwYWdlLnpvbmVzLmZvckVhY2goKHpvbmUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYWdyYXBoLmxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGluZS50ZXh0LmluY2x1ZGVzKHNlYXJjaFRleHQpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsIGxpbmUsIGluZGV4ICsgMSwgcGFnZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8vIHRoZW4gaSBhbSBzZWFyY2hpbmcgd2l0aCBvbmx5IG9uZSB3b3JkXHJcblx0XHRcdFx0XHRcdHRoaXMuc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoVGV4dCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0ZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG5cdFx0XHRcdHRoaXMuZGlzcGFsYXlTZWFyY2hSZXN1bHRzKGRvY1ZpZXdlcik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c2VhcmNoT3B0aW9ucyA9IHtcclxuXHRcdFx0XHRcdC8vIElmIHRydWUsIGEgc2VhcmNoIG9mIHRoZSBlbnRpcmUgZG9jdW1lbnQgd2lsbCBiZSBwZXJmb3JtZWQuIE90aGVyd2lzZSwgYSBzaW5nbGUgc2VhcmNoIHdpbGwgYmUgcGVyZm9ybWVkLlxyXG5cdFx0XHRcdFx0ZnVsbFNlYXJjaDogdHJ1ZSxcclxuXHRcdFx0XHRcdC8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBzZWFyY2ggcmV0dXJucyBhIHJlc3VsdC5cclxuXHRcdFx0XHRcdG9uUmVzdWx0OiAocmVzdWx0KSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIHdpdGggJ1BBR0VfU1RPUCcgbW9kZSwgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgYWZ0ZXIgZWFjaCBwYWdlIGhhcyBiZWVuIHNlYXJjaGVkLlxyXG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJlc3VsdENvZGUgPT09IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzLlNlYXJjaC5SZXN1bHRDb2RlLkZPVU5EKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbiA9IG5ldyBBbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKChxdWFkKSA9PiBxdWFkLmdldFBvaW50cygpKTtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhhbm5vdGF0aW9uLlF1YWRzKTtcclxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSByZXN1bHQucGFnZU51bTtcclxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uLlN0cm9rZUNvbG9yID0gbmV3IEFubm90YXRpb25zLkNvbG9yKDI1MCwgMjA2LCAwLCAwLjUwMTk2KTtcclxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uLkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlZEFub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uKTtcclxuXHRcdFx0XHRcdFx0XHRhbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbnMoW2Fubm90YXRpb25dKTtcclxuXHRcdFx0XHRcdFx0XHRhbm5vdE1hbmFnZXIuZHJhd0Fubm90YXRpb25zRnJvbUxpc3QoW2Fubm90YXRpb25dKTtcclxuXHRcdFx0XHRcdFx0XHRkb2NWaWV3ZXIuZGlzcGxheUFkZGl0aW9uYWxTZWFyY2hSZXN1bHRzKFtyZXN1bHRdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0c2VhcmNoVGV4dEFycmF5Lm1hcCgoc2VhcmNoZWRUZXh0KSA9PiB7XHJcblx0XHRcdFx0XHRkb2NWaWV3ZXIudGV4dFNlYXJjaEluaXQoc2VhcmNoZWRUZXh0LCBtb2RlLCBzZWFyY2hPcHRpb25zKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBzZWFyY2ggZm9yIHNpbmdsZSB3b3JkIGluIGFsbCBwYWdlc1xyXG5cdHNlYXJjaEZvcldvcmRJbkFsbFBhZ2VzKHNlYXJjaGVkV29yZCkge1xyXG5cdFx0dGhpcy5wYWdlcy5wYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG5cdFx0XHR0aGlzLnBhZ2VXaWR0aCA9IHBhZ2UucGFnZV93aWR0aDtcclxuXHRcdFx0dGhpcy5zdGFuZGFyZEhlaWdodCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VIZWlnaHQoaW5kZXggKyAxKTtcclxuXHRcdFx0dGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKGluZGV4ICsgMSk7XHJcblx0XHRcdGNvbnN0IHggPSB0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aDsgLy8gd2lkdGggcmF0aW9cclxuXHRcdFx0Y29uc3QgeSA9IHRoaXMucGFnZUhlaWdodCAvIHRoaXMuc3RhbmRhcmRIZWlnaHQ7IC8vIGhlaWdodCByYXRpb1xyXG5cdFx0XHRwYWdlLnpvbmVzLmZvckVhY2goKHpvbmUpID0+IHtcclxuXHRcdFx0XHR6b25lLnBhcmFncmFwaHMuZm9yRWFjaCgocGFyYWdyYXBoKSA9PiB7XHJcblx0XHRcdFx0XHRwYXJhZ3JhcGgubGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRsaW5lLndvcmRzLmZvckVhY2goKHdvcmQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAod29yZC50ZXh0LmluY2x1ZGVzKHNlYXJjaGVkV29yZCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGFubm90YXRpb24uUGFnZU51bWJlciA9IGluZGV4KzE7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgcXVhZHMgPSBbXHJcblx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4MTogd29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHgyOiB3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4Mzogd29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0eDQ6IHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR5MTogd29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHkyOiB3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueSAvIHksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0eTM6IHdvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHk0OiB3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5oaWdsaWdodFRleHQocXVhZHMsIGluZGV4ICsgMSk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbnN0cnVjdFNlYXJjaFJlc3VsdChzZWFyY2hlZFdvcmQsIGluZGV4ICsgMSwgcXVhZHMsIGxpbmUudGV4dCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Ly8gc2VhcmNoIGZvciB3b3JkIGluIHNpbmdsZSBsaW5lXHJcblx0U2VhcmNoRm9yV29yZEluTGluZShsaXN0T2ZTZWFyY2hlZFdvcmRzLCBsaW5lLCBwYWdlbnVtYmVyLCBwYWdlKSB7XHJcblx0XHR0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG5cdFx0dGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcblx0XHR0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodChwYWdlbnVtYmVyKTtcclxuXHRcdHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aChwYWdlbnVtYmVyKTtcclxuXHRcdGNvbnN0IHggPSB0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aDsgLy8gd2lkdGggcmF0aW9cclxuXHRcdGNvbnN0IHkgPSB0aGlzLnBhZ2VIZWlnaHQgLyB0aGlzLnN0YW5kYXJkSGVpZ2h0OyAvLyBoZWlnaHQgcmF0aW9cclxuXHRcdC8vIGZpbmQgb25seSB3b3JkcyByZWxhdGVkIHRvIG15IHNlYXJjaCBmb3JtIHRoZSBsaW5lXHJcblx0XHRsZXQgbXlGb3VuZGVkUmVzdWx0cyA9IFtdO1xyXG5cdFx0bGV0IGNvcnJlY3RSZXN1bHRzID0gW107XHJcblx0XHRsaW5lLndvcmRzLmZvckVhY2goKHdvcmQsIHdvcmRJbmRleCkgPT4ge1xyXG5cdFx0XHRpZiAobGlzdE9mU2VhcmNoZWRXb3Jkcy5pbmRleE9mKHdvcmQudGV4dCkgPiAtMSkge1xyXG5cdFx0XHRcdG15Rm91bmRlZFJlc3VsdHMucHVzaCh7IHdvcmQ6IHdvcmQsIHdvcmRJbmRleDogd29yZEluZGV4IH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBmaW5kIG9ubHkgd29yZHMgZXhpc3QgaW4gbXkgc2VhcmNoIHNlbnRlbmNlIGFuZCBub3Qgc2luZ2xlIGFuZCByZXBlYXRlZCB3b3JkXHJcblx0XHRteUZvdW5kZWRSZXN1bHRzLm1hcCgocmVzdWx0LCBpbmRleCkgPT4ge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bXlGb3VuZGVkUmVzdWx0c1tpbmRleF1bJ3dvcmRJbmRleCddIC0gMSA9PT1cclxuXHRcdFx0XHRcdChteUZvdW5kZWRSZXN1bHRzW2luZGV4IC0gMV0gJiYgbXlGb3VuZGVkUmVzdWx0c1tpbmRleCAtIDFdWyd3b3JkSW5kZXgnXSkgfHxcclxuXHRcdFx0XHQobXlGb3VuZGVkUmVzdWx0c1tpbmRleCArIDFdICYmXHJcblx0XHRcdFx0XHRteUZvdW5kZWRSZXN1bHRzW2luZGV4ICsgMV1bJ3dvcmRJbmRleCddIC0gMSA9PT0gbXlGb3VuZGVkUmVzdWx0c1tpbmRleF1bJ3dvcmRJbmRleCddKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRjb3JyZWN0UmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIGhpZ2hsaWh0IHRoZXNlIHdvcmRzIGFmdGVyIGVsZW1pbmF0aW5nIGFsbCByZXBlYXRlZCBhbmQgcmVsYXRlZCB3b3Jkc1xyXG5cdFx0Ly8gbXVzdCBiZSBmb3IgbG9vcCBzcCBpIGNhbiBjb250cm9sIHRoZSBzdGVwIGluIGVhY2ggbG9vcFxyXG5cdFx0bGV0IHF1YWRzID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvcnJlY3RSZXN1bHRzLmxlbmd0aDsgaSA9IGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkge1xyXG5cdFx0XHRxdWFkcy5wdXNoKHtcclxuXHRcdFx0XHR4MTogY29ycmVjdFJlc3VsdHNbaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoIC0gMV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4LFxyXG5cdFx0XHRcdHgyOiBjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCxcclxuXHRcdFx0XHR4MzogY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgsXHJcblx0XHRcdFx0eDQ6IGNvcnJlY3RSZXN1bHRzW2kgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCAtIDFdLndvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCxcclxuXHRcdFx0XHR5MTogY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5LFxyXG5cdFx0XHRcdHkyOiBjb3JyZWN0UmVzdWx0c1tpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGggLSAxXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueSAvIHksXHJcblx0XHRcdFx0eTM6IGNvcnJlY3RSZXN1bHRzW2kgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCAtIDFdLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5LFxyXG5cdFx0XHRcdHk0OiBjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5oaWdsaWdodFRleHQocXVhZHMsIHBhZ2VudW1iZXIpO1xyXG5cdFx0XHR0aGlzLmNvbnN0cnVjdFNlYXJjaFJlc3VsdChsaXN0T2ZTZWFyY2hlZFdvcmRzLmpvaW4oJyAnKSwgcGFnZW51bWJlciwgcXVhZHMsIGxpbmUudGV4dCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRUZXh0LCBwYWdlTnVtLCBxdWFkcywgbGluZSkge1xyXG5cdFx0bGV0IG15U2VhcmNoU3RhcnRUZXh0SW5kZXggPSBsaW5lLmluZGV4T2Yoc2VhcmNoZWRUZXh0KTtcclxuXHRcdGxldCBteVNlZWFyY2hlZFRleHRFbmRJbmRleCA9IG15U2VhcmNoU3RhcnRUZXh0SW5kZXggKyBzZWFyY2hlZFRleHQubGVuZ3RoO1xyXG5cdFx0bGV0IHNlYXJjaFJlc3VsdE9iamVjdCA9IHtcclxuXHRcdFx0YW1iaWVudFN0cjogbGluZSxcclxuXHRcdFx0cmVzdWx0U3RyOiBzZWFyY2hlZFRleHQsXHJcblx0XHRcdHJlc3VsdFN0clN0YXJ0OiBteVNlYXJjaFN0YXJ0VGV4dEluZGV4LFxyXG5cdFx0XHRyZXN1bHRTdHJFbmQ6IG15U2VlYXJjaGVkVGV4dEVuZEluZGV4LFxyXG5cdFx0XHRwYWdlTnVtOiBwYWdlTnVtLFxyXG5cdFx0XHRyZXN1bHRDb2RlOiAyLFxyXG5cdFx0XHRxdWFkczogW1xyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGVhOiBxdWFkc1swXVsneTMnXSxcclxuXHRcdFx0XHRcdGZhOiBxdWFkc1swXVsneTQnXSxcclxuXHRcdFx0XHRcdGhhOiBxdWFkc1swXVsneDEnXSxcclxuXHRcdFx0XHRcdGlhOiBxdWFkc1swXVsneDInXSxcclxuXHRcdFx0XHRcdHBCOiBxdWFkc1swXVsneDMnXSxcclxuXHRcdFx0XHRcdHFCOiBxdWFkc1swXVsneDQnXSxcclxuXHRcdFx0XHRcdHJCOiBxdWFkc1swXVsneTEnXSxcclxuXHRcdFx0XHRcdHNCOiBxdWFkc1swXVsneTInXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XVxyXG5cdFx0fTtcclxuXHRcdHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzLnB1c2goc2VhcmNoUmVzdWx0T2JqZWN0KTtcclxuXHRcdGNvbnNvbGUubG9nKHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzKTtcclxuXHR9XHJcblxyXG5cdGRpc3BhbGF5U2VhcmNoUmVzdWx0cyhkb2NWaWV3ZXIpIHtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRkb2NWaWV3ZXIuZGlzcGxheUFkZGl0aW9uYWxTZWFyY2hSZXN1bHRzKHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzKTtcclxuXHRcdH0sIDUwMCk7XHJcblx0fVxyXG5cclxuXHQvLyBkcmF3IGhpbGlndGhpbmcgYXJvdW5kIGNlcnRhaW4gY2hhcmF0YWN0ZXJzXHJcblx0aGlnbGlnaHRUZXh0KHF1YWRzLCBwYWdlTnVtYmVyKSB7XHJcblx0XHRjb25zdCBoaWdobGlnaHRpbmdBbm5vdCA9IG5ldyB0aGlzLndlYlZpZXdlckluc3RhbmNlLkFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcblx0XHRoaWdobGlnaHRpbmdBbm5vdC5TdHJva2VDb2xvciA9IG5ldyB0aGlzLndlYlZpZXdlckluc3RhbmNlLkFubm90YXRpb25zLkNvbG9yKDI1MCwgMjA2LCAwLCAwLjUwMTk2KTtcclxuXHRcdGhpZ2hsaWdodGluZ0Fubm90LlF1YWRzID0gcXVhZHM7XHJcblx0XHRoaWdobGlnaHRpbmdBbm5vdC5QYWdlTnVtYmVyID0gcGFnZU51bWJlcjtcclxuXHRcdGhpZ2hsaWdodGluZ0Fubm90LkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7XHJcblx0XHR0aGlzLnNhdmVkQW5vdGF0aW9ucy5wdXNoKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuXHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmFkZEFubm90YXRpb24oaGlnaGxpZ2h0aW5nQW5ub3QpO1xyXG5cclxuXHRcdC8vIG5lZWQgdG8gZHJhdyB0aGUgYW5ub3RhdGlvbiBvdGhlcndpc2UgaXQgd29uJ3Qgc2hvdyB1cCB1bnRpbCB0aGUgcGFnZSBpcyByZWZyZXNoZWRcclxuXHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oaGlnaGxpZ2h0aW5nQW5ub3QpO1xyXG5cdH1cclxuXHJcblx0c2VhcmNoRm4gPSAoc2VhcmNoVmFsdWUsIG9wdGlvbnMpID0+IHtcclxuXHRcdHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107XHJcblx0XHRpZiAodGhpcy5zYXZlZEFub3RhdGlvbnMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLnNhdmVkQW5vdGF0aW9ucy5tYXAoKGFubm90YXRpb24pID0+IHtcclxuXHRcdFx0XHRhbm5vdGF0aW9uLkhpZGRlbiA9IHRydWU7XHJcblx0XHRcdFx0Ly8gQWx3YXlzIHJlZHJhdyBhbm5vdGF0aW9uIGlmIHJlbmRlcmluZyB3YXMgdXBkYXRlZFxyXG5cdFx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Ly8gZG9uJ3QgZG8gYW55IHNlYXJjaCB1bnRpbCB0aGVyZSBpcyBhIHNlYXJjaCBwYXR0ZXJuXHJcblx0XHRpZiAoc2VhcmNoVmFsdWUudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0aWYgKHRoaXMuZmlsZVdpdGhPY3IpIHtcclxuXHRcdFx0XHQvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG5cdFx0XHRcdC8vIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuXHRcdFx0XHRsZXQgbXlTZWFyY2ggPSBzZWFyY2hWYWx1ZS5zcGxpdCgnICcpO1xyXG5cdFx0XHRcdGlmIChteVNlYXJjaC5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0XHQvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JkXHJcblx0XHRcdFx0XHR0aGlzLnBhZ2VzLnBhZ2VzLmZvckVhY2goKHBhZ2UsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcblx0XHRcdFx0XHRcdHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodChpbmRleCArIDEpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoaW5kZXggKyAxKTtcclxuXHRcdFx0XHRcdFx0cGFnZS56b25lcy5mb3JFYWNoKCh6b25lKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0em9uZS5wYXJhZ3JhcGhzLmZvckVhY2goKHBhcmFncmFwaCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0cGFyYWdyYXBoLmxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxpbmUudGV4dC5pbmNsdWRlcyhzZWFyY2hWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsIGxpbmUsIGluZGV4ICsgMSwgcGFnZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggb25seSBvbmUgd29yZFxyXG5cdFx0XHRcdFx0dGhpcy5zZWFyY2hGb3JXb3JkSW5BbGxQYWdlcyhzZWFyY2hWYWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG5cdFx0XHRcdHRoaXMuZGlzcGFsYXlTZWFyY2hSZXN1bHRzKHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuY2xlYXJTZWFyY2hSZXN1bHRzKCk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnNpbGVudFBkZlRyb25TZXJ2aWNlLmlzRW5hYmxlZCkge1xyXG5cdFx0XHR0aGlzLiNyZXNldCgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMud2ViVmlld2VySW5zdGFuY2UpIHtcclxuXHRcdFx0XHR0aGlzLndlYlZpZXdlckluc3RhbmNlLmNsb3NlRG9jdW1lbnQoKS50aGVuKCgpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdkb2N1bWVudCBjbG9zZWQhJyk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24gPyB0aGlzLnRyYW5zZWxhdGlvblN1YnNjcml0aW9uLnVuc3Vic2NyaWJlKCkgOiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0I3Jlc2V0KCkge1xyXG5cdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5jbG9zZURvY3VtZW50KCkudGhlbigoKSA9PiB7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdkb2N1bWVudCBjbG9zZWQhJyk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UgPSBudWxsO1xyXG5cdFx0dGhpcy50cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA/IHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24udW5zdWJzY3JpYmUoKSA6IG51bGw7XHJcblxyXG5cdFx0dGhpcy5zaWxlbnRQZGZUcm9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHR0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcblxyXG5cdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRIZWFkZXJJdGVtcygoaGVhZGVyKSA9PiB7XHJcblx0XHRcdGhlYWRlci5oZWFkZXJzLmRlZmF1bHQgPSBoZWFkZXIuaGVhZGVycy5kZWZhdWx0LmZpbHRlcigocSkgPT4gIXEuaW1nPy5pbmNsdWRlcygnPHN2ZycpKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIub2ZmKCdkb2N1bWVudExvYWRlZCcsIHRoaXMuI2RvY0xvYWRlZCk7XHJcblx0XHQvLyBtYXliZSB3aWxsIG5lZWQgdG8gcmVzZXQgc2lnbmF0dXJlICYgYW5ub3RhdGlvbnNcclxuXHR9XHJcbn1cclxuIiwiPGRpdiAjZmlsZVZpZXdlciBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCI+PC9kaXY+XHJcbiJdfQ==
|