@dbx-tools/cli-service 0.9.119 → 0.9.120
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/index.ts +3 -4
- package/lib/index.d.ts +3 -4
- package/lib/index.js +3 -4
- package/lib/src/cli.d.ts +1 -7
- package/lib/src/cli.js +3 -18
- package/lib/src/service.d.ts +7 -8
- package/lib/src/service.js +17 -1
- package/package.json +3 -3
- package/src/cli.ts +7 -20
- package/src/service.ts +18 -8
package/index.ts
CHANGED
|
@@ -3,15 +3,14 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.120";
|
|
7
7
|
export * as cli from "./src/cli.ts";
|
|
8
8
|
export * as definition from "./src/definition.ts";
|
|
9
9
|
export * as icon from "./src/icon.ts";
|
|
10
10
|
export * as service from "./src/service.ts";
|
|
11
|
-
export { CliServiceInstallOptionsSchema } from "./src/cli.ts";
|
|
12
11
|
export type { CliServiceDefinitionSource, CliServiceCliDependencies } from "./src/cli.ts";
|
|
13
12
|
export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServicePythonPackageSchema, CliServiceDefinitionSchema } from "./src/definition.ts";
|
|
14
13
|
export type { CliServiceCommand, CliServiceCommandInput, CliServiceMenuItem, CliServicePythonPackage, CliServicePythonPackageInput, CliServiceDefinition, CliServiceDefinitionOptions } from "./src/definition.ts";
|
|
15
14
|
export type { ServiceTrayGlyph } from "./src/icon.ts";
|
|
16
|
-
export { CliService } from "./src/service.ts";
|
|
17
|
-
export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServicePythonInstaller, CliServiceRuntimeOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
|
|
15
|
+
export { CliServiceInstallOptionsSchema, CliService } from "./src/service.ts";
|
|
16
|
+
export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServicePythonInstaller, CliServiceRuntimeOptions, CliServiceInstallOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.120";
|
|
3
3
|
export * as cli from "./src/cli.ts";
|
|
4
4
|
export * as definition from "./src/definition.ts";
|
|
5
5
|
export * as icon from "./src/icon.ts";
|
|
6
6
|
export * as service from "./src/service.ts";
|
|
7
|
-
export { CliServiceInstallOptionsSchema } from "./src/cli.ts";
|
|
8
7
|
export type { CliServiceDefinitionSource, CliServiceCliDependencies } from "./src/cli.ts";
|
|
9
8
|
export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServicePythonPackageSchema, CliServiceDefinitionSchema } from "./src/definition.ts";
|
|
10
9
|
export type { CliServiceCommand, CliServiceCommandInput, CliServiceMenuItem, CliServicePythonPackage, CliServicePythonPackageInput, CliServiceDefinition, CliServiceDefinitionOptions } from "./src/definition.ts";
|
|
11
10
|
export type { ServiceTrayGlyph } from "./src/icon.ts";
|
|
12
|
-
export { CliService } from "./src/service.ts";
|
|
13
|
-
export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServicePythonInstaller, CliServiceRuntimeOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
|
|
11
|
+
export { CliServiceInstallOptionsSchema, CliService } from "./src/service.ts";
|
|
12
|
+
export type { CliServiceCompiler, CliServiceRuntimeInstaller, CliServicePythonInstaller, CliServiceRuntimeOptions, CliServiceInstallOptions, CliServiceStatus, CliServiceLifecycle } from "./src/service.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.120";
|
|
6
6
|
export * as cli from "./src/cli.js";
|
|
7
7
|
export * as definition from "./src/definition.js";
|
|
8
8
|
export * as icon from "./src/icon.js";
|
|
9
9
|
export * as service from "./src/service.js";
|
|
10
|
-
export { CliServiceInstallOptionsSchema } from "./src/cli.js";
|
|
11
10
|
export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServicePythonPackageSchema, CliServiceDefinitionSchema } from "./src/definition.js";
|
|
12
|
-
export { CliService } from "./src/service.js";
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
export { CliServiceInstallOptionsSchema, CliService } from "./src/service.js";
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUduSixPQUFPLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NsaS1zZXJ2aWNlXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTIwXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZGVmaW5pdGlvbiBmcm9tIFwiLi9zcmMvZGVmaW5pdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgaWNvbiBmcm9tIFwiLi9zcmMvaWNvbi50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSwgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLCBDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEsIENsaVNlcnZpY2VQeXRob25QYWNrYWdlU2NoZW1hLCBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYSB9IGZyb20gXCIuL3NyYy9kZWZpbml0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IENsaVNlcnZpY2VDb21tYW5kLCBDbGlTZXJ2aWNlQ29tbWFuZElucHV0LCBDbGlTZXJ2aWNlTWVudUl0ZW0sIENsaVNlcnZpY2VQeXRob25QYWNrYWdlLCBDbGlTZXJ2aWNlUHl0aG9uUGFja2FnZUlucHV0LCBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgQ2xpU2VydmljZURlZmluaXRpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2RlZmluaXRpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VydmljZVRyYXlHbHlwaCB9IGZyb20gXCIuL3NyYy9pY29uLnRzXCI7XG5leHBvcnQgeyBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnNTY2hlbWEsIENsaVNlcnZpY2UgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlQ29tcGlsZXIsIENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUnVudGltZU9wdGlvbnMsIENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucywgQ2xpU2VydmljZVN0YXR1cywgQ2xpU2VydmljZUxpZmVjeWNsZSB9IGZyb20gXCIuL3NyYy9zZXJ2aWNlLnRzXCI7XG4iXX0=
|
package/lib/src/cli.d.ts
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
9
|
import { Command } from "commander";
|
|
10
|
-
import { z } from "zod";
|
|
11
10
|
import type { CliServiceDefinition } from "./definition.ts";
|
|
12
11
|
import { type CliServiceLifecycle } from "./service.ts";
|
|
12
|
+
export { CliServiceInstallOptionsSchema, type CliServiceInstallOptions } from "./service.ts";
|
|
13
13
|
/** Static definition or action-time factory used by a service command group. */
|
|
14
14
|
export type CliServiceDefinitionSource = CliServiceDefinition | (() => CliServiceDefinition);
|
|
15
15
|
/** Injectable lifecycle and output boundary for service CLI tests and composition. */
|
|
@@ -21,11 +21,5 @@ export interface CliServiceCliDependencies {
|
|
|
21
21
|
/** Run a caller-supplied command with inherited terminal input and output. */
|
|
22
22
|
readonly execute?: (command: string, arguments_: readonly string[]) => Promise<void>;
|
|
23
23
|
}
|
|
24
|
-
export declare const CliServiceInstallOptionsSchema: z.ZodObject<{
|
|
25
|
-
start: z.ZodDefault<z.ZodBoolean>;
|
|
26
|
-
pythonProject: z.ZodOptional<z.ZodString>;
|
|
27
|
-
offline: z.ZodDefault<z.ZodBoolean>;
|
|
28
|
-
}, z.core.$strict>;
|
|
29
|
-
export type CliServiceInstallOptions = z.output<typeof CliServiceInstallOptionsSchema>;
|
|
30
24
|
/** Build install, start, stop, restart, status, logs, and uninstall commands for a service. */
|
|
31
25
|
export declare function buildServiceCommand(source: CliServiceDefinitionSource, dependencies?: CliServiceCliDependencies): Command;
|
package/lib/src/cli.js
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import * as exec from "@dbx-tools/core/exec";
|
|
10
10
|
import { Command } from "commander";
|
|
11
|
-
import {
|
|
12
|
-
|
|
11
|
+
import { CliService, CliServiceInstallOptionsSchema, } from "./service.js";
|
|
12
|
+
export { CliServiceInstallOptionsSchema } from "./service.js";
|
|
13
13
|
const DEFAULT_DEPENDENCIES = {
|
|
14
14
|
create: (definition) => new CliService(definition),
|
|
15
15
|
write: (value) => process.stdout.write(value),
|
|
@@ -17,21 +17,6 @@ const DEFAULT_DEPENDENCIES = {
|
|
|
17
17
|
await exec.spawn(command, arguments_, { check: true });
|
|
18
18
|
},
|
|
19
19
|
};
|
|
20
|
-
export const CliServiceInstallOptionsSchema = z
|
|
21
|
-
.object({
|
|
22
|
-
start: z.boolean().default(true).describe("Start the service after installation."),
|
|
23
|
-
pythonProject: z
|
|
24
|
-
.string()
|
|
25
|
-
.min(1)
|
|
26
|
-
.optional()
|
|
27
|
-
.describe("Local Python project installed instead of the registry package."),
|
|
28
|
-
offline: z
|
|
29
|
-
.boolean()
|
|
30
|
-
.default(false)
|
|
31
|
-
.describe("Install Python packages from the uv cache without network access."),
|
|
32
|
-
})
|
|
33
|
-
.strict()
|
|
34
|
-
.describe("Options for installing a current-user CLI service.");
|
|
35
20
|
/** Build install, start, stop, restart, status, logs, and uninstall commands for a service. */
|
|
36
21
|
export function buildServiceCommand(source, dependencies = DEFAULT_DEPENDENCIES) {
|
|
37
22
|
const definition = resolveDefinition(source);
|
|
@@ -107,4 +92,4 @@ export function buildServiceCommand(source, dependencies = DEFAULT_DEPENDENCIES)
|
|
|
107
92
|
function resolveDefinition(source) {
|
|
108
93
|
return typeof source === "function" ? source : () => source;
|
|
109
94
|
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxLQUFLLElBQUksTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFHeEIsT0FBTyxFQUFFLFVBQVUsRUFBNEIsTUFBTSxjQUFjLENBQUM7QUFlcEUsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUNsRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQWUsRUFBRSxVQUE2QixFQUFFLEVBQUU7UUFDaEUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ2tDLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQztLQUM1QyxNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsdUNBQXVDLENBQUM7SUFDbEYsYUFBYSxFQUFFLENBQUM7U0FDYixNQUFNLEVBQUU7U0FDUixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLGlFQUFpRSxDQUFDO0lBQzlFLE9BQU8sRUFBRSxDQUFDO1NBQ1AsT0FBTyxFQUFFO1NBQ1QsT0FBTyxDQUFD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QUFDO1NBQ25FLFFBQVEsQ0FBQyxjQUFjLEVBQUUsMERBQTBELENBQUM7U0FDcEYsa0JBQWtCLEVBQUU7U0FDcEIsa0JBQWtCLEVBQUU7U0FDcEIsb0JBQW9CLEVBQUU7U0FDdEIsTUFBTSxDQUFDLEtBQUssRUFBRSxnQkFBMEIsRUFBRSxFQUFFO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO1FBQ3JELE1BQU0sT0FBTyxDQUFDLFVBQVcsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLFdBQVcsQ0FBQztTQUNwQixXQUFXLENBQUMsa0RBQWtELENBQUM7U0FDL0QsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFrQztJQUMzRCxPQUFPLE9BQU8sTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWFuZGVyIGNvbW1hbmQgZ3JvdXAgZm9yIHRoZSBzaGFyZWQgc3lzdGVtLXRyYXkgc2VydmljZSBsaWZlY3ljbGUuXG4gKlxuICogQ29uc3VtaW5nIENMSXMgc2hvdWxkIG1vdW50IHtAbGluayBidWlsZFNlcnZpY2VDb21tYW5kfSBpbnN0ZWFkIG9mIGRlZmluaW5nXG4gKiBwYWNrYWdlLWxvY2FsIGluc3RhbGwvc3RhcnQvc3RvcC9zdGF0dXMgY29tbWFuZHMgd2l0aCBkaXZlcmdlbnQgYmVoYXZpb3IuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCAqIGFzIGV4ZWMgZnJvbSBcIkBkYngtdG9vbHMvY29yZS9leGVjXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb24udHNcIjtcbmltcG9ydCB7IENsaVNlcnZpY2UsIHR5cGUgQ2xpU2VydmljZUxpZmVjeWNsZSB9IGZyb20gXCIuL3NlcnZpY2UudHNcIjtcblxuLyoqIFN0YXRpYyBkZWZpbml0aW9uIG9yIGFjdGlvbi10aW1lIGZhY3RvcnkgdXNlZCBieSBhIHNlcnZpY2UgY29tbWFuZCBncm91cC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uU291cmNlID0gQ2xpU2VydmljZURlZmluaXRpb24gfCAoKCkgPT4gQ2xpU2VydmljZURlZmluaXRpb24pO1xuXG4vKiogSW5qZWN0YWJsZSBsaWZlY3ljbGUgYW5kIG91dHB1dCBib3VuZGFyeSBmb3Igc2VydmljZSBDTEkgdGVzdHMgYW5kIGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzIHtcbiAgLyoqIENvbnN0cnVjdCB0aGUgbGlmZWN5Y2xlIG1hbmFnZXIgdXNlZCBieSBjb21tYW5kIGFjdGlvbnMuICovXG4gIGNyZWF0ZShkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbik6IENsaVNlcnZpY2VMaWZlY3ljbGU7XG4gIC8qKiBXcml0ZSB0aGUgSlNPTiByZXN1bHQgb2YgdGhlIHN0YXR1cyBjb21tYW5kLiAqL1xuICB3cml0ZSh2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgLyoqIFJ1biBhIGNhbGxlci1zdXBwbGllZCBjb21tYW5kIHdpdGggaW5oZXJpdGVkIHRlcm1pbmFsIGlucHV0IGFuZCBvdXRwdXQuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGU/OiAoY29tbWFuZDogc3RyaW5nLCBhcmd1bWVudHNfOiByZWFkb25seSBzdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgREVGQVVMVF9ERVBFTkRFTkNJRVMgPSB7XG4gIGNyZWF0ZTogKGRlZmluaXRpb24pID0+IG5ldyBDbGlTZXJ2aWNlKGRlZmluaXRpb24pLFxuICB3cml0ZTogKHZhbHVlKSA9PiBwcm9jZXNzLnN0ZG91dC53cml0ZSh2YWx1ZSksXG4gIGV4ZWN1dGU6IGFzeW5jIChjb21tYW5kOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiB7XG4gICAgYXdhaXQgZXhlYy5zcGF3bihjb21tYW5kLCBhcmd1bWVudHNfLCB7IGNoZWNrOiB0cnVlIH0pO1xuICB9LFxufSBzYXRpc2ZpZXMgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcztcblxuZXhwb3J0IGNvbnN0IENsaVNlcnZpY2VJbnN0YWxsT3B0aW9uc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgc3RhcnQ6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSkuZGVzY3JpYmUoXCJTdGFydCB0aGUgc2VydmljZSBhZnRlciBpbnN0YWxsYXRpb24uXCIpLFxuICAgIHB5dGhvblByb2plY3Q6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLm1pbigxKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkxvY2FsIFB5dGhvbiBwcm9qZWN0IGluc3RhbGxlZCBpbnN0ZWFkIG9mIHRoZSByZWdpc3RyeSBwYWNrYWdlLlwiKSxcbiAgICBvZmZsaW5lOiB6XG4gICAgICAuYm9vbGVhbigpXG4gICAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAgIC5kZXNjcmliZShcIkluc3RhbGwgUHl0aG9uIHBhY2thZ2VzIGZyb20gdGhlIHV2IGNhY2hlIHdpdGhvdXQgbmV0d29yayBhY2Nlc3MuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiT3B0aW9ucyBmb3IgaW5zdGFsbGluZyBhIGN1cnJlbnQtdXNlciBDTEkgc2VydmljZS5cIik7XG5cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyA9IHoub3V0cHV0PHR5cGVvZiBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnNTY2hlbWE+O1xuXG4vKiogQnVpbGQgaW5zdGFsbCwgc3RhcnQsIHN0b3AsIHJlc3RhcnQsIHN0YXR1cywgbG9ncywgYW5kIHVuaW5zdGFsbCBjb21tYW5kcyBmb3IgYSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2VydmljZUNvbW1hbmQoXG4gIHNvdXJjZTogQ2xpU2VydmljZURlZmluaXRpb25Tb3VyY2UsXG4gIGRlcGVuZGVuY2llczogQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyA9IERFRkFVTFRfREVQRU5ERU5DSUVTLFxuKTogQ29tbWFuZCB7XG4gIGNvbnN0IGRlZmluaXRpb24gPSByZXNvbHZlRGVmaW5pdGlvbihzb3VyY2UpO1xuICBjb25zdCBzZXJ2aWNlID0gKCkgPT4gZGVwZW5kZW5jaWVzLmNyZWF0ZShkZWZpbml0aW9uKCkpO1xuICBjb25zdCBleGVjdXRlID0gZGVwZW5kZW5jaWVzLmV4ZWN1dGUgPz8gREVGQVVMVF9ERVBFTkRFTkNJRVMuZXhlY3V0ZTtcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBDb21tYW5kKFwic2VydmljZVwiKVxuICAgIC5lbmFibGVQb3NpdGlvbmFsT3B0aW9ucygpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgdHlwZW9mIHNvdXJjZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gXCJJbnN0YWxsIGFuZCBtYW5hZ2UgdGhlIGRlc2t0b3Agc2VydmljZVwiXG4gICAgICAgIDogYEluc3RhbGwgYW5kIG1hbmFnZSB0aGUgJHtzb3VyY2UubmFtZX0gZGVza3RvcCBzZXJ2aWNlYCxcbiAgICApO1xuXG4gIGNvbnN0IGluc3RhbGwgPSBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJpbnN0YWxsXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiSW5zdGFsbCB0aGUgc2VydmljZSBmb3IgdGhlIGN1cnJlbnQgdXNlciBhbmQgc3RhcnQgaXRcIilcbiAgICAub3B0aW9uKFwiLS1uby1zdGFydFwiLCBcIkRvIG5vdCBzdGFydCB0aGUgc2VydmljZSBhZnRlciBpbnN0YWxsYXRpb25cIilcbiAgICAub3B0aW9uKFxuICAgICAgXCItLXB5dGhvbi1wcm9qZWN0IDxwYXRoPlwiLFxuICAgICAgXCJJbnN0YWxsIGEgbG9jYWwgUHl0aG9uIHByb2plY3QgaW5zdGVhZCBvZiB0aGUgcmVnaXN0cnkgcGFja2FnZVwiLFxuICAgIClcbiAgICAub3B0aW9uKFwiLS1vZmZsaW5lXCIsIFwiSW5zdGFsbCBQeXRob24gcGFja2FnZXMgZnJvbSB0aGUgdXYgY2FjaGUgd2l0aG91dCBuZXR3b3JrIGFjY2Vzc1wiKTtcbiAgaW5zdGFsbC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnNTY2hlbWEucGFyc2Uoe1xuICAgICAgc3RhcnQ6IGluc3RhbGwuZ2V0T3B0aW9uVmFsdWUoXCJzdGFydFwiKSxcbiAgICAgIHB5dGhvblByb2plY3Q6IGluc3RhbGwuZ2V0T3B0aW9uVmFsdWUoXCJweXRob25Qcm9qZWN0XCIpLFxuICAgICAgb2ZmbGluZTogaW5zdGFsbC5nZXRPcHRpb25WYWx1ZShcIm9mZmxpbmVcIiksXG4gICAgfSk7XG4gICAgYXdhaXQgc2VydmljZSgpLmluc3RhbGwob3B0aW9ucyk7XG4gIH0pO1xuXG4gIGNvbW1hbmRcbiAgICAuY29tbWFuZChcInN0YXJ0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiU3RhcnQgdGhlIGluc3RhbGxlZCBzZXJ2aWNlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXJ2aWNlKCkuc3RhcnQoKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJzdG9wXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiU3RvcCB0aGUgcnVubmluZyBzZXJ2aWNlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXJ2aWNlKCkuc3RvcCgpO1xuICAgIH0pO1xuXG4gIGNvbW1hbmRcbiAgICAuY29tbWFuZChcInJlc3RhcnRcIilcbiAgICAuZGVzY3JpcHRpb24oXCJSZXN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmljZSgpLnJlc3RhcnQoKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJzdGF0dXNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJQcmludCBzZXJ2aWNlIGluc3RhbGxhdGlvbiBhbmQgcHJvY2VzcyBzdGF0ZSBhcyBKU09OXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBkZXBlbmRlbmNpZXMud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoYXdhaXQgc2VydmljZSgpLnN0YXR1cygpLCBudWxsLCAyKX1cXG5gKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJsb2dzXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiUHJpbnQgdGhlIHNlcnZpY2UgbG9nIHBhdGggb3IgYXBwZW5kIGl0IHRvIGEgY29tbWFuZFwiKVxuICAgIC5hcmd1bWVudChcIltjb21tYW5kLi4uXVwiLCBcIkNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gYmVmb3JlIHRoZSBzZXJ2aWNlIGxvZyBwYXRoXCIpXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLnBhc3NUaHJvdWdoT3B0aW9ucygpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuYWN0aW9uKGFzeW5jIChjb21tYW5kQXJndW1lbnRzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgbG9nUGF0aCA9IHNlcnZpY2UoKS5sb2dQYXRoKCk7XG4gICAgICBpZiAoY29tbWFuZEFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLndyaXRlKGAke2xvZ1BhdGh9XFxuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFtleGVjdXRhYmxlLCAuLi5hcmd1bWVudHNfXSA9IGNvbW1hbmRBcmd1bWVudHM7XG4gICAgICBhd2FpdCBleGVjdXRlKGV4ZWN1dGFibGUhLCBbLi4uYXJndW1lbnRzXywgbG9nUGF0aF0pO1xuICAgIH0pO1xuXG4gIGNvbW1hbmRcbiAgICAuY29tbWFuZChcInVuaW5zdGFsbFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIlN0b3AgYW5kIHJlbW92ZSB0aGUgc2VydmljZSBmb3IgdGhlIGN1cnJlbnQgdXNlclwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmljZSgpLnVuaW5zdGFsbCgpO1xuICAgIH0pO1xuXG4gIHJldHVybiBjb21tYW5kO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVmaW5pdGlvbihzb3VyY2U6IENsaVNlcnZpY2VEZWZpbml0aW9uU291cmNlKTogKCkgPT4gQ2xpU2VydmljZURlZmluaXRpb24ge1xuICByZXR1cm4gdHlwZW9mIHNvdXJjZSA9PT0gXCJmdW5jdGlvblwiID8gc291cmNlIDogKCkgPT4gc291cmNlO1xufVxuIl19
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxLQUFLLElBQUksTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3BDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsOEJBQThCLEdBRS9CLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSw4QkFBOEIsRUFBaUMsTUFBTSxjQUFjLENBQUM7QUFlN0YsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUNsRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQWUsRUFBRSxVQUE2QixFQUFFLEVBQUU7UUFDaEUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ2tDLENBQUM7QUFFdEMsK0ZBQStGO0FBQy9GLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBa0MsRUFDbEMsZUFBMEMsb0JBQW9CO0lBRTlELE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxJQUFJLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztJQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJ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QU0sT0FBTyxDQUFDLFVBQVcsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPO1NBQ0osT0FBTyxDQUFDLFdBQVcsQ0FBQztTQUNwQixXQUFXLENBQUMsa0RBQWtELENBQUM7U0FDL0QsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE1BQU0sT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFrQztJQUMzRCxPQUFPLE9BQU8sTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWFuZGVyIGNvbW1hbmQgZ3JvdXAgZm9yIHRoZSBzaGFyZWQgc3lzdGVtLXRyYXkgc2VydmljZSBsaWZlY3ljbGUuXG4gKlxuICogQ29uc3VtaW5nIENMSXMgc2hvdWxkIG1vdW50IHtAbGluayBidWlsZFNlcnZpY2VDb21tYW5kfSBpbnN0ZWFkIG9mIGRlZmluaW5nXG4gKiBwYWNrYWdlLWxvY2FsIGluc3RhbGwvc3RhcnQvc3RvcC9zdGF0dXMgY29tbWFuZHMgd2l0aCBkaXZlcmdlbnQgYmVoYXZpb3IuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCAqIGFzIGV4ZWMgZnJvbSBcIkBkYngtdG9vbHMvY29yZS9leGVjXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG5pbXBvcnQgdHlwZSB7IENsaVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvbi50c1wiO1xuaW1wb3J0IHtcbiAgQ2xpU2VydmljZSxcbiAgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hLFxuICB0eXBlIENsaVNlcnZpY2VMaWZlY3ljbGUsXG59IGZyb20gXCIuL3NlcnZpY2UudHNcIjtcblxuZXhwb3J0IHsgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hLCB0eXBlIENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyB9IGZyb20gXCIuL3NlcnZpY2UudHNcIjtcblxuLyoqIFN0YXRpYyBkZWZpbml0aW9uIG9yIGFjdGlvbi10aW1lIGZhY3RvcnkgdXNlZCBieSBhIHNlcnZpY2UgY29tbWFuZCBncm91cC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uU291cmNlID0gQ2xpU2VydmljZURlZmluaXRpb24gfCAoKCkgPT4gQ2xpU2VydmljZURlZmluaXRpb24pO1xuXG4vKiogSW5qZWN0YWJsZSBsaWZlY3ljbGUgYW5kIG91dHB1dCBib3VuZGFyeSBmb3Igc2VydmljZSBDTEkgdGVzdHMgYW5kIGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzIHtcbiAgLyoqIENvbnN0cnVjdCB0aGUgbGlmZWN5Y2xlIG1hbmFnZXIgdXNlZCBieSBjb21tYW5kIGFjdGlvbnMuICovXG4gIGNyZWF0ZShkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbik6IENsaVNlcnZpY2VMaWZlY3ljbGU7XG4gIC8qKiBXcml0ZSB0aGUgSlNPTiByZXN1bHQgb2YgdGhlIHN0YXR1cyBjb21tYW5kLiAqL1xuICB3cml0ZSh2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgLyoqIFJ1biBhIGNhbGxlci1zdXBwbGllZCBjb21tYW5kIHdpdGggaW5oZXJpdGVkIHRlcm1pbmFsIGlucHV0IGFuZCBvdXRwdXQuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGU/OiAoY29tbWFuZDogc3RyaW5nLCBhcmd1bWVudHNfOiByZWFkb25seSBzdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgREVGQVVMVF9ERVBFTkRFTkNJRVMgPSB7XG4gIGNyZWF0ZTogKGRlZmluaXRpb24pID0+IG5ldyBDbGlTZXJ2aWNlKGRlZmluaXRpb24pLFxuICB3cml0ZTogKHZhbHVlKSA9PiBwcm9jZXNzLnN0ZG91dC53cml0ZSh2YWx1ZSksXG4gIGV4ZWN1dGU6IGFzeW5jIChjb21tYW5kOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiB7XG4gICAgYXdhaXQgZXhlYy5zcGF3bihjb21tYW5kLCBhcmd1bWVudHNfLCB7IGNoZWNrOiB0cnVlIH0pO1xuICB9LFxufSBzYXRpc2ZpZXMgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcztcblxuLyoqIEJ1aWxkIGluc3RhbGwsIHN0YXJ0LCBzdG9wLCByZXN0YXJ0LCBzdGF0dXMsIGxvZ3MsIGFuZCB1bmluc3RhbGwgY29tbWFuZHMgZm9yIGEgc2VydmljZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNlcnZpY2VDb21tYW5kKFxuICBzb3VyY2U6IENsaVNlcnZpY2VEZWZpbml0aW9uU291cmNlLFxuICBkZXBlbmRlbmNpZXM6IENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXMgPSBERUZBVUxUX0RFUEVOREVOQ0lFUyxcbik6IENvbW1hbmQge1xuICBjb25zdCBkZWZpbml0aW9uID0gcmVzb2x2ZURlZmluaXRpb24oc291cmNlKTtcbiAgY29uc3Qgc2VydmljZSA9ICgpID0+IGRlcGVuZGVuY2llcy5jcmVhdGUoZGVmaW5pdGlvbigpKTtcbiAgY29uc3QgZXhlY3V0ZSA9IGRlcGVuZGVuY2llcy5leGVjdXRlID8/IERFRkFVTFRfREVQRU5ERU5DSUVTLmV4ZWN1dGU7XG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgQ29tbWFuZChcInNlcnZpY2VcIilcbiAgICAuZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMoKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIHR5cGVvZiBzb3VyY2UgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IFwiSW5zdGFsbCBhbmQgbWFuYWdlIHRoZSBkZXNrdG9wIHNlcnZpY2VcIlxuICAgICAgICA6IGBJbnN0YWxsIGFuZCBtYW5hZ2UgdGhlICR7c291cmNlLm5hbWV9IGRlc2t0b3Agc2VydmljZWAsXG4gICAgKTtcblxuICBjb25zdCBpbnN0YWxsID0gY29tbWFuZFxuICAgIC5jb21tYW5kKFwiaW5zdGFsbFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkluc3RhbGwgdGhlIHNlcnZpY2UgZm9yIHRoZSBjdXJyZW50IHVzZXIgYW5kIHN0YXJ0IGl0XCIpXG4gICAgLm9wdGlvbihcIi0tbm8tc3RhcnRcIiwgXCJEbyBub3Qgc3RhcnQgdGhlIHNlcnZpY2UgYWZ0ZXIgaW5zdGFsbGF0aW9uXCIpXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1weXRob24tcHJvamVjdCA8cGF0aD5cIixcbiAgICAgIFwiSW5zdGFsbCBhIGxvY2FsIFB5dGhvbiBwcm9qZWN0IGluc3RlYWQgb2YgdGhlIHJlZ2lzdHJ5IHBhY2thZ2VcIixcbiAgICApXG4gICAgLm9wdGlvbihcIi0tb2ZmbGluZVwiLCBcIkluc3RhbGwgUHl0aG9uIHBhY2thZ2VzIGZyb20gdGhlIHV2IGNhY2hlIHdpdGhvdXQgbmV0d29yayBhY2Nlc3NcIik7XG4gIGluc3RhbGwuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hLnBhcnNlKHtcbiAgICAgIHN0YXJ0OiBpbnN0YWxsLmdldE9wdGlvblZhbHVlKFwic3RhcnRcIiksXG4gICAgICBweXRob25Qcm9qZWN0OiBpbnN0YWxsLmdldE9wdGlvblZhbHVlKFwicHl0aG9uUHJvamVjdFwiKSxcbiAgICAgIG9mZmxpbmU6IGluc3RhbGwuZ2V0T3B0aW9uVmFsdWUoXCJvZmZsaW5lXCIpLFxuICAgIH0pO1xuICAgIGF3YWl0IHNlcnZpY2UoKS5pbnN0YWxsKG9wdGlvbnMpO1xuICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJzdGFydFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIlN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmljZSgpLnN0YXJ0KCk7XG4gICAgfSk7XG5cbiAgY29tbWFuZFxuICAgIC5jb21tYW5kKFwic3RvcFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIlN0b3AgdGhlIHJ1bm5pbmcgc2VydmljZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmljZSgpLnN0b3AoKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJyZXN0YXJ0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiUmVzdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2VcIilcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNlcnZpY2UoKS5yZXN0YXJ0KCk7XG4gICAgfSk7XG5cbiAgY29tbWFuZFxuICAgIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiUHJpbnQgc2VydmljZSBpbnN0YWxsYXRpb24gYW5kIHByb2Nlc3Mgc3RhdGUgYXMgSlNPTlwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgZGVwZW5kZW5jaWVzLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KGF3YWl0IHNlcnZpY2UoKS5zdGF0dXMoKSwgbnVsbCwgMil9XFxuYCk7XG4gICAgfSk7XG5cbiAgY29tbWFuZFxuICAgIC5jb21tYW5kKFwibG9nc1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIlByaW50IHRoZSBzZXJ2aWNlIGxvZyBwYXRoIG9yIGFwcGVuZCBpdCB0byBhIGNvbW1hbmRcIilcbiAgICAuYXJndW1lbnQoXCJbY29tbWFuZC4uLl1cIiwgXCJDb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIGJlZm9yZSB0aGUgc2VydmljZSBsb2cgcGF0aFwiKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5wYXNzVGhyb3VnaE9wdGlvbnMoKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmFjdGlvbihhc3luYyAoY29tbWFuZEFyZ3VtZW50czogc3RyaW5nW10pID0+IHtcbiAgICAgIGNvbnN0IGxvZ1BhdGggPSBzZXJ2aWNlKCkubG9nUGF0aCgpO1xuICAgICAgaWYgKGNvbW1hbmRBcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlcGVuZGVuY2llcy53cml0ZShgJHtsb2dQYXRofVxcbmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBbZXhlY3V0YWJsZSwgLi4uYXJndW1lbnRzX10gPSBjb21tYW5kQXJndW1lbnRzO1xuICAgICAgYXdhaXQgZXhlY3V0ZShleGVjdXRhYmxlISwgWy4uLmFyZ3VtZW50c18sIGxvZ1BhdGhdKTtcbiAgICB9KTtcblxuICBjb21tYW5kXG4gICAgLmNvbW1hbmQoXCJ1bmluc3RhbGxcIilcbiAgICAuZGVzY3JpcHRpb24oXCJTdG9wIGFuZCByZW1vdmUgdGhlIHNlcnZpY2UgZm9yIHRoZSBjdXJyZW50IHVzZXJcIilcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNlcnZpY2UoKS51bmluc3RhbGwoKTtcbiAgICB9KTtcblxuICByZXR1cm4gY29tbWFuZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmluaXRpb24oc291cmNlOiBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSk6ICgpID0+IENsaVNlcnZpY2VEZWZpbml0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBzb3VyY2UgPT09IFwiZnVuY3Rpb25cIiA/IHNvdXJjZSA6ICgpID0+IHNvdXJjZTtcbn1cbiJdfQ==
|
package/lib/src/service.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
+
import { z } from "zod";
|
|
11
12
|
import { type CliServiceDefinition } from "./definition.ts";
|
|
12
13
|
/** Compile one TypeScript or JavaScript entrypoint into a standalone executable. */
|
|
13
14
|
export type CliServiceCompiler = (entrypoint: string, output: string, workingDirectory: string, external?: readonly string[]) => Promise<void>;
|
|
@@ -42,15 +43,13 @@ export interface CliServiceRuntimeOptions {
|
|
|
42
43
|
/** systray2 native executable override. */
|
|
43
44
|
readonly trayExecutable?: string;
|
|
44
45
|
}
|
|
46
|
+
export declare const CliServiceInstallOptionsSchema: z.ZodObject<{
|
|
47
|
+
start: z.ZodDefault<z.ZodBoolean>;
|
|
48
|
+
pythonProject: z.ZodOptional<z.ZodString>;
|
|
49
|
+
offline: z.ZodDefault<z.ZodBoolean>;
|
|
50
|
+
}, z.core.$strict>;
|
|
45
51
|
/** Options controlling service installation. */
|
|
46
|
-
export
|
|
47
|
-
/** Start the service immediately after writing its configuration and login entry. */
|
|
48
|
-
readonly start?: boolean;
|
|
49
|
-
/** Install the primary Python package from this local project instead of the registry. */
|
|
50
|
-
readonly pythonProject?: string;
|
|
51
|
-
/** Resolve and install Python packages only from the uv cache. */
|
|
52
|
-
readonly offline?: boolean;
|
|
53
|
-
}
|
|
52
|
+
export type CliServiceInstallOptions = z.input<typeof CliServiceInstallOptionsSchema>;
|
|
54
53
|
/** Current installation and process state for a system-tray service. */
|
|
55
54
|
export interface CliServiceStatus {
|
|
56
55
|
/** Whether the serialized service definition exists. */
|
package/lib/src/service.js
CHANGED
|
@@ -16,6 +16,7 @@ import { dirname, extname, join, resolve } from "node:path";
|
|
|
16
16
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
17
17
|
import * as bin from "@dbx-tools/core/bin";
|
|
18
18
|
import { asyncUtils } from "@dbx-tools/shared-core";
|
|
19
|
+
import { z } from "zod";
|
|
19
20
|
import { compileWithBun } from "./_compile.js";
|
|
20
21
|
import { readServiceDefinition, writeServiceDefinition } from "./_config.js";
|
|
21
22
|
import { requestServiceControl } from "./_control.js";
|
|
@@ -27,6 +28,21 @@ import { CliServiceDefinitionSchema, } from "./definition.js";
|
|
|
27
28
|
const DEFAULT_START_TIMEOUT_MILLISECONDS = 15_000;
|
|
28
29
|
const DEFAULT_STOP_TIMEOUT_MILLISECONDS = 10_000;
|
|
29
30
|
const POLL_INTERVAL_MILLISECONDS = 100;
|
|
31
|
+
export const CliServiceInstallOptionsSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
start: z.boolean().default(true).describe("Start the service after installation."),
|
|
34
|
+
pythonProject: z
|
|
35
|
+
.string()
|
|
36
|
+
.min(1)
|
|
37
|
+
.optional()
|
|
38
|
+
.describe("Local Python project installed instead of the registry package."),
|
|
39
|
+
offline: z
|
|
40
|
+
.boolean()
|
|
41
|
+
.default(false)
|
|
42
|
+
.describe("Install Python packages from the uv cache without network access."),
|
|
43
|
+
})
|
|
44
|
+
.strict()
|
|
45
|
+
.describe("Options for installing a current-user CLI service.");
|
|
30
46
|
/** Cross-platform lifecycle manager for one system-tray user service. */
|
|
31
47
|
export class CliService {
|
|
32
48
|
definition;
|
|
@@ -300,4 +316,4 @@ async function waitForState(read, expected, timeoutMilliseconds, message) {
|
|
|
300
316
|
}
|
|
301
317
|
throw new Error(message);
|
|
302
318
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixtQkFBbUIsR0FFcEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IscUJBQXFCLEdBQ3RCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQ0wsMEJBQTBCLEdBSTNCLE1BQU0saUJBQWlCLENB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S0FBSyxRQUFRO1lBQUUsT0FBTztRQUN4QyxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsLCBzdGFydCwgc3RvcCwgYW5kIGluc3BlY3QgYSBzeXN0ZW0tdHJheSB1c2VyIHNlcnZpY2UuXG4gKlxuICogVGhpcyBtb2R1bGUgb3ducyBjdXJyZW50LXVzZXIgc2VydmljZSBjb21waWxhdGlvbiBhbmQgbGlmZWN5Y2xlIGFjcm9zc1xuICogY29uc3VtaW5nIENMSXMuIFJldXNlIHtAbGluayBDbGlTZXJ2aWNlfSByYXRoZXIgdGhhbiBhZGRpbmcgcHJvZHVjdC1zcGVjaWZpY1xuICogaW5zdGFsbGVycywgdXYgUHl0aG9uIGVudmlyb25tZW50cywgc3RhcnR1cCByZWdpc3RyYXRpb24sIHJ1bnRpbWVcbiAqIGRpcmVjdG9yaWVzLCBvciBjb250cm9sIHNvY2tldHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBybSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5pbXBvcnQgKiBhcyBiaW4gZnJvbSBcIkBkYngtdG9vbHMvY29yZS9iaW5cIjtcbmltcG9ydCB7IGFzeW5jVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgY29tcGlsZVdpdGhCdW4gfSBmcm9tIFwiLi9fY29tcGlsZS50c1wiO1xuaW1wb3J0IHsgcmVhZFNlcnZpY2VEZWZpbml0aW9uLCB3cml0ZVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vX2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcmVxdWVzdFNlcnZpY2VDb250cm9sIH0gZnJvbSBcIi4vX2NvbnRyb2wudHNcIjtcbmltcG9ydCB7IHJlc29sdmVTZXJ2aWNlUGFja2FnZSwgdHlwZSBTZXJ2aWNlUGFja2FnZSB9IGZyb20gXCIuL19wYWNrYWdlLnRzXCI7XG5pbXBvcnQge1xuICBkZWZhdWx0UnVudGltZUNvbnRleHQsXG4gIHJlc29sdmVTZXJ2aWNlUGF0aHMsXG4gIHR5cGUgU2VydmljZVJ1bnRpbWVDb250ZXh0LFxufSBmcm9tIFwiLi9fcGF0aHMudHNcIjtcbmltcG9ydCB7XG4gIGV4dGVybmFsUnVudGltZVBhY2thZ2VzLFxuICBpbnN0YWxsU2VydmljZVB5dGhvblBhY2thZ2UsXG4gIGluc3RhbGxTZXJ2aWNlUnVudGltZSxcbn0gZnJvbSBcIi4vX3J1bnRpbWUudHNcIjtcbmltcG9ydCB7IGluc3RhbGxTdGFydHVwLCByZW1vdmVTdGFydHVwLCB0eXBlIFNlcnZpY2VMYXVuY2ggfSBmcm9tIFwiLi9fc3RhcnR1cC50c1wiO1xuaW1wb3J0IHtcbiAgQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEsXG4gIHR5cGUgQ2xpU2VydmljZUNvbW1hbmQsXG4gIHR5cGUgQ2xpU2VydmljZURlZmluaXRpb24sXG4gIHR5cGUgQ2xpU2VydmljZU1lbnVJdGVtLFxufSBmcm9tIFwiLi9kZWZpbml0aW9uLnRzXCI7XG5cbmNvbnN0IERFRkFVTFRfU1RBUlRfVElNRU9VVF9NSUxMSVNFQ09ORFMgPSAxNV8wMDA7XG5jb25zdCBERUZBVUxUX1NUT1BfVElNRU9VVF9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBQT0xMX0lOVEVSVkFMX01JTExJU0VDT05EUyA9IDEwMDtcblxuLyoqIENvbXBpbGUgb25lIFR5cGVTY3JpcHQgb3IgSmF2YVNjcmlwdCBlbnRyeXBvaW50IGludG8gYSBzdGFuZGFsb25lIGV4ZWN1dGFibGUuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlQ29tcGlsZXIgPSAoXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgZXh0ZXJuYWw/OiByZWFkb25seSBzdHJpbmdbXSxcbikgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqIEluc3RhbGwgZXhhY3QgZXh0ZXJuYWwgcnVudGltZSBkZXBlbmRlbmNpZXMgaW50byB0aGUgZGJ4LXRvb2xzIGhvbWUuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlUnVudGltZUluc3RhbGxlciA9IChcbiAgYnVuRXhlY3V0YWJsZTogc3RyaW5nLFxuICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PixcbikgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqIEluc3RhbGwgYSBQeXRob24gcGFja2FnZSBpbnRvIGEgc2VydmljZS1vd25lZCB1diBlbnZpcm9ubWVudC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VQeXRob25JbnN0YWxsZXIgPSAoXG4gIHV2RXhlY3V0YWJsZTogc3RyaW5nLFxuICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgcGFja2FnZVNwZWNpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBweXRob246IHN0cmluZyxcbiAgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSxcbiAgb2ZmbGluZTogYm9vbGVhbixcbikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4vKiogSG9zdCBydW50aW1lIG92ZXJyaWRlcyBmb3IgdGVzdHMsIGVtYmVkZGVkIGRpc3RyaWJ1dGlvbnMsIGFuZCBub25zdGFuZGFyZCBob21lcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpU2VydmljZVJ1bnRpbWVPcHRpb25zIHtcbiAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdXNlZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgc3RhcnR1cCByZWdpc3RyYXRpb24uICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogTm9kZUpTLlBsYXRmb3JtO1xuICAvKiogRW52aXJvbm1lbnQgdXNlZCB0byBsb2NhdGUgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBkaXJlY3Rvcmllcy4gKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBSZWFkb25seTxOb2RlSlMuUHJvY2Vzc0Vudj47XG4gIC8qKiBIb21lIGRpcmVjdG9yeSB1c2VkIHdoZW4gcGxhdGZvcm0gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBhYnNlbnQuICovXG4gIHJlYWRvbmx5IGhvbWVEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKiBUZW1wb3JhcnkgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZSBsb2NhbCBjb250cm9sIHNvY2tldC4gKi9cbiAgcmVhZG9ubHkgdGVtcG9yYXJ5RGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKiogU2hhcmVkIGRieC10b29scyBob21lIGNvbnRhaW5pbmcgaW5zdGFsbGVkIHNlcnZpY2UgYmluYXJpZXMuICovXG4gIHJlYWRvbmx5IGdsb2JhbEhvbWVEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKiBQYWNrYWdlLXByb3ZpZGVkIEJ1biBleGVjdXRhYmxlIG92ZXJyaWRlLiAqL1xuICByZWFkb25seSBidW5FeGVjdXRhYmxlPzogc3RyaW5nO1xuICAvKiogdXYgZXhlY3V0YWJsZSB1c2VkIGZvciBtYW5hZ2VkIFB5dGhvbiBwYWNrYWdlIGVudmlyb25tZW50cy4gKi9cbiAgcmVhZG9ubHkgdXZFeGVjdXRhYmxlPzogc3RyaW5nO1xuICAvKiogU3RhbmRhbG9uZSBjb21waWxlciBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgY29tcGlsZT86IENsaVNlcnZpY2VDb21waWxlcjtcbiAgLyoqIEV4dGVybmFsIHJ1bnRpbWUgZGVwZW5kZW5jeSBpbnN0YWxsZXIgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGluc3RhbGxSdW50aW1lPzogQ2xpU2VydmljZVJ1bnRpbWVJbnN0YWxsZXI7XG4gIC8qKiBQeXRob24gcGFja2FnZSBpbnN0YWxsZXIgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGluc3RhbGxQeXRob24/OiBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyO1xuICAvKiogU3lzdGVtLXRyYXkgaG9zdCBzb3VyY2UgZW50cnlwb2ludCBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgaG9zdEVudHJ5cG9pbnQ/OiBzdHJpbmc7XG4gIC8qKiBzeXN0cmF5MiBuYXRpdmUgZXhlY3V0YWJsZSBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgdHJheUV4ZWN1dGFibGU/OiBzdHJpbmc7XG59XG5cbi8qKiBPcHRpb25zIGNvbnRyb2xsaW5nIHNlcnZpY2UgaW5zdGFsbGF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnMge1xuICAvKiogU3RhcnQgdGhlIHNlcnZpY2UgaW1tZWRpYXRlbHkgYWZ0ZXIgd3JpdGluZyBpdHMgY29uZmlndXJhdGlvbiBhbmQgbG9naW4gZW50cnkuICovXG4gIHJlYWRvbmx5IHN0YXJ0PzogYm9vbGVhbjtcbiAgLyoqIEluc3RhbGwgdGhlIHByaW1hcnkgUHl0aG9uIHBhY2thZ2UgZnJvbSB0aGlzIGxvY2FsIHByb2plY3QgaW5zdGVhZCBvZiB0aGUgcmVnaXN0cnkuICovXG4gIHJlYWRvbmx5IHB5dGhvblByb2plY3Q/OiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlIGFuZCBpbnN0YWxsIFB5dGhvbiBwYWNrYWdlcyBvbmx5IGZyb20gdGhlIHV2IGNhY2hlLiAqL1xuICByZWFkb25seSBvZmZsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqIEN1cnJlbnQgaW5zdGFsbGF0aW9uIGFuZCBwcm9jZXNzIHN0YXRlIGZvciBhIHN5c3RlbS10cmF5IHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VTdGF0dXMge1xuICAvKiogV2hldGhlciB0aGUgc2VyaWFsaXplZCBzZXJ2aWNlIGRlZmluaXRpb24gZXhpc3RzLiAqL1xuICByZWFkb25seSBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB0cmF5IGhvc3QgYW5zd2VyZWQgaXRzIGxvY2FsIGNvbnRyb2wgc29ja2V0LiAqL1xuICByZWFkb25seSBydW5uaW5nOiBib29sZWFuO1xuICAvKiogVHJheSBob3N0IHByb2Nlc3MgSUQgd2hlbiBydW5uaW5nLiAqL1xuICByZWFkb25seSBwaWQ/OiBudW1iZXI7XG4gIC8qKiBNYW5hZ2VkIGNoaWxkIHByb2Nlc3MgSUQgd2hlbiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlcyBhIGNvbW1hbmQuICovXG4gIHJlYWRvbmx5IHNlcnZpY2VQaWQ/OiBudW1iZXI7XG59XG5cbi8qKiBMaWZlY3ljbGUgY29udHJhY3QgY29uc3VtZWQgYnkgQ0xJIGNvbW1hbmQgYnVpbGRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VMaWZlY3ljbGUge1xuICAvKiogSW5zdGFsbCB0aGUgbG9naW4gZW50cnkgYW5kIG9wdGlvbmFsbHkgc3RhcnQgdGhlIHNlcnZpY2UuICovXG4gIGluc3RhbGwob3B0aW9ucz86IENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBTdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2Ugd2hlbiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiAqL1xuICBzdGFydCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU3RvcCB0aGUgcnVubmluZyB0cmF5IGhvc3QgYW5kIGl0cyBtYW5hZ2VkIGNoaWxkIHByb2Nlc3MuICovXG4gIHN0b3AoKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFN0b3AgYW5kIHN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZS4gKi9cbiAgcmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogUmV0dXJuIHRoZSBtYW5hZ2VkIHNlcnZpY2UgcHJvY2VzcyBsb2cgcGF0aC4gKi9cbiAgbG9nUGF0aCgpOiBzdHJpbmc7XG4gIC8qKiBTdG9wIHRoZSBzZXJ2aWNlIGFuZCByZW1vdmUgaXRzIGxvZ2luIGVudHJ5IGFuZCBwYWNrYWdlLW93bmVkIHN0YXRlLiAqL1xuICB1bmluc3RhbGwoKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlYWQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIGFuZCBwcm9jZXNzIHN0YXRlLiAqL1xuICBzdGF0dXMoKTogUHJvbWlzZTxDbGlTZXJ2aWNlU3RhdHVzPjtcbn1cblxuLyoqIENyb3NzLXBsYXRmb3JtIGxpZmVjeWNsZSBtYW5hZ2VyIGZvciBvbmUgc3lzdGVtLXRyYXkgdXNlciBzZXJ2aWNlLiAqL1xuZXhwb3J0IGNsYXNzIENsaVNlcnZpY2UgaW1wbGVtZW50cyBDbGlTZXJ2aWNlTGlmZWN5Y2xlIHtcbiAgcmVhZG9ubHkgZGVmaW5pdGlvbjogQ2xpU2VydmljZURlZmluaXRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lOiBTZXJ2aWNlUnVudGltZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsSG9tZURpcmVjdG9yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1bkV4ZWN1dGFibGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB1dkV4ZWN1dGFibGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21waWxlcjogQ2xpU2VydmljZUNvbXBpbGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWVJbnN0YWxsZXI6IENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHB5dGhvbkluc3RhbGxlcjogQ2xpU2VydmljZVB5dGhvbkluc3RhbGxlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBob3N0RW50cnlwb2ludDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYXlFeGVjdXRhYmxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxpZmVjeWNsZSBtYW5hZ2VyIGZyb20gYSBzZXJpYWxpemFibGUgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRlZmluaXRpb24gUHJvZHVjdC1vd25lZCBzZXJ2aWNlIG1ldGFkYXRhLCBwcm9jZXNzLCBhbmQgbWVudS5cbiAgICogQHBhcmFtIG9wdGlvbnMgSG9zdCBydW50aW1lIG92ZXJyaWRlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IENsaVNlcnZpY2VEZWZpbml0aW9uLCBvcHRpb25zOiBDbGlTZXJ2aWNlUnVudGltZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuZGVmaW5pdGlvbiA9IENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hLnBhcnNlKGRlZmluaXRpb24pO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gZGVmYXVsdFJ1bnRpbWVDb250ZXh0KCk7XG4gICAgdGhpcy5ydW50aW1lID0ge1xuICAgICAgcGxhdGZvcm06IG9wdGlvbnMucGxhdGZvcm0gPz8gZGVmYXVsdHMucGxhdGZvcm0sXG4gICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCA/PyBkZWZhdWx0cy5lbnZpcm9ubWVudCxcbiAgICAgIGhvbWVEaXJlY3Rvcnk6IG9wdGlvbnMuaG9tZURpcmVjdG9yeSA/PyBkZWZhdWx0cy5ob21lRGlyZWN0b3J5LFxuICAgICAgdGVtcG9yYXJ5RGlyZWN0b3J5OiBvcHRpb25zLnRlbXBvcmFyeURpcmVjdG9yeSA/PyBkZWZhdWx0cy50ZW1wb3JhcnlEaXJlY3RvcnksXG4gICAgfTtcbiAgICB0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnkgPVxuICAgICAgb3B0aW9ucy5nbG9iYWxIb21lRGlyZWN0b3J5ID8/IGpvaW4odGhpcy5ydW50aW1lLmhvbWVEaXJlY3RvcnksIFwiLmRieC10b29sc1wiKTtcbiAgICB0aGlzLmJ1bkV4ZWN1dGFibGUgPSBvcHRpb25zLmJ1bkV4ZWN1dGFibGUgPz8gcmVzb2x2ZUJ1bkV4ZWN1dGFibGUoKTtcbiAgICB0aGlzLnV2RXhlY3V0YWJsZSA9IG9wdGlvbnMudXZFeGVjdXRhYmxlID8/IFwidXZcIjtcbiAgICB0aGlzLmNvbXBpbGVyID1cbiAgICAgIG9wdGlvbnMuY29tcGlsZSA/P1xuICAgICAgKChlbnRyeXBvaW50LCBvdXRwdXQsIHdvcmtpbmdEaXJlY3RvcnksIGV4dGVybmFsKSA9PlxuICAgICAgICBjb21waWxlV2l0aEJ1bih0aGlzLmJ1bkV4ZWN1dGFibGUsIGVudHJ5cG9pbnQsIG91dHB1dCwgd29ya2luZ0RpcmVjdG9yeSwgZXh0ZXJuYWwpKTtcbiAgICB0aGlzLnJ1bnRpbWVJbnN0YWxsZXIgPSBvcHRpb25zLmluc3RhbGxSdW50aW1lID8/IGluc3RhbGxTZXJ2aWNlUnVudGltZTtcbiAgICB0aGlzLnB5dGhvbkluc3RhbGxlciA9IG9wdGlvbnMuaW5zdGFsbFB5dGhvbiA/PyBpbnN0YWxsU2VydmljZVB5dGhvblBhY2thZ2U7XG4gICAgdGhpcy5ob3N0RW50cnlwb2ludCA9IG9wdGlvbnMuaG9zdEVudHJ5cG9pbnQgPz8gcmVzb2x2ZUhvc3RFbnRyeXBvaW50KCk7XG4gICAgdGhpcy50cmF5RXhlY3V0YWJsZSA9IG9wdGlvbnMudHJheUV4ZWN1dGFibGUgPz8gcmVzb2x2ZVRyYXlFeGVjdXRhYmxlKHRoaXMucnVudGltZS5wbGF0Zm9ybSk7XG4gIH1cblxuICAvKiogSW5zdGFsbCB0aGUgbG9naW4gZW50cnkgYW5kIG9wdGlvbmFsbHkgc3RhcnQgdGhlIHNlcnZpY2UuICovXG4gIGFzeW5jIGluc3RhbGwob3B0aW9uczogQ2xpU2VydmljZUluc3RhbGxPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAob3B0aW9ucy5weXRob25Qcm9qZWN0ICYmICF0aGlzLmRlZmluaXRpb24ucHl0aG9uUGFja2FnZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuZGVmaW5pdGlvbi5uYW1lfSBkb2VzIG5vdCBkZWZpbmUgYSBQeXRob24gcGFja2FnZWApO1xuICAgIH1cbiAgICBjb25zdCBvd25lciA9IHJlc29sdmVTZXJ2aWNlUGFja2FnZSh0aGlzLmRlZmluaXRpb24ucGFja2FnZU5hbWUpO1xuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IG93bmVyLmRlcGVuZGVuY2llcygpO1xuICAgIGNvbnN0IGV4dGVybmFsID0gbmV3IFNldChleHRlcm5hbFJ1bnRpbWVQYWNrYWdlcyhkZXBlbmRlbmNpZXMpKTtcbiAgICBhd2FpdCB0aGlzLnJ1bnRpbWVJbnN0YWxsZXIoXG4gICAgICB0aGlzLmJ1bkV4ZWN1dGFibGUsXG4gICAgICB0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksXG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZGVwZW5kZW5jaWVzKS5maWx0ZXIoKFtuYW1lXSkgPT4gZXh0ZXJuYWwuaGFzKG5hbWUpKSksXG4gICAgKTtcbiAgICBjb25zdCBwYXRocyA9IHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpO1xuICAgIGNvbnN0IGluc3RhbGxlZERlZmluaXRpb24gPSBhd2FpdCB0aGlzLmluc3RhbGxEZWZpbml0aW9uKG93bmVyLCBwYXRocy5kaXJlY3RvcnksIG9wdGlvbnMpO1xuICAgIGNvbnN0IGhvc3QgPSBhd2FpdCB0aGlzLmVuc3VyZUNvbXBpbGVkQmluYXJ5KFxuICAgICAgdGhpcy5iaW5hcnlOYW1lKGluc3RhbGxlZERlZmluaXRpb24sIFwic2VydmljZVwiKSxcbiAgICAgIHRoaXMuaG9zdEVudHJ5cG9pbnQsXG4gICAgICByZXNvbHZlKGRpcm5hbWUodGhpcy5ob3N0RW50cnlwb2ludCksIFwiLi5cIiksXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVRyYXlCaW5hcnkoKTtcbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICBhd2FpdCB3cml0ZVNlcnZpY2VEZWZpbml0aW9uKHBhdGhzLmNvbmZpZ0ZpbGUsIGluc3RhbGxlZERlZmluaXRpb24pO1xuICAgIGF3YWl0IGluc3RhbGxTdGFydHVwKFxuICAgICAgaW5zdGFsbGVkRGVmaW5pdGlvbixcbiAgICAgIHBhdGhzLFxuICAgICAgdGhpcy5ydW50aW1lLFxuICAgICAgdGhpcy5sYXVuY2goaG9zdC5wYXRoLCBwYXRocy5jb25maWdGaWxlKSxcbiAgICApO1xuICAgIGlmIChvcHRpb25zLnN0YXJ0ID8/IHRydWUpIGF3YWl0IHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIC8qKiBTdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2Ugd2hlbiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiAqL1xuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXRocyA9IHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpO1xuICAgIGlmICghKGF3YWl0IHRoaXMuc3RhdHVzKCkpLmluc3RhbGxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuZGVmaW5pdGlvbi5uYW1lfSBpcyBub3QgaW5zdGFsbGVkYCk7XG4gICAgfVxuICAgIGlmICgoYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKSkgIT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaW5zdGFsbGVkRGVmaW5pdGlvbiA9IGF3YWl0IHJlYWRTZXJ2aWNlRGVmaW5pdGlvbihwYXRocy5jb25maWdGaWxlKTtcbiAgICBjb25zdCBsYXVuY2ggPSB0aGlzLmxhdW5jaChcbiAgICAgIHRoaXMuYmluYXJ5Q29udGV4dCh0aGlzLmJpbmFyeU5hbWUoaW5zdGFsbGVkRGVmaW5pdGlvbiwgXCJzZXJ2aWNlXCIpKS5wYXRoLFxuICAgICAgcGF0aHMuY29uZmlnRmlsZSxcbiAgICApO1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24obGF1bmNoLmV4ZWN1dGFibGUsIGxhdW5jaC5hcmd1bWVudHMsIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFwiaWdub3JlXCIsXG4gICAgfSk7XG4gICAgY2hpbGQudW5yZWYoKTtcblxuICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICB3YWl0Rm9yU3RhdGUoXG4gICAgICAgIGFzeW5jICgpID0+IChhd2FpdCByZXF1ZXN0U2VydmljZUNvbnRyb2wocGF0aHMuY29udHJvbEFkZHJlc3MsIFwic3RhdHVzXCIpKSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICB0cnVlLFxuICAgICAgICBERUZBVUxUX1NUQVJUX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICBgJHt0aGlzLmRlZmluaXRpb24ubmFtZX0gZGlkIG5vdCBzdGFydGAsXG4gICAgICApLFxuICAgICAgbmV3IFByb21pc2U8bmV2ZXI+KChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNoaWxkLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBjaGlsZC5vbmNlKFwiZXhpdFwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgJHt0aGlzLmRlZmluaXRpb24ubmFtZX0gaG9zdCBleGl0ZWQgYmVmb3JlIHN0YXJ0dXAgKCR7c2lnbmFsID8/IFN0cmluZyhjb2RlKX0pYCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKiBTdG9wIHRoZSBydW5uaW5nIHRyYXkgaG9zdCBhbmQgaXRzIG1hbmFnZWQgY2hpbGQgcHJvY2Vzcy4gKi9cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXRocyA9IHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0b3BcIik7XG4gICAgaWYgKCFyZXNwb25zZSkgcmV0dXJuO1xuICAgIGF3YWl0IHdhaXRGb3JTdGF0ZShcbiAgICAgIGFzeW5jICgpID0+IChhd2FpdCByZXF1ZXN0U2VydmljZUNvbnRyb2wocGF0aHMuY29udHJvbEFkZHJlc3MsIFwic3RhdHVzXCIpKSAhPT0gdW5kZWZpbmVkLFxuICAgICAgZmFsc2UsXG4gICAgICBERUZBVUxUX1NUT1BfVElNRU9VVF9NSUxMSVNFQ09ORFMsXG4gICAgICBgJHt0aGlzLmRlZmluaXRpb24ubmFtZX0gZGlkIG5vdCBzdG9wYCxcbiAgICApO1xuICB9XG5cbiAgLyoqIFN0b3AgYW5kIHN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZS4gKi9cbiAgYXN5bmMgcmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICAvKiogUmV0dXJuIHRoZSBtYW5hZ2VkIHNlcnZpY2UgcHJvY2VzcyBsb2cgcGF0aC4gKi9cbiAgbG9nUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKS5wcm9jZXNzTG9nO1xuICB9XG5cbiAgLyoqIFN0b3AgdGhlIHNlcnZpY2UgYW5kIHJlbW92ZSBpdHMgbG9naW4gZW50cnkgYW5kIHBhY2thZ2Utb3duZWQgc3RhdGUuICovXG4gIGFzeW5jIHVuaW5zdGFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXRocyA9IHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpO1xuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuICAgIGF3YWl0IHJlbW92ZVN0YXJ0dXAocGF0aHMpO1xuICAgIGF3YWl0IHJtKHBhdGhzLmRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqIFJlYWQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIGFuZCBwcm9jZXNzIHN0YXRlLiAqL1xuICBhc3luYyBzdGF0dXMoKTogUHJvbWlzZTxDbGlTZXJ2aWNlU3RhdHVzPiB7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBjb25zdCBpbnN0YWxsZWQgPSBleGlzdHNTeW5jKHBhdGhzLmNvbmZpZ0ZpbGUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVkLFxuICAgICAgcnVubmluZzogcmVzcG9uc2UgIT09IHVuZGVmaW5lZCxcbiAgICAgIC4uLihyZXNwb25zZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHBpZDogcmVzcG9uc2UucGlkLFxuICAgICAgICAgICAgLi4uKHJlc3BvbnNlLnNlcnZpY2VQaWQgPyB7IHNlcnZpY2VQaWQ6IHJlc3BvbnNlLnNlcnZpY2VQaWQgfSA6IHt9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGxhdW5jaChleGVjdXRhYmxlOiBzdHJpbmcsIGNvbmZpZ0ZpbGU6IHN0cmluZyk6IFNlcnZpY2VMYXVuY2gge1xuICAgIHJldHVybiB7XG4gICAgICBleGVjdXRhYmxlLFxuICAgICAgYXJndW1lbnRzOiBbXCItLXNlcnZpY2UtY29uZmlnXCIsIGNvbmZpZ0ZpbGVdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluc3RhbGxEZWZpbml0aW9uKFxuICAgIG93bmVyOiBTZXJ2aWNlUGFja2FnZSxcbiAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBvcHRpb25zOiBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnMsXG4gICk6IFByb21pc2U8Q2xpU2VydmljZURlZmluaXRpb24+IHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEucGFyc2Uoe1xuICAgICAgLi4udGhpcy5kZWZpbml0aW9uLFxuICAgICAgdmVyc2lvbjogdGhpcy5kZWZpbml0aW9uLnZlcnNpb24gPz8gb3duZXIudmVyc2lvbixcbiAgICB9KTtcbiAgICBpZiAoIWRlZmluaXRpb24udmVyc2lvbikgdGhyb3cgbmV3IEVycm9yKGAke2RlZmluaXRpb24ubmFtZX0gaGFzIG5vIGluc3RhbGxhYmxlIHZlcnNpb25gKTtcbiAgICBjb25zdCBweXRob25QYWNrYWdlID0gZGVmaW5pdGlvbi5weXRob25QYWNrYWdlXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5kZWZpbml0aW9uLnB5dGhvblBhY2thZ2UsXG4gICAgICAgICAgdmVyc2lvbjogZGVmaW5pdGlvbi5weXRob25QYWNrYWdlLnZlcnNpb24gPz8gZGVmaW5pdGlvbi52ZXJzaW9uLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBweXRob25FbnZpcm9ubWVudDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGlmIChweXRob25QYWNrYWdlKSB7XG4gICAgICBjb25zdCBwcmltYXJ5U3BlY2lmaWVyID0gb3B0aW9ucy5weXRob25Qcm9qZWN0XG4gICAgICAgID8gX2xvY2FsUHl0aG9uU3BlY2lmaWVyKG9wdGlvbnMucHl0aG9uUHJvamVjdCwgcHl0aG9uUGFja2FnZS5uYW1lKVxuICAgICAgICA6IGAke3B5dGhvblBhY2thZ2UubmFtZX09PSR7cHl0aG9uUGFja2FnZS52ZXJzaW9ufWA7XG4gICAgICBweXRob25FbnZpcm9ubWVudC5QWVRIT04gPSBhd2FpdCB0aGlzLnB5dGhvbkluc3RhbGxlcihcbiAgICAgICAgdGhpcy51dkV4ZWN1dGFibGUsXG4gICAgICAgIGpvaW4oZGlyZWN0b3J5LCBcInB5dGhvblwiKSxcbiAgICAgICAgW3ByaW1hcnlTcGVjaWZpZXIsIC4uLnB5dGhvblBhY2thZ2UuZGVwZW5kZW5jaWVzXSxcbiAgICAgICAgcHl0aG9uUGFja2FnZS5weXRob24sXG4gICAgICAgIHRoaXMucnVudGltZS5wbGF0Zm9ybSxcbiAgICAgICAgb3B0aW9ucy5vZmZsaW5lID8/IGZhbHNlLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29tbWFuZCA9IGRlZmluaXRpb24uY29tbWFuZFxuICAgICAgPyBhd2FpdCB0aGlzLmluc3RhbGxDb21tYW5kKFxuICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgb3duZXIsXG4gICAgICAgICAgZGVmaW5pdGlvbi5jb21tYW5kLFxuICAgICAgICAgIFwiY29tbWFuZFwiLFxuICAgICAgICAgIHB5dGhvbkVudmlyb25tZW50LFxuICAgICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZW51OiBDbGlTZXJ2aWNlTWVudUl0ZW1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBpdGVtXSBvZiAoZGVmaW5pdGlvbi5tZW51ID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICAgIG1lbnUucHVzaChcbiAgICAgICAgaXRlbS50eXBlID09PSBcImNvbW1hbmRcIlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICBjb21tYW5kOiBhd2FpdCB0aGlzLmluc3RhbGxDb21tYW5kKFxuICAgICAgICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgb3duZXIsXG4gICAgICAgICAgICAgICAgaXRlbS5jb21tYW5kLFxuICAgICAgICAgICAgICAgIGBtZW51LSR7aW5kZXggKyAxfWAsXG4gICAgICAgICAgICAgICAgcHl0aG9uRW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBpdGVtLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hLnBhcnNlKHtcbiAgICAgIC4uLmRlZmluaXRpb24sXG4gICAgICAuLi4ocHl0aG9uUGFja2FnZSA/IHsgcHl0aG9uUGFja2FnZSB9IDoge30pLFxuICAgICAgLi4uKGNvbW1hbmQgPyB7IGNvbW1hbmQgfSA6IHt9KSxcbiAgICAgIC4uLihtZW51Lmxlbmd0aCA+IDAgPyB7IG1lbnUgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5zdGFsbENvbW1hbmQoXG4gICAgZGVmaW5pdGlvbjogQ2xpU2VydmljZURlZmluaXRpb24sXG4gICAgb3duZXI6IFNlcnZpY2VQYWNrYWdlLFxuICAgIGNvbW1hbmQ6IENsaVNlcnZpY2VDb21tYW5kLFxuICAgIHB1cnBvc2U6IHN0cmluZyxcbiAgICBydW50aW1lRW52aXJvbm1lbnQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+LFxuICApOiBQcm9taXNlPENsaVNlcnZpY2VDb21tYW5kPiB7XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSB7IC4uLmNvbW1hbmQuZW52aXJvbm1lbnQsIC4uLnJ1bnRpbWVFbnZpcm9ubWVudCB9O1xuICAgIGlmIChjb21tYW5kLmV4ZWN1dGFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbW1hbmQsXG4gICAgICAgIC4uLihPYmplY3Qua2V5cyhlbnZpcm9ubWVudCkubGVuZ3RoID4gMCA/IHsgZW52aXJvbm1lbnQgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBjb21tYW5kLmVudHJ5cG9pbnQgPz8gb3duZXIuYmluKGNvbW1hbmQuYmluTmFtZSk7XG4gICAgY29uc3QgaW5zdGFsbGVkID0gYXdhaXQgdGhpcy5lbnN1cmVDb21waWxlZEJpbmFyeShcbiAgICAgIHRoaXMuYmluYXJ5TmFtZShkZWZpbml0aW9uLCBwdXJwb3NlKSxcbiAgICAgIHJlc29sdmUoZW50cnlwb2ludCksXG4gICAgICBvd25lci5kaXJlY3RvcnksXG4gICAgICBleHRlcm5hbFJ1bnRpbWVQYWNrYWdlcyhvd25lci5kZXBlbmRlbmNpZXMoKSksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhlY3V0YWJsZTogaW5zdGFsbGVkLnBhdGgsXG4gICAgICAuLi4oY29tbWFuZC5hcmd1bWVudHMgPyB7IGFyZ3VtZW50czogY29tbWFuZC5hcmd1bWVudHMgfSA6IHt9KSxcbiAgICAgIC4uLihPYmplY3Qua2V5cyhlbnZpcm9ubWVudCkubGVuZ3RoID4gMCA/IHsgZW52aXJvbm1lbnQgfSA6IHt9KSxcbiAgICAgIGN3ZDogY29tbWFuZC5jd2QgPz8gdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbXBpbGVkQmluYXJ5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbnRyeXBvaW50OiBzdHJpbmcsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGV4dGVybmFsOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuICApOiBQcm9taXNlPGJpbi5CaW5Db250ZXh0PiB7XG4gICAgcmV0dXJuIGJpbi5lbnN1cmUoXG4gICAgICBuYW1lLFxuICAgICAgYXN5bmMgKHsgdGVtcERpciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGpvaW4odGVtcERpciwgZXhlY3V0YWJsZU5hbWUobmFtZSwgdGhpcy5ydW50aW1lLnBsYXRmb3JtKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tcGlsZXIoZW50cnlwb2ludCwgb3V0cHV0LCB3b3JraW5nRGlyZWN0b3J5LCBleHRlcm5hbCk7XG4gICAgICAgIHJldHVybiBwYXRoVG9GaWxlVVJMKG91dHB1dCkuaHJlZjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLmJpbmFyeUNvbnRleHQobmFtZSksXG4gICAgICAgIHNraXBWZXJzaW9uQ2hlY2s6IHRydWUsXG4gICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVUcmF5QmluYXJ5KCk6IFByb21pc2U8YmluLkJpbkNvbnRleHQ+IHtcbiAgICBjb25zdCBuYW1lID0gdHJheUV4ZWN1dGFibGVOYW1lKHRoaXMucnVudGltZS5wbGF0Zm9ybSk7XG4gICAgY29uc3QgYmluRGlyID0gam9pbih0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksIFwiYmluXCIsIFwidHJheWJpblwiKTtcbiAgICByZXR1cm4gYmluLmVuc3VyZShuYW1lLCBwYXRoVG9GaWxlVVJMKHRoaXMudHJheUV4ZWN1dGFibGUpLmhyZWYsIHtcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIHJvb3Q6IHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSxcbiAgICAgICAgYmluRGlyLFxuICAgICAgICBwYXRoOiBqb2luKGJpbkRpciwgbmFtZSksXG4gICAgICB9LFxuICAgICAgc2tpcFZlcnNpb25DaGVjazogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmluYXJ5Q29udGV4dChuYW1lOiBzdHJpbmcpOiBiaW4uQmluQ29udGV4dCB7XG4gICAgY29uc3QgYmluRGlyID0gam9pbih0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksIFwiYmluXCIpO1xuICAgIHJldHVybiB7XG4gICAgICByb290OiB0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksXG4gICAgICBiaW5EaXIsXG4gICAgICBwYXRoOiBqb2luKGJpbkRpciwgZXhlY3V0YWJsZU5hbWUobmFtZSwgdGhpcy5ydW50aW1lLnBsYXRmb3JtKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYmluYXJ5TmFtZShkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgcHVycG9zZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lID0gc2FmZVRva2VuKGRlZmluaXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpKS5yZXBsYWNlKC9bLl9dKy9nLCBcIi1cIik7XG4gICAgcmV0dXJuIHB1cnBvc2UgPT09IFwic2VydmljZVwiID8gbmFtZSA6IGAke25hbWV9LSR7cHVycG9zZX1gO1xuICB9XG59XG5cbi8qKiBQcmVzZXJ2ZSBhIHBhY2thZ2UncyBleHRyYXMgd2hpbGUgcmVwbGFjaW5nIGl0cyByZWdpc3RyeSBuYW1lIHdpdGggYSBsb2NhbCBwcm9qZWN0IHBhdGguICovXG5mdW5jdGlvbiBfbG9jYWxQeXRob25TcGVjaWZpZXIocHJvamVjdDogc3RyaW5nLCBwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyZWN0b3J5ID0gcmVzb2x2ZShwcm9qZWN0KTtcbiAgaWYgKCFleGlzdHNTeW5jKGpvaW4oZGlyZWN0b3J5LCBcInB5cHJvamVjdC50b21sXCIpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgUHl0aG9uIHByb2plY3QgaGFzIG5vIHB5cHJvamVjdC50b21sOiAke2RpcmVjdG9yeX1gKTtcbiAgfVxuICBjb25zdCBleHRyYXMgPSAvKFxcW1teXFxdXStcXF0pJC8uZXhlYyhwYWNrYWdlTmFtZSk/LlsxXSA/PyBcIlwiO1xuICByZXR1cm4gYCR7ZGlyZWN0b3J5fSR7ZXh0cmFzfWA7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVIb3N0RW50cnlwb2ludCgpOiBzdHJpbmcge1xuICBjb25zdCBjdXJyZW50ID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICBjb25zdCBzb3VyY2UgPVxuICAgIGV4dG5hbWUoY3VycmVudCkgPT09IFwiLnRzXCJcbiAgICAgID8gam9pbihkaXJuYW1lKGN1cnJlbnQpLCBcIl9ob3N0LnRzXCIpXG4gICAgICA6IHJlc29sdmUoZGlybmFtZShjdXJyZW50KSwgXCIuLlwiLCBcIi4uXCIsIFwic3JjXCIsIFwiX2hvc3QudHNcIik7XG4gIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHJlc29sdmUgY2xpLXNlcnZpY2UgaG9zdCBzb3VyY2U6ICR7c291cmNlfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQnVuRXhlY3V0YWJsZSgpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXCJidW4vYmluL2J1bi5leGVcIik7XG59XG5cbmZ1bmN0aW9uIHRyYXlFeGVjdXRhYmxlTmFtZShwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtKTogc3RyaW5nIHtcbiAgaWYgKHBsYXRmb3JtID09PSBcImRhcndpblwiKSByZXR1cm4gXCJ0cmF5X2Rhcndpbl9yZWxlYXNlXCI7XG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSByZXR1cm4gXCJ0cmF5X2xpbnV4X3JlbGVhc2VcIjtcbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHJldHVybiBcInRyYXlfd2luZG93c19yZWxlYXNlLmV4ZVwiO1xuICB0aHJvdyBuZXcgRXJyb3IoYHN5c3RyYXkyIGRvZXMgbm90IHN1cHBvcnQgJHtwbGF0Zm9ybX1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYXlFeGVjdXRhYmxlKHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0pOiBzdHJpbmcge1xuICBjb25zdCBtYW5pZmVzdCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKFwic3lzdHJheTIvcGFja2FnZS5qc29uXCIpO1xuICByZXR1cm4gam9pbihkaXJuYW1lKG1hbmlmZXN0KSwgXCJ0cmF5YmluXCIsIHRyYXlFeGVjdXRhYmxlTmFtZShwbGF0Zm9ybSkpO1xufVxuXG5mdW5jdGlvbiBleGVjdXRhYmxlTmFtZShuYW1lOiBzdHJpbmcsIHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0pOiBzdHJpbmcge1xuICByZXR1cm4gcGxhdGZvcm0gPT09IFwid2luMzJcIiA/IGAke25hbWV9LmV4ZWAgOiBuYW1lO1xufVxuXG5mdW5jdGlvbiBzYWZlVG9rZW4odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gdmFsdWUucmVwbGFjZSgvW15hLXowLTkuXy1dKy9naSwgXCItXCIpLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIik7XG4gIGlmICghdG9rZW4pIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IHZlcnNpb246ICR7dmFsdWV9YCk7XG4gIHJldHVybiB0b2tlbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclN0YXRlKFxuICByZWFkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+LFxuICBleHBlY3RlZDogYm9vbGVhbixcbiAgdGltZW91dE1pbGxpc2Vjb25kczogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1pbGxpc2Vjb25kcztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIGlmICgoYXdhaXQgcmVhZCgpKSA9PT0gZXhwZWN0ZWQpIHJldHVybjtcbiAgICBhd2FpdCBhc3luY1V0aWxzLnNsZWVwKFBPTExfSU5URVJWQUxfTUlMTElTRUNPTkRTKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iXX0=
|
|
319
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLG1CQUFtQixHQUVwQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FB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QVMsQ0FBQyxLQUFhO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RSxJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsMkJBQTJCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsS0FBSyxVQUFVLFlBQVksQ0FDekIsSUFBNEIsRUFDNUIsUUFBaUIsRUFDakIsbUJBQTJCLEVBQzNCLE9BQWU7SUFFZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsbUJBQW1CLENBQUM7SUFDbEQsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsS0FBSyxRQUFRO1lBQUUsT0FBTztRQUN4QyxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsLCBzdGFydCwgc3RvcCwgYW5kIGluc3BlY3QgYSBzeXN0ZW0tdHJheSB1c2VyIHNlcnZpY2UuXG4gKlxuICogVGhpcyBtb2R1bGUgb3ducyBjdXJyZW50LXVzZXIgc2VydmljZSBjb21waWxhdGlvbiBhbmQgbGlmZWN5Y2xlIGFjcm9zc1xuICogY29uc3VtaW5nIENMSXMuIFJldXNlIHtAbGluayBDbGlTZXJ2aWNlfSByYXRoZXIgdGhhbiBhZGRpbmcgcHJvZHVjdC1zcGVjaWZpY1xuICogaW5zdGFsbGVycywgdXYgUHl0aG9uIGVudmlyb25tZW50cywgc3RhcnR1cCByZWdpc3RyYXRpb24sIHJ1bnRpbWVcbiAqIGRpcmVjdG9yaWVzLCBvciBjb250cm9sIHNvY2tldHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBybSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5pbXBvcnQgKiBhcyBiaW4gZnJvbSBcIkBkYngtdG9vbHMvY29yZS9iaW5cIjtcbmltcG9ydCB7IGFzeW5jVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IGNvbXBpbGVXaXRoQnVuIH0gZnJvbSBcIi4vX2NvbXBpbGUudHNcIjtcbmltcG9ydCB7IHJlYWRTZXJ2aWNlRGVmaW5pdGlvbiwgd3JpdGVTZXJ2aWNlRGVmaW5pdGlvbiB9IGZyb20gXCIuL19jb25maWcudHNcIjtcbmltcG9ydCB7IHJlcXVlc3RTZXJ2aWNlQ29udHJvbCB9IGZyb20gXCIuL19jb250cm9sLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlU2VydmljZVBhY2thZ2UsIHR5cGUgU2VydmljZVBhY2thZ2UgfSBmcm9tIFwiLi9fcGFja2FnZS50c1wiO1xuaW1wb3J0IHtcbiAgZGVmYXVsdFJ1bnRpbWVDb250ZXh0LFxuICByZXNvbHZlU2VydmljZVBhdGhzLFxuICB0eXBlIFNlcnZpY2VSdW50aW1lQ29udGV4dCxcbn0gZnJvbSBcIi4vX3BhdGhzLnRzXCI7XG5pbXBvcnQge1xuICBleHRlcm5hbFJ1bnRpbWVQYWNrYWdlcyxcbiAgaW5zdGFsbFNlcnZpY2VQeXRob25QYWNrYWdlLFxuICBpbnN0YWxsU2VydmljZVJ1bnRpbWUsXG59IGZyb20gXCIuL19ydW50aW1lLnRzXCI7XG5pbXBvcnQgeyBpbnN0YWxsU3RhcnR1cCwgcmVtb3ZlU3RhcnR1cCwgdHlwZSBTZXJ2aWNlTGF1bmNoIH0gZnJvbSBcIi4vX3N0YXJ0dXAudHNcIjtcbmltcG9ydCB7XG4gIENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hLFxuICB0eXBlIENsaVNlcnZpY2VDb21tYW5kLFxuICB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uLFxuICB0eXBlIENsaVNlcnZpY2VNZW51SXRlbSxcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbi50c1wiO1xuXG5jb25zdCBERUZBVUxUX1NUQVJUX1RJTUVPVVRfTUlMTElTRUNPTkRTID0gMTVfMDAwO1xuY29uc3QgREVGQVVMVF9TVE9QX1RJTUVPVVRfTUlMTElTRUNPTkRTID0gMTBfMDAwO1xuY29uc3QgUE9MTF9JTlRFUlZBTF9NSUxMSVNFQ09ORFMgPSAxMDA7XG5cbi8qKiBDb21waWxlIG9uZSBUeXBlU2NyaXB0IG9yIEphdmFTY3JpcHQgZW50cnlwb2ludCBpbnRvIGEgc3RhbmRhbG9uZSBleGVjdXRhYmxlLiAqL1xuZXhwb3J0IHR5cGUgQ2xpU2VydmljZUNvbXBpbGVyID0gKFxuICBlbnRyeXBvaW50OiBzdHJpbmcsXG4gIG91dHB1dDogc3RyaW5nLFxuICB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcsXG4gIGV4dGVybmFsPzogcmVhZG9ubHkgc3RyaW5nW10sXG4pID0+IFByb21pc2U8dm9pZD47XG5cbi8qKiBJbnN0YWxsIGV4YWN0IGV4dGVybmFsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGludG8gdGhlIGRieC10b29scyBob21lLiAqL1xuZXhwb3J0IHR5cGUgQ2xpU2VydmljZVJ1bnRpbWVJbnN0YWxsZXIgPSAoXG4gIGJ1bkV4ZWN1dGFibGU6IHN0cmluZyxcbiAgZGlyZWN0b3J5OiBzdHJpbmcsXG4gIGRlcGVuZGVuY2llczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4sXG4pID0+IFByb21pc2U8dm9pZD47XG5cbi8qKiBJbnN0YWxsIGEgUHl0aG9uIHBhY2thZ2UgaW50byBhIHNlcnZpY2Utb3duZWQgdXYgZW52aXJvbm1lbnQuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyID0gKFxuICB1dkV4ZWN1dGFibGU6IHN0cmluZyxcbiAgZGlyZWN0b3J5OiBzdHJpbmcsXG4gIHBhY2thZ2VTcGVjaWZpZXJzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgcHl0aG9uOiBzdHJpbmcsXG4gIHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0sXG4gIG9mZmxpbmU6IGJvb2xlYW4sXG4pID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqIEhvc3QgcnVudGltZSBvdmVycmlkZXMgZm9yIHRlc3RzLCBlbWJlZGRlZCBkaXN0cmlidXRpb25zLCBhbmQgbm9uc3RhbmRhcmQgaG9tZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VSdW50aW1lT3B0aW9ucyB7XG4gIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXJ0dXAgcmVnaXN0cmF0aW9uLiAqL1xuICByZWFkb25seSBwbGF0Zm9ybT86IE5vZGVKUy5QbGF0Zm9ybTtcbiAgLyoqIEVudmlyb25tZW50IHVzZWQgdG8gbG9jYXRlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMuICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogUmVhZG9ubHk8Tm9kZUpTLlByb2Nlc3NFbnY+O1xuICAvKiogSG9tZSBkaXJlY3RvcnkgdXNlZCB3aGVuIHBsYXRmb3JtIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgYWJzZW50LiAqL1xuICByZWFkb25seSBob21lRGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKiogVGVtcG9yYXJ5IGRpcmVjdG9yeSB1c2VkIGZvciB0aGUgbG9jYWwgY29udHJvbCBzb2NrZXQuICovXG4gIHJlYWRvbmx5IHRlbXBvcmFyeURpcmVjdG9yeT86IHN0cmluZztcbiAgLyoqIFNoYXJlZCBkYngtdG9vbHMgaG9tZSBjb250YWluaW5nIGluc3RhbGxlZCBzZXJ2aWNlIGJpbmFyaWVzLiAqL1xuICByZWFkb25seSBnbG9iYWxIb21lRGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKiogUGFja2FnZS1wcm92aWRlZCBCdW4gZXhlY3V0YWJsZSBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgYnVuRXhlY3V0YWJsZT86IHN0cmluZztcbiAgLyoqIHV2IGV4ZWN1dGFibGUgdXNlZCBmb3IgbWFuYWdlZCBQeXRob24gcGFja2FnZSBlbnZpcm9ubWVudHMuICovXG4gIHJlYWRvbmx5IHV2RXhlY3V0YWJsZT86IHN0cmluZztcbiAgLyoqIFN0YW5kYWxvbmUgY29tcGlsZXIgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGNvbXBpbGU/OiBDbGlTZXJ2aWNlQ29tcGlsZXI7XG4gIC8qKiBFeHRlcm5hbCBydW50aW1lIGRlcGVuZGVuY3kgaW5zdGFsbGVyIG92ZXJyaWRlLiAqL1xuICByZWFkb25seSBpbnN0YWxsUnVudGltZT86IENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyO1xuICAvKiogUHl0aG9uIHBhY2thZ2UgaW5zdGFsbGVyIG92ZXJyaWRlLiAqL1xuICByZWFkb25seSBpbnN0YWxsUHl0aG9uPzogQ2xpU2VydmljZVB5dGhvbkluc3RhbGxlcjtcbiAgLyoqIFN5c3RlbS10cmF5IGhvc3Qgc291cmNlIGVudHJ5cG9pbnQgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGhvc3RFbnRyeXBvaW50Pzogc3RyaW5nO1xuICAvKiogc3lzdHJheTIgbmF0aXZlIGV4ZWN1dGFibGUgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IHRyYXlFeGVjdXRhYmxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzdGFydDogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKS5kZXNjcmliZShcIlN0YXJ0IHRoZSBzZXJ2aWNlIGFmdGVyIGluc3RhbGxhdGlvbi5cIiksXG4gICAgcHl0aG9uUHJvamVjdDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAubWluKDEpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiTG9jYWwgUHl0aG9uIHByb2plY3QgaW5zdGFsbGVkIGluc3RlYWQgb2YgdGhlIHJlZ2lzdHJ5IHBhY2thZ2UuXCIpLFxuICAgIG9mZmxpbmU6IHpcbiAgICAgIC5ib29sZWFuKClcbiAgICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgICAgLmRlc2NyaWJlKFwiSW5zdGFsbCBQeXRob24gcGFja2FnZXMgZnJvbSB0aGUgdXYgY2FjaGUgd2l0aG91dCBuZXR3b3JrIGFjY2Vzcy5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJPcHRpb25zIGZvciBpbnN0YWxsaW5nIGEgY3VycmVudC11c2VyIENMSSBzZXJ2aWNlLlwiKTtcblxuLyoqIE9wdGlvbnMgY29udHJvbGxpbmcgc2VydmljZSBpbnN0YWxsYXRpb24uICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnMgPSB6LmlucHV0PHR5cGVvZiBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnNTY2hlbWE+O1xuXG4vKiogQ3VycmVudCBpbnN0YWxsYXRpb24gYW5kIHByb2Nlc3Mgc3RhdGUgZm9yIGEgc3lzdGVtLXRyYXkgc2VydmljZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpU2VydmljZVN0YXR1cyB7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJpYWxpemVkIHNlcnZpY2UgZGVmaW5pdGlvbiBleGlzdHMuICovXG4gIHJlYWRvbmx5IGluc3RhbGxlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHRyYXkgaG9zdCBhbnN3ZXJlZCBpdHMgbG9jYWwgY29udHJvbCBzb2NrZXQuICovXG4gIHJlYWRvbmx5IHJ1bm5pbmc6IGJvb2xlYW47XG4gIC8qKiBUcmF5IGhvc3QgcHJvY2VzcyBJRCB3aGVuIHJ1bm5pbmcuICovXG4gIHJlYWRvbmx5IHBpZD86IG51bWJlcjtcbiAgLyoqIE1hbmFnZWQgY2hpbGQgcHJvY2VzcyBJRCB3aGVuIHRoZSBkZWZpbml0aW9uIGluY2x1ZGVzIGEgY29tbWFuZC4gKi9cbiAgcmVhZG9ubHkgc2VydmljZVBpZD86IG51bWJlcjtcbn1cblxuLyoqIExpZmVjeWNsZSBjb250cmFjdCBjb25zdW1lZCBieSBDTEkgY29tbWFuZCBidWlsZGVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpU2VydmljZUxpZmVjeWNsZSB7XG4gIC8qKiBJbnN0YWxsIHRoZSBsb2dpbiBlbnRyeSBhbmQgb3B0aW9uYWxseSBzdGFydCB0aGUgc2VydmljZS4gKi9cbiAgaW5zdGFsbChvcHRpb25zPzogQ2xpU2VydmljZUluc3RhbGxPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZSB3aGVuIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuICovXG4gIHN0YXJ0KCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBTdG9wIHRoZSBydW5uaW5nIHRyYXkgaG9zdCBhbmQgaXRzIG1hbmFnZWQgY2hpbGQgcHJvY2Vzcy4gKi9cbiAgc3RvcCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU3RvcCBhbmQgc3RhcnQgdGhlIGluc3RhbGxlZCBzZXJ2aWNlLiAqL1xuICByZXN0YXJ0KCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZXR1cm4gdGhlIG1hbmFnZWQgc2VydmljZSBwcm9jZXNzIGxvZyBwYXRoLiAqL1xuICBsb2dQYXRoKCk6IHN0cmluZztcbiAgLyoqIFN0b3AgdGhlIHNlcnZpY2UgYW5kIHJlbW92ZSBpdHMgbG9naW4gZW50cnkgYW5kIHBhY2thZ2Utb3duZWQgc3RhdGUuICovXG4gIHVuaW5zdGFsbCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogUmVhZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gYW5kIHByb2Nlc3Mgc3RhdGUuICovXG4gIHN0YXR1cygpOiBQcm9taXNlPENsaVNlcnZpY2VTdGF0dXM+O1xufVxuXG4vKiogQ3Jvc3MtcGxhdGZvcm0gbGlmZWN5Y2xlIG1hbmFnZXIgZm9yIG9uZSBzeXN0ZW0tdHJheSB1c2VyIHNlcnZpY2UuICovXG5leHBvcnQgY2xhc3MgQ2xpU2VydmljZSBpbXBsZW1lbnRzIENsaVNlcnZpY2VMaWZlY3ljbGUge1xuICByZWFkb25seSBkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWU6IFNlcnZpY2VSdW50aW1lQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxIb21lRGlyZWN0b3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVuRXhlY3V0YWJsZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHV2RXhlY3V0YWJsZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyOiBDbGlTZXJ2aWNlQ29tcGlsZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZUluc3RhbGxlcjogQ2xpU2VydmljZVJ1bnRpbWVJbnN0YWxsZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHl0aG9uSW5zdGFsbGVyOiBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGhvc3RFbnRyeXBvaW50OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJheUV4ZWN1dGFibGU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbGlmZWN5Y2xlIG1hbmFnZXIgZnJvbSBhIHNlcmlhbGl6YWJsZSBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGVmaW5pdGlvbiBQcm9kdWN0LW93bmVkIHNlcnZpY2UgbWV0YWRhdGEsIHByb2Nlc3MsIGFuZCBtZW51LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBIb3N0IHJ1bnRpbWUgb3ZlcnJpZGVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGVmaW5pdGlvbjogQ2xpU2VydmljZURlZmluaXRpb24sIG9wdGlvbnM6IENsaVNlcnZpY2VSdW50aW1lT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5kZWZpbml0aW9uID0gQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEucGFyc2UoZGVmaW5pdGlvbik7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBkZWZhdWx0UnVudGltZUNvbnRleHQoKTtcbiAgICB0aGlzLnJ1bnRpbWUgPSB7XG4gICAgICBwbGF0Zm9ybTogb3B0aW9ucy5wbGF0Zm9ybSA/PyBkZWZhdWx0cy5wbGF0Zm9ybSxcbiAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50ID8/IGRlZmF1bHRzLmVudmlyb25tZW50LFxuICAgICAgaG9tZURpcmVjdG9yeTogb3B0aW9ucy5ob21lRGlyZWN0b3J5ID8/IGRlZmF1bHRzLmhvbWVEaXJlY3RvcnksXG4gICAgICB0ZW1wb3JhcnlEaXJlY3Rvcnk6IG9wdGlvbnMudGVtcG9yYXJ5RGlyZWN0b3J5ID8/IGRlZmF1bHRzLnRlbXBvcmFyeURpcmVjdG9yeSxcbiAgICB9O1xuICAgIHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSA9XG4gICAgICBvcHRpb25zLmdsb2JhbEhvbWVEaXJlY3RvcnkgPz8gam9pbih0aGlzLnJ1bnRpbWUuaG9tZURpcmVjdG9yeSwgXCIuZGJ4LXRvb2xzXCIpO1xuICAgIHRoaXMuYnVuRXhlY3V0YWJsZSA9IG9wdGlvbnMuYnVuRXhlY3V0YWJsZSA/PyByZXNvbHZlQnVuRXhlY3V0YWJsZSgpO1xuICAgIHRoaXMudXZFeGVjdXRhYmxlID0gb3B0aW9ucy51dkV4ZWN1dGFibGUgPz8gXCJ1dlwiO1xuICAgIHRoaXMuY29tcGlsZXIgPVxuICAgICAgb3B0aW9ucy5jb21waWxlID8/XG4gICAgICAoKGVudHJ5cG9pbnQsIG91dHB1dCwgd29ya2luZ0RpcmVjdG9yeSwgZXh0ZXJuYWwpID0+XG4gICAgICAgIGNvbXBpbGVXaXRoQnVuKHRoaXMuYnVuRXhlY3V0YWJsZSwgZW50cnlwb2ludCwgb3V0cHV0LCB3b3JraW5nRGlyZWN0b3J5LCBleHRlcm5hbCkpO1xuICAgIHRoaXMucnVudGltZUluc3RhbGxlciA9IG9wdGlvbnMuaW5zdGFsbFJ1bnRpbWUgPz8gaW5zdGFsbFNlcnZpY2VSdW50aW1lO1xuICAgIHRoaXMucHl0aG9uSW5zdGFsbGVyID0gb3B0aW9ucy5pbnN0YWxsUHl0aG9uID8/IGluc3RhbGxTZXJ2aWNlUHl0aG9uUGFja2FnZTtcbiAgICB0aGlzLmhvc3RFbnRyeXBvaW50ID0gb3B0aW9ucy5ob3N0RW50cnlwb2ludCA/PyByZXNvbHZlSG9zdEVudHJ5cG9pbnQoKTtcbiAgICB0aGlzLnRyYXlFeGVjdXRhYmxlID0gb3B0aW9ucy50cmF5RXhlY3V0YWJsZSA/PyByZXNvbHZlVHJheUV4ZWN1dGFibGUodGhpcy5ydW50aW1lLnBsYXRmb3JtKTtcbiAgfVxuXG4gIC8qKiBJbnN0YWxsIHRoZSBsb2dpbiBlbnRyeSBhbmQgb3B0aW9uYWxseSBzdGFydCB0aGUgc2VydmljZS4gKi9cbiAgYXN5bmMgaW5zdGFsbChvcHRpb25zOiBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChvcHRpb25zLnB5dGhvblByb2plY3QgJiYgIXRoaXMuZGVmaW5pdGlvbi5weXRob25QYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGRvZXMgbm90IGRlZmluZSBhIFB5dGhvbiBwYWNrYWdlYCk7XG4gICAgfVxuICAgIGNvbnN0IG93bmVyID0gcmVzb2x2ZVNlcnZpY2VQYWNrYWdlKHRoaXMuZGVmaW5pdGlvbi5wYWNrYWdlTmFtZSk7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gb3duZXIuZGVwZW5kZW5jaWVzKCk7XG4gICAgY29uc3QgZXh0ZXJuYWwgPSBuZXcgU2V0KGV4dGVybmFsUnVudGltZVBhY2thZ2VzKGRlcGVuZGVuY2llcykpO1xuICAgIGF3YWl0IHRoaXMucnVudGltZUluc3RhbGxlcihcbiAgICAgIHRoaXMuYnVuRXhlY3V0YWJsZSxcbiAgICAgIHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSxcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpLmZpbHRlcigoW25hbWVdKSA9PiBleHRlcm5hbC5oYXMobmFtZSkpKSxcbiAgICApO1xuICAgIGNvbnN0IHBhdGhzID0gcmVzb2x2ZVNlcnZpY2VQYXRocyh0aGlzLmRlZmluaXRpb24sIHRoaXMucnVudGltZSk7XG4gICAgY29uc3QgaW5zdGFsbGVkRGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuaW5zdGFsbERlZmluaXRpb24ob3duZXIsIHBhdGhzLmRpcmVjdG9yeSwgb3B0aW9ucyk7XG4gICAgY29uc3QgaG9zdCA9IGF3YWl0IHRoaXMuZW5zdXJlQ29tcGlsZWRCaW5hcnkoXG4gICAgICB0aGlzLmJpbmFyeU5hbWUoaW5zdGFsbGVkRGVmaW5pdGlvbiwgXCJzZXJ2aWNlXCIpLFxuICAgICAgdGhpcy5ob3N0RW50cnlwb2ludCxcbiAgICAgIHJlc29sdmUoZGlybmFtZSh0aGlzLmhvc3RFbnRyeXBvaW50KSwgXCIuLlwiKSxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlVHJheUJpbmFyeSgpO1xuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuICAgIGF3YWl0IHdyaXRlU2VydmljZURlZmluaXRpb24ocGF0aHMuY29uZmlnRmlsZSwgaW5zdGFsbGVkRGVmaW5pdGlvbik7XG4gICAgYXdhaXQgaW5zdGFsbFN0YXJ0dXAoXG4gICAgICBpbnN0YWxsZWREZWZpbml0aW9uLFxuICAgICAgcGF0aHMsXG4gICAgICB0aGlzLnJ1bnRpbWUsXG4gICAgICB0aGlzLmxhdW5jaChob3N0LnBhdGgsIHBhdGhzLmNvbmZpZ0ZpbGUpLFxuICAgICk7XG4gICAgaWYgKG9wdGlvbnMuc3RhcnQgPz8gdHJ1ZSkgYXdhaXQgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgLyoqIFN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZSB3aGVuIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhdGhzID0gcmVzb2x2ZVNlcnZpY2VQYXRocyh0aGlzLmRlZmluaXRpb24sIHRoaXMucnVudGltZSk7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5zdGF0dXMoKSkuaW5zdGFsbGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGlzIG5vdCBpbnN0YWxsZWRgKTtcbiAgICB9XG4gICAgaWYgKChhd2FpdCByZXF1ZXN0U2VydmljZUNvbnRyb2wocGF0aHMuY29udHJvbEFkZHJlc3MsIFwic3RhdHVzXCIpKSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICBjb25zdCBpbnN0YWxsZWREZWZpbml0aW9uID0gYXdhaXQgcmVhZFNlcnZpY2VEZWZpbml0aW9uKHBhdGhzLmNvbmZpZ0ZpbGUpO1xuICAgIGNvbnN0IGxhdW5jaCA9IHRoaXMubGF1bmNoKFxuICAgICAgdGhpcy5iaW5hcnlDb250ZXh0KHRoaXMuYmluYXJ5TmFtZShpbnN0YWxsZWREZWZpbml0aW9uLCBcInNlcnZpY2VcIikpLnBhdGgsXG4gICAgICBwYXRocy5jb25maWdGaWxlLFxuICAgICk7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihsYXVuY2guZXhlY3V0YWJsZSwgbGF1bmNoLmFyZ3VtZW50cywge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogXCJpZ25vcmVcIixcbiAgICB9KTtcbiAgICBjaGlsZC51bnJlZigpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIHdhaXRGb3JTdGF0ZShcbiAgICAgICAgYXN5bmMgKCkgPT4gKGF3YWl0IHJlcXVlc3RTZXJ2aWNlQ29udHJvbChwYXRocy5jb250cm9sQWRkcmVzcywgXCJzdGF0dXNcIikpICE9PSB1bmRlZmluZWQsXG4gICAgICAgIHRydWUsXG4gICAgICAgIERFRkFVTFRfU1RBUlRfVElNRU9VVF9NSUxMSVNFQ09ORFMsXG4gICAgICAgIGAke3RoaXMuZGVmaW5pdGlvbi5uYW1lfSBkaWQgbm90IHN0YXJ0YCxcbiAgICAgICksXG4gICAgICBuZXcgUHJvbWlzZTxuZXZlcj4oKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY2hpbGQub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGAke3RoaXMuZGVmaW5pdGlvbi5uYW1lfSBob3N0IGV4aXRlZCBiZWZvcmUgc3RhcnR1cCAoJHtzaWduYWwgPz8gU3RyaW5nKGNvZGUpfSlgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgIF0pO1xuICB9XG5cbiAgLyoqIFN0b3AgdGhlIHJ1bm5pbmcgdHJheSBob3N0IGFuZCBpdHMgbWFuYWdlZCBjaGlsZCBwcm9jZXNzLiAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhdGhzID0gcmVzb2x2ZVNlcnZpY2VQYXRocyh0aGlzLmRlZmluaXRpb24sIHRoaXMucnVudGltZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0U2VydmljZUNvbnRyb2wocGF0aHMuY29udHJvbEFkZHJlc3MsIFwic3RvcFwiKTtcbiAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm47XG4gICAgYXdhaXQgd2FpdEZvclN0YXRlKFxuICAgICAgYXN5bmMgKCkgPT4gKGF3YWl0IHJlcXVlc3RTZXJ2aWNlQ29udHJvbChwYXRocy5jb250cm9sQWRkcmVzcywgXCJzdGF0dXNcIikpICE9PSB1bmRlZmluZWQsXG4gICAgICBmYWxzZSxcbiAgICAgIERFRkFVTFRfU1RPUF9USU1FT1VUX01JTExJU0VDT05EUyxcbiAgICAgIGAke3RoaXMuZGVmaW5pdGlvbi5uYW1lfSBkaWQgbm90IHN0b3BgLFxuICAgICk7XG4gIH1cblxuICAvKiogU3RvcCBhbmQgc3RhcnQgdGhlIGluc3RhbGxlZCBzZXJ2aWNlLiAqL1xuICBhc3luYyByZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIG1hbmFnZWQgc2VydmljZSBwcm9jZXNzIGxvZyBwYXRoLiAqL1xuICBsb2dQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpLnByb2Nlc3NMb2c7XG4gIH1cblxuICAvKiogU3RvcCB0aGUgc2VydmljZSBhbmQgcmVtb3ZlIGl0cyBsb2dpbiBlbnRyeSBhbmQgcGFja2FnZS1vd25lZCBzdGF0ZS4gKi9cbiAgYXN5bmMgdW5pbnN0YWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhdGhzID0gcmVzb2x2ZVNlcnZpY2VQYXRocyh0aGlzLmRlZmluaXRpb24sIHRoaXMucnVudGltZSk7XG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgYXdhaXQgcmVtb3ZlU3RhcnR1cChwYXRocyk7XG4gICAgYXdhaXQgcm0ocGF0aHMuZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH1cblxuICAvKiogUmVhZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gYW5kIHByb2Nlc3Mgc3RhdGUuICovXG4gIGFzeW5jIHN0YXR1cygpOiBQcm9taXNlPENsaVNlcnZpY2VTdGF0dXM+IHtcbiAgICBjb25zdCBwYXRocyA9IHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpO1xuICAgIGNvbnN0IGluc3RhbGxlZCA9IGV4aXN0c1N5bmMocGF0aHMuY29uZmlnRmlsZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0U2VydmljZUNvbnRyb2wocGF0aHMuY29udHJvbEFkZHJlc3MsIFwic3RhdHVzXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnN0YWxsZWQsXG4gICAgICBydW5uaW5nOiByZXNwb25zZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgLi4uKHJlc3BvbnNlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgcGlkOiByZXNwb25zZS5waWQsXG4gICAgICAgICAgICAuLi4ocmVzcG9uc2Uuc2VydmljZVBpZCA/IHsgc2VydmljZVBpZDogcmVzcG9uc2Uuc2VydmljZVBpZCB9IDoge30pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbGF1bmNoKGV4ZWN1dGFibGU6IHN0cmluZywgY29uZmlnRmlsZTogc3RyaW5nKTogU2VydmljZUxhdW5jaCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4ZWN1dGFibGUsXG4gICAgICBhcmd1bWVudHM6IFtcIi0tc2VydmljZS1jb25maWdcIiwgY29uZmlnRmlsZV0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5zdGFsbERlZmluaXRpb24oXG4gICAgb3duZXI6IFNlcnZpY2VQYWNrYWdlLFxuICAgIGRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxDbGlTZXJ2aWNlRGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYS5wYXJzZSh7XG4gICAgICAuLi50aGlzLmRlZmluaXRpb24sXG4gICAgICB2ZXJzaW9uOiB0aGlzLmRlZmluaXRpb24udmVyc2lvbiA/PyBvd25lci52ZXJzaW9uLFxuICAgIH0pO1xuICAgIGlmICghZGVmaW5pdGlvbi52ZXJzaW9uKSB0aHJvdyBuZXcgRXJyb3IoYCR7ZGVmaW5pdGlvbi5uYW1lfSBoYXMgbm8gaW5zdGFsbGFibGUgdmVyc2lvbmApO1xuICAgIGNvbnN0IHB5dGhvblBhY2thZ2UgPSBkZWZpbml0aW9uLnB5dGhvblBhY2thZ2VcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmRlZmluaXRpb24ucHl0aG9uUGFja2FnZSxcbiAgICAgICAgICB2ZXJzaW9uOiBkZWZpbml0aW9uLnB5dGhvblBhY2thZ2UudmVyc2lvbiA/PyBkZWZpbml0aW9uLnZlcnNpb24sXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHB5dGhvbkVudmlyb25tZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgaWYgKHB5dGhvblBhY2thZ2UpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlTcGVjaWZpZXIgPSBvcHRpb25zLnB5dGhvblByb2plY3RcbiAgICAgICAgPyBfbG9jYWxQeXRob25TcGVjaWZpZXIob3B0aW9ucy5weXRob25Qcm9qZWN0LCBweXRob25QYWNrYWdlLm5hbWUpXG4gICAgICAgIDogYCR7cHl0aG9uUGFja2FnZS5uYW1lfT09JHtweXRob25QYWNrYWdlLnZlcnNpb259YDtcbiAgICAgIHB5dGhvbkVudmlyb25tZW50LlBZVEhPTiA9IGF3YWl0IHRoaXMucHl0aG9uSW5zdGFsbGVyKFxuICAgICAgICB0aGlzLnV2RXhlY3V0YWJsZSxcbiAgICAgICAgam9pbihkaXJlY3RvcnksIFwicHl0aG9uXCIpLFxuICAgICAgICBbcHJpbWFyeVNwZWNpZmllciwgLi4ucHl0aG9uUGFja2FnZS5kZXBlbmRlbmNpZXNdLFxuICAgICAgICBweXRob25QYWNrYWdlLnB5dGhvbixcbiAgICAgICAgdGhpcy5ydW50aW1lLnBsYXRmb3JtLFxuICAgICAgICBvcHRpb25zLm9mZmxpbmUgPz8gZmFsc2UsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjb21tYW5kID0gZGVmaW5pdGlvbi5jb21tYW5kXG4gICAgICA/IGF3YWl0IHRoaXMuaW5zdGFsbENvbW1hbmQoXG4gICAgICAgICAgZGVmaW5pdGlvbixcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBkZWZpbml0aW9uLmNvbW1hbmQsXG4gICAgICAgICAgXCJjb21tYW5kXCIsXG4gICAgICAgICAgcHl0aG9uRW52aXJvbm1lbnQsXG4gICAgICAgIClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lbnU6IENsaVNlcnZpY2VNZW51SXRlbVtdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGl0ZW1dIG9mIChkZWZpbml0aW9uLm1lbnUgPz8gW10pLmVudHJpZXMoKSkge1xuICAgICAgbWVudS5wdXNoKFxuICAgICAgICBpdGVtLnR5cGUgPT09IFwiY29tbWFuZFwiXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgIGNvbW1hbmQ6IGF3YWl0IHRoaXMuaW5zdGFsbENvbW1hbmQoXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICBvd25lcixcbiAgICAgICAgICAgICAgICBpdGVtLmNvbW1hbmQsXG4gICAgICAgICAgICAgICAgYG1lbnUtJHtpbmRleCArIDF9YCxcbiAgICAgICAgICAgICAgICBweXRob25FbnZpcm9ubWVudCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGl0ZW0sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEucGFyc2Uoe1xuICAgICAgLi4uZGVmaW5pdGlvbixcbiAgICAgIC4uLihweXRob25QYWNrYWdlID8geyBweXRob25QYWNrYWdlIH0gOiB7fSksXG4gICAgICAuLi4oY29tbWFuZCA/IHsgY29tbWFuZCB9IDoge30pLFxuICAgICAgLi4uKG1lbnUubGVuZ3RoID4gMCA/IHsgbWVudSB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbnN0YWxsQ29tbWFuZChcbiAgICBkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbixcbiAgICBvd25lcjogU2VydmljZVBhY2thZ2UsXG4gICAgY29tbWFuZDogQ2xpU2VydmljZUNvbW1hbmQsXG4gICAgcHVycG9zZTogc3RyaW5nLFxuICAgIHJ1bnRpbWVFbnZpcm9ubWVudDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4sXG4gICk6IFByb21pc2U8Q2xpU2VydmljZUNvbW1hbmQ+IHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHsgLi4uY29tbWFuZC5lbnZpcm9ubWVudCwgLi4ucnVudGltZUVudmlyb25tZW50IH07XG4gICAgaWYgKGNvbW1hbmQuZXhlY3V0YWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29tbWFuZCxcbiAgICAgICAgLi4uKE9iamVjdC5rZXlzKGVudmlyb25tZW50KS5sZW5ndGggPiAwID8geyBlbnZpcm9ubWVudCB9IDoge30pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZW50cnlwb2ludCA9IGNvbW1hbmQuZW50cnlwb2ludCA/PyBvd25lci5iaW4oY29tbWFuZC5iaW5OYW1lKTtcbiAgICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCB0aGlzLmVuc3VyZUNvbXBpbGVkQmluYXJ5KFxuICAgICAgdGhpcy5iaW5hcnlOYW1lKGRlZmluaXRpb24sIHB1cnBvc2UpLFxuICAgICAgcmVzb2x2ZShlbnRyeXBvaW50KSxcbiAgICAgIG93bmVyLmRpcmVjdG9yeSxcbiAgICAgIGV4dGVybmFsUnVudGltZVBhY2thZ2VzKG93bmVyLmRlcGVuZGVuY2llcygpKSxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBleGVjdXRhYmxlOiBpbnN0YWxsZWQucGF0aCxcbiAgICAgIC4uLihjb21tYW5kLmFyZ3VtZW50cyA/IHsgYXJndW1lbnRzOiBjb21tYW5kLmFyZ3VtZW50cyB9IDoge30pLFxuICAgICAgLi4uKE9iamVjdC5rZXlzKGVudmlyb25tZW50KS5sZW5ndGggPiAwID8geyBlbnZpcm9ubWVudCB9IDoge30pLFxuICAgICAgY3dkOiBjb21tYW5kLmN3ZCA/PyB0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlQ29tcGlsZWRCaW5hcnkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgZXh0ZXJuYWw6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4gICk6IFByb21pc2U8YmluLkJpbkNvbnRleHQ+IHtcbiAgICByZXR1cm4gYmluLmVuc3VyZShcbiAgICAgIG5hbWUsXG4gICAgICBhc3luYyAoeyB0ZW1wRGlyIH0pID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gam9pbih0ZW1wRGlyLCBleGVjdXRhYmxlTmFtZShuYW1lLCB0aGlzLnJ1bnRpbWUucGxhdGZvcm0pKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlcihlbnRyeXBvaW50LCBvdXRwdXQsIHdvcmtpbmdEaXJlY3RvcnksIGV4dGVybmFsKTtcbiAgICAgICAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwob3V0cHV0KS5ocmVmO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGVzdGluYXRpb246IHRoaXMuYmluYXJ5Q29udGV4dChuYW1lKSxcbiAgICAgICAgc2tpcFZlcnNpb25DaGVjazogdHJ1ZSxcbiAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVRyYXlCaW5hcnkoKTogUHJvbWlzZTxiaW4uQmluQ29udGV4dD4ge1xuICAgIGNvbnN0IG5hbWUgPSB0cmF5RXhlY3V0YWJsZU5hbWUodGhpcy5ydW50aW1lLnBsYXRmb3JtKTtcbiAgICBjb25zdCBiaW5EaXIgPSBqb2luKHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSwgXCJiaW5cIiwgXCJ0cmF5YmluXCIpO1xuICAgIHJldHVybiBiaW4uZW5zdXJlKG5hbWUsIHBhdGhUb0ZpbGVVUkwodGhpcy50cmF5RXhlY3V0YWJsZSkuaHJlZiwge1xuICAgICAgZGVzdGluYXRpb246IHtcbiAgICAgICAgcm9vdDogdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5LFxuICAgICAgICBiaW5EaXIsXG4gICAgICAgIHBhdGg6IGpvaW4oYmluRGlyLCBuYW1lKSxcbiAgICAgIH0sXG4gICAgICBza2lwVmVyc2lvbkNoZWNrOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5hcnlDb250ZXh0KG5hbWU6IHN0cmluZyk6IGJpbi5CaW5Db250ZXh0IHtcbiAgICBjb25zdCBiaW5EaXIgPSBqb2luKHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSwgXCJiaW5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvb3Q6IHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSxcbiAgICAgIGJpbkRpcixcbiAgICAgIHBhdGg6IGpvaW4oYmluRGlyLCBleGVjdXRhYmxlTmFtZShuYW1lLCB0aGlzLnJ1bnRpbWUucGxhdGZvcm0pKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5hcnlOYW1lKGRlZmluaXRpb246IENsaVNlcnZpY2VEZWZpbml0aW9uLCBwdXJwb3NlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWUgPSBzYWZlVG9rZW4oZGVmaW5pdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkpLnJlcGxhY2UoL1suX10rL2csIFwiLVwiKTtcbiAgICByZXR1cm4gcHVycG9zZSA9PT0gXCJzZXJ2aWNlXCIgPyBuYW1lIDogYCR7bmFtZX0tJHtwdXJwb3NlfWA7XG4gIH1cbn1cblxuLyoqIFByZXNlcnZlIGEgcGFja2FnZSdzIGV4dHJhcyB3aGlsZSByZXBsYWNpbmcgaXRzIHJlZ2lzdHJ5IG5hbWUgd2l0aCBhIGxvY2FsIHByb2plY3QgcGF0aC4gKi9cbmZ1bmN0aW9uIF9sb2NhbFB5dGhvblNwZWNpZmllcihwcm9qZWN0OiBzdHJpbmcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBkaXJlY3RvcnkgPSByZXNvbHZlKHByb2plY3QpO1xuICBpZiAoIWV4aXN0c1N5bmMoam9pbihkaXJlY3RvcnksIFwicHlwcm9qZWN0LnRvbWxcIikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBQeXRob24gcHJvamVjdCBoYXMgbm8gcHlwcm9qZWN0LnRvbWw6ICR7ZGlyZWN0b3J5fWApO1xuICB9XG4gIGNvbnN0IGV4dHJhcyA9IC8oXFxbW15cXF1dK1xcXSkkLy5leGVjKHBhY2thZ2VOYW1lKT8uWzFdID8/IFwiXCI7XG4gIHJldHVybiBgJHtkaXJlY3Rvcnl9JHtleHRyYXN9YDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUhvc3RFbnRyeXBvaW50KCk6IHN0cmluZyB7XG4gIGNvbnN0IGN1cnJlbnQgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG4gIGNvbnN0IHNvdXJjZSA9XG4gICAgZXh0bmFtZShjdXJyZW50KSA9PT0gXCIudHNcIlxuICAgICAgPyBqb2luKGRpcm5hbWUoY3VycmVudCksIFwiX2hvc3QudHNcIilcbiAgICAgIDogcmVzb2x2ZShkaXJuYW1lKGN1cnJlbnQpLCBcIi4uXCIsIFwiLi5cIiwgXCJzcmNcIiwgXCJfaG9zdC50c1wiKTtcbiAgaWYgKGV4aXN0c1N5bmMoc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgcmVzb2x2ZSBjbGktc2VydmljZSBob3N0IHNvdXJjZTogJHtzb3VyY2V9YCk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVCdW5FeGVjdXRhYmxlKCk6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShcImJ1bi9iaW4vYnVuLmV4ZVwiKTtcbn1cblxuZnVuY3Rpb24gdHJheUV4ZWN1dGFibGVOYW1lKHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0pOiBzdHJpbmcge1xuICBpZiAocGxhdGZvcm0gPT09IFwiZGFyd2luXCIpIHJldHVybiBcInRyYXlfZGFyd2luX3JlbGVhc2VcIjtcbiAgaWYgKHBsYXRmb3JtID09PSBcImxpbnV4XCIpIHJldHVybiBcInRyYXlfbGludXhfcmVsZWFzZVwiO1xuICBpZiAocGxhdGZvcm0gPT09IFwid2luMzJcIikgcmV0dXJuIFwidHJheV93aW5kb3dzX3JlbGVhc2UuZXhlXCI7XG4gIHRocm93IG5ldyBFcnJvcihgc3lzdHJheTIgZG9lcyBub3Qgc3VwcG9ydCAke3BsYXRmb3JtfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVHJheUV4ZWN1dGFibGUocGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSk6IHN0cmluZyB7XG4gIGNvbnN0IG1hbmlmZXN0ID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXCJzeXN0cmF5Mi9wYWNrYWdlLmpzb25cIik7XG4gIHJldHVybiBqb2luKGRpcm5hbWUobWFuaWZlc3QpLCBcInRyYXliaW5cIiwgdHJheUV4ZWN1dGFibGVOYW1lKHBsYXRmb3JtKSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGFibGVOYW1lKG5hbWU6IHN0cmluZywgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSk6IHN0cmluZyB7XG4gIHJldHVybiBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gYCR7bmFtZX0uZXhlYCA6IG5hbWU7XG59XG5cbmZ1bmN0aW9uIHNhZmVUb2tlbih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW4gPSB2YWx1ZS5yZXBsYWNlKC9bXmEtejAtOS5fLV0rL2dpLCBcIi1cIikucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKTtcbiAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBiaW5hcnkgdmVyc2lvbjogJHt2YWx1ZX1gKTtcbiAgcmV0dXJuIHRva2VuO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhdGUoXG4gIHJlYWQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4sXG4gIGV4cGVjdGVkOiBib29sZWFuLFxuICB0aW1lb3V0TWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TWlsbGlzZWNvbmRzO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgaWYgKChhd2FpdCByZWFkKCkpID09PSBleHBlY3RlZCkgcmV0dXJuO1xuICAgIGF3YWl0IGFzeW5jVXRpbHMuc2xlZXAoUE9MTF9JTlRFUlZBTF9NSUxMSVNFQ09ORFMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"typescript": "^5.9.3"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@dbx-tools/core": "^0.9.
|
|
27
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
26
|
+
"@dbx-tools/core": "^0.9.120",
|
|
27
|
+
"@dbx-tools/shared-core": "^0.9.120",
|
|
28
28
|
"bun": "1.4.2",
|
|
29
29
|
"commander": "^15.0.0",
|
|
30
30
|
"systray2": "^2.1.4",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"./package.json": "./package.json"
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
|
-
"version": "0.9.
|
|
67
|
+
"version": "0.9.120",
|
|
68
68
|
"types": "./lib/index.d.ts",
|
|
69
69
|
"dbxToolsConfig": {
|
|
70
70
|
"tags": [
|
package/src/cli.ts
CHANGED
|
@@ -9,10 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
import * as exec from "@dbx-tools/core/exec";
|
|
11
11
|
import { Command } from "commander";
|
|
12
|
-
import { z } from "zod";
|
|
13
12
|
|
|
14
13
|
import type { CliServiceDefinition } from "./definition.ts";
|
|
15
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
CliService,
|
|
16
|
+
CliServiceInstallOptionsSchema,
|
|
17
|
+
type CliServiceLifecycle,
|
|
18
|
+
} from "./service.ts";
|
|
19
|
+
|
|
20
|
+
export { CliServiceInstallOptionsSchema, type CliServiceInstallOptions } from "./service.ts";
|
|
16
21
|
|
|
17
22
|
/** Static definition or action-time factory used by a service command group. */
|
|
18
23
|
export type CliServiceDefinitionSource = CliServiceDefinition | (() => CliServiceDefinition);
|
|
@@ -35,24 +40,6 @@ const DEFAULT_DEPENDENCIES = {
|
|
|
35
40
|
},
|
|
36
41
|
} satisfies CliServiceCliDependencies;
|
|
37
42
|
|
|
38
|
-
export const CliServiceInstallOptionsSchema = z
|
|
39
|
-
.object({
|
|
40
|
-
start: z.boolean().default(true).describe("Start the service after installation."),
|
|
41
|
-
pythonProject: z
|
|
42
|
-
.string()
|
|
43
|
-
.min(1)
|
|
44
|
-
.optional()
|
|
45
|
-
.describe("Local Python project installed instead of the registry package."),
|
|
46
|
-
offline: z
|
|
47
|
-
.boolean()
|
|
48
|
-
.default(false)
|
|
49
|
-
.describe("Install Python packages from the uv cache without network access."),
|
|
50
|
-
})
|
|
51
|
-
.strict()
|
|
52
|
-
.describe("Options for installing a current-user CLI service.");
|
|
53
|
-
|
|
54
|
-
export type CliServiceInstallOptions = z.output<typeof CliServiceInstallOptionsSchema>;
|
|
55
|
-
|
|
56
43
|
/** Build install, start, stop, restart, status, logs, and uninstall commands for a service. */
|
|
57
44
|
export function buildServiceCommand(
|
|
58
45
|
source: CliServiceDefinitionSource,
|
package/src/service.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
|
|
|
18
18
|
|
|
19
19
|
import * as bin from "@dbx-tools/core/bin";
|
|
20
20
|
import { asyncUtils } from "@dbx-tools/shared-core";
|
|
21
|
+
import { z } from "zod";
|
|
21
22
|
import { compileWithBun } from "./_compile.ts";
|
|
22
23
|
import { readServiceDefinition, writeServiceDefinition } from "./_config.ts";
|
|
23
24
|
import { requestServiceControl } from "./_control.ts";
|
|
@@ -97,15 +98,24 @@ export interface CliServiceRuntimeOptions {
|
|
|
97
98
|
readonly trayExecutable?: string;
|
|
98
99
|
}
|
|
99
100
|
|
|
101
|
+
export const CliServiceInstallOptionsSchema = z
|
|
102
|
+
.object({
|
|
103
|
+
start: z.boolean().default(true).describe("Start the service after installation."),
|
|
104
|
+
pythonProject: z
|
|
105
|
+
.string()
|
|
106
|
+
.min(1)
|
|
107
|
+
.optional()
|
|
108
|
+
.describe("Local Python project installed instead of the registry package."),
|
|
109
|
+
offline: z
|
|
110
|
+
.boolean()
|
|
111
|
+
.default(false)
|
|
112
|
+
.describe("Install Python packages from the uv cache without network access."),
|
|
113
|
+
})
|
|
114
|
+
.strict()
|
|
115
|
+
.describe("Options for installing a current-user CLI service.");
|
|
116
|
+
|
|
100
117
|
/** Options controlling service installation. */
|
|
101
|
-
export
|
|
102
|
-
/** Start the service immediately after writing its configuration and login entry. */
|
|
103
|
-
readonly start?: boolean;
|
|
104
|
-
/** Install the primary Python package from this local project instead of the registry. */
|
|
105
|
-
readonly pythonProject?: string;
|
|
106
|
-
/** Resolve and install Python packages only from the uv cache. */
|
|
107
|
-
readonly offline?: boolean;
|
|
108
|
-
}
|
|
118
|
+
export type CliServiceInstallOptions = z.input<typeof CliServiceInstallOptionsSchema>;
|
|
109
119
|
|
|
110
120
|
/** Current installation and process state for a system-tray service. */
|
|
111
121
|
export interface CliServiceStatus {
|