@pipeline-builder/pipeline-manager 3.4.77 → 3.4.78
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/dist/agent/targets.d.ts
CHANGED
|
@@ -43,6 +43,8 @@ export interface TargetSpec {
|
|
|
43
43
|
readonly cost: string;
|
|
44
44
|
/** One-line "best for". */
|
|
45
45
|
readonly bestFor: string;
|
|
46
|
+
/** What the deploy creates — shown when deploying so "Deploying" isn't opaque. */
|
|
47
|
+
readonly deploys: string;
|
|
46
48
|
/** What a teardown of this target destroys — shown before a (gated) teardown. */
|
|
47
49
|
readonly destroys: string;
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;AAEhE,2DAA2D;AAC3D,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AA0BD,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/targets.js
CHANGED
|
@@ -32,6 +32,7 @@ export const TARGETS = {
|
|
|
32
32
|
postDeploy: './deploy/bin/init-platform.sh local',
|
|
33
33
|
cost: 'Free',
|
|
34
34
|
bestFor: 'Development',
|
|
35
|
+
deploys: 'the platform as a Docker Compose stack — an nginx TLS proxy, the API services (platform, plugin, pipeline, message, reporting, compliance, quota, billing, image-registry), the frontend, and postgres + mongo + redis. First run pulls the ghcr.io images and generates a local TLS cert (a few minutes).',
|
|
35
36
|
destroys: 'stops all containers — data under deploy/local/data persists on disk (delete it manually for a clean slate)',
|
|
36
37
|
},
|
|
37
38
|
minikube: {
|
|
@@ -45,6 +46,7 @@ export const TARGETS = {
|
|
|
45
46
|
postDeploy: './deploy/bin/init-platform.sh minikube',
|
|
46
47
|
cost: 'Free',
|
|
47
48
|
bestFor: 'Local Kubernetes',
|
|
49
|
+
deploys: 'the platform onto a local Minikube cluster — the same services as Kubernetes Deployments/Services behind an ingress, plus in-cluster postgres + mongo + redis. First run pulls images, builds the cluster, and generates a TLS cert (several minutes).',
|
|
48
50
|
destroys: 'stops the minikube stack — persistent volumes (PVC data) remain until the cluster is deleted',
|
|
49
51
|
},
|
|
50
52
|
ec2: {
|
|
@@ -58,6 +60,7 @@ export const TARGETS = {
|
|
|
58
60
|
postDeploy: './deploy/bin/init-platform.sh ec2 # from inside the VPC (SSM)',
|
|
59
61
|
cost: '~$140-265/mo',
|
|
60
62
|
bestFor: 'Dev / staging',
|
|
63
|
+
deploys: 'the platform on a single EC2 instance via CloudFormation — a VPC, the instance (running the Minikube stack), an ALB, a Route 53 record + ACM cert for the domain, and (by default) SES email. The instance pulls images on first boot.',
|
|
61
64
|
destroys: 'DELETES the CloudFormation stack: the VPC, EC2 instance, and its EBS data volume (databases, registry, plugin builds). Irreversible.',
|
|
62
65
|
},
|
|
63
66
|
fargate: {
|
|
@@ -71,6 +74,7 @@ export const TARGETS = {
|
|
|
71
74
|
postDeploy: './deploy/bin/init-platform.sh fargate # from a VPC-attached host',
|
|
72
75
|
cost: '~$100-300/mo',
|
|
73
76
|
bestFor: 'Production',
|
|
77
|
+
deploys: 'the platform on serverless ECS Fargate via 6 CloudFormation stacks — a VPC, an ALB, the ECS services, EFS-backed databases + registry, Route 53 + ACM for the domain, and (by default) SES email. Secrets are generated into Secrets Manager first.',
|
|
74
78
|
destroys: 'DELETES all pb-* CloudFormation stacks: EFS data, databases, and registry. Secrets Manager entries are NOT auto-deleted. Irreversible.',
|
|
75
79
|
},
|
|
76
80
|
};
|
|
@@ -177,4 +181,4 @@ export function teardownCommand(target, opts = {}) {
|
|
|
177
181
|
}
|
|
178
182
|
}
|
|
179
183
|
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC90YXJnZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFzRHRDLCtFQUErRTtBQUUvRSxNQUFNLE1BQU0sR0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsdURBQXVELEVBQUUsQ0FBQztBQUNsSSxNQUFNLFdBQVcsR0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQzNKLE1BQU0sVUFBVSxHQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzRUFBc0UsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUssTUFBTSxNQUFNLEdBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFjLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQ3RKLE1BQU0sUUFBUSxHQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnRkFBZ0YsRUFBRSxDQUFDO0FBQ2hLLE1BQU0sYUFBYSxHQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDO0FBRXZJLDhFQUE4RTtBQUM5RSxrRkFBa0Y7QUFDbEYsb0JBQW9CO0FBQ3BCLE1BQU0sS0FBSyxHQUF5QjtJQUNsQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsd0RBQXdELEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUNySCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsMERBQTBELEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUM1SCxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUseUNBQXlDLEVBQUU7SUFDaEcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUU7SUFDaEcsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLHdEQUF3RCxFQUFFO0lBQ2pILEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsc0RBQXNELEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtDQUNuSixDQUFDO0FBRUYsK0VBQStFO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBMkM7SUFDN0QsS0FBSyxFQUFFO1FBQ0wsRUFBRSxFQUFFLE9BQU87UUFDWCxLQUFLLEVBQUUsd0JBQXdCO1FBQy9CLEdBQUcsRUFBRSxjQUFjO1FBQ25CLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFdBQVcsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUM3QixRQUFRLEVBQUUsRUFBRTtRQUNaLFFBQVEsRUFBRSxFQUFFO1FBQ1osVUFBVSxFQUFFLHFDQUFxQztRQUNqRCxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLFFBQVEsRUFBRSw2R0FBNkc7S0FDeEg7SUFDRCxRQUFRLEVBQUU7UUFDUixFQUFFLEVBQUUsVUFBVTtRQUNkLEtBQUssRUFBRSw2QkFBNkI7UUFDcEMsR0FBRyxFQUFFLGlCQUFpQjtRQUN0QixVQUFVLEVBQUUsY0FBYztRQUMxQixXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUNoQyxRQUFRLEVBQUUsRUFBRTtRQUNaLFFBQVEsRUFBRSxFQUFFO1FBQ1osVUFBVSxFQUFFLHdDQUF3QztRQUNwRCxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxrQkFBa0I7UUFDM0IsUUFBUSxFQUFFLDhGQUE4RjtLQUN6RztJQUNELEdBQUcsRUFBRTtRQUNILEVBQUUsRUFBRSxLQUFLO1FBQ1QsS0FBSyxFQUFFLGtEQUFrRDtRQUN6RCxHQUFHLEVBQUUsZ0JBQWdCO1FBQ3JCLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFdBQVcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQ3pDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNwRSxVQUFVLEVBQUUsZ0VBQWdFO1FBQzVFLElBQUksRUFBRSxjQUFjO1FBQ3BCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLFFBQVEsRUFBRSxzSUFBc0k7S0FDako7SUFDRCxPQUFPLEVBQUU7UUFDUCxFQUFFLEVBQUUsU0FBUztRQUNiLEtBQUssRUFBRSx1REFBdUQ7UUFDOUQsR0FBRyxFQUFFLG9CQUFvQjtRQUN6QixVQUFVLEVBQUUsY0FBYztRQUMxQixXQUFXLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztRQUNuQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQy9CLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3JELFVBQVUsRUFBRSxtRUFBbUU7UUFDL0UsSUFBSSxFQUFFLGNBQWM7UUFDcEIsT0FBTyxFQUFFLFlBQVk7UUFDckIsUUFBUSxFQUFFLHdJQUF3STtLQUNuSjtDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQXdCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFFdkYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFjO0lBQ3ZDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFLLFVBQWdDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRCwrRUFBK0U7QUFFL0U7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUVyRTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLDhFQUE4RTtJQUM5RSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLEVBQUU7SUFDMUcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRTtJQUNsRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtDQUNoRixDQUFDO0FBSVg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFnQixFQUFFLGNBQWlDO0lBQ2hGLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFTLG1CQUFtQixDQUFDLENBQUM7SUFDbkQsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVztRQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUFFLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQVNEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQWtCLEVBQ2xCLE1BQStCLEVBQy9CLE9BQTJCLEVBQUU7SUFFN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7SUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFlLEVBQVcsRUFBRTtRQUM1QyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFbEUsTUFBTSxLQUFLLEdBQWEsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLFlBQVksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDMUUsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQUUsU0FBUztRQUM5QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0IsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBU0QsOERBQThEO0FBQzlELE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUM7QUFDN0Msd0RBQXdEO0FBQ3hELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBRXBDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsTUFBZ0IsRUFDaEIsT0FBcUUsRUFBRTtJQUV2RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQztJQUNwRSxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxPQUFPO1lBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDcEYsS0FBSyxVQUFVO1lBQ2IsT0FBTyxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkYsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxpQkFBaUIsQ0FBQztZQUNsRCxPQUFPO2dCQUNMLE9BQU8sRUFDTCxnREFBZ0QsS0FBSyxhQUFhLE1BQU0sTUFBTTtvQkFDOUUsOERBQThELEtBQUssYUFBYSxNQUFNLEVBQUU7Z0JBQzFGLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQUM7UUFDSixDQUFDO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxzQkFBc0IsQ0FBQztZQUN4RCxPQUFPO2dCQUNMLE9BQU8sRUFDTCxnRUFBZ0UsTUFBTSxhQUFhLE1BQU0sRUFBRTtvQkFDM0YsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIERldGVybWluaXN0aWMgcmVnaXN0cnkgb2YgcGxhdGZvcm0gZGVwbG95IHRhcmdldHMg4oCUIHRoZSBzb3VyY2Ugb2YgdHJ1dGggdGhlXG4gKiBgcHJvdmlzaW9uYCBhZHZpc29yIHVzZXMgdG8gYXNzZW1ibGUgdGhlIEVYQUNUIGRlcGxveSBjb21tYW5kLiBUaGUgYWdlbnQgaXMgYVxuICogdGhpbiB3cmFwcGVyIG92ZXIgdGhlIGV4aXN0aW5nIGRlcGxveSBzY3JpcHRzOyBpdCBuZXZlciByZWltcGxlbWVudHNcbiAqIGRlcGxveW1lbnQsIG9ubHkgdmFsaWRhdGVzIGlucHV0cyBhbmQgYXNzZW1ibGVzIHRoZSBjb21tYW5kIHRvIHJ1bi5cbiAqXG4gKiBLZWVwIHRoaXMgaW4gbG9jay1zdGVwIHdpdGggdGhlIGZsYWdzIHRoZSBzY3JpcHRzIGFjY2VwdCDigJQgZXZlcnkgdGFyZ2V0J3NcbiAqIG9wZXJhdG9yIGVudHJ5cG9pbnQgaXMgYGJpbi9zZXR1cC5zaGAgKGRlcGxveS88dGFyZ2V0Pi9iaW4vc2V0dXAuc2gpLlxuICovXG5cbmV4cG9ydCB0eXBlIFRhcmdldElkID0gJ2xvY2FsJyB8ICdtaW5pa3ViZScgfCAnZWMyJyB8ICdmYXJnYXRlJztcblxuLyoqIEEgc2luZ2xlIGlucHV0IHRoZSB1bmRlcmx5aW5nIGRlcGxveSBzY3JpcHQgYWNjZXB0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRTcGVjIHtcbiAgLyoqIEZsYWcgbmFtZSBwYXNzZWQgdG8gdGhlIHNjcmlwdCAod2l0aG91dCB0aGUgbGVhZGluZyBgLS1gKS4gKi9cbiAgcmVhZG9ubHkgZmxhZzogc3RyaW5nO1xuICAvKiogS2V5IG9uIHRoZSBwcm92aXNpb24gcGFyYW1zIG9iamVjdC4gKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIC8qKiBIdW1hbiBkZXNjcmlwdGlvbiDigJQgc2hvd24gd2hlbiBhIHJlcXVpcmVkIGlucHV0IGlzIG1pc3NpbmcuICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBTZWNyZXQg4oCUIG5ldmVyIHByaW50ZWQgaW4gdGhlIGFzc2VtYmxlZCBjb21tYW5kIChtYXNrZWQgYXMgYCoqKmApLiAqL1xuICByZWFkb25seSBzZWNyZXQ/OiBib29sZWFuO1xuICAvKiogQm9vbGVhbiBmbGFnIHdpdGggbm8gdmFsdWUgKGUuZy4gYC0tZW1haWxgKS4gKi9cbiAgcmVhZG9ubHkgYm9vbGVhbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0U3BlYyB7XG4gIHJlYWRvbmx5IGlkOiBUYXJnZXRJZDtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgLyoqIERpcmVjdG9yeSB0aGUgZW50cnlwb2ludCBydW5zIGZyb20gKHJlbGF0aXZlIHRvIHJlcG8gcm9vdCkuICovXG4gIHJlYWRvbmx5IGRpcjogc3RyaW5nO1xuICAvKiogRW50cnlwb2ludCBzY3JpcHQgKHJlbGF0aXZlIHRvIGBkaXJgKS4gKi9cbiAgcmVhZG9ubHkgZW50cnlwb2ludDogc3RyaW5nO1xuICAvKiogSW5wdXRzIHRoZSBzY3JpcHQgUkVRVUlSRVMg4oCUIHRoZSBhZHZpc29yIHJlcG9ydHMgYW55IHRoYXQgYXJlIG1pc3NpbmcuICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkOiByZWFkb25seSBJbnB1dFNwZWNbXTtcbiAgLyoqIE9wdGlvbmFsIGlucHV0cywgcGFzc2VkIHRocm91Z2ggb25seSB3aGVuIHByb3ZpZGVkLiAqL1xuICByZWFkb25seSBvcHRpb25hbDogcmVhZG9ubHkgSW5wdXRTcGVjW107XG4gIC8qKlxuICAgKiBSZXBvIGZvbGRlcihzKSB0aGlzIHRhcmdldCdzIGRlcGxveSBuZWVkcywgZm9yIGEgc3BhcnNlIGAtLXJlcG9gIGJvb3RzdHJhcC5cbiAgICogQ29tYmluZWQgd2l0aCBDT01NT05fU1BBUlNFX1BBVEhTIGFuZCBhbnkgc2VsZWN0ZWQgbG9hZCBzdGVwcycgcGF0aHMuXG4gICAqL1xuICByZWFkb25seSBzcGFyc2VQYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBQb3N0LWRlcGxveSBzdGVwIHRvIHN1cmZhY2UgKHJlZ2lzdGVycyBhZG1pbiArIGxvYWRzIHBsdWdpbnMpLiAqL1xuICByZWFkb25seSBwb3N0RGVwbG95Pzogc3RyaW5nO1xuICAvKiogUm91Z2ggbW9udGhseSBjb3N0IChmcm9tIGRvY3MpLiAqL1xuICByZWFkb25seSBjb3N0OiBzdHJpbmc7XG4gIC8qKiBPbmUtbGluZSBcImJlc3QgZm9yXCIuICovXG4gIHJlYWRvbmx5IGJlc3RGb3I6IHN0cmluZztcbiAgLyoqIFdoYXQgYSB0ZWFyZG93biBvZiB0aGlzIHRhcmdldCBkZXN0cm95cyDigJQgc2hvd24gYmVmb3JlIGEgKGdhdGVkKSB0ZWFyZG93bi4gKi9cbiAgcmVhZG9ubHkgZGVzdHJveXM6IHN0cmluZztcbn1cblxuLy8gLS0tIFNoYXJlZCBpbnB1dCBzcGVjcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBET01BSU46IElucHV0U3BlYyA9IHsgZmxhZzogJ2RvbWFpbicsIGtleTogJ2RvbWFpbicsIGRlc2NyaXB0aW9uOiAnRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChBTEIgQUNNIGNlcnQgKyBTRVMgREtJTSknIH07XG5jb25zdCBIT1NURURfWk9ORTogSW5wdXRTcGVjID0geyBmbGFnOiAnaG9zdGVkLXpvbmUtaWQnLCBrZXk6ICdob3N0ZWRab25lSWQnLCBkZXNjcmlwdGlvbjogJ1B1YmxpYyBSb3V0ZSA1MyBob3N0ZWQgem9uZSBJRCBhdXRob3JpdGF0aXZlIGZvciB0aGUgZG9tYWluJyB9O1xuY29uc3QgR0hDUl9UT0tFTjogSW5wdXRTcGVjID0geyBmbGFnOiAnZ2hjci10b2tlbicsIGtleTogJ2doY3JUb2tlbicsIGRlc2NyaXB0aW9uOiAnR2l0SHViIFBBVCB3aXRoIHJlYWQ6cGFja2FnZXMgKGF2b2lkcyBnaGNyLmlvIGFub255bW91cyByYXRlIGxpbWl0cyknLCBzZWNyZXQ6IHRydWUgfTtcbmNvbnN0IFJFR0lPTjogSW5wdXRTcGVjID0geyBmbGFnOiAncmVnaW9uJywga2V5OiAncmVnaW9uJywgZGVzY3JpcHRpb246ICdBV1MgcmVnaW9uJyB9O1xuY29uc3QgREVQTE9ZX01PREU6IElucHV0U3BlYyA9IHsgZmxhZzogJ2RlcGxveS1tb2RlJywga2V5OiAnZGVwbG95TW9kZScsIGRlc2NyaXB0aW9uOiAncHVibGljIChpbnRlcm5ldC1mYWNpbmcgQUxCKSBvciBwcml2YXRlIChpbnRlcm5hbCwgZGVmYXVsdCknIH07XG5jb25zdCBLRVlfUEFJUjogSW5wdXRTcGVjID0geyBmbGFnOiAna2V5LXBhaXInLCBrZXk6ICdrZXlQYWlyJywgZGVzY3JpcHRpb246ICdFQzIga2V5IHBhaXIgaW4gdGhlIHJlZ2lvbiAoYnJlYWstZ2xhc3Mgc2VyaWFsIGNvbnNvbGU7IHJvdXRpbmUgYWNjZXNzIGlzIFNTTSknIH07XG5jb25zdCBJTlNUQU5DRV9UWVBFOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdpbnN0YW5jZS10eXBlJywga2V5OiAnaW5zdGFuY2VUeXBlJywgZGVzY3JpcHRpb246ICdFQzIgaW5zdGFuY2UgdHlwZSAoZGVmYXVsdCB0My4yeGxhcmdlKScgfTtcblxuLy8gU0VTIC8gZW1haWwgZmFtaWx5IOKAlCBzaGFyZWQgYnkgZWMyICsgZmFyZ2F0ZS4gU0VTIGlzIHByb3Zpc2lvbmVkIEJZIERFRkFVTFRcbi8vIG9uIEFXUyBkZXBsb3lzOyBgLS1uby1lbWFpbGAgaXMgdGhlIG9wdC1vdXQgKGAtLWVtYWlsYCBpcyBhIGhhcm1sZXNzIG5vLW9wIGtlcHRcbi8vIGZvciBiYWNrLWNvbXBhdCkuXG5jb25zdCBFTUFJTDogcmVhZG9ubHkgSW5wdXRTcGVjW10gPSBbXG4gIHsgZmxhZzogJ2VtYWlsJywga2V5OiAnZW1haWwnLCBkZXNjcmlwdGlvbjogJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScsIGJvb2xlYW46IHRydWUgfSxcbiAgeyBmbGFnOiAnbm8tZW1haWwnLCBrZXk6ICdub0VtYWlsJywgZGVzY3JpcHRpb246ICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0KScsIGJvb2xlYW46IHRydWUgfSxcbiAgeyBmbGFnOiAnZW1haWwtZnJvbScsIGtleTogJ2VtYWlsRnJvbScsIGRlc2NyaXB0aW9uOiAnRnJvbSBhZGRyZXNzIChkZWZhdWx0IG5vcmVwbHlAPGRvbWFpbj4pJyB9LFxuICB7IGZsYWc6ICdlbWFpbC1mcm9tLW5hbWUnLCBrZXk6ICdlbWFpbEZyb21OYW1lJywgZGVzY3JpcHRpb246ICdEaXNwbGF5IG5hbWUgb24gb3V0Ym91bmQgZW1haWwnIH0sXG4gIHsgZmxhZzogJ2FsZXJ0LWVtYWlsJywga2V5OiAnYWxlcnRFbWFpbCcsIGRlc2NyaXB0aW9uOiAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJyB9LFxuICB7IGZsYWc6ICduby1jcmVhdGUtc2VzLWlkZW50aXR5Jywga2V5OiAnbm9DcmVhdGVTZXNJZGVudGl0eScsIGRlc2NyaXB0aW9uOiAnU2tpcCBTRVMgaWRlbnRpdHkgY3JlYXRpb24gKGRvbWFpbiBhbHJlYWR5IHZlcmlmaWVkKScsIGJvb2xlYW46IHRydWUgfSxcbl07XG5cbi8vIC0tLSBUYXJnZXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFRBUkdFVFM6IFJlYWRvbmx5PFJlY29yZDxUYXJnZXRJZCwgVGFyZ2V0U3BlYz4+ID0ge1xuICBsb2NhbDoge1xuICAgIGlkOiAnbG9jYWwnLFxuICAgIGxhYmVsOiAnTG9jYWwgKERvY2tlciBDb21wb3NlKScsXG4gICAgZGlyOiAnZGVwbG95L2xvY2FsJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvbG9jYWwnXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBsb2NhbCcsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdEZXZlbG9wbWVudCcsXG4gICAgZGVzdHJveXM6ICdzdG9wcyBhbGwgY29udGFpbmVycyDigJQgZGF0YSB1bmRlciBkZXBsb3kvbG9jYWwvZGF0YSBwZXJzaXN0cyBvbiBkaXNrIChkZWxldGUgaXQgbWFudWFsbHkgZm9yIGEgY2xlYW4gc2xhdGUpJyxcbiAgfSxcbiAgbWluaWt1YmU6IHtcbiAgICBpZDogJ21pbmlrdWJlJyxcbiAgICBsYWJlbDogJ01pbmlrdWJlIChsb2NhbCBLdWJlcm5ldGVzKScsXG4gICAgZGlyOiAnZGVwbG95L21pbmlrdWJlJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvbWluaWt1YmUnXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBtaW5pa3ViZScsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdMb2NhbCBLdWJlcm5ldGVzJyxcbiAgICBkZXN0cm95czogJ3N0b3BzIHRoZSBtaW5pa3ViZSBzdGFjayDigJQgcGVyc2lzdGVudCB2b2x1bWVzIChQVkMgZGF0YSkgcmVtYWluIHVudGlsIHRoZSBjbHVzdGVyIGlzIGRlbGV0ZWQnLFxuICB9LFxuICBlYzI6IHtcbiAgICBpZDogJ2VjMicsXG4gICAgbGFiZWw6ICdBV1MgRUMyIChzaW5nbGUgTWluaWt1YmUgaW5zdGFuY2UgYmVoaW5kIGFuIEFMQiknLFxuICAgIGRpcjogJ2RlcGxveS9hd3MvZWMyJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvYXdzL2VjMiddLFxuICAgIHJlcXVpcmVkOiBbS0VZX1BBSVIsIERPTUFJTiwgSE9TVEVEX1pPTkVdLFxuICAgIG9wdGlvbmFsOiBbUkVHSU9OLCBERVBMT1lfTU9ERSwgR0hDUl9UT0tFTiwgSU5TVEFOQ0VfVFlQRSwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBlYzIgICMgZnJvbSBpbnNpZGUgdGhlIFZQQyAoU1NNKScsXG4gICAgY29zdDogJ34kMTQwLTI2NS9tbycsXG4gICAgYmVzdEZvcjogJ0RldiAvIHN0YWdpbmcnLFxuICAgIGRlc3Ryb3lzOiAnREVMRVRFUyB0aGUgQ2xvdWRGb3JtYXRpb24gc3RhY2s6IHRoZSBWUEMsIEVDMiBpbnN0YW5jZSwgYW5kIGl0cyBFQlMgZGF0YSB2b2x1bWUgKGRhdGFiYXNlcywgcmVnaXN0cnksIHBsdWdpbiBidWlsZHMpLiBJcnJldmVyc2libGUuJyxcbiAgfSxcbiAgZmFyZ2F0ZToge1xuICAgIGlkOiAnZmFyZ2F0ZScsXG4gICAgbGFiZWw6ICdBV1MgRmFyZ2F0ZSAoc2VydmVybGVzcyBFQ1MsIDYgQ2xvdWRGb3JtYXRpb24gc3RhY2tzKScsXG4gICAgZGlyOiAnZGVwbG95L2F3cy9mYXJnYXRlJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvYXdzL2ZhcmdhdGUnXSxcbiAgICByZXF1aXJlZDogW0RPTUFJTiwgSE9TVEVEX1pPTkVdLFxuICAgIG9wdGlvbmFsOiBbUkVHSU9OLCBERVBMT1lfTU9ERSwgR0hDUl9UT0tFTiwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBmYXJnYXRlICAjIGZyb20gYSBWUEMtYXR0YWNoZWQgaG9zdCcsXG4gICAgY29zdDogJ34kMTAwLTMwMC9tbycsXG4gICAgYmVzdEZvcjogJ1Byb2R1Y3Rpb24nLFxuICAgIGRlc3Ryb3lzOiAnREVMRVRFUyBhbGwgcGItKiBDbG91ZEZvcm1hdGlvbiBzdGFja3M6IEVGUyBkYXRhLCBkYXRhYmFzZXMsIGFuZCByZWdpc3RyeS4gU2VjcmV0cyBNYW5hZ2VyIGVudHJpZXMgYXJlIE5PVCBhdXRvLWRlbGV0ZWQuIElycmV2ZXJzaWJsZS4nLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFRBUkdFVF9JRFM6IHJlYWRvbmx5IFRhcmdldElkW10gPSBbJ2xvY2FsJywgJ21pbmlrdWJlJywgJ2VjMicsICdmYXJnYXRlJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldElkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVGFyZ2V0SWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAoVEFSR0VUX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyAtLS0gU3BhcnNlIGJvb3RzdHJhcCBwYXRocyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRm9sZGVycyBldmVyeSBgLS1yZXBvYCBib290c3RyYXAgbmVlZHMgcmVnYXJkbGVzcyBvZiB0YXJnZXQ6IHRoZSBvcmNoZXN0cmF0aW9uXG4gKiBzY3JpcHRzLiBFYWNoIHRhcmdldCdzIHNldHVwLnNoICsgaW5pdC1wbGF0Zm9ybS5zaCBsaXZlIGluIC8gZHJpdmUgdGhlc2UuXG4gKiBEZWxpYmVyYXRlbHkgbWluaW1hbCDigJQgaGVhdmllciBmb2xkZXJzIChwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykgYXJlIHB1bGxlZFxuICogaW4gb25seSB3aGVuIHRoZWlyIHBvc3QtaW5zdGFsbCBvcHRpb24gaXMgc2VsZWN0ZWQgKHNlZSBMT0FEX1NURVBTKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTU1PTl9TUEFSU0VfUEFUSFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydkZXBsb3kvYmluJ107XG5cbi8qKlxuICogT3B0LWluIHBvc3QtaW5zdGFsbCBsb2FkIHN0ZXBzLiBFYWNoIG1hcHMgYSBwcm92aXNpb24gYC0td2l0aC0qYCBmbGFnIHRvIHRoZVxuICogaW5pdC1wbGF0Zm9ybSBlbnYgdmFyIHRoYXQgZW5hYmxlcyBpdCBBTkQgdGhlIHJlcG8gZm9sZGVyKHMpIGl0IHJlYWRzIOKAlCBzbyB0aGVcbiAqIHNwYXJzZSBjaGVja291dCBncm93cyBleGFjdGx5IHdpdGggdGhlIHNlbGVjdGVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0FEX1NURVBTID0gW1xuICAvLyBUaGUgcGx1Z2luIGJ1aWxkIHJlYWRzIGRlcGxveS9wbHVnaW5zL19iYXNlIEFORCBkZXBsb3kvY29kZWJ1aWxkL2Jvb3RzdHJhcC5cbiAgeyBpZDogJ3BsdWdpbnMnLCBmbGFnOiAnd2l0aFBsdWdpbnMnLCBlbnY6ICdMT0FEX1BMVUdJTlMnLCBwYXRoczogWydkZXBsb3kvcGx1Z2lucycsICdkZXBsb3kvY29kZWJ1aWxkJ10gfSxcbiAgeyBpZDogJ2NvbXBsaWFuY2UnLCBmbGFnOiAnd2l0aENvbXBsaWFuY2UnLCBlbnY6ICdMT0FEX0NPTVBMSUFOQ0UnLCBwYXRoczogWydkZXBsb3kvY29tcGxpYW5jZSddIH0sXG4gIHsgaWQ6ICdzYW1wbGVzJywgZmxhZzogJ3dpdGhTYW1wbGVzJywgZW52OiAnTE9BRF9QSVBFTElORVMnLCBwYXRoczogWydkZXBsb3kvc2FtcGxlcyddIH0sXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2FkU3RlcElkID0gKHR5cGVvZiBMT0FEX1NURVBTKVtudW1iZXJdWydpZCddO1xuXG4vKipcbiAqIFRoZSBkZS1kdXBsaWNhdGVkIHNldCBvZiBzcGFyc2UgcGF0aHMgZm9yIGEgdGFyZ2V0IHBsdXMgdGhlIGVuYWJsZWQgbG9hZFxuICogc3RlcHM6IGNvbW1vbiBiYXNlIOKIqiB0YXJnZXQgZm9sZGVyKHMpIOKIqiBlYWNoIGVuYWJsZWQgc3RlcCdzIGZvbGRlcihzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZVBhdGhzRm9yKHRhcmdldDogVGFyZ2V0SWQsIGVuYWJsZWRMb2FkSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oQ09NTU9OX1NQQVJTRV9QQVRIUyk7XG4gIGZvciAoY29uc3QgcCBvZiBUQVJHRVRTW3RhcmdldF0uc3BhcnNlUGF0aHMpIHBhdGhzLmFkZChwKTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoc3RlcC5pZCkpIGZvciAoY29uc3QgcCBvZiBzdGVwLnBhdGhzKSBwYXRocy5hZGQocCk7XG4gIH1cbiAgcmV0dXJuIFsuLi5wYXRoc107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZW1ibGVSZXN1bHQge1xuICAvKiogVGhlIGV4YWN0IGNvbW1hbmQgdG8gcnVuIOKAlCBzZWNyZXRzIG1hc2tlZCBhcyBgKioqYC4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogUmVxdWlyZWQgaW5wdXRzIHRoYXQgd2VyZSBub3Qgc3VwcGxpZWQuICovXG4gIHJlYWRvbmx5IG1pc3Npbmc6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSBkZXBsb3kgY29tbWFuZCBmb3IgYSB0YXJnZXQgZnJvbSB0aGUgcHJvdmlkZWQgcGFyYW1zLiBQdXJlIGFuZFxuICogZGV0ZXJtaW5pc3RpYyDigJQgbm8gc2hlbGwsIG5vIExMTS4gTWlzc2luZyByZXF1aXJlZCBpbnB1dHMgYXJlIHJlcG9ydGVkIChuZXZlclxuICogZ3Vlc3NlZCkuIEJ5IGRlZmF1bHQgc2VjcmV0cyBhcmUgbWFza2VkIChgKioqYCkgZm9yIERJU1BMQVk7IHBhc3MgYG1hc2s6IGZhbHNlYFxuICogdG8gYnVpbGQgdGhlIHJlYWwgY29tbWFuZCBmb3IgRVhFQ1VUSU9OIOKAlCB0aGF0IHN0cmluZyBtdXN0IG5ldmVyIGJlIGxvZ2dlZCBvclxuICogc2hvd24gdG8gdGhlIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVDb21tYW5kKFxuICB0YXJnZXQ6IFRhcmdldFNwZWMsXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdHM6IHsgbWFzaz86IGJvb2xlYW4gfSA9IHt9LFxuKTogQXNzZW1ibGVSZXN1bHQge1xuICBjb25zdCBtYXNrID0gb3B0cy5tYXNrID8/IHRydWU7XG4gIGNvbnN0IHByb3ZpZGVkID0gKHNwZWM6IElucHV0U3BlYyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHYgPSBwYXJhbXNbc3BlYy5rZXldO1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gJycgJiYgdiAhPT0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgbWlzc2luZyA9IHRhcmdldC5yZXF1aXJlZC5maWx0ZXIoKHNwZWMpID0+ICFwcm92aWRlZChzcGVjKSk7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2BjZCAke3RhcmdldC5kaXJ9ICYmIGJhc2ggJHt0YXJnZXQuZW50cnlwb2ludH1gXTtcbiAgZm9yIChjb25zdCBzcGVjIG9mIFsuLi50YXJnZXQucmVxdWlyZWQsIC4uLnRhcmdldC5vcHRpb25hbF0pIHtcbiAgICBpZiAoIXByb3ZpZGVkKHNwZWMpKSBjb250aW51ZTtcbiAgICBpZiAoc3BlYy5ib29sZWFuKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAtLSR7c3BlYy5mbGFnfWApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gc3BlYy5zZWNyZXQgJiYgbWFzayA/ICcqKionIDogU3RyaW5nKHBhcmFtc1tzcGVjLmtleV0pO1xuICAgIHBhcnRzLnB1c2goYC0tJHtzcGVjLmZsYWd9ICR7dmFsdWV9YCk7XG4gIH1cblxuICByZXR1cm4geyBjb21tYW5kOiBwYXJ0cy5qb2luKCcgXFxcXFxcbiAgJyksIG1pc3NpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZWFyZG93blJlc3VsdCB7XG4gIC8qKiBUaGUgZXhhY3QgdGVhcmRvd24gY29tbWFuZCB0byBydW4uICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhpcyB0ZWFyZG93biBpcnJldmVyc2libHkgZGVzdHJveXMgZGF0YSAoQVdTIHRhcmdldHMpLiAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWUgdGhlIEVDMiBzZXR1cC5zaCBkZWZhdWx0cyB0by4gKi9cbmNvbnN0IERFRkFVTFRfRUMyX1NUQUNLID0gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuLyoqIFN0YWNrIHByZWZpeCB0aGUgRmFyZ2F0ZSB0ZWFyZG93bi5zaCBkZWZhdWx0cyB0by4gKi9cbmNvbnN0IERFRkFVTFRfRkFSR0FURV9QUkVGSVggPSAncGInO1xuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSB0ZWFyZG93biBjb21tYW5kIGZvciBhIHRhcmdldC4gUHVyZSBhbmQgZGV0ZXJtaW5pc3RpYyDigJQgbWlycm9yc1xuICogYGFzc2VtYmxlQ29tbWFuZGAgZm9yIHRoZSBkZXN0cm95IHBhdGguIGxvY2FsL21pbmlrdWJlIFNUT1AgdGhlIHN0YWNrXG4gKiAobm9uLWRlc3RydWN0aXZlIOKAlCBvbi1kaXNrIC8gUFZDIGRhdGEgc3Vydml2ZXMpOyBlYzIvZmFyZ2F0ZSBERUxFVEUgdGhlaXJcbiAqIENsb3VkRm9ybWF0aW9uIHN0YWNrcyBhbmQgYXJlIGlycmV2ZXJzaWJsZS4gRm9yIEZhcmdhdGUsIGBhc3N1bWVZZXNgIGZvcndhcmRzXG4gKiB0aGUgbmF0aXZlIHNjcmlwdCdzIG93biBgLS15ZXNgICh0aGUgYWdlbnQgcnVucyBpdHMgb3duIHR5cGVkIGNvbmZpcm1hdGlvblxuICogZmlyc3QsIHNvIHRoZSBzY3JpcHQgbXVzdCBub3QgYWxzbyBibG9jayBvbiBzdGRpbik7IEVDMiBgZGVsZXRlLXN0YWNrYCBoYXMgbm9cbiAqIG5hdGl2ZSBwcm9tcHQsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoZSBhZ2VudCBnYXRlIGlzIG1hbmRhdG9yeSB0aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlYXJkb3duQ29tbWFuZChcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgb3B0czogeyBzdGFja05hbWU/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZzsgYXNzdW1lWWVzPzogYm9vbGVhbiB9ID0ge30sXG4pOiBUZWFyZG93blJlc3VsdCB7XG4gIGNvbnN0IHJlZ2lvbiA9IG9wdHMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgJ3VzLWVhc3QtMSc7XG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSAnbG9jYWwnOlxuICAgICAgcmV0dXJuIHsgY29tbWFuZDogJ2NkIGRlcGxveS9sb2NhbCAmJiBiYXNoIGJpbi9zaHV0ZG93bi5zaCcsIGRlc3RydWN0aXZlOiBmYWxzZSB9O1xuICAgIGNhc2UgJ21pbmlrdWJlJzpcbiAgICAgIHJldHVybiB7IGNvbW1hbmQ6ICdjZCBkZXBsb3kvbWluaWt1YmUgJiYgYmFzaCBiaW4vc2h1dGRvd24uc2gnLCBkZXN0cnVjdGl2ZTogZmFsc2UgfTtcbiAgICBjYXNlICdlYzInOiB7XG4gICAgICBjb25zdCBzdGFjayA9IG9wdHMuc3RhY2tOYW1lIHx8IERFRkFVTFRfRUMyX1NUQUNLO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZDpcbiAgICAgICAgICBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlbGV0ZS1zdGFjayAtLXN0YWNrLW5hbWUgJHtzdGFja30gLS1yZWdpb24gJHtyZWdpb259ICYmIGAgK1xuICAgICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gd2FpdCBzdGFjay1kZWxldGUtY29tcGxldGUgLS1zdGFjay1uYW1lICR7c3RhY2t9IC0tcmVnaW9uICR7cmVnaW9ufWAsXG4gICAgICAgIGRlc3RydWN0aXZlOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnZmFyZ2F0ZSc6IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IG9wdHMuc3RhY2tOYW1lIHx8IERFRkFVTFRfRkFSR0FURV9QUkVGSVg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kOlxuICAgICAgICAgIGBjZCBkZXBsb3kvYXdzL2ZhcmdhdGUgJiYgYmFzaCBiaW4vdGVhcmRvd24uc2ggLS1zdGFjay1wcmVmaXggJHtwcmVmaXh9IC0tcmVnaW9uICR7cmVnaW9ufWAgK1xuICAgICAgICAgIChvcHRzLmFzc3VtZVllcyA/ICcgLS15ZXMnIDogJycpLFxuICAgICAgICBkZXN0cnVjdGl2ZTogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC90YXJnZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF3RHRDLCtFQUErRTtBQUUvRSxNQUFNLE1BQU0sR0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsdURBQXVELEVBQUUsQ0FBQztBQUNsSSxNQUFNLFdBQVcsR0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQzNKLE1BQU0sVUFBVSxHQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzRUFBc0UsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUssTUFBTSxNQUFNLEdBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFjLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQ3RKLE1BQU0sUUFBUSxHQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnRkFBZ0YsRUFBRSxDQUFDO0FBQ2hLLE1BQU0sYUFBYSxHQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDO0FBRXZJLDhFQUE4RTtBQUM5RSxrRkFBa0Y7QUFDbEYsb0JBQW9CO0FBQ3BCLE1BQU0sS0FBSyxHQUF5QjtJQUNsQyxFQUFFLElBQUks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QUFJLENBQUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDO1lBQ2xELE9BQU87Z0JBQ0wsT0FBTyxFQUNMLGdEQUFnRCxLQUFLLGFBQWEsTUFBTSxNQUFNO29CQUM5RSw4REFBOEQsS0FBSyxhQUFhLE1BQU0sRUFBRTtnQkFDMUYsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLHNCQUFzQixDQUFDO1lBQ3hELE9BQU87Z0JBQ0wsT0FBTyxFQUNMLGdFQUFnRSxNQUFNLGFBQWEsTUFBTSxFQUFFO29CQUMzRixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyByZWdpc3RyeSBvZiBwbGF0Zm9ybSBkZXBsb3kgdGFyZ2V0cyDigJQgdGhlIHNvdXJjZSBvZiB0cnV0aCB0aGVcbiAqIGBwcm92aXNpb25gIGFkdmlzb3IgdXNlcyB0byBhc3NlbWJsZSB0aGUgRVhBQ1QgZGVwbG95IGNvbW1hbmQuIFRoZSBhZ2VudCBpcyBhXG4gKiB0aGluIHdyYXBwZXIgb3ZlciB0aGUgZXhpc3RpbmcgZGVwbG95IHNjcmlwdHM7IGl0IG5ldmVyIHJlaW1wbGVtZW50c1xuICogZGVwbG95bWVudCwgb25seSB2YWxpZGF0ZXMgaW5wdXRzIGFuZCBhc3NlbWJsZXMgdGhlIGNvbW1hbmQgdG8gcnVuLlxuICpcbiAqIEtlZXAgdGhpcyBpbiBsb2NrLXN0ZXAgd2l0aCB0aGUgZmxhZ3MgdGhlIHNjcmlwdHMgYWNjZXB0IOKAlCBldmVyeSB0YXJnZXQnc1xuICogb3BlcmF0b3IgZW50cnlwb2ludCBpcyBgYmluL3NldHVwLnNoYCAoZGVwbG95Lzx0YXJnZXQ+L2Jpbi9zZXR1cC5zaCkuXG4gKi9cblxuZXhwb3J0IHR5cGUgVGFyZ2V0SWQgPSAnbG9jYWwnIHwgJ21pbmlrdWJlJyB8ICdlYzInIHwgJ2ZhcmdhdGUnO1xuXG4vKiogQSBzaW5nbGUgaW5wdXQgdGhlIHVuZGVybHlpbmcgZGVwbG95IHNjcmlwdCBhY2NlcHRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dFNwZWMge1xuICAvKiogRmxhZyBuYW1lIHBhc3NlZCB0byB0aGUgc2NyaXB0ICh3aXRob3V0IHRoZSBsZWFkaW5nIGAtLWApLiAqL1xuICByZWFkb25seSBmbGFnOiBzdHJpbmc7XG4gIC8qKiBLZXkgb24gdGhlIHByb3Zpc2lvbiBwYXJhbXMgb2JqZWN0LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uIOKAlCBzaG93biB3aGVuIGEgcmVxdWlyZWQgaW5wdXQgaXMgbWlzc2luZy4gKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFNlY3JldCDigJQgbmV2ZXIgcHJpbnRlZCBpbiB0aGUgYXNzZW1ibGVkIGNvbW1hbmQgKG1hc2tlZCBhcyBgKioqYCkuICovXG4gIHJlYWRvbmx5IHNlY3JldD86IGJvb2xlYW47XG4gIC8qKiBCb29sZWFuIGZsYWcgd2l0aCBubyB2YWx1ZSAoZS5nLiBgLS1lbWFpbGApLiAqL1xuICByZWFkb25seSBib29sZWFuPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRTcGVjIHtcbiAgcmVhZG9ubHkgaWQ6IFRhcmdldElkO1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IHRoZSBlbnRyeXBvaW50IHJ1bnMgZnJvbSAocmVsYXRpdmUgdG8gcmVwbyByb290KS4gKi9cbiAgcmVhZG9ubHkgZGlyOiBzdHJpbmc7XG4gIC8qKiBFbnRyeXBvaW50IHNjcmlwdCAocmVsYXRpdmUgdG8gYGRpcmApLiAqL1xuICByZWFkb25seSBlbnRyeXBvaW50OiBzdHJpbmc7XG4gIC8qKiBJbnB1dHMgdGhlIHNjcmlwdCBSRVFVSVJFUyDigJQgdGhlIGFkdmlzb3IgcmVwb3J0cyBhbnkgdGhhdCBhcmUgbWlzc2luZy4gKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xuICAvKiogT3B0aW9uYWwgaW5wdXRzLCBwYXNzZWQgdGhyb3VnaCBvbmx5IHdoZW4gcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsOiByZWFkb25seSBJbnB1dFNwZWNbXTtcbiAgLyoqXG4gICAqIFJlcG8gZm9sZGVyKHMpIHRoaXMgdGFyZ2V0J3MgZGVwbG95IG5lZWRzLCBmb3IgYSBzcGFyc2UgYC0tcmVwb2AgYm9vdHN0cmFwLlxuICAgKiBDb21iaW5lZCB3aXRoIENPTU1PTl9TUEFSU0VfUEFUSFMgYW5kIGFueSBzZWxlY3RlZCBsb2FkIHN0ZXBzJyBwYXRocy5cbiAgICovXG4gIHJlYWRvbmx5IHNwYXJzZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFBvc3QtZGVwbG95IHN0ZXAgdG8gc3VyZmFjZSAocmVnaXN0ZXJzIGFkbWluICsgbG9hZHMgcGx1Z2lucykuICovXG4gIHJlYWRvbmx5IHBvc3REZXBsb3k/OiBzdHJpbmc7XG4gIC8qKiBSb3VnaCBtb250aGx5IGNvc3QgKGZyb20gZG9jcykuICovXG4gIHJlYWRvbmx5IGNvc3Q6IHN0cmluZztcbiAgLyoqIE9uZS1saW5lIFwiYmVzdCBmb3JcIi4gKi9cbiAgcmVhZG9ubHkgYmVzdEZvcjogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgZGVwbG95IGNyZWF0ZXMg4oCUIHNob3duIHdoZW4gZGVwbG95aW5nIHNvIFwiRGVwbG95aW5nXCIgaXNuJ3Qgb3BhcXVlLiAqL1xuICByZWFkb25seSBkZXBsb3lzOiBzdHJpbmc7XG4gIC8qKiBXaGF0IGEgdGVhcmRvd24gb2YgdGhpcyB0YXJnZXQgZGVzdHJveXMg4oCUIHNob3duIGJlZm9yZSBhIChnYXRlZCkgdGVhcmRvd24uICovXG4gIHJlYWRvbmx5IGRlc3Ryb3lzOiBzdHJpbmc7XG59XG5cbi8vIC0tLSBTaGFyZWQgaW5wdXQgc3BlY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgRE9NQUlOOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkb21haW4nLCBrZXk6ICdkb21haW4nLCBkZXNjcmlwdGlvbjogJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoQUxCIEFDTSBjZXJ0ICsgU0VTIERLSU0pJyB9O1xuY29uc3QgSE9TVEVEX1pPTkU6IElucHV0U3BlYyA9IHsgZmxhZzogJ2hvc3RlZC16b25lLWlkJywga2V5OiAnaG9zdGVkWm9uZUlkJywgZGVzY3JpcHRpb246ICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGRvbWFpbicgfTtcbmNvbnN0IEdIQ1JfVE9LRU46IElucHV0U3BlYyA9IHsgZmxhZzogJ2doY3ItdG9rZW4nLCBrZXk6ICdnaGNyVG9rZW4nLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBQQVQgd2l0aCByZWFkOnBhY2thZ2VzIChhdm9pZHMgZ2hjci5pbyBhbm9ueW1vdXMgcmF0ZSBsaW1pdHMpJywgc2VjcmV0OiB0cnVlIH07XG5jb25zdCBSRUdJT046IElucHV0U3BlYyA9IHsgZmxhZzogJ3JlZ2lvbicsIGtleTogJ3JlZ2lvbicsIGRlc2NyaXB0aW9uOiAnQVdTIHJlZ2lvbicgfTtcbmNvbnN0IERFUExPWV9NT0RFOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkZXBsb3ktbW9kZScsIGtleTogJ2RlcGxveU1vZGUnLCBkZXNjcmlwdGlvbjogJ3B1YmxpYyAoaW50ZXJuZXQtZmFjaW5nIEFMQikgb3IgcHJpdmF0ZSAoaW50ZXJuYWwsIGRlZmF1bHQpJyB9O1xuY29uc3QgS0VZX1BBSVI6IElucHV0U3BlYyA9IHsgZmxhZzogJ2tleS1wYWlyJywga2V5OiAna2V5UGFpcicsIGRlc2NyaXB0aW9uOiAnRUMyIGtleSBwYWlyIGluIHRoZSByZWdpb24gKGJyZWFrLWdsYXNzIHNlcmlhbCBjb25zb2xlOyByb3V0aW5lIGFjY2VzcyBpcyBTU00pJyB9O1xuY29uc3QgSU5TVEFOQ0VfVFlQRTogSW5wdXRTcGVjID0geyBmbGFnOiAnaW5zdGFuY2UtdHlwZScsIGtleTogJ2luc3RhbmNlVHlwZScsIGRlc2NyaXB0aW9uOiAnRUMyIGluc3RhbmNlIHR5cGUgKGRlZmF1bHQgdDMuMnhsYXJnZSknIH07XG5cbi8vIFNFUyAvIGVtYWlsIGZhbWlseSDigJQgc2hhcmVkIGJ5IGVjMiArIGZhcmdhdGUuIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUXG4vLyBvbiBBV1MgZGVwbG95czsgYC0tbm8tZW1haWxgIGlzIHRoZSBvcHQtb3V0IChgLS1lbWFpbGAgaXMgYSBoYXJtbGVzcyBuby1vcCBrZXB0XG4vLyBmb3IgYmFjay1jb21wYXQpLlxuY29uc3QgRU1BSUw6IHJlYWRvbmx5IElucHV0U3BlY1tdID0gW1xuICB7IGZsYWc6ICdlbWFpbCcsIGtleTogJ2VtYWlsJywgZGVzY3JpcHRpb246ICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknLCBib29sZWFuOiB0cnVlIH0sXG4gIHsgZmxhZzogJ25vLWVtYWlsJywga2V5OiAnbm9FbWFpbCcsIGRlc2NyaXB0aW9uOiAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCknLCBib29sZWFuOiB0cnVlIH0sXG4gIHsgZmxhZzogJ2VtYWlsLWZyb20nLCBrZXk6ICdlbWFpbEZyb20nLCBkZXNjcmlwdGlvbjogJ0Zyb20gYWRkcmVzcyAoZGVmYXVsdCBub3JlcGx5QDxkb21haW4+KScgfSxcbiAgeyBmbGFnOiAnZW1haWwtZnJvbS1uYW1lJywga2V5OiAnZW1haWxGcm9tTmFtZScsIGRlc2NyaXB0aW9uOiAnRGlzcGxheSBuYW1lIG9uIG91dGJvdW5kIGVtYWlsJyB9LFxuICB7IGZsYWc6ICdhbGVydC1lbWFpbCcsIGtleTogJ2FsZXJ0RW1haWwnLCBkZXNjcmlwdGlvbjogJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycgfSxcbiAgeyBmbGFnOiAnbm8tY3JlYXRlLXNlcy1pZGVudGl0eScsIGtleTogJ25vQ3JlYXRlU2VzSWRlbnRpdHknLCBkZXNjcmlwdGlvbjogJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknLCBib29sZWFuOiB0cnVlIH0sXG5dO1xuXG4vLyAtLS0gVGFyZ2V0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBUQVJHRVRTOiBSZWFkb25seTxSZWNvcmQ8VGFyZ2V0SWQsIFRhcmdldFNwZWM+PiA9IHtcbiAgbG9jYWw6IHtcbiAgICBpZDogJ2xvY2FsJyxcbiAgICBsYWJlbDogJ0xvY2FsIChEb2NrZXIgQ29tcG9zZSknLFxuICAgIGRpcjogJ2RlcGxveS9sb2NhbCcsXG4gICAgZW50cnlwb2ludDogJ2Jpbi9zZXR1cC5zaCcsXG4gICAgc3BhcnNlUGF0aHM6IFsnZGVwbG95L2xvY2FsJ10sXG4gICAgcmVxdWlyZWQ6IFtdLFxuICAgIG9wdGlvbmFsOiBbXSxcbiAgICBwb3N0RGVwbG95OiAnLi9kZXBsb3kvYmluL2luaXQtcGxhdGZvcm0uc2ggbG9jYWwnLFxuICAgIGNvc3Q6ICdGcmVlJyxcbiAgICBiZXN0Rm9yOiAnRGV2ZWxvcG1lbnQnLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gYXMgYSBEb2NrZXIgQ29tcG9zZSBzdGFjayDigJQgYW4gbmdpbnggVExTIHByb3h5LCB0aGUgQVBJIHNlcnZpY2VzIChwbGF0Zm9ybSwgcGx1Z2luLCBwaXBlbGluZSwgbWVzc2FnZSwgcmVwb3J0aW5nLCBjb21wbGlhbmNlLCBxdW90YSwgYmlsbGluZywgaW1hZ2UtcmVnaXN0cnkpLCB0aGUgZnJvbnRlbmQsIGFuZCBwb3N0Z3JlcyArIG1vbmdvICsgcmVkaXMuIEZpcnN0IHJ1biBwdWxscyB0aGUgZ2hjci5pbyBpbWFnZXMgYW5kIGdlbmVyYXRlcyBhIGxvY2FsIFRMUyBjZXJ0IChhIGZldyBtaW51dGVzKS4nLFxuICAgIGRlc3Ryb3lzOiAnc3RvcHMgYWxsIGNvbnRhaW5lcnMg4oCUIGRhdGEgdW5kZXIgZGVwbG95L2xvY2FsL2RhdGEgcGVyc2lzdHMgb24gZGlzayAoZGVsZXRlIGl0IG1hbnVhbGx5IGZvciBhIGNsZWFuIHNsYXRlKScsXG4gIH0sXG4gIG1pbmlrdWJlOiB7XG4gICAgaWQ6ICdtaW5pa3ViZScsXG4gICAgbGFiZWw6ICdNaW5pa3ViZSAobG9jYWwgS3ViZXJuZXRlcyknLFxuICAgIGRpcjogJ2RlcGxveS9taW5pa3ViZScsXG4gICAgZW50cnlwb2ludDogJ2Jpbi9zZXR1cC5zaCcsXG4gICAgc3BhcnNlUGF0aHM6IFsnZGVwbG95L21pbmlrdWJlJ10sXG4gICAgcmVxdWlyZWQ6IFtdLFxuICAgIG9wdGlvbmFsOiBbXSxcbiAgICBwb3N0RGVwbG95OiAnLi9kZXBsb3kvYmluL2luaXQtcGxhdGZvcm0uc2ggbWluaWt1YmUnLFxuICAgIGNvc3Q6ICdGcmVlJyxcbiAgICBiZXN0Rm9yOiAnTG9jYWwgS3ViZXJuZXRlcycsXG4gICAgZGVwbG95czogJ3RoZSBwbGF0Zm9ybSBvbnRvIGEgbG9jYWwgTWluaWt1YmUgY2x1c3RlciDigJQgdGhlIHNhbWUgc2VydmljZXMgYXMgS3ViZXJuZXRlcyBEZXBsb3ltZW50cy9TZXJ2aWNlcyBiZWhpbmQgYW4gaW5ncmVzcywgcGx1cyBpbi1jbHVzdGVyIHBvc3RncmVzICsgbW9uZ28gKyByZWRpcy4gRmlyc3QgcnVuIHB1bGxzIGltYWdlcywgYnVpbGRzIHRoZSBjbHVzdGVyLCBhbmQgZ2VuZXJhdGVzIGEgVExTIGNlcnQgKHNldmVyYWwgbWludXRlcykuJyxcbiAgICBkZXN0cm95czogJ3N0b3BzIHRoZSBtaW5pa3ViZSBzdGFjayDigJQgcGVyc2lzdGVudCB2b2x1bWVzIChQVkMgZGF0YSkgcmVtYWluIHVudGlsIHRoZSBjbHVzdGVyIGlzIGRlbGV0ZWQnLFxuICB9LFxuICBlYzI6IHtcbiAgICBpZDogJ2VjMicsXG4gICAgbGFiZWw6ICdBV1MgRUMyIChzaW5nbGUgTWluaWt1YmUgaW5zdGFuY2UgYmVoaW5kIGFuIEFMQiknLFxuICAgIGRpcjogJ2RlcGxveS9hd3MvZWMyJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvYXdzL2VjMiddLFxuICAgIHJlcXVpcmVkOiBbS0VZX1BBSVIsIERPTUFJTiwgSE9TVEVEX1pPTkVdLFxuICAgIG9wdGlvbmFsOiBbUkVHSU9OLCBERVBMT1lfTU9ERSwgR0hDUl9UT0tFTiwgSU5TVEFOQ0VfVFlQRSwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBlYzIgICMgZnJvbSBpbnNpZGUgdGhlIFZQQyAoU1NNKScsXG4gICAgY29zdDogJ34kMTQwLTI2NS9tbycsXG4gICAgYmVzdEZvcjogJ0RldiAvIHN0YWdpbmcnLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gb24gYSBzaW5nbGUgRUMyIGluc3RhbmNlIHZpYSBDbG91ZEZvcm1hdGlvbiDigJQgYSBWUEMsIHRoZSBpbnN0YW5jZSAocnVubmluZyB0aGUgTWluaWt1YmUgc3RhY2spLCBhbiBBTEIsIGEgUm91dGUgNTMgcmVjb3JkICsgQUNNIGNlcnQgZm9yIHRoZSBkb21haW4sIGFuZCAoYnkgZGVmYXVsdCkgU0VTIGVtYWlsLiBUaGUgaW5zdGFuY2UgcHVsbHMgaW1hZ2VzIG9uIGZpcnN0IGJvb3QuJyxcbiAgICBkZXN0cm95czogJ0RFTEVURVMgdGhlIENsb3VkRm9ybWF0aW9uIHN0YWNrOiB0aGUgVlBDLCBFQzIgaW5zdGFuY2UsIGFuZCBpdHMgRUJTIGRhdGEgdm9sdW1lIChkYXRhYmFzZXMsIHJlZ2lzdHJ5LCBwbHVnaW4gYnVpbGRzKS4gSXJyZXZlcnNpYmxlLicsXG4gIH0sXG4gIGZhcmdhdGU6IHtcbiAgICBpZDogJ2ZhcmdhdGUnLFxuICAgIGxhYmVsOiAnQVdTIEZhcmdhdGUgKHNlcnZlcmxlc3MgRUNTLCA2IENsb3VkRm9ybWF0aW9uIHN0YWNrcyknLFxuICAgIGRpcjogJ2RlcGxveS9hd3MvZmFyZ2F0ZScsXG4gICAgZW50cnlwb2ludDogJ2Jpbi9zZXR1cC5zaCcsXG4gICAgc3BhcnNlUGF0aHM6IFsnZGVwbG95L2F3cy9mYXJnYXRlJ10sXG4gICAgcmVxdWlyZWQ6IFtET01BSU4sIEhPU1RFRF9aT05FXSxcbiAgICBvcHRpb25hbDogW1JFR0lPTiwgREVQTE9ZX01PREUsIEdIQ1JfVE9LRU4sIC4uLkVNQUlMXSxcbiAgICBwb3N0RGVwbG95OiAnLi9kZXBsb3kvYmluL2luaXQtcGxhdGZvcm0uc2ggZmFyZ2F0ZSAgIyBmcm9tIGEgVlBDLWF0dGFjaGVkIGhvc3QnLFxuICAgIGNvc3Q6ICd+JDEwMC0zMDAvbW8nLFxuICAgIGJlc3RGb3I6ICdQcm9kdWN0aW9uJyxcbiAgICBkZXBsb3lzOiAndGhlIHBsYXRmb3JtIG9uIHNlcnZlcmxlc3MgRUNTIEZhcmdhdGUgdmlhIDYgQ2xvdWRGb3JtYXRpb24gc3RhY2tzIOKAlCBhIFZQQywgYW4gQUxCLCB0aGUgRUNTIHNlcnZpY2VzLCBFRlMtYmFja2VkIGRhdGFiYXNlcyArIHJlZ2lzdHJ5LCBSb3V0ZSA1MyArIEFDTSBmb3IgdGhlIGRvbWFpbiwgYW5kIChieSBkZWZhdWx0KSBTRVMgZW1haWwuIFNlY3JldHMgYXJlIGdlbmVyYXRlZCBpbnRvIFNlY3JldHMgTWFuYWdlciBmaXJzdC4nLFxuICAgIGRlc3Ryb3lzOiAnREVMRVRFUyBhbGwgcGItKiBDbG91ZEZvcm1hdGlvbiBzdGFja3M6IEVGUyBkYXRhLCBkYXRhYmFzZXMsIGFuZCByZWdpc3RyeS4gU2VjcmV0cyBNYW5hZ2VyIGVudHJpZXMgYXJlIE5PVCBhdXRvLWRlbGV0ZWQuIElycmV2ZXJzaWJsZS4nLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFRBUkdFVF9JRFM6IHJlYWRvbmx5IFRhcmdldElkW10gPSBbJ2xvY2FsJywgJ21pbmlrdWJlJywgJ2VjMicsICdmYXJnYXRlJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldElkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVGFyZ2V0SWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAoVEFSR0VUX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyAtLS0gU3BhcnNlIGJvb3RzdHJhcCBwYXRocyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRm9sZGVycyBldmVyeSBgLS1yZXBvYCBib290c3RyYXAgbmVlZHMgcmVnYXJkbGVzcyBvZiB0YXJnZXQ6IHRoZSBvcmNoZXN0cmF0aW9uXG4gKiBzY3JpcHRzLiBFYWNoIHRhcmdldCdzIHNldHVwLnNoICsgaW5pdC1wbGF0Zm9ybS5zaCBsaXZlIGluIC8gZHJpdmUgdGhlc2UuXG4gKiBEZWxpYmVyYXRlbHkgbWluaW1hbCDigJQgaGVhdmllciBmb2xkZXJzIChwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykgYXJlIHB1bGxlZFxuICogaW4gb25seSB3aGVuIHRoZWlyIHBvc3QtaW5zdGFsbCBvcHRpb24gaXMgc2VsZWN0ZWQgKHNlZSBMT0FEX1NURVBTKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTU1PTl9TUEFSU0VfUEFUSFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydkZXBsb3kvYmluJ107XG5cbi8qKlxuICogT3B0LWluIHBvc3QtaW5zdGFsbCBsb2FkIHN0ZXBzLiBFYWNoIG1hcHMgYSBwcm92aXNpb24gYC0td2l0aC0qYCBmbGFnIHRvIHRoZVxuICogaW5pdC1wbGF0Zm9ybSBlbnYgdmFyIHRoYXQgZW5hYmxlcyBpdCBBTkQgdGhlIHJlcG8gZm9sZGVyKHMpIGl0IHJlYWRzIOKAlCBzbyB0aGVcbiAqIHNwYXJzZSBjaGVja291dCBncm93cyBleGFjdGx5IHdpdGggdGhlIHNlbGVjdGVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0FEX1NURVBTID0gW1xuICAvLyBUaGUgcGx1Z2luIGJ1aWxkIHJlYWRzIGRlcGxveS9wbHVnaW5zL19iYXNlIEFORCBkZXBsb3kvY29kZWJ1aWxkL2Jvb3RzdHJhcC5cbiAgeyBpZDogJ3BsdWdpbnMnLCBmbGFnOiAnd2l0aFBsdWdpbnMnLCBlbnY6ICdMT0FEX1BMVUdJTlMnLCBwYXRoczogWydkZXBsb3kvcGx1Z2lucycsICdkZXBsb3kvY29kZWJ1aWxkJ10gfSxcbiAgeyBpZDogJ2NvbXBsaWFuY2UnLCBmbGFnOiAnd2l0aENvbXBsaWFuY2UnLCBlbnY6ICdMT0FEX0NPTVBMSUFOQ0UnLCBwYXRoczogWydkZXBsb3kvY29tcGxpYW5jZSddIH0sXG4gIHsgaWQ6ICdzYW1wbGVzJywgZmxhZzogJ3dpdGhTYW1wbGVzJywgZW52OiAnTE9BRF9QSVBFTElORVMnLCBwYXRoczogWydkZXBsb3kvc2FtcGxlcyddIH0sXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2FkU3RlcElkID0gKHR5cGVvZiBMT0FEX1NURVBTKVtudW1iZXJdWydpZCddO1xuXG4vKipcbiAqIFRoZSBkZS1kdXBsaWNhdGVkIHNldCBvZiBzcGFyc2UgcGF0aHMgZm9yIGEgdGFyZ2V0IHBsdXMgdGhlIGVuYWJsZWQgbG9hZFxuICogc3RlcHM6IGNvbW1vbiBiYXNlIOKIqiB0YXJnZXQgZm9sZGVyKHMpIOKIqiBlYWNoIGVuYWJsZWQgc3RlcCdzIGZvbGRlcihzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZVBhdGhzRm9yKHRhcmdldDogVGFyZ2V0SWQsIGVuYWJsZWRMb2FkSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oQ09NTU9OX1NQQVJTRV9QQVRIUyk7XG4gIGZvciAoY29uc3QgcCBvZiBUQVJHRVRTW3RhcmdldF0uc3BhcnNlUGF0aHMpIHBhdGhzLmFkZChwKTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoc3RlcC5pZCkpIGZvciAoY29uc3QgcCBvZiBzdGVwLnBhdGhzKSBwYXRocy5hZGQocCk7XG4gIH1cbiAgcmV0dXJuIFsuLi5wYXRoc107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZW1ibGVSZXN1bHQge1xuICAvKiogVGhlIGV4YWN0IGNvbW1hbmQgdG8gcnVuIOKAlCBzZWNyZXRzIG1hc2tlZCBhcyBgKioqYC4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogUmVxdWlyZWQgaW5wdXRzIHRoYXQgd2VyZSBub3Qgc3VwcGxpZWQuICovXG4gIHJlYWRvbmx5IG1pc3Npbmc6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSBkZXBsb3kgY29tbWFuZCBmb3IgYSB0YXJnZXQgZnJvbSB0aGUgcHJvdmlkZWQgcGFyYW1zLiBQdXJlIGFuZFxuICogZGV0ZXJtaW5pc3RpYyDigJQgbm8gc2hlbGwsIG5vIExMTS4gTWlzc2luZyByZXF1aXJlZCBpbnB1dHMgYXJlIHJlcG9ydGVkIChuZXZlclxuICogZ3Vlc3NlZCkuIEJ5IGRlZmF1bHQgc2VjcmV0cyBhcmUgbWFza2VkIChgKioqYCkgZm9yIERJU1BMQVk7IHBhc3MgYG1hc2s6IGZhbHNlYFxuICogdG8gYnVpbGQgdGhlIHJlYWwgY29tbWFuZCBmb3IgRVhFQ1VUSU9OIOKAlCB0aGF0IHN0cmluZyBtdXN0IG5ldmVyIGJlIGxvZ2dlZCBvclxuICogc2hvd24gdG8gdGhlIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVDb21tYW5kKFxuICB0YXJnZXQ6IFRhcmdldFNwZWMsXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdHM6IHsgbWFzaz86IGJvb2xlYW4gfSA9IHt9LFxuKTogQXNzZW1ibGVSZXN1bHQge1xuICBjb25zdCBtYXNrID0gb3B0cy5tYXNrID8/IHRydWU7XG4gIGNvbnN0IHByb3ZpZGVkID0gKHNwZWM6IElucHV0U3BlYyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHYgPSBwYXJhbXNbc3BlYy5rZXldO1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gJycgJiYgdiAhPT0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgbWlzc2luZyA9IHRhcmdldC5yZXF1aXJlZC5maWx0ZXIoKHNwZWMpID0+ICFwcm92aWRlZChzcGVjKSk7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2BjZCAke3RhcmdldC5kaXJ9ICYmIGJhc2ggJHt0YXJnZXQuZW50cnlwb2ludH1gXTtcbiAgZm9yIChjb25zdCBzcGVjIG9mIFsuLi50YXJnZXQucmVxdWlyZWQsIC4uLnRhcmdldC5vcHRpb25hbF0pIHtcbiAgICBpZiAoIXByb3ZpZGVkKHNwZWMpKSBjb250aW51ZTtcbiAgICBpZiAoc3BlYy5ib29sZWFuKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAtLSR7c3BlYy5mbGFnfWApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gc3BlYy5zZWNyZXQgJiYgbWFzayA/ICcqKionIDogU3RyaW5nKHBhcmFtc1tzcGVjLmtleV0pO1xuICAgIHBhcnRzLnB1c2goYC0tJHtzcGVjLmZsYWd9ICR7dmFsdWV9YCk7XG4gIH1cblxuICByZXR1cm4geyBjb21tYW5kOiBwYXJ0cy5qb2luKCcgXFxcXFxcbiAgJyksIG1pc3NpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZWFyZG93blJlc3VsdCB7XG4gIC8qKiBUaGUgZXhhY3QgdGVhcmRvd24gY29tbWFuZCB0byBydW4uICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhpcyB0ZWFyZG93biBpcnJldmVyc2libHkgZGVzdHJveXMgZGF0YSAoQVdTIHRhcmdldHMpLiAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWUgdGhlIEVDMiBzZXR1cC5zaCBkZWZhdWx0cyB0by4gKi9cbmNvbnN0IERFRkFVTFRfRUMyX1NUQUNLID0gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuLyoqIFN0YWNrIHByZWZpeCB0aGUgRmFyZ2F0ZSB0ZWFyZG93bi5zaCBkZWZhdWx0cyB0by4gKi9cbmNvbnN0IERFRkFVTFRfRkFSR0FURV9QUkVGSVggPSAncGInO1xuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSB0ZWFyZG93biBjb21tYW5kIGZvciBhIHRhcmdldC4gUHVyZSBhbmQgZGV0ZXJtaW5pc3RpYyDigJQgbWlycm9yc1xuICogYGFzc2VtYmxlQ29tbWFuZGAgZm9yIHRoZSBkZXN0cm95IHBhdGguIGxvY2FsL21pbmlrdWJlIFNUT1AgdGhlIHN0YWNrXG4gKiAobm9uLWRlc3RydWN0aXZlIOKAlCBvbi1kaXNrIC8gUFZDIGRhdGEgc3Vydml2ZXMpOyBlYzIvZmFyZ2F0ZSBERUxFVEUgdGhlaXJcbiAqIENsb3VkRm9ybWF0aW9uIHN0YWNrcyBhbmQgYXJlIGlycmV2ZXJzaWJsZS4gRm9yIEZhcmdhdGUsIGBhc3N1bWVZZXNgIGZvcndhcmRzXG4gKiB0aGUgbmF0aXZlIHNjcmlwdCdzIG93biBgLS15ZXNgICh0aGUgYWdlbnQgcnVucyBpdHMgb3duIHR5cGVkIGNvbmZpcm1hdGlvblxuICogZmlyc3QsIHNvIHRoZSBzY3JpcHQgbXVzdCBub3QgYWxzbyBibG9jayBvbiBzdGRpbik7IEVDMiBgZGVsZXRlLXN0YWNrYCBoYXMgbm9cbiAqIG5hdGl2ZSBwcm9tcHQsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoZSBhZ2VudCBnYXRlIGlzIG1hbmRhdG9yeSB0aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlYXJkb3duQ29tbWFuZChcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgb3B0czogeyBzdGFja05hbWU/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZzsgYXNzdW1lWWVzPzogYm9vbGVhbiB9ID0ge30sXG4pOiBUZWFyZG93blJlc3VsdCB7XG4gIGNvbnN0IHJlZ2lvbiA9IG9wdHMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgJ3VzLWVhc3QtMSc7XG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSAnbG9jYWwnOlxuICAgICAgcmV0dXJuIHsgY29tbWFuZDogJ2NkIGRlcGxveS9sb2NhbCAmJiBiYXNoIGJpbi9zaHV0ZG93bi5zaCcsIGRlc3RydWN0aXZlOiBmYWxzZSB9O1xuICAgIGNhc2UgJ21pbmlrdWJlJzpcbiAgICAgIHJldHVybiB7IGNvbW1hbmQ6ICdjZCBkZXBsb3kvbWluaWt1YmUgJiYgYmFzaCBiaW4vc2h1dGRvd24uc2gnLCBkZXN0cnVjdGl2ZTogZmFsc2UgfTtcbiAgICBjYXNlICdlYzInOiB7XG4gICAgICBjb25zdCBzdGFjayA9IG9wdHMuc3RhY2tOYW1lIHx8IERFRkFVTFRfRUMyX1NUQUNLO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZDpcbiAgICAgICAgICBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlbGV0ZS1zdGFjayAtLXN0YWNrLW5hbWUgJHtzdGFja30gLS1yZWdpb24gJHtyZWdpb259ICYmIGAgK1xuICAgICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gd2FpdCBzdGFjay1kZWxldGUtY29tcGxldGUgLS1zdGFjay1uYW1lICR7c3RhY2t9IC0tcmVnaW9uICR7cmVnaW9ufWAsXG4gICAgICAgIGRlc3RydWN0aXZlOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnZmFyZ2F0ZSc6IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IG9wdHMuc3RhY2tOYW1lIHx8IERFRkFVTFRfRkFSR0FURV9QUkVGSVg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kOlxuICAgICAgICAgIGBjZCBkZXBsb3kvYXdzL2ZhcmdhdGUgJiYgYmFzaCBiaW4vdGVhcmRvd24uc2ggLS1zdGFjay1wcmVmaXggJHtwcmVmaXh9IC0tcmVnaW9uICR7cmVnaW9ufWAgK1xuICAgICAgICAgIChvcHRzLmFzc3VtZVllcyA/ICcgLS15ZXMnIDogJycpLFxuICAgICAgICBkZXN0cnVjdGl2ZTogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqEpC;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqEpC;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6chD"}
|
|
@@ -423,6 +423,11 @@ export function provision(program) {
|
|
|
423
423
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
424
424
|
const realCommand = assembleCommand(spec, runParams, { mask: false }).command;
|
|
425
425
|
printSection(attempt === 1 ? 'Deploying' : `Deploying — retry ${attempt - 1}`);
|
|
426
|
+
if (attempt === 1) {
|
|
427
|
+
printInfo(`Deploying ${spec.label} → ${url}`);
|
|
428
|
+
printInfo(spec.deploys);
|
|
429
|
+
printInfo('Streaming the deploy below — first run is the slow one (image pulls + cert generation).');
|
|
430
|
+
}
|
|
426
431
|
const { code, tail } = await runScript(realCommand, cwd, { capture: true });
|
|
427
432
|
if (code === 0) {
|
|
428
433
|
succeeded = true;
|
|
@@ -524,4 +529,4 @@ export function provision(program) {
|
|
|
524
529
|
}
|
|
525
530
|
});
|
|
526
531
|
}
|
|
527
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJBQXFCLENB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QUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs0QkFDckIsTUFBTTt3QkFDUixDQUFDO3dCQUNELFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMvQixTQUFTLENBQUMsMkVBQTJFLENBQUMsQ0FBQztnQkFDekYsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkaWFnbm9zZUZhaWx1cmUsIGlzQWlDb25maWd1cmVkLCBwYXJzZUdvYWwgfSBmcm9tICcuLi9hZ2VudC9haS5qcyc7XG5pbXBvcnQgeyBib290c3RyYXBDb21tYW5kLCByZXNvbHZlQm9vdHN0cmFwIH0gZnJvbSAnLi4vYWdlbnQvYm9vdHN0cmFwLmpzJztcbmltcG9ydCB7IGVudHJ5cG9pbnRFeGlzdHMsIGV4ZWN1dGlvbkJsb2NrZWQsIHJ1blNjcmlwdCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCwgd2FpdEhlYWx0aHkgfSBmcm9tICcuLi9hZ2VudC9oZWFsdGguanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBvc3RTdGVwcyB9IGZyb20gJy4uL2FnZW50L3Bvc3Qtc3RlcHMuanMnO1xuaW1wb3J0IHsgY2hlY2tQcmVyZXFzLCBnaXRBdmFpbGFibGUsIGdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQsIHByZXJlcXNTYXRpc2ZpZWQgfSBmcm9tICcuLi9hZ2VudC9wcmVyZXFzLmpzJztcbmltcG9ydCB7IFRPT0xTX0RJUiwgZmV0Y2hUb29sLCBpc0ZldGNoYWJsZSwgd2l0aFRvb2xzT25QYXRoIH0gZnJvbSAnLi4vYWdlbnQvdG9vbHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52RmlsZSwgZW52RmlsZU1pc3NpbmcgfSBmcm9tICcuLi9hZ2VudC9lbnYtZmlsZS5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIGlzVGFyZ2V0SWQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICBUQVJHRVRTLFxuICBUQVJHRVRfSURTLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBtYXRjaElzc3Vlcywgc2VzUG9zdERlcGxveUd1aWRhbmNlIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFJlYWQgb25lIGxpbmUgb2YgdHJpbW1lZCBpbnB1dCBmcm9tIHRoZSB0ZXJtaW5hbCwgb3duaW5nIHRoZSByZWFkbGluZVxuICogbGlmZWN5Y2xlLiBVc2VkIGRpcmVjdGx5IGZvciB0aGUgZGVzdHJ1Y3RpdmUgdGVhcmRvd24gZ2F0ZSAoYSB5L04gaXMgdG9vIGVhc3lcbiAqIHRvIGZhdC1maW5nZXIsIHNvIHdlIHJlcXVpcmUgdGhlIG9wZXJhdG9yIHRvIFRZUEUgdGhlIHRhcmdldCBpZCBiYWNrKSwgYW5kIGFzXG4gKiB0aGUgYmFzaXMgZm9yIGBjb25maXJtYC4gRGVsaWJlcmF0ZWx5IGhhcyBubyBhdXRvLWFjY2VwdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgcmwucXVlc3Rpb24ocXVlc3Rpb24pKS50cmltKCk7XG4gIH0gZmluYWxseSB7XG4gICAgcmwuY2xvc2UoKTtcbiAgfVxufVxuXG4vKiogSW50ZXJhY3RpdmUgeS9OIGNvbmZpcm1hdGlvbjsgYXV0by10cnVlIHdoZW4gYGF1dG9ZZXNgICh0aGUgYC0teWVzYCBmbGFnKS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmZpcm0ocXVlc3Rpb246IHN0cmluZywgYXV0b1llczogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoYXV0b1llcykgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFuc3dlciA9IChhd2FpdCBhc2soYCR7cXVlc3Rpb259IFt5L05dIGApKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gYW5zd2VyID09PSAneScgfHwgYW5zd2VyID09PSAneWVzJztcbn1cblxuLyoqIENvbW1hbmRlciBjb2xsZWN0b3I6IGFjY3VtdWxhdGUgcmVwZWF0ZWQgYC0tcG9zdC1zdGVwYCB2YWx1ZXMgaW4gb3JkZXIuICovXG5mdW5jdGlvbiBjb2xsZWN0U3RlcCh2YWx1ZTogc3RyaW5nLCBhY2M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmFjYywgdmFsdWVdO1xufVxuXG4vKipcbiAqIFJlZGFjdCBzZWNyZXQgcGFyYW0gdmFsdWVzIChlLmcuIHRoZSBnaGNyIHRva2VuKSBmcm9tIGNhcHR1cmVkIGRlcGxveSBvdXRwdXRcbiAqIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBMTE0gZm9yIGRpYWdub3Npcy4gVGhlIGRlcGxveSBydW5zIHdpdGggc2VjcmV0c1xuICogdW5tYXNrZWQsIHNvIGFsdGhvdWdoIHRoZSBjdXJyZW50IHNjcmlwdHMgZG9uJ3QgZWNobyB0aGVtLCB0aGlzIGtlZXBzIGEgZnV0dXJlXG4gKiBzY3JpcHQncyBzdHJheSBlY2hvIChvciBhIHZlcmJvc2Ugc3ViLXRvb2wpIGZyb20gY3Jvc3NpbmcgdGhlIHRoaXJkLXBhcnR5LUxMTVxuICogYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIHJlZGFjdFNlY3JldHModGV4dDogc3RyaW5nLCBzcGVjOiBUYXJnZXRTcGVjLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgbGV0IG91dCA9IHRleHQ7XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgWy4uLnNwZWMucmVxdWlyZWQsIC4uLnNwZWMub3B0aW9uYWxdKSB7XG4gICAgaWYgKCFpbnB1dC5zZWNyZXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2lucHV0LmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID49IDQpIG91dCA9IG91dC5zcGxpdCh2YWx1ZSkuam9pbignKioqJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwcm92aXNpb25gIGNvbW1hbmQg4oCUIGFuIEFJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIFBpcGVsaW5lXG4gKiBCdWlsZGVyIFBMQVRGT1JNIChsb2NhbC9taW5pa3ViZS9FQzIvRmFyZ2F0ZSkuIFBoYXNlIDEgaXMgUkVBRC1PTkxZIChwcmVyZXFcbiAqIGNoZWNrcywgTkwtZ29hbCBwYXJzaW5nLCBjb21tYW5kIGFzc2VtYmx5LCBmYWlsdXJlIGRpYWdub3Npcyk7IGAtLWV4ZWN1dGVgXG4gKiBnYXRlcyBhIHJlYWwgZGVwbG95LiBXaXRoIGAtLXJlcG9gIGl0IGNhbiBib290c3RyYXAgYSBmcmVzaCBtYWNoaW5lIGJ5IHNwYXJzZWx5XG4gKiBjbG9uaW5nIG9ubHkgdGhlIGRlcGxveSBmb2xkZXJzIHRoZSBzZWxlY3RlZCB0YXJnZXQgKyBvcHRpb25zIG5lZWQsIHRoZW4gcnVuc1xuICogcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciBhZG1pbiwgb3B0LWluIGxvYWRzLCBzbW9rZSB0ZXN0LCBjdXN0b20gY29tbWFuZHMpLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwcm92aXNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgcGxhdGZvcm0gKGxvY2FsL21pbmlrdWJlL0VDMi9GYXJnYXRlKTogYWR2aXNlLCAtLWV4ZWN1dGUgdG8gZGVwbG95LCBvciAtLXRlYXJkb3duIHRvIHJlbW92ZScpXG4gICAgLm9wdGlvbignLXQsIC0tdGFyZ2V0IDx0YXJnZXQ+JywgYERlcGxveSB0YXJnZXQ6ICR7VEFSR0VUX0lEUy5qb2luKCcgfCAnKX1gKVxuICAgIC5vcHRpb24oJy1wLCAtLXByb21wdCA8dGV4dD4nLCAnTmF0dXJhbC1sYW5ndWFnZSBnb2FsIChwYXJzZWQgaW50byBwYXJhbXMgd2hlbiBhbiBBSSBrZXkgaXMgc2V0KScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWRvbWFpbiA8ZG9tYWluPicsICdGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1ob3N0ZWQtem9uZS1pZCA8aWQ+JywgJ1B1YmxpYyBSb3V0ZSA1MyBob3N0ZWQgem9uZSBJRCAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWRlcGxveS1tb2RlIDxtb2RlPicsICdwdWJsaWMgfCBwcml2YXRlIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0ta2V5LXBhaXIgPG5hbWU+JywgJ0VDMiBrZXkgcGFpciAoRUMyKScpXG4gICAgLm9wdGlvbignLS1pbnN0YW5jZS10eXBlIDx0eXBlPicsICdFQzIgaW5zdGFuY2UgdHlwZSAoRUMyKScpXG4gICAgLm9wdGlvbignLS1naGNyLXRva2VuIDx0b2tlbj4nLCAnR2l0SHViIFBBVCAocmVhZDpwYWNrYWdlcykg4oCUIG1hc2tlZCBpbiBvdXRwdXQnKVxuICAgIC5vcHRpb24oJy0tZW1haWwnLCAnRW5hYmxlIFNFUyB0cmFuc2FjdGlvbmFsIGVtYWlsIChvbiBieSBkZWZhdWx0IGZvciBBV1MpJylcbiAgICAub3B0aW9uKCctLW5vLWVtYWlsJywgJ1NraXAgU0VTICh0cmFuc2FjdGlvbmFsIGVtYWlsIGlzIHByb3Zpc2lvbmVkIGJ5IGRlZmF1bHQgb24gQVdTKScpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tIDxhZGRyPicsICdTRVMgRnJvbSBhZGRyZXNzJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20tbmFtZSA8bmFtZT4nLCAnU0VTIEZyb20gZGlzcGxheSBuYW1lJylcbiAgICAub3B0aW9uKCctLWFsZXJ0LWVtYWlsIDxhZGRyPicsICdTdWJzY3JpYmUgYW4gYWRkcmVzcyB0byB0aGUgYm91bmNlL2NvbXBsYWludCBTTlMgdG9waWMnKVxuICAgIC5vcHRpb24oJy0tc2tpcC1zZXMtaWRlbnRpdHknLCAnU2tpcCBTRVMgaWRlbnRpdHkgY3JlYXRpb24gKGRvbWFpbiBhbHJlYWR5IHZlcmlmaWVkKScpXG4gICAgLm9wdGlvbignLS1haS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIChhbnRocm9waWN8b3BlbmFpfGdvb2dsZXx4YWl8YmVkcm9jayknKVxuICAgIC5vcHRpb24oJy0tbW9kZWwgPG1vZGVsPicsICdBSSBtb2RlbCBpZCcpXG4gICAgLm9wdGlvbignLS1kaWFnbm9zZSA8ZmlsZT4nLCAnRGlhZ25vc2UgYSBDbG91ZEZvcm1hdGlvbi9kZXBsb3kgZmFpbHVyZSBmcm9tIGEgZmlsZSAobmVlZHMgYW4gQUkga2V5KScpXG4gICAgLm9wdGlvbignLXksIC0teWVzJywgJ0F1dG8tYWNjZXB0IHRoZSBleGVjdXRpb24gYXBwcm92YWwgcHJvbXB0IChmb3IgQ0kgLyBub24taW50ZXJhY3RpdmUpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1leGVjdXRlJywgJ1J1biB0aGUgZGVwbG95IChnYXRlZDogbmVlZHMgYXBwcm92YWwsIHJlZnVzZXMgb24gZmFpbGVkIHByZXJlcXMgLyBtaXNzaW5nIGlucHV0cyknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdTdGFjayBuYW1lIChFQzIpIC8gc3RhY2sgcHJlZml4IChGYXJnYXRlKSB0byB0ZWFyIGRvd24g4oCUIGRlZmF1bHRzIHRvIHRoZSBkZXBsb3kgZGVmYXVsdCcpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLW5vLWluaXQnLCAnU2tpcCB0aGUgcG9zdC1kZXBsb3kgcmVnaXN0ZXIvaW5pdC1wbGF0Zm9ybSBzdGVwJylcbiAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkg4oCUIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQuXG4gICAgLm9wdGlvbignLS1yZXBvIFt1cmxdJywgJ0Jvb3RzdHJhcDogZ2l0LWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IChzcGFyc2Ug4oCUIG9ubHkgdGhlIG5lZWRlZCBkZXBsb3kgZm9sZGVycyksIHRoZW4gcnVuIGZyb20gaXQgKG5vIHZhbHVlID0gdGhlIHVwc3RyZWFtIGRlZmF1bHQpJylcbiAgICAub3B0aW9uKCctLXJlZiA8cmVmPicsICdHaXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQgd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBtYWluKScpXG4gICAgLm9wdGlvbignLS13b3JrZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20gd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBwaXBlbGluZS1idWlsZGVyKScpXG4gICAgLy8gUG9zdC1pbnN0YWxsIGxvYWRzIOKAlCBlYWNoIG9wdC1pbiBzdGVwIGFsc28gYWRkcyBpdHMgZGVwbG95IGZvbGRlciB0byB0aGUgc3BhcnNlIGNsb25lLlxuICAgIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ1Bvc3QtaW5zdGFsbDogYnVpbGQgKyBsb2FkIHBsdWdpbnMgKGFkZHMgZGVwbG95L3BsdWdpbnMsIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWNvbXBsaWFuY2UnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBjb21wbGlhbmNlIHJ1bGVzL3BvbGljaWVzIChhZGRzIGRlcGxveS9jb21wbGlhbmNlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zYW1wbGVzJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgcGlwZWxpbmVzIChhZGRzIGRlcGxveS9zYW1wbGVzKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1hbGwnLCAnUG9zdC1pbnN0YWxsOiBwbHVnaW5zICsgY29tcGxpYW5jZSArIHNhbXBsZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWJ1aWxkLWJvb3RzdHJhcCcsICdCdWlsZCArIHB1Ymxpc2ggdGhlIENvZGVCdWlsZCBib290c3RyYXAgaW1hZ2UgZHVyaW5nIHJlZ2lzdGVyIChhZGRzIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNtb2tlLXRlc3QnLCAnUG9zdC1pbnN0YWxsOiByZWFkLW9ubHkgQVBJIHJlYWNoYWJpbGl0eSBjaGVjaycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1ldmVudHMnLCAnUG9zdC1pbnN0YWxsIChBV1MpOiBldmVudCBpbmdlc3Rpb24gYnVuZGxlIOKAlCBzdG9yZS10b2tlbiAoSldUIOKGkiBTZWNyZXRzIE1hbmFnZXIpIHRoZW4gc2V0dXAtZXZlbnRzIChFdmVudEJyaWRnZS9MYW1iZGEpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1wb3N0LXN0ZXAgPGNtZD4nLCAnUnVuIGFuIGV4dHJhIGNvbW1hbmQgYWZ0ZXIgdGhlIGxvYWRzIChyZXBlYXRhYmxlLCBpbiBvcmRlciknLCBjb2xsZWN0U3RlcCwgW10pXG4gICAgLm9wdGlvbignLS1hZG1pbi1lbWFpbCA8YWRkcj4nLCAnQWRtaW4gZW1haWwgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9JREVOVElGSUVSKScpXG4gICAgLm9wdGlvbignLS1hZG1pbi1wYXNzd29yZCA8cHc+JywgJ0FkbWluIHBhc3N3b3JkIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fUEFTU1dPUkQpJylcbiAgICAub3B0aW9uKCctLWpzb24nLCAnT3V0cHV0IHRoZSBwbGFuIGFzIEpTT04gKG5ldmVyIGV4ZWN1dGVzKScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQcm92aXNpb24gKGFkdmlzb3IpJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIDEuIEFzc2VtYmxlIHBhcmFtcyBmcm9tIGV4cGxpY2l0IGZsYWdzIChmbGFncyBhbHdheXMgd2luIG92ZXIgTkwgcGFyc2UpLlxuICAgICAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgZG9tYWluOiBvcHRpb25zLmRvbWFpbixcbiAgICAgICAgICBob3N0ZWRab25lSWQ6IG9wdGlvbnMuaG9zdGVkWm9uZUlkLFxuICAgICAgICAgIGRlcGxveU1vZGU6IG9wdGlvbnMuZGVwbG95TW9kZSxcbiAgICAgICAgICBrZXlQYWlyOiBvcHRpb25zLmtleVBhaXIsXG4gICAgICAgICAgaW5zdGFuY2VUeXBlOiBvcHRpb25zLmluc3RhbmNlVHlwZSxcbiAgICAgICAgICBnaGNyVG9rZW46IG9wdGlvbnMuZ2hjclRva2VuLFxuICAgICAgICAgIC8vIENvbW1hbmRlciB0cmktc3RhdGVzIGBlbWFpbGA6IHVuZGVmaW5lZCAobmVpdGhlciksIHRydWUgKC0tZW1haWwpLFxuICAgICAgICAgIC8vIGZhbHNlICgtLW5vLWVtYWlsKS4gU0VTIGlzIG9uIGJ5IGRlZmF1bHQsIHNvIG9ubHkgLS1uby1lbWFpbCBpc1xuICAgICAgICAgIC8vIGxvYWQtYmVhcmluZyAoaXQgZW1pdHMgYC0tbm8tZW1haWxgIGludG8gdGhlIGRlcGxveSBjb21tYW5kKS5cbiAgICAgICAgICBlbWFpbDogb3B0aW9ucy5lbWFpbCA9PT0gdHJ1ZSxcbiAgICAgICAgICBub0VtYWlsOiBvcHRpb25zLmVtYWlsID09PSBmYWxzZSxcbiAgICAgICAgICBlbWFpbEZyb206IG9wdGlvbnMuZW1haWxGcm9tLFxuICAgICAgICAgIGVtYWlsRnJvbU5hbWU6IG9wdGlvbnMuZW1haWxGcm9tTmFtZSxcbiAgICAgICAgICBhbGVydEVtYWlsOiBvcHRpb25zLmFsZXJ0RW1haWwsXG4gICAgICAgICAgbm9DcmVhdGVTZXNJZGVudGl0eTogb3B0aW9ucy5za2lwU2VzSWRlbnRpdHksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFpT3B0cyA9IHsgcHJvdmlkZXI6IG9wdGlvbnMuYWlQcm92aWRlciwgbW9kZWw6IG9wdGlvbnMubW9kZWwgfTtcblxuICAgICAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkgKyBwb3N0LWluc3RhbGwgc2VsZWN0aW9ucy5cbiAgICAgICAgY29uc3Qgd2FudEJvb3RzdHJhcCA9IG9wdGlvbnMucmVwbyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVwbyAhPT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpdGhBbGwgPSBvcHRpb25zLndpdGhBbGwgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGVuYWJsZWRMb2FkSWRzID0gTE9BRF9TVEVQUy5maWx0ZXIoKHMpID0+IHdpdGhBbGwgfHwgb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKS5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICBjb25zdCBwb3N0U3RlcEZsYWdzID0ge1xuICAgICAgICAgIGluaXQ6IG9wdGlvbnMuaW5pdCAhPT0gZmFsc2UsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0EgLS1wcm9tcHQgd2FzIGdpdmVuIGJ1dCBubyBBSSBrZXkgaXMgc2V0IOKAlCBpZ25vcmluZyBpdCBhbmQgdXNpbmcgZmxhZ3Mgb25seS4gU2V0IEFOVEhST1BJQ19BUElfS0VZIChvciAtLWFpLXByb3ZpZGVyICsgaXRzIGtleSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBOZWVkIGEgdGFyZ2V0IHRvIGFzc2VtYmxlIGEgcGxhbi5cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBObyB0YXJnZXQgc3BlY2lmaWVkLiBQYXNzIC0tdGFyZ2V0IDwke1RBUkdFVF9JRFMuam9pbignfCcpfT4gb3IgZGVzY3JpYmUgdGhlIGdvYWwgd2l0aCAtLXByb21wdC5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjID0gVEFSR0VUU1t0YXJnZXRdO1xuICAgICAgICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgICAgICAvLyA0Yi4gVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLiBHYXRlZCBoYXJkZXJcbiAgICAgICAgLy8gdGhhbiBkZXBsb3k6IEFXUyB0YXJnZXRzIGFyZSBpcnJldmVyc2libGUsIHNvIHdlIHJlcXVpcmUgdGhlIG9wZXJhdG9yIHRvXG4gICAgICAgIC8vIFRZUEUgdGhlIHRhcmdldCBpZCAoLS1mb3JjZSBieXBhc3NlcyBmb3IgQ0k7IC0teWVzIGFsb25lIGRvZXMgTk9UKS5cbiAgICAgICAgaWYgKG9wdGlvbnMudGVhcmRvd24pIHtcbiAgICAgICAgICBjb25zdCB7IGNvbW1hbmQ6IGRvd25Db21tYW5kLCBkZXN0cnVjdGl2ZSB9ID0gdGVhcmRvd25Db21tYW5kKHRhcmdldCwge1xuICAgICAgICAgICAgc3RhY2tOYW1lOiBvcHRpb25zLnN0YWNrTmFtZSxcbiAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBmb3J3YXJkIC0teWVzIHNvIHRoZSBuYXRpdmVcbiAgICAgICAgICAgIC8vIHNjcmlwdCAoRmFyZ2F0ZSkgZG9lc24ndCBhbHNvIGJsb2NrIG9uIHN0ZGluIHdlJ3JlIGluaGVyaXRpbmcuXG4gICAgICAgICAgICBhc3N1bWVZZXM6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmludFNlY3Rpb24oYFRlYXJkb3duIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Rlc3Ryb3lzJzogc3BlYy5kZXN0cm95cywgJ1N0b3BzIGNvc3QnOiBzcGVjLmNvc3QgfSk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICAgICAgICAgIHByaW50SW5mbyhkb3duQ29tbWFuZCk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZXhlY3V0ZSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdcXG5BZHZpc29yIG1vZGUg4oCUIG5vdGhpbmcgd2FzIGV4ZWN1dGVkLiBSZS1ydW4gd2l0aCAtLWV4ZWN1dGUgdG8gdGVhciBkb3duLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkZXN0cnVjdGl2ZSAmJiAhb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBhc2soYFxcblRoaXMgaXMgSVJSRVZFUlNJQkxFLiBUeXBlIFwiJHt0YXJnZXR9XCIgdG8gY29uZmlybSB0ZWFyZG93bjogYCk7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgICAgICAgICBwcmludFdhcm5pbmcoJ1RoYXQgZGlkblxcJ3QgbWF0Y2gsIHNvIG5vdGhpbmcgd2FzIGRlc3Ryb3llZCDigJQgeW91IGhhdmUgdG8gdHlwZSB0aGUgZXhhY3QgdGFyZ2V0IGlkIHRvIGNvbmZpcm0uJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFkZXN0cnVjdGl2ZSAmJiAhb3B0aW9ucy5mb3JjZSAmJiAhKGF3YWl0IGNvbmZpcm0oJ1xcblByb2NlZWQgd2l0aCB0ZWFyZG93biAoc3RvcHMgdGhlIHN0YWNrOyBvbi1kaXNrIGRhdGEgcGVyc2lzdHMpPycsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1RlYXJpbmcgZG93bicpO1xuICAgICAgICAgIGNvbnN0IHsgY29kZTogZG93bkNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChkb3duQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgICAgIGlmIChkb3duQ29kZSAhPT0gMCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgXFxuVGVhcmRvd24gZmFpbGVkIChleGl0ICR7ZG93bkNvZGV9KS4gSW5zcGVjdCB0aGUgc3RhY2svY29udGFpbmVycyBhbmQgcmV0cnkuYCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdUZWFyZG93biBjb21wbGV0ZS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICBjb25zdCB7IGNvbW1hbmQsIG1pc3NpbmcgfSA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCB1cmwgPSBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0LCBwYXJhbXMpO1xuXG4gICAgICAgIC8vIFNwYXJzZSBib290c3RyYXAgY2xvbmUgY29tbWFuZCAoY29tbW9uIGJhc2UgKyB0YXJnZXQgKyBzZWxlY3RlZCBsb2FkcykuXG4gICAgICAgIGNvbnN0IHNwYXJzZVBhdGhzID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBlbmFibGVkTG9hZElkcyk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9IHJlc29sdmVCb290c3RyYXAoXG4gICAgICAgICAgeyByZXBvOiB0eXBlb2Ygb3B0aW9ucy5yZXBvID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbyA6IHVuZGVmaW5lZCwgcmVmOiBvcHRpb25zLnJlZiwgd29ya2Rpcjogb3B0aW9ucy53b3JrZGlyLCBmdWxsOiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpIH0sXG4gICAgICAgICAgc3BhcnNlUGF0aHMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcENtZCA9IHdhbnRCb290c3RyYXAgPyBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCkgOiBudWxsO1xuXG4gICAgICAgIC8vIFJlc29sdmUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS5cbiAgICAgICAgY29uc3QgeyBzdGVwczogcG9zdFN0ZXBzLCBza2lwcGVkOiBza2lwcGVkU3RlcHMgfSA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVnaW9uOiB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzLFxuICAgICAgICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwcmVyZXFzLFxuICAgICAgICAgICAgcHJlcmVxc1NhdGlzZmllZDogcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSxcbiAgICAgICAgICAgIG1pc3NpbmdJbnB1dHM6IG1pc3NpbmcubWFwKChtKSA9PiAoeyBmbGFnOiBtLmZsYWcsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uIH0pKSxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwQ21kLFxuICAgICAgICAgICAgc3BhcnNlUGF0aHM6IHdhbnRCb290c3RyYXAgPyBzcGFyc2VQYXRocyA6IG51bGwsXG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgcG9zdFN0ZXBzOiBwb3N0U3RlcHMubWFwKChzKSA9PiAoeyBpZDogcy5pZCwgbGFiZWw6IHMubGFiZWwsIGNvbW1hbmQ6IHMuY29tbWFuZCB9KSksXG4gICAgICAgICAgICBza2lwcGVkUG9zdFN0ZXBzOiBza2lwcGVkU3RlcHMsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIFByaW50IHRoZSBwbGFuIChzaGFyZWQgYnkgYWR2aXNvciArIGV4ZWN1dGUpLlxuICAgICAgICBwcmludFNlY3Rpb24oYFByb3Zpc2lvbiBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnQmVzdCBmb3InOiBzcGVjLmJlc3RGb3IsICdDb3N0Jzogc3BlYy5jb3N0IH0pO1xuXG4gICAgICAgIHByaW50U2VjdGlvbignUHJlcmVxdWlzaXRlcycpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcHJlcmVxcykgcHJpbnRJbmZvKGAke2Mub2sgPyAn4pyTJyA6ICfinJcnfSAke2MubmFtZX0g4oCUICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgIGlmICghcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSkgcHJpbnRXYXJuaW5nKCdSZXNvbHZlIHRoZSBmYWlsaW5nIHByZXJlcXVpc2l0ZXMgYWJvdmUgYmVmb3JlIGRlcGxveWluZy4nKTtcblxuICAgICAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIGlucHV0cycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtaXNzaW5nKSBwcmludEluZm8oYCAgLS0ke20uZmxhZ30gICgke20uZGVzY3JpcHRpb259KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwIChzcGFyc2UgZ2l0IGNsb25lLCBydW5zIGZpcnN0KScpO1xuICAgICAgICAgIHByaW50SW5mbyhgQ2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IOKGkiAke2Jvb3RzdHJhcC53b3JrZGlyfTsgZm9sZGVyczogJHtzcGFyc2VQYXRocy5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHByaW50SW5mbyhib290c3RyYXBDbWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICAgICAgICBwcmludEluZm8oY29tbWFuZCk7XG5cbiAgICAgICAgaWYgKHBvc3RTdGVwcy5sZW5ndGggPiAwIHx8IHNraXBwZWRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdQb3N0LWluc3RhbGwgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcG9zdFN0ZXBzKSBwcmludEluZm8oYOKAoiAke3MubGFiZWx9XFxuICAgICR7cy5jb21tYW5kfWApO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgc2tpcHBlZCAke3MuaWR9OiAke3MucmVhc29ufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gQWR2aXNvciBtb2RlIChkZWZhdWx0KSDigJQgc3RvcCBoZXJlLCBub3RoaW5nIGV4ZWN1dGVkLlxuICAgICAgICBpZiAoIW9wdGlvbnMuZXhlY3V0ZSkge1xuICAgICAgICAgIHByaW50V2FybmluZygnXFxuQWR2aXNvciBtb2RlIOKAlCBub3RoaW5nIHdhcyBleGVjdXRlZC4gUmUtcnVuIHdpdGggLS1leGVjdXRlIHRvIGRlcGxveSAoZ2F0ZWQgYnkgYXBwcm92YWwpLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDcuIEFueSBtaXNzaW5nIHJlcXVpcmVkIHByZXJlcSB0aGF0J3MgYSBzaW5nbGUgc3RhdGljIGJpbmFyeSAoZS5nLiB5cSlcbiAgICAgICAgLy8gY2FuIGJlIGZldGNoZWQgaW50byB0aGUgdG9vbHMgY2FjaGUgaW5zdGVhZCBvZiBhIHN5c3RlbSBpbnN0YWxsIOKAlCBub1xuICAgICAgICAvLyBicmV3L2FwdC4gT2ZmZXIgaXQsIHRoZW4gcmUtY2hlY2sgKHRoZSBjYWNoZSBkaXIgaXMgYWxyZWFkeSBvbiBQQVRIKS5cbiAgICAgICAgY29uc3QgZmV0Y2hhYmxlID0gcHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgaXNGZXRjaGFibGUoYy5uYW1lKSk7XG4gICAgICAgIGlmIChmZXRjaGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gZmV0Y2hhYmxlLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke25hbWVzfSBub3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgb2ZmaWNpYWwgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfSAobm8gc3lzdGVtIGluc3RhbGwpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGZldGNoYWJsZSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBtYW51YWxseSBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Yi4gR2F0ZWQgZXhlY3V0aW9uLiBDaGVjayBwcmVyZXFzIC8gcmVxdWlyZWQgaW5wdXRzIGZpcnN0IOKAlCB0aGlzIGFsc29cbiAgICAgICAgLy8gY2F0Y2hlcyBhIG1pc3NpbmcgYGdpdGAgd2hlbiBib290c3RyYXBwaW5nLlxuICAgICAgICBjb25zdCBibG9ja2VkID0gZXhlY3V0aW9uQmxvY2tlZChwcmVyZXFzLCBtaXNzaW5nKTtcbiAgICAgICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBDYW4ndCBzdGFydCBqdXN0IHlldCDigJQgJHtibG9ja2VkfS4gUmVzb2x2ZSB0aGF0IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EuIFNwYXJzZS1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbywgcmVwb2ludCBjd2QsIGFuZCB2ZXJpZnkgdGhlIHRyZWUuXG4gICAgICAgIC8vIFNoYXJlZCBieSBgLS1yZXBvYCAoYmVsb3cpIGFuZCB0aGUgaW50ZXJhY3RpdmUgb2ZmZXIgaW4gN2IuIFJldHVybnNcbiAgICAgICAgLy8gZmFsc2UgKGFuZCBzZXRzIGV4aXRDb2RlKSBvbiBmYWlsdXJlIOKAlCB3aXRoIGEgZnJpZW5kbHkgbWVzc2FnZS5cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwQ2xvbmUgPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgICAgY29uc3QgY21kID0gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApO1xuICAgICAgICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGNtZCk7XG4gICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoY21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYFxcblRoZSBjbG9uZSBkaWRuJ3QgZmluaXNoIChleGl0ICR7Y29kZX0pLiBEb3VibGUtY2hlY2sgdGhlIHJlcG8gVVJMIC8gcmVmIChvciB5b3VyIG5ldHdvcmspIGFuZCBnaXZlIGl0IGFub3RoZXIgZ28uYCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3dkID0gcGF0aC5yZXNvbHZlKGN3ZCwgYm9vdHN0cmFwLndvcmtkaXIpO1xuICAgICAgICAgIHByaW50U3VjY2VzcyhgUmVwbyBpcyByZWFkeSDigJQgY29udGludWluZyBmcm9tICR7Y3dkfWApO1xuICAgICAgICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICAgICAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYFxcblRoZSBzcGFyc2UgY2xvbmUgaXMgbWlzc2luZyAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhhdCByZWYgbWF5IG5vdCBoYXZlIHRob3NlIGZvbGRlcnMuIFRyeSBhIGRpZmZlcmVudCAtLXJlZi5gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBgLS1yZXBvYDogY2xvbmUgdXAgZnJvbnQgKG11c3QgcHJlY2VkZSB0aGUgZW50cnlwb2ludCBjaGVjaykuXG4gICAgICAgIGlmIChib290c3RyYXBDbWQpIHtcbiAgICAgICAgICBwcmludEluZm8oYFxcbkJvb3RzdHJhcCDihpIgY2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IGludG8gJHtib290c3RyYXAud29ya2Rpcn0gKHNwYXJzZSkuYCk7XG4gICAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybSgnR28gYWhlYWQgd2l0aCB0aGUgY2xvbmU/Jywgb3B0aW9ucy55ZXMpKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLiBSZS1ydW4gd2hlbmV2ZXIgeW91XFwncmUgcmVhZHkuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Yi4gVGhlIGRlcGxveSBlbnRyeXBvaW50IG11c3QgZXhpc3QgcmVsYXRpdmUgdG8gY3dkLiBJZiBpdCBkb2Vzbid0IGFuZFxuICAgICAgICAvLyB3ZSBoYXZlbid0IGJvb3RzdHJhcHBlZCwgZ3JhY2VmdWxseSBPRkZFUiB0byBjbG9uZSAoaW50ZXJhY3RpdmUgb25seSksXG4gICAgICAgIC8vIHNvIGEgZnJlc2ggbWFjaGluZSBjYW4gcHJvY2VlZCB3aXRob3V0IHJlLXJ1bm5pbmcgd2l0aCAtLXJlcG8uXG4gICAgICAgIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmUgPSBCb29sZWFuKHByb2Nlc3Muc3RkaW4uaXNUVFkpICYmICFvcHRpb25zLnllcztcbiAgICAgICAgICBpZiAoIWJvb3RzdHJhcENtZCAmJiBpbnRlcmFjdGl2ZSAmJiBnaXRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcHJpbnRJbmZvKGBcXG5Mb29rcyBsaWtlIHlvdSdyZSBub3QgaW5zaWRlIGEgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCwgc28gdGhlICR7c3BlYy5sYWJlbH0gZGVwbG95IHNjcmlwdHMgYXJlbid0IGhlcmUgeWV0LmApO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFdhbnQgbWUgdG8gc3BhcnNlLWNsb25lIHRoZW0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSBhbmQga2VlcCBnb2luZz9gLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhgXFxuSSBjb3VsZG4ndCBmaW5kICR7c3BlYy5kaXJ9LyR7c3BlYy5lbnRyeXBvaW50fSBmcm9tICR7Y3dkfS5gKTtcbiAgICAgICAgICAgIHByaW50SW5mbygnVHdvIGVhc3kgd2F5cyBmb3J3YXJkOicpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCcgIOKAoiBjZCBpbnRvIHlvdXIgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCBhbmQgcmUtcnVuLCBvcicpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKGAgIOKAoiBhZGQgLS1yZXBvIGFuZCBJJ2xsIGJvb3RzdHJhcCBhIGZyZXNoIHNwYXJzZSBjbG9uZSBmb3IgeW91JHtnaXRBdmFpbGFibGUoKSA/ICcuJyA6ICcgKG9uY2UgZ2l0IGlzIGluc3RhbGxlZCkuJ31gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgdGFyZ2V0J3MgLmVudiBtdXN0IGV4aXN0IChsb2NhbC9taW5pa3ViZSkg4oCUIHNldHVwLnNoIGFib3J0cyB3aXRob3V0XG4gICAgICAgIC8vIGl0LiBDcmVhdGUgZnJvbSAuZW52LmV4YW1wbGUgd2l0aCBnZW5lcmF0ZWQgc2VjcmV0cyBzbyB0aGUgZGVwbG95IGlzXG4gICAgICAgIC8vIG5vbi1pbnRlcmFjdGl2ZS4gKGVjMi9mYXJnYXRlIHVzZSBBV1MgU2VjcmV0cyBNYW5hZ2VyLCBub3QgYSAuZW52LilcbiAgICAgICAgaWYgKGVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRoaXMgZGVwbG95PycsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2MuIFJ1biB0aGUgZGVwbG95IG91dC1vZi1sb29wIChyZWFsIGNvbW1hbmQsIHNlY3JldHMgdW5tYXNrZWQsIHN0cmVhbWVkICtcbiAgICAgICAgLy8gY2FwdHVyZWQpLCB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3Ag4oCUIHRoZSBkZXBsb3kgc2NyaXB0cyBhcmVcbiAgICAgICAgLy8gaWRlbXBvdGVudCwgc28gYSBmaXhlZCByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLlxuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1heCgwLCBwYXJzZUludChvcHRpb25zLnJldHJpZXMsIDEwKSB8fCAwKTtcbiAgICAgICAgbGV0IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBwYXJhbXM7XG4gICAgICAgIGxldCBzdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgICAgIGNvbnN0IHJlYWxDb21tYW5kID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHJ1blBhcmFtcywgeyBtYXNrOiBmYWxzZSB9KS5jb21tYW5kO1xuICAgICAgICAgIHByaW50U2VjdGlvbihhdHRlbXB0ID09PSAxID8gJ0RlcGxveWluZycgOiBgRGVwbG95aW5nIOKAlCByZXRyeSAke2F0dGVtcHQgLSAxfWApO1xuICAgICAgICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHJlYWxDb21tYW5kLCBjd2QsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gMCkgeyBzdWNjZWVkZWQgPSB0cnVlOyBicmVhazsgfVxuXG4gICAgICAgICAgcHJpbnRFcnJvcihgXFxuRGVwbG95IGZhaWxlZCAoZXhpdCAke2NvZGV9KS5gKTtcbiAgICAgICAgICBjb25zdCBpc3N1ZXMgPSBtYXRjaElzc3Vlcyh0YWlsKTtcbiAgICAgICAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByaW50U2VjdGlvbignTGlrZWx5IGNhdXNlJyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaXNzdWVzKSBwcmludEluZm8oYOKAoiAke2kuY2F1c2V9XFxuICDihpIgJHtpLnN1Z2dlc3Rpb259YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FpQ29uZmlndXJlZChhaU9wdHMpKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFnbm9zaXMgPSBhd2FpdCBkaWFnbm9zZUZhaWx1cmUocmVkYWN0U2VjcmV0cyh0YWlsLCBzcGVjLCBydW5QYXJhbXMpLCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKGRpYWdub3NpcykgeyBwcmludFNlY3Rpb24oJ0RpYWdub3NpcycpOyBwcmludEluZm8oZGlhZ25vc2lzKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykgYnJlYWs7XG5cbiAgICAgICAgICAvLyBBdXRvLWZpeDogYSByZXRyeWFibGUgaXNzdWUgd2l0aCBhIHBhcmFtIHdlIGhhdmVuJ3QgYWxyZWFkeSBhcHBsaWVkLlxuICAgICAgICAgIGNvbnN0IGZpeCA9IGlzc3Vlcy5maW5kKChpKSA9PiBpLnJldHJ5YWJsZSAmJiBpLnBhcmFtRml4ICYmIHJ1blBhcmFtc1tpLnBhcmFtRml4LmtleV0gIT09IGkucGFyYW1GaXgudmFsdWUpO1xuICAgICAgICAgIGlmIChmaXg/LnBhcmFtRml4ICYmIGF3YWl0IGNvbmZpcm0oYFxcbkFwcGx5IGZpeCBhbmQgcmV0cnkg4oCUICR7Zml4LnN1Z2dlc3Rpb259YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBydW5QYXJhbXMgPSB7IC4uLnJ1blBhcmFtcywgW2ZpeC5wYXJhbUZpeC5rZXldOiBmaXgucGFyYW1GaXgudmFsdWUgfTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXRyeWFibGUgYnV0IG5vIHBhcmFtIGNoYW5nZSAoZS5nLiBBQ00gRE5TIHByb3BhZ2F0aW9uKSDigJQgb2ZmZXIgYSBwbGFpbiByZS1ydW4uXG4gICAgICAgICAgaWYgKCFmaXggJiYgaXNzdWVzLnNvbWUoKGkpID0+IGkucmV0cnlhYmxlKSAmJiBhd2FpdCBjb25maXJtKCdcXG5SZXRyeSB0aGUgZGVwbG95IChpdCBpcyBpZGVtcG90ZW50IGFuZCB3aWxsIHJlc3VtZSk/Jywgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdWNjZWVkZWQpIHsgcHJvY2Vzcy5leGl0Q29kZSA9IDE7IHJldHVybjsgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0RlcGxveSBjb21tYW5kIGNvbXBsZXRlZC4nKTtcblxuICAgICAgICAvLyA3ZC4gU0VTIHBvc3QtZGVwbG95IGd1aWRhbmNlIChhc3luYyBES0lNICsgc2FuZGJveCArIGJvdW5jZSB0b3BpYykuXG4gICAgICAgIC8vIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUIG9uIEFXUyBkZXBsb3lzLCBzbyBzdXJmYWNlIHRoZSBndWlkYW5jZVxuICAgICAgICAvLyBmb3IgZWMyL2ZhcmdhdGUgdW5sZXNzIHRoZSBvcGVyYXRvciBvcHRlZCBvdXQgd2l0aCAtLW5vLWVtYWlsLlxuICAgICAgICBjb25zdCBzZXNQcm92aXNpb25lZCA9ICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKSAmJiBydW5QYXJhbXMubm9FbWFpbCAhPT0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlc1Byb3Zpc2lvbmVkKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTRVMg4oCUIG5leHQgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc2VzUG9zdERlcGxveUd1aWRhbmNlKCkpIHByaW50SW5mbyhg4oCiICR7bGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdlLiBWZXJpZnkgaGVhbHRoIChDUkVBVEVfQ09NUExFVEUgIT0gc2VydmluZykuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1ZlcmlmeWluZyBoZWFsdGgnKTtcbiAgICAgICAgICBwcmludEluZm8oYFBvbGxpbmcgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICAgICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB3YWl0SGVhbHRoeSh1cmwsIHsgb25UaWNrOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIChoZWFsdGguaGVhbHRoeSA/IHByaW50U3VjY2VzcyA6IHByaW50V2FybmluZykoYCR7aGVhbHRoLnVybH0g4oCUICR7aGVhbHRoLmRldGFpbH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdmLiBQb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyICsgb3B0LWluIGxvYWRzLCBzbW9rZSB0ZXN0LCBldmVudHMsIGN1c3RvbSkuXG4gICAgICAgIC8vIHJlZ2lzdGVyIHJ1bnMgaW5pdC1wbGF0Zm9ybTsgZm9yIEVDMi9GYXJnYXRlIGl0IG11c3QgcnVuIGZyb20gaW5zaWRlIHRoZVxuICAgICAgICAvLyBWUEMsIHNvIHdlIHN1cmZhY2UgdGhlIGNvbW1hbmQgdGhlcmUgaW5zdGVhZCBvZiBleGVjdXRpbmcgaXQgbG9jYWxseS5cbiAgICAgICAgaWYgKHBvc3RTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBTa2lwcGVkIHBvc3Qtc3RlcCAke3MuaWR9OiAke3MucmVhc29ufWApO1xuICAgICAgICAgIGNvbnN0IGlzUmVtb3RlUmVnaXN0ZXIgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gaWQgPT09ICdyZWdpc3RlcicgJiYgKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZmFyZ2F0ZScpO1xuICAgICAgICAgIGNvbnN0IHJ1bm5hYmxlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gIWlzUmVtb3RlUmVnaXN0ZXIocy5pZCkpO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHtcbiAgICAgICAgICAgIGlmIChpc1JlbW90ZVJlZ2lzdGVyKHMuaWQpKSB7XG4gICAgICAgICAgICAgIHByaW50SW5mbygnXFxuTmV4dCAocnVuIGZyb20gaW5zaWRlIHRoZSBWUEMpOiByZWdpc3RlciBhZG1pbiArIGxvYWQgcGx1Z2lucyDigJQnKTtcbiAgICAgICAgICAgICAgcHJpbnRJbmZvKGAgICR7cy5jb21tYW5kfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocnVubmFibGUubGVuZ3RoID4gMCAmJiBhd2FpdCBjb25maXJtKGBcXG5SdW4gJHtydW5uYWJsZS5sZW5ndGh9IHBvc3QtaW5zdGFsbCBzdGVwKHMpIG5vdz9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBydW5uYWJsZSkge1xuICAgICAgICAgICAgICBwcmludFNlY3Rpb24oYFBvc3Qtc3RlcDogJHtzLmxhYmVsfWApO1xuICAgICAgICAgICAgICBwcmludEluZm8ocy5jb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gU3RlcHMgdGhhdCBsb2cgaW50byB0aGUgcGxhdGZvcm0gKHJlZ2lzdGVyICsgc3RvcmUtdG9rZW4pIG5lZWQgdGhlXG4gICAgICAgICAgICAgIC8vIGFkbWluIGNyZWRzIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiB0aGVpclxuICAgICAgICAgICAgICAvLyBvd24gc3RlcCBlbnYuIHNldHVwLWV2ZW50cyBkb2VzIE5PVCBsb2cgaW4g4oCUIGl0IHJlYWRzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FLFxuICAgICAgICAgICAgICAvLyBBV1MgY3JlZHMsIGFuZCB0aGUgcmVnaW9uIGZyb20gdGhlIEFXUyBlbnZpcm9ubWVudCDigJQgc28gaXQncyBleGNsdWRlZC5cbiAgICAgICAgICAgICAgY29uc3QgbmVlZHNDcmVkcyA9IHMuaWQgPT09ICdyZWdpc3RlcicgfHwgcy5pZCA9PT0gJ3N0b3JlLXRva2VuJztcbiAgICAgICAgICAgICAgY29uc3QgZW52ID0gbmVlZHNDcmVkcyA/IHsgLi4ucy5lbnYsIC4uLmFkbWluRW52IH0gOiBzLmVudjtcbiAgICAgICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQocy5jb21tYW5kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UsIGVudiB9KTtcbiAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBwcmludEVycm9yKGBcXG5Qb3N0LXN0ZXAgJyR7cy5pZH0nIGZhaWxlZCAoZXhpdCAke2NvZGV9KS4gVGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkOyBmaXggYW5kIHJlLXJ1biB0aGUgc3RlcCBtYW51YWxseS5gKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwcmludFN1Y2Nlc3MoYCR7cy5pZH0g4pyTYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChydW5uYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcmludEluZm8oJ1xcblNraXBwZWQgcG9zdC1pbnN0YWxsIHN0ZXBzLiBSdW4gdGhlIGNvbW1hbmRzIGFib3ZlIG1hbnVhbGx5IHdoZW4gcmVhZHkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3Byb3Zpc2lvbicsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
532
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJBQXFCLENB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QUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzt3QkFDMUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7NEJBQ2YsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxrQkFBa0IsSUFBSSxnRUFBZ0UsQ0FBQyxDQUFDOzRCQUN2SCxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs0QkFDckIsTUFBTTt3QkFDUixDQUFDO3dCQUNELFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMvQixTQUFTLENBQUMsMkVBQTJFLENBQUMsQ0FBQztnQkFDekYsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkaWFnbm9zZUZhaWx1cmUsIGlzQWlDb25maWd1cmVkLCBwYXJzZUdvYWwgfSBmcm9tICcuLi9hZ2VudC9haS5qcyc7XG5pbXBvcnQgeyBib290c3RyYXBDb21tYW5kLCByZXNvbHZlQm9vdHN0cmFwIH0gZnJvbSAnLi4vYWdlbnQvYm9vdHN0cmFwLmpzJztcbmltcG9ydCB7IGVudHJ5cG9pbnRFeGlzdHMsIGV4ZWN1dGlvbkJsb2NrZWQsIHJ1blNjcmlwdCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCwgd2FpdEhlYWx0aHkgfSBmcm9tICcuLi9hZ2VudC9oZWFsdGguanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBvc3RTdGVwcyB9IGZyb20gJy4uL2FnZW50L3Bvc3Qtc3RlcHMuanMnO1xuaW1wb3J0IHsgY2hlY2tQcmVyZXFzLCBnaXRBdmFpbGFibGUsIGdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQsIHByZXJlcXNTYXRpc2ZpZWQgfSBmcm9tICcuLi9hZ2VudC9wcmVyZXFzLmpzJztcbmltcG9ydCB7IFRPT0xTX0RJUiwgZmV0Y2hUb29sLCBpc0ZldGNoYWJsZSwgd2l0aFRvb2xzT25QYXRoIH0gZnJvbSAnLi4vYWdlbnQvdG9vbHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52RmlsZSwgZW52RmlsZU1pc3NpbmcgfSBmcm9tICcuLi9hZ2VudC9lbnYtZmlsZS5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIGlzVGFyZ2V0SWQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICBUQVJHRVRTLFxuICBUQVJHRVRfSURTLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBtYXRjaElzc3Vlcywgc2VzUG9zdERlcGxveUd1aWRhbmNlIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFJlYWQgb25lIGxpbmUgb2YgdHJpbW1lZCBpbnB1dCBmcm9tIHRoZSB0ZXJtaW5hbCwgb3duaW5nIHRoZSByZWFkbGluZVxuICogbGlmZWN5Y2xlLiBVc2VkIGRpcmVjdGx5IGZvciB0aGUgZGVzdHJ1Y3RpdmUgdGVhcmRvd24gZ2F0ZSAoYSB5L04gaXMgdG9vIGVhc3lcbiAqIHRvIGZhdC1maW5nZXIsIHNvIHdlIHJlcXVpcmUgdGhlIG9wZXJhdG9yIHRvIFRZUEUgdGhlIHRhcmdldCBpZCBiYWNrKSwgYW5kIGFzXG4gKiB0aGUgYmFzaXMgZm9yIGBjb25maXJtYC4gRGVsaWJlcmF0ZWx5IGhhcyBubyBhdXRvLWFjY2VwdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgcmwucXVlc3Rpb24ocXVlc3Rpb24pKS50cmltKCk7XG4gIH0gZmluYWxseSB7XG4gICAgcmwuY2xvc2UoKTtcbiAgfVxufVxuXG4vKiogSW50ZXJhY3RpdmUgeS9OIGNvbmZpcm1hdGlvbjsgYXV0by10cnVlIHdoZW4gYGF1dG9ZZXNgICh0aGUgYC0teWVzYCBmbGFnKS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmZpcm0ocXVlc3Rpb246IHN0cmluZywgYXV0b1llczogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoYXV0b1llcykgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFuc3dlciA9IChhd2FpdCBhc2soYCR7cXVlc3Rpb259IFt5L05dIGApKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gYW5zd2VyID09PSAneScgfHwgYW5zd2VyID09PSAneWVzJztcbn1cblxuLyoqIENvbW1hbmRlciBjb2xsZWN0b3I6IGFjY3VtdWxhdGUgcmVwZWF0ZWQgYC0tcG9zdC1zdGVwYCB2YWx1ZXMgaW4gb3JkZXIuICovXG5mdW5jdGlvbiBjb2xsZWN0U3RlcCh2YWx1ZTogc3RyaW5nLCBhY2M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLmFjYywgdmFsdWVdO1xufVxuXG4vKipcbiAqIFJlZGFjdCBzZWNyZXQgcGFyYW0gdmFsdWVzIChlLmcuIHRoZSBnaGNyIHRva2VuKSBmcm9tIGNhcHR1cmVkIGRlcGxveSBvdXRwdXRcbiAqIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBMTE0gZm9yIGRpYWdub3Npcy4gVGhlIGRlcGxveSBydW5zIHdpdGggc2VjcmV0c1xuICogdW5tYXNrZWQsIHNvIGFsdGhvdWdoIHRoZSBjdXJyZW50IHNjcmlwdHMgZG9uJ3QgZWNobyB0aGVtLCB0aGlzIGtlZXBzIGEgZnV0dXJlXG4gKiBzY3JpcHQncyBzdHJheSBlY2hvIChvciBhIHZlcmJvc2Ugc3ViLXRvb2wpIGZyb20gY3Jvc3NpbmcgdGhlIHRoaXJkLXBhcnR5LUxMTVxuICogYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIHJlZGFjdFNlY3JldHModGV4dDogc3RyaW5nLCBzcGVjOiBUYXJnZXRTcGVjLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgbGV0IG91dCA9IHRleHQ7XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgWy4uLnNwZWMucmVxdWlyZWQsIC4uLnNwZWMub3B0aW9uYWxdKSB7XG4gICAgaWYgKCFpbnB1dC5zZWNyZXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2lucHV0LmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID49IDQpIG91dCA9IG91dC5zcGxpdCh2YWx1ZSkuam9pbignKioqJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwcm92aXNpb25gIGNvbW1hbmQg4oCUIGFuIEFJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIFBpcGVsaW5lXG4gKiBCdWlsZGVyIFBMQVRGT1JNIChsb2NhbC9taW5pa3ViZS9FQzIvRmFyZ2F0ZSkuIFBoYXNlIDEgaXMgUkVBRC1PTkxZIChwcmVyZXFcbiAqIGNoZWNrcywgTkwtZ29hbCBwYXJzaW5nLCBjb21tYW5kIGFzc2VtYmx5LCBmYWlsdXJlIGRpYWdub3Npcyk7IGAtLWV4ZWN1dGVgXG4gKiBnYXRlcyBhIHJlYWwgZGVwbG95LiBXaXRoIGAtLXJlcG9gIGl0IGNhbiBib290c3RyYXAgYSBmcmVzaCBtYWNoaW5lIGJ5IHNwYXJzZWx5XG4gKiBjbG9uaW5nIG9ubHkgdGhlIGRlcGxveSBmb2xkZXJzIHRoZSBzZWxlY3RlZCB0YXJnZXQgKyBvcHRpb25zIG5lZWQsIHRoZW4gcnVuc1xuICogcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciBhZG1pbiwgb3B0LWluIGxvYWRzLCBzbW9rZSB0ZXN0LCBjdXN0b20gY29tbWFuZHMpLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwcm92aXNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgcGxhdGZvcm0gKGxvY2FsL21pbmlrdWJlL0VDMi9GYXJnYXRlKTogYWR2aXNlLCAtLWV4ZWN1dGUgdG8gZGVwbG95LCBvciAtLXRlYXJkb3duIHRvIHJlbW92ZScpXG4gICAgLm9wdGlvbignLXQsIC0tdGFyZ2V0IDx0YXJnZXQ+JywgYERlcGxveSB0YXJnZXQ6ICR7VEFSR0VUX0lEUy5qb2luKCcgfCAnKX1gKVxuICAgIC5vcHRpb24oJy1wLCAtLXByb21wdCA8dGV4dD4nLCAnTmF0dXJhbC1sYW5ndWFnZSBnb2FsIChwYXJzZWQgaW50byBwYXJhbXMgd2hlbiBhbiBBSSBrZXkgaXMgc2V0KScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWRvbWFpbiA8ZG9tYWluPicsICdGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1ob3N0ZWQtem9uZS1pZCA8aWQ+JywgJ1B1YmxpYyBSb3V0ZSA1MyBob3N0ZWQgem9uZSBJRCAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWRlcGxveS1tb2RlIDxtb2RlPicsICdwdWJsaWMgfCBwcml2YXRlIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0ta2V5LXBhaXIgPG5hbWU+JywgJ0VDMiBrZXkgcGFpciAoRUMyKScpXG4gICAgLm9wdGlvbignLS1pbnN0YW5jZS10eXBlIDx0eXBlPicsICdFQzIgaW5zdGFuY2UgdHlwZSAoRUMyKScpXG4gICAgLm9wdGlvbignLS1naGNyLXRva2VuIDx0b2tlbj4nLCAnR2l0SHViIFBBVCAocmVhZDpwYWNrYWdlcykg4oCUIG1hc2tlZCBpbiBvdXRwdXQnKVxuICAgIC5vcHRpb24oJy0tZW1haWwnLCAnRW5hYmxlIFNFUyB0cmFuc2FjdGlvbmFsIGVtYWlsIChvbiBieSBkZWZhdWx0IGZvciBBV1MpJylcbiAgICAub3B0aW9uKCctLW5vLWVtYWlsJywgJ1NraXAgU0VTICh0cmFuc2FjdGlvbmFsIGVtYWlsIGlzIHByb3Zpc2lvbmVkIGJ5IGRlZmF1bHQgb24gQVdTKScpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tIDxhZGRyPicsICdTRVMgRnJvbSBhZGRyZXNzJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20tbmFtZSA8bmFtZT4nLCAnU0VTIEZyb20gZGlzcGxheSBuYW1lJylcbiAgICAub3B0aW9uKCctLWFsZXJ0LWVtYWlsIDxhZGRyPicsICdTdWJzY3JpYmUgYW4gYWRkcmVzcyB0byB0aGUgYm91bmNlL2NvbXBsYWludCBTTlMgdG9waWMnKVxuICAgIC5vcHRpb24oJy0tc2tpcC1zZXMtaWRlbnRpdHknLCAnU2tpcCBTRVMgaWRlbnRpdHkgY3JlYXRpb24gKGRvbWFpbiBhbHJlYWR5IHZlcmlmaWVkKScpXG4gICAgLm9wdGlvbignLS1haS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIChhbnRocm9waWN8b3BlbmFpfGdvb2dsZXx4YWl8YmVkcm9jayknKVxuICAgIC5vcHRpb24oJy0tbW9kZWwgPG1vZGVsPicsICdBSSBtb2RlbCBpZCcpXG4gICAgLm9wdGlvbignLS1kaWFnbm9zZSA8ZmlsZT4nLCAnRGlhZ25vc2UgYSBDbG91ZEZvcm1hdGlvbi9kZXBsb3kgZmFpbHVyZSBmcm9tIGEgZmlsZSAobmVlZHMgYW4gQUkga2V5KScpXG4gICAgLm9wdGlvbignLXksIC0teWVzJywgJ0F1dG8tYWNjZXB0IHRoZSBleGVjdXRpb24gYXBwcm92YWwgcHJvbXB0IChmb3IgQ0kgLyBub24taW50ZXJhY3RpdmUpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1leGVjdXRlJywgJ1J1biB0aGUgZGVwbG95IChnYXRlZDogbmVlZHMgYXBwcm92YWwsIHJlZnVzZXMgb24gZmFpbGVkIHByZXJlcXMgLyBtaXNzaW5nIGlucHV0cyknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdTdGFjayBuYW1lIChFQzIpIC8gc3RhY2sgcHJlZml4IChGYXJnYXRlKSB0byB0ZWFyIGRvd24g4oCUIGRlZmF1bHRzIHRvIHRoZSBkZXBsb3kgZGVmYXVsdCcpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLW5vLWluaXQnLCAnU2tpcCB0aGUgcG9zdC1kZXBsb3kgcmVnaXN0ZXIvaW5pdC1wbGF0Zm9ybSBzdGVwJylcbiAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkg4oCUIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQuXG4gICAgLm9wdGlvbignLS1yZXBvIFt1cmxdJywgJ0Jvb3RzdHJhcDogZ2l0LWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IChzcGFyc2Ug4oCUIG9ubHkgdGhlIG5lZWRlZCBkZXBsb3kgZm9sZGVycyksIHRoZW4gcnVuIGZyb20gaXQgKG5vIHZhbHVlID0gdGhlIHVwc3RyZWFtIGRlZmF1bHQpJylcbiAgICAub3B0aW9uKCctLXJlZiA8cmVmPicsICdHaXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQgd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBtYWluKScpXG4gICAgLm9wdGlvbignLS13b3JrZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20gd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBwaXBlbGluZS1idWlsZGVyKScpXG4gICAgLy8gUG9zdC1pbnN0YWxsIGxvYWRzIOKAlCBlYWNoIG9wdC1pbiBzdGVwIGFsc28gYWRkcyBpdHMgZGVwbG95IGZvbGRlciB0byB0aGUgc3BhcnNlIGNsb25lLlxuICAgIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ1Bvc3QtaW5zdGFsbDogYnVpbGQgKyBsb2FkIHBsdWdpbnMgKGFkZHMgZGVwbG95L3BsdWdpbnMsIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWNvbXBsaWFuY2UnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBjb21wbGlhbmNlIHJ1bGVzL3BvbGljaWVzIChhZGRzIGRlcGxveS9jb21wbGlhbmNlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zYW1wbGVzJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgcGlwZWxpbmVzIChhZGRzIGRlcGxveS9zYW1wbGVzKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1hbGwnLCAnUG9zdC1pbnN0YWxsOiBwbHVnaW5zICsgY29tcGxpYW5jZSArIHNhbXBsZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWJ1aWxkLWJvb3RzdHJhcCcsICdCdWlsZCArIHB1Ymxpc2ggdGhlIENvZGVCdWlsZCBib290c3RyYXAgaW1hZ2UgZHVyaW5nIHJlZ2lzdGVyIChhZGRzIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNtb2tlLXRlc3QnLCAnUG9zdC1pbnN0YWxsOiByZWFkLW9ubHkgQVBJIHJlYWNoYWJpbGl0eSBjaGVjaycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1ldmVudHMnLCAnUG9zdC1pbnN0YWxsIChBV1MpOiBldmVudCBpbmdlc3Rpb24gYnVuZGxlIOKAlCBzdG9yZS10b2tlbiAoSldUIOKGkiBTZWNyZXRzIE1hbmFnZXIpIHRoZW4gc2V0dXAtZXZlbnRzIChFdmVudEJyaWRnZS9MYW1iZGEpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1wb3N0LXN0ZXAgPGNtZD4nLCAnUnVuIGFuIGV4dHJhIGNvbW1hbmQgYWZ0ZXIgdGhlIGxvYWRzIChyZXBlYXRhYmxlLCBpbiBvcmRlciknLCBjb2xsZWN0U3RlcCwgW10pXG4gICAgLm9wdGlvbignLS1hZG1pbi1lbWFpbCA8YWRkcj4nLCAnQWRtaW4gZW1haWwgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9JREVOVElGSUVSKScpXG4gICAgLm9wdGlvbignLS1hZG1pbi1wYXNzd29yZCA8cHc+JywgJ0FkbWluIHBhc3N3b3JkIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fUEFTU1dPUkQpJylcbiAgICAub3B0aW9uKCctLWpzb24nLCAnT3V0cHV0IHRoZSBwbGFuIGFzIEpTT04gKG5ldmVyIGV4ZWN1dGVzKScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQcm92aXNpb24gKGFkdmlzb3IpJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIDEuIEFzc2VtYmxlIHBhcmFtcyBmcm9tIGV4cGxpY2l0IGZsYWdzIChmbGFncyBhbHdheXMgd2luIG92ZXIgTkwgcGFyc2UpLlxuICAgICAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgZG9tYWluOiBvcHRpb25zLmRvbWFpbixcbiAgICAgICAgICBob3N0ZWRab25lSWQ6IG9wdGlvbnMuaG9zdGVkWm9uZUlkLFxuICAgICAgICAgIGRlcGxveU1vZGU6IG9wdGlvbnMuZGVwbG95TW9kZSxcbiAgICAgICAgICBrZXlQYWlyOiBvcHRpb25zLmtleVBhaXIsXG4gICAgICAgICAgaW5zdGFuY2VUeXBlOiBvcHRpb25zLmluc3RhbmNlVHlwZSxcbiAgICAgICAgICBnaGNyVG9rZW46IG9wdGlvbnMuZ2hjclRva2VuLFxuICAgICAgICAgIC8vIENvbW1hbmRlciB0cmktc3RhdGVzIGBlbWFpbGA6IHVuZGVmaW5lZCAobmVpdGhlciksIHRydWUgKC0tZW1haWwpLFxuICAgICAgICAgIC8vIGZhbHNlICgtLW5vLWVtYWlsKS4gU0VTIGlzIG9uIGJ5IGRlZmF1bHQsIHNvIG9ubHkgLS1uby1lbWFpbCBpc1xuICAgICAgICAgIC8vIGxvYWQtYmVhcmluZyAoaXQgZW1pdHMgYC0tbm8tZW1haWxgIGludG8gdGhlIGRlcGxveSBjb21tYW5kKS5cbiAgICAgICAgICBlbWFpbDogb3B0aW9ucy5lbWFpbCA9PT0gdHJ1ZSxcbiAgICAgICAgICBub0VtYWlsOiBvcHRpb25zLmVtYWlsID09PSBmYWxzZSxcbiAgICAgICAgICBlbWFpbEZyb206IG9wdGlvbnMuZW1haWxGcm9tLFxuICAgICAgICAgIGVtYWlsRnJvbU5hbWU6IG9wdGlvbnMuZW1haWxGcm9tTmFtZSxcbiAgICAgICAgICBhbGVydEVtYWlsOiBvcHRpb25zLmFsZXJ0RW1haWwsXG4gICAgICAgICAgbm9DcmVhdGVTZXNJZGVudGl0eTogb3B0aW9ucy5za2lwU2VzSWRlbnRpdHksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFpT3B0cyA9IHsgcHJvdmlkZXI6IG9wdGlvbnMuYWlQcm92aWRlciwgbW9kZWw6IG9wdGlvbnMubW9kZWwgfTtcblxuICAgICAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkgKyBwb3N0LWluc3RhbGwgc2VsZWN0aW9ucy5cbiAgICAgICAgY29uc3Qgd2FudEJvb3RzdHJhcCA9IG9wdGlvbnMucmVwbyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVwbyAhPT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpdGhBbGwgPSBvcHRpb25zLndpdGhBbGwgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGVuYWJsZWRMb2FkSWRzID0gTE9BRF9TVEVQUy5maWx0ZXIoKHMpID0+IHdpdGhBbGwgfHwgb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKS5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICBjb25zdCBwb3N0U3RlcEZsYWdzID0ge1xuICAgICAgICAgIGluaXQ6IG9wdGlvbnMuaW5pdCAhPT0gZmFsc2UsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0EgLS1wcm9tcHQgd2FzIGdpdmVuIGJ1dCBubyBBSSBrZXkgaXMgc2V0IOKAlCBpZ25vcmluZyBpdCBhbmQgdXNpbmcgZmxhZ3Mgb25seS4gU2V0IEFOVEhST1BJQ19BUElfS0VZIChvciAtLWFpLXByb3ZpZGVyICsgaXRzIGtleSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBOZWVkIGEgdGFyZ2V0IHRvIGFzc2VtYmxlIGEgcGxhbi5cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBObyB0YXJnZXQgc3BlY2lmaWVkLiBQYXNzIC0tdGFyZ2V0IDwke1RBUkdFVF9JRFMuam9pbignfCcpfT4gb3IgZGVzY3JpYmUgdGhlIGdvYWwgd2l0aCAtLXByb21wdC5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjID0gVEFSR0VUU1t0YXJnZXRdO1xuICAgICAgICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgICAgICAvLyA0Yi4gVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLiBHYXRlZCBoYXJkZXJcbiAgICAgICAgLy8gdGhhbiBkZXBsb3k6IEFXUyB0YXJnZXRzIGFyZSBpcnJldmVyc2libGUsIHNvIHdlIHJlcXVpcmUgdGhlIG9wZXJhdG9yIHRvXG4gICAgICAgIC8vIFRZUEUgdGhlIHRhcmdldCBpZCAoLS1mb3JjZSBieXBhc3NlcyBmb3IgQ0k7IC0teWVzIGFsb25lIGRvZXMgTk9UKS5cbiAgICAgICAgaWYgKG9wdGlvbnMudGVhcmRvd24pIHtcbiAgICAgICAgICBjb25zdCB7IGNvbW1hbmQ6IGRvd25Db21tYW5kLCBkZXN0cnVjdGl2ZSB9ID0gdGVhcmRvd25Db21tYW5kKHRhcmdldCwge1xuICAgICAgICAgICAgc3RhY2tOYW1lOiBvcHRpb25zLnN0YWNrTmFtZSxcbiAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBmb3J3YXJkIC0teWVzIHNvIHRoZSBuYXRpdmVcbiAgICAgICAgICAgIC8vIHNjcmlwdCAoRmFyZ2F0ZSkgZG9lc24ndCBhbHNvIGJsb2NrIG9uIHN0ZGluIHdlJ3JlIGluaGVyaXRpbmcuXG4gICAgICAgICAgICBhc3N1bWVZZXM6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmludFNlY3Rpb24oYFRlYXJkb3duIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Rlc3Ryb3lzJzogc3BlYy5kZXN0cm95cywgJ1N0b3BzIGNvc3QnOiBzcGVjLmNvc3QgfSk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICAgICAgICAgIHByaW50SW5mbyhkb3duQ29tbWFuZCk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZXhlY3V0ZSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdcXG5BZHZpc29yIG1vZGUg4oCUIG5vdGhpbmcgd2FzIGV4ZWN1dGVkLiBSZS1ydW4gd2l0aCAtLWV4ZWN1dGUgdG8gdGVhciBkb3duLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkZXN0cnVjdGl2ZSAmJiAhb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBhc2soYFxcblRoaXMgaXMgSVJSRVZFUlNJQkxFLiBUeXBlIFwiJHt0YXJnZXR9XCIgdG8gY29uZmlybSB0ZWFyZG93bjogYCk7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgICAgICAgICBwcmludFdhcm5pbmcoJ1RoYXQgZGlkblxcJ3QgbWF0Y2gsIHNvIG5vdGhpbmcgd2FzIGRlc3Ryb3llZCDigJQgeW91IGhhdmUgdG8gdHlwZSB0aGUgZXhhY3QgdGFyZ2V0IGlkIHRvIGNvbmZpcm0uJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFkZXN0cnVjdGl2ZSAmJiAhb3B0aW9ucy5mb3JjZSAmJiAhKGF3YWl0IGNvbmZpcm0oJ1xcblByb2NlZWQgd2l0aCB0ZWFyZG93biAoc3RvcHMgdGhlIHN0YWNrOyBvbi1kaXNrIGRhdGEgcGVyc2lzdHMpPycsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1RlYXJpbmcgZG93bicpO1xuICAgICAgICAgIGNvbnN0IHsgY29kZTogZG93bkNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChkb3duQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgICAgIGlmIChkb3duQ29kZSAhPT0gMCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgXFxuVGVhcmRvd24gZmFpbGVkIChleGl0ICR7ZG93bkNvZGV9KS4gSW5zcGVjdCB0aGUgc3RhY2svY29udGFpbmVycyBhbmQgcmV0cnkuYCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdUZWFyZG93biBjb21wbGV0ZS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICBjb25zdCB7IGNvbW1hbmQsIG1pc3NpbmcgfSA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCB1cmwgPSBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0LCBwYXJhbXMpO1xuXG4gICAgICAgIC8vIFNwYXJzZSBib290c3RyYXAgY2xvbmUgY29tbWFuZCAoY29tbW9uIGJhc2UgKyB0YXJnZXQgKyBzZWxlY3RlZCBsb2FkcykuXG4gICAgICAgIGNvbnN0IHNwYXJzZVBhdGhzID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBlbmFibGVkTG9hZElkcyk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9IHJlc29sdmVCb290c3RyYXAoXG4gICAgICAgICAgeyByZXBvOiB0eXBlb2Ygb3B0aW9ucy5yZXBvID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbyA6IHVuZGVmaW5lZCwgcmVmOiBvcHRpb25zLnJlZiwgd29ya2Rpcjogb3B0aW9ucy53b3JrZGlyLCBmdWxsOiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpIH0sXG4gICAgICAgICAgc3BhcnNlUGF0aHMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcENtZCA9IHdhbnRCb290c3RyYXAgPyBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCkgOiBudWxsO1xuXG4gICAgICAgIC8vIFJlc29sdmUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS5cbiAgICAgICAgY29uc3QgeyBzdGVwczogcG9zdFN0ZXBzLCBza2lwcGVkOiBza2lwcGVkU3RlcHMgfSA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVnaW9uOiB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzLFxuICAgICAgICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwcmVyZXFzLFxuICAgICAgICAgICAgcHJlcmVxc1NhdGlzZmllZDogcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSxcbiAgICAgICAgICAgIG1pc3NpbmdJbnB1dHM6IG1pc3NpbmcubWFwKChtKSA9PiAoeyBmbGFnOiBtLmZsYWcsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uIH0pKSxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwQ21kLFxuICAgICAgICAgICAgc3BhcnNlUGF0aHM6IHdhbnRCb290c3RyYXAgPyBzcGFyc2VQYXRocyA6IG51bGwsXG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgcG9zdFN0ZXBzOiBwb3N0U3RlcHMubWFwKChzKSA9PiAoeyBpZDogcy5pZCwgbGFiZWw6IHMubGFiZWwsIGNvbW1hbmQ6IHMuY29tbWFuZCB9KSksXG4gICAgICAgICAgICBza2lwcGVkUG9zdFN0ZXBzOiBza2lwcGVkU3RlcHMsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIFByaW50IHRoZSBwbGFuIChzaGFyZWQgYnkgYWR2aXNvciArIGV4ZWN1dGUpLlxuICAgICAgICBwcmludFNlY3Rpb24oYFByb3Zpc2lvbiBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnQmVzdCBmb3InOiBzcGVjLmJlc3RGb3IsICdDb3N0Jzogc3BlYy5jb3N0IH0pO1xuXG4gICAgICAgIHByaW50U2VjdGlvbignUHJlcmVxdWlzaXRlcycpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcHJlcmVxcykgcHJpbnRJbmZvKGAke2Mub2sgPyAn4pyTJyA6ICfinJcnfSAke2MubmFtZX0g4oCUICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgIGlmICghcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSkgcHJpbnRXYXJuaW5nKCdSZXNvbHZlIHRoZSBmYWlsaW5nIHByZXJlcXVpc2l0ZXMgYWJvdmUgYmVmb3JlIGRlcGxveWluZy4nKTtcblxuICAgICAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIGlucHV0cycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtaXNzaW5nKSBwcmludEluZm8oYCAgLS0ke20uZmxhZ30gICgke20uZGVzY3JpcHRpb259KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwIChzcGFyc2UgZ2l0IGNsb25lLCBydW5zIGZpcnN0KScpO1xuICAgICAgICAgIHByaW50SW5mbyhgQ2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IOKGkiAke2Jvb3RzdHJhcC53b3JrZGlyfTsgZm9sZGVyczogJHtzcGFyc2VQYXRocy5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHByaW50SW5mbyhib290c3RyYXBDbWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICAgICAgICBwcmludEluZm8oY29tbWFuZCk7XG5cbiAgICAgICAgaWYgKHBvc3RTdGVwcy5sZW5ndGggPiAwIHx8IHNraXBwZWRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdQb3N0LWluc3RhbGwgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcG9zdFN0ZXBzKSBwcmludEluZm8oYOKAoiAke3MubGFiZWx9XFxuICAgICR7cy5jb21tYW5kfWApO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgc2tpcHBlZCAke3MuaWR9OiAke3MucmVhc29ufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gQWR2aXNvciBtb2RlIChkZWZhdWx0KSDigJQgc3RvcCBoZXJlLCBub3RoaW5nIGV4ZWN1dGVkLlxuICAgICAgICBpZiAoIW9wdGlvbnMuZXhlY3V0ZSkge1xuICAgICAgICAgIHByaW50V2FybmluZygnXFxuQWR2aXNvciBtb2RlIOKAlCBub3RoaW5nIHdhcyBleGVjdXRlZC4gUmUtcnVuIHdpdGggLS1leGVjdXRlIHRvIGRlcGxveSAoZ2F0ZWQgYnkgYXBwcm92YWwpLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDcuIEFueSBtaXNzaW5nIHJlcXVpcmVkIHByZXJlcSB0aGF0J3MgYSBzaW5nbGUgc3RhdGljIGJpbmFyeSAoZS5nLiB5cSlcbiAgICAgICAgLy8gY2FuIGJlIGZldGNoZWQgaW50byB0aGUgdG9vbHMgY2FjaGUgaW5zdGVhZCBvZiBhIHN5c3RlbSBpbnN0YWxsIOKAlCBub1xuICAgICAgICAvLyBicmV3L2FwdC4gT2ZmZXIgaXQsIHRoZW4gcmUtY2hlY2sgKHRoZSBjYWNoZSBkaXIgaXMgYWxyZWFkeSBvbiBQQVRIKS5cbiAgICAgICAgY29uc3QgZmV0Y2hhYmxlID0gcHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgaXNGZXRjaGFibGUoYy5uYW1lKSk7XG4gICAgICAgIGlmIChmZXRjaGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gZmV0Y2hhYmxlLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke25hbWVzfSBub3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgb2ZmaWNpYWwgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfSAobm8gc3lzdGVtIGluc3RhbGwpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGZldGNoYWJsZSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBtYW51YWxseSBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Yi4gR2F0ZWQgZXhlY3V0aW9uLiBDaGVjayBwcmVyZXFzIC8gcmVxdWlyZWQgaW5wdXRzIGZpcnN0IOKAlCB0aGlzIGFsc29cbiAgICAgICAgLy8gY2F0Y2hlcyBhIG1pc3NpbmcgYGdpdGAgd2hlbiBib290c3RyYXBwaW5nLlxuICAgICAgICBjb25zdCBibG9ja2VkID0gZXhlY3V0aW9uQmxvY2tlZChwcmVyZXFzLCBtaXNzaW5nKTtcbiAgICAgICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBDYW4ndCBzdGFydCBqdXN0IHlldCDigJQgJHtibG9ja2VkfS4gUmVzb2x2ZSB0aGF0IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EuIFNwYXJzZS1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbywgcmVwb2ludCBjd2QsIGFuZCB2ZXJpZnkgdGhlIHRyZWUuXG4gICAgICAgIC8vIFNoYXJlZCBieSBgLS1yZXBvYCAoYmVsb3cpIGFuZCB0aGUgaW50ZXJhY3RpdmUgb2ZmZXIgaW4gN2IuIFJldHVybnNcbiAgICAgICAgLy8gZmFsc2UgKGFuZCBzZXRzIGV4aXRDb2RlKSBvbiBmYWlsdXJlIOKAlCB3aXRoIGEgZnJpZW5kbHkgbWVzc2FnZS5cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwQ2xvbmUgPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgICAgY29uc3QgY21kID0gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApO1xuICAgICAgICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGNtZCk7XG4gICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoY21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYFxcblRoZSBjbG9uZSBkaWRuJ3QgZmluaXNoIChleGl0ICR7Y29kZX0pLiBEb3VibGUtY2hlY2sgdGhlIHJlcG8gVVJMIC8gcmVmIChvciB5b3VyIG5ldHdvcmspIGFuZCBnaXZlIGl0IGFub3RoZXIgZ28uYCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3dkID0gcGF0aC5yZXNvbHZlKGN3ZCwgYm9vdHN0cmFwLndvcmtkaXIpO1xuICAgICAgICAgIHByaW50U3VjY2VzcyhgUmVwbyBpcyByZWFkeSDigJQgY29udGludWluZyBmcm9tICR7Y3dkfWApO1xuICAgICAgICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICAgICAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYFxcblRoZSBzcGFyc2UgY2xvbmUgaXMgbWlzc2luZyAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhhdCByZWYgbWF5IG5vdCBoYXZlIHRob3NlIGZvbGRlcnMuIFRyeSBhIGRpZmZlcmVudCAtLXJlZi5gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBgLS1yZXBvYDogY2xvbmUgdXAgZnJvbnQgKG11c3QgcHJlY2VkZSB0aGUgZW50cnlwb2ludCBjaGVjaykuXG4gICAgICAgIGlmIChib290c3RyYXBDbWQpIHtcbiAgICAgICAgICBwcmludEluZm8oYFxcbkJvb3RzdHJhcCDihpIgY2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IGludG8gJHtib290c3RyYXAud29ya2Rpcn0gKHNwYXJzZSkuYCk7XG4gICAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybSgnR28gYWhlYWQgd2l0aCB0aGUgY2xvbmU/Jywgb3B0aW9ucy55ZXMpKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLiBSZS1ydW4gd2hlbmV2ZXIgeW91XFwncmUgcmVhZHkuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Yi4gVGhlIGRlcGxveSBlbnRyeXBvaW50IG11c3QgZXhpc3QgcmVsYXRpdmUgdG8gY3dkLiBJZiBpdCBkb2Vzbid0IGFuZFxuICAgICAgICAvLyB3ZSBoYXZlbid0IGJvb3RzdHJhcHBlZCwgZ3JhY2VmdWxseSBPRkZFUiB0byBjbG9uZSAoaW50ZXJhY3RpdmUgb25seSksXG4gICAgICAgIC8vIHNvIGEgZnJlc2ggbWFjaGluZSBjYW4gcHJvY2VlZCB3aXRob3V0IHJlLXJ1bm5pbmcgd2l0aCAtLXJlcG8uXG4gICAgICAgIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmUgPSBCb29sZWFuKHByb2Nlc3Muc3RkaW4uaXNUVFkpICYmICFvcHRpb25zLnllcztcbiAgICAgICAgICBpZiAoIWJvb3RzdHJhcENtZCAmJiBpbnRlcmFjdGl2ZSAmJiBnaXRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcHJpbnRJbmZvKGBcXG5Mb29rcyBsaWtlIHlvdSdyZSBub3QgaW5zaWRlIGEgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCwgc28gdGhlICR7c3BlYy5sYWJlbH0gZGVwbG95IHNjcmlwdHMgYXJlbid0IGhlcmUgeWV0LmApO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFdhbnQgbWUgdG8gc3BhcnNlLWNsb25lIHRoZW0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSBhbmQga2VlcCBnb2luZz9gLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhgXFxuSSBjb3VsZG4ndCBmaW5kICR7c3BlYy5kaXJ9LyR7c3BlYy5lbnRyeXBvaW50fSBmcm9tICR7Y3dkfS5gKTtcbiAgICAgICAgICAgIHByaW50SW5mbygnVHdvIGVhc3kgd2F5cyBmb3J3YXJkOicpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCcgIOKAoiBjZCBpbnRvIHlvdXIgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCBhbmQgcmUtcnVuLCBvcicpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKGAgIOKAoiBhZGQgLS1yZXBvIGFuZCBJJ2xsIGJvb3RzdHJhcCBhIGZyZXNoIHNwYXJzZSBjbG9uZSBmb3IgeW91JHtnaXRBdmFpbGFibGUoKSA/ICcuJyA6ICcgKG9uY2UgZ2l0IGlzIGluc3RhbGxlZCkuJ31gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgdGFyZ2V0J3MgLmVudiBtdXN0IGV4aXN0IChsb2NhbC9taW5pa3ViZSkg4oCUIHNldHVwLnNoIGFib3J0cyB3aXRob3V0XG4gICAgICAgIC8vIGl0LiBDcmVhdGUgZnJvbSAuZW52LmV4YW1wbGUgd2l0aCBnZW5lcmF0ZWQgc2VjcmV0cyBzbyB0aGUgZGVwbG95IGlzXG4gICAgICAgIC8vIG5vbi1pbnRlcmFjdGl2ZS4gKGVjMi9mYXJnYXRlIHVzZSBBV1MgU2VjcmV0cyBNYW5hZ2VyLCBub3QgYSAuZW52LilcbiAgICAgICAgaWYgKGVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRoaXMgZGVwbG95PycsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2MuIFJ1biB0aGUgZGVwbG95IG91dC1vZi1sb29wIChyZWFsIGNvbW1hbmQsIHNlY3JldHMgdW5tYXNrZWQsIHN0cmVhbWVkICtcbiAgICAgICAgLy8gY2FwdHVyZWQpLCB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3Ag4oCUIHRoZSBkZXBsb3kgc2NyaXB0cyBhcmVcbiAgICAgICAgLy8gaWRlbXBvdGVudCwgc28gYSBmaXhlZCByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLlxuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1heCgwLCBwYXJzZUludChvcHRpb25zLnJldHJpZXMsIDEwKSB8fCAwKTtcbiAgICAgICAgbGV0IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBwYXJhbXM7XG4gICAgICAgIGxldCBzdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgICAgIGNvbnN0IHJlYWxDb21tYW5kID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHJ1blBhcmFtcywgeyBtYXNrOiBmYWxzZSB9KS5jb21tYW5kO1xuICAgICAgICAgIHByaW50U2VjdGlvbihhdHRlbXB0ID09PSAxID8gJ0RlcGxveWluZycgOiBgRGVwbG95aW5nIOKAlCByZXRyeSAke2F0dGVtcHQgLSAxfWApO1xuICAgICAgICAgIGlmIChhdHRlbXB0ID09PSAxKSB7XG4gICAgICAgICAgICBwcmludEluZm8oYERlcGxveWluZyAke3NwZWMubGFiZWx9IOKGkiAke3VybH1gKTtcbiAgICAgICAgICAgIHByaW50SW5mbyhzcGVjLmRlcGxveXMpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdTdHJlYW1pbmcgdGhlIGRlcGxveSBiZWxvdyDigJQgZmlyc3QgcnVuIGlzIHRoZSBzbG93IG9uZSAoaW1hZ2UgcHVsbHMgKyBjZXJ0IGdlbmVyYXRpb24pLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChyZWFsQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDApIHsgc3VjY2VlZGVkID0gdHJ1ZTsgYnJlYWs7IH1cblxuICAgICAgICAgIHByaW50RXJyb3IoYFxcbkRlcGxveSBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuYCk7XG4gICAgICAgICAgY29uc3QgaXNzdWVzID0gbWF0Y2hJc3N1ZXModGFpbCk7XG4gICAgICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0xpa2VseSBjYXVzZScpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlzc3VlcykgcHJpbnRJbmZvKGDigKIgJHtpLmNhdXNlfVxcbiAg4oaSICR7aS5zdWdnZXN0aW9ufWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgZGlhZ25vc2lzID0gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKHJlZGFjdFNlY3JldHModGFpbCwgc3BlYywgcnVuUGFyYW1zKSwgYWlPcHRzKTtcbiAgICAgICAgICAgIGlmIChkaWFnbm9zaXMpIHsgcHJpbnRTZWN0aW9uKCdEaWFnbm9zaXMnKTsgcHJpbnRJbmZvKGRpYWdub3Npcyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIGJyZWFrO1xuXG4gICAgICAgICAgLy8gQXV0by1maXg6IGEgcmV0cnlhYmxlIGlzc3VlIHdpdGggYSBwYXJhbSB3ZSBoYXZlbid0IGFscmVhZHkgYXBwbGllZC5cbiAgICAgICAgICBjb25zdCBmaXggPSBpc3N1ZXMuZmluZCgoaSkgPT4gaS5yZXRyeWFibGUgJiYgaS5wYXJhbUZpeCAmJiBydW5QYXJhbXNbaS5wYXJhbUZpeC5rZXldICE9PSBpLnBhcmFtRml4LnZhbHVlKTtcbiAgICAgICAgICBpZiAoZml4Py5wYXJhbUZpeCAmJiBhd2FpdCBjb25maXJtKGBcXG5BcHBseSBmaXggYW5kIHJldHJ5IOKAlCAke2ZpeC5zdWdnZXN0aW9ufWAsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgcnVuUGFyYW1zID0geyAuLi5ydW5QYXJhbXMsIFtmaXgucGFyYW1GaXgua2V5XTogZml4LnBhcmFtRml4LnZhbHVlIH07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmV0cnlhYmxlIGJ1dCBubyBwYXJhbSBjaGFuZ2UgKGUuZy4gQUNNIEROUyBwcm9wYWdhdGlvbikg4oCUIG9mZmVyIGEgcGxhaW4gcmUtcnVuLlxuICAgICAgICAgIGlmICghZml4ICYmIGlzc3Vlcy5zb21lKChpKSA9PiBpLnJldHJ5YWJsZSkgJiYgYXdhaXQgY29uZmlybSgnXFxuUmV0cnkgdGhlIGRlcGxveSAoaXQgaXMgaWRlbXBvdGVudCBhbmQgd2lsbCByZXN1bWUpPycsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VjY2VlZGVkKSB7IHByb2Nlc3MuZXhpdENvZGUgPSAxOyByZXR1cm47IH1cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdEZXBsb3kgY29tbWFuZCBjb21wbGV0ZWQuJyk7XG5cbiAgICAgICAgLy8gN2QuIFNFUyBwb3N0LWRlcGxveSBndWlkYW5jZSAoYXN5bmMgREtJTSArIHNhbmRib3ggKyBib3VuY2UgdG9waWMpLlxuICAgICAgICAvLyBTRVMgaXMgcHJvdmlzaW9uZWQgQlkgREVGQVVMVCBvbiBBV1MgZGVwbG95cywgc28gc3VyZmFjZSB0aGUgZ3VpZGFuY2VcbiAgICAgICAgLy8gZm9yIGVjMi9mYXJnYXRlIHVubGVzcyB0aGUgb3BlcmF0b3Igb3B0ZWQgb3V0IHdpdGggLS1uby1lbWFpbC5cbiAgICAgICAgY29uc3Qgc2VzUHJvdmlzaW9uZWQgPSAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdmYXJnYXRlJykgJiYgcnVuUGFyYW1zLm5vRW1haWwgIT09IHRydWU7XG4gICAgICAgIGlmIChzZXNQcm92aXNpb25lZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignU0VTIOKAlCBuZXh0IHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSgpKSBwcmludEluZm8oYOKAoiAke2xpbmV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3ZS4gVmVyaWZ5IGhlYWx0aCAoQ1JFQVRFX0NPTVBMRVRFICE9IHNlcnZpbmcpLlxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdWZXJpZnlpbmcgaGVhbHRoJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBQb2xsaW5nICR7dXJsfS9oZWFsdGgg4oCmYCk7XG4gICAgICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgd2FpdEhlYWx0aHkodXJsLCB7IG9uVGljazogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgICAgICAgICAoaGVhbHRoLmhlYWx0aHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyByZWdpc3RlciBydW5zIGluaXQtcGxhdGZvcm07IGZvciBFQzIvRmFyZ2F0ZSBpdCBtdXN0IHJ1biBmcm9tIGluc2lkZSB0aGVcbiAgICAgICAgLy8gVlBDLCBzbyB3ZSBzdXJmYWNlIHRoZSBjb21tYW5kIHRoZXJlIGluc3RlYWQgb2YgZXhlY3V0aW5nIGl0IGxvY2FsbHkuXG4gICAgICAgIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgICBjb25zdCBpc1JlbW90ZVJlZ2lzdGVyID0gKGlkOiBzdHJpbmcpOiBib29sZWFuID0+IGlkID09PSAncmVnaXN0ZXInICYmICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKTtcbiAgICAgICAgICBjb25zdCBydW5uYWJsZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+ICFpc1JlbW90ZVJlZ2lzdGVyKHMuaWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcG9zdFN0ZXBzKSB7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdGVSZWdpc3RlcihzLmlkKSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oJ1xcbk5leHQgKHJ1biBmcm9tIGluc2lkZSB0aGUgVlBDKTogcmVnaXN0ZXIgYWRtaW4gKyBsb2FkIHBsdWdpbnMg4oCUJyk7XG4gICAgICAgICAgICAgIHByaW50SW5mbyhgICAke3MuY29tbWFuZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJ1bm5hYmxlLmxlbmd0aCA+IDAgJiYgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcnVubmFibGUpIHtcbiAgICAgICAgICAgICAgcHJpbnRTZWN0aW9uKGBQb3N0LXN0ZXA6ICR7cy5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgcHJpbnRJbmZvKHMuY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIFN0ZXBzIHRoYXQgbG9nIGludG8gdGhlIHBsYXRmb3JtIChyZWdpc3RlciArIHN0b3JlLXRva2VuKSBuZWVkIHRoZVxuICAgICAgICAgICAgICAvLyBhZG1pbiBjcmVkcyAoUExBVEZPUk1fSURFTlRJRklFUiAvIFBMQVRGT1JNX1BBU1NXT1JEKSBvbiB0b3Agb2YgdGhlaXJcbiAgICAgICAgICAgICAgLy8gb3duIHN0ZXAgZW52LiBzZXR1cC1ldmVudHMgZG9lcyBOT1QgbG9nIGluIOKAlCBpdCByZWFkcyBQTEFURk9STV9TRUNSRVRfTkFNRSxcbiAgICAgICAgICAgICAgLy8gQVdTIGNyZWRzLCBhbmQgdGhlIHJlZ2lvbiBmcm9tIHRoZSBBV1MgZW52aXJvbm1lbnQg4oCUIHNvIGl0J3MgZXhjbHVkZWQuXG4gICAgICAgICAgICAgIGNvbnN0IG5lZWRzQ3JlZHMgPSBzLmlkID09PSAncmVnaXN0ZXInIHx8IHMuaWQgPT09ICdzdG9yZS10b2tlbic7XG4gICAgICAgICAgICAgIGNvbnN0IGVudiA9IG5lZWRzQ3JlZHMgPyB7IC4uLnMuZW52LCAuLi5hZG1pbkVudiB9IDogcy5lbnY7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KHMuY29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlLCBlbnYgfSk7XG4gICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRFcnJvcihgXFxuUG9zdC1zdGVwICcke3MuaWR9JyBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuIFRoZSBwbGF0Zm9ybSBpcyBkZXBsb3llZDsgZml4IGFuZCByZS1ydW4gdGhlIHN0ZXAgbWFudWFsbHkuYCk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcHJpbnRTdWNjZXNzKGAke3MuaWR9IOKck2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocnVubmFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdcXG5Ta2lwcGVkIHBvc3QtaW5zdGFsbCBzdGVwcy4gUnVuIHRoZSBjb21tYW5kcyBhYm92ZSBtYW51YWxseSB3aGVuIHJlYWR5LicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwcm92aXNpb24nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|