@pipeline-builder/api-core 5.2.9 → 5.2.11

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.
@@ -29,6 +29,22 @@ export declare const PipelineFilterSchema: z.ZodObject<{
29
29
  orgId: z.ZodOptional<z.ZodString>;
30
30
  keyword: z.ZodOptional<z.ZodString>;
31
31
  }, z.core.$strip>;
32
+ /**
33
+ * A managed toolchain RELEASE version (docs/plans/bootstrap-image-versioning.md
34
+ * §1): plain `MAJOR.MINOR.PATCH` — a managed name refuses prerelease uploads,
35
+ * so a release is never a range or a prerelease.
36
+ */
37
+ export declare const TOOLCHAIN_RELEASE_VERSION_PATTERN: RegExp;
38
+ /**
39
+ * A pipeline's toolchain release pin (§5): `{ release: "1.4.2" }` pins BOTH
40
+ * halves of one release (`pipeline-bootstrap` + `cdk-synth`). Omitted = the
41
+ * org default, canary or platform default. Eligibility (D15) is checked by the
42
+ * pipeline service when the pin changes, not here. Never carried by a pipeline
43
+ * TEMPLATE (D12).
44
+ */
45
+ export declare const PipelineToolchainPinSchema: z.ZodObject<{
46
+ release: z.ZodString;
47
+ }, z.core.$strict>;
32
48
  /**
33
49
  * Pipeline creation schema
34
50
  */
@@ -107,6 +123,9 @@ export declare const PipelineCreateSchema: z.ZodObject<{
107
123
  }>>;
108
124
  }, z.core.$loose>>;
109
125
  }, z.core.$loose>>>;
126
+ toolchain: z.ZodOptional<z.ZodObject<{
127
+ release: z.ZodString;
128
+ }, z.core.$strict>>;
110
129
  }, z.core.$loose>;
111
130
  }, z.core.$strip>;
112
131
  /**
@@ -176,6 +195,9 @@ export declare const PipelineUpdateSchema: z.ZodObject<{
176
195
  }>>;
177
196
  }, z.core.$loose>>;
178
197
  }, z.core.$loose>>>;
198
+ toolchain: z.ZodOptional<z.ZodObject<{
199
+ release: z.ZodString;
200
+ }, z.core.$strict>>;
179
201
  }, z.core.$loose>>;
180
202
  isActive: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
181
203
  false: "false";
@@ -23,6 +23,22 @@ const PLUGIN_REF_NON_FIELDS = {
23
23
  version: '`version` is not a plugin-reference field — it is ignored and the default version is used. '
24
24
  + 'Pin or range the version with `filter: { version: "1.2.3" }` (also ^, ~, 1.x, 1.2, latest).',
25
25
  };
26
+ /**
27
+ * A managed toolchain RELEASE version (docs/plans/bootstrap-image-versioning.md
28
+ * §1): plain `MAJOR.MINOR.PATCH` — a managed name refuses prerelease uploads,
29
+ * so a release is never a range or a prerelease.
30
+ */
31
+ export const TOOLCHAIN_RELEASE_VERSION_PATTERN = /^\d+\.\d+\.\d+$/;
32
+ /**
33
+ * A pipeline's toolchain release pin (§5): `{ release: "1.4.2" }` pins BOTH
34
+ * halves of one release (`pipeline-bootstrap` + `cdk-synth`). Omitted = the
35
+ * org default, canary or platform default. Eligibility (D15) is checked by the
36
+ * pipeline service when the pin changes, not here. Never carried by a pipeline
37
+ * TEMPLATE (D12).
38
+ */
39
+ export const PipelineToolchainPinSchema = z.object({
40
+ release: z.string().regex(TOOLCHAIN_RELEASE_VERSION_PATTERN, 'toolchain.release must be a release version (MAJOR.MINOR.PATCH, e.g. 1.4.2)'),
41
+ }).strict();
26
42
  /**
27
43
  * Plugin options schema (name-based selection)
28
44
  */
@@ -104,6 +120,8 @@ const BuilderPropsSchema = z.object({
104
120
  plugin: PluginOptionsSchema,
105
121
  }).passthrough(),
106
122
  stages: z.array(StageSchema).optional(),
123
+ /** Toolchain release pin (see {@link PipelineToolchainPinSchema}). */
124
+ toolchain: PipelineToolchainPinSchema.optional(),
107
125
  }).passthrough().superRefine((props, ctx) => {
108
126
  for (const key of Object.keys(props.tags ?? {})) {
109
127
  if (!isReservedTagKey(key))
@@ -154,4 +172,4 @@ export const PipelineUpdateSchema = z.object({
154
172
  isDefault: BooleanQuerySchema.optional(),
155
173
  visibility: VisibilitySchema.optional(),
156
174
  });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc2NoZW1hcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vcGlwZWxpbmUtc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDMUQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ25DLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBMkI7SUFDcEQsT0FBTyxFQUNMLDZGQUE2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Q0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLDBCQUEwQixDQUFDO0lBQzNELFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtJQUN2Qzs7Ozs7Ozs7T0FRRztJQUNILFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsS0FBSyxFQUFFLGtCQUFrQjtDQUMxQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsR0FBRyxvQkFBb0I7SUFDdkIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN4QyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3BDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN4QyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSwgVmlzaWJpbGl0eVNjaGVtYSwgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmltcG9ydCB7IFBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTiB9IGZyb20gJy4uL3R5cGVzL2Vjb3N5c3RlbS5qcyc7XG5pbXBvcnQgeyBpc1Jlc2VydmVkVGFnS2V5LCBSRVNFUlZFRF9UQUdfS0VZUywgUkVTRVJWRURfVEFHX1BSRUZJWEVTIH0gZnJvbSAnLi4vdHlwZXMvcmVzZXJ2ZWQtdGFncy5qcyc7XG5cbi8qKlxuICogUGlwZWxpbmUgZmlsdGVyIHNjaGVtYSBmb3IgcXVlcnkgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVGaWx0ZXJTY2hlbWEgPSBCYXNlRmlsdGVyU2NoZW1hLmV4dGVuZCh7XG4gIHByb2plY3Q6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIG9yZ2FuaXphdGlvbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBvcmdJZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAga2V5d29yZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEtleXMgdGhhdCBsb29rIGxpa2UgcGx1Z2luLXJlZmVyZW5jZSBmaWVsZHMgYnV0IGFyZW4ndDogc3ludGggbmV2ZXIgcmVhZHNcbiAqIHRoZW0sIHNvIHdpdGhvdXQgYSBsb3VkIHJlZnVzYWwgdGhlIHJlZmVyZW5jZSBzaWxlbnRseSByZXNvbHZlcyB0byBzb21ldGhpbmdcbiAqIG90aGVyIHRoYW4gd2hhdCBpdHMgYXV0aG9yIG1lYW50LlxuICovXG5jb25zdCBQTFVHSU5fUkVGX05PTl9GSUVMRFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHZlcnNpb246XG4gICAgJ2B2ZXJzaW9uYCBpcyBub3QgYSBwbHVnaW4tcmVmZXJlbmNlIGZpZWxkIOKAlCBpdCBpcyBpZ25vcmVkIGFuZCB0aGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHVzZWQuICdcbiAgICArICdQaW4gb3IgcmFuZ2UgdGhlIHZlcnNpb24gd2l0aCBgZmlsdGVyOiB7IHZlcnNpb246IFwiMS4yLjNcIiB9YCAoYWxzbyBeLCB+LCAxLngsIDEuMiwgbGF0ZXN0KS4nLFxufTtcblxuLyoqXG4gKiBQbHVnaW4gb3B0aW9ucyBzY2hlbWEgKG5hbWUtYmFzZWQgc2VsZWN0aW9uKVxuICovXG5jb25zdCBQbHVnaW5PcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgLyoqXG4gICAqIFRoZSBwdWJsaXNoZXIgd2hvc2UgaW5zdGFsbGVkIGxpc3RpbmcgdGhlIHJlZmVyZW5jZSByZXNvbHZlcyB0b1xuICAgKiAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuIEFic2VudDogdGhlIG9yZydzIG93biBwbHVnaW4sIHRoZW5cbiAgICogaXRzIHBhcmVudCdzLCB0aGVuIHRoZSBPZmZpY2lhbCBsaXN0aW5nLlxuICAgKi9cbiAgcHVibGlzaGVyOiB6LnN0cmluZygpLm1heCgzOSkucmVnZXgoUFVCTElTSEVSX0hBTkRMRV9QQVRURVJOLCAncHVibGlzaGVyIG11c3QgYmUgYSBwdWJsaXNoZXIgaGFuZGxlIChsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBzaW5nbGUgaHlwaGVucyknKS5vcHRpb25hbCgpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaWx0ZXI6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICBtZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG59KS5wYXNzdGhyb3VnaCgpLnN1cGVyUmVmaW5lKChyZWYsIGN0eCkgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIG1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKFBMVUdJTl9SRUZfTk9OX0ZJRUxEUykpIHtcbiAgICBpZiAoa2V5IGluIChyZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzdGVwIHNjaGVtYVxuICpcbiAqIGBwYXNzdGhyb3VnaCgpYCBrZWVwcyBmb3J3YXJkLWNvbXBhdGlibGUgZmllbGRzLCBidXQgYSBmZXcgY29tbW9uIG1pc3Rha2VzIGFyZVxuICogcmVqZWN0ZWQgbG91ZGx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yZWQgYXQgc3ludGgg4oCUIG1vc3Qgbm90YWJseSBhXG4gKiB0b3AtbGV2ZWwgYGNvbW1hbmRzYCwgd2hpY2ggaXMgTk9UIGEgc3RlcCBmaWVsZCAodGhlIHBsdWdpbidzIG93biBjb21tYW5kcyBydW4pXG4gKiBhbmQgd291bGQgb3RoZXJ3aXNlIGRvIG5vdGhpbmcuXG4gKi9cbmNvbnN0IFNURVBfTk9OX0ZJRUxEUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY29tbWFuZHM6XG4gICAgJ2Bjb21tYW5kc2AgaXMgbm90IGEgc3RlcCBmaWVsZCDigJQgaXQgaXMgaWdub3JlZCBhdCBzeW50aCAodGhlIHBsdWdpblxcJ3Mgb3duIGNvbW1hbmRzIHJ1bikuICdcbiAgICArICdUbyBjaGFuZ2Ugd2hhdCBhIHN0ZXAgcnVucywgdXNlIGEgcGx1Z2luIGVudiBrbm9iIChlLmcuIGBtZXRhZGF0YS5HUkFETEVfVEFTS2ApLCAnXG4gICAgKyAnYHByZUNvbW1hbmRzYC9gcG9zdENvbW1hbmRzYCB0byBhZGQgY29tbWFuZHMgYXJvdW5kIHRoZSBwbHVnaW5cXCdzLCBvciB0aGUgJ1xuICAgICsgJ2Bhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYCBtZXRhZGF0YSBrZXkgZm9yIGEgZnVsbCBvdmVycmlkZS4nLFxufTtcblxuY29uc3QgU3RhZ2VTdGVwU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgbmV0d29yazogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIHBvc2l0aW9uOiB6LmVudW0oWydwcmUnLCAncG9zdCddKS5vcHRpb25hbCgpLFxufSkucGFzc3Rocm91Z2goKS5zdXBlclJlZmluZSgoc3RlcCwgY3R4KSA9PiB7XG4gIGZvciAoY29uc3QgW2tleSwgbWVzc2FnZV0gb2YgT2JqZWN0LmVudHJpZXMoU1RFUF9OT05fRklFTERTKSkge1xuICAgIGlmIChrZXkgaW4gKHN0ZXAgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzY2hlbWEuIGBwYXNzdGhyb3VnaCgpYCBsaWtlIGl0cyBzaWJsaW5nczogYSBzdHJpY3QtYnktZGVmYXVsdCBvYmplY3RcbiAqIGhlcmUgc3RyaXBwZWQgZXZlcnkgdW5kZWNsYXJlZCBzdGFnZSBmaWVsZCBiZWZvcmUgc3RvcmFnZSDigJQgaW5jbHVkaW5nXG4gKiBgZW52aXJvbm1lbnRgLCB3aGljaCBtYXJrcyBhIHN0YWdlIGFzIGEgRE9SQSBkZXBsb3kuXG4gKi9cbmNvbnN0IFN0YWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGFnZU5hbWU6IHouc3RyaW5nKCkubWluKDEpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogRGVwbG95IGVudmlyb25tZW50IHRoaXMgc3RhZ2UgdGFyZ2V0cyAoRE9SQSBkZXBsb3kgYXR0cmlidXRpb24sIGBwYi5kZXBsb3lzYCkuICovXG4gIGVudmlyb25tZW50OiB6LnN0cmluZygpLm1pbigxKS5tYXgoNjQpLm9wdGlvbmFsKCksXG4gIHN0ZXBzOiB6LmFycmF5KFN0YWdlU3RlcFNjaGVtYSkubWluKDEpLFxufSkucGFzc3Rocm91Z2goKTtcblxuLyoqXG4gKiBCdWlsZGVyUHJvcHMgc2NoZW1hIOKAlCBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZm9yIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24uXG4gKiBVc2VzIHBhc3N0aHJvdWdoKCkgdG8gYWxsb3cgYWRkaXRpb25hbCBmaWVsZHMgd2l0aG91dCByZWplY3RpbmcgdGhlbS5cbiAqL1xuY29uc3QgQnVpbGRlclByb3BzU2NoZW1hID0gei5vYmplY3Qoe1xuICBwcm9qZWN0OiB6LnN0cmluZygpLm1pbigxKSxcbiAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLm1pbigxKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGdsb2JhbDogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIGRlZmF1bHRzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgcm9sZTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBDb3N0LWFsbG9jYXRpb24gdGFncyBhcHBsaWVkIHRvIHRoZSBwaXBlbGluZSdzIHN0YWNrLiBSZXNlcnZlZCBrZXlzIGFyZVxuICAgKiByZWZ1c2VkIHJhdGhlciB0aGFuIGRyb3BwZWQsIHNvIGEgY2FsbGVyIGxlYXJucyB3aGljaCBrZXkgaXQgbWF5IG5vdCBzZXQ7XG4gICAqIGBQaXBlbGluZUJ1aWxkZXJgIGRyb3BzIHRoZW0gYWdhaW4gYXQgc3ludGggZm9yIGNhbGxlcnMgdGhhdCBieXBhc3MgdGhlIEFQSS5cbiAgICovXG4gIHRhZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHN5bnRoOiB6Lm9iamVjdCh7XG4gICAgc291cmNlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIH0pLnBhc3N0aHJvdWdoKCksXG4gIHN0YWdlczogei5hcnJheShTdGFnZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pLnBhc3N0aHJvdWdoKCkuc3VwZXJSZWZpbmUoKHByb3BzLCBjdHgpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoKHByb3BzIGFzIHsgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkudGFncyA/PyB7fSkpIHtcbiAgICBpZiAoIWlzUmVzZXJ2ZWRUYWdLZXkoa2V5KSkgY29udGludWU7XG4gICAgY3R4LmFkZElzc3VlKHtcbiAgICAgIGNvZGU6ICdjdXN0b20nLFxuICAgICAgcGF0aDogWyd0YWdzJywga2V5XSxcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgIGBcXGAke2tleX1cXGAgaXMgYSByZXNlcnZlZCB0YWcga2V5IGFuZCBjYW5ub3QgYmUgc2V0LiBSZXNlcnZlZDogYFxuICAgICAgICArIGAke1JFU0VSVkVEX1RBR19LRVlTLmpvaW4oJywgJyl9LCBhbmQgYW55dGhpbmcgc3RhcnRpbmcgd2l0aCBgXG4gICAgICAgICsgYCR7UkVTRVJWRURfVEFHX1BSRUZJWEVTLmpvaW4oJyBvciAnKX0uIFRoZXNlIGNhcnJ5IHBpcGVsaW5lIHRlbmFuY3kgYW5kIGBcbiAgICAgICAgKyAnZGVwbG95IGF0dHJpYnV0aW9uLCBzbyB0aGUgcGxhdGZvcm0gb3ducyB0aGVtLicsXG4gICAgfSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFBpcGVsaW5lIGNyZWF0aW9uIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVDcmVhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC4uLkNhdGFsb2dNZXRhZGF0YVNoYXBlLFxuICBwcm9qZWN0OiB6LnN0cmluZygpLm1pbigxLCAnUHJvamVjdCBpcyByZXF1aXJlZCcpLFxuICBvcmdhbml6YXRpb246IHouc3RyaW5nKCkubWluKDEsICdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXl3b3Jkczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHBpcGVsaW5lIHBhdXNlZC4gRGVjbGFyZWQgaGVyZSBiZWNhdXNlIGl0IHVzZWQgdG8gYmUgc3RyaXBwZWQ6XG4gICAqIHRoZSBzY2hlbWEgaXMgc3RyaWN0LWJ5LWRlZmF1bHQsIHNvIHRoZSBDTEkncyBgLS1uby1hY3RpdmVgIHdhcyBzaWxlbnRseVxuICAgKiBkcm9wcGVkIGFuZCBldmVyeSBwaXBlbGluZSBjYW1lIHVwIGFjdGl2ZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gYGlzRGVmYXVsdGAgY291bnRlcnBhcnQuIGBwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWVgIGFsbG93c1xuICAgKiBleGFjdGx5IG9uZSBwaXBlbGluZSBwZXIgKHByb2plY3QsIG9yZ2FuaXphdGlvbiwgb3JnKSwgc28gdGhlIHJvdyBjcmVhdGVkIGluXG4gICAqIGEgc2xvdCBJUyB0aGF0IHNsb3QncyBkZWZhdWx0IOKAlCBhIGBmYWxzZWAgY291bGQgbm90IGJlIGhvbm91cmVkLlxuICAgKi9cbiAgaXNBY3RpdmU6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICBwcm9wczogQnVpbGRlclByb3BzU2NoZW1hLFxufSk7XG5cbi8qKlxuICogUGlwZWxpbmUgdXBkYXRlIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVVcGRhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC4uLkNhdGFsb2dNZXRhZGF0YVNoYXBlLFxuICBwaXBlbGluZU5hbWU6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHByb3BzOiBCdWlsZGVyUHJvcHNTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICBpc0RlZmF1bHQ6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG59KTtcbiJdfQ==
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc2NoZW1hcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vcGlwZWxpbmUtc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDMUQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ25DLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBMkI7SUFDcEQsT0FBTyxFQUNMLDZGQUE2RjtVQUMzRiw2RkFBNkY7Q0FDbEcsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxpQkFBaUIsQ0FBQztBQUVuRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2pELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLDZFQUE2RSxDQUFDO0NBQzVJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUVaOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2Qjs7OztPQUlHO0lBQ0gsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLHFGQUFxRixDQUFDLENBQUMsUUFBUSxFQUFFO0lBQy9KLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDcEQsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN2RCxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQ3hDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUNuRSxJQUFJLEdBQUcsSUFBSyxHQUErQixFQUFFLENBQUM7WUFDNUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sZUFBZSxHQUEyQjtJQUM5QyxRQUFRLEVBQ04sNEZBQTRGO1VBQzFGLG1GQUFtRjtVQUNuRiw0RUFBNEU7VUFDNUUsOEVBQThFO0NBQ25GLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBRSxtQkFBbUI7SUFDM0IsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN0RCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JELFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQzdDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDekMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUM3RCxJQUFJLEdBQUcsSUFBSyxJQUFnQyxFQUFFLENBQUM7WUFDN0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0IsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVCLHFGQUFxRjtJQUNyRixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ2pELEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDdkMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBRWpCOzs7R0FHRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9CLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDcEQsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN0RCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ2xEOzs7O09BSUc7SUFDSCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ2pELEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2QsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUNwRCxNQUFNLEVBQUUsbUJBQW1CO0tBQzVCLENBQUMsQ0FBQyxXQUFXLEVBQUU7SUFDaEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLHNFQUFzRTtJQUN0RSxTQUFTLEVBQUUsMEJBQTBCLENBQUMsUUFBUSxFQUFFO0NBQ2pELENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFFLEtBQTJDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztZQUFFLFNBQVM7UUFDckMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNYLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUNuQixPQUFPLEVBQ0wsS0FBSyxHQUFHLHdEQUF3RDtrQkFDOUQsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUErQjtrQkFDOUQsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFDQUFxQztrQkFDMUUsZ0RBQWdEO1NBQ3JELENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQyxHQUFHLG9CQUFvQjtJQUN2QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLENBQUM7SUFDakQsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLDBCQUEwQixDQUFDO0lBQzNELFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtJQUN2Qzs7Ozs7Ozs7T0FRRztJQUNILFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsS0FBSyxFQUFFLGtCQUFrQjtDQUMxQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsR0FBRyxvQkFBb0I7SUFDdkIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN4QyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3BDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN4QyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSwgVmlzaWJpbGl0eVNjaGVtYSwgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmltcG9ydCB7IFBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTiB9IGZyb20gJy4uL3R5cGVzL2Vjb3N5c3RlbS5qcyc7XG5pbXBvcnQgeyBpc1Jlc2VydmVkVGFnS2V5LCBSRVNFUlZFRF9UQUdfS0VZUywgUkVTRVJWRURfVEFHX1BSRUZJWEVTIH0gZnJvbSAnLi4vdHlwZXMvcmVzZXJ2ZWQtdGFncy5qcyc7XG5cbi8qKlxuICogUGlwZWxpbmUgZmlsdGVyIHNjaGVtYSBmb3IgcXVlcnkgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVGaWx0ZXJTY2hlbWEgPSBCYXNlRmlsdGVyU2NoZW1hLmV4dGVuZCh7XG4gIHByb2plY3Q6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIG9yZ2FuaXphdGlvbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBvcmdJZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAga2V5d29yZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEtleXMgdGhhdCBsb29rIGxpa2UgcGx1Z2luLXJlZmVyZW5jZSBmaWVsZHMgYnV0IGFyZW4ndDogc3ludGggbmV2ZXIgcmVhZHNcbiAqIHRoZW0sIHNvIHdpdGhvdXQgYSBsb3VkIHJlZnVzYWwgdGhlIHJlZmVyZW5jZSBzaWxlbnRseSByZXNvbHZlcyB0byBzb21ldGhpbmdcbiAqIG90aGVyIHRoYW4gd2hhdCBpdHMgYXV0aG9yIG1lYW50LlxuICovXG5jb25zdCBQTFVHSU5fUkVGX05PTl9GSUVMRFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHZlcnNpb246XG4gICAgJ2B2ZXJzaW9uYCBpcyBub3QgYSBwbHVnaW4tcmVmZXJlbmNlIGZpZWxkIOKAlCBpdCBpcyBpZ25vcmVkIGFuZCB0aGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHVzZWQuICdcbiAgICArICdQaW4gb3IgcmFuZ2UgdGhlIHZlcnNpb24gd2l0aCBgZmlsdGVyOiB7IHZlcnNpb246IFwiMS4yLjNcIiB9YCAoYWxzbyBeLCB+LCAxLngsIDEuMiwgbGF0ZXN0KS4nLFxufTtcblxuLyoqXG4gKiBBIG1hbmFnZWQgdG9vbGNoYWluIFJFTEVBU0UgdmVyc2lvbiAoZG9jcy9wbGFucy9ib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZFxuICogwqcxKTogcGxhaW4gYE1BSk9SLk1JTk9SLlBBVENIYCDigJQgYSBtYW5hZ2VkIG5hbWUgcmVmdXNlcyBwcmVyZWxlYXNlIHVwbG9hZHMsXG4gKiBzbyBhIHJlbGVhc2UgaXMgbmV2ZXIgYSByYW5nZSBvciBhIHByZXJlbGVhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBUT09MQ0hBSU5fUkVMRUFTRV9WRVJTSU9OX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKyQvO1xuXG4vKipcbiAqIEEgcGlwZWxpbmUncyB0b29sY2hhaW4gcmVsZWFzZSBwaW4gKMKnNSk6IGB7IHJlbGVhc2U6IFwiMS40LjJcIiB9YCBwaW5zIEJPVEhcbiAqIGhhbHZlcyBvZiBvbmUgcmVsZWFzZSAoYHBpcGVsaW5lLWJvb3RzdHJhcGAgKyBgY2RrLXN5bnRoYCkuIE9taXR0ZWQgPSB0aGVcbiAqIG9yZyBkZWZhdWx0LCBjYW5hcnkgb3IgcGxhdGZvcm0gZGVmYXVsdC4gRWxpZ2liaWxpdHkgKEQxNSkgaXMgY2hlY2tlZCBieSB0aGVcbiAqIHBpcGVsaW5lIHNlcnZpY2Ugd2hlbiB0aGUgcGluIGNoYW5nZXMsIG5vdCBoZXJlLiBOZXZlciBjYXJyaWVkIGJ5IGEgcGlwZWxpbmVcbiAqIFRFTVBMQVRFIChEMTIpLlxuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVUb29sY2hhaW5QaW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHJlbGVhc2U6IHouc3RyaW5nKCkucmVnZXgoVE9PTENIQUlOX1JFTEVBU0VfVkVSU0lPTl9QQVRURVJOLCAndG9vbGNoYWluLnJlbGVhc2UgbXVzdCBiZSBhIHJlbGVhc2UgdmVyc2lvbiAoTUFKT1IuTUlOT1IuUEFUQ0gsIGUuZy4gMS40LjIpJyksXG59KS5zdHJpY3QoKTtcblxuLyoqXG4gKiBQbHVnaW4gb3B0aW9ucyBzY2hlbWEgKG5hbWUtYmFzZWQgc2VsZWN0aW9uKVxuICovXG5jb25zdCBQbHVnaW5PcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgLyoqXG4gICAqIFRoZSBwdWJsaXNoZXIgd2hvc2UgaW5zdGFsbGVkIGxpc3RpbmcgdGhlIHJlZmVyZW5jZSByZXNvbHZlcyB0b1xuICAgKiAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuIEFic2VudDogdGhlIG9yZydzIG93biBwbHVnaW4sIHRoZW5cbiAgICogaXRzIHBhcmVudCdzLCB0aGVuIHRoZSBPZmZpY2lhbCBsaXN0aW5nLlxuICAgKi9cbiAgcHVibGlzaGVyOiB6LnN0cmluZygpLm1heCgzOSkucmVnZXgoUFVCTElTSEVSX0hBTkRMRV9QQVRURVJOLCAncHVibGlzaGVyIG11c3QgYmUgYSBwdWJsaXNoZXIgaGFuZGxlIChsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBzaW5nbGUgaHlwaGVucyknKS5vcHRpb25hbCgpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaWx0ZXI6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICBtZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG59KS5wYXNzdGhyb3VnaCgpLnN1cGVyUmVmaW5lKChyZWYsIGN0eCkgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIG1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKFBMVUdJTl9SRUZfTk9OX0ZJRUxEUykpIHtcbiAgICBpZiAoa2V5IGluIChyZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzdGVwIHNjaGVtYVxuICpcbiAqIGBwYXNzdGhyb3VnaCgpYCBrZWVwcyBmb3J3YXJkLWNvbXBhdGlibGUgZmllbGRzLCBidXQgYSBmZXcgY29tbW9uIG1pc3Rha2VzIGFyZVxuICogcmVqZWN0ZWQgbG91ZGx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yZWQgYXQgc3ludGgg4oCUIG1vc3Qgbm90YWJseSBhXG4gKiB0b3AtbGV2ZWwgYGNvbW1hbmRzYCwgd2hpY2ggaXMgTk9UIGEgc3RlcCBmaWVsZCAodGhlIHBsdWdpbidzIG93biBjb21tYW5kcyBydW4pXG4gKiBhbmQgd291bGQgb3RoZXJ3aXNlIGRvIG5vdGhpbmcuXG4gKi9cbmNvbnN0IFNURVBfTk9OX0ZJRUxEUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY29tbWFuZHM6XG4gICAgJ2Bjb21tYW5kc2AgaXMgbm90IGEgc3RlcCBmaWVsZCDigJQgaXQgaXMgaWdub3JlZCBhdCBzeW50aCAodGhlIHBsdWdpblxcJ3Mgb3duIGNvbW1hbmRzIHJ1bikuICdcbiAgICArICdUbyBjaGFuZ2Ugd2hhdCBhIHN0ZXAgcnVucywgdXNlIGEgcGx1Z2luIGVudiBrbm9iIChlLmcuIGBtZXRhZGF0YS5HUkFETEVfVEFTS2ApLCAnXG4gICAgKyAnYHByZUNvbW1hbmRzYC9gcG9zdENvbW1hbmRzYCB0byBhZGQgY29tbWFuZHMgYXJvdW5kIHRoZSBwbHVnaW5cXCdzLCBvciB0aGUgJ1xuICAgICsgJ2Bhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYCBtZXRhZGF0YSBrZXkgZm9yIGEgZnVsbCBvdmVycmlkZS4nLFxufTtcblxuY29uc3QgU3RhZ2VTdGVwU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgbmV0d29yazogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIHBvc2l0aW9uOiB6LmVudW0oWydwcmUnLCAncG9zdCddKS5vcHRpb25hbCgpLFxufSkucGFzc3Rocm91Z2goKS5zdXBlclJlZmluZSgoc3RlcCwgY3R4KSA9PiB7XG4gIGZvciAoY29uc3QgW2tleSwgbWVzc2FnZV0gb2YgT2JqZWN0LmVudHJpZXMoU1RFUF9OT05fRklFTERTKSkge1xuICAgIGlmIChrZXkgaW4gKHN0ZXAgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzY2hlbWEuIGBwYXNzdGhyb3VnaCgpYCBsaWtlIGl0cyBzaWJsaW5nczogYSBzdHJpY3QtYnktZGVmYXVsdCBvYmplY3RcbiAqIGhlcmUgc3RyaXBwZWQgZXZlcnkgdW5kZWNsYXJlZCBzdGFnZSBmaWVsZCBiZWZvcmUgc3RvcmFnZSDigJQgaW5jbHVkaW5nXG4gKiBgZW52aXJvbm1lbnRgLCB3aGljaCBtYXJrcyBhIHN0YWdlIGFzIGEgRE9SQSBkZXBsb3kuXG4gKi9cbmNvbnN0IFN0YWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGFnZU5hbWU6IHouc3RyaW5nKCkubWluKDEpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogRGVwbG95IGVudmlyb25tZW50IHRoaXMgc3RhZ2UgdGFyZ2V0cyAoRE9SQSBkZXBsb3kgYXR0cmlidXRpb24sIGBwYi5kZXBsb3lzYCkuICovXG4gIGVudmlyb25tZW50OiB6LnN0cmluZygpLm1pbigxKS5tYXgoNjQpLm9wdGlvbmFsKCksXG4gIHN0ZXBzOiB6LmFycmF5KFN0YWdlU3RlcFNjaGVtYSkubWluKDEpLFxufSkucGFzc3Rocm91Z2goKTtcblxuLyoqXG4gKiBCdWlsZGVyUHJvcHMgc2NoZW1hIOKAlCBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZm9yIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24uXG4gKiBVc2VzIHBhc3N0aHJvdWdoKCkgdG8gYWxsb3cgYWRkaXRpb25hbCBmaWVsZHMgd2l0aG91dCByZWplY3RpbmcgdGhlbS5cbiAqL1xuY29uc3QgQnVpbGRlclByb3BzU2NoZW1hID0gei5vYmplY3Qoe1xuICBwcm9qZWN0OiB6LnN0cmluZygpLm1pbigxKSxcbiAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLm1pbigxKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGdsb2JhbDogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIGRlZmF1bHRzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgcm9sZTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBDb3N0LWFsbG9jYXRpb24gdGFncyBhcHBsaWVkIHRvIHRoZSBwaXBlbGluZSdzIHN0YWNrLiBSZXNlcnZlZCBrZXlzIGFyZVxuICAgKiByZWZ1c2VkIHJhdGhlciB0aGFuIGRyb3BwZWQsIHNvIGEgY2FsbGVyIGxlYXJucyB3aGljaCBrZXkgaXQgbWF5IG5vdCBzZXQ7XG4gICAqIGBQaXBlbGluZUJ1aWxkZXJgIGRyb3BzIHRoZW0gYWdhaW4gYXQgc3ludGggZm9yIGNhbGxlcnMgdGhhdCBieXBhc3MgdGhlIEFQSS5cbiAgICovXG4gIHRhZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHN5bnRoOiB6Lm9iamVjdCh7XG4gICAgc291cmNlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIH0pLnBhc3N0aHJvdWdoKCksXG4gIHN0YWdlczogei5hcnJheShTdGFnZVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgLyoqIFRvb2xjaGFpbiByZWxlYXNlIHBpbiAoc2VlIHtAbGluayBQaXBlbGluZVRvb2xjaGFpblBpblNjaGVtYX0pLiAqL1xuICB0b29sY2hhaW46IFBpcGVsaW5lVG9vbGNoYWluUGluU2NoZW1hLm9wdGlvbmFsKCksXG59KS5wYXNzdGhyb3VnaCgpLnN1cGVyUmVmaW5lKChwcm9wcywgY3R4KSA9PiB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKChwcm9wcyBhcyB7IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0pLnRhZ3MgPz8ge30pKSB7XG4gICAgaWYgKCFpc1Jlc2VydmVkVGFnS2V5KGtleSkpIGNvbnRpbnVlO1xuICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICBjb2RlOiAnY3VzdG9tJyxcbiAgICAgIHBhdGg6IFsndGFncycsIGtleV0sXG4gICAgICBtZXNzYWdlOlxuICAgICAgICBgXFxgJHtrZXl9XFxgIGlzIGEgcmVzZXJ2ZWQgdGFnIGtleSBhbmQgY2Fubm90IGJlIHNldC4gUmVzZXJ2ZWQ6IGBcbiAgICAgICAgKyBgJHtSRVNFUlZFRF9UQUdfS0VZUy5qb2luKCcsICcpfSwgYW5kIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYFxuICAgICAgICArIGAke1JFU0VSVkVEX1RBR19QUkVGSVhFUy5qb2luKCcgb3IgJyl9LiBUaGVzZSBjYXJyeSBwaXBlbGluZSB0ZW5hbmN5IGFuZCBgXG4gICAgICAgICsgJ2RlcGxveSBhdHRyaWJ1dGlvbiwgc28gdGhlIHBsYXRmb3JtIG93bnMgdGhlbS4nLFxuICAgIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBQaXBlbGluZSBjcmVhdGlvbiBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFBpcGVsaW5lQ3JlYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICAuLi5DYXRhbG9nTWV0YWRhdGFTaGFwZSxcbiAgcHJvamVjdDogei5zdHJpbmcoKS5taW4oMSwgJ1Byb2plY3QgaXMgcmVxdWlyZWQnKSxcbiAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLm1pbigxLCAnT3JnYW5pemF0aW9uIGlzIHJlcXVpcmVkJyksXG4gIHBpcGVsaW5lTmFtZTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5d29yZHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBwaXBlbGluZSBwYXVzZWQuIERlY2xhcmVkIGhlcmUgYmVjYXVzZSBpdCB1c2VkIHRvIGJlIHN0cmlwcGVkOlxuICAgKiB0aGUgc2NoZW1hIGlzIHN0cmljdC1ieS1kZWZhdWx0LCBzbyB0aGUgQ0xJJ3MgYC0tbm8tYWN0aXZlYCB3YXMgc2lsZW50bHlcbiAgICogZHJvcHBlZCBhbmQgZXZlcnkgcGlwZWxpbmUgY2FtZSB1cCBhY3RpdmUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGBpc0RlZmF1bHRgIGNvdW50ZXJwYXJ0LiBgcGlwZWxpbmVfcHJvamVjdF9vcmdfdW5pcXVlYCBhbGxvd3NcbiAgICogZXhhY3RseSBvbmUgcGlwZWxpbmUgcGVyIChwcm9qZWN0LCBvcmdhbml6YXRpb24sIG9yZyksIHNvIHRoZSByb3cgY3JlYXRlZCBpblxuICAgKiBhIHNsb3QgSVMgdGhhdCBzbG90J3MgZGVmYXVsdCDigJQgYSBgZmFsc2VgIGNvdWxkIG5vdCBiZSBob25vdXJlZC5cbiAgICovXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgcHJvcHM6IEJ1aWxkZXJQcm9wc1NjaGVtYSxcbn0pO1xuXG4vKipcbiAqIFBpcGVsaW5lIHVwZGF0ZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFBpcGVsaW5lVXBkYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICAuLi5DYXRhbG9nTWV0YWRhdGFTaGFwZSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXl3b3Jkczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBwcm9wczogQnVpbGRlclByb3BzU2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4iXX0=
@@ -9,7 +9,15 @@
9
9
  * {@link checkPluginConfig}.
10
10
  */
11
11
  import { z } from 'zod';
12
- export declare const PLUGIN_TYPES: readonly ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
12
+ /**
13
+ * `BuildImage` is the managed toolchain's build image (`pipeline-bootstrap`,
14
+ * docs/plans/bootstrap-image-versioning.md §1): a prebuilt image with no
15
+ * commands, never a pipeline step. {@link STEP_PLUGIN_TYPES} is the subset a
16
+ * step (or a generator) may use.
17
+ */
18
+ export declare const PLUGIN_TYPES: readonly ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep', 'BuildImage'];
19
+ /** The plugin types a pipeline step can use — every type except `BuildImage`. */
20
+ export declare const STEP_PLUGIN_TYPES: readonly ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
13
21
  export declare const PLUGIN_COMPUTE_TYPES: readonly ['SMALL', 'MEDIUM', 'LARGE', 'X2_LARGE'];
14
22
  export declare const PLUGIN_FAILURE_BEHAVIORS: readonly ['fail', 'warn', 'ignore'];
15
23
  export declare const PLUGIN_BUILD_TYPES: readonly ['build_image', 'prebuilt', 'metadata_only'];
@@ -22,6 +30,39 @@ export declare const PLUGIN_VERSION_PATTERN: RegExp;
22
30
  export declare const EGRESS_MAX_HOSTS = 50;
23
31
  /** True when `host` is an acceptable `network.egress` entry. */
24
32
  export declare function isValidEgressHost(host: string): boolean;
33
+ /**
34
+ * The tool versions a managed build image carries, written by
35
+ * `sync-image-tags.sh` from the Dockerfile `ARG`s. Every field is required and
36
+ * exact: this is what the release IS, not what it accepts.
37
+ */
38
+ export declare const PluginToolchainSchema: z.ZodObject<{
39
+ pipelineManager: z.ZodString;
40
+ awsCdk: z.ZodString;
41
+ cdkAssets: z.ZodString;
42
+ esbuild: z.ZodString;
43
+ pnpm: z.ZodString;
44
+ node: z.ZodString;
45
+ }, z.core.$strict>;
46
+ export type PluginToolchain = z.infer<typeof PluginToolchainSchema>;
47
+ /**
48
+ * Where a managed build image's `toolchain` is persisted: its plugin row's
49
+ * `metadata`, one flat `toolchain.<field>` key per tool (the column is a flat
50
+ * string map, and a `BuildImage` spec may carry no step `metadata` of its own,
51
+ * so the keys never collide). Written at upload by {@link toolchainMetadata},
52
+ * read by {@link toolchainFromMetadata} — the platform-default metadata guard
53
+ * and the resolver both go through it.
54
+ */
55
+ export declare const TOOLCHAIN_METADATA_PREFIX = "toolchain.";
56
+ /** The flat `metadata` entries that persist `toolchain` on a build image's row. */
57
+ export declare function toolchainMetadata(toolchain: PluginToolchain): Record<string, string>;
58
+ /**
59
+ * The `toolchain` a build image's row carries, or `null` when its `metadata`
60
+ * holds no complete, valid one (every field required and exact — the same
61
+ * schema the upload validated).
62
+ */
63
+ export declare function toolchainFromMetadata(metadata: unknown): PluginToolchain | null;
64
+ /** A build-input hash: 64 lowercase hex characters (sha256), optionally `sha256:`-prefixed. */
65
+ export declare const PLUGIN_SOURCE_DIGEST_PATTERN: RegExp;
25
66
  export declare const PluginConfigSchema: z.ZodObject<{
26
67
  pluginSpec: z.ZodOptional<z.ZodString>;
27
68
  dockerfile: z.ZodOptional<z.ZodString>;
@@ -40,6 +81,7 @@ export declare const PluginSpecSchema: z.ZodObject<{
40
81
  category: z.ZodOptional<z.ZodString>;
41
82
  version: z.ZodOptional<z.ZodString>;
42
83
  pluginType: z.ZodOptional<z.ZodEnum<{
84
+ BuildImage: "BuildImage";
43
85
  CodeBuildStep: "CodeBuildStep";
44
86
  ManualApprovalStep: "ManualApprovalStep";
45
87
  ShellStep: "ShellStep";
@@ -86,6 +128,15 @@ export declare const PluginSpecSchema: z.ZodObject<{
86
128
  network: z.ZodOptional<z.ZodObject<{
87
129
  egress: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
130
  }, z.core.$strict>>;
131
+ toolchain: z.ZodOptional<z.ZodObject<{
132
+ pipelineManager: z.ZodString;
133
+ awsCdk: z.ZodString;
134
+ cdkAssets: z.ZodString;
135
+ esbuild: z.ZodString;
136
+ pnpm: z.ZodString;
137
+ node: z.ZodString;
138
+ }, z.core.$strict>>;
139
+ sourceDigest: z.ZodOptional<z.ZodString>;
89
140
  }, z.core.$strict>;
90
141
  export type PluginSpecInput = z.infer<typeof PluginSpecSchema>;
91
142
  /**
@@ -107,6 +158,7 @@ export declare function checkPluginSpec(raw: unknown): PackageCheck<PluginSpecIn
107
158
  export declare function checkPluginConfig(raw: unknown): PackageCheck<PluginConfigInput>;
108
159
  /**
109
160
  * The required-field contract: `name` and `version` always, `commands` for
110
- * every type except `ManualApprovalStep`. Returns the upload's message, or null.
161
+ * every type except `ManualApprovalStep` and `BuildImage` (neither runs
162
+ * commands). Returns the upload's message, or null.
111
163
  */
112
164
  export declare function pluginSpecRequiredFieldsProblem(spec: Pick<PluginSpecInput, 'name' | 'version' | 'commands' | 'pluginType'>): string | null;
@@ -12,11 +12,19 @@
12
12
  */
13
13
  import { z } from 'zod';
14
14
  import { IconKeySchema, PLUGIN_CATALOG_FIELD_SCHEMAS, ProjectUrlSchema, isAllowedSpdxId, } from './plugin-catalog-metadata.js';
15
- import { PLUGIN_CHANGELOG_MAX_BYTES } from '../types/plugin-catalog.js';
15
+ import { PLUGIN_CHANGELOG_MAX_BYTES, isManagedToolchainPlugin } from '../types/plugin-catalog.js';
16
16
  // -----------------------------------------------------------------------------
17
17
  // Vocabularies
18
18
  // -----------------------------------------------------------------------------
19
- export const PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
19
+ /**
20
+ * `BuildImage` is the managed toolchain's build image (`pipeline-bootstrap`,
21
+ * docs/plans/bootstrap-image-versioning.md §1): a prebuilt image with no
22
+ * commands, never a pipeline step. {@link STEP_PLUGIN_TYPES} is the subset a
23
+ * step (or a generator) may use.
24
+ */
25
+ export const PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep', 'BuildImage'];
26
+ /** The plugin types a pipeline step can use — every type except `BuildImage`. */
27
+ export const STEP_PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
20
28
  export const PLUGIN_COMPUTE_TYPES = ['SMALL', 'MEDIUM', 'LARGE', 'X2_LARGE'];
21
29
  export const PLUGIN_FAILURE_BEHAVIORS = ['fail', 'warn', 'ignore'];
22
30
  export const PLUGIN_BUILD_TYPES = ['build_image', 'prebuilt', 'metadata_only'];
@@ -40,6 +48,56 @@ export function isValidEgressHost(host) {
40
48
  return host.length <= 253 && EGRESS_HOST_PATTERN.test(host);
41
49
  }
42
50
  // -----------------------------------------------------------------------------
51
+ // Managed toolchain metadata (BuildImage specs)
52
+ // -----------------------------------------------------------------------------
53
+ /** An EXACT semver (no range): `1.2.3`, optionally `-pre` / `+build`. */
54
+ const EXACT_SEMVER_PATTERN = /^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
55
+ const exactSemver = z.string().regex(EXACT_SEMVER_PATTERN, { message: 'must be an exact semver version (e.g. 1.2.3)' });
56
+ /**
57
+ * The tool versions a managed build image carries, written by
58
+ * `sync-image-tags.sh` from the Dockerfile `ARG`s. Every field is required and
59
+ * exact: this is what the release IS, not what it accepts.
60
+ */
61
+ export const PluginToolchainSchema = z.object({
62
+ pipelineManager: exactSemver,
63
+ awsCdk: exactSemver,
64
+ cdkAssets: exactSemver,
65
+ esbuild: exactSemver,
66
+ pnpm: exactSemver,
67
+ node: exactSemver,
68
+ }).strict();
69
+ /**
70
+ * Where a managed build image's `toolchain` is persisted: its plugin row's
71
+ * `metadata`, one flat `toolchain.<field>` key per tool (the column is a flat
72
+ * string map, and a `BuildImage` spec may carry no step `metadata` of its own,
73
+ * so the keys never collide). Written at upload by {@link toolchainMetadata},
74
+ * read by {@link toolchainFromMetadata} — the platform-default metadata guard
75
+ * and the resolver both go through it.
76
+ */
77
+ export const TOOLCHAIN_METADATA_PREFIX = 'toolchain.';
78
+ /** The flat `metadata` entries that persist `toolchain` on a build image's row. */
79
+ export function toolchainMetadata(toolchain) {
80
+ return Object.fromEntries(Object.entries(toolchain).map(([k, v]) => [`${TOOLCHAIN_METADATA_PREFIX}${k}`, v]));
81
+ }
82
+ /**
83
+ * The `toolchain` a build image's row carries, or `null` when its `metadata`
84
+ * holds no complete, valid one (every field required and exact — the same
85
+ * schema the upload validated).
86
+ */
87
+ export function toolchainFromMetadata(metadata) {
88
+ if (!metadata || typeof metadata !== 'object')
89
+ return null;
90
+ const fields = {};
91
+ for (const [k, v] of Object.entries(metadata)) {
92
+ if (k.startsWith(TOOLCHAIN_METADATA_PREFIX))
93
+ fields[k.slice(TOOLCHAIN_METADATA_PREFIX.length)] = v;
94
+ }
95
+ const parsed = PluginToolchainSchema.safeParse(fields);
96
+ return parsed.success ? parsed.data : null;
97
+ }
98
+ /** A build-input hash: 64 lowercase hex characters (sha256), optionally `sha256:`-prefixed. */
99
+ export const PLUGIN_SOURCE_DIGEST_PATTERN = /^(sha256:)?[a-f0-9]{64}$/;
100
+ // -----------------------------------------------------------------------------
43
101
  // config.yaml
44
102
  // -----------------------------------------------------------------------------
45
103
  export const PluginConfigSchema = z.object({
@@ -128,7 +186,35 @@ export const PluginSpecSchema = z.object({
128
186
  message: 'must be a bare hostname (no scheme, port or path; one leading *. allowed)',
129
187
  })).max(EGRESS_MAX_HOSTS).optional(),
130
188
  }).strict().optional(),
131
- }).strict();
189
+ // Managed toolchain metadata — `BuildImage` specs only (see the check below).
190
+ toolchain: PluginToolchainSchema.optional(),
191
+ sourceDigest: z.string().regex(PLUGIN_SOURCE_DIGEST_PATTERN, { message: 'must be a sha256 hex digest' }).optional(),
192
+ }).strict().superRefine((spec, ctx) => {
193
+ for (const issue of buildImageSpecProblems(spec))
194
+ ctx.addIssue({ code: 'custom', path: [issue.path], message: issue.message });
195
+ });
196
+ function buildImageSpecProblems(spec) {
197
+ const out = [];
198
+ if (spec.pluginType !== 'BuildImage') {
199
+ if (spec.toolchain !== undefined)
200
+ out.push({ path: 'toolchain', message: 'is only allowed on a BuildImage plugin' });
201
+ if (spec.sourceDigest !== undefined)
202
+ out.push({ path: 'sourceDigest', message: 'is only allowed on a BuildImage plugin' });
203
+ return out;
204
+ }
205
+ if (spec.name !== undefined && !isManagedToolchainPlugin(spec.name)) {
206
+ out.push({ path: 'pluginType', message: 'BuildImage is reserved for the managed toolchain plugins' });
207
+ }
208
+ if (spec.toolchain === undefined)
209
+ out.push({ path: 'toolchain', message: 'is required on a BuildImage plugin' });
210
+ if (spec.sourceDigest === undefined)
211
+ out.push({ path: 'sourceDigest', message: 'is required on a BuildImage plugin' });
212
+ for (const field of ['commands', 'installCommands', 'metadata']) {
213
+ if (spec[field] !== undefined)
214
+ out.push({ path: field, message: 'is not allowed on a BuildImage plugin' });
215
+ }
216
+ return out;
217
+ }
132
218
  const isMapping = (raw) => typeof raw === 'object' && raw !== null && !Array.isArray(raw);
133
219
  function checkAgainst(file, raw, schema, withPath) {
134
220
  if (!isMapping(raw)) {
@@ -151,13 +237,14 @@ export function checkPluginConfig(raw) {
151
237
  }
152
238
  /**
153
239
  * The required-field contract: `name` and `version` always, `commands` for
154
- * every type except `ManualApprovalStep`. Returns the upload's message, or null.
240
+ * every type except `ManualApprovalStep` and `BuildImage` (neither runs
241
+ * commands). Returns the upload's message, or null.
155
242
  */
156
243
  export function pluginSpecRequiredFieldsProblem(spec) {
157
- const isApprovalStep = spec.pluginType === 'ManualApprovalStep';
158
- if (!spec.name || !spec.version || (!isApprovalStep && !spec.commands)) {
244
+ const runsNoCommands = spec.pluginType === 'ManualApprovalStep' || spec.pluginType === 'BuildImage';
245
+ if (!spec.name || !spec.version || (!runsNoCommands && !spec.commands)) {
159
246
  return 'Invalid spec: name, version, and commands are required';
160
247
  }
161
248
  return null;
162
249
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMtc2NoZW1hLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc3BlYy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxHQUMvRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhFLGdGQUFnRjtBQUNoRixlQUFlO0FBQ2YsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLENBQVUsQ0FBQztBQUMxRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVUsQ0FBQztBQUM1RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFVLENBQUM7QUFHeEYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUNsRCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsc0RBQXNELENBQUM7QUFFN0YsZ0ZBQWdGO0FBQ2hGLDRDQUE0QztBQUM1QyxnRkFBZ0Y7QUFFaEYsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUVuQzs7OztHQUlHO0FBQ0gsTUFB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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGx1Z2luIFBBQ0tBR0Ugc2NoZW1hczogYHBsdWdpbi1zcGVjLnlhbWxgIGFuZCBgY29uZmlnLnlhbWxgLCBleGFjdGx5IGFzXG4gKiB0aGUgcGx1Z2luIHNlcnZpY2UgdmFsaWRhdGVzIGFuIHVwbG9hZC4gU2hhcmVkIGZyb20gYXBpLWNvcmUgc28gdGhlIHVwbG9hZFxuICogcGF0aCAoYXBpL3BsdWdpbikgYW5kIHRoZSBDTEkgKGBwaXBlbGluZS1tYW5hZ2VyIHBsdWdpbiB2YWxpZGF0ZWAgL1xuICogYHBsdWdpbiBwdWJsaXNoYCkgYXBwbHkgT05FIHNjaGVtYSBhbmQgY2FuJ3QgZHJpZnQuXG4gKlxuICogUHVyZTogbm8gWUFNTCBwYXJzaW5nLCBubyBmaWxlc3lzdGVtLiBDYWxsZXJzIHBhcnNlICh3aXRoIHRoZWlyIG93biBzaXplIGFuZFxuICogYWxpYXMgYm91bmRzKSBhbmQgaGFuZCB0aGUgcmVzdWx0aW5nIG9iamVjdCB0byB7QGxpbmsgY2hlY2tQbHVnaW5TcGVjfSAvXG4gKiB7QGxpbmsgY2hlY2tQbHVnaW5Db25maWd9LlxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge1xuICBJY29uS2V5U2NoZW1hLCBQTFVHSU5fQ0FUQUxPR19GSUVMRF9TQ0hFTUFTLCBQcm9qZWN0VXJsU2NoZW1hLCBpc0FsbG93ZWRTcGR4SWQsXG59IGZyb20gJy4vcGx1Z2luLWNhdGFsb2ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHsgUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMgfSBmcm9tICcuLi90eXBlcy9wbHVnaW4tY2F0YWxvZy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWb2NhYnVsYXJpZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBQTFVHSU5fVFlQRVMgPSBbJ0NvZGVCdWlsZFN0ZXAnLCAnU2hlbGxTdGVwJywgJ01hbnVhbEFwcHJvdmFsU3RlcCddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DT01QVVRFX1RZUEVTID0gWydTTUFMTCcsICdNRURJVU0nLCAnTEFSR0UnLCAnWDJfTEFSR0UnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fRkFJTFVSRV9CRUhBVklPUlMgPSBbJ2ZhaWwnLCAnd2FybicsICdpZ25vcmUnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fQlVJTERfVFlQRVMgPSBbJ2J1aWxkX2ltYWdlJywgJ3ByZWJ1aWx0JywgJ21ldGFkYXRhX29ubHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkJ1aWxkVHlwZSA9IHR5cGVvZiBQTFVHSU5fQlVJTERfVFlQRVNbbnVtYmVyXTtcblxuLyoqIFBsdWdpbiBuYW1lOiBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBoeXBoZW5zLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FX1BBVFRFUk4gPSAvXlthLXowLTktXSskLztcbi8qKiBQbHVnaW4gdmVyc2lvbjogc2VtdmVyLCB3aXRoIG9wdGlvbmFsIGAtcHJlcmVsZWFzZWAgYW5kIGArYnVpbGRgIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9WRVJTSU9OX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JC87XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBuZXR3b3JrLmVncmVzcyAoc3BlYy1vbmx5IHRydXN0IG1ldGFkYXRhKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1heCBkZWNsYXJlZCBgbmV0d29yay5lZ3Jlc3NgIGhvc3RuYW1lcy4gKi9cbmV4cG9ydCBjb25zdCBFR1JFU1NfTUFYX0hPU1RTID0gNTA7XG5cbi8qKlxuICogQSBiYXJlIEROUyBob3N0bmFtZSwgb3B0aW9uYWxseSB3aXRoIE9ORSBsZWFkaW5nIGAqLmAgd2lsZGNhcmQgbGFiZWwuIE5vXG4gKiBzY2hlbWUsIHBvcnQsIHBhdGgsIHVzZXJpbmZvIG9yIElQIGxpdGVyYWwg4oCUIGEgZGVjbGFyZWQgZWdyZXNzIHRhcmdldCBpcyBhXG4gKiBuYW1lIHRoZSByZXZpZXdlciBjYW4gcmVhZC5cbiAqL1xuY29uc3QgRUdSRVNTX0hPU1RfUEFUVEVSTiA9IC9eKD86XFwqXFwuKT8oPzpbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT9cXC4pK1thLXpdW2EtejAtOS1dezAsNjF9W2EtejAtOV0kLztcblxuLyoqIFRydWUgd2hlbiBgaG9zdGAgaXMgYW4gYWNjZXB0YWJsZSBgbmV0d29yay5lZ3Jlc3NgIGVudHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZ3Jlc3NIb3N0KGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaG9zdC5sZW5ndGggPD0gMjUzICYmIEVHUkVTU19IT1NUX1BBVFRFUk4udGVzdChob3N0KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNvbmZpZy55YW1sXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUGx1Z2luQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW5TcGVjOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvY2tlcmZpbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYnVpbGRUeXBlOiB6LmVudW0oUExVR0lOX0JVSUxEX1RZUEVTKS5vcHRpb25hbCgpLFxuICAvLyBEZXRlcm1pbmlzdGljIGJ1aWxkIHRhZyB3cml0dGVuIGJ5IGJ1aWxkLXBsdWdpbi1pbWFnZXMuc2hcbiAgLy8gKGBwLTxuYW1lPi08c2hhMjU2OjEyPmApLiBJbmZvcm1hdGlvbmFsIG9ubHkgb24gdGhlIHVwbG9hZCBwYXRoIOKAlFxuICAvLyB0aGUgcGxhdGZvcm0gZG9lc24ndCBhY3Qgb24gaXQsIGJ1dCBpdCBsaXZlcyBpbiB0aGUgc2FtZSBjb25maWdcbiAgLy8gZmlsZSBhcyB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgbWV0YWRhdGEgc28gcmUtcnVucyBjYW4gc2hvcnQtY2lyY3VpdFxuICAvLyB1bmNoYW5nZWQgcGx1Z2lucyB3aXRob3V0IG5lZWRpbmcgYSBzZXBhcmF0ZSAuaW1hZ2UtaGFzaCBzaWRlY2FyLlxuICBpbWFnZVRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSkuc3RyaWN0KClcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdwcmVidWlsdCcgJiYgZC5kb2NrZXJmaWxlKSwge1xuICAgIG1lc3NhZ2U6ICdkb2NrZXJmaWxlIGlzIG5vdCBhbGxvd2VkIHdoZW4gYnVpbGRUeXBlIGlzIHByZWJ1aWx0JyxcbiAgfSlcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JyAmJiBkLmRvY2tlcmZpbGUpLCB7XG4gICAgbWVzc2FnZTogJ2RvY2tlcmZpbGUgaXMgbm90IGFsbG93ZWQgd2hlbiBidWlsZFR5cGUgaXMgbWV0YWRhdGFfb25seScsXG4gIH0pO1xuZXhwb3J0IHR5cGUgUGx1Z2luQ29uZmlnSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5Db25maWdTY2hlbWE+O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGx1Z2luLXNwZWMueWFtbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gbmFtZS92ZXJzaW9uL2NvbW1hbmRzIGFyZSB0aGUgcmVxdWlyZWQtZmllbGQgY29udHJhY3QsIGJ1dCB0aGV5J3JlIGNoZWNrZWQgYnlcbi8vIHtAbGluayBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtfSAodGhlIHN0YWJsZSBcIm5hbWUsIHZlcnNpb24sIGFuZFxuLy8gY29tbWFuZHMgYXJlIHJlcXVpcmVkXCIgbWVzc2FnZSBhbmQgdGhlIE1hbnVhbEFwcHJvdmFsU3RlcCBjYXJ2ZS1vdXQpLiBIZXJlXG4vLyB0aGV5J3JlIG9wdGlvbmFsIHN0cmluZ3M7IHRoZSBzY2hlbWEncyBqb2IgaXMgdG8gcmVqZWN0IG1hbGZvcm1lZCAqdHlwZXMqIG9uXG4vLyB0aGUgZmllbGRzIHRoYXQgZmxvdyBkb3duc3RyZWFtIHVuY2hlY2tlZC5cbmV4cG9ydCBjb25zdCBQbHVnaW5TcGVjU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcGx1Z2luVHlwZTogei5lbnVtKFBMVUdJTl9UWVBFUykub3B0aW9uYWwoKSxcbiAgY29tcHV0ZVR5cGU6IHouZW51bShQTFVHSU5fQ09NUFVURV9UWVBFUykub3B0aW9uYWwoKSxcbiAgLy8gPj0gMCBtaW51dGVzOiBNYW51YWxBcHByb3ZhbFN0ZXAgc3BlY3MgbGVnaXRpbWF0ZWx5IGRlY2xhcmUgYHRpbWVvdXQ6IDBgLlxuICB0aW1lb3V0OiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgZmFpbHVyZUJlaGF2aW9yOiB6LmVudW0oUExVR0lOX0ZBSUxVUkVfQkVIQVZJT1JTKS5vcHRpb25hbCgpLFxuICBzZWNyZXRzOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICByZXF1aXJlZDogei5ib29sZWFuKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSkpLm9wdGlvbmFsKCksXG4gIC8vIEFjY2VwdCBhbiBleHBsaWNpdCBgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogbnVsbGAgKGEgTWFudWFsQXBwcm92YWxTdGVwIC9cbiAgLy8gb3V0cHV0LWxlc3Mgc3RlcCBsZWdpdGltYXRlbHkgZGVjbGFyZXMgaXQpIGFuZCBub3JtYWxpemUgaXQgdG8gYHVuZGVmaW5lZGAuXG4gIC8vIFdpdGhvdXQgYC5udWxsaXNoKClgIGEgcHJlc2VudCBZQU1MIGBudWxsYCBmYWlscyB0aGUgYmFyZSBzdHJpbmcgY2hlY2sgYW5kXG4gIC8vIDQwMHMgdGhlIHdob2xlIHVwbG9hZC5cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsaXNoKCkudHJhbnNmb3JtKCh2KSA9PiB2ID8/IHVuZGVmaW5lZCksXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pKS5vcHRpb25hbCgpLFxuICBkb2NrZXJmaWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGluc3RhbGxDb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGJ1aWxkQXJnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgcmVxdWlyZWRNZXRhZGF0YTogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICByZXF1aXJlZFZhcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLy8gS2VwdCBhcyBmcmVlLXN0cmluZyBtYXBzIHJhdGhlciB0aGFuIGEgdmFsdWUgZW51bTogc2hpcHBlZCBzcGVjcyB1c2UgYm90aFxuICAvLyBgYm9vbGAgYW5kIGBib29sZWFuYCwgYW5kIHRoZSBjb2VyY2lvbi12cy1kZWNsYXJlZC10eXBlIGNvbnNpc3RlbmN5IGlzXG4gIC8vIGVuZm9yY2VkIHNlcGFyYXRlbHkgYnkgdGhlIHRlbXBsYXRlIGNvbnRyYWN0IGNoZWNrLiBUaGUgc2NoZW1hIG9ubHlcbiAgLy8gZ3VhcmFudGVlcyB0aGV5J3JlIHN0cmluZy12YWx1ZWQgcmVjb3JkcyBoZXJlLlxuICBtZXRhZGF0YVR5cGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB2YXJzVHlwZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8vIEEgY29tbWFuZCB0aGUgYnVpbGQgdG9vbGluZyBydW5zIGFnYWluc3QgdGhlIGJ1aWx0IGltYWdlXG4gIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoLCB0ZXN0LXBsdWdpbnMuc2ggLS1idWlsZCwgYHBsdWdpbiB0ZXN0YCkuXG4gIHNtb2tlVGVzdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyBEb2N1bWVudGF0aW9uICsgdHJ1c3QgbWV0YWRhdGEuIFRoZSBSRUFETUUgaXMgTk9UIGEgc3BlYyBmaWVsZCDigJQgaXRcbiAgLy8gaXMgUkVBRE1FLm1kIGF0IHRoZSB6aXAgcm9vdC5cbiAgbGljZW5zZTogei5zdHJpbmcoKS5yZWZpbmUoaXNBbGxvd2VkU3BkeElkLCB7XG4gICAgbWVzc2FnZTogJ211c3QgYmUgYSBzdXBwb3J0ZWQgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIgKGUuZy4gQXBhY2hlLTIuMCwgTUlUKScsXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNoYW5nZWxvZzogei5zdHJpbmcoKS5yZWZpbmUoKHYpID0+IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2KS5sZW5ndGggPD0gUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsIHtcbiAgICBtZXNzYWdlOiBgbXVzdCBiZSBhdCBtb3N0ICR7UExVR0lOX0NIQU5HRUxPR19NQVhfQllURVN9IGJ5dGVzYCxcbiAgfSkub3B0aW9uYWwoKSxcbiAgaG9tZXBhZ2VVcmw6IFByb2plY3RVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgc291cmNlVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIC8vIENhdGFsb2cgbWV0YWRhdGE6IHRoZSBjYXJkIG9uZS1saW5lciBhbmQgdGhlIGRvY3MgbGluay4gU2FtZVxuICAvLyB2YWxpZGF0b3JzIGFzIGEgdmFsdWUgdHlwZWQgaW50byB0aGUgdXBsb2FkIGZvcm0uXG4gIHN1bW1hcnk6IFBMVUdJTl9DQVRBTE9HX0ZJRUxEX1NDSEVNQVMuc3VtbWFyeS5vcHRpb25hbCgpLFxuICBkb2N1bWVudGF0aW9uVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIGljb246IHoudW5pb24oW1xuICAgIEljb25LZXlTY2hlbWEsXG4gICAgei5vYmplY3QoeyBrZXk6IEljb25LZXlTY2hlbWEsIGJhZGdlOiBJY29uS2V5U2NoZW1hLm9wdGlvbmFsKCkgfSkuc3RyaWN0KCksXG4gIF0pLm9wdGlvbmFsKCksXG4gIG5ldHdvcms6IHoub2JqZWN0KHtcbiAgICBlZ3Jlc3M6IHouYXJyYXkoei5zdHJpbmcoKS5yZWZpbmUoaXNWYWxpZEVncmVzc0hvc3QsIHtcbiAgICAgIG1lc3NhZ2U6ICdtdXN0IGJlIGEgYmFyZSBob3N0bmFtZSAobm8gc2NoZW1lLCBwb3J0IG9yIHBhdGg7IG9uZSBsZWFkaW5nICouIGFsbG93ZWQpJyxcbiAgICB9KSkubWF4KEVHUkVTU19NQVhfSE9TVFMpLm9wdGlvbmFsKCksXG4gIH0pLnN0cmljdCgpLm9wdGlvbmFsKCksXG59KS5zdHJpY3QoKTtcbmV4cG9ydCB0eXBlIFBsdWdpblNwZWNJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFBsdWdpblNwZWNTY2hlbWE+O1xuXG4vKipcbiAqIFJlc3VsdCBvZiBjaGVja2luZyBhIHBhcnNlZCBZQU1MIGRvY3VtZW50IGFnYWluc3QgYSBwYWNrYWdlIHNjaGVtYTpcbiAqIGBpc3N1ZXNgIGFyZSB0aGUgaW5kaXZpZHVhbCBwcm9ibGVtcywgYG1lc3NhZ2VgIHRoZSBvbmUtbGluZSBmb3JtIHRoZSB1cGxvYWRcbiAqIEFQSSByZXBvcnRzIChgcGx1Z2luLXNwZWMueWFtbDogPHBhdGg+OiA8cHJvYmxlbT47IOKApmApLlxuICovXG5leHBvcnQgdHlwZSBQYWNrYWdlQ2hlY2s8VD4gPSB7IG9rOiB0cnVlOyB2YWx1ZTogVCB9IHwgeyBvazogZmFsc2U7IGlzc3Vlczogc3RyaW5nW107IG1lc3NhZ2U6IHN0cmluZyB9O1xuXG5jb25zdCBpc01hcHBpbmcgPSAocmF3OiB1bmtub3duKTogcmF3IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+XG4gIHR5cGVvZiByYXcgPT09ICdvYmplY3QnICYmIHJhdyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShyYXcpO1xuXG5mdW5jdGlvbiBjaGVja0FnYWluc3Q8VD4oZmlsZTogc3RyaW5nLCByYXc6IHVua25vd24sIHNjaGVtYTogei5ab2RUeXBlPFQ+LCB3aXRoUGF0aDogYm9vbGVhbik6IFBhY2thZ2VDaGVjazxUPiB7XG4gIGlmICghaXNNYXBwaW5nKHJhdykpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYCR7ZmlsZX0gbXVzdCBiZSBhIFlBTUwgbWFwcGluZ2A7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBpc3N1ZXM6IFttZXNzYWdlXSwgbWVzc2FnZSB9O1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2UocmF3KTtcbiAgaWYgKHJlc3VsdC5zdWNjZXNzKSByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHJlc3VsdC5kYXRhIH07XG4gIGNvbnN0IGlzc3VlcyA9IHJlc3VsdC5lcnJvci5pc3N1ZXMubWFwKGkgPT4gKHdpdGhQYXRoID8gYCR7aS5wYXRoLmpvaW4oJy4nKSB8fCAnKHJvb3QpJ306ICR7aS5tZXNzYWdlfWAgOiBpLm1lc3NhZ2UpKTtcbiAgcmV0dXJuIHsgb2s6IGZhbHNlLCBpc3N1ZXMsIG1lc3NhZ2U6IGAke2ZpbGV9OiAke2lzc3Vlcy5qb2luKCc7ICcpfWAgfTtcbn1cblxuLyoqIENoZWNrIGEgcGFyc2VkIGBwbHVnaW4tc3BlYy55YW1sYCBkb2N1bWVudCBhZ2FpbnN0IHtAbGluayBQbHVnaW5TcGVjU2NoZW1hfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsdWdpblNwZWMocmF3OiB1bmtub3duKTogUGFja2FnZUNoZWNrPFBsdWdpblNwZWNJbnB1dD4ge1xuICByZXR1cm4gY2hlY2tBZ2FpbnN0KCdwbHVnaW4tc3BlYy55YW1sJywgcmF3LCBQbHVnaW5TcGVjU2NoZW1hLCB0cnVlKTtcbn1cblxuLyoqIENoZWNrIGEgcGFyc2VkIGBjb25maWcueWFtbGAgZG9jdW1lbnQgYWdhaW5zdCB7QGxpbmsgUGx1Z2luQ29uZmlnU2NoZW1hfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsdWdpbkNvbmZpZyhyYXc6IHVua25vd24pOiBQYWNrYWdlQ2hlY2s8UGx1Z2luQ29uZmlnSW5wdXQ+IHtcbiAgcmV0dXJuIGNoZWNrQWdhaW5zdCgnY29uZmlnLnlhbWwnLCByYXcsIFBsdWdpbkNvbmZpZ1NjaGVtYSwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFRoZSByZXF1aXJlZC1maWVsZCBjb250cmFjdDogYG5hbWVgIGFuZCBgdmVyc2lvbmAgYWx3YXlzLCBgY29tbWFuZHNgIGZvclxuICogZXZlcnkgdHlwZSBleGNlcHQgYE1hbnVhbEFwcHJvdmFsU3RlcGAuIFJldHVybnMgdGhlIHVwbG9hZCdzIG1lc3NhZ2UsIG9yIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtKHNwZWM6IFBpY2s8UGx1Z2luU3BlY0lucHV0LCAnbmFtZScgfCAndmVyc2lvbicgfCAnY29tbWFuZHMnIHwgJ3BsdWdpblR5cGUnPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBpc0FwcHJvdmFsU3RlcCA9IHNwZWMucGx1Z2luVHlwZSA9PT0gJ01hbnVhbEFwcHJvdmFsU3RlcCc7XG4gIGlmICghc3BlYy5uYW1lIHx8ICFzcGVjLnZlcnNpb24gfHwgKCFpc0FwcHJvdmFsU3RlcCAmJiAhc3BlYy5jb21tYW5kcykpIHtcbiAgICByZXR1cm4gJ0ludmFsaWQgc3BlYzogbmFtZSwgdmVyc2lvbiwgYW5kIGNvbW1hbmRzIGFyZSByZXF1aXJlZCc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMtc2NoZW1hLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc3BlYy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxHQUMvRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWxHLGdGQUFnRjtBQUNoRixlQUFlO0FBQ2YsZ0ZBQWdGO0FBRWhGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLENBQVUsQ0FBQztBQUN4RyxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixDQUFVLENBQUM7QUFDL0YsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQVUsQ0FBQztBQUN0RixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDNUUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBVSxDQUFDO0FBR3hGLDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDbEQsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHNEQUFz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QUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sd0RBQXdELENBQUM7SUFDbEUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwbHVnaW4gUEFDS0FHRSBzY2hlbWFzOiBgcGx1Z2luLXNwZWMueWFtbGAgYW5kIGBjb25maWcueWFtbGAsIGV4YWN0bHkgYXNcbiAqIHRoZSBwbHVnaW4gc2VydmljZSB2YWxpZGF0ZXMgYW4gdXBsb2FkLiBTaGFyZWQgZnJvbSBhcGktY29yZSBzbyB0aGUgdXBsb2FkXG4gKiBwYXRoIChhcGkvcGx1Z2luKSBhbmQgdGhlIENMSSAoYHBpcGVsaW5lLW1hbmFnZXIgcGx1Z2luIHZhbGlkYXRlYCAvXG4gKiBgcGx1Z2luIHB1Ymxpc2hgKSBhcHBseSBPTkUgc2NoZW1hIGFuZCBjYW4ndCBkcmlmdC5cbiAqXG4gKiBQdXJlOiBubyBZQU1MIHBhcnNpbmcsIG5vIGZpbGVzeXN0ZW0uIENhbGxlcnMgcGFyc2UgKHdpdGggdGhlaXIgb3duIHNpemUgYW5kXG4gKiBhbGlhcyBib3VuZHMpIGFuZCBoYW5kIHRoZSByZXN1bHRpbmcgb2JqZWN0IHRvIHtAbGluayBjaGVja1BsdWdpblNwZWN9IC9cbiAqIHtAbGluayBjaGVja1BsdWdpbkNvbmZpZ30uXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7XG4gIEljb25LZXlTY2hlbWEsIFBMVUdJTl9DQVRBTE9HX0ZJRUxEX1NDSEVNQVMsIFByb2plY3RVcmxTY2hlbWEsIGlzQWxsb3dlZFNwZHhJZCxcbn0gZnJvbSAnLi9wbHVnaW4tY2F0YWxvZy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBQTFVHSU5fQ0hBTkdFTE9HX01BWF9CWVRFUywgaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luIH0gZnJvbSAnLi4vdHlwZXMvcGx1Z2luLWNhdGFsb2cuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVm9jYWJ1bGFyaWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIGBCdWlsZEltYWdlYCBpcyB0aGUgbWFuYWdlZCB0b29sY2hhaW4ncyBidWlsZCBpbWFnZSAoYHBpcGVsaW5lLWJvb3RzdHJhcGAsXG4gKiBkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnMSk6IGEgcHJlYnVpbHQgaW1hZ2Ugd2l0aCBub1xuICogY29tbWFuZHMsIG5ldmVyIGEgcGlwZWxpbmUgc3RlcC4ge0BsaW5rIFNURVBfUExVR0lOX1RZUEVTfSBpcyB0aGUgc3Vic2V0IGFcbiAqIHN0ZXAgKG9yIGEgZ2VuZXJhdG9yKSBtYXkgdXNlLlxuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1RZUEVTID0gWydDb2RlQnVpbGRTdGVwJywgJ1NoZWxsU3RlcCcsICdNYW51YWxBcHByb3ZhbFN0ZXAnLCAnQnVpbGRJbWFnZSddIGFzIGNvbnN0O1xuLyoqIFRoZSBwbHVnaW4gdHlwZXMgYSBwaXBlbGluZSBzdGVwIGNhbiB1c2Ug4oCUIGV2ZXJ5IHR5cGUgZXhjZXB0IGBCdWlsZEltYWdlYC4gKi9cbmV4cG9ydCBjb25zdCBTVEVQX1BMVUdJTl9UWVBFUyA9IFsnQ29kZUJ1aWxkU3RlcCcsICdTaGVsbFN0ZXAnLCAnTWFudWFsQXBwcm92YWxTdGVwJ10gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgUExVR0lOX0NPTVBVVEVfVFlQRVMgPSBbJ1NNQUxMJywgJ01FRElVTScsICdMQVJHRScsICdYMl9MQVJHRSddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9GQUlMVVJFX0JFSEFWSU9SUyA9IFsnZmFpbCcsICd3YXJuJywgJ2lnbm9yZSddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9CVUlMRF9UWVBFUyA9IFsnYnVpbGRfaW1hZ2UnLCAncHJlYnVpbHQnLCAnbWV0YWRhdGFfb25seSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUGx1Z2luQnVpbGRUeXBlID0gdHlwZW9mIFBMVUdJTl9CVUlMRF9UWVBFU1tudW1iZXJdO1xuXG4vKiogUGx1Z2luIG5hbWU6IGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMgYW5kIGh5cGhlbnMuICovXG5leHBvcnQgY29uc3QgUExVR0lOX05BTUVfUEFUVEVSTiA9IC9eW2EtejAtOS1dKyQvO1xuLyoqIFBsdWdpbiB2ZXJzaW9uOiBzZW12ZXIsIHdpdGggb3B0aW9uYWwgYC1wcmVyZWxlYXNlYCBhbmQgYCtidWlsZGAgbWV0YWRhdGEuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1ZFUlNJT05fUEFUVEVSTiA9IC9eXFxkK1xcLlxcZCtcXC5cXGQrKC1bYS16QS1aMC05Li1dKyk/KFxcK1thLXpBLVowLTkuLV0rKT8kLztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIG5ldHdvcmsuZWdyZXNzIChzcGVjLW9ubHkgdHJ1c3QgbWV0YWRhdGEpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWF4IGRlY2xhcmVkIGBuZXR3b3JrLmVncmVzc2AgaG9zdG5hbWVzLiAqL1xuZXhwb3J0IGNvbnN0IEVHUkVTU19NQVhfSE9TVFMgPSA1MDtcblxuLyoqXG4gKiBBIGJhcmUgRE5TIGhvc3RuYW1lLCBvcHRpb25hbGx5IHdpdGggT05FIGxlYWRpbmcgYCouYCB3aWxkY2FyZCBsYWJlbC4gTm9cbiAqIHNjaGVtZSwgcG9ydCwgcGF0aCwgdXNlcmluZm8gb3IgSVAgbGl0ZXJhbCDigJQgYSBkZWNsYXJlZCBlZ3Jlc3MgdGFyZ2V0IGlzIGFcbiAqIG5hbWUgdGhlIHJldmlld2VyIGNhbiByZWFkLlxuICovXG5jb25zdCBFR1JFU1NfSE9TVF9QQVRURVJOID0gL14oPzpcXCpcXC4pPyg/OlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pP1xcLikrW2Etel1bYS16MC05LV17MCw2MX1bYS16MC05XSQvO1xuXG4vKiogVHJ1ZSB3aGVuIGBob3N0YCBpcyBhbiBhY2NlcHRhYmxlIGBuZXR3b3JrLmVncmVzc2AgZW50cnkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVncmVzc0hvc3QoaG9zdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBob3N0Lmxlbmd0aCA8PSAyNTMgJiYgRUdSRVNTX0hPU1RfUEFUVEVSTi50ZXN0KGhvc3QpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWFuYWdlZCB0b29sY2hhaW4gbWV0YWRhdGEgKEJ1aWxkSW1hZ2Ugc3BlY3MpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQW4gRVhBQ1Qgc2VtdmVyIChubyByYW5nZSk6IGAxLjIuM2AsIG9wdGlvbmFsbHkgYC1wcmVgIC8gYCtidWlsZGAuICovXG5jb25zdCBFWEFDVF9TRU1WRVJfUEFUVEVSTiA9IC9eXFxkK1xcLlxcZCtcXC5cXGQrKC1bMC05QS1aYS16Li1dKyk/KFxcK1swLTlBLVphLXouLV0rKT8kLztcbmNvbnN0IGV4YWN0U2VtdmVyID0gei5zdHJpbmcoKS5yZWdleChFWEFDVF9TRU1WRVJfUEFUVEVSTiwgeyBtZXNzYWdlOiAnbXVzdCBiZSBhbiBleGFjdCBzZW12ZXIgdmVyc2lvbiAoZS5nLiAxLjIuMyknIH0pO1xuXG4vKipcbiAqIFRoZSB0b29sIHZlcnNpb25zIGEgbWFuYWdlZCBidWlsZCBpbWFnZSBjYXJyaWVzLCB3cml0dGVuIGJ5XG4gKiBgc3luYy1pbWFnZS10YWdzLnNoYCBmcm9tIHRoZSBEb2NrZXJmaWxlIGBBUkdgcy4gRXZlcnkgZmllbGQgaXMgcmVxdWlyZWQgYW5kXG4gKiBleGFjdDogdGhpcyBpcyB3aGF0IHRoZSByZWxlYXNlIElTLCBub3Qgd2hhdCBpdCBhY2NlcHRzLlxuICovXG5leHBvcnQgY29uc3QgUGx1Z2luVG9vbGNoYWluU2NoZW1hID0gei5vYmplY3Qoe1xuICBwaXBlbGluZU1hbmFnZXI6IGV4YWN0U2VtdmVyLFxuICBhd3NDZGs6IGV4YWN0U2VtdmVyLFxuICBjZGtBc3NldHM6IGV4YWN0U2VtdmVyLFxuICBlc2J1aWxkOiBleGFjdFNlbXZlcixcbiAgcG5wbTogZXhhY3RTZW12ZXIsXG4gIG5vZGU6IGV4YWN0U2VtdmVyLFxufSkuc3RyaWN0KCk7XG5leHBvcnQgdHlwZSBQbHVnaW5Ub29sY2hhaW4gPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5Ub29sY2hhaW5TY2hlbWE+O1xuXG4vKipcbiAqIFdoZXJlIGEgbWFuYWdlZCBidWlsZCBpbWFnZSdzIGB0b29sY2hhaW5gIGlzIHBlcnNpc3RlZDogaXRzIHBsdWdpbiByb3cnc1xuICogYG1ldGFkYXRhYCwgb25lIGZsYXQgYHRvb2xjaGFpbi48ZmllbGQ+YCBrZXkgcGVyIHRvb2wgKHRoZSBjb2x1bW4gaXMgYSBmbGF0XG4gKiBzdHJpbmcgbWFwLCBhbmQgYSBgQnVpbGRJbWFnZWAgc3BlYyBtYXkgY2Fycnkgbm8gc3RlcCBgbWV0YWRhdGFgIG9mIGl0cyBvd24sXG4gKiBzbyB0aGUga2V5cyBuZXZlciBjb2xsaWRlKS4gV3JpdHRlbiBhdCB1cGxvYWQgYnkge0BsaW5rIHRvb2xjaGFpbk1ldGFkYXRhfSxcbiAqIHJlYWQgYnkge0BsaW5rIHRvb2xjaGFpbkZyb21NZXRhZGF0YX0g4oCUIHRoZSBwbGF0Zm9ybS1kZWZhdWx0IG1ldGFkYXRhIGd1YXJkXG4gKiBhbmQgdGhlIHJlc29sdmVyIGJvdGggZ28gdGhyb3VnaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRPT0xDSEFJTl9NRVRBREFUQV9QUkVGSVggPSAndG9vbGNoYWluLic7XG5cbi8qKiBUaGUgZmxhdCBgbWV0YWRhdGFgIGVudHJpZXMgdGhhdCBwZXJzaXN0IGB0b29sY2hhaW5gIG9uIGEgYnVpbGQgaW1hZ2UncyByb3cuICovXG5leHBvcnQgZnVuY3Rpb24gdG9vbGNoYWluTWV0YWRhdGEodG9vbGNoYWluOiBQbHVnaW5Ub29sY2hhaW4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0b29sY2hhaW4pLm1hcCgoW2ssIHZdKSA9PiBbYCR7VE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWH0ke2t9YCwgdl0pKTtcbn1cblxuLyoqXG4gKiBUaGUgYHRvb2xjaGFpbmAgYSBidWlsZCBpbWFnZSdzIHJvdyBjYXJyaWVzLCBvciBgbnVsbGAgd2hlbiBpdHMgYG1ldGFkYXRhYFxuICogaG9sZHMgbm8gY29tcGxldGUsIHZhbGlkIG9uZSAoZXZlcnkgZmllbGQgcmVxdWlyZWQgYW5kIGV4YWN0IOKAlCB0aGUgc2FtZVxuICogc2NoZW1hIHRoZSB1cGxvYWQgdmFsaWRhdGVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvb2xjaGFpbkZyb21NZXRhZGF0YShtZXRhZGF0YTogdW5rbm93bik6IFBsdWdpblRvb2xjaGFpbiB8IG51bGwge1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICBjb25zdCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChrLnN0YXJ0c1dpdGgoVE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWCkpIGZpZWxkc1trLnNsaWNlKFRPT0xDSEFJTl9NRVRBREFUQV9QUkVGSVgubGVuZ3RoKV0gPSB2O1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IFBsdWdpblRvb2xjaGFpblNjaGVtYS5zYWZlUGFyc2UoZmllbGRzKTtcbiAgcmV0dXJuIHBhcnNlZC5zdWNjZXNzID8gcGFyc2VkLmRhdGEgOiBudWxsO1xufVxuXG4vKiogQSBidWlsZC1pbnB1dCBoYXNoOiA2NCBsb3dlcmNhc2UgaGV4IGNoYXJhY3RlcnMgKHNoYTI1NiksIG9wdGlvbmFsbHkgYHNoYTI1NjpgLXByZWZpeGVkLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TT1VSQ0VfRElHRVNUX1BBVFRFUk4gPSAvXihzaGEyNTY6KT9bYS1mMC05XXs2NH0kLztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNvbmZpZy55YW1sXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUGx1Z2luQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW5TcGVjOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvY2tlcmZpbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYnVpbGRUeXBlOiB6LmVudW0oUExVR0lOX0JVSUxEX1RZUEVTKS5vcHRpb25hbCgpLFxuICAvLyBEZXRlcm1pbmlzdGljIGJ1aWxkIHRhZyB3cml0dGVuIGJ5IGJ1aWxkLXBsdWdpbi1pbWFnZXMuc2hcbiAgLy8gKGBwLTxuYW1lPi08c2hhMjU2OjEyPmApLiBJbmZvcm1hdGlvbmFsIG9ubHkgb24gdGhlIHVwbG9hZCBwYXRoIOKAlFxuICAvLyB0aGUgcGxhdGZvcm0gZG9lc24ndCBhY3Qgb24gaXQsIGJ1dCBpdCBsaXZlcyBpbiB0aGUgc2FtZSBjb25maWdcbiAgLy8gZmlsZSBhcyB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgbWV0YWRhdGEgc28gcmUtcnVucyBjYW4gc2hvcnQtY2lyY3VpdFxuICAvLyB1bmNoYW5nZWQgcGx1Z2lucyB3aXRob3V0IG5lZWRpbmcgYSBzZXBhcmF0ZSAuaW1hZ2UtaGFzaCBzaWRlY2FyLlxuICBpbWFnZVRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSkuc3RyaWN0KClcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdwcmVidWlsdCcgJiYgZC5kb2NrZXJmaWxlKSwge1xuICAgIG1lc3NhZ2U6ICdkb2NrZXJmaWxlIGlzIG5vdCBhbGxvd2VkIHdoZW4gYnVpbGRUeXBlIGlzIHByZWJ1aWx0JyxcbiAgfSlcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JyAmJiBkLmRvY2tlcmZpbGUpLCB7XG4gICAgbWVzc2FnZTogJ2RvY2tlcmZpbGUgaXMgbm90IGFsbG93ZWQgd2hlbiBidWlsZFR5cGUgaXMgbWV0YWRhdGFfb25seScsXG4gIH0pO1xuZXhwb3J0IHR5cGUgUGx1Z2luQ29uZmlnSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5Db25maWdTY2hlbWE+O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGx1Z2luLXNwZWMueWFtbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gbmFtZS92ZXJzaW9uL2NvbW1hbmRzIGFyZSB0aGUgcmVxdWlyZWQtZmllbGQgY29udHJhY3QsIGJ1dCB0aGV5J3JlIGNoZWNrZWQgYnlcbi8vIHtAbGluayBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtfSAodGhlIHN0YWJsZSBcIm5hbWUsIHZlcnNpb24sIGFuZFxuLy8gY29tbWFuZHMgYXJlIHJlcXVpcmVkXCIgbWVzc2FnZSBhbmQgdGhlIE1hbnVhbEFwcHJvdmFsU3RlcCBjYXJ2ZS1vdXQpLiBIZXJlXG4vLyB0aGV5J3JlIG9wdGlvbmFsIHN0cmluZ3M7IHRoZSBzY2hlbWEncyBqb2IgaXMgdG8gcmVqZWN0IG1hbGZvcm1lZCAqdHlwZXMqIG9uXG4vLyB0aGUgZmllbGRzIHRoYXQgZmxvdyBkb3duc3RyZWFtIHVuY2hlY2tlZC5cbmV4cG9ydCBjb25zdCBQbHVnaW5TcGVjU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcGx1Z2luVHlwZTogei5lbnVtKFBMVUdJTl9UWVBFUykub3B0aW9uYWwoKSxcbiAgY29tcHV0ZVR5cGU6IHouZW51bShQTFVHSU5fQ09NUFVURV9UWVBFUykub3B0aW9uYWwoKSxcbiAgLy8gPj0gMCBtaW51dGVzOiBNYW51YWxBcHByb3ZhbFN0ZXAgc3BlY3MgbGVnaXRpbWF0ZWx5IGRlY2xhcmUgYHRpbWVvdXQ6IDBgLlxuICB0aW1lb3V0OiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgZmFpbHVyZUJlaGF2aW9yOiB6LmVudW0oUExVR0lOX0ZBSUxVUkVfQkVIQVZJT1JTKS5vcHRpb25hbCgpLFxuICBzZWNyZXRzOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICByZXF1aXJlZDogei5ib29sZWFuKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSkpLm9wdGlvbmFsKCksXG4gIC8vIEFjY2VwdCBhbiBleHBsaWNpdCBgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogbnVsbGAgKGEgTWFudWFsQXBwcm92YWxTdGVwIC9cbiAgLy8gb3V0cHV0LWxlc3Mgc3RlcCBsZWdpdGltYXRlbHkgZGVjbGFyZXMgaXQpIGFuZCBub3JtYWxpemUgaXQgdG8gYHVuZGVmaW5lZGAuXG4gIC8vIFdpdGhvdXQgYC5udWxsaXNoKClgIGEgcHJlc2VudCBZQU1MIGBudWxsYCBmYWlscyB0aGUgYmFyZSBzdHJpbmcgY2hlY2sgYW5kXG4gIC8vIDQwMHMgdGhlIHdob2xlIHVwbG9hZC5cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsaXNoKCkudHJhbnNmb3JtKCh2KSA9PiB2ID8/IHVuZGVmaW5lZCksXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pKS5vcHRpb25hbCgpLFxuICBkb2NrZXJmaWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGluc3RhbGxDb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGJ1aWxkQXJnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgcmVxdWlyZWRNZXRhZGF0YTogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICByZXF1aXJlZFZhcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLy8gS2VwdCBhcyBmcmVlLXN0cmluZyBtYXBzIHJhdGhlciB0aGFuIGEgdmFsdWUgZW51bTogc2hpcHBlZCBzcGVjcyB1c2UgYm90aFxuICAvLyBgYm9vbGAgYW5kIGBib29sZWFuYCwgYW5kIHRoZSBjb2VyY2lvbi12cy1kZWNsYXJlZC10eXBlIGNvbnNpc3RlbmN5IGlzXG4gIC8vIGVuZm9yY2VkIHNlcGFyYXRlbHkgYnkgdGhlIHRlbXBsYXRlIGNvbnRyYWN0IGNoZWNrLiBUaGUgc2NoZW1hIG9ubHlcbiAgLy8gZ3VhcmFudGVlcyB0aGV5J3JlIHN0cmluZy12YWx1ZWQgcmVjb3JkcyBoZXJlLlxuICBtZXRhZGF0YVR5cGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB2YXJzVHlwZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8vIEEgY29tbWFuZCB0aGUgYnVpbGQgdG9vbGluZyBydW5zIGFnYWluc3QgdGhlIGJ1aWx0IGltYWdlXG4gIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoLCB0ZXN0LXBsdWdpbnMuc2ggLS1idWlsZCwgYHBsdWdpbiB0ZXN0YCkuXG4gIHNtb2tlVGVzdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyBEb2N1bWVudGF0aW9uICsgdHJ1c3QgbWV0YWRhdGEuIFRoZSBSRUFETUUgaXMgTk9UIGEgc3BlYyBmaWVsZCDigJQgaXRcbiAgLy8gaXMgUkVBRE1FLm1kIGF0IHRoZSB6aXAgcm9vdC5cbiAgbGljZW5zZTogei5zdHJpbmcoKS5yZWZpbmUoaXNBbGxvd2VkU3BkeElkLCB7XG4gICAgbWVzc2FnZTogJ211c3QgYmUgYSBzdXBwb3J0ZWQgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIgKGUuZy4gQXBhY2hlLTIuMCwgTUlUKScsXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNoYW5nZWxvZzogei5zdHJpbmcoKS5yZWZpbmUoKHYpID0+IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2KS5sZW5ndGggPD0gUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsIHtcbiAgICBtZXNzYWdlOiBgbXVzdCBiZSBhdCBtb3N0ICR7UExVR0lOX0NIQU5HRUxPR19NQVhfQllURVN9IGJ5dGVzYCxcbiAgfSkub3B0aW9uYWwoKSxcbiAgaG9tZXBhZ2VVcmw6IFByb2plY3RVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgc291cmNlVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIC8vIENhdGFsb2cgbWV0YWRhdGE6IHRoZSBjYXJkIG9uZS1saW5lciBhbmQgdGhlIGRvY3MgbGluay4gU2FtZVxuICAvLyB2YWxpZGF0b3JzIGFzIGEgdmFsdWUgdHlwZWQgaW50byB0aGUgdXBsb2FkIGZvcm0uXG4gIHN1bW1hcnk6IFBMVUdJTl9DQVRBTE9HX0ZJRUxEX1NDSEVNQVMuc3VtbWFyeS5vcHRpb25hbCgpLFxuICBkb2N1bWVudGF0aW9uVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIGljb246IHoudW5pb24oW1xuICAgIEljb25LZXlTY2hlbWEsXG4gICAgei5vYmplY3QoeyBrZXk6IEljb25LZXlTY2hlbWEsIGJhZGdlOiBJY29uS2V5U2NoZW1hLm9wdGlvbmFsKCkgfSkuc3RyaWN0KCksXG4gIF0pLm9wdGlvbmFsKCksXG4gIG5ldHdvcms6IHoub2JqZWN0KHtcbiAgICBlZ3Jlc3M6IHouYXJyYXkoei5zdHJpbmcoKS5yZWZpbmUoaXNWYWxpZEVncmVzc0hvc3QsIHtcbiAgICAgIG1lc3NhZ2U6ICdtdXN0IGJlIGEgYmFyZSBob3N0bmFtZSAobm8gc2NoZW1lLCBwb3J0IG9yIHBhdGg7IG9uZSBsZWFkaW5nICouIGFsbG93ZWQpJyxcbiAgICB9KSkubWF4KEVHUkVTU19NQVhfSE9TVFMpLm9wdGlvbmFsKCksXG4gIH0pLnN0cmljdCgpLm9wdGlvbmFsKCksXG4gIC8vIE1hbmFnZWQgdG9vbGNoYWluIG1ldGFkYXRhIOKAlCBgQnVpbGRJbWFnZWAgc3BlY3Mgb25seSAoc2VlIHRoZSBjaGVjayBiZWxvdykuXG4gIHRvb2xjaGFpbjogUGx1Z2luVG9vbGNoYWluU2NoZW1hLm9wdGlvbmFsKCksXG4gIHNvdXJjZURpZ2VzdDogei5zdHJpbmcoKS5yZWdleChQTFVHSU5fU09VUkNFX0RJR0VTVF9QQVRURVJOLCB7IG1lc3NhZ2U6ICdtdXN0IGJlIGEgc2hhMjU2IGhleCBkaWdlc3QnIH0pLm9wdGlvbmFsKCksXG59KS5zdHJpY3QoKS5zdXBlclJlZmluZSgoc3BlYywgY3R4KSA9PiB7XG4gIGZvciAoY29uc3QgaXNzdWUgb2YgYnVpbGRJbWFnZVNwZWNQcm9ibGVtcyhzcGVjKSkgY3R4LmFkZElzc3VlKHsgY29kZTogJ2N1c3RvbScsIHBhdGg6IFtpc3N1ZS5wYXRoXSwgbWVzc2FnZTogaXNzdWUubWVzc2FnZSB9KTtcbn0pO1xuZXhwb3J0IHR5cGUgUGx1Z2luU3BlY0lucHV0ID0gei5pbmZlcjx0eXBlb2YgUGx1Z2luU3BlY1NjaGVtYT47XG5cbi8qKlxuICogVGhlIGBCdWlsZEltYWdlYCBydWxlcyAoZG9jcy9wbGFucy9ib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZCDCpzEpOiBhXG4gKiBtYW5hZ2VkIGJ1aWxkIGltYWdlIHVzZXMgYSBtYW5hZ2VkIHRvb2xjaGFpbiBuYW1lLCBjYXJyaWVzIGB0b29sY2hhaW5gIGFuZFxuICogYHNvdXJjZURpZ2VzdGAsIGFuZCBkZWNsYXJlcyBub3RoaW5nIGEgc3RlcCB3b3VsZCBydW4gKGBjb21tYW5kc2AsXG4gKiBgaW5zdGFsbENvbW1hbmRzYCwgYG1ldGFkYXRhYCkuIENvbnZlcnNlbHkgYHRvb2xjaGFpbmAgLyBgc291cmNlRGlnZXN0YCBhcmVcbiAqIHJlZnVzZWQgb24gZXZlcnkgb3RoZXIgdHlwZS4gVGhhdCBpdCBpcyBgcHJlYnVpbHRgIGlzIHRoZSB1cGxvYWQgcGF0aCdzXG4gKiBjaGVjazogdGhlIGNoZWNrZWQtaW4gYGNvbmZpZy55YW1sYCBzYXlzIGBidWlsZF9pbWFnZWAgdW50aWwgdGhlIGJ1aWxkXG4gKiBzY3JpcHQgZmxpcHMgaXQuXG4gKi9cbmludGVyZmFjZSBCdWlsZEltYWdlQ2hlY2tJbnB1dCB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBsdWdpblR5cGU/OiBzdHJpbmc7XG4gIHRvb2xjaGFpbj86IHVua25vd247XG4gIHNvdXJjZURpZ2VzdD86IHVua25vd247XG4gIGNvbW1hbmRzPzogdW5rbm93bjtcbiAgaW5zdGFsbENvbW1hbmRzPzogdW5rbm93bjtcbiAgbWV0YWRhdGE/OiB1bmtub3duO1xufVxuXG5mdW5jdGlvbiBidWlsZEltYWdlU3BlY1Byb2JsZW1zKHNwZWM6IEJ1aWxkSW1hZ2VDaGVja0lucHV0KTogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PiB7XG4gIGNvbnN0IG91dDogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PiA9IFtdO1xuICBpZiAoc3BlYy5wbHVnaW5UeXBlICE9PSAnQnVpbGRJbWFnZScpIHtcbiAgICBpZiAoc3BlYy50b29sY2hhaW4gIT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAndG9vbGNoYWluJywgbWVzc2FnZTogJ2lzIG9ubHkgYWxsb3dlZCBvbiBhIEJ1aWxkSW1hZ2UgcGx1Z2luJyB9KTtcbiAgICBpZiAoc3BlYy5zb3VyY2VEaWdlc3QgIT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAnc291cmNlRGlnZXN0JywgbWVzc2FnZTogJ2lzIG9ubHkgYWxsb3dlZCBvbiBhIEJ1aWxkSW1hZ2UgcGx1Z2luJyB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmIChzcGVjLm5hbWUgIT09IHVuZGVmaW5lZCAmJiAhaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luKHNwZWMubmFtZSkpIHtcbiAgICBvdXQucHVzaCh7IHBhdGg6ICdwbHVnaW5UeXBlJywgbWVzc2FnZTogJ0J1aWxkSW1hZ2UgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBtYW5hZ2VkIHRvb2xjaGFpbiBwbHVnaW5zJyB9KTtcbiAgfVxuICBpZiAoc3BlYy50b29sY2hhaW4gPT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAndG9vbGNoYWluJywgbWVzc2FnZTogJ2lzIHJlcXVpcmVkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICBpZiAoc3BlYy5zb3VyY2VEaWdlc3QgPT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAnc291cmNlRGlnZXN0JywgbWVzc2FnZTogJ2lzIHJlcXVpcmVkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnY29tbWFuZHMnLCAnaW5zdGFsbENvbW1hbmRzJywgJ21ldGFkYXRhJ10gYXMgY29uc3QpIHtcbiAgICBpZiAoc3BlY1tmaWVsZF0gIT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiBmaWVsZCwgbWVzc2FnZTogJ2lzIG5vdCBhbGxvd2VkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNoZWNraW5nIGEgcGFyc2VkIFlBTUwgZG9jdW1lbnQgYWdhaW5zdCBhIHBhY2thZ2Ugc2NoZW1hOlxuICogYGlzc3Vlc2AgYXJlIHRoZSBpbmRpdmlkdWFsIHByb2JsZW1zLCBgbWVzc2FnZWAgdGhlIG9uZS1saW5lIGZvcm0gdGhlIHVwbG9hZFxuICogQVBJIHJlcG9ydHMgKGBwbHVnaW4tc3BlYy55YW1sOiA8cGF0aD46IDxwcm9ibGVtPjsg4oCmYCkuXG4gKi9cbmV4cG9ydCB0eXBlIFBhY2thZ2VDaGVjazxUPiA9IHsgb2s6IHRydWU7IHZhbHVlOiBUIH0gfCB7IG9rOiBmYWxzZTsgaXNzdWVzOiBzdHJpbmdbXTsgbWVzc2FnZTogc3RyaW5nIH07XG5cbmNvbnN0IGlzTWFwcGluZyA9IChyYXc6IHVua25vd24pOiByYXcgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT5cbiAgdHlwZW9mIHJhdyA9PT0gJ29iamVjdCcgJiYgcmF3ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHJhdyk7XG5cbmZ1bmN0aW9uIGNoZWNrQWdhaW5zdDxUPihmaWxlOiBzdHJpbmcsIHJhdzogdW5rbm93biwgc2NoZW1hOiB6LlpvZFR5cGU8VD4sIHdpdGhQYXRoOiBib29sZWFuKTogUGFja2FnZUNoZWNrPFQ+IHtcbiAgaWYgKCFpc01hcHBpbmcocmF3KSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtmaWxlfSBtdXN0IGJlIGEgWUFNTCBtYXBwaW5nYDtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGlzc3VlczogW21lc3NhZ2VdLCBtZXNzYWdlIH07XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gc2NoZW1hLnNhZmVQYXJzZShyYXcpO1xuICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogcmVzdWx0LmRhdGEgfTtcbiAgY29uc3QgaXNzdWVzID0gcmVzdWx0LmVycm9yLmlzc3Vlcy5tYXAoaSA9PiAod2l0aFBhdGggPyBgJHtpLnBhdGguam9pbignLicpIHx8ICcocm9vdCknfTogJHtpLm1lc3NhZ2V9YCA6IGkubWVzc2FnZSkpO1xuICByZXR1cm4geyBvazogZmFsc2UsIGlzc3VlcywgbWVzc2FnZTogYCR7ZmlsZX06ICR7aXNzdWVzLmpvaW4oJzsgJyl9YCB9O1xufVxuXG4vKiogQ2hlY2sgYSBwYXJzZWQgYHBsdWdpbi1zcGVjLnlhbWxgIGRvY3VtZW50IGFnYWluc3Qge0BsaW5rIFBsdWdpblNwZWNTY2hlbWF9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUGx1Z2luU3BlYyhyYXc6IHVua25vd24pOiBQYWNrYWdlQ2hlY2s8UGx1Z2luU3BlY0lucHV0PiB7XG4gIHJldHVybiBjaGVja0FnYWluc3QoJ3BsdWdpbi1zcGVjLnlhbWwnLCByYXcsIFBsdWdpblNwZWNTY2hlbWEsIHRydWUpO1xufVxuXG4vKiogQ2hlY2sgYSBwYXJzZWQgYGNvbmZpZy55YW1sYCBkb2N1bWVudCBhZ2FpbnN0IHtAbGluayBQbHVnaW5Db25maWdTY2hlbWF9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUGx1Z2luQ29uZmlnKHJhdzogdW5rbm93bik6IFBhY2thZ2VDaGVjazxQbHVnaW5Db25maWdJbnB1dD4ge1xuICByZXR1cm4gY2hlY2tBZ2FpbnN0KCdjb25maWcueWFtbCcsIHJhdywgUGx1Z2luQ29uZmlnU2NoZW1hLCBmYWxzZSk7XG59XG5cbi8qKlxuICogVGhlIHJlcXVpcmVkLWZpZWxkIGNvbnRyYWN0OiBgbmFtZWAgYW5kIGB2ZXJzaW9uYCBhbHdheXMsIGBjb21tYW5kc2AgZm9yXG4gKiBldmVyeSB0eXBlIGV4Y2VwdCBgTWFudWFsQXBwcm92YWxTdGVwYCBhbmQgYEJ1aWxkSW1hZ2VgIChuZWl0aGVyIHJ1bnNcbiAqIGNvbW1hbmRzKS4gUmV0dXJucyB0aGUgdXBsb2FkJ3MgbWVzc2FnZSwgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdWdpblNwZWNSZXF1aXJlZEZpZWxkc1Byb2JsZW0oc3BlYzogUGljazxQbHVnaW5TcGVjSW5wdXQsICduYW1lJyB8ICd2ZXJzaW9uJyB8ICdjb21tYW5kcycgfCAncGx1Z2luVHlwZSc+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHJ1bnNOb0NvbW1hbmRzID0gc3BlYy5wbHVnaW5UeXBlID09PSAnTWFudWFsQXBwcm92YWxTdGVwJyB8fCBzcGVjLnBsdWdpblR5cGUgPT09ICdCdWlsZEltYWdlJztcbiAgaWYgKCFzcGVjLm5hbWUgfHwgIXNwZWMudmVyc2lvbiB8fCAoIXJ1bnNOb0NvbW1hbmRzICYmICFzcGVjLmNvbW1hbmRzKSkge1xuICAgIHJldHVybiAnSW52YWxpZCBzcGVjOiBuYW1lLCB2ZXJzaW9uLCBhbmQgY29tbWFuZHMgYXJlIHJlcXVpcmVkJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -73,7 +73,7 @@
73
73
  "containerized"
74
74
  ],
75
75
  "engines": {
76
- "node": ">= 26.13.0"
76
+ "node": ">= 26.13.1"
77
77
  },
78
78
  "devEngines": {
79
79
  "packageManager": {
@@ -127,7 +127,7 @@
127
127
  ]
128
128
  }
129
129
  },
130
- "version": "5.2.9",
130
+ "version": "5.2.11",
131
131
  "bugs": {
132
132
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
133
133
  },