@rljson/io 0.0.32 → 0.0.33

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.
@@ -597,7 +597,6 @@ export const runIoConformanceTests = () => {
597
597
  {
598
598
  array: [1, 2, { a: 10 }],
599
599
  boolean: true,
600
- null: null,
601
600
  number: 5,
602
601
  object: {
603
602
  a: 1,
@@ -626,7 +625,6 @@ export const runIoConformanceTests = () => {
626
625
  {
627
626
  array: [1, 2, { a: 10 }],
628
627
  boolean: true,
629
- null: null,
630
628
  number: 6,
631
629
  object: { a: 1, b: 2 },
632
630
  string: 'world',
@@ -650,7 +648,6 @@ export const runIoConformanceTests = () => {
650
648
  {
651
649
  array: [1, 2, { a: 10 }],
652
650
  boolean: true,
653
- null: null,
654
651
  number: 5,
655
652
  object: { a: 1, b: { c: 3 } },
656
653
  string: 'hello',
@@ -658,7 +655,6 @@ export const runIoConformanceTests = () => {
658
655
  {
659
656
  array: [1, 2, { a: 10 }],
660
657
  boolean: true,
661
- null: null,
662
658
  number: 6,
663
659
  object: { a: 1, b: 2 },
664
660
  string: 'world',
@@ -682,7 +678,6 @@ export const runIoConformanceTests = () => {
682
678
  {
683
679
  array: [1, 2, { a: 10 }],
684
680
  boolean: true,
685
- null: null,
686
681
  number: 5,
687
682
  object: { a: 1, b: { c: 3 } },
688
683
  string: 'hello',
@@ -690,7 +685,6 @@ export const runIoConformanceTests = () => {
690
685
  {
691
686
  array: [1, 2, { a: 10 }],
692
687
  boolean: true,
693
- null: null,
694
688
  number: 6,
695
689
  object: { a: 1, b: 2 },
696
690
  string: 'world',
@@ -717,7 +711,6 @@ export const runIoConformanceTests = () => {
717
711
  {
718
712
  array: [1, 2, { a: 10 }],
719
713
  boolean: true,
720
- null: null,
721
714
  number: 5,
722
715
  object: { a: 1, b: { c: 3 } },
723
716
  string: 'hello',
@@ -725,7 +718,6 @@ export const runIoConformanceTests = () => {
725
718
  {
726
719
  array: [1, 2, { a: 10 }],
727
720
  boolean: true,
728
- null: null,
729
721
  number: 6,
730
722
  object: { a: 1, b: 2 },
731
723
  string: 'world',
@@ -756,7 +748,6 @@ export const runIoConformanceTests = () => {
756
748
  {
757
749
  array: [1, 2, { a: 10 }],
758
750
  boolean: true,
759
- null: null,
760
751
  number: 5,
761
752
  object: { a: 1, b: { c: 3 } },
762
753
  string: 'hello',
package/dist/io-mem.d.ts CHANGED
@@ -41,4 +41,5 @@ export declare class IoMem implements Io {
41
41
  private _dumpTable;
42
42
  private _write;
43
43
  private _readRows;
44
+ _removeNullValues(rljson: Rljson): void;
44
45
  }
package/dist/io.js CHANGED
@@ -354,6 +354,7 @@ const _IoMem = class _IoMem {
354
354
  // ...........................................................................
355
355
  async _write(request) {
356
356
  const addedData = hsh(request.data);
357
+ this._removeNullValues(addedData);
357
358
  const tables = Object.keys(addedData);
358
359
  await this._ioTools.throwWhenTablesDoNotExist(request.data);
359
360
  await this._ioTools.throwWhenTableDataDoesNotMatchCfg(request.data);
@@ -388,6 +389,9 @@ const _IoMem = class _IoMem {
388
389
  for (const column in request.where) {
389
390
  const a = row[column];
390
391
  const b = request.where[column];
392
+ if (b === null && a === void 0) {
393
+ return true;
394
+ }
391
395
  if (!equals(a, b)) {
392
396
  return false;
393
397
  }
@@ -398,6 +402,18 @@ const _IoMem = class _IoMem {
398
402
  };
399
403
  return result;
400
404
  }
405
+ _removeNullValues(rljson) {
406
+ iterateTablesSync(rljson, (table) => {
407
+ const data = rljson[table]._data;
408
+ for (const row of data) {
409
+ for (const key in row) {
410
+ if (row[key] === null) {
411
+ delete row[key];
412
+ }
413
+ }
414
+ }
415
+ });
416
+ }
401
417
  };
402
418
  __publicField(_IoMem, "example", async () => {
403
419
  return new _IoMem();
@@ -524,4 +540,4 @@ export {
524
540
  exampleIo,
525
541
  exampleTestSetup
526
542
  };
527
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7XG4gIGl0ZXJhdGVUYWJsZXMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICB0aHJvd09uSW52YWxpZFRhYmxlQ2ZnLFxuICB2YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyxcbn0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG5pbXBvcnQgeyBJb01lbSB9IGZyb20gJy4vaW8tbWVtLnRzJztcbmltcG9ydCB7IElvIH0gZnJvbSAnLi9pby50cyc7XG5cbi8qKlxuICogUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb1Rvb2xzIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBpbyBUaGUgSW8gaW50ZXJmYWNlIHRvIHVzZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlvOiBJbykge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFibGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdGFibGVDZmdzIHRhYmxlLlxuICAgKi9cbiAgc3RhdGljIGdldCB0YWJsZUNmZ3NUYWJsZUNmZygpIHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGhpcDxUYWJsZUNmZz4oe1xuICAgICAgX2hhc2g6ICcnLFxuICAgICAga2V5OiAndGFibGVDZmdzJyxcbiAgICAgIHR5cGU6ICdpbmdyZWRpZW50cycsXG4gICAgICBpc0hlYWQ6IGZhbHNlLFxuICAgICAgaXNSb290OiBmYWxzZSxcbiAgICAgIGlzU2hhcmVkOiB0cnVlLFxuICAgICAgcHJldmlvdXM6ICcnLFxuXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHsga2V5OiAnX2hhc2gnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ2tleScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAndHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAnaXNIZWFkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgIHsga2V5OiAnaXNSb290JywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgIHsga2V5OiAnaXNTaGFyZWQnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgeyBrZXk6ICdwcmV2aW91cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAnY29sdW1ucycsIHR5cGU6ICdqc29uQXJyYXknIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhYmxlQ2ZnO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSByZXZpc2lvbnMgdGFibGUuXG4gICAqL1xuICBpbml0UmV2aXNpb25zVGFibGUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVDZmc6IFRhYmxlQ2ZnID0ge1xuICAgICAga2V5OiAncmV2aXNpb25zJyxcbiAgICAgIHR5cGU6ICdpbmdyZWRpZW50cycsXG4gICAgICBpc0hlYWQ6IHRydWUsXG4gICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICBpc1NoYXJlZDogZmFsc2UsXG5cbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgeyBrZXk6ICdfaGFzaCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAndGFibGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ3ByZWRlY2Vzc29yJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICdzdWNjZXNzb3InLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ3RpbWVzdGFtcCcsIHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIHsga2V5OiAnaWQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5pby5jcmVhdGVPckV4dGVuZFRhYmxlKHsgdGFibGVDZmcgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4YW1wbGUgb2JqZWN0IGZvciB0ZXN0IHB1cnBvc2VzXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIGlvIHRvb2xzXG4gICAqL1xuICBzdGF0aWMgZXhhbXBsZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbyA9IGF3YWl0IElvTWVtLmV4YW1wbGUoKTtcbiAgICBhd2FpdCBpby5pbml0KCk7XG4gICAgYXdhaXQgaW8uaXNSZWFkeSgpO1xuICAgIHJldHVybiBuZXcgSW9Ub29scyhpbyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3RcbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuaW8udGFibGVFeGlzdHModGFibGUpO1xuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGlmIGFueSBvZiB0aGUgdGFibGVzIGluIHJsanNvbiBkbyBub3QgZXhpc3RcbiAgICogQHBhcmFtIHJsanNvbiAtIFRoZSBSbGpzb24gb2JqZWN0IHRvIGNoZWNrXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJsanNvbjogUmxqc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGl0ZXJhdGVUYWJsZXMocmxqc29uLCBhc3luYyAodGFibGVLZXkpID0+IHtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZUtleSk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGVLZXl9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1pc3NpbmdUYWJsZXMgPSAoZSBhcyBBcnJheTxhbnk+KS5tYXAoKGUpID0+IGUudGFibGVLZXkpO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIHRhYmxlcyBkbyBub3QgZXhpc3Q6ICR7bWlzc2luZ1RhYmxlcy5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIGFsbCB0YWJsZSBuYW1lc1xuICAgKi9cbiAgYXN5bmMgYWxsVGFibGVLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGhpcy5pby50YWJsZUNmZ3MoKSkudGFibGVDZmdzLl9kYXRhLm1hcChcbiAgICAgIChlKSA9PiBlLmtleSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyB0YWJsZUNmZyh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnPiB7XG4gICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHRhYmxlKTtcbiAgICBpZiAoIXRhYmxlQ2ZnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVDZmchO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZSBvciBudWxsIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuXG4gICAqL1xuICBhc3luYyB0YWJsZUNmZ09yTnVsbCh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnIHwgbnVsbD4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZncyA9IGF3YWl0IHRoaXMuaW8udGFibGVDZmdzKCk7XG4gICAgY29uc3QgdGFibGVDZmcgPSB0YWJsZUNmZ3MudGFibGVDZmdzLl9kYXRhLmZpbmQoKGUpID0+IGUua2V5ID09PSB0YWJsZSk7XG4gICAgcmV0dXJuIHRhYmxlQ2ZnID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNvbHVtbiBuYW1lcyBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyBhbGxDb2x1bW5LZXlzKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIHdoZW4gYSBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gYSBnaXZlbiB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGUgLSBUaGUgdGFibGUgdG8gY2hlY2tcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1uIHRvIGNoZWNrXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgdGFibGU6IFRhYmxlS2V5LFxuICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbikgPT4gIWNvbHVtbktleXMuaW5jbHVkZXMoY29sdW1uKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIGNvbHVtbnMgZG8gbm90IGV4aXN0IGluIHRhYmxlIFwiJHt0YWJsZX1cIjogJHttaXNzaW5nQ29sdW1ucy5qb2luKFxuICAgICAgICAgICcsICcsXG4gICAgICAgICl9LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiBhIHRhYmxlIHVwZGF0ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRhYmxlXG4gICAqIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh1cGRhdGU6IFRhYmxlQ2ZnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ID0gYEludmFsaWQgdXBkYXRlIG9mIHRhYmxlIGFibGUgXCIke3VwZGF0ZS5rZXl9XCJgO1xuXG4gICAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyh1cGRhdGUpO1xuXG4gICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHVwZGF0ZS5rZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgLy8gSGF2ZSBjb2x1bW5zIGJlZW4gZGVsZXRlZD9cbiAgICAgIGlmIChleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA+IHVwZGF0ZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1uS2V5cyA9IGV4aXN0aW5nLmNvbHVtbnNcbiAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+ICF1cGRhdGUuY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlbGV0ZWRDb2x1bW5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1ucyA9IGRlbGV0ZWRDb2x1bW5LZXlzLmpvaW4oJywgJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogQ29sdW1ucyBtdXN0IG5vdCBiZSBkZWxldGVkLiBgICtcbiAgICAgICAgICAgICAgYERlbGV0ZWQgY29sdW1uczogJHtkZWxldGVkQ29sdW1uc319YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIGtleXMgY2hhbmdlZD9cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZy5jb2x1bW5zW2ldLmtleTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGlmIChiZWZvcmUgIT09IGFmdGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXG4gICAgICAgICAgICAgIGBDb2x1bW4ga2V5cyBtdXN0IG5vdCBjaGFuZ2UhIGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtiZWZvcmV9XCIgd2FzIHJlbmFtZWQgaW50byBcIiR7YWZ0ZXJ9XCIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIHR5cGVzIGNoYW5nZWQ/XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGV4aXN0aW5nLmNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS50eXBlO1xuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke3ByZWZpeH06IGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIHR5cGVzIG11c3Qgbm90IGNoYW5nZSEgYCArXG4gICAgICAgICAgICAgIGBUeXBlIG9mIGNvbHVtbiBcIiR7Y29sdW1ufVwiIHdhcyBjaGFuZ2VkIGZyb20gXCIke2JlZm9yZX1cIiB0byAke2FmdGVyfS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkbyBub3QgbWF0Y2ggdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhkYXRhOiBSbGpzb24pIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBhd2FpdCBpdGVyYXRlVGFibGVzKGRhdGEsIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlS2V5KTtcbiAgICAgIGNvbnN0IHRhYmxlID0gZGF0YVt0YWJsZUtleV07XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyh0YWJsZS5fZGF0YSwgdGFibGVDZmcpKTtcbiAgICB9KTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGFibGUgZGF0YSBkb2VzIG5vdCBtYXRjaCB0aGUgY29uZmlndXJhdGlvbi5cXG5cXG5FcnJvcnM6XFxuJHtlcnJvcnNcbiAgICAgICAgICAubWFwKChlKSA9PiBgLSAke2V9YClcbiAgICAgICAgICAuam9pbignXFxuJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwLCBoc2ggfSBmcm9tICdAcmxqc29uL2hhc2gnO1xuaW1wb3J0IHsgSXNSZWFkeSB9IGZyb20gJ0BybGpzb24vaXMtcmVhZHknO1xuaW1wb3J0IHsgY29weSwgZXF1YWxzLCBKc29uVmFsdWUgfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHsgUmxqc29uLCBUYWJsZUNmZywgVGFibGVLZXksIFRhYmxlVHlwZSB9IGZyb20gJ0BybGpzb24vcmxqc29uJztcblxuaW1wb3J0IHsgSW9Ub29scyB9IGZyb20gJy4vaW8tdG9vbHMudHMnO1xuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcblxuLyoqXG4gKiBJbi1NZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJsanNvbiBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb01lbSBpbXBsZW1lbnRzIElvIHtcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIENvbnN0cnVjdG9yICYgZXhhbXBsZVxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc3RhdGljIGV4YW1wbGUgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBJb01lbSgpO1xuICB9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmFsXG4gIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHkucHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBEdW1wXG5cbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wKCk7XG4gIH1cblxuICBhc3luYyBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wVGFibGUocmVxdWVzdCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gUm93c1xuXG4gIHJlYWRSb3dzKHJlcXVlc3Q6IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZFJvd3MocmVxdWVzdCk7XG4gIH1cblxuICBhc3luYyByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcbiAgICBpZiAoIXRhYmxlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGFibGVEYXRhLl9kYXRhLmxlbmd0aCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gV3JpdGVcblxuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRlKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFRhYmxlIG1hbmFnZW1lbnRcbiAgYXN5bmMgdGFibGVFeGlzdHModGFibGVLZXk6IFRhYmxlS2V5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bdGFibGVLZXldIGFzIFRhYmxlVHlwZTtcbiAgICByZXR1cm4gdGFibGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBjcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHsgdGFibGVDZmc6IFRhYmxlQ2ZnIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0KTtcbiAgfVxuXG4gIGFzeW5jIHRhYmxlQ2ZncygpOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGNvbnN0IHRhYmxlcyA9IHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEgYXMgVGFibGVDZmdbXTtcblxuICAgIC8vIFRha2UgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggdHlwZSBrZXlcbiAgICBjb25zdCBuZXdlc3RWZXJzaW9uOiBSZWNvcmQ8VGFibGVLZXksIFRhYmxlQ2ZnPiA9IHt9O1xuICAgIGZvciAobGV0IGkgPSB0YWJsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVzW2ldO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBuZXdlc3RWZXJzaW9uW3RhYmxlLmtleV07XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdERhdGEgPSBPYmplY3QudmFsdWVzKG5ld2VzdFZlcnNpb24pLnJldmVyc2UoKTtcblxuICAgIHJldHVybiBoaXAoe1xuICAgICAgdGFibGVDZmdzOiB7XG4gICAgICAgIF9kYXRhOiByZXN1bHREYXRhLFxuICAgICAgfSxcbiAgICB9IGFzIFJsanNvbik7XG4gIH1cblxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIC8vIFByaXZhdGVcbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gIHByaXZhdGUgX2lvVG9vbHMhOiBJb1Rvb2xzO1xuXG4gIHByaXZhdGUgX2lzUmVhZHkgPSBuZXcgSXNSZWFkeSgpO1xuXG4gIHByaXZhdGUgX21lbTogUmxqc29uID0gaGlwKHt9IGFzIFJsanNvbik7XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX2luaXQoKSB7XG4gICAgdGhpcy5faW9Ub29scyA9IG5ldyBJb1Rvb2xzKHRoaXMpO1xuICAgIHRoaXMuX2luaXRUYWJsZUNmZ3MoKTtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLmluaXRSZXZpc2lvbnNUYWJsZSgpO1xuXG4gICAgdGhpcy5faXNSZWFkeS5yZXNvbHZlKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfaW5pdFRhYmxlQ2ZncyA9ICgpID0+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IElvVG9vbHMudGFibGVDZmdzVGFibGVDZmc7XG5cbiAgICB0aGlzLl9tZW0udGFibGVDZmdzID0gaGlwKHtcbiAgICAgIF9kYXRhOiBbdGFibGVDZmddLFxuICAgICAgX3RhYmxlQ2ZnOiB0YWJsZUNmZy5faGFzaCBhcyBzdHJpbmcsXG4gICAgfSk7XG5cbiAgICBoaXAodGhpcy5fbWVtLCB7IHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiB0cnVlLCB0aHJvd09uV3JvbmdIYXNoZXM6IGZhbHNlIH0pO1xuICB9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHtcbiAgICB0YWJsZUNmZzogVGFibGVDZmc7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFibGUgY29uZmlnIGlzIGNvbXBhdGlibGVcbiAgICAvLyB3aXRoIGFuIHBvdGVudGlhbCBleGlzdGluZyB0YWJsZVxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gcmVxdWVzdC50YWJsZUNmZztcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHRhYmxlQ2ZnKTtcblxuICAgIGNvbnN0IHsga2V5IH0gPSB0YWJsZUNmZztcblxuICAgIC8vIFJlY3JlYXRlIGhhc2hlcyBpbiB0aGUgY2FzZSB0aGUgZXhpc3RpbmcgaGFzaGVzIGFyZSB3cm9uZ1xuICAgIGNvbnN0IG5ld0NvbmZpZyA9IGhzaCh0YWJsZUNmZyk7XG5cbiAgICAvLyBGaW5kIGFuIGV4aXN0aW5nIHRhYmxlIGNvbmZpZyB3aXRoIHRoZSBzYW1lIGhhc2hcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IGF3YWl0IHRoaXMuX2lvVG9vbHMudGFibGVDZmdPck51bGwoa2V5KTtcblxuICAgIC8vIFdyaXRlIHRoZSBuZXcgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXG4gICAgaWYgKCFleGlzdGluZ0NvbmZpZykge1xuICAgICAgdGhpcy5fY3JlYXRlVGFibGUobmV3Q29uZmlnLCBrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leHRlbmRUYWJsZShleGlzdGluZ0NvbmZpZywgbmV3Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfY3JlYXRlVGFibGUobmV3Q29uZmlnOiBUYWJsZUNmZywgdGFibGVLZXk6IFRhYmxlS2V5KSB7XG4gICAgLy8gV3JpdGUgdGhlIHRhYmxlIGNvbmZpZyBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIGEgdGFibGUgYW5kIHdyaXRlIGl0IGludG8gdGhlIGRhdGFiYXNlXG4gICAgY29uc3QgdGFibGU6IFRhYmxlVHlwZSA9IHtcbiAgICAgIF9kYXRhOiBbXSxcbiAgICAgIF90YWJsZUNmZzogbmV3Q29uZmlnLl9oYXNoIGFzIHN0cmluZyxcbiAgICB9O1xuXG4gICAgdGhpcy5fbWVtW3RhYmxlS2V5XSA/Pz0gaGlwKHRhYmxlKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF9leHRlbmRUYWJsZShleGlzdGluZ0NvbmZpZzogVGFibGVDZmcsIG5ld0NvbmZpZzogVGFibGVDZmcpIHtcbiAgICAvLyBObyBjb2x1bW5zIGFkZGVkPyBSZXR1cm4uXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmNvbHVtbnMubGVuZ3RoID09PSBuZXdDb25maWcuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbmV3IHRhYmxlIGNvbmZpZyBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjb25maWcgb2YgdGhlIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bbmV3Q29uZmlnLmtleV0gYXMgVGFibGVUeXBlO1xuICAgIHRhYmxlLl90YWJsZUNmZyA9IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmc7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cblxuICBwcml2YXRlIGFzeW5jIF9kdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgcmV0dXJuIGNvcHkodGhpcy5fbWVtKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9kdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgW3JlcXVlc3QudGFibGVdOiBjb3B5KHRhYmxlKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX3dyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhZGRlZERhdGEgPSBoc2gocmVxdWVzdC5kYXRhKTtcbiAgICBjb25zdCB0YWJsZXMgPSBPYmplY3Qua2V5cyhhZGRlZERhdGEpO1xuXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJlcXVlc3QuZGF0YSk7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZURhdGFEb2VzTm90TWF0Y2hDZmcocmVxdWVzdC5kYXRhKTtcblxuICAgIGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG4gICAgICBpZiAodGFibGUuc3RhcnRzV2l0aCgnXycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGRUYWJsZSA9IHRoaXMuX21lbVt0YWJsZV0gYXMgVGFibGVUeXBlO1xuICAgICAgY29uc3QgbmV3VGFibGUgPSBhZGRlZERhdGFbdGFibGVdIGFzIFRhYmxlVHlwZTtcblxuICAgICAgLy8gVGFibGUgZXhpc3RzLiBNZXJnZSBkYXRhXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV3VGFibGUuX2RhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGl0ZW0uX2hhc2g7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IG9sZFRhYmxlLl9kYXRhLmZpbmQoKGkpID0+IGkuX2hhc2ggPT09IGhhc2gpO1xuICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgIG9sZFRhYmxlLl9kYXRhLnB1c2goaXRlbSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVjYWxjIG1haW4gaGFzaGVzXG4gICAgKHRoaXMuX21lbSBhcyBhbnkpLl9oYXNoID0gJyc7XG4gICAgaGlwKHRoaXMuX21lbSwgeyB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UsIHRocm93T25Xcm9uZ0hhc2hlczogZmFsc2UgfSk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBhc3luYyBfcmVhZFJvd3MocmVxdWVzdDoge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIH07XG4gIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgICByZXF1ZXN0LnRhYmxlLFxuICAgICAgT2JqZWN0LmtleXMocmVxdWVzdC53aGVyZSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3JlcXVlc3QudGFibGVdIGFzIFRhYmxlVHlwZTtcblxuICAgIGNvbnN0IHJlc3VsdDogUmxqc29uID0ge1xuICAgICAgW3JlcXVlc3QudGFibGVdOiB7XG4gICAgICAgIF9kYXRhOiB0YWJsZS5fZGF0YS5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIGluIHJlcXVlc3Qud2hlcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSByb3dbY29sdW1uXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSByZXF1ZXN0LndoZXJlW2NvbHVtbl07XG4gICAgICAgICAgICBpZiAoIWVxdWFscyhhLCBiKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSBhcyBhbnk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSW8sIElvTWVtIH0gZnJvbSAnLi9pbmRleC50cyc7XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIElvIGltcGxlbWVudGF0aW9uIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHRvIGJlIHVzZWQgaW5cbiAqIGNvbmZvcm1hbmNlIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElvVGVzdFNldHVwIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHJldHVybnMgVGhlIGlvIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgaW5pdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGVhcnMgZG93biB0aGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIHRlYXJEb3duOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaW8gaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbiB0aGUgY29uZm9ybWFuY2UgdGVzdHMuXG4gICAqL1xuICBpbzogSW87XG59XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vLyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJb1Rlc3RTZXR1cCBpbnRlcmZhY2VcbmV4cG9ydCBjb25zdCBleGFtcGxlVGVzdFNldHVwID0gKCk6IElvVGVzdFNldHVwID0+IHtcbiAgcmV0dXJuIHtcbiAgICBpbzogbmV3IElvTWVtKCksXG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW8gaW1wbGVtZW50YXRpb25cbiAgICB9LFxuICAgIHRlYXJEb3duOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUZWFyIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uXG4gICAgfSxcbiAgfTtcbn07XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcbmltcG9ydCB7IFJsanNvbiwgVGFibGVDZmcsIFRhYmxlS2V5IH0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuZXhwb3J0IGludGVyZmFjZSBJbyB7XG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmFsXG5cbiAgLyoqIFN0YXJ0cyB0aGUgaW5pdGlhbGl6YXRpb24gKi9cbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBDbG9zZXMgdGhlIGlvICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIEEgcHJvbWlzZSByZXNvbHZpbmcgb25jZSB0aGUgSW8gaW50ZXJmYWNlIGlzIHJlYWR5XG4gICAqXG4gICAqIPCfkqEgVXNlIEBybGpzb24vaXMtcmVhZHlcbiAgICovXG4gIGlzUmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gRHVtcFxuXG4gIC8qKiBSZXR1cm5zIHRoZSBjb21wbGV0ZSBkYiBjb250ZW50IGFzIFJsanNvbiAqL1xuICBkdW1wKCk6IFByb21pc2U8Umxqc29uPjtcblxuICAvKiogUmV0dXJucyB0aGUgZHVtcCBvZiBhIGNvbXBsZXRlIHRhYmxlICovXG4gIGR1bXBUYWJsZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Umxqc29uPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gVGFibGVzXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFibGUgZXhpc3RzXG4gICAqL1xuICB0YWJsZUV4aXN0cyh0YWJsZUtleTogVGFibGVLZXkpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGFibGUgd2l0aCBhIGdpdmVuIGNvbmZpZy5cbiAgICogSWYgdGhlIHRhYmxlIGFscmVhZHkgZXhpc3RzLCBuZXcgY29sdW1ucyBhcmUgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIHRhYmxlLlxuICAgKiBJZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlnLlxuICAgKiBJZiB0aGUgdGFibGUgZXhpc3RzIGFuZCBjb2x1bW5zIGFyZSByZW1vdmVkLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIHRoZSBjb2x1bW4gdHlwZSBpcyBjaGFuZ2VkLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqL1xuICBjcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHsgdGFibGVDZmc6IFRhYmxlQ2ZnIH0pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEganNvbiBzdHJ1Y3R1cmUgcmV0dXJuaW5nIGN1cnJlbnQgdGFibGUgY29uZmlndXJhdGlvbnNcbiAgICovXG4gIHRhYmxlQ2ZncygpOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFdyaXRlXG5cbiAgLyoqIFdyaXRlcyBSbGpzb24gZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSAqL1xuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gUmVhZCByb3dzXG5cbiAgLyoqIFF1ZXJpZXMgYSBsaXN0IG9mIHJvd3MgKi9cbiAgcmVhZFJvd3MocmVxdWVzdDoge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIHwgbnVsbCB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+O1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZ2l2ZW4gdGFibGUgKi9cbiAgcm93Q291bnQodGFibGU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPjtcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmV4cG9ydCBjb25zdCBleGFtcGxlSW8gPVxuICAnQ2hlY2tvdXQgQHJsanNvbi9pby1tZW0gZm9yIGFuIGV4YW1wbGUgaW1wbGVtZW50YXRpb24nO1xuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IEpzb24gfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHtcbiAgQnVmZmV0LFxuICBDYWtlLFxuICBpdGVyYXRlVGFibGVzU3luYyxcbiAgTGF5ZXIsXG4gIFJlZixcbiAgUmxqc29uLFxuICBUYWJsZUtleSxcbn0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBEZXNjcmliZXMgYSByb3cgdGhhdCByZWZlcmVuY2VzIGEgY2hpbGQgdGFibGUgcm93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdGFibGUgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCB0YWJsZVxuICAgKi9cbiAgW3BhcmVudFRhYmxlOiBUYWJsZUtleV06IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFyZW50IHJvdyB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHJvd1xuICAgICAqL1xuICAgIFtwYXJlbnRSb3c6IFJlZl06IHtcbiAgICAgIC8qKlxuICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgcmVmZXJlbmNlLCBlLmcuIGFuIGFycmF5IGluZGV4IGV0Yy5cbiAgICAgICAqL1xuICAgICAgZGV0YWlscz86IEpzb247XG4gICAgfTtcbiAgfTtcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBwYXJlbnQgdGFibGUgcm93cyByZWZlcmVuY2luZyBhIGNoaWxkIHRhYmxlIHJvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldmVyc2VSZWZzIHtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZCB0YWJsZSB3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxuICAgKi9cbiAgW2NoaWxkVGFibGU6IFRhYmxlS2V5XToge1xuICAgIC8qKlxuICAgICAqIFRoZSByb3cgaGFzaHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXG4gICAgICovXG4gICAgW2NoaWxkUm93OiBSZWZdOiBQYXJlbnRSZWY7XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAqL1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSByZXZlcnNlIHJlZmVyZW5jZXMgZm9yIGEgZ2l2ZW4gcmxqc29uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY2FsY1JldmVyc2VSZWZzID0gKHJsanNvbjogUmxqc29uKTogUmV2ZXJzZVJlZnMgPT4ge1xuICBjb25zdCByZXN1bHQ6IFJldmVyc2VSZWZzID0ge307XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBQcmVwYXJlIGRhdGEgc3RydWN0dXJlXG4gIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKGNoaWxkVGFibGVLZXksIHRhYmxlKSA9PiB7XG4gICAgY29uc3QgY2hpbGRUYWJsZTogeyBbY2hpbGRSb3dIYXNoOiBzdHJpbmddOiBQYXJlbnRSZWYgfSA9IHt9O1xuICAgIHJlc3VsdFtjaGlsZFRhYmxlS2V5XSA9IGNoaWxkVGFibGU7XG4gICAgZm9yIChjb25zdCBjaGlsZFJvdyBvZiB0YWJsZS5fZGF0YSkge1xuICAgICAgY2hpbGRUYWJsZVtjaGlsZFJvdy5faGFzaF0gPSB7fTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gR2VuZXJhdGUgcmV2ZXJzZSByZWZlcmVuY2VzXG4gIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZSkgPT4ge1xuICAgIC8vIEl0ZXJhdGUgYWxsIHJvd3Mgb2YgZWFjaCB0YWJsZVxuICAgIGZvciAoY29uc3QgcGFyZW50VGFibGVSb3cgb2YgcGFyZW50VGFibGUuX2RhdGEpIHtcbiAgICAgIC8vIEZpbmQgb3V0IHdoZSBvdGhlciB0YWJsZXMgJiByb3dzIGFyZSByZWZlcmVuY2VkIGJ5IHRoaXMgcm93XG4gICAgICAvLyBXcml0ZSB0aGVzZSBpbmZvcm1hdGlvbiBpbnR0byByZXN1bHRcbiAgICAgIHN3aXRjaCAocGFyZW50VGFibGUuX3R5cGUpIHtcbiAgICAgICAgY2FzZSAnaW5ncmVkaWVudHMnOlxuICAgICAgICAgIF93cml0ZUluZ3JlZGllbnRSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdsYXllcnMnOiB7XG4gICAgICAgICAgX3dyaXRlTGF5ZXJSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3NsaWNlSWRzJzoge1xuICAgICAgICAgIC8vIFNsaWNlIGlkcyBkbyBub3QgcmVmZXJlbmNlIG90aGVyIHRhYmxlc1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnY2FrZXMnOiB7XG4gICAgICAgICAgX3dyaXRlQ2FrZVJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYnVmZmV0cyc6IHtcbiAgICAgICAgICBfd3JpdGVCdWZmZXRSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qIHY4IGlnbm9yZSBlbmQgKi9cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUluZ3JlZGllbnRSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IEpzb24sXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBwYXJlbnRDb2x1bW5OYW1lIGluIHBhcmVudFJvdykge1xuICAgIGlmIChwYXJlbnRDb2x1bW5OYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnRDb2x1bW5OYW1lLmVuZHNXaXRoKCdSZWYnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRDb2x1bW5OYW1lLnNsaWNlKDAsIC0zKTtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3dbcGFyZW50Q29sdW1uTmFtZV0gYXMgc3RyaW5nO1xuXG4gICAgX3dyaXRlKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2hpbGRUYWJsZU5hbWUsXG4gICAgICBjaGlsZFJvd0hhc2gsXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICBwYXJlbnRSb3dIYXNoLFxuICAgICk7XG4gIH1cbn07XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGVMYXllclJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogTGF5ZXIsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cuaW5ncmVkaWVudHNUYWJsZTtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBzbGljZUlkIGluIHBhcmVudFJvdy5hc3NpZ24pIHtcbiAgICBpZiAoc2xpY2VJZC5zdGFydHNXaXRoKCdfJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaWNlSGFzaCA9IHBhcmVudFJvdy5hc3NpZ25bc2xpY2VJZF0gYXMgc3RyaW5nO1xuXG4gICAgX3dyaXRlKHJlc3VsdCwgY2hpbGRUYWJsZU5hbWUsIHNsaWNlSGFzaCwgcGFyZW50VGFibGVOYW1lLCBwYXJlbnRSb3dIYXNoKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUNha2VSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IENha2UsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBsYXllciBpbiBwYXJlbnRSb3cubGF5ZXJzKSB7XG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cubGF5ZXJzVGFibGU7XG4gICAgY29uc3QgY2hpbGRSb3dIYXNoID0gcGFyZW50Um93LmxheWVyc1tsYXllcl0gYXMgc3RyaW5nO1xuICAgIF93cml0ZShcbiAgICAgIHJlc3VsdCxcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxuICAgICAgY2hpbGRSb3dIYXNoLFxuICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgcGFyZW50Um93SGFzaCxcbiAgICApO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlQnVmZmV0UmVmcyA9IChcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcbiAgcGFyZW50Um93OiBCdWZmZXQsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIHBhcmVudFJvdy5pdGVtcykge1xuICAgIGNvbnN0IGNoaWxkVGFibGVOYW1lID0gaXRlbS50YWJsZTtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBpdGVtLnJlZjtcbiAgICBfd3JpdGUoXG4gICAgICByZXN1bHQsXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcbiAgICAgIGNoaWxkUm93SGFzaCxcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgIHBhcmVudFJvd0hhc2gsXG4gICAgKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZSA9IChcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbiAgY2hpbGRUYWJsZU5hbWU6IHN0cmluZyxcbiAgY2hpbGRSb3dIYXNoOiBzdHJpbmcsXG4gIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nLFxuICBwYXJlbnRSb3dIYXNoOiBzdHJpbmcsXG4pID0+IHtcbiAgY29uc3QgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGUgPSAocmVzdWx0W2NoaWxkVGFibGVOYW1lXSA/Pz0ge30pO1xuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvdyA9IChyZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVtjaGlsZFJvd0hhc2hdID8/PVxuICAgIHt9KTtcblxuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdID8/PSB7fTtcbiAgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGVSb3dbcGFyZW50VGFibGVOYW1lXVtwYXJlbnRSb3dIYXNoXSA/Pz0ge307XG59O1xuIl0sIm5hbWVzIjpbImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQXNCTyxNQUFNLFdBQU4sTUFBTSxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtuQixZQUE0QixJQUFRO0FBaUNwQztBQUFBO0FBQUE7QUFBQSw4Q0FBcUIsWUFBWTtBQUMvQixZQUFNLFdBQXFCO0FBQUEsUUFDekIsS0FBSztBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsVUFBVTtBQUFBLFFBRVYsU0FBUztBQUFBLFVBQ1AsRUFBRSxLQUFLLFNBQVMsTUFBTSxTQUFTO0FBQUEsVUFDL0IsRUFBRSxLQUFLLFNBQVMsTUFBTSxTQUFTO0FBQUEsVUFDL0IsRUFBRSxLQUFLLGVBQWUsTUFBTSxTQUFTO0FBQUEsVUFDckMsRUFBRSxLQUFLLGFBQWEsTUFBTSxTQUFTO0FBQUEsVUFDbkMsRUFBRSxLQUFLLGFBQWEsTUFBTSxTQUFTO0FBQUEsVUFDbkMsRUFBRSxLQUFLLE1BQU0sTUFBTSxTQUFTO0FBQUEsUUFBQTtBQUFBLE1BRWhDO0FBRUEsWUFBTSxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsVUFBVTtBQUFBLElBQ2hEO0FBcEQ0QixTQUFBLEtBQUE7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLNUIsV0FBVyxvQkFBb0I7QUFDN0IsVUFBTSxXQUFXLElBQWM7QUFBQSxNQUM3QixPQUFPO0FBQUEsTUFDUCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFFVixTQUFTO0FBQUEsUUFDUCxFQUFFLEtBQUssU0FBUyxNQUFNLFNBQVM7QUFBQSxRQUMvQixFQUFFLEtBQUssT0FBTyxNQUFNLFNBQVM7QUFBQSxR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
543
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7XG4gIGl0ZXJhdGVUYWJsZXMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICB0aHJvd09uSW52YWxpZFRhYmxlQ2ZnLFxuICB2YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyxcbn0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG5pbXBvcnQgeyBJb01lbSB9IGZyb20gJy4vaW8tbWVtLnRzJztcbmltcG9ydCB7IElvIH0gZnJvbSAnLi9pby50cyc7XG5cbi8qKlxuICogUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb1Rvb2xzIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBpbyBUaGUgSW8gaW50ZXJmYWNlIHRvIHVzZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlvOiBJbykge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFibGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdGFibGVDZmdzIHRhYmxlLlxuICAgKi9cbiAgc3RhdGljIGdldCB0YWJsZUNmZ3NUYWJsZUNmZygpIHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGhpcDxUYWJsZUNmZz4oe1xuICAgICAgX2hhc2g6ICcnLFxuICAgICAga2V5OiAndGFibGVDZmdzJyxcbiAgICAgIHR5cGU6ICdpbmdyZWRpZW50cycsXG4gICAgICBpc0hlYWQ6IGZhbHNlLFxuICAgICAgaXNSb290OiBmYWxzZSxcbiAgICAgIGlzU2hhcmVkOiB0cnVlLFxuICAgICAgcHJldmlvdXM6ICcnLFxuXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHsga2V5OiAnX2hhc2gnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ2tleScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAndHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAnaXNIZWFkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgIHsga2V5OiAnaXNSb290JywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgIHsga2V5OiAnaXNTaGFyZWQnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgeyBrZXk6ICdwcmV2aW91cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAnY29sdW1ucycsIHR5cGU6ICdqc29uQXJyYXknIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhYmxlQ2ZnO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSByZXZpc2lvbnMgdGFibGUuXG4gICAqL1xuICBpbml0UmV2aXNpb25zVGFibGUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVDZmc6IFRhYmxlQ2ZnID0ge1xuICAgICAga2V5OiAncmV2aXNpb25zJyxcbiAgICAgIHR5cGU6ICdpbmdyZWRpZW50cycsXG4gICAgICBpc0hlYWQ6IHRydWUsXG4gICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICBpc1NoYXJlZDogZmFsc2UsXG5cbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgeyBrZXk6ICdfaGFzaCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHsga2V5OiAndGFibGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ3ByZWRlY2Vzc29yJywgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgeyBrZXk6ICdzdWNjZXNzb3InLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB7IGtleTogJ3RpbWVzdGFtcCcsIHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgIHsga2V5OiAnaWQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5pby5jcmVhdGVPckV4dGVuZFRhYmxlKHsgdGFibGVDZmcgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4YW1wbGUgb2JqZWN0IGZvciB0ZXN0IHB1cnBvc2VzXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIGlvIHRvb2xzXG4gICAqL1xuICBzdGF0aWMgZXhhbXBsZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbyA9IGF3YWl0IElvTWVtLmV4YW1wbGUoKTtcbiAgICBhd2FpdCBpby5pbml0KCk7XG4gICAgYXdhaXQgaW8uaXNSZWFkeSgpO1xuICAgIHJldHVybiBuZXcgSW9Ub29scyhpbyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3RcbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuaW8udGFibGVFeGlzdHModGFibGUpO1xuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGlmIGFueSBvZiB0aGUgdGFibGVzIGluIHJsanNvbiBkbyBub3QgZXhpc3RcbiAgICogQHBhcmFtIHJsanNvbiAtIFRoZSBSbGpzb24gb2JqZWN0IHRvIGNoZWNrXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJsanNvbjogUmxqc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGl0ZXJhdGVUYWJsZXMocmxqc29uLCBhc3luYyAodGFibGVLZXkpID0+IHtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZUtleSk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGVLZXl9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1pc3NpbmdUYWJsZXMgPSAoZSBhcyBBcnJheTxhbnk+KS5tYXAoKGUpID0+IGUudGFibGVLZXkpO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIHRhYmxlcyBkbyBub3QgZXhpc3Q6ICR7bWlzc2luZ1RhYmxlcy5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIGFsbCB0YWJsZSBuYW1lc1xuICAgKi9cbiAgYXN5bmMgYWxsVGFibGVLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGhpcy5pby50YWJsZUNmZ3MoKSkudGFibGVDZmdzLl9kYXRhLm1hcChcbiAgICAgIChlKSA9PiBlLmtleSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyB0YWJsZUNmZyh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnPiB7XG4gICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHRhYmxlKTtcbiAgICBpZiAoIXRhYmxlQ2ZnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVDZmchO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZSBvciBudWxsIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuXG4gICAqL1xuICBhc3luYyB0YWJsZUNmZ09yTnVsbCh0YWJsZTogVGFibGVLZXkpOiBQcm9taXNlPFRhYmxlQ2ZnIHwgbnVsbD4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZncyA9IGF3YWl0IHRoaXMuaW8udGFibGVDZmdzKCk7XG4gICAgY29uc3QgdGFibGVDZmcgPSB0YWJsZUNmZ3MudGFibGVDZmdzLl9kYXRhLmZpbmQoKGUpID0+IGUua2V5ID09PSB0YWJsZSk7XG4gICAgcmV0dXJuIHRhYmxlQ2ZnID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNvbHVtbiBuYW1lcyBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyBhbGxDb2x1bW5LZXlzKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIHdoZW4gYSBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gYSBnaXZlbiB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGUgLSBUaGUgdGFibGUgdG8gY2hlY2tcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1uIHRvIGNoZWNrXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgdGFibGU6IFRhYmxlS2V5LFxuICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbikgPT4gIWNvbHVtbktleXMuaW5jbHVkZXMoY29sdW1uKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIGNvbHVtbnMgZG8gbm90IGV4aXN0IGluIHRhYmxlIFwiJHt0YWJsZX1cIjogJHttaXNzaW5nQ29sdW1ucy5qb2luKFxuICAgICAgICAgICcsICcsXG4gICAgICAgICl9LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiBhIHRhYmxlIHVwZGF0ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRhYmxlXG4gICAqIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh1cGRhdGU6IFRhYmxlQ2ZnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ID0gYEludmFsaWQgdXBkYXRlIG9mIHRhYmxlIGFibGUgXCIke3VwZGF0ZS5rZXl9XCJgO1xuXG4gICAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyh1cGRhdGUpO1xuXG4gICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHVwZGF0ZS5rZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgLy8gSGF2ZSBjb2x1bW5zIGJlZW4gZGVsZXRlZD9cbiAgICAgIGlmIChleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA+IHVwZGF0ZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1uS2V5cyA9IGV4aXN0aW5nLmNvbHVtbnNcbiAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+ICF1cGRhdGUuY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlbGV0ZWRDb2x1bW5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1ucyA9IGRlbGV0ZWRDb2x1bW5LZXlzLmpvaW4oJywgJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogQ29sdW1ucyBtdXN0IG5vdCBiZSBkZWxldGVkLiBgICtcbiAgICAgICAgICAgICAgYERlbGV0ZWQgY29sdW1uczogJHtkZWxldGVkQ29sdW1uc319YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIGtleXMgY2hhbmdlZD9cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZy5jb2x1bW5zW2ldLmtleTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGlmIChiZWZvcmUgIT09IGFmdGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXG4gICAgICAgICAgICAgIGBDb2x1bW4ga2V5cyBtdXN0IG5vdCBjaGFuZ2UhIGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtiZWZvcmV9XCIgd2FzIHJlbmFtZWQgaW50byBcIiR7YWZ0ZXJ9XCIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIHR5cGVzIGNoYW5nZWQ/XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGV4aXN0aW5nLmNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS50eXBlO1xuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke3ByZWZpeH06IGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIHR5cGVzIG11c3Qgbm90IGNoYW5nZSEgYCArXG4gICAgICAgICAgICAgIGBUeXBlIG9mIGNvbHVtbiBcIiR7Y29sdW1ufVwiIHdhcyBjaGFuZ2VkIGZyb20gXCIke2JlZm9yZX1cIiB0byAke2FmdGVyfS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkbyBub3QgbWF0Y2ggdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhkYXRhOiBSbGpzb24pIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBhd2FpdCBpdGVyYXRlVGFibGVzKGRhdGEsIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlS2V5KTtcbiAgICAgIGNvbnN0IHRhYmxlID0gZGF0YVt0YWJsZUtleV07XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyh0YWJsZS5fZGF0YSwgdGFibGVDZmcpKTtcbiAgICB9KTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGFibGUgZGF0YSBkb2VzIG5vdCBtYXRjaCB0aGUgY29uZmlndXJhdGlvbi5cXG5cXG5FcnJvcnM6XFxuJHtlcnJvcnNcbiAgICAgICAgICAubWFwKChlKSA9PiBgLSAke2V9YClcbiAgICAgICAgICAuam9pbignXFxuJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwLCBoc2ggfSBmcm9tICdAcmxqc29uL2hhc2gnO1xuaW1wb3J0IHsgSXNSZWFkeSB9IGZyb20gJ0BybGpzb24vaXMtcmVhZHknO1xuaW1wb3J0IHsgY29weSwgZXF1YWxzLCBKc29uVmFsdWUgfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHtcbiAgaXRlcmF0ZVRhYmxlc1N5bmMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICBUYWJsZVR5cGUsXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcblxuaW1wb3J0IHsgSW9Ub29scyB9IGZyb20gJy4vaW8tdG9vbHMudHMnO1xuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcblxuLyoqXG4gKiBJbi1NZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJsanNvbiBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb01lbSBpbXBsZW1lbnRzIElvIHtcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIENvbnN0cnVjdG9yICYgZXhhbXBsZVxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc3RhdGljIGV4YW1wbGUgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBJb01lbSgpO1xuICB9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmFsXG4gIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHkucHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBEdW1wXG5cbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wKCk7XG4gIH1cblxuICBhc3luYyBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wVGFibGUocmVxdWVzdCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gUm93c1xuXG4gIHJlYWRSb3dzKHJlcXVlc3Q6IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZFJvd3MocmVxdWVzdCk7XG4gIH1cblxuICBhc3luYyByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcbiAgICBpZiAoIXRhYmxlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGFibGVEYXRhLl9kYXRhLmxlbmd0aCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gV3JpdGVcblxuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRlKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFRhYmxlIG1hbmFnZW1lbnRcbiAgYXN5bmMgdGFibGVFeGlzdHModGFibGVLZXk6IFRhYmxlS2V5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bdGFibGVLZXldIGFzIFRhYmxlVHlwZTtcbiAgICByZXR1cm4gdGFibGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBjcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHsgdGFibGVDZmc6IFRhYmxlQ2ZnIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0KTtcbiAgfVxuXG4gIGFzeW5jIHRhYmxlQ2ZncygpOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGNvbnN0IHRhYmxlcyA9IHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEgYXMgVGFibGVDZmdbXTtcblxuICAgIC8vIFRha2UgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggdHlwZSBrZXlcbiAgICBjb25zdCBuZXdlc3RWZXJzaW9uOiBSZWNvcmQ8VGFibGVLZXksIFRhYmxlQ2ZnPiA9IHt9O1xuICAgIGZvciAobGV0IGkgPSB0YWJsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVzW2ldO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBuZXdlc3RWZXJzaW9uW3RhYmxlLmtleV07XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdERhdGEgPSBPYmplY3QudmFsdWVzKG5ld2VzdFZlcnNpb24pLnJldmVyc2UoKTtcblxuICAgIHJldHVybiBoaXAoe1xuICAgICAgdGFibGVDZmdzOiB7XG4gICAgICAgIF9kYXRhOiByZXN1bHREYXRhLFxuICAgICAgfSxcbiAgICB9IGFzIFJsanNvbik7XG4gIH1cblxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIC8vIFByaXZhdGVcbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gIHByaXZhdGUgX2lvVG9vbHMhOiBJb1Rvb2xzO1xuXG4gIHByaXZhdGUgX2lzUmVhZHkgPSBuZXcgSXNSZWFkeSgpO1xuXG4gIHByaXZhdGUgX21lbTogUmxqc29uID0gaGlwKHt9IGFzIFJsanNvbik7XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX2luaXQoKSB7XG4gICAgdGhpcy5faW9Ub29scyA9IG5ldyBJb1Rvb2xzKHRoaXMpO1xuICAgIHRoaXMuX2luaXRUYWJsZUNmZ3MoKTtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLmluaXRSZXZpc2lvbnNUYWJsZSgpO1xuXG4gICAgdGhpcy5faXNSZWFkeS5yZXNvbHZlKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfaW5pdFRhYmxlQ2ZncyA9ICgpID0+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IElvVG9vbHMudGFibGVDZmdzVGFibGVDZmc7XG5cbiAgICB0aGlzLl9tZW0udGFibGVDZmdzID0gaGlwKHtcbiAgICAgIF9kYXRhOiBbdGFibGVDZmddLFxuICAgICAgX3RhYmxlQ2ZnOiB0YWJsZUNmZy5faGFzaCBhcyBzdHJpbmcsXG4gICAgfSk7XG5cbiAgICBoaXAodGhpcy5fbWVtLCB7IHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiB0cnVlLCB0aHJvd09uV3JvbmdIYXNoZXM6IGZhbHNlIH0pO1xuICB9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHtcbiAgICB0YWJsZUNmZzogVGFibGVDZmc7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFibGUgY29uZmlnIGlzIGNvbXBhdGlibGVcbiAgICAvLyB3aXRoIGFuIHBvdGVudGlhbCBleGlzdGluZyB0YWJsZVxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gcmVxdWVzdC50YWJsZUNmZztcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHRhYmxlQ2ZnKTtcblxuICAgIGNvbnN0IHsga2V5IH0gPSB0YWJsZUNmZztcblxuICAgIC8vIFJlY3JlYXRlIGhhc2hlcyBpbiB0aGUgY2FzZSB0aGUgZXhpc3RpbmcgaGFzaGVzIGFyZSB3cm9uZ1xuICAgIGNvbnN0IG5ld0NvbmZpZyA9IGhzaCh0YWJsZUNmZyk7XG5cbiAgICAvLyBGaW5kIGFuIGV4aXN0aW5nIHRhYmxlIGNvbmZpZyB3aXRoIHRoZSBzYW1lIGhhc2hcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IGF3YWl0IHRoaXMuX2lvVG9vbHMudGFibGVDZmdPck51bGwoa2V5KTtcblxuICAgIC8vIFdyaXRlIHRoZSBuZXcgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXG4gICAgaWYgKCFleGlzdGluZ0NvbmZpZykge1xuICAgICAgdGhpcy5fY3JlYXRlVGFibGUobmV3Q29uZmlnLCBrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leHRlbmRUYWJsZShleGlzdGluZ0NvbmZpZywgbmV3Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfY3JlYXRlVGFibGUobmV3Q29uZmlnOiBUYWJsZUNmZywgdGFibGVLZXk6IFRhYmxlS2V5KSB7XG4gICAgLy8gV3JpdGUgdGhlIHRhYmxlIGNvbmZpZyBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIGEgdGFibGUgYW5kIHdyaXRlIGl0IGludG8gdGhlIGRhdGFiYXNlXG4gICAgY29uc3QgdGFibGU6IFRhYmxlVHlwZSA9IHtcbiAgICAgIF9kYXRhOiBbXSxcbiAgICAgIF90YWJsZUNmZzogbmV3Q29uZmlnLl9oYXNoIGFzIHN0cmluZyxcbiAgICB9O1xuXG4gICAgdGhpcy5fbWVtW3RhYmxlS2V5XSA/Pz0gaGlwKHRhYmxlKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF9leHRlbmRUYWJsZShleGlzdGluZ0NvbmZpZzogVGFibGVDZmcsIG5ld0NvbmZpZzogVGFibGVDZmcpIHtcbiAgICAvLyBObyBjb2x1bW5zIGFkZGVkPyBSZXR1cm4uXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmNvbHVtbnMubGVuZ3RoID09PSBuZXdDb25maWcuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbmV3IHRhYmxlIGNvbmZpZyBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjb25maWcgb2YgdGhlIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bbmV3Q29uZmlnLmtleV0gYXMgVGFibGVUeXBlO1xuICAgIHRhYmxlLl90YWJsZUNmZyA9IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmc7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cblxuICBwcml2YXRlIGFzeW5jIF9kdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgcmV0dXJuIGNvcHkodGhpcy5fbWVtKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9kdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgW3JlcXVlc3QudGFibGVdOiBjb3B5KHRhYmxlKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX3dyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhZGRlZERhdGEgPSBoc2gocmVxdWVzdC5kYXRhKTtcbiAgICB0aGlzLl9yZW1vdmVOdWxsVmFsdWVzKGFkZGVkRGF0YSk7XG4gICAgY29uc3QgdGFibGVzID0gT2JqZWN0LmtleXMoYWRkZWREYXRhKTtcblxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVzRG9Ob3RFeGlzdChyZXF1ZXN0LmRhdGEpO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEYXRhRG9lc05vdE1hdGNoQ2ZnKHJlcXVlc3QuZGF0YSk7XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuICAgICAgaWYgKHRhYmxlLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkVGFibGUgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcbiAgICAgIGNvbnN0IG5ld1RhYmxlID0gYWRkZWREYXRhW3RhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICAgIC8vIFRhYmxlIGV4aXN0cy4gTWVyZ2UgZGF0YVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5ld1RhYmxlLl9kYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBpdGVtLl9oYXNoO1xuICAgICAgICBjb25zdCBleGlzdHMgPSBvbGRUYWJsZS5fZGF0YS5maW5kKChpKSA9PiBpLl9oYXNoID09PSBoYXNoKTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICBvbGRUYWJsZS5fZGF0YS5wdXNoKGl0ZW0gYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlY2FsYyBtYWluIGhhc2hlc1xuICAgICh0aGlzLl9tZW0gYXMgYW55KS5faGFzaCA9ICcnO1xuICAgIGhpcCh0aGlzLl9tZW0sIHsgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlLCB0aHJvd09uV3JvbmdIYXNoZXM6IGZhbHNlIH0pO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRSb3dzKHJlcXVlc3Q6IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHJlcXVlc3QudGFibGUpO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuQ29sdW1uRG9lc05vdEV4aXN0KFxuICAgICAgcmVxdWVzdC50YWJsZSxcbiAgICAgIE9iamVjdC5rZXlzKHJlcXVlc3Qud2hlcmUpLFxuICAgICk7XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICBjb25zdCByZXN1bHQ6IFJsanNvbiA9IHtcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXToge1xuICAgICAgICBfZGF0YTogdGFibGUuX2RhdGEuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBpbiByZXF1ZXN0LndoZXJlKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcm93W2NvbHVtbl07XG4gICAgICAgICAgICBjb25zdCBiID0gcmVxdWVzdC53aGVyZVtjb2x1bW5dO1xuICAgICAgICAgICAgaWYgKGIgPT09IG51bGwgJiYgYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVxdWFscyhhLCBiKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSBhcyBhbnk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgX3JlbW92ZU51bGxWYWx1ZXMocmxqc29uOiBSbGpzb24pIHtcbiAgICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sICh0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHJsanNvblt0YWJsZV0uX2RhdGE7XG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm93KSB7XG4gICAgICAgICAgaWYgKHJvd1trZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIEBsaWNlbnNlXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXG4vL1xuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxuXG5pbXBvcnQgeyBJbywgSW9NZW0gfSBmcm9tICcuL2luZGV4LnRzJztcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8qKlxuICogSW8gaW1wbGVtZW50YXRpb24gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgdG8gYmUgdXNlZCBpblxuICogY29uZm9ybWFuY2UgdGVzdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW9UZXN0U2V0dXAge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGlvIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcmV0dXJucyBUaGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqL1xuICBpbml0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUZWFycyBkb3duIHRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHJldHVybnMgVGhlIGlvIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgdGVhckRvd246ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBpbyBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkIGluIHRoZSBjb25mb3JtYW5jZSB0ZXN0cy5cbiAgICovXG4gIGlvOiBJbztcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8vIEV4YW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIElvVGVzdFNldHVwIGludGVyZmFjZVxuZXhwb3J0IGNvbnN0IGV4YW1wbGVUZXN0U2V0dXAgPSAoKTogSW9UZXN0U2V0dXAgPT4ge1xuICByZXR1cm4ge1xuICAgIGlvOiBuZXcgSW9NZW0oKSxcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxuICAgIH0sXG4gICAgdGVhckRvd246IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRlYXIgZG93biB0aGUgaW8gaW1wbGVtZW50YXRpb25cbiAgICB9LFxuICB9O1xufTtcbiIsIi8vIEBsaWNlbnNlXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXG4vL1xuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxuXG5pbXBvcnQgeyBKc29uVmFsdWUgfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHsgUmxqc29uLCBUYWJsZUNmZywgVGFibGVLZXkgfSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5leHBvcnQgaW50ZXJmYWNlIElvIHtcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIEdlbmVyYWxcblxuICAvKiogU3RhcnRzIHRoZSBpbml0aWFsaXphdGlvbiAqL1xuICBpbml0KCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIENsb3NlcyB0aGUgaW8gKi9cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKiogQSBwcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBJbyBpbnRlcmZhY2UgaXMgcmVhZHlcbiAgICpcbiAgICog8J+SoSBVc2UgQHJsanNvbi9pcy1yZWFkeVxuICAgKi9cbiAgaXNSZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBEdW1wXG5cbiAgLyoqIFJldHVybnMgdGhlIGNvbXBsZXRlIGRiIGNvbnRlbnQgYXMgUmxqc29uICovXG4gIGR1bXAoKTogUHJvbWlzZTxSbGpzb24+O1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBkdW1wIG9mIGEgY29tcGxldGUgdGFibGUgKi9cbiAgZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBUYWJsZXNcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0YWJsZSBleGlzdHNcbiAgICovXG4gIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGEgZ2l2ZW4gY29uZmlnLlxuICAgKiBJZiB0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMsIG5ldyBjb2x1bW5zIGFyZSBhZGRlZCB0byB0aGUgZXhpc3RpbmcgdGFibGUuXG4gICAqIElmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWcuXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIGNvbHVtbnMgYXJlIHJlbW92ZWQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogSWYgdGhlIHRhYmxlIGV4aXN0cyBhbmQgdGhlIGNvbHVtbiB0eXBlIGlzIGNoYW5nZWQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICovXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBqc29uIHN0cnVjdHVyZSByZXR1cm5pbmcgY3VycmVudCB0YWJsZSBjb25maWd1cmF0aW9uc1xuICAgKi9cbiAgdGFibGVDZmdzKCk6IFByb21pc2U8Umxqc29uPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gV3JpdGVcblxuICAvKiogV3JpdGVzIFJsanNvbiBkYXRhIGludG8gdGhlIGRhdGFiYXNlICovXG4gIHdyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBSZWFkIHJvd3NcblxuICAvKiogUXVlcmllcyBhIGxpc3Qgb2Ygcm93cyAqL1xuICByZWFkUm93cyhyZXF1ZXN0OiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfCBudWxsIH07XG4gIH0pOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBnaXZlbiB0YWJsZSAqL1xuICByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+O1xufVxuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuZXhwb3J0IGNvbnN0IGV4YW1wbGVJbyA9XG4gICdDaGVja291dCBAcmxqc29uL2lvLW1lbSBmb3IgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbic7XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSnNvbiB9IGZyb20gJ0BybGpzb24vanNvbic7XG5pbXBvcnQge1xuICBCdWZmZXQsXG4gIENha2UsXG4gIGl0ZXJhdGVUYWJsZXNTeW5jLFxuICBMYXllcixcbiAgUmVmLFxuICBSbGpzb24sXG4gIFRhYmxlS2V5LFxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIERlc2NyaWJlcyBhIHJvdyB0aGF0IHJlZmVyZW5jZXMgYSBjaGlsZCB0YWJsZSByb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJlbnRSZWYge1xuICAvKipcbiAgICogVGhlIHBhcmVudCB0YWJsZSB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHRhYmxlXG4gICAqL1xuICBbcGFyZW50VGFibGU6IFRhYmxlS2V5XToge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXJlbnQgcm93IHRoYXQgcmVmZXJlbmNlcyB0aGUgY2hpbGQgcm93XG4gICAgICovXG4gICAgW3BhcmVudFJvdzogUmVmXToge1xuICAgICAgLyoqXG4gICAgICAgKiBEZXRhaWxzIGFib3V0IHRoZSByZWZlcmVuY2UsIGUuZy4gYW4gYXJyYXkgaW5kZXggZXRjLlxuICAgICAgICovXG4gICAgICBkZXRhaWxzPzogSnNvbjtcbiAgICB9O1xuICB9O1xufVxuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHBhcmVudCB0YWJsZSByb3dzIHJlZmVyZW5jaW5nIGEgY2hpbGQgdGFibGUgcm93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV2ZXJzZVJlZnMge1xuICAvKipcbiAgICogVGhlIGNoaWxkIHRhYmxlIHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXG4gICAqL1xuICBbY2hpbGRUYWJsZTogVGFibGVLZXldOiB7XG4gICAgLyoqXG4gICAgICogVGhlIHJvdyBoYXNod2UgbmVlZCB0aGUgcmVmZXJlbmNpbmcgcm93cyBmb3JcbiAgICAgKi9cbiAgICBbY2hpbGRSb3c6IFJlZl06IFBhcmVudFJlZjtcbiAgfTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0ICovXG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHJldmVyc2UgcmVmZXJlbmNlcyBmb3IgYSBnaXZlbiBybGpzb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjYWxjUmV2ZXJzZVJlZnMgPSAocmxqc29uOiBSbGpzb24pOiBSZXZlcnNlUmVmcyA9PiB7XG4gIGNvbnN0IHJlc3VsdDogUmV2ZXJzZVJlZnMgPSB7fTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFByZXBhcmUgZGF0YSBzdHJ1Y3R1cmVcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAoY2hpbGRUYWJsZUtleSwgdGFibGUpID0+IHtcbiAgICBjb25zdCBjaGlsZFRhYmxlOiB7IFtjaGlsZFJvd0hhc2g6IHN0cmluZ106IFBhcmVudFJlZiB9ID0ge307XG4gICAgcmVzdWx0W2NoaWxkVGFibGVLZXldID0gY2hpbGRUYWJsZTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkUm93IG9mIHRhYmxlLl9kYXRhKSB7XG4gICAgICBjaGlsZFRhYmxlW2NoaWxkUm93Ll9oYXNoXSA9IHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmF0ZSByZXZlcnNlIHJlZmVyZW5jZXNcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlKSA9PiB7XG4gICAgLy8gSXRlcmF0ZSBhbGwgcm93cyBvZiBlYWNoIHRhYmxlXG4gICAgZm9yIChjb25zdCBwYXJlbnRUYWJsZVJvdyBvZiBwYXJlbnRUYWJsZS5fZGF0YSkge1xuICAgICAgLy8gRmluZCBvdXQgd2hlIG90aGVyIHRhYmxlcyAmIHJvd3MgYXJlIHJlZmVyZW5jZWQgYnkgdGhpcyByb3dcbiAgICAgIC8vIFdyaXRlIHRoZXNlIGluZm9ybWF0aW9uIGludHRvIHJlc3VsdFxuICAgICAgc3dpdGNoIChwYXJlbnRUYWJsZS5fdHlwZSkge1xuICAgICAgICBjYXNlICdpbmdyZWRpZW50cyc6XG4gICAgICAgICAgX3dyaXRlSW5ncmVkaWVudFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2xheWVycyc6IHtcbiAgICAgICAgICBfd3JpdGVMYXllclJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnc2xpY2VJZHMnOiB7XG4gICAgICAgICAgLy8gU2xpY2UgaWRzIGRvIG5vdCByZWZlcmVuY2Ugb3RoZXIgdGFibGVzXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdjYWtlcyc6IHtcbiAgICAgICAgICBfd3JpdGVDYWtlUmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdidWZmZXRzJzoge1xuICAgICAgICAgIF93cml0ZUJ1ZmZldFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyogdjggaWdub3JlIGVuZCAqL1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlSW5ncmVkaWVudFJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogSnNvbixcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IHBhcmVudENvbHVtbk5hbWUgaW4gcGFyZW50Um93KSB7XG4gICAgaWYgKHBhcmVudENvbHVtbk5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudENvbHVtbk5hbWUuZW5kc1dpdGgoJ1JlZicpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudENvbHVtbk5hbWUuc2xpY2UoMCwgLTMpO1xuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IHBhcmVudFJvd1twYXJlbnRDb2x1bW5OYW1lXSBhcyBzdHJpbmc7XG5cbiAgICBfd3JpdGUoXG4gICAgICByZXN1bHQsXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcbiAgICAgIGNoaWxkUm93SGFzaCxcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgIHBhcmVudFJvd0hhc2gsXG4gICAgKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUxheWVyUmVmcyA9IChcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcbiAgcGFyZW50Um93OiBMYXllcixcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudFJvdy5pbmdyZWRpZW50c1RhYmxlO1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IHNsaWNlSWQgaW4gcGFyZW50Um93LmFzc2lnbikge1xuICAgIGlmIChzbGljZUlkLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2xpY2VIYXNoID0gcGFyZW50Um93LmFzc2lnbltzbGljZUlkXSBhcyBzdHJpbmc7XG5cbiAgICBfd3JpdGUocmVzdWx0LCBjaGlsZFRhYmxlTmFtZSwgc2xpY2VIYXNoLCBwYXJlbnRUYWJsZU5hbWUsIHBhcmVudFJvd0hhc2gpO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlQ2FrZVJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogQ2FrZSxcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IGxheWVyIGluIHBhcmVudFJvdy5sYXllcnMpIHtcbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudFJvdy5sYXllcnNUYWJsZTtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3cubGF5ZXJzW2xheWVyXSBhcyBzdHJpbmc7XG4gICAgX3dyaXRlKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2hpbGRUYWJsZU5hbWUsXG4gICAgICBjaGlsZFJvd0hhc2gsXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICBwYXJlbnRSb3dIYXNoLFxuICAgICk7XG4gIH1cbn07XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGVCdWZmZXRSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IEJ1ZmZldCxcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50Um93Lml0ZW1zKSB7XG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBpdGVtLnRhYmxlO1xuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IGl0ZW0ucmVmO1xuICAgIF93cml0ZShcbiAgICAgIHJlc3VsdCxcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxuICAgICAgY2hpbGRSb3dIYXNoLFxuICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgcGFyZW50Um93SGFzaCxcbiAgICApO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlID0gKFxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxuICBjaGlsZFRhYmxlTmFtZTogc3RyaW5nLFxuICBjaGlsZFJvd0hhc2g6IHN0cmluZyxcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmcsXG4gIHBhcmVudFJvd0hhc2g6IHN0cmluZyxcbikgPT4ge1xuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZSA9IChyZXN1bHRbY2hpbGRUYWJsZU5hbWVdID8/PSB7fSk7XG4gIGNvbnN0IHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93ID0gKHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlW2NoaWxkUm93SGFzaF0gPz89XG4gICAge30pO1xuXG4gIHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93W3BhcmVudFRhYmxlTmFtZV0gPz89IHt9O1xuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdW3BhcmVudFJvd0hhc2hdID8/PSB7fTtcbn07XG4iXSwibmFtZXMiOlsiZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBc0JPLE1BQU0sV0FBTixNQUFNLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS25CLFlBQTRCLElBQVE7QUFpQ3BDO0FBQUE7QUFBQTtBQUFBLDhDQUFxQixZQUFZO0FBQy9CLFlBQU0sV0FBcUI7QUFBQSxRQUN6QixLQUFLO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFFVixTQUFTO0FBQUEsVUFDUCxFQUFFLEtBQUssU0FBUyxNQUFNLFNBQVM7QUFBQSxVQUMvQixFQUFFLEtBQUssU0FBUyxNQUFNLFNBQVM7QUFBQSxVQUMvQixFQUFFLEtB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rljson/io",
3
- "version": "0.0.32",
3
+ "version": "0.0.33",
4
4
  "packageManager": "pnpm@10.9.0",
5
5
  "description": "Low level interface for reading and writing RLJSON data",
6
6
  "homepage": "https://github.com/rljson/io",
@@ -30,18 +30,18 @@
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/node": "^22.15.17",
33
- "@typescript-eslint/eslint-plugin": "^8.32.0",
34
- "@typescript-eslint/parser": "^8.32.0",
33
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
34
+ "@typescript-eslint/parser": "^8.32.1",
35
35
  "@vitest/coverage-v8": "^3.1.3",
36
36
  "cross-env": "^7.0.3",
37
37
  "eslint": "^9.26.0",
38
- "eslint-plugin-jsdoc": "^50.6.11",
38
+ "eslint-plugin-jsdoc": "^50.6.14",
39
39
  "eslint-plugin-tsdoc": "^0.4.0",
40
40
  "globals": "^16.1.0",
41
41
  "jsdoc": "^4.0.4",
42
42
  "read-pkg": "^9.0.1",
43
43
  "typescript": "~5.8.3",
44
- "typescript-eslint": "^8.32.0",
44
+ "typescript-eslint": "^8.32.1",
45
45
  "vite": "^6.3.5",
46
46
  "vite-node": "^3.1.3",
47
47
  "vite-plugin-dts": "^4.5.3",