@colijnit/homedecorator 256.1.0 → 256.1.3
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/app/core/model/homedecorator-settings.d.ts +1 -0
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/help/help-dialog/help-dialog.component.scss +10 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +5 -11
- package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +1 -0
- package/app/plugins/render/service/new-render.service.d.ts +0 -2
- package/app/plugins/render/service/render.service.d.ts +1 -2
- package/assets/hdri/std_env_v2_A.hdr +0 -0
- package/assets/hdri/std_env_v2_B.hdr +0 -0
- package/assets/hdri/std_env_v2_C.hdr +0 -0
- package/assets/hdri/std_env_v2_D.hdr +0 -0
- package/assets/hdri/std_env_v2_E.hdr +46 -0
- package/bundles/colijnit-homedecorator.umd.js +106 -253
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/core/model/homedecorator-settings.js +1 -1
- package/esm2015/app/core/service/homedecorator-settings.service.js +4 -1
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/service/lights.service.js +6 -5
- package/esm2015/app/plugins/core3d/service/scene.service.js +20 -20
- package/esm2015/app/plugins/help/help-dialog/help-dialog.component.js +1 -1
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +50 -75
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +23 -15
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -3
- package/esm2015/app/plugins/render/service/new-render.service.js +1 -1
- package/esm2015/app/plugins/render/service/render.service.js +88 -77
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/floorplan.service.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +2 -2
- package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +7 -7
- package/esm2015/app/shared/category-library/category-library.component.js +1 -1
- package/fesm2015/colijnit-homedecorator.js +206 -202
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/homedecorator-globals.scss +3 -0
- package/package.json +1 -1
|
@@ -23,10 +23,8 @@ import { MessageType } from '../../../core/enum/message-type.enum';
|
|
|
23
23
|
import { LightCreateService } from '../../threedselector/threedselector/service/light-creation.service';
|
|
24
24
|
import { FileUtils } from '../../../core/utils/file.utils';
|
|
25
25
|
import { STLLoader } from 'three/examples/jsm/loaders/STLLoader';
|
|
26
|
-
import { BoxMeasurement } from '../../core3d/hud/bounding-measurement-box/box-measurement';
|
|
27
|
-
import { MeasurementUtils, positioningFactors, xDirection, yDirection, zDirection } from '../../core3d/hud/bounding-measurement-box/measurement-utils';
|
|
28
|
-
import { makeTextMesh } from '../../core3d/hud/utils';
|
|
29
26
|
import { IconEnum } from '../../../core/enum/icon.enum';
|
|
27
|
+
import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';
|
|
30
28
|
import * as i0 from "@angular/core";
|
|
31
29
|
import * as i1 from "../../../core/service/homedecorator-settings.service";
|
|
32
30
|
import * as i2 from "../../../core/service/homedecorator-icon-cache.service";
|
|
@@ -190,19 +188,14 @@ export class ModelPreviewComponent {
|
|
|
190
188
|
// add timestamp
|
|
191
189
|
const timestamp = new Date().getTime();
|
|
192
190
|
const exportFileName = this._setModelName(this.glbExportName.nativeElement.value) + '_' + timestamp;
|
|
193
|
-
const elementsToRemove = ['modelBoxhelper', 'Reference_model', 'floor_plane', 'GridHelper', 'Ambient', 'Directional front-left', 'spot back (anti-sun)', 'boxHeight', 'boxWidth', 'boxDepth'];
|
|
194
191
|
const gltfExporter = new GLTFExporter();
|
|
195
192
|
let scene;
|
|
196
193
|
scene = this.scenePreview.clone();
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
elementsToRemove.forEach(elementName => {
|
|
203
|
-
const selectedObject = scene.getObjectByName(elementName);
|
|
204
|
-
scene.remove(selectedObject);
|
|
205
|
-
});
|
|
194
|
+
const model = this.scenePreview.getObjectByName(this.modelName).clone();
|
|
195
|
+
while (scene.children.length > 0) {
|
|
196
|
+
scene.remove(scene.children[0]);
|
|
197
|
+
}
|
|
198
|
+
scene.add(model);
|
|
206
199
|
const options = {
|
|
207
200
|
trs: false,
|
|
208
201
|
onlyVisible: true,
|
|
@@ -393,8 +386,7 @@ export class ModelPreviewComponent {
|
|
|
393
386
|
_getBoundingBox(object) {
|
|
394
387
|
const boundingBox = new Box3().setFromObject(object);
|
|
395
388
|
this.boundingBoxSize = boundingBox.getSize(new Vector3());
|
|
396
|
-
this._setMeasurements(
|
|
397
|
-
this._showMeasurements();
|
|
389
|
+
this._setMeasurements(object);
|
|
398
390
|
const modelBoxhelper = this.scenePreview.getObjectByName('modelBoxhelper');
|
|
399
391
|
this.scenePreview.remove(modelBoxhelper);
|
|
400
392
|
const boxHelper = new BoxHelper(object);
|
|
@@ -402,65 +394,50 @@ export class ModelPreviewComponent {
|
|
|
402
394
|
boxHelper.name = 'modelBoxhelper';
|
|
403
395
|
this.scenePreview.add(boxHelper);
|
|
404
396
|
}
|
|
405
|
-
|
|
406
|
-
const
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
const setHeight = this._createHeightMeasurement(boundingBox.y);
|
|
411
|
-
this._measurements.push(setHeight);
|
|
412
|
-
const setWidth = this._createWidthMeasurement(boundingBox.x);
|
|
413
|
-
this._measurements.push(setWidth);
|
|
414
|
-
const setDepth = this._createDepthMeasurement(boundingBox.z);
|
|
415
|
-
this._measurements.push(setDepth);
|
|
416
|
-
}
|
|
417
|
-
_createHeightMeasurement(heightInput) {
|
|
418
|
-
const height = new BoxMeasurement();
|
|
419
|
-
const heightString = MeasurementUtils.makeText(heightInput, this.unitsOfMeasurement, this.distanceStep);
|
|
420
|
-
const text = this._dictionaryService.get('LABEL_HEIGHT');
|
|
421
|
-
height.textMesh = makeTextMesh(heightString, this.font, 0xFF00FF, 0.08, false, false, text);
|
|
422
|
-
height.positions = this._calculateHeightPositions();
|
|
423
|
-
height.textMesh.name = 'boxHeight';
|
|
424
|
-
return height;
|
|
425
|
-
}
|
|
426
|
-
_createWidthMeasurement(widthInput) {
|
|
427
|
-
const width = new BoxMeasurement();
|
|
428
|
-
const widthString = MeasurementUtils.makeText(widthInput, this.unitsOfMeasurement, this.distanceStep);
|
|
429
|
-
const text = this._dictionaryService.get('LABEL_WIDTH');
|
|
430
|
-
width.textMesh = makeTextMesh(widthString, this.font, 0xFF00FF, 0.08, false, false, text);
|
|
431
|
-
width.positions = this._calculateWidthPositions();
|
|
432
|
-
width.textMesh.name = 'boxWidth';
|
|
433
|
-
return width;
|
|
434
|
-
}
|
|
435
|
-
_createDepthMeasurement(depthInput) {
|
|
436
|
-
const depth = new BoxMeasurement();
|
|
437
|
-
const depthString = MeasurementUtils.makeText(depthInput, this.unitsOfMeasurement, this.distanceStep);
|
|
438
|
-
const text = this._dictionaryService.get('LABEL_DEPTH');
|
|
439
|
-
depth.textMesh = makeTextMesh(depthString, this.font, 0xFF00FF, 0.08, false, false, text);
|
|
440
|
-
depth.positions = this._calculateDepthPositions();
|
|
441
|
-
depth.textMesh.name = 'boxDepth';
|
|
442
|
-
return depth;
|
|
443
|
-
}
|
|
444
|
-
_calculateHeightPositions() {
|
|
445
|
-
return positioningFactors.map(([j, k]) => {
|
|
446
|
-
return new THREE.Vector3()
|
|
447
|
-
.addScaledVector(xDirection, j / 2 * this.boundingBoxSize.x)
|
|
448
|
-
.addScaledVector(zDirection, k / 2 * this.boundingBoxSize.z);
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
_calculateWidthPositions() {
|
|
452
|
-
return positioningFactors.map(([j, k]) => {
|
|
453
|
-
return new THREE.Vector3()
|
|
454
|
-
.addScaledVector(yDirection, j / 2 * this.boundingBoxSize.y)
|
|
455
|
-
.addScaledVector(zDirection, k / 2 * this.boundingBoxSize.z);
|
|
397
|
+
_setMeasurements(object) {
|
|
398
|
+
const elementsToRemove = ['HeightHelper', 'WidthHelper', 'DepthHelper'];
|
|
399
|
+
elementsToRemove.forEach(elementName => {
|
|
400
|
+
const selectedObject = this.scenePreview.getObjectByName(elementName);
|
|
401
|
+
this.scenePreview.remove(selectedObject);
|
|
456
402
|
});
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
403
|
+
const box = new Box3().setFromObject(object);
|
|
404
|
+
const boundingBox = box.getSize(new Vector3());
|
|
405
|
+
const height = boundingBox.y;
|
|
406
|
+
const width = boundingBox.x;
|
|
407
|
+
const depth = boundingBox.z;
|
|
408
|
+
const font = this._fontService.monospaceFont;
|
|
409
|
+
let heightLabelValue;
|
|
410
|
+
let widthLabelValue;
|
|
411
|
+
let depthLabelValue;
|
|
412
|
+
// labels cm of inch
|
|
413
|
+
if (this.unitsOfMeasurement === 'cm') {
|
|
414
|
+
heightLabelValue = height * 100;
|
|
415
|
+
widthLabelValue = width * 100;
|
|
416
|
+
depthLabelValue = depth * 100;
|
|
417
|
+
}
|
|
418
|
+
else if (this.unitsOfMeasurement === 'inches') {
|
|
419
|
+
heightLabelValue = height * 39.37;
|
|
420
|
+
widthLabelValue = width * 39.37;
|
|
421
|
+
depthLabelValue = depth * 39.37;
|
|
422
|
+
}
|
|
423
|
+
const widthLabel = this._create3DText(`Width: ${widthLabelValue.toFixed(0)}`, box.getCenter(new THREE.Vector3()).add(new THREE.Vector3(0, -height / 2, 0)), font, 'WidthHelper');
|
|
424
|
+
const heightLabel = this._create3DText(`Height: ${heightLabelValue.toFixed(0)}`, box.getCenter(new THREE.Vector3()).add(new THREE.Vector3(width / 2 + 0.1, 0, 0)), font, 'HeightHelper');
|
|
425
|
+
const depthLabel = this._create3DText(`Depth: ${depthLabelValue.toFixed(0)}`, box.getCenter(new THREE.Vector3()).add(new THREE.Vector3(0, 0, -depth / 2 - 0.1)), font, 'DepthHelper');
|
|
426
|
+
this.scenePreview.add(widthLabel);
|
|
427
|
+
this.scenePreview.add(heightLabel);
|
|
428
|
+
this.scenePreview.add(depthLabel);
|
|
429
|
+
}
|
|
430
|
+
_create3DText(text, position, font, name) {
|
|
431
|
+
const textGeometry = new TextGeometry(text, {
|
|
432
|
+
font: font,
|
|
433
|
+
size: 0.1,
|
|
434
|
+
height: 0.02,
|
|
463
435
|
});
|
|
436
|
+
const textMaterial = new MeshBasicMaterial({ color: 0xFF00FF });
|
|
437
|
+
const textMesh = new Mesh(textGeometry, textMaterial);
|
|
438
|
+
textMesh.position.copy(position);
|
|
439
|
+
textMesh.name = name;
|
|
440
|
+
return textMesh;
|
|
464
441
|
}
|
|
465
442
|
_blobToArrayBuffer(blob) {
|
|
466
443
|
return new Promise((resolve, reject) => {
|
|
@@ -665,7 +642,6 @@ ModelPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
665
642
|
<button class="base-button exportButtonDark" (click)="exportSceneAsGLB('download')">Download</button>
|
|
666
643
|
|
|
667
644
|
<button (click)="closePreview()" class="base-button exportButtonDark">
|
|
668
|
-
<!-- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>-->
|
|
669
645
|
<span>Cancel</span>
|
|
670
646
|
</button>
|
|
671
647
|
</div>
|
|
@@ -822,7 +798,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
822
798
|
<button class="base-button exportButtonDark" (click)="exportSceneAsGLB('download')">Download</button>
|
|
823
799
|
|
|
824
800
|
<button (click)="closePreview()" class="base-button exportButtonDark">
|
|
825
|
-
<!-- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>-->
|
|
826
801
|
<span>Cancel</span>
|
|
827
802
|
</button>
|
|
828
803
|
</div>
|
|
@@ -842,4 +817,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
842
817
|
type: ViewChild,
|
|
843
818
|
args: ['heightArticle']
|
|
844
819
|
}] } });
|
|
845
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL21vZGVsLXVwbG9hZGVyL21vZGVsLXByZXZpZXdlci9tb2RlbC1wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLE1BQU0sRUFBcUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBQyxlQUFlLEVBQTBCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEYsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLElBQUksRUFDSixpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxLQUFLLEVBQ0wsT0FBTyxFQUNQLGFBQWEsRUFDZCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDdkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUcvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1B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Q0FBQyxHQUFHLEtBQUssQ0FBQztTQUMxQjtJQUNILENBQUM7O21IQTlnQlUscUJBQXFCLGtCQTRCdEIsZUFBZTt1R0E1QmQscUJBQXFCLG9RQTNKdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0pUOzRGQUdVLHFCQUFxQjtrQkE3SmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdKVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDOUM7OzBCQTZCSSxNQUFNOzJCQUFDLGVBQWU7dVpBM0JLLGFBQWE7c0JBQTFDLFNBQVM7dUJBQUMsVUFBVTtnQkFDYyxhQUFhO3NCQUEvQyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQm94SGVscGVyLFxyXG4gIENvbG9yLFxyXG4gIEdyaWRIZWxwZXIsXHJcbiAgTGlnaHQsXHJcbiAgTGluZWFyU1JHQkNvbG9yU3BhY2UsXHJcbiAgTWVzaCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBNZXNoUGhvbmdNYXRlcmlhbCxcclxuICBPYmplY3QzRCxcclxuICBQQ0ZTb2Z0U2hhZG93TWFwLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFBsYW5lR2VvbWV0cnksXHJcbiAgUE1SRU1HZW5lcmF0b3IsXHJcbiAgU2NlbmUsXHJcbiAgVmVjdG9yMyxcclxuICBXZWJHTFJlbmRlcmVyXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0Zsb2F0VHlwZSwgTGluZWFyVG9uZU1hcHBpbmd9IGZyb20gJ3RocmVlL3NyYy9jb25zdGFudHMnO1xyXG5pbXBvcnQge0dMVEZMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0dMVEZMb2FkZXInO1xyXG5pbXBvcnQge1JHQkVMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL1JHQkVMb2FkZXInO1xyXG5pbXBvcnQge09yYml0Q29udHJvbHN9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzJztcclxuaW1wb3J0IHtHTFRGRXhwb3J0ZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9leHBvcnRlcnMvR0xURkV4cG9ydGVyJztcclxuaW1wb3J0IHtGQlhMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZCWExvYWRlcic7XHJcbmltcG9ydCB7T0JKTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9PQkpMb2FkZXInO1xyXG5pbXBvcnQge1RoaXJkUGFydHlNb2RlbFNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvdGhpcmQtcGFydHktbW9kZWwuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtURFNMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL1REU0xvYWRlcic7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9saWdodC1wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xpZ2h0UHJvcGVydGllc30gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9saWdodC1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHtMaWdodEVudW19IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9saWdodC5lbnVtJztcclxuaW1wb3J0IHtMaWdodENyZWF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvbGlnaHQtY3JlYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7TGlnaHRQcmVzZXR9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvbGlnaHQtcHJlc2V0JztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvZmlsZS51dGlscyc7XHJcbmltcG9ydCB7U1RMTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9TVExMb2FkZXInO1xyXG5pbXBvcnQge0JveE1lYXN1cmVtZW50fSBmcm9tICcuLi8uLi9jb3JlM2QvaHVkL2JvdW5kaW5nLW1lYXN1cmVtZW50LWJveC9ib3gtbWVhc3VyZW1lbnQnO1xyXG5pbXBvcnQge1xyXG4gIE1lYXN1cmVtZW50VXRpbHMsXHJcbiAgcG9zaXRpb25pbmdGYWN0b3JzLFxyXG4gIHhEaXJlY3Rpb24sXHJcbiAgeURpcmVjdGlvbixcclxuICB6RGlyZWN0aW9uXHJcbn0gZnJvbSAnLi4vLi4vY29yZTNkL2h1ZC9ib3VuZGluZy1tZWFzdXJlbWVudC1ib3gvbWVhc3VyZW1lbnQtdXRpbHMnO1xyXG5pbXBvcnQge21ha2VUZXh0TWVzaH0gZnJvbSAnLi4vLi4vY29yZTNkL2h1ZC91dGlscyc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZvbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9mb250LnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZvbnR9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXInO1xyXG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvbWV0YWRhdGEnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb0RvbWFpblZhbHVlfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm8nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtbW9kZWwtcHJldmlldycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1jbG9zZS1wcmV2aWV3XCIgKGNsaWNrKT1cImNsb3NlUHJldmlldygpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlld1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlldy13aW5kb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlldy1jb250YWluZXJcIiBpZD1cImNhbnZhc0NvbnRhaW5lclwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LXdpbmRvdy1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2hvd1JlZmVyZW5jZU1vZGVsXCJcclxuICAgICAgICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNob3dSZWZlcmVuY2VNb2RlbCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgU2hvdyBSZWZlcmVuY2UgbW9kZWxcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzY2xhaW1lci10ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImRpc2NsYWltZXItdGV4dFwiPlxyXG4gICAgICAgICAgICAgIEdyaWQgc2NhbGU6IDEgdGlsZSA9IDF4MSBtZXRlclxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWFjdGlvbnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaGVpZ2h0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGgyPk1vZGVsIHNldHRpbmdzPC9oMj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxoMz5TY2FsZTo8L2gzPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImhlaWdodEFydGljbGVcIiAjaGVpZ2h0QXJ0aWNsZSBwbGFjZWhvbGRlcj1cIlNldCBtb2RlbCBoZWlnaHRcIj5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdHMtc2VsZWN0LWZvcm1cIj5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cInVuaXRzLW1hdC1zZWxlY3RcIiBbKHZhbHVlKV09XCJ1bml0c09mTWVhc3VyZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwidW5pdHMtbWF0LW9wdGlvblwiICpuZ0Zvcj1cImxldCB1bml0IG9mIHVuaXRzXCIgW3ZhbHVlXT1cInVuaXRcIj57eyB1bml0IH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFwcGx5LWJ1dHRvbiBiYXNlLWJ1dHRvblwiIChjbGljayk9XCJzY2FsZUFydGljbGUoKVwiPkFwcGx5PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm90YXRpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGgzPlJvdGF0aW9uOjwvaDM+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8cD5Sb3RhdGUgb24gWCBheGlzICg5MCBkZWdyZWVzKTwvcD5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicm90YXRlTW9kZWwoJ3gnLCAtbWF0aFBpIC8gMilcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGFzaC1idXR0b25cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJvdGF0ZU1vZGVsKCd4JywgbWF0aFBpIC8gMilcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiYWRkLWJ1dHRvblwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHA+Um90YXRlIG9uIFkgYXhpcyAoOTAgZGVncmVlcyk8L3A+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJvdGF0ZU1vZGVsKCd5JywgLW1hdGhQaSAvIDIpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRhc2gtYnV0dG9uXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyb3RhdGVNb2RlbCgneScsIG1hdGhQaSAvIDIpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImFkZC1idXR0b25cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxwPlJvdGF0ZSBvbiBaIGF4aXMgKDkwIGRlZ3JlZXMpPC9wPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyb3RhdGVNb2RlbCgneicsIC1tYXRoUGkgLyAyKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJkYXNoLWJ1dHRvblwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicm90YXRlTW9kZWwoJ3onLCBtYXRoUGkgLyAyKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJhZGQtYnV0dG9uXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdGF0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxoMz5Qb3NpdGlvbjo8L2gzPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHA+UmVzZXQgdG8gY29vcmRpbmF0ZXMgMCwwLDA8L3A+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tYXMtbGlua1wiIChjbGljayk9XCJtb3ZlTW9kZWwoJ2FsbCcsIDApXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInJldHJ5LWJ1dHRvblwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICBSZXNldFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxwPk1vdmUgb24gdGhlIFkgYXhpcyAoMC4wMSB1bml0KTwvcD5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibW92ZU1vZGVsKCd5JywgLTAuMDEpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRhc2gtYnV0dG9uXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJtb3ZlTW9kZWwoJ3knLCAgMC4wMSlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiYWRkLWJ1dHRvblwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlldy1pbmZvLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGgzPlByb3BlcnRpZXM6PC9oMz5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFN0YWNrYWJsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgU3RhY2thYmxlXHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0SGVpZ2h0QWRqdXN0YWJsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgSGVpZ2h0IGFkanVzdGFibGVcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLXBsYWNlbWVudC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bGFiZWw+UGxhY2VtZW50PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicGxhY2VtZW50T3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwic2VsZWN0ZWRQbGFjZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHBsYWNlbWVudE9wdGlvbiBvZiBwbGFjZW1lbnRPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBsYWNlbWVudE9wdGlvbi5jb2RlXCI+e3sgcGxhY2VtZW50T3B0aW9uLmRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlldy1pbmZvXCIgKm5nSWY9XCJ0aGlzLmRhdGFcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWluZm8tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWluZm8tbGVmdFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5TYXZlIGFzOjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlldy1pbmZvLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJmaWxlTmFtZVwiICNmaWxlTmFtZSB2YWx1ZT1cInt7IHRoaXMuZGF0YS5maWxlLmZpbGUubmFtZSB9fVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhc2UtYnV0dG9uIGV4cG9ydEJ1dHRvblwiIChjbGljayk9XCJleHBvcnRTY2VuZUFzR0xCKCd1cGxvYWQnKVwiPlVwbG9hZCBhbmQgYWRkIHRvIHNjZW5lPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJiYXNlLWJ1dHRvbiBleHBvcnRCdXR0b25EYXJrXCIgKGNsaWNrKT1cImV4cG9ydFNjZW5lQXNHTEIoJ2Rvd25sb2FkJylcIj5Eb3dubG9hZDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VQcmV2aWV3KClcIiBjbGFzcz1cImJhc2UtYnV0dG9uIGV4cG9ydEJ1dHRvbkRhcmtcIj5cclxuPCEtLSAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNhbmNlbDwvbWF0LWljb24+LS0+XHJcbiAgICAgICAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtcHJldmlldy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNb2RlbFByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZU5hbWUnKSBwdWJsaWMgZ2xiRXhwb3J0TmFtZTogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdoZWlnaHRBcnRpY2xlJykgcHVibGljIGhlaWdodEFydGljbGU6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHB1YmxpYyBzY2VuZVByZXZpZXc6IFRIUkVFLlNjZW5lO1xyXG4gIHB1YmxpYyBjYW1lcmFQcmV2aWV3OiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwdWJsaWMgcmVuZGVyZXJQcmV2aWV3OiBUSFJFRS5XZWJHTFJlbmRlcmVyO1xyXG4gIHB1YmxpYyBjb250cm9sczogT3JiaXRDb250cm9scztcclxuICBwdWJsaWMgYm91bmRpbmdCb3hTaXplOiBWZWN0b3IzO1xyXG4gIHB1YmxpYyBsb2FkZWRNb2RlbDogYW55O1xyXG4gIHB1YmxpYyB1bml0c09mTWVhc3VyZW1lbnQ6IHN0cmluZyA9ICdjbSc7XHJcbiAgcHVibGljIHVuaXRzOiBzdHJpbmdbXSA9IFsnY20nLCAnaW5jaGVzJ107XHJcbiAgcHVibGljIG1vZGVsTmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBtYXRoUGk6IG51bWJlciA9IE1hdGguUEk7XHJcbiAgcHVibGljIHNob3dSZWZlcmVuY2VNb2RlbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGZsb29yU2l6ZUhlaWdodDogbnVtYmVyID0gMTA7XHJcbiAgcHVibGljIGZsb29yU2l6ZVdpZHRoOiBudW1iZXIgPSAxMDtcclxuICBwdWJsaWMgZ3JpZFNpemU6IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBncmlkRGl2aXNpb246IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBkaXN0YW5jZVN0ZXA6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIGZvbnQ6IEZvbnQ7XHJcbiAgcHVibGljIHN0YWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoZWlnaHRBZGp1c3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHBsYWNlbWVudE9wdGlvbnM6IENvRG9tYWluVmFsdWVbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRQbGFjZW1lbnQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbWVhc3VyZW1lbnRzOiBCb3hNZWFzdXJlbWVudFtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7IGZpbGU6IGFueSB9LFxyXG4gICAgcHVibGljIHNldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHB1YmxpYyBpY29uQ2FjaGU6IEhvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8TW9kZWxQcmV2aWV3Q29tcG9uZW50PixcclxuICAgIHByaXZhdGUgX3RoaXJkUGFydHlNb2RlbFNlcnZpY2U6IFRoaXJkUGFydHlNb2RlbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2FkYXB0ZXJTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9saWdodFByZXNldHNTZXJ2aWNlOiBMaWdodFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGljdGlvbmFyeVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZvbnRTZXJ2aWNlOiBGb250U2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuZm9udCA9IHRoaXMuX2ZvbnRTZXJ2aWNlLmh1ZEZvbnQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFNjZW5lKCk7XHJcbiAgICB0aGlzLmxvYWRNb2RlbCh0aGlzLmRhdGEpO1xyXG4gICAgdGhpcy5fYWRhcHRlclNlcnZpY2UuZ2V0TW9kZWxQbGFjZW1lbnRPcHRpb25zKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnBsYWNlbWVudE9wdGlvbnMgPSByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0U2NlbmUoKTogdm9pZCB7XHJcbiAgICBjb25zdCB2aWV3U2NhbGU6IG51bWJlciA9IDEuMztcclxuXHJcbiAgICAvLyBpbml0IHNjZW5lXHJcbiAgICB0aGlzLnNjZW5lUHJldmlldyA9IG5ldyBTY2VuZSgpO1xyXG4gICAgLy8gaW5pdCByZW5kZXJlclxyXG4gICAgY29uc3QgY2FudlJlZmVyZW5jZTogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzQ29udGFpbmVyJyk7XHJcbiAgICBjb25zdCBjYW52YXNFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY29uc3QgY29udGV4dDogYW55ID0gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCd3ZWJnbDInLCB7YW50aWFsaWFzOiB0cnVlfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldyA9IG5ldyBXZWJHTFJlbmRlcmVyKHtcclxuICAgICAgY2FudmFzOiBjYW52YXNFbGVtZW50LFxyXG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxyXG4gICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgYW50aWFsaWFzOiB0cnVlLFxyXG4gICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWUsXHJcbiAgICAgIGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IHRydWVcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRDbGVhckNvbG9yKDB4ZmFmYWZhKTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LmF1dG9DbGVhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcudG9uZU1hcHBpbmcgPSBMaW5lYXJUb25lTWFwcGluZztcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNoYWRvd01hcC5lbmFibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNoYWRvd01hcC50eXBlID0gUENGU29mdFNoYWRvd01hcDtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3Lm91dHB1dENvbG9yU3BhY2UgPSBMaW5lYXJTUkdCQ29sb3JTcGFjZTtcclxuICAgIGNhbnZSZWZlcmVuY2UuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlclByZXZpZXcuZG9tRWxlbWVudCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5kb21FbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCAndGhyZWVkJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRTaXplKHdpbmRvdy5pbm5lckhlaWdodCAvIHZpZXdTY2FsZSwgd2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlLCB0cnVlKTtcclxuXHJcbiAgICAvLyBpbml0IGNhbWVyYVxyXG4gICAgdGhpcy5jYW1lcmFQcmV2aWV3ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKDQ1LCAxLCAwLjAxLCAxMDAwMDAwMDApO1xyXG4gICAgdGhpcy5jYW1lcmFQcmV2aWV3LnBvc2l0aW9uLnNldCgwLCAyLCAxMCk7XHJcbiAgICB0aGlzLmNhbWVyYVByZXZpZXcuYXNwZWN0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAvIHZpZXdTY2FsZSkgLyAod2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlKTtcclxuICAgIHRoaXMuY2FtZXJhUHJldmlldy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcblxyXG4gICAgdGhpcy5jb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKHRoaXMuY2FtZXJhUHJldmlldywgdGhpcy5yZW5kZXJlclByZXZpZXcuZG9tRWxlbWVudCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHRoaXMubG9hZEZsb29yUGxhbmUoKTtcclxuICAgIHRoaXMubG9hZFJlZmVyZW5jZU1vZGVsKCk7XHJcbiAgICB0aGlzLmxvYWRMaWdodHMoKTtcclxuXHJcbiAgICBjb25zdCBncmlkSGVscGVyOiBHcmlkSGVscGVyID0gbmV3IEdyaWRIZWxwZXIodGhpcy5ncmlkU2l6ZSwgdGhpcy5ncmlkRGl2aXNpb24pO1xyXG4gICAgZ3JpZEhlbHBlci5uYW1lID0gJ0dyaWRIZWxwZXInO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGdyaWRIZWxwZXIpO1xyXG5cclxuICAgIHRoaXMuX2FuaW1hdGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkRmxvb3JQbGFuZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBsYW5lR2VvbWV0cnk6IFBsYW5lR2VvbWV0cnkgPSBuZXcgUGxhbmVHZW9tZXRyeSh0aGlzLmZsb29yU2l6ZVdpZHRoLCB0aGlzLmZsb29yU2l6ZUhlaWdodCk7XHJcbiAgICBjb25zdCBwbGFuZU1hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7Y29sb3I6IDB4ODk5NDk5LCBzaWRlOiBUSFJFRS5Eb3VibGVTaWRlfSk7XHJcbiAgICBjb25zdCBwbGFuZSA9IG5ldyBNZXNoKHBsYW5lR2VvbWV0cnksIHBsYW5lTWF0ZXJpYWwpO1xyXG4gICAgcGxhbmUucm90YXRpb24ueCA9IC1NYXRoLlBJIC8gMjtcclxuICAgIHBsYW5lLnBvc2l0aW9uLnkgPSAwO1xyXG4gICAgcGxhbmUubmFtZSA9ICdmbG9vcl9wbGFuZSc7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQocGxhbmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRMaWdodHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsaXN0T2ZMaWdodFByZXNldHM6IExpZ2h0UHJlc2V0W10gPSB0aGlzLl9saWdodFByZXNldHNTZXJ2aWNlLmxvYWRlZExpZ2h0UHJlc2V0cztcclxuICAgIGNvbnN0IGxpZ2h0UHJlc2V0OiBMaWdodFByZXNldCA9IHRoaXMuX2xpZ2h0UHJlc2V0c1NlcnZpY2UuYWN0aXZlTGlnaHRQcmVzZXQ7XHJcbiAgICBmb3IgKGNvbnN0IGxpZ2h0UHJvcGVydGllcyBvZiBsaWdodFByZXNldC5saWdodHMpIHtcclxuICAgICAgdGhpcy5fY3JlYXRlTGlnaHRGcm9tUHJvcGVydGllcyhsaWdodFByb3BlcnRpZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRSZWZlcmVuY2VNb2RlbCgpOiB2b2lkIHtcclxuICAgIGxldCByZWZlcmVuY2VNb2RlbFBhdGg6IHN0cmluZyA9ICcnO1xyXG4gICAgY29uc3QgcmVmZXJlbmNlTW9kZWw6IHN0cmluZyA9ICdyZWZlcmVuY2VfcG9wLmdsYic7XHJcbiAgICBpZiAodGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoKSB7XHJcbiAgICAgIHJlZmVyZW5jZU1vZGVsUGF0aCA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnRocmVlREFzc2V0UGF0aCArICdhc3NldHMvJztcclxuICAgIH1cclxuICAgIGNvbnN0IGxvYWRlcjogR0xURkxvYWRlciA9IG5ldyBHTFRGTG9hZGVyKCk7XHJcbiAgICBsb2FkZXIubG9hZChyZWZlcmVuY2VNb2RlbFBhdGggKyByZWZlcmVuY2VNb2RlbCwgYXN5bmMgZ2x0ZiA9PiB7XHJcbiAgICAgIGdsdGYuc2NlbmUucG9zaXRpb24uc2V0KDMsIDAsIDMpO1xyXG4gICAgICBnbHRmLnNjZW5lLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICBnbHRmLnNjZW5lLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgICBnbHRmLnNjZW5lLm5hbWUgPSAnUmVmZXJlbmNlX21vZGVsJztcclxuICAgICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGdsdGYuc2NlbmUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZE1vZGVsKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWxOYW1lID0gdGhpcy5fc2V0TW9kZWxOYW1lKGlucHV0LmZpbGUuZmlsZS5uYW1lKTtcclxuICAgIGNvbnN0IGZpbGVUeXBlID0gaW5wdXQuZmlsZS5maWxlVHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGZpbGVUeXBlID09PSAnZ2xiJyB8fCBmaWxlVHlwZSA9PT0gJ2dsdGYnKSB7XHJcbiAgICAgIHRoaXMuX2dsYkxvYWRlcihpbnB1dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpbGVUeXBlID09PSAnZmJ4Jykge1xyXG4gICAgICB0aGlzLl9mYnhMb2FkZXIoaW5wdXQpO1xyXG4gICAgfSBlbHNlIGlmIChmaWxlVHlwZSA9PT0gJ29iaicpIHtcclxuICAgICAgdGhpcy5fb2JqTG9hZGVyKGlucHV0KTtcclxuICAgIH0gZWxzZSBpZiAoZmlsZVR5cGUgPT09ICczZHMnKSB7XHJcbiAgICAgIHRoaXMuX3Rkc0xvYWRlcihpbnB1dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpbGVUeXBlID09PSAnc3RsJykge1xyXG4gICAgICB0aGlzLl9zdGxMb2FkZXIoaW5wdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRIRFJJKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbmV3IFJHQkVMb2FkZXIoKS5zZXREYXRhVHlwZShGbG9hdFR5cGUpLmxvYWQocGF0aCwgKGhkclRleHR1cmUpID0+IHtcclxuICAgICAgICBjb25zdCBwbXJlbUdlbmVyYXRvcjogUE1SRU1HZW5lcmF0b3IgPSBuZXcgUE1SRU1HZW5lcmF0b3IodGhpcy5yZW5kZXJlclByZXZpZXcpO1xyXG4gICAgICAgIHBtcmVtR2VuZXJhdG9yLmNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKTtcclxuICAgICAgICBjb25zdCBoZHJDdWJlUmVuZGVyVGFyZ2V0ID0gcG1yZW1HZW5lcmF0b3IuZnJvbUVxdWlyZWN0YW5ndWxhcihoZHJUZXh0dXJlKTtcclxuICAgICAgICBoZHJUZXh0dXJlLmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLnNjZW5lUHJldmlldy5lbnZpcm9ubWVudCA9IGhkckN1YmVSZW5kZXJUYXJnZXQudGV4dHVyZTtcclxuICAgICAgICAvLyB0aGlzLnNjZW5lUHJldmlldy5iYWNrZ3JvdW5kID0gaGRyQ3ViZVJlbmRlclRhcmdldC50ZXh0dXJlO1xyXG4gICAgICAgIHBtcmVtR2VuZXJhdG9yLmRpc3Bvc2UoKTtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH0sIHVuZGVmaW5lZCwgcmVqZWN0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cG9ydFNjZW5lQXNHTEIocmV0dXJuVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBhZGQgdGltZXN0YW1wXHJcbiAgICBjb25zdCB0aW1lc3RhbXA6IG51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgZXhwb3J0RmlsZU5hbWU6IHN0cmluZyA9IHRoaXMuX3NldE1vZGVsTmFtZSh0aGlzLmdsYkV4cG9ydE5hbWUubmF0aXZlRWxlbWVudC52YWx1ZSkgKyAnXycgKyB0aW1lc3RhbXA7XHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFsnbW9kZWxCb3hoZWxwZXInLCAnUmVmZXJlbmNlX21vZGVsJywgJ2Zsb29yX3BsYW5lJywgJ0dyaWRIZWxwZXInLCAnQW1iaWVudCcsICdEaXJlY3Rpb25hbCBmcm9udC1sZWZ0JywgJ3Nwb3QgYmFjayAoYW50aS1zdW4pJywgJ2JveEhlaWdodCcsICdib3hXaWR0aCcsICdib3hEZXB0aCddO1xyXG4gICAgY29uc3QgZ2x0ZkV4cG9ydGVyOiBHTFRGRXhwb3J0ZXIgPSBuZXcgR0xURkV4cG9ydGVyKCk7XHJcbiAgICBsZXQgc2NlbmU6IFNjZW5lO1xyXG4gICAgc2NlbmUgPSB0aGlzLnNjZW5lUHJldmlldy5jbG9uZSgpO1xyXG4gICAgc2NlbmUuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcclxuICAgICAgaWYgKGMgaW5zdGFuY2VvZiBMaWdodCkge1xyXG4gICAgICAgIHNjZW5lLnJlbW92ZShjKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goZWxlbWVudE5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSBzY2VuZS5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICBzY2VuZS5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICB0cnM6IGZhbHNlLFxyXG4gICAgICBvbmx5VmlzaWJsZTogdHJ1ZSxcclxuICAgICAgdHJ1bmNhdGVEcmF3UmFuZ2U6IHRydWUsXHJcbiAgICAgIGJpbmFyeTogdHJ1ZSxcclxuICAgICAgbWF4VGV4dHVyZVNpemU6IEluZmluaXR5XHJcbiAgICB9O1xyXG4gICAgZ2x0ZkV4cG9ydGVyLnBhcnNlKHNjZW5lLCAocmVzdWx0OiBBcnJheUJ1ZmZlcikgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlOiBCbG9iID0gbmV3IEJsb2IoW3Jlc3VsdF0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xyXG4gICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3VwbG9hZCcpIHtcclxuICAgICAgICB0aGlzLl9zZW5kTW9kZWxUb0NETihgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRNb2RlbChgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LCAoZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH0sIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNjYWxlQXJ0aWNsZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKHRoaXMubW9kZWxOYW1lKTtcclxuICAgIGNvbnN0IGlucHV0SGVpZ2h0ID0gdGhpcy5oZWlnaHRBcnRpY2xlLm5hdGl2ZUVsZW1lbnQudmFsdWU7XHJcbiAgICBsZXQgaGVpZ2h0SW5NZXRlcjogbnVtYmVyO1xyXG4gICAgaWYgKHRoaXMudW5pdHNPZk1lYXN1cmVtZW50ID09PSAnY20nKSB7XHJcbiAgICAgIGhlaWdodEluTWV0ZXIgPSBpbnB1dEhlaWdodCAvIDEwMDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy51bml0c09mTWVhc3VyZW1lbnQgPT09ICdpbmNoZXMnKSB7XHJcbiAgICAgIGhlaWdodEluTWV0ZXIgPSAoaW5wdXRIZWlnaHQgKiAyLjU0KSAvIDEwMDtcclxuICAgIH1cclxuICAgIC8vIHNjYWxlID0gdGhpcy5ib3VuZGluZyAvIGhlaWdodEluTWV0ZXIgYW5kIHVzZSBZIGFzIHVwLyBoZWlnaHRcclxuICAgIGNvbnN0IHNjYWxlOiBudW1iZXIgPSB0aGlzLmJvdW5kaW5nQm94U2l6ZS55IC8gaGVpZ2h0SW5NZXRlcjtcclxuICAgIG1vZGVsLnNjYWxlLnNldChcclxuICAgICAgbW9kZWwuc2NhbGUueCAvIHNjYWxlLFxyXG4gICAgICBtb2RlbC5zY2FsZS55IC8gc2NhbGUsXHJcbiAgICAgIG1vZGVsLnNjYWxlLnogLyBzY2FsZSk7XHJcbiAgICB0aGlzLl9nZXRCb3VuZGluZ0JveChtb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm90YXRlTW9kZWwoYXhpczogc3RyaW5nLCBkZWdyZWVzOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKHRoaXMubW9kZWxOYW1lKTtcclxuICAgIGlmIChheGlzID09PSAneCcpIHtcclxuICAgICAgbW9kZWwucm90YXRpb24ueCArPSBkZWdyZWVzO1xyXG4gICAgfSBlbHNlIGlmIChheGlzID09PSAneScpIHtcclxuICAgICAgbW9kZWwucm90YXRpb24ueSArPSBkZWdyZWVzO1xyXG4gICAgfSBlbHNlIGlmIChheGlzID09PSAneicpIHtcclxuICAgICAgbW9kZWwucm90YXRpb24ueiArPSBkZWdyZWVzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZ2V0Qm91bmRpbmdCb3gobW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdmVNb2RlbChheGlzOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc2NlbmVQcmV2aWV3LmdldE9iamVjdEJ5TmFtZSh0aGlzLm1vZGVsTmFtZSk7XHJcbiAgICBpZiAoYXhpcyA9PT0gJ3gnKSB7XHJcbiAgICAgIG1vZGVsLnBvc2l0aW9uLnggKz0gYW1vdW50O1xyXG4gICAgfSBlbHNlIGlmIChheGlzID09PSAneScpIHtcclxuICAgICAgbW9kZWwucG9zaXRpb24ueSArPSBhbW91bnQ7XHJcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd6Jykge1xyXG4gICAgICBtb2RlbC5wb3NpdGlvbi56ICs9IGFtb3VudDtcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ2FsbCcpIHtcclxuICAgICAgbW9kZWwucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZ2V0Qm91bmRpbmdCb3gobW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFVuaXQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51bml0c09mTWVhc3VyZW1lbnQgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVTaG93UmVmZXJlbmNlTW9kZWwoJGV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RlbDogT2JqZWN0M0QgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUoJ1JlZmVyZW5jZV9tb2RlbCcpO1xyXG4gICAgbW9kZWwudmlzaWJsZSA9ICF0aGlzLnNob3dSZWZlcmVuY2VNb2RlbDtcclxuICAgIHRoaXMuc2hvd1JlZmVyZW5jZU1vZGVsID0gIXRoaXMuc2hvd1JlZmVyZW5jZU1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFN0YWNrYWJsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YWNrYWJsZSA9IGV2ZW50LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEhlaWdodEFkanVzdGFibGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWlnaHRBZGp1c3RhYmxlID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VQcmV2aWV3KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hbmltYXRlKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNldEFuaW1hdGlvbkxvb3AoKHRpbWVzdGFtcCwgZnJhbWUpID0+IHRoaXMuX3JlbmRlcih0aW1lc3RhbXAsIGZyYW1lKSk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyKHQsIGZyYW1lKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5yZW5kZXIodGhpcy5zY2VuZVByZXZpZXcsIHRoaXMuY2FtZXJhUHJldmlldyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kb3dubG9hZE1vZGVsKGZpbGVOYW1lOiBzdHJpbmcsIGJsb2I6IEJsb2IpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxBbmNob3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgZWxlbWVudC5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGVsZW1lbnQuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XHJcbiAgICBlbGVtZW50LmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2VuZE1vZGVsVG9DRE4oZmlsZU5hbWU6IHN0cmluZywgYmxvYjogQmxvYik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5wbGFjZW1lbnRPcHRpb25zW3RoaXMuc2VsZWN0ZWRQbGFjZW1lbnRdKTtcclxuICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgIHJlYWRlci5vbmxvYWRlbmQgPSBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlQXNTdHJpbmc6IHN0cmluZyA9IEZpbGVVdGlscy5TdHJpcE1pbWVTdHJpbmdGcm9tRGF0YVVyaShldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgdGhpcy5fYWRhcHRlclNlcnZpY2Uuc3RvcmUzRE1vZGVsQ0ROKGZpbGVOYW1lLCBmaWxlQXNTdHJpbmcpLnRoZW4oZmlsZVBhdGggPT4ge1xyXG4gICAgICAgIGlmIChmaWxlUGF0aCkge1xyXG4gICAgICAgICAgdGhpcy5fYmxvYlRvQXJyYXlCdWZmZXIoYmxvYikudGhlbihmaWxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaDogc3RyaW5nID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsVXJsOiBzdHJpbmcgPSBmaWxlUGF0aDsgLy8gU2V0IHVybCBmcm9tIHRoZSBDRE5cclxuICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbkRhdGE6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBwcmljZURhdGE6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhRGF0YTogTWV0YWRhdGEgPSB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnNldE1ldGFkYXRhKGhhc2gsIG1vZGVsVXJsLCBjb25maWd1cmF0aW9uRGF0YSk7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhLmNhbkVsZXZhdGUgPSB0aGlzLmhlaWdodEFkanVzdGFibGU7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhLnRoaXJkUGFydHlNb2RlbCA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIFdlIGFsc28gY2FuIHNldCB0aGUgbWV0YWRhdGEgaGVyZSBhbmQgcGFzIGl0IGFzIHRoZSBsYXN0IGFyZ3VtZW50IGZvciBwYXJzZU1vZGVsVG9HTEIuXHJcbiAgICAgICAgICAgIHRoaXMuX3RoaXJkUGFydHlNb2RlbFNlcnZpY2UucGFyc2VNb2RlbFRvR0xCKGZpbGUsIGhhc2gsIG1vZGVsVXJsLCBjb25maWd1cmF0aW9uRGF0YSwgcHJpY2VEYXRhLCBtZXRhRGF0YSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlbmRlckVycm9yLCB7dGl0bGU6ICdVcGxvYWQgZXJyb3InLCBtZXNzYWdlOiBlcnJvcn0pO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRNb2RlbE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlbW92ZUV4dGVuc2lvbjogc3RyaW5nID0gbmFtZS5yZXBsYWNlKCcuZ2xiJywgJycpOyAvLyByZW1vdmUgLmdsYiBhcyBmaWxlIGV4dGVuc2lvblxyXG4gICAgcmV0dXJuIHJlbW92ZUV4dGVuc2lvbi5yZXBsYWNlKCcuJywgJy0nKTsgLy8gcmVwbGFjZSBhbGwgZG90cyBmb3IgcGVyaW9kc1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2xiTG9hZGVyKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxvYWRlcjogR0xURkxvYWRlciA9IG5ldyBHTFRGTG9hZGVyKCk7XHJcbiAgICBsb2FkZXIucGFyc2UoaW5wdXQuZmlsZS5maWxlQ29udGVudHMsICcnLFxyXG4gICAgICBhc3luYyBvYmplY3QgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdC5zY2VuZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUGFyc2luZyBlcnJvcicpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmJ4TG9hZGVyKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZieExvYWRlcjogRkJYTG9hZGVyID0gbmV3IEZCWExvYWRlcigpO1xyXG4gICAgY29uc3Qgb2JqZWN0ID0gZmJ4TG9hZGVyLnBhcnNlKGlucHV0LmZpbGUuZmlsZUNvbnRlbnRzLCAnJyk7XHJcbiAgICB0aGlzLl9wcmVwTW9kZWxGb3JTY2VuZShvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb2JqTG9hZGVyKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9iakxvYWRlcjogT0JKTG9hZGVyID0gbmV3IE9CSkxvYWRlcigpO1xyXG4gICAgLy8gZm9yIG9qYiBmaWxlczogY29udmVydCB0aGUgQXJyYXlCdWZmZXIgdG8gYSBzdHJpbmdcclxuICAgIGNvbnN0IGJ1ZiA9IGlucHV0LmZpbGUuZmlsZUNvbnRlbnRzO1xyXG4gICAgY29uc3QgZGVjb2RlcjogVGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgIGNvbnN0IHN0cjogc3RyaW5nID0gZGVjb2Rlci5kZWNvZGUoYnVmKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IG9iakxvYWRlci5wYXJzZShzdHIpO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Rkc0xvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB0ZHNMb2FkZXI6IFREU0xvYWRlciA9IG5ldyBURFNMb2FkZXIoKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IHRkc0xvYWRlci5wYXJzZShpbnB1dC5maWxlLmZpbGVDb250ZW50cywgJycpO1xyXG4gICAgb2JqZWN0LnRyYXZlcnNlKGVsZW1lbnQgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0bExvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGxMb2FkZXI6IFNUTExvYWRlciA9IG5ldyBTVExMb2FkZXIoKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IHN0bExvYWRlci5wYXJzZShpbnB1dC5maWxlLmZpbGVDb250ZW50cyk7XHJcbiAgICB0aGlzLl9hZGRGcm9tR2VvbWV0cnkob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEZyb21HZW9tZXRyeShnZW9tZXRyeSkge1xyXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgTWVzaFBob25nTWF0ZXJpYWwoe3RyYW5zcGFyZW50OiB0cnVlLCBvcGFjaXR5OiBnZW9tZXRyeS5hbHBoYX0pO1xyXG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUobW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgIG9iamVjdC5uYW1lID0gdGhpcy5tb2RlbE5hbWU7XHJcbiAgICBvYmplY3QucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgb2JqZWN0LnNjYWxlLnNldCgxLCAxLCAxKTtcclxuICAgIC8vIFJlbW92ZSBsaWdodHMgZnJvbSB0aGUgY2hpbGRyZW5cclxuICAgIG9iamVjdC5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAoYyBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgb2JqZWN0LnJlbW92ZShjKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQob2JqZWN0KTtcclxuICAgIHRoaXMubG9hZGVkTW9kZWwgPSBvYmplY3Q7XHJcbiAgICB0aGlzLl9nZXRCb3VuZGluZ0JveChvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Qm91bmRpbmdCb3gob2JqZWN0OiBPYmplY3QzRCkge1xyXG4gICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm94MygpLnNldEZyb21PYmplY3Qob2JqZWN0KTtcclxuICAgIHRoaXMuYm91bmRpbmdCb3hTaXplID0gYm91bmRpbmdCb3guZ2V0U2l6ZShuZXcgVmVjdG9yMygpKTtcclxuXHJcbiAgICB0aGlzLl9zZXRNZWFzdXJlbWVudHModGhpcy5ib3VuZGluZ0JveFNpemUpO1xyXG4gICAgdGhpcy5fc2hvd01lYXN1cmVtZW50cygpO1xyXG5cclxuICAgIGNvbnN0IG1vZGVsQm94aGVscGVyID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKCdtb2RlbEJveGhlbHBlcicpO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcucmVtb3ZlKG1vZGVsQm94aGVscGVyKTtcclxuXHJcbiAgICBjb25zdCBib3hIZWxwZXIgPSBuZXcgQm94SGVscGVyKG9iamVjdCk7XHJcbiAgICBib3hIZWxwZXIubWF0ZXJpYWwuY29sb3Iuc2V0KDB4RkYwMEZGKTtcclxuICAgIGJveEhlbHBlci5uYW1lID0gJ21vZGVsQm94aGVscGVyJztcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChib3hIZWxwZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd01lYXN1cmVtZW50cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1lYXN1cmVtZW50c01lc2hlcyA9IHRoaXMuX21lYXN1cmVtZW50cy5tYXAodmFsdWUgPT4gdmFsdWUudGV4dE1lc2gpO1xyXG4gICAgbWVhc3VyZW1lbnRzTWVzaGVzLmZvckVhY2gob2JqZWN0ID0+IHRoaXMuc2NlbmVQcmV2aWV3LmFkZChvYmplY3QpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE1lYXN1cmVtZW50cyhib3VuZGluZ0JveDogVmVjdG9yMykge1xyXG4gICAgY29uc3Qgc2V0SGVpZ2h0OiBCb3hNZWFzdXJlbWVudCA9IHRoaXMuX2NyZWF0ZUhlaWdodE1lYXN1cmVtZW50KGJvdW5kaW5nQm94LnkpO1xyXG4gICAgdGhpcy5fbWVhc3VyZW1lbnRzLnB1c2goc2V0SGVpZ2h0KTtcclxuICAgIGNvbnN0IHNldFdpZHRoOiBCb3hNZWFzdXJlbWVudCA9IHRoaXMuX2NyZWF0ZVdpZHRoTWVhc3VyZW1lbnQoYm91bmRpbmdCb3gueCk7XHJcbiAgICB0aGlzLl9tZWFzdXJlbWVudHMucHVzaChzZXRXaWR0aCk7XHJcbiAgICBjb25zdCBzZXREZXB0aDogQm94TWVhc3VyZW1lbnQgPSB0aGlzLl9jcmVhdGVEZXB0aE1lYXN1cmVtZW50KGJvdW5kaW5nQm94LnopO1xyXG4gICAgdGhpcy5fbWVhc3VyZW1lbnRzLnB1c2goc2V0RGVwdGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlSGVpZ2h0TWVhc3VyZW1lbnQoaGVpZ2h0SW5wdXQpOiBCb3hNZWFzdXJlbWVudCB7XHJcbiAgICBjb25zdCBoZWlnaHQ6IEJveE1lYXN1cmVtZW50ID0gbmV3IEJveE1lYXN1cmVtZW50KCk7XHJcbiAgICBjb25zdCBoZWlnaHRTdHJpbmcgPSBNZWFzdXJlbWVudFV0aWxzLm1ha2VUZXh0KGhlaWdodElucHV0LCB0aGlzLnVuaXRzT2ZNZWFzdXJlbWVudCwgdGhpcy5kaXN0YW5jZVN0ZXApO1xyXG4gICAgY29uc3QgdGV4dCA9IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldCgnTEFCRUxfSEVJR0hUJyk7XHJcbiAgICBoZWlnaHQudGV4dE1lc2ggPSBtYWtlVGV4dE1lc2goaGVpZ2h0U3RyaW5nLCB0aGlzLmZvbnQsIDB4RkYwMEZGLCAwLjA4LCBmYWxzZSwgZmFsc2UsIHRleHQpO1xyXG4gICAgaGVpZ2h0LnBvc2l0aW9ucyA9IHRoaXMuX2NhbGN1bGF0ZUhlaWdodFBvc2l0aW9ucygpO1xyXG4gICAgaGVpZ2h0LnRleHRNZXNoLm5hbWUgPSAnYm94SGVpZ2h0JztcclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVXaWR0aE1lYXN1cmVtZW50KHdpZHRoSW5wdXQpIHtcclxuICAgIGNvbnN0IHdpZHRoOiBCb3hNZWFzdXJlbWVudCA9IG5ldyBCb3hNZWFzdXJlbWVudCgpO1xyXG4gICAgY29uc3Qgd2lkdGhTdHJpbmcgPSBNZWFzdXJlbWVudFV0aWxzLm1ha2VUZXh0KHdpZHRoSW5wdXQsIHRoaXMudW5pdHNPZk1lYXN1cmVtZW50LCB0aGlzLmRpc3RhbmNlU3RlcCk7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdMQUJFTF9XSURUSCcpO1xyXG4gICAgd2lkdGgudGV4dE1lc2ggPSBtYWtlVGV4dE1lc2god2lkdGhTdHJpbmcsIHRoaXMuZm9udCwgMHhGRjAwRkYsIDAuMDgsIGZhbHNlLCBmYWxzZSwgdGV4dCk7XHJcbiAgICB3aWR0aC5wb3NpdGlvbnMgPSB0aGlzLl9jYWxjdWxhdGVXaWR0aFBvc2l0aW9ucygpO1xyXG4gICAgd2lkdGgudGV4dE1lc2gubmFtZSA9ICdib3hXaWR0aCc7XHJcbiAgICByZXR1cm4gd2lkdGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVEZXB0aE1lYXN1cmVtZW50KGRlcHRoSW5wdXQpIHtcclxuICAgIGNvbnN0IGRlcHRoOiBCb3hNZWFzdXJlbWVudCA9IG5ldyBCb3hNZWFzdXJlbWVudCgpO1xyXG4gICAgY29uc3QgZGVwdGhTdHJpbmcgPSBNZWFzdXJlbWVudFV0aWxzLm1ha2VUZXh0KGRlcHRoSW5wdXQsIHRoaXMudW5pdHNPZk1lYXN1cmVtZW50LCB0aGlzLmRpc3RhbmNlU3RlcCk7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdMQUJFTF9ERVBUSCcpO1xyXG4gICAgZGVwdGgudGV4dE1lc2ggPSBtYWtlVGV4dE1lc2goZGVwdGhTdHJpbmcsIHRoaXMuZm9udCwgMHhGRjAwRkYsIDAuMDgsIGZhbHNlLCBmYWxzZSwgdGV4dCk7XHJcbiAgICBkZXB0aC5wb3NpdGlvbnMgPSB0aGlzLl9jYWxjdWxhdGVEZXB0aFBvc2l0aW9ucygpO1xyXG4gICAgZGVwdGgudGV4dE1lc2gubmFtZSA9ICdib3hEZXB0aCc7XHJcbiAgICByZXR1cm4gZGVwdGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYWxjdWxhdGVIZWlnaHRQb3NpdGlvbnMoKTogVEhSRUUuVmVjdG9yM1tdIHtcclxuICAgIHJldHVybiBwb3NpdGlvbmluZ0ZhY3RvcnMubWFwKChbaiwga10pID0+IHtcclxuICAgICAgcmV0dXJuIG5ldyBUSFJFRS5WZWN0b3IzKClcclxuICAgICAgICAuYWRkU2NhbGVkVmVjdG9yKHhEaXJlY3Rpb24sIGogLyAyICogdGhpcy5ib3VuZGluZ0JveFNpemUueClcclxuICAgICAgICAuYWRkU2NhbGVkVmVjdG9yKHpEaXJlY3Rpb24sIGsgLyAyICogdGhpcy5ib3VuZGluZ0JveFNpemUueik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVdpZHRoUG9zaXRpb25zKCk6IFRIUkVFLlZlY3RvcjNbXSB7XHJcbiAgICByZXR1cm4gcG9zaXRpb25pbmdGYWN0b3JzLm1hcCgoW2osIGtdKSA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgVEhSRUUuVmVjdG9yMygpXHJcbiAgICAgICAgLmFkZFNjYWxlZFZlY3Rvcih5RGlyZWN0aW9uLCBqIC8gMiAqIHRoaXMuYm91bmRpbmdCb3hTaXplLnkpXHJcbiAgICAgICAgLmFkZFNjYWxlZFZlY3Rvcih6RGlyZWN0aW9uLCBrIC8gMiAqIHRoaXMuYm91bmRpbmdCb3hTaXplLnopO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYWxjdWxhdGVEZXB0aFBvc2l0aW9ucygpOiBUSFJFRS5WZWN0b3IzW10ge1xyXG4gICAgcmV0dXJuIHBvc2l0aW9uaW5nRmFjdG9ycy5tYXAoKFtqLCBrXSkgPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFRIUkVFLlZlY3RvcjMoKVxyXG4gICAgICAgIC5hZGRTY2FsZWRWZWN0b3IoeURpcmVjdGlvbiwgaiAvIDIgKiB0aGlzLmJvdW5kaW5nQm94U2l6ZS55KVxyXG4gICAgICAgIC5hZGRTY2FsZWRWZWN0b3IoeERpcmVjdGlvbiwgayAvIDIgKiB0aGlzLmJvdW5kaW5nQm94U2l6ZS54KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX2Jsb2JUb0FycmF5QnVmZmVyKGJsb2I6IEJsb2IpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChyZWFkZXIucmVzdWx0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdFcnJvciByZWFkaW5nIGJsb2IgYXMgQXJyYXlCdWZmZXInKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCBibG9iIGFzIEFycmF5QnVmZmVyJykpO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUxpZ2h0RnJvbVByb3BlcnRpZXMobGlnaHRQcm9wZXJ0aWVzOiBMaWdodFByb3BlcnRpZXMpIHtcclxuICAgIGNvbnN0IGxpZ2h0VHlwZTogTGlnaHRFbnVtID0gbGlnaHRQcm9wZXJ0aWVzLnR5cGU7XHJcbiAgICBjb25zdCBnZXRMaWdodHM6IExpZ2h0Q3JlYXRlU2VydmljZSA9IG5ldyBMaWdodENyZWF0ZVNlcnZpY2UoKTtcclxuICAgIGNvbnN0IGxpZ2h0OiBMaWdodCA9IGdldExpZ2h0cy5jcmVhdGVOZXdMaWdodChsaWdodFR5cGUpO1xyXG4gICAgbGlnaHQudXNlckRhdGEud2FsbE9mZnNldCA9IGxpZ2h0UHJvcGVydGllcy53YWxsT2Zmc2V0O1xyXG4gICAgbGlnaHQudXNlckRhdGEucm90YXRpb25PZmZzZXQgPSBsaWdodFByb3BlcnRpZXMucm90YXRpb25PZmZzZXQ7XHJcbiAgICBsaWdodC51c2VyRGF0YS50b3BEb3duRGlyZWN0aW9uYWwgPSBsaWdodFByb3BlcnRpZXMudG9wRG93bkRpcmVjdGlvbmFsO1xyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsaWdodFByb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKCFsaWdodC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdwb3NpdGlvbicpIHtcclxuICAgICAgICBsaWdodC5wb3NpdGlvbi55ID0gbGlnaHRQcm9wZXJ0aWVzLnBvc2l0aW9uLnk7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICdjb2xvcicpIHtcclxuICAgICAgICBsaWdodC5jb2xvciA9IG5ldyBDb2xvcihsaWdodFByb3BlcnRpZXMuY29sb3IpO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BlcnR5ID09PSAnZ3JvdW5kQ29sb3InKSB7XHJcbiAgICAgICAgKGxpZ2h0IGFzIGFueSkuZ3JvdW5kQ29sb3IgPSBuZXcgQ29sb3IobGlnaHRQcm9wZXJ0aWVzLmdyb3VuZENvbG9yKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZXRPYmplY3RQcm9wZXJ0aWVzKGxpZ2h0LCBwcm9wZXJ0eSwgbGlnaHRQcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChsaWdodCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRPYmplY3RQcm9wZXJ0aWVzKG9iamVjdDogTGlnaHQgfCBMaWdodFByb3BlcnRpZXMsIHByb3BlcnR5OiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ3NoYWRvdycpIHtcclxuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFvYmplY3RbcHJvcGVydHldLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XVtwcm9wXSA9IHZhbHVlW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmplY3RbcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWNvbiA9IEljb25FbnVtO1xyXG59XHJcblxyXG4iXX0=
|
|
820
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL21vZGVsLXVwbG9hZGVyL21vZGVsLXByZXZpZXdlci9tb2RlbC1wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLE1BQU0sRUFBcUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBQyxlQUFlLEVBQTBCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEYsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLElBQUksRUFDSixpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxLQUFLLEVBQ0wsT0FBTyxFQUNQLGFBQWEsRUFDZCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDdkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUcvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1B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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUpUOzRGQUdVLHFCQUFxQjtrQkE1SmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUpUO29CQUNELFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO2lCQUM5Qzs7MEJBSUksTUFBTTsyQkFBQyxlQUFlO3VaQWVLLGFBQWE7c0JBQTFDLFNBQVM7dUJBQUMsVUFBVTtnQkFDYyxhQUFhO3NCQUEvQyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQm94SGVscGVyLFxyXG4gIENvbG9yLFxyXG4gIEdyaWRIZWxwZXIsXHJcbiAgTGlnaHQsXHJcbiAgTGluZWFyU1JHQkNvbG9yU3BhY2UsXHJcbiAgTWVzaCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBNZXNoUGhvbmdNYXRlcmlhbCxcclxuICBPYmplY3QzRCxcclxuICBQQ0ZTb2Z0U2hhZG93TWFwLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFBsYW5lR2VvbWV0cnksXHJcbiAgUE1SRU1HZW5lcmF0b3IsXHJcbiAgU2NlbmUsXHJcbiAgVmVjdG9yMyxcclxuICBXZWJHTFJlbmRlcmVyXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0Zsb2F0VHlwZSwgTGluZWFyVG9uZU1hcHBpbmd9IGZyb20gJ3RocmVlL3NyYy9jb25zdGFudHMnO1xyXG5pbXBvcnQge0dMVEZMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0dMVEZMb2FkZXInO1xyXG5pbXBvcnQge1JHQkVMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL1JHQkVMb2FkZXInO1xyXG5pbXBvcnQge09yYml0Q29udHJvbHN9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzJztcclxuaW1wb3J0IHtHTFRGRXhwb3J0ZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9leHBvcnRlcnMvR0xURkV4cG9ydGVyJztcclxuaW1wb3J0IHtGQlhMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZCWExvYWRlcic7XHJcbmltcG9ydCB7T0JKTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9PQkpMb2FkZXInO1xyXG5pbXBvcnQge1RoaXJkUGFydHlNb2RlbFNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvdGhpcmQtcGFydHktbW9kZWwuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtURFNMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL1REU0xvYWRlcic7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9saWdodC1wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xpZ2h0UHJvcGVydGllc30gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9saWdodC1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHtMaWdodEVudW19IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9saWdodC5lbnVtJztcclxuaW1wb3J0IHtMaWdodENyZWF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvbGlnaHQtY3JlYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7TGlnaHRQcmVzZXR9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvbGlnaHQtcHJlc2V0JztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvZmlsZS51dGlscyc7XHJcbmltcG9ydCB7U1RMTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9TVExMb2FkZXInO1xyXG5pbXBvcnQge0JveE1lYXN1cmVtZW50fSBmcm9tICcuLi8uLi9jb3JlM2QvaHVkL2JvdW5kaW5nLW1lYXN1cmVtZW50LWJveC9ib3gtbWVhc3VyZW1lbnQnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGb250U2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvZm9udC5zZXJ2aWNlJztcclxuaW1wb3J0IHtGb250fSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9Gb250TG9hZGVyJztcclxuaW1wb3J0IHtNZXRhZGF0YX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL21ldGFkYXRhJztcclxuaW1wb3J0IHtJY29uRW51bX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2ljb24uZW51bSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWljb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7Q29Eb21haW5WYWx1ZX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvY28tZG9tYWluLXZhbHVlLmJvJztcclxuaW1wb3J0IHtUZXh0R2VvbWV0cnl9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1RleHRHZW9tZXRyeSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1tb2RlbC1wcmV2aWV3JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGVsLWNsb3NlLXByZXZpZXdcIiAoY2xpY2spPVwiY2xvc2VQcmV2aWV3KClcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LXdpbmRvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWNvbnRhaW5lclwiIGlkPVwiY2FudmFzQ29udGFpbmVyXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLXByZXZpZXctd2luZG93LWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzaG93UmVmZXJlbmNlTW9kZWxcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidhZnRlcidcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2hvd1JlZmVyZW5jZU1vZGVsKCRldmVudClcIj5cclxuICAgICAgICAgICAgICBTaG93IFJlZmVyZW5jZSBtb2RlbFxyXG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLXRleHQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZGlzY2xhaW1lci10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgR3JpZCBzY2FsZTogMSB0aWxlID0gMXgxIG1ldGVyXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLXByZXZpZXctYWN0aW9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1oZWlnaHQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aDI+TW9kZWwgc2V0dGluZ3M8L2gyPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGgzPlNjYWxlOjwvaDM+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaGVpZ2h0QXJ0aWNsZVwiICNoZWlnaHRBcnRpY2xlIHBsYWNlaG9sZGVyPVwiU2V0IG1vZGVsIGhlaWdodFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1bml0cy1zZWxlY3QtZm9ybVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwidW5pdHMtbWF0LXNlbGVjdFwiIFsodmFsdWUpXT1cInVuaXRzT2ZNZWFzdXJlbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJ1bml0cy1tYXQtb3B0aW9uXCIgKm5nRm9yPVwibGV0IHVuaXQgb2YgdW5pdHNcIiBbdmFsdWVdPVwidW5pdFwiPnt7IHVuaXQgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYXBwbHktYnV0dG9uIGJhc2UtYnV0dG9uXCIgKGNsaWNrKT1cInNjYWxlQXJ0aWNsZSgpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3RhdGlvbi1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aDM+Um90YXRpb246PC9oMz5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxwPlJvdGF0ZSBvbiBYIGF4aXMgKDkwIGRlZ3JlZXMpPC9wPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyb3RhdGVNb2RlbCgneCcsIC1tYXRoUGkgLyAyKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJkYXNoLWJ1dHRvblwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicm90YXRlTW9kZWwoJ3gnLCBtYXRoUGkgLyAyKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJhZGQtYnV0dG9uXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8cD5Sb3RhdGUgb24gWSBheGlzICg5MCBkZWdyZWVzKTwvcD5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicm90YXRlTW9kZWwoJ3knLCAtbWF0aFBpIC8gMilcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGFzaC1idXR0b25cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJvdGF0ZU1vZGVsKCd5JywgbWF0aFBpIC8gMilcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiYWRkLWJ1dHRvblwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHA+Um90YXRlIG9uIFogYXhpcyAoOTAgZGVncmVlcyk8L3A+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJvdGF0ZU1vZGVsKCd6JywgLW1hdGhQaSAvIDIpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRhc2gtYnV0dG9uXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyb3RhdGVNb2RlbCgneicsIG1hdGhQaSAvIDIpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImFkZC1idXR0b25cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm90YXRpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGgzPlBvc2l0aW9uOjwvaDM+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8cD5SZXNldCB0byBjb29yZGluYXRlcyAwLDAsMDwvcD5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1hcy1saW5rXCIgKGNsaWNrKT1cIm1vdmVNb2RlbCgnYWxsJywgMClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwicmV0cnktYnV0dG9uXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIFJlc2V0XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHA+TW92ZSBvbiB0aGUgWSBheGlzICgwLjAxIHVuaXQpPC9wPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJtb3ZlTW9kZWwoJ3knLCAtMC4wMSlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGFzaC1idXR0b25cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm1vdmVNb2RlbCgneScsICAwLjAxKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJhZGQtYnV0dG9uXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWluZm8tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aDM+UHJvcGVydGllczo8L2gzPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0U3RhY2thYmxlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICBTdGFja2FibGVcclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRIZWlnaHRBZGp1c3RhYmxlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICBIZWlnaHQgYWRqdXN0YWJsZVxyXG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcGxhY2VtZW50LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5QbGFjZW1lbnQ8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJwbGFjZW1lbnRPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJzZWxlY3RlZFBsYWNlbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcGxhY2VtZW50T3B0aW9uIG9mIHBsYWNlbWVudE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGxhY2VtZW50T3B0aW9uLmNvZGVcIj57eyBwbGFjZW1lbnRPcHRpb24uZGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWluZm9cIiAqbmdJZj1cInRoaXMuZGF0YVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLXByZXZpZXctaW5mby1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLXByZXZpZXctaW5mby1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPlNhdmUgYXM6PC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWluZm8tcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImZpbGVOYW1lXCIgI2ZpbGVOYW1lIHZhbHVlPVwie3sgdGhpcy5kYXRhLmZpbGUuZmlsZS5uYW1lIH19XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYmFzZS1idXR0b24gZXhwb3J0QnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydFNjZW5lQXNHTEIoJ3VwbG9hZCcpXCI+VXBsb2FkIGFuZCBhZGQgdG8gc2NlbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhc2UtYnV0dG9uIGV4cG9ydEJ1dHRvbkRhcmtcIiAoY2xpY2spPVwiZXhwb3J0U2NlbmVBc0dMQignZG93bmxvYWQnKVwiPkRvd25sb2FkPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZVByZXZpZXcoKVwiIGNsYXNzPVwiYmFzZS1idXR0b24gZXhwb3J0QnV0dG9uRGFya1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWycuL21vZGVsLXByZXZpZXcuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kZWxQcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogeyBmaWxlOiBhbnkgfSxcclxuICAgIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgaWNvbkNhY2hlOiBIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE1vZGVsUHJldmlld0NvbXBvbmVudD4sXHJcbiAgICBwcml2YXRlIF90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlOiBUaGlyZFBhcnR5TW9kZWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9hZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbGlnaHRQcmVzZXRzU2VydmljZTogTGlnaHRQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpY3Rpb25hcnlTZXJ2aWNlOiBIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mb250U2VydmljZTogRm9udFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmZvbnQgPSB0aGlzLl9mb250U2VydmljZS5odWRGb250O1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZU5hbWUnKSBwdWJsaWMgZ2xiRXhwb3J0TmFtZTogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdoZWlnaHRBcnRpY2xlJykgcHVibGljIGhlaWdodEFydGljbGU6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHB1YmxpYyBzY2VuZVByZXZpZXc6IFRIUkVFLlNjZW5lO1xyXG4gIHB1YmxpYyBjYW1lcmFQcmV2aWV3OiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwdWJsaWMgcmVuZGVyZXJQcmV2aWV3OiBUSFJFRS5XZWJHTFJlbmRlcmVyO1xyXG4gIHB1YmxpYyBjb250cm9sczogT3JiaXRDb250cm9scztcclxuICBwdWJsaWMgYm91bmRpbmdCb3hTaXplOiBWZWN0b3IzO1xyXG4gIHB1YmxpYyBsb2FkZWRNb2RlbDogYW55O1xyXG4gIHB1YmxpYyB1bml0c09mTWVhc3VyZW1lbnQ6IHN0cmluZyA9ICdjbSc7XHJcbiAgcHVibGljIHVuaXRzOiBzdHJpbmdbXSA9IFsnY20nLCAnaW5jaGVzJ107XHJcbiAgcHVibGljIG1vZGVsTmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBtYXRoUGk6IG51bWJlciA9IE1hdGguUEk7XHJcbiAgcHVibGljIHNob3dSZWZlcmVuY2VNb2RlbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGZsb29yU2l6ZUhlaWdodDogbnVtYmVyID0gMTA7XHJcbiAgcHVibGljIGZsb29yU2l6ZVdpZHRoOiBudW1iZXIgPSAxMDtcclxuICBwdWJsaWMgZ3JpZFNpemU6IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBncmlkRGl2aXNpb246IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBkaXN0YW5jZVN0ZXA6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIGZvbnQ6IEZvbnQ7XHJcbiAgcHVibGljIHN0YWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoZWlnaHRBZGp1c3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHBsYWNlbWVudE9wdGlvbnM6IENvRG9tYWluVmFsdWVbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRQbGFjZW1lbnQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbWVhc3VyZW1lbnRzOiBCb3hNZWFzdXJlbWVudFtdID0gW107XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBpY29uID0gSWNvbkVudW07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0U2NlbmUoKTtcclxuICAgIHRoaXMubG9hZE1vZGVsKHRoaXMuZGF0YSk7XHJcbiAgICB0aGlzLl9hZGFwdGVyU2VydmljZS5nZXRNb2RlbFBsYWNlbWVudE9wdGlvbnMoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMucGxhY2VtZW50T3B0aW9ucyA9IHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRTY2VuZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZpZXdTY2FsZTogbnVtYmVyID0gMS4zO1xyXG5cclxuICAgIC8vIGluaXQgc2NlbmVcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3ID0gbmV3IFNjZW5lKCk7XHJcbiAgICAvLyBpbml0IHJlbmRlcmVyXHJcbiAgICBjb25zdCBjYW52UmVmZXJlbmNlOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYW52YXNDb250YWluZXInKTtcclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQ6IEhUTUxDYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCBjb250ZXh0OiBhbnkgPSBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJ3dlYmdsMicsIHthbnRpYWxpYXM6IHRydWV9KTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3ID0gbmV3IFdlYkdMUmVuZGVyZXIoe1xyXG4gICAgICBjYW52YXM6IGNhbnZhc0VsZW1lbnQsXHJcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXHJcbiAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICBhbnRpYWxpYXM6IHRydWUsXHJcbiAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZSxcclxuICAgICAgbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNldENsZWFyQ29sb3IoMHhmYWZhZmEpO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcuYXV0b0NsZWFyID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy50b25lTWFwcGluZyA9IExpbmVhclRvbmVNYXBwaW5nO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcuc2hhZG93TWFwLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcuc2hhZG93TWFwLnR5cGUgPSBQQ0ZTb2Z0U2hhZG93TWFwO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcub3V0cHV0Q29sb3JTcGFjZSA9IExpbmVhclNSR0JDb2xvclNwYWNlO1xyXG4gICAgY2FudlJlZmVyZW5jZS5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVyUHJldmlldy5kb21FbGVtZW50KTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsICd0aHJlZWQnKTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNldFNpemUod2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlLCB3aW5kb3cuaW5uZXJIZWlnaHQgLyB2aWV3U2NhbGUsIHRydWUpO1xyXG5cclxuICAgIC8vIGluaXQgY2FtZXJhXHJcbiAgICB0aGlzLmNhbWVyYVByZXZpZXcgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoNDUsIDEsIDAuMDEsIDEwMDAwMDAwMCk7XHJcbiAgICB0aGlzLmNhbWVyYVByZXZpZXcucG9zaXRpb24uc2V0KDAsIDIsIDEwKTtcclxuICAgIHRoaXMuY2FtZXJhUHJldmlldy5hc3BlY3QgPSAod2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlKSAvICh3aW5kb3cuaW5uZXJIZWlnaHQgLyB2aWV3U2NhbGUpO1xyXG4gICAgdGhpcy5jYW1lcmFQcmV2aWV3LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuXHJcbiAgICB0aGlzLmNvbnRyb2xzID0gbmV3IE9yYml0Q29udHJvbHModGhpcy5jYW1lcmFQcmV2aWV3LCB0aGlzLnJlbmRlcmVyUHJldmlldy5kb21FbGVtZW50KTtcclxuICAgIHRoaXMuY29udHJvbHMudXBkYXRlKCk7XHJcblxyXG4gICAgdGhpcy5sb2FkRmxvb3JQbGFuZSgpO1xyXG4gICAgdGhpcy5sb2FkUmVmZXJlbmNlTW9kZWwoKTtcclxuICAgIHRoaXMubG9hZExpZ2h0cygpO1xyXG5cclxuICAgIGNvbnN0IGdyaWRIZWxwZXI6IEdyaWRIZWxwZXIgPSBuZXcgR3JpZEhlbHBlcih0aGlzLmdyaWRTaXplLCB0aGlzLmdyaWREaXZpc2lvbik7XHJcbiAgICBncmlkSGVscGVyLm5hbWUgPSAnR3JpZEhlbHBlcic7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQoZ3JpZEhlbHBlcik7XHJcblxyXG4gICAgdGhpcy5fYW5pbWF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRGbG9vclBsYW5lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGxhbmVHZW9tZXRyeTogUGxhbmVHZW9tZXRyeSA9IG5ldyBQbGFuZUdlb21ldHJ5KHRoaXMuZmxvb3JTaXplV2lkdGgsIHRoaXMuZmxvb3JTaXplSGVpZ2h0KTtcclxuICAgIGNvbnN0IHBsYW5lTWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjogMHg4OTk0OTksIHNpZGU6IFRIUkVFLkRvdWJsZVNpZGV9KTtcclxuICAgIGNvbnN0IHBsYW5lID0gbmV3IE1lc2gocGxhbmVHZW9tZXRyeSwgcGxhbmVNYXRlcmlhbCk7XHJcbiAgICBwbGFuZS5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyO1xyXG4gICAgcGxhbmUucG9zaXRpb24ueSA9IDA7XHJcbiAgICBwbGFuZS5uYW1lID0gJ2Zsb29yX3BsYW5lJztcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChwbGFuZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZExpZ2h0cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpc3RPZkxpZ2h0UHJlc2V0czogTGlnaHRQcmVzZXRbXSA9IHRoaXMuX2xpZ2h0UHJlc2V0c1NlcnZpY2UubG9hZGVkTGlnaHRQcmVzZXRzO1xyXG4gICAgY29uc3QgbGlnaHRQcmVzZXQ6IExpZ2h0UHJlc2V0ID0gdGhpcy5fbGlnaHRQcmVzZXRzU2VydmljZS5hY3RpdmVMaWdodFByZXNldDtcclxuICAgIGZvciAoY29uc3QgbGlnaHRQcm9wZXJ0aWVzIG9mIGxpZ2h0UHJlc2V0LmxpZ2h0cykge1xyXG4gICAgICB0aGlzLl9jcmVhdGVMaWdodEZyb21Qcm9wZXJ0aWVzKGxpZ2h0UHJvcGVydGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZFJlZmVyZW5jZU1vZGVsKCk6IHZvaWQge1xyXG4gICAgbGV0IHJlZmVyZW5jZU1vZGVsUGF0aDogc3RyaW5nID0gJyc7XHJcbiAgICBjb25zdCByZWZlcmVuY2VNb2RlbDogc3RyaW5nID0gJ3JlZmVyZW5jZV9wb3AuZ2xiJztcclxuICAgIGlmICh0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy50aHJlZURBc3NldFBhdGgpIHtcclxuICAgICAgcmVmZXJlbmNlTW9kZWxQYXRoID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoICsgJ2Fzc2V0cy8nO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG9hZGVyOiBHTFRGTG9hZGVyID0gbmV3IEdMVEZMb2FkZXIoKTtcclxuICAgIGxvYWRlci5sb2FkKHJlZmVyZW5jZU1vZGVsUGF0aCArIHJlZmVyZW5jZU1vZGVsLCBhc3luYyBnbHRmID0+IHtcclxuICAgICAgZ2x0Zi5zY2VuZS5wb3NpdGlvbi5zZXQoMywgMCwgMyk7XHJcbiAgICAgIGdsdGYuc2NlbmUuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgIGdsdGYuc2NlbmUucmVjZWl2ZVNoYWRvdyA9IHRydWU7XHJcbiAgICAgIGdsdGYuc2NlbmUubmFtZSA9ICdSZWZlcmVuY2VfbW9kZWwnO1xyXG4gICAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQoZ2x0Zi5zY2VuZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkTW9kZWwoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbE5hbWUgPSB0aGlzLl9zZXRNb2RlbE5hbWUoaW5wdXQuZmlsZS5maWxlLm5hbWUpO1xyXG4gICAgY29uc3QgZmlsZVR5cGUgPSBpbnB1dC5maWxlLmZpbGVUeXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdnbGInIHx8IGZpbGVUeXBlID09PSAnZ2x0ZicpIHtcclxuICAgICAgdGhpcy5fZ2xiTG9hZGVyKGlucHV0KTtcclxuICAgIH0gZWxzZSBpZiAoZmlsZVR5cGUgPT09ICdmYngnKSB7XHJcbiAgICAgIHRoaXMuX2ZieExvYWRlcihpbnB1dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpbGVUeXBlID09PSAnb2JqJykge1xyXG4gICAgICB0aGlzLl9vYmpMb2FkZXIoaW5wdXQpO1xyXG4gICAgfSBlbHNlIGlmIChmaWxlVHlwZSA9PT0gJzNkcycpIHtcclxuICAgICAgdGhpcy5fdGRzTG9hZGVyKGlucHV0KTtcclxuICAgIH0gZWxzZSBpZiAoZmlsZVR5cGUgPT09ICdzdGwnKSB7XHJcbiAgICAgIHRoaXMuX3N0bExvYWRlcihpbnB1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEhEUkkocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBuZXcgUkdCRUxvYWRlcigpLnNldERhdGFUeXBlKEZsb2F0VHlwZSkubG9hZChwYXRoLCAoaGRyVGV4dHVyZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBtcmVtR2VuZXJhdG9yOiBQTVJFTUdlbmVyYXRvciA9IG5ldyBQTVJFTUdlbmVyYXRvcih0aGlzLnJlbmRlcmVyUHJldmlldyk7XHJcbiAgICAgICAgcG1yZW1HZW5lcmF0b3IuY29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpO1xyXG4gICAgICAgIGNvbnN0IGhkckN1YmVSZW5kZXJUYXJnZXQgPSBwbXJlbUdlbmVyYXRvci5mcm9tRXF1aXJlY3Rhbmd1bGFyKGhkclRleHR1cmUpO1xyXG4gICAgICAgIGhkclRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgIHRoaXMuc2NlbmVQcmV2aWV3LmVudmlyb25tZW50ID0gaGRyQ3ViZVJlbmRlclRhcmdldC50ZXh0dXJlO1xyXG4gICAgICAgIC8vIHRoaXMuc2NlbmVQcmV2aWV3LmJhY2tncm91bmQgPSBoZHJDdWJlUmVuZGVyVGFyZ2V0LnRleHR1cmU7XHJcbiAgICAgICAgcG1yZW1HZW5lcmF0b3IuZGlzcG9zZSgpO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSwgdW5kZWZpbmVkLCByZWplY3QpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwb3J0U2NlbmVBc0dMQihyZXR1cm5UeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIGFkZCB0aW1lc3RhbXBcclxuICAgIGNvbnN0IHRpbWVzdGFtcDogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBleHBvcnRGaWxlTmFtZTogc3RyaW5nID0gdGhpcy5fc2V0TW9kZWxOYW1lKHRoaXMuZ2xiRXhwb3J0TmFtZS5uYXRpdmVFbGVtZW50LnZhbHVlKSArICdfJyArIHRpbWVzdGFtcDtcclxuICAgIGNvbnN0IGdsdGZFeHBvcnRlcjogR0xURkV4cG9ydGVyID0gbmV3IEdMVEZFeHBvcnRlcigpO1xyXG4gICAgbGV0IHNjZW5lOiBTY2VuZTtcclxuICAgIHNjZW5lID0gdGhpcy5zY2VuZVByZXZpZXcuY2xvbmUoKTtcclxuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKHRoaXMubW9kZWxOYW1lKS5jbG9uZSgpO1xyXG4gICAgd2hpbGUgKHNjZW5lLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgc2NlbmUucmVtb3ZlKHNjZW5lLmNoaWxkcmVuWzBdKTtcclxuICAgIH1cclxuICAgIHNjZW5lLmFkZChtb2RlbCk7XHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICB0cnM6IGZhbHNlLFxyXG4gICAgICBvbmx5VmlzaWJsZTogdHJ1ZSxcclxuICAgICAgdHJ1bmNhdGVEcmF3UmFuZ2U6IHRydWUsXHJcbiAgICAgIGJpbmFyeTogdHJ1ZSxcclxuICAgICAgbWF4VGV4dHVyZVNpemU6IEluZmluaXR5XHJcbiAgICB9O1xyXG4gICAgZ2x0ZkV4cG9ydGVyLnBhcnNlKHNjZW5lLCAocmVzdWx0OiBBcnJheUJ1ZmZlcikgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlOiBCbG9iID0gbmV3IEJsb2IoW3Jlc3VsdF0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xyXG4gICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3VwbG9hZCcpIHtcclxuICAgICAgICB0aGlzLl9zZW5kTW9kZWxUb0NETihgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRNb2RlbChgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIChlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2NhbGVBcnRpY2xlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUodGhpcy5tb2RlbE5hbWUpO1xyXG4gICAgY29uc3QgaW5wdXRIZWlnaHQgPSB0aGlzLmhlaWdodEFydGljbGUubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgIGxldCBoZWlnaHRJbk1ldGVyOiBudW1iZXI7XHJcbiAgICBpZiAodGhpcy51bml0c09mTWVhc3VyZW1lbnQgPT09ICdjbScpIHtcclxuICAgICAgaGVpZ2h0SW5NZXRlciA9IGlucHV0SGVpZ2h0IC8gMTAwO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzT2ZNZWFzdXJlbWVudCA9PT0gJ2luY2hlcycpIHtcclxuICAgICAgaGVpZ2h0SW5NZXRlciA9IChpbnB1dEhlaWdodCAqIDIuNTQpIC8gMTAwO1xyXG4gICAgfVxyXG4gICAgLy8gc2NhbGUgPSB0aGlzLmJvdW5kaW5nIC8gaGVpZ2h0SW5NZXRlciBhbmQgdXNlIFkgYXMgdXAvIGhlaWdodFxyXG4gICAgY29uc3Qgc2NhbGU6IG51bWJlciA9IHRoaXMuYm91bmRpbmdCb3hTaXplLnkgLyBoZWlnaHRJbk1ldGVyO1xyXG4gICAgbW9kZWwuc2NhbGUuc2V0KFxyXG4gICAgICBtb2RlbC5zY2FsZS54IC8gc2NhbGUsXHJcbiAgICAgIG1vZGVsLnNjYWxlLnkgLyBzY2FsZSxcclxuICAgICAgbW9kZWwuc2NhbGUueiAvIHNjYWxlKTtcclxuICAgIHRoaXMuX2dldEJvdW5kaW5nQm94KG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3RhdGVNb2RlbChheGlzOiBzdHJpbmcsIGRlZ3JlZXM6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUodGhpcy5tb2RlbE5hbWUpO1xyXG4gICAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG4gICAgICBtb2RlbC5yb3RhdGlvbi54ICs9IGRlZ3JlZXM7XHJcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd5Jykge1xyXG4gICAgICBtb2RlbC5yb3RhdGlvbi55ICs9IGRlZ3JlZXM7XHJcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd6Jykge1xyXG4gICAgICBtb2RlbC5yb3RhdGlvbi56ICs9IGRlZ3JlZXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9nZXRCb3VuZGluZ0JveChtb2RlbCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlTW9kZWwoYXhpczogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUodGhpcy5tb2RlbE5hbWUpO1xyXG4gICAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG4gICAgICBtb2RlbC5wb3NpdGlvbi54ICs9IGFtb3VudDtcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3knKSB7XHJcbiAgICAgIG1vZGVsLnBvc2l0aW9uLnkgKz0gYW1vdW50O1xyXG4gICAgfSBlbHNlIGlmIChheGlzID09PSAneicpIHtcclxuICAgICAgbW9kZWwucG9zaXRpb24ueiArPSBhbW91bnQ7XHJcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICdhbGwnKSB7XHJcbiAgICAgIG1vZGVsLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2dldEJvdW5kaW5nQm94KG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVbml0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudW5pdHNPZk1lYXN1cmVtZW50ID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlU2hvd1JlZmVyZW5jZU1vZGVsKCRldmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWw6IE9iamVjdDNEID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKCdSZWZlcmVuY2VfbW9kZWwnKTtcclxuICAgIG1vZGVsLnZpc2libGUgPSAhdGhpcy5zaG93UmVmZXJlbmNlTW9kZWw7XHJcbiAgICB0aGlzLnNob3dSZWZlcmVuY2VNb2RlbCA9ICF0aGlzLnNob3dSZWZlcmVuY2VNb2RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdGFja2FibGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGFja2FibGUgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWlnaHRBZGp1c3RhYmxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVpZ2h0QWRqdXN0YWJsZSA9IGV2ZW50LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlUHJldmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0ZSgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRBbmltYXRpb25Mb29wKCh0aW1lc3RhbXAsIGZyYW1lKSA9PiB0aGlzLl9yZW5kZXIodGltZXN0YW1wLCBmcmFtZSkpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbmRlcih0LCBmcmFtZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcucmVuZGVyKHRoaXMuc2NlbmVQcmV2aWV3LCB0aGlzLmNhbWVyYVByZXZpZXcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZG93bmxvYWRNb2RlbChmaWxlTmFtZTogc3RyaW5nLCBibG9iOiBCbG9iKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGVsZW1lbnQuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBlbGVtZW50LmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3NlbmRNb2RlbFRvQ0ROKGZpbGVOYW1lOiBzdHJpbmcsIGJsb2I6IEJsb2IpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucGxhY2VtZW50T3B0aW9uc1t0aGlzLnNlbGVjdGVkUGxhY2VtZW50XSk7XHJcbiAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XHJcbiAgICByZWFkZXIub25sb2FkZW5kID0gYXN5bmMgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZmlsZUFzU3RyaW5nOiBzdHJpbmcgPSBGaWxlVXRpbHMuU3RyaXBNaW1lU3RyaW5nRnJvbURhdGFVcmkoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgIHRoaXMuX2FkYXB0ZXJTZXJ2aWNlLnN0b3JlM0RNb2RlbENETihmaWxlTmFtZSwgZmlsZUFzU3RyaW5nKS50aGVuKGZpbGVQYXRoID0+IHtcclxuICAgICAgICBpZiAoZmlsZVBhdGgpIHtcclxuICAgICAgICAgIHRoaXMuX2Jsb2JUb0FycmF5QnVmZmVyKGJsb2IpLnRoZW4oZmlsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc2g6IHN0cmluZyA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICBjb25zdCBtb2RlbFVybDogc3RyaW5nID0gZmlsZVBhdGg7IC8vIFNldCB1cmwgZnJvbSB0aGUgQ0ROXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25EYXRhOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgY29uc3QgcHJpY2VEYXRhOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgY29uc3QgbWV0YURhdGE6IE1ldGFkYXRhID0gdGhpcy5fdGhpcmRQYXJ0eU1vZGVsU2VydmljZS5zZXRNZXRhZGF0YShoYXNoLCBtb2RlbFVybCwgY29uZmlndXJhdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICBtZXRhRGF0YS5jYW5FbGV2YXRlID0gdGhpcy5oZWlnaHRBZGp1c3RhYmxlO1xyXG4gICAgICAgICAgICBtZXRhRGF0YS50aGlyZFBhcnR5TW9kZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAvLyBXZSBhbHNvIGNhbiBzZXQgdGhlIG1ldGFkYXRhIGhlcmUgYW5kIHBhcyBpdCBhcyB0aGUgbGFzdCBhcmd1bWVudCBmb3IgcGFyc2VNb2RlbFRvR0xCLlxyXG4gICAgICAgICAgICB0aGlzLl90aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnBhcnNlTW9kZWxUb0dMQihmaWxlLCBoYXNoLCBtb2RlbFVybCwgY29uZmlndXJhdGlvbkRhdGEsIHByaWNlRGF0YSwgbWV0YURhdGEpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9kaWFsb2cuY2xvc2VBbGwoKTtcclxuICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZW5kZXJFcnJvciwge3RpdGxlOiAnVXBsb2FkIGVycm9yJywgbWVzc2FnZTogZXJyb3J9KTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TW9kZWxOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZW1vdmVFeHRlbnNpb246IHN0cmluZyA9IG5hbWUucmVwbGFjZSgnLmdsYicsICcnKTsgLy8gcmVtb3ZlIC5nbGIgYXMgZmlsZSBleHRlbnNpb25cclxuICAgIHJldHVybiByZW1vdmVFeHRlbnNpb24ucmVwbGFjZSgnLicsICctJyk7IC8vIHJlcGxhY2UgYWxsIGRvdHMgZm9yIHBlcmlvZHNcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dsYkxvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBsb2FkZXI6IEdMVEZMb2FkZXIgPSBuZXcgR0xURkxvYWRlcigpO1xyXG4gICAgbG9hZGVyLnBhcnNlKGlucHV0LmZpbGUuZmlsZUNvbnRlbnRzLCAnJyxcclxuICAgICAgYXN5bmMgb2JqZWN0ID0+IHtcclxuICAgICAgICB0aGlzLl9wcmVwTW9kZWxGb3JTY2VuZShvYmplY3Quc2NlbmUpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1BhcnNpbmcgZXJyb3InKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZieExvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmYnhMb2FkZXI6IEZCWExvYWRlciA9IG5ldyBGQlhMb2FkZXIoKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IGZieExvYWRlci5wYXJzZShpbnB1dC5maWxlLmZpbGVDb250ZW50cywgJycpO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29iakxvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBvYmpMb2FkZXI6IE9CSkxvYWRlciA9IG5ldyBPQkpMb2FkZXIoKTtcclxuICAgIC8vIGZvciBvamIgZmlsZXM6IGNvbnZlcnQgdGhlIEFycmF5QnVmZmVyIHRvIGEgc3RyaW5nXHJcbiAgICBjb25zdCBidWYgPSBpbnB1dC5maWxlLmZpbGVDb250ZW50cztcclxuICAgIGNvbnN0IGRlY29kZXI6IFRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcbiAgICBjb25zdCBzdHI6IHN0cmluZyA9IGRlY29kZXIuZGVjb2RlKGJ1Zik7XHJcbiAgICBjb25zdCBvYmplY3QgPSBvYmpMb2FkZXIucGFyc2Uoc3RyKTtcclxuICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90ZHNMb2FkZXIoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgdGRzTG9hZGVyOiBURFNMb2FkZXIgPSBuZXcgVERTTG9hZGVyKCk7XHJcbiAgICBjb25zdCBvYmplY3QgPSB0ZHNMb2FkZXIucGFyc2UoaW5wdXQuZmlsZS5maWxlQ29udGVudHMsICcnKTtcclxuICAgIG9iamVjdC50cmF2ZXJzZShlbGVtZW50ID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZWxlbWVudCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdGxMb2FkZXIoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RsTG9hZGVyOiBTVExMb2FkZXIgPSBuZXcgU1RMTG9hZGVyKCk7XHJcbiAgICBjb25zdCBvYmplY3QgPSBzdGxMb2FkZXIucGFyc2UoaW5wdXQuZmlsZS5maWxlQ29udGVudHMpO1xyXG4gICAgdGhpcy5fYWRkRnJvbUdlb21ldHJ5KG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRGcm9tR2VvbWV0cnkoZ2VvbWV0cnkpIHtcclxuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IE1lc2hQaG9uZ01hdGVyaWFsKHt0cmFuc3BhcmVudDogdHJ1ZSwgb3BhY2l0eTogZ2VvbWV0cnkuYWxwaGF9KTtcclxuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICBvYmplY3QubmFtZSA9IHRoaXMubW9kZWxOYW1lO1xyXG4gICAgb2JqZWN0LnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIG9iamVjdC5zY2FsZS5zZXQoMSwgMSwgMSk7XHJcbiAgICAvLyBSZW1vdmUgbGlnaHRzIGZyb20gdGhlIGNoaWxkcmVuXHJcbiAgICBvYmplY3QuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcclxuICAgICAgaWYgKGMgaW5zdGFuY2VvZiBMaWdodCkge1xyXG4gICAgICAgIG9iamVjdC5yZW1vdmUoYyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKG9iamVjdCk7XHJcbiAgICB0aGlzLmxvYWRlZE1vZGVsID0gb2JqZWN0O1xyXG4gICAgdGhpcy5fZ2V0Qm91bmRpbmdCb3gob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEJvdW5kaW5nQm94KG9iamVjdDogT2JqZWN0M0QpIHtcclxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IEJveDMoKS5zZXRGcm9tT2JqZWN0KG9iamVjdCk7XHJcbiAgICB0aGlzLmJvdW5kaW5nQm94U2l6ZSA9IGJvdW5kaW5nQm94LmdldFNpemUobmV3IFZlY3RvcjMoKSk7XHJcblxyXG4gICAgdGhpcy5fc2V0TWVhc3VyZW1lbnRzKG9iamVjdCk7XHJcblxyXG4gICAgY29uc3QgbW9kZWxCb3hoZWxwZXIgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUoJ21vZGVsQm94aGVscGVyJyk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5yZW1vdmUobW9kZWxCb3hoZWxwZXIpO1xyXG4gICAgY29uc3QgYm94SGVscGVyID0gbmV3IEJveEhlbHBlcihvYmplY3QpO1xyXG4gICAgYm94SGVscGVyLm1hdGVyaWFsLmNvbG9yLnNldCgweEZGMDBGRik7XHJcbiAgICBib3hIZWxwZXIubmFtZSA9ICdtb2RlbEJveGhlbHBlcic7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQoYm94SGVscGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE1lYXN1cmVtZW50cyhvYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZWxlbWVudHNUb1JlbW92ZTogc3RyaW5nW10gPSBbJ0hlaWdodEhlbHBlcicsICdXaWR0aEhlbHBlcicsICdEZXB0aEhlbHBlciddO1xyXG4gICAgZWxlbWVudHNUb1JlbW92ZS5mb3JFYWNoKGVsZW1lbnROYW1lID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPYmplY3Q6IE9iamVjdDNEID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKGVsZW1lbnROYW1lKTtcclxuICAgICAgdGhpcy5zY2VuZVByZXZpZXcucmVtb3ZlKHNlbGVjdGVkT2JqZWN0KTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYm94OiBCb3gzID0gbmV3IEJveDMoKS5zZXRGcm9tT2JqZWN0KG9iamVjdCk7XHJcbiAgICBjb25zdCBib3VuZGluZ0JveDogVmVjdG9yMyA9IGJveC5nZXRTaXplKG5ldyBWZWN0b3IzKCkpO1xyXG4gICAgY29uc3QgaGVpZ2h0OiBudW1iZXIgPSBib3VuZGluZ0JveC55O1xyXG4gICAgY29uc3Qgd2lkdGg6IG51bWJlciA9IGJvdW5kaW5nQm94Lng7XHJcbiAgICBjb25zdCBkZXB0aDogbnVtYmVyID0gYm91bmRpbmdCb3guejtcclxuICAgIGNvbnN0IGZvbnQ6IEZvbnQgPSB0aGlzLl9mb250U2VydmljZS5tb25vc3BhY2VGb250O1xyXG5cclxuICAgIGxldCBoZWlnaHRMYWJlbFZhbHVlOiBudW1iZXI7XHJcbiAgICBsZXQgd2lkdGhMYWJlbFZhbHVlOiBudW1iZXI7XHJcbiAgICBsZXQgZGVwdGhMYWJlbFZhbHVlOiBudW1iZXI7XHJcbiAgICAvLyBsYWJlbHMgY20gb2YgaW5jaFxyXG4gICAgaWYgKHRoaXMudW5pdHNPZk1lYXN1cmVtZW50ID09PSAnY20nKSB7XHJcbiAgICAgIGhlaWdodExhYmVsVmFsdWUgPSBoZWlnaHQgKiAxMDA7XHJcbiAgICAgIHdpZHRoTGFiZWxWYWx1ZSA9IHdpZHRoICogMTAwO1xyXG4gICAgICBkZXB0aExhYmVsVmFsdWUgPSBkZXB0aCAqIDEwMDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy51bml0c09mTWVhc3VyZW1lbnQgPT09ICdpbmNoZXMnKSB7XHJcbiAgICAgIGhlaWdodExhYmVsVmFsdWUgPSBoZWlnaHQgKiAzOS4zNztcclxuICAgICAgd2lkdGhMYWJlbFZhbHVlID0gd2lkdGggKiAzOS4zNztcclxuICAgICAgZGVwdGhMYWJlbFZhbHVlID0gZGVwdGggKiAzOS4zNztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3aWR0aExhYmVsID0gdGhpcy5fY3JlYXRlM0RUZXh0KFxyXG4gICAgICBgV2lkdGg6ICR7d2lkdGhMYWJlbFZhbHVlLnRvRml4ZWQoMCl9YCxcclxuICAgICAgYm94LmdldENlbnRlcihuZXcgVEhSRUUuVmVjdG9yMygpKS5hZGQobmV3IFRIUkVFLlZlY3RvcjMoMCwgLWhlaWdodCAvIDIsIDApKSxcclxuICAgICAgZm9udCxcclxuICAgICAgJ1dpZHRoSGVscGVyJ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGhlaWdodExhYmVsID0gdGhpcy5fY3JlYXRlM0RUZXh0KFxyXG4gICAgICBgSGVpZ2h0OiAke2hlaWdodExhYmVsVmFsdWUudG9GaXhlZCgwKX1gLFxyXG4gICAgICBib3guZ2V0Q2VudGVyKG5ldyBUSFJFRS5WZWN0b3IzKCkpLmFkZChuZXcgVEhSRUUuVmVjdG9yMyh3aWR0aCAvIDIgKyAwLjEsIDAsIDApKSxcclxuICAgICAgZm9udCxcclxuICAgICAgJ0hlaWdodEhlbHBlcidcclxuICAgICk7XHJcbiAgICBjb25zdCBkZXB0aExhYmVsID0gdGhpcy5fY3JlYXRlM0RUZXh0KFxyXG4gICAgICBgRGVwdGg6ICR7ZGVwdGhMYWJlbFZhbHVlLnRvRml4ZWQoMCl9YCxcclxuICAgICAgYm94LmdldENlbnRlcihuZXcgVEhSRUUuVmVjdG9yMygpKS5hZGQobmV3IFRIUkVFLlZlY3RvcjMoMCwgMCwgLWRlcHRoIC8gMiAtIDAuMSkpLFxyXG4gICAgICBmb250LFxyXG4gICAgICAnRGVwdGhIZWxwZXInXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZCh3aWR0aExhYmVsKTtcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChoZWlnaHRMYWJlbCk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQoZGVwdGhMYWJlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGUzRFRleHQodGV4dDogc3RyaW5nLCBwb3NpdGlvbjogVmVjdG9yMywgZm9udDogRm9udCwgbmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0ZXh0R2VvbWV0cnk6IFRleHRHZW9tZXRyeSA9IG5ldyBUZXh0R2VvbWV0cnkodGV4dCwge1xyXG4gICAgICBmb250OiBmb250LFxyXG4gICAgICBzaXplOiAwLjEsXHJcbiAgICAgIGhlaWdodDogMC4wMixcclxuICAgIH0pO1xyXG4gICAgY29uc3QgdGV4dE1hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7Y29sb3I6IDB4RkYwMEZGfSk7XHJcbiAgICBjb25zdCB0ZXh0TWVzaDogTWVzaCA9IG5ldyBNZXNoKHRleHRHZW9tZXRyeSwgdGV4dE1hdGVyaWFsKTtcclxuICAgIHRleHRNZXNoLnBvc2l0aW9uLmNvcHkocG9zaXRpb24pO1xyXG4gICAgdGV4dE1lc2gubmFtZSA9IG5hbWU7XHJcbiAgICByZXR1cm4gdGV4dE1lc2g7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9ibG9iVG9BcnJheUJ1ZmZlcihibG9iOiBCbG9iKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBpZiAocmVhZGVyLnJlc3VsdCkge1xyXG4gICAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIEFycmF5QnVmZmVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRXJyb3IgcmVhZGluZyBibG9iIGFzIEFycmF5QnVmZmVyJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIHJlYWQgYmxvYiBhcyBBcnJheUJ1ZmZlcicpKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVMaWdodEZyb21Qcm9wZXJ0aWVzKGxpZ2h0UHJvcGVydGllczogTGlnaHRQcm9wZXJ0aWVzKSB7XHJcbiAgICBjb25zdCBsaWdodFR5cGU6IExpZ2h0RW51bSA9IGxpZ2h0UHJvcGVydGllcy50eXBlO1xyXG4gICAgY29uc3QgZ2V0TGlnaHRzOiBMaWdodENyZWF0ZVNlcnZpY2UgPSBuZXcgTGlnaHRDcmVhdGVTZXJ2aWNlKCk7XHJcbiAgICBjb25zdCBsaWdodDogTGlnaHQgPSBnZXRMaWdodHMuY3JlYXRlTmV3TGlnaHQobGlnaHRUeXBlKTtcclxuICAgIGxpZ2h0LnVzZXJEYXRhLndhbGxPZmZzZXQgPSBsaWdodFByb3BlcnRpZXMud2FsbE9mZnNldDtcclxuICAgIGxpZ2h0LnVzZXJEYXRhLnJvdGF0aW9uT2Zmc2V0ID0gbGlnaHRQcm9wZXJ0aWVzLnJvdGF0aW9uT2Zmc2V0O1xyXG4gICAgbGlnaHQudXNlckRhdGEudG9wRG93bkRpcmVjdGlvbmFsID0gbGlnaHRQcm9wZXJ0aWVzLnRvcERvd25EaXJlY3Rpb25hbDtcclxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGlnaHRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGlmICghbGlnaHQuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3BlcnR5ID09PSAncG9zaXRpb24nKSB7XHJcbiAgICAgICAgbGlnaHQucG9zaXRpb24ueSA9IGxpZ2h0UHJvcGVydGllcy5wb3NpdGlvbi55O1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BlcnR5ID09PSAnY29sb3InKSB7XHJcbiAgICAgICAgbGlnaHQuY29sb3IgPSBuZXcgQ29sb3IobGlnaHRQcm9wZXJ0aWVzLmNvbG9yKTtcclxuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ2dyb3VuZENvbG9yJykge1xyXG4gICAgICAgIChsaWdodCBhcyBhbnkpLmdyb3VuZENvbG9yID0gbmV3IENvbG9yKGxpZ2h0UHJvcGVydGllcy5ncm91bmRDb2xvcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T2JqZWN0UHJvcGVydGllcyhsaWdodCwgcHJvcGVydHksIGxpZ2h0UHJvcGVydGllc1twcm9wZXJ0eV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQobGlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0T2JqZWN0UHJvcGVydGllcyhvYmplY3Q6IExpZ2h0IHwgTGlnaHRQcm9wZXJ0aWVzLCBwcm9wZXJ0eTogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAocHJvcGVydHkgPT09ICdzaGFkb3cnKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB2YWx1ZSkge1xyXG4gICAgICAgIGlmICghb2JqZWN0W3Byb3BlcnR5XS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iamVjdFtwcm9wZXJ0eV1bcHJvcF0gPSB2YWx1ZVtwcm9wXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIl19
|