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