@pie-element/hotspot 4.10.16-next.1 → 4.11.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/CHANGELOG.md +88 -0
- package/LICENSE.md +5 -0
- package/configure/CHANGELOG.md +75 -0
- package/configure/lib/button.js +1 -1
- package/configure/lib/defaults.js +3 -2
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-container.js +1 -1
- package/configure/lib/hotspot-drawable.js +2 -2
- package/configure/lib/hotspot-palette.js +1 -1
- package/configure/lib/hotspot-polygon.js +1 -1
- package/configure/lib/hotspot-rectangle.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/root.js +23 -18
- package/configure/lib/root.js.map +1 -1
- package/configure/lib/upload-control.js +1 -1
- package/configure/lib/utils.js +14 -2
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +3 -3
- package/configure/src/__tests__/__snapshots__/root.test.js.snap +32 -4
- package/configure/src/defaults.js +2 -1
- package/configure/src/hotspot-drawable.jsx +1 -1
- package/configure/src/root.jsx +33 -26
- package/configure/src/utils.js +23 -1
- package/controller/CHANGELOG.md +12 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +1 -1
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +1 -1
- package/controller/package.json +1 -1
- package/lib/hotspot/container.js +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/image.js +1 -1
- package/lib/hotspot/index.js +1 -1
- package/lib/hotspot/polygon.js +1 -1
- package/lib/hotspot/rectangle.js +1 -1
- package/lib/index.js +4 -1
- package/lib/session-updater.js +1 -1
- package/package.json +4 -4
- package/src/index.js +5 -0
- package/configure/lib/__tests__/hotspot-container.test.js +0 -281
- package/configure/lib/__tests__/hotspot-drawable.test.js +0 -241
- package/configure/lib/__tests__/index.test.js +0 -224
- package/configure/lib/__tests__/root.test.js +0 -443
- package/configure/lib/__tests__/utils.test.js +0 -335
- package/controller/lib/__tests__/index.test.js +0 -921
- package/controller/lib/__tests__/utils.test.js +0 -8
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/container-test.js +0 -185
- package/lib/__tests__/image-test.js +0 -63
- package/lib/__tests__/polygon-test.js +0 -99
- package/lib/__tests__/rectangle-test.js +0 -92
- package/lib/__tests__/session-updater-test.js +0 -78
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
-
|
|
7
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
|
-
|
|
9
|
-
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
10
|
-
|
|
11
|
-
var _react = _interopRequireDefault(require("react"));
|
|
12
|
-
|
|
13
|
-
var _utils = require("../utils");
|
|
14
|
-
|
|
15
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
16
|
-
|
|
17
|
-
var width = 200;
|
|
18
|
-
var height = 100;
|
|
19
|
-
var imageDimensions = {
|
|
20
|
-
width: width,
|
|
21
|
-
height: height
|
|
22
|
-
};
|
|
23
|
-
describe('updateImageDimensions', function () {
|
|
24
|
-
it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n initialDimensions | nextDimensions | keepAspectRatio | resizeType | expectedWidth | expectedHeight\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", "| ", " | ", " | ", " | ", "\n "])), imageDimensions, {
|
|
25
|
-
width: width,
|
|
26
|
-
height: 300
|
|
27
|
-
}, true, 'height', 600, 300, imageDimensions, {
|
|
28
|
-
width: 400,
|
|
29
|
-
height: height
|
|
30
|
-
}, true, 'width', 400, 200, imageDimensions, {
|
|
31
|
-
width: width,
|
|
32
|
-
height: 300
|
|
33
|
-
}, true, undefined, 200, 100, imageDimensions, {
|
|
34
|
-
width: 600,
|
|
35
|
-
height: height
|
|
36
|
-
}, true, undefined, 600, 300, imageDimensions, {
|
|
37
|
-
width: width,
|
|
38
|
-
height: 300
|
|
39
|
-
}, false, 'height', 200, 300, imageDimensions, {
|
|
40
|
-
width: 600,
|
|
41
|
-
height: height
|
|
42
|
-
}, false, 'width', 600, 100, imageDimensions, {
|
|
43
|
-
width: 10,
|
|
44
|
-
height: 10
|
|
45
|
-
}, false, undefined, 10, 10)('initialDimensions = $initialDimensions, nextDimensions = $nextDimensions, keepAspectRatio = $keepAspectRatio, resizeType = $resizeType => width = $expectedWidth & height = $expectedHeight', /*#__PURE__*/function () {
|
|
46
|
-
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
|
|
47
|
-
var initialDimensions, nextDimensions, keepAspectRatio, resizeType, expectedWidth, expectedHeight, result;
|
|
48
|
-
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
49
|
-
while (1) {
|
|
50
|
-
switch (_context.prev = _context.next) {
|
|
51
|
-
case 0:
|
|
52
|
-
initialDimensions = _ref.initialDimensions, nextDimensions = _ref.nextDimensions, keepAspectRatio = _ref.keepAspectRatio, resizeType = _ref.resizeType, expectedWidth = _ref.expectedWidth, expectedHeight = _ref.expectedHeight;
|
|
53
|
-
result = (0, _utils.updateImageDimensions)(initialDimensions, nextDimensions, keepAspectRatio, resizeType);
|
|
54
|
-
expect(result).toEqual({
|
|
55
|
-
width: expectedWidth,
|
|
56
|
-
height: expectedHeight
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
case 3:
|
|
60
|
-
case "end":
|
|
61
|
-
return _context.stop();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}, _callee);
|
|
65
|
-
}));
|
|
66
|
-
|
|
67
|
-
return function (_x) {
|
|
68
|
-
return _ref2.apply(this, arguments);
|
|
69
|
-
};
|
|
70
|
-
}());
|
|
71
|
-
});
|
|
72
|
-
describe('getUpdatedRectangle', function () {
|
|
73
|
-
var rectangle = function rectangle(x, y, w, h) {
|
|
74
|
-
return {
|
|
75
|
-
x: x,
|
|
76
|
-
y: y,
|
|
77
|
-
width: w,
|
|
78
|
-
height: h
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
var heightUpdateLarge = {
|
|
83
|
-
width: width,
|
|
84
|
-
height: 300
|
|
85
|
-
};
|
|
86
|
-
var heightUpdateSmall = {
|
|
87
|
-
width: width,
|
|
88
|
-
height: 50
|
|
89
|
-
};
|
|
90
|
-
var widthUpdateLarge = {
|
|
91
|
-
width: 300,
|
|
92
|
-
height: height
|
|
93
|
-
};
|
|
94
|
-
var widthUpdateSmall = {
|
|
95
|
-
width: 100,
|
|
96
|
-
height: height
|
|
97
|
-
};
|
|
98
|
-
var bothUpdate = {
|
|
99
|
-
width: 20,
|
|
100
|
-
height: 50
|
|
101
|
-
};
|
|
102
|
-
it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n initialDimensions | nextDimensions | shape | expected\n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n "])), imageDimensions, heightUpdateLarge, rectangle(10, 10, 100, 50), rectangle(10, 30, 100, 150), imageDimensions, heightUpdateSmall, rectangle(10, 10, 100, 50), rectangle(10, 5, 100, 25), imageDimensions, bothUpdate, rectangle(10, 10, 100, 50), rectangle(1, 5, 10, 25), imageDimensions, widthUpdateLarge, rectangle(10, 10, 100, 50), rectangle(15, 10, 150, 50), imageDimensions, widthUpdateSmall, rectangle(10, 10, 100, 50), rectangle(5, 10, 50, 50))('initialDimensions = $initialDimensions, nextDimensions = $nextDimensions, shape = $shape => $expected', /*#__PURE__*/function () {
|
|
103
|
-
var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref3) {
|
|
104
|
-
var initialDimensions, nextDimensions, shape, expected, result;
|
|
105
|
-
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
106
|
-
while (1) {
|
|
107
|
-
switch (_context2.prev = _context2.next) {
|
|
108
|
-
case 0:
|
|
109
|
-
initialDimensions = _ref3.initialDimensions, nextDimensions = _ref3.nextDimensions, shape = _ref3.shape, expected = _ref3.expected;
|
|
110
|
-
result = (0, _utils.getUpdatedRectangle)(initialDimensions, nextDimensions, shape);
|
|
111
|
-
expect(result).toEqual(expected);
|
|
112
|
-
|
|
113
|
-
case 3:
|
|
114
|
-
case "end":
|
|
115
|
-
return _context2.stop();
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}, _callee2);
|
|
119
|
-
}));
|
|
120
|
-
|
|
121
|
-
return function (_x2) {
|
|
122
|
-
return _ref4.apply(this, arguments);
|
|
123
|
-
};
|
|
124
|
-
}());
|
|
125
|
-
});
|
|
126
|
-
describe('getUpdatedPolygon', function () {
|
|
127
|
-
var updatedDimensions = {
|
|
128
|
-
width: width / 2,
|
|
129
|
-
height: height * 2
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
var point = function point(x, y) {
|
|
133
|
-
return {
|
|
134
|
-
x: x,
|
|
135
|
-
y: y
|
|
136
|
-
};
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
var updatedPoint = function updatedPoint(x, y) {
|
|
140
|
-
return {
|
|
141
|
-
x: x / 2,
|
|
142
|
-
y: y * 2
|
|
143
|
-
};
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
var triangle = [point(10, 10), point(100, 10), point(100, 100)];
|
|
147
|
-
var triangleUpdated = [updatedPoint(10, 10), updatedPoint(100, 10), updatedPoint(100, 100)];
|
|
148
|
-
var square = [point(10, 10), point(100, 10), point(100, 100), point(10, 100)];
|
|
149
|
-
var squareUpdated = [updatedPoint(10, 10), updatedPoint(100, 10), updatedPoint(100, 100), updatedPoint(10, 100)];
|
|
150
|
-
var pentagon = [point(10, 10), point(20, 0), point(30, 0), point(40, 10), point(25, 20)];
|
|
151
|
-
var pentagonUpdated = [updatedPoint(10, 10), updatedPoint(20, 0), updatedPoint(30, 0), updatedPoint(40, 10), updatedPoint(25, 20)];
|
|
152
|
-
var hexagon = [point(10, 10), point(20, 0), point(30, 0), point(40, 10), point(30, 20), point(20, 20)];
|
|
153
|
-
var hexagonUpdated = [updatedPoint(10, 10), updatedPoint(20, 0), updatedPoint(30, 0), updatedPoint(40, 10), updatedPoint(30, 20), updatedPoint(20, 20)];
|
|
154
|
-
|
|
155
|
-
var polygon = function polygon(points) {
|
|
156
|
-
return {
|
|
157
|
-
points: points
|
|
158
|
-
};
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n initialDimensions | nextDimensions | shape | expected\n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n "])), imageDimensions, updatedDimensions, polygon(triangle), polygon(triangleUpdated), imageDimensions, updatedDimensions, polygon(square), polygon(squareUpdated), imageDimensions, updatedDimensions, polygon(pentagon), polygon(pentagonUpdated), imageDimensions, updatedDimensions, polygon(hexagon), polygon(hexagonUpdated))('initialDimensions = $initialDimensions, nextDimensions = $nextDimensions, shape = $shape => $expected', /*#__PURE__*/function () {
|
|
162
|
-
var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref5) {
|
|
163
|
-
var initialDimensions, nextDimensions, shape, expected, result;
|
|
164
|
-
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
165
|
-
while (1) {
|
|
166
|
-
switch (_context3.prev = _context3.next) {
|
|
167
|
-
case 0:
|
|
168
|
-
initialDimensions = _ref5.initialDimensions, nextDimensions = _ref5.nextDimensions, shape = _ref5.shape, expected = _ref5.expected;
|
|
169
|
-
result = (0, _utils.getUpdatedPlygon)(initialDimensions, nextDimensions, shape);
|
|
170
|
-
expect(result).toEqual(expected);
|
|
171
|
-
|
|
172
|
-
case 3:
|
|
173
|
-
case "end":
|
|
174
|
-
return _context3.stop();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}, _callee3);
|
|
178
|
-
}));
|
|
179
|
-
|
|
180
|
-
return function (_x3) {
|
|
181
|
-
return _ref6.apply(this, arguments);
|
|
182
|
-
};
|
|
183
|
-
}());
|
|
184
|
-
});
|
|
185
|
-
var shapesArray = [{
|
|
186
|
-
height: 100,
|
|
187
|
-
width: 100,
|
|
188
|
-
x: 1,
|
|
189
|
-
y: 1,
|
|
190
|
-
group: 'rectangles',
|
|
191
|
-
index: 0
|
|
192
|
-
}, {
|
|
193
|
-
height: 200,
|
|
194
|
-
width: 200,
|
|
195
|
-
x: 200,
|
|
196
|
-
y: 1,
|
|
197
|
-
group: 'rectangles',
|
|
198
|
-
index: 1
|
|
199
|
-
}, {
|
|
200
|
-
points: [{
|
|
201
|
-
x: 1,
|
|
202
|
-
y: 200
|
|
203
|
-
}, {
|
|
204
|
-
x: 1,
|
|
205
|
-
y: 200
|
|
206
|
-
}, {
|
|
207
|
-
y: 200,
|
|
208
|
-
x: 200
|
|
209
|
-
}, {
|
|
210
|
-
y: 200,
|
|
211
|
-
x: 200
|
|
212
|
-
}],
|
|
213
|
-
group: 'polygons',
|
|
214
|
-
index: 2
|
|
215
|
-
}, {
|
|
216
|
-
points: [{
|
|
217
|
-
x: 200,
|
|
218
|
-
y: 100
|
|
219
|
-
}, {
|
|
220
|
-
x: 200,
|
|
221
|
-
y: 200
|
|
222
|
-
}, {
|
|
223
|
-
x: 400,
|
|
224
|
-
y: 200
|
|
225
|
-
}, {
|
|
226
|
-
x: 400,
|
|
227
|
-
y: 200
|
|
228
|
-
}],
|
|
229
|
-
group: 'polygons',
|
|
230
|
-
index: 3
|
|
231
|
-
}];
|
|
232
|
-
var shapesMap = {
|
|
233
|
-
rectangles: [{
|
|
234
|
-
height: 100,
|
|
235
|
-
width: 100,
|
|
236
|
-
x: 1,
|
|
237
|
-
y: 1,
|
|
238
|
-
index: 0
|
|
239
|
-
}, {
|
|
240
|
-
height: 200,
|
|
241
|
-
width: 200,
|
|
242
|
-
x: 200,
|
|
243
|
-
y: 1,
|
|
244
|
-
index: 1
|
|
245
|
-
}],
|
|
246
|
-
polygons: [{
|
|
247
|
-
points: [{
|
|
248
|
-
x: 1,
|
|
249
|
-
y: 200
|
|
250
|
-
}, {
|
|
251
|
-
x: 1,
|
|
252
|
-
y: 200
|
|
253
|
-
}, {
|
|
254
|
-
y: 200,
|
|
255
|
-
x: 200
|
|
256
|
-
}, {
|
|
257
|
-
y: 200,
|
|
258
|
-
x: 200
|
|
259
|
-
}],
|
|
260
|
-
index: 2
|
|
261
|
-
}, {
|
|
262
|
-
points: [{
|
|
263
|
-
x: 200,
|
|
264
|
-
y: 100
|
|
265
|
-
}, {
|
|
266
|
-
x: 200,
|
|
267
|
-
y: 200
|
|
268
|
-
}, {
|
|
269
|
-
x: 400,
|
|
270
|
-
y: 200
|
|
271
|
-
}, {
|
|
272
|
-
x: 400,
|
|
273
|
-
y: 200
|
|
274
|
-
}],
|
|
275
|
-
index: 3
|
|
276
|
-
}]
|
|
277
|
-
};
|
|
278
|
-
describe('getAllShapes', function () {
|
|
279
|
-
it.each(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n shapesMap | expected\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), shapesMap, shapesArray, null, [], undefined, [], {}, [])('TURNS shapes = $shapesMap INTO $expected', /*#__PURE__*/function () {
|
|
280
|
-
var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref7) {
|
|
281
|
-
var shapesMap, expected;
|
|
282
|
-
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
283
|
-
while (1) {
|
|
284
|
-
switch (_context4.prev = _context4.next) {
|
|
285
|
-
case 0:
|
|
286
|
-
shapesMap = _ref7.shapesMap, expected = _ref7.expected;
|
|
287
|
-
expect((0, _utils.getAllShapes)(shapesMap)).toEqual(expected);
|
|
288
|
-
|
|
289
|
-
case 2:
|
|
290
|
-
case "end":
|
|
291
|
-
return _context4.stop();
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}, _callee4);
|
|
295
|
-
}));
|
|
296
|
-
|
|
297
|
-
return function (_x4) {
|
|
298
|
-
return _ref8.apply(this, arguments);
|
|
299
|
-
};
|
|
300
|
-
}());
|
|
301
|
-
});
|
|
302
|
-
describe('groupShapes', function () {
|
|
303
|
-
it.each(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n shapesArray | expected\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), shapesArray, shapesMap, null, {
|
|
304
|
-
rectangles: [],
|
|
305
|
-
polygons: []
|
|
306
|
-
}, undefined, {
|
|
307
|
-
rectangles: [],
|
|
308
|
-
polygons: []
|
|
309
|
-
}, [], {
|
|
310
|
-
rectangles: [],
|
|
311
|
-
polygons: []
|
|
312
|
-
})('TURNS shapes = $shapesArray INTO $expected', /*#__PURE__*/function () {
|
|
313
|
-
var _ref10 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_ref9) {
|
|
314
|
-
var shapesArray, expected;
|
|
315
|
-
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
316
|
-
while (1) {
|
|
317
|
-
switch (_context5.prev = _context5.next) {
|
|
318
|
-
case 0:
|
|
319
|
-
shapesArray = _ref9.shapesArray, expected = _ref9.expected;
|
|
320
|
-
expect((0, _utils.groupShapes)(shapesArray)).toEqual(expected);
|
|
321
|
-
|
|
322
|
-
case 2:
|
|
323
|
-
case "end":
|
|
324
|
-
return _context5.stop();
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}, _callee5);
|
|
328
|
-
}));
|
|
329
|
-
|
|
330
|
-
return function (_x5) {
|
|
331
|
-
return _ref10.apply(this, arguments);
|
|
332
|
-
};
|
|
333
|
-
}());
|
|
334
|
-
});
|
|
335
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdXRpbHMudGVzdC5qcyJdLCJuYW1lcyI6WyJ3aWR0aCIsImhlaWdodCIsImltYWdlRGltZW5zaW9ucyIsImRlc2NyaWJlIiwiaXQiLCJlYWNoIiwidW5kZWZpbmVkIiwiaW5pdGlhbERpbWVuc2lvbnMiLCJuZXh0RGltZW5zaW9ucyIsImtlZXBBc3BlY3RSYXRpbyIsInJlc2l6ZVR5cGUiLCJleHBlY3RlZFdpZHRoIiwiZXhwZWN0ZWRIZWlnaHQiLCJyZXN1bHQiLCJleHBlY3QiLCJ0b0VxdWFsIiwicmVjdGFuZ2xlIiwieCIsInkiLCJ3IiwiaCIsImhlaWdodFVwZGF0ZUxhcmdlIiwiaGVpZ2h0VXBkYXRlU21hbGwiLCJ3aWR0aFVwZGF0ZUxhcmdlIiwid2lkdGhVcGRhdGVTbWFsbCIsImJvdGhVcGRhdGUiLCJzaGFwZSIsImV4cGVjdGVkIiwidXBkYXRlZERpbWVuc2lvbnMiLCJwb2ludCIsInVwZGF0ZWRQb2ludCIsInRyaWFuZ2xlIiwidHJpYW5nbGVVcGRhdGVkIiwic3F1YXJlIiwic3F1YXJlVXBkYXRlZCIsInBlbnRhZ29uIiwicGVudGFnb25VcGRhdGVkIiwiaGV4YWdvbiIsImhleGFnb25VcGRhdGVkIiwicG9seWdvbiIsInBvaW50cyIsInNoYXBlc0FycmF5IiwiZ3JvdXAiLCJpbmRleCIsInNoYXBlc01hcCIsInJlY3RhbmdsZXMiLCJwb2x5Z29ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0FBRUEsSUFBTUEsS0FBSyxHQUFHLEdBQWQ7QUFDQSxJQUFNQyxNQUFNLEdBQUcsR0FBZjtBQUNBLElBQU1DLGVBQWUsR0FBRztBQUFFRixFQUFBQSxLQUFLLEVBQUxBLEtBQUY7QUFBU0MsRUFBQUEsTUFBTSxFQUFOQTtBQUFULENBQXhCO0FBRUFFLFFBQVEsQ0FBQyx1QkFBRCxFQUEwQixZQUFNO0FBQ3RDQyxFQUFBQSxFQUFFLENBQUNDLElBQUgsZ3ZCQUVNSCxlQUZOLEVBRTRCO0FB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QUMsd0JBQVkyQixXQUFaLENBQUQsQ0FBTixDQUFpQzFCLE9BQWpDLENBQXlDWSxRQUF6Qzs7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQVBGOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUQsQ0FYTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVwZGF0ZUltYWdlRGltZW5zaW9ucywgZ2V0VXBkYXRlZFJlY3RhbmdsZSwgZ2V0VXBkYXRlZFBseWdvbiwgZ2V0QWxsU2hhcGVzLCBncm91cFNoYXBlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3Qgd2lkdGggPSAyMDA7XG5jb25zdCBoZWlnaHQgPSAxMDA7XG5jb25zdCBpbWFnZURpbWVuc2lvbnMgPSB7IHdpZHRoLCBoZWlnaHQgfTtcblxuZGVzY3JpYmUoJ3VwZGF0ZUltYWdlRGltZW5zaW9ucycsICgpID0+IHtcbiAgaXQuZWFjaGBcbiAgICAgIGluaXRpYWxEaW1lbnNpb25zICB8ICBuZXh0RGltZW5zaW9ucyAgICAgICAgICAgICAgfCAgIGtlZXBBc3BlY3RSYXRpbyAgfCAgcmVzaXplVHlwZSAgICAgfCAgICBleHBlY3RlZFdpZHRoICB8IGV4cGVjdGVkSGVpZ2h0XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiAzMDBcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAkeydoZWlnaHQnfSAgICB8ICAgICR7NjAwfSAgICAgICAgIHwgJHszMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDQwMCxcbiAgICBoZWlnaHRcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAkeyd3aWR0aCd9ICAgICB8ICAgICR7NDAwfSAgICAgICAgIHwgJHsyMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiAzMDBcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAke3VuZGVmaW5lZH0gICB8ICAgICR7MjAwfSAgICAgICAgIHwgJHsxMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDYwMCxcbiAgICBoZWlnaHRcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAke3VuZGVmaW5lZH0gICB8ICAgICR7NjAwfSAgICAgICAgIHwgJHszMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiAzMDBcbiAgfX0gICB8ICAgICAke2ZhbHNlfSAgICAgICB8ICAkeydoZWlnaHQnfSAgICB8ICAgICR7MjAwfSAgICAgICAgIHwgJHszMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDYwMCxcbiAgICBoZWlnaHRcbiAgfX0gICB8ICAgICAke2ZhbHNlfSAgICAgICB8ICAkeyd3aWR0aCd9ICAgICB8ICAgICR7NjAwfSAgICAgICAgIHwgJHsxMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDEwLFxuICAgIGhlaWdodDogMTBcbiAgfX18ICAgICAke2ZhbHNlfSAgICAgICB8ICAke3VuZGVmaW5lZH0gICB8ICAgICR7MTB9ICAgICAgICAgIHwgJHsxMH1cbiAgICBgKCdpbml0aWFsRGltZW5zaW9ucyA9ICRpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMgPSAkbmV4dERpbWVuc2lvbnMsIGtlZXBBc3BlY3RSYXRpbyA9ICRrZWVwQXNwZWN0UmF0aW8sIHJlc2l6ZVR5cGUgPSAkcmVzaXplVHlwZSA9PiB3aWR0aCA9ICRleHBlY3RlZFdpZHRoICYgaGVpZ2h0ID0gJGV4cGVjdGVkSGVpZ2h0JyxcbiAgICBhc3luYyAoeyBpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMsIGtlZXBBc3BlY3RSYXRpbywgcmVzaXplVHlwZSwgZXhwZWN0ZWRXaWR0aCwgZXhwZWN0ZWRIZWlnaHQgfSkgPT4ge1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB1cGRhdGVJbWFnZURpbWVuc2lvbnMoaW5pdGlhbERpbWVuc2lvbnMsIG5leHREaW1lbnNpb25zLCBrZWVwQXNwZWN0UmF0aW8sIHJlc2l6ZVR5cGUpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICAgICAgd2lkdGg6IGV4cGVjdGVkV2lkdGgsXG4gICAgICAgIGhlaWdodDogZXhwZWN0ZWRIZWlnaHRcbiAgICAgIH0pO1xuICAgIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ2dldFVwZGF0ZWRSZWN0YW5nbGUnLCAoKSA9PiB7XG4gIGNvbnN0IHJlY3RhbmdsZSA9ICh4LCB5LCB3LCBoKSA9PiAoeyB4LCB5LCB3aWR0aDogdywgaGVpZ2h0OiBoIH0pO1xuICBjb25zdCBoZWlnaHRVcGRhdGVMYXJnZSA9IHsgd2lkdGgsIGhlaWdodDogMzAwIH07XG4gIGNvbnN0IGhlaWdodFVwZGF0ZVNtYWxsID0geyB3aWR0aCwgaGVpZ2h0OiA1MCB9O1xuICBjb25zdCB3aWR0aFVwZGF0ZUxhcmdlID0geyB3aWR0aDogMzAwLCBoZWlnaHQgfTtcbiAgY29uc3Qgd2lkdGhVcGRhdGVTbWFsbCA9IHsgd2lkdGg6IDEwMCwgaGVpZ2h0IH07XG4gIGNvbnN0IGJvdGhVcGRhdGUgPSB7IHdpZHRoOiAyMCwgaGVpZ2h0OiA1MCB9O1xuXG4gIGl0LmVhY2hgXG4gICAgICBpbml0aWFsRGltZW5zaW9ucyAgfCAgbmV4dERpbWVuc2lvbnMgICAgICAgIHwgICBzaGFwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHtoZWlnaHRVcGRhdGVMYXJnZX0gIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoMTAsIDMwLCAxMDAsIDE1MCl9IFxuICAgICAgJHtpbWFnZURpbWVuc2lvbnN9IHwgICR7aGVpZ2h0VXBkYXRlU21hbGx9ICB8ICAgJHtyZWN0YW5nbGUoMTAsIDEwLCAxMDAsIDUwKX0gICAgIHwgICR7cmVjdGFuZ2xlKDEwLCA1LCAxMDAsIDI1KX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHtib3RoVXBkYXRlfSAgICAgICAgIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoMSwgNSwgMTAsIDI1KX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt3aWR0aFVwZGF0ZUxhcmdlfSAgIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoMTUsIDEwLCAxNTAsIDUwKX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt3aWR0aFVwZGF0ZVNtYWxsfSAgIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoNSwgMTAsIDUwLCA1MCl9IFxuICAgIGAoJ2luaXRpYWxEaW1lbnNpb25zID0gJGluaXRpYWxEaW1lbnNpb25zLCBuZXh0RGltZW5zaW9ucyA9ICRuZXh0RGltZW5zaW9ucywgc2hhcGUgPSAkc2hhcGUgPT4gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMsIHNoYXBlLCBleHBlY3RlZCB9KSA9PiB7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFVwZGF0ZWRSZWN0YW5nbGUoaW5pdGlhbERpbWVuc2lvbnMsIG5leHREaW1lbnNpb25zLCBzaGFwZSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ2dldFVwZGF0ZWRQb2x5Z29uJywgKCkgPT4ge1xuICBjb25zdCB1cGRhdGVkRGltZW5zaW9ucyA9IHsgd2lkdGg6IHdpZHRoIC8gMiwgaGVpZ2h0OiBoZWlnaHQgKiAyIH07XG5cbiAgY29uc3QgcG9pbnQgPSAoeCwgeSkgPT4gKHsgeCwgeSB9KTtcbiAgY29uc3QgdXBkYXRlZFBvaW50ID0gKHgsIHkpID0+ICh7IHg6IHggLyAyLCB5OiB5ICogMiB9KTtcblxuICBjb25zdCB0cmlhbmdsZSA9IFtwb2ludCgxMCwgMTApLCBwb2ludCgxMDAsIDEwKSwgcG9pbnQoMTAwLCAxMDApXTtcbiAgY29uc3QgdHJpYW5nbGVVcGRhdGVkID0gW3VwZGF0ZWRQb2ludCgxMCwgMTApLCB1cGRhdGVkUG9pbnQoMTAwLCAxMCksIHVwZGF0ZWRQb2ludCgxMDAsIDEwMCldO1xuXG4gIGNvbnN0IHNxdWFyZSA9IFtwb2ludCgxMCwgMTApLCBwb2ludCgxMDAsIDEwKSwgcG9pbnQoMTAwLCAxMDApLCBwb2ludCgxMCwgMTAwKV07XG4gIGNvbnN0IHNxdWFyZVVwZGF0ZWQgPSBbdXBkYXRlZFBvaW50KDEwLCAxMCksIHVwZGF0ZWRQb2ludCgxMDAsIDEwKSwgdXBkYXRlZFBvaW50KDEwMCwgMTAwKSwgdXBkYXRlZFBvaW50KDEwLCAxMDApXTtcblxuICBjb25zdCBwZW50YWdvbiA9IFtwb2ludCgxMCwgMTApLCBwb2ludCgyMCwgMCksIHBvaW50KDMwLCAwKSwgcG9pbnQoNDAsIDEwKSwgcG9pbnQoMjUsIDIwKV07XG4gIGNvbnN0IHBlbnRhZ29uVXBkYXRlZCA9IFt1cGRhdGVkUG9pbnQoMTAsIDEwKSwgdXBkYXRlZFBvaW50KDIwLCAwKSwgdXBkYXRlZFBvaW50KDMwLCAwKSwgdXBkYXRlZFBvaW50KDQwLCAxMCksIHVwZGF0ZWRQb2ludCgyNSwgMjApXTtcblxuICBjb25zdCBoZXhhZ29uID0gW3BvaW50KDEwLCAxMCksIHBvaW50KDIwLCAwKSwgcG9pbnQoMzAsIDApLCBwb2ludCg0MCwgMTApLCBwb2ludCgzMCwgMjApLCBwb2ludCgyMCwgMjApXTtcbiAgY29uc3QgaGV4YWdvblVwZGF0ZWQgPSBbdXBkYXRlZFBvaW50KDEwLCAxMCksIHVwZGF0ZWRQb2ludCgyMCwgMCksIHVwZGF0ZWRQb2ludCgzMCwgMCksIHVwZGF0ZWRQb2ludCg0MCwgMTApLCB1cGRhdGVkUG9pbnQoMzAsIDIwKSwgdXBkYXRlZFBvaW50KDIwLCAyMCldO1xuXG4gIGNvbnN0IHBvbHlnb24gPSBwb2ludHMgPT4gKHsgcG9pbnRzIH0pO1xuXG4gIGl0LmVhY2hgXG4gICAgICBpbml0aWFsRGltZW5zaW9ucyAgfCAgbmV4dERpbWVuc2lvbnMgICAgICAgICB8ICAgc2hhcGUgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAgICR7aW1hZ2VEaW1lbnNpb25zfSB8ICAke3VwZGF0ZWREaW1lbnNpb25zfSAgIHwgICAke3BvbHlnb24odHJpYW5nbGUpfSAgICAgfCAgJHtwb2x5Z29uKHRyaWFuZ2xlVXBkYXRlZCl9IFxuICAgICAgJHtpbWFnZURpbWVuc2lvbnN9IHwgICR7dXBkYXRlZERpbWVuc2lvbnN9ICAgfCAgICR7cG9seWdvbihzcXVhcmUpfSAgICAgICB8ICAke3BvbHlnb24oc3F1YXJlVXBkYXRlZCl9IFxuICAgICAgJHtpbWFnZURpbWVuc2lvbnN9IHwgICR7dXBkYXRlZERpbWVuc2lvbnN9ICAgfCAgICR7cG9seWdvbihwZW50YWdvbil9ICAgICB8ICAke3BvbHlnb24ocGVudGFnb25VcGRhdGVkKX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt1cGRhdGVkRGltZW5zaW9uc30gICB8ICAgJHtwb2x5Z29uKGhleGFnb24pfSAgICAgIHwgICR7cG9seWdvbihoZXhhZ29uVXBkYXRlZCl9IFxuICAgIGAoJ2luaXRpYWxEaW1lbnNpb25zID0gJGluaXRpYWxEaW1lbnNpb25zLCBuZXh0RGltZW5zaW9ucyA9ICRuZXh0RGltZW5zaW9ucywgc2hhcGUgPSAkc2hhcGUgPT4gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMsIHNoYXBlLCBleHBlY3RlZCB9KSA9PiB7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFVwZGF0ZWRQbHlnb24oaW5pdGlhbERpbWVuc2lvbnMsIG5leHREaW1lbnNpb25zLCBzaGFwZSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xufSk7XG5cblxuY29uc3Qgc2hhcGVzQXJyYXkgPSBbXG4gIHtcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB3aWR0aDogMTAwLFxuICAgIHg6IDEsXG4gICAgeTogMSxcbiAgICBncm91cDogJ3JlY3RhbmdsZXMnLFxuICAgIGluZGV4OiAwXG4gIH0sIHtcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICB3aWR0aDogMjAwLFxuICAgIHg6IDIwMCxcbiAgICB5OiAxLFxuICAgIGdyb3VwOiAncmVjdGFuZ2xlcycsXG4gICAgaW5kZXg6IDFcbiAgfSxcbiAge1xuICAgIHBvaW50czogW1xuICAgICAgeyB4OiAxLCB5OiAyMDAgfSxcbiAgICAgIHsgeDogMSwgeTogMjAwIH0sXG4gICAgICB7IHk6IDIwMCwgeDogMjAwIH0sXG4gICAgICB7IHk6IDIwMCwgeDogMjAwIH1dLFxuICAgIGdyb3VwOiAncG9seWdvbnMnLFxuICAgIGluZGV4OiAyXG4gIH0sIHtcbiAgICBwb2ludHM6IFtcbiAgICAgIHsgeDogMjAwLCB5OiAxMDAgfSxcbiAgICAgIHsgeDogMjAwLCB5OiAyMDAgfSxcbiAgICAgIHsgeDogNDAwLCB5OiAyMDAgfSxcbiAgICAgIHsgeDogNDAwLCB5OiAyMDAgfVxuICAgIF0sXG4gICAgZ3JvdXA6ICdwb2x5Z29ucycsXG4gICAgaW5kZXg6IDNcbiAgfVxuXTtcblxuXG5jb25zdCBzaGFwZXNNYXAgPSB7XG4gIHJlY3RhbmdsZXM6IFtcbiAgICB7XG4gICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgIHdpZHRoOiAxMDAsXG4gICAgICB4OiAxLFxuICAgICAgeTogMSxcbiAgICAgIGluZGV4OiAwXG4gICAgfSwge1xuICAgICAgaGVpZ2h0OiAyMDAsXG4gICAgICB3aWR0aDogMjAwLFxuICAgICAgeDogMjAwLFxuICAgICAgeTogMSxcbiAgICAgIGluZGV4OiAxXG4gICAgfVxuICBdLCBwb2x5Z29uczogW1xuICAgIHtcbiAgICAgIHBvaW50czogW1xuICAgICAgICB7IHg6IDEsIHk6IDIwMCB9LFxuICAgICAgICB7IHg6IDEsIHk6IDIwMCB9LFxuICAgICAgICB7IHk6IDIwMCwgeDogMjAwIH0sXG4gICAgICAgIHsgeTogMjAwLCB4OiAyMDAgfV0sXG4gICAgICBpbmRleDogMixcbiAgICB9LCB7XG4gICAgICBwb2ludHM6IFtcbiAgICAgICAgeyB4OiAyMDAsIHk6IDEwMCB9LFxuICAgICAgICB7IHg6IDIwMCwgeTogMjAwIH0sXG4gICAgICAgIHsgeDogNDAwLCB5OiAyMDAgfSxcbiAgICAgICAgeyB4OiA0MDAsIHk6IDIwMCB9XG4gICAgICBdLFxuICAgICAgaW5kZXg6IDNcbiAgICB9XG4gIF1cbn07XG5cblxuZGVzY3JpYmUoJ2dldEFsbFNoYXBlcycsICgpID0+IHtcbiAgaXQuZWFjaGBcbiAgICAgIHNoYXBlc01hcCAgICAgfCAgZXhwZWN0ZWRcbiAgICAgICR7c2hhcGVzTWFwfSAgfCAgJHtzaGFwZXNBcnJheX1cbiAgICAgICR7bnVsbH0gICAgICAgfCAgJHtbXX1cbiAgICAgICR7dW5kZWZpbmVkfSAgfCAgJHtbXX1cbiAgICAgICR7e319ICAgICAgICAgfCAgJHtbXX1cbiAgICBgKCdUVVJOUyBzaGFwZXMgPSAkc2hhcGVzTWFwIElOVE8gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBzaGFwZXNNYXAsIGV4cGVjdGVkIH0pID0+IHtcbiAgICAgIGV4cGVjdChnZXRBbGxTaGFwZXMoc2hhcGVzTWFwKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbn0pO1xuXG5kZXNjcmliZSgnZ3JvdXBTaGFwZXMnLCAoKSA9PiB7XG4gIGl0LmVhY2hgXG4gICAgICBzaGFwZXNBcnJheSAgICAgfCAgZXhwZWN0ZWRcbiAgICAgICR7c2hhcGVzQXJyYXl9ICB8ICAke3NoYXBlc01hcH1cbiAgICAgICR7bnVsbH0gICAgICAgICB8ICAke3sgcmVjdGFuZ2xlczogW10sIHBvbHlnb25zOiBbXSB9fVxuICAgICAgJHt1bmRlZmluZWR9ICAgIHwgICR7eyByZWN0YW5nbGVzOiBbXSwgcG9seWdvbnM6IFtdIH19XG4gICAgICAke1tdfSAgICAgICAgICAgfCAgJHt7IHJlY3RhbmdsZXM6IFtdLCBwb2x5Z29uczogW10gfX1cbiAgICBgKCdUVVJOUyBzaGFwZXMgPSAkc2hhcGVzQXJyYXkgSU5UTyAkZXhwZWN0ZWQnLFxuICAgIGFzeW5jICh7IHNoYXBlc0FycmF5LCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBleHBlY3QoZ3JvdXBTaGFwZXMoc2hhcGVzQXJyYXkpKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbn0pO1xuXG4iXX0=
|