sliftutils 1.7.49 → 1.7.50

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.
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
6
- //exports.serializeRemoteConfig = exports.parseRoutingData = exports.normalizeRemoteConfig = exports.normalizeSource = exports.replaceHostedUrlPort = exports.parseBackblazeUrl = exports.parseHostedUrl = exports.buildFileUrl = exports.getBucketBaseUrl = exports.getConfigVersion = exports.routeIntersection = exports.routesOverlap = exports.routeContains = exports.getRoute = exports.parseVariableRoute = exports.ROUTING_FILE = void 0;
6
+ //exports.serializeRemoteConfig = exports.parseRoutingData = exports.normalizeRemoteConfig = exports.normalizeSource = exports.replaceHostedUrlPort = exports.parseBackblazeUrl = exports.parseHostedUrl = exports.buildFileUrl = exports.getBucketBaseUrl = exports.getConfigVersion = exports.routeIntersection = exports.routesOverlap = exports.routeContains = exports.filterChanges = exports.getRoute = exports.parseVariableRoute = exports.ROUTING_FILE = void 0;
7
7
  const misc_1 = require("socket-function/src/misc");
8
8
  const bits_1 = require("socket-function/src/bits");
9
9
  const compileFlags_1 = require("socket-function/require/compileFlags");
@@ -35,6 +35,18 @@ function getRoute(key) {
35
35
  return hash % ROUTE_PRECISION / ROUTE_PRECISION;
36
36
  }
37
37
  exports.getRoute = getRoute;
38
+ /** The in-memory getChangesAfter2 emulation, for backends without a native change feed: a full listing filtered down to files written after config.time whose keys route into config.routes. */
39
+ function filterChanges(files, config) {
40
+ return files.filter(file => {
41
+ if (file.createTime <= config.time)
42
+ return false;
43
+ let routes = config.routes;
44
+ if (routes && !routes.some(route => routeContains(route, getRoute(file.path))))
45
+ return false;
46
+ return true;
47
+ });
48
+ }
49
+ exports.filterChanges = filterChanges;
38
50
  // Route ranges are [start, end) - inclusive start, exclusive end
39
51
  function routeContains(route, value) {
40
52
  if (!route)
@@ -226,5 +238,5 @@ function serializeRemoteConfig(config) {
226
238
  return Buffer.from(JSON.stringify(config, undefined, 4));
227
239
  }
228
240
  exports.serializeRemoteConfig = serializeRemoteConfig;
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVtb3RlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUFnRDtBQUNoRCxtREFBd0Q7QUFDeEQsdUVBQStEO0FBQy9ELDBEQUFpQztBQUNqQyw0Q0FBNEk7QUFFNUksSUFBQSxzQkFBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRW5ELHNTQUFzUztBQUV6UixRQUFBLFlBQVksR0FBRyw2QkFBNkIsQ0FBQztBQUMxRCxNQUFNLGNBQWMsR0FBRyxHQUFHLEdBQUcsb0JBQVksQ0FBQztBQUUxQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUUzQyxvTEFBb0w7QUFDcEwsU0FBZ0Isa0JBQWtCLENBQUMsR0FBVztJQUMxQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLDBCQUFjLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNuQyxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsMEJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9FLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBTkQsZ0RBTUM7QUFFRCx3R0FBd0c7QUFDeEcsU0FBZ0IsUUFBUSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzVDLHdGQUF3RjtJQUN4RixJQUFJLElB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QVk7SUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLElBQUksTUFBb0IsQ0FBQztJQUN6QixJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWlCLENBQUM7SUFDOUMsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDMUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFDRCxPQUFPLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFaRCw0Q0FZQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLE1BQW9CO0lBQ3RELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRkQsc0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzb3J0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgZ2V0QnVmZmVySW50IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYml0c1wiO1xuaW1wb3J0IHsgc2V0RmxhZyB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vcmVxdWlyZS9jb21waWxlRmxhZ3NcIjtcbmltcG9ydCBqc1NoYTI1NiBmcm9tIFwianMtc2hhMjU2XCI7XG5pbXBvcnQgeyBSZW1vdGVDb25maWcsIFJlbW90ZUNvbmZpZ0Jhc2UsIEhvc3RlZENvbmZpZywgQmFja2JsYXplQ29uZmlnLCBGVUxMX1ZBTElEX1dJTkRPVywgRlVMTF9ST1VURSwgVkFSSUFCTEVfU0hBUkQgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJqcy1zaGEyNTZcIiwgXCJhbGxvd2NsaWVudFwiLCB0cnVlKTtcblxuLy8gUGFyc2luZyAvIG5vcm1hbGl6YXRpb24gb2YgUmVtb3RlQ29uZmlnIChzZWUgSUFyY2hpdmVzLnRzKS4gRXZlcnkgYnVja2V0IHN0b3JlcyBpdHMgb3duIGNvbmZpZ3VyYXRpb24gKGEgUmVtb3RlQ29uZmlnKSBpbnNpZGUgaXRzZWxmLCBhdCBST1VUSU5HX0ZJTEUuIFdyaXRpbmcgdGhhdCBmaWxlIGNyZWF0ZXMgdGhlIGJ1Y2tldCAvIHJlY29uZmlndXJlcyBpdCAoc2VlIHN0b3JhZ2VTZXJ2ZXJTdGF0ZS50cyk7IGNsaWVudHMgcmVjb25jaWxlIGl0IGJ5IHZlcnNpb24gKHNlZSBjcmVhdGVBcmNoaXZlcy50cykuXG5cbmV4cG9ydCBjb25zdCBST1VUSU5HX0ZJTEUgPSBcInN0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblwiO1xuY29uc3QgUk9VVElOR19TVUZGSVggPSBcIi9cIiArIFJPVVRJTkdfRklMRTtcblxuY29uc3QgUk9VVEVfUFJFQ0lTSU9OID0gMTAwMCAqIDEwMDAgKiAxMDAwO1xuXG4vKiogVGhlIHZhcmlhYmxlLXNoYXJkIHJvdXRlIG92ZXJyaWRlIGVtYmVkZGVkIGluIHRoZSBrZXkgKFwiPHNlbnRpbmVsPl88dmFsdWU+XCIsIHNlZSBWQVJJQUJMRV9TSEFSRCksIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBrZXkgaGFzIG5vIHNlbnRpbmVsIG9yIHRoZSBzZW50aW5lbCBoYXMgbm8gdmFsdWUgeWV0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVSb3V0ZShrZXk6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGluZGV4ID0ga2V5LmluZGV4T2YoVkFSSUFCTEVfU0hBUkQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IG1hdGNoID0gL15fKFxcZCsoPzpcXC5cXGQrKT8pLy5leGVjKGtleS5zbGljZShpbmRleCArIFZBUklBQkxFX1NIQVJELmxlbmd0aCkpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICttYXRjaFsxXTtcbn1cblxuLyoqIFdoZXJlIGEga2V5IHJvdXRlcyBpbiBbMCwgMSkuIEEgbWF0ZXJpYWxpemVkIHZhcmlhYmxlLXNoYXJkIHN1ZmZpeCBjb21wbGV0ZWx5IG92ZXJyaWRlcyB0aGUgaGFzaC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZShrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG92ZXJyaWRlID0gcGFyc2VWYXJpYWJsZVJvdXRlKGtleSk7XG4gICAgaWYgKG92ZXJyaWRlICE9PSB1bmRlZmluZWQpIHJldHVybiBvdmVycmlkZTtcbiAgICAvLyBQdXJlIEpTLCBzbyByb3V0aW5nIHdvcmtzIGNsaWVudHNpZGUgdG9vIChub2RlJ3MgY3J5cHRvIGhhc2hpbmcgaXMgdW5hdmFpbGFibGUgdGhlcmUpXG4gICAgbGV0IGhhc2ggPSBnZXRCdWZmZXJJbnQoQnVmZmVyLmZyb20oanNTaGEyNTYuc2hhMjU2LmFycmF5KGtleSkpKTtcbiAgICByZXR1cm4gaGFzaCAlIFJPVVRFX1BSRUNJU0lPTiAvIFJPVVRFX1BSRUNJU0lPTjtcbn1cblxuLy8gUm91dGUgcmFuZ2VzIGFyZSBbc3RhcnQsIGVuZCkgLSBpbmNsdXNpdmUgc3RhcnQsIGV4Y2x1c2l2ZSBlbmRcbmV4cG9ydCBmdW5jdGlvbiByb3V0ZUNvbnRhaW5zKHJvdXRlOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCB2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb3V0ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHJvdXRlWzBdIDw9IHZhbHVlICYmIHZhbHVlIDwgcm91dGVbMV07XG59XG5leHBvcnQgZnVuY3Rpb24gcm91dGVzT3ZlcmxhcChhOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBiOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgbGV0IFthU3RhcnQsIGFFbmRdID0gYSB8fCBGVUxMX1JPVVRFO1xuICAgIGxldCBbYlN0YXJ0LCBiRW5kXSA9IGIgfHwgRlVMTF9ST1VURTtcbiAgICByZXR1cm4gYVN0YXJ0IDwgYkVuZCAmJiBiU3RhcnQgPCBhRW5kO1xufVxuLyoqIFRoZSBvdmVybGFwIG9mIHR3byByb3V0ZSByYW5nZXMsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZXkgZG9uJ3Qgb3ZlcmxhcC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZUludGVyc2VjdGlvbihhOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBiOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkKTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IFthU3RhcnQsIGFFbmRdID0gYSB8fCBGVUxMX1JPVVRFO1xuICAgIGxldCBbYlN0YXJ0LCBiRW5kXSA9IGIgfHwgRlVMTF9ST1VURTtcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heChhU3RhcnQsIGJTdGFydCk7XG4gICAgbGV0IGVuZCA9IE1hdGgubWluKGFFbmQsIGJFbmQpO1xuICAgIGlmIChzdGFydCA+PSBlbmQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFtzdGFydCwgZW5kXTtcbn1cblxuLy8gQSBtaXNzaW5nIHZlcnNpb24gY291bnRzIGFzIC0xLCBzbyBhbnkgZXhwbGljaXRseSB2ZXJzaW9uZWQgY29uZmlnIGJlYXRzIGFuIHVudmVyc2lvbmVkIG9uZVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1ZlcnNpb24oY29uZmlnOiBSZW1vdGVDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiBjb25maWcudmVyc2lvbiA/PyAtMTtcbn1cblxuLyoqIFN0cmlwcyB0aGUgcm91dGluZy1maWxlIHN1ZmZpeCwgbGVhdmluZyB0aGUgYnVja2V0J3MgcHVibGljIGJhc2UgVVJMIChmaWxlIHBhdGhzIGFwcGVuZCB0byBpdCkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVja2V0QmFzZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwuZW5kc1dpdGgoUk9VVElOR19TVUZGSVgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBidWNrZXQgcm91dGluZyBVUkwgZW5kaW5nIHdpdGggJHtKU09OLnN0cmluZ2lmeShST1VUSU5HX1NVRkZJWCl9LCB3YXMgJHtKU09OLnN0cmluZ2lmeSh1cmwpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdXJsLnNsaWNlKDAsIC1ST1VUSU5HX1NVRkZJWC5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGaWxlVXJsKGJhc2VVcmw6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJhc2VVcmwgKyBcIi9cIiArIGZpbGVQYXRoLnNwbGl0KFwiL1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiL1wiKTtcbn1cblxuLy8gRXg6IGh0dHBzOi8vc3RvcmFnZTIudmlkZ3JpZHdlYi5jb206NDQ0NS9maWxlL2V4YW1wbGVhY2NvdW50L2V4YW1wbGVidWNrZXQvc3RvcmFnZS9zdG9yYWdlcm91dGluZy5qc29uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIb3N0ZWRVcmwodXJsOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyOyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9IHtcbiAgICBsZXQgYmFzZSA9IGdldEJ1Y2tldEJhc2VVcmwodXJsKTtcbiAgICBsZXQgdSA9IG5ldyBVUkwoYmFzZSk7XG4gICAgaWYgKHUucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdG9yYWdlIFVSTCBtdXN0IHVzZSBodHRwcywgZ290ICR7SlNPTi5zdHJpbmdpZnkodS5wcm90b2NvbCl9IGluICR7SlNPTi5zdHJpbmdpZnkodXJsKX1gKTtcbiAgICB9XG4gICAgbGV0IHBhcnRzID0gdS5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKHggPT4geCk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMyB8fCBwYXJ0c1swXSAhPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIGhvc3RlZCBidWNrZXQgVVJMIGxpa2UgaHR0cHM6Ly9ob3N0OnBvcnQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+JHtST1VUSU5HX1NVRkZJWH0sIHdhcyAke0pTT04uc3RyaW5naWZ5KHVybCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGFkZHJlc3M6IHUuaG9zdG5hbWUsIHBvcnQ6ICt1LnBvcnQgfHwgNDQzLCBhY2NvdW50OiBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMV0pLCBidWNrZXROYW1lOiBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMl0pIH07XG59XG5cbi8vIEV4OiBodHRwczovL2YwMDIuYmFja2JsYXplYjIuY29tL2ZpbGUvcXVlcnlzdWJ0ZXN0LWNvbS1wdWJsaWMtaW1tdXRhYmxlL3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmFja2JsYXplVXJsKHVybDogc3RyaW5nKTogeyBidWNrZXROYW1lOiBzdHJpbmcgfSB7XG4gICAgbGV0IGJhc2UgPSBnZXRCdWNrZXRCYXNlVXJsKHVybCk7XG4gICAgbGV0IHUgPSBuZXcgVVJMKGJhc2UpO1xuICAgIGxldCBwYXJ0cyA9IHUucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcih4ID0+IHgpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIgfHwgcGFydHNbMF0gIT09IFwiZmlsZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBiYWNrYmxhemUgYnVja2V0IFVSTCBsaWtlIGh0dHBzOi8vZjAwMi5iYWNrYmxhemViMi5jb20vZmlsZS88YnVja2V0TmFtZT4ke1JPVVRJTkdfU1VGRklYfSwgd2FzICR7SlNPTi5zdHJpbmdpZnkodXJsKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYnVja2V0TmFtZTogZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRzWzFdKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUhvc3RlZFVybFBvcnQodXJsOiBzdHJpbmcsIHBvcnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IHUgPSBuZXcgVVJMKHVybCk7XG4gICAgdS5wb3J0ID0gU3RyaW5nKHBvcnQpO1xuICAgIHJldHVybiB1LnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoc291cmNlOiBSZW1vdGVDb25maWdCYXNlKTogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnIHtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBsZXQgd2luZG93ID0gc291cmNlLnZhbGlkV2luZG93O1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod2luZG93KSB8fCB3aW5kb3cubGVuZ3RoICE9PSAyIHx8ICF3aW5kb3cuZXZlcnkoeCA9PiB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT2JqZWN0IHNvdXJjZSBjb25maWdzIG11c3Qgc3BlY2lmeSB2YWxpZFdpbmRvdyAoW3N0YXJ0TXMsIGVuZE1zXSBvZiB0aGUgd3JpdGUgdGltZXMgdGhlIHNvdXJjZSBpcyB2YWxpZCBmb3IpIC0gY29uZmlndXJhdGlvbiBjaGFuZ2VzIG11c3QgYmUgc2NoZWR1bGVkLCBub3QgZmxpcHBlZCBpbnN0YW50bHkuIFVzZSBGVUxMX1ZBTElEX1dJTkRPVyB3aGVuIHRoZSBzb3VyY2UgaXMgYWx3YXlzIHZhbGlkLiBXYXMgJHtKU09OLnN0cmluZ2lmeSh3aW5kb3cpfSBvbiAke0pTT04uc3RyaW5naWZ5KHNvdXJjZSkuc2xpY2UoMCwgNTAwKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm91dGUgPSBzb3VyY2Uucm91dGU7XG4gICAgICAgIGlmIChyb3V0ZSAhPT0gdW5kZWZpbmVkICYmICghQXJyYXkuaXNBcnJheShyb3V0ZSkgfHwgcm91dGUubGVuZ3RoICE9PSAyIHx8ICFyb3V0ZS5ldmVyeSh4ID0+IHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB8fCByb3V0ZVswXSA8IDAgfHwgcm91dGVbMV0gPiAxIHx8IHJvdXRlWzBdID49IHJvdXRlWzFdKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2Ugcm91dGUgbXVzdCBiZSBhIFtzdGFydCwgZW5kKSBmcmFjdGlvbiByYW5nZSB3aXRoaW4gWzAsIDFdIHdpdGggc3RhcnQgPCBlbmQsIHdhcyAke0pTT04uc3RyaW5naWZ5KHJvdXRlKX0gb24gJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpLnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZS5yZWFkZXJEaXNrTGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UucmVhZGVyRGlza0xpbWl0ICE9PSBcIm51bWJlclwiIHx8IHNvdXJjZS5yZWFkZXJEaXNrTGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZGVyRGlza0xpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBieXRlIGNvdW50LCB3YXMgJHtKU09OLnN0cmluZ2lmeShzb3VyY2UucmVhZGVyRGlza0xpbWl0KX0gb24gJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpLnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5ub0Z1bGxTeW5jKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWFkZXJEaXNrTGltaXQgcmVxdWlyZXMgbm9GdWxsU3luYzogYSBmdWxsIGNvcHkgY2Fubm90IGJlIGJvdW5kZWQsIG9ubHkgYSByZWFkIGNhY2hlIGNhbi4gT24gJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpLnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSBcInJlbW90ZVwiKSB7XG4gICAgICAgICAgICAvLyBUaHJvd3MgaWYgdGhlIFVSTCBpcyBtYWxmb3JtZWQsIHNvIGJhZCBjb25maWdzIGFyZSByZWplY3RlZCBiZWZvcmUgdGhleSdyZSBzdG9yZWRcbiAgICAgICAgICAgIHBhcnNlSG9zdGVkVXJsKHNvdXJjZS51cmwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuICAgIGxldCBob3N0bmFtZSA9IG5ldyBVUkwoc291cmNlKS5ob3N0bmFtZTtcbiAgICBpZiAoaG9zdG5hbWUuZW5kc1dpdGgoXCIuYmFja2JsYXplYjIuY29tXCIpKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlcyB0aGUgVVJMICh0aHJvd3Mgb24gbWFsZm9ybWVkKSBiZWZvcmUgaXQncyBzdG9yZWQ7IHRoZSBidWNrZXQgbmFtZSBpcyByZWFkIGJhY2sgb3V0IG9mIHRoZSBVUkwgYXQgdXNlIHNpdGVzLCBuZXZlciBzdG9yZWQgb24gdGhlIGNvbmZpZy5cbiAgICAgICAgcGFyc2VCYWNrYmxhemVVcmwoc291cmNlKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiYWNrYmxhemVcIiwgdXJsOiBzb3VyY2UsIHZhbGlkV2luZG93OiBGVUxMX1ZBTElEX1dJTkRPVywgcHVibGljOiB0cnVlIH07XG4gICAgfVxuICAgIHBhcnNlSG9zdGVkVXJsKHNvdXJjZSk7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJyZW1vdGVcIiwgdXJsOiBzb3VyY2UsIHZhbGlkV2luZG93OiBGVUxMX1ZBTElEX1dJTkRPVywgcHVibGljOiB0cnVlIH07XG59XG5cbi8qKiBIb3cgZmFyIHVwIGZyb20gMCB0aGUgc291cmNlcycgcm91dGVzIHJlYWNoIHdpdGhvdXQgYSBnYXAgKDEgbWVhbnMgdGhlIHdob2xlIGtleSBzcGFjZSkuICovXG5mdW5jdGlvbiBnZXRSb3V0ZUNvdmVyYWdlKHNvdXJjZXM6IChIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpW10pOiBudW1iZXIge1xuICAgIGxldCByb3V0ZXMgPSBzb3VyY2VzLm1hcCh4ID0+IHgucm91dGUgfHwgRlVMTF9ST1VURSk7XG4gICAgc29ydChyb3V0ZXMsIHggPT4geFswXSk7XG4gICAgbGV0IGNvdmVyZWQgPSAwO1xuICAgIGZvciAobGV0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICBpZiAocm91dGVbMF0gPiBjb3ZlcmVkKSBicmVhaztcbiAgICAgICAgY292ZXJlZCA9IE1hdGgubWF4KGNvdmVyZWQsIHJvdXRlWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvdmVyZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZW1vdGVDb25maWcoY29uZmlnOiBSZW1vdGVDb25maWcgfCBSZW1vdGVDb25maWdCYXNlKTogUmVtb3RlQ29uZmlnIHtcbiAgICBsZXQgcmVzdWx0OiBSZW1vdGVDb25maWc7XG4gICAgaWYgKHR5cGVvZiBjb25maWcgIT09IFwic3RyaW5nXCIgJiYgXCJzb3VyY2VzXCIgaW4gY29uZmlnKSB7XG4gICAgICAgIHJlc3VsdCA9IHsgdmVyc2lvbjogY29uZmlnLnZlcnNpb24sIHNvdXJjZXM6IGNvbmZpZy5zb3VyY2VzLm1hcChub3JtYWxpemVTb3VyY2UpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0geyBzb3VyY2VzOiBbbm9ybWFsaXplU291cmNlKGNvbmZpZyldIH07XG4gICAgfVxuICAgIC8vIE1peGVkIGltbXV0YWJpbGl0eSBtYWtlcyBubyBzZW5zZSBBTU9ORyBzb3VyY2VzIHZhbGlkIGF0IHRoZSBzYW1lIHRpbWU6IGEgbXV0YWJsZSBzb3VyY2Ugd291bGQgYWNjZXB0IG92ZXJ3cml0ZXMgdGhhdCBpdHMgaW1tdXRhYmxlIHBlZXJzIHJlZnVzZSB0byBzeW5jaHJvbml6ZSwgZm9ya2luZyB0aGVpciBjb250ZW50cy4gU291cmNlcyBhcmUgZ3JvdXBlZCBieSB0cmFuc2l0aXZlbHkgb3ZlcmxhcHBpbmcgdmFsaWQgd2luZG93cyAoYWJzb3JiIGV2ZXJ5dGhpbmcgb3ZlcmxhcHBpbmcgdGhlIGdyb3VwLCBleHRlbmQgdGhlIGdyb3VwJ3MgZW5kLCByZXBlYXQpIC0gYSBzb2Z0IGNoZWNrIHRoYXQgaXMgY29ycmVjdCBhcyBsb25nIGFzIHdpbmRvd3MgaGF2ZSBjbGVhbiBicmVha3MgKGEgZ3JvdXAgZW5kcyBleGFjdGx5IHdoZXJlIHRoZSBuZXh0IGJlZ2lucykuXG4gICAgbGV0IHNvdXJjZXMgPSByZXN1bHQuc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKTtcbiAgICBsZXQgc29ydGVkID0gWy4uLnNvdXJjZXNdO1xuICAgIHNvcnQoc29ydGVkLCB4ID0+IHgudmFsaWRXaW5kb3dbMF0pO1xuICAgIGxldCBncm91cDogdHlwZW9mIHNvdXJjZXMgPSBbXTtcbiAgICBsZXQgZ3JvdXBFbmQgPSAwO1xuICAgIGZ1bmN0aW9uIGNoZWNrR3JvdXAoKSB7XG4gICAgICAgIGxldCBpbW11dGFibGVDb3VudCA9IGdyb3VwLmZpbHRlcih4ID0+IHguaW1tdXRhYmxlKS5sZW5ndGg7XG4gICAgICAgIGlmIChpbW11dGFibGVDb3VudCAmJiBpbW11dGFibGVDb3VudCAhPT0gZ3JvdXAubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZXMgd2l0aCBvdmVybGFwcGluZyB2YWxpZCB3aW5kb3dzIG11c3QgYWdyZWUgb24gaW1tdXRhYmlsaXR5OiAke2ltbXV0YWJsZUNvdW50fSBvZiAke2dyb3VwLmxlbmd0aH0gYXJlIGltbXV0YWJsZS4gU291cmNlczogJHtKU09OLnN0cmluZ2lmeShncm91cC5tYXAoeCA9PiAoeyB1cmw6IHgudXJsLCB2YWxpZFdpbmRvdzogeC52YWxpZFdpbmRvdywgaW1tdXRhYmxlOiAhIXguaW1tdXRhYmxlIH0pKSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIHNvdXJjZXMgdmFsaWQgYXQgYW55IGluc3RhbnQgbXVzdCBjb3ZlciB0aGUgd2hvbGUga2V5IHNwYWNlLCBvciBrZXlzIHJvdXRpbmcgaW50byBhIGdhcCBjb3VsZCBuZXZlciBiZSByZWFkXG4gICAgICAgIGxldCBjb3ZlcmVkID0gZ2V0Um91dGVDb3ZlcmFnZShncm91cCk7XG4gICAgICAgIGlmIChjb3ZlcmVkIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2VzIHdpdGggb3ZlcmxhcHBpbmcgdmFsaWQgd2luZG93cyBtdXN0IGNvdmVyIHRoZSBmdWxsIHJvdXRlIHNwYWNlIFswLCAxKTsgY292ZXJhZ2Ugc3RvcHMgYXQgJHtjb3ZlcmVkfS4gU291cmNlczogJHtKU09OLnN0cmluZ2lmeShncm91cC5tYXAoeCA9PiAoeyB1cmw6IHgudXJsLCB2YWxpZFdpbmRvdzogeC52YWxpZFdpbmRvdywgcm91dGU6IHgucm91dGUgfHwgRlVMTF9ST1VURSB9KSkpfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV2ZXJ5IGJ1Y2tldCBtdXN0IEFMU08gY292ZXIgdGhlIGZ1bGwgcm91dGUgc3BhY2UgYWNyb3NzIGl0cyBvd24gZW50cmllcywgYmVjYXVzZSBhbGwgb2YgYSBidWNrZXQncyBlbnRyaWVzIHNoYXJlIG9uZSBkaXNrLiBBIGJ1Y2tldCB0aGF0IG9ubHkgZXZlciBzeW5jaHJvbml6ZXMgcGFydCBvZiB0aGUga2V5IHNwYWNlIG5ldmVyIGxlYXJucyBhYm91dCBkZWxldGlvbnMgaW4gdGhlIHJlc3Qgb2YgaXQgLSBhbmQgdG9tYnN0b25lcyBleHBpcmUsIHNvIGZpbGVzIGl0IHN0aWxsIGhvbGRzIGZyb20gYSByb3V0ZSBpdCBubyBsb25nZXIgc2VydmVzIGV2ZW50dWFsbHkgbG9vayBsaWtlIGxpdmUgZmlsZXMgYWdhaW4sIGFuZCBnZXQgcmVzdXJyZWN0ZWQgaW50byB0aGUgY2hhaW4gYnkgaXRzIG5leHQgc2Nhbi4gQW4gZW50cnkgd2l0aCBubyByb3V0ZSAoaW1wbGljaXRseSB0aGUgZnVsbCBzcGFjZSkgc2F0aXNmaWVzIHRoaXMgb24gaXRzIG93biwgd2hpY2ggaXMgd2h5IHRoZSB1c3VhbCBjb25maWd1cmF0aW9uIGxpc3RzIGVhY2ggYnVja2V0IG9uY2UgcGVyIHNoYXJkIEFORCBvbmNlIHVuc2hhcmRlZC5cbiAgICAgICAgbGV0IGJ5VXJsID0gbmV3IE1hcDxzdHJpbmcsIHR5cGVvZiBncm91cD4oKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIGdyb3VwKSB7XG4gICAgICAgICAgICBsZXQgZW50cmllcyA9IGJ5VXJsLmdldChzb3VyY2UudXJsKTtcbiAgICAgICAgICAgIGlmICghZW50cmllcykge1xuICAgICAgICAgICAgICAgIGVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBieVVybC5zZXQoc291cmNlLnVybCwgZW50cmllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBbdXJsLCBlbnRyaWVzXSBvZiBieVVybCkge1xuICAgICAgICAgICAgbGV0IHVybENvdmVyZWQgPSBnZXRSb3V0ZUNvdmVyYWdlKGVudHJpZXMpO1xuICAgICAgICAgICAgaWYgKHVybENvdmVyZWQgPCAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFdmVyeSBidWNrZXQgbXVzdCBjb3ZlciB0aGUgZnVsbCByb3V0ZSBzcGFjZSBbMCwgMSkgYWNyb3NzIGl0cyBvd24gZW50cmllcyB3aXRoIG92ZXJsYXBwaW5nIHZhbGlkIHdpbmRvd3MsIGJ1dCAke3VybH0gb25seSBjb3ZlcnMgdXAgdG8gJHt1cmxDb3ZlcmVkfSAoaXRzIHJvdXRlczogJHtKU09OLnN0cmluZ2lmeShlbnRyaWVzLm1hcCh4ID0+IHgucm91dGUgfHwgRlVMTF9ST1VURSkpfSkuIEFkZCBhbiBlbnRyeSBmb3IgaXQgd2l0aCBubyByb3V0ZSAob3IgZW50cmllcyB3aG9zZSByb3V0ZXMgc3BhbiB0aGUgcmVzdCksIGFsb25nc2lkZSBpdHMgc2hhcmRlZCBlbnRyaWVzLiBUaGlzIGlzIGVuZm9yY2VkIGJlY2F1c2UgYSBidWNrZXQncyBlbnRyaWVzIGFsbCBzaGFyZSBvbmUgZGlzazogaWYgaXQgb25seSBldmVyIHN5bmNocm9uaXplcyBwYXJ0IG9mIHRoZSBrZXkgc3BhY2UsIGl0IG5ldmVyIHNlZXMgZGVsZXRpb25zIGluIHRoZSByZXN0LCBhbmQgb25jZSB0aG9zZSB0b21ic3RvbmVzIGV4cGlyZSB0aGUgZmlsZXMgaXQgc3RpbGwgaG9sZHMgYXJlIHJlc3VycmVjdGVkIGludG8gdGhlIGNoYWluIGJ5IGl0cyBuZXh0IHNjYW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvcnRlZCkge1xuICAgICAgICBpZiAoZ3JvdXAubGVuZ3RoICYmIHNvdXJjZS52YWxpZFdpbmRvd1swXSA+PSBncm91cEVuZCkge1xuICAgICAgICAgICAgY2hlY2tHcm91cCgpO1xuICAgICAgICAgICAgZ3JvdXAgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBncm91cC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIGdyb3VwRW5kID0gTWF0aC5tYXgoZ3JvdXBFbmQsIHNvdXJjZS52YWxpZFdpbmRvd1sxXSk7XG4gICAgfVxuICAgIGNoZWNrR3JvdXAoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSb3V0aW5nRGF0YShkYXRhOiBCdWZmZXIpOiBSZW1vdGVDb25maWcge1xuICAgIGxldCB0ZXh0ID0gZGF0YS50b1N0cmluZygpO1xuICAgIGxldCBwYXJzZWQ6IFJlbW90ZUNvbmZpZztcbiAgICB0cnkge1xuICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpIGFzIFJlbW90ZUNvbmZpZztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGluZyBjb25maWcgaXMgbm90IHZhbGlkIEpTT04gKCR7U3RyaW5nKGUpfSkuIERhdGE6ICR7dGV4dC5zbGljZSgwLCA1MDApfWApO1xuICAgIH1cbiAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSBcIm9iamVjdFwiIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZC5zb3VyY2VzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdXRpbmcgY29uZmlnIG11c3QgYmUgeyB2ZXJzaW9uPywgc291cmNlczogWy4uLl0gfSwgd2FzICR7dGV4dC5zbGljZSgwLCA1MDApfWApO1xuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplUmVtb3RlQ29uZmlnKHBhcnNlZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSZW1vdGVDb25maWcoY29uZmlnOiBSZW1vdGVDb25maWcpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShjb25maWcsIHVuZGVmaW5lZCwgNCkpO1xufVxuIl19
230
- /* _JS_SOURCE_HASH = "465e159b96fc76fa35d5368236bbd4a6b99ddce91d14ed40e844e898a375acff"; */
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVtb3RlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUFnRDtBQUNoRCxtREFBd0Q7QUFDeEQsdUVBQStEO0FBQy9ELDBEQUFpQztBQUNqQyw0Q0FBaUw7QUFFakwsSUFBQSxzQkFBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRW5ELHNTQUFzUztBQUV6UixRQUFBLFlBQVksR0FBRyw2QkFBNkIsQ0FBQztBQUMxRCxNQUFNLGNBQWMsR0FBRyxHQUFHLEdBQUcsb0JBQVksQ0FBQztBQUUxQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUUzQyxvTEFBb0w7QUFDcEwsU0FBZ0Isa0JBQWtCLENBQUMsR0FBVztJQUMxQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLDBCQUFjLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNuQyxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsMEJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9FLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBTkQsZ0RBTUM7QUFFRCx3R0FBd0c7QUFDeEcsU0FBZ0IsUUFBUSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzVDLHdGQUF3RjtJQUN4RixJQUFJLElB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QUM7SUFDdEcsQ0FBQztJQUNELE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQVpELDRDQVlDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsTUFBb0I7SUFDdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFGRCxzREFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNvcnQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBnZXRCdWZmZXJJbnQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iaXRzXCI7XG5pbXBvcnQgeyBzZXRGbGFnIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL2NvbXBpbGVGbGFnc1wiO1xuaW1wb3J0IGpzU2hhMjU2IGZyb20gXCJqcy1zaGEyNTZcIjtcbmltcG9ydCB7IFJlbW90ZUNvbmZpZywgUmVtb3RlQ29uZmlnQmFzZSwgSG9zdGVkQ29uZmlnLCBCYWNrYmxhemVDb25maWcsIEFyY2hpdmVGaWxlSW5mbywgQ2hhbmdlc0FmdGVyQ29uZmlnLCBGVUxMX1ZBTElEX1dJTkRPVywgRlVMTF9ST1VURSwgVkFSSUFCTEVfU0hBUkQgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJqcy1zaGEyNTZcIiwgXCJhbGxvd2NsaWVudFwiLCB0cnVlKTtcblxuLy8gUGFyc2luZyAvIG5vcm1hbGl6YXRpb24gb2YgUmVtb3RlQ29uZmlnIChzZWUgSUFyY2hpdmVzLnRzKS4gRXZlcnkgYnVja2V0IHN0b3JlcyBpdHMgb3duIGNvbmZpZ3VyYXRpb24gKGEgUmVtb3RlQ29uZmlnKSBpbnNpZGUgaXRzZWxmLCBhdCBST1VUSU5HX0ZJTEUuIFdyaXRpbmcgdGhhdCBmaWxlIGNyZWF0ZXMgdGhlIGJ1Y2tldCAvIHJlY29uZmlndXJlcyBpdCAoc2VlIHN0b3JhZ2VTZXJ2ZXJTdGF0ZS50cyk7IGNsaWVudHMgcmVjb25jaWxlIGl0IGJ5IHZlcnNpb24gKHNlZSBjcmVhdGVBcmNoaXZlcy50cykuXG5cbmV4cG9ydCBjb25zdCBST1VUSU5HX0ZJTEUgPSBcInN0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblwiO1xuY29uc3QgUk9VVElOR19TVUZGSVggPSBcIi9cIiArIFJPVVRJTkdfRklMRTtcblxuY29uc3QgUk9VVEVfUFJFQ0lTSU9OID0gMTAwMCAqIDEwMDAgKiAxMDAwO1xuXG4vKiogVGhlIHZhcmlhYmxlLXNoYXJkIHJvdXRlIG92ZXJyaWRlIGVtYmVkZGVkIGluIHRoZSBrZXkgKFwiPHNlbnRpbmVsPl88dmFsdWU+XCIsIHNlZSBWQVJJQUJMRV9TSEFSRCksIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBrZXkgaGFzIG5vIHNlbnRpbmVsIG9yIHRoZSBzZW50aW5lbCBoYXMgbm8gdmFsdWUgeWV0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVSb3V0ZShrZXk6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGluZGV4ID0ga2V5LmluZGV4T2YoVkFSSUFCTEVfU0hBUkQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IG1hdGNoID0gL15fKFxcZCsoPzpcXC5cXGQrKT8pLy5leGVjKGtleS5zbGljZShpbmRleCArIFZBUklBQkxFX1NIQVJELmxlbmd0aCkpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICttYXRjaFsxXTtcbn1cblxuLyoqIFdoZXJlIGEga2V5IHJvdXRlcyBpbiBbMCwgMSkuIEEgbWF0ZXJpYWxpemVkIHZhcmlhYmxlLXNoYXJkIHN1ZmZpeCBjb21wbGV0ZWx5IG92ZXJyaWRlcyB0aGUgaGFzaC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZShrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG92ZXJyaWRlID0gcGFyc2VWYXJpYWJsZVJvdXRlKGtleSk7XG4gICAgaWYgKG92ZXJyaWRlICE9PSB1bmRlZmluZWQpIHJldHVybiBvdmVycmlkZTtcbiAgICAvLyBQdXJlIEpTLCBzbyByb3V0aW5nIHdvcmtzIGNsaWVudHNpZGUgdG9vIChub2RlJ3MgY3J5cHRvIGhhc2hpbmcgaXMgdW5hdmFpbGFibGUgdGhlcmUpXG4gICAgbGV0IGhhc2ggPSBnZXRCdWZmZXJJbnQoQnVmZmVyLmZyb20oanNTaGEyNTYuc2hhMjU2LmFycmF5KGtleSkpKTtcbiAgICByZXR1cm4gaGFzaCAlIFJPVVRFX1BSRUNJU0lPTiAvIFJPVVRFX1BSRUNJU0lPTjtcbn1cblxuLyoqIFRoZSBpbi1tZW1vcnkgZ2V0Q2hhbmdlc0FmdGVyMiBlbXVsYXRpb24sIGZvciBiYWNrZW5kcyB3aXRob3V0IGEgbmF0aXZlIGNoYW5nZSBmZWVkOiBhIGZ1bGwgbGlzdGluZyBmaWx0ZXJlZCBkb3duIHRvIGZpbGVzIHdyaXR0ZW4gYWZ0ZXIgY29uZmlnLnRpbWUgd2hvc2Uga2V5cyByb3V0ZSBpbnRvIGNvbmZpZy5yb3V0ZXMuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQ2hhbmdlcyhmaWxlczogQXJjaGl2ZUZpbGVJbmZvW10sIGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogQXJjaGl2ZUZpbGVJbmZvW10ge1xuICAgIHJldHVybiBmaWxlcy5maWx0ZXIoZmlsZSA9PiB7XG4gICAgICAgIGlmIChmaWxlLmNyZWF0ZVRpbWUgPD0gY29uZmlnLnRpbWUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IHJvdXRlcyA9IGNvbmZpZy5yb3V0ZXM7XG4gICAgICAgIGlmIChyb3V0ZXMgJiYgIXJvdXRlcy5zb21lKHJvdXRlID0+IHJvdXRlQ29udGFpbnMocm91dGUsIGdldFJvdXRlKGZpbGUucGF0aCkpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cblxuLy8gUm91dGUgcmFuZ2VzIGFyZSBbc3RhcnQsIGVuZCkgLSBpbmNsdXNpdmUgc3RhcnQsIGV4Y2x1c2l2ZSBlbmRcbmV4cG9ydCBmdW5jdGlvbiByb3V0ZUNvbnRhaW5zKHJvdXRlOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCB2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb3V0ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHJvdXRlWzBdIDw9IHZhbHVlICYmIHZhbHVlIDwgcm91dGVbMV07XG59XG5leHBvcnQgZnVuY3Rpb24gcm91dGVzT3ZlcmxhcChhOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBiOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgbGV0IFthU3RhcnQsIGFFbmRdID0gYSB8fCBGVUxMX1JPVVRFO1xuICAgIGxldCBbYlN0YXJ0LCBiRW5kXSA9IGIgfHwgRlVMTF9ST1VURTtcbiAgICByZXR1cm4gYVN0YXJ0IDwgYkVuZCAmJiBiU3RhcnQgPCBhRW5kO1xufVxuLyoqIFRoZSBvdmVybGFwIG9mIHR3byByb3V0ZSByYW5nZXMsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZXkgZG9uJ3Qgb3ZlcmxhcC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZUludGVyc2VjdGlvbihhOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBiOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkKTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IFthU3RhcnQsIGFFbmRdID0gYSB8fCBGVUxMX1JPVVRFO1xuICAgIGxldCBbYlN0YXJ0LCBiRW5kXSA9IGIgfHwgRlVMTF9ST1VURTtcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heChhU3RhcnQsIGJTdGFydCk7XG4gICAgbGV0IGVuZCA9IE1hdGgubWluKGFFbmQsIGJFbmQpO1xuICAgIGlmIChzdGFydCA+PSBlbmQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFtzdGFydCwgZW5kXTtcbn1cblxuLy8gQSBtaXNzaW5nIHZlcnNpb24gY291bnRzIGFzIC0xLCBzbyBhbnkgZXhwbGljaXRseSB2ZXJzaW9uZWQgY29uZmlnIGJlYXRzIGFuIHVudmVyc2lvbmVkIG9uZVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1ZlcnNpb24oY29uZmlnOiBSZW1vdGVDb25maWcpOiBudW1iZXIge1xuICAgIHJldHVybiBjb25maWcudmVyc2lvbiA/PyAtMTtcbn1cblxuLyoqIFN0cmlwcyB0aGUgcm91dGluZy1maWxlIHN1ZmZpeCwgbGVhdmluZyB0aGUgYnVja2V0J3MgcHVibGljIGJhc2UgVVJMIChmaWxlIHBhdGhzIGFwcGVuZCB0byBpdCkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVja2V0QmFzZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwuZW5kc1dpdGgoUk9VVElOR19TVUZGSVgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBidWNrZXQgcm91dGluZyBVUkwgZW5kaW5nIHdpdGggJHtKU09OLnN0cmluZ2lmeShST1VUSU5HX1NVRkZJWCl9LCB3YXMgJHtKU09OLnN0cmluZ2lmeSh1cmwpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdXJsLnNsaWNlKDAsIC1ST1VUSU5HX1NVRkZJWC5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGaWxlVXJsKGJhc2VVcmw6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJhc2VVcmwgKyBcIi9cIiArIGZpbGVQYXRoLnNwbGl0KFwiL1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiL1wiKTtcbn1cblxuLy8gRXg6IGh0dHBzOi8vc3RvcmFnZTIudmlkZ3JpZHdlYi5jb206NDQ0NS9maWxlL2V4YW1wbGVhY2NvdW50L2V4YW1wbGVidWNrZXQvc3RvcmFnZS9zdG9yYWdlcm91dGluZy5qc29uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIb3N0ZWRVcmwodXJsOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyOyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9IHtcbiAgICBsZXQgYmFzZSA9IGdldEJ1Y2tldEJhc2VVcmwodXJsKTtcbiAgICBsZXQgdSA9IG5ldyBVUkwoYmFzZSk7XG4gICAgaWYgKHUucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdG9yYWdlIFVSTCBtdXN0IHVzZSBodHRwcywgZ290ICR7SlNPTi5zdHJpbmdpZnkodS5wcm90b2NvbCl9IGluICR7SlNPTi5zdHJpbmdpZnkodXJsKX1gKTtcbiAgICB9XG4gICAgbGV0IHBhcnRzID0gdS5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKHggPT4geCk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMyB8fCBwYXJ0c1swXSAhPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIGhvc3RlZCBidWNrZXQgVVJMIGxpa2UgaHR0cHM6Ly9ob3N0OnBvcnQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+JHtST1VUSU5HX1NVRkZJWH0sIHdhcyAke0pTT04uc3RyaW5naWZ5KHVybCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGFkZHJlc3M6IHUuaG9zdG5hbWUsIHBvcnQ6ICt1LnBvcnQgfHwgNDQzLCBhY2NvdW50OiBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMV0pLCBidWNrZXROYW1lOiBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMl0pIH07XG59XG5cbi8vIEV4OiBodHRwczovL2YwMDIuYmFja2JsYXplYjIuY29tL2ZpbGUvcXVlcnlzdWJ0ZXN0LWNvbS1wdWJsaWMtaW1tdXRhYmxlL3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmFja2JsYXplVXJsKHVybDogc3RyaW5nKTogeyBidWNrZXROYW1lOiBzdHJpbmcgfSB7XG4gICAgbGV0IGJhc2UgPSBnZXRCdWNrZXRCYXNlVXJsKHVybCk7XG4gICAgbGV0IHUgPSBuZXcgVVJMKGJhc2UpO1xuICAgIGxldCBwYXJ0cyA9IHUucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcih4ID0+IHgpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIgfHwgcGFydHNbMF0gIT09IFwiZmlsZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBiYWNrYmxhemUgYnVja2V0IFVSTCBsaWtlIGh0dHBzOi8vZjAwMi5iYWNrYmxhemViMi5jb20vZmlsZS88YnVja2V0TmFtZT4ke1JPVVRJTkdfU1VGRklYfSwgd2FzICR7SlNPTi5zdHJpbmdpZnkodXJsKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYnVja2V0TmFtZTogZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRzWzFdKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUhvc3RlZFVybFBvcnQodXJsOiBzdHJpbmcsIHBvcnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IHUgPSBuZXcgVVJMKHVybCk7XG4gICAgdS5wb3J0ID0gU3RyaW5nKHBvcnQpO1xuICAgIHJldHVybiB1LnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoc291cmNlOiBSZW1vdGVDb25maWdCYXNlKTogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnIHtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBsZXQgd2luZG93ID0gc291cmNlLnZhbGlkV2luZG93O1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod2luZG93KSB8fCB3aW5kb3cubGVuZ3RoICE9PSAyIHx8ICF3aW5kb3cuZXZlcnkoeCA9PiB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT2JqZWN0IHNvdXJjZSBjb25maWdzIG11c3Qgc3BlY2lmeSB2YWxpZFdpbmRvdyAoW3N0YXJ0TXMsIGVuZE1zXSBvZiB0aGUgd3JpdGUgdGltZXMgdGhlIHNvdXJjZSBpcyB2YWxpZCBmb3IpIC0gY29uZmlndXJhdGlvbiBjaGFuZ2VzIG11c3QgYmUgc2NoZWR1bGVkLCBub3QgZmxpcHBlZCBpbnN0YW50bHkuIFVzZSBGVUxMX1ZBTElEX1dJTkRPVyB3aGVuIHRoZSBzb3VyY2UgaXMgYWx3YXlzIHZhbGlkLiBXYXMgJHtKU09OLnN0cmluZ2lmeSh3aW5kb3cpfSBvbiAke0pTT04uc3RyaW5naWZ5KHNvdXJjZSkuc2xpY2UoMCwgNTAwKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm91dGUgPSBzb3VyY2Uucm91dGU7XG4gICAgICAgIGlmIChyb3V0ZSAhPT0gdW5kZWZpbmVkICYmICghQXJyYXkuaXNBcnJheShyb3V0ZSkgfHwgcm91dGUubGVuZ3RoICE9PSAyIHx8ICFyb3V0ZS5ldmVyeSh4ID0+IHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB8fCByb3V0ZVswXSA8IDAgfHwgcm91dGVbMV0gPiAxIHx8IHJvdXRlWzBdID49IHJvdXRlWzFdKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2Ugcm91dGUgbXVzdCBiZSBhIFtzdGFydCwgZW5kKSBmcmFjdGlvbiByYW5nZSB3aXRoaW4gWzAsIDFdIHdpdGggc3RhcnQgPCBlbmQsIHdhcyAke0pTT04uc3RyaW5naWZ5KHJvdXRlKX0gb24gJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpLnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZS5yZWFkZXJEaXNrTGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UucmVhZGVyRGlza0xpbWl0ICE9PSBcIm51bWJlclwiIHx8IHNvdXJjZS5yZWFkZXJEaXNrTGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZGVyRGlza0xpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBieXRlIGNvdW50LCB3YXMgJHtKU09OLnN0cmluZ2lmeShzb3VyY2UucmVhZGVyRGlza0xpbWl0KX0gb24gJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpLnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5ub0Z1bGxTeW5jKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWFkZXJEaXNrTGltaXQgcmVxdWlyZXMgbm9GdWxsU3luYzogYSBmdWxsIGNvcHkgY2Fubm90IGJlIGJvdW5kZWQsIG9ubHkgYSByZWFkIGNhY2hlIGNhbi4gT24gJHtKU09OLnN0cmluZ2lmeShzb3VyY2UpLnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSBcInJlbW90ZVwiKSB7XG4gICAgICAgICAgICAvLyBUaHJvd3MgaWYgdGhlIFVSTCBpcyBtYWxmb3JtZWQsIHNvIGJhZCBjb25maWdzIGFyZSByZWplY3RlZCBiZWZvcmUgdGhleSdyZSBzdG9yZWRcbiAgICAgICAgICAgIHBhcnNlSG9zdGVkVXJsKHNvdXJjZS51cmwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuICAgIGxldCBob3N0bmFtZSA9IG5ldyBVUkwoc291cmNlKS5ob3N0bmFtZTtcbiAgICBpZiAoaG9zdG5hbWUuZW5kc1dpdGgoXCIuYmFja2JsYXplYjIuY29tXCIpKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlcyB0aGUgVVJMICh0aHJvd3Mgb24gbWFsZm9ybWVkKSBiZWZvcmUgaXQncyBzdG9yZWQ7IHRoZSBidWNrZXQgbmFtZSBpcyByZWFkIGJhY2sgb3V0IG9mIHRoZSBVUkwgYXQgdXNlIHNpdGVzLCBuZXZlciBzdG9yZWQgb24gdGhlIGNvbmZpZy5cbiAgICAgICAgcGFyc2VCYWNrYmxhemVVcmwoc291cmNlKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiYWNrYmxhemVcIiwgdXJsOiBzb3VyY2UsIHZhbGlkV2luZG93OiBGVUxMX1ZBTElEX1dJTkRPVywgcHVibGljOiB0cnVlIH07XG4gICAgfVxuICAgIHBhcnNlSG9zdGVkVXJsKHNvdXJjZSk7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJyZW1vdGVcIiwgdXJsOiBzb3VyY2UsIHZhbGlkV2luZG93OiBGVUxMX1ZBTElEX1dJTkRPVywgcHVibGljOiB0cnVlIH07XG59XG5cbi8qKiBIb3cgZmFyIHVwIGZyb20gMCB0aGUgc291cmNlcycgcm91dGVzIHJlYWNoIHdpdGhvdXQgYSBnYXAgKDEgbWVhbnMgdGhlIHdob2xlIGtleSBzcGFjZSkuICovXG5mdW5jdGlvbiBnZXRSb3V0ZUNvdmVyYWdlKHNvdXJjZXM6IChIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpW10pOiBudW1iZXIge1xuICAgIGxldCByb3V0ZXMgPSBzb3VyY2VzLm1hcCh4ID0+IHgucm91dGUgfHwgRlVMTF9ST1VURSk7XG4gICAgc29ydChyb3V0ZXMsIHggPT4geFswXSk7XG4gICAgbGV0IGNvdmVyZWQgPSAwO1xuICAgIGZvciAobGV0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICBpZiAocm91dGVbMF0gPiBjb3ZlcmVkKSBicmVhaztcbiAgICAgICAgY292ZXJlZCA9IE1hdGgubWF4KGNvdmVyZWQsIHJvdXRlWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvdmVyZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZW1vdGVDb25maWcoY29uZmlnOiBSZW1vdGVDb25maWcgfCBSZW1vdGVDb25maWdCYXNlKTogUmVtb3RlQ29uZmlnIHtcbiAgICBsZXQgcmVzdWx0OiBSZW1vdGVDb25maWc7XG4gICAgaWYgKHR5cGVvZiBjb25maWcgIT09IFwic3RyaW5nXCIgJiYgXCJzb3VyY2VzXCIgaW4gY29uZmlnKSB7XG4gICAgICAgIHJlc3VsdCA9IHsgdmVyc2lvbjogY29uZmlnLnZlcnNpb24sIHNvdXJjZXM6IGNvbmZpZy5zb3VyY2VzLm1hcChub3JtYWxpemVTb3VyY2UpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0geyBzb3VyY2VzOiBbbm9ybWFsaXplU291cmNlKGNvbmZpZyldIH07XG4gICAgfVxuICAgIC8vIE1peGVkIGltbXV0YWJpbGl0eSBtYWtlcyBubyBzZW5zZSBBTU9ORyBzb3VyY2VzIHZhbGlkIGF0IHRoZSBzYW1lIHRpbWU6IGEgbXV0YWJsZSBzb3VyY2Ugd291bGQgYWNjZXB0IG92ZXJ3cml0ZXMgdGhhdCBpdHMgaW1tdXRhYmxlIHBlZXJzIHJlZnVzZSB0byBzeW5jaHJvbml6ZSwgZm9ya2luZyB0aGVpciBjb250ZW50cy4gU291cmNlcyBhcmUgZ3JvdXBlZCBieSB0cmFuc2l0aXZlbHkgb3ZlcmxhcHBpbmcgdmFsaWQgd2luZG93cyAoYWJzb3JiIGV2ZXJ5dGhpbmcgb3ZlcmxhcHBpbmcgdGhlIGdyb3VwLCBleHRlbmQgdGhlIGdyb3VwJ3MgZW5kLCByZXBlYXQpIC0gYSBzb2Z0IGNoZWNrIHRoYXQgaXMgY29ycmVjdCBhcyBsb25nIGFzIHdpbmRvd3MgaGF2ZSBjbGVhbiBicmVha3MgKGEgZ3JvdXAgZW5kcyBleGFjdGx5IHdoZXJlIHRoZSBuZXh0IGJlZ2lucykuXG4gICAgbGV0IHNvdXJjZXMgPSByZXN1bHQuc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKTtcbiAgICBsZXQgc29ydGVkID0gWy4uLnNvdXJjZXNdO1xuICAgIHNvcnQoc29ydGVkLCB4ID0+IHgudmFsaWRXaW5kb3dbMF0pO1xuICAgIGxldCBncm91cDogdHlwZW9mIHNvdXJjZXMgPSBbXTtcbiAgICBsZXQgZ3JvdXBFbmQgPSAwO1xuICAgIGZ1bmN0aW9uIGNoZWNrR3JvdXAoKSB7XG4gICAgICAgIGxldCBpbW11dGFibGVDb3VudCA9IGdyb3VwLmZpbHRlcih4ID0+IHguaW1tdXRhYmxlKS5sZW5ndGg7XG4gICAgICAgIGlmIChpbW11dGFibGVDb3VudCAmJiBpbW11dGFibGVDb3VudCAhPT0gZ3JvdXAubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZXMgd2l0aCBvdmVybGFwcGluZyB2YWxpZCB3aW5kb3dzIG11c3QgYWdyZWUgb24gaW1tdXRhYmlsaXR5OiAke2ltbXV0YWJsZUNvdW50fSBvZiAke2dyb3VwLmxlbmd0aH0gYXJlIGltbXV0YWJsZS4gU291cmNlczogJHtKU09OLnN0cmluZ2lmeShncm91cC5tYXAoeCA9PiAoeyB1cmw6IHgudXJsLCB2YWxpZFdpbmRvdzogeC52YWxpZFdpbmRvdywgaW1tdXRhYmxlOiAhIXguaW1tdXRhYmxlIH0pKSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIHNvdXJjZXMgdmFsaWQgYXQgYW55IGluc3RhbnQgbXVzdCBjb3ZlciB0aGUgd2hvbGUga2V5IHNwYWNlLCBvciBrZXlzIHJvdXRpbmcgaW50byBhIGdhcCBjb3VsZCBuZXZlciBiZSByZWFkXG4gICAgICAgIGxldCBjb3ZlcmVkID0gZ2V0Um91dGVDb3ZlcmFnZShncm91cCk7XG4gICAgICAgIGlmIChjb3ZlcmVkIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2VzIHdpdGggb3ZlcmxhcHBpbmcgdmFsaWQgd2luZG93cyBtdXN0IGNvdmVyIHRoZSBmdWxsIHJvdXRlIHNwYWNlIFswLCAxKTsgY292ZXJhZ2Ugc3RvcHMgYXQgJHtjb3ZlcmVkfS4gU291cmNlczogJHtKU09OLnN0cmluZ2lmeShncm91cC5tYXAoeCA9PiAoeyB1cmw6IHgudXJsLCB2YWxpZFdpbmRvdzogeC52YWxpZFdpbmRvdywgcm91dGU6IHgucm91dGUgfHwgRlVMTF9ST1VURSB9KSkpfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV2ZXJ5IGJ1Y2tldCBtdXN0IEFMU08gY292ZXIgdGhlIGZ1bGwgcm91dGUgc3BhY2UgYWNyb3NzIGl0cyBvd24gZW50cmllcywgYmVjYXVzZSBhbGwgb2YgYSBidWNrZXQncyBlbnRyaWVzIHNoYXJlIG9uZSBkaXNrLiBBIGJ1Y2tldCB0aGF0IG9ubHkgZXZlciBzeW5jaHJvbml6ZXMgcGFydCBvZiB0aGUga2V5IHNwYWNlIG5ldmVyIGxlYXJucyBhYm91dCBkZWxldGlvbnMgaW4gdGhlIHJlc3Qgb2YgaXQgLSBhbmQgdG9tYnN0b25lcyBleHBpcmUsIHNvIGZpbGVzIGl0IHN0aWxsIGhvbGRzIGZyb20gYSByb3V0ZSBpdCBubyBsb25nZXIgc2VydmVzIGV2ZW50dWFsbHkgbG9vayBsaWtlIGxpdmUgZmlsZXMgYWdhaW4sIGFuZCBnZXQgcmVzdXJyZWN0ZWQgaW50byB0aGUgY2hhaW4gYnkgaXRzIG5leHQgc2Nhbi4gQW4gZW50cnkgd2l0aCBubyByb3V0ZSAoaW1wbGljaXRseSB0aGUgZnVsbCBzcGFjZSkgc2F0aXNmaWVzIHRoaXMgb24gaXRzIG93biwgd2hpY2ggaXMgd2h5IHRoZSB1c3VhbCBjb25maWd1cmF0aW9uIGxpc3RzIGVhY2ggYnVja2V0IG9uY2UgcGVyIHNoYXJkIEFORCBvbmNlIHVuc2hhcmRlZC5cbiAgICAgICAgbGV0IGJ5VXJsID0gbmV3IE1hcDxzdHJpbmcsIHR5cGVvZiBncm91cD4oKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIGdyb3VwKSB7XG4gICAgICAgICAgICBsZXQgZW50cmllcyA9IGJ5VXJsLmdldChzb3VyY2UudXJsKTtcbiAgICAgICAgICAgIGlmICghZW50cmllcykge1xuICAgICAgICAgICAgICAgIGVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBieVVybC5zZXQoc291cmNlLnVybCwgZW50cmllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBbdXJsLCBlbnRyaWVzXSBvZiBieVVybCkge1xuICAgICAgICAgICAgbGV0IHVybENvdmVyZWQgPSBnZXRSb3V0ZUNvdmVyYWdlKGVudHJpZXMpO1xuICAgICAgICAgICAgaWYgKHVybENvdmVyZWQgPCAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFdmVyeSBidWNrZXQgbXVzdCBjb3ZlciB0aGUgZnVsbCByb3V0ZSBzcGFjZSBbMCwgMSkgYWNyb3NzIGl0cyBvd24gZW50cmllcyB3aXRoIG92ZXJsYXBwaW5nIHZhbGlkIHdpbmRvd3MsIGJ1dCAke3VybH0gb25seSBjb3ZlcnMgdXAgdG8gJHt1cmxDb3ZlcmVkfSAoaXRzIHJvdXRlczogJHtKU09OLnN0cmluZ2lmeShlbnRyaWVzLm1hcCh4ID0+IHgucm91dGUgfHwgRlVMTF9ST1VURSkpfSkuIEFkZCBhbiBlbnRyeSBmb3IgaXQgd2l0aCBubyByb3V0ZSAob3IgZW50cmllcyB3aG9zZSByb3V0ZXMgc3BhbiB0aGUgcmVzdCksIGFsb25nc2lkZSBpdHMgc2hhcmRlZCBlbnRyaWVzLiBUaGlzIGlzIGVuZm9yY2VkIGJlY2F1c2UgYSBidWNrZXQncyBlbnRyaWVzIGFsbCBzaGFyZSBvbmUgZGlzazogaWYgaXQgb25seSBldmVyIHN5bmNocm9uaXplcyBwYXJ0IG9mIHRoZSBrZXkgc3BhY2UsIGl0IG5ldmVyIHNlZXMgZGVsZXRpb25zIGluIHRoZSByZXN0LCBhbmQgb25jZSB0aG9zZSB0b21ic3RvbmVzIGV4cGlyZSB0aGUgZmlsZXMgaXQgc3RpbGwgaG9sZHMgYXJlIHJlc3VycmVjdGVkIGludG8gdGhlIGNoYWluIGJ5IGl0cyBuZXh0IHNjYW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvcnRlZCkge1xuICAgICAgICBpZiAoZ3JvdXAubGVuZ3RoICYmIHNvdXJjZS52YWxpZFdpbmRvd1swXSA+PSBncm91cEVuZCkge1xuICAgICAgICAgICAgY2hlY2tHcm91cCgpO1xuICAgICAgICAgICAgZ3JvdXAgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBncm91cC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIGdyb3VwRW5kID0gTWF0aC5tYXgoZ3JvdXBFbmQsIHNvdXJjZS52YWxpZFdpbmRvd1sxXSk7XG4gICAgfVxuICAgIGNoZWNrR3JvdXAoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSb3V0aW5nRGF0YShkYXRhOiBCdWZmZXIpOiBSZW1vdGVDb25maWcge1xuICAgIGxldCB0ZXh0ID0gZGF0YS50b1N0cmluZygpO1xuICAgIGxldCBwYXJzZWQ6IFJlbW90ZUNvbmZpZztcbiAgICB0cnkge1xuICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpIGFzIFJlbW90ZUNvbmZpZztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGluZyBjb25maWcgaXMgbm90IHZhbGlkIEpTT04gKCR7U3RyaW5nKGUpfSkuIERhdGE6ICR7dGV4dC5zbGljZSgwLCA1MDApfWApO1xuICAgIH1cbiAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSBcIm9iamVjdFwiIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZC5zb3VyY2VzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdXRpbmcgY29uZmlnIG11c3QgYmUgeyB2ZXJzaW9uPywgc291cmNlczogWy4uLl0gfSwgd2FzICR7dGV4dC5zbGljZSgwLCA1MDApfWApO1xuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplUmVtb3RlQ29uZmlnKHBhcnNlZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSZW1vdGVDb25maWcoY29uZmlnOiBSZW1vdGVDb25maWcpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShjb25maWcsIHVuZGVmaW5lZCwgNCkpO1xufVxuIl19
242
+ /* _JS_SOURCE_HASH = "0e0668d8e7e9a4612354f41fec7b94ecaa6283b2b1286c6e1da31f4d126df7be"; */
@@ -0,0 +1,79 @@
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
6
+ //exports.SourcesList = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const RELOAD_THROTTLE = 5 * 1000;
9
+ // The persistent identity behind IndexEntry.sourcesListIndex: an append-only file of source URLs / disk folder paths, one per line, where a URL's 0-based line number IS the sourcesListIndex the index persists. Because the file is only ever appended to, a line number means the same URL forever - across restarts and across processes sharing the folder. A torn append (crash mid-write) leaves an unterminated partial line; the next writer terminates it before appending, so the garbage line permanently occupies its index (harmless - it never matches a real URL) and every reader agrees on the numbering.
10
+ class SourcesList {
11
+ constructor(filePath) {
12
+ this.filePath = filePath;
13
+ this.urls = [];
14
+ this.indexes = new Map();
15
+ this.endsClean = true;
16
+ this.lastReload = 0;
17
+ this.appendQueue = Promise.resolve();
18
+ }
19
+ async load() {
20
+ let content = "";
21
+ try {
22
+ content = await fs_1.default.promises.readFile(this.filePath, "utf8");
23
+ }
24
+ catch (e) {
25
+ if (e.code !== "ENOENT")
26
+ throw e;
27
+ }
28
+ this.endsClean = !content || content.endsWith("\n");
29
+ let lines = content.split("\n");
30
+ if (lines[lines.length - 1] === "") {
31
+ lines.pop();
32
+ }
33
+ this.urls = lines;
34
+ this.indexes.clear();
35
+ for (let i = 0; i < lines.length; i++) {
36
+ if (!this.indexes.has(lines[i])) {
37
+ this.indexes.set(lines[i], i);
38
+ }
39
+ }
40
+ }
41
+ getUrl(sourcesListIndex) {
42
+ return this.urls[sourcesListIndex];
43
+ }
44
+ /** For a sourcesListIndex beyond our in-memory list (another process appended since we read): re-reads the file, at most once per RELOAD_THROTTLE. Returning undefined can therefore mean "throttled", not "definitely absent" - never treat it as proof the index is bogus. */
45
+ async getUrlReloading(sourcesListIndex) {
46
+ if (sourcesListIndex < this.urls.length)
47
+ return this.urls[sourcesListIndex];
48
+ if (Date.now() - this.lastReload < RELOAD_THROTTLE)
49
+ return undefined;
50
+ this.lastReload = Date.now();
51
+ await this.load();
52
+ return this.urls[sourcesListIndex];
53
+ }
54
+ /** The sourcesListIndex of the url, appending it if it is new. Appends are serialized within this process; before each append the file is re-read, so appends by other processes are picked up instead of duplicated. */
55
+ ensure(url) {
56
+ if (url.includes("\n")) {
57
+ throw new Error(`Source URLs cannot contain newlines (they are stored one per line): ${JSON.stringify(url)}`);
58
+ }
59
+ let result = this.appendQueue.then(async () => {
60
+ await this.load();
61
+ let existing = this.indexes.get(url);
62
+ if (existing !== undefined)
63
+ return existing;
64
+ let prefix = this.endsClean && "" || "\n";
65
+ await fs_1.default.promises.appendFile(this.filePath, prefix + url + "\n");
66
+ this.endsClean = true;
67
+ let index = this.urls.length;
68
+ this.urls.push(url);
69
+ this.indexes.set(url, index);
70
+ console.log(`Registered new source ${JSON.stringify(url)} as sourcesListIndex ${index} in ${this.filePath}`);
71
+ return index;
72
+ });
73
+ this.appendQueue = result.then(() => { }, () => { });
74
+ return result;
75
+ }
76
+ }
77
+ exports.SourcesList = SourcesList;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlc0xpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VzTGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFFcEIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUVqQyw0bEJBQTRsQjtBQUM1bEIsTUFBYSxXQUFXO0lBQ3BCLFlBQW9CLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDNUIsU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUNwQixZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDcEMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFMQSxDQUFDO0lBT2pDLEtBQUssQ0FBQyxJQUFJO1FBQ2QsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQztZQUNELE9BQU8sR0FBRyxNQUFNLFlBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxJQUFLLENBQXVCLENBQUMsSUFBSSxLQUFLLFFBQVE7Z0JBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDakMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hC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UUFDckQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKO0FBL0RELGtDQStEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnNcIjtcblxuY29uc3QgUkVMT0FEX1RIUk9UVExFID0gNSAqIDEwMDA7XG5cbi8vIFRoZSBwZXJzaXN0ZW50IGlkZW50aXR5IGJlaGluZCBJbmRleEVudHJ5LnNvdXJjZXNMaXN0SW5kZXg6IGFuIGFwcGVuZC1vbmx5IGZpbGUgb2Ygc291cmNlIFVSTHMgLyBkaXNrIGZvbGRlciBwYXRocywgb25lIHBlciBsaW5lLCB3aGVyZSBhIFVSTCdzIDAtYmFzZWQgbGluZSBudW1iZXIgSVMgdGhlIHNvdXJjZXNMaXN0SW5kZXggdGhlIGluZGV4IHBlcnNpc3RzLiBCZWNhdXNlIHRoZSBmaWxlIGlzIG9ubHkgZXZlciBhcHBlbmRlZCB0bywgYSBsaW5lIG51bWJlciBtZWFucyB0aGUgc2FtZSBVUkwgZm9yZXZlciAtIGFjcm9zcyByZXN0YXJ0cyBhbmQgYWNyb3NzIHByb2Nlc3NlcyBzaGFyaW5nIHRoZSBmb2xkZXIuIEEgdG9ybiBhcHBlbmQgKGNyYXNoIG1pZC13cml0ZSkgbGVhdmVzIGFuIHVudGVybWluYXRlZCBwYXJ0aWFsIGxpbmU7IHRoZSBuZXh0IHdyaXRlciB0ZXJtaW5hdGVzIGl0IGJlZm9yZSBhcHBlbmRpbmcsIHNvIHRoZSBnYXJiYWdlIGxpbmUgcGVybWFuZW50bHkgb2NjdXBpZXMgaXRzIGluZGV4IChoYXJtbGVzcyAtIGl0IG5ldmVyIG1hdGNoZXMgYSByZWFsIFVSTCkgYW5kIGV2ZXJ5IHJlYWRlciBhZ3JlZXMgb24gdGhlIG51bWJlcmluZy5cbmV4cG9ydCBjbGFzcyBTb3VyY2VzTGlzdCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlUGF0aDogc3RyaW5nKSB7IH1cbiAgICBwcml2YXRlIHVybHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBpbmRleGVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBwcml2YXRlIGVuZHNDbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBsYXN0UmVsb2FkID0gMDtcbiAgICBwcml2YXRlIGFwcGVuZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBwcml2YXRlIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBjb250ZW50ID0gXCJcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZSh0aGlzLmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICgoZSBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSAhPT0gXCJFTk9FTlRcIikgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZHNDbGVhbiA9ICFjb250ZW50IHx8IGNvbnRlbnQuZW5kc1dpdGgoXCJcXG5cIik7XG4gICAgICAgIGxldCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgIGlmIChsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xuICAgICAgICAgICAgbGluZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cmxzID0gbGluZXM7XG4gICAgICAgIHRoaXMuaW5kZXhlcy5jbGVhcigpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5kZXhlcy5oYXMobGluZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzLnNldChsaW5lc1tpXSwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VXJsKHNvdXJjZXNMaXN0SW5kZXg6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnVybHNbc291cmNlc0xpc3RJbmRleF07XG4gICAgfVxuXG4gICAgLyoqIEZvciBhIHNvdXJjZXNMaXN0SW5kZXggYmV5b25kIG91ciBpbi1tZW1vcnkgbGlzdCAoYW5vdGhlciBwcm9jZXNzIGFwcGVuZGVkIHNpbmNlIHdlIHJlYWQpOiByZS1yZWFkcyB0aGUgZmlsZSwgYXQgbW9zdCBvbmNlIHBlciBSRUxPQURfVEhST1RUTEUuIFJldHVybmluZyB1bmRlZmluZWQgY2FuIHRoZXJlZm9yZSBtZWFuIFwidGhyb3R0bGVkXCIsIG5vdCBcImRlZmluaXRlbHkgYWJzZW50XCIgLSBuZXZlciB0cmVhdCBpdCBhcyBwcm9vZiB0aGUgaW5kZXggaXMgYm9ndXMuICovXG4gICAgcHVibGljIGFzeW5jIGdldFVybFJlbG9hZGluZyhzb3VyY2VzTGlzdEluZGV4OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoc291cmNlc0xpc3RJbmRleCA8IHRoaXMudXJscy5sZW5ndGgpIHJldHVybiB0aGlzLnVybHNbc291cmNlc0xpc3RJbmRleF07XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0UmVsb2FkIDwgUkVMT0FEX1RIUk9UVExFKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhc3RSZWxvYWQgPSBEYXRlLm5vdygpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsc1tzb3VyY2VzTGlzdEluZGV4XTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNvdXJjZXNMaXN0SW5kZXggb2YgdGhlIHVybCwgYXBwZW5kaW5nIGl0IGlmIGl0IGlzIG5ldy4gQXBwZW5kcyBhcmUgc2VyaWFsaXplZCB3aXRoaW4gdGhpcyBwcm9jZXNzOyBiZWZvcmUgZWFjaCBhcHBlbmQgdGhlIGZpbGUgaXMgcmUtcmVhZCwgc28gYXBwZW5kcyBieSBvdGhlciBwcm9jZXNzZXMgYXJlIHBpY2tlZCB1cCBpbnN0ZWFkIG9mIGR1cGxpY2F0ZWQuICovXG4gICAgcHVibGljIGVuc3VyZSh1cmw6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXCJcXG5cIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIFVSTHMgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMgKHRoZXkgYXJlIHN0b3JlZCBvbmUgcGVyIGxpbmUpOiAke0pTT04uc3RyaW5naWZ5KHVybCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuYXBwZW5kUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICAgICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMuaW5kZXhlcy5nZXQodXJsKTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgICBsZXQgcHJlZml4ID0gdGhpcy5lbmRzQ2xlYW4gJiYgXCJcIiB8fCBcIlxcblwiO1xuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMuYXBwZW5kRmlsZSh0aGlzLmZpbGVQYXRoLCBwcmVmaXggKyB1cmwgKyBcIlxcblwiKTtcbiAgICAgICAgICAgIHRoaXMuZW5kc0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMudXJscy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnVybHMucHVzaCh1cmwpO1xuICAgICAgICAgICAgdGhpcy5pbmRleGVzLnNldCh1cmwsIGluZGV4KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZWdpc3RlcmVkIG5ldyBzb3VyY2UgJHtKU09OLnN0cmluZ2lmeSh1cmwpfSBhcyBzb3VyY2VzTGlzdEluZGV4ICR7aW5kZXh9IGluICR7dGhpcy5maWxlUGF0aH1gKTtcbiAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwZW5kUXVldWUgPSByZXN1bHQudGhlbigoKSA9PiB7IH0sICgpID0+IHsgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIl19
79
+ /* _JS_SOURCE_HASH = "48043d913e25bf38300177203bf14c1a126990aeab56aa03f8579b9b502f2f0a"; */
@@ -275,14 +275,11 @@ class RemoteStorageControllerBase {
275
275
  return [];
276
276
  return await bucket.store.findInfo(prefix, config);
277
277
  }
278
- async getChangesAfter(account, bucketName, time) {
278
+ async getChangesAfter2(account, bucketName, config) {
279
279
  let bucket = await getBucket(account, bucketName);
280
280
  if (!bucket)
281
281
  return [];
282
- if (!bucket.store.getChangesAfter) {
283
- throw new Error(`Bucket ${account}/${bucketName} does not support getChangesAfter (rawDisk buckets have no index)`);
284
- }
285
- return await bucket.store.getChangesAfter(time);
282
+ return await bucket.store.getChangesAfter2(config);
286
283
  }
287
284
  async getArchivesConfig(account, bucketName) {
288
285
  let bucket = await getBucket(account, bucketName);
@@ -489,7 +486,7 @@ exports.RemoteStorageController = SocketFunction_1.SocketFunction.register(expor
489
486
  del: { hooks: [accountAccess] },
490
487
  getInfo: { hooks: [accountAccess] },
491
488
  findInfo: { hooks: [accountAccess] },
492
- getChangesAfter: { hooks: [accountAccess] },
489
+ getChangesAfter2: { hooks: [accountAccess] },
493
490
  getArchivesConfig: { hooks: [accountAccess] },
494
491
  getIndexInfo: { hooks: [accountAccess] },
495
492
  listBuckets: { hooks: [accountAccess] },
@@ -506,5 +503,5 @@ exports.RemoteStorageController = SocketFunction_1.SocketFunction.register(expor
506
503
  noClientHooks: true,
507
504
  noDefaultHooks: true,
508
505
  }));
509
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBa0k7QUFDbEksNENBQXlHO0FBQ3pHLGlEQUE4QztBQUM5Qyw2REFLOEI7QUFDOUIsdUVBQW9FO0FBRXZELFFBQUEseUJBQXlCLEdBQUcsa0NBQWtDLENBQUM7QUFDL0QsUUFBQSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUM5QyxRQUFBLHlCQUF5QixHQUFHLDJDQUEyQyxDQUFDO0FBQ3hFLFFBQUEscUJBQXFCLEdBQUcsdUNBQXVDLENBQUM7QUFFN0UsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBWSxHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBaUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUUzQyxNQUFNLGFBQWEsR0FBOEI7SUFDN0MsSUFBSSxFQUFFLDBCQUEwQixFQUFFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLGlDQUFpQztJQUMvSSxHQUFHLEVBQUUsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVc7SUFDM0csR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFlBQVk7SUFDOUUsR0FB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QUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUNyQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUMxQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUMxQyxTQUFTLEVBQUUsRUFBRTtDQUNoQixDQUFDLEVBQ0YsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNILGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3ZCLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbkhvb2sgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uVHlwZXNcIjtcbmltcG9ydCB7IGdldE5vZGVJZElQIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBzZXRIVFRQUmVzdWx0SGVhZGVycywgZ2V0Q3VycmVudEhUVFBSZXF1ZXN0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbEhUVFBIYW5kbGVyXCI7XG5pbXBvcnQgeyBwZXJmb3JtTG9jYWxDYWxsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbE1hbmFnZXJcIjtcbmltcG9ydCB7IFJlcXVpcmVDb250cm9sbGVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL1JlcXVpcmVDb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0aW1lSW5NaW51dGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBnZXRDb21tb25OYW1lLCBnZXRQdWJsaWNJZGVudGlmaWVyLCBnZXRPd25NYWNoaW5lSWQsIHZlcmlmeSwgdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5IH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcbmltcG9ydCB7IEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgSU1NVVRBQkxFX0NBQ0hFX1RJTUUgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBST1VUSU5HX0ZJTEUgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7XG4gICAgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZywgZ2V0VHJ1c3QsIGdldFJlcXVlc3RzLCBnZXRMb2FkZWRCdWNrZXQsIHdyaXRlQnVja2V0RmlsZSxcbiAgICBkZWxldGVCdWNrZXRGaWxlLCBhc3NlcnRXcml0ZXNBbGxvd2VkLCBhc3NlcnRNdXRhYmxlLCBMb2FkZWRCdWNrZXQsXG4gICAgZ2V0QnVja2V0Q29uZmlnLCBsaXN0QWNjb3VudEJ1Y2tldHMsIFNlcnZlckJ1Y2tldEluZm8sIGNsZWFyQWNjb3VudFdyaXRlU3RhdHMsXG4gICAgZ2V0QWN0aXZlQnVja2V0LCBhY3RpdmF0ZUJ1Y2tldCwgQWN0aXZlQnVja2V0SW5mbywgZ2V0QWN0aXZlQnVja2V0S2V5cyxcbn0gZnJvbSBcIi4vc3RvcmFnZVNlcnZlclN0YXRlXCI7XG5pbXBvcnQgeyBTdG9yYWdlQ2xpZW50Q29udHJvbGxlciB9IGZyb20gXCIuL3N0b3JhZ2VDbGllbnRDb250cm9sbGVyXCI7XG5cbmV4cG9ydCBjb25zdCBSRU1PVEVfU1RPUkFHRV9DTEFTU19HVUlEID0gXCJSZW1vdGVTdG9yYWdlQ29udHJvbGxlci1iN2U0MmE5MVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfQVVUSF9QVVJQT1NFID0gXCJyZW1vdGVTdG9yYWdlLWF1dGgtMVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQgPSBcIlJFTU9URV9TVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEX2NmMmY3YjFlXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9BQ0NFU1NfREVOSUVEID0gXCJSRU1PVEVfU1RPUkFHRV9BQ0NFU1NfREVOSUVEXzlkODFhNGMwXCI7XG5cbmNvbnN0IEFVVEhfVElNRV9XSU5ET1cgPSB0aW1lSW5NaW51dGUgKiAxMDtcbmNvbnN0IEFDQ0VTU19DSEVDS19TTE9XX1RJTUUgPSA1MDtcbmNvbnN0IE1BWF9TRVNTSU9OUyA9IDEwMCAqIDEwMDA7XG5jb25zdCBNQVhfUkVRVUVTVFNfUEVSX0lQID0gNTA7XG5cbmV4cG9ydCB0eXBlIEF1dGhUb2tlbkRhdGEgPSB7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIHRpbWU6IG51bWJlcjtcbiAgICBzZXJ2ZXI6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBBdXRoVG9rZW4gPSB7XG4gICAgY2VydFBlbTogc3RyaW5nO1xuICAgIHNpZ25hdHVyZTogc3RyaW5nO1xuICAgIGRhdGE6IEF1dGhUb2tlbkRhdGE7XG59O1xuZXhwb3J0IHR5cGUgQWNjZXNzUmVxdWVzdCA9IHtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICB0aW1lOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHJ1c3RSZWNvcmQgPSB7XG4gICAgYWNjb3VudDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgdGltZTogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIEFjY2Vzc1N0YXRlID0ge1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgaGFzQWNjZXNzOiBib29sZWFuO1xuICAgIGdyYW50QWNjZXNzQ29tbWFuZD86IHN0cmluZztcbiAgICB0cnVzdGVkTWFjaGluZXM/OiBUcnVzdFJlY29yZFtdO1xufTtcblxuY29uc3Qgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG5jb25zdCBDT05URU5UX1RZUEVTOiB7IFtleHQ6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGh0bWw6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsIGpzOiBcInRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOFwiLCBjc3M6IFwidGV4dC9jc3M7IGNoYXJzZXQ9dXRmLThcIiwganNvbjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgdHh0OiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiwgcG5nOiBcImltYWdlL3BuZ1wiLCBqcGc6IFwiaW1hZ2UvanBlZ1wiLCBqcGVnOiBcImltYWdlL2pwZWdcIiwgZ2lmOiBcImltYWdlL2dpZlwiLFxuICAgIHN2ZzogXCJpbWFnZS9zdmcreG1sXCIsIHdlYnA6IFwiaW1hZ2Uvd2VicFwiLCBtcDQ6IFwidmlkZW8vbXA0XCIsIHdlYm06IFwidmlkZW8vd2VibVwiLFxuICAgIG1wMzogXCJhdWRpby9tcGVnXCIsIHdhdjogXCJhdWRpby93YXZcIiwgcGRmOiBcImFwcGxpY2F0aW9uL3BkZlwiLFxufTtcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWROYW1lKHZhbHVlOiBzdHJpbmcsIGtpbmQ6IHN0cmluZykge1xuICAgIGlmICghL15bXFx3LV17MSw2NH0kLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtraW5kfSAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0sIGV4cGVjdGVkIDEtNjQgY2hhcmFjdGVycyBvZiBsZXR0ZXJzL251bWJlcnMvdW5kZXJzY29yZS9kYXNoYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQYXRoKHBhdGg6IHN0cmluZykge1xuICAgIGlmIChCdWZmZXIuZnJvbShwYXRoLCBcInV0ZjhcIikubGVuZ3RoID4gMTAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggdG9vIGxvbmc6ICR7cGF0aC5sZW5ndGh9IGNoYXJhY3RlcnMgPiAxMDAwLiBQYXRoOiAke3BhdGguc2xpY2UoMCwgMjAwKX1gKTtcbiAgICB9XG4gICAgaWYgKCFwYXRoIHx8IHBhdGguc3RhcnRzV2l0aChcIi9cIikgfHwgcGF0aC5lbmRzV2l0aChcIi9cIikgfHwgcGF0aC5pbmNsdWRlcyhcIi8vXCIpIHx8IHBhdGguaW5jbHVkZXMoXCJcXFxcXCIpIHx8IHBhdGguaW5jbHVkZXMoXCJcXHgwMFwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF0aCAke0pTT04uc3RyaW5naWZ5KHBhdGguc2xpY2UoMCwgMjAwKSl9LCBwYXRocyBjYW5ub3QgYmUgZW1wdHksIHN0YXJ0IG9yIGVuZCB3aXRoIC8sIG9yIGNvbnRhaW4gLy8sIGJhY2tzbGFzaGVzLCBvciBudWxsIGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gICAgaWYgKHBhdGguc3BsaXQoXCIvXCIpLnNvbWUocGFydCA9PiBwYXJ0ID09PSBcIi5cIiB8fCBwYXJ0ID09PSBcIi4uXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXRoICR7SlNPTi5zdHJpbmdpZnkocGF0aC5zbGljZSgwLCAyMDApKX0sIHBhdGhzIGNhbm5vdCBjb250YWluIC4gb3IgLi4gc2VnbWVudHNgKTtcbiAgICB9XG59XG5cbmNvbnN0IGNvbm5lY3RlZENsaWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmZ1bmN0aW9uIHRyYWNrQ2FsbGVyKCk6IHZvaWQge1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKS5ub2RlSWQ7XG4gICAgaWYgKGNvbm5lY3RlZENsaWVudHMuaGFzKG5vZGVJZCkpIHJldHVybjtcbiAgICBjb25uZWN0ZWRDbGllbnRzLmFkZChub2RlSWQpO1xuICAgIFNvY2tldEZ1bmN0aW9uLm9uTmV4dERpc2Nvbm5lY3Qobm9kZUlkLCAoKSA9PiB7XG4gICAgICAgIGNvbm5lY3RlZENsaWVudHMuZGVsZXRlKG5vZGVJZCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhgQnJvYWRjYXN0aW5nIHJvdXRpbmcgY29uZmlnIGNoYW5nZSB0byAke2Nvbm5lY3RlZENsaWVudHMuc2l6ZX0gY29ubmVjdGVkIGNsaWVudHNgKTtcbiAgICBmb3IgKGxldCBub2RlSWQgb2YgWy4uLmNvbm5lY3RlZENsaWVudHNdKSB7XG4gICAgICAgIHZvaWQgU3RvcmFnZUNsaWVudENvbnRyb2xsZXIubm9kZXNbbm9kZUlkXS5yb3V0aW5nQ29uZmlnQ2hhbmdlZCgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRDYWxsZXJNYWNoaW5lSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgbGV0IG1hY2hpbmVJZCA9IHNlc3Npb25zLmdldChjYWxsZXIubm9kZUlkKTtcbiAgICBpZiAoIW1hY2hpbmVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRH0gQ2FsbCBhdXRoZW50aWNhdGUgZmlyc3QgKGNvbm5lY3Rpb24gJHtjYWxsZXIubm9kZUlkfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cbmZ1bmN0aW9uIGdldENhbGxlcklQKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldE5vZGVJZElQKFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpLm5vZGVJZCk7XG59XG5mdW5jdGlvbiBpc0FkbWluKG1hY2hpbmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1hY2hpbmVJZCA9PT0gZ2V0T3duTWFjaGluZUlkKGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKS5yb290RG9tYWluKTtcbn1cbmZ1bmN0aW9uIHJlcXVpcmVBZG1pbigpOiBzdHJpbmcge1xuICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICBpZiAoIWlzQWRtaW4obWFjaGluZUlkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9BQ0NFU1NfREVOSUVEfSBBZG1pbiBjb21tYW5kcyBtdXN0IGJlIHJ1biBmcm9tIHRoZSBzdG9yYWdlIG1hY2hpbmUgaXRzZWxmIChjYWxsZXIgbWFjaGluZSAke21hY2hpbmVJZH0pYCk7XG4gICAgfVxuICAgIHJldHVybiBtYWNoaW5lSWQ7XG59XG5hc3luYyBmdW5jdGlvbiByZXF1aXJlQWNjZXNzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgaWYgKGlzQWRtaW4obWFjaGluZUlkKSkgcmV0dXJuIG1hY2hpbmVJZDtcbiAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgIGxldCB0cnVzdGVkID0gYXdhaXQgdHJ1c3QuZ2V0KGAke2FjY291bnR9fCR7bWFjaGluZUlkfWApO1xuICAgIGlmICghdHJ1c3RlZCkge1xuICAgICAgICBsZXQgeyBkb21haW4sIHBvcnQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NUT1JBR0VfQUNDRVNTX0RFTklFRH0gTWFjaGluZSAke21hY2hpbmVJZH0gaGFzIG5vIGFjY2VzcyB0byBhY2NvdW50ICR7SlNPTi5zdHJpbmdpZnkoYWNjb3VudCl9LiBWaXNpdCBodHRwczovLyR7ZG9tYWlufToke3BvcnR9LyR7YWNjb3VudH0gZm9yIGFjY2VzcyBpbnN0cnVjdGlvbnMuYCk7XG4gICAgfVxuICAgIHJldHVybiBtYWNoaW5lSWQ7XG59XG5cbmZ1bmN0aW9uIGdldEdyYW50QWNjZXNzQ29tbWFuZChyZXF1ZXN0SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHsgc3NoVGFyZ2V0LCBzZXJ2ZXJDb21tYW5kIH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgcmV0dXJuIGBzc2ggJHtzc2hUYXJnZXR9ICcke3NlcnZlckNvbW1hbmR9IC0tcmVxdWVzdElkICR7cmVxdWVzdElkfSdgO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRCdWNrZXQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPExvYWRlZEJ1Y2tldCB8IHVuZGVmaW5lZD4ge1xuICAgIGFzc2VydFZhbGlkTmFtZShhY2NvdW50LCBcImFjY291bnRcIik7XG4gICAgYXNzZXJ0VmFsaWROYW1lKGJ1Y2tldE5hbWUsIFwiYnVja2V0IG5hbWVcIik7XG4gICAgcmV0dXJuIGF3YWl0IGdldExvYWRlZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbn1cblxuY2xhc3MgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXJCYXNlIHtcbiAgICBhc3luYyBwaW5nKCk6IFByb21pc2U8e30+IHtcbiAgICAgICAgdHJhY2tDYWxsZXIoKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZSh0b2tlbjogQXV0aFRva2VuKTogUHJvbWlzZTx7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nIH0+IHtcbiAgICAgICAgbGV0IHsgZG9tYWluLCBwb3J0IH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICAgICAgdmVyaWZ5KHRva2VuLmNlcnRQZW0sIHRva2VuLnNpZ25hdHVyZSwgdG9rZW4uZGF0YSk7XG4gICAgICAgIGxldCB7IHB1cnBvc2UsIHRpbWUsIHNlcnZlciB9ID0gdG9rZW4uZGF0YTtcbiAgICAgICAgaWYgKHB1cnBvc2UgIT09IFNUT1JBR0VfQVVUSF9QVVJQT1NFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gcHVycG9zZSBpcyAke0pTT04uc3RyaW5naWZ5KHB1cnBvc2UpfSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShTVE9SQUdFX0FVVEhfUFVSUE9TRSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKERhdGUubm93KCkgLSB0aW1lKSA+IEFVVEhfVElNRV9XSU5ET1cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiB0aW1lIGlzIHRvbyBmYXIgZnJvbSB0aGUgc2VydmVyIHRpbWUgKHRva2VuICR7dGltZX0sIHNlcnZlciAke0RhdGUubm93KCl9LCBhbGxvd2VkIGRyaWZ0ICR7QVVUSF9USU1FX1dJTkRPV31tcylgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG9rZW5Eb21haW4gPSBzZXJ2ZXIuc3BsaXQoXCI6XCIpWzBdO1xuICAgICAgICBpZiAodG9rZW5Eb21haW4gIT09IGRvbWFpbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIGlzIGZvciBzZXJ2ZXIgJHtKU09OLnN0cmluZ2lmeShzZXJ2ZXIpfSwgYnV0IHRoaXMgc2VydmVyIGlzICR7SlNPTi5zdHJpbmdpZnkoYCR7ZG9tYWlufToke3BvcnR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IGdldENvbW1vbk5hbWUodG9rZW4uY2VydFBlbSkuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICBpZiAoIXZlcmlmeU1hY2hpbmVJZEZvclB1YmxpY0tleSh7IG1hY2hpbmVJZCwgcHVibGljS2V5OiBnZXRQdWJsaWNJZGVudGlmaWVyKHRva2VuLmNlcnRQZW0pIH0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIGNvbW1vbiBuYW1lICR7SlNPTi5zdHJpbmdpZnkoZ2V0Q29tbW9uTmFtZSh0b2tlbi5jZXJ0UGVtKSl9IGRvZXMgbm90IG1hdGNoIGl0cyBwdWJsaWMga2V5YCk7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbnMuc2V0KGNhbGxlci5ub2RlSWQsIG1hY2hpbmVJZCk7XG4gICAgICAgIHdoaWxlIChzZXNzaW9ucy5zaXplID4gTUFYX1NFU1NJT05TKSB7XG4gICAgICAgICAgICBsZXQgb2xkZXN0ID0gc2Vzc2lvbnMua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChvbGRlc3QgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICAgICAgICBzZXNzaW9ucy5kZWxldGUob2xkZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwOiBnZXRDYWxsZXJJUCgpIH07XG4gICAgfVxuXG4gICAgYXN5bmMgcmVxdWVzdEFjY2VzcyhhY2NvdW50OiBzdHJpbmcpOiBQcm9taXNlPHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmc7IHJlcXVlc3RJZDogc3RyaW5nOyBncmFudEFjY2Vzc0NvbW1hbmQ6IHN0cmluZyB9PiB7XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShhY2NvdW50LCBcImFjY291bnRcIik7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICAgICAgbGV0IGlwID0gZ2V0Q2FsbGVySVAoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzU3RvcmFnZSA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IHJlcXVlc3RzU3RvcmFnZS5nZXQoaXApIHx8IFtdO1xuICAgICAgICBsZXQgZXhpc3RpbmcgPSByZXF1ZXN0cy5maW5kKHggPT4geC5hY2NvdW50ID09PSBhY2NvdW50ICYmIHgubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nLnRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhpc3RpbmcgPSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCksXG4gICAgICAgICAgICAgICAgYWNjb3VudCxcbiAgICAgICAgICAgICAgICBtYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgaXAsXG4gICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKGV4aXN0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAocmVxdWVzdHMubGVuZ3RoID4gTUFYX1JFUVVFU1RTX1BFUl9JUCkgcmVxdWVzdHMuc2hpZnQoKTtcbiAgICAgICAgYXdhaXQgcmVxdWVzdHNTdG9yYWdlLnNldChpcCwgcmVxdWVzdHMpO1xuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwLCByZXF1ZXN0SWQ6IGV4aXN0aW5nLnJlcXVlc3RJZCwgZ3JhbnRBY2Nlc3NDb21tYW5kOiBnZXRHcmFudEFjY2Vzc0NvbW1hbmQoZXhpc3RpbmcucmVxdWVzdElkKSB9O1xuICAgIH1cblxuICAgIGFzeW5jIGdldEFjY2Vzc1N0YXRlKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8QWNjZXNzU3RhdGU+IHtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgICAgICBsZXQgaXAgPSBnZXRDYWxsZXJJUCgpO1xuICAgICAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgICAgICBsZXQgaGFzQWNjZXNzID0gaXNBZG1pbihtYWNoaW5lSWQpIHx8ICEhYXdhaXQgdHJ1c3QuZ2V0KGAke2FjY291bnR9fCR7bWFjaGluZUlkfWApO1xuICAgICAgICBsZXQgcmVzdWx0OiBBY2Nlc3NTdGF0ZSA9IHsgbWFjaGluZUlkLCBpcCwgaGFzQWNjZXNzIH07XG4gICAgICAgIGlmICghaGFzQWNjZXNzKSB7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICAgICAgbGV0IG93blJlcXVlc3QgPSAoYXdhaXQgcmVxdWVzdHMuZ2V0KGlwKSB8fCBbXSkuZmluZCh4ID0+IHguYWNjb3VudCA9PT0gYWNjb3VudCAmJiB4Lm1hY2hpbmVJZCA9PT0gbWFjaGluZUlkKTtcbiAgICAgICAgICAgIGlmIChvd25SZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmdyYW50QWNjZXNzQ29tbWFuZCA9IGdldEdyYW50QWNjZXNzQ29tbWFuZChvd25SZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRydXN0ZWRNYWNoaW5lczogVHJ1c3RSZWNvcmRbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgYXdhaXQgdHJ1c3QuZ2V0S2V5cygpKSB7XG4gICAgICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGAke2FjY291bnR9fGApKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCByZWNvcmQgPSBhd2FpdCB0cnVzdC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChyZWNvcmQpIHRydXN0ZWRNYWNoaW5lcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRydXN0ZWRNYWNoaW5lcyA9IHRydXN0ZWRNYWNoaW5lcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBsaXN0UmVxdWVzdHNGb3JJUChhY2NvdW50OiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFjY2Vzc1JlcXVlc3RbXT4ge1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlcXVlc3RzLmdldChpcCkgfHwgW10pLmZpbHRlcih4ID0+IHguYWNjb3VudCA9PT0gYWNjb3VudCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ3JhbnRBY2Nlc3MocmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFRydXN0UmVjb3JkPiB7XG4gICAgICAgIGxldCBjYWxsZXJNYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICAgICAgbGV0IHRydXN0ID0gYXdhaXQgZ2V0VHJ1c3QoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgZm9yIChsZXQgaXAgb2YgYXdhaXQgcmVxdWVzdHMuZ2V0S2V5cygpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByZXF1ZXN0IG9mIGF3YWl0IHJlcXVlc3RzLmdldChpcCkgfHwgW10pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXF1ZXN0SWQgIT09IHJlcXVlc3RJZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0FkbWluKGNhbGxlck1hY2hpbmVJZCkgJiYgIWF3YWl0IHRydXN0LmdldChgJHtyZXF1ZXN0LmFjY291bnR9fCR7Y2FsbGVyTWFjaGluZUlkfWApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9IE1hY2hpbmUgJHtjYWxsZXJNYWNoaW5lSWR9IGhhcyBubyBhY2Nlc3MgdG8gYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3QuYWNjb3VudCl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByZWNvcmQ6IFRydXN0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50OiByZXF1ZXN0LmFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdC5tYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgICAgIGlwOiByZXF1ZXN0LmlwLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdHJ1c3Quc2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtyZXF1ZXN0Lm1hY2hpbmVJZH1gLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBhY2Nlc3MgcmVxdWVzdCBmb3VuZCB3aXRoIGlkICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdElkKX0uIEl0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBncmFudGVkIG9yIGV4cGlyZWQuYCk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluIChzbyBvbmx5IHRoaXMgbWFjaGluZSdzIG93biBwcm9jZXNzZXMgY2FuIGNhbGwgaXQpOiB0aGUgYnVja2V0cyB0aGlzIHByb2Nlc3MgaGFzIGxvYWRlZC4gQSBkZXBsb3kgc3VjY2Vzc29yIGFza3MgaXRzIHByZWRlY2Vzc29yIGZvciB0aGlzLCBzbyBpdCBhY3RpdmF0ZXMgZXhhY3RseSB0aGUgYnVja2V0cyB0aGF0IGFyZSBpbiB1c2UgaW5zdGVhZCBvZiBldmVyeSBidWNrZXQgb24gZGlzay4gKi9cbiAgICBhc3luYyBhZG1pbkxpc3RBY3RpdmVCdWNrZXRzKCk6IFByb21pc2U8eyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9W10+IHtcbiAgICAgICAgcmV0dXJuIGdldEFjdGl2ZUJ1Y2tldEtleXMoKTtcbiAgICB9XG4gICAgYXN5bmMgYWRtaW5MaXN0UmVxdWVzdHMoaXA6IHN0cmluZyk6IFByb21pc2U8QWNjZXNzUmVxdWVzdFtdPiB7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdO1xuICAgIH1cbiAgICBhc3luYyBhZG1pbkdyYW50QWNjZXNzKHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxUcnVzdFJlY29yZD4ge1xuICAgICAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICBmb3IgKGxldCBpcCBvZiBhd2FpdCByZXF1ZXN0cy5nZXRLZXlzKCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgYXdhaXQgcmVxdWVzdHMuZ2V0KGlwKSB8fCBbXSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlcXVlc3RJZCAhPT0gcmVxdWVzdElkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgcmVjb3JkOiBUcnVzdFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogcmVxdWVzdC5hY2NvdW50LFxuICAgICAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IHJlcXVlc3QubWFjaGluZUlkLFxuICAgICAgICAgICAgICAgICAgICBpcDogcmVxdWVzdC5pcCxcbiAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGF3YWl0IHRydXN0LnNldChgJHtyZXF1ZXN0LmFjY291bnR9fCR7cmVxdWVzdC5tYWNoaW5lSWR9YCwgcmVjb3JkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gYWNjZXNzIHJlcXVlc3QgZm91bmQgd2l0aCBpZCAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RJZCl9LiBJdCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gZ3JhbnRlZCBvciBleHBpcmVkLmApO1xuICAgIH1cblxuICAgIGFzeW5jIGdldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoYWNjb3VudCwgYnVja2V0TmFtZSwgcGF0aCwgcmFuZ2UpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC5kYXRhIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYXN5bmMgZ2V0MihhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgocGF0aCk7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0LnN0b3JlLmdldDIocGF0aCwgeyByYW5nZSB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2V0KGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgbGFzdE1vZGlmaWVkPzogbnVtYmVyLCBmb3JjZVNldEltbXV0YWJsZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGJ1Y2tldE5hbWUsIFwiYnVja2V0IG5hbWVcIik7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChwYXRoKTtcbiAgICAgICAgYXdhaXQgd3JpdGVCdWNrZXRGaWxlKGFjY291bnQsIGJ1Y2tldE5hbWUsIHBhdGgsIEJ1ZmZlci5mcm9tKGRhdGEpLCB7IGxhc3RNb2RpZmllZCwgZm9yY2VTZXRJbW11dGFibGUgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShidWNrZXROYW1lLCBcImJ1Y2tldCBuYW1lXCIpO1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgocGF0aCk7XG4gICAgICAgIGF3YWl0IGRlbGV0ZUJ1Y2tldEZpbGUoYWNjb3VudCwgYnVja2V0TmFtZSwgcGF0aCk7XG4gICAgfVxuICAgIGFzeW5jIGdldEluZm8oYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgYnVja2V0ID0gYXdhaXQgZ2V0QnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1Y2tldC5zdG9yZS5nZXRJbmZvKHBhdGgpO1xuICAgIH1cbiAgICBhc3luYyBmaW5kSW5mbyhhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IHsgc2hhbGxvdz86IGJvb2xlYW47IHR5cGU/OiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgYnVja2V0ID0gYXdhaXQgZ2V0QnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0LnN0b3JlLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q2hhbmdlc0FmdGVyKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSByZXR1cm4gW107XG4gICAgICAgIGlmICghYnVja2V0LnN0b3JlLmdldENoYW5nZXNBZnRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZ2V0Q2hhbmdlc0FmdGVyIChyYXdEaXNrIGJ1Y2tldHMgaGF2ZSBubyBpbmRleClgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0LnN0b3JlLmdldENoYW5nZXNBZnRlcih0aW1lKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0QXJjaGl2ZXNDb25maWcoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSByZXR1cm4geyBzdXBwb3J0c0NoYW5nZXNBZnRlcjogdHJ1ZSB9O1xuICAgICAgICByZXR1cm4gZ2V0QnVja2V0Q29uZmlnKGJ1Y2tldCk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3RCdWNrZXRzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyQnVja2V0SW5mb1tdPiB7XG4gICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgbGlzdEFjY291bnRCdWNrZXRzKGFjY291bnQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gVGhlIGFjY2VzcyBob29rIChhbmQgdGhlIHN0b3JhZ2UgaXQgaW5pdGlhbGl6ZXMpIHJ1bnMgYmVmb3JlIHRoaXMsIHNvIGEgbGFyZ2UgZ2FwIGJldHdlZW4gdGhpcyBhbmQgdGhlIGNhbGxlcidzIHRpbWluZyBpcyB0aGUgaG9va1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGxpc3RCdWNrZXRzKCR7YWNjb3VudH0pIGNhbGwgYm9keSB0b29rICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIFRoZSBsaXZlLCBpbi1tZW1vcnkgc3RhdGUgb2Ygb25lIGJ1Y2tldCwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBpcyB1bmF2YWlsYWJsZS4gQW5zd2VyZWQgd2l0aG91dCB0b3VjaGluZyB0aGUgZGlzaywgc28gaXQgaXMgY2hlYXAgLSBidXQgb25seSB3b3JrcyB3aGlsZSB0aGUgYnVja2V0IGlzIGxvYWRlZCBoZXJlLiAqL1xuICAgIGFzeW5jIGdldEFjdGl2ZUJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYnVja2V0TmFtZSwgXCJidWNrZXQgbmFtZVwiKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGl2ZUJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICB9XG4gICAgLyoqIExvYWRzIGEgYnVja2V0IHRoYXQgZXhpc3RzIG9uIHRoaXMgc2VydmVyIGludG8gbWVtb3J5IChzdGFydGluZyBpdHMgc3luY2hyb25pemF0aW9uKSBhbmQgcmV0dXJucyBpdHMgbGl2ZSBzdGF0ZSwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBjb3VsZCBub3QgYmUgbG9hZGVkLiAqL1xuICAgIGFzeW5jIGFjdGl2YXRlQnVja2V0KGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBY3RpdmVCdWNrZXRJbmZvIHwgc3RyaW5nPiB7XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShidWNrZXROYW1lLCBcImJ1Y2tldCBuYW1lXCIpO1xuICAgICAgICByZXR1cm4gYXdhaXQgYWN0aXZhdGVCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdEJ1Y2tldHMgcmVwb3J0cywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBhc3luYyBjbGVhcldyaXRlU3RhdHMoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTx7IGNsZWFyZWRCdWNrZXRzOiBudW1iZXIgfT4ge1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgICAgICByZXR1cm4geyBjbGVhcmVkQnVja2V0czogYXdhaXQgY2xlYXJBY2NvdW50V3JpdGVTdGF0cyhhY2NvdW50KSB9O1xuICAgIH1cbiAgICBhc3luYyBnZXRJbmRleEluZm8oYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXQgfHwgIWJ1Y2tldC5zdG9yZS5jb21wdXRlSW5kZXhUb3RhbHMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBhd2FpdCBidWNrZXQuc3RvcmUuY29tcHV0ZUluZGV4VG90YWxzKCk7XG4gICAgfVxuICAgIGFzeW5jIGdldFN5bmNTdGF0dXMoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICBsZXQgYnVja2V0ID0gYXdhaXQgZ2V0QnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgcmV0dXJuIHsgYWxsU2NhbnNDb21wbGV0ZTogdHJ1ZSwgaW5kZXhTaXplOiAwLCBzb3VyY2VzOiBbXSB9O1xuICAgICAgICBpZiAoIWJ1Y2tldC5zdG9yZS5nZXRTeW5jU3RhdHVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCAke2FjY291bnR9LyR7YnVja2V0TmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBnZXRTeW5jU3RhdHVzIChyYXdEaXNrIGJ1Y2tldHMgaGF2ZSBubyBzeW5jaHJvbml6YXRpb24pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1Y2tldC5zdG9yZS5nZXRTeW5jU3RhdHVzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnRMYXJnZUZpbGUoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgYnVja2V0ID0gYXdhaXQgZ2V0QnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IGRvZXMgbm90IGV4aXN0LiBXcml0ZSBpdHMgcm91dGluZyBjb25maWcgdG8gJHtKU09OLnN0cmluZ2lmeShST1VUSU5HX0ZJTEUpfSB0byBjcmVhdGUgaXQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYXNzZXJ0TXV0YWJsZShidWNrZXQsIHBhdGgsIERhdGUubm93KCkpO1xuICAgICAgICBsZXQgaWQgPSBhd2FpdCBidWNrZXQuc3RvcmUuc3RhcnRMYXJnZVVwbG9hZCgpO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uc2V0KGlkLCB7IGFjY291bnQsIGJ1Y2tldE5hbWUsIHBhdGggfSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgYXN5bmMgdXBsb2FkUGFydCh1cGxvYWRJZDogc3RyaW5nLCBkYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQodXBsb2FkSWQpO1xuICAgICAgICBpZiAoIWluZm8pIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsYXJnZSB1cGxvYWQgJHt1cGxvYWRJZH1gKTtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCAke2luZm8uYWNjb3VudH0vJHtpbmZvLmJ1Y2tldE5hbWV9IG5vIGxvbmdlciBleGlzdHNgKTtcbiAgICAgICAgYXdhaXQgYnVja2V0LnN0b3JlLmFwcGVuZExhcmdlVXBsb2FkKHVwbG9hZElkLCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIGZpbmlzaExhcmdlRmlsZSh1cGxvYWRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KHVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7dXBsb2FkSWR9YCk7XG4gICAgICAgIGxhcmdlVXBsb2FkSW5mby5kZWxldGUodXBsb2FkSWQpO1xuICAgICAgICBsZXQgYnVja2V0ID0gYXdhaXQgZ2V0QnVja2V0KGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXQpIHRocm93IG5ldyBFcnJvcihgQnVja2V0ICR7aW5mby5hY2NvdW50fS8ke2luZm8uYnVja2V0TmFtZX0gbm8gbG9uZ2VyIGV4aXN0c2ApO1xuICAgICAgICBhd2FpdCBidWNrZXQuc3RvcmUuZmluaXNoTGFyZ2VVcGxvYWQodXBsb2FkSWQsIGluZm8ucGF0aCk7XG4gICAgfVxuICAgIGFzeW5jIGNhbmNlbExhcmdlRmlsZSh1cGxvYWRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBpbmZvID0gbGFyZ2VVcGxvYWRJbmZvLmdldCh1cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uZGVsZXRlKHVwbG9hZElkKTtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSByZXR1cm47XG4gICAgICAgIGF3YWl0IGJ1Y2tldC5zdG9yZS5jYW5jZWxMYXJnZVVwbG9hZCh1cGxvYWRJZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgaHR0cEVudHJ5KGNvbmZpZz86IHsgcmVxdWlyZUNhbGxzPzogc3RyaW5nW107IGNhY2hlVGltZT86IG51bWJlciB9KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgbGV0IGNhbGxlciA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpO1xuICAgICAgICBsZXQgcmVxdWVzdCA9IGdldEN1cnJlbnRIVFRQUmVxdWVzdCgpO1xuICAgICAgICBsZXQgcGF0aG5hbWUgPSBuZXcgVVJMKHJlcXVlc3Q/LnVybCB8fCBcIi9cIiwgXCJodHRwczovL2xvY2FsaG9zdFwiKS5wYXRobmFtZTtcbiAgICAgICAgaWYgKCFwYXRobmFtZS5zdGFydHNXaXRoKFwiL2ZpbGUvXCIpKSB7XG4gICAgICAgICAgICBsZXQgaHRtbCA9IGF3YWl0IHBlcmZvcm1Mb2NhbENhbGwoe1xuICAgICAgICAgICAgICAgIGNhbGxlcixcbiAgICAgICAgICAgICAgICBjYWxsOiB7IG5vZGVJZDogY2FsbGVyLm5vZGVJZCwgY2xhc3NHdWlkOiBSZXF1aXJlQ29udHJvbGxlci5fY2xhc3NHdWlkLCBmdW5jdGlvbk5hbWU6IFwicmVxdWlyZUhUTUxcIiwgYXJnczogW2NvbmZpZ10gfSxcbiAgICAgICAgICAgIH0pIGFzIEJ1ZmZlcjtcbiAgICAgICAgICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgYWNjZXNzIHBhZ2UgaXMgc2VydmVkIHdpdGggbm8gY29udGVudCB0eXBlLCBhbmQgYSBicm93c2VyIHRoYXQgaXMgdG9sZCBub3QgdG8gc25pZmYgc2ltcGx5IHdpbGwgbm90IHJlbmRlciBpdFxuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKGh0bWwsIHsgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFydHMgPSBwYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKHggPT4geCkubWFwKGRlY29kZVVSSUNvbXBvbmVudCk7XG4gICAgICAgIGxldCBhY2NvdW50ID0gcGFydHNbMV07XG4gICAgICAgIGxldCBidWNrZXROYW1lID0gcGFydHNbMl07XG4gICAgICAgIGxldCBmaWxlUGF0aCA9IHBhcnRzLnNsaWNlKDMpLmpvaW4oXCIvXCIpO1xuICAgICAgICBpZiAoIWFjY291bnQgfHwgIWJ1Y2tldE5hbWUgfHwgIWZpbGVQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgc3RhdHVzOiBcIjQwNFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShhY2NvdW50LCBcImFjY291bnRcIik7XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShidWNrZXROYW1lLCBcImJ1Y2tldCBuYW1lXCIpO1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgoZmlsZVBhdGgpO1xuICAgICAgICBsZXQgYnVja2V0ID0gYXdhaXQgZ2V0TG9hZGVkQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJ1Y2tldC5zZWxmPy5wdWJsaWMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQnVja2V0ICR7YWNjb3VudH0vJHtidWNrZXROYW1lfSBpcyBub3QgcHVibGljLCBzbyBpdHMgZmlsZXMgY2Fubm90IGJlIHJlYWQgb3ZlciBwbGFpbiBVUkxzYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZm8gPSBhd2FpdCBidWNrZXQuc3RvcmUuZ2V0SW5mbyhmaWxlUGF0aCk7XG4gICAgICAgIGlmICghaW5mbyB8fCAhaW5mby5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgc3RhdHVzOiBcIjQwNFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleHQgPSBmaWxlUGF0aC5zcGxpdChcIi5cIikucG9wKCkgfHwgXCJcIjtcbiAgICAgICAgbGV0IGhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBDT05URU5UX1RZUEVTW2V4dC50b0xvd2VyQ2FzZSgpXSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgICAgICAgXCJMYXN0LU1vZGlmaWVkXCI6IG5ldyBEYXRlKGluZm8ud3JpdGVUaW1lKS50b1VUQ1N0cmluZygpLFxuICAgICAgICAgICAgXCJBY2NlcHQtUmFuZ2VzXCI6IFwiYnl0ZXNcIixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGJ1Y2tldC5zZWxmPy5pbW11dGFibGUpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gYG1heC1hZ2U9JHtJTU1VVEFCTEVfQ0FDSEVfVElNRSAvIDEwMDB9YDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWZNb2RpZmllZFNpbmNlID0gcmVxdWVzdD8uaGVhZGVyc1tcImlmLW1vZGlmaWVkLXNpbmNlXCJdO1xuICAgICAgICBpZiAodHlwZW9mIGlmTW9kaWZpZWRTaW5jZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IHNpbmNlID0gbmV3IERhdGUoaWZNb2RpZmllZFNpbmNlKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBpZiAoc2luY2UgJiYgTWF0aC5mbG9vcihpbmZvLndyaXRlVGltZSAvIDEwMDApICogMTAwMCA8PSBzaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyAuLi5oZWFkZXJzLCBzdGF0dXM6IFwiMzA0XCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByYW5nZUhlYWRlciA9IHJlcXVlc3Q/LmhlYWRlcnNbXCJyYW5nZVwiXTtcbiAgICAgICAgaWYgKHR5cGVvZiByYW5nZUhlYWRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IG1hdGNoID0gL15ieXRlcz0oXFxkKiktKFxcZCopJC8uZXhlYyhyYW5nZUhlYWRlci50cmltKCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoICYmIChtYXRjaFsxXSB8fCBtYXRjaFsyXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBsZXQgZW5kSW5jbHVzaXZlID0gaW5mby5zaXplIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMCwgaW5mby5zaXplIC0gK21hdGNoWzJdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICttYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRJbmNsdXNpdmUgPSBNYXRoLm1pbigrbWF0Y2hbMl0sIGluZm8uc2l6ZSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBpbmZvLnNpemUgfHwgc3RhcnQgPiBlbmRJbmNsdXNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IC4uLmhlYWRlcnMsIFwiQ29udGVudC1SYW5nZVwiOiBgYnl0ZXMgKi8ke2luZm8uc2l6ZX1gLCBzdGF0dXM6IFwiNDE2XCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJhbmdlID0geyBzdGFydCwgZW5kOiBlbmRJbmNsdXNpdmUgKyAxIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGJ1Y2tldC5zdG9yZS5nZXQyKGZpbGVQYXRoLCB7IHJhbmdlIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhyZXN1bHQuZGF0YSwgeyAuLi5oZWFkZXJzLCBcIkNvbnRlbnQtUmFuZ2VcIjogYGJ5dGVzICR7cmFuZ2Uuc3RhcnR9LSR7cmFuZ2UuZW5kIC0gMX0vJHtpbmZvLnNpemV9YCwgc3RhdHVzOiBcIjIwNlwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhyZXN1bHQuZGF0YSwgaGVhZGVycyk7XG4gICAgfVxufVxuXG5jb25zdCBsYXJnZVVwbG9hZEluZm8gPSBuZXcgTWFwPHN0cmluZywgeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nIH0+KCk7XG5cbmNvbnN0IGFjY291bnRBY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKFN0cmluZyhjb250ZXh0LmNhbGwuYXJnc1swXSkpO1xuICAgIGxldCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgICBpZiAoZHVyYXRpb24gPiBBQ0NFU1NfQ0hFQ0tfU0xPV19USU1FKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBY2Nlc3MgY2hlY2sgZm9yICR7Y29udGV4dC5jYWxsLmZ1bmN0aW9uTmFtZX0gdG9vayAke2R1cmF0aW9ufW1zYCk7XG4gICAgfVxufTtcbmNvbnN0IHVwbG9hZEFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoU3RyaW5nKGNvbnRleHQuY2FsbC5hcmdzWzBdKSk7XG4gICAgaWYgKCFpbmZvKSByZXR1cm47XG4gICAgYXdhaXQgcmVxdWlyZUFjY2VzcyhpbmZvLmFjY291bnQpO1xufTtcbmNvbnN0IGFkbWluQWNjZXNzOiBTb2NrZXRGdW5jdGlvbkhvb2sgPSBhc3luYyAoKSA9PiB7XG4gICAgcmVxdWlyZUFkbWluKCk7XG59O1xuXG5leHBvcnQgY29uc3QgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIgPSBTb2NrZXRGdW5jdGlvbi5yZWdpc3RlcihcbiAgICBSRU1PVEVfU1RPUkFHRV9DTEFTU19HVUlELFxuICAgIG5ldyBSZW1vdGVTdG9yYWdlQ29udHJvbGxlckJhc2UoKSxcbiAgICAoKSA9PiAoe1xuICAgICAgICBwaW5nOiB7fSxcbiAgICAgICAgYXV0aGVudGljYXRlOiB7fSxcbiAgICAgICAgcmVxdWVzdEFjY2Vzczoge30sXG4gICAgICAgIGdldEFjY2Vzc1N0YXRlOiB7fSxcbiAgICAgICAgbGlzdFJlcXVlc3RzRm9ySVA6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBncmFudEFjY2Vzczoge30sXG4gICAgICAgIGFkbWluTGlzdFJlcXVlc3RzOiB7IGhvb2tzOiBbYWRtaW5BY2Nlc3NdIH0sXG4gICAgICAgIGFkbWluTGlzdEFjdGl2ZUJ1Y2tldHM6IHsgaG9va3M6IFthZG1pbkFjY2Vzc10gfSxcbiAgICAgICAgYWRtaW5HcmFudEFjY2VzczogeyBob29rczogW2FkbWluQWNjZXNzXSB9LFxuICAgICAgICBnZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXQyOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgc2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZGVsOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0SW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGZpbmRJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0Q2hhbmdlc0FmdGVyOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QXJjaGl2ZXNDb25maWc6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRJbmRleEluZm86IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBsaXN0QnVja2V0czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFjdGl2ZUJ1Y2tldDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGFjdGl2YXRlQnVja2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgY2xlYXJXcml0ZVN0YXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0U3luY1N0YXR1czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIHN0YXJ0TGFyZ2VGaWxlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgdXBsb2FkUGFydDogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgZmluaXNoTGFyZ2VGaWxlOiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBjYW5jZWxMYXJnZUZpbGU6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGh0dHBFbnRyeToge30sXG4gICAgfSksXG4gICAgKCkgPT4gKHtcbiAgICAgICAgbm9DbGllbnRIb29rczogdHJ1ZSxcbiAgICAgICAgbm9EZWZhdWx0SG9va3M6IHRydWUsXG4gICAgfSlcbik7XG4iXX0=
510
- /* _JS_SOURCE_HASH = "69ad0ac723e95e661323c17b7f1b37093a7537281d78e5e8aec7b671759536f6"; */
506
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBa0k7QUFDbEksNENBQTZIO0FBQzdILGlEQUE4QztBQUM5Qyw2REFLOEI7QUFDOUIsdUVBQW9FO0FBRXZELFFBQUEseUJBQXlCLEdBQUcsa0NBQWtDLENBQUM7QUFDL0QsUUFBQSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUM5QyxRQUFBLHlCQUF5QixHQUFHLDJDQUEyQyxDQUFDO0FBQ3hFLFFBQUEscUJBQXFCLEdBQUcsdUNBQXVDLENBQUM7QUFFN0UsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBWSxHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBaUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUUzQyxNQUFNLGFBQWEsR0FBOEI7SUFDN0MsSUFBSSxFQUFFLDBCQUEwQixFQUFFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLGlDQUFpQztJQUMvSSxHQUFHLEVBQUUsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVc7SUFDM0csR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFlBQVk7SUFDOUUsR0FB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QUFZLENBQUMsRUFBRTtJQUMxQyxTQUFTLEVBQUUsRUFBRTtDQUNoQixDQUFDLEVBQ0YsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNILGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3ZCLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbkhvb2sgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uVHlwZXNcIjtcbmltcG9ydCB7IGdldE5vZGVJZElQIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBzZXRIVFRQUmVzdWx0SGVhZGVycywgZ2V0Q3VycmVudEhUVFBSZXF1ZXN0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbEhUVFBIYW5kbGVyXCI7XG5pbXBvcnQgeyBwZXJmb3JtTG9jYWxDYWxsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbE1hbmFnZXJcIjtcbmltcG9ydCB7IFJlcXVpcmVDb250cm9sbGVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL1JlcXVpcmVDb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0aW1lSW5NaW51dGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBnZXRDb21tb25OYW1lLCBnZXRQdWJsaWNJZGVudGlmaWVyLCBnZXRPd25NYWNoaW5lSWQsIHZlcmlmeSwgdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5IH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcbmltcG9ydCB7IEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgQ2hhbmdlc0FmdGVyQ29uZmlnLCBJTU1VVEFCTEVfQ0FDSEVfVElNRSB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IFJPVVRJTkdfRklMRSB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgICBnZXRTdG9yYWdlU2VydmVyQ29uZmlnLCBnZXRUcnVzdCwgZ2V0UmVxdWVzdHMsIGdldExvYWRlZEJ1Y2tldCwgd3JpdGVCdWNrZXRGaWxlLFxuICAgIGRlbGV0ZUJ1Y2tldEZpbGUsIGFzc2VydFdyaXRlc0FsbG93ZWQsIGFzc2VydE11dGFibGUsIExvYWRlZEJ1Y2tldCxcbiAgICBnZXRCdWNrZXRDb25maWcsIGxpc3RBY2NvdW50QnVja2V0cywgU2VydmVyQnVja2V0SW5mbywgY2xlYXJBY2NvdW50V3JpdGVTdGF0cyxcbiAgICBnZXRBY3RpdmVCdWNrZXQsIGFjdGl2YXRlQnVja2V0LCBBY3RpdmVCdWNrZXRJbmZvLCBnZXRBY3RpdmVCdWNrZXRLZXlzLFxufSBmcm9tIFwiLi9zdG9yYWdlU2VydmVyU3RhdGVcIjtcbmltcG9ydCB7IFN0b3JhZ2VDbGllbnRDb250cm9sbGVyIH0gZnJvbSBcIi4vc3RvcmFnZUNsaWVudENvbnRyb2xsZXJcIjtcblxuZXhwb3J0IGNvbnN0IFJFTU9URV9TVE9SQUdFX0NMQVNTX0dVSUQgPSBcIlJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLWI3ZTQyYTkxXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9BVVRIX1BVUlBPU0UgPSBcInJlbW90ZVN0b3JhZ2UtYXV0aC0xXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCA9IFwiUkVNT1RFX1NUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURURfY2YyZjdiMWVcIjtcbmV4cG9ydCBjb25zdCBTVE9SQUdFX0FDQ0VTU19ERU5JRUQgPSBcIlJFTU9URV9TVE9SQUdFX0FDQ0VTU19ERU5JRURfOWQ4MWE0YzBcIjtcblxuY29uc3QgQVVUSF9USU1FX1dJTkRPVyA9IHRpbWVJbk1pbnV0ZSAqIDEwO1xuY29uc3QgQUNDRVNTX0NIRUNLX1NMT1dfVElNRSA9IDUwO1xuY29uc3QgTUFYX1NFU1NJT05TID0gMTAwICogMTAwMDtcbmNvbnN0IE1BWF9SRVFVRVNUU19QRVJfSVAgPSA1MDtcblxuZXhwb3J0IHR5cGUgQXV0aFRva2VuRGF0YSA9IHtcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgdGltZTogbnVtYmVyO1xuICAgIHNlcnZlcjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEF1dGhUb2tlbiA9IHtcbiAgICBjZXJ0UGVtOiBzdHJpbmc7XG4gICAgc2lnbmF0dXJlOiBzdHJpbmc7XG4gICAgZGF0YTogQXV0aFRva2VuRGF0YTtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NSZXF1ZXN0ID0ge1xuICAgIHJlcXVlc3RJZDogc3RyaW5nO1xuICAgIGFjY291bnQ6IHN0cmluZztcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIHRpbWU6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBUcnVzdFJlY29yZCA9IHtcbiAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICB0aW1lOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgQWNjZXNzU3RhdGUgPSB7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICBoYXNBY2Nlc3M6IGJvb2xlYW47XG4gICAgZ3JhbnRBY2Nlc3NDb21tYW5kPzogc3RyaW5nO1xuICAgIHRydXN0ZWRNYWNoaW5lcz86IFRydXN0UmVjb3JkW107XG59O1xuXG5jb25zdCBzZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbmNvbnN0IENPTlRFTlRfVFlQRVM6IHsgW2V4dDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgaHRtbDogXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIiwganM6IFwidGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04XCIsIGNzczogXCJ0ZXh0L2NzczsgY2hhcnNldD11dGYtOFwiLCBqc29uOiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIixcbiAgICB0eHQ6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiLCBwbmc6IFwiaW1hZ2UvcG5nXCIsIGpwZzogXCJpbWFnZS9qcGVnXCIsIGpwZWc6IFwiaW1hZ2UvanBlZ1wiLCBnaWY6IFwiaW1hZ2UvZ2lmXCIsXG4gICAgc3ZnOiBcImltYWdlL3N2Zyt4bWxcIiwgd2VicDogXCJpbWFnZS93ZWJwXCIsIG1wNDogXCJ2aWRlby9tcDRcIiwgd2VibTogXCJ2aWRlby93ZWJtXCIsXG4gICAgbXAzOiBcImF1ZGlvL21wZWdcIiwgd2F2OiBcImF1ZGlvL3dhdlwiLCBwZGY6IFwiYXBwbGljYXRpb24vcGRmXCIsXG59O1xuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZE5hbWUodmFsdWU6IHN0cmluZywga2luZDogc3RyaW5nKSB7XG4gICAgaWYgKCEvXltcXHctXXsxLDY0fSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke2tpbmR9ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSwgZXhwZWN0ZWQgMS02NCBjaGFyYWN0ZXJzIG9mIGxldHRlcnMvbnVtYmVycy91bmRlcnNjb3JlL2Rhc2hgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhc3NlcnRWYWxpZFBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKEJ1ZmZlci5mcm9tKHBhdGgsIFwidXRmOFwiKS5sZW5ndGggPiAxMDAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCB0b28gbG9uZzogJHtwYXRoLmxlbmd0aH0gY2hhcmFjdGVycyA+IDEwMDAuIFBhdGg6ICR7cGF0aC5zbGljZSgwLCAyMDApfWApO1xuICAgIH1cbiAgICBpZiAoIXBhdGggfHwgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSB8fCBwYXRoLmVuZHNXaXRoKFwiL1wiKSB8fCBwYXRoLmluY2x1ZGVzKFwiLy9cIikgfHwgcGF0aC5pbmNsdWRlcyhcIlxcXFxcIikgfHwgcGF0aC5pbmNsdWRlcyhcIlxceDAwXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXRoICR7SlNPTi5zdHJpbmdpZnkocGF0aC5zbGljZSgwLCAyMDApKX0sIHBhdGhzIGNhbm5vdCBiZSBlbXB0eSwgc3RhcnQgb3IgZW5kIHdpdGggLywgb3IgY29udGFpbiAvLywgYmFja3NsYXNoZXMsIG9yIG51bGwgY2hhcmFjdGVyc2ApO1xuICAgIH1cbiAgICBpZiAocGF0aC5zcGxpdChcIi9cIikuc29tZShwYXJ0ID0+IHBhcnQgPT09IFwiLlwiIHx8IHBhcnQgPT09IFwiLi5cIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhdGggJHtKU09OLnN0cmluZ2lmeShwYXRoLnNsaWNlKDAsIDIwMCkpfSwgcGF0aHMgY2Fubm90IGNvbnRhaW4gLiBvciAuLiBzZWdtZW50c2ApO1xuICAgIH1cbn1cblxuY29uc3QgY29ubmVjdGVkQ2xpZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuZnVuY3Rpb24gdHJhY2tDYWxsZXIoKTogdm9pZCB7XG4gICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpLm5vZGVJZDtcbiAgICBpZiAoY29ubmVjdGVkQ2xpZW50cy5oYXMobm9kZUlkKSkgcmV0dXJuO1xuICAgIGNvbm5lY3RlZENsaWVudHMuYWRkKG5vZGVJZCk7XG4gICAgU29ja2V0RnVuY3Rpb24ub25OZXh0RGlzY29ubmVjdChub2RlSWQsICgpID0+IHtcbiAgICAgICAgY29ubmVjdGVkQ2xpZW50cy5kZWxldGUobm9kZUlkKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdFJvdXRpbmdDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGBCcm9hZGNhc3Rpbmcgcm91dGluZyBjb25maWcgY2hhbmdlIHRvICR7Y29ubmVjdGVkQ2xpZW50cy5zaXplfSBjb25uZWN0ZWQgY2xpZW50c2ApO1xuICAgIGZvciAobGV0IG5vZGVJZCBvZiBbLi4uY29ubmVjdGVkQ2xpZW50c10pIHtcbiAgICAgICAgdm9pZCBTdG9yYWdlQ2xpZW50Q29udHJvbGxlci5ub2Rlc1tub2RlSWRdLnJvdXRpbmdDb25maWdDaGFuZ2VkKCkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldENhbGxlck1hY2hpbmVJZCgpOiBzdHJpbmcge1xuICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICBsZXQgbWFjaGluZUlkID0gc2Vzc2lvbnMuZ2V0KGNhbGxlci5ub2RlSWQpO1xuICAgIGlmICghbWFjaGluZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEfSBDYWxsIGF1dGhlbnRpY2F0ZSBmaXJzdCAoY29ubmVjdGlvbiAke2NhbGxlci5ub2RlSWR9KWApO1xuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZUlkO1xufVxuZnVuY3Rpb24gZ2V0Q2FsbGVySVAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0Tm9kZUlkSVAoU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCkubm9kZUlkKTtcbn1cbmZ1bmN0aW9uIGlzQWRtaW4obWFjaGluZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFjaGluZUlkID09PSBnZXRPd25NYWNoaW5lSWQoZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpLnJvb3REb21haW4pO1xufVxuZnVuY3Rpb24gcmVxdWlyZUFkbWluKCk6IHN0cmluZyB7XG4gICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgIGlmICghaXNBZG1pbihtYWNoaW5lSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9IEFkbWluIGNvbW1hbmRzIG11c3QgYmUgcnVuIGZyb20gdGhlIHN0b3JhZ2UgbWFjaGluZSBpdHNlbGYgKGNhbGxlciBtYWNoaW5lICR7bWFjaGluZUlkfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVBY2Nlc3MoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhc3NlcnRWYWxpZE5hbWUoYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICBpZiAoaXNBZG1pbihtYWNoaW5lSWQpKSByZXR1cm4gbWFjaGluZUlkO1xuICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgbGV0IHRydXN0ZWQgPSBhd2FpdCB0cnVzdC5nZXQoYCR7YWNjb3VudH18JHttYWNoaW5lSWR9YCk7XG4gICAgaWYgKCF0cnVzdGVkKSB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgcG9ydCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9BQ0NFU1NfREVOSUVEfSBNYWNoaW5lICR7bWFjaGluZUlkfSBoYXMgbm8gYWNjZXNzIHRvIGFjY291bnQgJHtKU09OLnN0cmluZ2lmeShhY2NvdW50KX0uIFZpc2l0IGh0dHBzOi8vJHtkb21haW59OiR7cG9ydH0vJHthY2NvdW50fSBmb3IgYWNjZXNzIGluc3RydWN0aW9ucy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cblxuZnVuY3Rpb24gZ2V0R3JhbnRBY2Nlc3NDb21tYW5kKHJlcXVlc3RJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgeyBzc2hUYXJnZXQsIHNlcnZlckNvbW1hbmQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICByZXR1cm4gYHNzaCAke3NzaFRhcmdldH0gJyR7c2VydmVyQ29tbWFuZH0gLS1yZXF1ZXN0SWQgJHtyZXF1ZXN0SWR9J2A7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8TG9hZGVkQnVja2V0IHwgdW5kZWZpbmVkPiB7XG4gICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICBhc3NlcnRWYWxpZE5hbWUoYnVja2V0TmFtZSwgXCJidWNrZXQgbmFtZVwiKTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0TG9hZGVkQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xufVxuXG5jbGFzcyBSZW1vdGVTdG9yYWdlQ29udHJvbGxlckJhc2Uge1xuICAgIGFzeW5jIHBpbmcoKTogUHJvbWlzZTx7fT4ge1xuICAgICAgICB0cmFja0NhbGxlcigpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgYXN5bmMgYXV0aGVudGljYXRlKHRva2VuOiBBdXRoVG9rZW4pOiBQcm9taXNlPHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmcgfT4ge1xuICAgICAgICBsZXQgeyBkb21haW4sIHBvcnQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpO1xuICAgICAgICB2ZXJpZnkodG9rZW4uY2VydFBlbSwgdG9rZW4uc2lnbmF0dXJlLCB0b2tlbi5kYXRhKTtcbiAgICAgICAgbGV0IHsgcHVycG9zZSwgdGltZSwgc2VydmVyIH0gPSB0b2tlbi5kYXRhO1xuICAgICAgICBpZiAocHVycG9zZSAhPT0gU1RPUkFHRV9BVVRIX1BVUlBPU0UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiBwdXJwb3NlIGlzICR7SlNPTi5zdHJpbmdpZnkocHVycG9zZSl9LCBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KFNUT1JBR0VfQVVUSF9QVVJQT1NFKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWF0aC5hYnMoRGF0ZS5ub3coKSAtIHRpbWUpID4gQVVUSF9USU1FX1dJTkRPVykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIHRpbWUgaXMgdG9vIGZhciBmcm9tIHRoZSBzZXJ2ZXIgdGltZSAodG9rZW4gJHt0aW1lfSwgc2VydmVyICR7RGF0ZS5ub3coKX0sIGFsbG93ZWQgZHJpZnQgJHtBVVRIX1RJTUVfV0lORE9XfW1zKWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b2tlbkRvbWFpbiA9IHNlcnZlci5zcGxpdChcIjpcIilbMF07XG4gICAgICAgIGlmICh0b2tlbkRvbWFpbiAhPT0gZG9tYWluKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gaXMgZm9yIHNlcnZlciAke0pTT04uc3RyaW5naWZ5KHNlcnZlcil9LCBidXQgdGhpcyBzZXJ2ZXIgaXMgJHtKU09OLnN0cmluZ2lmeShgJHtkb21haW59OiR7cG9ydH1gKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q29tbW9uTmFtZSh0b2tlbi5jZXJ0UGVtKS5zcGxpdChcIi5cIilbMF07XG4gICAgICAgIGlmICghdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5KHsgbWFjaGluZUlkLCBwdWJsaWNLZXk6IGdldFB1YmxpY0lkZW50aWZpZXIodG9rZW4uY2VydFBlbSkgfSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgY29tbW9uIG5hbWUgJHtKU09OLnN0cmluZ2lmeShnZXRDb21tb25OYW1lKHRva2VuLmNlcnRQZW0pKX0gZG9lcyBub3QgbWF0Y2ggaXRzIHB1YmxpYyBrZXlgKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9ucy5zZXQoY2FsbGVyLm5vZGVJZCwgbWFjaGluZUlkKTtcbiAgICAgICAgd2hpbGUgKHNlc3Npb25zLnNpemUgPiBNQVhfU0VTU0lPTlMpIHtcbiAgICAgICAgICAgIGxldCBvbGRlc3QgPSBzZXNzaW9ucy5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgaWYgKG9sZGVzdCA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICAgIHNlc3Npb25zLmRlbGV0ZShvbGRlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgaXA6IGdldENhbGxlcklQKCkgfTtcbiAgICB9XG5cbiAgICBhc3luYyByZXF1ZXN0QWNjZXNzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZzsgcmVxdWVzdElkOiBzdHJpbmc7IGdyYW50QWNjZXNzQ29tbWFuZDogc3RyaW5nIH0+IHtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgICAgICBsZXQgaXAgPSBnZXRDYWxsZXJJUCgpO1xuICAgICAgICBsZXQgcmVxdWVzdHNTdG9yYWdlID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgcmVxdWVzdHNTdG9yYWdlLmdldChpcCkgfHwgW107XG4gICAgICAgIGxldCBleGlzdGluZyA9IHJlcXVlc3RzLmZpbmQoeCA9PiB4LmFjY291bnQgPT09IGFjY291bnQgJiYgeC5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgZXhpc3RpbmcudGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleGlzdGluZyA9IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKSxcbiAgICAgICAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgICAgICAgIG1hY2hpbmVJZCxcbiAgICAgICAgICAgICAgICBpcCxcbiAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVlc3RzLnB1c2goZXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChyZXF1ZXN0cy5sZW5ndGggPiBNQVhfUkVRVUVTVFNfUEVSX0lQKSByZXF1ZXN0cy5zaGlmdCgpO1xuICAgICAgICBhd2FpdCByZXF1ZXN0c1N0b3JhZ2Uuc2V0KGlwLCByZXF1ZXN0cyk7XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgaXAsIHJlcXVlc3RJZDogZXhpc3RpbmcucmVxdWVzdElkLCBncmFudEFjY2Vzc0NvbW1hbmQ6IGdldEdyYW50QWNjZXNzQ29tbWFuZChleGlzdGluZy5yZXF1ZXN0SWQpIH07XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWNjZXNzU3RhdGUoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxBY2Nlc3NTdGF0ZT4ge1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgICAgIGxldCBpcCA9IGdldENhbGxlcklQKCk7XG4gICAgICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgICAgIGxldCBoYXNBY2Nlc3MgPSBpc0FkbWluKG1hY2hpbmVJZCkgfHwgISFhd2FpdCB0cnVzdC5nZXQoYCR7YWNjb3VudH18JHttYWNoaW5lSWR9YCk7XG4gICAgICAgIGxldCByZXN1bHQ6IEFjY2Vzc1N0YXRlID0geyBtYWNoaW5lSWQsIGlwLCBoYXNBY2Nlc3MgfTtcbiAgICAgICAgaWYgKCFoYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgICAgICBsZXQgb3duUmVxdWVzdCA9IChhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdKS5maW5kKHggPT4geC5hY2NvdW50ID09PSBhY2NvdW50ICYmIHgubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICAgICAgaWYgKG93blJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZ3JhbnRBY2Nlc3NDb21tYW5kID0gZ2V0R3JhbnRBY2Nlc3NDb21tYW5kKG93blJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHJ1c3RlZE1hY2hpbmVzOiBUcnVzdFJlY29yZFtdID0gW107XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBhd2FpdCB0cnVzdC5nZXRLZXlzKCkpIHtcbiAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYCR7YWNjb3VudH18YCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHJlY29yZCA9IGF3YWl0IHRydXN0LmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHJlY29yZCkgdHJ1c3RlZE1hY2hpbmVzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQudHJ1c3RlZE1hY2hpbmVzID0gdHJ1c3RlZE1hY2hpbmVzO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGxpc3RSZXF1ZXN0c0ZvcklQKGFjY291bnQ6IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QWNjZXNzUmVxdWVzdFtdPiB7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVxdWVzdHMuZ2V0KGlwKSB8fCBbXSkuZmlsdGVyKHggPT4geC5hY2NvdW50ID09PSBhY2NvdW50KTtcbiAgICB9XG5cbiAgICBhc3luYyBncmFudEFjY2VzcyhyZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8VHJ1c3RSZWNvcmQ+IHtcbiAgICAgICAgbGV0IGNhbGxlck1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgICAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICBmb3IgKGxldCBpcCBvZiBhd2FpdCByZXF1ZXN0cy5nZXRLZXlzKCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgYXdhaXQgcmVxdWVzdHMuZ2V0KGlwKSB8fCBbXSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlcXVlc3RJZCAhPT0gcmVxdWVzdElkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWRtaW4oY2FsbGVyTWFjaGluZUlkKSAmJiAhYXdhaXQgdHJ1c3QuZ2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtjYWxsZXJNYWNoaW5lSWR9YCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NUT1JBR0VfQUNDRVNTX0RFTklFRH0gTWFjaGluZSAke2NhbGxlck1hY2hpbmVJZH0gaGFzIG5vIGFjY2VzcyB0byBhY2NvdW50ICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdC5hY2NvdW50KX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHJlY29yZDogVHJ1c3RSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQ6IHJlcXVlc3QuYWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZXF1ZXN0Lm1hY2hpbmVJZCxcbiAgICAgICAgICAgICAgICAgICAgaXA6IHJlcXVlc3QuaXAsXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0cnVzdC5zZXQoYCR7cmVxdWVzdC5hY2NvdW50fXwke3JlcXVlc3QubWFjaGluZUlkfWAsIHJlY29yZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGFjY2VzcyByZXF1ZXN0IGZvdW5kIHdpdGggaWQgJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0SWQpfS4gSXQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGdyYW50ZWQgb3IgZXhwaXJlZC5gKTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW4gKHNvIG9ubHkgdGhpcyBtYWNoaW5lJ3Mgb3duIHByb2Nlc3NlcyBjYW4gY2FsbCBpdCk6IHRoZSBidWNrZXRzIHRoaXMgcHJvY2VzcyBoYXMgbG9hZGVkLiBBIGRlcGxveSBzdWNjZXNzb3IgYXNrcyBpdHMgcHJlZGVjZXNzb3IgZm9yIHRoaXMsIHNvIGl0IGFjdGl2YXRlcyBleGFjdGx5IHRoZSBidWNrZXRzIHRoYXQgYXJlIGluIHVzZSBpbnN0ZWFkIG9mIGV2ZXJ5IGJ1Y2tldCBvbiBkaXNrLiAqL1xuICAgIGFzeW5jIGFkbWluTGlzdEFjdGl2ZUJ1Y2tldHMoKTogUHJvbWlzZTx7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH1bXT4ge1xuICAgICAgICByZXR1cm4gZ2V0QWN0aXZlQnVja2V0S2V5cygpO1xuICAgIH1cbiAgICBhc3luYyBhZG1pbkxpc3RSZXF1ZXN0cyhpcDogc3RyaW5nKTogUHJvbWlzZTxBY2Nlc3NSZXF1ZXN0W10+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3RzLmdldChpcCkgfHwgW107XG4gICAgfVxuICAgIGFzeW5jIGFkbWluR3JhbnRBY2Nlc3MocmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFRydXN0UmVjb3JkPiB7XG4gICAgICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGZvciAobGV0IGlwIG9mIGF3YWl0IHJlcXVlc3RzLmdldEtleXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcmVxdWVzdCBvZiBhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCByZWNvcmQ6IFRydXN0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50OiByZXF1ZXN0LmFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdC5tYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgICAgIGlwOiByZXF1ZXN0LmlwLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdHJ1c3Quc2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtyZXF1ZXN0Lm1hY2hpbmVJZH1gLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBhY2Nlc3MgcmVxdWVzdCBmb3VuZCB3aXRoIGlkICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdElkKX0uIEl0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBncmFudGVkIG9yIGV4cGlyZWQuYCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0KGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9KTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihhY2NvdW50LCBidWNrZXROYW1lLCBwYXRoLCByYW5nZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBhc3luYyBnZXQyKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBhd2FpdCBidWNrZXQuc3RvcmUuZ2V0MihwYXRoLCB7IHJhbmdlIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZXQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyLCBsYXN0TW9kaWZpZWQ/OiBudW1iZXIsIGZvcmNlU2V0SW1tdXRhYmxlPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYnVja2V0TmFtZSwgXCJidWNrZXQgbmFtZVwiKTtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKHBhdGgpO1xuICAgICAgICBhd2FpdCB3cml0ZUJ1Y2tldEZpbGUoYWNjb3VudCwgYnVja2V0TmFtZSwgcGF0aCwgQnVmZmVyLmZyb20oZGF0YSksIHsgbGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZSB9KTtcbiAgICB9XG4gICAgYXN5bmMgZGVsKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGJ1Y2tldE5hbWUsIFwiYnVja2V0IG5hbWVcIik7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChwYXRoKTtcbiAgICAgICAgYXdhaXQgZGVsZXRlQnVja2V0RmlsZShhY2NvdW50LCBidWNrZXROYW1lLCBwYXRoKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0SW5mbyhhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgocGF0aCk7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0LnN0b3JlLmdldEluZm8ocGF0aCk7XG4gICAgfVxuICAgIGFzeW5jIGZpbmRJbmZvKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgY29uZmlnPzogeyBzaGFsbG93PzogYm9vbGVhbjsgdHlwZT86IFwiZmlsZXNcIiB8IFwiZm9sZGVyc1wiIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiBhd2FpdCBidWNrZXQuc3RvcmUuZmluZEluZm8ocHJlZml4LCBjb25maWcpO1xuICAgIH1cbiAgICBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBjb25maWc6IENoYW5nZXNBZnRlckNvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXQpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1Y2tldC5zdG9yZS5nZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZyk7XG4gICAgfVxuICAgIGFzeW5jIGdldEFyY2hpdmVzQ29uZmlnKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgICAgICBsZXQgYnVja2V0ID0gYXdhaXQgZ2V0QnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgcmV0dXJuIHsgc3VwcG9ydHNDaGFuZ2VzQWZ0ZXI6IHRydWUgfTtcbiAgICAgICAgcmV0dXJuIGdldEJ1Y2tldENvbmZpZyhidWNrZXQpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0QnVja2V0cyhhY2NvdW50OiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlckJ1Y2tldEluZm9bXT4ge1xuICAgICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGxpc3RBY2NvdW50QnVja2V0cyhhY2NvdW50KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIFRoZSBhY2Nlc3MgaG9vayAoYW5kIHRoZSBzdG9yYWdlIGl0IGluaXRpYWxpemVzKSBydW5zIGJlZm9yZSB0aGlzLCBzbyBhIGxhcmdlIGdhcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBjYWxsZXIncyB0aW1pbmcgaXMgdGhlIGhvb2tcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBsaXN0QnVja2V0cygke2FjY291bnR9KSBjYWxsIGJvZHkgdG9vayAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBUaGUgbGl2ZSwgaW4tbWVtb3J5IHN0YXRlIG9mIG9uZSBidWNrZXQsIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgaXMgdW5hdmFpbGFibGUuIEFuc3dlcmVkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGRpc2ssIHNvIGl0IGlzIGNoZWFwIC0gYnV0IG9ubHkgd29ya3Mgd2hpbGUgdGhlIGJ1Y2tldCBpcyBsb2FkZWQgaGVyZS4gKi9cbiAgICBhc3luYyBnZXRBY3RpdmVCdWNrZXQoYWNjb3VudDogc3RyaW5nLCBidWNrZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGJ1Y2tldE5hbWUsIFwiYnVja2V0IG5hbWVcIik7XG4gICAgICAgIHJldHVybiBhd2FpdCBnZXRBY3RpdmVCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBMb2FkcyBhIGJ1Y2tldCB0aGF0IGV4aXN0cyBvbiB0aGlzIHNlcnZlciBpbnRvIG1lbW9yeSAoc3RhcnRpbmcgaXRzIHN5bmNocm9uaXphdGlvbikgYW5kIHJldHVybnMgaXRzIGxpdmUgc3RhdGUsIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgY291bGQgbm90IGJlIGxvYWRlZC4gKi9cbiAgICBhc3luYyBhY3RpdmF0ZUJ1Y2tldChhY2NvdW50OiBzdHJpbmcsIGJ1Y2tldE5hbWU6IHN0cmluZyk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYnVja2V0TmFtZSwgXCJidWNrZXQgbmFtZVwiKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGFjdGl2YXRlQnVja2V0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICAvKiogWmVyb2VzIHRoZSB3cml0ZSBzdGF0aXN0aWNzIGxpc3RCdWNrZXRzIHJlcG9ydHMsIGZvciBldmVyeSBidWNrZXQgaW4gdGhlIGFjY291bnQuICovXG4gICAgYXN5bmMgY2xlYXJXcml0ZVN0YXRzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIHsgY2xlYXJlZEJ1Y2tldHM6IGF3YWl0IGNsZWFyQWNjb3VudFdyaXRlU3RhdHMoYWNjb3VudCkgfTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0SW5kZXhJbmZvKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTx7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlcjsgc291cmNlczogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXSB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0IHx8ICFidWNrZXQuc3RvcmUuY29tcHV0ZUluZGV4VG90YWxzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0LnN0b3JlLmNvbXB1dGVJbmRleFRvdGFscygpO1xuICAgIH1cbiAgICBhc3luYyBnZXRTeW5jU3RhdHVzKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXQpIHJldHVybiB7IGFsbFNjYW5zQ29tcGxldGU6IHRydWUsIGluZGV4U2l6ZTogMCwgc291cmNlczogW10gfTtcbiAgICAgICAgaWYgKCFidWNrZXQuc3RvcmUuZ2V0U3luY1N0YXR1cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZ2V0U3luY1N0YXR1cyAocmF3RGlzayBidWNrZXRzIGhhdmUgbm8gc3luY2hyb25pemF0aW9uKWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBidWNrZXQuc3RvcmUuZ2V0U3luY1N0YXR1cygpO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0TGFyZ2VGaWxlKGFjY291bnQ6IHN0cmluZywgYnVja2V0TmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQnVja2V0ICR7YWNjb3VudH0vJHtidWNrZXROYW1lfSBkb2VzIG5vdCBleGlzdC4gV3JpdGUgaXRzIHJvdXRpbmcgY29uZmlnIHRvICR7SlNPTi5zdHJpbmdpZnkoUk9VVElOR19GSUxFKX0gdG8gY3JlYXRlIGl0LmApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGFzc2VydE11dGFibGUoYnVja2V0LCBwYXRoLCBEYXRlLm5vdygpKTtcbiAgICAgICAgbGV0IGlkID0gYXdhaXQgYnVja2V0LnN0b3JlLnN0YXJ0TGFyZ2VVcGxvYWQoKTtcbiAgICAgICAgbGFyZ2VVcGxvYWRJbmZvLnNldChpZCwgeyBhY2NvdW50LCBidWNrZXROYW1lLCBwYXRoIH0pO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICAgIGFzeW5jIHVwbG9hZFBhcnQodXBsb2FkSWQ6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KHVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7dXBsb2FkSWR9YCk7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoaW5mby5hY2NvdW50LCBpbmZvLmJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHtpbmZvLmFjY291bnR9LyR7aW5mby5idWNrZXROYW1lfSBubyBsb25nZXIgZXhpc3RzYCk7XG4gICAgICAgIGF3YWl0IGJ1Y2tldC5zdG9yZS5hcHBlbmRMYXJnZVVwbG9hZCh1cGxvYWRJZCwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBmaW5pc2hMYXJnZUZpbGUodXBsb2FkSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBpbmZvID0gbGFyZ2VVcGxvYWRJbmZvLmdldCh1cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke3VwbG9hZElkfWApO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uZGVsZXRlKHVwbG9hZElkKTtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldEJ1Y2tldChpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0KSB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCAke2luZm8uYWNjb3VudH0vJHtpbmZvLmJ1Y2tldE5hbWV9IG5vIGxvbmdlciBleGlzdHNgKTtcbiAgICAgICAgYXdhaXQgYnVja2V0LnN0b3JlLmZpbmlzaExhcmdlVXBsb2FkKHVwbG9hZElkLCBpbmZvLnBhdGgpO1xuICAgIH1cbiAgICBhc3luYyBjYW5jZWxMYXJnZUZpbGUodXBsb2FkSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQodXBsb2FkSWQpO1xuICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcbiAgICAgICAgbGFyZ2VVcGxvYWRJbmZvLmRlbGV0ZSh1cGxvYWRJZCk7XG4gICAgICAgIGxldCBidWNrZXQgPSBhd2FpdCBnZXRCdWNrZXQoaW5mby5hY2NvdW50LCBpbmZvLmJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCBidWNrZXQuc3RvcmUuY2FuY2VsTGFyZ2VVcGxvYWQodXBsb2FkSWQpO1xuICAgIH1cblxuICAgIGFzeW5jIGh0dHBFbnRyeShjb25maWc/OiB7IHJlcXVpcmVDYWxscz86IHN0cmluZ1tdOyBjYWNoZVRpbWU/OiBudW1iZXIgfSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSBnZXRDdXJyZW50SFRUUFJlcXVlc3QoKTtcbiAgICAgICAgbGV0IHBhdGhuYW1lID0gbmV3IFVSTChyZXF1ZXN0Py51cmwgfHwgXCIvXCIsIFwiaHR0cHM6Ly9sb2NhbGhvc3RcIikucGF0aG5hbWU7XG4gICAgICAgIGlmICghcGF0aG5hbWUuc3RhcnRzV2l0aChcIi9maWxlL1wiKSkge1xuICAgICAgICAgICAgbGV0IGh0bWwgPSBhd2FpdCBwZXJmb3JtTG9jYWxDYWxsKHtcbiAgICAgICAgICAgICAgICBjYWxsZXIsXG4gICAgICAgICAgICAgICAgY2FsbDogeyBub2RlSWQ6IGNhbGxlci5ub2RlSWQsIGNsYXNzR3VpZDogUmVxdWlyZUNvbnRyb2xsZXIuX2NsYXNzR3VpZCwgZnVuY3Rpb25OYW1lOiBcInJlcXVpcmVIVE1MXCIsIGFyZ3M6IFtjb25maWddIH0sXG4gICAgICAgICAgICB9KSBhcyBCdWZmZXI7XG4gICAgICAgICAgICAvLyBXaXRob3V0IHRoaXMgdGhlIGFjY2VzcyBwYWdlIGlzIHNlcnZlZCB3aXRoIG5vIGNvbnRlbnQgdHlwZSwgYW5kIGEgYnJvd3NlciB0aGF0IGlzIHRvbGQgbm90IHRvIHNuaWZmIHNpbXBseSB3aWxsIG5vdCByZW5kZXIgaXRcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhodG1sLCB7IFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcnRzID0gcGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcih4ID0+IHgpLm1hcChkZWNvZGVVUklDb21wb25lbnQpO1xuICAgICAgICBsZXQgYWNjb3VudCA9IHBhcnRzWzFdO1xuICAgICAgICBsZXQgYnVja2V0TmFtZSA9IHBhcnRzWzJdO1xuICAgICAgICBsZXQgZmlsZVBhdGggPSBwYXJ0cy5zbGljZSgzKS5qb2luKFwiL1wiKTtcbiAgICAgICAgaWYgKCFhY2NvdW50IHx8ICFidWNrZXROYW1lIHx8ICFmaWxlUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYnVja2V0TmFtZSwgXCJidWNrZXQgbmFtZVwiKTtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKGZpbGVQYXRoKTtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IGF3YWl0IGdldExvYWRlZEJ1Y2tldChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFidWNrZXQuc2VsZj8ucHVibGljKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCAke2FjY291bnR9LyR7YnVja2V0TmFtZX0gaXMgbm90IHB1YmxpYywgc28gaXRzIGZpbGVzIGNhbm5vdCBiZSByZWFkIG92ZXIgcGxhaW4gVVJMc2ApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmZvID0gYXdhaXQgYnVja2V0LnN0b3JlLmdldEluZm8oZmlsZVBhdGgpO1xuICAgICAgICBpZiAoIWluZm8gfHwgIWluZm8uc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXh0ID0gZmlsZVBhdGguc3BsaXQoXCIuXCIpLnBvcCgpIHx8IFwiXCI7XG4gICAgICAgIGxldCBoZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogQ09OVEVOVF9UWVBFU1tleHQudG9Mb3dlckNhc2UoKV0gfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgICAgICAgIFwiTGFzdC1Nb2RpZmllZFwiOiBuZXcgRGF0ZShpbmZvLndyaXRlVGltZSkudG9VVENTdHJpbmcoKSxcbiAgICAgICAgICAgIFwiQWNjZXB0LVJhbmdlc1wiOiBcImJ5dGVzXCIsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChidWNrZXQuc2VsZj8uaW1tdXRhYmxlKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IGBtYXgtYWdlPSR7SU1NVVRBQkxFX0NBQ0hFX1RJTUUgLyAxMDAwfWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlmTW9kaWZpZWRTaW5jZSA9IHJlcXVlc3Q/LmhlYWRlcnNbXCJpZi1tb2RpZmllZC1zaW5jZVwiXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZk1vZGlmaWVkU2luY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBzaW5jZSA9IG5ldyBEYXRlKGlmTW9kaWZpZWRTaW5jZSkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKHNpbmNlICYmIE1hdGguZmxvb3IoaW5mby53cml0ZVRpbWUgLyAxMDAwKSAqIDEwMDAgPD0gc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgLi4uaGVhZGVycywgc3RhdHVzOiBcIjMwNFwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByYW5nZTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmFuZ2VIZWFkZXIgPSByZXF1ZXN0Py5oZWFkZXJzW1wicmFuZ2VcIl07XG4gICAgICAgIGlmICh0eXBlb2YgcmFuZ2VIZWFkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IC9eYnl0ZXM9KFxcZCopLShcXGQqKSQvLmV4ZWMocmFuZ2VIZWFkZXIudHJpbSgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hbMV0gfHwgbWF0Y2hbMl0pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluY2x1c2l2ZSA9IGluZm8uc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IE1hdGgubWF4KDAsIGluZm8uc2l6ZSAtICttYXRjaFsyXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSArbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kSW5jbHVzaXZlID0gTWF0aC5taW4oK21hdGNoWzJdLCBpbmZvLnNpemUgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gaW5mby5zaXplIHx8IHN0YXJ0ID4gZW5kSW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyAuLi5oZWFkZXJzLCBcIkNvbnRlbnQtUmFuZ2VcIjogYGJ5dGVzICovJHtpbmZvLnNpemV9YCwgc3RhdHVzOiBcIjQxNlwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByYW5nZSA9IHsgc3RhcnQsIGVuZDogZW5kSW5jbHVzaXZlICsgMSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBidWNrZXQuc3RvcmUuZ2V0MihmaWxlUGF0aCwgeyByYW5nZSB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIHsgLi4uaGVhZGVycywgXCJDb250ZW50LVJhbmdlXCI6IGBieXRlcyAke3JhbmdlLnN0YXJ0fS0ke3JhbmdlLmVuZCAtIDF9LyR7aW5mby5zaXplfWAsIHN0YXR1czogXCIyMDZcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIGhlYWRlcnMpO1xuICAgIH1cbn1cblxuY29uc3QgbGFyZ2VVcGxvYWRJbmZvID0gbmV3IE1hcDxzdHJpbmcsIHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PigpO1xuXG5jb25zdCBhY2NvdW50QWNjZXNzOiBTb2NrZXRGdW5jdGlvbkhvb2sgPSBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgYXdhaXQgcmVxdWlyZUFjY2VzcyhTdHJpbmcoY29udGV4dC5jYWxsLmFyZ3NbMF0pKTtcbiAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgaWYgKGR1cmF0aW9uID4gQUNDRVNTX0NIRUNLX1NMT1dfVElNRSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQWNjZXNzIGNoZWNrIGZvciAke2NvbnRleHQuY2FsbC5mdW5jdGlvbk5hbWV9IHRvb2sgJHtkdXJhdGlvbn1tc2ApO1xuICAgIH1cbn07XG5jb25zdCB1cGxvYWRBY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KFN0cmluZyhjb250ZXh0LmNhbGwuYXJnc1swXSkpO1xuICAgIGlmICghaW5mbykgcmV0dXJuO1xuICAgIGF3YWl0IHJlcXVpcmVBY2Nlc3MoaW5mby5hY2NvdW50KTtcbn07XG5jb25zdCBhZG1pbkFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKCkgPT4ge1xuICAgIHJlcXVpcmVBZG1pbigpO1xufTtcblxuZXhwb3J0IGNvbnN0IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyID0gU29ja2V0RnVuY3Rpb24ucmVnaXN0ZXIoXG4gICAgUkVNT1RFX1NUT1JBR0VfQ0xBU1NfR1VJRCxcbiAgICBuZXcgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXJCYXNlKCksXG4gICAgKCkgPT4gKHtcbiAgICAgICAgcGluZzoge30sXG4gICAgICAgIGF1dGhlbnRpY2F0ZToge30sXG4gICAgICAgIHJlcXVlc3RBY2Nlc3M6IHt9LFxuICAgICAgICBnZXRBY2Nlc3NTdGF0ZToge30sXG4gICAgICAgIGxpc3RSZXF1ZXN0c0ZvcklQOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ3JhbnRBY2Nlc3M6IHt9LFxuICAgICAgICBhZG1pbkxpc3RSZXF1ZXN0czogeyBob29rczogW2FkbWluQWNjZXNzXSB9LFxuICAgICAgICBhZG1pbkxpc3RBY3RpdmVCdWNrZXRzOiB7IGhvb2tzOiBbYWRtaW5BY2Nlc3NdIH0sXG4gICAgICAgIGFkbWluR3JhbnRBY2Nlc3M6IHsgaG9va3M6IFthZG1pbkFjY2Vzc10gfSxcbiAgICAgICAgZ2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0MjogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIHNldDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGRlbDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEluZm86IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBmaW5kSW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldENoYW5nZXNBZnRlcjI6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBcmNoaXZlc0NvbmZpZzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEluZGV4SW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGxpc3RCdWNrZXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QWN0aXZlQnVja2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgYWN0aXZhdGVCdWNrZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBjbGVhcldyaXRlU3RhdHM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRTeW5jU3RhdHVzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgc3RhcnRMYXJnZUZpbGU6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICB1cGxvYWRQYXJ0OiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBmaW5pc2hMYXJnZUZpbGU6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGNhbmNlbExhcmdlRmlsZTogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgaHR0cEVudHJ5OiB7fSxcbiAgICB9KSxcbiAgICAoKSA9PiAoe1xuICAgICAgICBub0NsaWVudEhvb2tzOiB0cnVlLFxuICAgICAgICBub0RlZmF1bHRIb29rczogdHJ1ZSxcbiAgICB9KVxuKTtcbiJdfQ==
507
+ /* _JS_SOURCE_HASH = "f8cdd20766976703a754292a7376f85e3cfe6c29fa465831b4acdf3383339e7d"; */