@libs-ui/components-draw-line 0.2.10-6.2 → 0.2.30-6.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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, NgZone, Output, inject } from "@angular/core";
|
|
2
|
-
import { checkMouseOverInContainer, cloneDeep, get } from "@libs-ui/utils";
|
|
3
|
-
import { Subject,
|
|
2
|
+
import { checkMouseOverInContainer, cloneDeep, get, getDragEventByElement } from "@libs-ui/utils";
|
|
3
|
+
import { Subject, takeUntil, tap } from "rxjs";
|
|
4
4
|
import { MoCanvasConnectNavigationNewElementUtil } from "./util/connect-navigation-new-element.util";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export * from "./draw-line.interface";
|
|
@@ -391,7 +391,7 @@ export class LibsUiComponentsDrawLineDirective {
|
|
|
391
391
|
`;
|
|
392
392
|
return;
|
|
393
393
|
}
|
|
394
|
-
dString = `${dString}${key.replace(/\d/g, '')}${data
|
|
394
|
+
dString = `${dString}${key.replace(/\d/g, '')}${data?.x},${data?.y}
|
|
395
395
|
`;
|
|
396
396
|
});
|
|
397
397
|
return dString;
|
|
@@ -482,19 +482,12 @@ export class LibsUiComponentsDrawLineDirective {
|
|
|
482
482
|
return;
|
|
483
483
|
}
|
|
484
484
|
points.initialized = true;
|
|
485
|
-
const
|
|
486
|
-
mouseEvent.preventDefault();
|
|
487
|
-
mouseEvent.stopPropagation();
|
|
488
|
-
};
|
|
489
|
-
const documentMouseUp = fromEvent(document, 'mouseup')
|
|
490
|
-
.pipe(tap((eventMouseUp) => {
|
|
491
|
-
stopEventMouse(eventMouseUp);
|
|
485
|
+
const functionMouseUp = (mouseEvent) => {
|
|
492
486
|
if (preEvent) {
|
|
493
487
|
preEvent = undefined;
|
|
494
|
-
this.onDrawLineEnd.next({ dataLine: data, event:
|
|
488
|
+
this.onDrawLineEnd.next({ dataLine: data, event: mouseEvent });
|
|
495
489
|
}
|
|
496
|
-
}
|
|
497
|
-
const documentMouseMove = fromEvent(document, 'mousemove').pipe(tap((eventMousemove) => stopEventMouse(eventMousemove)), takeUntil((documentMouseUp)), takeUntil(points.onDestroyEvent), takeUntil(this.onDestroy));
|
|
490
|
+
};
|
|
498
491
|
const handlerDrag = (dragMouseEvent) => {
|
|
499
492
|
if (!preEvent) {
|
|
500
493
|
preEvent = dragMouseEvent;
|
|
@@ -514,18 +507,18 @@ export class LibsUiComponentsDrawLineDirective {
|
|
|
514
507
|
this.updateViewBox();
|
|
515
508
|
};
|
|
516
509
|
if (points.arrowElement) {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
510
|
+
getDragEventByElement({
|
|
511
|
+
elementMouseDown: points.arrowElement,
|
|
512
|
+
functionMouseUp: functionMouseUp,
|
|
513
|
+
onDestroy: this.onDestroy
|
|
514
|
+
}).pipe(tap(handlerDrag), takeUntil(points.onDestroyEvent)).subscribe();
|
|
522
515
|
}
|
|
523
516
|
if (points.circleEndElement) {
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
517
|
+
getDragEventByElement({
|
|
518
|
+
elementMouseDown: points.circleEndElement,
|
|
519
|
+
functionMouseUp: functionMouseUp,
|
|
520
|
+
onDestroy: this.onDestroy,
|
|
521
|
+
}).pipe(tap(handlerDrag), takeUntil(points.onDestroyEvent)).subscribe();
|
|
529
522
|
}
|
|
530
523
|
}
|
|
531
524
|
checkPointIncludeRect(point, obstacleRect) {
|
|
@@ -647,4 +640,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
647
640
|
}], outConnected: [{
|
|
648
641
|
type: Output
|
|
649
642
|
}] } });
|
|
650
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1saW5lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmF3LWxpbmUvc3JjL2RyYXctbGluZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQWMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0YsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBRXJHLGNBQWMsdUJBQXVCLENBQUM7QUFNdEMsTUFBTSxPQUFPLGlDQUFpQztJQUNsQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDaEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLHVCQUF1QixDQUFVO0lBQ25DLFFBQVEsR0FBOEIsRUFBRSxDQUFDO0lBQ3pDLHVCQUF1QixHQUFnQyxFQUFFLENBQUM7SUFDMUQsYUFBYSxHQUdoQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ1gsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFL0IsYUFBYSxDQUFrQjtJQUMvQixVQUFVLENBQWlCO0lBQzNCLGFBQWEsQ0FBVztJQUV2QiwwQkFBMEIsR0FBNkMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMxRixZQUFZ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QztRQUNoRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBd0IsRUFBRSxNQUFlO1FBQ2pFLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2UCxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEssQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQXdCLEVBQUUsTUFBZTtRQUNyRSxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFMUQsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNJLENBQUM7SUFFTyx1Q0FBdUMsQ0FBQyxLQUF3QixFQUFFLE1BQWUsRUFBRSxhQUFxQixFQUFFLEtBQWEsRUFBRSxJQUFlO1FBQzlJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTdCLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyTSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQzVGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDdkMsS0FBSyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4SSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRU8scUNBQXFDLENBQUMsS0FBd0IsRUFBRSxNQUFlLEVBQUUsYUFBcUIsRUFBRSxLQUFhLEVBQUUsSUFBZTtRQUM1SSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3QixLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdkIsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNuRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2SyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxLQUFLLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVHLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxVQUE2QjtRQUMxRCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUV0QyxPQUFPLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzNJLENBQUM7Z0JBRUYsT0FBTztZQUNULENBQUM7WUFDRCxPQUFPLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztPQUMvRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBZSxFQUFFLElBQWUsRUFBRSxJQUF3QjtRQUNqRixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDakQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRztZQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksU0FBUztZQUN4QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksTUFBTTtZQUN6QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLElBQUksR0FBRztZQUNoRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksQ0FBQztZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQztTQUNyQyxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBSXRGLFFBQVEsU0FBUyxFQUFFLENBQUM7WUFDbEIsS0FBSyxPQUFPO2dCQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzdELFFBQVEsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxZQUFZLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDM0wsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM3RCxRQUFRLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsWUFBWSxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzNMLE1BQU07WUFFUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDN0QsUUFBUSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELFlBQVksRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzTCxNQUFNO1lBRVIsS0FBSyxRQUFRO2dCQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzdELFFBQVEsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxZQUFZLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0wsTUFBTTtRQUNWLENBQUM7UUFFRCxZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsWUFBWSxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELFlBQVksRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU8scUJBQXFCLENBQUMsYUFBK0IsRUFBRSxJQUFZLEVBQUUsS0FBK0IsRUFBRSxXQUEwQjtRQUN0SSxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxXQUFXLEVBQUUsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEUsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxXQUFXLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEVBQUUsV0FBVyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbkYsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFlLEVBQUUsWUFBcUU7UUFDekcsSUFBSSxVQUFVLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVyQyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbEgsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3RFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRXBFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xGLE9BQU8sY0FBYyxDQUFDO1lBQ3hCLENBQUM7WUFFRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsUUFBUSxZQUFZLEVBQUUsQ0FBQztZQUNyQixLQUFLLGFBQWE7Z0JBQ2hCLE9BQU8sY0FBYyxDQUFDO1lBRXhCLEtBQUssWUFBWTtnQkFDZixPQUFPLGNBQWMsQ0FBQztZQUV4QixLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxZQUFZLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsSUFBd0I7UUFDeEMsTUFBTSxNQUFNLEdBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLFFBQVEsR0FBMkIsU0FBUyxDQUFDO1FBRWpELElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZHLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxVQUFzQixFQUFFLEVBQUU7WUFDaEQsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQWEsUUFBUSxFQUFFLFNBQVMsQ0FBQzthQUMvRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDbkIsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdCLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsUUFBUSxHQUFHLFNBQVMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1FBQ0osTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQWEsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaE8sTUFBTSxXQUFXLEdBQUcsQ0FBQyxjQUEwQixFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLFFBQVEsR0FBRyxjQUFjLENBQUM7WUFDNUIsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdkMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQzVELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUU1RCxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUU1SSxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixNQUFNLHFCQUFxQixHQUFHLFNBQVMsQ0FBYSxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDeEYsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNuQixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFakMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFzQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQTJCLENBQUM7WUFFOUosU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUcsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDNUIsTUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQWEsTUFBTSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDN0YsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNuQixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFakMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sVUFBVSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFzQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQTJCLENBQUM7WUFFaEssVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUErQixFQUFFLFlBQW1CO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVyQixZQUFZLEdBQUc7WUFDYixDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsSUFBSSxVQUFVLENBQUM7WUFDakUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLElBQUksVUFBVSxDQUFDO1lBQ2pFLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDN0UsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQztTQUNoRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwSyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxJQUFZO1FBQzVDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4RixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUYsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTFGLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJDLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLENBQUM7SUFDN0UsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFZLEVBQUUsS0FBK0I7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFaEYsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLDhDQUE4QyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBWSxFQUFFLElBQVc7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRixXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRCxXQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFekMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDekYsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVPLCtCQUErQixDQUFDLElBQXdCLEVBQUUsTUFBZSxFQUFFLElBQWdCO1FBQ2pHLElBQUksS0FBSyxHQUFHLEVBQXVCLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxJQUFJLEVBQUU7U0FDbkQsQ0FBQztRQUVGLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBRTNDLElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxDQUFDO1FBQzFCLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BCLGFBQWEsR0FBRyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxVQUFVLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXRDLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLEdBQUcsRUFBdUIsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUMsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV4RixhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNyQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUVyQixJQUFJLENBQUMsdUNBQXVDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWhHLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBL3ZCVSxpQ0FBaUM7NEZBQWpDLGlDQUFpQzs7NEZBQWpDLGlDQUFpQztrQkFMN0MsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxxQ0FBcUM7b0JBQy9DLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFjVSxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFSSwwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPdXRwdXQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyLCBjbG9uZURlZXAsIGdldCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZU1hcCwgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJQXR0cmlidXRlRE9uUGF0aCwgSUNpcmNsZVN0eWxlLCBJRHJhd0xpbmVEYXRhSW5wdXQsIElNb0RyYXdMaW5lRnVuY3Rpb25Db250cm9sLCBJUG9pbnQsIElQb2ludHMsIElSZWFjaGFibGVQb2ludFJhbmdlLCBJUmVjdCwgSVZpZXdCb3hDb25maWcsIFRZUEVfRElSRUNUSU9OLCBUWVBFX01PREUgfSBmcm9tIFwiLi9kcmF3LWxpbmUuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBNb0NhbnZhc0Nvbm5lY3ROYXZpZ2F0aW9uTmV3RWxlbWVudFV0aWwgfSBmcm9tIFwiLi91dGlsL2Nvbm5lY3QtbmF2aWdhdGlvbi1uZXctZWxlbWVudC51dGlsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2RyYXctbGluZS5pbnRlcmZhY2VcIjtcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogXCJbTGlic1VpQ29tcG9uZW50c0RyYXdMaW5lRGlyZWN0aXZlXVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzRHJhd0xpbmVEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJvdGVjdGVkIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByb3RlY3RlZCBpbnRlcnZhbFNjcm9sbFRvRWxlbWVudD86IG51bWJlcjtcbiAgcHJpdmF0ZSBkYXRhRHJhdzogQXJyYXk8SURyYXdMaW5lRGF0YUlucHV0PiA9IFtdO1xuICBwcml2YXRlIGRhdGFSZWFjaGFibGVQb2ludFJhbmdlOiBBcnJheTxJUmVhY2hhYmxlUG9pbnRSYW5nZT4gPSBbXTtcbiAgcHJpdmF0ZSBvbkRyYXdMaW5lRW5kOiBTdWJqZWN0PHtcbiAgICBkYXRhTGluZTogSURyYXdMaW5lRGF0YUlucHV0LFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50XG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgpIHZpZXdCb3hDb25maWc/OiBJVmlld0JveENvbmZpZztcbiAgQElucHV0KCkgc3ZnRWxlbWVudCE6IFNWR1NWR0VsZW1lbnQ7XG4gIEBJbnB1dCgpIGRyYXdSZWN0RGVidWc/OiBib29sZWFuO1xuXG4gIEBPdXRwdXQoKSBvdXREcmF3TGluZUZ1bmN0aW9uQ29udHJvbDogRXZlbnRFbWl0dGVyPElNb0RyYXdMaW5lRnVuY3Rpb25Db250cm9sPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG91dENvbm5lY3RlZDogRXZlbnRFbWl0dGVyPHsgZGF0YUxpbmU6IElEcmF3TGluZURhdGFJbnB1dCwgZGF0YVJlYWNoYWJsZVBvaW50UmFuZ2U6IElSZWFjaGFibGVQb2ludFJhbmdlIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3ZnRWxlbWVudCA9IHRoaXMuc3ZnRWxlbWVudCB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKTtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmQodGhpcy5zdmdFbGVtZW50KTtcbiAgICB0aGlzLm91dERyYXdMaW5lRnVuY3Rpb25Db250cm9sLmVtaXQoe1xuICAgICAgc2V0RGF0YTogdGhpcy5zZXREYXRhLmJpbmQodGhpcyksXG4gICAgICBzZXRSZWFjaGFibGVQb2ludFJhbmdlOiB0aGlzLnNldFJlYWNoYWJsZVBvaW50UmFuZ2UuYmluZCh0aGlzKSxcbiAgICAgIHJlbW92ZUxpbmU6IHRoaXMucmVtb3ZlTGluZS5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlUmVhY2hhYmxlUG9pbnRSYW5nZTogdGhpcy5yZW1vdmVSZWFjaGFibGVQb2ludFJhbmdlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVWaWV3Qm94OiB0aGlzLnVwZGF0ZVZpZXdCb3guYmluZCh0aGlzKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXRhKGRhdGE6IEFycmF5PElEcmF3TGluZURhdGFJbnB1dD4pIHtcbiAgICBjb25zdCBuZXdEYXRhOiBBcnJheTxJRHJhd0xpbmVEYXRhSW5wdXQ+ID0gW107XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhRHJhdy5maW5kKGRhdGFEcmF3ID0+IGRhdGFEcmF3LmlkID09PSBpdGVtLmlkICYmIGl0ZW0ucG9pbnRzLnN0YXJ0LnggPT09IGRhdGFEcmF3LnBvaW50cy5zdGFydC54ICYmIGl0ZW0ucG9pbnRzLnN0YXJ0LnkgPT09IGRhdGFEcmF3LnBvaW50cy5zdGFydC55ICYmIGl0ZW0ucG9pbnRzLmVuZC54ID09PSBkYXRhRHJhdy5wb2ludHMuZW5kLnggJiYgaXRlbS5wb2ludHMuZW5kLnkgPT09IGRhdGFEcmF3LnBvaW50cy5lbmQueSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbUNsb25lID0gY2xvbmVEZWVwKGl0ZW0pO1xuXG4gICAgICBpdGVtQ2xvbmUucmVmID0gaXRlbTtcbiAgICAgIG5ld0RhdGEucHVzaChpdGVtQ2xvbmUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhRHJhdy5wdXNoKC4uLm5ld0RhdGEpO1xuICAgIHRoaXMuc3RhcnRQcm9jZXNzRGF0YVJvdyhuZXdEYXRhKTtcbiAgfVxuXG5cbiAgc2V0UmVhY2hhYmxlUG9pbnRSYW5nZShkYXRhOiBBcnJheTxJUmVhY2hhYmxlUG9pbnRSYW5nZT4pIHtcbiAgICBjb25zdCBuZXdEYXRhOiBBcnJheTxJUmVhY2hhYmxlUG9pbnRSYW5nZT4gPSBbXTtcblxuICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFSZWFjaGFibGVQb2ludFJhbmdlLmZpbmQoZGF0YURyYXcgPT4gZGF0YURyYXcuaWQgPT09IGl0ZW0uaWQgfHwgaXRlbS54ID09PSBkYXRhRHJhdy54ICYmIGl0ZW0ueSA9PT0gZGF0YURyYXcueSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbUNsb25lID0gY2xvbmVEZWVwKGl0ZW0pO1xuXG4gICAgICBpdGVtQ2xvbmUucmVmID0gaXRlbTtcbiAgICAgIG5ld0RhdGEucHVzaChpdGVtQ2xvbmUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhUmVhY2hhYmxlUG9pbnRSYW5nZS5wdXNoKC4uLm5ld0RhdGEpO1xuICAgIHRoaXMuc3RhcnRQcm9jZXNzRGF0YVJlYWNoYWJsZVBvaW50UmFuZ2UobmV3RGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpbmUoaWQ6IHN0cmluZywgcG9pbnRzPzogQXJyYXk8SVBvaW50cz4pIHtcbiAgICBjb25zdCBkYXRhRHJhd0J5SWQgPSB0aGlzLmRhdGFEcmF3LmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgPT09IGlkKTtcblxuICAgIGlmICghZGF0YURyYXdCeUlkPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVCeUl0ZW0gPSAoaXRlbTogSURyYXdMaW5lRGF0YUlucHV0KSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZUVsZW1lbnRPZlBvaW50cyhpdGVtLnBvaW50cyk7XG4gICAgICBpdGVtLnBvaW50cy5zZXBhcmF0ZWRQb2ludHM/LmZvckVhY2goc2VwYXJhdGVkUG9pbnRzID0+IHRoaXMucmVtb3ZlRWxlbWVudE9mUG9pbnRzKHNlcGFyYXRlZFBvaW50cykpO1xuXG4gICAgfTtcblxuICAgIGlmICghcG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgIGRhdGFEcmF3QnlJZC5mb3JFYWNoKGl0ZW0gPT4gcmVtb3ZlQnlJdGVtKGl0ZW0pKTtcbiAgICAgIHRoaXMuZGF0YURyYXcgPSB0aGlzLmRhdGFEcmF3LmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkKTtcbiAgICAgIHRoaXMudXBkYXRlVmlld0JveCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcG9pbnRzLmZvckVhY2gocG9pbnQgPT4ge1xuICAgICAgY29uc3QgZGF0YURyYXdSZW1vdmVCeVBvaW50ID0gZGF0YURyYXdCeUlkLmZpbmQoaXRlbSA9PiBpdGVtLnBvaW50cy5zdGFydC54ID09PSBwb2ludC5zdGFydC54ICYmIGl0ZW0ucG9pbnRzLnN0YXJ0LnkgPT09IHBvaW50LnN0YXJ0LnkgJiYgaXRlbS5wb2ludHMuZW5kLnggPT09IHBvaW50LmVuZC54ICYmIGl0ZW0ucG9pbnRzLmVuZC55ID09PSBwb2ludC5lbmQueSk7XG5cbiAgICAgIGlmIChkYXRhRHJhd1JlbW92ZUJ5UG9pbnQpIHtcbiAgICAgICAgZGF0YURyYXdSZW1vdmVCeVBvaW50LmlzUmVtb3ZlID0gdHJ1ZTtcbiAgICAgICAgcmVtb3ZlQnlJdGVtKGRhdGFEcmF3UmVtb3ZlQnlQb2ludCk7XG4gICAgICAgIHRoaXMuZGF0YURyYXcgPSB0aGlzLmRhdGFEcmF3LmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkICYmICFpdGVtLmlzUmVtb3ZlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVZpZXdCb3goKTtcblxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZWFjaGFibGVQb2ludFJhbmdlKGlkczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuY2xlYXJSZWN0KCk7XG4gICAgaWYgKCFpZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgY29uc3QgaXRlbVJlbW92ZSA9IHRoaXMuZGF0YVJlYWNoYWJsZVBvaW50UmFuZ2U/LmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBpZCk7XG5cbiAgICAgIGlmICghaXRlbVJlbW92ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVtUmVtb3ZlLm9uRGVzdHJveUV2ZW50Py5uZXh0KCk7XG4gICAgICBpdGVtUmVtb3ZlLmVsZW1lbnQ/LnJlbW92ZSgpO1xuICAgICAgdGhpcy5kYXRhUmVhY2hhYmxlUG9pbnRSYW5nZSA9IHRoaXMuZGF0YVJlYWNoYWJsZVBvaW50UmFuZ2U/LmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRQcm9jZXNzRGF0YVJvdyhkYXRhRHJhdzogQXJyYXk8SURyYXdMaW5lRGF0YUlucHV0Pikge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBkYXRhRHJhdy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB7IHBhdGhFbGVtZW50LCBhcnJvd0VsZW1lbnQsIGNpcmNsZVN0YXJ0RWxlbWVudCwgY2lyY2xlRW5kRWxlbWVudCB9ID0gdGhpcy5jcmVhdGVQYXRoQW5kQXJyb3dFbGVtZW50KGl0ZW0uaWQpO1xuXG4gICAgICAgIGl0ZW0ucG9pbnRzLm9ic3RhY2xlUmVjdD8uZm9yRWFjaChkYXRhID0+IHRoaXMuYWRkUmVjdCgncmVjdCcsIGRhdGEpKTtcbiAgICAgICAgaXRlbS5wb2ludHMucGF0aEVsZW1lbnQgPSBwYXRoRWxlbWVudDtcbiAgICAgICAgaXRlbS5wb2ludHMuYXJyb3dFbGVtZW50ID0gYXJyb3dFbGVtZW50O1xuICAgICAgICBpZiAoaXRlbS5zdGFydENpcmNsZSkge1xuICAgICAgICAgIGl0ZW0ucG9pbnRzLmNpcmNsZVN0YXJ0RWxlbWVudCA9IGNpcmNsZVN0YXJ0RWxlbWVudDtcbiAgICAgICAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kKGNpcmNsZVN0YXJ0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uZW5kQ2lyY2xlKSB7XG4gICAgICAgICAgaXRlbS5wb2ludHMuY2lyY2xlRW5kRWxlbWVudCA9IGNpcmNsZUVuZEVsZW1lbnQ7XG4gICAgICAgICAgdGhpcy5zdmdFbGVtZW50LmFwcGVuZChjaXJjbGVFbmRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtLnBvaW50cy5vbkRlc3Ryb3lFdmVudCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuZHJhd0xpbmUoaXRlbSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlVmlld0JveCgpO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc3RhcnRQcm9jZXNzRGF0YVJlYWNoYWJsZVBvaW50UmFuZ2UoZGF0YTogQXJyYXk8SVJlYWNoYWJsZVBvaW50UmFuZ2U+KSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5vbkRlc3Ryb3lFdmVudCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIGl0ZW0uZWxlbWVudCA9IHRoaXMuY3JlYXRlUGF0aEFuZEFycm93RWxlbWVudChpdGVtLmlkKS5jaXJjbGVFbmRFbGVtZW50O1xuICAgICAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kKGl0ZW0uZWxlbWVudCk7XG4gICAgICAgIHRoaXMudXBkYXRlQXR0cmlidXRlQ2lyY2xlKGl0ZW0uZWxlbWVudCwgaXRlbS5pZCwgaXRlbSwgaXRlbS5zdHlsZSk7XG4gICAgICAgIHRoaXMub25EcmF3TGluZUVuZC5waXBlKHRha2VVbnRpbChpdGVtLm9uRGVzdHJveUV2ZW50KSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKGV2ZW50RGF0YSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBkYXRhTGluZSwgZXZlbnQgfSA9IGV2ZW50RGF0YTtcblxuICAgICAgICAgIGlmICghY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihldmVudCwgaXRlbS5lbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQpIHx8ICFkYXRhTGluZS5yZWYgfHwgIWl0ZW0ucmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXRlbS5pZENvbm5lY3RlZCA9IGV2ZW50RGF0YS5kYXRhTGluZS5pZDtcbiAgICAgICAgICBldmVudERhdGEuZGF0YUxpbmUuaWRDb25uZWN0ZWQgPSBpdGVtLmlkO1xuICAgICAgICAgIHRoaXMub3V0Q29ubmVjdGVkLmVtaXQoe1xuICAgICAgICAgICAgZGF0YUxpbmU6IGRhdGFMaW5lLnJlZixcbiAgICAgICAgICAgIGRhdGFSZWFjaGFibGVQb2ludFJhbmdlOiBpdGVtLnJlZlxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3Qm94KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUVsZW1lbnRPZlBvaW50cyhwb2ludHM6IElQb2ludHMpIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgcG9pbnRzLm9uRGVzdHJveUV2ZW50Py5uZXh0KCk7XG4gICAgICBwb2ludHMub25EZXN0cm95RXZlbnQ/LmNvbXBsZXRlKCk7XG4gICAgICBwb2ludHM/LnBhdGhFbGVtZW50Py5yZW1vdmUoKTtcbiAgICAgIHBvaW50cz8uYXJyb3dFbGVtZW50Py5yZW1vdmUoKTtcbiAgICAgIHBvaW50cz8uY2lyY2xlU3RhcnRFbGVtZW50Py5yZW1vdmUoKTtcbiAgICAgIHBvaW50cy5jaXJjbGVFbmRFbGVtZW50Py5yZW1vdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd0xpbmUoZGF0YTogSURyYXdMaW5lRGF0YUlucHV0KSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgcG9pbnRzLCBtb2RlIH0gPSBkYXRhO1xuICAgICAgbGV0IHsgY3VydmUgfSA9IGRhdGE/LmxpbmVTdHlsZSB8fCB7fTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdxdWFydC1pbicpIHtcbiAgICAgICAgY3VydmUgPSBjdXJ2ZSA/PyAxMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByZUxlbmd0aFNlcGFyYXRlZFBvaW50cyA9IHBvaW50cy5zZXBhcmF0ZWRQb2ludHM/Lmxlbmd0aDtcblxuICAgICAgcG9pbnRzLnNlcGFyYXRlZFBvaW50cz8uZm9yRWFjaChzZXBhcmF0ZWRQb2ludHMgPT4gdGhpcy5yZW1vdmVFbGVtZW50T2ZQb2ludHMoc2VwYXJhdGVkUG9pbnRzKSk7XG4gICAgICBwb2ludHMuc2VwYXJhdGVkUG9pbnRzID0gW107XG4gICAgICBNb0NhbnZhc0Nvbm5lY3ROYXZpZ2F0aW9uTmV3RWxlbWVudFV0aWwuU1RBUlRfTU9ERSA9ICdyaWdodC1sZWZ0JztcbiAgICAgIGlmIChkYXRhLnN0YXJ0RW5kTW9kZSkge1xuICAgICAgICBNb0NhbnZhc0Nvbm5lY3ROYXZpZ2F0aW9uTmV3RWxlbWVudFV0aWwuU1RBUlRfTU9ERSA9IGRhdGEuc3RhcnRFbmRNb2RlO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxjdWxhdG9yU2VwYXJhdGVkUG9pbnRzKGRhdGEuaWQsIHBvaW50cywgY3VydmUgfHwgMTAsIHBvaW50cy5zZXBhcmF0ZWRQb2ludHMsIHBvaW50cy5vYnN0YWNsZVJlY3QgfHwgW10pO1xuICAgICAgaWYgKCFwcmVMZW5ndGhTZXBhcmF0ZWRQb2ludHMgJiYgcG9pbnRzLnNlcGFyYXRlZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50T2ZQb2ludHMocG9pbnRzKTtcbiAgICAgICAgY29uc3QgeyBwYXRoRWxlbWVudCwgYXJyb3dFbGVtZW50IH0gPSB0aGlzLmNyZWF0ZVBhdGhBbmRBcnJvd0VsZW1lbnQoZGF0YS5pZCk7XG5cbiAgICAgICAgcG9pbnRzLnBhdGhFbGVtZW50ID0gcGF0aEVsZW1lbnQ7XG4gICAgICAgIHBvaW50cy5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gICAgICAgIHBvaW50cy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFwb2ludHMuc2VwYXJhdGVkUG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5idWlsZFBhdGhBbmREcmF3KGRhdGEsIHBvaW50cywgbW9kZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGF0aCA9ICcnO1xuXG4gICAgICBwb2ludHMuc2VwYXJhdGVkUG9pbnRzLmZvckVhY2goc2VwYXJhdGVkUG9pbnRzID0+IHtcbiAgICAgICAgcGF0aCArPSB0aGlzLmJ1aWxkUGF0aEFuZERyYXdTZXBhcmF0ZWRQb2ludHMoZGF0YSwgc2VwYXJhdGVkUG9pbnRzLCBzZXBhcmF0ZWRQb2ludHMubW9kZSB8fCBtb2RlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInBhdGhcIik7XG5cbiAgICAgIHRoaXMuc3ZnRWxlbWVudC5hcHBlbmQocGF0aEVsZW1lbnQpO1xuICAgICAgcG9pbnRzLnBhdGhFbGVtZW50ID0gcGF0aEVsZW1lbnQ7XG4gICAgICBjb25zdCBzdHlsZUNvbmZpZyA9IHtcbiAgICAgICAgc3Ryb2tlOiBkYXRhLmxpbmVTdHlsZT8uc3Ryb2tlID8/ICcjOUNBMkFEJyxcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBkYXRhLmxpbmVTdHlsZT8uc3Ryb2tlRGFzaGFycmF5LFxuICAgICAgICBzdHJva2VXaWR0aDogZGF0YS5saW5lU3R5bGU/LnN0cm9rZVdpZHRoID8/ICcxcHgnLFxuICAgICAgICBmaWxsOiBkYXRhLmxpbmVTdHlsZT8uZmlsbCA/PyAnbm9uZScsXG4gICAgICAgIGN1cnZlOiBkYXRhLmxpbmVTdHlsZT8uY3VydmUgPz8gMTAsXG4gICAgICAgIGRpc3RhbmNlUG9pbnQ6IGRhdGEubGluZVN0eWxlPy5kaXN0YW5jZVBvaW50ID8/IDEwXG4gICAgICB9O1xuXG4gICAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgc3R5bGVDb25maWcuc3Ryb2tlKTtcbiAgICAgIHBvaW50cy5wYXRoRWxlbWVudD8uc2V0QXR0cmlidXRlKCdmaWxsJywgc3R5bGVDb25maWcuZmlsbCk7XG4gICAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgc3R5bGVDb25maWcuc3Ryb2tlV2lkdGgpO1xuICAgICAgaWYgKHN0eWxlQ29uZmlnLnN0cm9rZURhc2hhcnJheSkge1xuICAgICAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsIHN0eWxlQ29uZmlnLnN0cm9rZURhc2hhcnJheSlcbiAgICAgIH1cbiAgICAgIHBvaW50cy5wYXRoRWxlbWVudD8uc2V0QXR0cmlidXRlKCdkJywgcGF0aCk7XG4gICAgICB0aGlzLmRyYXdSZWN0QW5kSW5pdEV2ZW50KGRhdGEsIG1vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaWV3Qm94KHZpZXdCb3hDb25maWc/OiBJVmlld0JveENvbmZpZykge1xuICAgIGlmICh2aWV3Qm94Q29uZmlnKSB7XG4gICAgICB0aGlzLnZpZXdCb3hDb25maWcgPSB2aWV3Qm94Q29uZmlnO1xuICAgIH1cbiAgICBjb25zdCB4UG9pbnRzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoWzBdKTtcbiAgICBjb25zdCB5UG9pbnRzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoWzBdKTtcblxuICAgIGNvbnN0IGFkZFBvaW50cyA9IChwb2ludHM6IElQb2ludHMpID0+IHtcbiAgICAgIHhQb2ludHMuYWRkKHBvaW50cy5zdGFydC54KTtcbiAgICAgIHhQb2ludHMuYWRkKHBvaW50cy5lbmQueCk7XG4gICAgICB5UG9pbnRzLmFkZChwb2ludHMuc3RhcnQueSk7XG4gICAgICB5UG9pbnRzLmFkZChwb2ludHMuZW5kLnkpO1xuICAgIH07XG5cbiAgICB0aGlzLmRhdGFEcmF3Py5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgcG9pbnRzID0gaXRlbS5wb2ludHM7XG5cbiAgICAgIGFkZFBvaW50cyhwb2ludHMpO1xuICAgICAgcG9pbnRzLnNlcGFyYXRlZFBvaW50cz8uZm9yRWFjaChzZXBhcmF0ZWRQb2ludHMgPT4gYWRkUG9pbnRzKHNlcGFyYXRlZFBvaW50cykpO1xuICAgICAgcG9pbnRzLm9ic3RhY2xlUmVjdD8uZm9yRWFjaChvYnN0YWNsZVJlY3QgPT4ge1xuICAgICAgICBhZGRQb2ludHMoe1xuICAgICAgICAgIHN0YXJ0OiB7IHg6IG9ic3RhY2xlUmVjdC54IC0gKG9ic3RhY2xlUmVjdC5nYXBYT2JzdGFjbGVSZWN0IHx8IDgpLCB5OiBvYnN0YWNsZVJlY3QueSAtIChvYnN0YWNsZVJlY3QuZ2FwWU9ic3RhY2xlUmVjdCB8fCA4KSB9LFxuICAgICAgICAgIGVuZDogeyB4OiBvYnN0YWNsZVJlY3QueCArIG9ic3RhY2xlUmVjdC53aWR0aCArIChvYnN0YWNsZVJlY3QuZ2FwWE9ic3RhY2xlUmVjdCB8fCA4KSAqIDIsIHk6IG9ic3RhY2xlUmVjdC55ICsgb2JzdGFjbGVSZWN0LmhlaWdodCArIChvYnN0YWNsZVJlY3QuZ2FwWU9ic3RhY2xlUmVjdCB8fCA4KSAqIDIgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgeE1heCA9IHRoaXMudmlld0JveENvbmZpZz8ud2lkdGggPz8gKHhQb2ludHMuc2l6ZSA/IE1hdGgubWF4KC4uLnhQb2ludHMpIDogMCkgKyAxNDtcbiAgICBjb25zdCB5TWF4ID0gdGhpcy52aWV3Qm94Q29uZmlnPy5oZWlnaHQgPz8gKHlQb2ludHMuc2l6ZSA/IE1hdGgubWF4KC4uLnlQb2ludHMpIDogMCkgKyAxNDtcblxuICAgIGlmICghdGhpcy52aWV3Qm94Q29uZmlnPy5pZ25vcmVWaWV3Qm94KSB7XG4gICAgICBjb25zdCByZWN0U3ZnRWxlbWVudCA9IHRoaXMuc3ZnRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgdGhpcy5zdmdFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCBgJHt0aGlzLnZpZXdCb3hDb25maWc/Lm1pblggPz8gcmVjdFN2Z0VsZW1lbnQueH0gJHt0aGlzLnZpZXdCb3hDb25maWc/Lm1pblkgPz8gcmVjdFN2Z0VsZW1lbnQueX0gJHt4TWF4fSAke3lNYXh9YCk7XG4gICAgfVxuICAgIHRoaXMuc3ZnRWxlbWVudD8uc2V0QXR0cmlidXRlKCd3aWR0aCcsIGAke3hNYXggPz8gMH1gKTtcbiAgICB0aGlzLnN2Z0VsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7eU1heCA/PyAwfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BvaW50SW5zaWRlU3F1YXJlKHBvaW50OiBJUG9pbnQsIHNxdWFyZTogSVJlY3QpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IHBvaW50O1xuICAgIGNvbnN0IHsgeDogc3F1YXJlWCwgeTogc3F1YXJlWSwgd2lkdGgsIGhlaWdodCB9ID0gc3F1YXJlO1xuXG4gICAgcmV0dXJuIHggPj0gc3F1YXJlWCAmJiB4IDw9IHNxdWFyZVggKyB3aWR0aCAmJiB5ID49IHNxdWFyZVkgJiYgeSA8PSBzcXVhcmVZICsgaGVpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdG9yU2VwYXJhdGVkUG9pbnRzKG5hbWU6IHN0cmluZywgcG9pbnRzOiBJUG9pbnRzLCBjdXJ2ZTogbnVtYmVyLCBzZXBhcmF0ZWRQb2ludHM6IEFycmF5PElQb2ludHM+LCBvYnN0YWNsZVJlY3RzOiBBcnJheTxJUmVjdD4pIHtcbiAgICBpZiAoIW9ic3RhY2xlUmVjdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudFN0YXJ0ID0gb2JzdGFjbGVSZWN0cy5maW5kKGl0ZW0gPT4gdGhpcy5pc1BvaW50SW5zaWRlU3F1YXJlKHBvaW50cy5zdGFydCwgaXRlbSkpO1xuICAgIGNvbnN0IGVsZW1lbnRFbmQgPSBvYnN0YWNsZVJlY3RzLmZpbmQoaXRlbSA9PiB0aGlzLmlzUG9pbnRJbnNpZGVTcXVhcmUocG9pbnRzLmVuZCwgaXRlbSkpO1xuXG4gICAgaWYgKHRoaXMudmlld0JveENvbmZpZz8ubWFyZ2luQmV0d2VlbkVsZW1lbnQpIHtcbiAgICAgIE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUID0gdGhpcy52aWV3Qm94Q29uZmlnPy5tYXJnaW5CZXR3ZWVuRWxlbWVudCA/PyAzMjtcbiAgICB9XG4gICAgTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLnNldFhZQ29ubmVjdEVsZW1lbnRzKGVsZW1lbnRTdGFydCA/PyB7IC4uLnBvaW50cy5zdGFydCwgd2lkdGg6IDEsIGhlaWdodDogMSB9LCBlbGVtZW50RW5kID8/IHsgLi4ucG9pbnRzLmVuZCwgd2lkdGg6IDEsIGhlaWdodDogMSB9LCBvYnN0YWNsZVJlY3RzLCBzZXBhcmF0ZWRQb2ludHMsIGN1cnZlKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXRoQW5kRHJhdyhkYXRhOiBJRHJhd0xpbmVEYXRhSW5wdXQsIHBvaW50czogSVBvaW50cywgbW9kZT86IFRZUEVfTU9ERSkge1xuICAgIGxldCBkUGF0aCA9IHt9IGFzIElBdHRyaWJ1dGVET25QYXRoO1xuICAgIGNvbnN0IHN0eWxlQ29uZmlnID0ge1xuICAgICAgc3Ryb2tlOiBkYXRhLmxpbmVTdHlsZT8uc3Ryb2tlID8/ICcjOUNBMkFEJyxcbiAgICAgIHN0cm9rZURhc2hhcnJheTogZGF0YS5saW5lU3R5bGU/LnN0cm9rZURhc2hhcnJheSxcbiAgICAgIHN0cm9rZVdpZHRoOiBkYXRhLmxpbmVTdHlsZT8uc3Ryb2tlV2lkdGggPz8gJzFweCcsXG4gICAgICBmaWxsOiBkYXRhLmxpbmVTdHlsZT8uZmlsbCA/PyAnbm9uZScsXG4gICAgICBjdXJ2ZTogZGF0YS5saW5lU3R5bGU/LmN1cnZlID8/IDEwLFxuICAgICAgZGlzdGFuY2VQb2ludDogZGF0YS5saW5lU3R5bGU/LmRpc3RhbmNlUG9pbnQgPz8gMTBcbiAgICB9O1xuXG4gICAgcG9pbnRzLnBhdGhFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0eWxlQ29uZmlnLnN0cm9rZSk7XG4gICAgcG9pbnRzLnBhdGhFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBzdHlsZUNvbmZpZy5maWxsKTtcbiAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgc3R5bGVDb25maWcuc3Ryb2tlV2lkdGgpO1xuICAgIGlmIChzdHlsZUNvbmZpZy5zdHJva2VEYXNoYXJyYXkpIHtcbiAgICAgIHBvaW50cy5wYXRoRWxlbWVudD8uc2V0QXR0cmlidXRlKCdzdHJva2UtZGFzaGFycmF5Jywgc3R5bGVDb25maWcuc3Ryb2tlRGFzaGFycmF5KTtcbiAgICB9XG4gICAgbGV0IHsgY3VydmUsIGRpc3RhbmNlUG9pbnQgfSA9IHN0eWxlQ29uZmlnO1xuXG4gICAgbW9kZSA9IG1vZGUgfHwgXCJxdWFydC1pblwiO1xuICAgIGlmIChtb2RlICE9PSAncXVhcnQtaW4nKSB7XG4gICAgICBjdXJ2ZSA9IGN1cnZlID8/IDEwO1xuICAgICAgZGlzdGFuY2VQb2ludCA9IGRpc3RhbmNlUG9pbnQgPz8gMTA7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAncXVhcnQtaW4nIHx8IHBvaW50cy5zdGFydC54ID09PSBwb2ludHMuZW5kLnggfHwgcG9pbnRzLnN0YXJ0LnkgPT09IHBvaW50cy5lbmQueSkge1xuICAgICAgdGhpcy5kcmF3QmFsYW5jZWRDdXJ2ZShkUGF0aCwgcG9pbnRzKTtcblxuICAgICAgaWYgKG1vZGUgPT09ICdxdWFydC1pbicpIHtcbiAgICAgICAgZFBhdGggPSB7fSBhcyBJQXR0cmlidXRlRE9uUGF0aDtcbiAgICAgICAgdGhpcy5kcmF3QmVuZEJvdGhFbmRzQ3VydmUoZFBhdGgsIHBvaW50cyk7XG4gICAgICB9XG4gICAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnZCcsIHRoaXMuYnVpbERBdHRyaWJ1dGVUb1N0cmluZyhkUGF0aCkpO1xuICAgICAgdGhpcy5kcmF3UmVjdEFuZEluaXRFdmVudChkYXRhLCBtb2RlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGN1bGF0b3JEaXN0YW5jZVBvaW50QW5kQ3VydmUocG9pbnRzLCBkaXN0YW5jZVBvaW50LCBjdXJ2ZSwgbW9kZSk7XG5cbiAgICBkaXN0YW5jZVBvaW50ID0gcmVzdWx0LmRpc3RhbmNlUG9pbnQ7XG4gICAgY3VydmUgPSByZXN1bHQuY3VydmU7XG5cbiAgICB0aGlzLmJ1aWxkREF0dHJpYnV0ZUJ5UG9pbnRFbmRNb2RlSG9yaXpvbnRhbChkUGF0aCwgcG9pbnRzLCBkaXN0YW5jZVBvaW50IHx8IDAsIGN1cnZlIHx8IDAsIG1vZGUpO1xuICAgIHRoaXMuYnVpbGREQXR0cmlidXRlQnlQb2ludEVuZE1vZGVWZXJ0aWNhbChkUGF0aCwgcG9pbnRzLCBkaXN0YW5jZVBvaW50IHx8IDAsIGN1cnZlIHx8IDAsIG1vZGUpO1xuICAgIHBvaW50cy5wYXRoRWxlbWVudD8uc2V0QXR0cmlidXRlKCdkJywgdGhpcy5idWlsREF0dHJpYnV0ZVRvU3RyaW5nKGRQYXRoKSk7XG4gICAgdGhpcy5kcmF3UmVjdEFuZEluaXRFdmVudChkYXRhLCBtb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRvckRpc3RhbmNlUG9pbnRBbmRDdXJ2ZShwb2ludHM6IElQb2ludHMsIGRpc3RhbmNlUG9pbnQ6IG51bWJlciwgY3VydmU6IG51bWJlciwgbW9kZTogVFlQRV9NT0RFKSB7XG4gICAgaWYgKCghbW9kZS5pbmNsdWRlcygndmVydGljYWwnKSAmJiAhbW9kZS5pbmNsdWRlcygnaG9yaXpvbnRhbCcpKSkge1xuICAgICAgcmV0dXJuIHsgY3VydmUsIGRpc3RhbmNlUG9pbnQgfTtcbiAgICB9XG4gICAgY29uc3QgZ2FwWCA9IE1hdGguYWJzKHBvaW50cy5zdGFydC54IC0gcG9pbnRzLmVuZC54KTtcbiAgICBjb25zdCBnYXBZID0gTWF0aC5hYnMocG9pbnRzLnN0YXJ0LnkgLSBwb2ludHMuZW5kLnkpO1xuICAgIGNvbnN0IG11bHRpcGxpZXJDdXJ2ZSA9IG1vZGUuaW5jbHVkZXMoJ2hvcml6b250YWwnKSA/IDEgOiAyO1xuICAgIGNvbnN0IG11bHRpcGxpZXJEaXN0YW5jZSA9IG1vZGUuaW5jbHVkZXMoJ2hvcml6b250YWwnKSA/IDIgOiAxO1xuXG4gICAgaWYgKCFtb2RlLmluY2x1ZGVzKCdzaW5nbGUtY3VydmUnKSkge1xuICAgICAgaWYgKGdhcFggPCBkaXN0YW5jZVBvaW50ICogbXVsdGlwbGllckRpc3RhbmNlICsgY3VydmUgKiBtdWx0aXBsaWVyQ3VydmUpIHtcbiAgICAgICAgZGlzdGFuY2VQb2ludCA9IGN1cnZlID0gZ2FwWCAvIDM7XG4gICAgICB9XG4gICAgICBpZiAoZ2FwWSA8IGRpc3RhbmNlUG9pbnQgKiBtdWx0aXBsaWVyRGlzdGFuY2UgKyBjdXJ2ZSAqIG11bHRpcGxpZXJDdXJ2ZSkge1xuICAgICAgICBkaXN0YW5jZVBvaW50ID0gY3VydmUgPSBnYXBZIC8gMztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgY3VydmUsIGRpc3RhbmNlUG9pbnQgfTtcbiAgICB9XG4gICAgY29uc3QgbWluR2FwID0gTWF0aC5taW4oZ2FwWCwgZ2FwWSk7XG5cbiAgICBpZiAobWluR2FwIDwgZGlzdGFuY2VQb2ludCkge1xuICAgICAgZGlzdGFuY2VQb2ludCA9IG1pbkdhcDtcbiAgICB9XG4gICAgaWYgKG1pbkdhcCA8IGN1cnZlKSB7XG4gICAgICBjdXJ2ZSA9IG1pbkdhcDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjdXJ2ZSwgZGlzdGFuY2VQb2ludCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3UmVjdEFuZEluaXRFdmVudChkYXRhOiBJRHJhd0xpbmVEYXRhSW5wdXQsIG1vZGU6IFRZUEVfTU9ERSkge1xuICAgIGNvbnN0IHBvaW50cyA9IGRhdGEucG9pbnRzO1xuXG4gICAgdGhpcy51cGRhdGVTdHlsZUFycm93KHBvaW50cywgbW9kZSwgZGF0YSk7XG4gICAgaWYgKGRhdGEuc3RhcnRDaXJjbGUgJiYgcG9pbnRzLmNpcmNsZVN0YXJ0RWxlbWVudCkge1xuICAgICAgdGhpcy51cGRhdGVBdHRyaWJ1dGVDaXJjbGUocG9pbnRzLmNpcmNsZVN0YXJ0RWxlbWVudCwgZGF0YS5pZCwgcG9pbnRzLnN0YXJ0LCBkYXRhLnN0YXJ0Q2lyY2xlU3R5bGUpO1xuICAgIH1cbiAgICBpZiAoZGF0YS5lbmRDaXJjbGUgJiYgcG9pbnRzLmNpcmNsZUVuZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMudXBkYXRlQXR0cmlidXRlQ2lyY2xlKHBvaW50cy5jaXJjbGVFbmRFbGVtZW50LCBkYXRhLmlkLCBwb2ludHMuZW5kLCBkYXRhLmVuZENpcmNsZVN0eWxlKTtcbiAgICB9XG4gICAgdGhpcy5pbml0RXZlbnQoZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGRyYXdCYWxhbmNlZEN1cnZlKGRQYXRoOiBJQXR0cmlidXRlRE9uUGF0aCwgcG9pbnRzOiBJUG9pbnRzKSB7XG4gICAgZFBhdGguTSA9IHsgeDogcG9pbnRzLnN0YXJ0LngsIHk6IHBvaW50cy5zdGFydC55IH07XG4gICAgZFBhdGguUSA9IFt7IHg6IHBvaW50cy5zdGFydC54ICsgKHBvaW50cy5lbmQueCAtIHBvaW50cy5zdGFydC54KSAvIDQsIHk6IHBvaW50cy5zdGFydC55ICsgKHBvaW50cy5lbmQueSAtIHBvaW50cy5zdGFydC55KSAvIDIgfSwgeyB4OiBwb2ludHMuc3RhcnQueCArIChwb2ludHMuZW5kLnggLSBwb2ludHMuc3RhcnQueCkgLyAyLCB5OiBwb2ludHMuc3RhcnQueSArIChwb2ludHMuZW5kLnkgLSBwb2ludHMuc3RhcnQueSkgLyAyIH1dO1xuICAgIGRQYXRoLlEyID0gW3sgeDogcG9pbnRzLmVuZC54IC0gKHBvaW50cy5lbmQueCAtIHBvaW50cy5zdGFydC54KSAvIDQsIHk6IHBvaW50cy5zdGFydC55ICsgKHBvaW50cy5lbmQueSAtIHBvaW50cy5zdGFydC55KSAvIDIgfSwgeyB4OiBwb2ludHMuZW5kLngsIHk6IHBvaW50cy5lbmQueSB9XTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd0JlbmRCb3RoRW5kc0N1cnZlKGRQYXRoOiBJQXR0cmlidXRlRE9uUGF0aCwgcG9pbnRzOiBJUG9pbnRzKSB7XG4gICAgY29uc3QgcG9pbnRYQ3VydmUgPSAocG9pbnRzLnN0YXJ0LnggKyBwb2ludHMuZW5kLngpICogMC41O1xuICAgIGNvbnN0IHBvaW50Q29udHJvbDEgPSB7IHg6IHBvaW50WEN1cnZlLCB5OiBwb2ludHMuc3RhcnQueSB9O1xuICAgIGNvbnN0IHBvaW50Q29udHJvbDIgPSB7IHg6IHBvaW50WEN1cnZlLCB5OiBwb2ludHMuZW5kLnkgfTtcblxuICAgIGRQYXRoLk0gPSB7IHg6IHBvaW50cy5zdGFydC54LCB5OiBwb2ludHMuc3RhcnQueSB9O1xuICAgIGRQYXRoLkMgPSBbeyB4OiBwb2ludENvbnRyb2wxLngsIHk6IHBvaW50Q29udHJvbDEueSB9LCB7IHg6IHBvaW50Q29udHJvbDIueCwgeTogcG9pbnRDb250cm9sMi55IH0sIHsgeDogcG9pbnRzLmVuZC54LCB5OiBwb2ludHMuZW5kLnkgfV07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkREF0dHJpYnV0ZUJ5UG9pbnRFbmRNb2RlSG9yaXpvbnRhbChkUGF0aDogSUF0dHJpYnV0ZURPblBhdGgsIHBvaW50czogSVBvaW50cywgZGlzdGFuY2VQb2ludDogbnVtYmVyLCBjdXJ2ZTogbnVtYmVyLCBtb2RlOiBUWVBFX01PREUpIHtcbiAgICBpZiAoIW1vZGUuaW5jbHVkZXMoJ2hvcml6b250YWwnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aXBsaWVyWCA9IHBvaW50cy5zdGFydC54IDwgcG9pbnRzLmVuZC54ID8gLTEgOiAxO1xuICAgIGNvbnN0IG11bHRpcGxpZXJZID0gcG9pbnRzLnN0YXJ0LnkgPCBwb2ludHMuZW5kLnkgPyAxIDogLTE7XG4gICAgY29uc3QgcmV2ZXJzZU11bHRpcGxpZXIgPSAtMTtcblxuICAgIGRQYXRoLk0gPSB7IHg6IHBvaW50cy5zdGFydC54LCB5OiBwb2ludHMuc3RhcnQueSB9O1xuICAgIGRQYXRoLkwgPSB7IHg6IHBvaW50cy5lbmQueCArICgoZGlzdGFuY2VQb2ludCAqIDIgKyBjdXJ2ZSkgKiBtdWx0aXBsaWVyWCksIHk6IHBvaW50cy5zdGFydC55IH07XG4gICAgaWYgKG1vZGUuaW5jbHVkZXMoJ2hvcml6b250YWwtc2luZ2xlJykpIHtcbiAgICAgIGRQYXRoLkwueCA9IHBvaW50cy5lbmQueCArIChjdXJ2ZSAqIG11bHRpcGxpZXJYKTtcbiAgICB9XG4gICAgZFBhdGguUSA9IFt7IHg6IGRQYXRoLkwueCArIChjdXJ2ZSAqIG11bHRpcGxpZXJYICogcmV2ZXJzZU11bHRpcGxpZXIpLCB5OiBwb2ludHMuc3RhcnQueSB9LCB7IHg6IGRQYXRoLkwueCArIChjdXJ2ZSAqIG11bHRpcGxpZXJYICogcmV2ZXJzZU11bHRpcGxpZXIpLCB5OiBwb2ludHMuc3RhcnQueSArIChjdXJ2ZSAqIG11bHRpcGxpZXJZKSB9XTtcbiAgICBkUGF0aC5MMiA9IHsgeDogZFBhdGguUVsxXS54LCB5OiBwb2ludHMuZW5kLnkgKyAoY3VydmUgKiBtdWx0aXBsaWVyWSAqIHJldmVyc2VNdWx0aXBsaWVyKSB9O1xuICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsLXNpbmdsZScpKSB7XG4gICAgICBkUGF0aC5MMiA9IHBvaW50cy5lbmQ7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIGRQYXRoLlEyID0gW3sgeDogZFBhdGguTDIueCwgeTogcG9pbnRzLmVuZC55IH0sIHsgeDogZFBhdGguTDIueCArIChkaXN0YW5jZVBvaW50ICogbXVsdGlwbGllclggKiByZXZlcnNlTXVsdGlwbGllciksIHk6IHBvaW50cy5lbmQueSB9XTtcbiAgICAgIGRQYXRoLkwzID0geyB4OiBwb2ludHMuZW5kLngsIHk6IHBvaW50cy5lbmQueSB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREQXR0cmlidXRlQnlQb2ludEVuZE1vZGVWZXJ0aWNhbChkUGF0aDogSUF0dHJpYnV0ZURPblBhdGgsIHBvaW50czogSVBvaW50cywgZGlzdGFuY2VQb2ludDogbnVtYmVyLCBjdXJ2ZTogbnVtYmVyLCBtb2RlOiBUWVBFX01PREUpIHtcbiAgICBpZiAoIW1vZGUuaW5jbHVkZXMoJ3ZlcnRpY2FsJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlwbGllclggPSBwb2ludHMuc3RhcnQueCA8IHBvaW50cy5lbmQueCA/IC0xIDogMTtcbiAgICBjb25zdCBtdWx0aXBsaWVyWSA9IHBvaW50cy5zdGFydC55IDwgcG9pbnRzLmVuZC55ID8gMSA6IC0xO1xuICAgIGNvbnN0IHJldmVyc2VNdWx0aXBsaWVyID0gLTE7XG5cbiAgICBkUGF0aC5NID0gcG9pbnRzLnN0YXJ0O1xuICAgIGRQYXRoLkwgPSB7IHg6IHBvaW50cy5zdGFydC54LCB5OiBwb2ludHMuc3RhcnQueSArIChkaXN0YW5jZVBvaW50ICogbXVsdGlwbGllclkpIH07XG4gICAgaWYgKG1vZGUuaW5jbHVkZXMoJ3ZlcnRpY2FsLXNpbmdsZScpKSB7XG4gICAgICBkUGF0aC5MLnkgPSBwb2ludHMuZW5kLnkgKyAoZGlzdGFuY2VQb2ludCAqIG11bHRpcGxpZXJZICogcmV2ZXJzZU11bHRpcGxpZXIpO1xuICAgIH1cbiAgICBkUGF0aC5RID0gW3sgeDogZFBhdGguTC54LCB5OiBkUGF0aC5MLnkgKyAoY3VydmUgKiBtdWx0aXBsaWVyWSkgfSwgeyB4OiBkUGF0aC5MLnggKyAoY3VydmUgKiBtdWx0aXBsaWVyWCAqIHJldmVyc2VNdWx0aXBsaWVyKSwgeTogZFBhdGguTC55ICsgKGN1cnZlICogbXVsdGlwbGllclkpIH1dO1xuICAgIGRQYXRoLkwyID0geyB4OiBwb2ludHMuZW5kLnggKyAoKGN1cnZlICogMikgKiBtdWx0aXBsaWVyWCksIHk6IGRQYXRoLlFbMV0ueSB9O1xuICAgIGlmIChtb2RlLmluY2x1ZGVzKCd2ZXJ0aWNhbC1zaW5nbGUnKSkge1xuICAgICAgZFBhdGguTDIgPSBwb2ludHMuZW5kO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgZFBhdGguUTIgPSBbeyB4OiBwb2ludHMuZW5kLngsIHk6IGRQYXRoLkwyLnkgfSwgeyB4OiBwb2ludHMuZW5kLngsIHk6IGRQYXRoLkwyLnkgKyAoY3VydmUgKiBtdWx0aXBsaWVyWSkgfV07XG4gICAgICBkUGF0aC5MMyA9IHsgeDogcG9pbnRzLmVuZC54LCB5OiBwb2ludHMuZW5kLnkgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxEQXR0cmlidXRlVG9TdHJpbmcoZEF0dHJpYnV0ZTogSUF0dHJpYnV0ZURPblBhdGgpOiBzdHJpbmcge1xuICAgIGxldCBkU3RyaW5nID0gJyc7XG5cbiAgICBPYmplY3Qua2V5cyhkQXR0cmlidXRlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0KGRBdHRyaWJ1dGUsIGtleSk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IFtwb2ludDEsIHBvaW50MiwgcG9pbnQzXSA9IGRhdGE7XG5cbiAgICAgICAgZFN0cmluZyA9IGAke2RTdHJpbmd9JHtrZXkucmVwbGFjZSgvXFxkL2csICcnKX0ke3BvaW50MS54fSwke3BvaW50MS55fSAke3BvaW50Mi54fSwke3BvaW50Mi55fSR7cG9pbnQzID8gJyAnICsgcG9pbnQzLnggKyAnLCcgKyBwb2ludDMueSA6ICcnfVxuICAgICAgICBgO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRTdHJpbmcgPSBgJHtkU3RyaW5nfSR7a2V5LnJlcGxhY2UoL1xcZC9nLCAnJyl9JHtkYXRhLnh9LCR7ZGF0YS55fVxuICAgICAgYDtcbiAgICB9KTtcblxuICAgIHJldHVybiBkU3RyaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHlsZUFycm93KHBvaW50czogSVBvaW50cywgbW9kZTogVFlQRV9NT0RFLCBkYXRhOiBJRHJhd0xpbmVEYXRhSW5wdXQpIHtcbiAgICBpZiAoIXBvaW50cy5hcnJvd0VsZW1lbnQgfHwgZGF0YS5pZ25vcmVEcmF3QXJyb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVDb25maWcgPSB7XG4gICAgICBmaWxsOiBkYXRhLmFycm93U3R5bGU/LmZpbGwgPz8gJyM5Q0EyQUQnLFxuICAgICAgc3Ryb2tlOiBkYXRhLmFycm93U3R5bGU/LnN0cm9rZSA/PyAnbm9uZScsXG4gICAgICBzdHJva2VXaWR0aDogZGF0YS5hcnJvd1N0eWxlPy5zdHJva2VXaWR0aCA/PyAnMCcsXG4gICAgICB3aWR0aDogZGF0YS5hcnJvd1N0eWxlPy53aWR0aCA/PyA2LFxuICAgICAgaGVpZ2h0OiBkYXRhLmFycm93U3R5bGU/LmhlaWdodCA/PyA4XG4gICAgfTtcbiAgICBjb25zdCBwb2ludEVuZCA9IGNsb25lRGVlcChwb2ludHMuZW5kKTtcbiAgICBjb25zdCBhcnJvd0VsZW1lbnQgPSBwb2ludHMuYXJyb3dFbGVtZW50O1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRhdGEuYXJyb3dEaXJlY3Rpb24gfHwgdGhpcy5nZXREaXJlY3Rpb24ocG9pbnRzLCBkYXRhLnN0YXJ0RW5kTW9kZSk7XG5cblxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgaWYgKG1vZGUuaW5jbHVkZXMoJ2hvcml6b250YWwnKSB8fCBtb2RlLmluY2x1ZGVzKCd2ZXJ0aWNhbCcpKSB7XG4gICAgICAgICAgcG9pbnRFbmQueCAtPSBzdHlsZUNvbmZpZy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgYXJyb3dFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3BvaW50cycsIGAke3BvaW50RW5kLnh9LCR7cG9pbnRFbmQueSAtIHN0eWxlQ29uZmlnLndpZHRofSAgJHtwb2ludEVuZC54ICsgc3R5bGVDb25maWcuaGVpZ2h0fSwke3BvaW50RW5kLnl9ICR7cG9pbnRFbmQueH0sJHtwb2ludEVuZC55ICsgc3R5bGVDb25maWcud2lkdGh9IGApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgfHwgbW9kZS5pbmNsdWRlcygndmVydGljYWwnKSkge1xuICAgICAgICAgIHBvaW50RW5kLnggKz0gc3R5bGVDb25maWcuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGFycm93RWxlbWVudD8uc2V0QXR0cmlidXRlKCdwb2ludHMnLCBgJHtwb2ludEVuZC54fSwke3BvaW50RW5kLnkgLSBzdHlsZUNvbmZpZy53aWR0aH0gICR7cG9pbnRFbmQueCAtIHN0eWxlQ29uZmlnLmhlaWdodH0sJHtwb2ludEVuZC55fSAke3BvaW50RW5kLnh9LCR7cG9pbnRFbmQueSArIHN0eWxlQ29uZmlnLndpZHRofSBgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgfHwgbW9kZS5pbmNsdWRlcygndmVydGljYWwnKSkge1xuICAgICAgICAgIHBvaW50RW5kLnkgKz0gc3R5bGVDb25maWcuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGFycm93RWxlbWVudD8uc2V0QXR0cmlidXRlKCdwb2ludHMnLCBgJHtwb2ludEVuZC54IC0gc3R5bGVDb25maWcud2lkdGh9LCR7cG9pbnRFbmQueX0gICR7cG9pbnRFbmQueH0sJHtwb2ludEVuZC55IC0gc3R5bGVDb25maWcuaGVpZ2h0fSAke3BvaW50RW5kLnggKyBzdHlsZUNvbmZpZy53aWR0aH0sJHtwb2ludEVuZC55fSBgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgfHwgbW9kZS5pbmNsdWRlcygndmVydGljYWwnKSkge1xuICAgICAgICAgIHBvaW50RW5kLnkgLT0gc3R5bGVDb25maWcuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGFycm93RWxlbWVudD8uc2V0QXR0cmlidXRlKCdwb2ludHMnLCBgJHtwb2ludEVuZC54IC0gc3R5bGVDb25maWcud2lkdGh9LCR7cG9pbnRFbmQueX0gICR7cG9pbnRFbmQueH0sJHtwb2ludEVuZC55ICsgc3R5bGVDb25maWcuaGVpZ2h0fSAke3BvaW50RW5kLnggKyBzdHlsZUNvbmZpZy53aWR0aH0sJHtwb2ludEVuZC55fSBgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXJyb3dFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBzdHlsZUNvbmZpZy5maWxsKTtcbiAgICBhcnJvd0VsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgc3R5bGVDb25maWcuc3Ryb2tlKTtcbiAgICBhcnJvd0VsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgc3R5bGVDb25maWcuc3Ryb2tlV2lkdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBdHRyaWJ1dGVDaXJjbGUoY2lyY2xlRWxlbWVudDogU1ZHQ2lyY2xlRWxlbWVudCwgbmFtZTogc3RyaW5nLCBwb2ludDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBjaXJjbGVTdHlsZT86IElDaXJjbGVTdHlsZSkge1xuICAgIGNpcmNsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCduYW1lJywgbmFtZSk7XG4gICAgY2lyY2xlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2N4JywgYCR7cG9pbnQueH1gKTtcbiAgICBjaXJjbGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnY3knLCBgJHtwb2ludC55fWApO1xuICAgIGNpcmNsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdyJywgYCR7Y2lyY2xlU3R5bGU/LnIgPz8gMn1gKTtcbiAgICBjaXJjbGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZmlsbCcsIGAke2NpcmNsZVN0eWxlPy5maWxsID8/ICdncmVlbid9YCk7XG4gICAgY2lyY2xlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIGAke2NpcmNsZVN0eWxlPy5zdHJva2UgPz8gJyM5Q0EyQUQnfWApO1xuICAgIGNpcmNsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBgJHtjaXJjbGVTdHlsZT8uc3Ryb2tlV2lkdGggPz8gJzFweCd9YCk7XG5cbiAgICByZXR1cm4gY2lyY2xlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlyZWN0aW9uKHBvaW50czogSVBvaW50cywgc3RhcnRFbmRNb2RlOiAncmlnaHQtbGVmdCcgfCAnYm90dG9tLXRvcCcgfCAnYm90dG9tLWxlZnQnIHwgdW5kZWZpbmVkKTogVFlQRV9ESVJFQ1RJT04ge1xuICAgIGxldCBwb2ludFN0YXJ0ID0geyAuLi5wb2ludHMuc3RhcnQgfTtcblxuICAgIGlmIChwb2ludHMuc2VwYXJhdGVkUG9pbnRzKSB7XG4gICAgICBjb25zdCBsaW5lVG9FbmQgPSBwb2ludHMuc2VwYXJhdGVkUG9pbnRzLmZpbmQoaXRlbSA9PiBpdGVtLmVuZC54ID09PSBwb2ludHMuZW5kLnggJiYgaXRlbS5lbmQueSA9PT0gcG9pbnRzLmVuZC55KTtcblxuICAgICAgaWYgKGxpbmVUb0VuZCkge1xuICAgICAgICBwb2ludFN0YXJ0ID0gbGluZVRvRW5kLnN0YXJ0O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtb2RlSG9yaXpvbnRhbCA9IHBvaW50U3RhcnQueCA8IHBvaW50cy5lbmQueCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgY29uc3QgbW9kZVZlcnRpY2FsID0gcG9pbnRTdGFydC55IDwgcG9pbnRzLmVuZC55ID8gJ2JvdHRvbScgOiAndG9wJztcblxuICAgIGlmICghc3RhcnRFbmRNb2RlKSB7XG4gICAgICBpZiAoTWF0aC5hYnMocG9pbnRzLmVuZC54IC0gcG9pbnRTdGFydC54KSA+IE1hdGguYWJzKHBvaW50cy5lbmQueSAtIHBvaW50U3RhcnQueSkpIHtcbiAgICAgICAgcmV0dXJuIG1vZGVIb3Jpem9udGFsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbW9kZVZlcnRpY2FsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc3RhcnRFbmRNb2RlKSB7XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiBtb2RlSG9yaXpvbnRhbDtcblxuICAgICAgY2FzZSAncmlnaHQtbGVmdCc6XG4gICAgICAgIHJldHVybiBtb2RlSG9yaXpvbnRhbDtcblxuICAgICAgY2FzZSAnYm90dG9tLXRvcCc6XG4gICAgICAgIHJldHVybiBtb2RlVmVydGljYWw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0RXZlbnQoZGF0YTogSURyYXdMaW5lRGF0YUlucHV0KSB7XG4gICAgY29uc3QgcG9pbnRzOiBJUG9pbnRzID0gZGF0YS5wb2ludHM7XG4gICAgbGV0IHByZUV2ZW50OiBNb3VzZUV2ZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKCghcG9pbnRzLmFycm93RWxlbWVudCAmJiAhcG9pbnRzLmNpcmNsZUVuZEVsZW1lbnQpIHx8ICFwb2ludHMub25EZXN0cm95RXZlbnQgfHwgcG9pbnRzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcG9pbnRzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICBjb25zdCBzdG9wRXZlbnRNb3VzZSA9IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3VzZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgY29uc3QgZG9jdW1lbnRNb3VzZVVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChldmVudE1vdXNlVXApID0+IHtcbiAgICAgICAgICBzdG9wRXZlbnRNb3VzZShldmVudE1vdXNlVXApO1xuICAgICAgICAgIGlmIChwcmVFdmVudCkge1xuICAgICAgICAgICAgcHJlRXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm9uRHJhd0xpbmVFbmQubmV4dCh7IGRhdGFMaW5lOiBkYXRhLCBldmVudDogZXZlbnRNb3VzZVVwIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbChwb2ludHMub25EZXN0cm95RXZlbnQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICApO1xuICAgIGNvbnN0IGRvY3VtZW50TW91c2VNb3ZlID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJykucGlwZSh0YXAoKGV2ZW50TW91c2Vtb3ZlKSA9PiBzdG9wRXZlbnRNb3VzZShldmVudE1vdXNlbW92ZSkpLCB0YWtlVW50aWwoKGRvY3VtZW50TW91c2VVcCkpLCB0YWtlVW50aWwocG9pbnRzLm9uRGVzdHJveUV2ZW50KSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSk7XG4gICAgY29uc3QgaGFuZGxlckRyYWcgPSAoZHJhZ01vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghcHJlRXZlbnQpIHtcbiAgICAgICAgcHJlRXZlbnQgPSBkcmFnTW91c2VFdmVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvaW50RW5kID0gY2xvbmVEZWVwKHBvaW50cy5lbmQpO1xuXG4gICAgICBjb25zdCBtb3ZlbWVudFggPSBkcmFnTW91c2VFdmVudC5jbGllbnRYIC0gcHJlRXZlbnQuY2xpZW50WDtcbiAgICAgIGNvbnN0IG1vdmVtZW50WSA9IGRyYWdNb3VzZUV2ZW50LmNsaWVudFkgLSBwcmVFdmVudC5jbGllbnRZO1xuXG4gICAgICBwcmVFdmVudCA9IGRyYWdNb3VzZUV2ZW50O1xuICAgICAgcG9pbnRFbmQueCArPSBtb3ZlbWVudFg7XG4gICAgICBwb2ludEVuZC55ICs9IG1vdmVtZW50WTtcbiAgICAgIGlmIChkYXRhLnBvaW50cz8ub2JzdGFjbGVSZWN0Py5sZW5ndGggJiYgZGF0YS5wb2ludHM/Lm9ic3RhY2xlUmVjdC5zb21lKG9ic3RhY2xlUmVjdCA9PiB0aGlzLmNoZWNrUG9pbnRJbmNsdWRlUmVjdChwb2ludEVuZCwgb2JzdGFjbGVSZWN0KSkpIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwb2ludHMuZW5kLnggPSBwb2ludEVuZC54O1xuICAgICAgcG9pbnRzLmVuZC55ID0gcG9pbnRFbmQueTtcbiAgICAgIHRoaXMuZHJhd0xpbmUoZGF0YSk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdCb3goKTtcbiAgICB9O1xuXG4gICAgaWYgKHBvaW50cy5hcnJvd0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRNb3VzZURvd25BcnJvdyA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihwb2ludHMuYXJyb3dFbGVtZW50LCAnbW91c2Vkb3duJykucGlwZShcbiAgICAgICAgdGFwKGV2ZW50TW91c2Vkb3duID0+IHtcbiAgICAgICAgICBzdG9wRXZlbnRNb3VzZShldmVudE1vdXNlZG93bik7XG5cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbChwb2ludHMub25EZXN0cm95RXZlbnQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICApO1xuICAgICAgY29uc3QgZHJhZ0Fycm93ID0gZWxlbWVudE1vdXNlRG93bkFycm93LnBpcGUobWVyZ2VNYXAoKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IGRvY3VtZW50TW91c2VNb3ZlLnBpcGUoc3RhcnRXaXRoKChtb3VzZUV2ZW50KSkpKSkgYXMgT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PjtcblxuICAgICAgZHJhZ0Fycm93LnBpcGUodGFwKGhhbmRsZXJEcmFnKSwgdGFrZVVudGlsKHBvaW50cy5vbkRlc3Ryb3lFdmVudCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChwb2ludHMuY2lyY2xlRW5kRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudE1vdXNlRG93bkNpcmNsZSA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihwb2ludHMuY2lyY2xlRW5kRWxlbWVudCwgJ21vdXNlZG93bicpLnBpcGUoXG4gICAgICAgIHRhcChldmVudE1vdXNlZG93biA9PiB7XG4gICAgICAgICAgc3RvcEV2ZW50TW91c2UoZXZlbnRNb3VzZWRvd24pO1xuXG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwocG9pbnRzLm9uRGVzdHJveUV2ZW50KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRyYWdDaXJjbGUgPSBlbGVtZW50TW91c2VEb3duQ2lyY2xlLnBpcGUobWVyZ2VNYXAoKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IGRvY3VtZW50TW91c2VNb3ZlLnBpcGUoc3RhcnRXaXRoKChtb3VzZUV2ZW50KSkpKSkgYXMgT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PjtcblxuICAgICAgZHJhZ0NpcmNsZS5waXBlKHRhcChoYW5kbGVyRHJhZyksIHRha2VVbnRpbChwb2ludHMub25EZXN0cm95RXZlbnQpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrUG9pbnRJbmNsdWRlUmVjdChwb2ludDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBvYnN0YWNsZVJlY3Q6IElSZWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ2FwRGVmYXVsdCA9IDg7XG5cbiAgICBvYnN0YWNsZVJlY3QgPSB7XG4gICAgICB4OiBvYnN0YWNsZVJlY3QueCAtIChvYnN0YWNsZVJlY3QuZ2FwWE9ic3RhY2xlUmVjdCB8fCBnYXBEZWZhdWx0KSxcbiAgICAgIHk6IG9ic3RhY2xlUmVjdC55IC0gKG9ic3RhY2xlUmVjdC5nYXBZT2JzdGFjbGVSZWN0IHx8IGdhcERlZmF1bHQpLFxuICAgICAgd2lkdGg6IG9ic3RhY2xlUmVjdC53aWR0aCArIChvYnN0YWNsZVJlY3QuZ2FwWE9ic3RhY2xlUmVjdCB8fCBnYXBEZWZhdWx0KSAqIDIsXG4gICAgICBoZWlnaHQ6IG9ic3RhY2xlUmVjdC5oZWlnaHQgKyAob2JzdGFjbGVSZWN0LmdhcFlPYnN0YWNsZVJlY3QgfHwgZ2FwRGVmYXVsdCkgKiAyXG4gICAgfTtcbiAgICBpZiAoKG9ic3RhY2xlUmVjdC54IDw9IHBvaW50LnggJiYgcG9pbnQueCA8PSBvYnN0YWNsZVJlY3QueCArIG9ic3RhY2xlUmVjdC53aWR0aCkgJiYgKG9ic3RhY2xlUmVjdC55IDw9IHBvaW50LnkgJiYgcG9pbnQueSA8PSBvYnN0YWNsZVJlY3QueSArIG9ic3RhY2xlUmVjdC5oZWlnaHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhdGhBbmRBcnJvd0VsZW1lbnQobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGF0aEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInBhdGhcIik7XG4gICAgY29uc3QgYXJyb3dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJwb2x5bGluZVwiKTtcbiAgICBjb25zdCBjaXJjbGVTdGFydEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImNpcmNsZVwiKTtcbiAgICBjb25zdCBjaXJjbGVFbmRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJjaXJjbGVcIik7XG5cbiAgICBwYXRoRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBuYW1lKTtcbiAgICBhcnJvd0VsZW1lbnQuc2V0QXR0cmlidXRlKCduYW1lJywgbmFtZSk7XG4gICAgdGhpcy5zdmdFbGVtZW50LmFwcGVuZChwYXRoRWxlbWVudCk7XG4gICAgdGhpcy5zdmdFbGVtZW50LmFwcGVuZChhcnJvd0VsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHsgcGF0aEVsZW1lbnQsIGFycm93RWxlbWVudCwgY2lyY2xlU3RhcnRFbGVtZW50LCBjaXJjbGVFbmRFbGVtZW50IH07XG4gIH1cblxuICBwcml2YXRlIGFkZENpcmNsZShuYW1lOiBzdHJpbmcsIHBvaW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0pIHtcbiAgICBpZiAoIXRoaXMuZHJhd1JlY3REZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImNpcmNsZVwiKTtcblxuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBuYW1lKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeCcsIGAke3BvaW50Lnh9YCk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnY3knLCBgJHtwb2ludC55fWApO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ3InLCAnMicpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2ZpbGw6IG5vbmU7IHN0cm9rZTogYmx1ZTsgc3Ryb2tlLXdpZHRoOiAxcHg7Jyk7XG4gICAgdGhpcy5zdmdFbGVtZW50LmFwcGVuZENoaWxkKGNpcmNsZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQ2lyY2xlKCkge1xuICAgIGlmICghdGhpcy5kcmF3UmVjdERlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEFycmF5LmZyb20odGhpcy5zdmdFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaXJjbGUnKSk/LmZvckVhY2goaXRlbSA9PiBpdGVtLnJlbW92ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVjdChuYW1lOiBzdHJpbmcsIHJlY3Q6IElSZWN0KSB7XG4gICAgaWYgKCF0aGlzLmRyYXdSZWN0RGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlY3RcIik7XG4gICAgY29uc3QgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRleHRcIik7XG5cbiAgICByZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBuYW1lKTtcbiAgICByZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtyZWN0Lnh9YCk7XG4gICAgcmVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd5JywgYCR7cmVjdC55fWApO1xuICAgIHJlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBgJHtyZWN0LndpZHRofWApO1xuICAgIHJlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7cmVjdC5oZWlnaHR9YCk7XG4gICAgcmVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdmaWxsOiBibHVlOyBzdHJva2U6IGJsdWU7Jyk7XG4gICAgdGhpcy5zdmdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3RFbGVtZW50KTtcblxuICAgIHRleHRFbGVtZW50LnNldEF0dHJpYnV0ZSgneCcsIGAke3JlY3QueH1gKTtcbiAgICB0ZXh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtyZWN0Lnl9YCk7XG4gICAgdGV4dEVsZW1lbnQudGV4dENvbnRlbnQgPSByZWN0LmlkID8/ICcnO1xuICAgIHRoaXMuc3ZnRWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0RWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUmVjdCgpIHtcbiAgICBpZiAoIXRoaXMuZHJhd1JlY3REZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBBcnJheS5mcm9tKHRoaXMuc3ZnRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncmVjdCcpKT8uZm9yRWFjaChpdGVtID0+IGl0ZW0ucmVtb3ZlKCkpO1xuICAgIEFycmF5LmZyb20odGhpcy5zdmdFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0JykpPy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5yZW1vdmUoKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGF0aEFuZERyYXdTZXBhcmF0ZWRQb2ludHMoZGF0YTogSURyYXdMaW5lRGF0YUlucHV0LCBwb2ludHM6IElQb2ludHMsIG1vZGU/OiBUWVBFX01PREUpIHtcbiAgICBsZXQgZFBhdGggPSB7fSBhcyBJQXR0cmlidXRlRE9uUGF0aDtcbiAgICBjb25zdCBzdHlsZUNvbmZpZyA9IHtcbiAgICAgIGN1cnZlOiBkYXRhLmxpbmVTdHlsZT8uY3VydmUgPz8gMTAsXG4gICAgICBkaXN0YW5jZVBvaW50OiBkYXRhLmxpbmVTdHlsZT8uZGlzdGFuY2VQb2ludCA/PyAxMFxuICAgIH07XG5cbiAgICBsZXQgeyBjdXJ2ZSwgZGlzdGFuY2VQb2ludCB9ID0gc3R5bGVDb25maWc7XG5cbiAgICBtb2RlID0gbW9kZSB8fCBcInF1YXJ0LWluXCI7XG4gICAgaWYgKG1vZGUgIT09ICdxdWFydC1pbicpIHtcbiAgICAgIGN1cnZlID0gY3VydmUgPz8gMTA7XG4gICAgICBkaXN0YW5jZVBvaW50ID0gZGlzdGFuY2VQb2ludCA/PyAxMDtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09ICdxdWFydC1pbicgfHwgcG9pbnRzLnN0YXJ0LnggPT09IHBvaW50cy5lbmQueCB8fCBwb2ludHMuc3RhcnQueSA9PT0gcG9pbnRzLmVuZC55KSB7XG4gICAgICB0aGlzLmRyYXdCYWxhbmNlZEN1cnZlKGRQYXRoLCBwb2ludHMpO1xuXG4gICAgICBpZiAobW9kZSA9PT0gJ3F1YXJ0LWluJykge1xuICAgICAgICBkUGF0aCA9IHt9IGFzIElBdHRyaWJ1dGVET25QYXRoO1xuICAgICAgICB0aGlzLmRyYXdCZW5kQm90aEVuZHNDdXJ2ZShkUGF0aCwgcG9pbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuYnVpbERBdHRyaWJ1dGVUb1N0cmluZyhkUGF0aCk7XG5cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jYWxjdWxhdG9yRGlzdGFuY2VQb2ludEFuZEN1cnZlKHBvaW50cywgZGlzdGFuY2VQb2ludCwgY3VydmUsIG1vZGUpO1xuXG4gICAgZGlzdGFuY2VQb2ludCA9IHJlc3VsdC5kaXN0YW5jZVBvaW50O1xuICAgIGN1cnZlID0gcmVzdWx0LmN1cnZlO1xuXG4gICAgdGhpcy5idWlsZERBdHRyaWJ1dGVCeVBvaW50RW5kTW9kZUhvcml6b250YWwoZFBhdGgsIHBvaW50cywgZGlzdGFuY2VQb2ludCB8fCAwLCBjdXJ2ZSB8fCAwLCBtb2RlKTtcbiAgICB0aGlzLmJ1aWxkREF0dHJpYnV0ZUJ5UG9pbnRFbmRNb2RlVmVydGljYWwoZFBhdGgsIHBvaW50cywgZGlzdGFuY2VQb2ludCB8fCAwLCBjdXJ2ZSB8fCAwLCBtb2RlKTtcblxuICAgIHJldHVybiB0aGlzLmJ1aWxEQXR0cmlidXRlVG9TdHJpbmcoZFBhdGgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
643
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1saW5lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmF3LWxpbmUvc3JjL2RyYXctbGluZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBRXJHLGNBQWMsdUJBQXVCLENBQUM7QUFNdEMsTUFBTSxPQUFPLGlDQUFpQztJQUNsQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDaEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLHVCQUF1QixDQUFVO0lBQ25DLFFBQVEsR0FBOEIsRUFBRSxDQUFDO0lBQ3pDLHVCQUF1QixHQUFnQyxFQUFFLENBQUM7SUFDMUQsYUFBYSxHQUdoQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ1gsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFL0IsYUFBYSxDQUFrQjtJQUMvQixVQUFVLENBQWlCO0lBQzNCLGFBQWEsQ0FBVztJQUV2QiwwQkFBMEIsR0FBNkMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMxRixZQUFZLEdBQWtHLElBQUksWUFBWSxF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SUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBd0IsRUFBRSxNQUFlO1FBQ2pFLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2UCxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEssQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQXdCLEVBQUUsTUFBZTtRQUNyRSxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFMUQsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFD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QUssS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzNMLE1BQU07WUFFUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDN0QsUUFBUSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELFlBQVksRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUMzTCxNQUFNO1lBRVIsS0FBSyxLQUFLO2dCQUNSLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzdELFFBQVEsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxZQUFZLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsV0FBVyxD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b3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdab25lLCBPbkRlc3Ryb3ksIE91dHB1dCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIsIGNsb25lRGVlcCwgZ2V0LCBnZXREcmFnRXZlbnRCeUVsZW1lbnQgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IElBdHRyaWJ1dGVET25QYXRoLCBJQ2lyY2xlU3R5bGUsIElEcmF3TGluZURhdGFJbnB1dCwgSU1vRHJhd0xpbmVGdW5jdGlvbkNvbnRyb2wsIElQb2ludCwgSVBvaW50cywgSVJlYWNoYWJsZVBvaW50UmFuZ2UsIElSZWN0LCBJVmlld0JveENvbmZpZywgVFlQRV9ESVJFQ1RJT04sIFRZUEVfTU9ERSB9IGZyb20gXCIuL2RyYXctbGluZS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbCB9IGZyb20gXCIuL3V0aWwvY29ubmVjdC1uYXZpZ2F0aW9uLW5ldy1lbGVtZW50LnV0aWxcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZHJhdy1saW5lLmludGVyZmFjZVwiO1xuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiBcIltMaWJzVWlDb21wb25lbnRzRHJhd0xpbmVEaXJlY3RpdmVdXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEcmF3TGluZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcm90ZWN0ZWQgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIGludGVydmFsU2Nyb2xsVG9FbGVtZW50PzogbnVtYmVyO1xuICBwcml2YXRlIGRhdGFEcmF3OiBBcnJheTxJRHJhd0xpbmVEYXRhSW5wdXQ+ID0gW107XG4gIHByaXZhdGUgZGF0YVJlYWNoYWJsZVBvaW50UmFuZ2U6IEFycmF5PElSZWFjaGFibGVQb2ludFJhbmdlPiA9IFtdO1xuICBwcml2YXRlIG9uRHJhd0xpbmVFbmQ6IFN1YmplY3Q8e1xuICAgIGRhdGFMaW5lOiBJRHJhd0xpbmVEYXRhSW5wdXQsXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnRcbiAgfT4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgdmlld0JveENvbmZpZz86IElWaWV3Qm94Q29uZmlnO1xuICBASW5wdXQoKSBzdmdFbGVtZW50ITogU1ZHU1ZHRWxlbWVudDtcbiAgQElucHV0KCkgZHJhd1JlY3REZWJ1Zz86IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIG91dERyYXdMaW5lRnVuY3Rpb25Db250cm9sOiBFdmVudEVtaXR0ZXI8SU1vRHJhd0xpbmVGdW5jdGlvbkNvbnRyb2w+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb3V0Q29ubmVjdGVkOiBFdmVudEVtaXR0ZXI8eyBkYXRhTGluZTogSURyYXdMaW5lRGF0YUlucHV0LCBkYXRhUmVhY2hhYmxlUG9pbnRSYW5nZTogSVJlYWNoYWJsZVBvaW50UmFuZ2UgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdmdFbGVtZW50ID0gdGhpcy5zdmdFbGVtZW50IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwic3ZnXCIpO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZCh0aGlzLnN2Z0VsZW1lbnQpO1xuICAgIHRoaXMub3V0RHJhd0xpbmVGdW5jdGlvbkNvbnRyb2wuZW1pdCh7XG4gICAgICBzZXREYXRhOiB0aGlzLnNldERhdGEuYmluZCh0aGlzKSxcbiAgICAgIHNldFJlYWNoYWJsZVBvaW50UmFuZ2U6IHRoaXMuc2V0UmVhY2hhYmxlUG9pbnRSYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlTGluZTogdGhpcy5yZW1vdmVMaW5lLmJpbmQodGhpcyksXG4gICAgICByZW1vdmVSZWFjaGFibGVQb2ludFJhbmdlOiB0aGlzLnJlbW92ZVJlYWNoYWJsZVBvaW50UmFuZ2UuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVZpZXdCb3g6IHRoaXMudXBkYXRlVmlld0JveC5iaW5kKHRoaXMpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGEoZGF0YTogQXJyYXk8SURyYXdMaW5lRGF0YUlucHV0Pikge1xuICAgIGNvbnN0IG5ld0RhdGE6IEFycmF5PElEcmF3TGluZURhdGFJbnB1dD4gPSBbXTtcblxuICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFEcmF3LmZpbmQoZGF0YURyYXcgPT4gZGF0YURyYXcuaWQgPT09IGl0ZW0uaWQgJiYgaXRlbS5wb2ludHMuc3RhcnQueCA9PT0gZGF0YURyYXcucG9pbnRzLnN0YXJ0LnggJiYgaXRlbS5wb2ludHMuc3RhcnQueSA9PT0gZGF0YURyYXcucG9pbnRzLnN0YXJ0LnkgJiYgaXRlbS5wb2ludHMuZW5kLnggPT09IGRhdGFEcmF3LnBvaW50cy5lbmQueCAmJiBpdGVtLnBvaW50cy5lbmQueSA9PT0gZGF0YURyYXcucG9pbnRzLmVuZC55KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtQ2xvbmUgPSBjbG9uZURlZXAoaXRlbSk7XG5cbiAgICAgIGl0ZW1DbG9uZS5yZWYgPSBpdGVtO1xuICAgICAgbmV3RGF0YS5wdXNoKGl0ZW1DbG9uZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFEcmF3LnB1c2goLi4ubmV3RGF0YSk7XG4gICAgdGhpcy5zdGFydFByb2Nlc3NEYXRhUm93KG5ld0RhdGEpO1xuICB9XG5cblxuICBzZXRSZWFjaGFibGVQb2ludFJhbmdlKGRhdGE6IEFycmF5PElSZWFjaGFibGVQb2ludFJhbmdlPikge1xuICAgIGNvbnN0IG5ld0RhdGE6IEFycmF5PElSZWFjaGFibGVQb2ludFJhbmdlPiA9IFtdO1xuXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YVJlYWNoYWJsZVBvaW50UmFuZ2UuZmluZChkYXRhRHJhdyA9PiBkYXRhRHJhdy5pZCA9PT0gaXRlbS5pZCB8fCBpdGVtLnggPT09IGRhdGFEcmF3LnggJiYgaXRlbS55ID09PSBkYXRhRHJhdy55KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtQ2xvbmUgPSBjbG9uZURlZXAoaXRlbSk7XG5cbiAgICAgIGl0ZW1DbG9uZS5yZWYgPSBpdGVtO1xuICAgICAgbmV3RGF0YS5wdXNoKGl0ZW1DbG9uZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFSZWFjaGFibGVQb2ludFJhbmdlLnB1c2goLi4ubmV3RGF0YSk7XG4gICAgdGhpcy5zdGFydFByb2Nlc3NEYXRhUmVhY2hhYmxlUG9pbnRSYW5nZShuZXdEYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGluZShpZDogc3RyaW5nLCBwb2ludHM/OiBBcnJheTxJUG9pbnRzPikge1xuICAgIGNvbnN0IGRhdGFEcmF3QnlJZCA9IHRoaXMuZGF0YURyYXcuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpO1xuXG4gICAgaWYgKCFkYXRhRHJhd0J5SWQ/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbW92ZUJ5SXRlbSA9IChpdGVtOiBJRHJhd0xpbmVEYXRhSW5wdXQpID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlRWxlbWVudE9mUG9pbnRzKGl0ZW0ucG9pbnRzKTtcbiAgICAgIGl0ZW0ucG9pbnRzLnNlcGFyYXRlZFBvaW50cz8uZm9yRWFjaChzZXBhcmF0ZWRQb2ludHMgPT4gdGhpcy5yZW1vdmVFbGVtZW50T2ZQb2ludHMoc2VwYXJhdGVkUG9pbnRzKSk7XG5cbiAgICB9O1xuXG4gICAgaWYgKCFwb2ludHM/Lmxlbmd0aCkge1xuICAgICAgZGF0YURyYXdCeUlkLmZvckVhY2goaXRlbSA9PiByZW1vdmVCeUl0ZW0oaXRlbSkpO1xuICAgICAgdGhpcy5kYXRhRHJhdyA9IHRoaXMuZGF0YURyYXcuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3Qm94KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwb2ludHMuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICBjb25zdCBkYXRhRHJhd1JlbW92ZUJ5UG9pbnQgPSBkYXRhRHJhd0J5SWQuZmluZChpdGVtID0+IGl0ZW0ucG9pbnRzLnN0YXJ0LnggPT09IHBvaW50LnN0YXJ0LnggJiYgaXRlbS5wb2ludHMuc3RhcnQueSA9PT0gcG9pbnQuc3RhcnQueSAmJiBpdGVtLnBvaW50cy5lbmQueCA9PT0gcG9pbnQuZW5kLnggJiYgaXRlbS5wb2ludHMuZW5kLnkgPT09IHBvaW50LmVuZC55KTtcblxuICAgICAgaWYgKGRhdGFEcmF3UmVtb3ZlQnlQb2ludCkge1xuICAgICAgICBkYXRhRHJhd1JlbW92ZUJ5UG9pbnQuaXNSZW1vdmUgPSB0cnVlO1xuICAgICAgICByZW1vdmVCeUl0ZW0oZGF0YURyYXdSZW1vdmVCeVBvaW50KTtcbiAgICAgICAgdGhpcy5kYXRhRHJhdyA9IHRoaXMuZGF0YURyYXcuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQgJiYgIWl0ZW0uaXNSZW1vdmUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVmlld0JveCgpO1xuXG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlYWNoYWJsZVBvaW50UmFuZ2UoaWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5jbGVhclJlY3QoKTtcbiAgICBpZiAoIWlkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCBpdGVtUmVtb3ZlID0gdGhpcy5kYXRhUmVhY2hhYmxlUG9pbnRSYW5nZT8uZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGlkKTtcblxuICAgICAgaWYgKCFpdGVtUmVtb3ZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW1SZW1vdmUub25EZXN0cm95RXZlbnQ/Lm5leHQoKTtcbiAgICAgIGl0ZW1SZW1vdmUuZWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgICB0aGlzLmRhdGFSZWFjaGFibGVQb2ludFJhbmdlID0gdGhpcy5kYXRhUmVhY2hhYmxlUG9pbnRSYW5nZT8uZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFByb2Nlc3NEYXRhUm93KGRhdGFEcmF3OiBBcnJheTxJRHJhd0xpbmVEYXRhSW5wdXQ+KSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGRhdGFEcmF3LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcGF0aEVsZW1lbnQsIGFycm93RWxlbWVudCwgY2lyY2xlU3RhcnRFbGVtZW50LCBjaXJjbGVFbmRFbGVtZW50IH0gPSB0aGlzLmNyZWF0ZVBhdGhBbmRBcnJvd0VsZW1lbnQoaXRlbS5pZCk7XG5cbiAgICAgICAgaXRlbS5wb2ludHMub2JzdGFjbGVSZWN0Py5mb3JFYWNoKGRhdGEgPT4gdGhpcy5hZGRSZWN0KCdyZWN0JywgZGF0YSkpO1xuICAgICAgICBpdGVtLnBvaW50cy5wYXRoRWxlbWVudCA9IHBhdGhFbGVtZW50O1xuICAgICAgICBpdGVtLnBvaW50cy5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gICAgICAgIGlmIChpdGVtLnN0YXJ0Q2lyY2xlKSB7XG4gICAgICAgICAgaXRlbS5wb2ludHMuY2lyY2xlU3RhcnRFbGVtZW50ID0gY2lyY2xlU3RhcnRFbGVtZW50O1xuICAgICAgICAgIHRoaXMuc3ZnRWxlbWVudC5hcHBlbmQoY2lyY2xlU3RhcnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5lbmRDaXJjbGUpIHtcbiAgICAgICAgICBpdGVtLnBvaW50cy5jaXJjbGVFbmRFbGVtZW50ID0gY2lyY2xlRW5kRWxlbWVudDtcbiAgICAgICAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kKGNpcmNsZUVuZEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0ucG9pbnRzLm9uRGVzdHJveUV2ZW50ID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5kcmF3TGluZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3Qm94KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UHJvY2Vzc0RhdGFSZWFjaGFibGVQb2ludFJhbmdlKGRhdGE6IEFycmF5PElSZWFjaGFibGVQb2ludFJhbmdlPikge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0ub25EZXN0cm95RXZlbnQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICBpdGVtLmVsZW1lbnQgPSB0aGlzLmNyZWF0ZVBhdGhBbmRBcnJvd0VsZW1lbnQoaXRlbS5pZCkuY2lyY2xlRW5kRWxlbWVudDtcbiAgICAgICAgdGhpcy5zdmdFbGVtZW50LmFwcGVuZChpdGVtLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLnVwZGF0ZUF0dHJpYnV0ZUNpcmNsZShpdGVtLmVsZW1lbnQsIGl0ZW0uaWQsIGl0ZW0sIGl0ZW0uc3R5bGUpO1xuICAgICAgICB0aGlzLm9uRHJhd0xpbmVFbmQucGlwZSh0YWtlVW50aWwoaXRlbS5vbkRlc3Ryb3lFdmVudCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZShldmVudERhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZGF0YUxpbmUsIGV2ZW50IH0gPSBldmVudERhdGE7XG5cbiAgICAgICAgICBpZiAoIWNoZWNrTW91c2VPdmVySW5Db250YWluZXIoZXZlbnQsIGl0ZW0uZWxlbWVudCBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50KSB8fCAhZGF0YUxpbmUucmVmIHx8ICFpdGVtLnJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGl0ZW0uaWRDb25uZWN0ZWQgPSBldmVudERhdGEuZGF0YUxpbmUuaWQ7XG4gICAgICAgICAgZXZlbnREYXRhLmRhdGFMaW5lLmlkQ29ubmVjdGVkID0gaXRlbS5pZDtcbiAgICAgICAgICB0aGlzLm91dENvbm5lY3RlZC5lbWl0KHtcbiAgICAgICAgICAgIGRhdGFMaW5lOiBkYXRhTGluZS5yZWYsXG4gICAgICAgICAgICBkYXRhUmVhY2hhYmxlUG9pbnRSYW5nZTogaXRlbS5yZWZcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlVmlld0JveCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVFbGVtZW50T2ZQb2ludHMocG9pbnRzOiBJUG9pbnRzKSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHBvaW50cy5vbkRlc3Ryb3lFdmVudD8ubmV4dCgpO1xuICAgICAgcG9pbnRzLm9uRGVzdHJveUV2ZW50Py5jb21wbGV0ZSgpO1xuICAgICAgcG9pbnRzPy5wYXRoRWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgICBwb2ludHM/LmFycm93RWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgICBwb2ludHM/LmNpcmNsZVN0YXJ0RWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgICBwb2ludHMuY2lyY2xlRW5kRWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRyYXdMaW5lKGRhdGE6IElEcmF3TGluZURhdGFJbnB1dCkge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCB7IHBvaW50cywgbW9kZSB9ID0gZGF0YTtcbiAgICAgIGxldCB7IGN1cnZlIH0gPSBkYXRhPy5saW5lU3R5bGUgfHwge307XG5cbiAgICAgIGlmIChtb2RlICE9PSAncXVhcnQtaW4nKSB7XG4gICAgICAgIGN1cnZlID0gY3VydmUgPz8gMTA7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmVMZW5ndGhTZXBhcmF0ZWRQb2ludHMgPSBwb2ludHMuc2VwYXJhdGVkUG9pbnRzPy5sZW5ndGg7XG5cbiAgICAgIHBvaW50cy5zZXBhcmF0ZWRQb2ludHM/LmZvckVhY2goc2VwYXJhdGVkUG9pbnRzID0+IHRoaXMucmVtb3ZlRWxlbWVudE9mUG9pbnRzKHNlcGFyYXRlZFBvaW50cykpO1xuICAgICAgcG9pbnRzLnNlcGFyYXRlZFBvaW50cyA9IFtdO1xuICAgICAgTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLlNUQVJUX01PREUgPSAncmlnaHQtbGVmdCc7XG4gICAgICBpZiAoZGF0YS5zdGFydEVuZE1vZGUpIHtcbiAgICAgICAgTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLlNUQVJUX01PREUgPSBkYXRhLnN0YXJ0RW5kTW9kZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FsY3VsYXRvclNlcGFyYXRlZFBvaW50cyhkYXRhLmlkLCBwb2ludHMsIGN1cnZlIHx8IDEwLCBwb2ludHMuc2VwYXJhdGVkUG9pbnRzLCBwb2ludHMub2JzdGFjbGVSZWN0IHx8IFtdKTtcbiAgICAgIGlmICghcHJlTGVuZ3RoU2VwYXJhdGVkUG9pbnRzICYmIHBvaW50cy5zZXBhcmF0ZWRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudE9mUG9pbnRzKHBvaW50cyk7XG4gICAgICAgIGNvbnN0IHsgcGF0aEVsZW1lbnQsIGFycm93RWxlbWVudCB9ID0gdGhpcy5jcmVhdGVQYXRoQW5kQXJyb3dFbGVtZW50KGRhdGEuaWQpO1xuXG4gICAgICAgIHBvaW50cy5wYXRoRWxlbWVudCA9IHBhdGhFbGVtZW50O1xuICAgICAgICBwb2ludHMuYXJyb3dFbGVtZW50ID0gYXJyb3dFbGVtZW50O1xuICAgICAgICBwb2ludHMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghcG9pbnRzLnNlcGFyYXRlZFBvaW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYnVpbGRQYXRoQW5kRHJhdyhkYXRhLCBwb2ludHMsIG1vZGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSAnJztcblxuICAgICAgcG9pbnRzLnNlcGFyYXRlZFBvaW50cy5mb3JFYWNoKHNlcGFyYXRlZFBvaW50cyA9PiB7XG4gICAgICAgIHBhdGggKz0gdGhpcy5idWlsZFBhdGhBbmREcmF3U2VwYXJhdGVkUG9pbnRzKGRhdGEsIHNlcGFyYXRlZFBvaW50cywgc2VwYXJhdGVkUG9pbnRzLm1vZGUgfHwgbW9kZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGhFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJwYXRoXCIpO1xuXG4gICAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kKHBhdGhFbGVtZW50KTtcbiAgICAgIHBvaW50cy5wYXRoRWxlbWVudCA9IHBhdGhFbGVtZW50O1xuICAgICAgY29uc3Qgc3R5bGVDb25maWcgPSB7XG4gICAgICAgIHN0cm9rZTogZGF0YS5saW5lU3R5bGU/LnN0cm9rZSA/PyAnIzlDQTJBRCcsXG4gICAgICAgIHN0cm9rZURhc2hhcnJheTogZGF0YS5saW5lU3R5bGU/LnN0cm9rZURhc2hhcnJheSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IGRhdGEubGluZVN0eWxlPy5zdHJva2VXaWR0aCA/PyAnMXB4JyxcbiAgICAgICAgZmlsbDogZGF0YS5saW5lU3R5bGU/LmZpbGwgPz8gJ25vbmUnLFxuICAgICAgICBjdXJ2ZTogZGF0YS5saW5lU3R5bGU/LmN1cnZlID8/IDEwLFxuICAgICAgICBkaXN0YW5jZVBvaW50OiBkYXRhLmxpbmVTdHlsZT8uZGlzdGFuY2VQb2ludCA/PyAxMFxuICAgICAgfTtcblxuICAgICAgcG9pbnRzLnBhdGhFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0eWxlQ29uZmlnLnN0cm9rZSk7XG4gICAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnZmlsbCcsIHN0eWxlQ29uZmlnLmZpbGwpO1xuICAgICAgcG9pbnRzLnBhdGhFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIHN0eWxlQ29uZmlnLnN0cm9rZVdpZHRoKTtcbiAgICAgIGlmIChzdHlsZUNvbmZpZy5zdHJva2VEYXNoYXJyYXkpIHtcbiAgICAgICAgcG9pbnRzLnBhdGhFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNoYXJyYXknLCBzdHlsZUNvbmZpZy5zdHJva2VEYXNoYXJyYXkpXG4gICAgICB9XG4gICAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnZCcsIHBhdGgpO1xuICAgICAgdGhpcy5kcmF3UmVjdEFuZEluaXRFdmVudChkYXRhLCBtb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlld0JveCh2aWV3Qm94Q29uZmlnPzogSVZpZXdCb3hDb25maWcpIHtcbiAgICBpZiAodmlld0JveENvbmZpZykge1xuICAgICAgdGhpcy52aWV3Qm94Q29uZmlnID0gdmlld0JveENvbmZpZztcbiAgICB9XG4gICAgY29uc3QgeFBvaW50czogU2V0PG51bWJlcj4gPSBuZXcgU2V0KFswXSk7XG4gICAgY29uc3QgeVBvaW50czogU2V0PG51bWJlcj4gPSBuZXcgU2V0KFswXSk7XG5cbiAgICBjb25zdCBhZGRQb2ludHMgPSAocG9pbnRzOiBJUG9pbnRzKSA9PiB7XG4gICAgICB4UG9pbnRzLmFkZChwb2ludHMuc3RhcnQueCk7XG4gICAgICB4UG9pbnRzLmFkZChwb2ludHMuZW5kLngpO1xuICAgICAgeVBvaW50cy5hZGQocG9pbnRzLnN0YXJ0LnkpO1xuICAgICAgeVBvaW50cy5hZGQocG9pbnRzLmVuZC55KTtcbiAgICB9O1xuXG4gICAgdGhpcy5kYXRhRHJhdz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IGl0ZW0ucG9pbnRzO1xuXG4gICAgICBhZGRQb2ludHMocG9pbnRzKTtcbiAgICAgIHBvaW50cy5zZXBhcmF0ZWRQb2ludHM/LmZvckVhY2goc2VwYXJhdGVkUG9pbnRzID0+IGFkZFBvaW50cyhzZXBhcmF0ZWRQb2ludHMpKTtcbiAgICAgIHBvaW50cy5vYnN0YWNsZVJlY3Q/LmZvckVhY2gob2JzdGFjbGVSZWN0ID0+IHtcbiAgICAgICAgYWRkUG9pbnRzKHtcbiAgICAgICAgICBzdGFydDogeyB4OiBvYnN0YWNsZVJlY3QueCAtIChvYnN0YWNsZVJlY3QuZ2FwWE9ic3RhY2xlUmVjdCB8fCA4KSwgeTogb2JzdGFjbGVSZWN0LnkgLSAob2JzdGFjbGVSZWN0LmdhcFlPYnN0YWNsZVJlY3QgfHwgOCkgfSxcbiAgICAgICAgICBlbmQ6IHsgeDogb2JzdGFjbGVSZWN0LnggKyBvYnN0YWNsZVJlY3Qud2lkdGggKyAob2JzdGFjbGVSZWN0LmdhcFhPYnN0YWNsZVJlY3QgfHwgOCkgKiAyLCB5OiBvYnN0YWNsZVJlY3QueSArIG9ic3RhY2xlUmVjdC5oZWlnaHQgKyAob2JzdGFjbGVSZWN0LmdhcFlPYnN0YWNsZVJlY3QgfHwgOCkgKiAyIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHhNYXggPSB0aGlzLnZpZXdCb3hDb25maWc/LndpZHRoID8/ICh4UG9pbnRzLnNpemUgPyBNYXRoLm1heCguLi54UG9pbnRzKSA6IDApICsgMTQ7XG4gICAgY29uc3QgeU1heCA9IHRoaXMudmlld0JveENvbmZpZz8uaGVpZ2h0ID8/ICh5UG9pbnRzLnNpemUgPyBNYXRoLm1heCguLi55UG9pbnRzKSA6IDApICsgMTQ7XG5cbiAgICBpZiAoIXRoaXMudmlld0JveENvbmZpZz8uaWdub3JlVmlld0JveCkge1xuICAgICAgY29uc3QgcmVjdFN2Z0VsZW1lbnQgPSB0aGlzLnN2Z0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHRoaXMuc3ZnRWxlbWVudD8uc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgYCR7dGhpcy52aWV3Qm94Q29uZmlnPy5taW5YID8/IHJlY3RTdmdFbGVtZW50Lnh9ICR7dGhpcy52aWV3Qm94Q29uZmlnPy5taW5ZID8/IHJlY3RTdmdFbGVtZW50Lnl9ICR7eE1heH0gJHt5TWF4fWApO1xuICAgIH1cbiAgICB0aGlzLnN2Z0VsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBgJHt4TWF4ID8/IDB9YCk7XG4gICAgdGhpcy5zdmdFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAke3lNYXggPz8gMH1gKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNQb2ludEluc2lkZVNxdWFyZShwb2ludDogSVBvaW50LCBzcXVhcmU6IElSZWN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBwb2ludDtcbiAgICBjb25zdCB7IHg6IHNxdWFyZVgsIHk6IHNxdWFyZVksIHdpZHRoLCBoZWlnaHQgfSA9IHNxdWFyZTtcblxuICAgIHJldHVybiB4ID49IHNxdWFyZVggJiYgeCA8PSBzcXVhcmVYICsgd2lkdGggJiYgeSA+PSBzcXVhcmVZICYmIHkgPD0gc3F1YXJlWSArIGhlaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRvclNlcGFyYXRlZFBvaW50cyhuYW1lOiBzdHJpbmcsIHBvaW50czogSVBvaW50cywgY3VydmU6IG51bWJlciwgc2VwYXJhdGVkUG9pbnRzOiBBcnJheTxJUG9pbnRzPiwgb2JzdGFjbGVSZWN0czogQXJyYXk8SVJlY3Q+KSB7XG4gICAgaWYgKCFvYnN0YWNsZVJlY3RzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRTdGFydCA9IG9ic3RhY2xlUmVjdHMuZmluZChpdGVtID0+IHRoaXMuaXNQb2ludEluc2lkZVNxdWFyZShwb2ludHMuc3RhcnQsIGl0ZW0pKTtcbiAgICBjb25zdCBlbGVtZW50RW5kID0gb2JzdGFjbGVSZWN0cy5maW5kKGl0ZW0gPT4gdGhpcy5pc1BvaW50SW5zaWRlU3F1YXJlKHBvaW50cy5lbmQsIGl0ZW0pKTtcblxuICAgIGlmICh0aGlzLnZpZXdCb3hDb25maWc/Lm1hcmdpbkJldHdlZW5FbGVtZW50KSB7XG4gICAgICBNb0NhbnZhc0Nvbm5lY3ROYXZpZ2F0aW9uTmV3RWxlbWVudFV0aWwuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCA9IHRoaXMudmlld0JveENvbmZpZz8ubWFyZ2luQmV0d2VlbkVsZW1lbnQgPz8gMzI7XG4gICAgfVxuICAgIE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5zZXRYWUNvbm5lY3RFbGVtZW50cyhlbGVtZW50U3RhcnQgPz8geyAuLi5wb2ludHMuc3RhcnQsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfSwgZWxlbWVudEVuZCA/PyB7IC4uLnBvaW50cy5lbmQsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfSwgb2JzdGFjbGVSZWN0cywgc2VwYXJhdGVkUG9pbnRzLCBjdXJ2ZSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGF0aEFuZERyYXcoZGF0YTogSURyYXdMaW5lRGF0YUlucHV0LCBwb2ludHM6IElQb2ludHMsIG1vZGU/OiBUWVBFX01PREUpIHtcbiAgICBsZXQgZFBhdGggPSB7fSBhcyBJQXR0cmlidXRlRE9uUGF0aDtcbiAgICBjb25zdCBzdHlsZUNvbmZpZyA9IHtcbiAgICAgIHN0cm9rZTogZGF0YS5saW5lU3R5bGU/LnN0cm9rZSA/PyAnIzlDQTJBRCcsXG4gICAgICBzdHJva2VEYXNoYXJyYXk6IGRhdGEubGluZVN0eWxlPy5zdHJva2VEYXNoYXJyYXksXG4gICAgICBzdHJva2VXaWR0aDogZGF0YS5saW5lU3R5bGU/LnN0cm9rZVdpZHRoID8/ICcxcHgnLFxuICAgICAgZmlsbDogZGF0YS5saW5lU3R5bGU/LmZpbGwgPz8gJ25vbmUnLFxuICAgICAgY3VydmU6IGRhdGEubGluZVN0eWxlPy5jdXJ2ZSA/PyAxMCxcbiAgICAgIGRpc3RhbmNlUG9pbnQ6IGRhdGEubGluZVN0eWxlPy5kaXN0YW5jZVBvaW50ID8/IDEwXG4gICAgfTtcblxuICAgIHBvaW50cy5wYXRoRWxlbWVudD8uc2V0QXR0cmlidXRlKCdzdHJva2UnLCBzdHlsZUNvbmZpZy5zdHJva2UpO1xuICAgIHBvaW50cy5wYXRoRWxlbWVudD8uc2V0QXR0cmlidXRlKCdmaWxsJywgc3R5bGVDb25maWcuZmlsbCk7XG4gICAgcG9pbnRzLnBhdGhFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIHN0eWxlQ29uZmlnLnN0cm9rZVdpZHRoKTtcbiAgICBpZiAoc3R5bGVDb25maWcuc3Ryb2tlRGFzaGFycmF5KSB7XG4gICAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsIHN0eWxlQ29uZmlnLnN0cm9rZURhc2hhcnJheSk7XG4gICAgfVxuICAgIGxldCB7IGN1cnZlLCBkaXN0YW5jZVBvaW50IH0gPSBzdHlsZUNvbmZpZztcblxuICAgIG1vZGUgPSBtb2RlIHx8IFwicXVhcnQtaW5cIjtcbiAgICBpZiAobW9kZSAhPT0gJ3F1YXJ0LWluJykge1xuICAgICAgY3VydmUgPSBjdXJ2ZSA/PyAxMDtcbiAgICAgIGRpc3RhbmNlUG9pbnQgPSBkaXN0YW5jZVBvaW50ID8/IDEwO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3F1YXJ0LWluJyB8fCBwb2ludHMuc3RhcnQueCA9PT0gcG9pbnRzLmVuZC54IHx8IHBvaW50cy5zdGFydC55ID09PSBwb2ludHMuZW5kLnkpIHtcbiAgICAgIHRoaXMuZHJhd0JhbGFuY2VkQ3VydmUoZFBhdGgsIHBvaW50cyk7XG5cbiAgICAgIGlmIChtb2RlID09PSAncXVhcnQtaW4nKSB7XG4gICAgICAgIGRQYXRoID0ge30gYXMgSUF0dHJpYnV0ZURPblBhdGg7XG4gICAgICAgIHRoaXMuZHJhd0JlbmRCb3RoRW5kc0N1cnZlKGRQYXRoLCBwb2ludHMpO1xuICAgICAgfVxuICAgICAgcG9pbnRzLnBhdGhFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2QnLCB0aGlzLmJ1aWxEQXR0cmlidXRlVG9TdHJpbmcoZFBhdGgpKTtcbiAgICAgIHRoaXMuZHJhd1JlY3RBbmRJbml0RXZlbnQoZGF0YSwgbW9kZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jYWxjdWxhdG9yRGlzdGFuY2VQb2ludEFuZEN1cnZlKHBvaW50cywgZGlzdGFuY2VQb2ludCwgY3VydmUsIG1vZGUpO1xuXG4gICAgZGlzdGFuY2VQb2ludCA9IHJlc3VsdC5kaXN0YW5jZVBvaW50O1xuICAgIGN1cnZlID0gcmVzdWx0LmN1cnZlO1xuXG4gICAgdGhpcy5idWlsZERBdHRyaWJ1dGVCeVBvaW50RW5kTW9kZUhvcml6b250YWwoZFBhdGgsIHBvaW50cywgZGlzdGFuY2VQb2ludCB8fCAwLCBjdXJ2ZSB8fCAwLCBtb2RlKTtcbiAgICB0aGlzLmJ1aWxkREF0dHJpYnV0ZUJ5UG9pbnRFbmRNb2RlVmVydGljYWwoZFBhdGgsIHBvaW50cywgZGlzdGFuY2VQb2ludCB8fCAwLCBjdXJ2ZSB8fCAwLCBtb2RlKTtcbiAgICBwb2ludHMucGF0aEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnZCcsIHRoaXMuYnVpbERBdHRyaWJ1dGVUb1N0cmluZyhkUGF0aCkpO1xuICAgIHRoaXMuZHJhd1JlY3RBbmRJbml0RXZlbnQoZGF0YSwgbW9kZSk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0b3JEaXN0YW5jZVBvaW50QW5kQ3VydmUocG9pbnRzOiBJUG9pbnRzLCBkaXN0YW5jZVBvaW50OiBudW1iZXIsIGN1cnZlOiBudW1iZXIsIG1vZGU6IFRZUEVfTU9ERSkge1xuICAgIGlmICgoIW1vZGUuaW5jbHVkZXMoJ3ZlcnRpY2FsJykgJiYgIW1vZGUuaW5jbHVkZXMoJ2hvcml6b250YWwnKSkpIHtcbiAgICAgIHJldHVybiB7IGN1cnZlLCBkaXN0YW5jZVBvaW50IH07XG4gICAgfVxuICAgIGNvbnN0IGdhcFggPSBNYXRoLmFicyhwb2ludHMuc3RhcnQueCAtIHBvaW50cy5lbmQueCk7XG4gICAgY29uc3QgZ2FwWSA9IE1hdGguYWJzKHBvaW50cy5zdGFydC55IC0gcG9pbnRzLmVuZC55KTtcbiAgICBjb25zdCBtdWx0aXBsaWVyQ3VydmUgPSBtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgPyAxIDogMjtcbiAgICBjb25zdCBtdWx0aXBsaWVyRGlzdGFuY2UgPSBtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgPyAyIDogMTtcblxuICAgIGlmICghbW9kZS5pbmNsdWRlcygnc2luZ2xlLWN1cnZlJykpIHtcbiAgICAgIGlmIChnYXBYIDwgZGlzdGFuY2VQb2ludCAqIG11bHRpcGxpZXJEaXN0YW5jZSArIGN1cnZlICogbXVsdGlwbGllckN1cnZlKSB7XG4gICAgICAgIGRpc3RhbmNlUG9pbnQgPSBjdXJ2ZSA9IGdhcFggLyAzO1xuICAgICAgfVxuICAgICAgaWYgKGdhcFkgPCBkaXN0YW5jZVBvaW50ICogbXVsdGlwbGllckRpc3RhbmNlICsgY3VydmUgKiBtdWx0aXBsaWVyQ3VydmUpIHtcbiAgICAgICAgZGlzdGFuY2VQb2ludCA9IGN1cnZlID0gZ2FwWSAvIDM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGN1cnZlLCBkaXN0YW5jZVBvaW50IH07XG4gICAgfVxuICAgIGNvbnN0IG1pbkdhcCA9IE1hdGgubWluKGdhcFgsIGdhcFkpO1xuXG4gICAgaWYgKG1pbkdhcCA8IGRpc3RhbmNlUG9pbnQpIHtcbiAgICAgIGRpc3RhbmNlUG9pbnQgPSBtaW5HYXA7XG4gICAgfVxuICAgIGlmIChtaW5HYXAgPCBjdXJ2ZSkge1xuICAgICAgY3VydmUgPSBtaW5HYXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY3VydmUsIGRpc3RhbmNlUG9pbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1JlY3RBbmRJbml0RXZlbnQoZGF0YTogSURyYXdMaW5lRGF0YUlucHV0LCBtb2RlOiBUWVBFX01PREUpIHtcbiAgICBjb25zdCBwb2ludHMgPSBkYXRhLnBvaW50cztcblxuICAgIHRoaXMudXBkYXRlU3R5bGVBcnJvdyhwb2ludHMsIG1vZGUsIGRhdGEpO1xuICAgIGlmIChkYXRhLnN0YXJ0Q2lyY2xlICYmIHBvaW50cy5jaXJjbGVTdGFydEVsZW1lbnQpIHtcbiAgICAgIHRoaXMudXBkYXRlQXR0cmlidXRlQ2lyY2xlKHBvaW50cy5jaXJjbGVTdGFydEVsZW1lbnQsIGRhdGEuaWQsIHBvaW50cy5zdGFydCwgZGF0YS5zdGFydENpcmNsZVN0eWxlKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuZW5kQ2lyY2xlICYmIHBvaW50cy5jaXJjbGVFbmRFbGVtZW50KSB7XG4gICAgICB0aGlzLnVwZGF0ZUF0dHJpYnV0ZUNpcmNsZShwb2ludHMuY2lyY2xlRW5kRWxlbWVudCwgZGF0YS5pZCwgcG9pbnRzLmVuZCwgZGF0YS5lbmRDaXJjbGVTdHlsZSk7XG4gICAgfVxuICAgIHRoaXMuaW5pdEV2ZW50KGRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QmFsYW5jZWRDdXJ2ZShkUGF0aDogSUF0dHJpYnV0ZURPblBhdGgsIHBvaW50czogSVBvaW50cykge1xuICAgIGRQYXRoLk0gPSB7IHg6IHBvaW50cy5zdGFydC54LCB5OiBwb2ludHMuc3RhcnQueSB9O1xuICAgIGRQYXRoLlEgPSBbeyB4OiBwb2ludHMuc3RhcnQueCArIChwb2ludHMuZW5kLnggLSBwb2ludHMuc3RhcnQueCkgLyA0LCB5OiBwb2ludHMuc3RhcnQueSArIChwb2ludHMuZW5kLnkgLSBwb2ludHMuc3RhcnQueSkgLyAyIH0sIHsgeDogcG9pbnRzLnN0YXJ0LnggKyAocG9pbnRzLmVuZC54IC0gcG9pbnRzLnN0YXJ0LngpIC8gMiwgeTogcG9pbnRzLnN0YXJ0LnkgKyAocG9pbnRzLmVuZC55IC0gcG9pbnRzLnN0YXJ0LnkpIC8gMiB9XTtcbiAgICBkUGF0aC5RMiA9IFt7IHg6IHBvaW50cy5lbmQueCAtIChwb2ludHMuZW5kLnggLSBwb2ludHMuc3RhcnQueCkgLyA0LCB5OiBwb2ludHMuc3RhcnQueSArIChwb2ludHMuZW5kLnkgLSBwb2ludHMuc3RhcnQueSkgLyAyIH0sIHsgeDogcG9pbnRzLmVuZC54LCB5OiBwb2ludHMuZW5kLnkgfV07XG4gIH1cblxuICBwcml2YXRlIGRyYXdCZW5kQm90aEVuZHNDdXJ2ZShkUGF0aDogSUF0dHJpYnV0ZURPblBhdGgsIHBvaW50czogSVBvaW50cykge1xuICAgIGNvbnN0IHBvaW50WEN1cnZlID0gKHBvaW50cy5zdGFydC54ICsgcG9pbnRzLmVuZC54KSAqIDAuNTtcbiAgICBjb25zdCBwb2ludENvbnRyb2wxID0geyB4OiBwb2ludFhDdXJ2ZSwgeTogcG9pbnRzLnN0YXJ0LnkgfTtcbiAgICBjb25zdCBwb2ludENvbnRyb2wyID0geyB4OiBwb2ludFhDdXJ2ZSwgeTogcG9pbnRzLmVuZC55IH07XG5cbiAgICBkUGF0aC5NID0geyB4OiBwb2ludHMuc3RhcnQueCwgeTogcG9pbnRzLnN0YXJ0LnkgfTtcbiAgICBkUGF0aC5DID0gW3sgeDogcG9pbnRDb250cm9sMS54LCB5OiBwb2ludENvbnRyb2wxLnkgfSwgeyB4OiBwb2ludENvbnRyb2wyLngsIHk6IHBvaW50Q29udHJvbDIueSB9LCB7IHg6IHBvaW50cy5lbmQueCwgeTogcG9pbnRzLmVuZC55IH1dO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERBdHRyaWJ1dGVCeVBvaW50RW5kTW9kZUhvcml6b250YWwoZFBhdGg6IElBdHRyaWJ1dGVET25QYXRoLCBwb2ludHM6IElQb2ludHMsIGRpc3RhbmNlUG9pbnQ6IG51bWJlciwgY3VydmU6IG51bWJlciwgbW9kZTogVFlQRV9NT0RFKSB7XG4gICAgaWYgKCFtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlwbGllclggPSBwb2ludHMuc3RhcnQueCA8IHBvaW50cy5lbmQueCA/IC0xIDogMTtcbiAgICBjb25zdCBtdWx0aXBsaWVyWSA9IHBvaW50cy5zdGFydC55IDwgcG9pbnRzLmVuZC55ID8gMSA6IC0xO1xuICAgIGNvbnN0IHJldmVyc2VNdWx0aXBsaWVyID0gLTE7XG5cbiAgICBkUGF0aC5NID0geyB4OiBwb2ludHMuc3RhcnQueCwgeTogcG9pbnRzLnN0YXJ0LnkgfTtcbiAgICBkUGF0aC5MID0geyB4OiBwb2ludHMuZW5kLnggKyAoKGRpc3RhbmNlUG9pbnQgKiAyICsgY3VydmUpICogbXVsdGlwbGllclgpLCB5OiBwb2ludHMuc3RhcnQueSB9O1xuICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsLXNpbmdsZScpKSB7XG4gICAgICBkUGF0aC5MLnggPSBwb2ludHMuZW5kLnggKyAoY3VydmUgKiBtdWx0aXBsaWVyWCk7XG4gICAgfVxuICAgIGRQYXRoLlEgPSBbeyB4OiBkUGF0aC5MLnggKyAoY3VydmUgKiBtdWx0aXBsaWVyWCAqIHJldmVyc2VNdWx0aXBsaWVyKSwgeTogcG9pbnRzLnN0YXJ0LnkgfSwgeyB4OiBkUGF0aC5MLnggKyAoY3VydmUgKiBtdWx0aXBsaWVyWCAqIHJldmVyc2VNdWx0aXBsaWVyKSwgeTogcG9pbnRzLnN0YXJ0LnkgKyAoY3VydmUgKiBtdWx0aXBsaWVyWSkgfV07XG4gICAgZFBhdGguTDIgPSB7IHg6IGRQYXRoLlFbMV0ueCwgeTogcG9pbnRzLmVuZC55ICsgKGN1cnZlICogbXVsdGlwbGllclkgKiByZXZlcnNlTXVsdGlwbGllcikgfTtcbiAgICBpZiAobW9kZS5pbmNsdWRlcygnaG9yaXpvbnRhbC1zaW5nbGUnKSkge1xuICAgICAgZFBhdGguTDIgPSBwb2ludHMuZW5kO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBkUGF0aC5RMiA9IFt7IHg6IGRQYXRoLkwyLngsIHk6IHBvaW50cy5lbmQueSB9LCB7IHg6IGRQYXRoLkwyLnggKyAoZGlzdGFuY2VQb2ludCAqIG11bHRpcGxpZXJYICogcmV2ZXJzZU11bHRpcGxpZXIpLCB5OiBwb2ludHMuZW5kLnkgfV07XG4gICAgICBkUGF0aC5MMyA9IHsgeDogcG9pbnRzLmVuZC54LCB5OiBwb2ludHMuZW5kLnkgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkREF0dHJpYnV0ZUJ5UG9pbnRFbmRNb2RlVmVydGljYWwoZFBhdGg6IElBdHRyaWJ1dGVET25QYXRoLCBwb2ludHM6IElQb2ludHMsIGRpc3RhbmNlUG9pbnQ6IG51bWJlciwgY3VydmU6IG51bWJlciwgbW9kZTogVFlQRV9NT0RFKSB7XG4gICAgaWYgKCFtb2RlLmluY2x1ZGVzKCd2ZXJ0aWNhbCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG11bHRpcGxpZXJYID0gcG9pbnRzLnN0YXJ0LnggPCBwb2ludHMuZW5kLnggPyAtMSA6IDE7XG4gICAgY29uc3QgbXVsdGlwbGllclkgPSBwb2ludHMuc3RhcnQueSA8IHBvaW50cy5lbmQueSA/IDEgOiAtMTtcbiAgICBjb25zdCByZXZlcnNlTXVsdGlwbGllciA9IC0xO1xuXG4gICAgZFBhdGguTSA9IHBvaW50cy5zdGFydDtcbiAgICBkUGF0aC5MID0geyB4OiBwb2ludHMuc3RhcnQueCwgeTogcG9pbnRzLnN0YXJ0LnkgKyAoZGlzdGFuY2VQb2ludCAqIG11bHRpcGxpZXJZKSB9O1xuICAgIGlmIChtb2RlLmluY2x1ZGVzKCd2ZXJ0aWNhbC1zaW5nbGUnKSkge1xuICAgICAgZFBhdGguTC55ID0gcG9pbnRzLmVuZC55ICsgKGRpc3RhbmNlUG9pbnQgKiBtdWx0aXBsaWVyWSAqIHJldmVyc2VNdWx0aXBsaWVyKTtcbiAgICB9XG4gICAgZFBhdGguUSA9IFt7IHg6IGRQYXRoLkwueCwgeTogZFBhdGguTC55ICsgKGN1cnZlICogbXVsdGlwbGllclkpIH0sIHsgeDogZFBhdGguTC54ICsgKGN1cnZlICogbXVsdGlwbGllclggKiByZXZlcnNlTXVsdGlwbGllciksIHk6IGRQYXRoLkwueSArIChjdXJ2ZSAqIG11bHRpcGxpZXJZKSB9XTtcbiAgICBkUGF0aC5MMiA9IHsgeDogcG9pbnRzLmVuZC54ICsgKChjdXJ2ZSAqIDIpICogbXVsdGlwbGllclgpLCB5OiBkUGF0aC5RWzFdLnkgfTtcbiAgICBpZiAobW9kZS5pbmNsdWRlcygndmVydGljYWwtc2luZ2xlJykpIHtcbiAgICAgIGRQYXRoLkwyID0gcG9pbnRzLmVuZDtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIGRQYXRoLlEyID0gW3sgeDogcG9pbnRzLmVuZC54LCB5OiBkUGF0aC5MMi55IH0sIHsgeDogcG9pbnRzLmVuZC54LCB5OiBkUGF0aC5MMi55ICsgKGN1cnZlICogbXVsdGlwbGllclkpIH1dO1xuICAgICAgZFBhdGguTDMgPSB7IHg6IHBvaW50cy5lbmQueCwgeTogcG9pbnRzLmVuZC55IH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsREF0dHJpYnV0ZVRvU3RyaW5nKGRBdHRyaWJ1dGU6IElBdHRyaWJ1dGVET25QYXRoKTogc3RyaW5nIHtcbiAgICBsZXQgZFN0cmluZyA9ICcnO1xuXG4gICAgT2JqZWN0LmtleXMoZEF0dHJpYnV0ZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGdldChkQXR0cmlidXRlLCBrZXkgYXMga2V5b2YgSUF0dHJpYnV0ZURPblBhdGgpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBjb25zdCBbcG9pbnQxLCBwb2ludDIsIHBvaW50M10gPSBkYXRhO1xuXG4gICAgICAgIGRTdHJpbmcgPSBgJHtkU3RyaW5nfSR7a2V5LnJlcGxhY2UoL1xcZC9nLCAnJyl9JHtwb2ludDEueH0sJHtwb2ludDEueX0gJHtwb2ludDIueH0sJHtwb2ludDIueX0ke3BvaW50MyA/ICcgJyArIHBvaW50My54ICsgJywnICsgcG9pbnQzLnkgOiAnJ31cbiAgICAgICAgYDtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkU3RyaW5nID0gYCR7ZFN0cmluZ30ke2tleS5yZXBsYWNlKC9cXGQvZywgJycpfSR7ZGF0YT8ueH0sJHtkYXRhPy55fVxuICAgICAgYDtcbiAgICB9KTtcblxuICAgIHJldHVybiBkU3RyaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHlsZUFycm93KHBvaW50czogSVBvaW50cywgbW9kZTogVFlQRV9NT0RFLCBkYXRhOiBJRHJhd0xpbmVEYXRhSW5wdXQpIHtcbiAgICBpZiAoIXBvaW50cy5hcnJvd0VsZW1lbnQgfHwgZGF0YS5pZ25vcmVEcmF3QXJyb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVDb25maWcgPSB7XG4gICAgICBmaWxsOiBkYXRhLmFycm93U3R5bGU/LmZpbGwgPz8gJyM5Q0EyQUQnLFxuICAgICAgc3Ryb2tlOiBkYXRhLmFycm93U3R5bGU/LnN0cm9rZSA/PyAnbm9uZScsXG4gICAgICBzdHJva2VXaWR0aDogZGF0YS5hcnJvd1N0eWxlPy5zdHJva2VXaWR0aCA/PyAnMCcsXG4gICAgICB3aWR0aDogZGF0YS5hcnJvd1N0eWxlPy53aWR0aCA/PyA2LFxuICAgICAgaGVpZ2h0OiBkYXRhLmFycm93U3R5bGU/LmhlaWdodCA/PyA4XG4gICAgfTtcbiAgICBjb25zdCBwb2ludEVuZCA9IGNsb25lRGVlcChwb2ludHMuZW5kKTtcbiAgICBjb25zdCBhcnJvd0VsZW1lbnQgPSBwb2ludHMuYXJyb3dFbGVtZW50O1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRhdGEuYXJyb3dEaXJlY3Rpb24gfHwgdGhpcy5nZXREaXJlY3Rpb24ocG9pbnRzLCBkYXRhLnN0YXJ0RW5kTW9kZSk7XG5cblxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgaWYgKG1vZGUuaW5jbHVkZXMoJ2hvcml6b250YWwnKSB8fCBtb2RlLmluY2x1ZGVzKCd2ZXJ0aWNhbCcpKSB7XG4gICAgICAgICAgcG9pbnRFbmQueCAtPSBzdHlsZUNvbmZpZy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgYXJyb3dFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3BvaW50cycsIGAke3BvaW50RW5kLnh9LCR7cG9pbnRFbmQueSAtIHN0eWxlQ29uZmlnLndpZHRofSAgJHtwb2ludEVuZC54ICsgc3R5bGVDb25maWcuaGVpZ2h0fSwke3BvaW50RW5kLnl9ICR7cG9pbnRFbmQueH0sJHtwb2ludEVuZC55ICsgc3R5bGVDb25maWcud2lkdGh9IGApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgfHwgbW9kZS5pbmNsdWRlcygndmVydGljYWwnKSkge1xuICAgICAgICAgIHBvaW50RW5kLnggKz0gc3R5bGVDb25maWcuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGFycm93RWxlbWVudD8uc2V0QXR0cmlidXRlKCdwb2ludHMnLCBgJHtwb2ludEVuZC54fSwke3BvaW50RW5kLnkgLSBzdHlsZUNvbmZpZy53aWR0aH0gICR7cG9pbnRFbmQueCAtIHN0eWxlQ29uZmlnLmhlaWdodH0sJHtwb2ludEVuZC55fSAke3BvaW50RW5kLnh9LCR7cG9pbnRFbmQueSArIHN0eWxlQ29uZmlnLndpZHRofSBgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgfHwgbW9kZS5pbmNsdWRlcygndmVydGljYWwnKSkge1xuICAgICAgICAgIHBvaW50RW5kLnkgKz0gc3R5bGVDb25maWcuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGFycm93RWxlbWVudD8uc2V0QXR0cmlidXRlKCdwb2ludHMnLCBgJHtwb2ludEVuZC54IC0gc3R5bGVDb25maWcud2lkdGh9LCR7cG9pbnRFbmQueX0gICR7cG9pbnRFbmQueH0sJHtwb2ludEVuZC55IC0gc3R5bGVDb25maWcuaGVpZ2h0fSAke3BvaW50RW5kLnggKyBzdHlsZUNvbmZpZy53aWR0aH0sJHtwb2ludEVuZC55fSBgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIGlmIChtb2RlLmluY2x1ZGVzKCdob3Jpem9udGFsJykgfHwgbW9kZS5pbmNsdWRlcygndmVydGljYWwnKSkge1xuICAgICAgICAgIHBvaW50RW5kLnkgLT0gc3R5bGVDb25maWcuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGFycm93RWxlbWVudD8uc2V0QXR0cmlidXRlKCdwb2ludHMnLCBgJHtwb2ludEVuZC54IC0gc3R5bGVDb25maWcud2lkdGh9LCR7cG9pbnRFbmQueX0gICR7cG9pbnRFbmQueH0sJHtwb2ludEVuZC55ICsgc3R5bGVDb25maWcuaGVpZ2h0fSAke3BvaW50RW5kLnggKyBzdHlsZUNvbmZpZy53aWR0aH0sJHtwb2ludEVuZC55fSBgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXJyb3dFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBzdHlsZUNvbmZpZy5maWxsKTtcbiAgICBhcnJvd0VsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgc3R5bGVDb25maWcuc3Ryb2tlKTtcbiAgICBhcnJvd0VsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgc3R5bGVDb25maWcuc3Ryb2tlV2lkdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBdHRyaWJ1dGVDaXJjbGUoY2lyY2xlRWxlbWVudDogU1ZHQ2lyY2xlRWxlbWVudCwgbmFtZTogc3RyaW5nLCBwb2ludDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBjaXJjbGVTdHlsZT86IElDaXJjbGVTdHlsZSkge1xuICAgIGNpcmNsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCduYW1lJywgbmFtZSk7XG4gICAgY2lyY2xlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2N4JywgYCR7cG9pbnQueH1gKTtcbiAgICBjaXJjbGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnY3knLCBgJHtwb2ludC55fWApO1xuICAgIGNpcmNsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdyJywgYCR7Y2lyY2xlU3R5bGU/LnIgPz8gMn1gKTtcbiAgICBjaXJjbGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZmlsbCcsIGAke2NpcmNsZVN0eWxlPy5maWxsID8/ICdncmVlbid9YCk7XG4gICAgY2lyY2xlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIGAke2NpcmNsZVN0eWxlPy5zdHJva2UgPz8gJyM5Q0EyQUQnfWApO1xuICAgIGNpcmNsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBgJHtjaXJjbGVTdHlsZT8uc3Ryb2tlV2lkdGggPz8gJzFweCd9YCk7XG5cbiAgICByZXR1cm4gY2lyY2xlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlyZWN0aW9uKHBvaW50czogSVBvaW50cywgc3RhcnRFbmRNb2RlOiAncmlnaHQtbGVmdCcgfCAnYm90dG9tLXRvcCcgfCAnYm90dG9tLWxlZnQnIHwgdW5kZWZpbmVkKTogVFlQRV9ESVJFQ1RJT04ge1xuICAgIGxldCBwb2ludFN0YXJ0ID0geyAuLi5wb2ludHMuc3RhcnQgfTtcblxuICAgIGlmIChwb2ludHMuc2VwYXJhdGVkUG9pbnRzKSB7XG4gICAgICBjb25zdCBsaW5lVG9FbmQgPSBwb2ludHMuc2VwYXJhdGVkUG9pbnRzLmZpbmQoaXRlbSA9PiBpdGVtLmVuZC54ID09PSBwb2ludHMuZW5kLnggJiYgaXRlbS5lbmQueSA9PT0gcG9pbnRzLmVuZC55KTtcblxuICAgICAgaWYgKGxpbmVUb0VuZCkge1xuICAgICAgICBwb2ludFN0YXJ0ID0gbGluZVRvRW5kLnN0YXJ0O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtb2RlSG9yaXpvbnRhbCA9IHBvaW50U3RhcnQueCA8IHBvaW50cy5lbmQueCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgY29uc3QgbW9kZVZlcnRpY2FsID0gcG9pbnRTdGFydC55IDwgcG9pbnRzLmVuZC55ID8gJ2JvdHRvbScgOiAndG9wJztcblxuICAgIGlmICghc3RhcnRFbmRNb2RlKSB7XG4gICAgICBpZiAoTWF0aC5hYnMocG9pbnRzLmVuZC54IC0gcG9pbnRTdGFydC54KSA+IE1hdGguYWJzKHBvaW50cy5lbmQueSAtIHBvaW50U3RhcnQueSkpIHtcbiAgICAgICAgcmV0dXJuIG1vZGVIb3Jpem9udGFsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbW9kZVZlcnRpY2FsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc3RhcnRFbmRNb2RlKSB7XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiBtb2RlSG9yaXpvbnRhbDtcblxuICAgICAgY2FzZSAncmlnaHQtbGVmdCc6XG4gICAgICAgIHJldHVybiBtb2RlSG9yaXpvbnRhbDtcblxuICAgICAgY2FzZSAnYm90dG9tLXRvcCc6XG4gICAgICAgIHJldHVybiBtb2RlVmVydGljYWw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0RXZlbnQoZGF0YTogSURyYXdMaW5lRGF0YUlucHV0KSB7XG4gICAgY29uc3QgcG9pbnRzOiBJUG9pbnRzID0gZGF0YS5wb2ludHM7XG4gICAgbGV0IHByZUV2ZW50OiBNb3VzZUV2ZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKCghcG9pbnRzLmFycm93RWxlbWVudCAmJiAhcG9pbnRzLmNpcmNsZUVuZEVsZW1lbnQpIHx8ICFwb2ludHMub25EZXN0cm95RXZlbnQgfHwgcG9pbnRzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcG9pbnRzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICBjb25zdCBmdW5jdGlvbk1vdXNlVXAgPSAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHByZUV2ZW50KSB7XG4gICAgICAgIHByZUV2ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm9uRHJhd0xpbmVFbmQubmV4dCh7IGRhdGFMaW5lOiBkYXRhLCBldmVudDogbW91c2VFdmVudCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVyRHJhZyA9IChkcmFnTW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCFwcmVFdmVudCkge1xuICAgICAgICBwcmVFdmVudCA9IGRyYWdNb3VzZUV2ZW50O1xuICAgICAgfVxuICAgICAgY29uc3QgcG9pbnRFbmQgPSBjbG9uZURlZXAocG9pbnRzLmVuZCk7XG5cbiAgICAgIGNvbnN0IG1vdmVtZW50WCA9IGRyYWdNb3VzZUV2ZW50LmNsaWVudFggLSBwcmVFdmVudC5jbGllbnRYO1xuICAgICAgY29uc3QgbW92ZW1lbnRZID0gZHJhZ01vdXNlRXZlbnQuY2xpZW50WSAtIHByZUV2ZW50LmNsaWVudFk7XG5cbiAgICAgIHByZUV2ZW50ID0gZHJhZ01vdXNlRXZlbnQ7XG4gICAgICBwb2ludEVuZC54ICs9IG1vdmVtZW50WDtcbiAgICAgIHBvaW50RW5kLnkgKz0gbW92ZW1lbnRZO1xuICAgICAgaWYgKGRhdGEucG9pbnRzPy5vYnN0YWNsZVJlY3Q/Lmxlbmd0aCAmJiBkYXRhLnBvaW50cz8ub2JzdGFjbGVSZWN0LnNvbWUob2JzdGFjbGVSZWN0ID0+IHRoaXMuY2hlY2tQb2ludEluY2x1ZGVSZWN0KHBvaW50RW5kLCBvYnN0YWNsZVJlY3QpKSkge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBvaW50cy5lbmQueCA9IHBvaW50RW5kLng7XG4gICAgICBwb2ludHMuZW5kLnkgPSBwb2ludEVuZC55O1xuICAgICAgdGhpcy5kcmF3TGluZShkYXRhKTtcbiAgICAgIHRoaXMudXBkYXRlVmlld0JveCgpO1xuICAgIH07XG5cbiAgICBpZiAocG9pbnRzLmFycm93RWxlbWVudCkge1xuICAgICAgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50KHtcbiAgICAgICAgZWxlbWVudE1vdXNlRG93bjpwb2ludHMuYXJyb3dFbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgIGZ1bmN0aW9uTW91c2VVcDpmdW5jdGlvbk1vdXNlVXAsXG4gICAgICAgIG9uRGVzdHJveTp0aGlzLm9uRGVzdHJveVxuICAgICAgfSkucGlwZSh0YXAoaGFuZGxlckRyYWcpLCB0YWtlVW50aWwocG9pbnRzLm9uRGVzdHJveUV2ZW50KSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHBvaW50cy5jaXJjbGVFbmRFbGVtZW50KSB7XG4gICAgICBnZXREcmFnRXZlbnRCeUVsZW1lbnQoe1xuICAgICAgICBlbGVtZW50TW91c2VEb3duOnBvaW50cy5jaXJjbGVFbmRFbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgIGZ1bmN0aW9uTW91c2VVcDpmdW5jdGlvbk1vdXNlVXAsXG4gICAgICAgIG9uRGVzdHJveTp0aGlzLm9uRGVzdHJveSxcbiAgICAgIH0pLnBpcGUodGFwKGhhbmRsZXJEcmFnKSwgdGFrZVVudGlsKHBvaW50cy5vbkRlc3Ryb3lFdmVudCkpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tQb2ludEluY2x1ZGVSZWN0KHBvaW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0sIG9ic3RhY2xlUmVjdDogSVJlY3QpOiBib29sZWFuIHtcbiAgICBjb25zdCBnYXBEZWZhdWx0ID0gODtcblxuICAgIG9ic3RhY2xlUmVjdCA9IHtcbiAgICAgIHg6IG9ic3RhY2xlUmVjdC54IC0gKG9ic3RhY2xlUmVjdC5nYXBYT2JzdGFjbGVSZWN0IHx8IGdhcERlZmF1bHQpLFxuICAgICAgeTogb2JzdGFjbGVSZWN0LnkgLSAob2JzdGFjbGVSZWN0LmdhcFlPYnN0YWNsZVJlY3QgfHwgZ2FwRGVmYXVsdCksXG4gICAgICB3aWR0aDogb2JzdGFjbGVSZWN0LndpZHRoICsgKG9ic3RhY2xlUmVjdC5nYXBYT2JzdGFjbGVSZWN0IHx8IGdhcERlZmF1bHQpICogMixcbiAgICAgIGhlaWdodDogb2JzdGFjbGVSZWN0LmhlaWdodCArIChvYnN0YWNsZVJlY3QuZ2FwWU9ic3RhY2xlUmVjdCB8fCBnYXBEZWZhdWx0KSAqIDJcbiAgICB9O1xuICAgIGlmICgob2JzdGFjbGVSZWN0LnggPD0gcG9pbnQueCAmJiBwb2ludC54IDw9IG9ic3RhY2xlUmVjdC54ICsgb2JzdGFjbGVSZWN0LndpZHRoKSAmJiAob2JzdGFjbGVSZWN0LnkgPD0gcG9pbnQueSAmJiBwb2ludC55IDw9IG9ic3RhY2xlUmVjdC55ICsgb2JzdGFjbGVSZWN0LmhlaWdodCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGF0aEFuZEFycm93RWxlbWVudChuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXRoRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcbiAgICBjb25zdCBhcnJvd0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInBvbHlsaW5lXCIpO1xuICAgIGNvbnN0IGNpcmNsZVN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiY2lyY2xlXCIpO1xuICAgIGNvbnN0IGNpcmNsZUVuZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImNpcmNsZVwiKTtcblxuICAgIHBhdGhFbGVtZW50LnNldEF0dHJpYnV0ZSgnbmFtZScsIG5hbWUpO1xuICAgIGFycm93RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBuYW1lKTtcbiAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kKHBhdGhFbGVtZW50KTtcbiAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kKGFycm93RWxlbWVudCk7XG5cbiAgICByZXR1cm4geyBwYXRoRWxlbWVudCwgYXJyb3dFbGVtZW50LCBjaXJjbGVTdGFydEVsZW1lbnQsIGNpcmNsZUVuZEVsZW1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2lyY2xlKG5hbWU6IHN0cmluZywgcG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSkge1xuICAgIGlmICghdGhpcy5kcmF3UmVjdERlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNpcmNsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiY2lyY2xlXCIpO1xuXG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnbmFtZScsIG5hbWUpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N4JywgYCR7cG9pbnQueH1gKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeScsIGAke3BvaW50Lnl9YCk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgncicsICcyJyk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZmlsbDogbm9uZTsgc3Ryb2tlOiBibHVlOyBzdHJva2Utd2lkdGg6IDFweDsnKTtcbiAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDaXJjbGUoKSB7XG4gICAgaWYgKCF0aGlzLmRyYXdSZWN0RGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQXJyYXkuZnJvbSh0aGlzLnN2Z0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NpcmNsZScpKT8uZm9yRWFjaChpdGVtID0+IGl0ZW0ucmVtb3ZlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZWN0KG5hbWU6IHN0cmluZywgcmVjdDogSVJlY3QpIHtcbiAgICBpZiAoIXRoaXMuZHJhd1JlY3REZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicmVjdFwiKTtcbiAgICBjb25zdCB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGV4dFwiKTtcblxuICAgIHJlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnbmFtZScsIG5hbWUpO1xuICAgIHJlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgneCcsIGAke3JlY3QueH1gKTtcbiAgICByZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtyZWN0Lnl9YCk7XG4gICAgcmVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd3aWR0aCcsIGAke3JlY3Qud2lkdGh9YCk7XG4gICAgcmVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtyZWN0LmhlaWdodH1gKTtcbiAgICByZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2ZpbGw6IGJsdWU7IHN0cm9rZTogYmx1ZTsnKTtcbiAgICB0aGlzLnN2Z0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdEVsZW1lbnQpO1xuXG4gICAgdGV4dEVsZW1lbnQuc2V0QXR0cmlidXRlKCd4JywgYCR7cmVjdC54fWApO1xuICAgIHRleHRFbGVtZW50LnNldEF0dHJpYnV0ZSgneScsIGAke3JlY3QueX1gKTtcbiAgICB0ZXh0RWxlbWVudC50ZXh0Q29udGVudCA9IHJlY3QuaWQgPz8gJyc7XG4gICAgdGhpcy5zdmdFbGVtZW50LmFwcGVuZENoaWxkKHRleHRFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJSZWN0KCkge1xuICAgIGlmICghdGhpcy5kcmF3UmVjdERlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEFycmF5LmZyb20odGhpcy5zdmdFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdyZWN0JykpPy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5yZW1vdmUoKSk7XG4gICAgQXJyYXkuZnJvbSh0aGlzLnN2Z0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RleHQnKSk/LmZvckVhY2goaXRlbSA9PiBpdGVtLnJlbW92ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXRoQW5kRHJhd1NlcGFyYXRlZFBvaW50cyhkYXRhOiBJRHJhd0xpbmVEYXRhSW5wdXQsIHBvaW50czogSVBvaW50cywgbW9kZT86IFRZUEVfTU9ERSkge1xuICAgIGxldCBkUGF0aCA9IHt9IGFzIElBdHRyaWJ1dGVET25QYXRoO1xuICAgIGNvbnN0IHN0eWxlQ29uZmlnID0ge1xuICAgICAgY3VydmU6IGRhdGEubGluZVN0eWxlPy5jdXJ2ZSA/PyAxMCxcbiAgICAgIGRpc3RhbmNlUG9pbnQ6IGRhdGEubGluZVN0eWxlPy5kaXN0YW5jZVBvaW50ID8/IDEwXG4gICAgfTtcblxuICAgIGxldCB7IGN1cnZlLCBkaXN0YW5jZVBvaW50IH0gPSBzdHlsZUNvbmZpZztcblxuICAgIG1vZGUgPSBtb2RlIHx8IFwicXVhcnQtaW5cIjtcbiAgICBpZiAobW9kZSAhPT0gJ3F1YXJ0LWluJykge1xuICAgICAgY3VydmUgPSBjdXJ2ZSA/PyAxMDtcbiAgICAgIGRpc3RhbmNlUG9pbnQgPSBkaXN0YW5jZVBvaW50ID8/IDEwO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3F1YXJ0LWluJyB8fCBwb2ludHMuc3RhcnQueCA9PT0gcG9pbnRzLmVuZC54IHx8IHBvaW50cy5zdGFydC55ID09PSBwb2ludHMuZW5kLnkpIHtcbiAgICAgIHRoaXMuZHJhd0JhbGFuY2VkQ3VydmUoZFBhdGgsIHBvaW50cyk7XG5cbiAgICAgIGlmIChtb2RlID09PSAncXVhcnQtaW4nKSB7XG4gICAgICAgIGRQYXRoID0ge30gYXMgSUF0dHJpYnV0ZURPblBhdGg7XG4gICAgICAgIHRoaXMuZHJhd0JlbmRCb3RoRW5kc0N1cnZlKGRQYXRoLCBwb2ludHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5idWlsREF0dHJpYnV0ZVRvU3RyaW5nKGRQYXRoKTtcblxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGN1bGF0b3JEaXN0YW5jZVBvaW50QW5kQ3VydmUocG9pbnRzLCBkaXN0YW5jZVBvaW50LCBjdXJ2ZSwgbW9kZSk7XG5cbiAgICBkaXN0YW5jZVBvaW50ID0gcmVzdWx0LmRpc3RhbmNlUG9pbnQ7XG4gICAgY3VydmUgPSByZXN1bHQuY3VydmU7XG5cbiAgICB0aGlzLmJ1aWxkREF0dHJpYnV0ZUJ5UG9pbnRFbmRNb2RlSG9yaXpvbnRhbChkUGF0aCwgcG9pbnRzLCBkaXN0YW5jZVBvaW50IHx8IDAsIGN1cnZlIHx8IDAsIG1vZGUpO1xuICAgIHRoaXMuYnVpbGREQXR0cmlidXRlQnlQb2ludEVuZE1vZGVWZXJ0aWNhbChkUGF0aCwgcG9pbnRzLCBkaXN0YW5jZVBvaW50IHx8IDAsIGN1cnZlIHx8IDAsIG1vZGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVpbERBdHRyaWJ1dGVUb1N0cmluZyhkUGF0aCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ChangeDetectorRef, NgZone, ElementRef, EventEmitter,
|
|
3
|
-
import { range, cloneDeep, checkMouseOverInContainer, get } from '@libs-ui/utils';
|
|
4
|
-
import { Subject, takeUntil,
|
|
2
|
+
import { inject, ChangeDetectorRef, NgZone, ElementRef, EventEmitter, Output, Input, Directive } from '@angular/core';
|
|
3
|
+
import { range, cloneDeep, checkMouseOverInContainer, get, getDragEventByElement } from '@libs-ui/utils';
|
|
4
|
+
import { Subject, takeUntil, tap } from 'rxjs';
|
|
5
5
|
|
|
6
6
|
class MoCanvasCalculatorBranchUtil {
|
|
7
7
|
/**
|
|
@@ -1282,7 +1282,7 @@ class LibsUiComponentsDrawLineDirective {
|
|
|
1282
1282
|
`;
|
|
1283
1283
|
return;
|
|
1284
1284
|
}
|
|
1285
|
-
dString = `${dString}${key.replace(/\d/g, '')}${data
|
|
1285
|
+
dString = `${dString}${key.replace(/\d/g, '')}${data?.x},${data?.y}
|
|
1286
1286
|
`;
|
|
1287
1287
|
});
|
|
1288
1288
|
return dString;
|
|
@@ -1373,19 +1373,12 @@ class LibsUiComponentsDrawLineDirective {
|
|
|
1373
1373
|
return;
|
|
1374
1374
|
}
|
|
1375
1375
|
points.initialized = true;
|
|
1376
|
-
const
|
|
1377
|
-
mouseEvent.preventDefault();
|
|
1378
|
-
mouseEvent.stopPropagation();
|
|
1379
|
-
};
|
|
1380
|
-
const documentMouseUp = fromEvent(document, 'mouseup')
|
|
1381
|
-
.pipe(tap((eventMouseUp) => {
|
|
1382
|
-
stopEventMouse(eventMouseUp);
|
|
1376
|
+
const functionMouseUp = (mouseEvent) => {
|
|
1383
1377
|
if (preEvent) {
|
|
1384
1378
|
preEvent = undefined;
|
|
1385
|
-
this.onDrawLineEnd.next({ dataLine: data, event:
|
|
1379
|
+
this.onDrawLineEnd.next({ dataLine: data, event: mouseEvent });
|
|
1386
1380
|
}
|
|
1387
|
-
}
|
|
1388
|
-
const documentMouseMove = fromEvent(document, 'mousemove').pipe(tap((eventMousemove) => stopEventMouse(eventMousemove)), takeUntil((documentMouseUp)), takeUntil(points.onDestroyEvent), takeUntil(this.onDestroy));
|
|
1381
|
+
};
|
|
1389
1382
|
const handlerDrag = (dragMouseEvent) => {
|
|
1390
1383
|
if (!preEvent) {
|
|
1391
1384
|
preEvent = dragMouseEvent;
|
|
@@ -1405,18 +1398,18 @@ class LibsUiComponentsDrawLineDirective {
|
|
|
1405
1398
|
this.updateViewBox();
|
|
1406
1399
|
};
|
|
1407
1400
|
if (points.arrowElement) {
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1401
|
+
getDragEventByElement({
|
|
1402
|
+
elementMouseDown: points.arrowElement,
|
|
1403
|
+
functionMouseUp: functionMouseUp,
|
|
1404
|
+
onDestroy: this.onDestroy
|
|
1405
|
+
}).pipe(tap(handlerDrag), takeUntil(points.onDestroyEvent)).subscribe();
|
|
1413
1406
|
}
|
|
1414
1407
|
if (points.circleEndElement) {
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1408
|
+
getDragEventByElement({
|
|
1409
|
+
elementMouseDown: points.circleEndElement,
|
|
1410
|
+
functionMouseUp: functionMouseUp,
|
|
1411
|
+
onDestroy: this.onDestroy,
|
|
1412
|
+
}).pipe(tap(handlerDrag), takeUntil(points.onDestroyEvent)).subscribe();
|
|
1420
1413
|
}
|
|
1421
1414
|
}
|
|
1422
1415
|
checkPointIncludeRect(point, obstacleRect) {
|