@plait/core 0.24.0-next.10 → 0.24.0-next.12

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.
@@ -0,0 +1,8 @@
1
+ export var Direction;
2
+ (function (Direction) {
3
+ Direction["left"] = "left";
4
+ Direction["top"] = "top";
5
+ Direction["right"] = "right";
6
+ Direction["bottom"] = "bottom";
7
+ })(Direction || (Direction = {}));
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvaW50ZXJmYWNlcy9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksU0FLWDtBQUxELFdBQVksU0FBUztJQUNqQiwwQkFBYSxDQUFBO0lBQ2Isd0JBQVcsQ0FBQTtJQUNYLDRCQUFlLENBQUE7SUFDZiw4QkFBaUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsU0FBUyxLQUFULFNBQVMsUUFLcEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBEaXJlY3Rpb24ge1xuICAgIGxlZnQgPSAnbGVmdCcsXG4gICAgdG9wID0gJ3RvcCcsXG4gICAgcmlnaHQgPSAncmlnaHQnLFxuICAgIGJvdHRvbSA9ICdib3R0b20nXG59XG5cbmV4cG9ydCB0eXBlIFZlY3RvciA9IFtudW1iZXIsIG51bWJlcl07Il19
@@ -14,4 +14,5 @@ export * from './viewport';
14
14
  export * from './history';
15
15
  export * from './plugin-key';
16
16
  export * from './theme';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ib2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3BvaW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi4vY29yZS9lbGVtZW50L2NvbnRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9jdXN0b20tdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmVjdGFuZ2xlLWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL25vZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wYXRoJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vcG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3cG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW4ta2V5JztcbmV4cG9ydCAqIGZyb20gJy4vdGhlbWUnO1xuIl19
17
+ export * from './direction';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ib2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3BvaW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi4vY29yZS9lbGVtZW50L2NvbnRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9jdXN0b20tdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmVjdGFuZ2xlLWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL25vZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wYXRoJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vcG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3cG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW4ta2V5JztcbmV4cG9ydCAqIGZyb20gJy4vdGhlbWUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb24nO1xuIl19
@@ -60,6 +60,9 @@ export const RectangleClient = {
60
60
  [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],
61
61
  [rectangle.x, rectangle.y + rectangle.height / 2]
62
62
  ];
63
+ },
64
+ getConnectionPoint: (rectangle, point) => {
65
+ return [rectangle.x + rectangle.width * point[0], rectangle.y + rectangle.height * point[1]];
63
66
  }
64
67
  };
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDM0IsS0FBSyxFQUFFLENBQUMsTUFBdUIsRUFBRSxNQUF1QixFQUFFLEVBQUU7UUFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25ILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2SCx5REFBeUQ7UUFDekQsSUFB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LFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUMvRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQ2hCLENBQUM7SUFDdEMsQ0FBQztJQUNELG1CQUFtQixFQUFFLENBQUMsU0FBMEIsRUFBRSxFQUFFO1FBQ2hELE9BQU87WUFDSCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ25FLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDbkUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDcEIsQ0FBQztJQUN0QyxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi9wb2ludCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBSZWN0YW5nbGVDbGllbnQgPSB7XG4gICAgaXNIaXQ6IChvcmlnaW46IFJlY3RhbmdsZUNsaWVudCwgdGFyZ2V0OiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgbWluWCA9IG9yaWdpbi54IDwgdGFyZ2V0LnggPyBvcmlnaW4ueCA6IHRhcmdldC54O1xuICAgICAgICBjb25zdCBtYXhYID0gb3JpZ2luLnggKyBvcmlnaW4ud2lkdGggPiB0YXJnZXQueCArIHRhcmdldC53aWR0aCA/IG9yaWdpbi54ICsgb3JpZ2luLndpZHRoIDogdGFyZ2V0LnggKyB0YXJnZXQud2lkdGg7XG4gICAgICAgIGNvbnN0IG1pblkgPSBvcmlnaW4ueSA8IHRhcmdldC55ID8gb3JpZ2luLnkgOiB0YXJnZXQueTtcbiAgICAgICAgY29uc3QgbWF4WSA9IG9yaWdpbi55ICsgb3JpZ2luLmhlaWdodCA+IHRhcmdldC55ICsgdGFyZ2V0LmhlaWdodCA/IG9yaWdpbi55ICsgb3JpZ2luLmhlaWdodCA6IHRhcmdldC55ICsgdGFyZ2V0LmhlaWdodDtcbiAgICAgICAgLy8gZmxvYXQgY2FsY3VsYXRlIGVycm9yKCBlZzogMS40MjEwODU0NzE1MjAyMDA0ZS0xNCA+IDApXG4gICAgICAgIGlmIChNYXRoLmZsb29yKG1heFggLSBtaW5YIC0gb3JpZ2luLndpZHRoIC0gdGFyZ2V0LndpZHRoKSA8PSAwICYmIE1hdGguZmxvb3IobWF4WSAtIG1pblkgLSBvcmlnaW4uaGVpZ2h0IC0gdGFyZ2V0LmhlaWdodCkgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHRvUmVjdGFuZ2xlQ2xpZW50OiAocG9pbnRzOiBbUG9pbnQsIFBvaW50XSkgPT4ge1xuICAgICAgICBjb25zdCB4QXJyYXkgPSBwb2ludHMubWFwKGVsZSA9PiBlbGVbMF0pO1xuICAgICAgICBjb25zdCB5QXJyYXkgPSBwb2ludHMubWFwKGVsZSA9PiBlbGVbMV0pO1xuICAgICAgICBjb25zdCB4TWluID0gTWF0aC5taW4oLi4ueEFycmF5KTtcbiAgICAgICAgY29uc3QgeE1heCA9IE1hdGgubWF4KC4uLnhBcnJheSk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBNYXRoLm1pbiguLi55QXJyYXkpO1xuICAgICAgICBjb25zdCB5TWF4ID0gTWF0aC5tYXgoLi4ueUFycmF5KTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHsgeDogeE1pbiwgeTogeU1pbiwgd2lkdGg6IHhNYXggLSB4TWluLCBoZWlnaHQ6IHlNYXggLSB5TWluIH07XG4gICAgICAgIHJldHVybiByZWN0O1xuICAgIH0sXG4gICAgZ2V0T3V0bGluZVJlY3RhbmdsZTogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvZmZzZXQ6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcmVjdGFuZ2xlLnggKyBvZmZzZXQsXG4gICAgICAgICAgICB5OiByZWN0YW5nbGUueSArIG9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggLSBvZmZzZXQgKiAyLFxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0YW5nbGUuaGVpZ2h0IC0gb2Zmc2V0ICogMlxuICAgICAgICB9O1xuICAgIH0sXG4gICAgaW5mbGF0ZTogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBkZWx0YTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbGYgPSBkZWx0YSAvIDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByZWN0YW5nbGUueCAtIGhhbGYsXG4gICAgICAgICAgICB5OiByZWN0YW5nbGUueSAtIGhhbGYsXG4gICAgICAgICAgICB3aWR0aDogcmVjdGFuZ2xlLndpZHRoICsgaGFsZiAqIDIsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgKyBoYWxmICogMlxuICAgICAgICB9O1xuICAgIH0sXG4gICAgaXNFcXVhbDogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICByZWN0YW5nbGUueCA9PT0gb3RoZXJSZWN0YW5nbGUueCAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLnkgPT09IG90aGVyUmVjdGFuZ2xlLnkgJiZcbiAgICAgICAgICAgIHJlY3RhbmdsZS53aWR0aCA9PT0gb3RoZXJSZWN0YW5nbGUud2lkdGggJiZcbiAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgPT09IG90aGVyUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICApO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgIH0sXG4gICAgZ2V0RWRnZUNlbnRlclBvaW50czogKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgIH1cbn07XG4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDM0IsS0FBSyxFQUFFLENBQUMsTUFBdUIsRUFBRSxNQUF1QixFQUFFLEVBQUU7UUFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25ILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2SCx5REFBeUQ7UUFDekQsSUFB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCB9IGZyb20gJy4vcG9pbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3RhbmdsZUNsaWVudCB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFt4LCB5XSB4LHkgYmV0d2VlbiAwIGFuZCAxXG4gKiByZXByZXNlbnRzIGEgcG9pbnQgaW4gdGhlIHJlY3RhbmdsZVxuICovXG5leHBvcnQgdHlwZSBQb2ludE9mUmVjdGFuZ2xlID0gW251bWJlciwgbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFJlY3RhbmdsZUNsaWVudCA9IHtcbiAgICBpc0hpdDogKG9yaWdpbjogUmVjdGFuZ2xlQ2xpZW50LCB0YXJnZXQ6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBtaW5YID0gb3JpZ2luLnggPCB0YXJnZXQueCA/IG9yaWdpbi54IDogdGFyZ2V0Lng7XG4gICAgICAgIGNvbnN0IG1heFggPSBvcmlnaW4ueCArIG9yaWdpbi53aWR0aCA+IHRhcmdldC54ICsgdGFyZ2V0LndpZHRoID8gb3JpZ2luLnggKyBvcmlnaW4ud2lkdGggOiB0YXJnZXQueCArIHRhcmdldC53aWR0aDtcbiAgICAgICAgY29uc3QgbWluWSA9IG9yaWdpbi55IDwgdGFyZ2V0LnkgPyBvcmlnaW4ueSA6IHRhcmdldC55O1xuICAgICAgICBjb25zdCBtYXhZID0gb3JpZ2luLnkgKyBvcmlnaW4uaGVpZ2h0ID4gdGFyZ2V0LnkgKyB0YXJnZXQuaGVpZ2h0ID8gb3JpZ2luLnkgKyBvcmlnaW4uaGVpZ2h0IDogdGFyZ2V0LnkgKyB0YXJnZXQuaGVpZ2h0O1xuICAgICAgICAvLyBmbG9hdCBjYWxjdWxhdGUgZXJyb3IoIGVnOiAxLjQyMTA4NTQ3MTUyMDIwMDRlLTE0ID4gMClcbiAgICAgICAgaWYgKE1hdGguZmxvb3IobWF4WCAtIG1pblggLSBvcmlnaW4ud2lkdGggLSB0YXJnZXQud2lkdGgpIDw9IDAgJiYgTWF0aC5mbG9vcihtYXhZIC0gbWluWSAtIG9yaWdpbi5oZWlnaHQgLSB0YXJnZXQuaGVpZ2h0KSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdG9SZWN0YW5nbGVDbGllbnQ6IChwb2ludHM6IFtQb2ludCwgUG9pbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IHhBcnJheSA9IHBvaW50cy5tYXAoZWxlID0+IGVsZVswXSk7XG4gICAgICAgIGNvbnN0IHlBcnJheSA9IHBvaW50cy5tYXAoZWxlID0+IGVsZVsxXSk7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBNYXRoLm1pbiguLi54QXJyYXkpO1xuICAgICAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgoLi4ueEFycmF5KTtcbiAgICAgICAgY29uc3QgeU1pbiA9IE1hdGgubWluKC4uLnlBcnJheSk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBNYXRoLm1heCguLi55QXJyYXkpO1xuICAgICAgICBjb25zdCByZWN0ID0geyB4OiB4TWluLCB5OiB5TWluLCB3aWR0aDogeE1heCAtIHhNaW4sIGhlaWdodDogeU1heCAtIHlNaW4gfTtcbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfSxcbiAgICBnZXRPdXRsaW5lUmVjdGFuZ2xlOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9mZnNldDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByZWN0YW5nbGUueCArIG9mZnNldCxcbiAgICAgICAgICAgIHk6IHJlY3RhbmdsZS55ICsgb2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IHJlY3RhbmdsZS53aWR0aCAtIG9mZnNldCAqIDIsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgLSBvZmZzZXQgKiAyXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBpbmZsYXRlOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGRlbHRhOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgaGFsZiA9IGRlbHRhIC8gMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHJlY3RhbmdsZS54IC0gaGFsZixcbiAgICAgICAgICAgIHk6IHJlY3RhbmdsZS55IC0gaGFsZixcbiAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggKyBoYWxmICogMixcbiAgICAgICAgICAgIGhlaWdodDogcmVjdGFuZ2xlLmhlaWdodCArIGhhbGYgKiAyXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBpc0VxdWFsOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG90aGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlY3RhbmdsZS54ID09PSBvdGhlclJlY3RhbmdsZS54ICYmXG4gICAgICAgICAgICByZWN0YW5nbGUueSA9PT0gb3RoZXJSZWN0YW5nbGUueSAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoID09PSBvdGhlclJlY3RhbmdsZS53aWR0aCAmJlxuICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCA9PT0gb3RoZXJSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICk7XG4gICAgfSxcbiAgICBnZXRDb3JuZXJQb2ludHM6IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XVxuICAgICAgICBdIGFzIFtQb2ludCwgUG9pbnQsIFBvaW50LCBQb2ludF07XG4gICAgfSxcbiAgICBnZXRFZGdlQ2VudGVyUG9pbnRzOiAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXVxuICAgICAgICBdIGFzIFtQb2ludCwgUG9pbnQsIFBvaW50LCBQb2ludF07XG4gICAgfSxcbiAgICBnZXRDb25uZWN0aW9uUG9pbnQ6IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50T2ZSZWN0YW5nbGUpID0+IHtcbiAgICAgICAgcmV0dXJuIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIHBvaW50WzBdLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgKiBwb2ludFsxXV0gYXMgUG9pbnQ7XG4gICAgfVxufTtcbiJdfQ==
@@ -49,18 +49,18 @@ export function withMoving(board) {
49
49
  const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
50
50
  offsetX = endPoint[0] - startPoint[0];
51
51
  offsetY = endPoint[1] - startPoint[1];
52
- const activeElementsRectangle = getRectangleByElements(board, activeElements, true);
53
- activeElementsRectangle.x += offsetX;
54
- activeElementsRectangle.y += offsetY;
55
- const reactionManager = new ReactionManager(board, activeElements, activeElementsRectangle);
56
- const ref = reactionManager.handleAlign();
57
- offsetX -= ref.deltaX;
58
- offsetY -= ref.deltaY;
59
- alignG = ref.g;
60
- PlaitBoard.getElementActiveHost(board).append(alignG);
61
- const offsetBuffer = 5;
62
- if (Math.abs(offsetX) > offsetBuffer || Math.abs(offsetY) > offsetBuffer || getMovingElements(board).length > 0 || ref.deltaX) {
52
+ const tolerance = 5;
53
+ if (Math.abs(offsetX) > tolerance || Math.abs(offsetY) > tolerance || getMovingElements(board).length > 0) {
63
54
  throttleRAF(() => {
55
+ const activeElementsRectangle = getRectangleByElements(board, activeElements, true);
56
+ activeElementsRectangle.x += offsetX;
57
+ activeElementsRectangle.y += offsetY;
58
+ const reactionManager = new ReactionManager(board, activeElements, activeElementsRectangle);
59
+ const ref = reactionManager.handleAlign();
60
+ offsetX -= ref.deltaX;
61
+ offsetY -= ref.deltaY;
62
+ alignG = ref.g;
63
+ PlaitBoard.getElementActiveHost(board).append(alignG);
64
64
  handleTouchTarget(board);
65
65
  const currentElements = activeElements.map(activeElement => {
66
66
  const points = activeElement.points || [];
@@ -113,4 +113,4 @@ export function withMoving(board) {
113
113
  }
114
114
  return board;
115
115
  }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBaUI7SUFDeEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRS9FLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLE9BQU8sR0FBRyxD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QUFFO1FBQzVCLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLFVBQVUsRUFBRTtZQUNaLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtRQUNELGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLFNBQVMsVUFBVSxDQUFDLEtBQWlCO1FBQ2pDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNqQixVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDWixPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQixVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQk9BUkRfVE9fSE9TVCB9IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBpc0luUGxhaXRCb2FyZCwgdHJhbnNmb3JtUG9pbnQgfSBmcm9tICcuLi91dGlscy9ib2FyZCc7XG5pbXBvcnQgeyB0b1BvaW50IH0gZnJvbSAnLi4vdXRpbHMvZG9tL2NvbW1vbic7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IGdldEhpdEVsZW1lbnRPZlJvb3QsIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9zZWxlY3RlZC1lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0Tm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyB0aHJvdHRsZVJBRiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBhZGRNb3ZpbmdFbGVtZW50cywgZ2V0TW92aW5nRWxlbWVudHMsIHJlbW92ZU1vdmluZ0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvbW92aW5nLWVsZW1lbnQnO1xuaW1wb3J0IHsgTUVSR0lORyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaGlzdG9yeSc7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNQcmV2ZW50VG91Y2hNb3ZlLCBwcmV2ZW50VG91Y2hNb3ZlLCBoYW5kbGVUb3VjaFRhcmdldCwgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFJlYWN0aW9uTWFuYWdlciB9IGZyb20gJy4uL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE1vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAsIGdsb2JhbFBvaW50ZXJNb3ZlIH0gPSBib2FyZDtcblxuICAgIGxldCBvZmZzZXRYID0gMDtcbiAgICBsZXQgb2Zmc2V0WSA9IDA7XG4gICAgbGV0IGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICBsZXQgc3RhcnRQb2ludDogUG9pbnQgfCBudWxsO1xuICAgIGxldCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgYWxpZ25HOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgYm9hcmQucG9pbnRlckRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBob3N0ID0gQk9BUkRfVE9fSE9TVC5nZXQoYm9hcmQpO1xuICAgICAgICBjb25zdCBwb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIGhvc3QhKSk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBhbmNob3I6IHBvaW50LCBmb2N1czogcG9pbnQgfSBhcyBSYW5nZTtcbiAgICAgICAgbGV0IG1vdmFibGVFbGVtZW50cyA9IGJvYXJkLmNoaWxkcmVuLmZpbHRlcihpdGVtID0+IGJvYXJkLmlzTW92YWJsZShpdGVtKSk7XG4gICAgICAgIGlmIChtb3ZhYmxlRWxlbWVudHMubGVuZ3RoICYmICFpc1ByZXZlbnRUb3VjaE1vdmUoYm9hcmQpKSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFJvb3RFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpLmZpbHRlcihpdGVtID0+IG1vdmFibGVFbGVtZW50cy5pbmNsdWRlcyhpdGVtKSk7XG4gICAgICAgICAgICBjb25zdCBoaXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudE9mUm9vdChib2FyZCwgbW92YWJsZUVsZW1lbnRzLCByYW5nZSk7XG4gICAgICAgICAgICBpZiAoaGl0RWxlbWVudCAmJiBzZWxlY3RlZFJvb3RFbGVtZW50cy5pbmNsdWRlcyhoaXRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gc2VsZWN0ZWRSb290RWxlbWVudHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IFtoaXRFbGVtZW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsaWduRz8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBjb25zdCBob3N0ID0gQk9BUkRfVE9fSE9TVC5nZXQoYm9hcmQpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBob3N0ISkpO1xuICAgICAgICAgICAgb2Zmc2V0WCA9IGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludFswXTtcbiAgICAgICAgICAgIG9mZnNldFkgPSBlbmRQb2ludFsxXSAtIHN0YXJ0UG9pbnRbMV07XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCB0cnVlKTtcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLnggKz0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLnkgKz0gb2Zmc2V0WTtcbiAgICAgICAgICAgIGNvbnN0IHJlYWN0aW9uTWFuYWdlciA9IG5ldyBSZWFjdGlvbk1hbmFnZXIoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWFjdGlvbk1hbmFnZXIuaGFuZGxlQWxpZ24oKTtcblxuICAgICAgICAgICAgb2Zmc2V0WCAtPSByZWYuZGVsdGFYO1xuICAgICAgICAgICAgb2Zmc2V0WSAtPSByZWYuZGVsdGFZO1xuICAgICAgICAgICAgYWxpZ25HID0gcmVmLmc7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQoYWxpZ25HKTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldEJ1ZmZlciA9IDU7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMob2Zmc2V0WCkgPiBvZmZzZXRCdWZmZXIgfHwgTWF0aC5hYnMob2Zmc2V0WSkgPiBvZmZzZXRCdWZmZXIgfHwgZ2V0TW92aW5nRWxlbWVudHMoYm9hcmQpLmxlbmd0aCA+IDAgfHwgcmVmLmRlbHRhWCkge1xuICAgICAgICAgICAgICAgIHRocm90dGxlUkFGKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSBhY3RpdmVFbGVtZW50cy5tYXAoYWN0aXZlRWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2ludHMgPSBhY3RpdmVFbGVtZW50LnBvaW50cyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGFjdGl2ZUVsZW1lbnQucG9pbnRzIVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYm9hcmQuY2hpbGRyZW4uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gYWN0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IG5ld1BvaW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoJ2VsZW1lbnQtbW92aW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZE1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyDpmLvmraIgbW92ZSDov4fnqIvkuK3op6blj5HnlLvluIPmu5rliqjooYzkuLpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBpblBsYWl0Qm9hcmRFbGVtZW50ID0gaXNJblBsYWl0Qm9hcmQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICAgICAgaWYgKCFpblBsYWl0Qm9hcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgIGNhbmNlbE1vdmUoYm9hcmQpO1xuICAgICAgICB9XG4gICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgIGdsb2JhbFBvaW50ZXJVcChldmVudCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbmNlbE1vdmUoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgYWxpZ25HPy5yZW1vdmUoKTtcbiAgICAgICAgc3RhcnRQb2ludCA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgcmVtb3ZlTW92aW5nRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgZmFsc2UpO1xuICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKCdlbGVtZW50LW1vdmluZycpO1xuICAgIH1cblxuICAgIHJldHVybiBib2FyZDtcbn1cbiJdfQ==
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBaUI7SUFDeEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRS9FLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLE9BQU8sR0FBRyxD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QkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxVQUFVLEVBQUU7WUFDWixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckI7UUFDRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFFRixTQUFTLFVBQVUsQ0FBQyxLQUFpQjtRQUNqQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDakIsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNaLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUIsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJPQVJEX1RPX0hPU1QgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgaXNJblBsYWl0Qm9hcmQsIHRyYW5zZm9ybVBvaW50IH0gZnJvbSAnLi4vdXRpbHMvYm9hcmQnO1xuaW1wb3J0IHsgdG9Qb2ludCB9IGZyb20gJy4uL3V0aWxzL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50JztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRIaXRFbGVtZW50T2ZSb290LCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQtZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgdGhyb3R0bGVSQUYgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgYWRkTW92aW5nRWxlbWVudHMsIGdldE1vdmluZ0VsZW1lbnRzLCByZW1vdmVNb3ZpbmdFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL21vdmluZy1lbGVtZW50JztcbmltcG9ydCB7IE1FUkdJTkcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2hpc3RvcnknO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzUHJldmVudFRvdWNoTW92ZSwgcHJldmVudFRvdWNoTW92ZSwgaGFuZGxlVG91Y2hUYXJnZXQsIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBSZWFjdGlvbk1hbmFnZXIgfSBmcm9tICcuLi91dGlscy9yZWFjdGlvbi1tYW5hZ2VyJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNb3ZpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwLCBnbG9iYWxQb2ludGVyTW92ZSB9ID0gYm9hcmQ7XG5cbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuICAgIGxldCBpc1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9pbnQ6IFBvaW50IHwgbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgbGV0IGFsaWduRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgaG9zdCA9IEJPQVJEX1RPX0hPU1QuZ2V0KGJvYXJkKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBob3N0ISkpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgYW5jaG9yOiBwb2ludCwgZm9jdXM6IHBvaW50IH0gYXMgUmFuZ2U7XG4gICAgICAgIGxldCBtb3ZhYmxlRWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIoaXRlbSA9PiBib2FyZC5pc01vdmFibGUoaXRlbSkpO1xuICAgICAgICBpZiAobW92YWJsZUVsZW1lbnRzLmxlbmd0aCAmJiAhaXNQcmV2ZW50VG91Y2hNb3ZlKGJvYXJkKSkge1xuICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb290RWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKS5maWx0ZXIoaXRlbSA9PiBtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXMoaXRlbSkpO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdEVsZW1lbnRPZlJvb3QoYm9hcmQsIG1vdmFibGVFbGVtZW50cywgcmFuZ2UpO1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQgJiYgc2VsZWN0ZWRSb290RWxlbWVudHMuaW5jbHVkZXMoaGl0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHNlbGVjdGVkUm9vdEVsZW1lbnRzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbaGl0RWxlbWVudF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkpIHtcbiAgICAgICAgICAgIGlmICghaXNQcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGlzUHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxpZ25HPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSBCT0FSRF9UT19IT1NULmdldChib2FyZCk7XG4gICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIGhvc3QhKSk7XG4gICAgICAgICAgICBvZmZzZXRYID0gZW5kUG9pbnRbMF0gLSBzdGFydFBvaW50WzBdO1xuICAgICAgICAgICAgb2Zmc2V0WSA9IGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXTtcbiAgICAgICAgICAgIGNvbnN0IHRvbGVyYW5jZSA9IDU7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMob2Zmc2V0WCkgPiB0b2xlcmFuY2UgfHwgTWF0aC5hYnMob2Zmc2V0WSkgPiB0b2xlcmFuY2UgfHwgZ2V0TW92aW5nRWxlbWVudHMoYm9hcmQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVJBRigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZS54ICs9IG9mZnNldFg7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLnkgKz0gb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhY3Rpb25NYW5hZ2VyID0gbmV3IFJlYWN0aW9uTWFuYWdlcihib2FyZCwgYWN0aXZlRWxlbWVudHMsIGFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmID0gcmVhY3Rpb25NYW5hZ2VyLmhhbmRsZUFsaWduKCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFggLT0gcmVmLmRlbHRhWDtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WSAtPSByZWYuZGVsdGFZO1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkcgPSByZWYuZztcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKGFsaWduRyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSBhY3RpdmVFbGVtZW50cy5tYXAoYWN0aXZlRWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2ludHMgPSBhY3RpdmVFbGVtZW50LnBvaW50cyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGFjdGl2ZUVsZW1lbnQucG9pbnRzIVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYm9hcmQuY2hpbGRyZW4uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gYWN0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IG5ld1BvaW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoJ2VsZW1lbnQtbW92aW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZE1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyDpmLvmraIgbW92ZSDov4fnqIvkuK3op6blj5HnlLvluIPmu5rliqjooYzkuLpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBpblBsYWl0Qm9hcmRFbGVtZW50ID0gaXNJblBsYWl0Qm9hcmQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICAgICAgaWYgKCFpblBsYWl0Qm9hcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgIGNhbmNlbE1vdmUoYm9hcmQpO1xuICAgICAgICB9XG4gICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgIGdsb2JhbFBvaW50ZXJVcChldmVudCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbmNlbE1vdmUoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgYWxpZ25HPy5yZW1vdmUoKTtcbiAgICAgICAgc3RhcnRQb2ludCA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgcmVtb3ZlTW92aW5nRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgZmFsc2UpO1xuICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKCdlbGVtZW50LW1vdmluZycpO1xuICAgIH1cblxuICAgIHJldHVybiBib2FyZDtcbn1cbiJdfQ==
@@ -1,7 +1,8 @@
1
1
  import { PlaitBoard } from '../interfaces/board';
2
2
  import { createG } from './dom/common';
3
- import { SELECTION_BORDER_COLOR } from '../interfaces';
3
+ import { RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';
4
4
  import { depthFirstRecursion } from './tree';
5
+ const ALIGN_TOLERANCE = 2;
5
6
  export class ReactionManager {
6
7
  constructor(board, activeElements, activeRectangle) {
7
8
  this.board = board;
@@ -30,13 +31,8 @@ export class ReactionManager {
30
31
  handleAlign() {
31
32
  const alignRectangles = this.getAlignRectangle();
32
33
  const g = createG();
33
- const alignLines = [];
34
+ let alignLines = [];
34
35
  const offset = 12;
35
- const options = {
36
- stroke: SELECTION_BORDER_COLOR,
37
- strokeWidth: 1,
38
- strokeLineDash: [4, 4]
39
- };
40
36
  let deltaX = 0;
41
37
  let deltaY = 0;
42
38
  let isCorrectX = false;
@@ -44,7 +40,7 @@ export class ReactionManager {
44
40
  for (let alignRectangle of alignRectangles) {
45
41
  const closestDistances = this.calculateClosestDistances(this.activeRectangle, alignRectangle);
46
42
  let canDrawHorizontal = false;
47
- if (!isCorrectX && closestDistances.absXDistance < 5) {
43
+ if (!isCorrectX && closestDistances.absXDistance < ALIGN_TOLERANCE) {
48
44
  deltaX = closestDistances.xDistance;
49
45
  this.activeRectangle.x -= deltaX;
50
46
  isCorrectX = true;
@@ -94,7 +90,7 @@ export class ReactionManager {
94
90
  isCorrectX = true;
95
91
  }
96
92
  let canDrawVertical = false;
97
- if (!isCorrectY && closestDistances.absYDistance < 5) {
93
+ if (!isCorrectY && closestDistances.absYDistance < ALIGN_TOLERANCE) {
98
94
  deltaY = closestDistances.yDistance;
99
95
  this.activeRectangle.y -= deltaY;
100
96
  isCorrectY = true;
@@ -143,13 +139,33 @@ export class ReactionManager {
143
139
  }
144
140
  }
145
141
  }
142
+ const alignDeltaX = deltaX;
143
+ const alignDeltaY = deltaY;
144
+ this.activeRectangle.x += deltaX;
145
+ const distributeHorizontalResult = this.alignDistribute(alignRectangles, true);
146
+ const distributeVerticalResult = this.alignDistribute(alignRectangles, false);
147
+ const distributeLines = [...distributeHorizontalResult.distributeLines, ...distributeVerticalResult.distributeLines];
148
+ if (distributeHorizontalResult.delta) {
149
+ deltaX = distributeHorizontalResult.delta;
150
+ if (alignDeltaX !== deltaX) {
151
+ alignLines[0] = [];
152
+ alignLines[1] = [];
153
+ alignLines[2] = [];
154
+ }
155
+ }
156
+ if (distributeVerticalResult.delta) {
157
+ deltaY = distributeVerticalResult.delta;
158
+ if (alignDeltaY !== deltaY) {
159
+ alignLines[3] = [];
160
+ alignLines[4] = [];
161
+ alignLines[5] = [];
162
+ }
163
+ }
146
164
  if (alignLines.length) {
147
- alignLines.forEach(points => {
148
- if (!points.length)
149
- return;
150
- const xAlign = PlaitBoard.getRoughSVG(this.board).line(points[0], points[1], points[2], points[3], options);
151
- g.appendChild(xAlign);
152
- });
165
+ this.drawAlignLines(alignLines, g);
166
+ }
167
+ if (distributeLines.length) {
168
+ this.drawDistributeLines(distributeLines, g);
153
169
  }
154
170
  return { deltaX, deltaY, g };
155
171
  }
@@ -181,5 +197,174 @@ export class ReactionManager {
181
197
  indexY
182
198
  };
183
199
  }
200
+ alignDistribute(alignRectangles, isHorizontal) {
201
+ let distributeLines = [];
202
+ let delta = 0;
203
+ let rectangles = [];
204
+ const axis = isHorizontal ? 'x' : 'y';
205
+ const side = isHorizontal ? 'width' : 'height';
206
+ const activeRectangleCenter = this.activeRectangle[axis] + this.activeRectangle[side] / 2;
207
+ alignRectangles.forEach(rec => {
208
+ const isCross = isHorizontal ? isHorizontalCross(rec, this.activeRectangle) : isVerticalCross(rec, this.activeRectangle);
209
+ if (isCross && !RectangleClient.isHit(rec, this.activeRectangle)) {
210
+ rectangles.push(rec);
211
+ }
212
+ });
213
+ rectangles = [...rectangles, this.activeRectangle].sort((a, b) => a[axis] - b[axis]);
214
+ const refArray = [];
215
+ let distributeDistance = 0;
216
+ let beforeIndex = undefined;
217
+ let afterIndex = undefined;
218
+ for (let i = 0; i < rectangles.length; i++) {
219
+ for (let j = i + 1; j < rectangles.length; j++) {
220
+ const before = rectangles[i];
221
+ const after = rectangles[j];
222
+ const distance = after[axis] - (before[axis] + before[side]);
223
+ let dif = Infinity;
224
+ if (refArray[i]?.after) {
225
+ refArray[i].after.push({ distance, index: j });
226
+ }
227
+ else {
228
+ refArray[i] = { ...refArray[i], after: [{ distance, index: j }] };
229
+ }
230
+ if (refArray[j]?.before) {
231
+ refArray[j].before.push({ distance, index: i });
232
+ }
233
+ else {
234
+ refArray[j] = { ...refArray[j], before: [{ distance, index: i }] };
235
+ }
236
+ //middle
237
+ let _center = (before[axis] + before[side] + after[axis]) / 2;
238
+ dif = Math.abs(activeRectangleCenter - _center);
239
+ if (dif < ALIGN_TOLERANCE) {
240
+ distributeDistance = (after[axis] - (before[axis] + before[side]) - this.activeRectangle[side]) / 2;
241
+ delta = activeRectangleCenter - _center;
242
+ beforeIndex = i;
243
+ afterIndex = j;
244
+ }
245
+ //after
246
+ const distanceRight = after[axis] - (before[axis] + before[side]);
247
+ _center = after[axis] + after[side] + distanceRight + this.activeRectangle[side] / 2;
248
+ dif = Math.abs(activeRectangleCenter - _center);
249
+ if (!distributeDistance && dif < ALIGN_TOLERANCE) {
250
+ distributeDistance = distanceRight;
251
+ beforeIndex = j;
252
+ delta = activeRectangleCenter - _center;
253
+ }
254
+ //before
255
+ const distanceBefore = after[axis] - (before[axis] + before[side]);
256
+ _center = before[axis] - distanceBefore - this.activeRectangle[side] / 2;
257
+ dif = Math.abs(activeRectangleCenter - _center);
258
+ if (!distributeDistance && dif < ALIGN_TOLERANCE) {
259
+ distributeDistance = distanceBefore;
260
+ afterIndex = i;
261
+ delta = activeRectangleCenter - _center;
262
+ }
263
+ }
264
+ }
265
+ const activeIndex = rectangles.indexOf(this.activeRectangle);
266
+ let beforeIndexes = [];
267
+ let afterIndexes = [];
268
+ if (beforeIndex !== undefined) {
269
+ beforeIndexes.push(beforeIndex);
270
+ findRectangle(distributeDistance, refArray[beforeIndex], 'before', beforeIndexes);
271
+ }
272
+ if (afterIndex !== undefined) {
273
+ afterIndexes.push(afterIndex);
274
+ findRectangle(distributeDistance, refArray[afterIndex], 'after', afterIndexes);
275
+ }
276
+ if (beforeIndexes.length || afterIndexes.length) {
277
+ const indexArr = [...beforeIndexes.reverse(), activeIndex, ...afterIndexes];
278
+ this.activeRectangle[axis] -= delta;
279
+ for (let i = 1; i < indexArr.length; i++) {
280
+ distributeLines.push(getLinePoints(rectangles[indexArr[i - 1]], rectangles[indexArr[i]]));
281
+ }
282
+ }
283
+ function findRectangle(distance, ref, direction, rectangleIndexes) {
284
+ const arr = ref[direction];
285
+ const index = refArray.indexOf(ref);
286
+ if ((index === 0 && direction === 'before') || (index === refArray.length - 1 && direction === 'after'))
287
+ return;
288
+ for (let i = 0; i < arr.length; i++) {
289
+ if (Math.abs(arr[i].distance - distance) < 0.1) {
290
+ rectangleIndexes.push(arr[i].index);
291
+ findRectangle(distance, refArray[arr[i].index], direction, rectangleIndexes);
292
+ return;
293
+ }
294
+ }
295
+ }
296
+ function getLinePoints(beforeRectangle, afterRectangle) {
297
+ const oppositeAxis = axis === 'x' ? 'y' : 'x';
298
+ const oppositeSide = side === 'width' ? 'height' : 'width';
299
+ const align = [
300
+ beforeRectangle[oppositeAxis],
301
+ beforeRectangle[oppositeAxis] + beforeRectangle[oppositeSide],
302
+ afterRectangle[oppositeAxis],
303
+ afterRectangle[oppositeAxis] + afterRectangle[oppositeSide]
304
+ ];
305
+ const sortArr = align.sort((a, b) => a - b);
306
+ const average = (sortArr[1] + sortArr[2]) / 2;
307
+ const offset = 3;
308
+ return isHorizontal
309
+ ? [
310
+ [beforeRectangle.x + beforeRectangle.width + offset, average],
311
+ [afterRectangle.x - offset, average]
312
+ ]
313
+ : [
314
+ [average, beforeRectangle.y + beforeRectangle.height + offset],
315
+ [average, afterRectangle.y - offset]
316
+ ];
317
+ }
318
+ return { delta, distributeLines };
319
+ }
320
+ drawAlignLines(lines, g) {
321
+ lines.forEach(points => {
322
+ if (!points.length)
323
+ return;
324
+ const xAlign = PlaitBoard.getRoughSVG(this.board).line(points[0], points[1], points[2], points[3], {
325
+ stroke: SELECTION_BORDER_COLOR,
326
+ strokeWidth: 1,
327
+ strokeLineDash: [4, 4]
328
+ });
329
+ g.appendChild(xAlign);
330
+ });
331
+ }
332
+ drawDistributeLines(lines, g) {
333
+ lines.forEach(line => {
334
+ if (!line.length)
335
+ return;
336
+ let isHorizontal = line[0][1] === line[1][1];
337
+ const yAlign = PlaitBoard.getRoughSVG(this.board).line(line[0][0], line[0][1], line[1][0], line[1][1], {
338
+ stroke: SELECTION_BORDER_COLOR,
339
+ strokeWidth: 1
340
+ });
341
+ g.appendChild(yAlign);
342
+ line.forEach(point => {
343
+ const barPoint = getBarPoint(point, isHorizontal);
344
+ const bar = PlaitBoard.getRoughSVG(this.board).line(barPoint[0][0], barPoint[0][1], barPoint[1][0], barPoint[1][1], {
345
+ stroke: SELECTION_BORDER_COLOR,
346
+ strokeWidth: 1
347
+ });
348
+ g.appendChild(bar);
349
+ });
350
+ });
351
+ }
352
+ }
353
+ function isHorizontalCross(rectangle, other) {
354
+ return !(rectangle.y + rectangle.height < other.y || rectangle.y > other.y + other.height);
355
+ }
356
+ function isVerticalCross(rectangle, other) {
357
+ return !(rectangle.x + rectangle.width < other.x || rectangle.x > other.x + other.width);
358
+ }
359
+ function getBarPoint(point, isHorizontal) {
360
+ return isHorizontal
361
+ ? [
362
+ [point[0], point[1] - 4],
363
+ [point[0], point[1] + 4]
364
+ ]
365
+ : [
366
+ [point[0] - 4, point[1]],
367
+ [point[0] + 4, point[1]]
368
+ ];
184
369
  }
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFRN0MsTUFBTSxPQUFPLGVBQWU7SUFHeEIsWUFBb0IsS0FBaUIsRUFBVSxjQUE4QixFQUFVLGVBQWdDO1FBQW5HLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDbkgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUNyQyxtQkFBbUIsQ0FDZixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxFQUFFO1lBQ0gsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQ3JILE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELFNBQVMsSUFBSSxNQUFNLENBQUMs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LENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXpGLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVyRSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFakUsT0FBTztZQUNILFlBQVksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ25DLFNBQVMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzdCLFlBQVksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ25DLFNBQVMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzdCLE1BQU07WUFDTixNQUFNO1NBQ1QsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IGNyZWF0ZUcgfSBmcm9tICcuL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IEFuY2VzdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IFJlY3RhbmdsZUNsaWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiB9IGZyb20gJy4vdHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxpZ25SZWYge1xuICAgIGRlbHRhWDogbnVtYmVyO1xuICAgIGRlbHRhWTogbnVtYmVyO1xuICAgIGc6IFNWR0dFbGVtZW50O1xufVxuXG5leHBvcnQgY2xhc3MgUmVhY3Rpb25NYW5hZ2VyIHtcbiAgICBhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBib2FyZDogUGxhaXRCb2FyZCwgcHJpdmF0ZSBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIHByaXZhdGUgYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgdGhpcy5hbGlnblJlY3RhbmdsZXMgPSB0aGlzLmdldEFsaWduUmVjdGFuZ2xlKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxpZ25SZWN0YW5nbGUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgICAgICB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNvbWUoZWxlbWVudCA9PiBub2RlLmlkID09PSBlbGVtZW50LmlkKSB8fCBub2RlLnR5cGUgIT09ICdnZW9tZXRyeScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZWN0YW5nbGUgPSB0aGlzLmJvYXJkLmdldFJlY3RhbmdsZShub2RlKTtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUgJiYgcmVzdWx0LnB1c2gocmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSAmJiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8IHRoaXMuYm9hcmQuaXNSZWN1cnNpb24obm9kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGhhbmRsZUFsaWduKCk6IEFsaWduUmVmIHtcbiAgICAgICAgY29uc3QgYWxpZ25SZWN0YW5nbGVzID0gdGhpcy5nZXRBbGlnblJlY3RhbmdsZSgpO1xuICAgICAgICBjb25zdCBnID0gY3JlYXRlRygpO1xuICAgICAgICBjb25zdCBhbGlnbkxpbmVzID0gW107XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDEyO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICBzdHJva2VMaW5lRGFzaDogWzQsIDRdXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZWx0YVggPSAwO1xuICAgICAgICBsZXQgZGVsdGFZID0gMDtcbiAgICAgICAgbGV0IGlzQ29ycmVjdFggPSBmYWxzZTtcbiAgICAgICAgbGV0IGlzQ29ycmVjdFkgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBhbGlnblJlY3RhbmdsZSBvZiBhbGlnblJlY3RhbmdsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3REaXN0YW5jZXMgPSB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3REaXN0YW5jZXModGhpcy5hY3RpdmVSZWN0YW5nbGUsIGFsaWduUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGxldCBjYW5EcmF3SG9yaXpvbnRhbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpc0NvcnJlY3RYICYmIGNsb3Nlc3REaXN0YW5jZXMuYWJzWERpc3RhbmNlIDwgNSkge1xuICAgICAgICAgICAgICAgIGRlbHRhWCA9IGNsb3Nlc3REaXN0YW5jZXMueERpc3RhbmNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggLT0gZGVsdGFYO1xuICAgICAgICAgICAgICAgIGlzQ29ycmVjdFggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbkRyYXdIb3Jpem9udGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNsb3Nlc3REaXN0YW5jZXMuYWJzWERpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FuRHJhd0hvcml6b250YWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2FuRHJhd0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFkgPSBbXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLnksXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVUb3BZID0gTWF0aC5taW4oLi4udmVydGljYWxZKSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lQm90dG9tWSA9IE1hdGgubWF4KC4uLnZlcnRpY2FsWSkgKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdExpbmUgPSBbdGhpcy5hY3RpdmVSZWN0YW5nbGUueCwgbGluZVRvcFksIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLngsIGxpbmVCb3R0b21ZXTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWRkbGVMaW5lID0gW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLFxuICAgICAgICAgICAgICAgICAgICBsaW5lVG9wWSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZUJvdHRvbVlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0TGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBsaW5lVG9wWSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBsaW5lQm90dG9tWVxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3TGVmdExpbmUgPVxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMSB8fFxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDIgJiYgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggPT09IGFsaWduUmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd0xlZnRMaW5lICYmICFhbGlnbkxpbmVzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMF0gPSBsZWZ0TGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3UmlnaHRMaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDIgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDMgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAwICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdSaWdodExpbmUgJiYgIWFsaWduTGluZXNbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1syXSA9IHJpZ2h0TGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3TWlkZGxlTGluZSA9IGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSA0IHx8ICghc2hvdWxkRHJhd0xlZnRMaW5lICYmICFzaG91bGREcmF3UmlnaHRMaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd01pZGRsZUxpbmUgJiYgIWFsaWduTGluZXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1sxXSA9IG1pZGRsZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaXNDb3JyZWN0WCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjYW5EcmF3VmVydGljYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghaXNDb3JyZWN0WSAmJiBjbG9zZXN0RGlzdGFuY2VzLmFic1lEaXN0YW5jZSA8IDUpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVkgPSBjbG9zZXN0RGlzdGFuY2VzLnlEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55IC09IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RZID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYW5EcmF3VmVydGljYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNsb3Nlc3REaXN0YW5jZXMuYWJzWURpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FuRHJhd1ZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5EcmF3VmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsWCA9IFtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGhcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVMZWZ0WCA9IE1hdGgubWluKC4uLmhvcml6b250YWxYKSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lUmlnaHRYID0gTWF0aC5tYXgoLi4uaG9yaXpvbnRhbFgpICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcExpbmUgPSBbbGluZUxlZnRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55LCBsaW5lUmlnaHRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55XTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsTWlkZGxlTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZUxlZnRYLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAvIDJcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIGxpbmVMZWZ0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3VG9wTGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAxIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMiAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgPT09IGFsaWduUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdUb3BMaW5lICYmICFhbGlnbkxpbmVzWzNdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbM10gPSB0b3BMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdCb3R0b21MaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDIgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDMgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdCb3R0b21MaW5lICYmICFhbGlnbkxpbmVzWzVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNV0gPSBib3R0b21MaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdNaWRkbGVMaW5lID0gY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDQgfHwgKCFzaG91bGREcmF3VG9wTGluZSAmJiAhc2hvdWxkRHJhd0JvdHRvbUxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TWlkZGxlTGluZSAmJiAhYWxpZ25MaW5lc1s0XSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzRdID0gaG9yaXpvbnRhbE1pZGRsZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsaWduTGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbGlnbkxpbmVzLmZvckVhY2gocG9pbnRzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50cy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCB4QWxpZ24gPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBnLmFwcGVuZENoaWxkKHhBbGlnbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGRlbHRhWCwgZGVsdGFZLCBnIH07XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ2xvc2VzdERpc3RhbmNlcyhhY3RpdmVSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgYWxpZ25SZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgPSBbYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLCBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgY29uc3QgYWxpZ25SZWN0YW5nbGVDZW50ZXIgPSBbYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoIC8gMiwgYWxpZ25SZWN0YW5nbGUueSArIGFsaWduUmVjdGFuZ2xlLmhlaWdodCAvIDJdO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlclhEaXN0YW5jZSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlclswXSAtIGFsaWduUmVjdGFuZ2xlQ2VudGVyWzBdO1xuICAgICAgICBjb25zdCBjZW50ZXJZRGlzdGFuY2UgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXJbMV0gLSBhbGlnblJlY3RhbmdsZUNlbnRlclsxXTtcblxuICAgICAgICBjb25zdCBsZWZ0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggLSBhbGlnblJlY3RhbmdsZS54O1xuICAgICAgICBjb25zdCBsZWZ0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54IC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLSBhbGlnblJlY3RhbmdsZS54O1xuXG4gICAgICAgIGNvbnN0IHRvcFRvVG9wID0gYWN0aXZlUmVjdGFuZ2xlLnkgLSBhbGlnblJlY3RhbmdsZS55O1xuICAgICAgICBjb25zdCB0b3BUb0JvdHRvbSA9IGFjdGl2ZVJlY3RhbmdsZS55IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b21Ub1RvcCA9IGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAtIGFsaWduUmVjdGFuZ2xlLnk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVRvQm90dG9tID0gYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZXMgPSBbbGVmdFRvTGVmdCwgbGVmdFRvUmlnaHQsIHJpZ2h0VG9SaWdodCwgcmlnaHRUb0xlZnQsIGNlbnRlclhEaXN0YW5jZV07XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXMgPSBbdG9wVG9Ub3AsIHRvcFRvQm90dG9tLCBib3R0b21Ub0JvdHRvbSwgYm90dG9tVG9Ub3AsIGNlbnRlcllEaXN0YW5jZV07XG5cbiAgICAgICAgY29uc3QgeERpc3RhbmNlc0FicyA9IHhEaXN0YW5jZXMubWFwKGRpc3RhbmNlID0+IE1hdGguYWJzKGRpc3RhbmNlKSk7XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXNBYnMgPSB5RGlzdGFuY2VzLm1hcChkaXN0YW5jZSA9PiBNYXRoLmFicyhkaXN0YW5jZSkpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4WCA9IHhEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi54RGlzdGFuY2VzQWJzKSk7XG4gICAgICAgIGNvbnN0IGluZGV4WSA9IHlEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi55RGlzdGFuY2VzQWJzKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFic1hEaXN0YW5jZTogeERpc3RhbmNlc0Fic1tpbmRleFhdLFxuICAgICAgICAgICAgeERpc3RhbmNlOiB4RGlzdGFuY2VzW2luZGV4WF0sXG4gICAgICAgICAgICBhYnNZRGlzdGFuY2U6IHlEaXN0YW5jZXNBYnNbaW5kZXhZXSxcbiAgICAgICAgICAgIHlEaXN0YW5jZTogeURpc3RhbmNlc1tpbmRleFldLFxuICAgICAgICAgICAgaW5kZXhYLFxuICAgICAgICAgICAgaW5kZXhZXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFTLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFhN0MsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLE1BQU0sT0FBTyxlQUFlO0lBR3hCLFlBQW9CLEtBQWlCLEVBQVUsY0FBOEIsRUFBVSxlQUFnQztRQUFuRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ25ILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7UUFDckMsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO2dCQUNySCxPQUFPO2FBQ1Y7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJ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QWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNHLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWpGLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0csTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFekYsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sTUFBTSxHQUFHLGFB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SyxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUNELFNBQVMsV0FBVyxDQUFDLEtBQVksRUFBRSxZQUFxQjtJQUNwRCxPQUFPLFlBQVk7UUFDZixDQUFDLENBQUM7WUFDSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDSCxDQUFDLENBQUM7WUFDSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0IsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBjcmVhdGVHIH0gZnJvbSAnLi9kb20vY29tbW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uIH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBBbGlnblJlZiB7XG4gICAgZGVsdGFYOiBudW1iZXI7XG4gICAgZGVsdGFZOiBudW1iZXI7XG4gICAgZzogU1ZHR0VsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0ZVJlZiB7XG4gICAgYmVmb3JlOiB7IGRpc3RhbmNlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xuICAgIGFmdGVyOiB7IGRpc3RhbmNlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5jb25zdCBBTElHTl9UT0xFUkFOQ0UgPSAyO1xuXG5leHBvcnQgY2xhc3MgUmVhY3Rpb25NYW5hZ2VyIHtcbiAgICBhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBib2FyZDogUGxhaXRCb2FyZCwgcHJpdmF0ZSBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIHByaXZhdGUgYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgdGhpcy5hbGlnblJlY3RhbmdsZXMgPSB0aGlzLmdldEFsaWduUmVjdGFuZ2xlKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxpZ25SZWN0YW5nbGUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgICAgICB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNvbWUoZWxlbWVudCA9PiBub2RlLmlkID09PSBlbGVtZW50LmlkKSB8fCBub2RlLnR5cGUgIT09ICdnZW9tZXRyeScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZWN0YW5nbGUgPSB0aGlzLmJvYXJkLmdldFJlY3RhbmdsZShub2RlKTtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUgJiYgcmVzdWx0LnB1c2gocmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSAmJiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8IHRoaXMuYm9hcmQuaXNSZWN1cnNpb24obm9kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGhhbmRsZUFsaWduKCk6IEFsaWduUmVmIHtcbiAgICAgICAgY29uc3QgYWxpZ25SZWN0YW5nbGVzID0gdGhpcy5nZXRBbGlnblJlY3RhbmdsZSgpO1xuICAgICAgICBjb25zdCBnID0gY3JlYXRlRygpO1xuICAgICAgICBsZXQgYWxpZ25MaW5lcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDEyO1xuICAgICAgICBsZXQgZGVsdGFYID0gMDtcbiAgICAgICAgbGV0IGRlbHRhWSA9IDA7XG4gICAgICAgIGxldCBpc0NvcnJlY3RYID0gZmFsc2U7XG4gICAgICAgIGxldCBpc0NvcnJlY3RZID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgYWxpZ25SZWN0YW5nbGUgb2YgYWxpZ25SZWN0YW5nbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZXN0RGlzdGFuY2VzID0gdGhpcy5jYWxjdWxhdGVDbG9zZXN0RGlzdGFuY2VzKHRoaXMuYWN0aXZlUmVjdGFuZ2xlLCBhbGlnblJlY3RhbmdsZSk7XG4gICAgICAgICAgICBsZXQgY2FuRHJhd0hvcml6b250YWwgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghaXNDb3JyZWN0WCAmJiBjbG9zZXN0RGlzdGFuY2VzLmFic1hEaXN0YW5jZSA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgIGRlbHRhWCA9IGNsb3Nlc3REaXN0YW5jZXMueERpc3RhbmNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggLT0gZGVsdGFYO1xuICAgICAgICAgICAgICAgIGlzQ29ycmVjdFggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbkRyYXdIb3Jpem9udGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNsb3Nlc3REaXN0YW5jZXMuYWJzWERpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FuRHJhd0hvcml6b250YWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2FuRHJhd0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFkgPSBbXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLnksXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVUb3BZID0gTWF0aC5taW4oLi4udmVydGljYWxZKSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lQm90dG9tWSA9IE1hdGgubWF4KC4uLnZlcnRpY2FsWSkgKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdExpbmUgPSBbdGhpcy5hY3RpdmVSZWN0YW5nbGUueCwgbGluZVRvcFksIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLngsIGxpbmVCb3R0b21ZXTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWRkbGVMaW5lID0gW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLFxuICAgICAgICAgICAgICAgICAgICBsaW5lVG9wWSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZUJvdHRvbVlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0TGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBsaW5lVG9wWSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBsaW5lQm90dG9tWVxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3TGVmdExpbmUgPVxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMSB8fFxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDIgJiYgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggPT09IGFsaWduUmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd0xlZnRMaW5lICYmICFhbGlnbkxpbmVzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMF0gPSBsZWZ0TGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3UmlnaHRMaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDIgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDMgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAwICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdSaWdodExpbmUgJiYgIWFsaWduTGluZXNbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1syXSA9IHJpZ2h0TGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3TWlkZGxlTGluZSA9IGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSA0IHx8ICghc2hvdWxkRHJhd0xlZnRMaW5lICYmICFzaG91bGREcmF3UmlnaHRMaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd01pZGRsZUxpbmUgJiYgIWFsaWduTGluZXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1sxXSA9IG1pZGRsZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaXNDb3JyZWN0WCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjYW5EcmF3VmVydGljYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghaXNDb3JyZWN0WSAmJiBjbG9zZXN0RGlzdGFuY2VzLmFic1lEaXN0YW5jZSA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgIGRlbHRhWSA9IGNsb3Nlc3REaXN0YW5jZXMueURpc3RhbmNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgLT0gZGVsdGFZO1xuICAgICAgICAgICAgICAgIGlzQ29ycmVjdFkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbkRyYXdWZXJ0aWNhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2xvc2VzdERpc3RhbmNlcy5hYnNZRGlzdGFuY2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjYW5EcmF3VmVydGljYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbkRyYXdWZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxYID0gW1xuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS54LFxuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS54ICsgYWxpZ25SZWN0YW5nbGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLngsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUxlZnRYID0gTWF0aC5taW4oLi4uaG9yaXpvbnRhbFgpIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVSaWdodFggPSBNYXRoLm1heCguLi5ob3Jpem9udGFsWCkgKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9wTGluZSA9IFtsaW5lTGVmdFgsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnksIGxpbmVSaWdodFgsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxNaWRkbGVMaW5lID0gW1xuICAgICAgICAgICAgICAgICAgICBsaW5lTGVmdFgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLyAyLFxuICAgICAgICAgICAgICAgICAgICBsaW5lUmlnaHRYLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMlxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgYm90dG9tTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZUxlZnRYLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBsaW5lUmlnaHRYLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdUb3BMaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAyICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCA9PT0gYWxpZ25SZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd1RvcExpbmUgJiYgIWFsaWduTGluZXNbM10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1szXSA9IHRvcExpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd0JvdHRvbUxpbmUgPVxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMiB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMyB8fFxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDAgJiYgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggPT09IGFsaWduUmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd0JvdHRvbUxpbmUgJiYgIWFsaWduTGluZXNbNV0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1s1XSA9IGJvdHRvbUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd01pZGRsZUxpbmUgPSBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gNCB8fCAoIXNob3VsZERyYXdUb3BMaW5lICYmICFzaG91bGREcmF3Qm90dG9tTGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdNaWRkbGVMaW5lICYmICFhbGlnbkxpbmVzWzRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNF0gPSBob3Jpem9udGFsTWlkZGxlTGluZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGlnbkRlbHRhWCA9IGRlbHRhWDtcbiAgICAgICAgY29uc3QgYWxpZ25EZWx0YVkgPSBkZWx0YVk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArPSBkZWx0YVg7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0ID0gdGhpcy5hbGlnbkRpc3RyaWJ1dGUoYWxpZ25SZWN0YW5nbGVzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0ID0gdGhpcy5hbGlnbkRpc3RyaWJ1dGUoYWxpZ25SZWN0YW5nbGVzLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVMaW5lczogUG9pbnRbXVtdID0gWy4uLmRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0LmRpc3RyaWJ1dGVMaW5lcywgLi4uZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0LmRpc3RyaWJ1dGVMaW5lc107XG4gICAgICAgIGlmIChkaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdC5kZWx0YSkge1xuICAgICAgICAgICAgZGVsdGFYID0gZGlzdHJpYnV0ZUhvcml6b250YWxSZXN1bHQuZGVsdGE7XG4gICAgICAgICAgICBpZiAoYWxpZ25EZWx0YVggIT09IGRlbHRhWCkge1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMF0gPSBbXTtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzFdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1syXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kZWx0YSkge1xuICAgICAgICAgICAgZGVsdGFZID0gZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0LmRlbHRhO1xuICAgICAgICAgICAgaWYgKGFsaWduRGVsdGFZICE9PSBkZWx0YVkpIHtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzNdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1s0XSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbGlnbkxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3QWxpZ25MaW5lcyhhbGlnbkxpbmVzLCBnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0cmlidXRlTGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdEaXN0cmlidXRlTGluZXMoZGlzdHJpYnV0ZUxpbmVzLCBnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGRlbHRhWCwgZGVsdGFZLCBnIH07XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ2xvc2VzdERpc3RhbmNlcyhhY3RpdmVSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgYWxpZ25SZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgPSBbYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLCBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgY29uc3QgYWxpZ25SZWN0YW5nbGVDZW50ZXIgPSBbYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoIC8gMiwgYWxpZ25SZWN0YW5nbGUueSArIGFsaWduUmVjdGFuZ2xlLmhlaWdodCAvIDJdO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlclhEaXN0YW5jZSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlclswXSAtIGFsaWduUmVjdGFuZ2xlQ2VudGVyWzBdO1xuICAgICAgICBjb25zdCBjZW50ZXJZRGlzdGFuY2UgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXJbMV0gLSBhbGlnblJlY3RhbmdsZUNlbnRlclsxXTtcblxuICAgICAgICBjb25zdCBsZWZ0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggLSBhbGlnblJlY3RhbmdsZS54O1xuICAgICAgICBjb25zdCBsZWZ0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54IC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLSBhbGlnblJlY3RhbmdsZS54O1xuXG4gICAgICAgIGNvbnN0IHRvcFRvVG9wID0gYWN0aXZlUmVjdGFuZ2xlLnkgLSBhbGlnblJlY3RhbmdsZS55O1xuICAgICAgICBjb25zdCB0b3BUb0JvdHRvbSA9IGFjdGl2ZVJlY3RhbmdsZS55IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b21Ub1RvcCA9IGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAtIGFsaWduUmVjdGFuZ2xlLnk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVRvQm90dG9tID0gYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZXMgPSBbbGVmdFRvTGVmdCwgbGVmdFRvUmlnaHQsIHJpZ2h0VG9SaWdodCwgcmlnaHRUb0xlZnQsIGNlbnRlclhEaXN0YW5jZV07XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXMgPSBbdG9wVG9Ub3AsIHRvcFRvQm90dG9tLCBib3R0b21Ub0JvdHRvbSwgYm90dG9tVG9Ub3AsIGNlbnRlcllEaXN0YW5jZV07XG5cbiAgICAgICAgY29uc3QgeERpc3RhbmNlc0FicyA9IHhEaXN0YW5jZXMubWFwKGRpc3RhbmNlID0+IE1hdGguYWJzKGRpc3RhbmNlKSk7XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXNBYnMgPSB5RGlzdGFuY2VzLm1hcChkaXN0YW5jZSA9PiBNYXRoLmFicyhkaXN0YW5jZSkpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4WCA9IHhEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi54RGlzdGFuY2VzQWJzKSk7XG4gICAgICAgIGNvbnN0IGluZGV4WSA9IHlEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi55RGlzdGFuY2VzQWJzKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFic1hEaXN0YW5jZTogeERpc3RhbmNlc0Fic1tpbmRleFhdLFxuICAgICAgICAgICAgeERpc3RhbmNlOiB4RGlzdGFuY2VzW2luZGV4WF0sXG4gICAgICAgICAgICBhYnNZRGlzdGFuY2U6IHlEaXN0YW5jZXNBYnNbaW5kZXhZXSxcbiAgICAgICAgICAgIHlEaXN0YW5jZTogeURpc3RhbmNlc1tpbmRleFldLFxuICAgICAgICAgICAgaW5kZXhYLFxuICAgICAgICAgICAgaW5kZXhZXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlczogUmVjdGFuZ2xlQ2xpZW50W10sIGlzSG9yaXpvbnRhbDogYm9vbGVhbikge1xuICAgICAgICBsZXQgZGlzdHJpYnV0ZUxpbmVzOiBhbnlbXSA9IFtdO1xuICAgICAgICBsZXQgZGVsdGEgPSAwO1xuICAgICAgICBsZXQgcmVjdGFuZ2xlczogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgY29uc3QgYXhpcyA9IGlzSG9yaXpvbnRhbCA/ICd4JyA6ICd5JztcbiAgICAgICAgY29uc3Qgc2lkZSA9IGlzSG9yaXpvbnRhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgPSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtheGlzXSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdIC8gMjtcbiAgICAgICAgYWxpZ25SZWN0YW5nbGVzLmZvckVhY2gocmVjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ3Jvc3MgPSBpc0hvcml6b250YWwgPyBpc0hvcml6b250YWxDcm9zcyhyZWMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlKSA6IGlzVmVydGljYWxDcm9zcyhyZWMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGlmIChpc0Nyb3NzICYmICFSZWN0YW5nbGVDbGllbnQuaXNIaXQocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSkpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVzLnB1c2gocmVjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlY3RhbmdsZXMgPSBbLi4ucmVjdGFuZ2xlcywgdGhpcy5hY3RpdmVSZWN0YW5nbGVdLnNvcnQoKGEsIGIpID0+IGFbYXhpc10gLSBiW2F4aXNdKTtcblxuICAgICAgICBjb25zdCByZWZBcnJheTogRGlzdHJpYnV0ZVJlZltdID0gW107XG4gICAgICAgIGxldCBkaXN0cmlidXRlRGlzdGFuY2UgPSAwO1xuICAgICAgICBsZXQgYmVmb3JlSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhZnRlckluZGV4ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdGFuZ2xlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdGFuZ2xlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IHJlY3RhbmdsZXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSByZWN0YW5nbGVzW2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlmID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkFycmF5W2ldPy5hZnRlcikge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtpXS5hZnRlci5wdXNoKHsgZGlzdGFuY2UsIGluZGV4OiBqIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2ldID0geyAuLi5yZWZBcnJheVtpXSwgYWZ0ZXI6IFt7IGRpc3RhbmNlLCBpbmRleDogaiB9XSB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZWZBcnJheVtqXT8uYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2pdLmJlZm9yZS5wdXNoKHsgZGlzdGFuY2UsIGluZGV4OiBpIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2pdID0geyAuLi5yZWZBcnJheVtqXSwgYmVmb3JlOiBbeyBkaXN0YW5jZSwgaW5kZXg6IGkgfV0gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL21pZGRsZVxuICAgICAgICAgICAgICAgIGxldCBfY2VudGVyID0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSArIGFmdGVyW2F4aXNdKSAvIDI7XG4gICAgICAgICAgICAgICAgZGlmID0gTWF0aC5hYnMoYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGRpZiA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlRGlzdGFuY2UgPSAoYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKSAtIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBhZnRlckluZGV4ID0gajtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2FmdGVyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VSaWdodCA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgX2NlbnRlciA9IGFmdGVyW2F4aXNdICsgYWZ0ZXJbc2lkZV0gKyBkaXN0YW5jZVJpZ2h0ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGVbc2lkZV0gLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuICAgICAgICAgICAgICAgIGlmICghZGlzdHJpYnV0ZURpc3RhbmNlICYmIGRpZiA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlRGlzdGFuY2UgPSBkaXN0YW5jZVJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVJbmRleCA9IGo7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2JlZm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlQmVmb3JlID0gYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKTtcbiAgICAgICAgICAgICAgICBfY2VudGVyID0gYmVmb3JlW2F4aXNdIC0gZGlzdGFuY2VCZWZvcmUgLSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSAvIDI7XG4gICAgICAgICAgICAgICAgZGlmID0gTWF0aC5hYnMoYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RyaWJ1dGVEaXN0YW5jZSAmJiBkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gZGlzdGFuY2VCZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVySW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSByZWN0YW5nbGVzLmluZGV4T2YodGhpcy5hY3RpdmVSZWN0YW5nbGUpO1xuICAgICAgICBsZXQgYmVmb3JlSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgbGV0IGFmdGVySW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJlZm9yZUluZGV4ZXMucHVzaChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICBmaW5kUmVjdGFuZ2xlKGRpc3RyaWJ1dGVEaXN0YW5jZSwgcmVmQXJyYXlbYmVmb3JlSW5kZXhdLCAnYmVmb3JlJywgYmVmb3JlSW5kZXhlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWZ0ZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZnRlckluZGV4ZXMucHVzaChhZnRlckluZGV4KTtcbiAgICAgICAgICAgIGZpbmRSZWN0YW5nbGUoZGlzdHJpYnV0ZURpc3RhbmNlLCByZWZBcnJheVthZnRlckluZGV4XSwgJ2FmdGVyJywgYWZ0ZXJJbmRleGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiZWZvcmVJbmRleGVzLmxlbmd0aCB8fCBhZnRlckluZGV4ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleEFyciA9IFsuLi5iZWZvcmVJbmRleGVzLnJldmVyc2UoKSwgYWN0aXZlSW5kZXgsIC4uLmFmdGVySW5kZXhlc107XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtheGlzXSAtPSBkZWx0YTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaW5kZXhBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBkaXN0cmlidXRlTGluZXMucHVzaChnZXRMaW5lUG9pbnRzKHJlY3RhbmdsZXNbaW5kZXhBcnJbaSAtIDFdXSwgcmVjdGFuZ2xlc1tpbmRleEFycltpXV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRSZWN0YW5nbGUoZGlzdGFuY2U6IG51bWJlciwgcmVmOiBEaXN0cmlidXRlUmVmLCBkaXJlY3Rpb246IHN0cmluZywgcmVjdGFuZ2xlSW5kZXhlczogbnVtYmVyW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHJlZltkaXJlY3Rpb24gYXMga2V5b2YgRGlzdHJpYnV0ZVJlZl07XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlZkFycmF5LmluZGV4T2YocmVmKTtcbiAgICAgICAgICAgIGlmICgoaW5kZXggPT09IDAgJiYgZGlyZWN0aW9uID09PSAnYmVmb3JlJykgfHwgKGluZGV4ID09PSByZWZBcnJheS5sZW5ndGggLSAxICYmIGRpcmVjdGlvbiA9PT0gJ2FmdGVyJykpIHJldHVybjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGFycltpXS5kaXN0YW5jZSAtIGRpc3RhbmNlKSA8IDAuMSkge1xuICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGVJbmRleGVzLnB1c2goYXJyW2ldLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZmluZFJlY3RhbmdsZShkaXN0YW5jZSwgcmVmQXJyYXlbYXJyW2ldLmluZGV4XSwgZGlyZWN0aW9uLCByZWN0YW5nbGVJbmRleGVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldExpbmVQb2ludHMoYmVmb3JlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGFmdGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wcG9zaXRlQXhpcyA9IGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICAgICAgICAgIGNvbnN0IG9wcG9zaXRlU2lkZSA9IHNpZGUgPT09ICd3aWR0aCcgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgICAgICBjb25zdCBhbGlnbiA9IFtcbiAgICAgICAgICAgICAgICBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSxcbiAgICAgICAgICAgICAgICBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSArIGJlZm9yZVJlY3RhbmdsZVtvcHBvc2l0ZVNpZGVdLFxuICAgICAgICAgICAgICAgIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10sXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSArIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlU2lkZV1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBzb3J0QXJyID0gYWxpZ24uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICAgICAgY29uc3QgYXZlcmFnZSA9IChzb3J0QXJyWzFdICsgc29ydEFyclsyXSkgLyAyO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBpc0hvcml6b250YWxcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICBbYmVmb3JlUmVjdGFuZ2xlLnggKyBiZWZvcmVSZWN0YW5nbGUud2lkdGggKyBvZmZzZXQsIGF2ZXJhZ2VdLFxuICAgICAgICAgICAgICAgICAgICAgIFthZnRlclJlY3RhbmdsZS54IC0gb2Zmc2V0LCBhdmVyYWdlXVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgIFthdmVyYWdlLCBiZWZvcmVSZWN0YW5nbGUueSArIGJlZm9yZVJlY3RhbmdsZS5oZWlnaHQgKyBvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgIFthdmVyYWdlLCBhZnRlclJlY3RhbmdsZS55IC0gb2Zmc2V0XVxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkZWx0YSwgZGlzdHJpYnV0ZUxpbmVzIH07XG4gICAgfVxuXG4gICAgZHJhd0FsaWduTGluZXMobGluZXM6IG51bWJlcltdW10sIGc6IFNWR0dFbGVtZW50KSB7XG4gICAgICAgIGxpbmVzLmZvckVhY2gocG9pbnRzID0+IHtcbiAgICAgICAgICAgIGlmICghcG9pbnRzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeEFsaWduID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lRGFzaDogWzQsIDRdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoeEFsaWduKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZHJhd0Rpc3RyaWJ1dGVMaW5lcyhsaW5lczogUG9pbnRbXVtdLCBnOiBTVkdHRWxlbWVudCkge1xuICAgICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xuICAgICAgICAgICAgaWYgKCFsaW5lLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IGlzSG9yaXpvbnRhbCA9IGxpbmVbMF1bMV0gPT09IGxpbmVbMV1bMV07XG4gICAgICAgICAgICBjb25zdCB5QWxpZ24gPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUobGluZVswXVswXSwgbGluZVswXVsxXSwgbGluZVsxXVswXSwgbGluZVsxXVsxXSwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKHlBbGlnbik7XG5cbiAgICAgICAgICAgIGxpbmUuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyUG9pbnQgPSBnZXRCYXJQb2ludChwb2ludCwgaXNIb3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXIgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUoYmFyUG9pbnRbMF1bMF0sIGJhclBvaW50WzBdWzFdLCBiYXJQb2ludFsxXVswXSwgYmFyUG9pbnRbMV1bMV0sIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoYmFyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbENyb3NzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlcjogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgcmV0dXJuICEocmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IDwgb3RoZXIueSB8fCByZWN0YW5nbGUueSA+IG90aGVyLnkgKyBvdGhlci5oZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBpc1ZlcnRpY2FsQ3Jvc3MocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG90aGVyOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICByZXR1cm4gIShyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCA8IG90aGVyLnggfHwgcmVjdGFuZ2xlLnggPiBvdGhlci54ICsgb3RoZXIud2lkdGgpO1xufVxuZnVuY3Rpb24gZ2V0QmFyUG9pbnQocG9pbnQ6IFBvaW50LCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXNIb3Jpem9udGFsXG4gICAgICAgID8gW1xuICAgICAgICAgICAgICBbcG9pbnRbMF0sIHBvaW50WzFdIC0gNF0sXG4gICAgICAgICAgICAgIFtwb2ludFswXSwgcG9pbnRbMV0gKyA0XVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICAgIFtwb2ludFswXSAtIDQsIHBvaW50WzFdXSxcbiAgICAgICAgICAgICAgW3BvaW50WzBdICsgNCwgcG9pbnRbMV1dXG4gICAgICAgICAgXTtcbn1cbiJdfQ==