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

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.
Files changed (42) hide show
  1. package/board/board.component.d.ts +1 -1
  2. package/core/children/children.component.d.ts +3 -3
  3. package/core/element/element.component.d.ts +1 -1
  4. package/esm2022/board/board.component.mjs +7 -5
  5. package/esm2022/constants/resize.mjs +1 -1
  6. package/esm2022/core/children/children.component.mjs +11 -9
  7. package/esm2022/core/element/context.mjs +1 -1
  8. package/esm2022/core/element/element.component.mjs +4 -3
  9. package/esm2022/interfaces/board.mjs +1 -1
  10. package/esm2022/interfaces/plugin-key.mjs +1 -1
  11. package/esm2022/interfaces/point.mjs +1 -1
  12. package/esm2022/interfaces/viewport.mjs +2 -2
  13. package/esm2022/plugins/create-board.mjs +10 -9
  14. package/esm2022/plugins/with-hotkey.mjs +4 -2
  15. package/esm2022/plugins/with-moving.mjs +3 -3
  16. package/esm2022/plugins/with-options.mjs +1 -1
  17. package/esm2022/public-api.mjs +1 -2
  18. package/esm2022/testing/core/fake-weak-map.mjs +2 -2
  19. package/esm2022/testing/core/index.mjs +1 -1
  20. package/esm2022/testing/fake-events/event-objects.mjs +1 -1
  21. package/esm2022/testing/fake-events/index.mjs +1 -1
  22. package/esm2022/testing/index.mjs +1 -1
  23. package/esm2022/testing/test-element.mjs +1 -1
  24. package/esm2022/transforms/element.mjs +4 -4
  25. package/esm2022/utils/board.mjs +1 -1
  26. package/esm2022/utils/draw/rectangle.mjs +1 -1
  27. package/esm2022/utils/element.mjs +3 -3
  28. package/esm2022/utils/reaction-manager.mjs +3 -3
  29. package/esm2022/utils/to-image.mjs +106 -34
  30. package/esm2022/utils/tree.mjs +2 -2
  31. package/fesm2022/plait-core.mjs +142 -78
  32. package/fesm2022/plait-core.mjs.map +1 -1
  33. package/interfaces/board.d.ts +1 -0
  34. package/package.json +1 -1
  35. package/public-api.d.ts +0 -1
  36. package/testing/core/fake-weak-map.d.ts +2 -2
  37. package/transforms/element.d.ts +2 -2
  38. package/utils/reaction-manager.d.ts +1 -1
  39. package/utils/to-image.d.ts +11 -0
  40. package/utils/tree.d.ts +2 -2
  41. package/esm2022/plait.module.mjs +0 -21
  42. package/plait.module.d.ts +0 -10
@@ -3,7 +3,7 @@ import { createG } from './dom/common';
3
3
  import { RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';
4
4
  import { depthFirstRecursion } from './tree';
5
5
  const ALIGN_TOLERANCE = 2;
6
- export class ReactionManager {
6
+ export class AlignReaction {
7
7
  constructor(board, activeElements, activeRectangle) {
8
8
  this.board = board;
9
9
  this.activeElements = activeElements;
@@ -13,7 +13,7 @@ export class ReactionManager {
13
13
  getAlignRectangle() {
14
14
  const result = [];
15
15
  depthFirstRecursion(this.board, node => {
16
- if (PlaitBoard.isBoard(node) || this.activeElements.some(element => node.id === element.id) || node.type !== 'geometry') {
16
+ if (PlaitBoard.isBoard(node) || this.activeElements.some(element => node.id === element.id) || !this.board.isAlign(node)) {
17
17
  return;
18
18
  }
19
19
  const rectangle = this.board.getRectangle(node);
@@ -367,4 +367,4 @@ function getBarPoint(point, isHorizontal) {
367
367
  [point[0] + 4, point[1]]
368
368
  ];
369
369
  }
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==
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFTLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFhN0MsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLE1BQU0sT0FBTyxhQUFhO0lBR3RCLFlBQW9CLEtBQWlCLEVBQVUsY0FBOEIsRUFBVSxlQUFnQztRQUFuRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ25ILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7UUFDckMsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RILE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxL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QyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsU0FBUyxXQUFXLENBQUMsS0FBWSxFQUFFLFlBQXFCO0lBQ3BELE9BQU8sWUFBWTtRQUNmLENBQUMsQ0FBQztZQUNJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUNILENBQUMsQ0FBQztZQUNJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IGNyZWF0ZUcgfSBmcm9tICcuL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IEFuY2VzdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIFNFTEVDVElPTl9CT1JERVJfQ09MT1IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRlcHRoRmlyc3RSZWN1cnNpb24gfSBmcm9tICcuL3RyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsaWduUmVmIHtcbiAgICBkZWx0YVg6IG51bWJlcjtcbiAgICBkZWx0YVk6IG51bWJlcjtcbiAgICBnOiBTVkdHRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRlUmVmIHtcbiAgICBiZWZvcmU6IHsgZGlzdGFuY2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG4gICAgYWZ0ZXI6IHsgZGlzdGFuY2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG59XG5cbmNvbnN0IEFMSUdOX1RPTEVSQU5DRSA9IDI7XG5cbmV4cG9ydCBjbGFzcyBBbGlnblJlYWN0aW9uIHtcbiAgICBhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBib2FyZDogUGxhaXRCb2FyZCwgcHJpdmF0ZSBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIHByaXZhdGUgYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgdGhpcy5hbGlnblJlY3RhbmdsZXMgPSB0aGlzLmdldEFsaWduUmVjdGFuZ2xlKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxpZ25SZWN0YW5nbGUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgICAgICB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNvbWUoZWxlbWVudCA9PiBub2RlLmlkID09PSBlbGVtZW50LmlkKSB8fCAhdGhpcy5ib2FyZC5pc0FsaWduKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gdGhpcy5ib2FyZC5nZXRSZWN0YW5nbGUobm9kZSk7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlICYmIHJlc3VsdC5wdXNoKHJlY3RhbmdsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBoYW5kbGVBbGlnbigpOiBBbGlnblJlZiB7XG4gICAgICAgIGNvbnN0IGFsaWduUmVjdGFuZ2xlcyA9IHRoaXMuZ2V0QWxpZ25SZWN0YW5nbGUoKTtcbiAgICAgICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgbGV0IGFsaWduTGluZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgICAgICAgbGV0IGRlbHRhWCA9IDA7XG4gICAgICAgIGxldCBkZWx0YVkgPSAwO1xuICAgICAgICBsZXQgaXNDb3JyZWN0WCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNDb3JyZWN0WSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGFsaWduUmVjdGFuZ2xlIG9mIGFsaWduUmVjdGFuZ2xlcykge1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdERpc3RhbmNlcyA9IHRoaXMuY2FsY3VsYXRlQ2xvc2VzdERpc3RhbmNlcyh0aGlzLmFjdGl2ZVJlY3RhbmdsZSwgYWxpZ25SZWN0YW5nbGUpO1xuICAgICAgICAgICAgbGV0IGNhbkRyYXdIb3Jpem9udGFsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzQ29ycmVjdFggJiYgY2xvc2VzdERpc3RhbmNlcy5hYnNYRGlzdGFuY2UgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVggPSBjbG9zZXN0RGlzdGFuY2VzLnhEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54IC09IGRlbHRhWDtcbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RYID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYW5EcmF3SG9yaXpvbnRhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjbG9zZXN0RGlzdGFuY2VzLmFic1hEaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbkRyYXdIb3Jpem9udGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNhbkRyYXdIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxZID0gW1xuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS55LFxuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lVG9wWSA9IE1hdGgubWluKC4uLnZlcnRpY2FsWSkgLSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUJvdHRvbVkgPSBNYXRoLm1heCguLi52ZXJ0aWNhbFkpICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRMaW5lID0gW3RoaXMuYWN0aXZlUmVjdGFuZ2xlLngsIGxpbmVUb3BZLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LCBsaW5lQm90dG9tWV07XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZVRvcFksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVCb3R0b21ZXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodExpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluZVRvcFksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluZUJvdHRvbVlcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd0xlZnRMaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAyICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdMZWZ0TGluZSAmJiAhYWxpZ25MaW5lc1swXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzBdID0gbGVmdExpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd1JpZ2h0TGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAyIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAzIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMCAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3UmlnaHRMaW5lICYmICFhbGlnbkxpbmVzWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMl0gPSByaWdodExpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd01pZGRsZUxpbmUgPSBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gNCB8fCAoIXNob3VsZERyYXdMZWZ0TGluZSAmJiAhc2hvdWxkRHJhd1JpZ2h0TGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdNaWRkbGVMaW5lICYmICFhbGlnbkxpbmVzWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMV0gPSBtaWRkbGVMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlzQ29ycmVjdFggPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY2FuRHJhd1ZlcnRpY2FsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzQ29ycmVjdFkgJiYgY2xvc2VzdERpc3RhbmNlcy5hYnNZRGlzdGFuY2UgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVkgPSBjbG9zZXN0RGlzdGFuY2VzLnlEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55IC09IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RZID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYW5EcmF3VmVydGljYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNsb3Nlc3REaXN0YW5jZXMuYWJzWURpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FuRHJhd1ZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5EcmF3VmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsWCA9IFtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGhcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVMZWZ0WCA9IE1hdGgubWluKC4uLmhvcml6b250YWxYKSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lUmlnaHRYID0gTWF0aC5tYXgoLi4uaG9yaXpvbnRhbFgpICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcExpbmUgPSBbbGluZUxlZnRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55LCBsaW5lUmlnaHRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55XTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsTWlkZGxlTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZUxlZnRYLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAvIDJcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIGxpbmVMZWZ0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3VG9wTGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAxIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMiAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgPT09IGFsaWduUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdUb3BMaW5lICYmICFhbGlnbkxpbmVzWzNdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbM10gPSB0b3BMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdCb3R0b21MaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDIgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDMgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdCb3R0b21MaW5lICYmICFhbGlnbkxpbmVzWzVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNV0gPSBib3R0b21MaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdNaWRkbGVMaW5lID0gY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDQgfHwgKCFzaG91bGREcmF3VG9wTGluZSAmJiAhc2hvdWxkRHJhd0JvdHRvbUxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TWlkZGxlTGluZSAmJiAhYWxpZ25MaW5lc1s0XSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzRdID0gaG9yaXpvbnRhbE1pZGRsZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxpZ25EZWx0YVggPSBkZWx0YVg7XG4gICAgICAgIGNvbnN0IGFsaWduRGVsdGFZID0gZGVsdGFZO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKz0gZGVsdGFYO1xuICAgICAgICBjb25zdCBkaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdCA9IHRoaXMuYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlcywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdCA9IHRoaXMuYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlcywgZmFsc2UpO1xuICAgICAgICBjb25zdCBkaXN0cmlidXRlTGluZXM6IFBvaW50W11bXSA9IFsuLi5kaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdC5kaXN0cmlidXRlTGluZXMsIC4uLmRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kaXN0cmlidXRlTGluZXNdO1xuICAgICAgICBpZiAoZGlzdHJpYnV0ZUhvcml6b250YWxSZXN1bHQuZGVsdGEpIHtcbiAgICAgICAgICAgIGRlbHRhWCA9IGRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0LmRlbHRhO1xuICAgICAgICAgICAgaWYgKGFsaWduRGVsdGFYICE9PSBkZWx0YVgpIHtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzBdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1sxXSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMl0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0cmlidXRlVmVydGljYWxSZXN1bHQuZGVsdGEpIHtcbiAgICAgICAgICAgIGRlbHRhWSA9IGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kZWx0YTtcbiAgICAgICAgICAgIGlmIChhbGlnbkRlbHRhWSAhPT0gZGVsdGFZKSB7XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1szXSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNF0gPSBbXTtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxpZ25MaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FsaWduTGluZXMoYWxpZ25MaW5lcywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzdHJpYnV0ZUxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3RGlzdHJpYnV0ZUxpbmVzKGRpc3RyaWJ1dGVMaW5lcywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBkZWx0YVgsIGRlbHRhWSwgZyB9O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNsb3Nlc3REaXN0YW5jZXMoYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGFsaWduUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlQ2VudGVyID0gW2FjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMiwgYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMl07XG4gICAgICAgIGNvbnN0IGFsaWduUmVjdGFuZ2xlQ2VudGVyID0gW2FsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCAvIDIsIGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcblxuICAgICAgICBjb25zdCBjZW50ZXJYRGlzdGFuY2UgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXJbMF0gLSBhbGlnblJlY3RhbmdsZUNlbnRlclswXTtcbiAgICAgICAgY29uc3QgY2VudGVyWURpc3RhbmNlID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyWzFdIC0gYWxpZ25SZWN0YW5nbGVDZW50ZXJbMV07XG5cbiAgICAgICAgY29uc3QgbGVmdFRvTGVmdCA9IGFjdGl2ZVJlY3RhbmdsZS54IC0gYWxpZ25SZWN0YW5nbGUueDtcbiAgICAgICAgY29uc3QgbGVmdFRvUmlnaHQgPSBhY3RpdmVSZWN0YW5nbGUueCAtIChhbGlnblJlY3RhbmdsZS54ICsgYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvUmlnaHQgPSBhY3RpdmVSZWN0YW5nbGUueCArIGFjdGl2ZVJlY3RhbmdsZS53aWR0aCAtIChhbGlnblJlY3RhbmdsZS54ICsgYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvTGVmdCA9IGFjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC0gYWxpZ25SZWN0YW5nbGUueDtcblxuICAgICAgICBjb25zdCB0b3BUb1RvcCA9IGFjdGl2ZVJlY3RhbmdsZS55IC0gYWxpZ25SZWN0YW5nbGUueTtcbiAgICAgICAgY29uc3QgdG9wVG9Cb3R0b20gPSBhY3RpdmVSZWN0YW5nbGUueSAtIChhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgYm90dG9tVG9Ub3AgPSBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLSBhbGlnblJlY3RhbmdsZS55O1xuICAgICAgICBjb25zdCBib3R0b21Ub0JvdHRvbSA9IGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAtIChhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0KTtcblxuICAgICAgICBjb25zdCB4RGlzdGFuY2VzID0gW2xlZnRUb0xlZnQsIGxlZnRUb1JpZ2h0LCByaWdodFRvUmlnaHQsIHJpZ2h0VG9MZWZ0LCBjZW50ZXJYRGlzdGFuY2VdO1xuICAgICAgICBjb25zdCB5RGlzdGFuY2VzID0gW3RvcFRvVG9wLCB0b3BUb0JvdHRvbSwgYm90dG9tVG9Cb3R0b20sIGJvdHRvbVRvVG9wLCBjZW50ZXJZRGlzdGFuY2VdO1xuXG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZXNBYnMgPSB4RGlzdGFuY2VzLm1hcChkaXN0YW5jZSA9PiBNYXRoLmFicyhkaXN0YW5jZSkpO1xuICAgICAgICBjb25zdCB5RGlzdGFuY2VzQWJzID0geURpc3RhbmNlcy5tYXAoZGlzdGFuY2UgPT4gTWF0aC5hYnMoZGlzdGFuY2UpKTtcblxuICAgICAgICBjb25zdCBpbmRleFggPSB4RGlzdGFuY2VzQWJzLmluZGV4T2YoTWF0aC5taW4oLi4ueERpc3RhbmNlc0FicykpO1xuICAgICAgICBjb25zdCBpbmRleFkgPSB5RGlzdGFuY2VzQWJzLmluZGV4T2YoTWF0aC5taW4oLi4ueURpc3RhbmNlc0FicykpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhYnNYRGlzdGFuY2U6IHhEaXN0YW5jZXNBYnNbaW5kZXhYXSxcbiAgICAgICAgICAgIHhEaXN0YW5jZTogeERpc3RhbmNlc1tpbmRleFhdLFxuICAgICAgICAgICAgYWJzWURpc3RhbmNlOiB5RGlzdGFuY2VzQWJzW2luZGV4WV0sXG4gICAgICAgICAgICB5RGlzdGFuY2U6IHlEaXN0YW5jZXNbaW5kZXhZXSxcbiAgICAgICAgICAgIGluZGV4WCxcbiAgICAgICAgICAgIGluZGV4WVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFsaWduRGlzdHJpYnV0ZShhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdLCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGRpc3RyaWJ1dGVMaW5lczogYW55W10gPSBbXTtcbiAgICAgICAgbGV0IGRlbHRhID0gMDtcbiAgICAgICAgbGV0IHJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdID0gW107XG4gICAgICAgIGNvbnN0IGF4aXMgPSBpc0hvcml6b250YWwgPyAneCcgOiAneSc7XG4gICAgICAgIGNvbnN0IHNpZGUgPSBpc0hvcml6b250YWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlQ2VudGVyID0gdGhpcy5hY3RpdmVSZWN0YW5nbGVbYXhpc10gKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSAvIDI7XG4gICAgICAgIGFsaWduUmVjdGFuZ2xlcy5mb3JFYWNoKHJlYyA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzID0gaXNIb3Jpem9udGFsID8gaXNIb3Jpem9udGFsQ3Jvc3MocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSkgOiBpc1ZlcnRpY2FsQ3Jvc3MocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSk7XG4gICAgICAgICAgICBpZiAoaXNDcm9zcyAmJiAhUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlYywgdGhpcy5hY3RpdmVSZWN0YW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlcy5wdXNoKHJlYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZWN0YW5nbGVzID0gWy4uLnJlY3RhbmdsZXMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlXS5zb3J0KChhLCBiKSA9PiBhW2F4aXNdIC0gYltheGlzXSk7XG5cbiAgICAgICAgY29uc3QgcmVmQXJyYXk6IERpc3RyaWJ1dGVSZWZbXSA9IFtdO1xuICAgICAgICBsZXQgZGlzdHJpYnV0ZURpc3RhbmNlID0gMDtcbiAgICAgICAgbGV0IGJlZm9yZUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYWZ0ZXJJbmRleCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RhbmdsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RhbmdsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmUgPSByZWN0YW5nbGVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gcmVjdGFuZ2xlc1tqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpZiA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIGlmIChyZWZBcnJheVtpXT8uYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmQXJyYXlbaV0uYWZ0ZXIucHVzaCh7IGRpc3RhbmNlLCBpbmRleDogaiB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtpXSA9IHsgLi4ucmVmQXJyYXlbaV0sIGFmdGVyOiBbeyBkaXN0YW5jZSwgaW5kZXg6IGogfV0gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVmQXJyYXlbal0/LmJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtqXS5iZWZvcmUucHVzaCh7IGRpc3RhbmNlLCBpbmRleDogaSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtqXSA9IHsgLi4ucmVmQXJyYXlbal0sIGJlZm9yZTogW3sgZGlzdGFuY2UsIGluZGV4OiBpIH1dIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9taWRkbGVcbiAgICAgICAgICAgICAgICBsZXQgX2NlbnRlciA9IChiZWZvcmVbYXhpc10gKyBiZWZvcmVbc2lkZV0gKyBhZnRlcltheGlzXSkgLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gKGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSkgLSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbmRleCA9IGo7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9hZnRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlUmlnaHQgPSBhZnRlcltheGlzXSAtIChiZWZvcmVbYXhpc10gKyBiZWZvcmVbc2lkZV0pO1xuICAgICAgICAgICAgICAgIF9jZW50ZXIgPSBhZnRlcltheGlzXSArIGFmdGVyW3NpZGVdICsgZGlzdGFuY2VSaWdodCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdIC8gMjtcbiAgICAgICAgICAgICAgICBkaWYgPSBNYXRoLmFicyhhY3RpdmVSZWN0YW5nbGVDZW50ZXIgLSBfY2VudGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RyaWJ1dGVEaXN0YW5jZSAmJiBkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gZGlzdGFuY2VSaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlSW5kZXggPSBqO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9iZWZvcmVcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZUJlZm9yZSA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgX2NlbnRlciA9IGJlZm9yZVtheGlzXSAtIGRpc3RhbmNlQmVmb3JlIC0gdGhpcy5hY3RpdmVSZWN0YW5nbGVbc2lkZV0gLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkaXN0cmlidXRlRGlzdGFuY2UgJiYgZGlmIDwgQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVEaXN0YW5jZSA9IGRpc3RhbmNlQmVmb3JlO1xuICAgICAgICAgICAgICAgICAgICBhZnRlckluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgLSBfY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gcmVjdGFuZ2xlcy5pbmRleE9mKHRoaXMuYWN0aXZlUmVjdGFuZ2xlKTtcbiAgICAgICAgbGV0IGJlZm9yZUluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGxldCBhZnRlckluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGlmIChiZWZvcmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBiZWZvcmVJbmRleGVzLnB1c2goYmVmb3JlSW5kZXgpO1xuICAgICAgICAgICAgZmluZFJlY3RhbmdsZShkaXN0cmlidXRlRGlzdGFuY2UsIHJlZkFycmF5W2JlZm9yZUluZGV4XSwgJ2JlZm9yZScsIGJlZm9yZUluZGV4ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFmdGVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWZ0ZXJJbmRleGVzLnB1c2goYWZ0ZXJJbmRleCk7XG4gICAgICAgICAgICBmaW5kUmVjdGFuZ2xlKGRpc3RyaWJ1dGVEaXN0YW5jZSwgcmVmQXJyYXlbYWZ0ZXJJbmRleF0sICdhZnRlcicsIGFmdGVySW5kZXhlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXhlcy5sZW5ndGggfHwgYWZ0ZXJJbmRleGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhBcnIgPSBbLi4uYmVmb3JlSW5kZXhlcy5yZXZlcnNlKCksIGFjdGl2ZUluZGV4LCAuLi5hZnRlckluZGV4ZXNdO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGVbYXhpc10gLT0gZGVsdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGluZGV4QXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZGlzdHJpYnV0ZUxpbmVzLnB1c2goZ2V0TGluZVBvaW50cyhyZWN0YW5nbGVzW2luZGV4QXJyW2kgLSAxXV0sIHJlY3RhbmdsZXNbaW5kZXhBcnJbaV1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kUmVjdGFuZ2xlKGRpc3RhbmNlOiBudW1iZXIsIHJlZjogRGlzdHJpYnV0ZVJlZiwgZGlyZWN0aW9uOiBzdHJpbmcsIHJlY3RhbmdsZUluZGV4ZXM6IG51bWJlcltdKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSByZWZbZGlyZWN0aW9uIGFzIGtleW9mIERpc3RyaWJ1dGVSZWZdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZWZBcnJheS5pbmRleE9mKHJlZik7XG4gICAgICAgICAgICBpZiAoKGluZGV4ID09PSAwICYmIGRpcmVjdGlvbiA9PT0gJ2JlZm9yZScpIHx8IChpbmRleCA9PT0gcmVmQXJyYXkubGVuZ3RoIC0gMSAmJiBkaXJlY3Rpb24gPT09ICdhZnRlcicpKSByZXR1cm47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhhcnJbaV0uZGlzdGFuY2UgLSBkaXN0YW5jZSkgPCAwLjEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlSW5kZXhlcy5wdXNoKGFycltpXS5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRSZWN0YW5nbGUoZGlzdGFuY2UsIHJlZkFycmF5W2FycltpXS5pbmRleF0sIGRpcmVjdGlvbiwgcmVjdGFuZ2xlSW5kZXhlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRMaW5lUG9pbnRzKGJlZm9yZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBhZnRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvcHBvc2l0ZUF4aXMgPSBheGlzID09PSAneCcgPyAneScgOiAneCc7XG4gICAgICAgICAgICBjb25zdCBvcHBvc2l0ZVNpZGUgPSBzaWRlID09PSAnd2lkdGgnID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICAgICAgY29uc3QgYWxpZ24gPSBbXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10sXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10gKyBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVTaWRlXSxcbiAgICAgICAgICAgICAgICBhZnRlclJlY3RhbmdsZVtvcHBvc2l0ZUF4aXNdLFxuICAgICAgICAgICAgICAgIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10gKyBhZnRlclJlY3RhbmdsZVtvcHBvc2l0ZVNpZGVdXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3Qgc29ydEFyciA9IGFsaWduLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2UgPSAoc29ydEFyclsxXSArIHNvcnRBcnJbMl0pIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgW2JlZm9yZVJlY3RhbmdsZS54ICsgYmVmb3JlUmVjdGFuZ2xlLndpZHRoICsgb2Zmc2V0LCBhdmVyYWdlXSxcbiAgICAgICAgICAgICAgICAgICAgICBbYWZ0ZXJSZWN0YW5nbGUueCAtIG9mZnNldCwgYXZlcmFnZV1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICBbYXZlcmFnZSwgYmVmb3JlUmVjdGFuZ2xlLnkgKyBiZWZvcmVSZWN0YW5nbGUuaGVpZ2h0ICsgb2Zmc2V0XSxcbiAgICAgICAgICAgICAgICAgICAgICBbYXZlcmFnZSwgYWZ0ZXJSZWN0YW5nbGUueSAtIG9mZnNldF1cbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZGVsdGEsIGRpc3RyaWJ1dGVMaW5lcyB9O1xuICAgIH1cblxuICAgIGRyYXdBbGlnbkxpbmVzKGxpbmVzOiBudW1iZXJbXVtdLCBnOiBTVkdHRWxlbWVudCkge1xuICAgICAgICBsaW5lcy5mb3JFYWNoKHBvaW50cyA9PiB7XG4gICAgICAgICAgICBpZiAoIXBvaW50cy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHhBbGlnbiA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkubGluZShwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZURhc2g6IFs0LCA0XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKHhBbGlnbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRyYXdEaXN0cmlidXRlTGluZXMobGluZXM6IFBvaW50W11bXSwgZzogU1ZHR0VsZW1lbnQpIHtcbiAgICAgICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgICAgIGlmICghbGluZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBpc0hvcml6b250YWwgPSBsaW5lWzBdWzFdID09PSBsaW5lWzFdWzFdO1xuICAgICAgICAgICAgY29uc3QgeUFsaWduID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKGxpbmVbMF1bMF0sIGxpbmVbMF1bMV0sIGxpbmVbMV1bMF0sIGxpbmVbMV1bMV0sIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZy5hcHBlbmRDaGlsZCh5QWxpZ24pO1xuXG4gICAgICAgICAgICBsaW5lLmZvckVhY2gocG9pbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhclBvaW50ID0gZ2V0QmFyUG9pbnQocG9pbnQsIGlzSG9yaXpvbnRhbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKGJhclBvaW50WzBdWzBdLCBiYXJQb2ludFswXVsxXSwgYmFyUG9pbnRbMV1bMF0sIGJhclBvaW50WzFdWzFdLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBnLmFwcGVuZENoaWxkKGJhcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0hvcml6b250YWxDcm9zcyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3RoZXI6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgIHJldHVybiAhKHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCA8IG90aGVyLnkgfHwgcmVjdGFuZ2xlLnkgPiBvdGhlci55ICsgb3RoZXIuaGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gaXNWZXJ0aWNhbENyb3NzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlcjogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgcmV0dXJuICEocmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggPCBvdGhlci54IHx8IHJlY3RhbmdsZS54ID4gb3RoZXIueCArIG90aGVyLndpZHRoKTtcbn1cbmZ1bmN0aW9uIGdldEJhclBvaW50KHBvaW50OiBQb2ludCwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFxuICAgICAgICA/IFtcbiAgICAgICAgICAgICAgW3BvaW50WzBdLCBwb2ludFsxXSAtIDRdLFxuICAgICAgICAgICAgICBbcG9pbnRbMF0sIHBvaW50WzFdICsgNF1cbiAgICAgICAgICBdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgICBbcG9pbnRbMF0gLSA0LCBwb2ludFsxXV0sXG4gICAgICAgICAgICAgIFtwb2ludFswXSArIDQsIHBvaW50WzFdXVxuICAgICAgICAgIF07XG59XG4iXX0=
@@ -1,5 +1,67 @@
1
1
  import { PlaitBoard } from '../interfaces';
2
2
  import { getRectangleByElements } from './element';
3
+ const IMAGE_CONTAINER = 'plait-image-container';
4
+ /**
5
+ * Is element node
6
+ * @param node
7
+ * @returns
8
+ */
9
+ function isElementNode(node) {
10
+ return node.nodeType === Node.ELEMENT_NODE;
11
+ }
12
+ /**
13
+ * load image resources
14
+ * @param url image url
15
+ * @returns image element
16
+ */
17
+ function loadImage(src) {
18
+ return new Promise((resolve, reject) => {
19
+ const img = new Image();
20
+ img.crossOrigin = 'anonymous';
21
+ img.onload = () => resolve(img);
22
+ img.onerror = () => reject(new Error('Failed to load image'));
23
+ img.src = src;
24
+ });
25
+ }
26
+ /**
27
+ * create and return canvas and context
28
+ * @param width canvas width
29
+ * @param height canvas height
30
+ * @param fillStyle fill style
31
+ * @returns canvas and context
32
+ */
33
+ function createCanvas(width, height, fillStyle = 'transparent') {
34
+ const canvas = document.createElement('canvas');
35
+ const ctx = canvas.getContext('2d');
36
+ canvas.width = width;
37
+ canvas.height = height;
38
+ canvas.style.width = `${width}px`;
39
+ canvas.style.height = `${height}px`;
40
+ ctx.strokeStyle = '#ffffff';
41
+ ctx.fillStyle = fillStyle;
42
+ ctx.fillRect(0, 0, width, height);
43
+ return {
44
+ canvas,
45
+ ctx
46
+ };
47
+ }
48
+ /**
49
+ * convert image to base64
50
+ * @param url image url
51
+ * @returns image base64
52
+ */
53
+ function convertImageToBase64(url) {
54
+ return loadImage(url).then(img => {
55
+ const { canvas, ctx } = createCanvas(img.width, img.height);
56
+ ctx?.drawImage(img, 0, 0);
57
+ return canvas.toDataURL('image/png');
58
+ });
59
+ }
60
+ /**
61
+ * clone node style
62
+ * @param nativeNode source node
63
+ * @param clonedNode clone node
64
+ */
3
65
  function cloneCSSStyle(nativeNode, clonedNode) {
4
66
  const targetStyle = clonedNode.style;
5
67
  if (!targetStyle) {
@@ -17,25 +79,13 @@ function cloneCSSStyle(nativeNode, clonedNode) {
17
79
  });
18
80
  }
19
81
  }
20
- function createCanvas(width, height, fillStyle) {
21
- const canvas = document.createElement('canvas');
22
- const ctx = canvas.getContext('2d');
23
- canvas.width = width;
24
- canvas.height = height;
25
- canvas.style.width = `${width}px`;
26
- canvas.style.height = `${height}px`;
27
- ctx.strokeStyle = '#ffffff';
28
- ctx.fillStyle = fillStyle;
29
- ctx.fillRect(0, 0, width, height);
30
- return {
31
- canvas,
32
- ctx
33
- };
34
- }
35
- function isElementNode(node) {
36
- return node.nodeType === Node.ELEMENT_NODE;
37
- }
38
- function cloneSvg(board, options) {
82
+ /**
83
+ * clone svg element
84
+ * @param board board
85
+ * @param options parameter configuration
86
+ * @returns clone svg element
87
+ */
88
+ async function cloneSvg(board, options) {
39
89
  const elementHostBox = getRectangleByElements(board, board.children, true);
40
90
  const { width, height, x, y } = elementHostBox;
41
91
  const { padding = 4, inlineStyleClassNames } = options;
@@ -48,8 +98,9 @@ function cloneSvg(board, options) {
48
98
  cloneSvgElement.setAttribute('height', `${height}`);
49
99
  cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));
50
100
  if (inlineStyleClassNames) {
51
- const sourceNodes = Array.from(sourceSvg.querySelectorAll(inlineStyleClassNames));
52
- const cloneNodes = Array.from(cloneSvgElement.querySelectorAll(inlineStyleClassNames));
101
+ const classNames = inlineStyleClassNames + `,.${IMAGE_CONTAINER}`;
102
+ const sourceNodes = Array.from(sourceSvg.querySelectorAll(classNames));
103
+ const cloneNodes = Array.from(cloneSvgElement.querySelectorAll(classNames));
53
104
  sourceNodes.forEach((node, index) => {
54
105
  const cloneNode = cloneNodes[index];
55
106
  const childElements = Array.from(node.querySelectorAll('*')).filter(isElementNode);
@@ -57,21 +108,38 @@ function cloneSvg(board, options) {
57
108
  sourceNodes.push(...childElements);
58
109
  cloneNodes.push(...cloneChildElements);
59
110
  });
60
- sourceNodes.forEach((node, index) => {
111
+ // processing styles
112
+ sourceNodes.map((node, index) => {
61
113
  const cloneNode = cloneNodes[index];
62
114
  cloneCSSStyle(node, cloneNode);
63
115
  });
64
116
  }
117
+ // 使用 Promise.all 等待所有异步操作完成
118
+ const sourceImageNodes = Array.from(sourceSvg.querySelectorAll(`.${IMAGE_CONTAINER}`));
119
+ const cloneImageNodes = Array.from(cloneSvgElement.querySelectorAll(`.${IMAGE_CONTAINER}`));
120
+ await Promise.all(sourceImageNodes.map((_, index) => {
121
+ return new Promise(resolve => {
122
+ const cloneNode = cloneImageNodes[index];
123
+ // processing image
124
+ const image = cloneNode.querySelector('img');
125
+ const url = image?.getAttribute('src');
126
+ if (!url) {
127
+ return resolve(true);
128
+ }
129
+ convertImageToBase64(url).then(base64Image => {
130
+ image?.setAttribute('src', base64Image);
131
+ resolve(true);
132
+ });
133
+ });
134
+ }));
65
135
  return cloneSvgElement;
66
136
  }
67
- function loadImage(src) {
68
- return new Promise((resolve, reject) => {
69
- const img = new Image();
70
- img.onload = () => resolve(img);
71
- img.onerror = () => reject(new Error('Failed to load image'));
72
- img.src = src;
73
- });
74
- }
137
+ /**
138
+ * current board transfer pictures
139
+ * @param board board
140
+ * @param options parameter configuration
141
+ * @returns images in the specified format base64
142
+ */
75
143
  export async function toImage(board, options) {
76
144
  if (!board) {
77
145
  return undefined;
@@ -81,21 +149,25 @@ export async function toImage(board, options) {
81
149
  const { width, height } = elementHostBox;
82
150
  const ratioWidth = width * ratio;
83
151
  const ratioHeight = height * ratio;
84
- const cloneSvgElement = cloneSvg(board, options);
152
+ const cloneSvgElement = await cloneSvg(board, options);
85
153
  const { canvas, ctx } = createCanvas(ratioWidth, ratioHeight, fillStyle);
86
154
  const svgStr = new XMLSerializer().serializeToString(cloneSvgElement);
87
155
  const imgSrc = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgStr)}`;
88
156
  try {
89
157
  const img = await loadImage(imgSrc);
90
158
  ctx.drawImage(img, 0, 0, ratioWidth, ratioHeight);
91
- const url = canvas.toDataURL('image/png');
92
- return url;
159
+ return canvas.toDataURL('image/png');
93
160
  }
94
161
  catch (error) {
95
162
  console.error('Error converting SVG to image:', error);
96
163
  return undefined;
97
164
  }
98
165
  }
166
+ /**
167
+ * download the file with the specified name
168
+ * @param url download url
169
+ * @param name file name
170
+ */
99
171
  export function downloadImage(url, name) {
100
172
  const a = document.createElement('a');
101
173
  a.href = url;
@@ -103,4 +175,4 @@ export function downloadImage(url, name) {
103
175
  a.click();
104
176
  a.remove();
105
177
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8taW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy90by1pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVduRCxTQUFTLGFBQWEsQ0FBd0IsVUFBYSxFQUFFLFVBQWE7SUFDdEUsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2QsT0FBTztLQUNWO0lBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtRQUNyQixXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDMUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDO0tBQzdEO1NBQU07UUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0tBQ047QUFDTCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxTQUFpQjtJQUNsRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sR0FBRyxHQUFHLE1B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QUFHLENBQUM7SUFDYixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9JbWFnZU9wdGlvbnMge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcmF0aW8/OiBudW1iZXI7XG4gICAgcGFkZGluZz86IG51bWJlcjtcbiAgICBmaWxsU3R5bGU/OiBzdHJpbmc7XG4gICAgLy8g6YCX5Y+357G75ZCN5YiX6KGo44CCIOivpeWIl+ihqOW/hemhu+mHh+eUqCBjbGFzczEsY2xhc3MyLC4uLiDnmoTlvaLlvI/jgIJcbiAgICBpbmxpbmVTdHlsZUNsYXNzTmFtZXM/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNsb25lQ1NTU3R5bGU8VCBleHRlbmRzIEhUTUxFbGVtZW50PihuYXRpdmVOb2RlOiBULCBjbG9uZWROb2RlOiBUKSB7XG4gICAgY29uc3QgdGFyZ2V0U3R5bGUgPSBjbG9uZWROb2RlLnN0eWxlO1xuICAgIGlmICghdGFyZ2V0U3R5bGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZVN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobmF0aXZlTm9kZSk7XG4gICAgaWYgKHNvdXJjZVN0eWxlLmNzc1RleHQpIHtcbiAgICAgICAgdGFyZ2V0U3R5bGUuY3NzVGV4dCA9IHNvdXJjZVN0eWxlLmNzc1RleHQ7XG4gICAgICAgIHRhcmdldFN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IHNvdXJjZVN0eWxlLnRyYW5zZm9ybU9yaWdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBBcnJheS5mcm9tKHNvdXJjZVN0eWxlKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gc291cmNlU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgICAgICAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGZpbGxTdHlsZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykhO1xuXG4gICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgY3R4LnN0cm9rZVN0eWxlID0gJyNmZmZmZmYnO1xuICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7XG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FudmFzLFxuICAgICAgICBjdHhcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnROb2RlKG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGNsb25lU3ZnKGJvYXJkOiBQbGFpdEJvYXJkLCBvcHRpb25zOiBUb0ltYWdlT3B0aW9ucykge1xuICAgIGNvbnN0IGVsZW1lbnRIb3N0Qm94ID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9ID0gZWxlbWVudEhvc3RCb3g7XG4gICAgY29uc3QgeyBwYWRkaW5nID0gNCwgaW5saW5lU3R5bGVDbGFzc05hbWVzIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHNvdXJjZVN2ZyA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgY29uc3QgY2xvbmVTdmdFbGVtZW50ID0gc291cmNlU3ZnLmNsb25lTm9kZSh0cnVlKSBhcyBTVkdFbGVtZW50O1xuXG4gICAgY2xvbmVTdmdFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJztcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCd3aWR0aCcsIGAke3dpZHRofWApO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAke2hlaWdodH1gKTtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgW3ggLSBwYWRkaW5nLCB5IC0gcGFkZGluZywgd2lkdGggKyAyICogcGFkZGluZywgaGVpZ2h0ICsgMiAqIHBhZGRpbmddLmpvaW4oJywnKSk7XG5cbiAgICBpZiAoaW5saW5lU3R5bGVDbGFzc05hbWVzKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGVzID0gQXJyYXkuZnJvbShzb3VyY2VTdmcucXVlcnlTZWxlY3RvckFsbChpbmxpbmVTdHlsZUNsYXNzTmFtZXMpKTtcbiAgICAgICAgY29uc3QgY2xvbmVOb2RlcyA9IEFycmF5LmZyb20oY2xvbmVTdmdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaW5saW5lU3R5bGVDbGFzc05hbWVzKSk7XG5cbiAgICAgICAgc291cmNlTm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lTm9kZSA9IGNsb25lTm9kZXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IEFycmF5LmZyb20obm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpLmZpbHRlcihpc0VsZW1lbnROb2RlKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVDaGlsZEVsZW1lbnRzID0gQXJyYXkuZnJvbShjbG9uZU5vZGUucXVlcnlTZWxlY3RvckFsbCgnKicpKS5maWx0ZXIoaXNFbGVtZW50Tm9kZSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgICAgIHNvdXJjZU5vZGVzLnB1c2goLi4uY2hpbGRFbGVtZW50cyk7XG4gICAgICAgICAgICBjbG9uZU5vZGVzLnB1c2goLi4uY2xvbmVDaGlsZEVsZW1lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNvdXJjZU5vZGVzLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZU5vZGUgPSBjbG9uZU5vZGVzW2luZGV4XTtcbiAgICAgICAgICAgIGNsb25lQ1NTU3R5bGUobm9kZSBhcyBIVE1MRWxlbWVudCwgY2xvbmVOb2RlIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lU3ZnRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gbG9hZEltYWdlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltZyk7XG4gICAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgaW1hZ2UnKSk7XG4gICAgICAgIGltZy5zcmMgPSBzcmM7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0ltYWdlKGJvYXJkOiBQbGFpdEJvYXJkLCBvcHRpb25zOiBUb0ltYWdlT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFib2FyZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRIb3N0Qm94ID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIGNvbnN0IHsgcmF0aW8gPSAyLCBmaWxsU3R5bGUgPSAndHJhbnNwYXJlbnQnIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudEhvc3RCb3g7XG4gICAgY29uc3QgcmF0aW9XaWR0aCA9IHdpZHRoICogcmF0aW87XG4gICAgY29uc3QgcmF0aW9IZWlnaHQgPSBoZWlnaHQgKiByYXRpbztcbiAgICBjb25zdCBjbG9uZVN2Z0VsZW1lbnQgPSBjbG9uZVN2Zyhib2FyZCwgb3B0aW9ucyk7XG4gICAgY29uc3QgeyBjYW52YXMsIGN0eCB9ID0gY3JlYXRlQ2FudmFzKHJhdGlvV2lkdGgsIHJhdGlvSGVpZ2h0LCBmaWxsU3R5bGUpO1xuXG4gICAgY29uc3Qgc3ZnU3RyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhjbG9uZVN2Z0VsZW1lbnQpO1xuICAgIGNvbnN0IGltZ1NyYyA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudChzdmdTdHIpfWA7XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCBsb2FkSW1hZ2UoaW1nU3JjKTtcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHJhdGlvV2lkdGgsIHJhdGlvSGVpZ2h0KTtcbiAgICAgICAgY29uc3QgdXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY29udmVydGluZyBTVkcgdG8gaW1hZ2U6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkSW1hZ2UodXJsOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIGEuZG93bmxvYWQgPSBuYW1lO1xuICAgIGEuY2xpY2soKTtcbiAgICBhLnJlbW92ZSgpO1xufVxuIl19
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8taW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy90by1pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuRCxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQztBQVdoRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsSUFBVTtJQUM3QixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsU0FBUyxDQUFDLEdBQVc7SUFDMUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUM5RCxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLFNBQVMsR0FBRyxhQUFhO0lBQzFFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFD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QU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN4QztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxPQUFPLFNBQVMsQ0FBQztLQUNwQjtBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUNuRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuXG5jb25zdCBJTUFHRV9DT05UQUlORVIgPSAncGxhaXQtaW1hZ2UtY29udGFpbmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBUb0ltYWdlT3B0aW9ucyB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICByYXRpbz86IG51bWJlcjtcbiAgICBwYWRkaW5nPzogbnVtYmVyO1xuICAgIGZpbGxTdHlsZT86IHN0cmluZztcbiAgICAvLyDpgJflj7fnsbvlkI3liJfooajjgIIg6K+l5YiX6KGo5b+F6aG76YeH55SoIGNsYXNzMSxjbGFzczIsLi4uIOeahOW9ouW8j+OAglxuICAgIGlubGluZVN0eWxlQ2xhc3NOYW1lcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJcyBlbGVtZW50IG5vZGVcbiAqIEBwYXJhbSBub2RlXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBpc0VsZW1lbnROb2RlKG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbi8qKlxuICogbG9hZCBpbWFnZSByZXNvdXJjZXNcbiAqIEBwYXJhbSB1cmwgaW1hZ2UgdXJsXG4gKiBAcmV0dXJucyBpbWFnZSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGxvYWRJbWFnZShzcmM6IHN0cmluZyk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1nKTtcbiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBpbWFnZScpKTtcbiAgICAgICAgaW1nLnNyYyA9IHNyYztcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBjcmVhdGUgYW5kIHJldHVybiBjYW52YXMgYW5kIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCBjYW52YXMgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQgY2FudmFzIGhlaWdodFxuICogQHBhcmFtIGZpbGxTdHlsZSBmaWxsIHN0eWxlXG4gKiBAcmV0dXJucyBjYW52YXMgYW5kIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FudmFzKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBmaWxsU3R5bGUgPSAndHJhbnNwYXJlbnQnKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykhO1xuXG4gICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgY3R4LnN0cm9rZVN0eWxlID0gJyNmZmZmZmYnO1xuICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7XG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FudmFzLFxuICAgICAgICBjdHhcbiAgICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgaW1hZ2UgdG8gYmFzZTY0XG4gKiBAcGFyYW0gdXJsIGltYWdlIHVybFxuICogQHJldHVybnMgaW1hZ2UgYmFzZTY0XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRJbWFnZVRvQmFzZTY0KHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGxvYWRJbWFnZSh1cmwpLnRoZW4oaW1nID0+IHtcbiAgICAgICAgY29uc3QgeyBjYW52YXMsIGN0eCB9ID0gY3JlYXRlQ2FudmFzKGltZy53aWR0aCwgaW1nLmhlaWdodCk7XG4gICAgICAgIGN0eD8uZHJhd0ltYWdlKGltZywgMCwgMCk7XG4gICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBjbG9uZSBub2RlIHN0eWxlXG4gKiBAcGFyYW0gbmF0aXZlTm9kZSBzb3VyY2Ugbm9kZVxuICogQHBhcmFtIGNsb25lZE5vZGUgY2xvbmUgbm9kZVxuICovXG5mdW5jdGlvbiBjbG9uZUNTU1N0eWxlPFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4obmF0aXZlTm9kZTogVCwgY2xvbmVkTm9kZTogVCkge1xuICAgIGNvbnN0IHRhcmdldFN0eWxlID0gY2xvbmVkTm9kZS5zdHlsZTtcbiAgICBpZiAoIXRhcmdldFN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5hdGl2ZU5vZGUpO1xuICAgIGlmIChzb3VyY2VTdHlsZS5jc3NUZXh0KSB7XG4gICAgICAgIHRhcmdldFN0eWxlLmNzc1RleHQgPSBzb3VyY2VTdHlsZS5jc3NUZXh0O1xuICAgICAgICB0YXJnZXRTdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBzb3VyY2VTdHlsZS50cmFuc2Zvcm1PcmlnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgQXJyYXkuZnJvbShzb3VyY2VTdHlsZSkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gICAgICAgICAgICB0YXJnZXRTdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgc291cmNlU3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBjbG9uZSBzdmcgZWxlbWVudFxuICogQHBhcmFtIGJvYXJkIGJvYXJkXG4gKiBAcGFyYW0gb3B0aW9ucyBwYXJhbWV0ZXIgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgY2xvbmUgc3ZnIGVsZW1lbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xvbmVTdmcoYm9hcmQ6IFBsYWl0Qm9hcmQsIG9wdGlvbnM6IFRvSW1hZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgZWxlbWVudEhvc3RCb3ggPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBib2FyZC5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB4LCB5IH0gPSBlbGVtZW50SG9zdEJveDtcbiAgICBjb25zdCB7IHBhZGRpbmcgPSA0LCBpbmxpbmVTdHlsZUNsYXNzTmFtZXMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc291cmNlU3ZnID0gUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKTtcbiAgICBjb25zdCBjbG9uZVN2Z0VsZW1lbnQgPSBzb3VyY2VTdmcuY2xvbmVOb2RlKHRydWUpIGFzIFNWR0VsZW1lbnQ7XG5cbiAgICBjbG9uZVN2Z0VsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgY2xvbmVTdmdFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgY2xvbmVTdmdFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcnO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7d2lkdGh9YCk7XG4gICAgY2xvbmVTdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7aGVpZ2h0fWApO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCBbeCAtIHBhZGRpbmcsIHkgLSBwYWRkaW5nLCB3aWR0aCArIDIgKiBwYWRkaW5nLCBoZWlnaHQgKyAyICogcGFkZGluZ10uam9pbignLCcpKTtcblxuICAgIGlmIChpbmxpbmVTdHlsZUNsYXNzTmFtZXMpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IGlubGluZVN0eWxlQ2xhc3NOYW1lcyArIGAsLiR7SU1BR0VfQ09OVEFJTkVSfWA7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGVzID0gQXJyYXkuZnJvbShzb3VyY2VTdmcucXVlcnlTZWxlY3RvckFsbChjbGFzc05hbWVzKSk7XG4gICAgICAgIGNvbnN0IGNsb25lTm9kZXMgPSBBcnJheS5mcm9tKGNsb25lU3ZnRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGNsYXNzTmFtZXMpKTtcblxuICAgICAgICBzb3VyY2VOb2Rlcy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVOb2RlID0gY2xvbmVOb2Rlc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnRzID0gQXJyYXkuZnJvbShub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSkuZmlsdGVyKGlzRWxlbWVudE5vZGUpIGFzIEhUTUxFbGVtZW50W107XG4gICAgICAgICAgICBjb25zdCBjbG9uZUNoaWxkRWxlbWVudHMgPSBBcnJheS5mcm9tKGNsb25lTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpLmZpbHRlcihpc0VsZW1lbnROb2RlKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgICAgICAgc291cmNlTm9kZXMucHVzaCguLi5jaGlsZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIGNsb25lTm9kZXMucHVzaCguLi5jbG9uZUNoaWxkRWxlbWVudHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBwcm9jZXNzaW5nIHN0eWxlc1xuICAgICAgICBzb3VyY2VOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZU5vZGUgPSBjbG9uZU5vZGVzW2luZGV4XTtcbiAgICAgICAgICAgIGNsb25lQ1NTU3R5bGUobm9kZSBhcyBIVE1MRWxlbWVudCwgY2xvbmVOb2RlIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g5L2/55SoIFByb21pc2UuYWxsIOetieW+heaJgOacieW8guatpeaTjeS9nOWujOaIkFxuICAgIGNvbnN0IHNvdXJjZUltYWdlTm9kZXMgPSBBcnJheS5mcm9tKHNvdXJjZVN2Zy5xdWVyeVNlbGVjdG9yQWxsKGAuJHtJTUFHRV9DT05UQUlORVJ9YCkpO1xuICAgIGNvbnN0IGNsb25lSW1hZ2VOb2RlcyA9IEFycmF5LmZyb20oY2xvbmVTdmdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lNQUdFX0NPTlRBSU5FUn1gKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHNvdXJjZUltYWdlTm9kZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lTm9kZSA9IGNsb25lSW1hZ2VOb2Rlc1tpbmRleF07XG4gICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyBpbWFnZVxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gKGNsb25lTm9kZSBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gaW1hZ2U/LmdldEF0dHJpYnV0ZSgnc3JjJyk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnZlcnRJbWFnZVRvQmFzZTY0KHVybCkudGhlbihiYXNlNjRJbWFnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlPy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGJhc2U2NEltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIGNsb25lU3ZnRWxlbWVudDtcbn1cblxuLyoqXG4gKiBjdXJyZW50IGJvYXJkIHRyYW5zZmVyIHBpY3R1cmVzXG4gKiBAcGFyYW0gYm9hcmQgYm9hcmRcbiAqIEBwYXJhbSBvcHRpb25zIHBhcmFtZXRlciBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBpbWFnZXMgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQgYmFzZTY0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0ltYWdlKGJvYXJkOiBQbGFpdEJvYXJkLCBvcHRpb25zOiBUb0ltYWdlT3B0aW9ucykge1xuICAgIGlmICghYm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50SG9zdEJveCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB7IHJhdGlvID0gMiwgZmlsbFN0eWxlID0gJ3RyYW5zcGFyZW50JyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnRIb3N0Qm94O1xuICAgIGNvbnN0IHJhdGlvV2lkdGggPSB3aWR0aCAqIHJhdGlvO1xuICAgIGNvbnN0IHJhdGlvSGVpZ2h0ID0gaGVpZ2h0ICogcmF0aW87XG5cbiAgICBjb25zdCBjbG9uZVN2Z0VsZW1lbnQgPSBhd2FpdCBjbG9uZVN2Zyhib2FyZCwgb3B0aW9ucyk7XG4gICAgY29uc3QgeyBjYW52YXMsIGN0eCB9ID0gY3JlYXRlQ2FudmFzKHJhdGlvV2lkdGgsIHJhdGlvSGVpZ2h0LCBmaWxsU3R5bGUpO1xuXG4gICAgY29uc3Qgc3ZnU3RyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhjbG9uZVN2Z0VsZW1lbnQpO1xuICAgIGNvbnN0IGltZ1NyYyA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudChzdmdTdHIpfWA7XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCBsb2FkSW1hZ2UoaW1nU3JjKTtcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHJhdGlvV2lkdGgsIHJhdGlvSGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbnZlcnRpbmcgU1ZHIHRvIGltYWdlOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8qKlxuICogZG93bmxvYWQgdGhlIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVcbiAqIEBwYXJhbSB1cmwgZG93bmxvYWQgdXJsXG4gKiBAcGFyYW0gbmFtZSBmaWxlIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkSW1hZ2UodXJsOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIGEuZG93bmxvYWQgPSBuYW1lO1xuICAgIGEuY2xpY2soKTtcbiAgICBhLnJlbW92ZSgpO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { PlaitBoard } from "../interfaces/board";
1
+ import { PlaitBoard } from '../interfaces/board';
2
2
  export function depthFirstRecursion(node, callback, recursion, isReverse) {
3
3
  if (!recursion || recursion(node)) {
4
4
  let children = [];
@@ -22,4 +22,4 @@ export const getIsRecursionFunc = (board) => {
22
22
  }
23
23
  };
24
24
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsSUFBTyxFQUNQLFFBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLFNBQW1CO0lBRW5CLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQy9CLElBQUksUUFBUSxHQUFlLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNqQztRQUNELFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3JELFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsbUJBQW1CLENBQUMsS0FBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNwRCxPQUFPLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQzFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7YUFBTTtZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2JvYXJkXCI7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9lbGVtZW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXB0aEZpcnN0UmVjdXJzaW9uPFQgZXh0ZW5kcyBUcmVlTm9kZSA9IFRyZWVOb2RlPihcbiAgICBub2RlOiBULFxuICAgIGNhbGxiYWNrOiAobm9kZTogVCkgPT4gdm9pZCxcbiAgICByZWN1cnNpb24/OiAobm9kZTogVCkgPT4gYm9vbGVhbixcbiAgICBpc1JldmVyc2U/OiBib29sZWFuXG4pIHtcbiAgICBpZiAoIXJlY3Vyc2lvbiB8fCByZWN1cnNpb24obm9kZSkpIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuOiBUcmVlTm9kZVtdID0gW107XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IFsuLi5ub2RlLmNoaWxkcmVuXTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZHJlbiA9IGlzUmV2ZXJzZSA/IGNoaWxkcmVuLnJldmVyc2UoKSA6IGNoaWxkcmVuO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oY2hpbGQgYXMgVCwgY2FsbGJhY2ssIHJlY3Vyc2lvbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYWxsYmFjayhub2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldElzUmVjdXJzaW9uRnVuYyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAoZWxlbWVudDogUGxhaXRFbGVtZW50IHwgUGxhaXRCb2FyZCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKGVsZW1lbnQpIHx8IGJvYXJkLmlzUmVjdXJzaW9uKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVOb2RlIHtcbiAgICBjaGlsZHJlbj86IFRyZWVOb2RlW107XG59XG4iXX0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsSUFBTyxFQUNQLFFBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLFNBQW1CO0lBRW5CLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQy9CLElBQUksUUFBUSxHQUFlLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNqQztRQUNELFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3JELFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsbUJBQW1CLENBQUMsS0FBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNwRCxPQUFPLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQzFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7YUFBTTtZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHRoRmlyc3RSZWN1cnNpb248VCBleHRlbmRzIFRyZWVOb2RlID0gVHJlZU5vZGU+KFxuICAgIG5vZGU6IFQsXG4gICAgY2FsbGJhY2s6IChub2RlOiBUKSA9PiB2b2lkLFxuICAgIHJlY3Vyc2lvbj86IChub2RlOiBUKSA9PiBib29sZWFuLFxuICAgIGlzUmV2ZXJzZT86IGJvb2xlYW5cbikge1xuICAgIGlmICghcmVjdXJzaW9uIHx8IHJlY3Vyc2lvbihub2RlKSkge1xuICAgICAgICBsZXQgY2hpbGRyZW46IFRyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gWy4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkcmVuID0gaXNSZXZlcnNlID8gY2hpbGRyZW4ucmV2ZXJzZSgpIDogY2hpbGRyZW47XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihjaGlsZCBhcyBULCBjYWxsYmFjaywgcmVjdXJzaW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhbGxiYWNrKG5vZGUpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SXNSZWN1cnNpb25GdW5jID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIChlbGVtZW50OiBQbGFpdEVsZW1lbnQgfCBQbGFpdEJvYXJkKSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQoZWxlbWVudCkgfHwgYm9hcmQuaXNSZWN1cnNpb24oZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZU5vZGUge1xuICAgIGNoaWxkcmVuPzogVHJlZU5vZGVbXTtcbn1cbiJdfQ==