@pipeline-builder/api-core 5.2.3 → 5.2.4
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/lib/constants/ai-providers.d.ts +3 -22
- package/lib/constants/ai-providers.js +6 -56
- package/lib/errors/app-errors.d.ts +14 -0
- package/lib/errors/app-errors.js +21 -1
- package/lib/helpers/sse-helpers.d.ts +33 -3
- package/lib/helpers/sse-helpers.js +91 -19
- package/lib/middleware/auth.js +6 -3
- package/lib/middleware/deferred-quota-check.d.ts +5 -0
- package/lib/middleware/deferred-quota-check.js +33 -0
- package/lib/middleware/ecosystem-guard.d.ts +3 -3
- package/lib/middleware/ecosystem-guard.js +5 -5
- package/lib/middleware/index.d.ts +5 -2
- package/lib/middleware/index.js +6 -3
- package/lib/middleware/on-behalf.d.ts +37 -0
- package/lib/middleware/on-behalf.js +143 -0
- package/lib/middleware/permission-gates.d.ts +11 -0
- package/lib/middleware/permission-gates.js +7 -1
- package/lib/middleware/quota-exempt-routes.d.ts +36 -0
- package/lib/middleware/quota-exempt-routes.js +47 -0
- package/lib/middleware/route-table.d.ts +104 -0
- package/lib/middleware/route-table.js +72 -2
- package/lib/middleware/service-tokens.d.ts +8 -0
- package/lib/middleware/service-tokens.js +2 -1
- package/lib/middleware/step-up.js +11 -1
- package/lib/services/ai-call-weight.d.ts +24 -0
- package/lib/services/ai-call-weight.js +77 -0
- package/lib/services/audit-context.d.ts +105 -0
- package/lib/services/audit-context.js +134 -0
- package/lib/services/index.d.ts +7 -2
- package/lib/services/index.js +7 -2
- package/lib/services/org-ai-client.d.ts +61 -0
- package/lib/services/org-ai-client.js +112 -0
- package/lib/services/quota-increment-batcher.d.ts +81 -0
- package/lib/services/quota-increment-batcher.js +166 -0
- package/lib/services/quota.d.ts +158 -14
- package/lib/services/quota.js +252 -22
- package/lib/services/remote-audit-client.d.ts +44 -1
- package/lib/services/remote-audit-client.js +106 -20
- package/lib/services/version-vuln-policy.d.ts +174 -0
- package/lib/services/version-vuln-policy.js +242 -0
- package/lib/types/ai-catalog.d.ts +63 -0
- package/lib/types/ai-catalog.js +82 -0
- package/lib/types/ask-proposals.js +6 -6
- package/lib/types/build-catalog.d.ts +154 -0
- package/lib/types/build-catalog.js +158 -0
- package/lib/types/common.d.ts +37 -3
- package/lib/types/common.js +20 -2
- package/lib/types/ecosystem-notifications.d.ts +5 -5
- package/lib/types/ecosystem-notifications.js +9 -3
- package/lib/types/error-codes.d.ts +13 -6
- package/lib/types/error-codes.js +18 -8
- package/lib/types/feature-flags.d.ts +6 -4
- package/lib/types/feature-flags.js +11 -6
- package/lib/types/index.d.ts +6 -4
- package/lib/types/index.js +12 -5
- package/lib/types/metadata-keys.d.ts +6 -0
- package/lib/types/metadata-keys.js +4 -1
- package/lib/types/permissions.d.ts +344 -3
- package/lib/types/permissions.js +596 -21
- package/lib/types/pipeline.d.ts +39 -0
- package/lib/types/pipeline.js +57 -1
- package/lib/types/plugin-health.d.ts +0 -2
- package/lib/types/plugin-health.js +1 -11
- package/lib/types/plugin-scan.d.ts +192 -42
- package/lib/types/plugin-scan.js +159 -43
- package/lib/types/quota-catalog.d.ts +247 -0
- package/lib/types/quota-catalog.js +122 -0
- package/lib/types/quota-tiers.d.ts +118 -0
- package/lib/types/quota-tiers.js +153 -2
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +131 -1
- package/lib/types/wire-vocabulary.js +8 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/response.d.ts +35 -2
- package/lib/utils/response.js +42 -3
- package/lib/validation/ai-schemas.d.ts +27 -0
- package/lib/validation/ai-schemas.js +31 -5
- package/lib/validation/plugin-schemas.d.ts +15 -0
- package/lib/validation/plugin-schemas.js +28 -1
- package/package.json +31 -2
|
@@ -93,6 +93,9 @@ export const METADATA_KEY_CATALOG = {
|
|
|
93
93
|
ENABLE_METRICS: { key: 'aws:cdk:operations:metrics', category: 'Operations', label: 'Enable CloudWatch failure alarms', type: 'boolean' },
|
|
94
94
|
ARTIFACT_RETENTION_DAYS: { key: 'aws:cdk:operations:artifactretentiondays', category: 'Operations', label: 'Artifact retention in days', type: 'string' },
|
|
95
95
|
PIPELINE_VARIABLES: { key: 'aws:cdk:operations:variables', category: 'Operations', label: 'Pipeline runtime variables (JSON)', type: 'string' },
|
|
96
|
+
// Adds a report-only verify step per stage that grades the plugin images the
|
|
97
|
+
// pipeline is about to run (POST /plugins/runtime-check) — never a block.
|
|
98
|
+
RUNTIME_VULN_CHECK: { key: 'aws:cdk:operations:runtimevulncheck', category: 'Operations', label: 'Grade plugin images before each stage runs (report-only)', type: 'boolean' },
|
|
96
99
|
// ── Encryption (namespace: encryption — custom synth in PipelineBuilder) ──
|
|
97
100
|
KMS_KEY_ARN: { key: 'aws:cdk:encryption:kmskeyarn', category: 'Encryption', label: 'Custom KMS key ARN for artifacts', type: 'string' },
|
|
98
101
|
};
|
|
@@ -114,4 +117,4 @@ export const METADATA_KEY_GROUPS = (() => {
|
|
|
114
117
|
}
|
|
115
118
|
return groups;
|
|
116
119
|
})();
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEta2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9tZXRhZGF0YS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUEwQ3RDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHlEQUF5RDtJQUN6RCxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsNkNBQTZDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDeEksa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsaURBQWlELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN0SixnQ0FBZ0MsRUFBRSxFQUFFLEdBQUcsRUFBRSw2REFBNkQsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxrQ0FBa0MsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzlMLHdCQUF3QixFQUFFLEVBQUUsR0FBRyxFQUFFLHNEQUFzRCxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDdkssbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0RBQWtELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN6SiwwQkFBMEIsRUFBRSxFQUFFLEdBQUcsRUFBRSx3REFBd0QsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzdLLGlDQUFpQyxFQUFFLEVBQUUsR0FBRyxFQUFFLDhEQUE4RCxFQUFFLFFBQVEsRUFB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LENBQUM7QUFrQnBHOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFnQyxDQUFDLEdBQUcsRUFBRTtJQUNwRSxNQUFNLE1BQU0sR0FBdUIsRUFBRSxDQUFDO0lBQ3RDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBZ0MsRUFBRSxDQUFDO1FBQ3ZGLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwaXBlbGluZSBNRVRBREFUQSBLRVkgY2F0YWxvZyDigJQgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJvdGhcbiAqIHNpZGVzIG9mIHRoZSBwcm9kdWN0LlxuICpcbiAqIEtleSBmb3JtYXQ6IGBhd3M6Y2RrOntuYW1lc3BhY2V9Ontwcm9wZXJ0eX1gIChhbGwgbG93ZXJjYXNlKS4gVGhlc2UgbWF0Y2ggdGhlXG4gKiBrZXlzIHByb2R1Y2VkIGJ5IGBnZXRDdXN0b21LZXkobmFtZXNwYWNlLCBwcm9wZXJ0eSlgIGFuZCBsb29rZWQgdXAgYnlcbiAqIGBidWlsZENvbmZpZ0Zyb21NZXRhZGF0YWAgaW4gcGlwZWxpbmUtY29yZS5cbiAqXG4gKiBPbmUgdGFibGUgZHJpdmVzIGV2ZXJ5dGhpbmc6IGBNZXRhZGF0YUtleXNgICh0aGUgc3ludGgtdGltZSBjb25zdGFudHNcbiAqIHJlLWV4cG9ydGVkIGJ5IGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlYCkgYW5kIGBNRVRBREFUQV9LRVlfR1JPVVBTYFxuICogKHRoZSBncm91cGVkIHBpY2tlciB0aGUgcGlwZWxpbmUgZm9ybSBidWlsZGVyIHJlbmRlcnMpIGFyZSBCT1RIIGRlcml2ZWQgZnJvbVxuICogYE1FVEFEQVRBX0tFWV9DQVRBTE9HYCwgc28gYSBrZXkgY2FuIG5ldmVyIGV4aXN0IG9uIG9uZSBzaWRlIG9ubHkuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgZGVwZW5kZW5jeS1mcmVlIHNvIHRoZSBicm93c2VyIGNhbiBpbXBvcnQgaXQgdGhyb3VnaCB0aGVcbiAqIGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS9tZXRhZGF0YS1rZXlzYCBzdWJwYXRoLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZXRhZGF0YSA9IHtcbiAqICAgW01ldGFkYXRhS2V5cy5TRUxGX01VVEFUSU9OXTogdHJ1ZSxcbiAqICAgW01ldGFkYXRhS2V5cy5QVUJMSVNIX0FTU0VUU19JTl9QQVJBTExFTF06IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqL1xuXG4vKiogVGhlIHZhbHVlIHNoYXBlIGEgbWV0YWRhdGEga2V5IGFjY2VwdHMgaW4gdGhlIGZvcm0gYnVpbGRlci4gKi9cbmV4cG9ydCB0eXBlIE1ldGFkYXRhS2V5VHlwZSA9ICdib29sZWFuJyB8ICdzdHJpbmcnO1xuXG4vKiogT25lIGNhdGFsb2cgZW50cnk6IHRoZSB3aXJlIGtleSBwbHVzIGV2ZXJ5dGhpbmcgdGhlIHBpY2tlciBuZWVkcyB0byByZW5kZXIgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhS2V5RW50cnkge1xuICAvKiogVGhlIGBhd3M6Y2RrOuKApmAga2V5IHdyaXR0ZW4gaW50byBhIHBpcGVsaW5lJ3MgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKiogUGlja2VyIGdyb3VwIGhlYWRpbmcuICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5OiBzdHJpbmc7XG4gIC8qKiBIdW1hbiBsYWJlbCBzaG93biBpbiB0aGUgcGlja2VyLiAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAvKiogVmFsdWUgZWRpdG9yIHRvIHJlbmRlci4gKi9cbiAgcmVhZG9ubHkgdHlwZTogTWV0YWRhdGFLZXlUeXBlO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHN1cHBvcnRlZCBtZXRhZGF0YSBrZXksIGtleWVkIGJ5IGl0cyBgTWV0YWRhdGFLZXlzYCBjb25zdGFudCBuYW1lIGFuZFxuICogbGlzdGVkIGluIHBpY2tlciBvcmRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX0tFWV9DQVRBTE9HID0ge1xuICAvLyDilIDilIAgQ29kZVBpcGVsaW5lIChuYW1lc3BhY2U6IHBpcGVsaW5lczpjb2RlcGlwZWxpbmUpIOKUgOKUgFxuICBTRUxGX01VVEFUSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpzZWxmbXV0YXRpb24nLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnU2VsZiBNdXRhdGlvbicsIHR5cGU6ICdib29sZWFuJyB9LFxuICBDUk9TU19BQ0NPVU5UX0tFWVM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNyb3NzYWNjb3VudGtleXMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ3Jvc3MgQWNjb3VudCBLZXlzJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIERPQ0tFUl9FTkFCTEVEX0ZPUl9TRUxGX01VVEFUSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpkb2NrZXJlbmFibGVkZm9yc2VsZm11dGF0aW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0RvY2tlciBFbmFibGVkIGZvciBTZWxmIE11dGF0aW9uJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIERPQ0tFUl9FTkFCTEVEX0ZPUl9TWU5USDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZG9ja2VyZW5hYmxlZGZvcnN5bnRoJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0RvY2tlciBFbmFibGVkIGZvciBTeW50aCcsIHR5cGU6ICdib29sZWFuJyB9LFxuICBFTkFCTEVfS0VZX1JPVEFUSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTplbmFibGVrZXlyb3RhdGlvbicsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdFbmFibGUgS2V5IFJvdGF0aW9uJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIFBVQkxJU0hfQVNTRVRTX0lOX1BBUkFMTEVMOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpwdWJsaXNoYXNzZXRzaW5wYXJhbGxlbCcsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdQdWJsaXNoIEFzc2V0cyBpbiBQYXJhbGxlbCcsIHR5cGU6ICdib29sZWFuJyB9LFxuICBSRVVTRV9DUk9TU19SRUdJT05fU1VQUE9SVF9TVEFDS1M6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnJldXNlY3Jvc3NyZWdpb25zdXBwb3J0c3RhY2tzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1JldXNlIENyb3NzIFJlZ2lvbiBTdXBwb3J0IFN0YWNrcycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBVU0VfQ0hBTkdFX1NFVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnVzZWNoYW5nZXNldHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnVXNlIENoYW5nZSBTZXRzJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIFVTRV9QSVBFTElORV9ST0xFX0ZPUl9BQ1RJT05TOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTp1c2VwaXBlbGluZXJvbGVmb3JhY3Rpb25zJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1VzZSBQaXBlbGluZSBSb2xlIGZvciBBY3Rpb25zJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEFSVElGQUNUX0JVQ0tFVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6YXJ0aWZhY3RidWNrZXQnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQXJ0aWZhY3QgQnVja2V0JywgdHlwZTogJ3N0cmluZycgfSxcbiAgQVNTRVRfUFVCTElTSElOR19DT0RFX0JVSUxEX0RFRkFVTFRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTphc3NldHB1Ymxpc2hpbmdjb2RlYnVpbGRkZWZhdWx0cycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdBc3NldCBQdWJsaXNoaW5nIENvZGVCdWlsZCBEZWZhdWx0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENES19BU1NFVFNfQ0xJX1ZFUlNJT046IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNka2Fzc2V0c2NsaXZlcnNpb24nLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ0RLIEFzc2V0cyBDTEkgVmVyc2lvbicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENMSV9WRVJTSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjbGl2ZXJzaW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NMSSBWZXJzaW9uJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y29kZWJ1aWxkZGVmYXVsdHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ29kZUJ1aWxkIERlZmF1bHRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09ERV9QSVBFTElORTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y29kZXBpcGVsaW5lJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NvZGVQaXBlbGluZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENST1NTX1JFR0lPTl9SRVBMSUNBVElPTl9CVUNLRVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjcm9zc3JlZ2lvbnJlcGxpY2F0aW9uYnVja2V0cycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdDcm9zcyBSZWdpb24gUmVwbGljYXRpb24gQnVja2V0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIERPQ0tFUl9DUkVERU5USUFMUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZG9ja2VyY3JlZGVudGlhbHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnRG9ja2VyIENyZWRlbnRpYWxzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUElQRUxJTkVfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6cGlwZWxpbmVuYW1lJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1BpcGVsaW5lIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQSVBFTElORV9UWVBFOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpwaXBlbGluZXR5cGUnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnUGlwZWxpbmUgVHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBJUEVMSU5FX1JPTEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnJvbGUnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnUGlwZWxpbmUgUm9sZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNFTEZfTVVUQVRJT05fQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c2VsZm11dGF0aW9uY29kZWJ1aWxkZGVmYXVsdHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnU2VsZiBNdXRhdGlvbiBDb2RlQnVpbGQgRGVmYXVsdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTWU5USDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c3ludGgnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnU3ludGgnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTWU5USF9DT0RFX0JVSUxEX0RFRkFVTFRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpzeW50aGNvZGVidWlsZGRlZmF1bHRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1N5bnRoIENvZGVCdWlsZCBEZWZhdWx0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIENvZGVCdWlsZFN0ZXAgKG5hbWVzcGFjZTogcGlwZWxpbmVzOmNvZGVidWlsZHN0ZXApIOKUgOKUgFxuICBBQ1RJT05fUk9MRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmFjdGlvbnJvbGUnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0FjdGlvbiBSb2xlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQURESVRJT05BTF9JTlBVVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDphZGRpdGlvbmFsaW5wdXRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdBZGRpdGlvbmFsIElucHV0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEJVSUxEX0VOVklST05NRU5UOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6YnVpbGRlbnZpcm9ubWVudCcsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnQnVpbGQgRW52aXJvbm1lbnQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDQUNIRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNhY2hlJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdDYWNoZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPTU1BTkRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y29tbWFuZHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0NvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09ERV9CVUlMRF9FTlY6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDplbnYnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0Vudmlyb25tZW50JywgdHlwZTogJ3N0cmluZycgfSxcbiAgRU5WX0ZST01fQ0ZOX09VVFBVVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDplbnZmcm9tY2Zub3V0cHV0cycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnRW52IGZyb20gQ0ZOIE91dHB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBGSUxFX1NZU1RFTV9MT0NBVElPTlM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpmaWxlc3lzdGVtbG9jYXRpb25zJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdGaWxlIFN5c3RlbSBMb2NhdGlvbnMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBJTlBVVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmlucHV0JywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdJbnB1dCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIElOU1RBTExfQ09NTUFORFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDppbnN0YWxsY29tbWFuZHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0luc3RhbGwgQ29tbWFuZHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBMT0dHSU5HOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6bG9nZ2luZycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnTG9nZ2luZycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBBUlRJQUxfQlVJTERfU1BFQzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnBhcnRpYWxidWlsZHNwZWMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1BhcnRpYWwgQnVpbGQgU3BlYycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBSSU1BUllfT1VUUFVUX0RJUkVDVE9SWTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnByaW1hcnlvdXRwdXRkaXJlY3RvcnknLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1ByaW1hcnkgT3V0cHV0IERpcmVjdG9yeScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBST0pFQ1RfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnByb2plY3RuYW1lJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdQcm9qZWN0IE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTVEVQX1JPTEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpyb2xlJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdTdGVwIFJvbGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBST0xFX1BPTElDWV9TVEFURU1FTlRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cm9sZXBvbGljeXN0YXRlbWVudHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1JvbGUgUG9saWN5IFN0YXRlbWVudHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBUSU1FT1VUOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6dGltZW91dCcsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnVGltZW91dCcsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIFNoZWxsU3RlcCAobmFtZXNwYWNlOiBwaXBlbGluZXM6c2hlbGxzdGVwKSDilIDilIBcbiAgU0hFTExfQURESVRJT05BTF9JTlBVVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmFkZGl0aW9uYWxpbnB1dHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnQWRkaXRpb25hbCBJbnB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9DT01NQU5EUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6Y29tbWFuZHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnQ29tbWFuZHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9FTlY6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmVudicsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdFbnZpcm9ubWVudCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX0VOVl9GUk9NX0NGTl9PVVRQVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDplbnZmcm9tY2Zub3V0cHV0cycsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdFbnYgZnJvbSBDRk4gT3V0cHV0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX0lOUFVUOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDppbnB1dCcsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdJbnB1dCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX0lOU1RBTExfQ09NTUFORFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmluc3RhbGxjb21tYW5kcycsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdJbnN0YWxsIENvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0hFTExfUFJJTUFSWV9PVVRQVVRfRElSRUNUT1JZOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDpwcmltYXJ5b3V0cHV0ZGlyZWN0b3J5JywgY2F0ZWdvcnk6ICdTaGVsbFN0ZXAnLCBsYWJlbDogJ1ByaW1hcnkgT3V0cHV0IERpcmVjdG9yeScsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIEJ1aWxkRW52aXJvbm1lbnQgKG5hbWVzcGFjZTogY29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQpIOKUgOKUgFxuICBQUklWSUxFR0VEOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6cHJpdmlsZWdlZCcsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ1ByaXZpbGVnZWQnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgQlVJTERfSU1BR0U6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpidWlsZGltYWdlJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnQnVpbGQgSW1hZ2UnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDRVJUSUZJQ0FURTogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmNlcnRpZmljYXRlJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnQ2VydGlmaWNhdGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDT01QVVRFX1RZUEU6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpjb21wdXRldHlwZScsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0NvbXB1dGUgVHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIERPQ0tFUl9TRVJWRVI6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpkb2NrZXJzZXJ2ZXInLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdEb2NrZXIgU2VydmVyJywgdHlwZTogJ3N0cmluZycgfSxcbiAgRU5WSVJPTk1FTlRfVkFSSUFCTEVTOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6ZW52aXJvbm1lbnR2YXJpYWJsZXMnLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdFbnZpcm9ubWVudCBWYXJpYWJsZXMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBGTEVFVDogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmZsZWV0JywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnRmxlZXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gKG5hbWVzcGFjZTogZWMyOm5ldHdvcmspIOKUgOKUgFxuICBORVRXT1JLX1RZUEU6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazp0eXBlJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdOZXR3b3JrIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1ZQQ19JRDogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnZwY2lkJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdWUEMgSUQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NVQk5FVF9JRFM6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazpzdWJuZXRpZHMnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1N1Ym5ldCBJRHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NVQk5FVF9UWVBFOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0dHlwZScsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnU3VibmV0IFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX0FWQUlMQUJJTElUWV9aT05FUzogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOmF2YWlsYWJpbGl0eXpvbmVzJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdBdmFpbGFiaWxpdHkgWm9uZXMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NVQk5FVF9HUk9VUF9OQU1FOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0Z3JvdXBuYW1lJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdTdWJuZXQgR3JvdXAgTmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfU0VDVVJJVFlfR1JPVVBfSURTOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c2VjdXJpdHlncm91cGlkcycsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnU2VjdXJpdHkgR3JvdXAgSURzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19UQUdTOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6dGFncycsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnVlBDIExvb2t1cCBUYWdzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19WUENfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnZwY25hbWUnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1ZQQyBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19SRUdJT046IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazpyZWdpb24nLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1JlZ2lvbicsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIElBTSByb2xlIGNvbmZpZ3VyYXRpb24gKG5hbWVzcGFjZTogaWFtOnJvbGUpIOKUgOKUgFxuICBST0xFX1RZUEU6IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTp0eXBlJywgY2F0ZWdvcnk6ICdJQU0gUm9sZScsIGxhYmVsOiAnUm9sZSBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUk9MRV9BUk46IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTpyb2xlYXJuJywgY2F0ZWdvcnk6ICdJQU0gUm9sZScsIGxhYmVsOiAnUm9sZSBBUk4nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBST0xFX05BTUU6IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTpyb2xlbmFtZScsIGNhdGVnb3J5OiAnSUFNIFJvbGUnLCBsYWJlbDogJ1JvbGUgTmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFJPTEVfTVVUQUJMRTogeyBrZXk6ICdhd3M6Y2RrOmlhbTpyb2xlOm11dGFibGUnLCBjYXRlZ29yeTogJ0lBTSBSb2xlJywgbGFiZWw6ICdNdXRhYmxlJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG5cbiAgLy8g4pSA4pSAIFNlY3VyaXR5IGdyb3VwIGNvbmZpZ3VyYXRpb24gKG5hbWVzcGFjZTogZWMyOnNlY3VyaXR5Z3JvdXApIOKUgOKUgFxuICBTRUNVUklUWV9HUk9VUF9UWVBFOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6dHlwZScsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTRUNVUklUWV9HUk9VUF9JRFM6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDpzZWN1cml0eWdyb3VwaWRzJywgY2F0ZWdvcnk6ICdTZWN1cml0eSBHcm91cCcsIGxhYmVsOiAnU2VjdXJpdHkgR3JvdXAgSURzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0VDVVJJVFlfR1JPVVBfTVVUQUJMRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpzZWN1cml0eWdyb3VwOm11dGFibGUnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdNdXRhYmxlJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIFNFQ1VSSVRZX0dST1VQX05BTUU6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDpzZWN1cml0eWdyb3VwbmFtZScsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTRUNVUklUWV9HUk9VUF9WUENfSUQ6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDp2cGNpZCcsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1ZQQyBJRCcsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIE5vdGlmaWNhdGlvbnMgKG5hbWVzcGFjZTogbm90aWZpY2F0aW9ucykg4pSA4pSAXG4gIE5PVElGSUNBVElPTl9UT1BJQ19BUk46IHsga2V5OiAnYXdzOmNkazpub3RpZmljYXRpb25zOnRvcGljOmFybicsIGNhdGVnb3J5OiAnTm90aWZpY2F0aW9ucycsIGxhYmVsOiAnU05TIFRvcGljIEFSTicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5PVElGSUNBVElPTl9FVkVOVFM6IHsga2V5OiAnYXdzOmNkazpub3RpZmljYXRpb25zOmV2ZW50cycsIGNhdGVnb3J5OiAnTm90aWZpY2F0aW9ucycsIGxhYmVsOiAnTm90aWZpY2F0aW9uIEV2ZW50cycsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIFBpcGVsaW5lIG9wZXJhdGlvbnMgKG5hbWVzcGFjZTogb3BlcmF0aW9ucyDigJQgY3VzdG9tIHN5bnRoIGluIFBpcGVsaW5lQnVpbGRlcikg4pSA4pSAXG4gIEVOQUJMRV9FWEVDVVRJT05fRVZFTlRTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczpleGVjdXRpb25ldmVudHMnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ0VuYWJsZSBleGVjdXRpb24gZXZlbnQgdHJhY2tpbmcnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgRU5BQkxFX01FVFJJQ1M6IHsga2V5OiAnYXdzOmNkazpvcGVyYXRpb25zOm1ldHJpY3MnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ0VuYWJsZSBDbG91ZFdhdGNoIGZhaWx1cmUgYWxhcm1zJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEFSVElGQUNUX1JFVEVOVElPTl9EQVlTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczphcnRpZmFjdHJldGVudGlvbmRheXMnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ0FydGlmYWN0IHJldGVudGlvbiBpbiBkYXlzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUElQRUxJTkVfVkFSSUFCTEVTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczp2YXJpYWJsZXMnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ1BpcGVsaW5lIHJ1bnRpbWUgdmFyaWFibGVzIChKU09OKScsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIEVuY3J5cHRpb24gKG5hbWVzcGFjZTogZW5jcnlwdGlvbiDigJQgY3VzdG9tIHN5bnRoIGluIFBpcGVsaW5lQnVpbGRlcikg4pSA4pSAXG4gIEtNU19LRVlfQVJOOiB7IGtleTogJ2F3czpjZGs6ZW5jcnlwdGlvbjprbXNrZXlhcm4nLCBjYXRlZ29yeTogJ0VuY3J5cHRpb24nLCBsYWJlbDogJ0N1c3RvbSBLTVMga2V5IEFSTiBmb3IgYXJ0aWZhY3RzJywgdHlwZTogJ3N0cmluZycgfSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIE1ldGFkYXRhS2V5RW50cnk+O1xuXG4vKiogQ29uc3RhbnQgbmFtZSDihpIgYGF3czpjZGs64oCmYCBrZXksIGZvciB0eXBvLWZyZWUgc3ludGgtdGltZSBhdXRob3JpbmcuICovXG5leHBvcnQgY29uc3QgTWV0YWRhdGFLZXlzID0gT2JqZWN0LmZyZWV6ZShcbiAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKE1FVEFEQVRBX0tFWV9DQVRBTE9HKS5tYXAoKFtuYW1lLCBlbnRyeV0pID0+IFtuYW1lLCBlbnRyeS5rZXldKSxcbiAgKSxcbikgYXMgeyByZWFkb25seSBbSyBpbiBrZXlvZiB0eXBlb2YgTUVUQURBVEFfS0VZX0NBVEFMT0ddOiAodHlwZW9mIE1FVEFEQVRBX0tFWV9DQVRBTE9HKVtLXVsna2V5J10gfTtcblxuLyoqIEFueSBzdXBwb3J0ZWQgbWV0YWRhdGEga2V5LiAqL1xuZXhwb3J0IHR5cGUgTWV0YWRhdGFLZXkgPSAodHlwZW9mIE1ldGFkYXRhS2V5cylba2V5b2YgdHlwZW9mIE1ldGFkYXRhS2V5c107XG5cbi8qKiBPbmUgcGlja2VyIG9wdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFLZXlPcHRpb24ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogTWV0YWRhdGFLZXlUeXBlO1xufVxuXG4vKiogT25lIHBpY2tlciBncm91cC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFLZXlHcm91cCB7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGtleXM6IE1ldGFkYXRhS2V5T3B0aW9uW107XG59XG5cbi8qKlxuICogVGhlIGNhdGFsb2cgZ3JvdXBlZCBieSBjYXRlZ29yeSwgaW4gZGVjbGFyYXRpb24gb3JkZXIg4oCUIHdoYXQgdGhlIHBpcGVsaW5lXG4gKiBmb3JtIGJ1aWxkZXIncyBtZXRhZGF0YSBwaWNrZXIgcmVuZGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX0tFWV9HUk9VUFM6IHJlYWRvbmx5IE1ldGFkYXRhS2V5R3JvdXBbXSA9ICgoKSA9PiB7XG4gIGNvbnN0IGdyb3VwczogTWV0YWRhdGFLZXlHcm91cFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgT2JqZWN0LnZhbHVlcyhNRVRBREFUQV9LRVlfQ0FUQUxPRykgYXMgcmVhZG9ubHkgTWV0YWRhdGFLZXlFbnRyeVtdKSB7XG4gICAgbGV0IGdyb3VwID0gZ3JvdXBzLmZpbmQoKGcpID0+IGcuY2F0ZWdvcnkgPT09IGVudHJ5LmNhdGVnb3J5KTtcbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICBncm91cCA9IHsgY2F0ZWdvcnk6IGVudHJ5LmNhdGVnb3J5LCBrZXlzOiBbXSB9O1xuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgIH1cbiAgICBncm91cC5rZXlzLnB1c2goeyBrZXk6IGVudHJ5LmtleSwgbGFiZWw6IGVudHJ5LmxhYmVsLCB0eXBlOiBlbnRyeS50eXBlIH0pO1xuICB9XG4gIHJldHVybiBncm91cHM7XG59KSgpO1xuIl19
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEta2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9tZXRhZGF0YS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUEwQ3RDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHlEQUF5RDtJQUN6RCxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsNkNBQTZDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDeEksa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsaURBQWlELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN0SixnQ0FBZ0MsRUFBRSxFQUFFLEdBQUcsRUFBRSw2REFBNkQsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxrQ0FBa0MsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzlMLHdCQUF3QixFQUFFLEVBQUUsR0FBRyxFQUFFLHNEQUFzRCxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDdkssbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0RBQWtELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN6SiwwQkFBMEIsRUFBRSxFQUFFLEdBQUcsRUFBRSx3REFBd0QsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzdLLGlDQUFpQyxFQUFFLEVBQUUsR0FBRyxFQUFFLDhEQUE4RCxFQUFFLFFBQVEsRUFB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T0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMvRSxDQUNnRyxDQUFDO0FBa0JwRzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0MsQ0FBQyxHQUFHLEVBQUU7SUFDcEUsTUFBTSxNQUFNLEdBQXVCLEVBQUUsQ0FBQztJQUN0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQWdDLEVBQUUsQ0FBQztRQUN2RixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGlwZWxpbmUgTUVUQURBVEEgS0VZIGNhdGFsb2cg4oCUIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBib3RoXG4gKiBzaWRlcyBvZiB0aGUgcHJvZHVjdC5cbiAqXG4gKiBLZXkgZm9ybWF0OiBgYXdzOmNkazp7bmFtZXNwYWNlfTp7cHJvcGVydHl9YCAoYWxsIGxvd2VyY2FzZSkuIFRoZXNlIG1hdGNoIHRoZVxuICoga2V5cyBwcm9kdWNlZCBieSBgZ2V0Q3VzdG9tS2V5KG5hbWVzcGFjZSwgcHJvcGVydHkpYCBhbmQgbG9va2VkIHVwIGJ5XG4gKiBgYnVpbGRDb25maWdGcm9tTWV0YWRhdGFgIGluIHBpcGVsaW5lLWNvcmUuXG4gKlxuICogT25lIHRhYmxlIGRyaXZlcyBldmVyeXRoaW5nOiBgTWV0YWRhdGFLZXlzYCAodGhlIHN5bnRoLXRpbWUgY29uc3RhbnRzXG4gKiByZS1leHBvcnRlZCBieSBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZWApIGFuZCBgTUVUQURBVEFfS0VZX0dST1VQU2BcbiAqICh0aGUgZ3JvdXBlZCBwaWNrZXIgdGhlIHBpcGVsaW5lIGZvcm0gYnVpbGRlciByZW5kZXJzKSBhcmUgQk9USCBkZXJpdmVkIGZyb21cbiAqIGBNRVRBREFUQV9LRVlfQ0FUQUxPR2AsIHNvIGEga2V5IGNhbiBuZXZlciBleGlzdCBvbiBvbmUgc2lkZSBvbmx5LlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGRlcGVuZGVuY3ktZnJlZSBzbyB0aGUgYnJvd3NlciBjYW4gaW1wb3J0IGl0IHRocm91Z2ggdGhlXG4gKiBgQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUvbWV0YWRhdGEta2V5c2Agc3VicGF0aC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWV0YWRhdGEgPSB7XG4gKiAgIFtNZXRhZGF0YUtleXMuU0VMRl9NVVRBVElPTl06IHRydWUsXG4gKiAgIFtNZXRhZGF0YUtleXMuUFVCTElTSF9BU1NFVFNfSU5fUEFSQUxMRUxdOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cblxuLyoqIFRoZSB2YWx1ZSBzaGFwZSBhIG1ldGFkYXRhIGtleSBhY2NlcHRzIGluIHRoZSBmb3JtIGJ1aWxkZXIuICovXG5leHBvcnQgdHlwZSBNZXRhZGF0YUtleVR5cGUgPSAnYm9vbGVhbicgfCAnc3RyaW5nJztcblxuLyoqIE9uZSBjYXRhbG9nIGVudHJ5OiB0aGUgd2lyZSBrZXkgcGx1cyBldmVyeXRoaW5nIHRoZSBwaWNrZXIgbmVlZHMgdG8gcmVuZGVyIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUtleUVudHJ5IHtcbiAgLyoqIFRoZSBgYXdzOmNkazrigKZgIGtleSB3cml0dGVuIGludG8gYSBwaXBlbGluZSdzIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIFBpY2tlciBncm91cCBoZWFkaW5nLiAqL1xuICByZWFkb25seSBjYXRlZ29yeTogc3RyaW5nO1xuICAvKiogSHVtYW4gbGFiZWwgc2hvd24gaW4gdGhlIHBpY2tlci4gKi9cbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgLyoqIFZhbHVlIGVkaXRvciB0byByZW5kZXIuICovXG4gIHJlYWRvbmx5IHR5cGU6IE1ldGFkYXRhS2V5VHlwZTtcbn1cblxuLyoqXG4gKiBFdmVyeSBzdXBwb3J0ZWQgbWV0YWRhdGEga2V5LCBrZXllZCBieSBpdHMgYE1ldGFkYXRhS2V5c2AgY29uc3RhbnQgbmFtZSBhbmRcbiAqIGxpc3RlZCBpbiBwaWNrZXIgb3JkZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVRBREFUQV9LRVlfQ0FUQUxPRyA9IHtcbiAgLy8g4pSA4pSAIENvZGVQaXBlbGluZSAobmFtZXNwYWNlOiBwaXBlbGluZXM6Y29kZXBpcGVsaW5lKSDilIDilIBcbiAgU0VMRl9NVVRBVElPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c2VsZm11dGF0aW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1NlbGYgTXV0YXRpb24nLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgQ1JPU1NfQUNDT1VOVF9LRVlTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjcm9zc2FjY291bnRrZXlzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0Nyb3NzIEFjY291bnQgS2V5cycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBET0NLRVJfRU5BQkxFRF9GT1JfU0VMRl9NVVRBVElPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZG9ja2VyZW5hYmxlZGZvcnNlbGZtdXRhdGlvbicsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdEb2NrZXIgRW5hYmxlZCBmb3IgU2VsZiBNdXRhdGlvbicsIHR5cGU6ICdib29sZWFuJyB9LFxuICBET0NLRVJfRU5BQkxFRF9GT1JfU1lOVEg6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmRvY2tlcmVuYWJsZWRmb3JzeW50aCcsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdEb2NrZXIgRW5hYmxlZCBmb3IgU3ludGgnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgRU5BQkxFX0tFWV9ST1RBVElPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZW5hYmxla2V5cm90YXRpb24nLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnRW5hYmxlIEtleSBSb3RhdGlvbicsIHR5cGU6ICdib29sZWFuJyB9LFxuICBQVUJMSVNIX0FTU0VUU19JTl9QQVJBTExFTDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6cHVibGlzaGFzc2V0c2lucGFyYWxsZWwnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnUHVibGlzaCBBc3NldHMgaW4gUGFyYWxsZWwnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgUkVVU0VfQ1JPU1NfUkVHSU9OX1NVUFBPUlRfU1RBQ0tTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpyZXVzZWNyb3NzcmVnaW9uc3VwcG9ydHN0YWNrcycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdSZXVzZSBDcm9zcyBSZWdpb24gU3VwcG9ydCBTdGFja3MnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgVVNFX0NIQU5HRV9TRVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTp1c2VjaGFuZ2VzZXRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1VzZSBDaGFuZ2UgU2V0cycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBVU0VfUElQRUxJTkVfUk9MRV9GT1JfQUNUSU9OUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6dXNlcGlwZWxpbmVyb2xlZm9yYWN0aW9ucycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdVc2UgUGlwZWxpbmUgUm9sZSBmb3IgQWN0aW9ucycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBBUlRJRkFDVF9CVUNLRVQ6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmFydGlmYWN0YnVja2V0JywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0FydGlmYWN0IEJ1Y2tldCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEFTU0VUX1BVQkxJU0hJTkdfQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6YXNzZXRwdWJsaXNoaW5nY29kZWJ1aWxkZGVmYXVsdHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQXNzZXQgUHVibGlzaGluZyBDb2RlQnVpbGQgRGVmYXVsdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDREtfQVNTRVRTX0NMSV9WRVJTSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjZGthc3NldHNjbGl2ZXJzaW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NESyBBc3NldHMgQ0xJIFZlcnNpb24nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDTElfVkVSU0lPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y2xpdmVyc2lvbicsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdDTEkgVmVyc2lvbicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPREVfQlVJTERfREVGQVVMVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNvZGVidWlsZGRlZmF1bHRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NvZGVCdWlsZCBEZWZhdWx0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPREVfUElQRUxJTkU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNvZGVwaXBlbGluZScsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdDb2RlUGlwZWxpbmUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDUk9TU19SRUdJT05fUkVQTElDQVRJT05fQlVDS0VUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y3Jvc3NyZWdpb25yZXBsaWNhdGlvbmJ1Y2tldHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ3Jvc3MgUmVnaW9uIFJlcGxpY2F0aW9uIEJ1Y2tldHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBET0NLRVJfQ1JFREVOVElBTFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmRvY2tlcmNyZWRlbnRpYWxzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0RvY2tlciBDcmVkZW50aWFscycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBJUEVMSU5FX05BTUU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnBpcGVsaW5lbmFtZScsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdQaXBlbGluZSBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUElQRUxJTkVfVFlQRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6cGlwZWxpbmV0eXBlJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1BpcGVsaW5lIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQSVBFTElORV9ST0xFOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpyb2xlJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1BpcGVsaW5lIFJvbGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTRUxGX01VVEFUSU9OX0NPREVfQlVJTERfREVGQVVMVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnNlbGZtdXRhdGlvbmNvZGVidWlsZGRlZmF1bHRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1NlbGYgTXV0YXRpb24gQ29kZUJ1aWxkIERlZmF1bHRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU1lOVEg6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnN5bnRoJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1N5bnRoJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU1lOVEhfQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c3ludGhjb2RlYnVpbGRkZWZhdWx0cycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdTeW50aCBDb2RlQnVpbGQgRGVmYXVsdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBDb2RlQnVpbGRTdGVwIChuYW1lc3BhY2U6IHBpcGVsaW5lczpjb2RlYnVpbGRzdGVwKSDilIDilIBcbiAgQUNUSU9OX1JPTEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDphY3Rpb25yb2xlJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdBY3Rpb24gUm9sZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEFERElUSU9OQUxfSU5QVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6YWRkaXRpb25hbGlucHV0cycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnQWRkaXRpb25hbCBJbnB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBCVUlMRF9FTlZJUk9OTUVOVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmJ1aWxkZW52aXJvbm1lbnQnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0J1aWxkIEVudmlyb25tZW50JywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ0FDSEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpjYWNoZScsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnQ2FjaGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDT01NQU5EUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdDb21tYW5kcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPREVfQlVJTERfRU5WOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6ZW52JywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdFbnZpcm9ubWVudCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEVOVl9GUk9NX0NGTl9PVVRQVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6ZW52ZnJvbWNmbm91dHB1dHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0VudiBmcm9tIENGTiBPdXRwdXRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgRklMRV9TWVNURU1fTE9DQVRJT05TOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6ZmlsZXN5c3RlbWxvY2F0aW9ucycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnRmlsZSBTeXN0ZW0gTG9jYXRpb25zJywgdHlwZTogJ3N0cmluZycgfSxcbiAgSU5QVVQ6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDppbnB1dCcsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnSW5wdXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBJTlNUQUxMX0NPTU1BTkRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6aW5zdGFsbGNvbW1hbmRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdJbnN0YWxsIENvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTE9HR0lORzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmxvZ2dpbmcnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0xvZ2dpbmcnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQQVJUSUFMX0JVSUxEX1NQRUM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwYXJ0aWFsYnVpbGRzcGVjJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdQYXJ0aWFsIEJ1aWxkIFNwZWMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQUklNQVJZX09VVFBVVF9ESVJFQ1RPUlk6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwcmltYXJ5b3V0cHV0ZGlyZWN0b3J5JywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdQcmltYXJ5IE91dHB1dCBEaXJlY3RvcnknLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQUk9KRUNUX05BTUU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwcm9qZWN0bmFtZScsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnUHJvamVjdCBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU1RFUF9ST0xFOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cm9sZScsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnU3RlcCBSb2xlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUk9MRV9QT0xJQ1lfU1RBVEVNRU5UUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnJvbGVwb2xpY3lzdGF0ZW1lbnRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdSb2xlIFBvbGljeSBTdGF0ZW1lbnRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgVElNRU9VVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnRpbWVvdXQnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1RpbWVvdXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBTaGVsbFN0ZXAgKG5hbWVzcGFjZTogcGlwZWxpbmVzOnNoZWxsc3RlcCkg4pSA4pSAXG4gIFNIRUxMX0FERElUSU9OQUxfSU5QVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDphZGRpdGlvbmFsaW5wdXRzJywgY2F0ZWdvcnk6ICdTaGVsbFN0ZXAnLCBsYWJlbDogJ0FkZGl0aW9uYWwgSW5wdXRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0hFTExfQ09NTUFORFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmNvbW1hbmRzJywgY2F0ZWdvcnk6ICdTaGVsbFN0ZXAnLCBsYWJlbDogJ0NvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0hFTExfRU5WOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDplbnYnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnRW52aXJvbm1lbnQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9FTlZfRlJPTV9DRk5fT1VUUFVUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6ZW52ZnJvbWNmbm91dHB1dHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnRW52IGZyb20gQ0ZOIE91dHB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9JTlBVVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6aW5wdXQnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnSW5wdXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9JTlNUQUxMX0NPTU1BTkRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDppbnN0YWxsY29tbWFuZHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnSW5zdGFsbCBDb21tYW5kcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX1BSSU1BUllfT1VUUFVUX0RJUkVDVE9SWTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6cHJpbWFyeW91dHB1dGRpcmVjdG9yeScsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdQcmltYXJ5IE91dHB1dCBEaXJlY3RvcnknLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBCdWlsZEVudmlyb25tZW50IChuYW1lc3BhY2U6IGNvZGVidWlsZDpidWlsZGVudmlyb25tZW50KSDilIDilIBcbiAgUFJJVklMRUdFRDogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OnByaXZpbGVnZWQnLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdQcml2aWxlZ2VkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEJVSUxEX0lNQUdFOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6YnVpbGRpbWFnZScsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0J1aWxkIEltYWdlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ0VSVElGSUNBVEU6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpjZXJ0aWZpY2F0ZScsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0NlcnRpZmljYXRlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09NUFVURV9UWVBFOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6Y29tcHV0ZXR5cGUnLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdDb21wdXRlIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBET0NLRVJfU0VSVkVSOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6ZG9ja2Vyc2VydmVyJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnRG9ja2VyIFNlcnZlcicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEVOVklST05NRU5UX1ZBUklBQkxFUzogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmVudmlyb25tZW50dmFyaWFibGVzJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnRW52aXJvbm1lbnQgVmFyaWFibGVzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgRkxFRVQ6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpmbGVldCcsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0ZsZWV0JywgdHlwZTogJ3N0cmluZycgfSxcblxuICAvLyDilIDilIAgTmV0d29yayBjb25maWd1cmF0aW9uIChuYW1lc3BhY2U6IGVjMjpuZXR3b3JrKSDilIDilIBcbiAgTkVUV09SS19UWVBFOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6dHlwZScsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnTmV0d29yayBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19WUENfSUQ6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazp2cGNpZCcsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnVlBDIElEJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19TVUJORVRfSURTOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0aWRzJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdTdWJuZXQgSURzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19TVUJORVRfVFlQRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnN1Ym5ldHR5cGUnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1N1Ym5ldCBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19BVkFJTEFCSUxJVFlfWk9ORVM6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazphdmFpbGFiaWxpdHl6b25lcycsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnQXZhaWxhYmlsaXR5IFpvbmVzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19TVUJORVRfR1JPVVBfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnN1Ym5ldGdyb3VwbmFtZScsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnU3VibmV0IEdyb3VwIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NFQ1VSSVRZX0dST1VQX0lEUzogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnNlY3VyaXR5Z3JvdXBpZHMnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIElEcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfVEFHUzogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnRhZ3MnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1ZQQyBMb29rdXAgVGFncycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfVlBDX05BTUU6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazp2cGNuYW1lJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdWUEMgTmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfUkVHSU9OOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6cmVnaW9uJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdSZWdpb24nLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBJQU0gcm9sZSBjb25maWd1cmF0aW9uIChuYW1lc3BhY2U6IGlhbTpyb2xlKSDilIDilIBcbiAgUk9MRV9UWVBFOiB7IGtleTogJ2F3czpjZGs6aWFtOnJvbGU6dHlwZScsIGNhdGVnb3J5OiAnSUFNIFJvbGUnLCBsYWJlbDogJ1JvbGUgVHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFJPTEVfQVJOOiB7IGtleTogJ2F3czpjZGs6aWFtOnJvbGU6cm9sZWFybicsIGNhdGVnb3J5OiAnSUFNIFJvbGUnLCBsYWJlbDogJ1JvbGUgQVJOJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUk9MRV9OQU1FOiB7IGtleTogJ2F3czpjZGs6aWFtOnJvbGU6cm9sZW5hbWUnLCBjYXRlZ29yeTogJ0lBTSBSb2xlJywgbGFiZWw6ICdSb2xlIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBST0xFX01VVEFCTEU6IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTptdXRhYmxlJywgY2F0ZWdvcnk6ICdJQU0gUm9sZScsIGxhYmVsOiAnTXV0YWJsZScsIHR5cGU6ICdib29sZWFuJyB9LFxuXG4gIC8vIOKUgOKUgCBTZWN1cml0eSBncm91cCBjb25maWd1cmF0aW9uIChuYW1lc3BhY2U6IGVjMjpzZWN1cml0eWdyb3VwKSDilIDilIBcbiAgU0VDVVJJVFlfR1JPVVBfVFlQRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpzZWN1cml0eWdyb3VwOnR5cGUnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdTZWN1cml0eSBHcm91cCBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0VDVVJJVFlfR1JPVVBfSURTOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6c2VjdXJpdHlncm91cGlkcycsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIElEcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNFQ1VSSVRZX0dST1VQX01VVEFCTEU6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDptdXRhYmxlJywgY2F0ZWdvcnk6ICdTZWN1cml0eSBHcm91cCcsIGxhYmVsOiAnTXV0YWJsZScsIHR5cGU6ICdib29sZWFuJyB9LFxuICBTRUNVUklUWV9HUk9VUF9OQU1FOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6c2VjdXJpdHlncm91cG5hbWUnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdTZWN1cml0eSBHcm91cCBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0VDVVJJVFlfR1JPVVBfVlBDX0lEOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6dnBjaWQnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdWUEMgSUQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBOb3RpZmljYXRpb25zIChuYW1lc3BhY2U6IG5vdGlmaWNhdGlvbnMpIOKUgOKUgFxuICBOT1RJRklDQVRJT05fVE9QSUNfQVJOOiB7IGtleTogJ2F3czpjZGs6bm90aWZpY2F0aW9uczp0b3BpYzphcm4nLCBjYXRlZ29yeTogJ05vdGlmaWNhdGlvbnMnLCBsYWJlbDogJ1NOUyBUb3BpYyBBUk4nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBOT1RJRklDQVRJT05fRVZFTlRTOiB7IGtleTogJ2F3czpjZGs6bm90aWZpY2F0aW9uczpldmVudHMnLCBjYXRlZ29yeTogJ05vdGlmaWNhdGlvbnMnLCBsYWJlbDogJ05vdGlmaWNhdGlvbiBFdmVudHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBQaXBlbGluZSBvcGVyYXRpb25zIChuYW1lc3BhY2U6IG9wZXJhdGlvbnMg4oCUIGN1c3RvbSBzeW50aCBpbiBQaXBlbGluZUJ1aWxkZXIpIOKUgOKUgFxuICBFTkFCTEVfRVhFQ1VUSU9OX0VWRU5UUzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6ZXhlY3V0aW9uZXZlbnRzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdFbmFibGUgZXhlY3V0aW9uIGV2ZW50IHRyYWNraW5nJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEVOQUJMRV9NRVRSSUNTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczptZXRyaWNzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdFbmFibGUgQ2xvdWRXYXRjaCBmYWlsdXJlIGFsYXJtcycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBBUlRJRkFDVF9SRVRFTlRJT05fREFZUzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6YXJ0aWZhY3RyZXRlbnRpb25kYXlzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdBcnRpZmFjdCByZXRlbnRpb24gaW4gZGF5cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBJUEVMSU5FX1ZBUklBQkxFUzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6dmFyaWFibGVzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdQaXBlbGluZSBydW50aW1lIHZhcmlhYmxlcyAoSlNPTiknLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAvLyBBZGRzIGEgcmVwb3J0LW9ubHkgdmVyaWZ5IHN0ZXAgcGVyIHN0YWdlIHRoYXQgZ3JhZGVzIHRoZSBwbHVnaW4gaW1hZ2VzIHRoZVxuICAvLyBwaXBlbGluZSBpcyBhYm91dCB0byBydW4gKFBPU1QgL3BsdWdpbnMvcnVudGltZS1jaGVjaykg4oCUIG5ldmVyIGEgYmxvY2suXG4gIFJVTlRJTUVfVlVMTl9DSEVDSzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6cnVudGltZXZ1bG5jaGVjaycsIGNhdGVnb3J5OiAnT3BlcmF0aW9ucycsIGxhYmVsOiAnR3JhZGUgcGx1Z2luIGltYWdlcyBiZWZvcmUgZWFjaCBzdGFnZSBydW5zIChyZXBvcnQtb25seSknLCB0eXBlOiAnYm9vbGVhbicgfSxcblxuICAvLyDilIDilIAgRW5jcnlwdGlvbiAobmFtZXNwYWNlOiBlbmNyeXB0aW9uIOKAlCBjdXN0b20gc3ludGggaW4gUGlwZWxpbmVCdWlsZGVyKSDilIDilIBcbiAgS01TX0tFWV9BUk46IHsga2V5OiAnYXdzOmNkazplbmNyeXB0aW9uOmttc2tleWFybicsIGNhdGVnb3J5OiAnRW5jcnlwdGlvbicsIGxhYmVsOiAnQ3VzdG9tIEtNUyBrZXkgQVJOIGZvciBhcnRpZmFjdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgTWV0YWRhdGFLZXlFbnRyeT47XG5cbi8qKiBDb25zdGFudCBuYW1lIOKGkiBgYXdzOmNkazrigKZgIGtleSwgZm9yIHR5cG8tZnJlZSBzeW50aC10aW1lIGF1dGhvcmluZy4gKi9cbmV4cG9ydCBjb25zdCBNZXRhZGF0YUtleXMgPSBPYmplY3QuZnJlZXplKFxuICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoTUVUQURBVEFfS0VZX0NBVEFMT0cpLm1hcCgoW25hbWUsIGVudHJ5XSkgPT4gW25hbWUsIGVudHJ5LmtleV0pLFxuICApLFxuKSBhcyB7IHJlYWRvbmx5IFtLIGluIGtleW9mIHR5cGVvZiBNRVRBREFUQV9LRVlfQ0FUQUxPR106ICh0eXBlb2YgTUVUQURBVEFfS0VZX0NBVEFMT0cpW0tdWydrZXknXSB9O1xuXG4vKiogQW55IHN1cHBvcnRlZCBtZXRhZGF0YSBrZXkuICovXG5leHBvcnQgdHlwZSBNZXRhZGF0YUtleSA9ICh0eXBlb2YgTWV0YWRhdGFLZXlzKVtrZXlvZiB0eXBlb2YgTWV0YWRhdGFLZXlzXTtcblxuLyoqIE9uZSBwaWNrZXIgb3B0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUtleU9wdGlvbiB7XG4gIGtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiBNZXRhZGF0YUtleVR5cGU7XG59XG5cbi8qKiBPbmUgcGlja2VyIGdyb3VwLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUtleUdyb3VwIHtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAga2V5czogTWV0YWRhdGFLZXlPcHRpb25bXTtcbn1cblxuLyoqXG4gKiBUaGUgY2F0YWxvZyBncm91cGVkIGJ5IGNhdGVnb3J5LCBpbiBkZWNsYXJhdGlvbiBvcmRlciDigJQgd2hhdCB0aGUgcGlwZWxpbmVcbiAqIGZvcm0gYnVpbGRlcidzIG1ldGFkYXRhIHBpY2tlciByZW5kZXJzLlxuICovXG5leHBvcnQgY29uc3QgTUVUQURBVEFfS0VZX0dST1VQUzogcmVhZG9ubHkgTWV0YWRhdGFLZXlHcm91cFtdID0gKCgpID0+IHtcbiAgY29uc3QgZ3JvdXBzOiBNZXRhZGF0YUtleUdyb3VwW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBPYmplY3QudmFsdWVzKE1FVEFEQVRBX0tFWV9DQVRBTE9HKSBhcyByZWFkb25seSBNZXRhZGF0YUtleUVudHJ5W10pIHtcbiAgICBsZXQgZ3JvdXAgPSBncm91cHMuZmluZCgoZykgPT4gZy5jYXRlZ29yeSA9PT0gZW50cnkuY2F0ZWdvcnkpO1xuICAgIGlmICghZ3JvdXApIHtcbiAgICAgIGdyb3VwID0geyBjYXRlZ29yeTogZW50cnkuY2F0ZWdvcnksIGtleXM6IFtdIH07XG4gICAgICBncm91cHMucHVzaChncm91cCk7XG4gICAgfVxuICAgIGdyb3VwLmtleXMucHVzaCh7IGtleTogZW50cnkua2V5LCBsYWJlbDogZW50cnkubGFiZWwsIHR5cGU6IGVudHJ5LnR5cGUgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn0pKCk7XG4iXX0=
|
|
@@ -12,7 +12,31 @@ import type { OrgRole } from './common.js';
|
|
|
12
12
|
* global `isSuperAdmin` flag, not a per-org permission; and `requireStepUp`
|
|
13
13
|
* (MFA) / `requireFeature` (plan entitlements) remain orthogonal gates.
|
|
14
14
|
*/
|
|
15
|
-
export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publish' | 'templates:read' | 'templates:write' | 'templates:publish' | 'plugins:read' | 'plugins:write' | 'plugins:publish' | 'plugins:install' | 'plugin_installs:manage' | 'publishers:manage' | 'plugins:moderate' | 'publishers:verify' | 'oncall:manage' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'roles:manage' | 'invitations:manage' | 'service_accounts:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'logs:export' | 'reports:read' | 'reports:rollup' | 'reports:
|
|
15
|
+
export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publish' | 'pipeline_registry:write' | 'templates:read' | 'templates:write' | 'templates:publish' | 'plugins:read' | 'plugins:write' | 'plugins:publish' | 'plugins:install' | 'plugin_installs:manage' | 'publishers:manage' | 'plugins:moderate' | 'publishers:verify' | 'platform:read' | 'orgs:read' | 'billing:operate' | 'observability_console:open' | 'database_console:open' | 'objectstore_console:open' | 'oncall:manage' | 'support_cases:write' | 'support_content:write' | 'subscriptions:read' | 'subscriptions:manage' | 'orgs:manage' | 'quotas:manage' | 'plugin_queue:manage' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'roles:manage' | 'invitations:manage' | 'service_accounts:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'logs:export' | 'audit:read' | 'reports:read' | 'reports:rollup' | 'reports:write' | 'reports:publish' | 'messages:read' | 'messages:write' | 'billing:read' | 'billing:manage' | 'quotas:read' | 'impersonation:open' | 'impersonation:approve' | 'team_access:open' | 'registry:read' | 'registry:write' | 'registry:purge' | 'org_settings:write' | 'org_idp:write' | 'org_kms:write' | 'org_impersonation:write';
|
|
16
|
+
/**
|
|
17
|
+
* The CLOSED set of actions a permission id may end in — the second half of the
|
|
18
|
+
* `resource:action` strategy the docs describe.
|
|
19
|
+
*
|
|
20
|
+
* It is closed for one concrete reason: `isMutationPermission` (frontend
|
|
21
|
+
* `lib/auth-helpers.ts`) classifies read vs write BY SUFFIX, and that is what
|
|
22
|
+
* disables every write affordance during a read-only impersonation session. A
|
|
23
|
+
* noun-shaped action (the former `org:settings` and `consoles:datastore`) cannot be classified
|
|
24
|
+
* by name, so each one had to be hand-listed — and a permission added without
|
|
25
|
+
* remembering that list renders an enabled control that dead-ends on a 403.
|
|
26
|
+
*
|
|
27
|
+
* Reads are `:read` and `:rollup` (a read-VISIBILITY scope). Everything else is
|
|
28
|
+
* a write. The five domain verbs are kept because each names an action with no
|
|
29
|
+
* synonym in this vocabulary — `:export` is egress rather than mutation,
|
|
30
|
+
* `:install` is consumption rather than authoring, `:moderate` and `:verify` are
|
|
31
|
+
* ecosystem decisions, and `:operate` moves another tenant's money.
|
|
32
|
+
*
|
|
33
|
+
* `PERMISSION_ID_SHAPE` and this list are asserted over the whole catalog in
|
|
34
|
+
* api-core's `test/permissions.test.ts`, so adding an off-strategy id fails
|
|
35
|
+
* there rather than at a 403.
|
|
36
|
+
*/
|
|
37
|
+
export declare const PERMISSION_ACTIONS: readonly string[];
|
|
38
|
+
/** `resource:action`, where resource is `snake_case` and action is in {@link PERMISSION_ACTIONS}. */
|
|
39
|
+
export declare const PERMISSION_ID_SHAPE: RegExp;
|
|
16
40
|
/** All valid permissions (order determines display order in the picker). */
|
|
17
41
|
export declare const ALL_PERMISSIONS: readonly Permission[];
|
|
18
42
|
/**
|
|
@@ -147,14 +171,190 @@ export declare const ROLE_PERMISSIONS: Record<OrgRole, readonly Permission[]>;
|
|
|
147
171
|
* tenant-facing: no `registry:*`, no `members:manage`. The Role grants the
|
|
148
172
|
* coarse `member` label and never sets `isSuperAdmin`.
|
|
149
173
|
*/
|
|
174
|
+
/**
|
|
175
|
+
* The PLATFORM OPERATOR bundle — the third rung of the system org's ladder.
|
|
176
|
+
*
|
|
177
|
+
* Before it the ladder had two rungs and a gap: Ecosystem Manager (plugin
|
|
178
|
+
* moderation) and Super Admin (implicit-all, which also carries impersonation,
|
|
179
|
+
* pgAdmin and mongo-express). Anything in between — read the platform settings,
|
|
180
|
+
* run a promotion campaign, check whether the pager is configured — had to be
|
|
181
|
+
* done by making somebody a full superadmin.
|
|
182
|
+
*
|
|
183
|
+
* It is a BUNDLE rather than a grantable list because `SYSTEM_ORG_ONLY_PERMISSIONS`
|
|
184
|
+
* can never be carried by a custom Role in any org: without a seeded bundle
|
|
185
|
+
* these permissions had no grant path at all and were superadmin-only in
|
|
186
|
+
* practice, which is exactly the thing they were added to avoid.
|
|
187
|
+
*
|
|
188
|
+
* Deliberately NOT carrying `plugins:moderate` / `publishers:verify`: ecosystem
|
|
189
|
+
* moderation is a different job with its own Role, and a reviewer of plugins
|
|
190
|
+
* should not acquire the ability to move another tenant's money by being handed
|
|
191
|
+
* the operator Role.
|
|
192
|
+
*/
|
|
193
|
+
export declare const PLATFORM_OPERATOR_PERMISSIONS: readonly Permission[];
|
|
194
|
+
/**
|
|
195
|
+
* ACCOUNT MANAGER — the commercial relationship with a customer, as opposed to
|
|
196
|
+
* running the deployment.
|
|
197
|
+
*
|
|
198
|
+
* Split from {@link PLATFORM_OPERATOR_PERMISSIONS} rather than piled onto it,
|
|
199
|
+
* because the two jobs diverge at exactly the permissions added alongside this
|
|
200
|
+
* bundle. `billing:operate` MOVED here from the operator bundle for that reason:
|
|
201
|
+
* minting a discount token is a commercial act, not an operational one, and the
|
|
202
|
+
* person who restarts a stuck build queue has no reason to hold it.
|
|
203
|
+
*
|
|
204
|
+
* The destructive half of the catalogue lives here — `orgs:manage` can DELETE
|
|
205
|
+
* an organisation and `subscriptions:manage` can cancel its subscription — so
|
|
206
|
+
* this is deliberately the smaller, more rarely-assigned of the two.
|
|
207
|
+
*/
|
|
208
|
+
export declare const ACCOUNT_MANAGER_PERMISSIONS: readonly Permission[];
|
|
209
|
+
/**
|
|
210
|
+
* CONSOLE ADMINISTRATOR — the operator consoles, as a Role.
|
|
211
|
+
*
|
|
212
|
+
* WHY THIS EXISTS even though each console permission is grantable by hand: with
|
|
213
|
+
* no seeded Role, the only path to pgAdmin was a superadmin composing a custom
|
|
214
|
+
* Role for it, and the observed outcome of asking people to do that is that they
|
|
215
|
+
* reach for the superadmin FLAG instead — the exact failure these permissions
|
|
216
|
+
* were added to remove. A named Role also makes "who can open a data shell?" one
|
|
217
|
+
* query instead of an audit of every custom Role.
|
|
218
|
+
*
|
|
219
|
+
* It carries all three consoles, which is the whole job for the person who holds
|
|
220
|
+
* it. ONE CONSEQUENCE WORTH KNOWING: `database_console:open` and
|
|
221
|
+
* `objectstore_console:open` are the two halves of the audit tamper-evidence
|
|
222
|
+
* design — a Mongo shell can truncate a hash chain's tail, and the object store
|
|
223
|
+
* holds the signed heads that would expose the truncation — so a holder of this
|
|
224
|
+
* Role can do both. The permissions stay SEPARATE for exactly that reason: a
|
|
225
|
+
* deployment that wants them held by different people composes a narrower Role
|
|
226
|
+
* by hand (a superadmin may include any system-org-only permission in a Role
|
|
227
|
+
* authored in the system org) and assigns this one to nobody.
|
|
228
|
+
*/
|
|
229
|
+
/**
|
|
230
|
+
* PLATFORM OBSERVER — look, don't touch. The ladder's missing bottom rung.
|
|
231
|
+
*
|
|
232
|
+
* Every other system-org bundle grants a write. The one that does not —
|
|
233
|
+
* Console Administrator — grants a read that IS a database shell. So somebody
|
|
234
|
+
* who should see the deployment and change nothing (a new operator shadowing, an
|
|
235
|
+
* auditor, an on-call engineer during a handover) had two options: Super Admin,
|
|
236
|
+
* or nothing. The usual outcome of a choice like that is the flag.
|
|
237
|
+
*
|
|
238
|
+
* Strictly read-only by construction: every permission here ends `:read`, which
|
|
239
|
+
* `isMutationPermission` classifies as a read, so the dashboard disables every
|
|
240
|
+
* write affordance for a holder rather than offering controls that 403.
|
|
241
|
+
*
|
|
242
|
+
* NOT `audit:read`. It would be the obvious addition and it is the wrong one:
|
|
243
|
+
* `listAuditEvents` pins every non-superadmin to their OWN org, so a system-org
|
|
244
|
+
* observer holding it would see the system org's audit trail and nothing else —
|
|
245
|
+
* an affordance that looks like fleet-wide audit access and is not. Reading
|
|
246
|
+
* another tenant's trail is deliberately the flag's alone.
|
|
247
|
+
*/
|
|
248
|
+
export declare const PLATFORM_OBSERVER_PERMISSIONS: readonly Permission[];
|
|
249
|
+
export declare const CONSOLE_ADMIN_PERMISSIONS: readonly Permission[];
|
|
250
|
+
/**
|
|
251
|
+
* REGISTRY OPERATOR — moves container images around, and nothing else.
|
|
252
|
+
*
|
|
253
|
+
* THE GAP IT FILLS. Promoting an image — copying a built tag from one repository
|
|
254
|
+
* to the one a release resolves — is a job somebody does, and until now the only
|
|
255
|
+
* identity that could do it was a superadmin. `registry:write` has no other
|
|
256
|
+
* carrier, and a system-org-only permission with no seeded carrier is
|
|
257
|
+
* superadmin-only in practice (the `platform:read` failure, pinned by the
|
|
258
|
+
* "at least one seeded carrier" assertion in api-core's `test/permissions.test.ts`).
|
|
259
|
+
* So splitting `registry:purge` out of `registry:write` is only half the change:
|
|
260
|
+
* the additive half needs a Role or the split buys nothing.
|
|
261
|
+
*
|
|
262
|
+
* WHY IT IS NOT PART OF PLATFORM OPERATOR. That Role runs the deployment and
|
|
263
|
+
* already reads the registry. Promoting an image is a release decision, not an
|
|
264
|
+
* operational side effect, and rolling it into the Role everyone on call holds
|
|
265
|
+
* would mean the pager rotation can retag a release at 3am. The two Roles
|
|
266
|
+
* compose instead — a member may hold any number, and permissions are the union.
|
|
267
|
+
*
|
|
268
|
+
* WHY IT IS ONLY TWO PERMISSIONS. Deliberately nothing else: no `platform:read`,
|
|
269
|
+
* no console, no `orgs:read`. `canReadRepo`/`canWriteRepo` confine a
|
|
270
|
+
* non-superadmin system-org holder to `system/*`, `library/*` and `public/*` —
|
|
271
|
+
* this deployment's own base and plugin images — so the Role cannot reach a
|
|
272
|
+
* tenant's repositories at all, and a holder who also needs the operator views
|
|
273
|
+
* gets the operator Role too. It does NOT carry `registry:purge`, which is in
|
|
274
|
+
* {@link SUPERADMIN_ONLY_PERMISSIONS} and in no bundle by design: an image
|
|
275
|
+
* promoter has no business deleting the image a tenant's pipeline resolves.
|
|
276
|
+
*/
|
|
277
|
+
export declare const REGISTRY_OPERATOR_PERMISSIONS: readonly Permission[];
|
|
278
|
+
/**
|
|
279
|
+
* SUPPORT AGENT — the support desk, and nothing else.
|
|
280
|
+
*
|
|
281
|
+
* Deliberately carries no `platform:read`, no console and no billing write: an
|
|
282
|
+
* agent answers cases and writes the canned replies. `subscriptions:read` is
|
|
283
|
+
* here because the first question on any case is what the customer is entitled
|
|
284
|
+
* to, and without it an agent would have to ask someone else to look.
|
|
285
|
+
*/
|
|
286
|
+
export declare const SUPPORT_AGENT_PERMISSIONS: readonly Permission[];
|
|
287
|
+
/**
|
|
288
|
+
* SUPPORT LEAD — the support desk, plus the authority to look.
|
|
289
|
+
*
|
|
290
|
+
* THE GAP IT FILLS. `impersonation:open` is system-org-only, and a system-org-only
|
|
291
|
+
* permission with no seeded carrier is superadmin-only in practice — the
|
|
292
|
+
* invariant api-core's `test/permissions.test.ts` asserts, and the reason
|
|
293
|
+
* `platform:read` shipped unusable. Without this Role, splitting impersonation
|
|
294
|
+
* out of the flag would change nothing: the only way to let somebody view a
|
|
295
|
+
* customer's account would still be to make them a full Super Admin, handing
|
|
296
|
+
* over `/admin/users/:id/grants`, the single-person MFA reset, the database
|
|
297
|
+
* console and `registry:purge` at the same time.
|
|
298
|
+
*
|
|
299
|
+
* WHY IT IS THE SUPPORT DESK AND NOT THE OPERATOR. The question impersonation
|
|
300
|
+
* answers is "what is this customer actually seeing?", which is a support
|
|
301
|
+
* question. Platform Operator runs the deployment and is held by whoever is on
|
|
302
|
+
* call; adding this to it would hand every rota member the ability to become any
|
|
303
|
+
* customer's user at 3am. Support Agent's bundle plus the one permission is the
|
|
304
|
+
* narrower, more honest shape — and a lead who also runs the deployment holds
|
|
305
|
+
* both Roles.
|
|
306
|
+
*
|
|
307
|
+
* WHAT IT STILL CANNOT DO. Emergency access: `breakglass` bypasses tenant
|
|
308
|
+
* consent and stays on the flag, approved by a second Super Admin. And the
|
|
309
|
+
* tenant can refuse — `impersonation:open` is permission to ASK.
|
|
310
|
+
*/
|
|
311
|
+
export declare const SUPPORT_LEAD_PERMISSIONS: readonly Permission[];
|
|
312
|
+
/**
|
|
313
|
+
* STARTING POINTS for a custom Role in a tenant org — templates, not Roles.
|
|
314
|
+
*
|
|
315
|
+
* THE GAP THEY FILL. An org seeds exactly TWO Roles — Member and Admin — and
|
|
316
|
+
* Admin is every org-assignable permission. So promoting anyone past "author and
|
|
317
|
+
* read" hands over the whole remainder at once: `org_kms:write`,
|
|
318
|
+
* `org_idp:write`, `org_impersonation:write`, `billing:manage`, `roles:manage`
|
|
319
|
+
* and `audit:read` among them. The product's answer is "author a custom Role",
|
|
320
|
+
* and the safety is already right (`sanitizePermissions` bounds a custom Role by
|
|
321
|
+
* its author's own ceiling). What was missing is the starting point.
|
|
322
|
+
*
|
|
323
|
+
* The exact sizes of that cliff are asserted in `test/permissions.test.ts`
|
|
324
|
+
* rather than written here. This paragraph used to carry them inline — "three
|
|
325
|
+
* Roles: Member (15), Team Lead (17) and Admin (37)" — and every one of those
|
|
326
|
+
* numbers went stale: `Team Lead` stopped being seeded when it became the first
|
|
327
|
+
* template below, and the two bundles have grown since. A count nothing checks
|
|
328
|
+
* is a claim that decays, and this one was the stated rationale for the feature.
|
|
329
|
+
*
|
|
330
|
+
* WHY TEMPLATES AND NOT SEEDED ROLES. A seeded built-in is `system: true` and
|
|
331
|
+
* therefore immutable, so seeding these would put four undeletable rows in every
|
|
332
|
+
* org whether it wants them. A template leaves no trace until someone uses it,
|
|
333
|
+
* and what it produces is an ordinary custom Role the org fully owns — editable,
|
|
334
|
+
* deletable, and bounded by the author's ceiling like any other.
|
|
335
|
+
*
|
|
336
|
+
* WHAT THEY DELIBERATELY EXCLUDE. `roles:manage` is in none of them. It is the
|
|
337
|
+
* one permission that compounds — the holder can mint further Roles, up to their
|
|
338
|
+
* own ceiling — so acquiring it should stay a conscious act rather than a side
|
|
339
|
+
* effect of picking a preset. Every permission here is org-assignable, so a
|
|
340
|
+
* template is valid in any org and `sanitizePermissions` accepts it.
|
|
341
|
+
*/
|
|
342
|
+
export interface RoleTemplate {
|
|
343
|
+
id: string;
|
|
344
|
+
name: string;
|
|
345
|
+
/** What the job is — shown next to the template, and a sensible Role description. */
|
|
346
|
+
description: string;
|
|
347
|
+
permissions: readonly Permission[];
|
|
348
|
+
}
|
|
349
|
+
export declare const ROLE_TEMPLATES: readonly RoleTemplate[];
|
|
150
350
|
export declare const ECOSYSTEM_MANAGER_PERMISSIONS: readonly Permission[];
|
|
151
351
|
/**
|
|
152
352
|
* Seed bundle for the built-in "Team Lead" Role — the person who reports UPWARD.
|
|
153
353
|
*
|
|
154
354
|
* Exists because the target user for stakeholder reports is a lead, not an admin,
|
|
155
|
-
* and granting `reports:
|
|
355
|
+
* and granting `reports:write` only through the admin bundle would have forced
|
|
156
356
|
* every reporting lead to be an org admin (members:manage, roles:manage,
|
|
157
|
-
*
|
|
357
|
+
* org_settings:write, billing) to send their manager a weekly summary.
|
|
158
358
|
*
|
|
159
359
|
* Deliberately NOT included: `reports:rollup`. Rolling a report up over descendant
|
|
160
360
|
* teams is downward visibility across the org tree, which is a granted capability
|
|
@@ -163,6 +363,36 @@ export declare const ECOSYSTEM_MANAGER_PERMISSIONS: readonly Permission[];
|
|
|
163
363
|
* and never sets `isSuperAdmin`.
|
|
164
364
|
*/
|
|
165
365
|
export declare const TEAM_LEAD_PERMISSIONS: readonly Permission[];
|
|
366
|
+
/**
|
|
367
|
+
* Seed bundle for the built-in "Pipeline Automation" Role — what the org's
|
|
368
|
+
* unscoped stored credential (the `platform-automation` service account that
|
|
369
|
+
* `pipeline-manager infra store-token` provisions) needs, and nothing more.
|
|
370
|
+
*
|
|
371
|
+
* Derived by tracing every call made with that key, not by guessing:
|
|
372
|
+
* - `pipelines:read` — the CodeBuild synth (and `pipeline deploy --store-tokens`)
|
|
373
|
+
* fetching the pipeline it builds (`GET /pipelines/:id`);
|
|
374
|
+
* - `plugins:read` — plugin resolution at synth/deploy and in the plugin-lookup
|
|
375
|
+
* Lambda (`POST /plugins/lookup`), and the run-time vulnerability check step
|
|
376
|
+
* (`POST /plugins/runtime-check`).
|
|
377
|
+
*
|
|
378
|
+
* What it deliberately does NOT carry, and where that work went:
|
|
379
|
+
* - registry writes (`pipeline_registry:write`) — the synth registers its step
|
|
380
|
+
* manifest with the separate `pipeline-register` key (Pipeline Registration);
|
|
381
|
+
* - image pushes and pulls — CodeBuild authenticates to the image registry with
|
|
382
|
+
* the `registry-push` scoped key, never this one;
|
|
383
|
+
* - reporting writes — the events Lambda and step report uploads use the
|
|
384
|
+
* `reporting:ingest` scoped key.
|
|
385
|
+
*
|
|
386
|
+
* It used to be the org ADMIN Role, so a leaked synth credential could rewrite
|
|
387
|
+
* every pipeline, Role and member of the org.
|
|
388
|
+
*/
|
|
389
|
+
export declare const PIPELINE_AUTOMATION_PERMISSIONS: readonly Permission[];
|
|
390
|
+
/**
|
|
391
|
+
* Seed bundle for the built-in "Pipeline Registration" Role, held by the
|
|
392
|
+
* `pipeline-register` service account: `POST`/`DELETE /pipelines/registry` for
|
|
393
|
+
* its own org and nothing else — not even a read.
|
|
394
|
+
*/
|
|
395
|
+
export declare const PIPELINE_REGISTRATION_PERMISSIONS: readonly Permission[];
|
|
166
396
|
/**
|
|
167
397
|
* Resolve a user's effective org permissions from the Roles assigned to them.
|
|
168
398
|
*
|
|
@@ -198,3 +428,114 @@ export declare function resolveUserPermissions(assignedPermissions?: readonly st
|
|
|
198
428
|
export declare function confinePermissionsToOrg<P extends string>(permissions: readonly P[], activeOrgIsSystemOrg: boolean): P[];
|
|
199
429
|
/** Whether a resolved permission list grants `permission` (superadmin ⇒ always). */
|
|
200
430
|
export declare function hasPermission(granted: readonly string[] | null | undefined, permission: Permission, isSuperAdmin?: boolean): boolean;
|
|
431
|
+
/**
|
|
432
|
+
* The named permission bundles a built-in Role may carry, and the Role NAME each
|
|
433
|
+
* one is seeded under. One table, because the three facts about a job Role —
|
|
434
|
+
* its id, its permissions and its display name — were previously three
|
|
435
|
+
* independent lists in three places, and nothing held them together.
|
|
436
|
+
*
|
|
437
|
+
* WHAT WENT WRONG WITHOUT IT. The platform resolved a bundle through a
|
|
438
|
+
* nine-branch `if` chain with a fall-through to the coarse `grantsRole` bundle.
|
|
439
|
+
* Every job Role grants `member`, so a bundle added to the id list WITHOUT its
|
|
440
|
+
* branch did not fail — it silently seeded the plain Member bundle, and the
|
|
441
|
+
* startup backfill then re-synced it to that wrong value on every boot. The
|
|
442
|
+
* Role existed, was assignable from the staffing panel, and granted fifteen
|
|
443
|
+
* tenant permissions instead of its job. Nothing anywhere exercised the
|
|
444
|
+
* resolver per bundle.
|
|
445
|
+
*
|
|
446
|
+
* Keyed access plus `satisfies` makes a missing entry a COMPILE error, and an
|
|
447
|
+
* extra one too — in both directions, with no runtime check to forget.
|
|
448
|
+
*
|
|
449
|
+
* The NAME lives here for the same reason. The platform seeded names from its
|
|
450
|
+
* own constants while the frontend's staffing roster hard-coded its own copy,
|
|
451
|
+
* each pinned by a test against itself — so renaming a Role passed both suites
|
|
452
|
+
* and the roster silently rendered "Role not found", which is the grant path for
|
|
453
|
+
* that Role's permissions disappearing. Both sides read this now.
|
|
454
|
+
*/
|
|
455
|
+
export declare const SEED_BUNDLES: {
|
|
456
|
+
readonly ecosystem_manager: {
|
|
457
|
+
readonly name: 'Ecosystem Manager';
|
|
458
|
+
readonly permissions: readonly Permission[];
|
|
459
|
+
};
|
|
460
|
+
readonly team_lead: {
|
|
461
|
+
readonly name: 'Team Lead';
|
|
462
|
+
readonly permissions: readonly Permission[];
|
|
463
|
+
};
|
|
464
|
+
readonly platform_observer: {
|
|
465
|
+
readonly name: 'Platform Observer';
|
|
466
|
+
readonly permissions: readonly Permission[];
|
|
467
|
+
};
|
|
468
|
+
readonly platform_operator: {
|
|
469
|
+
readonly name: 'Platform Operator';
|
|
470
|
+
readonly permissions: readonly Permission[];
|
|
471
|
+
};
|
|
472
|
+
readonly account_manager: {
|
|
473
|
+
readonly name: 'Account Manager';
|
|
474
|
+
readonly permissions: readonly Permission[];
|
|
475
|
+
};
|
|
476
|
+
readonly console_admin: {
|
|
477
|
+
readonly name: 'Console Administrator';
|
|
478
|
+
readonly permissions: readonly Permission[];
|
|
479
|
+
};
|
|
480
|
+
readonly support_agent: {
|
|
481
|
+
readonly name: 'Support Agent';
|
|
482
|
+
readonly permissions: readonly Permission[];
|
|
483
|
+
};
|
|
484
|
+
readonly support_lead: {
|
|
485
|
+
readonly name: 'Support Lead';
|
|
486
|
+
readonly permissions: readonly Permission[];
|
|
487
|
+
};
|
|
488
|
+
readonly registry_operator: {
|
|
489
|
+
readonly name: 'Registry Operator';
|
|
490
|
+
readonly permissions: readonly Permission[];
|
|
491
|
+
};
|
|
492
|
+
readonly pipeline_automation: {
|
|
493
|
+
readonly name: 'Pipeline Automation';
|
|
494
|
+
readonly permissions: readonly Permission[];
|
|
495
|
+
};
|
|
496
|
+
readonly pipeline_registration: {
|
|
497
|
+
readonly name: 'Pipeline Registration';
|
|
498
|
+
readonly permissions: readonly Permission[];
|
|
499
|
+
};
|
|
500
|
+
};
|
|
501
|
+
/** Every seed-bundle id. The platform's `Role.seedBundle` enum is this list. */
|
|
502
|
+
export declare const SEED_BUNDLE_IDS: Array<keyof typeof SEED_BUNDLES>;
|
|
503
|
+
export type SeedBundleId = keyof typeof SEED_BUNDLES;
|
|
504
|
+
/**
|
|
505
|
+
* The SYSTEM ORG's job Roles, in staffing order — the subset of
|
|
506
|
+
* {@link SEED_BUNDLES} seeded there, which is every bundle except `team_lead`
|
|
507
|
+
* (a tenant job, and a template rather than a seeded Role since it stopped
|
|
508
|
+
* being structural).
|
|
509
|
+
*
|
|
510
|
+
* `ecosystem_manager` IS one of them; it is listed here even though its roster
|
|
511
|
+
* lives on the Ecosystem console rather than the staffing panel, because what
|
|
512
|
+
* this list answers is "which Roles does the system org seed", not "which panel
|
|
513
|
+
* renders them".
|
|
514
|
+
*/
|
|
515
|
+
export declare const SYSTEM_ORG_JOB_BUNDLES: readonly SeedBundleId[];
|
|
516
|
+
/**
|
|
517
|
+
* The MACHINE Roles every org seeds — the subset of {@link SEED_BUNDLES} held by
|
|
518
|
+
* the service accounts `pipeline-manager infra store-token` provisions.
|
|
519
|
+
*
|
|
520
|
+
* Seeded rather than offered as a {@link ROLE_TEMPLATES} entry, unlike the
|
|
521
|
+
* tenant job presets, because they are structural: the CLI grants one to the
|
|
522
|
+
* account it creates and the startup backfill moves existing accounts onto it,
|
|
523
|
+
* and both have to find it in EVERY org by a stable identity. A template leaves
|
|
524
|
+
* nothing to find until somebody instantiates it.
|
|
525
|
+
*/
|
|
526
|
+
export declare const ORG_AUTOMATION_BUNDLES: readonly SeedBundleId[];
|
|
527
|
+
/**
|
|
528
|
+
* The service accounts `pipeline-manager infra store-token` provisions, keyed by
|
|
529
|
+
* account name, and the built-in Role each holds — `null` for an account whose
|
|
530
|
+
* key carries a capability SCOPE (a `TokenScope`) and so needs no Role at all.
|
|
531
|
+
*
|
|
532
|
+
* One table for the CLI (which Role to grant a NEW account) and the platform's
|
|
533
|
+
* startup backfill (which Role to move an EXISTING account onto, off the org
|
|
534
|
+
* admin Role these accounts were once given). A rename here moves both.
|
|
535
|
+
*/
|
|
536
|
+
export declare const AUTOMATION_ACCOUNT_BUNDLES: {
|
|
537
|
+
readonly 'platform-automation': 'pipeline_automation';
|
|
538
|
+
readonly 'pipeline-register': 'pipeline_registration';
|
|
539
|
+
readonly 'reporting-ingest': null;
|
|
540
|
+
readonly 'registry-push': null;
|
|
541
|
+
};
|