vitest 0.5.2 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/chunk-api-setup.bfd4a66d.js +4444 -0
  2. package/dist/chunk-constants.a1a50d89.js +32 -0
  3. package/dist/chunk-defaults.1725002f.js +1833 -0
  4. package/dist/chunk-install-pkg.7ce2052a.js +1643 -0
  5. package/dist/chunk-integrations-globals.9bda85f1.js +24 -0
  6. package/dist/chunk-magic-string.6c8f4a10.js +1361 -0
  7. package/dist/chunk-runtime-chain.d86ab074.js +5946 -0
  8. package/dist/chunk-runtime-hooks.aef17670.js +42 -0
  9. package/dist/chunk-runtime-rpc.1832c38c.js +6 -0
  10. package/dist/chunk-utils-base.39767f3e.js +225 -0
  11. package/dist/chunk-utils-source-map.be2b14e2.js +3407 -0
  12. package/dist/chunk-vite-node-externalize.70d7fd52.js +10515 -0
  13. package/dist/chunk-vite-node-utils.d38851ea.js +9451 -0
  14. package/dist/cli.js +15 -67
  15. package/dist/config.d.ts +2 -0
  16. package/dist/entry.js +26 -16
  17. package/dist/index.d.ts +21 -2
  18. package/dist/index.js +5 -5
  19. package/dist/node.d.ts +2 -0
  20. package/dist/node.js +14 -67
  21. package/dist/{_commonjsHelpers-c9e3b764.js → vendor-_commonjsHelpers.91d4f591.js} +1 -1
  22. package/dist/vendor-index.665a6ba4.js +5708 -0
  23. package/dist/vendor-index.76be1f4d.js +187 -0
  24. package/dist/vendor-index.f6809970.js +1111 -0
  25. package/dist/worker.js +5 -5
  26. package/package.json +3 -3
  27. package/dist/client-4904f549.js +0 -9451
  28. package/dist/constants-c746dc5b.js +0 -32
  29. package/dist/diff-8a93a8e2.js +0 -1833
  30. package/dist/globals-2b9979c1.js +0 -24
  31. package/dist/index-072c45fd.js +0 -5708
  32. package/dist/index-0996637f.js +0 -1111
  33. package/dist/index-1488b423.js +0 -187
  34. package/dist/index-1945a7c3.js +0 -1643
  35. package/dist/index-7742eef3.js +0 -42
  36. package/dist/index-ed167b07.js +0 -225
  37. package/dist/magic-string.es-94000aea.js +0 -1361
  38. package/dist/rpc-377d999b.js +0 -6
  39. package/dist/setup-51b84c4b.js +0 -4444
  40. package/dist/source-map-4a00df0f.js +0 -3407
  41. package/dist/stdin-8aef0316.js +0 -10447
  42. package/dist/vi-2b3fed99.js +0 -5943
@@ -0,0 +1,1361 @@
1
+ var charToInteger = {};
2
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
3
+ for (var i = 0; i < chars.length; i++) {
4
+ charToInteger[chars.charCodeAt(i)] = i;
5
+ }
6
+ function encode(decoded) {
7
+ var sourceFileIndex = 0; // second field
8
+ var sourceCodeLine = 0; // third field
9
+ var sourceCodeColumn = 0; // fourth field
10
+ var nameIndex = 0; // fifth field
11
+ var mappings = '';
12
+ for (var i = 0; i < decoded.length; i++) {
13
+ var line = decoded[i];
14
+ if (i > 0)
15
+ mappings += ';';
16
+ if (line.length === 0)
17
+ continue;
18
+ var generatedCodeColumn = 0; // first field
19
+ var lineMappings = [];
20
+ for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
21
+ var segment = line_1[_i];
22
+ var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);
23
+ generatedCodeColumn = segment[0];
24
+ if (segment.length > 1) {
25
+ segmentMappings +=
26
+ encodeInteger(segment[1] - sourceFileIndex) +
27
+ encodeInteger(segment[2] - sourceCodeLine) +
28
+ encodeInteger(segment[3] - sourceCodeColumn);
29
+ sourceFileIndex = segment[1];
30
+ sourceCodeLine = segment[2];
31
+ sourceCodeColumn = segment[3];
32
+ }
33
+ if (segment.length === 5) {
34
+ segmentMappings += encodeInteger(segment[4] - nameIndex);
35
+ nameIndex = segment[4];
36
+ }
37
+ lineMappings.push(segmentMappings);
38
+ }
39
+ mappings += lineMappings.join(',');
40
+ }
41
+ return mappings;
42
+ }
43
+ function encodeInteger(num) {
44
+ var result = '';
45
+ num = num < 0 ? (-num << 1) | 1 : num << 1;
46
+ do {
47
+ var clamped = num & 31;
48
+ num >>>= 5;
49
+ if (num > 0) {
50
+ clamped |= 32;
51
+ }
52
+ result += chars[clamped];
53
+ } while (num > 0);
54
+ return result;
55
+ }
56
+
57
+ var BitSet = function BitSet(arg) {
58
+ this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
59
+ };
60
+
61
+ BitSet.prototype.add = function add (n) {
62
+ this.bits[n >> 5] |= 1 << (n & 31);
63
+ };
64
+
65
+ BitSet.prototype.has = function has (n) {
66
+ return !!(this.bits[n >> 5] & (1 << (n & 31)));
67
+ };
68
+
69
+ var Chunk = function Chunk(start, end, content) {
70
+ this.start = start;
71
+ this.end = end;
72
+ this.original = content;
73
+
74
+ this.intro = '';
75
+ this.outro = '';
76
+
77
+ this.content = content;
78
+ this.storeName = false;
79
+ this.edited = false;
80
+
81
+ // we make these non-enumerable, for sanity while debugging
82
+ Object.defineProperties(this, {
83
+ previous: { writable: true, value: null },
84
+ next: { writable: true, value: null }
85
+ });
86
+ };
87
+
88
+ Chunk.prototype.appendLeft = function appendLeft (content) {
89
+ this.outro += content;
90
+ };
91
+
92
+ Chunk.prototype.appendRight = function appendRight (content) {
93
+ this.intro = this.intro + content;
94
+ };
95
+
96
+ Chunk.prototype.clone = function clone () {
97
+ var chunk = new Chunk(this.start, this.end, this.original);
98
+
99
+ chunk.intro = this.intro;
100
+ chunk.outro = this.outro;
101
+ chunk.content = this.content;
102
+ chunk.storeName = this.storeName;
103
+ chunk.edited = this.edited;
104
+
105
+ return chunk;
106
+ };
107
+
108
+ Chunk.prototype.contains = function contains (index) {
109
+ return this.start < index && index < this.end;
110
+ };
111
+
112
+ Chunk.prototype.eachNext = function eachNext (fn) {
113
+ var chunk = this;
114
+ while (chunk) {
115
+ fn(chunk);
116
+ chunk = chunk.next;
117
+ }
118
+ };
119
+
120
+ Chunk.prototype.eachPrevious = function eachPrevious (fn) {
121
+ var chunk = this;
122
+ while (chunk) {
123
+ fn(chunk);
124
+ chunk = chunk.previous;
125
+ }
126
+ };
127
+
128
+ Chunk.prototype.edit = function edit (content, storeName, contentOnly) {
129
+ this.content = content;
130
+ if (!contentOnly) {
131
+ this.intro = '';
132
+ this.outro = '';
133
+ }
134
+ this.storeName = storeName;
135
+
136
+ this.edited = true;
137
+
138
+ return this;
139
+ };
140
+
141
+ Chunk.prototype.prependLeft = function prependLeft (content) {
142
+ this.outro = content + this.outro;
143
+ };
144
+
145
+ Chunk.prototype.prependRight = function prependRight (content) {
146
+ this.intro = content + this.intro;
147
+ };
148
+
149
+ Chunk.prototype.split = function split (index) {
150
+ var sliceIndex = index - this.start;
151
+
152
+ var originalBefore = this.original.slice(0, sliceIndex);
153
+ var originalAfter = this.original.slice(sliceIndex);
154
+
155
+ this.original = originalBefore;
156
+
157
+ var newChunk = new Chunk(index, this.end, originalAfter);
158
+ newChunk.outro = this.outro;
159
+ this.outro = '';
160
+
161
+ this.end = index;
162
+
163
+ if (this.edited) {
164
+ // TODO is this block necessary?...
165
+ newChunk.edit('', false);
166
+ this.content = '';
167
+ } else {
168
+ this.content = originalBefore;
169
+ }
170
+
171
+ newChunk.next = this.next;
172
+ if (newChunk.next) { newChunk.next.previous = newChunk; }
173
+ newChunk.previous = this;
174
+ this.next = newChunk;
175
+
176
+ return newChunk;
177
+ };
178
+
179
+ Chunk.prototype.toString = function toString () {
180
+ return this.intro + this.content + this.outro;
181
+ };
182
+
183
+ Chunk.prototype.trimEnd = function trimEnd (rx) {
184
+ this.outro = this.outro.replace(rx, '');
185
+ if (this.outro.length) { return true; }
186
+
187
+ var trimmed = this.content.replace(rx, '');
188
+
189
+ if (trimmed.length) {
190
+ if (trimmed !== this.content) {
191
+ this.split(this.start + trimmed.length).edit('', undefined, true);
192
+ }
193
+ return true;
194
+
195
+ } else {
196
+ this.edit('', undefined, true);
197
+
198
+ this.intro = this.intro.replace(rx, '');
199
+ if (this.intro.length) { return true; }
200
+ }
201
+ };
202
+
203
+ Chunk.prototype.trimStart = function trimStart (rx) {
204
+ this.intro = this.intro.replace(rx, '');
205
+ if (this.intro.length) { return true; }
206
+
207
+ var trimmed = this.content.replace(rx, '');
208
+
209
+ if (trimmed.length) {
210
+ if (trimmed !== this.content) {
211
+ this.split(this.end - trimmed.length);
212
+ this.edit('', undefined, true);
213
+ }
214
+ return true;
215
+
216
+ } else {
217
+ this.edit('', undefined, true);
218
+
219
+ this.outro = this.outro.replace(rx, '');
220
+ if (this.outro.length) { return true; }
221
+ }
222
+ };
223
+
224
+ var btoa = function () {
225
+ throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
226
+ };
227
+ if (typeof window !== 'undefined' && typeof window.btoa === 'function') {
228
+ btoa = function (str) { return window.btoa(unescape(encodeURIComponent(str))); };
229
+ } else if (typeof Buffer === 'function') {
230
+ btoa = function (str) { return Buffer.from(str, 'utf-8').toString('base64'); };
231
+ }
232
+
233
+ var SourceMap = function SourceMap(properties) {
234
+ this.version = 3;
235
+ this.file = properties.file;
236
+ this.sources = properties.sources;
237
+ this.sourcesContent = properties.sourcesContent;
238
+ this.names = properties.names;
239
+ this.mappings = encode(properties.mappings);
240
+ };
241
+
242
+ SourceMap.prototype.toString = function toString () {
243
+ return JSON.stringify(this);
244
+ };
245
+
246
+ SourceMap.prototype.toUrl = function toUrl () {
247
+ return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
248
+ };
249
+
250
+ function guessIndent(code) {
251
+ var lines = code.split('\n');
252
+
253
+ var tabbed = lines.filter(function (line) { return /^\t+/.test(line); });
254
+ var spaced = lines.filter(function (line) { return /^ {2,}/.test(line); });
255
+
256
+ if (tabbed.length === 0 && spaced.length === 0) {
257
+ return null;
258
+ }
259
+
260
+ // More lines tabbed than spaced? Assume tabs, and
261
+ // default to tabs in the case of a tie (or nothing
262
+ // to go on)
263
+ if (tabbed.length >= spaced.length) {
264
+ return '\t';
265
+ }
266
+
267
+ // Otherwise, we need to guess the multiple
268
+ var min = spaced.reduce(function (previous, current) {
269
+ var numSpaces = /^ +/.exec(current)[0].length;
270
+ return Math.min(numSpaces, previous);
271
+ }, Infinity);
272
+
273
+ return new Array(min + 1).join(' ');
274
+ }
275
+
276
+ function getRelativePath(from, to) {
277
+ var fromParts = from.split(/[/\\]/);
278
+ var toParts = to.split(/[/\\]/);
279
+
280
+ fromParts.pop(); // get dirname
281
+
282
+ while (fromParts[0] === toParts[0]) {
283
+ fromParts.shift();
284
+ toParts.shift();
285
+ }
286
+
287
+ if (fromParts.length) {
288
+ var i = fromParts.length;
289
+ while (i--) { fromParts[i] = '..'; }
290
+ }
291
+
292
+ return fromParts.concat(toParts).join('/');
293
+ }
294
+
295
+ var toString = Object.prototype.toString;
296
+
297
+ function isObject(thing) {
298
+ return toString.call(thing) === '[object Object]';
299
+ }
300
+
301
+ function getLocator(source) {
302
+ var originalLines = source.split('\n');
303
+ var lineOffsets = [];
304
+
305
+ for (var i = 0, pos = 0; i < originalLines.length; i++) {
306
+ lineOffsets.push(pos);
307
+ pos += originalLines[i].length + 1;
308
+ }
309
+
310
+ return function locate(index) {
311
+ var i = 0;
312
+ var j = lineOffsets.length;
313
+ while (i < j) {
314
+ var m = (i + j) >> 1;
315
+ if (index < lineOffsets[m]) {
316
+ j = m;
317
+ } else {
318
+ i = m + 1;
319
+ }
320
+ }
321
+ var line = i - 1;
322
+ var column = index - lineOffsets[line];
323
+ return { line: line, column: column };
324
+ };
325
+ }
326
+
327
+ var Mappings = function Mappings(hires) {
328
+ this.hires = hires;
329
+ this.generatedCodeLine = 0;
330
+ this.generatedCodeColumn = 0;
331
+ this.raw = [];
332
+ this.rawSegments = this.raw[this.generatedCodeLine] = [];
333
+ this.pending = null;
334
+ };
335
+
336
+ Mappings.prototype.addEdit = function addEdit (sourceIndex, content, loc, nameIndex) {
337
+ if (content.length) {
338
+ var segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
339
+ if (nameIndex >= 0) {
340
+ segment.push(nameIndex);
341
+ }
342
+ this.rawSegments.push(segment);
343
+ } else if (this.pending) {
344
+ this.rawSegments.push(this.pending);
345
+ }
346
+
347
+ this.advance(content);
348
+ this.pending = null;
349
+ };
350
+
351
+ Mappings.prototype.addUneditedChunk = function addUneditedChunk (sourceIndex, chunk, original, loc, sourcemapLocations) {
352
+ var originalCharIndex = chunk.start;
353
+ var first = true;
354
+
355
+ while (originalCharIndex < chunk.end) {
356
+ if (this.hires || first || sourcemapLocations.has(originalCharIndex)) {
357
+ this.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);
358
+ }
359
+
360
+ if (original[originalCharIndex] === '\n') {
361
+ loc.line += 1;
362
+ loc.column = 0;
363
+ this.generatedCodeLine += 1;
364
+ this.raw[this.generatedCodeLine] = this.rawSegments = [];
365
+ this.generatedCodeColumn = 0;
366
+ first = true;
367
+ } else {
368
+ loc.column += 1;
369
+ this.generatedCodeColumn += 1;
370
+ first = false;
371
+ }
372
+
373
+ originalCharIndex += 1;
374
+ }
375
+
376
+ this.pending = null;
377
+ };
378
+
379
+ Mappings.prototype.advance = function advance (str) {
380
+ if (!str) { return; }
381
+
382
+ var lines = str.split('\n');
383
+
384
+ if (lines.length > 1) {
385
+ for (var i = 0; i < lines.length - 1; i++) {
386
+ this.generatedCodeLine++;
387
+ this.raw[this.generatedCodeLine] = this.rawSegments = [];
388
+ }
389
+ this.generatedCodeColumn = 0;
390
+ }
391
+
392
+ this.generatedCodeColumn += lines[lines.length - 1].length;
393
+ };
394
+
395
+ var n = '\n';
396
+
397
+ var warned = {
398
+ insertLeft: false,
399
+ insertRight: false,
400
+ storeName: false
401
+ };
402
+
403
+ var MagicString = function MagicString(string, options) {
404
+ if ( options === void 0 ) options = {};
405
+
406
+ var chunk = new Chunk(0, string.length, string);
407
+
408
+ Object.defineProperties(this, {
409
+ original: { writable: true, value: string },
410
+ outro: { writable: true, value: '' },
411
+ intro: { writable: true, value: '' },
412
+ firstChunk: { writable: true, value: chunk },
413
+ lastChunk: { writable: true, value: chunk },
414
+ lastSearchedChunk: { writable: true, value: chunk },
415
+ byStart: { writable: true, value: {} },
416
+ byEnd: { writable: true, value: {} },
417
+ filename: { writable: true, value: options.filename },
418
+ indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
419
+ sourcemapLocations: { writable: true, value: new BitSet() },
420
+ storedNames: { writable: true, value: {} },
421
+ indentStr: { writable: true, value: guessIndent(string) }
422
+ });
423
+
424
+ this.byStart[0] = chunk;
425
+ this.byEnd[string.length] = chunk;
426
+ };
427
+
428
+ MagicString.prototype.addSourcemapLocation = function addSourcemapLocation (char) {
429
+ this.sourcemapLocations.add(char);
430
+ };
431
+
432
+ MagicString.prototype.append = function append (content) {
433
+ if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }
434
+
435
+ this.outro += content;
436
+ return this;
437
+ };
438
+
439
+ MagicString.prototype.appendLeft = function appendLeft (index, content) {
440
+ if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
441
+
442
+ this._split(index);
443
+
444
+ var chunk = this.byEnd[index];
445
+
446
+ if (chunk) {
447
+ chunk.appendLeft(content);
448
+ } else {
449
+ this.intro += content;
450
+ }
451
+ return this;
452
+ };
453
+
454
+ MagicString.prototype.appendRight = function appendRight (index, content) {
455
+ if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
456
+
457
+ this._split(index);
458
+
459
+ var chunk = this.byStart[index];
460
+
461
+ if (chunk) {
462
+ chunk.appendRight(content);
463
+ } else {
464
+ this.outro += content;
465
+ }
466
+ return this;
467
+ };
468
+
469
+ MagicString.prototype.clone = function clone () {
470
+ var cloned = new MagicString(this.original, { filename: this.filename });
471
+
472
+ var originalChunk = this.firstChunk;
473
+ var clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());
474
+
475
+ while (originalChunk) {
476
+ cloned.byStart[clonedChunk.start] = clonedChunk;
477
+ cloned.byEnd[clonedChunk.end] = clonedChunk;
478
+
479
+ var nextOriginalChunk = originalChunk.next;
480
+ var nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();
481
+
482
+ if (nextClonedChunk) {
483
+ clonedChunk.next = nextClonedChunk;
484
+ nextClonedChunk.previous = clonedChunk;
485
+
486
+ clonedChunk = nextClonedChunk;
487
+ }
488
+
489
+ originalChunk = nextOriginalChunk;
490
+ }
491
+
492
+ cloned.lastChunk = clonedChunk;
493
+
494
+ if (this.indentExclusionRanges) {
495
+ cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
496
+ }
497
+
498
+ cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);
499
+
500
+ cloned.intro = this.intro;
501
+ cloned.outro = this.outro;
502
+
503
+ return cloned;
504
+ };
505
+
506
+ MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) {
507
+ var this$1$1 = this;
508
+
509
+ options = options || {};
510
+
511
+ var sourceIndex = 0;
512
+ var names = Object.keys(this.storedNames);
513
+ var mappings = new Mappings(options.hires);
514
+
515
+ var locate = getLocator(this.original);
516
+
517
+ if (this.intro) {
518
+ mappings.advance(this.intro);
519
+ }
520
+
521
+ this.firstChunk.eachNext(function (chunk) {
522
+ var loc = locate(chunk.start);
523
+
524
+ if (chunk.intro.length) { mappings.advance(chunk.intro); }
525
+
526
+ if (chunk.edited) {
527
+ mappings.addEdit(
528
+ sourceIndex,
529
+ chunk.content,
530
+ loc,
531
+ chunk.storeName ? names.indexOf(chunk.original) : -1
532
+ );
533
+ } else {
534
+ mappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations);
535
+ }
536
+
537
+ if (chunk.outro.length) { mappings.advance(chunk.outro); }
538
+ });
539
+
540
+ return {
541
+ file: options.file ? options.file.split(/[/\\]/).pop() : null,
542
+ sources: [options.source ? getRelativePath(options.file || '', options.source) : null],
543
+ sourcesContent: options.includeContent ? [this.original] : [null],
544
+ names: names,
545
+ mappings: mappings.raw
546
+ };
547
+ };
548
+
549
+ MagicString.prototype.generateMap = function generateMap (options) {
550
+ return new SourceMap(this.generateDecodedMap(options));
551
+ };
552
+
553
+ MagicString.prototype.getIndentString = function getIndentString () {
554
+ return this.indentStr === null ? '\t' : this.indentStr;
555
+ };
556
+
557
+ MagicString.prototype.indent = function indent (indentStr, options) {
558
+ var pattern = /^[^\r\n]/gm;
559
+
560
+ if (isObject(indentStr)) {
561
+ options = indentStr;
562
+ indentStr = undefined;
563
+ }
564
+
565
+ indentStr = indentStr !== undefined ? indentStr : this.indentStr || '\t';
566
+
567
+ if (indentStr === '') { return this; } // noop
568
+
569
+ options = options || {};
570
+
571
+ // Process exclusion ranges
572
+ var isExcluded = {};
573
+
574
+ if (options.exclude) {
575
+ var exclusions =
576
+ typeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;
577
+ exclusions.forEach(function (exclusion) {
578
+ for (var i = exclusion[0]; i < exclusion[1]; i += 1) {
579
+ isExcluded[i] = true;
580
+ }
581
+ });
582
+ }
583
+
584
+ var shouldIndentNextCharacter = options.indentStart !== false;
585
+ var replacer = function (match) {
586
+ if (shouldIndentNextCharacter) { return ("" + indentStr + match); }
587
+ shouldIndentNextCharacter = true;
588
+ return match;
589
+ };
590
+
591
+ this.intro = this.intro.replace(pattern, replacer);
592
+
593
+ var charIndex = 0;
594
+ var chunk = this.firstChunk;
595
+
596
+ while (chunk) {
597
+ var end = chunk.end;
598
+
599
+ if (chunk.edited) {
600
+ if (!isExcluded[charIndex]) {
601
+ chunk.content = chunk.content.replace(pattern, replacer);
602
+
603
+ if (chunk.content.length) {
604
+ shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\n';
605
+ }
606
+ }
607
+ } else {
608
+ charIndex = chunk.start;
609
+
610
+ while (charIndex < end) {
611
+ if (!isExcluded[charIndex]) {
612
+ var char = this.original[charIndex];
613
+
614
+ if (char === '\n') {
615
+ shouldIndentNextCharacter = true;
616
+ } else if (char !== '\r' && shouldIndentNextCharacter) {
617
+ shouldIndentNextCharacter = false;
618
+
619
+ if (charIndex === chunk.start) {
620
+ chunk.prependRight(indentStr);
621
+ } else {
622
+ this._splitChunk(chunk, charIndex);
623
+ chunk = chunk.next;
624
+ chunk.prependRight(indentStr);
625
+ }
626
+ }
627
+ }
628
+
629
+ charIndex += 1;
630
+ }
631
+ }
632
+
633
+ charIndex = chunk.end;
634
+ chunk = chunk.next;
635
+ }
636
+
637
+ this.outro = this.outro.replace(pattern, replacer);
638
+
639
+ return this;
640
+ };
641
+
642
+ MagicString.prototype.insert = function insert () {
643
+ throw new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');
644
+ };
645
+
646
+ MagicString.prototype.insertLeft = function insertLeft (index, content) {
647
+ if (!warned.insertLeft) {
648
+ console.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console
649
+ warned.insertLeft = true;
650
+ }
651
+
652
+ return this.appendLeft(index, content);
653
+ };
654
+
655
+ MagicString.prototype.insertRight = function insertRight (index, content) {
656
+ if (!warned.insertRight) {
657
+ console.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console
658
+ warned.insertRight = true;
659
+ }
660
+
661
+ return this.prependRight(index, content);
662
+ };
663
+
664
+ MagicString.prototype.move = function move (start, end, index) {
665
+ if (index >= start && index <= end) { throw new Error('Cannot move a selection inside itself'); }
666
+
667
+ this._split(start);
668
+ this._split(end);
669
+ this._split(index);
670
+
671
+ var first = this.byStart[start];
672
+ var last = this.byEnd[end];
673
+
674
+ var oldLeft = first.previous;
675
+ var oldRight = last.next;
676
+
677
+ var newRight = this.byStart[index];
678
+ if (!newRight && last === this.lastChunk) { return this; }
679
+ var newLeft = newRight ? newRight.previous : this.lastChunk;
680
+
681
+ if (oldLeft) { oldLeft.next = oldRight; }
682
+ if (oldRight) { oldRight.previous = oldLeft; }
683
+
684
+ if (newLeft) { newLeft.next = first; }
685
+ if (newRight) { newRight.previous = last; }
686
+
687
+ if (!first.previous) { this.firstChunk = last.next; }
688
+ if (!last.next) {
689
+ this.lastChunk = first.previous;
690
+ this.lastChunk.next = null;
691
+ }
692
+
693
+ first.previous = newLeft;
694
+ last.next = newRight || null;
695
+
696
+ if (!newLeft) { this.firstChunk = first; }
697
+ if (!newRight) { this.lastChunk = last; }
698
+ return this;
699
+ };
700
+
701
+ MagicString.prototype.overwrite = function overwrite (start, end, content, options) {
702
+ if (typeof content !== 'string') { throw new TypeError('replacement content must be a string'); }
703
+
704
+ while (start < 0) { start += this.original.length; }
705
+ while (end < 0) { end += this.original.length; }
706
+
707
+ if (end > this.original.length) { throw new Error('end is out of bounds'); }
708
+ if (start === end)
709
+ { throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead'); }
710
+
711
+ this._split(start);
712
+ this._split(end);
713
+
714
+ if (options === true) {
715
+ if (!warned.storeName) {
716
+ console.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console
717
+ warned.storeName = true;
718
+ }
719
+
720
+ options = { storeName: true };
721
+ }
722
+ var storeName = options !== undefined ? options.storeName : false;
723
+ var contentOnly = options !== undefined ? options.contentOnly : false;
724
+
725
+ if (storeName) {
726
+ var original = this.original.slice(start, end);
727
+ this.storedNames[original] = true;
728
+ }
729
+
730
+ var first = this.byStart[start];
731
+ var last = this.byEnd[end];
732
+
733
+ if (first) {
734
+ if (end > first.end && first.next !== this.byStart[first.end]) {
735
+ throw new Error('Cannot overwrite across a split point');
736
+ }
737
+
738
+ first.edit(content, storeName, contentOnly);
739
+
740
+ if (first !== last) {
741
+ var chunk = first.next;
742
+ while (chunk !== last) {
743
+ chunk.edit('', false);
744
+ chunk = chunk.next;
745
+ }
746
+
747
+ chunk.edit('', false);
748
+ }
749
+ } else {
750
+ // must be inserting at the end
751
+ var newChunk = new Chunk(start, end, '').edit(content, storeName);
752
+
753
+ // TODO last chunk in the array may not be the last chunk, if it's moved...
754
+ last.next = newChunk;
755
+ newChunk.previous = last;
756
+ }
757
+ return this;
758
+ };
759
+
760
+ MagicString.prototype.prepend = function prepend (content) {
761
+ if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }
762
+
763
+ this.intro = content + this.intro;
764
+ return this;
765
+ };
766
+
767
+ MagicString.prototype.prependLeft = function prependLeft (index, content) {
768
+ if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
769
+
770
+ this._split(index);
771
+
772
+ var chunk = this.byEnd[index];
773
+
774
+ if (chunk) {
775
+ chunk.prependLeft(content);
776
+ } else {
777
+ this.intro = content + this.intro;
778
+ }
779
+ return this;
780
+ };
781
+
782
+ MagicString.prototype.prependRight = function prependRight (index, content) {
783
+ if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
784
+
785
+ this._split(index);
786
+
787
+ var chunk = this.byStart[index];
788
+
789
+ if (chunk) {
790
+ chunk.prependRight(content);
791
+ } else {
792
+ this.outro = content + this.outro;
793
+ }
794
+ return this;
795
+ };
796
+
797
+ MagicString.prototype.remove = function remove (start, end) {
798
+ while (start < 0) { start += this.original.length; }
799
+ while (end < 0) { end += this.original.length; }
800
+
801
+ if (start === end) { return this; }
802
+
803
+ if (start < 0 || end > this.original.length) { throw new Error('Character is out of bounds'); }
804
+ if (start > end) { throw new Error('end must be greater than start'); }
805
+
806
+ this._split(start);
807
+ this._split(end);
808
+
809
+ var chunk = this.byStart[start];
810
+
811
+ while (chunk) {
812
+ chunk.intro = '';
813
+ chunk.outro = '';
814
+ chunk.edit('');
815
+
816
+ chunk = end > chunk.end ? this.byStart[chunk.end] : null;
817
+ }
818
+ return this;
819
+ };
820
+
821
+ MagicString.prototype.lastChar = function lastChar () {
822
+ if (this.outro.length)
823
+ { return this.outro[this.outro.length - 1]; }
824
+ var chunk = this.lastChunk;
825
+ do {
826
+ if (chunk.outro.length)
827
+ { return chunk.outro[chunk.outro.length - 1]; }
828
+ if (chunk.content.length)
829
+ { return chunk.content[chunk.content.length - 1]; }
830
+ if (chunk.intro.length)
831
+ { return chunk.intro[chunk.intro.length - 1]; }
832
+ } while (chunk = chunk.previous);
833
+ if (this.intro.length)
834
+ { return this.intro[this.intro.length - 1]; }
835
+ return '';
836
+ };
837
+
838
+ MagicString.prototype.lastLine = function lastLine () {
839
+ var lineIndex = this.outro.lastIndexOf(n);
840
+ if (lineIndex !== -1)
841
+ { return this.outro.substr(lineIndex + 1); }
842
+ var lineStr = this.outro;
843
+ var chunk = this.lastChunk;
844
+ do {
845
+ if (chunk.outro.length > 0) {
846
+ lineIndex = chunk.outro.lastIndexOf(n);
847
+ if (lineIndex !== -1)
848
+ { return chunk.outro.substr(lineIndex + 1) + lineStr; }
849
+ lineStr = chunk.outro + lineStr;
850
+ }
851
+
852
+ if (chunk.content.length > 0) {
853
+ lineIndex = chunk.content.lastIndexOf(n);
854
+ if (lineIndex !== -1)
855
+ { return chunk.content.substr(lineIndex + 1) + lineStr; }
856
+ lineStr = chunk.content + lineStr;
857
+ }
858
+
859
+ if (chunk.intro.length > 0) {
860
+ lineIndex = chunk.intro.lastIndexOf(n);
861
+ if (lineIndex !== -1)
862
+ { return chunk.intro.substr(lineIndex + 1) + lineStr; }
863
+ lineStr = chunk.intro + lineStr;
864
+ }
865
+ } while (chunk = chunk.previous);
866
+ lineIndex = this.intro.lastIndexOf(n);
867
+ if (lineIndex !== -1)
868
+ { return this.intro.substr(lineIndex + 1) + lineStr; }
869
+ return this.intro + lineStr;
870
+ };
871
+
872
+ MagicString.prototype.slice = function slice (start, end) {
873
+ if ( start === void 0 ) start = 0;
874
+ if ( end === void 0 ) end = this.original.length;
875
+
876
+ while (start < 0) { start += this.original.length; }
877
+ while (end < 0) { end += this.original.length; }
878
+
879
+ var result = '';
880
+
881
+ // find start chunk
882
+ var chunk = this.firstChunk;
883
+ while (chunk && (chunk.start > start || chunk.end <= start)) {
884
+ // found end chunk before start
885
+ if (chunk.start < end && chunk.end >= end) {
886
+ return result;
887
+ }
888
+
889
+ chunk = chunk.next;
890
+ }
891
+
892
+ if (chunk && chunk.edited && chunk.start !== start)
893
+ { throw new Error(("Cannot use replaced character " + start + " as slice start anchor.")); }
894
+
895
+ var startChunk = chunk;
896
+ while (chunk) {
897
+ if (chunk.intro && (startChunk !== chunk || chunk.start === start)) {
898
+ result += chunk.intro;
899
+ }
900
+
901
+ var containsEnd = chunk.start < end && chunk.end >= end;
902
+ if (containsEnd && chunk.edited && chunk.end !== end)
903
+ { throw new Error(("Cannot use replaced character " + end + " as slice end anchor.")); }
904
+
905
+ var sliceStart = startChunk === chunk ? start - chunk.start : 0;
906
+ var sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;
907
+
908
+ result += chunk.content.slice(sliceStart, sliceEnd);
909
+
910
+ if (chunk.outro && (!containsEnd || chunk.end === end)) {
911
+ result += chunk.outro;
912
+ }
913
+
914
+ if (containsEnd) {
915
+ break;
916
+ }
917
+
918
+ chunk = chunk.next;
919
+ }
920
+
921
+ return result;
922
+ };
923
+
924
+ // TODO deprecate this? not really very useful
925
+ MagicString.prototype.snip = function snip (start, end) {
926
+ var clone = this.clone();
927
+ clone.remove(0, start);
928
+ clone.remove(end, clone.original.length);
929
+
930
+ return clone;
931
+ };
932
+
933
+ MagicString.prototype._split = function _split (index) {
934
+ if (this.byStart[index] || this.byEnd[index]) { return; }
935
+
936
+ var chunk = this.lastSearchedChunk;
937
+ var searchForward = index > chunk.end;
938
+
939
+ while (chunk) {
940
+ if (chunk.contains(index)) { return this._splitChunk(chunk, index); }
941
+
942
+ chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];
943
+ }
944
+ };
945
+
946
+ MagicString.prototype._splitChunk = function _splitChunk (chunk, index) {
947
+ if (chunk.edited && chunk.content.length) {
948
+ // zero-length edited chunks are a special case (overlapping replacements)
949
+ var loc = getLocator(this.original)(index);
950
+ throw new Error(
951
+ ("Cannot split a chunk that has already been edited (" + (loc.line) + ":" + (loc.column) + " – \"" + (chunk.original) + "\")")
952
+ );
953
+ }
954
+
955
+ var newChunk = chunk.split(index);
956
+
957
+ this.byEnd[index] = chunk;
958
+ this.byStart[index] = newChunk;
959
+ this.byEnd[newChunk.end] = newChunk;
960
+
961
+ if (chunk === this.lastChunk) { this.lastChunk = newChunk; }
962
+
963
+ this.lastSearchedChunk = chunk;
964
+ return true;
965
+ };
966
+
967
+ MagicString.prototype.toString = function toString () {
968
+ var str = this.intro;
969
+
970
+ var chunk = this.firstChunk;
971
+ while (chunk) {
972
+ str += chunk.toString();
973
+ chunk = chunk.next;
974
+ }
975
+
976
+ return str + this.outro;
977
+ };
978
+
979
+ MagicString.prototype.isEmpty = function isEmpty () {
980
+ var chunk = this.firstChunk;
981
+ do {
982
+ if (chunk.intro.length && chunk.intro.trim() ||
983
+ chunk.content.length && chunk.content.trim() ||
984
+ chunk.outro.length && chunk.outro.trim())
985
+ { return false; }
986
+ } while (chunk = chunk.next);
987
+ return true;
988
+ };
989
+
990
+ MagicString.prototype.length = function length () {
991
+ var chunk = this.firstChunk;
992
+ var length = 0;
993
+ do {
994
+ length += chunk.intro.length + chunk.content.length + chunk.outro.length;
995
+ } while (chunk = chunk.next);
996
+ return length;
997
+ };
998
+
999
+ MagicString.prototype.trimLines = function trimLines () {
1000
+ return this.trim('[\\r\\n]');
1001
+ };
1002
+
1003
+ MagicString.prototype.trim = function trim (charType) {
1004
+ return this.trimStart(charType).trimEnd(charType);
1005
+ };
1006
+
1007
+ MagicString.prototype.trimEndAborted = function trimEndAborted (charType) {
1008
+ var rx = new RegExp((charType || '\\s') + '+$');
1009
+
1010
+ this.outro = this.outro.replace(rx, '');
1011
+ if (this.outro.length) { return true; }
1012
+
1013
+ var chunk = this.lastChunk;
1014
+
1015
+ do {
1016
+ var end = chunk.end;
1017
+ var aborted = chunk.trimEnd(rx);
1018
+
1019
+ // if chunk was trimmed, we have a new lastChunk
1020
+ if (chunk.end !== end) {
1021
+ if (this.lastChunk === chunk) {
1022
+ this.lastChunk = chunk.next;
1023
+ }
1024
+
1025
+ this.byEnd[chunk.end] = chunk;
1026
+ this.byStart[chunk.next.start] = chunk.next;
1027
+ this.byEnd[chunk.next.end] = chunk.next;
1028
+ }
1029
+
1030
+ if (aborted) { return true; }
1031
+ chunk = chunk.previous;
1032
+ } while (chunk);
1033
+
1034
+ return false;
1035
+ };
1036
+
1037
+ MagicString.prototype.trimEnd = function trimEnd (charType) {
1038
+ this.trimEndAborted(charType);
1039
+ return this;
1040
+ };
1041
+ MagicString.prototype.trimStartAborted = function trimStartAborted (charType) {
1042
+ var rx = new RegExp('^' + (charType || '\\s') + '+');
1043
+
1044
+ this.intro = this.intro.replace(rx, '');
1045
+ if (this.intro.length) { return true; }
1046
+
1047
+ var chunk = this.firstChunk;
1048
+
1049
+ do {
1050
+ var end = chunk.end;
1051
+ var aborted = chunk.trimStart(rx);
1052
+
1053
+ if (chunk.end !== end) {
1054
+ // special case...
1055
+ if (chunk === this.lastChunk) { this.lastChunk = chunk.next; }
1056
+
1057
+ this.byEnd[chunk.end] = chunk;
1058
+ this.byStart[chunk.next.start] = chunk.next;
1059
+ this.byEnd[chunk.next.end] = chunk.next;
1060
+ }
1061
+
1062
+ if (aborted) { return true; }
1063
+ chunk = chunk.next;
1064
+ } while (chunk);
1065
+
1066
+ return false;
1067
+ };
1068
+
1069
+ MagicString.prototype.trimStart = function trimStart (charType) {
1070
+ this.trimStartAborted(charType);
1071
+ return this;
1072
+ };
1073
+
1074
+ var hasOwnProp = Object.prototype.hasOwnProperty;
1075
+
1076
+ var Bundle = function Bundle(options) {
1077
+ if ( options === void 0 ) options = {};
1078
+
1079
+ this.intro = options.intro || '';
1080
+ this.separator = options.separator !== undefined ? options.separator : '\n';
1081
+ this.sources = [];
1082
+ this.uniqueSources = [];
1083
+ this.uniqueSourceIndexByFilename = {};
1084
+ };
1085
+
1086
+ Bundle.prototype.addSource = function addSource (source) {
1087
+ if (source instanceof MagicString) {
1088
+ return this.addSource({
1089
+ content: source,
1090
+ filename: source.filename,
1091
+ separator: this.separator
1092
+ });
1093
+ }
1094
+
1095
+ if (!isObject(source) || !source.content) {
1096
+ throw new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`');
1097
+ }
1098
+
1099
+ ['filename', 'indentExclusionRanges', 'separator'].forEach(function (option) {
1100
+ if (!hasOwnProp.call(source, option)) { source[option] = source.content[option]; }
1101
+ });
1102
+
1103
+ if (source.separator === undefined) {
1104
+ // TODO there's a bunch of this sort of thing, needs cleaning up
1105
+ source.separator = this.separator;
1106
+ }
1107
+
1108
+ if (source.filename) {
1109
+ if (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {
1110
+ this.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;
1111
+ this.uniqueSources.push({ filename: source.filename, content: source.content.original });
1112
+ } else {
1113
+ var uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];
1114
+ if (source.content.original !== uniqueSource.content) {
1115
+ throw new Error(("Illegal source: same filename (" + (source.filename) + "), different contents"));
1116
+ }
1117
+ }
1118
+ }
1119
+
1120
+ this.sources.push(source);
1121
+ return this;
1122
+ };
1123
+
1124
+ Bundle.prototype.append = function append (str, options) {
1125
+ this.addSource({
1126
+ content: new MagicString(str),
1127
+ separator: (options && options.separator) || ''
1128
+ });
1129
+
1130
+ return this;
1131
+ };
1132
+
1133
+ Bundle.prototype.clone = function clone () {
1134
+ var bundle = new Bundle({
1135
+ intro: this.intro,
1136
+ separator: this.separator
1137
+ });
1138
+
1139
+ this.sources.forEach(function (source) {
1140
+ bundle.addSource({
1141
+ filename: source.filename,
1142
+ content: source.content.clone(),
1143
+ separator: source.separator
1144
+ });
1145
+ });
1146
+
1147
+ return bundle;
1148
+ };
1149
+
1150
+ Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) {
1151
+ var this$1$1 = this;
1152
+ if ( options === void 0 ) options = {};
1153
+
1154
+ var names = [];
1155
+ this.sources.forEach(function (source) {
1156
+ Object.keys(source.content.storedNames).forEach(function (name) {
1157
+ if (!~names.indexOf(name)) { names.push(name); }
1158
+ });
1159
+ });
1160
+
1161
+ var mappings = new Mappings(options.hires);
1162
+
1163
+ if (this.intro) {
1164
+ mappings.advance(this.intro);
1165
+ }
1166
+
1167
+ this.sources.forEach(function (source, i) {
1168
+ if (i > 0) {
1169
+ mappings.advance(this$1$1.separator);
1170
+ }
1171
+
1172
+ var sourceIndex = source.filename ? this$1$1.uniqueSourceIndexByFilename[source.filename] : -1;
1173
+ var magicString = source.content;
1174
+ var locate = getLocator(magicString.original);
1175
+
1176
+ if (magicString.intro) {
1177
+ mappings.advance(magicString.intro);
1178
+ }
1179
+
1180
+ magicString.firstChunk.eachNext(function (chunk) {
1181
+ var loc = locate(chunk.start);
1182
+
1183
+ if (chunk.intro.length) { mappings.advance(chunk.intro); }
1184
+
1185
+ if (source.filename) {
1186
+ if (chunk.edited) {
1187
+ mappings.addEdit(
1188
+ sourceIndex,
1189
+ chunk.content,
1190
+ loc,
1191
+ chunk.storeName ? names.indexOf(chunk.original) : -1
1192
+ );
1193
+ } else {
1194
+ mappings.addUneditedChunk(
1195
+ sourceIndex,
1196
+ chunk,
1197
+ magicString.original,
1198
+ loc,
1199
+ magicString.sourcemapLocations
1200
+ );
1201
+ }
1202
+ } else {
1203
+ mappings.advance(chunk.content);
1204
+ }
1205
+
1206
+ if (chunk.outro.length) { mappings.advance(chunk.outro); }
1207
+ });
1208
+
1209
+ if (magicString.outro) {
1210
+ mappings.advance(magicString.outro);
1211
+ }
1212
+ });
1213
+
1214
+ return {
1215
+ file: options.file ? options.file.split(/[/\\]/).pop() : null,
1216
+ sources: this.uniqueSources.map(function (source) {
1217
+ return options.file ? getRelativePath(options.file, source.filename) : source.filename;
1218
+ }),
1219
+ sourcesContent: this.uniqueSources.map(function (source) {
1220
+ return options.includeContent ? source.content : null;
1221
+ }),
1222
+ names: names,
1223
+ mappings: mappings.raw
1224
+ };
1225
+ };
1226
+
1227
+ Bundle.prototype.generateMap = function generateMap (options) {
1228
+ return new SourceMap(this.generateDecodedMap(options));
1229
+ };
1230
+
1231
+ Bundle.prototype.getIndentString = function getIndentString () {
1232
+ var indentStringCounts = {};
1233
+
1234
+ this.sources.forEach(function (source) {
1235
+ var indentStr = source.content.indentStr;
1236
+
1237
+ if (indentStr === null) { return; }
1238
+
1239
+ if (!indentStringCounts[indentStr]) { indentStringCounts[indentStr] = 0; }
1240
+ indentStringCounts[indentStr] += 1;
1241
+ });
1242
+
1243
+ return (
1244
+ Object.keys(indentStringCounts).sort(function (a, b) {
1245
+ return indentStringCounts[a] - indentStringCounts[b];
1246
+ })[0] || '\t'
1247
+ );
1248
+ };
1249
+
1250
+ Bundle.prototype.indent = function indent (indentStr) {
1251
+ var this$1$1 = this;
1252
+
1253
+ if (!arguments.length) {
1254
+ indentStr = this.getIndentString();
1255
+ }
1256
+
1257
+ if (indentStr === '') { return this; } // noop
1258
+
1259
+ var trailingNewline = !this.intro || this.intro.slice(-1) === '\n';
1260
+
1261
+ this.sources.forEach(function (source, i) {
1262
+ var separator = source.separator !== undefined ? source.separator : this$1$1.separator;
1263
+ var indentStart = trailingNewline || (i > 0 && /\r?\n$/.test(separator));
1264
+
1265
+ source.content.indent(indentStr, {
1266
+ exclude: source.indentExclusionRanges,
1267
+ indentStart: indentStart //: trailingNewline || /\r?\n$/.test( separator ) //true///\r?\n/.test( separator )
1268
+ });
1269
+
1270
+ trailingNewline = source.content.lastChar() === '\n';
1271
+ });
1272
+
1273
+ if (this.intro) {
1274
+ this.intro =
1275
+ indentStr +
1276
+ this.intro.replace(/^[^\n]/gm, function (match, index) {
1277
+ return index > 0 ? indentStr + match : match;
1278
+ });
1279
+ }
1280
+
1281
+ return this;
1282
+ };
1283
+
1284
+ Bundle.prototype.prepend = function prepend (str) {
1285
+ this.intro = str + this.intro;
1286
+ return this;
1287
+ };
1288
+
1289
+ Bundle.prototype.toString = function toString () {
1290
+ var this$1$1 = this;
1291
+
1292
+ var body = this.sources
1293
+ .map(function (source, i) {
1294
+ var separator = source.separator !== undefined ? source.separator : this$1$1.separator;
1295
+ var str = (i > 0 ? separator : '') + source.content.toString();
1296
+
1297
+ return str;
1298
+ })
1299
+ .join('');
1300
+
1301
+ return this.intro + body;
1302
+ };
1303
+
1304
+ Bundle.prototype.isEmpty = function isEmpty () {
1305
+ if (this.intro.length && this.intro.trim())
1306
+ { return false; }
1307
+ if (this.sources.some(function (source) { return !source.content.isEmpty(); }))
1308
+ { return false; }
1309
+ return true;
1310
+ };
1311
+
1312
+ Bundle.prototype.length = function length () {
1313
+ return this.sources.reduce(function (length, source) { return length + source.content.length(); }, this.intro.length);
1314
+ };
1315
+
1316
+ Bundle.prototype.trimLines = function trimLines () {
1317
+ return this.trim('[\\r\\n]');
1318
+ };
1319
+
1320
+ Bundle.prototype.trim = function trim (charType) {
1321
+ return this.trimStart(charType).trimEnd(charType);
1322
+ };
1323
+
1324
+ Bundle.prototype.trimStart = function trimStart (charType) {
1325
+ var rx = new RegExp('^' + (charType || '\\s') + '+');
1326
+ this.intro = this.intro.replace(rx, '');
1327
+
1328
+ if (!this.intro) {
1329
+ var source;
1330
+ var i = 0;
1331
+
1332
+ do {
1333
+ source = this.sources[i++];
1334
+ if (!source) {
1335
+ break;
1336
+ }
1337
+ } while (!source.content.trimStartAborted(charType));
1338
+ }
1339
+
1340
+ return this;
1341
+ };
1342
+
1343
+ Bundle.prototype.trimEnd = function trimEnd (charType) {
1344
+ var rx = new RegExp((charType || '\\s') + '+$');
1345
+
1346
+ var source;
1347
+ var i = this.sources.length - 1;
1348
+
1349
+ do {
1350
+ source = this.sources[i--];
1351
+ if (!source) {
1352
+ this.intro = this.intro.replace(rx, '');
1353
+ break;
1354
+ }
1355
+ } while (!source.content.trimEndAborted(charType));
1356
+
1357
+ return this;
1358
+ };
1359
+
1360
+ export { Bundle, SourceMap, MagicString as default };
1361
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2h1bmstbWFnaWMtc3RyaW5nLjZjOGY0YTEwLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc291cmNlbWFwLWNvZGVjQDEuNC44L25vZGVfbW9kdWxlcy9zb3VyY2VtYXAtY29kZWMvZGlzdC9zb3VyY2VtYXAtY29kZWMuZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vbWFnaWMtc3RyaW5nQDAuMjUuNy9ub2RlX21vZHVsZXMvbWFnaWMtc3RyaW5nL2Rpc3QvbWFnaWMtc3RyaW5nLmVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjaGFyVG9JbnRlZ2VyID0ge307XG52YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJUb0ludGVnZXJbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xufVxuZnVuY3Rpb24gZGVjb2RlKG1hcHBpbmdzKSB7XG4gICAgdmFyIGRlY29kZWQgPSBbXTtcbiAgICB2YXIgbGluZSA9IFtdO1xuICAgIHZhciBzZWdtZW50ID0gW1xuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgIF07XG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwLCBzaGlmdCA9IDAsIHZhbHVlID0gMDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbWFwcGluZ3MuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPT09IDQ0KSB7IC8vIFwiLFwiXG4gICAgICAgICAgICBzZWdtZW50aWZ5KGxpbmUsIHNlZ21lbnQsIGopO1xuICAgICAgICAgICAgaiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gNTkpIHsgLy8gXCI7XCJcbiAgICAgICAgICAgIHNlZ21lbnRpZnkobGluZSwgc2VnbWVudCwgaik7XG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgIGRlY29kZWQucHVzaChsaW5lKTtcbiAgICAgICAgICAgIGxpbmUgPSBbXTtcbiAgICAgICAgICAgIHNlZ21lbnRbMF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGludGVnZXIgPSBjaGFyVG9JbnRlZ2VyW2NdO1xuICAgICAgICAgICAgaWYgKGludGVnZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgKCcgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpICsgJyknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBoYXNDb250aW51YXRpb25CaXQgPSBpbnRlZ2VyICYgMzI7XG4gICAgICAgICAgICBpbnRlZ2VyICY9IDMxO1xuICAgICAgICAgICAgdmFsdWUgKz0gaW50ZWdlciA8PCBzaGlmdDtcbiAgICAgICAgICAgIGlmIChoYXNDb250aW51YXRpb25CaXQpIHtcbiAgICAgICAgICAgICAgICBzaGlmdCArPSA1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHNob3VsZE5lZ2F0ZSA9IHZhbHVlICYgMTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA+Pj49IDE7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZE5lZ2F0ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSAwID8gLTB4ODAwMDAwMDAgOiAtdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlZ21lbnRbal0gKz0gdmFsdWU7XG4gICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gc2hpZnQgPSAwOyAvLyByZXNldFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNlZ21lbnRpZnkobGluZSwgc2VnbWVudCwgaik7XG4gICAgZGVjb2RlZC5wdXNoKGxpbmUpO1xuICAgIHJldHVybiBkZWNvZGVkO1xufVxuZnVuY3Rpb24gc2VnbWVudGlmeShsaW5lLCBzZWdtZW50LCBqKSB7XG4gICAgLy8gVGhpcyBsb29rcyB1Z2x5LCBidXQgd2UncmUgY3JlYXRpbmcgc3BlY2lhbGl6ZWQgYXJyYXlzIHdpdGggYSBzcGVjaWZpY1xuICAgIC8vIGxlbmd0aC4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGNyZWF0aW5nIGEgbmV3IGFycmF5ICh3aGljaCB2OCBleHBhbmRzIHRvXG4gICAgLy8gYSBjYXBhY2l0eSBvZiAxNyBhZnRlciBwdXNoaW5nIHRoZSBmaXJzdCBpdGVtKSwgb3Igc2xpY2luZyBvdXQgYSBzdWJhcnJheVxuICAgIC8vICh3aGljaCBpcyBzbG93KS4gTGVuZ3RoIDQgaXMgYXNzdW1lZCB0byBiZSB0aGUgbW9zdCBmcmVxdWVudCwgZm9sbG93ZWQgYnlcbiAgICAvLyBsZW5ndGggNSAoc2luY2Ugbm90IGV2ZXJ5dGhpbmcgd2lsbCBoYXZlIGFuIGFzc29jaWF0ZWQgbmFtZSksIGZvbGxvd2VkIGJ5XG4gICAgLy8gbGVuZ3RoIDEgKGl0J3MgcHJvYmFibHkgcmFyZSBmb3IgYSBzb3VyY2Ugc3Vic3RyaW5nIHRvIG5vdCBoYXZlIGFuXG4gICAgLy8gYXNzb2NpYXRlZCBzZWdtZW50IGRhdGEpLlxuICAgIGlmIChqID09PSA0KVxuICAgICAgICBsaW5lLnB1c2goW3NlZ21lbnRbMF0sIHNlZ21lbnRbMV0sIHNlZ21lbnRbMl0sIHNlZ21lbnRbM11dKTtcbiAgICBlbHNlIGlmIChqID09PSA1KVxuICAgICAgICBsaW5lLnB1c2goW3NlZ21lbnRbMF0sIHNlZ21lbnRbMV0sIHNlZ21lbnRbMl0sIHNlZ21lbnRbM10sIHNlZ21lbnRbNF1dKTtcbiAgICBlbHNlIGlmIChqID09PSAxKVxuICAgICAgICBsaW5lLnB1c2goW3NlZ21lbnRbMF1dKTtcbn1cbmZ1bmN0aW9uIGVuY29kZShkZWNvZGVkKSB7XG4gICAgdmFyIHNvdXJjZUZpbGVJbmRleCA9IDA7IC8vIHNlY29uZCBmaWVsZFxuICAgIHZhciBzb3VyY2VDb2RlTGluZSA9IDA7IC8vIHRoaXJkIGZpZWxkXG4gICAgdmFyIHNvdXJjZUNvZGVDb2x1bW4gPSAwOyAvLyBmb3VydGggZmllbGRcbiAgICB2YXIgbmFtZUluZGV4ID0gMDsgLy8gZmlmdGggZmllbGRcbiAgICB2YXIgbWFwcGluZ3MgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBkZWNvZGVkW2ldO1xuICAgICAgICBpZiAoaSA+IDApXG4gICAgICAgICAgICBtYXBwaW5ncyArPSAnOyc7XG4gICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB2YXIgZ2VuZXJhdGVkQ29kZUNvbHVtbiA9IDA7IC8vIGZpcnN0IGZpZWxkXG4gICAgICAgIHZhciBsaW5lTWFwcGluZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsaW5lXzEgPSBsaW5lOyBfaSA8IGxpbmVfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBzZWdtZW50ID0gbGluZV8xW19pXTtcbiAgICAgICAgICAgIHZhciBzZWdtZW50TWFwcGluZ3MgPSBlbmNvZGVJbnRlZ2VyKHNlZ21lbnRbMF0gLSBnZW5lcmF0ZWRDb2RlQ29sdW1uKTtcbiAgICAgICAgICAgIGdlbmVyYXRlZENvZGVDb2x1bW4gPSBzZWdtZW50WzBdO1xuICAgICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHNlZ21lbnRNYXBwaW5ncyArPVxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVJbnRlZ2VyKHNlZ21lbnRbMV0gLSBzb3VyY2VGaWxlSW5kZXgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZUludGVnZXIoc2VnbWVudFsyXSAtIHNvdXJjZUNvZGVMaW5lKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVJbnRlZ2VyKHNlZ21lbnRbM10gLSBzb3VyY2VDb2RlQ29sdW1uKTtcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWxlSW5kZXggPSBzZWdtZW50WzFdO1xuICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVMaW5lID0gc2VnbWVudFsyXTtcbiAgICAgICAgICAgICAgICBzb3VyY2VDb2RlQ29sdW1uID0gc2VnbWVudFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gNSkge1xuICAgICAgICAgICAgICAgIHNlZ21lbnRNYXBwaW5ncyArPSBlbmNvZGVJbnRlZ2VyKHNlZ21lbnRbNF0gLSBuYW1lSW5kZXgpO1xuICAgICAgICAgICAgICAgIG5hbWVJbmRleCA9IHNlZ21lbnRbNF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lTWFwcGluZ3MucHVzaChzZWdtZW50TWFwcGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIG1hcHBpbmdzICs9IGxpbmVNYXBwaW5ncy5qb2luKCcsJyk7XG4gICAgfVxuICAgIHJldHVybiBtYXBwaW5ncztcbn1cbmZ1bmN0aW9uIGVuY29kZUludGVnZXIobnVtKSB7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIG51bSA9IG51bSA8IDAgPyAoLW51bSA8PCAxKSB8IDEgOiBudW0gPDwgMTtcbiAgICBkbyB7XG4gICAgICAgIHZhciBjbGFtcGVkID0gbnVtICYgMzE7XG4gICAgICAgIG51bSA+Pj49IDU7XG4gICAgICAgIGlmIChudW0gPiAwKSB7XG4gICAgICAgICAgICBjbGFtcGVkIHw9IDMyO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSBjaGFyc1tjbGFtcGVkXTtcbiAgICB9IHdoaWxlIChudW0gPiAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgeyBkZWNvZGUsIGVuY29kZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c291cmNlbWFwLWNvZGVjLmVzLmpzLm1hcFxuIiwiaW1wb3J0IHsgZW5jb2RlIH0gZnJvbSAnc291cmNlbWFwLWNvZGVjJztcblxudmFyIEJpdFNldCA9IGZ1bmN0aW9uIEJpdFNldChhcmcpIHtcblx0dGhpcy5iaXRzID0gYXJnIGluc3RhbmNlb2YgQml0U2V0ID8gYXJnLmJpdHMuc2xpY2UoKSA6IFtdO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKG4pIHtcblx0dGhpcy5iaXRzW24gPj4gNV0gfD0gMSA8PCAobiAmIDMxKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChuKSB7XG5cdHJldHVybiAhISh0aGlzLmJpdHNbbiA+PiA1XSAmICgxIDw8IChuICYgMzEpKSk7XG59O1xuXG52YXIgQ2h1bmsgPSBmdW5jdGlvbiBDaHVuayhzdGFydCwgZW5kLCBjb250ZW50KSB7XG5cdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0dGhpcy5lbmQgPSBlbmQ7XG5cdHRoaXMub3JpZ2luYWwgPSBjb250ZW50O1xuXG5cdHRoaXMuaW50cm8gPSAnJztcblx0dGhpcy5vdXRybyA9ICcnO1xuXG5cdHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG5cdHRoaXMuc3RvcmVOYW1lID0gZmFsc2U7XG5cdHRoaXMuZWRpdGVkID0gZmFsc2U7XG5cblx0Ly8gd2UgbWFrZSB0aGVzZSBub24tZW51bWVyYWJsZSwgZm9yIHNhbml0eSB3aGlsZSBkZWJ1Z2dpbmdcblx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdHByZXZpb3VzOiB7IHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogbnVsbCB9LFxuXHRcdG5leHQ6ICAgICB7IHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogbnVsbCB9XG5cdH0pO1xufTtcblxuQ2h1bmsucHJvdG90eXBlLmFwcGVuZExlZnQgPSBmdW5jdGlvbiBhcHBlbmRMZWZ0IChjb250ZW50KSB7XG5cdHRoaXMub3V0cm8gKz0gY29udGVudDtcbn07XG5cbkNodW5rLnByb3RvdHlwZS5hcHBlbmRSaWdodCA9IGZ1bmN0aW9uIGFwcGVuZFJpZ2h0IChjb250ZW50KSB7XG5cdHRoaXMuaW50cm8gPSB0aGlzLmludHJvICsgY29udGVudDtcbn07XG5cbkNodW5rLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcblx0dmFyIGNodW5rID0gbmV3IENodW5rKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLm9yaWdpbmFsKTtcblxuXHRjaHVuay5pbnRybyA9IHRoaXMuaW50cm87XG5cdGNodW5rLm91dHJvID0gdGhpcy5vdXRybztcblx0Y2h1bmsuY29udGVudCA9IHRoaXMuY29udGVudDtcblx0Y2h1bmsuc3RvcmVOYW1lID0gdGhpcy5zdG9yZU5hbWU7XG5cdGNodW5rLmVkaXRlZCA9IHRoaXMuZWRpdGVkO1xuXG5cdHJldHVybiBjaHVuaztcbn07XG5cbkNodW5rLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zIChpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5zdGFydCA8IGluZGV4ICYmIGluZGV4IDwgdGhpcy5lbmQ7XG59O1xuXG5DaHVuay5wcm90b3R5cGUuZWFjaE5leHQgPSBmdW5jdGlvbiBlYWNoTmV4dCAoZm4pIHtcblx0dmFyIGNodW5rID0gdGhpcztcblx0d2hpbGUgKGNodW5rKSB7XG5cdFx0Zm4oY2h1bmspO1xuXHRcdGNodW5rID0gY2h1bmsubmV4dDtcblx0fVxufTtcblxuQ2h1bmsucHJvdG90eXBlLmVhY2hQcmV2aW91cyA9IGZ1bmN0aW9uIGVhY2hQcmV2aW91cyAoZm4pIHtcblx0dmFyIGNodW5rID0gdGhpcztcblx0d2hpbGUgKGNodW5rKSB7XG5cdFx0Zm4oY2h1bmspO1xuXHRcdGNodW5rID0gY2h1bmsucHJldmlvdXM7XG5cdH1cbn07XG5cbkNodW5rLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24gZWRpdCAoY29udGVudCwgc3RvcmVOYW1lLCBjb250ZW50T25seSkge1xuXHR0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuXHRpZiAoIWNvbnRlbnRPbmx5KSB7XG5cdFx0dGhpcy5pbnRybyA9ICcnO1xuXHRcdHRoaXMub3V0cm8gPSAnJztcblx0fVxuXHR0aGlzLnN0b3JlTmFtZSA9IHN0b3JlTmFtZTtcblxuXHR0aGlzLmVkaXRlZCA9IHRydWU7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5DaHVuay5wcm90b3R5cGUucHJlcGVuZExlZnQgPSBmdW5jdGlvbiBwcmVwZW5kTGVmdCAoY29udGVudCkge1xuXHR0aGlzLm91dHJvID0gY29udGVudCArIHRoaXMub3V0cm87XG59O1xuXG5DaHVuay5wcm90b3R5cGUucHJlcGVuZFJpZ2h0ID0gZnVuY3Rpb24gcHJlcGVuZFJpZ2h0IChjb250ZW50KSB7XG5cdHRoaXMuaW50cm8gPSBjb250ZW50ICsgdGhpcy5pbnRybztcbn07XG5cbkNodW5rLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbmRleCkge1xuXHR2YXIgc2xpY2VJbmRleCA9IGluZGV4IC0gdGhpcy5zdGFydDtcblxuXHR2YXIgb3JpZ2luYWxCZWZvcmUgPSB0aGlzLm9yaWdpbmFsLnNsaWNlKDAsIHNsaWNlSW5kZXgpO1xuXHR2YXIgb3JpZ2luYWxBZnRlciA9IHRoaXMub3JpZ2luYWwuc2xpY2Uoc2xpY2VJbmRleCk7XG5cblx0dGhpcy5vcmlnaW5hbCA9IG9yaWdpbmFsQmVmb3JlO1xuXG5cdHZhciBuZXdDaHVuayA9IG5ldyBDaHVuayhpbmRleCwgdGhpcy5lbmQsIG9yaWdpbmFsQWZ0ZXIpO1xuXHRuZXdDaHVuay5vdXRybyA9IHRoaXMub3V0cm87XG5cdHRoaXMub3V0cm8gPSAnJztcblxuXHR0aGlzLmVuZCA9IGluZGV4O1xuXG5cdGlmICh0aGlzLmVkaXRlZCkge1xuXHRcdC8vIFRPRE8gaXMgdGhpcyBibG9jayBuZWNlc3Nhcnk/Li4uXG5cdFx0bmV3Q2h1bmsuZWRpdCgnJywgZmFsc2UpO1xuXHRcdHRoaXMuY29udGVudCA9ICcnO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY29udGVudCA9IG9yaWdpbmFsQmVmb3JlO1xuXHR9XG5cblx0bmV3Q2h1bmsubmV4dCA9IHRoaXMubmV4dDtcblx0aWYgKG5ld0NodW5rLm5leHQpIHsgbmV3Q2h1bmsubmV4dC5wcmV2aW91cyA9IG5ld0NodW5rOyB9XG5cdG5ld0NodW5rLnByZXZpb3VzID0gdGhpcztcblx0dGhpcy5uZXh0ID0gbmV3Q2h1bms7XG5cblx0cmV0dXJuIG5ld0NodW5rO1xufTtcblxuQ2h1bmsucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuXHRyZXR1cm4gdGhpcy5pbnRybyArIHRoaXMuY29udGVudCArIHRoaXMub3V0cm87XG59O1xuXG5DaHVuay5wcm90b3R5cGUudHJpbUVuZCA9IGZ1bmN0aW9uIHRyaW1FbmQgKHJ4KSB7XG5cdHRoaXMub3V0cm8gPSB0aGlzLm91dHJvLnJlcGxhY2UocngsICcnKTtcblx0aWYgKHRoaXMub3V0cm8ubGVuZ3RoKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIHRyaW1tZWQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZShyeCwgJycpO1xuXG5cdGlmICh0cmltbWVkLmxlbmd0aCkge1xuXHRcdGlmICh0cmltbWVkICE9PSB0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuc3BsaXQodGhpcy5zdGFydCArIHRyaW1tZWQubGVuZ3RoKS5lZGl0KCcnLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHR9IGVsc2Uge1xuXHRcdHRoaXMuZWRpdCgnJywgdW5kZWZpbmVkLCB0cnVlKTtcblxuXHRcdHRoaXMuaW50cm8gPSB0aGlzLmludHJvLnJlcGxhY2UocngsICcnKTtcblx0XHRpZiAodGhpcy5pbnRyby5sZW5ndGgpIHsgcmV0dXJuIHRydWU7IH1cblx0fVxufTtcblxuQ2h1bmsucHJvdG90eXBlLnRyaW1TdGFydCA9IGZ1bmN0aW9uIHRyaW1TdGFydCAocngpIHtcblx0dGhpcy5pbnRybyA9IHRoaXMuaW50cm8ucmVwbGFjZShyeCwgJycpO1xuXHRpZiAodGhpcy5pbnRyby5sZW5ndGgpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgdHJpbW1lZCA9IHRoaXMuY29udGVudC5yZXBsYWNlKHJ4LCAnJyk7XG5cblx0aWYgKHRyaW1tZWQubGVuZ3RoKSB7XG5cdFx0aWYgKHRyaW1tZWQgIT09IHRoaXMuY29udGVudCkge1xuXHRcdFx0dGhpcy5zcGxpdCh0aGlzLmVuZCAtIHRyaW1tZWQubGVuZ3RoKTtcblx0XHRcdHRoaXMuZWRpdCgnJywgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fSBlbHNlIHtcblx0XHR0aGlzLmVkaXQoJycsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cblx0XHR0aGlzLm91dHJvID0gdGhpcy5vdXRyby5yZXBsYWNlKHJ4LCAnJyk7XG5cdFx0aWYgKHRoaXMub3V0cm8ubGVuZ3RoKSB7IHJldHVybiB0cnVlOyB9XG5cdH1cbn07XG5cbnZhciBidG9hID0gZnVuY3Rpb24gKCkge1xuXHR0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVudmlyb25tZW50OiBgd2luZG93LmJ0b2FgIG9yIGBCdWZmZXJgIHNob3VsZCBiZSBzdXBwb3J0ZWQuJyk7XG59O1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRidG9hID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gd2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpKTsgfTtcbn0gZWxzZSBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRidG9hID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7IH07XG59XG5cbnZhciBTb3VyY2VNYXAgPSBmdW5jdGlvbiBTb3VyY2VNYXAocHJvcGVydGllcykge1xuXHR0aGlzLnZlcnNpb24gPSAzO1xuXHR0aGlzLmZpbGUgPSBwcm9wZXJ0aWVzLmZpbGU7XG5cdHRoaXMuc291cmNlcyA9IHByb3BlcnRpZXMuc291cmNlcztcblx0dGhpcy5zb3VyY2VzQ29udGVudCA9IHByb3BlcnRpZXMuc291cmNlc0NvbnRlbnQ7XG5cdHRoaXMubmFtZXMgPSBwcm9wZXJ0aWVzLm5hbWVzO1xuXHR0aGlzLm1hcHBpbmdzID0gZW5jb2RlKHByb3BlcnRpZXMubWFwcGluZ3MpO1xufTtcblxuU291cmNlTWFwLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xufTtcblxuU291cmNlTWFwLnByb3RvdHlwZS50b1VybCA9IGZ1bmN0aW9uIHRvVXJsICgpIHtcblx0cmV0dXJuICdkYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJ0b2EodGhpcy50b1N0cmluZygpKTtcbn07XG5cbmZ1bmN0aW9uIGd1ZXNzSW5kZW50KGNvZGUpIHtcblx0dmFyIGxpbmVzID0gY29kZS5zcGxpdCgnXFxuJyk7XG5cblx0dmFyIHRhYmJlZCA9IGxpbmVzLmZpbHRlcihmdW5jdGlvbiAobGluZSkgeyByZXR1cm4gL15cXHQrLy50ZXN0KGxpbmUpOyB9KTtcblx0dmFyIHNwYWNlZCA9IGxpbmVzLmZpbHRlcihmdW5jdGlvbiAobGluZSkgeyByZXR1cm4gL14gezIsfS8udGVzdChsaW5lKTsgfSk7XG5cblx0aWYgKHRhYmJlZC5sZW5ndGggPT09IDAgJiYgc3BhY2VkLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gTW9yZSBsaW5lcyB0YWJiZWQgdGhhbiBzcGFjZWQ/IEFzc3VtZSB0YWJzLCBhbmRcblx0Ly8gZGVmYXVsdCB0byB0YWJzIGluIHRoZSBjYXNlIG9mIGEgdGllIChvciBub3RoaW5nXG5cdC8vIHRvIGdvIG9uKVxuXHRpZiAodGFiYmVkLmxlbmd0aCA+PSBzcGFjZWQubGVuZ3RoKSB7XG5cdFx0cmV0dXJuICdcXHQnO1xuXHR9XG5cblx0Ly8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGd1ZXNzIHRoZSBtdWx0aXBsZVxuXHR2YXIgbWluID0gc3BhY2VkLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXMsIGN1cnJlbnQpIHtcblx0XHR2YXIgbnVtU3BhY2VzID0gL14gKy8uZXhlYyhjdXJyZW50KVswXS5sZW5ndGg7XG5cdFx0cmV0dXJuIE1hdGgubWluKG51bVNwYWNlcywgcHJldmlvdXMpO1xuXHR9LCBJbmZpbml0eSk7XG5cblx0cmV0dXJuIG5ldyBBcnJheShtaW4gKyAxKS5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIGdldFJlbGF0aXZlUGF0aChmcm9tLCB0bykge1xuXHR2YXIgZnJvbVBhcnRzID0gZnJvbS5zcGxpdCgvWy9cXFxcXS8pO1xuXHR2YXIgdG9QYXJ0cyA9IHRvLnNwbGl0KC9bL1xcXFxdLyk7XG5cblx0ZnJvbVBhcnRzLnBvcCgpOyAvLyBnZXQgZGlybmFtZVxuXG5cdHdoaWxlIChmcm9tUGFydHNbMF0gPT09IHRvUGFydHNbMF0pIHtcblx0XHRmcm9tUGFydHMuc2hpZnQoKTtcblx0XHR0b1BhcnRzLnNoaWZ0KCk7XG5cdH1cblxuXHRpZiAoZnJvbVBhcnRzLmxlbmd0aCkge1xuXHRcdHZhciBpID0gZnJvbVBhcnRzLmxlbmd0aDtcblx0XHR3aGlsZSAoaS0tKSB7IGZyb21QYXJ0c1tpXSA9ICcuLic7IH1cblx0fVxuXG5cdHJldHVybiBmcm9tUGFydHMuY29uY2F0KHRvUGFydHMpLmpvaW4oJy8nKTtcbn1cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gaXNPYmplY3QodGhpbmcpIHtcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodGhpbmcpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYXRvcihzb3VyY2UpIHtcblx0dmFyIG9yaWdpbmFsTGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXHR2YXIgbGluZU9mZnNldHMgPSBbXTtcblxuXHRmb3IgKHZhciBpID0gMCwgcG9zID0gMDsgaSA8IG9yaWdpbmFsTGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRsaW5lT2Zmc2V0cy5wdXNoKHBvcyk7XG5cdFx0cG9zICs9IG9yaWdpbmFsTGluZXNbaV0ubGVuZ3RoICsgMTtcblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbiBsb2NhdGUoaW5kZXgpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIGogPSBsaW5lT2Zmc2V0cy5sZW5ndGg7XG5cdFx0d2hpbGUgKGkgPCBqKSB7XG5cdFx0XHR2YXIgbSA9IChpICsgaikgPj4gMTtcblx0XHRcdGlmIChpbmRleCA8IGxpbmVPZmZzZXRzW21dKSB7XG5cdFx0XHRcdGogPSBtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aSA9IG0gKyAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YXIgbGluZSA9IGkgLSAxO1xuXHRcdHZhciBjb2x1bW4gPSBpbmRleCAtIGxpbmVPZmZzZXRzW2xpbmVdO1xuXHRcdHJldHVybiB7IGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uIH07XG5cdH07XG59XG5cbnZhciBNYXBwaW5ncyA9IGZ1bmN0aW9uIE1hcHBpbmdzKGhpcmVzKSB7XG5cdHRoaXMuaGlyZXMgPSBoaXJlcztcblx0dGhpcy5nZW5lcmF0ZWRDb2RlTGluZSA9IDA7XG5cdHRoaXMuZ2VuZXJhdGVkQ29kZUNvbHVtbiA9IDA7XG5cdHRoaXMucmF3ID0gW107XG5cdHRoaXMucmF3U2VnbWVudHMgPSB0aGlzLnJhd1t0aGlzLmdlbmVyYXRlZENvZGVMaW5lXSA9IFtdO1xuXHR0aGlzLnBlbmRpbmcgPSBudWxsO1xufTtcblxuTWFwcGluZ3MucHJvdG90eXBlLmFkZEVkaXQgPSBmdW5jdGlvbiBhZGRFZGl0IChzb3VyY2VJbmRleCwgY29udGVudCwgbG9jLCBuYW1lSW5kZXgpIHtcblx0aWYgKGNvbnRlbnQubGVuZ3RoKSB7XG5cdFx0dmFyIHNlZ21lbnQgPSBbdGhpcy5nZW5lcmF0ZWRDb2RlQ29sdW1uLCBzb3VyY2VJbmRleCwgbG9jLmxpbmUsIGxvYy5jb2x1bW5dO1xuXHRcdGlmIChuYW1lSW5kZXggPj0gMCkge1xuXHRcdFx0c2VnbWVudC5wdXNoKG5hbWVJbmRleCk7XG5cdFx0fVxuXHRcdHRoaXMucmF3U2VnbWVudHMucHVzaChzZWdtZW50KTtcblx0fSBlbHNlIGlmICh0aGlzLnBlbmRpbmcpIHtcblx0XHR0aGlzLnJhd1NlZ21lbnRzLnB1c2godGhpcy5wZW5kaW5nKTtcblx0fVxuXG5cdHRoaXMuYWR2YW5jZShjb250ZW50KTtcblx0dGhpcy5wZW5kaW5nID0gbnVsbDtcbn07XG5cbk1hcHBpbmdzLnByb3RvdHlwZS5hZGRVbmVkaXRlZENodW5rID0gZnVuY3Rpb24gYWRkVW5lZGl0ZWRDaHVuayAoc291cmNlSW5kZXgsIGNodW5rLCBvcmlnaW5hbCwgbG9jLCBzb3VyY2VtYXBMb2NhdGlvbnMpIHtcblx0dmFyIG9yaWdpbmFsQ2hhckluZGV4ID0gY2h1bmsuc3RhcnQ7XG5cdHZhciBmaXJzdCA9IHRydWU7XG5cblx0d2hpbGUgKG9yaWdpbmFsQ2hhckluZGV4IDwgY2h1bmsuZW5kKSB7XG5cdFx0aWYgKHRoaXMuaGlyZXMgfHwgZmlyc3QgfHwgc291cmNlbWFwTG9jYXRpb25zLmhhcyhvcmlnaW5hbENoYXJJbmRleCkpIHtcblx0XHRcdHRoaXMucmF3U2VnbWVudHMucHVzaChbdGhpcy5nZW5lcmF0ZWRDb2RlQ29sdW1uLCBzb3VyY2VJbmRleCwgbG9jLmxpbmUsIGxvYy5jb2x1bW5dKTtcblx0XHR9XG5cblx0XHRpZiAob3JpZ2luYWxbb3JpZ2luYWxDaGFySW5kZXhdID09PSAnXFxuJykge1xuXHRcdFx0bG9jLmxpbmUgKz0gMTtcblx0XHRcdGxvYy5jb2x1bW4gPSAwO1xuXHRcdFx0dGhpcy5nZW5lcmF0ZWRDb2RlTGluZSArPSAxO1xuXHRcdFx0dGhpcy5yYXdbdGhpcy5nZW5lcmF0ZWRDb2RlTGluZV0gPSB0aGlzLnJhd1NlZ21lbnRzID0gW107XG5cdFx0XHR0aGlzLmdlbmVyYXRlZENvZGVDb2x1bW4gPSAwO1xuXHRcdFx0Zmlyc3QgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2MuY29sdW1uICs9IDE7XG5cdFx0XHR0aGlzLmdlbmVyYXRlZENvZGVDb2x1bW4gKz0gMTtcblx0XHRcdGZpcnN0ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0b3JpZ2luYWxDaGFySW5kZXggKz0gMTtcblx0fVxuXG5cdHRoaXMucGVuZGluZyA9IG51bGw7XG59O1xuXG5NYXBwaW5ncy5wcm90b3R5cGUuYWR2YW5jZSA9IGZ1bmN0aW9uIGFkdmFuY2UgKHN0cikge1xuXHRpZiAoIXN0cikgeyByZXR1cm47IH1cblxuXHR2YXIgbGluZXMgPSBzdHIuc3BsaXQoJ1xcbicpO1xuXG5cdGlmIChsaW5lcy5sZW5ndGggPiAxKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdHRoaXMuZ2VuZXJhdGVkQ29kZUxpbmUrKztcblx0XHRcdHRoaXMucmF3W3RoaXMuZ2VuZXJhdGVkQ29kZUxpbmVdID0gdGhpcy5yYXdTZWdtZW50cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLmdlbmVyYXRlZENvZGVDb2x1bW4gPSAwO1xuXHR9XG5cblx0dGhpcy5nZW5lcmF0ZWRDb2RlQ29sdW1uICs9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aDtcbn07XG5cbnZhciBuID0gJ1xcbic7XG5cbnZhciB3YXJuZWQgPSB7XG5cdGluc2VydExlZnQ6IGZhbHNlLFxuXHRpbnNlcnRSaWdodDogZmFsc2UsXG5cdHN0b3JlTmFtZTogZmFsc2Vcbn07XG5cbnZhciBNYWdpY1N0cmluZyA9IGZ1bmN0aW9uIE1hZ2ljU3RyaW5nKHN0cmluZywgb3B0aW9ucykge1xuXHRpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuXHR2YXIgY2h1bmsgPSBuZXcgQ2h1bmsoMCwgc3RyaW5nLmxlbmd0aCwgc3RyaW5nKTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0b3JpZ2luYWw6ICAgICAgICAgICAgICB7IHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogc3RyaW5nIH0sXG5cdFx0b3V0cm86ICAgICAgICAgICAgICAgICB7IHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogJycgfSxcblx0XHRpbnRybzogICAgICAgICAgICAgICAgIHsgd3JpdGFibGU6IHRydWUsIHZhbHVlOiAnJyB9LFxuXHRcdGZpcnN0Q2h1bms6ICAgICAgICAgICAgeyB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IGNodW5rIH0sXG5cdFx0bGFzdENodW5rOiAgICAgICAgICAgICB7IHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogY2h1bmsgfSxcblx0XHRsYXN0U2VhcmNoZWRDaHVuazogICAgIHsgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBjaHVuayB9LFxuXHRcdGJ5U3RhcnQ6ICAgICAgICAgICAgICAgeyB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHt9IH0sXG5cdFx0YnlFbmQ6ICAgICAgICAgICAgICAgICB7IHdyaXRhYmxlOiB0cnVlLCB2YWx1ZToge30gfSxcblx0XHRmaWxlbmFtZTogICAgICAgICAgICAgIHsgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBvcHRpb25zLmZpbGVuYW1lIH0sXG5cdFx0aW5kZW50RXhjbHVzaW9uUmFuZ2VzOiB7IHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogb3B0aW9ucy5pbmRlbnRFeGNsdXNpb25SYW5nZXMgfSxcblx0XHRzb3VyY2VtYXBMb2NhdGlvbnM6ICAgIHsgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBuZXcgQml0U2V0KCkgfSxcblx0XHRzdG9yZWROYW1lczogICAgICAgICAgIHsgd3JpdGFibGU6IHRydWUsIHZhbHVlOiB7fSB9LFxuXHRcdGluZGVudFN0cjogICAgICAgICAgICAgeyB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IGd1ZXNzSW5kZW50KHN0cmluZykgfVxuXHR9KTtcblxuXHR0aGlzLmJ5U3RhcnRbMF0gPSBjaHVuaztcblx0dGhpcy5ieUVuZFtzdHJpbmcubGVuZ3RoXSA9IGNodW5rO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmFkZFNvdXJjZW1hcExvY2F0aW9uID0gZnVuY3Rpb24gYWRkU291cmNlbWFwTG9jYXRpb24gKGNoYXIpIHtcblx0dGhpcy5zb3VyY2VtYXBMb2NhdGlvbnMuYWRkKGNoYXIpO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCAoY29udGVudCkge1xuXHRpZiAodHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ291dHJvIGNvbnRlbnQgbXVzdCBiZSBhIHN0cmluZycpOyB9XG5cblx0dGhpcy5vdXRybyArPSBjb250ZW50O1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS5hcHBlbmRMZWZ0ID0gZnVuY3Rpb24gYXBwZW5kTGVmdCAoaW5kZXgsIGNvbnRlbnQpIHtcblx0aWYgKHR5cGVvZiBjb250ZW50ICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnNlcnRlZCBjb250ZW50IG11c3QgYmUgYSBzdHJpbmcnKTsgfVxuXG5cdHRoaXMuX3NwbGl0KGluZGV4KTtcblxuXHR2YXIgY2h1bmsgPSB0aGlzLmJ5RW5kW2luZGV4XTtcblxuXHRpZiAoY2h1bmspIHtcblx0XHRjaHVuay5hcHBlbmRMZWZ0KGNvbnRlbnQpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuaW50cm8gKz0gY29udGVudDtcblx0fVxuXHRyZXR1cm4gdGhpcztcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS5hcHBlbmRSaWdodCA9IGZ1bmN0aW9uIGFwcGVuZFJpZ2h0IChpbmRleCwgY29udGVudCkge1xuXHRpZiAodHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ2luc2VydGVkIGNvbnRlbnQgbXVzdCBiZSBhIHN0cmluZycpOyB9XG5cblx0dGhpcy5fc3BsaXQoaW5kZXgpO1xuXG5cdHZhciBjaHVuayA9IHRoaXMuYnlTdGFydFtpbmRleF07XG5cblx0aWYgKGNodW5rKSB7XG5cdFx0Y2h1bmsuYXBwZW5kUmlnaHQoY29udGVudCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5vdXRybyArPSBjb250ZW50O1xuXHR9XG5cdHJldHVybiB0aGlzO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuXHR2YXIgY2xvbmVkID0gbmV3IE1hZ2ljU3RyaW5nKHRoaXMub3JpZ2luYWwsIHsgZmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUgfSk7XG5cblx0dmFyIG9yaWdpbmFsQ2h1bmsgPSB0aGlzLmZpcnN0Q2h1bms7XG5cdHZhciBjbG9uZWRDaHVuayA9IChjbG9uZWQuZmlyc3RDaHVuayA9IGNsb25lZC5sYXN0U2VhcmNoZWRDaHVuayA9IG9yaWdpbmFsQ2h1bmsuY2xvbmUoKSk7XG5cblx0d2hpbGUgKG9yaWdpbmFsQ2h1bmspIHtcblx0XHRjbG9uZWQuYnlTdGFydFtjbG9uZWRDaHVuay5zdGFydF0gPSBjbG9uZWRDaHVuaztcblx0XHRjbG9uZWQuYnlFbmRbY2xvbmVkQ2h1bmsuZW5kXSA9IGNsb25lZENodW5rO1xuXG5cdFx0dmFyIG5leHRPcmlnaW5hbENodW5rID0gb3JpZ2luYWxDaHVuay5uZXh0O1xuXHRcdHZhciBuZXh0Q2xvbmVkQ2h1bmsgPSBuZXh0T3JpZ2luYWxDaHVuayAmJiBuZXh0T3JpZ2luYWxDaHVuay5jbG9uZSgpO1xuXG5cdFx0aWYgKG5leHRDbG9uZWRDaHVuaykge1xuXHRcdFx0Y2xvbmVkQ2h1bmsubmV4dCA9IG5leHRDbG9uZWRDaHVuaztcblx0XHRcdG5leHRDbG9uZWRDaHVuay5wcmV2aW91cyA9IGNsb25lZENodW5rO1xuXG5cdFx0XHRjbG9uZWRDaHVuayA9IG5leHRDbG9uZWRDaHVuaztcblx0XHR9XG5cblx0XHRvcmlnaW5hbENodW5rID0gbmV4dE9yaWdpbmFsQ2h1bms7XG5cdH1cblxuXHRjbG9uZWQubGFzdENodW5rID0gY2xvbmVkQ2h1bms7XG5cblx0aWYgKHRoaXMuaW5kZW50RXhjbHVzaW9uUmFuZ2VzKSB7XG5cdFx0Y2xvbmVkLmluZGVudEV4Y2x1c2lvblJhbmdlcyA9IHRoaXMuaW5kZW50RXhjbHVzaW9uUmFuZ2VzLnNsaWNlKCk7XG5cdH1cblxuXHRjbG9uZWQuc291cmNlbWFwTG9jYXRpb25zID0gbmV3IEJpdFNldCh0aGlzLnNvdXJjZW1hcExvY2F0aW9ucyk7XG5cblx0Y2xvbmVkLmludHJvID0gdGhpcy5pbnRybztcblx0Y2xvbmVkLm91dHJvID0gdGhpcy5vdXRybztcblxuXHRyZXR1cm4gY2xvbmVkO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmdlbmVyYXRlRGVjb2RlZE1hcCA9IGZ1bmN0aW9uIGdlbmVyYXRlRGVjb2RlZE1hcCAob3B0aW9ucykge1xuXHRcdHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBzb3VyY2VJbmRleCA9IDA7XG5cdHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuc3RvcmVkTmFtZXMpO1xuXHR2YXIgbWFwcGluZ3MgPSBuZXcgTWFwcGluZ3Mob3B0aW9ucy5oaXJlcyk7XG5cblx0dmFyIGxvY2F0ZSA9IGdldExvY2F0b3IodGhpcy5vcmlnaW5hbCk7XG5cblx0aWYgKHRoaXMuaW50cm8pIHtcblx0XHRtYXBwaW5ncy5hZHZhbmNlKHRoaXMuaW50cm8pO1xuXHR9XG5cblx0dGhpcy5maXJzdENodW5rLmVhY2hOZXh0KGZ1bmN0aW9uIChjaHVuaykge1xuXHRcdHZhciBsb2MgPSBsb2NhdGUoY2h1bmsuc3RhcnQpO1xuXG5cdFx0aWYgKGNodW5rLmludHJvLmxlbmd0aCkgeyBtYXBwaW5ncy5hZHZhbmNlKGNodW5rLmludHJvKTsgfVxuXG5cdFx0aWYgKGNodW5rLmVkaXRlZCkge1xuXHRcdFx0bWFwcGluZ3MuYWRkRWRpdChcblx0XHRcdFx0c291cmNlSW5kZXgsXG5cdFx0XHRcdGNodW5rLmNvbnRlbnQsXG5cdFx0XHRcdGxvYyxcblx0XHRcdFx0Y2h1bmsuc3RvcmVOYW1lID8gbmFtZXMuaW5kZXhPZihjaHVuay5vcmlnaW5hbCkgOiAtMVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWFwcGluZ3MuYWRkVW5lZGl0ZWRDaHVuayhzb3VyY2VJbmRleCwgY2h1bmssIHRoaXMkMS5vcmlnaW5hbCwgbG9jLCB0aGlzJDEuc291cmNlbWFwTG9jYXRpb25zKTtcblx0XHR9XG5cblx0XHRpZiAoY2h1bmsub3V0cm8ubGVuZ3RoKSB7IG1hcHBpbmdzLmFkdmFuY2UoY2h1bmsub3V0cm8pOyB9XG5cdH0pO1xuXG5cdHJldHVybiB7XG5cdFx0ZmlsZTogb3B0aW9ucy5maWxlID8gb3B0aW9ucy5maWxlLnNwbGl0KC9bL1xcXFxdLykucG9wKCkgOiBudWxsLFxuXHRcdHNvdXJjZXM6IFtvcHRpb25zLnNvdXJjZSA/IGdldFJlbGF0aXZlUGF0aChvcHRpb25zLmZpbGUgfHwgJycsIG9wdGlvbnMuc291cmNlKSA6IG51bGxdLFxuXHRcdHNvdXJjZXNDb250ZW50OiBvcHRpb25zLmluY2x1ZGVDb250ZW50ID8gW3RoaXMub3JpZ2luYWxdIDogW251bGxdLFxuXHRcdG5hbWVzOiBuYW1lcyxcblx0XHRtYXBwaW5nczogbWFwcGluZ3MucmF3XG5cdH07XG59O1xuXG5NYWdpY1N0cmluZy5wcm90b3R5cGUuZ2VuZXJhdGVNYXAgPSBmdW5jdGlvbiBnZW5lcmF0ZU1hcCAob3B0aW9ucykge1xuXHRyZXR1cm4gbmV3IFNvdXJjZU1hcCh0aGlzLmdlbmVyYXRlRGVjb2RlZE1hcChvcHRpb25zKSk7XG59O1xuXG5NYWdpY1N0cmluZy5wcm90b3R5cGUuZ2V0SW5kZW50U3RyaW5nID0gZnVuY3Rpb24gZ2V0SW5kZW50U3RyaW5nICgpIHtcblx0cmV0dXJuIHRoaXMuaW5kZW50U3RyID09PSBudWxsID8gJ1xcdCcgOiB0aGlzLmluZGVudFN0cjtcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS5pbmRlbnQgPSBmdW5jdGlvbiBpbmRlbnQgKGluZGVudFN0ciwgb3B0aW9ucykge1xuXHR2YXIgcGF0dGVybiA9IC9eW15cXHJcXG5dL2dtO1xuXG5cdGlmIChpc09iamVjdChpbmRlbnRTdHIpKSB7XG5cdFx0b3B0aW9ucyA9IGluZGVudFN0cjtcblx0XHRpbmRlbnRTdHIgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpbmRlbnRTdHIgPSBpbmRlbnRTdHIgIT09IHVuZGVmaW5lZCA/IGluZGVudFN0ciA6IHRoaXMuaW5kZW50U3RyIHx8ICdcXHQnO1xuXG5cdGlmIChpbmRlbnRTdHIgPT09ICcnKSB7IHJldHVybiB0aGlzOyB9IC8vIG5vb3BcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHQvLyBQcm9jZXNzIGV4Y2x1c2lvbiByYW5nZXNcblx0dmFyIGlzRXhjbHVkZWQgPSB7fTtcblxuXHRpZiAob3B0aW9ucy5leGNsdWRlKSB7XG5cdFx0dmFyIGV4Y2x1c2lvbnMgPVxuXHRcdFx0dHlwZW9mIG9wdGlvbnMuZXhjbHVkZVswXSA9PT0gJ251bWJlcicgPyBbb3B0aW9ucy5leGNsdWRlXSA6IG9wdGlvbnMuZXhjbHVkZTtcblx0XHRleGNsdXNpb25zLmZvckVhY2goZnVuY3Rpb24gKGV4Y2x1c2lvbikge1xuXHRcdFx0Zm9yICh2YXIgaSA9IGV4Y2x1c2lvblswXTsgaSA8IGV4Y2x1c2lvblsxXTsgaSArPSAxKSB7XG5cdFx0XHRcdGlzRXhjbHVkZWRbaV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dmFyIHNob3VsZEluZGVudE5leHRDaGFyYWN0ZXIgPSBvcHRpb25zLmluZGVudFN0YXJ0ICE9PSBmYWxzZTtcblx0dmFyIHJlcGxhY2VyID0gZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0aWYgKHNob3VsZEluZGVudE5leHRDaGFyYWN0ZXIpIHsgcmV0dXJuIChcIlwiICsgaW5kZW50U3RyICsgbWF0Y2gpOyB9XG5cdFx0c2hvdWxkSW5kZW50TmV4dENoYXJhY3RlciA9IHRydWU7XG5cdFx0cmV0dXJuIG1hdGNoO1xuXHR9O1xuXG5cdHRoaXMuaW50cm8gPSB0aGlzLmludHJvLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZXIpO1xuXG5cdHZhciBjaGFySW5kZXggPSAwO1xuXHR2YXIgY2h1bmsgPSB0aGlzLmZpcnN0Q2h1bms7XG5cblx0d2hpbGUgKGNodW5rKSB7XG5cdFx0dmFyIGVuZCA9IGNodW5rLmVuZDtcblxuXHRcdGlmIChjaHVuay5lZGl0ZWQpIHtcblx0XHRcdGlmICghaXNFeGNsdWRlZFtjaGFySW5kZXhdKSB7XG5cdFx0XHRcdGNodW5rLmNvbnRlbnQgPSBjaHVuay5jb250ZW50LnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZXIpO1xuXG5cdFx0XHRcdGlmIChjaHVuay5jb250ZW50Lmxlbmd0aCkge1xuXHRcdFx0XHRcdHNob3VsZEluZGVudE5leHRDaGFyYWN0ZXIgPSBjaHVuay5jb250ZW50W2NodW5rLmNvbnRlbnQubGVuZ3RoIC0gMV0gPT09ICdcXG4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoYXJJbmRleCA9IGNodW5rLnN0YXJ0O1xuXG5cdFx0XHR3aGlsZSAoY2hhckluZGV4IDwgZW5kKSB7XG5cdFx0XHRcdGlmICghaXNFeGNsdWRlZFtjaGFySW5kZXhdKSB7XG5cdFx0XHRcdFx0dmFyIGNoYXIgPSB0aGlzLm9yaWdpbmFsW2NoYXJJbmRleF07XG5cblx0XHRcdFx0XHRpZiAoY2hhciA9PT0gJ1xcbicpIHtcblx0XHRcdFx0XHRcdHNob3VsZEluZGVudE5leHRDaGFyYWN0ZXIgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hhciAhPT0gJ1xccicgJiYgc2hvdWxkSW5kZW50TmV4dENoYXJhY3Rlcikge1xuXHRcdFx0XHRcdFx0c2hvdWxkSW5kZW50TmV4dENoYXJhY3RlciA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHRpZiAoY2hhckluZGV4ID09PSBjaHVuay5zdGFydCkge1xuXHRcdFx0XHRcdFx0XHRjaHVuay5wcmVwZW5kUmlnaHQoaW5kZW50U3RyKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3NwbGl0Q2h1bmsoY2h1bmssIGNoYXJJbmRleCk7XG5cdFx0XHRcdFx0XHRcdGNodW5rID0gY2h1bmsubmV4dDtcblx0XHRcdFx0XHRcdFx0Y2h1bmsucHJlcGVuZFJpZ2h0KGluZGVudFN0cik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2hhckluZGV4ICs9IDE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2hhckluZGV4ID0gY2h1bmsuZW5kO1xuXHRcdGNodW5rID0gY2h1bmsubmV4dDtcblx0fVxuXG5cdHRoaXMub3V0cm8gPSB0aGlzLm91dHJvLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZXIpO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydCAoKSB7XG5cdHRocm93IG5ldyBFcnJvcignbWFnaWNTdHJpbmcuaW5zZXJ0KC4uLikgaXMgZGVwcmVjYXRlZC4gVXNlIHByZXBlbmRSaWdodCguLi4pIG9yIGFwcGVuZExlZnQoLi4uKScpO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmluc2VydExlZnQgPSBmdW5jdGlvbiBpbnNlcnRMZWZ0IChpbmRleCwgY29udGVudCkge1xuXHRpZiAoIXdhcm5lZC5pbnNlcnRMZWZ0KSB7XG5cdFx0Y29uc29sZS53YXJuKCdtYWdpY1N0cmluZy5pbnNlcnRMZWZ0KC4uLikgaXMgZGVwcmVjYXRlZC4gVXNlIG1hZ2ljU3RyaW5nLmFwcGVuZExlZnQoLi4uKSBpbnN0ZWFkJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuXHRcdHdhcm5lZC5pbnNlcnRMZWZ0ID0gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiB0aGlzLmFwcGVuZExlZnQoaW5kZXgsIGNvbnRlbnQpO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmluc2VydFJpZ2h0ID0gZnVuY3Rpb24gaW5zZXJ0UmlnaHQgKGluZGV4LCBjb250ZW50KSB7XG5cdGlmICghd2FybmVkLmluc2VydFJpZ2h0KSB7XG5cdFx0Y29uc29sZS53YXJuKCdtYWdpY1N0cmluZy5pbnNlcnRSaWdodCguLi4pIGlzIGRlcHJlY2F0ZWQuIFVzZSBtYWdpY1N0cmluZy5wcmVwZW5kUmlnaHQoLi4uKSBpbnN0ZWFkJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuXHRcdHdhcm5lZC5pbnNlcnRSaWdodCA9IHRydWU7XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5wcmVwZW5kUmlnaHQoaW5kZXgsIGNvbnRlbnQpO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiBtb3ZlIChzdGFydCwgZW5kLCBpbmRleCkge1xuXHRpZiAoaW5kZXggPj0gc3RhcnQgJiYgaW5kZXggPD0gZW5kKSB7IHRocm93IG5ldyBFcnJvcignQ2Fubm90IG1vdmUgYSBzZWxlY3Rpb24gaW5zaWRlIGl0c2VsZicpOyB9XG5cblx0dGhpcy5fc3BsaXQoc3RhcnQpO1xuXHR0aGlzLl9zcGxpdChlbmQpO1xuXHR0aGlzLl9zcGxpdChpbmRleCk7XG5cblx0dmFyIGZpcnN0ID0gdGhpcy5ieVN0YXJ0W3N0YXJ0XTtcblx0dmFyIGxhc3QgPSB0aGlzLmJ5RW5kW2VuZF07XG5cblx0dmFyIG9sZExlZnQgPSBmaXJzdC5wcmV2aW91cztcblx0dmFyIG9sZFJpZ2h0ID0gbGFzdC5uZXh0O1xuXG5cdHZhciBuZXdSaWdodCA9IHRoaXMuYnlTdGFydFtpbmRleF07XG5cdGlmICghbmV3UmlnaHQgJiYgbGFzdCA9PT0gdGhpcy5sYXN0Q2h1bmspIHsgcmV0dXJuIHRoaXM7IH1cblx0dmFyIG5ld0xlZnQgPSBuZXdSaWdodCA/IG5ld1JpZ2h0LnByZXZpb3VzIDogdGhpcy5sYXN0Q2h1bms7XG5cblx0aWYgKG9sZExlZnQpIHsgb2xkTGVmdC5uZXh0ID0gb2xkUmlnaHQ7IH1cblx0aWYgKG9sZFJpZ2h0KSB7IG9sZFJpZ2h0LnByZXZpb3VzID0gb2xkTGVmdDsgfVxuXG5cdGlmIChuZXdMZWZ0KSB7IG5ld0xlZnQubmV4dCA9IGZpcnN0OyB9XG5cdGlmIChuZXdSaWdodCkgeyBuZXdSaWdodC5wcmV2aW91cyA9IGxhc3Q7IH1cblxuXHRpZiAoIWZpcnN0LnByZXZpb3VzKSB7IHRoaXMuZmlyc3RDaHVuayA9IGxhc3QubmV4dDsgfVxuXHRpZiAoIWxhc3QubmV4dCkge1xuXHRcdHRoaXMubGFzdENodW5rID0gZmlyc3QucHJldmlvdXM7XG5cdFx0dGhpcy5sYXN0Q2h1bmsubmV4dCA9IG51bGw7XG5cdH1cblxuXHRmaXJzdC5wcmV2aW91cyA9IG5ld0xlZnQ7XG5cdGxhc3QubmV4dCA9IG5ld1JpZ2h0IHx8IG51bGw7XG5cblx0aWYgKCFuZXdMZWZ0KSB7IHRoaXMuZmlyc3RDaHVuayA9IGZpcnN0OyB9XG5cdGlmICghbmV3UmlnaHQpIHsgdGhpcy5sYXN0Q2h1bmsgPSBsYXN0OyB9XG5cdHJldHVybiB0aGlzO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLm92ZXJ3cml0ZSA9IGZ1bmN0aW9uIG92ZXJ3cml0ZSAoc3RhcnQsIGVuZCwgY29udGVudCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcGxhY2VtZW50IGNvbnRlbnQgbXVzdCBiZSBhIHN0cmluZycpOyB9XG5cblx0d2hpbGUgKHN0YXJ0IDwgMCkgeyBzdGFydCArPSB0aGlzLm9yaWdpbmFsLmxlbmd0aDsgfVxuXHR3aGlsZSAoZW5kIDwgMCkgeyBlbmQgKz0gdGhpcy5vcmlnaW5hbC5sZW5ndGg7IH1cblxuXHRpZiAoZW5kID4gdGhpcy5vcmlnaW5hbC5sZW5ndGgpIHsgdGhyb3cgbmV3IEVycm9yKCdlbmQgaXMgb3V0IG9mIGJvdW5kcycpOyB9XG5cdGlmIChzdGFydCA9PT0gZW5kKVxuXHRcdHsgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgb3ZlcndyaXRlIGEgemVyby1sZW5ndGggcmFuZ2Ug4oCTIHVzZSBhcHBlbmRMZWZ0IG9yIHByZXBlbmRSaWdodCBpbnN0ZWFkJyk7IH1cblxuXHR0aGlzLl9zcGxpdChzdGFydCk7XG5cdHRoaXMuX3NwbGl0KGVuZCk7XG5cblx0aWYgKG9wdGlvbnMgPT09IHRydWUpIHtcblx0XHRpZiAoIXdhcm5lZC5zdG9yZU5hbWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignVGhlIGZpbmFsIGFyZ3VtZW50IHRvIG1hZ2ljU3RyaW5nLm92ZXJ3cml0ZSguLi4pIHNob3VsZCBiZSBhbiBvcHRpb25zIG9iamVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yaWNoLWhhcnJpcy9tYWdpYy1zdHJpbmcnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG5cdFx0XHR3YXJuZWQuc3RvcmVOYW1lID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRvcHRpb25zID0geyBzdG9yZU5hbWU6IHRydWUgfTtcblx0fVxuXHR2YXIgc3RvcmVOYW1lID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5zdG9yZU5hbWUgOiBmYWxzZTtcblx0dmFyIGNvbnRlbnRPbmx5ID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jb250ZW50T25seSA6IGZhbHNlO1xuXG5cdGlmIChzdG9yZU5hbWUpIHtcblx0XHR2YXIgb3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXHRcdHRoaXMuc3RvcmVkTmFtZXNbb3JpZ2luYWxdID0gdHJ1ZTtcblx0fVxuXG5cdHZhciBmaXJzdCA9IHRoaXMuYnlTdGFydFtzdGFydF07XG5cdHZhciBsYXN0ID0gdGhpcy5ieUVuZFtlbmRdO1xuXG5cdGlmIChmaXJzdCkge1xuXHRcdGlmIChlbmQgPiBmaXJzdC5lbmQgJiYgZmlyc3QubmV4dCAhPT0gdGhpcy5ieVN0YXJ0W2ZpcnN0LmVuZF0pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2Fubm90IG92ZXJ3cml0ZSBhY3Jvc3MgYSBzcGxpdCBwb2ludCcpO1xuXHRcdH1cblxuXHRcdGZpcnN0LmVkaXQoY29udGVudCwgc3RvcmVOYW1lLCBjb250ZW50T25seSk7XG5cblx0XHRpZiAoZmlyc3QgIT09IGxhc3QpIHtcblx0XHRcdHZhciBjaHVuayA9IGZpcnN0Lm5leHQ7XG5cdFx0XHR3aGlsZSAoY2h1bmsgIT09IGxhc3QpIHtcblx0XHRcdFx0Y2h1bmsuZWRpdCgnJywgZmFsc2UpO1xuXHRcdFx0XHRjaHVuayA9IGNodW5rLm5leHQ7XG5cdFx0XHR9XG5cblx0XHRcdGNodW5rLmVkaXQoJycsIGZhbHNlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gbXVzdCBiZSBpbnNlcnRpbmcgYXQgdGhlIGVuZFxuXHRcdHZhciBuZXdDaHVuayA9IG5ldyBDaHVuayhzdGFydCwgZW5kLCAnJykuZWRpdChjb250ZW50LCBzdG9yZU5hbWUpO1xuXG5cdFx0Ly8gVE9ETyBsYXN0IGNodW5rIGluIHRoZSBhcnJheSBtYXkgbm90IGJlIHRoZSBsYXN0IGNodW5rLCBpZiBpdCdzIG1vdmVkLi4uXG5cdFx0bGFzdC5uZXh0ID0gbmV3Q2h1bms7XG5cdFx0bmV3Q2h1bmsucHJldmlvdXMgPSBsYXN0O1xuXHR9XG5cdHJldHVybiB0aGlzO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiBwcmVwZW5kIChjb250ZW50KSB7XG5cdGlmICh0eXBlb2YgY29udGVudCAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignb3V0cm8gY29udGVudCBtdXN0IGJlIGEgc3RyaW5nJyk7IH1cblxuXHR0aGlzLmludHJvID0gY29udGVudCArIHRoaXMuaW50cm87XG5cdHJldHVybiB0aGlzO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLnByZXBlbmRMZWZ0ID0gZnVuY3Rpb24gcHJlcGVuZExlZnQgKGluZGV4LCBjb250ZW50KSB7XG5cdGlmICh0eXBlb2YgY29udGVudCAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5zZXJ0ZWQgY29udGVudCBtdXN0IGJlIGEgc3RyaW5nJyk7IH1cblxuXHR0aGlzLl9zcGxpdChpbmRleCk7XG5cblx0dmFyIGNodW5rID0gdGhpcy5ieUVuZFtpbmRleF07XG5cblx0aWYgKGNodW5rKSB7XG5cdFx0Y2h1bmsucHJlcGVuZExlZnQoY29udGVudCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5pbnRybyA9IGNvbnRlbnQgKyB0aGlzLmludHJvO1xuXHR9XG5cdHJldHVybiB0aGlzO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLnByZXBlbmRSaWdodCA9IGZ1bmN0aW9uIHByZXBlbmRSaWdodCAoaW5kZXgsIGNvbnRlbnQpIHtcblx0aWYgKHR5cGVvZiBjb250ZW50ICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnNlcnRlZCBjb250ZW50IG11c3QgYmUgYSBzdHJpbmcnKTsgfVxuXG5cdHRoaXMuX3NwbGl0KGluZGV4KTtcblxuXHR2YXIgY2h1bmsgPSB0aGlzLmJ5U3RhcnRbaW5kZXhdO1xuXG5cdGlmIChjaHVuaykge1xuXHRcdGNodW5rLnByZXBlbmRSaWdodChjb250ZW50KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLm91dHJvID0gY29udGVudCArIHRoaXMub3V0cm87XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5NYWdpY1N0cmluZy5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlIChzdGFydCwgZW5kKSB7XG5cdHdoaWxlIChzdGFydCA8IDApIHsgc3RhcnQgKz0gdGhpcy5vcmlnaW5hbC5sZW5ndGg7IH1cblx0d2hpbGUgKGVuZCA8IDApIHsgZW5kICs9IHRoaXMub3JpZ2luYWwubGVuZ3RoOyB9XG5cblx0aWYgKHN0YXJ0ID09PSBlbmQpIHsgcmV0dXJuIHRoaXM7IH1cblxuXHRpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRoaXMub3JpZ2luYWwubGVuZ3RoKSB7IHRocm93IG5ldyBFcnJvcignQ2hhcmFjdGVyIGlzIG91dCBvZiBib3VuZHMnKTsgfVxuXHRpZiAoc3RhcnQgPiBlbmQpIHsgdGhyb3cgbmV3IEVycm9yKCdlbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gc3RhcnQnKTsgfVxuXG5cdHRoaXMuX3NwbGl0KHN0YXJ0KTtcblx0dGhpcy5fc3BsaXQoZW5kKTtcblxuXHR2YXIgY2h1bmsgPSB0aGlzLmJ5U3RhcnRbc3RhcnRdO1xuXG5cdHdoaWxlIChjaHVuaykge1xuXHRcdGNodW5rLmludHJvID0gJyc7XG5cdFx0Y2h1bmsub3V0cm8gPSAnJztcblx0XHRjaHVuay5lZGl0KCcnKTtcblxuXHRcdGNodW5rID0gZW5kID4gY2h1bmsuZW5kID8gdGhpcy5ieVN0YXJ0W2NodW5rLmVuZF0gOiBudWxsO1xuXHR9XG5cdHJldHVybiB0aGlzO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLmxhc3RDaGFyID0gZnVuY3Rpb24gbGFzdENoYXIgKCkge1xuXHRpZiAodGhpcy5vdXRyby5sZW5ndGgpXG5cdFx0eyByZXR1cm4gdGhpcy5vdXRyb1t0aGlzLm91dHJvLmxlbmd0aCAtIDFdOyB9XG5cdHZhciBjaHVuayA9IHRoaXMubGFzdENodW5rO1xuXHRkbyB7XG5cdFx0aWYgKGNodW5rLm91dHJvLmxlbmd0aClcblx0XHRcdHsgcmV0dXJuIGNodW5rLm91dHJvW2NodW5rLm91dHJvLmxlbmd0aCAtIDFdOyB9XG5cdFx0aWYgKGNodW5rLmNvbnRlbnQubGVuZ3RoKVxuXHRcdFx0eyByZXR1cm4gY2h1bmsuY29udGVudFtjaHVuay5jb250ZW50Lmxlbmd0aCAtIDFdOyB9XG5cdFx0aWYgKGNodW5rLmludHJvLmxlbmd0aClcblx0XHRcdHsgcmV0dXJuIGNodW5rLmludHJvW2NodW5rLmludHJvLmxlbmd0aCAtIDFdOyB9XG5cdH0gd2hpbGUgKGNodW5rID0gY2h1bmsucHJldmlvdXMpO1xuXHRpZiAodGhpcy5pbnRyby5sZW5ndGgpXG5cdFx0eyByZXR1cm4gdGhpcy5pbnRyb1t0aGlzLmludHJvLmxlbmd0aCAtIDFdOyB9XG5cdHJldHVybiAnJztcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS5sYXN0TGluZSA9IGZ1bmN0aW9uIGxhc3RMaW5lICgpIHtcblx0dmFyIGxpbmVJbmRleCA9IHRoaXMub3V0cm8ubGFzdEluZGV4T2Yobik7XG5cdGlmIChsaW5lSW5kZXggIT09IC0xKVxuXHRcdHsgcmV0dXJuIHRoaXMub3V0cm8uc3Vic3RyKGxpbmVJbmRleCArIDEpOyB9XG5cdHZhciBsaW5lU3RyID0gdGhpcy5vdXRybztcblx0dmFyIGNodW5rID0gdGhpcy5sYXN0Q2h1bms7XG5cdGRvIHtcblx0XHRpZiAoY2h1bmsub3V0cm8ubGVuZ3RoID4gMCkge1xuXHRcdFx0bGluZUluZGV4ID0gY2h1bmsub3V0cm8ubGFzdEluZGV4T2Yobik7XG5cdFx0XHRpZiAobGluZUluZGV4ICE9PSAtMSlcblx0XHRcdFx0eyByZXR1cm4gY2h1bmsub3V0cm8uc3Vic3RyKGxpbmVJbmRleCArIDEpICsgbGluZVN0cjsgfVxuXHRcdFx0bGluZVN0ciA9IGNodW5rLm91dHJvICsgbGluZVN0cjtcblx0XHR9XG5cblx0XHRpZiAoY2h1bmsuY29udGVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRsaW5lSW5kZXggPSBjaHVuay5jb250ZW50Lmxhc3RJbmRleE9mKG4pO1xuXHRcdFx0aWYgKGxpbmVJbmRleCAhPT0gLTEpXG5cdFx0XHRcdHsgcmV0dXJuIGNodW5rLmNvbnRlbnQuc3Vic3RyKGxpbmVJbmRleCArIDEpICsgbGluZVN0cjsgfVxuXHRcdFx0bGluZVN0ciA9IGNodW5rLmNvbnRlbnQgKyBsaW5lU3RyO1xuXHRcdH1cblxuXHRcdGlmIChjaHVuay5pbnRyby5sZW5ndGggPiAwKSB7XG5cdFx0XHRsaW5lSW5kZXggPSBjaHVuay5pbnRyby5sYXN0SW5kZXhPZihuKTtcblx0XHRcdGlmIChsaW5lSW5kZXggIT09IC0xKVxuXHRcdFx0XHR7IHJldHVybiBjaHVuay5pbnRyby5zdWJzdHIobGluZUluZGV4ICsgMSkgKyBsaW5lU3RyOyB9XG5cdFx0XHRsaW5lU3RyID0gY2h1bmsuaW50cm8gKyBsaW5lU3RyO1xuXHRcdH1cblx0fSB3aGlsZSAoY2h1bmsgPSBjaHVuay5wcmV2aW91cyk7XG5cdGxpbmVJbmRleCA9IHRoaXMuaW50cm8ubGFzdEluZGV4T2Yobik7XG5cdGlmIChsaW5lSW5kZXggIT09IC0xKVxuXHRcdHsgcmV0dXJuIHRoaXMuaW50cm8uc3Vic3RyKGxpbmVJbmRleCArIDEpICsgbGluZVN0cjsgfVxuXHRyZXR1cm4gdGhpcy5pbnRybyArIGxpbmVTdHI7XG59O1xuXG5NYWdpY1N0cmluZy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuXHRcdGlmICggc3RhcnQgPT09IHZvaWQgMCApIHN0YXJ0ID0gMDtcblx0XHRpZiAoIGVuZCA9PT0gdm9pZCAwICkgZW5kID0gdGhpcy5vcmlnaW5hbC5sZW5ndGg7XG5cblx0d2hpbGUgKHN0YXJ0IDwgMCkgeyBzdGFydCArPSB0aGlzLm9yaWdpbmFsLmxlbmd0aDsgfVxuXHR3aGlsZSAoZW5kIDwgMCkgeyBlbmQgKz0gdGhpcy5vcmlnaW5hbC5sZW5ndGg7IH1cblxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cblx0Ly8gZmluZCBzdGFydCBjaHVua1xuXHR2YXIgY2h1bmsgPSB0aGlzLmZpcnN0Q2h1bms7XG5cdHdoaWxlIChjaHVuayAmJiAoY2h1bmsuc3RhcnQgPiBzdGFydCB8fCBjaHVuay5lbmQgPD0gc3RhcnQpKSB7XG5cdFx0Ly8gZm91bmQgZW5kIGNodW5rIGJlZm9yZSBzdGFydFxuXHRcdGlmIChjaHVuay5zdGFydCA8IGVuZCAmJiBjaHVuay5lbmQgPj0gZW5kKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdGNodW5rID0gY2h1bmsubmV4dDtcblx0fVxuXG5cdGlmIChjaHVuayAmJiBjaHVuay5lZGl0ZWQgJiYgY2h1bmsuc3RhcnQgIT09IHN0YXJ0KVxuXHRcdHsgdGhyb3cgbmV3IEVycm9yKChcIkNhbm5vdCB1c2UgcmVwbGFjZWQgY2hhcmFjdGVyIFwiICsgc3RhcnQgKyBcIiBhcyBzbGljZSBzdGFydCBhbmNob3IuXCIpKTsgfVxuXG5cdHZhciBzdGFydENodW5rID0gY2h1bms7XG5cdHdoaWxlIChjaHVuaykge1xuXHRcdGlmIChjaHVuay5pbnRybyAmJiAoc3RhcnRDaHVuayAhPT0gY2h1bmsgfHwgY2h1bmsuc3RhcnQgPT09IHN0YXJ0KSkge1xuXHRcdFx0cmVzdWx0ICs9IGNodW5rLmludHJvO1xuXHRcdH1cblxuXHRcdHZhciBjb250YWluc0VuZCA9IGNodW5rLnN0YXJ0IDwgZW5kICYmIGNodW5rLmVuZCA+PSBlbmQ7XG5cdFx0aWYgKGNvbnRhaW5zRW5kICYmIGNodW5rLmVkaXRlZCAmJiBjaHVuay5lbmQgIT09IGVuZClcblx0XHRcdHsgdGhyb3cgbmV3IEVycm9yKChcIkNhbm5vdCB1c2UgcmVwbGFjZWQgY2hhcmFjdGVyIFwiICsgZW5kICsgXCIgYXMgc2xpY2UgZW5kIGFuY2hvci5cIikpOyB9XG5cblx0XHR2YXIgc2xpY2VTdGFydCA9IHN0YXJ0Q2h1bmsgPT09IGNodW5rID8gc3RhcnQgLSBjaHVuay5zdGFydCA6IDA7XG5cdFx0dmFyIHNsaWNlRW5kID0gY29udGFpbnNFbmQgPyBjaHVuay5jb250ZW50Lmxlbmd0aCArIGVuZCAtIGNodW5rLmVuZCA6IGNodW5rLmNvbnRlbnQubGVuZ3RoO1xuXG5cdFx0cmVzdWx0ICs9IGNodW5rLmNvbnRlbnQuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpO1xuXG5cdFx0aWYgKGNodW5rLm91dHJvICYmICghY29udGFpbnNFbmQgfHwgY2h1bmsuZW5kID09PSBlbmQpKSB7XG5cdFx0XHRyZXN1bHQgKz0gY2h1bmsub3V0cm87XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRhaW5zRW5kKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRjaHVuayA9IGNodW5rLm5leHQ7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVE9ETyBkZXByZWNhdGUgdGhpcz8gbm90IHJlYWxseSB2ZXJ5IHVzZWZ1bFxuTWFnaWNTdHJpbmcucHJvdG90eXBlLnNuaXAgPSBmdW5jdGlvbiBzbmlwIChzdGFydCwgZW5kKSB7XG5cdHZhciBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcblx0Y2xvbmUucmVtb3ZlKDAsIHN0YXJ0KTtcblx0Y2xvbmUucmVtb3ZlKGVuZCwgY2xvbmUub3JpZ2luYWwubGVuZ3RoKTtcblxuXHRyZXR1cm4gY2xvbmU7XG59O1xuXG5NYWdpY1N0cmluZy5wcm90b3R5cGUuX3NwbGl0ID0gZnVuY3Rpb24gX3NwbGl0IChpbmRleCkge1xuXHRpZiAodGhpcy5ieVN0YXJ0W2luZGV4XSB8fCB0aGlzLmJ5RW5kW2luZGV4XSkgeyByZXR1cm47IH1cblxuXHR2YXIgY2h1bmsgPSB0aGlzLmxhc3RTZWFyY2hlZENodW5rO1xuXHR2YXIgc2VhcmNoRm9yd2FyZCA9IGluZGV4ID4gY2h1bmsuZW5kO1xuXG5cdHdoaWxlIChjaHVuaykge1xuXHRcdGlmIChjaHVuay5jb250YWlucyhpbmRleCkpIHsgcmV0dXJuIHRoaXMuX3NwbGl0Q2h1bmsoY2h1bmssIGluZGV4KTsgfVxuXG5cdFx0Y2h1bmsgPSBzZWFyY2hGb3J3YXJkID8gdGhpcy5ieVN0YXJ0W2NodW5rLmVuZF0gOiB0aGlzLmJ5RW5kW2NodW5rLnN0YXJ0XTtcblx0fVxufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLl9zcGxpdENodW5rID0gZnVuY3Rpb24gX3NwbGl0Q2h1bmsgKGNodW5rLCBpbmRleCkge1xuXHRpZiAoY2h1bmsuZWRpdGVkICYmIGNodW5rLmNvbnRlbnQubGVuZ3RoKSB7XG5cdFx0Ly8gemVyby1sZW5ndGggZWRpdGVkIGNodW5rcyBhcmUgYSBzcGVjaWFsIGNhc2UgKG92ZXJsYXBwaW5nIHJlcGxhY2VtZW50cylcblx0XHR2YXIgbG9jID0gZ2V0TG9jYXRvcih0aGlzLm9yaWdpbmFsKShpbmRleCk7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0KFwiQ2Fubm90IHNwbGl0IGEgY2h1bmsgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGVkaXRlZCAoXCIgKyAobG9jLmxpbmUpICsgXCI6XCIgKyAobG9jLmNvbHVtbikgKyBcIiDigJMgXFxcIlwiICsgKGNodW5rLm9yaWdpbmFsKSArIFwiXFxcIilcIilcblx0XHQpO1xuXHR9XG5cblx0dmFyIG5ld0NodW5rID0gY2h1bmsuc3BsaXQoaW5kZXgpO1xuXG5cdHRoaXMuYnlFbmRbaW5kZXhdID0gY2h1bms7XG5cdHRoaXMuYnlTdGFydFtpbmRleF0gPSBuZXdDaHVuaztcblx0dGhpcy5ieUVuZFtuZXdDaHVuay5lbmRdID0gbmV3Q2h1bms7XG5cblx0aWYgKGNodW5rID09PSB0aGlzLmxhc3RDaHVuaykgeyB0aGlzLmxhc3RDaHVuayA9IG5ld0NodW5rOyB9XG5cblx0dGhpcy5sYXN0U2VhcmNoZWRDaHVuayA9IGNodW5rO1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcblx0dmFyIHN0ciA9IHRoaXMuaW50cm87XG5cblx0dmFyIGNodW5rID0gdGhpcy5maXJzdENodW5rO1xuXHR3aGlsZSAoY2h1bmspIHtcblx0XHRzdHIgKz0gY2h1bmsudG9TdHJpbmcoKTtcblx0XHRjaHVuayA9IGNodW5rLm5leHQ7XG5cdH1cblxuXHRyZXR1cm4gc3RyICsgdGhpcy5vdXRybztcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gaXNFbXB0eSAoKSB7XG5cdHZhciBjaHVuayA9IHRoaXMuZmlyc3RDaHVuaztcblx0ZG8ge1xuXHRcdGlmIChjaHVuay5pbnRyby5sZW5ndGggJiYgY2h1bmsuaW50cm8udHJpbSgpIHx8XG5cdFx0XHRcdGNodW5rLmNvbnRlbnQubGVuZ3RoICYmIGNodW5rLmNvbnRlbnQudHJpbSgpIHx8XG5cdFx0XHRcdGNodW5rLm91dHJvLmxlbmd0aCAmJiBjaHVuay5vdXRyby50cmltKCkpXG5cdFx0XHR7IHJldHVybiBmYWxzZTsgfVxuXHR9IHdoaWxlIChjaHVuayA9IGNodW5rLm5leHQpO1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGggKCkge1xuXHR2YXIgY2h1bmsgPSB0aGlzLmZpcnN0Q2h1bms7XG5cdHZhciBsZW5ndGggPSAwO1xuXHRkbyB7XG5cdFx0bGVuZ3RoICs9IGNodW5rLmludHJvLmxlbmd0aCArIGNodW5rLmNvbnRlbnQubGVuZ3RoICsgY2h1bmsub3V0cm8ubGVuZ3RoO1xuXHR9IHdoaWxlIChjaHVuayA9IGNodW5rLm5leHQpO1xuXHRyZXR1cm4gbGVuZ3RoO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLnRyaW1MaW5lcyA9IGZ1bmN0aW9uIHRyaW1MaW5lcyAoKSB7XG5cdHJldHVybiB0aGlzLnRyaW0oJ1tcXFxcclxcXFxuXScpO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbiB0cmltIChjaGFyVHlwZSkge1xuXHRyZXR1cm4gdGhpcy50cmltU3RhcnQoY2hhclR5cGUpLnRyaW1FbmQoY2hhclR5cGUpO1xufTtcblxuTWFnaWNTdHJpbmcucHJvdG90eXBlLnRyaW1FbmRBYm9ydGVkID0gZnVuY3Rpb24gdHJpbUVuZEFib3J0ZWQgKGNoYXJUeXBlKSB7XG5cdHZhciByeCA9IG5ldyBSZWdFeHAoKGNoYXJUeXBlIHx8ICdcXFxccycpICsgJyskJyk7XG5cblx0dGhpcy5vdXRybyA9IHRoaXMub3V0cm8ucmVwbGFjZShyeCwgJycpO1xuXHRpZiAodGhpcy5vdXRyby5sZW5ndGgpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgY2h1bmsgPSB0aGlzLmxhc3RDaHVuaztcblxuXHRkbyB7XG5cdFx0dmFyIGVuZCA9IGNodW5rLmVuZDtcblx0XHR2YXIgYWJvcnRlZCA9IGNodW5rLnRyaW1FbmQocngpO1xuXG5cdFx0Ly8gaWYgY2h1bmsgd2FzIHRyaW1tZWQsIHdlIGhhdmUgYSBuZXcgbGFzdENodW5rXG5cdFx0aWYgKGNodW5rLmVuZCAhPT0gZW5kKSB7XG5cdFx0XHRpZiAodGhpcy5sYXN0Q2h1bmsgPT09IGNodW5rKSB7XG5cdFx0XHRcdHRoaXMubGFzdENodW5rID0gY2h1bmsubmV4dDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ieUVuZFtjaHVuay5lbmRdID0gY2h1bms7XG5cdFx0XHR0aGlzLmJ5U3RhcnRbY2h1bmsubmV4dC5zdGFydF0gPSBjaHVuay5uZXh0O1xuXHRcdFx0dGhpcy5ieUVuZFtjaHVuay5uZXh0LmVuZF0gPSBjaHVuay5uZXh0O1xuXHRcdH1cblxuXHRcdGlmIChhYm9ydGVkKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0Y2h1bmsgPSBjaHVuay5wcmV2aW91cztcblx0fSB3aGlsZSAoY2h1bmspO1xuXG5cdHJldHVybiBmYWxzZTtcbn07XG5cbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS50cmltRW5kID0gZnVuY3Rpb24gdHJpbUVuZCAoY2hhclR5cGUpIHtcblx0dGhpcy50cmltRW5kQWJvcnRlZChjaGFyVHlwZSk7XG5cdHJldHVybiB0aGlzO1xufTtcbk1hZ2ljU3RyaW5nLnByb3RvdHlwZS50cmltU3RhcnRBYm9ydGVkID0gZnVuY3Rpb24gdHJpbVN0YXJ0QWJvcnRlZCAoY2hhclR5cGUpIHtcblx0dmFyIHJ4ID0gbmV3IFJlZ0V4cCgnXicgKyAoY2hhclR5cGUgfHwgJ1xcXFxzJykgKyAnKycpO1xuXG5cdHRoaXMuaW50cm8gPSB0aGlzLmludHJvLnJlcGxhY2UocngsICcnKTtcblx0aWYgKHRoaXMuaW50cm8ubGVuZ3RoKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIGNodW5rID0gdGhpcy5maXJzdENodW5rO1xuXG5cdGRvIHtcblx0XHR2YXIgZW5kID0gY2h1bmsuZW5kO1xuXHRcdHZhciBhYm9ydGVkID0gY2h1bmsudHJpbVN0YXJ0KHJ4KTtcblxuXHRcdGlmIChjaHVuay5lbmQgIT09IGVuZCkge1xuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlLi4uXG5cdFx0XHRpZiAoY2h1bmsgPT09IHRoaXMubGFzdENodW5rKSB7IHRoaXMubGFzdENodW5rID0gY2h1bmsubmV4dDsgfVxuXG5cdFx0XHR0aGlzLmJ5RW5kW2NodW5rLmVuZF0gPSBjaHVuaztcblx0XHRcdHRoaXMuYnlTdGFydFtjaHVuay5uZXh0LnN0YXJ0XSA9IGNodW5rLm5leHQ7XG5cdFx0XHR0aGlzLmJ5RW5kW2NodW5rLm5leHQuZW5kXSA9IGNodW5rLm5leHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGFib3J0ZWQpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRjaHVuayA9IGNodW5rLm5leHQ7XG5cdH0gd2hpbGUgKGNodW5rKTtcblxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5NYWdpY1N0cmluZy5wcm90b3R5cGUudHJpbVN0YXJ0ID0gZnVuY3Rpb24gdHJpbVN0YXJ0IChjaGFyVHlwZSkge1xuXHR0aGlzLnRyaW1TdGFydEFib3J0ZWQoY2hhclR5cGUpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbnZhciBoYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIEJ1bmRsZSA9IGZ1bmN0aW9uIEJ1bmRsZShvcHRpb25zKSB7XG5cdGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG5cdHRoaXMuaW50cm8gPSBvcHRpb25zLmludHJvIHx8ICcnO1xuXHR0aGlzLnNlcGFyYXRvciA9IG9wdGlvbnMuc2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnNlcGFyYXRvciA6ICdcXG4nO1xuXHR0aGlzLnNvdXJjZXMgPSBbXTtcblx0dGhpcy51bmlxdWVTb3VyY2VzID0gW107XG5cdHRoaXMudW5pcXVlU291cmNlSW5kZXhCeUZpbGVuYW1lID0ge307XG59O1xuXG5CdW5kbGUucHJvdG90eXBlLmFkZFNvdXJjZSA9IGZ1bmN0aW9uIGFkZFNvdXJjZSAoc291cmNlKSB7XG5cdGlmIChzb3VyY2UgaW5zdGFuY2VvZiBNYWdpY1N0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmFkZFNvdXJjZSh7XG5cdFx0XHRjb250ZW50OiBzb3VyY2UsXG5cdFx0XHRmaWxlbmFtZTogc291cmNlLmZpbGVuYW1lLFxuXHRcdFx0c2VwYXJhdG9yOiB0aGlzLnNlcGFyYXRvclxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCFpc09iamVjdChzb3VyY2UpIHx8ICFzb3VyY2UuY29udGVudCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignYnVuZGxlLmFkZFNvdXJjZSgpIHRha2VzIGFuIG9iamVjdCB3aXRoIGEgYGNvbnRlbnRgIHByb3BlcnR5LCB3aGljaCBzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgTWFnaWNTdHJpbmcsIGFuZCBhbiBvcHRpb25hbCBgZmlsZW5hbWVgJyk7XG5cdH1cblxuXHRbJ2ZpbGVuYW1lJywgJ2luZGVudEV4Y2x1c2lvblJhbmdlcycsICdzZXBhcmF0b3InXS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcblx0XHRpZiAoIWhhc093blByb3AuY2FsbChzb3VyY2UsIG9wdGlvbikpIHsgc291cmNlW29wdGlvbl0gPSBzb3VyY2UuY29udGVudFtvcHRpb25dOyB9XG5cdH0pO1xuXG5cdGlmIChzb3VyY2Uuc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBUT0RPIHRoZXJlJ3MgYSBidW5jaCBvZiB0aGlzIHNvcnQgb2YgdGhpbmcsIG5lZWRzIGNsZWFuaW5nIHVwXG5cdFx0c291cmNlLnNlcGFyYXRvciA9IHRoaXMuc2VwYXJhdG9yO1xuXHR9XG5cblx0aWYgKHNvdXJjZS5maWxlbmFtZSkge1xuXHRcdGlmICghaGFzT3duUHJvcC5jYWxsKHRoaXMudW5pcXVlU291cmNlSW5kZXhCeUZpbGVuYW1lLCBzb3VyY2UuZmlsZW5hbWUpKSB7XG5cdFx0XHR0aGlzLnVuaXF1ZVNvdXJjZUluZGV4QnlGaWxlbmFtZVtzb3VyY2UuZmlsZW5hbWVdID0gdGhpcy51bmlxdWVTb3VyY2VzLmxlbmd0aDtcblx0XHRcdHRoaXMudW5pcXVlU291cmNlcy5wdXNoKHsgZmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZSwgY29udGVudDogc291cmNlLmNvbnRlbnQub3JpZ2luYWwgfSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciB1bmlxdWVTb3VyY2UgPSB0aGlzLnVuaXF1ZVNvdXJjZXNbdGhpcy51bmlxdWVTb3VyY2VJbmRleEJ5RmlsZW5hbWVbc291cmNlLmZpbGVuYW1lXV07XG5cdFx0XHRpZiAoc291cmNlLmNvbnRlbnQub3JpZ2luYWwgIT09IHVuaXF1ZVNvdXJjZS5jb250ZW50KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigoXCJJbGxlZ2FsIHNvdXJjZTogc2FtZSBmaWxlbmFtZSAoXCIgKyAoc291cmNlLmZpbGVuYW1lKSArIFwiKSwgZGlmZmVyZW50IGNvbnRlbnRzXCIpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkJ1bmRsZS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kIChzdHIsIG9wdGlvbnMpIHtcblx0dGhpcy5hZGRTb3VyY2Uoe1xuXHRcdGNvbnRlbnQ6IG5ldyBNYWdpY1N0cmluZyhzdHIpLFxuXHRcdHNlcGFyYXRvcjogKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXBhcmF0b3IpIHx8ICcnXG5cdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxuQnVuZGxlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcblx0dmFyIGJ1bmRsZSA9IG5ldyBCdW5kbGUoe1xuXHRcdGludHJvOiB0aGlzLmludHJvLFxuXHRcdHNlcGFyYXRvcjogdGhpcy5zZXBhcmF0b3Jcblx0fSk7XG5cblx0dGhpcy5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdGJ1bmRsZS5hZGRTb3VyY2Uoe1xuXHRcdFx0ZmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZSxcblx0XHRcdGNvbnRlbnQ6IHNvdXJjZS5jb250ZW50LmNsb25lKCksXG5cdFx0XHRzZXBhcmF0b3I6IHNvdXJjZS5zZXBhcmF0b3Jcblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIGJ1bmRsZTtcbn07XG5cbkJ1bmRsZS5wcm90b3R5cGUuZ2VuZXJhdGVEZWNvZGVkTWFwID0gZnVuY3Rpb24gZ2VuZXJhdGVEZWNvZGVkTWFwIChvcHRpb25zKSB7XG5cdFx0dmFyIHRoaXMkMSA9IHRoaXM7XG5cdFx0aWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cblx0dmFyIG5hbWVzID0gW107XG5cdHRoaXMuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRPYmplY3Qua2V5cyhzb3VyY2UuY29udGVudC5zdG9yZWROYW1lcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuXHRcdFx0aWYgKCF+bmFtZXMuaW5kZXhPZihuYW1lKSkgeyBuYW1lcy5wdXNoKG5hbWUpOyB9XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHZhciBtYXBwaW5ncyA9IG5ldyBNYXBwaW5ncyhvcHRpb25zLmhpcmVzKTtcblxuXHRpZiAodGhpcy5pbnRybykge1xuXHRcdG1hcHBpbmdzLmFkdmFuY2UodGhpcy5pbnRybyk7XG5cdH1cblxuXHR0aGlzLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlLCBpKSB7XG5cdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRtYXBwaW5ncy5hZHZhbmNlKHRoaXMkMS5zZXBhcmF0b3IpO1xuXHRcdH1cblxuXHRcdHZhciBzb3VyY2VJbmRleCA9IHNvdXJjZS5maWxlbmFtZSA/IHRoaXMkMS51bmlxdWVTb3VyY2VJbmRleEJ5RmlsZW5hbWVbc291cmNlLmZpbGVuYW1lXSA6IC0xO1xuXHRcdHZhciBtYWdpY1N0cmluZyA9IHNvdXJjZS5jb250ZW50O1xuXHRcdHZhciBsb2NhdGUgPSBnZXRMb2NhdG9yKG1hZ2ljU3RyaW5nLm9yaWdpbmFsKTtcblxuXHRcdGlmIChtYWdpY1N0cmluZy5pbnRybykge1xuXHRcdFx0bWFwcGluZ3MuYWR2YW5jZShtYWdpY1N0cmluZy5pbnRybyk7XG5cdFx0fVxuXG5cdFx0bWFnaWNTdHJpbmcuZmlyc3RDaHVuay5lYWNoTmV4dChmdW5jdGlvbiAoY2h1bmspIHtcblx0XHRcdHZhciBsb2MgPSBsb2NhdGUoY2h1bmsuc3RhcnQpO1xuXG5cdFx0XHRpZiAoY2h1bmsuaW50cm8ubGVuZ3RoKSB7IG1hcHBpbmdzLmFkdmFuY2UoY2h1bmsuaW50cm8pOyB9XG5cblx0XHRcdGlmIChzb3VyY2UuZmlsZW5hbWUpIHtcblx0XHRcdFx0aWYgKGNodW5rLmVkaXRlZCkge1xuXHRcdFx0XHRcdG1hcHBpbmdzLmFkZEVkaXQoXG5cdFx0XHRcdFx0XHRzb3VyY2VJbmRleCxcblx0XHRcdFx0XHRcdGNodW5rLmNvbnRlbnQsXG5cdFx0XHRcdFx0XHRsb2MsXG5cdFx0XHRcdFx0XHRjaHVuay5zdG9yZU5hbWUgPyBuYW1lcy5pbmRleE9mKGNodW5rLm9yaWdpbmFsKSA6IC0xXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtYXBwaW5ncy5hZGRVbmVkaXRlZENodW5rKFxuXHRcdFx0XHRcdFx0c291cmNlSW5kZXgsXG5cdFx0XHRcdFx0XHRjaHVuayxcblx0XHRcdFx0XHRcdG1hZ2ljU3RyaW5nLm9yaWdpbmFsLFxuXHRcdFx0XHRcdFx0bG9jLFxuXHRcdFx0XHRcdFx0bWFnaWNTdHJpbmcuc291cmNlbWFwTG9jYXRpb25zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWFwcGluZ3MuYWR2YW5jZShjaHVuay5jb250ZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNodW5rLm91dHJvLmxlbmd0aCkgeyBtYXBwaW5ncy5hZHZhbmNlKGNodW5rLm91dHJvKTsgfVxuXHRcdH0pO1xuXG5cdFx0aWYgKG1hZ2ljU3RyaW5nLm91dHJvKSB7XG5cdFx0XHRtYXBwaW5ncy5hZHZhbmNlKG1hZ2ljU3RyaW5nLm91dHJvKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB7XG5cdFx0ZmlsZTogb3B0aW9ucy5maWxlID8gb3B0aW9ucy5maWxlLnNwbGl0KC9bL1xcXFxdLykucG9wKCkgOiBudWxsLFxuXHRcdHNvdXJjZXM6IHRoaXMudW5pcXVlU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMuZmlsZSA/IGdldFJlbGF0aXZlUGF0aChvcHRpb25zLmZpbGUsIHNvdXJjZS5maWxlbmFtZSkgOiBzb3VyY2UuZmlsZW5hbWU7XG5cdFx0fSksXG5cdFx0c291cmNlc0NvbnRlbnQ6IHRoaXMudW5pcXVlU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMuaW5jbHVkZUNvbnRlbnQgPyBzb3VyY2UuY29udGVudCA6IG51bGw7XG5cdFx0fSksXG5cdFx0bmFtZXM6IG5hbWVzLFxuXHRcdG1hcHBpbmdzOiBtYXBwaW5ncy5yYXdcblx0fTtcbn07XG5cbkJ1bmRsZS5wcm90b3R5cGUuZ2VuZXJhdGVNYXAgPSBmdW5jdGlvbiBnZW5lcmF0ZU1hcCAob3B0aW9ucykge1xuXHRyZXR1cm4gbmV3IFNvdXJjZU1hcCh0aGlzLmdlbmVyYXRlRGVjb2RlZE1hcChvcHRpb25zKSk7XG59O1xuXG5CdW5kbGUucHJvdG90eXBlLmdldEluZGVudFN0cmluZyA9IGZ1bmN0aW9uIGdldEluZGVudFN0cmluZyAoKSB7XG5cdHZhciBpbmRlbnRTdHJpbmdDb3VudHMgPSB7fTtcblxuXHR0aGlzLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdFx0dmFyIGluZGVudFN0ciA9IHNvdXJjZS5jb250ZW50LmluZGVudFN0cjtcblxuXHRcdGlmIChpbmRlbnRTdHIgPT09IG51bGwpIHsgcmV0dXJuOyB9XG5cblx0XHRpZiAoIWluZGVudFN0cmluZ0NvdW50c1tpbmRlbnRTdHJdKSB7IGluZGVudFN0cmluZ0NvdW50c1tpbmRlbnRTdHJdID0gMDsgfVxuXHRcdGluZGVudFN0cmluZ0NvdW50c1tpbmRlbnRTdHJdICs9IDE7XG5cdH0pO1xuXG5cdHJldHVybiAoXG5cdFx0T2JqZWN0LmtleXMoaW5kZW50U3RyaW5nQ291bnRzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRyZXR1cm4gaW5kZW50U3RyaW5nQ291bnRzW2FdIC0gaW5kZW50U3RyaW5nQ291bnRzW2JdO1xuXHRcdH0pWzBdIHx8ICdcXHQnXG5cdCk7XG59O1xuXG5CdW5kbGUucHJvdG90eXBlLmluZGVudCA9IGZ1bmN0aW9uIGluZGVudCAoaW5kZW50U3RyKSB7XG5cdFx0dmFyIHRoaXMkMSA9IHRoaXM7XG5cblx0aWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0aW5kZW50U3RyID0gdGhpcy5nZXRJbmRlbnRTdHJpbmcoKTtcblx0fVxuXG5cdGlmIChpbmRlbnRTdHIgPT09ICcnKSB7IHJldHVybiB0aGlzOyB9IC8vIG5vb3BcblxuXHR2YXIgdHJhaWxpbmdOZXdsaW5lID0gIXRoaXMuaW50cm8gfHwgdGhpcy5pbnRyby5zbGljZSgtMSkgPT09ICdcXG4nO1xuXG5cdHRoaXMuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UsIGkpIHtcblx0XHR2YXIgc2VwYXJhdG9yID0gc291cmNlLnNlcGFyYXRvciAhPT0gdW5kZWZpbmVkID8gc291cmNlLnNlcGFyYXRvciA6IHRoaXMkMS5zZXBhcmF0b3I7XG5cdFx0dmFyIGluZGVudFN0YXJ0ID0gdHJhaWxpbmdOZXdsaW5lIHx8IChpID4gMCAmJiAvXFxyP1xcbiQvLnRlc3Qoc2VwYXJhdG9yKSk7XG5cblx0XHRzb3VyY2UuY29udGVudC5pbmRlbnQoaW5kZW50U3RyLCB7XG5cdFx0XHRleGNsdWRlOiBzb3VyY2UuaW5kZW50RXhjbHVzaW9uUmFuZ2VzLFxuXHRcdFx0aW5kZW50U3RhcnQ6IGluZGVudFN0YXJ0IC8vOiB0cmFpbGluZ05ld2xpbmUgfHwgL1xccj9cXG4kLy50ZXN0KCBzZXBhcmF0b3IgKSAgLy90cnVlLy8vXFxyP1xcbi8udGVzdCggc2VwYXJhdG9yIClcblx0XHR9KTtcblxuXHRcdHRyYWlsaW5nTmV3bGluZSA9IHNvdXJjZS5jb250ZW50Lmxhc3RDaGFyKCkgPT09ICdcXG4nO1xuXHR9KTtcblxuXHRpZiAodGhpcy5pbnRybykge1xuXHRcdHRoaXMuaW50cm8gPVxuXHRcdFx0aW5kZW50U3RyICtcblx0XHRcdHRoaXMuaW50cm8ucmVwbGFjZSgvXlteXFxuXS9nbSwgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuXHRcdFx0XHRyZXR1cm4gaW5kZXggPiAwID8gaW5kZW50U3RyICsgbWF0Y2ggOiBtYXRjaDtcblx0XHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5CdW5kbGUucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiBwcmVwZW5kIChzdHIpIHtcblx0dGhpcy5pbnRybyA9IHN0ciArIHRoaXMuaW50cm87XG5cdHJldHVybiB0aGlzO1xufTtcblxuQnVuZGxlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcblx0XHR2YXIgdGhpcyQxID0gdGhpcztcblxuXHR2YXIgYm9keSA9IHRoaXMuc291cmNlc1xuXHRcdC5tYXAoZnVuY3Rpb24gKHNvdXJjZSwgaSkge1xuXHRcdFx0dmFyIHNlcGFyYXRvciA9IHNvdXJjZS5zZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IHNvdXJjZS5zZXBhcmF0b3IgOiB0aGlzJDEuc2VwYXJhdG9yO1xuXHRcdFx0dmFyIHN0ciA9IChpID4gMCA/IHNlcGFyYXRvciA6ICcnKSArIHNvdXJjZS5jb250ZW50LnRvU3RyaW5nKCk7XG5cblx0XHRcdHJldHVybiBzdHI7XG5cdFx0fSlcblx0XHQuam9pbignJyk7XG5cblx0cmV0dXJuIHRoaXMuaW50cm8gKyBib2R5O1xufTtcblxuQnVuZGxlLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gaXNFbXB0eSAoKSB7XG5cdGlmICh0aGlzLmludHJvLmxlbmd0aCAmJiB0aGlzLmludHJvLnRyaW0oKSlcblx0XHR7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodGhpcy5zb3VyY2VzLnNvbWUoZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gIXNvdXJjZS5jb250ZW50LmlzRW1wdHkoKTsgfSkpXG5cdFx0eyByZXR1cm4gZmFsc2U7IH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG5CdW5kbGUucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aCAoKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZXMucmVkdWNlKGZ1bmN0aW9uIChsZW5ndGgsIHNvdXJjZSkgeyByZXR1cm4gbGVuZ3RoICsgc291cmNlLmNvbnRlbnQubGVuZ3RoKCk7IH0sIHRoaXMuaW50cm8ubGVuZ3RoKTtcbn07XG5cbkJ1bmRsZS5wcm90b3R5cGUudHJpbUxpbmVzID0gZnVuY3Rpb24gdHJpbUxpbmVzICgpIHtcblx0cmV0dXJuIHRoaXMudHJpbSgnW1xcXFxyXFxcXG5dJyk7XG59O1xuXG5CdW5kbGUucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbiB0cmltIChjaGFyVHlwZSkge1xuXHRyZXR1cm4gdGhpcy50cmltU3RhcnQoY2hhclR5cGUpLnRyaW1FbmQoY2hhclR5cGUpO1xufTtcblxuQnVuZGxlLnByb3RvdHlwZS50cmltU3RhcnQgPSBmdW5jdGlvbiB0cmltU3RhcnQgKGNoYXJUeXBlKSB7XG5cdHZhciByeCA9IG5ldyBSZWdFeHAoJ14nICsgKGNoYXJUeXBlIHx8ICdcXFxccycpICsgJysnKTtcblx0dGhpcy5pbnRybyA9IHRoaXMuaW50cm8ucmVwbGFjZShyeCwgJycpO1xuXG5cdGlmICghdGhpcy5pbnRybykge1xuXHRcdHZhciBzb3VyY2U7XG5cdFx0dmFyIGkgPSAwO1xuXG5cdFx0ZG8ge1xuXHRcdFx0c291cmNlID0gdGhpcy5zb3VyY2VzW2krK107XG5cdFx0XHRpZiAoIXNvdXJjZSkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IHdoaWxlICghc291cmNlLmNvbnRlbnQudHJpbVN0YXJ0QWJvcnRlZChjaGFyVHlwZSkpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5CdW5kbGUucHJvdG90eXBlLnRyaW1FbmQgPSBmdW5jdGlvbiB0cmltRW5kIChjaGFyVHlwZSkge1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKChjaGFyVHlwZSB8fCAnXFxcXHMnKSArICcrJCcpO1xuXG5cdHZhciBzb3VyY2U7XG5cdHZhciBpID0gdGhpcy5zb3VyY2VzLmxlbmd0aCAtIDE7XG5cblx0ZG8ge1xuXHRcdHNvdXJjZSA9IHRoaXMuc291cmNlc1tpLS1dO1xuXHRcdGlmICghc291cmNlKSB7XG5cdFx0XHR0aGlzLmludHJvID0gdGhpcy5pbnRyby5yZXBsYWNlKHJ4LCAnJyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0gd2hpbGUgKCFzb3VyY2UuY29udGVudC50cmltRW5kQWJvcnRlZChjaGFyVHlwZSkpO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWFnaWNTdHJpbmc7XG5leHBvcnQgeyBCdW5kbGUsIFNvdXJjZU1hcCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFnaWMtc3RyaW5nLmVzLmpzLm1hcFxuIl0sIm5hbWVzIjpbInRoaXMkMSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSSxhQUFh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QUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQjtBQUNBLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxDQUFDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDOUIsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDM0QsQ0FBQyxJQUFJLE9BQU8sR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzdEO0FBQ0EsQ0FBQyxJQUFJLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEVBQUU7QUFDMUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEVBQUU7QUFDL0M7QUFDQSxDQUFDLElBQUksT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtBQUN2QyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM1QztBQUNBLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0RCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzdCLEVBQUU7QUFDRjtBQUNBLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDMUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDOUI7QUFDQSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQzNDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDMUMsQ0FBQyxPQUFPLElBQUksQ0FBQztBQUNiLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3BGLENBQUMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsRUFBRTtBQUNsRztBQUNBLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckQsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNqRDtBQUNBLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRTtBQUM3RSxDQUFDLElBQUksS0FBSyxLQUFLLEdBQUc7QUFDbEIsRUFBRSxF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QU8sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUNuQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLEdBQUcsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRTtBQUM3RCxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNyQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzlCLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEdBQUcsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRTtBQUMzRCxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUNuQyxHQUFHO0FBQ0gsRUFBRSxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ2xDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FB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