@colijnit/homedecorator 258.1.1 → 258.1.2
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/enum/icon.enum.d.ts +1 -0
- package/app/core/enum/message-type.enum.d.ts +2 -1
- package/app/core/interface/message-with-payload.interface.d.ts +1 -0
- package/app/core/model/homedecorator-settings-options.d.ts +1 -1
- package/app/core/model/homedecorator-settings.d.ts +3 -0
- package/app/core/service/3dm-api.d.ts +2 -2
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +9 -1
- package/app/core/service/homedecorator-connector.service.d.ts +15 -2
- package/app/core/service/utils.service.d.ts +1 -1
- package/app/core/utils/object.utils.d.ts +2 -0
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/wall-measurements.service.d.ts +2 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +3 -0
- package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +2 -0
- package/app/plugins/product-configurator/product-configurator-selector-list-of-values.component.scss +28 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.scss +38 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.scss +0 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.component.scss +56 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.d.ts +26 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.scss +46 -0
- package/app/plugins/product-configurator/product-configurator.component.d.ts +38 -0
- package/app/plugins/product-configurator/product-configurator.component.scss +35 -0
- package/app/plugins/product-configurator/product-configurator.module.d.ts +18 -0
- package/app/plugins/product-configurator/template_variables.scss +13 -0
- package/app/plugins/render/model/blender-render-settings.d.ts +10 -0
- package/app/plugins/render/model/blender-scene-settings.d.ts +18 -0
- package/app/plugins/render/render-controls/render-controls.component.d.ts +19 -7
- package/app/plugins/render/service/new-render.service.d.ts +21 -4
- package/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.scss +1 -1
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +5 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +4 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.scss +17 -0
- package/app/plugins/threedselector/threedselector.module.d.ts +2 -1
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/assets/icons/circle_regular.svg +0 -0
- package/bundles/colijnit-homedecorator.umd.js +1986 -835
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/icon.enum.js +2 -1
- package/esm2015/app/core/enum/message-type.enum.js +2 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -2
- package/esm2015/app/core/model/homedecorator-settings.js +3 -1
- package/esm2015/app/core/model/icon.js +2 -1
- package/esm2015/app/core/service/3dm-api.js +15 -22
- package/esm2015/app/core/service/homedecorator-app-event.service.js +3 -2
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +65 -7
- package/esm2015/app/core/service/homedecorator-connector.service.js +150 -6
- package/esm2015/app/core/service/homedecorator-settings.service.js +8 -1
- package/esm2015/app/core/service/utils.service.js +116 -93
- package/esm2015/app/core/utils/object.utils.js +13 -1
- package/esm2015/app/homedecorator.component.js +1 -2
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/core3d.component.js +2 -2
- package/esm2015/app/plugins/core3d/service/wall-measurements.service.js +7 -1
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +98 -50
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +4 -4
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +21 -11
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-button.component.js +67 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.js +57 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.js +75 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.js +90 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector.component.js +253 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.component.js +151 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.module.js +115 -0
- package/esm2015/app/plugins/render/model/blender-render-settings.js +3 -0
- package/esm2015/app/plugins/render/model/blender-scene-settings.js +10 -0
- package/esm2015/app/plugins/render/model/render-parameters.js +3 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +532 -446
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +6 -40
- package/esm2015/app/plugins/render/service/new-render.service.js +212 -44
- package/esm2015/app/plugins/render/service/render.service.js +6 -9
- package/esm2015/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.js +1 -1
- package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +12 -10
- package/esm2015/app/plugins/threedselector/element-buttons/element-buttons.component.js +2 -2
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +55 -1
- package/esm2015/app/plugins/threedselector/threedselector/service/load-furniture.service.js +3 -3
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +64 -15
- package/esm2015/app/plugins/threedselector/threedselector/utils/asset.utils.js +1 -1
- package/esm2015/app/plugins/threedselector/threedselector.module.js +8 -4
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +1 -1
- package/esm2015/app/shared/category-library/category-library.component.js +1 -1
- package/fesm2015/colijnit-homedecorator.js +2522 -1149
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +4 -4
- package/styles.scss +1 -1
|
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { Component, Inject, ViewChild } from '@angular/core';
|
|
11
11
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
12
12
|
import * as THREE from 'three';
|
|
13
|
-
import { Box3, BoxHelper, Color, GridHelper, Light, LinearSRGBColorSpace, Mesh, MeshBasicMaterial, MeshPhongMaterial, PCFSoftShadowMap, PerspectiveCamera, PlaneGeometry, PMREMGenerator, Scene, Vector3, WebGLRenderer } from 'three';
|
|
13
|
+
import { Box3, BoxHelper, Color, DirectionalLight, GridHelper, Light, LinearSRGBColorSpace, Mesh, MeshBasicMaterial, MeshPhongMaterial, PCFSoftShadowMap, PerspectiveCamera, PlaneGeometry, PMREMGenerator, Scene, Vector3, WebGLRenderer } from 'three';
|
|
14
14
|
import { FloatType, LinearToneMapping } from 'three/src/constants';
|
|
15
15
|
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
|
|
16
16
|
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
|
|
@@ -35,11 +35,12 @@ import * as i5 from "../../../core/service/homedecorator-connector-adapter.servi
|
|
|
35
35
|
import * as i6 from "../../../core/service/homedecorator-dictionary.service";
|
|
36
36
|
import * as i7 from "../../core3d/service/font.service";
|
|
37
37
|
import * as i8 from "@angular/material/icon";
|
|
38
|
-
import * as i9 from "
|
|
39
|
-
import * as i10 from "@angular/material/
|
|
40
|
-
import * as i11 from "@angular/material/
|
|
41
|
-
import * as i12 from "@angular/material/
|
|
42
|
-
import * as i13 from "@angular/
|
|
38
|
+
import * as i9 from "../../../shared/loader/loader.component";
|
|
39
|
+
import * as i10 from "@angular/material/slide-toggle";
|
|
40
|
+
import * as i11 from "@angular/material/form-field";
|
|
41
|
+
import * as i12 from "@angular/material/select";
|
|
42
|
+
import * as i13 from "@angular/material/core";
|
|
43
|
+
import * as i14 from "@angular/common";
|
|
43
44
|
export class ModelPreviewComponent {
|
|
44
45
|
constructor(data, settingsService, iconCache, _dialogRef, _messageService, _dialog, _adapterService, _dictionaryService, _fontService) {
|
|
45
46
|
this.data = data;
|
|
@@ -65,11 +66,13 @@ export class ModelPreviewComponent {
|
|
|
65
66
|
this.selectedPlacement = 0;
|
|
66
67
|
this.hasErrors = false;
|
|
67
68
|
this.listOfErrors = [];
|
|
69
|
+
this.showLoader = false;
|
|
68
70
|
this._measurements = [];
|
|
69
71
|
this.icon = IconEnum;
|
|
70
72
|
this.font = this._fontService.hudFont;
|
|
71
73
|
}
|
|
72
74
|
ngOnInit() {
|
|
75
|
+
this.showLoader = true;
|
|
73
76
|
this.initScene();
|
|
74
77
|
this.loadModel(this.data);
|
|
75
78
|
this._adapterService.getModelPlacementOptions().then(result => {
|
|
@@ -116,10 +119,35 @@ export class ModelPreviewComponent {
|
|
|
116
119
|
this.controls.update();
|
|
117
120
|
this.loadFloorPlane();
|
|
118
121
|
this.loadReferenceModel();
|
|
119
|
-
this.loadLights();
|
|
122
|
+
// this.loadLights();
|
|
120
123
|
const gridHelper = new GridHelper(this.gridSize, this.gridDivision);
|
|
121
124
|
gridHelper.name = 'GridHelper';
|
|
122
125
|
this.scenePreview.add(gridHelper);
|
|
126
|
+
const light = new DirectionalLight(0xffffff, 5);
|
|
127
|
+
light.position.set(0, 2, 10);
|
|
128
|
+
light.target.position.set(0, 0, 0);
|
|
129
|
+
const lightTwo = new DirectionalLight(0xffffff, 5);
|
|
130
|
+
lightTwo.position.set(0, 2, -10);
|
|
131
|
+
lightTwo.target.position.set(0, 0, 0);
|
|
132
|
+
const lightThree = new DirectionalLight(0xffffff, 5);
|
|
133
|
+
lightThree.position.set(10, 2, 0);
|
|
134
|
+
lightThree.target.position.set(0, 0, 0);
|
|
135
|
+
const lightFour = new DirectionalLight(0xffffff, 5);
|
|
136
|
+
lightFour.position.set(-10, 2, 0);
|
|
137
|
+
lightFour.target.position.set(0, 0, 0);
|
|
138
|
+
const lightCeiling = new DirectionalLight(0xffffff, 5);
|
|
139
|
+
lightCeiling.position.set(0, 5, 0);
|
|
140
|
+
lightCeiling.target.position.set(0, 0, 0);
|
|
141
|
+
this.scenePreview.add(light);
|
|
142
|
+
this.scenePreview.add(light.target);
|
|
143
|
+
this.scenePreview.add(lightTwo);
|
|
144
|
+
this.scenePreview.add(lightTwo.target);
|
|
145
|
+
this.scenePreview.add(lightThree);
|
|
146
|
+
this.scenePreview.add(lightThree.target);
|
|
147
|
+
this.scenePreview.add(lightFour);
|
|
148
|
+
this.scenePreview.add(lightFour.target);
|
|
149
|
+
this.scenePreview.add(lightCeiling);
|
|
150
|
+
this.scenePreview.add(lightCeiling.target);
|
|
123
151
|
this._animate();
|
|
124
152
|
}
|
|
125
153
|
loadFloorPlane() {
|
|
@@ -198,6 +226,7 @@ export class ModelPreviewComponent {
|
|
|
198
226
|
}
|
|
199
227
|
exportSceneAsGLB(returnType) {
|
|
200
228
|
// add timestamp
|
|
229
|
+
this.showLoader = true;
|
|
201
230
|
const timestamp = new Date().getTime();
|
|
202
231
|
const exportFileName = this._setModelName(this.glbExportName.nativeElement.value) + '_' + timestamp;
|
|
203
232
|
const gltfExporter = new GLTFExporter();
|
|
@@ -319,6 +348,7 @@ export class ModelPreviewComponent {
|
|
|
319
348
|
document.body.appendChild(element);
|
|
320
349
|
element.click();
|
|
321
350
|
document.body.removeChild(element);
|
|
351
|
+
this.showLoader = false;
|
|
322
352
|
});
|
|
323
353
|
}
|
|
324
354
|
_sendModelToCDN(fileName, blob) {
|
|
@@ -341,11 +371,13 @@ export class ModelPreviewComponent {
|
|
|
341
371
|
this.data.thirdPartyModelService.parseModelToGLB(file, hash, modelUrl, configurationData, priceData, metaData).then(result => {
|
|
342
372
|
this._dialog.closeAll();
|
|
343
373
|
this._messageService.emit(MessageType.HideProductCatalog);
|
|
374
|
+
this.showLoader = false;
|
|
344
375
|
});
|
|
345
376
|
});
|
|
346
377
|
}
|
|
347
378
|
}).catch(error => {
|
|
348
379
|
this._messageService.emit(MessageType.RenderError, { title: 'Upload error', message: error });
|
|
380
|
+
this.showLoader = false;
|
|
349
381
|
});
|
|
350
382
|
});
|
|
351
383
|
});
|
|
@@ -356,23 +388,33 @@ export class ModelPreviewComponent {
|
|
|
356
388
|
}
|
|
357
389
|
_glbLoader(input) {
|
|
358
390
|
const loader = new GLTFLoader();
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
this.listOfErrors.push(e);
|
|
391
|
+
const modelFile = input.file.file;
|
|
392
|
+
const url = URL.createObjectURL(modelFile);
|
|
393
|
+
loader.load(url, (object) => {
|
|
394
|
+
this._prepModelForScene(object.scene);
|
|
395
|
+
}, (xhr) => {
|
|
396
|
+
// leave this for now, we may add some type of loader later
|
|
397
|
+
// console.log(`Loading: ${xhr.loaded / xhr.total * 100}%`);
|
|
398
|
+
}, (error) => {
|
|
399
|
+
this.listOfErrors.push(error);
|
|
369
400
|
this.hasErrors = true;
|
|
370
|
-
|
|
401
|
+
this.showLoader = false;
|
|
402
|
+
});
|
|
371
403
|
}
|
|
372
404
|
_fbxLoader(input) {
|
|
373
405
|
const fbxLoader = new FBXLoader();
|
|
374
|
-
const
|
|
375
|
-
|
|
406
|
+
const modelFile = input.file.file;
|
|
407
|
+
const url = URL.createObjectURL(modelFile);
|
|
408
|
+
fbxLoader.load(url, (object) => {
|
|
409
|
+
this._prepModelForScene(object);
|
|
410
|
+
}, (xhr) => {
|
|
411
|
+
// leave this for now, we may add some type of loader later
|
|
412
|
+
// console.log(`Loading: ${xhr.loaded / xhr.total * 100}%`);
|
|
413
|
+
}, (error) => {
|
|
414
|
+
this.listOfErrors.push(error);
|
|
415
|
+
this.hasErrors = true;
|
|
416
|
+
this.showLoader = false;
|
|
417
|
+
});
|
|
376
418
|
}
|
|
377
419
|
_objLoader(input) {
|
|
378
420
|
const objLoader = new OBJLoader();
|
|
@@ -403,18 +445,10 @@ export class ModelPreviewComponent {
|
|
|
403
445
|
if (validationResult.length > 0) {
|
|
404
446
|
this.listOfErrors = [...this.listOfErrors, ...validationResult];
|
|
405
447
|
this.hasErrors = true;
|
|
448
|
+
this.showLoader = false;
|
|
406
449
|
}
|
|
407
450
|
object.name = this.modelName;
|
|
408
|
-
|
|
409
|
-
object.rotation.set(0, 0, 0);
|
|
410
|
-
object.scale.set(1, 1, 1);
|
|
411
|
-
// object.traverse((node: any) => {
|
|
412
|
-
// if (node.isMesh) {
|
|
413
|
-
// node.rotation.set(0, 0, 0);
|
|
414
|
-
// node.position.set(0, 0, 0);
|
|
415
|
-
// node.scale.set(1, 1, 1);
|
|
416
|
-
// }
|
|
417
|
-
// });
|
|
451
|
+
this._applyTransforms(object);
|
|
418
452
|
// Remove lights from the children
|
|
419
453
|
object.children.forEach(c => {
|
|
420
454
|
if (c instanceof Light) {
|
|
@@ -424,6 +458,7 @@ export class ModelPreviewComponent {
|
|
|
424
458
|
this.scenePreview.add(object);
|
|
425
459
|
this.loadedModel = object;
|
|
426
460
|
this._getBoundingBox(object);
|
|
461
|
+
this.showLoader = false;
|
|
427
462
|
}
|
|
428
463
|
_getBoundingBox(object) {
|
|
429
464
|
const boundingBox = new Box3().setFromObject(object);
|
|
@@ -436,6 +471,18 @@ export class ModelPreviewComponent {
|
|
|
436
471
|
boxHelper.name = 'modelBoxhelper';
|
|
437
472
|
this.scenePreview.add(boxHelper);
|
|
438
473
|
}
|
|
474
|
+
_applyTransforms(object) {
|
|
475
|
+
object.traverse((child) => {
|
|
476
|
+
if (child.isMesh && child.geometry) {
|
|
477
|
+
child.updateMatrix();
|
|
478
|
+
child.geometry.applyMatrix4(child.matrix);
|
|
479
|
+
child.position.set(0, 0, 0);
|
|
480
|
+
child.rotation.set(0, 0, 0);
|
|
481
|
+
child.scale.set(1, 1, 1);
|
|
482
|
+
child.updateMatrix();
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
}
|
|
439
486
|
_setMeasurements(object) {
|
|
440
487
|
const elementsToRemove = ['HeightHelper', 'WidthHelper', 'DepthHelper'];
|
|
441
488
|
elementsToRemove.forEach(elementName => {
|
|
@@ -544,24 +591,6 @@ export class ModelPreviewComponent {
|
|
|
544
591
|
if (!modelGroup || !(modelGroup instanceof THREE.Group)) {
|
|
545
592
|
validation.push('Parser did not return a valid THREE.Group.');
|
|
546
593
|
}
|
|
547
|
-
// Does it has images that are not valid?
|
|
548
|
-
const dummyTexture = new THREE.Texture();
|
|
549
|
-
modelGroup.traverse((child) => {
|
|
550
|
-
if (child.isMesh && child.material) {
|
|
551
|
-
const materials = Array.isArray(child.material) ? child.material : [child.material];
|
|
552
|
-
materials.forEach((material) => {
|
|
553
|
-
['map', 'normalMap', 'roughnessMap', 'metalnessMap', 'emissiveMap'].forEach((mapName) => {
|
|
554
|
-
if (material[mapName] && !material[mapName].image) {
|
|
555
|
-
validation.push('Material ' + material[mapName].name + ' has invalid image data');
|
|
556
|
-
material[mapName] = null;
|
|
557
|
-
}
|
|
558
|
-
if (material[mapName] && !(material[mapName].image instanceof HTMLImageElement)) {
|
|
559
|
-
material[mapName] = dummyTexture;
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
});
|
|
563
|
-
}
|
|
564
|
-
});
|
|
565
594
|
// Does it contain meshes
|
|
566
595
|
let hasVisibleMeshes = false;
|
|
567
596
|
modelGroup.traverse((object) => {
|
|
@@ -575,6 +604,16 @@ export class ModelPreviewComponent {
|
|
|
575
604
|
else if (!object.geometry.attributes.position || object.geometry.attributes.position.count === 0) {
|
|
576
605
|
validation.push('Mesh ' + object.name + ' geometry has no position data.');
|
|
577
606
|
}
|
|
607
|
+
if (object.material) {
|
|
608
|
+
if (object.material.length > 1) {
|
|
609
|
+
for (const mat of object.material) {
|
|
610
|
+
this._validateMaterial(mat);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
this._validateMaterial(object.material);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
578
617
|
// basic mats check
|
|
579
618
|
if (!object.material) {
|
|
580
619
|
validation.push('Mesh ' + object.name + ' has no material');
|
|
@@ -608,6 +647,13 @@ export class ModelPreviewComponent {
|
|
|
608
647
|
}
|
|
609
648
|
return validation;
|
|
610
649
|
}
|
|
650
|
+
_validateMaterial(material) {
|
|
651
|
+
if (material.map && material.map.source && material.map.source.data === null) {
|
|
652
|
+
material.map.dispose();
|
|
653
|
+
material.map = null;
|
|
654
|
+
material.needsUpdate = true;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
611
657
|
}
|
|
612
658
|
ModelPreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ModelPreviewComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.HomedecoratorSettingsService }, { token: i2.HomedecoratorIconCacheService }, { token: i3.MatDialogRef }, { token: i4.MessageBusService }, { token: i3.MatDialog }, { token: i5.HomedecoratorConnectorAdapterService }, { token: i6.HomedecoratorDictionaryService }, { token: i7.FontService }], target: i0.ɵɵFactoryTarget.Component });
|
|
613
659
|
ModelPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ModelPreviewComponent, selector: "rp-model-preview", viewQueries: [{ propertyName: "glbExportName", first: true, predicate: ["fileName"], descendants: true }, { propertyName: "heightArticle", first: true, predicate: ["heightArticle"], descendants: true }], ngImport: i0, template: `
|
|
@@ -616,6 +662,7 @@ ModelPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
616
662
|
</div>
|
|
617
663
|
<div class="model-preview">
|
|
618
664
|
<div class="model-preview-window">
|
|
665
|
+
<rp-loader [show]=showLoader></rp-loader>
|
|
619
666
|
<div class="model-preview-container" id="canvasContainer"></div>
|
|
620
667
|
<div class="model-preview-window-bottom">
|
|
621
668
|
<div>
|
|
@@ -780,7 +827,7 @@ ModelPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
780
827
|
|
|
781
828
|
</div>
|
|
782
829
|
</div>
|
|
783
|
-
`, isInline: true, styles: [".model-preview{display:flex;flex-direction:row;font-size:14px;position:relative}.model-preview .model-preview-window .model-preview-window-bottom{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.model-preview .model-preview-window .model-preview-window-bottom .disclaimer-text-container{padding-right:20px;text-align:right;font-style:italic;font-size:12px}.model-preview .model-preview-actions{min-width:350px;box-sizing:border-box;padding:10px 20px;border-left:1px solid #5b6875}.model-preview .model-preview-actions #heightArticle{max-width:160px}.model-preview .model-preview-actions .units-select-form{width:80px;margin:0 5px}.model-preview .model-preview-actions .model-preview-info-container{margin-bottom:10px}.model-preview .model-preview-actions .model-preview-info-container .model-preview-info-left{font-weight:bolder}.model-preview .model-preview-actions .model-preview-info{margin-top:80px}.model-preview .exportButton{cursor:pointer;color:#fff;background:#da9803;border:1px solid #da9803;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}.model-preview .exportButton:hover{background:#da9803;color:#fff}.model-preview input{border:1px solid #5b6875;box-sizing:border-box;padding:3px 10px;border-radius:3px;line-height:30px;width:100%}.mat-radio-wrapper{margin:10px 0}mat-radio-group mat-radio-button{display:block}.base-button{cursor:pointer;color:#fff;background:#da9803;border:1px solid #da9803;border-radius:3px;box-sizing:border-box;padding:4px 10px;line-height:30px}.base-button:hover{background:#da9803;color:#fff}.model-placement-container div{display:flex;justify-content:space-between;margin:5px 0;align-items:center}.rotation-button-container div{display:flex;justify-content:space-between;margin-bottom:5px}.rotation-button-container div p{margin:0;padding:0}.rotation-button-container div button{margin:0 0 0 10px;cursor:pointer;color:#5b6875;background:#fff;border:2px solid #5b6875;border-radius:50%;box-sizing:border-box;padding:0;height:22px;width:22px;font-size:18px;text-align:center}.rotation-button-container div button:hover{background:#da9803;color:#fff}.rotation-button-container div .button-as-link{color:#da9803;border:none;width:100%;height:100%;font-size:14px;position:relative;top:-15px}.rotation-button-container div .button-as-link ::ng-deep mat-icon{width:25px;height:25px;position:relative;top:8px}.rotation-button-container div .button-as-link ::ng-deep mat-icon svg path{fill:#da9803}.rotation-button-container div .button-as-link:hover{background:none;color:#da9803}.error-container{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid #f5c6cb;border-radius:.25rem;color:#721c24;background-color:#f8d7da;max-width:190px}.exportButton,.exportButtonDark{display:inline-block!important;margin-right:10px}.exportButtonDark{background:#5b6875;border-color:#5b6875}.exportButtonDark:hover{background:#5b6875;color:#fff}.model-close-preview{text-align:right;cursor:pointer}.model-error-background{position:absolute;top:-52px;right:-24px;bottom:-24px;left:-24px;z-index:99;background:rgba(0,0,0,.6)}.model-error-container{position:relative;background:#fff;box-sizing:border-box;padding:10px 25px;border:1px solid #5b6875;top:30%;left:50%;width:400px;margin-left:-200px}.model-error-container .model-error-header{display:flex;justify-content:space-between}:host ::ng-deep .mat-form-field-wrapper{padding-bottom:0;border:1px solid #5b6875;border-radius:4px}:host ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-infix{padding:0;border:none}:host ::ng-deep .mat-select-value{padding-left:5px}:host ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{height:0}:host ::ng-deep .mat-select-trigger{line-height:36px}:host ::ng-deep mat-icon{width:18px;height:18px}:host ::ng-deep mat-icon svg path{fill:#5b6875}:host ::ng-deep .mat-slide-toggle-content{width:calc(100% - 36px);min-width:300px}\n"], components: [{ type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type:
|
|
830
|
+
`, isInline: true, styles: [".model-preview{display:flex;flex-direction:row;font-size:14px;position:relative}.model-preview .model-preview-window .model-preview-window-bottom{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.model-preview .model-preview-window .model-preview-window-bottom .disclaimer-text-container{padding-right:20px;text-align:right;font-style:italic;font-size:12px}.model-preview .model-preview-actions{min-width:350px;box-sizing:border-box;padding:10px 20px;border-left:1px solid #5b6875}.model-preview .model-preview-actions #heightArticle{max-width:160px}.model-preview .model-preview-actions .units-select-form{width:80px;margin:0 5px}.model-preview .model-preview-actions .model-preview-info-container{margin-bottom:10px}.model-preview .model-preview-actions .model-preview-info-container .model-preview-info-left{font-weight:bolder}.model-preview .model-preview-actions .model-preview-info{margin-top:80px}.model-preview .exportButton{cursor:pointer;color:#fff;background:#da9803;border:1px solid #da9803;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}.model-preview .exportButton:hover{background:#da9803;color:#fff}.model-preview input{border:1px solid #5b6875;box-sizing:border-box;padding:3px 10px;border-radius:3px;line-height:30px;width:100%}.mat-radio-wrapper{margin:10px 0}mat-radio-group mat-radio-button{display:block}.base-button{cursor:pointer;color:#fff;background:#da9803;border:1px solid #da9803;border-radius:3px;box-sizing:border-box;padding:4px 10px;line-height:30px}.base-button:hover{background:#da9803;color:#fff}.model-placement-container div{display:flex;justify-content:space-between;margin:5px 0;align-items:center}.rotation-button-container div{display:flex;justify-content:space-between;margin-bottom:5px}.rotation-button-container div p{margin:0;padding:0}.rotation-button-container div button{margin:0 0 0 10px;cursor:pointer;color:#5b6875;background:#fff;border:2px solid #5b6875;border-radius:50%;box-sizing:border-box;padding:0;height:22px;width:22px;font-size:18px;text-align:center}.rotation-button-container div button:hover{background:#da9803;color:#fff}.rotation-button-container div .button-as-link{color:#da9803;border:none;width:100%;height:100%;font-size:14px;position:relative;top:-15px}.rotation-button-container div .button-as-link ::ng-deep mat-icon{width:25px;height:25px;position:relative;top:8px}.rotation-button-container div .button-as-link ::ng-deep mat-icon svg path{fill:#da9803}.rotation-button-container div .button-as-link:hover{background:none;color:#da9803}.error-container{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid #f5c6cb;border-radius:.25rem;color:#721c24;background-color:#f8d7da;max-width:190px}.exportButton,.exportButtonDark{display:inline-block!important;margin-right:10px}.exportButtonDark{background:#5b6875;border-color:#5b6875}.exportButtonDark:hover{background:#5b6875;color:#fff}.model-close-preview{text-align:right;cursor:pointer}.model-error-background{position:absolute;top:-52px;right:-24px;bottom:-24px;left:-24px;z-index:99;background:rgba(0,0,0,.6)}.model-error-container{position:relative;background:#fff;box-sizing:border-box;padding:10px 25px;border:1px solid #5b6875;top:30%;left:50%;width:400px;margin-left:-200px}.model-error-container .model-error-header{display:flex;justify-content:space-between}:host ::ng-deep .mat-form-field-wrapper{padding-bottom:0;border:1px solid #5b6875;border-radius:4px}:host ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-infix{padding:0;border:none}:host ::ng-deep .mat-select-value{padding-left:5px}:host ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{height:0}:host ::ng-deep .mat-select-trigger{line-height:36px}:host ::ng-deep mat-icon{width:18px;height:18px}:host ::ng-deep mat-icon svg path{fill:#5b6875}:host ::ng-deep .mat-slide-toggle-content{width:calc(100% - 36px);min-width:300px}\n"], components: [{ type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9.LoaderComponent, selector: "rp-loader", inputs: ["show"] }, { type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i12.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i13.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
784
831
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ModelPreviewComponent, decorators: [{
|
|
785
832
|
type: Component,
|
|
786
833
|
args: [{
|
|
@@ -791,6 +838,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
791
838
|
</div>
|
|
792
839
|
<div class="model-preview">
|
|
793
840
|
<div class="model-preview-window">
|
|
841
|
+
<rp-loader [show]=showLoader></rp-loader>
|
|
794
842
|
<div class="model-preview-container" id="canvasContainer"></div>
|
|
795
843
|
<div class="model-preview-window-bottom">
|
|
796
844
|
<div>
|
|
@@ -968,4 +1016,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
968
1016
|
type: ViewChild,
|
|
969
1017
|
args: ['heightArticle']
|
|
970
1018
|
}] } });
|
|
971
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL21vZGVsLXVwbG9hZGVyL21vZGVsLXByZXZpZXdlci9tb2RlbC1wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLE1BQU0sRUFBcUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBQyxlQUFlLEVBQTBCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEYsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLElBQUksRUFDSixpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxLQUFLLEVBRUwsT0FBTyxFQUNQLGFBQWEsRUFDZCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDdkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUcvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFL0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBSWpFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9FQUFvRSxDQUFDO0FBRXRHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFNL0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBR3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWtMOUMsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUNrQyxJQUkvQixFQUNNLGVBQTZDLEVBQzdDLFNBQXdDLEVBQ3ZDLFVBQStDLEVBQy9DLGVBQWtDLEVBQ2xDLE9BQWtCLEVBQ2xCLGVBQXFELEVBQ3JELGtCQUFrRCxFQUNsRCxZQUF5QjtRQVpELFNBQUksR0FBSixJQUFJLENBSW5DO1FBQ00sb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQzdDLGNBQVMsR0FBVCxTQUFTLENBQStCO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQXFDO1FBQy9DLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQ2xCLG9CQUFlLEdBQWYsZUFBZSxDQUFzQztRQUNyRCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWdDO1FBQ2xELGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBYzVCLHVCQUFrQixHQUFXLElBQUksQ0FBQztRQUNsQyxVQUFLLEdBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbkMsV0FBTSxHQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBQ25DLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFFekIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFbEMsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFFeEIsa0JBQWEsR0FBcUIsRUFBRSxDQUFDO1FBRTFCLFNBQUksR0FBRyxRQUFRLENBQUM7UUFqQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQWtDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUVNLFNBQVM7UUFDZCxNQUFNLFNBQVMsR0FBVyxHQUFHLENBQUM7UUFFOUIsYUFBYTtRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNoQyxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEUsTUFBTSxhQUFhLEdBQXNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsTUFBTSxPQUFPLEdBQVEsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQ3ZDLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1lBQ1gsU0FBUyxFQUFFLElBQUk7WUFDZixxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLHNCQUFzQixFQUFFLElBQUk7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRW5HLGNBQWM7UUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLE1BQU0sVUFBVSxHQUFlLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hGLFVBQVUsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0sY0FBYztRQUNuQixNQUFNLGFBQWEsR0FBa0IsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEcsTUFBTSxhQUFhLEdBQXNCLElBQUksaUJBQWlCLENBQUMsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQztRQUMxRyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLFVBQVU7UUFDZixNQUFNLGtCQUFrQixHQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDO1FBQzFGLE1BQU0sV0FBVyxHQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDO1FBRWhGLElBQUksZ0JBQTZCLENBQUM7UUFDbEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxrQkFBa0IsRUFBRTtZQUN2QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDdkMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO2dCQUMxQixNQUFNO2FBQ1A7U0FDRjtRQUNELElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO1NBQ2hDO1FBQ0QsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLGtCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUNwQyxNQUFNLGNBQWMsR0FBVyxtQkFBbUIsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRTtZQUNqRCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1NBQ2hGO1FBQ0QsTUFBTSxNQUFNLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFNLElBQUksRUFBQyxFQUFFO1lBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25ELElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO1lBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7YUFBTSxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjthQUFNLElBQUksUUFBUSxLQUFLLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7YUFBTSxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFTSxRQUFRLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLElBQUksVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDaEUsTUFBTSxjQUFjLEdBQW1CLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDaEYsY0FBYyxDQUFDLDRCQUE0QixFQUFFLENBQUM7Z0JBQzlDLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztnQkFDNUQsOERBQThEO2dCQUM5RCxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUN4QyxnQkFBZ0I7UUFDaEIsTUFBTSxTQUFTLEdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQyxNQUFNLGNBQWMsR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFDNUcsTUFBTSxZQUFZLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsSUFBSSxLQUFZLENBQUM7UUFDakIsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xGLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsRUFBRSxLQUFLO1lBQ1YsV0FBVyxFQUFFLElBQUk7WUFDakIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixZQUFZLEVBQUUsS0FBSztZQUNuQixNQUFNLEVBQUUsSUFBSTtZQUNaLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7UUFDRixZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQW1CLEVBQUUsRUFBRTtZQUNoRCxNQUFNLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFDLENBQUMsQ0FBQztZQUMxRSxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxjQUFjLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEQ7UUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVNLFlBQVk7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMzRCxJQUFJLGFBQXFCLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxFQUFFO1lBQ3BDLGFBQWEsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO1NBQ25DO2FBQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssUUFBUSxFQUFFO1lBQy9DLGFBQWEsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDNUM7UUFDRCxnRUFBZ0U7UUFDaEUsTUFBTSxLQUFLLEdBQVcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQzdELEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNiLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUNyQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN6QixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxXQUFXLENBQUMsSUFBWSxFQUFFLE9BQWU7UUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUNoQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDdkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1NBQzdCO2FBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUFZLEVBQUUsTUFBYztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ2hCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztTQUM1QjthQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7U0FDNUI7YUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDdkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBRU0sd0JBQXdCLENBQUMsTUFBTTtRQUNwQyxNQUFNLEtBQUssR0FBYSxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdFLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3JELENBQUM7SUFFTSxZQUFZLENBQUMsS0FBVTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEtBQVU7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sUUFBUTtRQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU8sT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFYSxjQUFjLENBQUMsUUFBZ0IsRUFBRSxJQUFVOztZQUN2RCxNQUFNLE9BQU8sR0FBc0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvRCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDL0IsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDO0tBQUE7SUFFYSxlQUFlLENBQUMsUUFBZ0IsRUFBRSxJQUFVOztZQUN4RCxNQUFNLE1BQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFPLEtBQVUsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLFlBQVksR0FBVyxTQUFTLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDM0UsSUFBSSxRQUFRLEVBQUU7d0JBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDeEMsTUFBTSxJQUFJLEdBQVcsUUFBUSxDQUFDOzRCQUM5QixNQUFNLFFBQVEsR0FBVyxRQUFRLENBQUMsQ0FBQyx1QkFBdUI7NEJBQzFELE1BQU0saUJBQWlCLEdBQVEsRUFBRSxDQUFDOzRCQUNsQyxNQUFNLFNBQVMsR0FBUSxFQUFFLENBQUM7NEJBQzFCLE1BQU0sUUFBUSxHQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs0QkFDM0csUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7NEJBQzVDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUNoQyx5RkFBeUY7NEJBQ3pGLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0NBQzNILElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOzRCQUM1RCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7Z0JBQzlGLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFBLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFTyxhQUFhLENBQUMsSUFBWTtRQUNoQyxNQUFNLGVBQWUsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUMxRixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsK0JBQStCO0lBQzNFLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBVTtRQUMzQixNQUFNLE1BQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUk7WUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFDdEMsQ0FBTSxNQUFNLEVBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQSxFQUNELEtBQUssQ0FBQyxFQUFFO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN4QixDQUFDLENBQ0YsQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFTyxVQUFVLENBQUMsS0FBVTtRQUMzQixNQUFNLFNBQVMsR0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBVTtRQUMzQixNQUFNLFNBQVMsR0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzdDLHFEQUFxRDtRQUNyRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUMvQyxNQUFNLEdBQUcsR0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBVTtRQUMzQixNQUFNLFNBQVMsR0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBVTtRQUMzQixNQUFNLFNBQVMsR0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQVE7UUFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQVc7UUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO1FBQ0QsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFCLG1DQUFtQztRQUNuQyx1QkFBdUI7UUFDdkIsa0NBQWtDO1FBQ2xDLGtDQUFrQztRQUNsQywrQkFBK0I7UUFDL0IsTUFBTTtRQUNOLE1BQU07UUFFTixrQ0FBa0M7UUFDbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFO2dCQUN0QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBZ0I7UUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsU0FBUyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBVztRQUNsQyxNQUFNLGdCQUFnQixHQUFhLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNsRixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDckMsTUFBTSxjQUFjLEdBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBWSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBVyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUVuRCxJQUFJLGdCQUF3QixDQUFDO1FBQzdCLElBQUksZUFBdUIsQ0FBQztRQUM1QixJQUFJLGVBQXVCLENBQUM7UUFDNUIsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTtZQUNwQyxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ2hDLGVBQWUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQzlCLGVBQWUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssUUFBUSxFQUFFO1lBQy9DLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbEMsZUFBZSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDaEMsZUFBZSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDakM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUNuQyxVQUFVLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUM1RSxJQUFJLEVBQ0osYUFBYSxDQUNkLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUNwQyxXQUFXLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN4QyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDaEYsSUFBSSxFQUNKLGNBQWMsQ0FDZixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDbkMsVUFBVSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ3RDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQ2pGLElBQUksRUFDSixhQUFhLENBQ2QsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBWSxFQUFFLFFBQWlCLEVBQUUsSUFBVSxFQUFFLElBQVk7UUFDN0UsTUFBTSxZQUFZLEdBQWlCLElBQUksWUFBWSxDQUFDLElBQUksRUFBRTtZQUN4RCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxHQUFHO1lBQ1QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBc0IsSUFBSSxpQkFBaUIsQ0FBQyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sUUFBUSxHQUFTLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBVTtRQUNuQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFxQixDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hEO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUFDLGVBQWdDO1FBQ2pFLE1BQU0sU0FBUyxHQUFjLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBVSxTQUFTLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUM7UUFDdkQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQztRQUMvRCxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztRQUN2RSxLQUFLLE1BQU0sUUFBUSxJQUFJLGVBQWUsRUFBRTtZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkMsU0FBUzthQUNWO1lBQ0QsSUFBSSxRQUFRLEtBQUssVUFBVSxFQUFFO2dCQUMzQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUMvQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUU7Z0JBQy9CLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hEO2lCQUFNLElBQUksUUFBUSxLQUFLLGFBQWEsRUFBRTtnQkFDcEMsS0FBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDckU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDdkU7U0FDRjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUErQixFQUFFLFFBQWEsRUFBRSxLQUFVO1FBQ3JGLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzFDLFNBQVM7aUJBQ1Y7Z0JBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QztTQUNGO2FBQU07WUFDTCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUdPLHdCQUF3QixDQUFDLFdBQWdCO1FBQy9DLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7UUFDN0Isb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkQsVUFBVSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQseUNBQXlDO1FBQ3pDLE1BQU0sWUFBWSxHQUFZLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xELFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQVEsRUFBRTtZQUNsQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFRLEVBQUU7b0JBQ25DLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUN0RixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUU7NEJBQ2pELFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUMsQ0FBQzs0QkFDbEYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDMUI7d0JBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLFlBQVksZ0JBQWdCLENBQUMsRUFBRTs0QkFDL0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQzt5QkFDbEM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgseUJBQXlCO1FBQ3pCLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pCLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDeEIsdUJBQXVCO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDcEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLENBQUM7aUJBQzlEO3FCQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ2xHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztpQkFDNUU7Z0JBQ0QsbUJBQW1CO2dCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUM3RDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsVUFBVSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsOEJBQThCO1FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6QixJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7YUFDNUQ7U0FDRjtRQUVELElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQzFCO2dCQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDakMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztxQkFDMUM7eUJBQU07d0JBQ0wsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztxQkFDMUI7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQzs7bUhBam9CVSxxQkFBcUIsa0JBR3RCLGVBQWU7dUdBSGQscUJBQXFCLG9RQTdLdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEtUOzRGQUdVLHFCQUFxQjtrQkEvS2pDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBLVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDOUM7OzBCQUlJLE1BQU07MkJBQUMsZUFBZTtnVkFpQkssYUFBYTtzQkFBMUMsU0FBUzt1QkFBQyxVQUFVO2dCQUNjLGFBQWE7c0JBQS9DLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgQm94MyxcclxuICBCb3hIZWxwZXIsXHJcbiAgQ29sb3IsXHJcbiAgR3JpZEhlbHBlcixcclxuICBMaWdodCxcclxuICBMaW5lYXJTUkdCQ29sb3JTcGFjZSxcclxuICBNZXNoLFxyXG4gIE1lc2hCYXNpY01hdGVyaWFsLFxyXG4gIE1lc2hQaG9uZ01hdGVyaWFsLFxyXG4gIE9iamVjdDNELFxyXG4gIFBDRlNvZnRTaGFkb3dNYXAsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUGxhbmVHZW9tZXRyeSxcclxuICBQTVJFTUdlbmVyYXRvcixcclxuICBTY2VuZSxcclxuICBUZXh0dXJlLFxyXG4gIFZlY3RvcjMsXHJcbiAgV2ViR0xSZW5kZXJlclxyXG59IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtGbG9hdFR5cGUsIExpbmVhclRvbmVNYXBwaW5nfSBmcm9tICd0aHJlZS9zcmMvY29uc3RhbnRzJztcclxuaW1wb3J0IHtHTFRGTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9HTFRGTG9hZGVyJztcclxuaW1wb3J0IHtSR0JFTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9SR0JFTG9hZGVyJztcclxuaW1wb3J0IHtPcmJpdENvbnRyb2xzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vY29udHJvbHMvT3JiaXRDb250cm9scyc7XHJcbmltcG9ydCB7R0xURkV4cG9ydGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vZXhwb3J0ZXJzL0dMVEZFeHBvcnRlcic7XHJcbmltcG9ydCB7RkJYTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9GQlhMb2FkZXInO1xyXG5pbXBvcnQge09CSkxvYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvT0JKTG9hZGVyJztcclxuaW1wb3J0IHtUaGlyZFBhcnR5TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL3RoaXJkLXBhcnR5LW1vZGVsLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7VERTTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9URFNMb2FkZXInO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7TGlnaHRQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvbGlnaHQtcHJlc2V0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtMaWdodFByb3BlcnRpZXN9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvbGlnaHQtcHJvcGVydGllcyc7XHJcbmltcG9ydCB7TGlnaHRFbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbGlnaHQuZW51bSc7XHJcbmltcG9ydCB7TGlnaHRDcmVhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL2xpZ2h0LWNyZWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xpZ2h0UHJlc2V0fSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2xpZ2h0LXByZXNldCc7XHJcbmltcG9ydCB7RmlsZVV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2ZpbGUudXRpbHMnO1xyXG5pbXBvcnQge1NUTExvYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvU1RMTG9hZGVyJztcclxuaW1wb3J0IHtCb3hNZWFzdXJlbWVudH0gZnJvbSAnLi4vLi4vY29yZTNkL2h1ZC9ib3VuZGluZy1tZWFzdXJlbWVudC1ib3gvYm94LW1lYXN1cmVtZW50JztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWRpY3Rpb25hcnkuc2VydmljZSc7XHJcbmltcG9ydCB7Rm9udFNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2ZvbnQuc2VydmljZSc7XHJcbmltcG9ydCB7Rm9udH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlcic7XHJcbmltcG9ydCB7TWV0YWRhdGF9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9tZXRhZGF0YSc7XHJcbmltcG9ydCB7SWNvbkVudW19IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9pY29uLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvRG9tYWluVmFsdWV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2NvLWRvbWFpbi12YWx1ZS5ibyc7XHJcbmltcG9ydCB7VGV4dEdlb21ldHJ5fSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnknO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi9jb3JlM2QvY29yZS91dGlscyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1tb2RlbC1wcmV2aWV3JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGVsLWNsb3NlLXByZXZpZXdcIiAoY2xpY2spPVwiY2xvc2VQcmV2aWV3KClcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNhbmNlbDwvbWF0LWljb24+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+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLWVycm9yLWJhY2tncm91bmRcIiAqbmdJZj1cImhhc0Vycm9yc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLWVycm9yLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtZXJyb3ItaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGg0PkZhaWxlZCB0byB1cGxvYWQgeW91ciBtb2RlbDwvaDQ+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLWNsb3NlLXByZXZpZXdcIiAoY2xpY2spPVwiaGFzRXJyb3JzPWZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxwPkl0IGxvb2tzIGxpa2UgeW91ciBtb2RlbCBoYXMgc29tZSBpc3N1ZXMuIFBsZWFzZSByZXNvbHZlIHRoZXNlIGlzc3VlcyBhbmQgdHJ5IGFnYWluLjwvcD5cclxuICAgICAgICAgICAgPG9sPlxyXG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgbGlzdE9mRXJyb3JzXCI+e3sgZXJyb3IgfX08L2xpPlxyXG4gICAgICAgICAgICA8L29sPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYXNFcnJvcnM9ZmFsc2VcIiBjbGFzcz1cImJhc2UtYnV0dG9uIGV4cG9ydEJ1dHRvbkRhcmtcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5Pazwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGVsUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHtcclxuICAgICAgZmlsZTogYW55LFxyXG4gICAgICB0aGlyZFBhcnR5TW9kZWxTZXJ2aWNlOiBUaGlyZFBhcnR5TW9kZWxTZXJ2aWNlLFxyXG4gICAgICBsaWdodFByZXNldFNlcnZpY2U6IExpZ2h0UHJlc2V0c1NlcnZpY2VcclxuICAgIH0sXHJcbiAgICBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHVibGljIGljb25DYWNoZTogSG9tZWRlY29yYXRvckljb25DYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxNb2RlbFByZXZpZXdDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9hZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGljdGlvbmFyeVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZvbnRTZXJ2aWNlOiBGb250U2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuZm9udCA9IHRoaXMuX2ZvbnRTZXJ2aWNlLmh1ZEZvbnQ7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdmaWxlTmFtZScpIHB1YmxpYyBnbGJFeHBvcnROYW1lOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2hlaWdodEFydGljbGUnKSBwdWJsaWMgaGVpZ2h0QXJ0aWNsZTogRWxlbWVudFJlZjtcclxuXHJcbiAgcHVibGljIHNjZW5lUHJldmlldzogVEhSRUUuU2NlbmU7XHJcbiAgcHVibGljIGNhbWVyYVByZXZpZXc6IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gIHB1YmxpYyByZW5kZXJlclByZXZpZXc6IFRIUkVFLldlYkdMUmVuZGVyZXI7XHJcbiAgcHVibGljIGNvbnRyb2xzOiBPcmJpdENvbnRyb2xzO1xyXG4gIHB1YmxpYyBib3VuZGluZ0JveFNpemU6IFZlY3RvcjM7XHJcbiAgcHVibGljIGxvYWRlZE1vZGVsOiBhbnk7XHJcbiAgcHVibGljIHVuaXRzT2ZNZWFzdXJlbWVudDogc3RyaW5nID0gJ2NtJztcclxuICBwdWJsaWMgdW5pdHM6IHN0cmluZ1tdID0gWydjbScsICdpbmNoZXMnXTtcclxuICBwdWJsaWMgbW9kZWxOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIG1hdGhQaTogbnVtYmVyID0gTWF0aC5QSTtcclxuICBwdWJsaWMgc2hvd1JlZmVyZW5jZU1vZGVsOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgZmxvb3JTaXplSGVpZ2h0OiBudW1iZXIgPSAxMDtcclxuICBwdWJsaWMgZmxvb3JTaXplV2lkdGg6IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBncmlkU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgcHVibGljIGdyaWREaXZpc2lvbjogbnVtYmVyID0gMTA7XHJcbiAgcHVibGljIGRpc3RhbmNlU3RlcDogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgZm9udDogRm9udDtcclxuICBwdWJsaWMgc3RhY2thYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGhlaWdodEFkanVzdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcGxhY2VtZW50T3B0aW9uczogQ29Eb21haW5WYWx1ZVtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFBsYWNlbWVudDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgY2FudlJlZmVyZW5jZTogSFRNTEVsZW1lbnQ7XHJcbiAgcHVibGljIGhhc0Vycm9yczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsaXN0T2ZFcnJvcnM6IGFueVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX21lYXN1cmVtZW50czogQm94TWVhc3VyZW1lbnRbXSA9IFtdO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWNvbiA9IEljb25FbnVtO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFNjZW5lKCk7XHJcbiAgICB0aGlzLmxvYWRNb2RlbCh0aGlzLmRhdGEpO1xyXG4gICAgdGhpcy5fYWRhcHRlclNlcnZpY2UuZ2V0TW9kZWxQbGFjZW1lbnRPcHRpb25zKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnBsYWNlbWVudE9wdGlvbnMgPSByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5saXN0T2ZFcnJvcnMgPSBbXTtcclxuICAgIFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5zY2VuZVByZXZpZXcpO1xyXG4gICAgdGhpcy5jYW52UmVmZXJlbmNlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRTY2VuZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZpZXdTY2FsZTogbnVtYmVyID0gMS4zO1xyXG5cclxuICAgIC8vIGluaXQgc2NlbmVcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3ID0gbmV3IFNjZW5lKCk7XHJcbiAgICAvLyBpbml0IHJlbmRlcmVyXHJcbiAgICB0aGlzLmNhbnZSZWZlcmVuY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzQ29udGFpbmVyJyk7XHJcbiAgICBjb25zdCBjYW52YXNFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY29uc3QgY29udGV4dDogYW55ID0gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCd3ZWJnbDInLCB7YW50aWFsaWFzOiB0cnVlfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldyA9IG5ldyBXZWJHTFJlbmRlcmVyKHtcclxuICAgICAgY2FudmFzOiBjYW52YXNFbGVtZW50LFxyXG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxyXG4gICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgYW50aWFsaWFzOiB0cnVlLFxyXG4gICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWUsXHJcbiAgICAgIGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IHRydWVcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRDbGVhckNvbG9yKDB4ZmFmYWZhKTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LmF1dG9DbGVhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcudG9uZU1hcHBpbmcgPSBMaW5lYXJUb25lTWFwcGluZztcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNoYWRvd01hcC5lbmFibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNoYWRvd01hcC50eXBlID0gUENGU29mdFNoYWRvd01hcDtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3Lm91dHB1dENvbG9yU3BhY2UgPSBMaW5lYXJTUkdCQ29sb3JTcGFjZTtcclxuICAgIHRoaXMuY2FudlJlZmVyZW5jZS5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVyUHJldmlldy5kb21FbGVtZW50KTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsICd0aHJlZWQnKTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNldFNpemUod2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlLCB3aW5kb3cuaW5uZXJIZWlnaHQgLyB2aWV3U2NhbGUsIHRydWUpO1xyXG5cclxuICAgIC8vIGluaXQgY2FtZXJhXHJcbiAgICB0aGlzLmNhbWVyYVByZXZpZXcgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoNDUsIDEsIDAuMDEsIDEwMDAwMDAwMCk7XHJcbiAgICB0aGlzLmNhbWVyYVByZXZpZXcucG9zaXRpb24uc2V0KDAsIDIsIDEwKTtcclxuICAgIHRoaXMuY2FtZXJhUHJldmlldy5hc3BlY3QgPSAod2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlKSAvICh3aW5kb3cuaW5uZXJIZWlnaHQgLyB2aWV3U2NhbGUpO1xyXG4gICAgdGhpcy5jYW1lcmFQcmV2aWV3LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuXHJcbiAgICB0aGlzLmNvbnRyb2xzID0gbmV3IE9yYml0Q29udHJvbHModGhpcy5jYW1lcmFQcmV2aWV3LCB0aGlzLnJlbmRlcmVyUHJldmlldy5kb21FbGVtZW50KTtcclxuICAgIHRoaXMuY29udHJvbHMudXBkYXRlKCk7XHJcblxyXG4gICAgdGhpcy5sb2FkRmxvb3JQbGFuZSgpO1xyXG4gICAgdGhpcy5sb2FkUmVmZXJlbmNlTW9kZWwoKTtcclxuICAgIHRoaXMubG9hZExpZ2h0cygpO1xyXG5cclxuICAgIGNvbnN0IGdyaWRIZWxwZXI6IEdyaWRIZWxwZXIgPSBuZXcgR3JpZEhlbHBlcih0aGlzLmdyaWRTaXplLCB0aGlzLmdyaWREaXZpc2lvbik7XHJcbiAgICBncmlkSGVscGVyLm5hbWUgPSAnR3JpZEhlbHBlcic7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQoZ3JpZEhlbHBlcik7XHJcblxyXG4gICAgdGhpcy5fYW5pbWF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRGbG9vclBsYW5lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGxhbmVHZW9tZXRyeTogUGxhbmVHZW9tZXRyeSA9IG5ldyBQbGFuZUdlb21ldHJ5KHRoaXMuZmxvb3JTaXplV2lkdGgsIHRoaXMuZmxvb3JTaXplSGVpZ2h0KTtcclxuICAgIGNvbnN0IHBsYW5lTWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjogMHg4OTk0OTksIHNpZGU6IFRIUkVFLkRvdWJsZVNpZGV9KTtcclxuICAgIGNvbnN0IHBsYW5lID0gbmV3IE1lc2gocGxhbmVHZW9tZXRyeSwgcGxhbmVNYXRlcmlhbCk7XHJcbiAgICBwbGFuZS5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyO1xyXG4gICAgcGxhbmUucG9zaXRpb24ueSA9IDA7XHJcbiAgICBwbGFuZS5uYW1lID0gJ2Zsb29yX3BsYW5lJztcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChwbGFuZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZExpZ2h0cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpc3RPZkxpZ2h0UHJlc2V0czogTGlnaHRQcmVzZXRbXSA9IHRoaXMuZGF0YS5saWdodFByZXNldFNlcnZpY2UubG9hZGVkTGlnaHRQcmVzZXRzO1xyXG4gICAgY29uc3QgbGlnaHRQcmVzZXQ6IExpZ2h0UHJlc2V0ID0gdGhpcy5kYXRhLmxpZ2h0UHJlc2V0U2VydmljZS5hY3RpdmVMaWdodFByZXNldDtcclxuXHJcbiAgICBsZXQgbGlnaHRQcmVzZXRUb1VzZTogTGlnaHRQcmVzZXQ7XHJcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBsaXN0T2ZMaWdodFByZXNldHMpIHtcclxuICAgICAgaWYgKHByZXNldC5kZWZhdWx0ICYmIHByZXNldC5zdGFuZGFsb25lKSB7XHJcbiAgICAgICAgbGlnaHRQcmVzZXRUb1VzZSA9IHByZXNldDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGxpZ2h0UHJlc2V0VG9Vc2UubGlnaHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBsaWdodFByZXNldFRvVXNlID0gbGlnaHRQcmVzZXQ7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGxpZ2h0UHJvcGVydGllcyBvZiBsaWdodFByZXNldFRvVXNlLmxpZ2h0cykge1xyXG4gICAgICB0aGlzLl9jcmVhdGVMaWdodEZyb21Qcm9wZXJ0aWVzKGxpZ2h0UHJvcGVydGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZFJlZmVyZW5jZU1vZGVsKCk6IHZvaWQge1xyXG4gICAgbGV0IHJlZmVyZW5jZU1vZGVsUGF0aDogc3RyaW5nID0gJyc7XHJcbiAgICBjb25zdCByZWZlcmVuY2VNb2RlbDogc3RyaW5nID0gJ3JlZmVyZW5jZV9wb3AuZ2xiJztcclxuICAgIGlmICh0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy50aHJlZURBc3NldFBhdGgpIHtcclxuICAgICAgcmVmZXJlbmNlTW9kZWxQYXRoID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoICsgJ2Fzc2V0cy8nO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG9hZGVyOiBHTFRGTG9hZGVyID0gbmV3IEdMVEZMb2FkZXIoKTtcclxuICAgIGxvYWRlci5sb2FkKHJlZmVyZW5jZU1vZGVsUGF0aCArIHJlZmVyZW5jZU1vZGVsLCBhc3luYyBnbHRmID0+IHtcclxuICAgICAgZ2x0Zi5zY2VuZS5wb3NpdGlvbi5zZXQoMywgMCwgMyk7XHJcbiAgICAgIGdsdGYuc2NlbmUuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgIGdsdGYuc2NlbmUucmVjZWl2ZVNoYWRvdyA9IHRydWU7XHJcbiAgICAgIGdsdGYuc2NlbmUubmFtZSA9ICdSZWZlcmVuY2VfbW9kZWwnO1xyXG4gICAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQoZ2x0Zi5zY2VuZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkTW9kZWwoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbE5hbWUgPSB0aGlzLl9zZXRNb2RlbE5hbWUoaW5wdXQuZmlsZS5maWxlLm5hbWUpO1xyXG4gICAgY29uc3QgZmlsZVR5cGUgPSBpbnB1dC5maWxlLmZpbGVUeXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdnbGInIHx8IGZpbGVUeXBlID09PSAnZ2x0ZicpIHtcclxuICAgICAgdGhpcy5fZ2xiTG9hZGVyKGlucHV0KTtcclxuICAgIH0gZWxzZSBpZiAoZmlsZVR5cGUgPT09ICdmYngnKSB7XHJcbiAgICAgIHRoaXMuX2ZieExvYWRlcihpbnB1dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpbGVUeXBlID09PSAnb2JqJykge1xyXG4gICAgICB0aGlzLl9vYmpMb2FkZXIoaW5wdXQpO1xyXG4gICAgfSBlbHNlIGlmIChmaWxlVHlwZSA9PT0gJzNkcycpIHtcclxuICAgICAgdGhpcy5fdGRzTG9hZGVyKGlucHV0KTtcclxuICAgIH0gZWxzZSBpZiAoZmlsZVR5cGUgPT09ICdzdGwnKSB7XHJcbiAgICAgIHRoaXMuX3N0bExvYWRlcihpbnB1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEhEUkkocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBuZXcgUkdCRUxvYWRlcigpLnNldERhdGFUeXBlKEZsb2F0VHlwZSkubG9hZChwYXRoLCAoaGRyVGV4dHVyZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBtcmVtR2VuZXJhdG9yOiBQTVJFTUdlbmVyYXRvciA9IG5ldyBQTVJFTUdlbmVyYXRvcih0aGlzLnJlbmRlcmVyUHJldmlldyk7XHJcbiAgICAgICAgcG1yZW1HZW5lcmF0b3IuY29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpO1xyXG4gICAgICAgIGNvbnN0IGhkckN1YmVSZW5kZXJUYXJnZXQgPSBwbXJlbUdlbmVyYXRvci5mcm9tRXF1aXJlY3Rhbmd1bGFyKGhkclRleHR1cmUpO1xyXG4gICAgICAgIGhkclRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgIHRoaXMuc2NlbmVQcmV2aWV3LmVudmlyb25tZW50ID0gaGRyQ3ViZVJlbmRlclRhcmdldC50ZXh0dXJlO1xyXG4gICAgICAgIC8vIHRoaXMuc2NlbmVQcmV2aWV3LmJhY2tncm91bmQgPSBoZHJDdWJlUmVuZGVyVGFyZ2V0LnRleHR1cmU7XHJcbiAgICAgICAgcG1yZW1HZW5lcmF0b3IuZGlzcG9zZSgpO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSwgdW5kZWZpbmVkLCByZWplY3QpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwb3J0U2NlbmVBc0dMQihyZXR1cm5UeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIGFkZCB0aW1lc3RhbXBcclxuICAgIGNvbnN0IHRpbWVzdGFtcDogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBleHBvcnRGaWxlTmFtZTogc3RyaW5nID0gdGhpcy5fc2V0TW9kZWxOYW1lKHRoaXMuZ2xiRXhwb3J0TmFtZS5uYXRpdmVFbGVtZW50LnZhbHVlKSArICdfJyArIHRpbWVzdGFtcDtcclxuICAgIGNvbnN0IGdsdGZFeHBvcnRlcjogR0xURkV4cG9ydGVyID0gbmV3IEdMVEZFeHBvcnRlcigpO1xyXG4gICAgbGV0IHNjZW5lOiBTY2VuZTtcclxuICAgIHNjZW5lID0gdGhpcy5zY2VuZVByZXZpZXcuY2xvbmUoKTtcclxuICAgIGNvbnN0IG1vZGVsOiBPYmplY3QzRCA9IHRoaXMuc2NlbmVQcmV2aWV3LmdldE9iamVjdEJ5TmFtZSh0aGlzLm1vZGVsTmFtZSkuY2xvbmUoKTtcclxuICAgIHdoaWxlIChzY2VuZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHNjZW5lLnJlbW92ZShzY2VuZS5jaGlsZHJlblswXSk7XHJcbiAgICB9XHJcbiAgICBzY2VuZS5hZGQobW9kZWwpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgdHJzOiBmYWxzZSxcclxuICAgICAgb25seVZpc2libGU6IHRydWUsXHJcbiAgICAgIHRydW5jYXRlRHJhd1JhbmdlOiB0cnVlLFxyXG4gICAgICBmb3JjZUluZGljZXM6IGZhbHNlLFxyXG4gICAgICBiaW5hcnk6IHRydWUsXHJcbiAgICAgIG1heFRleHR1cmVTaXplOiAyMDQ4XHJcbiAgICB9O1xyXG4gICAgZ2x0ZkV4cG9ydGVyLnBhcnNlKHNjZW5lLCAocmVzdWx0OiBBcnJheUJ1ZmZlcikgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlOiBCbG9iID0gbmV3IEJsb2IoW3Jlc3VsdF0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xyXG4gICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3VwbG9hZCcpIHtcclxuICAgICAgICB0aGlzLl9zZW5kTW9kZWxUb0NETihgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRNb2RlbChgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIChlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2NhbGVBcnRpY2xlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUodGhpcy5tb2RlbE5hbWUpO1xyXG4gICAgY29uc3QgaW5wdXRIZWlnaHQgPSB0aGlzLmhlaWdodEFydGljbGUubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgIGxldCBoZWlnaHRJbk1ldGVyOiBudW1iZXI7XHJcbiAgICBpZiAodGhpcy51bml0c09mTWVhc3VyZW1lbnQgPT09ICdjbScpIHtcclxuICAgICAgaGVpZ2h0SW5NZXRlciA9IGlucHV0SGVpZ2h0IC8gMTAwO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzT2ZNZWFzdXJlbWVudCA9PT0gJ2luY2hlcycpIHtcclxuICAgICAgaGVpZ2h0SW5NZXRlciA9IChpbnB1dEhlaWdodCAqIDIuNTQpIC8gMTAwO1xyXG4gICAgfVxyXG4gICAgLy8gc2NhbGUgPSB0aGlzLmJvdW5kaW5nIC8gaGVpZ2h0SW5NZXRlciBhbmQgdXNlIFkgYXMgdXAvIGhlaWdodFxyXG4gICAgY29uc3Qgc2NhbGU6IG51bWJlciA9IHRoaXMuYm91bmRpbmdCb3hTaXplLnkgLyBoZWlnaHRJbk1ldGVyO1xyXG4gICAgbW9kZWwuc2NhbGUuc2V0KFxyXG4gICAgICBtb2RlbC5zY2FsZS54IC8gc2NhbGUsXHJcbiAgICAgIG1vZGVsLnNjYWxlLnkgLyBzY2FsZSxcclxuICAgICAgbW9kZWwuc2NhbGUueiAvIHNjYWxlKTtcclxuICAgIG1vZGVsLnVwZGF0ZU1hdHJpeCgpO1xyXG4gICAgbW9kZWwudHJhdmVyc2UoKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5pc01lc2gpIHtcclxuICAgICAgICBub2RlLmdlb21ldHJ5LmFwcGx5TWF0cml4NChtb2RlbC5tYXRyaXgpO1xyXG4gICAgICAgIG5vZGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIG5vZGUucm90YXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIG5vZGUuc2NhbGUuc2V0KDEsIDEsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG1vZGVsLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIG1vZGVsLnJvdGF0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIG1vZGVsLnNjYWxlLnNldCgxLCAxLCAxKTtcclxuICAgIG1vZGVsLnVwZGF0ZU1hdHJpeCgpO1xyXG4gICAgdGhpcy5fZ2V0Qm91bmRpbmdCb3gobW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvdGF0ZU1vZGVsKGF4aXM6IHN0cmluZywgZGVncmVlczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc2NlbmVQcmV2aWV3LmdldE9iamVjdEJ5TmFtZSh0aGlzLm1vZGVsTmFtZSk7XHJcbiAgICBpZiAoYXhpcyA9PT0gJ3gnKSB7XHJcbiAgICAgIG1vZGVsLnJvdGF0aW9uLnggKz0gZGVncmVlcztcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3knKSB7XHJcbiAgICAgIG1vZGVsLnJvdGF0aW9uLnkgKz0gZGVncmVlcztcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3onKSB7XHJcbiAgICAgIG1vZGVsLnJvdGF0aW9uLnogKz0gZGVncmVlcztcclxuICAgIH1cclxuICAgIHRoaXMuX2dldEJvdW5kaW5nQm94KG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlTW9kZWwoYXhpczogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUodGhpcy5tb2RlbE5hbWUpO1xyXG4gICAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG4gICAgICBtb2RlbC5wb3NpdGlvbi54ICs9IGFtb3VudDtcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3knKSB7XHJcbiAgICAgIG1vZGVsLnBvc2l0aW9uLnkgKz0gYW1vdW50O1xyXG4gICAgfSBlbHNlIGlmIChheGlzID09PSAneicpIHtcclxuICAgICAgbW9kZWwucG9zaXRpb24ueiArPSBhbW91bnQ7XHJcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICdhbGwnKSB7XHJcbiAgICAgIG1vZGVsLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2dldEJvdW5kaW5nQm94KG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVbml0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudW5pdHNPZk1lYXN1cmVtZW50ID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlU2hvd1JlZmVyZW5jZU1vZGVsKCRldmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWw6IE9iamVjdDNEID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKCdSZWZlcmVuY2VfbW9kZWwnKTtcclxuICAgIG1vZGVsLnZpc2libGUgPSAhdGhpcy5zaG93UmVmZXJlbmNlTW9kZWw7XHJcbiAgICB0aGlzLnNob3dSZWZlcmVuY2VNb2RlbCA9ICF0aGlzLnNob3dSZWZlcmVuY2VNb2RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdGFja2FibGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGFja2FibGUgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWlnaHRBZGp1c3RhYmxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVpZ2h0QWRqdXN0YWJsZSA9IGV2ZW50LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlUHJldmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0ZSgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRBbmltYXRpb25Mb29wKCh0aW1lc3RhbXAsIGZyYW1lKSA9PiB0aGlzLl9yZW5kZXIodGltZXN0YW1wLCBmcmFtZSkpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbmRlcih0LCBmcmFtZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcucmVuZGVyKHRoaXMuc2NlbmVQcmV2aWV3LCB0aGlzLmNhbWVyYVByZXZpZXcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZG93bmxvYWRNb2RlbChmaWxlTmFtZTogc3RyaW5nLCBibG9iOiBCbG9iKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGVsZW1lbnQuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBlbGVtZW50LmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3NlbmRNb2RlbFRvQ0ROKGZpbGVOYW1lOiBzdHJpbmcsIGJsb2I6IEJsb2IpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgIHJlYWRlci5vbmxvYWRlbmQgPSBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlQXNTdHJpbmc6IHN0cmluZyA9IEZpbGVVdGlscy5TdHJpcE1pbWVTdHJpbmdGcm9tRGF0YVVyaShldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgdGhpcy5fYWRhcHRlclNlcnZpY2Uuc3RvcmUzRE1vZGVsQ0ROKGZpbGVOYW1lLCBmaWxlQXNTdHJpbmcpLnRoZW4oZmlsZVBhdGggPT4ge1xyXG4gICAgICAgIGlmIChmaWxlUGF0aCkge1xyXG4gICAgICAgICAgdGhpcy5fYmxvYlRvQXJyYXlCdWZmZXIoYmxvYikudGhlbihmaWxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaDogc3RyaW5nID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsVXJsOiBzdHJpbmcgPSBmaWxlUGF0aDsgLy8gU2V0IHVybCBmcm9tIHRoZSBDRE5cclxuICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbkRhdGE6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBwcmljZURhdGE6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhRGF0YTogTWV0YWRhdGEgPSB0aGlzLmRhdGEudGhpcmRQYXJ0eU1vZGVsU2VydmljZS5zZXRNZXRhZGF0YShoYXNoLCBtb2RlbFVybCwgY29uZmlndXJhdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICBtZXRhRGF0YS5jYW5FbGV2YXRlID0gdGhpcy5oZWlnaHRBZGp1c3RhYmxlO1xyXG4gICAgICAgICAgICBtZXRhRGF0YS50aGlyZFBhcnR5TW9kZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAvLyBXZSBhbHNvIGNhbiBzZXQgdGhlIG1ldGFkYXRhIGhlcmUgYW5kIHBhcyBpdCBhcyB0aGUgbGFzdCBhcmd1bWVudCBmb3IgcGFyc2VNb2RlbFRvR0xCLlxyXG4gICAgICAgICAgICB0aGlzLmRhdGEudGhpcmRQYXJ0eU1vZGVsU2VydmljZS5wYXJzZU1vZGVsVG9HTEIoZmlsZSwgaGFzaCwgbW9kZWxVcmwsIGNvbmZpZ3VyYXRpb25EYXRhLCBwcmljZURhdGEsIG1ldGFEYXRhKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVuZGVyRXJyb3IsIHt0aXRsZTogJ1VwbG9hZCBlcnJvcicsIG1lc3NhZ2U6IGVycm9yfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE1vZGVsTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVtb3ZlRXh0ZW5zaW9uOiBzdHJpbmcgPSBuYW1lLnJlcGxhY2UoJy5nbGInLCAnJyk7IC8vIHJlbW92ZSAuZ2xiIGFzIGZpbGUgZXh0ZW5zaW9uXHJcbiAgICByZXR1cm4gcmVtb3ZlRXh0ZW5zaW9uLnJlcGxhY2UoJy4nLCAnLScpOyAvLyByZXBsYWNlIGFsbCBkb3RzIGZvciBwZXJpb2RzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nbGJMb2FkZXIoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgbG9hZGVyOiBHTFRGTG9hZGVyID0gbmV3IEdMVEZMb2FkZXIoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxvYWRlci5wYXJzZShpbnB1dC5maWxlLmZpbGVDb250ZW50cywgJycsXHJcbiAgICAgICAgYXN5bmMgb2JqZWN0ID0+IHtcclxuICAgICAgICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdC5zY2VuZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RPZkVycm9ycy5wdXNoKGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRoaXMubGlzdE9mRXJyb3JzLnB1c2goZSk7XHJcbiAgICAgIHRoaXMuaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZieExvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmYnhMb2FkZXI6IEZCWExvYWRlciA9IG5ldyBGQlhMb2FkZXIoKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IGZieExvYWRlci5wYXJzZShpbnB1dC5maWxlLmZpbGVDb250ZW50cywgJycpO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29iakxvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBvYmpMb2FkZXI6IE9CSkxvYWRlciA9IG5ldyBPQkpMb2FkZXIoKTtcclxuICAgIC8vIGZvciBvamIgZmlsZXM6IGNvbnZlcnQgdGhlIEFycmF5QnVmZmVyIHRvIGEgc3RyaW5nXHJcbiAgICBjb25zdCBidWYgPSBpbnB1dC5maWxlLmZpbGVDb250ZW50cztcclxuICAgIGNvbnN0IGRlY29kZXI6IFRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcbiAgICBjb25zdCBzdHI6IHN0cmluZyA9IGRlY29kZXIuZGVjb2RlKGJ1Zik7XHJcbiAgICBjb25zdCBvYmplY3QgPSBvYmpMb2FkZXIucGFyc2Uoc3RyKTtcclxuICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90ZHNMb2FkZXIoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgdGRzTG9hZGVyOiBURFNMb2FkZXIgPSBuZXcgVERTTG9hZGVyKCk7XHJcbiAgICBjb25zdCBvYmplY3QgPSB0ZHNMb2FkZXIucGFyc2UoaW5wdXQuZmlsZS5maWxlQ29udGVudHMsICcnKTtcclxuICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdGxMb2FkZXIoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RsTG9hZGVyOiBTVExMb2FkZXIgPSBuZXcgU1RMTG9hZGVyKCk7XHJcbiAgICBjb25zdCBvYmplY3QgPSBzdGxMb2FkZXIucGFyc2UoaW5wdXQuZmlsZS5maWxlQ29udGVudHMpO1xyXG4gICAgdGhpcy5fYWRkRnJvbUdlb21ldHJ5KG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRGcm9tR2VvbWV0cnkoZ2VvbWV0cnkpIHtcclxuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IE1lc2hQaG9uZ01hdGVyaWFsKHt0cmFuc3BhcmVudDogdHJ1ZSwgb3BhY2l0eTogZ2VvbWV0cnkuYWxwaGF9KTtcclxuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgIHRoaXMuX3ByZXBNb2RlbEZvclNjZW5lKG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBNb2RlbEZvclNjZW5lKG9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy5fdmFsaWRhdGVPYmplY3RTdHJ1Y3R1cmUob2JqZWN0KTtcclxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saXN0T2ZFcnJvcnMgPSBbLi4udGhpcy5saXN0T2ZFcnJvcnMsIC4uLnZhbGlkYXRpb25SZXN1bHRdO1xyXG4gICAgICB0aGlzLmhhc0Vycm9ycyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBvYmplY3QubmFtZSA9IHRoaXMubW9kZWxOYW1lO1xyXG4gICAgb2JqZWN0LnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIG9iamVjdC5yb3RhdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICBvYmplY3Quc2NhbGUuc2V0KDEsIDEsIDEpO1xyXG4gICAgLy8gb2JqZWN0LnRyYXZlcnNlKChub2RlOiBhbnkpID0+IHtcclxuICAgIC8vICAgaWYgKG5vZGUuaXNNZXNoKSB7XHJcbiAgICAvLyAgICAgbm9kZS5yb3RhdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICAvLyAgICAgbm9kZS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICAvLyAgICAgbm9kZS5zY2FsZS5zZXQoMSwgMSwgMSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIFJlbW92ZSBsaWdodHMgZnJvbSB0aGUgY2hpbGRyZW5cclxuICAgIG9iamVjdC5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAoYyBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgb2JqZWN0LnJlbW92ZShjKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQob2JqZWN0KTtcclxuICAgIHRoaXMubG9hZGVkTW9kZWwgPSBvYmplY3Q7XHJcbiAgICB0aGlzLl9nZXRCb3VuZGluZ0JveChvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Qm91bmRpbmdCb3gob2JqZWN0OiBPYmplY3QzRCkge1xyXG4gICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm94MygpLnNldEZyb21PYmplY3Qob2JqZWN0KTtcclxuICAgIHRoaXMuYm91bmRpbmdCb3hTaXplID0gYm91bmRpbmdCb3guZ2V0U2l6ZShuZXcgVmVjdG9yMygpKTtcclxuXHJcbiAgICB0aGlzLl9zZXRNZWFzdXJlbWVudHMob2JqZWN0KTtcclxuXHJcbiAgICBjb25zdCBtb2RlbEJveGhlbHBlciA9IHRoaXMuc2NlbmVQcmV2aWV3LmdldE9iamVjdEJ5TmFtZSgnbW9kZWxCb3hoZWxwZXInKTtcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LnJlbW92ZShtb2RlbEJveGhlbHBlcik7XHJcbiAgICBjb25zdCBib3hIZWxwZXIgPSBuZXcgQm94SGVscGVyKG9iamVjdCk7XHJcbiAgICBib3hIZWxwZXIubWF0ZXJpYWwuY29sb3Iuc2V0KDB4RkYwMEZGKTtcclxuICAgIGJveEhlbHBlci5uYW1lID0gJ21vZGVsQm94aGVscGVyJztcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChib3hIZWxwZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TWVhc3VyZW1lbnRzKG9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFsnSGVpZ2h0SGVscGVyJywgJ1dpZHRoSGVscGVyJywgJ0RlcHRoSGVscGVyJ107XHJcbiAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goZWxlbWVudE5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICB0aGlzLnNjZW5lUHJldmlldy5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBib3g6IEJveDMgPSBuZXcgQm94MygpLnNldEZyb21PYmplY3Qob2JqZWN0KTtcclxuICAgIGNvbnN0IGJvdW5kaW5nQm94OiBWZWN0b3IzID0gYm94LmdldFNpemUobmV3IFZlY3RvcjMoKSk7XHJcbiAgICBjb25zdCBoZWlnaHQ6IG51bWJlciA9IGJvdW5kaW5nQm94Lnk7XHJcbiAgICBjb25zdCB3aWR0aDogbnVtYmVyID0gYm91bmRpbmdCb3gueDtcclxuICAgIGNvbnN0IGRlcHRoOiBudW1iZXIgPSBib3VuZGluZ0JveC56O1xyXG4gICAgY29uc3QgZm9udDogRm9udCA9IHRoaXMuX2ZvbnRTZXJ2aWNlLm1vbm9zcGFjZUZvbnQ7XHJcblxyXG4gICAgbGV0IGhlaWdodExhYmVsVmFsdWU6IG51bWJlcjtcclxuICAgIGxldCB3aWR0aExhYmVsVmFsdWU6IG51bWJlcjtcclxuICAgIGxldCBkZXB0aExhYmVsVmFsdWU6IG51bWJlcjtcclxuICAgIC8vIGxhYmVscyBjbSBvZiBpbmNoXHJcbiAgICBpZiAodGhpcy51bml0c09mTWVhc3VyZW1lbnQgPT09ICdjbScpIHtcclxuICAgICAgaGVpZ2h0TGFiZWxWYWx1ZSA9IGhlaWdodCAqIDEwMDtcclxuICAgICAgd2lkdGhMYWJlbFZhbHVlID0gd2lkdGggKiAxMDA7XHJcbiAgICAgIGRlcHRoTGFiZWxWYWx1ZSA9IGRlcHRoICogMTAwO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzT2ZNZWFzdXJlbWVudCA9PT0gJ2luY2hlcycpIHtcclxuICAgICAgaGVpZ2h0TGFiZWxWYWx1ZSA9IGhlaWdodCAqIDM5LjM3O1xyXG4gICAgICB3aWR0aExhYmVsVmFsdWUgPSB3aWR0aCAqIDM5LjM3O1xyXG4gICAgICBkZXB0aExhYmVsVmFsdWUgPSBkZXB0aCAqIDM5LjM3O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdpZHRoTGFiZWwgPSB0aGlzLl9jcmVhdGUzRFRleHQoXHJcbiAgICAgIGBXaWR0aDogJHt3aWR0aExhYmVsVmFsdWUudG9GaXhlZCgwKX1gLFxyXG4gICAgICBib3guZ2V0Q2VudGVyKG5ldyBUSFJFRS5WZWN0b3IzKCkpLmFkZChuZXcgVEhSRUUuVmVjdG9yMygwLCAtaGVpZ2h0IC8gMiwgMCkpLFxyXG4gICAgICBmb250LFxyXG4gICAgICAnV2lkdGhIZWxwZXInXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0TGFiZWwgPSB0aGlzLl9jcmVhdGUzRFRleHQoXHJcbiAgICAgIGBIZWlnaHQ6ICR7aGVpZ2h0TGFiZWxWYWx1ZS50b0ZpeGVkKDApfWAsXHJcbiAgICAgIGJveC5nZXRDZW50ZXIobmV3IFRIUkVFLlZlY3RvcjMoKSkuYWRkKG5ldyBUSFJFRS5WZWN0b3IzKHdpZHRoIC8gMiArIDAuMSwgMCwgMCkpLFxyXG4gICAgICBmb250LFxyXG4gICAgICAnSGVpZ2h0SGVscGVyJ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGRlcHRoTGFiZWwgPSB0aGlzLl9jcmVhdGUzRFRleHQoXHJcbiAgICAgIGBEZXB0aDogJHtkZXB0aExhYmVsVmFsdWUudG9GaXhlZCgwKX1gLFxyXG4gICAgICBib3guZ2V0Q2VudGVyKG5ldyBUSFJFRS5WZWN0b3IzKCkpLmFkZChuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAtZGVwdGggLyAyIC0gMC4xKSksXHJcbiAgICAgIGZvbnQsXHJcbiAgICAgICdEZXB0aEhlbHBlcidcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKHdpZHRoTGFiZWwpO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGhlaWdodExhYmVsKTtcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChkZXB0aExhYmVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZTNEVGV4dCh0ZXh0OiBzdHJpbmcsIHBvc2l0aW9uOiBWZWN0b3IzLCBmb250OiBGb250LCBuYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRleHRHZW9tZXRyeTogVGV4dEdlb21ldHJ5ID0gbmV3IFRleHRHZW9tZXRyeSh0ZXh0LCB7XHJcbiAgICAgIGZvbnQ6IGZvbnQsXHJcbiAgICAgIHNpemU6IDAuMSxcclxuICAgICAgaGVpZ2h0OiAwLjAyLFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0ZXh0TWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjogMHhGRjAwRkZ9KTtcclxuICAgIGNvbnN0IHRleHRNZXNoOiBNZXNoID0gbmV3IE1lc2godGV4dEdlb21ldHJ5LCB0ZXh0TWF0ZXJpYWwpO1xyXG4gICAgdGV4dE1lc2gucG9zaXRpb24uY29weShwb3NpdGlvbik7XHJcbiAgICB0ZXh0TWVzaC5uYW1lID0gbmFtZTtcclxuICAgIHJldHVybiB0ZXh0TWVzaDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Jsb2JUb0FycmF5QnVmZmVyKGJsb2I6IEJsb2IpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChyZWFkZXIucmVzdWx0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdFcnJvciByZWFkaW5nIGJsb2IgYXMgQXJyYXlCdWZmZXInKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCBibG9iIGFzIEFycmF5QnVmZmVyJykpO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUxpZ2h0RnJvbVByb3BlcnRpZXMobGlnaHRQcm9wZXJ0aWVzOiBMaWdodFByb3BlcnRpZXMpIHtcclxuICAgIGNvbnN0IGxpZ2h0VHlwZTogTGlnaHRFbnVtID0gbGlnaHRQcm9wZXJ0aWVzLnR5cGU7XHJcbiAgICBjb25zdCBnZXRMaWdodHM6IExpZ2h0Q3JlYXRlU2VydmljZSA9IG5ldyBMaWdodENyZWF0ZVNlcnZpY2UoKTtcclxuICAgIGNvbnN0IGxpZ2h0OiBMaWdodCA9IGdldExpZ2h0cy5jcmVhdGVOZXdMaWdodChsaWdodFR5cGUpO1xyXG4gICAgbGlnaHQudXNlckRhdGEud2FsbE9mZnNldCA9IGxpZ2h0UHJvcGVydGllcy53YWxsT2Zmc2V0O1xyXG4gICAgbGlnaHQudXNlckRhdGEucm90YXRpb25PZmZzZXQgPSBsaWdodFByb3BlcnRpZXMucm90YXRpb25PZmZzZXQ7XHJcbiAgICBsaWdodC51c2VyRGF0YS50b3BEb3duRGlyZWN0aW9uYWwgPSBsaWdodFByb3BlcnRpZXMudG9wRG93bkRpcmVjdGlvbmFsO1xyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsaWdodFByb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKCFsaWdodC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdwb3NpdGlvbicpIHtcclxuICAgICAgICBsaWdodC5wb3NpdGlvbi55ID0gbGlnaHRQcm9wZXJ0aWVzLnBvc2l0aW9uLnk7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICdjb2xvcicpIHtcclxuICAgICAgICBsaWdodC5jb2xvciA9IG5ldyBDb2xvcihsaWdodFByb3BlcnRpZXMuY29sb3IpO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BlcnR5ID09PSAnZ3JvdW5kQ29sb3InKSB7XHJcbiAgICAgICAgKGxpZ2h0IGFzIGFueSkuZ3JvdW5kQ29sb3IgPSBuZXcgQ29sb3IobGlnaHRQcm9wZXJ0aWVzLmdyb3VuZENvbG9yKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZXRPYmplY3RQcm9wZXJ0aWVzKGxpZ2h0LCBwcm9wZXJ0eSwgbGlnaHRQcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChsaWdodCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRPYmplY3RQcm9wZXJ0aWVzKG9iamVjdDogTGlnaHQgfCBMaWdodFByb3BlcnRpZXMsIHByb3BlcnR5OiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ3NoYWRvdycpIHtcclxuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFvYmplY3RbcHJvcGVydHldLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XVtwcm9wXSA9IHZhbHVlW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmplY3RbcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGVPYmplY3RTdHJ1Y3R1cmUoaW5wdXRPYmplY3Q6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBtb2RlbEdyb3VwID0gaW5wdXRPYmplY3Q7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uOiBhbnlbXSA9IFtdO1xyXG4gICAgLy8gQ2hlY2sgZm9yIGEgZ3JvdXBcclxuICAgIGlmICghbW9kZWxHcm91cCB8fCAhKG1vZGVsR3JvdXAgaW5zdGFuY2VvZiBUSFJFRS5Hcm91cCkpIHtcclxuICAgICAgdmFsaWRhdGlvbi5wdXNoKCdQYXJzZXIgZGlkIG5vdCByZXR1cm4gYSB2YWxpZCBUSFJFRS5Hcm91cC4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEb2VzIGl0IGhhcyBpbWFnZXMgdGhhdCBhcmUgbm90IHZhbGlkP1xyXG4gICAgY29uc3QgZHVtbXlUZXh0dXJlOiBUZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoKTtcclxuICAgIG1vZGVsR3JvdXAudHJhdmVyc2UoKGNoaWxkKTogdm9pZCA9PiB7XHJcbiAgICAgIGlmIChjaGlsZC5pc01lc2ggJiYgY2hpbGQubWF0ZXJpYWwpIHtcclxuICAgICAgICBjb25zdCBtYXRlcmlhbHMgPSBBcnJheS5pc0FycmF5KGNoaWxkLm1hdGVyaWFsKSA/IGNoaWxkLm1hdGVyaWFsIDogW2NoaWxkLm1hdGVyaWFsXTtcclxuICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaCgobWF0ZXJpYWwpOiB2b2lkID0+IHtcclxuICAgICAgICAgIFsnbWFwJywgJ25vcm1hbE1hcCcsICdyb3VnaG5lc3NNYXAnLCAnbWV0YWxuZXNzTWFwJywgJ2VtaXNzaXZlTWFwJ10uZm9yRWFjaCgobWFwTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxbbWFwTmFtZV0gJiYgIW1hdGVyaWFsW21hcE5hbWVdLmltYWdlKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5wdXNoKCdNYXRlcmlhbCAnICsgbWF0ZXJpYWxbbWFwTmFtZV0ubmFtZSArICcgaGFzIGludmFsaWQgaW1hZ2UgZGF0YScpO1xyXG4gICAgICAgICAgICAgIG1hdGVyaWFsW21hcE5hbWVdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxbbWFwTmFtZV0gJiYgIShtYXRlcmlhbFttYXBOYW1lXS5pbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgbWF0ZXJpYWxbbWFwTmFtZV0gPSBkdW1teVRleHR1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBEb2VzIGl0IGNvbnRhaW4gbWVzaGVzXHJcbiAgICBsZXQgaGFzVmlzaWJsZU1lc2hlcyA9IGZhbHNlO1xyXG4gICAgbW9kZWxHcm91cC50cmF2ZXJzZSgob2JqZWN0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKG9iamVjdC5pc01lc2gpIHtcclxuICAgICAgICBoYXNWaXNpYmxlTWVzaGVzID0gdHJ1ZTtcclxuICAgICAgICAvLyBiYXNpYyBnZW9tZXRyeSBjaGVja1xyXG4gICAgICAgIGlmICghb2JqZWN0Lmdlb21ldHJ5KSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLnB1c2goKTtcclxuICAgICAgICAgIHZhbGlkYXRpb24ucHVzaCgnTWVzaCAnICsgb2JqZWN0Lm5hbWUgKyAnIGhhcyBubyBnZW9tZXRyeS4nKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFvYmplY3QuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbiB8fCBvYmplY3QuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5wdXNoKCdNZXNoICcgKyBvYmplY3QubmFtZSArICcgZ2VvbWV0cnkgaGFzIG5vIHBvc2l0aW9uIGRhdGEuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGJhc2ljIG1hdHMgY2hlY2tcclxuICAgICAgICBpZiAoIW9iamVjdC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5wdXNoKCdNZXNoICcgKyBvYmplY3QubmFtZSArICcgaGFzIG5vIG1hdGVyaWFsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICghaGFzVmlzaWJsZU1lc2hlcykge1xyXG4gICAgICB2YWxpZGF0aW9uLnB1c2goJ01vZGVsIGNvbnRhaW5zIG5vIG1lc2hlcy4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBmb3IgYm91ZGluZ2JveCBpc3N1ZXNcclxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IFRIUkVFLkJveDMoKS5zZXRGcm9tT2JqZWN0KG1vZGVsR3JvdXApO1xyXG4gICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkge1xyXG4gICAgICBpZiAoaGFzVmlzaWJsZU1lc2hlcykge1xyXG4gICAgICAgIHZhbGlkYXRpb24ucHVzaCgnTW9kZWwgaGFzIGFuIGlzc3VlIHdpdGggdGhlIGJvdW5kaW5nYm94Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG1vZGVsR3JvdXAudHJhdmVyc2UoKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY2hpbGQuZ2VvbWV0cnkpIHtcclxuICAgICAgICAgIGNoaWxkLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZC5tYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgY2hpbGQubWF0ZXJpYWwuZm9yRWFjaChtID0+IG0uZGlzcG9zZSgpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsLmRpc3Bvc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
1019
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL21vZGVsLXVwbG9hZGVyL21vZGVsLXByZXZpZXdlci9tb2RlbC1wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLE1BQU0sRUFBcUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBQyxlQUFlLEVBQTBCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEYsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsS0FBSyxFQUNMLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsS0FBSyxFQUNMLG9CQUFvQixFQUNwQixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixjQUFjLEVBQ2QsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFHL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRS9ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUlqRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUV0RyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBTS9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUd0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDeEUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBbUw5QyxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQ2tDLElBSS9CLEVBQ00sZUFBNkMsRUFDN0MsU0FBd0MsRUFDdkMsVUFBK0MsRUFDL0MsZUFBa0MsRUFDbEMsT0FBa0IsRUFDbEIsZUFBcUQsRUFDckQsa0JBQWtELEVBQ2xELFlBQXlCO1FBWkQsU0FBSSxHQUFKLElBQUksQ0FJbkM7UUFDTSxvQkFBZSxHQUFmLGVBQWUsQ0FBOEI7UUFDN0MsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBcUM7UUFDL0Msb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFDbEIsb0JBQWUsR0FBZixlQUFlLENBQXNDO1FBQ3JELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBZ0M7UUFDbEQsaUJBQVksR0FBWixZQUFZLENBQWE7UUFjNUIsdUJBQWtCLEdBQVcsSUFBSSxDQUFDO1FBQ2xDLFVBQUssR0FBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVuQyxXQUFNLEdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBWSxJQUFJLENBQUM7UUFDbkMsb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFDN0IsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFDNUIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUV6QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFFOUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUV6QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTNCLGtCQUFhLEdBQXFCLEVBQUUsQ0FBQztRQUUxQixTQUFJLEdBQUcsUUFBUSxDQUFDO1FBbkNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ3hDLENBQUM7SUFvQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxTQUFTO1FBQ2QsTUFBTSxTQUFTLEdBQVcsR0FBRyxDQUFDO1FBRTlCLGFBQWE7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDaEMsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sT0FBTyxHQUFRLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUN2QyxNQUFNLEVBQUUsYUFBYTtZQUNyQixPQUFPLEVBQUUsT0FBTztZQUNoQixLQUFLLEVBQUUsSUFBSTtZQUNYLFNBQVMsRUFBRSxJQUFJO1lBQ2YscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixzQkFBc0IsRUFBRSxJQUFJO1NBQzdCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVuRyxjQUFjO1FBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLHFCQUFxQjtRQUVyQixNQUFNLFVBQVUsR0FBZSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRixVQUFVLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsQyxNQUFNLEtBQUssR0FBcUIsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBcUIsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFxQixJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFxQixJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxZQUFZLEdBQXFCLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLGNBQWM7UUFDbkIsTUFBTSxhQUFhLEdBQWtCLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sYUFBYSxHQUFzQixJQUFJLGlCQUFpQixDQUFDLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUM7UUFDMUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxVQUFVO1FBQ2YsTUFBTSxrQkFBa0IsR0FBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQztRQUMxRixNQUFNLFdBQVcsR0FBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQztRQUVoRixJQUFJLGdCQUE2QixDQUFDO1FBQ2xDLEtBQUssTUFBTSxNQUFNLElBQUksa0JBQWtCLEVBQUU7WUFDdkMsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztnQkFDMUIsTUFBTTthQUNQO1NBQ0Y7UUFDRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztTQUNoQztRQUNELEtBQUssTUFBTSxlQUFlLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxrQkFBa0IsR0FBVyxFQUFFLENBQUM7UUFDcEMsTUFBTSxjQUFjLEdBQVcsbUJBQW1CLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7WUFDakQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztTQUNoRjtRQUNELE1BQU0sTUFBTSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLEVBQUUsQ0FBTSxJQUFJLEVBQUMsRUFBRTtZQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRCxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRTtZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7YUFBTSxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjthQUFNLElBQUksUUFBUSxLQUFLLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVk7UUFDMUIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxJQUFJLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ2hFLE1BQU0sY0FBYyxHQUFtQixJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2hGLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0UsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7Z0JBQzVELDhEQUE4RDtnQkFDOUQsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsVUFBa0I7UUFDeEMsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFXLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQVcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDO1FBQzVHLE1BQU0sWUFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RELElBQUksS0FBWSxDQUFDO1FBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFhLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsRixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLEVBQUUsS0FBSztZQUNWLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsTUFBTSxFQUFFLElBQUk7WUFDWixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDO1FBQ0YsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFtQixFQUFFLEVBQUU7WUFDaEQsTUFBTSxJQUFJLEdBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsY0FBYyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLGNBQWMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3BEO1FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDM0QsSUFBSSxhQUFxQixDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTtZQUNwQyxhQUFhLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLFFBQVEsRUFBRTtZQUMvQyxhQUFhLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQzVDO1FBQ0QsZ0VBQWdFO1FBQ2hFLE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUM3RCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDYixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDekIsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVksRUFBRSxPQUFlO1FBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDaEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1NBQzdCO2FBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztTQUM3QjthQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBWSxFQUFFLE1BQWM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUNoQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7U0FDNUI7YUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDdkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztTQUM1QjthQUFNLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtZQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVNLHdCQUF3QixDQUFDLE1BQU07UUFDcEMsTUFBTSxLQUFLLEdBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3RSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNyRCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQVU7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFVO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLFFBQVE7UUFDZCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUYsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRWEsY0FBYyxDQUFDLFFBQWdCLEVBQUUsSUFBVTs7WUFDdkQsTUFBTSxPQUFPLEdBQXNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUM1QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRWEsZUFBZSxDQUFDLFFBQWdCLEVBQUUsSUFBVTs7WUFDeEQsTUFBTSxNQUFNLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM1QyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBTyxLQUFVLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxZQUFZLEdBQVcsU0FBUyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZGLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzNFLElBQUksUUFBUSxFQUFFO3dCQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ3hDLE1BQU0sSUFBSSxHQUFXLFFBQVEsQ0FBQzs0QkFDOUIsTUFBTSxRQUFRLEdBQVcsUUFBUSxDQUFDLENBQUMsdUJBQXVCOzRCQUMxRCxNQUFNLGlCQUFpQixHQUFRLEVBQUUsQ0FBQzs0QkFDbEMsTUFBTSxTQUFTLEdBQVEsRUFBRSxDQUFDOzRCQUMxQixNQUFNLFFBQVEsR0FBYSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7NEJBQzNHLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDOzRCQUM1QyxRQUFRLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzs0QkFDaEMseUZBQXlGOzRCQUN6RixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dDQUMzSCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dDQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQ0FDMUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7NEJBQzFCLENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztvQkFDNUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFBLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFTyxhQUFhLENBQUMsSUFBWTtRQUNoQyxNQUFNLGVBQWUsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUMxRixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsK0JBQStCO0lBQzNFLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBVTtRQUMzQixNQUFNLE1BQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFXLEdBQUcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLEVBQ0gsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTiwyREFBMkQ7WUFDM0QsNERBQTREO1FBQzlELENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQVU7UUFDM0IsTUFBTSxTQUFTLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QyxNQUFNLEdBQUcsR0FBVyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELFNBQVMsQ0FBQyxJQUFJLENBQ1osR0FBRyxFQUNILENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTiwyREFBMkQ7WUFDM0QsNERBQTREO1FBQzlELENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQVU7UUFDM0IsTUFBTSxTQUFTLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxxREFBcUQ7UUFDckQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQVcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQVU7UUFDM0IsTUFBTSxTQUFTLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQVU7UUFDM0IsTUFBTSxTQUFTLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFRO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNyRixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFXO1FBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUN6QjtRQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUIsa0NBQWtDO1FBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRTtnQkFDdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQWdCO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQVc7UUFDbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUNsQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekIsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBVztRQUNsQyxNQUFNLGdCQUFnQixHQUFhLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNsRixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDckMsTUFBTSxjQUFjLEdBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBWSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBVyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUVuRCxJQUFJLGdCQUF3QixDQUFDO1FBQzdCLElBQUksZUFBdUIsQ0FBQztRQUM1QixJQUFJLGVBQXVCLENBQUM7UUFDNUIsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTtZQUNwQyxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ2hDLGVBQWUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQzlCLGVBQWUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssUUFBUSxFQUFFO1lBQy9DLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbEMsZUFBZSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDaEMsZUFBZSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDakM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUNuQyxVQUFVLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUM1RSxJQUFJLEVBQ0osYUFBYSxDQUNkLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUNwQyxXQUFXLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN4QyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDaEYsSUFBSSxFQUNKLGNBQWMsQ0FDZixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDbkMsVUFBVSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ3RDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQ2pGLElBQUksRUFDSixhQUFhLENBQ2QsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBWSxFQUFFLFFBQWlCLEVBQUUsSUFBVSxFQUFFLElBQVk7UUFDN0UsTUFBTSxZQUFZLEdBQWlCLElBQUksWUFBWSxDQUFDLElBQUksRUFBRTtZQUN4RCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxHQUFHO1lBQ1QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBc0IsSUFBSSxpQkFBaUIsQ0FBQyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sUUFBUSxHQUFTLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBVTtRQUNuQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFxQixDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hEO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUFDLGVBQWdDO1FBQ2pFLE1BQU0sU0FBUyxHQUFjLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBVSxTQUFTLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUM7UUFDdkQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQztRQUMvRCxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztRQUN2RSxLQUFLLE1BQU0sUUFBUSxJQUFJLGVBQWUsRUFBRTtZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkMsU0FBUzthQUNWO1lBQ0QsSUFBSSxRQUFRLEtBQUssVUFBVSxFQUFFO2dCQUMzQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUMvQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUU7Z0JBQy9CLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hEO2lCQUFNLElBQUksUUFBUSxLQUFLLGFBQWEsRUFBRTtnQkFDcEMsS0FBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDckU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDdkU7U0FDRjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUErQixFQUFFLFFBQWEsRUFBRSxLQUFVO1FBQ3JGLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzFDLFNBQVM7aUJBQ1Y7Z0JBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QztTQUNGO2FBQU07WUFDTCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUdPLHdCQUF3QixDQUFDLFdBQWdCO1FBQy9DLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7UUFDN0Isb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkQsVUFBVSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QseUJBQXlCO1FBQ3pCLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pCLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDeEIsdUJBQXVCO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDcEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLENBQUM7aUJBQzlEO3FCQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ2xHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztpQkFDNUU7Z0JBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUNuQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFOzRCQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzdCO3FCQUNGO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3pDO2lCQUNGO2dCQUVELG1CQUFtQjtnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztpQkFDN0Q7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM5QztRQUVELDhCQUE4QjtRQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekIsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2FBQzVEO1NBQ0Y7UUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUNsQixLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7cUJBQzFDO3lCQUFNO3dCQUNMLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQzFCO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFhO1FBQ3JDLElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQzVFLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDcEIsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDN0I7SUFDSCxDQUFDOzttSEExckJVLHFCQUFxQixrQkFHdEIsZUFBZTt1R0FIZCxxQkFBcUIsb1FBOUt0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMktUOzRGQUdVLHFCQUFxQjtrQkFoTGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyS1Q7b0JBQ0QsU0FBUyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7aUJBQzlDOzswQkFJSSxNQUFNOzJCQUFDLGVBQWU7Z1ZBaUJLLGFBQWE7c0JBQTFDLFNBQVM7dUJBQUMsVUFBVTtnQkFDYyxhQUFhO3NCQUEvQyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQm94SGVscGVyLFxyXG4gIENvbG9yLFxyXG4gIERpcmVjdGlvbmFsTGlnaHQsXHJcbiAgR3JpZEhlbHBlcixcclxuICBMaWdodCxcclxuICBMaW5lYXJTUkdCQ29sb3JTcGFjZSxcclxuICBNZXNoLFxyXG4gIE1lc2hCYXNpY01hdGVyaWFsLFxyXG4gIE1lc2hQaG9uZ01hdGVyaWFsLFxyXG4gIE9iamVjdDNELFxyXG4gIFBDRlNvZnRTaGFkb3dNYXAsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUGxhbmVHZW9tZXRyeSxcclxuICBQTVJFTUdlbmVyYXRvcixcclxuICBTY2VuZSxcclxuICBWZWN0b3IzLFxyXG4gIFdlYkdMUmVuZGVyZXJcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7RmxvYXRUeXBlLCBMaW5lYXJUb25lTWFwcGluZ30gZnJvbSAndGhyZWUvc3JjL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7R0xURkxvYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvR0xURkxvYWRlcic7XHJcbmltcG9ydCB7UkdCRUxvYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvUkdCRUxvYWRlcic7XHJcbmltcG9ydCB7T3JiaXRDb250cm9sc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2NvbnRyb2xzL09yYml0Q29udHJvbHMnO1xyXG5pbXBvcnQge0dMVEZFeHBvcnRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2V4cG9ydGVycy9HTFRGRXhwb3J0ZXInO1xyXG5pbXBvcnQge0ZCWExvYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvRkJYTG9hZGVyJztcclxuaW1wb3J0IHtPQkpMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL09CSkxvYWRlcic7XHJcbmltcG9ydCB7VGhpcmRQYXJ0eU1vZGVsU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS90aGlyZC1wYXJ0eS1tb2RlbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1REU0xvYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvVERTTG9hZGVyJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0xpZ2h0UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2xpZ2h0LXByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7TGlnaHRQcm9wZXJ0aWVzfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2xpZ2h0LXByb3BlcnRpZXMnO1xyXG5pbXBvcnQge0xpZ2h0RW51bX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2xpZ2h0LmVudW0nO1xyXG5pbXBvcnQge0xpZ2h0Q3JlYXRlU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS9saWdodC1jcmVhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtMaWdodFByZXNldH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9saWdodC1wcmVzZXQnO1xyXG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9maWxlLnV0aWxzJztcclxuaW1wb3J0IHtTVExMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL1NUTExvYWRlcic7XHJcbmltcG9ydCB7Qm94TWVhc3VyZW1lbnR9IGZyb20gJy4uLy4uL2NvcmUzZC9odWQvYm91bmRpbmctbWVhc3VyZW1lbnQtYm94L2JveC1tZWFzdXJlbWVudCc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZvbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9mb250LnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZvbnR9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXInO1xyXG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvbWV0YWRhdGEnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb0RvbWFpblZhbHVlfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm8nO1xyXG5pbXBvcnQge1RleHRHZW9tZXRyeX0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvVGV4dEdlb21ldHJ5JztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtbW9kZWwtcHJldmlldycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1jbG9zZS1wcmV2aWV3XCIgKGNsaWNrKT1cImNsb3NlUHJldmlldygpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlld1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtcHJldmlldy13aW5kb3dcIj5cclxuICAgICAgICA8cnAtbG9hZGVyIFtzaG93XT1zaG93TG9hZGVyPjwvcnAtbG9hZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlbC1wcmV2aWV3LWNvbnRhaW5lclwiIGlkPVwiY2FudmFzQ29udGFpbmVyXCI+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+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLWVycm9yLWJhY2tncm91bmRcIiAqbmdJZj1cImhhc0Vycm9yc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLWVycm9yLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZWwtZXJyb3ItaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGg0PkZhaWxlZCB0byB1cGxvYWQgeW91ciBtb2RlbDwvaDQ+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVsLWNsb3NlLXByZXZpZXdcIiAoY2xpY2spPVwiaGFzRXJyb3JzPWZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxwPkl0IGxvb2tzIGxpa2UgeW91ciBtb2RlbCBoYXMgc29tZSBpc3N1ZXMuIFBsZWFzZSByZXNvbHZlIHRoZXNlIGlzc3VlcyBhbmQgdHJ5IGFnYWluLjwvcD5cclxuICAgICAgICAgICAgPG9sPlxyXG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgbGlzdE9mRXJyb3JzXCI+e3sgZXJyb3IgfX08L2xpPlxyXG4gICAgICAgICAgICA8L29sPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYXNFcnJvcnM9ZmFsc2VcIiBjbGFzcz1cImJhc2UtYnV0dG9uIGV4cG9ydEJ1dHRvbkRhcmtcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5Pazwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGVsUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHtcclxuICAgICAgZmlsZTogYW55LFxyXG4gICAgICB0aGlyZFBhcnR5TW9kZWxTZXJ2aWNlOiBUaGlyZFBhcnR5TW9kZWxTZXJ2aWNlLFxyXG4gICAgICBsaWdodFByZXNldFNlcnZpY2U6IExpZ2h0UHJlc2V0c1NlcnZpY2VcclxuICAgIH0sXHJcbiAgICBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHVibGljIGljb25DYWNoZTogSG9tZWRlY29yYXRvckljb25DYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxNb2RlbFByZXZpZXdDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9hZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGljdGlvbmFyeVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZvbnRTZXJ2aWNlOiBGb250U2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuZm9udCA9IHRoaXMuX2ZvbnRTZXJ2aWNlLmh1ZEZvbnQ7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdmaWxlTmFtZScpIHB1YmxpYyBnbGJFeHBvcnROYW1lOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2hlaWdodEFydGljbGUnKSBwdWJsaWMgaGVpZ2h0QXJ0aWNsZTogRWxlbWVudFJlZjtcclxuXHJcbiAgcHVibGljIHNjZW5lUHJldmlldzogVEhSRUUuU2NlbmU7XHJcbiAgcHVibGljIGNhbWVyYVByZXZpZXc6IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gIHB1YmxpYyByZW5kZXJlclByZXZpZXc6IFRIUkVFLldlYkdMUmVuZGVyZXI7XHJcbiAgcHVibGljIGNvbnRyb2xzOiBPcmJpdENvbnRyb2xzO1xyXG4gIHB1YmxpYyBib3VuZGluZ0JveFNpemU6IFZlY3RvcjM7XHJcbiAgcHVibGljIGxvYWRlZE1vZGVsOiBhbnk7XHJcbiAgcHVibGljIHVuaXRzT2ZNZWFzdXJlbWVudDogc3RyaW5nID0gJ2NtJztcclxuICBwdWJsaWMgdW5pdHM6IHN0cmluZ1tdID0gWydjbScsICdpbmNoZXMnXTtcclxuICBwdWJsaWMgbW9kZWxOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIG1hdGhQaTogbnVtYmVyID0gTWF0aC5QSTtcclxuICBwdWJsaWMgc2hvd1JlZmVyZW5jZU1vZGVsOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgZmxvb3JTaXplSGVpZ2h0OiBudW1iZXIgPSAxMDtcclxuICBwdWJsaWMgZmxvb3JTaXplV2lkdGg6IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBncmlkU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgcHVibGljIGdyaWREaXZpc2lvbjogbnVtYmVyID0gMTA7XHJcbiAgcHVibGljIGRpc3RhbmNlU3RlcDogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgZm9udDogRm9udDtcclxuICBwdWJsaWMgc3RhY2thYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGhlaWdodEFkanVzdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcGxhY2VtZW50T3B0aW9uczogQ29Eb21haW5WYWx1ZVtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFBsYWNlbWVudDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgY2FudlJlZmVyZW5jZTogSFRNTEVsZW1lbnQ7XHJcbiAgcHVibGljIGhhc0Vycm9yczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsaXN0T2ZFcnJvcnM6IGFueVtdID0gW107XHJcblxyXG4gIHB1YmxpYyBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX21lYXN1cmVtZW50czogQm94TWVhc3VyZW1lbnRbXSA9IFtdO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWNvbiA9IEljb25FbnVtO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmluaXRTY2VuZSgpO1xyXG4gICAgdGhpcy5sb2FkTW9kZWwodGhpcy5kYXRhKTtcclxuICAgIHRoaXMuX2FkYXB0ZXJTZXJ2aWNlLmdldE1vZGVsUGxhY2VtZW50T3B0aW9ucygpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5wbGFjZW1lbnRPcHRpb25zID0gcmVzdWx0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubGlzdE9mRXJyb3JzID0gW107XHJcbiAgICBVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuc2NlbmVQcmV2aWV3KTtcclxuICAgIHRoaXMuY2FudlJlZmVyZW5jZSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0U2NlbmUoKTogdm9pZCB7XHJcbiAgICBjb25zdCB2aWV3U2NhbGU6IG51bWJlciA9IDEuMztcclxuXHJcbiAgICAvLyBpbml0IHNjZW5lXHJcbiAgICB0aGlzLnNjZW5lUHJldmlldyA9IG5ldyBTY2VuZSgpO1xyXG4gICAgLy8gaW5pdCByZW5kZXJlclxyXG4gICAgdGhpcy5jYW52UmVmZXJlbmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhc0NvbnRhaW5lcicpO1xyXG4gICAgY29uc3QgY2FudmFzRWxlbWVudDogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNvbnN0IGNvbnRleHQ6IGFueSA9IGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgnd2ViZ2wyJywge2FudGlhbGlhczogdHJ1ZX0pO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcgPSBuZXcgV2ViR0xSZW5kZXJlcih7XHJcbiAgICAgIGNhbnZhczogY2FudmFzRWxlbWVudCxcclxuICAgICAgY29udGV4dDogY29udGV4dCxcclxuICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlLFxyXG4gICAgICBsb2dhcml0aG1pY0RlcHRoQnVmZmVyOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnNldFBpeGVsUmF0aW8od2luZG93LmRldmljZVBpeGVsUmF0aW8pO1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcuc2V0Q2xlYXJDb2xvcigweGZhZmFmYSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5hdXRvQ2xlYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucmVuZGVyZXJQcmV2aWV3LnRvbmVNYXBwaW5nID0gTGluZWFyVG9uZU1hcHBpbmc7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zaGFkb3dNYXAuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zaGFkb3dNYXAudHlwZSA9IFBDRlNvZnRTaGFkb3dNYXA7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5vdXRwdXRDb2xvclNwYWNlID0gTGluZWFyU1JHQkNvbG9yU3BhY2U7XHJcbiAgICB0aGlzLmNhbnZSZWZlcmVuY2UuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlclByZXZpZXcuZG9tRWxlbWVudCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5kb21FbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCAndGhyZWVkJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRTaXplKHdpbmRvdy5pbm5lckhlaWdodCAvIHZpZXdTY2FsZSwgd2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlLCB0cnVlKTtcclxuXHJcbiAgICAvLyBpbml0IGNhbWVyYVxyXG4gICAgdGhpcy5jYW1lcmFQcmV2aWV3ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKDQ1LCAxLCAwLjAxLCAxMDAwMDAwMDApO1xyXG4gICAgdGhpcy5jYW1lcmFQcmV2aWV3LnBvc2l0aW9uLnNldCgwLCAyLCAxMCk7XHJcbiAgICB0aGlzLmNhbWVyYVByZXZpZXcuYXNwZWN0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAvIHZpZXdTY2FsZSkgLyAod2luZG93LmlubmVySGVpZ2h0IC8gdmlld1NjYWxlKTtcclxuICAgIHRoaXMuY2FtZXJhUHJldmlldy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcblxyXG4gICAgdGhpcy5jb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKHRoaXMuY2FtZXJhUHJldmlldywgdGhpcy5yZW5kZXJlclByZXZpZXcuZG9tRWxlbWVudCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHRoaXMubG9hZEZsb29yUGxhbmUoKTtcclxuICAgIHRoaXMubG9hZFJlZmVyZW5jZU1vZGVsKCk7XHJcbiAgICAvLyB0aGlzLmxvYWRMaWdodHMoKTtcclxuXHJcbiAgICBjb25zdCBncmlkSGVscGVyOiBHcmlkSGVscGVyID0gbmV3IEdyaWRIZWxwZXIodGhpcy5ncmlkU2l6ZSwgdGhpcy5ncmlkRGl2aXNpb24pO1xyXG4gICAgZ3JpZEhlbHBlci5uYW1lID0gJ0dyaWRIZWxwZXInO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGdyaWRIZWxwZXIpO1xyXG5cclxuICAgIGNvbnN0IGxpZ2h0OiBEaXJlY3Rpb25hbExpZ2h0ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoMHhmZmZmZmYsIDUpO1xyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0KDAsIDIsIDEwKTtcclxuICAgIGxpZ2h0LnRhcmdldC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICBjb25zdCBsaWdodFR3bzogRGlyZWN0aW9uYWxMaWdodCA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0KDB4ZmZmZmZmLCA1KTtcclxuICAgIGxpZ2h0VHdvLnBvc2l0aW9uLnNldCgwLCAyLCAtMTApO1xyXG4gICAgbGlnaHRUd28udGFyZ2V0LnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIGNvbnN0IGxpZ2h0VGhyZWU6IERpcmVjdGlvbmFsTGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgweGZmZmZmZiwgNSk7XHJcbiAgICBsaWdodFRocmVlLnBvc2l0aW9uLnNldCgxMCwgMiwgMCk7XHJcbiAgICBsaWdodFRocmVlLnRhcmdldC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICBjb25zdCBsaWdodEZvdXI6IERpcmVjdGlvbmFsTGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgweGZmZmZmZiwgNSk7XHJcbiAgICBsaWdodEZvdXIucG9zaXRpb24uc2V0KC0xMCwgMiwgMCk7XHJcbiAgICBsaWdodEZvdXIudGFyZ2V0LnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIGNvbnN0IGxpZ2h0Q2VpbGluZzogRGlyZWN0aW9uYWxMaWdodCA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0KDB4ZmZmZmZmLCA1KTtcclxuICAgIGxpZ2h0Q2VpbGluZy5wb3NpdGlvbi5zZXQoMCwgNSwgMCk7XHJcbiAgICBsaWdodENlaWxpbmcudGFyZ2V0LnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQobGlnaHQpO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGxpZ2h0LnRhcmdldCk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQobGlnaHRUd28pO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGxpZ2h0VHdvLnRhcmdldCk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQobGlnaHRUaHJlZSk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQobGlnaHRUaHJlZS50YXJnZXQpO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGxpZ2h0Rm91cik7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQobGlnaHRGb3VyLnRhcmdldCk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQobGlnaHRDZWlsaW5nKTtcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChsaWdodENlaWxpbmcudGFyZ2V0KTtcclxuXHJcbiAgICB0aGlzLl9hbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZEZsb29yUGxhbmUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwbGFuZUdlb21ldHJ5OiBQbGFuZUdlb21ldHJ5ID0gbmV3IFBsYW5lR2VvbWV0cnkodGhpcy5mbG9vclNpemVXaWR0aCwgdGhpcy5mbG9vclNpemVIZWlnaHQpO1xyXG4gICAgY29uc3QgcGxhbmVNYXRlcmlhbDogTWVzaEJhc2ljTWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe2NvbG9yOiAweDg5OTQ5OSwgc2lkZTogVEhSRUUuRG91YmxlU2lkZX0pO1xyXG4gICAgY29uc3QgcGxhbmUgPSBuZXcgTWVzaChwbGFuZUdlb21ldHJ5LCBwbGFuZU1hdGVyaWFsKTtcclxuICAgIHBsYW5lLnJvdGF0aW9uLnggPSAtTWF0aC5QSSAvIDI7XHJcbiAgICBwbGFuZS5wb3NpdGlvbi55ID0gMDtcclxuICAgIHBsYW5lLm5hbWUgPSAnZmxvb3JfcGxhbmUnO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKHBsYW5lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkTGlnaHRzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGlzdE9mTGlnaHRQcmVzZXRzOiBMaWdodFByZXNldFtdID0gdGhpcy5kYXRhLmxpZ2h0UHJlc2V0U2VydmljZS5sb2FkZWRMaWdodFByZXNldHM7XHJcbiAgICBjb25zdCBsaWdodFByZXNldDogTGlnaHRQcmVzZXQgPSB0aGlzLmRhdGEubGlnaHRQcmVzZXRTZXJ2aWNlLmFjdGl2ZUxpZ2h0UHJlc2V0O1xyXG5cclxuICAgIGxldCBsaWdodFByZXNldFRvVXNlOiBMaWdodFByZXNldDtcclxuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIGxpc3RPZkxpZ2h0UHJlc2V0cykge1xyXG4gICAgICBpZiAocHJlc2V0LmRlZmF1bHQgJiYgcHJlc2V0LnN0YW5kYWxvbmUpIHtcclxuICAgICAgICBsaWdodFByZXNldFRvVXNlID0gcHJlc2V0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobGlnaHRQcmVzZXRUb1VzZS5saWdodHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGxpZ2h0UHJlc2V0VG9Vc2UgPSBsaWdodFByZXNldDtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbGlnaHRQcm9wZXJ0aWVzIG9mIGxpZ2h0UHJlc2V0VG9Vc2UubGlnaHRzKSB7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZUxpZ2h0RnJvbVByb3BlcnRpZXMobGlnaHRQcm9wZXJ0aWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkUmVmZXJlbmNlTW9kZWwoKTogdm9pZCB7XHJcbiAgICBsZXQgcmVmZXJlbmNlTW9kZWxQYXRoOiBzdHJpbmcgPSAnJztcclxuICAgIGNvbnN0IHJlZmVyZW5jZU1vZGVsOiBzdHJpbmcgPSAncmVmZXJlbmNlX3BvcC5nbGInO1xyXG4gICAgaWYgKHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnRocmVlREFzc2V0UGF0aCkge1xyXG4gICAgICByZWZlcmVuY2VNb2RlbFBhdGggPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy50aHJlZURBc3NldFBhdGggKyAnYXNzZXRzLyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsb2FkZXI6IEdMVEZMb2FkZXIgPSBuZXcgR0xURkxvYWRlcigpO1xyXG4gICAgbG9hZGVyLmxvYWQocmVmZXJlbmNlTW9kZWxQYXRoICsgcmVmZXJlbmNlTW9kZWwsIGFzeW5jIGdsdGYgPT4ge1xyXG4gICAgICBnbHRmLnNjZW5lLnBvc2l0aW9uLnNldCgzLCAwLCAzKTtcclxuICAgICAgZ2x0Zi5zY2VuZS5jYXN0U2hhZG93ID0gdHJ1ZTtcclxuICAgICAgZ2x0Zi5zY2VuZS5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgICAgZ2x0Zi5zY2VuZS5uYW1lID0gJ1JlZmVyZW5jZV9tb2RlbCc7XHJcbiAgICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChnbHRmLnNjZW5lKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRNb2RlbChpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGVsTmFtZSA9IHRoaXMuX3NldE1vZGVsTmFtZShpbnB1dC5maWxlLmZpbGUubmFtZSk7XHJcbiAgICBjb25zdCBmaWxlVHlwZSA9IGlucHV0LmZpbGUuZmlsZVR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2dsYicgfHwgZmlsZVR5cGUgPT09ICdnbHRmJykge1xyXG4gICAgICB0aGlzLl9nbGJMb2FkZXIoaW5wdXQpO1xyXG4gICAgfSBlbHNlIGlmIChmaWxlVHlwZSA9PT0gJ2ZieCcpIHtcclxuICAgICAgdGhpcy5fZmJ4TG9hZGVyKGlucHV0KTtcclxuICAgIH0gZWxzZSBpZiAoZmlsZVR5cGUgPT09ICdvYmonKSB7XHJcbiAgICAgIHRoaXMuX29iakxvYWRlcihpbnB1dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpbGVUeXBlID09PSAnM2RzJykge1xyXG4gICAgICB0aGlzLl90ZHNMb2FkZXIoaW5wdXQpO1xyXG4gICAgfSBlbHNlIGlmIChmaWxlVHlwZSA9PT0gJ3N0bCcpIHtcclxuICAgICAgdGhpcy5fc3RsTG9hZGVyKGlucHV0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkSERSSShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIG5ldyBSR0JFTG9hZGVyKCkuc2V0RGF0YVR5cGUoRmxvYXRUeXBlKS5sb2FkKHBhdGgsIChoZHJUZXh0dXJlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcG1yZW1HZW5lcmF0b3I6IFBNUkVNR2VuZXJhdG9yID0gbmV3IFBNUkVNR2VuZXJhdG9yKHRoaXMucmVuZGVyZXJQcmV2aWV3KTtcclxuICAgICAgICBwbXJlbUdlbmVyYXRvci5jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCk7XHJcbiAgICAgICAgY29uc3QgaGRyQ3ViZVJlbmRlclRhcmdldCA9IHBtcmVtR2VuZXJhdG9yLmZyb21FcXVpcmVjdGFuZ3VsYXIoaGRyVGV4dHVyZSk7XHJcbiAgICAgICAgaGRyVGV4dHVyZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5zY2VuZVByZXZpZXcuZW52aXJvbm1lbnQgPSBoZHJDdWJlUmVuZGVyVGFyZ2V0LnRleHR1cmU7XHJcbiAgICAgICAgLy8gdGhpcy5zY2VuZVByZXZpZXcuYmFja2dyb3VuZCA9IGhkckN1YmVSZW5kZXJUYXJnZXQudGV4dHVyZTtcclxuICAgICAgICBwbXJlbUdlbmVyYXRvci5kaXNwb3NlKCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCB1bmRlZmluZWQsIHJlamVjdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRTY2VuZUFzR0xCKHJldHVyblR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgLy8gYWRkIHRpbWVzdGFtcFxyXG4gICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IHRpbWVzdGFtcDogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBleHBvcnRGaWxlTmFtZTogc3RyaW5nID0gdGhpcy5fc2V0TW9kZWxOYW1lKHRoaXMuZ2xiRXhwb3J0TmFtZS5uYXRpdmVFbGVtZW50LnZhbHVlKSArICdfJyArIHRpbWVzdGFtcDtcclxuICAgIGNvbnN0IGdsdGZFeHBvcnRlcjogR0xURkV4cG9ydGVyID0gbmV3IEdMVEZFeHBvcnRlcigpO1xyXG4gICAgbGV0IHNjZW5lOiBTY2VuZTtcclxuICAgIHNjZW5lID0gdGhpcy5zY2VuZVByZXZpZXcuY2xvbmUoKTtcclxuICAgIGNvbnN0IG1vZGVsOiBPYmplY3QzRCA9IHRoaXMuc2NlbmVQcmV2aWV3LmdldE9iamVjdEJ5TmFtZSh0aGlzLm1vZGVsTmFtZSkuY2xvbmUoKTtcclxuICAgIHdoaWxlIChzY2VuZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHNjZW5lLnJlbW92ZShzY2VuZS5jaGlsZHJlblswXSk7XHJcbiAgICB9XHJcbiAgICBzY2VuZS5hZGQobW9kZWwpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgdHJzOiBmYWxzZSxcclxuICAgICAgb25seVZpc2libGU6IHRydWUsXHJcbiAgICAgIHRydW5jYXRlRHJhd1JhbmdlOiB0cnVlLFxyXG4gICAgICBmb3JjZUluZGljZXM6IGZhbHNlLFxyXG4gICAgICBiaW5hcnk6IHRydWUsXHJcbiAgICAgIG1heFRleHR1cmVTaXplOiAyMDQ4XHJcbiAgICB9O1xyXG4gICAgZ2x0ZkV4cG9ydGVyLnBhcnNlKHNjZW5lLCAocmVzdWx0OiBBcnJheUJ1ZmZlcikgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlOiBCbG9iID0gbmV3IEJsb2IoW3Jlc3VsdF0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xyXG4gICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3VwbG9hZCcpIHtcclxuICAgICAgICB0aGlzLl9zZW5kTW9kZWxUb0NETihgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRNb2RlbChgJHtleHBvcnRGaWxlTmFtZX0uZ2xiYCwgZmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIChlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2NhbGVBcnRpY2xlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUodGhpcy5tb2RlbE5hbWUpO1xyXG4gICAgY29uc3QgaW5wdXRIZWlnaHQgPSB0aGlzLmhlaWdodEFydGljbGUubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgIGxldCBoZWlnaHRJbk1ldGVyOiBudW1iZXI7XHJcbiAgICBpZiAodGhpcy51bml0c09mTWVhc3VyZW1lbnQgPT09ICdjbScpIHtcclxuICAgICAgaGVpZ2h0SW5NZXRlciA9IGlucHV0SGVpZ2h0IC8gMTAwO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzT2ZNZWFzdXJlbWVudCA9PT0gJ2luY2hlcycpIHtcclxuICAgICAgaGVpZ2h0SW5NZXRlciA9IChpbnB1dEhlaWdodCAqIDIuNTQpIC8gMTAwO1xyXG4gICAgfVxyXG4gICAgLy8gc2NhbGUgPSB0aGlzLmJvdW5kaW5nIC8gaGVpZ2h0SW5NZXRlciBhbmQgdXNlIFkgYXMgdXAvIGhlaWdodFxyXG4gICAgY29uc3Qgc2NhbGU6IG51bWJlciA9IHRoaXMuYm91bmRpbmdCb3hTaXplLnkgLyBoZWlnaHRJbk1ldGVyO1xyXG4gICAgbW9kZWwuc2NhbGUuc2V0KFxyXG4gICAgICBtb2RlbC5zY2FsZS54IC8gc2NhbGUsXHJcbiAgICAgIG1vZGVsLnNjYWxlLnkgLyBzY2FsZSxcclxuICAgICAgbW9kZWwuc2NhbGUueiAvIHNjYWxlKTtcclxuICAgIG1vZGVsLnVwZGF0ZU1hdHJpeCgpO1xyXG4gICAgbW9kZWwudHJhdmVyc2UoKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5pc01lc2gpIHtcclxuICAgICAgICBub2RlLmdlb21ldHJ5LmFwcGx5TWF0cml4NChtb2RlbC5tYXRyaXgpO1xyXG4gICAgICAgIG5vZGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIG5vZGUucm90YXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIG5vZGUuc2NhbGUuc2V0KDEsIDEsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG1vZGVsLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIG1vZGVsLnJvdGF0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIG1vZGVsLnNjYWxlLnNldCgxLCAxLCAxKTtcclxuICAgIG1vZGVsLnVwZGF0ZU1hdHJpeCgpO1xyXG4gICAgdGhpcy5fZ2V0Qm91bmRpbmdCb3gobW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvdGF0ZU1vZGVsKGF4aXM6IHN0cmluZywgZGVncmVlczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc2NlbmVQcmV2aWV3LmdldE9iamVjdEJ5TmFtZSh0aGlzLm1vZGVsTmFtZSk7XHJcbiAgICBpZiAoYXhpcyA9PT0gJ3gnKSB7XHJcbiAgICAgIG1vZGVsLnJvdGF0aW9uLnggKz0gZGVncmVlcztcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3knKSB7XHJcbiAgICAgIG1vZGVsLnJvdGF0aW9uLnkgKz0gZGVncmVlcztcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3onKSB7XHJcbiAgICAgIG1vZGVsLnJvdGF0aW9uLnogKz0gZGVncmVlcztcclxuICAgIH1cclxuICAgIHRoaXMuX2dldEJvdW5kaW5nQm94KG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlTW9kZWwoYXhpczogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUodGhpcy5tb2RlbE5hbWUpO1xyXG4gICAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG4gICAgICBtb2RlbC5wb3NpdGlvbi54ICs9IGFtb3VudDtcclxuICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3knKSB7XHJcbiAgICAgIG1vZGVsLnBvc2l0aW9uLnkgKz0gYW1vdW50O1xyXG4gICAgfSBlbHNlIGlmIChheGlzID09PSAneicpIHtcclxuICAgICAgbW9kZWwucG9zaXRpb24ueiArPSBhbW91bnQ7XHJcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICdhbGwnKSB7XHJcbiAgICAgIG1vZGVsLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2dldEJvdW5kaW5nQm94KG1vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVbml0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudW5pdHNPZk1lYXN1cmVtZW50ID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlU2hvd1JlZmVyZW5jZU1vZGVsKCRldmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWw6IE9iamVjdDNEID0gdGhpcy5zY2VuZVByZXZpZXcuZ2V0T2JqZWN0QnlOYW1lKCdSZWZlcmVuY2VfbW9kZWwnKTtcclxuICAgIG1vZGVsLnZpc2libGUgPSAhdGhpcy5zaG93UmVmZXJlbmNlTW9kZWw7XHJcbiAgICB0aGlzLnNob3dSZWZlcmVuY2VNb2RlbCA9ICF0aGlzLnNob3dSZWZlcmVuY2VNb2RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdGFja2FibGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGFja2FibGUgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWlnaHRBZGp1c3RhYmxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVpZ2h0QWRqdXN0YWJsZSA9IGV2ZW50LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlUHJldmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYW5pbWF0ZSgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyUHJldmlldy5zZXRBbmltYXRpb25Mb29wKCh0aW1lc3RhbXAsIGZyYW1lKSA9PiB0aGlzLl9yZW5kZXIodGltZXN0YW1wLCBmcmFtZSkpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbmRlcih0LCBmcmFtZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlclByZXZpZXcucmVuZGVyKHRoaXMuc2NlbmVQcmV2aWV3LCB0aGlzLmNhbWVyYVByZXZpZXcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZG93bmxvYWRNb2RlbChmaWxlTmFtZTogc3RyaW5nLCBibG9iOiBCbG9iKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGVsZW1lbnQuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBlbGVtZW50LmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2VuZE1vZGVsVG9DRE4oZmlsZU5hbWU6IHN0cmluZywgYmxvYjogQmxvYik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xyXG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9IGFzeW5jIChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGVBc1N0cmluZzogc3RyaW5nID0gRmlsZVV0aWxzLlN0cmlwTWltZVN0cmluZ0Zyb21EYXRhVXJpKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICB0aGlzLl9hZGFwdGVyU2VydmljZS5zdG9yZTNETW9kZWxDRE4oZmlsZU5hbWUsIGZpbGVBc1N0cmluZykudGhlbihmaWxlUGF0aCA9PiB7XHJcbiAgICAgICAgaWYgKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgICB0aGlzLl9ibG9iVG9BcnJheUJ1ZmZlcihibG9iKS50aGVuKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoOiBzdHJpbmcgPSBmaWxlTmFtZTtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWxVcmw6IHN0cmluZyA9IGZpbGVQYXRoOyAvLyBTZXQgdXJsIGZyb20gdGhlIENETlxyXG4gICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uRGF0YTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGNvbnN0IHByaWNlRGF0YTogYW55ID0ge307XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGFEYXRhOiBNZXRhZGF0YSA9IHRoaXMuZGF0YS50aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnNldE1ldGFkYXRhKGhhc2gsIG1vZGVsVXJsLCBjb25maWd1cmF0aW9uRGF0YSk7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhLmNhbkVsZXZhdGUgPSB0aGlzLmhlaWdodEFkanVzdGFibGU7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhLnRoaXJkUGFydHlNb2RlbCA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIFdlIGFsc28gY2FuIHNldCB0aGUgbWV0YWRhdGEgaGVyZSBhbmQgcGFzIGl0IGFzIHRoZSBsYXN0IGFyZ3VtZW50IGZvciBwYXJzZU1vZGVsVG9HTEIuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS50aGlyZFBhcnR5TW9kZWxTZXJ2aWNlLnBhcnNlTW9kZWxUb0dMQihmaWxlLCBoYXNoLCBtb2RlbFVybCwgY29uZmlndXJhdGlvbkRhdGEsIHByaWNlRGF0YSwgbWV0YURhdGEpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9kaWFsb2cuY2xvc2VBbGwoKTtcclxuICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZW5kZXJFcnJvciwge3RpdGxlOiAnVXBsb2FkIGVycm9yJywgbWVzc2FnZTogZXJyb3J9KTtcclxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TW9kZWxOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZW1vdmVFeHRlbnNpb246IHN0cmluZyA9IG5hbWUucmVwbGFjZSgnLmdsYicsICcnKTsgLy8gcmVtb3ZlIC5nbGIgYXMgZmlsZSBleHRlbnNpb25cclxuICAgIHJldHVybiByZW1vdmVFeHRlbnNpb24ucmVwbGFjZSgnLicsICctJyk7IC8vIHJlcGxhY2UgYWxsIGRvdHMgZm9yIHBlcmlvZHNcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dsYkxvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBsb2FkZXI6IEdMVEZMb2FkZXIgPSBuZXcgR0xURkxvYWRlcigpO1xyXG4gICAgY29uc3QgbW9kZWxGaWxlOiBhbnkgPSBpbnB1dC5maWxlLmZpbGU7XHJcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IFVSTC5jcmVhdGVPYmplY3RVUkwobW9kZWxGaWxlKTtcclxuICAgIGxvYWRlci5sb2FkKFxyXG4gICAgICB1cmwsXHJcbiAgICAgIChvYmplY3QpID0+IHtcclxuICAgICAgICB0aGlzLl9wcmVwTW9kZWxGb3JTY2VuZShvYmplY3Quc2NlbmUpO1xyXG4gICAgICB9LFxyXG4gICAgICAoeGhyKSA9PiB7XHJcbiAgICAgICAgLy8gbGVhdmUgdGhpcyBmb3Igbm93LCB3ZSBtYXkgYWRkIHNvbWUgdHlwZSBvZiBsb2FkZXIgbGF0ZXJcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgTG9hZGluZzogJHt4aHIubG9hZGVkIC8geGhyLnRvdGFsICogMTAwfSVgKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0T2ZFcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgdGhpcy5oYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmJ4TG9hZGVyKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZieExvYWRlcjogRkJYTG9hZGVyID0gbmV3IEZCWExvYWRlcigpO1xyXG4gICAgY29uc3QgbW9kZWxGaWxlOiBhbnkgPSBpbnB1dC5maWxlLmZpbGU7XHJcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IFVSTC5jcmVhdGVPYmplY3RVUkwobW9kZWxGaWxlKTtcclxuICAgIGZieExvYWRlci5sb2FkKFxyXG4gICAgICB1cmwsXHJcbiAgICAgIChvYmplY3QpID0+IHtcclxuICAgICAgICB0aGlzLl9wcmVwTW9kZWxGb3JTY2VuZShvYmplY3QpO1xyXG4gICAgICB9LFxyXG4gICAgICAoeGhyKSA9PiB7XHJcbiAgICAgICAgLy8gbGVhdmUgdGhpcyBmb3Igbm93LCB3ZSBtYXkgYWRkIHNvbWUgdHlwZSBvZiBsb2FkZXIgbGF0ZXJcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgTG9hZGluZzogJHt4aHIubG9hZGVkIC8geGhyLnRvdGFsICogMTAwfSVgKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0T2ZFcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgdGhpcy5oYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb2JqTG9hZGVyKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9iakxvYWRlcjogT0JKTG9hZGVyID0gbmV3IE9CSkxvYWRlcigpO1xyXG4gICAgLy8gZm9yIG9qYiBmaWxlczogY29udmVydCB0aGUgQXJyYXlCdWZmZXIgdG8gYSBzdHJpbmdcclxuICAgIGNvbnN0IGJ1ZiA9IGlucHV0LmZpbGUuZmlsZUNvbnRlbnRzO1xyXG4gICAgY29uc3QgZGVjb2RlcjogVGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgIGNvbnN0IHN0cjogc3RyaW5nID0gZGVjb2Rlci5kZWNvZGUoYnVmKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IG9iakxvYWRlci5wYXJzZShzdHIpO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Rkc0xvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB0ZHNMb2FkZXI6IFREU0xvYWRlciA9IG5ldyBURFNMb2FkZXIoKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IHRkc0xvYWRlci5wYXJzZShpbnB1dC5maWxlLmZpbGVDb250ZW50cywgJycpO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0bExvYWRlcihpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGxMb2FkZXI6IFNUTExvYWRlciA9IG5ldyBTVExMb2FkZXIoKTtcclxuICAgIGNvbnN0IG9iamVjdCA9IHN0bExvYWRlci5wYXJzZShpbnB1dC5maWxlLmZpbGVDb250ZW50cyk7XHJcbiAgICB0aGlzLl9hZGRGcm9tR2VvbWV0cnkob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEZyb21HZW9tZXRyeShnZW9tZXRyeSkge1xyXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgTWVzaFBob25nTWF0ZXJpYWwoe3RyYW5zcGFyZW50OiB0cnVlLCBvcGFjaXR5OiBnZW9tZXRyeS5hbHBoYX0pO1xyXG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgdGhpcy5fcHJlcE1vZGVsRm9yU2NlbmUobW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcE1vZGVsRm9yU2NlbmUob2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLl92YWxpZGF0ZU9iamVjdFN0cnVjdHVyZShvYmplY3QpO1xyXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxpc3RPZkVycm9ycyA9IFsuLi50aGlzLmxpc3RPZkVycm9ycywgLi4udmFsaWRhdGlvblJlc3VsdF07XHJcbiAgICAgIHRoaXMuaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBvYmplY3QubmFtZSA9IHRoaXMubW9kZWxOYW1lO1xyXG4gICAgdGhpcy5fYXBwbHlUcmFuc2Zvcm1zKG9iamVjdCk7XHJcblxyXG4gICAgLy8gUmVtb3ZlIGxpZ2h0cyBmcm9tIHRoZSBjaGlsZHJlblxyXG4gICAgb2JqZWN0LmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGlmIChjIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICBvYmplY3QucmVtb3ZlKGMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChvYmplY3QpO1xyXG4gICAgdGhpcy5sb2FkZWRNb2RlbCA9IG9iamVjdDtcclxuICAgIHRoaXMuX2dldEJvdW5kaW5nQm94KG9iamVjdCk7XHJcbiAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEJvdW5kaW5nQm94KG9iamVjdDogT2JqZWN0M0QpIHtcclxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IEJveDMoKS5zZXRGcm9tT2JqZWN0KG9iamVjdCk7XHJcbiAgICB0aGlzLmJvdW5kaW5nQm94U2l6ZSA9IGJvdW5kaW5nQm94LmdldFNpemUobmV3IFZlY3RvcjMoKSk7XHJcblxyXG4gICAgdGhpcy5fc2V0TWVhc3VyZW1lbnRzKG9iamVjdCk7XHJcblxyXG4gICAgY29uc3QgbW9kZWxCb3hoZWxwZXIgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUoJ21vZGVsQm94aGVscGVyJyk7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5yZW1vdmUobW9kZWxCb3hoZWxwZXIpO1xyXG4gICAgY29uc3QgYm94SGVscGVyID0gbmV3IEJveEhlbHBlcihvYmplY3QpO1xyXG4gICAgYm94SGVscGVyLm1hdGVyaWFsLmNvbG9yLnNldCgweEZGMDBGRik7XHJcbiAgICBib3hIZWxwZXIubmFtZSA9ICdtb2RlbEJveGhlbHBlcic7XHJcbiAgICB0aGlzLnNjZW5lUHJldmlldy5hZGQoYm94SGVscGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGx5VHJhbnNmb3JtcyhvYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgb2JqZWN0LnRyYXZlcnNlKChjaGlsZCkgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQuaXNNZXNoICYmIGNoaWxkLmdlb21ldHJ5KSB7XHJcbiAgICAgICAgY2hpbGQudXBkYXRlTWF0cml4KCk7XHJcbiAgICAgICAgY2hpbGQuZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KGNoaWxkLm1hdHJpeCk7XHJcbiAgICAgICAgY2hpbGQucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIGNoaWxkLnJvdGF0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBjaGlsZC5zY2FsZS5zZXQoMSwgMSwgMSk7XHJcbiAgICAgICAgY2hpbGQudXBkYXRlTWF0cml4KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TWVhc3VyZW1lbnRzKG9iamVjdDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFsnSGVpZ2h0SGVscGVyJywgJ1dpZHRoSGVscGVyJywgJ0RlcHRoSGVscGVyJ107XHJcbiAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goZWxlbWVudE5hbWUgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSB0aGlzLnNjZW5lUHJldmlldy5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICB0aGlzLnNjZW5lUHJldmlldy5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBib3g6IEJveDMgPSBuZXcgQm94MygpLnNldEZyb21PYmplY3Qob2JqZWN0KTtcclxuICAgIGNvbnN0IGJvdW5kaW5nQm94OiBWZWN0b3IzID0gYm94LmdldFNpemUobmV3IFZlY3RvcjMoKSk7XHJcbiAgICBjb25zdCBoZWlnaHQ6IG51bWJlciA9IGJvdW5kaW5nQm94Lnk7XHJcbiAgICBjb25zdCB3aWR0aDogbnVtYmVyID0gYm91bmRpbmdCb3gueDtcclxuICAgIGNvbnN0IGRlcHRoOiBudW1iZXIgPSBib3VuZGluZ0JveC56O1xyXG4gICAgY29uc3QgZm9udDogRm9udCA9IHRoaXMuX2ZvbnRTZXJ2aWNlLm1vbm9zcGFjZUZvbnQ7XHJcblxyXG4gICAgbGV0IGhlaWdodExhYmVsVmFsdWU6IG51bWJlcjtcclxuICAgIGxldCB3aWR0aExhYmVsVmFsdWU6IG51bWJlcjtcclxuICAgIGxldCBkZXB0aExhYmVsVmFsdWU6IG51bWJlcjtcclxuICAgIC8vIGxhYmVscyBjbSBvZiBpbmNoXHJcbiAgICBpZiAodGhpcy51bml0c09mTWVhc3VyZW1lbnQgPT09ICdjbScpIHtcclxuICAgICAgaGVpZ2h0TGFiZWxWYWx1ZSA9IGhlaWdodCAqIDEwMDtcclxuICAgICAgd2lkdGhMYWJlbFZhbHVlID0gd2lkdGggKiAxMDA7XHJcbiAgICAgIGRlcHRoTGFiZWxWYWx1ZSA9IGRlcHRoICogMTAwO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzT2ZNZWFzdXJlbWVudCA9PT0gJ2luY2hlcycpIHtcclxuICAgICAgaGVpZ2h0TGFiZWxWYWx1ZSA9IGhlaWdodCAqIDM5LjM3O1xyXG4gICAgICB3aWR0aExhYmVsVmFsdWUgPSB3aWR0aCAqIDM5LjM3O1xyXG4gICAgICBkZXB0aExhYmVsVmFsdWUgPSBkZXB0aCAqIDM5LjM3O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdpZHRoTGFiZWwgPSB0aGlzLl9jcmVhdGUzRFRleHQoXHJcbiAgICAgIGBXaWR0aDogJHt3aWR0aExhYmVsVmFsdWUudG9GaXhlZCgwKX1gLFxyXG4gICAgICBib3guZ2V0Q2VudGVyKG5ldyBUSFJFRS5WZWN0b3IzKCkpLmFkZChuZXcgVEhSRUUuVmVjdG9yMygwLCAtaGVpZ2h0IC8gMiwgMCkpLFxyXG4gICAgICBmb250LFxyXG4gICAgICAnV2lkdGhIZWxwZXInXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0TGFiZWwgPSB0aGlzLl9jcmVhdGUzRFRleHQoXHJcbiAgICAgIGBIZWlnaHQ6ICR7aGVpZ2h0TGFiZWxWYWx1ZS50b0ZpeGVkKDApfWAsXHJcbiAgICAgIGJveC5nZXRDZW50ZXIobmV3IFRIUkVFLlZlY3RvcjMoKSkuYWRkKG5ldyBUSFJFRS5WZWN0b3IzKHdpZHRoIC8gMiArIDAuMSwgMCwgMCkpLFxyXG4gICAgICBmb250LFxyXG4gICAgICAnSGVpZ2h0SGVscGVyJ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGRlcHRoTGFiZWwgPSB0aGlzLl9jcmVhdGUzRFRleHQoXHJcbiAgICAgIGBEZXB0aDogJHtkZXB0aExhYmVsVmFsdWUudG9GaXhlZCgwKX1gLFxyXG4gICAgICBib3guZ2V0Q2VudGVyKG5ldyBUSFJFRS5WZWN0b3IzKCkpLmFkZChuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAtZGVwdGggLyAyIC0gMC4xKSksXHJcbiAgICAgIGZvbnQsXHJcbiAgICAgICdEZXB0aEhlbHBlcidcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKHdpZHRoTGFiZWwpO1xyXG4gICAgdGhpcy5zY2VuZVByZXZpZXcuYWRkKGhlaWdodExhYmVsKTtcclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChkZXB0aExhYmVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZTNEVGV4dCh0ZXh0OiBzdHJpbmcsIHBvc2l0aW9uOiBWZWN0b3IzLCBmb250OiBGb250LCBuYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRleHRHZW9tZXRyeTogVGV4dEdlb21ldHJ5ID0gbmV3IFRleHRHZW9tZXRyeSh0ZXh0LCB7XHJcbiAgICAgIGZvbnQ6IGZvbnQsXHJcbiAgICAgIHNpemU6IDAuMSxcclxuICAgICAgaGVpZ2h0OiAwLjAyLFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0ZXh0TWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjogMHhGRjAwRkZ9KTtcclxuICAgIGNvbnN0IHRleHRNZXNoOiBNZXNoID0gbmV3IE1lc2godGV4dEdlb21ldHJ5LCB0ZXh0TWF0ZXJpYWwpO1xyXG4gICAgdGV4dE1lc2gucG9zaXRpb24uY29weShwb3NpdGlvbik7XHJcbiAgICB0ZXh0TWVzaC5uYW1lID0gbmFtZTtcclxuICAgIHJldHVybiB0ZXh0TWVzaDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Jsb2JUb0FycmF5QnVmZmVyKGJsb2I6IEJsb2IpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChyZWFkZXIucmVzdWx0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdFcnJvciByZWFkaW5nIGJsb2IgYXMgQXJyYXlCdWZmZXInKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCBibG9iIGFzIEFycmF5QnVmZmVyJykpO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUxpZ2h0RnJvbVByb3BlcnRpZXMobGlnaHRQcm9wZXJ0aWVzOiBMaWdodFByb3BlcnRpZXMpIHtcclxuICAgIGNvbnN0IGxpZ2h0VHlwZTogTGlnaHRFbnVtID0gbGlnaHRQcm9wZXJ0aWVzLnR5cGU7XHJcbiAgICBjb25zdCBnZXRMaWdodHM6IExpZ2h0Q3JlYXRlU2VydmljZSA9IG5ldyBMaWdodENyZWF0ZVNlcnZpY2UoKTtcclxuICAgIGNvbnN0IGxpZ2h0OiBMaWdodCA9IGdldExpZ2h0cy5jcmVhdGVOZXdMaWdodChsaWdodFR5cGUpO1xyXG4gICAgbGlnaHQudXNlckRhdGEud2FsbE9mZnNldCA9IGxpZ2h0UHJvcGVydGllcy53YWxsT2Zmc2V0O1xyXG4gICAgbGlnaHQudXNlckRhdGEucm90YXRpb25PZmZzZXQgPSBsaWdodFByb3BlcnRpZXMucm90YXRpb25PZmZzZXQ7XHJcbiAgICBsaWdodC51c2VyRGF0YS50b3BEb3duRGlyZWN0aW9uYWwgPSBsaWdodFByb3BlcnRpZXMudG9wRG93bkRpcmVjdGlvbmFsO1xyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsaWdodFByb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKCFsaWdodC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdwb3NpdGlvbicpIHtcclxuICAgICAgICBsaWdodC5wb3NpdGlvbi55ID0gbGlnaHRQcm9wZXJ0aWVzLnBvc2l0aW9uLnk7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICdjb2xvcicpIHtcclxuICAgICAgICBsaWdodC5jb2xvciA9IG5ldyBDb2xvcihsaWdodFByb3BlcnRpZXMuY29sb3IpO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BlcnR5ID09PSAnZ3JvdW5kQ29sb3InKSB7XHJcbiAgICAgICAgKGxpZ2h0IGFzIGFueSkuZ3JvdW5kQ29sb3IgPSBuZXcgQ29sb3IobGlnaHRQcm9wZXJ0aWVzLmdyb3VuZENvbG9yKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZXRPYmplY3RQcm9wZXJ0aWVzKGxpZ2h0LCBwcm9wZXJ0eSwgbGlnaHRQcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2NlbmVQcmV2aWV3LmFkZChsaWdodCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRPYmplY3RQcm9wZXJ0aWVzKG9iamVjdDogTGlnaHQgfCBMaWdodFByb3BlcnRpZXMsIHByb3BlcnR5OiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ3NoYWRvdycpIHtcclxuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFvYmplY3RbcHJvcGVydHldLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XVtwcm9wXSA9IHZhbHVlW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmplY3RbcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGVPYmplY3RTdHJ1Y3R1cmUoaW5wdXRPYmplY3Q6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBtb2RlbEdyb3VwID0gaW5wdXRPYmplY3Q7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uOiBhbnlbXSA9IFtdO1xyXG4gICAgLy8gQ2hlY2sgZm9yIGEgZ3JvdXBcclxuICAgIGlmICghbW9kZWxHcm91cCB8fCAhKG1vZGVsR3JvdXAgaW5zdGFuY2VvZiBUSFJFRS5Hcm91cCkpIHtcclxuICAgICAgdmFsaWRhdGlvbi5wdXNoKCdQYXJzZXIgZGlkIG5vdCByZXR1cm4gYSB2YWxpZCBUSFJFRS5Hcm91cC4nKTtcclxuICAgIH1cclxuICAgIC8vIERvZXMgaXQgY29udGFpbiBtZXNoZXNcclxuICAgIGxldCBoYXNWaXNpYmxlTWVzaGVzID0gZmFsc2U7XHJcbiAgICBtb2RlbEdyb3VwLnRyYXZlcnNlKChvYmplY3Q6IGFueSkgPT4ge1xyXG4gICAgICBpZiAob2JqZWN0LmlzTWVzaCkge1xyXG4gICAgICAgIGhhc1Zpc2libGVNZXNoZXMgPSB0cnVlO1xyXG4gICAgICAgIC8vIGJhc2ljIGdlb21ldHJ5IGNoZWNrXHJcbiAgICAgICAgaWYgKCFvYmplY3QuZ2VvbWV0cnkpIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24ucHVzaCgpO1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5wdXNoKCdNZXNoICcgKyBvYmplY3QubmFtZSArICcgaGFzIG5vIGdlb21ldHJ5LicpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIW9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uIHx8IG9iamVjdC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLnB1c2goJ01lc2ggJyArIG9iamVjdC5uYW1lICsgJyBnZW9tZXRyeSBoYXMgbm8gcG9zaXRpb24gZGF0YS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QubWF0ZXJpYWwpIHtcclxuICAgICAgICAgIGlmIChvYmplY3QubWF0ZXJpYWwubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1hdCBvZiBvYmplY3QubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0ZU1hdGVyaWFsKG1hdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlTWF0ZXJpYWwob2JqZWN0Lm1hdGVyaWFsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGJhc2ljIG1hdHMgY2hlY2tcclxuICAgICAgICBpZiAoIW9iamVjdC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5wdXNoKCdNZXNoICcgKyBvYmplY3QubmFtZSArICcgaGFzIG5vIG1hdGVyaWFsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICghaGFzVmlzaWJsZU1lc2hlcykge1xyXG4gICAgICB2YWxpZGF0aW9uLnB1c2goJ01vZGVsIGNvbnRhaW5zIG5vIG1lc2hlcy4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBmb3IgYm91ZGluZ2JveCBpc3N1ZXNcclxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IFRIUkVFLkJveDMoKS5zZXRGcm9tT2JqZWN0KG1vZGVsR3JvdXApO1xyXG4gICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkge1xyXG4gICAgICBpZiAoaGFzVmlzaWJsZU1lc2hlcykge1xyXG4gICAgICAgIHZhbGlkYXRpb24ucHVzaCgnTW9kZWwgaGFzIGFuIGlzc3VlIHdpdGggdGhlIGJvdW5kaW5nYm94Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG1vZGVsR3JvdXAudHJhdmVyc2UoKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY2hpbGQuZ2VvbWV0cnkpIHtcclxuICAgICAgICAgIGNoaWxkLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZC5tYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgY2hpbGQubWF0ZXJpYWwuZm9yRWFjaChtID0+IG0uZGlzcG9zZSgpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsLmRpc3Bvc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGVNYXRlcmlhbChtYXRlcmlhbDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAobWF0ZXJpYWwubWFwICYmIG1hdGVyaWFsLm1hcC5zb3VyY2UgJiYgbWF0ZXJpYWwubWFwLnNvdXJjZS5kYXRhID09PSBudWxsKSB7XHJcbiAgICAgIG1hdGVyaWFsLm1hcC5kaXNwb3NlKCk7XHJcbiAgICAgIG1hdGVyaWFsLm1hcCA9IG51bGw7XHJcbiAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|