testcafe 1.19.0-alpha.2 → 1.19.0-alpha.3

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,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const testcafe_safe_storage_1 = require("testcafe-safe-storage");
4
4
  const DEFAULT_DASHBOARD_OPTIONS = {
5
5
  token: '',
6
- sendReport: false,
6
+ // NOTE: we should send reports to the dashboard until it is disabled explicitly
7
+ sendReport: true,
7
8
  };
8
9
  class DashboardConfigStorage {
9
10
  constructor() {
@@ -19,4 +20,4 @@ class DashboardConfigStorage {
19
20
  }
20
21
  exports.default = DashboardConfigStorage;
21
22
  module.exports = exports.default;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGFzaGJvYXJkL2NvbmZpZy1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUVBQW9EO0FBT3BELE1BQU0seUJBQXlCLEdBQTJCO0lBQ3RELEtBQUssRUFBTyxFQUFFO0lBQ2QsVUFBVSxFQUFFLEtBQUs7Q0FDcEIsQ0FBQztBQUVGLE1BQXFCLHNCQUFzQjtJQUl2QztRQUNJLElBQUksQ0FBQyxPQUFPLEdBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxtQ0FBVyxFQUEwQixDQUFDO0lBQzlELENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLHlCQUF5QixDQUFDO0lBQzlFLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNiLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDSjtBQWhCRCx5Q0FnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWZlU3RvcmFnZSB9IGZyb20gJ3Rlc3RjYWZlLXNhZmUtc3RvcmFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ29uZmlnT3B0aW9ucyB7XG4gICAgdG9rZW4/OiBzdHJpbmc7XG4gICAgc2VuZFJlcG9ydD86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfREFTSEJPQVJEX09QVElPTlM6IERhc2hib2FyZENvbmZpZ09wdGlvbnMgPSB7XG4gICAgdG9rZW46ICAgICAgJycsXG4gICAgc2VuZFJlcG9ydDogZmFsc2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXNoYm9hcmRDb25maWdTdG9yYWdlIHtcbiAgICBwdWJsaWMgb3B0aW9uczogRGFzaGJvYXJkQ29uZmlnT3B0aW9ucztcbiAgICBwcml2YXRlIF9zdG9yYWdlOiBTYWZlU3RvcmFnZTxEYXNoYm9hcmRDb25maWdPcHRpb25zPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyAgPSB7fTtcbiAgICAgICAgdGhpcy5fc3RvcmFnZSA9IG5ldyBTYWZlU3RvcmFnZTxEYXNoYm9hcmRDb25maWdPcHRpb25zPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gYXdhaXQgdGhpcy5fc3RvcmFnZS50cnlMb2FkKCkgfHwgREVGQVVMVF9EQVNIQk9BUkRfT1BUSU9OUztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2F2ZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3N0b3JhZ2Uuc2F2ZSh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbn1cbiJdfQ==
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGFzaGJvYXJkL2NvbmZpZy1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUVBQW9EO0FBU3BELE1BQU0seUJBQXlCLEdBQTJCO0lBQ3RELEtBQUssRUFBRSxFQUFFO0lBRVQsZ0ZBQWdGO0lBQ2hGLFVBQVUsRUFBRSxJQUFJO0NBQ25CLENBQUM7QUFFRixNQUFxQixzQkFBc0I7SUFJdkM7UUFDSSxJQUFJLENBQUMsT0FBTyxHQUFJLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksbUNBQVcsRUFBMEIsQ0FBQztJQUM5RCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSx5QkFBeUIsQ0FBQztJQUM5RSxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDYixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0o7QUFoQkQseUNBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FmZVN0b3JhZ2UgfSBmcm9tICd0ZXN0Y2FmZS1zYWZlLXN0b3JhZ2UnO1xuXG5cbi8vIFRPRE86IG1ha2UgdGhpcyBwcm9wZXJ0aWVzIHJlcXVpcmVkXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZENvbmZpZ09wdGlvbnMge1xuICAgIHRva2VuPzogc3RyaW5nO1xuICAgIHNlbmRSZXBvcnQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBERUZBVUxUX0RBU0hCT0FSRF9PUFRJT05TOiBEYXNoYm9hcmRDb25maWdPcHRpb25zID0ge1xuICAgIHRva2VuOiAnJyxcblxuICAgIC8vIE5PVEU6IHdlIHNob3VsZCBzZW5kIHJlcG9ydHMgdG8gdGhlIGRhc2hib2FyZCB1bnRpbCBpdCBpcyBkaXNhYmxlZCBleHBsaWNpdGx5XG4gICAgc2VuZFJlcG9ydDogdHJ1ZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhc2hib2FyZENvbmZpZ1N0b3JhZ2Uge1xuICAgIHB1YmxpYyBvcHRpb25zOiBEYXNoYm9hcmRDb25maWdPcHRpb25zO1xuICAgIHByaXZhdGUgX3N0b3JhZ2U6IFNhZmVTdG9yYWdlPERhc2hib2FyZENvbmZpZ09wdGlvbnM+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zICA9IHt9O1xuICAgICAgICB0aGlzLl9zdG9yYWdlID0gbmV3IFNhZmVTdG9yYWdlPERhc2hib2FyZENvbmZpZ09wdGlvbnM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBhd2FpdCB0aGlzLl9zdG9yYWdlLnRyeUxvYWQoKSB8fCBERUZBVUxUX0RBU0hCT0FSRF9PUFRJT05TO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzYXZlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmFnZS5zYXZlKHRoaXMub3B0aW9ucyk7XG4gICAgfVxufVxuIl19
@@ -396,7 +396,9 @@ class Runner extends events_1.EventEmitter {
396
396
  async _addDashboardReporterIfNeeded() {
397
397
  const dashboardOptions = await this._getDashboardOptions();
398
398
  let reporterOptions = this.configuration.getOption(option_names_1.default.reporter);
399
- if (!dashboardOptions.sendReport)
399
+ // NOTE: we should send reports when sendReport is undefined
400
+ // TODO: make this option binary instead of tri-state
401
+ if (!dashboardOptions.token || dashboardOptions.sendReport === false)
400
402
  return;
401
403
  if (!reporterOptions)
402
404
  reporterOptions = [];
@@ -603,4 +605,4 @@ class Runner extends events_1.EventEmitter {
603
605
  }
604
606
  exports.default = Runner;
605
607
  module.exports = exports.default;
606
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQXVEO0FBQ3ZELGtEQUEwQjtBQUMxQixzRUFBNkM7QUFDN0MsbUNBQXNDO0FBQ3RDLGlGQUFpRTtBQUVqRSxtQ0FNZ0I7QUFFaEIsa0VBQTBDO0FBQzFDLDJEQUFtQztBQUNuQyxrREFBMEI7QUFDMUIsaUZBQStEO0FBQy9ELCtDQUFpRDtBQUNqRCwyQ0FBaUQ7QUFDakQsdUVBQW1FO0FBQ25FLG9EQUFvRTtBQUNwRSwyRUFBa0Q7QUFDbEQsK0VBQXFEO0FBQ3JELDBEQUtnQztBQUVoQyxpRkFBeUQ7QUFDekQsbUVBQTBDO0FBQzFDLG1GQUEwRDtBQUMxRCx5RUFBOEQ7QUFDOUQsMERBQStEO0FBQy9ELDhGQUFvRTtBQUNwRSxxR0FBNEU7QUFDNUUsNENBQStFO0FBQy9FLHlFQUFnRDtBQUNoRCwrRUFBc0Q7QUFDdEQseUZBQWdFO0FBQ2hFLG1FQUE0RDtBQUM1RCxrREFBeUI7QUFDekIsaUZBQXdFO0FBQ3hFLHVFQUFzRDtBQUN0RCwwREFBMkI7QUFDM0IsNkVBQW9EO0FBQ3BELGdFQUE0RTtBQUM1RSxtRUFBMEM7QUFDMUMsdUVBQThDO0FBQzlDLHFEQUE2QjtBQUM3QixrREFBMEI7QUFFMUIsTUFBTSxZQUFZLEdBQWMsZUFBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDekQsTUFBTSx1QkFBdUIsR0FBRyxXQUFXLENBQUM7QUFDNUMsTUFBTSxrQkFBa0IsR0FBUSxNQUFNLENBQUM7QUFFdkMsTUFBcUIsTUFBTyxTQUFRLHFCQUFZO0lBQzVDLFlBQWEsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRTtRQUM1RSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxXQUFXLEdBQVcsSUFBSSxxQkFBVSxFQUFFLENBQUM7UUFDNUMsSUFBSSxD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d0JBQXdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLDBEQUEwRDtRQUMxRCxpRUFBaUU7UUFDakUsNEVBQTRFO1FBQzVFLDZEQUE2RDtRQUM3RCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDdEYsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUVsQyxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0o7QUF6dkJELHlCQXl2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIGFzIHJlc29sdmVQYXRoLCBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHByb21pc2lmeUV2ZW50IGZyb20gJ3Byb21pc2lmeS1ldmVudCc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IERhc2hib2FyZENvbmZpZ1N0b3JhZ2UgZnJvbSAnLi4vZGFzaGJvYXJkL2NvbmZpZy1zdG9yYWdlJztcblxuaW1wb3J0IHtcbiAgICBmbGF0dGVuRGVlcCBhcyBmbGF0dGVuLFxuICAgIHB1bGwgYXMgcmVtb3ZlLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgdW5pcSxcbiAgICBjYXN0QXJyYXksXG59IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCBCb290c3RyYXBwZXIgZnJvbSAnLi9ib290c3RyYXBwZXInO1xuaW1wb3J0IFJlcG9ydGVyIGZyb20gJy4uL3JlcG9ydGVyJztcbmltcG9ydCBUYXNrIGZyb20gJy4vdGFzayc7XG5pbXBvcnQgZGVmYXVsdERlYnVnTG9nZ2VyIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvZGVidWctbG9nZ2VyJztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCB7IGFzc2VydFR5cGUsIGlzIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUvdHlwZS1hc3NlcnRpb25zJztcbmltcG9ydCB7IHJlbmRlckZvcmJpZGRlbkNoYXJzTGlzdCB9IGZyb20gJy4uL2Vycm9ycy90ZXN0LXJ1bi91dGlscyc7XG5pbXBvcnQgZGV0ZWN0RkZNUEVHIGZyb20gJy4uL3V0aWxzL2RldGVjdC1mZm1wZWcnO1xuaW1wb3J0IGNoZWNrRmlsZVBhdGggZnJvbSAnLi4vdXRpbHMvY2hlY2stZmlsZS1wYXRoJztcbmltcG9ydCB7XG4gICAgYWRkUnVubmluZ1Rlc3QsXG4gICAgcmVtb3ZlUnVubmluZ1Rlc3QsXG4gICAgc3RhcnRIYW5kbGluZ1Rlc3RFcnJvcnMsXG4gICAgc3RvcEhhbmRsaW5nVGVzdEVycm9ycyxcbn0gZnJvbSAnLi4vdXRpbHMvaGFuZGxlLWVycm9ycyc7XG5cbmltcG9ydCBPUFRJT05fTkFNRVMgZnJvbSAnLi4vY29uZmlndXJhdGlvbi9vcHRpb24tbmFtZXMnO1xuaW1wb3J0IEZsYWdMaXN0IGZyb20gJy4uL3V0aWxzL2ZsYWctbGlzdCc7XG5pbXBvcnQgcHJlcGFyZVJlcG9ydGVycyBmcm9tICcuLi91dGlscy9wcmVwYXJlLXJlcG9ydGVycyc7XG5pbXBvcnQgbG9hZENsaWVudFNjcmlwdHMgZnJvbSAnLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2xvYWQnO1xuaW1wb3J0IHsgc2V0VW5pcXVlVXJscyB9IGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy91dGlscyc7XG5pbXBvcnQgUmVwb3J0ZXJTdHJlYW1Db250cm9sbGVyIGZyb20gJy4vcmVwb3J0ZXItc3RyZWFtLWNvbnRyb2xsZXInO1xuaW1wb3J0IEN1c3RvbWl6YWJsZUNvbXBpbGVycyBmcm9tICcuLi9jb25maWd1cmF0aW9uL2N1c3RvbWl6YWJsZS1jb21waWxlcnMnO1xuaW1wb3J0IHsgZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nLCBnZXRQbHVyYWxTdWZmaXggfSBmcm9tICcuLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IGlzTG9jYWxob3N0IGZyb20gJy4uL3V0aWxzL2lzLWxvY2FsaG9zdCc7XG5pbXBvcnQgV2FybmluZ0xvZyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbG9nJztcbmltcG9ydCBhdXRoZW50aWNhdGlvbkhlbHBlciBmcm9tICcuLi9jbGkvYXV0aGVudGljYXRpb24taGVscGVyJztcbmltcG9ydCB7IGVycm9ycywgZmluZFdpbmRvdyB9IGZyb20gJ3Rlc3RjYWZlLWJyb3dzZXItdG9vbHMnO1xuaW1wb3J0IGlzQ0kgZnJvbSAnaXMtY2knO1xuaW1wb3J0IFJlbW90ZUJyb3dzZXJQcm92aWRlciBmcm9tICcuLi9icm93c2VyL3Byb3ZpZGVyL2J1aWx0LWluL3JlbW90ZSc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uJztcbmltcG9ydCBPUyBmcm9tICdvcy1mYW1pbHknO1xuaW1wb3J0IGRldGVjdERpc3BsYXkgZnJvbSAnLi4vdXRpbHMvZGV0ZWN0LWRpc3BsYXknO1xuaW1wb3J0IHsgdmFsaWRhdGVRdWFyYW50aW5lT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2dldC1vcHRpb25zL3F1YXJhbnRpbmUnO1xuaW1wb3J0IGxvZ0VudHJ5IGZyb20gJy4uL3V0aWxzL2xvZy1lbnRyeSc7XG5pbXBvcnQgTWVzc2FnZUJ1cyBmcm9tICcuLi91dGlscy9tZXNzYWdlLWJ1cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2NsaS9sb2cnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuY29uc3QgREVCVUdfTE9HR0VSICAgICAgICAgICAgPSBkZWJ1ZygndGVzdGNhZmU6cnVubmVyJyk7XG5jb25zdCBEQVNIQk9BUkRfUkVQT1JURVJfTkFNRSA9ICdkYXNoYm9hcmQnO1xuY29uc3QgU1BFQ19SRVBPUlRFUl9OQU1FICAgICAgPSAnc3BlYyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bm5lciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IgKHsgcHJveHksIGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSwgY29uZmlndXJhdGlvbiwgY29tcGlsZXJTZXJ2aWNlIH0pIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzICAgICAgICAgPSBuZXcgTWVzc2FnZUJ1cygpO1xuICAgICAgICB0aGlzLnByb3h5ICAgICAgICAgICAgICAgPSBwcm94eTtcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIgICAgICAgID0gdGhpcy5fY3JlYXRlQm9vdHN0cmFwcGVyKGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSwgY29tcGlsZXJTZXJ2aWNlLCB0aGlzLl9tZXNzYWdlQnVzKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGFza1Byb21pc2VzID0gW107XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiAgICAgICA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMuaXNDbGkgICAgICAgICAgICAgICA9IGNvbmZpZ3VyYXRpb24uX29wdGlvbnMgJiYgY29uZmlndXJhdGlvbi5fb3B0aW9ucy5pc0NsaTtcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nICAgICAgICAgID0gbmV3IFdhcm5pbmdMb2cobnVsbCwgV2FybmluZ0xvZy5jcmVhdGVBZGRXYXJuaW5nQ2FsbGJhY2sodGhpcy5fbWVzc2FnZUJ1cykpO1xuICAgICAgICB0aGlzLmNvbXBpbGVyU2VydmljZSAgICAgPSBjb21waWxlclNlcnZpY2U7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgICAgICAgICAgICA9IHt9O1xuICAgICAgICB0aGlzLl9oYXNUYXNrRXJyb3JzICAgICAgPSBmYWxzZTtcblxuICAgICAgICAvL05PVEU6IFRoaXMgb3B0aW9uIGNyZWF0ZWQgb25seSBmb3IgcG9zc2liaWxpdHkgdG8gdHVybiBvZmYgYWR2ZXJ0aXNlbWVudCBmb3Igb3VyIHRlc3RzLlxuICAgICAgICB0aGlzLl9zaG93QWR2ZXJ0aXNlbWVudCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQgPSBuZXcgRmxhZ0xpc3QoW1xuICAgICAgICAgICAgT1BUSU9OX05BTUVTLnNyYyxcbiAgICAgICAgICAgIE9QVElPTl9OQU1FUy5icm93c2VycyxcbiAgICAgICAgICAgIE9QVElPTl9OQU1FUy5yZXBvcnRlcixcbiAgICAgICAgICAgIE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzLFxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQm9vdHN0cmFwcGVyIChicm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIGNvbXBpbGVyU2VydmljZSwgbWVzc2FnZUJ1cykge1xuICAgICAgICByZXR1cm4gbmV3IEJvb3RzdHJhcHBlcih7IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSwgY29tcGlsZXJTZXJ2aWNlLCBtZXNzYWdlQnVzIH0pO1xuICAgIH1cblxuICAgIF9kaXNwb3NlQnJvd3NlclNldCAoYnJvd3NlclNldCkge1xuICAgICAgICByZXR1cm4gYnJvd3NlclNldC5kaXNwb3NlKCkuY2F0Y2goZSA9PiBERUJVR19MT0dHRVIoZSkpO1xuICAgIH1cblxuICAgIF9kaXNwb3NlUmVwb3J0ZXJzIChyZXBvcnRlcnMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlcG9ydGVycy5tYXAocmVwb3J0ZXIgPT4gcmVwb3J0ZXIuZGlzcG9zZSgpLmNhdGNoKGUgPT4gREVCVUdfTE9HR0VSKGUpKSkpO1xuICAgIH1cblxuICAgIF9kaXNwb3NlVGVzdGVkQXBwICh0ZXN0ZWRBcHApIHtcbiAgICAgICAgcmV0dXJuIHRlc3RlZEFwcCA/IHRlc3RlZEFwcC5raWxsKCkuY2F0Y2goZSA9PiBERUJVR19MT0dHRVIoZSkpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgX2FkZERhc2hib2FyZEFkdmVydGlzZW1lbnQgKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5vbignZG9uZScsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaG93QWR2ZXJ0aXNlbWVudCAmJiB0aGlzLl9oYXNUYXNrRXJyb3JzKVxuICAgICAgICAgICAgICAgIGxvZy53cml0ZShtZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2Rpc3Bvc2VUYXNrQW5kUmVsYXRlZEFzc2V0cyAodGFzaywgYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHAsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkKSB7XG4gICAgICAgIHRhc2suYWJvcnQoKTtcbiAgICAgICAgdGFzay51blJlZ2lzdGVyQ2xpZW50U2NyaXB0Um91dGluZygpO1xuICAgICAgICB0YXNrLmNsZWFyTGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuYWJvcnQoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9maW5hbGl6ZUNvbXBpbGVyU2VydmljZVN0YXRlKHRhc2ssIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZUFzc2V0cyhicm93c2VyU2V0LCByZXBvcnRlcnMsIHRlc3RlZEFwcCk7XG4gICAgfVxuXG4gICAgX2Rpc3Bvc2VBc3NldHMgKGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICB0aGlzLl9kaXNwb3NlQnJvd3NlclNldChicm93c2VyU2V0KSxcbiAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VSZXBvcnRlcnMocmVwb3J0ZXJzKSxcbiAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VUZXN0ZWRBcHAodGVzdGVkQXBwKSxcbiAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVBcnJheVBhcmFtZXRlciAoYXJyYXkpIHtcbiAgICAgICAgYXJyYXkgPSBmbGF0dGVuKGFycmF5KTtcblxuICAgICAgICBpZiAodGhpcy5pc0NsaSlcbiAgICAgICAgICAgIHJldHVybiBhcnJheS5sZW5ndGggPT09IDAgPyB2b2lkIDAgOiBhcnJheTtcblxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNhbmNlbGFibGVQcm9taXNlICh0YXNrUHJvbWlzZSkge1xuICAgICAgICBjb25zdCBwcm9taXNlICAgICAgICAgICA9IHRhc2tQcm9taXNlLnRoZW4oKHsgY29tcGxldGlvblByb21pc2UgfSkgPT4gY29tcGxldGlvblByb21pc2UpO1xuICAgICAgICBjb25zdCByZW1vdmVGcm9tUGVuZGluZyA9ICgpID0+IHJlbW92ZSh0aGlzLnBlbmRpbmdUYXNrUHJvbWlzZXMsIHByb21pc2UpO1xuXG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKHJlbW92ZUZyb21QZW5kaW5nKVxuICAgICAgICAgICAgLmNhdGNoKHJlbW92ZUZyb21QZW5kaW5nKTtcblxuICAgICAgICBwcm9taXNlLmNhbmNlbCA9ICgpID0+IHRhc2tQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoeyBjYW5jZWxUYXNrIH0pID0+IGNhbmNlbFRhc2soKSlcbiAgICAgICAgICAgIC50aGVuKHJlbW92ZUZyb21QZW5kaW5nKTtcblxuICAgICAgICB0aGlzLnBlbmRpbmdUYXNrUHJvbWlzZXMucHVzaChwcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBhc3luYyBfZmluYWxpemVDb21waWxlclNlcnZpY2VTdGF0ZSAodGFzaywgcnVubmFibGVDb25maWd1cmF0aW9uSWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBpbGVyU2VydmljZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZT8ucmVtb3ZlVW5pdHNGcm9tU3RhdGUoeyBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCB9KTtcblxuICAgICAgICAvLyBOT1RFOiBJbiBzb21lIGNhc2VzIChicm93c2VyIHJlc3RhcnQsIHN0b3AgdGFzayBvbiBmaXJzdCBmYWlsLCBldGMuKSxcbiAgICAgICAgLy8gdGhlIGZpeHR1cmUgY29udGV4dHMgbWF5IG5vdCBiZSBkZWxldGVkLlxuICAgICAgICAvLyBXZSByZW1vdmUgYWxsIGZpeHR1cmUgY29udGV4dCBhdCB0aGUgZW5kIG9mIHRlc3QgZXhlY3V0aW9uIHRvIGNsZWFuIGZvcmdvdHRlbiBjb250ZXh0cy5cbiAgICAgICAgY29uc3QgZml4dHVyZUlkcyA9IHVuaXEodGFzay50ZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmZpeHR1cmUuaWQpKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZS5yZW1vdmVGaXh0dXJlQ3R4c0Zyb21TdGF0ZSh7IGZpeHR1cmVJZHMgfSk7XG4gICAgfVxuXG4gICAgLy8gUnVuIHRhc2tcbiAgICBfZ2V0RmFpbGVkVGVzdENvdW50ICh0YXNrLCByZXBvcnRlcikge1xuICAgICAgICBsZXQgZmFpbGVkVGVzdENvdW50ID0gcmVwb3J0ZXIudGFza0luZm8udGVzdENvdW50IC0gcmVwb3J0ZXIudGFza0luZm8ucGFzc2VkO1xuXG4gICAgICAgIGlmICh0YXNrLm9wdHMuc3RvcE9uRmlyc3RGYWlsICYmICEhZmFpbGVkVGVzdENvdW50KVxuICAgICAgICAgICAgZmFpbGVkVGVzdENvdW50ID0gMTtcblxuICAgICAgICByZXR1cm4gZmFpbGVkVGVzdENvdW50O1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRUYXNrUmVzdWx0ICh0YXNrLCBicm93c2VyU2V0LCByZXBvcnRlcnMsIHRlc3RlZEFwcCwgcnVubmFibGVDb25maWd1cmF0aW9uSWQpIHtcbiAgICAgICAgaWYgKCF0YXNrLm9wdHMubGl2ZSkge1xuICAgICAgICAgICAgdGFzay5vbignYnJvd3Nlci1qb2ItZG9uZScsIGpvYiA9PiB7XG4gICAgICAgICAgICAgICAgam9iLmJyb3dzZXJDb25uZWN0aW9ucy5mb3JFYWNoKGJjID0+IGJyb3dzZXJTZXQucmVsZWFzZUNvbm5lY3Rpb24oYmMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5jbGVhckxpc3RlbmVycygnZXJyb3InKTtcblxuICAgICAgICBjb25zdCBicm93c2VyU2V0RXJyb3JQcm9taXNlID0gcHJvbWlzaWZ5RXZlbnQoYnJvd3NlclNldCwgJ2Vycm9yJyk7XG4gICAgICAgIGNvbnN0IHRhc2tFcnJvclByb21pc2UgICAgICAgPSBwcm9taXNpZnlFdmVudCh0YXNrLCAnZXJyb3InKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZUJ1c0Vycm9yUHJvbWlzZSA9IHByb21pc2lmeUV2ZW50KHRoaXMuX21lc3NhZ2VCdXMsICdlcnJvcicpO1xuICAgICAgICBjb25zdCBzdHJlYW1Db250cm9sbGVyICAgICAgID0gbmV3IFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlcih0aGlzLl9tZXNzYWdlQnVzLCByZXBvcnRlcnMpO1xuXG4gICAgICAgIGNvbnN0IHRhc2tEb25lUHJvbWlzZSA9IHRoaXMuX21lc3NhZ2VCdXMub25jZSgnZG9uZScpXG4gICAgICAgICAgICAudGhlbigoKSA9PiBicm93c2VyU2V0RXJyb3JQcm9taXNlLmNhbmNlbCgpKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXBvcnRlcnMubWFwKHJlcG9ydGVyID0+IHJlcG9ydGVyLnRhc2tJbmZvLnBlbmRpbmdUYXNrRG9uZVByb21pc2UpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICAgICAgdGFza0RvbmVQcm9taXNlLFxuICAgICAgICAgICAgYnJvd3NlclNldEVycm9yUHJvbWlzZSxcbiAgICAgICAgICAgIHRhc2tFcnJvclByb21pc2UsXG4gICAgICAgICAgICBtZXNzYWdlQnVzRXJyb3JQcm9taXNlLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0ZXN0ZWRBcHApXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRlc3RlZEFwcC5lcnJvclByb21pc2UpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VUYXNrQW5kUmVsYXRlZEFzc2V0cyh0YXNrLCBicm93c2VyU2V0LCByZXBvcnRlcnMsIHRlc3RlZEFwcCwgcnVubmFibGVDb25maWd1cmF0aW9uSWQpO1xuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlQXNzZXRzKGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZmluYWxpemVDb21waWxlclNlcnZpY2VTdGF0ZSh0YXNrLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCk7XG5cbiAgICAgICAgaWYgKHN0cmVhbUNvbnRyb2xsZXIubXVsdGlwbGVTdHJlYW1FcnJvcilcbiAgICAgICAgICAgIHRocm93IHN0cmVhbUNvbnRyb2xsZXIubXVsdGlwbGVTdHJlYW1FcnJvcjtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RmFpbGVkVGVzdENvdW50KHRhc2ssIHJlcG9ydGVyc1swXSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZVRhc2sgKHRlc3RzLCBicm93c2VyQ29ubmVjdGlvbkdyb3VwcywgcHJveHksIG9wdHMsIHdhcm5pbmdMb2cpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYXNrKHtcbiAgICAgICAgICAgIHRlc3RzLFxuICAgICAgICAgICAgYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMsXG4gICAgICAgICAgICBwcm94eSxcbiAgICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgICBydW5uZXJXYXJuaW5nTG9nOiB3YXJuaW5nTG9nLFxuICAgICAgICAgICAgY29tcGlsZXJTZXJ2aWNlOiAgdGhpcy5jb21waWxlclNlcnZpY2UsXG4gICAgICAgICAgICBtZXNzYWdlQnVzOiAgICAgICB0aGlzLl9tZXNzYWdlQnVzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcnVuVGFzayAoeyByZXBvcnRlcnMsIGJyb3dzZXJTZXQsIHRlc3RzLCB0ZXN0ZWRBcHAsIG9wdGlvbnMsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkIH0pIHtcbiAgICAgICAgY29uc3QgdGFzayAgICAgICAgICAgICAgPSB0aGlzLl9jcmVhdGVUYXNrKHRlc3RzLCBicm93c2VyU2V0LmJyb3dzZXJDb25uZWN0aW9uR3JvdXBzLCB0aGlzLnByb3h5LCBvcHRpb25zLCB0aGlzLndhcm5pbmdMb2cpO1xuICAgICAgICBjb25zdCBjb21wbGV0aW9uUHJvbWlzZSA9IHRoaXMuX2dldFRhc2tSZXN1bHQodGFzaywgYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHAsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkKTtcbiAgICAgICAgbGV0IGNvbXBsZXRlZCAgICAgICAgICAgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLm9uKCdzdGFydCcsIHN0YXJ0SGFuZGxpbmdUZXN0RXJyb3JzKTtcblxuICAgICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnNraXBVbmNhdWdodEVycm9ycykpIHtcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMub24oJ3Rlc3QtcnVuLXN0YXJ0JywgYWRkUnVubmluZ1Rlc3QpO1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5vbigndGVzdC1ydW4tZG9uZScsICh7IGVycnMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFzVGFza0Vycm9ycyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICByZW1vdmVSdW5uaW5nVGVzdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLm9uKCdkb25lJywgc3RvcEhhbmRsaW5nVGVzdEVycm9ycyk7XG5cbiAgICAgICAgdGFzay5vbignZXJyb3InLCBzdG9wSGFuZGxpbmdUZXN0RXJyb3JzKTtcblxuICAgICAgICBjb25zdCBvblRhc2tDb21wbGV0ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICB0YXNrLnVuUmVnaXN0ZXJDbGllbnRTY3JpcHRSb3V0aW5nKCk7XG5cbiAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29tcGxldGlvblByb21pc2VcbiAgICAgICAgICAgIC50aGVuKG9uVGFza0NvbXBsZXRlZClcbiAgICAgICAgICAgIC5jYXRjaChvblRhc2tDb21wbGV0ZWQpO1xuXG4gICAgICAgIGNvbnN0IGNhbmNlbFRhc2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbXBsZXRlZClcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlVGFza0FuZFJlbGF0ZWRBc3NldHModGFzaywgYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHAsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4geyBjb21wbGV0aW9uUHJvbWlzZSwgY2FuY2VsVGFzayB9O1xuICAgIH1cblxuICAgIF9yZWdpc3RlckFzc2V0cyAoYXNzZXRzKSB7XG4gICAgICAgIGFzc2V0cy5mb3JFYWNoKGFzc2V0ID0+IHRoaXMucHJveHkuR0VUKGFzc2V0LnBhdGgsIGFzc2V0LmluZm8pKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVEZWJ1Z0xvZ2dlciAoKSB7XG4gICAgICAgIGNvbnN0IGRlYnVnTG9nZ2VyID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuZGVidWdMb2dnZXIpO1xuXG4gICAgICAgIGNvbnN0IGRlYnVnTG9nZ2VyRGVmaW5lZENvcnJlY3RseSA9IGRlYnVnTG9nZ2VyID09PSBudWxsIHx8ICEhZGVidWdMb2dnZXIgJiZcbiAgICAgICAgICAgIFsnc2hvd0JyZWFrcG9pbnQnLCAnaGlkZUJyZWFrcG9pbnQnXS5ldmVyeShtZXRob2QgPT4gbWV0aG9kIGluIGRlYnVnTG9nZ2VyICYmIGlzRnVuY3Rpb24oZGVidWdMb2dnZXJbbWV0aG9kXSkpO1xuXG4gICAgICAgIGlmICghZGVidWdMb2dnZXJEZWZpbmVkQ29ycmVjdGx5KSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubWVyZ2VPcHRpb25zKHtcbiAgICAgICAgICAgICAgICBbT1BUSU9OX05BTUVTLmRlYnVnTG9nZ2VyXTogZGVmYXVsdERlYnVnTG9nZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdmFsaWRhdGVTcGVlZE9wdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNwZWVkID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuc3BlZWQpO1xuXG4gICAgICAgIGlmIChzcGVlZCA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc3BlZWQgIT09ICdudW1iZXInIHx8IGlzTmFOKHNwZWVkKSB8fCBzcGVlZCA8IDAuMDEgfHwgc3BlZWQgPiAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5pbnZhbGlkU3BlZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlQ29uY3VycmVuY3lPcHRpb24gKCkge1xuICAgICAgICBjb25zdCBjb25jdXJyZW5jeSA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmNvbmN1cnJlbmN5KTtcblxuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbmN1cnJlbmN5ICE9PSAnbnVtYmVyJyB8fCBpc05hTihjb25jdXJyZW5jeSkgfHwgY29uY3VycmVuY3kgPCAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5pbnZhbGlkQ29uY3VycmVuY3lGYWN0b3IpO1xuXG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA+IDEgJiYgdGhpcy5ib290c3RyYXBwZXIuYnJvd3NlcnMuc29tZShicm93c2VyID0+IHtcbiAgICAgICAgICAgIHJldHVybiBicm93c2VyIGluc3RhbmNlb2YgQnJvd3NlckNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICA/IGJyb3dzZXIuYnJvd3NlckluZm8uYnJvd3Nlck9wdGlvbi5jZHBQb3J0XG4gICAgICAgICAgICAgICAgOiBicm93c2VyLmJyb3dzZXJPcHRpb24uY2RwUG9ydDtcbiAgICAgICAgfSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdFNldENvbmN1cnJlbmN5V2l0aENEUFBvcnQpO1xuICAgIH1cblxuICAgIGFzeW5jIF92YWxpZGF0ZUJyb3dzZXJzICgpIHtcbiAgICAgICAgY29uc3QgYnJvd3NlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5icm93c2Vycyk7XG5cbiAgICAgICAgaWYgKCFicm93c2VycyB8fCBBcnJheS5pc0FycmF5KGJyb3dzZXJzKSAmJiAhYnJvd3NlcnMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5icm93c2VyTm90U2V0KTtcblxuICAgICAgICBpZiAoT1MubWFjKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2hlY2tSZXF1aXJlZFBlcm1pc3Npb25zKGJyb3dzZXJzKTtcblxuICAgICAgICBpZiAoT1MubGludXggJiYgIWRldGVjdERpc3BsYXkoKSlcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NoZWNrVGhhdFRlc3RzQ2FuUnVuV2l0aG91dERpc3BsYXkoYnJvd3NlcnMpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVJlcXVlc3RUaW1lb3V0T3B0aW9uIChvcHRpb25OYW1lKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RUaW1lb3V0ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihvcHRpb25OYW1lKTtcblxuICAgICAgICBpZiAocmVxdWVzdFRpbWVvdXQgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhc3NlcnRUeXBlKGlzLm5vbk5lZ2F0aXZlTnVtYmVyLCBudWxsLCBgXCIke29wdGlvbk5hbWV9XCIgb3B0aW9uYCwgcmVxdWVzdFRpbWVvdXQpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVByb3h5QnlwYXNzT3B0aW9uICgpIHtcbiAgICAgICAgbGV0IHByb3h5QnlwYXNzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucHJveHlCeXBhc3MpO1xuXG4gICAgICAgIGlmIChwcm94eUJ5cGFzcyA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGFzc2VydFR5cGUoWyBpcy5zdHJpbmcsIGlzLmFycmF5IF0sIG51bGwsICdUaGUgXCJwcm94eUJ5cGFzc1wiIGFyZ3VtZW50JywgcHJveHlCeXBhc3MpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcHJveHlCeXBhc3MgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcHJveHlCeXBhc3MgPSBbcHJveHlCeXBhc3NdO1xuXG4gICAgICAgIHByb3h5QnlwYXNzID0gcHJveHlCeXBhc3MucmVkdWNlKChhcnIsIHJ1bGVzKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgbnVsbCwgJ1RoZSBcInByb3h5QnlwYXNzXCIgYXJndW1lbnQnLCBydWxlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcnIuY29uY2F0KHJ1bGVzLnNwbGl0KCcsJykpO1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IHByb3h5QnlwYXNzIH0pO1xuICAgIH1cblxuICAgIF9nZXRTY3JlZW5zaG90T3B0aW9ucyAoKSB7XG4gICAgICAgIGxldCB7IHBhdGgsIHBhdGhQYXR0ZXJuIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5zY3JlZW5zaG90cykgfHwge307XG5cbiAgICAgICAgaWYgKCFwYXRoKVxuICAgICAgICAgICAgcGF0aCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnNjcmVlbnNob3RQYXRoKTtcblxuICAgICAgICBpZiAoIXBhdGhQYXR0ZXJuKVxuICAgICAgICAgICAgcGF0aFBhdHRlcm4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5zY3JlZW5zaG90UGF0aFBhdHRlcm4pO1xuXG4gICAgICAgIHJldHVybiB7IHBhdGgsIHBhdGhQYXR0ZXJuIH07XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlU2NyZWVuc2hvdE9wdGlvbnMgKCkge1xuICAgICAgICBjb25zdCB7IHBhdGgsIHBhdGhQYXR0ZXJuIH0gPSB0aGlzLl9nZXRTY3JlZW5zaG90T3B0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IGRpc2FibGVTY3JlZW5zaG90cyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRpc2FibGVTY3JlZW5zaG90cykgfHwgIXBhdGg7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IFtPUFRJT05fTkFNRVMuZGlzYWJsZVNjcmVlbnNob3RzXTogZGlzYWJsZVNjcmVlbnNob3RzIH0pO1xuXG4gICAgICAgIGlmIChkaXNhYmxlU2NyZWVuc2hvdHMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlU2NyZWVuc2hvdFBhdGgocGF0aCwgJ3NjcmVlbnNob3RzIGJhc2UgZGlyZWN0b3J5IHBhdGgnKTtcblxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IFtPUFRJT05fTkFNRVMuc2NyZWVuc2hvdHNdOiB7IHBhdGg6IHJlc29sdmVQYXRoKHBhdGgpIH0gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aFBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlU2NyZWVuc2hvdFBhdGgocGF0aFBhdHRlcm4sICdzY3JlZW5zaG90cyBwYXRoIHBhdHRlcm4nKTtcblxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IFtPUFRJT05fTkFNRVMuc2NyZWVuc2hvdHNdOiB7IHBhdGhQYXR0ZXJuIH0gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfdmFsaWRhdGVWaWRlb09wdGlvbnMgKCkge1xuICAgICAgICBjb25zdCB2aWRlb1BhdGggICAgICAgICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnZpZGVvUGF0aCk7XG4gICAgICAgIGNvbnN0IHZpZGVvRW5jb2RpbmdPcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMudmlkZW9FbmNvZGluZ09wdGlvbnMpO1xuXG4gICAgICAgIGxldCB2aWRlb09wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy52aWRlb09wdGlvbnMpO1xuXG4gICAgICAgIGlmICghdmlkZW9QYXRoKSB7XG4gICAgICAgICAgICBpZiAodmlkZW9PcHRpb25zIHx8IHZpZGVvRW5jb2RpbmdPcHRpb25zKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuY2Fubm90U2V0VmlkZW9PcHRpb25zV2l0aG91dEJhc2VWaWRlb1BhdGhTcGVjaWZpZWQpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubWVyZ2VPcHRpb25zKHsgW09QVElPTl9OQU1FUy52aWRlb1BhdGhdOiByZXNvbHZlUGF0aCh2aWRlb1BhdGgpIH0pO1xuXG4gICAgICAgIGlmICghdmlkZW9PcHRpb25zKSB7XG4gICAgICAgICAgICB2aWRlb09wdGlvbnMgPSB7fTtcblxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IFtPUFRJT05fTkFNRVMudmlkZW9PcHRpb25zXTogdmlkZW9PcHRpb25zIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZGVvT3B0aW9ucy5mZm1wZWdQYXRoKVxuICAgICAgICAgICAgdmlkZW9PcHRpb25zLmZmbXBlZ1BhdGggPSByZXNvbHZlUGF0aCh2aWRlb09wdGlvbnMuZmZtcGVnUGF0aCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHZpZGVvT3B0aW9ucy5mZm1wZWdQYXRoID0gYXdhaXQgZGV0ZWN0RkZNUEVHKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb09wdGlvbnMuZmZtcGVnUGF0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZEZGTVBFRyk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlQ29tcGlsZXJPcHRpb25zICgpIHtcbiAgICAgICAgY29uc3QgY29tcGlsZXJPcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuY29tcGlsZXJPcHRpb25zKTtcblxuICAgICAgICBpZiAoIWNvbXBpbGVyT3B0aW9ucylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBzcGVjaWZpZWRDb21waWxlcnMgID0gT2JqZWN0LmtleXMoY29tcGlsZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgY3VzdG9taXplZENvbXBpbGVycyA9IE9iamVjdC5rZXlzKEN1c3RvbWl6YWJsZUNvbXBpbGVycyk7XG4gICAgICAgIGNvbnN0IHdyb25nQ29tcGlsZXJzICAgICAgPSBzcGVjaWZpZWRDb21waWxlcnMuZmlsdGVyKGNvbXBpbGVyID0+ICFjdXN0b21pemVkQ29tcGlsZXJzLmluY2x1ZGVzKGNvbXBpbGVyKSk7XG5cbiAgICAgICAgaWYgKCF3cm9uZ0NvbXBpbGVycy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29tcGlsZXJMaXN0U3RyID0gZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nKHdyb25nQ29tcGlsZXJzLCB2b2lkIDAsIFwiJ1wiKTtcbiAgICAgICAgY29uc3QgcGx1cmFsU3VmZml4ICAgID0gZ2V0UGx1cmFsU3VmZml4KHdyb25nQ29tcGlsZXJzKTtcblxuICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdEN1c3RvbWl6ZVNwZWNpZmllZENvbXBpbGVycywgY29tcGlsZXJMaXN0U3RyLCBwbHVyYWxTdWZmaXgpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVJldHJ5VGVzdFBhZ2VzT3B0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmV0cnlUZXN0UGFnZXNPcHRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcyk7XG5cbiAgICAgICAgaWYgKCFyZXRyeVRlc3RQYWdlc09wdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBzc2wgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5zc2wpO1xuXG4gICAgICAgIGlmIChzc2wpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5ob3N0bmFtZSk7XG5cbiAgICAgICAgaWYgKGlzTG9jYWxob3N0KGhvc3RuYW1lKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdEVuYWJsZVJldHJ5VGVzdFBhZ2VzT3B0aW9uKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVRdWFyYW50aW5lT3B0aW9ucyAoKSB7XG4gICAgICAgIGNvbnN0IHF1YXJhbnRpbmVNb2RlID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucXVhcmFudGluZU1vZGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcXVhcmFudGluZU1vZGUgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgdmFsaWRhdGVRdWFyYW50aW5lT3B0aW9ucyhxdWFyYW50aW5lTW9kZSwgT1BUSU9OX05BTUVTLnF1YXJhbnRpbmVNb2RlKTtcbiAgICB9XG5cbiAgICBhc3luYyBfdmFsaWRhdGVSdW5PcHRpb25zICgpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVEZWJ1Z0xvZ2dlcigpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVNjcmVlbnNob3RPcHRpb25zKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX3ZhbGlkYXRlVmlkZW9PcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlU3BlZWRPcHRpb24oKTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVQcm94eUJ5cGFzc09wdGlvbigpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUNvbXBpbGVyT3B0aW9ucygpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVJldHJ5VGVzdFBhZ2VzT3B0aW9uKCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUmVxdWVzdFRpbWVvdXRPcHRpb24oT1BUSU9OX05BTUVTLnBhZ2VSZXF1ZXN0VGltZW91dCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUmVxdWVzdFRpbWVvdXRPcHRpb24oT1BUSU9OX05BTUVTLmFqYXhSZXF1ZXN0VGltZW91dCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUXVhcmFudGluZU9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVDb25jdXJyZW5jeU9wdGlvbigpO1xuICAgICAgICBhd2FpdCB0aGlzLl92YWxpZGF0ZUJyb3dzZXJzKCk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvb3RzdHJhcHBlclxuICAgICAgICAgICAgLmNyZWF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbigpXG4gICAgICAgICAgICAudGhlbihydW5uYWJsZUNvbmZpZ3VyYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZG9uZS1ib290c3RyYXBwaW5nJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmFibGVDb25maWd1cmF0aW9uO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlU2NyZWVuc2hvdFBhdGggKHNjcmVlbnNob3RQYXRoLCBwYXRoVHlwZSkge1xuICAgICAgICBjb25zdCBmb3JiaWRkZW5DaGFyc0xpc3QgPSBjaGVja0ZpbGVQYXRoKHNjcmVlbnNob3RQYXRoKTtcblxuICAgICAgICBpZiAoZm9yYmlkZGVuQ2hhcnNMaXN0Lmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuZm9yYmlkZGVuQ2hhcmF0ZXJzSW5TY3JlZW5zaG90UGF0aCwgc2NyZWVuc2hvdFBhdGgsIHBhdGhUeXBlLCByZW5kZXJGb3JiaWRkZW5DaGFyc0xpc3QoZm9yYmlkZGVuQ2hhcnNMaXN0KSk7XG4gICAgfVxuXG4gICAgX3NldEJvb3RzdHJhcHBlck9wdGlvbnMgKCkge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucHJlcGFyZSgpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubm90aWZ5QWJvdXRPdmVycmlkZGVuT3B0aW9ucyh0aGlzLndhcm5pbmdMb2cpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubm90aWZ5QWJvdXREZXByZWNhdGVkT3B0aW9ucyh0aGlzLndhcm5pbmdMb2cpO1xuXG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLnNvdXJjZXMgICAgICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5zcmMpIHx8IHRoaXMuYm9vdHN0cmFwcGVyLnNvdXJjZXM7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLmJyb3dzZXJzICAgICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5icm93c2VycykgfHwgdGhpcy5ib290c3RyYXBwZXIuYnJvd3NlcnM7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLmNvbmN1cnJlbmN5ICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5jb25jdXJyZW5jeSk7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLmFwcENvbW1hbmQgICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5hcHBDb21tYW5kKSB8fCB0aGlzLmJvb3RzdHJhcHBlci5hcHBDb21tYW5kO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5hcHBJbml0RGVsYXkgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuYXBwSW5pdERlbGF5KTtcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIuZmlsdGVyICAgICAgICAgICAgICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmZpbHRlcikgfHwgdGhpcy5ib290c3RyYXBwZXIuZmlsdGVyO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5yZXBvcnRlcnMgICAgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmVwb3J0ZXIpIHx8IHRoaXMuYm9vdHN0cmFwcGVyLnJlcG9ydGVycztcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIudHNDb25maWdQYXRoICAgICAgICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnRzQ29uZmlnUGF0aCk7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLmNsaWVudFNjcmlwdHMgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzKSB8fCB0aGlzLmJvb3RzdHJhcHBlci5jbGllbnRTY3JpcHRzO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuZGlzYWJsZU11bHRpcGxlV2luZG93cyk7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLnByb3h5bGVzcyAgICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5wcm94eWxlc3MpO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5jb21waWxlck9wdGlvbnMgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuY29tcGlsZXJPcHRpb25zKTtcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIuYnJvd3NlckluaXRUaW1lb3V0ICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmJyb3dzZXJJbml0VGltZW91dCk7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLmhvb2tzICAgICAgICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5ob29rcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2FkZERhc2hib2FyZFJlcG9ydGVySWZOZWVkZWQgKCkge1xuICAgICAgICBjb25zdCBkYXNoYm9hcmRPcHRpb25zID0gYXdhaXQgdGhpcy5fZ2V0RGFzaGJvYXJkT3B0aW9ucygpO1xuICAgICAgICBsZXQgcmVwb3J0ZXJPcHRpb25zICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmVwb3J0ZXIpO1xuXG4gICAgICAgIGlmICghZGFzaGJvYXJkT3B0aW9ucy5zZW5kUmVwb3J0KVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICghcmVwb3J0ZXJPcHRpb25zKVxuICAgICAgICAgICAgcmVwb3J0ZXJPcHRpb25zID0gW107XG5cbiAgICAgICAgY29uc3QgZGFzaGJvYXJkUmVwb3J0ZXIgPSByZXBvcnRlck9wdGlvbnMuZmluZChyZXBvcnRlciA9PiByZXBvcnRlci5uYW1lID09PSBEQVNIQk9BUkRfUkVQT1JURVJfTkFNRSk7XG5cbiAgICAgICAgaWYgKCFkYXNoYm9hcmRSZXBvcnRlcilcbiAgICAgICAgICAgIHJlcG9ydGVyT3B0aW9ucy5wdXNoKHsgbmFtZTogREFTSEJPQVJEX1JFUE9SVEVSX05BTUUsIG9wdGlvbnM6IGRhc2hib2FyZE9wdGlvbnMgfSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRhc2hib2FyZFJlcG9ydGVyLm9wdGlvbnMgPSBkYXNoYm9hcmRPcHRpb25zO1xuXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5tZXJnZU9wdGlvbnMoeyBbT1BUSU9OX05BTUVTLnJlcG9ydGVyXTogcmVwb3J0ZXJPcHRpb25zIH0pO1xuICAgIH1cblxuICAgIF9hZGREYXNoQm9hcmRBZHZlcnRpc2VtZW50SWZOZWVkZWQgKCkge1xuICAgICAgICBjb25zdCByZXBvcnRlck9wdGlvbnMgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmVwb3J0ZXIpO1xuXG4gICAgICAgIGlmICghcmVwb3J0ZXJPcHRpb25zIHx8IGNhc3RBcnJheShyZXBvcnRlck9wdGlvbnMpLmV2ZXJ5KHJlcG9ydGVyID0+IHJlcG9ydGVyLm5hbWUgPT09IFNQRUNfUkVQT1JURVJfTkFNRSkpXG4gICAgICAgICAgICB0aGlzLl9hZGREYXNoYm9hcmRBZHZlcnRpc2VtZW50KGBcXG4ke2NoYWxrLmJvbGQucmVkKCdORVcnKX06IFRyeSBUZXN0Q2FmZSBEYXNoYm9hcmQgKGh0dHBzOi8vZGFzaGJvYXJkLnRlc3RjYWZlLmlvLykgdG8gZWxpbWluYXRlIHVuc3RhYmxlIGFuZCBmYWlsaW5nIHRlc3RzLlxcbmApO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXREYXNoYm9hcmRPcHRpb25zICgpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5kYXNoYm9hcmQpO1xuXG4gICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgIG9wdGlvbnMgPSBhd2FpdCB0aGlzLl9sb2FkRGFzaGJvYXJkT3B0aW9uc0Zyb21TdG9yYWdlKCk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgYXN5bmMgX2xvYWREYXNoYm9hcmRPcHRpb25zRnJvbVN0b3JhZ2UgKCkge1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gbmV3IERhc2hib2FyZENvbmZpZ1N0b3JhZ2UoKTtcblxuICAgICAgICBhd2FpdCBzdG9yYWdlLmxvYWQoKTtcblxuICAgICAgICByZXR1cm4gc3RvcmFnZS5vcHRpb25zO1xuICAgIH1cblxuICAgIGFzeW5jIF9wcmVwYXJlQ2xpZW50U2NyaXB0cyAodGVzdHMsIGNsaWVudFNjcmlwdHMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRlc3RzLm1hcChhc3luYyB0ZXN0ID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0LmlzTGVnYWN5KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgbGV0IGxvYWRlZFRlc3RDbGllbnRTY3JpcHRzID0gYXdhaXQgbG9hZENsaWVudFNjcmlwdHModGVzdC5jbGllbnRTY3JpcHRzLCBkaXJuYW1lKHRlc3QudGVzdEZpbGUuZmlsZW5hbWUpKTtcblxuICAgICAgICAgICAgbG9hZGVkVGVzdENsaWVudFNjcmlwdHMgPSBjbGllbnRTY3JpcHRzLmNvbmNhdChsb2FkZWRUZXN0Q2xpZW50U2NyaXB0cyk7XG5cbiAgICAgICAgICAgIHRlc3QuY2xpZW50U2NyaXB0cyA9IHNldFVuaXF1ZVVybHMobG9hZGVkVGVzdENsaWVudFNjcmlwdHMpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2hhc0xvY2FsQnJvd3NlcnMgKGJyb3dzZXJJbmZvKSB7XG4gICAgICAgIGZvciAoY29uc3QgYnJvd3NlciBvZiBicm93c2VySW5mbykge1xuICAgICAgICAgICAgaWYgKGJyb3dzZXIgaW5zdGFuY2VvZiBCcm93c2VyQ29ubmVjdGlvbilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKGF3YWl0IGJyb3dzZXIucHJvdmlkZXIuaXNMb2NhbEJyb3dzZXIodm9pZCAwLCBicm93c2VyLmJyb3dzZXJOYW1lKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBfY2hlY2tSZXF1aXJlZFBlcm1pc3Npb25zIChicm93c2VySW5mbykge1xuICAgICAgICBjb25zdCBoYXNMb2NhbEJyb3dzZXJzID0gYXdhaXQgdGhpcy5faGFzTG9jYWxCcm93c2Vycyhicm93c2VySW5mbyk7XG5cbiAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgYXV0aGVudGljYXRpb25IZWxwZXIoXG4gICAgICAgICAgICAoKSA9PiBmaW5kV2luZG93KCcnKSxcbiAgICAgICAgICAgIGVycm9ycy5VbmFibGVUb0FjY2Vzc1NjcmVlblJlY29yZGluZ0FQSUVycm9yLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlOiBoYXNMb2NhbEJyb3dzZXJzICYmICFpc0NJLFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghZXJyb3IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKGhhc0xvY2FsQnJvd3NlcnMpXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcblxuICAgICAgICBSZW1vdGVCcm93c2VyUHJvdmlkZXIuY2FuRGV0ZWN0TG9jYWxCcm93c2VycyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGFzeW5jIF9jaGVja1RoYXRUZXN0c0NhblJ1bldpdGhvdXREaXNwbGF5IChicm93c2VySW5mb1NvdXJjZSkge1xuICAgICAgICBmb3IgKGxldCBicm93c2VySW5mbyBvZiBicm93c2VySW5mb1NvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGJyb3dzZXJJbmZvIGluc3RhbmNlb2YgQnJvd3NlckNvbm5lY3Rpb24pXG4gICAgICAgICAgICAgICAgYnJvd3NlckluZm8gPSBicm93c2VySW5mby5icm93c2VySW5mbztcblxuICAgICAgICAgICAgY29uc3QgaXNMb2NhbEJyb3dzZXIgICAgPSBhd2FpdCBicm93c2VySW5mby5wcm92aWRlci5pc0xvY2FsQnJvd3Nlcih2b2lkIDAsIGJyb3dzZXJJbmZvLmJyb3dzZXJOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSGVhZGxlc3NCcm93c2VyID0gYXdhaXQgYnJvd3NlckluZm8ucHJvdmlkZXIuaXNIZWFkbGVzc0Jyb3dzZXIodm9pZCAwLCBicm93c2VySW5mby5icm93c2VyTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChpc0xvY2FsQnJvd3NlciAmJiAhaXNIZWFkbGVzc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBSVU5USU1FX0VSUk9SUy5jYW5ub3RSdW5Mb2NhbE5vbkhlYWRsZXNzQnJvd3NlcldpdGhvdXREaXNwbGF5LFxuICAgICAgICAgICAgICAgICAgICBicm93c2VySW5mby5hbGlhc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfc2V0Q29uZmlndXJhdGlvbk9wdGlvbnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uYXN5bmNNZXJnZU9wdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQVBJXG4gICAgZW1iZWRkaW5nT3B0aW9ucyAob3B0cykge1xuICAgICAgICBjb25zdCB7IGFzc2V0cywgVGVzdFJ1bkN0b3IgfSA9IG9wdHM7XG5cbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJBc3NldHMoYXNzZXRzKTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5UZXN0UnVuQ3RvciA9IFRlc3RSdW5DdG9yO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNyYyAoLi4uc291cmNlcykge1xuICAgICAgICBpZiAodGhpcy5hcGlNZXRob2RXYXNDYWxsZWQuc3JjKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW4sIE9QVElPTl9OQU1FUy5zcmMpO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnNyY10gPSB0aGlzLl9wcmVwYXJlQXJyYXlQYXJhbWV0ZXIoc291cmNlcyk7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLnNyYyAgICAgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGJyb3dzZXJzICguLi5icm93c2Vycykge1xuICAgICAgICBpZiAodGhpcy5hcGlNZXRob2RXYXNDYWxsZWQuYnJvd3NlcnMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLmJyb3dzZXJzKTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zLmJyb3dzZXJzICAgICAgICAgICA9IHRoaXMuX3ByZXBhcmVBcnJheVBhcmFtZXRlcihicm93c2Vycyk7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmJyb3dzZXJzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25jdXJyZW5jeSAoY29uY3VycmVuY3kpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlcG9ydGVyIChuYW1lLCBvdXRwdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLnJlcG9ydGVyKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW4sIE9QVElPTl9OQU1FUy5yZXBvcnRlcik7XG5cbiAgICAgICAgdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMucmVwb3J0ZXJdID0gdGhpcy5fcHJlcGFyZUFycmF5UGFyYW1ldGVyKHByZXBhcmVSZXBvcnRlcnMobmFtZSwgb3V0cHV0KSk7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLnJlcG9ydGVyICAgICA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZmlsdGVyIChmaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5maWx0ZXIgPSBmaWx0ZXI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdXNlUHJveHkgKHByb3h5LCBwcm94eUJ5cGFzcykge1xuICAgICAgICB0aGlzLl9vcHRpb25zLnByb3h5ICAgICAgID0gcHJveHk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMucHJveHlCeXBhc3MgPSBwcm94eUJ5cGFzcztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzY3JlZW5zaG90cyAoLi4ub3B0aW9ucykge1xuICAgICAgICBsZXQgZnVsbFBhZ2U7XG4gICAgICAgIGxldCB0aHVtYm5haWxzO1xuICAgICAgICBsZXQgW3BhdGgsIHRha2VPbkZhaWxzLCBwYXRoUGF0dGVybl0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBvcHRpb25zWzBdICYmIHR5cGVvZiBvcHRpb25zWzBdID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICh7IHBhdGgsIHRha2VPbkZhaWxzLCBwYXRoUGF0dGVybiwgZnVsbFBhZ2UsIHRodW1ibmFpbHMgfSA9IG9wdGlvbnNbMF0pO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnMuc2NyZWVuc2hvdHMgPSB7IHBhdGgsIHRha2VPbkZhaWxzLCBwYXRoUGF0dGVybiwgZnVsbFBhZ2UsIHRodW1ibmFpbHMgfTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2aWRlbyAocGF0aCwgb3B0aW9ucywgZW5jb2RpbmdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnZpZGVvUGF0aF0gICAgICAgICAgICA9IHBhdGg7XG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnZpZGVvT3B0aW9uc10gICAgICAgICA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnZpZGVvRW5jb2RpbmdPcHRpb25zXSA9IGVuY29kaW5nT3B0aW9ucztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdGFydEFwcCAoY29tbWFuZCwgaW5pdERlbGF5KSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLmFwcENvbW1hbmRdICAgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5hcHBJbml0RGVsYXldID0gaW5pdERlbGF5O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRzQ29uZmlnUGF0aCAocGF0aCkge1xuICAgICAgICB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy50c0NvbmZpZ1BhdGhdID0gcGF0aDtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjbGllbnRTY3JpcHRzICguLi5zY3JpcHRzKSB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW4sIE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzKTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzXSA9IHRoaXMuX3ByZXBhcmVBcnJheVBhcmFtZXRlcihzY3JpcHRzKTtcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQuY2xpZW50U2NyaXB0cyAgICAgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbXBpbGVyT3B0aW9ucyAob3B0cykge1xuICAgICAgICB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5jb21waWxlck9wdGlvbnNdID0gb3B0cztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkYXNoYm9hcmQgKG9wdHMpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMuZGFzaGJvYXJkXSA9IG9wdHM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcnVuIChvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IHJlcG9ydGVycztcblxuICAgICAgICB0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5yZXNldCgpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLmNsZWFyTGlzdGVuZXJzKCk7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZUJ1c0Vycm9yUHJvbWlzZSA9IHByb21pc2lmeUV2ZW50KHRoaXMuX21lc3NhZ2VCdXMsICdlcnJvcicpO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHJ1blRhc2tQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuX3NldENvbmZpZ3VyYXRpb25PcHRpb25zKCkpXG4gICAgICAgICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWRkRGFzaGJvYXJkUmVwb3J0ZXJJZk5lZWRlZCgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FkZERhc2hCb2FyZEFkdmVydGlzZW1lbnRJZk5lZWRlZCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IFJlcG9ydGVyLmdldFJlcG9ydGVyUGx1Z2lucyh0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5yZXBvcnRlcikpKVxuICAgICAgICAgICAgLnRoZW4ocmVwb3J0ZXJQbHVnaW5zID0+IHtcbiAgICAgICAgICAgICAgICByZXBvcnRlcnMgPSByZXBvcnRlclBsdWdpbnMubWFwKHJlcG9ydGVyID0+IG5ldyBSZXBvcnRlcihyZXBvcnRlci5wbHVnaW4sIHRoaXMuX21lc3NhZ2VCdXMsIHJlcG9ydGVyLm91dFN0cmVhbSwgcmVwb3J0ZXIubmFtZSkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlcG9ydGVycy5tYXAocmVwb3J0ZXIgPT4gcmVwb3J0ZXIuaW5pdCgpKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fc2V0Qm9vdHN0cmFwcGVyT3B0aW9ucygpKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ0VudHJ5KERFQlVHX0xPR0dFUiwgdGhpcy5jb25maWd1cmF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVJ1bk9wdGlvbnMoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9jcmVhdGVSdW5uYWJsZUNvbmZpZ3VyYXRpb24oKSlcbiAgICAgICAgICAgIC50aGVuKGFzeW5jICh7IGJyb3dzZXJTZXQsIHRlc3RzLCB0ZXN0ZWRBcHAsIGNvbW1vbkNsaWVudFNjcmlwdHMsIGlkIH0pID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlQ2xpZW50U2NyaXB0cyh0ZXN0cywgY29tbW9uQ2xpZW50U2NyaXB0cyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9ucygpLFxuXG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZFVybDogcmVwb3J0ZXJzLmZpbmQociA9PiByLnBsdWdpbi5uYW1lID09PSAnZGFzaGJvYXJkJyk/LnBsdWdpbi5nZXRSZXBvcnRVcmwoKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5ib290c3RyYXBwZXIuY29tcGlsZXJTZXJ2aWNlPy5zZXRPcHRpb25zKHsgdmFsdWU6IHJlc3VsdE9wdGlvbnMgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnVuVGFzayh7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydGVycyxcbiAgICAgICAgICAgICAgICAgICAgYnJvd3NlclNldCxcbiAgICAgICAgICAgICAgICAgICAgdGVzdHMsXG4gICAgICAgICAgICAgICAgICAgIHRlc3RlZEFwcCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogICAgICAgICAgICAgICAgIHJlc3VsdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkOiBpZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICAgICAgcnVuVGFza1Byb21pc2UsXG4gICAgICAgICAgICBtZXNzYWdlQnVzRXJyb3JQcm9taXNlLFxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVDYW5jZWxhYmxlUHJvbWlzZShQcm9taXNlLnJhY2UocHJvbWlzZXMpKTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9wICgpIHtcbiAgICAgICAgLy8gTk9URTogV2hlbiB0YXNrUHJvbWlzZSBpcyBjYW5jZWxsZWQsIGl0IGlzIHJlbW92ZWQgZnJvbVxuICAgICAgICAvLyB0aGUgcGVuZGluZ1Rhc2tQcm9taXNlcyBhcnJheSwgd2hpY2ggbGVhZHMgdG8gc2hpZnRpbmcgaW5kZXhlc1xuICAgICAgICAvLyB0b3dhcmRzIHRoZSBiZWdpbm5pbmcuIFNvLCB3ZSBtdXN0IGNvcHkgdGhlIGFycmF5IGluIG9yZGVyIHRvIGl0ZXJhdGUgaXQsXG4gICAgICAgIC8vIG9yIHdlIGNhbiBwZXJmb3JtIGl0ZXJhdGlvbiBmcm9tIHRoZSBlbmQgdG8gdGhlIGJlZ2lubmluZy5cbiAgICAgICAgY29uc3QgY2FuY2VsbGF0aW9uUHJvbWlzZXMgPSB0aGlzLnBlbmRpbmdUYXNrUHJvbWlzZXMucmVkdWNlUmlnaHQoKHJlc3VsdCwgdGFza1Byb21pc2UpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRhc2tQcm9taXNlLmNhbmNlbCgpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNhbmNlbGxhdGlvblByb21pc2VzKTtcbiAgICB9XG59XG4iXX0=
608
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQXVEO0FBQ3ZELGtEQUEwQjtBQUMxQixzRUFBNkM7QUFDN0MsbUNBQXNDO0FBQ3RDLGlGQUFpRTtBQUVqRSxtQ0FNZ0I7QUFFaEIsa0VBQTBDO0FBQzFDLDJEQUFtQztBQUNuQyxrREFBMEI7QUFDMUIsaUZBQStEO0FBQy9ELCtDQUFpRDtBQUNqRCwyQ0FBaUQ7QUFDakQsdUVBQW1FO0FBQ25FLG9EQUFvRTtBQUNwRSwyRUFBa0Q7QUFDbEQsK0VBQXFEO0FBQ3JELDBEQUtnQztBQUVoQyxpRkFBeUQ7QUFDekQsbUVBQTBDO0FBQzFDLG1GQUEwRDtBQUMxRCx5RUFBOEQ7QUFDOUQsMERBQStEO0FBQy9ELDhGQUFvRTtBQUNwRSxxR0FBNEU7QUFDNUUsNENBQStFO0FBQy9FLHlFQUFnRDtBQUNoRCwrRUFBc0Q7QUFDdEQseUZBQWdFO0FBQ2hFLG1FQUE0RDtBQUM1RCxrREFBeUI7QUFDekIsaUZBQXdFO0FBQ3hFLHVFQUFzRDtBQUN0RCwwREFBMkI7QUFDM0IsNkVBQW9EO0FBQ3BELGdFQUE0RTtBQUM1RSxtRUFBMEM7QUFDMUMsdUVBQThDO0FBQzlDLHFEQUE2QjtBQUM3QixrREFBMEI7QUFFMUIsTUFBTSxZQUFZLEdBQWMsZUFBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDekQsTUFBTSx1QkFBdUIsR0FBRyxXQUFXLENBQUM7QUFDNUMsTUFBTSxrQkFBa0IsR0FBUSxNQUFNLENBQUM7QUFFdkMsTUFBcUIsTUFBTyxTQUFRLHFCQUFZO0lBQzVDLFlBQWEsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRTtRQUM1RSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxXQUFXLEdBQVcsSUFBSSxxQkFBVSxFQUFFLENBQUM7UUFDNUMsSUFBSSxD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R0FBRztZQUNiLGNBQWM7WUFDZCxzQkFBc0I7U0FDekIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTiwwREFBMEQ7UUFDMUQsaUVBQWlFO1FBQ2pFLDRFQUE0RTtRQUM1RSw2REFBNkQ7UUFDN0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQ3RGLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFbEMsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNKO0FBM3ZCRCx5QkEydkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSBhcyByZXNvbHZlUGF0aCwgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBwcm9taXNpZnlFdmVudCBmcm9tICdwcm9taXNpZnktZXZlbnQnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBEYXNoYm9hcmRDb25maWdTdG9yYWdlIGZyb20gJy4uL2Rhc2hib2FyZC9jb25maWctc3RvcmFnZSc7XG5cbmltcG9ydCB7XG4gICAgZmxhdHRlbkRlZXAgYXMgZmxhdHRlbixcbiAgICBwdWxsIGFzIHJlbW92ZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIHVuaXEsXG4gICAgY2FzdEFycmF5LFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgQm9vdHN0cmFwcGVyIGZyb20gJy4vYm9vdHN0cmFwcGVyJztcbmltcG9ydCBSZXBvcnRlciBmcm9tICcuLi9yZXBvcnRlcic7XG5pbXBvcnQgVGFzayBmcm9tICcuL3Rhc2snO1xuaW1wb3J0IGRlZmF1bHREZWJ1Z0xvZ2dlciBmcm9tICcuLi9ub3RpZmljYXRpb25zL2RlYnVnLWxvZ2dlcic7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyByZW5kZXJGb3JiaWRkZW5DaGFyc0xpc3QgfSBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4vdXRpbHMnO1xuaW1wb3J0IGRldGVjdEZGTVBFRyBmcm9tICcuLi91dGlscy9kZXRlY3QtZmZtcGVnJztcbmltcG9ydCBjaGVja0ZpbGVQYXRoIGZyb20gJy4uL3V0aWxzL2NoZWNrLWZpbGUtcGF0aCc7XG5pbXBvcnQge1xuICAgIGFkZFJ1bm5pbmdUZXN0LFxuICAgIHJlbW92ZVJ1bm5pbmdUZXN0LFxuICAgIHN0YXJ0SGFuZGxpbmdUZXN0RXJyb3JzLFxuICAgIHN0b3BIYW5kbGluZ1Rlc3RFcnJvcnMsXG59IGZyb20gJy4uL3V0aWxzL2hhbmRsZS1lcnJvcnMnO1xuXG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vb3B0aW9uLW5hbWVzJztcbmltcG9ydCBGbGFnTGlzdCBmcm9tICcuLi91dGlscy9mbGFnLWxpc3QnO1xuaW1wb3J0IHByZXBhcmVSZXBvcnRlcnMgZnJvbSAnLi4vdXRpbHMvcHJlcGFyZS1yZXBvcnRlcnMnO1xuaW1wb3J0IGxvYWRDbGllbnRTY3JpcHRzIGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9sb2FkJztcbmltcG9ydCB7IHNldFVuaXF1ZVVybHMgfSBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvdXRpbHMnO1xuaW1wb3J0IFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlciBmcm9tICcuL3JlcG9ydGVyLXN0cmVhbS1jb250cm9sbGVyJztcbmltcG9ydCBDdXN0b21pemFibGVDb21waWxlcnMgZnJvbSAnLi4vY29uZmlndXJhdGlvbi9jdXN0b21pemFibGUtY29tcGlsZXJzJztcbmltcG9ydCB7IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZywgZ2V0UGx1cmFsU3VmZml4IH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCBpc0xvY2FsaG9zdCBmcm9tICcuLi91dGlscy9pcy1sb2NhbGhvc3QnO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5pbXBvcnQgYXV0aGVudGljYXRpb25IZWxwZXIgZnJvbSAnLi4vY2xpL2F1dGhlbnRpY2F0aW9uLWhlbHBlcic7XG5pbXBvcnQgeyBlcnJvcnMsIGZpbmRXaW5kb3cgfSBmcm9tICd0ZXN0Y2FmZS1icm93c2VyLXRvb2xzJztcbmltcG9ydCBpc0NJIGZyb20gJ2lzLWNpJztcbmltcG9ydCBSZW1vdGVCcm93c2VyUHJvdmlkZXIgZnJvbSAnLi4vYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9yZW1vdGUnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgT1MgZnJvbSAnb3MtZmFtaWx5JztcbmltcG9ydCBkZXRlY3REaXNwbGF5IGZyb20gJy4uL3V0aWxzL2RldGVjdC1kaXNwbGF5JztcbmltcG9ydCB7IHZhbGlkYXRlUXVhcmFudGluZU9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucy9xdWFyYW50aW5lJztcbmltcG9ydCBsb2dFbnRyeSBmcm9tICcuLi91dGlscy9sb2ctZW50cnknO1xuaW1wb3J0IE1lc3NhZ2VCdXMgZnJvbSAnLi4vdXRpbHMvbWVzc2FnZS1idXMnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9jbGkvbG9nJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IERFQlVHX0xPR0dFUiAgICAgICAgICAgID0gZGVidWcoJ3Rlc3RjYWZlOnJ1bm5lcicpO1xuY29uc3QgREFTSEJPQVJEX1JFUE9SVEVSX05BTUUgPSAnZGFzaGJvYXJkJztcbmNvbnN0IFNQRUNfUkVQT1JURVJfTkFNRSAgICAgID0gJ3NwZWMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdW5uZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yICh7IHByb3h5LCBicm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIGNvbmZpZ3VyYXRpb24sIGNvbXBpbGVyU2VydmljZSB9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cyAgICAgICAgID0gbmV3IE1lc3NhZ2VCdXMoKTtcbiAgICAgICAgdGhpcy5wcm94eSAgICAgICAgICAgICAgID0gcHJveHk7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyICAgICAgICA9IHRoaXMuX2NyZWF0ZUJvb3RzdHJhcHBlcihicm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIGNvbXBpbGVyU2VydmljZSwgdGhpcy5fbWVzc2FnZUJ1cyk7XG4gICAgICAgIHRoaXMucGVuZGluZ1Rhc2tQcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gICAgICAgPSBjb25maWd1cmF0aW9uO1xuICAgICAgICB0aGlzLmlzQ2xpICAgICAgICAgICAgICAgPSBjb25maWd1cmF0aW9uLl9vcHRpb25zICYmIGNvbmZpZ3VyYXRpb24uX29wdGlvbnMuaXNDbGk7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZyAgICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKG51bGwsIFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKHRoaXMuX21lc3NhZ2VCdXMpKTtcbiAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2UgICAgID0gY29tcGlsZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLl9vcHRpb25zICAgICAgICAgICAgPSB7fTtcbiAgICAgICAgdGhpcy5faGFzVGFza0Vycm9ycyAgICAgID0gZmFsc2U7XG5cbiAgICAgICAgLy9OT1RFOiBUaGlzIG9wdGlvbiBjcmVhdGVkIG9ubHkgZm9yIHBvc3NpYmlsaXR5IHRvIHR1cm4gb2ZmIGFkdmVydGlzZW1lbnQgZm9yIG91ciB0ZXN0cy5cbiAgICAgICAgdGhpcy5fc2hvd0FkdmVydGlzZW1lbnQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkID0gbmV3IEZsYWdMaXN0KFtcbiAgICAgICAgICAgIE9QVElPTl9OQU1FUy5zcmMsXG4gICAgICAgICAgICBPUFRJT05fTkFNRVMuYnJvd3NlcnMsXG4gICAgICAgICAgICBPUFRJT05fTkFNRVMucmVwb3J0ZXIsXG4gICAgICAgICAgICBPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cyxcbiAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUJvb3RzdHJhcHBlciAoYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBjb21waWxlclNlcnZpY2UsIG1lc3NhZ2VCdXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCb290c3RyYXBwZXIoeyBicm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIGNvbXBpbGVyU2VydmljZSwgbWVzc2FnZUJ1cyB9KTtcbiAgICB9XG5cbiAgICBfZGlzcG9zZUJyb3dzZXJTZXQgKGJyb3dzZXJTZXQpIHtcbiAgICAgICAgcmV0dXJuIGJyb3dzZXJTZXQuZGlzcG9zZSgpLmNhdGNoKGUgPT4gREVCVUdfTE9HR0VSKGUpKTtcbiAgICB9XG5cbiAgICBfZGlzcG9zZVJlcG9ydGVycyAocmVwb3J0ZXJzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXBvcnRlcnMubWFwKHJlcG9ydGVyID0+IHJlcG9ydGVyLmRpc3Bvc2UoKS5jYXRjaChlID0+IERFQlVHX0xPR0dFUihlKSkpKTtcbiAgICB9XG5cbiAgICBfZGlzcG9zZVRlc3RlZEFwcCAodGVzdGVkQXBwKSB7XG4gICAgICAgIHJldHVybiB0ZXN0ZWRBcHAgPyB0ZXN0ZWRBcHAua2lsbCgpLmNhdGNoKGUgPT4gREVCVUdfTE9HR0VSKGUpKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIF9hZGREYXNoYm9hcmRBZHZlcnRpc2VtZW50IChtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMub24oJ2RvbmUnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvd0FkdmVydGlzZW1lbnQgJiYgdGhpcy5faGFzVGFza0Vycm9ycylcbiAgICAgICAgICAgICAgICBsb2cud3JpdGUobWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIF9kaXNwb3NlVGFza0FuZFJlbGF0ZWRBc3NldHMgKHRhc2ssIGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCkge1xuICAgICAgICB0YXNrLmFib3J0KCk7XG4gICAgICAgIHRhc2sudW5SZWdpc3RlckNsaWVudFNjcmlwdFJvdXRpbmcoKTtcbiAgICAgICAgdGFzay5jbGVhckxpc3RlbmVycygpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLmFib3J0KCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fZmluYWxpemVDb21waWxlclNlcnZpY2VTdGF0ZSh0YXNrLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VBc3NldHMoYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHApO1xuICAgIH1cblxuICAgIF9kaXNwb3NlQXNzZXRzIChicm93c2VyU2V0LCByZXBvcnRlcnMsIHRlc3RlZEFwcCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUJyb3dzZXJTZXQoYnJvd3NlclNldCksXG4gICAgICAgICAgICB0aGlzLl9kaXNwb3NlUmVwb3J0ZXJzKHJlcG9ydGVycyksXG4gICAgICAgICAgICB0aGlzLl9kaXNwb3NlVGVzdGVkQXBwKHRlc3RlZEFwcCksXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIF9wcmVwYXJlQXJyYXlQYXJhbWV0ZXIgKGFycmF5KSB7XG4gICAgICAgIGFycmF5ID0gZmxhdHRlbihhcnJheSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDbGkpXG4gICAgICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3RoID09PSAwID8gdm9pZCAwIDogYXJyYXk7XG5cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIF9jcmVhdGVDYW5jZWxhYmxlUHJvbWlzZSAodGFza1Byb21pc2UpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSAgICAgICAgICAgPSB0YXNrUHJvbWlzZS50aGVuKCh7IGNvbXBsZXRpb25Qcm9taXNlIH0pID0+IGNvbXBsZXRpb25Qcm9taXNlKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlRnJvbVBlbmRpbmcgPSAoKSA9PiByZW1vdmUodGhpcy5wZW5kaW5nVGFza1Byb21pc2VzLCBwcm9taXNlKTtcblxuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihyZW1vdmVGcm9tUGVuZGluZylcbiAgICAgICAgICAgIC5jYXRjaChyZW1vdmVGcm9tUGVuZGluZyk7XG5cbiAgICAgICAgcHJvbWlzZS5jYW5jZWwgPSAoKSA9PiB0YXNrUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKHsgY2FuY2VsVGFzayB9KSA9PiBjYW5jZWxUYXNrKCkpXG4gICAgICAgICAgICAudGhlbihyZW1vdmVGcm9tUGVuZGluZyk7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nVGFza1Byb21pc2VzLnB1c2gocHJvbWlzZSk7XG5cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgX2ZpbmFsaXplQ29tcGlsZXJTZXJ2aWNlU3RhdGUgKHRhc2ssIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21waWxlclNlcnZpY2UpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2U/LnJlbW92ZVVuaXRzRnJvbVN0YXRlKHsgcnVubmFibGVDb25maWd1cmF0aW9uSWQgfSk7XG5cbiAgICAgICAgLy8gTk9URTogSW4gc29tZSBjYXNlcyAoYnJvd3NlciByZXN0YXJ0LCBzdG9wIHRhc2sgb24gZmlyc3QgZmFpbCwgZXRjLiksXG4gICAgICAgIC8vIHRoZSBmaXh0dXJlIGNvbnRleHRzIG1heSBub3QgYmUgZGVsZXRlZC5cbiAgICAgICAgLy8gV2UgcmVtb3ZlIGFsbCBmaXh0dXJlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0ZXN0IGV4ZWN1dGlvbiB0byBjbGVhbiBmb3Jnb3R0ZW4gY29udGV4dHMuXG4gICAgICAgIGNvbnN0IGZpeHR1cmVJZHMgPSB1bmlxKHRhc2sudGVzdHMubWFwKHRlc3QgPT4gdGVzdC5maXh0dXJlLmlkKSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2UucmVtb3ZlRml4dHVyZUN0eHNGcm9tU3RhdGUoeyBmaXh0dXJlSWRzIH0pO1xuICAgIH1cblxuICAgIC8vIFJ1biB0YXNrXG4gICAgX2dldEZhaWxlZFRlc3RDb3VudCAodGFzaywgcmVwb3J0ZXIpIHtcbiAgICAgICAgbGV0IGZhaWxlZFRlc3RDb3VudCA9IHJlcG9ydGVyLnRhc2tJbmZvLnRlc3RDb3VudCAtIHJlcG9ydGVyLnRhc2tJbmZvLnBhc3NlZDtcblxuICAgICAgICBpZiAodGFzay5vcHRzLnN0b3BPbkZpcnN0RmFpbCAmJiAhIWZhaWxlZFRlc3RDb3VudClcbiAgICAgICAgICAgIGZhaWxlZFRlc3RDb3VudCA9IDE7XG5cbiAgICAgICAgcmV0dXJuIGZhaWxlZFRlc3RDb3VudDtcbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0VGFza1Jlc3VsdCAodGFzaywgYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHAsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkKSB7XG4gICAgICAgIGlmICghdGFzay5vcHRzLmxpdmUpIHtcbiAgICAgICAgICAgIHRhc2sub24oJ2Jyb3dzZXItam9iLWRvbmUnLCBqb2IgPT4ge1xuICAgICAgICAgICAgICAgIGpvYi5icm93c2VyQ29ubmVjdGlvbnMuZm9yRWFjaChiYyA9PiBicm93c2VyU2V0LnJlbGVhc2VDb25uZWN0aW9uKGJjKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuY2xlYXJMaXN0ZW5lcnMoJ2Vycm9yJyk7XG5cbiAgICAgICAgY29uc3QgYnJvd3NlclNldEVycm9yUHJvbWlzZSA9IHByb21pc2lmeUV2ZW50KGJyb3dzZXJTZXQsICdlcnJvcicpO1xuICAgICAgICBjb25zdCB0YXNrRXJyb3JQcm9taXNlICAgICAgID0gcHJvbWlzaWZ5RXZlbnQodGFzaywgJ2Vycm9yJyk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VCdXNFcnJvclByb21pc2UgPSBwcm9taXNpZnlFdmVudCh0aGlzLl9tZXNzYWdlQnVzLCAnZXJyb3InKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtQ29udHJvbGxlciAgICAgICA9IG5ldyBSZXBvcnRlclN0cmVhbUNvbnRyb2xsZXIodGhpcy5fbWVzc2FnZUJ1cywgcmVwb3J0ZXJzKTtcblxuICAgICAgICBjb25zdCB0YXNrRG9uZVByb21pc2UgPSB0aGlzLl9tZXNzYWdlQnVzLm9uY2UoJ2RvbmUnKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gYnJvd3NlclNldEVycm9yUHJvbWlzZS5jYW5jZWwoKSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVwb3J0ZXJzLm1hcChyZXBvcnRlciA9PiByZXBvcnRlci50YXNrSW5mby5wZW5kaW5nVGFza0RvbmVQcm9taXNlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICAgIHRhc2tEb25lUHJvbWlzZSxcbiAgICAgICAgICAgIGJyb3dzZXJTZXRFcnJvclByb21pc2UsXG4gICAgICAgICAgICB0YXNrRXJyb3JQcm9taXNlLFxuICAgICAgICAgICAgbWVzc2FnZUJ1c0Vycm9yUHJvbWlzZSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGVzdGVkQXBwKVxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0ZXN0ZWRBcHAuZXJyb3JQcm9taXNlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlVGFza0FuZFJlbGF0ZWRBc3NldHModGFzaywgYnJvd3NlclNldCwgcmVwb3J0ZXJzLCB0ZXN0ZWRBcHAsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkKTtcblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZUFzc2V0cyhicm93c2VyU2V0LCByZXBvcnRlcnMsIHRlc3RlZEFwcCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2ZpbmFsaXplQ29tcGlsZXJTZXJ2aWNlU3RhdGUodGFzaywgcnVubmFibGVDb25maWd1cmF0aW9uSWQpO1xuXG4gICAgICAgIGlmIChzdHJlYW1Db250cm9sbGVyLm11bHRpcGxlU3RyZWFtRXJyb3IpXG4gICAgICAgICAgICB0aHJvdyBzdHJlYW1Db250cm9sbGVyLm11bHRpcGxlU3RyZWFtRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZhaWxlZFRlc3RDb3VudCh0YXNrLCByZXBvcnRlcnNbMF0pO1xuICAgIH1cblxuICAgIF9jcmVhdGVUYXNrICh0ZXN0cywgYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMsIHByb3h5LCBvcHRzLCB3YXJuaW5nTG9nKSB7XG4gICAgICAgIHJldHVybiBuZXcgVGFzayh7XG4gICAgICAgICAgICB0ZXN0cyxcbiAgICAgICAgICAgIGJyb3dzZXJDb25uZWN0aW9uR3JvdXBzLFxuICAgICAgICAgICAgcHJveHksXG4gICAgICAgICAgICBvcHRzLFxuICAgICAgICAgICAgcnVubmVyV2FybmluZ0xvZzogd2FybmluZ0xvZyxcbiAgICAgICAgICAgIGNvbXBpbGVyU2VydmljZTogIHRoaXMuY29tcGlsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgbWVzc2FnZUJ1czogICAgICAgdGhpcy5fbWVzc2FnZUJ1cyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3J1blRhc2sgKHsgcmVwb3J0ZXJzLCBicm93c2VyU2V0LCB0ZXN0cywgdGVzdGVkQXBwLCBvcHRpb25zLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCB9KSB7XG4gICAgICAgIGNvbnN0IHRhc2sgICAgICAgICAgICAgID0gdGhpcy5fY3JlYXRlVGFzayh0ZXN0cywgYnJvd3NlclNldC5icm93c2VyQ29ubmVjdGlvbkdyb3VwcywgdGhpcy5wcm94eSwgb3B0aW9ucywgdGhpcy53YXJuaW5nTG9nKTtcbiAgICAgICAgY29uc3QgY29tcGxldGlvblByb21pc2UgPSB0aGlzLl9nZXRUYXNrUmVzdWx0KHRhc2ssIGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCk7XG4gICAgICAgIGxldCBjb21wbGV0ZWQgICAgICAgICAgID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5vbignc3RhcnQnLCBzdGFydEhhbmRsaW5nVGVzdEVycm9ycyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5za2lwVW5jYXVnaHRFcnJvcnMpKSB7XG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLm9uKCd0ZXN0LXJ1bi1zdGFydCcsIGFkZFJ1bm5pbmdUZXN0KTtcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMub24oJ3Rlc3QtcnVuLWRvbmUnLCAoeyBlcnJzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJycy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhc1Rhc2tFcnJvcnMgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVubmluZ1Rlc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5vbignZG9uZScsIHN0b3BIYW5kbGluZ1Rlc3RFcnJvcnMpO1xuXG4gICAgICAgIHRhc2sub24oJ2Vycm9yJywgc3RvcEhhbmRsaW5nVGVzdEVycm9ycyk7XG5cbiAgICAgICAgY29uc3Qgb25UYXNrQ29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGFzay51blJlZ2lzdGVyQ2xpZW50U2NyaXB0Um91dGluZygpO1xuXG4gICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbXBsZXRpb25Qcm9taXNlXG4gICAgICAgICAgICAudGhlbihvblRhc2tDb21wbGV0ZWQpXG4gICAgICAgICAgICAuY2F0Y2gob25UYXNrQ29tcGxldGVkKTtcblxuICAgICAgICBjb25zdCBjYW5jZWxUYXNrID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZVRhc2tBbmRSZWxhdGVkQXNzZXRzKHRhc2ssIGJyb3dzZXJTZXQsIHJlcG9ydGVycywgdGVzdGVkQXBwLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHsgY29tcGxldGlvblByb21pc2UsIGNhbmNlbFRhc2sgfTtcbiAgICB9XG5cbiAgICBfcmVnaXN0ZXJBc3NldHMgKGFzc2V0cykge1xuICAgICAgICBhc3NldHMuZm9yRWFjaChhc3NldCA9PiB0aGlzLnByb3h5LkdFVChhc3NldC5wYXRoLCBhc3NldC5pbmZvKSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlRGVidWdMb2dnZXIgKCkge1xuICAgICAgICBjb25zdCBkZWJ1Z0xvZ2dlciA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRlYnVnTG9nZ2VyKTtcblxuICAgICAgICBjb25zdCBkZWJ1Z0xvZ2dlckRlZmluZWRDb3JyZWN0bHkgPSBkZWJ1Z0xvZ2dlciA9PT0gbnVsbCB8fCAhIWRlYnVnTG9nZ2VyICYmXG4gICAgICAgICAgICBbJ3Nob3dCcmVha3BvaW50JywgJ2hpZGVCcmVha3BvaW50J10uZXZlcnkobWV0aG9kID0+IG1ldGhvZCBpbiBkZWJ1Z0xvZ2dlciAmJiBpc0Z1bmN0aW9uKGRlYnVnTG9nZ2VyW21ldGhvZF0pKTtcblxuICAgICAgICBpZiAoIWRlYnVnTG9nZ2VyRGVmaW5lZENvcnJlY3RseSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgW09QVElPTl9OQU1FUy5kZWJ1Z0xvZ2dlcl06IGRlZmF1bHREZWJ1Z0xvZ2dlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlU3BlZWRPcHRpb24gKCkge1xuICAgICAgICBjb25zdCBzcGVlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnNwZWVkKTtcblxuICAgICAgICBpZiAoc3BlZWQgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAodHlwZW9mIHNwZWVkICE9PSAnbnVtYmVyJyB8fCBpc05hTihzcGVlZCkgfHwgc3BlZWQgPCAwLjAxIHx8IHNwZWVkID4gMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuaW52YWxpZFNwZWVkVmFsdWUpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUNvbmN1cnJlbmN5T3B0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29uY3VycmVuY3kgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5jb25jdXJyZW5jeSk7XG5cbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09PSB2b2lkIDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25jdXJyZW5jeSAhPT0gJ251bWJlcicgfHwgaXNOYU4oY29uY3VycmVuY3kpIHx8IGNvbmN1cnJlbmN5IDwgMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuaW52YWxpZENvbmN1cnJlbmN5RmFjdG9yKTtcblxuICAgICAgICBpZiAoY29uY3VycmVuY3kgPiAxICYmIHRoaXMuYm9vdHN0cmFwcGVyLmJyb3dzZXJzLnNvbWUoYnJvd3NlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgPyBicm93c2VyLmJyb3dzZXJJbmZvLmJyb3dzZXJPcHRpb24uY2RwUG9ydFxuICAgICAgICAgICAgICAgIDogYnJvd3Nlci5icm93c2VyT3B0aW9uLmNkcFBvcnQ7XG4gICAgICAgIH0pKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3RTZXRDb25jdXJyZW5jeVdpdGhDRFBQb3J0KTtcbiAgICB9XG5cbiAgICBhc3luYyBfdmFsaWRhdGVCcm93c2VycyAoKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuYnJvd3NlcnMpO1xuXG4gICAgICAgIGlmICghYnJvd3NlcnMgfHwgQXJyYXkuaXNBcnJheShicm93c2VycykgJiYgIWJyb3dzZXJzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuYnJvd3Nlck5vdFNldCk7XG5cbiAgICAgICAgaWYgKE9TLm1hYylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NoZWNrUmVxdWlyZWRQZXJtaXNzaW9ucyhicm93c2Vycyk7XG5cbiAgICAgICAgaWYgKE9TLmxpbnV4ICYmICFkZXRlY3REaXNwbGF5KCkpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jaGVja1RoYXRUZXN0c0NhblJ1bldpdGhvdXREaXNwbGF5KGJyb3dzZXJzKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVSZXF1ZXN0VGltZW91dE9wdGlvbiAob3B0aW9uTmFtZSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0VGltZW91dCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24ob3B0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3RUaW1lb3V0ID09PSB2b2lkIDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OZWdhdGl2ZU51bWJlciwgbnVsbCwgYFwiJHtvcHRpb25OYW1lfVwiIG9wdGlvbmAsIHJlcXVlc3RUaW1lb3V0KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVQcm94eUJ5cGFzc09wdGlvbiAoKSB7XG4gICAgICAgIGxldCBwcm94eUJ5cGFzcyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnByb3h5QnlwYXNzKTtcblxuICAgICAgICBpZiAocHJveHlCeXBhc3MgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhc3NlcnRUeXBlKFsgaXMuc3RyaW5nLCBpcy5hcnJheSBdLCBudWxsLCAnVGhlIFwicHJveHlCeXBhc3NcIiBhcmd1bWVudCcsIHByb3h5QnlwYXNzKTtcblxuICAgICAgICBpZiAodHlwZW9mIHByb3h5QnlwYXNzID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHByb3h5QnlwYXNzID0gW3Byb3h5QnlwYXNzXTtcblxuICAgICAgICBwcm94eUJ5cGFzcyA9IHByb3h5QnlwYXNzLnJlZHVjZSgoYXJyLCBydWxlcykgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsIG51bGwsICdUaGUgXCJwcm94eUJ5cGFzc1wiIGFyZ3VtZW50JywgcnVsZXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXJyLmNvbmNhdChydWxlcy5zcGxpdCgnLCcpKTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5tZXJnZU9wdGlvbnMoeyBwcm94eUJ5cGFzcyB9KTtcbiAgICB9XG5cbiAgICBfZ2V0U2NyZWVuc2hvdE9wdGlvbnMgKCkge1xuICAgICAgICBsZXQgeyBwYXRoLCBwYXRoUGF0dGVybiB9ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuc2NyZWVuc2hvdHMpIHx8IHt9O1xuXG4gICAgICAgIGlmICghcGF0aClcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5zY3JlZW5zaG90UGF0aCk7XG5cbiAgICAgICAgaWYgKCFwYXRoUGF0dGVybilcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuc2NyZWVuc2hvdFBhdGhQYXR0ZXJuKTtcblxuICAgICAgICByZXR1cm4geyBwYXRoLCBwYXRoUGF0dGVybiB9O1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVNjcmVlbnNob3RPcHRpb25zICgpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoLCBwYXRoUGF0dGVybiB9ID0gdGhpcy5fZ2V0U2NyZWVuc2hvdE9wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCBkaXNhYmxlU2NyZWVuc2hvdHMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5kaXNhYmxlU2NyZWVuc2hvdHMpIHx8ICFwYXRoO1xuXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5tZXJnZU9wdGlvbnMoeyBbT1BUSU9OX05BTUVTLmRpc2FibGVTY3JlZW5zaG90c106IGRpc2FibGVTY3JlZW5zaG90cyB9KTtcblxuICAgICAgICBpZiAoZGlzYWJsZVNjcmVlbnNob3RzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0ZVNjcmVlbnNob3RQYXRoKHBhdGgsICdzY3JlZW5zaG90cyBiYXNlIGRpcmVjdG9yeSBwYXRoJyk7XG5cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5tZXJnZU9wdGlvbnMoeyBbT1BUSU9OX05BTUVTLnNjcmVlbnNob3RzXTogeyBwYXRoOiByZXNvbHZlUGF0aChwYXRoKSB9IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhQYXR0ZXJuKSB7XG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0ZVNjcmVlbnNob3RQYXRoKHBhdGhQYXR0ZXJuLCAnc2NyZWVuc2hvdHMgcGF0aCBwYXR0ZXJuJyk7XG5cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5tZXJnZU9wdGlvbnMoeyBbT1BUSU9OX05BTUVTLnNjcmVlbnNob3RzXTogeyBwYXRoUGF0dGVybiB9IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3ZhbGlkYXRlVmlkZW9PcHRpb25zICgpIHtcbiAgICAgICAgY29uc3QgdmlkZW9QYXRoICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy52aWRlb1BhdGgpO1xuICAgICAgICBjb25zdCB2aWRlb0VuY29kaW5nT3B0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnZpZGVvRW5jb2RpbmdPcHRpb25zKTtcblxuICAgICAgICBsZXQgdmlkZW9PcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMudmlkZW9PcHRpb25zKTtcblxuICAgICAgICBpZiAoIXZpZGVvUGF0aCkge1xuICAgICAgICAgICAgaWYgKHZpZGVvT3B0aW9ucyB8fCB2aWRlb0VuY29kaW5nT3B0aW9ucylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdFNldFZpZGVvT3B0aW9uc1dpdGhvdXRCYXNlVmlkZW9QYXRoU3BlY2lmaWVkKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IFtPUFRJT05fTkFNRVMudmlkZW9QYXRoXTogcmVzb2x2ZVBhdGgodmlkZW9QYXRoKSB9KTtcblxuICAgICAgICBpZiAoIXZpZGVvT3B0aW9ucykge1xuICAgICAgICAgICAgdmlkZW9PcHRpb25zID0ge307XG5cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5tZXJnZU9wdGlvbnMoeyBbT1BUSU9OX05BTUVTLnZpZGVvT3B0aW9uc106IHZpZGVvT3B0aW9ucyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aWRlb09wdGlvbnMuZmZtcGVnUGF0aClcbiAgICAgICAgICAgIHZpZGVvT3B0aW9ucy5mZm1wZWdQYXRoID0gcmVzb2x2ZVBhdGgodmlkZW9PcHRpb25zLmZmbXBlZ1BhdGgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2aWRlb09wdGlvbnMuZmZtcGVnUGF0aCA9IGF3YWl0IGRldGVjdEZGTVBFRygpO1xuXG4gICAgICAgIGlmICghdmlkZW9PcHRpb25zLmZmbXBlZ1BhdGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRGRk1QRUcpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUNvbXBpbGVyT3B0aW9ucyAoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmNvbXBpbGVyT3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKCFjb21waWxlck9wdGlvbnMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc3BlY2lmaWVkQ29tcGlsZXJzICA9IE9iamVjdC5rZXlzKGNvbXBpbGVyT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGN1c3RvbWl6ZWRDb21waWxlcnMgPSBPYmplY3Qua2V5cyhDdXN0b21pemFibGVDb21waWxlcnMpO1xuICAgICAgICBjb25zdCB3cm9uZ0NvbXBpbGVycyAgICAgID0gc3BlY2lmaWVkQ29tcGlsZXJzLmZpbHRlcihjb21waWxlciA9PiAhY3VzdG9taXplZENvbXBpbGVycy5pbmNsdWRlcyhjb21waWxlcikpO1xuXG4gICAgICAgIGlmICghd3JvbmdDb21waWxlcnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvbXBpbGVyTGlzdFN0ciA9IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyh3cm9uZ0NvbXBpbGVycywgdm9pZCAwLCBcIidcIik7XG4gICAgICAgIGNvbnN0IHBsdXJhbFN1ZmZpeCAgICA9IGdldFBsdXJhbFN1ZmZpeCh3cm9uZ0NvbXBpbGVycyk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3RDdXN0b21pemVTcGVjaWZpZWRDb21waWxlcnMsIGNvbXBpbGVyTGlzdFN0ciwgcGx1cmFsU3VmZml4KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVSZXRyeVRlc3RQYWdlc09wdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5VGVzdFBhZ2VzT3B0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMpO1xuXG4gICAgICAgIGlmICghcmV0cnlUZXN0UGFnZXNPcHRpb24pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc3NsID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuc3NsKTtcblxuICAgICAgICBpZiAoc3NsKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGhvc3RuYW1lID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuaG9zdG5hbWUpO1xuXG4gICAgICAgIGlmIChpc0xvY2FsaG9zdChob3N0bmFtZSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3RFbmFibGVSZXRyeVRlc3RQYWdlc09wdGlvbik7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlUXVhcmFudGluZU9wdGlvbnMgKCkge1xuICAgICAgICBjb25zdCBxdWFyYW50aW5lTW9kZSA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnF1YXJhbnRpbmVNb2RlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHF1YXJhbnRpbmVNb2RlID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHZhbGlkYXRlUXVhcmFudGluZU9wdGlvbnMocXVhcmFudGluZU1vZGUsIE9QVElPTl9OQU1FUy5xdWFyYW50aW5lTW9kZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ZhbGlkYXRlUnVuT3B0aW9ucyAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlRGVidWdMb2dnZXIoKTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTY3JlZW5zaG90T3B0aW9ucygpO1xuICAgICAgICBhd2FpdCB0aGlzLl92YWxpZGF0ZVZpZGVvT3B0aW9ucygpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVNwZWVkT3B0aW9uKCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUHJveHlCeXBhc3NPcHRpb24oKTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVDb21waWxlck9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVSZXRyeVRlc3RQYWdlc09wdGlvbigpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVJlcXVlc3RUaW1lb3V0T3B0aW9uKE9QVElPTl9OQU1FUy5wYWdlUmVxdWVzdFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVJlcXVlc3RUaW1lb3V0T3B0aW9uKE9QVElPTl9OQU1FUy5hamF4UmVxdWVzdFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZVF1YXJhbnRpbmVPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlQ29uY3VycmVuY3lPcHRpb24oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fdmFsaWRhdGVCcm93c2VycygpO1xuICAgIH1cblxuICAgIF9jcmVhdGVSdW5uYWJsZUNvbmZpZ3VyYXRpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBwZXJcbiAgICAgICAgICAgIC5jcmVhdGVSdW5uYWJsZUNvbmZpZ3VyYXRpb24oKVxuICAgICAgICAgICAgLnRoZW4ocnVubmFibGVDb25maWd1cmF0aW9uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RvbmUtYm9vdHN0cmFwcGluZycpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bm5hYmxlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVNjcmVlbnNob3RQYXRoIChzY3JlZW5zaG90UGF0aCwgcGF0aFR5cGUpIHtcbiAgICAgICAgY29uc3QgZm9yYmlkZGVuQ2hhcnNMaXN0ID0gY2hlY2tGaWxlUGF0aChzY3JlZW5zaG90UGF0aCk7XG5cbiAgICAgICAgaWYgKGZvcmJpZGRlbkNoYXJzTGlzdC5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmZvcmJpZGRlbkNoYXJhdGVyc0luU2NyZWVuc2hvdFBhdGgsIHNjcmVlbnNob3RQYXRoLCBwYXRoVHlwZSwgcmVuZGVyRm9yYmlkZGVuQ2hhcnNMaXN0KGZvcmJpZGRlbkNoYXJzTGlzdCkpO1xuICAgIH1cblxuICAgIF9zZXRCb290c3RyYXBwZXJPcHRpb25zICgpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnByZXBhcmUoKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm5vdGlmeUFib3V0T3ZlcnJpZGRlbk9wdGlvbnModGhpcy53YXJuaW5nTG9nKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm5vdGlmeUFib3V0RGVwcmVjYXRlZE9wdGlvbnModGhpcy53YXJuaW5nTG9nKTtcblxuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5zb3VyY2VzICAgICAgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuc3JjKSB8fCB0aGlzLmJvb3RzdHJhcHBlci5zb3VyY2VzO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5icm93c2VycyAgICAgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuYnJvd3NlcnMpIHx8IHRoaXMuYm9vdHN0cmFwcGVyLmJyb3dzZXJzO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5jb25jdXJyZW5jeSAgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuY29uY3VycmVuY3kpO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5hcHBDb21tYW5kICAgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuYXBwQ29tbWFuZCkgfHwgdGhpcy5ib290c3RyYXBwZXIuYXBwQ29tbWFuZDtcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIuYXBwSW5pdERlbGF5ICAgICAgICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmFwcEluaXREZWxheSk7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLmZpbHRlciAgICAgICAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5maWx0ZXIpIHx8IHRoaXMuYm9vdHN0cmFwcGVyLmZpbHRlcjtcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIucmVwb3J0ZXJzICAgICAgICAgICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnJlcG9ydGVyKSB8fCB0aGlzLmJvb3RzdHJhcHBlci5yZXBvcnRlcnM7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLnRzQ29uZmlnUGF0aCAgICAgICAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy50c0NvbmZpZ1BhdGgpO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5jbGllbnRTY3JpcHRzICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cykgfHwgdGhpcy5ib290c3RyYXBwZXIuY2xpZW50U2NyaXB0cztcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIuZGlzYWJsZU11bHRpcGxlV2luZG93cyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRpc2FibGVNdWx0aXBsZVdpbmRvd3MpO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5wcm94eWxlc3MgICAgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucHJveHlsZXNzKTtcbiAgICAgICAgdGhpcy5ib290c3RyYXBwZXIuY29tcGlsZXJPcHRpb25zICAgICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmNvbXBpbGVyT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYm9vdHN0cmFwcGVyLmJyb3dzZXJJbml0VGltZW91dCAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5icm93c2VySW5pdFRpbWVvdXQpO1xuICAgICAgICB0aGlzLmJvb3RzdHJhcHBlci5ob29rcyAgICAgICAgICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuaG9va3MpO1xuICAgIH1cblxuICAgIGFzeW5jIF9hZGREYXNoYm9hcmRSZXBvcnRlcklmTmVlZGVkICgpIHtcbiAgICAgICAgY29uc3QgZGFzaGJvYXJkT3B0aW9ucyA9IGF3YWl0IHRoaXMuX2dldERhc2hib2FyZE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IHJlcG9ydGVyT3B0aW9ucyAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnJlcG9ydGVyKTtcblxuICAgICAgICAvLyBOT1RFOiB3ZSBzaG91bGQgc2VuZCByZXBvcnRzIHdoZW4gc2VuZFJlcG9ydCBpcyB1bmRlZmluZWRcbiAgICAgICAgLy8gVE9ETzogbWFrZSB0aGlzIG9wdGlvbiBiaW5hcnkgaW5zdGVhZCBvZiB0cmktc3RhdGVcbiAgICAgICAgaWYgKCFkYXNoYm9hcmRPcHRpb25zLnRva2VuIHx8IGRhc2hib2FyZE9wdGlvbnMuc2VuZFJlcG9ydCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKCFyZXBvcnRlck9wdGlvbnMpXG4gICAgICAgICAgICByZXBvcnRlck9wdGlvbnMgPSBbXTtcblxuICAgICAgICBjb25zdCBkYXNoYm9hcmRSZXBvcnRlciA9IHJlcG9ydGVyT3B0aW9ucy5maW5kKHJlcG9ydGVyID0+IHJlcG9ydGVyLm5hbWUgPT09IERBU0hCT0FSRF9SRVBPUlRFUl9OQU1FKTtcblxuICAgICAgICBpZiAoIWRhc2hib2FyZFJlcG9ydGVyKVxuICAgICAgICAgICAgcmVwb3J0ZXJPcHRpb25zLnB1c2goeyBuYW1lOiBEQVNIQk9BUkRfUkVQT1JURVJfTkFNRSwgb3B0aW9uczogZGFzaGJvYXJkT3B0aW9ucyB9KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGFzaGJvYXJkUmVwb3J0ZXIub3B0aW9ucyA9IGRhc2hib2FyZE9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IFtPUFRJT05fTkFNRVMucmVwb3J0ZXJdOiByZXBvcnRlck9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgX2FkZERhc2hCb2FyZEFkdmVydGlzZW1lbnRJZk5lZWRlZCAoKSB7XG4gICAgICAgIGNvbnN0IHJlcG9ydGVyT3B0aW9ucyAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5yZXBvcnRlcik7XG5cbiAgICAgICAgaWYgKCFyZXBvcnRlck9wdGlvbnMgfHwgY2FzdEFycmF5KHJlcG9ydGVyT3B0aW9ucykuZXZlcnkocmVwb3J0ZXIgPT4gcmVwb3J0ZXIubmFtZSA9PT0gU1BFQ19SRVBPUlRFUl9OQU1FKSlcbiAgICAgICAgICAgIHRoaXMuX2FkZERhc2hib2FyZEFkdmVydGlzZW1lbnQoYFxcbiR7Y2hhbGsuYm9sZC5yZWQoJ05FVycpfTogVHJ5IFRlc3RDYWZlIERhc2hib2FyZCAoaHR0cHM6Ly9kYXNoYm9hcmQudGVzdGNhZmUuaW8vKSB0byBlbGltaW5hdGUgdW5zdGFibGUgYW5kIGZhaWxpbmcgdGVzdHMuXFxuYCk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2dldERhc2hib2FyZE9wdGlvbnMgKCkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRhc2hib2FyZCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgb3B0aW9ucyA9IGF3YWl0IHRoaXMuX2xvYWREYXNoYm9hcmRPcHRpb25zRnJvbVN0b3JhZ2UoKTtcblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBhc3luYyBfbG9hZERhc2hib2FyZE9wdGlvbnNGcm9tU3RvcmFnZSAoKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgRGFzaGJvYXJkQ29uZmlnU3RvcmFnZSgpO1xuXG4gICAgICAgIGF3YWl0IHN0b3JhZ2UubG9hZCgpO1xuXG4gICAgICAgIHJldHVybiBzdG9yYWdlLm9wdGlvbnM7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ByZXBhcmVDbGllbnRTY3JpcHRzICh0ZXN0cywgY2xpZW50U2NyaXB0cykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGVzdHMubWFwKGFzeW5jIHRlc3QgPT4ge1xuICAgICAgICAgICAgaWYgKHRlc3QuaXNMZWdhY3kpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBsZXQgbG9hZGVkVGVzdENsaWVudFNjcmlwdHMgPSBhd2FpdCBsb2FkQ2xpZW50U2NyaXB0cyh0ZXN0LmNsaWVudFNjcmlwdHMsIGRpcm5hbWUodGVzdC50ZXN0RmlsZS5maWxlbmFtZSkpO1xuXG4gICAgICAgICAgICBsb2FkZWRUZXN0Q2xpZW50U2NyaXB0cyA9IGNsaWVudFNjcmlwdHMuY29uY2F0KGxvYWRlZFRlc3RDbGllbnRTY3JpcHRzKTtcblxuICAgICAgICAgICAgdGVzdC5jbGllbnRTY3JpcHRzID0gc2V0VW5pcXVlVXJscyhsb2FkZWRUZXN0Q2xpZW50U2NyaXB0cyk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBhc3luYyBfaGFzTG9jYWxCcm93c2VycyAoYnJvd3NlckluZm8pIHtcbiAgICAgICAgZm9yIChjb25zdCBicm93c2VyIG9mIGJyb3dzZXJJbmZvKSB7XG4gICAgICAgICAgICBpZiAoYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoYXdhaXQgYnJvd3Nlci5wcm92aWRlci5pc0xvY2FsQnJvd3Nlcih2b2lkIDAsIGJyb3dzZXIuYnJvd3Nlck5hbWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGFzeW5jIF9jaGVja1JlcXVpcmVkUGVybWlzc2lvbnMgKGJyb3dzZXJJbmZvKSB7XG4gICAgICAgIGNvbnN0IGhhc0xvY2FsQnJvd3NlcnMgPSBhd2FpdCB0aGlzLl9oYXNMb2NhbEJyb3dzZXJzKGJyb3dzZXJJbmZvKTtcblxuICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBhdXRoZW50aWNhdGlvbkhlbHBlcihcbiAgICAgICAgICAgICgpID0+IGZpbmRXaW5kb3coJycpLFxuICAgICAgICAgICAgZXJyb3JzLlVuYWJsZVRvQWNjZXNzU2NyZWVuUmVjb3JkaW5nQVBJRXJyb3IsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmU6IGhhc0xvY2FsQnJvd3NlcnMgJiYgIWlzQ0ksXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFlcnJvcilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoaGFzTG9jYWxCcm93c2VycylcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuXG4gICAgICAgIFJlbW90ZUJyb3dzZXJQcm92aWRlci5jYW5EZXRlY3RMb2NhbEJyb3dzZXJzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgX2NoZWNrVGhhdFRlc3RzQ2FuUnVuV2l0aG91dERpc3BsYXkgKGJyb3dzZXJJbmZvU291cmNlKSB7XG4gICAgICAgIGZvciAobGV0IGJyb3dzZXJJbmZvIG9mIGJyb3dzZXJJbmZvU291cmNlKSB7XG4gICAgICAgICAgICBpZiAoYnJvd3NlckluZm8gaW5zdGFuY2VvZiBCcm93c2VyQ29ubmVjdGlvbilcbiAgICAgICAgICAgICAgICBicm93c2VySW5mbyA9IGJyb3dzZXJJbmZvLmJyb3dzZXJJbmZvO1xuXG4gICAgICAgICAgICBjb25zdCBpc0xvY2FsQnJvd3NlciAgICA9IGF3YWl0IGJyb3dzZXJJbmZvLnByb3ZpZGVyLmlzTG9jYWxCcm93c2VyKHZvaWQgMCwgYnJvd3NlckluZm8uYnJvd3Nlck5hbWUpO1xuICAgICAgICAgICAgY29uc3QgaXNIZWFkbGVzc0Jyb3dzZXIgPSBhd2FpdCBicm93c2VySW5mby5wcm92aWRlci5pc0hlYWRsZXNzQnJvd3Nlcih2b2lkIDAsIGJyb3dzZXJJbmZvLmJyb3dzZXJOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGlzTG9jYWxCcm93c2VyICYmICFpc0hlYWRsZXNzQnJvd3Nlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFJVTlRJTUVfRVJST1JTLmNhbm5vdFJ1bkxvY2FsTm9uSGVhZGxlc3NCcm93c2VyV2l0aG91dERpc3BsYXksXG4gICAgICAgICAgICAgICAgICAgIGJyb3dzZXJJbmZvLmFsaWFzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF9zZXRDb25maWd1cmF0aW9uT3B0aW9ucyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5hc3luY01lcmdlT3B0aW9ucyh0aGlzLl9vcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICBlbWJlZGRpbmdPcHRpb25zIChvcHRzKSB7XG4gICAgICAgIGNvbnN0IHsgYXNzZXRzLCBUZXN0UnVuQ3RvciB9ID0gb3B0cztcblxuICAgICAgICB0aGlzLl9yZWdpc3RlckFzc2V0cyhhc3NldHMpO1xuICAgICAgICB0aGlzLl9vcHRpb25zLlRlc3RSdW5DdG9yID0gVGVzdFJ1bkN0b3I7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc3JjICguLi5zb3VyY2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5zcmMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLnNyYyk7XG5cbiAgICAgICAgdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMuc3JjXSA9IHRoaXMuX3ByZXBhcmVBcnJheVBhcmFtZXRlcihzb3VyY2VzKTtcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQuc3JjICAgICA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYnJvd3NlcnMgKC4uLmJyb3dzZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5icm93c2VycylcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuLCBPUFRJT05fTkFNRVMuYnJvd3NlcnMpO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnMuYnJvd3NlcnMgICAgICAgICAgID0gdGhpcy5fcHJlcGFyZUFycmF5UGFyYW1ldGVyKGJyb3dzZXJzKTtcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQuYnJvd3NlcnMgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbmN1cnJlbmN5IChjb25jdXJyZW5jeSkge1xuICAgICAgICB0aGlzLl9vcHRpb25zLmNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3k7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVwb3J0ZXIgKG5hbWUsIG91dHB1dCkge1xuICAgICAgICBpZiAodGhpcy5hcGlNZXRob2RXYXNDYWxsZWQucmVwb3J0ZXIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLnJlcG9ydGVyKTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5yZXBvcnRlcl0gPSB0aGlzLl9wcmVwYXJlQXJyYXlQYXJhbWV0ZXIocHJlcGFyZVJlcG9ydGVycyhuYW1lLCBvdXRwdXQpKTtcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQucmVwb3J0ZXIgICAgID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmaWx0ZXIgKGZpbHRlcikge1xuICAgICAgICB0aGlzLl9vcHRpb25zLmZpbHRlciA9IGZpbHRlcjtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB1c2VQcm94eSAocHJveHksIHByb3h5QnlwYXNzKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMucHJveHkgICAgICAgPSBwcm94eTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5wcm94eUJ5cGFzcyA9IHByb3h5QnlwYXNzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNjcmVlbnNob3RzICguLi5vcHRpb25zKSB7XG4gICAgICAgIGxldCBmdWxsUGFnZTtcbiAgICAgICAgbGV0IHRodW1ibmFpbHM7XG4gICAgICAgIGxldCBbcGF0aCwgdGFrZU9uRmFpbHMsIHBhdGhQYXR0ZXJuXSA9IG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmIG9wdGlvbnNbMF0gJiYgdHlwZW9mIG9wdGlvbnNbMF0gPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgKHsgcGF0aCwgdGFrZU9uRmFpbHMsIHBhdGhQYXR0ZXJuLCBmdWxsUGFnZSwgdGh1bWJuYWlscyB9ID0gb3B0aW9uc1swXSk7XG5cbiAgICAgICAgdGhpcy5fb3B0aW9ucy5zY3JlZW5zaG90cyA9IHsgcGF0aCwgdGFrZU9uRmFpbHMsIHBhdGhQYXR0ZXJuLCBmdWxsUGFnZSwgdGh1bWJuYWlscyB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZpZGVvIChwYXRoLCBvcHRpb25zLCBlbmNvZGluZ09wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMudmlkZW9QYXRoXSAgICAgICAgICAgID0gcGF0aDtcbiAgICAgICAgdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMudmlkZW9PcHRpb25zXSAgICAgICAgID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMudmlkZW9FbmNvZGluZ09wdGlvbnNdID0gZW5jb2RpbmdPcHRpb25zO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0YXJ0QXBwIChjb21tYW5kLCBpbml0RGVsYXkpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9uc1tPUFRJT05fTkFNRVMuYXBwQ29tbWFuZF0gICA9IGNvbW1hbmQ7XG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLmFwcEluaXREZWxheV0gPSBpbml0RGVsYXk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdHNDb25maWdQYXRoIChwYXRoKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnRzQ29uZmlnUGF0aF0gPSBwYXRoO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNsaWVudFNjcmlwdHMgKC4uLnNjcmlwdHMpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmNsaWVudFNjcmlwdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMpO1xuXG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHNdID0gdGhpcy5fcHJlcGFyZUFycmF5UGFyYW1ldGVyKHNjcmlwdHMpO1xuICAgICAgICB0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzICAgICA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29tcGlsZXJPcHRpb25zIChvcHRzKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLmNvbXBpbGVyT3B0aW9uc10gPSBvcHRzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGRhc2hib2FyZCAob3B0cykge1xuICAgICAgICB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5kYXNoYm9hcmRdID0gb3B0cztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBydW4gKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBsZXQgcmVwb3J0ZXJzO1xuXG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuY2xlYXJMaXN0ZW5lcnMoKTtcblxuICAgICAgICBjb25zdCBtZXNzYWdlQnVzRXJyb3JQcm9taXNlID0gcHJvbWlzaWZ5RXZlbnQodGhpcy5fbWVzc2FnZUJ1cywgJ2Vycm9yJyk7XG5cbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgcnVuVGFza1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fc2V0Q29uZmlndXJhdGlvbk9wdGlvbnMoKSlcbiAgICAgICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9hZGREYXNoYm9hcmRSZXBvcnRlcklmTmVlZGVkKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWRkRGFzaEJvYXJkQWR2ZXJ0aXNlbWVudElmTmVlZGVkKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gUmVwb3J0ZXIuZ2V0UmVwb3J0ZXJQbHVnaW5zKHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnJlcG9ydGVyKSkpXG4gICAgICAgICAgICAudGhlbihyZXBvcnRlclBsdWdpbnMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydGVycyA9IHJlcG9ydGVyUGx1Z2lucy5tYXAocmVwb3J0ZXIgPT4gbmV3IFJlcG9ydGVyKHJlcG9ydGVyLnBsdWdpbiwgdGhpcy5fbWVzc2FnZUJ1cywgcmVwb3J0ZXIub3V0U3RyZWFtLCByZXBvcnRlci5uYW1lKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVwb3J0ZXJzLm1hcChyZXBvcnRlciA9PiByZXBvcnRlci5pbml0KCkpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9zZXRCb290c3RyYXBwZXJPcHRpb25zKCkpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nRW50cnkoREVCVUdfTE9HR0VSLCB0aGlzLmNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlUnVuT3B0aW9ucygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuX2NyZWF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbigpKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHsgYnJvd3NlclNldCwgdGVzdHMsIHRlc3RlZEFwcCwgY29tbW9uQ2xpZW50U2NyaXB0cywgaWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXBhcmVDbGllbnRTY3JpcHRzKHRlc3RzLCBjb21tb25DbGllbnRTY3JpcHRzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb25zKCksXG5cbiAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkVXJsOiByZXBvcnRlcnMuZmluZChyID0+IHIucGx1Z2luLm5hbWUgPT09ICdkYXNoYm9hcmQnKT8ucGx1Z2luLmdldFJlcG9ydFVybCgpLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcHBlci5jb21waWxlclNlcnZpY2U/LnNldE9wdGlvbnMoeyB2YWx1ZTogcmVzdWx0T3B0aW9ucyB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ydW5UYXNrKHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXJzLFxuICAgICAgICAgICAgICAgICAgICBicm93c2VyU2V0LFxuICAgICAgICAgICAgICAgICAgICB0ZXN0cyxcbiAgICAgICAgICAgICAgICAgICAgdGVzdGVkQXBwLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAgICAgICAgICAgICAgICAgcmVzdWx0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcnVubmFibGVDb25maWd1cmF0aW9uSWQ6IGlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgICBydW5UYXNrUHJvbWlzZSxcbiAgICAgICAgICAgIG1lc3NhZ2VCdXNFcnJvclByb21pc2UsXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNhbmNlbGFibGVQcm9taXNlKFByb21pc2UucmFjZShwcm9taXNlcykpO1xuICAgIH1cblxuICAgIGFzeW5jIHN0b3AgKCkge1xuICAgICAgICAvLyBOT1RFOiBXaGVuIHRhc2tQcm9taXNlIGlzIGNhbmNlbGxlZCwgaXQgaXMgcmVtb3ZlZCBmcm9tXG4gICAgICAgIC8vIHRoZSBwZW5kaW5nVGFza1Byb21pc2VzIGFycmF5LCB3aGljaCBsZWFkcyB0byBzaGlmdGluZyBpbmRleGVzXG4gICAgICAgIC8vIHRvd2FyZHMgdGhlIGJlZ2lubmluZy4gU28sIHdlIG11c3QgY29weSB0aGUgYXJyYXkgaW4gb3JkZXIgdG8gaXRlcmF0ZSBpdCxcbiAgICAgICAgLy8gb3Igd2UgY2FuIHBlcmZvcm0gaXRlcmF0aW9uIGZyb20gdGhlIGVuZCB0byB0aGUgYmVnaW5uaW5nLlxuICAgICAgICBjb25zdCBjYW5jZWxsYXRpb25Qcm9taXNlcyA9IHRoaXMucGVuZGluZ1Rhc2tQcm9taXNlcy5yZWR1Y2VSaWdodCgocmVzdWx0LCB0YXNrUHJvbWlzZSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGFza1Byb21pc2UuY2FuY2VsKCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2FuY2VsbGF0aW9uUHJvbWlzZXMpO1xuICAgIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "testcafe",
3
3
  "description": "Automated browser testing for the modern web development stack.",
4
4
  "license": "MIT",
5
- "version": "1.19.0-alpha.2",
5
+ "version": "1.19.0-alpha.3",
6
6
  "author": {
7
7
  "name": "Developer Express Inc.",
8
8
  "url": "https://www.devexpress.com/"