@plait/core 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/plugins/with-moving.mjs +10 -5
- package/esm2022/plugins/with-selection.mjs +25 -20
- package/esm2022/transforms/selection.mjs +2 -2
- package/esm2022/utils/draw/arrow.mjs +4 -4
- package/esm2022/utils/math.mjs +4 -1
- package/esm2022/utils/reaction-manager.mjs +2 -1
- package/esm2022/utils/selected-element.mjs +9 -4
- package/fesm2022/plait-core.mjs +49 -30
- package/fesm2022/plait-core.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/styles.scss +6 -0
- package/utils/draw/arrow.d.ts +1 -1
- package/utils/math.d.ts +1 -0
|
@@ -142,6 +142,7 @@ export class AlignReaction {
|
|
|
142
142
|
const alignDeltaX = deltaX;
|
|
143
143
|
const alignDeltaY = deltaY;
|
|
144
144
|
this.activeRectangle.x += deltaX;
|
|
145
|
+
this.activeRectangle.y += deltaY;
|
|
145
146
|
const distributeHorizontalResult = this.alignDistribute(alignRectangles, true);
|
|
146
147
|
const distributeVerticalResult = this.alignDistribute(alignRectangles, false);
|
|
147
148
|
const distributeLines = [...distributeHorizontalResult.distributeLines, ...distributeVerticalResult.distributeLines];
|
|
@@ -367,4 +368,4 @@ function getBarPoint(point, isHorizontal) {
|
|
|
367
368
|
[point[0] + 4, point[1]]
|
|
368
369
|
];
|
|
369
370
|
}
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFTLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFhN0MsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLE1BQU0sT0FBTyxhQUFhO0lBR3RCLFlBQW9CLEtBQWlCLEVBQVUsY0FBOEIsRUFBVSxlQUFnQztRQUFuRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ25ILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7UUFDckMsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RILE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxL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QyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsU0FBUyxXQUFXLENBQUMsS0FBWSxFQUFFLFlBQXFCO0lBQ3BELE9BQU8sWUFBWTtRQUNmLENBQUMsQ0FBQztZQUNJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUNILENBQUMsQ0FBQztZQUNJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IGNyZWF0ZUcgfSBmcm9tICcuL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IEFuY2VzdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIFNFTEVDVElPTl9CT1JERVJfQ09MT1IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRlcHRoRmlyc3RSZWN1cnNpb24gfSBmcm9tICcuL3RyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsaWduUmVmIHtcbiAgICBkZWx0YVg6IG51bWJlcjtcbiAgICBkZWx0YVk6IG51bWJlcjtcbiAgICBnOiBTVkdHRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRlUmVmIHtcbiAgICBiZWZvcmU6IHsgZGlzdGFuY2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG4gICAgYWZ0ZXI6IHsgZGlzdGFuY2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG59XG5cbmNvbnN0IEFMSUdOX1RPTEVSQU5DRSA9IDI7XG5cbmV4cG9ydCBjbGFzcyBBbGlnblJlYWN0aW9uIHtcbiAgICBhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBib2FyZDogUGxhaXRCb2FyZCwgcHJpdmF0ZSBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIHByaXZhdGUgYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgdGhpcy5hbGlnblJlY3RhbmdsZXMgPSB0aGlzLmdldEFsaWduUmVjdGFuZ2xlKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxpZ25SZWN0YW5nbGUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgICAgICB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNvbWUoZWxlbWVudCA9PiBub2RlLmlkID09PSBlbGVtZW50LmlkKSB8fCAhdGhpcy5ib2FyZC5pc0FsaWduKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gdGhpcy5ib2FyZC5nZXRSZWN0YW5nbGUobm9kZSk7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlICYmIHJlc3VsdC5wdXNoKHJlY3RhbmdsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBoYW5kbGVBbGlnbigpOiBBbGlnblJlZiB7XG4gICAgICAgIGNvbnN0IGFsaWduUmVjdGFuZ2xlcyA9IHRoaXMuZ2V0QWxpZ25SZWN0YW5nbGUoKTtcbiAgICAgICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgbGV0IGFsaWduTGluZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgICAgICAgbGV0IGRlbHRhWCA9IDA7XG4gICAgICAgIGxldCBkZWx0YVkgPSAwO1xuICAgICAgICBsZXQgaXNDb3JyZWN0WCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNDb3JyZWN0WSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGFsaWduUmVjdGFuZ2xlIG9mIGFsaWduUmVjdGFuZ2xlcykge1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdERpc3RhbmNlcyA9IHRoaXMuY2FsY3VsYXRlQ2xvc2VzdERpc3RhbmNlcyh0aGlzLmFjdGl2ZVJlY3RhbmdsZSwgYWxpZ25SZWN0YW5nbGUpO1xuICAgICAgICAgICAgbGV0IGNhbkRyYXdIb3Jpem9udGFsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzQ29ycmVjdFggJiYgY2xvc2VzdERpc3RhbmNlcy5hYnNYRGlzdGFuY2UgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVggPSBjbG9zZXN0RGlzdGFuY2VzLnhEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54IC09IGRlbHRhWDtcbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RYID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYW5EcmF3SG9yaXpvbnRhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjbG9zZXN0RGlzdGFuY2VzLmFic1hEaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbkRyYXdIb3Jpem9udGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNhbkRyYXdIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxZID0gW1xuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS55LFxuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lVG9wWSA9IE1hdGgubWluKC4uLnZlcnRpY2FsWSkgLSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUJvdHRvbVkgPSBNYXRoLm1heCguLi52ZXJ0aWNhbFkpICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRMaW5lID0gW3RoaXMuYWN0aXZlUmVjdGFuZ2xlLngsIGxpbmVUb3BZLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LCBsaW5lQm90dG9tWV07XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZVRvcFksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVCb3R0b21ZXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodExpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluZVRvcFksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluZUJvdHRvbVlcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd0xlZnRMaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAyICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdMZWZ0TGluZSAmJiAhYWxpZ25MaW5lc1swXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzBdID0gbGVmdExpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd1JpZ2h0TGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAyIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAzIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMCAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3UmlnaHRMaW5lICYmICFhbGlnbkxpbmVzWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMl0gPSByaWdodExpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd01pZGRsZUxpbmUgPSBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gNCB8fCAoIXNob3VsZERyYXdMZWZ0TGluZSAmJiAhc2hvdWxkRHJhd1JpZ2h0TGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdNaWRkbGVMaW5lICYmICFhbGlnbkxpbmVzWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMV0gPSBtaWRkbGVMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlzQ29ycmVjdFggPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY2FuRHJhd1ZlcnRpY2FsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzQ29ycmVjdFkgJiYgY2xvc2VzdERpc3RhbmNlcy5hYnNZRGlzdGFuY2UgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVkgPSBjbG9zZXN0RGlzdGFuY2VzLnlEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55IC09IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RZID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYW5EcmF3VmVydGljYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNsb3Nlc3REaXN0YW5jZXMuYWJzWURpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FuRHJhd1ZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5EcmF3VmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsWCA9IFtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGhcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVMZWZ0WCA9IE1hdGgubWluKC4uLmhvcml6b250YWxYKSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lUmlnaHRYID0gTWF0aC5tYXgoLi4uaG9yaXpvbnRhbFgpICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcExpbmUgPSBbbGluZUxlZnRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55LCBsaW5lUmlnaHRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55XTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsTWlkZGxlTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZUxlZnRYLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAvIDJcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIGxpbmVMZWZ0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3VG9wTGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAxIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMiAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgPT09IGFsaWduUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdUb3BMaW5lICYmICFhbGlnbkxpbmVzWzNdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbM10gPSB0b3BMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdCb3R0b21MaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDIgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDMgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdCb3R0b21MaW5lICYmICFhbGlnbkxpbmVzWzVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNV0gPSBib3R0b21MaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdNaWRkbGVMaW5lID0gY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDQgfHwgKCFzaG91bGREcmF3VG9wTGluZSAmJiAhc2hvdWxkRHJhd0JvdHRvbUxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TWlkZGxlTGluZSAmJiAhYWxpZ25MaW5lc1s0XSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzRdID0gaG9yaXpvbnRhbE1pZGRsZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxpZ25EZWx0YVggPSBkZWx0YVg7XG4gICAgICAgIGNvbnN0IGFsaWduRGVsdGFZID0gZGVsdGFZO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKz0gZGVsdGFYO1xuICAgICAgICBjb25zdCBkaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdCA9IHRoaXMuYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlcywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdCA9IHRoaXMuYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlcywgZmFsc2UpO1xuICAgICAgICBjb25zdCBkaXN0cmlidXRlTGluZXM6IFBvaW50W11bXSA9IFsuLi5kaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdC5kaXN0cmlidXRlTGluZXMsIC4uLmRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kaXN0cmlidXRlTGluZXNdO1xuICAgICAgICBpZiAoZGlzdHJpYnV0ZUhvcml6b250YWxSZXN1bHQuZGVsdGEpIHtcbiAgICAgICAgICAgIGRlbHRhWCA9IGRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0LmRlbHRhO1xuICAgICAgICAgICAgaWYgKGFsaWduRGVsdGFYICE9PSBkZWx0YVgpIHtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzBdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1sxXSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMl0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0cmlidXRlVmVydGljYWxSZXN1bHQuZGVsdGEpIHtcbiAgICAgICAgICAgIGRlbHRhWSA9IGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kZWx0YTtcbiAgICAgICAgICAgIGlmIChhbGlnbkRlbHRhWSAhPT0gZGVsdGFZKSB7XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1szXSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNF0gPSBbXTtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxpZ25MaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FsaWduTGluZXMoYWxpZ25MaW5lcywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzdHJpYnV0ZUxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3RGlzdHJpYnV0ZUxpbmVzKGRpc3RyaWJ1dGVMaW5lcywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBkZWx0YVgsIGRlbHRhWSwgZyB9O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNsb3Nlc3REaXN0YW5jZXMoYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGFsaWduUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlQ2VudGVyID0gW2FjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMiwgYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMl07XG4gICAgICAgIGNvbnN0IGFsaWduUmVjdGFuZ2xlQ2VudGVyID0gW2FsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCAvIDIsIGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcblxuICAgICAgICBjb25zdCBjZW50ZXJYRGlzdGFuY2UgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXJbMF0gLSBhbGlnblJlY3RhbmdsZUNlbnRlclswXTtcbiAgICAgICAgY29uc3QgY2VudGVyWURpc3RhbmNlID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyWzFdIC0gYWxpZ25SZWN0YW5nbGVDZW50ZXJbMV07XG5cbiAgICAgICAgY29uc3QgbGVmdFRvTGVmdCA9IGFjdGl2ZVJlY3RhbmdsZS54IC0gYWxpZ25SZWN0YW5nbGUueDtcbiAgICAgICAgY29uc3QgbGVmdFRvUmlnaHQgPSBhY3RpdmVSZWN0YW5nbGUueCAtIChhbGlnblJlY3RhbmdsZS54ICsgYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvUmlnaHQgPSBhY3RpdmVSZWN0YW5nbGUueCArIGFjdGl2ZVJlY3RhbmdsZS53aWR0aCAtIChhbGlnblJlY3RhbmdsZS54ICsgYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvTGVmdCA9IGFjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC0gYWxpZ25SZWN0YW5nbGUueDtcblxuICAgICAgICBjb25zdCB0b3BUb1RvcCA9IGFjdGl2ZVJlY3RhbmdsZS55IC0gYWxpZ25SZWN0YW5nbGUueTtcbiAgICAgICAgY29uc3QgdG9wVG9Cb3R0b20gPSBhY3RpdmVSZWN0YW5nbGUueSAtIChhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgYm90dG9tVG9Ub3AgPSBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLSBhbGlnblJlY3RhbmdsZS55O1xuICAgICAgICBjb25zdCBib3R0b21Ub0JvdHRvbSA9IGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAtIChhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0KTtcblxuICAgICAgICBjb25zdCB4RGlzdGFuY2VzID0gW2xlZnRUb0xlZnQsIGxlZnRUb1JpZ2h0LCByaWdodFRvUmlnaHQsIHJpZ2h0VG9MZWZ0LCBjZW50ZXJYRGlzdGFuY2VdO1xuICAgICAgICBjb25zdCB5RGlzdGFuY2VzID0gW3RvcFRvVG9wLCB0b3BUb0JvdHRvbSwgYm90dG9tVG9Cb3R0b20sIGJvdHRvbVRvVG9wLCBjZW50ZXJZRGlzdGFuY2VdO1xuXG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZXNBYnMgPSB4RGlzdGFuY2VzLm1hcChkaXN0YW5jZSA9PiBNYXRoLmFicyhkaXN0YW5jZSkpO1xuICAgICAgICBjb25zdCB5RGlzdGFuY2VzQWJzID0geURpc3RhbmNlcy5tYXAoZGlzdGFuY2UgPT4gTWF0aC5hYnMoZGlzdGFuY2UpKTtcblxuICAgICAgICBjb25zdCBpbmRleFggPSB4RGlzdGFuY2VzQWJzLmluZGV4T2YoTWF0aC5taW4oLi4ueERpc3RhbmNlc0FicykpO1xuICAgICAgICBjb25zdCBpbmRleFkgPSB5RGlzdGFuY2VzQWJzLmluZGV4T2YoTWF0aC5taW4oLi4ueURpc3RhbmNlc0FicykpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhYnNYRGlzdGFuY2U6IHhEaXN0YW5jZXNBYnNbaW5kZXhYXSxcbiAgICAgICAgICAgIHhEaXN0YW5jZTogeERpc3RhbmNlc1tpbmRleFhdLFxuICAgICAgICAgICAgYWJzWURpc3RhbmNlOiB5RGlzdGFuY2VzQWJzW2luZGV4WV0sXG4gICAgICAgICAgICB5RGlzdGFuY2U6IHlEaXN0YW5jZXNbaW5kZXhZXSxcbiAgICAgICAgICAgIGluZGV4WCxcbiAgICAgICAgICAgIGluZGV4WVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFsaWduRGlzdHJpYnV0ZShhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdLCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGRpc3RyaWJ1dGVMaW5lczogYW55W10gPSBbXTtcbiAgICAgICAgbGV0IGRlbHRhID0gMDtcbiAgICAgICAgbGV0IHJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdID0gW107XG4gICAgICAgIGNvbnN0IGF4aXMgPSBpc0hvcml6b250YWwgPyAneCcgOiAneSc7XG4gICAgICAgIGNvbnN0IHNpZGUgPSBpc0hvcml6b250YWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlQ2VudGVyID0gdGhpcy5hY3RpdmVSZWN0YW5nbGVbYXhpc10gKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSAvIDI7XG4gICAgICAgIGFsaWduUmVjdGFuZ2xlcy5mb3JFYWNoKHJlYyA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzID0gaXNIb3Jpem9udGFsID8gaXNIb3Jpem9udGFsQ3Jvc3MocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSkgOiBpc1ZlcnRpY2FsQ3Jvc3MocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSk7XG4gICAgICAgICAgICBpZiAoaXNDcm9zcyAmJiAhUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlYywgdGhpcy5hY3RpdmVSZWN0YW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlcy5wdXNoKHJlYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZWN0YW5nbGVzID0gWy4uLnJlY3RhbmdsZXMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlXS5zb3J0KChhLCBiKSA9PiBhW2F4aXNdIC0gYltheGlzXSk7XG5cbiAgICAgICAgY29uc3QgcmVmQXJyYXk6IERpc3RyaWJ1dGVSZWZbXSA9IFtdO1xuICAgICAgICBsZXQgZGlzdHJpYnV0ZURpc3RhbmNlID0gMDtcbiAgICAgICAgbGV0IGJlZm9yZUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYWZ0ZXJJbmRleCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RhbmdsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RhbmdsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmUgPSByZWN0YW5nbGVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gcmVjdGFuZ2xlc1tqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpZiA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIGlmIChyZWZBcnJheVtpXT8uYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmQXJyYXlbaV0uYWZ0ZXIucHVzaCh7IGRpc3RhbmNlLCBpbmRleDogaiB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtpXSA9IHsgLi4ucmVmQXJyYXlbaV0sIGFmdGVyOiBbeyBkaXN0YW5jZSwgaW5kZXg6IGogfV0gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVmQXJyYXlbal0/LmJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtqXS5iZWZvcmUucHVzaCh7IGRpc3RhbmNlLCBpbmRleDogaSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtqXSA9IHsgLi4ucmVmQXJyYXlbal0sIGJlZm9yZTogW3sgZGlzdGFuY2UsIGluZGV4OiBpIH1dIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9taWRkbGVcbiAgICAgICAgICAgICAgICBsZXQgX2NlbnRlciA9IChiZWZvcmVbYXhpc10gKyBiZWZvcmVbc2lkZV0gKyBhZnRlcltheGlzXSkgLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gKGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSkgLSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbmRleCA9IGo7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9hZnRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlUmlnaHQgPSBhZnRlcltheGlzXSAtIChiZWZvcmVbYXhpc10gKyBiZWZvcmVbc2lkZV0pO1xuICAgICAgICAgICAgICAgIF9jZW50ZXIgPSBhZnRlcltheGlzXSArIGFmdGVyW3NpZGVdICsgZGlzdGFuY2VSaWdodCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdIC8gMjtcbiAgICAgICAgICAgICAgICBkaWYgPSBNYXRoLmFicyhhY3RpdmVSZWN0YW5nbGVDZW50ZXIgLSBfY2VudGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RyaWJ1dGVEaXN0YW5jZSAmJiBkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gZGlzdGFuY2VSaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlSW5kZXggPSBqO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9iZWZvcmVcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZUJlZm9yZSA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgX2NlbnRlciA9IGJlZm9yZVtheGlzXSAtIGRpc3RhbmNlQmVmb3JlIC0gdGhpcy5hY3RpdmVSZWN0YW5nbGVbc2lkZV0gLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkaXN0cmlidXRlRGlzdGFuY2UgJiYgZGlmIDwgQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVEaXN0YW5jZSA9IGRpc3RhbmNlQmVmb3JlO1xuICAgICAgICAgICAgICAgICAgICBhZnRlckluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgLSBfY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gcmVjdGFuZ2xlcy5pbmRleE9mKHRoaXMuYWN0aXZlUmVjdGFuZ2xlKTtcbiAgICAgICAgbGV0IGJlZm9yZUluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGxldCBhZnRlckluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGlmIChiZWZvcmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBiZWZvcmVJbmRleGVzLnB1c2goYmVmb3JlSW5kZXgpO1xuICAgICAgICAgICAgZmluZFJlY3RhbmdsZShkaXN0cmlidXRlRGlzdGFuY2UsIHJlZkFycmF5W2JlZm9yZUluZGV4XSwgJ2JlZm9yZScsIGJlZm9yZUluZGV4ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFmdGVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWZ0ZXJJbmRleGVzLnB1c2goYWZ0ZXJJbmRleCk7XG4gICAgICAgICAgICBmaW5kUmVjdGFuZ2xlKGRpc3RyaWJ1dGVEaXN0YW5jZSwgcmVmQXJyYXlbYWZ0ZXJJbmRleF0sICdhZnRlcicsIGFmdGVySW5kZXhlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXhlcy5sZW5ndGggfHwgYWZ0ZXJJbmRleGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhBcnIgPSBbLi4uYmVmb3JlSW5kZXhlcy5yZXZlcnNlKCksIGFjdGl2ZUluZGV4LCAuLi5hZnRlckluZGV4ZXNdO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGVbYXhpc10gLT0gZGVsdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGluZGV4QXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZGlzdHJpYnV0ZUxpbmVzLnB1c2goZ2V0TGluZVBvaW50cyhyZWN0YW5nbGVzW2luZGV4QXJyW2kgLSAxXV0sIHJlY3RhbmdsZXNbaW5kZXhBcnJbaV1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kUmVjdGFuZ2xlKGRpc3RhbmNlOiBudW1iZXIsIHJlZjogRGlzdHJpYnV0ZVJlZiwgZGlyZWN0aW9uOiBzdHJpbmcsIHJlY3RhbmdsZUluZGV4ZXM6IG51bWJlcltdKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSByZWZbZGlyZWN0aW9uIGFzIGtleW9mIERpc3RyaWJ1dGVSZWZdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZWZBcnJheS5pbmRleE9mKHJlZik7XG4gICAgICAgICAgICBpZiAoKGluZGV4ID09PSAwICYmIGRpcmVjdGlvbiA9PT0gJ2JlZm9yZScpIHx8IChpbmRleCA9PT0gcmVmQXJyYXkubGVuZ3RoIC0gMSAmJiBkaXJlY3Rpb24gPT09ICdhZnRlcicpKSByZXR1cm47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhhcnJbaV0uZGlzdGFuY2UgLSBkaXN0YW5jZSkgPCAwLjEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlSW5kZXhlcy5wdXNoKGFycltpXS5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRSZWN0YW5nbGUoZGlzdGFuY2UsIHJlZkFycmF5W2FycltpXS5pbmRleF0sIGRpcmVjdGlvbiwgcmVjdGFuZ2xlSW5kZXhlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRMaW5lUG9pbnRzKGJlZm9yZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBhZnRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvcHBvc2l0ZUF4aXMgPSBheGlzID09PSAneCcgPyAneScgOiAneCc7XG4gICAgICAgICAgICBjb25zdCBvcHBvc2l0ZVNpZGUgPSBzaWRlID09PSAnd2lkdGgnID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICAgICAgY29uc3QgYWxpZ24gPSBbXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10sXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10gKyBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVTaWRlXSxcbiAgICAgICAgICAgICAgICBhZnRlclJlY3RhbmdsZVtvcHBvc2l0ZUF4aXNdLFxuICAgICAgICAgICAgICAgIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10gKyBhZnRlclJlY3RhbmdsZVtvcHBvc2l0ZVNpZGVdXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3Qgc29ydEFyciA9IGFsaWduLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2UgPSAoc29ydEFyclsxXSArIHNvcnRBcnJbMl0pIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgW2JlZm9yZVJlY3RhbmdsZS54ICsgYmVmb3JlUmVjdGFuZ2xlLndpZHRoICsgb2Zmc2V0LCBhdmVyYWdlXSxcbiAgICAgICAgICAgICAgICAgICAgICBbYWZ0ZXJSZWN0YW5nbGUueCAtIG9mZnNldCwgYXZlcmFnZV1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICBbYXZlcmFnZSwgYmVmb3JlUmVjdGFuZ2xlLnkgKyBiZWZvcmVSZWN0YW5nbGUuaGVpZ2h0ICsgb2Zmc2V0XSxcbiAgICAgICAgICAgICAgICAgICAgICBbYXZlcmFnZSwgYWZ0ZXJSZWN0YW5nbGUueSAtIG9mZnNldF1cbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZGVsdGEsIGRpc3RyaWJ1dGVMaW5lcyB9O1xuICAgIH1cblxuICAgIGRyYXdBbGlnbkxpbmVzKGxpbmVzOiBudW1iZXJbXVtdLCBnOiBTVkdHRWxlbWVudCkge1xuICAgICAgICBsaW5lcy5mb3JFYWNoKHBvaW50cyA9PiB7XG4gICAgICAgICAgICBpZiAoIXBvaW50cy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHhBbGlnbiA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkubGluZShwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZURhc2g6IFs0LCA0XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKHhBbGlnbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRyYXdEaXN0cmlidXRlTGluZXMobGluZXM6IFBvaW50W11bXSwgZzogU1ZHR0VsZW1lbnQpIHtcbiAgICAgICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgICAgIGlmICghbGluZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBpc0hvcml6b250YWwgPSBsaW5lWzBdWzFdID09PSBsaW5lWzFdWzFdO1xuICAgICAgICAgICAgY29uc3QgeUFsaWduID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKGxpbmVbMF1bMF0sIGxpbmVbMF1bMV0sIGxpbmVbMV1bMF0sIGxpbmVbMV1bMV0sIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZy5hcHBlbmRDaGlsZCh5QWxpZ24pO1xuXG4gICAgICAgICAgICBsaW5lLmZvckVhY2gocG9pbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhclBvaW50ID0gZ2V0QmFyUG9pbnQocG9pbnQsIGlzSG9yaXpvbnRhbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKGJhclBvaW50WzBdWzBdLCBiYXJQb2ludFswXVsxXSwgYmFyUG9pbnRbMV1bMF0sIGJhclBvaW50WzFdWzFdLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBnLmFwcGVuZENoaWxkKGJhcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0hvcml6b250YWxDcm9zcyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3RoZXI6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgIHJldHVybiAhKHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCA8IG90aGVyLnkgfHwgcmVjdGFuZ2xlLnkgPiBvdGhlci55ICsgb3RoZXIuaGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gaXNWZXJ0aWNhbENyb3NzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlcjogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgcmV0dXJuICEocmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggPCBvdGhlci54IHx8IHJlY3RhbmdsZS54ID4gb3RoZXIueCArIG90aGVyLndpZHRoKTtcbn1cbmZ1bmN0aW9uIGdldEJhclBvaW50KHBvaW50OiBQb2ludCwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFxuICAgICAgICA/IFtcbiAgICAgICAgICAgICAgW3BvaW50WzBdLCBwb2ludFsxXSAtIDRdLFxuICAgICAgICAgICAgICBbcG9pbnRbMF0sIHBvaW50WzFdICsgNF1cbiAgICAgICAgICBdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgICBbcG9pbnRbMF0gLSA0LCBwb2ludFsxXV0sXG4gICAgICAgICAgICAgIFtwb2ludFswXSArIDQsIHBvaW50WzFdXVxuICAgICAgICAgIF07XG59XG4iXX0=
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFTLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFhN0MsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLE1BQU0sT0FBTyxhQUFhO0lBR3RCLFlBQW9CLEtBQWlCLEVBQVUsY0FBOEIsRUFBVSxlQUFnQztRQUFuRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ25ILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7UUFDckMsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RILE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxL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QWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNHLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWpGLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0csTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFekYsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUVqRSxPQUFPO1lBQ0gsWUFBWSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDbkMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDN0IsWUFBWSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDbkMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDN0IsTUFBTTtZQUNOLE1BQU07U0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWUsQ0FBQyxlQUFrQyxFQUFFLFlBQXFCO1FBQ3JFLElBQUksZUFBZSxHQUFVLEVBQUUsQ0FBQztRQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLFVBQVUsR0FBc0IsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUUvQyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUYsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pILElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUM5RCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXJGLE1BQU0sUUFBUSxHQUFvQixFQUFFLENBQUM7UUFDckMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUUzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzdELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQztnQkFDbkIsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFO29CQUNwQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDbEQ7cUJBQU07b0JBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDckU7Z0JBRUQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO29CQUNyQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDbkQ7cUJBQU07b0JBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDdEU7Z0JBRUQsUUFBUTtnQkFDUixJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxHQUFHLEdBQUcsZUFBZSxFQUFFO29CQUN2QixrQkFBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwRyxLQUFLLEdBQUcscUJBQXFCLEdBQUcsT0FBTyxDQUFDO29CQUN4QyxXQUFXLEdBQUcsQ0FBQyxDQUFDO29CQUNoQixVQUFVLEdBQUcsQ0FBQyxDQUFDO2lCQUNsQjtnQkFFRCxPQUFPO2dCQUNQLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEdBQUcsR0FBRyxlQUFlLEVBQUU7b0JBQzlDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztvQkFDbkMsV0FBVyxHQUFHLENBQUMsQ0FBQztvQkFDaEIsS0FBSyxHQUFHLHFCQUFxQixHQUFHLE9BQU8sQ0FBQztpQkFDM0M7Z0JBRUQsUUFBUTtnQkFDUixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFFaEQsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEdBQUcsR0FBRyxlQUFlLEVBQUU7b0JBQzlDLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztvQkFDcEMsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDZixLQUFLLEdBQUcscUJBQXFCLEdBQUcsT0FBTyxDQUFDO2lCQUMzQzthQUNKO1NBQ0o7UUFFRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxJQUFJLGFBQWEsR0FBYSxFQUFFLENBQUM7UUFDakMsSUFBSSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUMzQixhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3JGO1FBRUQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsYUFBYSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUM3QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0Y7U0FDSjtRQUVELFNBQVMsYUFBYSxDQUFDLFFBQWdCLEVBQUUsR0FBa0IsRUFBRSxTQUFpQixFQUFFLGdCQUEwQjtZQUN0RyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBZ0MsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsS0FBSyxPQUFPLENBQUM7Z0JBQUUsT0FBTztZQUNoSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO29CQUM1QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7b0JBQzdFLE9BQU87aUJBQ1Y7YUFDSjtRQUNMLENBQUM7UUFFRCxTQUFTLGFBQWEsQ0FBQyxlQUFnQyxFQUFFLGNBQStCO1lBQ3BGLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzNELE1BQU0sS0FBSyxHQUFHO2dCQUNWLGVBQWUsQ0FBQyxZQUFZLENBQUM7Z0JBQzdCLGVBQWUsQ0FBQyxZQUFZLENBQUMsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO2dCQUM3RCxjQUFjLENBQUMsWUFBWSxDQUFDO2dCQUM1QixjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM5RCxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sWUFBWTtnQkFDZixDQUFDLENBQUM7b0JBQ0ksQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLE9BQU8sQ0FBQztvQkFDN0QsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxPQUFPLENBQUM7aUJBQ3ZDO2dCQUNILENBQUMsQ0FBQztvQkFDSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUM5RCxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztpQkFDdkMsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBaUIsRUFBRSxDQUFjO1FBQzVDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFDM0IsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDL0YsTUFBTSxFQUFFLHNCQUFzQjtnQkFDOUIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN6QixDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWdCLEVBQUUsQ0FBYztRQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3pCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkcsTUFBTSxFQUFFLHNCQUFzQjtnQkFDOUIsV0FBVyxFQUFFLENBQUM7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNoSCxNQUFNLEVBQUUsc0JBQXNCO29CQUM5QixXQUFXLEVBQUUsQ0FBQztpQkFDakIsQ0FBQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQUVELFNBQVMsaUJBQWlCLENBQUMsU0FBMEIsRUFBRSxLQUFzQjtJQUN6RSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9GLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxTQUEwQixFQUFFLEtBQXNCO0lBQ3ZFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUNELFNBQVMsV0FBVyxDQUFDLEtBQVksRUFBRSxZQUFxQjtJQUNwRCxPQUFPLFlBQVk7UUFDZixDQUFDLENBQUM7WUFDSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDSCxDQUFDLENBQUM7WUFDSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0IsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBjcmVhdGVHIH0gZnJvbSAnLi9kb20vY29tbW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uIH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBBbGlnblJlZiB7XG4gICAgZGVsdGFYOiBudW1iZXI7XG4gICAgZGVsdGFZOiBudW1iZXI7XG4gICAgZzogU1ZHR0VsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0ZVJlZiB7XG4gICAgYmVmb3JlOiB7IGRpc3RhbmNlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xuICAgIGFmdGVyOiB7IGRpc3RhbmNlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5jb25zdCBBTElHTl9UT0xFUkFOQ0UgPSAyO1xuXG5leHBvcnQgY2xhc3MgQWxpZ25SZWFjdGlvbiB7XG4gICAgYWxpZ25SZWN0YW5nbGVzOiBSZWN0YW5nbGVDbGllbnRbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYm9hcmQ6IFBsYWl0Qm9hcmQsIHByaXZhdGUgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCBwcml2YXRlIGFjdGl2ZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHRoaXMuYWxpZ25SZWN0YW5nbGVzID0gdGhpcy5nZXRBbGlnblJlY3RhbmdsZSgpO1xuICAgIH1cblxuICAgIGdldEFsaWduUmVjdGFuZ2xlKCkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY3RhbmdsZUNsaWVudFtdID0gW107XG4gICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb248QW5jZXN0b3I+KFxuICAgICAgICAgICAgdGhpcy5ib2FyZCxcbiAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgdGhpcy5hY3RpdmVFbGVtZW50cy5zb21lKGVsZW1lbnQgPT4gbm9kZS5pZCA9PT0gZWxlbWVudC5pZCkgfHwgIXRoaXMuYm9hcmQuaXNBbGlnbihub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IHRoaXMuYm9hcmQuZ2V0UmVjdGFuZ2xlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZSAmJiByZXN1bHQucHVzaChyZWN0YW5nbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlICYmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgdGhpcy5ib2FyZC5pc1JlY3Vyc2lvbihub2RlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaGFuZGxlQWxpZ24oKTogQWxpZ25SZWYge1xuICAgICAgICBjb25zdCBhbGlnblJlY3RhbmdsZXMgPSB0aGlzLmdldEFsaWduUmVjdGFuZ2xlKCk7XG4gICAgICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGxldCBhbGlnbkxpbmVzID0gW107XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gICAgICAgIGxldCBkZWx0YVggPSAwO1xuICAgICAgICBsZXQgZGVsdGFZID0gMDtcbiAgICAgICAgbGV0IGlzQ29ycmVjdFggPSBmYWxzZTtcbiAgICAgICAgbGV0IGlzQ29ycmVjdFkgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBhbGlnblJlY3RhbmdsZSBvZiBhbGlnblJlY3RhbmdsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3REaXN0YW5jZXMgPSB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3REaXN0YW5jZXModGhpcy5hY3RpdmVSZWN0YW5nbGUsIGFsaWduUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGxldCBjYW5EcmF3SG9yaXpvbnRhbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpc0NvcnJlY3RYICYmIGNsb3Nlc3REaXN0YW5jZXMuYWJzWERpc3RhbmNlIDwgQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgZGVsdGFYID0gY2xvc2VzdERpc3RhbmNlcy54RGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCAtPSBkZWx0YVg7XG4gICAgICAgICAgICAgICAgaXNDb3JyZWN0WCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FuRHJhd0hvcml6b250YWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2xvc2VzdERpc3RhbmNlcy5hYnNYRGlzdGFuY2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjYW5EcmF3SG9yaXpvbnRhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjYW5EcmF3SG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsWSA9IFtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueSArIGFsaWduUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVRvcFkgPSBNYXRoLm1pbiguLi52ZXJ0aWNhbFkpIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVCb3R0b21ZID0gTWF0aC5tYXgoLi4udmVydGljYWxZKSArIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0TGluZSA9IFt0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LCBsaW5lVG9wWSwgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCwgbGluZUJvdHRvbVldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVUb3BZLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLFxuICAgICAgICAgICAgICAgICAgICBsaW5lQm90dG9tWVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRMaW5lID0gW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVUb3BZLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVCb3R0b21ZXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdMZWZ0TGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAxIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMiAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TGVmdExpbmUgJiYgIWFsaWduTGluZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1swXSA9IGxlZnRMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdSaWdodExpbmUgPVxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMiB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDAgJiYgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggPT09IGFsaWduUmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd1JpZ2h0TGluZSAmJiAhYWxpZ25MaW5lc1syXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzJdID0gcmlnaHRMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdNaWRkbGVMaW5lID0gY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDQgfHwgKCFzaG91bGREcmF3TGVmdExpbmUgJiYgIXNob3VsZERyYXdSaWdodExpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TWlkZGxlTGluZSAmJiAhYWxpZ25MaW5lc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzFdID0gbWlkZGxlTGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RYID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNhbkRyYXdWZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpc0NvcnJlY3RZICYmIGNsb3Nlc3REaXN0YW5jZXMuYWJzWURpc3RhbmNlIDwgQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgZGVsdGFZID0gY2xvc2VzdERpc3RhbmNlcy55RGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSAtPSBkZWx0YVk7XG4gICAgICAgICAgICAgICAgaXNDb3JyZWN0WSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FuRHJhd1ZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjbG9zZXN0RGlzdGFuY2VzLmFic1lEaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbkRyYXdWZXJ0aWNhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FuRHJhd1ZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbFggPSBbXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLngsXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lTGVmdFggPSBNYXRoLm1pbiguLi5ob3Jpem9udGFsWCkgLSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVJpZ2h0WCA9IE1hdGgubWF4KC4uLmhvcml6b250YWxYKSArIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BMaW5lID0gW2xpbmVMZWZ0WCwgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSwgbGluZVJpZ2h0WCwgdGhpcy5hY3RpdmVSZWN0YW5nbGUueV07XG4gICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE1pZGRsZUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIGxpbmVMZWZ0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAvIDIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVSaWdodFgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLyAyXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3R0b21MaW5lID0gW1xuICAgICAgICAgICAgICAgICAgICBsaW5lTGVmdFgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVSaWdodFgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd1RvcExpbmUgPVxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMSB8fFxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDIgJiYgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0ID09PSBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3VG9wTGluZSAmJiAhYWxpZ25MaW5lc1szXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzNdID0gdG9wTGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3Qm90dG9tTGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAyIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAzIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMCAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3Qm90dG9tTGluZSAmJiAhYWxpZ25MaW5lc1s1XSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzVdID0gYm90dG9tTGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3TWlkZGxlTGluZSA9IGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSA0IHx8ICghc2hvdWxkRHJhd1RvcExpbmUgJiYgIXNob3VsZERyYXdCb3R0b21MaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd01pZGRsZUxpbmUgJiYgIWFsaWduTGluZXNbNF0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1s0XSA9IGhvcml6b250YWxNaWRkbGVMaW5lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsaWduRGVsdGFYID0gZGVsdGFYO1xuICAgICAgICBjb25zdCBhbGlnbkRlbHRhWSA9IGRlbHRhWTtcblxuICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICs9IGRlbHRhWDtcbiAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArPSBkZWx0YVk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0ID0gdGhpcy5hbGlnbkRpc3RyaWJ1dGUoYWxpZ25SZWN0YW5nbGVzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0ID0gdGhpcy5hbGlnbkRpc3RyaWJ1dGUoYWxpZ25SZWN0YW5nbGVzLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVMaW5lczogUG9pbnRbXVtdID0gWy4uLmRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0LmRpc3RyaWJ1dGVMaW5lcywgLi4uZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0LmRpc3RyaWJ1dGVMaW5lc107XG4gICAgICAgIGlmIChkaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdC5kZWx0YSkge1xuICAgICAgICAgICAgZGVsdGFYID0gZGlzdHJpYnV0ZUhvcml6b250YWxSZXN1bHQuZGVsdGE7XG4gICAgICAgICAgICBpZiAoYWxpZ25EZWx0YVggIT09IGRlbHRhWCkge1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMF0gPSBbXTtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzFdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1syXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kZWx0YSkge1xuICAgICAgICAgICAgZGVsdGFZID0gZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0LmRlbHRhO1xuICAgICAgICAgICAgaWYgKGFsaWduRGVsdGFZICE9PSBkZWx0YVkpIHtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzNdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1s0XSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbGlnbkxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3QWxpZ25MaW5lcyhhbGlnbkxpbmVzLCBnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0cmlidXRlTGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdEaXN0cmlidXRlTGluZXMoZGlzdHJpYnV0ZUxpbmVzLCBnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGRlbHRhWCwgZGVsdGFZLCBnIH07XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ2xvc2VzdERpc3RhbmNlcyhhY3RpdmVSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgYWxpZ25SZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgPSBbYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLCBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgY29uc3QgYWxpZ25SZWN0YW5nbGVDZW50ZXIgPSBbYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoIC8gMiwgYWxpZ25SZWN0YW5nbGUueSArIGFsaWduUmVjdGFuZ2xlLmhlaWdodCAvIDJdO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlclhEaXN0YW5jZSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlclswXSAtIGFsaWduUmVjdGFuZ2xlQ2VudGVyWzBdO1xuICAgICAgICBjb25zdCBjZW50ZXJZRGlzdGFuY2UgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXJbMV0gLSBhbGlnblJlY3RhbmdsZUNlbnRlclsxXTtcblxuICAgICAgICBjb25zdCBsZWZ0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggLSBhbGlnblJlY3RhbmdsZS54O1xuICAgICAgICBjb25zdCBsZWZ0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54IC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLSBhbGlnblJlY3RhbmdsZS54O1xuXG4gICAgICAgIGNvbnN0IHRvcFRvVG9wID0gYWN0aXZlUmVjdGFuZ2xlLnkgLSBhbGlnblJlY3RhbmdsZS55O1xuICAgICAgICBjb25zdCB0b3BUb0JvdHRvbSA9IGFjdGl2ZVJlY3RhbmdsZS55IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b21Ub1RvcCA9IGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAtIGFsaWduUmVjdGFuZ2xlLnk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVRvQm90dG9tID0gYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZXMgPSBbbGVmdFRvTGVmdCwgbGVmdFRvUmlnaHQsIHJpZ2h0VG9SaWdodCwgcmlnaHRUb0xlZnQsIGNlbnRlclhEaXN0YW5jZV07XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXMgPSBbdG9wVG9Ub3AsIHRvcFRvQm90dG9tLCBib3R0b21Ub0JvdHRvbSwgYm90dG9tVG9Ub3AsIGNlbnRlcllEaXN0YW5jZV07XG5cbiAgICAgICAgY29uc3QgeERpc3RhbmNlc0FicyA9IHhEaXN0YW5jZXMubWFwKGRpc3RhbmNlID0+IE1hdGguYWJzKGRpc3RhbmNlKSk7XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXNBYnMgPSB5RGlzdGFuY2VzLm1hcChkaXN0YW5jZSA9PiBNYXRoLmFicyhkaXN0YW5jZSkpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4WCA9IHhEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi54RGlzdGFuY2VzQWJzKSk7XG4gICAgICAgIGNvbnN0IGluZGV4WSA9IHlEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi55RGlzdGFuY2VzQWJzKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFic1hEaXN0YW5jZTogeERpc3RhbmNlc0Fic1tpbmRleFhdLFxuICAgICAgICAgICAgeERpc3RhbmNlOiB4RGlzdGFuY2VzW2luZGV4WF0sXG4gICAgICAgICAgICBhYnNZRGlzdGFuY2U6IHlEaXN0YW5jZXNBYnNbaW5kZXhZXSxcbiAgICAgICAgICAgIHlEaXN0YW5jZTogeURpc3RhbmNlc1tpbmRleFldLFxuICAgICAgICAgICAgaW5kZXhYLFxuICAgICAgICAgICAgaW5kZXhZXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlczogUmVjdGFuZ2xlQ2xpZW50W10sIGlzSG9yaXpvbnRhbDogYm9vbGVhbikge1xuICAgICAgICBsZXQgZGlzdHJpYnV0ZUxpbmVzOiBhbnlbXSA9IFtdO1xuICAgICAgICBsZXQgZGVsdGEgPSAwO1xuICAgICAgICBsZXQgcmVjdGFuZ2xlczogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgY29uc3QgYXhpcyA9IGlzSG9yaXpvbnRhbCA/ICd4JyA6ICd5JztcbiAgICAgICAgY29uc3Qgc2lkZSA9IGlzSG9yaXpvbnRhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgPSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtheGlzXSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdIC8gMjtcbiAgICAgICAgYWxpZ25SZWN0YW5nbGVzLmZvckVhY2gocmVjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ3Jvc3MgPSBpc0hvcml6b250YWwgPyBpc0hvcml6b250YWxDcm9zcyhyZWMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlKSA6IGlzVmVydGljYWxDcm9zcyhyZWMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGlmIChpc0Nyb3NzICYmICFSZWN0YW5nbGVDbGllbnQuaXNIaXQocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSkpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVzLnB1c2gocmVjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlY3RhbmdsZXMgPSBbLi4ucmVjdGFuZ2xlcywgdGhpcy5hY3RpdmVSZWN0YW5nbGVdLnNvcnQoKGEsIGIpID0+IGFbYXhpc10gLSBiW2F4aXNdKTtcblxuICAgICAgICBjb25zdCByZWZBcnJheTogRGlzdHJpYnV0ZVJlZltdID0gW107XG4gICAgICAgIGxldCBkaXN0cmlidXRlRGlzdGFuY2UgPSAwO1xuICAgICAgICBsZXQgYmVmb3JlSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhZnRlckluZGV4ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdGFuZ2xlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdGFuZ2xlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IHJlY3RhbmdsZXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSByZWN0YW5nbGVzW2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlmID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkFycmF5W2ldPy5hZnRlcikge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtpXS5hZnRlci5wdXNoKHsgZGlzdGFuY2UsIGluZGV4OiBqIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2ldID0geyAuLi5yZWZBcnJheVtpXSwgYWZ0ZXI6IFt7IGRpc3RhbmNlLCBpbmRleDogaiB9XSB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZWZBcnJheVtqXT8uYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2pdLmJlZm9yZS5wdXNoKHsgZGlzdGFuY2UsIGluZGV4OiBpIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2pdID0geyAuLi5yZWZBcnJheVtqXSwgYmVmb3JlOiBbeyBkaXN0YW5jZSwgaW5kZXg6IGkgfV0gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL21pZGRsZVxuICAgICAgICAgICAgICAgIGxldCBfY2VudGVyID0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSArIGFmdGVyW2F4aXNdKSAvIDI7XG4gICAgICAgICAgICAgICAgZGlmID0gTWF0aC5hYnMoYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGRpZiA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlRGlzdGFuY2UgPSAoYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKSAtIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBhZnRlckluZGV4ID0gajtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2FmdGVyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VSaWdodCA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgX2NlbnRlciA9IGFmdGVyW2F4aXNdICsgYWZ0ZXJbc2lkZV0gKyBkaXN0YW5jZVJpZ2h0ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGVbc2lkZV0gLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuICAgICAgICAgICAgICAgIGlmICghZGlzdHJpYnV0ZURpc3RhbmNlICYmIGRpZiA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlRGlzdGFuY2UgPSBkaXN0YW5jZVJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVJbmRleCA9IGo7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2JlZm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlQmVmb3JlID0gYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKTtcbiAgICAgICAgICAgICAgICBfY2VudGVyID0gYmVmb3JlW2F4aXNdIC0gZGlzdGFuY2VCZWZvcmUgLSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSAvIDI7XG4gICAgICAgICAgICAgICAgZGlmID0gTWF0aC5hYnMoYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RyaWJ1dGVEaXN0YW5jZSAmJiBkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gZGlzdGFuY2VCZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVySW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSByZWN0YW5nbGVzLmluZGV4T2YodGhpcy5hY3RpdmVSZWN0YW5nbGUpO1xuICAgICAgICBsZXQgYmVmb3JlSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgbGV0IGFmdGVySW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJlZm9yZUluZGV4ZXMucHVzaChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICBmaW5kUmVjdGFuZ2xlKGRpc3RyaWJ1dGVEaXN0YW5jZSwgcmVmQXJyYXlbYmVmb3JlSW5kZXhdLCAnYmVmb3JlJywgYmVmb3JlSW5kZXhlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWZ0ZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZnRlckluZGV4ZXMucHVzaChhZnRlckluZGV4KTtcbiAgICAgICAgICAgIGZpbmRSZWN0YW5nbGUoZGlzdHJpYnV0ZURpc3RhbmNlLCByZWZBcnJheVthZnRlckluZGV4XSwgJ2FmdGVyJywgYWZ0ZXJJbmRleGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiZWZvcmVJbmRleGVzLmxlbmd0aCB8fCBhZnRlckluZGV4ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleEFyciA9IFsuLi5iZWZvcmVJbmRleGVzLnJldmVyc2UoKSwgYWN0aXZlSW5kZXgsIC4uLmFmdGVySW5kZXhlc107XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtheGlzXSAtPSBkZWx0YTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaW5kZXhBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBkaXN0cmlidXRlTGluZXMucHVzaChnZXRMaW5lUG9pbnRzKHJlY3RhbmdsZXNbaW5kZXhBcnJbaSAtIDFdXSwgcmVjdGFuZ2xlc1tpbmRleEFycltpXV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRSZWN0YW5nbGUoZGlzdGFuY2U6IG51bWJlciwgcmVmOiBEaXN0cmlidXRlUmVmLCBkaXJlY3Rpb246IHN0cmluZywgcmVjdGFuZ2xlSW5kZXhlczogbnVtYmVyW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHJlZltkaXJlY3Rpb24gYXMga2V5b2YgRGlzdHJpYnV0ZVJlZl07XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlZkFycmF5LmluZGV4T2YocmVmKTtcbiAgICAgICAgICAgIGlmICgoaW5kZXggPT09IDAgJiYgZGlyZWN0aW9uID09PSAnYmVmb3JlJykgfHwgKGluZGV4ID09PSByZWZBcnJheS5sZW5ndGggLSAxICYmIGRpcmVjdGlvbiA9PT0gJ2FmdGVyJykpIHJldHVybjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGFycltpXS5kaXN0YW5jZSAtIGRpc3RhbmNlKSA8IDAuMSkge1xuICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGVJbmRleGVzLnB1c2goYXJyW2ldLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZmluZFJlY3RhbmdsZShkaXN0YW5jZSwgcmVmQXJyYXlbYXJyW2ldLmluZGV4XSwgZGlyZWN0aW9uLCByZWN0YW5nbGVJbmRleGVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldExpbmVQb2ludHMoYmVmb3JlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGFmdGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wcG9zaXRlQXhpcyA9IGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICAgICAgICAgIGNvbnN0IG9wcG9zaXRlU2lkZSA9IHNpZGUgPT09ICd3aWR0aCcgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgICAgICBjb25zdCBhbGlnbiA9IFtcbiAgICAgICAgICAgICAgICBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSxcbiAgICAgICAgICAgICAgICBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSArIGJlZm9yZVJlY3RhbmdsZVtvcHBvc2l0ZVNpZGVdLFxuICAgICAgICAgICAgICAgIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10sXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSArIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlU2lkZV1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBzb3J0QXJyID0gYWxpZ24uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICAgICAgY29uc3QgYXZlcmFnZSA9IChzb3J0QXJyWzFdICsgc29ydEFyclsyXSkgLyAyO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBpc0hvcml6b250YWxcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICBbYmVmb3JlUmVjdGFuZ2xlLnggKyBiZWZvcmVSZWN0YW5nbGUud2lkdGggKyBvZmZzZXQsIGF2ZXJhZ2VdLFxuICAgICAgICAgICAgICAgICAgICAgIFthZnRlclJlY3RhbmdsZS54IC0gb2Zmc2V0LCBhdmVyYWdlXVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgIFthdmVyYWdlLCBiZWZvcmVSZWN0YW5nbGUueSArIGJlZm9yZVJlY3RhbmdsZS5oZWlnaHQgKyBvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgIFthdmVyYWdlLCBhZnRlclJlY3RhbmdsZS55IC0gb2Zmc2V0XVxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkZWx0YSwgZGlzdHJpYnV0ZUxpbmVzIH07XG4gICAgfVxuXG4gICAgZHJhd0FsaWduTGluZXMobGluZXM6IG51bWJlcltdW10sIGc6IFNWR0dFbGVtZW50KSB7XG4gICAgICAgIGxpbmVzLmZvckVhY2gocG9pbnRzID0+IHtcbiAgICAgICAgICAgIGlmICghcG9pbnRzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeEFsaWduID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lRGFzaDogWzQsIDRdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoeEFsaWduKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZHJhd0Rpc3RyaWJ1dGVMaW5lcyhsaW5lczogUG9pbnRbXVtdLCBnOiBTVkdHRWxlbWVudCkge1xuICAgICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xuICAgICAgICAgICAgaWYgKCFsaW5lLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IGlzSG9yaXpvbnRhbCA9IGxpbmVbMF1bMV0gPT09IGxpbmVbMV1bMV07XG4gICAgICAgICAgICBjb25zdCB5QWxpZ24gPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUobGluZVswXVswXSwgbGluZVswXVsxXSwgbGluZVsxXVswXSwgbGluZVsxXVsxXSwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKHlBbGlnbik7XG5cbiAgICAgICAgICAgIGxpbmUuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyUG9pbnQgPSBnZXRCYXJQb2ludChwb2ludCwgaXNIb3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXIgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUoYmFyUG9pbnRbMF1bMF0sIGJhclBvaW50WzBdWzFdLCBiYXJQb2ludFsxXVswXSwgYmFyUG9pbnRbMV1bMV0sIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoYmFyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbENyb3NzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlcjogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgcmV0dXJuICEocmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IDwgb3RoZXIueSB8fCByZWN0YW5nbGUueSA+IG90aGVyLnkgKyBvdGhlci5oZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBpc1ZlcnRpY2FsQ3Jvc3MocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG90aGVyOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICByZXR1cm4gIShyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCA8IG90aGVyLnggfHwgcmVjdGFuZ2xlLnggPiBvdGhlci54ICsgb3RoZXIud2lkdGgpO1xufVxuZnVuY3Rpb24gZ2V0QmFyUG9pbnQocG9pbnQ6IFBvaW50LCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXNIb3Jpem9udGFsXG4gICAgICAgID8gW1xuICAgICAgICAgICAgICBbcG9pbnRbMF0sIHBvaW50WzFdIC0gNF0sXG4gICAgICAgICAgICAgIFtwb2ludFswXSwgcG9pbnRbMV0gKyA0XVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICAgIFtwb2ludFswXSAtIDQsIHBvaW50WzFdXSxcbiAgICAgICAgICAgICAgW3BvaW50WzBdICsgNCwgcG9pbnRbMV1dXG4gICAgICAgICAgXTtcbn1cbiJdfQ==
|
|
@@ -5,7 +5,10 @@ import { Selection } from '../interfaces/selection';
|
|
|
5
5
|
export const getHitElementsBySelection = (board, selection, match = () => true) => {
|
|
6
6
|
const newSelection = selection || board.selection;
|
|
7
7
|
const rectangleHitElements = [];
|
|
8
|
-
|
|
8
|
+
if (!newSelection) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
const isCollapsed = Selection.isCollapsed(newSelection);
|
|
9
12
|
if (isCollapsed) {
|
|
10
13
|
const hitElement = getHitElementByPoint(board, newSelection.anchor, match);
|
|
11
14
|
if (hitElement) {
|
|
@@ -54,8 +57,10 @@ export const addSelectedElement = (board, element) => {
|
|
|
54
57
|
};
|
|
55
58
|
export const removeSelectedElement = (board, element) => {
|
|
56
59
|
const selectedElements = getSelectedElements(board);
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
if (selectedElements.includes(element)) {
|
|
61
|
+
const newSelectedElements = selectedElements.filter(value => value !== element);
|
|
62
|
+
cacheSelectedElements(board, newSelectedElements);
|
|
63
|
+
}
|
|
59
64
|
};
|
|
60
65
|
export const clearSelectedElement = (board) => {
|
|
61
66
|
cacheSelectedElements(board, []);
|
|
@@ -64,4 +69,4 @@ export const isSelectedElement = (board, element) => {
|
|
|
64
69
|
const selectedElements = getSelectedElements(board);
|
|
65
70
|
return !!selectedElements.find(value => value === element);
|
|
66
71
|
};
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXBELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQ3JDLEtBQWlCLEVBQ2pCLFNBQXFCLEVBQ3JCLFFBQTRDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDeEQsRUFBRTtJQUNBLE1BQU0sWUFBWSxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBc0IsQ0FBQztJQUMvRCxNQUFNLG9CQUFvQixHQUFtQixFQUFFLENBQUM7SUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNmLE9BQU8sRUFBRSxDQUFDO0tBQ2I7SUFDRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hELElBQUksV0FBVyxFQUFFO1FBQ2IsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0UsSUFBSSxVQUFVLEVBQUU7WUFDWixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNILE9BQU8sRUFBRSxDQUFDO1NBQ2I7S0FDSjtJQUNELG1CQUFtQixDQUNmLEtBQUssRUFDTCxJQUFJLENBQUMsRUFBRTtRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FB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LE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFxQixFQUFFLEVBQUU7SUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgQW5jZXN0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiwgZ2V0SXNSZWN1cnNpb25GdW5jIH0gZnJvbSAnLi90cmVlJztcbmltcG9ydCB7IEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQgfSBmcm9tICcuL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50JztcblxuZXhwb3J0IGNvbnN0IGdldEhpdEVsZW1lbnRzQnlTZWxlY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgc2VsZWN0aW9uPzogU2VsZWN0aW9uLFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKSA9PiB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0aW9uIHx8IGJvYXJkLnNlbGVjdGlvbiBhcyBTZWxlY3Rpb247XG4gICAgY29uc3QgcmVjdGFuZ2xlSGl0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgaWYgKCFuZXdTZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBpc0NvbGxhcHNlZCA9IFNlbGVjdGlvbi5pc0NvbGxhcHNlZChuZXdTZWxlY3Rpb24pO1xuICAgIGlmIChpc0NvbGxhcHNlZCkge1xuICAgICAgICBjb25zdCBoaXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudEJ5UG9pbnQoYm9hcmQsIG5ld1NlbGVjdGlvbi5hbmNob3IsIG1hdGNoKTtcbiAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbaGl0RWxlbWVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpICYmIG1hdGNoKG5vZGUpICYmIGJvYXJkLmlzUmVjdGFuZ2xlSGl0KG5vZGUsIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVIaXRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gcmVjdGFuZ2xlSGl0RWxlbWVudHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RWxlbWVudEJ5UG9pbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcG9pbnQ6IFBvaW50LFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKTogdW5kZWZpbmVkIHwgUGxhaXRFbGVtZW50ID0+IHtcbiAgICBsZXQgcmVjdGFuZ2xlSGl0RWxlbWVudDogUGxhaXRFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBoaXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCAhbWF0Y2gobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm9hcmQuaXNIaXQobm9kZSwgcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgaGl0RWxlbWVudCA9IG5vZGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWN0YW5nbGVIaXRFbGVtZW50ICYmIGJvYXJkLmlzUmVjdGFuZ2xlSGl0KG5vZGUsIHsgYW5jaG9yOiBwb2ludCwgZm9jdXM6IHBvaW50IH0pKSB7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlSGl0RWxlbWVudCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiBoaXRFbGVtZW50IHx8IHJlY3RhbmdsZUhpdEVsZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgY2FjaGVTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuc2V0KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuZ2V0KGJvYXJkKSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFsuLi5zZWxlY3RlZEVsZW1lbnRzLCBlbGVtZW50XSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgaWYgKHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBlbGVtZW50KTtcbiAgICAgICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBuZXdTZWxlY3RlZEVsZW1lbnRzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFtdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkRWxlbWVudHMuZmluZCh2YWx1ZSA9PiB2YWx1ZSA9PT0gZWxlbWVudCk7XG59O1xuIl19
|
package/fesm2022/plait-core.mjs
CHANGED
|
@@ -78,7 +78,10 @@ const Selection = {
|
|
|
78
78
|
const getHitElementsBySelection = (board, selection, match = () => true) => {
|
|
79
79
|
const newSelection = selection || board.selection;
|
|
80
80
|
const rectangleHitElements = [];
|
|
81
|
-
|
|
81
|
+
if (!newSelection) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const isCollapsed = Selection.isCollapsed(newSelection);
|
|
82
85
|
if (isCollapsed) {
|
|
83
86
|
const hitElement = getHitElementByPoint(board, newSelection.anchor, match);
|
|
84
87
|
if (hitElement) {
|
|
@@ -127,8 +130,10 @@ const addSelectedElement = (board, element) => {
|
|
|
127
130
|
};
|
|
128
131
|
const removeSelectedElement = (board, element) => {
|
|
129
132
|
const selectedElements = getSelectedElements(board);
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
if (selectedElements.includes(element)) {
|
|
134
|
+
const newSelectedElements = selectedElements.filter(value => value !== element);
|
|
135
|
+
cacheSelectedElements(board, newSelectedElements);
|
|
136
|
+
}
|
|
132
137
|
};
|
|
133
138
|
const clearSelectedElement = (board) => {
|
|
134
139
|
cacheSelectedElements(board, []);
|
|
@@ -716,6 +721,9 @@ const isPointInRoundRectangle = (point, rectangle, radius) => {
|
|
|
716
721
|
const isInCorner = handleLeftTop || handleLeftBottom || handleRightTop || handleRightBottom;
|
|
717
722
|
return isInRectangle && !isInCorner;
|
|
718
723
|
};
|
|
724
|
+
const downScale = (number) => {
|
|
725
|
+
return Number(number.toFixed(2));
|
|
726
|
+
};
|
|
719
727
|
|
|
720
728
|
function transformPoints(board, points) {
|
|
721
729
|
const newPoints = points.map(point => {
|
|
@@ -1002,11 +1010,11 @@ const drawRectangle = (board, rectangle, options) => {
|
|
|
1002
1010
|
return rectangleG;
|
|
1003
1011
|
};
|
|
1004
1012
|
|
|
1005
|
-
function arrowPoints(start, end,
|
|
1013
|
+
function arrowPoints(start, end, degree = 40) {
|
|
1006
1014
|
const width = Math.abs(start[0] - end[0]);
|
|
1007
1015
|
const height = Math.abs(start[1] - end[1]);
|
|
1008
1016
|
let hypotenuse = Math.hypot(width, height); // 斜边
|
|
1009
|
-
const realRotateLine = hypotenuse
|
|
1017
|
+
const realRotateLine = hypotenuse / 2;
|
|
1010
1018
|
const rotateWidth = (realRotateLine / hypotenuse) * width;
|
|
1011
1019
|
const rotateHeight = (realRotateLine / hypotenuse) * height;
|
|
1012
1020
|
const rotatePoint = [
|
|
@@ -1018,7 +1026,7 @@ function arrowPoints(start, end, maxHypotenuseLength = 10, degree = 40) {
|
|
|
1018
1026
|
return { pointLeft, pointRight };
|
|
1019
1027
|
}
|
|
1020
1028
|
function drawArrow(rs, start, end, options, maxHypotenuseLength = 10, degree = 40) {
|
|
1021
|
-
const { pointLeft, pointRight } = arrowPoints(start, end,
|
|
1029
|
+
const { pointLeft, pointRight } = arrowPoints(start, end, degree);
|
|
1022
1030
|
const arrowLineLeft = rs.linearPath([pointLeft, end], options);
|
|
1023
1031
|
const arrowLineRight = rs.linearPath([pointRight, end], options);
|
|
1024
1032
|
return [arrowLineLeft, arrowLineRight];
|
|
@@ -2287,7 +2295,12 @@ function withSelection(board) {
|
|
|
2287
2295
|
// prevent text from being selected when user pressed main pointer and is moving
|
|
2288
2296
|
let needPreventNativeSelectionWhenMoving = false;
|
|
2289
2297
|
board.pointerDown = (event) => {
|
|
2290
|
-
|
|
2298
|
+
const isHitText = event.target instanceof Element && event.target.closest('.plait-richtext-container');
|
|
2299
|
+
// prevent text from being selected when user pressed shift and pointer down
|
|
2300
|
+
if (!isHitText && event.shiftKey) {
|
|
2301
|
+
event.preventDefault();
|
|
2302
|
+
}
|
|
2303
|
+
if (!isHitText) {
|
|
2291
2304
|
needPreventNativeSelectionWhenMoving = true;
|
|
2292
2305
|
}
|
|
2293
2306
|
if (!isMainPointer(event)) {
|
|
@@ -2303,10 +2316,7 @@ function withSelection(board) {
|
|
|
2303
2316
|
pointerDown(event);
|
|
2304
2317
|
return;
|
|
2305
2318
|
}
|
|
2306
|
-
if (PlaitBoard.isPointer(board, PlaitPointerType.selection) &&
|
|
2307
|
-
!hitElement &&
|
|
2308
|
-
options.isMultiple &&
|
|
2309
|
-
!options.isDisabledSelect) {
|
|
2319
|
+
if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && !hitElement && options.isMultiple && !options.isDisabledSelect) {
|
|
2310
2320
|
selectionRectangleG?.remove();
|
|
2311
2321
|
start = point;
|
|
2312
2322
|
preventTouchMove(board, event, true);
|
|
@@ -2369,6 +2379,12 @@ function withSelection(board) {
|
|
|
2369
2379
|
if (options.isDisabledSelect) {
|
|
2370
2380
|
clearSelectedElement(board);
|
|
2371
2381
|
}
|
|
2382
|
+
// remove selected element if include
|
|
2383
|
+
board.operations.forEach(op => {
|
|
2384
|
+
if (op.type === 'remove_node') {
|
|
2385
|
+
removeSelectedElement(board, op.node);
|
|
2386
|
+
}
|
|
2387
|
+
});
|
|
2372
2388
|
// calc selected elements entry
|
|
2373
2389
|
if (board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect) {
|
|
2374
2390
|
try {
|
|
@@ -2387,21 +2403,18 @@ function withSelection(board) {
|
|
|
2387
2403
|
}
|
|
2388
2404
|
}
|
|
2389
2405
|
else {
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
if (currentSelectedElements.length !== previousSelectedElements.length ||
|
|
2395
|
-
currentSelectedElements.some((c, index) => c !== previousSelectedElements[index])) {
|
|
2396
|
-
selectionRectangleG?.remove();
|
|
2397
|
-
selectionRectangleG = createSelectionRectangleG(board);
|
|
2398
|
-
previousSelectedElements = currentSelectedElements;
|
|
2399
|
-
}
|
|
2400
|
-
}
|
|
2401
|
-
else {
|
|
2406
|
+
const currentSelectedElements = getSelectedElements(board);
|
|
2407
|
+
if (currentSelectedElements.length && currentSelectedElements.length > 1) {
|
|
2408
|
+
if (currentSelectedElements.length !== previousSelectedElements.length ||
|
|
2409
|
+
currentSelectedElements.some((c, index) => c !== previousSelectedElements[index])) {
|
|
2402
2410
|
selectionRectangleG?.remove();
|
|
2411
|
+
selectionRectangleG = createSelectionRectangleG(board);
|
|
2412
|
+
previousSelectedElements = currentSelectedElements;
|
|
2403
2413
|
}
|
|
2404
|
-
}
|
|
2414
|
+
}
|
|
2415
|
+
else {
|
|
2416
|
+
selectionRectangleG?.remove();
|
|
2417
|
+
}
|
|
2405
2418
|
}
|
|
2406
2419
|
}
|
|
2407
2420
|
catch (error) {
|
|
@@ -2468,7 +2481,7 @@ const SelectionTransforms = {
|
|
|
2468
2481
|
};
|
|
2469
2482
|
function addSelectionWithTemporaryElements(board, elements) {
|
|
2470
2483
|
const timeoutId = setTimeout(() => {
|
|
2471
|
-
setSelection(board,
|
|
2484
|
+
setSelection(board, { anchor: [0, 0], focus: [0, 0] });
|
|
2472
2485
|
}, 0);
|
|
2473
2486
|
let ref = getTemporaryRef(board);
|
|
2474
2487
|
if (ref) {
|
|
@@ -3069,6 +3082,7 @@ class AlignReaction {
|
|
|
3069
3082
|
const alignDeltaX = deltaX;
|
|
3070
3083
|
const alignDeltaY = deltaY;
|
|
3071
3084
|
this.activeRectangle.x += deltaX;
|
|
3085
|
+
this.activeRectangle.y += deltaY;
|
|
3072
3086
|
const distributeHorizontalResult = this.alignDistribute(alignRectangles, true);
|
|
3073
3087
|
const distributeVerticalResult = this.alignDistribute(alignRectangles, false);
|
|
3074
3088
|
const distributeLines = [...distributeHorizontalResult.distributeLines, ...distributeVerticalResult.distributeLines];
|
|
@@ -3303,6 +3317,7 @@ function withMoving(board) {
|
|
|
3303
3317
|
let startPoint;
|
|
3304
3318
|
let activeElements = [];
|
|
3305
3319
|
let alignG = null;
|
|
3320
|
+
let activeElementsRectangle = null;
|
|
3306
3321
|
board.pointerDown = (event) => {
|
|
3307
3322
|
const host = BOARD_TO_HOST.get(board);
|
|
3308
3323
|
const point = transformPoint(board, toPoint(event.x, event.y, host));
|
|
@@ -3322,6 +3337,7 @@ function withMoving(board) {
|
|
|
3322
3337
|
if (activeElements.length > 0) {
|
|
3323
3338
|
preventTouchMove(board, event, true);
|
|
3324
3339
|
}
|
|
3340
|
+
activeElementsRectangle = getRectangleByElements(board, activeElements, true);
|
|
3325
3341
|
}
|
|
3326
3342
|
pointerDown(event);
|
|
3327
3343
|
};
|
|
@@ -3338,10 +3354,12 @@ function withMoving(board) {
|
|
|
3338
3354
|
const tolerance = 5;
|
|
3339
3355
|
if (Math.abs(offsetX) > tolerance || Math.abs(offsetY) > tolerance || getMovingElements(board).length > 0) {
|
|
3340
3356
|
throttleRAF(() => {
|
|
3341
|
-
const
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3357
|
+
const newRectangle = {
|
|
3358
|
+
...activeElementsRectangle,
|
|
3359
|
+
x: activeElementsRectangle.x + offsetX,
|
|
3360
|
+
y: activeElementsRectangle.y + offsetY
|
|
3361
|
+
};
|
|
3362
|
+
const reactionManager = new AlignReaction(board, activeElements, newRectangle);
|
|
3345
3363
|
const ref = reactionManager.handleAlign();
|
|
3346
3364
|
offsetX -= ref.deltaX;
|
|
3347
3365
|
offsetY -= ref.deltaY;
|
|
@@ -3390,6 +3408,7 @@ function withMoving(board) {
|
|
|
3390
3408
|
function cancelMove(board) {
|
|
3391
3409
|
alignG?.remove();
|
|
3392
3410
|
startPoint = null;
|
|
3411
|
+
activeElementsRectangle = null;
|
|
3393
3412
|
offsetX = 0;
|
|
3394
3413
|
offsetY = 0;
|
|
3395
3414
|
activeElements = [];
|
|
@@ -4264,5 +4283,5 @@ function createModModifierKeys() {
|
|
|
4264
4283
|
* Generated bundle index. Do not edit.
|
|
4265
4284
|
*/
|
|
4266
4285
|
|
|
4267
|
-
export { A, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
4286
|
+
export { A, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
4268
4287
|
//# sourceMappingURL=plait-core.mjs.map
|