velocious 1.0.393 → 1.0.394
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/build/src/cli/commands/db/tenants/migrate.d.ts.map +1 -1
- package/build/src/cli/commands/db/tenants/migrate.js +10 -2
- package/build/src/cli/tenant-database-command-helper.d.ts +15 -0
- package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
- package/build/src/cli/tenant-database-command-helper.js +71 -10
- package/build/src/configuration-types.d.ts +10 -0
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +2 -1
- package/build/src/database/drivers/mysql/column.d.ts +2 -0
- package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/columns-index.d.ts +1 -0
- package/build/src/database/drivers/mysql/columns-index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/columns-index.js +15 -1
- package/build/src/database/drivers/mysql/table.d.ts +2 -0
- package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/table.js +17 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2076,6 +2076,7 @@ For Apartment-style project/account databases, mark the logical per-tenant ident
|
|
|
2076
2076
|
npx velocious db:tenants:create projectTenant
|
|
2077
2077
|
npx velocious db:tenants:check projectTenant
|
|
2078
2078
|
npx velocious db:tenants:migrate projectTenant
|
|
2079
|
+
npx velocious db:tenants:migrate projectTenant --parallel 20
|
|
2079
2080
|
```
|
|
2080
2081
|
|
|
2081
2082
|
See [docs/tenant-databases.md](docs/tenant-databases.md) for the full configuration and migration pattern.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/db/tenants/migrate.js"],"names":[],"mappings":"AAOA;IACE,0HAA0H;IAC1H,WADc,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/db/tenants/migrate.js"],"names":[],"mappings":"AAOA;IACE,0HAA0H;IAC1H,WADc,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAmC9F;CACF;wBAzCuB,0BAA0B"}
|
|
@@ -11,7 +11,7 @@ export default class DbTenantsMigrate extends BaseCommand {
|
|
|
11
11
|
identifier: this.processArgs?.[1]
|
|
12
12
|
});
|
|
13
13
|
const migrations = await this.getEnvironmentHandler().findMigrations();
|
|
14
|
-
const tenantCount = await helper.eachTenant(async () => {
|
|
14
|
+
const tenantCount = await helper.eachTenant(async ({ databaseConfiguration, tenant }) => {
|
|
15
15
|
const migrator = new Migrator({
|
|
16
16
|
configuration: this.getConfiguration(),
|
|
17
17
|
databaseIdentifiers: [helper.identifier]
|
|
@@ -20,6 +20,14 @@ export default class DbTenantsMigrate extends BaseCommand {
|
|
|
20
20
|
await migrator.prepare();
|
|
21
21
|
await migrator.migrateFiles(migrations, digg(this.getEnvironmentHandler(), "requireMigration"));
|
|
22
22
|
});
|
|
23
|
+
if (typeof helper.provider.afterMigrateTenant === "function") {
|
|
24
|
+
await helper.provider.afterMigrateTenant({
|
|
25
|
+
configuration: this.getConfiguration(),
|
|
26
|
+
databaseConfiguration,
|
|
27
|
+
identifier: helper.identifier,
|
|
28
|
+
tenant
|
|
29
|
+
});
|
|
30
|
+
}
|
|
23
31
|
});
|
|
24
32
|
if (this.args.testing) {
|
|
25
33
|
return {
|
|
@@ -30,4 +38,4 @@ export default class DbTenantsMigrate extends BaseCommand {
|
|
|
30
38
|
}
|
|
31
39
|
}
|
|
32
40
|
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvZGIvdGVuYW50cy9taWdyYXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sV0FBVyxNQUFNLDBCQUEwQixDQUFBO0FBQ2xELE9BQU8sUUFBUSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3ZELE9BQU8sMkJBQTJCLE1BQU0sNENBQTRDLENBQUE7QUFFcEYsTUFBTSxDQUFDLE9BQU8sT0FBTyxnQkFBaUIsU0FBUSxXQUFXO0lBQ3ZELDBIQUEwSDtJQUMxSCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksMkJBQTJCLENBQUM7WUFDN0MsT0FBTyxFQUFFLElBQUk7WUFDYixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsQyxDQUFDLENBQUE7UUFDRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFO1lBQ3BGLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDO2dCQUM1QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN0QyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7YUFDekMsQ0FBQyxDQUFBO1lBRUYsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDekQsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ3hCLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtZQUNqRyxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM3RCxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7b0JBQ3ZDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3RDLHFCQUFxQjtvQkFDckIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO29CQUM3QixNQUFNO2lCQUNQLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixPQUFPO2dCQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDN0IsY0FBYyxFQUFFLFVBQVUsQ0FBQyxNQUFNO2dCQUNqQyxXQUFXO2FBQ1osQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBCYXNlQ29tbWFuZCBmcm9tIFwiLi4vLi4vLi4vYmFzZS1jb21tYW5kLmpzXCJcbmltcG9ydCBNaWdyYXRvciBmcm9tIFwiLi4vLi4vLi4vLi4vZGF0YWJhc2UvbWlncmF0b3IuanNcIlxuaW1wb3J0IFRlbmFudERhdGFiYXNlQ29tbWFuZEhlbHBlciBmcm9tIFwiLi4vLi4vLi4vdGVuYW50LWRhdGFiYXNlLWNvbW1hbmQtaGVscGVyLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGJUZW5hbnRzTWlncmF0ZSBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHtpZGVudGlmaWVyOiBzdHJpbmcsIG1pZ3JhdGlvbkNvdW50OiBudW1iZXIsIHRlbmFudENvdW50OiBudW1iZXJ9IHwgdm9pZD59IC0gUmVzdWx0IGluIHRlc3QgbW9kZS4gKi9cbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBjb25zdCBoZWxwZXIgPSBuZXcgVGVuYW50RGF0YWJhc2VDb21tYW5kSGVscGVyKHtcbiAgICAgIGNvbW1hbmQ6IHRoaXMsXG4gICAgICBpZGVudGlmaWVyOiB0aGlzLnByb2Nlc3NBcmdzPy5bMV1cbiAgICB9KVxuICAgIGNvbnN0IG1pZ3JhdGlvbnMgPSBhd2FpdCB0aGlzLmdldEVudmlyb25tZW50SGFuZGxlcigpLmZpbmRNaWdyYXRpb25zKClcbiAgICBjb25zdCB0ZW5hbnRDb3VudCA9IGF3YWl0IGhlbHBlci5lYWNoVGVuYW50KGFzeW5jICh7ZGF0YWJhc2VDb25maWd1cmF0aW9uLCB0ZW5hbnR9KSA9PiB7XG4gICAgICBjb25zdCBtaWdyYXRvciA9IG5ldyBNaWdyYXRvcih7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgICBkYXRhYmFzZUlkZW50aWZpZXJzOiBbaGVscGVyLmlkZW50aWZpZXJdXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IG1pZ3JhdG9yLnByZXBhcmUoKVxuICAgICAgICBhd2FpdCBtaWdyYXRvci5taWdyYXRlRmlsZXMobWlncmF0aW9ucywgZGlnZyh0aGlzLmdldEVudmlyb25tZW50SGFuZGxlcigpLCBcInJlcXVpcmVNaWdyYXRpb25cIikpXG4gICAgICB9KVxuXG4gICAgICBpZiAodHlwZW9mIGhlbHBlci5wcm92aWRlci5hZnRlck1pZ3JhdGVUZW5hbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBhd2FpdCBoZWxwZXIucHJvdmlkZXIuYWZ0ZXJNaWdyYXRlVGVuYW50KHtcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgaWRlbnRpZmllcjogaGVscGVyLmlkZW50aWZpZXIsXG4gICAgICAgICAgdGVuYW50XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmICh0aGlzLmFyZ3MudGVzdGluZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWRlbnRpZmllcjogaGVscGVyLmlkZW50aWZpZXIsXG4gICAgICAgIG1pZ3JhdGlvbkNvdW50OiBtaWdyYXRpb25zLmxlbmd0aCxcbiAgICAgICAgdGVuYW50Q291bnRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -26,6 +26,21 @@ export default class TenantDatabaseCommandHelper {
|
|
|
26
26
|
databaseConfiguration: import("../configuration-types.js").DatabaseConfigurationType;
|
|
27
27
|
tenant: unknown;
|
|
28
28
|
}) => Promise<void>): Promise<number>;
|
|
29
|
+
/** @returns {number} - Number of tenants to process concurrently. */
|
|
30
|
+
parallelCount(): number;
|
|
31
|
+
/**
|
|
32
|
+
* @param {object} args - Tenant callback args.
|
|
33
|
+
* @param {function({databaseConfiguration: import("../configuration-types.js").DatabaseConfigurationType, tenant: unknown}) : Promise<void>} args.callback - Callback.
|
|
34
|
+
* @param {unknown} args.tenant - Tenant.
|
|
35
|
+
* @returns {Promise<void>}
|
|
36
|
+
*/
|
|
37
|
+
runTenantCallback({ callback, tenant }: {
|
|
38
|
+
callback: (arg0: {
|
|
39
|
+
databaseConfiguration: import("../configuration-types.js").DatabaseConfigurationType;
|
|
40
|
+
tenant: unknown;
|
|
41
|
+
}) => Promise<void>;
|
|
42
|
+
tenant: unknown;
|
|
43
|
+
}): Promise<void>;
|
|
29
44
|
/**
|
|
30
45
|
* @param {unknown} tenant - Tenant.
|
|
31
46
|
* @returns {string} - Human readable tenant label.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-database-command-helper.d.ts","sourceRoot":"","sources":["../../../src/cli/tenant-database-command-helper.js"],"names":[],"mappings":"AAEA;IACE;;;;OAIG;IACH,qCAHG;QAAkD,OAAO,EAAjD,OAAO,mBAAmB,EAAE,OAAO;QACV,UAAU,EAAnC,MAAM,GAAG,SAAS;KAC5B,EAQA;IAJC,6CAAsB;IACtB,qDAA+C;IAC/C,mBAA4B;IAC5B,yEAAwE;IAG1E,sBAAsB;IACtB,oCADc,IAAI,CAmBjB;IAED,2EAA2E;IAC3E,qBADc,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED,+CAA+C;IAC/C,eADc,OAAO,CAAC,OAAO,EAAE,CAAC,CAiB/B;IAED;;;OAGG;IACH,qBAHW,CAAS,IAAuG,EAAvG;QAAC,qBAAqB,EAAE,OAAO,2BAA2B,EAAE,yBAAyB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,GAC/H,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"tenant-database-command-helper.d.ts","sourceRoot":"","sources":["../../../src/cli/tenant-database-command-helper.js"],"names":[],"mappings":"AAEA;IACE;;;;OAIG;IACH,qCAHG;QAAkD,OAAO,EAAjD,OAAO,mBAAmB,EAAE,OAAO;QACV,UAAU,EAAnC,MAAM,GAAG,SAAS;KAC5B,EAQA;IAJC,6CAAsB;IACtB,qDAA+C;IAC/C,mBAA4B;IAC5B,yEAAwE;IAG1E,sBAAsB;IACtB,oCADc,IAAI,CAmBjB;IAED,2EAA2E;IAC3E,qBADc,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED,+CAA+C;IAC/C,eADc,OAAO,CAAC,OAAO,EAAE,CAAC,CAiB/B;IAED;;;OAGG;IACH,qBAHW,CAAS,IAAuG,EAAvG;QAAC,qBAAqB,EAAE,OAAO,2BAA2B,EAAE,yBAAyB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,GAC/H,OAAO,CAAC,MAAM,CAAC,CAmD3B;IAED,qEAAqE;IACrE,iBADc,MAAM,CAyBnB;IAED;;;;;OAKG;IACH,wCAJG;QAAgJ,QAAQ,EAAhJ,CAAS,IAAuG,EAAvG;YAAC,qBAAqB,EAAE,OAAO,2BAA2B,EAAE,yBAAyB,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAC,KAAI,OAAO,CAAC,IAAI,CAAC;QACnH,MAAM,EAApB,OAAO;KACf,GAAU,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;OAGG;IACH,oBAHW,OAAO,GACL,MAAM,CAYlB;CACF"}
|
|
@@ -54,19 +54,80 @@ export default class TenantDatabaseCommandHelper {
|
|
|
54
54
|
*/
|
|
55
55
|
async eachTenant(callback) {
|
|
56
56
|
const tenants = await this.listTenants();
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const parallelCount = this.parallelCount();
|
|
58
|
+
if (parallelCount <= 1) {
|
|
59
|
+
for (const tenant of tenants) {
|
|
60
|
+
await this.runTenantCallback({ callback, tenant });
|
|
61
|
+
}
|
|
62
|
+
return tenants.length;
|
|
63
|
+
}
|
|
64
|
+
/** @type {Array<{error: Error, tenant: unknown}>} */
|
|
65
|
+
const failures = [];
|
|
66
|
+
const workers = [];
|
|
67
|
+
let tenantIndex = 0;
|
|
68
|
+
const workerCount = Math.min(parallelCount, tenants.length);
|
|
69
|
+
for (let workerIndex = 0; workerIndex < workerCount; workerIndex++) {
|
|
70
|
+
workers.push((async () => {
|
|
71
|
+
while (tenantIndex < tenants.length) {
|
|
72
|
+
const tenant = tenants[tenantIndex];
|
|
73
|
+
tenantIndex++;
|
|
74
|
+
try {
|
|
75
|
+
await this.runTenantCallback({ callback, tenant });
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
failures.push({
|
|
79
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
80
|
+
tenant
|
|
81
|
+
});
|
|
82
|
+
}
|
|
61
83
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
84
|
+
})());
|
|
85
|
+
}
|
|
86
|
+
await Promise.all(workers);
|
|
87
|
+
if (failures.length > 0) {
|
|
88
|
+
const failedTenantLabels = failures.map((failure) => this.tenantLabel(failure.tenant)).join(", ");
|
|
89
|
+
throw new AggregateError(failures.map((failure) => failure.error), `Failed tenant database command for tenant(s): ${failedTenantLabels}`);
|
|
67
90
|
}
|
|
68
91
|
return tenants.length;
|
|
69
92
|
}
|
|
93
|
+
/** @returns {number} - Number of tenants to process concurrently. */
|
|
94
|
+
parallelCount() {
|
|
95
|
+
const parsedProcessArgs = this.command.args?.parsedProcessArgs || {};
|
|
96
|
+
let parallelArg = parsedProcessArgs.parallel;
|
|
97
|
+
if (parallelArg === undefined) {
|
|
98
|
+
const parallelArgIndex = this.command.processArgs?.indexOf("--parallel") ?? -1;
|
|
99
|
+
if (parallelArgIndex >= 0) {
|
|
100
|
+
const nextArg = this.command.processArgs?.[parallelArgIndex + 1];
|
|
101
|
+
parallelArg = nextArg && !nextArg.startsWith("-") ? nextArg : true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (parallelArg === undefined || parallelArg === false)
|
|
105
|
+
return 1;
|
|
106
|
+
if (parallelArg === true)
|
|
107
|
+
return 20;
|
|
108
|
+
const parallelCount = Number(parallelArg);
|
|
109
|
+
if (!Number.isInteger(parallelCount) || parallelCount < 1) {
|
|
110
|
+
throw new Error(`--parallel must be a positive integer when a value is provided: ${parallelArg}`);
|
|
111
|
+
}
|
|
112
|
+
return parallelCount;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* @param {object} args - Tenant callback args.
|
|
116
|
+
* @param {function({databaseConfiguration: import("../configuration-types.js").DatabaseConfigurationType, tenant: unknown}) : Promise<void>} args.callback - Callback.
|
|
117
|
+
* @param {unknown} args.tenant - Tenant.
|
|
118
|
+
* @returns {Promise<void>}
|
|
119
|
+
*/
|
|
120
|
+
async runTenantCallback({ callback, tenant }) {
|
|
121
|
+
await this.configuration.runWithTenant(tenant, async () => {
|
|
122
|
+
if (!this.configuration.isDatabaseIdentifierActive(this.identifier)) {
|
|
123
|
+
throw new Error(`Tenant database identifier ${this.identifier} is inactive for tenant: ${this.tenantLabel(tenant)}`);
|
|
124
|
+
}
|
|
125
|
+
await callback({
|
|
126
|
+
databaseConfiguration: this.configuration.resolveDatabaseConfiguration(this.identifier),
|
|
127
|
+
tenant
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}
|
|
70
131
|
/**
|
|
71
132
|
* @param {unknown} tenant - Tenant.
|
|
72
133
|
* @returns {string} - Human readable tenant label.
|
|
@@ -84,4 +145,4 @@ export default class TenantDatabaseCommandHelper {
|
|
|
84
145
|
return JSON.stringify(tenant);
|
|
85
146
|
}
|
|
86
147
|
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWRhdGFiYXNlLWNvbW1hbmQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS90ZW5hbnQtZGF0YWJhc2UtY29tbWFuZC1oZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMkJBQTJCO0lBQzlDOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBQztRQUMvQixJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtRQUUvRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGdDQUFnQztRQUM5QixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFNUYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDL0UsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixJQUFJLENBQUMsVUFBVSwwQ0FBMEMsQ0FBQyxDQUFBO1FBQ25HLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLEVBQUUs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QyxDQUFBO1FBQ3JELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDL0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbmFudERhdGFiYXNlQ29tbWFuZEhlbHBlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29tbWFuZCAtIENMSSBjb21tYW5kIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gYXJncy5pZGVudGlmaWVyIC0gVGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29tbWFuZCwgaWRlbnRpZmllcn0pIHtcbiAgICBpZiAoIWlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIgYXJndW1lbnRcIilcblxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb21tYW5kLmdldENvbmZpZ3VyYXRpb24oKVxuICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXJcbiAgICB0aGlzLnByb3ZpZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmdldFRlbmFudERhdGFiYXNlUHJvdmlkZXIoaWRlbnRpZmllcilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgdmFsaWRhdGVUZW5hbnREYXRhYmFzZUlkZW50aWZpZXIoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VDb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uLmdldERhdGFiYXNlQ29uZmlndXJhdGlvbigpW3RoaXMuaWRlbnRpZmllcl1cblxuICAgIGlmICghZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggZGF0YWJhc2UgaWRlbnRpZmllciBjb25maWd1cmVkOiAke3RoaXMuaWRlbnRpZmllcn1gKVxuICAgIH1cblxuICAgIGlmICghZGF0YWJhc2VDb25maWd1cmF0aW9uLnRlbmFudE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YWJhc2UgaWRlbnRpZmllciAke3RoaXMuaWRlbnRpZmllcn0gaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCB0ZW5hbnRPbmx5OiB0cnVlYClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmdldERpc2FibGVkRGF0YWJhc2VJZGVudGlmaWVycygpLmhhcyh0aGlzLmlkZW50aWZpZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyICR7dGhpcy5pZGVudGlmaWVyfSBpcyBkaXNhYmxlZCBieSBWRUxPQ0lPVVNfRElTQUJMRURfREFUQUJBU0VfSURFTlRJRklFUlNgKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5wcm92aWRlci5saXN0VGVuYW50cyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBwcm92aWRlciBmb3IgJHt0aGlzLmlkZW50aWZpZXJ9IG11c3QgZGVmaW5lIGxpc3RUZW5hbnRzYClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBhcHAgcnVudGltZSBpcyBpbml0aWFsaXplZC4gKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVJ1bnRpbWUoKSB7XG4gICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmluaXRpYWxpemUoe3R5cGU6IFwiZGItdGVuYW50c1wifSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duW10+fSAtIFRlbmFudHMuICovXG4gIGFzeW5jIGxpc3RUZW5hbnRzKCkge1xuICAgIHRoaXMudmFsaWRhdGVUZW5hbnREYXRhYmFzZUlkZW50aWZpZXIoKVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJ1bnRpbWUoKVxuXG4gICAgY29uc3QgdGVuYW50cyA9IGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm92aWRlci5saXN0VGVuYW50cyh7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGVuYW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuYW50IGRhdGFiYXNlIHByb3ZpZGVyIGZvciAke3RoaXMuaWRlbnRpZmllcn0gbXVzdCByZXR1cm4gYW4gYXJyYXkgZnJvbSBsaXN0VGVuYW50c2ApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbmFudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHtkYXRhYmFzZUNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgdGVuYW50OiB1bmtub3dufSkgOiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIE51bWJlciBvZiB0ZW5hbnRzIHByb2Nlc3NlZC5cbiAgICovXG4gIGFzeW5jIGVhY2hUZW5hbnQoY2FsbGJhY2spIHtcbiAgICBjb25zdCB0ZW5hbnRzID0gYXdhaXQgdGhpcy5saXN0VGVuYW50cygpXG5cbiAgICBmb3IgKGNvbnN0IHRlbmFudCBvZiB0ZW5hbnRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24ucnVuV2l0aFRlbmFudCh0ZW5hbnQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaXNEYXRhYmFzZUlkZW50aWZpZXJBY3RpdmUodGhpcy5pZGVudGlmaWVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIgJHt0aGlzLmlkZW50aWZpZXJ9IGlzIGluYWN0aXZlIGZvciB0ZW5hbnQ6ICR7dGhpcy50ZW5hbnRMYWJlbCh0ZW5hbnQpfWApXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBjYWxsYmFjayh7XG4gICAgICAgICAgZGF0YWJhc2VDb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZURhdGFiYXNlQ29uZmlndXJhdGlvbih0aGlzLmlkZW50aWZpZXIpLFxuICAgICAgICAgIHRlbmFudFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGVuYW50cy5sZW5ndGhcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHRlbmFudCAtIFRlbmFudC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBIdW1hbiByZWFkYWJsZSB0ZW5hbnQgbGFiZWwuXG4gICAqL1xuICB0ZW5hbnRMYWJlbCh0ZW5hbnQpIHtcbiAgICBpZiAodGVuYW50ICYmIHR5cGVvZiB0ZW5hbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHRlbmFudE9iamVjdCA9IC8qKiBAdHlwZSB7e2lkPzogdW5rbm93biwgbmFtZT86IHVua25vd24sIHNsdWc/OiB1bmtub3dufX0gKi8gKHRlbmFudClcblxuICAgICAgaWYgKHRlbmFudE9iamVjdC5zbHVnKSByZXR1cm4gU3RyaW5nKHRlbmFudE9iamVjdC5zbHVnKVxuICAgICAgaWYgKHRlbmFudE9iamVjdC5uYW1lKSByZXR1cm4gU3RyaW5nKHRlbmFudE9iamVjdC5uYW1lKVxuICAgICAgaWYgKHRlbmFudE9iamVjdC5pZCkgcmV0dXJuIFN0cmluZyh0ZW5hbnRPYmplY3QuaWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRlbmFudClcbiAgfVxufVxuIl19
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWRhdGFiYXNlLWNvbW1hbmQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS90ZW5hbnQtZGF0YWJhc2UtY29tbWFuZC1oZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMkJBQTJCO0lBQzlDOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBQztRQUMvQixJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtRQUUvRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGdDQUFnQztRQUM5QixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFNUYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDL0UsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixJQUFJLENBQUMsVUFBVSwwQ0FBMEMsQ0FBQyxDQUFBO1FBQ25HLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLEVBQUUs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QUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZGLE1BQU07YUFDUCxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsTUFBTTtRQUNoQixJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFlBQVksR0FBRyw2REFBNkQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRTNGLElBQUksWUFBWSxDQUFDLElBQUk7Z0JBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3ZELElBQUksWUFBWSxDQUFDLElBQUk7Z0JBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3ZELElBQUksWUFBWSxDQUFDLEVBQUU7Z0JBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3JELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDL0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbmFudERhdGFiYXNlQ29tbWFuZEhlbHBlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29tbWFuZCAtIENMSSBjb21tYW5kIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gYXJncy5pZGVudGlmaWVyIC0gVGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29tbWFuZCwgaWRlbnRpZmllcn0pIHtcbiAgICBpZiAoIWlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIgYXJndW1lbnRcIilcblxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb21tYW5kLmdldENvbmZpZ3VyYXRpb24oKVxuICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXJcbiAgICB0aGlzLnByb3ZpZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmdldFRlbmFudERhdGFiYXNlUHJvdmlkZXIoaWRlbnRpZmllcilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgdmFsaWRhdGVUZW5hbnREYXRhYmFzZUlkZW50aWZpZXIoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VDb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uLmdldERhdGFiYXNlQ29uZmlndXJhdGlvbigpW3RoaXMuaWRlbnRpZmllcl1cblxuICAgIGlmICghZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggZGF0YWJhc2UgaWRlbnRpZmllciBjb25maWd1cmVkOiAke3RoaXMuaWRlbnRpZmllcn1gKVxuICAgIH1cblxuICAgIGlmICghZGF0YWJhc2VDb25maWd1cmF0aW9uLnRlbmFudE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YWJhc2UgaWRlbnRpZmllciAke3RoaXMuaWRlbnRpZmllcn0gaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCB0ZW5hbnRPbmx5OiB0cnVlYClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmdldERpc2FibGVkRGF0YWJhc2VJZGVudGlmaWVycygpLmhhcyh0aGlzLmlkZW50aWZpZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyICR7dGhpcy5pZGVudGlmaWVyfSBpcyBkaXNhYmxlZCBieSBWRUxPQ0lPVVNfRElTQUJMRURfREFUQUJBU0VfSURFTlRJRklFUlNgKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5wcm92aWRlci5saXN0VGVuYW50cyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBwcm92aWRlciBmb3IgJHt0aGlzLmlkZW50aWZpZXJ9IG11c3QgZGVmaW5lIGxpc3RUZW5hbnRzYClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBhcHAgcnVudGltZSBpcyBpbml0aWFsaXplZC4gKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVJ1bnRpbWUoKSB7XG4gICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmluaXRpYWxpemUoe3R5cGU6IFwiZGItdGVuYW50c1wifSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duW10+fSAtIFRlbmFudHMuICovXG4gIGFzeW5jIGxpc3RUZW5hbnRzKCkge1xuICAgIHRoaXMudmFsaWRhdGVUZW5hbnREYXRhYmFzZUlkZW50aWZpZXIoKVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJ1bnRpbWUoKVxuXG4gICAgY29uc3QgdGVuYW50cyA9IGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm92aWRlci5saXN0VGVuYW50cyh7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGVuYW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuYW50IGRhdGFiYXNlIHByb3ZpZGVyIGZvciAke3RoaXMuaWRlbnRpZmllcn0gbXVzdCByZXR1cm4gYW4gYXJyYXkgZnJvbSBsaXN0VGVuYW50c2ApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbmFudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHtkYXRhYmFzZUNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgdGVuYW50OiB1bmtub3dufSkgOiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIE51bWJlciBvZiB0ZW5hbnRzIHByb2Nlc3NlZC5cbiAgICovXG4gIGFzeW5jIGVhY2hUZW5hbnQoY2FsbGJhY2spIHtcbiAgICBjb25zdCB0ZW5hbnRzID0gYXdhaXQgdGhpcy5saXN0VGVuYW50cygpXG4gICAgY29uc3QgcGFyYWxsZWxDb3VudCA9IHRoaXMucGFyYWxsZWxDb3VudCgpXG5cbiAgICBpZiAocGFyYWxsZWxDb3VudCA8PSAxKSB7XG4gICAgICBmb3IgKGNvbnN0IHRlbmFudCBvZiB0ZW5hbnRzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuVGVuYW50Q2FsbGJhY2soe2NhbGxiYWNrLCB0ZW5hbnR9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGVuYW50cy5sZW5ndGhcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0FycmF5PHtlcnJvcjogRXJyb3IsIHRlbmFudDogdW5rbm93bn0+fSAqL1xuICAgIGNvbnN0IGZhaWx1cmVzID0gW11cbiAgICBjb25zdCB3b3JrZXJzID0gW11cbiAgICBsZXQgdGVuYW50SW5kZXggPSAwXG4gICAgY29uc3Qgd29ya2VyQ291bnQgPSBNYXRoLm1pbihwYXJhbGxlbENvdW50LCB0ZW5hbnRzLmxlbmd0aClcblxuICAgIGZvciAobGV0IHdvcmtlckluZGV4ID0gMDsgd29ya2VySW5kZXggPCB3b3JrZXJDb3VudDsgd29ya2VySW5kZXgrKykge1xuICAgICAgd29ya2Vycy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0ZW5hbnRJbmRleCA8IHRlbmFudHMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgdGVuYW50ID0gdGVuYW50c1t0ZW5hbnRJbmRleF1cblxuICAgICAgICAgIHRlbmFudEluZGV4KytcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blRlbmFudENhbGxiYWNrKHtjYWxsYmFjaywgdGVuYW50fSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgZmFpbHVyZXMucHVzaCh7XG4gICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSksXG4gICAgICAgICAgICAgIHRlbmFudFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKCkpXG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2VycylcblxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmYWlsZWRUZW5hbnRMYWJlbHMgPSBmYWlsdXJlcy5tYXAoKGZhaWx1cmUpID0+IHRoaXMudGVuYW50TGFiZWwoZmFpbHVyZS50ZW5hbnQpKS5qb2luKFwiLCBcIilcblxuICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICBmYWlsdXJlcy5tYXAoKGZhaWx1cmUpID0+IGZhaWx1cmUuZXJyb3IpLFxuICAgICAgICBgRmFpbGVkIHRlbmFudCBkYXRhYmFzZSBjb21tYW5kIGZvciB0ZW5hbnQocyk6ICR7ZmFpbGVkVGVuYW50TGFiZWxzfWBcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gdGVuYW50cy5sZW5ndGhcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAtIE51bWJlciBvZiB0ZW5hbnRzIHRvIHByb2Nlc3MgY29uY3VycmVudGx5LiAqL1xuICBwYXJhbGxlbENvdW50KCkge1xuICAgIGNvbnN0IHBhcnNlZFByb2Nlc3NBcmdzID0gdGhpcy5jb21tYW5kLmFyZ3M/LnBhcnNlZFByb2Nlc3NBcmdzIHx8IHt9XG4gICAgbGV0IHBhcmFsbGVsQXJnID0gcGFyc2VkUHJvY2Vzc0FyZ3MucGFyYWxsZWxcblxuICAgIGlmIChwYXJhbGxlbEFyZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwYXJhbGxlbEFyZ0luZGV4ID0gdGhpcy5jb21tYW5kLnByb2Nlc3NBcmdzPy5pbmRleE9mKFwiLS1wYXJhbGxlbFwiKSA/PyAtMVxuXG4gICAgICBpZiAocGFyYWxsZWxBcmdJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRBcmcgPSB0aGlzLmNvbW1hbmQucHJvY2Vzc0FyZ3M/LltwYXJhbGxlbEFyZ0luZGV4ICsgMV1cblxuICAgICAgICBwYXJhbGxlbEFyZyA9IG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi1cIikgPyBuZXh0QXJnIDogdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbGxlbEFyZyA9PT0gdW5kZWZpbmVkIHx8IHBhcmFsbGVsQXJnID09PSBmYWxzZSkgcmV0dXJuIDFcbiAgICBpZiAocGFyYWxsZWxBcmcgPT09IHRydWUpIHJldHVybiAyMFxuXG4gICAgY29uc3QgcGFyYWxsZWxDb3VudCA9IE51bWJlcihwYXJhbGxlbEFyZylcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYXJhbGxlbENvdW50KSB8fCBwYXJhbGxlbENvdW50IDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAtLXBhcmFsbGVsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHdoZW4gYSB2YWx1ZSBpcyBwcm92aWRlZDogJHtwYXJhbGxlbEFyZ31gKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbGxlbENvdW50XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBUZW5hbnQgY2FsbGJhY2sgYXJncy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbih7ZGF0YWJhc2VDb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIHRlbmFudDogdW5rbm93bn0pIDogUHJvbWlzZTx2b2lkPn0gYXJncy5jYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGFyZ3MudGVuYW50IC0gVGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHJ1blRlbmFudENhbGxiYWNrKHtjYWxsYmFjaywgdGVuYW50fSkge1xuICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5ydW5XaXRoVGVuYW50KHRlbmFudCwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaXNEYXRhYmFzZUlkZW50aWZpZXJBY3RpdmUodGhpcy5pZGVudGlmaWVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyICR7dGhpcy5pZGVudGlmaWVyfSBpcyBpbmFjdGl2ZSBmb3IgdGVuYW50OiAke3RoaXMudGVuYW50TGFiZWwodGVuYW50KX1gKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBjYWxsYmFjayh7XG4gICAgICAgIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmVEYXRhYmFzZUNvbmZpZ3VyYXRpb24odGhpcy5pZGVudGlmaWVyKSxcbiAgICAgICAgdGVuYW50XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSB0ZW5hbnQgLSBUZW5hbnQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSHVtYW4gcmVhZGFibGUgdGVuYW50IGxhYmVsLlxuICAgKi9cbiAgdGVuYW50TGFiZWwodGVuYW50KSB7XG4gICAgaWYgKHRlbmFudCAmJiB0eXBlb2YgdGVuYW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCB0ZW5hbnRPYmplY3QgPSAvKiogQHR5cGUge3tpZD86IHVua25vd24sIG5hbWU/OiB1bmtub3duLCBzbHVnPzogdW5rbm93bn19ICovICh0ZW5hbnQpXG5cbiAgICAgIGlmICh0ZW5hbnRPYmplY3Quc2x1ZykgcmV0dXJuIFN0cmluZyh0ZW5hbnRPYmplY3Quc2x1ZylcbiAgICAgIGlmICh0ZW5hbnRPYmplY3QubmFtZSkgcmV0dXJuIFN0cmluZyh0ZW5hbnRPYmplY3QubmFtZSlcbiAgICAgIGlmICh0ZW5hbnRPYmplY3QuaWQpIHJldHVybiBTdHJpbmcodGVuYW50T2JqZWN0LmlkKVxuICAgIH1cblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0ZW5hbnQpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -299,6 +299,7 @@
|
|
|
299
299
|
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [createDatabase] - Creates the tenant database/schema for one tenant.
|
|
300
300
|
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [dropDatabase] - Drops the tenant database/schema for one tenant.
|
|
301
301
|
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [checkTenant] - Checks one tenant database before generic connection validation.
|
|
302
|
+
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [afterMigrateTenant] - Runs app-owned tenant work after generic migrations for one tenant.
|
|
302
303
|
*/
|
|
303
304
|
/**
|
|
304
305
|
* @typedef {object} ConfigurationArgsType
|
|
@@ -1123,6 +1124,15 @@ export type TenantDatabaseProviderType = {
|
|
|
1123
1124
|
identifier: string;
|
|
1124
1125
|
tenant: unknown;
|
|
1125
1126
|
}) => void | Promise<void>) | undefined;
|
|
1127
|
+
/**
|
|
1128
|
+
* - Runs app-owned tenant work after generic migrations for one tenant.
|
|
1129
|
+
*/
|
|
1130
|
+
afterMigrateTenant?: ((arg0: {
|
|
1131
|
+
configuration: import("./configuration.js").default;
|
|
1132
|
+
databaseConfiguration: DatabaseConfigurationType;
|
|
1133
|
+
identifier: string;
|
|
1134
|
+
tenant: unknown;
|
|
1135
|
+
}) => void | Promise<void>) | undefined;
|
|
1126
1136
|
};
|
|
1127
1137
|
export type ConfigurationArgsType = {
|
|
1128
1138
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration-types.d.ts","sourceRoot":"","sources":["../../src/configuration-types.js"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;;;;;GAMG;AAEH;;GAEG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;GAEG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH;;GAEG;AAEH;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AAEH;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;GAOG;AAEH;;;;GAIG;AAEH;;;;;;;;GAQG;AAEH;;;GAGG;AAEH;;GAEG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AAEH;;;GAGG;AAGH;;GAEG;AAEH;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AAEH;;;;;GAKG;AAEH;;;;;;;;;GASG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;GAEG;AAEH
|
|
1
|
+
{"version":3,"file":"configuration-types.d.ts","sourceRoot":"","sources":["../../src/configuration-types.js"],"names":[],"mappings":"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"}
|
|
@@ -300,6 +300,7 @@
|
|
|
300
300
|
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [createDatabase] - Creates the tenant database/schema for one tenant.
|
|
301
301
|
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [dropDatabase] - Drops the tenant database/schema for one tenant.
|
|
302
302
|
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [checkTenant] - Checks one tenant database before generic connection validation.
|
|
303
|
+
* @property {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : void | Promise<void>} [afterMigrateTenant] - Runs app-owned tenant work after generic migrations for one tenant.
|
|
303
304
|
*/
|
|
304
305
|
/**
|
|
305
306
|
* @typedef {object} ConfigurationArgsType
|
|
@@ -340,4 +341,4 @@
|
|
|
340
341
|
* @property {WebsocketMessageHandlerResolverType} [websocketMessageHandlerResolver] - Resolve a raw websocket message handler for each connection.
|
|
341
342
|
*/
|
|
342
343
|
export const nothing = {};
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7R0FHRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFHSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBRUgsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEBtb2R1bGUgdHlwZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9KTogUHJvbWlzZTx2b2lkPn0gQ29yc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uPzoge2NoYW5uZWw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59LCBjbGllbnQ6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzXCIpLmRlZmF1bHQsIHdlYnNvY2tldFNlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSk6IHR5cGVvZiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCB2b2lkIHwgUHJvbWlzZTx0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IFdlYnNvY2tldENoYW5uZWxSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHttZXNzYWdlOiBhbnksIHNlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8dm9pZD4gfCB2b2lkfSBbb25NZXNzYWdlXSAtIEhhbmRsZXIgZm9yIGluY29taW5nIHdlYnNvY2tldCBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe3Nlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8dm9pZD4gfCB2b2lkfSBbb25PcGVuXSAtIEhhbmRsZXIgd2hlbiB0aGUgd2Vic29ja2V0IHNlc3Npb24gb3BlbnMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uQ2xvc2VdIC0gSGFuZGxlciB3aGVuIHRoZSB3ZWJzb2NrZXQgc2Vzc2lvbiBjbG9zZXMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtlcnJvcjogRXJyb3IsIHNlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8dm9pZD4gfCB2b2lkfSBbb25FcnJvcl0gLSBIYW5kbGVyIHdoZW4gYSB3ZWJzb2NrZXQgbWVzc2FnZSBlcnJvcnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIGNsaWVudDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdCwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KTogV2Vic29ja2V0TWVzc2FnZUhhbmRsZXIgfCB2b2lkIHwgUHJvbWlzZTxXZWJzb2NrZXRNZXNzYWdlSGFuZGxlciB8IHZvaWQ+fSBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhpZDogc3RyaW5nKSA9PiB7ZGVmYXVsdDogdHlwZW9mIGltcG9ydChcIi4vaW5pdGlhbGl6ZXIuanNcIikuZGVmYXVsdH19IEluaXRpYWxpemVyc1JlcXVpcmVDb250ZXh0VHlwZVxuICogQHR5cGVkZWYge0luaXRpYWxpemVyc1JlcXVpcmVDb250ZXh0VHlwZSAmIHtcbiAqICAga2V5czogKCkgPT4gc3RyaW5nW10sXG4gKiAgIGlkOiBzdHJpbmdcbiAqIH19IFdlYnBhY2tSZXF1aXJlQ29udGV4dFxuICogQHR5cGVkZWYge3tyZXF1aXJlQ29udGV4dDogV2VicGFja1JlcXVpcmVDb250ZXh0fX0gSW5pdGlhbGl6ZXJzRXhwb3J0VHlwZVxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pIDogUHJvbWlzZTxJbml0aWFsaXplcnNFeHBvcnRUeXBlPn0gSW5pdGlhbGl6ZXJzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3FsQ29uZmlnXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlXSAtIERhdGFiYXNlIG5hbWUgZm9yIHRoZSBTUUwgZHJpdmVyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtvcHRpb25zXSAtIERyaXZlci1zcGVjaWZpYyBjb25uZWN0aW9uIG9wdGlvbnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zLmVuY3J5cHRdIC0gV2hldGhlciB0byBlbmNyeXB0IHRoZSBjb25uZWN0aW9uIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW29wdGlvbnMuc2NoZW1hXSAtIERlZmF1bHQgc2NoZW1hIGZvciB1bnF1YWxpZmllZCB0YWJsZSBsb29rdXBzIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW29wdGlvbnMuc2VydmVyTmFtZV0gLSBUTFMgU05JIHNlcnZlciBuYW1lIG92ZXJyaWRlIGZvciBNU1NRTCAoZW1wdHkgc3RyaW5nIGRpc2FibGVzIFNOSSkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGVdIC0gV2hldGhlciB0byB0cnVzdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Bhc3N3b3JkXSAtIFBhc3N3b3JkIGZvciB0aGUgU1FMIHVzZXIuXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3Bvb2xdIC0gQ29ubmVjdGlvbiBwb29sIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2wubWF4XSAtIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sLm1pbl0gLSBNaW5pbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5pZGxlVGltZW91dE1pbGxpc10gLSBJZGxlIHRpbWVvdXQgYmVmb3JlIHJlbGVhc2luZyBhIGNvbm5lY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlcnZlcl0gLSBTUUwgc2VydmVyIGhvc3RuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VyXSAtIFNRTCB1c2VybmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VDaGFyc2V0XSAtIERlZmF1bHQgY2hhcmFjdGVyIHNldCBhcHBsaWVkIGJ5IGBkYjpjcmVhdGVgIHZpYSBteXNxbC9tYXJpYWRiIGBDUkVBVEUgREFUQUJBU0UgLi4uIENIQVJBQ1RFUiBTRVRgLiBEaXN0aW5jdCBmcm9tIGBjaGFyc2V0YCwgd2hpY2ggaXMgdGhlIGNsaWVudCBjb25uZWN0aW9uIGNoYXJzZXQgZm9yd2FyZGVkIHRvIHRoZSBteXNxbDIgZHJpdmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZUNvbGxhdGlvbl0gLSBEZWZhdWx0IGNvbGxhdGlvbiBhcHBsaWVkIGJ5IGBkYjpjcmVhdGVgIHZpYSBteXNxbC9tYXJpYWRiIGBDUkVBVEUgREFUQUJBU0UgLi4uIENPTExBVEVgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBuYW1lIGZvciB0aGlzIGNvbm5lY3Rpb24uXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBbZHJpdmVyXSAtIERyaXZlciBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3Bvb2wvYmFzZS5qc1wiKS5kZWZhdWx0fSBbcG9vbFR5cGVdIC0gUG9vbCBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCkgOiB1bmtub3dufSBbZ2V0Q29ubmVjdGlvbl0gLSBDdXN0b20gY29ubmVjdGlvbiBmYWN0b3J5IG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIERhdGFiYXNlIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttaWdyYXRpb25zXSAtIFdoZXRoZXIgbWlncmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFzc3dvcmRdIC0gUGFzc3dvcmQgZm9yIHRoZSBkYXRhYmFzZSB1c2VyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIERhdGFiYXNlIHBvcnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gRnJpZW5kbHkgbmFtZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkgeyhmaWxlOiBzdHJpbmcpID0+IHN0cmluZ30gW2xvY2F0ZUZpbGVdIC0gT3B0aW9uYWwgc3FsaXRlLXdlYiBzcWwuanMgd2FzbSByZXNvbHZlciAoYGluaXRTcWxKcyh7bG9jYXRlRmlsZX0pYCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWFkT25seV0gLSBXaGV0aGVyIHdyaXRlcyBzaG91bGQgYmUgYmxvY2tlZCBmb3IgdGhpcyBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2NoZW1hXSAtIERlZmF1bHQgc2NoZW1hIGZvciB1bnF1YWxpZmllZCB0YWJsZSBsb29rdXBzIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzY2hlbWFDYWNoZV0gLSBXaGV0aGVyIHNjaGVtYSBtZXRhZGF0YSBzaG91bGQgYmUgY2FjaGVkIG9uIHRoZSBkcml2ZXIuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3JlY29yZF0gLSBSZWNvcmQtbGV2ZWwgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlY29yZC50cmFuc2FjdGlvbnNdIC0gV2hldGhlciByZWNvcmQgb3BlcmF0aW9ucyBzaG91bGQgdXNlIHRyYW5zYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2V0XSAtIFdoZXRoZXIgdG8gcmVzZXQgdGhlIGRhdGFiYXNlIG9uIHN0YXJ0dXAuXG4gKiBAcHJvcGVydHkge1NxbENvbmZpZ30gW3NxbENvbmZpZ10gLSBEcml2ZXItc3BlY2lmaWMgU1FMIGNvbmZpZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RlbmFudE9ubHldIC0gV2hldGhlciB0aGlzIGRhdGFiYXNlIGlkZW50aWZpZXIgaXMgb25seSBhY3RpdmUgaW5zaWRlIGEgcmVzb2x2ZWQgdGVuYW50IGNvbnRleHQuXG4gKiBAcHJvcGVydHkge1wibXNzcWxcIiB8IFwibXlzcWxcIiB8IFwicGdzcWxcIiB8IFwic3FsaXRlXCJ9IFt0eXBlXSAtIERhdGFiYXNlIHR5cGUgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlRGF0YWJhc2VdIC0gRGF0YWJhc2UgdG8gc3dpdGNoIHRvIGFmdGVyIGNvbm5lY3RpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VzZXJuYW1lXSAtIFVzZXJuYW1lIGZvciBkYXRhYmFzZSBhdXRoZW50aWNhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImRlYnVnLWxvdy1sZXZlbFwiIHwgXCJkZWJ1Z1wiIHwgXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIn0gTG9nTGV2ZWxcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdPdXRwdXRQYXlsb2FkXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIExvZyBsZXZlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIC0gRm9ybWF0dGVkIG1lc3NhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ViamVjdCAtIExvZyBzdWJqZWN0LlxuICogQHByb3BlcnR5IHtEYXRlfSB0aW1lc3RhbXAgLSBUaW1lc3RhbXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nT3V0cHV0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKExvZ2dpbmdPdXRwdXRQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHdyaXRlIC0gV3JpdGUgYSBsb2cgZW50cnkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsW119IFtsZXZlbHNdIC0gRGVmYXVsdCBsZXZlbHMgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dENvbmZpZ1xuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0fSBvdXRwdXQgLSBPdXRwdXQgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0FycmF5PExvZ0xldmVsPn0gW2xldmVsc10gLSBMZXZlbHMgZW5hYmxlZCBmb3IgdGhpcyBvdXRwdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ091dHB1dENvbmZpZyB8IExvZ2dpbmdPdXRwdXQgfCBpbXBvcnQoXCIuL2xvZ2dlci9iYXNlLWxvZ2dlci5qc1wiKS5kZWZhdWx0fSBMb2dnZXJDb25maWdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb25zb2xlXSAtIEVuYWJsZS9kaXNhYmxlIGNvbnNvbGUgbG9nZ2luZyBmb3IgcmVxdWVzdCBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgb2YgXCJ0ZXN0XCIgYW5kIGZvciBIVFRQIHNlcnZlciBsb2dzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmlsZV0gLSBFbmFibGUvZGlzYWJsZSB3cml0aW5nIGxvZ3MgdG8gYSBmaWxlLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gRGlyZWN0b3J5IHdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiBEZWZhdWx0cyB0byBcIjxwcm9qZWN0Pi9sb2dcIi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZVBhdGhdIC0gRXhwbGljaXQgcGF0aCBmb3IgdGhlIGxvZyBmaWxlLiBEZWZhdWx0cyB0byBcIjxkaXJlY3Rvcnk+LzxlbnZpcm9ubWVudD4ubG9nXCIuXG4gKiBAcHJvcGVydHkge0FycmF5PFwiZGVidWctbG93LWxldmVsXCIgfCBcImRlYnVnXCIgfCBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiPn0gW2xldmVsc10gLSBPdmVycmlkZSB3aGljaCBsb2cgbGV2ZWxzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWdMb3dMZXZlbF0gLSBDb252ZW5pZW5jZSBmbGFnIHRvIGluY2x1ZGUgdmVyeSBsb3ctbGV2ZWwgZGVidWcgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3F1ZXJ5TG9nZ2luZ10gLSBFbmFibGUvZGlzYWJsZSBkYXRhYmFzZSBxdWVyeSBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgdGVzdCBhbmQgZmFsc2UgaW4gdGVzdC5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2VyQ29uZmlnW119IFtsb2dnZXJzXSAtIExvZ2dlciBpbnN0YW5jZXMgKGNvbnZlcnRlZCB0byBvdXRwdXRzIHdoZW4gY29uZmlndXJlZCkuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdPdXRwdXRDb25maWdbXX0gW291dHB1dHNdIC0gRXhwbGljaXQgbG9nZ2VyIG91dHB1dHMgKG92ZXJyaWRlcyBjb25zb2xlL2ZpbGUgZGVmYXVsdHMgd2hlbiBwcm92aWRlZCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZW5hYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgYWxsb3dlZCB0byB3cml0ZSBzdHJ1Y3R1cmUgc3FsIGZpbGVzIGR1cmluZyBhdXRvbWF0aWMgbWlncmF0aW9uIGR1bXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Rpc2FibGVkRW52aXJvbm1lbnRzXSAtIEVudmlyb25tZW50cyB0aGF0IHNob3VsZCBza2lwIHdyaXRpbmcgc3RydWN0dXJlIHNxbCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImJlYWNvblwiIHwgXCJwb2xsaW5nXCJ9IEJhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneVxuICpcbiAqIC0gYFwiYmVhY29uXCJgIChkZWZhdWx0KTogZXZlbnQtZHJpdmVuIGRpc3BhdGNoLiBUaGVcbiAqICAgYGJhY2tncm91bmQtam9icy1tYWluYCBwcm9jZXNzIGRyYWlucyB0aGUgcXVldWUgb24gZW5xdWV1ZSwgb25cbiAqICAgd29ya2VyIHJlYWRpbmVzcywgb24gQmVhY29uIGJyb2FkY2FzdHMgKHNvIGNyb3NzLXByb2Nlc3MgZW5xdWV1ZXNcbiAqICAgd2FrZSBpdCksIGFuZCBhcm1zIGEgYHNldFRpbWVvdXRgIGZvciB0aGUgc29vbmVzdCBmdXR1cmUtc2NoZWR1bGVkXG4gKiAgIGpvYi4gRmFsbHMgYmFjayBncmFjZWZ1bGx5IHRvIGRpcmVjdCBpbi1wcm9jZXNzIHRyaWdnZXJpbmcgd2hlblxuICogICBCZWFjb24gaXMgbm90IGNvbmZpZ3VyZWQuXG4gKiAtIGBcInBvbGxpbmdcImA6IGxlZ2FjeSBtb2RlLCBydW5zIGEgZml4ZWQtaW50ZXJ2YWwgcG9sbCBvdmVyIHRoZVxuICogICBgYmFja2dyb3VuZF9qb2JzYCB0YWJsZSAoc2VlIGBwb2xsSW50ZXJ2YWxNc2ApLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllciB1c2VkIHRvIHN0b3JlIGJhY2tncm91bmQgam9icy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4Q29uY3VycmVudElubGluZUpvYnNdIC0gSG93IG1hbnkgYGZvcmtlZDogZmFsc2VgIGpvYnMgYSBzaW5nbGVcbiAqICAgYGJhY2tncm91bmQtam9icy13b3JrZXJgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIENvbmN1cnJlbmN5XG4gKiAgIGlzIGF0IHRoZSBKUyBldmVudC1sb29wIGxldmVsOiBldmVyeSBjb25jdXJyZW50IGpvYiBzaGFyZXMgdGhlIHdvcmtlcidzXG4gKiAgIHByb2Nlc3MgYW5kIERCIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhpcyBzaG91bGQgZml0IHRoZSBwb29sIHNpemUsIG5vdCB0aGVcbiAqICAgQ1BVIGNvdW50LiBGb3JraW5nIHJlbWFpbnMgdGhlIHJpZ2h0IHRvb2wgZm9yIG1lbW9yeSBpc29sYXRpb24gYWNyb3NzXG4gKiAgIGxvbmctcnVubmluZyBqb2JzIGFuZCBmb3IgdXNpbmcgbW9yZSBjb3Jlcy4gRGVmYXVsdDogYDRgLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic0Rpc3BhdGNoU3RyYXRlZ3l9IFtkaXNwYXRjaFN0cmF0ZWd5XSAtIEhvdyB0aGUgbWFpbiBwcm9jZXNzXG4gKiAgIGRldGVjdHMgbmV3IHdvcmsuIERlZmF1bHRzIHRvIGBcImJlYWNvblwiYCAoZXZlbnQtZHJpdmVuKS4gU2V0IHRvIGBcInBvbGxpbmdcImBcbiAqICAgdG8gcmVzdG9yZSB0aGUgbGVnYWN5IGZpeGVkLWludGVydmFsIHBvbGwuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvbGxJbnRlcnZhbE1zXSAtIFBvbGwgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLiBPbmx5IHVzZWRcbiAqICAgd2hlbiBgZGlzcGF0Y2hTdHJhdGVneSA9PT0gXCJwb2xsaW5nXCJgLiBEZWZhdWx0OiBgMTAwMGAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBCZWFjb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmFibGVkXSAtIFdoZXRoZXIgdG8gY29ubmVjdCB0byBhIEJlYWNvbiBicm9rZXIuIERlZmF1bHRzIHRvIGZhbHNlIHVubGVzcyBgaG9zdGAvYHBvcnRgIG9yIGBpblByb2Nlc3M6IHRydWVgIGFyZSBzZXQsIG9yIGVudiB2YXJzIGFyZSBwcmVzZW50LiBFeHBsaWNpdCBgZmFsc2VgIGRpc2FibGVzIEJlYWNvbiBldmVuIHdoZW4gZW52IHZhcnMgYXJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2luUHJvY2Vzc10gLSBXaGVuIHRydWUsIHVzZSBhIG1vZHVsZS1sZXZlbCBpbi1wcm9jZXNzIGJyb2tlciBzaW5nbGV0b24gaW5zdGVhZCBvZiBjb25uZWN0aW5nIG92ZXIgVENQLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgaG9zdGAvYHBvcnRgLiBVc2VmdWwgZm9yIHRlc3RzIGFuZCBzaW5nbGUtcHJvY2VzcyBkZXBsb3ltZW50cy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSBvZiB0aGUgQmVhY29uIGJyb2tlciBkYWVtb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIC0gUG9ydCBvZiB0aGUgQmVhY29uIGJyb2tlciBkYWVtb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BlZXJUeXBlXSAtIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGlzIHBlZXIgKGUuZy4gXCJzZXJ2ZXJcIiwgXCJiYWNrZ3JvdW5kLWpvYnMtd29ya2VyXCIpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkV2ZXJ5T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IFtmaXJzdEluXSAtIERlbGF5IGJlZm9yZSB0aGUgZmlyc3QgZW5xdWV1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBbZmlyc3RfaW5dIC0gU2lkZWtpcS1zdHlsZSBhbGlhcyBmb3IgYGZpcnN0SW5gLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7YW55W119IFthcmdzXSAtIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGpvYiB3aGVuIGVucXVldWVkLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvam9iLmpzXCIpLmRlZmF1bHR9IGNsYXNzIC0gSm9iIGNsYXNzIHRvIGVucXVldWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Nyb25dIC0gQ3JvbnRhYiBleHByZXNzaW9uICg1LWZpZWxkIFBPU0lYLCBwbHVzIGBAaG91cmx5YC9gQGRhaWx5YC9gQHdlZWtseWAvYEBtb250aGx5YC9gQHllYXJseWAvYEBtaWRuaWdodGApLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgZXZlcnlgLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIHRoZSBzY2hlZHVsZSBpcyBlbmFibGVkLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmcgfCBbbnVtYmVyIHwgc3RyaW5nLCBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXX0gW2V2ZXJ5XSAtIFJlcGVhdCBpbnRlcnZhbC4gRWl0aGVyIGBldmVyeWAgb3IgYGNyb25gIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9uc30gW29wdGlvbnNdIC0gSm9iIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb24+fSBqb2JzIC0gU2NoZWR1bGVkIGpvYnMga2V5ZWQgYnkgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA6IFNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbiB8IFByb21pc2U8U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uPn0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNMb2FkZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG5hbWU6IHN0cmluZywgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pn0pIDogUmVjb3JkPHN0cmluZywgYW55Pn0gW2NyZWF0ZV0gLSBPcHRpb25hbCBmYWN0b3J5IGZvciBhIGN1c3RvbSBhdHRhY2htZW50IGRyaXZlciBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7bmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gUmVjb3JkPHN0cmluZywgYW55Pn0gW2RyaXZlckNsYXNzXSAtIE9wdGlvbmFsIGN1c3RvbSBhdHRhY2htZW50IGRyaXZlciBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2luc3RhbmNlXSAtIE9wdGlvbmFsIGN1c3RvbSBhdHRhY2htZW50IGRyaXZlciBpbnN0YW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEF0dGFjaG1lbnRzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZWZhdWx0RHJpdmVyXSAtIERlZmF1bHQgYXR0YWNobWVudCBzdG9yYWdlIGRyaXZlciBuYW1lLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvbiAmIFJlY29yZDxzdHJpbmcsIGFueT4+fSBbZHJpdmVyc10gLSBOYW1lZCBhdHRhY2htZW50IGRyaXZlciBjb25maWd1cmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FsbG93UGF0aElucHV0XSAtIFdoZXRoZXIgYHtwYXRoOiAuLi59YCBhdHRhY2htZW50IGlucHV0IGlzIGFsbG93ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYWxsb3dlZFBhdGhQcmVmaXhlc10gLSBPcHRpb25hbCBhbGxvd2xpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIGB7cGF0aDogLi4ufWAgaW5wdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNYWlsZXJCYWNrZW5kXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bn0gZGVsaXZlciAtIERlbGl2ZXIgYSBtYWlsZXIgcGF5bG9hZC5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gTG9jYWxlRmFsbGJhY2tzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlbGF0aW9uc2hpcENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIFJlbGF0aW9uc2hpcCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbF0gLSBUYXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIEFsaWFzIG9mIHRhcmdldCBtb2RlbCBjbGFzcyBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbENsYXNzTmFtZV0gLSBFeHBsaWNpdCB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gQ29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3FsVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YVR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtudWxsXSAtIFdoZXRoZXIgdmFsdWUgY2FuIGJlIG51bGwuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzZWxlY3RlZEJ5RGVmYXVsdF0gLSBXaGV0aGVyIGluY2x1ZGVkIGluIGRlZmF1bHQgc2VyaWFsaXphdGlvbi4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRhY2htZW50Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtcImhhc09uZVwiIHwgXCJoYXNNYW55XCJ9IHR5cGUgLSBBdHRhY2htZW50IGNhcmRpbmFsaXR5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uIHwgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UtY29sdW1uLmpzXCIpLmRlZmF1bHQgfCBib29sZWFuPn0gYXR0cmlidXRlcyAtIEF0dHJpYnV0ZXMgdG8gZXhwb3NlIG9uIHRoZSBmcm9udGVuZCBtb2RlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthYmlsaXRpZXNdIC0gQWJpbGl0eSBhY3Rpb24gbGlzdCAoY2FtZWxDYXNlIGFjdGlvbiBuYW1lcykuIERlZmF1bHRzIHRvIGBbXCJyZWFkXCJdYCBmb3IgYGZpbmRgIGFuZCBgaW5kZXhgIHdoZW4gb21pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uPn0gW2F0dGFjaG1lbnRzXSAtIEF0dGFjaG1lbnQgaGVscGVycyBrZXllZCBieSBhdHRhY2htZW50IG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbY29tbWFuZHNdIC0gTGVnYWN5IGJ1aWx0LWluIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBgZGVzdHJveWAsIGBhdHRhY2hgLCBgZG93bmxvYWRgLCBgdXJsYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbY29sbGVjdGlvbkNvbW1hbmRzXSAtIEN1c3RvbSBjb2xsZWN0aW9uIGNvbW1hbmRzIGFzIGNhbWVsQ2FzZSBtZXRob2QgbmFtZXMuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gZWFjaCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW21lbWJlckNvbW1hbmRzXSAtIEN1c3RvbSBtZW1iZXIgY29tbWFuZHMgYXMgY2FtZWxDYXNlIG1ldGhvZCBuYW1lcy4gVGhlIHJ1bnRpbWUgZGVyaXZlcyB0aGUga2ViYWItY2FzZSBjb21tYW5kIHNsdWcgZnJvbSBlYWNoIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc10gLSBCdWlsdC1pbiBjb2xsZWN0aW9uIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBjcmVhdGVgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtidWlsdEluTWVtYmVyQ29tbWFuZHNdIC0gQnVpbHQtaW4gbWVtYmVyIGNvbW1hbmQgbmFtZXMgKGBmaW5kYCwgYHVwZGF0ZWAsIGBkZXN0cm95YCwgYGF0dGFjaGAsIGBkb3dubG9hZGAsIGB1cmxgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtyZWxhdGlvbnNoaXBzXSAtIFJlbGF0aW9uc2hpcCBuYW1lcyB0byBleHBvc2UgaW4gZnJvbnRlbmQgbW9kZWxzLiBUeXBlIGFuZCB0YXJnZXQgbW9kZWwgYXJlIGluZmVycmVkIGZyb20gdGhlIGJhY2tlbmQgbW9kZWwncyByZWdpc3RlcmVkIHJlbGF0aW9uc2hpcHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByaW1hcnlLZXldIC0gUHJpbWFyeSBrZXkgYXR0cmlidXRlIG5hbWUuXG4gKiBAcHJvcGVydHkge0Zyb250ZW5kTW9kZWxSZXNvdXJjZVNlcnZlckNvbmZpZ3VyYXRpb259IFtzZXJ2ZXJdIC0gT3B0aW9uYWwgbGVnYWN5IGJhY2tlbmQgYmVoYXZpb3Igb3ZlcnJpZGVzIGZvciBidWlsdC1pbiBmcm9udGVuZCBhY3Rpb25zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09taXQ8RnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbiwgXCJhYmlsaXRpZXNcIiB8IFwiYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1wiIHwgXCJidWlsdEluTWVtYmVyQ29tbWFuZHNcIiB8IFwiY29sbGVjdGlvbkNvbW1hbmRzXCIgfCBcImNvbW1hbmRzXCIgfCBcIm1lbWJlckNvbW1hbmRzXCI+ICYge1xuICogICBhYmlsaXRpZXM6IEZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllc0NvbmZpZ3VyYXRpb25cbiAqICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgY29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIG1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiB9fSBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlfSBGcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2luZGV4XSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmluZF0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgZmluZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY3JlYXRlXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBjcmVhdGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VwZGF0ZV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgdXBkYXRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXN0cm95XSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBkZXN0cm95LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlU2VydmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IChib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+KX0gW2JlZm9yZUFjdGlvbl0gLSBPcHRpb25hbCBjYWxsYmFjayBydW4gYmVmb3JlIGJ1aWx0LWluIGZyb250ZW5kIGFjdGlvbnMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiaW5kZXhcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdPn0gW3JlY29yZHNdIC0gUmVjb3JkcyBsb2FkZXIgZm9yIGZyb250ZW5kSW5kZXguXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiaW5kZXhcIiB8IFwiZmluZFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBtb2RlbDogaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pIDogUmVjb3JkPHN0cmluZywgYW55PiB8IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFtzZXJpYWxpemVdIC0gUmVjb3JkIHNlcmlhbGl6ZXIgZm9yIHJlc3BvbnNlIHBheWxvYWRzLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImZpbmRcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiYXR0YWNoXCIgfCBcImRvd25sb2FkXCIgfCBcInVybFwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgaWQ6IHN0cmluZyB8IG51bWJlcn0pIDogUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgbnVsbD59IFtmaW5kXSAtIFJlY29yZCBsb2FkZXIgZm9yIGZpbmQvdXBkYXRlL2Rlc3Ryb3kvYXR0YWNoL2Rvd25sb2FkL3VybCBhY3Rpb25zLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImNyZWF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgYW55Pn0pIDogUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gW2NyZWF0ZV0gLSBDdXN0b20gY3JlYXRlIGNhbGxiYWNrLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcInVwZGF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT59KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBbdXBkYXRlXSAtIEN1c3RvbSB1cGRhdGUgY2FsbGJhY2suXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiZGVzdHJveVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8dm9pZD59IFtkZXN0cm95XSAtIEN1c3RvbSBkZXN0cm95IGNhbGxiYWNrLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFBhdGggdG8gdGhlIGJhY2tlbmQgcHJvamVjdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZnJvbnRlbmRNb2RlbHNPdXRwdXRQYXRoXSAtIE9wdGlvbmFsIG91dHB1dCBwcm9qZWN0IHBhdGggd2hlcmUgYHNyYy9mcm9udGVuZC1tb2RlbHNgIHNob3VsZCBiZSBnZW5lcmF0ZWQuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb24+fSBbZnJvbnRlbmRNb2RlbHNdIC0gQXV0by1kaXNjb3ZlcmVkIGZyb250ZW5kIG1vZGVsIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIGNsYXNzIG5hbWUuIFNldCBpbnRlcm5hbGx5IGJ5IHRoZSBlbnZpcm9ubWVudCBoYW5kbGVyIOKAlCBkbyBub3Qgc2V0IG1hbnVhbGx5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUm91dGVSZXNvbHZlckhvb2tBcmdzXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gcGFyYW1zIC0gTXV0YWJsZSByZXF1ZXN0IHBhcmFtcyBvYmplY3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3VycmVudFBhdGggLSBSZXF1ZXN0IHBhdGggd2l0aG91dCBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2hhc01hdGNoaW5nQ3VzdG9tUm91dGVdIC0gVHJ1ZSB3aGVuIG1hdGNoaW5nIGEgY29uZmlndXJlZCBjdXN0b20gcm91dGUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IHJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0gcmVzcG9uc2UgLSBSZXNwb25zZSBvYmplY3QuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vcm91dGVzL3Jlc29sdmVyLmpzXCIpLmRlZmF1bHR9IHJlc29sdmVyIC0gUmVzb2x2ZXIgaW5zdGFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSb3V0ZVJlc29sdmVySG9va1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbiAtIERhc2hlcml6ZWQgYWN0aW9uIG5hbWUgKGZvciBleGFtcGxlIGBmcm9udGVuZC1pbmRleGApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRyb2xsZXIgLSBDb250cm9sbGVyIHBhdGggKGZvciBleGFtcGxlIGBhY2NvdW50c2ApLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHR9IFtjb250cm9sbGVyQ2xhc3NdIC0gT3B0aW9uYWwgY29udHJvbGxlciBjbGFzcyBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29udHJvbGxlclBhdGhdIC0gT3B0aW9uYWwgYWJzb2x1dGUvcmVsYXRpdmUgY29udHJvbGxlciBmaWxlIHBhdGggb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtwYXJhbXNdIC0gRXh0cmEgcGFyYW1zIHRvIG1lcmdlIGZvciBjb250cm9sbGVyL2FjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmlld1BhdGhdIC0gT3B0aW9uYWwgdmlldyBwYXRoIG92ZXJyaWRlIHVzZWQgYnkgY29udHJvbGxlciByZW5kZXIgbG9va3Vwcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbihSb3V0ZVJlc29sdmVySG9va0FyZ3MpIDogUm91dGVSZXNvbHZlckhvb2tSZXN1bHQgfCBudWxsIHwgUHJvbWlzZTxSb3V0ZVJlc29sdmVySG9va1Jlc3VsdCB8IG51bGw+fSBSb3V0ZVJlc29sdmVySG9va1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdH0gQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIHJlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSkgOiBpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdm9pZCB8IFByb21pc2U8aW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBBYmlsaXR5UmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIHJlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCBzdWJzY3JpcHRpb24/OiB7Y2hhbm5lbDogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn19KSA6IHVua25vd24gfCB2b2lkIHwgUHJvbWlzZTx1bmtub3duIHwgdm9pZD59IFRlbmFudFJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogdW5rbm93bn0pIDogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSB8IFBhcnRpYWw8RGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZT4gfCB2b2lkfSBUZW5hbnREYXRhYmFzZVJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBpZGVudGlmaWVyOiBzdHJpbmd9KSA6IHVua25vd25bXSB8IFByb21pc2U8dW5rbm93bltdPn0gbGlzdFRlbmFudHMgLSBMaXN0cyB0ZW5hbnRzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQsIGNoZWNrZWQsIG9yIG1pZ3JhdGVkIGZvciB0aGlzIGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogdW5rbm93bn0pIDogdm9pZCB8IFByb21pc2U8dm9pZD59IFtjcmVhdGVEYXRhYmFzZV0gLSBDcmVhdGVzIHRoZSB0ZW5hbnQgZGF0YWJhc2Uvc2NoZW1hIGZvciBvbmUgdGVuYW50LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6IHVua25vd259KSA6IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbZHJvcERhdGFiYXNlXSAtIERyb3BzIHRoZSB0ZW5hbnQgZGF0YWJhc2Uvc2NoZW1hIGZvciBvbmUgdGVuYW50LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6IHVua25vd259KSA6IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbY2hlY2tUZW5hbnRdIC0gQ2hlY2tzIG9uZSB0ZW5hbnQgZGF0YWJhc2UgYmVmb3JlIGdlbmVyaWMgY29ubmVjdGlvbiB2YWxpZGF0aW9uLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29uZmlndXJhdGlvbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvbG9hZF0gLSBHbG9iYWxseSBlbmFibGUgYXV0by1iYXRjaC1wcmVsb2FkIG9mIHJlbGF0aW9uc2hpcHMgb24gbGF6eSBhY2Nlc3MuIERlZmF1bHQgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Q29yc1R5cGV9IFtjb3JzXSAtIENPUlMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEhUVFAgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb29raWVTZWNyZXRdIC0gU2VjcmV0IGZvciBlbmNyeXB0aW5nIGNvb2tpZXMuXG4gKiBAcHJvcGVydHkge0FiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVtdfSBbYWJpbGl0eVJlc291cmNlc10gLSBSZXNvdXJjZSBjbGFzc2VzIHVzZWQgdG8gZGVmaW5lIGFiaWxpdGllcyBwZXIgbW9kZWwuXG4gKiBAcHJvcGVydHkge0FiaWxpdHlSZXNvbHZlclR5cGV9IFthYmlsaXR5UmVzb2x2ZXJdIC0gUmVzb2x2ZXIgZm9yIGNyZWF0aW5nIHJlcXVlc3Qtc2NvcGVkIGFiaWxpdHkgaW5zdGFuY2VzLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50c0NvbmZpZ3VyYXRpb259IFthdHRhY2htZW50c10gLSBBdHRhY2htZW50IHN0b3JhZ2UgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmFja2VuZFByb2plY3RDb25maWd1cmF0aW9uW119IFtiYWNrZW5kUHJvamVjdHNdIC0gQmFja2VuZCBwcm9qZWN0IGRlZmluaXRpb25zIHVzZWQgZm9yIGZyb250ZW5kIG1vZGVsIGdlbmVyYXRpb24uXG4gKiBAcHJvcGVydHkge3tba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXTogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX19fSBkYXRhYmFzZSAtIERhdGFiYXNlIGNvbmZpZ3VyYXRpb25zIGtleWVkIGJ5IGVudmlyb25tZW50IGFuZCBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWddIC0gRW5hYmxlIGRlYnVnIGxvZ2dpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RpcmVjdG9yeV0gLSBCYXNlIGRpcmVjdG9yeSBmb3IgdGhlIHByb2plY3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmZvcmNlVGVuYW50RGF0YWJhc2VTY29wZXNdIC0gUmVxdWlyZSB0ZW5hbnQtc3dpdGNoZWQgbW9kZWwgcXVlcmllcyB0byByZXNvbHZlIGEgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Vudmlyb25tZW50XSAtIEN1cnJlbnQgZW52aXJvbm1lbnQgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9lbnZpcm9ubWVudC1oYW5kbGVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGVudmlyb25tZW50SGFuZGxlciAtIEVudmlyb25tZW50IGhhbmRsZXIgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtleHBvc2VJbnRlcm5hbEVycm9yc1RvQ2xpZW50c10gLSBSZXR1cm4gdW5leHBlY3RlZCBpbnRlcm5hbCBlcnJvciBkZXRhaWxzIGluIGNsaWVudCBBUEkgcGF5bG9hZHMgb3V0c2lkZSBwcm9kdWN0aW9uLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2luZ0NvbmZpZ3VyYXRpb259IFtsb2dnaW5nXSAtIExvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9ufSBbYmFja2dyb3VuZEpvYnNdIC0gQmFja2dyb3VuZCBqb2JzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JlYWNvbkNvbmZpZ3VyYXRpb259IFtiZWFjb25dIC0gQmVhY29uIGJyb2FkY2FzdCBidXMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uIHwgU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNMb2FkZXJUeXBlfSBbc2NoZWR1bGVkQmFja2dyb3VuZEpvYnNdIC0gU2NoZWR1bGVkIGJhY2tncm91bmQgam9icyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtNYWlsZXJCYWNrZW5kfSBbbWFpbGVyQmFja2VuZF0gLSBNYWlsIGRlbGl2ZXJ5IGJhY2tlbmQuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgdHlwZTogc3RyaW5nfSkgOiB2b2lkfSBpbml0aWFsaXplTW9kZWxzIC0gSG9vayB0byByZWdpc3RlciBtb2RlbHMgZm9yIGEgZ2l2ZW4gaW5pdGlhbGl6YXRpb24gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7SW5pdGlhbGl6ZXJzVHlwZX0gW2luaXRpYWxpemVyc10gLSBJbml0aWFsaXplciBsb2FkZXIgZm9yIGVudmlyb25tZW50IGJvb3RzdHJhcHBpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IGZ1bmN0aW9uKCkgOiBzdHJpbmd9IGxvY2FsZSAtIERlZmF1bHQgbG9jYWxlIG9yIGxvY2FsZSByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGxvY2FsZXMgLSBTdXBwb3J0ZWQgbG9jYWxlcy5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxlRmFsbGJhY2tzVHlwZX0gbG9jYWxlRmFsbGJhY2tzIC0gTG9jYWxlIGZhbGxiYWNrIG1hcC5cbiAqIEBwcm9wZXJ0eSB7U3RydWN0dXJlU3FsQ29uZmlndXJhdGlvbn0gW3N0cnVjdHVyZVNxbF0gLSBTdHJ1Y3R1cmUgU1FMIGdlbmVyYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7VGVuYW50UmVzb2x2ZXJUeXBlfSBbdGVuYW50UmVzb2x2ZXJdIC0gUmVzb2x2ZXIgZm9yIGNyZWF0aW5nIHJlcXVlc3Qtc2NvcGVkIHRlbmFudCBjb250ZXh0IG9iamVjdHMuXG4gKiBAcHJvcGVydHkge1RlbmFudERhdGFiYXNlUmVzb2x2ZXJUeXBlfSBbdGVuYW50RGF0YWJhc2VSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgZGVyaXZpbmcgdGVuYW50LXNwZWNpZmljIGRhdGFiYXNlIGNvbmZpZyBvdmVycmlkZXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFRlbmFudERhdGFiYXNlUHJvdmlkZXJUeXBlPn0gW3RlbmFudERhdGFiYXNlUHJvdmlkZXJzXSAtIFRlbmFudCBkYXRhYmFzZSBsaWZlY3ljbGUgcHJvdmlkZXJzIGtleWVkIGJ5IGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rlc3RpbmddIC0gUGF0aCB0byB0aGUgdGVzdGluZyBjb25maWd1cmF0aW9uIGZpbGUuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbdGltZXpvbmVPZmZzZXRNaW51dGVzXSAtIERlZmF1bHQgdGltZXpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHN0cmluZ1tdfSBbdHJ1c3RlZFByb3hpZXNdIC0gVHJ1c3RlZCByZXZlcnNlIHByb3h5IGFkZHJlc3MgcmFuZ2VzIHVzZWQgdG8gcmVzb2x2ZSByZXF1ZXN0IHJlbW90ZSBhZGRyZXNzZXMgZnJvbSBmb3J3YXJkaW5nIGhlYWRlcnMuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbcmVxdWVzdFRpbWVvdXRNc10gLSBUaW1lb3V0IGluIHNlY29uZHMgZm9yIGNvbXBsZXRpbmcgYSBIVFRQIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge1JvdXRlUmVzb2x2ZXJIb29rVHlwZVtdfSBbcm91dGVSZXNvbHZlckhvb2tzXSAtIEhvb2sgY2FsbGJhY2tzIHRoYXQgY2FuIGhpamFjayB1bnJlc29sdmVkIHJvdXRlcy5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0Q2hhbm5lbFJlc29sdmVyVHlwZX0gW3dlYnNvY2tldENoYW5uZWxSZXNvbHZlcl0gLSBSZXNvbHZlIGEgd2Vic29ja2V0IGNoYW5uZWwgY2xhc3MvaW5zdGFuY2UgZm9yIGVhY2ggY29ubmVjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGV9IFt3ZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyXSAtIFJlc29sdmUgYSByYXcgd2Vic29ja2V0IG1lc3NhZ2UgaGFuZGxlciBmb3IgZWFjaCBjb25uZWN0aW9uLlxuICovXG5cbmV4cG9ydCBjb25zdCBub3RoaW5nID0ge31cbiJdfQ==
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7R0FHRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFHSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUVILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAbW9kdWxlIHR5cGVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSk6IFByb21pc2U8dm9pZD59IENvcnNUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHN1YnNjcmlwdGlvbj86IHtjaGFubmVsOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSwgY2xpZW50OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9pbmRleC5qc1wiKS5kZWZhdWx0LCB3ZWJzb2NrZXRTZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0LCBjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pOiB0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZCB8IFByb21pc2U8dHlwZW9mIGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBXZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7bWVzc2FnZTogYW55LCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uTWVzc2FnZV0gLSBIYW5kbGVyIGZvciBpbmNvbWluZyB3ZWJzb2NrZXQgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uT3Blbl0gLSBIYW5kbGVyIHdoZW4gdGhlIHdlYnNvY2tldCBzZXNzaW9uIG9wZW5zLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7c2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdH0pIDogUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbkNsb3NlXSAtIEhhbmRsZXIgd2hlbiB0aGUgd2Vic29ja2V0IHNlc3Npb24gY2xvc2VzLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7ZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uRXJyb3JdIC0gSGFuZGxlciB3aGVuIGEgd2Vic29ja2V0IG1lc3NhZ2UgZXJyb3JzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtyZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCBjbGllbnQ6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzXCIpLmRlZmF1bHQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSk6IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZCB8IFByb21pc2U8V2Vic29ja2V0TWVzc2FnZUhhbmRsZXIgfCB2b2lkPn0gV2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoaWQ6IHN0cmluZykgPT4ge2RlZmF1bHQ6IHR5cGVvZiBpbXBvcnQoXCIuL2luaXRpYWxpemVyLmpzXCIpLmRlZmF1bHR9fSBJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGVcbiAqIEB0eXBlZGVmIHtJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGUgJiB7XG4gKiAgIGtleXM6ICgpID0+IHN0cmluZ1tdLFxuICogICBpZDogc3RyaW5nXG4gKiB9fSBXZWJwYWNrUmVxdWlyZUNvbnRleHRcbiAqIEB0eXBlZGVmIHt7cmVxdWlyZUNvbnRleHQ6IFdlYnBhY2tSZXF1aXJlQ29udGV4dH19IEluaXRpYWxpemVyc0V4cG9ydFR5cGVcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8SW5pdGlhbGl6ZXJzRXhwb3J0VHlwZT59IEluaXRpYWxpemVyc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBuYW1lIGZvciB0aGUgU1FMIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbb3B0aW9uc10gLSBEcml2ZXItc3BlY2lmaWMgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy5lbmNyeXB0XSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29ubmVjdGlvbiAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNlcnZlck5hbWVdIC0gVExTIFNOSSBzZXJ2ZXIgbmFtZSBvdmVycmlkZSBmb3IgTVNTUUwgKGVtcHR5IHN0cmluZyBkaXNhYmxlcyBTTkkpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXSAtIFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIFNRTCB1c2VyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtwb29sXSAtIENvbm5lY3Rpb24gcG9vbCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sLm1heF0gLSBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5taW5dIC0gTWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2wuaWRsZVRpbWVvdXRNaWxsaXNdIC0gSWRsZSB0aW1lb3V0IGJlZm9yZSByZWxlYXNpbmcgYSBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZXJ2ZXJdIC0gU1FMIHNlcnZlciBob3N0bmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlcl0gLSBTUUwgdXNlcm5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlQ2hhcnNldF0gLSBEZWZhdWx0IGNoYXJhY3RlciBzZXQgYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDSEFSQUNURVIgU0VUYC4gRGlzdGluY3QgZnJvbSBgY2hhcnNldGAsIHdoaWNoIGlzIHRoZSBjbGllbnQgY29ubmVjdGlvbiBjaGFyc2V0IGZvcndhcmRlZCB0byB0aGUgbXlzcWwyIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VDb2xsYXRpb25dIC0gRGVmYXVsdCBjb2xsYXRpb24gYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDT0xMQVRFYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VdIC0gRGF0YWJhc2UgbmFtZSBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gW2RyaXZlcl0gLSBEcml2ZXIgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9wb29sL2Jhc2UuanNcIikuZGVmYXVsdH0gW3Bvb2xUeXBlXSAtIFBvb2wgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpIDogdW5rbm93bn0gW2dldENvbm5lY3Rpb25dIC0gQ3VzdG9tIGNvbm5lY3Rpb24gZmFjdG9yeSBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBEYXRhYmFzZSBob3N0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbWlncmF0aW9uc10gLSBXaGV0aGVyIG1pZ3JhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Bhc3N3b3JkXSAtIFBhc3N3b3JkIGZvciB0aGUgZGF0YWJhc2UgdXNlci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBEYXRhYmFzZSBwb3J0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEZyaWVuZGx5IG5hbWUgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHsoZmlsZTogc3RyaW5nKSA9PiBzdHJpbmd9IFtsb2NhdGVGaWxlXSAtIE9wdGlvbmFsIHNxbGl0ZS13ZWIgc3FsLmpzIHdhc20gcmVzb2x2ZXIgKGBpbml0U3FsSnMoe2xvY2F0ZUZpbGV9KWApLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVhZE9ubHldIC0gV2hldGhlciB3cml0ZXMgc2hvdWxkIGJlIGJsb2NrZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2NoZW1hQ2FjaGVdIC0gV2hldGhlciBzY2hlbWEgbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCBvbiB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtyZWNvcmRdIC0gUmVjb3JkLWxldmVsIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWNvcmQudHJhbnNhY3Rpb25zXSAtIFdoZXRoZXIgcmVjb3JkIG9wZXJhdGlvbnMgc2hvdWxkIHVzZSB0cmFuc2FjdGlvbnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNldF0gLSBXaGV0aGVyIHRvIHJlc2V0IHRoZSBkYXRhYmFzZSBvbiBzdGFydHVwLlxuICogQHByb3BlcnR5IHtTcWxDb25maWd9IFtzcWxDb25maWddIC0gRHJpdmVyLXNwZWNpZmljIFNRTCBjb25maWcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt0ZW5hbnRPbmx5XSAtIFdoZXRoZXIgdGhpcyBkYXRhYmFzZSBpZGVudGlmaWVyIGlzIG9ubHkgYWN0aXZlIGluc2lkZSBhIHJlc29sdmVkIHRlbmFudCBjb250ZXh0LlxuICogQHByb3BlcnR5IHtcIm1zc3FsXCIgfCBcIm15c3FsXCIgfCBcInBnc3FsXCIgfCBcInNxbGl0ZVwifSBbdHlwZV0gLSBEYXRhYmFzZSB0eXBlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VzZURhdGFiYXNlXSAtIERhdGFiYXNlIHRvIHN3aXRjaCB0byBhZnRlciBjb25uZWN0aW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VybmFtZV0gLSBVc2VybmFtZSBmb3IgZGF0YWJhc2UgYXV0aGVudGljYXRpb24uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7XCJkZWJ1Zy1sb3ctbGV2ZWxcIiB8IFwiZGVidWdcIiB8IFwiaW5mb1wiIHwgXCJ3YXJuXCIgfCBcImVycm9yXCJ9IExvZ0xldmVsXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nT3V0cHV0UGF5bG9hZFxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBMb2cgbGV2ZWwuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIEZvcm1hdHRlZCBtZXNzYWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN1YmplY3QgLSBMb2cgc3ViamVjdC5cbiAqIEBwcm9wZXJ0eSB7RGF0ZX0gdGltZXN0YW1wIC0gVGltZXN0YW1wLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbihMb2dnaW5nT3V0cHV0UGF5bG9hZCk6IFByb21pc2U8dm9pZD4gfCB2b2lkfSB3cml0ZSAtIFdyaXRlIGEgbG9nIGVudHJ5LlxuICogQHByb3BlcnR5IHtMb2dMZXZlbFtdfSBbbGV2ZWxzXSAtIERlZmF1bHQgbGV2ZWxzIGZvciB0aGlzIG91dHB1dC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdPdXRwdXRDb25maWdcbiAqIEBwcm9wZXJ0eSB7TG9nZ2luZ091dHB1dH0gb3V0cHV0IC0gT3V0cHV0IGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBcnJheTxMb2dMZXZlbD59IFtsZXZlbHNdIC0gTGV2ZWxzIGVuYWJsZWQgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0xvZ2dpbmdPdXRwdXRDb25maWcgfCBMb2dnaW5nT3V0cHV0IHwgaW1wb3J0KFwiLi9sb2dnZXIvYmFzZS1sb2dnZXIuanNcIikuZGVmYXVsdH0gTG9nZ2VyQ29uZmlnXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbY29uc29sZV0gLSBFbmFibGUvZGlzYWJsZSBjb25zb2xlIGxvZ2dpbmcgZm9yIHJlcXVlc3QgbG9nZ2luZy4gRGVmYXVsdHMgdG8gdHJ1ZSBvdXRzaWRlIG9mIFwidGVzdFwiIGFuZCBmb3IgSFRUUCBzZXJ2ZXIgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2ZpbGVdIC0gRW5hYmxlL2Rpc2FibGUgd3JpdGluZyBsb2dzIHRvIGEgZmlsZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGlyZWN0b3J5XSAtIERpcmVjdG9yeSB3aGVyZSBsb2cgZmlsZXMgYXJlIHN0b3JlZC4gRGVmYXVsdHMgdG8gXCI8cHJvamVjdD4vbG9nXCIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbGVQYXRoXSAtIEV4cGxpY2l0IHBhdGggZm9yIHRoZSBsb2cgZmlsZS4gRGVmYXVsdHMgdG8gXCI8ZGlyZWN0b3J5Pi88ZW52aXJvbm1lbnQ+LmxvZ1wiLlxuICogQHByb3BlcnR5IHtBcnJheTxcImRlYnVnLWxvdy1sZXZlbFwiIHwgXCJkZWJ1Z1wiIHwgXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIj59IFtsZXZlbHNdIC0gT3ZlcnJpZGUgd2hpY2ggbG9nIGxldmVscyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlYnVnTG93TGV2ZWxdIC0gQ29udmVuaWVuY2UgZmxhZyB0byBpbmNsdWRlIHZlcnkgbG93LWxldmVsIGRlYnVnIGxvZ3MuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtxdWVyeUxvZ2dpbmddIC0gRW5hYmxlL2Rpc2FibGUgZGF0YWJhc2UgcXVlcnkgbG9nZ2luZy4gRGVmYXVsdHMgdG8gdHJ1ZSBvdXRzaWRlIHRlc3QgYW5kIGZhbHNlIGluIHRlc3QuXG4gKiBAcHJvcGVydHkge0xvZ2dlckNvbmZpZ1tdfSBbbG9nZ2Vyc10gLSBMb2dnZXIgaW5zdGFuY2VzIChjb252ZXJ0ZWQgdG8gb3V0cHV0cyB3aGVuIGNvbmZpZ3VyZWQpLlxuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0Q29uZmlnW119IFtvdXRwdXRzXSAtIEV4cGxpY2l0IGxvZ2dlciBvdXRwdXRzIChvdmVycmlkZXMgY29uc29sZS9maWxlIGRlZmF1bHRzIHdoZW4gcHJvdmlkZWQpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RydWN0dXJlU3FsQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2VuYWJsZWRFbnZpcm9ubWVudHNdIC0gRW52aXJvbm1lbnRzIGFsbG93ZWQgdG8gd3JpdGUgc3RydWN0dXJlIHNxbCBmaWxlcyBkdXJpbmcgYXV0b21hdGljIG1pZ3JhdGlvbiBkdW1wcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtkaXNhYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgdGhhdCBzaG91bGQgc2tpcCB3cml0aW5nIHN0cnVjdHVyZSBzcWwgZmlsZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7XCJiZWFjb25cIiB8IFwicG9sbGluZ1wifSBCYWNrZ3JvdW5kSm9ic0Rpc3BhdGNoU3RyYXRlZ3lcbiAqXG4gKiAtIGBcImJlYWNvblwiYCAoZGVmYXVsdCk6IGV2ZW50LWRyaXZlbiBkaXNwYXRjaC4gVGhlXG4gKiAgIGBiYWNrZ3JvdW5kLWpvYnMtbWFpbmAgcHJvY2VzcyBkcmFpbnMgdGhlIHF1ZXVlIG9uIGVucXVldWUsIG9uXG4gKiAgIHdvcmtlciByZWFkaW5lc3MsIG9uIEJlYWNvbiBicm9hZGNhc3RzIChzbyBjcm9zcy1wcm9jZXNzIGVucXVldWVzXG4gKiAgIHdha2UgaXQpLCBhbmQgYXJtcyBhIGBzZXRUaW1lb3V0YCBmb3IgdGhlIHNvb25lc3QgZnV0dXJlLXNjaGVkdWxlZFxuICogICBqb2IuIEZhbGxzIGJhY2sgZ3JhY2VmdWxseSB0byBkaXJlY3QgaW4tcHJvY2VzcyB0cmlnZ2VyaW5nIHdoZW5cbiAqICAgQmVhY29uIGlzIG5vdCBjb25maWd1cmVkLlxuICogLSBgXCJwb2xsaW5nXCJgOiBsZWdhY3kgbW9kZSwgcnVucyBhIGZpeGVkLWludGVydmFsIHBvbGwgb3ZlciB0aGVcbiAqICAgYGJhY2tncm91bmRfam9ic2AgdGFibGUgKHNlZSBgcG9sbEludGVydmFsTXNgKS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIEhvc3RuYW1lIGZvciB0aGUgYmFja2dyb3VuZCBqb2JzIG1haW4gcHJvY2Vzcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBQb3J0IGZvciB0aGUgYmFja2dyb3VuZCBqb2JzIG1haW4gcHJvY2Vzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VJZGVudGlmaWVyXSAtIERhdGFiYXNlIGlkZW50aWZpZXIgdXNlZCB0byBzdG9yZSBiYWNrZ3JvdW5kIGpvYnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heENvbmN1cnJlbnRJbmxpbmVKb2JzXSAtIEhvdyBtYW55IGBmb3JrZWQ6IGZhbHNlYCBqb2JzIGEgc2luZ2xlXG4gKiAgIGBiYWNrZ3JvdW5kLWpvYnMtd29ya2VyYCBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gcnVuIGluIHBhcmFsbGVsLiBDb25jdXJyZW5jeVxuICogICBpcyBhdCB0aGUgSlMgZXZlbnQtbG9vcCBsZXZlbDogZXZlcnkgY29uY3VycmVudCBqb2Igc2hhcmVzIHRoZSB3b3JrZXInc1xuICogICBwcm9jZXNzIGFuZCBEQiBjb25uZWN0aW9uIHBvb2wsIHNvIHRoaXMgc2hvdWxkIGZpdCB0aGUgcG9vbCBzaXplLCBub3QgdGhlXG4gKiAgIENQVSBjb3VudC4gRm9ya2luZyByZW1haW5zIHRoZSByaWdodCB0b29sIGZvciBtZW1vcnkgaXNvbGF0aW9uIGFjcm9zc1xuICogICBsb25nLXJ1bm5pbmcgam9icyBhbmQgZm9yIHVzaW5nIG1vcmUgY29yZXMuIERlZmF1bHQ6IGA0YC5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNEaXNwYXRjaFN0cmF0ZWd5fSBbZGlzcGF0Y2hTdHJhdGVneV0gLSBIb3cgdGhlIG1haW4gcHJvY2Vzc1xuICogICBkZXRlY3RzIG5ldyB3b3JrLiBEZWZhdWx0cyB0byBgXCJiZWFjb25cImAgKGV2ZW50LWRyaXZlbikuIFNldCB0byBgXCJwb2xsaW5nXCJgXG4gKiAgIHRvIHJlc3RvcmUgdGhlIGxlZ2FjeSBmaXhlZC1pbnRlcnZhbCBwb2xsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb2xsSW50ZXJ2YWxNc10gLSBQb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy4gT25seSB1c2VkXG4gKiAgIHdoZW4gYGRpc3BhdGNoU3RyYXRlZ3kgPT09IFwicG9sbGluZ1wiYC4gRGVmYXVsdDogYDEwMDBgLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmVhY29uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIHRvIGNvbm5lY3QgdG8gYSBCZWFjb24gYnJva2VyLiBEZWZhdWx0cyB0byBmYWxzZSB1bmxlc3MgYGhvc3RgL2Bwb3J0YCBvciBgaW5Qcm9jZXNzOiB0cnVlYCBhcmUgc2V0LCBvciBlbnYgdmFycyBhcmUgcHJlc2VudC4gRXhwbGljaXQgYGZhbHNlYCBkaXNhYmxlcyBCZWFjb24gZXZlbiB3aGVuIGVudiB2YXJzIGFyZSBzZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpblByb2Nlc3NdIC0gV2hlbiB0cnVlLCB1c2UgYSBtb2R1bGUtbGV2ZWwgaW4tcHJvY2VzcyBicm9rZXIgc2luZ2xldG9uIGluc3RlYWQgb2YgY29ubmVjdGluZyBvdmVyIFRDUC4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGhvc3RgL2Bwb3J0YC4gVXNlZnVsIGZvciB0ZXN0cyBhbmQgc2luZ2xlLXByb2Nlc3MgZGVwbG95bWVudHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwZWVyVHlwZV0gLSBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhpcyBwZWVyIChlLmcuIFwic2VydmVyXCIsIFwiYmFja2dyb3VuZC1qb2JzLXdvcmtlclwiKS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNjaGVkdWxlZEJhY2tncm91bmRKb2JFdmVyeU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBbZmlyc3RJbl0gLSBEZWxheSBiZWZvcmUgdGhlIGZpcnN0IGVucXVldWUuXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gW2ZpcnN0X2luXSAtIFNpZGVraXEtc3R5bGUgYWxpYXMgZm9yIGBmaXJzdEluYC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2FueVtdfSBbYXJnc10gLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBqb2Igd2hlbiBlbnF1ZXVlZC5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL2pvYi5qc1wiKS5kZWZhdWx0fSBjbGFzcyAtIEpvYiBjbGFzcyB0byBlbnF1ZXVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjcm9uXSAtIENyb250YWIgZXhwcmVzc2lvbiAoNS1maWVsZCBQT1NJWCwgcGx1cyBgQGhvdXJseWAvYEBkYWlseWAvYEB3ZWVrbHlgL2BAbW9udGhseWAvYEB5ZWFybHlgL2BAbWlkbmlnaHRgKS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGV2ZXJ5YC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgc2NoZWR1bGUgaXMgZW5hYmxlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nIHwgW251bWJlciB8IHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkV2ZXJ5T3B0aW9uc119IFtldmVyeV0gLSBSZXBlYXQgaW50ZXJ2YWwuIEVpdGhlciBgZXZlcnlgIG9yIGBjcm9uYCBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IFtvcHRpb25zXSAtIEpvYiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9uPn0gam9icyAtIFNjaGVkdWxlZCBqb2JzIGtleWVkIGJ5IG5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgOiBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24gfCBQcm9taXNlPFNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbj59IFNjaGVkdWxlZEJhY2tncm91bmRKb2JzTG9hZGVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQXR0YWNobWVudERyaXZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT59KSA6IFJlY29yZDxzdHJpbmcsIGFueT59IFtjcmVhdGVdIC0gT3B0aW9uYWwgZmFjdG9yeSBmb3IgYSBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge25ldyAoLi4uYXJnczogYW55W10pID0+IFJlY29yZDxzdHJpbmcsIGFueT59IFtkcml2ZXJDbGFzc10gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgY2xhc3MuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtpbnN0YW5jZV0gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgaW5zdGFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50c0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVmYXVsdERyaXZlcl0gLSBEZWZhdWx0IGF0dGFjaG1lbnQgc3RvcmFnZSBkcml2ZXIgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgQXR0YWNobWVudERyaXZlckNvbmZpZ3VyYXRpb24gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gW2RyaXZlcnNdIC0gTmFtZWQgYXR0YWNobWVudCBkcml2ZXIgY29uZmlndXJhdGlvbnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthbGxvd1BhdGhJbnB1dF0gLSBXaGV0aGVyIGB7cGF0aDogLi4ufWAgYXR0YWNobWVudCBpbnB1dCBpcyBhbGxvd2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2FsbG93ZWRQYXRoUHJlZml4ZXNdIC0gT3B0aW9uYWwgYWxsb3dsaXN0IG9mIGRpcmVjdG9yaWVzIGZvciBge3BhdGg6IC4uLn1gIGlucHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTWFpbGVyQmFja2VuZFxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7cGF5bG9hZDogaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkLCBjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pIDogUHJvbWlzZTx1bmtub3duPiB8IHVua25vd259IGRlbGl2ZXIgLSBEZWxpdmVyIGEgbWFpbGVyIHBheWxvYWQuXG4gKi9cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IExvY2FsZUZhbGxiYWNrc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZWxhdGlvbnNoaXBDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wiYmVsb25nc1RvXCIgfCBcImhhc09uZVwiIHwgXCJoYXNNYW55XCJ9IHR5cGUgLSBSZWxhdGlvbnNoaXAgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxdIC0gVGFyZ2V0IG1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV0gLSBBbGlhcyBvZiB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxDbGFzc05hbWVdIC0gRXhwbGljaXQgdGFyZ2V0IG1vZGVsIGNsYXNzIG5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsQXR0cmlidXRlQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIENvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbHVtblR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NxbFR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFUeXBlXSAtIEFsaWFzIGZvciBjb2x1bW4gdHlwZSBuYW1lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbnVsbF0gLSBXaGV0aGVyIHZhbHVlIGNhbiBiZSBudWxsLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VsZWN0ZWRCeURlZmF1bHRdIC0gV2hldGhlciBpbmNsdWRlZCBpbiBkZWZhdWx0IHNlcmlhbGl6YXRpb24uIERlZmF1bHRzIHRvIHRydWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsQXR0YWNobWVudENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifSB0eXBlIC0gQXR0YWNobWVudCBjYXJkaW5hbGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsQXR0cmlidXRlQ29uZmlndXJhdGlvbiB8IGltcG9ydChcIi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLWNvbHVtbi5qc1wiKS5kZWZhdWx0IHwgYm9vbGVhbj59IGF0dHJpYnV0ZXMgLSBBdHRyaWJ1dGVzIHRvIGV4cG9zZSBvbiB0aGUgZnJvbnRlbmQgbW9kZWwuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYWJpbGl0aWVzXSAtIEFiaWxpdHkgYWN0aW9uIGxpc3QgKGNhbWVsQ2FzZSBhY3Rpb24gbmFtZXMpLiBEZWZhdWx0cyB0byBgW1wicmVhZFwiXWAgZm9yIGBmaW5kYCBhbmQgYGluZGV4YCB3aGVuIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRhY2htZW50Q29uZmlndXJhdGlvbj59IFthdHRhY2htZW50c10gLSBBdHRhY2htZW50IGhlbHBlcnMga2V5ZWQgYnkgYXR0YWNobWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2NvbW1hbmRzXSAtIExlZ2FjeSBidWlsdC1pbiBjb21tYW5kIG5hbWVzIChgaW5kZXhgLCBgZmluZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgLCBgYXR0YWNoYCwgYGRvd25sb2FkYCwgYHVybGApLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2NvbGxlY3Rpb25Db21tYW5kc10gLSBDdXN0b20gY29sbGVjdGlvbiBjb21tYW5kcyBhcyBjYW1lbENhc2UgbWV0aG9kIG5hbWVzLiBUaGUgcnVudGltZSBkZXJpdmVzIHRoZSBrZWJhYi1jYXNlIGNvbW1hbmQgc2x1ZyBmcm9tIGVhY2ggbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFttZW1iZXJDb21tYW5kc10gLSBDdXN0b20gbWVtYmVyIGNvbW1hbmRzIGFzIGNhbWVsQ2FzZSBtZXRob2QgbmFtZXMuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gZWFjaCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2J1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNdIC0gQnVpbHQtaW4gY29sbGVjdGlvbiBjb21tYW5kIG5hbWVzIChgaW5kZXhgLCBgY3JlYXRlYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYnVpbHRJbk1lbWJlckNvbW1hbmRzXSAtIEJ1aWx0LWluIG1lbWJlciBjb21tYW5kIG5hbWVzIChgZmluZGAsIGB1cGRhdGVgLCBgZGVzdHJveWAsIGBhdHRhY2hgLCBgZG93bmxvYWRgLCBgdXJsYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbcmVsYXRpb25zaGlwc10gLSBSZWxhdGlvbnNoaXAgbmFtZXMgdG8gZXhwb3NlIGluIGZyb250ZW5kIG1vZGVscy4gVHlwZSBhbmQgdGFyZ2V0IG1vZGVsIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBiYWNrZW5kIG1vZGVsJ3MgcmVnaXN0ZXJlZCByZWxhdGlvbnNoaXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmltYXJ5S2V5XSAtIFByaW1hcnkga2V5IGF0dHJpYnV0ZSBuYW1lLlxuICogQHByb3BlcnR5IHtGcm9udGVuZE1vZGVsUmVzb3VyY2VTZXJ2ZXJDb25maWd1cmF0aW9ufSBbc2VydmVyXSAtIE9wdGlvbmFsIGxlZ2FjeSBiYWNrZW5kIGJlaGF2aW9yIG92ZXJyaWRlcyBmb3IgYnVpbHQtaW4gZnJvbnRlbmQgYWN0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPbWl0PEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24sIFwiYWJpbGl0aWVzXCIgfCBcImJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcIiB8IFwiYnVpbHRJbk1lbWJlckNvbW1hbmRzXCIgfCBcImNvbGxlY3Rpb25Db21tYW5kc1wiIHwgXCJjb21tYW5kc1wiIHwgXCJtZW1iZXJDb21tYW5kc1wiPiAmIHtcbiAqICAgYWJpbGl0aWVzOiBGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXNDb25maWd1cmF0aW9uXG4gKiAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBtZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogfX0gTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHR9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZX0gRnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbmRleF0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgaW5kZXguXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbmRdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGZpbmQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NyZWF0ZV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgY3JlYXRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1cGRhdGVdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIHVwZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVzdHJveV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgZGVzdHJveS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVNlcnZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJhdHRhY2hcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgOiAoYm9vbGVhbiB8IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPil9IFtiZWZvcmVBY3Rpb25dIC0gT3B0aW9uYWwgY2FsbGJhY2sgcnVuIGJlZm9yZSBidWlsdC1pbiBmcm9udGVuZCBhY3Rpb25zLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImluZGV4XCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IFtyZWNvcmRzXSAtIFJlY29yZHMgbG9hZGVyIGZvciBmcm9udGVuZEluZGV4LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBbc2VyaWFsaXplXSAtIFJlY29yZCBzZXJpYWxpemVyIGZvciByZXNwb25zZSBwYXlsb2Fkcy5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJmaW5kXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGlkOiBzdHJpbmcgfCBudW1iZXJ9KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IG51bGw+fSBbZmluZF0gLSBSZWNvcmQgbG9hZGVyIGZvciBmaW5kL3VwZGF0ZS9kZXN0cm95L2F0dGFjaC9kb3dubG9hZC91cmwgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJjcmVhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT59KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59IFtjcmVhdGVdIC0gQ3VzdG9tIGNyZWF0ZSBjYWxsYmFjay5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJ1cGRhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkgOiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB2b2lkPn0gW3VwZGF0ZV0gLSBDdXN0b20gdXBkYXRlIGNhbGxiYWNrLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImRlc3Ryb3lcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+fSBbZGVzdHJveV0gLSBDdXN0b20gZGVzdHJveSBjYWxsYmFjay5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBQYXRoIHRvIHRoZSBiYWNrZW5kIHByb2plY3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Zyb250ZW5kTW9kZWxzT3V0cHV0UGF0aF0gLSBPcHRpb25hbCBvdXRwdXQgcHJvamVjdCBwYXRoIHdoZXJlIGBzcmMvZnJvbnRlbmQtbW9kZWxzYCBzaG91bGQgYmUgZ2VuZXJhdGVkLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uPn0gW2Zyb250ZW5kTW9kZWxzXSAtIEF1dG8tZGlzY292ZXJlZCBmcm9udGVuZCBtb2RlbCBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBjbGFzcyBuYW1lLiBTZXQgaW50ZXJuYWxseSBieSB0aGUgZW52aXJvbm1lbnQgaGFuZGxlciDigJQgZG8gbm90IHNldCBtYW51YWxseS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJvdXRlUmVzb2x2ZXJIb29rQXJnc1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIE11dGFibGUgcmVxdWVzdCBwYXJhbXMgb2JqZWN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtoYXNNYXRjaGluZ0N1c3RvbVJvdXRlXSAtIFRydWUgd2hlbiBtYXRjaGluZyBhIGNvbmZpZ3VyZWQgY3VzdG9tIHJvdXRlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IHJlc3BvbnNlIC0gUmVzcG9uc2Ugb2JqZWN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3JvdXRlcy9yZXNvbHZlci5qc1wiKS5kZWZhdWx0fSByZXNvbHZlciAtIFJlc29sdmVyIGluc3RhbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUm91dGVSZXNvbHZlckhvb2tSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBEYXNoZXJpemVkIGFjdGlvbiBuYW1lIChmb3IgZXhhbXBsZSBgZnJvbnRlbmQtaW5kZXhgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250cm9sbGVyIC0gQ29udHJvbGxlciBwYXRoIChmb3IgZXhhbXBsZSBgYWNjb3VudHNgKS5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0fSBbY29udHJvbGxlckNsYXNzXSAtIE9wdGlvbmFsIGNvbnRyb2xsZXIgY2xhc3Mgb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbnRyb2xsZXJQYXRoXSAtIE9wdGlvbmFsIGFic29sdXRlL3JlbGF0aXZlIGNvbnRyb2xsZXIgZmlsZSBwYXRoIG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcGFyYW1zXSAtIEV4dHJhIHBhcmFtcyB0byBtZXJnZSBmb3IgY29udHJvbGxlci9hY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZpZXdQYXRoXSAtIE9wdGlvbmFsIHZpZXcgcGF0aCBvdmVycmlkZSB1c2VkIGJ5IGNvbnRyb2xsZXIgcmVuZGVyIGxvb2t1cHMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oUm91dGVSZXNvbHZlckhvb2tBcmdzKSA6IFJvdXRlUmVzb2x2ZXJIb29rUmVzdWx0IHwgbnVsbCB8IFByb21pc2U8Um91dGVSZXNvbHZlckhvb2tSZXN1bHQgfCBudWxsPn0gUm91dGVSZXNvbHZlckhvb2tUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7dHlwZW9mIGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHR9IEFiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCByZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0LCByZXNwb25zZTogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0pIDogaW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHZvaWQgfCBQcm9taXNlPGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCB2b2lkPn0gQWJpbGl0eVJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCByZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCByZXNwb25zZTogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uPzoge2NoYW5uZWw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSkgOiB1bmtub3duIHwgdm9pZCB8IFByb21pc2U8dW5rbm93biB8IHZvaWQ+fSBUZW5hbnRSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6IHVua25vd259KSA6IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUgfCBQYXJ0aWFsPERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGU+IHwgdm9pZH0gVGVuYW50RGF0YWJhc2VSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlbmFudERhdGFiYXNlUHJvdmlkZXJUeXBlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgOiB1bmtub3duW10gfCBQcm9taXNlPHVua25vd25bXT59IGxpc3RUZW5hbnRzIC0gTGlzdHMgdGVuYW50cyB0aGF0IHNob3VsZCBiZSBjcmVhdGVkLCBjaGVja2VkLCBvciBtaWdyYXRlZCBmb3IgdGhpcyBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6IHVua25vd259KSA6IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbY3JlYXRlRGF0YWJhc2VdIC0gQ3JlYXRlcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiB1bmtub3dufSkgOiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2Ryb3BEYXRhYmFzZV0gLSBEcm9wcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiB1bmtub3dufSkgOiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2NoZWNrVGVuYW50XSAtIENoZWNrcyBvbmUgdGVuYW50IGRhdGFiYXNlIGJlZm9yZSBnZW5lcmljIGNvbm5lY3Rpb24gdmFsaWRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiB1bmtub3dufSkgOiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2FmdGVyTWlncmF0ZVRlbmFudF0gLSBSdW5zIGFwcC1vd25lZCB0ZW5hbnQgd29yayBhZnRlciBnZW5lcmljIG1pZ3JhdGlvbnMgZm9yIG9uZSB0ZW5hbnQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb25maWd1cmF0aW9uQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F1dG9sb2FkXSAtIEdsb2JhbGx5IGVuYWJsZSBhdXRvLWJhdGNoLXByZWxvYWQgb2YgcmVsYXRpb25zaGlwcyBvbiBsYXp5IGFjY2Vzcy4gRGVmYXVsdCB0cnVlLlxuICogQHByb3BlcnR5IHtDb3JzVHlwZX0gW2NvcnNdIC0gQ09SUyBjb25maWd1cmF0aW9uIGZvciB0aGUgSFRUUCBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Nvb2tpZVNlY3JldF0gLSBTZWNyZXQgZm9yIGVuY3J5cHRpbmcgY29va2llcy5cbiAqIEBwcm9wZXJ0eSB7QWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW119IFthYmlsaXR5UmVzb3VyY2VzXSAtIFJlc291cmNlIGNsYXNzZXMgdXNlZCB0byBkZWZpbmUgYWJpbGl0aWVzIHBlciBtb2RlbC5cbiAqIEBwcm9wZXJ0eSB7QWJpbGl0eVJlc29sdmVyVHlwZX0gW2FiaWxpdHlSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgY3JlYXRpbmcgcmVxdWVzdC1zY29wZWQgYWJpbGl0eSBpbnN0YW5jZXMuXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRzQ29uZmlndXJhdGlvbn0gW2F0dGFjaG1lbnRzXSAtIEF0dGFjaG1lbnQgc3RvcmFnZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtCYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25bXX0gW2JhY2tlbmRQcm9qZWN0c10gLSBCYWNrZW5kIHByb2plY3QgZGVmaW5pdGlvbnMgdXNlZCBmb3IgZnJvbnRlbmQgbW9kZWwgZ2VuZXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7e1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfX19IGRhdGFiYXNlIC0gRGF0YWJhc2UgY29uZmlndXJhdGlvbnMga2V5ZWQgYnkgZW52aXJvbm1lbnQgYW5kIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z10gLSBFbmFibGUgZGVidWcgbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGlyZWN0b3J5XSAtIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgcHJvamVjdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuZm9yY2VUZW5hbnREYXRhYmFzZVNjb3Blc10gLSBSZXF1aXJlIHRlbmFudC1zd2l0Y2hlZCBtb2RlbCBxdWVyaWVzIHRvIHJlc29sdmUgYSB0ZW5hbnQgZGF0YWJhc2UgaWRlbnRpZmllci4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZW52aXJvbm1lbnRdIC0gQ3VycmVudCBlbnZpcm9ubWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2Vudmlyb25tZW50LWhhbmRsZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZW52aXJvbm1lbnRIYW5kbGVyIC0gRW52aXJvbm1lbnQgaGFuZGxlciBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2V4cG9zZUludGVybmFsRXJyb3JzVG9DbGllbnRzXSAtIFJldHVybiB1bmV4cGVjdGVkIGludGVybmFsIGVycm9yIGRldGFpbHMgaW4gY2xpZW50IEFQSSBwYXlsb2FkcyBvdXRzaWRlIHByb2R1Y3Rpb24uIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHByb3BlcnR5IHtMb2dnaW5nQ29uZmlndXJhdGlvbn0gW2xvZ2dpbmddIC0gTG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb259IFtiYWNrZ3JvdW5kSm9ic10gLSBCYWNrZ3JvdW5kIGpvYnMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmVhY29uQ29uZmlndXJhdGlvbn0gW2JlYWNvbl0gLSBCZWFjb24gYnJvYWRjYXN0IGJ1cyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24gfCBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0xvYWRlclR5cGV9IFtzY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic10gLSBTY2hlZHVsZWQgYmFja2dyb3VuZCBqb2JzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge01haWxlckJhY2tlbmR9IFttYWlsZXJCYWNrZW5kXSAtIE1haWwgZGVsaXZlcnkgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCB0eXBlOiBzdHJpbmd9KSA6IHZvaWR9IGluaXRpYWxpemVNb2RlbHMgLSBIb29rIHRvIHJlZ2lzdGVyIG1vZGVscyBmb3IgYSBnaXZlbiBpbml0aWFsaXphdGlvbiB0eXBlLlxuICogQHByb3BlcnR5IHtJbml0aWFsaXplcnNUeXBlfSBbaW5pdGlhbGl6ZXJzXSAtIEluaXRpYWxpemVyIGxvYWRlciBmb3IgZW52aXJvbm1lbnQgYm9vdHN0cmFwcGluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgZnVuY3Rpb24oKSA6IHN0cmluZ30gbG9jYWxlIC0gRGVmYXVsdCBsb2NhbGUgb3IgbG9jYWxlIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gbG9jYWxlcyAtIFN1cHBvcnRlZCBsb2NhbGVzLlxuICogQHByb3BlcnR5IHtMb2NhbGVGYWxsYmFja3NUeXBlfSBsb2NhbGVGYWxsYmFja3MgLSBMb2NhbGUgZmFsbGJhY2sgbWFwLlxuICogQHByb3BlcnR5IHtTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9ufSBbc3RydWN0dXJlU3FsXSAtIFN0cnVjdHVyZSBTUUwgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtUZW5hbnRSZXNvbHZlclR5cGV9IFt0ZW5hbnRSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgY3JlYXRpbmcgcmVxdWVzdC1zY29wZWQgdGVuYW50IGNvbnRleHQgb2JqZWN0cy5cbiAqIEBwcm9wZXJ0eSB7VGVuYW50RGF0YWJhc2VSZXNvbHZlclR5cGV9IFt0ZW5hbnREYXRhYmFzZVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBkZXJpdmluZyB0ZW5hbnQtc3BlY2lmaWMgZGF0YWJhc2UgY29uZmlnIG92ZXJyaWRlcy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGU+fSBbdGVuYW50RGF0YWJhc2VQcm92aWRlcnNdIC0gVGVuYW50IGRhdGFiYXNlIGxpZmVjeWNsZSBwcm92aWRlcnMga2V5ZWQgYnkgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGVzdGluZ10gLSBQYXRoIHRvIHRoZSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgKCgpID0+IG51bWJlcil9IFt0aW1lem9uZU9mZnNldE1pbnV0ZXNdIC0gRGVmYXVsdCB0aW1lem9uZSBvZmZzZXQgaW4gbWludXRlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgc3RyaW5nW119IFt0cnVzdGVkUHJveGllc10gLSBUcnVzdGVkIHJldmVyc2UgcHJveHkgYWRkcmVzcyByYW5nZXMgdXNlZCB0byByZXNvbHZlIHJlcXVlc3QgcmVtb3RlIGFkZHJlc3NlcyBmcm9tIGZvcndhcmRpbmcgaGVhZGVycy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgKCgpID0+IG51bWJlcil9IFtyZXF1ZXN0VGltZW91dE1zXSAtIFRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgY29tcGxldGluZyBhIEhUVFAgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7Um91dGVSZXNvbHZlckhvb2tUeXBlW119IFtyb3V0ZVJlc29sdmVySG9va3NdIC0gSG9vayBjYWxsYmFja3MgdGhhdCBjYW4gaGlqYWNrIHVucmVzb2x2ZWQgcm91dGVzLlxuICogQHByb3BlcnR5IHtXZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJUeXBlfSBbd2Vic29ja2V0Q2hhbm5lbFJlc29sdmVyXSAtIFJlc29sdmUgYSB3ZWJzb2NrZXQgY2hhbm5lbCBjbGFzcy9pbnN0YW5jZSBmb3IgZWFjaCBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyVHlwZX0gW3dlYnNvY2tldE1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXJdIC0gUmVzb2x2ZSBhIHJhdyB3ZWJzb2NrZXQgbWVzc2FnZSBoYW5kbGVyIGZvciBlYWNoIGNvbm5lY3Rpb24uXG4gKi9cblxuZXhwb3J0IGNvbnN0IG5vdGhpbmcgPSB7fVxuIl19
|
|
@@ -7,9 +7,11 @@ export default class VelociousDatabaseDriversMysqlColumn extends BaseColumn {
|
|
|
7
7
|
data: Record<string, any>;
|
|
8
8
|
table: import("../base-table.js").default;
|
|
9
9
|
getAutoIncrement(): any;
|
|
10
|
+
getIndexes(): Promise<ColumnsIndex[]>;
|
|
10
11
|
getName(): any;
|
|
11
12
|
getNotes(): any;
|
|
12
13
|
getType(): any;
|
|
13
14
|
}
|
|
14
15
|
import BaseColumn from "../base-column.js";
|
|
16
|
+
import ColumnsIndex from "./columns-index.js";
|
|
15
17
|
//# sourceMappingURL=column.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mysql/column.js"],"names":[],"mappings":"AAMA;IACE;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,OAAO,QAClC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAM7B;IAFC,0BAAgB;IAChB,0CAAkB;IAGpB,wBAAoF;
|
|
1
|
+
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mysql/column.js"],"names":[],"mappings":"AAMA;IACE;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,OAAO,QAClC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAM7B;IAFC,0BAAgB;IAChB,0CAAkB;IAGpB,wBAAoF;IAEpF,sCAuCC;IAeD,eAAgD;IAChD,gBAAgE;IAgBhE,eAmBC;CACF;uBA5GsB,mBAAmB;yBACjB,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columns-index.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mysql/columns-index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"columns-index.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mysql/columns-index.js"],"names":[],"mappings":"AAMA;IACE,sBAMC;CAQF;6BAnB4B,0BAA0B"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import BaseColumnsIndex from "../base-columns-index.js";
|
|
3
|
+
import { digg } from "diggerize";
|
|
4
|
+
import TableIndex from "../../table-data/table-index.js";
|
|
3
5
|
export default class VelociousDatabaseDriversMysqlColumnsIndex extends BaseColumnsIndex {
|
|
6
|
+
getColumnNames() {
|
|
7
|
+
const columnNames = digg(this, "data", "column_names");
|
|
8
|
+
if (columnNames)
|
|
9
|
+
return columnNames;
|
|
10
|
+
return [digg(this, "data", "COLUMN_NAME")];
|
|
11
|
+
}
|
|
12
|
+
getTableDataIndex() {
|
|
13
|
+
return new TableIndex(this.getColumnNames(), {
|
|
14
|
+
name: this.getName(),
|
|
15
|
+
unique: this.isUnique()
|
|
16
|
+
});
|
|
17
|
+
}
|
|
4
18
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1pbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9kcml2ZXJzL215c3FsL2NvbHVtbnMtaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sZ0JBQWdCLE1BQU0sMEJBQTBCLENBQUE7QUFDdkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4RCxNQUFNLENBQUMsT0FBTyxPQUFPLHlDQUEwQyxTQUFRLGdCQUFnQjtJQUNyRixjQUFjO1FBQ1osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFFdEQsSUFBSSxXQUFXO1lBQUUsT0FBTyxXQUFXLENBQUE7UUFFbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzNDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1NBQ3hCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFzZUNvbHVtbnNJbmRleCBmcm9tIFwiLi4vYmFzZS1jb2x1bW5zLWluZGV4LmpzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgVGFibGVJbmRleCBmcm9tIFwiLi4vLi4vdGFibGUtZGF0YS90YWJsZS1pbmRleC5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc015c3FsQ29sdW1uc0luZGV4IGV4dGVuZHMgQmFzZUNvbHVtbnNJbmRleCB7XG4gIGdldENvbHVtbk5hbWVzKCkge1xuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gZGlnZyh0aGlzLCBcImRhdGFcIiwgXCJjb2x1bW5fbmFtZXNcIilcblxuICAgIGlmIChjb2x1bW5OYW1lcykgcmV0dXJuIGNvbHVtbk5hbWVzXG5cbiAgICByZXR1cm4gW2RpZ2codGhpcywgXCJkYXRhXCIsIFwiQ09MVU1OX05BTUVcIildXG4gIH1cblxuICBnZXRUYWJsZURhdGFJbmRleCgpIHtcbiAgICByZXR1cm4gbmV3IFRhYmxlSW5kZXgodGhpcy5nZXRDb2x1bW5OYW1lcygpLCB7XG4gICAgICBuYW1lOiB0aGlzLmdldE5hbWUoKSxcbiAgICAgIHVuaXF1ZTogdGhpcy5pc1VuaXF1ZSgpXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -8,8 +8,10 @@ export default class VelociousDatabaseDriversMysqlTable extends BaseTable {
|
|
|
8
8
|
driver: import("../base.js").default;
|
|
9
9
|
getColumns(): Promise<Column[]>;
|
|
10
10
|
getForeignKeys(): Promise<ForeignKey[]>;
|
|
11
|
+
getIndexes(): Promise<ColumnsIndex[]>;
|
|
11
12
|
}
|
|
12
13
|
import BaseTable from "../base-table.js";
|
|
13
14
|
import Column from "./column.js";
|
|
14
15
|
import ForeignKey from "./foreign-key.js";
|
|
16
|
+
import ColumnsIndex from "./columns-index.js";
|
|
15
17
|
//# sourceMappingURL=table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mysql/table.js"],"names":[],"mappings":"AAOA;IACE;;;OAGG;IACH,oBAHW,OAAO,YAAY,EAAE,OAAO,QAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAMhC;IAFC,6BAAgB;IAChB,qCAAoB;IAGtB,gCAaC;IAED,wCAqBC;
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mysql/table.js"],"names":[],"mappings":"AAOA;IACE;;;OAGG;IACH,oBAHW,OAAO,YAAY,EAAE,OAAO,QAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAMhC;IAFC,6BAAgB;IAChB,qCAAoB;IAGtB,gCAaC;IAED,wCAqBC;IAED,sCAsDC;CAMF;sBAlHqB,kBAAkB;mBACrB,aAAa;uBAET,kBAAkB;yBADhB,oBAAoB"}
|
|
@@ -58,9 +58,13 @@ export default class VelociousDatabaseDriversMysqlTable extends BaseTable {
|
|
|
58
58
|
WHERE
|
|
59
59
|
TABLE_SCHEMA = DATABASE() AND
|
|
60
60
|
TABLE_NAME = ${options.quote(this.getName())}
|
|
61
|
+
ORDER BY
|
|
62
|
+
INDEX_NAME,
|
|
63
|
+
SEQ_IN_INDEX
|
|
61
64
|
`;
|
|
62
65
|
const indexesRows = await this.getDriver().query(sql);
|
|
63
66
|
const indexes = [];
|
|
67
|
+
const indexRowsByName = new Map();
|
|
64
68
|
for (const indexRow of indexesRows) {
|
|
65
69
|
if (indexRow.NON_UNIQUE == 1) {
|
|
66
70
|
indexRow.is_unique = false;
|
|
@@ -74,8 +78,18 @@ export default class VelociousDatabaseDriversMysqlTable extends BaseTable {
|
|
|
74
78
|
else {
|
|
75
79
|
indexRow.is_primary_key = false;
|
|
76
80
|
}
|
|
77
|
-
const
|
|
78
|
-
|
|
81
|
+
const existingIndexRow = indexRowsByName.get(indexRow.index_name);
|
|
82
|
+
if (existingIndexRow) {
|
|
83
|
+
existingIndexRow.column_names.push(indexRow.COLUMN_NAME);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const groupedIndexRow = Object.assign({}, indexRow, {
|
|
87
|
+
column_names: [indexRow.COLUMN_NAME]
|
|
88
|
+
});
|
|
89
|
+
const index = new ColumnsIndex(this, groupedIndexRow);
|
|
90
|
+
indexRowsByName.set(indexRow.index_name, groupedIndexRow);
|
|
91
|
+
indexes.push(index);
|
|
92
|
+
}
|
|
79
93
|
}
|
|
80
94
|
return indexes;
|
|
81
95
|
});
|
|
@@ -85,4 +99,4 @@ export default class VelociousDatabaseDriversMysqlTable extends BaseTable {
|
|
|
85
99
|
return /** @type {string} */ (Object.values(this.data)[0]);
|
|
86
100
|
}
|
|
87
101
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9teXNxbC90YWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUE7QUFDeEMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBQ2hDLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sVUFBVSxNQUFNLGtCQUFrQixDQUFBO0FBRXpDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sa0NBQW1DLFNBQVEsU0FBUztJQUN2RTs7O09BR0c7SUFDSCxZQUFZLE1BQU0sRUFBRSxJQUFJO1FBQ3RCLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDdEYsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO1lBRWxCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFFckMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN0QixDQUFDO1lBRUQsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQyxDQUFD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TyxDQUFBO1FBQ2hCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELDBDQUEwQztJQUMxQyxPQUFPO1FBQ0wsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlVGFibGUgZnJvbSBcIi4uL2Jhc2UtdGFibGUuanNcIlxuaW1wb3J0IENvbHVtbiBmcm9tIFwiLi9jb2x1bW4uanNcIlxuaW1wb3J0IENvbHVtbnNJbmRleCBmcm9tIFwiLi9jb2x1bW5zLWluZGV4LmpzXCJcbmltcG9ydCBGb3JlaWduS2V5IGZyb20gXCIuL2ZvcmVpZ24ta2V5LmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzTXlzcWxUYWJsZSBleHRlbmRzIEJhc2VUYWJsZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Jhc2UuanNcIikuZGVmYXVsdH0gZHJpdmVyIC0gRGF0YWJhc2UgZHJpdmVyIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihkcml2ZXIsIGRhdGEpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuZHJpdmVyID0gZHJpdmVyXG4gIH1cblxuICBhc3luYyBnZXRDb2x1bW5zKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERyaXZlcigpLl9jYWNoZWRUYWJsZVNjaGVtYU1ldGFkYXRhKHRoaXMuZ2V0TmFtZSgpLCBcImNvbHVtbnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5kcml2ZXIucXVlcnkoYFNIT1cgRlVMTCBDT0xVTU5TIEZST00gXFxgJHt0aGlzLmdldE5hbWUoKX1cXGBgKVxuICAgICAgY29uc3QgY29sdW1ucyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbih0aGlzLCBkYXRhKVxuXG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb2x1bW5zXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldEZvcmVpZ25LZXlzKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERyaXZlcigpLl9jYWNoZWRUYWJsZVNjaGVtYU1ldGFkYXRhKHRoaXMuZ2V0TmFtZSgpLCBcImZvcmVpZ25LZXlzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNxbCA9IGBcbiAgICAgICAgU0VMRUNUIFRBQkxFX05BTUUsIENPTFVNTl9OQU1FLCBDT05TVFJBSU5UX05BTUUsIFJFRkVSRU5DRURfVEFCTEVfTkFNRSwgUkVGRVJFTkNFRF9DT0xVTU5fTkFNRVxuICAgICAgICBGUk9NIElORk9STUFUSU9OX1NDSEVNQS5LRVlfQ09MVU1OX1VTQUdFXG4gICAgICAgIFdIRVJFXG4gICAgICAgICAgUkVGRVJFTkNFRF9UQUJMRV9TQ0hFTUEgPSAoU0VMRUNUIERBVEFCQVNFKCkpIEFORFxuICAgICAgICAgIFRBQkxFX05BTUUgPSAke3RoaXMuZHJpdmVyLnF1b3RlKHRoaXMuZ2V0TmFtZSgpKX1cbiAgICAgIGBcblxuICAgICAgY29uc3QgZm9yZWlnbktleVJvd3MgPSBhd2FpdCB0aGlzLmRyaXZlci5xdWVyeShzcWwpXG4gICAgICBjb25zdCBmb3JlaWduS2V5cyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZm9yZWlnbktleVJvdyBvZiBmb3JlaWduS2V5Um93cykge1xuICAgICAgICBjb25zdCBmb3JlaWduS2V5ID0gbmV3IEZvcmVpZ25LZXkoZm9yZWlnbktleVJvdylcblxuICAgICAgICBmb3JlaWduS2V5cy5wdXNoKGZvcmVpZ25LZXkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JlaWduS2V5c1xuICAgIH0pXG4gIH1cblxuICBhc3luYyBnZXRJbmRleGVzKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERyaXZlcigpLl9jYWNoZWRUYWJsZVNjaGVtYU1ldGFkYXRhKHRoaXMuZ2V0TmFtZSgpLCBcImluZGV4ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgICBjb25zdCBzcWwgPSBgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgIFRBQkxFX1NDSEVNQSxcbiAgICAgICAgICBUQUJMRV9OQU1FLFxuICAgICAgICAgIElOREVYX05BTUUgQVMgaW5kZXhfbmFtZSxcbiAgICAgICAgICBDT0xVTU5fTkFNRSxcbiAgICAgICAgICBTRVFfSU5fSU5ERVgsXG4gICAgICAgICAgTk9OX1VOSVFVRSxcbiAgICAgICAgICBJTkRFWF9UWVBFXG4gICAgICAgIEZST00gSU5GT1JNQVRJT05fU0NIRU1BLlNUQVRJU1RJQ1NcbiAgICAgICAgV0hFUkVcbiAgICAgICAgICBUQUJMRV9TQ0hFTUEgPSBEQVRBQkFTRSgpIEFORFxuICAgICAgICAgIFRBQkxFX05BTUUgPSAke29wdGlvbnMucXVvdGUodGhpcy5nZXROYW1lKCkpfVxuICAgICAgICBPUkRFUiBCWVxuICAgICAgICAgIElOREVYX05BTUUsXG4gICAgICAgICAgU0VRX0lOX0lOREVYXG4gICAgICBgXG4gICAgICBjb25zdCBpbmRleGVzUm93cyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucXVlcnkoc3FsKVxuICAgICAgY29uc3QgaW5kZXhlcyA9IFtdXG4gICAgICBjb25zdCBpbmRleFJvd3NCeU5hbWUgPSBuZXcgTWFwKClcblxuICAgICAgZm9yIChjb25zdCBpbmRleFJvdyBvZiBpbmRleGVzUm93cykge1xuICAgICAgICBpZiAoaW5kZXhSb3cuTk9OX1VOSVFVRSA9PSAxKSB7XG4gICAgICAgICAgaW5kZXhSb3cuaXNfdW5pcXVlID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmRleFJvdy5pc191bmlxdWUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXhSb3cuaW5kZXhfbmFtZSA9PSBcIlBSSU1BUllcIikge1xuICAgICAgICAgIGluZGV4Um93LmlzX3ByaW1hcnlfa2V5ID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluZGV4Um93LmlzX3ByaW1hcnlfa2V5ID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXhSb3cgPSBpbmRleFJvd3NCeU5hbWUuZ2V0KGluZGV4Um93LmluZGV4X25hbWUpXG5cbiAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXhSb3cpIHtcbiAgICAgICAgICBleGlzdGluZ0luZGV4Um93LmNvbHVtbl9uYW1lcy5wdXNoKGluZGV4Um93LkNPTFVNTl9OQU1FKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWRJbmRleFJvdyA9IE9iamVjdC5hc3NpZ24oe30sIGluZGV4Um93LCB7XG4gICAgICAgICAgICBjb2x1bW5fbmFtZXM6IFtpbmRleFJvdy5DT0xVTU5fTkFNRV1cbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gbmV3IENvbHVtbnNJbmRleCh0aGlzLCBncm91cGVkSW5kZXhSb3cpXG5cbiAgICAgICAgICBpbmRleFJvd3NCeU5hbWUuc2V0KGluZGV4Um93LmluZGV4X25hbWUsIGdyb3VwZWRJbmRleFJvdylcbiAgICAgICAgICBpbmRleGVzLnB1c2goaW5kZXgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4ZXNcbiAgICB9KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRhYmxlIG5hbWUuICovXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoT2JqZWN0LnZhbHVlcyh0aGlzLmRhdGEpWzBdKVxuICB9XG59XG4iXX0=
|