@cloudbase/container 2.5.29-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,536 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ if (typeof global !== 'undefined') {
38
+ }
39
+ else if (typeof window !== 'undefined') {
40
+ window.global = window;
41
+ }
42
+ else if (typeof self !== 'undefined') {
43
+ self.global = self;
44
+ }
45
+ else {
46
+ throw new Error('cannot export Go (neither global, window nor self is defined)');
47
+ }
48
+ if (!global.require && typeof require !== 'undefined') {
49
+ }
50
+ var enosys = function () {
51
+ var err = new Error('not implemented');
52
+ err.code = 'ENOSYS';
53
+ return err;
54
+ };
55
+ if (!global.fs) {
56
+ var outputBuf_1 = '';
57
+ global.fs = {
58
+ constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 },
59
+ writeSync: function (fd, buf) {
60
+ outputBuf_1 += decoder.decode(buf);
61
+ var nl = outputBuf_1.lastIndexOf('\n');
62
+ if (nl != -1) {
63
+ console.log(outputBuf_1.substr(0, nl));
64
+ outputBuf_1 = outputBuf_1.substr(nl + 1);
65
+ }
66
+ return buf.length;
67
+ },
68
+ write: function (fd, buf, offset, length, position, callback) {
69
+ if (offset !== 0 || length !== buf.length || position !== null) {
70
+ callback(enosys());
71
+ return;
72
+ }
73
+ var n = this.writeSync(fd, buf);
74
+ callback(null, n);
75
+ },
76
+ chmod: function (path, mode, callback) {
77
+ callback(enosys());
78
+ },
79
+ chown: function (path, uid, gid, callback) {
80
+ callback(enosys());
81
+ },
82
+ close: function (fd, callback) {
83
+ callback(enosys());
84
+ },
85
+ fchmod: function (fd, mode, callback) {
86
+ callback(enosys());
87
+ },
88
+ fchown: function (fd, uid, gid, callback) {
89
+ callback(enosys());
90
+ },
91
+ fstat: function (fd, callback) {
92
+ callback(enosys());
93
+ },
94
+ fsync: function (fd, callback) {
95
+ callback(null);
96
+ },
97
+ ftruncate: function (fd, length, callback) {
98
+ callback(enosys());
99
+ },
100
+ lchown: function (path, uid, gid, callback) {
101
+ callback(enosys());
102
+ },
103
+ link: function (path, link, callback) {
104
+ callback(enosys());
105
+ },
106
+ lstat: function (path, callback) {
107
+ callback(enosys());
108
+ },
109
+ mkdir: function (path, perm, callback) {
110
+ callback(enosys());
111
+ },
112
+ open: function (path, flags, mode, callback) {
113
+ callback(enosys());
114
+ },
115
+ read: function (fd, buffer, offset, length, position, callback) {
116
+ callback(enosys());
117
+ },
118
+ readdir: function (path, callback) {
119
+ callback(enosys());
120
+ },
121
+ readlink: function (path, callback) {
122
+ callback(enosys());
123
+ },
124
+ rename: function (from, to, callback) {
125
+ callback(enosys());
126
+ },
127
+ rmdir: function (path, callback) {
128
+ callback(enosys());
129
+ },
130
+ stat: function (path, callback) {
131
+ callback(enosys());
132
+ },
133
+ symlink: function (path, link, callback) {
134
+ callback(enosys());
135
+ },
136
+ truncate: function (path, length, callback) {
137
+ callback(enosys());
138
+ },
139
+ unlink: function (path, callback) {
140
+ callback(enosys());
141
+ },
142
+ utimes: function (path, atime, mtime, callback) {
143
+ callback(enosys());
144
+ },
145
+ };
146
+ }
147
+ if (!global.process) {
148
+ global.process = {
149
+ getuid: function () {
150
+ return -1;
151
+ },
152
+ getgid: function () {
153
+ return -1;
154
+ },
155
+ geteuid: function () {
156
+ return -1;
157
+ },
158
+ getegid: function () {
159
+ return -1;
160
+ },
161
+ getgroups: function () {
162
+ throw enosys();
163
+ },
164
+ pid: -1,
165
+ ppid: -1,
166
+ umask: function () {
167
+ throw enosys();
168
+ },
169
+ cwd: function () {
170
+ throw enosys();
171
+ },
172
+ chdir: function () {
173
+ throw enosys();
174
+ },
175
+ };
176
+ }
177
+ if (!global.crypto) {
178
+ throw new Error('globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)');
179
+ }
180
+ if (!global.performance) {
181
+ throw new Error('globalThis.performance is not available, polyfill required (performance.now only)');
182
+ }
183
+ if (!global.TextEncoder) {
184
+ throw new Error('globalThis.TextEncoder is not available, polyfill required');
185
+ }
186
+ if (!global.TextDecoder) {
187
+ throw new Error('globalThis.TextDecoder is not available, polyfill required');
188
+ }
189
+ var encoder = new TextEncoder('utf-8');
190
+ var decoder = new TextDecoder('utf-8');
191
+ var logLine = [];
192
+ global.Go = (function () {
193
+ function class_1() {
194
+ var _this = this;
195
+ this._callbackTimeouts = new Map();
196
+ this._nextCallbackTimeoutID = 1;
197
+ var mem = function () {
198
+ return new DataView(_this._inst.exports.memory.buffer);
199
+ };
200
+ var setInt64 = function (addr, v) {
201
+ mem().setUint32(addr + 0, v, true);
202
+ mem().setUint32(addr + 4, Math.floor(v / 4294967296), true);
203
+ };
204
+ var getInt64 = function (addr) {
205
+ var low = mem().getUint32(addr + 0, true);
206
+ var high = mem().getInt32(addr + 4, true);
207
+ return low + high * 4294967296;
208
+ };
209
+ var loadValue = function (addr) {
210
+ var f = mem().getFloat64(addr, true);
211
+ if (f === 0) {
212
+ return undefined;
213
+ }
214
+ if (!isNaN(f)) {
215
+ return f;
216
+ }
217
+ var id = mem().getUint32(addr, true);
218
+ return _this._values[id];
219
+ };
220
+ var storeValue = function (addr, v) {
221
+ var nanHead = 0x7ff80000;
222
+ if (typeof v === 'number') {
223
+ if (isNaN(v)) {
224
+ mem().setUint32(addr + 4, nanHead, true);
225
+ mem().setUint32(addr, 0, true);
226
+ return;
227
+ }
228
+ if (v === 0) {
229
+ mem().setUint32(addr + 4, nanHead, true);
230
+ mem().setUint32(addr, 1, true);
231
+ return;
232
+ }
233
+ mem().setFloat64(addr, v, true);
234
+ return;
235
+ }
236
+ switch (v) {
237
+ case undefined:
238
+ mem().setFloat64(addr, 0, true);
239
+ return;
240
+ case null:
241
+ mem().setUint32(addr + 4, nanHead, true);
242
+ mem().setUint32(addr, 2, true);
243
+ return;
244
+ case true:
245
+ mem().setUint32(addr + 4, nanHead, true);
246
+ mem().setUint32(addr, 3, true);
247
+ return;
248
+ case false:
249
+ mem().setUint32(addr + 4, nanHead, true);
250
+ mem().setUint32(addr, 4, true);
251
+ return;
252
+ }
253
+ var id = _this._ids.get(v);
254
+ if (id === undefined) {
255
+ id = _this._idPool.pop();
256
+ if (id === undefined) {
257
+ id = _this._values.length;
258
+ }
259
+ _this._values[id] = v;
260
+ _this._goRefCounts[id] = 0;
261
+ _this._ids.set(v, id);
262
+ }
263
+ _this._goRefCounts[id]++;
264
+ var typeFlag = 1;
265
+ switch (typeof v) {
266
+ case 'string':
267
+ typeFlag = 2;
268
+ break;
269
+ case 'symbol':
270
+ typeFlag = 3;
271
+ break;
272
+ case 'function':
273
+ typeFlag = 4;
274
+ break;
275
+ }
276
+ mem().setUint32(addr + 4, nanHead | typeFlag, true);
277
+ mem().setUint32(addr, id, true);
278
+ };
279
+ var loadSlice = function (array, len, cap) {
280
+ return new Uint8Array(_this._inst.exports.memory.buffer, array, len);
281
+ };
282
+ var loadSliceOfValues = function (array, len, cap) {
283
+ var a = new Array(len);
284
+ for (var i = 0; i < len; i++) {
285
+ a[i] = loadValue(array + i * 8);
286
+ }
287
+ return a;
288
+ };
289
+ var loadString = function (ptr, len) {
290
+ return decoder.decode(new DataView(_this._inst.exports.memory.buffer, ptr, len));
291
+ };
292
+ var timeOrigin = Date.now() - performance.now();
293
+ this.importObject = {
294
+ wasi_snapshot_preview1: {
295
+ fd_write: function (fd, iovs_ptr, iovs_len, nwritten_ptr) {
296
+ var nwritten = 0;
297
+ if (fd == 1) {
298
+ for (var iovs_i = 0; iovs_i < iovs_len; iovs_i++) {
299
+ var iov_ptr = iovs_ptr + iovs_i * 8;
300
+ var ptr = mem().getUint32(iov_ptr + 0, true);
301
+ var len = mem().getUint32(iov_ptr + 4, true);
302
+ nwritten += len;
303
+ for (var i = 0; i < len; i++) {
304
+ var c = mem().getUint8(ptr + i);
305
+ if (c == 13) {
306
+ }
307
+ else if (c == 10) {
308
+ var line = decoder.decode(new Uint8Array(logLine));
309
+ logLine = [];
310
+ console.log(line);
311
+ }
312
+ else {
313
+ logLine.push(c);
314
+ }
315
+ }
316
+ }
317
+ }
318
+ else {
319
+ console.error('invalid file descriptor:', fd);
320
+ }
321
+ mem().setUint32(nwritten_ptr, nwritten, true);
322
+ return 0;
323
+ },
324
+ fd_close: function () { return 0; },
325
+ fd_fdstat_get: function () { return 0; },
326
+ fd_seek: function () { return 0; },
327
+ proc_exit: function (code) {
328
+ if (global.process) {
329
+ process.exit(code);
330
+ }
331
+ else {
332
+ throw 'trying to exit with code ' + code;
333
+ }
334
+ },
335
+ random_get: function (bufPtr, bufLen) {
336
+ crypto.getRandomValues(loadSlice(bufPtr, bufLen));
337
+ return 0;
338
+ },
339
+ },
340
+ env: {
341
+ 'runtime.ticks': function () {
342
+ return timeOrigin + performance.now();
343
+ },
344
+ 'runtime.sleepTicks': function (timeout) {
345
+ setTimeout(_this._inst.exports.go_scheduler, timeout);
346
+ },
347
+ 'syscall/js.finalizeRef': function (sp) {
348
+ var id = mem().getUint32(sp, true);
349
+ _this._goRefCounts[id]--;
350
+ if (_this._goRefCounts[id] === 0) {
351
+ var v = _this._values[id];
352
+ _this._values[id] = null;
353
+ _this._ids.delete(v);
354
+ _this._idPool.push(id);
355
+ }
356
+ },
357
+ 'syscall/js.stringVal': function (ret_ptr, value_ptr, value_len) {
358
+ var s = loadString(value_ptr, value_len);
359
+ storeValue(ret_ptr, s);
360
+ },
361
+ 'syscall/js.valueGet': function (retval, v_addr, p_ptr, p_len) {
362
+ var prop = loadString(p_ptr, p_len);
363
+ var value = loadValue(v_addr);
364
+ var result = Reflect.get(value, prop);
365
+ storeValue(retval, result);
366
+ },
367
+ 'syscall/js.valueSet': function (v_addr, p_ptr, p_len, x_addr) {
368
+ var v = loadValue(v_addr);
369
+ var p = loadString(p_ptr, p_len);
370
+ var x = loadValue(x_addr);
371
+ Reflect.set(v, p, x);
372
+ },
373
+ 'syscall/js.valueDelete': function (v_addr, p_ptr, p_len) {
374
+ var v = loadValue(v_addr);
375
+ var p = loadString(p_ptr, p_len);
376
+ Reflect.deleteProperty(v, p);
377
+ },
378
+ 'syscall/js.valueIndex': function (ret_addr, v_addr, i) {
379
+ storeValue(ret_addr, Reflect.get(loadValue(v_addr), i));
380
+ },
381
+ 'syscall/js.valueSetIndex': function (v_addr, i, x_addr) {
382
+ Reflect.set(loadValue(v_addr), i, loadValue(x_addr));
383
+ },
384
+ 'syscall/js.valueCall': function (ret_addr, v_addr, m_ptr, m_len, args_ptr, args_len, args_cap) {
385
+ var v = loadValue(v_addr);
386
+ var name = loadString(m_ptr, m_len);
387
+ var args = loadSliceOfValues(args_ptr, args_len, args_cap);
388
+ try {
389
+ var m = Reflect.get(v, name);
390
+ storeValue(ret_addr, Reflect.apply(m, v, args));
391
+ mem().setUint8(ret_addr + 8, 1);
392
+ }
393
+ catch (err) {
394
+ storeValue(ret_addr, err);
395
+ mem().setUint8(ret_addr + 8, 0);
396
+ }
397
+ },
398
+ 'syscall/js.valueInvoke': function (ret_addr, v_addr, args_ptr, args_len, args_cap) {
399
+ try {
400
+ var v = loadValue(v_addr);
401
+ var args = loadSliceOfValues(args_ptr, args_len, args_cap);
402
+ storeValue(ret_addr, Reflect.apply(v, undefined, args));
403
+ mem().setUint8(ret_addr + 8, 1);
404
+ }
405
+ catch (err) {
406
+ storeValue(ret_addr, err);
407
+ mem().setUint8(ret_addr + 8, 0);
408
+ }
409
+ },
410
+ 'syscall/js.valueNew': function (ret_addr, v_addr, args_ptr, args_len, args_cap) {
411
+ var v = loadValue(v_addr);
412
+ var args = loadSliceOfValues(args_ptr, args_len, args_cap);
413
+ try {
414
+ storeValue(ret_addr, Reflect.construct(v, args));
415
+ mem().setUint8(ret_addr + 8, 1);
416
+ }
417
+ catch (err) {
418
+ storeValue(ret_addr, err);
419
+ mem().setUint8(ret_addr + 8, 0);
420
+ }
421
+ },
422
+ 'syscall/js.valueLength': function (v_addr) {
423
+ return loadValue(v_addr).length;
424
+ },
425
+ 'syscall/js.valuePrepareString': function (ret_addr, v_addr) {
426
+ var s = String(loadValue(v_addr));
427
+ var str = encoder.encode(s);
428
+ storeValue(ret_addr, str);
429
+ setInt64(ret_addr + 8, str.length);
430
+ },
431
+ 'syscall/js.valueLoadString': function (v_addr, slice_ptr, slice_len, slice_cap) {
432
+ var str = loadValue(v_addr);
433
+ loadSlice(slice_ptr, slice_len, slice_cap).set(str);
434
+ },
435
+ 'syscall/js.valueInstanceOf': function (v_addr, t_addr) {
436
+ return loadValue(v_addr) instanceof loadValue(t_addr);
437
+ },
438
+ 'syscall/js.copyBytesToGo': function (ret_addr, dest_addr, dest_len, dest_cap, source_addr) {
439
+ var num_bytes_copied_addr = ret_addr;
440
+ var returned_status_addr = ret_addr + 4;
441
+ var dst = loadSlice(dest_addr, dest_len);
442
+ var src = loadValue(source_addr);
443
+ if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {
444
+ mem().setUint8(returned_status_addr, 0);
445
+ return;
446
+ }
447
+ var toCopy = src.subarray(0, dst.length);
448
+ dst.set(toCopy);
449
+ setInt64(num_bytes_copied_addr, toCopy.length);
450
+ mem().setUint8(returned_status_addr, 1);
451
+ },
452
+ 'syscall/js.copyBytesToJS': function (ret_addr, dest_addr, source_addr, source_len, source_cap) {
453
+ var num_bytes_copied_addr = ret_addr;
454
+ var returned_status_addr = ret_addr + 4;
455
+ var dst = loadValue(dest_addr);
456
+ var src = loadSlice(source_addr, source_len);
457
+ if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {
458
+ mem().setUint8(returned_status_addr, 0);
459
+ return;
460
+ }
461
+ var toCopy = src.subarray(0, dst.length);
462
+ dst.set(toCopy);
463
+ setInt64(num_bytes_copied_addr, toCopy.length);
464
+ mem().setUint8(returned_status_addr, 1);
465
+ },
466
+ },
467
+ };
468
+ }
469
+ class_1.prototype.run = function (instance) {
470
+ return __awaiter(this, void 0, void 0, function () {
471
+ var mem, callbackPromise;
472
+ var _this = this;
473
+ return __generator(this, function (_a) {
474
+ switch (_a.label) {
475
+ case 0:
476
+ this._inst = instance;
477
+ this._values = [
478
+ NaN,
479
+ 0,
480
+ null,
481
+ true,
482
+ false,
483
+ global,
484
+ this,
485
+ ];
486
+ this._goRefCounts = [];
487
+ this._ids = new Map();
488
+ this._idPool = [];
489
+ this.exited = false;
490
+ mem = new DataView(this._inst.exports.memory.buffer);
491
+ _a.label = 1;
492
+ case 1:
493
+ if (!true) return [3, 3];
494
+ callbackPromise = new Promise(function (resolve) {
495
+ _this._resolveCallbackPromise = function () {
496
+ if (_this.exited) {
497
+ throw new Error('bad callback: Go program has already exited');
498
+ }
499
+ setTimeout(resolve, 0);
500
+ };
501
+ });
502
+ this._inst.exports._start();
503
+ if (this.exited) {
504
+ return [3, 3];
505
+ }
506
+ return [4, callbackPromise];
507
+ case 2:
508
+ _a.sent();
509
+ return [3, 1];
510
+ case 3: return [2];
511
+ }
512
+ });
513
+ });
514
+ };
515
+ class_1.prototype._resume = function () {
516
+ if (this.exited) {
517
+ throw new Error('Go program has already exited');
518
+ }
519
+ this._inst.exports.resume();
520
+ if (this.exited) {
521
+ this._resolveExitPromise();
522
+ }
523
+ };
524
+ class_1.prototype._makeFuncWrapper = function (id) {
525
+ var go = this;
526
+ return function () {
527
+ var event = { id: id, this: this, args: arguments };
528
+ go._pendingEvent = event;
529
+ go._resume();
530
+ return event.result;
531
+ };
532
+ };
533
+ return class_1;
534
+ }());
535
+ export default global.Go;
536
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29fd2Ftc19leGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dvX3dhbXNfZXhlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtDQUVsQztLQUFNLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0NBQ3ZCO0tBQU0sSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLEVBQUU7SUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7Q0FDbkI7S0FBTTtJQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQTtDQUNqRjtBQUVELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtDQUV0RDtBQU1ELElBQU0sTUFBTSxHQUFHO0lBQ2IsSUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUN4QyxHQUFHLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQTtJQUNuQixPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMsQ0FBQTtBQUVELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO0lBQ2QsSUFBSSxXQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLE1BQU0sQ0FBQyxFQUFFLEdBQUc7UUFDVixTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRTtRQUMzRixTQUFTLFlBQUMsRUFBRSxFQUFFLEdBQUc7WUFDZixXQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNoQyxJQUFNLEVBQUUsR0FBRyxXQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDcEMsV0FBUyxHQUFHLFdBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO2FBQ3JDO1lBQ0QsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFBO1FBQ25CLENBQUM7UUFDRCxLQUFLLFlBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRO1lBQy9DLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUM5RCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtnQkFDbEIsT0FBTTthQUNQO1lBQ0QsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDakMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNuQixDQUFDO1FBQ0QsS0FBSyxZQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUTtZQUN4QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsS0FBSyxZQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVE7WUFDNUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUNELEtBQUssWUFBQyxFQUFFLEVBQUUsUUFBUTtZQUNoQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsTUFBTSxZQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUTtZQUN2QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsTUFBTSxZQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVE7WUFDM0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUNELEtBQUssWUFBQyxFQUFFLEVBQUUsUUFBUTtZQUNoQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsS0FBSyxZQUFDLEVBQUUsRUFBRSxRQUFRO1lBQ2hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQixDQUFDO1FBQ0QsU0FBUyxZQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUTtZQUM1QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsTUFBTSxZQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVE7WUFDN0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUNELElBQUksWUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVE7WUFDdkIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUNELEtBQUssWUFBQyxJQUFJLEVBQUUsUUFBUTtZQUNsQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsS0FBSyxZQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUTtZQUN4QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBQ0QsSUFBSSxZQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVE7WUFDOUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUNELElBQUksWUFBQyxFQUFFLEVB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QVA7UUFDRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7U0FDakQ7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtTQUMzQjtJQUNILENBQUM7SUFFRCxrQ0FBZ0IsR0FBaEIsVUFBaUIsRUFBRTtRQUNqQixJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDZixPQUFPO1lBQ0wsSUFBTSxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO1lBQ3JELEVBQUUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFBO1lBQ3hCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNaLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUNyQixDQUFDLENBQUE7SUFDSCxDQUFDO0lBQ0gsY0FBQztBQUFELENBQUMsQUFyWVcsR0FxWVgsQ0FBQTtBQUVELGVBQWUsTUFBTSxDQUFDLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1ub2NoZWNrXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4vLyBUaGlzIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgZm9yIHVzZSBieSB0aGUgVGlueUdvIGNvbXBpbGVyLlxuXG4vLyBNYXAgbXVsdGlwbGUgSmF2YVNjcmlwdCBlbnZpcm9ubWVudHMgdG8gYSBzaW5nbGUgY29tbW9uIEFQSSxcbi8vIHByZWZlcnJpbmcgd2ViIHN0YW5kYXJkcyBvdmVyIE5vZGUuanMgQVBJLlxuLy9cbi8vIEVudmlyb25tZW50cyBjb25zaWRlcmVkOlxuLy8gLSBCcm93c2Vyc1xuLy8gLSBOb2RlLmpzXG4vLyAtIEVsZWN0cm9uXG4vLyAtIFBhcmNlbFxuXG5pZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gZ2xvYmFsIGFscmVhZHkgZXhpc3RzXG59IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdpbmRvdy5nbG9iYWwgPSB3aW5kb3dcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gIHNlbGYuZ2xvYmFsID0gc2VsZlxufSBlbHNlIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZXhwb3J0IEdvIChuZWl0aGVyIGdsb2JhbCwgd2luZG93IG5vciBzZWxmIGlzIGRlZmluZWQpJylcbn1cblxuaWYgKCFnbG9iYWwucmVxdWlyZSAmJiB0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gZ2xvYmFsLnJlcXVpcmUgPSByZXF1aXJlXG59XG5cbi8vIGlmICghZ2xvYmFsLmZzICYmIGdsb2JhbC5yZXF1aXJlKSB7XG4vLyAgIGdsb2JhbC5mcyA9IHJlcXVpcmUoJ2ZzJylcbi8vIH1cblxuY29uc3QgZW5vc3lzID0gKCkgPT4ge1xuICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIGVyci5jb2RlID0gJ0VOT1NZUydcbiAgcmV0dXJuIGVyclxufVxuXG5pZiAoIWdsb2JhbC5mcykge1xuICBsZXQgb3V0cHV0QnVmID0gJydcbiAgZ2xvYmFsLmZzID0ge1xuICAgIGNvbnN0YW50czogeyBPX1dST05MWTogLTEsIE9fUkRXUjogLTEsIE9fQ1JFQVQ6IC0xLCBPX1RSVU5DOiAtMSwgT19BUFBFTkQ6IC0xLCBPX0VYQ0w6IC0xIH0sIC8vIHVudXNlZFxuICAgIHdyaXRlU3luYyhmZCwgYnVmKSB7XG4gICAgICBvdXRwdXRCdWYgKz0gZGVjb2Rlci5kZWNvZGUoYnVmKVxuICAgICAgY29uc3QgbmwgPSBvdXRwdXRCdWYubGFzdEluZGV4T2YoJ1xcbicpXG4gICAgICBpZiAobmwgIT0gLTEpIHtcbiAgICAgICAgY29uc29sZS5sb2cob3V0cHV0QnVmLnN1YnN0cigwLCBubCkpXG4gICAgICAgIG91dHB1dEJ1ZiA9IG91dHB1dEJ1Zi5zdWJzdHIobmwgKyAxKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1Zi5sZW5ndGhcbiAgICB9LFxuICAgIHdyaXRlKGZkLCBidWYsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvZmZzZXQgIT09IDAgfHwgbGVuZ3RoICE9PSBidWYubGVuZ3RoIHx8IHBvc2l0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNhbGxiYWNrKGVub3N5cygpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IG4gPSB0aGlzLndyaXRlU3luYyhmZCwgYnVmKVxuICAgICAgY2FsbGJhY2sobnVsbCwgbilcbiAgICB9LFxuICAgIGNobW9kKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhlbm9zeXMoKSlcbiAgICB9LFxuICAgIGNob3duKHBhdGgsIHVpZCwgZ2lkLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICBjbG9zZShmZCwgY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKGVub3N5cygpKVxuICAgIH0sXG4gICAgZmNobW9kKGZkLCBtb2RlLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICBmY2hvd24oZmQsIHVpZCwgZ2lkLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICBmc3RhdChmZCwgY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKGVub3N5cygpKVxuICAgIH0sXG4gICAgZnN5bmMoZmQsIGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhudWxsKVxuICAgIH0sXG4gICAgZnRydW5jYXRlKGZkLCBsZW5ndGgsIGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhlbm9zeXMoKSlcbiAgICB9LFxuICAgIGxjaG93bihwYXRoLCB1aWQsIGdpZCwgY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKGVub3N5cygpKVxuICAgIH0sXG4gICAgbGluayhwYXRoLCBsaW5rLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICBsc3RhdChwYXRoLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICBta2RpcihwYXRoLCBwZXJtLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICBvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICByZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKGVub3N5cygpKVxuICAgIH0sXG4gICAgcmVhZGRpcihwYXRoLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICByZWFkbGluayhwYXRoLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICByZW5hbWUoZnJvbSwgdG8sIGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhlbm9zeXMoKSlcbiAgICB9LFxuICAgIHJtZGlyKHBhdGgsIGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhlbm9zeXMoKSlcbiAgICB9LFxuICAgIHN0YXQocGF0aCwgY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKGVub3N5cygpKVxuICAgIH0sXG4gICAgc3ltbGluayhwYXRoLCBsaW5rLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICB0cnVuY2F0ZShwYXRoLCBsZW5ndGgsIGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhlbm9zeXMoKSlcbiAgICB9LFxuICAgIHVubGluayhwYXRoLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgICB1dGltZXMocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soZW5vc3lzKCkpXG4gICAgfSxcbiAgfVxufVxuXG5pZiAoIWdsb2JhbC5wcm9jZXNzKSB7XG4gIGdsb2JhbC5wcm9jZXNzID0ge1xuICAgIGdldHVpZCgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0sXG4gICAgZ2V0Z2lkKCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSxcbiAgICBnZXRldWlkKCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSxcbiAgICBnZXRlZ2lkKCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSxcbiAgICBnZXRncm91cHMoKSB7XG4gICAgICB0aHJvdyBlbm9zeXMoKVxuICAgIH0sXG4gICAgcGlkOiAtMSxcbiAgICBwcGlkOiAtMSxcbiAgICB1bWFzaygpIHtcbiAgICAgIHRocm93IGVub3N5cygpXG4gICAgfSxcbiAgICBjd2QoKSB7XG4gICAgICB0aHJvdyBlbm9zeXMoKVxuICAgIH0sXG4gICAgY2hkaXIoKSB7XG4gICAgICB0aHJvdyBlbm9zeXMoKVxuICAgIH0sXG4gIH1cbn1cblxuaWYgKCFnbG9iYWwuY3J5cHRvKSB7XG4gIHRocm93IG5ldyBFcnJvcignZ2xvYmFsVGhpcy5jcnlwdG8gaXMgbm90IGF2YWlsYWJsZSwgcG9seWZpbGwgcmVxdWlyZWQgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgb25seSknKVxuICAvLyBjb25zdCBub2RlQ3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgLy8gZ2xvYmFsLmNyeXB0byA9IHtcbiAgLy8gICBnZXRSYW5kb21WYWx1ZXMoYikge1xuICAvLyAgICAgbm9kZUNyeXB0by5yYW5kb21GaWxsU3luYyhiKVxuICAvLyAgIH0sXG4gIC8vIH1cbn1cblxuaWYgKCFnbG9iYWwucGVyZm9ybWFuY2UpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdnbG9iYWxUaGlzLnBlcmZvcm1hbmNlIGlzIG5vdCBhdmFpbGFibGUsIHBvbHlmaWxsIHJlcXVpcmVkIChwZXJmb3JtYW5jZS5ub3cgb25seSknKVxuICAvLyBnbG9iYWwucGVyZm9ybWFuY2UgPSB7XG4gIC8vICAgbm93KCkge1xuICAvLyAgICAgY29uc3QgW3NlYywgbnNlY10gPSBwcm9jZXNzLmhydGltZSgpXG4gIC8vICAgICByZXR1cm4gc2VjICogMTAwMCArIG5zZWMgLyAxMDAwMDAwXG4gIC8vICAgfSxcbiAgLy8gfVxufVxuXG5pZiAoIWdsb2JhbC5UZXh0RW5jb2Rlcikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ2dsb2JhbFRoaXMuVGV4dEVuY29kZXIgaXMgbm90IGF2YWlsYWJsZSwgcG9seWZpbGwgcmVxdWlyZWQnKVxuICAvLyBnbG9iYWwuVGV4dEVuY29kZXIgPSByZXF1aXJlKCd1dGlsJykuVGV4dEVuY29kZXJcbn1cblxuaWYgKCFnbG9iYWwuVGV4dERlY29kZXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdnbG9iYWxUaGlzLlRleHREZWNvZGVyIGlzIG5vdCBhdmFpbGFibGUsIHBvbHlmaWxsIHJlcXVpcmVkJylcbiAgLy8gZ2xvYmFsLlRleHREZWNvZGVyID0gcmVxdWlyZSgndXRpbCcpLlRleHREZWNvZGVyXG59XG5cbi8vIEVuZCBvZiBwb2x5ZmlsbHMgZm9yIGNvbW1vbiBBUEkuXG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JylcbmNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbnZhciBsb2dMaW5lID0gW11cblxuZ2xvYmFsLkdvID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9jYWxsYmFja1RpbWVvdXRzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fbmV4dENhbGxiYWNrVGltZW91dElEID0gMVxuXG4gICAgY29uc3QgbWVtID0gKCkgPT4ge1xuICAgICAgLy8gVGhlIGJ1ZmZlciBtYXkgY2hhbmdlIHdoZW4gcmVxdWVzdGluZyBtb3JlIG1lbW9yeS5cbiAgICAgIHJldHVybiBuZXcgRGF0YVZpZXcodGhpcy5faW5zdC5leHBvcnRzLm1lbW9yeS5idWZmZXIpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SW50NjQgPSAoYWRkciwgdikgPT4ge1xuICAgICAgbWVtKCkuc2V0VWludDMyKGFkZHIgKyAwLCB2LCB0cnVlKVxuICAgICAgbWVtKCkuc2V0VWludDMyKGFkZHIgKyA0LCBNYXRoLmZsb29yKHYgLyA0Mjk0OTY3Mjk2KSwgdHJ1ZSlcbiAgICB9XG5cbiAgICBjb25zdCBnZXRJbnQ2NCA9IChhZGRyKSA9PiB7XG4gICAgICBjb25zdCBsb3cgPSBtZW0oKS5nZXRVaW50MzIoYWRkciArIDAsIHRydWUpXG4gICAgICBjb25zdCBoaWdoID0gbWVtKCkuZ2V0SW50MzIoYWRkciArIDQsIHRydWUpXG4gICAgICByZXR1cm4gbG93ICsgaGlnaCAqIDQyOTQ5NjcyOTZcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkVmFsdWUgPSAoYWRkcikgPT4ge1xuICAgICAgY29uc3QgZiA9IG1lbSgpLmdldEZsb2F0NjQoYWRkciwgdHJ1ZSlcbiAgICAgIGlmIChmID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGlmICghaXNOYU4oZikpIHtcbiAgICAgICAgcmV0dXJuIGZcbiAgICAgIH1cblxuICAgICAgY29uc3QgaWQgPSBtZW0oKS5nZXRVaW50MzIoYWRkciwgdHJ1ZSlcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNbaWRdXG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVWYWx1ZSA9IChhZGRyLCB2KSA9PiB7XG4gICAgICBjb25zdCBuYW5IZWFkID0gMHg3ZmY4MDAwMFxuXG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChpc05hTih2KSkge1xuICAgICAgICAgIG1lbSgpLnNldFVpbnQzMihhZGRyICsgNCwgbmFuSGVhZCwgdHJ1ZSlcbiAgICAgICAgICBtZW0oKS5zZXRVaW50MzIoYWRkciwgMCwgdHJ1ZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodiA9PT0gMCkge1xuICAgICAgICAgIG1lbSgpLnNldFVpbnQzMihhZGRyICsgNCwgbmFuSGVhZCwgdHJ1ZSlcbiAgICAgICAgICBtZW0oKS5zZXRVaW50MzIoYWRkciwgMSwgdHJ1ZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBtZW0oKS5zZXRGbG9hdDY0KGFkZHIsIHYsIHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHYpIHtcbiAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgbWVtKCkuc2V0RmxvYXQ2NChhZGRyLCAwLCB0cnVlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgbWVtKCkuc2V0VWludDMyKGFkZHIgKyA0LCBuYW5IZWFkLCB0cnVlKVxuICAgICAgICAgIG1lbSgpLnNldFVpbnQzMihhZGRyLCAyLCB0cnVlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICBjYXNlIHRydWU6XG4gICAgICAgICAgbWVtKCkuc2V0VWludDMyKGFkZHIgKyA0LCBuYW5IZWFkLCB0cnVlKVxuICAgICAgICAgIG1lbSgpLnNldFVpbnQzMihhZGRyLCAzLCB0cnVlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICBjYXNlIGZhbHNlOlxuICAgICAgICAgIG1lbSgpLnNldFVpbnQzMihhZGRyICsgNCwgbmFuSGVhZCwgdHJ1ZSlcbiAgICAgICAgICBtZW0oKS5zZXRVaW50MzIoYWRkciwgNCwgdHJ1ZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IGlkID0gdGhpcy5faWRzLmdldCh2KVxuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWQgPSB0aGlzLl9pZFBvb2wucG9wKClcbiAgICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZCA9IHRoaXMuX3ZhbHVlcy5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZXNbaWRdID0gdlxuICAgICAgICB0aGlzLl9nb1JlZkNvdW50c1tpZF0gPSAwXG4gICAgICAgIHRoaXMuX2lkcy5zZXQodiwgaWQpXG4gICAgICB9XG4gICAgICB0aGlzLl9nb1JlZkNvdW50c1tpZF0rK1xuICAgICAgbGV0IHR5cGVGbGFnID0gMVxuICAgICAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHR5cGVGbGFnID0gMlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAgICAgdHlwZUZsYWcgPSAzXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIHR5cGVGbGFnID0gNFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBtZW0oKS5zZXRVaW50MzIoYWRkciArIDQsIG5hbkhlYWQgfCB0eXBlRmxhZywgdHJ1ZSlcbiAgICAgIG1lbSgpLnNldFVpbnQzMihhZGRyLCBpZCwgdHJ1ZSlcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkU2xpY2UgPSAoYXJyYXksIGxlbiwgY2FwKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodGhpcy5faW5zdC5leHBvcnRzLm1lbW9yeS5idWZmZXIsIGFycmF5LCBsZW4pXG4gICAgfVxuXG4gICAgY29uc3QgbG9hZFNsaWNlT2ZWYWx1ZXMgPSAoYXJyYXksIGxlbiwgY2FwKSA9PiB7XG4gICAgICBjb25zdCBhID0gbmV3IEFycmF5KGxlbilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYVtpXSA9IGxvYWRWYWx1ZShhcnJheSArIGkgKiA4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkU3RyaW5nID0gKHB0ciwgbGVuKSA9PiB7XG4gICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUobmV3IERhdGFWaWV3KHRoaXMuX2luc3QuZXhwb3J0cy5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikpXG4gICAgfVxuXG4gICAgY29uc3QgdGltZU9yaWdpbiA9IERhdGUubm93KCkgLSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRoaXMuaW1wb3J0T2JqZWN0ID0ge1xuICAgICAgd2FzaV9zbmFwc2hvdF9wcmV2aWV3MToge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvV0FTSS9ibG9iL21haW4vcGhhc2VzL3NuYXBzaG90L2RvY3MubWQjZmRfd3JpdGVcbiAgICAgICAgZmRfd3JpdGU6IGZ1bmN0aW9uIChmZCwgaW92c19wdHIsIGlvdnNfbGVuLCBud3JpdHRlbl9wdHIpIHtcbiAgICAgICAgICBsZXQgbndyaXR0ZW4gPSAwXG4gICAgICAgICAgaWYgKGZkID09IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGlvdnNfaSA9IDA7IGlvdnNfaSA8IGlvdnNfbGVuOyBpb3ZzX2krKykge1xuICAgICAgICAgICAgICBsZXQgaW92X3B0ciA9IGlvdnNfcHRyICsgaW92c19pICogOCAvLyBhc3N1bWluZyB3YXNtMzJcbiAgICAgICAgICAgICAgbGV0IHB0ciA9IG1lbSgpLmdldFVpbnQzMihpb3ZfcHRyICsgMCwgdHJ1ZSlcbiAgICAgICAgICAgICAgbGV0IGxlbiA9IG1lbSgpLmdldFVpbnQzMihpb3ZfcHRyICsgNCwgdHJ1ZSlcbiAgICAgICAgICAgICAgbndyaXR0ZW4gKz0gbGVuXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG1lbSgpLmdldFVpbnQ4KHB0ciArIGkpXG4gICAgICAgICAgICAgICAgaWYgKGMgPT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgIC8vIENSXG4gICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gMTApIHtcbiAgICAgICAgICAgICAgICAgIC8vIExGXG4gICAgICAgICAgICAgICAgICAvLyB3cml0ZSBsaW5lXG4gICAgICAgICAgICAgICAgICBsZXQgbGluZSA9IGRlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KGxvZ0xpbmUpKVxuICAgICAgICAgICAgICAgICAgbG9nTGluZSA9IFtdXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5lKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsb2dMaW5lLnB1c2goYylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6JywgZmQpXG4gICAgICAgICAgfVxuICAgICAgICAgIG1lbSgpLnNldFVpbnQzMihud3JpdHRlbl9wdHIsIG53cml0dGVuLCB0cnVlKVxuICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH0sXG4gICAgICAgIGZkX2Nsb3NlOiAoKSA9PiAwLCAvLyBkdW1teVxuICAgICAgICBmZF9mZHN0YXRfZ2V0OiAoKSA9PiAwLCAvLyBkdW1teVxuICAgICAgICBmZF9zZWVrOiAoKSA9PiAwLCAvLyBkdW1teVxuICAgICAgICBwcm9jX2V4aXQ6IChjb2RlKSA9PiB7XG4gICAgICAgICAgaWYgKGdsb2JhbC5wcm9jZXNzKSB7XG4gICAgICAgICAgICAvLyBOb2RlLmpzXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FuJ3QgZXhpdCBpbiBhIGJyb3dzZXIuXG4gICAgICAgICAgICB0aHJvdyAndHJ5aW5nIHRvIGV4aXQgd2l0aCBjb2RlICcgKyBjb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByYW5kb21fZ2V0OiAoYnVmUHRyLCBidWZMZW4pID0+IHtcbiAgICAgICAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGxvYWRTbGljZShidWZQdHIsIGJ1ZkxlbikpXG4gICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnY6IHtcbiAgICAgICAgLy8gZnVuYyB0aWNrcygpIGZsb2F0NjRcbiAgICAgICAgJ3J1bnRpbWUudGlja3MnOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmMgc2xlZXBUaWNrcyh0aW1lb3V0IGZsb2F0NjQpXG4gICAgICAgICdydW50aW1lLnNsZWVwVGlja3MnOiAodGltZW91dCkgPT4ge1xuICAgICAgICAgIC8vIERvIG5vdCBzbGVlcCwgb25seSByZWFjdGl2YXRlIHNjaGVkdWxlciBhZnRlciB0aGUgZ2l2ZW4gdGltZW91dC5cbiAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuX2luc3QuZXhwb3J0cy5nb19zY2hlZHVsZXIsIHRpbWVvdXQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZnVuYyBmaW5hbGl6ZVJlZih2IHJlZilcbiAgICAgICAgJ3N5c2NhbGwvanMuZmluYWxpemVSZWYnOiAoc3ApID0+IHtcbiAgICAgICAgICAvLyBOb3RlOiBUaW55R28gZG9lcyBub3Qgc3VwcG9ydCBmaW5hbGl6ZXJzIHNvIHRoaXMgc2hvdWxkIG5ldmVyIGJlXG4gICAgICAgICAgLy8gY2FsbGVkLlxuICAgICAgICAgIGNvbnN0IGlkID0gbWVtKCkuZ2V0VWludDMyKHNwLCB0cnVlKVxuICAgICAgICAgIHRoaXMuX2dvUmVmQ291bnRzW2lkXS0tXG4gICAgICAgICAgaWYgKHRoaXMuX2dvUmVmQ291bnRzW2lkXSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuX3ZhbHVlc1tpZF1cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpZF0gPSBudWxsXG4gICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKHYpXG4gICAgICAgICAgICB0aGlzLl9pZFBvb2wucHVzaChpZClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY29uc29sZS5lcnJvcignc3lzY2FsbC9qcy5maW5hbGl6ZVJlZiBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBmdW5jIHN0cmluZ1ZhbCh2YWx1ZSBzdHJpbmcpIHJlZlxuICAgICAgICAnc3lzY2FsbC9qcy5zdHJpbmdWYWwnOiAocmV0X3B0ciwgdmFsdWVfcHRyLCB2YWx1ZV9sZW4pID0+IHtcbiAgICAgICAgICBjb25zdCBzID0gbG9hZFN0cmluZyh2YWx1ZV9wdHIsIHZhbHVlX2xlbilcbiAgICAgICAgICBzdG9yZVZhbHVlKHJldF9wdHIsIHMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZnVuYyB2YWx1ZUdldCh2IHJlZiwgcCBzdHJpbmcpIHJlZlxuICAgICAgICAnc3lzY2FsbC9qcy52YWx1ZUdldCc6IChyZXR2YWwsIHZfYWRkciwgcF9wdHIsIHBfbGVuKSA9PiB7XG4gICAgICAgICAgbGV0IHByb3AgPSBsb2FkU3RyaW5nKHBfcHRyLCBwX2xlbilcbiAgICAgICAgICBsZXQgdmFsdWUgPSBsb2FkVmFsdWUodl9hZGRyKVxuICAgICAgICAgIGxldCByZXN1bHQgPSBSZWZsZWN0LmdldCh2YWx1ZSwgcHJvcClcbiAgICAgICAgICBzdG9yZVZhbHVlKHJldHZhbCwgcmVzdWx0KVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmMgdmFsdWVTZXQodiByZWYsIHAgc3RyaW5nLCB4IHJlZilcbiAgICAgICAgJ3N5c2NhbGwvanMudmFsdWVTZXQnOiAodl9hZGRyLCBwX3B0ciwgcF9sZW4sIHhfYWRkcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHYgPSBsb2FkVmFsdWUodl9hZGRyKVxuICAgICAgICAgIGNvbnN0IHAgPSBsb2FkU3RyaW5nKHBfcHRyLCBwX2xlbilcbiAgICAgICAgICBjb25zdCB4ID0gbG9hZFZhbHVlKHhfYWRkcilcbiAgICAgICAgICBSZWZsZWN0LnNldCh2LCBwLCB4KVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmMgdmFsdWVEZWxldGUodiByZWYsIHAgc3RyaW5nKVxuICAgICAgICAnc3lzY2FsbC9qcy52YWx1ZURlbGV0ZSc6ICh2X2FkZHIsIHBfcHRyLCBwX2xlbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHYgPSBsb2FkVmFsdWUodl9hZGRyKVxuICAgICAgICAgIGNvbnN0IHAgPSBsb2FkU3RyaW5nKHBfcHRyLCBwX2xlbilcbiAgICAgICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHYsIHApXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZnVuYyB2YWx1ZUluZGV4KHYgcmVmLCBpIGludCkgcmVmXG4gICAgICAgICdzeXNjYWxsL2pzLnZhbHVlSW5kZXgnOiAocmV0X2FkZHIsIHZfYWRkciwgaSkgPT4ge1xuICAgICAgICAgIHN0b3JlVmFsdWUocmV0X2FkZHIsIFJlZmxlY3QuZ2V0KGxvYWRWYWx1ZSh2X2FkZHIpLCBpKSlcbiAgICAgICAgfSxcblxuICAgICAgICAvLyB2YWx1ZVNldEluZGV4KHYgcmVmLCBpIGludCwgeCByZWYpXG4gICAgICAgICdzeXNjYWxsL2pzLnZhbHVlU2V0SW5kZXgnOiAodl9hZGRyLCBpLCB4X2FkZHIpID0+IHtcbiAgICAgICAgICBSZWZsZWN0LnNldChsb2FkVmFsdWUodl9hZGRyKSwgaSwgbG9hZFZhbHVlKHhfYWRkcikpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZnVuYyB2YWx1ZUNhbGwodiByZWYsIG0gc3RyaW5nLCBhcmdzIFtdcmVmKSAocmVmLCBib29sKVxuICAgICAgICAnc3lzY2FsbC9qcy52YWx1ZUNhbGwnOiAocmV0X2FkZHIsIHZfYWRkciwgbV9wdHIsIG1fbGVuLCBhcmdzX3B0ciwgYXJnc19sZW4sIGFyZ3NfY2FwKSA9PiB7XG4gICAgICAgICAgY29uc3QgdiA9IGxvYWRWYWx1ZSh2X2FkZHIpXG4gICAgICAgICAgY29uc3QgbmFtZSA9IGxvYWRTdHJpbmcobV9wdHIsIG1fbGVuKVxuICAgICAgICAgIGNvbnN0IGFyZ3MgPSBsb2FkU2xpY2VPZlZhbHVlcyhhcmdzX3B0ciwgYXJnc19sZW4sIGFyZ3NfY2FwKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtID0gUmVmbGVjdC5nZXQodiwgbmFtZSlcbiAgICAgICAgICAgIHN0b3JlVmFsdWUocmV0X2FkZHIsIFJlZmxlY3QuYXBwbHkobSwgdiwgYXJncykpXG4gICAgICAgICAgICBtZW0oKS5zZXRVaW50OChyZXRfYWRkciArIDgsIDEpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzdG9yZVZhbHVlKHJldF9hZGRyLCBlcnIpXG4gICAgICAgICAgICBtZW0oKS5zZXRVaW50OChyZXRfYWRkciArIDgsIDApXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmMgdmFsdWVJbnZva2UodiByZWYsIGFyZ3MgW11yZWYpIChyZWYsIGJvb2wpXG4gICAgICAgICdzeXNjYWxsL2pzLnZhbHVlSW52b2tlJzogKHJldF9hZGRyLCB2X2FkZHIsIGFyZ3NfcHRyLCBhcmdzX2xlbiwgYXJnc19jYXApID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdiA9IGxvYWRWYWx1ZSh2X2FkZHIpXG4gICAgICAgICAgICBjb25zdCBhcmdzID0gbG9hZFNsaWNlT2ZWYWx1ZXMoYXJnc19wdHIsIGFyZ3NfbGVuLCBhcmdzX2NhcClcbiAgICAgICAgICAgIHN0b3JlVmFsdWUocmV0X2FkZHIsIFJlZmxlY3QuYXBwbHkodiwgdW5kZWZpbmVkLCBhcmdzKSlcbiAgICAgICAgICAgIG1lbSgpLnNldFVpbnQ4KHJldF9hZGRyICsgOCwgMSlcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0b3JlVmFsdWUocmV0X2FkZHIsIGVycilcbiAgICAgICAgICAgIG1lbSgpLnNldFVpbnQ4KHJldF9hZGRyICsgOCwgMClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZnVuYyB2YWx1ZU5ldyh2IHJlZiwgYXJncyBbXXJlZikgKHJlZiwgYm9vbClcbiAgICAgICAgJ3N5c2NhbGwvanMudmFsdWVOZXcnOiAocmV0X2FkZHIsIHZfYWRkciwgYXJnc19wdHIsIGFyZ3NfbGVuLCBhcmdzX2NhcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHYgPSBsb2FkVmFsdWUodl9hZGRyKVxuICAgICAgICAgIGNvbnN0IGFyZ3MgPSBsb2FkU2xpY2VPZlZhbHVlcyhhcmdzX3B0ciwgYXJnc19sZW4sIGFyZ3NfY2FwKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdG9yZVZhbHVlKHJldF9hZGRyLCBSZWZsZWN0LmNvbnN0cnVjdCh2LCBhcmdzKSlcbiAgICAgICAgICAgIG1lbSgpLnNldFVpbnQ4KHJldF9hZGRyICsgOCwgMSlcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0b3JlVmFsdWUocmV0X2FkZHIsIGVycilcbiAgICAgICAgICAgIG1lbSgpLnNldFVpbnQ4KHJldF9hZGRyICsgOCwgMClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZnVuYyB2YWx1ZUxlbmd0aCh2IHJlZikgaW50XG4gICAgICAgICdzeXNjYWxsL2pzLnZhbHVlTGVuZ3RoJzogKHZfYWRkcikgPT4ge1xuICAgICAgICAgIHJldHVybiBsb2FkVmFsdWUodl9hZGRyKS5sZW5ndGhcbiAgICAgICAgfSxcblxuICAgICAgICAvLyB2YWx1ZVByZXBhcmVTdHJpbmcodiByZWYpIChyZWYsIGludClcbiAgICAgICAgJ3N5c2NhbGwvanMudmFsdWVQcmVwYXJlU3RyaW5nJzogKHJldF9hZGRyLCB2X2FkZHIpID0+IHtcbiAgICAgICAgICBjb25zdCBzID0gU3RyaW5nKGxvYWRWYWx1ZSh2X2FkZHIpKVxuICAgICAgICAgIGNvbnN0IHN0ciA9IGVuY29kZXIuZW5jb2RlKHMpXG4gICAgICAgICAgc3RvcmVWYWx1ZShyZXRfYWRkciwgc3RyKVxuICAgICAgICAgIHNldEludDY0KHJldF9hZGRyICsgOCwgc3RyLmxlbmd0aClcbiAgICAgICAgfSxcblxuICAgICAgICAvLyB2YWx1ZUxvYWRTdHJpbmcodiByZWYsIGIgW11ieXRlKVxuICAgICAgICAnc3lzY2FsbC9qcy52YWx1ZUxvYWRTdHJpbmcnOiAodl9hZGRyLCBzbGljZV9wdHIsIHNsaWNlX2xlbiwgc2xpY2VfY2FwKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RyID0gbG9hZFZhbHVlKHZfYWRkcilcbiAgICAgICAgICBsb2FkU2xpY2Uoc2xpY2VfcHRyLCBzbGljZV9sZW4sIHNsaWNlX2NhcCkuc2V0KHN0cilcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBmdW5jIHZhbHVlSW5zdGFuY2VPZih2IHJlZiwgdCByZWYpIGJvb2xcbiAgICAgICAgJ3N5c2NhbGwvanMudmFsdWVJbnN0YW5jZU9mJzogKHZfYWRkciwgdF9hZGRyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGxvYWRWYWx1ZSh2X2FkZHIpIGluc3RhbmNlb2YgbG9hZFZhbHVlKHRfYWRkcilcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBmdW5jIGNvcHlCeXRlc1RvR28oZHN0IFtdYnl0ZSwgc3JjIHJlZikgKGludCwgYm9vbClcbiAgICAgICAgJ3N5c2NhbGwvanMuY29weUJ5dGVzVG9Hbyc6IChyZXRfYWRkciwgZGVzdF9hZGRyLCBkZXN0X2xlbiwgZGVzdF9jYXAsIHNvdXJjZV9hZGRyKSA9PiB7XG4gICAgICAgICAgbGV0IG51bV9ieXRlc19jb3BpZWRfYWRkciA9IHJldF9hZGRyXG4gICAgICAgICAgbGV0IHJldHVybmVkX3N0YXR1c19hZGRyID0gcmV0X2FkZHIgKyA0IC8vIEFkZHJlc3Mgb2YgcmV0dXJuZWQgYm9vbGVhbiBzdGF0dXMgdmFyaWFibGVcblxuICAgICAgICAgIGNvbnN0IGRzdCA9IGxvYWRTbGljZShkZXN0X2FkZHIsIGRlc3RfbGVuKVxuICAgICAgICAgIGNvbnN0IHNyYyA9IGxvYWRWYWx1ZShzb3VyY2VfYWRkcilcbiAgICAgICAgICBpZiAoIShzcmMgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IHNyYyBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSkge1xuICAgICAgICAgICAgbWVtKCkuc2V0VWludDgocmV0dXJuZWRfc3RhdHVzX2FkZHIsIDApIC8vIFJldHVybiBcIm5vdCBva1wiIHN0YXR1c1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRvQ29weSA9IHNyYy5zdWJhcnJheSgwLCBkc3QubGVuZ3RoKVxuICAgICAgICAgIGRzdC5zZXQodG9Db3B5KVxuICAgICAgICAgIHNldEludDY0KG51bV9ieXRlc19jb3BpZWRfYWRkciwgdG9Db3B5Lmxlbmd0aClcbiAgICAgICAgICBtZW0oKS5zZXRVaW50OChyZXR1cm5lZF9zdGF0dXNfYWRkciwgMSkgLy8gUmV0dXJuIFwib2tcIiBzdGF0dXNcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBjb3B5Qnl0ZXNUb0pTKGRzdCByZWYsIHNyYyBbXWJ5dGUpIChpbnQsIGJvb2wpXG4gICAgICAgIC8vIE9yaWdpbmFsbHkgY29waWVkIGZyb20gdXBzdHJlYW0gR28gcHJvamVjdCwgdGhlbiBtb2RpZmllZDpcbiAgICAgICAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vZ29sYW5nL2dvL2Jsb2IvM2Y5OTVjM2YzYjQzMDMzMDEzMDEzZTZjN2NjYzkzYTliMTQxMWNhOS9taXNjL3dhc20vd2FzbV9leGVjLmpzI0w0MDQtTDQxNlxuICAgICAgICAnc3lzY2FsbC9qcy5jb3B5Qnl0ZXNUb0pTJzogKHJldF9hZGRyLCBkZXN0X2FkZHIsIHNvdXJjZV9hZGRyLCBzb3VyY2VfbGVuLCBzb3VyY2VfY2FwKSA9PiB7XG4gICAgICAgICAgbGV0IG51bV9ieXRlc19jb3BpZWRfYWRkciA9IHJldF9hZGRyXG4gICAgICAgICAgbGV0IHJldHVybmVkX3N0YXR1c19hZGRyID0gcmV0X2FkZHIgKyA0IC8vIEFkZHJlc3Mgb2YgcmV0dXJuZWQgYm9vbGVhbiBzdGF0dXMgdmFyaWFibGVcblxuICAgICAgICAgIGNvbnN0IGRzdCA9IGxvYWRWYWx1ZShkZXN0X2FkZHIpXG4gICAgICAgICAgY29uc3Qgc3JjID0gbG9hZFNsaWNlKHNvdXJjZV9hZGRyLCBzb3VyY2VfbGVuKVxuICAgICAgICAgIGlmICghKGRzdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgZHN0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpKSB7XG4gICAgICAgICAgICBtZW0oKS5zZXRVaW50OChyZXR1cm5lZF9zdGF0dXNfYWRkciwgMCkgLy8gUmV0dXJuIFwibm90IG9rXCIgc3RhdHVzXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdG9Db3B5ID0gc3JjLnN1YmFycmF5KDAsIGRzdC5sZW5ndGgpXG4gICAgICAgICAgZHN0LnNldCh0b0NvcHkpXG4gICAgICAgICAgc2V0SW50NjQobnVtX2J5dGVzX2NvcGllZF9hZGRyLCB0b0NvcHkubGVuZ3RoKVxuICAgICAgICAgIG1lbSgpLnNldFVpbnQ4KHJldHVybmVkX3N0YXR1c19hZGRyLCAxKSAvLyBSZXR1cm4gXCJva1wiIHN0YXR1c1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBhc3luYyBydW4oaW5zdGFuY2UpIHtcbiAgICB0aGlzLl9pbnN0ID0gaW5zdGFuY2VcbiAgICB0aGlzLl92YWx1ZXMgPSBbXG4gICAgICAvLyBKUyB2YWx1ZXMgdGhhdCBHbyBjdXJyZW50bHkgaGFzIHJlZmVyZW5jZXMgdG8sIGluZGV4ZWQgYnkgcmVmZXJlbmNlIGlkXG4gICAgICBOYU4sXG4gICAgICAwLFxuICAgICAgbnVsbCxcbiAgICAgIHRydWUsXG4gICAgICBmYWxzZSxcbiAgICAgIGdsb2JhbCxcbiAgICAgIHRoaXMsXG4gICAgXVxuICAgIHRoaXMuX2dvUmVmQ291bnRzID0gW10gLy8gbnVtYmVyIG9mIHJlZmVyZW5jZXMgdGhhdCBHbyBoYXMgdG8gYSBKUyB2YWx1ZSwgaW5kZXhlZCBieSByZWZlcmVuY2UgaWRcbiAgICB0aGlzLl9pZHMgPSBuZXcgTWFwKCkgLy8gbWFwcGluZyBmcm9tIEpTIHZhbHVlcyB0byByZWZlcmVuY2UgaWRzXG4gICAgdGhpcy5faWRQb29sID0gW10gLy8gdW51c2VkIGlkcyB0aGF0IGhhdmUgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZFxuICAgIHRoaXMuZXhpdGVkID0gZmFsc2UgLy8gd2hldGhlciB0aGUgR28gcHJvZ3JhbSBoYXMgZXhpdGVkXG5cbiAgICBjb25zdCBtZW0gPSBuZXcgRGF0YVZpZXcodGhpcy5faW5zdC5leHBvcnRzLm1lbW9yeS5idWZmZXIpXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgY2FsbGJhY2tQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUNhbGxiYWNrUHJvbWlzZSA9ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5leGl0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIGNhbGxiYWNrOiBHbyBwcm9ncmFtIGhhcyBhbHJlYWR5IGV4aXRlZCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgMCkgLy8gbWFrZSBzdXJlIGl0IGlzIGFzeW5jaHJvbm91c1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhpcy5faW5zdC5leHBvcnRzLl9zdGFydCgpXG4gICAgICBpZiAodGhpcy5leGl0ZWQpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGNhbGxiYWNrUHJvbWlzZVxuICAgIH1cbiAgfVxuXG4gIF9yZXN1bWUoKSB7XG4gICAgaWYgKHRoaXMuZXhpdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvIHByb2dyYW0gaGFzIGFscmVhZHkgZXhpdGVkJylcbiAgICB9XG4gICAgdGhpcy5faW5zdC5leHBvcnRzLnJlc3VtZSgpXG4gICAgaWYgKHRoaXMuZXhpdGVkKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlRXhpdFByb21pc2UoKVxuICAgIH1cbiAgfVxuXG4gIF9tYWtlRnVuY1dyYXBwZXIoaWQpIHtcbiAgICBjb25zdCBnbyA9IHRoaXNcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXZlbnQgPSB7IGlkOiBpZCwgdGhpczogdGhpcywgYXJnczogYXJndW1lbnRzIH1cbiAgICAgIGdvLl9wZW5kaW5nRXZlbnQgPSBldmVudFxuICAgICAgZ28uX3Jlc3VtZSgpXG4gICAgICByZXR1cm4gZXZlbnQucmVzdWx0XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdsb2JhbC5Hb1xuIl19
@@ -0,0 +1,2 @@
1
+ import { ICloudbase } from '@cloudbase/types';
2
+ export declare function registerContainers(app: Pick<ICloudbase, 'registerComponent'>): void;