@workflow/world-local 5.0.0-beta.14 → 5.0.0-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import type { World } from '@workflow/world';
1
+ import type { QueuePrefix, World } from '@workflow/world';
2
2
  import type { Config } from './config.js';
3
3
  import { type DirectHandler } from './queue.js';
4
4
  export { DataDirAccessError, DataDirVersionError, ensureDataDir, initDataDir, type ParsedVersion, parseVersion, } from './init.js';
5
5
  export type { DirectHandler } from './queue.js';
6
6
  export type LocalWorld = World & {
7
7
  /** Register a direct in-process handler for a queue prefix, bypassing HTTP. */
8
- registerHandler(prefix: '__wkf_step_' | '__wkf_workflow_', handler: DirectHandler): void;
8
+ registerHandler(prefix: QueuePrefix, handler: DirectHandler): void;
9
9
  /** Clear all workflow data (runs, steps, events, hooks, streams). */
10
10
  clear(): Promise<void>;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAY1C,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAM7D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,aAAa,EAClB,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAC/B,+EAA+E;IAC/E,eAAe,CACb,MAAM,EAAE,aAAa,GAAG,iBAAiB,EACzC,OAAO,EAAE,aAAa,GACrB,IAAI,CAAC;IACR,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CA6GnE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAY1C,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAM7D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,aAAa,EAClB,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAC/B,+EAA+E;IAC/E,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACnE,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAuHnE"}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import { clearCreatedFilesCache, deleteJSON, hasTag, listTaggedFiles, listTagged
7
7
  import { initDataDir } from './init.js';
8
8
  import { instrumentObject } from './instrumentObject.js';
9
9
  import { createQueue } from './queue.js';
10
- import { hashToken } from './storage/helpers.js';
10
+ import { hashToken, hookRecoveryMarkerPath } from './storage/helpers.js';
11
11
  import { createStorage } from './storage.js';
12
12
  import { createStreamer } from './streamer.js';
13
13
  // Re-export init types and utilities for consumers
@@ -67,10 +67,12 @@ export function createLocalWorld(args) {
67
67
  if (tag) {
68
68
  // Selectively delete only files matching this tag
69
69
  const basedir = mergedConfig.dataDir;
70
- // Delete hook token constraint files BEFORE deleting the hooks,
71
- // since we need to read each hook to extract its token hash.
72
- // Constraint files are untagged ({sha256}.json) so listTaggedFiles
73
- // won't find them we must resolve them via the hook data.
70
+ // Delete hook token constraint files (and recovery markers,
71
+ // for disk hygiene) BEFORE deleting the hooks, since we need
72
+ // to read each hook to extract its token hash. Constraint
73
+ // files and markers are untagged (`{sha256}.json` and
74
+ // `{sha256}.recovery.json`) so listTaggedFiles won't find
75
+ // them — we must resolve them via the hook data.
74
76
  const hooksDir = path.join(basedir, 'hooks');
75
77
  const taggedHookFiles = await listTaggedFiles(hooksDir, tag);
76
78
  const { HookSchema } = await import('@workflow/world');
@@ -78,6 +80,7 @@ export function createLocalWorld(args) {
78
80
  const hook = await readJSON(path.join(hooksDir, hookFile), HookSchema);
79
81
  if (hook?.token) {
80
82
  await deleteJSON(path.join(hooksDir, 'tokens', `${hashToken(hook.token)}.json`));
83
+ await deleteJSON(hookRecoveryMarkerPath(basedir, hook.token, hook.runId, hook.hookId));
81
84
  }
82
85
  }));
83
86
  // Delete tagged entity files across all directories
@@ -112,4 +115,4 @@ export function createLocalWorld(args) {
112
115
  },
113
116
  };
114
117
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLE1BQU0sRUFDTixlQUFlLEVBQ2YsMEJBQTBCLEVBQzFCLFFBQVEsR0FDVCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQXNCLE1BQU0sWUFBWSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsbURBQW1EO0FBQ25ELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixXQUFXLEVBRVgsWUFBWSxHQUNiLE1BQU0sV0FBVyxDQUFDO0FBY25COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFzQjtJQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJO1FBQ3RCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNoQixNQUFNLENBQUMs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QztnQkFDMUQsTUFBTSxjQUFjLEdBQUcsTUFBTSwwQkFBMEIsQ0FDckQsU0FBUyxFQUNULEdBQUcsRUFDSCxNQUFNLENBQ1AsQ0FBQztnQkFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3ZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQ25ELENBQ0YsQ0FBQztnQkFDRixpRUFBaUU7Z0JBQ2pFLHNCQUFzQixFQUFFLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBybSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHsgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgcmVlbnF1ZXVlQWN0aXZlUnVucywgU1BFQ19WRVJTSU9OX0NVUlJFTlQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBjbGVhckNyZWF0ZWRGaWxlc0NhY2hlLFxuICBkZWxldGVKU09OLFxuICBoYXNUYWcsXG4gIGxpc3RUYWdnZWRGaWxlcyxcbiAgbGlzdFRhZ2dlZEZpbGVzQnlFeHRlbnNpb24sXG4gIHJlYWRKU09OLFxufSBmcm9tICcuL2ZzLmpzJztcbmltcG9ydCB7IGluaXREYXRhRGlyIH0gZnJvbSAnLi9pbml0LmpzJztcbmltcG9ydCB7IGluc3RydW1lbnRPYmplY3QgfSBmcm9tICcuL2luc3RydW1lbnRPYmplY3QuanMnO1xuaW1wb3J0IHsgY3JlYXRlUXVldWUsIHR5cGUgRGlyZWN0SGFuZGxlciB9IGZyb20gJy4vcXVldWUuanMnO1xuaW1wb3J0IHsgaGFzaFRva2VuIH0gZnJvbSAnLi9zdG9yYWdlL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdHJlYW1lciB9IGZyb20gJy4vc3RyZWFtZXIuanMnO1xuXG4vLyBSZS1leHBvcnQgaW5pdCB0eXBlcyBhbmQgdXRpbGl0aWVzIGZvciBjb25zdW1lcnNcbmV4cG9ydCB7XG4gIERhdGFEaXJBY2Nlc3NFcnJvcixcbiAgRGF0YURpclZlcnNpb25FcnJvcixcbiAgZW5zdXJlRGF0YURpcixcbiAgaW5pdERhdGFEaXIsXG4gIHR5cGUgUGFyc2VkVmVyc2lvbixcbiAgcGFyc2VWZXJzaW9uLFxufSBmcm9tICcuL2luaXQuanMnO1xuXG5leHBvcnQgdHlwZSB7IERpcmVjdEhhbmRsZXIgfSBmcm9tICcuL3F1ZXVlLmpzJztcblxuZXhwb3J0IHR5cGUgTG9jYWxXb3JsZCA9IFdvcmxkICYge1xuICAvKiogUmVnaXN0ZXIgYSBkaXJlY3QgaW4tcHJvY2VzcyBoYW5kbGVyIGZvciBhIHF1ZXVlIHByZWZpeCwgYnlwYXNzaW5nIEhUVFAuICovXG4gIHJlZ2lzdGVySGFuZGxlcihcbiAgICBwcmVmaXg6ICdfX3drZl9zdGVwXycgfCAnX193a2Zfd29ya2Zsb3dfJyxcbiAgICBoYW5kbGVyOiBEaXJlY3RIYW5kbGVyXG4gICk6IHZvaWQ7XG4gIC8qKiBDbGVhciBhbGwgd29ya2Zsb3cgZGF0YSAocnVucywgc3RlcHMsIGV2ZW50cywgaG9va3MsIHN0cmVhbXMpLiAqL1xuICBjbGVhcigpOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbG9jYWwgd29ybGQgaW5zdGFuY2UgdGhhdCBjb21iaW5lcyBxdWV1ZSwgc3RvcmFnZSwgYW5kIHN0cmVhbWVyIGZ1bmN0aW9uYWxpdGllcy5cbiAqXG4gKiBAcGFyYW0gYXJncyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0gYXJncy5kYXRhRGlyIC0gRGlyZWN0b3J5IGZvciBzdG9yaW5nIHdvcmtmbG93IGRhdGEgKGRlZmF1bHQ6IGAud29ya2Zsb3ctZGF0YS9gKVxuICogQHBhcmFtIGFyZ3MucG9ydCAtIFBvcnQgb3ZlcnJpZGUgZm9yIHF1ZXVlIHRyYW5zcG9ydCAoZGVmYXVsdDogYXV0by1kZXRlY3RlZClcbiAqIEBwYXJhbSBhcmdzLmJhc2VVcmwgLSBGdWxsIGJhc2UgVVJMIG92ZXJyaWRlIGZvciBxdWV1ZSB0cmFuc3BvcnQgKGRlZmF1bHQ6IGBodHRwOi8vbG9jYWxob3N0Ontwb3J0fWApXG4gKiBAcGFyYW0gYXJncy5yZWNvdmVyQWN0aXZlUnVucyAtIFdoZXRoZXIgYHN0YXJ0KClgIHNob3VsZCByZS1lbnF1ZXVlIHBlbmRpbmcvcnVubmluZyBydW5zIGZyb20gc3RvcmFnZSAoZGVmYXVsdDogYHRydWVgKVxuICogQHBhcmFtIGFyZ3MudGFnIC0gT3B0aW9uYWwgdGFnIHRvIHNjb3BlIGZpbGVzIChlLmcuLCBgdml0ZXN0LTBgKS4gV2hlbiBzZXQsIGZpbGVzIGFyZSB3cml0dGVuXG4gKiAgIGFzIGB7aWR9Lnt0YWd9Lmpzb25gIGFuZCBgY2xlYXIoKWAgb25seSBkZWxldGVzIGZpbGVzIG1hdGNoaW5nIHRoaXMgdGFnLlxuICogQHRocm93cyB7RGF0YURpckFjY2Vzc0Vycm9yfSBJZiB0aGUgZGF0YSBkaXJlY3RvcnkgY2Fubm90IGJlIGNyZWF0ZWQgb3IgYWNjZXNzZWRcbiAqIEB0aHJvd3Mge0RhdGFEaXJWZXJzaW9uRXJyb3J9IElmIHRoZSBkYXRhIGRpcmVjdG9yeSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9jYWxXb3JsZChhcmdzPzogUGFydGlhbDxDb25maWc+KTogTG9jYWxXb3JsZCB7XG4gIGNvbnN0IGRlZmluZWRBcmdzID0gYXJnc1xuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhhcmdzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIClcbiAgICA6IHt9O1xuICBjb25zdCBtZXJnZWRDb25maWcgPSB7IC4uLmNvbmZpZy52YWx1ZSwgLi4uZGVmaW5lZEFyZ3MgfTtcbiAgY29uc3QgdGFnID0gbWVyZ2VkQ29uZmlnLnRhZztcbiAgY29uc3QgcXVldWUgPSBjcmVhdGVRdWV1ZShtZXJnZWRDb25maWcpO1xuICBjb25zdCBzdG9yYWdlID0gY3JlYXRlU3RvcmFnZShtZXJnZWRDb25maWcuZGF0YURpciwgdGFnKTtcbiAgY29uc3QgcmVjb3ZlckFjdGl2ZVJ1bnMgPSBtZXJnZWRDb25maWcucmVjb3ZlckFjdGl2ZVJ1bnMgPz8gdHJ1ZTtcbiAgcmV0dXJuIHtcbiAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgLi4ucXVldWUsXG4gICAgLi4uc3RvcmFnZSxcbiAgICAuLi5pbnN0cnVtZW50T2JqZWN0KCd3b3JsZC5zdHJlYW1zJywge1xuICAgICAgLi4uY3JlYXRlU3RyZWFtZXIobWVyZ2VkQ29uZmlnLmRhdGFEaXIsIHRhZyksXG4gICAgICAuLi4obWVyZ2VkQ29uZmlnLnN0cmVhbUZsdXNoSW50ZXJ2YWxNcyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgc3RyZWFtRmx1c2hJbnRlcnZhbE1zOiBtZXJnZWRDb25maWcuc3RyZWFtRmx1c2hJbnRlcnZhbE1zLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgYXN5bmMgc3RhcnQoKSB7XG4gICAgICBhd2FpdCBpbml0RGF0YURpcihtZXJnZWRDb25maWcuZGF0YURpcik7XG4gICAgICBpZiAoIXJlY292ZXJBY3RpdmVSdW5zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY292ZXJ5UnVucyA9IHRhZ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnN0b3JhZ2UucnVucyxcbiAgICAgICAgICAgIGxpc3Q6ICgocGFyYW1zKSA9PlxuICAgICAgICAgICAgICBzdG9yYWdlLnJ1bnMubGlzdCh7XG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgIGZpbGVJZEZpbHRlcjogKGZpbGVJZCkgPT4gaGFzVGFnKGZpbGVJZCwgdGFnKSxcbiAgICAgICAgICAgICAgfSkpIGFzIHR5cGVvZiBzdG9yYWdlLnJ1bnMubGlzdCxcbiAgICAgICAgICB9XG4gICAgICAgIDogc3RvcmFnZS5ydW5zO1xuICAgICAgYXdhaXQgcmVlbnF1ZXVlQWN0aXZlUnVucyhyZWNvdmVyeVJ1bnMsIHF1ZXVlLnF1ZXVlLCAnd29ybGQtbG9jYWwnKTtcbiAgICB9LFxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgYXdhaXQgcXVldWUuY2xvc2UoKTtcbiAgICB9LFxuICAgIGFzeW5jIGNsZWFyKCkge1xuICAgICAgaWYgKHRhZykge1xuICAgICAgICAvLyBTZWxlY3RpdmVseSBkZWxldGUgb25seSBmaWxlcyBtYXRjaGluZyB0aGlzIHRhZ1xuICAgICAgICBjb25zdCBiYXNlZGlyID0gbWVyZ2VkQ29uZmlnLmRhdGFEaXI7XG5cbiAgICAgICAgLy8gRGVsZXRlIGhvb2sgdG9rZW4gY29uc3RyYWludCBmaWxlcyBCRUZPUkUgZGVsZXRpbmcgdGhlIGhvb2tzLFxuICAgICAgICAvLyBzaW5jZSB3ZSBuZWVkIHRvIHJlYWQgZWFjaCBob29rIHRvIGV4dHJhY3QgaXRzIHRva2VuIGhhc2guXG4gICAgICAgIC8vIENvbnN0cmFpbnQgZmlsZXMgYXJlIHVudGFnZ2VkICh7c2hhMjU2fS5qc29uKSBzbyBsaXN0VGFnZ2VkRmlsZXNcbiAgICAgICAgLy8gd29uJ3QgZmluZCB0aGVtIOKAlCB3ZSBtdXN0IHJlc29sdmUgdGhlbSB2aWEgdGhlIGhvb2sgZGF0YS5cbiAgICAgICAgY29uc3QgaG9va3NEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgJ2hvb2tzJyk7XG4gICAgICAgIGNvbnN0IHRhZ2dlZEhvb2tGaWxlcyA9IGF3YWl0IGxpc3RUYWdnZWRGaWxlcyhob29rc0RpciwgdGFnKTtcbiAgICAgICAgY29uc3QgeyBIb29rU2NoZW1hIH0gPSBhd2FpdCBpbXBvcnQoJ0B3b3JrZmxvdy93b3JsZCcpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICB0YWdnZWRIb29rRmlsZXMubWFwKGFzeW5jIChob29rRmlsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG9vayA9IGF3YWl0IHJlYWRKU09OKFxuICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9va3NEaXIsIGhvb2tGaWxlKSxcbiAgICAgICAgICAgICAgSG9va1NjaGVtYVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChob29rPy50b2tlbikge1xuICAgICAgICAgICAgICBhd2FpdCBkZWxldGVKU09OKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihob29rc0RpciwgJ3Rva2VucycsIGAke2hhc2hUb2tlbihob29rLnRva2VuKX0uanNvbmApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBEZWxldGUgdGFnZ2VkIGVudGl0eSBmaWxlcyBhY3Jvc3MgYWxsIGRpcmVjdG9yaWVzXG4gICAgICAgIGNvbnN0IGVudGl0eURpcnMgPSBbXG4gICAgICAgICAgJ3J1bnMnLFxuICAgICAgICAgICdzdGVwcycsXG4gICAgICAgICAgJ2V2ZW50cycsXG4gICAgICAgICAgJ2hvb2tzJyxcbiAgICAgICAgICAnd2FpdHMnLFxuICAgICAgICAgICdzdHJlYW1zL3J1bnMnLFxuICAgICAgICBdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBlbnRpdHlEaXJzLm1hcChhc3luYyAoZGlyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmdWxsRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsIGRpcik7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGxpc3RUYWdnZWRGaWxlcyhmdWxsRGlyLCB0YWcpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGZpbGVzLm1hcCgoZikgPT4gZGVsZXRlSlNPTihwYXRoLmpvaW4oZnVsbERpciwgZikpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICAvLyBDbGVhbiB1cCBsb2NrIGZpbGVzIHVzZWQgZm9yIGF0b21pYyB0ZXJtaW5hbC1zdGF0ZSBndWFyZHNcbiAgICAgICAgYXdhaXQgZnNcbiAgICAgICAgICAucm0ocGF0aC5qb2luKGJhc2VkaXIsICcubG9ja3MnKSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgLy8gRGVsZXRlIHRhZ2dlZCBzdHJlYW0gY2h1bmtzICgue3RhZ30uYmluIGZpbGVzKVxuICAgICAgICBjb25zdCBjaHVua3NEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgJ3N0cmVhbXMnLCAnY2h1bmtzJyk7XG4gICAgICAgIGNvbnN0IHRhZ2dlZEJpbkZpbGVzID0gYXdhaXQgbGlzdFRhZ2dlZEZpbGVzQnlFeHRlbnNpb24oXG4gICAgICAgICAgY2h1bmtzRGlyLFxuICAgICAgICAgIHRhZyxcbiAgICAgICAgICAnLmJpbidcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgdGFnZ2VkQmluRmlsZXMubWFwKChmKSA9PlxuICAgICAgICAgICAgZnMudW5saW5rKHBhdGguam9pbihjaHVua3NEaXIsIGYpKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIC8vIENsZWFyIHRoZSBpbi1tZW1vcnkgd3JpdGUgY2FjaGUgc28gZGVsZXRlZCBwYXRocyBhcmUgZm9yZ290dGVuXG4gICAgICAgIGNsZWFyQ3JlYXRlZEZpbGVzQ2FjaGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHJtKG1lcmdlZENvbmZpZy5kYXRhRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIGF3YWl0IGluaXREYXRhRGlyKG1lcmdlZENvbmZpZy5kYXRhRGlyKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIl19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLE1BQU0sRUFDTixlQUFlLEVBQ2YsMEJBQTBCLEVBQzFCLFFBQVEsR0FDVCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQXNCLE1BQU0sWUFBWSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsbURBQW1EO0FBQ25ELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixXQUFXLEVBRVgsWUFBWSxHQUNiLE1BQU0sV0FBVyxDQUFDO0FBV25COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFzQjtJQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJO1FBQ3RCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNo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QUUsSUFBSSxFQUFFLENBQUM7cUJBQ2xFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkIsaURBQWlEO2dCQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzFELE1BQU0sY0FBYyxHQUFHLE1BQU0sMEJBQTBCLENBQ3JELFNBQVMsRUFDVCxHQUFHLEVBQ0gsTUFBTSxDQUNQLENBQUM7Z0JBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUNuRCxDQUNGLENBQUM7Z0JBQ0YsaUVBQWlFO2dCQUNqRSxzQkFBc0IsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDakUsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IFF1ZXVlUHJlZml4LCBXb3JsZCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyByZWVucXVldWVBY3RpdmVSdW5zLCBTUEVDX1ZFUlNJT05fQ1VSUkVOVCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gJy4vY29uZmlnLmpzJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIGNsZWFyQ3JlYXRlZEZpbGVzQ2FjaGUsXG4gIGRlbGV0ZUpTT04sXG4gIGhhc1RhZyxcbiAgbGlzdFRhZ2dlZEZpbGVzLFxuICBsaXN0VGFnZ2VkRmlsZXNCeUV4dGVuc2lvbixcbiAgcmVhZEpTT04sXG59IGZyb20gJy4vZnMuanMnO1xuaW1wb3J0IHsgaW5pdERhdGFEaXIgfSBmcm9tICcuL2luaXQuanMnO1xuaW1wb3J0IHsgaW5zdHJ1bWVudE9iamVjdCB9IGZyb20gJy4vaW5zdHJ1bWVudE9iamVjdC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVRdWV1ZSwgdHlwZSBEaXJlY3RIYW5kbGVyIH0gZnJvbSAnLi9xdWV1ZS5qcyc7XG5pbXBvcnQgeyBoYXNoVG9rZW4sIGhvb2tSZWNvdmVyeU1hcmtlclBhdGggfSBmcm9tICcuL3N0b3JhZ2UvaGVscGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdG9yYWdlIH0gZnJvbSAnLi9zdG9yYWdlLmpzJztcbmltcG9ydCB7IGNyZWF0ZVN0cmVhbWVyIH0gZnJvbSAnLi9zdHJlYW1lci5qcyc7XG5cbi8vIFJlLWV4cG9ydCBpbml0IHR5cGVzIGFuZCB1dGlsaXRpZXMgZm9yIGNvbnN1bWVyc1xuZXhwb3J0IHtcbiAgRGF0YURpckFjY2Vzc0Vycm9yLFxuICBEYXRhRGlyVmVyc2lvbkVycm9yLFxuICBlbnN1cmVEYXRhRGlyLFxuICBpbml0RGF0YURpcixcbiAgdHlwZSBQYXJzZWRWZXJzaW9uLFxuICBwYXJzZVZlcnNpb24sXG59IGZyb20gJy4vaW5pdC5qcyc7XG5cbmV4cG9ydCB0eXBlIHsgRGlyZWN0SGFuZGxlciB9IGZyb20gJy4vcXVldWUuanMnO1xuXG5leHBvcnQgdHlwZSBMb2NhbFdvcmxkID0gV29ybGQgJiB7XG4gIC8qKiBSZWdpc3RlciBhIGRpcmVjdCBpbi1wcm9jZXNzIGhhbmRsZXIgZm9yIGEgcXVldWUgcHJlZml4LCBieXBhc3NpbmcgSFRUUC4gKi9cbiAgcmVnaXN0ZXJIYW5kbGVyKHByZWZpeDogUXVldWVQcmVmaXgsIGhhbmRsZXI6IERpcmVjdEhhbmRsZXIpOiB2b2lkO1xuICAvKiogQ2xlYXIgYWxsIHdvcmtmbG93IGRhdGEgKHJ1bnMsIHN0ZXBzLCBldmVudHMsIGhvb2tzLCBzdHJlYW1zKS4gKi9cbiAgY2xlYXIoKTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxvY2FsIHdvcmxkIGluc3RhbmNlIHRoYXQgY29tYmluZXMgcXVldWUsIHN0b3JhZ2UsIGFuZCBzdHJlYW1lciBmdW5jdGlvbmFsaXRpZXMuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICogQHBhcmFtIGFyZ3MuZGF0YURpciAtIERpcmVjdG9yeSBmb3Igc3RvcmluZyB3b3JrZmxvdyBkYXRhIChkZWZhdWx0OiBgLndvcmtmbG93LWRhdGEvYClcbiAqIEBwYXJhbSBhcmdzLnBvcnQgLSBQb3J0IG92ZXJyaWRlIGZvciBxdWV1ZSB0cmFuc3BvcnQgKGRlZmF1bHQ6IGF1dG8tZGV0ZWN0ZWQpXG4gKiBAcGFyYW0gYXJncy5iYXNlVXJsIC0gRnVsbCBiYXNlIFVSTCBvdmVycmlkZSBmb3IgcXVldWUgdHJhbnNwb3J0IChkZWZhdWx0OiBgaHR0cDovL2xvY2FsaG9zdDp7cG9ydH1gKVxuICogQHBhcmFtIGFyZ3MucmVjb3ZlckFjdGl2ZVJ1bnMgLSBXaGV0aGVyIGBzdGFydCgpYCBzaG91bGQgcmUtZW5xdWV1ZSBwZW5kaW5nL3J1bm5pbmcgcnVucyBmcm9tIHN0b3JhZ2UgKGRlZmF1bHQ6IGB0cnVlYClcbiAqIEBwYXJhbSBhcmdzLnRhZyAtIE9wdGlvbmFsIHRhZyB0byBzY29wZSBmaWxlcyAoZS5nLiwgYHZpdGVzdC0wYCkuIFdoZW4gc2V0LCBmaWxlcyBhcmUgd3JpdHRlblxuICogICBhcyBge2lkfS57dGFnfS5qc29uYCBhbmQgYGNsZWFyKClgIG9ubHkgZGVsZXRlcyBmaWxlcyBtYXRjaGluZyB0aGlzIHRhZy5cbiAqIEB0aHJvd3Mge0RhdGFEaXJBY2Nlc3NFcnJvcn0gSWYgdGhlIGRhdGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBjcmVhdGVkIG9yIGFjY2Vzc2VkXG4gKiBAdGhyb3dzIHtEYXRhRGlyVmVyc2lvbkVycm9yfSBJZiB0aGUgZGF0YSBkaXJlY3RvcnkgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvY2FsV29ybGQoYXJncz86IFBhcnRpYWw8Q29uZmlnPik6IExvY2FsV29ybGQge1xuICBjb25zdCBkZWZpbmVkQXJncyA9IGFyZ3NcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoYXJncykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICApXG4gICAgOiB7fTtcbiAgY29uc3QgbWVyZ2VkQ29uZmlnID0geyAuLi5jb25maWcudmFsdWUsIC4uLmRlZmluZWRBcmdzIH07XG4gIGNvbnN0IHRhZyA9IG1lcmdlZENvbmZpZy50YWc7XG4gIGNvbnN0IHF1ZXVlID0gY3JlYXRlUXVldWUobWVyZ2VkQ29uZmlnKTtcbiAgY29uc3Qgc3RvcmFnZSA9IGNyZWF0ZVN0b3JhZ2UobWVyZ2VkQ29uZmlnLmRhdGFEaXIsIHRhZyk7XG4gIGNvbnN0IHJlY292ZXJBY3RpdmVSdW5zID0gbWVyZ2VkQ29uZmlnLnJlY292ZXJBY3RpdmVSdW5zID8/IHRydWU7XG4gIHJldHVybiB7XG4gICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgIC4uLnF1ZXVlLFxuICAgIC4uLnN0b3JhZ2UsXG4gICAgLi4uaW5zdHJ1bWVudE9iamVjdCgnd29ybGQuc3RyZWFtcycsIHtcbiAgICAgIC4uLmNyZWF0ZVN0cmVhbWVyKG1lcmdlZENvbmZpZy5kYXRhRGlyLCB0YWcpLFxuICAgICAgLi4uKG1lcmdlZENvbmZpZy5zdHJlYW1GbHVzaEludGVydmFsTXMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIHN0cmVhbUZsdXNoSW50ZXJ2YWxNczogbWVyZ2VkQ29uZmlnLnN0cmVhbUZsdXNoSW50ZXJ2YWxNcyxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgYXdhaXQgaW5pdERhdGFEaXIobWVyZ2VkQ29uZmlnLmRhdGFEaXIpO1xuICAgICAgaWYgKCFyZWNvdmVyQWN0aXZlUnVucykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByZWNvdmVyeVJ1bnMgPSB0YWdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zdG9yYWdlLnJ1bnMsXG4gICAgICAgICAgICBsaXN0OiAoKHBhcmFtcykgPT5cbiAgICAgICAgICAgICAgc3RvcmFnZS5ydW5zLmxpc3Qoe1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBmaWxlSWRGaWx0ZXI6IChmaWxlSWQpID0+IGhhc1RhZyhmaWxlSWQsIHRhZyksXG4gICAgICAgICAgICAgIH0pKSBhcyB0eXBlb2Ygc3RvcmFnZS5ydW5zLmxpc3QsXG4gICAgICAgICAgfVxuICAgICAgICA6IHN0b3JhZ2UucnVucztcbiAgICAgIGF3YWl0IHJlZW5xdWV1ZUFjdGl2ZVJ1bnMocmVjb3ZlcnlSdW5zLCBxdWV1ZS5xdWV1ZSwgJ3dvcmxkLWxvY2FsJyk7XG4gICAgfSxcbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIGF3YWl0IHF1ZXVlLmNsb3NlKCk7XG4gICAgfSxcbiAgICBhc3luYyBjbGVhcigpIHtcbiAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgLy8gU2VsZWN0aXZlbHkgZGVsZXRlIG9ubHkgZmlsZXMgbWF0Y2hpbmcgdGhpcyB0YWdcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IG1lcmdlZENvbmZpZy5kYXRhRGlyO1xuXG4gICAgICAgIC8vIERlbGV0ZSBob29rIHRva2VuIGNvbnN0cmFpbnQgZmlsZXMgKGFuZCByZWNvdmVyeSBtYXJrZXJzLFxuICAgICAgICAvLyBmb3IgZGlzayBoeWdpZW5lKSBCRUZPUkUgZGVsZXRpbmcgdGhlIGhvb2tzLCBzaW5jZSB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIHJlYWQgZWFjaCBob29rIHRvIGV4dHJhY3QgaXRzIHRva2VuIGhhc2guIENvbnN0cmFpbnRcbiAgICAgICAgLy8gZmlsZXMgYW5kIG1hcmtlcnMgYXJlIHVudGFnZ2VkIChge3NoYTI1Nn0uanNvbmAgYW5kXG4gICAgICAgIC8vIGB7c2hhMjU2fS5yZWNvdmVyeS5qc29uYCkgc28gbGlzdFRhZ2dlZEZpbGVzIHdvbid0IGZpbmRcbiAgICAgICAgLy8gdGhlbSDigJQgd2UgbXVzdCByZXNvbHZlIHRoZW0gdmlhIHRoZSBob29rIGRhdGEuXG4gICAgICAgIGNvbnN0IGhvb2tzRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsICdob29rcycpO1xuICAgICAgICBjb25zdCB0YWdnZWRIb29rRmlsZXMgPSBhd2FpdCBsaXN0VGFnZ2VkRmlsZXMoaG9va3NEaXIsIHRhZyk7XG4gICAgICAgIGNvbnN0IHsgSG9va1NjaGVtYSB9ID0gYXdhaXQgaW1wb3J0KCdAd29ya2Zsb3cvd29ybGQnKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgdGFnZ2VkSG9va0ZpbGVzLm1hcChhc3luYyAoaG9va0ZpbGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhvb2sgPSBhd2FpdCByZWFkSlNPTihcbiAgICAgICAgICAgICAgcGF0aC5qb2luKGhvb2tzRGlyLCBob29rRmlsZSksXG4gICAgICAgICAgICAgIEhvb2tTY2hlbWFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaG9vaz8udG9rZW4pIHtcbiAgICAgICAgICAgICAgYXdhaXQgZGVsZXRlSlNPTihcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9va3NEaXIsICd0b2tlbnMnLCBgJHtoYXNoVG9rZW4oaG9vay50b2tlbil9Lmpzb25gKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBhd2FpdCBkZWxldGVKU09OKFxuICAgICAgICAgICAgICAgIGhvb2tSZWNvdmVyeU1hcmtlclBhdGgoXG4gICAgICAgICAgICAgICAgICBiYXNlZGlyLFxuICAgICAgICAgICAgICAgICAgaG9vay50b2tlbixcbiAgICAgICAgICAgICAgICAgIGhvb2sucnVuSWQsXG4gICAgICAgICAgICAgICAgICBob29rLmhvb2tJZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIERlbGV0ZSB0YWdnZWQgZW50aXR5IGZpbGVzIGFjcm9zcyBhbGwgZGlyZWN0b3JpZXNcbiAgICAgICAgY29uc3QgZW50aXR5RGlycyA9IFtcbiAgICAgICAgICAncnVucycsXG4gICAgICAgICAgJ3N0ZXBzJyxcbiAgICAgICAgICAnZXZlbnRzJyxcbiAgICAgICAgICAnaG9va3MnLFxuICAgICAgICAgICd3YWl0cycsXG4gICAgICAgICAgJ3N0cmVhbXMvcnVucycsXG4gICAgICAgIF07XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGVudGl0eURpcnMubWFwKGFzeW5jIChkaXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgZGlyKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgbGlzdFRhZ2dlZEZpbGVzKGZ1bGxEaXIsIHRhZyk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZmlsZXMubWFwKChmKSA9PiBkZWxldGVKU09OKHBhdGguam9pbihmdWxsRGlyLCBmKSkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIC8vIENsZWFuIHVwIGxvY2sgZmlsZXMgdXNlZCBmb3IgYXRvbWljIHRlcm1pbmFsLXN0YXRlIGd1YXJkc1xuICAgICAgICBhd2FpdCBmc1xuICAgICAgICAgIC5ybShwYXRoLmpvaW4oYmFzZWRpciwgJy5sb2NrcycpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICAvLyBEZWxldGUgdGFnZ2VkIHN0cmVhbSBjaHVua3MgKC57dGFnfS5iaW4gZmlsZXMpXG4gICAgICAgIGNvbnN0IGNodW5rc0RpciA9IHBhdGguam9pbihiYXNlZGlyLCAnc3RyZWFtcycsICdjaHVua3MnKTtcbiAgICAgICAgY29uc3QgdGFnZ2VkQmluRmlsZXMgPSBhd2FpdCBsaXN0VGFnZ2VkRmlsZXNCeUV4dGVuc2lvbihcbiAgICAgICAgICBjaHVua3NEaXIsXG4gICAgICAgICAgdGFnLFxuICAgICAgICAgICcuYmluJ1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICB0YWdnZWRCaW5GaWxlcy5tYXAoKGYpID0+XG4gICAgICAgICAgICBmcy51bmxpbmsocGF0aC5qb2luKGNodW5rc0RpciwgZikpLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGluLW1lbW9yeSB3cml0ZSBjYWNoZSBzbyBkZWxldGVkIHBhdGhzIGFyZSBmb3Jnb3R0ZW5cbiAgICAgICAgY2xlYXJDcmVhdGVkRmlsZXNDYWNoZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgcm0obWVyZ2VkQ29uZmlnLmRhdGFEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgaW5pdERhdGFEaXIobWVyZ2VkQ29uZmlnLmRhdGFEaXIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXX0=
package/dist/queue.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { type Queue } from '@workflow/world';
1
+ import { type Queue, type QueuePrefix } from '@workflow/world';
2
2
  import type { Config } from './config.js';
3
3
  export type DirectHandler = (req: Request) => Promise<Response>;
4
4
  export type LocalQueue = Queue & {
5
5
  /** Close the HTTP agent and release resources. */
6
6
  close(): Promise<void>;
7
7
  /** Register a direct in-process handler for a queue prefix, bypassing HTTP. */
8
- registerHandler(prefix: '__wkf_step_' | '__wkf_workflow_', handler: DirectHandler): void;
8
+ registerHandler(prefix: QueuePrefix, handler: DirectHandler): void;
9
9
  };
10
10
  export declare function createQueue(config: Partial<Config>): LocalQueue;
11
11
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,KAAK,EAAkB,MAAM,iBAAiB,CAAC;AAKxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAiD1C,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAC/B,kDAAkD;IAClD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,+EAA+E;IAC/E,eAAe,CACb,MAAM,EAAE,aAAa,GAAG,iBAAiB,EACzC,OAAO,EAAE,aAAa,GACrB,IAAI,CAAC;CACT,CAAC;AAuCF,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAoQ/D"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAiD1C,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAC/B,kDAAkD;IAClD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,+EAA+E;IAC/E,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CACpE,CAAC;AAsCF,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CA0R/D"}
package/dist/queue.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { setTimeout } from 'node:timers/promises';
2
- import { MessageId, ValidQueueName } from '@workflow/world';
2
+ import { MessageId, parseQueueName, ValidQueueName, } from '@workflow/world';
3
3
  import { Sema } from 'async-sema';
4
4
  import { monotonicFactory } from 'ulid';
5
5
  import { Agent } from 'undici';
@@ -62,13 +62,11 @@ function isDetachedArrayBufferQueueError(error) {
62
62
  return false;
63
63
  }
64
64
  function getQueueRoute(queueName) {
65
- if (queueName.startsWith('__wkf_step_')) {
66
- return { pathname: 'step', prefix: '__wkf_step_' };
67
- }
68
- if (queueName.startsWith('__wkf_workflow_')) {
69
- return { pathname: 'flow', prefix: '__wkf_workflow_' };
70
- }
71
- throw new Error('Unknown queue name prefix');
65
+ const { kind, prefix } = parseQueueName(queueName);
66
+ return {
67
+ pathname: kind === 'workflow' ? 'flow' : 'step',
68
+ prefix,
69
+ };
72
70
  }
73
71
  export function createQueue(config) {
74
72
  // Create a custom agent optimized for high-concurrency local workflows:
@@ -84,6 +82,13 @@ export function createQueue(config) {
84
82
  const transport = new TypedJsonTransport();
85
83
  const generateId = monotonicFactory();
86
84
  const semaphore = new Sema(WORKFLOW_LOCAL_QUEUE_CONCURRENCY);
85
+ // Aborted by close(): cancels every pending sleep (delayed deliveries,
86
+ // timeoutSeconds re-deliveries, retry backoffs) so shutdown isn't held
87
+ // hostage by a timer and no delivery is attempted against the closed
88
+ // agent. The resulting AbortError is silently dropped by the
89
+ // isAbortError check in the delivery catch handler.
90
+ const closeController = new AbortController();
91
+ const closeSignal = closeController.signal;
87
92
  /**
88
93
  * holds inflight messages by idempotency key to ensure
89
94
  * that we don't queue the same message multiple times
@@ -115,6 +120,16 @@ export function createQueue(config) {
115
120
  });
116
121
  }
117
122
  (async () => {
123
+ // Honor the caller's requested delivery delay before acquiring a queue
124
+ // slot. Sleeping outside the semaphore so a delayed message doesn't
125
+ // hold a worker hostage for its delay window — the worker should be
126
+ // free to process other (immediate) messages until this one is ready.
127
+ // VQS-side queues honor delaySeconds at the broker, so this brings
128
+ // world-local in line with production behavior.
129
+ if (opts?.delaySeconds && opts.delaySeconds > 0) {
130
+ const delayMs = Math.min(opts.delaySeconds * 1000, MAX_SAFE_TIMEOUT_MS);
131
+ await setTimeout(delayMs, undefined, { signal: closeSignal });
132
+ }
118
133
  const token = semaphore.tryAcquire();
119
134
  if (!token) {
120
135
  console.warn(`[world-local]: concurrency limit (${WORKFLOW_LOCAL_QUEUE_CONCURRENCY}) reached, waiting for queue to free up`);
@@ -164,7 +179,9 @@ export function createQueue(config) {
164
179
  // persistent state and returns another timeoutSeconds if needed.
165
180
  if (timeoutSeconds > 0) {
166
181
  const timeoutMs = Math.min(timeoutSeconds * 1000, MAX_SAFE_TIMEOUT_MS);
167
- await setTimeout(timeoutMs);
182
+ await setTimeout(timeoutMs, undefined, {
183
+ signal: closeSignal,
184
+ });
168
185
  }
169
186
  continue;
170
187
  }
@@ -183,7 +200,7 @@ export function createQueue(config) {
183
200
  // VQS uses 5s linear for attempts 1–32, then exponential, but for
184
201
  // local dev linear 5s is sufficient — the handler enforces the real
185
202
  // cap at MAX_QUEUE_DELIVERIES (48) which keeps total time under ~4min.
186
- await setTimeout(5000);
203
+ await setTimeout(5000, undefined, { signal: closeSignal });
187
204
  }
188
205
  console.error(`[world-local] Queue message exhausted safety limit (${MAX_LOCAL_SAFETY_LIMIT} attempts)`, {
189
206
  queueName,
@@ -275,8 +292,13 @@ export function createQueue(config) {
275
292
  directHandlers.set(prefix, handler);
276
293
  },
277
294
  async close() {
295
+ // Idempotent: shutdown paths (CLI signal handlers, test teardown)
296
+ // may close the queue more than once.
297
+ if (closeSignal.aborted)
298
+ return;
299
+ closeController.abort();
278
300
  await httpAgent.close();
279
301
  },
280
302
  };
281
303
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxTQUFTLEVBQWMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsTUFBTSxrQkFBa0I7SUFDYixXQUFXLEdBQUcsa0JBQWtCLENBQUM7SUFFMUMsU0FBUyxDQUFDLEtBQWM7UUFDdEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBa0M7UUFDbEQsTUFBTSxNQUFNLEdBQWlCLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxJQUFJO2dCQUFFLE1BQU07WUFD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QUFJLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUVELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxlQUFlLEdBQTZCLEtBQUssSUFBSSxFQUFFO1FBQzNELE1BQU0sV0FBVyxHQUFHLE1BQU0sY0FBYyxFQUFFLENBQUM7UUFDM0MsT0FBTyxhQUFhLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsS0FBSztRQUNMLGtCQUFrQjtRQUNsQixlQUFlO1FBQ2YsZUFBZSxDQUNiLE1BQXlDLEVBQ3pDLE9BQXNCO1lBRXRCLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSztZQUNULE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zcG9ydCB9IGZyb20gJ0B2ZXJjZWwvcXVldWUnO1xuaW1wb3J0IHsgTWVzc2FnZUlkLCB0eXBlIFF1ZXVlLCBWYWxpZFF1ZXVlTmFtZSB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBTZW1hIH0gZnJvbSAnYXN5bmMtc2VtYSc7XG5pbXBvcnQgeyBtb25vdG9uaWNGYWN0b3J5IH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJ3VuZGljaSc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kL3Y0JztcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnLi9jb25maWcuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUJhc2VVcmwgfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQgeyBqc29uUmVwbGFjZXIsIGpzb25SZXZpdmVyIH0gZnJvbSAnLi9mcy5qcyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlSW5mbyB9IGZyb20gJy4vaW5pdC5qcyc7XG5cbi8qKlxuICogSlNPTiB0cmFuc3BvcnQgdGhhdCBwcmVzZXJ2ZXMgVWludDhBcnJheSB2YWx1ZXMgdXNpbmcgdGhlIHNhbWVcbiAqIHJlcGxhY2VyL3Jldml2ZXIgdGhhdCB3b3JsZC1sb2NhbCB1c2VzIGZvciBmaWxlc3lzdGVtIHN0b3JhZ2UuXG4gKiBVaW50OEFycmF5IOKGkiB7IF9fdHlwZTogJ1VpbnQ4QXJyYXknLCBkYXRhOiAnPGJhc2U2ND4nIH0gaW4gSlNPTi5cbiAqL1xuY2xhc3MgVHlwZWRKc29uVHJhbnNwb3J0IGltcGxlbWVudHMgVHJhbnNwb3J0PHVua25vd24+IHtcbiAgcmVhZG9ubHkgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vanNvbic7XG5cbiAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUsIGpzb25SZXBsYWNlcikpO1xuICB9XG5cbiAgYXN5bmMgZGVzZXJpYWxpemUoc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pik6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW107XG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgICAgaWYgKHZhbHVlKSBjaHVua3MucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0LCBqc29uUmV2aXZlcik7XG4gIH1cbn1cblxuLy8gRm9yIGxvY2FsIHF1ZXVlLCB0aGVyZSBpcyBubyB0ZWNobmljYWwgbGltaXQgb24gdGhlIG1lc3NhZ2UgdmlzaWJpbGl0eSBsaWZlc3Bhbixcbi8vIGJ1dCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgdG8gc2V0IGEgbWF4IHZpc2liaWxpdHkgbGltaXQuXG5jb25zdCBMT0NBTF9RVUVVRV9NQVhfVklTSUJJTElUWSA9XG4gIHBhcnNlSW50KHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX1FVRVVFX01BWF9WSVNJQklMSVRZID8/ICcwJywgMTApIHx8XG4gIEluZmluaXR5O1xuXG4vLyBNYXhpbXVtIHNhZmUgZGVsYXkgZm9yIHNldFRpbWVvdXQgaW4gTm9kZS5qcyAoMl4zMSAtIDEgbWlsbGlzZWNvbmRzIOKJiCAyNC44NSBkYXlzKVxuLy8gTGFyZ2VyIHZhbHVlcyBjYXVzZSBcIlRpbWVvdXRPdmVyZmxvd1dhcm5pbmc6IFggZG9lcyBub3QgZml0IGludG8gYSAzMi1iaXQgc2lnbmVkIGludGVnZXJcIlxuLy8gV2hlbiB0aGUgY2xhbXBlZCB0aW1lb3V0IGZpcmVzLCB0aGUgaGFuZGxlciB3aWxsIHJlY2FsY3VsYXRlIHJlbWFpbmluZyB0aW1lIGZyb21cbi8vIHBlcnNpc3RlbnQgc3RhdGUgYW5kIHJldHVybiBhbm90aGVyIHRpbWVvdXRTZWNvbmRzIGlmIG5lZWRlZC5cbmNvbnN0IE1BWF9TQUZFX1RJTUVPVVRfTVMgPSAyMTQ3NDgzNjQ3O1xuXG4vLyBUaGUgbG9jYWwgd29ya2VycyBzaGFyZSB0aGUgc2FtZSBOb2RlLmpzIHByb2Nlc3MgYW5kIGV2ZW50IGxvb3AsXG4vLyBzbyB3ZSBuZWVkIHRvIGxpbWl0IGNvbmN1cnJlbmN5IHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgc3lzdGVtLlxuY29uc3QgREVGQVVMVF9DT05DVVJSRU5DWV9MSU1JVCA9IDEwMDA7XG5jb25zdCBXT1JLRkxPV19MT0NBTF9RVUVVRV9DT05DVVJSRU5DWSA9XG4gIHBhcnNlSW50KHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX1FVRVVFX0NPTkNVUlJFTkNZID8/ICcwJywgMTApIHx8XG4gIERFRkFVTFRfQ09OQ1VSUkVOQ1lfTElNSVQ7XG5cbmV4cG9ydCB0eXBlIERpcmVjdEhhbmRsZXIgPSAocmVxOiBSZXF1ZXN0KSA9PiBQcm9taXNlPFJlc3BvbnNlPjtcblxuZXhwb3J0IHR5cGUgTG9jYWxRdWV1ZSA9IFF1ZXVlICYge1xuICAvKiogQ2xvc2UgdGhlIEhUVFAgYWdlbnQgYW5kIHJlbGVhc2UgcmVzb3VyY2VzLiAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogUmVnaXN0ZXIgYSBkaXJlY3QgaW4tcHJvY2VzcyBoYW5kbGVyIGZvciBhIHF1ZXVlIHByZWZpeCwgYnlwYXNzaW5nIEhUVFAuICovXG4gIHJlZ2lzdGVySGFuZGxlcihcbiAgICBwcmVmaXg6ICdfX3drZl9zdGVwXycgfCAnX193a2Zfd29ya2Zsb3dfJyxcbiAgICBoYW5kbGVyOiBEaXJlY3RIYW5kbGVyXG4gICk6IHZvaWQ7XG59O1xuXG5jb25zdCBERVRBQ0hFRF9BUlJBWUJVRkZFUl9FUlJPUiA9XG4gICdDYW5ub3QgcGVyZm9ybSBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Ugb24gYSBkZXRhY2hlZCBBcnJheUJ1ZmZlcic7XG5jb25zdCBQUk9YWV9IQU5ETEVSX0RPQ1NfVVJMID1cbiAgJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9kb2NzL2dldHRpbmctc3RhcnRlZC9uZXh0I2NvbmZpZ3VyZS1wcm94eS1oYW5kbGVyJztcblxuZnVuY3Rpb24gaXNEZXRhY2hlZEFycmF5QnVmZmVyUXVldWVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBsZXQgY3VycmVudCA9IGVycm9yO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDx1bmtub3duPigpO1xuXG4gIHdoaWxlIChjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50ID09PSAnb2JqZWN0JyAmJiAhdmlzaXRlZC5oYXMoY3VycmVudCkpIHtcbiAgICB2aXNpdGVkLmFkZChjdXJyZW50KTtcbiAgICBpZiAoXG4gICAgICAnbWVzc2FnZScgaW4gY3VycmVudCAmJlxuICAgICAgdHlwZW9mIGN1cnJlbnQubWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgIGN1cnJlbnQubWVzc2FnZS5pbmNsdWRlcyhERVRBQ0hFRF9BUlJBWUJVRkZFUl9FUlJPUilcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjdXJyZW50ID0gJ2NhdXNlJyBpbiBjdXJyZW50ID8gY3VycmVudC5jYXVzZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWVSb3V0ZShxdWV1ZU5hbWU6IFZhbGlkUXVldWVOYW1lKToge1xuICBwYXRobmFtZTogJ2Zsb3cnIHwgJ3N0ZXAnO1xuICBwcmVmaXg6ICdfX3drZl9zdGVwXycgfCAnX193a2Zfd29ya2Zsb3dfJztcbn0ge1xuICBpZiAocXVldWVOYW1lLnN0YXJ0c1dpdGgoJ19fd2tmX3N0ZXBfJykpIHtcbiAgICByZXR1cm4geyBwYXRobmFtZTogJ3N0ZXAnLCBwcmVmaXg6ICdfX3drZl9zdGVwXycgfTtcbiAgfVxuICBpZiAocXVldWVOYW1lLnN0YXJ0c1dpdGgoJ19fd2tmX3dvcmtmbG93XycpKSB7XG4gICAgcmV0dXJuIHsgcGF0aG5hbWU6ICdmbG93JywgcHJlZml4OiAnX193a2Zfd29ya2Zsb3dfJyB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5rbm93biBxdWV1ZSBuYW1lIHByZWZpeCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVldWUoY29uZmlnOiBQYXJ0aWFsPENvbmZpZz4pOiBMb2NhbFF1ZXVlIHtcbiAgLy8gQ3JlYXRlIGEgY3VzdG9tIGFnZW50IG9wdGltaXplZCBmb3IgaGlnaC1jb25jdXJyZW5jeSBsb2NhbCB3b3JrZmxvd3M6XG4gIC8vIC0gaGVhZGVyc1RpbWVvdXQ6IDAgYWxsb3dzIGxvbmctcnVubmluZyBzdGVwc1xuICAvLyAtIGNvbm5lY3Rpb25zOiAxMDAwIGFsbG93cyBtYW55IHBhcmFsbGVsIGNvbm5lY3Rpb25zIHRvIHRoZSBzYW1lIGhvc3RcbiAgLy8gLSBwaXBlbGluaW5nOiAxIChkZWZhdWx0KSBmb3IgSFRUUC8xLjEgY29tcGF0aWJpbGl0eVxuICAvLyAtIGtlZXBBbGl2ZVRpbWVvdXQ6IDMwcyBrZWVwcyBjb25uZWN0aW9ucyB3YXJtIGZvciByYXBpZCBzdGVwIGV4ZWN1dGlvblxuICBjb25zdCBodHRwQWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgIGhlYWRlcnNUaW1lb3V0OiAwLFxuICAgIGNvbm5lY3Rpb25zOiAxMDAwLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQ6IDMwXzAwMCxcbiAgfSk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBUeXBlZEpzb25UcmFuc3BvcnQoKTtcbiAgY29uc3QgZ2VuZXJhdGVJZCA9IG1vbm90b25pY0ZhY3RvcnkoKTtcbiAgY29uc3Qgc2VtYXBob3JlID0gbmV3IFNlbWEoV09SS0ZMT1dfTE9DQUxfUVVFVUVfQ09OQ1VSUkVOQ1kpO1xuXG4gIC8qKlxuICAgKiBob2xkcyBpbmZsaWdodCBtZXNzYWdlcyBieSBpZGVtcG90ZW5jeSBrZXkgdG8gZW5zdXJlXG4gICAqIHRoYXQgd2UgZG9uJ3QgcXVldWUgdGhlIHNhbWUgbWVzc2FnZSBtdWx0aXBsZSB0aW1lc1xuICAgKi9cbiAgY29uc3QgaW5mbGlnaHRNZXNzYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBNZXNzYWdlSWQ+KCk7XG4gIC8qKiBEaXJlY3QgaW4tcHJvY2VzcyBoYW5kbGVycyBieSBxdWV1ZSBwcmVmaXgsIGJ5cGFzc2luZyBIVFRQIHdoZW4gc2V0LiAqL1xuICBjb25zdCBkaXJlY3RIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBEaXJlY3RIYW5kbGVyPigpO1xuXG4gIGNvbnN0IHF1ZXVlOiBRdWV1ZVsncXVldWUnXSA9IGFzeW5jIChxdWV1ZU5hbWUsIG1lc3NhZ2UsIG9wdHMpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gW10gYXMgKCgpID0+IHZvaWQpW107XG5cbiAgICBpZiAob3B0cz8uaWRlbXBvdGVuY3lLZXkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gaW5mbGlnaHRNZXNzYWdlcy5nZXQob3B0cy5pZGVtcG90ZW5jeUtleSk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZUlkOiBleGlzdGluZyB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSB0cmFuc3BvcnQuc2VyaWFsaXplKG1lc3NhZ2UpO1xuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHByZWZpeCB9ID0gZ2V0UXVldWVSb3V0ZShxdWV1ZU5hbWUpO1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IE1lc3NhZ2VJZC5wYXJzZShgbXNnXyR7Z2VuZXJhdGVJZCgpfWApO1xuXG4gICAgLy8gRXh0cmFjdCBpZGVudGlmaWVycyBmcm9tIHRoZSBtZXNzYWdlIGZvciBzdHJ1Y3R1cmVkIGxvZ2dpbmcuXG4gICAgLy8gV29ya2Zsb3cgbWVzc2FnZXMgaGF2ZSBgcnVuSWRgLCBzdGVwIG1lc3NhZ2VzIGhhdmUgYHdvcmtmbG93UnVuSWRgICsgYHN0ZXBJZGAuXG4gICAgY29uc3QgbXNnID0gbWVzc2FnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBydW5JZCA9IChtc2cucnVuSWQgPz8gbXNnLndvcmtmbG93UnVuSWQgPz8gdW5kZWZpbmVkKSBhc1xuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0ZXBJZCA9IChtc2cuc3RlcElkID8/IHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKG9wdHM/LmlkZW1wb3RlbmN5S2V5KSB7XG4gICAgICBjb25zdCBrZXkgPSBvcHRzLmlkZW1wb3RlbmN5S2V5O1xuICAgICAgaW5mbGlnaHRNZXNzYWdlcy5zZXQoa2V5LCBtZXNzYWdlSWQpO1xuICAgICAgY2xlYW51cC5wdXNoKCgpID0+IHtcbiAgICAgICAgaW5mbGlnaHRNZXNzYWdlcy5kZWxldGUoa2V5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbiA9IHNlbWFwaG9yZS50cnlBY3F1aXJlKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW3dvcmxkLWxvY2FsXTogY29uY3VycmVuY3kgbGltaXQgKCR7V09SS0ZMT1dfTE9DQUxfUVVFVUVfQ09OQ1VSUkVOQ1l9KSByZWFjaGVkLCB3YWl0aW5nIGZvciBxdWV1ZSB0byBmcmVlIHVwYFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBzZW1hcGhvcmUuYWNxdWlyZSgpO1xuICAgICAgfVxuICAgICAgLy8gU2FmZXR5IGxpbWl0IHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgaW4gdGhlIGxvY2FsIHF1ZXVlLlxuICAgICAgLy8gVGhlIGFjdHVhbCBtYXggZGVsaXZlcnkgZW5mb3JjZW1lbnQgaGFwcGVucyBpbiB0aGUgd29ya2Zsb3cvc3RlcCBoYW5kbGVyc1xuICAgICAgLy8gKGF0IE1BWF9RVUVVRV9ERUxJVkVSSUVTID0gNDgpLCBzbyB0aGlzIGp1c3QgbmVlZHMgdG8gYmUgY29tZm9ydGFibHkgaGlnaGVyLlxuICAgICAgY29uc3QgTUFYX0xPQ0FMX1NBRkVUWV9MSU1JVCA9IDI1NjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgTUFYX0xPQ0FMX1NBRkVUWV9MSU1JVDsgYXR0ZW1wdCsrKSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgIC4uLm9wdHM/LmhlYWRlcnMsXG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3gtdnFzLXF1ZXVlLW5hbWUnOiBxdWV1ZU5hbWUsXG4gICAgICAgICAgICAneC12cXMtbWVzc2FnZS1pZCc6IG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICd4LXZxcy1tZXNzYWdlLWF0dGVtcHQnOiBTdHJpbmcoYXR0ZW1wdCArIDEpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZGlyZWN0SGFuZGxlciA9IGRpcmVjdEhhbmRsZXJzLmdldChwcmVmaXgpO1xuICAgICAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0SGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgcmVxID0gbmV3IFJlcXVlc3QoXG4gICAgICAgICAgICAgIGBodHRwOi8vbG9jYWxob3N0Ly53ZWxsLWtub3duL3dvcmtmbG93L3YxLyR7cGF0aG5hbWV9YCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZGlyZWN0SGFuZGxlcihyZXEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgcmVzb2x2ZUJhc2VVcmwoY29uZmlnKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIHVuZGljaSB2NyBkaXNwYXRjaGVyIHR5cGVzIGRvbid0IG1hdGNoIEB0eXBlcy9ub2RlJ3MgUmVxdWVzdEluaXRcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgICAgIGAke2Jhc2VVcmx9Ly53ZWxsLWtub3duL3dvcmtmbG93L3YxLyR7cGF0aG5hbWV9YCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoZXI6IGh0dHBBZ2VudCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgIH0gYXMgYW55XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gTnVtYmVyKEpTT04ucGFyc2UodGV4dCkudGltZW91dFNlY29uZHMpO1xuICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRTZWNvbmRzKSAmJiB0aW1lb3V0U2Vjb25kcyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xhbXAgdG8gTUFYX1NBRkVfVElNRU9VVF9NUyB0byBhdm9pZCBOb2RlLmpzIHNldFRpbWVvdXQgb3ZlcmZsb3cgd2FybmluZy5cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZmlyZXMgZWFybHksIHRoZSBoYW5kbGVyIHJlY2FsY3VsYXRlcyByZW1haW5pbmcgdGltZSBmcm9tXG4gICAgICAgICAgICAgICAgLy8gcGVyc2lzdGVudCBzdGF0ZSBhbmQgcmV0dXJucyBhbm90aGVyIHRpbWVvdXRTZWNvbmRzIGlmIG5lZWRlZC5cbiAgICAgICAgICAgICAgICBpZiAodGltZW91dFNlY29uZHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0TXMgPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dFNlY29uZHMgKiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICBNQVhfU0FGRV9USU1FT1VUX01TXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0VGltZW91dCh0aW1lb3V0TXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgW3dvcmxkLWxvY2FsXSBRdWV1ZSBtZXNzYWdlIGZhaWxlZCAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfSwgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgICAgIC4uLihydW5JZCAmJiB7IHJ1bklkIH0pLFxuICAgICAgICAgICAgICAuLi4oc3RlcElkICYmIHsgc3RlcElkIH0pLFxuICAgICAgICAgICAgICBoYW5kbGVyRXJyb3I6IHRleHQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIDVzIGxpbmVhciBiYWNrb2ZmIHRvIGFwcHJveGltYXRlIFZRUyByZXRyeSB0aW1pbmcgaW4gbG9jYWwgZGV2LlxuICAgICAgICAgIC8vIFZRUyB1c2VzIDVzIGxpbmVhciBmb3IgYXR0ZW1wdHMgMeKAkzMyLCB0aGVuIGV4cG9uZW50aWFsLCBidXQgZm9yXG4gICAgICAgICAgLy8gbG9jYWwgZGV2IGxpbmVhciA1cyBpcyBzdWZmaWNpZW50IOKAlCB0aGUgaGFuZGxlciBlbmZvcmNlcyB0aGUgcmVhbFxuICAgICAgICAgIC8vIGNhcCBhdCBNQVhfUVVFVUVfREVMSVZFUklFUyAoNDgpIHdoaWNoIGtlZXBzIHRvdGFsIHRpbWUgdW5kZXIgfjRtaW4uXG4gICAgICAgICAgYXdhaXQgc2V0VGltZW91dCg1MDAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFt3b3JsZC1sb2NhbF0gUXVldWUgbWVzc2FnZSBleGhhdXN0ZWQgc2FmZXR5IGxpbWl0ICgke01BWF9MT0NBTF9TQUZFVFlfTElNSVR9IGF0dGVtcHRzKWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgICAgLi4uKHJ1bklkICYmIHsgcnVuSWQgfSksXG4gICAgICAgICAgICAuLi4oc3RlcElkICYmIHsgc3RlcElkIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNlbWFwaG9yZS5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgfSkoKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIGNsaWVudCBkaXNjb25uZWN0IGVycm9ycyAoZS5nLiwgYnJvd3NlciByZWZyZXNoIGR1cmluZyBzdHJlYW1pbmcpXG4gICAgICAgIC8vIFRoZXNlIGFyZSBleHBlY3RlZCBhbmQgc2hvdWxkIG5vdCBjYXVzZSB1bmhhbmRsZWQgcmVqZWN0aW9uIHdhcm5pbmdzXG4gICAgICAgIGNvbnN0IGlzQWJvcnRFcnJvciA9XG4gICAgICAgICAgZXJyPy5uYW1lID09PSAnQWJvcnRFcnJvcicgfHwgZXJyPy5uYW1lID09PSAnUmVzcG9uc2VBYm9ydGVkJztcbiAgICAgICAgaWYgKCFpc0Fib3J0RXJyb3IpIHtcbiAgICAgICAgICBpZiAoaXNEZXRhY2hlZEFycmF5QnVmZmVyUXVldWVFcnJvcihlcnIpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgW2xvY2FsIHdvcmxkXSBRdWV1ZSBvcGVyYXRpb24gZmFpbGVkOiBkZXRlY3RlZCBcIiR7REVUQUNIRURfQVJSQVlCVUZGRVJfRVJST1J9XCIuIGAgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyB1c3VhbGx5IG1lYW5zIGEgTmV4dC5qcyBwcm94eS9taWRkbGV3YXJlIGNvbnN1bWVkIFdvcmtmbG93J3MgaW50ZXJuYWwgXCIgK1xuICAgICAgICAgICAgICAgICdyZXF1ZXN0IGJlZm9yZSB0aGUgZXhlY3V0b3IgY291bGQgcmVhZCBpdC4gRXhjbHVkZSBgLy53ZWxsLWtub3duL3dvcmtmbG93LypgICcgK1xuICAgICAgICAgICAgICAgIGBmcm9tIHlvdXIgbWF0Y2hlci4gU2VlICR7UFJPWFlfSEFORExFUl9ET0NTX1VSTH1gLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICAuLi4ocnVuSWQgJiYgeyBydW5JZCB9KSxcbiAgICAgICAgICAgICAgICAuLi4oc3RlcElkICYmIHsgc3RlcElkIH0pLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3I6IGVycixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW2xvY2FsIHdvcmxkXSBRdWV1ZSBvcGVyYXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGNsZWFudXApIHtcbiAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiB7IG1lc3NhZ2VJZCB9O1xuICB9O1xuXG4gIGNvbnN0IEhlYWRlclBhcnNlciA9IHoub2JqZWN0KHtcbiAgICAneC12cXMtcXVldWUtbmFtZSc6IFZhbGlkUXVldWVOYW1lLFxuICAgICd4LXZxcy1tZXNzYWdlLWlkJzogTWVzc2FnZUlkLFxuICAgICd4LXZxcy1tZXNzYWdlLWF0dGVtcHQnOiB6LmNvZXJjZS5udW1iZXIoKSxcbiAgfSk7XG5cbiAgY29uc3QgY3JlYXRlUXVldWVIYW5kbGVyOiBRdWV1ZVsnY3JlYXRlUXVldWVIYW5kbGVyJ10gPSAocHJlZml4LCBoYW5kbGVyKSA9PiB7XG4gICAgcmV0dXJuIGFzeW5jIChyZXEpID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBIZWFkZXJQYXJzZXIuc2FmZVBhcnNlKE9iamVjdC5mcm9tRW50cmllcyhyZXEuaGVhZGVycykpO1xuXG4gICAgICBpZiAoIWhlYWRlcnMuc3VjY2VzcyB8fCAhcmVxLmJvZHkpIHtcbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3I6ICFyZXEuYm9keVxuICAgICAgICAgICAgICA/ICdNaXNzaW5nIHJlcXVlc3QgYm9keSdcbiAgICAgICAgICAgICAgOiAnTWlzc2luZyByZXF1aXJlZCBoZWFkZXJzJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgc3RhdHVzOiA0MDAgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWV1ZU5hbWUgPSBoZWFkZXJzLmRhdGFbJ3gtdnFzLXF1ZXVlLW5hbWUnXTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IGhlYWRlcnMuZGF0YVsneC12cXMtbWVzc2FnZS1pZCddO1xuICAgICAgY29uc3QgYXR0ZW1wdCA9IGhlYWRlcnMuZGF0YVsneC12cXMtbWVzc2FnZS1hdHRlbXB0J107XG5cbiAgICAgIGlmICghcXVldWVOYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbih7IGVycm9yOiAnVW5oYW5kbGVkIHF1ZXVlJyB9LCB7IHN0YXR1czogNDAwIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgbmV3IFR5cGVkSnNvblRyYW5zcG9ydCgpLmRlc2VyaWFsaXplKHJlcS5ib2R5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYm9keSwgeyBhdHRlbXB0LCBxdWV1ZU5hbWUsIG1lc3NhZ2VJZCB9KTtcblxuICAgICAgICBsZXQgdGltZW91dFNlY29uZHM6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdD8udGltZW91dFNlY29uZHMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGltZW91dFNlY29uZHMgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIHJlc3VsdC50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgIExPQ0FMX1FVRVVFX01BWF9WSVNJQklMSVRZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0U2Vjb25kcyAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oeyB0aW1lb3V0U2Vjb25kcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgb2s6IHRydWUgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihTdHJpbmcoZXJyb3IpLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZ2V0RGVwbG95bWVudElkOiBRdWV1ZVsnZ2V0RGVwbG95bWVudElkJ10gPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFja2FnZUluZm8gPSBhd2FpdCBnZXRQYWNrYWdlSW5mbygpO1xuICAgIHJldHVybiBgZHBsX2xvY2FsQCR7cGFja2FnZUluZm8udmVyc2lvbn1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcXVldWUsXG4gICAgY3JlYXRlUXVldWVIYW5kbGVyLFxuICAgIGdldERlcGxveW1lbnRJZCxcbiAgICByZWdpc3RlckhhbmRsZXIoXG4gICAgICBwcmVmaXg6ICdfX3drZl9zdGVwXycgfCAnX193a2Zfd29ya2Zsb3dfJyxcbiAgICAgIGhhbmRsZXI6IERpcmVjdEhhbmRsZXJcbiAgICApIHtcbiAgICAgIGRpcmVjdEhhbmRsZXJzLnNldChwcmVmaXgsIGhhbmRsZXIpO1xuICAgIH0sXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICBhd2FpdCBodHRwQWdlbnQuY2xvc2UoKTtcbiAgICB9LFxuICB9O1xufVxuIl19
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxFQUdkLGNBQWMsR0FDZixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0M7Ozs7R0FJRztBQUNILE1BQU0sa0JBQWtCO0lBQ2IsV0FBVyxHQUFHLGtCQUFrQixDQUFDO0lBRTFDLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWtDO1FBQ2xELE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksSUFBSTtnQkFB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QWUsQ0FBQyxNQUFtQixFQUFFLE9BQXNCO1lBQ3pELGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSztZQUNULGtFQUFrRTtZQUNsRSxzQ0FBc0M7WUFDdEMsSUFBSSxXQUFXLENBQUMsT0FBTztnQkFBRSxPQUFPO1lBQ2hDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc3BvcnQgfSBmcm9tICdAdmVyY2VsL3F1ZXVlJztcbmltcG9ydCB7XG4gIE1lc3NhZ2VJZCxcbiAgcGFyc2VRdWV1ZU5hbWUsXG4gIHR5cGUgUXVldWUsXG4gIHR5cGUgUXVldWVQcmVmaXgsXG4gIFZhbGlkUXVldWVOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgU2VtYSB9IGZyb20gJ2FzeW5jLXNlbWEnO1xuaW1wb3J0IHsgbW9ub3RvbmljRmFjdG9yeSB9IGZyb20gJ3VsaWQnO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICd1bmRpY2knO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZC92NCc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gJy4vY29uZmlnLmpzJztcbmltcG9ydCB7IHJlc29sdmVCYXNlVXJsIH0gZnJvbSAnLi9jb25maWcuanMnO1xuaW1wb3J0IHsganNvblJlcGxhY2VyLCBqc29uUmV2aXZlciB9IGZyb20gJy4vZnMuanMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZUluZm8gfSBmcm9tICcuL2luaXQuanMnO1xuXG4vKipcbiAqIEpTT04gdHJhbnNwb3J0IHRoYXQgcHJlc2VydmVzIFVpbnQ4QXJyYXkgdmFsdWVzIHVzaW5nIHRoZSBzYW1lXG4gKiByZXBsYWNlci9yZXZpdmVyIHRoYXQgd29ybGQtbG9jYWwgdXNlcyBmb3IgZmlsZXN5c3RlbSBzdG9yYWdlLlxuICogVWludDhBcnJheSDihpIgeyBfX3R5cGU6ICdVaW50OEFycmF5JywgZGF0YTogJzxiYXNlNjQ+JyB9IGluIEpTT04uXG4gKi9cbmNsYXNzIFR5cGVkSnNvblRyYW5zcG9ydCBpbXBsZW1lbnRzIFRyYW5zcG9ydDx1bmtub3duPiB7XG4gIHJlYWRvbmx5IGNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gIHNlcmlhbGl6ZSh2YWx1ZTogdW5rbm93bik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHZhbHVlLCBqc29uUmVwbGFjZXIpKTtcbiAgfVxuXG4gIGFzeW5jIGRlc2VyaWFsaXplKHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCBjaHVua3M6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSBicmVhaztcbiAgICAgIGlmICh2YWx1ZSkgY2h1bmtzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCwganNvblJldml2ZXIpO1xuICB9XG59XG5cbi8vIEZvciBsb2NhbCBxdWV1ZSwgdGhlcmUgaXMgbm8gdGVjaG5pY2FsIGxpbWl0IG9uIHRoZSBtZXNzYWdlIHZpc2liaWxpdHkgbGlmZXNwYW4sXG4vLyBidXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHRvIHNldCBhIG1heCB2aXNpYmlsaXR5IGxpbWl0LlxuY29uc3QgTE9DQUxfUVVFVUVfTUFYX1ZJU0lCSUxJVFkgPVxuICBwYXJzZUludChwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9RVUVVRV9NQVhfVklTSUJJTElUWSA/PyAnMCcsIDEwKSB8fFxuICBJbmZpbml0eTtcblxuLy8gTWF4aW11bSBzYWZlIGRlbGF5IGZvciBzZXRUaW1lb3V0IGluIE5vZGUuanMgKDJeMzEgLSAxIG1pbGxpc2Vjb25kcyDiiYggMjQuODUgZGF5cylcbi8vIExhcmdlciB2YWx1ZXMgY2F1c2UgXCJUaW1lb3V0T3ZlcmZsb3dXYXJuaW5nOiBYIGRvZXMgbm90IGZpdCBpbnRvIGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyXCJcbi8vIFdoZW4gdGhlIGNsYW1wZWQgdGltZW91dCBmaXJlcywgdGhlIGhhbmRsZXIgd2lsbCByZWNhbGN1bGF0ZSByZW1haW5pbmcgdGltZSBmcm9tXG4vLyBwZXJzaXN0ZW50IHN0YXRlIGFuZCByZXR1cm4gYW5vdGhlciB0aW1lb3V0U2Vjb25kcyBpZiBuZWVkZWQuXG5jb25zdCBNQVhfU0FGRV9USU1FT1VUX01TID0gMjE0NzQ4MzY0NztcblxuLy8gVGhlIGxvY2FsIHdvcmtlcnMgc2hhcmUgdGhlIHNhbWUgTm9kZS5qcyBwcm9jZXNzIGFuZCBldmVudCBsb29wLFxuLy8gc28gd2UgbmVlZCB0byBsaW1pdCBjb25jdXJyZW5jeSB0byBhdm9pZCBvdmVyd2hlbG1pbmcgdGhlIHN5c3RlbS5cbmNvbnN0IERFRkFVTFRfQ09OQ1VSUkVOQ1lfTElNSVQgPSAxMDAwO1xuY29uc3QgV09SS0ZMT1dfTE9DQUxfUVVFVUVfQ09OQ1VSUkVOQ1kgPVxuICBwYXJzZUludChwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9RVUVVRV9DT05DVVJSRU5DWSA/PyAnMCcsIDEwKSB8fFxuICBERUZBVUxUX0NPTkNVUlJFTkNZX0xJTUlUO1xuXG5leHBvcnQgdHlwZSBEaXJlY3RIYW5kbGVyID0gKHJlcTogUmVxdWVzdCkgPT4gUHJvbWlzZTxSZXNwb25zZT47XG5cbmV4cG9ydCB0eXBlIExvY2FsUXVldWUgPSBRdWV1ZSAmIHtcbiAgLyoqIENsb3NlIHRoZSBIVFRQIGFnZW50IGFuZCByZWxlYXNlIHJlc291cmNlcy4gKi9cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlZ2lzdGVyIGEgZGlyZWN0IGluLXByb2Nlc3MgaGFuZGxlciBmb3IgYSBxdWV1ZSBwcmVmaXgsIGJ5cGFzc2luZyBIVFRQLiAqL1xuICByZWdpc3RlckhhbmRsZXIocHJlZml4OiBRdWV1ZVByZWZpeCwgaGFuZGxlcjogRGlyZWN0SGFuZGxlcik6IHZvaWQ7XG59O1xuXG5jb25zdCBERVRBQ0hFRF9BUlJBWUJVRkZFUl9FUlJPUiA9XG4gICdDYW5ub3QgcGVyZm9ybSBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Ugb24gYSBkZXRhY2hlZCBBcnJheUJ1ZmZlcic7XG5jb25zdCBQUk9YWV9IQU5ETEVSX0RPQ1NfVVJMID1cbiAgJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9kb2NzL2dldHRpbmctc3RhcnRlZC9uZXh0I2NvbmZpZ3VyZS1wcm94eS1oYW5kbGVyJztcblxuZnVuY3Rpb24gaXNEZXRhY2hlZEFycmF5QnVmZmVyUXVldWVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBsZXQgY3VycmVudCA9IGVycm9yO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDx1bmtub3duPigpO1xuXG4gIHdoaWxlIChjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50ID09PSAnb2JqZWN0JyAmJiAhdmlzaXRlZC5oYXMoY3VycmVudCkpIHtcbiAgICB2aXNpdGVkLmFkZChjdXJyZW50KTtcbiAgICBpZiAoXG4gICAgICAnbWVzc2FnZScgaW4gY3VycmVudCAmJlxuICAgICAgdHlwZW9mIGN1cnJlbnQubWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgIGN1cnJlbnQubWVzc2FnZS5pbmNsdWRlcyhERVRBQ0hFRF9BUlJBWUJVRkZFUl9FUlJPUilcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjdXJyZW50ID0gJ2NhdXNlJyBpbiBjdXJyZW50ID8gY3VycmVudC5jYXVzZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWVSb3V0ZShxdWV1ZU5hbWU6IFZhbGlkUXVldWVOYW1lKToge1xuICBwYXRobmFtZTogJ2Zsb3cnIHwgJ3N0ZXAnO1xuICBwcmVmaXg6IFF1ZXVlUHJlZml4O1xufSB7XG4gIGNvbnN0IHsga2luZCwgcHJlZml4IH0gPSBwYXJzZVF1ZXVlTmFtZShxdWV1ZU5hbWUpO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IGtpbmQgPT09ICd3b3JrZmxvdycgPyAnZmxvdycgOiAnc3RlcCcsXG4gICAgcHJlZml4LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVldWUoY29uZmlnOiBQYXJ0aWFsPENvbmZpZz4pOiBMb2NhbFF1ZXVlIHtcbiAgLy8gQ3JlYXRlIGEgY3VzdG9tIGFnZW50IG9wdGltaXplZCBmb3IgaGlnaC1jb25jdXJyZW5jeSBsb2NhbCB3b3JrZmxvd3M6XG4gIC8vIC0gaGVhZGVyc1RpbWVvdXQ6IDAgYWxsb3dzIGxvbmctcnVubmluZyBzdGVwc1xuICAvLyAtIGNvbm5lY3Rpb25zOiAxMDAwIGFsbG93cyBtYW55IHBhcmFsbGVsIGNvbm5lY3Rpb25zIHRvIHRoZSBzYW1lIGhvc3RcbiAgLy8gLSBwaXBlbGluaW5nOiAxIChkZWZhdWx0KSBmb3IgSFRUUC8xLjEgY29tcGF0aWJpbGl0eVxuICAvLyAtIGtlZXBBbGl2ZVRpbWVvdXQ6IDMwcyBrZWVwcyBjb25uZWN0aW9ucyB3YXJtIGZvciByYXBpZCBzdGVwIGV4ZWN1dGlvblxuICBjb25zdCBodHRwQWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgIGhlYWRlcnNUaW1lb3V0OiAwLFxuICAgIGNvbm5lY3Rpb25zOiAxMDAwLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQ6IDMwXzAwMCxcbiAgfSk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBUeXBlZEpzb25UcmFuc3BvcnQoKTtcbiAgY29uc3QgZ2VuZXJhdGVJZCA9IG1vbm90b25pY0ZhY3RvcnkoKTtcbiAgY29uc3Qgc2VtYXBob3JlID0gbmV3IFNlbWEoV09SS0ZMT1dfTE9DQUxfUVVFVUVfQ09OQ1VSUkVOQ1kpO1xuXG4gIC8vIEFib3J0ZWQgYnkgY2xvc2UoKTogY2FuY2VscyBldmVyeSBwZW5kaW5nIHNsZWVwIChkZWxheWVkIGRlbGl2ZXJpZXMsXG4gIC8vIHRpbWVvdXRTZWNvbmRzIHJlLWRlbGl2ZXJpZXMsIHJldHJ5IGJhY2tvZmZzKSBzbyBzaHV0ZG93biBpc24ndCBoZWxkXG4gIC8vIGhvc3RhZ2UgYnkgYSB0aW1lciBhbmQgbm8gZGVsaXZlcnkgaXMgYXR0ZW1wdGVkIGFnYWluc3QgdGhlIGNsb3NlZFxuICAvLyBhZ2VudC4gVGhlIHJlc3VsdGluZyBBYm9ydEVycm9yIGlzIHNpbGVudGx5IGRyb3BwZWQgYnkgdGhlXG4gIC8vIGlzQWJvcnRFcnJvciBjaGVjayBpbiB0aGUgZGVsaXZlcnkgY2F0Y2ggaGFuZGxlci5cbiAgY29uc3QgY2xvc2VDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBjbG9zZVNpZ25hbCA9IGNsb3NlQ29udHJvbGxlci5zaWduYWw7XG5cbiAgLyoqXG4gICAqIGhvbGRzIGluZmxpZ2h0IG1lc3NhZ2VzIGJ5IGlkZW1wb3RlbmN5IGtleSB0byBlbnN1cmVcbiAgICogdGhhdCB3ZSBkb24ndCBxdWV1ZSB0aGUgc2FtZSBtZXNzYWdlIG11bHRpcGxlIHRpbWVzXG4gICAqL1xuICBjb25zdCBpbmZsaWdodE1lc3NhZ2VzID0gbmV3IE1hcDxzdHJpbmcsIE1lc3NhZ2VJZD4oKTtcbiAgLyoqIERpcmVjdCBpbi1wcm9jZXNzIGhhbmRsZXJzIGJ5IHF1ZXVlIHByZWZpeCwgYnlwYXNzaW5nIEhUVFAgd2hlbiBzZXQuICovXG4gIGNvbnN0IGRpcmVjdEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIERpcmVjdEhhbmRsZXI+KCk7XG5cbiAgY29uc3QgcXVldWU6IFF1ZXVlWydxdWV1ZSddID0gYXN5bmMgKHF1ZXVlTmFtZSwgbWVzc2FnZSwgb3B0cykgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSBbXSBhcyAoKCkgPT4gdm9pZClbXTtcblxuICAgIGlmIChvcHRzPy5pZGVtcG90ZW5jeUtleSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBpbmZsaWdodE1lc3NhZ2VzLmdldChvcHRzLmlkZW1wb3RlbmN5S2V5KTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlSWQ6IGV4aXN0aW5nIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHRyYW5zcG9ydC5zZXJpYWxpemUobWVzc2FnZSk7XG4gICAgY29uc3QgeyBwYXRobmFtZSwgcHJlZml4IH0gPSBnZXRRdWV1ZVJvdXRlKHF1ZXVlTmFtZSk7XG4gICAgY29uc3QgbWVzc2FnZUlkID0gTWVzc2FnZUlkLnBhcnNlKGBtc2dfJHtnZW5lcmF0ZUlkKCl9YCk7XG5cbiAgICAvLyBFeHRyYWN0IGlkZW50aWZpZXJzIGZyb20gdGhlIG1lc3NhZ2UgZm9yIHN0cnVjdHVyZWQgbG9nZ2luZy5cbiAgICAvLyBXb3JrZmxvdyBtZXNzYWdlcyBoYXZlIGBydW5JZGAsIHN0ZXAgbWVzc2FnZXMgaGF2ZSBgd29ya2Zsb3dSdW5JZGAgKyBgc3RlcElkYC5cbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHJ1bklkID0gKG1zZy5ydW5JZCA/PyBtc2cud29ya2Zsb3dSdW5JZCA/PyB1bmRlZmluZWQpIGFzXG4gICAgICB8IHN0cmluZ1xuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3RlcElkID0gKG1zZy5zdGVwSWQgPz8gdW5kZWZpbmVkKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3B0cz8uaWRlbXBvdGVuY3lLZXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IG9wdHMuaWRlbXBvdGVuY3lLZXk7XG4gICAgICBpbmZsaWdodE1lc3NhZ2VzLnNldChrZXksIG1lc3NhZ2VJZCk7XG4gICAgICBjbGVhbnVwLnB1c2goKCkgPT4ge1xuICAgICAgICBpbmZsaWdodE1lc3NhZ2VzLmRlbGV0ZShrZXkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEhvbm9yIHRoZSBjYWxsZXIncyByZXF1ZXN0ZWQgZGVsaXZlcnkgZGVsYXkgYmVmb3JlIGFjcXVpcmluZyBhIHF1ZXVlXG4gICAgICAvLyBzbG90LiBTbGVlcGluZyBvdXRzaWRlIHRoZSBzZW1hcGhvcmUgc28gYSBkZWxheWVkIG1lc3NhZ2UgZG9lc24ndFxuICAgICAgLy8gaG9sZCBhIHdvcmtlciBob3N0YWdlIGZvciBpdHMgZGVsYXkgd2luZG93IOKAlCB0aGUgd29ya2VyIHNob3VsZCBiZVxuICAgICAgLy8gZnJlZSB0byBwcm9jZXNzIG90aGVyIChpbW1lZGlhdGUpIG1lc3NhZ2VzIHVudGlsIHRoaXMgb25lIGlzIHJlYWR5LlxuICAgICAgLy8gVlFTLXNpZGUgcXVldWVzIGhvbm9yIGRlbGF5U2Vjb25kcyBhdCB0aGUgYnJva2VyLCBzbyB0aGlzIGJyaW5nc1xuICAgICAgLy8gd29ybGQtbG9jYWwgaW4gbGluZSB3aXRoIHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gICAgICBpZiAob3B0cz8uZGVsYXlTZWNvbmRzICYmIG9wdHMuZGVsYXlTZWNvbmRzID4gMCkge1xuICAgICAgICBjb25zdCBkZWxheU1zID0gTWF0aC5taW4ob3B0cy5kZWxheVNlY29uZHMgKiAxMDAwLCBNQVhfU0FGRV9USU1FT1VUX01TKTtcbiAgICAgICAgYXdhaXQgc2V0VGltZW91dChkZWxheU1zLCB1bmRlZmluZWQsIHsgc2lnbmFsOiBjbG9zZVNpZ25hbCB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW4gPSBzZW1hcGhvcmUudHJ5QWNxdWlyZSgpO1xuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFt3b3JsZC1sb2NhbF06IGNvbmN1cnJlbmN5IGxpbWl0ICgke1dPUktGTE9XX0xPQ0FMX1FVRVVFX0NPTkNVUlJFTkNZfSkgcmVhY2hlZCwgd2FpdGluZyBmb3IgcXVldWUgdG8gZnJlZSB1cGBcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgc2VtYXBob3JlLmFjcXVpcmUoKTtcbiAgICAgIH1cbiAgICAgIC8vIFNhZmV0eSBsaW1pdCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGluIHRoZSBsb2NhbCBxdWV1ZS5cbiAgICAgIC8vIFRoZSBhY3R1YWwgbWF4IGRlbGl2ZXJ5IGVuZm9yY2VtZW50IGhhcHBlbnMgaW4gdGhlIHdvcmtmbG93L3N0ZXAgaGFuZGxlcnNcbiAgICAgIC8vIChhdCBNQVhfUVVFVUVfREVMSVZFUklFUyA9IDQ4KSwgc28gdGhpcyBqdXN0IG5lZWRzIHRvIGJlIGNvbWZvcnRhYmx5IGhpZ2hlci5cbiAgICAgIGNvbnN0IE1BWF9MT0NBTF9TQUZFVFlfTElNSVQgPSAyNTY7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IE1BWF9MT0NBTF9TQUZFVFlfTElNSVQ7IGF0dGVtcHQrKykge1xuICAgICAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAuLi5vcHRzPy5oZWFkZXJzLFxuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd4LXZxcy1xdWV1ZS1uYW1lJzogcXVldWVOYW1lLFxuICAgICAgICAgICAgJ3gtdnFzLW1lc3NhZ2UtaWQnOiBtZXNzYWdlSWQsXG4gICAgICAgICAgICAneC12cXMtbWVzc2FnZS1hdHRlbXB0JzogU3RyaW5nKGF0dGVtcHQgKyAxKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGRpcmVjdEhhbmRsZXIgPSBkaXJlY3RIYW5kbGVycy5nZXQocHJlZml4KTtcbiAgICAgICAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgICAgICAgaWYgKGRpcmVjdEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IG5ldyBSZXF1ZXN0KFxuICAgICAgICAgICAgICBgaHR0cDovL2xvY2FsaG9zdC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS8ke3BhdGhuYW1lfWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGRpcmVjdEhhbmRsZXIocmVxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IHJlc29sdmVCYXNlVXJsKGNvbmZpZyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSB1bmRpY2kgdjcgZGlzcGF0Y2hlciB0eXBlcyBkb24ndCBtYXRjaCBAdHlwZXMvbm9kZSdzIFJlcXVlc3RJbml0XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgICAgICBgJHtiYXNlVXJsfS8ud2VsbC1rbm93bi93b3JrZmxvdy92MS8ke3BhdGhuYW1lfWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaGVyOiBodHRwQWdlbnQsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICB9IGFzIGFueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0U2Vjb25kcyA9IE51bWJlcihKU09OLnBhcnNlKHRleHQpLnRpbWVvdXRTZWNvbmRzKTtcbiAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0aW1lb3V0U2Vjb25kcykgJiYgdGltZW91dFNlY29uZHMgPj0gMCkge1xuICAgICAgICAgICAgICAgIC8vIENsYW1wIHRvIE1BWF9TQUZFX1RJTUVPVVRfTVMgdG8gYXZvaWQgTm9kZS5qcyBzZXRUaW1lb3V0IG92ZXJmbG93IHdhcm5pbmcuXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGZpcmVzIGVhcmx5LCB0aGUgaGFuZGxlciByZWNhbGN1bGF0ZXMgcmVtYWluaW5nIHRpbWUgZnJvbVxuICAgICAgICAgICAgICAgIC8vIHBlcnNpc3RlbnQgc3RhdGUgYW5kIHJldHVybnMgYW5vdGhlciB0aW1lb3V0U2Vjb25kcyBpZiBuZWVkZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXRTZWNvbmRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGltZW91dE1zID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRTZWNvbmRzICogMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgTUFYX1NBRkVfVElNRU9VVF9NU1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHNldFRpbWVvdXQodGltZW91dE1zLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjbG9zZVNpZ25hbCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgW3dvcmxkLWxvY2FsXSBRdWV1ZSBtZXNzYWdlIGZhaWxlZCAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfSwgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgICAgIC4uLihydW5JZCAmJiB7IHJ1bklkIH0pLFxuICAgICAgICAgICAgICAuLi4oc3RlcElkICYmIHsgc3RlcElkIH0pLFxuICAgICAgICAgICAgICBoYW5kbGVyRXJyb3I6IHRleHQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIDVzIGxpbmVhciBiYWNrb2ZmIHRvIGFwcHJveGltYXRlIFZRUyByZXRyeSB0aW1pbmcgaW4gbG9jYWwgZGV2LlxuICAgICAgICAgIC8vIFZRUyB1c2VzIDVzIGxpbmVhciBmb3IgYXR0ZW1wdHMgMeKAkzMyLCB0aGVuIGV4cG9uZW50aWFsLCBidXQgZm9yXG4gICAgICAgICAgLy8gbG9jYWwgZGV2IGxpbmVhciA1cyBpcyBzdWZmaWNpZW50IOKAlCB0aGUgaGFuZGxlciBlbmZvcmNlcyB0aGUgcmVhbFxuICAgICAgICAgIC8vIGNhcCBhdCBNQVhfUVVFVUVfREVMSVZFUklFUyAoNDgpIHdoaWNoIGtlZXBzIHRvdGFsIHRpbWUgdW5kZXIgfjRtaW4uXG4gICAgICAgICAgYXdhaXQgc2V0VGltZW91dCg1MDAwLCB1bmRlZmluZWQsIHsgc2lnbmFsOiBjbG9zZVNpZ25hbCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFt3b3JsZC1sb2NhbF0gUXVldWUgbWVzc2FnZSBleGhhdXN0ZWQgc2FmZXR5IGxpbWl0ICgke01BWF9MT0NBTF9TQUZFVFlfTElNSVR9IGF0dGVtcHRzKWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgICAgLi4uKHJ1bklkICYmIHsgcnVuSWQgfSksXG4gICAgICAgICAgICAuLi4oc3RlcElkICYmIHsgc3RlcElkIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNlbWFwaG9yZS5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgfSkoKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIGNsaWVudCBkaXNjb25uZWN0IGVycm9ycyAoZS5nLiwgYnJvd3NlciByZWZyZXNoIGR1cmluZyBzdHJlYW1pbmcpXG4gICAgICAgIC8vIFRoZXNlIGFyZSBleHBlY3RlZCBhbmQgc2hvdWxkIG5vdCBjYXVzZSB1bmhhbmRsZWQgcmVqZWN0aW9uIHdhcm5pbmdzXG4gICAgICAgIGNvbnN0IGlzQWJvcnRFcnJvciA9XG4gICAgICAgICAgZXJyPy5uYW1lID09PSAnQWJvcnRFcnJvcicgfHwgZXJyPy5uYW1lID09PSAnUmVzcG9uc2VBYm9ydGVkJztcbiAgICAgICAgaWYgKCFpc0Fib3J0RXJyb3IpIHtcbiAgICAgICAgICBpZiAoaXNEZXRhY2hlZEFycmF5QnVmZmVyUXVldWVFcnJvcihlcnIpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgW2xvY2FsIHdvcmxkXSBRdWV1ZSBvcGVyYXRpb24gZmFpbGVkOiBkZXRlY3RlZCBcIiR7REVUQUNIRURfQVJSQVlCVUZGRVJfRVJST1J9XCIuIGAgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyB1c3VhbGx5IG1lYW5zIGEgTmV4dC5qcyBwcm94eS9taWRkbGV3YXJlIGNvbnN1bWVkIFdvcmtmbG93J3MgaW50ZXJuYWwgXCIgK1xuICAgICAgICAgICAgICAgICdyZXF1ZXN0IGJlZm9yZSB0aGUgZXhlY3V0b3IgY291bGQgcmVhZCBpdC4gRXhjbHVkZSBgLy53ZWxsLWtub3duL3dvcmtmbG93LypgICcgK1xuICAgICAgICAgICAgICAgIGBmcm9tIHlvdXIgbWF0Y2hlci4gU2VlICR7UFJPWFlfSEFORExFUl9ET0NTX1VSTH1gLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICAuLi4ocnVuSWQgJiYgeyBydW5JZCB9KSxcbiAgICAgICAgICAgICAgICAuLi4oc3RlcElkICYmIHsgc3RlcElkIH0pLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3I6IGVycixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW2xvY2FsIHdvcmxkXSBRdWV1ZSBvcGVyYXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGNsZWFudXApIHtcbiAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiB7IG1lc3NhZ2VJZCB9O1xuICB9O1xuXG4gIGNvbnN0IEhlYWRlclBhcnNlciA9IHoub2JqZWN0KHtcbiAgICAneC12cXMtcXVldWUtbmFtZSc6IFZhbGlkUXVldWVOYW1lLFxuICAgICd4LXZxcy1tZXNzYWdlLWlkJzogTWVzc2FnZUlkLFxuICAgICd4LXZxcy1tZXNzYWdlLWF0dGVtcHQnOiB6LmNvZXJjZS5udW1iZXIoKSxcbiAgfSk7XG5cbiAgY29uc3QgY3JlYXRlUXVldWVIYW5kbGVyOiBRdWV1ZVsnY3JlYXRlUXVldWVIYW5kbGVyJ10gPSAocHJlZml4LCBoYW5kbGVyKSA9PiB7XG4gICAgcmV0dXJuIGFzeW5jIChyZXEpID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBIZWFkZXJQYXJzZXIuc2FmZVBhcnNlKE9iamVjdC5mcm9tRW50cmllcyhyZXEuaGVhZGVycykpO1xuXG4gICAgICBpZiAoIWhlYWRlcnMuc3VjY2VzcyB8fCAhcmVxLmJvZHkpIHtcbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3I6ICFyZXEuYm9keVxuICAgICAgICAgICAgICA/ICdNaXNzaW5nIHJlcXVlc3QgYm9keSdcbiAgICAgICAgICAgICAgOiAnTWlzc2luZyByZXF1aXJlZCBoZWFkZXJzJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgc3RhdHVzOiA0MDAgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWV1ZU5hbWUgPSBoZWFkZXJzLmRhdGFbJ3gtdnFzLXF1ZXVlLW5hbWUnXTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IGhlYWRlcnMuZGF0YVsneC12cXMtbWVzc2FnZS1pZCddO1xuICAgICAgY29uc3QgYXR0ZW1wdCA9IGhlYWRlcnMuZGF0YVsneC12cXMtbWVzc2FnZS1hdHRlbXB0J107XG5cbiAgICAgIGlmICghcXVldWVOYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbih7IGVycm9yOiAnVW5oYW5kbGVkIHF1ZXVlJyB9LCB7IHN0YXR1czogNDAwIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgbmV3IFR5cGVkSnNvblRyYW5zcG9ydCgpLmRlc2VyaWFsaXplKHJlcS5ib2R5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYm9keSwgeyBhdHRlbXB0LCBxdWV1ZU5hbWUsIG1lc3NhZ2VJZCB9KTtcblxuICAgICAgICBsZXQgdGltZW91dFNlY29uZHM6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdD8udGltZW91dFNlY29uZHMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGltZW91dFNlY29uZHMgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIHJlc3VsdC50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgIExPQ0FMX1FVRVVFX01BWF9WSVNJQklMSVRZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0U2Vjb25kcyAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oeyB0aW1lb3V0U2Vjb25kcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgb2s6IHRydWUgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihTdHJpbmcoZXJyb3IpLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZ2V0RGVwbG95bWVudElkOiBRdWV1ZVsnZ2V0RGVwbG95bWVudElkJ10gPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFja2FnZUluZm8gPSBhd2FpdCBnZXRQYWNrYWdlSW5mbygpO1xuICAgIHJldHVybiBgZHBsX2xvY2FsQCR7cGFja2FnZUluZm8udmVyc2lvbn1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcXVldWUsXG4gICAgY3JlYXRlUXVldWVIYW5kbGVyLFxuICAgIGdldERlcGxveW1lbnRJZCxcbiAgICByZWdpc3RlckhhbmRsZXIocHJlZml4OiBRdWV1ZVByZWZpeCwgaGFuZGxlcjogRGlyZWN0SGFuZGxlcikge1xuICAgICAgZGlyZWN0SGFuZGxlcnMuc2V0KHByZWZpeCwgaGFuZGxlcik7XG4gICAgfSxcbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIC8vIElkZW1wb3RlbnQ6IHNodXRkb3duIHBhdGhzIChDTEkgc2lnbmFsIGhhbmRsZXJzLCB0ZXN0IHRlYXJkb3duKVxuICAgICAgLy8gbWF5IGNsb3NlIHRoZSBxdWV1ZSBtb3JlIHRoYW4gb25jZS5cbiAgICAgIGlmIChjbG9zZVNpZ25hbC5hYm9ydGVkKSByZXR1cm47XG4gICAgICBjbG9zZUNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIGF3YWl0IGh0dHBBZ2VudC5jbG9zZSgpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"events-storage.d.ts","sourceRoot":"","sources":["../../src/storage/events-storage.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAMV,OAAO,EAGR,MAAM,iBAAiB,CAAC;AA8IzB;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,CAAC,CAskCnB"}
1
+ {"version":3,"file":"events-storage.d.ts","sourceRoot":"","sources":["../../src/storage/events-storage.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAMV,OAAO,EAGR,MAAM,iBAAiB,CAAC;AAsXzB;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,CAAC,CAi8CnB"}