@plait/draw 0.62.0-next.5 → 0.62.0-next.7

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 (137) hide show
  1. package/arrow-line.component.d.ts +26 -0
  2. package/constants/pointer.d.ts +3 -3
  3. package/esm2022/arrow-line.component.mjs +157 -0
  4. package/esm2022/constants/geometry.mjs +3 -3
  5. package/esm2022/constants/pointer.mjs +4 -4
  6. package/esm2022/engines/flowchart/note-curly-left.mjs +2 -2
  7. package/esm2022/engines/flowchart/note-curly-right.mjs +7 -7
  8. package/esm2022/engines/flowchart/note-square.mjs +2 -2
  9. package/esm2022/engines/uml/required-interface.mjs +3 -2
  10. package/esm2022/generators/arrow-line-active.generator.mjs +81 -0
  11. package/esm2022/generators/arrow-line-auto-complete.generator.mjs +46 -0
  12. package/esm2022/generators/arrow-line.generator.mjs +13 -0
  13. package/esm2022/generators/index.mjs +3 -3
  14. package/esm2022/geometry.component.mjs +4 -4
  15. package/esm2022/image.component.mjs +4 -4
  16. package/esm2022/interfaces/arrow-line.mjs +70 -0
  17. package/esm2022/interfaces/element.mjs +2 -2
  18. package/esm2022/interfaces/index.mjs +14 -7
  19. package/esm2022/interfaces/vector-line.mjs +6 -0
  20. package/esm2022/plugins/with-arrow-line-auto-complete-reaction.mjs +41 -0
  21. package/esm2022/plugins/with-arrow-line-auto-complete.mjs +74 -0
  22. package/esm2022/plugins/with-arrow-line-bound-reaction.mjs +53 -0
  23. package/esm2022/plugins/with-arrow-line-create.mjs +53 -0
  24. package/esm2022/plugins/with-arrow-line-resize.mjs +158 -0
  25. package/esm2022/plugins/with-arrow-line-text-move.mjs +53 -0
  26. package/esm2022/plugins/with-arrow-line-text.mjs +63 -0
  27. package/esm2022/plugins/with-draw-fragment.mjs +13 -13
  28. package/esm2022/plugins/with-draw-resize.mjs +12 -5
  29. package/esm2022/plugins/with-draw.mjs +27 -20
  30. package/esm2022/plugins/with-geometry-resize.mjs +1 -1
  31. package/esm2022/plugins/with-swimlane.mjs +1 -20
  32. package/esm2022/plugins/with-table.mjs +21 -3
  33. package/esm2022/public-api.mjs +3 -3
  34. package/esm2022/table.component.mjs +6 -6
  35. package/esm2022/transforms/arrow-line.mjs +100 -0
  36. package/esm2022/transforms/geometry.mjs +4 -4
  37. package/esm2022/transforms/index.mjs +12 -11
  38. package/esm2022/transforms/swimlane.mjs +1 -29
  39. package/esm2022/transforms/table-text.mjs +5 -5
  40. package/esm2022/transforms/table.mjs +30 -0
  41. package/esm2022/utils/arrow-line/arrow-line-arrow.mjs +123 -0
  42. package/esm2022/utils/arrow-line/arrow-line-basic.mjs +257 -0
  43. package/esm2022/utils/arrow-line/arrow-line-common.mjs +127 -0
  44. package/esm2022/utils/arrow-line/arrow-line-resize.mjs +309 -0
  45. package/esm2022/utils/arrow-line/elbow.mjs +114 -0
  46. package/esm2022/utils/arrow-line/index.mjs +6 -0
  47. package/esm2022/utils/clipboard.mjs +10 -10
  48. package/esm2022/utils/common.mjs +3 -3
  49. package/esm2022/utils/geometry.mjs +13 -13
  50. package/esm2022/utils/hit.mjs +67 -44
  51. package/esm2022/utils/index.mjs +2 -2
  52. package/esm2022/utils/memorize.mjs +4 -5
  53. package/esm2022/utils/position/arrow-line.mjs +67 -0
  54. package/esm2022/utils/position/geometry.mjs +1 -1
  55. package/esm2022/utils/selected.mjs +3 -3
  56. package/esm2022/utils/swimlane.mjs +11 -5
  57. package/esm2022/utils/table-selected.mjs +3 -4
  58. package/esm2022/utils/table.mjs +16 -1
  59. package/fesm2022/plait-draw.mjs +448 -372
  60. package/fesm2022/plait-draw.mjs.map +1 -1
  61. package/generators/arrow-line-active.generator.d.ts +13 -0
  62. package/generators/{line-auto-complete.generator.d.ts → arrow-line-auto-complete.generator.d.ts} +1 -1
  63. package/generators/arrow-line.generator.d.ts +8 -0
  64. package/generators/index.d.ts +2 -2
  65. package/geometry.component.d.ts +2 -2
  66. package/image.component.d.ts +2 -2
  67. package/interfaces/arrow-line.d.ts +75 -0
  68. package/interfaces/element.d.ts +1 -1
  69. package/interfaces/index.d.ts +6 -4
  70. package/interfaces/vector-line.d.ts +16 -0
  71. package/package.json +1 -1
  72. package/plugins/with-arrow-line-auto-complete-reaction.d.ts +2 -0
  73. package/plugins/with-arrow-line-auto-complete.d.ts +7 -0
  74. package/plugins/with-arrow-line-bound-reaction.d.ts +2 -0
  75. package/plugins/with-arrow-line-create.d.ts +2 -0
  76. package/plugins/with-arrow-line-resize.d.ts +2 -0
  77. package/plugins/with-arrow-line-text-move.d.ts +2 -0
  78. package/plugins/with-arrow-line-text.d.ts +2 -0
  79. package/plugins/with-draw-fragment.d.ts +2 -2
  80. package/plugins/with-swimlane.d.ts +1 -2
  81. package/public-api.d.ts +2 -2
  82. package/table.component.d.ts +2 -2
  83. package/transforms/arrow-line.d.ts +12 -0
  84. package/transforms/index.d.ts +8 -8
  85. package/transforms/swimlane.d.ts +1 -3
  86. package/transforms/table-text.d.ts +2 -3
  87. package/transforms/table.d.ts +3 -0
  88. package/utils/arrow-line/arrow-line-arrow.d.ts +4 -0
  89. package/utils/arrow-line/arrow-line-basic.d.ts +13 -0
  90. package/utils/{line/line-common.d.ts → arrow-line/arrow-line-common.d.ts} +3 -3
  91. package/utils/{line/line-resize.d.ts → arrow-line/arrow-line-resize.d.ts} +3 -3
  92. package/utils/{line → arrow-line}/elbow.d.ts +7 -7
  93. package/utils/arrow-line/index.d.ts +5 -0
  94. package/utils/clipboard.d.ts +4 -4
  95. package/utils/geometry.d.ts +17 -17
  96. package/utils/hit.d.ts +7 -4
  97. package/utils/index.d.ts +1 -1
  98. package/utils/position/arrow-line.d.ts +16 -0
  99. package/utils/selected.d.ts +2 -2
  100. package/utils/swimlane.d.ts +1 -1
  101. package/utils/table.d.ts +2 -0
  102. package/esm2022/generators/line-active.generator.mjs +0 -81
  103. package/esm2022/generators/line-auto-complete.generator.mjs +0 -46
  104. package/esm2022/generators/line.generator.mjs +0 -13
  105. package/esm2022/interfaces/line.mjs +0 -70
  106. package/esm2022/line.component.mjs +0 -155
  107. package/esm2022/plugins/with-line-auto-complete-reaction.mjs +0 -41
  108. package/esm2022/plugins/with-line-auto-complete.mjs +0 -75
  109. package/esm2022/plugins/with-line-bound-reaction.mjs +0 -53
  110. package/esm2022/plugins/with-line-create.mjs +0 -53
  111. package/esm2022/plugins/with-line-resize.mjs +0 -158
  112. package/esm2022/plugins/with-line-text-move.mjs +0 -53
  113. package/esm2022/plugins/with-line-text.mjs +0 -62
  114. package/esm2022/transforms/line.mjs +0 -100
  115. package/esm2022/utils/line/elbow.mjs +0 -114
  116. package/esm2022/utils/line/index.mjs +0 -6
  117. package/esm2022/utils/line/line-arrow.mjs +0 -123
  118. package/esm2022/utils/line/line-basic.mjs +0 -257
  119. package/esm2022/utils/line/line-common.mjs +0 -123
  120. package/esm2022/utils/line/line-resize.mjs +0 -309
  121. package/esm2022/utils/position/line.mjs +0 -67
  122. package/generators/line-active.generator.d.ts +0 -13
  123. package/generators/line.generator.d.ts +0 -8
  124. package/interfaces/line.d.ts +0 -75
  125. package/line.component.d.ts +0 -26
  126. package/plugins/with-line-auto-complete-reaction.d.ts +0 -2
  127. package/plugins/with-line-auto-complete.d.ts +0 -7
  128. package/plugins/with-line-bound-reaction.d.ts +0 -2
  129. package/plugins/with-line-create.d.ts +0 -2
  130. package/plugins/with-line-resize.d.ts +0 -2
  131. package/plugins/with-line-text-move.d.ts +0 -2
  132. package/plugins/with-line-text.d.ts +0 -2
  133. package/transforms/line.d.ts +0 -12
  134. package/utils/line/index.d.ts +0 -5
  135. package/utils/line/line-arrow.d.ts +0 -4
  136. package/utils/line/line-basic.d.ts +0 -13
  137. package/utils/position/line.d.ts +0 -16
@@ -0,0 +1,63 @@
1
+ import { PlaitBoard, PlaitNode, getHitElementByPoint, getNearestPointBetweenPointAndSegments, toHostPoint, toViewBoxPoint } from '@plait/core';
2
+ import { PlaitDrawElement } from '../interfaces';
3
+ import { Node } from 'slate';
4
+ import { buildText, getMemorizedLatest, getRatioByPoint, getTextManages } from '@plait/common';
5
+ import { DrawTransforms } from '../transforms';
6
+ import { getArrowLinePoints } from '../utils/arrow-line/arrow-line-basic';
7
+ import { getHitArrowLineTextIndex } from '../utils/position/arrow-line';
8
+ import { isHitArrowLineText } from '../utils/hit';
9
+ import { LINE_TEXT } from '../constants/line';
10
+ export const withArrowLineText = (board) => {
11
+ const { dblClick } = board;
12
+ board.dblClick = (event) => {
13
+ if (!PlaitBoard.isReadonly(board)) {
14
+ const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
15
+ const hitTarget = getHitElementByPoint(board, clickPoint, (element) => {
16
+ return PlaitDrawElement.isArrowLine(element);
17
+ });
18
+ const hitTargetPath = hitTarget && PlaitBoard.findPath(board, hitTarget);
19
+ if (hitTarget) {
20
+ const points = getArrowLinePoints(board, hitTarget);
21
+ const point = getNearestPointBetweenPointAndSegments(clickPoint, points);
22
+ const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];
23
+ const textIndex = getHitArrowLineTextIndex(board, hitTarget, clickPoint);
24
+ const isHitText = isHitArrowLineText(board, hitTarget, clickPoint);
25
+ if (isHitText) {
26
+ editHandle(board, hitTarget, textIndex);
27
+ }
28
+ else {
29
+ const ratio = getRatioByPoint(points, point);
30
+ const textMemory = getMemorizedLatest('line')?.text || {};
31
+ texts.push({
32
+ text: buildText(LINE_TEXT, undefined, textMemory),
33
+ position: ratio,
34
+ width: 28,
35
+ height: 20
36
+ });
37
+ DrawTransforms.setArrowLineTexts(board, hitTarget, texts);
38
+ setTimeout(() => {
39
+ if (hitTargetPath) {
40
+ const newHitTarget = PlaitNode.get(board, hitTargetPath);
41
+ const textManages = getTextManages(newHitTarget);
42
+ editHandle(board, newHitTarget, textManages.length - 1, true);
43
+ }
44
+ });
45
+ }
46
+ }
47
+ }
48
+ dblClick(event);
49
+ };
50
+ return board;
51
+ };
52
+ function editHandle(board, element, manageIndex, isFirstEdit = false) {
53
+ const textManages = getTextManages(element);
54
+ const textManage = textManages[manageIndex];
55
+ textManage.edit(() => {
56
+ const text = Node.string(textManage.getText());
57
+ const shouldRemove = !text || (isFirstEdit && text === LINE_TEXT);
58
+ if (shouldRemove) {
59
+ DrawTransforms.removeArrowLineText(board, element, manageIndex);
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hcnJvdy1saW5lLXRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtYXJyb3ctbGluZS10ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBRVYsU0FBUyxFQUNULG9CQUFvQixFQUNwQixzQ0FBc0MsRUFDdEMsV0FBVyxFQUNYLGNBQWMsRUFDakIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDbkQsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUUzQixLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FB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QUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDbEUsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNmLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0Tm9kZSxcbiAgICBnZXRIaXRFbGVtZW50QnlQb2ludCxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICB0b0hvc3RQb2ludCxcbiAgICB0b1ZpZXdCb3hQb2ludFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdEFycm93TGluZSwgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGJ1aWxkVGV4dCwgZ2V0TWVtb3JpemVkTGF0ZXN0LCBnZXRSYXRpb0J5UG9pbnQsIGdldFRleHRNYW5hZ2VzIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2V0QXJyb3dMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvYXJyb3ctbGluZS9hcnJvdy1saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEhpdEFycm93TGluZVRleHRJbmRleCB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2Fycm93LWxpbmUnO1xuaW1wb3J0IHsgaXNIaXRBcnJvd0xpbmVUZXh0IH0gZnJvbSAnLi4vdXRpbHMvaGl0JztcbmltcG9ydCB7IExJTkVfVEVYVCB9IGZyb20gJy4uL2NvbnN0YW50cy9saW5lJztcblxuZXhwb3J0IGNvbnN0IHdpdGhBcnJvd0xpbmVUZXh0ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBkYmxDbGljayB9ID0gYm9hcmQ7XG5cbiAgICBib2FyZC5kYmxDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIGNvbnN0IGhpdFRhcmdldCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBjbGlja1BvaW50LCAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCk7XG4gICAgICAgICAgICB9KSBhcyB1bmRlZmluZWQgfCBQbGFpdEFycm93TGluZTtcbiAgICAgICAgICAgIGNvbnN0IGhpdFRhcmdldFBhdGggPSBoaXRUYXJnZXQgJiYgUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgaGl0VGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChoaXRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRBcnJvd0xpbmVQb2ludHMoYm9hcmQsIGhpdFRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhjbGlja1BvaW50LCBwb2ludHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRzID0gaGl0VGFyZ2V0LnRleHRzPy5sZW5ndGggPyBbLi4uaGl0VGFyZ2V0LnRleHRzXSA6IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRJbmRleCA9IGdldEhpdEFycm93TGluZVRleHRJbmRleChib2FyZCwgaGl0VGFyZ2V0LCBjbGlja1BvaW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0hpdFRleHQgPSBpc0hpdEFycm93TGluZVRleHQoYm9hcmQsIGhpdFRhcmdldCwgY2xpY2tQb2ludCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzSGl0VGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0SGFuZGxlKGJvYXJkLCBoaXRUYXJnZXQsIHRleHRJbmRleCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF0aW8gPSBnZXRSYXRpb0J5UG9pbnQocG9pbnRzLCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRNZW1vcnkgPSBnZXRNZW1vcml6ZWRMYXRlc3QoJ2xpbmUnKT8udGV4dCB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGV4dHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBidWlsZFRleHQoTElORV9URVhULCB1bmRlZmluZWQsIHRleHRNZW1vcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJhdGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI4LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMuc2V0QXJyb3dMaW5lVGV4dHMoYm9hcmQsIGhpdFRhcmdldCwgdGV4dHMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaXRUYXJnZXRQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SGl0VGFyZ2V0ID0gUGxhaXROb2RlLmdldChib2FyZCwgaGl0VGFyZ2V0UGF0aCkgYXMgUGxhaXRBcnJvd0xpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE1hbmFnZXMgPSBnZXRUZXh0TWFuYWdlcyhuZXdIaXRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRIYW5kbGUoYm9hcmQsIG5ld0hpdFRhcmdldCwgdGV4dE1hbmFnZXMubGVuZ3RoIC0gMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYmxDbGljayhldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG5cbmZ1bmN0aW9uIGVkaXRIYW5kbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QXJyb3dMaW5lLCBtYW5hZ2VJbmRleDogbnVtYmVyLCBpc0ZpcnN0RWRpdDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgdGV4dE1hbmFnZXMgPSBnZXRUZXh0TWFuYWdlcyhlbGVtZW50KTtcbiAgICBjb25zdCB0ZXh0TWFuYWdlID0gdGV4dE1hbmFnZXNbbWFuYWdlSW5kZXhdO1xuICAgIHRleHRNYW5hZ2UuZWRpdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBOb2RlLnN0cmluZyh0ZXh0TWFuYWdlLmdldFRleHQoKSk7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbW92ZSA9ICF0ZXh0IHx8IChpc0ZpcnN0RWRpdCAmJiB0ZXh0ID09PSBMSU5FX1RFWFQpO1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlKSB7XG4gICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5yZW1vdmVBcnJvd0xpbmVUZXh0KGJvYXJkLCBlbGVtZW50LCBtYW5hZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
@@ -1,9 +1,9 @@
1
1
  import { WritableClipboardOperationType, WritableClipboardType, addClipboardContext, createClipboardContext, getSelectedElements } from '@plait/core';
2
2
  import { getSelectedDrawElements } from '../utils/selected';
3
- import { PlaitDrawElement, PlaitLine } from '../interfaces';
3
+ import { PlaitDrawElement, PlaitArrowLine } from '../interfaces';
4
4
  import { buildClipboardData, insertClipboardData } from '../utils/clipboard';
5
5
  import { DrawTransforms } from '../transforms';
6
- import { getLines } from '../utils/line/line-basic';
6
+ import { getArrowLines } from '../utils/arrow-line/arrow-line-basic';
7
7
  import { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText } from '@plait/common';
8
8
  import { DEFAULT_IMAGE_WIDTH } from '../constants';
9
9
  export const withDrawFragment = (baseBoard) => {
@@ -13,15 +13,15 @@ export const withDrawFragment = (baseBoard) => {
13
13
  const drawElements = getSelectedDrawElements(board);
14
14
  if (drawElements.length) {
15
15
  const geometryElements = drawElements.filter(value => PlaitDrawElement.isGeometry(value));
16
- const lineElements = drawElements.filter(value => PlaitDrawElement.isLine(value));
16
+ const lineElements = drawElements.filter(value => PlaitDrawElement.isArrowLine(value));
17
17
  const imageElements = drawElements.filter(value => PlaitDrawElement.isImage(value));
18
18
  const tableElements = drawElements.filter(value => PlaitDrawElement.isTable(value));
19
19
  const swimlaneElements = drawElements.filter(value => PlaitDrawElement.isSwimlane(value));
20
20
  const boundLineElements = [
21
- ...getBoundedLineElements(board, geometryElements),
22
- ...getBoundedLineElements(board, imageElements),
23
- ...getBoundedLineElements(board, tableElements),
24
- ...getBoundedLineElements(board, swimlaneElements)
21
+ ...getBoundedArrowLineElements(board, geometryElements),
22
+ ...getBoundedArrowLineElements(board, imageElements),
23
+ ...getBoundedArrowLineElements(board, tableElements),
24
+ ...getBoundedArrowLineElements(board, swimlaneElements)
25
25
  ].filter(line => !lineElements.includes(line));
26
26
  data.push(...[
27
27
  ...geometryElements,
@@ -40,8 +40,8 @@ export const withDrawFragment = (baseBoard) => {
40
40
  if (targetDrawElements.length) {
41
41
  if (operationType === WritableClipboardOperationType.cut) {
42
42
  const geometryElements = targetDrawElements.filter(value => PlaitDrawElement.isGeometry(value));
43
- const lineElements = targetDrawElements.filter(value => PlaitDrawElement.isLine(value));
44
- boundLineElements = getBoundedLineElements(board, geometryElements).filter(line => !lineElements.includes(line));
43
+ const lineElements = targetDrawElements.filter(value => PlaitDrawElement.isArrowLine(value));
44
+ boundLineElements = getBoundedArrowLineElements(board, geometryElements).filter(line => !lineElements.includes(line));
45
45
  }
46
46
  const selectedElements = [...targetDrawElements, ...boundLineElements];
47
47
  const elements = buildClipboardData(board, selectedElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);
@@ -93,8 +93,8 @@ export const withDrawFragment = (baseBoard) => {
93
93
  };
94
94
  return board;
95
95
  };
96
- export const getBoundedLineElements = (board, plaitShapes) => {
97
- const lines = getLines(board);
98
- return lines.filter(line => plaitShapes.find(shape => PlaitLine.isBoundElementOfSource(line, shape) || PlaitLine.isBoundElementOfTarget(line, shape)));
96
+ export const getBoundedArrowLineElements = (board, plaitShapes) => {
97
+ const lines = getArrowLines(board);
98
+ return lines.filter(line => plaitShapes.find(shape => PlaitArrowLine.isBoundElementOfSource(line, shape) || PlaitArrowLine.isBoundElementOfTarget(line, shape)));
99
99
  };
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWRyYXctZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU9ILDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixTQUFTLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXBELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUduRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFNBQXFCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLEtBQUssR0FBRyxTQUF1QixDQUFDO0lBQ3RDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBFLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQW9CLEVBQUUsRUFBRTtRQUNoRCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixN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LENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDM0MsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUNuQixjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsRSxPQUFPO2dCQUNYLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELGNBQWMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBaUIsRUFBRSxXQUFnQyxFQUFFLEVBQUU7SUFDMUYsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN2QixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQzVILENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENsaXBib2FyZERhdGEsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUsXG4gICAgV3JpdGFibGVDbGlwYm9hcmRUeXBlLFxuICAgIGFkZENsaXBib2FyZENvbnRleHQsXG4gICAgY3JlYXRlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRHZW9tZXRyeSwgUGxhaXRMaW5lLCBQbGFpdFNoYXBlRWxlbWVudCwgUGxhaXRTd2ltbGFuZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhLCBpbnNlcnRDbGlwYm9hcmREYXRhIH0gZnJvbSAnLi4vdXRpbHMvY2xpcGJvYXJkJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRMaW5lcyB9IGZyb20gJy4uL3V0aWxzL2xpbmUvbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBQbGFpdEltYWdlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbWFnZSc7XG5pbXBvcnQgeyBhY2NlcHRJbWFnZVR5cGVzLCBidWlsZEltYWdlLCBnZXRFbGVtZW50T2ZGb2N1c2VkSW1hZ2UsIGdldEVsZW1lbnRzVGV4dCB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgREVGQVVMVF9JTUFHRV9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQbGFpdFRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWJsZSc7XG5cbmV4cG9ydCBjb25zdCB3aXRoRHJhd0ZyYWdtZW50ID0gKGJhc2VCb2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IGJvYXJkID0gYmFzZUJvYXJkIGFzIFBsYWl0Qm9hcmQ7XG4gICAgY29uc3QgeyBnZXREZWxldGVkRnJhZ21lbnQsIGJ1aWxkRnJhZ21lbnQsIGluc2VydEZyYWdtZW50IH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmdldERlbGV0ZWRGcmFnbWVudCA9IChkYXRhOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgICAgICBjb25zdCBkcmF3RWxlbWVudHMgPSBnZXRTZWxlY3RlZERyYXdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIGlmIChkcmF3RWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeUVsZW1lbnRzID0gZHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkodmFsdWUpKSBhcyBQbGFpdEdlb21ldHJ5W107XG4gICAgICAgICAgICBjb25zdCBsaW5lRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKHZhbHVlKSkgYXMgUGxhaXRMaW5lW107XG4gICAgICAgICAgICBjb25zdCBpbWFnZUVsZW1lbnRzID0gZHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UodmFsdWUpKSBhcyBQbGFpdEltYWdlW107XG4gICAgICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnRzID0gZHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzVGFibGUodmFsdWUpKSBhcyBQbGFpdFRhYmxlW107XG4gICAgICAgICAgICBjb25zdCBzd2ltbGFuZUVsZW1lbnRzID0gZHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzU3dpbWxhbmUodmFsdWUpKSBhcyBQbGFpdFN3aW1sYW5lW107XG5cbiAgICAgICAgICAgIGNvbnN0IGJvdW5kTGluZUVsZW1lbnRzID0gW1xuICAgICAgICAgICAgICAgIC4uLmdldEJvdW5kZWRMaW5lRWxlbWVudHMoYm9hcmQsIGdlb21ldHJ5RWxlbWVudHMpLFxuICAgICAgICAgICAgICAgIC4uLmdldEJvdW5kZWRMaW5lRWxlbWVudHMoYm9hcmQsIGltYWdlRWxlbWVudHMpLFxuICAgICAgICAgICAgICAgIC4uLmdldEJvdW5kZWRMaW5lRWxlbWVudHMoYm9hcmQsIHRhYmxlRWxlbWVudHMpLFxuICAgICAgICAgICAgICAgIC4uLmdldEJvdW5kZWRMaW5lRWxlbWVudHMoYm9hcmQsIHN3aW1sYW5lRWxlbWVudHMpXG4gICAgICAgICAgICBdLmZpbHRlcihsaW5lID0+ICFsaW5lRWxlbWVudHMuaW5jbHVkZXMobGluZSkpO1xuICAgICAgICAgICAgZGF0YS5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLltcbiAgICAgICAgICAgICAgICAgICAgLi4uZ2VvbWV0cnlFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4ubGluZUVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5pbWFnZUVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi50YWJsZUVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5zd2ltbGFuZUVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5ib3VuZExpbmVFbGVtZW50cy5maWx0ZXIobGluZSA9PiAhbGluZUVsZW1lbnRzLmluY2x1ZGVzKGxpbmUpKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldERlbGV0ZWRGcmFnbWVudChkYXRhKTtcbiAgICB9O1xuXG4gICAgYm9hcmQuYnVpbGRGcmFnbWVudCA9IChcbiAgICAgICAgY2xpcGJvYXJkQ29udGV4dDogV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0IHwgbnVsbCxcbiAgICAgICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQgfCBudWxsLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUsXG4gICAgICAgIG9yaWdpbkRhdGE/OiBQbGFpdEVsZW1lbnRbXVxuICAgICkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXREcmF3RWxlbWVudHMgPSBnZXRTZWxlY3RlZERyYXdFbGVtZW50cyhib2FyZCwgb3JpZ2luRGF0YSk7XG4gICAgICAgIGxldCBib3VuZExpbmVFbGVtZW50czogUGxhaXRMaW5lW10gPSBbXTtcbiAgICAgICAgaWYgKHRhcmdldERyYXdFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09PSBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUuY3V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnlFbGVtZW50cyA9IHRhcmdldERyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KHZhbHVlKSkgYXMgUGxhaXRHZW9tZXRyeVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtZW50cyA9IHRhcmdldERyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0xpbmUodmFsdWUpKSBhcyBQbGFpdExpbmVbXTtcbiAgICAgICAgICAgICAgICBib3VuZExpbmVFbGVtZW50cyA9IGdldEJvdW5kZWRMaW5lRWxlbWVudHMoYm9hcmQsIGdlb21ldHJ5RWxlbWVudHMpLmZpbHRlcihsaW5lID0+ICFsaW5lRWxlbWVudHMuaW5jbHVkZXMobGluZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IFsuLi50YXJnZXREcmF3RWxlbWVudHMsIC4uLmJvdW5kTGluZUVsZW1lbnRzXTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRDbGlwYm9hcmREYXRhKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzLCByZWN0YW5nbGUgPyBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55XSA6IFswLCAwXSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0RWxlbWVudHNUZXh0KHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkQ29udGV4dCA9IGNyZWF0ZUNsaXBib2FyZENvbnRleHQoV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLCBlbGVtZW50cywgdGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBhZGRDbGlwYm9hcmRDb250ZXh0KGNsaXBib2FyZENvbnRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZEZyYWdtZW50KGNsaXBib2FyZENvbnRleHQsIHJlY3RhbmdsZSwgb3BlcmF0aW9uVHlwZSwgb3JpZ2luRGF0YSk7XG4gICAgfTtcblxuICAgIGJvYXJkLmluc2VydEZyYWdtZW50ID0gKGNsaXBib2FyZERhdGE6IENsaXBib2FyZERhdGEgfCBudWxsLCB0YXJnZXRQb2ludDogUG9pbnQsIG9wZXJhdGlvblR5cGU/OiBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZmlsZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXB0SW1hZ2VBcnJheSA9IGFjY2VwdEltYWdlVHlwZXMubWFwKHR5cGUgPT4gJ2ltYWdlLycgKyB0eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkluc2VydGlvbkltYWdlID1cbiAgICAgICAgICAgICAgICAhZ2V0RWxlbWVudE9mRm9jdXNlZEltYWdlKGJvYXJkKSAmJiAhKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmIGJvYXJkLmlzSW1hZ2VCaW5kaW5nQWxsb3dlZChzZWxlY3RlZEVsZW1lbnRzWzBdKSk7XG4gICAgICAgICAgICBpZiAoYWNjZXB0SW1hZ2VBcnJheS5pbmNsdWRlcyhjbGlwYm9hcmREYXRhLmZpbGVzWzBdLnR5cGUpICYmIGNhbkluc2VydGlvbkltYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGaWxlID0gY2xpcGJvYXJkRGF0YS5maWxlc1swXTtcbiAgICAgICAgICAgICAgICBidWlsZEltYWdlKGJvYXJkLCBpbWFnZUZpbGUsIERFRkFVTFRfSU1BR0VfV0lEVEgsIGltYWdlSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLmluc2VydEltYWdlKGJvYXJkLCBpbWFnZUl0ZW0sIHRhcmdldFBvaW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZHJhd0VsZW1lbnRzID0gY2xpcGJvYXJkRGF0YS5lbGVtZW50cz8uZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudCh2YWx1ZSkpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLmVsZW1lbnRzICYmIGNsaXBib2FyZERhdGEuZWxlbWVudHMubGVuZ3RoID4gMCAmJiBkcmF3RWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGluc2VydENsaXBib2FyZERhdGEoYm9hcmQsIGRyYXdFbGVtZW50cywgdGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaXBib2FyZERhdGE/LnRleHQpIHtcbiAgICAgICAgICAgIGlmICghY2xpcGJvYXJkRGF0YS5lbGVtZW50cyB8fCBjbGlwYm9hcmREYXRhLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vICgq77+j77i277+jKVxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzQ2hpbGRyZW4gPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBzZWxlY3RlZEVsZW1lbnRzWzBdLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzRnJlZVRleHQgPSAhaW5zZXJ0QXNDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QXNGcmVlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5pbnNlcnRUZXh0KGJvYXJkLCB0YXJnZXRQb2ludCwgY2xpcGJvYXJkRGF0YS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEZyYWdtZW50KGNsaXBib2FyZERhdGEsIHRhcmdldFBvaW50LCBvcGVyYXRpb25UeXBlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdW5kZWRMaW5lRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBsYWl0U2hhcGVzOiBQbGFpdFNoYXBlRWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgbGluZXMgPSBnZXRMaW5lcyhib2FyZCk7XG4gICAgcmV0dXJuIGxpbmVzLmZpbHRlcihsaW5lID0+XG4gICAgICAgIHBsYWl0U2hhcGVzLmZpbmQoc2hhcGUgPT4gUGxhaXRMaW5lLmlzQm91bmRFbGVtZW50T2ZTb3VyY2UobGluZSwgc2hhcGUpIHx8IFBsYWl0TGluZS5pc0JvdW5kRWxlbWVudE9mVGFyZ2V0KGxpbmUsIHNoYXBlKSlcbiAgICApO1xufTsiXX0=
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWRyYXctZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU9ILDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixjQUFjLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUduRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFNBQXFCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLEtBQUssR0FBRyxTQUF1QixDQUFDO0lBQ3RDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBFLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQW9CLEVBQUUsRUFBRTtRQUNoRCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixN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LENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDM0MsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUNuQixjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsRSxPQUFPO2dCQUNYLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELGNBQWMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBaUIsRUFBRSxXQUFnQyxFQUFFLEVBQUU7SUFDL0YsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN2QixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQ3RJLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENsaXBib2FyZERhdGEsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUsXG4gICAgV3JpdGFibGVDbGlwYm9hcmRUeXBlLFxuICAgIGFkZENsaXBib2FyZENvbnRleHQsXG4gICAgY3JlYXRlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRHZW9tZXRyeSwgUGxhaXRBcnJvd0xpbmUsIFBsYWl0U2hhcGVFbGVtZW50LCBQbGFpdFN3aW1sYW5lIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBidWlsZENsaXBib2FyZERhdGEsIGluc2VydENsaXBib2FyZERhdGEgfSBmcm9tICcuLi91dGlscy9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgRHJhd1RyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGdldEFycm93TGluZXMgfSBmcm9tICcuLi91dGlscy9hcnJvdy1saW5lL2Fycm93LWxpbmUtYmFzaWMnO1xuaW1wb3J0IHsgUGxhaXRJbWFnZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW1hZ2UnO1xuaW1wb3J0IHsgYWNjZXB0SW1hZ2VUeXBlcywgYnVpbGRJbWFnZSwgZ2V0RWxlbWVudE9mRm9jdXNlZEltYWdlLCBnZXRFbGVtZW50c1RleHQgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IERFRkFVTFRfSU1BR0VfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRUYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuXG5leHBvcnQgY29uc3Qgd2l0aERyYXdGcmFnbWVudCA9IChiYXNlQm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBib2FyZCA9IGJhc2VCb2FyZCBhcyBQbGFpdEJvYXJkO1xuICAgIGNvbnN0IHsgZ2V0RGVsZXRlZEZyYWdtZW50LCBidWlsZEZyYWdtZW50LCBpbnNlcnRGcmFnbWVudCB9ID0gYm9hcmQ7XG5cbiAgICBib2FyZC5nZXREZWxldGVkRnJhZ21lbnQgPSAoZGF0YTogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICAgICAgY29uc3QgZHJhd0VsZW1lbnRzID0gZ2V0U2VsZWN0ZWREcmF3RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoZHJhd0VsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnlFbGVtZW50cyA9IGRyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KHZhbHVlKSkgYXMgUGxhaXRHZW9tZXRyeVtdO1xuICAgICAgICAgICAgY29uc3QgbGluZUVsZW1lbnRzID0gZHJhd0VsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKHZhbHVlKSkgYXMgUGxhaXRBcnJvd0xpbmVbXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZSh2YWx1ZSkpIGFzIFBsYWl0SW1hZ2VbXTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNUYWJsZSh2YWx1ZSkpIGFzIFBsYWl0VGFibGVbXTtcbiAgICAgICAgICAgIGNvbnN0IHN3aW1sYW5lRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNTd2ltbGFuZSh2YWx1ZSkpIGFzIFBsYWl0U3dpbWxhbmVbXTtcblxuICAgICAgICAgICAgY29uc3QgYm91bmRMaW5lRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZEFycm93TGluZUVsZW1lbnRzKGJvYXJkLCBnZW9tZXRyeUVsZW1lbnRzKSxcbiAgICAgICAgICAgICAgICAuLi5nZXRCb3VuZGVkQXJyb3dMaW5lRWxlbWVudHMoYm9hcmQsIGltYWdlRWxlbWVudHMpLFxuICAgICAgICAgICAgICAgIC4uLmdldEJvdW5kZWRBcnJvd0xpbmVFbGVtZW50cyhib2FyZCwgdGFibGVFbGVtZW50cyksXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZEFycm93TGluZUVsZW1lbnRzKGJvYXJkLCBzd2ltbGFuZUVsZW1lbnRzKVxuICAgICAgICAgICAgXS5maWx0ZXIobGluZSA9PiAhbGluZUVsZW1lbnRzLmluY2x1ZGVzKGxpbmUpKTtcbiAgICAgICAgICAgIGRhdGEucHVzaChcbiAgICAgICAgICAgICAgICAuLi5bXG4gICAgICAgICAgICAgICAgICAgIC4uLmdlb21ldHJ5RWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLmxpbmVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uaW1hZ2VFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uc3dpbWxhbmVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uYm91bmRMaW5lRWxlbWVudHMuZmlsdGVyKGxpbmUgPT4gIWxpbmVFbGVtZW50cy5pbmNsdWRlcyhsaW5lKSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXREZWxldGVkRnJhZ21lbnQoZGF0YSk7XG4gICAgfTtcblxuICAgIGJvYXJkLmJ1aWxkRnJhZ21lbnQgPSAoXG4gICAgICAgIGNsaXBib2FyZENvbnRleHQ6IFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCB8IG51bGwsXG4gICAgICAgIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLFxuICAgICAgICBvcmlnaW5EYXRhPzogUGxhaXRFbGVtZW50W11cbiAgICApID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RHJhd0VsZW1lbnRzID0gZ2V0U2VsZWN0ZWREcmF3RWxlbWVudHMoYm9hcmQsIG9yaWdpbkRhdGEpO1xuICAgICAgICBsZXQgYm91bmRMaW5lRWxlbWVudHM6IFBsYWl0QXJyb3dMaW5lW10gPSBbXTtcbiAgICAgICAgaWYgKHRhcmdldERyYXdFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09PSBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUuY3V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnlFbGVtZW50cyA9IHRhcmdldERyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KHZhbHVlKSkgYXMgUGxhaXRHZW9tZXRyeVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtZW50cyA9IHRhcmdldERyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZSh2YWx1ZSkpIGFzIFBsYWl0QXJyb3dMaW5lW107XG4gICAgICAgICAgICAgICAgYm91bmRMaW5lRWxlbWVudHMgPSBnZXRCb3VuZGVkQXJyb3dMaW5lRWxlbWVudHMoYm9hcmQsIGdlb21ldHJ5RWxlbWVudHMpLmZpbHRlcihsaW5lID0+ICFsaW5lRWxlbWVudHMuaW5jbHVkZXMobGluZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IFsuLi50YXJnZXREcmF3RWxlbWVudHMsIC4uLmJvdW5kTGluZUVsZW1lbnRzXTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRDbGlwYm9hcmREYXRhKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzLCByZWN0YW5nbGUgPyBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55XSA6IFswLCAwXSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0RWxlbWVudHNUZXh0KHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkQ29udGV4dCA9IGNyZWF0ZUNsaXBib2FyZENvbnRleHQoV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLCBlbGVtZW50cywgdGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBhZGRDbGlwYm9hcmRDb250ZXh0KGNsaXBib2FyZENvbnRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZEZyYWdtZW50KGNsaXBib2FyZENvbnRleHQsIHJlY3RhbmdsZSwgb3BlcmF0aW9uVHlwZSwgb3JpZ2luRGF0YSk7XG4gICAgfTtcblxuICAgIGJvYXJkLmluc2VydEZyYWdtZW50ID0gKGNsaXBib2FyZERhdGE6IENsaXBib2FyZERhdGEgfCBudWxsLCB0YXJnZXRQb2ludDogUG9pbnQsIG9wZXJhdGlvblR5cGU/OiBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZmlsZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXB0SW1hZ2VBcnJheSA9IGFjY2VwdEltYWdlVHlwZXMubWFwKHR5cGUgPT4gJ2ltYWdlLycgKyB0eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkluc2VydGlvbkltYWdlID1cbiAgICAgICAgICAgICAgICAhZ2V0RWxlbWVudE9mRm9jdXNlZEltYWdlKGJvYXJkKSAmJiAhKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmIGJvYXJkLmlzSW1hZ2VCaW5kaW5nQWxsb3dlZChzZWxlY3RlZEVsZW1lbnRzWzBdKSk7XG4gICAgICAgICAgICBpZiAoYWNjZXB0SW1hZ2VBcnJheS5pbmNsdWRlcyhjbGlwYm9hcmREYXRhLmZpbGVzWzBdLnR5cGUpICYmIGNhbkluc2VydGlvbkltYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGaWxlID0gY2xpcGJvYXJkRGF0YS5maWxlc1swXTtcbiAgICAgICAgICAgICAgICBidWlsZEltYWdlKGJvYXJkLCBpbWFnZUZpbGUsIERFRkFVTFRfSU1BR0VfV0lEVEgsIGltYWdlSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLmluc2VydEltYWdlKGJvYXJkLCBpbWFnZUl0ZW0sIHRhcmdldFBvaW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZHJhd0VsZW1lbnRzID0gY2xpcGJvYXJkRGF0YS5lbGVtZW50cz8uZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudCh2YWx1ZSkpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLmVsZW1lbnRzICYmIGNsaXBib2FyZERhdGEuZWxlbWVudHMubGVuZ3RoID4gMCAmJiBkcmF3RWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGluc2VydENsaXBib2FyZERhdGEoYm9hcmQsIGRyYXdFbGVtZW50cywgdGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaXBib2FyZERhdGE/LnRleHQpIHtcbiAgICAgICAgICAgIGlmICghY2xpcGJvYXJkRGF0YS5lbGVtZW50cyB8fCBjbGlwYm9hcmREYXRhLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vICgq77+j77i277+jKVxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzQ2hpbGRyZW4gPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBzZWxlY3RlZEVsZW1lbnRzWzBdLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzRnJlZVRleHQgPSAhaW5zZXJ0QXNDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QXNGcmVlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5pbnNlcnRUZXh0KGJvYXJkLCB0YXJnZXRQb2ludCwgY2xpcGJvYXJkRGF0YS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEZyYWdtZW50KGNsaXBib2FyZERhdGEsIHRhcmdldFBvaW50LCBvcGVyYXRpb25UeXBlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdW5kZWRBcnJvd0xpbmVFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgcGxhaXRTaGFwZXM6IFBsYWl0U2hhcGVFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBsaW5lcyA9IGdldEFycm93TGluZXMoYm9hcmQpO1xuICAgIHJldHVybiBsaW5lcy5maWx0ZXIobGluZSA9PlxuICAgICAgICBwbGFpdFNoYXBlcy5maW5kKHNoYXBlID0+IFBsYWl0QXJyb3dMaW5lLmlzQm91bmRFbGVtZW50T2ZTb3VyY2UobGluZSwgc2hhcGUpIHx8IFBsYWl0QXJyb3dMaW5lLmlzQm91bmRFbGVtZW50T2ZUYXJnZXQobGluZSwgc2hhcGUpKVxuICAgICk7XG59O1xuIl19
@@ -1,9 +1,10 @@
1
- import { drawHandle, getFirstTextManage, getIndexByResizeHandle, getResizeHandlePointByIndex, getSymmetricHandleIndex, isCornerHandle, withResize, resetPointsAfterResize } from '@plait/common';
1
+ import { drawHandle, getFirstTextManage, getIndexByResizeHandle, getResizeHandlePointByIndex, getSymmetricHandleIndex, isCornerHandle, withResize, resetPointsAfterResize, normalizeShapePoints } from '@plait/common';
2
2
  import { PlaitBoard, Point, RectangleClient, Transforms, createG, getRectangleByElements, getSelectedElements, isSelectionMoving, getSelectionAngle, rotatePoints, rotatedDataPoints, createDebugGenerator, hasValidAngle, isAxisChangedByAngle, drawRectangle, ACTIVE_STROKE_WIDTH, SELECTION_BORDER_COLOR } from '@plait/core';
3
3
  import { PlaitDrawElement } from '../interfaces';
4
4
  import { DrawTransforms } from '../transforms';
5
5
  import { getHitRectangleResizeHandleRef } from '../utils/position/geometry';
6
6
  import { getSnapResizingRefOptions, getSnapResizingRef } from '../utils/snap-resizing';
7
+ import { isGeometryIncludeText } from '../utils';
7
8
  const debugKey = 'debug:plait:resize-for-rotation';
8
9
  const debugGenerator = createDebugGenerator(debugKey);
9
10
  export function withDrawResize(board) {
@@ -108,10 +109,16 @@ export function withDrawResize(board) {
108
109
  }
109
110
  }
110
111
  if (PlaitDrawElement.isGeometry(target)) {
111
- const { height: textHeight } = getFirstTextManage(target).getSize();
112
- DrawTransforms.resizeGeometry(board, points, textHeight, path);
112
+ if (isGeometryIncludeText(target)) {
113
+ const { height: textHeight } = getFirstTextManage(target).getSize();
114
+ DrawTransforms.resizeGeometry(board, points, textHeight, path);
115
+ }
116
+ else {
117
+ points = normalizeShapePoints(points);
118
+ Transforms.setNode(board, { points }, path);
119
+ }
113
120
  }
114
- else if (PlaitDrawElement.isLine(target)) {
121
+ else if (PlaitDrawElement.isArrowLine(target)) {
115
122
  Transforms.setNode(board, { points }, path);
116
123
  }
117
124
  else if (PlaitDrawElement.isImage(target)) {
@@ -247,4 +254,4 @@ export const getResizePointsByOtherwiseAxis = (board, points, resizeOriginPoint,
247
254
  const newRectangle = RectangleClient.getRectangleByPoints(resultPoints);
248
255
  return rotatePoints(resultPoints, RectangleClient.getCenterPoint(newRectangle), -(1 / 2) * Math.PI);
249
256
  };
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsVUFBVSxFQUNWLHNCQUFzQixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsVUFBVSxFQUNWLEtBQUssRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN6QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RixNQUFNLFFBQVEsR0FBRyxpQ0FBaUMsQ0FBQztBQUNuRCxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQVN0RCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWlCO0lBQzVDLE1BQU0sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbkQsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksT0FBMkIsQ0FB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LE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RSxDQUFDLENBQUMsQ0FBQztJQUNILGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEUsT0FBTyxZQUFZLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBSZXNpemVSZWYsXG4gICAgUmVzaXplU3RhdGUsXG4gICAgV2l0aFJlc2l6ZU9wdGlvbnMsXG4gICAgZHJhd0hhbmRsZSxcbiAgICBnZXRGaXJzdFRleHRNYW5hZ2UsXG4gICAgZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZSxcbiAgICBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXgsXG4gICAgZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXgsXG4gICAgaXNDb3JuZXJIYW5kbGUsXG4gICAgd2l0aFJlc2l6ZSxcbiAgICByZXNldFBvaW50c0FmdGVyUmVzaXplXG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIGNyZWF0ZUcsXG4gICAgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzLFxuICAgIGlzU2VsZWN0aW9uTW92aW5nLFxuICAgIGdldFNlbGVjdGlvbkFuZ2xlLFxuICAgIHJvdGF0ZVBvaW50cyxcbiAgICByb3RhdGVkRGF0YVBvaW50cyxcbiAgICBjcmVhdGVEZWJ1Z0dlbmVyYXRvcixcbiAgICBoYXNWYWxpZEFuZ2xlLFxuICAgIGlzQXhpc0NoYW5nZWRCeUFuZ2xlLFxuICAgIGRyYXdSZWN0YW5nbGUsXG4gICAgQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICBTRUxFQ1RJT05fQk9SREVSX0NPTE9SXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRIaXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWYgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRTbmFwUmVzaXppbmdSZWZPcHRpb25zLCBnZXRTbmFwUmVzaXppbmdSZWYgfSBmcm9tICcuLi91dGlscy9zbmFwLXJlc2l6aW5nJztcblxuY29uc3QgZGVidWdLZXkgPSAnZGVidWc6cGxhaXQ6cmVzaXplLWZvci1yb3RhdGlvbic7XG5jb25zdCBkZWJ1Z0dlbmVyYXRvciA9IGNyZWF0ZURlYnVnR2VuZXJhdG9yKGRlYnVnS2V5KTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrUm90YXRpb25SZWYge1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBuZXdDZW50ZXJQb2ludDogUG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRHJhd1Jlc2l6ZShib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgYWZ0ZXJDaGFuZ2UsIGRyYXdBY3RpdmVSZWN0YW5nbGUgfSA9IGJvYXJkO1xuICAgIGxldCBzbmFwRzogU1ZHR0VsZW1lbnQgfCBudWxsO1xuICAgIGxldCBoYW5kbGVHOiBTVkdHRWxlbWVudCB8IG51bGw7XG4gICAgbGV0IG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzaXplQWN0aXZlUG9pbnRzOiBQb2ludFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCBjYW5SZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPiAxICYmIGVsZW1lbnRzLmV2ZXJ5KGVsID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudChlbCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdERyYXdFbGVtZW50W10+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWVsZW1lbnRzJyxcbiAgICAgICAgY2FuUmVzaXplLFxuICAgICAgICBoaXRUZXN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoZWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmID0gZ2V0SGl0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmKGJvYXJkLCBib3VuZGluZ1JlY3RhbmdsZSwgcG9pbnQsIGFuZ2xlKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlOiBib3VuZGluZ1JlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBoYW5kbGVSZWYuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogaGFuZGxlUmVmLmN1cnNvckNsYXNzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0RHJhd0VsZW1lbnRbXT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBpc0Zyb21Db3JuZXIgPSBpc0Nvcm5lckhhbmRsZShib2FyZCwgcmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCBpc0FzcGVjdFJhdGlvID0gcmVzaXplU3RhdGUuaXNTaGlmdCB8fCBpc0Zyb21Db3JuZXI7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChyZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUocmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCB7IG9yaWdpblBvaW50LCBoYW5kbGVQb2ludCB9ID0gZ2V0UmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludChib2FyZCwgaGFuZGxlSW5kZXgsIHJlc2l6ZVJlZi5yZWN0YW5nbGUhKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUocmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGJ1bGtSb3RhdGlvblJlZjogQnVsa1JvdGF0aW9uUmVmIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgYnVsa1JvdGF0aW9uUmVmID0ge1xuICAgICAgICAgICAgICAgICAgICBhbmdsZTogYW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IDAsXG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRlclBvaW50OiBbMCwgMF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyb3RhdGVkU3RhcnRQb2ludCwgcm90YXRlRW5kUG9pbnRdID0gcm90YXRlUG9pbnRzKFxuICAgICAgICAgICAgICAgICAgICBbcmVzaXplU3RhdGUuc3RhcnRQb2ludCwgcmVzaXplU3RhdGUuZW5kUG9pbnRdLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgLWJ1bGtSb3RhdGlvblJlZi5hbmdsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmVzaXplU3RhdGUuc3RhcnRQb2ludCA9IHJvdGF0ZWRTdGFydFBvaW50O1xuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLmVuZFBvaW50ID0gcm90YXRlRW5kUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNpemVTbmFwUmVmT3B0aW9ucyA9IGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMoXG4gICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgcmVzaXplUmVmLFxuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVBvaW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpc0FzcGVjdFJhdGlvLFxuICAgICAgICAgICAgICAgIGlzRnJvbUNvcm5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVNuYXBSZWYgPSBnZXRTbmFwUmVzaXppbmdSZWYoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50LCByZXNpemVTbmFwUmVmT3B0aW9ucyk7XG4gICAgICAgICAgICByZXNpemVBY3RpdmVQb2ludHMgPSByZXNpemVTbmFwUmVmLmFjdGl2ZVBvaW50cztcbiAgICAgICAgICAgIHNuYXBHID0gcmVzaXplU25hcFJlZi5zbmFwRztcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChzbmFwRyk7XG5cbiAgICAgICAgICAgIGlmIChidWxrUm90YXRpb25SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ0JveENvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMocmVzaXplUmVmLnJlY3RhbmdsZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyA9IGJvdW5kaW5nQm94Q29ybmVyUG9pbnRzLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVTbmFwUmVmLnhab29tLCByZXNpemVTbmFwUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZGluZ0JveCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVkQm91bmRpbmdCb3hDb3JuZXJQb2ludHMpO1xuXG4gICAgICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIG5ld0JvdW5kaW5nQm94LCB7IHN0cm9rZTogJ2JsdWUnIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Qm91bmRpbmdCb3hDZW50ZXIgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQobmV3Qm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTmV3Qm91bmRpbmdCb3hQb2ludHMgPSByZXNldFBvaW50c0FmdGVyUmVzaXplKFxuICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYm91bmRpbmdCb3hDb3JuZXJQb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzaXplZEJvdW5kaW5nQm94Q29ybmVyUG9pbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIG5ld0JvdW5kaW5nQm94Q2VudGVyLFxuICAgICAgICAgICAgICAgICAgICBidWxrUm90YXRpb25SZWYuYW5nbGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYWRqdXN0ZWROZXdCb3VuZGluZ0JveFBvaW50cykpO1xuICAgICAgICAgICAgICAgIGJ1bGtSb3RhdGlvblJlZiA9IE9iamVjdC5hc3NpZ24oYnVsa1JvdGF0aW9uUmVmLCB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IG5ld0NlbnRlclswXSAtIG5ld0JvdW5kaW5nQm94Q2VudGVyWzBdLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiBuZXdDZW50ZXJbMV0gLSBuZXdCb3VuZGluZ0JveENlbnRlclsxXSxcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudGVyUG9pbnQ6IG5ld0NlbnRlclxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIGFkanVzdGVkTmV3Qm91bmRpbmdCb3hQb2ludHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNpemVSZWYuZWxlbWVudC5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50cztcbiAgICAgICAgICAgICAgICBpZiAoYnVsa1JvdGF0aW9uUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VkUG9pbnRzID0gcm90YXRlZERhdGFQb2ludHModGFyZ2V0LnBvaW50cywgY2VudGVyUG9pbnQsIC1idWxrUm90YXRpb25SZWYuYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSByZXZlcnNlZFBvaW50cy5tYXAoKHA6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgb3JpZ2luUG9pbnQsIHJlc2l6ZVNuYXBSZWYueFpvb20sIHJlc2l6ZVNuYXBSZWYueVpvb20pO1xuICAgICAgICAgICAgICAgICAgICB9KSBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0VGFyZ2V0UG9pbnRzID0gcG9pbnRzLm1hcChwID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBbMF0gKyBidWxrUm90YXRpb25SZWYhLm9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwWzFdICsgYnVsa1JvdGF0aW9uUmVmIS5vZmZzZXRZXG4gICAgICAgICAgICAgICAgICAgIF0pIGFzIFBvaW50W107XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKGFkanVzdFRhcmdldFBvaW50cywgYnVsa1JvdGF0aW9uUmVmLm5ld0NlbnRlclBvaW50LCBidWxrUm90YXRpb25SZWYuYW5nbGUpIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkgJiYgaXNBeGlzQ2hhbmdlZEJ5QW5nbGUodGFyZ2V0LmFuZ2xlISkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IGdldFJlc2l6ZVBvaW50c0J5T3RoZXJ3aXNlQXhpcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVNuYXBSZWYueFpvb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU25hcFJlZi55Wm9vbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHRhcmdldC5wb2ludHMubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChwLCBvcmlnaW5Qb2ludCwgcmVzaXplU25hcFJlZi54Wm9vbSwgcmVzaXplU25hcFJlZi55Wm9vbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogdGV4dEhlaWdodCB9ID0gZ2V0Rmlyc3RUZXh0TWFuYWdlKHRhcmdldCkuZ2V0U2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5yZXNpemVHZW9tZXRyeShib2FyZCwgcG9pbnRzIGFzIFtQb2ludCwgUG9pbnRdLCB0ZXh0SGVpZ2h0LCBwYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50cyB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGltYWdlIGVsZW1lbnQgZG9lcyBub3QgZm9sbG93IHRoZSByZXNpemUsIGJ1dCBtb3ZlcyBiYXNlZCBvbiB0aGUgY2VudGVyIHBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHRhcmdldC5wb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQodGFyZ2V0UmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlclBvaW50ID0gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU25hcFJlZi54Wm9vbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTbmFwUmVmLnlab29tXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGFyZ2V0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5Q2VudGVyUG9pbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzOiBSZWN0YW5nbGVDbGllbnQuZ2V0UG9pbnRzKG5ld1RhcmdldFJlY3RhbmdsZSkgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXJSZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdERyYXdFbGVtZW50W10+KSA9PiB7XG4gICAgICAgICAgICBzbmFwRz8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBzbmFwRyA9IG51bGw7XG4gICAgICAgICAgICBpZiAobmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgIG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXNpemVBY3RpdmVQb2ludHMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxQbGFpdERyYXdFbGVtZW50W10+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIGJvYXJkLmFmdGVyQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBhZnRlckNoYW5nZSgpO1xuICAgICAgICBpZiAoaGFuZGxlRykge1xuICAgICAgICAgICAgaGFuZGxlRy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGhhbmRsZUcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5SZXNpemUoKSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBoYW5kbGVHID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBQbGFpdERyYXdFbGVtZW50W107XG4gICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3RhbmdsZSA9IG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGVcbiAgICAgICAgICAgICAgICA/IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVBY3RpdmVQb2ludHMhKVxuICAgICAgICAgICAgICAgIDogZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBjb3JuZXJzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhib3VuZGluZ1JlY3RhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KGJvdW5kaW5nUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICBjb3JuZXJzID0gcm90YXRlUG9pbnRzKGNvcm5lcnMsIGNlbnRlclBvaW50LCBhbmdsZSkgYXMgW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvcm5lcnMuZm9yRWFjaChjb3JuZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBkcmF3SGFuZGxlKGJvYXJkLCBjb3JuZXIpO1xuICAgICAgICAgICAgICAgIGhhbmRsZUcgJiYgaGFuZGxlRy5hcHBlbmQoZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChoYW5kbGVHKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBib2FyZC5kcmF3QWN0aXZlUmVjdGFuZ2xlID0gKCkgPT4ge1xuICAgICAgICBpZiAobmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZSkge1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZUFjdGl2ZVBvaW50cyEpO1xuICAgICAgICAgICAgcmV0dXJuIGRyYXdSZWN0YW5nbGUoYm9hcmQsIFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgQUNUSVZFX1NUUk9LRV9XSURUSCksIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFDVElWRV9TVFJPS0VfV0lEVEhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkcmF3QWN0aXZlUmVjdGFuZ2xlKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGhhbmRsZUluZGV4OiBudW1iZXIsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3Qgc3ltbWV0cmljSGFuZGxlSW5kZXggPSBnZXRTeW1tZXRyaWNIYW5kbGVJbmRleChib2FyZCwgaGFuZGxlSW5kZXgpO1xuICAgIGNvbnN0IG9yaWdpblBvaW50ID0gZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4KHJlY3RhbmdsZSBhcyBSZWN0YW5nbGVDbGllbnQsIHN5bW1ldHJpY0hhbmRsZUluZGV4KTtcbiAgICBjb25zdCBoYW5kbGVQb2ludCA9IGdldFJlc2l6ZUhhbmRsZVBvaW50QnlJbmRleChyZWN0YW5nbGUgYXMgUmVjdGFuZ2xlQ2xpZW50LCBoYW5kbGVJbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgIGhhbmRsZVBvaW50XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVab29tID0gKFxuICAgIHJlc2l6ZVN0YXJ0QW5kRW5kOiBbUG9pbnQsIFBvaW50XSxcbiAgICByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsXG4gICAgcmVzaXplSGFuZGxlUG9pbnQ6IFBvaW50LFxuICAgIGlzRnJvbUNvcm5lcjogYm9vbGVhbixcbiAgICBpc0FzcGVjdFJhdGlvOiBib29sZWFuXG4pID0+IHtcbiAgICBjb25zdCBbc3RhcnRQb2ludCwgZW5kUG9pbnRdID0gcmVzaXplU3RhcnRBbmRFbmQ7XG4gICAgbGV0IHhab29tID0gMDtcbiAgICBsZXQgeVpvb20gPSAwO1xuICAgIGlmIChpc0Zyb21Db3JuZXIpIHtcbiAgICAgICAgaWYgKGlzQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkT2Zmc2V0WCA9IFBvaW50LmdldE9mZnNldFgoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICAgICAgeFpvb20gPSBub3JtYWxpemVkT2Zmc2V0WCAvIChyZXNpemVIYW5kbGVQb2ludFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdKTtcbiAgICAgICAgICAgIHlab29tID0geFpvb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFggPSBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkT2Zmc2V0WSA9IFBvaW50LmdldE9mZnNldFkoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICAgICAgeFpvb20gPSBub3JtYWxpemVkT2Zmc2V0WCAvIChyZXNpemVIYW5kbGVQb2ludFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdKTtcbiAgICAgICAgICAgIHlab29tID0gbm9ybWFsaXplZE9mZnNldFkgLyAocmVzaXplSGFuZGxlUG9pbnRbMV0gLSByZXNpemVPcmlnaW5Qb2ludFsxXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSBQb2ludC5pc0hvcml6b250YWwocmVzaXplT3JpZ2luUG9pbnQsIHJlc2l6ZUhhbmRsZVBvaW50LCAwLjEpIHx8IGZhbHNlO1xuICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldCA9IGlzSG9yaXpvbnRhbCA/IFBvaW50LmdldE9mZnNldFgoc3RhcnRQb2ludCwgZW5kUG9pbnQpIDogUG9pbnQuZ2V0T2Zmc2V0WShzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgICAgIGxldCBiZW5jaG1hcmtPZmZzZXQgPSBpc0hvcml6b250YWwgPyByZXNpemVIYW5kbGVQb2ludFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdIDogcmVzaXplSGFuZGxlUG9pbnRbMV0gLSByZXNpemVPcmlnaW5Qb2ludFsxXTtcbiAgICAgICAgY29uc3Qgem9vbSA9IG5vcm1hbGl6ZWRPZmZzZXQgLyBiZW5jaG1hcmtPZmZzZXQ7XG4gICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICB4Wm9vbSA9IHpvb207XG4gICAgICAgICAgICB5Wm9vbSA9IHpvb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgeFpvb20gPSB6b29tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5Wm9vbSA9IHpvb207XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgeFpvb20sIHlab29tIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQgPSAocDogUG9pbnQsIHJlc2l6ZU9yaWdpblBvaW50OiBQb2ludCwgeFpvb206IG51bWJlciwgeVpvb206IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG9mZnNldFggPSAocFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdKSAqIHhab29tO1xuICAgIGNvbnN0IG9mZnNldFkgPSAocFsxXSAtIHJlc2l6ZU9yaWdpblBvaW50WzFdKSAqIHlab29tO1xuICAgIHJldHVybiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSBhcyBQb2ludDtcbn07XG5cbi8qKlxuICogMS4gUm90YXRlIDkwwrBcbiAqIDIuIFNjYWxlIGJhc2VkIG9uIHRoZSByb3RhdGVkIHBvaW50c1xuICogMy4gUmV2ZXJzZSByb3RhdGUgdGhlIHNjYWxlZCBwb2ludHMgYnkgOTDCsFxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplUG9pbnRzQnlPdGhlcndpc2VBeGlzID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIHBvaW50czogUG9pbnRbXSxcbiAgICByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsXG4gICAgeFpvb206IG51bWJlcixcbiAgICB5Wm9vbTogbnVtYmVyXG4pID0+IHtcbiAgICBjb25zdCBjdXJyZW50UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyk7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIGN1cnJlbnRSZWN0YW5nbGUsIHsgc3Ryb2tlOiAnYmxhY2snIH0pO1xuICAgIGxldCByZXN1bHRQb2ludHMgPSBwb2ludHM7XG4gICAgcmVzdWx0UG9pbnRzID0gcm90YXRlUG9pbnRzKHJlc3VsdFBvaW50cywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KGN1cnJlbnRSZWN0YW5nbGUpLCAoMSAvIDIpICogTWF0aC5QSSk7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIHJlc3VsdFBvaW50cywgeyBzdHJva2U6ICdibHVlJyB9KTtcbiAgICByZXN1bHRQb2ludHMgPSByZXN1bHRQb2ludHMubWFwKHAgPT4ge1xuICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgcmVzaXplT3JpZ2luUG9pbnQsIHhab29tLCB5Wm9vbSk7XG4gICAgfSk7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIHJlc3VsdFBvaW50cyk7XG4gICAgY29uc3QgbmV3UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc3VsdFBvaW50cyk7XG4gICAgcmV0dXJuIHJvdGF0ZVBvaW50cyhyZXN1bHRQb2ludHMsIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChuZXdSZWN0YW5nbGUpLCAtKDEgLyAyKSAqIE1hdGguUEkpO1xufTtcbiJdfQ==
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILFVBQVUsRUFDVixLQUFLLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBQ1Asc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixzQkFBc0IsRUFFekIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpELE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDO0FBQ25ELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBU3RELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBaUI7SUFDNUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxH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LENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNsRyxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNoQyxPQUFPLDZCQUE2QixDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFDSCxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUUsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUmVzaXplUmVmLFxuICAgIFJlc2l6ZVN0YXRlLFxuICAgIFdpdGhSZXNpemVPcHRpb25zLFxuICAgIGRyYXdIYW5kbGUsXG4gICAgZ2V0Rmlyc3RUZXh0TWFuYWdlLFxuICAgIGdldEluZGV4QnlSZXNpemVIYW5kbGUsXG4gICAgZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4LFxuICAgIGdldFN5bW1ldHJpY0hhbmRsZUluZGV4LFxuICAgIGlzQ29ybmVySGFuZGxlLFxuICAgIHdpdGhSZXNpemUsXG4gICAgcmVzZXRQb2ludHNBZnRlclJlc2l6ZSxcbiAgICBub3JtYWxpemVTaGFwZVBvaW50c1xufSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQb2ludCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgVHJhbnNmb3JtcyxcbiAgICBjcmVhdGVHLFxuICAgIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBpc1NlbGVjdGlvbk1vdmluZyxcbiAgICBnZXRTZWxlY3Rpb25BbmdsZSxcbiAgICByb3RhdGVQb2ludHMsXG4gICAgcm90YXRlZERhdGFQb2ludHMsXG4gICAgY3JlYXRlRGVidWdHZW5lcmF0b3IsXG4gICAgaGFzVmFsaWRBbmdsZSxcbiAgICBpc0F4aXNDaGFuZ2VkQnlBbmdsZSxcbiAgICBkcmF3UmVjdGFuZ2xlLFxuICAgIEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICBQYXRoXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRIaXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWYgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRTbmFwUmVzaXppbmdSZWZPcHRpb25zLCBnZXRTbmFwUmVzaXppbmdSZWYgfSBmcm9tICcuLi91dGlscy9zbmFwLXJlc2l6aW5nJztcbmltcG9ydCB7IGlzR2VvbWV0cnlJbmNsdWRlVGV4dCB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgZGVidWdLZXkgPSAnZGVidWc6cGxhaXQ6cmVzaXplLWZvci1yb3RhdGlvbic7XG5jb25zdCBkZWJ1Z0dlbmVyYXRvciA9IGNyZWF0ZURlYnVnR2VuZXJhdG9yKGRlYnVnS2V5KTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrUm90YXRpb25SZWYge1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBuZXdDZW50ZXJQb2ludDogUG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRHJhd1Jlc2l6ZShib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgYWZ0ZXJDaGFuZ2UsIGRyYXdBY3RpdmVSZWN0YW5nbGUgfSA9IGJvYXJkO1xuICAgIGxldCBzbmFwRzogU1ZHR0VsZW1lbnQgfCBudWxsO1xuICAgIGxldCBoYW5kbGVHOiBTVkdHRWxlbWVudCB8IG51bGw7XG4gICAgbGV0IG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzaXplQWN0aXZlUG9pbnRzOiBQb2ludFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCBjYW5SZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPiAxICYmIGVsZW1lbnRzLmV2ZXJ5KGVsID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudChlbCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdERyYXdFbGVtZW50W10+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWVsZW1lbnRzJyxcbiAgICAgICAgY2FuUmVzaXplLFxuICAgICAgICBoaXRUZXN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoZWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmID0gZ2V0SGl0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmKGJvYXJkLCBib3VuZGluZ1JlY3RhbmdsZSwgcG9pbnQsIGFuZ2xlKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlOiBib3VuZGluZ1JlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBoYW5kbGVSZWYuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogaGFuZGxlUmVmLmN1cnNvckNsYXNzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0RHJhd0VsZW1lbnRbXT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBpc0Zyb21Db3JuZXIgPSBpc0Nvcm5lckhhbmRsZShib2FyZCwgcmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCBpc0FzcGVjdFJhdGlvID0gcmVzaXplU3RhdGUuaXNTaGlmdCB8fCBpc0Zyb21Db3JuZXI7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChyZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUocmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCB7IG9yaWdpblBvaW50LCBoYW5kbGVQb2ludCB9ID0gZ2V0UmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludChib2FyZCwgaGFuZGxlSW5kZXgsIHJlc2l6ZVJlZi5yZWN0YW5nbGUhKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUocmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGJ1bGtSb3RhdGlvblJlZjogQnVsa1JvdGF0aW9uUmVmIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgYnVsa1JvdGF0aW9uUmVmID0ge1xuICAgICAgICAgICAgICAgICAgICBhbmdsZTogYW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IDAsXG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRlclBvaW50OiBbMCwgMF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyb3RhdGVkU3RhcnRQb2ludCwgcm90YXRlRW5kUG9pbnRdID0gcm90YXRlUG9pbnRzKFxuICAgICAgICAgICAgICAgICAgICBbcmVzaXplU3RhdGUuc3RhcnRQb2ludCwgcmVzaXplU3RhdGUuZW5kUG9pbnRdLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgLWJ1bGtSb3RhdGlvblJlZi5hbmdsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmVzaXplU3RhdGUuc3RhcnRQb2ludCA9IHJvdGF0ZWRTdGFydFBvaW50O1xuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLmVuZFBvaW50ID0gcm90YXRlRW5kUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNpemVTbmFwUmVmT3B0aW9ucyA9IGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMoXG4gICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgcmVzaXplUmVmLFxuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVBvaW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpc0FzcGVjdFJhdGlvLFxuICAgICAgICAgICAgICAgIGlzRnJvbUNvcm5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVNuYXBSZWYgPSBnZXRTbmFwUmVzaXppbmdSZWYoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50LCByZXNpemVTbmFwUmVmT3B0aW9ucyk7XG4gICAgICAgICAgICByZXNpemVBY3RpdmVQb2ludHMgPSByZXNpemVTbmFwUmVmLmFjdGl2ZVBvaW50cztcbiAgICAgICAgICAgIHNuYXBHID0gcmVzaXplU25hcFJlZi5zbmFwRztcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChzbmFwRyk7XG5cbiAgICAgICAgICAgIGlmIChidWxrUm90YXRpb25SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ0JveENvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMocmVzaXplUmVmLnJlY3RhbmdsZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyA9IGJvdW5kaW5nQm94Q29ybmVyUG9pbnRzLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVTbmFwUmVmLnhab29tLCByZXNpemVTbmFwUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZGluZ0JveCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVkQm91bmRpbmdCb3hDb3JuZXJQb2ludHMpO1xuXG4gICAgICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIG5ld0JvdW5kaW5nQm94LCB7IHN0cm9rZTogJ2JsdWUnIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Qm91bmRpbmdCb3hDZW50ZXIgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQobmV3Qm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTmV3Qm91bmRpbmdCb3hQb2ludHMgPSByZXNldFBvaW50c0FmdGVyUmVzaXplKFxuICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYm91bmRpbmdCb3hDb3JuZXJQb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzaXplZEJvdW5kaW5nQm94Q29ybmVyUG9pbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIG5ld0JvdW5kaW5nQm94Q2VudGVyLFxuICAgICAgICAgICAgICAgICAgICBidWxrUm90YXRpb25SZWYuYW5nbGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYWRqdXN0ZWROZXdCb3VuZGluZ0JveFBvaW50cykpO1xuICAgICAgICAgICAgICAgIGJ1bGtSb3RhdGlvblJlZiA9IE9iamVjdC5hc3NpZ24oYnVsa1JvdGF0aW9uUmVmLCB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IG5ld0NlbnRlclswXSAtIG5ld0JvdW5kaW5nQm94Q2VudGVyWzBdLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiBuZXdDZW50ZXJbMV0gLSBuZXdCb3VuZGluZ0JveENlbnRlclsxXSxcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudGVyUG9pbnQ6IG5ld0NlbnRlclxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIGFkanVzdGVkTmV3Qm91bmRpbmdCb3hQb2ludHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNpemVSZWYuZWxlbWVudC5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50cztcbiAgICAgICAgICAgICAgICBpZiAoYnVsa1JvdGF0aW9uUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VkUG9pbnRzID0gcm90YXRlZERhdGFQb2ludHModGFyZ2V0LnBvaW50cywgY2VudGVyUG9pbnQsIC1idWxrUm90YXRpb25SZWYuYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSByZXZlcnNlZFBvaW50cy5tYXAoKHA6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgb3JpZ2luUG9pbnQsIHJlc2l6ZVNuYXBSZWYueFpvb20sIHJlc2l6ZVNuYXBSZWYueVpvb20pO1xuICAgICAgICAgICAgICAgICAgICB9KSBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0VGFyZ2V0UG9pbnRzID0gcG9pbnRzLm1hcChwID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBbMF0gKyBidWxrUm90YXRpb25SZWYhLm9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwWzFdICsgYnVsa1JvdGF0aW9uUmVmIS5vZmZzZXRZXG4gICAgICAgICAgICAgICAgICAgIF0pIGFzIFBvaW50W107XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKGFkanVzdFRhcmdldFBvaW50cywgYnVsa1JvdGF0aW9uUmVmLm5ld0NlbnRlclBvaW50LCBidWxrUm90YXRpb25SZWYuYW5nbGUpIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkgJiYgaXNBeGlzQ2hhbmdlZEJ5QW5nbGUodGFyZ2V0LmFuZ2xlISkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IGdldFJlc2l6ZVBvaW50c0J5T3RoZXJ3aXNlQXhpcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVNuYXBSZWYueFpvb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU25hcFJlZi55Wm9vbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHRhcmdldC5wb2ludHMubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChwLCBvcmlnaW5Qb2ludCwgcmVzaXplU25hcFJlZi54Wm9vbSwgcmVzaXplU25hcFJlZi55Wm9vbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNHZW9tZXRyeUluY2x1ZGVUZXh0KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVpZ2h0OiB0ZXh0SGVpZ2h0IH0gPSBnZXRGaXJzdFRleHRNYW5hZ2UodGFyZ2V0KS5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5yZXNpemVHZW9tZXRyeShib2FyZCwgcG9pbnRzIGFzIFtQb2ludCwgUG9pbnRdLCB0ZXh0SGVpZ2h0LCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IG5vcm1hbGl6ZVNoYXBlUG9pbnRzKHBvaW50cyBhcyBbUG9pbnQsIFBvaW50XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50cyB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGltYWdlIGVsZW1lbnQgZG9lcyBub3QgZm9sbG93IHRoZSByZXNpemUsIGJ1dCBtb3ZlcyBiYXNlZCBvbiB0aGUgY2VudGVyIHBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHRhcmdldC5wb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQodGFyZ2V0UmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlclBvaW50ID0gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU25hcFJlZi54Wm9vbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTbmFwUmVmLnlab29tXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGFyZ2V0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5Q2VudGVyUG9pbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzOiBSZWN0YW5nbGVDbGllbnQuZ2V0UG9pbnRzKG5ld1RhcmdldFJlY3RhbmdsZSkgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXJSZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdERyYXdFbGVtZW50W10+KSA9PiB7XG4gICAgICAgICAgICBzbmFwRz8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBzbmFwRyA9IG51bGw7XG4gICAgICAgICAgICBpZiAobmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgIG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXNpemVBY3RpdmVQb2ludHMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxQbGFpdERyYXdFbGVtZW50W10+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIGJvYXJkLmFmdGVyQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBhZnRlckNoYW5nZSgpO1xuICAgICAgICBpZiAoaGFuZGxlRykge1xuICAgICAgICAgICAgaGFuZGxlRy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGhhbmRsZUcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5SZXNpemUoKSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBoYW5kbGVHID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBQbGFpdERyYXdFbGVtZW50W107XG4gICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3RhbmdsZSA9IG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGVcbiAgICAgICAgICAgICAgICA/IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVBY3RpdmVQb2ludHMhKVxuICAgICAgICAgICAgICAgIDogZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBjb3JuZXJzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhib3VuZGluZ1JlY3RhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KGJvdW5kaW5nUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICBjb3JuZXJzID0gcm90YXRlUG9pbnRzKGNvcm5lcnMsIGNlbnRlclBvaW50LCBhbmdsZSkgYXMgW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvcm5lcnMuZm9yRWFjaChjb3JuZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBkcmF3SGFuZGxlKGJvYXJkLCBjb3JuZXIpO1xuICAgICAgICAgICAgICAgIGhhbmRsZUcgJiYgaGFuZGxlRy5hcHBlbmQoZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChoYW5kbGVHKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBib2FyZC5kcmF3QWN0aXZlUmVjdGFuZ2xlID0gKCkgPT4ge1xuICAgICAgICBpZiAobmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZSkge1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZUFjdGl2ZVBvaW50cyEpO1xuICAgICAgICAgICAgcmV0dXJuIGRyYXdSZWN0YW5nbGUoYm9hcmQsIFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgQUNUSVZFX1NUUk9LRV9XSURUSCksIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFDVElWRV9TVFJPS0VfV0lEVEhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkcmF3QWN0aXZlUmVjdGFuZ2xlKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGhhbmRsZUluZGV4OiBudW1iZXIsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3Qgc3ltbWV0cmljSGFuZGxlSW5kZXggPSBnZXRTeW1tZXRyaWNIYW5kbGVJbmRleChib2FyZCwgaGFuZGxlSW5kZXgpO1xuICAgIGNvbnN0IG9yaWdpblBvaW50ID0gZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4KHJlY3RhbmdsZSBhcyBSZWN0YW5nbGVDbGllbnQsIHN5bW1ldHJpY0hhbmRsZUluZGV4KTtcbiAgICBjb25zdCBoYW5kbGVQb2ludCA9IGdldFJlc2l6ZUhhbmRsZVBvaW50QnlJbmRleChyZWN0YW5nbGUgYXMgUmVjdGFuZ2xlQ2xpZW50LCBoYW5kbGVJbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgIGhhbmRsZVBvaW50XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVab29tID0gKFxuICAgIHJlc2l6ZVN0YXJ0QW5kRW5kOiBbUG9pbnQsIFBvaW50XSxcbiAgICByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsXG4gICAgcmVzaXplSGFuZGxlUG9pbnQ6IFBvaW50LFxuICAgIGlzRnJvbUNvcm5lcjogYm9vbGVhbixcbiAgICBpc0FzcGVjdFJhdGlvOiBib29sZWFuXG4pID0+IHtcbiAgICBjb25zdCBbc3RhcnRQb2ludCwgZW5kUG9pbnRdID0gcmVzaXplU3RhcnRBbmRFbmQ7XG4gICAgbGV0IHhab29tID0gMDtcbiAgICBsZXQgeVpvb20gPSAwO1xuICAgIGlmIChpc0Zyb21Db3JuZXIpIHtcbiAgICAgICAgaWYgKGlzQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkT2Zmc2V0WCA9IFBvaW50LmdldE9mZnNldFgoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICAgICAgeFpvb20gPSBub3JtYWxpemVkT2Zmc2V0WCAvIChyZXNpemVIYW5kbGVQb2ludFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdKTtcbiAgICAgICAgICAgIHlab29tID0geFpvb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFggPSBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkT2Zmc2V0WSA9IFBvaW50LmdldE9mZnNldFkoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICAgICAgeFpvb20gPSBub3JtYWxpemVkT2Zmc2V0WCAvIChyZXNpemVIYW5kbGVQb2ludFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdKTtcbiAgICAgICAgICAgIHlab29tID0gbm9ybWFsaXplZE9mZnNldFkgLyAocmVzaXplSGFuZGxlUG9pbnRbMV0gLSByZXNpemVPcmlnaW5Qb2ludFsxXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSBQb2ludC5pc0hvcml6b250YWwocmVzaXplT3JpZ2luUG9pbnQsIHJlc2l6ZUhhbmRsZVBvaW50LCAwLjEpIHx8IGZhbHNlO1xuICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldCA9IGlzSG9yaXpvbnRhbCA/IFBvaW50LmdldE9mZnNldFgoc3RhcnRQb2ludCwgZW5kUG9pbnQpIDogUG9pbnQuZ2V0T2Zmc2V0WShzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgICAgIGxldCBiZW5jaG1hcmtPZmZzZXQgPSBpc0hvcml6b250YWwgPyByZXNpemVIYW5kbGVQb2ludFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdIDogcmVzaXplSGFuZGxlUG9pbnRbMV0gLSByZXNpemVPcmlnaW5Qb2ludFsxXTtcbiAgICAgICAgY29uc3Qgem9vbSA9IG5vcm1hbGl6ZWRPZmZzZXQgLyBiZW5jaG1hcmtPZmZzZXQ7XG4gICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICB4Wm9vbSA9IHpvb207XG4gICAgICAgICAgICB5Wm9vbSA9IHpvb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgeFpvb20gPSB6b29tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5Wm9vbSA9IHpvb207XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgeFpvb20sIHlab29tIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQgPSAocDogUG9pbnQsIHJlc2l6ZU9yaWdpblBvaW50OiBQb2ludCwgeFpvb206IG51bWJlciwgeVpvb206IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG9mZnNldFggPSAocFswXSAtIHJlc2l6ZU9yaWdpblBvaW50WzBdKSAqIHhab29tO1xuICAgIGNvbnN0IG9mZnNldFkgPSAocFsxXSAtIHJlc2l6ZU9yaWdpblBvaW50WzFdKSAqIHlab29tO1xuICAgIHJldHVybiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSBhcyBQb2ludDtcbn07XG5cbi8qKlxuICogMS4gUm90YXRlIDkwwrBcbiAqIDIuIFNjYWxlIGJhc2VkIG9uIHRoZSByb3RhdGVkIHBvaW50c1xuICogMy4gUmV2ZXJzZSByb3RhdGUgdGhlIHNjYWxlZCBwb2ludHMgYnkgOTDCsFxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplUG9pbnRzQnlPdGhlcndpc2VBeGlzID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIHBvaW50czogUG9pbnRbXSxcbiAgICByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsXG4gICAgeFpvb206IG51bWJlcixcbiAgICB5Wm9vbTogbnVtYmVyXG4pID0+IHtcbiAgICBjb25zdCBjdXJyZW50UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyk7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIGN1cnJlbnRSZWN0YW5nbGUsIHsgc3Ryb2tlOiAnYmxhY2snIH0pO1xuICAgIGxldCByZXN1bHRQb2ludHMgPSBwb2ludHM7XG4gICAgcmVzdWx0UG9pbnRzID0gcm90YXRlUG9pbnRzKHJlc3VsdFBvaW50cywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KGN1cnJlbnRSZWN0YW5nbGUpLCAoMSAvIDIpICogTWF0aC5QSSk7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIHJlc3VsdFBvaW50cywgeyBzdHJva2U6ICdibHVlJyB9KTtcbiAgICByZXN1bHRQb2ludHMgPSByZXN1bHRQb2ludHMubWFwKHAgPT4ge1xuICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgcmVzaXplT3JpZ2luUG9pbnQsIHhab29tLCB5Wm9vbSk7XG4gICAgfSk7XG4gICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIHJlc3VsdFBvaW50cyk7XG4gICAgY29uc3QgbmV3UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc3VsdFBvaW50cyk7XG4gICAgcmV0dXJuIHJvdGF0ZVBvaW50cyhyZXN1bHRQb2ludHMsIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChuZXdSZWN0YW5nbGUpLCAtKDEgLyAyKSAqIE1hdGguUEkpO1xufTtcbiJdfQ==
@@ -1,27 +1,27 @@
1
1
  import { RectangleClient, getSelectedElements } from '@plait/core';
2
2
  import { GeometryComponent } from '../geometry.component';
3
- import { LineComponent } from '../line.component';
3
+ import { ArrowLineComponent } from '../arrow-line.component';
4
4
  import { PlaitDrawElement } from '../interfaces';
5
5
  import { withDrawHotkey } from './with-draw-hotkey';
6
6
  import { withGeometryCreateByDrawing, withGeometryCreateByDrag } from './with-geometry-create';
7
7
  import { withDrawFragment } from './with-draw-fragment';
8
- import { withLineCreateByDraw } from './with-line-create';
8
+ import { withArrowLineCreateByDraw } from './with-arrow-line-create';
9
9
  import { withGeometryResize } from './with-geometry-resize';
10
- import { withLineResize } from './with-line-resize';
11
- import { withLineBoundReaction } from './with-line-bound-reaction';
12
- import { withLineText } from './with-line-text';
10
+ import { withArrowLineResize } from './with-arrow-line-resize';
11
+ import { withArrowLineBoundReaction } from './with-arrow-line-bound-reaction';
12
+ import { withArrowLineText } from './with-arrow-line-text';
13
13
  import { ImageComponent } from '../image.component';
14
- import { withLineAutoCompleteReaction } from './with-line-auto-complete-reaction';
15
- import { withLineAutoComplete } from './with-line-auto-complete';
16
- import { withLineTextMove } from './with-line-text-move';
14
+ import { withArrowLineAutoCompleteReaction } from './with-arrow-line-auto-complete-reaction';
15
+ import { withArrowLineAutoComplete } from './with-arrow-line-auto-complete';
16
+ import { withArrowLineTextMove } from './with-arrow-line-text-move';
17
17
  import { withDrawResize } from './with-draw-resize';
18
- import { isHitDrawElement, isHitElementInside, isRectangleHitDrawElement } from '../utils/hit';
19
- import { getLinePoints, getLineTextRectangle } from '../utils/line/line-basic';
18
+ import { getDrawHitElement, isHitDrawElement, isHitElementInside, isRectangleHitDrawElement } from '../utils/hit';
19
+ import { getArrowLinePoints, getArrowLineTextRectangle } from '../utils/arrow-line/arrow-line-basic';
20
20
  import { withDrawRotate } from './with-draw-rotate';
21
21
  import { withTable } from './with-table';
22
22
  import { withSwimlane } from './with-swimlane';
23
23
  export const withDraw = (board) => {
24
- const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment } = board;
24
+ const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment, getHitElement } = board;
25
25
  board.drawElement = (context) => {
26
26
  if (PlaitDrawElement.isGeometry(context.element)) {
27
27
  if (PlaitDrawElement.isUML(context.element)) {
@@ -29,8 +29,8 @@ export const withDraw = (board) => {
29
29
  }
30
30
  return GeometryComponent;
31
31
  }
32
- else if (PlaitDrawElement.isLine(context.element)) {
33
- return LineComponent;
32
+ else if (PlaitDrawElement.isArrowLine(context.element)) {
33
+ return ArrowLineComponent;
34
34
  }
35
35
  else if (PlaitDrawElement.isImage(context.element)) {
36
36
  return ImageComponent;
@@ -41,10 +41,10 @@ export const withDraw = (board) => {
41
41
  if (PlaitDrawElement.isGeometry(element)) {
42
42
  return RectangleClient.getRectangleByPoints(element.points);
43
43
  }
44
- if (PlaitDrawElement.isLine(element)) {
45
- const points = getLinePoints(board, element);
44
+ if (PlaitDrawElement.isArrowLine(element)) {
45
+ const points = getArrowLinePoints(board, element);
46
46
  const lineTextRectangles = element.texts.map((text, index) => {
47
- const rectangle = getLineTextRectangle(board, element, index);
47
+ const rectangle = getArrowLineTextRectangle(board, element, index);
48
48
  return rectangle;
49
49
  });
50
50
  const linePointsRectangle = RectangleClient.getRectangleByPoints(points);
@@ -69,6 +69,13 @@ export const withDraw = (board) => {
69
69
  }
70
70
  return isHit(element, point);
71
71
  };
72
+ board.getHitElement = elements => {
73
+ const isDrawElements = elements.every(item => PlaitDrawElement.isDrawElement(item));
74
+ if (isDrawElements) {
75
+ return getDrawHitElement(board, elements);
76
+ }
77
+ return getHitElement(elements);
78
+ };
72
79
  board.isInsidePoint = (element, point) => {
73
80
  const result = isHitElementInside(board, element, point);
74
81
  if (result !== null) {
@@ -83,7 +90,7 @@ export const withDraw = (board) => {
83
90
  if (PlaitDrawElement.isImage(element)) {
84
91
  return true;
85
92
  }
86
- if (PlaitDrawElement.isLine(element)) {
93
+ if (PlaitDrawElement.isArrowLine(element)) {
87
94
  const selectedElements = getSelectedElements(board);
88
95
  const isSelected = (boundId) => {
89
96
  return !!selectedElements.find(value => value.id === boundId);
@@ -109,7 +116,7 @@ export const withDraw = (board) => {
109
116
  };
110
117
  board.getRelatedFragment = (elements, originData) => {
111
118
  const selectedElements = originData?.length ? originData : getSelectedElements(board);
112
- const lineElements = board.children.filter(element => PlaitDrawElement.isLine(element));
119
+ const lineElements = board.children.filter(element => PlaitDrawElement.isArrowLine(element));
113
120
  const activeLines = lineElements.filter(line => {
114
121
  const source = selectedElements.find(element => element.id === line.source.boundId);
115
122
  const target = selectedElements.find(element => element.id === line.target.boundId);
@@ -118,6 +125,6 @@ export const withDraw = (board) => {
118
125
  });
119
126
  return getRelatedFragment([...elements, ...activeLines], originData);
120
127
  };
121
- return withSwimlane(withTable(withDrawResize(withLineAutoCompleteReaction(withLineBoundReaction(withLineResize(withLineTextMove(withLineText(withGeometryResize(withDrawRotate(withLineCreateByDraw(withLineAutoComplete(withGeometryCreateByDrag(withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board))))))))))))))));
128
+ return withSwimlane(withTable(withDrawResize(withArrowLineAutoCompleteReaction(withArrowLineBoundReaction(withArrowLineResize(withArrowLineTextMove(withArrowLineText(withGeometryResize(withDrawRotate(withArrowLineCreateByDraw(withArrowLineAutoComplete(withGeometryCreateByDrag(withGeometryCreateByDrawing(withDrawFragment(withDrawHotkey(board))))))))))))))));
122
129
  };
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWRyYXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4RCxlQUFlLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9C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cUJBQXFCLENBQ2pCLGNBQWMsQ0FDVixnQkFBZ0IsQ0FDWixZQUFZLENBQ1Isa0JBQWtCLENBQ2QsY0FBYyxDQUNWLG9CQUFvQixDQUNoQixvQkFBb0IsQ0FDaEIsd0JBQXdCLENBQ3BCLDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQ0osQ0FDSixDQUNKLENBQ0osQ0FDSixDQUNKLENBQ0osQ0FDSixDQUNKLENBQ0osQ0FDSixDQUNKLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIFNlbGVjdGlvbiwgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEdlb21ldHJ5Q29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvbWV0cnkuY29tcG9uZW50JztcbmltcG9ydCB7IExpbmVDb21wb25lbnQgfSBmcm9tICcuLi9saW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFpdERyYXdFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB3aXRoRHJhd0hvdGtleSB9IGZyb20gJy4vd2l0aC1kcmF3LWhvdGtleSc7XG5pbXBvcnQgeyB3aXRoR2VvbWV0cnlDcmVhdGVCeURyYXdpbmcsIHdpdGhHZW9tZXRyeUNyZWF0ZUJ5RHJhZyB9IGZyb20gJy4vd2l0aC1nZW9tZXRyeS1jcmVhdGUnO1xuaW1wb3J0IHsgd2l0aERyYXdGcmFnbWVudCB9IGZyb20gJy4vd2l0aC1kcmF3LWZyYWdtZW50JztcbmltcG9ydCB7IHdpdGhMaW5lQ3JlYXRlQnlEcmF3IH0gZnJvbSAnLi93aXRoLWxpbmUtY3JlYXRlJztcbmltcG9ydCB7IHdpdGhHZW9tZXRyeVJlc2l6ZSB9IGZyb20gJy4vd2l0aC1nZW9tZXRyeS1yZXNpemUnO1xuaW1wb3J0IHsgd2l0aExpbmVSZXNpemUgfSBmcm9tICcuL3dpdGgtbGluZS1yZXNpemUnO1xuaW1wb3J0IHsgd2l0aExpbmVCb3VuZFJlYWN0aW9uIH0gZnJvbSAnLi93aXRoLWxpbmUtYm91bmQtcmVhY3Rpb24nO1xuaW1wb3J0IHsgd2l0aExpbmVUZXh0IH0gZnJvbSAnLi93aXRoLWxpbmUtdGV4dCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB3aXRoTGluZUF1dG9Db21wbGV0ZVJlYWN0aW9uIH0gZnJvbSAnLi93aXRoLWxpbmUtYXV0by1jb21wbGV0ZS1yZWFjdGlvbic7XG5pbXBvcnQgeyB3aXRoTGluZUF1dG9Db21wbGV0ZSB9IGZyb20gJy4vd2l0aC1saW5lLWF1dG8tY29tcGxldGUnO1xuaW1wb3J0IHsgd2l0aExpbmVUZXh0TW92ZSB9IGZyb20gJy4vd2l0aC1saW5lLXRleHQtbW92ZSc7XG5pbXBvcnQgeyB3aXRoRHJhd1Jlc2l6ZSB9IGZyb20gJy4vd2l0aC1kcmF3LXJlc2l6ZSc7XG5pbXBvcnQgeyBpc0hpdERyYXdFbGVtZW50LCBpc0hpdEVsZW1lbnRJbnNpZGUsIGlzUmVjdGFuZ2xlSGl0RHJhd0VsZW1lbnQgfSBmcm9tICcuLi91dGlscy9oaXQnO1xuaW1wb3J0IHsgZ2V0TGluZVBvaW50cywgZ2V0TGluZVRleHRSZWN0YW5nbGUgfSBmcm9tICcuLi91dGlscy9saW5lL2xpbmUtYmFzaWMnO1xuaW1wb3J0IHsgd2l0aERyYXdSb3RhdGUgfSBmcm9tICcuL3dpdGgtZHJhdy1yb3RhdGUnO1xuaW1wb3J0IHsgd2l0aFRhYmxlIH0gZnJvbSAnLi93aXRoLXRhYmxlJztcbmltcG9ydCB7IHdpdGhTd2ltbGFuZSB9IGZyb20gJy4vd2l0aC1zd2ltbGFuZSc7XG5cbmV4cG9ydCBjb25zdCB3aXRoRHJhdyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgZHJhd0VsZW1lbnQsIGdldFJlY3RhbmdsZSwgaXNSZWN0YW5nbGVIaXQsIGlzSGl0LCBpc0luc2lkZVBvaW50LCBpc01vdmFibGUsIGlzQWxpZ24sIGdldFJlbGF0ZWRGcmFnbWVudCB9ID0gYm9hcmQ7XG5cbiAgICBib2FyZC5kcmF3RWxlbWVudCA9IChjb250ZXh0OiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoY29udGV4dC5lbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNVTUwoY29udGV4dC5lbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBHZW9tZXRyeUNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBHZW9tZXRyeUNvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChQbGFpdERyYXdFbGVtZW50LmlzTGluZShjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gTGluZUNvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoY29udGV4dC5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIEltYWdlQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkcmF3RWxlbWVudChjb250ZXh0KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZ2V0UmVjdGFuZ2xlID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbGluZVRleHRSZWN0YW5nbGVzID0gZWxlbWVudC50ZXh0cy5tYXAoKHRleHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0TGluZVRleHRSZWN0YW5nbGUoYm9hcmQsIGVsZW1lbnQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjdGFuZ2xlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lUG9pbnRzUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyk7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEJvdW5kaW5nUmVjdGFuZ2xlKFtsaW5lUG9pbnRzUmVjdGFuZ2xlLCAuLi5saW5lVGV4dFJlY3RhbmdsZXNdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc1JlY3RhbmdsZUhpdCA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUmVjdGFuZ2xlSGl0RHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnQsIHNlbGVjdGlvbik7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ2xlSGl0KGVsZW1lbnQsIHNlbGVjdGlvbik7XG4gICAgfTtcblxuICAgIGJvYXJkLmlzSGl0ID0gKGVsZW1lbnQsIHBvaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzSGl0RHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnQsIHBvaW50KTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNIaXQoZWxlbWVudCwgcG9pbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc0luc2lkZVBvaW50ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzSGl0RWxlbWVudEluc2lkZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0luc2lkZVBvaW50KGVsZW1lbnQsIHBvaW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaXNNb3ZhYmxlID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSAoYm91bmRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhc2VsZWN0ZWRFbGVtZW50cy5maW5kKHZhbHVlID0+IHZhbHVlLmlkID09PSBib3VuZElkKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQuc291cmNlLmJvdW5kSWQgJiYgIWVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNvdXJjZS5ib3VuZElkICYmIGlzU2VsZWN0ZWQoZWxlbWVudC5zb3VyY2UuYm91bmRJZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQgJiYgaXNTZWxlY3RlZChlbGVtZW50LnRhcmdldC5ib3VuZElkKSAmJiBzZWxlY3RlZEVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTW92YWJsZShlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaXNBbGlnbiA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSB8fCBQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FsaWduKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nZXRSZWxhdGVkRnJhZ21lbnQgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5EYXRhPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IG9yaWdpbkRhdGE/Lmxlbmd0aCA/IG9yaWdpbkRhdGEgOiBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgY29uc3QgbGluZUVsZW1lbnRzID0gYm9hcmQuY2hpbGRyZW4uZmlsdGVyKGVsZW1lbnQgPT4gUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCkpO1xuICAgICAgICBjb25zdCBhY3RpdmVMaW5lcyA9IGxpbmVFbGVtZW50cy5maWx0ZXIobGluZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzZWxlY3RlZEVsZW1lbnRzLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmlkID09PSBsaW5lLnNvdXJjZS5ib3VuZElkKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHNlbGVjdGVkRWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IGxpbmUudGFyZ2V0LmJvdW5kSWQpO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMobGluZSk7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlICYmIHRhcmdldCAmJiAhaXNTZWxlY3RlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBnZXRSZWxhdGVkRnJhZ21lbnQoWy4uLmVsZW1lbnRzLCAuLi5hY3RpdmVMaW5lc10sIG9yaWdpbkRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gd2l0aFN3aW1sYW5lKFxuICAgICAgICB3aXRoVGFibGUoXG4gICAgICAgICAgICB3aXRoRHJhd1Jlc2l6ZShcbiAgICAgICAgICAgICAgICB3aXRoTGluZUF1dG9Db21wbGV0ZVJlYWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICB3aXRoTGluZUJvdW5kUmVhY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoTGluZVJlc2l6ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoTGluZVRleHRNb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoTGluZVRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoR2VvbWV0cnlSZXNpemUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aERyYXdSb3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhMaW5lQ3JlYXRlQnlEcmF3KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aExpbmVBdXRvQ29tcGxldGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEdlb21ldHJ5Q3JlYXRlQnlEcmFnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoR2VvbWV0cnlDcmVhdGVCeURyYXdpbmcod2l0aERyYXdGcmFnbWVudCh3aXRoRHJhd0hvdGtleShib2FyZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG59O1xuIl19
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWRyYXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4RCxlQUFlLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxN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QUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsT0FBTyxNQUFNLElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0lBRUYsT0FBTyxZQUFZLENBQ2YsU0FBUyxDQUNMLGNBQWMsQ0FDVixpQ0FBaUMsQ0FDN0IsMEJBQTBCLENBQ3RCLG1CQUFtQixDQUNmLHFCQUFxQixDQUNqQixpQkFBaUIsQ0FDYixrQkFBa0IsQ0FDZCxjQUFjLENBQ1YseUJBQXlCLENBQ3JCLHlCQUF5QixDQUNyQix3QkFBd0IsQ0FDcEIsMkJBQTJCLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDdkUsQ0FDSixDQUNKLENBQ0osQ0FDSixDQUNKLENBQ0osQ0FDSixDQUNKLENBQ0osQ0FDSixDQUNKLENBQ0osQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgU2VsZWN0aW9uLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR2VvbWV0cnlDb21wb25lbnQgfSBmcm9tICcuLi9nZW9tZXRyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXJyb3dMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vYXJyb3ctbGluZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgd2l0aERyYXdIb3RrZXkgfSBmcm9tICcuL3dpdGgtZHJhdy1ob3RrZXknO1xuaW1wb3J0IHsgd2l0aEdlb21ldHJ5Q3JlYXRlQnlEcmF3aW5nLCB3aXRoR2VvbWV0cnlDcmVhdGVCeURyYWcgfSBmcm9tICcuL3dpdGgtZ2VvbWV0cnktY3JlYXRlJztcbmltcG9ydCB7IHdpdGhEcmF3RnJhZ21lbnQgfSBmcm9tICcuL3dpdGgtZHJhdy1mcmFnbWVudCc7XG5pbXBvcnQgeyB3aXRoQXJyb3dMaW5lQ3JlYXRlQnlEcmF3IH0gZnJvbSAnLi93aXRoLWFycm93LWxpbmUtY3JlYXRlJztcbmltcG9ydCB7IHdpdGhHZW9tZXRyeVJlc2l6ZSB9IGZyb20gJy4vd2l0aC1nZW9tZXRyeS1yZXNpemUnO1xuaW1wb3J0IHsgd2l0aEFycm93TGluZVJlc2l6ZSB9IGZyb20gJy4vd2l0aC1hcnJvdy1saW5lLXJlc2l6ZSc7XG5pbXBvcnQgeyB3aXRoQXJyb3dMaW5lQm91bmRSZWFjdGlvbiB9IGZyb20gJy4vd2l0aC1hcnJvdy1saW5lLWJvdW5kLXJlYWN0aW9uJztcbmltcG9ydCB7IHdpdGhBcnJvd0xpbmVUZXh0IH0gZnJvbSAnLi93aXRoLWFycm93LWxpbmUtdGV4dCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB3aXRoQXJyb3dMaW5lQXV0b0NvbXBsZXRlUmVhY3Rpb24gfSBmcm9tICcuL3dpdGgtYXJyb3ctbGluZS1hdXRvLWNvbXBsZXRlLXJlYWN0aW9uJztcbmltcG9ydCB7IHdpdGhBcnJvd0xpbmVBdXRvQ29tcGxldGUgfSBmcm9tICcuL3dpdGgtYXJyb3ctbGluZS1hdXRvLWNvbXBsZXRlJztcbmltcG9ydCB7IHdpdGhBcnJvd0xpbmVUZXh0TW92ZSB9IGZyb20gJy4vd2l0aC1hcnJvdy1saW5lLXRleHQtbW92ZSc7XG5pbXBvcnQgeyB3aXRoRHJhd1Jlc2l6ZSB9IGZyb20gJy4vd2l0aC1kcmF3LXJlc2l6ZSc7XG5pbXBvcnQgeyBnZXREcmF3SGl0RWxlbWVudCwgaXNIaXREcmF3RWxlbWVudCwgaXNIaXRFbGVtZW50SW5zaWRlLCBpc1JlY3RhbmdsZUhpdERyYXdFbGVtZW50IH0gZnJvbSAnLi4vdXRpbHMvaGl0JztcbmltcG9ydCB7IGdldEFycm93TGluZVBvaW50cywgZ2V0QXJyb3dMaW5lVGV4dFJlY3RhbmdsZSB9IGZyb20gJy4uL3V0aWxzL2Fycm93LWxpbmUvYXJyb3ctbGluZS1iYXNpYyc7XG5pbXBvcnQgeyB3aXRoRHJhd1JvdGF0ZSB9IGZyb20gJy4vd2l0aC1kcmF3LXJvdGF0ZSc7XG5pbXBvcnQgeyB3aXRoVGFibGUgfSBmcm9tICcuL3dpdGgtdGFibGUnO1xuaW1wb3J0IHsgd2l0aFN3aW1sYW5lIH0gZnJvbSAnLi93aXRoLXN3aW1sYW5lJztcblxuZXhwb3J0IGNvbnN0IHdpdGhEcmF3ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBkcmF3RWxlbWVudCxcbiAgICAgICAgZ2V0UmVjdGFuZ2xlLFxuICAgICAgICBpc1JlY3RhbmdsZUhpdCxcbiAgICAgICAgaXNIaXQsXG4gICAgICAgIGlzSW5zaWRlUG9pbnQsXG4gICAgICAgIGlzTW92YWJsZSxcbiAgICAgICAgaXNBbGlnbixcbiAgICAgICAgZ2V0UmVsYXRlZEZyYWdtZW50LFxuICAgICAgICBnZXRIaXRFbGVtZW50XG4gICAgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQuZHJhd0VsZW1lbnQgPSAoY29udGV4dDogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGNvbnRleHQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVU1MKGNvbnRleHQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gR2VvbWV0cnlDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gR2VvbWV0cnlDb21wb25lbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyb3dMaW5lQ29tcG9uZW50O1xuICAgICAgICB9IGVsc2UgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gSW1hZ2VDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdFbGVtZW50KGNvbnRleHQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nZXRSZWN0YW5nbGUgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRBcnJvd0xpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbGluZVRleHRSZWN0YW5nbGVzID0gZWxlbWVudC50ZXh0cy5tYXAoKHRleHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0QXJyb3dMaW5lVGV4dFJlY3RhbmdsZShib2FyZCwgZWxlbWVudCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWN0YW5nbGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVQb2ludHNSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Qm91bmRpbmdSZWN0YW5nbGUoW2xpbmVQb2ludHNSZWN0YW5nbGUsIC4uLmxpbmVUZXh0UmVjdGFuZ2xlc10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmlzUmVjdGFuZ2xlSGl0ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudChib2FyZCwgZWxlbWVudCwgc2VsZWN0aW9uKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXQoZWxlbWVudCwgc2VsZWN0aW9uKTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaXNIaXQgPSAoZWxlbWVudCwgcG9pbnQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNIaXREcmF3RWxlbWVudChib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0hpdChlbGVtZW50LCBwb2ludCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdldEhpdEVsZW1lbnQgPSBlbGVtZW50cyA9PiB7XG4gICAgICAgIGNvbnN0IGlzRHJhd0VsZW1lbnRzID0gZWxlbWVudHMuZXZlcnkoaXRlbSA9PiBQbGFpdERyYXdFbGVtZW50LmlzRHJhd0VsZW1lbnQoaXRlbSkpO1xuICAgICAgICBpZiAoaXNEcmF3RWxlbWVudHMpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXREcmF3SGl0RWxlbWVudChib2FyZCwgZWxlbWVudHMgYXMgUGxhaXREcmF3RWxlbWVudFtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0SGl0RWxlbWVudChlbGVtZW50cyk7XG4gICAgfTtcblxuICAgIGJvYXJkLmlzSW5zaWRlUG9pbnQgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNIaXRFbGVtZW50SW5zaWRlKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzSW5zaWRlUG9pbnQoZWxlbWVudCwgcG9pbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc01vdmFibGUgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gKGJvdW5kSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXNlbGVjdGVkRWxlbWVudHMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gYm91bmRJZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnNvdXJjZS5ib3VuZElkICYmICFlbGVtZW50LnRhcmdldC5ib3VuZElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zb3VyY2UuYm91bmRJZCAmJiBpc1NlbGVjdGVkKGVsZW1lbnQuc291cmNlLmJvdW5kSWQpICYmIHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnRhcmdldC5ib3VuZElkICYmIGlzU2VsZWN0ZWQoZWxlbWVudC50YXJnZXQuYm91bmRJZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc01vdmFibGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmlzQWxpZ24gPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkgfHwgUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBbGlnbihlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50ID0gKGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgb3JpZ2luRGF0YT86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBvcmlnaW5EYXRhPy5sZW5ndGggPyBvcmlnaW5EYXRhIDogZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIGNvbnN0IGxpbmVFbGVtZW50cyA9IGJvYXJkLmNoaWxkcmVuLmZpbHRlcihlbGVtZW50ID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpO1xuICAgICAgICBjb25zdCBhY3RpdmVMaW5lcyA9IGxpbmVFbGVtZW50cy5maWx0ZXIobGluZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzZWxlY3RlZEVsZW1lbnRzLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmlkID09PSBsaW5lLnNvdXJjZS5ib3VuZElkKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHNlbGVjdGVkRWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IGxpbmUudGFyZ2V0LmJvdW5kSWQpO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMobGluZSk7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlICYmIHRhcmdldCAmJiAhaXNTZWxlY3RlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBnZXRSZWxhdGVkRnJhZ21lbnQoWy4uLmVsZW1lbnRzLCAuLi5hY3RpdmVMaW5lc10sIG9yaWdpbkRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gd2l0aFN3aW1sYW5lKFxuICAgICAgICB3aXRoVGFibGUoXG4gICAgICAgICAgICB3aXRoRHJhd1Jlc2l6ZShcbiAgICAgICAgICAgICAgICB3aXRoQXJyb3dMaW5lQXV0b0NvbXBsZXRlUmVhY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIHdpdGhBcnJvd0xpbmVCb3VuZFJlYWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEFycm93TGluZVJlc2l6ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQXJyb3dMaW5lVGV4dE1vdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhBcnJvd0xpbmVUZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEdlb21ldHJ5UmVzaXplKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhEcmF3Um90YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQXJyb3dMaW5lQ3JlYXRlQnlEcmF3KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEFycm93TGluZUF1dG9Db21wbGV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoR2VvbWV0cnlDcmVhdGVCeURyYWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhHZW9tZXRyeUNyZWF0ZUJ5RHJhd2luZyh3aXRoRHJhd0ZyYWdtZW50KHdpdGhEcmF3SG90a2V5KGJvYXJkKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKTtcbn07XG4iXX0=