@cdktn/provider-schema 0.25.0-pre.40 → 0.25.0-pre.42

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.
@@ -42,6 +42,19 @@ const path = __importStar(require("path"));
42
42
  const safe_stable_stringify_1 = __importDefault(require("safe-stable-stringify"));
43
43
  const commons_1 = require("@cdktn/commons");
44
44
  const provider_schema_1 = require("../provider-schema");
45
+ /**
46
+ * Rewrites the registry host in the keys of a fully-qualified-name map.
47
+ * Only the keys: a host appearing inside provider documentation text is the
48
+ * same whichever CLI fetched the schema, and should stay as authored.
49
+ */
50
+ function stubRegistryKeys(map) {
51
+ if (!map)
52
+ return map;
53
+ return Object.fromEntries(Object.entries(map).map(([fqpn, v]) => [
54
+ fqpn.replace(/^[^/]+\//, "STUBBED_REGISTRY/"),
55
+ v,
56
+ ]));
57
+ }
45
58
  function sanitizeJson(value) {
46
59
  value["format_version"] = "STUBBED VERSION";
47
60
  // cli_name/cli_version stamp whatever binary fetched the schema and vary
@@ -50,6 +63,14 @@ function sanitizeJson(value) {
50
63
  value["cli_name"] = "STUBBED CLI";
51
64
  if ("cli_version" in value)
52
65
  value["cli_version"] = "STUBBED VERSION";
66
+ // Same reason: the CLI keys these by fully qualified name, so the host says
67
+ // which binary fetched the schema rather than anything about the code under
68
+ // test - terraform and tofu would otherwise need separate snapshots of
69
+ // identical data.
70
+ if (value["provider_schemas"])
71
+ value["provider_schemas"] = stubRegistryKeys(value["provider_schemas"]);
72
+ if (value["provider_versions"])
73
+ value["provider_versions"] = stubRegistryKeys(value["provider_versions"]);
53
74
  return (0, safe_stable_stringify_1.default)(value, null, 2);
54
75
  }
55
76
  describe("readSchema", () => {
@@ -248,4 +269,4 @@ describe("sanitizeProviderSchema", () => {
248
269
  expect(result).toMatchSnapshot();
249
270
  });
250
271
  });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3Byb3ZpZGVyLXNjaGVtYS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQywyQ0FBNkI7QUFDN0Isa0ZBQW9EO0FBQ3BELDRDQU93QjtBQUN4Qix3REFJNEI7QUFFNUIsU0FBUyxZQUFZLENBQUMsS0FBVTtJQUM5QixLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztJQUM1Qyx5RUFBeUU7SUFDekUsaUJBQWlCO0lBQ2pCLElBQUksVUFBVSxJQUFJLEtBQUs7UUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBQzNELElBQUksYUFBYSxJQUFJLEtBQUs7UUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7SUFDckUsT0FBTyxJQUFBLCtCQUFlLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUkscUNBQTJCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLHVDQUE2QixDQUM5QyxRQUFRLEVBQ1Isa0JBQVEsQ0FBQyxVQUFVLENBQ3BCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsb0NBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2pELENBQUMs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Q0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxJQUFBLHdDQUFzQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHN0YWJsZVN0cmluZ2lmeSBmcm9tIFwic2FmZS1zdGFibGUtc3RyaW5naWZ5XCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50LFxuICBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQsXG4gIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIExhbmd1YWdlLFxuICBQcm92aWRlclNjaGVtYSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICByZWFkTW9kdWxlU2NoZW1hLFxuICByZWFkUHJvdmlkZXJTY2hlbWEsXG4gIHNhbml0aXplUHJvdmlkZXJTY2hlbWEsXG59IGZyb20gXCIuLi9wcm92aWRlci1zY2hlbWFcIjtcblxuZnVuY3Rpb24gc2FuaXRpemVKc29uKHZhbHVlOiBhbnkpIHtcbiAgdmFsdWVbXCJmb3JtYXRfdmVyc2lvblwiXSA9IFwiU1RVQkJFRCBWRVJTSU9OXCI7XG4gIC8vIGNsaV9uYW1lL2NsaV92ZXJzaW9uIHN0YW1wIHdoYXRldmVyIGJpbmFyeSBmZXRjaGVkIHRoZSBzY2hlbWEgYW5kIHZhcnlcbiAgLy8gYnkgZW52aXJvbm1lbnRcbiAgaWYgKFwiY2xpX25hbWVcIiBpbiB2YWx1ZSkgdmFsdWVbXCJjbGlfbmFtZVwiXSA9IFwiU1RVQkJFRCBDTElcIjtcbiAgaWYgKFwiY2xpX3ZlcnNpb25cIiBpbiB2YWx1ZSkgdmFsdWVbXCJjbGlfdmVyc2lvblwiXSA9IFwiU1RVQkJFRCBWRVJTSU9OXCI7XG4gIHJldHVybiBzdGFibGVTdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpO1xufVxuXG5kZXNjcmliZShcInJlYWRTY2hlbWFcIiwgKCkgPT4ge1xuICBpdChcImdlbmVyYXRlcyBhIHNpbmdsZSBwcm92aWRlciBzY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChcImhhc2hpY29ycC9udWxsQDMuMS4wXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldChcbiAgICAgIHByb3ZpZGVyLFxuICAgICAgTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRQcm92aWRlclNjaGVtYSh0YXJnZXQpO1xuICAgIGV4cGVjdChzYW5pdGl6ZUpzb24ocmVzdWx0KSkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBzaW5nbGUgbW9kdWxlIHNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXG4gICAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9pYW0vYXdzLy9tb2R1bGVzL2lhbS1hY2NvdW50QDMuMTIuMFwiLFxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwiZ2VuZXJhdGVzIGEgbW9yZSBjb21wbGV4IHNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXG4gICAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9la3MvYXdzQDcuMC4xXCIsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KG1vZHVsZSwgTGFuZ3VhZ2UuVFlQRVNDUklQVCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQpO1xuICAgIGV4cGVjdChzYW5pdGl6ZUpzb24ocmVzdWx0KSkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBsb2NhbCBtb2R1bGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIFwiZml4dHVyZXNcIiwgXCJsb2NhbC1tb2R1bGVcIiksXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwiZ2VuZXJhdGVzIGEgbG9jYWwgbW9kdWxlIHdpdGggaW5saW5lIGNvbW1lbnRzIGluIHR5cGUgY29uc3RyYWludHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IHBhdGgucmVzb2x2ZShcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBcImZpeHR1cmVzXCIsXG4gICAgICAgIFwibG9jYWwtbW9kdWxlLWlubGluZS1jb21tZW50c1wiLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KG1vZHVsZSwgTGFuZ3VhZ2UuVFlQRVNDUklQVCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQpO1xuICAgIGV4cGVjdChzYW5pdGl6ZUpzb24ocmVzdWx0KSkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBsb2NhbCBtb2R1bGUgdGhhdCByZXF1aXJlcyBwcm92aWRlciBjb25maWd1cmF0aW9uIGFsaWFzZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IHBhdGgucmVzb2x2ZShcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBcImZpeHR1cmVzXCIsXG4gICAgICAgIFwibG9jYWwtbW9kdWxlLXByb3ZpZGVyLWFsaWFzZXNcIixcbiAgICAgICksXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwic3VyZmFjZXMgdGhlIHRlcnJhZm9ybSBmYWlsdXJlIHdoZW4gYSBtb2R1bGUgY2Fubm90IGJlIGZldGNoZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IFwiLi90aGlzLW1vZHVsZS1kb2VzLW5vdC1leGlzdFwiLFxuICAgIH0pO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQobW9kdWxlLCBMYW5ndWFnZS5UWVBFU0NSSVBUKTtcblxuICAgIC8vIHRoZSBmZXRjaCBpcyBydW4gdG9sZXJhbnRseSBzbyBhIG1vZHVsZSBkZWNsYXJpbmcgY29uZmlndXJhdGlvbl9hbGlhc2VzXG4gICAgLy8gZ2V0cyBhIHNlY29uZCBjaGFuY2UgLSBldmVyeXRoaW5nIGVsc2UgaGFzIHRvIGtlZXAgZmFpbGluZyBsb3VkbHlcbiAgICBhd2FpdCBleHBlY3QocmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQpKS5yZWplY3RzLnRvVGhyb3coXG4gICAgICAvZ2V0IGV4aXRlZCB3aXRoIGNvZGUvLFxuICAgICk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBsb2NhbCBqc29uIG1vZHVsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoe1xuICAgICAgbmFtZTogXCJsb2NhbF9tb2R1bGVcIixcbiAgICAgIGZxbjogXCJsb2NhbF9tb2R1bGVcIixcbiAgICAgIHNvdXJjZTogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCJmaXh0dXJlc1wiLCBcImxvY2FsLWpzb24tbW9kdWxlXCIpLFxuICAgIH0pO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQobW9kdWxlLCBMYW5ndWFnZS5UWVBFU0NSSVBUKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkTW9kdWxlU2NoZW1hKHRhcmdldCk7XG4gICAgZXhwZWN0KHNhbml0aXplSnNvbihyZXN1bHQpKS50b01hdGNoU25hcHNob3QoKTtcbiAgfSwgMTIwMDAwKTtcblxuICBpdChcImdlbmVyYXRlcyBhIGxvY2FsIGpzb24gbW9kdWxlIHRoYXQgcmVxdWlyZXMgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBhbGlhc2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2R1bGUgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCh7XG4gICAgICBuYW1lOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgZnFuOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgc291cmNlOiBwYXRoLnJlc29sdmUoXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgXCJmaXh0dXJlc1wiLFxuICAgICAgICBcImxvY2FsLWpzb24tbW9kdWxlLXByb3ZpZGVyLWFsaWFzZXNcIixcbiAgICAgICksXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwiZ2VuZXJhdGVzIGEgbG9jYWwgbW9kdWxlIHRoYXQgZGVjbGFyZXMgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBhbGlhc2VzIGFjcm9zcyAudGYgYW5kIC50Zi5qc29uIGZpbGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2R1bGUgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCh7XG4gICAgICBuYW1lOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgZnFuOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgc291cmNlOiBwYXRoLnJlc29sdmUoXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgXCJmaXh0dXJlc1wiLFxuICAgICAgICBcImxvY2FsLW1peGVkLW1vZHVsZS1wcm92aWRlci1hbGlhc2VzXCIsXG4gICAgICApLFxuICAgIH0pO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQobW9kdWxlLCBMYW5ndWFnZS5UWVBFU0NSSVBUKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkTW9kdWxlU2NoZW1hKHRhcmdldCk7XG4gICAgZXhwZWN0KHNhbml0aXplSnNvbihyZXN1bHQpKS50b01hdGNoU25hcHNob3QoKTtcbiAgfSwgMTIwMDAwKTtcbn0pO1xuXG5kZXNjcmliZShcInNhbml0aXplUHJvdmlkZXJTY2hlbWFcIiwgKCkgPT4ge1xuICBpdChcInNhbml0aXplcyBhIHByb3ZpZGVyIHNjaGVtYVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBQcm92aWRlclNjaGVtYSA9IHtcbiAgICAgIGZvcm1hdF92ZXJzaW9uOiBcIjAuMVwiIGFzIGNvbnN0LFxuICAgICAgcHJvdmlkZXJfdmVyc2lvbnM6IHtcbiAgICAgICAgXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL251bGxcIjogXCIzLjEuMFwiLFxuICAgICAgfSxcbiAgICAgIHByb3ZpZGVyX3NjaGVtYXM6IHtcbiAgICAgICAgXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL251bGxcIjoge1xuICAgICAgICAgIHByb3ZpZGVyOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvcnJlY3Q6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbmNvcnJlY3Q6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIiwgXCJsaXN0XCIsIFwic3RyaW5nXCJdIGFzIGFueSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBibG9ja190eXBlczoge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgICAgICBuZXN0aW5nX21vZGU6IFwic2luZ2xlXCIsXG4gICAgICAgICAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogW1wibGlzdFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogW1wibGlzdFwiLCBcInN0cmluZ1wiLCBcImxpc3RcIiwgXCJzdHJpbmdcIl0gYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrX3R5cGVzOiB7fSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZV9zY2hlbWFzOiB7XG4gICAgICAgICAgICBudWxsX3Jlc291cmNlOiB7XG4gICAgICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGluY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXSBhcyBhbnksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tfdHlwZXM6IHtcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIG5lc3RpbmdfbW9kZTogXCJzaW5nbGVcIixcbiAgICAgICAgICAgICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jb3JyZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIiwgXCJsaXN0XCIsIFwic3RyaW5nXCJdIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBibG9ja190eXBlczoge30sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YV9zb3VyY2Vfc2NoZW1hczoge30sXG4gICAgICAgICAgZXBoZW1lcmFsX3Jlc291cmNlX3NjaGVtYXM6IHtcbiAgICAgICAgICAgIG51bGxfZXBoZW1lcmFsOiB7XG4gICAgICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGluY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXSBhcyBhbnksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tfdHlwZXM6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gc2FuaXRpemVQcm92aWRlclNjaGVtYShzY2hlbWEpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9KTtcbn0pO1xuIl19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3Byb3ZpZGVyLXNjaGVtYS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQywyQ0FBNkI7QUFDN0Isa0ZBQW9EO0FBQ3BELDRDQU93QjtBQUN4Qix3REFJNEI7QUFFNUI7Ozs7R0FJRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsR0FBd0M7SUFDaEUsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUNyQixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDO1FBQzdDLENBQUM7S0FDRixDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFVO0lBQzlCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0lBQzVDLHlFQUF5RTtJQUN6RSxpQkFBaUI7SUFDakIsSUFBSSxVQUFVLElBQUksS0FBSztRQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxhQUFhLENBQUM7SUFDM0QsSUFBSSxhQUFhLElBQUksS0FBSztRQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztJQUNyRSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxrQkFBa0I7SUFDbEIsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDM0IsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcs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RTtvREFDUixJQUFJLEVBQUUsUUFBUTtvREFDZCxRQUFRLEVBQUUsSUFBSTtpREFDZjtnREFDRCxPQUFPLEVBQUU7b0RBQ1AsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztpREFDekI7Z0RBQ0QsU0FBUyxFQUFFO29EQUNULElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBUTtpREFDbEQ7NkNBQ0Y7NENBQ0QsV0FBVyxFQUFFLEVBQUU7eUNBQ2hCO3FDQUNGO2lDQUNGOzZCQUNGO3lCQUNGO3FCQUNGO29CQUNELG1CQUFtQixFQUFFLEVBQUU7b0JBQ3ZCLDBCQUEwQixFQUFFO3dCQUMxQixjQUFjLEVBQUU7NEJBQ2QsT0FBTyxFQUFFLENBQUM7NEJBQ1YsS0FBSyxFQUFFO2dDQUNMLFVBQVUsRUFBRTtvQ0FDVixPQUFPLEVBQUU7d0NBQ1AsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztxQ0FDekI7b0NBQ0QsU0FBUyxFQUFFO3dDQUNULElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBUTtxQ0FDbEQ7aUNBQ0Y7Z0NBQ0QsV0FBVyxFQUFFLEVBQUU7NkJBQ2hCO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsSUFBQSx3Q0FBc0IsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBzdGFibGVTdHJpbmdpZnkgZnJvbSBcInNhZmUtc3RhYmxlLXN0cmluZ2lmeVwiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCxcbiAgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50LFxuICBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICBMYW5ndWFnZSxcbiAgUHJvdmlkZXJTY2hlbWEsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgcmVhZE1vZHVsZVNjaGVtYSxcbiAgcmVhZFByb3ZpZGVyU2NoZW1hLFxuICBzYW5pdGl6ZVByb3ZpZGVyU2NoZW1hLFxufSBmcm9tIFwiLi4vcHJvdmlkZXItc2NoZW1hXCI7XG5cbi8qKlxuICogUmV3cml0ZXMgdGhlIHJlZ2lzdHJ5IGhvc3QgaW4gdGhlIGtleXMgb2YgYSBmdWxseS1xdWFsaWZpZWQtbmFtZSBtYXAuXG4gKiBPbmx5IHRoZSBrZXlzOiBhIGhvc3QgYXBwZWFyaW5nIGluc2lkZSBwcm92aWRlciBkb2N1bWVudGF0aW9uIHRleHQgaXMgdGhlXG4gKiBzYW1lIHdoaWNoZXZlciBDTEkgZmV0Y2hlZCB0aGUgc2NoZW1hLCBhbmQgc2hvdWxkIHN0YXkgYXMgYXV0aG9yZWQuXG4gKi9cbmZ1bmN0aW9uIHN0dWJSZWdpc3RyeUtleXMobWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuICBpZiAoIW1hcCkgcmV0dXJuIG1hcDtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhtYXApLm1hcCgoW2ZxcG4sIHZdKSA9PiBbXG4gICAgICBmcXBuLnJlcGxhY2UoL15bXi9dK1xcLy8sIFwiU1RVQkJFRF9SRUdJU1RSWS9cIiksXG4gICAgICB2LFxuICAgIF0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUpzb24odmFsdWU6IGFueSkge1xuICB2YWx1ZVtcImZvcm1hdF92ZXJzaW9uXCJdID0gXCJTVFVCQkVEIFZFUlNJT05cIjtcbiAgLy8gY2xpX25hbWUvY2xpX3ZlcnNpb24gc3RhbXAgd2hhdGV2ZXIgYmluYXJ5IGZldGNoZWQgdGhlIHNjaGVtYSBhbmQgdmFyeVxuICAvLyBieSBlbnZpcm9ubWVudFxuICBpZiAoXCJjbGlfbmFtZVwiIGluIHZhbHVlKSB2YWx1ZVtcImNsaV9uYW1lXCJdID0gXCJTVFVCQkVEIENMSVwiO1xuICBpZiAoXCJjbGlfdmVyc2lvblwiIGluIHZhbHVlKSB2YWx1ZVtcImNsaV92ZXJzaW9uXCJdID0gXCJTVFVCQkVEIFZFUlNJT05cIjtcbiAgLy8gU2FtZSByZWFzb246IHRoZSBDTEkga2V5cyB0aGVzZSBieSBmdWxseSBxdWFsaWZpZWQgbmFtZSwgc28gdGhlIGhvc3Qgc2F5c1xuICAvLyB3aGljaCBiaW5hcnkgZmV0Y2hlZCB0aGUgc2NoZW1hIHJhdGhlciB0aGFuIGFueXRoaW5nIGFib3V0IHRoZSBjb2RlIHVuZGVyXG4gIC8vIHRlc3QgLSB0ZXJyYWZvcm0gYW5kIHRvZnUgd291bGQgb3RoZXJ3aXNlIG5lZWQgc2VwYXJhdGUgc25hcHNob3RzIG9mXG4gIC8vIGlkZW50aWNhbCBkYXRhLlxuICBpZiAodmFsdWVbXCJwcm92aWRlcl9zY2hlbWFzXCJdKVxuICAgIHZhbHVlW1wicHJvdmlkZXJfc2NoZW1hc1wiXSA9IHN0dWJSZWdpc3RyeUtleXModmFsdWVbXCJwcm92aWRlcl9zY2hlbWFzXCJdKTtcbiAgaWYgKHZhbHVlW1wicHJvdmlkZXJfdmVyc2lvbnNcIl0pXG4gICAgdmFsdWVbXCJwcm92aWRlcl92ZXJzaW9uc1wiXSA9IHN0dWJSZWdpc3RyeUtleXModmFsdWVbXCJwcm92aWRlcl92ZXJzaW9uc1wiXSk7XG4gIHJldHVybiBzdGFibGVTdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpO1xufVxuXG5kZXNjcmliZShcInJlYWRTY2hlbWFcIiwgKCkgPT4ge1xuICBpdChcImdlbmVyYXRlcyBhIHNpbmdsZSBwcm92aWRlciBzY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChcImhhc2hpY29ycC9udWxsQDMuMS4wXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldChcbiAgICAgIHByb3ZpZGVyLFxuICAgICAgTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRQcm92aWRlclNjaGVtYSh0YXJnZXQpO1xuICAgIGV4cGVjdChzYW5pdGl6ZUpzb24ocmVzdWx0KSkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBzaW5nbGUgbW9kdWxlIHNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXG4gICAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9pYW0vYXdzLy9tb2R1bGVzL2lhbS1hY2NvdW50QDMuMTIuMFwiLFxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwiZ2VuZXJhdGVzIGEgbW9yZSBjb21wbGV4IHNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoXG4gICAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9la3MvYXdzQDcuMC4xXCIsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KG1vZHVsZSwgTGFuZ3VhZ2UuVFlQRVNDUklQVCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQpO1xuICAgIGV4cGVjdChzYW5pdGl6ZUpzb24ocmVzdWx0KSkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBsb2NhbCBtb2R1bGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIFwiZml4dHVyZXNcIiwgXCJsb2NhbC1tb2R1bGVcIiksXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwiZ2VuZXJhdGVzIGEgbG9jYWwgbW9kdWxlIHdpdGggaW5saW5lIGNvbW1lbnRzIGluIHR5cGUgY29uc3RyYWludHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IHBhdGgucmVzb2x2ZShcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBcImZpeHR1cmVzXCIsXG4gICAgICAgIFwibG9jYWwtbW9kdWxlLWlubGluZS1jb21tZW50c1wiLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KG1vZHVsZSwgTGFuZ3VhZ2UuVFlQRVNDUklQVCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQpO1xuICAgIGV4cGVjdChzYW5pdGl6ZUpzb24ocmVzdWx0KSkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBsb2NhbCBtb2R1bGUgdGhhdCByZXF1aXJlcyBwcm92aWRlciBjb25maWd1cmF0aW9uIGFsaWFzZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IHBhdGgucmVzb2x2ZShcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBcImZpeHR1cmVzXCIsXG4gICAgICAgIFwibG9jYWwtbW9kdWxlLXByb3ZpZGVyLWFsaWFzZXNcIixcbiAgICAgICksXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwic3VyZmFjZXMgdGhlIHRlcnJhZm9ybSBmYWlsdXJlIHdoZW4gYSBtb2R1bGUgY2Fubm90IGJlIGZldGNoZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBmcW46IFwibG9jYWxfbW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IFwiLi90aGlzLW1vZHVsZS1kb2VzLW5vdC1leGlzdFwiLFxuICAgIH0pO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQobW9kdWxlLCBMYW5ndWFnZS5UWVBFU0NSSVBUKTtcblxuICAgIC8vIHRoZSBmZXRjaCBpcyBydW4gdG9sZXJhbnRseSBzbyBhIG1vZHVsZSBkZWNsYXJpbmcgY29uZmlndXJhdGlvbl9hbGlhc2VzXG4gICAgLy8gZ2V0cyBhIHNlY29uZCBjaGFuY2UgLSBldmVyeXRoaW5nIGVsc2UgaGFzIHRvIGtlZXAgZmFpbGluZyBsb3VkbHlcbiAgICBhd2FpdCBleHBlY3QocmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQpKS5yZWplY3RzLnRvVGhyb3coXG4gICAgICAvZ2V0IGV4aXRlZCB3aXRoIGNvZGUvLFxuICAgICk7XG4gIH0sIDEyMDAwMCk7XG5cbiAgaXQoXCJnZW5lcmF0ZXMgYSBsb2NhbCBqc29uIG1vZHVsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQoe1xuICAgICAgbmFtZTogXCJsb2NhbF9tb2R1bGVcIixcbiAgICAgIGZxbjogXCJsb2NhbF9tb2R1bGVcIixcbiAgICAgIHNvdXJjZTogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCJmaXh0dXJlc1wiLCBcImxvY2FsLWpzb24tbW9kdWxlXCIpLFxuICAgIH0pO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQobW9kdWxlLCBMYW5ndWFnZS5UWVBFU0NSSVBUKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkTW9kdWxlU2NoZW1hKHRhcmdldCk7XG4gICAgZXhwZWN0KHNhbml0aXplSnNvbihyZXN1bHQpKS50b01hdGNoU25hcHNob3QoKTtcbiAgfSwgMTIwMDAwKTtcblxuICBpdChcImdlbmVyYXRlcyBhIGxvY2FsIGpzb24gbW9kdWxlIHRoYXQgcmVxdWlyZXMgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBhbGlhc2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2R1bGUgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCh7XG4gICAgICBuYW1lOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgZnFuOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgc291cmNlOiBwYXRoLnJlc29sdmUoXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgXCJmaXh0dXJlc1wiLFxuICAgICAgICBcImxvY2FsLWpzb24tbW9kdWxlLXByb3ZpZGVyLWFsaWFzZXNcIixcbiAgICAgICksXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldChtb2R1bGUsIExhbmd1YWdlLlRZUEVTQ1JJUFQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0KTtcbiAgICBleHBlY3Qoc2FuaXRpemVKc29uKHJlc3VsdCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9LCAxMjAwMDApO1xuXG4gIGl0KFwiZ2VuZXJhdGVzIGEgbG9jYWwgbW9kdWxlIHRoYXQgZGVjbGFyZXMgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBhbGlhc2VzIGFjcm9zcyAudGYgYW5kIC50Zi5qc29uIGZpbGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2R1bGUgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCh7XG4gICAgICBuYW1lOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgZnFuOiBcImxvY2FsX21vZHVsZVwiLFxuICAgICAgc291cmNlOiBwYXRoLnJlc29sdmUoXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgXCJmaXh0dXJlc1wiLFxuICAgICAgICBcImxvY2FsLW1peGVkLW1vZHVsZS1wcm92aWRlci1hbGlhc2VzXCIsXG4gICAgICApLFxuICAgIH0pO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQobW9kdWxlLCBMYW5ndWFnZS5UWVBFU0NSSVBUKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkTW9kdWxlU2NoZW1hKHRhcmdldCk7XG4gICAgZXhwZWN0KHNhbml0aXplSnNvbihyZXN1bHQpKS50b01hdGNoU25hcHNob3QoKTtcbiAgfSwgMTIwMDAwKTtcbn0pO1xuXG5kZXNjcmliZShcInNhbml0aXplUHJvdmlkZXJTY2hlbWFcIiwgKCkgPT4ge1xuICBpdChcInNhbml0aXplcyBhIHByb3ZpZGVyIHNjaGVtYVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hOiBQcm92aWRlclNjaGVtYSA9IHtcbiAgICAgIGZvcm1hdF92ZXJzaW9uOiBcIjAuMVwiIGFzIGNvbnN0LFxuICAgICAgcHJvdmlkZXJfdmVyc2lvbnM6IHtcbiAgICAgICAgXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL251bGxcIjogXCIzLjEuMFwiLFxuICAgICAgfSxcbiAgICAgIHByb3ZpZGVyX3NjaGVtYXM6IHtcbiAgICAgICAgXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL251bGxcIjoge1xuICAgICAgICAgIHByb3ZpZGVyOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvcnJlY3Q6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbmNvcnJlY3Q6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIiwgXCJsaXN0XCIsIFwic3RyaW5nXCJdIGFzIGFueSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBibG9ja190eXBlczoge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgICAgICBuZXN0aW5nX21vZGU6IFwic2luZ2xlXCIsXG4gICAgICAgICAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogW1wibGlzdFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogW1wibGlzdFwiLCBcInN0cmluZ1wiLCBcImxpc3RcIiwgXCJzdHJpbmdcIl0gYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrX3R5cGVzOiB7fSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZV9zY2hlbWFzOiB7XG4gICAgICAgICAgICBudWxsX3Jlc291cmNlOiB7XG4gICAgICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGluY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXSBhcyBhbnksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tfdHlwZXM6IHtcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIG5lc3RpbmdfbW9kZTogXCJzaW5nbGVcIixcbiAgICAgICAgICAgICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jb3JyZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIiwgXCJsaXN0XCIsIFwic3RyaW5nXCJdIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBibG9ja190eXBlczoge30sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YV9zb3VyY2Vfc2NoZW1hczoge30sXG4gICAgICAgICAgZXBoZW1lcmFsX3Jlc291cmNlX3NjaGVtYXM6IHtcbiAgICAgICAgICAgIG51bGxfZXBoZW1lcmFsOiB7XG4gICAgICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGluY29ycmVjdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXSBhcyBhbnksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmxvY2tfdHlwZXM6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gc2FuaXRpemVQcm92aWRlclNjaGVtYShzY2hlbWEpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICB9KTtcbn0pO1xuIl19
@@ -212,11 +212,65 @@ describe("collectModuleProviderAliases", () => {
212
212
  { localName: "null", alias: "extra", source: "hashicorp/null" },
213
213
  ]);
214
214
  });
215
+ it("collects a bare local name as a required default configuration", () => {
216
+ // `configuration_aliases = [aws, aws.pip_read]` makes the module demand
217
+ // that the caller pass its default `aws` configuration explicitly too
218
+ const parsed = {
219
+ terraform: [
220
+ {
221
+ required_providers: [
222
+ {
223
+ aws: {
224
+ source: "hashicorp/aws",
225
+ configuration_aliases: ["${aws}", "${aws.pip_read}"],
226
+ },
227
+ },
228
+ ],
229
+ },
230
+ ],
231
+ };
232
+ expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
233
+ { localName: "aws", alias: undefined, source: "hashicorp/aws" },
234
+ { localName: "aws", alias: "pip_read", source: "hashicorp/aws" },
235
+ ]);
236
+ });
237
+ it("deduplicates a bare local name declared in more than one terraform block", () => {
238
+ const parsed = {
239
+ terraform: [
240
+ {
241
+ required_providers: [
242
+ {
243
+ aws: {
244
+ source: "hashicorp/aws",
245
+ configuration_aliases: ["${aws}"],
246
+ },
247
+ },
248
+ ],
249
+ },
250
+ {
251
+ required_providers: [
252
+ {
253
+ aws: {
254
+ source: "hashicorp/aws",
255
+ configuration_aliases: ["${aws}", "${aws.secondary}"],
256
+ },
257
+ },
258
+ ],
259
+ },
260
+ ],
261
+ };
262
+ expect((0, provider_schema_1.collectModuleProviderAliases)(parsed)).toEqual([
263
+ { localName: "aws", alias: undefined, source: "hashicorp/aws" },
264
+ { localName: "aws", alias: "secondary", source: "hashicorp/aws" },
265
+ ]);
266
+ });
215
267
  it("ignores entries that are not provider configuration references", () => {
216
268
  const parsed = {
217
269
  terraform: {
218
270
  required_providers: {
219
- aws: { configuration_aliases: ["${aws}", "${var.not_an_alias.x}"] },
271
+ aws: {
272
+ configuration_aliases: ["${var.not_an_alias.x}", "${aws[0]}"],
273
+ },
220
274
  },
221
275
  },
222
276
  };
@@ -247,6 +301,35 @@ describe("applyModuleProviderAliases", () => {
247
301
  },
248
302
  });
249
303
  });
304
+ it("passes the default configuration when the module requires it", () => {
305
+ const config = (0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [
306
+ { localName: "aws", source: "hashicorp/aws" },
307
+ { localName: "aws", alias: "pip_read", source: "hashicorp/aws" },
308
+ ]);
309
+ expect(config).toEqual({
310
+ terraform: { required_providers: { aws: { source: "hashicorp/aws" } } },
311
+ provider: { aws: [{}, { alias: "pip_read" }] },
312
+ module: {
313
+ my_module: {
314
+ source: "./mod",
315
+ providers: { aws: "aws", "aws.pip_read": "aws.pip_read" },
316
+ },
317
+ },
318
+ });
319
+ });
320
+ it("passes only the default configuration for a bare-only declaration", () => {
321
+ // `configuration_aliases = [aws]`, without any aliased configuration
322
+ const config = (0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [
323
+ { localName: "aws", source: "hashicorp/aws" },
324
+ ]);
325
+ expect(config).toEqual({
326
+ terraform: { required_providers: { aws: { source: "hashicorp/aws" } } },
327
+ provider: { aws: [{}] },
328
+ module: {
329
+ my_module: { source: "./mod", providers: { aws: "aws" } },
330
+ },
331
+ });
332
+ });
250
333
  it("omits required_providers for aliases without a declared source", () => {
251
334
  const config = (0, provider_schema_1.applyModuleProviderAliases)(configWithModule(), "my_module", [
252
335
  { localName: "aws", alias: "other" },
@@ -308,4 +391,4 @@ describe("fetchedModuleDir", () => {
308
391
  expect((0, provider_schema_1.fetchedModuleDir)(workdir, "my_module", "../mod", "/abs/path/to/mod")).toEqual("/abs/path/to/mod");
309
392
  });
310
393
  });
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNoQixDQUFDLENBQUMsQ0FBQztBQUVKLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLDRDQUFzQztBQUN0Qyx3REFRNEI7QUFFNUIsTUFBTSxRQUFRLEdBQUcsY0FBNEIsQ0FBQztBQUU5QyxTQUFTLGNBQWMsQ0FBQyxPQUFPLEdBQUcsaUNBQWlDO0lBQ2pFLE1BQU0sR0FBRyxHQUFRLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsT0FBTyxHQUFHLGlDQUFpQztJQUM3RCxNQUFNLEdBQUcsR0FBUSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsSUFBSSxlQUFpQyxDQUFDO0lBRXRDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFD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QUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuXG5qZXN0Lm1vY2soXCJAY2RrdG4vY29tbW9uc1wiLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoXCJAY2RrdG4vY29tbW9uc1wiKSxcbiAgZXhlYzogamVzdC5mbigpLFxufSkpO1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm1Db25maWcsXG4gIGFwcGx5TW9kdWxlUHJvdmlkZXJBbGlhc2VzLFxuICBjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzLFxuICBmZXRjaGVkTW9kdWxlRGlyLFxuICBnZXRGZXRjaGluZ0NsaVZlcnNpb24sXG4gIHBhY2thZ2VTdWJkaXIsXG4gIHRlcnJhZm9ybUluaXRXaXRoUmV0cnksXG59IGZyb20gXCIuLi9wcm92aWRlci1zY2hlbWFcIjtcblxuY29uc3QgZXhlY01vY2sgPSBleGVjIGFzIHVua25vd24gYXMgamVzdC5Nb2NrO1xuXG5mdW5jdGlvbiB0cmFuc2llbnRFcnJvcihtZXNzYWdlID0gXCI1MDIgQmFkIEdhdGV3YXkgZnJvbSBnaXRodWIuY29tXCIpIHtcbiAgY29uc3QgZXJyOiBhbnkgPSBuZXcgRXJyb3IoXCJub24temVybyBleGl0IGNvZGUgMVwiKTtcbiAgZXJyLnN0ZGVyciA9IG1lc3NhZ2U7XG4gIHJldHVybiBlcnI7XG59XG5cbmZ1bmN0aW9uIGZhdGFsRXJyb3IobWVzc2FnZSA9IFwiRXJyb3I6IEludmFsaWQgcHJvdmlkZXIgdmVyc2lvblwiKSB7XG4gIGNvbnN0IGVycjogYW55ID0gbmV3IEVycm9yKFwibm9uLXplcm8gZXhpdCBjb2RlIDFcIik7XG4gIGVyci5zdGRlcnIgPSBtZXNzYWdlO1xuICByZXR1cm4gZXJyO1xufVxuXG5kZXNjcmliZShcInRlcnJhZm9ybUluaXRXaXRoUmV0cnlcIiwgKCkgPT4ge1xuICBsZXQgY29uc29sZUVycm9yU3B5OiBqZXN0LlNweUluc3RhbmNlO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGV4ZWNNb2NrLm1vY2tSZXNldCgpO1xuICAgIGNvbnNvbGVFcnJvclNweSA9IGplc3RcbiAgICAgIC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpXG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgY29uc29sZUVycm9yU3B5Lm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBpbW1lZGlhdGVseSBvbiBmaXJzdC1hdHRlbXB0IHN1Y2Nlc3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4ZWNNb2NrLm1vY2tSZXNvbHZlZFZhbHVlT25jZShcIm9rXCIpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGVycmFmb3JtSW5pdFdpdGhSZXRyeSh7IGN3ZDogXCIvdG1wL3hcIiB9LCAzLCAwKTtcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoXCJva1wiKTtcbiAgICBleHBlY3QoZXhlY01vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXRyaWVzIG9uIHRyYW5zaWVudCBzdGRlcnIgYW5kIGV2ZW50dWFsbHkgc3VjY2VlZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4ZWNNb2NrXG4gICAgICAubW9ja1JlamVjdGVkVmFsdWVPbmNlKHRyYW5zaWVudEVycm9yKCkpXG4gICAgICAubW9ja1JlamVjdGVkVmFsdWVPbmNlKHRyYW5zaWVudEVycm9yKFwiRUNPTk5SRVNFVFwiKSlcbiAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoXCJva1wiKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IFwiL3RtcC94XCIgfSwgMywgMCk7XG5cbiAgICBleHBlY3QocmVzdWx0KS50b0JlKFwib2tcIik7XG4gICAgZXhwZWN0KGV4ZWNNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgcmV0cnkgb24gbm9uLXRyYW5zaWVudCBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4ZWNNb2NrLm1vY2tSZWplY3RlZFZhbHVlT25jZShmYXRhbEVycm9yKCkpO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgdGVycmFmb3JtSW5pdFdpdGhSZXRyeSh7IGN3ZDogXCIvdG1wL3hcIiB9LCAzLCAwKSxcbiAgICApLnJlamVjdHMudG9NYXRjaE9iamVjdCh7IHN0ZGVycjogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoXCJJbnZhbGlkXCIpIH0pO1xuXG4gICAgZXhwZWN0KGV4ZWNNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwidGhyb3dzIGFmdGVyIGV4aGF1c3RpbmcgcmV0cmllcyBvbiBwZXJzaXN0ZW50IHRyYW5zaWVudCBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4ZWNNb2NrLm1vY2tSZWplY3RlZFZhbHVlKHRyYW5zaWVudEVycm9yKFwiNTAzIFNlcnZpY2UgVW5hdmFpbGFibGVcIikpO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgdGVycmFmb3JtSW5pdFdpdGhSZXRyeSh7IGN3ZDogXCIvdG1wL3hcIiB9LCAzLCAwKSxcbiAgICApLnJlamVjdHMudG9NYXRjaE9iamVjdCh7IHN0ZGVycjogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoXCI1MDNcIikgfSk7XG5cbiAgICBleHBlY3QoZXhlY01vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJnZXRGZXRjaGluZ0NsaVZlcnNpb25cIiwgKCkgPT4ge1xuICBpdChcImV4ZWNzIGB0ZXJyYWZvcm0gdmVyc2lvbmAgb25jZSBhbmQgbWVtb2l6ZXMgdGhlIHJlc3VsdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgZXhlY01vY2subW9ja1Jlc2V0KCk7XG4gICAgZXhlY01vY2subW9ja1Jlc29sdmVkVmFsdWUoXCJUZXJyYWZvcm0gdjEuNy41XFxub24gbGludXhfYW1kNjRcXG5cIik7XG5cbiAgICBjb25zdCBmaXJzdCA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIGNvbnN0IHNlY29uZCA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuXG4gICAgZXhwZWN0KGZpcnN0KS50b0VxdWFsKHsgbmFtZTogXCJ0ZXJyYWZvcm1cIiwgdmVyc2lvbjogXCIxLjcuNVwiIH0pO1xuICAgIGV4cGVjdChzZWNvbmQpLnRvQmUoZmlyc3QpO1xuICAgIGV4cGVjdChleGVjTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXNcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgbm90aGluZyBmb3IgYSBtb2R1bGUgd2l0aG91dCByZXF1aXJlZF9wcm92aWRlcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHsgdmFyaWFibGU6IHsgZm9vOiBbe31dIH0gfSkpLnRvRXF1YWwoXG4gICAgICBbXSxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJldHVybnMgbm90aGluZyBmb3IgcmVxdWlyZWQgcHJvdmlkZXJzIHdpdGhvdXQgY29uZmlndXJhdGlvbiBhbGlhc2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICB0ZXJyYWZvcm06IFtcbiAgICAgICAgeyByZXF1aXJlZF9wcm92aWRlcnM6IFt7IGF3czogeyBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0gfV0gfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcImNvbGxlY3RzIGV2ZXJ5IGFsaWFzIGRlY2xhcmVkIGFjcm9zcyB0ZXJyYWZvcm0gYmxvY2tzXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICB0ZXJyYWZvcm06IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhd3M6IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fYWxpYXNlczogW1xuICAgICAgICAgICAgICAgICAgXCIke2F3cy5nbG9iYWxfcmVnaW9ufVwiLFxuICAgICAgICAgICAgICAgICAgXCIke2F3cy5zZWNvbmRhcnl9XCIsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmFuZG9tOiB7IHNvdXJjZTogXCJoYXNoaWNvcnAvcmFuZG9tXCIgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhd3N4OiB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIixcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIiR7YXdzeC50ZXJ0aWFyeX1cIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBhbGlhczogXCJnbG9iYWxfcmVnaW9uXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBhbGlhczogXCJzZWNvbmRhcnlcIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzeFwiLCBhbGlhczogXCJ0ZXJ0aWFyeVwiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwiZGVkdXBsaWNhdGVzIGFsaWFzZXMgZGVjbGFyZWQgaW4gbW9yZSB0aGFuIG9uZSBmaWxlXCIsICgpID0+IHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHtcbiAgICAgIGF3czoge1xuICAgICAgICBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiLFxuICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIiR7YXdzLmdsb2JhbF9yZWdpb259XCJdLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlZCA9IHtcbiAgICAgIHRlcnJhZm9ybTogW3sgcmVxdWlyZWRfcHJvdmlkZXJzOiBbZGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uXSB9XSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwia2VlcHMgYWxpYXNlcyBvZiBwcm92aWRlcnMgZGVjbGFyZWQgd2l0aG91dCBhIHNvdXJjZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiB7XG4gICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge1xuICAgICAgICAgIGF3czogeyBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIiR7YXdzLm90aGVyfVwiXSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwib3RoZXJcIiwgc291cmNlOiB1bmRlZmluZWQgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyB0aGUgcGxhaW4gcmVmZXJlbmNlcyBhIC50Zi5qc29uIG1vZHVsZSBkZWNsYXJlc1wiLCAoKSA9PiB7XG4gICAgLy8gaGNsMmpzb24gb25seSB3cmFwcyBIQ0wgZXhwcmVzc2lvbnMgaW4gYW4gaW50ZXJwb2xhdGlvbjsgSlNPTiBzeW50YXhcbiAgICAvLyBjYXJyaWVzIHRoZSByZWZlcmVuY2UgYXMtaXMsIGFuZCBpdHMgYmxvY2tzIGNvbWUgdGhyb3VnaCB1bndyYXBwZWRcbiAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICB0ZXJyYWZvcm06IHtcbiAgICAgICAgcmVxdWlyZWRfcHJvdmlkZXJzOiB7XG4gICAgICAgICAgbnVsbDoge1xuICAgICAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9udWxsXCIsXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIm51bGwuZXh0cmFcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW1xuICAgICAgeyBsb2NhbE5hbWU6IFwibnVsbFwiLCBhbGlhczogXCJleHRyYVwiLCBzb3VyY2U6IFwiaGFzaGljb3JwL251bGxcIiB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcInJlYWRzIGFsaWFzZXMgYSBtb2R1bGUgc3ByZWFkIGFjcm9zcyAudGYgYW5kIC50Zi5qc29uIGZpbGVzXCIsICgpID0+IHtcbiAgICAvLyBoY2wyanNvbiBtZXJnZXMgYSAudGYuanNvbiBmaWxlIGludG8gdGhlIHBhcnNlZCBIQ0wgYnkgcmVjdXJzaW5nIGludG9cbiAgICAvLyB0aGUgSENMIGJsb2NrIGFycmF5LCBzbyB0aGUgSlNPTiBoYWxmIGVuZHMgdXAgYXMgYSBuYW1lZCBwcm9wZXJ0eSBvblxuICAgIC8vIHRoYXQgYXJyYXkgcmF0aGVyIHRoYW4gYW5vdGhlciBlbnRyeSBpbiBpdFxuICAgIGNvbnN0IHBhcnNlZDogYW55ID0ge1xuICAgICAgdGVycmFmb3JtOiBbXG4gICAgICAgIHsgcmVxdWlyZWRfcHJvdmlkZXJzOiBbeyBhd3M6IHsgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9IH1dIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgcGFyc2VkLnRlcnJhZm9ybS5yZXF1aXJlZF9wcm92aWRlcnMgPSB7XG4gICAgICBudWxsOiB7XG4gICAgICAgIHNvdXJjZTogXCJoYXNoaWNvcnAvbnVsbFwiLFxuICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIm51bGwuZXh0cmFcIl0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcIm51bGxcIiwgYWxpYXM6IFwiZXh0cmFcIiwgc291cmNlOiBcImhhc2hpY29ycC9udWxsXCIgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJpZ25vcmVzIGVudHJpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gcmVmZXJlbmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiB7XG4gICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge1xuICAgICAgICAgIGF3czogeyBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIiR7YXdzfVwiLCBcIiR7dmFyLm5vdF9hbl9hbGlhcy54fVwiXSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXNcIiwgKCkgPT4ge1xuICBjb25zdCBjb25maWdXaXRoTW9kdWxlID0gKCk6IFRlcnJhZm9ybUNvbmZpZyA9PiAoe1xuICAgIHRlcnJhZm9ybToge30sXG4gICAgbW9kdWxlOiB7IG15X21vZHVsZTogeyBzb3VyY2U6IFwiLi9tb2RcIiB9IH0sXG4gIH0pO1xuXG4gIGl0KFwiZGVjbGFyZXMgdGhlIGFsaWFzZWQgcHJvdmlkZXJzIGFuZCBwYXNzZXMgdGhlbSB0byB0aGUgbW9kdWxlXCIsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyhjb25maWdXaXRoTW9kdWxlKCksIFwibXlfbW9kdWxlXCIsIFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBhbGlhczogXCJnbG9iYWxfcmVnaW9uXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBhbGlhczogXCJzZWNvbmRhcnlcIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgIF0pO1xuXG4gICAgZXhwZWN0KGNvbmZpZykudG9FcXVhbCh7XG4gICAgICB0ZXJyYWZvcm06IHsgcmVxdWlyZWRfcHJvdmlkZXJzOiB7IGF3czogeyBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0gfSB9LFxuICAgICAgcHJvdmlkZXI6IHsgYXdzOiBbeyBhbGlhczogXCJnbG9iYWxfcmVnaW9uXCIgfSwgeyBhbGlhczogXCJzZWNvbmRhcnlcIiB9XSB9LFxuICAgICAgbW9kdWxlOiB7XG4gICAgICAgIG15X21vZHVsZToge1xuICAgICAgICAgIHNvdXJjZTogXCIuL21vZFwiLFxuICAgICAgICAgIHByb3ZpZGVyczoge1xuICAgICAgICAgICAgXCJhd3MuZ2xvYmFsX3JlZ2lvblwiOiBcImF3cy5nbG9iYWxfcmVnaW9uXCIsXG4gICAgICAgICAgICBcImF3cy5zZWNvbmRhcnlcIjogXCJhd3Muc2Vjb25kYXJ5XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwib21pdHMgcmVxdWlyZWRfcHJvdmlkZXJzIGZvciBhbGlhc2VzIHdpdGhvdXQgYSBkZWNsYXJlZCBzb3VyY2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGFwcGx5TW9kdWxlUHJvdmlkZXJBbGlhc2VzKGNvbmZpZ1dpdGhNb2R1bGUoKSwgXCJteV9tb2R1bGVcIiwgW1xuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcIm90aGVyXCIgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycykudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChjb25maWcucHJvdmlkZXIpLnRvRXF1YWwoeyBhd3M6IFt7IGFsaWFzOiBcIm90aGVyXCIgfV0gfSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIHRoZSBjb25maWcgdW50b3VjaGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFsaWFzZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGFwcGx5TW9kdWxlUHJvdmlkZXJBbGlhc2VzKGNvbmZpZ1dpdGhNb2R1bGUoKSwgXCJteV9tb2R1bGVcIiwgW10pLFxuICAgICkudG9FcXVhbChjb25maWdXaXRoTW9kdWxlKCkpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyB0aGUgY29uZmlnIHVudG91Y2hlZCB3aGVuIHRoZSBtb2R1bGUgY2FsbCBpcyB1bmtub3duXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyhjb25maWdXaXRoTW9kdWxlKCksIFwib3RoZXJfbW9kdWxlXCIsIFtcbiAgICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcImdsb2JhbF9yZWdpb25cIiB9LFxuICAgICAgXSksXG4gICAgKS50b0VxdWFsKGNvbmZpZ1dpdGhNb2R1bGUoKSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGFja2FnZVN1YmRpclwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIFtcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9pYW0vYXdzXCIsIHVuZGVmaW5lZF0sXG4gICAgW1xuICAgICAgXCJ0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvaWFtL2F3cy8vbW9kdWxlcy9pYW0tYWNjb3VudFwiLFxuICAgICAgXCJtb2R1bGVzL2lhbS1hY2NvdW50XCIsXG4gICAgXSxcbiAgICBbXCJnaXQ6Omh0dHBzOi8vZ2l0aHViLmNvbS9vcmcvcmVwby5naXQvL3N1Yj9yZWY9djEuMi4zXCIsIFwic3ViXCJdLFxuICAgIFtcImdpdDo6c3NoOi8vZ2l0QGdpdGh1Yi5jb20vb3JnL3JlcG8uZ2l0XCIsIHVuZGVmaW5lZF0sXG4gICAgW1wiLi9sb2NhbC9tb2R1bGVcIiwgdW5kZWZpbmVkXSxcbiAgXSkoXCJzcGxpdHMgJXNcIiwgKHNvdXJjZSwgZXhwZWN0ZWQpID0+IHtcbiAgICBleHBlY3QocGFja2FnZVN1YmRpcihzb3VyY2UgYXMgc3RyaW5nKSkudG9FcXVhbChleHBlY3RlZCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZmV0Y2hlZE1vZHVsZURpclwiLCAoKSA9PiB7XG4gIGxldCB3b3JrZGlyOiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJmZXRjaGVkLW1vZHVsZS1kaXItXCIpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmcy5ybVN5bmMod29ya2RpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiB3cml0ZU1hbmlmZXN0KG1vZHVsZXM6IHsgS2V5OiBzdHJpbmc7IERpcjogc3RyaW5nIH1bXSkge1xuICAgIGNvbnN0IGRpciA9IHBhdGguam9pbih3b3JrZGlyLCBcIi50ZXJyYWZvcm1cIiwgXCJtb2R1bGVzXCIpO1xuICAgIGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oZGlyLCBcIm1vZHVsZXMuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgTW9kdWxlczogbW9kdWxlcyB9KSxcbiAgICApO1xuICB9XG5cbiAgaXQoXCJwcmVmZXJzIHRoZSBkaXJlY3RvcnkgcmVjb3JkZWQgaW4gdGhlIG1vZHVsZSBtYW5pZmVzdFwiLCAoKSA9PiB7XG4gICAgd3JpdGVNYW5pZmVzdChbXG4gICAgICB7IEtleTogXCJcIiwgRGlyOiBcIi5cIiB9LFxuICAgICAgeyBLZXk6IFwibXlfbW9kdWxlXCIsIERpcjogXCIudGVycmFmb3JtL21vZHVsZXMvbXlfbW9kdWxlL21vZHVsZXMvc3ViXCIgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChcbiAgICAgIGZldGNoZWRNb2R1bGVEaXIod29ya2RpciwgXCJteV9tb2R1bGVcIiwgXCJvcmcvbmFtZS9hd3MvL21vZHVsZXMvc3ViXCIpLFxuICAgICkudG9FcXVhbChcbiAgICAgIHBhdGguam9pbihcbiAgICAgICAgd29ya2RpcixcbiAgICAgICAgXCIudGVycmFmb3JtXCIsXG4gICAgICAgIFwibW9kdWxlc1wiLFxuICAgICAgICBcIm15X21vZHVsZVwiLFxuICAgICAgICBcIm1vZHVsZXNcIixcbiAgICAgICAgXCJzdWJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHRvIHRoZSBpbnN0YWxsIHBhdGggd2hlbiB0aGUgbWFuaWZlc3Qgd2FzIG5vdCB3cml0dGVuXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBmZXRjaGVkTW9kdWxlRGlyKHdvcmtkaXIsIFwibXlfbW9kdWxlXCIsIFwib3JnL25hbWUvYXdzLy9tb2R1bGVzL3N1YlwiKSxcbiAgICApLnRvRXF1YWwoXG4gICAgICBwYXRoLmpvaW4oXG4gICAgICAgIHdvcmtkaXIsXG4gICAgICAgIFwiLnRlcnJhZm9ybVwiLFxuICAgICAgICBcIm1vZHVsZXNcIixcbiAgICAgICAgXCJteV9tb2R1bGVcIixcbiAgICAgICAgXCJtb2R1bGVzXCIsXG4gICAgICAgIFwic3ViXCIsXG4gICAgICApLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byB0aGUgaW5zdGFsbCBwYXRoIHdoZW4gdGhlIG1hbmlmZXN0IGxhY2tzIHRoZSBtb2R1bGVcIiwgKCkgPT4ge1xuICAgIHdyaXRlTWFuaWZlc3QoW3sgS2V5OiBcIlwiLCBEaXI6IFwiLlwiIH1dKTtcblxuICAgIGV4cGVjdChmZXRjaGVkTW9kdWxlRGlyKHdvcmtkaXIsIFwibXlfbW9kdWxlXCIsIFwib3JnL25hbWUvYXdzXCIpKS50b0VxdWFsKFxuICAgICAgcGF0aC5qb2luKHdvcmtkaXIsIFwiLnRlcnJhZm9ybVwiLCBcIm1vZHVsZXNcIiwgXCJteV9tb2R1bGVcIiksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBsb2NhbCBtb2R1bGVzIHdoZXJlIHRoZXkgYXJlXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBmZXRjaGVkTW9kdWxlRGlyKHdvcmtkaXIsIFwibXlfbW9kdWxlXCIsIFwiLi4vbW9kXCIsIFwiL2Ficy9wYXRoL3RvL21vZFwiKSxcbiAgICApLnRvRXF1YWwoXCIvYWJzL3BhdGgvdG8vbW9kXCIpO1xuICB9KTtcbn0pO1xuIl19
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNoQixDQUFDLENBQUMsQ0FBQztBQUVKLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLDRDQUFzQztBQUN0Qyx3REFRNEI7QUFFNUIsTUFBTSxRQUFRLEdBQUcsY0FBNEIsQ0FBQztBQUU5QyxTQUFTLGNBQWMsQ0FBQyxPQUFPLEdBQUcsaUNBQWlDO0lBQ2pFLE1BQU0sR0FBRyxHQUFRLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsT0FBTyxHQUFHLGlDQUFpQztJQUM3RCxNQUFNLEdBQUcsR0FBUSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsSUFBSSxlQUFpQyxDQUFDO0lBRXRDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFD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QUUsR0FBRyxFQUFFO1FBQzNFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxJQUFBLGtDQUFnQixFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQ3pELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7UUFDNUMsTUFBTSxDQUNKLElBQUEsa0NBQWdCLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FDckUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcblxuamVzdC5tb2NrKFwiQGNka3RuL2NvbW1vbnNcIiwgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKFwiQGNka3RuL2NvbW1vbnNcIiksXG4gIGV4ZWM6IGplc3QuZm4oKSxcbn0pKTtcblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtQ29uZmlnLFxuICBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyxcbiAgY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyxcbiAgZmV0Y2hlZE1vZHVsZURpcixcbiAgZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uLFxuICBwYWNrYWdlU3ViZGlyLFxuICB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5LFxufSBmcm9tIFwiLi4vcHJvdmlkZXItc2NoZW1hXCI7XG5cbmNvbnN0IGV4ZWNNb2NrID0gZXhlYyBhcyB1bmtub3duIGFzIGplc3QuTW9jaztcblxuZnVuY3Rpb24gdHJhbnNpZW50RXJyb3IobWVzc2FnZSA9IFwiNTAyIEJhZCBHYXRld2F5IGZyb20gZ2l0aHViLmNvbVwiKSB7XG4gIGNvbnN0IGVycjogYW55ID0gbmV3IEVycm9yKFwibm9uLXplcm8gZXhpdCBjb2RlIDFcIik7XG4gIGVyci5zdGRlcnIgPSBtZXNzYWdlO1xuICByZXR1cm4gZXJyO1xufVxuXG5mdW5jdGlvbiBmYXRhbEVycm9yKG1lc3NhZ2UgPSBcIkVycm9yOiBJbnZhbGlkIHByb3ZpZGVyIHZlcnNpb25cIikge1xuICBjb25zdCBlcnI6IGFueSA9IG5ldyBFcnJvcihcIm5vbi16ZXJvIGV4aXQgY29kZSAxXCIpO1xuICBlcnIuc3RkZXJyID0gbWVzc2FnZTtcbiAgcmV0dXJuIGVycjtcbn1cblxuZGVzY3JpYmUoXCJ0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5XCIsICgpID0+IHtcbiAgbGV0IGNvbnNvbGVFcnJvclNweTogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVzZXQoKTtcbiAgICBjb25zb2xlRXJyb3JTcHkgPSBqZXN0XG4gICAgICAuc3B5T24oY29uc29sZSwgXCJlcnJvclwiKVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGNvbnNvbGVFcnJvclNweS5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgaW1tZWRpYXRlbHkgb24gZmlyc3QtYXR0ZW1wdCBzdWNjZXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoXCJva1wiKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IFwiL3RtcC94XCIgfSwgMywgMCk7XG5cbiAgICBleHBlY3QocmVzdWx0KS50b0JlKFwib2tcIik7XG4gICAgZXhwZWN0KGV4ZWNNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0cmllcyBvbiB0cmFuc2llbnQgc3RkZXJyIGFuZCBldmVudHVhbGx5IHN1Y2NlZWRzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9ja1xuICAgICAgLm1vY2tSZWplY3RlZFZhbHVlT25jZSh0cmFuc2llbnRFcnJvcigpKVxuICAgICAgLm1vY2tSZWplY3RlZFZhbHVlT25jZSh0cmFuc2llbnRFcnJvcihcIkVDT05OUkVTRVRcIikpXG4gICAgICAubW9ja1Jlc29sdmVkVmFsdWVPbmNlKFwib2tcIik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBcIi90bXAveFwiIH0sIDMsIDApO1xuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZShcIm9rXCIpO1xuICAgIGV4cGVjdChleGVjTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHJldHJ5IG9uIG5vbi10cmFuc2llbnQgZXJyb3JzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UoZmF0YWxFcnJvcigpKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IFwiL3RtcC94XCIgfSwgMywgMCksXG4gICAgKS5yZWplY3RzLnRvTWF0Y2hPYmplY3QoeyBzdGRlcnI6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiSW52YWxpZFwiKSB9KTtcblxuICAgIGV4cGVjdChleGVjTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcInRocm93cyBhZnRlciBleGhhdXN0aW5nIHJldHJpZXMgb24gcGVyc2lzdGVudCB0cmFuc2llbnQgZXJyb3JzXCIsIGFzeW5jICgpID0+IHtcbiAgICBleGVjTW9jay5tb2NrUmVqZWN0ZWRWYWx1ZSh0cmFuc2llbnRFcnJvcihcIjUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlXCIpKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IFwiL3RtcC94XCIgfSwgMywgMCksXG4gICAgKS5yZWplY3RzLnRvTWF0Y2hPYmplY3QoeyBzdGRlcnI6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiNTAzXCIpIH0pO1xuXG4gICAgZXhwZWN0KGV4ZWNNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uXCIsICgpID0+IHtcbiAgaXQoXCJleGVjcyBgdGVycmFmb3JtIHZlcnNpb25gIG9uY2UgYW5kIG1lbW9pemVzIHRoZSByZXN1bHRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4ZWNNb2NrLm1vY2tSZXNldCgpO1xuICAgIGV4ZWNNb2NrLm1vY2tSZXNvbHZlZFZhbHVlKFwiVGVycmFmb3JtIHYxLjcuNVxcbm9uIGxpbnV4X2FtZDY0XFxuXCIpO1xuXG4gICAgY29uc3QgZmlyc3QgPSBhd2FpdCBnZXRGZXRjaGluZ0NsaVZlcnNpb24oKTtcbiAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCBnZXRGZXRjaGluZ0NsaVZlcnNpb24oKTtcblxuICAgIGV4cGVjdChmaXJzdCkudG9FcXVhbCh7IG5hbWU6IFwidGVycmFmb3JtXCIsIHZlcnNpb246IFwiMS43LjVcIiB9KTtcbiAgICBleHBlY3Qoc2Vjb25kKS50b0JlKGZpcnN0KTtcbiAgICBleHBlY3QoZXhlY01vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIG5vdGhpbmcgZm9yIGEgbW9kdWxlIHdpdGhvdXQgcmVxdWlyZWRfcHJvdmlkZXJzXCIsICgpID0+IHtcbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyh7IHZhcmlhYmxlOiB7IGZvbzogW3t9XSB9IH0pKS50b0VxdWFsKFxuICAgICAgW10sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIG5vdGhpbmcgZm9yIHJlcXVpcmVkIHByb3ZpZGVycyB3aXRob3V0IGNvbmZpZ3VyYXRpb24gYWxpYXNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiBbXG4gICAgICAgIHsgcmVxdWlyZWRfcHJvdmlkZXJzOiBbeyBhd3M6IHsgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9IH1dIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJjb2xsZWN0cyBldmVyeSBhbGlhcyBkZWNsYXJlZCBhY3Jvc3MgdGVycmFmb3JtIGJsb2Nrc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXdzOiB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIixcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcbiAgICAgICAgICAgICAgICAgIFwiJHthd3MuZ2xvYmFsX3JlZ2lvbn1cIixcbiAgICAgICAgICAgICAgICAgIFwiJHthd3Muc2Vjb25kYXJ5fVwiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJhbmRvbTogeyBzb3VyY2U6IFwiaGFzaGljb3JwL3JhbmRvbVwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXdzeDoge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3c3gudGVydGlhcnl9XCJdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwic2Vjb25kYXJ5XCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c3hcIiwgYWxpYXM6IFwidGVydGlhcnlcIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImRlZHVwbGljYXRlcyBhbGlhc2VzIGRlY2xhcmVkIGluIG1vcmUgdGhhbiBvbmUgZmlsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB7XG4gICAgICBhd3M6IHtcbiAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIixcbiAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3cy5nbG9iYWxfcmVnaW9ufVwiXSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICB0ZXJyYWZvcm06IFt7IHJlcXVpcmVkX3Byb3ZpZGVyczogW2RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbl0gfV0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW1xuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcImdsb2JhbF9yZWdpb25cIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIGFsaWFzZXMgb2YgcHJvdmlkZXJzIGRlY2xhcmVkIHdpdGhvdXQgYSBzb3VyY2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IHtcbiAgICAgIHRlcnJhZm9ybToge1xuICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IHtcbiAgICAgICAgICBhd3M6IHsgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3cy5vdGhlcn1cIl0gfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW1xuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcIm90aGVyXCIsIHNvdXJjZTogdW5kZWZpbmVkIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwicmVhZHMgdGhlIHBsYWluIHJlZmVyZW5jZXMgYSAudGYuanNvbiBtb2R1bGUgZGVjbGFyZXNcIiwgKCkgPT4ge1xuICAgIC8vIGhjbDJqc29uIG9ubHkgd3JhcHMgSENMIGV4cHJlc3Npb25zIGluIGFuIGludGVycG9sYXRpb247IEpTT04gc3ludGF4XG4gICAgLy8gY2FycmllcyB0aGUgcmVmZXJlbmNlIGFzLWlzLCBhbmQgaXRzIGJsb2NrcyBjb21lIHRocm91Z2ggdW53cmFwcGVkXG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiB7XG4gICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge1xuICAgICAgICAgIG51bGw6IHtcbiAgICAgICAgICAgIHNvdXJjZTogXCJoYXNoaWNvcnAvbnVsbFwiLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCJudWxsLmV4dHJhXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcIm51bGxcIiwgYWxpYXM6IFwiZXh0cmFcIiwgc291cmNlOiBcImhhc2hpY29ycC9udWxsXCIgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBhbGlhc2VzIGEgbW9kdWxlIHNwcmVhZCBhY3Jvc3MgLnRmIGFuZCAudGYuanNvbiBmaWxlc1wiLCAoKSA9PiB7XG4gICAgLy8gaGNsMmpzb24gbWVyZ2VzIGEgLnRmLmpzb24gZmlsZSBpbnRvIHRoZSBwYXJzZWQgSENMIGJ5IHJlY3Vyc2luZyBpbnRvXG4gICAgLy8gdGhlIEhDTCBibG9jayBhcnJheSwgc28gdGhlIEpTT04gaGFsZiBlbmRzIHVwIGFzIGEgbmFtZWQgcHJvcGVydHkgb25cbiAgICAvLyB0aGF0IGFycmF5IHJhdGhlciB0aGFuIGFub3RoZXIgZW50cnkgaW4gaXRcbiAgICBjb25zdCBwYXJzZWQ6IGFueSA9IHtcbiAgICAgIHRlcnJhZm9ybTogW1xuICAgICAgICB7IHJlcXVpcmVkX3Byb3ZpZGVyczogW3sgYXdzOiB7IHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSB9XSB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIHBhcnNlZC50ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzID0ge1xuICAgICAgbnVsbDoge1xuICAgICAgICBzb3VyY2U6IFwiaGFzaGljb3JwL251bGxcIixcbiAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCJudWxsLmV4dHJhXCJdLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJudWxsXCIsIGFsaWFzOiBcImV4dHJhXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvbnVsbFwiIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwiY29sbGVjdHMgYSBiYXJlIGxvY2FsIG5hbWUgYXMgYSByZXF1aXJlZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgIC8vIGBjb25maWd1cmF0aW9uX2FsaWFzZXMgPSBbYXdzLCBhd3MucGlwX3JlYWRdYCBtYWtlcyB0aGUgbW9kdWxlIGRlbWFuZFxuICAgIC8vIHRoYXQgdGhlIGNhbGxlciBwYXNzIGl0cyBkZWZhdWx0IGBhd3NgIGNvbmZpZ3VyYXRpb24gZXhwbGljaXRseSB0b29cbiAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICB0ZXJyYWZvcm06IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhd3M6IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fYWxpYXNlczogW1wiJHthd3N9XCIsIFwiJHthd3MucGlwX3JlYWR9XCJdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMocGFyc2VkKSkudG9FcXVhbChbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IHVuZGVmaW5lZCwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcInBpcF9yZWFkXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJkZWR1cGxpY2F0ZXMgYSBiYXJlIGxvY2FsIG5hbWUgZGVjbGFyZWQgaW4gbW9yZSB0aGFuIG9uZSB0ZXJyYWZvcm0gYmxvY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IHtcbiAgICAgIHRlcnJhZm9ybTogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVxdWlyZWRfcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF3czoge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke2F3c31cIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICByZXF1aXJlZF9wcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXdzOiB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIixcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uX2FsaWFzZXM6IFtcIiR7YXdzfVwiLCBcIiR7YXdzLnNlY29uZGFyeX1cIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBleHBlY3QoY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhwYXJzZWQpKS50b0VxdWFsKFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBhbGlhczogdW5kZWZpbmVkLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwic2Vjb25kYXJ5XCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJpZ25vcmVzIGVudHJpZXMgdGhhdCBhcmUgbm90IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gcmVmZXJlbmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkID0ge1xuICAgICAgdGVycmFmb3JtOiB7XG4gICAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge1xuICAgICAgICAgIGF3czoge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbl9hbGlhc2VzOiBbXCIke3Zhci5ub3RfYW5fYWxpYXMueH1cIiwgXCIke2F3c1swXX1cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cGVjdChjb2xsZWN0TW9kdWxlUHJvdmlkZXJBbGlhc2VzKHBhcnNlZCkpLnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImFwcGx5TW9kdWxlUHJvdmlkZXJBbGlhc2VzXCIsICgpID0+IHtcbiAgY29uc3QgY29uZmlnV2l0aE1vZHVsZSA9ICgpOiBUZXJyYWZvcm1Db25maWcgPT4gKHtcbiAgICB0ZXJyYWZvcm06IHt9LFxuICAgIG1vZHVsZTogeyBteV9tb2R1bGU6IHsgc291cmNlOiBcIi4vbW9kXCIgfSB9LFxuICB9KTtcblxuICBpdChcImRlY2xhcmVzIHRoZSBhbGlhc2VkIHByb3ZpZGVycyBhbmQgcGFzc2VzIHRoZW0gdG8gdGhlIG1vZHVsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwic2Vjb25kYXJ5XCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChjb25maWcpLnRvRXF1YWwoe1xuICAgICAgdGVycmFmb3JtOiB7IHJlcXVpcmVkX3Byb3ZpZGVyczogeyBhd3M6IHsgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9IH0gfSxcbiAgICAgIHByb3ZpZGVyOiB7IGF3czogW3sgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiIH0sIHsgYWxpYXM6IFwic2Vjb25kYXJ5XCIgfV0gfSxcbiAgICAgIG1vZHVsZToge1xuICAgICAgICBteV9tb2R1bGU6IHtcbiAgICAgICAgICBzb3VyY2U6IFwiLi9tb2RcIixcbiAgICAgICAgICBwcm92aWRlcnM6IHtcbiAgICAgICAgICAgIFwiYXdzLmdsb2JhbF9yZWdpb25cIjogXCJhd3MuZ2xvYmFsX3JlZ2lvblwiLFxuICAgICAgICAgICAgXCJhd3Muc2Vjb25kYXJ5XCI6IFwiYXdzLnNlY29uZGFyeVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInBhc3NlcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHdoZW4gdGhlIG1vZHVsZSByZXF1aXJlcyBpdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9LFxuICAgICAgeyBsb2NhbE5hbWU6IFwiYXdzXCIsIGFsaWFzOiBcInBpcF9yZWFkXCIsIHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChjb25maWcpLnRvRXF1YWwoe1xuICAgICAgdGVycmFmb3JtOiB7IHJlcXVpcmVkX3Byb3ZpZGVyczogeyBhd3M6IHsgc291cmNlOiBcImhhc2hpY29ycC9hd3NcIiB9IH0gfSxcbiAgICAgIHByb3ZpZGVyOiB7IGF3czogW3t9LCB7IGFsaWFzOiBcInBpcF9yZWFkXCIgfV0gfSxcbiAgICAgIG1vZHVsZToge1xuICAgICAgICBteV9tb2R1bGU6IHtcbiAgICAgICAgICBzb3VyY2U6IFwiLi9tb2RcIixcbiAgICAgICAgICBwcm92aWRlcnM6IHsgYXdzOiBcImF3c1wiLCBcImF3cy5waXBfcmVhZFwiOiBcImF3cy5waXBfcmVhZFwiIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInBhc3NlcyBvbmx5IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGEgYmFyZS1vbmx5IGRlY2xhcmF0aW9uXCIsICgpID0+IHtcbiAgICAvLyBgY29uZmlndXJhdGlvbl9hbGlhc2VzID0gW2F3c11gLCB3aXRob3V0IGFueSBhbGlhc2VkIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBjb25maWcgPSBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyhjb25maWdXaXRoTW9kdWxlKCksIFwibXlfbW9kdWxlXCIsIFtcbiAgICAgIHsgbG9jYWxOYW1lOiBcImF3c1wiLCBzb3VyY2U6IFwiaGFzaGljb3JwL2F3c1wiIH0sXG4gICAgXSk7XG5cbiAgICBleHBlY3QoY29uZmlnKS50b0VxdWFsKHtcbiAgICAgIHRlcnJhZm9ybTogeyByZXF1aXJlZF9wcm92aWRlcnM6IHsgYXdzOiB7IHNvdXJjZTogXCJoYXNoaWNvcnAvYXdzXCIgfSB9IH0sXG4gICAgICBwcm92aWRlcjogeyBhd3M6IFt7fV0gfSxcbiAgICAgIG1vZHVsZToge1xuICAgICAgICBteV9tb2R1bGU6IHsgc291cmNlOiBcIi4vbW9kXCIsIHByb3ZpZGVyczogeyBhd3M6IFwiYXdzXCIgfSB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJvbWl0cyByZXF1aXJlZF9wcm92aWRlcnMgZm9yIGFsaWFzZXMgd2l0aG91dCBhIGRlY2xhcmVkIHNvdXJjZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXG4gICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwib3RoZXJcIiB9LFxuICAgIF0pO1xuXG4gICAgZXhwZWN0KGNvbmZpZy50ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGNvbmZpZy5wcm92aWRlcikudG9FcXVhbCh7IGF3czogW3sgYWxpYXM6IFwib3RoZXJcIiB9XSB9KTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgdGhlIGNvbmZpZyB1bnRvdWNoZWQgd2hlbiB0aGVyZSBhcmUgbm8gYWxpYXNlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnV2l0aE1vZHVsZSgpLCBcIm15X21vZHVsZVwiLCBbXSksXG4gICAgKS50b0VxdWFsKGNvbmZpZ1dpdGhNb2R1bGUoKSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIHRoZSBjb25maWcgdW50b3VjaGVkIHdoZW4gdGhlIG1vZHVsZSBjYWxsIGlzIHVua25vd25cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGFwcGx5TW9kdWxlUHJvdmlkZXJBbGlhc2VzKGNvbmZpZ1dpdGhNb2R1bGUoKSwgXCJvdGhlcl9tb2R1bGVcIiwgW1xuICAgICAgICB7IGxvY2FsTmFtZTogXCJhd3NcIiwgYWxpYXM6IFwiZ2xvYmFsX3JlZ2lvblwiIH0sXG4gICAgICBdKSxcbiAgICApLnRvRXF1YWwoY29uZmlnV2l0aE1vZHVsZSgpKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwYWNrYWdlU3ViZGlyXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1widGVycmFmb3JtLWF3cy1tb2R1bGVzL2lhbS9hd3NcIiwgdW5kZWZpbmVkXSxcbiAgICBbXG4gICAgICBcInRlcnJhZm9ybS1hd3MtbW9kdWxlcy9pYW0vYXdzLy9tb2R1bGVzL2lhbS1hY2NvdW50XCIsXG4gICAgICBcIm1vZHVsZXMvaWFtLWFjY291bnRcIixcbiAgICBdLFxuICAgIFtcImdpdDo6aHR0cHM6Ly9naXRodWIuY29tL29yZy9yZXBvLmdpdC8vc3ViP3JlZj12MS4yLjNcIiwgXCJzdWJcIl0sXG4gICAgW1wiZ2l0Ojpzc2g6Ly9naXRAZ2l0aHViLmNvbS9vcmcvcmVwby5naXRcIiwgdW5kZWZpbmVkXSxcbiAgICBbXCIuL2xvY2FsL21vZHVsZVwiLCB1bmRlZmluZWRdLFxuICBdKShcInNwbGl0cyAlc1wiLCAoc291cmNlLCBleHBlY3RlZCkgPT4ge1xuICAgIGV4cGVjdChwYWNrYWdlU3ViZGlyKHNvdXJjZSBhcyBzdHJpbmcpKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJmZXRjaGVkTW9kdWxlRGlyXCIsICgpID0+IHtcbiAgbGV0IHdvcmtkaXI6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB3b3JrZGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCBcImZldGNoZWQtbW9kdWxlLWRpci1cIikpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGZzLnJtU3luYyh3b3JrZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdyaXRlTWFuaWZlc3QobW9kdWxlczogeyBLZXk6IHN0cmluZzsgRGlyOiBzdHJpbmcgfVtdKSB7XG4gICAgY29uc3QgZGlyID0gcGF0aC5qb2luKHdvcmtkaXIsIFwiLnRlcnJhZm9ybVwiLCBcIm1vZHVsZXNcIik7XG4gICAgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihkaXIsIFwibW9kdWxlcy5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBNb2R1bGVzOiBtb2R1bGVzIH0pLFxuICAgICk7XG4gIH1cblxuICBpdChcInByZWZlcnMgdGhlIGRpcmVjdG9yeSByZWNvcmRlZCBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0XCIsICgpID0+IHtcbiAgICB3cml0ZU1hbmlmZXN0KFtcbiAgICAgIHsgS2V5OiBcIlwiLCBEaXI6IFwiLlwiIH0sXG4gICAgICB7IEtleTogXCJteV9tb2R1bGVcIiwgRGlyOiBcIi50ZXJyYWZvcm0vbW9kdWxlcy9teV9tb2R1bGUvbW9kdWxlcy9zdWJcIiB9LFxuICAgIF0pO1xuXG4gICAgZXhwZWN0KFxuICAgICAgZmV0Y2hlZE1vZHVsZURpcih3b3JrZGlyLCBcIm15X21vZHVsZVwiLCBcIm9yZy9uYW1lL2F3cy8vbW9kdWxlcy9zdWJcIiksXG4gICAgKS50b0VxdWFsKFxuICAgICAgcGF0aC5qb2luKFxuICAgICAgICB3b3JrZGlyLFxuICAgICAgICBcIi50ZXJyYWZvcm1cIixcbiAgICAgICAgXCJtb2R1bGVzXCIsXG4gICAgICAgIFwibXlfbW9kdWxlXCIsXG4gICAgICAgIFwibW9kdWxlc1wiLFxuICAgICAgICBcInN1YlwiLFxuICAgICAgKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImZhbGxzIGJhY2sgdG8gdGhlIGluc3RhbGwgcGF0aCB3aGVuIHRoZSBtYW5pZmVzdCB3YXMgbm90IHdyaXR0ZW5cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGZldGNoZWRNb2R1bGVEaXIod29ya2RpciwgXCJteV9tb2R1bGVcIiwgXCJvcmcvbmFtZS9hd3MvL21vZHVsZXMvc3ViXCIpLFxuICAgICkudG9FcXVhbChcbiAgICAgIHBhdGguam9pbihcbiAgICAgICAgd29ya2RpcixcbiAgICAgICAgXCIudGVycmFmb3JtXCIsXG4gICAgICAgIFwibW9kdWxlc1wiLFxuICAgICAgICBcIm15X21vZHVsZVwiLFxuICAgICAgICBcIm1vZHVsZXNcIixcbiAgICAgICAgXCJzdWJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHRvIHRoZSBpbnN0YWxsIHBhdGggd2hlbiB0aGUgbWFuaWZlc3QgbGFja3MgdGhlIG1vZHVsZVwiLCAoKSA9PiB7XG4gICAgd3JpdGVNYW5pZmVzdChbeyBLZXk6IFwiXCIsIERpcjogXCIuXCIgfV0pO1xuXG4gICAgZXhwZWN0KGZldGNoZWRNb2R1bGVEaXIod29ya2RpciwgXCJteV9tb2R1bGVcIiwgXCJvcmcvbmFtZS9hd3NcIikpLnRvRXF1YWwoXG4gICAgICBwYXRoLmpvaW4od29ya2RpciwgXCIudGVycmFmb3JtXCIsIFwibW9kdWxlc1wiLCBcIm15X21vZHVsZVwiKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlYWRzIGxvY2FsIG1vZHVsZXMgd2hlcmUgdGhleSBhcmVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGZldGNoZWRNb2R1bGVEaXIod29ya2RpciwgXCJteV9tb2R1bGVcIiwgXCIuLi9tb2RcIiwgXCIvYWJzL3BhdGgvdG8vbW9kXCIpLFxuICAgICkudG9FcXVhbChcIi9hYnMvcGF0aC90by9tb2RcIik7XG4gIH0pO1xufSk7XG4iXX0=
@@ -51,8 +51,12 @@ export declare function sanitizeProviderSchema(schema: ProviderSchema): Provider
51
51
  export interface ModuleProviderAlias {
52
52
  /** local name the module knows the provider by, e.g. `aws` */
53
53
  localName: string;
54
- /** alias part of the reference, e.g. `global_region` */
55
- alias: string;
54
+ /**
55
+ * alias part of the reference, e.g. `global_region`; absent when the module
56
+ * lists the bare local name (`configuration_aliases = [aws]`), which
57
+ * requires the caller to pass its default configuration explicitly
58
+ */
59
+ alias?: string;
56
60
  /** provider source the module declared for `localName`, if it declared one */
57
61
  source?: string;
58
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"provider-schema.d.ts","sourceRoot":"","sources":["../src/provider-schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,2BAA2B,EAC3B,6BAA6B,EAG7B,YAAY,EACZ,cAAc,EAUf,MAAM,gBAAgB,CAAC;AA2FxB;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AACrE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,SAAS,GAAI,GAAG,IAAI,KAKS;IACtC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,EAAE,YAAY,CAAC;CAEtB,CAAC;AAuIF,MAAM,WAAW,eAAe;IAG9B,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAA;KAAE,CAAC;IAC3E,SAAS,EAAE;QACT,kBAAkB,CAAC,EAAE;YACnB,CAAC,IAAI,EAAE,MAAM,GAAG;gBAAE,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACvD,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QACP,CAAC,IAAI,EAAE,MAAM,GAAG;YACd,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE;gBAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;aAAE,CAAC;SAC7C,CAAC;KACH,CAAC;CACH;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,6BAA6B,2BAoDtC;AA2DD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAuC7E;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwND,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,yCAoEzE"}
1
+ {"version":3,"file":"provider-schema.d.ts","sourceRoot":"","sources":["../src/provider-schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,2BAA2B,EAC3B,6BAA6B,EAG7B,YAAY,EACZ,cAAc,EAUf,MAAM,gBAAgB,CAAC;AA2FxB;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AACrE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,SAAS,GAAI,GAAG,IAAI,KAKS;IACtC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,EAAE,YAAY,CAAC;CAEtB,CAAC;AAuIF,MAAM,WAAW,eAAe;IAG9B,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAA;KAAE,CAAC;IAC3E,SAAS,EAAE;QACT,kBAAkB,CAAC,EAAE;YACnB,CAAC,IAAI,EAAE,MAAM,GAAG;gBAAE,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACvD,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QACP,CAAC,IAAI,EAAE,MAAM,GAAG;YACd,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE;gBAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;aAAE,CAAC;SAC7C,CAAC;KACH,CAAC;CACH;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,6BAA6B,2BAoDtC;AA2DD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAuC7E;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkOD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,yCAoEzE"}
@@ -343,7 +343,8 @@ function sanitizeProviderSchema(schema) {
343
343
  });
344
344
  return schema;
345
345
  }
346
- const CONFIGURATION_ALIAS = /^([\w-]+)\.([\w-]+)$/;
346
+ const CONFIGURATION_ALIAS = /^([\w-]+)(?:\.([\w-]+))?$/;
347
+ const providerReference = ({ localName, alias }) => alias ? `${localName}.${alias}` : localName;
347
348
  // hcl2json hands HCL expressions back as interpolations, so a
348
349
  // `configuration_aliases = [aws.global_region]` entry arrives as the string
349
350
  // "${aws.global_region}". A .tf.json module writes the same reference as a
@@ -395,11 +396,16 @@ function collectModuleProviderAliases(parsedModule) {
395
396
  if (!match)
396
397
  continue;
397
398
  const [, localName, alias] = match;
398
- const key = `${localName}.${alias}`;
399
+ const entryAlias = {
400
+ localName,
401
+ alias,
402
+ source: provider === null || provider === void 0 ? void 0 : provider.source,
403
+ };
404
+ const key = providerReference(entryAlias);
399
405
  if (seen.has(key))
400
406
  continue;
401
407
  seen.add(key);
402
- aliases.push({ localName, alias, source: provider === null || provider === void 0 ? void 0 : provider.source });
408
+ aliases.push(entryAlias);
403
409
  }
404
410
  }
405
411
  }
@@ -411,7 +417,7 @@ function collectModuleProviderAliases(parsedModule) {
411
417
  * root config and passes them into the module call, which is what Terraform
412
418
  * demands of anyone calling a module with `configuration_aliases`.
413
419
  *
414
- * The alias blocks stay empty: `terraform get` only builds the configuration
420
+ * The provider blocks stay empty: `terraform get` only builds the configuration
415
421
  * tree, it never configures or installs a provider. Sources are mirrored from
416
422
  * the module's own `required_providers` so a module referring to, say,
417
423
  * hashicorp/aws under a non-default local name still resolves to the same
@@ -424,7 +430,8 @@ function applyModuleProviderAliases(config, moduleKey, aliases) {
424
430
  const moduleCall = (_a = config.module) === null || _a === void 0 ? void 0 : _a[moduleKey];
425
431
  if (!moduleCall || aliases.length === 0)
426
432
  return config;
427
- for (const { localName, alias, source } of aliases) {
433
+ for (const entry of aliases) {
434
+ const { localName, alias, source } = entry;
428
435
  if (source) {
429
436
  config.terraform.required_providers = {
430
437
  ...config.terraform.required_providers,
@@ -434,12 +441,13 @@ function applyModuleProviderAliases(config, moduleKey, aliases) {
434
441
  config.provider = config.provider || {};
435
442
  const blocks = toArray(config.provider[localName]);
436
443
  if (!blocks.some((block) => block.alias === alias)) {
437
- blocks.push({ alias });
444
+ blocks.push(alias ? { alias } : {});
438
445
  }
439
446
  config.provider[localName] = blocks;
447
+ const reference = providerReference(entry);
440
448
  moduleCall.providers = {
441
449
  ...moduleCall.providers,
442
- [`${localName}.${alias}`]: `${localName}.${alias}`,
450
+ [reference]: reference,
443
451
  };
444
452
  }
445
453
  return config;
@@ -552,4 +560,4 @@ async function readModuleSchema(target) {
552
560
  });
553
561
  return moduleSchema;
554
562
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3ZpZGVyLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4Q0Esc0RBT0M7QUFvQ0Qsd0RBeUJDO0FBOEtELGdEQXFEQztBQXNCRCw0REFpQ0M7QUFJRCx3REF1Q0M7QUE2REQsb0VBK0JDO0FBZUQsZ0VBOEJDO0FBUUQsc0NBV0M7QUFhRCw0Q0FtQ0M7QUF5QkQsNENBb0VDO0FBaHVCRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDZDQUErQjtBQUMvQiwyQ0FBNkI7QUFFN0IsOENBQStDO0FBQy9DLDRDQW1Cd0I7QUFDeEIscURBSTBCO0FBRTFCLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7QUFFN0UsSUFBSSx5QkFBbUUsQ0FBQztBQUV4RTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixxQkFBcUI7SUFDbkMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDL0IseUJBQXlCLEdBQUcsSUFBQSxjQUFJLEVBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtTQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLGtDQUF3QixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8seUJBQXlCLENBQUM7QUFDbkMsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxxRUFBcUU7QUFDckUsc0VBQXNFO0FBQ3RFLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsYUFBYTtJQUNiLGNBQWM7SUFDZCxzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixZQUFZO0lBQ1osWUFBWTtJQUNaLGlCQUFpQjtDQUNsQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7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c0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBjb252ZXJ0RmlsZXMgfSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVR5cGUsXG4gIEJsb2NrLFxuICBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICBJbnB1dCxcbiAgTW9kdWxlSW5kZXgsXG4gIE1vZHVsZVNjaGVtYSxcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybUNsaVZlcnNpb24sXG4gIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQsXG4gIFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLFxuICBWZXJzaW9uU2NoZW1hLFxuICBleGVjLFxuICBpc05lc3RlZFR5cGVBdHRyaWJ1dGUsXG4gIGxvZ2dlcixcbiAgcGFyc2VUZXJyYWZvcm1DbGlWZXJzaW9uLFxuICB3aXRoVGVtcERpcixcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBTQ0hFTUFfRU1JU1NJT05fRkFNSUxZX0xBQkVMUyxcbiAgY2hlY2tTY2hlbWFFbWlzc2lvbkdhcEZhbWlsaWVzLFxuICBzdWdnZXN0ZWRFbWl0dGluZ0NsaVZlcnNpb25zLFxufSBmcm9tIFwiLi9lbWlzc2lvbi1jaGVja1wiO1xuXG5jb25zdCB0ZXJyYWZvcm1CaW5hcnlOYW1lID0gcHJvY2Vzcy5lbnYuVEVSUkFGT1JNX0JJTkFSWV9OQU1FIHx8IFwidGVycmFmb3JtXCI7XG5cbmxldCBmZXRjaGluZ0NsaVZlcnNpb25Qcm9taXNlOiBQcm9taXNlPFRlcnJhZm9ybUNsaVZlcnNpb24+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHZlcnNpb24gb2YgdGhlIGZldGNoaW5nIENMSSAoYHRlcnJhZm9ybWAvYHRvZnVgIGJpbmFyeVxuICogcmVzb2x2ZWQgdmlhIGBURVJSQUZPUk1fQklOQVJZX05BTUVgKSBvbmNlIHBlciBwcm9jZXNzLCBtZW1vaXplZC5cbiAqXG4gKiBVc2VkIGJvdGggdG8gc3RhbXAgZmV0Y2hlZCBwcm92aWRlciBzY2hlbWFzIChgY2xpX25hbWVgL2BjbGlfdmVyc2lvbmApXG4gKiBhbmQgYXMgdGhlIGNhY2hlIGtleSBzdWZmaXggaW4gcmVhZC50cywgc2luY2Ugc2NoZW1hIGVtaXNzaW9uIGlzIGZpeGVkXG4gKiBwZXIgQ0xJIG1pbm9yIHZlcnNpb24uXG4gKlxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmcgbGlrZSB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGZXRjaGluZ0NsaVZlcnNpb24oKTogUHJvbWlzZTxUZXJyYWZvcm1DbGlWZXJzaW9uPiB7XG4gIGlmICghZmV0Y2hpbmdDbGlWZXJzaW9uUHJvbWlzZSkge1xuICAgIGZldGNoaW5nQ2xpVmVyc2lvblByb21pc2UgPSBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcInZlcnNpb25cIl0sIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KS50aGVuKHBhcnNlVGVycmFmb3JtQ2xpVmVyc2lvbik7XG4gIH1cbiAgcmV0dXJuIGZldGNoaW5nQ2xpVmVyc2lvblByb21pc2U7XG59XG5cbi8vIFByb3ZpZGVyIGJpbmFyaWVzIGFyZSBkb3dubG9hZGVkIGZyb20gR2l0SHViIHJlbGVhc2UgQ0ROcyBkdXJpbmdcbi8vIGB0ZXJyYWZvcm0gaW5pdGAsIHdoaWNoIGludGVybWl0dGVudGx5IHJldHVybnMgNXh4LiBSZXRyeSBvbiB0aG9zZVxuLy8gc2lnbmF0dXJlcyBvbmx5IOKAlCByZWFsIGNvbmZpZy9zY2hlbWEgZXJyb3JzIHNob3VsZCBzdGlsbCBmYWlsIGZhc3QuXG5jb25zdCBUUkFOU0lFTlRfSU5JVF9FUlJPUl9QQVRURVJOUyA9IFtcbiAgL1xcYjUwWzIzNF1cXGIvLFxuICAvQmFkIEdhdGV3YXkvaSxcbiAgL1NlcnZpY2UgVW5hdmFpbGFibGUvaSxcbiAgL0dhdGV3YXkgVGltZW91dC9pLFxuICAvRUNPTk5SRVNFVC9pLFxuICAvRVRJTUVET1VUL2ksXG4gIC9FQUlfQUdBSU4vaSxcbiAgL3VuZXhwZWN0ZWQgRU9GL2ksXG5dO1xuXG4vKipcbiAqIFJ1bnMgYHRlcnJhZm9ybSBpbml0YCBhbmQgcmV0cmllcyBvbiB0cmFuc2llbnQgSFRUUC9uZXR3b3JrIGZhaWx1cmVzLlxuICpcbiAqIFByb3ZpZGVyIGJpbmFyaWVzIGFyZSBwdWxsZWQgZnJvbSBHaXRIdWIncyByZWxlYXNlIENETiwgd2hpY2hcbiAqIGludGVybWl0dGVudGx5IHJldHVybnMgNXh4LiBUaGUgcmV0cnkgb25seSBmaXJlcyB3aGVuIHN0ZGVyciBtYXRjaGVzIGFcbiAqIGtub3duIHRyYW5zaWVudCBwYXR0ZXJuIOKAlCByZWFsIGVycm9ycyAoYmFkIHZlcnNpb24sIHNjaGVtYSBwYXJzZSwgZXRjLilcbiAqIHN0aWxsIGZhaWwgb24gdGhlIGZpcnN0IGF0dGVtcHQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBzcGF3biBvcHRpb25zIGZvcndhcmRlZCB0byBgZXhlY2AgKGBjd2RgIGlzIHJlcXVpcmVkIHNvXG4gKiAgIGB0ZXJyYWZvcm0gaW5pdGAgcnVucyBpbnNpZGUgdGhlIHRlbXAgZGlyIGhvbGRpbmcgYG1haW4udGYuanNvbmApXG4gKiBAcGFyYW0gbWF4QXR0ZW1wdHMgLSB0b3RhbCBhdHRlbXB0cyBpbmNsdWRpbmcgdGhlIGluaXRpYWwgY2FsbDsgdGhlIG51bWJlclxuICogICBvZiByZXRyaWVzIGlzIGBtYXhBdHRlbXB0cyAtIDFgLiBEZWZhdWx0cyB0byA1ICgxIGluaXRpYWwgKyA0IHJldHJpZXMpXG4gKiBAcGFyYW0gYmFzZURlbGF5TXMgLSBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IHJldHJ5LiBUZXN0cyBwYXNzIGAwYCB0byBza2lwXG4gKiAgIHdhaXRzLiBEZWZhdWx0cyB0byA1MDAwbXNcbiAqIEBwYXJhbSBiYWNrb2ZmTXVsdGlwbGllciAtIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBkZWxheSBvbiBlYWNoIHN1YnNlcXVlbnRcbiAqICAgcmV0cnkgKHNvIHJldHJpZXMgd2FpdCBgYmFzZURlbGF5TXMgKiBtdWx0aXBsaWVyXihhdHRlbXB0LTEpYCkuIERlZmF1bHRzXG4gKiAgIHRvIDIgKDFzIOKGkiAycyDihpIgNHMg4oCmKVxuICogQHJldHVybnMgc3Rkb3V0IGZyb20gdGhlIHN1Y2Nlc3NmdWwgYHRlcnJhZm9ybSBpbml0YCBpbnZvY2F0aW9uXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVycmFmb3JtSW5pdFdpdGhSZXRyeShcbiAgb3B0aW9uczogeyBjd2Q6IHN0cmluZyB9LFxuICBtYXhBdHRlbXB0cyA9IDUsXG4gIGJhc2VEZWxheU1zID0gNTAwMCxcbiAgYmFja29mZk11bHRpcGxpZXIgPSAyLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJpbml0XCJdLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCBzdGRlcnI6IHN0cmluZyA9IGVycm9yPy5zdGRlcnIgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHRyYW5zaWVudCA9IFRSQU5TSUVOVF9JTklUX0VSUk9SX1BBVFRFUk5TLnNvbWUoKHApID0+XG4gICAgICAgIHAudGVzdChzdGRlcnIpLFxuICAgICAgKTtcbiAgICAgIGlmICghdHJhbnNpZW50IHx8IGF0dGVtcHQgPT09IG1heEF0dGVtcHRzKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsYXlNcyA9IGJhc2VEZWxheU1zICogYmFja29mZk11bHRpcGxpZXIgKiogKGF0dGVtcHQgLSAxKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgdGVycmFmb3JtIGluaXQgZmFpbGVkIHdpdGggYSB0cmFuc2llbnQgZXJyb3IsIHJldHJ5aW5nIGluICR7ZGVsYXlNc31tcyAoYXR0ZW1wdCAke2F0dGVtcHR9LyR7bWF4QXR0ZW1wdHMgLSAxfSlgLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5TXMpKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwidW5yZWFjaGFibGVcIik7XG59XG5cbi8qKlxuICogRnVsbHkgUXVhbGlmaWVkIHByb3ZpZGVyIG5hbWUgaW4gdGhlIGZvcm1hdDpcbiAqIGxpa2UgZS5nLiByZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1xuICovXG5leHBvcnQgdHlwZSBGUVBOID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiRnVsbHlRdWFsaWZpZWRQcm92aWRlck5hbWVcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJIb3N0bmFtZSA9IHN0cmluZyAmIHsgX190eXBlOiBcIlByb3ZpZGVySG9zdG5hbWVcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJOYW1lc3BhY2UgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlck5hbWVzcGFjZVwiIH07XG5leHBvcnQgdHlwZSBQcm92aWRlck5hbWUgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlck5hbWVcIiB9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VGUVBOID0gKGY6IEZRUE4pID0+IHtcbiAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWVdID0gZi5zcGxpdChcIi9cIik7XG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgaGFuZGxlICR7Zn1gKTtcbiAgfVxuICByZXR1cm4geyBob3N0bmFtZSwgbmFtZXNwYWNlLCBuYW1lIH0gYXMge1xuICAgIGhvc3RuYW1lOiBQcm92aWRlckhvc3RuYW1lO1xuICAgIG5hbWVzcGFjZTogUHJvdmlkZXJOYW1lc3BhY2U7XG4gICAgbmFtZTogUHJvdmlkZXJOYW1lO1xuICB9O1xufTtcblxuY29uc3QgdW53cmFwSWZBcnJheSA9IDxUPihpdGVtOiBUIHwgVFtdKTogVCA9PlxuICBBcnJheS5pc0FycmF5KGl0ZW0pID8gaXRlbVswXSA6IGl0ZW07XG5cbmNvbnN0IHRyYW5zZm9ybVZhcmlhYmxlcyA9ICh2YXJpYWJsZXM6IGFueSkgPT4ge1xuICBjb25zdCByZXN1bHQ6IElucHV0W10gPSBbXTtcblxuICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuIHJlc3VsdDtcblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModmFyaWFibGVzKSkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdW53cmFwSWZBcnJheSh2YXJpYWJsZXNbbmFtZV0pO1xuICAgIGxldCB2YXJpYWJsZVR5cGU6IHN0cmluZztcblxuICAgIGlmIChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhcmlhYmxlLmhhc093blByb3BlcnR5KFwidHlwZVwiKSA9PSBmYWxzZSAmJlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgdmFyaWFibGUuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpID09IHRydWVcbiAgICApIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhcmlhYmxlW1wiZGVmYXVsdFwiXSkge1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgIHZhcmlhYmxlVHlwZSA9IFwiYm9vbFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgdmFyaWFibGVUeXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSBcImFueVwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByYXdWYXJpYWJsZVR5cGUgPSB2YXJpYWJsZVtcInR5cGVcIl07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByYXdWYXJpYWJsZVR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgcmF3VmFyaWFibGVUeXBlLnN0YXJ0c1dpdGgoXCIke1wiKSAmJlxuICAgICAgICByYXdWYXJpYWJsZVR5cGUuZW5kc1dpdGgoXCJ9XCIpICYmXG4gICAgICAgICFyYXdWYXJpYWJsZVR5cGUuaW5jbHVkZXMoXCJcXG5cIilcbiAgICAgICkge1xuICAgICAgICB2YXJpYWJsZVR5cGUgPSByYXdWYXJpYWJsZVR5cGUuc2xpY2UoMiwgLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyaWFibGVUeXBlID0gXCJhbnlcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpdGVtOiBJbnB1dCA9IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB2YXJpYWJsZVR5cGUsXG4gICAgICBkZXNjcmlwdGlvbjogdmFyaWFibGVbXCJkZXNjcmlwdGlvblwiXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHJlcXVpcmVkOiB2YXJpYWJsZS5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIikgPT0gZmFsc2UsXG4gICAgfTtcblxuICAgIGlmICghaXRlbS5yZXF1aXJlZCkge1xuICAgICAgaXRlbVtcImRlZmF1bHRcIl0gPSB2YXJpYWJsZVtcImRlZmF1bHRcIl07XG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdHJhbnNmb3JtT3V0cHV0cyA9IChvdXRwdXRzOiBhbnkpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKG91dHB1dHMpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMob3V0cHV0cykpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHVud3JhcElmQXJyYXkob3V0cHV0c1tuYW1lXSk7XG5cbiAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG91dHB1dFtcImRlc2NyaXB0aW9uXCJdLFxuICAgICAgfTtcblxuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGhhcnZlc3RNb2R1bGVTY2hlbWEgPSBhc3luYyAoXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgbW9kdWxlczogc3RyaW5nW10sXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+ID0+IHtcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4oXG4gICAgd29ya2luZ0RpcmVjdG9yeSxcbiAgICBcIi50ZXJyYWZvcm1cIixcbiAgICBcIm1vZHVsZXNcIixcbiAgICBcIm1vZHVsZXMuanNvblwiLFxuICApO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1vZHVsZXMgd2VyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IC0gY291bGRuJ3QgZmluZCAke2ZpbGVOYW1lfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZUluZGV4ID0gSlNPTi5wYXJzZShcbiAgICBmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIFwidXRmLThcIiksXG4gICkgYXMgTW9kdWxlSW5kZXg7XG5cbiAgZm9yIChjb25zdCBtb2Qgb2YgbW9kdWxlcykge1xuICAgIGNvbnN0IG0gPSBtb2R1bGVJbmRleC5Nb2R1bGVzLmZpbmQoKG90aGVyKSA9PiBtb2QgPT09IG90aGVyLktleSk7XG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCAke219YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgY29udmVydEZpbGVzKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LCBtLkRpcikpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZHVsZXMgd2VyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IC0gY291bGRuJ3QgcGFyc2UgJHttLkRpcn1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWE6IE1vZHVsZVNjaGVtYSA9IHtcbiAgICAgIGlucHV0czogdHJhbnNmb3JtVmFyaWFibGVzKHBhcnNlZC52YXJpYWJsZSksXG4gICAgICBvdXRwdXRzOiB0cmFuc2Zvcm1PdXRwdXRzKHBhcnNlZC5vdXRwdXQpLFxuICAgICAgbmFtZTogbW9kLFxuICAgIH07XG5cbiAgICByZXN1bHRbbW9kXSA9IHNjaGVtYTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5mdW5jdGlvbiBqb2luV2l0aEFuZChpdGVtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAoaXRlbXMubGVuZ3RoIDw9IDEpIHJldHVybiBpdGVtcy5qb2luKFwiXCIpO1xuICByZXR1cm4gYCR7aXRlbXMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKX0gYW5kICR7aXRlbXNbaXRlbXMubGVuZ3RoIC0gMV19YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1Db25maWcge1xuICAvLyBhIGxpc3QgaG9sZHMgc2V2ZXJhbCBjb25maWd1cmF0aW9ucyBvZiB0aGUgc2FtZSBwcm92aWRlciwgd2hpY2ggaXMgaG93XG4gIC8vIGFsaWFzZWQgcHJvdmlkZXIgYmxvY2tzIGFyZSBleHByZXNzZWQgaW4gSlNPTiBzeW50YXhcbiAgcHJvdmlkZXI/OiB7IFtuYW1lOiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgUmVjb3JkPHN0cmluZywgYW55PltdIH07XG4gIHRlcnJhZm9ybToge1xuICAgIHJlcXVpcmVkX3Byb3ZpZGVycz86IHtcbiAgICAgIFtuYW1lOiBzdHJpbmddOiB7IHNvdXJjZT86IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9O1xuICAgIH07XG4gIH07XG4gIG1vZHVsZT86IHtcbiAgICBbbmFtZTogc3RyaW5nXToge1xuICAgICAgc291cmNlOiBzdHJpbmc7XG4gICAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgICAgcHJvdmlkZXJzPzogeyBbbG9jYWxOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFByb3ZpZGVyU2NoZW1hKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuKSB7XG4gIGNvbnN0IGNvbmZpZzogVGVycmFmb3JtQ29uZmlnID0ge1xuICAgIHByb3ZpZGVyOiB7fSxcbiAgICB0ZXJyYWZvcm06IHtcbiAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge30sXG4gICAgfSxcbiAgfTtcblxuICBjb25maWcucHJvdmlkZXIhW3RhcmdldC5uYW1lXSA9IHt9O1xuICBjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyFbdGFyZ2V0Lm5hbWVdID0ge1xuICAgIHZlcnNpb246IHRhcmdldC52ZXJzaW9uLFxuICAgIHNvdXJjZTogdGFyZ2V0LnNvdXJjZSxcbiAgfTtcblxuICBsZXQgcHJvdmlkZXJTY2hlbWE6IFByb3ZpZGVyU2NoZW1hID0geyBmb3JtYXRfdmVyc2lvbjogXCIwLjFcIiB9O1xuXG4gIGF3YWl0IHdpdGhUZW1wRGlyKFwiZmV0Y2hQcm92aWRlclNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIFwibWFpbi50Zi5qc29uXCIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG5cbiAgICBhd2FpdCB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBvdXRkaXIgfSk7XG4gICAgcHJvdmlkZXJTY2hlbWEgPSBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJwcm92aWRlcnNcIiwgXCJzY2hlbWFcIiwgXCItanNvblwiXSwge1xuICAgICAgICBjd2Q6IG91dGRpcixcbiAgICAgIH0pLFxuICAgICkgYXMgUHJvdmlkZXJTY2hlbWE7XG5cbiAgICBjb25zdCB2ZXJzaW9uU2NoZW1hID0gSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1widmVyc2lvblwiLCBcIi1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogb3V0ZGlyLFxuICAgICAgfSksXG4gICAgKSBhcyBWZXJzaW9uU2NoZW1hO1xuXG4gICAgcHJvdmlkZXJTY2hlbWEucHJvdmlkZXJfdmVyc2lvbnMgPSB2ZXJzaW9uU2NoZW1hLnByb3ZpZGVyX3NlbGVjdGlvbnM7XG4gIH0pO1xuXG4gIC8vIFN0YW1wIHRoZSBmZXRjaGluZyBDTEkncyBpZGVudGl0eSBzbyBkb3duc3RyZWFtIGNvbnN1bWVycyBjYW4gcmVhc29uXG4gIC8vIGFib3V0IHdoaWNoIG5ld2VyLXByb3RvY29sIHNlY3Rpb25zIHRoaXMgZmV0Y2ggY291bGQgcG9zc2libHkgaGF2ZVxuICAvLyBlbWl0dGVkLiBOZXZlciBmYWlsIHRoZSBmZXRjaCBvdmVyIHRoaXMgLSBpdCdzIGJlc3QtZWZmb3J0IG1ldGFkYXRhLlxuICB0cnkge1xuICAgIGNvbnN0IGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIHByb3ZpZGVyU2NoZW1hLmNsaV9uYW1lID0gY2xpLm5hbWU7XG4gICAgcHJvdmlkZXJTY2hlbWEuY2xpX3ZlcnNpb24gPSBjbGkudmVyc2lvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ291bGQgbm90IGRldGVybWluZSBmZXRjaGluZyBDTEkgdmVyc2lvbiB0byBzdGFtcCBwcm92aWRlciBzY2hlbWE6ICR7ZXJyb3J9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplUHJvdmlkZXJTY2hlbWEocHJvdmlkZXJTY2hlbWEpO1xufVxuXG4vKipcbiAqIFdhcm5zIHdoZW4gdGhlIENMSSB0aGF0IHByb2R1Y2VkIGEgZ2l2ZW4gcHJvdmlkZXIgc2NoZW1hIHByZWRhdGVzIG9uZSBvclxuICogbW9yZSBzY2hlbWEtZW1pc3Npb24gYm91bmRhcmllcyB0aGUgcHJvamVjdCdzIGRlY2xhcmVkIGB0YXJnZXRWZXJzaW9uc2BcbiAqIGNhcmUgYWJvdXQgKHNlZSBlbWlzc2lvbi1jaGVjay50cykgLSBpLmUuIHNvbWUgbmV3ZXItcHJvdG9jb2wgc2VjdGlvbnNcbiAqIChmdW5jdGlvbnMsIGVwaGVtZXJhbCByZXNvdXJjZXMsIC4uLikgbWF5IGJlIG1pc3NpbmcgZnJvbSB0aGUgZ2VuZXJhdGVkXG4gKiBiaW5kaW5ncyBldmVuIHRob3VnaCB0aGUgc2NoZW1hIGZldGNoIGl0c2VsZiBzdWNjZWVkZWQuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGRlY291cGxlZCBmcm9tIHRoZSBmZXRjaCBwYXRoIChyZWFkUHJvdmlkZXJTY2hlbWEpIHNvIGl0XG4gKiBhbHNvIHJ1bnMgZm9yIHNjaGVtYXMgc2VydmVkIGZyb20gdGhlIG9uLWRpc2sgY2FjaGU6IGNhY2hlZCBKU09OIGNhcnJpZXNcbiAqIHRoZSBzYW1lIGBjbGlfbmFtZWAvYGNsaV92ZXJzaW9uYCBzdGFtcHMgYSBmcmVzaCBmZXRjaCB3b3VsZCBoYXZlXG4gKiB3cml0dGVuICh0aGUgY2FjaGUga2V5IGFscmVhZHkgc2VnbWVudHMgYnkgQ0xJIHByb2R1Y3QrbWlub3IpLCBzbyB0aGUgZ2FwXG4gKiBjaGVjayBpcyBqdXN0IGFzIG1lYW5pbmdmdWwgb24gYSBjYWNoZSBoaXQgYXMgb24gYSBtaXNzLlxuICpcbiAqIE5vLW9wIHdpdGhvdXQgYHRhcmdldFZlcnNpb25zYCAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGFyZSB0aGUgQ0xJXG4gKiBhZ2FpbnN0LiBGYWxscyBiYWNrIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MncyBmZXRjaGluZyBDTEkgdmVyc2lvbiB3aGVuXG4gKiB0aGUgc2NoZW1hIGl0c2VsZiBpc24ndCBzdGFtcGVkIChlLmcuIG9sZGVyIGNhY2hlIGVudHJpZXMgd3JpdHRlbiBiZWZvcmVcbiAqIHN0YW1waW5nIGV4aXN0ZWQpLlxuICpcbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YXJuSWZTY2hlbWFFbWlzc2lvbkdhcHMoXG4gIHNjaGVtYTogUHJvdmlkZXJTY2hlbWEsXG4gIHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF0YXJnZXRWZXJzaW9ucykgcmV0dXJuO1xuXG4gIGxldCBjbGk6IFRlcnJhZm9ybUNsaVZlcnNpb247XG4gIGlmIChzY2hlbWEuY2xpX25hbWUgJiYgc2NoZW1hLmNsaV92ZXJzaW9uKSB7XG4gICAgaWYgKHNjaGVtYS5jbGlfbmFtZSAhPT0gXCJ0ZXJyYWZvcm1cIiAmJiBzY2hlbWEuY2xpX25hbWUgIT09IFwib3BlbnRvZnVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGkgPSB7IG5hbWU6IHNjaGVtYS5jbGlfbmFtZSwgdmVyc2lvbjogc2NoZW1hLmNsaV92ZXJzaW9uIH07XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGZldGNoaW5nIENMSSB2ZXJzaW9uIHRvIGNoZWNrIGZvciBzY2hlbWEgZW1pc3Npb24gZ2FwczogJHtlcnJvcn1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXBGYW1pbGllcyA9IGNoZWNrU2NoZW1hRW1pc3Npb25HYXBGYW1pbGllcyhjbGksIHRhcmdldFZlcnNpb25zKTtcbiAgaWYgKGdhcEZhbWlsaWVzLmxlbmd0aCA+IDAgJiYgY2xpLnZlcnNpb24pIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBwcm92aWRlciBzY2hlbWEgZmV0Y2hlZCB3aXRoICR7Y2xpLm5hbWV9ICR7Y2xpLnZlcnNpb259IOKAlCAke2pvaW5XaXRoQW5kKFxuICAgICAgICBnYXBGYW1pbGllcy5tYXAoKGZhbWlseSkgPT4gU0NIRU1BX0VNSVNTSU9OX0ZBTUlMWV9MQUJFTFNbZmFtaWx5XSksXG4gICAgICApfSB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQ7IHJ1biBjZGt0biBnZXQgd2l0aCAke3N1Z2dlc3RlZEVtaXR0aW5nQ2xpVmVyc2lvbnMoXG4gICAgICAgIGdhcEZhbWlsaWVzLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gVGhlIHByb3ZpZGVycyBoYXZlIHNvbWUgcG90ZW50aWFsIGJ1Z3MgdGhhdCB3ZSB3YW50IHRvIHByby1hY3RpdmVseVxuLy8gZml4IGhlcmUgc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUgY29kZSBjYW4gYXNzdW1lIGEgY29uc2lzdGVudCBzY2hlbWEuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVQcm92aWRlclNjaGVtYShzY2hlbWE6IFByb3ZpZGVyU2NoZW1hKTogUHJvdmlkZXJTY2hlbWEge1xuICAvLyBNYWlubHkgc29tZSBhdHRyaWJ1dGVzIGFyZSBcImRvdWJsZWRcIiwgZS5nLiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXVxuICAvLyBpbnN0ZWFkIG9mIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1cbiAgZnVuY3Rpb24gYXR0cmlidXRlRG91YmxpbmdGaXgoYXR0cmlidXRlOiBBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUge1xuICAgIGlmIChpc05lc3RlZFR5cGVBdHRyaWJ1dGUoYXR0cmlidXRlKSB8fCAhQXJyYXkuaXNBcnJheShhdHRyaWJ1dGUudHlwZSkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9XG4gICAgICBhdHRyaWJ1dGUudHlwZS5sZW5ndGggPT09IDJcbiAgICAgICAgPyBhdHRyaWJ1dGUudHlwZVxuICAgICAgICA6IChhdHRyaWJ1dGUudHlwZSBhcyBzdHJpbmdbXSkuc2xpY2UoMCwgMik7IC8vIFRoZSB0eXBlcyB0ZWxsIHVzIHRoaXMgY2FuJ3QgaGFwcGVuLCByZWFsaXR5IGJlZ3MgdG8gZGlmZmVyXG5cbiAgICBhdHRyaWJ1dGUudHlwZSA9IHR5cGUgYXMgQXR0cmlidXRlVHlwZTtcbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG5cbiAgLy8gTXV0YXRlcyBibG9jayB3aXRoIHRoZSBmaXhcbiAgZnVuY3Rpb24gc2FuaXRpemVCbG9jayhibG9jazogQmxvY2spIHtcbiAgICBPYmplY3QudmFsdWVzKGJsb2NrLmF0dHJpYnV0ZXMgfHwge30pLmZvckVhY2goYXR0cmlidXRlRG91YmxpbmdGaXgpO1xuICAgIE9iamVjdC52YWx1ZXMoYmxvY2suYmxvY2tfdHlwZXMgfHwge30pLmZvckVhY2goKGJsb2NrVHlwZSkgPT4ge1xuICAgICAgc2FuaXRpemVCbG9jayhibG9ja1R5cGUuYmxvY2spO1xuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LnZhbHVlcyhzY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkuZm9yRWFjaCgocHJvdmlkZXIpID0+IHtcbiAgICBjb25zdCBlbnRpdGllcyA9IFtcbiAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhwcm92aWRlci5yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSksXG4gICAgICAuLi5PYmplY3QudmFsdWVzKHByb3ZpZGVyLmVwaGVtZXJhbF9yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICBdO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBzYW5pdGl6ZUJsb2NrKGVudGl0eS5ibG9jayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbi8qKlxuICogQSBwcm92aWRlciBjb25maWd1cmF0aW9uIHRoYXQgYSBtb2R1bGUgZXhwZWN0cyB0byBiZSBoYW5kZWQgYnkgaXRzIGNhbGxlcixcbiAqIGRlY2xhcmVkIGFzIGBjb25maWd1cmF0aW9uX2FsaWFzZXNgIGluIHRoZSBtb2R1bGUncyBgcmVxdWlyZWRfcHJvdmlkZXJzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVQcm92aWRlckFsaWFzIHtcbiAgLyoqIGxvY2FsIG5hbWUgdGhlIG1vZHVsZSBrbm93cyB0aGUgcHJvdmlkZXIgYnksIGUuZy4gYGF3c2AgKi9cbiAgbG9jYWxOYW1lOiBzdHJpbmc7XG4gIC8qKiBhbGlhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2UsIGUuZy4gYGdsb2JhbF9yZWdpb25gICovXG4gIGFsaWFzOiBzdHJpbmc7XG4gIC8qKiBwcm92aWRlciBzb3VyY2UgdGhlIG1vZHVsZSBkZWNsYXJlZCBmb3IgYGxvY2FsTmFtZWAsIGlmIGl0IGRlY2xhcmVkIG9uZSAqL1xuICBzb3VyY2U/OiBzdHJpbmc7XG59XG5cbmNvbnN0IENPTkZJR1VSQVRJT05fQUxJQVMgPSAvXihbXFx3LV0rKVxcLihbXFx3LV0rKSQvO1xuXG4vLyBoY2wyanNvbiBoYW5kcyBIQ0wgZXhwcmVzc2lvbnMgYmFjayBhcyBpbnRlcnBvbGF0aW9ucywgc28gYVxuLy8gYGNvbmZpZ3VyYXRpb25fYWxpYXNlcyA9IFthd3MuZ2xvYmFsX3JlZ2lvbl1gIGVudHJ5IGFycml2ZXMgYXMgdGhlIHN0cmluZ1xuLy8gXCIke2F3cy5nbG9iYWxfcmVnaW9ufVwiLiBBIC50Zi5qc29uIG1vZHVsZSB3cml0ZXMgdGhlIHNhbWUgcmVmZXJlbmNlIGFzIGFcbi8vIHBsYWluIHN0cmluZywgd2hpY2ggaGNsMmpzb24gcGFzc2VzIHRocm91Z2ggdW50b3VjaGVkLlxuY29uc3QgdW53cmFwSW50ZXJwb2xhdGlvbiA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICB2YWx1ZS5zdGFydHNXaXRoKFwiJHtcIikgJiYgdmFsdWUuZW5kc1dpdGgoXCJ9XCIpID8gdmFsdWUuc2xpY2UoMiwgLTEpIDogdmFsdWU7XG5cbmNvbnN0IHRvQXJyYXkgPSA8VD4oaXRlbTogVCB8IFRbXSB8IHVuZGVmaW5lZCB8IG51bGwpOiBUW10gPT4ge1xuICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHJldHVybiBbXTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtIDogW2l0ZW1dO1xufTtcblxuLyoqXG4gKiBFdmVyeSBvY2N1cnJlbmNlIG9mIGEgYmxvY2sgdGhhdCBoY2wyanNvbiBwcm9kdWNlZCB1bmRlciBvbmUga2V5LlxuICpcbiAqIEhDTCBibG9ja3MgY29tZSBiYWNrIGFzIGFuIGFycmF5IHdpdGggYW4gZW50cnkgcGVyIG9jY3VycmVuY2UsIGEgLnRmLmpzb25cbiAqIGJsb2NrIGFzIGEgcGxhaW4gb2JqZWN0LiBBIG1vZHVsZSBtaXhpbmcgYm90aCBzeW50YXhlcyBnZXRzIGEgdGhpcmQgc2hhcGU6XG4gKiBoY2wyanNvbiBtZXJnZXMgdGhlIEpTT04gZmlsZSBpbnRvIHRoZSBwYXJzZWQgSENMLCBhbmQgaXRzIGRlZXBNZXJnZVxuICogcmVjdXJzZXMgaW50byB0aGUgSENMIGFycmF5IGluc3RlYWQgb2YgYXBwZW5kaW5nIHRvIGl0LCBsZWF2aW5nIHRoZSBKU09OXG4gKiBjb250cmlidXRpb24gaGFuZ2luZyBvZmYgdGhlIGFycmF5IGFzIG5hbWVkIHByb3BlcnRpZXMuIFRob3NlIHByb3BlcnRpZXNcbiAqIGFyZSBhbiBvY2N1cnJlbmNlIG9mIHRoZWlyIG93biAtIGFuZCBvbmUgdGhhdCBuZWl0aGVyIGl0ZXJhdGluZyB0aGUgYXJyYXlcbiAqIG5vciBKU09OLnN0cmluZ2lmeSB3b3VsZCBldmVyIHNob3cuXG4gKi9cbmNvbnN0IGJsb2NrT2NjdXJyZW5jZXMgPSAoYmxvY2s6IGFueSk6IGFueVtdID0+IHtcbiAgaWYgKGJsb2NrID09PSB1bmRlZmluZWQgfHwgYmxvY2sgPT09IG51bGwpIHJldHVybiBbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJsb2NrKSkgcmV0dXJuIFtibG9ja107XG5cbiAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGJsb2NrKS5maWx0ZXIoKFtrZXldKSA9PiAhL15cXGQrJC8udGVzdChrZXkpKSxcbiAgKTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5sZW5ndGggPiAwID8gWy4uLmJsb2NrLCBtZXJnZWRdIDogWy4uLmJsb2NrXTtcbn07XG5cbi8qKlxuICogQ29sbGVjdHMgdGhlIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb25zIGEgbW9kdWxlIHJlcXVpcmVzIGl0cyBjYWxsZXIgdG8gcGFzc1xuICogaW4sIGZyb20gdGhlIGhjbDJqc29uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2R1bGUncyBkaXJlY3RvcnkuXG4gKlxuICogQSBtb2R1bGUgbWF5IGRlY2xhcmUgYHJlcXVpcmVkX3Byb3ZpZGVyc2AgaW4gbW9yZSB0aGFuIG9uZSBgdGVycmFmb3JtYFxuICogYmxvY2ssIGFuZCBtYXkgc3ByZWFkIHRoZW0gYWNyb3NzIC50ZiBhbmQgLnRmLmpzb24gZmlsZXM7IGV2ZXJ5IG9jY3VycmVuY2VcbiAqIGhjbDJqc29uIHJlcG9ydHMgaXMgY29uc2lkZXJlZCAoc2VlIHtAbGluayBibG9ja09jY3VycmVuY2VzfSkuXG4gKlxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMoXG4gIHBhcnNlZE1vZHVsZTogYW55LFxuKTogTW9kdWxlUHJvdmlkZXJBbGlhc1tdIHtcbiAgY29uc3QgYWxpYXNlczogTW9kdWxlUHJvdmlkZXJBbGlhc1tdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHRlcnJhZm9ybUJsb2NrIG9mIGJsb2NrT2NjdXJyZW5jZXMocGFyc2VkTW9kdWxlPy50ZXJyYWZvcm0pKSB7XG4gICAgZm9yIChjb25zdCByZXF1aXJlZFByb3ZpZGVycyBvZiBibG9ja09jY3VycmVuY2VzKFxuICAgICAgdGVycmFmb3JtQmxvY2s/LnJlcXVpcmVkX3Byb3ZpZGVycyxcbiAgICApKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIE9iamVjdC52YWx1ZXMocmVxdWlyZWRQcm92aWRlcnMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdW53cmFwSWZBcnJheShkZWNsYXJhdGlvbiBhcyBhbnkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdG9BcnJheShwcm92aWRlcj8uY29uZmlndXJhdGlvbl9hbGlhc2VzKSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gQ09ORklHVVJBVElPTl9BTElBUy5leGVjKFxuICAgICAgICAgICAgdW53cmFwSW50ZXJwb2xhdGlvbihTdHJpbmcoZW50cnkpKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghbWF0Y2gpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgWywgbG9jYWxOYW1lLCBhbGlhc10gPSBtYXRjaDtcbiAgICAgICAgICBjb25zdCBrZXkgPSBgJHtsb2NhbE5hbWV9LiR7YWxpYXN9YDtcbiAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgc2Vlbi5hZGQoa2V5KTtcblxuICAgICAgICAgIGFsaWFzZXMucHVzaCh7IGxvY2FsTmFtZSwgYWxpYXMsIHNvdXJjZTogcHJvdmlkZXI/LnNvdXJjZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbGlhc2VzO1xufVxuXG4vKipcbiAqIERlY2xhcmVzIHRoZSBwcm92aWRlciBjb25maWd1cmF0aW9ucyB0aGF0IGBhbGlhc2VzYCBuYW1lcyBvbiB0aGUgc3ludGhldGljXG4gKiByb290IGNvbmZpZyBhbmQgcGFzc2VzIHRoZW0gaW50byB0aGUgbW9kdWxlIGNhbGwsIHdoaWNoIGlzIHdoYXQgVGVycmFmb3JtXG4gKiBkZW1hbmRzIG9mIGFueW9uZSBjYWxsaW5nIGEgbW9kdWxlIHdpdGggYGNvbmZpZ3VyYXRpb25fYWxpYXNlc2AuXG4gKlxuICogVGhlIGFsaWFzIGJsb2NrcyBzdGF5IGVtcHR5OiBgdGVycmFmb3JtIGdldGAgb25seSBidWlsZHMgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIHRyZWUsIGl0IG5ldmVyIGNvbmZpZ3VyZXMgb3IgaW5zdGFsbHMgYSBwcm92aWRlci4gU291cmNlcyBhcmUgbWlycm9yZWQgZnJvbVxuICogdGhlIG1vZHVsZSdzIG93biBgcmVxdWlyZWRfcHJvdmlkZXJzYCBzbyBhIG1vZHVsZSByZWZlcnJpbmcgdG8sIHNheSxcbiAqIGhhc2hpY29ycC9hd3MgdW5kZXIgYSBub24tZGVmYXVsdCBsb2NhbCBuYW1lIHN0aWxsIHJlc29sdmVzIHRvIHRoZSBzYW1lXG4gKiBwcm92aWRlciBpbiB0aGUgcm9vdC5cbiAqXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoXG4gIGNvbmZpZzogVGVycmFmb3JtQ29uZmlnLFxuICBtb2R1bGVLZXk6IHN0cmluZyxcbiAgYWxpYXNlczogTW9kdWxlUHJvdmlkZXJBbGlhc1tdLFxuKTogVGVycmFmb3JtQ29uZmlnIHtcbiAgY29uc3QgbW9kdWxlQ2FsbCA9IGNvbmZpZy5tb2R1bGU/Llttb2R1bGVLZXldO1xuICBpZiAoIW1vZHVsZUNhbGwgfHwgYWxpYXNlcy5sZW5ndGggPT09IDApIHJldHVybiBjb25maWc7XG5cbiAgZm9yIChjb25zdCB7IGxvY2FsTmFtZSwgYWxpYXMsIHNvdXJjZSB9IG9mIGFsaWFzZXMpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICBjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyA9IHtcbiAgICAgICAgLi4uY29uZmlnLnRlcnJhZm9ybS5yZXF1aXJlZF9wcm92aWRlcnMsXG4gICAgICAgIFtsb2NhbE5hbWVdOiB7IHNvdXJjZSB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25maWcucHJvdmlkZXIgPSBjb25maWcucHJvdmlkZXIgfHwge307XG4gICAgY29uc3QgYmxvY2tzID0gdG9BcnJheShjb25maWcucHJvdmlkZXJbbG9jYWxOYW1lXSk7XG4gICAgaWYgKCFibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLmFsaWFzID09PSBhbGlhcykpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKHsgYWxpYXMgfSk7XG4gICAgfVxuICAgIGNvbmZpZy5wcm92aWRlcltsb2NhbE5hbWVdID0gYmxvY2tzO1xuXG4gICAgbW9kdWxlQ2FsbC5wcm92aWRlcnMgPSB7XG4gICAgICAuLi5tb2R1bGVDYWxsLnByb3ZpZGVycyxcbiAgICAgIFtgJHtsb2NhbE5hbWV9LiR7YWxpYXN9YF06IGAke2xvY2FsTmFtZX0uJHthbGlhc31gLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIFRoZSBgLy9zdWJkaXJgIHBvcnRpb24gb2YgYSBtb2R1bGUgc291cmNlLCBpZiBpdCBoYXMgb25lLCBtaXJyb3JpbmcgaG93XG4gKiBUZXJyYWZvcm0gdW5wYWNrcyBhIHBhY2thZ2UgaW50byBgLnRlcnJhZm9ybS9tb2R1bGVzLzxrZXk+LzxzdWJkaXI+YC5cbiAqXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVN1YmRpcihzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFt3aXRob3V0UXVlcnldID0gc291cmNlLnNwbGl0KFwiP1wiKTtcbiAgY29uc3Qgd2l0aG91dEdldHRlclByZWZpeCA9IHdpdGhvdXRRdWVyeS5yZXBsYWNlKC9eW0EtWmEtejAtOV0rOjovLCBcIlwiKTtcbiAgY29uc3Qgd2l0aG91dFNjaGVtZSA9IHdpdGhvdXRHZXR0ZXJQcmVmaXgucmVwbGFjZShcbiAgICAvXltBLVphLXpdW0EtWmEtejAtOSsuLV0qOlxcL1xcLysvLFxuICAgIFwiXCIsXG4gICk7XG5cbiAgY29uc3QgWywgLi4ucmVzdF0gPSB3aXRob3V0U2NoZW1lLnNwbGl0KFwiLy9cIik7XG4gIGNvbnN0IHN1YmRpciA9IHJlc3Quam9pbihcIi8vXCIpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpO1xuICByZXR1cm4gc3ViZGlyIHx8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXaGVyZSB0aGUgbW9kdWxlIFRlcnJhZm9ybSBqdXN0IGZldGNoZWQgZW5kZWQgdXAgb24gZGlzay5cbiAqXG4gKiBUaGUgbWFuaWZlc3QgaXMgdGhlIGF1dGhvcml0eSwgYnV0IGEgYHRlcnJhZm9ybSBnZXRgIHRoYXQgaW5zdGFsbGVkIHRoZVxuICogbW9kdWxlIGFuZCB0aGVuIGZhaWxlZCB0byB2YWxpZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhcm91bmQgaXQgbGVhdmVzIG5vXG4gKiBtYW5pZmVzdCBiZWhpbmQgLSBzbyBmYWxsIGJhY2sgdG8gdGhlIGxvY2F0aW9ucyBUZXJyYWZvcm0gaW5zdGFsbHMgaW50bzpcbiAqIGxvY2FsIG1vZHVsZXMgYXJlIHJlYWQgd2hlcmUgdGhleSBhcmUsIHJlbW90ZSBwYWNrYWdlcyBhcmUgdW5wYWNrZWQgaW50b1xuICogYC50ZXJyYWZvcm0vbW9kdWxlcy88a2V5PmAuXG4gKlxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZldGNoZWRNb2R1bGVEaXIoXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgbW9kdWxlS2V5OiBzdHJpbmcsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsb2NhbFNvdXJjZUFic29sdXRlUGF0aD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihcbiAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgIFwiLnRlcnJhZm9ybVwiLFxuICAgIFwibW9kdWxlc1wiLFxuICAgIFwibW9kdWxlcy5qc29uXCIsXG4gICk7XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKSkge1xuICAgIGNvbnN0IG1vZHVsZUluZGV4ID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhtYW5pZmVzdFBhdGgsIFwidXRmLThcIiksXG4gICAgKSBhcyBNb2R1bGVJbmRleDtcbiAgICBjb25zdCByZWNvcmQgPSBtb2R1bGVJbmRleC5Nb2R1bGVzLmZpbmQoKG1vZCkgPT4gbW9kLktleSA9PT0gbW9kdWxlS2V5KTtcblxuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlc29sdmUod29ya2luZ0RpcmVjdG9yeSwgcmVjb3JkLkRpcik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvY2FsU291cmNlQWJzb2x1dGVQYXRoKSB7XG4gICAgcmV0dXJuIGxvY2FsU291cmNlQWJzb2x1dGVQYXRoO1xuICB9XG5cbiAgcmV0dXJuIHBhdGguam9pbihcbiAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgIFwiLnRlcnJhZm9ybVwiLFxuICAgIFwibW9kdWxlc1wiLFxuICAgIG1vZHVsZUtleSxcbiAgICBwYWNrYWdlU3ViZGlyKHNvdXJjZSkgfHwgXCJcIixcbiAgKTtcbn1cblxuLyoqXG4gKiBSdW5zIGB0ZXJyYWZvcm0gZ2V0YCBhbmQgaGFuZHMgdGhlIGZhaWx1cmUgYmFjayBpbnN0ZWFkIG9mIHRocm93aW5nIGl0LlxuICpcbiAqIEl0cyBkaWFnbm9zdGljcyBhcmUgbm90IGZpbmFsIChzZWUge0BsaW5rIHJlYWRNb2R1bGVTY2hlbWF9KSwgc28gdGhleSBnbyB0b1xuICogdGhlIGRlYnVnIGxvZyByYXRoZXIgdGhhbiB0aGUgdGVybWluYWw7IHRoZSByZXR1cm5lZCBlcnJvciBzdGlsbCBjYXJyaWVzXG4gKiB0aGVtIG9uIGl0cyBgc3RkZXJyYCBmb3IgY2FsbGVycyB0aGF0IGVuZCB1cCByZXRocm93aW5nIGl0LlxuICovXG5hc3luYyBmdW5jdGlvbiB0cnlUZXJyYWZvcm1HZXQob3V0ZGlyOiBzdHJpbmcpOiBQcm9taXNlPEVycm9yIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICBbXCJnZXRcIl0sXG4gICAgICB7IGN3ZDogb3V0ZGlyLCBsb2dTdGRlcnJBc0RlYnVnOiB0cnVlIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQpIHtcbiAgbGV0IG1vZHVsZVNjaGVtYTogUmVjb3JkPHN0cmluZywgTW9kdWxlU2NoZW1hPiA9IHt9O1xuXG4gIGF3YWl0IHdpdGhUZW1wRGlyKFwiZmV0Y2hTY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZzogVGVycmFmb3JtQ29uZmlnID0ge1xuICAgICAgdGVycmFmb3JtOiB7fSxcbiAgICB9O1xuXG4gICAgaWYgKCFjb25maWcubW9kdWxlKSBjb25maWcubW9kdWxlID0ge307XG4gICAgbGV0IHNvdXJjZTogc3RyaW5nID0gdGFyZ2V0LnNvdXJjZTtcblxuICAgIGNvbnN0IGxvY2FsU291cmNlID0gKHRhcmdldC5jb25zdHJhaW50IGFzIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQpXG4gICAgICAubG9jYWxTb3VyY2VBYnNvbHV0ZVBhdGg7XG4gICAgaWYgKGxvY2FsU291cmNlKSB7XG4gICAgICAvLyBjcmVhdGUgcmVsYXRpdmUgcGF0aCB0byBtb2R1bGUgaW4gdGhlIHVzZXIgcHJvamVjdFxuICAgICAgc291cmNlID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBsb2NhbFNvdXJjZSk7XG4gICAgfVxuXG4gICAgY29uZmlnLm1vZHVsZVt0YXJnZXQubW9kdWxlS2V5XSA9IHsgc291cmNlOiBzb3VyY2UgfTtcbiAgICBpZiAodGFyZ2V0LnZlcnNpb24pIHtcbiAgICAgIGNvbmZpZy5tb2R1bGVbdGFyZ2V0Lm1vZHVsZUtleV1bXCJ2ZXJzaW9uXCJdID0gdGFyZ2V0LnZlcnNpb247XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIFwibWFpbi50Zi5qc29uXCIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG5cbiAgICAvLyBgdGVycmFmb3JtIGdldGAgaXMgYm90aCBvdXIgZG93bmxvYWRlciBhbmQgYSBmdWxsIHZhbGlkYXRpb24gb2YgdGhlXG4gICAgLy8gc3ludGhldGljIHJvb3QgY29uZmlnIHdyYXBwZWQgYXJvdW5kIHRoZSBtb2R1bGUuIEEgbW9kdWxlIGRlY2xhcmluZ1xuICAgIC8vIGBjb25maWd1cmF0aW9uX2FsaWFzZXNgIGNhbm5vdCB2YWxpZGF0ZSB1bnRpbCB0aGUgcm9vdCBwYXNzZXMgdGhvc2VcbiAgICAvLyBjb25maWd1cmF0aW9ucyBpbiwgYW5kIHRoZWlyIG5hbWVzIGFyZSBvbmx5IGtub3dhYmxlIG9uY2UgdGhlIG1vZHVsZSBpc1xuICAgIC8vIG9uIGRpc2sgLSBzbyB0aGlzIGZpcnN0IHJ1biBpcyBhIGZldGNoIHdlIGRlZmVyIGp1ZGdlbWVudCBvbi4gVGVycmFmb3JtXG4gICAgLy8gaW5zdGFsbHMgdGhlIG1vZHVsZSBlaXRoZXIgd2F5OyBzaW5jZSAxLjE1IGl0IGp1c3Qgc3RvcHMgc2hvcnQgb2ZcbiAgICAvLyB3cml0aW5nIHRoZSBtb2R1bGUgbWFuaWZlc3Qgd2hlbiB2YWxpZGF0aW9uIGZhaWxzICh0ZXJyYWZvcm0jMzgyMTdcbiAgICAvLyBkcm9wcGVkIHRoZSBlcnJvci10by13YXJuaW5nIGRvd25ncmFkZSB0aGF0IGB0ZXJyYWZvcm0gZ2V0YCB1c2VkIHRvXG4gICAgLy8gYXBwbHkpLCB3aGljaCBpcyB3aGF0IHRoZSBzZWNvbmQgcnVuIGJlbG93IHJlc3RvcmVzLlxuICAgIGNvbnN0IGZldGNoRXJyb3IgPSBhd2FpdCB0cnlUZXJyYWZvcm1HZXQob3V0ZGlyKTtcblxuICAgIGNvbnN0IG1vZHVsZURpciA9IGZldGNoZWRNb2R1bGVEaXIoXG4gICAgICBvdXRkaXIsXG4gICAgICB0YXJnZXQubW9kdWxlS2V5LFxuICAgICAgc291cmNlLFxuICAgICAgbG9jYWxTb3VyY2UsXG4gICAgKTtcbiAgICBjb25zdCBhbGlhc2VzID0gZnMuZXhpc3RzU3luYyhtb2R1bGVEaXIpXG4gICAgICA/IGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMoYXdhaXQgY29udmVydEZpbGVzKG1vZHVsZURpcikpXG4gICAgICA6IFtdO1xuXG4gICAgaWYgKGFsaWFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnLCB0YXJnZXQubW9kdWxlS2V5LCBhbGlhc2VzKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG4gICAgICBhd2FpdCBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcImdldFwiXSwgeyBjd2Q6IG91dGRpciB9KTtcbiAgICB9IGVsc2UgaWYgKGZldGNoRXJyb3IpIHtcbiAgICAgIC8vIG5vdGhpbmcgaGVyZSB3YXMgc2FsdmFnZWFibGUgYWZ0ZXIgYWxsLCBzbyByZXBvcnQgdGhlIGRpYWdub3N0aWNzIHRoYXRcbiAgICAgIC8vIHdlcmUgaGVsZCBiYWNrIHdoaWxlIHRoZSBmZXRjaCBzdGlsbCBoYWQgYSBzZWNvbmQgY2hhbmNlXG4gICAgICBsb2dnZXIuZXJyb3IoKGZldGNoRXJyb3IgYXMgYW55KS5zdGRlcnIgfHwgU3RyaW5nKGZldGNoRXJyb3IpKTtcbiAgICAgIHRocm93IGZldGNoRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5tb2R1bGUpIHtcbiAgICAgIG1vZHVsZVNjaGVtYSA9IGF3YWl0IGhhcnZlc3RNb2R1bGVTY2hlbWEoXG4gICAgICAgIG91dGRpcixcbiAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnLm1vZHVsZSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1vZHVsZVNjaGVtYTtcbn1cbiJdfQ==
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3ZpZGVyLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4Q0Esc0RBT0M7QUFvQ0Qsd0RBeUJDO0FBOEtELGdEQXFEQztBQXNCRCw0REFpQ0M7QUFJRCx3REF1Q0M7QUFvRUQsb0VBb0NDO0FBZUQsZ0VBZ0NDO0FBUUQsc0NBV0M7QUFhRCw0Q0FtQ0M7QUF5QkQsNENBb0VDO0FBOXVCRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDZDQUErQjtBQUMvQiwyQ0FBNkI7QUFFN0IsOENBQStDO0FBQy9DLDRDQW1Cd0I7QUFDeEIscURBSTBCO0FBRTFCLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7QUFFN0UsSUFBSSx5QkFBbUUsQ0FBQztBQUV4RTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixxQkFBcUI7SUFDbkMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDL0IseUJBQXlCLEdBQUcsSUFBQSxjQUFJLEVBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtTQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLGtDQUF3QixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8seUJBQXlCLENBQUM7QUFDbkMsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxxRUFBcUU7QUFDckUsc0VBQXNFO0FBQ3RFLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsYUFBYTtJQUNiLGNBQWM7SUFDZCxzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixZQUFZO0lBQ1osWUFBWTtJQUNaLGlCQUFpQjtDQUNsQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSSxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLE9BQXdCLEVBQ3hCLFdBQVcsR0FBRyxDQUFDLEVBQ2YsV0FBVyxHQUFHLElBQUksRUFDbEIsaUJBQWlCLEdBQUcsQ0FBQzs7SUFFckIsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFBLGNBQUksRUFBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sTUFBTSxHQUFXLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sbUNBQUksRUFBRSxDQUFDO1lBQzNDLE1BQU0sU0FBUyxHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3pELENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQ2YsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLEdBQUcsaUJBQWlCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FDVCw2REFBNkQsT0FBTyxlQUFlLE9BQU8sSUFBSSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQ2pILENBQUM7WUFDRixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFXTSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQU8sRUFBRSxFQUFFO0lBQ25DLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUlqQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBVlcsUUFBQSxTQUFTLGFBVXBCO0FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBSSxJQUFhLEVBQUssRUFBRSxDQUM1QyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUV2QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsU0FBYyxFQUFFLEVBQUU7SUFDNUMsTUFBTSxNQUFNLEdBQVksRUFBRSxDQUFDO0lBRTNCLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFOUIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksWUFBb0IsQ0FBQztRQUV6QjtRQUNFLGlEQUFpRDtRQUNqRCxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUs7WUFDeEMsaURBQWlEO1lBQ2pELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxFQUMxQyxDQUFDO1lBQ0QsUUFBUSxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxLQUFLLFNBQVM7b0JBQ1osWUFBWSxHQUFHLE1BQU0sQ0FBQztvQkFDdEIsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsWUFBWSxHQUFHLFFBQVEsQ0FBQztvQkFDeEIsTUFBTTtnQkFDUjtvQkFDRSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUNFLE9BQU8sZUFBZSxLQUFLLFFBQVE7Z0JBQ25DLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDN0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUMvQixDQUFDO2dCQUNELFlBQVksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQVU7WUFDbEIsSUFBSTtZQUNKLElBQUksRUFBRSxZQUFZO1lBQ2xCLFdBQVcsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ3BDLGlEQUFpRDtZQUNqRCxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLO1NBQ3RELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtJQUN4QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFbEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUU1QyxNQUFNLElBQUksR0FBUTtnQkFDaEIsSUFBSTtnQkFDSixXQUFXLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQzthQUNuQyxDQUFDO1lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUMvQixnQkFBd0IsRUFDeEIsT0FBaUIsRUFDYSxFQUFFO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3hCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osU0FBUyxFQUNULGNBQWMsQ0FDZixDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztJQUV2QyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdURBQXVELFFBQVEsRUFBRSxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzVCLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUNwQixDQUFDO0lBRWpCLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksS0FBSyxDQUNiLHdEQUF3RCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQ2hFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQWlCO1lBQzNCLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3hDLElBQUksRUFBRSxHQUFHO1NBQ1YsQ0FBQztRQUVGLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLFNBQVMsV0FBVyxDQUFDLEtBQWU7SUFDbEMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0UsQ0FBQztBQW9CTSxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLE1BQXFDO0lBRXJDLE1BQU0sTUFBTSxHQUFvQjtRQUM5QixRQUFRLEVBQUUsRUFBRTtRQUNaLFNBQVMsRUFBRTtZQUNULGtCQUFrQixFQUFFLEVBQUU7U0FDdkI7S0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25DLE1BQU0sQ0FBQyxTQUFTLENBQUMsa0JBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHO1FBQ2xELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07S0FDdEIsQ0FBQztJQUVGLElBQUksY0FBYyxHQUFtQixFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUUvRCxNQUFNLElBQUEscUJBQVcsRUFBQyxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbkQsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFckQsTUFBTSxzQkFBc0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN6QixNQUFNLElBQUEsY0FBSSxFQUFDLG1CQUFtQixFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNoRSxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FDZSxDQUFDO1FBRXBCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzlCLE1BQU0sSUFBQSxjQUFJLEVBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDcEQsR0FBRyxFQUFFLE1BQU07U0FDWixDQUFDLENBQ2MsQ0FBQztRQUVuQixjQUFjLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBRUgsdUVBQXVFO0lBQ3ZFLHFFQUFxRTtJQUNyRSx1RUFBdUU7SUFDdkUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNuQyxjQUFjLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDM0MsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixnQkFBTSxDQUFDLEtBQUssQ0FDVixzRUFBc0UsS0FBSyxFQUFFLENBQzlFLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSSxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLE1BQXNCLEVBQ3RCLGNBQXdDO0lBRXhDLElBQUksQ0FBQyxjQUFjO1FBQUUsT0FBTztJQUU1QixJQUFJLEdBQXdCLENBQUM7SUFDN0IsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEUsT0FBTztRQUNULENBQUM7UUFDRCxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9ELENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxDQUFDO1lBQ0gsR0FBRyxHQUFHLE1BQU0scUJBQXFCLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGdCQUFNLENBQUMsS0FBSyxDQUNWLCtFQUErRSxLQUFLLEVBQUUsQ0FDdkYsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsK0NBQThCLEVBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFDLGdCQUFNLENBQUMsSUFBSSxDQUNULGdDQUFnQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLE1BQU0sV0FBVyxDQUN0RSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyw4Q0FBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNuRSw4Q0FBOEMsSUFBQSw2Q0FBNEIsRUFDekUsV0FBVyxDQUNaLEVBQUUsQ0FDSixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxzRUFBc0U7QUFDdEUsd0VBQXdFO0FBQ3hFLFNBQWdCLHNCQUFzQixDQUFDLE1BQXNCO0lBQzNELGtGQUFrRjtJQUNsRixnQ0FBZ0M7SUFDaEMsU0FBUyxvQkFBb0IsQ0FBQyxTQUFvQjtRQUNoRCxJQUFJLElBQUEsK0JBQXFCLEVBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLElBQUksR0FDUixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUNoQixDQUFDLENBQUUsU0FBUyxDQUFDLElBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLDhEQUE4RDtRQUU5RyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQXFCLENBQUM7UUFDdkMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixTQUFTLGFBQWEsQ0FBQyxLQUFZO1FBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDM0QsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNoRSxNQUFNLFFBQVEsR0FBRztZQUNmLFFBQVEsQ0FBQyxRQUFRO1lBQ2pCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQ2pELEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1lBQ3BELEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLElBQUksRUFBRSxDQUFDO1NBQzVELENBQUM7UUFFRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQW1CRCxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBRXhELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXVCLEVBQUUsRUFBRSxDQUN0RSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFOUMsOERBQThEO0FBQzlELDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0UseURBQXlEO0FBQ3pELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUM1QyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUU3RSxNQUFNLE9BQU8sR0FBRyxDQUFJLElBQWdDLEVBQU8sRUFBRTtJQUMzRCxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNuRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQVUsRUFBUyxFQUFFO0lBQzdDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUxQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM1RCxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQiw0QkFBNEIsQ0FDMUMsWUFBaUI7SUFFakIsTUFBTSxPQUFPLEdBQTBCLEVBQUUsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRS9CLEtBQUssTUFBTSxjQUFjLElBQUksZ0JBQWdCLENBQUMsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDdkUsS0FBSyxNQUFNLGlCQUFpQixJQUFJLGdCQUFnQixDQUM5QyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsa0JBQWtCLENBQ25DLEVBQUUsQ0FBQztZQUNGLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsV0FBa0IsQ0FBQyxDQUFDO2dCQUVuRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUscUJBQXFCLENBQUMsRUFBRSxDQUFDO29CQUM3RCxNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3BDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNuQyxDQUFDO29CQUNGLElBQUksQ0FBQyxLQUFLO3dCQUFFLFNBQVM7b0JBRXJCLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ25DLE1BQU0sVUFBVSxHQUF3Qjt3QkFDdEMsU0FBUzt3QkFDVCxLQUFLO3dCQUNMLE1BQU0sRUFBRSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsTUFBTTtxQkFDekIsQ0FBQztvQkFDRixNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3QkFBRSxTQUFTO29CQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUVkLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQ3hDLE1BQXVCLEVBQ3ZCLFNBQWlCLEVBQ2pCLE9BQThCOztJQUU5QixNQUFNLFVBQVUsR0FBRyxNQUFBLE1BQU0sQ0FBQyxNQUFNLDBDQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFdkQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDM0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUc7Z0JBQ3BDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0I7Z0JBQ3RDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7YUFDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBRXBDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxTQUFTLEdBQUc7WUFDckIsR0FBRyxVQUFVLENBQUMsU0FBUztZQUN2QixDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVM7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixhQUFhLENBQUMsTUFBYztJQUMxQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUMvQyxnQ0FBZ0MsRUFDaEMsRUFBRSxDQUNILENBQUM7SUFFRixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sTUFBTSxJQUFJLFNBQVMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixnQkFBd0IsRUFDeEIsU0FBaUIsRUFDakIsTUFBYyxFQUNkLHVCQUFnQztJQUVoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUM1QixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxjQUFjLENBQ2YsQ0FBQztJQUVGLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzVCLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUN4QixDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzVCLE9BQU8sdUJBQXVCLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxLQUFLLFVBQVUsZUFBZSxDQUFDLE1BQWM7SUFDM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFBLGNBQUksRUFDUixtQkFBbUIsRUFDbkIsQ0FBQyxLQUFLLENBQUMsRUFDUCxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEVBQ3ZDLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUNOLENBQUM7UUFDRixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLGdCQUFnQixDQUFDLE1BQW1DO0lBQ3hFLElBQUksWUFBWSxHQUFpQyxFQUFFLENBQUM7SUFFcEQsTUFBTSxJQUFBLHFCQUFXLEVBQUMsYUFBYSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFDLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUN2QyxJQUFJLE1BQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRW5DLE1BQU0sV0FBVyxHQUFJLE1BQU0sQ0FBQyxVQUF3QzthQUNqRSx1QkFBdUIsQ0FBQztRQUMzQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLHFEQUFxRDtZQUNyRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUQsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuRCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVyRCxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSwwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUsc0VBQXNFO1FBQ3RFLHVEQUF1RDtRQUN2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FDaEMsTUFBTSxFQUNOLE1BQU0sQ0FBQyxTQUFTLEVBQ2hCLE1BQU0sRUFDTixXQUFXLENBQ1osQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLElBQUEsdUJBQVksRUFBQyxTQUFTLENBQUMsQ0FBQztZQUM3RCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzlELE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sSUFBQSxjQUFJLEVBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUM7YUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLHlFQUF5RTtZQUN6RSwyREFBMkQ7WUFDM0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsVUFBa0IsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDL0QsTUFBTSxVQUFVLENBQUM7UUFDbkIsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFlBQVksR0FBRyxNQUFNLG1CQUFtQixDQUN0QyxNQUFNLEVBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQzNCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBjb252ZXJ0RmlsZXMgfSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVR5cGUsXG4gIEJsb2NrLFxuICBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICBJbnB1dCxcbiAgTW9kdWxlSW5kZXgsXG4gIE1vZHVsZVNjaGVtYSxcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybUNsaVZlcnNpb24sXG4gIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQsXG4gIFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLFxuICBWZXJzaW9uU2NoZW1hLFxuICBleGVjLFxuICBpc05lc3RlZFR5cGVBdHRyaWJ1dGUsXG4gIGxvZ2dlcixcbiAgcGFyc2VUZXJyYWZvcm1DbGlWZXJzaW9uLFxuICB3aXRoVGVtcERpcixcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBTQ0hFTUFfRU1JU1NJT05fRkFNSUxZX0xBQkVMUyxcbiAgY2hlY2tTY2hlbWFFbWlzc2lvbkdhcEZhbWlsaWVzLFxuICBzdWdnZXN0ZWRFbWl0dGluZ0NsaVZlcnNpb25zLFxufSBmcm9tIFwiLi9lbWlzc2lvbi1jaGVja1wiO1xuXG5jb25zdCB0ZXJyYWZvcm1CaW5hcnlOYW1lID0gcHJvY2Vzcy5lbnYuVEVSUkFGT1JNX0JJTkFSWV9OQU1FIHx8IFwidGVycmFmb3JtXCI7XG5cbmxldCBmZXRjaGluZ0NsaVZlcnNpb25Qcm9taXNlOiBQcm9taXNlPFRlcnJhZm9ybUNsaVZlcnNpb24+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHZlcnNpb24gb2YgdGhlIGZldGNoaW5nIENMSSAoYHRlcnJhZm9ybWAvYHRvZnVgIGJpbmFyeVxuICogcmVzb2x2ZWQgdmlhIGBURVJSQUZPUk1fQklOQVJZX05BTUVgKSBvbmNlIHBlciBwcm9jZXNzLCBtZW1vaXplZC5cbiAqXG4gKiBVc2VkIGJvdGggdG8gc3RhbXAgZmV0Y2hlZCBwcm92aWRlciBzY2hlbWFzIChgY2xpX25hbWVgL2BjbGlfdmVyc2lvbmApXG4gKiBhbmQgYXMgdGhlIGNhY2hlIGtleSBzdWZmaXggaW4gcmVhZC50cywgc2luY2Ugc2NoZW1hIGVtaXNzaW9uIGlzIGZpeGVkXG4gKiBwZXIgQ0xJIG1pbm9yIHZlcnNpb24uXG4gKlxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmcgbGlrZSB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGZXRjaGluZ0NsaVZlcnNpb24oKTogUHJvbWlzZTxUZXJyYWZvcm1DbGlWZXJzaW9uPiB7XG4gIGlmICghZmV0Y2hpbmdDbGlWZXJzaW9uUHJvbWlzZSkge1xuICAgIGZldGNoaW5nQ2xpVmVyc2lvblByb21pc2UgPSBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcInZlcnNpb25cIl0sIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KS50aGVuKHBhcnNlVGVycmFmb3JtQ2xpVmVyc2lvbik7XG4gIH1cbiAgcmV0dXJuIGZldGNoaW5nQ2xpVmVyc2lvblByb21pc2U7XG59XG5cbi8vIFByb3ZpZGVyIGJpbmFyaWVzIGFyZSBkb3dubG9hZGVkIGZyb20gR2l0SHViIHJlbGVhc2UgQ0ROcyBkdXJpbmdcbi8vIGB0ZXJyYWZvcm0gaW5pdGAsIHdoaWNoIGludGVybWl0dGVudGx5IHJldHVybnMgNXh4LiBSZXRyeSBvbiB0aG9zZVxuLy8gc2lnbmF0dXJlcyBvbmx5IOKAlCByZWFsIGNvbmZpZy9zY2hlbWEgZXJyb3JzIHNob3VsZCBzdGlsbCBmYWlsIGZhc3QuXG5jb25zdCBUUkFOU0lFTlRfSU5JVF9FUlJPUl9QQVRURVJOUyA9IFtcbiAgL1xcYjUwWzIzNF1cXGIvLFxuICAvQmFkIEdhdGV3YXkvaSxcbiAgL1NlcnZpY2UgVW5hdmFpbGFibGUvaSxcbiAgL0dhdGV3YXkgVGltZW91dC9pLFxuICAvRUNPTk5SRVNFVC9pLFxuICAvRVRJTUVET1VUL2ksXG4gIC9FQUlfQUdBSU4vaSxcbiAgL3VuZXhwZWN0ZWQgRU9GL2ksXG5dO1xuXG4vKipcbiAqIFJ1bnMgYHRlcnJhZm9ybSBpbml0YCBhbmQgcmV0cmllcyBvbiB0cmFuc2llbnQgSFRUUC9uZXR3b3JrIGZhaWx1cmVzLlxuICpcbiAqIFByb3ZpZGVyIGJpbmFyaWVzIGFyZSBwdWxsZWQgZnJvbSBHaXRIdWIncyByZWxlYXNlIENETiwgd2hpY2hcbiAqIGludGVybWl0dGVudGx5IHJldHVybnMgNXh4LiBUaGUgcmV0cnkgb25seSBmaXJlcyB3aGVuIHN0ZGVyciBtYXRjaGVzIGFcbiAqIGtub3duIHRyYW5zaWVudCBwYXR0ZXJuIOKAlCByZWFsIGVycm9ycyAoYmFkIHZlcnNpb24sIHNjaGVtYSBwYXJzZSwgZXRjLilcbiAqIHN0aWxsIGZhaWwgb24gdGhlIGZpcnN0IGF0dGVtcHQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBzcGF3biBvcHRpb25zIGZvcndhcmRlZCB0byBgZXhlY2AgKGBjd2RgIGlzIHJlcXVpcmVkIHNvXG4gKiAgIGB0ZXJyYWZvcm0gaW5pdGAgcnVucyBpbnNpZGUgdGhlIHRlbXAgZGlyIGhvbGRpbmcgYG1haW4udGYuanNvbmApXG4gKiBAcGFyYW0gbWF4QXR0ZW1wdHMgLSB0b3RhbCBhdHRlbXB0cyBpbmNsdWRpbmcgdGhlIGluaXRpYWwgY2FsbDsgdGhlIG51bWJlclxuICogICBvZiByZXRyaWVzIGlzIGBtYXhBdHRlbXB0cyAtIDFgLiBEZWZhdWx0cyB0byA1ICgxIGluaXRpYWwgKyA0IHJldHJpZXMpXG4gKiBAcGFyYW0gYmFzZURlbGF5TXMgLSBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IHJldHJ5LiBUZXN0cyBwYXNzIGAwYCB0byBza2lwXG4gKiAgIHdhaXRzLiBEZWZhdWx0cyB0byA1MDAwbXNcbiAqIEBwYXJhbSBiYWNrb2ZmTXVsdGlwbGllciAtIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBkZWxheSBvbiBlYWNoIHN1YnNlcXVlbnRcbiAqICAgcmV0cnkgKHNvIHJldHJpZXMgd2FpdCBgYmFzZURlbGF5TXMgKiBtdWx0aXBsaWVyXihhdHRlbXB0LTEpYCkuIERlZmF1bHRzXG4gKiAgIHRvIDIgKDFzIOKGkiAycyDihpIgNHMg4oCmKVxuICogQHJldHVybnMgc3Rkb3V0IGZyb20gdGhlIHN1Y2Nlc3NmdWwgYHRlcnJhZm9ybSBpbml0YCBpbnZvY2F0aW9uXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVycmFmb3JtSW5pdFdpdGhSZXRyeShcbiAgb3B0aW9uczogeyBjd2Q6IHN0cmluZyB9LFxuICBtYXhBdHRlbXB0cyA9IDUsXG4gIGJhc2VEZWxheU1zID0gNTAwMCxcbiAgYmFja29mZk11bHRpcGxpZXIgPSAyLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJpbml0XCJdLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCBzdGRlcnI6IHN0cmluZyA9IGVycm9yPy5zdGRlcnIgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHRyYW5zaWVudCA9IFRSQU5TSUVOVF9JTklUX0VSUk9SX1BBVFRFUk5TLnNvbWUoKHApID0+XG4gICAgICAgIHAudGVzdChzdGRlcnIpLFxuICAgICAgKTtcbiAgICAgIGlmICghdHJhbnNpZW50IHx8IGF0dGVtcHQgPT09IG1heEF0dGVtcHRzKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsYXlNcyA9IGJhc2VEZWxheU1zICogYmFja29mZk11bHRpcGxpZXIgKiogKGF0dGVtcHQgLSAxKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgdGVycmFmb3JtIGluaXQgZmFpbGVkIHdpdGggYSB0cmFuc2llbnQgZXJyb3IsIHJldHJ5aW5nIGluICR7ZGVsYXlNc31tcyAoYXR0ZW1wdCAke2F0dGVtcHR9LyR7bWF4QXR0ZW1wdHMgLSAxfSlgLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5TXMpKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwidW5yZWFjaGFibGVcIik7XG59XG5cbi8qKlxuICogRnVsbHkgUXVhbGlmaWVkIHByb3ZpZGVyIG5hbWUgaW4gdGhlIGZvcm1hdDpcbiAqIGxpa2UgZS5nLiByZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1xuICovXG5leHBvcnQgdHlwZSBGUVBOID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiRnVsbHlRdWFsaWZpZWRQcm92aWRlck5hbWVcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJIb3N0bmFtZSA9IHN0cmluZyAmIHsgX190eXBlOiBcIlByb3ZpZGVySG9zdG5hbWVcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJOYW1lc3BhY2UgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlck5hbWVzcGFjZVwiIH07XG5leHBvcnQgdHlwZSBQcm92aWRlck5hbWUgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlck5hbWVcIiB9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VGUVBOID0gKGY6IEZRUE4pID0+IHtcbiAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWVdID0gZi5zcGxpdChcIi9cIik7XG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgaGFuZGxlICR7Zn1gKTtcbiAgfVxuICByZXR1cm4geyBob3N0bmFtZSwgbmFtZXNwYWNlLCBuYW1lIH0gYXMge1xuICAgIGhvc3RuYW1lOiBQcm92aWRlckhvc3RuYW1lO1xuICAgIG5hbWVzcGFjZTogUHJvdmlkZXJOYW1lc3BhY2U7XG4gICAgbmFtZTogUHJvdmlkZXJOYW1lO1xuICB9O1xufTtcblxuY29uc3QgdW53cmFwSWZBcnJheSA9IDxUPihpdGVtOiBUIHwgVFtdKTogVCA9PlxuICBBcnJheS5pc0FycmF5KGl0ZW0pID8gaXRlbVswXSA6IGl0ZW07XG5cbmNvbnN0IHRyYW5zZm9ybVZhcmlhYmxlcyA9ICh2YXJpYWJsZXM6IGFueSkgPT4ge1xuICBjb25zdCByZXN1bHQ6IElucHV0W10gPSBbXTtcblxuICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuIHJlc3VsdDtcblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModmFyaWFibGVzKSkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdW53cmFwSWZBcnJheSh2YXJpYWJsZXNbbmFtZV0pO1xuICAgIGxldCB2YXJpYWJsZVR5cGU6IHN0cmluZztcblxuICAgIGlmIChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhcmlhYmxlLmhhc093blByb3BlcnR5KFwidHlwZVwiKSA9PSBmYWxzZSAmJlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgdmFyaWFibGUuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpID09IHRydWVcbiAgICApIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhcmlhYmxlW1wiZGVmYXVsdFwiXSkge1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgIHZhcmlhYmxlVHlwZSA9IFwiYm9vbFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgdmFyaWFibGVUeXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSBcImFueVwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByYXdWYXJpYWJsZVR5cGUgPSB2YXJpYWJsZVtcInR5cGVcIl07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByYXdWYXJpYWJsZVR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgcmF3VmFyaWFibGVUeXBlLnN0YXJ0c1dpdGgoXCIke1wiKSAmJlxuICAgICAgICByYXdWYXJpYWJsZVR5cGUuZW5kc1dpdGgoXCJ9XCIpICYmXG4gICAgICAgICFyYXdWYXJpYWJsZVR5cGUuaW5jbHVkZXMoXCJcXG5cIilcbiAgICAgICkge1xuICAgICAgICB2YXJpYWJsZVR5cGUgPSByYXdWYXJpYWJsZVR5cGUuc2xpY2UoMiwgLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyaWFibGVUeXBlID0gXCJhbnlcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpdGVtOiBJbnB1dCA9IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB2YXJpYWJsZVR5cGUsXG4gICAgICBkZXNjcmlwdGlvbjogdmFyaWFibGVbXCJkZXNjcmlwdGlvblwiXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHJlcXVpcmVkOiB2YXJpYWJsZS5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIikgPT0gZmFsc2UsXG4gICAgfTtcblxuICAgIGlmICghaXRlbS5yZXF1aXJlZCkge1xuICAgICAgaXRlbVtcImRlZmF1bHRcIl0gPSB2YXJpYWJsZVtcImRlZmF1bHRcIl07XG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdHJhbnNmb3JtT3V0cHV0cyA9IChvdXRwdXRzOiBhbnkpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKG91dHB1dHMpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMob3V0cHV0cykpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHVud3JhcElmQXJyYXkob3V0cHV0c1tuYW1lXSk7XG5cbiAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG91dHB1dFtcImRlc2NyaXB0aW9uXCJdLFxuICAgICAgfTtcblxuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGhhcnZlc3RNb2R1bGVTY2hlbWEgPSBhc3luYyAoXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgbW9kdWxlczogc3RyaW5nW10sXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+ID0+IHtcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4oXG4gICAgd29ya2luZ0RpcmVjdG9yeSxcbiAgICBcIi50ZXJyYWZvcm1cIixcbiAgICBcIm1vZHVsZXNcIixcbiAgICBcIm1vZHVsZXMuanNvblwiLFxuICApO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1vZHVsZXMgd2VyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IC0gY291bGRuJ3QgZmluZCAke2ZpbGVOYW1lfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZUluZGV4ID0gSlNPTi5wYXJzZShcbiAgICBmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIFwidXRmLThcIiksXG4gICkgYXMgTW9kdWxlSW5kZXg7XG5cbiAgZm9yIChjb25zdCBtb2Qgb2YgbW9kdWxlcykge1xuICAgIGNvbnN0IG0gPSBtb2R1bGVJbmRleC5Nb2R1bGVzLmZpbmQoKG90aGVyKSA9PiBtb2QgPT09IG90aGVyLktleSk7XG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCAke219YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgY29udmVydEZpbGVzKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LCBtLkRpcikpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZHVsZXMgd2VyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IC0gY291bGRuJ3QgcGFyc2UgJHttLkRpcn1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWE6IE1vZHVsZVNjaGVtYSA9IHtcbiAgICAgIGlucHV0czogdHJhbnNmb3JtVmFyaWFibGVzKHBhcnNlZC52YXJpYWJsZSksXG4gICAgICBvdXRwdXRzOiB0cmFuc2Zvcm1PdXRwdXRzKHBhcnNlZC5vdXRwdXQpLFxuICAgICAgbmFtZTogbW9kLFxuICAgIH07XG5cbiAgICByZXN1bHRbbW9kXSA9IHNjaGVtYTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5mdW5jdGlvbiBqb2luV2l0aEFuZChpdGVtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAoaXRlbXMubGVuZ3RoIDw9IDEpIHJldHVybiBpdGVtcy5qb2luKFwiXCIpO1xuICByZXR1cm4gYCR7aXRlbXMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKX0gYW5kICR7aXRlbXNbaXRlbXMubGVuZ3RoIC0gMV19YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1Db25maWcge1xuICAvLyBhIGxpc3QgaG9sZHMgc2V2ZXJhbCBjb25maWd1cmF0aW9ucyBvZiB0aGUgc2FtZSBwcm92aWRlciwgd2hpY2ggaXMgaG93XG4gIC8vIGFsaWFzZWQgcHJvdmlkZXIgYmxvY2tzIGFyZSBleHByZXNzZWQgaW4gSlNPTiBzeW50YXhcbiAgcHJvdmlkZXI/OiB7IFtuYW1lOiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgUmVjb3JkPHN0cmluZywgYW55PltdIH07XG4gIHRlcnJhZm9ybToge1xuICAgIHJlcXVpcmVkX3Byb3ZpZGVycz86IHtcbiAgICAgIFtuYW1lOiBzdHJpbmddOiB7IHNvdXJjZT86IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9O1xuICAgIH07XG4gIH07XG4gIG1vZHVsZT86IHtcbiAgICBbbmFtZTogc3RyaW5nXToge1xuICAgICAgc291cmNlOiBzdHJpbmc7XG4gICAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgICAgcHJvdmlkZXJzPzogeyBbbG9jYWxOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFByb3ZpZGVyU2NoZW1hKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuKSB7XG4gIGNvbnN0IGNvbmZpZzogVGVycmFmb3JtQ29uZmlnID0ge1xuICAgIHByb3ZpZGVyOiB7fSxcbiAgICB0ZXJyYWZvcm06IHtcbiAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge30sXG4gICAgfSxcbiAgfTtcblxuICBjb25maWcucHJvdmlkZXIhW3RhcmdldC5uYW1lXSA9IHt9O1xuICBjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyFbdGFyZ2V0Lm5hbWVdID0ge1xuICAgIHZlcnNpb246IHRhcmdldC52ZXJzaW9uLFxuICAgIHNvdXJjZTogdGFyZ2V0LnNvdXJjZSxcbiAgfTtcblxuICBsZXQgcHJvdmlkZXJTY2hlbWE6IFByb3ZpZGVyU2NoZW1hID0geyBmb3JtYXRfdmVyc2lvbjogXCIwLjFcIiB9O1xuXG4gIGF3YWl0IHdpdGhUZW1wRGlyKFwiZmV0Y2hQcm92aWRlclNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIFwibWFpbi50Zi5qc29uXCIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG5cbiAgICBhd2FpdCB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBvdXRkaXIgfSk7XG4gICAgcHJvdmlkZXJTY2hlbWEgPSBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJwcm92aWRlcnNcIiwgXCJzY2hlbWFcIiwgXCItanNvblwiXSwge1xuICAgICAgICBjd2Q6IG91dGRpcixcbiAgICAgIH0pLFxuICAgICkgYXMgUHJvdmlkZXJTY2hlbWE7XG5cbiAgICBjb25zdCB2ZXJzaW9uU2NoZW1hID0gSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1widmVyc2lvblwiLCBcIi1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogb3V0ZGlyLFxuICAgICAgfSksXG4gICAgKSBhcyBWZXJzaW9uU2NoZW1hO1xuXG4gICAgcHJvdmlkZXJTY2hlbWEucHJvdmlkZXJfdmVyc2lvbnMgPSB2ZXJzaW9uU2NoZW1hLnByb3ZpZGVyX3NlbGVjdGlvbnM7XG4gIH0pO1xuXG4gIC8vIFN0YW1wIHRoZSBmZXRjaGluZyBDTEkncyBpZGVudGl0eSBzbyBkb3duc3RyZWFtIGNvbnN1bWVycyBjYW4gcmVhc29uXG4gIC8vIGFib3V0IHdoaWNoIG5ld2VyLXByb3RvY29sIHNlY3Rpb25zIHRoaXMgZmV0Y2ggY291bGQgcG9zc2libHkgaGF2ZVxuICAvLyBlbWl0dGVkLiBOZXZlciBmYWlsIHRoZSBmZXRjaCBvdmVyIHRoaXMgLSBpdCdzIGJlc3QtZWZmb3J0IG1ldGFkYXRhLlxuICB0cnkge1xuICAgIGNvbnN0IGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIHByb3ZpZGVyU2NoZW1hLmNsaV9uYW1lID0gY2xpLm5hbWU7XG4gICAgcHJvdmlkZXJTY2hlbWEuY2xpX3ZlcnNpb24gPSBjbGkudmVyc2lvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ291bGQgbm90IGRldGVybWluZSBmZXRjaGluZyBDTEkgdmVyc2lvbiB0byBzdGFtcCBwcm92aWRlciBzY2hlbWE6ICR7ZXJyb3J9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplUHJvdmlkZXJTY2hlbWEocHJvdmlkZXJTY2hlbWEpO1xufVxuXG4vKipcbiAqIFdhcm5zIHdoZW4gdGhlIENMSSB0aGF0IHByb2R1Y2VkIGEgZ2l2ZW4gcHJvdmlkZXIgc2NoZW1hIHByZWRhdGVzIG9uZSBvclxuICogbW9yZSBzY2hlbWEtZW1pc3Npb24gYm91bmRhcmllcyB0aGUgcHJvamVjdCdzIGRlY2xhcmVkIGB0YXJnZXRWZXJzaW9uc2BcbiAqIGNhcmUgYWJvdXQgKHNlZSBlbWlzc2lvbi1jaGVjay50cykgLSBpLmUuIHNvbWUgbmV3ZXItcHJvdG9jb2wgc2VjdGlvbnNcbiAqIChmdW5jdGlvbnMsIGVwaGVtZXJhbCByZXNvdXJjZXMsIC4uLikgbWF5IGJlIG1pc3NpbmcgZnJvbSB0aGUgZ2VuZXJhdGVkXG4gKiBiaW5kaW5ncyBldmVuIHRob3VnaCB0aGUgc2NoZW1hIGZldGNoIGl0c2VsZiBzdWNjZWVkZWQuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGRlY291cGxlZCBmcm9tIHRoZSBmZXRjaCBwYXRoIChyZWFkUHJvdmlkZXJTY2hlbWEpIHNvIGl0XG4gKiBhbHNvIHJ1bnMgZm9yIHNjaGVtYXMgc2VydmVkIGZyb20gdGhlIG9uLWRpc2sgY2FjaGU6IGNhY2hlZCBKU09OIGNhcnJpZXNcbiAqIHRoZSBzYW1lIGBjbGlfbmFtZWAvYGNsaV92ZXJzaW9uYCBzdGFtcHMgYSBmcmVzaCBmZXRjaCB3b3VsZCBoYXZlXG4gKiB3cml0dGVuICh0aGUgY2FjaGUga2V5IGFscmVhZHkgc2VnbWVudHMgYnkgQ0xJIHByb2R1Y3QrbWlub3IpLCBzbyB0aGUgZ2FwXG4gKiBjaGVjayBpcyBqdXN0IGFzIG1lYW5pbmdmdWwgb24gYSBjYWNoZSBoaXQgYXMgb24gYSBtaXNzLlxuICpcbiAqIE5vLW9wIHdpdGhvdXQgYHRhcmdldFZlcnNpb25zYCAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGFyZSB0aGUgQ0xJXG4gKiBhZ2FpbnN0LiBGYWxscyBiYWNrIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MncyBmZXRjaGluZyBDTEkgdmVyc2lvbiB3aGVuXG4gKiB0aGUgc2NoZW1hIGl0c2VsZiBpc24ndCBzdGFtcGVkIChlLmcuIG9sZGVyIGNhY2hlIGVudHJpZXMgd3JpdHRlbiBiZWZvcmVcbiAqIHN0YW1waW5nIGV4aXN0ZWQpLlxuICpcbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YXJuSWZTY2hlbWFFbWlzc2lvbkdhcHMoXG4gIHNjaGVtYTogUHJvdmlkZXJTY2hlbWEsXG4gIHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF0YXJnZXRWZXJzaW9ucykgcmV0dXJuO1xuXG4gIGxldCBjbGk6IFRlcnJhZm9ybUNsaVZlcnNpb247XG4gIGlmIChzY2hlbWEuY2xpX25hbWUgJiYgc2NoZW1hLmNsaV92ZXJzaW9uKSB7XG4gICAgaWYgKHNjaGVtYS5jbGlfbmFtZSAhPT0gXCJ0ZXJyYWZvcm1cIiAmJiBzY2hlbWEuY2xpX25hbWUgIT09IFwib3BlbnRvZnVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGkgPSB7IG5hbWU6IHNjaGVtYS5jbGlfbmFtZSwgdmVyc2lvbjogc2NoZW1hLmNsaV92ZXJzaW9uIH07XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGZldGNoaW5nIENMSSB2ZXJzaW9uIHRvIGNoZWNrIGZvciBzY2hlbWEgZW1pc3Npb24gZ2FwczogJHtlcnJvcn1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXBGYW1pbGllcyA9IGNoZWNrU2NoZW1hRW1pc3Npb25HYXBGYW1pbGllcyhjbGksIHRhcmdldFZlcnNpb25zKTtcbiAgaWYgKGdhcEZhbWlsaWVzLmxlbmd0aCA+IDAgJiYgY2xpLnZlcnNpb24pIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBwcm92aWRlciBzY2hlbWEgZmV0Y2hlZCB3aXRoICR7Y2xpLm5hbWV9ICR7Y2xpLnZlcnNpb259IOKAlCAke2pvaW5XaXRoQW5kKFxuICAgICAgICBnYXBGYW1pbGllcy5tYXAoKGZhbWlseSkgPT4gU0NIRU1BX0VNSVNTSU9OX0ZBTUlMWV9MQUJFTFNbZmFtaWx5XSksXG4gICAgICApfSB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQ7IHJ1biBjZGt0biBnZXQgd2l0aCAke3N1Z2dlc3RlZEVtaXR0aW5nQ2xpVmVyc2lvbnMoXG4gICAgICAgIGdhcEZhbWlsaWVzLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gVGhlIHByb3ZpZGVycyBoYXZlIHNvbWUgcG90ZW50aWFsIGJ1Z3MgdGhhdCB3ZSB3YW50IHRvIHByby1hY3RpdmVseVxuLy8gZml4IGhlcmUgc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUgY29kZSBjYW4gYXNzdW1lIGEgY29uc2lzdGVudCBzY2hlbWEuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVQcm92aWRlclNjaGVtYShzY2hlbWE6IFByb3ZpZGVyU2NoZW1hKTogUHJvdmlkZXJTY2hlbWEge1xuICAvLyBNYWlubHkgc29tZSBhdHRyaWJ1dGVzIGFyZSBcImRvdWJsZWRcIiwgZS5nLiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXVxuICAvLyBpbnN0ZWFkIG9mIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1cbiAgZnVuY3Rpb24gYXR0cmlidXRlRG91YmxpbmdGaXgoYXR0cmlidXRlOiBBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUge1xuICAgIGlmIChpc05lc3RlZFR5cGVBdHRyaWJ1dGUoYXR0cmlidXRlKSB8fCAhQXJyYXkuaXNBcnJheShhdHRyaWJ1dGUudHlwZSkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9XG4gICAgICBhdHRyaWJ1dGUudHlwZS5sZW5ndGggPT09IDJcbiAgICAgICAgPyBhdHRyaWJ1dGUudHlwZVxuICAgICAgICA6IChhdHRyaWJ1dGUudHlwZSBhcyBzdHJpbmdbXSkuc2xpY2UoMCwgMik7IC8vIFRoZSB0eXBlcyB0ZWxsIHVzIHRoaXMgY2FuJ3QgaGFwcGVuLCByZWFsaXR5IGJlZ3MgdG8gZGlmZmVyXG5cbiAgICBhdHRyaWJ1dGUudHlwZSA9IHR5cGUgYXMgQXR0cmlidXRlVHlwZTtcbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG5cbiAgLy8gTXV0YXRlcyBibG9jayB3aXRoIHRoZSBmaXhcbiAgZnVuY3Rpb24gc2FuaXRpemVCbG9jayhibG9jazogQmxvY2spIHtcbiAgICBPYmplY3QudmFsdWVzKGJsb2NrLmF0dHJpYnV0ZXMgfHwge30pLmZvckVhY2goYXR0cmlidXRlRG91YmxpbmdGaXgpO1xuICAgIE9iamVjdC52YWx1ZXMoYmxvY2suYmxvY2tfdHlwZXMgfHwge30pLmZvckVhY2goKGJsb2NrVHlwZSkgPT4ge1xuICAgICAgc2FuaXRpemVCbG9jayhibG9ja1R5cGUuYmxvY2spO1xuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LnZhbHVlcyhzY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkuZm9yRWFjaCgocHJvdmlkZXIpID0+IHtcbiAgICBjb25zdCBlbnRpdGllcyA9IFtcbiAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhwcm92aWRlci5yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSksXG4gICAgICAuLi5PYmplY3QudmFsdWVzKHByb3ZpZGVyLmVwaGVtZXJhbF9yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICBdO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBzYW5pdGl6ZUJsb2NrKGVudGl0eS5ibG9jayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbi8qKlxuICogQSBwcm92aWRlciBjb25maWd1cmF0aW9uIHRoYXQgYSBtb2R1bGUgZXhwZWN0cyB0byBiZSBoYW5kZWQgYnkgaXRzIGNhbGxlcixcbiAqIGRlY2xhcmVkIGFzIGBjb25maWd1cmF0aW9uX2FsaWFzZXNgIGluIHRoZSBtb2R1bGUncyBgcmVxdWlyZWRfcHJvdmlkZXJzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVQcm92aWRlckFsaWFzIHtcbiAgLyoqIGxvY2FsIG5hbWUgdGhlIG1vZHVsZSBrbm93cyB0aGUgcHJvdmlkZXIgYnksIGUuZy4gYGF3c2AgKi9cbiAgbG9jYWxOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBhbGlhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2UsIGUuZy4gYGdsb2JhbF9yZWdpb25gOyBhYnNlbnQgd2hlbiB0aGUgbW9kdWxlXG4gICAqIGxpc3RzIHRoZSBiYXJlIGxvY2FsIG5hbWUgKGBjb25maWd1cmF0aW9uX2FsaWFzZXMgPSBbYXdzXWApLCB3aGljaFxuICAgKiByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIHBhc3MgaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiBleHBsaWNpdGx5XG4gICAqL1xuICBhbGlhcz86IHN0cmluZztcbiAgLyoqIHByb3ZpZGVyIHNvdXJjZSB0aGUgbW9kdWxlIGRlY2xhcmVkIGZvciBgbG9jYWxOYW1lYCwgaWYgaXQgZGVjbGFyZWQgb25lICovXG4gIHNvdXJjZT86IHN0cmluZztcbn1cblxuY29uc3QgQ09ORklHVVJBVElPTl9BTElBUyA9IC9eKFtcXHctXSspKD86XFwuKFtcXHctXSspKT8kLztcblxuY29uc3QgcHJvdmlkZXJSZWZlcmVuY2UgPSAoeyBsb2NhbE5hbWUsIGFsaWFzIH06IE1vZHVsZVByb3ZpZGVyQWxpYXMpID0+XG4gIGFsaWFzID8gYCR7bG9jYWxOYW1lfS4ke2FsaWFzfWAgOiBsb2NhbE5hbWU7XG5cbi8vIGhjbDJqc29uIGhhbmRzIEhDTCBleHByZXNzaW9ucyBiYWNrIGFzIGludGVycG9sYXRpb25zLCBzbyBhXG4vLyBgY29uZmlndXJhdGlvbl9hbGlhc2VzID0gW2F3cy5nbG9iYWxfcmVnaW9uXWAgZW50cnkgYXJyaXZlcyBhcyB0aGUgc3RyaW5nXG4vLyBcIiR7YXdzLmdsb2JhbF9yZWdpb259XCIuIEEgLnRmLmpzb24gbW9kdWxlIHdyaXRlcyB0aGUgc2FtZSByZWZlcmVuY2UgYXMgYVxuLy8gcGxhaW4gc3RyaW5nLCB3aGljaCBoY2wyanNvbiBwYXNzZXMgdGhyb3VnaCB1bnRvdWNoZWQuXG5jb25zdCB1bndyYXBJbnRlcnBvbGF0aW9uID0gKHZhbHVlOiBzdHJpbmcpID0+XG4gIHZhbHVlLnN0YXJ0c1dpdGgoXCIke1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIn1cIikgPyB2YWx1ZS5zbGljZSgyLCAtMSkgOiB2YWx1ZTtcblxuY29uc3QgdG9BcnJheSA9IDxUPihpdGVtOiBUIHwgVFtdIHwgdW5kZWZpbmVkIHwgbnVsbCk6IFRbXSA9PiB7XG4gIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbaXRlbV07XG59O1xuXG4vKipcbiAqIEV2ZXJ5IG9jY3VycmVuY2Ugb2YgYSBibG9jayB0aGF0IGhjbDJqc29uIHByb2R1Y2VkIHVuZGVyIG9uZSBrZXkuXG4gKlxuICogSENMIGJsb2NrcyBjb21lIGJhY2sgYXMgYW4gYXJyYXkgd2l0aCBhbiBlbnRyeSBwZXIgb2NjdXJyZW5jZSwgYSAudGYuanNvblxuICogYmxvY2sgYXMgYSBwbGFpbiBvYmplY3QuIEEgbW9kdWxlIG1peGluZyBib3RoIHN5bnRheGVzIGdldHMgYSB0aGlyZCBzaGFwZTpcbiAqIGhjbDJqc29uIG1lcmdlcyB0aGUgSlNPTiBmaWxlIGludG8gdGhlIHBhcnNlZCBIQ0wsIGFuZCBpdHMgZGVlcE1lcmdlXG4gKiByZWN1cnNlcyBpbnRvIHRoZSBIQ0wgYXJyYXkgaW5zdGVhZCBvZiBhcHBlbmRpbmcgdG8gaXQsIGxlYXZpbmcgdGhlIEpTT05cbiAqIGNvbnRyaWJ1dGlvbiBoYW5naW5nIG9mZiB0aGUgYXJyYXkgYXMgbmFtZWQgcHJvcGVydGllcy4gVGhvc2UgcHJvcGVydGllc1xuICogYXJlIGFuIG9jY3VycmVuY2Ugb2YgdGhlaXIgb3duIC0gYW5kIG9uZSB0aGF0IG5laXRoZXIgaXRlcmF0aW5nIHRoZSBhcnJheVxuICogbm9yIEpTT04uc3RyaW5naWZ5IHdvdWxkIGV2ZXIgc2hvdy5cbiAqL1xuY29uc3QgYmxvY2tPY2N1cnJlbmNlcyA9IChibG9jazogYW55KTogYW55W10gPT4ge1xuICBpZiAoYmxvY2sgPT09IHVuZGVmaW5lZCB8fCBibG9jayA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYmxvY2spKSByZXR1cm4gW2Jsb2NrXTtcblxuICBjb25zdCBtZXJnZWQgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoYmxvY2spLmZpbHRlcigoW2tleV0pID0+ICEvXlxcZCskLy50ZXN0KGtleSkpLFxuICApO1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLmxlbmd0aCA+IDAgPyBbLi4uYmxvY2ssIG1lcmdlZF0gOiBbLi4uYmxvY2tdO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgcHJvdmlkZXIgY29uZmlndXJhdGlvbnMgYSBtb2R1bGUgcmVxdWlyZXMgaXRzIGNhbGxlciB0byBwYXNzXG4gKiBpbiwgZnJvbSB0aGUgaGNsMmpzb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZHVsZSdzIGRpcmVjdG9yeS5cbiAqXG4gKiBBIG1vZHVsZSBtYXkgZGVjbGFyZSBgcmVxdWlyZWRfcHJvdmlkZXJzYCBpbiBtb3JlIHRoYW4gb25lIGB0ZXJyYWZvcm1gXG4gKiBibG9jaywgYW5kIG1heSBzcHJlYWQgdGhlbSBhY3Jvc3MgLnRmIGFuZCAudGYuanNvbiBmaWxlczsgZXZlcnkgb2NjdXJyZW5jZVxuICogaGNsMmpzb24gcmVwb3J0cyBpcyBjb25zaWRlcmVkIChzZWUge0BsaW5rIGJsb2NrT2NjdXJyZW5jZXN9KS5cbiAqXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhcbiAgcGFyc2VkTW9kdWxlOiBhbnksXG4pOiBNb2R1bGVQcm92aWRlckFsaWFzW10ge1xuICBjb25zdCBhbGlhc2VzOiBNb2R1bGVQcm92aWRlckFsaWFzW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgdGVycmFmb3JtQmxvY2sgb2YgYmxvY2tPY2N1cnJlbmNlcyhwYXJzZWRNb2R1bGU/LnRlcnJhZm9ybSkpIHtcbiAgICBmb3IgKGNvbnN0IHJlcXVpcmVkUHJvdmlkZXJzIG9mIGJsb2NrT2NjdXJyZW5jZXMoXG4gICAgICB0ZXJyYWZvcm1CbG9jaz8ucmVxdWlyZWRfcHJvdmlkZXJzLFxuICAgICkpIHtcbiAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgT2JqZWN0LnZhbHVlcyhyZXF1aXJlZFByb3ZpZGVycyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB1bndyYXBJZkFycmF5KGRlY2xhcmF0aW9uIGFzIGFueSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0b0FycmF5KHByb3ZpZGVyPy5jb25maWd1cmF0aW9uX2FsaWFzZXMpKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBDT05GSUdVUkFUSU9OX0FMSUFTLmV4ZWMoXG4gICAgICAgICAgICB1bndyYXBJbnRlcnBvbGF0aW9uKFN0cmluZyhlbnRyeSkpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFtYXRjaCkgY29udGludWU7XG5cbiAgICAgICAgICBjb25zdCBbLCBsb2NhbE5hbWUsIGFsaWFzXSA9IG1hdGNoO1xuICAgICAgICAgIGNvbnN0IGVudHJ5QWxpYXM6IE1vZHVsZVByb3ZpZGVyQWxpYXMgPSB7XG4gICAgICAgICAgICBsb2NhbE5hbWUsXG4gICAgICAgICAgICBhbGlhcyxcbiAgICAgICAgICAgIHNvdXJjZTogcHJvdmlkZXI/LnNvdXJjZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGtleSA9IHByb3ZpZGVyUmVmZXJlbmNlKGVudHJ5QWxpYXMpO1xuICAgICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICBzZWVuLmFkZChrZXkpO1xuXG4gICAgICAgICAgYWxpYXNlcy5wdXNoKGVudHJ5QWxpYXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFsaWFzZXM7XG59XG5cbi8qKlxuICogRGVjbGFyZXMgdGhlIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgYGFsaWFzZXNgIG5hbWVzIG9uIHRoZSBzeW50aGV0aWNcbiAqIHJvb3QgY29uZmlnIGFuZCBwYXNzZXMgdGhlbSBpbnRvIHRoZSBtb2R1bGUgY2FsbCwgd2hpY2ggaXMgd2hhdCBUZXJyYWZvcm1cbiAqIGRlbWFuZHMgb2YgYW55b25lIGNhbGxpbmcgYSBtb2R1bGUgd2l0aCBgY29uZmlndXJhdGlvbl9hbGlhc2VzYC5cbiAqXG4gKiBUaGUgcHJvdmlkZXIgYmxvY2tzIHN0YXkgZW1wdHk6IGB0ZXJyYWZvcm0gZ2V0YCBvbmx5IGJ1aWxkcyB0aGUgY29uZmlndXJhdGlvblxuICogdHJlZSwgaXQgbmV2ZXIgY29uZmlndXJlcyBvciBpbnN0YWxscyBhIHByb3ZpZGVyLiBTb3VyY2VzIGFyZSBtaXJyb3JlZCBmcm9tXG4gKiB0aGUgbW9kdWxlJ3Mgb3duIGByZXF1aXJlZF9wcm92aWRlcnNgIHNvIGEgbW9kdWxlIHJlZmVycmluZyB0bywgc2F5LFxuICogaGFzaGljb3JwL2F3cyB1bmRlciBhIG5vbi1kZWZhdWx0IGxvY2FsIG5hbWUgc3RpbGwgcmVzb2x2ZXMgdG8gdGhlIHNhbWVcbiAqIHByb3ZpZGVyIGluIHRoZSByb290LlxuICpcbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyhcbiAgY29uZmlnOiBUZXJyYWZvcm1Db25maWcsXG4gIG1vZHVsZUtleTogc3RyaW5nLFxuICBhbGlhc2VzOiBNb2R1bGVQcm92aWRlckFsaWFzW10sXG4pOiBUZXJyYWZvcm1Db25maWcge1xuICBjb25zdCBtb2R1bGVDYWxsID0gY29uZmlnLm1vZHVsZT8uW21vZHVsZUtleV07XG4gIGlmICghbW9kdWxlQ2FsbCB8fCBhbGlhc2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbmZpZztcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFsaWFzZXMpIHtcbiAgICBjb25zdCB7IGxvY2FsTmFtZSwgYWxpYXMsIHNvdXJjZSB9ID0gZW50cnk7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgY29uZmlnLnRlcnJhZm9ybS5yZXF1aXJlZF9wcm92aWRlcnMgPSB7XG4gICAgICAgIC4uLmNvbmZpZy50ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzLFxuICAgICAgICBbbG9jYWxOYW1lXTogeyBzb3VyY2UgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uZmlnLnByb3ZpZGVyID0gY29uZmlnLnByb3ZpZGVyIHx8IHt9O1xuICAgIGNvbnN0IGJsb2NrcyA9IHRvQXJyYXkoY29uZmlnLnByb3ZpZGVyW2xvY2FsTmFtZV0pO1xuICAgIGlmICghYmxvY2tzLnNvbWUoKGJsb2NrKSA9PiBibG9jay5hbGlhcyA9PT0gYWxpYXMpKSB7XG4gICAgICBibG9ja3MucHVzaChhbGlhcyA/IHsgYWxpYXMgfSA6IHt9KTtcbiAgICB9XG4gICAgY29uZmlnLnByb3ZpZGVyW2xvY2FsTmFtZV0gPSBibG9ja3M7XG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSBwcm92aWRlclJlZmVyZW5jZShlbnRyeSk7XG4gICAgbW9kdWxlQ2FsbC5wcm92aWRlcnMgPSB7XG4gICAgICAuLi5tb2R1bGVDYWxsLnByb3ZpZGVycyxcbiAgICAgIFtyZWZlcmVuY2VdOiByZWZlcmVuY2UsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qKlxuICogVGhlIGAvL3N1YmRpcmAgcG9ydGlvbiBvZiBhIG1vZHVsZSBzb3VyY2UsIGlmIGl0IGhhcyBvbmUsIG1pcnJvcmluZyBob3dcbiAqIFRlcnJhZm9ybSB1bnBhY2tzIGEgcGFja2FnZSBpbnRvIGAudGVycmFmb3JtL21vZHVsZXMvPGtleT4vPHN1YmRpcj5gLlxuICpcbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU3ViZGlyKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgW3dpdGhvdXRRdWVyeV0gPSBzb3VyY2Uuc3BsaXQoXCI/XCIpO1xuICBjb25zdCB3aXRob3V0R2V0dGVyUHJlZml4ID0gd2l0aG91dFF1ZXJ5LnJlcGxhY2UoL15bQS1aYS16MC05XSs6Oi8sIFwiXCIpO1xuICBjb25zdCB3aXRob3V0U2NoZW1lID0gd2l0aG91dEdldHRlclByZWZpeC5yZXBsYWNlKFxuICAgIC9eW0EtWmEtel1bQS1aYS16MC05Ky4tXSo6XFwvXFwvKy8sXG4gICAgXCJcIixcbiAgKTtcblxuICBjb25zdCBbLCAuLi5yZXN0XSA9IHdpdGhvdXRTY2hlbWUuc3BsaXQoXCIvL1wiKTtcbiAgY29uc3Qgc3ViZGlyID0gcmVzdC5qb2luKFwiLy9cIikucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIik7XG4gIHJldHVybiBzdWJkaXIgfHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdoZXJlIHRoZSBtb2R1bGUgVGVycmFmb3JtIGp1c3QgZmV0Y2hlZCBlbmRlZCB1cCBvbiBkaXNrLlxuICpcbiAqIFRoZSBtYW5pZmVzdCBpcyB0aGUgYXV0aG9yaXR5LCBidXQgYSBgdGVycmFmb3JtIGdldGAgdGhhdCBpbnN0YWxsZWQgdGhlXG4gKiBtb2R1bGUgYW5kIHRoZW4gZmFpbGVkIHRvIHZhbGlkYXRlIHRoZSBjb25maWd1cmF0aW9uIGFyb3VuZCBpdCBsZWF2ZXMgbm9cbiAqIG1hbmlmZXN0IGJlaGluZCAtIHNvIGZhbGwgYmFjayB0byB0aGUgbG9jYXRpb25zIFRlcnJhZm9ybSBpbnN0YWxscyBpbnRvOlxuICogbG9jYWwgbW9kdWxlcyBhcmUgcmVhZCB3aGVyZSB0aGV5IGFyZSwgcmVtb3RlIHBhY2thZ2VzIGFyZSB1bnBhY2tlZCBpbnRvXG4gKiBgLnRlcnJhZm9ybS9tb2R1bGVzLzxrZXk+YC5cbiAqXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hlZE1vZHVsZURpcihcbiAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICBtb2R1bGVLZXk6IHN0cmluZyxcbiAgc291cmNlOiBzdHJpbmcsXG4gIGxvY2FsU291cmNlQWJzb2x1dGVQYXRoPzogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKFxuICAgIHdvcmtpbmdEaXJlY3RvcnksXG4gICAgXCIudGVycmFmb3JtXCIsXG4gICAgXCJtb2R1bGVzXCIsXG4gICAgXCJtb2R1bGVzLmpzb25cIixcbiAgKTtcblxuICBpZiAoZnMuZXhpc3RzU3luYyhtYW5pZmVzdFBhdGgpKSB7XG4gICAgY29uc3QgbW9kdWxlSW5kZXggPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgXCJ1dGYtOFwiKSxcbiAgICApIGFzIE1vZHVsZUluZGV4O1xuICAgIGNvbnN0IHJlY29yZCA9IG1vZHVsZUluZGV4Lk1vZHVsZXMuZmluZCgobW9kKSA9PiBtb2QuS2V5ID09PSBtb2R1bGVLZXkpO1xuXG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh3b3JraW5nRGlyZWN0b3J5LCByZWNvcmQuRGlyKTtcbiAgICB9XG4gIH1cblxuICBpZiAobG9jYWxTb3VyY2VBYnNvbHV0ZVBhdGgpIHtcbiAgICByZXR1cm4gbG9jYWxTb3VyY2VBYnNvbHV0ZVBhdGg7XG4gIH1cblxuICByZXR1cm4gcGF0aC5qb2luKFxuICAgIHdvcmtpbmdEaXJlY3RvcnksXG4gICAgXCIudGVycmFmb3JtXCIsXG4gICAgXCJtb2R1bGVzXCIsXG4gICAgbW9kdWxlS2V5LFxuICAgIHBhY2thZ2VTdWJkaXIoc291cmNlKSB8fCBcIlwiLFxuICApO1xufVxuXG4vKipcbiAqIFJ1bnMgYHRlcnJhZm9ybSBnZXRgIGFuZCBoYW5kcyB0aGUgZmFpbHVyZSBiYWNrIGluc3RlYWQgb2YgdGhyb3dpbmcgaXQuXG4gKlxuICogSXRzIGRpYWdub3N0aWNzIGFyZSBub3QgZmluYWwgKHNlZSB7QGxpbmsgcmVhZE1vZHVsZVNjaGVtYX0pLCBzbyB0aGV5IGdvIHRvXG4gKiB0aGUgZGVidWcgbG9nIHJhdGhlciB0aGFuIHRoZSB0ZXJtaW5hbDsgdGhlIHJldHVybmVkIGVycm9yIHN0aWxsIGNhcnJpZXNcbiAqIHRoZW0gb24gaXRzIGBzdGRlcnJgIGZvciBjYWxsZXJzIHRoYXQgZW5kIHVwIHJldGhyb3dpbmcgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRyeVRlcnJhZm9ybUdldChvdXRkaXI6IHN0cmluZyk6IFByb21pc2U8RXJyb3IgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKFxuICAgICAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgIFtcImdldFwiXSxcbiAgICAgIHsgY3dkOiBvdXRkaXIsIGxvZ1N0ZGVyckFzRGVidWc6IHRydWUgfSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQ6IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCkge1xuICBsZXQgbW9kdWxlU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVTY2hlbWE+ID0ge307XG5cbiAgYXdhaXQgd2l0aFRlbXBEaXIoXCJmZXRjaFNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnOiBUZXJyYWZvcm1Db25maWcgPSB7XG4gICAgICB0ZXJyYWZvcm06IHt9LFxuICAgIH07XG5cbiAgICBpZiAoIWNvbmZpZy5tb2R1bGUpIGNvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICBsZXQgc291cmNlOiBzdHJpbmcgPSB0YXJnZXQuc291cmNlO1xuXG4gICAgY29uc3QgbG9jYWxTb3VyY2UgPSAodGFyZ2V0LmNvbnN0cmFpbnQgYXMgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludClcbiAgICAgIC5sb2NhbFNvdXJjZUFic29sdXRlUGF0aDtcbiAgICBpZiAobG9jYWxTb3VyY2UpIHtcbiAgICAgIC8vIGNyZWF0ZSByZWxhdGl2ZSBwYXRoIHRvIG1vZHVsZSBpbiB0aGUgdXNlciBwcm9qZWN0XG4gICAgICBzb3VyY2UgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGxvY2FsU291cmNlKTtcbiAgICB9XG5cbiAgICBjb25maWcubW9kdWxlW3RhcmdldC5tb2R1bGVLZXldID0geyBzb3VyY2U6IHNvdXJjZSB9O1xuICAgIGlmICh0YXJnZXQudmVyc2lvbikge1xuICAgICAgY29uZmlnLm1vZHVsZVt0YXJnZXQubW9kdWxlS2V5XVtcInZlcnNpb25cIl0gPSB0YXJnZXQudmVyc2lvbjtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKG91dGRpciwgXCJtYWluLnRmLmpzb25cIik7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcblxuICAgIC8vIGB0ZXJyYWZvcm0gZ2V0YCBpcyBib3RoIG91ciBkb3dubG9hZGVyIGFuZCBhIGZ1bGwgdmFsaWRhdGlvbiBvZiB0aGVcbiAgICAvLyBzeW50aGV0aWMgcm9vdCBjb25maWcgd3JhcHBlZCBhcm91bmQgdGhlIG1vZHVsZS4gQSBtb2R1bGUgZGVjbGFyaW5nXG4gICAgLy8gYGNvbmZpZ3VyYXRpb25fYWxpYXNlc2AgY2Fubm90IHZhbGlkYXRlIHVudGlsIHRoZSByb290IHBhc3NlcyB0aG9zZVxuICAgIC8vIGNvbmZpZ3VyYXRpb25zIGluLCBhbmQgdGhlaXIgbmFtZXMgYXJlIG9ubHkga25vd2FibGUgb25jZSB0aGUgbW9kdWxlIGlzXG4gICAgLy8gb24gZGlzayAtIHNvIHRoaXMgZmlyc3QgcnVuIGlzIGEgZmV0Y2ggd2UgZGVmZXIganVkZ2VtZW50IG9uLiBUZXJyYWZvcm1cbiAgICAvLyBpbnN0YWxscyB0aGUgbW9kdWxlIGVpdGhlciB3YXk7IHNpbmNlIDEuMTUgaXQganVzdCBzdG9wcyBzaG9ydCBvZlxuICAgIC8vIHdyaXRpbmcgdGhlIG1vZHVsZSBtYW5pZmVzdCB3aGVuIHZhbGlkYXRpb24gZmFpbHMgKHRlcnJhZm9ybSMzODIxN1xuICAgIC8vIGRyb3BwZWQgdGhlIGVycm9yLXRvLXdhcm5pbmcgZG93bmdyYWRlIHRoYXQgYHRlcnJhZm9ybSBnZXRgIHVzZWQgdG9cbiAgICAvLyBhcHBseSksIHdoaWNoIGlzIHdoYXQgdGhlIHNlY29uZCBydW4gYmVsb3cgcmVzdG9yZXMuXG4gICAgY29uc3QgZmV0Y2hFcnJvciA9IGF3YWl0IHRyeVRlcnJhZm9ybUdldChvdXRkaXIpO1xuXG4gICAgY29uc3QgbW9kdWxlRGlyID0gZmV0Y2hlZE1vZHVsZURpcihcbiAgICAgIG91dGRpcixcbiAgICAgIHRhcmdldC5tb2R1bGVLZXksXG4gICAgICBzb3VyY2UsXG4gICAgICBsb2NhbFNvdXJjZSxcbiAgICApO1xuICAgIGNvbnN0IGFsaWFzZXMgPSBmcy5leGlzdHNTeW5jKG1vZHVsZURpcilcbiAgICAgID8gY29sbGVjdE1vZHVsZVByb3ZpZGVyQWxpYXNlcyhhd2FpdCBjb252ZXJ0RmlsZXMobW9kdWxlRGlyKSlcbiAgICAgIDogW107XG5cbiAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhcHBseU1vZHVsZVByb3ZpZGVyQWxpYXNlcyhjb25maWcsIHRhcmdldC5tb2R1bGVLZXksIGFsaWFzZXMpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcbiAgICAgIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1wiZ2V0XCJdLCB7IGN3ZDogb3V0ZGlyIH0pO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hFcnJvcikge1xuICAgICAgLy8gbm90aGluZyBoZXJlIHdhcyBzYWx2YWdlYWJsZSBhZnRlciBhbGwsIHNvIHJlcG9ydCB0aGUgZGlhZ25vc3RpY3MgdGhhdFxuICAgICAgLy8gd2VyZSBoZWxkIGJhY2sgd2hpbGUgdGhlIGZldGNoIHN0aWxsIGhhZCBhIHNlY29uZCBjaGFuY2VcbiAgICAgIGxvZ2dlci5lcnJvcigoZmV0Y2hFcnJvciBhcyBhbnkpLnN0ZGVyciB8fCBTdHJpbmcoZmV0Y2hFcnJvcikpO1xuICAgICAgdGhyb3cgZmV0Y2hFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLm1vZHVsZSkge1xuICAgICAgbW9kdWxlU2NoZW1hID0gYXdhaXQgaGFydmVzdE1vZHVsZVNjaGVtYShcbiAgICAgICAgb3V0ZGlyLFxuICAgICAgICBPYmplY3Qua2V5cyhjb25maWcubW9kdWxlKSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbW9kdWxlU2NoZW1hO1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdktn/provider-schema",
3
- "version": "0.25.0-pre.40",
3
+ "version": "0.25.0-pre.42",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -32,8 +32,8 @@
32
32
  "deepmerge": "4.3.1",
33
33
  "fs-extra": "11.3.6",
34
34
  "semver": "7.8.5",
35
- "@cdktn/commons": "0.25.0-pre.40",
36
- "@cdktn/hcl2json": "0.25.0-pre.40"
35
+ "@cdktn/commons": "0.25.0-pre.42",
36
+ "@cdktn/hcl2json": "0.25.0-pre.42"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "22.20.1",
@@ -748,7 +748,7 @@ exports[`readSchema generates a single provider schema 1`] = `
748
748
  "cli_version": "STUBBED VERSION",
749
749
  "format_version": "STUBBED VERSION",
750
750
  "provider_schemas": {
751
- "registry.terraform.io/hashicorp/null": {
751
+ "STUBBED_REGISTRY/hashicorp/null": {
752
752
  "data_source_schemas": {
753
753
  "null_data_source": {
754
754
  "block": {
@@ -834,7 +834,7 @@ exports[`readSchema generates a single provider schema 1`] = `
834
834
  }
835
835
  },
836
836
  "provider_versions": {
837
- "registry.terraform.io/hashicorp/null": "3.1.0"
837
+ "STUBBED_REGISTRY/hashicorp/null": "3.1.0"
838
838
  }
839
839
  }"
840
840
  `;