@pipeline-builder/api-core 4.1.22 → 5.0.1
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/errors/app-errors.d.ts +4 -2
- package/lib/errors/app-errors.js +6 -4
- package/lib/helpers/content-disposition.d.ts +14 -0
- package/lib/helpers/content-disposition.js +22 -0
- package/lib/helpers/index.d.ts +1 -0
- package/lib/helpers/index.js +2 -1
- package/lib/middleware/assurance.js +2 -2
- package/lib/middleware/auth.js +7 -7
- package/lib/middleware/ecosystem-guard.js +3 -3
- package/lib/middleware/permission-gates.js +3 -3
- package/lib/middleware/service-tokens.js +2 -2
- package/lib/middleware/step-up.js +2 -2
- package/lib/services/api-key-exchange.js +2 -2
- package/lib/services/compliance-client.js +2 -2
- package/lib/services/durable-event-bus.js +3 -1
- package/lib/services/index.d.ts +1 -1
- package/lib/services/index.js +2 -2
- package/lib/services/jwks-cache.js +2 -2
- package/lib/services/leader-lock.d.ts +56 -3
- package/lib/services/leader-lock.js +60 -4
- package/lib/services/quota.js +2 -2
- package/lib/services/scheduler.d.ts +20 -4
- package/lib/services/scheduler.js +36 -6
- package/lib/services/service-keys.d.ts +0 -4
- package/lib/services/service-keys.js +1 -14
- package/lib/types/catalog-metadata.d.ts +0 -6
- package/lib/types/catalog-metadata.js +1 -1
- package/lib/types/ecosystem.d.ts +0 -1
- package/lib/types/ecosystem.js +1 -1
- package/lib/types/feature-flags.d.ts +1 -1
- package/lib/types/feature-flags.js +6 -1
- package/lib/types/index.d.ts +3 -2
- package/lib/types/index.js +3 -2
- package/lib/types/permissions.d.ts +16 -1
- package/lib/types/permissions.js +23 -2
- package/lib/types/plugin-scan.d.ts +26 -0
- package/lib/types/plugin-scan.js +1 -1
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +35 -1
- package/lib/types/reserved-tags.d.ts +28 -0
- package/lib/types/reserved-tags.js +37 -0
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/params.d.ts +33 -1
- package/lib/utils/params.js +54 -2
- package/lib/utils/response.js +2 -2
- package/lib/utils/secret-encryption.d.ts +0 -2
- package/lib/utils/secret-encryption.js +1 -5
- package/lib/validation/message-schemas.d.ts +0 -7
- package/lib/validation/message-schemas.js +3 -2
- package/lib/validation/pipeline-schemas.d.ts +6 -0
- package/lib/validation/pipeline-schemas.js +32 -2
- package/lib/validation/plugin-catalog-detect.d.ts +1 -1
- package/lib/validation/plugin-catalog-detect.js +2 -2
- package/lib/validation/plugin-spec-schema.js +2 -2
- package/package.json +2 -4
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Tag keys a caller may never set on a pipeline.
|
|
5
|
+
*
|
|
6
|
+
* These carry TENANCY and attribution: the events Lambda reads `pb.pipeline-id`
|
|
7
|
+
* and `pb.deploys` off the stack to decide whose reports an execution belongs
|
|
8
|
+
* to, and `OrgId` drives cost attribution. A caller that can set them can point
|
|
9
|
+
* another org's executions at its own pipeline.
|
|
10
|
+
*
|
|
11
|
+
* Both halves of the defence read this one list:
|
|
12
|
+
*
|
|
13
|
+
* - `BuilderPropsSchema` refuses a reserved key with 400, so the caller finds
|
|
14
|
+
* out at create time which key was rejected.
|
|
15
|
+
* - `PipelineBuilder` drops them again at synth. A team can use the construct
|
|
16
|
+
* directly, without the API, so the synth-time filter is the boundary and the
|
|
17
|
+
* schema is early feedback — neither is sufficient alone.
|
|
18
|
+
*
|
|
19
|
+
* `aws:` is reserved by AWS itself: a tag set containing one fails the
|
|
20
|
+
* CloudFormation call with a confusing error, so it is refused here for clarity.
|
|
21
|
+
*
|
|
22
|
+
* It lives in api-core because pipeline-core depends on api-core, not the other
|
|
23
|
+
* way round; a second copy in pipeline-core could drift from what the API
|
|
24
|
+
* enforces, which is exactly the gap the two checks exist to close.
|
|
25
|
+
*/
|
|
26
|
+
export const RESERVED_TAG_KEYS = [
|
|
27
|
+
'OrgId', 'pipeline-builder', 'project', 'organization',
|
|
28
|
+
];
|
|
29
|
+
/** Reserved tag-key PREFIXES (case-insensitive), matched in addition to the exact keys. */
|
|
30
|
+
export const RESERVED_TAG_PREFIXES = ['pb.', 'aws:'];
|
|
31
|
+
/** Whether `key` is a platform- or AWS-reserved tag key that a caller may not set. */
|
|
32
|
+
export function isReservedTagKey(key) {
|
|
33
|
+
const k = key.trim().toLowerCase();
|
|
34
|
+
return RESERVED_TAG_KEYS.some((r) => r.toLowerCase() === k)
|
|
35
|
+
|| RESERVED_TAG_PREFIXES.some((p) => k.startsWith(p));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXJ2ZWQtdGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9yZXNlcnZlZC10YWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBc0I7SUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxjQUFjO0NBQ3ZELENBQUM7QUFFRiwyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXhFLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7V0FDdEQscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRhZyBrZXlzIGEgY2FsbGVyIG1heSBuZXZlciBzZXQgb24gYSBwaXBlbGluZS5cbiAqXG4gKiBUaGVzZSBjYXJyeSBURU5BTkNZIGFuZCBhdHRyaWJ1dGlvbjogdGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgYHBiLnBpcGVsaW5lLWlkYFxuICogYW5kIGBwYi5kZXBsb3lzYCBvZmYgdGhlIHN0YWNrIHRvIGRlY2lkZSB3aG9zZSByZXBvcnRzIGFuIGV4ZWN1dGlvbiBiZWxvbmdzXG4gKiB0bywgYW5kIGBPcmdJZGAgZHJpdmVzIGNvc3QgYXR0cmlidXRpb24uIEEgY2FsbGVyIHRoYXQgY2FuIHNldCB0aGVtIGNhbiBwb2ludFxuICogYW5vdGhlciBvcmcncyBleGVjdXRpb25zIGF0IGl0cyBvd24gcGlwZWxpbmUuXG4gKlxuICogQm90aCBoYWx2ZXMgb2YgdGhlIGRlZmVuY2UgcmVhZCB0aGlzIG9uZSBsaXN0OlxuICpcbiAqIC0gYEJ1aWxkZXJQcm9wc1NjaGVtYWAgcmVmdXNlcyBhIHJlc2VydmVkIGtleSB3aXRoIDQwMCwgc28gdGhlIGNhbGxlciBmaW5kc1xuICogICBvdXQgYXQgY3JlYXRlIHRpbWUgd2hpY2gga2V5IHdhcyByZWplY3RlZC5cbiAqIC0gYFBpcGVsaW5lQnVpbGRlcmAgZHJvcHMgdGhlbSBhZ2FpbiBhdCBzeW50aC4gQSB0ZWFtIGNhbiB1c2UgdGhlIGNvbnN0cnVjdFxuICogICBkaXJlY3RseSwgd2l0aG91dCB0aGUgQVBJLCBzbyB0aGUgc3ludGgtdGltZSBmaWx0ZXIgaXMgdGhlIGJvdW5kYXJ5IGFuZCB0aGVcbiAqICAgc2NoZW1hIGlzIGVhcmx5IGZlZWRiYWNrIOKAlCBuZWl0aGVyIGlzIHN1ZmZpY2llbnQgYWxvbmUuXG4gKlxuICogYGF3czpgIGlzIHJlc2VydmVkIGJ5IEFXUyBpdHNlbGY6IGEgdGFnIHNldCBjb250YWluaW5nIG9uZSBmYWlscyB0aGVcbiAqIENsb3VkRm9ybWF0aW9uIGNhbGwgd2l0aCBhIGNvbmZ1c2luZyBlcnJvciwgc28gaXQgaXMgcmVmdXNlZCBoZXJlIGZvciBjbGFyaXR5LlxuICpcbiAqIEl0IGxpdmVzIGluIGFwaS1jb3JlIGJlY2F1c2UgcGlwZWxpbmUtY29yZSBkZXBlbmRzIG9uIGFwaS1jb3JlLCBub3QgdGhlIG90aGVyXG4gKiB3YXkgcm91bmQ7IGEgc2Vjb25kIGNvcHkgaW4gcGlwZWxpbmUtY29yZSBjb3VsZCBkcmlmdCBmcm9tIHdoYXQgdGhlIEFQSVxuICogZW5mb3JjZXMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGdhcCB0aGUgdHdvIGNoZWNrcyBleGlzdCB0byBjbG9zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFU0VSVkVEX1RBR19LRVlTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgJ09yZ0lkJywgJ3BpcGVsaW5lLWJ1aWxkZXInLCAncHJvamVjdCcsICdvcmdhbml6YXRpb24nLFxuXTtcblxuLyoqIFJlc2VydmVkIHRhZy1rZXkgUFJFRklYRVMgKGNhc2UtaW5zZW5zaXRpdmUpLCBtYXRjaGVkIGluIGFkZGl0aW9uIHRvIHRoZSBleGFjdCBrZXlzLiAqL1xuZXhwb3J0IGNvbnN0IFJFU0VSVkVEX1RBR19QUkVGSVhFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3BiLicsICdhd3M6J107XG5cbi8qKiBXaGV0aGVyIGBrZXlgIGlzIGEgcGxhdGZvcm0tIG9yIEFXUy1yZXNlcnZlZCB0YWcga2V5IHRoYXQgYSBjYWxsZXIgbWF5IG5vdCBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXNlcnZlZFRhZ0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBrID0ga2V5LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gUkVTRVJWRURfVEFHX0tFWVMuc29tZSgocikgPT4gci50b0xvd2VyQ2FzZSgpID09PSBrKVxuICAgIHx8IFJFU0VSVkVEX1RBR19QUkVGSVhFUy5zb21lKChwKSA9PiBrLnN0YXJ0c1dpdGgocCkpO1xufVxuIl19
|
package/lib/utils/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export * from './safe-require.js';
|
|
|
4
4
|
export * from './secure-compare.js';
|
|
5
5
|
export * from './crash-handlers.js';
|
|
6
6
|
export { sendSuccess, sendError, sendQuotaExceeded, sendPaginatedNested, paginationMeta, type PaginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, type PaginationParams, type SortParams, } from './response.js';
|
|
7
|
-
export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseDateRange, type Page, REPORT_INTERVALS, } from './params.js';
|
|
7
|
+
export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseReportTimezone, parseWeekStart, isValidTimezone, parseDateRange, type Page, type ReportInterval, type WeekStart, REPORT_INTERVALS, WEEK_STARTS, } from './params.js';
|
|
8
8
|
export * from './headers.js';
|
|
9
9
|
export * from './identity.js';
|
|
10
10
|
export { USER_TOKEN_ALGORITHM, USER_TOKEN_CURVE, JWKS_PATH, decodeJwtHeader, isJwksDocument, publicJwkFrom, derToJoseSignature, encodeJwsSigningInput, compactJws, } from './jwk.js';
|
package/lib/utils/index.js
CHANGED
|
@@ -6,7 +6,7 @@ export * from './safe-require.js';
|
|
|
6
6
|
export * from './secure-compare.js';
|
|
7
7
|
export * from './crash-handlers.js';
|
|
8
8
|
export { sendSuccess, sendError, sendQuotaExceeded, sendPaginatedNested, paginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, } from './response.js';
|
|
9
|
-
export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseDateRange, REPORT_INTERVALS, } from './params.js';
|
|
9
|
+
export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseReportTimezone, parseWeekStart, isValidTimezone, parseDateRange, REPORT_INTERVALS, WEEK_STARTS, } from './params.js';
|
|
10
10
|
export * from './headers.js';
|
|
11
11
|
export * from './identity.js';
|
|
12
12
|
// JWK primitives. Platform IS the token signer, so it legitimately needs
|
|
@@ -32,4 +32,4 @@ export * from './service-registry.js';
|
|
|
32
32
|
export * from './retention.js';
|
|
33
33
|
export * from './compliance-attributes.js';
|
|
34
34
|
export { leadingZeroBits, proofOfWorkHash, challengeKey, clampDifficulty, createProofOfWorkChallenge, parseProofOfWorkChallenge, verifyProofOfWork, solveProofOfWork, POW_DEFAULT_DIFFICULTY, POW_MAX_DIFFICULTY, POW_CHALLENGE_TTL_MS, } from './proof-of-work.js';
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixZQUFZLEVBRVosTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFFZCxjQUFjLEVBQ2QsWUFBWSxFQUNaLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIscUJBQXFCLEdBR3RCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEVBSWQsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5Qix5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLHlFQUF5RTtBQUN6RSw4RUFBOEU7QUFDOUUsaUNBQWlDO0FBQ2pDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLFVBQVUsR0FDWCxNQUFNLFVBQVUsQ0FBQztBQUtsQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHFCQUFxQixHQUN0QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEVBQ2IsZUFBZSxFQUdmLGNBQWMsRUFDZCxjQUFjLEVBR2Qsb0JBQW9CLEdBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixXQUFXLEdBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsRUFDUix3QkFBd0IsR0FDekIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixTQUFTLEdBRVYsTUFBTSxXQUFXLENBQUM7QUFDbkIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsWUFBWSxFQUNaLGVBQWUsRUFDZiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixvQkFBb0IsR0FHckIsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQge1xuICBzZXRMb2dDb250ZXh0UHJvdmlkZXIsXG4gIHJlZGFjdFNlbnNpdGl2ZSxcbiAgY3JlYXRlTG9nZ2VyLFxuICB0eXBlIExvZ2dlcixcbiAgbG9nZ2VyLFxuICBkZWZhdWx0LFxufSBmcm9tICcuL2xvZ2dlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS1rZXkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYWZlLXJlcXVpcmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWN1cmUtY29tcGFyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NyYXNoLWhhbmRsZXJzLmpzJztcbmV4cG9ydCB7XG4gIHNlbmRTdWNjZXNzLFxuICBzZW5kRXJyb3IsXG4gIHNlbmRRdW90YUV4Y2VlZGVkLFxuICBzZW5kUGFnaW5hdGVkTmVzdGVkLFxuICBwYWdpbmF0aW9uTWV0YSxcbiAgdHlwZSBQYWdpbmF0aW9uTWV0YSxcbiAgZXh0cmFjdERiRXJyb3IsXG4gIGVycm9yTWVzc2FnZSxcbiAgc2VuZEJhZFJlcXVlc3QsXG4gIHNlbmRJbnRlcm5hbEVycm9yLFxuICBwYXJzZVBhZ2luYXRpb25QYXJhbXMsXG4gIHR5cGUgUGFnaW5hdGlvblBhcmFtcyxcbiAgdHlwZSBTb3J0UGFyYW1zLFxufSBmcm9tICcuL3Jlc3BvbnNlLmpzJztcbmV4cG9ydCB7XG4gIGdldFBhcmFtLFxuICBwYXJzZVF1ZXJ5SW50LFxuICBwYXJzZVF1ZXJ5U3RyaW5nLFxuICBwYXJzZU9wdGlvbmFsRGF0ZSxcbiAgcGFyc2VQb3NpdGl2ZUludCxcbiAgcGFyc2VRdWVyeUludENsYW1wZWQsXG4gIHBhcnNlUGFnZSxcbiAgdmFsaWRhdGVCdWxrQXJyYXksXG4gIHBhcnNlUmVwb3J0SW50ZXJ2YWwsXG4gIHBhcnNlUmVwb3J0VGltZXpvbmUsXG4gIHBhcnNlV2Vla1N0YXJ0LFxuICBpc1ZhbGlkVGltZXpvbmUsXG4gIHBhcnNlRGF0ZVJhbmdlLFxuICB0eXBlIFBhZ2UsXG4gIHR5cGUgUmVwb3J0SW50ZXJ2YWwsXG4gIHR5cGUgV2Vla1N0YXJ0LFxuICBSRVBPUlRfSU5URVJWQUxTLFxuICBXRUVLX1NUQVJUUyxcbn0gZnJvbSAnLi9wYXJhbXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaWRlbnRpdHkuanMnO1xuLy8gSldLIHByaW1pdGl2ZXMuIFBsYXRmb3JtIElTIHRoZSB0b2tlbiBzaWduZXIsIHNvIGl0IGxlZ2l0aW1hdGVseSBuZWVkc1xuLy8gYHB1YmxpY0p3a0Zyb21gICsgYGRlclRvSm9zZVNpZ25hdHVyZWAgZnJvbSB0aGUgcGFja2FnZSBzdXJmYWNlLlxuLy8gYGp3a1RodW1icHJpbnRgIGFuZCBgcHVibGljS2V5RnJvbUp3a2AgYXJlIGtpZC1kZXJpdmF0aW9uL3ZlcmlmaWNhdGlvblxuLy8gcGx1bWJpbmcgdXNlZCBvbmx5IGluc2lkZSBhcGktY29yZSDigJQgZGVlcC1pbXBvcnQgdGhlbSBmcm9tIHRoZXJlIGluc3RlYWQgb2Zcbi8vIGxlYWtpbmcgdGhlbSB0byBldmVyeSBzZXJ2aWNlLlxuZXhwb3J0IHtcbiAgVVNFUl9UT0tFTl9BTEdPUklUSE0sXG4gIFVTRVJfVE9LRU5fQ1VSVkUsXG4gIEpXS1NfUEFUSCxcbiAgZGVjb2RlSnd0SGVhZGVyLFxuICBpc0p3a3NEb2N1bWVudCxcbiAgcHVibGljSndrRnJvbSxcbiAgZGVyVG9Kb3NlU2lnbmF0dXJlLFxuICBlbmNvZGVKd3NTaWduaW5nSW5wdXQsXG4gIGNvbXBhY3RKd3MsXG59IGZyb20gJy4vandrLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUHVibGljSndrLFxuICBKd2tzRG9jdW1lbnQsXG59IGZyb20gJy4vandrLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS5qcyc7XG5leHBvcnQge1xuICByZXNldFN1cHBvcnRBbGlhc2VzQ2FjaGUsXG4gIGdldFByaW1hcnlTdXBwb3J0QWxpYXMsXG4gIGdldEFsbFN1cHBvcnRBbGlhc2VzLFxuICByZXNvbHZlUmVjaXBpZW50QWxpYXMsXG4gIERFRkFVTFRfU1VQUE9SVF9BTElBUyxcbn0gZnJvbSAnLi9hbGlhcy1yZXNvbHZlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmN1cnJlbmN5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXVkaXQuanMnO1xuZXhwb3J0IHtcbiAgZ2V0RGVmYXVsdEtleVByb3ZpZGVyLFxuICByZXNldERlZmF1bHRLZXlQcm92aWRlcixcbiAgc2V0S2V5UHJvdmlkZXIsXG4gIGVuY3J5cHRTZWNyZXQsXG4gIGRlY3J5cHRTZWNyZXQsXG4gIGlzRW5jcnlwdGVkQmxvYixcbiAgdHlwZSBFbmNyeXB0ZWRCbG9iLFxuICB0eXBlIEtleVByb3ZpZGVyLFxuICBFbnZLZXlQcm92aWRlcixcbiAgS21zS2V5UHJvdmlkZXIsXG4gIHR5cGUgUGVyT3JnS21zQ29uZmlnLFxuICB0eXBlIFBlck9yZ0ttc1Jlc29sdmVyLFxuICBQZXJPcmdLbXNLZXlQcm92aWRlcixcbn0gZnJvbSAnLi9zZWNyZXQtZW5jcnlwdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3JldC1yb3RhdGlvbi5qcyc7XG5leHBvcnQge1xuICBzZXRDb3VudGVyRW1pdHRlcixcbiAgcmVzZXRDb3VudGVyRW1pdHRlcixcbiAgZW1pdENvdW50ZXIsXG59IGZyb20gJy4vbWV0cmljLWVtaXR0ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hd3Mtc2NydWIuanMnO1xuZXhwb3J0IHtcbiAgZXh0cmFjdFByZWRpY2F0ZSxcbiAgU1BEWF9QUkVESUNBVEVfVFlQRSxcbn0gZnJvbSAnLi9kc3NlLmpzJztcbmV4cG9ydCB7XG4gIG1hc2tMaW5lLFxuICBsb29rc1NlbnNpdGl2ZSxcbiAgUkVEQUNURUQsXG4gIFNFTlNJVElWRV9WQUxVRV9QQVRURVJOUyxcbn0gZnJvbSAnLi9zZW5zaXRpdmUtcGF0dGVybnMuanMnO1xuZXhwb3J0IHtcbiAgaXNQcml2YXRlQWRkcmVzcyxcbiAgYXNzZXJ0U2FmZVVybCxcbiAgc2FmZUZldGNoLFxuICB0eXBlIFNhZmVGZXRjaFJlc3BvbnNlLFxufSBmcm9tICcuL3NzcmYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmV0ZW50aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcGxpYW5jZS1hdHRyaWJ1dGVzLmpzJztcbmV4cG9ydCB7XG4gIGxlYWRpbmdaZXJvQml0cyxcbiAgcHJvb2ZPZldvcmtIYXNoLFxuICBjaGFsbGVuZ2VLZXksXG4gIGNsYW1wRGlmZmljdWx0eSxcbiAgY3JlYXRlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHBhcnNlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHZlcmlmeVByb29mT2ZXb3JrLFxuICBzb2x2ZVByb29mT2ZXb3JrLFxuICBQT1dfREVGQVVMVF9ESUZGSUNVTFRZLFxuICBQT1dfTUFYX0RJRkZJQ1VMVFksXG4gIFBPV19DSEFMTEVOR0VfVFRMX01TLFxuICB0eXBlIFByb29mT2ZXb3JrQ2hhbGxlbmdlLFxuICB0eXBlIFByb29mT2ZXb3JrU29sdXRpb24sXG59IGZyb20gJy4vcHJvb2Ytb2Ytd29yay5qcyc7XG4iXX0=
|
package/lib/utils/params.d.ts
CHANGED
|
@@ -133,8 +133,40 @@ export declare function validateBulkArray<T = unknown>(value: unknown, fieldName
|
|
|
133
133
|
* `DATE_TRUNC` first argument in Postgres; restricted to a fixed enum so
|
|
134
134
|
* the value can never be injected into raw SQL.
|
|
135
135
|
*/
|
|
136
|
-
export declare const REPORT_INTERVALS: readonly ['day', 'week', 'month'];
|
|
136
|
+
export declare const REPORT_INTERVALS: readonly ['day', 'week', 'month', 'quarter'];
|
|
137
137
|
export type ReportInterval = (typeof REPORT_INTERVALS)[number];
|
|
138
|
+
/**
|
|
139
|
+
* Where a report's week starts. Postgres `DATE_TRUNC('week', …)` is ISO-8601 and
|
|
140
|
+
* ALWAYS starts Monday, with no option — so a Sunday-week org needs the boundary
|
|
141
|
+
* shifted explicitly rather than configured in the database.
|
|
142
|
+
*/
|
|
143
|
+
export declare const WEEK_STARTS: readonly ['monday', 'sunday'];
|
|
144
|
+
export type WeekStart = (typeof WEEK_STARTS)[number];
|
|
145
|
+
/**
|
|
146
|
+
* Validate an IANA timezone name using the runtime's own tz database, so the
|
|
147
|
+
* allow-list can't drift from what Postgres and `Intl` actually accept.
|
|
148
|
+
*
|
|
149
|
+
* Rejects anything `Intl.DateTimeFormat` won't take. That matters beyond
|
|
150
|
+
* correctness: the value is interpolated into `AT TIME ZONE`, and while it goes
|
|
151
|
+
* in as a bound parameter, a name Postgres rejects surfaces as an opaque query
|
|
152
|
+
* error rather than a 400 naming the field.
|
|
153
|
+
*/
|
|
154
|
+
export declare function isValidTimezone(tz: string): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Parse a `?tz=` report timezone, falling back to `orgDefault` and then UTC.
|
|
157
|
+
* Returns the validated name or `{ error }`.
|
|
158
|
+
*
|
|
159
|
+
* Every time-bucketed report takes one: bucketing in the database session's
|
|
160
|
+
* timezone (UTC in every deploy) meant a US team's "Monday" report cut off Sunday
|
|
161
|
+
* evening, so the week a manager read was not the week the team worked.
|
|
162
|
+
*/
|
|
163
|
+
export declare function parseReportTimezone(query: Record<string, unknown>, orgDefault?: string): string | {
|
|
164
|
+
error: string;
|
|
165
|
+
};
|
|
166
|
+
/** Parse a `?weekStart=` value, falling back to `orgDefault` and then Monday. */
|
|
167
|
+
export declare function parseWeekStart(query: Record<string, unknown>, orgDefault?: string): WeekStart | {
|
|
168
|
+
error: string;
|
|
169
|
+
};
|
|
138
170
|
/**
|
|
139
171
|
* Parse + validate a `?interval=` report bucket (defaults to 'week'). Returns the
|
|
140
172
|
* validated interval or `{ error }`. Shared by the timeseries report routes so the
|
package/lib/utils/params.js
CHANGED
|
@@ -143,7 +143,59 @@ export function validateBulkArray(value, fieldName, maxItems) {
|
|
|
143
143
|
* `DATE_TRUNC` first argument in Postgres; restricted to a fixed enum so
|
|
144
144
|
* the value can never be injected into raw SQL.
|
|
145
145
|
*/
|
|
146
|
-
export const REPORT_INTERVALS = ['day', 'week', 'month'];
|
|
146
|
+
export const REPORT_INTERVALS = ['day', 'week', 'month', 'quarter'];
|
|
147
|
+
/**
|
|
148
|
+
* Where a report's week starts. Postgres `DATE_TRUNC('week', …)` is ISO-8601 and
|
|
149
|
+
* ALWAYS starts Monday, with no option — so a Sunday-week org needs the boundary
|
|
150
|
+
* shifted explicitly rather than configured in the database.
|
|
151
|
+
*/
|
|
152
|
+
export const WEEK_STARTS = ['monday', 'sunday'];
|
|
153
|
+
/**
|
|
154
|
+
* Validate an IANA timezone name using the runtime's own tz database, so the
|
|
155
|
+
* allow-list can't drift from what Postgres and `Intl` actually accept.
|
|
156
|
+
*
|
|
157
|
+
* Rejects anything `Intl.DateTimeFormat` won't take. That matters beyond
|
|
158
|
+
* correctness: the value is interpolated into `AT TIME ZONE`, and while it goes
|
|
159
|
+
* in as a bound parameter, a name Postgres rejects surfaces as an opaque query
|
|
160
|
+
* error rather than a 400 naming the field.
|
|
161
|
+
*/
|
|
162
|
+
export function isValidTimezone(tz) {
|
|
163
|
+
// A bare offset like `+05:00` is accepted by Postgres but not by Intl, and it
|
|
164
|
+
// has no DST rules — which is exactly what a report period must respect.
|
|
165
|
+
if (!/^[A-Za-z][A-Za-z0-9+_\-]*(\/[A-Za-z0-9+_\-]+)*$/.test(tz))
|
|
166
|
+
return false;
|
|
167
|
+
try {
|
|
168
|
+
new Intl.DateTimeFormat('en-US', { timeZone: tz });
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Parse a `?tz=` report timezone, falling back to `orgDefault` and then UTC.
|
|
177
|
+
* Returns the validated name or `{ error }`.
|
|
178
|
+
*
|
|
179
|
+
* Every time-bucketed report takes one: bucketing in the database session's
|
|
180
|
+
* timezone (UTC in every deploy) meant a US team's "Monday" report cut off Sunday
|
|
181
|
+
* evening, so the week a manager read was not the week the team worked.
|
|
182
|
+
*/
|
|
183
|
+
export function parseReportTimezone(query, orgDefault) {
|
|
184
|
+
const raw = query.tz ?? query.timezone;
|
|
185
|
+
const tz = typeof raw === 'string' && raw.length > 0 ? raw : (orgDefault ?? 'UTC');
|
|
186
|
+
if (!isValidTimezone(tz))
|
|
187
|
+
return { error: `tz must be a valid IANA timezone name (e.g. America/Chicago), got: ${tz}` };
|
|
188
|
+
return tz;
|
|
189
|
+
}
|
|
190
|
+
/** Parse a `?weekStart=` value, falling back to `orgDefault` and then Monday. */
|
|
191
|
+
export function parseWeekStart(query, orgDefault) {
|
|
192
|
+
const raw = query.weekStart ?? orgDefault ?? 'monday';
|
|
193
|
+
const value = String(raw);
|
|
194
|
+
if (!WEEK_STARTS.includes(value)) {
|
|
195
|
+
return { error: `weekStart must be one of: ${WEEK_STARTS.join(', ')}` };
|
|
196
|
+
}
|
|
197
|
+
return value;
|
|
198
|
+
}
|
|
147
199
|
/**
|
|
148
200
|
* Parse + validate a `?interval=` report bucket (defaults to 'week'). Returns the
|
|
149
201
|
* validated interval or `{ error }`. Shared by the timeseries report routes so the
|
|
@@ -198,4 +250,4 @@ export function parseDateRange(query, options = {}) {
|
|
|
198
250
|
}
|
|
199
251
|
return { from: fromStr, to: toStr };
|
|
200
252
|
}
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQW9CbEU7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBa0MsRUFDbEMsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFjLEVBQUUsWUFBb0I7SUFDaEUsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUMvRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjO0lBQzdDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQUUs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LEtBQUssRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgTUFYX1BBR0VfT0ZGU0VUIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5cbi8qKlxuICogU2hhcGUgY29udmVudGlvbiBmb3IgdGhlIGlubGluZSBwYXJzZS1ndWFyZCBoZWxwZXJzIGJlbG93LlxuICpcbiAqIFRoZXNlIHJldHVybiBhIGxpZ2h0d2VpZ2h0IGB7IHZhbHVlIH0gfCB7IGVycm9yIH1gIChuYXJyb3dlZCB3aXRoXG4gKiBgJ2Vycm9yJyBpbiByZXN1bHRgKSDigJQgZGVsaWJlcmF0ZWx5IERJU1RJTkNUIGZyb20gdGhlIHNjaGVtYS12YWxpZGF0aW9uXG4gKiBgVmFsaWRhdGlvblJlc3VsdDxUPmAgKGB7IG9rLCB2YWx1ZSB9IHwgeyBvaywgZXJyb3IgfWApIGluXG4gKiBgdmFsaWRhdGlvbi9taWRkbGV3YXJlLnRzYC4gWm9kIHNjaGVtYSBwYXJzaW5nIHVzZXMgdGhlIGBva2AtZGlzY3JpbWluYXRlZFxuICogc2hhcGU7IHRoZXNlIGFkLWhvYyByZXF1ZXN0LXBhcmFtZXRlciBndWFyZHMgdXNlIGAnZXJyb3InIGluYC4gVGhlIHNwbGl0IGlzXG4gKiBpbnRlbnRpb25hbCBhbmQgZG9jdW1lbnRlZCAoc2VlIHRoZSBub3RlIG9uIGBWYWxpZGF0aW9uUmVzdWx0YCk6IGNvbnZlcmdpbmdcbiAqIHRoZW0gd291bGQgY2h1cm4gZXZlcnkgYCdlcnJvcicgaW4gcmVzdWx0YCBjYWxsIHNpdGUgYWNyb3NzIHRoZSBkb3duc3RyZWFtXG4gKiBzZXJ2aWNlcyB3aXRoIG5vIGJlaGF2aW91cmFsIGNoYW5nZSwgc28gaXQncyBsZWZ0IGFzIGEgZG9jdW1lbnRlZCBjb252ZW50aW9uLlxuICovXG5cbi8qKlxuICogRXhwcmVzcyA1IHBhcmFtZXRlciB0eXBlLlxuICovXG50eXBlIFBhcmFtVmFsdWUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFeHRyYWN0IGEgc2luZ2xlIHN0cmluZyBwYXJhbWV0ZXIgZnJvbSBFeHByZXNzIDUgcm91dGUgcGFyYW1zLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZXF1ZXN0IHBhcmFtcyBvYmplY3RcbiAqIEBwYXJhbSBrZXkgLSBQYXJhbWV0ZXIga2V5XG4gKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIHZhbHVlIGFzIGEgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm90IHByZXNlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gUm91dGU6IEdFVCAvcGx1Z2lucy86aWRcbiAqIGNvbnN0IGlkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ2lkJyk7XG4gKiBpZiAoIWlkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdNaXNzaW5nIGlkIHBhcmFtZXRlcicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbShcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBQYXJhbVZhbHVlPixcbiAga2V5OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHBhcmFtc1trZXldO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhbiBpbnRlZ2VyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFF1ZXJ5IHBhcmFtZXRlciB2YWx1ZVxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgcGFyc2luZyBmYWlsc1xuICogQHJldHVybnMgUGFyc2VkIGludGVnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbGltaXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5saW1pdCwgMTApO1xuICogY29uc3Qgb2Zmc2V0ID0gcGFyc2VRdWVyeUludChyZXEucXVlcnkub2Zmc2V0LCAwKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludCh2YWx1ZTogdW5rbm93biwgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KFN0cmluZyh2YWx1ZSksIDEwKTtcbiAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcmV0dXJucyBTdHJpbmcgdmFsdWUgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlYXJjaCA9IHBhcnNlUXVlcnlTdHJpbmcocmVxLnF1ZXJ5LnNlYXJjaCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIG9wdGlvbmFsIElTTyBkYXRlIHF1ZXJ5IHBhcmFtOiBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCwgYG51bGxgIHdoZW5cbiAqIG1hbGZvcm1lZCAodGhlIHJvdXRlIGFuc3dlcnMgYSA0MDApLCBlbHNlIHRoZSBEYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcHRpb25hbERhdGUocmF3OiB1bmtub3duKTogRGF0ZSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICBjb25zdCBzID0gcGFyc2VRdWVyeVN0cmluZyhyYXcpO1xuICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShzKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyB0byBhIHBvc2l0aXZlIGludGVnZXIsIHJldHVybmluZyBhIGZhbGxiYWNrIGlmIGludmFsaWQuXG4gKiBVc2VmdWwgZm9yIHBhcnNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggbnVtZXJpYyBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUG9zaXRpdmVJbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxsYmFjaztcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+IDAgPyBwYXJzZWQgOiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IGludCwgdGhlbiBjbGFtcCB0byBgWzEsIG1heF1gLiBSZXR1cm5zIGBkZWZhdWx0VmFsdWVgIChhZnRlclxuICogdGhlIHNhbWUgY2xhbXApIHdoZW4gdGhlIGlucHV0IGlzIG1pc3NpbmcvaW52YWxpZC4gVXNlIGZvciBgbGltaXRgLXN0eWxlXG4gKiBxdWVyeSBwYXJhbWV0ZXJzIHdoZXJlIGFuIHVuYm91bmRlZCB2YWx1ZSB3b3VsZCBjb3N0IHJlYWwgbW9uZXkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGxpbWl0ID0gcGFyc2VRdWVyeUludENsYW1wZWQocmVxLnF1ZXJ5LmxpbWl0LCA1MCwgMTAwMCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5SW50Q2xhbXBlZChcbiAgdmFsdWU6IHVua25vd24sXG4gIGRlZmF1bHRWYWx1ZTogbnVtYmVyLFxuICBtYXg6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHJhdyA9IHBhcnNlUXVlcnlJbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSk7XG4gIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLm1pbihyYXcsIG1heCkpO1xufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlUGFnZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VPcHRpb25zIHtcbiAgLyoqIFBhZ2Ugc2l6ZSB3aGVuIHRoZSBjYWxsZXIgbmFtZXMgbm9uZS4gUkVRVUlSRUQg4oCUIHBpY2sgaXQgZGVsaWJlcmF0ZWx5LiAqL1xuICBkZWY6IG51bWJlcjtcbiAgLyoqIEhhcmQgY2VpbGluZyBvbiBvbmUgcGFnZS4gUkVRVUlSRUQg4oCUIGFuIHVuYm91bmRlZCBgP2xpbWl0PWAgY29zdHMgbW9uZXkuICovXG4gIG1heDogbnVtYmVyO1xuICAvKipcbiAgICogRGVlcGVzdCBgb2Zmc2V0YCBhIGNhbGxlciBtYXkgcmVhY2guIEEgbnVtYmVyLCBvciBhIGZ1bmN0aW9uIG9mIHRoZVxuICAgKiByZXNvbHZlZCBsaW1pdCBmb3Igc291cmNlcyB0aGF0IHBhZ2UgYSBmaXhlZC1kZXB0aCB3aW5kb3cgKHRoZSBwbHVnaW4gcXVldWVcbiAgICogcmVhZHMgYG9mZnNldCArIGxpbWl0YCBlbnRyaWVzIGZyb20gZXZlcnkgc291cmNlLCBzbyBpdHMgZGVwdGggY2FwIGlzXG4gICAqIGBERVBUSCAtIGxpbWl0YCkuIERlZmF1bHRzIHRvIGBNQVhfUEFHRV9PRkZTRVRgLlxuICAgKi9cbiAgbWF4T2Zmc2V0PzogbnVtYmVyIHwgKChsaW1pdDogbnVtYmVyKSA9PiBudW1iZXIpO1xufVxuXG4vKiogQSBwYXJzZWQsIGNsYW1wZWQgYD9saW1pdD0mb2Zmc2V0PWAgd2luZG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlIHtcbiAgbGltaXQ6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogVEhFIHBhZ2luYXRpb24gcHJpbWl0aXZlLiBQYXJzZSBhbmQgY2xhbXAgYGxpbWl0YC9gb2Zmc2V0YCBmcm9tIGEgcXVlcnkgKG9yXG4gKiBmcm9tIGEgc2VydmljZS1sYXllciBvcHRpb25zIG9iamVjdCDigJQgbnVtZXJpYyB2YWx1ZXMgd29yayB0b28pLlxuICpcbiAqIGBsaW1pdGAgY2xhbXBzIHRvIGBbMSwgbWF4XWAgYW5kIGZhbGxzIGJhY2sgdG8gYGRlZmA7IGBvZmZzZXRgIGNsYW1wcyB0b1xuICogYFswLCBtYXhPZmZzZXRdYC4gUm91dGUgZGVmYXVsdHMgYXJlIHBlci1yb3V0ZSDigJQgYSBxdWV1ZSBsaXN0aW5nIGFuZCBhIG1lbWJlclxuICogcm9zdGVyIHdhbnQgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMg4oCUIGJ1dCB0aGV5IGFyZSBERUNMQVJFRCBoZXJlIHJhdGhlciB0aGFuXG4gKiBoYW5kLXJvbGxlZCB3aXRoIGBNYXRoLm1pbihNYXRoLm1heCguLi4pKWAgYXQgdGhlIGNhbGwgc2l0ZSwgYW5kIG5vIGNhbGxlclxuICogY2FuIGZvcmdldCB0aGUgY2FwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGxpbWl0LCBvZmZzZXQgfSA9IHBhcnNlUGFnZShyZXEucXVlcnksIHsgZGVmOiA1MCwgbWF4OiAyMDAgfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhZ2UocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcHRzOiBQYWdlT3B0aW9ucyk6IFBhZ2Uge1xuICBjb25zdCBsaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKHBhcnNlUXVlcnlJbnQocXVlcnkubGltaXQsIG9wdHMuZGVmKSwgb3B0cy5tYXgpKTtcbiAgY29uc3QgcmF3TWF4T2Zmc2V0ID0gdHlwZW9mIG9wdHMubWF4T2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5tYXhPZmZzZXQobGltaXQpIDogb3B0cy5tYXhPZmZzZXQ7XG4gIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWF4KDAsIHJhd01heE9mZnNldCA/PyBNQVhfUEFHRV9PRkZTRVQpO1xuICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihwYXJzZVF1ZXJ5SW50KHF1ZXJ5Lm9mZnNldCwgMCksIG1heE9mZnNldCkpO1xuICByZXR1cm4geyBsaW1pdCwgb2Zmc2V0IH07XG59XG5cbi8qKlxuICogQnVsay1hcnJheSByZXF1ZXN0IGd1YXJkLiBWYWxpZGF0ZXMgdGhhdCBgdmFsdWVgIGlzIGFuIGFycmF5LCBub24tZW1wdHksXG4gKiBhbmQgd2l0aGluIHRoZSBjb25maWd1cmVkIGNhcC4gUmV0dXJucyB0aGUgdHlwZWQgYXJyYXkgb3IgYW4gZXJyb3Igb2JqZWN0XG4gKiB0aGUgY2FsbGVyIGNhbiBmb3J3YXJkIHRvIGBzZW5kRXJyb3JgL2BzZW5kQmFkUmVxdWVzdGAuXG4gKlxuICogUmVwbGFjZXMgYSBoYW5kLXJvbGxlZCBgaWYgKCFBcnJheS5pc0FycmF5KC4uLikpIHsgLi4uIH1gICsgbGVuZ3RoIGNoZWNrXG4gKiBibG9jayB0aGF0IHdhcyBkdXBsaWNhdGVkIGFjcm9zcyBidWxrIGVuZHBvaW50cyBpbiBwaXBlbGluZSwgcGx1Z2luLFxuICogY29tcGxpYW5jZSwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUJ1bGtBcnJheShyZXEuYm9keS5pZHMsICdpZHMnKTtcbiAqIGlmICgnZXJyb3InIGluIHJlc3VsdCkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmVzdWx0LmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCBpZHMgPSByZXN1bHQudmFsdWU7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJ1bGtBcnJheTxUID0gdW5rbm93bj4oXG4gIHZhbHVlOiB1bmtub3duLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgbWF4SXRlbXM/OiBudW1iZXIsXG4pOiB7IHZhbHVlOiBUW10gfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBlcnJvcjogYFJlcXVlc3QgYm9keSBtdXN0IGluY2x1ZGUgYSBub24tZW1wdHkgXCIke2ZpZWxkTmFtZX1cIiBhcnJheWAgfTtcbiAgfVxuICAvLyBDb3JlQ29uc3RhbnRzLk1BWF9CVUxLX0lURU1TIGlzbid0IGltcG9ydGVkIGhlcmUgdG8gYXZvaWQgYSBjaXJjdWxhclxuICAvLyBwYXRoIHRocm91Z2ggY29uc3RhbnRzL2luZGV4OyBjYWxsZXJzIHBhc3MgaXQgZXhwbGljaXRseSBvciBvbWl0IGZvclxuICAvLyBubyB1cHBlciBib3VuZC5cbiAgaWYgKG1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gbWF4SXRlbXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYE1heGltdW0gJHttYXhJdGVtc30gaXRlbXMgcGVyIGJ1bGsgb3BlcmF0aW9uYCB9O1xuICB9XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSBhcyBUW10gfTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgaW50ZXJ2YWxzIGZvciB0aW1lLWJ1Y2tldGVkIHJlcG9ydCBxdWVyaWVzLiBVc2VkIGFzIHRoZVxuICogYERBVEVfVFJVTkNgIGZpcnN0IGFyZ3VtZW50IGluIFBvc3RncmVzOyByZXN0cmljdGVkIHRvIGEgZml4ZWQgZW51bSBzb1xuICogdGhlIHZhbHVlIGNhbiBuZXZlciBiZSBpbmplY3RlZCBpbnRvIHJhdyBTUUwuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVBPUlRfSU5URVJWQUxTID0gWydkYXknLCAnd2VlaycsICdtb250aCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVwb3J0SW50ZXJ2YWwgPSAodHlwZW9mIFJFUE9SVF9JTlRFUlZBTFMpW251bWJlcl07XG5cbi8qKlxuICogUGFyc2UgKyB2YWxpZGF0ZSBhIGA/aW50ZXJ2YWw9YCByZXBvcnQgYnVja2V0IChkZWZhdWx0cyB0byAnd2VlaycpLiBSZXR1cm5zIHRoZVxuICogdmFsaWRhdGVkIGludGVydmFsIG9yIGB7IGVycm9yIH1gLiBTaGFyZWQgYnkgdGhlIHRpbWVzZXJpZXMgcmVwb3J0IHJvdXRlcyBzbyB0aGVcbiAqIGRlZmF1bHQgKyBhbGxvdy1saXN0ICsgZXJyb3IgbWVzc2FnZSBsaXZlIGluIG9uZSBwbGFjZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgaW50ZXJ2YWwgPSBwYXJzZVJlcG9ydEludGVydmFsKHJlcS5xdWVyeSk7XG4gKiBpZiAodHlwZW9mIGludGVydmFsID09PSAnb2JqZWN0JykgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgaW50ZXJ2YWwuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVwb3J0SW50ZXJ2YWwocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVwb3J0SW50ZXJ2YWwgfCB7IGVycm9yOiBzdHJpbmcgfSB7XG4gIGNvbnN0IGludGVydmFsID0gU3RyaW5nKHF1ZXJ5LmludGVydmFsID8/ICd3ZWVrJyk7XG4gIGlmICghUkVQT1JUX0lOVEVSVkFMUy5pbmNsdWRlcyhpbnRlcnZhbCBhcyBSZXBvcnRJbnRlcnZhbCkpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYGludGVydmFsIG11c3QgYmUgb25lIG9mOiAke1JFUE9SVF9JTlRFUlZBTFMuam9pbignLCAnKX1gIH07XG4gIH1cbiAgcmV0dXJuIGludGVydmFsIGFzIFJlcG9ydEludGVydmFsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgYD9mcm9tPSZ0bz1gIGRhdGUgcmFuZ2Ugd2l0aCBkZWZhdWx0cyBvZiBcIjMwIGRheXMgYWdvIOKGkiBub3dcIi5cbiAqIFJlamVjdHMgbm9uLXN0cmluZyBpbnB1dHMgKEV4cHJlc3MncyBwYXJzZXIgY2FuIHByb2R1Y2Ugc3RyaW5nW10gZm9yXG4gKiByZXBlYXRlZCBrZXlzKSwgaW52YWxpZCBJU08gdGltZXN0YW1wcywgYW5kIGludmVydGVkIHJhbmdlcy5cbiAqXG4gKiBSZXR1cm5zIGVpdGhlciBgeyBmcm9tLCB0byB9YCBJU08gc3RyaW5ncyBvciBgeyBlcnJvciB9YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmFuZ2UgPSBwYXJzZURhdGVSYW5nZShyZXEucXVlcnkpO1xuICogaWYgKCdlcnJvcicgaW4gcmFuZ2UpIHJldHVybiBzZW5kQmFkUmVxdWVzdChyZXMsIHJhbmdlLmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCByb3dzID0gYXdhaXQgc3ZjLmxpc3QocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlUmFuZ2UoXG4gIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogeyBtYXhSYW5nZU1zPzogbnVtYmVyOyBkZWZhdWx0RGF5c0JhY2s/OiBudW1iZXIgfSA9IHt9LFxuKTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgeyBtYXhSYW5nZU1zLCBkZWZhdWx0RGF5c0JhY2sgPSAzMCB9ID0gb3B0aW9ucztcblxuICBjb25zdCByYXdGcm9tID0gcXVlcnkuZnJvbTtcbiAgY29uc3QgcmF3VG8gPSBxdWVyeS50bztcblxuICBpZiAocmF3RnJvbSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdGcm9tICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuICBpZiAocmF3VG8gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmF3VG8gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZyb21TdHIgPSByYXdGcm9tID8/IG5ldyBEYXRlKG5vdyAtIGRlZmF1bHREYXlzQmFjayAqIDI0ICogNjAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHRvU3RyID0gcmF3VG8gPz8gbmV3IERhdGUobm93KS50b0lTT1N0cmluZygpO1xuXG4gIGNvbnN0IGZyb21NcyA9IERhdGUucGFyc2UoZnJvbVN0cik7XG4gIGNvbnN0IHRvTXMgPSBEYXRlLnBhcnNlKHRvU3RyKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZnJvbU1zKSkgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b01zKSkgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgaXMgbm90IGEgdmFsaWQgSVNPIHRpbWVzdGFtcCcgfTtcbiAgaWYgKGZyb21NcyA+IHRvTXMpIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBlYXJsaWVyIHRoYW4gXCJ0b1wiJyB9O1xuICBpZiAobWF4UmFuZ2VNcyAhPT0gdW5kZWZpbmVkICYmIHRvTXMgLSBmcm9tTXMgPiBtYXhSYW5nZU1zKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBEYXRlIHJhbmdlIGV4Y2VlZHMgbWF4aW11bSBvZiAke01hdGguZmxvb3IobWF4UmFuZ2VNcyAvICgyNCAqIDYwICogNjAgKiAxMDAwKSl9IGRheXNgIH07XG4gIH1cblxuICByZXR1cm4geyBmcm9tOiBmcm9tU3RyLCB0bzogdG9TdHIgfTtcbn1cbiJdfQ==
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQW9CbEU7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBa0MsRUFDbEMsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFjLEVBQUUsWUFBb0I7SUFDaEUsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUMvRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjO0lBQzdDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQUUs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QUFJLElBQUksR0FBRyxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxpQ0FBaUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzRyxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgTUFYX1BBR0VfT0ZGU0VUIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5cbi8qKlxuICogU2hhcGUgY29udmVudGlvbiBmb3IgdGhlIGlubGluZSBwYXJzZS1ndWFyZCBoZWxwZXJzIGJlbG93LlxuICpcbiAqIFRoZXNlIHJldHVybiBhIGxpZ2h0d2VpZ2h0IGB7IHZhbHVlIH0gfCB7IGVycm9yIH1gIChuYXJyb3dlZCB3aXRoXG4gKiBgJ2Vycm9yJyBpbiByZXN1bHRgKSDigJQgZGVsaWJlcmF0ZWx5IERJU1RJTkNUIGZyb20gdGhlIHNjaGVtYS12YWxpZGF0aW9uXG4gKiBgVmFsaWRhdGlvblJlc3VsdDxUPmAgKGB7IG9rLCB2YWx1ZSB9IHwgeyBvaywgZXJyb3IgfWApIGluXG4gKiBgdmFsaWRhdGlvbi9taWRkbGV3YXJlLnRzYC4gWm9kIHNjaGVtYSBwYXJzaW5nIHVzZXMgdGhlIGBva2AtZGlzY3JpbWluYXRlZFxuICogc2hhcGU7IHRoZXNlIGFkLWhvYyByZXF1ZXN0LXBhcmFtZXRlciBndWFyZHMgdXNlIGAnZXJyb3InIGluYC4gVGhlIHNwbGl0IGlzXG4gKiBpbnRlbnRpb25hbCBhbmQgZG9jdW1lbnRlZCAoc2VlIHRoZSBub3RlIG9uIGBWYWxpZGF0aW9uUmVzdWx0YCk6IGNvbnZlcmdpbmdcbiAqIHRoZW0gd291bGQgY2h1cm4gZXZlcnkgYCdlcnJvcicgaW4gcmVzdWx0YCBjYWxsIHNpdGUgYWNyb3NzIHRoZSBkb3duc3RyZWFtXG4gKiBzZXJ2aWNlcyB3aXRoIG5vIGJlaGF2aW91cmFsIGNoYW5nZSwgc28gaXQncyBsZWZ0IGFzIGEgZG9jdW1lbnRlZCBjb252ZW50aW9uLlxuICovXG5cbi8qKlxuICogRXhwcmVzcyA1IHBhcmFtZXRlciB0eXBlLlxuICovXG50eXBlIFBhcmFtVmFsdWUgPSBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBFeHRyYWN0IGEgc2luZ2xlIHN0cmluZyBwYXJhbWV0ZXIgZnJvbSBFeHByZXNzIDUgcm91dGUgcGFyYW1zLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZXF1ZXN0IHBhcmFtcyBvYmplY3RcbiAqIEBwYXJhbSBrZXkgLSBQYXJhbWV0ZXIga2V5XG4gKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIHZhbHVlIGFzIGEgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm90IHByZXNlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gUm91dGU6IEdFVCAvcGx1Z2lucy86aWRcbiAqIGNvbnN0IGlkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ2lkJyk7XG4gKiBpZiAoIWlkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdNaXNzaW5nIGlkIHBhcmFtZXRlcicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbShcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBQYXJhbVZhbHVlPixcbiAga2V5OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHBhcmFtc1trZXldO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhbiBpbnRlZ2VyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFF1ZXJ5IHBhcmFtZXRlciB2YWx1ZVxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgcGFyc2luZyBmYWlsc1xuICogQHJldHVybnMgUGFyc2VkIGludGVnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbGltaXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5saW1pdCwgMTApO1xuICogY29uc3Qgb2Zmc2V0ID0gcGFyc2VRdWVyeUludChyZXEucXVlcnkub2Zmc2V0LCAwKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludCh2YWx1ZTogdW5rbm93biwgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KFN0cmluZyh2YWx1ZSksIDEwKTtcbiAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcmV0dXJucyBTdHJpbmcgdmFsdWUgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlYXJjaCA9IHBhcnNlUXVlcnlTdHJpbmcocmVxLnF1ZXJ5LnNlYXJjaCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIG9wdGlvbmFsIElTTyBkYXRlIHF1ZXJ5IHBhcmFtOiBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCwgYG51bGxgIHdoZW5cbiAqIG1hbGZvcm1lZCAodGhlIHJvdXRlIGFuc3dlcnMgYSA0MDApLCBlbHNlIHRoZSBEYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcHRpb25hbERhdGUocmF3OiB1bmtub3duKTogRGF0ZSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICBjb25zdCBzID0gcGFyc2VRdWVyeVN0cmluZyhyYXcpO1xuICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShzKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyB0byBhIHBvc2l0aXZlIGludGVnZXIsIHJldHVybmluZyBhIGZhbGxiYWNrIGlmIGludmFsaWQuXG4gKiBVc2VmdWwgZm9yIHBhcnNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggbnVtZXJpYyBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUG9zaXRpdmVJbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxsYmFjaztcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+IDAgPyBwYXJzZWQgOiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IGludCwgdGhlbiBjbGFtcCB0byBgWzEsIG1heF1gLiBSZXR1cm5zIGBkZWZhdWx0VmFsdWVgIChhZnRlclxuICogdGhlIHNhbWUgY2xhbXApIHdoZW4gdGhlIGlucHV0IGlzIG1pc3NpbmcvaW52YWxpZC4gVXNlIGZvciBgbGltaXRgLXN0eWxlXG4gKiBxdWVyeSBwYXJhbWV0ZXJzIHdoZXJlIGFuIHVuYm91bmRlZCB2YWx1ZSB3b3VsZCBjb3N0IHJlYWwgbW9uZXkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGxpbWl0ID0gcGFyc2VRdWVyeUludENsYW1wZWQocmVxLnF1ZXJ5LmxpbWl0LCA1MCwgMTAwMCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5SW50Q2xhbXBlZChcbiAgdmFsdWU6IHVua25vd24sXG4gIGRlZmF1bHRWYWx1ZTogbnVtYmVyLFxuICBtYXg6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHJhdyA9IHBhcnNlUXVlcnlJbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSk7XG4gIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLm1pbihyYXcsIG1heCkpO1xufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlUGFnZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VPcHRpb25zIHtcbiAgLyoqIFBhZ2Ugc2l6ZSB3aGVuIHRoZSBjYWxsZXIgbmFtZXMgbm9uZS4gUkVRVUlSRUQg4oCUIHBpY2sgaXQgZGVsaWJlcmF0ZWx5LiAqL1xuICBkZWY6IG51bWJlcjtcbiAgLyoqIEhhcmQgY2VpbGluZyBvbiBvbmUgcGFnZS4gUkVRVUlSRUQg4oCUIGFuIHVuYm91bmRlZCBgP2xpbWl0PWAgY29zdHMgbW9uZXkuICovXG4gIG1heDogbnVtYmVyO1xuICAvKipcbiAgICogRGVlcGVzdCBgb2Zmc2V0YCBhIGNhbGxlciBtYXkgcmVhY2guIEEgbnVtYmVyLCBvciBhIGZ1bmN0aW9uIG9mIHRoZVxuICAgKiByZXNvbHZlZCBsaW1pdCBmb3Igc291cmNlcyB0aGF0IHBhZ2UgYSBmaXhlZC1kZXB0aCB3aW5kb3cgKHRoZSBwbHVnaW4gcXVldWVcbiAgICogcmVhZHMgYG9mZnNldCArIGxpbWl0YCBlbnRyaWVzIGZyb20gZXZlcnkgc291cmNlLCBzbyBpdHMgZGVwdGggY2FwIGlzXG4gICAqIGBERVBUSCAtIGxpbWl0YCkuIERlZmF1bHRzIHRvIGBNQVhfUEFHRV9PRkZTRVRgLlxuICAgKi9cbiAgbWF4T2Zmc2V0PzogbnVtYmVyIHwgKChsaW1pdDogbnVtYmVyKSA9PiBudW1iZXIpO1xufVxuXG4vKiogQSBwYXJzZWQsIGNsYW1wZWQgYD9saW1pdD0mb2Zmc2V0PWAgd2luZG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlIHtcbiAgbGltaXQ6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogVEhFIHBhZ2luYXRpb24gcHJpbWl0aXZlLiBQYXJzZSBhbmQgY2xhbXAgYGxpbWl0YC9gb2Zmc2V0YCBmcm9tIGEgcXVlcnkgKG9yXG4gKiBmcm9tIGEgc2VydmljZS1sYXllciBvcHRpb25zIG9iamVjdCDigJQgbnVtZXJpYyB2YWx1ZXMgd29yayB0b28pLlxuICpcbiAqIGBsaW1pdGAgY2xhbXBzIHRvIGBbMSwgbWF4XWAgYW5kIGZhbGxzIGJhY2sgdG8gYGRlZmA7IGBvZmZzZXRgIGNsYW1wcyB0b1xuICogYFswLCBtYXhPZmZzZXRdYC4gUm91dGUgZGVmYXVsdHMgYXJlIHBlci1yb3V0ZSDigJQgYSBxdWV1ZSBsaXN0aW5nIGFuZCBhIG1lbWJlclxuICogcm9zdGVyIHdhbnQgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMg4oCUIGJ1dCB0aGV5IGFyZSBERUNMQVJFRCBoZXJlIHJhdGhlciB0aGFuXG4gKiBoYW5kLXJvbGxlZCB3aXRoIGBNYXRoLm1pbihNYXRoLm1heCguLi4pKWAgYXQgdGhlIGNhbGwgc2l0ZSwgYW5kIG5vIGNhbGxlclxuICogY2FuIGZvcmdldCB0aGUgY2FwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGxpbWl0LCBvZmZzZXQgfSA9IHBhcnNlUGFnZShyZXEucXVlcnksIHsgZGVmOiA1MCwgbWF4OiAyMDAgfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhZ2UocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcHRzOiBQYWdlT3B0aW9ucyk6IFBhZ2Uge1xuICBjb25zdCBsaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKHBhcnNlUXVlcnlJbnQocXVlcnkubGltaXQsIG9wdHMuZGVmKSwgb3B0cy5tYXgpKTtcbiAgY29uc3QgcmF3TWF4T2Zmc2V0ID0gdHlwZW9mIG9wdHMubWF4T2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5tYXhPZmZzZXQobGltaXQpIDogb3B0cy5tYXhPZmZzZXQ7XG4gIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWF4KDAsIHJhd01heE9mZnNldCA/PyBNQVhfUEFHRV9PRkZTRVQpO1xuICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihwYXJzZVF1ZXJ5SW50KHF1ZXJ5Lm9mZnNldCwgMCksIG1heE9mZnNldCkpO1xuICByZXR1cm4geyBsaW1pdCwgb2Zmc2V0IH07XG59XG5cbi8qKlxuICogQnVsay1hcnJheSByZXF1ZXN0IGd1YXJkLiBWYWxpZGF0ZXMgdGhhdCBgdmFsdWVgIGlzIGFuIGFycmF5LCBub24tZW1wdHksXG4gKiBhbmQgd2l0aGluIHRoZSBjb25maWd1cmVkIGNhcC4gUmV0dXJucyB0aGUgdHlwZWQgYXJyYXkgb3IgYW4gZXJyb3Igb2JqZWN0XG4gKiB0aGUgY2FsbGVyIGNhbiBmb3J3YXJkIHRvIGBzZW5kRXJyb3JgL2BzZW5kQmFkUmVxdWVzdGAuXG4gKlxuICogUmVwbGFjZXMgYSBoYW5kLXJvbGxlZCBgaWYgKCFBcnJheS5pc0FycmF5KC4uLikpIHsgLi4uIH1gICsgbGVuZ3RoIGNoZWNrXG4gKiBibG9jayB0aGF0IHdhcyBkdXBsaWNhdGVkIGFjcm9zcyBidWxrIGVuZHBvaW50cyBpbiBwaXBlbGluZSwgcGx1Z2luLFxuICogY29tcGxpYW5jZSwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUJ1bGtBcnJheShyZXEuYm9keS5pZHMsICdpZHMnKTtcbiAqIGlmICgnZXJyb3InIGluIHJlc3VsdCkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmVzdWx0LmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCBpZHMgPSByZXN1bHQudmFsdWU7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJ1bGtBcnJheTxUID0gdW5rbm93bj4oXG4gIHZhbHVlOiB1bmtub3duLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgbWF4SXRlbXM/OiBudW1iZXIsXG4pOiB7IHZhbHVlOiBUW10gfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBlcnJvcjogYFJlcXVlc3QgYm9keSBtdXN0IGluY2x1ZGUgYSBub24tZW1wdHkgXCIke2ZpZWxkTmFtZX1cIiBhcnJheWAgfTtcbiAgfVxuICAvLyBDb3JlQ29uc3RhbnRzLk1BWF9CVUxLX0lURU1TIGlzbid0IGltcG9ydGVkIGhlcmUgdG8gYXZvaWQgYSBjaXJjdWxhclxuICAvLyBwYXRoIHRocm91Z2ggY29uc3RhbnRzL2luZGV4OyBjYWxsZXJzIHBhc3MgaXQgZXhwbGljaXRseSBvciBvbWl0IGZvclxuICAvLyBubyB1cHBlciBib3VuZC5cbiAgaWYgKG1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gbWF4SXRlbXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYE1heGltdW0gJHttYXhJdGVtc30gaXRlbXMgcGVyIGJ1bGsgb3BlcmF0aW9uYCB9O1xuICB9XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSBhcyBUW10gfTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgaW50ZXJ2YWxzIGZvciB0aW1lLWJ1Y2tldGVkIHJlcG9ydCBxdWVyaWVzLiBVc2VkIGFzIHRoZVxuICogYERBVEVfVFJVTkNgIGZpcnN0IGFyZ3VtZW50IGluIFBvc3RncmVzOyByZXN0cmljdGVkIHRvIGEgZml4ZWQgZW51bSBzb1xuICogdGhlIHZhbHVlIGNhbiBuZXZlciBiZSBpbmplY3RlZCBpbnRvIHJhdyBTUUwuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVBPUlRfSU5URVJWQUxTID0gWydkYXknLCAnd2VlaycsICdtb250aCcsICdxdWFydGVyJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXBvcnRJbnRlcnZhbCA9ICh0eXBlb2YgUkVQT1JUX0lOVEVSVkFMUylbbnVtYmVyXTtcblxuLyoqXG4gKiBXaGVyZSBhIHJlcG9ydCdzIHdlZWsgc3RhcnRzLiBQb3N0Z3JlcyBgREFURV9UUlVOQygnd2VlaycsIOKApilgIGlzIElTTy04NjAxIGFuZFxuICogQUxXQVlTIHN0YXJ0cyBNb25kYXksIHdpdGggbm8gb3B0aW9uIOKAlCBzbyBhIFN1bmRheS13ZWVrIG9yZyBuZWVkcyB0aGUgYm91bmRhcnlcbiAqIHNoaWZ0ZWQgZXhwbGljaXRseSByYXRoZXIgdGhhbiBjb25maWd1cmVkIGluIHRoZSBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFRUtfU1RBUlRTID0gWydtb25kYXknLCAnc3VuZGF5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBXZWVrU3RhcnQgPSAodHlwZW9mIFdFRUtfU1RBUlRTKVtudW1iZXJdO1xuXG4vKipcbiAqIFZhbGlkYXRlIGFuIElBTkEgdGltZXpvbmUgbmFtZSB1c2luZyB0aGUgcnVudGltZSdzIG93biB0eiBkYXRhYmFzZSwgc28gdGhlXG4gKiBhbGxvdy1saXN0IGNhbid0IGRyaWZ0IGZyb20gd2hhdCBQb3N0Z3JlcyBhbmQgYEludGxgIGFjdHVhbGx5IGFjY2VwdC5cbiAqXG4gKiBSZWplY3RzIGFueXRoaW5nIGBJbnRsLkRhdGVUaW1lRm9ybWF0YCB3b24ndCB0YWtlLiBUaGF0IG1hdHRlcnMgYmV5b25kXG4gKiBjb3JyZWN0bmVzczogdGhlIHZhbHVlIGlzIGludGVycG9sYXRlZCBpbnRvIGBBVCBUSU1FIFpPTkVgLCBhbmQgd2hpbGUgaXQgZ29lc1xuICogaW4gYXMgYSBib3VuZCBwYXJhbWV0ZXIsIGEgbmFtZSBQb3N0Z3JlcyByZWplY3RzIHN1cmZhY2VzIGFzIGFuIG9wYXF1ZSBxdWVyeVxuICogZXJyb3IgcmF0aGVyIHRoYW4gYSA0MDAgbmFtaW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaW1lem9uZSh0ejogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEEgYmFyZSBvZmZzZXQgbGlrZSBgKzA1OjAwYCBpcyBhY2NlcHRlZCBieSBQb3N0Z3JlcyBidXQgbm90IGJ5IEludGwsIGFuZCBpdFxuICAvLyBoYXMgbm8gRFNUIHJ1bGVzIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoYXQgYSByZXBvcnQgcGVyaW9kIG11c3QgcmVzcGVjdC5cbiAgaWYgKCEvXltBLVphLXpdW0EtWmEtejAtOStfXFwtXSooXFwvW0EtWmEtejAtOStfXFwtXSspKiQvLnRlc3QodHopKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywgeyB0aW1lWm9uZTogdHogfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgYD90ej1gIHJlcG9ydCB0aW1lem9uZSwgZmFsbGluZyBiYWNrIHRvIGBvcmdEZWZhdWx0YCBhbmQgdGhlbiBVVEMuXG4gKiBSZXR1cm5zIHRoZSB2YWxpZGF0ZWQgbmFtZSBvciBgeyBlcnJvciB9YC5cbiAqXG4gKiBFdmVyeSB0aW1lLWJ1Y2tldGVkIHJlcG9ydCB0YWtlcyBvbmU6IGJ1Y2tldGluZyBpbiB0aGUgZGF0YWJhc2Ugc2Vzc2lvbidzXG4gKiB0aW1lem9uZSAoVVRDIGluIGV2ZXJ5IGRlcGxveSkgbWVhbnQgYSBVUyB0ZWFtJ3MgXCJNb25kYXlcIiByZXBvcnQgY3V0IG9mZiBTdW5kYXlcbiAqIGV2ZW5pbmcsIHNvIHRoZSB3ZWVrIGEgbWFuYWdlciByZWFkIHdhcyBub3QgdGhlIHdlZWsgdGhlIHRlYW0gd29ya2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXBvcnRUaW1lem9uZShcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcmdEZWZhdWx0Pzogc3RyaW5nLFxuKTogc3RyaW5nIHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBjb25zdCByYXcgPSBxdWVyeS50eiA/PyBxdWVyeS50aW1lem9uZTtcbiAgY29uc3QgdHogPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyAmJiByYXcubGVuZ3RoID4gMCA/IHJhdyA6IChvcmdEZWZhdWx0ID8/ICdVVEMnKTtcbiAgaWYgKCFpc1ZhbGlkVGltZXpvbmUodHopKSByZXR1cm4geyBlcnJvcjogYHR6IG11c3QgYmUgYSB2YWxpZCBJQU5BIHRpbWV6b25lIG5hbWUgKGUuZy4gQW1lcmljYS9DaGljYWdvKSwgZ290OiAke3R6fWAgfTtcbiAgcmV0dXJuIHR6O1xufVxuXG4vKiogUGFyc2UgYSBgP3dlZWtTdGFydD1gIHZhbHVlLCBmYWxsaW5nIGJhY2sgdG8gYG9yZ0RlZmF1bHRgIGFuZCB0aGVuIE1vbmRheS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVdlZWtTdGFydChcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcmdEZWZhdWx0Pzogc3RyaW5nLFxuKTogV2Vla1N0YXJ0IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBjb25zdCByYXcgPSBxdWVyeS53ZWVrU3RhcnQgPz8gb3JnRGVmYXVsdCA/PyAnbW9uZGF5JztcbiAgY29uc3QgdmFsdWUgPSBTdHJpbmcocmF3KTtcbiAgaWYgKCFXRUVLX1NUQVJUUy5pbmNsdWRlcyh2YWx1ZSBhcyBXZWVrU3RhcnQpKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGB3ZWVrU3RhcnQgbXVzdCBiZSBvbmUgb2Y6ICR7V0VFS19TVEFSVFMuam9pbignLCAnKX1gIH07XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGFzIFdlZWtTdGFydDtcbn1cblxuLyoqXG4gKiBQYXJzZSArIHZhbGlkYXRlIGEgYD9pbnRlcnZhbD1gIHJlcG9ydCBidWNrZXQgKGRlZmF1bHRzIHRvICd3ZWVrJykuIFJldHVybnMgdGhlXG4gKiB2YWxpZGF0ZWQgaW50ZXJ2YWwgb3IgYHsgZXJyb3IgfWAuIFNoYXJlZCBieSB0aGUgdGltZXNlcmllcyByZXBvcnQgcm91dGVzIHNvIHRoZVxuICogZGVmYXVsdCArIGFsbG93LWxpc3QgKyBlcnJvciBtZXNzYWdlIGxpdmUgaW4gb25lIHBsYWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpbnRlcnZhbCA9IHBhcnNlUmVwb3J0SW50ZXJ2YWwocmVxLnF1ZXJ5KTtcbiAqIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09ICdvYmplY3QnKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCBpbnRlcnZhbC5lcnJvciwgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXBvcnRJbnRlcnZhbChxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZXBvcnRJbnRlcnZhbCB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBTdHJpbmcocXVlcnkuaW50ZXJ2YWwgPz8gJ3dlZWsnKTtcbiAgaWYgKCFSRVBPUlRfSU5URVJWQUxTLmluY2x1ZGVzKGludGVydmFsIGFzIFJlcG9ydEludGVydmFsKSkge1xuICAgIHJldHVybiB7IGVycm9yOiBgaW50ZXJ2YWwgbXVzdCBiZSBvbmUgb2Y6ICR7UkVQT1JUX0lOVEVSVkFMUy5qb2luKCcsICcpfWAgfTtcbiAgfVxuICByZXR1cm4gaW50ZXJ2YWwgYXMgUmVwb3J0SW50ZXJ2YWw7XG59XG5cbi8qKlxuICogUGFyc2UgYSBgP2Zyb209JnRvPWAgZGF0ZSByYW5nZSB3aXRoIGRlZmF1bHRzIG9mIFwiMzAgZGF5cyBhZ28g4oaSIG5vd1wiLlxuICogUmVqZWN0cyBub24tc3RyaW5nIGlucHV0cyAoRXhwcmVzcydzIHBhcnNlciBjYW4gcHJvZHVjZSBzdHJpbmdbXSBmb3JcbiAqIHJlcGVhdGVkIGtleXMpLCBpbnZhbGlkIElTTyB0aW1lc3RhbXBzLCBhbmQgaW52ZXJ0ZWQgcmFuZ2VzLlxuICpcbiAqIFJldHVybnMgZWl0aGVyIGB7IGZyb20sIHRvIH1gIElTTyBzdHJpbmdzIG9yIGB7IGVycm9yIH1gLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByYW5nZSA9IHBhcnNlRGF0ZVJhbmdlKHJlcS5xdWVyeSk7XG4gKiBpZiAoJ2Vycm9yJyBpbiByYW5nZSkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmFuZ2UuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqIGNvbnN0IHJvd3MgPSBhd2FpdCBzdmMubGlzdChyYW5nZS5mcm9tLCByYW5nZS50byk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGVSYW5nZShcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiB7IG1heFJhbmdlTXM/OiBudW1iZXI7IGRlZmF1bHREYXlzQmFjaz86IG51bWJlciB9ID0ge30sXG4pOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBjb25zdCB7IG1heFJhbmdlTXMsIGRlZmF1bHREYXlzQmFjayA9IDMwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHJhd0Zyb20gPSBxdWVyeS5mcm9tO1xuICBjb25zdCByYXdUbyA9IHF1ZXJ5LnRvO1xuXG4gIGlmIChyYXdGcm9tICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJhd0Zyb20gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG4gIGlmIChyYXdUbyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdUbyAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyBlcnJvcjogJ1widG9cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZnJvbVN0ciA9IHJhd0Zyb20gPz8gbmV3IERhdGUobm93IC0gZGVmYXVsdERheXNCYWNrICogMjQgKiA2MCAqIDYwICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgdG9TdHIgPSByYXdUbyA/PyBuZXcgRGF0ZShub3cpLnRvSVNPU3RyaW5nKCk7XG5cbiAgY29uc3QgZnJvbU1zID0gRGF0ZS5wYXJzZShmcm9tU3RyKTtcbiAgY29uc3QgdG9NcyA9IERhdGUucGFyc2UodG9TdHIpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShmcm9tTXMpKSByZXR1cm4geyBlcnJvcjogJ1wiZnJvbVwiIGlzIG5vdCBhIHZhbGlkIElTTyB0aW1lc3RhbXAnIH07XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRvTXMpKSByZXR1cm4geyBlcnJvcjogJ1widG9cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoZnJvbU1zID4gdG9NcykgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGVhcmxpZXIgdGhhbiBcInRvXCInIH07XG4gIGlmIChtYXhSYW5nZU1zICE9PSB1bmRlZmluZWQgJiYgdG9NcyAtIGZyb21NcyA+IG1heFJhbmdlTXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYERhdGUgcmFuZ2UgZXhjZWVkcyBtYXhpbXVtIG9mICR7TWF0aC5mbG9vcihtYXhSYW5nZU1zIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKX0gZGF5c2AgfTtcbiAgfVxuXG4gIHJldHVybiB7IGZyb206IGZyb21TdHIsIHRvOiB0b1N0ciB9O1xufVxuIl19
|
package/lib/utils/response.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { createLogger } from './logger.js';
|
|
4
|
+
import { parsePage } from './params.js';
|
|
4
5
|
import { ErrorCode } from '../types/error-codes.js';
|
|
5
6
|
import { MAX_PAGE_LIMIT } from '../validation/common-schemas.js';
|
|
6
|
-
import { parsePage } from './params.js';
|
|
7
7
|
const logger = createLogger('response');
|
|
8
8
|
/**
|
|
9
9
|
* Send a standardized success response.
|
|
@@ -274,4 +274,4 @@ export function parseSort(query) {
|
|
|
274
274
|
export function parsePaginationParams(query) {
|
|
275
275
|
return { ...parsePage(query, { def: 10, max: MAX_PAGE_LIMIT }), ...parseSort(query) };
|
|
276
276
|
}
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWEsRUFDYixVQUFVLEdBQVcsR0FBRyxFQUN4QixJQUFRLEVBQ1IsT0FBZ0I7SUFFaEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEYsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFFBQVEsR0FLVjtRQUNGLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVTtLQUNYLENBQUM7SUFFRixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsU0FB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LE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFrQkQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBOEI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxTQUFTLEdBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQThCO0lBQ2xFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhSW5mbyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBNQVhfUEFHRV9MSU1JVCB9IGZyb20gJy4uL3ZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMuanMnO1xuaW1wb3J0IHsgcGFyc2VQYWdlIH0gZnJvbSAnLi9wYXJhbXMuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3Jlc3BvbnNlJyk7XG5cbi8qKlxuICogU2VuZCBhIHN0YW5kYXJkaXplZCBzdWNjZXNzIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlIChkZWZhdWx0OiAyMDApXG4gKiBAcGFyYW0gZGF0YSAtIFJlc3BvbnNlIGRhdGFcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgc3VjY2VzcyBtZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAwLCB7IHBsdWdpbjogcGx1Z2luRGF0YSB9KTtcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAxLCB7IGlkOiBuZXdJZCB9LCAnUmVzb3VyY2UgY3JlYXRlZCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kU3VjY2VzczxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyID0gMjAwLFxuICBkYXRhPzogVCxcbiAgbWVzc2FnZT86IHN0cmluZyxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHN1Y2Nlc3MgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnLCB7IHN0YXR1c0NvZGUgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IHtcbiAgICBzdWNjZXNzOiB0cnVlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBkYXRhPzogVDtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgc3RhdHVzQ29kZSxcbiAgfTtcblxuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAobWVzc2FnZSkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB9XG5cbiAgcmVzLnN0YXR1cyhzdGF0dXNDb2RlKS5qc29uKHJlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgc3RhbmRhcmRpemVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSBjb2RlIC0gRXJyb3IgY29kZSBmcm9tIEVycm9yQ29kZSBlbnVtXG4gKiBAcGFyYW0gZGV0YWlscyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgZGV0YWlsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kRXJyb3IocmVzLCA0MDQsICdQbHVnaW4gbm90IGZvdW5kJywgRXJyb3JDb2RlLk5PVF9GT1VORCk7XG4gKiBzZW5kRXJyb3IocmVzLCA0MDAsICdJbnZhbGlkIGlucHV0JywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsIHsgZmllbGQ6ICduYW1lJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEVycm9yKFxuICByZXM6IFJlc3BvbnNlLFxuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZT86IEVycm9yQ29kZSB8IHN0cmluZyxcbiAgZGV0YWlscz86IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBlcnJvciBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcsIHsgc3RhdHVzQ29kZSwgbWVzc2FnZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNwb25zZToge1xuICAgIHN1Y2Nlc3M6IGZhbHNlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29kZT86IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfSA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIG1lc3NhZ2UsXG4gIH07XG5cbiAgaWYgKGNvZGUpIHtcbiAgICByZXNwb25zZS5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGlmIChkZXRhaWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNwb25zZS5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxuXG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogU2VuZCBhIHF1b3RhIGV4Y2VlZGVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFR5cGUgb2YgcXVvdGEgZXhjZWVkZWRcbiAqIEBwYXJhbSBxdW90YSAtIEN1cnJlbnQgcXVvdGEgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSByZXNldEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kUXVvdGFFeGNlZWRlZChyZXMsICdhcGlDYWxscycsIHsgdHlwZTogJ2FwaUNhbGxzJywgbGltaXQ6IDEwMDAwLCB1c2VkOiAxMDAwMCwgcmVtYWluaW5nOiAwIH0sIHJlc2V0QXQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kUXVvdGFFeGNlZWRlZChcbiAgcmVzOiBSZXNwb25zZSxcbiAgcXVvdGFUeXBlOiBzdHJpbmcsXG4gIHF1b3RhOiBRdW90YUluZm8sXG4gIHJlc2V0QXQ/OiBzdHJpbmcsXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uc3QgcmVzZXREYXRlID0gcmVzZXRBdCA/IG5ldyBEYXRlKHJlc2V0QXQpIDogbmV3IERhdGUoKTtcbiAgY29uc3QgcmVzZXRJbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgocmVzZXREYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCkpO1xuXG4gIC8vIEd1YXJkIGxpa2UgdGhlIHNpYmxpbmcgaGVscGVyczogYHNldEhlYWRlcmAgdGhyb3dzIHN5bmNocm9ub3VzbHkgb25jZSB0aGVcbiAgLy8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudCwgc28gc2tpcCB0aGUgcXVvdGEgaGVhZGVycyAoYW5kIGxldCBgc2VuZEVycm9yYCBuby1vcClcbiAgLy8gaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgaGFuZGxlciBvbiBhbiBhbHJlYWR5LWNvbW1pdHRlZCByZXNwb25zZS5cbiAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsIHJlc2V0SW4pO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtTGltaXQnLCBxdW90YS5saW1pdCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1Vc2VkJywgcXVvdGEudXNlZCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1SZW1haW5pbmcnLCBNYXRoLm1heCgwLCBxdW90YS5yZW1haW5pbmcpKTtcblxuICAgIGlmIChyZXNldEF0KSB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlc2V0JywgcmVzZXRBdCk7XG4gICAgfVxuICB9XG5cbiAgc2VuZEVycm9yKFxuICAgIHJlcyxcbiAgICA0MjksXG4gICAgbWVzc2FnZSA/PyBgJHtxdW90YVR5cGV9IHF1b3RhIGV4Y2VlZGVkICgke3F1b3RhLnVzZWR9LyR7cXVvdGEubGltaXR9KS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5gLFxuICAgIEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCxcbiAgICB7IHF1b3RhIH0sXG4gICk7XG59XG5cbi8qKiBUaGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGV2ZXJ5IGxpc3Qgcm91dGUgcmV0dXJucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbk1ldGEge1xuICB0b3RhbDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGZvciBvbmUgcGFnZS5cbiAqXG4gKiBgaGFzTW9yZWAgaXMgZGVyaXZlZCwgbmV2ZXIgaGFuZC1jb21wdXRlZDogYG9mZnNldCArIDxyb3dzIG9uIHRoaXMgcGFnZT4gPFxuICogdG90YWxgIHdhcyBUSEUgbW9zdC1yZXBlYXRlZCBleHByZXNzaW9uIGluIHRoZSBjb2RlYmFzZSwgYW5kIGEgcm91dGUgdGhhdFxuICogc3BlbGxzIGl0IHNsaWdodGx5IGRpZmZlcmVudGx5IHJlcG9ydHMgYSBwaGFudG9tIG5leHQgcGFnZSAob3IgaGlkZXMgYSByZWFsXG4gKiBvbmUpIOKAlCBhIHBhZ2luZyBidWcgdGhhdCBvbmx5IHNob3dzIG9uIHRoZSBsYXN0IHBhZ2UsIHdoZXJlIG5vYm9keSBsb29rcy5cbiAqXG4gKiBgcmV0dXJuZWRgIGlzIHRoZSByb3cgY291bnQgdGhpcyBwYWdlIGFjdHVhbGx5IGNhcnJpZXMuIEl0IGRlZmF1bHRzIHRvXG4gKiBgbGltaXRgIGJlY2F1c2UgYSBsaXN0IHJvdXRlIHRoYXQgZG9lc24ndCBzYXkgb3RoZXJ3aXNlIHJldHVybnMgYSBmdWxsIHBhZ2U7XG4gKiBwYXNzIGl0IGZvciBhIHJvdXRlIHdob3NlIHBhZ2UgY2FuIGJlIHNob3J0ZXIgdGhhbiBpdHMgbGltaXQsIGFuZCBmb3IgYW5cbiAqIHVucGFnZWQgXCJldmVyeXRoaW5nXCIgYW5zd2VyICh3aGljaCByZXBvcnRzIGBsaW1pdCA9IHRvdGFsYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0aW9uTWV0YShcbiAgb3B0aW9uczogeyB0b3RhbDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlcjsgbGltaXQ6IG51bWJlcjsgcmV0dXJuZWQ/OiBudW1iZXIgfSxcbik6IFBhZ2luYXRpb25NZXRhIHtcbiAgY29uc3QgeyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgcmV0dXJuZWQgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCBoYXNNb3JlOiBvZmZzZXQgKyAocmV0dXJuZWQgPz8gbGltaXQpIDwgdG90YWwgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcGFnaW5hdGVkIGxpc3QgcmVzcG9uc2Ugd2l0aCB0aGUgaXRlbXMgbmVzdGVkIHVuZGVyIGEgbmFtZWQga2V5LlxuICogVXNlIHdoZW4gdGhlIEFQSSBjb250cmFjdCBpcyBgeyA8a2V5PjogWy4uLl0sIHBhZ2luYXRpb246IHsuLi59IH1gXG4gKiAodGhlIGRvbWluYW50IHNoYXBlIGFjcm9zcyBhcGkvKiBzZXJ2aWNlcykuXG4gKlxuICogYGhhc01vcmVgIGlzIE9QVElPTkFMIGFuZCBkZWZhdWx0cyB0byBgb2Zmc2V0ICsgZGF0YS5sZW5ndGggPCB0b3RhbGAg4oCUIHRoZVxuICogZXhwcmVzc2lvbiBldmVyeSBjYWxsZXIgdXNlZCB0byB3cml0ZSBvdXQgYnkgaGFuZC4gUGFzcyBpdCBvbmx5IHdoZW4gdGhlXG4gKiByb3V0ZSBrbm93cyBzb21ldGhpbmcgdGhlIHJvdyBjb3VudCBkb2VzIG5vdCAoYSBjdXJzb3IgcGFnZSwgb3IgYSB3aW5kb3dcbiAqIGZldGNoZWQgd2l0aCBgbGltaXQgKyAxYCB0byBwZWVrIGFoZWFkKS4gV2l0aG91dCBhIGB0b3RhbGAgdGhlcmUgaXMgbm90aGluZyB0b1xuICogZGVyaXZlIGZyb20sIHNvIGl0IGZhbGxzIGJhY2sgdG8gXCJhIGN1cnNvciB3YXMgaXNzdWVkXCIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRQYWdpbmF0ZWROZXN0ZWQocmVzLCAncGlwZWxpbmVzJywgaXRlbXMsIHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCB9KTtcbiAqIC8vIOKGkiB7IHBpcGVsaW5lczogWy4uLl0sIHBhZ2luYXRpb246IHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCwgaGFzTW9yZTogdHJ1ZSB9IH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFBhZ2luYXRlZE5lc3RlZDxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgZGF0YUtleTogc3RyaW5nLFxuICBkYXRhOiBUW10sXG4gIG9wdGlvbnM6IHtcbiAgICB0b3RhbD86IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGhhc01vcmU/OiBib29sZWFuO1xuICAgIG5leHRDdXJzb3I/OiBzdHJpbmc7XG4gICAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgfSxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHBhZ2luYXRlZCByZXNwb25zZSBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7IHN0YXR1c0NvZGUgPSAyMDAsIHRvdGFsLCBsaW1pdCwgb2Zmc2V0LCBoYXNNb3JlLCBuZXh0Q3Vyc29yIH0gPSBvcHRpb25zO1xuICBjb25zdCByZXNvbHZlZCA9IGhhc01vcmVcbiAgICA/PyAodG90YWwgIT09IHVuZGVmaW5lZFxuICAgICAgPyBwYWdpbmF0aW9uTWV0YSh7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCByZXR1cm5lZDogZGF0YS5sZW5ndGggfSkuaGFzTW9yZVxuICAgICAgOiBuZXh0Q3Vyc29yICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBwYWdpbmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgbGltaXQsIG9mZnNldCwgaGFzTW9yZTogcmVzb2x2ZWQgfTtcbiAgaWYgKHRvdGFsICE9PSB1bmRlZmluZWQpIHBhZ2luYXRpb24udG90YWwgPSB0b3RhbDtcbiAgaWYgKG5leHRDdXJzb3IpIHBhZ2luYXRpb24ubmV4dEN1cnNvciA9IG5leHRDdXJzb3I7XG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbih7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIGRhdGE6IHsgW2RhdGFLZXldOiBkYXRhLCBwYWdpbmF0aW9uIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNRTFNUQVRFOiBleGFjdGx5IGZpdmUgY2hhcmFjdGVycywgZGlnaXRzIGFuZCB1cHBlcmNhc2UgTGF0aW4gbGV0dGVyc1xuICogKGUuZy4gYDIzNTA1YCB1bmlxdWVfdmlvbGF0aW9uLCBgNDI2MDFgIHN5bnRheF9lcnJvcikuIE5vZGUncyBvd24gc29ja2V0IGFuZFxuICogRE5TIGVycm9ycyB1c2UgdGhlIHNhbWUgYC5jb2RlYCBwcm9wZXJ0eSBidXQgc3BlbGwgaXQgZGlmZmVyZW50bHlcbiAqIChgRUNPTk5SRVNFVGAsIGBFVElNRURPVVRgLCBgRU5PVEZPVU5EYCksIHdoaWNoIGlzIHdoYXQgdGhpcyB0ZWxscyBhcGFydC5cbiAqL1xuY29uc3QgU1FMU1RBVEVfUEFUVEVSTiA9IC9eWzAtOUEtWl17NX0kLztcblxuLyoqXG4gKiBMZW5ndGggYWxvbmUgaXMgbm90IGVub3VnaDogYEVQSVBFYCBhbmQgYEUyQklHYCBhcmUgZml2ZSB1cHBlcmNhc2UgY2hhcmFjdGVyc1xuICogYW5kIHdvdWxkIHBhc3MgYXMgU1FMU1RBVEVzLiBFdmVyeSBsaWJ1di9Ob2RlIGVycm5vIHN0YXJ0cyB3aXRoIGBFYCwgYW5kXG4gKiBQb3N0Z3JlcyBkZWZpbmVzIG5vIGVycm9yIGNsYXNzIHRoYXQgZG9lcyDigJQgaXRzIGNsYXNzZXMgYXJlIDAwLTBaLCAyMC0yRixcbiAqIDM0LTNGLCA0MC00NCwgNTMtNTgsIDcyLCBGMCwgSFYsIFAwIGFuZCBYWCAoc2VlIHRoZSBzZXJ2ZXIncyBlcnJjb2Rlcy50eHQpLlxuICogU28gYSBsZWFkaW5nIGBFYCBzZXR0bGVzIGl0LlxuICovXG5jb25zdCBOT0RFX0VSUk5PX1BBVFRFUk4gPSAvXkUvO1xuXG4vKipcbiAqIEV4dHJhY3QgZGF0YWJhc2UgZXJyb3IgZGV0YWlscyBmb3IgbG9nZ2luZy9yZXNwb25zZS5cbiAqXG4gKiBFeHRyYWN0cyBQb3N0Z3JlU1FMIGVycm9yIGNvZGVzLCBkZXRhaWxzLCBoaW50cywgYW5kIGNvbnN0cmFpbnQgbmFtZXNcbiAqIGZyb20gZGF0YWJhc2UgZXJyb3JzIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogT25seSBhIGdlbnVpbmUgUG9zdGdyZXMgZXJyb3IgeWllbGRzIGEgYGRiQ29kZWA6IHJlcG9ydGluZyBhbnkgYC5jb2RlYCBhcyBvbmVcbiAqIHdvdWxkIGxvZyBhIHRyYW5zcG9ydCBmYWlsdXJlIChgRUNPTk5SRVNFVGAgd2hlbiB0aGUgcG9vbGVyIGRyb3BzIG91dCBvZiB0aGVcbiAqIFNlcnZpY2UgZW5kcG9pbnRzLCBzYXkpIGFzIGB7XCJkYlwiOntcImRiQ29kZVwiOlwiRUNPTk5SRVNFVFwifX1gIGFuZCBzZW5kIHJlYWRlcnNcbiAqIGh1bnRpbmcgdGhyb3VnaCBjbGVhbiBQb3N0Z3JlcyBsb2dzLiBUaGUgdHJhbnNwb3J0IGNvZGUgaXMgbm90IGxvc3Qg4oCUIGNhbGxlcnMgbG9nIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBpdHNlbGYgYWxvbmdzaWRlIHRoZXNlIGRldGFpbHMg4oCUIGl0IGp1c3Qgc3RvcHMgY2xhaW1pbmcgdG8gYmUgYSBEQiBmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciBvYmplY3QgZnJvbSBkYXRhYmFzZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV4dHJhY3RlZCBlcnJvciBkZXRhaWxzOyBge31gIHdoZW4gYGVycm9yYCBpcyBub3QgYVxuICogICBQb3N0Z3JlcyBlcnJvciAobm8gU1FMU1RBVEUgYW5kIG5vbmUgb2YgdGhlIHBnLXNwZWNpZmljIGZpZWxkcylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgZGIuaW5zZXJ0KHBsdWdpbnMpLnZhbHVlcyhuZXdQbHVnaW4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc3QgZGJEZXRhaWxzID0gZXh0cmFjdERiRXJyb3IoZXJyb3IpO1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNTAwLCAnRGF0YWJhc2UgZXJyb3InLCBFcnJvckNvZGUuREFUQUJBU0VfRVJST1IsIGRiRGV0YWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYkVycm9yKGVycm9yOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBEcml6emxlIE9STSB3cmFwcyB0aGUgb3JpZ2luYWwgcGcgZXJyb3IgaW4gZXJyb3IuY2F1c2Ug4oCUXG4gIC8vIGNoZWNrIHRoZSBjYXVzZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGVycm9yIGl0c2VsZi5cbiAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHNvdXJjZSA9IChlcnIuY2F1c2UgJiYgdHlwZW9mIGVyci5jYXVzZSA9PT0gJ29iamVjdCcgPyBlcnIuY2F1c2UgOiBlcnIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGlmICh0eXBlb2Ygc291cmNlLmNvZGUgPT09ICdzdHJpbmcnXG4gICAgJiYgU1FMU1RBVEVfUEFUVEVSTi50ZXN0KHNvdXJjZS5jb2RlKVxuICAgICYmICFOT0RFX0VSUk5PX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSkpIHtcbiAgICBkZXRhaWxzLmRiQ29kZSA9IHNvdXJjZS5jb2RlO1xuICB9XG4gIGlmIChzb3VyY2UuZGV0YWlsKSBkZXRhaWxzLmRiRGV0YWlsID0gc291cmNlLmRldGFpbDtcbiAgaWYgKHNvdXJjZS5oaW50KSBkZXRhaWxzLmRiSGludCA9IHNvdXJjZS5oaW50O1xuICBpZiAoc291cmNlLmNvbnN0cmFpbnQpIGRldGFpbHMuY29uc3RyYWludCA9IHNvdXJjZS5jb25zdHJhaW50O1xuICBpZiAoc291cmNlLnRhYmxlKSBkZXRhaWxzLnRhYmxlID0gc291cmNlLnRhYmxlO1xuICBpZiAoc291cmNlLmNvbHVtbikgZGV0YWlscy5jb2x1bW4gPSBzb3VyY2UuY29sdW1uO1xuXG4gIHJldHVybiBkZXRhaWxzO1xufVxuXG4vLyBDb252ZW5pZW5jZSBoZWxwZXJzIChzaGFyZWQgYWNyb3NzIHBsdWdpbiwgcGlwZWxpbmUsIHF1b3RhIHNlcnZpY2VzKVxuXG4vKipcbiAqIEV4dHJhY3QgYSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gYW4gdW5rbm93biBjYXRjaCB2YWx1ZS5cbiAqXG4gKiBGYWxscyBiYWNrIGJleW9uZCBgLm1lc3NhZ2VgIGJlY2F1c2Ugc2V2ZXJhbCBjb21tb24gTm9kZSBlcnJvcnMgY2FycnkgYW5cbiAqIEVNUFRZIGAubWVzc2FnZWA6XG4gKiAgLSBkdWFsLXN0YWNrIChJUHY0K0lQdjYpIGNvbm5lY3QgZmFpbHVyZXMgc3VyZmFjZSBhcyBhbiBgQWdncmVnYXRlRXJyb3JgXG4gKiAgICB3aG9zZSBvd24gbWVzc2FnZSBpcyBibGFuayDigJQgdGhlIGNhdXNlIGxpdmVzIGluIGAuY29kZWAgKGUuZy5cbiAqICAgIGBFQ09OTlJFRlVTRURgL2BFVElNRURPVVRgKSBhbmQvb3IgdGhlIGAuZXJyb3JzW11gIHN1Yi1lcnJvcnM7XG4gKiAgLSByYXcgc29ja2V0IGBFcnJub0V4Y2VwdGlvbmBzIGNhbiBsaWtld2lzZSBjYXJyeSBvbmx5IGEgYC5jb2RlYC5cbiAqIFdpdGhvdXQgdGhpcywgYW4gdW5yZWFjaGFibGUgaW50ZXJuYWwgc2VydmljZSAoZS5nLiBjb21wbGlhbmNlIHN0aWxsXG4gKiBzdGFydGluZykgcHJvZHVjZWQgYmxhbmsgcGVyLWl0ZW0gZXJyb3JzIGluIGJ1bGsgcmVzcG9uc2VzIGFuZCBgZXJyb3I6XCJcImBcbiAqIGluIGxvZ3Mg4oCUIGEgc2lsZW50IGJsYWNrIGJveC4gT3JkZXI6IG1lc3NhZ2Ug4oaSIGNvZGUg4oaSIGpvaW5lZCBzdWItZXJyb3JzIOKGklxuICogZXJyb3IgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgaWYgKGVycm9yLm1lc3NhZ2UpIHJldHVybiBlcnJvci5tZXNzYWdlO1xuXG4gIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG4gIGlmIChjb2RlKSByZXR1cm4gY29kZTtcblxuICBjb25zdCBpbm5lciA9IChlcnJvciBhcyB7IGVycm9ycz86IHVua25vd25bXSB9KS5lcnJvcnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGlubmVyKSAmJiBpbm5lci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgam9pbmVkID0gaW5uZXIubWFwKGVycm9yTWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJzsgJyk7XG4gICAgaWYgKGpvaW5lZCkgcmV0dXJuIGpvaW5lZDtcbiAgfVxuXG4gIHJldHVybiBlcnJvci5uYW1lIHx8ICdVbmtub3duIGVycm9yJztcbn1cblxuLyoqIFNlbmQgYSA0MDAgYmFkLXJlcXVlc3QgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEJhZFJlcXVlc3QoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZTogRXJyb3JDb2RlIHwgc3RyaW5nID0gRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4pOiB2b2lkIHtcbiAgc2VuZEVycm9yKHJlcywgNDAwLCBtZXNzYWdlLCBjb2RlKTtcbn1cblxuLyoqIFNlbmQgYSA1MDAgaW50ZXJuYWwgZXJyb3IgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEludGVybmFsRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDUwMCwgbWVzc2FnZSwgRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SLCBkZXRhaWxzKTtcbn1cblxuLy8gUGFnaW5hdGlvblxuXG4vKiogQ29tbW9uIHBhZ2luYXRpb24gKyBzb3J0aW5nIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBsaW1pdDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBBIHBhcnNlZCBgP3NvcnRCeT0mc29ydE9yZGVyPWAgKGRlZmF1bHQ6IG5ld2VzdCBmaXJzdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRQYXJhbXMge1xuICBzb3J0Qnk6IHN0cmluZztcbiAgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJztcbn1cblxuLyoqIFBhcnNlIGA/c29ydEJ5PSZzb3J0T3JkZXI9YDsgZGVmYXVsdHMgdG8gYGNyZWF0ZWRBdGAgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvcnQocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU29ydFBhcmFtcyB7XG4gIGNvbnN0IHNvcnRCeSA9IFN0cmluZyhxdWVyeS5zb3J0QnkgfHwgJ2NyZWF0ZWRBdCcpO1xuICBjb25zdCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID1cbiAgICBTdHJpbmcocXVlcnkuc29ydE9yZGVyIHx8ICdkZXNjJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgcmV0dXJuIHsgc29ydEJ5LCBzb3J0T3JkZXIgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBsaXN0LXJvdXRlIHdpbmRvdyArIHNvcnQ6IHtAbGluayBwYXJzZVBhZ2V9IHdpdGggYSBwYWdlIG9mIDEwXG4gKiAoY2FwcGVkIGF0IGBNQVhfUEFHRV9MSU1JVGAsIG9mZnNldCBjYXBwZWQgYXQgYE1BWF9QQUdFX09GRlNFVGAg4oCUIGRlZXAgcGFnaW5nXG4gKiB1c2VzIHRoZSBjdXJzb3IgQVBJKSBwbHVzIHtAbGluayBwYXJzZVNvcnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYWdpbmF0aW9uUGFyYW1zKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBhZ2luYXRpb25QYXJhbXMge1xuICByZXR1cm4geyAuLi5wYXJzZVBhZ2UocXVlcnksIHsgZGVmOiAxMCwgbWF4OiBNQVhfUEFHRV9MSU1JVCB9KSwgLi4ucGFyc2VTb3J0KHF1ZXJ5KSB9O1xufVxuIl19
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQWEsRUFDYixVQUFVLEdBQVcsR0FBRyxFQUN4QixJQUFRLEVBQ1IsT0FBZ0I7SUFFaEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEYsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFFBQVEsR0FLVjtRQUNGLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVTtLQUNYLENBQUM7SUFFRixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsU0FB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LE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFrQkQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBOEI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxTQUFTLEdBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQThCO0lBQ2xFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVBhZ2UgfSBmcm9tICcuL3BhcmFtcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhSW5mbyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBNQVhfUEFHRV9MSU1JVCB9IGZyb20gJy4uL3ZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3Jlc3BvbnNlJyk7XG5cbi8qKlxuICogU2VuZCBhIHN0YW5kYXJkaXplZCBzdWNjZXNzIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlIChkZWZhdWx0OiAyMDApXG4gKiBAcGFyYW0gZGF0YSAtIFJlc3BvbnNlIGRhdGFcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgc3VjY2VzcyBtZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAwLCB7IHBsdWdpbjogcGx1Z2luRGF0YSB9KTtcbiAqIHNlbmRTdWNjZXNzKHJlcywgMjAxLCB7IGlkOiBuZXdJZCB9LCAnUmVzb3VyY2UgY3JlYXRlZCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kU3VjY2VzczxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyID0gMjAwLFxuICBkYXRhPzogVCxcbiAgbWVzc2FnZT86IHN0cmluZyxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHN1Y2Nlc3MgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnLCB7IHN0YXR1c0NvZGUgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IHtcbiAgICBzdWNjZXNzOiB0cnVlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBkYXRhPzogVDtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgc3RhdHVzQ29kZSxcbiAgfTtcblxuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAobWVzc2FnZSkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB9XG5cbiAgcmVzLnN0YXR1cyhzdGF0dXNDb2RlKS5qc29uKHJlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgc3RhbmRhcmRpemVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSBjb2RlIC0gRXJyb3IgY29kZSBmcm9tIEVycm9yQ29kZSBlbnVtXG4gKiBAcGFyYW0gZGV0YWlscyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgZGV0YWlsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kRXJyb3IocmVzLCA0MDQsICdQbHVnaW4gbm90IGZvdW5kJywgRXJyb3JDb2RlLk5PVF9GT1VORCk7XG4gKiBzZW5kRXJyb3IocmVzLCA0MDAsICdJbnZhbGlkIGlucHV0JywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsIHsgZmllbGQ6ICduYW1lJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEVycm9yKFxuICByZXM6IFJlc3BvbnNlLFxuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZT86IEVycm9yQ29kZSB8IHN0cmluZyxcbiAgZGV0YWlscz86IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBlcnJvciBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcsIHsgc3RhdHVzQ29kZSwgbWVzc2FnZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNwb25zZToge1xuICAgIHN1Y2Nlc3M6IGZhbHNlO1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29kZT86IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfSA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIG1lc3NhZ2UsXG4gIH07XG5cbiAgaWYgKGNvZGUpIHtcbiAgICByZXNwb25zZS5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGlmIChkZXRhaWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNwb25zZS5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxuXG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogU2VuZCBhIHF1b3RhIGV4Y2VlZGVkIGVycm9yIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFR5cGUgb2YgcXVvdGEgZXhjZWVkZWRcbiAqIEBwYXJhbSBxdW90YSAtIEN1cnJlbnQgcXVvdGEgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSByZXNldEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kUXVvdGFFeGNlZWRlZChyZXMsICdhcGlDYWxscycsIHsgdHlwZTogJ2FwaUNhbGxzJywgbGltaXQ6IDEwMDAwLCB1c2VkOiAxMDAwMCwgcmVtYWluaW5nOiAwIH0sIHJlc2V0QXQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kUXVvdGFFeGNlZWRlZChcbiAgcmVzOiBSZXNwb25zZSxcbiAgcXVvdGFUeXBlOiBzdHJpbmcsXG4gIHF1b3RhOiBRdW90YUluZm8sXG4gIHJlc2V0QXQ/OiBzdHJpbmcsXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uc3QgcmVzZXREYXRlID0gcmVzZXRBdCA/IG5ldyBEYXRlKHJlc2V0QXQpIDogbmV3IERhdGUoKTtcbiAgY29uc3QgcmVzZXRJbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgocmVzZXREYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCkpO1xuXG4gIC8vIEd1YXJkIGxpa2UgdGhlIHNpYmxpbmcgaGVscGVyczogYHNldEhlYWRlcmAgdGhyb3dzIHN5bmNocm9ub3VzbHkgb25jZSB0aGVcbiAgLy8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudCwgc28gc2tpcCB0aGUgcXVvdGEgaGVhZGVycyAoYW5kIGxldCBgc2VuZEVycm9yYCBuby1vcClcbiAgLy8gaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgaGFuZGxlciBvbiBhbiBhbHJlYWR5LWNvbW1pdHRlZCByZXNwb25zZS5cbiAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsIHJlc2V0SW4pO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtTGltaXQnLCBxdW90YS5saW1pdCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1Vc2VkJywgcXVvdGEudXNlZCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1SZW1haW5pbmcnLCBNYXRoLm1heCgwLCBxdW90YS5yZW1haW5pbmcpKTtcblxuICAgIGlmIChyZXNldEF0KSB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlc2V0JywgcmVzZXRBdCk7XG4gICAgfVxuICB9XG5cbiAgc2VuZEVycm9yKFxuICAgIHJlcyxcbiAgICA0MjksXG4gICAgbWVzc2FnZSA/PyBgJHtxdW90YVR5cGV9IHF1b3RhIGV4Y2VlZGVkICgke3F1b3RhLnVzZWR9LyR7cXVvdGEubGltaXR9KS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5gLFxuICAgIEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCxcbiAgICB7IHF1b3RhIH0sXG4gICk7XG59XG5cbi8qKiBUaGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGV2ZXJ5IGxpc3Qgcm91dGUgcmV0dXJucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbk1ldGEge1xuICB0b3RhbDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGZvciBvbmUgcGFnZS5cbiAqXG4gKiBgaGFzTW9yZWAgaXMgZGVyaXZlZCwgbmV2ZXIgaGFuZC1jb21wdXRlZDogYG9mZnNldCArIDxyb3dzIG9uIHRoaXMgcGFnZT4gPFxuICogdG90YWxgIHdhcyBUSEUgbW9zdC1yZXBlYXRlZCBleHByZXNzaW9uIGluIHRoZSBjb2RlYmFzZSwgYW5kIGEgcm91dGUgdGhhdFxuICogc3BlbGxzIGl0IHNsaWdodGx5IGRpZmZlcmVudGx5IHJlcG9ydHMgYSBwaGFudG9tIG5leHQgcGFnZSAob3IgaGlkZXMgYSByZWFsXG4gKiBvbmUpIOKAlCBhIHBhZ2luZyBidWcgdGhhdCBvbmx5IHNob3dzIG9uIHRoZSBsYXN0IHBhZ2UsIHdoZXJlIG5vYm9keSBsb29rcy5cbiAqXG4gKiBgcmV0dXJuZWRgIGlzIHRoZSByb3cgY291bnQgdGhpcyBwYWdlIGFjdHVhbGx5IGNhcnJpZXMuIEl0IGRlZmF1bHRzIHRvXG4gKiBgbGltaXRgIGJlY2F1c2UgYSBsaXN0IHJvdXRlIHRoYXQgZG9lc24ndCBzYXkgb3RoZXJ3aXNlIHJldHVybnMgYSBmdWxsIHBhZ2U7XG4gKiBwYXNzIGl0IGZvciBhIHJvdXRlIHdob3NlIHBhZ2UgY2FuIGJlIHNob3J0ZXIgdGhhbiBpdHMgbGltaXQsIGFuZCBmb3IgYW5cbiAqIHVucGFnZWQgXCJldmVyeXRoaW5nXCIgYW5zd2VyICh3aGljaCByZXBvcnRzIGBsaW1pdCA9IHRvdGFsYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0aW9uTWV0YShcbiAgb3B0aW9uczogeyB0b3RhbDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlcjsgbGltaXQ6IG51bWJlcjsgcmV0dXJuZWQ/OiBudW1iZXIgfSxcbik6IFBhZ2luYXRpb25NZXRhIHtcbiAgY29uc3QgeyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgcmV0dXJuZWQgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCBoYXNNb3JlOiBvZmZzZXQgKyAocmV0dXJuZWQgPz8gbGltaXQpIDwgdG90YWwgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcGFnaW5hdGVkIGxpc3QgcmVzcG9uc2Ugd2l0aCB0aGUgaXRlbXMgbmVzdGVkIHVuZGVyIGEgbmFtZWQga2V5LlxuICogVXNlIHdoZW4gdGhlIEFQSSBjb250cmFjdCBpcyBgeyA8a2V5PjogWy4uLl0sIHBhZ2luYXRpb246IHsuLi59IH1gXG4gKiAodGhlIGRvbWluYW50IHNoYXBlIGFjcm9zcyBhcGkvKiBzZXJ2aWNlcykuXG4gKlxuICogYGhhc01vcmVgIGlzIE9QVElPTkFMIGFuZCBkZWZhdWx0cyB0byBgb2Zmc2V0ICsgZGF0YS5sZW5ndGggPCB0b3RhbGAg4oCUIHRoZVxuICogZXhwcmVzc2lvbiBldmVyeSBjYWxsZXIgdXNlZCB0byB3cml0ZSBvdXQgYnkgaGFuZC4gUGFzcyBpdCBvbmx5IHdoZW4gdGhlXG4gKiByb3V0ZSBrbm93cyBzb21ldGhpbmcgdGhlIHJvdyBjb3VudCBkb2VzIG5vdCAoYSBjdXJzb3IgcGFnZSwgb3IgYSB3aW5kb3dcbiAqIGZldGNoZWQgd2l0aCBgbGltaXQgKyAxYCB0byBwZWVrIGFoZWFkKS4gV2l0aG91dCBhIGB0b3RhbGAgdGhlcmUgaXMgbm90aGluZyB0b1xuICogZGVyaXZlIGZyb20sIHNvIGl0IGZhbGxzIGJhY2sgdG8gXCJhIGN1cnNvciB3YXMgaXNzdWVkXCIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRQYWdpbmF0ZWROZXN0ZWQocmVzLCAncGlwZWxpbmVzJywgaXRlbXMsIHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCB9KTtcbiAqIC8vIOKGkiB7IHBpcGVsaW5lczogWy4uLl0sIHBhZ2luYXRpb246IHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCwgaGFzTW9yZTogdHJ1ZSB9IH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFBhZ2luYXRlZE5lc3RlZDxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgZGF0YUtleTogc3RyaW5nLFxuICBkYXRhOiBUW10sXG4gIG9wdGlvbnM6IHtcbiAgICB0b3RhbD86IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGhhc01vcmU/OiBib29sZWFuO1xuICAgIG5leHRDdXJzb3I/OiBzdHJpbmc7XG4gICAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgfSxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHBhZ2luYXRlZCByZXNwb25zZSBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7IHN0YXR1c0NvZGUgPSAyMDAsIHRvdGFsLCBsaW1pdCwgb2Zmc2V0LCBoYXNNb3JlLCBuZXh0Q3Vyc29yIH0gPSBvcHRpb25zO1xuICBjb25zdCByZXNvbHZlZCA9IGhhc01vcmVcbiAgICA/PyAodG90YWwgIT09IHVuZGVmaW5lZFxuICAgICAgPyBwYWdpbmF0aW9uTWV0YSh7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCByZXR1cm5lZDogZGF0YS5sZW5ndGggfSkuaGFzTW9yZVxuICAgICAgOiBuZXh0Q3Vyc29yICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBwYWdpbmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgbGltaXQsIG9mZnNldCwgaGFzTW9yZTogcmVzb2x2ZWQgfTtcbiAgaWYgKHRvdGFsICE9PSB1bmRlZmluZWQpIHBhZ2luYXRpb24udG90YWwgPSB0b3RhbDtcbiAgaWYgKG5leHRDdXJzb3IpIHBhZ2luYXRpb24ubmV4dEN1cnNvciA9IG5leHRDdXJzb3I7XG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbih7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIGRhdGE6IHsgW2RhdGFLZXldOiBkYXRhLCBwYWdpbmF0aW9uIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNRTFNUQVRFOiBleGFjdGx5IGZpdmUgY2hhcmFjdGVycywgZGlnaXRzIGFuZCB1cHBlcmNhc2UgTGF0aW4gbGV0dGVyc1xuICogKGUuZy4gYDIzNTA1YCB1bmlxdWVfdmlvbGF0aW9uLCBgNDI2MDFgIHN5bnRheF9lcnJvcikuIE5vZGUncyBvd24gc29ja2V0IGFuZFxuICogRE5TIGVycm9ycyB1c2UgdGhlIHNhbWUgYC5jb2RlYCBwcm9wZXJ0eSBidXQgc3BlbGwgaXQgZGlmZmVyZW50bHlcbiAqIChgRUNPTk5SRVNFVGAsIGBFVElNRURPVVRgLCBgRU5PVEZPVU5EYCksIHdoaWNoIGlzIHdoYXQgdGhpcyB0ZWxscyBhcGFydC5cbiAqL1xuY29uc3QgU1FMU1RBVEVfUEFUVEVSTiA9IC9eWzAtOUEtWl17NX0kLztcblxuLyoqXG4gKiBMZW5ndGggYWxvbmUgaXMgbm90IGVub3VnaDogYEVQSVBFYCBhbmQgYEUyQklHYCBhcmUgZml2ZSB1cHBlcmNhc2UgY2hhcmFjdGVyc1xuICogYW5kIHdvdWxkIHBhc3MgYXMgU1FMU1RBVEVzLiBFdmVyeSBsaWJ1di9Ob2RlIGVycm5vIHN0YXJ0cyB3aXRoIGBFYCwgYW5kXG4gKiBQb3N0Z3JlcyBkZWZpbmVzIG5vIGVycm9yIGNsYXNzIHRoYXQgZG9lcyDigJQgaXRzIGNsYXNzZXMgYXJlIDAwLTBaLCAyMC0yRixcbiAqIDM0LTNGLCA0MC00NCwgNTMtNTgsIDcyLCBGMCwgSFYsIFAwIGFuZCBYWCAoc2VlIHRoZSBzZXJ2ZXIncyBlcnJjb2Rlcy50eHQpLlxuICogU28gYSBsZWFkaW5nIGBFYCBzZXR0bGVzIGl0LlxuICovXG5jb25zdCBOT0RFX0VSUk5PX1BBVFRFUk4gPSAvXkUvO1xuXG4vKipcbiAqIEV4dHJhY3QgZGF0YWJhc2UgZXJyb3IgZGV0YWlscyBmb3IgbG9nZ2luZy9yZXNwb25zZS5cbiAqXG4gKiBFeHRyYWN0cyBQb3N0Z3JlU1FMIGVycm9yIGNvZGVzLCBkZXRhaWxzLCBoaW50cywgYW5kIGNvbnN0cmFpbnQgbmFtZXNcbiAqIGZyb20gZGF0YWJhc2UgZXJyb3JzIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogT25seSBhIGdlbnVpbmUgUG9zdGdyZXMgZXJyb3IgeWllbGRzIGEgYGRiQ29kZWA6IHJlcG9ydGluZyBhbnkgYC5jb2RlYCBhcyBvbmVcbiAqIHdvdWxkIGxvZyBhIHRyYW5zcG9ydCBmYWlsdXJlIChgRUNPTk5SRVNFVGAgd2hlbiB0aGUgcG9vbGVyIGRyb3BzIG91dCBvZiB0aGVcbiAqIFNlcnZpY2UgZW5kcG9pbnRzLCBzYXkpIGFzIGB7XCJkYlwiOntcImRiQ29kZVwiOlwiRUNPTk5SRVNFVFwifX1gIGFuZCBzZW5kIHJlYWRlcnNcbiAqIGh1bnRpbmcgdGhyb3VnaCBjbGVhbiBQb3N0Z3JlcyBsb2dzLiBUaGUgdHJhbnNwb3J0IGNvZGUgaXMgbm90IGxvc3Qg4oCUIGNhbGxlcnMgbG9nIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBpdHNlbGYgYWxvbmdzaWRlIHRoZXNlIGRldGFpbHMg4oCUIGl0IGp1c3Qgc3RvcHMgY2xhaW1pbmcgdG8gYmUgYSBEQiBmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciBvYmplY3QgZnJvbSBkYXRhYmFzZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV4dHJhY3RlZCBlcnJvciBkZXRhaWxzOyBge31gIHdoZW4gYGVycm9yYCBpcyBub3QgYVxuICogICBQb3N0Z3JlcyBlcnJvciAobm8gU1FMU1RBVEUgYW5kIG5vbmUgb2YgdGhlIHBnLXNwZWNpZmljIGZpZWxkcylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgZGIuaW5zZXJ0KHBsdWdpbnMpLnZhbHVlcyhuZXdQbHVnaW4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc3QgZGJEZXRhaWxzID0gZXh0cmFjdERiRXJyb3IoZXJyb3IpO1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNTAwLCAnRGF0YWJhc2UgZXJyb3InLCBFcnJvckNvZGUuREFUQUJBU0VfRVJST1IsIGRiRGV0YWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYkVycm9yKGVycm9yOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBEcml6emxlIE9STSB3cmFwcyB0aGUgb3JpZ2luYWwgcGcgZXJyb3IgaW4gZXJyb3IuY2F1c2Ug4oCUXG4gIC8vIGNoZWNrIHRoZSBjYXVzZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGVycm9yIGl0c2VsZi5cbiAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHNvdXJjZSA9IChlcnIuY2F1c2UgJiYgdHlwZW9mIGVyci5jYXVzZSA9PT0gJ29iamVjdCcgPyBlcnIuY2F1c2UgOiBlcnIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGlmICh0eXBlb2Ygc291cmNlLmNvZGUgPT09ICdzdHJpbmcnXG4gICAgJiYgU1FMU1RBVEVfUEFUVEVSTi50ZXN0KHNvdXJjZS5jb2RlKVxuICAgICYmICFOT0RFX0VSUk5PX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSkpIHtcbiAgICBkZXRhaWxzLmRiQ29kZSA9IHNvdXJjZS5jb2RlO1xuICB9XG4gIGlmIChzb3VyY2UuZGV0YWlsKSBkZXRhaWxzLmRiRGV0YWlsID0gc291cmNlLmRldGFpbDtcbiAgaWYgKHNvdXJjZS5oaW50KSBkZXRhaWxzLmRiSGludCA9IHNvdXJjZS5oaW50O1xuICBpZiAoc291cmNlLmNvbnN0cmFpbnQpIGRldGFpbHMuY29uc3RyYWludCA9IHNvdXJjZS5jb25zdHJhaW50O1xuICBpZiAoc291cmNlLnRhYmxlKSBkZXRhaWxzLnRhYmxlID0gc291cmNlLnRhYmxlO1xuICBpZiAoc291cmNlLmNvbHVtbikgZGV0YWlscy5jb2x1bW4gPSBzb3VyY2UuY29sdW1uO1xuXG4gIHJldHVybiBkZXRhaWxzO1xufVxuXG4vLyBDb252ZW5pZW5jZSBoZWxwZXJzIChzaGFyZWQgYWNyb3NzIHBsdWdpbiwgcGlwZWxpbmUsIHF1b3RhIHNlcnZpY2VzKVxuXG4vKipcbiAqIEV4dHJhY3QgYSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gYW4gdW5rbm93biBjYXRjaCB2YWx1ZS5cbiAqXG4gKiBGYWxscyBiYWNrIGJleW9uZCBgLm1lc3NhZ2VgIGJlY2F1c2Ugc2V2ZXJhbCBjb21tb24gTm9kZSBlcnJvcnMgY2FycnkgYW5cbiAqIEVNUFRZIGAubWVzc2FnZWA6XG4gKiAgLSBkdWFsLXN0YWNrIChJUHY0K0lQdjYpIGNvbm5lY3QgZmFpbHVyZXMgc3VyZmFjZSBhcyBhbiBgQWdncmVnYXRlRXJyb3JgXG4gKiAgICB3aG9zZSBvd24gbWVzc2FnZSBpcyBibGFuayDigJQgdGhlIGNhdXNlIGxpdmVzIGluIGAuY29kZWAgKGUuZy5cbiAqICAgIGBFQ09OTlJFRlVTRURgL2BFVElNRURPVVRgKSBhbmQvb3IgdGhlIGAuZXJyb3JzW11gIHN1Yi1lcnJvcnM7XG4gKiAgLSByYXcgc29ja2V0IGBFcnJub0V4Y2VwdGlvbmBzIGNhbiBsaWtld2lzZSBjYXJyeSBvbmx5IGEgYC5jb2RlYC5cbiAqIFdpdGhvdXQgdGhpcywgYW4gdW5yZWFjaGFibGUgaW50ZXJuYWwgc2VydmljZSAoZS5nLiBjb21wbGlhbmNlIHN0aWxsXG4gKiBzdGFydGluZykgcHJvZHVjZWQgYmxhbmsgcGVyLWl0ZW0gZXJyb3JzIGluIGJ1bGsgcmVzcG9uc2VzIGFuZCBgZXJyb3I6XCJcImBcbiAqIGluIGxvZ3Mg4oCUIGEgc2lsZW50IGJsYWNrIGJveC4gT3JkZXI6IG1lc3NhZ2Ug4oaSIGNvZGUg4oaSIGpvaW5lZCBzdWItZXJyb3JzIOKGklxuICogZXJyb3IgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgaWYgKGVycm9yLm1lc3NhZ2UpIHJldHVybiBlcnJvci5tZXNzYWdlO1xuXG4gIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG4gIGlmIChjb2RlKSByZXR1cm4gY29kZTtcblxuICBjb25zdCBpbm5lciA9IChlcnJvciBhcyB7IGVycm9ycz86IHVua25vd25bXSB9KS5lcnJvcnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGlubmVyKSAmJiBpbm5lci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgam9pbmVkID0gaW5uZXIubWFwKGVycm9yTWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJzsgJyk7XG4gICAgaWYgKGpvaW5lZCkgcmV0dXJuIGpvaW5lZDtcbiAgfVxuXG4gIHJldHVybiBlcnJvci5uYW1lIHx8ICdVbmtub3duIGVycm9yJztcbn1cblxuLyoqIFNlbmQgYSA0MDAgYmFkLXJlcXVlc3QgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEJhZFJlcXVlc3QoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZTogRXJyb3JDb2RlIHwgc3RyaW5nID0gRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4pOiB2b2lkIHtcbiAgc2VuZEVycm9yKHJlcywgNDAwLCBtZXNzYWdlLCBjb2RlKTtcbn1cblxuLyoqIFNlbmQgYSA1MDAgaW50ZXJuYWwgZXJyb3IgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEludGVybmFsRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDUwMCwgbWVzc2FnZSwgRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SLCBkZXRhaWxzKTtcbn1cblxuLy8gUGFnaW5hdGlvblxuXG4vKiogQ29tbW9uIHBhZ2luYXRpb24gKyBzb3J0aW5nIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBsaW1pdDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBBIHBhcnNlZCBgP3NvcnRCeT0mc29ydE9yZGVyPWAgKGRlZmF1bHQ6IG5ld2VzdCBmaXJzdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRQYXJhbXMge1xuICBzb3J0Qnk6IHN0cmluZztcbiAgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJztcbn1cblxuLyoqIFBhcnNlIGA/c29ydEJ5PSZzb3J0T3JkZXI9YDsgZGVmYXVsdHMgdG8gYGNyZWF0ZWRBdGAgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvcnQocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU29ydFBhcmFtcyB7XG4gIGNvbnN0IHNvcnRCeSA9IFN0cmluZyhxdWVyeS5zb3J0QnkgfHwgJ2NyZWF0ZWRBdCcpO1xuICBjb25zdCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID1cbiAgICBTdHJpbmcocXVlcnkuc29ydE9yZGVyIHx8ICdkZXNjJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgcmV0dXJuIHsgc29ydEJ5LCBzb3J0T3JkZXIgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBsaXN0LXJvdXRlIHdpbmRvdyArIHNvcnQ6IHtAbGluayBwYXJzZVBhZ2V9IHdpdGggYSBwYWdlIG9mIDEwXG4gKiAoY2FwcGVkIGF0IGBNQVhfUEFHRV9MSU1JVGAsIG9mZnNldCBjYXBwZWQgYXQgYE1BWF9QQUdFX09GRlNFVGAg4oCUIGRlZXAgcGFnaW5nXG4gKiB1c2VzIHRoZSBjdXJzb3IgQVBJKSBwbHVzIHtAbGluayBwYXJzZVNvcnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYWdpbmF0aW9uUGFyYW1zKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBhZ2luYXRpb25QYXJhbXMge1xuICByZXR1cm4geyAuLi5wYXJzZVBhZ2UocXVlcnksIHsgZGVmOiAxMCwgbWF4OiBNQVhfUEFHRV9MSU1JVCB9KSwgLi4ucGFyc2VTb3J0KHF1ZXJ5KSB9O1xufVxuIl19
|
|
@@ -67,8 +67,6 @@ export declare class KmsKeyProvider implements KeyProvider {
|
|
|
67
67
|
* one. Triggers lazy initialization on first access, same as the internal
|
|
68
68
|
* callers below. */
|
|
69
69
|
export declare function getDefaultKeyProvider(): KeyProvider;
|
|
70
|
-
/** Read the rotation-fallback provider (null outside a master-key rotation). */
|
|
71
|
-
export declare function getPreviousKeyProvider(): KeyProvider | null;
|
|
72
70
|
/** Reset the cached default (and previous) provider for tests that mutate `process.env`. */
|
|
73
71
|
export declare function resetDefaultKeyProvider(): void;
|
|
74
72
|
/** Replace the default provider services that opt into KMS call this
|