easy 24.1.2 → 24.1.4
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/package.json +6 -2
- package/.aiignore +0 -12
- package/.swcrc +0 -12
- package/bin/main.js +0 -15
- package/example.js +0 -3312
- package/index.html +0 -46
package/example.js
DELETED
|
@@ -1,3312 +0,0 @@
|
|
|
1
|
-
(() => {
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
|
|
4
|
-
var __commonJS = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports);
|
|
5
|
-
var __publicField = (obj, key, value) => {
|
|
6
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
-
return value;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
// lib/offset.js
|
|
11
|
-
var require_offset = __commonJS((exports) => {
|
|
12
|
-
"use strict";
|
|
13
|
-
Object.defineProperty(exports, "__esModule", {
|
|
14
|
-
value: true
|
|
15
|
-
});
|
|
16
|
-
Object.defineProperty(exports, "default", {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
get: function() {
|
|
19
|
-
return Offset;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
var Offset = class {
|
|
23
|
-
constructor(top, left) {
|
|
24
|
-
this.top = top;
|
|
25
|
-
this.left = left;
|
|
26
|
-
}
|
|
27
|
-
getTop() {
|
|
28
|
-
return this.top;
|
|
29
|
-
}
|
|
30
|
-
getLeft() {
|
|
31
|
-
return this.left;
|
|
32
|
-
}
|
|
33
|
-
static fromDOMElement(domElement) {
|
|
34
|
-
const {offsetTop, offsetLeft} = domElement, top = offsetTop, left = offsetLeft, offset = new Offset(top, left);
|
|
35
|
-
return offset;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// lib/bounds.js
|
|
41
|
-
var require_bounds = __commonJS((exports) => {
|
|
42
|
-
"use strict";
|
|
43
|
-
Object.defineProperty(exports, "__esModule", {
|
|
44
|
-
value: true
|
|
45
|
-
});
|
|
46
|
-
Object.defineProperty(exports, "default", {
|
|
47
|
-
enumerable: true,
|
|
48
|
-
get: function() {
|
|
49
|
-
return Bounds;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
var Bounds = class {
|
|
53
|
-
constructor(top, left, right, bottom) {
|
|
54
|
-
this.top = top;
|
|
55
|
-
this.left = left;
|
|
56
|
-
this.right = right;
|
|
57
|
-
this.bottom = bottom;
|
|
58
|
-
}
|
|
59
|
-
getTop() {
|
|
60
|
-
return this.top;
|
|
61
|
-
}
|
|
62
|
-
getLeft() {
|
|
63
|
-
return this.left;
|
|
64
|
-
}
|
|
65
|
-
getRight() {
|
|
66
|
-
return this.right;
|
|
67
|
-
}
|
|
68
|
-
getBottom() {
|
|
69
|
-
return this.bottom;
|
|
70
|
-
}
|
|
71
|
-
getWidth() {
|
|
72
|
-
const width = this.right - this.left;
|
|
73
|
-
return width;
|
|
74
|
-
}
|
|
75
|
-
getHeight() {
|
|
76
|
-
const height = this.bottom - this.top;
|
|
77
|
-
return height;
|
|
78
|
-
}
|
|
79
|
-
setTop(top) {
|
|
80
|
-
this.top = top;
|
|
81
|
-
}
|
|
82
|
-
setLeft(left) {
|
|
83
|
-
this.left = left;
|
|
84
|
-
}
|
|
85
|
-
setRight(right) {
|
|
86
|
-
this.right = right;
|
|
87
|
-
}
|
|
88
|
-
setBottom(bottom) {
|
|
89
|
-
this.bottom = bottom;
|
|
90
|
-
}
|
|
91
|
-
areOverlapping(bounds) {
|
|
92
|
-
const bottom = bounds.getBottom(), right = bounds.getRight(), left = bounds.getLeft(), top = bounds.getTop(), overlapping = this.top < bottom && this.left < right && this.right > left && this.bottom > top;
|
|
93
|
-
return overlapping;
|
|
94
|
-
}
|
|
95
|
-
areOverlappingByTopAndLeft(top, left) {
|
|
96
|
-
const overlapping = this.top <= top && this.left <= left && this.right > left && this.bottom > top;
|
|
97
|
-
return overlapping;
|
|
98
|
-
}
|
|
99
|
-
static fromDOMElement(domElement) {
|
|
100
|
-
const {pageXOffset, pageYOffset} = window, boundingClientRect = domElement.getBoundingClientRect(), windowScrollTop = pageYOffset, windowScrollLeft = pageXOffset, top = boundingClientRect.top + windowScrollTop, left = boundingClientRect.left + windowScrollLeft, right = boundingClientRect.right + windowScrollLeft, bottom = boundingClientRect.bottom + windowScrollTop, bounds = new Bounds(top, left, right, bottom);
|
|
101
|
-
return bounds;
|
|
102
|
-
}
|
|
103
|
-
static fromTopLeftWidthAndHeight(top, left, width, height) {
|
|
104
|
-
const bottom = top + height, right = left + width, bounds = new Bounds(top, left, right, bottom);
|
|
105
|
-
return bounds;
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
// lib/utilities/array.js
|
|
111
|
-
var require_array = __commonJS((exports) => {
|
|
112
|
-
"use strict";
|
|
113
|
-
Object.defineProperty(exports, "__esModule", {
|
|
114
|
-
value: true
|
|
115
|
-
});
|
|
116
|
-
function _export(target, all) {
|
|
117
|
-
for (var name in all)
|
|
118
|
-
Object.defineProperty(target, name, {
|
|
119
|
-
enumerable: true,
|
|
120
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
_export(exports, {
|
|
124
|
-
get augment() {
|
|
125
|
-
return augment;
|
|
126
|
-
},
|
|
127
|
-
get first() {
|
|
128
|
-
return first;
|
|
129
|
-
},
|
|
130
|
-
get flatten() {
|
|
131
|
-
return flatten;
|
|
132
|
-
},
|
|
133
|
-
get guarantee() {
|
|
134
|
-
return guarantee;
|
|
135
|
-
},
|
|
136
|
-
get push() {
|
|
137
|
-
return push;
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
function first(array) {
|
|
141
|
-
return array[0];
|
|
142
|
-
}
|
|
143
|
-
function push(array1, array2) {
|
|
144
|
-
Array.prototype.push.apply(array1, array2);
|
|
145
|
-
}
|
|
146
|
-
function augment(array1, array2, test) {
|
|
147
|
-
array1 = [
|
|
148
|
-
...array1
|
|
149
|
-
];
|
|
150
|
-
array2.forEach((element, index) => {
|
|
151
|
-
const passed = test(element, index);
|
|
152
|
-
if (passed) {
|
|
153
|
-
array1.push(element);
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
return array1;
|
|
157
|
-
}
|
|
158
|
-
function flatten(array) {
|
|
159
|
-
return array.reduce((array2, element) => {
|
|
160
|
-
array2 = array2.concat(element);
|
|
161
|
-
return array2;
|
|
162
|
-
}, []);
|
|
163
|
-
}
|
|
164
|
-
function guarantee(arrayOrElement) {
|
|
165
|
-
arrayOrElement = arrayOrElement || [];
|
|
166
|
-
return arrayOrElement instanceof Array ? arrayOrElement : [
|
|
167
|
-
arrayOrElement
|
|
168
|
-
];
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
// lib/constants.js
|
|
173
|
-
var require_constants = __commonJS((exports) => {
|
|
174
|
-
"use strict";
|
|
175
|
-
Object.defineProperty(exports, "__esModule", {
|
|
176
|
-
value: true
|
|
177
|
-
});
|
|
178
|
-
function _export(target, all) {
|
|
179
|
-
for (var name in all)
|
|
180
|
-
Object.defineProperty(target, name, {
|
|
181
|
-
enumerable: true,
|
|
182
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
_export(exports, {
|
|
186
|
-
get BLOCK() {
|
|
187
|
-
return BLOCK;
|
|
188
|
-
},
|
|
189
|
-
get BODY() {
|
|
190
|
-
return BODY;
|
|
191
|
-
},
|
|
192
|
-
get BOOLEAN() {
|
|
193
|
-
return BOOLEAN;
|
|
194
|
-
},
|
|
195
|
-
get CLASS() {
|
|
196
|
-
return CLASS;
|
|
197
|
-
},
|
|
198
|
-
get CLASS_NAME() {
|
|
199
|
-
return CLASS_NAME;
|
|
200
|
-
},
|
|
201
|
-
get DEFAULT_PROPERTIES() {
|
|
202
|
-
return DEFAULT_PROPERTIES;
|
|
203
|
-
},
|
|
204
|
-
get DISABLED() {
|
|
205
|
-
return DISABLED;
|
|
206
|
-
},
|
|
207
|
-
get DISPLAY() {
|
|
208
|
-
return DISPLAY;
|
|
209
|
-
},
|
|
210
|
-
get EMPTY_STRING() {
|
|
211
|
-
return EMPTY_STRING;
|
|
212
|
-
},
|
|
213
|
-
get FOR() {
|
|
214
|
-
return FOR;
|
|
215
|
-
},
|
|
216
|
-
get FUNCTION() {
|
|
217
|
-
return FUNCTION;
|
|
218
|
-
},
|
|
219
|
-
get HEIGHT() {
|
|
220
|
-
return HEIGHT;
|
|
221
|
-
},
|
|
222
|
-
get HTML_FOR() {
|
|
223
|
-
return HTML_FOR;
|
|
224
|
-
},
|
|
225
|
-
get IGNORED_PROPERTIES() {
|
|
226
|
-
return IGNORED_PROPERTIES;
|
|
227
|
-
},
|
|
228
|
-
get NONE() {
|
|
229
|
-
return NONE;
|
|
230
|
-
},
|
|
231
|
-
get OBJECT() {
|
|
232
|
-
return OBJECT;
|
|
233
|
-
},
|
|
234
|
-
get SPACE() {
|
|
235
|
-
return SPACE;
|
|
236
|
-
},
|
|
237
|
-
get STRING() {
|
|
238
|
-
return STRING;
|
|
239
|
-
},
|
|
240
|
-
get SVG_NAMESPACE_URI() {
|
|
241
|
-
return SVG_NAMESPACE_URI;
|
|
242
|
-
},
|
|
243
|
-
get UNDEFINED() {
|
|
244
|
-
return UNDEFINED;
|
|
245
|
-
},
|
|
246
|
-
get WIDTH() {
|
|
247
|
-
return WIDTH;
|
|
248
|
-
},
|
|
249
|
-
get WILDCARD() {
|
|
250
|
-
return WILDCARD;
|
|
251
|
-
}
|
|
252
|
-
});
|
|
253
|
-
var FOR = "for";
|
|
254
|
-
var BODY = "body";
|
|
255
|
-
var NONE = "none";
|
|
256
|
-
var SPACE = " ";
|
|
257
|
-
var CLASS = "class";
|
|
258
|
-
var WIDTH = "width";
|
|
259
|
-
var BLOCK = "block";
|
|
260
|
-
var HEIGHT = "height";
|
|
261
|
-
var OBJECT = "object";
|
|
262
|
-
var STRING = "string";
|
|
263
|
-
var DISPLAY = "display";
|
|
264
|
-
var BOOLEAN = "boolean";
|
|
265
|
-
var DISABLED = "disabled";
|
|
266
|
-
var FUNCTION = "function";
|
|
267
|
-
var WILDCARD = "*";
|
|
268
|
-
var HTML_FOR = "htmlFor";
|
|
269
|
-
var UNDEFINED = "undefined";
|
|
270
|
-
var CLASS_NAME = "className";
|
|
271
|
-
var EMPTY_STRING = "";
|
|
272
|
-
var SVG_NAMESPACE_URI = "http://www.w3.org/2000/svg";
|
|
273
|
-
var DEFAULT_PROPERTIES = "defaultProperties";
|
|
274
|
-
var IGNORED_PROPERTIES = "ignoredProperties";
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
// lib/utilities/object.js
|
|
278
|
-
var require_object = __commonJS((exports) => {
|
|
279
|
-
"use strict";
|
|
280
|
-
Object.defineProperty(exports, "__esModule", {
|
|
281
|
-
value: true
|
|
282
|
-
});
|
|
283
|
-
function _export(target, all) {
|
|
284
|
-
for (var name in all)
|
|
285
|
-
Object.defineProperty(target, name, {
|
|
286
|
-
enumerable: true,
|
|
287
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
_export(exports, {
|
|
291
|
-
get combine() {
|
|
292
|
-
return combine;
|
|
293
|
-
},
|
|
294
|
-
get prune() {
|
|
295
|
-
return prune;
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
var _constants = require_constants();
|
|
299
|
-
function combine(target, source = {}) {
|
|
300
|
-
target = {
|
|
301
|
-
...target
|
|
302
|
-
};
|
|
303
|
-
const names = Object.keys(source);
|
|
304
|
-
names.forEach((name) => {
|
|
305
|
-
const targetValue = target[name], sourceValue = source[name], targetHasOwnProperty = target.hasOwnProperty(name);
|
|
306
|
-
target[name] = targetHasOwnProperty ? combineValues(targetValue, sourceValue) : sourceValue;
|
|
307
|
-
});
|
|
308
|
-
return target;
|
|
309
|
-
}
|
|
310
|
-
function prune(target, names = []) {
|
|
311
|
-
target = {
|
|
312
|
-
...target
|
|
313
|
-
};
|
|
314
|
-
names.forEach((name) => {
|
|
315
|
-
const targetHasOwnProperty = target.hasOwnProperty(name);
|
|
316
|
-
if (targetHasOwnProperty) {
|
|
317
|
-
delete target[name];
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
return target;
|
|
321
|
-
}
|
|
322
|
-
function combineValues(targetValue, sourceValue) {
|
|
323
|
-
const targetValueBoolean = isValueBoolean(targetValue), sourceValueBoolean = isValueBoolean(sourceValue), combinedValue = targetValueBoolean && sourceValueBoolean ? targetValue : `${targetValue} ${sourceValue}`;
|
|
324
|
-
return combinedValue;
|
|
325
|
-
}
|
|
326
|
-
function isValueBoolean(value) {
|
|
327
|
-
const valueBoolean = typeof value === _constants.BOOLEAN;
|
|
328
|
-
return valueBoolean;
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
// lib/utilities/string.js
|
|
333
|
-
var require_string = __commonJS((exports) => {
|
|
334
|
-
"use strict";
|
|
335
|
-
Object.defineProperty(exports, "__esModule", {
|
|
336
|
-
value: true
|
|
337
|
-
});
|
|
338
|
-
Object.defineProperty(exports, "camelCaseToSnakeCase", {
|
|
339
|
-
enumerable: true,
|
|
340
|
-
get: function() {
|
|
341
|
-
return camelCaseToSnakeCase;
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
function camelCaseToSnakeCase(string) {
|
|
345
|
-
return string.replace(/([A-Z]+)/g, (match, characters) => {
|
|
346
|
-
const upperCaseCharacters = characters.toLowerCase(), snakeCaseCharacters = `-${upperCaseCharacters}`;
|
|
347
|
-
return snakeCaseCharacters;
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
});
|
|
351
|
-
|
|
352
|
-
// lib/utilities/name.js
|
|
353
|
-
var require_name = __commonJS((exports) => {
|
|
354
|
-
"use strict";
|
|
355
|
-
Object.defineProperty(exports, "__esModule", {
|
|
356
|
-
value: true
|
|
357
|
-
});
|
|
358
|
-
function _export(target, all) {
|
|
359
|
-
for (var name in all)
|
|
360
|
-
Object.defineProperty(target, name, {
|
|
361
|
-
enumerable: true,
|
|
362
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
_export(exports, {
|
|
366
|
-
get isHTMLAttributeName() {
|
|
367
|
-
return isHTMLAttributeName;
|
|
368
|
-
},
|
|
369
|
-
get isSVGAttributeName() {
|
|
370
|
-
return isSVGAttributeName;
|
|
371
|
-
},
|
|
372
|
-
get isSVGTagName() {
|
|
373
|
-
return isSVGTagName;
|
|
374
|
-
}
|
|
375
|
-
});
|
|
376
|
-
function isSVGTagName(tagName) {
|
|
377
|
-
return svgTagNames.includes(tagName);
|
|
378
|
-
}
|
|
379
|
-
function isSVGAttributeName(attributeName) {
|
|
380
|
-
return svgAttributeNames.includes(attributeName);
|
|
381
|
-
}
|
|
382
|
-
function isHTMLAttributeName(attributeName) {
|
|
383
|
-
return htmlAttributeNames.includes(attributeName);
|
|
384
|
-
}
|
|
385
|
-
var svgTagNames = [
|
|
386
|
-
"altGlyph",
|
|
387
|
-
"animate",
|
|
388
|
-
"animateColor",
|
|
389
|
-
"animateMotion",
|
|
390
|
-
"animateTransform",
|
|
391
|
-
"animation",
|
|
392
|
-
"audio",
|
|
393
|
-
"circle",
|
|
394
|
-
"clipPath",
|
|
395
|
-
"color-profile",
|
|
396
|
-
"cursor",
|
|
397
|
-
"defs",
|
|
398
|
-
"desc",
|
|
399
|
-
"discard",
|
|
400
|
-
"ellipse",
|
|
401
|
-
"feBlend",
|
|
402
|
-
"feColorMatrix",
|
|
403
|
-
"feComponentTransfer",
|
|
404
|
-
"feComposite",
|
|
405
|
-
"feConvolveMatrix",
|
|
406
|
-
"feDiffuseLighting",
|
|
407
|
-
"feDisplacementMap",
|
|
408
|
-
"feDistantLight",
|
|
409
|
-
"feDropShadow",
|
|
410
|
-
"feFlood",
|
|
411
|
-
"feFuncA",
|
|
412
|
-
"feFuncB",
|
|
413
|
-
"feFuncG",
|
|
414
|
-
"feFuncR",
|
|
415
|
-
"feGaussianBlur",
|
|
416
|
-
"feImage",
|
|
417
|
-
"feMerge",
|
|
418
|
-
"feMergeNode",
|
|
419
|
-
"feMorphology",
|
|
420
|
-
"feOffset",
|
|
421
|
-
"fePointLight",
|
|
422
|
-
"feSpecularLighting",
|
|
423
|
-
"feSpotLight",
|
|
424
|
-
"feTile",
|
|
425
|
-
"feTurbulence",
|
|
426
|
-
"filter",
|
|
427
|
-
"font",
|
|
428
|
-
"font-face",
|
|
429
|
-
"font-face-format",
|
|
430
|
-
"font-face-name",
|
|
431
|
-
"font-face-uri",
|
|
432
|
-
"foreignObject",
|
|
433
|
-
"g",
|
|
434
|
-
"glyph",
|
|
435
|
-
"glyphRef",
|
|
436
|
-
"handler",
|
|
437
|
-
"hatch",
|
|
438
|
-
"hatchpath",
|
|
439
|
-
"hkern",
|
|
440
|
-
"image",
|
|
441
|
-
"line",
|
|
442
|
-
"linearGradient",
|
|
443
|
-
"listener",
|
|
444
|
-
"marker",
|
|
445
|
-
"mask",
|
|
446
|
-
"mesh",
|
|
447
|
-
"meshgradient",
|
|
448
|
-
"meshpatch",
|
|
449
|
-
"meshrow",
|
|
450
|
-
"metadata",
|
|
451
|
-
"missing-glyph",
|
|
452
|
-
"mpath",
|
|
453
|
-
"path",
|
|
454
|
-
"pattern",
|
|
455
|
-
"polygon",
|
|
456
|
-
"polyline",
|
|
457
|
-
"prefetch",
|
|
458
|
-
"radialGradient",
|
|
459
|
-
"rect",
|
|
460
|
-
"script",
|
|
461
|
-
"set",
|
|
462
|
-
"solidcolor",
|
|
463
|
-
"stop",
|
|
464
|
-
"style",
|
|
465
|
-
"svg",
|
|
466
|
-
"switch",
|
|
467
|
-
"symbol",
|
|
468
|
-
"tbreak",
|
|
469
|
-
"text",
|
|
470
|
-
"textArea",
|
|
471
|
-
"textPath",
|
|
472
|
-
"title",
|
|
473
|
-
"tref",
|
|
474
|
-
"tspan",
|
|
475
|
-
"unknown",
|
|
476
|
-
"use",
|
|
477
|
-
"video",
|
|
478
|
-
"view",
|
|
479
|
-
"vkern"
|
|
480
|
-
];
|
|
481
|
-
var svgAttributeNames = [
|
|
482
|
-
"accent-height",
|
|
483
|
-
"accumulate",
|
|
484
|
-
"additive",
|
|
485
|
-
"alignment-baseline",
|
|
486
|
-
"alphabetic",
|
|
487
|
-
"amplitude",
|
|
488
|
-
"arabic-form",
|
|
489
|
-
"ascent",
|
|
490
|
-
"attributeName",
|
|
491
|
-
"attributeType",
|
|
492
|
-
"azimuth",
|
|
493
|
-
"bandwidth",
|
|
494
|
-
"baseFrequency",
|
|
495
|
-
"baseProfile",
|
|
496
|
-
"baseline-shift",
|
|
497
|
-
"bbox",
|
|
498
|
-
"begin",
|
|
499
|
-
"bias",
|
|
500
|
-
"by",
|
|
501
|
-
"calcMode",
|
|
502
|
-
"cap-height",
|
|
503
|
-
"clip",
|
|
504
|
-
"className",
|
|
505
|
-
"clip-path",
|
|
506
|
-
"clip-rule",
|
|
507
|
-
"clipPathUnits",
|
|
508
|
-
"color",
|
|
509
|
-
"color-interpolation",
|
|
510
|
-
"color-interpolation-filters",
|
|
511
|
-
"color-profile",
|
|
512
|
-
"color-rendering",
|
|
513
|
-
"contentScriptType",
|
|
514
|
-
"contentStyleType",
|
|
515
|
-
"crossorigin",
|
|
516
|
-
"cursor",
|
|
517
|
-
"cx",
|
|
518
|
-
"cy",
|
|
519
|
-
"d",
|
|
520
|
-
"defaultAction",
|
|
521
|
-
"descent",
|
|
522
|
-
"diffuseConstant",
|
|
523
|
-
"direction",
|
|
524
|
-
"display",
|
|
525
|
-
"divisor",
|
|
526
|
-
"dominant-baseline",
|
|
527
|
-
"download",
|
|
528
|
-
"dur",
|
|
529
|
-
"dx",
|
|
530
|
-
"dy",
|
|
531
|
-
"edgeMode",
|
|
532
|
-
"editable",
|
|
533
|
-
"elevation",
|
|
534
|
-
"enable-background",
|
|
535
|
-
"end",
|
|
536
|
-
"event",
|
|
537
|
-
"exponent",
|
|
538
|
-
"externalResourcesRequired",
|
|
539
|
-
"fill",
|
|
540
|
-
"fill-opacity",
|
|
541
|
-
"fill-rule",
|
|
542
|
-
"filter",
|
|
543
|
-
"filterRes",
|
|
544
|
-
"filterUnits",
|
|
545
|
-
"flood-color",
|
|
546
|
-
"flood-opacity",
|
|
547
|
-
"focusHighlight",
|
|
548
|
-
"focusable",
|
|
549
|
-
"font-family",
|
|
550
|
-
"font-size",
|
|
551
|
-
"font-size-adjust",
|
|
552
|
-
"font-stretch",
|
|
553
|
-
"font-style",
|
|
554
|
-
"font-variant",
|
|
555
|
-
"font-weight",
|
|
556
|
-
"format",
|
|
557
|
-
"fr",
|
|
558
|
-
"from",
|
|
559
|
-
"fx",
|
|
560
|
-
"fy",
|
|
561
|
-
"g1",
|
|
562
|
-
"g2",
|
|
563
|
-
"glyph-name",
|
|
564
|
-
"glyph-orientation-horizontal",
|
|
565
|
-
"glyph-orientation-vertical",
|
|
566
|
-
"glyphRef",
|
|
567
|
-
"gradientTransform",
|
|
568
|
-
"gradientUnits",
|
|
569
|
-
"handler",
|
|
570
|
-
"hanging",
|
|
571
|
-
"hatchContentUnits",
|
|
572
|
-
"hatchUnits",
|
|
573
|
-
"height",
|
|
574
|
-
"horiz-adv-x",
|
|
575
|
-
"horiz-origin-x",
|
|
576
|
-
"horiz-origin-y",
|
|
577
|
-
"href",
|
|
578
|
-
"hreflang",
|
|
579
|
-
"id",
|
|
580
|
-
"ideographic",
|
|
581
|
-
"image-rendering",
|
|
582
|
-
"in",
|
|
583
|
-
"in2",
|
|
584
|
-
"initialVisibility",
|
|
585
|
-
"intercept",
|
|
586
|
-
"k",
|
|
587
|
-
"k1",
|
|
588
|
-
"k2",
|
|
589
|
-
"k3",
|
|
590
|
-
"k4",
|
|
591
|
-
"kernelMatrix",
|
|
592
|
-
"kernelUnitLength",
|
|
593
|
-
"kerning",
|
|
594
|
-
"keyPoints",
|
|
595
|
-
"keySplines",
|
|
596
|
-
"keyTimes",
|
|
597
|
-
"lengthAdjust",
|
|
598
|
-
"letter-spacing",
|
|
599
|
-
"lighting-color",
|
|
600
|
-
"limitingConeAngle",
|
|
601
|
-
"local",
|
|
602
|
-
"marker-end",
|
|
603
|
-
"marker-mid",
|
|
604
|
-
"marker-start",
|
|
605
|
-
"markerHeight",
|
|
606
|
-
"markerUnits",
|
|
607
|
-
"markerWidth",
|
|
608
|
-
"mask",
|
|
609
|
-
"maskContentUnits",
|
|
610
|
-
"maskUnits",
|
|
611
|
-
"mathematical",
|
|
612
|
-
"max",
|
|
613
|
-
"media",
|
|
614
|
-
"mediaCharacterEncoding",
|
|
615
|
-
"mediaContentEncodings",
|
|
616
|
-
"mediaSize",
|
|
617
|
-
"mediaTime",
|
|
618
|
-
"method",
|
|
619
|
-
"min",
|
|
620
|
-
"mode",
|
|
621
|
-
"name",
|
|
622
|
-
"nav-down",
|
|
623
|
-
"nav-down-left",
|
|
624
|
-
"nav-down-right",
|
|
625
|
-
"nav-left",
|
|
626
|
-
"nav-next",
|
|
627
|
-
"nav-prev",
|
|
628
|
-
"nav-right",
|
|
629
|
-
"nav-up",
|
|
630
|
-
"nav-up-left",
|
|
631
|
-
"nav-up-right",
|
|
632
|
-
"numOctaves",
|
|
633
|
-
"observer",
|
|
634
|
-
"offset",
|
|
635
|
-
"opacity",
|
|
636
|
-
"operator",
|
|
637
|
-
"order",
|
|
638
|
-
"orient",
|
|
639
|
-
"orientation",
|
|
640
|
-
"origin",
|
|
641
|
-
"overflow",
|
|
642
|
-
"overlay",
|
|
643
|
-
"overline-position",
|
|
644
|
-
"overline-thickness",
|
|
645
|
-
"panose-1",
|
|
646
|
-
"path",
|
|
647
|
-
"pathLength",
|
|
648
|
-
"patternContentUnits",
|
|
649
|
-
"patternTransform",
|
|
650
|
-
"patternUnits",
|
|
651
|
-
"phase",
|
|
652
|
-
"pitch",
|
|
653
|
-
"playbackOrder",
|
|
654
|
-
"playbackorder",
|
|
655
|
-
"pointer-events",
|
|
656
|
-
"points",
|
|
657
|
-
"pointsAtX",
|
|
658
|
-
"pointsAtY",
|
|
659
|
-
"pointsAtZ",
|
|
660
|
-
"preserveAlpha",
|
|
661
|
-
"preserveAspectRatio",
|
|
662
|
-
"primitiveUnits",
|
|
663
|
-
"propagate",
|
|
664
|
-
"r",
|
|
665
|
-
"radius",
|
|
666
|
-
"refX",
|
|
667
|
-
"refY",
|
|
668
|
-
"rendering-intent",
|
|
669
|
-
"repeatCount",
|
|
670
|
-
"repeatDur",
|
|
671
|
-
"requiredExtensions",
|
|
672
|
-
"requiredFeatures",
|
|
673
|
-
"requiredFonts",
|
|
674
|
-
"requiredFormats",
|
|
675
|
-
"restart",
|
|
676
|
-
"result",
|
|
677
|
-
"rotate",
|
|
678
|
-
"rx",
|
|
679
|
-
"ry",
|
|
680
|
-
"scale",
|
|
681
|
-
"seed",
|
|
682
|
-
"shape-rendering",
|
|
683
|
-
"side",
|
|
684
|
-
"slope",
|
|
685
|
-
"snapshotTime",
|
|
686
|
-
"spacing",
|
|
687
|
-
"specularConstant",
|
|
688
|
-
"specularExponent",
|
|
689
|
-
"spreadMethod",
|
|
690
|
-
"src",
|
|
691
|
-
"startOffset",
|
|
692
|
-
"stdDeviation",
|
|
693
|
-
"stemh",
|
|
694
|
-
"stemv",
|
|
695
|
-
"stitchTiles",
|
|
696
|
-
"stop-color",
|
|
697
|
-
"stop-opacity",
|
|
698
|
-
"strikethrough-position",
|
|
699
|
-
"strikethrough-thickness",
|
|
700
|
-
"string",
|
|
701
|
-
"stroke",
|
|
702
|
-
"stroke-dasharray",
|
|
703
|
-
"stroke-dashoffset",
|
|
704
|
-
"stroke-linecap",
|
|
705
|
-
"stroke-linejoin",
|
|
706
|
-
"stroke-miterlimit",
|
|
707
|
-
"stroke-opacity",
|
|
708
|
-
"stroke-width",
|
|
709
|
-
"style",
|
|
710
|
-
"surfaceScale",
|
|
711
|
-
"syncBehavior",
|
|
712
|
-
"syncBehaviorDefault",
|
|
713
|
-
"syncMaster",
|
|
714
|
-
"syncTolerance",
|
|
715
|
-
"syncToleranceDefault",
|
|
716
|
-
"systemLanguage",
|
|
717
|
-
"tableValues",
|
|
718
|
-
"target",
|
|
719
|
-
"targetX",
|
|
720
|
-
"targetY",
|
|
721
|
-
"text-anchor",
|
|
722
|
-
"text-decoration",
|
|
723
|
-
"text-rendering",
|
|
724
|
-
"textLength",
|
|
725
|
-
"timelineBegin",
|
|
726
|
-
"timelinebegin",
|
|
727
|
-
"title",
|
|
728
|
-
"to",
|
|
729
|
-
"transform",
|
|
730
|
-
"transformBehavior",
|
|
731
|
-
"type",
|
|
732
|
-
"u1",
|
|
733
|
-
"u2",
|
|
734
|
-
"underline-position",
|
|
735
|
-
"underline-thickness",
|
|
736
|
-
"unicode",
|
|
737
|
-
"unicode-bidi",
|
|
738
|
-
"unicode-range",
|
|
739
|
-
"units-per-em",
|
|
740
|
-
"v-alphabetic",
|
|
741
|
-
"v-hanging",
|
|
742
|
-
"v-ideographic",
|
|
743
|
-
"v-mathematical",
|
|
744
|
-
"values",
|
|
745
|
-
"version",
|
|
746
|
-
"vert-adv-y",
|
|
747
|
-
"vert-origin-x",
|
|
748
|
-
"vert-origin-y",
|
|
749
|
-
"viewBox",
|
|
750
|
-
"viewTarget",
|
|
751
|
-
"visibility",
|
|
752
|
-
"width",
|
|
753
|
-
"widths",
|
|
754
|
-
"word-spacing",
|
|
755
|
-
"writing-mode",
|
|
756
|
-
"x",
|
|
757
|
-
"x-height",
|
|
758
|
-
"x1",
|
|
759
|
-
"x2",
|
|
760
|
-
"xChannelSelector",
|
|
761
|
-
"y",
|
|
762
|
-
"y1",
|
|
763
|
-
"y2",
|
|
764
|
-
"yChannelSelector",
|
|
765
|
-
"z",
|
|
766
|
-
"zoomAndPan"
|
|
767
|
-
];
|
|
768
|
-
var htmlAttributeNames = [
|
|
769
|
-
"accept",
|
|
770
|
-
"acceptCharset",
|
|
771
|
-
"accessKey",
|
|
772
|
-
"action",
|
|
773
|
-
"allow",
|
|
774
|
-
"allowFullScreen",
|
|
775
|
-
"allowTransparency",
|
|
776
|
-
"alt",
|
|
777
|
-
"async",
|
|
778
|
-
"autoComplete",
|
|
779
|
-
"autoFocus",
|
|
780
|
-
"autoPlay",
|
|
781
|
-
"capture",
|
|
782
|
-
"cellPadding",
|
|
783
|
-
"cellSpacing",
|
|
784
|
-
"challenge",
|
|
785
|
-
"charSet",
|
|
786
|
-
"checked",
|
|
787
|
-
"cite",
|
|
788
|
-
"classID",
|
|
789
|
-
"className",
|
|
790
|
-
"colSpan",
|
|
791
|
-
"cols",
|
|
792
|
-
"content",
|
|
793
|
-
"contentEditable",
|
|
794
|
-
"contextMenu",
|
|
795
|
-
"controls",
|
|
796
|
-
"coords",
|
|
797
|
-
"crossOrigin",
|
|
798
|
-
"data",
|
|
799
|
-
"dateTime",
|
|
800
|
-
"default",
|
|
801
|
-
"defer",
|
|
802
|
-
"dir",
|
|
803
|
-
"disabled",
|
|
804
|
-
"download",
|
|
805
|
-
"draggable",
|
|
806
|
-
"encType",
|
|
807
|
-
"form",
|
|
808
|
-
"formAction",
|
|
809
|
-
"formEncType",
|
|
810
|
-
"formMethod",
|
|
811
|
-
"formNoValidate",
|
|
812
|
-
"formTarget",
|
|
813
|
-
"frameBorder",
|
|
814
|
-
"headers",
|
|
815
|
-
"height",
|
|
816
|
-
"hidden",
|
|
817
|
-
"high",
|
|
818
|
-
"href",
|
|
819
|
-
"hrefLang",
|
|
820
|
-
"htmlFor",
|
|
821
|
-
"httpEquiv",
|
|
822
|
-
"icon",
|
|
823
|
-
"id",
|
|
824
|
-
"inputMode",
|
|
825
|
-
"integrity",
|
|
826
|
-
"is",
|
|
827
|
-
"keyParams",
|
|
828
|
-
"keyType",
|
|
829
|
-
"kind",
|
|
830
|
-
"label",
|
|
831
|
-
"lang",
|
|
832
|
-
"list",
|
|
833
|
-
"loop",
|
|
834
|
-
"low",
|
|
835
|
-
"manifest",
|
|
836
|
-
"marginHeight",
|
|
837
|
-
"marginWidth",
|
|
838
|
-
"max",
|
|
839
|
-
"maxLength",
|
|
840
|
-
"media",
|
|
841
|
-
"mediaGroup",
|
|
842
|
-
"method",
|
|
843
|
-
"min",
|
|
844
|
-
"minLength",
|
|
845
|
-
"multiple",
|
|
846
|
-
"muted",
|
|
847
|
-
"name",
|
|
848
|
-
"noValidate",
|
|
849
|
-
"nonce",
|
|
850
|
-
"open",
|
|
851
|
-
"optimum",
|
|
852
|
-
"pattern",
|
|
853
|
-
"placeholder",
|
|
854
|
-
"poster",
|
|
855
|
-
"preload",
|
|
856
|
-
"profile",
|
|
857
|
-
"radioGroup",
|
|
858
|
-
"readOnly",
|
|
859
|
-
"rel",
|
|
860
|
-
"required",
|
|
861
|
-
"reversed",
|
|
862
|
-
"role",
|
|
863
|
-
"rowSpan",
|
|
864
|
-
"rows",
|
|
865
|
-
"sandbox",
|
|
866
|
-
"scope",
|
|
867
|
-
"scoped",
|
|
868
|
-
"scrolling",
|
|
869
|
-
"seamless",
|
|
870
|
-
"selected",
|
|
871
|
-
"shape",
|
|
872
|
-
"size",
|
|
873
|
-
"sizes",
|
|
874
|
-
"span",
|
|
875
|
-
"spellCheck",
|
|
876
|
-
"src",
|
|
877
|
-
"srcDoc",
|
|
878
|
-
"srcLang",
|
|
879
|
-
"srcSet",
|
|
880
|
-
"start",
|
|
881
|
-
"step",
|
|
882
|
-
"style",
|
|
883
|
-
"summary",
|
|
884
|
-
"tabIndex",
|
|
885
|
-
"target",
|
|
886
|
-
"title",
|
|
887
|
-
"type",
|
|
888
|
-
"useMap",
|
|
889
|
-
"value",
|
|
890
|
-
"width",
|
|
891
|
-
"wmode",
|
|
892
|
-
"wrap"
|
|
893
|
-
];
|
|
894
|
-
});
|
|
895
|
-
|
|
896
|
-
// lib/utilities/element.js
|
|
897
|
-
var require_element = __commonJS((exports) => {
|
|
898
|
-
"use strict";
|
|
899
|
-
Object.defineProperty(exports, "__esModule", {
|
|
900
|
-
value: true
|
|
901
|
-
});
|
|
902
|
-
function _export(target, all) {
|
|
903
|
-
for (var name in all)
|
|
904
|
-
Object.defineProperty(target, name, {
|
|
905
|
-
enumerable: true,
|
|
906
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
907
|
-
});
|
|
908
|
-
}
|
|
909
|
-
_export(exports, {
|
|
910
|
-
get constructElement() {
|
|
911
|
-
return constructElement;
|
|
912
|
-
},
|
|
913
|
-
get default() {
|
|
914
|
-
return _default;
|
|
915
|
-
},
|
|
916
|
-
get destroyElement() {
|
|
917
|
-
return destroyElement;
|
|
918
|
-
},
|
|
919
|
-
get mountElement() {
|
|
920
|
-
return mountElement;
|
|
921
|
-
},
|
|
922
|
-
get unmountElement() {
|
|
923
|
-
return unmountElement;
|
|
924
|
-
}
|
|
925
|
-
});
|
|
926
|
-
function constructElement(element, domElement) {
|
|
927
|
-
element.domElement = domElement;
|
|
928
|
-
domElement.__element__ = element;
|
|
929
|
-
}
|
|
930
|
-
function destroyElement(element) {
|
|
931
|
-
const descendantElements = element.getDescendantElements(), elements = [
|
|
932
|
-
element,
|
|
933
|
-
...descendantElements
|
|
934
|
-
];
|
|
935
|
-
elements.forEach((element2) => {
|
|
936
|
-
const domElement = element2.getDOMElement();
|
|
937
|
-
delete element2.domElement;
|
|
938
|
-
delete domElement.__element__;
|
|
939
|
-
});
|
|
940
|
-
}
|
|
941
|
-
function mountElement(element) {
|
|
942
|
-
const descendantElements = element.getDescendantElements(), elements = [
|
|
943
|
-
element,
|
|
944
|
-
...descendantElements
|
|
945
|
-
];
|
|
946
|
-
elements.reverse();
|
|
947
|
-
elements.forEach((element2) => {
|
|
948
|
-
element2.didMount && element2.didMount();
|
|
949
|
-
});
|
|
950
|
-
}
|
|
951
|
-
function unmountElement(element) {
|
|
952
|
-
const descendantElements = element.getDescendantElements(), elements = [
|
|
953
|
-
element,
|
|
954
|
-
...descendantElements
|
|
955
|
-
];
|
|
956
|
-
elements.forEach((element2) => {
|
|
957
|
-
element2.willUnmount && element2.willUnmount();
|
|
958
|
-
});
|
|
959
|
-
}
|
|
960
|
-
var _default = {
|
|
961
|
-
constructElement,
|
|
962
|
-
destroyElement,
|
|
963
|
-
mountElement,
|
|
964
|
-
unmountElement
|
|
965
|
-
};
|
|
966
|
-
});
|
|
967
|
-
|
|
968
|
-
// lib/utilities/dom.js
|
|
969
|
-
var require_dom = __commonJS((exports) => {
|
|
970
|
-
"use strict";
|
|
971
|
-
Object.defineProperty(exports, "__esModule", {
|
|
972
|
-
value: true
|
|
973
|
-
});
|
|
974
|
-
function _export(target, all) {
|
|
975
|
-
for (var name in all)
|
|
976
|
-
Object.defineProperty(target, name, {
|
|
977
|
-
enumerable: true,
|
|
978
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
979
|
-
});
|
|
980
|
-
}
|
|
981
|
-
_export(exports, {
|
|
982
|
-
get ascendantDOMNodesFromDOMNode() {
|
|
983
|
-
return ascendantDOMNodesFromDOMNode;
|
|
984
|
-
},
|
|
985
|
-
get descendantDOMNodesFromDOMNode() {
|
|
986
|
-
return descendantDOMNodesFromDOMNode;
|
|
987
|
-
},
|
|
988
|
-
get domNodeMatchesSelector() {
|
|
989
|
-
return domNodeMatchesSelector;
|
|
990
|
-
},
|
|
991
|
-
get elementsFromDOMElements() {
|
|
992
|
-
return elementsFromDOMElements;
|
|
993
|
-
},
|
|
994
|
-
get filterDOMNodes() {
|
|
995
|
-
return filterDOMNodes;
|
|
996
|
-
},
|
|
997
|
-
get filterDOMNodesBySelector() {
|
|
998
|
-
return filterDOMNodesBySelector;
|
|
999
|
-
}
|
|
1000
|
-
});
|
|
1001
|
-
var _array = require_array();
|
|
1002
|
-
var _constants = require_constants();
|
|
1003
|
-
function elementsFromDOMElements(domElements) {
|
|
1004
|
-
const domElementsWithElements = filterDOMNodes(domElements, (domElement) => {
|
|
1005
|
-
if (domElement.__element__) {
|
|
1006
|
-
return true;
|
|
1007
|
-
}
|
|
1008
|
-
}), elements = domElementsWithElements.map((domElement) => {
|
|
1009
|
-
const element = domElement.__element__;
|
|
1010
|
-
return element;
|
|
1011
|
-
});
|
|
1012
|
-
return elements;
|
|
1013
|
-
}
|
|
1014
|
-
function ascendantDOMNodesFromDOMNode(domNode, height, ascendantDOMNodes = []) {
|
|
1015
|
-
if (height > 0) {
|
|
1016
|
-
const parentDOMNode = domNode.parentElement;
|
|
1017
|
-
if (parentDOMNode !== null) {
|
|
1018
|
-
ascendantDOMNodes.push(parentDOMNode);
|
|
1019
|
-
height--;
|
|
1020
|
-
ascendantDOMNodesFromDOMNode(parentDOMNode, height, ascendantDOMNodes);
|
|
1021
|
-
}
|
|
1022
|
-
}
|
|
1023
|
-
return ascendantDOMNodes;
|
|
1024
|
-
}
|
|
1025
|
-
function descendantDOMNodesFromDOMNode(domNode, depth, descendantDOMNodes = []) {
|
|
1026
|
-
if (depth > 0) {
|
|
1027
|
-
const childDOMNodes = domNode.childNodes;
|
|
1028
|
-
(0, _array.push)(descendantDOMNodes, childDOMNodes);
|
|
1029
|
-
depth--;
|
|
1030
|
-
childDOMNodes.forEach((childDOMNode) => {
|
|
1031
|
-
descendantDOMNodesFromDOMNode(childDOMNode, depth, descendantDOMNodes);
|
|
1032
|
-
});
|
|
1033
|
-
}
|
|
1034
|
-
return descendantDOMNodes;
|
|
1035
|
-
}
|
|
1036
|
-
function filterDOMNodesBySelector(domNodes, selector) {
|
|
1037
|
-
const filteredDOMNodes = filterDOMNodes(domNodes, (domNode) => {
|
|
1038
|
-
if (domNodeMatchesSelector(domNode, selector)) {
|
|
1039
|
-
return true;
|
|
1040
|
-
}
|
|
1041
|
-
});
|
|
1042
|
-
return filteredDOMNodes;
|
|
1043
|
-
}
|
|
1044
|
-
function domNodeMatchesSelector(domNode, selector) {
|
|
1045
|
-
const domNodeType = domNode.nodeType;
|
|
1046
|
-
switch (domNodeType) {
|
|
1047
|
-
case Node.ELEMENT_NODE: {
|
|
1048
|
-
const domElement = domNode;
|
|
1049
|
-
return domElement.matches(selector);
|
|
1050
|
-
}
|
|
1051
|
-
case Node.TEXT_NODE: {
|
|
1052
|
-
if (selector === _constants.WILDCARD) {
|
|
1053
|
-
return true;
|
|
1054
|
-
}
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
return false;
|
|
1058
|
-
}
|
|
1059
|
-
function filterDOMNodes(domNodes, test) {
|
|
1060
|
-
const filteredDOMNodes = [], domNodesLength = domNodes.length;
|
|
1061
|
-
for (let index = 0; index < domNodesLength; index++) {
|
|
1062
|
-
const domNode = domNodes[index], result = test(domNode);
|
|
1063
|
-
if (result) {
|
|
1064
|
-
filteredDOMNodes.push(domNode);
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
return filteredDOMNodes;
|
|
1068
|
-
}
|
|
1069
|
-
});
|
|
1070
|
-
|
|
1071
|
-
// lib/mixins/element.js
|
|
1072
|
-
var require_element2 = __commonJS((exports) => {
|
|
1073
|
-
"use strict";
|
|
1074
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1075
|
-
value: true
|
|
1076
|
-
});
|
|
1077
|
-
function _export(target, all) {
|
|
1078
|
-
for (var name in all)
|
|
1079
|
-
Object.defineProperty(target, name, {
|
|
1080
|
-
enumerable: true,
|
|
1081
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
1082
|
-
});
|
|
1083
|
-
}
|
|
1084
|
-
_export(exports, {
|
|
1085
|
-
get default() {
|
|
1086
|
-
return _default;
|
|
1087
|
-
},
|
|
1088
|
-
get getAscendantElements() {
|
|
1089
|
-
return getAscendantElements;
|
|
1090
|
-
},
|
|
1091
|
-
get getChildElements() {
|
|
1092
|
-
return getChildElements;
|
|
1093
|
-
},
|
|
1094
|
-
get getDescendantElements() {
|
|
1095
|
-
return getDescendantElements;
|
|
1096
|
-
},
|
|
1097
|
-
get getNextSiblingElement() {
|
|
1098
|
-
return getNextSiblingElement;
|
|
1099
|
-
},
|
|
1100
|
-
get getParentElement() {
|
|
1101
|
-
return getParentElement;
|
|
1102
|
-
},
|
|
1103
|
-
get getPreviousSiblingElement() {
|
|
1104
|
-
return getPreviousSiblingElement;
|
|
1105
|
-
}
|
|
1106
|
-
});
|
|
1107
|
-
var _array = require_array();
|
|
1108
|
-
var _constants = require_constants();
|
|
1109
|
-
var _dom = require_dom();
|
|
1110
|
-
function getParentElement(selector = _constants.WILDCARD) {
|
|
1111
|
-
let parentElement = null;
|
|
1112
|
-
const parentDOMElement = this.domElement.parentElement;
|
|
1113
|
-
if (parentDOMElement !== null) {
|
|
1114
|
-
if (parentDOMElement.matches(selector)) {
|
|
1115
|
-
const parentDOMElements = [
|
|
1116
|
-
parentDOMElement
|
|
1117
|
-
], parentElements = (0, _dom.elementsFromDOMElements)(parentDOMElements), firstParentElement = (0, _array.first)(parentElements);
|
|
1118
|
-
parentElement = firstParentElement || null;
|
|
1119
|
-
}
|
|
1120
|
-
}
|
|
1121
|
-
return parentElement;
|
|
1122
|
-
}
|
|
1123
|
-
function getChildElements(selector = _constants.WILDCARD) {
|
|
1124
|
-
const childDOMNodes = this.domElement.childNodes, childDOMElements = (0, _dom.filterDOMNodesBySelector)(childDOMNodes, selector), childElements = (0, _dom.elementsFromDOMElements)(childDOMElements);
|
|
1125
|
-
return childElements;
|
|
1126
|
-
}
|
|
1127
|
-
function getAscendantElements(selector = _constants.WILDCARD, maximumHeight = Infinity) {
|
|
1128
|
-
const height = maximumHeight, domNode = this.domElement, ascendantDOMNodes = (0, _dom.ascendantDOMNodesFromDOMNode)(domNode, height), ascendantDOMElements = (0, _dom.filterDOMNodesBySelector)(ascendantDOMNodes, selector), ascendantElements = (0, _dom.elementsFromDOMElements)(ascendantDOMElements);
|
|
1129
|
-
return ascendantElements;
|
|
1130
|
-
}
|
|
1131
|
-
function getDescendantElements(selector = _constants.WILDCARD, maximumDepth = Infinity) {
|
|
1132
|
-
const depth = maximumDepth, domNode = this.domElement, descendantDOMNodes = (0, _dom.descendantDOMNodesFromDOMNode)(domNode, depth), descendantDOMElements = (0, _dom.filterDOMNodesBySelector)(descendantDOMNodes, selector), descendantElements = (0, _dom.elementsFromDOMElements)(descendantDOMElements);
|
|
1133
|
-
return descendantElements;
|
|
1134
|
-
}
|
|
1135
|
-
function getNextSiblingElement(selector = _constants.WILDCARD) {
|
|
1136
|
-
let nextSiblingElement = null;
|
|
1137
|
-
const nextSiblingDOMNode = this.domElement.nextSibling;
|
|
1138
|
-
if (nextSiblingDOMNode !== null && (0, _dom.domNodeMatchesSelector)(nextSiblingDOMNode, selector)) {
|
|
1139
|
-
nextSiblingElement = nextSiblingDOMNode.__element__ || null;
|
|
1140
|
-
}
|
|
1141
|
-
return nextSiblingElement;
|
|
1142
|
-
}
|
|
1143
|
-
function getPreviousSiblingElement(selector = _constants.WILDCARD) {
|
|
1144
|
-
let previousSiblingElement = null;
|
|
1145
|
-
const previousSiblingDOMNode = this.domElement.previousSibling;
|
|
1146
|
-
if (previousSiblingDOMNode !== null && (0, _dom.domNodeMatchesSelector)(previousSiblingDOMNode, selector)) {
|
|
1147
|
-
previousSiblingElement = previousSiblingDOMNode.__element__ || null;
|
|
1148
|
-
}
|
|
1149
|
-
return previousSiblingElement;
|
|
1150
|
-
}
|
|
1151
|
-
var elementMixins = {
|
|
1152
|
-
getParentElement,
|
|
1153
|
-
getChildElements,
|
|
1154
|
-
getAscendantElements,
|
|
1155
|
-
getDescendantElements,
|
|
1156
|
-
getNextSiblingElement,
|
|
1157
|
-
getPreviousSiblingElement
|
|
1158
|
-
};
|
|
1159
|
-
var _default = elementMixins;
|
|
1160
|
-
});
|
|
1161
|
-
|
|
1162
|
-
// lib/textElement.js
|
|
1163
|
-
var require_textElement = __commonJS((exports) => {
|
|
1164
|
-
"use strict";
|
|
1165
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1166
|
-
value: true
|
|
1167
|
-
});
|
|
1168
|
-
Object.defineProperty(exports, "default", {
|
|
1169
|
-
enumerable: true,
|
|
1170
|
-
get: function() {
|
|
1171
|
-
return TextElement;
|
|
1172
|
-
}
|
|
1173
|
-
});
|
|
1174
|
-
var _offset = /* @__PURE__ */ _interop_require_default(require_offset());
|
|
1175
|
-
var _bounds = /* @__PURE__ */ _interop_require_default(require_bounds());
|
|
1176
|
-
var _element = require_element();
|
|
1177
|
-
var _element1 = require_element2();
|
|
1178
|
-
function _interop_require_default(obj) {
|
|
1179
|
-
return obj && obj.__esModule ? obj : {
|
|
1180
|
-
default: obj
|
|
1181
|
-
};
|
|
1182
|
-
}
|
|
1183
|
-
var TextElement = class {
|
|
1184
|
-
constructor(text) {
|
|
1185
|
-
const element = this, domElement = document.createTextNode(text);
|
|
1186
|
-
(0, _element.constructElement)(element, domElement);
|
|
1187
|
-
}
|
|
1188
|
-
getDOMElement() {
|
|
1189
|
-
return this.domElement;
|
|
1190
|
-
}
|
|
1191
|
-
getOffset() {
|
|
1192
|
-
const offset = _offset.default.fromDOMElement(this.domElement);
|
|
1193
|
-
return offset;
|
|
1194
|
-
}
|
|
1195
|
-
getBounds() {
|
|
1196
|
-
const bounds = _bounds.default.fromDOMElement(this.domElement);
|
|
1197
|
-
return bounds;
|
|
1198
|
-
}
|
|
1199
|
-
getWidth() {
|
|
1200
|
-
return this.domElement.offsetWidth;
|
|
1201
|
-
}
|
|
1202
|
-
getHeight() {
|
|
1203
|
-
return this.domElement.offsetHeight;
|
|
1204
|
-
}
|
|
1205
|
-
getText() {
|
|
1206
|
-
const nodeValue = this.domElement.nodeValue, text = nodeValue;
|
|
1207
|
-
return text;
|
|
1208
|
-
}
|
|
1209
|
-
setText(text) {
|
|
1210
|
-
const nodeValue = text;
|
|
1211
|
-
this.domElement.nodeValue = nodeValue;
|
|
1212
|
-
}
|
|
1213
|
-
prependTo(parentElement) {
|
|
1214
|
-
parentElement.prepend(this);
|
|
1215
|
-
}
|
|
1216
|
-
appendTo(parentElement) {
|
|
1217
|
-
parentElement.append(this);
|
|
1218
|
-
}
|
|
1219
|
-
addTo(parentElement) {
|
|
1220
|
-
parentElement.add(this);
|
|
1221
|
-
}
|
|
1222
|
-
removeFrom(parentElement) {
|
|
1223
|
-
parentElement.remove(this);
|
|
1224
|
-
}
|
|
1225
|
-
insertBefore(siblingElement) {
|
|
1226
|
-
const parentDOMNode = siblingElement.domElement.parentNode, siblingDOMElement = siblingElement.domElement;
|
|
1227
|
-
parentDOMNode.insertBefore(this.domElement, siblingDOMElement);
|
|
1228
|
-
}
|
|
1229
|
-
insertAfter(siblingElement) {
|
|
1230
|
-
const parentDOMNode = siblingElement.domElement.parentNode, siblingDOMElement = siblingElement.domElement;
|
|
1231
|
-
parentDOMNode.insertBefore(this.domElement, siblingDOMElement.nextSibling);
|
|
1232
|
-
}
|
|
1233
|
-
remove() {
|
|
1234
|
-
this.domElement.remove();
|
|
1235
|
-
}
|
|
1236
|
-
destroy() {
|
|
1237
|
-
const element = this;
|
|
1238
|
-
(0, _element.destroyElement)(element);
|
|
1239
|
-
}
|
|
1240
|
-
};
|
|
1241
|
-
Object.assign(TextElement.prototype, {
|
|
1242
|
-
getParentElement: _element1.getParentElement,
|
|
1243
|
-
getAscendantElements: _element1.getAscendantElements,
|
|
1244
|
-
getNextSiblingElement: _element1.getNextSiblingElement,
|
|
1245
|
-
getPreviousSiblingElement: _element1.getPreviousSiblingElement
|
|
1246
|
-
});
|
|
1247
|
-
});
|
|
1248
|
-
|
|
1249
|
-
// lib/utilities/elements.js
|
|
1250
|
-
var require_elements = __commonJS((exports) => {
|
|
1251
|
-
"use strict";
|
|
1252
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1253
|
-
value: true
|
|
1254
|
-
});
|
|
1255
|
-
function _export(target, all) {
|
|
1256
|
-
for (var name in all)
|
|
1257
|
-
Object.defineProperty(target, name, {
|
|
1258
|
-
enumerable: true,
|
|
1259
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
1260
|
-
});
|
|
1261
|
-
}
|
|
1262
|
-
_export(exports, {
|
|
1263
|
-
get removeFalseyElements() {
|
|
1264
|
-
return removeFalseyElements;
|
|
1265
|
-
},
|
|
1266
|
-
get replaceStringsWithTextElements() {
|
|
1267
|
-
return replaceStringsWithTextElements;
|
|
1268
|
-
}
|
|
1269
|
-
});
|
|
1270
|
-
var _textElement = /* @__PURE__ */ _interop_require_default(require_textElement());
|
|
1271
|
-
var _constants = require_constants();
|
|
1272
|
-
function _interop_require_default(obj) {
|
|
1273
|
-
return obj && obj.__esModule ? obj : {
|
|
1274
|
-
default: obj
|
|
1275
|
-
};
|
|
1276
|
-
}
|
|
1277
|
-
function removeFalseyElements(elements) {
|
|
1278
|
-
elements = elements.reduce((elements2, element) => {
|
|
1279
|
-
if (element) {
|
|
1280
|
-
elements2.push(element);
|
|
1281
|
-
}
|
|
1282
|
-
return elements2;
|
|
1283
|
-
}, []);
|
|
1284
|
-
return elements;
|
|
1285
|
-
}
|
|
1286
|
-
function replaceStringsWithTextElements(elements) {
|
|
1287
|
-
elements = elements.map((element) => {
|
|
1288
|
-
if (typeof element === _constants.STRING) {
|
|
1289
|
-
const text = element, textElement = new _textElement.default(text);
|
|
1290
|
-
element = textElement;
|
|
1291
|
-
}
|
|
1292
|
-
return element;
|
|
1293
|
-
});
|
|
1294
|
-
return elements;
|
|
1295
|
-
}
|
|
1296
|
-
});
|
|
1297
|
-
|
|
1298
|
-
// lib/eventTypes.js
|
|
1299
|
-
var require_eventTypes = __commonJS((exports) => {
|
|
1300
|
-
"use strict";
|
|
1301
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1302
|
-
value: true
|
|
1303
|
-
});
|
|
1304
|
-
function _export(target, all) {
|
|
1305
|
-
for (var name in all)
|
|
1306
|
-
Object.defineProperty(target, name, {
|
|
1307
|
-
enumerable: true,
|
|
1308
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
1309
|
-
});
|
|
1310
|
-
}
|
|
1311
|
-
_export(exports, {
|
|
1312
|
-
get AUXCLICK_EVENT_TYPE() {
|
|
1313
|
-
return AUXCLICK_EVENT_TYPE;
|
|
1314
|
-
},
|
|
1315
|
-
get BLUR_EVENT_TYPE() {
|
|
1316
|
-
return BLUR_EVENT_TYPE;
|
|
1317
|
-
},
|
|
1318
|
-
get CHANGE_EVENT_TYPE() {
|
|
1319
|
-
return CHANGE_EVENT_TYPE;
|
|
1320
|
-
},
|
|
1321
|
-
get CLICK_EVENT_TYPE() {
|
|
1322
|
-
return CLICK_EVENT_TYPE;
|
|
1323
|
-
},
|
|
1324
|
-
get CONTEXTMENU_EVENT_TYPE() {
|
|
1325
|
-
return CONTEXTMENU_EVENT_TYPE;
|
|
1326
|
-
},
|
|
1327
|
-
get COPY_EVENT_TYPE() {
|
|
1328
|
-
return COPY_EVENT_TYPE;
|
|
1329
|
-
},
|
|
1330
|
-
get CUT_EVENT_TYPE() {
|
|
1331
|
-
return CUT_EVENT_TYPE;
|
|
1332
|
-
},
|
|
1333
|
-
get DBLCLICK_EVENT_TYPE() {
|
|
1334
|
-
return DBLCLICK_EVENT_TYPE;
|
|
1335
|
-
},
|
|
1336
|
-
get ERROR_EVENT_TYPE() {
|
|
1337
|
-
return ERROR_EVENT_TYPE;
|
|
1338
|
-
},
|
|
1339
|
-
get FOCUS_EVENT_TYPE() {
|
|
1340
|
-
return FOCUS_EVENT_TYPE;
|
|
1341
|
-
},
|
|
1342
|
-
get FULLSCREENCHANGE_EVENT_TYPE() {
|
|
1343
|
-
return FULLSCREENCHANGE_EVENT_TYPE;
|
|
1344
|
-
},
|
|
1345
|
-
get INPUT_EVENT_TYPE() {
|
|
1346
|
-
return INPUT_EVENT_TYPE;
|
|
1347
|
-
},
|
|
1348
|
-
get KEYDOWN_EVENT_TYPE() {
|
|
1349
|
-
return KEYDOWN_EVENT_TYPE;
|
|
1350
|
-
},
|
|
1351
|
-
get KEYUP_EVENT_TYPE() {
|
|
1352
|
-
return KEYUP_EVENT_TYPE;
|
|
1353
|
-
},
|
|
1354
|
-
get MOUSEDOWN_EVENT_TYPE() {
|
|
1355
|
-
return MOUSEDOWN_EVENT_TYPE;
|
|
1356
|
-
},
|
|
1357
|
-
get MOUSEMOVE_EVENT_TYPE() {
|
|
1358
|
-
return MOUSEMOVE_EVENT_TYPE;
|
|
1359
|
-
},
|
|
1360
|
-
get MOUSEOUT_EVENT_TYPE() {
|
|
1361
|
-
return MOUSEOUT_EVENT_TYPE;
|
|
1362
|
-
},
|
|
1363
|
-
get MOUSEOVER_EVENT_TYPE() {
|
|
1364
|
-
return MOUSEOVER_EVENT_TYPE;
|
|
1365
|
-
},
|
|
1366
|
-
get MOUSEUP_EVENT_TYPE() {
|
|
1367
|
-
return MOUSEUP_EVENT_TYPE;
|
|
1368
|
-
},
|
|
1369
|
-
get PASTE_EVENT_TYPE() {
|
|
1370
|
-
return PASTE_EVENT_TYPE;
|
|
1371
|
-
},
|
|
1372
|
-
get RESIZE_EVENT_TYPE() {
|
|
1373
|
-
return RESIZE_EVENT_TYPE;
|
|
1374
|
-
},
|
|
1375
|
-
get SCROLL_EVENT_TYPE() {
|
|
1376
|
-
return SCROLL_EVENT_TYPE;
|
|
1377
|
-
},
|
|
1378
|
-
get SELECTIONCHANGE_EVENT_TYPE() {
|
|
1379
|
-
return SELECTIONCHANGE_EVENT_TYPE;
|
|
1380
|
-
},
|
|
1381
|
-
get SELECT_EVENT_TYPE() {
|
|
1382
|
-
return SELECT_EVENT_TYPE;
|
|
1383
|
-
},
|
|
1384
|
-
get TOUCHEND_EVENT_TYPE() {
|
|
1385
|
-
return TOUCHEND_EVENT_TYPE;
|
|
1386
|
-
},
|
|
1387
|
-
get TOUCHMOVE_EVENT_TYPE() {
|
|
1388
|
-
return TOUCHMOVE_EVENT_TYPE;
|
|
1389
|
-
},
|
|
1390
|
-
get TOUCHSTART_EVENT_TYPE() {
|
|
1391
|
-
return TOUCHSTART_EVENT_TYPE;
|
|
1392
|
-
},
|
|
1393
|
-
get UNHANDLEDREJECTION_EVENT_TYPE() {
|
|
1394
|
-
return UNHANDLEDREJECTION_EVENT_TYPE;
|
|
1395
|
-
},
|
|
1396
|
-
get WHEEL_EVENT_TYPE() {
|
|
1397
|
-
return WHEEL_EVENT_TYPE;
|
|
1398
|
-
},
|
|
1399
|
-
get default() {
|
|
1400
|
-
return _default;
|
|
1401
|
-
}
|
|
1402
|
-
});
|
|
1403
|
-
var CUT_EVENT_TYPE = "cut";
|
|
1404
|
-
var COPY_EVENT_TYPE = "copy";
|
|
1405
|
-
var BLUR_EVENT_TYPE = "blur";
|
|
1406
|
-
var ERROR_EVENT_TYPE = "error";
|
|
1407
|
-
var PASTE_EVENT_TYPE = "paste";
|
|
1408
|
-
var WHEEL_EVENT_TYPE = "wheel";
|
|
1409
|
-
var INPUT_EVENT_TYPE = "input";
|
|
1410
|
-
var FOCUS_EVENT_TYPE = "focus";
|
|
1411
|
-
var CLICK_EVENT_TYPE = "click";
|
|
1412
|
-
var KEYUP_EVENT_TYPE = "keyup";
|
|
1413
|
-
var SELECT_EVENT_TYPE = "select";
|
|
1414
|
-
var CHANGE_EVENT_TYPE = "change";
|
|
1415
|
-
var RESIZE_EVENT_TYPE = "resize";
|
|
1416
|
-
var SCROLL_EVENT_TYPE = "scroll";
|
|
1417
|
-
var KEYDOWN_EVENT_TYPE = "keydown";
|
|
1418
|
-
var MOUSEUP_EVENT_TYPE = "mouseup";
|
|
1419
|
-
var AUXCLICK_EVENT_TYPE = "auxclick";
|
|
1420
|
-
var MOUSEOUT_EVENT_TYPE = "mouseout";
|
|
1421
|
-
var DBLCLICK_EVENT_TYPE = "dblclick";
|
|
1422
|
-
var TOUCHEND_EVENT_TYPE = "touchend";
|
|
1423
|
-
var TOUCHMOVE_EVENT_TYPE = "touchmove";
|
|
1424
|
-
var MOUSEOVER_EVENT_TYPE = "mouseover";
|
|
1425
|
-
var MOUSEDOWN_EVENT_TYPE = "mousedown";
|
|
1426
|
-
var MOUSEMOVE_EVENT_TYPE = "mousemove";
|
|
1427
|
-
var TOUCHSTART_EVENT_TYPE = "touchstart";
|
|
1428
|
-
var CONTEXTMENU_EVENT_TYPE = "contextmenu";
|
|
1429
|
-
var SELECTIONCHANGE_EVENT_TYPE = "selectionchange";
|
|
1430
|
-
var FULLSCREENCHANGE_EVENT_TYPE = "fullscreenchange";
|
|
1431
|
-
var UNHANDLEDREJECTION_EVENT_TYPE = "unhandledrejection";
|
|
1432
|
-
var _default = {
|
|
1433
|
-
CUT_EVENT_TYPE,
|
|
1434
|
-
COPY_EVENT_TYPE,
|
|
1435
|
-
BLUR_EVENT_TYPE,
|
|
1436
|
-
ERROR_EVENT_TYPE,
|
|
1437
|
-
PASTE_EVENT_TYPE,
|
|
1438
|
-
WHEEL_EVENT_TYPE,
|
|
1439
|
-
INPUT_EVENT_TYPE,
|
|
1440
|
-
FOCUS_EVENT_TYPE,
|
|
1441
|
-
CLICK_EVENT_TYPE,
|
|
1442
|
-
KEYUP_EVENT_TYPE,
|
|
1443
|
-
SELECT_EVENT_TYPE,
|
|
1444
|
-
CHANGE_EVENT_TYPE,
|
|
1445
|
-
RESIZE_EVENT_TYPE,
|
|
1446
|
-
SCROLL_EVENT_TYPE,
|
|
1447
|
-
KEYDOWN_EVENT_TYPE,
|
|
1448
|
-
MOUSEUP_EVENT_TYPE,
|
|
1449
|
-
AUXCLICK_EVENT_TYPE,
|
|
1450
|
-
MOUSEOUT_EVENT_TYPE,
|
|
1451
|
-
DBLCLICK_EVENT_TYPE,
|
|
1452
|
-
TOUCHEND_EVENT_TYPE,
|
|
1453
|
-
TOUCHMOVE_EVENT_TYPE,
|
|
1454
|
-
MOUSEOVER_EVENT_TYPE,
|
|
1455
|
-
MOUSEDOWN_EVENT_TYPE,
|
|
1456
|
-
MOUSEMOVE_EVENT_TYPE,
|
|
1457
|
-
TOUCHSTART_EVENT_TYPE,
|
|
1458
|
-
CONTEXTMENU_EVENT_TYPE,
|
|
1459
|
-
SELECTIONCHANGE_EVENT_TYPE,
|
|
1460
|
-
FULLSCREENCHANGE_EVENT_TYPE,
|
|
1461
|
-
UNHANDLEDREJECTION_EVENT_TYPE
|
|
1462
|
-
};
|
|
1463
|
-
});
|
|
1464
|
-
|
|
1465
|
-
// lib/mixins/jsx.js
|
|
1466
|
-
var require_jsx = __commonJS((exports) => {
|
|
1467
|
-
"use strict";
|
|
1468
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1469
|
-
value: true
|
|
1470
|
-
});
|
|
1471
|
-
Object.defineProperty(exports, "default", {
|
|
1472
|
-
enumerable: true,
|
|
1473
|
-
get: function() {
|
|
1474
|
-
return _default;
|
|
1475
|
-
}
|
|
1476
|
-
});
|
|
1477
|
-
var _array = require_array();
|
|
1478
|
-
var _object = require_object();
|
|
1479
|
-
var _string = require_string();
|
|
1480
|
-
var _name = require_name();
|
|
1481
|
-
var _elements = require_elements();
|
|
1482
|
-
var _eventTypes = require_eventTypes();
|
|
1483
|
-
var _constants = require_constants();
|
|
1484
|
-
var DOUBLE_CLICK_EVENT_TYPE = "doubleclick";
|
|
1485
|
-
var SELECTION_CHANGE_EVENT_TYPE = "selectionChange";
|
|
1486
|
-
var FULL_SCREEN_CHANGE_EVENT_TYPE = "fullScreenChange";
|
|
1487
|
-
function applyProperties(properties, defaultProperties, ignoredProperties) {
|
|
1488
|
-
this.properties = (0, _object.combine)(properties, defaultProperties);
|
|
1489
|
-
properties = (0, _object.prune)(this.properties, ignoredProperties);
|
|
1490
|
-
const namespaceURI = this.domElement.namespaceURI, svg = namespaceURI === _constants.SVG_NAMESPACE_URI, propertiesKeys = Object.keys(properties), names = propertiesKeys;
|
|
1491
|
-
names.forEach((name) => {
|
|
1492
|
-
const value = properties[name], nameHandlerName = isNameHandlerName(name), nameCustomHandlerName = isNameCustomHandlerName(name);
|
|
1493
|
-
if (false) {
|
|
1494
|
-
} else if (nameHandlerName) {
|
|
1495
|
-
addHandler(this, name, value);
|
|
1496
|
-
} else if (nameCustomHandlerName) {
|
|
1497
|
-
addCustomHandler(this, name, value);
|
|
1498
|
-
} else {
|
|
1499
|
-
const nameAttributeName = isNameAttributeName(name, svg);
|
|
1500
|
-
if (nameAttributeName) {
|
|
1501
|
-
addAttribute(this, name, value);
|
|
1502
|
-
}
|
|
1503
|
-
}
|
|
1504
|
-
});
|
|
1505
|
-
const childElements = childElementsFromElement(this) || properties.childElements, context = {};
|
|
1506
|
-
childElements.forEach((childElement) => {
|
|
1507
|
-
updateContext(childElement, context);
|
|
1508
|
-
this.add(childElement);
|
|
1509
|
-
});
|
|
1510
|
-
this.context = context;
|
|
1511
|
-
}
|
|
1512
|
-
function getProperties() {
|
|
1513
|
-
return this.properties;
|
|
1514
|
-
}
|
|
1515
|
-
function getContext() {
|
|
1516
|
-
return this.context;
|
|
1517
|
-
}
|
|
1518
|
-
function assignContext(names) {
|
|
1519
|
-
if (names === void 0) {
|
|
1520
|
-
names = Object.keys(this.context);
|
|
1521
|
-
}
|
|
1522
|
-
names.forEach((name) => {
|
|
1523
|
-
const value = this.context[name], propertyName = name, descriptor = {
|
|
1524
|
-
value
|
|
1525
|
-
};
|
|
1526
|
-
Object.defineProperty(this, propertyName, descriptor);
|
|
1527
|
-
delete this.context[name];
|
|
1528
|
-
});
|
|
1529
|
-
}
|
|
1530
|
-
var jsxMixins = {
|
|
1531
|
-
applyProperties,
|
|
1532
|
-
getProperties,
|
|
1533
|
-
getContext,
|
|
1534
|
-
assignContext
|
|
1535
|
-
};
|
|
1536
|
-
var _default = jsxMixins;
|
|
1537
|
-
function childElementsFromElement(element) {
|
|
1538
|
-
let childElements = null;
|
|
1539
|
-
if (typeof element.childElements === _constants.FUNCTION) {
|
|
1540
|
-
childElements = element.childElements.call(element);
|
|
1541
|
-
childElements = (0, _array.guarantee)(childElements);
|
|
1542
|
-
childElements = (0, _elements.removeFalseyElements)(childElements);
|
|
1543
|
-
childElements = (0, _elements.replaceStringsWithTextElements)(childElements);
|
|
1544
|
-
}
|
|
1545
|
-
return childElements;
|
|
1546
|
-
}
|
|
1547
|
-
function updateContext(childElement, context) {
|
|
1548
|
-
const parentContext = typeof childElement.parentContext === _constants.FUNCTION ? childElement.parentContext() : childElement.context;
|
|
1549
|
-
Object.assign(context, parentContext);
|
|
1550
|
-
}
|
|
1551
|
-
function addHandler(element, name, value) {
|
|
1552
|
-
let eventType = name.substring(2).toLowerCase();
|
|
1553
|
-
switch (eventType) {
|
|
1554
|
-
case DOUBLE_CLICK_EVENT_TYPE: {
|
|
1555
|
-
eventType = _eventTypes.DBLCLICK_EVENT_TYPE;
|
|
1556
|
-
break;
|
|
1557
|
-
}
|
|
1558
|
-
case SELECTION_CHANGE_EVENT_TYPE: {
|
|
1559
|
-
eventType = _eventTypes.SELECTIONCHANGE_EVENT_TYPE;
|
|
1560
|
-
break;
|
|
1561
|
-
}
|
|
1562
|
-
case FULL_SCREEN_CHANGE_EVENT_TYPE: {
|
|
1563
|
-
eventType = _eventTypes.FULLSCREENCHANGE_EVENT_TYPE;
|
|
1564
|
-
break;
|
|
1565
|
-
}
|
|
1566
|
-
}
|
|
1567
|
-
const handler = value;
|
|
1568
|
-
element.onEvent(eventType, handler);
|
|
1569
|
-
}
|
|
1570
|
-
function addCustomHandler(element, name, value) {
|
|
1571
|
-
const customEventType = (0, _string.camelCaseToSnakeCase)(name).replace(/on-custom-/, ""), customHandler = value;
|
|
1572
|
-
element.onCustomEvent(customEventType, customHandler);
|
|
1573
|
-
}
|
|
1574
|
-
function addAttribute(element, name, value) {
|
|
1575
|
-
if (name === _constants.CLASS_NAME) {
|
|
1576
|
-
name = _constants.CLASS;
|
|
1577
|
-
}
|
|
1578
|
-
if (name === _constants.HTML_FOR) {
|
|
1579
|
-
name = _constants.FOR;
|
|
1580
|
-
}
|
|
1581
|
-
if (typeof value === _constants.OBJECT) {
|
|
1582
|
-
const keys = Object.keys(value);
|
|
1583
|
-
keys.forEach((key) => {
|
|
1584
|
-
element.domElement[name][key] = value[key];
|
|
1585
|
-
});
|
|
1586
|
-
} else if (typeof value === _constants.BOOLEAN) {
|
|
1587
|
-
if (value) {
|
|
1588
|
-
value = name;
|
|
1589
|
-
element.addAttribute(name, value);
|
|
1590
|
-
}
|
|
1591
|
-
} else {
|
|
1592
|
-
element.addAttribute(name, value);
|
|
1593
|
-
}
|
|
1594
|
-
}
|
|
1595
|
-
function isNameHandlerName(name) {
|
|
1596
|
-
const nameHandlerName = /^on(?!Custom)/.test(name);
|
|
1597
|
-
return nameHandlerName;
|
|
1598
|
-
}
|
|
1599
|
-
function isNameAttributeName(name, svg) {
|
|
1600
|
-
const nameAttributeName = svg ? (0, _name.isSVGAttributeName)(name) : (0, _name.isHTMLAttributeName)(name);
|
|
1601
|
-
return nameAttributeName;
|
|
1602
|
-
}
|
|
1603
|
-
function isNameCustomHandlerName(name) {
|
|
1604
|
-
const nameCustomHandlerName = /^onCustom/.test(name);
|
|
1605
|
-
return nameCustomHandlerName;
|
|
1606
|
-
}
|
|
1607
|
-
});
|
|
1608
|
-
|
|
1609
|
-
// lib/mixins/key.js
|
|
1610
|
-
var require_key = __commonJS((exports) => {
|
|
1611
|
-
"use strict";
|
|
1612
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1613
|
-
value: true
|
|
1614
|
-
});
|
|
1615
|
-
Object.defineProperty(exports, "default", {
|
|
1616
|
-
enumerable: true,
|
|
1617
|
-
get: function() {
|
|
1618
|
-
return _default;
|
|
1619
|
-
}
|
|
1620
|
-
});
|
|
1621
|
-
var _eventTypes = require_eventTypes();
|
|
1622
|
-
function onKeyUp(keyUpHandler, element) {
|
|
1623
|
-
this.onEvent(_eventTypes.KEYUP_EVENT_TYPE, keyUpHandler, element);
|
|
1624
|
-
}
|
|
1625
|
-
function offKeyUp(keyUpHandler, element) {
|
|
1626
|
-
this.offEvent(_eventTypes.KEYUP_EVENT_TYPE, keyUpHandler, element);
|
|
1627
|
-
}
|
|
1628
|
-
function onKeyDown(keyDownHandler, element) {
|
|
1629
|
-
this.onEvent(_eventTypes.KEYDOWN_EVENT_TYPE, keyDownHandler, element);
|
|
1630
|
-
}
|
|
1631
|
-
function offKeyDown(keyDownHandler, element) {
|
|
1632
|
-
this.offEvent(_eventTypes.KEYDOWN_EVENT_TYPE, keyDownHandler, element);
|
|
1633
|
-
}
|
|
1634
|
-
var keyMixins = {
|
|
1635
|
-
onKeyUp,
|
|
1636
|
-
offKeyUp,
|
|
1637
|
-
onKeyDown,
|
|
1638
|
-
offKeyDown
|
|
1639
|
-
};
|
|
1640
|
-
var _default = keyMixins;
|
|
1641
|
-
});
|
|
1642
|
-
|
|
1643
|
-
// lib/mixins/state.js
|
|
1644
|
-
var require_state = __commonJS((exports) => {
|
|
1645
|
-
"use strict";
|
|
1646
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1647
|
-
value: true
|
|
1648
|
-
});
|
|
1649
|
-
Object.defineProperty(exports, "default", {
|
|
1650
|
-
enumerable: true,
|
|
1651
|
-
get: function() {
|
|
1652
|
-
return _default;
|
|
1653
|
-
}
|
|
1654
|
-
});
|
|
1655
|
-
function getState() {
|
|
1656
|
-
return this.state;
|
|
1657
|
-
}
|
|
1658
|
-
function setState(state) {
|
|
1659
|
-
this.state = state;
|
|
1660
|
-
}
|
|
1661
|
-
function updateState(state) {
|
|
1662
|
-
this.state === void 0 ? this.state = state : Object.assign(this.state, state);
|
|
1663
|
-
}
|
|
1664
|
-
var stateMixins = {
|
|
1665
|
-
getState,
|
|
1666
|
-
setState,
|
|
1667
|
-
updateState
|
|
1668
|
-
};
|
|
1669
|
-
var _default = stateMixins;
|
|
1670
|
-
});
|
|
1671
|
-
|
|
1672
|
-
// lib/mixins/event.js
|
|
1673
|
-
var require_event = __commonJS((exports) => {
|
|
1674
|
-
"use strict";
|
|
1675
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1676
|
-
value: true
|
|
1677
|
-
});
|
|
1678
|
-
Object.defineProperty(exports, "default", {
|
|
1679
|
-
enumerable: true,
|
|
1680
|
-
get: function() {
|
|
1681
|
-
return _default;
|
|
1682
|
-
}
|
|
1683
|
-
});
|
|
1684
|
-
var _constants = require_constants();
|
|
1685
|
-
var _eventTypes = require_eventTypes();
|
|
1686
|
-
function onEvent(eventTypes, handler, element = this) {
|
|
1687
|
-
eventTypes = eventTypes.split(_constants.SPACE);
|
|
1688
|
-
eventTypes.forEach((eventType) => {
|
|
1689
|
-
if (eventType === _eventTypes.RESIZE_EVENT_TYPE) {
|
|
1690
|
-
const resizeEventListeners = this.findEventListeners(_eventTypes.RESIZE_EVENT_TYPE), resizeEventListenersLength = resizeEventListeners.length;
|
|
1691
|
-
if (resizeEventListenersLength === 0) {
|
|
1692
|
-
this.resizeObserver = new ResizeObserver((entries) => {
|
|
1693
|
-
const resizeEventListeners2 = this.findEventListeners(_eventTypes.RESIZE_EVENT_TYPE);
|
|
1694
|
-
resizeEventListeners2.forEach((resizeEventListener) => {
|
|
1695
|
-
const event = null;
|
|
1696
|
-
resizeEventListener(event);
|
|
1697
|
-
});
|
|
1698
|
-
});
|
|
1699
|
-
this.resizeObserver.observe(this.domElement);
|
|
1700
|
-
}
|
|
1701
|
-
this.addEventListener(eventType, handler, element);
|
|
1702
|
-
} else {
|
|
1703
|
-
const eventListener = this.addEventListener(eventType, handler, element);
|
|
1704
|
-
this.domElement.addEventListener(eventType, eventListener);
|
|
1705
|
-
}
|
|
1706
|
-
});
|
|
1707
|
-
}
|
|
1708
|
-
function offEvent(eventTypes, handler, element = this) {
|
|
1709
|
-
eventTypes = eventTypes.split(_constants.SPACE);
|
|
1710
|
-
eventTypes.forEach((eventType) => {
|
|
1711
|
-
if (eventType === _eventTypes.RESIZE_EVENT_TYPE) {
|
|
1712
|
-
this.removeEventListener(eventType, handler, element);
|
|
1713
|
-
const resizeEventListeners = this.findEventListeners(_eventTypes.RESIZE_EVENT_TYPE), resizeEventListenersLength = resizeEventListeners.length;
|
|
1714
|
-
if (resizeEventListenersLength === 0) {
|
|
1715
|
-
this.resizeObserver.unobserve(this.domElement);
|
|
1716
|
-
delete this.resizeObserver;
|
|
1717
|
-
}
|
|
1718
|
-
} else {
|
|
1719
|
-
const eventListener = this.removeEventListener(eventType, handler, element);
|
|
1720
|
-
this.domElement.removeEventListener(eventType, eventListener);
|
|
1721
|
-
}
|
|
1722
|
-
});
|
|
1723
|
-
}
|
|
1724
|
-
function addEventListener(eventType, handler, element) {
|
|
1725
|
-
const eventListener = this.createEventListener(eventType, handler, element);
|
|
1726
|
-
if (!this.eventListeners) {
|
|
1727
|
-
this.eventListeners = [];
|
|
1728
|
-
}
|
|
1729
|
-
this.eventListeners.push(eventListener);
|
|
1730
|
-
return eventListener;
|
|
1731
|
-
}
|
|
1732
|
-
function removeEventListener(eventType, handler, element) {
|
|
1733
|
-
const eventListener = this.findEventListener(eventType, handler, element), index = this.eventListeners.indexOf(eventListener), start = index, deleteCount = 1;
|
|
1734
|
-
this.eventListeners.splice(start, deleteCount);
|
|
1735
|
-
if (this.eventListeners.length === 0) {
|
|
1736
|
-
delete this.eventListeners;
|
|
1737
|
-
}
|
|
1738
|
-
return eventListener;
|
|
1739
|
-
}
|
|
1740
|
-
function findEventListener(eventType, handler, element) {
|
|
1741
|
-
const eventListener = this.eventListeners.find((eventListener2) => {
|
|
1742
|
-
if (eventListener2.element === element && eventListener2.handler === handler && eventListener2.eventType === eventType) {
|
|
1743
|
-
return true;
|
|
1744
|
-
}
|
|
1745
|
-
});
|
|
1746
|
-
return eventListener;
|
|
1747
|
-
}
|
|
1748
|
-
function findEventListeners(eventType) {
|
|
1749
|
-
const eventListeners = [];
|
|
1750
|
-
if (this.eventListeners) {
|
|
1751
|
-
this.eventListeners.forEach((eventListener) => {
|
|
1752
|
-
const found = eventListener.eventType === eventType;
|
|
1753
|
-
if (found) {
|
|
1754
|
-
eventListeners.push(eventListener);
|
|
1755
|
-
}
|
|
1756
|
-
});
|
|
1757
|
-
}
|
|
1758
|
-
return eventListeners;
|
|
1759
|
-
}
|
|
1760
|
-
function createEventListener(eventType, handler, element) {
|
|
1761
|
-
let eventListener;
|
|
1762
|
-
const handlerElement = element;
|
|
1763
|
-
eventListener = (event) => {
|
|
1764
|
-
const element2 = this;
|
|
1765
|
-
handler.call(handlerElement, event, element2);
|
|
1766
|
-
};
|
|
1767
|
-
Object.assign(eventListener, {
|
|
1768
|
-
element,
|
|
1769
|
-
handler,
|
|
1770
|
-
eventType
|
|
1771
|
-
});
|
|
1772
|
-
return eventListener;
|
|
1773
|
-
}
|
|
1774
|
-
var eventMixins = {
|
|
1775
|
-
onEvent,
|
|
1776
|
-
offEvent,
|
|
1777
|
-
addEventListener,
|
|
1778
|
-
removeEventListener,
|
|
1779
|
-
findEventListener,
|
|
1780
|
-
findEventListeners,
|
|
1781
|
-
createEventListener
|
|
1782
|
-
};
|
|
1783
|
-
var _default = eventMixins;
|
|
1784
|
-
});
|
|
1785
|
-
|
|
1786
|
-
// lib/mixins/mouse.js
|
|
1787
|
-
var require_mouse = __commonJS((exports) => {
|
|
1788
|
-
"use strict";
|
|
1789
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1790
|
-
value: true
|
|
1791
|
-
});
|
|
1792
|
-
Object.defineProperty(exports, "default", {
|
|
1793
|
-
enumerable: true,
|
|
1794
|
-
get: function() {
|
|
1795
|
-
return _default;
|
|
1796
|
-
}
|
|
1797
|
-
});
|
|
1798
|
-
var _eventTypes = require_eventTypes();
|
|
1799
|
-
function onMouseUp(mouseUpHandler, element) {
|
|
1800
|
-
this.onEvent(_eventTypes.MOUSEUP_EVENT_TYPE, mouseUpHandler, element);
|
|
1801
|
-
}
|
|
1802
|
-
function offMouseUp(mouseUpHandler, element) {
|
|
1803
|
-
this.offEvent(_eventTypes.MOUSEUP_EVENT_TYPE, mouseUpHandler, element);
|
|
1804
|
-
}
|
|
1805
|
-
function onMouseOut(mouseOutHandler, element) {
|
|
1806
|
-
this.onEvent(_eventTypes.MOUSEOUT_EVENT_TYPE, mouseOutHandler, element);
|
|
1807
|
-
}
|
|
1808
|
-
function offMouseOut(mouseOutHandler, element) {
|
|
1809
|
-
this.offEvent(_eventTypes.MOUSEOUT_EVENT_TYPE, mouseOutHandler, element);
|
|
1810
|
-
}
|
|
1811
|
-
function onMouseDown(mouseDownHandler, element) {
|
|
1812
|
-
this.onEvent(_eventTypes.MOUSEDOWN_EVENT_TYPE, mouseDownHandler, element);
|
|
1813
|
-
}
|
|
1814
|
-
function offMouseDown(mouseDownHandler, element) {
|
|
1815
|
-
this.offEvent(_eventTypes.MOUSEDOWN_EVENT_TYPE, mouseDownHandler, element);
|
|
1816
|
-
}
|
|
1817
|
-
function onMouseOver(mouseOverHandler, element) {
|
|
1818
|
-
this.onEvent(_eventTypes.MOUSEOVER_EVENT_TYPE, mouseOverHandler, element);
|
|
1819
|
-
}
|
|
1820
|
-
function offMouseOver(mouseOverHandler, element) {
|
|
1821
|
-
this.offEvent(_eventTypes.MOUSEOVER_EVENT_TYPE, mouseOverHandler, element);
|
|
1822
|
-
}
|
|
1823
|
-
function onMouseMove(mouseMoveHandler, element) {
|
|
1824
|
-
this.onEvent(_eventTypes.MOUSEMOVE_EVENT_TYPE, mouseMoveHandler, element);
|
|
1825
|
-
}
|
|
1826
|
-
function offMouseMove(mouseMoveHandler, element) {
|
|
1827
|
-
this.offEvent(_eventTypes.MOUSEMOVE_EVENT_TYPE, mouseMoveHandler, element);
|
|
1828
|
-
}
|
|
1829
|
-
var mouseMixins = {
|
|
1830
|
-
onMouseUp,
|
|
1831
|
-
offMouseUp,
|
|
1832
|
-
onMouseOut,
|
|
1833
|
-
offMouseOut,
|
|
1834
|
-
onMouseDown,
|
|
1835
|
-
offMouseDown,
|
|
1836
|
-
onMouseOver,
|
|
1837
|
-
offMouseOver,
|
|
1838
|
-
onMouseMove,
|
|
1839
|
-
offMouseMove
|
|
1840
|
-
};
|
|
1841
|
-
var _default = mouseMixins;
|
|
1842
|
-
});
|
|
1843
|
-
|
|
1844
|
-
// lib/mixins/click.js
|
|
1845
|
-
var require_click = __commonJS((exports) => {
|
|
1846
|
-
"use strict";
|
|
1847
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1848
|
-
value: true
|
|
1849
|
-
});
|
|
1850
|
-
Object.defineProperty(exports, "default", {
|
|
1851
|
-
enumerable: true,
|
|
1852
|
-
get: function() {
|
|
1853
|
-
return _default;
|
|
1854
|
-
}
|
|
1855
|
-
});
|
|
1856
|
-
var _eventTypes = require_eventTypes();
|
|
1857
|
-
function onClick(clickHandler, element) {
|
|
1858
|
-
this.onEvent(_eventTypes.CLICK_EVENT_TYPE, clickHandler, element);
|
|
1859
|
-
}
|
|
1860
|
-
function offClick(clickHandler, element) {
|
|
1861
|
-
this.offEvent(_eventTypes.CLICK_EVENT_TYPE, clickHandler, element);
|
|
1862
|
-
}
|
|
1863
|
-
function onAuxClick(auxClickHandler, element) {
|
|
1864
|
-
this.onEvent(_eventTypes.AUXCLICK_EVENT_TYPE, auxClickHandler, element);
|
|
1865
|
-
}
|
|
1866
|
-
function offAuxClick(auxClickHandler, element) {
|
|
1867
|
-
this.offEvent(_eventTypes.AUXCLICK_EVENT_TYPE, auxClickHandler, element);
|
|
1868
|
-
}
|
|
1869
|
-
function onDoubleClick(doubleClickHandler, element) {
|
|
1870
|
-
this.onEvent(_eventTypes.DBLCLICK_EVENT_TYPE, doubleClickHandler, element);
|
|
1871
|
-
}
|
|
1872
|
-
function offDoubleClick(doubleClickHandler, element) {
|
|
1873
|
-
this.offEvent(_eventTypes.DBLCLICK_EVENT_TYPE, doubleClickHandler, element);
|
|
1874
|
-
}
|
|
1875
|
-
var clickMixins = {
|
|
1876
|
-
onClick,
|
|
1877
|
-
offClick,
|
|
1878
|
-
onAuxClick,
|
|
1879
|
-
offAuxClick,
|
|
1880
|
-
onDoubleClick,
|
|
1881
|
-
offDoubleClick
|
|
1882
|
-
};
|
|
1883
|
-
var _default = clickMixins;
|
|
1884
|
-
});
|
|
1885
|
-
|
|
1886
|
-
// lib/mixins/touch.js
|
|
1887
|
-
var require_touch = __commonJS((exports) => {
|
|
1888
|
-
"use strict";
|
|
1889
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1890
|
-
value: true
|
|
1891
|
-
});
|
|
1892
|
-
Object.defineProperty(exports, "default", {
|
|
1893
|
-
enumerable: true,
|
|
1894
|
-
get: function() {
|
|
1895
|
-
return _default;
|
|
1896
|
-
}
|
|
1897
|
-
});
|
|
1898
|
-
var _eventTypes = require_eventTypes();
|
|
1899
|
-
function onTouchStart(touchStartHandler) {
|
|
1900
|
-
this.onEvent(_eventTypes.TOUCHSTART_EVENT_TYPE, touchStartHandler);
|
|
1901
|
-
}
|
|
1902
|
-
function offTouchStart(touchStartHandler) {
|
|
1903
|
-
this.offEvent(_eventTypes.TOUCHSTART_EVENT_TYPE, touchStartHandler);
|
|
1904
|
-
}
|
|
1905
|
-
function onTouchMove(touchStartHandler) {
|
|
1906
|
-
this.onEvent(_eventTypes.TOUCHMOVE_EVENT_TYPE, touchStartHandler);
|
|
1907
|
-
}
|
|
1908
|
-
function offTouchMove(touchStartHandler) {
|
|
1909
|
-
this.offEvent(_eventTypes.TOUCHMOVE_EVENT_TYPE, touchStartHandler);
|
|
1910
|
-
}
|
|
1911
|
-
function onTouchEnd(touchStartHandler) {
|
|
1912
|
-
this.onEvent(_eventTypes.TOUCHEND_EVENT_TYPE, touchStartHandler);
|
|
1913
|
-
}
|
|
1914
|
-
function offTouchEnd(touchStartHandler) {
|
|
1915
|
-
this.offEvent(_eventTypes.TOUCHEND_EVENT_TYPE, touchStartHandler);
|
|
1916
|
-
}
|
|
1917
|
-
var clickMixins = {
|
|
1918
|
-
onTouchStart,
|
|
1919
|
-
offTouchStart,
|
|
1920
|
-
onTouchMove,
|
|
1921
|
-
offTouchMove,
|
|
1922
|
-
onTouchEnd,
|
|
1923
|
-
offTouchEnd
|
|
1924
|
-
};
|
|
1925
|
-
var _default = clickMixins;
|
|
1926
|
-
});
|
|
1927
|
-
|
|
1928
|
-
// lib/mixins/scroll.js
|
|
1929
|
-
var require_scroll = __commonJS((exports) => {
|
|
1930
|
-
"use strict";
|
|
1931
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1932
|
-
value: true
|
|
1933
|
-
});
|
|
1934
|
-
function _export(target, all) {
|
|
1935
|
-
for (var name in all)
|
|
1936
|
-
Object.defineProperty(target, name, {
|
|
1937
|
-
enumerable: true,
|
|
1938
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
1939
|
-
});
|
|
1940
|
-
}
|
|
1941
|
-
_export(exports, {
|
|
1942
|
-
get default() {
|
|
1943
|
-
return _default;
|
|
1944
|
-
},
|
|
1945
|
-
get offScroll() {
|
|
1946
|
-
return offScroll;
|
|
1947
|
-
},
|
|
1948
|
-
get onScroll() {
|
|
1949
|
-
return onScroll;
|
|
1950
|
-
}
|
|
1951
|
-
});
|
|
1952
|
-
var _eventTypes = require_eventTypes();
|
|
1953
|
-
function onScroll(scrollHandler, element) {
|
|
1954
|
-
this.onEvent(_eventTypes.SCROLL_EVENT_TYPE, scrollHandler, element);
|
|
1955
|
-
}
|
|
1956
|
-
function offScroll(scrollHandler, element) {
|
|
1957
|
-
this.offEvent(_eventTypes.SCROLL_EVENT_TYPE, scrollHandler, element);
|
|
1958
|
-
}
|
|
1959
|
-
function scrollTo(scrollTop, scrollLeft) {
|
|
1960
|
-
this.domElement.scrollTo(scrollLeft, scrollTop);
|
|
1961
|
-
}
|
|
1962
|
-
function getScrollTop() {
|
|
1963
|
-
return this.domElement.scrollTop;
|
|
1964
|
-
}
|
|
1965
|
-
function getScrollLeft() {
|
|
1966
|
-
return this.domElement.scrollLeft;
|
|
1967
|
-
}
|
|
1968
|
-
function getScrollWidth() {
|
|
1969
|
-
return this.domElement.scrollWidth;
|
|
1970
|
-
}
|
|
1971
|
-
function getScrollHeight() {
|
|
1972
|
-
return this.domElement.scrollHeight;
|
|
1973
|
-
}
|
|
1974
|
-
function setScrollTop(scrollTop) {
|
|
1975
|
-
this.domElement.scrollTop = scrollTop;
|
|
1976
|
-
}
|
|
1977
|
-
function setScrollLeft(scrollLeft) {
|
|
1978
|
-
this.domElement.scrollLeft = scrollLeft;
|
|
1979
|
-
}
|
|
1980
|
-
var scrollMixins = {
|
|
1981
|
-
onScroll,
|
|
1982
|
-
offScroll,
|
|
1983
|
-
scrollTo,
|
|
1984
|
-
getScrollTop,
|
|
1985
|
-
getScrollLeft,
|
|
1986
|
-
getScrollWidth,
|
|
1987
|
-
getScrollHeight,
|
|
1988
|
-
setScrollTop,
|
|
1989
|
-
setScrollLeft
|
|
1990
|
-
};
|
|
1991
|
-
var _default = scrollMixins;
|
|
1992
|
-
});
|
|
1993
|
-
|
|
1994
|
-
// lib/mixins/resize.js
|
|
1995
|
-
var require_resize = __commonJS((exports) => {
|
|
1996
|
-
"use strict";
|
|
1997
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1998
|
-
value: true
|
|
1999
|
-
});
|
|
2000
|
-
Object.defineProperty(exports, "default", {
|
|
2001
|
-
enumerable: true,
|
|
2002
|
-
get: function() {
|
|
2003
|
-
return _default;
|
|
2004
|
-
}
|
|
2005
|
-
});
|
|
2006
|
-
var _eventTypes = require_eventTypes();
|
|
2007
|
-
function onResize(resizeHandler, element) {
|
|
2008
|
-
this.onEvent(_eventTypes.RESIZE_EVENT_TYPE, resizeHandler, element);
|
|
2009
|
-
}
|
|
2010
|
-
function offResize(resizeHandler, element) {
|
|
2011
|
-
this.offEvent(_eventTypes.RESIZE_EVENT_TYPE, resizeHandler, element);
|
|
2012
|
-
}
|
|
2013
|
-
var resizeMixins = {
|
|
2014
|
-
onResize,
|
|
2015
|
-
offResize
|
|
2016
|
-
};
|
|
2017
|
-
var _default = resizeMixins;
|
|
2018
|
-
});
|
|
2019
|
-
|
|
2020
|
-
// lib/mixins/fullScreen.js
|
|
2021
|
-
var require_fullScreen = __commonJS((exports) => {
|
|
2022
|
-
"use strict";
|
|
2023
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2024
|
-
value: true
|
|
2025
|
-
});
|
|
2026
|
-
Object.defineProperty(exports, "default", {
|
|
2027
|
-
enumerable: true,
|
|
2028
|
-
get: function() {
|
|
2029
|
-
return _default;
|
|
2030
|
-
}
|
|
2031
|
-
});
|
|
2032
|
-
var _eventTypes = require_eventTypes();
|
|
2033
|
-
function onFullScreenChange(fullScreenChangeHandler, element) {
|
|
2034
|
-
this.onEvent(_eventTypes.FULLSCREENCHANGE_EVENT_TYPE, fullScreenChangeHandler, element);
|
|
2035
|
-
}
|
|
2036
|
-
function offFullScreenChange(fullScreenChangeHandler, element) {
|
|
2037
|
-
this.offEvent(_eventTypes.FULLSCREENCHANGE_EVENT_TYPE, fullScreenChangeHandler, element);
|
|
2038
|
-
}
|
|
2039
|
-
function requestFullScreen(errorHandler) {
|
|
2040
|
-
const domElement = this.getDOMElement();
|
|
2041
|
-
domElement.requestFullscreen().catch(errorHandler);
|
|
2042
|
-
}
|
|
2043
|
-
function exitFullScreen() {
|
|
2044
|
-
document.exitFullscreen();
|
|
2045
|
-
}
|
|
2046
|
-
function isFullScreen() {
|
|
2047
|
-
const {fullscreenElement} = document, fullScreen = fullscreenElement !== null;
|
|
2048
|
-
return fullScreen;
|
|
2049
|
-
}
|
|
2050
|
-
var fullscreenMixins = {
|
|
2051
|
-
onFullScreenChange,
|
|
2052
|
-
offFullScreenChange,
|
|
2053
|
-
requestFullScreen,
|
|
2054
|
-
exitFullScreen,
|
|
2055
|
-
isFullScreen
|
|
2056
|
-
};
|
|
2057
|
-
var _default = fullscreenMixins;
|
|
2058
|
-
});
|
|
2059
|
-
|
|
2060
|
-
// lib/utilities/async.js
|
|
2061
|
-
var require_async = __commonJS((exports) => {
|
|
2062
|
-
"use strict";
|
|
2063
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2064
|
-
value: true
|
|
2065
|
-
});
|
|
2066
|
-
Object.defineProperty(exports, "forEach", {
|
|
2067
|
-
enumerable: true,
|
|
2068
|
-
get: function() {
|
|
2069
|
-
return forEach;
|
|
2070
|
-
}
|
|
2071
|
-
});
|
|
2072
|
-
function forEach(array, operation, done, context) {
|
|
2073
|
-
const length = array.length;
|
|
2074
|
-
let count = -1;
|
|
2075
|
-
function next() {
|
|
2076
|
-
count++;
|
|
2077
|
-
const terminate = count === length;
|
|
2078
|
-
if (terminate) {
|
|
2079
|
-
done();
|
|
2080
|
-
} else {
|
|
2081
|
-
const index = count, element = array[index];
|
|
2082
|
-
operation(element, next, done, context, index);
|
|
2083
|
-
}
|
|
2084
|
-
}
|
|
2085
|
-
next();
|
|
2086
|
-
}
|
|
2087
|
-
});
|
|
2088
|
-
|
|
2089
|
-
// lib/mixins/customEvent.js
|
|
2090
|
-
var require_customEvent = __commonJS((exports) => {
|
|
2091
|
-
"use strict";
|
|
2092
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2093
|
-
value: true
|
|
2094
|
-
});
|
|
2095
|
-
Object.defineProperty(exports, "default", {
|
|
2096
|
-
enumerable: true,
|
|
2097
|
-
get: function() {
|
|
2098
|
-
return _default;
|
|
2099
|
-
}
|
|
2100
|
-
});
|
|
2101
|
-
var _constants = require_constants();
|
|
2102
|
-
var _async = require_async();
|
|
2103
|
-
function onCustomEvent(customEventTypes, customHandler, element = this) {
|
|
2104
|
-
customEventTypes = customEventTypes.split(_constants.SPACE);
|
|
2105
|
-
customEventTypes.forEach((customEventType) => {
|
|
2106
|
-
this.addCustomEventListener(customEventType, customHandler, element);
|
|
2107
|
-
});
|
|
2108
|
-
}
|
|
2109
|
-
function offCustomEvent(customEventTypes, customHandler, element = this) {
|
|
2110
|
-
customEventTypes = customEventTypes.split(_constants.SPACE);
|
|
2111
|
-
customEventTypes.forEach((customEventType) => {
|
|
2112
|
-
this.removeCustomEventListener(customEventType, customHandler, element);
|
|
2113
|
-
});
|
|
2114
|
-
}
|
|
2115
|
-
function callCustomHandlers(customEventType, ...remainingArguments) {
|
|
2116
|
-
const customEventListeners = this.findCustomEventListeners(customEventType);
|
|
2117
|
-
customEventListeners.forEach((customEventListener) => {
|
|
2118
|
-
const {customHandler, element: customHandlerElement} = customEventListener;
|
|
2119
|
-
customHandler.call(customHandlerElement, ...remainingArguments);
|
|
2120
|
-
});
|
|
2121
|
-
}
|
|
2122
|
-
function callCustomHandlersAsync(customEventType, ...remainingArguments) {
|
|
2123
|
-
const customEventListeners = this.findCustomEventListeners(customEventType), done = remainingArguments.pop();
|
|
2124
|
-
(0, _async.forEach)(customEventListeners, (customEventListener, next) => {
|
|
2125
|
-
const {customHandler, element: customHandlerElement} = customEventListener, done2 = next;
|
|
2126
|
-
customHandler.call(customHandlerElement, ...remainingArguments, done2);
|
|
2127
|
-
}, done);
|
|
2128
|
-
}
|
|
2129
|
-
function addCustomEventListener(customEventType, customHandler, element) {
|
|
2130
|
-
const customEventListener = this.createCustomEventListener(customEventType, customHandler, element);
|
|
2131
|
-
if (!this.customEventListeners) {
|
|
2132
|
-
this.customEventListeners = [];
|
|
2133
|
-
}
|
|
2134
|
-
this.customEventListeners.push(customEventListener);
|
|
2135
|
-
return customEventListener;
|
|
2136
|
-
}
|
|
2137
|
-
function removeCustomEventListener(customEventType, customHandler, element) {
|
|
2138
|
-
const customEventListener = this.findCustomEventListener(customEventType, customHandler, element), index = this.customEventListeners.indexOf(customEventListener), start = index, deleteCount = 1;
|
|
2139
|
-
this.customEventListeners.splice(start, deleteCount);
|
|
2140
|
-
if (this.customEventListeners.length === 0) {
|
|
2141
|
-
delete this.customEventListeners;
|
|
2142
|
-
}
|
|
2143
|
-
return customEventListener;
|
|
2144
|
-
}
|
|
2145
|
-
function findCustomEventListener(customEventType, customHandler, element) {
|
|
2146
|
-
const customEventListener = this.customEventListeners.find((customEventListener2) => {
|
|
2147
|
-
if (customEventListener2.element === element && customEventListener2.customHandler === customHandler && customEventListener2.customEventType === customEventType) {
|
|
2148
|
-
return true;
|
|
2149
|
-
}
|
|
2150
|
-
});
|
|
2151
|
-
return customEventListener;
|
|
2152
|
-
}
|
|
2153
|
-
function findCustomEventListeners(customEventType) {
|
|
2154
|
-
const customEventListeners = [];
|
|
2155
|
-
if (this.customEventListeners) {
|
|
2156
|
-
this.customEventListeners.forEach((customEventListener) => {
|
|
2157
|
-
const found = customEventListener.customEventType === customEventType;
|
|
2158
|
-
if (found) {
|
|
2159
|
-
customEventListeners.push(customEventListener);
|
|
2160
|
-
}
|
|
2161
|
-
});
|
|
2162
|
-
}
|
|
2163
|
-
return customEventListeners;
|
|
2164
|
-
}
|
|
2165
|
-
function createCustomEventListener(customEventType, customHandler, element) {
|
|
2166
|
-
let customEventListener;
|
|
2167
|
-
customEventListener = () => {
|
|
2168
|
-
};
|
|
2169
|
-
Object.assign(customEventListener, {
|
|
2170
|
-
element,
|
|
2171
|
-
customHandler,
|
|
2172
|
-
customEventType
|
|
2173
|
-
});
|
|
2174
|
-
return customEventListener;
|
|
2175
|
-
}
|
|
2176
|
-
var customEventMixins = {
|
|
2177
|
-
onCustomEvent,
|
|
2178
|
-
offCustomEvent,
|
|
2179
|
-
callCustomHandlers,
|
|
2180
|
-
callCustomHandlersAsync,
|
|
2181
|
-
addCustomEventListener,
|
|
2182
|
-
removeCustomEventListener,
|
|
2183
|
-
findCustomEventListener,
|
|
2184
|
-
findCustomEventListeners,
|
|
2185
|
-
createCustomEventListener
|
|
2186
|
-
};
|
|
2187
|
-
var _default = customEventMixins;
|
|
2188
|
-
});
|
|
2189
|
-
|
|
2190
|
-
// lib/element.js
|
|
2191
|
-
var require_element3 = __commonJS((exports) => {
|
|
2192
|
-
"use strict";
|
|
2193
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2194
|
-
value: true
|
|
2195
|
-
});
|
|
2196
|
-
Object.defineProperty(exports, "default", {
|
|
2197
|
-
enumerable: true,
|
|
2198
|
-
get: function() {
|
|
2199
|
-
return Element;
|
|
2200
|
-
}
|
|
2201
|
-
});
|
|
2202
|
-
var _offset = /* @__PURE__ */ _interop_require_default(require_offset());
|
|
2203
|
-
var _bounds = /* @__PURE__ */ _interop_require_default(require_bounds());
|
|
2204
|
-
var _jsx = /* @__PURE__ */ _interop_require_default(require_jsx());
|
|
2205
|
-
var _key = /* @__PURE__ */ _interop_require_default(require_key());
|
|
2206
|
-
var _state = /* @__PURE__ */ _interop_require_default(require_state());
|
|
2207
|
-
var _event = /* @__PURE__ */ _interop_require_default(require_event());
|
|
2208
|
-
var _mouse = /* @__PURE__ */ _interop_require_default(require_mouse());
|
|
2209
|
-
var _click = /* @__PURE__ */ _interop_require_default(require_click());
|
|
2210
|
-
var _touch = /* @__PURE__ */ _interop_require_default(require_touch());
|
|
2211
|
-
var _scroll = /* @__PURE__ */ _interop_require_default(require_scroll());
|
|
2212
|
-
var _resize = /* @__PURE__ */ _interop_require_default(require_resize());
|
|
2213
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element2());
|
|
2214
|
-
var _fullScreen = /* @__PURE__ */ _interop_require_default(require_fullScreen());
|
|
2215
|
-
var _customEvent = /* @__PURE__ */ _interop_require_default(require_customEvent());
|
|
2216
|
-
var _array = require_array();
|
|
2217
|
-
var _object = require_object();
|
|
2218
|
-
var _name = require_name();
|
|
2219
|
-
var _element1 = require_element();
|
|
2220
|
-
var _constants = require_constants();
|
|
2221
|
-
function _interop_require_default(obj) {
|
|
2222
|
-
return obj && obj.__esModule ? obj : {
|
|
2223
|
-
default: obj
|
|
2224
|
-
};
|
|
2225
|
-
}
|
|
2226
|
-
var Element = class {
|
|
2227
|
-
constructor(selector) {
|
|
2228
|
-
if (selector !== null) {
|
|
2229
|
-
const element = this, domElement = document.querySelector(selector);
|
|
2230
|
-
(0, _element1.constructElement)(element, domElement);
|
|
2231
|
-
}
|
|
2232
|
-
}
|
|
2233
|
-
getDOMElement() {
|
|
2234
|
-
return this.domElement;
|
|
2235
|
-
}
|
|
2236
|
-
getOffset() {
|
|
2237
|
-
const offset = _offset.default.fromDOMElement(this.domElement);
|
|
2238
|
-
return offset;
|
|
2239
|
-
}
|
|
2240
|
-
getBounds() {
|
|
2241
|
-
const bounds = _bounds.default.fromDOMElement(this.domElement);
|
|
2242
|
-
return bounds;
|
|
2243
|
-
}
|
|
2244
|
-
getWidth() {
|
|
2245
|
-
return this.domElement.offsetWidth;
|
|
2246
|
-
}
|
|
2247
|
-
getHeight() {
|
|
2248
|
-
return this.domElement.offsetHeight;
|
|
2249
|
-
}
|
|
2250
|
-
getInnerWidth() {
|
|
2251
|
-
return this.domElement.clientWidth;
|
|
2252
|
-
}
|
|
2253
|
-
getInnerHeight() {
|
|
2254
|
-
return this.domElement.clientHeight;
|
|
2255
|
-
}
|
|
2256
|
-
setWidth(width) {
|
|
2257
|
-
width = `${width}px`;
|
|
2258
|
-
this.style(_constants.WIDTH, width);
|
|
2259
|
-
}
|
|
2260
|
-
setHeight(height) {
|
|
2261
|
-
height = `${height}px`;
|
|
2262
|
-
this.style(_constants.HEIGHT, height);
|
|
2263
|
-
}
|
|
2264
|
-
hasAttribute(name) {
|
|
2265
|
-
return this.domElement.hasAttribute(name);
|
|
2266
|
-
}
|
|
2267
|
-
getAttribute(name) {
|
|
2268
|
-
return this.domElement.getAttribute(name);
|
|
2269
|
-
}
|
|
2270
|
-
setAttribute(name, value) {
|
|
2271
|
-
this.domElement.setAttribute(name, value);
|
|
2272
|
-
}
|
|
2273
|
-
clearAttribute(name) {
|
|
2274
|
-
this.domElement.removeAttribute(name);
|
|
2275
|
-
}
|
|
2276
|
-
addAttribute(name, value) {
|
|
2277
|
-
this.setAttribute(name, value);
|
|
2278
|
-
}
|
|
2279
|
-
removeAttribute(name) {
|
|
2280
|
-
this.clearAttribute(name);
|
|
2281
|
-
}
|
|
2282
|
-
hasClass(className) {
|
|
2283
|
-
return this.domElement.classList.contains(className);
|
|
2284
|
-
}
|
|
2285
|
-
setClass(className) {
|
|
2286
|
-
this.domElement.className = className;
|
|
2287
|
-
}
|
|
2288
|
-
addClass(className) {
|
|
2289
|
-
this.domElement.classList.add(className);
|
|
2290
|
-
}
|
|
2291
|
-
removeClass(className) {
|
|
2292
|
-
this.domElement.classList.remove(className);
|
|
2293
|
-
}
|
|
2294
|
-
toggleClass(className) {
|
|
2295
|
-
this.domElement.classList.toggle(className);
|
|
2296
|
-
}
|
|
2297
|
-
removeAllClasses() {
|
|
2298
|
-
this.domElement.className = _constants.EMPTY_STRING;
|
|
2299
|
-
}
|
|
2300
|
-
addTo(parentElement) {
|
|
2301
|
-
parentElement.add(this);
|
|
2302
|
-
}
|
|
2303
|
-
appendTo(parentElement) {
|
|
2304
|
-
parentElement.append(this);
|
|
2305
|
-
}
|
|
2306
|
-
prependTo(parentElement) {
|
|
2307
|
-
parentElement.prepend(this);
|
|
2308
|
-
}
|
|
2309
|
-
removeFrom(parentElement) {
|
|
2310
|
-
parentElement.remove(this);
|
|
2311
|
-
}
|
|
2312
|
-
insert(element) {
|
|
2313
|
-
this.append(element);
|
|
2314
|
-
}
|
|
2315
|
-
add(element) {
|
|
2316
|
-
this.append(element);
|
|
2317
|
-
}
|
|
2318
|
-
remove(element) {
|
|
2319
|
-
if (element) {
|
|
2320
|
-
element.remove();
|
|
2321
|
-
return;
|
|
2322
|
-
}
|
|
2323
|
-
this.domElement.remove();
|
|
2324
|
-
}
|
|
2325
|
-
prepend(element) {
|
|
2326
|
-
const domElement = element.domElement, referenceDOMElement = this.domElement.firstChild;
|
|
2327
|
-
this.domElement.insertBefore(domElement, referenceDOMElement);
|
|
2328
|
-
}
|
|
2329
|
-
append(element) {
|
|
2330
|
-
const domElement = element.domElement, referenceDOMElement = null;
|
|
2331
|
-
this.domElement.insertBefore(domElement, referenceDOMElement);
|
|
2332
|
-
}
|
|
2333
|
-
insertBefore(siblingElement) {
|
|
2334
|
-
const parentDOMNode = siblingElement.domElement.parentNode, referenceDOMElement = siblingElement.domElement;
|
|
2335
|
-
parentDOMNode.insertBefore(this.domElement, referenceDOMElement);
|
|
2336
|
-
}
|
|
2337
|
-
insertAfter(siblingElement) {
|
|
2338
|
-
const parentDOMNode = siblingElement.domElement.parentNode, referenceDOMElement = siblingElement.domElement.nextSibling;
|
|
2339
|
-
parentDOMNode.insertBefore(this.domElement, referenceDOMElement);
|
|
2340
|
-
}
|
|
2341
|
-
mount(element) {
|
|
2342
|
-
this.add(element);
|
|
2343
|
-
(0, _element1.mountElement)(element);
|
|
2344
|
-
}
|
|
2345
|
-
unmount(element) {
|
|
2346
|
-
(0, _element1.unmountElement)(element);
|
|
2347
|
-
this.remove(element);
|
|
2348
|
-
}
|
|
2349
|
-
mountBefore(siblingElement) {
|
|
2350
|
-
this.insertBefore(siblingElement);
|
|
2351
|
-
const element = this;
|
|
2352
|
-
(0, _element1.mountElement)(element);
|
|
2353
|
-
}
|
|
2354
|
-
mountAfter(siblingElement) {
|
|
2355
|
-
this.insertAfter(siblingElement);
|
|
2356
|
-
const element = this;
|
|
2357
|
-
(0, _element1.mountElement)(element);
|
|
2358
|
-
}
|
|
2359
|
-
show(displayStyle = _constants.BLOCK) {
|
|
2360
|
-
this.display(displayStyle);
|
|
2361
|
-
}
|
|
2362
|
-
hide() {
|
|
2363
|
-
this.style(_constants.DISPLAY, _constants.NONE);
|
|
2364
|
-
}
|
|
2365
|
-
display(display) {
|
|
2366
|
-
this.style(_constants.DISPLAY, display);
|
|
2367
|
-
}
|
|
2368
|
-
enable() {
|
|
2369
|
-
this.clearAttribute(_constants.DISABLED);
|
|
2370
|
-
}
|
|
2371
|
-
disable() {
|
|
2372
|
-
this.setAttribute(_constants.DISABLED, _constants.DISABLED);
|
|
2373
|
-
}
|
|
2374
|
-
isEnabled() {
|
|
2375
|
-
const disabled = this.isDisabled(), enabled = !disabled;
|
|
2376
|
-
return enabled;
|
|
2377
|
-
}
|
|
2378
|
-
isDisabled() {
|
|
2379
|
-
const disabled = this.hasAttribute(_constants.DISABLED);
|
|
2380
|
-
return disabled;
|
|
2381
|
-
}
|
|
2382
|
-
isDisplayed() {
|
|
2383
|
-
const display = this.css(_constants.DISPLAY), displayed = display !== _constants.NONE;
|
|
2384
|
-
return displayed;
|
|
2385
|
-
}
|
|
2386
|
-
isShowing() {
|
|
2387
|
-
const displayed = this.isDisplayed(), showing = displayed;
|
|
2388
|
-
return showing;
|
|
2389
|
-
}
|
|
2390
|
-
isHidden() {
|
|
2391
|
-
const displayed = this.isDisplayed(), hidden = !displayed;
|
|
2392
|
-
return hidden;
|
|
2393
|
-
}
|
|
2394
|
-
style(name, value = null) {
|
|
2395
|
-
if (value !== null) {
|
|
2396
|
-
this.domElement.style[name] = value;
|
|
2397
|
-
return;
|
|
2398
|
-
}
|
|
2399
|
-
const style = this.domElement.style[name];
|
|
2400
|
-
return style;
|
|
2401
|
-
}
|
|
2402
|
-
html(html = null) {
|
|
2403
|
-
if (html !== null) {
|
|
2404
|
-
const innerHTML2 = html;
|
|
2405
|
-
this.domElement.innerHTML = innerHTML2;
|
|
2406
|
-
return;
|
|
2407
|
-
}
|
|
2408
|
-
const innerHTML = this.domElement.innerHTML;
|
|
2409
|
-
html = innerHTML;
|
|
2410
|
-
return html;
|
|
2411
|
-
}
|
|
2412
|
-
css(css = null) {
|
|
2413
|
-
if (css === null) {
|
|
2414
|
-
css = {};
|
|
2415
|
-
const computedStyles = getComputedStyle(this.domElement);
|
|
2416
|
-
for (let index = 0; index < computedStyles.length; index++) {
|
|
2417
|
-
const computedStyle = computedStyles[index], name = computedStyle, value = computedStyles.getPropertyValue(name);
|
|
2418
|
-
css[name] = value;
|
|
2419
|
-
}
|
|
2420
|
-
} else if (typeof css === _constants.STRING) {
|
|
2421
|
-
let name = css;
|
|
2422
|
-
const computedStyles = getComputedStyle(this.domElement), value = computedStyles.getPropertyValue(name);
|
|
2423
|
-
css = value;
|
|
2424
|
-
} else {
|
|
2425
|
-
const names = Object.keys(css);
|
|
2426
|
-
names.forEach((name) => {
|
|
2427
|
-
const value = css[name];
|
|
2428
|
-
this.style(name, value);
|
|
2429
|
-
});
|
|
2430
|
-
}
|
|
2431
|
-
return css;
|
|
2432
|
-
}
|
|
2433
|
-
destroy() {
|
|
2434
|
-
const element = this;
|
|
2435
|
-
(0, _element1.destroyElement)(element);
|
|
2436
|
-
}
|
|
2437
|
-
static fromClass(Class, properties, ...remainingArguments) {
|
|
2438
|
-
const {tagName} = Class, element = elementFromTagName(Class, tagName, ...remainingArguments), defaultProperties = defaultPropertiesFromClass(Class), ignoredProperties = ignoredPropertiesFromClass(Class);
|
|
2439
|
-
element.applyProperties(properties, defaultProperties, ignoredProperties);
|
|
2440
|
-
element.initialise && element.initialise();
|
|
2441
|
-
return element;
|
|
2442
|
-
}
|
|
2443
|
-
static fromTagName(tagName, properties, ...remainingArguments) {
|
|
2444
|
-
const Class = Element, element = elementFromTagName(Class, tagName, ...remainingArguments), defaultProperties = {}, ignoredProperties = [];
|
|
2445
|
-
element.applyProperties(properties, defaultProperties, ignoredProperties);
|
|
2446
|
-
element.initialise && element.initialise();
|
|
2447
|
-
return element;
|
|
2448
|
-
}
|
|
2449
|
-
};
|
|
2450
|
-
Object.assign(Element.prototype, _jsx.default);
|
|
2451
|
-
Object.assign(Element.prototype, _key.default);
|
|
2452
|
-
Object.assign(Element.prototype, _mouse.default);
|
|
2453
|
-
Object.assign(Element.prototype, _click.default);
|
|
2454
|
-
Object.assign(Element.prototype, _state.default);
|
|
2455
|
-
Object.assign(Element.prototype, _event.default);
|
|
2456
|
-
Object.assign(Element.prototype, _touch.default);
|
|
2457
|
-
Object.assign(Element.prototype, _scroll.default);
|
|
2458
|
-
Object.assign(Element.prototype, _resize.default);
|
|
2459
|
-
Object.assign(Element.prototype, _element.default);
|
|
2460
|
-
Object.assign(Element.prototype, _fullScreen.default);
|
|
2461
|
-
Object.assign(Element.prototype, _customEvent.default);
|
|
2462
|
-
function elementFromTagName(Class, tagName, ...remainingArguments) {
|
|
2463
|
-
const selector = null, element = new (Function.prototype.bind.call(Class, null, selector, ...remainingArguments))(), domElement = (0, _name.isSVGTagName)(tagName) ? document.createElementNS(_constants.SVG_NAMESPACE_URI, tagName) : document.createElement(tagName);
|
|
2464
|
-
(0, _element1.constructElement)(element, domElement);
|
|
2465
|
-
return element;
|
|
2466
|
-
}
|
|
2467
|
-
function defaultPropertiesFromClass(Class, defaultProperties = {}) {
|
|
2468
|
-
if (Class.hasOwnProperty(_constants.DEFAULT_PROPERTIES)) {
|
|
2469
|
-
defaultProperties = (0, _object.combine)(defaultProperties, Class[_constants.DEFAULT_PROPERTIES]);
|
|
2470
|
-
}
|
|
2471
|
-
const superClass = Object.getPrototypeOf(Class);
|
|
2472
|
-
if (superClass !== null) {
|
|
2473
|
-
defaultProperties = defaultPropertiesFromClass(superClass, defaultProperties);
|
|
2474
|
-
}
|
|
2475
|
-
return defaultProperties;
|
|
2476
|
-
}
|
|
2477
|
-
function ignoredPropertiesFromClass(Class, ignoredProperties = []) {
|
|
2478
|
-
if (Class.hasOwnProperty(_constants.IGNORED_PROPERTIES)) {
|
|
2479
|
-
ignoredProperties = (0, _array.augment)(ignoredProperties, Class[_constants.IGNORED_PROPERTIES], (ignoredProperty) => {
|
|
2480
|
-
if (!ignoredProperties.includes(ignoredProperty)) {
|
|
2481
|
-
return true;
|
|
2482
|
-
}
|
|
2483
|
-
});
|
|
2484
|
-
}
|
|
2485
|
-
const superClass = Object.getPrototypeOf(Class);
|
|
2486
|
-
if (superClass !== null) {
|
|
2487
|
-
ignoredProperties = ignoredPropertiesFromClass(superClass, ignoredProperties);
|
|
2488
|
-
}
|
|
2489
|
-
return ignoredProperties;
|
|
2490
|
-
}
|
|
2491
|
-
});
|
|
2492
|
-
|
|
2493
|
-
// lib/react.js
|
|
2494
|
-
var require_react = __commonJS((exports) => {
|
|
2495
|
-
"use strict";
|
|
2496
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2497
|
-
value: true
|
|
2498
|
-
});
|
|
2499
|
-
Object.defineProperty(exports, "default", {
|
|
2500
|
-
enumerable: true,
|
|
2501
|
-
get: function() {
|
|
2502
|
-
return _default;
|
|
2503
|
-
}
|
|
2504
|
-
});
|
|
2505
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
2506
|
-
var _array = require_array();
|
|
2507
|
-
var _constants = require_constants();
|
|
2508
|
-
var _elements = require_elements();
|
|
2509
|
-
function _interop_require_default(obj) {
|
|
2510
|
-
return obj && obj.__esModule ? obj : {
|
|
2511
|
-
default: obj
|
|
2512
|
-
};
|
|
2513
|
-
}
|
|
2514
|
-
function createElement(firstArgument, properties, ...childElements) {
|
|
2515
|
-
let element = null;
|
|
2516
|
-
if (firstArgument) {
|
|
2517
|
-
childElements = sanitiseChildElements(childElements);
|
|
2518
|
-
properties = Object.assign({
|
|
2519
|
-
childElements
|
|
2520
|
-
}, properties);
|
|
2521
|
-
if (false) {
|
|
2522
|
-
} else if (isSubclassOf(firstArgument, _element.default)) {
|
|
2523
|
-
const Class = firstArgument;
|
|
2524
|
-
element = Class.fromClass(Class, properties);
|
|
2525
|
-
} else if (typeof firstArgument === _constants.STRING) {
|
|
2526
|
-
const tagName = firstArgument;
|
|
2527
|
-
element = _element.default.fromTagName(tagName, properties);
|
|
2528
|
-
} else if (typeof firstArgument === _constants.FUNCTION) {
|
|
2529
|
-
const elementFunction = firstArgument;
|
|
2530
|
-
element = elementFunction(properties);
|
|
2531
|
-
}
|
|
2532
|
-
}
|
|
2533
|
-
return element;
|
|
2534
|
-
}
|
|
2535
|
-
var React2 = {
|
|
2536
|
-
createElement
|
|
2537
|
-
};
|
|
2538
|
-
var _default = React2;
|
|
2539
|
-
function sanitiseChildElements(childElements) {
|
|
2540
|
-
childElements = (0, _array.flatten)(childElements);
|
|
2541
|
-
childElements = (0, _elements.removeFalseyElements)(childElements);
|
|
2542
|
-
childElements = (0, _elements.replaceStringsWithTextElements)(childElements);
|
|
2543
|
-
return childElements;
|
|
2544
|
-
}
|
|
2545
|
-
function isSubclassOf(argument, Class) {
|
|
2546
|
-
const subclassOf = argument.prototype instanceof Class;
|
|
2547
|
-
return subclassOf;
|
|
2548
|
-
}
|
|
2549
|
-
});
|
|
2550
|
-
|
|
2551
|
-
// lib/mouseButtons.js
|
|
2552
|
-
var require_mouseButtons = __commonJS((exports) => {
|
|
2553
|
-
"use strict";
|
|
2554
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2555
|
-
value: true
|
|
2556
|
-
});
|
|
2557
|
-
function _export(target, all) {
|
|
2558
|
-
for (var name in all)
|
|
2559
|
-
Object.defineProperty(target, name, {
|
|
2560
|
-
enumerable: true,
|
|
2561
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2562
|
-
});
|
|
2563
|
-
}
|
|
2564
|
-
_export(exports, {
|
|
2565
|
-
get LEFT_MOUSE_BUTTON() {
|
|
2566
|
-
return LEFT_MOUSE_BUTTON;
|
|
2567
|
-
},
|
|
2568
|
-
get MIDDLE_MOUSE_BUTTON() {
|
|
2569
|
-
return MIDDLE_MOUSE_BUTTON;
|
|
2570
|
-
},
|
|
2571
|
-
get RIGHT_MOUSE_BUTTON() {
|
|
2572
|
-
return RIGHT_MOUSE_BUTTON;
|
|
2573
|
-
},
|
|
2574
|
-
get default() {
|
|
2575
|
-
return _default;
|
|
2576
|
-
}
|
|
2577
|
-
});
|
|
2578
|
-
var LEFT_MOUSE_BUTTON = 0;
|
|
2579
|
-
var RIGHT_MOUSE_BUTTON = 2;
|
|
2580
|
-
var MIDDLE_MOUSE_BUTTON = 1;
|
|
2581
|
-
var _default = {
|
|
2582
|
-
LEFT_MOUSE_BUTTON,
|
|
2583
|
-
RIGHT_MOUSE_BUTTON,
|
|
2584
|
-
MIDDLE_MOUSE_BUTTON
|
|
2585
|
-
};
|
|
2586
|
-
});
|
|
2587
|
-
|
|
2588
|
-
// lib/mixins/input.js
|
|
2589
|
-
var require_input = __commonJS((exports) => {
|
|
2590
|
-
"use strict";
|
|
2591
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2592
|
-
value: true
|
|
2593
|
-
});
|
|
2594
|
-
Object.defineProperty(exports, "default", {
|
|
2595
|
-
enumerable: true,
|
|
2596
|
-
get: function() {
|
|
2597
|
-
return _default;
|
|
2598
|
-
}
|
|
2599
|
-
});
|
|
2600
|
-
var _eventTypes = require_eventTypes();
|
|
2601
|
-
function onInput(inputHandler, element) {
|
|
2602
|
-
this.onEvent(_eventTypes.INPUT_EVENT_TYPE, inputHandler, element);
|
|
2603
|
-
}
|
|
2604
|
-
function offInput(inputHandler, element) {
|
|
2605
|
-
this.offEvent(_eventTypes.INPUT_EVENT_TYPE, inputHandler, element);
|
|
2606
|
-
}
|
|
2607
|
-
function onChange(changeHandler, element) {
|
|
2608
|
-
this.onEvent(_eventTypes.CHANGE_EVENT_TYPE, changeHandler, element);
|
|
2609
|
-
}
|
|
2610
|
-
function offChange(changeHandler, element) {
|
|
2611
|
-
this.offEvent(_eventTypes.CHANGE_EVENT_TYPE, changeHandler, element);
|
|
2612
|
-
}
|
|
2613
|
-
function getValue() {
|
|
2614
|
-
return this.domElement.value;
|
|
2615
|
-
}
|
|
2616
|
-
function setValue(value) {
|
|
2617
|
-
this.domElement.value = value;
|
|
2618
|
-
}
|
|
2619
|
-
function isReadOnly() {
|
|
2620
|
-
return this.domElement.readOnly;
|
|
2621
|
-
}
|
|
2622
|
-
function setReadOnly(readOnly) {
|
|
2623
|
-
this.domElement.readOnly = readOnly;
|
|
2624
|
-
}
|
|
2625
|
-
var inputMixins = {
|
|
2626
|
-
onInput,
|
|
2627
|
-
offInput,
|
|
2628
|
-
onChange,
|
|
2629
|
-
offChange,
|
|
2630
|
-
getValue,
|
|
2631
|
-
setValue,
|
|
2632
|
-
isReadOnly,
|
|
2633
|
-
setReadOnly
|
|
2634
|
-
};
|
|
2635
|
-
var _default = inputMixins;
|
|
2636
|
-
});
|
|
2637
|
-
|
|
2638
|
-
// lib/mixins/focus.js
|
|
2639
|
-
var require_focus = __commonJS((exports) => {
|
|
2640
|
-
"use strict";
|
|
2641
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2642
|
-
value: true
|
|
2643
|
-
});
|
|
2644
|
-
Object.defineProperty(exports, "default", {
|
|
2645
|
-
enumerable: true,
|
|
2646
|
-
get: function() {
|
|
2647
|
-
return _default;
|
|
2648
|
-
}
|
|
2649
|
-
});
|
|
2650
|
-
var _eventTypes = require_eventTypes();
|
|
2651
|
-
function onBlur(blurHandler, element) {
|
|
2652
|
-
this.onEvent(_eventTypes.BLUR_EVENT_TYPE, blurHandler, element);
|
|
2653
|
-
}
|
|
2654
|
-
function offBlur(blurHandler, element) {
|
|
2655
|
-
this.offEvent(_eventTypes.BLUR_EVENT_TYPE, blurHandler, element);
|
|
2656
|
-
}
|
|
2657
|
-
function onFocus(focusHandler, element) {
|
|
2658
|
-
this.onEvent(_eventTypes.FOCUS_EVENT_TYPE, focusHandler, element);
|
|
2659
|
-
}
|
|
2660
|
-
function offFocus(focusHandler, element) {
|
|
2661
|
-
this.offEvent(_eventTypes.FOCUS_EVENT_TYPE, focusHandler, element);
|
|
2662
|
-
}
|
|
2663
|
-
function blur() {
|
|
2664
|
-
this.domElement.blur();
|
|
2665
|
-
}
|
|
2666
|
-
function focus() {
|
|
2667
|
-
this.domElement.focus();
|
|
2668
|
-
}
|
|
2669
|
-
function hasFocus() {
|
|
2670
|
-
const focus2 = document.activeElement === this.domElement;
|
|
2671
|
-
return focus2;
|
|
2672
|
-
}
|
|
2673
|
-
var focusMixins = {
|
|
2674
|
-
onBlur,
|
|
2675
|
-
offBlur,
|
|
2676
|
-
onFocus,
|
|
2677
|
-
offFocus,
|
|
2678
|
-
blur,
|
|
2679
|
-
focus,
|
|
2680
|
-
hasFocus
|
|
2681
|
-
};
|
|
2682
|
-
var _default = focusMixins;
|
|
2683
|
-
});
|
|
2684
|
-
|
|
2685
|
-
// lib/mixins/selection.js
|
|
2686
|
-
var require_selection = __commonJS((exports) => {
|
|
2687
|
-
"use strict";
|
|
2688
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2689
|
-
value: true
|
|
2690
|
-
});
|
|
2691
|
-
Object.defineProperty(exports, "default", {
|
|
2692
|
-
enumerable: true,
|
|
2693
|
-
get: function() {
|
|
2694
|
-
return _default;
|
|
2695
|
-
}
|
|
2696
|
-
});
|
|
2697
|
-
var _eventTypes = require_eventTypes();
|
|
2698
|
-
function onCut(cutHandler, element) {
|
|
2699
|
-
this.onEvent(_eventTypes.CUT_EVENT_TYPE, cutHandler, element);
|
|
2700
|
-
}
|
|
2701
|
-
function offCut(cutHandler, element) {
|
|
2702
|
-
this.offEvent(_eventTypes.CUT_EVENT_TYPE, cutHandler, element);
|
|
2703
|
-
}
|
|
2704
|
-
function onCopy(copyHandler, element) {
|
|
2705
|
-
this.onEvent(_eventTypes.COPY_EVENT_TYPE, copyHandler, element);
|
|
2706
|
-
}
|
|
2707
|
-
function offCopy(copyHandler, element) {
|
|
2708
|
-
this.offEvent(_eventTypes.COPY_EVENT_TYPE, copyHandler, element);
|
|
2709
|
-
}
|
|
2710
|
-
function onPaste(pasteHandler, element) {
|
|
2711
|
-
this.onEvent(_eventTypes.PASTE_EVENT_TYPE, pasteHandler, element);
|
|
2712
|
-
}
|
|
2713
|
-
function offPaste(pasteHandler, element) {
|
|
2714
|
-
this.offEvent(_eventTypes.PASTE_EVENT_TYPE, pasteHandler, element);
|
|
2715
|
-
}
|
|
2716
|
-
function getSelectionStart() {
|
|
2717
|
-
return this.domElement.selectionStart;
|
|
2718
|
-
}
|
|
2719
|
-
function getSelectionEnd() {
|
|
2720
|
-
return this.domElement.selectionEnd;
|
|
2721
|
-
}
|
|
2722
|
-
function setSelectionStart(selectionStart) {
|
|
2723
|
-
this.domElement.selectionStart = selectionStart;
|
|
2724
|
-
}
|
|
2725
|
-
function setSelectionEnd(selectionEnd) {
|
|
2726
|
-
this.domElement.selectionEnd = selectionEnd;
|
|
2727
|
-
}
|
|
2728
|
-
function select() {
|
|
2729
|
-
this.domElement.select();
|
|
2730
|
-
}
|
|
2731
|
-
var selectionMixins = {
|
|
2732
|
-
onCut,
|
|
2733
|
-
offCut,
|
|
2734
|
-
onCopy,
|
|
2735
|
-
offCopy,
|
|
2736
|
-
onPaste,
|
|
2737
|
-
offPaste,
|
|
2738
|
-
getSelectionStart,
|
|
2739
|
-
getSelectionEnd,
|
|
2740
|
-
setSelectionStart,
|
|
2741
|
-
setSelectionEnd,
|
|
2742
|
-
select
|
|
2743
|
-
};
|
|
2744
|
-
var _default = selectionMixins;
|
|
2745
|
-
});
|
|
2746
|
-
|
|
2747
|
-
// lib/document.js
|
|
2748
|
-
var require_document = __commonJS((exports) => {
|
|
2749
|
-
"use strict";
|
|
2750
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2751
|
-
value: true
|
|
2752
|
-
});
|
|
2753
|
-
Object.defineProperty(exports, "default", {
|
|
2754
|
-
enumerable: true,
|
|
2755
|
-
get: function() {
|
|
2756
|
-
return _default;
|
|
2757
|
-
}
|
|
2758
|
-
});
|
|
2759
|
-
var _key = /* @__PURE__ */ _interop_require_default(require_key());
|
|
2760
|
-
var _event = /* @__PURE__ */ _interop_require_default(require_event());
|
|
2761
|
-
var _mouse = /* @__PURE__ */ _interop_require_default(require_mouse());
|
|
2762
|
-
var _click = /* @__PURE__ */ _interop_require_default(require_click());
|
|
2763
|
-
var _constants = require_constants();
|
|
2764
|
-
var _eventTypes = require_eventTypes();
|
|
2765
|
-
function _interop_require_default(obj) {
|
|
2766
|
-
return obj && obj.__esModule ? obj : {
|
|
2767
|
-
default: obj
|
|
2768
|
-
};
|
|
2769
|
-
}
|
|
2770
|
-
var Document = class {
|
|
2771
|
-
constructor() {
|
|
2772
|
-
this.domElement = document;
|
|
2773
|
-
}
|
|
2774
|
-
getDOMElement() {
|
|
2775
|
-
return this.domElement;
|
|
2776
|
-
}
|
|
2777
|
-
getSelection() {
|
|
2778
|
-
return this.domElement.getSelection();
|
|
2779
|
-
}
|
|
2780
|
-
createRange() {
|
|
2781
|
-
return this.domElement.createRange();
|
|
2782
|
-
}
|
|
2783
|
-
createTextNode(data) {
|
|
2784
|
-
return this.domElement.createTextNode(data);
|
|
2785
|
-
}
|
|
2786
|
-
onSelectionChange(selectionChangeHandler, element) {
|
|
2787
|
-
this.onEvent(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, selectionChangeHandler, element);
|
|
2788
|
-
}
|
|
2789
|
-
offSelectionChange(selectionChangeHandler, element) {
|
|
2790
|
-
this.offEvent(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, selectionChangeHandler, element);
|
|
2791
|
-
}
|
|
2792
|
-
createEventListener(eventType, handler, element) {
|
|
2793
|
-
let eventListener;
|
|
2794
|
-
const handlerElement = element;
|
|
2795
|
-
eventListener = (event) => {
|
|
2796
|
-
if (eventType === _eventTypes.SELECTIONCHANGE_EVENT_TYPE) {
|
|
2797
|
-
const {domElement} = handlerElement, {currentTarget} = event, {activeElement} = currentTarget;
|
|
2798
|
-
if (domElement !== activeElement) {
|
|
2799
|
-
return;
|
|
2800
|
-
}
|
|
2801
|
-
}
|
|
2802
|
-
const element2 = this;
|
|
2803
|
-
handler.call(handlerElement, event, element2);
|
|
2804
|
-
};
|
|
2805
|
-
Object.assign(eventListener, {
|
|
2806
|
-
element,
|
|
2807
|
-
handler,
|
|
2808
|
-
eventType
|
|
2809
|
-
});
|
|
2810
|
-
return eventListener;
|
|
2811
|
-
}
|
|
2812
|
-
};
|
|
2813
|
-
Object.assign(Document.prototype, _key.default);
|
|
2814
|
-
Object.assign(Document.prototype, _event.default);
|
|
2815
|
-
Object.assign(Document.prototype, _mouse.default);
|
|
2816
|
-
Object.assign(Document.prototype, _click.default);
|
|
2817
|
-
var _default = typeof document === _constants.UNDEFINED ? void 0 : new Document();
|
|
2818
|
-
});
|
|
2819
|
-
|
|
2820
|
-
// lib/window.js
|
|
2821
|
-
var require_window = __commonJS((exports) => {
|
|
2822
|
-
"use strict";
|
|
2823
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2824
|
-
value: true
|
|
2825
|
-
});
|
|
2826
|
-
Object.defineProperty(exports, "default", {
|
|
2827
|
-
enumerable: true,
|
|
2828
|
-
get: function() {
|
|
2829
|
-
return _default;
|
|
2830
|
-
}
|
|
2831
|
-
});
|
|
2832
|
-
var _key = /* @__PURE__ */ _interop_require_default(require_key());
|
|
2833
|
-
var _event = /* @__PURE__ */ _interop_require_default(require_event());
|
|
2834
|
-
var _mouse = /* @__PURE__ */ _interop_require_default(require_mouse());
|
|
2835
|
-
var _click = /* @__PURE__ */ _interop_require_default(require_click());
|
|
2836
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
2837
|
-
var _constants = require_constants();
|
|
2838
|
-
var _eventTypes = require_eventTypes();
|
|
2839
|
-
var _scroll = require_scroll();
|
|
2840
|
-
function _interop_require_default(obj) {
|
|
2841
|
-
return obj && obj.__esModule ? obj : {
|
|
2842
|
-
default: obj
|
|
2843
|
-
};
|
|
2844
|
-
}
|
|
2845
|
-
var Window = class {
|
|
2846
|
-
constructor() {
|
|
2847
|
-
this.domElement = window;
|
|
2848
|
-
}
|
|
2849
|
-
getDOMElement() {
|
|
2850
|
-
return this.domElement;
|
|
2851
|
-
}
|
|
2852
|
-
assign(...sources) {
|
|
2853
|
-
const target = this.domElement;
|
|
2854
|
-
Object.assign(target, ...sources);
|
|
2855
|
-
}
|
|
2856
|
-
reload() {
|
|
2857
|
-
window.location.reload();
|
|
2858
|
-
}
|
|
2859
|
-
getWidth() {
|
|
2860
|
-
return this.domElement.innerWidth;
|
|
2861
|
-
}
|
|
2862
|
-
getHeight() {
|
|
2863
|
-
return this.domElement.innerHeight;
|
|
2864
|
-
}
|
|
2865
|
-
getScrollTop() {
|
|
2866
|
-
return this.domElement.pageYOffset;
|
|
2867
|
-
}
|
|
2868
|
-
getScrollLeft() {
|
|
2869
|
-
return this.domElement.pageXOffset;
|
|
2870
|
-
}
|
|
2871
|
-
getSelection() {
|
|
2872
|
-
return this.domElement.getSelection();
|
|
2873
|
-
}
|
|
2874
|
-
getScreenWidth() {
|
|
2875
|
-
return this.domElement.screen.width;
|
|
2876
|
-
}
|
|
2877
|
-
getScreenHeight() {
|
|
2878
|
-
return this.domElement.screen.height;
|
|
2879
|
-
}
|
|
2880
|
-
scrollTo(scrollTop, scrollLeft) {
|
|
2881
|
-
this.domElement.scrollTo(scrollLeft, scrollTop);
|
|
2882
|
-
}
|
|
2883
|
-
onResize(resizeHandler, element) {
|
|
2884
|
-
const eventType = _eventTypes.RESIZE_EVENT_TYPE, eventListener = this.addEventListener(eventType, resizeHandler, element);
|
|
2885
|
-
this.domElement.addEventListener(eventType, eventListener);
|
|
2886
|
-
}
|
|
2887
|
-
offResize(resizeHandler, element) {
|
|
2888
|
-
const eventType = _eventTypes.RESIZE_EVENT_TYPE, eventListener = this.removeEventListener(eventType, resizeHandler, element);
|
|
2889
|
-
this.domElement.removeEventListener(eventType, eventListener);
|
|
2890
|
-
}
|
|
2891
|
-
};
|
|
2892
|
-
Object.assign(Window.prototype, _key.default);
|
|
2893
|
-
Object.assign(Window.prototype, _event.default);
|
|
2894
|
-
Object.assign(Window.prototype, _mouse.default);
|
|
2895
|
-
Object.assign(Window.prototype, _click.default);
|
|
2896
|
-
Object.assign(Window.prototype, _focus.default);
|
|
2897
|
-
Object.assign(Window.prototype, {
|
|
2898
|
-
onScroll: _scroll.onScroll,
|
|
2899
|
-
offScroll: _scroll.offScroll
|
|
2900
|
-
});
|
|
2901
|
-
var _default = typeof window === _constants.UNDEFINED ? void 0 : new Window();
|
|
2902
|
-
});
|
|
2903
|
-
|
|
2904
|
-
// lib/element/body.js
|
|
2905
|
-
var require_body = __commonJS((exports) => {
|
|
2906
|
-
"use strict";
|
|
2907
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2908
|
-
value: true
|
|
2909
|
-
});
|
|
2910
|
-
Object.defineProperty(exports, "default", {
|
|
2911
|
-
enumerable: true,
|
|
2912
|
-
get: function() {
|
|
2913
|
-
return Body;
|
|
2914
|
-
}
|
|
2915
|
-
});
|
|
2916
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
2917
|
-
var _constants = require_constants();
|
|
2918
|
-
function _interop_require_default(obj) {
|
|
2919
|
-
return obj && obj.__esModule ? obj : {
|
|
2920
|
-
default: obj
|
|
2921
|
-
};
|
|
2922
|
-
}
|
|
2923
|
-
var Body = class extends _element.default {
|
|
2924
|
-
constructor(selector = _constants.BODY) {
|
|
2925
|
-
super(selector);
|
|
2926
|
-
}
|
|
2927
|
-
};
|
|
2928
|
-
__publicField(Body, "tagName", "body");
|
|
2929
|
-
});
|
|
2930
|
-
|
|
2931
|
-
// lib/element/link.js
|
|
2932
|
-
var require_link = __commonJS((exports) => {
|
|
2933
|
-
"use strict";
|
|
2934
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2935
|
-
value: true
|
|
2936
|
-
});
|
|
2937
|
-
Object.defineProperty(exports, "default", {
|
|
2938
|
-
enumerable: true,
|
|
2939
|
-
get: function() {
|
|
2940
|
-
return Link;
|
|
2941
|
-
}
|
|
2942
|
-
});
|
|
2943
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
2944
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
2945
|
-
function _interop_require_default(obj) {
|
|
2946
|
-
return obj && obj.__esModule ? obj : {
|
|
2947
|
-
default: obj
|
|
2948
|
-
};
|
|
2949
|
-
}
|
|
2950
|
-
var Link = class extends _element.default {
|
|
2951
|
-
getHRef() {
|
|
2952
|
-
return this.getAttribute("href");
|
|
2953
|
-
}
|
|
2954
|
-
setHRef(href) {
|
|
2955
|
-
return this.setAttribute("href", href);
|
|
2956
|
-
}
|
|
2957
|
-
};
|
|
2958
|
-
__publicField(Link, "tagName", "a");
|
|
2959
|
-
Object.assign(Link.prototype, _focus.default);
|
|
2960
|
-
});
|
|
2961
|
-
|
|
2962
|
-
// lib/element/input.js
|
|
2963
|
-
var require_input2 = __commonJS((exports) => {
|
|
2964
|
-
"use strict";
|
|
2965
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2966
|
-
value: true
|
|
2967
|
-
});
|
|
2968
|
-
Object.defineProperty(exports, "default", {
|
|
2969
|
-
enumerable: true,
|
|
2970
|
-
get: function() {
|
|
2971
|
-
return Input;
|
|
2972
|
-
}
|
|
2973
|
-
});
|
|
2974
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
2975
|
-
var _input = /* @__PURE__ */ _interop_require_default(require_input());
|
|
2976
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
2977
|
-
var _selection = /* @__PURE__ */ _interop_require_default(require_selection());
|
|
2978
|
-
function _interop_require_default(obj) {
|
|
2979
|
-
return obj && obj.__esModule ? obj : {
|
|
2980
|
-
default: obj
|
|
2981
|
-
};
|
|
2982
|
-
}
|
|
2983
|
-
var Input = class extends _element.default {
|
|
2984
|
-
};
|
|
2985
|
-
__publicField(Input, "tagName", "input");
|
|
2986
|
-
Object.assign(Input.prototype, _input.default);
|
|
2987
|
-
Object.assign(Input.prototype, _focus.default);
|
|
2988
|
-
Object.assign(Input.prototype, _selection.default);
|
|
2989
|
-
});
|
|
2990
|
-
|
|
2991
|
-
// lib/element/button.js
|
|
2992
|
-
var require_button = __commonJS((exports) => {
|
|
2993
|
-
"use strict";
|
|
2994
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2995
|
-
value: true
|
|
2996
|
-
});
|
|
2997
|
-
Object.defineProperty(exports, "default", {
|
|
2998
|
-
enumerable: true,
|
|
2999
|
-
get: function() {
|
|
3000
|
-
return Button;
|
|
3001
|
-
}
|
|
3002
|
-
});
|
|
3003
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
3004
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
3005
|
-
function _interop_require_default(obj) {
|
|
3006
|
-
return obj && obj.__esModule ? obj : {
|
|
3007
|
-
default: obj
|
|
3008
|
-
};
|
|
3009
|
-
}
|
|
3010
|
-
var Button = class extends _element.default {
|
|
3011
|
-
};
|
|
3012
|
-
__publicField(Button, "tagName", "button");
|
|
3013
|
-
Object.assign(Button.prototype, _focus.default);
|
|
3014
|
-
});
|
|
3015
|
-
|
|
3016
|
-
// lib/element/select.js
|
|
3017
|
-
var require_select = __commonJS((exports) => {
|
|
3018
|
-
"use strict";
|
|
3019
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3020
|
-
value: true
|
|
3021
|
-
});
|
|
3022
|
-
Object.defineProperty(exports, "default", {
|
|
3023
|
-
enumerable: true,
|
|
3024
|
-
get: function() {
|
|
3025
|
-
return Select;
|
|
3026
|
-
}
|
|
3027
|
-
});
|
|
3028
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
3029
|
-
var _input = /* @__PURE__ */ _interop_require_default(require_input());
|
|
3030
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
3031
|
-
function _interop_require_default(obj) {
|
|
3032
|
-
return obj && obj.__esModule ? obj : {
|
|
3033
|
-
default: obj
|
|
3034
|
-
};
|
|
3035
|
-
}
|
|
3036
|
-
var Select = class extends _element.default {
|
|
3037
|
-
};
|
|
3038
|
-
__publicField(Select, "tagName", "select");
|
|
3039
|
-
Object.assign(Select.prototype, _input.default);
|
|
3040
|
-
Object.assign(Select.prototype, _focus.default);
|
|
3041
|
-
});
|
|
3042
|
-
|
|
3043
|
-
// lib/element/checkbox.js
|
|
3044
|
-
var require_checkbox = __commonJS((exports) => {
|
|
3045
|
-
"use strict";
|
|
3046
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3047
|
-
value: true
|
|
3048
|
-
});
|
|
3049
|
-
Object.defineProperty(exports, "default", {
|
|
3050
|
-
enumerable: true,
|
|
3051
|
-
get: function() {
|
|
3052
|
-
return Checkbox;
|
|
3053
|
-
}
|
|
3054
|
-
});
|
|
3055
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
3056
|
-
var _input = /* @__PURE__ */ _interop_require_default(require_input());
|
|
3057
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
3058
|
-
function _interop_require_default(obj) {
|
|
3059
|
-
return obj && obj.__esModule ? obj : {
|
|
3060
|
-
default: obj
|
|
3061
|
-
};
|
|
3062
|
-
}
|
|
3063
|
-
var Checkbox = class extends _element.default {
|
|
3064
|
-
isChecked() {
|
|
3065
|
-
return this.domElement.checked;
|
|
3066
|
-
}
|
|
3067
|
-
check(checked = true) {
|
|
3068
|
-
this.domElement.checked = checked;
|
|
3069
|
-
}
|
|
3070
|
-
};
|
|
3071
|
-
__publicField(Checkbox, "tagName", "input");
|
|
3072
|
-
__publicField(Checkbox, "defaultProperties", {
|
|
3073
|
-
type: "checkbox"
|
|
3074
|
-
});
|
|
3075
|
-
Object.assign(Checkbox.prototype, _input.default);
|
|
3076
|
-
Object.assign(Checkbox.prototype, _focus.default);
|
|
3077
|
-
});
|
|
3078
|
-
|
|
3079
|
-
// lib/element/textarea.js
|
|
3080
|
-
var require_textarea = __commonJS((exports) => {
|
|
3081
|
-
"use strict";
|
|
3082
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3083
|
-
value: true
|
|
3084
|
-
});
|
|
3085
|
-
Object.defineProperty(exports, "default", {
|
|
3086
|
-
enumerable: true,
|
|
3087
|
-
get: function() {
|
|
3088
|
-
return Textarea;
|
|
3089
|
-
}
|
|
3090
|
-
});
|
|
3091
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
3092
|
-
var _input = /* @__PURE__ */ _interop_require_default(require_input());
|
|
3093
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
3094
|
-
var _selection = /* @__PURE__ */ _interop_require_default(require_selection());
|
|
3095
|
-
function _interop_require_default(obj) {
|
|
3096
|
-
return obj && obj.__esModule ? obj : {
|
|
3097
|
-
default: obj
|
|
3098
|
-
};
|
|
3099
|
-
}
|
|
3100
|
-
var Textarea = class extends _element.default {
|
|
3101
|
-
};
|
|
3102
|
-
__publicField(Textarea, "tagName", "textarea");
|
|
3103
|
-
Object.assign(Textarea.prototype, _input.default);
|
|
3104
|
-
Object.assign(Textarea.prototype, _focus.default);
|
|
3105
|
-
Object.assign(Textarea.prototype, _selection.default);
|
|
3106
|
-
});
|
|
3107
|
-
|
|
3108
|
-
// lib/index.js
|
|
3109
|
-
var require_lib = __commonJS((exports) => {
|
|
3110
|
-
"use strict";
|
|
3111
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3112
|
-
value: true
|
|
3113
|
-
});
|
|
3114
|
-
function _export(target, all) {
|
|
3115
|
-
for (var name in all)
|
|
3116
|
-
Object.defineProperty(target, name, {
|
|
3117
|
-
enumerable: true,
|
|
3118
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
3119
|
-
});
|
|
3120
|
-
}
|
|
3121
|
-
_export(exports, {
|
|
3122
|
-
get Body() {
|
|
3123
|
-
return _body.default;
|
|
3124
|
-
},
|
|
3125
|
-
get Bounds() {
|
|
3126
|
-
return _bounds.default;
|
|
3127
|
-
},
|
|
3128
|
-
get Button() {
|
|
3129
|
-
return _button.default;
|
|
3130
|
-
},
|
|
3131
|
-
get Checkbox() {
|
|
3132
|
-
return _checkbox.default;
|
|
3133
|
-
},
|
|
3134
|
-
get Element() {
|
|
3135
|
-
return _element1.default;
|
|
3136
|
-
},
|
|
3137
|
-
get Input() {
|
|
3138
|
-
return _input1.default;
|
|
3139
|
-
},
|
|
3140
|
-
get Link() {
|
|
3141
|
-
return _link.default;
|
|
3142
|
-
},
|
|
3143
|
-
get Offset() {
|
|
3144
|
-
return _offset.default;
|
|
3145
|
-
},
|
|
3146
|
-
get React() {
|
|
3147
|
-
return _react.default;
|
|
3148
|
-
},
|
|
3149
|
-
get Select() {
|
|
3150
|
-
return _select.default;
|
|
3151
|
-
},
|
|
3152
|
-
get TextElement() {
|
|
3153
|
-
return _textElement.default;
|
|
3154
|
-
},
|
|
3155
|
-
get Textarea() {
|
|
3156
|
-
return _textarea.default;
|
|
3157
|
-
},
|
|
3158
|
-
get customEventMixins() {
|
|
3159
|
-
return _customEvent.default;
|
|
3160
|
-
},
|
|
3161
|
-
get document() {
|
|
3162
|
-
return _document.default;
|
|
3163
|
-
},
|
|
3164
|
-
get elementUtilities() {
|
|
3165
|
-
return _element.default;
|
|
3166
|
-
},
|
|
3167
|
-
get eventTypes() {
|
|
3168
|
-
return _eventTypes.default;
|
|
3169
|
-
},
|
|
3170
|
-
get focusMixins() {
|
|
3171
|
-
return _focus.default;
|
|
3172
|
-
},
|
|
3173
|
-
get inputMixins() {
|
|
3174
|
-
return _input.default;
|
|
3175
|
-
},
|
|
3176
|
-
get mouseButtons() {
|
|
3177
|
-
return _mouseButtons.default;
|
|
3178
|
-
},
|
|
3179
|
-
get selectionMixins() {
|
|
3180
|
-
return _selection.default;
|
|
3181
|
-
},
|
|
3182
|
-
get window() {
|
|
3183
|
-
return _window.default;
|
|
3184
|
-
}
|
|
3185
|
-
});
|
|
3186
|
-
var _react = /* @__PURE__ */ _interop_require_default(require_react());
|
|
3187
|
-
var _bounds = /* @__PURE__ */ _interop_require_default(require_bounds());
|
|
3188
|
-
var _offset = /* @__PURE__ */ _interop_require_default(require_offset());
|
|
3189
|
-
var _eventTypes = /* @__PURE__ */ _interop_require_default(require_eventTypes());
|
|
3190
|
-
var _mouseButtons = /* @__PURE__ */ _interop_require_default(require_mouseButtons());
|
|
3191
|
-
var _element = /* @__PURE__ */ _interop_require_default(require_element());
|
|
3192
|
-
var _input = /* @__PURE__ */ _interop_require_default(require_input());
|
|
3193
|
-
var _focus = /* @__PURE__ */ _interop_require_default(require_focus());
|
|
3194
|
-
var _selection = /* @__PURE__ */ _interop_require_default(require_selection());
|
|
3195
|
-
var _customEvent = /* @__PURE__ */ _interop_require_default(require_customEvent());
|
|
3196
|
-
var _element1 = /* @__PURE__ */ _interop_require_default(require_element3());
|
|
3197
|
-
var _textElement = /* @__PURE__ */ _interop_require_default(require_textElement());
|
|
3198
|
-
var _document = /* @__PURE__ */ _interop_require_default(require_document());
|
|
3199
|
-
var _window = /* @__PURE__ */ _interop_require_default(require_window());
|
|
3200
|
-
var _body = /* @__PURE__ */ _interop_require_default(require_body());
|
|
3201
|
-
var _link = /* @__PURE__ */ _interop_require_default(require_link());
|
|
3202
|
-
var _input1 = /* @__PURE__ */ _interop_require_default(require_input2());
|
|
3203
|
-
var _button = /* @__PURE__ */ _interop_require_default(require_button());
|
|
3204
|
-
var _select = /* @__PURE__ */ _interop_require_default(require_select());
|
|
3205
|
-
var _checkbox = /* @__PURE__ */ _interop_require_default(require_checkbox());
|
|
3206
|
-
var _textarea = /* @__PURE__ */ _interop_require_default(require_textarea());
|
|
3207
|
-
function _interop_require_default(obj) {
|
|
3208
|
-
return obj && obj.__esModule ? obj : {
|
|
3209
|
-
default: obj
|
|
3210
|
-
};
|
|
3211
|
-
}
|
|
3212
|
-
});
|
|
3213
|
-
|
|
3214
|
-
// lib/example/preamble.js
|
|
3215
|
-
var require_preamble = __commonJS((exports) => {
|
|
3216
|
-
"use strict";
|
|
3217
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3218
|
-
value: true
|
|
3219
|
-
});
|
|
3220
|
-
var _index = require_lib();
|
|
3221
|
-
Object.assign(globalThis, {
|
|
3222
|
-
React: _index.React
|
|
3223
|
-
});
|
|
3224
|
-
});
|
|
3225
|
-
|
|
3226
|
-
// lib/example/view/div.js
|
|
3227
|
-
var require_div = __commonJS((exports) => {
|
|
3228
|
-
"use strict";
|
|
3229
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3230
|
-
value: true
|
|
3231
|
-
});
|
|
3232
|
-
Object.defineProperty(exports, "default", {
|
|
3233
|
-
enumerable: true,
|
|
3234
|
-
get: function() {
|
|
3235
|
-
return Div;
|
|
3236
|
-
}
|
|
3237
|
-
});
|
|
3238
|
-
var _index = require_lib();
|
|
3239
|
-
var Div = class extends _index.Element {
|
|
3240
|
-
mouseMoveHandler = (event, element) => {
|
|
3241
|
-
const {pageX, pageY} = event;
|
|
3242
|
-
console.log(pageX, pageY);
|
|
3243
|
-
};
|
|
3244
|
-
resizeHandler = (event, element) => {
|
|
3245
|
-
const width = this.getWidth(), height = this.getHeight();
|
|
3246
|
-
console.log(width, height);
|
|
3247
|
-
};
|
|
3248
|
-
didMount() {
|
|
3249
|
-
this.onResize(this.resizeHandler, this);
|
|
3250
|
-
this.onMouseMove(this.mouseMoveHandler, this);
|
|
3251
|
-
}
|
|
3252
|
-
willUnmount() {
|
|
3253
|
-
this.offMouseMove(this.mouseMoveHandler, this);
|
|
3254
|
-
this.offResize(this.resizeHandler, this);
|
|
3255
|
-
}
|
|
3256
|
-
childElements() {
|
|
3257
|
-
return /* @__PURE__ */ React.createElement("p", null, "A paragraph contained in a div with resize and mouse move handlers.");
|
|
3258
|
-
}
|
|
3259
|
-
};
|
|
3260
|
-
__publicField(Div, "tagName", "div");
|
|
3261
|
-
});
|
|
3262
|
-
|
|
3263
|
-
// lib/example/view.js
|
|
3264
|
-
var require_view = __commonJS((exports) => {
|
|
3265
|
-
"use strict";
|
|
3266
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3267
|
-
value: true
|
|
3268
|
-
});
|
|
3269
|
-
Object.defineProperty(exports, "default", {
|
|
3270
|
-
enumerable: true,
|
|
3271
|
-
get: function() {
|
|
3272
|
-
return View;
|
|
3273
|
-
}
|
|
3274
|
-
});
|
|
3275
|
-
var _index = require_lib();
|
|
3276
|
-
var _div = /* @__PURE__ */ _interop_require_default(require_div());
|
|
3277
|
-
function _interop_require_default(obj) {
|
|
3278
|
-
return obj && obj.__esModule ? obj : {
|
|
3279
|
-
default: obj
|
|
3280
|
-
};
|
|
3281
|
-
}
|
|
3282
|
-
var View = class extends _index.Element {
|
|
3283
|
-
childElements() {
|
|
3284
|
-
return /* @__PURE__ */ React.createElement(_div.default, null);
|
|
3285
|
-
}
|
|
3286
|
-
};
|
|
3287
|
-
__publicField(View, "tagName", "div");
|
|
3288
|
-
__publicField(View, "defaultProperties", {
|
|
3289
|
-
className: "view"
|
|
3290
|
-
});
|
|
3291
|
-
});
|
|
3292
|
-
|
|
3293
|
-
// lib/example.js
|
|
3294
|
-
var require_example = __commonJS((exports) => {
|
|
3295
|
-
"use strict";
|
|
3296
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3297
|
-
value: true
|
|
3298
|
-
});
|
|
3299
|
-
require_preamble();
|
|
3300
|
-
var _index = require_lib();
|
|
3301
|
-
var _view = /* @__PURE__ */ _interop_require_default(require_view());
|
|
3302
|
-
function _interop_require_default(obj) {
|
|
3303
|
-
return obj && obj.__esModule ? obj : {
|
|
3304
|
-
default: obj
|
|
3305
|
-
};
|
|
3306
|
-
}
|
|
3307
|
-
var body = new _index.Body();
|
|
3308
|
-
body.mount(/* @__PURE__ */ React.createElement(_view.default, null));
|
|
3309
|
-
});
|
|
3310
|
-
require_example();
|
|
3311
|
-
})();
|
|
3312
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL29mZnNldC5qcyIsICJzcmMvYm91bmRzLmpzIiwgInNyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAic3JjL2NvbnN0YW50cy5qcyIsICJzcmMvdXRpbGl0aWVzL29iamVjdC5qcyIsICJzcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJzcmMvdXRpbGl0aWVzL25hbWUuanMiLCAic3JjL3V0aWxpdGllcy9lbGVtZW50LmpzIiwgInNyYy91dGlsaXRpZXMvZG9tLmpzIiwgInNyYy9taXhpbnMvZWxlbWVudC5qcyIsICJzcmMvdGV4dEVsZW1lbnQuanMiLCAic3JjL3V0aWxpdGllcy9lbGVtZW50cy5qcyIsICJzcmMvZXZlbnRUeXBlcy5qcyIsICJzcmMvbWl4aW5zL2pzeC5qcyIsICJzcmMvbWl4aW5zL2tleS5qcyIsICJzcmMvbWl4aW5zL3N0YXRlLmpzIiwgInNyYy9taXhpbnMvZXZlbnQuanMiLCAic3JjL21peGlucy9tb3VzZS5qcyIsICJzcmMvbWl4aW5zL2NsaWNrLmpzIiwgInNyYy9taXhpbnMvdG91Y2guanMiLCAic3JjL21peGlucy9zY3JvbGwuanMiLCAic3JjL21peGlucy9yZXNpemUuanMiLCAic3JjL21peGlucy9mdWxsU2NyZWVuLmpzIiwgInNyYy91dGlsaXRpZXMvYXN5bmMuanMiLCAic3JjL21peGlucy9jdXN0b21FdmVudC5qcyIsICJzcmMvZWxlbWVudC5qcyIsICJzcmMvcmVhY3QuanMiLCAic3JjL21vdXNlQnV0dG9ucy5qcyIsICJzcmMvbWl4aW5zL2lucHV0LmpzIiwgInNyYy9taXhpbnMvZm9jdXMuanMiLCAic3JjL21peGlucy9zZWxlY3Rpb24uanMiLCAic3JjL2RvY3VtZW50LmpzIiwgInNyYy93aW5kb3cuanMiLCAic3JjL2VsZW1lbnQvYm9keS5qcyIsICJzcmMvZWxlbWVudC9saW5rLmpzIiwgInNyYy9lbGVtZW50L2lucHV0LmpzIiwgInNyYy9lbGVtZW50L2J1dHRvbi5qcyIsICJzcmMvZWxlbWVudC9zZWxlY3QuanMiLCAic3JjL2VsZW1lbnQvY2hlY2tib3guanMiLCAic3JjL2VsZW1lbnQvdGV4dGFyZWEuanMiLCAic3JjL2luZGV4LmpzIiwgInNyYy9leGFtcGxlL3ByZWFtYmxlLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvZGl2LmpzIiwgInNyYy9leGFtcGxlL3ZpZXcuanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPZmZzZXQge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQpIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRE9NRWxlbWVudChkb21FbGVtZW50KSB7XG4gICAgY29uc3QgeyBvZmZzZXRUb3AsIG9mZnNldExlZnQgfSA9IGRvbUVsZW1lbnQsXG4gICAgICAgICAgdG9wID0gb2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IG9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvdW5kcyB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuXG4gIGdldFJpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0O1xuICB9XG5cbiAgZ2V0Qm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IHdpZHRoID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmJvdHRvbSAtIHRoaXMudG9wKTtcblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cbiAgXG4gIHNldFRvcCh0b3ApIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgfVxuXG4gIHNldExlZnQobGVmdCkge1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBzZXRSaWdodChyaWdodCkge1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgfVxuXG4gIHNldEJvdHRvbShib3R0b20pIHtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIGFyZU92ZXJsYXBwaW5nKGJvdW5kcykge1xuICAgIGNvbnN0IGJvdHRvbSA9IGJvdW5kcy5nZXRCb3R0b20oKSxcbiAgICAgICAgICByaWdodCA9IGJvdW5kcy5nZXRSaWdodCgpLFxuICAgICAgICAgIGxlZnQgPSBib3VuZHMuZ2V0TGVmdCgpLFxuICAgICAgICAgIHRvcCA9IGJvdW5kcy5nZXRUb3AoKSxcbiAgICAgICAgICBvdmVybGFwcGluZyA9ICgodGhpcy50b3AgPCBib3R0b20pXG4gICAgICAgICAgICAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8IHJpZ2h0KVxuICAgICAgICAgICAgICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gbGVmdClcbiAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiB0b3ApKTtcblxuICAgIHJldHVybiBvdmVybGFwcGluZztcbiAgfVxuXG4gIGFyZU92ZXJsYXBwaW5nQnlUb3BBbmRMZWZ0KHRvcCwgbGVmdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nID0gKCh0aGlzLnRvcCA8PSB0b3ApXG4gICAgICAgICAgICAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8PSBsZWZ0KVxuICAgICAgICAgICAgICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gbGVmdClcbiAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiB0b3ApKTtcblxuICAgIHJldHVybiBvdmVybGFwcGluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRE9NRWxlbWVudChkb21FbGVtZW50KSB7XG4gICAgY29uc3QgeyBwYWdlWE9mZnNldCwgcGFnZVlPZmZzZXQgfSA9IHdpbmRvdyxcbiAgICAgICAgICBib3VuZGluZ0NsaWVudFJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgIHdpbmRvd1Njcm9sbFRvcCA9IHBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gcGFnZVhPZmZzZXQsICAvLy9cbiAgICAgICAgICB0b3AgPSBib3VuZGluZ0NsaWVudFJlY3QudG9wICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGxlZnQgPSBib3VuZGluZ0NsaWVudFJlY3QubGVmdCArIHdpbmRvd1Njcm9sbExlZnQsXG4gICAgICAgICAgcmlnaHQgPSBib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIGJvdHRvbSA9IGJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3dTY3JvbGxUb3AsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9wTGVmdFdpZHRoQW5kSGVpZ2h0KHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodCxcbiAgICAgICAgICByaWdodCA9IGxlZnQgKyB3aWR0aCxcbiAgICAgICAgICBib3VuZHMgPSBuZXcgQm91bmRzKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5MSA9IFsgLi4uYXJyYXkxIF07IC8vL1xuXG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyYXkxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkucmVkdWNlKChhcnJheSwgZWxlbWVudCkgPT4ge1xuICAgIGFycmF5ID0gYXJyYXkuY29uY2F0KGVsZW1lbnQpOyAgLy8vXG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd1YXJhbnRlZShhcnJheU9yRWxlbWVudCkge1xuICBhcnJheU9yRWxlbWVudCA9IGFycmF5T3JFbGVtZW50IHx8IFtdO1xuXG4gIHJldHVybiAoYXJyYXlPckVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgYXJyYXlPckVsZW1lbnQgOlxuICAgICAgICAgICAgICBbYXJyYXlPckVsZW1lbnRdO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRk9SID0gXCJmb3JcIjtcbmV4cG9ydCBjb25zdCBCT0RZID0gXCJib2R5XCI7XG5leHBvcnQgY29uc3QgTk9ORSA9IFwibm9uZVwiO1xuZXhwb3J0IGNvbnN0IFNQQUNFID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ0xBU1MgPSBcImNsYXNzXCI7XG5leHBvcnQgY29uc3QgV0lEVEggPSBcIndpZHRoXCI7XG5leHBvcnQgY29uc3QgQkxPQ0sgPSBcImJsb2NrXCI7XG5leHBvcnQgY29uc3QgSEVJR0hUID0gXCJoZWlnaHRcIjtcbmV4cG9ydCBjb25zdCBPQkpFQ1QgPSBcIm9iamVjdFwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgRElTUExBWSA9IFwiZGlzcGxheVwiO1xuZXhwb3J0IGNvbnN0IEJPT0xFQU4gPSBcImJvb2xlYW5cIjtcbmV4cG9ydCBjb25zdCBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbmV4cG9ydCBjb25zdCBGVU5DVElPTiA9IFwiZnVuY3Rpb25cIjtcbmV4cG9ydCBjb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEhUTUxfRk9SID0gXCJodG1sRm9yXCI7XG5leHBvcnQgY29uc3QgVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTVkdfTkFNRVNQQUNFX1VSSSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST1BFUlRJRVMgPSBcImRlZmF1bHRQcm9wZXJ0aWVzXCI7XG5leHBvcnQgY29uc3QgSUdOT1JFRF9QUk9QRVJUSUVTID0gXCJpZ25vcmVkUHJvcGVydGllc1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCT09MRUFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YXJnZXQsIHNvdXJjZSA9IHt9KSB7XG4gIHRhcmdldCA9IHsgIC8vL1xuICAgIC4uLnRhcmdldFxuICB9O1xuXG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtuYW1lXSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtuYW1lXSxcbiAgICAgICAgICB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIHRhcmdldFtuYW1lXSA9IHRhcmdldEhhc093blByb3BlcnR5ID9cbiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlOyAvLy9cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKHRhcmdldCwgbmFtZXMgPSBbXSkge1xuICB0YXJnZXQgPSB7ICAvLy9cbiAgICAuLi50YXJnZXRcbiAgfTtcblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0SGFzT3duUHJvcGVydHkgPSB0YXJnZXQuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0SGFzT3duUHJvcGVydHkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbmFtZV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lVmFsdWVzKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkge1xuICBjb25zdCB0YXJnZXRWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbih0YXJnZXRWYWx1ZSksXG4gICAgICAgIHNvdXJjZVZhbHVlQm9vbGVhbiA9IGlzVmFsdWVCb29sZWFuKHNvdXJjZVZhbHVlKSxcbiAgICAgICAgY29tYmluZWRWYWx1ZSA9ICh0YXJnZXRWYWx1ZUJvb2xlYW4gJiYgc291cmNlVmFsdWVCb29sZWFuKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGFyZ2V0VmFsdWV9ICR7c291cmNlVmFsdWV9YDtcblxuICByZXR1cm4gY29tYmluZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUJvb2xlYW4odmFsdWUpIHtcbiAgY29uc3QgdmFsdWVCb29sZWFuID0gKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTik7XG5cbiAgcmV0dXJuIHZhbHVlQm9vbGVhbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvU25ha2VDYXNlKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbQS1aXSspL2csIChtYXRjaCwgY2hhcmFjdGVycykgPT4ge1xuICAgIGNvbnN0IHVwcGVyQ2FzZUNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgc25ha2VDYXNlQ2hhcmFjdGVycyA9IGAtJHt1cHBlckNhc2VDaGFyYWN0ZXJzfWA7XG5cbiAgICByZXR1cm4gc25ha2VDYXNlQ2hhcmFjdGVycztcbiAgfSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NWR1RhZ05hbWUodGFnTmFtZSkge1xuICByZXR1cm4gc3ZnVGFnTmFtZXMuaW5jbHVkZXModGFnTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NWR0F0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gc3ZnQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hUTUxBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIGh0bWxBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuY29uc3Qgc3ZnVGFnTmFtZXMgPSBbXG4gICAgICAgIFwiYWx0R2x5cGhcIiwgXCJhbmltYXRlXCIsIFwiYW5pbWF0ZUNvbG9yXCIsIFwiYW5pbWF0ZU1vdGlvblwiLCBcImFuaW1hdGVUcmFuc2Zvcm1cIiwgXCJhbmltYXRpb25cIiwgXCJhdWRpb1wiLFxuICAgICAgICBcImNpcmNsZVwiLCBcImNsaXBQYXRoXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImN1cnNvclwiLFxuICAgICAgICBcImRlZnNcIiwgXCJkZXNjXCIsIFwiZGlzY2FyZFwiLFxuICAgICAgICBcImVsbGlwc2VcIixcbiAgICAgICAgXCJmZUJsZW5kXCIsIFwiZmVDb2xvck1hdHJpeFwiLCBcImZlQ29tcG9uZW50VHJhbnNmZXJcIiwgXCJmZUNvbXBvc2l0ZVwiLCBcImZlQ29udm9sdmVNYXRyaXhcIiwgXCJmZURpZmZ1c2VMaWdodGluZ1wiLCBcImZlRGlzcGxhY2VtZW50TWFwXCIsIFwiZmVEaXN0YW50TGlnaHRcIiwgXCJmZURyb3BTaGFkb3dcIiwgXCJmZUZsb29kXCIsIFwiZmVGdW5jQVwiLCBcImZlRnVuY0JcIiwgXCJmZUZ1bmNHXCIsIFwiZmVGdW5jUlwiLCBcImZlR2F1c3NpYW5CbHVyXCIsIFwiZmVJbWFnZVwiLCBcImZlTWVyZ2VcIiwgXCJmZU1lcmdlTm9kZVwiLCBcImZlTW9ycGhvbG9neVwiLCBcImZlT2Zmc2V0XCIsIFwiZmVQb2ludExpZ2h0XCIsIFwiZmVTcGVjdWxhckxpZ2h0aW5nXCIsIFwiZmVTcG90TGlnaHRcIiwgXCJmZVRpbGVcIiwgXCJmZVR1cmJ1bGVuY2VcIiwgXCJmaWx0ZXJcIiwgXCJmb250XCIsIFwiZm9udC1mYWNlXCIsIFwiZm9udC1mYWNlLWZvcm1hdFwiLCBcImZvbnQtZmFjZS1uYW1lXCIsIFwiZm9udC1mYWNlLXVyaVwiLCBcImZvcmVpZ25PYmplY3RcIixcbiAgICAgICAgXCJnXCIsIFwiZ2x5cGhcIiwgXCJnbHlwaFJlZlwiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYXRjaFwiLCBcImhhdGNocGF0aFwiLCBcImhrZXJuXCIsXG4gICAgICAgIFwiaW1hZ2VcIiwgXCJsaW5lXCIsIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgXCJsaXN0ZW5lclwiLFxuICAgICAgICBcIm1hcmtlclwiLCBcIm1hc2tcIiwgXCJtZXNoXCIsIFwibWVzaGdyYWRpZW50XCIsIFwibWVzaHBhdGNoXCIsIFwibWVzaHJvd1wiLCBcIm1ldGFkYXRhXCIsIFwibWlzc2luZy1nbHlwaFwiLCBcIm1wYXRoXCIsXG4gICAgICAgIFwicGF0aFwiLCBcInBhdHRlcm5cIiwgXCJwb2x5Z29uXCIsIFwicG9seWxpbmVcIiwgXCJwcmVmZXRjaFwiLFxuICAgICAgICBcInJhZGlhbEdyYWRpZW50XCIsIFwicmVjdFwiLFxuICAgICAgICBcInNjcmlwdFwiLCBcInNldFwiLCBcInNvbGlkY29sb3JcIiwgXCJzdG9wXCIsIFwic3R5bGVcIiwgXCJzdmdcIiwgXCJzd2l0Y2hcIiwgXCJzeW1ib2xcIixcbiAgICAgICAgXCJ0YnJlYWtcIiwgXCJ0ZXh0XCIsIFwidGV4dEFyZWFcIiwgXCJ0ZXh0UGF0aFwiLCBcInRpdGxlXCIsIFwidHJlZlwiLCBcInRzcGFuXCIsXG4gICAgICAgIFwidW5rbm93blwiLCBcInVzZVwiLFxuICAgICAgICBcInZpZGVvXCIsIFwidmlld1wiLCBcInZrZXJuXCJcbiAgICAgIF0sXG4gICAgICBzdmdBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlbnQtaGVpZ2h0XCIsIFwiYWNjdW11bGF0ZVwiLCBcImFkZGl0aXZlXCIsIFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiYWxwaGFiZXRpY1wiLCBcImFtcGxpdHVkZVwiLCBcImFyYWJpYy1mb3JtXCIsIFwiYXNjZW50XCIsIFwiYXR0cmlidXRlTmFtZVwiLCBcImF0dHJpYnV0ZVR5cGVcIiwgXCJhemltdXRoXCIsXG4gICAgICAgIFwiYmFuZHdpZHRoXCIsIFwiYmFzZUZyZXF1ZW5jeVwiLCBcImJhc2VQcm9maWxlXCIsIFwiYmFzZWxpbmUtc2hpZnRcIiwgXCJiYm94XCIsIFwiYmVnaW5cIiwgXCJiaWFzXCIsIFwiYnlcIixcbiAgICAgICAgXCJjYWxjTW9kZVwiLCBcImNhcC1oZWlnaHRcIiwgXCJjbGlwXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xpcC1wYXRoXCIsIFwiY2xpcC1ydWxlXCIsIFwiY2xpcFBhdGhVbml0c1wiLCBcImNvbG9yXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvblwiLCBcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjb2xvci1yZW5kZXJpbmdcIiwgXCJjb250ZW50U2NyaXB0VHlwZVwiLCBcImNvbnRlbnRTdHlsZVR5cGVcIiwgXCJjcm9zc29yaWdpblwiLCBcImN1cnNvclwiLCBcImN4XCIsIFwiY3lcIixcbiAgICAgICAgXCJkXCIsIFwiZGVmYXVsdEFjdGlvblwiLCBcImRlc2NlbnRcIiwgXCJkaWZmdXNlQ29uc3RhbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJkaXNwbGF5XCIsIFwiZGl2aXNvclwiLCBcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiZG93bmxvYWRcIiwgXCJkdXJcIiwgXCJkeFwiLCBcImR5XCIsXG4gICAgICAgIFwiZWRnZU1vZGVcIiwgXCJlZGl0YWJsZVwiLCBcImVsZXZhdGlvblwiLCBcImVuYWJsZS1iYWNrZ3JvdW5kXCIsIFwiZW5kXCIsIFwiZXZlbnRcIiwgXCJleHBvbmVudFwiLCBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcbiAgICAgICAgXCJmaWxsXCIsIFwiZmlsbC1vcGFjaXR5XCIsIFwiZmlsbC1ydWxlXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyUmVzXCIsIFwiZmlsdGVyVW5pdHNcIiwgXCJmbG9vZC1jb2xvclwiLCBcImZsb29kLW9wYWNpdHlcIiwgXCJmb2N1c0hpZ2hsaWdodFwiLCBcImZvY3VzYWJsZVwiLCBcImZvbnQtZmFtaWx5XCIsIFwiZm9udC1zaXplXCIsIFwiZm9udC1zaXplLWFkanVzdFwiLCBcImZvbnQtc3RyZXRjaFwiLCBcImZvbnQtc3R5bGVcIiwgXCJmb250LXZhcmlhbnRcIiwgXCJmb250LXdlaWdodFwiLCBcImZvcm1hdFwiLCBcImZyXCIsIFwiZnJvbVwiLCBcImZ4XCIsIFwiZnlcIixcbiAgICAgICAgXCJnMVwiLCBcImcyXCIsIFwiZ2x5cGgtbmFtZVwiLCBcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiLCBcImdseXBoUmVmXCIsIFwiZ3JhZGllbnRUcmFuc2Zvcm1cIiwgXCJncmFkaWVudFVuaXRzXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhbmdpbmdcIiwgXCJoYXRjaENvbnRlbnRVbml0c1wiLCBcImhhdGNoVW5pdHNcIiwgXCJoZWlnaHRcIiwgXCJob3Jpei1hZHYteFwiLCBcImhvcml6LW9yaWdpbi14XCIsIFwiaG9yaXotb3JpZ2luLXlcIiwgXCJocmVmXCIsIFwiaHJlZmxhbmdcIixcbiAgICAgICAgXCJpZFwiLCBcImlkZW9ncmFwaGljXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCIsIFwiaW5cIiwgXCJpbjJcIiwgXCJpbml0aWFsVmlzaWJpbGl0eVwiLCBcImludGVyY2VwdFwiLFxuICAgICAgICBcImtcIiwgXCJrMVwiLCBcImsyXCIsIFwiazNcIiwgXCJrNFwiLCBcImtlcm5lbE1hdHJpeFwiLCBcImtlcm5lbFVuaXRMZW5ndGhcIiwgXCJrZXJuaW5nXCIsIFwia2V5UG9pbnRzXCIsIFwia2V5U3BsaW5lc1wiLCBcImtleVRpbWVzXCIsXG4gICAgICAgIFwibGVuZ3RoQWRqdXN0XCIsIFwibGV0dGVyLXNwYWNpbmdcIiwgXCJsaWdodGluZy1jb2xvclwiLCBcImxpbWl0aW5nQ29uZUFuZ2xlXCIsIFwibG9jYWxcIixcbiAgICAgICAgXCJtYXJrZXItZW5kXCIsIFwibWFya2VyLW1pZFwiLCBcIm1hcmtlci1zdGFydFwiLCBcIm1hcmtlckhlaWdodFwiLCBcIm1hcmtlclVuaXRzXCIsIFwibWFya2VyV2lkdGhcIiwgXCJtYXNrXCIsIFwibWFza0NvbnRlbnRVbml0c1wiLCBcIm1hc2tVbml0c1wiLCBcIm1hdGhlbWF0aWNhbFwiLCBcIm1heFwiLCBcIm1lZGlhXCIsIFwibWVkaWFDaGFyYWN0ZXJFbmNvZGluZ1wiLCBcIm1lZGlhQ29udGVudEVuY29kaW5nc1wiLCBcIm1lZGlhU2l6ZVwiLCBcIm1lZGlhVGltZVwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1vZGVcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibmF2LWRvd25cIiwgXCJuYXYtZG93bi1sZWZ0XCIsIFwibmF2LWRvd24tcmlnaHRcIiwgXCJuYXYtbGVmdFwiLCBcIm5hdi1uZXh0XCIsIFwibmF2LXByZXZcIiwgXCJuYXYtcmlnaHRcIiwgXCJuYXYtdXBcIiwgXCJuYXYtdXAtbGVmdFwiLCBcIm5hdi11cC1yaWdodFwiLCBcIm51bU9jdGF2ZXNcIixcbiAgICAgICAgXCJvYnNlcnZlclwiLCBcIm9mZnNldFwiLCBcIm9wYWNpdHlcIiwgXCJvcGVyYXRvclwiLCBcIm9yZGVyXCIsIFwib3JpZW50XCIsIFwib3JpZW50YXRpb25cIiwgXCJvcmlnaW5cIiwgXCJvdmVyZmxvd1wiLCBcIm92ZXJsYXlcIiwgXCJvdmVybGluZS1wb3NpdGlvblwiLCBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiLFxuICAgICAgICBcInBhbm9zZS0xXCIsIFwicGF0aFwiLCBcInBhdGhMZW5ndGhcIiwgXCJwYXR0ZXJuQ29udGVudFVuaXRzXCIsIFwicGF0dGVyblRyYW5zZm9ybVwiLCBcInBhdHRlcm5Vbml0c1wiLCBcInBoYXNlXCIsIFwicGl0Y2hcIiwgXCJwbGF5YmFja09yZGVyXCIsIFwicGxheWJhY2tvcmRlclwiLCBcInBvaW50ZXItZXZlbnRzXCIsIFwicG9pbnRzXCIsIFwicG9pbnRzQXRYXCIsIFwicG9pbnRzQXRZXCIsIFwicG9pbnRzQXRaXCIsIFwicHJlc2VydmVBbHBoYVwiLCBcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJwcmltaXRpdmVVbml0c1wiLCBcInByb3BhZ2F0ZVwiLFxuICAgICAgICBcInJcIiwgXCJyYWRpdXNcIiwgXCJyZWZYXCIsIFwicmVmWVwiLCBcInJlbmRlcmluZy1pbnRlbnRcIiwgXCJyZXBlYXRDb3VudFwiLCBcInJlcGVhdER1clwiLCBcInJlcXVpcmVkRXh0ZW5zaW9uc1wiLCBcInJlcXVpcmVkRmVhdHVyZXNcIiwgXCJyZXF1aXJlZEZvbnRzXCIsIFwicmVxdWlyZWRGb3JtYXRzXCIsIFwicmVzdGFydFwiLCBcInJlc3VsdFwiLCBcInJvdGF0ZVwiLCBcInJ4XCIsIFwicnlcIixcbiAgICAgICAgXCJzY2FsZVwiLCBcInNlZWRcIiwgXCJzaGFwZS1yZW5kZXJpbmdcIiwgXCJzaWRlXCIsIFwic2xvcGVcIiwgXCJzbmFwc2hvdFRpbWVcIiwgXCJzcGFjaW5nXCIsIFwic3BlY3VsYXJDb25zdGFudFwiLCBcInNwZWN1bGFyRXhwb25lbnRcIiwgXCJzcHJlYWRNZXRob2RcIiwgXCJzcmNcIiwgXCJzdGFydE9mZnNldFwiLCBcInN0ZERldmlhdGlvblwiLCBcInN0ZW1oXCIsIFwic3RlbXZcIiwgXCJzdGl0Y2hUaWxlc1wiLCBcInN0b3AtY29sb3JcIiwgXCJzdG9wLW9wYWNpdHlcIiwgXCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uXCIsIFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIiwgXCJzdHJpbmdcIiwgXCJzdHJva2VcIiwgXCJzdHJva2UtZGFzaGFycmF5XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIiwgXCJzdHJva2UtbGluZWNhcFwiLCBcInN0cm9rZS1saW5lam9pblwiLCBcInN0cm9rZS1taXRlcmxpbWl0XCIsIFwic3Ryb2tlLW9wYWNpdHlcIiwgXCJzdHJva2Utd2lkdGhcIiwgXCJzdHlsZVwiLCBcInN1cmZhY2VTY2FsZVwiLCBcInN5bmNCZWhhdmlvclwiLCBcInN5bmNCZWhhdmlvckRlZmF1bHRcIiwgXCJzeW5jTWFzdGVyXCIsIFwic3luY1RvbGVyYW5jZVwiLCBcInN5bmNUb2xlcmFuY2VEZWZhdWx0XCIsIFwic3lzdGVtTGFuZ3VhZ2VcIixcbiAgICAgICAgXCJ0YWJsZVZhbHVlc1wiLCBcInRhcmdldFwiLCBcInRhcmdldFhcIiwgXCJ0YXJnZXRZXCIsIFwidGV4dC1hbmNob3JcIiwgXCJ0ZXh0LWRlY29yYXRpb25cIiwgXCJ0ZXh0LXJlbmRlcmluZ1wiLCBcInRleHRMZW5ndGhcIiwgXCJ0aW1lbGluZUJlZ2luXCIsIFwidGltZWxpbmViZWdpblwiLCBcInRpdGxlXCIsIFwidG9cIiwgXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2Zvcm1CZWhhdmlvclwiLCBcInR5cGVcIixcbiAgICAgICAgXCJ1MVwiLCBcInUyXCIsIFwidW5kZXJsaW5lLXBvc2l0aW9uXCIsIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiLCBcInVuaWNvZGVcIiwgXCJ1bmljb2RlLWJpZGlcIiwgXCJ1bmljb2RlLXJhbmdlXCIsIFwidW5pdHMtcGVyLWVtXCIsXG4gICAgICAgIFwidi1hbHBoYWJldGljXCIsIFwidi1oYW5naW5nXCIsIFwidi1pZGVvZ3JhcGhpY1wiLCBcInYtbWF0aGVtYXRpY2FsXCIsIFwidmFsdWVzXCIsIFwidmVyc2lvblwiLCBcInZlcnQtYWR2LXlcIiwgXCJ2ZXJ0LW9yaWdpbi14XCIsIFwidmVydC1vcmlnaW4teVwiLCBcInZpZXdCb3hcIiwgXCJ2aWV3VGFyZ2V0XCIsIFwidmlzaWJpbGl0eVwiLFxuICAgICAgICBcIndpZHRoXCIsIFwid2lkdGhzXCIsIFwid29yZC1zcGFjaW5nXCIsIFwid3JpdGluZy1tb2RlXCIsXG4gICAgICAgIFwieFwiLCBcIngtaGVpZ2h0XCIsIFwieDFcIiwgXCJ4MlwiLCBcInhDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgXCJ5XCIsIFwieTFcIiwgXCJ5MlwiLCBcInlDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgXCJ6XCIsIFwiem9vbUFuZFBhblwiXG4gICAgICBdLFxuICAgICAgaHRtbEF0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VwdFwiLCBcImFjY2VwdENoYXJzZXRcIiwgXCJhY2Nlc3NLZXlcIiwgXCJhY3Rpb25cIiwgXCJhbGxvd1wiLCBcImFsbG93RnVsbFNjcmVlblwiLCBcImFsbG93VHJhbnNwYXJlbmN5XCIsIFwiYWx0XCIsIFwiYXN5bmNcIiwgXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvUGxheVwiLFxuICAgICAgICBcImNhcHR1cmVcIiwgXCJjZWxsUGFkZGluZ1wiLCBcImNlbGxTcGFjaW5nXCIsIFwiY2hhbGxlbmdlXCIsIFwiY2hhclNldFwiLCBcImNoZWNrZWRcIiwgXCJjaXRlXCIsIFwiY2xhc3NJRFwiLCBcImNsYXNzTmFtZVwiLCBcImNvbFNwYW5cIiwgXCJjb2xzXCIsIFwiY29udGVudFwiLCBcImNvbnRlbnRFZGl0YWJsZVwiLCBcImNvbnRleHRNZW51XCIsIFwiY29udHJvbHNcIiwgXCJjb29yZHNcIiwgXCJjcm9zc09yaWdpblwiLFxuICAgICAgICBcImRhdGFcIiwgXCJkYXRlVGltZVwiLCBcImRlZmF1bHRcIiwgXCJkZWZlclwiLCBcImRpclwiLCBcImRpc2FibGVkXCIsIFwiZG93bmxvYWRcIiwgXCJkcmFnZ2FibGVcIixcbiAgICAgICAgXCJlbmNUeXBlXCIsXG4gICAgICAgIFwiZm9ybVwiLCBcImZvcm1BY3Rpb25cIiwgXCJmb3JtRW5jVHlwZVwiLCBcImZvcm1NZXRob2RcIiwgXCJmb3JtTm9WYWxpZGF0ZVwiLCBcImZvcm1UYXJnZXRcIiwgXCJmcmFtZUJvcmRlclwiLFxuICAgICAgICBcImhlYWRlcnNcIiwgXCJoZWlnaHRcIiwgXCJoaWRkZW5cIiwgXCJoaWdoXCIsIFwiaHJlZlwiLCBcImhyZWZMYW5nXCIsIFwiaHRtbEZvclwiLCBcImh0dHBFcXVpdlwiLFxuICAgICAgICBcImljb25cIiwgXCJpZFwiLCBcImlucHV0TW9kZVwiLCBcImludGVncml0eVwiLCBcImlzXCIsXG4gICAgICAgIFwia2V5UGFyYW1zXCIsIFwia2V5VHlwZVwiLCBcImtpbmRcIixcbiAgICAgICAgXCJsYWJlbFwiLCBcImxhbmdcIiwgXCJsaXN0XCIsIFwibG9vcFwiLCBcImxvd1wiLFxuICAgICAgICBcIm1hbmlmZXN0XCIsIFwibWFyZ2luSGVpZ2h0XCIsIFwibWFyZ2luV2lkdGhcIiwgXCJtYXhcIiwgXCJtYXhMZW5ndGhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhR3JvdXBcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtaW5MZW5ndGhcIiwgXCJtdWx0aXBsZVwiLCBcIm11dGVkXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5vVmFsaWRhdGVcIiwgXCJub25jZVwiLFxuICAgICAgICBcIm9wZW5cIiwgXCJvcHRpbXVtXCIsXG4gICAgICAgIFwicGF0dGVyblwiLCBcInBsYWNlaG9sZGVyXCIsIFwicG9zdGVyXCIsIFwicHJlbG9hZFwiLCBcInByb2ZpbGVcIixcbiAgICAgICAgXCJyYWRpb0dyb3VwXCIsIFwicmVhZE9ubHlcIiwgXCJyZWxcIiwgXCJyZXF1aXJlZFwiLCBcInJldmVyc2VkXCIsIFwicm9sZVwiLCBcInJvd1NwYW5cIiwgXCJyb3dzXCIsXG4gICAgICAgIFwic2FuZGJveFwiLCBcInNjb3BlXCIsIFwic2NvcGVkXCIsIFwic2Nyb2xsaW5nXCIsIFwic2VhbWxlc3NcIiwgXCJzZWxlY3RlZFwiLCBcInNoYXBlXCIsIFwic2l6ZVwiLCBcInNpemVzXCIsIFwic3BhblwiLCBcInNwZWxsQ2hlY2tcIiwgXCJzcmNcIiwgXCJzcmNEb2NcIiwgXCJzcmNMYW5nXCIsIFwic3JjU2V0XCIsIFwic3RhcnRcIiwgXCJzdGVwXCIsIFwic3R5bGVcIiwgXCJzdW1tYXJ5XCIsXG4gICAgICAgIFwidGFiSW5kZXhcIiwgXCJ0YXJnZXRcIiwgXCJ0aXRsZVwiLCBcInR5cGVcIixcbiAgICAgICAgXCJ1c2VNYXBcIixcbiAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIFwid21vZGVcIixcbiAgICAgICAgXCJ3cmFwXCJcbiAgICAgIF07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RFbGVtZW50KGVsZW1lbnQsIGRvbUVsZW1lbnQpIHtcbiAgZWxlbWVudC5kb21FbGVtZW50ID0gZG9tRWxlbWVudDtcblxuICBkb21FbGVtZW50Ll9fZWxlbWVudF9fID0gZWxlbWVudDsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgIF07XG5cbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmdldERPTUVsZW1lbnQoKTtcblxuICAgIGRlbGV0ZSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBkZWxldGUgZG9tRWxlbWVudC5fX2VsZW1lbnRfXztcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VudEVsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCBkZXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50LmdldERlc2NlbmRhbnRFbGVtZW50cygpLFxuICAgICAgICBlbGVtZW50cyA9IFtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIC4uLmRlc2NlbmRhbnRFbGVtZW50c1xuICAgICAgICBdO1xuXG4gIGVsZW1lbnRzLnJldmVyc2UoKTsgLy8vXG5cbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGVsZW1lbnQuZGlkTW91bnQgJiYgZWxlbWVudC5kaWRNb3VudCgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVubW91bnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudC5nZXREZXNjZW5kYW50RWxlbWVudHMoKSxcbiAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAuLi5kZXNjZW5kYW50RWxlbWVudHNcbiAgICAgICAgXTtcblxuICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgZWxlbWVudC53aWxsVW5tb3VudCAmJiBlbGVtZW50LndpbGxVbm1vdW50KCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbnN0cnVjdEVsZW1lbnQsXG4gIGRlc3Ryb3lFbGVtZW50LFxuICBtb3VudEVsZW1lbnQsXG4gIHVubW91bnRFbGVtZW50XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhkb21FbGVtZW50cykge1xuICBjb25zdCBkb21FbGVtZW50c1dpdGhFbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzKGRvbUVsZW1lbnRzLCAoZG9tRWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICgoZG9tRWxlbWVudC5fX2VsZW1lbnRfXykpIHsgLy8vXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBlbGVtZW50cyA9IGRvbUVsZW1lbnRzV2l0aEVsZW1lbnRzLm1hcCgoZG9tRWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb21FbGVtZW50Ll9fZWxlbWVudF9fOyAvLy9cblxuICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCwgYXNjZW5kYW50RE9NTm9kZXMgPSBbXSkge1xuICBpZiAoaGVpZ2h0ID4gMCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBkb21Ob2RlLnBhcmVudEVsZW1lbnQ7ICAvLy9cblxuICAgIGlmIChwYXJlbnRET01Ob2RlICE9PSBudWxsKSB7XG4gICAgICBhc2NlbmRhbnRET01Ob2Rlcy5wdXNoKHBhcmVudERPTU5vZGUpO1xuXG4gICAgICBoZWlnaHQtLTtcblxuICAgICAgYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShwYXJlbnRET01Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXNjZW5kYW50RE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCwgZGVzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGRlcHRoID4gMCkge1xuICAgIGNvbnN0IGNoaWxkRE9NTm9kZXMgPSBkb21Ob2RlLmNoaWxkTm9kZXM7ICAvLy9cblxuICAgIHB1c2goZGVzY2VuZGFudERPTU5vZGVzLCBjaGlsZERPTU5vZGVzKTtcblxuICAgIGRlcHRoLS07XG5cbiAgICBjaGlsZERPTU5vZGVzLmZvckVhY2goKGNoaWxkRE9NTm9kZSkgPT4ge1xuICAgICAgZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoY2hpbGRET01Ob2RlLCBkZXB0aCwgZGVzY2VuZGFudERPTU5vZGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBkZXNjZW5kYW50RE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoZG9tTm9kZXMsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGZpbHRlcmVkRE9NTm9kZXMgPSBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgKGRvbU5vZGUpID0+IHtcbiAgICBpZiAoZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkRE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKGRvbU5vZGUsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGRvbU5vZGVUeXBlID0gZG9tTm9kZS5ub2RlVHlwZTsgLy8vXG5cbiAgc3dpdGNoIChkb21Ob2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb21Ob2RlOyAvLy9cblxuICAgICAgcmV0dXJuIGRvbUVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgaWYgKHNlbGVjdG9yID09PSBXSUxEQ0FSRCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gW10sXG4gICAgICAgIGRvbU5vZGVzTGVuZ3RoID0gZG9tTm9kZXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb21Ob2Rlc0xlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGRvbU5vZGUgPSBkb21Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gdGVzdChkb21Ob2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGZpbHRlcmVkRE9NTm9kZXMucHVzaChkb21Ob2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRET01Ob2Rlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IsIGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzLCBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IsIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUsIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kb21cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEVsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcGFyZW50RWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50OyAvLy9cblxuICBpZiAocGFyZW50RE9NRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGlmIChwYXJlbnRET01FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICBjb25zdCBwYXJlbnRET01FbGVtZW50cyA9IFtcbiAgICAgICAgICAgICAgcGFyZW50RE9NRWxlbWVudFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMocGFyZW50RE9NRWxlbWVudHMpLFxuICAgICAgICAgICAgZmlyc3RQYXJlbnRFbGVtZW50ID0gZmlyc3QocGFyZW50RWxlbWVudHMpO1xuXG4gICAgICBwYXJlbnRFbGVtZW50ID0gZmlyc3RQYXJlbnRFbGVtZW50IHx8IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgY29uc3QgY2hpbGRET01Ob2RlcyA9IHRoaXMuZG9tRWxlbWVudC5jaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgY2hpbGRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihjaGlsZERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhjaGlsZERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1IZWlnaHQgPSBJbmZpbml0eSkge1xuICBjb25zdCBoZWlnaHQgPSBtYXhpbXVtSGVpZ2h0LCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBhc2NlbmRhbnRET01Ob2RlcyA9IGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgaGVpZ2h0KSxcbiAgICAgICAgYXNjZW5kYW50RE9NRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoYXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgYXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhhc2NlbmRhbnRET01FbGVtZW50cyk7XG5cbiAgcmV0dXJuIGFzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGRlcHRoID0gbWF4aW11bURlcHRoLCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50RE9NTm9kZXMgPSBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCksXG4gICAgICAgIGRlc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihkZXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZGVzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gZGVzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IG5leHRTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgbmV4dFNpYmxpbmdET01Ob2RlID0gdGhpcy5kb21FbGVtZW50Lm5leHRTaWJsaW5nOyAvLy9cblxuICBpZiAoKG5leHRTaWJsaW5nRE9NTm9kZSAhPT0gbnVsbCkgJiYgZG9tTm9kZU1hdGNoZXNTZWxlY3RvcihuZXh0U2libGluZ0RPTU5vZGUsIHNlbGVjdG9yKSkge1xuICAgIG5leHRTaWJsaW5nRWxlbWVudCA9IG5leHRTaWJsaW5nRE9NTm9kZS5fX2VsZW1lbnRfXyB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTaWJsaW5nRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcHJldmlvdXNTaWJsaW5nRE9NTm9kZSA9IHRoaXMuZG9tRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7ICAvLy9cblxuICBpZiAoKHByZXZpb3VzU2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IocHJldmlvdXNTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHByZXZpb3VzU2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1NpYmxpbmdFbGVtZW50O1xufVxuXG5jb25zdCBlbGVtZW50TWl4aW5zID0ge1xuICBnZXRQYXJlbnRFbGVtZW50LFxuICBnZXRDaGlsZEVsZW1lbnRzLFxuICBnZXRBc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0RGVzY2VuZGFudEVsZW1lbnRzLFxuICBnZXROZXh0U2libGluZ0VsZW1lbnQsXG4gIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVsZW1lbnRNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuXG5pbXBvcnQgeyBjb25zdHJ1Y3RFbGVtZW50LCBkZXN0cm95RWxlbWVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBnZXRQYXJlbnRFbGVtZW50LCBnZXRBc2NlbmRhbnRFbGVtZW50cywgZ2V0TmV4dFNpYmxpbmdFbGVtZW50LCBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50IH0gZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsgLy8vXG5cbiAgICBjb25zdHJ1Y3RFbGVtZW50KGVsZW1lbnQsIGRvbUVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IG9mZnNldCA9IE9mZnNldC5mcm9tRE9NRWxlbWVudCh0aGlzLmRvbUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZHMgPSBCb3VuZHMuZnJvbURPTUVsZW1lbnQodGhpcy5kb21FbGVtZW50KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aDsgfSAgLy8vXG5cbiAgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lm9mZnNldEhlaWdodDsgfSAgLy8vXG5cbiAgZ2V0VGV4dCgpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlLFxuICAgICAgICAgIHRleHQgPSBub2RlVmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBzZXRUZXh0KHRleHQpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0ZXh0OyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cblxuICBwcmVwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnByZXBlbmQodGhpcyk7IH1cblxuICBhcHBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYXBwZW5kKHRoaXMpOyB9XG5cbiAgYWRkVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFkZCh0aGlzKTsgfVxuXG4gIHJlbW92ZUZyb20ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnJlbW92ZSh0aGlzKTsgfVxuXG4gIGluc2VydEJlZm9yZShzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsIC8vL1xuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDsgIC8vL1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudCk7XG4gIH1cblxuICBpbnNlcnRBZnRlcihzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsIC8vL1xuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDsgIC8vL1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudC5uZXh0U2libGluZyk7ICAvLy9cbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGRlc3Ryb3lFbGVtZW50KGVsZW1lbnQpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oVGV4dEVsZW1lbnQucHJvdG90eXBlLCB7XG4gIGdldFBhcmVudEVsZW1lbnQsXG4gIGdldEFzY2VuZGFudEVsZW1lbnRzLFxuICBnZXROZXh0U2libGluZ0VsZW1lbnQsXG4gIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnRcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dEVsZW1lbnQgZnJvbSBcIi4uL3RleHRFbGVtZW50XCI7XG5cbmltcG9ydCB7IFNUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZhbHNleUVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMucmVkdWNlKChlbGVtZW50cywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhlbGVtZW50cykge1xuICBlbGVtZW50cyA9IGVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4geyAgLy8vXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LCAgLy8vXG4gICAgICAgICAgICB0ZXh0RWxlbWVudCA9IG5ldyBUZXh0RWxlbWVudCh0ZXh0KTtcblxuICAgICAgZWxlbWVudCA9IHRleHRFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQ1VUX0VWRU5UX1RZUEUgPSBcImN1dFwiO1xuZXhwb3J0IGNvbnN0IENPUFlfRVZFTlRfVFlQRSA9IFwiY29weVwiO1xuZXhwb3J0IGNvbnN0IEJMVVJfRVZFTlRfVFlQRSA9IFwiYmx1clwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VWRU5UX1RZUEUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgUEFTVEVfRVZFTlRfVFlQRSA9IFwicGFzdGVcIjtcbmV4cG9ydCBjb25zdCBXSEVFTF9FVkVOVF9UWVBFID0gXCJ3aGVlbFwiO1xuZXhwb3J0IGNvbnN0IElOUFVUX0VWRU5UX1RZUEUgPSBcImlucHV0XCI7XG5leHBvcnQgY29uc3QgRk9DVVNfRVZFTlRfVFlQRSA9IFwiZm9jdXNcIjtcbmV4cG9ydCBjb25zdCBDTElDS19FVkVOVF9UWVBFID0gXCJjbGlja1wiO1xuZXhwb3J0IGNvbnN0IEtFWVVQX0VWRU5UX1RZUEUgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgU0VMRUNUX0VWRU5UX1RZUEUgPSBcInNlbGVjdFwiO1xuZXhwb3J0IGNvbnN0IENIQU5HRV9FVkVOVF9UWVBFID0gXCJjaGFuZ2VcIjtcbmV4cG9ydCBjb25zdCBSRVNJWkVfRVZFTlRfVFlQRSA9IFwicmVzaXplXCI7XG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UX1RZUEUgPSBcInNjcm9sbFwiO1xuZXhwb3J0IGNvbnN0IEtFWURPV05fRVZFTlRfVFlQRSA9IFwia2V5ZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlRfVFlQRSA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IEFVWENMSUNLX0VWRU5UX1RZUEUgPSBcImF1eGNsaWNrXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVVRfRVZFTlRfVFlQRSA9IFwibW91c2VvdXRcIjtcbmV4cG9ydCBjb25zdCBEQkxDTElDS19FVkVOVF9UWVBFID0gXCJkYmxjbGlja1wiO1xuZXhwb3J0IGNvbnN0IFRPVUNIRU5EX0VWRU5UX1RZUEUgPSBcInRvdWNoZW5kXCI7XG5leHBvcnQgY29uc3QgVE9VQ0hNT1ZFX0VWRU5UX1RZUEUgPSBcInRvdWNobW92ZVwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFT1ZFUl9FVkVOVF9UWVBFID0gXCJtb3VzZW92ZXJcIjtcbmV4cG9ydCBjb25zdCBNT1VTRURPV05fRVZFTlRfVFlQRSA9IFwibW91c2Vkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VNT1ZFX0VWRU5UX1RZUEUgPSBcIm1vdXNlbW92ZVwiO1xuZXhwb3J0IGNvbnN0IFRPVUNIU1RBUlRfRVZFTlRfVFlQRSA9IFwidG91Y2hzdGFydFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRNRU5VX0VWRU5UX1RZUEUgPSBcImNvbnRleHRtZW51XCI7XG5leHBvcnQgY29uc3QgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgPSBcInNlbGVjdGlvbmNoYW5nZVwiO1xuZXhwb3J0IGNvbnN0IEZVTExTQ1JFRU5DSEFOR0VfRVZFTlRfVFlQRSA9IFwiZnVsbHNjcmVlbmNoYW5nZVwiO1xuZXhwb3J0IGNvbnN0IFVOSEFORExFRFJFSkVDVElPTl9FVkVOVF9UWVBFID0gXCJ1bmhhbmRsZWRyZWplY3Rpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBDVVRfRVZFTlRfVFlQRSxcbiAgQ09QWV9FVkVOVF9UWVBFLFxuICBCTFVSX0VWRU5UX1RZUEUsXG4gIEVSUk9SX0VWRU5UX1RZUEUsXG4gIFBBU1RFX0VWRU5UX1RZUEUsXG4gIFdIRUVMX0VWRU5UX1RZUEUsXG4gIElOUFVUX0VWRU5UX1RZUEUsXG4gIEZPQ1VTX0VWRU5UX1RZUEUsXG4gIENMSUNLX0VWRU5UX1RZUEUsXG4gIEtFWVVQX0VWRU5UX1RZUEUsXG4gIFNFTEVDVF9FVkVOVF9UWVBFLFxuICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgUkVTSVpFX0VWRU5UX1RZUEUsXG4gIFNDUk9MTF9FVkVOVF9UWVBFLFxuICBLRVlET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFVVBfRVZFTlRfVFlQRSxcbiAgQVVYQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgREJMQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgVE9VQ0hFTkRfRVZFTlRfVFlQRSxcbiAgVE9VQ0hNT1ZFX0VWRU5UX1RZUEUsXG4gIE1PVVNFT1ZFUl9FVkVOVF9UWVBFLFxuICBNT1VTRURPV05fRVZFTlRfVFlQRSxcbiAgTU9VU0VNT1ZFX0VWRU5UX1RZUEUsXG4gIFRPVUNIU1RBUlRfRVZFTlRfVFlQRSxcbiAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSxcbiAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsXG4gIEZVTExTQ1JFRU5DSEFOR0VfRVZFTlRfVFlQRSxcbiAgVU5IQU5ETEVEUkVKRUNUSU9OX0VWRU5UX1RZUEVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGd1YXJhbnRlZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGNvbWJpbmUsIHBydW5lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9vYmplY3RcIjtcbmltcG9ydCB7IGNhbWVsQ2FzZVRvU25ha2VDYXNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGlzSFRNTEF0dHJpYnV0ZU5hbWUsIGlzU1ZHQXR0cmlidXRlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgcmVtb3ZlRmFsc2V5RWxlbWVudHMsIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcbmltcG9ydCB7IERCTENMSUNLX0VWRU5UX1RZUEUsIFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCBGVUxMU0NSRUVOQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgRk9SLCBDTEFTUywgT0JKRUNULCBIVE1MX0ZPUiwgQ0xBU1NfTkFNRSwgQk9PTEVBTiwgRlVOQ1RJT04sIFNWR19OQU1FU1BBQ0VfVVJJIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBET1VCTEVfQ0xJQ0tfRVZFTlRfVFlQRSA9IFwiZG91YmxlY2xpY2tcIixcbiAgICAgIFNFTEVDVElPTl9DSEFOR0VfRVZFTlRfVFlQRSA9IFwic2VsZWN0aW9uQ2hhbmdlXCIsXG4gICAgICBGVUxMX1NDUkVFTl9DSEFOR0VfRVZFTlRfVFlQRSA9IFwiZnVsbFNjcmVlbkNoYW5nZVwiO1xuXG5mdW5jdGlvbiBhcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKSB7XG4gIHRoaXMucHJvcGVydGllcyA9IGNvbWJpbmUocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuXG4gIHByb3BlcnRpZXMgPSBwcnVuZSh0aGlzLnByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTsgLy8vXG5cbiAgY29uc3QgbmFtZXNwYWNlVVJJID0gdGhpcy5kb21FbGVtZW50Lm5hbWVzcGFjZVVSSSxcbiAgICAgICAgc3ZnID0gKG5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRV9VUkkpLCAvLy9cbiAgICAgICAgcHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSxcbiAgICAgICAgbmFtZXMgPSBwcm9wZXJ0aWVzS2V5czsgIC8vLz1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzW25hbWVdLFxuICAgICAgICAgIG5hbWVIYW5kbGVyTmFtZSA9IGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpLFxuICAgICAgICAgIG5hbWVDdXN0b21IYW5kbGVyTmFtZSA9IGlzTmFtZUN1c3RvbUhhbmRsZXJOYW1lKG5hbWUpO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKG5hbWVIYW5kbGVyTmFtZSkge1xuICAgICAgYWRkSGFuZGxlcih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChuYW1lQ3VzdG9tSGFuZGxlck5hbWUpIHtcbiAgICAgIGFkZEN1c3RvbUhhbmRsZXIodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lQXR0cmlidXRlTmFtZSA9IGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKTtcblxuICAgICAgaWYgKG5hbWVBdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIGFkZEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjaGlsZEVsZW1lbnRzID0gY2hpbGRFbGVtZW50c0Zyb21FbGVtZW50KHRoaXMpIHx8IHByb3BlcnRpZXMuY2hpbGRFbGVtZW50cywgIC8vL1xuICAgICAgICBjb250ZXh0ID0ge307XG5cbiAgY2hpbGRFbGVtZW50cy5mb3JFYWNoKChjaGlsZEVsZW1lbnQpID0+IHtcbiAgICB1cGRhdGVDb250ZXh0KGNoaWxkRWxlbWVudCwgY29udGV4dCk7XG5cbiAgICB0aGlzLmFkZChjaGlsZEVsZW1lbnQpO1xuICB9KTtcblxuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKCkge1xuICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICByZXR1cm4gdGhpcy5jb250ZXh0O1xufVxuXG5mdW5jdGlvbiBhc3NpZ25Db250ZXh0KG5hbWVzKSB7XG4gIGlmIChuYW1lcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRleHQpXG4gIH1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHRbbmFtZV0sXG4gICAgICAgICAgcHJvcGVydHlOYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICAgIGRlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG5cbiAgICBkZWxldGUgdGhpcy5jb250ZXh0W25hbWVdO1xuICB9KTtcbn1cblxuY29uc3QganN4TWl4aW5zID0ge1xuICBhcHBseVByb3BlcnRpZXMsXG4gIGdldFByb3BlcnRpZXMsXG4gIGdldENvbnRleHQsXG4gIGFzc2lnbkNvbnRleHRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGpzeE1peGlucztcblxuZnVuY3Rpb24gY2hpbGRFbGVtZW50c0Zyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgbGV0IGNoaWxkRWxlbWVudHMgPSBudWxsO1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudC5jaGlsZEVsZW1lbnRzID09PSBGVU5DVElPTikge1xuICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmNoaWxkRWxlbWVudHMuY2FsbChlbGVtZW50KTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSBndWFyYW50ZWUoY2hpbGRFbGVtZW50cyk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSAodHlwZW9mIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0ID09PSBGVU5DVElPTikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQucGFyZW50Q29udGV4dCgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQuY29udGV4dDsgLy8vXG5cbiAgT2JqZWN0LmFzc2lnbihjb250ZXh0LCBwYXJlbnRDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBsZXQgZXZlbnRUeXBlID0gbmFtZS5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKTsgLy8vXG5cbiAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICBjYXNlIERPVUJMRV9DTElDS19FVkVOVF9UWVBFOiB7XG4gICAgICBldmVudFR5cGUgPSBEQkxDTElDS19FVkVOVF9UWVBFO1xuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFNFTEVDVElPTl9DSEFOR0VfRVZFTlRfVFlQRToge1xuICAgICAgZXZlbnRUeXBlID0gU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEU7XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRlVMTF9TQ1JFRU5fQ0hBTkdFX0VWRU5UX1RZUEU6IHtcbiAgICAgIGV2ZW50VHlwZSA9IEZVTExTQ1JFRU5DSEFOR0VfRVZFTlRfVFlQRTtcblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0gdmFsdWU7ICAvLy9cblxuICBlbGVtZW50Lm9uRXZlbnQoZXZlbnRUeXBlLCBoYW5kbGVyKTtcbn1cblxuZnVuY3Rpb24gYWRkQ3VzdG9tSGFuZGxlcihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBjdXN0b21FdmVudFR5cGUgPSBjYW1lbENhc2VUb1NuYWtlQ2FzZShuYW1lKS5yZXBsYWNlKC9vbi1jdXN0b20tLywgXCJcIiksXG4gICAgICAgIGN1c3RvbUhhbmRsZXIgPSB2YWx1ZTsgIC8vL1xuXG4gIGVsZW1lbnQub25DdXN0b21FdmVudChjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKG5hbWUgPT09IENMQVNTX05BTUUpIHtcbiAgICBuYW1lID0gQ0xBU1M7XG4gIH1cblxuICBpZiAobmFtZSA9PT0gSFRNTF9GT1IpIHtcbiAgICBuYW1lID0gRk9SO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBlbGVtZW50LmRvbUVsZW1lbnRbbmFtZV1ba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IG5hbWU7IC8vL1xuXG4gICAgICBlbGVtZW50LmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05hbWVIYW5kbGVyTmFtZShuYW1lKSB7XG4gIGNvbnN0IG5hbWVIYW5kbGVyTmFtZSA9ICAvXm9uKD8hQ3VzdG9tKS8udGVzdChuYW1lKTsgIC8vL1xuXG4gIHJldHVybiBuYW1lSGFuZGxlck5hbWU7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKSB7XG4gIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gc3ZnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTVkdBdHRyaWJ1dGVOYW1lKG5hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpO1xuXG4gIHJldHVybiBuYW1lQXR0cmlidXRlTmFtZTtcbn1cblxuZnVuY3Rpb24gaXNOYW1lQ3VzdG9tSGFuZGxlck5hbWUobmFtZSkge1xuICBjb25zdCBuYW1lQ3VzdG9tSGFuZGxlck5hbWUgPSAvXm9uQ3VzdG9tLy50ZXN0KG5hbWUpO1xuXG4gIHJldHVybiBuYW1lQ3VzdG9tSGFuZGxlck5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEtFWVVQX0VWRU5UX1RZUEUsIEtFWURPV05fRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uS2V5VXAoa2V5VXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleVVwKGtleVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KEtFWVVQX0VWRU5UX1RZUEUsIGtleVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25LZXlEb3duKGtleURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChLRVlET1dOX0VWRU5UX1RZUEUsIGtleURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZLZXlEb3duKGtleURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoS0VZRE9XTl9FVkVOVF9UWVBFLCBrZXlEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3Qga2V5TWl4aW5zID0ge1xuICBvbktleVVwLFxuICBvZmZLZXlVcCxcbiAgb25LZXlEb3duLFxuICBvZmZLZXlEb3duXG59O1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICByZXR1cm4gdGhpcy5zdGF0ZTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShzdGF0ZSkge1xuICAodGhpcy5zdGF0ZSA9PT0gdW5kZWZpbmVkKSA/XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlIDpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc3RhdGUpO1xufVxuXG5jb25zdCBzdGF0ZU1peGlucyA9IHtcbiAgZ2V0U3RhdGUsXG4gIHNldFN0YXRlLFxuICB1cGRhdGVTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhdGVNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNQQUNFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkV2ZW50KGV2ZW50VHlwZXMsIGhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGV2ZW50VHlwZXMgPSBldmVudFR5cGVzLnNwbGl0KFNQQUNFKTsgLy8vXG5cbiAgZXZlbnRUeXBlcy5mb3JFYWNoKChldmVudFR5cGUpID0+IHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSBSRVNJWkVfRVZFTlRfVFlQRSkge1xuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKTtcblxuICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHJlc2l6ZUV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbnVsbDtcblxuICAgICAgICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcihldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmRvbUVsZW1lbnQpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gb2ZmRXZlbnQoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpOyAvLy9cblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuZG9tRWxlbWVudCk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMucmVzaXplT2JzZXJ2ZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgaWYgKCF0aGlzLmV2ZW50TGlzdGVuZXJzKSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKGV2ZW50TGlzdGVuZXIpO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpLFxuICAgICAgICBpbmRleCA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuaW5kZXhPZihldmVudExpc3RlbmVyKSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgdGhpcy5ldmVudExpc3RlbmVycztcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZmluZCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGlmICgoZXZlbnRMaXN0ZW5lci5lbGVtZW50ID09PSBlbGVtZW50KSAmJiAoZXZlbnRMaXN0ZW5lci5oYW5kbGVyID09PSBoYW5kbGVyKSAmJiAoZXZlbnRMaXN0ZW5lci5ldmVudFR5cGUgPT09IGV2ZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycykge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSAoZXZlbnRMaXN0ZW5lci5ldmVudFR5cGUgPT09IGV2ZW50VHlwZSk7XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBldmVudExpc3RlbmVycy5wdXNoKGV2ZW50TGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBsZXQgZXZlbnRMaXN0ZW5lcjtcblxuICBjb25zdCBoYW5kbGVyRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gIGV2ZW50TGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIGV2ZW50LCBlbGVtZW50KTtcbiAgfTtcblxuICBPYmplY3QuYXNzaWduKGV2ZW50TGlzdGVuZXIsIHtcbiAgICBlbGVtZW50LFxuICAgIGhhbmRsZXIsXG4gICAgZXZlbnRUeXBlXG4gIH0pO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5jb25zdCBldmVudE1peGlucyA9IHtcbiAgb25FdmVudCxcbiAgb2ZmRXZlbnQsXG4gIGFkZEV2ZW50TGlzdGVuZXIsXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIsXG4gIGZpbmRFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcnMsXG4gIGNyZWF0ZUV2ZW50TGlzdGVuZXJcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNT1VTRVVQX0VWRU5UX1RZUEUsIE1PVVNFT1VUX0VWRU5UX1RZUEUsIE1PVVNFRE9XTl9FVkVOVF9UWVBFLCBNT1VTRU9WRVJfRVZFTlRfVFlQRSwgTU9VU0VNT1ZFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KE1PVVNFVVBfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChNT1VTRVVQX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoTU9VU0VPVVRfRVZFTlRfVFlQRSwgbW91c2VPdXRIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KE1PVVNFRE9XTl9FVkVOVF9UWVBFLCBtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KE1PVVNFRE9XTl9FVkVOVF9UWVBFLCBtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlT3Zlcihtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlTW92ZShtb3VzZU1vdmVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IG1vdXNlTWl4aW5zID0ge1xuICBvbk1vdXNlVXAsXG4gIG9mZk1vdXNlVXAsXG4gIG9uTW91c2VPdXQsXG4gIG9mZk1vdXNlT3V0LFxuICBvbk1vdXNlRG93bixcbiAgb2ZmTW91c2VEb3duLFxuICBvbk1vdXNlT3ZlcixcbiAgb2ZmTW91c2VPdmVyLFxuICBvbk1vdXNlTW92ZSxcbiAgb2ZmTW91c2VNb3ZlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb3VzZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0xJQ0tfRVZFTlRfVFlQRSwgREJMQ0xJQ0tfRVZFTlRfVFlQRSwgQVVYQ0xJQ0tfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25BdXhDbGljayhhdXhDbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KEFVWENMSUNLX0VWRU5UX1RZUEUsIGF1eENsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmQXV4Q2xpY2soYXV4Q2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoQVVYQ0xJQ0tfRVZFTlRfVFlQRSwgYXV4Q2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbkRvdWJsZUNsaWNrKGRvdWJsZUNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoREJMQ0xJQ0tfRVZFTlRfVFlQRSwgZG91YmxlQ2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfSAvLy9cblxuZnVuY3Rpb24gb2ZmRG91YmxlQ2xpY2soZG91YmxlQ2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoREJMQ0xJQ0tfRVZFTlRfVFlQRSwgZG91YmxlQ2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfSAvLy9cblxuY29uc3QgY2xpY2tNaXhpbnMgPSB7XG4gIG9uQ2xpY2ssXG4gIG9mZkNsaWNrLFxuICBvbkF1eENsaWNrLFxuICBvZmZBdXhDbGljayxcbiAgb25Eb3VibGVDbGljayxcbiAgb2ZmRG91YmxlQ2xpY2tcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsaWNrTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBUT1VDSFNUQVJUX0VWRU5UX1RZUEUsIFRPVUNITU9WRV9FVkVOVF9UWVBFLCBUT1VDSEVORF9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KHRvdWNoU3RhcnRIYW5kbGVyKSB7IHRoaXMub25FdmVudChUT1VDSFNUQVJUX0VWRU5UX1RZUEUsIHRvdWNoU3RhcnRIYW5kbGVyKTsgfVxuXG5mdW5jdGlvbiBvZmZUb3VjaFN0YXJ0KHRvdWNoU3RhcnRIYW5kbGVyKSB7IHRoaXMub2ZmRXZlbnQoVE9VQ0hTVEFSVF9FVkVOVF9UWVBFLCB0b3VjaFN0YXJ0SGFuZGxlcik7IH1cblxuZnVuY3Rpb24gb25Ub3VjaE1vdmUodG91Y2hTdGFydEhhbmRsZXIpIHsgdGhpcy5vbkV2ZW50KFRPVUNITU9WRV9FVkVOVF9UWVBFLCB0b3VjaFN0YXJ0SGFuZGxlcik7IH1cblxuZnVuY3Rpb24gb2ZmVG91Y2hNb3ZlKHRvdWNoU3RhcnRIYW5kbGVyKSB7IHRoaXMub2ZmRXZlbnQoVE9VQ0hNT1ZFX0VWRU5UX1RZUEUsIHRvdWNoU3RhcnRIYW5kbGVyKTsgfVxuXG5mdW5jdGlvbiBvblRvdWNoRW5kKHRvdWNoU3RhcnRIYW5kbGVyKSB7IHRoaXMub25FdmVudChUT1VDSEVORF9FVkVOVF9UWVBFLCB0b3VjaFN0YXJ0SGFuZGxlcik7IH1cblxuZnVuY3Rpb24gb2ZmVG91Y2hFbmQodG91Y2hTdGFydEhhbmRsZXIpIHsgdGhpcy5vZmZFdmVudChUT1VDSEVORF9FVkVOVF9UWVBFLCB0b3VjaFN0YXJ0SGFuZGxlcik7IH1cblxuY29uc3QgY2xpY2tNaXhpbnMgPSB7XG4gIG9uVG91Y2hTdGFydCxcbiAgb2ZmVG91Y2hTdGFydCxcbiAgb25Ub3VjaE1vdmUsXG4gIG9mZlRvdWNoTW92ZSxcbiAgb25Ub3VjaEVuZCxcbiAgb2ZmVG91Y2hFbmRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsaWNrTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTQ1JPTExfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChTQ1JPTExfRVZFTlRfVFlQRSwgc2Nyb2xsSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIHNjcm9sbFRvKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCkgeyB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsVG8oc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKTsgfSAvLy9cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnNjcm9sbFRvcDsgfVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxMZWZ0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnNjcm9sbExlZnQ7IH1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsV2lkdGgoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsV2lkdGg7IH1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsSGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnNjcm9sbEhlaWdodDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgfVxuXG5jb25zdCBzY3JvbGxNaXhpbnMgPSB7XG4gIG9uU2Nyb2xsLFxuICBvZmZTY3JvbGwsXG4gIHNjcm9sbFRvLFxuICBnZXRTY3JvbGxUb3AsXG4gIGdldFNjcm9sbExlZnQsXG4gIGdldFNjcm9sbFdpZHRoLFxuICBnZXRTY3JvbGxIZWlnaHQsXG4gIHNldFNjcm9sbFRvcCxcbiAgc2V0U2Nyb2xsTGVmdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2Nyb2xsTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSRVNJWkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCByZXNpemVNaXhpbnMgPSB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlc2l6ZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRlVMTFNDUkVFTkNIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25GdWxsU2NyZWVuQ2hhbmdlKGZ1bGxTY3JlZW5DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChGVUxMU0NSRUVOQ0hBTkdFX0VWRU5UX1RZUEUsIGZ1bGxTY3JlZW5DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIG9mZkZ1bGxTY3JlZW5DaGFuZ2UoZnVsbFNjcmVlbkNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChGVUxMU0NSRUVOQ0hBTkdFX0VWRU5UX1RZUEUsIGZ1bGxTY3JlZW5DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIHJlcXVlc3RGdWxsU2NyZWVuKGVycm9ySGFuZGxlcikge1xuICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XG5cbiAgZG9tRWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpXG4gICAgLmNhdGNoKGVycm9ySGFuZGxlcik7XG59XG5cbmZ1bmN0aW9uIGV4aXRGdWxsU2NyZWVuKCkge1xuICBkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpO1xufVxuXG5mdW5jdGlvbiBpc0Z1bGxTY3JlZW4oKSB7XG4gIGNvbnN0IHsgZnVsbHNjcmVlbkVsZW1lbnQgfSA9IGRvY3VtZW50LFxuICAgICAgICBmdWxsU2NyZWVuID0gKGZ1bGxzY3JlZW5FbGVtZW50ICE9PSBudWxsKTtcblxuICByZXR1cm4gZnVsbFNjcmVlbjtcbn1cblxuY29uc3QgZnVsbHNjcmVlbk1peGlucyA9IHtcbiAgb25GdWxsU2NyZWVuQ2hhbmdlLFxuICBvZmZGdWxsU2NyZWVuQ2hhbmdlLFxuICByZXF1ZXN0RnVsbFNjcmVlbixcbiAgZXhpdEZ1bGxTY3JlZW4sXG4gIGlzRnVsbFNjcmVlblxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVsbHNjcmVlbk1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cblxuICBsZXQgY291bnQgPSAtMTtcblxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGNvdW50Kys7XG5cbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XG5cbiAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICBkb25lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cbiAgICAgICAgICAgIGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgbmV4dCgpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGZvckVhY2ggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FzeW5jXCI7XG5cbmZ1bmN0aW9uIG9uQ3VzdG9tRXZlbnQoY3VzdG9tRXZlbnRUeXBlcywgY3VzdG9tSGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgY3VzdG9tRXZlbnRUeXBlcyA9IGN1c3RvbUV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpOyAvLy9cblxuICBjdXN0b21FdmVudFR5cGVzLmZvckVhY2goKGN1c3RvbUV2ZW50VHlwZSkgPT4ge1xuICAgIHRoaXMuYWRkQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb2ZmQ3VzdG9tRXZlbnQoY3VzdG9tRXZlbnRUeXBlcywgY3VzdG9tSGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgY3VzdG9tRXZlbnRUeXBlcyA9IGN1c3RvbUV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpOyAvLy9cblxuICBjdXN0b21FdmVudFR5cGVzLmZvckVhY2goKGN1c3RvbUV2ZW50VHlwZSkgPT4ge1xuICAgIHRoaXMucmVtb3ZlQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEN1c3RvbUhhbmRsZXJzKGN1c3RvbUV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kQ3VzdG9tRXZlbnRMaXN0ZW5lcnMoY3VzdG9tRXZlbnRUeXBlKTtcblxuICBjdXN0b21FdmVudExpc3RlbmVycy5mb3JFYWNoKChjdXN0b21FdmVudExpc3RlbmVyKSA9PiB7XG4gICAgY29uc3QgeyBjdXN0b21IYW5kbGVyLCBlbGVtZW50OiBjdXN0b21IYW5kbGVyRWxlbWVudCB9ID0gY3VzdG9tRXZlbnRMaXN0ZW5lcjsgLy8vXG5cbiAgICBjdXN0b21IYW5kbGVyLmNhbGwoY3VzdG9tSGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQ3VzdG9tSGFuZGxlcnNBc3luYyhjdXN0b21FdmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBjdXN0b21FdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEN1c3RvbUV2ZW50TGlzdGVuZXJzKGN1c3RvbUV2ZW50VHlwZSksXG4gICAgICAgIGRvbmUgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCk7ICAvLy9cblxuICBmb3JFYWNoKGN1c3RvbUV2ZW50TGlzdGVuZXJzLCAoY3VzdG9tRXZlbnRMaXN0ZW5lciwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHsgY3VzdG9tSGFuZGxlciwgZWxlbWVudDogY3VzdG9tSGFuZGxlckVsZW1lbnQgfSA9IGN1c3RvbUV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZG9uZSA9IG5leHQ7ICAvLy9cblxuICAgIGN1c3RvbUhhbmRsZXIuY2FsbChjdXN0b21IYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmZ1bmN0aW9uIGFkZEN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXIgPSB0aGlzLmNyZWF0ZUN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KTtcblxuICBpZiAoIXRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzID0gW107XG4gIH1cblxuICB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLnB1c2goY3VzdG9tRXZlbnRMaXN0ZW5lcik7XG5cbiAgcmV0dXJuIGN1c3RvbUV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXIgPSB0aGlzLmZpbmRDdXN0b21FdmVudExpc3RlbmVyKGN1c3RvbUV2ZW50VHlwZSwgY3VzdG9tSGFuZGxlciwgZWxlbWVudCksXG4gICAgICAgIGluZGV4ID0gdGhpcy5jdXN0b21FdmVudExpc3RlbmVycy5pbmRleE9mKGN1c3RvbUV2ZW50TGlzdGVuZXIpLFxuICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gIGlmICh0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlbGV0ZSB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzO1xuICB9XG5cbiAgcmV0dXJuIGN1c3RvbUV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXN0b21FdmVudExpc3RlbmVyKGN1c3RvbUV2ZW50VHlwZSwgY3VzdG9tSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBjdXN0b21FdmVudExpc3RlbmVyID0gdGhpcy5jdXN0b21FdmVudExpc3RlbmVycy5maW5kKChjdXN0b21FdmVudExpc3RlbmVyKSA9PiB7XG4gICAgaWYgKChjdXN0b21FdmVudExpc3RlbmVyLmVsZW1lbnQgPT09IGVsZW1lbnQpICYmIChjdXN0b21FdmVudExpc3RlbmVyLmN1c3RvbUhhbmRsZXIgPT09IGN1c3RvbUhhbmRsZXIpICYmIChjdXN0b21FdmVudExpc3RlbmVyLmN1c3RvbUV2ZW50VHlwZSA9PT0gY3VzdG9tRXZlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY3VzdG9tRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEN1c3RvbUV2ZW50TGlzdGVuZXJzKGN1c3RvbUV2ZW50VHlwZSkge1xuICBjb25zdCBjdXN0b21FdmVudExpc3RlbmVycyA9IFtdO1xuXG4gIGlmICh0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzKSB7XG4gICAgdGhpcy5jdXN0b21FdmVudExpc3RlbmVycy5mb3JFYWNoKChjdXN0b21FdmVudExpc3RlbmVyKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IChjdXN0b21FdmVudExpc3RlbmVyLmN1c3RvbUV2ZW50VHlwZSA9PT0gY3VzdG9tRXZlbnRUeXBlKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGN1c3RvbUV2ZW50TGlzdGVuZXJzLnB1c2goY3VzdG9tRXZlbnRMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY3VzdG9tRXZlbnRMaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBjdXN0b21FdmVudExpc3RlbmVyO1xuXG4gIGN1c3RvbUV2ZW50TGlzdGVuZXIgPSAoKSA9PiB7fTsgLy8vXG5cbiAgT2JqZWN0LmFzc2lnbihjdXN0b21FdmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBjdXN0b21IYW5kbGVyLFxuICAgIGN1c3RvbUV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gY3VzdG9tRXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3QgY3VzdG9tRXZlbnRNaXhpbnMgPSB7XG4gIG9uQ3VzdG9tRXZlbnQsXG4gIG9mZkN1c3RvbUV2ZW50LFxuICBjYWxsQ3VzdG9tSGFuZGxlcnMsXG4gIGNhbGxDdXN0b21IYW5kbGVyc0FzeW5jLFxuICBhZGRDdXN0b21FdmVudExpc3RlbmVyLFxuICByZW1vdmVDdXN0b21FdmVudExpc3RlbmVyLFxuICBmaW5kQ3VzdG9tRXZlbnRMaXN0ZW5lcixcbiAgZmluZEN1c3RvbUV2ZW50TGlzdGVuZXJzLFxuICBjcmVhdGVDdXN0b21FdmVudExpc3RlbmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjdXN0b21FdmVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE9mZnNldCBmcm9tIFwiLi9vZmZzZXRcIjtcbmltcG9ydCBCb3VuZHMgZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQganN4TWl4aW5zIGZyb20gXCIuL21peGlucy9qc3hcIjtcbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IHN0YXRlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdGF0ZVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHRvdWNoTWl4aW5zIGZyb20gXCIuL21peGlucy90b3VjaFwiO1xuaW1wb3J0IHNjcm9sbE1peGlucyBmcm9tIFwiLi9taXhpbnMvc2Nyb2xsXCI7XG5pbXBvcnQgcmVzaXplTWl4aW5zIGZyb20gXCIuL21peGlucy9yZXNpemVcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5pbXBvcnQgZnVsbFNjcmVlbk1peGlucyBmcm9tIFwiLi9taXhpbnMvZnVsbFNjcmVlblwiO1xuaW1wb3J0IGN1c3RvbUV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9jdXN0b21FdmVudFwiO1xuXG5pbXBvcnQgeyBhdWdtZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBjb21iaW5lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL29iamVjdFwiO1xuaW1wb3J0IHsgaXNTVkdUYWdOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEVsZW1lbnQsIGRlc3Ryb3lFbGVtZW50LCBtb3VudEVsZW1lbnQsIHVubW91bnRFbGVtZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IE5PTkUsXG4gICAgICAgICBCTE9DSyxcbiAgICAgICAgIFdJRFRILFxuICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgSEVJR0hULFxuICAgICAgICAgRElTUExBWSxcbiAgICAgICAgIERJU0FCTEVELFxuICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgU1ZHX05BTUVTUEFDRV9VUkksXG4gICAgICAgICBERUZBVUxUX1BST1BFUlRJRVMsXG4gICAgICAgICBJR05PUkVEX1BST1BFUlRJRVMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yKSB7XG4gICAgaWYgKHNlbGVjdG9yICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID10aGlzLCAgLy8vXG4gICAgICAgICAgICBkb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIGNvbnN0cnVjdEVsZW1lbnQoZWxlbWVudCwgZG9tRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IG9mZnNldCA9IE9mZnNldC5mcm9tRE9NRWxlbWVudCh0aGlzLmRvbUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZHMgPSBCb3VuZHMuZnJvbURPTUVsZW1lbnQodGhpcy5kb21FbGVtZW50KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aDsgfSAgLy8vXG5cbiAgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lm9mZnNldEhlaWdodDsgfSAgLy8vXG5cbiAgZ2V0SW5uZXJXaWR0aCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aDsgfSAvLy9cblxuICBnZXRJbm5lckhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQ7IH0gLy8vXG5cbiAgc2V0V2lkdGgod2lkdGgpIHtcbiAgICB3aWR0aCA9IGAke3dpZHRofXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKFdJRFRILCB3aWR0aCk7XG4gIH1cblxuICBzZXRIZWlnaHQoaGVpZ2h0KSB7XG4gICAgaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKEhFSUdIVCwgaGVpZ2h0KTtcbiAgfVxuXG4gIGhhc0F0dHJpYnV0ZShuYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgZ2V0QXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICBjbGVhckF0dHJpYnV0ZShuYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBhZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOyB9XG5cbiAgcmVtb3ZlQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5jbGVhckF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOyB9XG5cbiAgc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOyB9XG5cbiAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuICByZW1vdmVBbGxDbGFzc2VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HOyB9XG5cbiAgYWRkVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFkZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBwcmVwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnByZXBlbmQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnQoZWxlbWVudCkgeyB0aGlzLmFwcGVuZChlbGVtZW50KTsgfVxuXG4gIGFkZChlbGVtZW50KSB7IHRoaXMuYXBwZW5kKGVsZW1lbnQpOyB9XG5cbiAgcmVtb3ZlKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudC5yZW1vdmUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmUoKTtcbiAgfVxuXG4gIHByZXBlbmQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQsXG4gICAgICAgICAgcmVmZXJlbmNlRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5maXJzdENoaWxkOyAgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIHJlZmVyZW5jZURPTUVsZW1lbnQpO1xuICB9XG5cbiAgYXBwZW5kKGVsZW1lbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZWxlbWVudC5kb21FbGVtZW50LFxuICAgICAgICAgIHJlZmVyZW5jZURPTUVsZW1lbnQgPSBudWxsOyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgcmVmZXJlbmNlRE9NRWxlbWVudCk7XG4gIH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDsgIC8vL1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCByZWZlcmVuY2VET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSwgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQubmV4dFNpYmxpbmc7ICAvLy9cblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgcmVmZXJlbmNlRE9NRWxlbWVudCk7XG4gIH1cblxuICBtb3VudChlbGVtZW50KSB7XG4gICAgdGhpcy5hZGQoZWxlbWVudCk7XG5cbiAgICBtb3VudEVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICB1bm1vdW50KGVsZW1lbnQpIHtcbiAgICB1bm1vdW50RWxlbWVudChlbGVtZW50KTtcblxuICAgIHRoaXMucmVtb3ZlKGVsZW1lbnQpO1xuICB9XG5cbiAgbW91bnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICB0aGlzLmluc2VydEJlZm9yZShzaWJsaW5nRWxlbWVudCk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBtb3VudEVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBtb3VudEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgdGhpcy5pbnNlcnRBZnRlcihzaWJsaW5nRWxlbWVudCk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBtb3VudEVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV0gPSB2YWx1ZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgaHRtbChodG1sID0gbnVsbCkge1xuICAgIGlmIChodG1sICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgIGh0bWwgPSBpbm5lckhUTUw7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjc3MoY3NzID0gbnVsbCkge1xuICAgIGlmIChjc3MgPT09IG51bGwpIHtcbiAgICAgIGNzcyA9IHt9O1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5kb21FbGVtZW50KTsgLy8vXG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb21wdXRlZFN0eWxlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGVzW2luZGV4XSxcbiAgICAgICAgICAgICAgbmFtZSA9IGNvbXB1dGVkU3R5bGUsICAvLy9cbiAgICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjc3MgPT09IFNUUklORykge1xuICAgICAgbGV0IG5hbWUgPSBjc3M7IC8vL1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5kb21FbGVtZW50KSwgLy8vXG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVzLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICBjc3MgPSB2YWx1ZTsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGNzcyk7IC8vL1xuXG4gICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICAgIHRoaXMuc3R5bGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgZGVzdHJveUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCB7IHRhZ05hbWUgfSA9IENsYXNzLFxuICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyksXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgICAgaWdub3JlZFByb3BlcnRpZXMgPSBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcyk7XG5cbiAgICBlbGVtZW50LmFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpO1xuXG4gICAgZWxlbWVudC5pbml0aWFsaXNlICYmIGVsZW1lbnQuaW5pdGlhbGlzZSgpOyAvLy9cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21UYWdOYW1lKHRhZ05hbWUsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IENsYXNzID0gRWxlbWVudCwgIC8vL1xuICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyksXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSwgLy8vXG4gICAgICAgICAgaWdub3JlZFByb3BlcnRpZXMgPSBbXTsgLy8vXG5cbiAgICBlbGVtZW50LmFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpO1xuXG4gICAgZWxlbWVudC5pbml0aWFsaXNlICYmIGVsZW1lbnQuaW5pdGlhbGlzZSgpOyAvLy9cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGpzeE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgbW91c2VNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgc3RhdGVNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgdG91Y2hNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgc2Nyb2xsTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHJlc2l6ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBlbGVtZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGZ1bGxTY3JlZW5NaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgY3VzdG9tRXZlbnRNaXhpbnMpO1xuXG5mdW5jdGlvbiBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBzZWxlY3RvciA9IG51bGwsXG4gICAgICAgIGVsZW1lbnQgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoQ2xhc3MsIG51bGwsIHNlbGVjdG9yLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpKSxcbiAgICAgICAgZG9tRWxlbWVudCA9IGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTkFNRVNQQUNFX1VSSSwgdGFnTmFtZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgY29uc3RydWN0RWxlbWVudChlbGVtZW50LCBkb21FbGVtZW50KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MsIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30pIHtcbiAgaWYgKENsYXNzLmhhc093blByb3BlcnR5KERFRkFVTFRfUFJPUEVSVElFUykpIHtcbiAgICBkZWZhdWx0UHJvcGVydGllcyA9IGNvbWJpbmUoZGVmYXVsdFByb3BlcnRpZXMsIENsYXNzW0RFRkFVTFRfUFJPUEVSVElFU10pO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7ICAvLy9cblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgaWdub3JlZFByb3BlcnRpZXMgPSBbXSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoSUdOT1JFRF9QUk9QRVJUSUVTKSkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gYXVnbWVudChpZ25vcmVkUHJvcGVydGllcywgQ2xhc3NbSUdOT1JFRF9QUk9QRVJUSUVTXSwgKGlnbm9yZWRQcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKCFpZ25vcmVkUHJvcGVydGllcy5pbmNsdWRlcyhpZ25vcmVkUHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKHN1cGVyQ2xhc3MsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJldHVybiBpZ25vcmVkUHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBTVFJJTkcsIEZVTkNUSU9OIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZmlyc3RBcmd1bWVudCwgcHJvcGVydGllcywgLi4uY2hpbGRFbGVtZW50cykge1xuICBsZXQgZWxlbWVudCA9IG51bGw7XG5cbiAgaWYgKGZpcnN0QXJndW1lbnQpIHtcbiAgICBjaGlsZEVsZW1lbnRzID0gc2FuaXRpc2VDaGlsZEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuXG4gICAgcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgY2hpbGRFbGVtZW50c1xuICAgIH0sIHByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKGlzU3ViY2xhc3NPZihmaXJzdEFyZ3VtZW50LCBFbGVtZW50KSkge1xuICAgICAgY29uc3QgQ2xhc3MgPSBmaXJzdEFyZ3VtZW50OyAgLy8vXG5cbiAgICAgIGVsZW1lbnQgPSBDbGFzcy5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGZpcnN0QXJndW1lbnQ7IC8vL1xuXG4gICAgICBlbGVtZW50ID0gRWxlbWVudC5mcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBGVU5DVElPTikge1xuICAgICAgY29uc3QgZWxlbWVudEZ1bmN0aW9uID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gZWxlbWVudEZ1bmN0aW9uKHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5jb25zdCBSZWFjdCA9IHtcbiAgY3JlYXRlRWxlbWVudFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3Q7XG5cbmZ1bmN0aW9uIHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKSB7XG4gIGNoaWxkRWxlbWVudHMgPSBmbGF0dGVuKGNoaWxkRWxlbWVudHMpOyAvLy9cblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7ICAvLy9cblxuICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpOyAgLy8vXG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBjb25zdCBzdWJjbGFzc09mID0gKGFyZ3VtZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIENsYXNzKTtcblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IElOUFVUX0VWRU5UX1RZUEUsIENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25JbnB1dChpbnB1dEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KElOUFVUX0VWRU5UX1RZUEUsIGlucHV0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmSW5wdXQoaW5wdXRIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoSU5QVVRfRVZFTlRfVFlQRSwgaW5wdXRIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuZnVuY3Rpb24gaXNSZWFkT25seSgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5yZWFkT25seTsgfVxuXG5mdW5jdGlvbiBzZXRSZWFkT25seShyZWFkT25seSkgeyB0aGlzLmRvbUVsZW1lbnQucmVhZE9ubHkgPSByZWFkT25seTsgfVxuXG5jb25zdCBpbnB1dE1peGlucyA9IHtcbiAgb25JbnB1dCxcbiAgb2ZmSW5wdXQsXG4gIG9uQ2hhbmdlLFxuICBvZmZDaGFuZ2UsXG4gIGdldFZhbHVlLFxuICBzZXRWYWx1ZSxcbiAgaXNSZWFkT25seSxcbiAgc2V0UmVhZE9ubHlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlucHV0TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTFVSX0VWRU5UX1RZUEUsIEZPQ1VTX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KEJMVVJfRVZFTlRfVFlQRSwgYmx1ckhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChCTFVSX0VWRU5UX1RZUEUsIGJsdXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbkZvY3VzKGZvY3VzSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoRk9DVVNfRVZFTlRfVFlQRSwgZm9jdXNIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZGb2N1cyhmb2N1c0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChGT0NVU19FVkVOVF9UWVBFLCBmb2N1c0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGJsdXIoKSB7IHRoaXMuZG9tRWxlbWVudC5ibHVyKCk7IH1cblxuZnVuY3Rpb24gZm9jdXMoKSB7IHRoaXMuZG9tRWxlbWVudC5mb2N1cygpOyB9XG5cbmZ1bmN0aW9uIGhhc0ZvY3VzKCkge1xuICBjb25zdCBmb2N1cyA9IChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnQpOyAgLy8vXG5cbiAgcmV0dXJuIGZvY3VzO1xufVxuXG5jb25zdCBmb2N1c01peGlucyA9IHtcbiAgb25CbHVyLFxuICBvZmZCbHVyLFxuICBvbkZvY3VzLFxuICBvZmZGb2N1cyxcbiAgYmx1cixcbiAgZm9jdXMsXG4gIGhhc0ZvY3VzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb2N1c01peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ1VUX0VWRU5UX1RZUEUsIENPUFlfRVZFTlRfVFlQRSwgUEFTVEVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uQ3V0KGN1dEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KENVVF9FVkVOVF9UWVBFLCBjdXRIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDdXQoY3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KENVVF9FVkVOVF9UWVBFLCBjdXRIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbkNvcHkoY29weUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KENPUFlfRVZFTlRfVFlQRSwgY29weUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNvcHkoY29weUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChDT1BZX0VWRU5UX1RZUEUsIGNvcHlIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvblBhc3RlKHBhc3RlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoUEFTVEVfRVZFTlRfVFlQRSwgcGFzdGVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZQYXN0ZShwYXN0ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChQQVNURV9FVkVOVF9UWVBFLCBwYXN0ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblN0YXJ0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvblN0YXJ0OyB9XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkVuZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25FbmQ7IH1cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQ7IH1cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kOyB9XG5cbmZ1bmN0aW9uIHNlbGVjdCgpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdCgpOyB9XG5cbmNvbnN0IHNlbGVjdGlvbk1peGlucyA9IHtcbiAgb25DdXQsXG4gIG9mZkN1dCxcbiAgb25Db3B5LFxuICBvZmZDb3B5LFxuICBvblBhc3RlLFxuICBvZmZQYXN0ZSxcbiAgZ2V0U2VsZWN0aW9uU3RhcnQsXG4gIGdldFNlbGVjdGlvbkVuZCxcbiAgc2V0U2VsZWN0aW9uU3RhcnQsXG4gIHNldFNlbGVjdGlvbkVuZCxcbiAgc2VsZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb25NaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuXG5pbXBvcnQgeyBVTkRFRklORUQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4vZXZlbnRUeXBlc1wiO1xuXG5jbGFzcyBEb2N1bWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50OyAvLy9cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5nZXRTZWxlY3Rpb24oKTsgfVxuXG4gIGNyZWF0ZVJhbmdlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNyZWF0ZVJhbmdlKCk7IH1cblxuICBjcmVhdGVUZXh0Tm9kZShkYXRhKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YSk7IH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH0gLy8vXG5cbiAgb2ZmU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH0gLy8vXG5cbiAgY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgICBsZXQgZXZlbnRMaXN0ZW5lcjtcblxuICAgIGNvbnN0IGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSkge1xuICAgICAgICBjb25zdCB7IGRvbUVsZW1lbnQgfSA9IGhhbmRsZXJFbGVtZW50LFxuICAgICAgICAgICAgICB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50LFxuICAgICAgICAgICAgICB7IGFjdGl2ZUVsZW1lbnQgfSA9IGN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgaWYgKGRvbUVsZW1lbnQgIT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIGV2ZW50LCBlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgaGFuZGxlcixcbiAgICAgIGV2ZW50VHlwZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGtleU1peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZG9jdW1lbnQgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgRG9jdW1lbnQoKTsgIC8vL1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBmb2N1c01peGlucyBmcm9tIFwiLi9taXhpbnMvZm9jdXNcIjtcblxuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSRVNJWkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IG9uU2Nyb2xsLCBvZmZTY3JvbGwgfSBmcm9tIFwiLi9taXhpbnMvc2Nyb2xsXCI7XG5cbmNsYXNzIFdpbmRvdyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IHdpbmRvdzsgLy8vXG4gIH1cblxuICBnZXRET01FbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnQ7XG4gIH1cblxuICBhc3NpZ24oLi4uc291cmNlcykge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgLi4uc291cmNlcyk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOyAvLy9cbiAgfVxuXG4gIGdldFdpZHRoKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmlubmVyV2lkdGg7IH0gLy8vXG4gIFxuICBnZXRIZWlnaHQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIZWlnaHQ7IH0gLy8vXG5cbiAgZ2V0U2Nyb2xsVG9wKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnBhZ2VZT2Zmc2V0OyB9ICAvLy9cblxuICBnZXRTY3JvbGxMZWZ0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnBhZ2VYT2Zmc2V0OyB9IC8vL1xuXG4gIGdldFNlbGVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5nZXRTZWxlY3Rpb24oKTsgfVxuXG4gIGdldFNjcmVlbldpZHRoKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnNjcmVlbi53aWR0aDsgfVxuXG4gIGdldFNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JlZW4uaGVpZ2h0OyB9XG5cbiAgc2Nyb2xsVG8oc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUbyhzY3JvbGxMZWZ0LCBzY3JvbGxUb3ApOyB9XG5cbiAgb25SZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFJFU0laRV9FVkVOVF9UWVBFLFxuICAgICAgICAgIGV2ZW50TGlzdGVuZXIgPSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG4gIH1cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFJFU0laRV9FVkVOVF9UWVBFLFxuICAgICAgICAgIGV2ZW50TGlzdGVuZXIgPSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBmb2N1c01peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIHtcbiAgb25TY3JvbGwsXG4gIG9mZlNjcm9sbFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2Ygd2luZG93ID09PSBVTkRFRklORUQpID8gdW5kZWZpbmVkIDogbmV3IFdpbmRvdygpOyAgLy8vXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IEJPRFkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvZHkgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3IgPSBCT0RZKSB7XG4gICAgc3VwZXIoc2VsZWN0b3IpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImJvZHlcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBmb2N1c01peGlucyBmcm9tIFwiLi4vbWl4aW5zL2ZvY3VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZ2V0SFJlZigpIHsgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTsgfVxuXG4gIHNldEhSZWYoaHJlZikgeyByZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImFcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihMaW5rLnByb3RvdHlwZSwgZm9jdXNNaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IGlucHV0TWl4aW5zIGZyb20gXCIuLi9taXhpbnMvaW5wdXRcIjtcbmltcG9ydCBmb2N1c01peGlucyBmcm9tIFwiLi4vbWl4aW5zL2ZvY3VzXCI7XG5pbXBvcnQgc2VsZWN0aW9uTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xufVxuXG5PYmplY3QuYXNzaWduKElucHV0LnByb3RvdHlwZSwgaW5wdXRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihJbnB1dC5wcm90b3R5cGUsIGZvY3VzTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oSW5wdXQucHJvdG90eXBlLCBzZWxlY3Rpb25NaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IGZvY3VzTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvZm9jdXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJidXR0b25cIjtcbn1cblxuT2JqZWN0LmFzc2lnbihCdXR0b24ucHJvdG90eXBlLCBmb2N1c01peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgaW5wdXRNaXhpbnMgZnJvbSBcIi4uL21peGlucy9pbnB1dFwiO1xuaW1wb3J0IGZvY3VzTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvZm9jdXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWxlY3RcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihTZWxlY3QucHJvdG90eXBlLCBpbnB1dE1peGlucyk7XG5PYmplY3QuYXNzaWduKFNlbGVjdC5wcm90b3R5cGUsIGZvY3VzTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBpbnB1dE1peGlucyBmcm9tIFwiLi4vbWl4aW5zL2lucHV0XCI7XG5pbXBvcnQgZm9jdXNNaXhpbnMgZnJvbSBcIi4uL21peGlucy9mb2N1c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGVja2JveCBleHRlbmRzIEVsZW1lbnQge1xuICBpc0NoZWNrZWQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2hlY2tlZDsgfVxuXG4gIGNoZWNrKGNoZWNrZWQgPSB0cnVlKSB7IHRoaXMuZG9tRWxlbWVudC5jaGVja2VkID0gY2hlY2tlZDsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCJcbiAgfTtcbn1cblxuT2JqZWN0LmFzc2lnbihDaGVja2JveC5wcm90b3R5cGUsIGlucHV0TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oQ2hlY2tib3gucHJvdG90eXBlLCBmb2N1c01peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgaW5wdXRNaXhpbnMgZnJvbSBcIi4uL21peGlucy9pbnB1dFwiO1xuaW1wb3J0IGZvY3VzTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvZm9jdXNcIjtcbmltcG9ydCBzZWxlY3Rpb25NaXhpbnMgZnJvbSBcIi4uL21peGlucy9zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcInRleHRhcmVhXCI7XG59XG5cbk9iamVjdC5hc3NpZ24oVGV4dGFyZWEucHJvdG90eXBlLCBpbnB1dE1peGlucyk7XG5PYmplY3QuYXNzaWduKFRleHRhcmVhLnByb3RvdHlwZSwgZm9jdXNNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihUZXh0YXJlYS5wcm90b3R5cGUsIHNlbGVjdGlvbk1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1vdXNlQnV0dG9ucyB9IGZyb20gXCIuL21vdXNlQnV0dG9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbGVtZW50VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW5wdXRNaXhpbnMgfSBmcm9tIFwiLi9taXhpbnMvaW5wdXRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9jdXNNaXhpbnMgfSBmcm9tIFwiLi9taXhpbnMvZm9jdXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2VsZWN0aW9uTWl4aW5zIH0gZnJvbSBcIi4vbWl4aW5zL3NlbGVjdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjdXN0b21FdmVudE1peGlucyB9IGZyb20gXCIuL21peGlucy9jdXN0b21FdmVudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RWxlbWVudCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRvY3VtZW50IH0gZnJvbSBcIi4vZG9jdW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvZHkgfSBmcm9tIFwiLi9lbGVtZW50L2JvZHlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGluayB9IGZyb20gXCIuL2VsZW1lbnQvbGlua1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbnB1dCB9IGZyb20gXCIuL2VsZW1lbnQvaW5wdXRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vZWxlbWVudC9idXR0b25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vZWxlbWVudC9zZWxlY3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9lbGVtZW50L2NoZWNrYm94XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRhcmVhIH0gZnJvbSBcIi4vZWxlbWVudC90ZXh0YXJlYVwiO1xuXG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwiLi4vaW5kZXhcIjsgIC8vL1xuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgUmVhY3Rcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIG1vdXNlTW92ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB7IHBhZ2VYLCBwYWdlWSB9ID0gZXZlbnQ7XG5cbiAgICBjb25zb2xlLmxvZyhwYWdlWCwgcGFnZVkpXG4gIH1cblxuICByZXNpemVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgaGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHQoKTtcblxuICAgIGNvbnNvbGUubG9nKHdpZHRoLCBoZWlnaHQpXG4gIH1cblxuICBkaWRNb3VudCgpIHtcbiAgICB0aGlzLm9uUmVzaXplKHRoaXMucmVzaXplSGFuZGxlciwgdGhpcyk7XG4gICAgdGhpcy5vbk1vdXNlTW92ZSh0aGlzLm1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5vZmZNb3VzZU1vdmUodGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcbiAgICB0aGlzLm9mZlJlc2l6ZSh0aGlzLnJlc2l6ZUhhbmRsZXIsIHRoaXMpO1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8cD5cbiAgICAgICAgQSBwYXJhZ3JhcGggY29udGFpbmVkIGluIGEgZGl2IHdpdGggcmVzaXplIGFuZCBtb3VzZSBtb3ZlIGhhbmRsZXJzLlxuICAgICAgPC9wPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBEaXYgZnJvbSBcIi4vdmlldy9kaXZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxEaXYvPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZpZXdcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2V4YW1wbGUvcHJlYW1ibGVcIjtcblxuaW1wb3J0IHsgQm9keSB9IGZyb20gXCIuL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3XCJcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCk7XG5cbmJvZHkubW91bnQoXG5cbiAgPFZpZXcvPlxuXG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBOzs7OzttQ0FFQSxXQUFBOzs7ZUFBcUI7OztBQUFOLHVCQUFN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
|