@pipeline-builder/api-core 5.2.6 → 5.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/constants/ai-providers.js +1 -1
- package/lib/constants/http-status.js +1 -1
- package/lib/constants/index.js +1 -1
- package/lib/constants/time.js +1 -1
- package/lib/errors/app-errors.js +1 -1
- package/lib/errors/index.js +1 -1
- package/lib/helpers/access-helpers.d.ts +19 -0
- package/lib/helpers/access-helpers.js +24 -4
- package/lib/helpers/content-disposition.js +1 -1
- package/lib/helpers/crud-helpers.js +1 -1
- package/lib/helpers/index.d.ts +1 -1
- package/lib/helpers/index.js +2 -2
- package/lib/helpers/org-hierarchy-http.js +1 -1
- package/lib/helpers/org-hierarchy.js +1 -1
- package/lib/helpers/restore-helpers.js +1 -1
- package/lib/helpers/sse-helpers.js +13 -2
- package/lib/helpers/support-calendar.js +1 -1
- package/lib/index.js +1 -1
- package/lib/middleware/ask-provenance.js +1 -1
- package/lib/middleware/assurance.js +1 -1
- package/lib/middleware/auth.js +3 -2
- package/lib/middleware/client-version.d.ts +45 -0
- package/lib/middleware/client-version.js +97 -0
- package/lib/middleware/deferred-quota-check.js +1 -1
- package/lib/middleware/ecosystem-guard.js +1 -1
- package/lib/middleware/index.d.ts +1 -0
- package/lib/middleware/index.js +2 -1
- package/lib/middleware/jwt-verify.js +1 -1
- package/lib/middleware/mongo-sanitize.js +1 -1
- package/lib/middleware/on-behalf.js +1 -1
- package/lib/middleware/permission-gates.js +1 -1
- package/lib/middleware/quota-exempt-routes.js +1 -1
- package/lib/middleware/revocation.js +1 -1
- package/lib/middleware/route-table.js +16 -1
- package/lib/middleware/service-tokens.js +1 -1
- package/lib/middleware/step-up.js +1 -1
- package/lib/middleware/system-org.d.ts +18 -5
- package/lib/middleware/system-org.js +19 -6
- package/lib/openapi/extend-zod.js +1 -1
- package/lib/openapi/index.js +1 -1
- package/lib/openapi/registry.js +1 -1
- package/lib/openapi/routes/ask-routes.js +1 -1
- package/lib/openapi/routes/billing-routes.js +1 -1
- package/lib/openapi/routes/image-registry-routes.js +1 -1
- package/lib/openapi/routes/index.js +1 -1
- package/lib/openapi/routes/message-routes.js +1 -1
- package/lib/openapi/routes/pipeline-routes.js +1 -1
- package/lib/openapi/routes/pipeline-template-routes.js +1 -1
- package/lib/openapi/routes/plugin-routes.js +1 -1
- package/lib/openapi/routes/quota-routes.js +1 -1
- package/lib/openapi/schema-registry.js +1 -1
- package/lib/routes/health.js +1 -1
- package/lib/routes/index.js +1 -1
- package/lib/services/ai-call-weight.js +1 -1
- package/lib/services/alert-delivery.js +1 -1
- package/lib/services/api-key-exchange.d.ts +4 -2
- package/lib/services/api-key-exchange.js +15 -8
- package/lib/services/audit-context.d.ts +3 -0
- package/lib/services/audit-context.js +2 -1
- package/lib/services/audit-spool.js +1 -1
- package/lib/services/cache-service.js +1 -1
- package/lib/services/circuit-breaker.js +1 -1
- package/lib/services/compliance-client.js +1 -1
- package/lib/services/compliance-event-subscriber.js +1 -1
- package/lib/services/durable-event-bus.js +1 -1
- package/lib/services/ecosystem-notify-client.d.ts +7 -1
- package/lib/services/ecosystem-notify-client.js +9 -3
- package/lib/services/entity-events.js +1 -1
- package/lib/services/env-redis.js +1 -1
- package/lib/services/http-client.js +19 -3
- package/lib/services/index.d.ts +1 -1
- package/lib/services/index.js +2 -2
- package/lib/services/jwks-cache.js +1 -1
- package/lib/services/leader-lock.js +1 -1
- package/lib/services/notification-channels.js +1 -1
- package/lib/services/org-ai-client.js +1 -1
- package/lib/services/pagerduty-inbound.js +1 -1
- package/lib/services/pagerduty.js +1 -1
- package/lib/services/quota-increment-batcher.js +1 -1
- package/lib/services/quota.js +1 -1
- package/lib/services/remote-audit-client.js +1 -1
- package/lib/services/retry-forever.js +1 -1
- package/lib/services/retry-strategy.js +1 -1
- package/lib/services/s3-client.js +1 -1
- package/lib/services/scheduler.js +1 -1
- package/lib/services/service-boot.js +1 -1
- package/lib/services/service-keys.js +2 -2
- package/lib/services/sse-ticket-store.js +1 -1
- package/lib/services/system-notification.js +1 -1
- package/lib/services/token-revocation.js +1 -1
- package/lib/services/version-vuln-policy.d.ts +11 -0
- package/lib/services/version-vuln-policy.js +33 -7
- package/lib/types/ai-catalog.js +1 -1
- package/lib/types/ask-proposals.d.ts +23 -0
- package/lib/types/ask-proposals.js +29 -1
- package/lib/types/audit-events.js +1 -1
- package/lib/types/build-catalog.d.ts +65 -0
- package/lib/types/build-catalog.js +95 -1
- package/lib/types/catalog-metadata.js +1 -1
- package/lib/types/common.js +1 -1
- package/lib/types/compliance-exemption.js +1 -1
- package/lib/types/ecosystem-notifications.d.ts +9 -0
- package/lib/types/ecosystem-notifications.js +15 -6
- package/lib/types/ecosystem.d.ts +1 -6
- package/lib/types/ecosystem.js +18 -5
- package/lib/types/error-codes.d.ts +3 -0
- package/lib/types/error-codes.js +6 -1
- package/lib/types/feature-flags.d.ts +17 -1
- package/lib/types/feature-flags.js +1 -1
- package/lib/types/http.js +1 -1
- package/lib/types/index.d.ts +3 -3
- package/lib/types/index.js +4 -4
- package/lib/types/metadata-keys.js +1 -1
- package/lib/types/permissions.d.ts +60 -13
- package/lib/types/permissions.js +63 -14
- package/lib/types/pipeline-template.js +1 -1
- package/lib/types/pipeline.js +1 -1
- package/lib/types/plugin-catalog.js +1 -1
- package/lib/types/plugin-health.js +1 -1
- package/lib/types/plugin-scan.d.ts +69 -0
- package/lib/types/plugin-scan.js +77 -1
- package/lib/types/quota-catalog.js +15 -2
- package/lib/types/quota-tiers.d.ts +27 -160
- package/lib/types/quota-tiers.js +47 -255
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +9 -1
- package/lib/types/reserved-tags.js +1 -1
- package/lib/types/tier-limits.d.ts +210 -0
- package/lib/types/tier-limits.js +254 -0
- package/lib/types/usage-projection.js +1 -1
- package/lib/types/visibility.js +1 -1
- package/lib/types/wire-vocabulary.d.ts +7 -0
- package/lib/types/wire-vocabulary.js +7 -1
- package/lib/utils/alias-resolver.js +1 -1
- package/lib/utils/api-key.js +1 -1
- package/lib/utils/audit.js +1 -1
- package/lib/utils/aws-scrub.js +1 -1
- package/lib/utils/compliance-attributes.js +1 -1
- package/lib/utils/concurrency-gate.d.ts +98 -0
- package/lib/utils/concurrency-gate.js +110 -0
- package/lib/utils/concurrency.js +1 -1
- package/lib/utils/crash-handlers.js +1 -1
- package/lib/utils/date.js +1 -1
- package/lib/utils/dsse.js +1 -1
- package/lib/utils/env.d.ts +11 -0
- package/lib/utils/env.js +14 -1
- package/lib/utils/headers.js +1 -1
- package/lib/utils/identity.js +1 -1
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.js +3 -1
- package/lib/utils/jwk.js +2 -2
- package/lib/utils/logger.js +1 -1
- package/lib/utils/metric-emitter.js +1 -1
- package/lib/utils/object.js +1 -1
- package/lib/utils/params.js +1 -1
- package/lib/utils/plugin-compliance.d.ts +9 -1
- package/lib/utils/plugin-compliance.js +1 -1
- package/lib/utils/proof-of-work.js +1 -1
- package/lib/utils/response.js +1 -1
- package/lib/utils/retention.js +1 -1
- package/lib/utils/safe-require.js +1 -1
- package/lib/utils/secret-encryption.js +1 -1
- package/lib/utils/secret-rotation.js +1 -1
- package/lib/utils/secure-compare.js +1 -1
- package/lib/utils/semver.d.ts +18 -0
- package/lib/utils/semver.js +120 -0
- package/lib/utils/sensitive-patterns.js +1 -1
- package/lib/utils/service-registry.js +1 -1
- package/lib/utils/ssrf.js +1 -1
- package/lib/validation/ai-schemas.js +1 -1
- package/lib/validation/common-schemas.js +1 -1
- package/lib/validation/dockerfile-static.js +1 -1
- package/lib/validation/index.d.ts +1 -1
- package/lib/validation/index.js +2 -2
- package/lib/validation/message-schemas.d.ts +73 -0
- package/lib/validation/message-schemas.js +63 -2
- package/lib/validation/middleware.js +1 -1
- package/lib/validation/pipeline-schemas.js +1 -1
- package/lib/validation/pipeline-template-schemas.js +1 -1
- package/lib/validation/plugin-base-images.js +1 -1
- package/lib/validation/plugin-catalog-detect.js +1 -1
- package/lib/validation/plugin-catalog-metadata.js +1 -1
- package/lib/validation/plugin-heuristics.js +1 -1
- package/lib/validation/plugin-lint.js +1 -1
- package/lib/validation/plugin-name-confusable.js +1 -1
- package/lib/validation/plugin-schemas.js +1 -1
- package/lib/validation/plugin-spec-schema.js +1 -1
- package/lib/validation/plugin-template-contract.js +1 -1
- package/package.json +11 -4
|
@@ -159,4 +159,4 @@ export async function checkRevocation(decoded) {
|
|
|
159
159
|
}
|
|
160
160
|
return null;
|
|
161
161
|
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3Jldm9jYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7O0dBR0c7QUFFSCxPQUFPLEVBQW1CLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBeUMvQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsTUFBcUU7SUFFckUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNqQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUc7UUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRyxJQUFJLE9BQU8sTUFBTSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFdBQVc7UUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRyxNQUFNLEdBQUcsR0FBRyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRixJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FB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Q3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxLQUFLLFNBQVM7Z0JBQ3hCLENBQUMsQ0FBQywyQ0FBMkM7Z0JBQzdDLENBQUMsQ0FBQyxrREFBa0QsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxPQUFPLGdEQUFnRCxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTZXNzaW9uIGludmFsaWRhdGlvbjogdGhlIHRva2VuLXZlcnNpb24gcmV2b2NhdGlvbiBzdG9yZSBhbmQgdGhlXG4gKiBpbXBlcnNvbmF0aW9uLXNlc3Npb24gbGl2ZW5lc3MgY2hlY2sgYHJlcXVpcmVBdXRoYCBjb25zdWx0cyBhZnRlciB2ZXJpZnlpbmcgYSB0b2tlbi5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIEp3dFBheWxvYWQgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdhdXRoLW1pZGRsZXdhcmUnKTtcbi8qKlxuICogQSBzb3VyY2Ugb2YgdGhlIENVUlJFTlQgYHRva2VuVmVyc2lvbmAgZm9yIGEgdXNlciwgYmFja2VkIGJ5IGEgc3RvcmUgdGhlXG4gKiBzdGF0ZWxlc3Mgc2VydmljZXMgY2FuIHJlYWQgKGluIHByYWN0aWNlIGEgUmVkaXMga2V5IHRoZSBwbGF0Zm9ybSBwdWJsaXNoZXNcbiAqIHRvIG9uIGV2ZXJ5IHByaXZpbGVnZSBjaGFuZ2UpLiBSZWdpc3RlcmVkIHZpYSB7QGxpbmsgc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmV9LlxuICpcbiAqIGBnZXRDdXJyZW50VmVyc2lvbmAgcmV0dXJucyB0aGUgdXNlcidzIGN1cnJlbnQgdmVyc2lvbiwgb3IgYG51bGxgIHdoZW4gdGhlXG4gKiBzdG9yZSBoYXMgbm8gZW50cnkg4oCUIGEgbWlzcyBpcyB0cmVhdGVkIGFzIFwibm8ga25vd24gcmV2b2NhdGlvblwiIChmYWlsLW9wZW4pOlxuICogcmV2b2NhdGlvbiBlbnRyaWVzIGFyZSBwdWJsaXNoZWQgd2l0aCBhIFRUTCBtYXRjaGluZyB0aGUgYWNjZXNzLXRva2VuXG4gKiBsaWZldGltZSwgc28gYSBtaXNzaW5nIGVudHJ5IG1lYW5zIGFueSB0b2tlbiBvbGQgZW5vdWdoIHRvIHByZWRhdGUgaXQgaGFzXG4gKiBhbHJlYWR5IGV4cGlyZWQgb24gaXRzIG93bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlblJldm9jYXRpb25TdG9yZSB7XG4gIGdldEN1cnJlbnRWZXJzaW9uKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb25lIElNUEVSU09OQVRJT04gc2Vzc2lvbiAoYnkgdG9rZW4gYGp0aWApIGhhcyBiZWVuIGVuZGVkIGVhcmx5LlxuICAgKlxuICAgKiBPcHRpb25hbCBzbyBhIHN0b3JlIHRoYXQgcHJlZGF0ZXMgaXQgc3RpbGwgbGlua3Mg4oCUIGJ1dCBhIHN0b3JlIFdJVEhPVVQgaXRcbiAgICogY2Fubm90IGFuc3dlciwgYW5kIGFuIGltcGVyc29uYXRpb24gdG9rZW4gaXMgdGhlbiBSRUpFQ1RFRC4gVW5saWtlXG4gICAqIGBnZXRDdXJyZW50VmVyc2lvbmAsIHRoaXMgaXMgZGVsaWJlcmF0ZWx5IG5vdCBmYWlsLW9wZW46IHRoZSBwbGF0Zm9ybSBlbmRzIGFcbiAgICogc2Vzc2lvbiB3aGVuIHNvbWVvbmUgd2l0aGRyYXdzIGNvbnNlbnQsIGFuZCBhIHdpdGhkcmF3biBjb25zZW50IHRoYXQga2VlcHNcbiAgICogd29ya2luZyBpbiBldmVyeSBvdGhlciBzZXJ2aWNlIGlzIG5vdCB3aXRoZHJhd24uXG4gICAqL1xuICBnZXRTZXNzaW9uUmV2b2NhdGlvbj8oanRpOiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb25SZXZvY2F0aW9uU3RhdGU+O1xuICAvKipcbiAgICogV2hldGhlciBPTkUgY3JlZGVudGlhbCB0aGUgdG9rZW4gcmlkZXMgb24gaGFzIGJlZW4gcmV2b2tlZCDigJQgaXRzIHNlc3Npb25cbiAgICogc2xvdCAoYHNpZGApIG9yIHRoZSBhY2Nlc3Mga2V5IGl0IHdhcyBleGNoYW5nZWQgZnJvbSAvIGRlcml2ZWQgZnJvbSAoc2VlXG4gICAqIHtAbGluayBjcmVkZW50aWFsUmV2b2NhdGlvblJlZnN9KS4gRmFpbC1vcGVuIGxpa2UgYGdldEN1cnJlbnRWZXJzaW9uYDogYVxuICAgKiBzdG9yZSB0aGF0IGNhbid0IGFuc3dlciByZXR1cm5zIGBmYWxzZWAuXG4gICAqL1xuICBpc0NyZWRlbnRpYWxSZXZva2VkPyhyZWZzOiBDcmVkZW50aWFsUmV2b2NhdGlvblJlZnMpOiBQcm9taXNlPGJvb2xlYW4+O1xufVxuXG4vKiogVGhlIHNpbmdsZS1jcmVkZW50aWFsIGlkcyBhIHRva2VuIGNhbiBiZSByZXZva2VkIGJ5IChgcmV2b2tlOnNpZDpgIC8gYHJldm9rZTprZXk6YCkuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxSZXZvY2F0aW9uUmVmcyB7XG4gIC8qKiBUaGUgcmVmcmVzaC1zZXNzaW9uIHNsb3QgdGhlIHRva2VuIHdhcyBtaW50ZWQgd2l0aC4gKi9cbiAgc2lkPzogc3RyaW5nO1xuICAvKiogQWNjZXNzLWtleSBpZHM6IHRoZSBleGNoYW5nZWQga2V5J3Mgb3duIGBqdGlgLCBhbmQgYW55IGBwYXJlbnRLZXlJZGAuICovXG4gIGtleUlkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGNyZWRlbnRpYWwgaWRzIGEgdmVyaWZpZWQgdG9rZW4gY2FuIGJlIHJldm9rZWQgYnkuIEFuIGV4Y2hhbmdlZCBrZXkgdG9rZW5cbiAqIChgdG9rZW5fdXNlOiAnYXBpX2tleSdgKSBpcyBuYW1lZCBieSBpdHMgYGp0aWA7IGEgdG9rZW4gZGVyaXZlZCBmcm9tIG9uZVxuICogY2FycmllcyBgcGFyZW50S2V5SWRgOyBhIHNlc3Npb24tbWludGVkIHRva2VuIGNhcnJpZXMgYHNpZGAuIFJldHVybnMgYG51bGxgXG4gKiB3aGVuIHRoZSB0b2tlbiBuYW1lcyBub25lIG9mIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsUmV2b2NhdGlvblJlZnMoXG4gIGNsYWltczogUGljazxKd3RQYXlsb2FkLCAnc2lkJyB8ICdwYXJlbnRLZXlJZCcgfCAnanRpJyB8ICd0b2tlbl91c2UnPixcbik6IENyZWRlbnRpYWxSZXZvY2F0aW9uUmVmcyB8IG51bGwge1xuICBjb25zdCBrZXlJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgaWYgKGNsYWltcy50b2tlbl91c2UgPT09ICdhcGlfa2V5JyAmJiB0eXBlb2YgY2xhaW1zLmp0aSA9PT0gJ3N0cmluZycgJiYgY2xhaW1zLmp0aSkga2V5SWRzLmFkZChjbGFpbXMuanRpKTtcbiAgaWYgKHR5cGVvZiBjbGFpbXMucGFyZW50S2V5SWQgPT09ICdzdHJpbmcnICYmIGNsYWltcy5wYXJlbnRLZXlJZCkga2V5SWRzLmFkZChjbGFpbXMucGFyZW50S2V5SWQpO1xuICBjb25zdCBzaWQgPSB0eXBlb2YgY2xhaW1zLnNpZCA9PT0gJ3N0cmluZycgJiYgY2xhaW1zLnNpZCA/IGNsYWltcy5zaWQgOiB1bmRlZmluZWQ7XG4gIGlmICghc2lkICYmIGtleUlkcy5zaXplID09PSAwKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgLi4uKHNpZCA/IHsgc2lkIH0gOiB7fSksIGtleUlkczogWy4uLmtleUlkc10gfTtcbn1cblxuLyoqXG4gKiBgcmV2b2tlZGAgICAgIOKAlCB0aGUgc2Vzc2lvbiB3YXMgZW5kZWQ7IHJlamVjdC5cbiAqIGBsaXZlYCAgICAgICAg4oCUIG5vIHJldm9jYXRpb24gcmVjb3JkZWQ7IGFsbG93LlxuICogYHVuYXZhaWxhYmxlYCDigJQgdGhlIHN0b3JlIGNvdWxkbid0IGJlIHJlYWQgb3IgY2FuJ3QgYW5zd2VyOyBSRUpFQ1QuIERpc3RpbmN0XG4gKiAgICAgICAgICAgICAgICAgZnJvbSBgbGl2ZWAgcHJlY2lzZWx5IHNvIGFuIG91dGFnZSBjYW4ndCByZWFkIGFzIFwibm90IHJldm9rZWRcIi5cbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvblJldm9jYXRpb25TdGF0ZSA9ICdyZXZva2VkJyB8ICdsaXZlJyB8ICd1bmF2YWlsYWJsZSc7XG5cbmxldCB0b2tlblJldm9jYXRpb25TdG9yZTogVG9rZW5SZXZvY2F0aW9uU3RvcmUgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmVnaXN0ZXIgKG9yIGNsZWFyLCB3aXRoIGB1bmRlZmluZWRgKSB0aGUgcHJvY2Vzcy13aWRlIHRva2VuLXJldm9jYXRpb24gc3RvcmUuXG4gKiBXaGVuIHVuc2V0ICh0aGUgZGVmYXVsdCksIGByZXF1aXJlQXV0aGAgcGVyZm9ybXMgTk8gcmV2b2NhdGlvbiBjaGVjayAoaXQgcmVsaWVzXG4gKiBvbiB0aGUgc2hvcnQgYWNjZXNzLXRva2VuIFRUTCk7IHNlcnZpY2VzIG9wdCBpbiBhdCBib290IGJ5IHdpcmluZyB0aGVpciBSZWRpc1xuICogY2xpZW50LiBQbGF0Zm9ybSBrZWVwcyBpdHMgb3duIE1vbmdvLWJhY2tlZCBjaGVjayBhbmQgbmVlZCBub3QgcmVnaXN0ZXIgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmUoc3RvcmU6IFRva2VuUmV2b2NhdGlvblN0b3JlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIHRva2VuUmV2b2NhdGlvblN0b3JlID0gc3RvcmU7XG4gIGlmIChzdG9yZSkgcmV2b2NhdGlvblN0b3JlTWlzc2luZ1dhcm5lZCA9IGZhbHNlOyAvLyByZS1hcm0gaWYgYSBzdG9yZSBpcyAocmUpcmVnaXN0ZXJlZFxufVxuXG4vKiogT25lLXNob3QgZ3VhcmQgc28gdGhlIFwicmV2b2NhdGlvbiBpbmFjdGl2ZVwiIHdhcm5pbmcgZG9lc24ndCBmbG9vZCB0aGUgbG9ncy4gKi9cbmxldCByZXZvY2F0aW9uU3RvcmVNaXNzaW5nV2FybmVkID0gZmFsc2U7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gYGRlY29kZWRgIGhhcyBiZWVuIHJldm9rZWQgcGVyIHRoZSByZWdpc3RlcmVkIHN0b3JlOiBpdHNcbiAqIGVtYmVkZGVkIGB0b2tlblZlcnNpb25gIGlzIHN0cmljdGx5IGJlaGluZCB0aGUgc3RvcmUncyBjdXJyZW50IHZlcnNpb24uXG4gKiBGYWlsLW9wZW4g4oCUIGFueSBzdG9yZSBlcnJvciwgYSBtaXNzaW5nIGVudHJ5LCBvciBhIHRva2VuL3N0b3JlIHdpdGhvdXQgYVxuICogdXNhYmxlIHZlcnNpb24geWllbGRzIGBmYWxzZWAgKGFsbG93KS4gTmV2ZXIgdGhyb3dzLlxuICovXG5hc3luYyBmdW5jdGlvbiBpc1Rva2VuUmV2b2tlZChkZWNvZGVkOiBKd3RQYXlsb2FkKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHN0b3JlID0gdG9rZW5SZXZvY2F0aW9uU3RvcmU7XG4gIGlmICghc3RvcmUpIHtcbiAgICAvLyBNYWtlIHRoZSBcInJldm9jYXRpb24gaXMgT0ZGXCIgc3RhdGUgT0JTRVJWQUJMRTogYSBzZXJ2aWNlIHRoYXQgdmVyaWZpZXMgdXNlclxuICAgIC8vIHRva2VucyBidXQgZm9yZ290IGBzZXRUb2tlblJldm9jYXRpb25TdG9yZSgpYCBzaWxlbnRseSBkaXNhYmxlcyB0aGUgc2Vzc2lvblxuICAgIC8vIGtpbGwtc3dpdGNoLiBXYXJuIE9OQ0UgKG9ubHkgZm9yIGEgcmV2b2NhYmxlIHVzZXIgdG9rZW4pIHNvIGEgbWlzY29uZmlndXJlZFxuICAgIC8vIGJvb3Qgc3VyZmFjZXMgaW4gdGhlIGxvZ3MgaW5zdGVhZCBvZiBmYWlsaW5nIG9wZW4gaW52aXNpYmx5LlxuICAgIGlmICghcmV2b2NhdGlvblN0b3JlTWlzc2luZ1dhcm5lZCAmJiBkZWNvZGVkLnN1YiAmJiB0eXBlb2YgZGVjb2RlZC50b2tlblZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgICByZXZvY2F0aW9uU3RvcmVNaXNzaW5nV2FybmVkID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci53YXJuKCdUb2tlbiByZXZvY2F0aW9uIHN0b3JlIE5PVCByZWdpc3RlcmVkIOKAlCByZXZvY2F0aW9uIGNoZWNrcyBhcmUgSU5BQ1RJVkUgKHNldFRva2VuUmV2b2NhdGlvblN0b3JlIHdhcyBuZXZlciBjYWxsZWQpOyByZXZva2VkL2NvbXByb21pc2VkIHNlc3Npb25zIHN0YXkgdmFsaWQgdW50aWwgbmF0dXJhbCBUVEwnKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzdG9yZS5pc0NyZWRlbnRpYWxSZXZva2VkKSB7XG4gICAgY29uc3QgcmVmcyA9IGNyZWRlbnRpYWxSZXZvY2F0aW9uUmVmcyhkZWNvZGVkKTtcbiAgICBpZiAocmVmcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGF3YWl0IHN0b3JlLmlzQ3JlZGVudGlhbFJldm9rZWQocmVmcykpIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEZhaWwtb3BlbiwgYXMgYmVsb3cuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghZGVjb2RlZC5zdWIgfHwgdHlwZW9mIGRlY29kZWQudG9rZW5WZXJzaW9uICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBzdG9yZS5nZXRDdXJyZW50VmVyc2lvbihkZWNvZGVkLnN1Yik7XG4gICAgcmV0dXJuIGN1cnJlbnQgIT09IG51bGwgJiYgZGVjb2RlZC50b2tlblZlcnNpb24gPCBjdXJyZW50O1xuICB9IGNhdGNoIHtcbiAgICAvLyBGYWlsLW9wZW46IGEgcmV2b2NhdGlvbi1zdG9yZSBvdXRhZ2UgbXVzdCBub3QgbG9jayBldmVyeSB1c2VyIG91dC5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFdoZXRoZXIgdGhlIHJlZ2lzdGVyZWQgc3RvcmUgaGFzIGFueXRoaW5nIHRvIHNheSBhYm91dCB0aGlzIHRva2VuLiAqL1xuZnVuY3Rpb24gaGFzUmV2b2NhdGlvbkNoZWNrKGRlY29kZWQ6IEp3dFBheWxvYWQpOiBib29sZWFuIHtcbiAgY29uc3Qgc3RvcmUgPSB0b2tlblJldm9jYXRpb25TdG9yZTtcbiAgaWYgKCFzdG9yZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZGVjb2RlZC5zdWIgJiYgdHlwZW9mIGRlY29kZWQudG9rZW5WZXJzaW9uID09PSAnbnVtYmVyJykgcmV0dXJuIHRydWU7XG4gIHJldHVybiAhIXN0b3JlLmlzQ3JlZGVudGlhbFJldm9rZWQgJiYgY3JlZGVudGlhbFJldm9jYXRpb25SZWZzKGRlY29kZWQpICE9PSBudWxsO1xufVxuXG4vKiogTWV0aG9kcyBhIHJlYWQtb25seSBpbXBlcnNvbmF0aW9uIHRva2VuIG1heSB1c2UuICovXG5jb25zdCBJTVBFUlNPTkFUSU9OX1JFQURfTUVUSE9EUyA9IG5ldyBTZXQoWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJ10pO1xuXG4vKipcbiAqIFdoZXRoZXIgYSByZXF1ZXN0IGlzIGEgV1JJVEUgdW5kZXIgYSByZWFkLW9ubHkgaW1wZXJzb25hdGlvbiB0b2tlbi4gRmFpbC1jbG9zZWRcbiAqIG9uIGEgbWlzc2luZyBtZXRob2Q6IG9ubHkgYSByZXF1ZXN0IHBvc2l0aXZlbHkga25vd24gdG8gYmUgYSByZWFkIHBhc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW1wZXJzb25hdGlvbldyaXRlQmxvY2tlZChcbiAgbWV0aG9kOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGNsYWltczogUGljazxKd3RQYXlsb2FkLCAnaW1wZXJzb25hdGlvblJlYWRPbmx5Jz4sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGNsYWltcy5pbXBlcnNvbmF0aW9uUmVhZE9ubHkgPT09IHRydWUgJiYgIUlNUEVSU09OQVRJT05fUkVBRF9NRVRIT0RTLmhhcygobWV0aG9kID8/ICcnKS50b1VwcGVyQ2FzZSgpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGltcGVyc29uYXRpb24gc2Vzc2lvbidzIHJldm9jYXRpb24gc3RhdGUuIE5ldmVyIHRocm93czogYW55IGZhaWx1cmVcbiAqIOKAlCBubyBzdG9yZSwgYSBzdG9yZSB0aGF0IGNhbid0IGFuc3dlciwgYSByZWFkIGVycm9yIOKAlCBpcyBgdW5hdmFpbGFibGVgLCB3aGljaFxuICogY2FsbGVycyB0cmVhdCBhcyByZXZva2VkLlxuICovXG5hc3luYyBmdW5jdGlvbiBzZXNzaW9uUmV2b2NhdGlvblN0YXRlKGp0aTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uUmV2b2NhdGlvblN0YXRlPiB7XG4gIGNvbnN0IHN0b3JlID0gdG9rZW5SZXZvY2F0aW9uU3RvcmU7XG4gIGlmICghc3RvcmU/LmdldFNlc3Npb25SZXZvY2F0aW9uKSByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgc3RvcmUuZ2V0U2Vzc2lvblJldm9jYXRpb24oanRpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gIH1cbn1cblxuLyoqIEFuIGltcGVyc29uYXRpb24gc2Vzc2lvbiB0b2tlbjogaXQgbmFtZXMgdGhlIG9wZXJhdG9yIEFORCBjYXJyaWVzIGl0cyBvd24gc2Vzc2lvbiBpZC4gKi9cbmZ1bmN0aW9uIGlzSW1wZXJzb25hdGlvblNlc3Npb24oZGVjb2RlZDogeyBpbXBlcnNvbmF0b3JJZD86IHVua25vd247IGp0aT86IHVua25vd24gfSk6IGRlY29kZWQgaXMgeyBpbXBlcnNvbmF0b3JJZDogc3RyaW5nOyBqdGk6IHN0cmluZyB9IHtcbiAgcmV0dXJuIHR5cGVvZiBkZWNvZGVkLmltcGVyc29uYXRvcklkID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgZGVjb2RlZC5qdGkgPT09ICdzdHJpbmcnICYmIGRlY29kZWQuanRpLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogUHVibGljIHJldm9jYXRpb24gY2hlY2sgZm9yIHJvdXRlcyB0aGF0IHZlcmlmeSBhIHBsYXRmb3JtIEpXVCBPVVRTSURFXG4gKiBgcmVxdWlyZUF1dGhgIChlLmcuIHRoZSBpbWFnZS1yZWdpc3RyeSBgL3Rva2VuYCBtaW50IHBhdGgsIHdoaWNoIHJlc29sdmVzXG4gKiBpZGVudGl0eSBpdHNlbGYpLiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdG9rZW4ncyBgdG9rZW5WZXJzaW9uYCBpcyBzdHJpY3RseVxuICogYmVoaW5kIHRoZSBzdG9yZSdzIGN1cnJlbnQgdmVyc2lvbi4gRmFpbC1vcGVuIChuZXZlciB0aHJvd3MpIOKAlCBhIHN0b3JlIG91dGFnZVxuICogb3IgYSB0b2tlbi9zdG9yZSB3aXRob3V0IGEgdXNhYmxlIHZlcnNpb24geWllbGRzIGZhbHNlIChhbGxvdyksIG1hdGNoaW5nXG4gKiBgcmVxdWlyZUF1dGhgLiBQYXNzIHRoZSB2ZXJpZmllZCBKV1QgY2xhaW1zIChgc3ViYCwgYHRva2VuVmVyc2lvbmApLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNBY2Nlc3NUb2tlblJldm9rZWQoXG4gIGNsYWltczoge1xuICAgIHN1Yj86IHN0cmluZztcbiAgICB0b2tlblZlcnNpb24/OiBudW1iZXI7XG4gICAganRpPzogc3RyaW5nO1xuICAgIGltcGVyc29uYXRvcklkPzogc3RyaW5nO1xuICAgIHNpZD86IHN0cmluZztcbiAgICBwYXJlbnRLZXlJZD86IHN0cmluZztcbiAgICB0b2tlbl91c2U/OiBKd3RQYXlsb2FkWyd0b2tlbl91c2UnXTtcbiAgfSxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyBBbiBpbXBlcnNvbmF0aW9uIHNlc3Npb24gaXMgcmV2b2tlZCB1bmxlc3MgdGhlIHN0b3JlIHBvc2l0aXZlbHkgc2F5cyBsaXZlIOKAlFxuICAvLyBpbmNsdWRpbmcgb24gdGhpcyBvdXQtb2YtYmFuZCBwYXRoLCBvciBhIHJldm9rZWQgc2Vzc2lvbiBjb3VsZCBzdGlsbCBtaW50XG4gIC8vIHJlZ2lzdHJ5IHRva2Vucy5cbiAgaWYgKGlzSW1wZXJzb25hdGlvblNlc3Npb24oY2xhaW1zKSAmJiBhd2FpdCBzZXNzaW9uUmV2b2NhdGlvblN0YXRlKGNsYWltcy5qdGkpICE9PSAnbGl2ZScpIHJldHVybiB0cnVlO1xuICByZXR1cm4gaXNUb2tlblJldm9rZWQoY2xhaW1zIGFzIHVua25vd24gYXMgSnd0UGF5bG9hZCk7XG59XG5cblxuLyoqIFdoZXRoZXIgYHJlcXVpcmVBdXRoYCBtdXN0IGNvbnN1bHQgdGhlIHJldm9jYXRpb24gc3RvcmVzIGZvciB0aGlzIHRva2VuLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5lZWRzUmV2b2NhdGlvbkNoZWNrKGRlY29kZWQ6IEp3dFBheWxvYWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzSW1wZXJzb25hdGlvblNlc3Npb24oZGVjb2RlZCkgfHwgaGFzUmV2b2NhdGlvbkNoZWNrKGRlY29kZWQpO1xufVxuXG4vKipcbiAqIFRoZSBwb3N0LXZlcmlmaWNhdGlvbiBzZXNzaW9uLWludmFsaWRhdGlvbiBjaGVjay4gUmV0dXJucyB0aGUgcmVmdXNhbFxuICogbWVzc2FnZSwgb3IgYG51bGxgIHdoZW4gdGhlIHNlc3Npb24gaXMgbGl2ZS4gQW4gaW1wZXJzb25hdGlvbiBzZXNzaW9uIGlzXG4gKiBjaGVja2VkIGV2ZW4gd2hlbiBOTyBzdG9yZSBpcyByZWdpc3RlcmVkOiB0aGVyZSwgbm8gc3RvcmUg4oeSIHVuYXZhaWxhYmxlIOKHklxuICogcmVmdXNlZCAoc2VlIGBUb2tlblJldm9jYXRpb25TdG9yZS5nZXRTZXNzaW9uUmV2b2NhdGlvbmApOyB0aGUgdG9rZW5WZXJzaW9uXG4gKiBjaGVjayBpcyBhIG5vLW9wIHdpdGhvdXQgYSBzdG9yZSBhbmQgZmFpbHMgb3BlbiBvbiBhIHN0b3JlIGVycm9yLiBOZXZlciByZWplY3RzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tSZXZvY2F0aW9uKGRlY29kZWQ6IEp3dFBheWxvYWQpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgaWYgKGlzSW1wZXJzb25hdGlvblNlc3Npb24oZGVjb2RlZCkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHNlc3Npb25SZXZvY2F0aW9uU3RhdGUoZGVjb2RlZC5qdGkpO1xuICAgIGlmIChzdGF0ZSAhPT0gJ2xpdmUnKSB7XG4gICAgICByZXR1cm4gc3RhdGUgPT09ICdyZXZva2VkJ1xuICAgICAgICA/ICdUaGlzIGltcGVyc29uYXRpb24gc2Vzc2lvbiBoYXMgYmVlbiBlbmRlZCdcbiAgICAgICAgOiAnVGhpcyBpbXBlcnNvbmF0aW9uIHNlc3Npb24gY291bGQgbm90IGJlIHZlcmlmaWVkJztcbiAgICB9XG4gIH1cbiAgaWYgKGhhc1Jldm9jYXRpb25DaGVjayhkZWNvZGVkKSAmJiBhd2FpdCBpc1Rva2VuUmV2b2tlZChkZWNvZGVkKSkge1xuICAgIHJldHVybiAnU2Vzc2lvbiBoYXMgYmVlbiByZXZva2VkOyBwbGVhc2Ugc2lnbiBpbiBhZ2Fpbic7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2NhdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvcmV2b2NhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7R0FHRztBQUVILE9BQU8sRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUF5Qy9DOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxNQUFxRTtJQUVyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2pDLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksT0FBTyxNQUFNLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRztRQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNHLElBQUksT0FBTyxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsV0FBVztRQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sR0FBRyxHQUFHLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xGLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0MsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFF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QUcsTUFBTSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDckIsT0FBTyxLQUFLLEtBQUssU0FBUztnQkFDeEIsQ0FBQyxDQUFDLDJDQUEyQztnQkFDN0MsQ0FBQyxDQUFDLGtEQUFrRCxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2pFLE9BQU8sZ0RBQWdELENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNlc3Npb24gaW52YWxpZGF0aW9uOiB0aGUgdG9rZW4tdmVyc2lvbiByZXZvY2F0aW9uIHN0b3JlIGFuZCB0aGVcbiAqIGltcGVyc29uYXRpb24tc2Vzc2lvbiBsaXZlbmVzcyBjaGVjayBgcmVxdWlyZUF1dGhgIGNvbnN1bHRzIGFmdGVyIHZlcmlmeWluZyBhIHRva2VuLlxuICovXG5cbmltcG9ydCB7IHR5cGUgSnd0UGF5bG9hZCB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2F1dGgtbWlkZGxld2FyZScpO1xuLyoqXG4gKiBBIHNvdXJjZSBvZiB0aGUgQ1VSUkVOVCBgdG9rZW5WZXJzaW9uYCBmb3IgYSB1c2VyLCBiYWNrZWQgYnkgYSBzdG9yZSB0aGVcbiAqIHN0YXRlbGVzcyBzZXJ2aWNlcyBjYW4gcmVhZCAoaW4gcHJhY3RpY2UgYSBSZWRpcyBrZXkgdGhlIHBsYXRmb3JtIHB1Ymxpc2hlc1xuICogdG8gb24gZXZlcnkgcHJpdmlsZWdlIGNoYW5nZSkuIFJlZ2lzdGVyZWQgdmlhIHtAbGluayBzZXRUb2tlblJldm9jYXRpb25TdG9yZX0uXG4gKlxuICogYGdldEN1cnJlbnRWZXJzaW9uYCByZXR1cm5zIHRoZSB1c2VyJ3MgY3VycmVudCB2ZXJzaW9uLCBvciBgbnVsbGAgd2hlbiB0aGVcbiAqIHN0b3JlIGhhcyBubyBlbnRyeSDigJQgYSBtaXNzIGlzIHRyZWF0ZWQgYXMgXCJubyBrbm93biByZXZvY2F0aW9uXCIgKGZhaWwtb3Blbik6XG4gKiByZXZvY2F0aW9uIGVudHJpZXMgYXJlIHB1Ymxpc2hlZCB3aXRoIGEgVFRMIG1hdGNoaW5nIHRoZSBhY2Nlc3MtdG9rZW5cbiAqIGxpZmV0aW1lLCBzbyBhIG1pc3NpbmcgZW50cnkgbWVhbnMgYW55IHRva2VuIG9sZCBlbm91Z2ggdG8gcHJlZGF0ZSBpdCBoYXNcbiAqIGFscmVhZHkgZXhwaXJlZCBvbiBpdHMgb3duLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmV2b2NhdGlvblN0b3JlIHtcbiAgZ2V0Q3VycmVudFZlcnNpb24odXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlciB8IG51bGw+O1xuICAvKipcbiAgICogV2hldGhlciBvbmUgSU1QRVJTT05BVElPTiBzZXNzaW9uIChieSB0b2tlbiBganRpYCkgaGFzIGJlZW4gZW5kZWQgZWFybHkuXG4gICAqXG4gICAqIE9wdGlvbmFsIHNvIGEgc3RvcmUgdGhhdCBwcmVkYXRlcyBpdCBzdGlsbCBsaW5rcyDigJQgYnV0IGEgc3RvcmUgV0lUSE9VVCBpdFxuICAgKiBjYW5ub3QgYW5zd2VyLCBhbmQgYW4gaW1wZXJzb25hdGlvbiB0b2tlbiBpcyB0aGVuIFJFSkVDVEVELiBVbmxpa2VcbiAgICogYGdldEN1cnJlbnRWZXJzaW9uYCwgdGhpcyBpcyBkZWxpYmVyYXRlbHkgbm90IGZhaWwtb3BlbjogdGhlIHBsYXRmb3JtIGVuZHMgYVxuICAgKiBzZXNzaW9uIHdoZW4gc29tZW9uZSB3aXRoZHJhd3MgY29uc2VudCwgYW5kIGEgd2l0aGRyYXduIGNvbnNlbnQgdGhhdCBrZWVwc1xuICAgKiB3b3JraW5nIGluIGV2ZXJ5IG90aGVyIHNlcnZpY2UgaXMgbm90IHdpdGhkcmF3bi5cbiAgICovXG4gIGdldFNlc3Npb25SZXZvY2F0aW9uPyhqdGk6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvblJldm9jYXRpb25TdGF0ZT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIE9ORSBjcmVkZW50aWFsIHRoZSB0b2tlbiByaWRlcyBvbiBoYXMgYmVlbiByZXZva2VkIOKAlCBpdHMgc2Vzc2lvblxuICAgKiBzbG90IChgc2lkYCkgb3IgdGhlIGFjY2VzcyBrZXkgaXQgd2FzIGV4Y2hhbmdlZCBmcm9tIC8gZGVyaXZlZCBmcm9tIChzZWVcbiAgICoge0BsaW5rIGNyZWRlbnRpYWxSZXZvY2F0aW9uUmVmc30pLiBGYWlsLW9wZW4gbGlrZSBgZ2V0Q3VycmVudFZlcnNpb25gOiBhXG4gICAqIHN0b3JlIHRoYXQgY2FuJ3QgYW5zd2VyIHJldHVybnMgYGZhbHNlYC5cbiAgICovXG4gIGlzQ3JlZGVudGlhbFJldm9rZWQ/KHJlZnM6IENyZWRlbnRpYWxSZXZvY2F0aW9uUmVmcyk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbi8qKiBUaGUgc2luZ2xlLWNyZWRlbnRpYWwgaWRzIGEgdG9rZW4gY2FuIGJlIHJldm9rZWQgYnkgKGByZXZva2U6c2lkOmAgLyBgcmV2b2tlOmtleTpgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzIHtcbiAgLyoqIFRoZSByZWZyZXNoLXNlc3Npb24gc2xvdCB0aGUgdG9rZW4gd2FzIG1pbnRlZCB3aXRoLiAqL1xuICBzaWQ/OiBzdHJpbmc7XG4gIC8qKiBBY2Nlc3Mta2V5IGlkczogdGhlIGV4Y2hhbmdlZCBrZXkncyBvd24gYGp0aWAsIGFuZCBhbnkgYHBhcmVudEtleUlkYC4gKi9cbiAga2V5SWRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgY3JlZGVudGlhbCBpZHMgYSB2ZXJpZmllZCB0b2tlbiBjYW4gYmUgcmV2b2tlZCBieS4gQW4gZXhjaGFuZ2VkIGtleSB0b2tlblxuICogKGB0b2tlbl91c2U6ICdhcGlfa2V5J2ApIGlzIG5hbWVkIGJ5IGl0cyBganRpYDsgYSB0b2tlbiBkZXJpdmVkIGZyb20gb25lXG4gKiBjYXJyaWVzIGBwYXJlbnRLZXlJZGA7IGEgc2Vzc2lvbi1taW50ZWQgdG9rZW4gY2FycmllcyBgc2lkYC4gUmV0dXJucyBgbnVsbGBcbiAqIHdoZW4gdGhlIHRva2VuIG5hbWVzIG5vbmUgb2YgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWRlbnRpYWxSZXZvY2F0aW9uUmVmcyhcbiAgY2xhaW1zOiBQaWNrPEp3dFBheWxvYWQsICdzaWQnIHwgJ3BhcmVudEtleUlkJyB8ICdqdGknIHwgJ3Rva2VuX3VzZSc+LFxuKTogQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzIHwgbnVsbCB7XG4gIGNvbnN0IGtleUlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBpZiAoY2xhaW1zLnRva2VuX3VzZSA9PT0gJ2FwaV9rZXknICYmIHR5cGVvZiBjbGFpbXMuanRpID09PSAnc3RyaW5nJyAmJiBjbGFpbXMuanRpKSBrZXlJZHMuYWRkKGNsYWltcy5qdGkpO1xuICBpZiAodHlwZW9mIGNsYWltcy5wYXJlbnRLZXlJZCA9PT0gJ3N0cmluZycgJiYgY2xhaW1zLnBhcmVudEtleUlkKSBrZXlJZHMuYWRkKGNsYWltcy5wYXJlbnRLZXlJZCk7XG4gIGNvbnN0IHNpZCA9IHR5cGVvZiBjbGFpbXMuc2lkID09PSAnc3RyaW5nJyAmJiBjbGFpbXMuc2lkID8gY2xhaW1zLnNpZCA6IHVuZGVmaW5lZDtcbiAgaWYgKCFzaWQgJiYga2V5SWRzLnNpemUgPT09IDApIHJldHVybiBudWxsO1xuICByZXR1cm4geyAuLi4oc2lkID8geyBzaWQgfSA6IHt9KSwga2V5SWRzOiBbLi4ua2V5SWRzXSB9O1xufVxuXG4vKipcbiAqIGByZXZva2VkYCAgICAg4oCUIHRoZSBzZXNzaW9uIHdhcyBlbmRlZDsgcmVqZWN0LlxuICogYGxpdmVgICAgICAgICDigJQgbm8gcmV2b2NhdGlvbiByZWNvcmRlZDsgYWxsb3cuXG4gKiBgdW5hdmFpbGFibGVgIOKAlCB0aGUgc3RvcmUgY291bGRuJ3QgYmUgcmVhZCBvciBjYW4ndCBhbnN3ZXI7IFJFSkVDVC4gRGlzdGluY3RcbiAqICAgICAgICAgICAgICAgICBmcm9tIGBsaXZlYCBwcmVjaXNlbHkgc28gYW4gb3V0YWdlIGNhbid0IHJlYWQgYXMgXCJub3QgcmV2b2tlZFwiLlxuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uUmV2b2NhdGlvblN0YXRlID0gJ3Jldm9rZWQnIHwgJ2xpdmUnIHwgJ3VuYXZhaWxhYmxlJztcblxubGV0IHRva2VuUmV2b2NhdGlvblN0b3JlOiBUb2tlblJldm9jYXRpb25TdG9yZSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZWdpc3RlciAob3IgY2xlYXIsIHdpdGggYHVuZGVmaW5lZGApIHRoZSBwcm9jZXNzLXdpZGUgdG9rZW4tcmV2b2NhdGlvbiBzdG9yZS5cbiAqIFdoZW4gdW5zZXQgKHRoZSBkZWZhdWx0KSwgYHJlcXVpcmVBdXRoYCBwZXJmb3JtcyBOTyByZXZvY2F0aW9uIGNoZWNrIChpdCByZWxpZXNcbiAqIG9uIHRoZSBzaG9ydCBhY2Nlc3MtdG9rZW4gVFRMKTsgc2VydmljZXMgb3B0IGluIGF0IGJvb3QgYnkgd2lyaW5nIHRoZWlyIFJlZGlzXG4gKiBjbGllbnQuIFBsYXRmb3JtIGtlZXBzIGl0cyBvd24gTW9uZ28tYmFja2VkIGNoZWNrIGFuZCBuZWVkIG5vdCByZWdpc3RlciBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUb2tlblJldm9jYXRpb25TdG9yZShzdG9yZTogVG9rZW5SZXZvY2F0aW9uU3RvcmUgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgdG9rZW5SZXZvY2F0aW9uU3RvcmUgPSBzdG9yZTtcbiAgaWYgKHN0b3JlKSByZXZvY2F0aW9uU3RvcmVNaXNzaW5nV2FybmVkID0gZmFsc2U7IC8vIHJlLWFybSBpZiBhIHN0b3JlIGlzIChyZSlyZWdpc3RlcmVkXG59XG5cbi8qKiBPbmUtc2hvdCBndWFyZCBzbyB0aGUgXCJyZXZvY2F0aW9uIGluYWN0aXZlXCIgd2FybmluZyBkb2Vzbid0IGZsb29kIHRoZSBsb2dzLiAqL1xubGV0IHJldm9jYXRpb25TdG9yZU1pc3NpbmdXYXJuZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBgZGVjb2RlZGAgaGFzIGJlZW4gcmV2b2tlZCBwZXIgdGhlIHJlZ2lzdGVyZWQgc3RvcmU6IGl0c1xuICogZW1iZWRkZWQgYHRva2VuVmVyc2lvbmAgaXMgc3RyaWN0bHkgYmVoaW5kIHRoZSBzdG9yZSdzIGN1cnJlbnQgdmVyc2lvbi5cbiAqIEZhaWwtb3BlbiDigJQgYW55IHN0b3JlIGVycm9yLCBhIG1pc3NpbmcgZW50cnksIG9yIGEgdG9rZW4vc3RvcmUgd2l0aG91dCBhXG4gKiB1c2FibGUgdmVyc2lvbiB5aWVsZHMgYGZhbHNlYCAoYWxsb3cpLiBOZXZlciB0aHJvd3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzVG9rZW5SZXZva2VkKGRlY29kZWQ6IEp3dFBheWxvYWQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgc3RvcmUgPSB0b2tlblJldm9jYXRpb25TdG9yZTtcbiAgaWYgKCFzdG9yZSkge1xuICAgIC8vIE1ha2UgdGhlIFwicmV2b2NhdGlvbiBpcyBPRkZcIiBzdGF0ZSBPQlNFUlZBQkxFOiBhIHNlcnZpY2UgdGhhdCB2ZXJpZmllcyB1c2VyXG4gICAgLy8gdG9rZW5zIGJ1dCBmb3Jnb3QgYHNldFRva2VuUmV2b2NhdGlvblN0b3JlKClgIHNpbGVudGx5IGRpc2FibGVzIHRoZSBzZXNzaW9uXG4gICAgLy8ga2lsbC1zd2l0Y2guIFdhcm4gT05DRSAob25seSBmb3IgYSByZXZvY2FibGUgdXNlciB0b2tlbikgc28gYSBtaXNjb25maWd1cmVkXG4gICAgLy8gYm9vdCBzdXJmYWNlcyBpbiB0aGUgbG9ncyBpbnN0ZWFkIG9mIGZhaWxpbmcgb3BlbiBpbnZpc2libHkuXG4gICAgaWYgKCFyZXZvY2F0aW9uU3RvcmVNaXNzaW5nV2FybmVkICYmIGRlY29kZWQuc3ViICYmIHR5cGVvZiBkZWNvZGVkLnRva2VuVmVyc2lvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldm9jYXRpb25TdG9yZU1pc3NpbmdXYXJuZWQgPSB0cnVlO1xuICAgICAgbG9nZ2VyLndhcm4oJ1Rva2VuIHJldm9jYXRpb24gc3RvcmUgTk9UIHJlZ2lzdGVyZWQg4oCUIHJldm9jYXRpb24gY2hlY2tzIGFyZSBJTkFDVElWRSAoc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmUgd2FzIG5ldmVyIGNhbGxlZCk7IHJldm9rZWQvY29tcHJvbWlzZWQgc2Vzc2lvbnMgc3RheSB2YWxpZCB1bnRpbCBuYXR1cmFsIFRUTCcpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHN0b3JlLmlzQ3JlZGVudGlhbFJldm9rZWQpIHtcbiAgICBjb25zdCByZWZzID0gY3JlZGVudGlhbFJldm9jYXRpb25SZWZzKGRlY29kZWQpO1xuICAgIGlmIChyZWZzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoYXdhaXQgc3RvcmUuaXNDcmVkZW50aWFsUmV2b2tlZChyZWZzKSkgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gRmFpbC1vcGVuLCBhcyBiZWxvdy5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFkZWNvZGVkLnN1YiB8fCB0eXBlb2YgZGVjb2RlZC50b2tlblZlcnNpb24gIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHN0b3JlLmdldEN1cnJlbnRWZXJzaW9uKGRlY29kZWQuc3ViKTtcbiAgICByZXR1cm4gY3VycmVudCAhPT0gbnVsbCAmJiBkZWNvZGVkLnRva2VuVmVyc2lvbiA8IGN1cnJlbnQ7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZhaWwtb3BlbjogYSByZXZvY2F0aW9uLXN0b3JlIG91dGFnZSBtdXN0IG5vdCBsb2NrIGV2ZXJ5IHVzZXIgb3V0LlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKiogV2hldGhlciB0aGUgcmVnaXN0ZXJlZCBzdG9yZSBoYXMgYW55dGhpbmcgdG8gc2F5IGFib3V0IHRoaXMgdG9rZW4uICovXG5mdW5jdGlvbiBoYXNSZXZvY2F0aW9uQ2hlY2soZGVjb2RlZDogSnd0UGF5bG9hZCk6IGJvb2xlYW4ge1xuICBjb25zdCBzdG9yZSA9IHRva2VuUmV2b2NhdGlvblN0b3JlO1xuICBpZiAoIXN0b3JlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChkZWNvZGVkLnN1YiAmJiB0eXBlb2YgZGVjb2RlZC50b2tlblZlcnNpb24gPT09ICdudW1iZXInKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICEhc3RvcmUuaXNDcmVkZW50aWFsUmV2b2tlZCAmJiBjcmVkZW50aWFsUmV2b2NhdGlvblJlZnMoZGVjb2RlZCkgIT09IG51bGw7XG59XG5cbi8qKiBNZXRob2RzIGEgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gdG9rZW4gbWF5IHVzZS4gKi9cbmNvbnN0IElNUEVSU09OQVRJT05fUkVBRF9NRVRIT0RTID0gbmV3IFNldChbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnXSk7XG5cbi8qKlxuICogV2hldGhlciBhIHJlcXVlc3QgaXMgYSBXUklURSB1bmRlciBhIHJlYWQtb25seSBpbXBlcnNvbmF0aW9uIHRva2VuLiBGYWlsLWNsb3NlZFxuICogb24gYSBtaXNzaW5nIG1ldGhvZDogb25seSBhIHJlcXVlc3QgcG9zaXRpdmVseSBrbm93biB0byBiZSBhIHJlYWQgcGFzc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbXBlcnNvbmF0aW9uV3JpdGVCbG9ja2VkKFxuICBtZXRob2Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY2xhaW1zOiBQaWNrPEp3dFBheWxvYWQsICdpbXBlcnNvbmF0aW9uUmVhZE9ubHknPixcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xhaW1zLmltcGVyc29uYXRpb25SZWFkT25seSA9PT0gdHJ1ZSAmJiAhSU1QRVJTT05BVElPTl9SRUFEX01FVEhPRFMuaGFzKChtZXRob2QgPz8gJycpLnRvVXBwZXJDYXNlKCkpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gaW1wZXJzb25hdGlvbiBzZXNzaW9uJ3MgcmV2b2NhdGlvbiBzdGF0ZS4gTmV2ZXIgdGhyb3dzOiBhbnkgZmFpbHVyZVxuICog4oCUIG5vIHN0b3JlLCBhIHN0b3JlIHRoYXQgY2FuJ3QgYW5zd2VyLCBhIHJlYWQgZXJyb3Ig4oCUIGlzIGB1bmF2YWlsYWJsZWAsIHdoaWNoXG4gKiBjYWxsZXJzIHRyZWF0IGFzIHJldm9rZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlc3Npb25SZXZvY2F0aW9uU3RhdGUoanRpOiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb25SZXZvY2F0aW9uU3RhdGU+IHtcbiAgY29uc3Qgc3RvcmUgPSB0b2tlblJldm9jYXRpb25TdG9yZTtcbiAgaWYgKCFzdG9yZT8uZ2V0U2Vzc2lvblJldm9jYXRpb24pIHJldHVybiAndW5hdmFpbGFibGUnO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzdG9yZS5nZXRTZXNzaW9uUmV2b2NhdGlvbihqdGkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgfVxufVxuXG4vKiogQW4gaW1wZXJzb25hdGlvbiBzZXNzaW9uIHRva2VuOiBpdCBuYW1lcyB0aGUgb3BlcmF0b3IgQU5EIGNhcnJpZXMgaXRzIG93biBzZXNzaW9uIGlkLiAqL1xuZnVuY3Rpb24gaXNJbXBlcnNvbmF0aW9uU2Vzc2lvbihkZWNvZGVkOiB7IGltcGVyc29uYXRvcklkPzogdW5rbm93bjsganRpPzogdW5rbm93biB9KTogZGVjb2RlZCBpcyB7IGltcGVyc29uYXRvcklkOiBzdHJpbmc7IGp0aTogc3RyaW5nIH0ge1xuICByZXR1cm4gdHlwZW9mIGRlY29kZWQuaW1wZXJzb25hdG9ySWQgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBkZWNvZGVkLmp0aSA9PT0gJ3N0cmluZycgJiYgZGVjb2RlZC5qdGkubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBQdWJsaWMgcmV2b2NhdGlvbiBjaGVjayBmb3Igcm91dGVzIHRoYXQgdmVyaWZ5IGEgcGxhdGZvcm0gSldUIE9VVFNJREVcbiAqIGByZXF1aXJlQXV0aGAgKGUuZy4gdGhlIGltYWdlLXJlZ2lzdHJ5IGAvdG9rZW5gIG1pbnQgcGF0aCwgd2hpY2ggcmVzb2x2ZXNcbiAqIGlkZW50aXR5IGl0c2VsZikuIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0b2tlbidzIGB0b2tlblZlcnNpb25gIGlzIHN0cmljdGx5XG4gKiBiZWhpbmQgdGhlIHN0b3JlJ3MgY3VycmVudCB2ZXJzaW9uLiBGYWlsLW9wZW4gKG5ldmVyIHRocm93cykg4oCUIGEgc3RvcmUgb3V0YWdlXG4gKiBvciBhIHRva2VuL3N0b3JlIHdpdGhvdXQgYSB1c2FibGUgdmVyc2lvbiB5aWVsZHMgZmFsc2UgKGFsbG93KSwgbWF0Y2hpbmdcbiAqIGByZXF1aXJlQXV0aGAuIFBhc3MgdGhlIHZlcmlmaWVkIEpXVCBjbGFpbXMgKGBzdWJgLCBgdG9rZW5WZXJzaW9uYCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0FjY2Vzc1Rva2VuUmV2b2tlZChcbiAgY2xhaW1zOiB7XG4gICAgc3ViPzogc3RyaW5nO1xuICAgIHRva2VuVmVyc2lvbj86IG51bWJlcjtcbiAgICBqdGk/OiBzdHJpbmc7XG4gICAgaW1wZXJzb25hdG9ySWQ/OiBzdHJpbmc7XG4gICAgc2lkPzogc3RyaW5nO1xuICAgIHBhcmVudEtleUlkPzogc3RyaW5nO1xuICAgIHRva2VuX3VzZT86IEp3dFBheWxvYWRbJ3Rva2VuX3VzZSddO1xuICB9LFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vIEFuIGltcGVyc29uYXRpb24gc2Vzc2lvbiBpcyByZXZva2VkIHVubGVzcyB0aGUgc3RvcmUgcG9zaXRpdmVseSBzYXlzIGxpdmUg4oCUXG4gIC8vIGluY2x1ZGluZyBvbiB0aGlzIG91dC1vZi1iYW5kIHBhdGgsIG9yIGEgcmV2b2tlZCBzZXNzaW9uIGNvdWxkIHN0aWxsIG1pbnRcbiAgLy8gcmVnaXN0cnkgdG9rZW5zLlxuICBpZiAoaXNJbXBlcnNvbmF0aW9uU2Vzc2lvbihjbGFpbXMpICYmIGF3YWl0IHNlc3Npb25SZXZvY2F0aW9uU3RhdGUoY2xhaW1zLmp0aSkgIT09ICdsaXZlJykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBpc1Rva2VuUmV2b2tlZChjbGFpbXMgYXMgdW5rbm93biBhcyBKd3RQYXlsb2FkKTtcbn1cblxuXG4vKiogV2hldGhlciBgcmVxdWlyZUF1dGhgIG11c3QgY29uc3VsdCB0aGUgcmV2b2NhdGlvbiBzdG9yZXMgZm9yIHRoaXMgdG9rZW4uICovXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNSZXZvY2F0aW9uQ2hlY2soZGVjb2RlZDogSnd0UGF5bG9hZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNJbXBlcnNvbmF0aW9uU2Vzc2lvbihkZWNvZGVkKSB8fCBoYXNSZXZvY2F0aW9uQ2hlY2soZGVjb2RlZCk7XG59XG5cbi8qKlxuICogVGhlIHBvc3QtdmVyaWZpY2F0aW9uIHNlc3Npb24taW52YWxpZGF0aW9uIGNoZWNrLiBSZXR1cm5zIHRoZSByZWZ1c2FsXG4gKiBtZXNzYWdlLCBvciBgbnVsbGAgd2hlbiB0aGUgc2Vzc2lvbiBpcyBsaXZlLiBBbiBpbXBlcnNvbmF0aW9uIHNlc3Npb24gaXNcbiAqIGNoZWNrZWQgZXZlbiB3aGVuIE5PIHN0b3JlIGlzIHJlZ2lzdGVyZWQ6IHRoZXJlLCBubyBzdG9yZSDih5IgdW5hdmFpbGFibGUg4oeSXG4gKiByZWZ1c2VkIChzZWUgYFRva2VuUmV2b2NhdGlvblN0b3JlLmdldFNlc3Npb25SZXZvY2F0aW9uYCk7IHRoZSB0b2tlblZlcnNpb25cbiAqIGNoZWNrIGlzIGEgbm8tb3Agd2l0aG91dCBhIHN0b3JlIGFuZCBmYWlscyBvcGVuIG9uIGEgc3RvcmUgZXJyb3IuIE5ldmVyIHJlamVjdHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1Jldm9jYXRpb24oZGVjb2RlZDogSnd0UGF5bG9hZCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBpZiAoaXNJbXBlcnNvbmF0aW9uU2Vzc2lvbihkZWNvZGVkKSkge1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgc2Vzc2lvblJldm9jYXRpb25TdGF0ZShkZWNvZGVkLmp0aSk7XG4gICAgaWYgKHN0YXRlICE9PSAnbGl2ZScpIHtcbiAgICAgIHJldHVybiBzdGF0ZSA9PT0gJ3Jldm9rZWQnXG4gICAgICAgID8gJ1RoaXMgaW1wZXJzb25hdGlvbiBzZXNzaW9uIGhhcyBiZWVuIGVuZGVkJ1xuICAgICAgICA6ICdUaGlzIGltcGVyc29uYXRpb24gc2Vzc2lvbiBjb3VsZCBub3QgYmUgdmVyaWZpZWQnO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzUmV2b2NhdGlvbkNoZWNrKGRlY29kZWQpICYmIGF3YWl0IGlzVG9rZW5SZXZva2VkKGRlY29kZWQpKSB7XG4gICAgcmV0dXJuICdTZXNzaW9uIGhhcyBiZWVuIHJldm9rZWQ7IHBsZWFzZSBzaWduIGluIGFnYWluJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
|
|
@@ -231,6 +231,21 @@ function toEntry(method, path, gates) {
|
|
|
231
231
|
quota.checked.push(g.quotaType);
|
|
232
232
|
break;
|
|
233
233
|
}
|
|
234
|
+
// A GATE KIND THAT REACHES HERE WOULD BE INVISIBLE, which is the one
|
|
235
|
+
// failure this table cannot afford. `docs/permission-catalog` and the
|
|
236
|
+
// permission contract are both DERIVED from these entries, so a kind
|
|
237
|
+
// nothing projects leaves the route's cell blank — and the contract's
|
|
238
|
+
// "a weakening fails HERE" test then passes over a route whose real
|
|
239
|
+
// requirement it never saw. That is exactly what the dynamicAuthz note
|
|
240
|
+
// above records paying for once: gates that were correct but invisible.
|
|
241
|
+
//
|
|
242
|
+
// So this is a compile error, not a runtime one: adding a member to
|
|
243
|
+
// `RouteGate` fails the build until someone decides how it appears in the
|
|
244
|
+
// table. The throw is unreachable except through a cast.
|
|
245
|
+
default: {
|
|
246
|
+
const _exhaustive = g;
|
|
247
|
+
throw new Error(`Unprojected route gate kind: ${JSON.stringify(_exhaustive)}`);
|
|
248
|
+
}
|
|
234
249
|
}
|
|
235
250
|
}
|
|
236
251
|
// An exempt route's apiCalls meter + check skip it at runtime, so the table
|
|
@@ -309,4 +324,4 @@ export function summarizeRouteTable(table) {
|
|
|
309
324
|
internal: table.filter((e) => e.internalCallers.length > 0).length,
|
|
310
325
|
};
|
|
311
326
|
}
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9yb3V0ZS10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBYzlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUztDQUNwRixDQUFDO0FBOERYLHNFQUFzRTtBQUN0RSxpRUFBaUU7QUFDakUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUM3RCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUl6RTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQW1CLEVBQUssRUFBRSxHQUFHLEtBQWtCO0lBQ3pFLE1BQU0sQ0FBQyxHQUFHLEVBQWdCLENBQUM7SUFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJ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LGdCQUFnQixJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1SSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDNUQsT0FBTztRQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUM5QyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUM1RCxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtLQUNuRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEludHJvc3BlY3RhYmxlIHJvdXRlIHRhYmxlLlxuICpcbiAqIEF1dGhvcml6YXRpb24gaXMgc3BsaXQgYmV0d2VlbiByb3V0ZXIgbW91bnRzIChgYXBwLnVzZSgnL3gnLCBnYXRlLCByb3V0ZXIpYClcbiAqIGFuZCBpbmRpdmlkdWFsIHJvdXRlcywgc28gZ3JlcHBpbmcgc291cmNlIGNhbid0IHByb3ZlIHRoYXQgZXZlcnkgcm91dGUgaXNcbiAqIGdhdGVkLiBJbnN0ZWFkLCBldmVyeSBnYXRlIG1pZGRsZXdhcmUgaW4gdGhpcyBwYWNrYWdlIGNhcnJpZXMgTUVUQURBVEEgKHdoYXQgaXRcbiAqIHJlcXVpcmVzKSwgYW5kIHtAbGluayBidWlsZFJvdXRlVGFibGV9IHdhbGtzIGFuIGFzc2VtYmxlZCBFeHByZXNzIGFwcCBhbmRcbiAqIHJlc29sdmVzLCBwZXIgbWV0aG9kICsgcGF0aCwgdGhlIGZ1bGwgY2hhaW4gb2YgZ2F0ZXMgRXhwcmVzcyB3b3VsZCBydW4gYmVmb3JlXG4gKiB0aGUgaGFuZGxlcjogcGVybWlzc2lvbnMsIHN5c3RlbS1hZG1pbiwgc2VydmljZSBwcmluY2lwYWwsIHN0ZXAtdXAsIGZlYXR1cmUsXG4gKiB0b2tlbiBzY29wZSwgYW5kIHRoZSBhdWRpdCBhY3Rpb25zIHRoZSByb3V0ZSBkZWNsYXJlcyB2aWEge0BsaW5rIGF1ZGl0ZWR9LlxuICpcbiAqIEV4cHJlc3MgNSAocm91dGVyQDIpIGRvZXMgbm90IGtlZXAgYSBtb3VudCdzIHBhdGggc3RyaW5nIG9uIGl0cyBsYXllciwgc28gdGhpc1xuICogbW9kdWxlIHJlY29yZHMgaXQ6IG9uIGltcG9ydCBpdCB3cmFwcyBgUm91dGVyLnByb3RvdHlwZS51c2VgIHRvIHN0YW1wIGVhY2ggbmV3XG4gKiBsYXllciB3aXRoIHRoZSBwYXRoIGl0IHdhcyBtb3VudGVkIGF0LiBhcGktY29yZSBpcyBpbXBvcnRlZCBiZWZvcmUgYW55IHJvdXRlXG4gKiBtb2R1bGUgcmVnaXN0ZXJzIGEgcm91dGUsIHNvIGV2ZXJ5IGxheWVyIGFuIGFwcCBidWlsZHMgaXMgc3RhbXBlZC4gVGhlIHdyYXBcbiAqIG9ubHkgYWRkcyBhIHN5bWJvbCBwcm9wZXJ0eTsgcm91dGluZyBiZWhhdmlvdXIgaXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgaXNRdW90YUV4ZW1wdFJvdXRlIH0gZnJvbSAnLi9xdW90YS1leGVtcHQtcm91dGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL3R5cGVzL3Blcm1pc3Npb25zLmpzJztcblxuLyoqXG4gKiBXaGF0IGEgTUFDSElORSBjcmVkZW50aWFsIChQQVQsIHNlcnZpY2UgYWNjb3VudCkgbWVldHMgb24gYSByb3V0ZSBnYXRlZCBieVxuICogYHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZWAgd2hpbGUgdGhlIG9yZydzIGFkbWluLU1GQSBwb2xpY3kgaXMgb246XG4gKiAgIC0gYGFsbG93YCAg4oCUIHRoZSByb3V0ZSBpcyBsZWdpdGltYXRlbHkgbWFjaGluZS1jYWxsYWJsZSAoYXV0b21hdGlvbiB0aGF0XG4gKiAgICAgICAgICAgICAgICBtYW5hZ2VzIG1lbWJlcnMsIHJvbGVzLCBiaWxsaW5n4oCmKTsgdGhlIHBvbGljeSBpcyBhYm91dCBob3dcbiAqICAgICAgICAgICAgICAgIHN0cm9uZ2x5IGEgUEVSU09OJ3Mgc2Vzc2lvbiB3YXMgb3BlbmVkLCBzbyBpdCBkb2VzIG5vdCBhcHBseTtcbiAqICAgLSBgcmVmdXNlYCDigJQgb25seSBhIHBlcnNvbiBtYXkgZG8gdGhpcyB3aGlsZSB0aGUgcG9saWN5IGlzIG9uICg0MDNcbiAqICAgICAgICAgICAgICAgIGBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEYCksIGUuZy4gbWludGluZyBhbm90aGVyIGNyZWRlbnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIE9yZ0FkbWluQXNzdXJhbmNlTWFjaGluZXMgPSAnYWxsb3cnIHwgJ3JlZnVzZSc7XG5cbi8qKlxuICogVGhlIENMT1NFRCBzZXQgb2YgcHJpbmNpcGFsIGtpbmRzIGEgYGR5bmFtaWNBdXRoemAgcnVsZSBtYXkgYWRtaXQuXG4gKlxuICogQSByb3V0ZSB3aG9zZSBhdXRob3JpdHkgaXMgcmVzb2x2ZWQgaW4gdGhlIGhhbmRsZXIgc3RpbGwgaGFzIHRvIHNheSBXSE8gY2FuXG4gKiBnZXQgdGhyb3VnaCBpdC4gVGhlc2UgYXJlIHRoZSBraW5kcywgZGVsaWJlcmF0ZWx5IGNvYXJzZSDigJQgdGhlIHByZWNpc2VcbiAqIHByZWRpY2F0ZSBsaXZlcyBpbiB0aGUgcHJvc2UgcnVsZSBhbmQgaW4gdGhlIGNvZGU6XG4gKlxuICogIC0gYHN1cGVyYWRtaW5gICAgIOKAlCB0aGUgYFVzZXIuaXNTdXBlckFkbWluYCBmbGFnIChgaXNTeXN0ZW1BZG1pbihyZXEpYCkuXG4gKiAgLSBgc3lzdGVtLW9yZ2AgICAg4oCUIGEgbWVtYmVyIG9mIHRoZSBzeXN0ZW0gb3JnIGhvbGRpbmcgYSBuYW1lZCBwZXJtaXNzaW9uO1xuICogICAgICAgICAgICAgICAgICAgICAgbGlzdCB0aGUgaWRzIGluIGBwZXJtaXNzaW9uc2Agc28gdGhlIGNvdmVyYWdlIHNjYW4gYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udHJhY3QgY2FuIHNlZSB0aGVtLlxuICogIC0gYHRlbmFudC1hZG1pbmAgIOKAlCBhbiBhZG1pbiBvciBvd25lciBvZiB0aGUgdGFyZ2V0J3Mgb3duIG9yZywgb3Igb2YgYW5cbiAqICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yIG9mIGl0LiBOT1QgYSBzdXBlcmFkbWluIGJ5IHZpcnR1ZSBvZiB0aGUgZmxhZzpcbiAqICAgICAgICAgICAgICAgICAgICAgIHNldmVyYWwgb2YgdGhlc2UgcnVsZXMgcmVmdXNlIHRoZSBmbGFnIG9uIHB1cnBvc2UuXG4gKiAgLSBgdGVuYW50LW1lbWJlcmAg4oCUIGFueSBtZW1iZXIgb2YgdGhlIHRhcmdldCdzIG9yZywgYWRtaW4gb3Igbm90LlxuICogIC0gYHN1YmplY3RgICAgICAgIOKAlCB0aGUgdmVyeSB1c2VyIHRoZSByZXF1ZXN0IGlzIGFib3V0IChzZWxmLXNlcnZpY2UpLlxuICogIC0gYHNlcnZpY2VgICAgICAgIOKAlCBhIHNlcnZpY2UgcHJpbmNpcGFsIC8gaW50ZXJuYWwgY2FsbGVyLlxuICogIC0gYGdhdGV3YXlgICAgICAgIOKAlCB0aGUgaW5ncmVzcyBpdHNlbGYgc3VwcGxpZXMgdGhlIGZhY3QgKHRoZSBjb25zb2xlXG4gKiAgICAgICAgICAgICAgICAgICAgICBgYXV0aF9yZXF1ZXN0YCBwYXNzZXMgdGhlIGNvbnNvbGUgY2xhc3MgaW4gYSBoZWFkZXIpLlxuICovXG5leHBvcnQgY29uc3QgRFlOQU1JQ19QUklOQ0lQQUxTID0gW1xuICAnc3VwZXJhZG1pbicsICdzeXN0ZW0tb3JnJywgJ3RlbmFudC1hZG1pbicsICd0ZW5hbnQtbWVtYmVyJywgJ3N1YmplY3QnLCAnc2VydmljZScsICdnYXRld2F5Jyxcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBEeW5hbWljUHJpbmNpcGFsID0gdHlwZW9mIERZTkFNSUNfUFJJTkNJUEFMU1tudW1iZXJdO1xuXG4vKiogT25lIHJlcXVpcmVtZW50IGEgZ2F0ZSBtaWRkbGV3YXJlIGVuZm9yY2VzLiAqL1xuZXhwb3J0IHR5cGUgUm91dGVHYXRlID1cbiAgfCB7IGtpbmQ6ICdhdXRoJyB9XG4gIHwgeyBraW5kOiAncGVybWlzc2lvbic7IG1vZGU6ICdhbnknIHwgJ2FsbCc7IHBlcm1pc3Npb25zOiByZWFkb25seSBQZXJtaXNzaW9uW107IGFsbG93U2VydmljZT86IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ3N5c3RlbUFkbWluJyB9XG4gIC8qKlxuICAgKiBBdXRob3JpemF0aW9uIHRoZSByb3V0ZSBDQU5OT1QgZXhwcmVzcyBzdGF0aWNhbGx5LCByZXNvbHZlZCBpbiB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogU29tZSBhdXRob3JpdHkgZGVwZW5kcyBvbiB0aGUgcmVxdWVzdDogaW1wZXJzb25hdGlvbiBhc2tzIHdoZXRoZXIgdGhlIGNhbGxlclxuICAgKiBpcyBhIHN5c2FkbWluIE9SIGFuIGFkbWluIG9mIGFuIGFuY2VzdG9yIG9mIHRoZSBUQVJHRVQgdXNlcidzIG9yZywgd2hpY2ggaXNcbiAgICogb25seSBhbnN3ZXJhYmxlIG9uY2UgdGhlIHRhcmdldCBpcyBrbm93bi4gVGhvc2UgZ2F0ZXMgd2VyZSBjb3JyZWN0IGJ1dFxuICAgKiBpbnZpc2libGUg4oCUIHRoZSByb3V0ZSB0YWJsZSBzaG93ZWQgbm8gcmVxdWlyZW1lbnQsIGFuZFxuICAgKiBgZG9jcy9wZXJtaXNzaW9uLWNvbnRyYWN0Lm1kYCBpcyBkZXJpdmVkIGZyb20gdGhlIHRhYmxlLCBzbyB0aGUgYXJ0aWZhY3QgdGhlXG4gICAqIHJlcG8gY2FsbHMgaXRzIHJldmlldyBzdXJmYWNlIHJlYWQgYmxhbmsgZm9yIHRoZSBzdHJvbmdlc3QgcHJpdmlsZWdlIGluIHRoZVxuICAgKiBzeXN0ZW0uXG4gICAqXG4gICAqIFRoaXMgcmVjb3JkcyB0aGUgcmVxdWlyZW1lbnQgaW4gcHJvc2UgQU5EIGFzIGEgY2xvc2VkIHNldCBvZiBwcmluY2lwYWxcbiAgICoga2luZHMuIEl0IGF1dGhvcml6ZXMgTk9USElORzsgdGhlIGhhbmRsZXIgc3RpbGwgZG9lcyB0aGUgd29yay4gSXRzIHZhbHVlIGlzXG4gICAqIHRoYXQgYSByZXZpZXdlciByZWFkaW5nIHRoZSBjb250cmFjdCBzZWVzIGEgc3RhdGVkIHJ1bGUgaW5zdGVhZCBvZiBhbiBlbXB0eVxuICAgKiBjZWxsLCBhbmQgdGhhdCByZW1vdmluZyB0aGUgcmVhbCBjaGVjayBsZWF2ZXMgYSBkZWNsYXJhdGlvbiBiZWhpbmQgdGhhdCBub1xuICAgKiBsb25nZXIgbWF0Y2hlcy5cbiAgICpcbiAgICogV0hZIGByZWFjaGFibGVCeWAgRVhJU1RTIEJFU0lERSBUSEUgUFJPU0UuIFByb3NlIGlzIHVucmV2aWV3YWJsZSBieSBhIHRlc3QsXG4gICAqIGFuZCBvbmUgb2YgdGhlc2UgcnVsZXMgd2FzIHdyb25nOiB0aGUgaW1wZXJzb25hdGlvbiBgZGVjaWRlYCByb3V0ZSBkZWNsYXJlZFxuICAgKiBcImEgRElGRkVSRU5UIHN5c2FkbWluIHRoYW4gdGhlIHJlcXVlc3RlciAodHdvLXBlcnNvbiBydWxlKVwiLCB3aGljaCBpcyBvbmx5XG4gICAqIGl0cyBicmVhay1nbGFzcyBicmFuY2gg4oCUIHRoZSBvcmRpbmFyeSBicmFuY2ggaXMgdGhlIHRlbmFudCdzIG5hbWVkIGFwcHJvdmVyXG4gICAqIG9yIGEgZ2VudWluZSB0ZW5hbnQgYWRtaW4sIGFuZCBhIHN5c2FkbWluIGFsb25lIGlzIGV4cGxpY2l0bHkgUkVGVVNFRCB0aGVyZS5cbiAgICogTm90aGluZyBjb3VsZCBub3RpY2UsIGJlY2F1c2UgdGhlIG9ubHkgbWFjaGluZS1yZWFkYWJsZSBmaWVsZHMgc2FpZFxuICAgKiBgc3lzdGVtQWRtaW46IGZhbHNlLCBwZXJtaXNzaW9uczogW11gLiBBIGNsb3NlZCBzZXQgbWFrZXMgdGhlIGF1dGhvclxuICAgKiBlbnVtZXJhdGUgcHJpbmNpcGFscywgbGV0cyB0aGUgY292ZXJhZ2Ugc2NhbiBhc3NlcnQgdGhlIGRlY2xhcmF0aW9uIGV4aXN0cyxcbiAgICogYW5kIGxldHMgXCJ3aGljaCByb3V0ZXMgY2FuIHRoZSBzdXBlcmFkbWluIGZsYWcgcmVhY2g/XCIgYmUgYW5zd2VyZWQgYnkgYVxuICAgKiBxdWVyeSBpbnN0ZWFkIG9mIGJ5IHJlYWRpbmcgc2l4IHBhcmFncmFwaHMuXG4gICAqL1xuICB8IHsga2luZDogJ2R5bmFtaWNBdXRoeic7IHJ1bGU6IHN0cmluZzsgcmVhY2hhYmxlQnk6IHJlYWRvbmx5IER5bmFtaWNQcmluY2lwYWxbXTsgcGVybWlzc2lvbnM/OiByZWFkb25seSBQZXJtaXNzaW9uW10gfVxuICB8IHsga2luZDogJ3NlcnZpY2VQcmluY2lwYWwnIH1cbiAgLyoqIEFuIElOVEVSTkFMIHJvdXRlOiB1c2VyIHRva2VucyByZWZ1c2VkIG91dHJpZ2h0LCBvbmx5IHRoZXNlIHNlcnZpY2VzIGFkbWl0dGVkLiAqL1xuICB8IHsga2luZDogJ2ludGVybmFsU2VydmljZSc7IGNhbGxlcnM6IHJlYWRvbmx5IHN0cmluZ1tdIH1cbiAgfCB7IGtpbmQ6ICdzdGVwVXAnOyBtZXRob2RzPzogcmVhZG9ubHkgc3RyaW5nW10gfVxuICAvKiogVGhlIHdob2xlIFNFU1NJT04gbXVzdCBiZSBNRkEtZ3JhZGUgKGByZXF1aXJlQXV0aCh7IG1pbkFzc3VyYW5jZSB9KWApLCBhbmRcbiAgICogIG9wdGlvbmFsbHkgbm8gb2xkZXIgdGhhbiBgbWF4QWdlYCBzZWNvbmRzLiBgZXhlbXB0YCBuYW1lcyBhIGNhcnZlLW91dCB0aGVcbiAgICogIGdhdGUgYXBwbGllcyB0byBhIG5hcnJvdyBjbGFzcyBvZiByZXF1ZXN0IChzZWUgYEFzc3VyYW5jZU9wdGlvbnMuZXhlbXB0YCksXG4gICAqICBzbyBhIHJvdXRlIHdob3NlIGxldmVsIGlzIGNvbmRpdGlvbmFsIHNheXMgc28gb24gdGhlIHRhYmxlLiAqL1xuICB8IHsga2luZDogJ2Fzc3VyYW5jZSc7IG1pbkFzc3VyYW5jZTogMSB8IDI7IG1heEFnZT86IG51bWJlcjsgZXhlbXB0Pzogc3RyaW5nIH1cbiAgLyoqIFRoZSBzZXNzaW9uIG11c3QgYmUgTUZBLWdyYWRlIFdIRU4gdGhlIG9yZydzIGBhZG1pbkFjdGlvbnNSZXF1aXJlTWZhYFxuICAgKiAgcG9saWN5IGlzIG9uIChgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlYCkuIGBtYWNoaW5lc2Agc2F5cyB3aGF0IGEgbWFjaGluZVxuICAgKiAgY3JlZGVudGlhbCBtZWV0cyBvbiB0aGUgcm91dGUgd2hpbGUgdGhlIHBvbGljeSBpcyBvbi4gKi9cbiAgfCB7IGtpbmQ6ICdvcmdBZG1pbkFzc3VyYW5jZSc7IG1hY2hpbmVzOiBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzIH1cbiAgLyoqIFRoZSBjYWxsZXIncyBBQ1RJVkUgb3JnIG11c3QgYmUgdGhlIHN5c3RlbSBvcmcgKGByZXF1aXJlU3lzdGVtT3JnYCkg4oCUIHRoZVxuICAgKiAgcGx1Z2luLWVjb3N5c3RlbSBnb3Zlcm5hbmNlIGJvdW5kYXJ5IChkb2NzL3J1bmJvb2tzL2Vjb3N5c3RlbS1tb2RlcmF0aW9uLm1kKS4gKi9cbiAgfCB7IGtpbmQ6ICdzeXN0ZW1PcmcnIH1cbiAgfCB7IGtpbmQ6ICdmZWF0dXJlJzsgZmVhdHVyZTogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdzY29wZSc7IHNjb3BlOiBzdHJpbmcgfVxuICB8IHsga2luZDogJ2F1ZGl0JzsgYWN0aW9uczogcmVhZG9ubHkgc3RyaW5nW10gfVxuICAvKiogQSBxdW90YSBtaWRkbGV3YXJlOiBgbWV0ZXJgIGluY3JlbWVudHMgdGhlIHR5cGUgb25jZSBwZXIgMnh4XG4gICAqICAoYG1ldGVyUXVvdGFPblN1Y2Nlc3NgKSwgYGNoZWNrYCA0MjlzIHdoZW4gdGhlIHR5cGUgaXMgc3BlbnQgKGBjaGVja1F1b3RhYCkuXG4gICAqICBSZWNvcmRlZCBzbyB0aGUgcXVvdGEgY292ZXJhZ2UgY2hlY2sgY2FuIHNlZSBhbiB1bm1ldGVyZWQgdXNlciByb3V0ZSDigJQgYW5kIGFcbiAgICogIHJvdXRlIG1ldGVyZWQgVFdJQ0UsIHdoaWNoIGRvdWJsZS1iaWxscyBldmVyeSBjYWxsLiAqL1xuICB8IHsga2luZDogJ3F1b3RhJzsgbW9kZTogJ21ldGVyJyB8ICdjaGVjayc7IHF1b3RhVHlwZTogc3RyaW5nIH07XG5cbi8vIFN5bWJvbC5mb3IsIG5vdCBTeW1ib2woKTogYSB0ZXN0IHRoYXQgbG9hZHMgYXBpLWNvcmUgdHdpY2UgKEVTTSArIGFcbi8vIHJlcXVpcmVBY3R1YWwgY29weSkgbXVzdCBzdGlsbCBzZWUgdGFncyBzZXQgYnkgdGhlIG90aGVyIGNvcHkuXG5jb25zdCBHQVRFUyA9IFN5bWJvbC5mb3IoJ3BpcGVsaW5lLWJ1aWxkZXIucm91dGUtZ2F0ZXMnKTtcbmNvbnN0IExBWUVSX1BBVEggPSBTeW1ib2wuZm9yKCdwaXBlbGluZS1idWlsZGVyLmxheWVyLXBhdGgnKTtcbmNvbnN0IFJFQ09SREVSX0lOU1RBTExFRCA9IFN5bWJvbC5mb3IoJ3BpcGVsaW5lLWJ1aWxkZXIucm91dGUtcmVjb3JkZXInKTtcblxudHlwZSBUYWdnZWQgPSB7IFtHQVRFU10/OiBSb3V0ZUdhdGVbXSB9O1xuXG4vKipcbiAqIEF0dGFjaCBnYXRlIG1ldGFkYXRhIHRvIGEgbWlkZGxld2FyZSBmdW5jdGlvbiAoYXBwZW5kcyB0byBhbnkgZXhpc3RpbmcgdGFncylcbiAqIGFuZCByZXR1cm4gdGhlIHNhbWUgZnVuY3Rpb24uIFVzZSBpdCBmb3IgYSBzZXJ2aWNlLWxvY2FsIGdhdGUgc28gdGhlIHJvdXRlXG4gKiB0YWJsZSBrbm93cyB3aGF0IGl0IGVuZm9yY2VzIOKAlCBlLmcuIGEgaGFuZGxlci1sZXZlbCBgcmVxdWlyZUNvbXBsaWFuY2VXcml0ZWBcbiAqIHRhZ2dlZCBgeyBraW5kOiAncGVybWlzc2lvbicsIG1vZGU6ICdhbnknLCBwZXJtaXNzaW9uczogWydjb21wbGlhbmNlOndyaXRlJ10gfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWdSb3V0ZUdhdGU8VCBleHRlbmRzIG9iamVjdD4oZm46IFQsIC4uLmdhdGVzOiBSb3V0ZUdhdGVbXSk6IFQge1xuICBjb25zdCB0ID0gZm4gYXMgVCAmIFRhZ2dlZDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIEdBVEVTLCB7IHZhbHVlOiBbLi4uKHRbR0FURVNdID8/IFtdKSwgLi4uZ2F0ZXNdLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgcmV0dXJuIGZuO1xufVxuXG4vKiogVGhlIGdhdGUgbWV0YWRhdGEgYXR0YWNoZWQgdG8gYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIChlbXB0eSB3aGVuIHVudGFnZ2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZUdhdGVzKGZuOiB1bmtub3duKTogcmVhZG9ubHkgUm91dGVHYXRlW10ge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gW107XG4gIHJldHVybiAoZm4gYXMgVGFnZ2VkKVtHQVRFU10gPz8gW107XG59XG5cbi8qKlxuICogRGVjbGFyZSB0aGUgYXVkaXQgYWN0aW9uKHMpIGEgcm91dGUgZW1pdHMuIEEgbm8tb3AgbWlkZGxld2FyZSB3aG9zZSBvbmx5IGpvYlxuICogaXMgdG8gcHV0IHRoZSBhY3Rpb24gb24gdGhlIHJvdXRlIHRhYmxlLCBzbyB0aGUgY292ZXJhZ2UgdGVzdCBjYW4gcmVxdWlyZSBhblxuICogYXVkaXQgZGVjbGFyYXRpb24gb24gZXZlcnkgd3JpdGUgcm91dGUuIFBsYWNlIGl0IGluIHRoZSByb3V0ZSdzIGNoYWluOlxuICogYHJvdXRlci5wb3N0KCcvJywgYXVkaXRlZCgncGlwZWxpbmUuY3JlYXRlJyksIGhhbmRsZXIpYC4gVGhlIGhhbmRsZXIgc3RpbGxcbiAqIGVtaXRzIHRoZSBldmVudCBpdHNlbGYuXG4gKi9cbi8qKlxuICogRGVjbGFyZSBhdXRob3JpemF0aW9uIHRoYXQgdGhlIGhhbmRsZXIgcmVzb2x2ZXMgKHNlZSB0aGUgYGR5bmFtaWNBdXRoemAgZ2F0ZSkuXG4gKiBBIG5vLW9wIG1pZGRsZXdhcmUsIGV4YWN0bHkgbGlrZSB7QGxpbmsgYXVkaXRlZH06IGl0IHJlY29yZHMgdGhlIHJ1bGUgb24gdGhlXG4gKiByb3V0ZSB0YWJsZSBzbyB0aGUgY29udHJhY3QgY2FuIHByaW50IGl0LlxuICpcbiAqIGBydWxlYCBpcyByZWFkIGJ5IGEgaHVtYW4sIHNvIGl0IHNob3VsZCBuYW1lIHRoZSByZWFsIHByZWRpY2F0ZSDigJQgZS5nLlxuICogYCdzeXNhZG1pbiwgb3IgYW4gYWRtaW4gb2YgYW4gYW5jZXN0b3Igb3JnIG9mIHRoZSB0YXJnZXQgdXNlcidgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHluYW1pY0F1dGh6KFxuICBydWxlOiBzdHJpbmcsXG4gIG9wdHM6IHsgcmVhY2hhYmxlQnk6IHJlYWRvbmx5IER5bmFtaWNQcmluY2lwYWxbXTsgcGVybWlzc2lvbnM/OiByZWFkb25seSBQZXJtaXNzaW9uW10gfSxcbik6IChyZXE6IHVua25vd24sIHJlczogdW5rbm93biwgbmV4dDogKCkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gIGlmIChvcHRzLnJlYWNoYWJsZUJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZHluYW1pY0F1dGh6KFwiJHtydWxlfVwiKSBtdXN0IG5hbWUgYXQgbGVhc3Qgb25lIHByaW5jaXBhbCBraW5kIGluIHJlYWNoYWJsZUJ5YCk7XG4gIH1cbiAgZm9yIChjb25zdCBwIG9mIG9wdHMucmVhY2hhYmxlQnkpIHtcbiAgICBpZiAoIURZTkFNSUNfUFJJTkNJUEFMUy5pbmNsdWRlcyhwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkeW5hbWljQXV0aHooXCIke3J1bGV9XCIpOiB1bmtub3duIHByaW5jaXBhbCBcIiR7cH1cIiDigJQgb25lIG9mICR7RFlOQU1JQ19QUklOQ0lQQUxTLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0YWdSb3V0ZUdhdGUoXG4gICAgZnVuY3Rpb24gZHluYW1pY0F1dGh6Um91dGUoX3JlcTogdW5rbm93biwgX3JlczogdW5rbm93biwgbmV4dDogKCkgPT4gdm9pZCkgeyBuZXh0KCk7IH0sXG4gICAgeyBraW5kOiAnZHluYW1pY0F1dGh6JywgcnVsZSwgcmVhY2hhYmxlQnk6IFsuLi5vcHRzLnJlYWNoYWJsZUJ5XSwgLi4uKG9wdHMucGVybWlzc2lvbnMgJiYgeyBwZXJtaXNzaW9uczogWy4uLm9wdHMucGVybWlzc2lvbnNdIH0pIH0sXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWRpdGVkKC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogKHJlcTogdW5rbm93biwgcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgcmV0dXJuIHRhZ1JvdXRlR2F0ZShmdW5jdGlvbiBhdWRpdGVkUm91dGUoX3JlcTogdW5rbm93biwgX3JlczogdW5rbm93biwgbmV4dDogKCkgPT4gdm9pZCkgeyBuZXh0KCk7IH0sIHsga2luZDogJ2F1ZGl0JywgYWN0aW9ucyB9KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb3VudC1wYXRoIHJlY29yZGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBMYXllciB7XG4gIGhhbmRsZTogdW5rbm93bjtcbiAgcm91dGU/OiB7IHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdOyBtZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjsgc3RhY2s6IEFycmF5PHsgbWV0aG9kPzogc3RyaW5nOyBoYW5kbGU6IHVua25vd24gfT4gfTtcbiAgbWF0Y2hlcnM6IEFycmF5PChwYXRoOiBzdHJpbmcpID0+IHVua25vd24+O1xuICAvKiogcm91dGVyQDIncyBcIm1vdW50ZWQgYXQgJy8nIHdpdGggZW5kOmZhbHNlXCIgZmFzdCBwYXRoIOKAlCBtYXRjaGVzIEFOWSBwYXRoLiAqL1xuICBzbGFzaD86IGJvb2xlYW47XG4gIFtMQVlFUl9QQVRIXT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJvdXRlckxpa2UgeyBzdGFjazogTGF5ZXJbXSB9XG5cbmZ1bmN0aW9uIGluc3RhbGxSb3V0ZVJlY29yZGVyKCk6IHZvaWQge1xuICBjb25zdCBwcm90byA9IChleHByZXNzLlJvdXRlciBhcyB1bmtub3duIGFzIHsgcHJvdG90eXBlOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiB9KS5wcm90b3R5cGU7XG4gIGlmIChwcm90b1tSRUNPUkRFUl9JTlNUQUxMRURdKSByZXR1cm47XG4gIGNvbnN0IG9yaWdpbmFsVXNlID0gcHJvdG8udXNlIGFzICh0aGlzOiBSb3V0ZXJMaWtlLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG4gIHByb3RvLnVzZSA9IGZ1bmN0aW9uIHJlY29yZGluZ1VzZSh0aGlzOiBSb3V0ZXJMaWtlLCAuLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcbiAgICBjb25zdCBiZWZvcmUgPSB0aGlzLnN0YWNrLmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbFVzZS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAvLyBTYW1lIHBhdGggZGlzYW1iaWd1YXRpb24gYXMgcm91dGVyQDIncyBgdXNlYDogYSBsZWFkaW5nIG5vbi1mdW5jdGlvblxuICAgIC8vIChwb3NzaWJseSBuZXN0ZWQgaW4gYXJyYXlzKSBpcyB0aGUgcGF0aDsgb3RoZXJ3aXNlIHRoZSBtb3VudCBpcyAnLycuXG4gICAgbGV0IGZpcnN0OiB1bmtub3duID0gYXJnc1swXTtcbiAgICB3aGlsZSAoQXJyYXkuaXNBcnJheShmaXJzdCkgJiYgZmlyc3QubGVuZ3RoID4gMCkgZmlyc3QgPSBmaXJzdFswXTtcbiAgICBjb25zdCBwYXRoID0gdHlwZW9mIGZpcnN0ID09PSAnZnVuY3Rpb24nID8gJy8nIDogU3RyaW5nKGFyZ3NbMF0pO1xuICAgIGZvciAobGV0IGkgPSBiZWZvcmU7IGkgPCB0aGlzLnN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5zdGFja1tpXSwgTEFZRVJfUEFUSCwgeyB2YWx1ZTogcGF0aCwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBSRUNPUkRFUl9JTlNUQUxMRUQsIHsgdmFsdWU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xufVxuXG5pbnN0YWxsUm91dGVSZWNvcmRlcigpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRhYmxlIGNvbnN0cnVjdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBSZXNvbHZlZCByZXF1aXJlbWVudHMgZm9yIG9uZSBtZXRob2QgKyBwYXRoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhYmxlRW50cnkge1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICAvKiogQXV0aGVudGljYXRpb24gcnVucyBiZWZvcmUgdGhlIGhhbmRsZXIgKHJlcXVpcmVBdXRoKS4gKi9cbiAgYXV0aDogYm9vbGVhbjtcbiAgLyoqIEVhY2ggcGVybWlzc2lvbiBnYXRlIGluIHRoZSBjaGFpbiAoYWxsIG11c3QgcGFzczsgZWFjaCBpcyBhbnktb2Ygb3IgYWxsLW9mKS4gKi9cbiAgcGVybWlzc2lvbnM6IEFycmF5PHsgbW9kZTogJ2FueScgfCAnYWxsJzsgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXTsgYWxsb3dTZXJ2aWNlOiBib29sZWFuIH0+O1xuICBzeXN0ZW1BZG1pbjogYm9vbGVhbjtcbiAgc2VydmljZVByaW5jaXBhbDogYm9vbGVhbjtcbiAgLyoqIEF1dGhvcml6YXRpb24gdGhlIEhBTkRMRVIgcmVzb2x2ZXMsIGluIHByb3NlIOKAlCBzZWUgdGhlIGBkeW5hbWljQXV0aHpgIGdhdGUuXG4gICAqICBFbXB0eSB3aGVuIHRoZSByb3V0ZSdzIGF1dGhvcml0eSBpcyBmdWxseSBleHByZXNzZWQgYnkgdGhlIGdhdGVzIGFib3ZlLiAqL1xuICBkeW5hbWljQXV0aHo6IHN0cmluZ1tdO1xuICAvKiogVGhlIHByaW5jaXBhbCBraW5kcyB0aG9zZSBkeW5hbWljIHJ1bGVzIGFkbWl0LCBkZWR1cGVkIGFuZCBzb3J0ZWQuIEFic2VudFxuICAgKiAgd2hlbiB0aGUgcm91dGUgZGVjbGFyZXMgbm8gZHluYW1pYyBydWxlLCBzbyB0YWJsZXMgd2l0aG91dCBvbmUgYXJlXG4gICAqICB1bmNoYW5nZWQuIFRoaXMgaXMgdGhlIG1hY2hpbmUtcmVhZGFibGUgaGFsZiBvZiBgZHluYW1pY0F1dGh6YDogaXQgaXMgaG93XG4gICAqICBcIndoaWNoIHJvdXRlcyBjYW4gdGhlIHN1cGVyYWRtaW4gZmxhZyByZWFjaD9cIiBpcyBhbnN3ZXJhYmxlIHdpdGhvdXRcbiAgICogIHJlYWRpbmcgcHJvc2UuICovXG4gIGR5bmFtaWNSZWFjaGFibGVCeT86IER5bmFtaWNQcmluY2lwYWxbXTtcbiAgLyoqIFBlcm1pc3Npb24gaWRzIGEgZHluYW1pYyBydWxlIGNvbnN1bHRzIGluc2lkZSB0aGUgaGFuZGxlciwgZGVkdXBlZCBhbmRcbiAgICogIHNvcnRlZC4gQWJzZW50IHdoZW4gbm9uZSBkb2VzLiBUaGVzZSBhcmUgUkVBTCBlbmZvcmNlbWVudCDigJQgdGhlIGNvdmVyYWdlXG4gICAqICBzY2FuIGNvdW50cyBhIGB1c2VySGFzUGVybWlzc2lvbihyZXEsICd4JylgIGluIGEgY29udHJvbGxlciDigJQgc28gdGhlXG4gICAqICBjb250cmFjdCBzaG91bGQgbm90IHJlYWQgYXMgdGhvdWdoIHRoZSByb3V0ZSBhc2tlZCBmb3Igbm90aGluZy4gKi9cbiAgZHluYW1pY1Blcm1pc3Npb25zPzogUGVybWlzc2lvbltdO1xuICAvKipcbiAgICogVGhlIHNlcnZpY2VzIGFsbG93ZWQgdG8gY2FsbCB0aGlzIHJvdXRlIHdoZW4gaXQgaXMgSU5URVJOQUwgKGByZXF1aXJlSW50ZXJuYWxTZXJ2aWNlYCkuXG4gICAqIEFuIGVtcHR5IGFycmF5IG1lYW5zIHRoZSByb3V0ZSBpcyBub3QgaW50ZXJuYWwg4oCUIGEgdXNlciB0b2tlbiBtYXkgcmVhY2ggaXQsXG4gICAqIHN1YmplY3QgdG8gdGhlIG90aGVyIGdhdGVzLiBTb3J0ZWQsIHNvIHRoZSBnZW5lcmF0ZWQgdGFibGUgaXMgc3RhYmxlLlxuICAgKi9cbiAgaW50ZXJuYWxDYWxsZXJzOiBzdHJpbmdbXTtcbiAgc3RlcFVwOiBib29sZWFuO1xuICAvKiogV2hlbiB0aGUgc3RlcC11cCBnYXRlIG5hbWVzIHRoZSBmYWN0b3JzIHRoYXQgbWF5IGVhcm4gaXQgKGBbJ3dlYmF1dGhuJyxcbiAgICogICd0b3RwJ11gIG9uIHRoZSBtb3N0IGRhbmdlcm91cyByb3V0ZXMpLCB0aGUgYWxsb3dlZCBtZXRob2RzLiBFbXB0eSBtZWFuc1xuICAgKiAgYW55IGZhY3RvciBzYXRpc2ZpZXMgaXQuIFNvcnRlZCwgc28gdGhlIGdlbmVyYXRlZCB0YWJsZSBpcyBzdGFibGUuICovXG4gIHN0ZXBVcE1ldGhvZHM6IHN0cmluZ1tdO1xuICAvKiogSGlnaGVzdCBgbWluQXNzdXJhbmNlYCBhbnkgZ2F0ZSBpbiB0aGUgY2hhaW4gZGVtYW5kczsgMCB3aGVuIG5vbmUgZG9lcy4gKi9cbiAgbWluQXNzdXJhbmNlOiAwIHwgMSB8IDI7XG4gIC8qKiBUaWdodGVzdCBgbWF4QWdlYCAoc2Vjb25kcykgYW55IGFzc3VyYW5jZSBnYXRlIGluIHRoZSBjaGFpbiBkZW1hbmRzLiAqL1xuICBtYXhBZ2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbmFtZWQgY2FydmUtb3V0cyB0aGUgY2hhaW4ncyBhc3N1cmFuY2UgZ2F0ZXMgYWxsb3cgKHNvcnRlZCkuIEFic2VudCB3aGVuXG4gICAqIHRoZXJlIGFyZSBub25lLCBzbyBhIHRhYmxlIG9mIHJvdXRlcyB3aXRob3V0IG9uZSBpcyB1bmNoYW5nZWQuIEEgcmV2aWV3ZXJcbiAgICogcmVhZGluZyBgbWluQXNzdXJhbmNlOiAyYCBuZXh0IHRvIGBhc3N1cmFuY2VFeGVtcHQ6IFtcImJvb3RzdHJhcC1zZXR1cFwiXWBcbiAgICoga25vd3MgdGhlIGxldmVsIGlzIHJlcXVpcmVkIG9mIGV2ZXJ5b25lIEVYQ0VQVCB0aGF0IG5hbWVkIGNhc2UuXG4gICAqL1xuICBhc3N1cmFuY2VFeGVtcHQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgcm91dGUgcmVxdWlyZXMgYW4gTUZBLWdyYWRlIHNlc3Npb24gV0hFTiB0aGUgb3JnJ3NcbiAgICogYGFkbWluQWN0aW9uc1JlcXVpcmVNZmFgIHBvbGljeSBpcyBvbiAoYHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZWApLCB3aXRoXG4gICAqIHdoYXQgYSBtYWNoaW5lIGNyZWRlbnRpYWwgbWVldHMgdGhlcmUuIEFic2VudCAobm90IGBmYWxzZWApIG90aGVyd2lzZSwgc29cbiAgICogdGhlIHRhYmxlIG9mIGEgc2VydmljZSB0aGF0IHVzZXMgbm8gc3VjaCBnYXRlIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIG9yZ0FkbWluQXNzdXJhbmNlPzogeyBtYWNoaW5lczogT3JnQWRtaW5Bc3N1cmFuY2VNYWNoaW5lcyB9O1xuICAvKipcbiAgICogUHJlc2VudCAoYWx3YXlzIGB0cnVlYCkgd2hlbiB0aGUgY2hhaW4gcnVucyBgcmVxdWlyZVN5c3RlbU9yZ2A6IG9ubHkgYVxuICAgKiBjYWxsZXIgd2hvc2UgYWN0aXZlIG9yZyBpcyB0aGUgc3lzdGVtIG9yZyBnZXRzIHRocm91Z2guIEFic2VudCBvdGhlcndpc2UsXG4gICAqIHNvIHRoZSB0YWJsZSBvZiBhIHNlcnZpY2Ugd2l0aCBubyBlY29zeXN0ZW0tZ292ZXJuYW5jZSByb3V0ZSBpcyB1bmNoYW5nZWQuXG4gICAqL1xuICBzeXN0ZW1Pcmc/OiB0cnVlO1xuICBmZWF0dXJlczogc3RyaW5nW107XG4gIHNjb3Blczogc3RyaW5nW107XG4gIGF1ZGl0OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBxdW90YSBtaWRkbGV3YXJlIGluIHRoZSBjaGFpbjogdGhlIHR5cGVzIG1ldGVyZWQgKG9uY2UgcGVyIDJ4eCkgYW5kXG4gICAqIGNoZWNrZWQgKDQyOSB3aGVuIHNwZW50KS4gYG1ldGVyZWRgIGlzIE5PVCBkZWR1cGVkIOKAlCBhIHR5cGUgbGlzdGVkIHR3aWNlIGlzXG4gICAqIG1ldGVyZWQgdHdpY2UsIHdoaWNoIHRoZSBjb3ZlcmFnZSBjaGVjayBmbGFncy4gYGV4ZW1wdGAgbWFya3MgYSByb3V0ZSBvbiB0aGVcbiAgICogZmxlZXQtd2lkZSBgUVVPVEFfRVhFTVBUX1JPVVRFU2AgbGlzdCwgd2hlcmUgdGhlIGBhcGlDYWxsc2AgbWV0ZXIgYW5kIGNoZWNrXG4gICAqIGFyZSBuby1vcHMgYXQgcnVudGltZSAoc28gYGFwaUNhbGxzYCBpcyBsZWZ0IG91dCBvZiBib3RoIGxpc3RzKS4gQWJzZW50IHdoZW5cbiAgICogdGhlIGNoYWluIGhhcyBubyBxdW90YSBtaWRkbGV3YXJlIGFuZCB0aGUgcm91dGUgaXMgbm90IGV4ZW1wdC5cbiAgICovXG4gIHF1b3RhPzogeyBtZXRlcmVkOiBzdHJpbmdbXTsgY2hlY2tlZDogc3RyaW5nW107IGV4ZW1wdD86IHRydWUgfTtcbn1cblxuaW50ZXJmYWNlIENhbmRpZGF0ZSB7IGxheWVyOiBMYXllcjsgcHJlZml4OiBzdHJpbmcgfVxuXG5mdW5jdGlvbiBqb2luUGF0aChwcmVmaXg6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkID0gYCR7cHJlZml4LnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3BhdGgucmVwbGFjZSgvXlxcLysvLCAnJyl9YDtcbiAgcmV0dXJuIGpvaW5lZC5sZW5ndGggPiAxID8gam9pbmVkLnJlcGxhY2UoL1xcLyskLywgJycpIDogJy8nO1xufVxuXG5mdW5jdGlvbiBpc1JvdXRlcihoYW5kbGU6IHVua25vd24pOiBoYW5kbGUgaXMgUm91dGVyTGlrZSB7XG4gIHJldHVybiB0eXBlb2YgaGFuZGxlID09PSAnZnVuY3Rpb24nICYmIEFycmF5LmlzQXJyYXkoKGhhbmRsZSBhcyBQYXJ0aWFsPFJvdXRlckxpa2U+KS5zdGFjayk7XG59XG5cbi8qKlxuICogV2hldGhlciBhIG1pZGRsZXdhcmUgbGF5ZXIgKG1vdW50ZWQgdW5kZXIgYHByZWZpeGApIHJ1bnMgZm9yIGBmdWxsUGF0aGAuXG4gKiBNaXJyb3JzIGBMYXllci5wcm90b3R5cGUubWF0Y2hgLCBpbmNsdWRpbmcgaXRzIGZhc3QgcGF0aDogYSBsYXllciBhZGRlZCB3aXRoXG4gKiBubyBwYXRoIChgcm91dGVyLnVzZShnYXRlKWApIG1hdGNoZXMgRVZFUlkgcGF0aCB1bmRlciBpdHMgcm91dGVyIOKAlCB3aGljaCBpc1xuICogZXhhY3RseSBob3cgdGhlIHNoYXJlZCBgcmVxdWlyZVBlcm1pc3Npb25gIGdhdGVzIGJldHdlZW4gdHdvIGByb3V0ZXIudXNlKC4uLilgXG4gKiBtb3VudHMgcmVhY2ggdGhlIHJvdXRlcnMgcmVnaXN0ZXJlZCBhZnRlciB0aGVtLlxuICovXG5mdW5jdGlvbiBhcHBsaWVzKGM6IENhbmRpZGF0ZSwgZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBiYXNlID0gYy5wcmVmaXggPT09ICcvJyA/ICcnIDogYy5wcmVmaXg7XG4gIGlmIChiYXNlICYmIGZ1bGxQYXRoICE9PSBiYXNlICYmICFmdWxsUGF0aC5zdGFydHNXaXRoKGAke2Jhc2V9L2ApKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjLmxheWVyLnNsYXNoKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcmVsID0gZnVsbFBhdGguc2xpY2UoYmFzZS5sZW5ndGgpIHx8ICcvJztcbiAgcmV0dXJuIGMubGF5ZXIubWF0Y2hlcnMuc29tZSgobSkgPT4gbShyZWwpICE9PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RHYXRlcyhmbnM6IHVua25vd25bXSk6IFJvdXRlR2F0ZVtdIHtcbiAgcmV0dXJuIGZucy5mbGF0TWFwKChmbikgPT4gZ2V0Um91dGVHYXRlcyhmbikpO1xufVxuXG5mdW5jdGlvbiB0b0VudHJ5KG1ldGhvZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGdhdGVzOiBSb3V0ZUdhdGVbXSk6IFJvdXRlVGFibGVFbnRyeSB7XG4gIGNvbnN0IGVudHJ5OiBSb3V0ZVRhYmxlRW50cnkgPSB7XG4gICAgbWV0aG9kLFxuICAgIHBhdGgsXG4gICAgYXV0aDogZmFsc2UsXG4gICAgcGVybWlzc2lvbnM6IFtdLFxuICAgIHN5c3RlbUFkbWluOiBmYWxzZSxcbiAgICBzZXJ2aWNlUHJpbmNpcGFsOiBmYWxzZSxcbiAgICBkeW5hbWljQXV0aHo6IFtdLFxuICAgIGludGVybmFsQ2FsbGVyczogW10sXG4gICAgc3RlcFVwOiBmYWxzZSxcbiAgICBzdGVwVXBNZXRob2RzOiBbXSxcbiAgICBtaW5Bc3N1cmFuY2U6IDAsXG4gICAgZmVhdHVyZXM6IFtdLFxuICAgIHNjb3BlczogW10sXG4gICAgYXVkaXQ6IFtdLFxuICB9O1xuICBmb3IgKGNvbnN0IGcgb2YgZ2F0ZXMpIHtcbiAgICBzd2l0Y2ggKGcua2luZCkge1xuICAgICAgY2FzZSAnYXV0aCc6IGVudHJ5LmF1dGggPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ3Blcm1pc3Npb24nOiBlbnRyeS5wZXJtaXNzaW9ucy5wdXNoKHsgbW9kZTogZy5tb2RlLCBwZXJtaXNzaW9uczogWy4uLmcucGVybWlzc2lvbnNdLCBhbGxvd1NlcnZpY2U6IGcuYWxsb3dTZXJ2aWNlID09PSB0cnVlIH0pOyBicmVhaztcbiAgICAgIGNhc2UgJ3N5c3RlbUFkbWluJzogZW50cnkuc3lzdGVtQWRtaW4gPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ3NlcnZpY2VQcmluY2lwYWwnOiBlbnRyeS5zZXJ2aWNlUHJpbmNpcGFsID0gdHJ1ZTsgYnJlYWs7XG4gICAgICBjYXNlICdkeW5hbWljQXV0aHonOlxuICAgICAgICBpZiAoIWVudHJ5LmR5bmFtaWNBdXRoei5pbmNsdWRlcyhnLnJ1bGUpKSBlbnRyeS5keW5hbWljQXV0aHoucHVzaChnLnJ1bGUpO1xuICAgICAgICBlbnRyeS5keW5hbWljUmVhY2hhYmxlQnkgPSBbLi4ubmV3IFNldChbLi4uKGVudHJ5LmR5bmFtaWNSZWFjaGFibGVCeSA/PyBbXSksIC4uLmcucmVhY2hhYmxlQnldKV0uc29ydCgpO1xuICAgICAgICBpZiAoZy5wZXJtaXNzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZW50cnkuZHluYW1pY1Blcm1pc3Npb25zID0gWy4uLm5ldyBTZXQoWy4uLihlbnRyeS5keW5hbWljUGVybWlzc2lvbnMgPz8gW10pLCAuLi5nLnBlcm1pc3Npb25zXSldLnNvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ludGVybmFsU2VydmljZSc6IGZvciAoY29uc3QgYyBvZiBnLmNhbGxlcnMpIGlmICghZW50cnkuaW50ZXJuYWxDYWxsZXJzLmluY2x1ZGVzKGMpKSBlbnRyeS5pbnRlcm5hbENhbGxlcnMucHVzaChjKTsgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwVXAnOlxuICAgICAgICBlbnRyeS5zdGVwVXAgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgZy5tZXRob2RzID8/IFtdKSBpZiAoIWVudHJ5LnN0ZXBVcE1ldGhvZHMuaW5jbHVkZXMobSkpIGVudHJ5LnN0ZXBVcE1ldGhvZHMucHVzaChtKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhc3N1cmFuY2UnOlxuICAgICAgICAvLyBTZXZlcmFsIGdhdGVzIG1heSBhcHBseTsgdGhlIFNUUklDVEVTVCB3aW5zLCBzaW5jZSBldmVyeSBvbmUgb2YgdGhlbSBydW5zLlxuICAgICAgICBpZiAoZy5taW5Bc3N1cmFuY2UgPiBlbnRyeS5taW5Bc3N1cmFuY2UpIGVudHJ5Lm1pbkFzc3VyYW5jZSA9IGcubWluQXNzdXJhbmNlO1xuICAgICAgICBpZiAoZy5tYXhBZ2UgIT09IHVuZGVmaW5lZCkgZW50cnkubWF4QWdlID0gZW50cnkubWF4QWdlID09PSB1bmRlZmluZWQgPyBnLm1heEFnZSA6IE1hdGgubWluKGVudHJ5Lm1heEFnZSwgZy5tYXhBZ2UpO1xuICAgICAgICBpZiAoZy5leGVtcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVudHJ5LmFzc3VyYW5jZUV4ZW1wdCA9IFsuLi5uZXcgU2V0KFsuLi4oZW50cnkuYXNzdXJhbmNlRXhlbXB0ID8/IFtdKSwgZy5leGVtcHRdKV0uc29ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3JnQWRtaW5Bc3N1cmFuY2UnOlxuICAgICAgICAvLyBTdHJpY3Rlc3Qgd2luczogb25lIGByZWZ1c2VgIGluIHRoZSBjaGFpbiByZWZ1c2VzIG1hY2hpbmVzLlxuICAgICAgICBlbnRyeS5vcmdBZG1pbkFzc3VyYW5jZSA9IHtcbiAgICAgICAgICBtYWNoaW5lczogZW50cnkub3JnQWRtaW5Bc3N1cmFuY2U/Lm1hY2hpbmVzID09PSAncmVmdXNlJyB8fCBnLm1hY2hpbmVzID09PSAncmVmdXNlJyA/ICdyZWZ1c2UnIDogJ2FsbG93JyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzeXN0ZW1PcmcnOiBlbnRyeS5zeXN0ZW1PcmcgPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ2ZlYXR1cmUnOiBpZiAoIWVudHJ5LmZlYXR1cmVzLmluY2x1ZGVzKGcuZmVhdHVyZSkpIGVudHJ5LmZlYXR1cmVzLnB1c2goZy5mZWF0dXJlKTsgYnJlYWs7XG4gICAgICBjYXNlICdzY29wZSc6IGlmICghZW50cnkuc2NvcGVzLmluY2x1ZGVzKGcuc2NvcGUpKSBlbnRyeS5zY29wZXMucHVzaChnLnNjb3BlKTsgYnJlYWs7XG4gICAgICBjYXNlICdhdWRpdCc6IGZvciAoY29uc3QgYSBvZiBnLmFjdGlvbnMpIGlmICghZW50cnkuYXVkaXQuaW5jbHVkZXMoYSkpIGVudHJ5LmF1ZGl0LnB1c2goYSk7IGJyZWFrO1xuICAgICAgY2FzZSAncXVvdGEnOiB7XG4gICAgICAgIGNvbnN0IHF1b3RhID0gZW50cnkucXVvdGEgPz8gKGVudHJ5LnF1b3RhID0geyBtZXRlcmVkOiBbXSwgY2hlY2tlZDogW10gfSk7XG4gICAgICAgIGlmIChnLm1vZGUgPT09ICdtZXRlcicpIHF1b3RhLm1ldGVyZWQucHVzaChnLnF1b3RhVHlwZSk7XG4gICAgICAgIGVsc2UgaWYgKCFxdW90YS5jaGVja2VkLmluY2x1ZGVzKGcucXVvdGFUeXBlKSkgcXVvdGEuY2hlY2tlZC5wdXNoKGcucXVvdGFUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFuIGV4ZW1wdCByb3V0ZSdzIGFwaUNhbGxzIG1ldGVyICsgY2hlY2sgc2tpcCBpdCBhdCBydW50aW1lLCBzbyB0aGUgdGFibGVcbiAgLy8gc2F5cyB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgcmF0aGVyIHRoYW4gd2hhdCBpcyBtb3VudGVkLlxuICBpZiAoaXNRdW90YUV4ZW1wdFJvdXRlKG1ldGhvZCwgcGF0aCkpIHtcbiAgICBjb25zdCBxdW90YSA9IGVudHJ5LnF1b3RhID8/IHsgbWV0ZXJlZDogW10sIGNoZWNrZWQ6IFtdIH07XG4gICAgZW50cnkucXVvdGEgPSB7XG4gICAgICBtZXRlcmVkOiBxdW90YS5tZXRlcmVkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBjaGVja2VkOiBxdW90YS5jaGVja2VkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBleGVtcHQ6IHRydWUsXG4gICAgfTtcbiAgfVxuICBlbnRyeS5pbnRlcm5hbENhbGxlcnMuc29ydCgpO1xuICBlbnRyeS5zdGVwVXBNZXRob2RzLnNvcnQoKTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG5mdW5jdGlvbiB3YWxrKHN0YWNrOiBMYXllcltdLCBwcmVmaXg6IHN0cmluZywgaW5oZXJpdGVkOiBDYW5kaWRhdGVbXSwgb3V0OiBSb3V0ZVRhYmxlRW50cnlbXSwgc2VlbjogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgbG9jYWw6IENhbmRpZGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgbGF5ZXIgb2Ygc3RhY2spIHtcbiAgICBpZiAobGF5ZXIucm91dGUpIHtcbiAgICAgIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShsYXllci5yb3V0ZS5wYXRoKSA/IGxheWVyLnJvdXRlLnBhdGggOiBbbGF5ZXIucm91dGUucGF0aF07XG4gICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMobGF5ZXIucm91dGUubWV0aG9kcykubWFwKChtKSA9PiAobSA9PT0gJ19hbGwnID8gJyonIDogbS50b1VwcGVyQ2FzZSgpKSk7XG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiBwYXRocykge1xuICAgICAgICBjb25zdCBmdWxsID0gam9pblBhdGgocHJlZml4LCBTdHJpbmcocm91dGVQYXRoKSk7XG4gICAgICAgIGNvbnN0IGNoYWluID0gWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLmZpbHRlcigoYykgPT4gYXBwbGllcyhjLCBmdWxsKSkubWFwKChjKSA9PiBjLmxheWVyLmhhbmRsZSk7XG4gICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBgJHttZXRob2R9ICR7ZnVsbH1gO1xuICAgICAgICAgIC8vIEZpcnN0IHJlZ2lzdHJhdGlvbiB3aW5zLCBhcyBpbiBFeHByZXNzOiBhIGxhdGVyIGR1cGxpY2F0ZSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgICAgICBjb25zdCByb3V0ZUZucyA9IGxheWVyLnJvdXRlLnN0YWNrXG4gICAgICAgICAgICAuZmlsdGVyKChsKSA9PiBsLm1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8IGwubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IG1ldGhvZCB8fCBtZXRob2QgPT09ICcqJylcbiAgICAgICAgICAgIC5tYXAoKGwpID0+IGwuaGFuZGxlKTtcbiAgICAgICAgICBvdXQucHVzaCh0b0VudHJ5KG1ldGhvZCwgZnVsbCwgY29sbGVjdEdhdGVzKFsuLi5jaGFpbiwgLi4ucm91dGVGbnNdKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1JvdXRlcihsYXllci5oYW5kbGUpKSB7XG4gICAgICBjb25zdCBtb3VudFBhdGggPSBqb2luUGF0aChwcmVmaXgsIGxheWVyW0xBWUVSX1BBVEhdID8/ICcvJyk7XG4gICAgICAvLyBNaWRkbGV3YXJlIHRoYXQgcnVucyBiZWZvcmUgdGhpcyByb3V0ZXIgKGFuY2VzdG9ycyArIGVhcmxpZXIgc2libGluZ3MpXG4gICAgICAvLyBpcyBpbmhlcml0ZWQ7IGFwcGxpY2FiaWxpdHkgaXMgcmUtY2hlY2tlZCBhZ2FpbnN0IGVhY2ggZnVsbCByb3V0ZSBwYXRoLlxuICAgICAgd2FsayhsYXllci5oYW5kbGUuc3RhY2ssIG1vdW50UGF0aCwgWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLCBvdXQsIHNlZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbC5wdXNoKHsgbGF5ZXIsIHByZWZpeCB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgcm91dGUgdGFibGUgb2YgYW4gYXNzZW1ibGVkIEV4cHJlc3MgYXBwIChvciByb3V0ZXIpOiBvbmUgZW50cnkgcGVyXG4gKiByZWFjaGFibGUgbWV0aG9kICsgcGF0aCB3aXRoIGV2ZXJ5IGdhdGUgdGhhdCBydW5zIGJlZm9yZSBpdHMgaGFuZGxlci5cbiAqIEhFQUQgaXMgZm9sZGVkIGludG8gR0VULCBhcyBFeHByZXNzIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJvdXRlVGFibGUoYXBwOiB1bmtub3duKTogUm91dGVUYWJsZUVudHJ5W10ge1xuICBjb25zdCByb290ID0gKGFwcCBhcyB7IHJvdXRlcj86IFJvdXRlckxpa2UgfSkucm91dGVyID8/IChhcHAgYXMgUm91dGVyTGlrZSk7XG4gIGNvbnN0IG91dDogUm91dGVUYWJsZUVudHJ5W10gPSBbXTtcbiAgaWYgKCFyb290IHx8ICFBcnJheS5pc0FycmF5KHJvb3Quc3RhY2spKSByZXR1cm4gb3V0O1xuICB3YWxrKHJvb3Quc3RhY2ssICcvJywgW10sIG91dCwgbmV3IFNldCgpKTtcbiAgcmV0dXJuIG91dC5zb3J0KChhLCBiKSA9PiAoYS5wYXRoID09PSBiLnBhdGggPyBhLm1ldGhvZC5sb2NhbGVDb21wYXJlKGIubWV0aG9kKSA6IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpKTtcbn1cblxuLyoqIFdoZXRoZXIgYSBtZXRob2QgbXV0YXRlcyBzdGF0ZSAoZXZlcnl0aGluZyBleGNlcHQgR0VUL0hFQUQvT1BUSU9OUykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXcml0ZU1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIVsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUyddLmluY2x1ZGVzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKTtcbn1cblxuLyoqIFN1bW1hcnkgY291bnRzIGZvciBhIHN0YXJ0dXAgbG9nIGxpbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplUm91dGVUYWJsZSh0YWJsZTogcmVhZG9ubHkgUm91dGVUYWJsZUVudHJ5W10pOiB7IHJvdXRlczogbnVtYmVyOyB3cml0ZXM6IG51bWJlcjsgdW5nYXRlZDogbnVtYmVyOyB1bmF1ZGl0ZWQ6IG51bWJlcjsgaW50ZXJuYWw6IG51bWJlciB9IHtcbiAgY29uc3QgZ2F0ZWQgPSAoZTogUm91dGVUYWJsZUVudHJ5KTogYm9vbGVhbiA9PiBlLnBlcm1pc3Npb25zLmxlbmd0aCA+IDAgfHwgZS5zeXN0ZW1BZG1pbiB8fCBlLnNlcnZpY2VQcmluY2lwYWwgfHwgZS5keW5hbWljQXV0aHoubGVuZ3RoID4gMDtcbiAgY29uc3Qgd3JpdGVzID0gdGFibGUuZmlsdGVyKChlKSA9PiBpc1dyaXRlTWV0aG9kKGUubWV0aG9kKSk7XG4gIHJldHVybiB7XG4gICAgcm91dGVzOiB0YWJsZS5sZW5ndGgsXG4gICAgd3JpdGVzOiB3cml0ZXMubGVuZ3RoLFxuICAgIHVuZ2F0ZWQ6IHRhYmxlLmZpbHRlcigoZSkgPT4gIWdhdGVkKGUpKS5sZW5ndGgsXG4gICAgdW5hdWRpdGVkOiB3cml0ZXMuZmlsdGVyKChlKSA9PiBlLmF1ZGl0Lmxlbmd0aCA9PT0gMCkubGVuZ3RoLFxuICAgIGludGVybmFsOiB0YWJsZS5maWx0ZXIoKGUpID0+IGUuaW50ZXJuYWxDYWxsZXJzLmxlbmd0aCA+IDApLmxlbmd0aCxcbiAgfTtcbn1cbiJdfQ==
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdGFibGUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3JvdXRlLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFjOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTO0NBQ3BGLENBQUM7QUE4RFgsc0VBQXNFO0FBQ3RFLGlFQUFpRTtBQUNqRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDekQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzdELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBSXpFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBbUIsRUFBSyxFQUFFLEdBQUcsS0FBa0I7SUFDekUsTUFBTSxDQUFDLEdBQUcsRUFBZ0IsQ0FBQztJQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25JLE9BQU8sRUFBRSxD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cnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogSW50cm9zcGVjdGFibGUgcm91dGUgdGFibGUuXG4gKlxuICogQXV0aG9yaXphdGlvbiBpcyBzcGxpdCBiZXR3ZWVuIHJvdXRlciBtb3VudHMgKGBhcHAudXNlKCcveCcsIGdhdGUsIHJvdXRlcilgKVxuICogYW5kIGluZGl2aWR1YWwgcm91dGVzLCBzbyBncmVwcGluZyBzb3VyY2UgY2FuJ3QgcHJvdmUgdGhhdCBldmVyeSByb3V0ZSBpc1xuICogZ2F0ZWQuIEluc3RlYWQsIGV2ZXJ5IGdhdGUgbWlkZGxld2FyZSBpbiB0aGlzIHBhY2thZ2UgY2FycmllcyBNRVRBREFUQSAod2hhdCBpdFxuICogcmVxdWlyZXMpLCBhbmQge0BsaW5rIGJ1aWxkUm91dGVUYWJsZX0gd2Fsa3MgYW4gYXNzZW1ibGVkIEV4cHJlc3MgYXBwIGFuZFxuICogcmVzb2x2ZXMsIHBlciBtZXRob2QgKyBwYXRoLCB0aGUgZnVsbCBjaGFpbiBvZiBnYXRlcyBFeHByZXNzIHdvdWxkIHJ1biBiZWZvcmVcbiAqIHRoZSBoYW5kbGVyOiBwZXJtaXNzaW9ucywgc3lzdGVtLWFkbWluLCBzZXJ2aWNlIHByaW5jaXBhbCwgc3RlcC11cCwgZmVhdHVyZSxcbiAqIHRva2VuIHNjb3BlLCBhbmQgdGhlIGF1ZGl0IGFjdGlvbnMgdGhlIHJvdXRlIGRlY2xhcmVzIHZpYSB7QGxpbmsgYXVkaXRlZH0uXG4gKlxuICogRXhwcmVzcyA1IChyb3V0ZXJAMikgZG9lcyBub3Qga2VlcCBhIG1vdW50J3MgcGF0aCBzdHJpbmcgb24gaXRzIGxheWVyLCBzbyB0aGlzXG4gKiBtb2R1bGUgcmVjb3JkcyBpdDogb24gaW1wb3J0IGl0IHdyYXBzIGBSb3V0ZXIucHJvdG90eXBlLnVzZWAgdG8gc3RhbXAgZWFjaCBuZXdcbiAqIGxheWVyIHdpdGggdGhlIHBhdGggaXQgd2FzIG1vdW50ZWQgYXQuIGFwaS1jb3JlIGlzIGltcG9ydGVkIGJlZm9yZSBhbnkgcm91dGVcbiAqIG1vZHVsZSByZWdpc3RlcnMgYSByb3V0ZSwgc28gZXZlcnkgbGF5ZXIgYW4gYXBwIGJ1aWxkcyBpcyBzdGFtcGVkLiBUaGUgd3JhcFxuICogb25seSBhZGRzIGEgc3ltYm9sIHByb3BlcnR5OyByb3V0aW5nIGJlaGF2aW91ciBpcyB1bmNoYW5nZWQuXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBpc1F1b3RhRXhlbXB0Um91dGUgfSBmcm9tICcuL3F1b3RhLWV4ZW1wdC1yb3V0ZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vdHlwZXMvcGVybWlzc2lvbnMuanMnO1xuXG4vKipcbiAqIFdoYXQgYSBNQUNISU5FIGNyZWRlbnRpYWwgKFBBVCwgc2VydmljZSBhY2NvdW50KSBtZWV0cyBvbiBhIHJvdXRlIGdhdGVkIGJ5XG4gKiBgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlYCB3aGlsZSB0aGUgb3JnJ3MgYWRtaW4tTUZBIHBvbGljeSBpcyBvbjpcbiAqICAgLSBgYWxsb3dgICDigJQgdGhlIHJvdXRlIGlzIGxlZ2l0aW1hdGVseSBtYWNoaW5lLWNhbGxhYmxlIChhdXRvbWF0aW9uIHRoYXRcbiAqICAgICAgICAgICAgICAgIG1hbmFnZXMgbWVtYmVycywgcm9sZXMsIGJpbGxpbmfigKYpOyB0aGUgcG9saWN5IGlzIGFib3V0IGhvd1xuICogICAgICAgICAgICAgICAgc3Ryb25nbHkgYSBQRVJTT04ncyBzZXNzaW9uIHdhcyBvcGVuZWQsIHNvIGl0IGRvZXMgbm90IGFwcGx5O1xuICogICAtIGByZWZ1c2VgIOKAlCBvbmx5IGEgcGVyc29uIG1heSBkbyB0aGlzIHdoaWxlIHRoZSBwb2xpY3kgaXMgb24gKDQwM1xuICogICAgICAgICAgICAgICAgYEhVTUFOX1NFU1NJT05fUkVRVUlSRURgKSwgZS5nLiBtaW50aW5nIGFub3RoZXIgY3JlZGVudGlhbC5cbiAqL1xuZXhwb3J0IHR5cGUgT3JnQWRtaW5Bc3N1cmFuY2VNYWNoaW5lcyA9ICdhbGxvdycgfCAncmVmdXNlJztcblxuLyoqXG4gKiBUaGUgQ0xPU0VEIHNldCBvZiBwcmluY2lwYWwga2luZHMgYSBgZHluYW1pY0F1dGh6YCBydWxlIG1heSBhZG1pdC5cbiAqXG4gKiBBIHJvdXRlIHdob3NlIGF1dGhvcml0eSBpcyByZXNvbHZlZCBpbiB0aGUgaGFuZGxlciBzdGlsbCBoYXMgdG8gc2F5IFdITyBjYW5cbiAqIGdldCB0aHJvdWdoIGl0LiBUaGVzZSBhcmUgdGhlIGtpbmRzLCBkZWxpYmVyYXRlbHkgY29hcnNlIOKAlCB0aGUgcHJlY2lzZVxuICogcHJlZGljYXRlIGxpdmVzIGluIHRoZSBwcm9zZSBydWxlIGFuZCBpbiB0aGUgY29kZTpcbiAqXG4gKiAgLSBgc3VwZXJhZG1pbmAgICAg4oCUIHRoZSBgVXNlci5pc1N1cGVyQWRtaW5gIGZsYWcgKGBpc1N5c3RlbUFkbWluKHJlcSlgKS5cbiAqICAtIGBzeXN0ZW0tb3JnYCAgICDigJQgYSBtZW1iZXIgb2YgdGhlIHN5c3RlbSBvcmcgaG9sZGluZyBhIG5hbWVkIHBlcm1pc3Npb247XG4gKiAgICAgICAgICAgICAgICAgICAgICBsaXN0IHRoZSBpZHMgaW4gYHBlcm1pc3Npb25zYCBzbyB0aGUgY292ZXJhZ2Ugc2NhbiBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb250cmFjdCBjYW4gc2VlIHRoZW0uXG4gKiAgLSBgdGVuYW50LWFkbWluYCAg4oCUIGFuIGFkbWluIG9yIG93bmVyIG9mIHRoZSB0YXJnZXQncyBvd24gb3JnLCBvciBvZiBhblxuICogICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3Igb2YgaXQuIE5PVCBhIHN1cGVyYWRtaW4gYnkgdmlydHVlIG9mIHRoZSBmbGFnOlxuICogICAgICAgICAgICAgICAgICAgICAgc2V2ZXJhbCBvZiB0aGVzZSBydWxlcyByZWZ1c2UgdGhlIGZsYWcgb24gcHVycG9zZS5cbiAqICAtIGB0ZW5hbnQtbWVtYmVyYCDigJQgYW55IG1lbWJlciBvZiB0aGUgdGFyZ2V0J3Mgb3JnLCBhZG1pbiBvciBub3QuXG4gKiAgLSBgc3ViamVjdGAgICAgICAg4oCUIHRoZSB2ZXJ5IHVzZXIgdGhlIHJlcXVlc3QgaXMgYWJvdXQgKHNlbGYtc2VydmljZSkuXG4gKiAgLSBgc2VydmljZWAgICAgICAg4oCUIGEgc2VydmljZSBwcmluY2lwYWwgLyBpbnRlcm5hbCBjYWxsZXIuXG4gKiAgLSBgZ2F0ZXdheWAgICAgICAg4oCUIHRoZSBpbmdyZXNzIGl0c2VsZiBzdXBwbGllcyB0aGUgZmFjdCAodGhlIGNvbnNvbGVcbiAqICAgICAgICAgICAgICAgICAgICAgIGBhdXRoX3JlcXVlc3RgIHBhc3NlcyB0aGUgY29uc29sZSBjbGFzcyBpbiBhIGhlYWRlcikuXG4gKi9cbmV4cG9ydCBjb25zdCBEWU5BTUlDX1BSSU5DSVBBTFMgPSBbXG4gICdzdXBlcmFkbWluJywgJ3N5c3RlbS1vcmcnLCAndGVuYW50LWFkbWluJywgJ3RlbmFudC1tZW1iZXInLCAnc3ViamVjdCcsICdzZXJ2aWNlJywgJ2dhdGV3YXknLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIER5bmFtaWNQcmluY2lwYWwgPSB0eXBlb2YgRFlOQU1JQ19QUklOQ0lQQUxTW251bWJlcl07XG5cbi8qKiBPbmUgcmVxdWlyZW1lbnQgYSBnYXRlIG1pZGRsZXdhcmUgZW5mb3JjZXMuICovXG5leHBvcnQgdHlwZSBSb3V0ZUdhdGUgPVxuICB8IHsga2luZDogJ2F1dGgnIH1cbiAgfCB7IGtpbmQ6ICdwZXJtaXNzaW9uJzsgbW9kZTogJ2FueScgfCAnYWxsJzsgcGVybWlzc2lvbnM6IHJlYWRvbmx5IFBlcm1pc3Npb25bXTsgYWxsb3dTZXJ2aWNlPzogYm9vbGVhbiB9XG4gIHwgeyBraW5kOiAnc3lzdGVtQWRtaW4nIH1cbiAgLyoqXG4gICAqIEF1dGhvcml6YXRpb24gdGhlIHJvdXRlIENBTk5PVCBleHByZXNzIHN0YXRpY2FsbHksIHJlc29sdmVkIGluIHRoZSBoYW5kbGVyLlxuICAgKlxuICAgKiBTb21lIGF1dGhvcml0eSBkZXBlbmRzIG9uIHRoZSByZXF1ZXN0OiBpbXBlcnNvbmF0aW9uIGFza3Mgd2hldGhlciB0aGUgY2FsbGVyXG4gICAqIGlzIGEgc3lzYWRtaW4gT1IgYW4gYWRtaW4gb2YgYW4gYW5jZXN0b3Igb2YgdGhlIFRBUkdFVCB1c2VyJ3Mgb3JnLCB3aGljaCBpc1xuICAgKiBvbmx5IGFuc3dlcmFibGUgb25jZSB0aGUgdGFyZ2V0IGlzIGtub3duLiBUaG9zZSBnYXRlcyB3ZXJlIGNvcnJlY3QgYnV0XG4gICAqIGludmlzaWJsZSDigJQgdGhlIHJvdXRlIHRhYmxlIHNob3dlZCBubyByZXF1aXJlbWVudCwgYW5kXG4gICAqIGBkb2NzL3Blcm1pc3Npb24tY29udHJhY3QubWRgIGlzIGRlcml2ZWQgZnJvbSB0aGUgdGFibGUsIHNvIHRoZSBhcnRpZmFjdCB0aGVcbiAgICogcmVwbyBjYWxscyBpdHMgcmV2aWV3IHN1cmZhY2UgcmVhZCBibGFuayBmb3IgdGhlIHN0cm9uZ2VzdCBwcml2aWxlZ2UgaW4gdGhlXG4gICAqIHN5c3RlbS5cbiAgICpcbiAgICogVGhpcyByZWNvcmRzIHRoZSByZXF1aXJlbWVudCBpbiBwcm9zZSBBTkQgYXMgYSBjbG9zZWQgc2V0IG9mIHByaW5jaXBhbFxuICAgKiBraW5kcy4gSXQgYXV0aG9yaXplcyBOT1RISU5HOyB0aGUgaGFuZGxlciBzdGlsbCBkb2VzIHRoZSB3b3JrLiBJdHMgdmFsdWUgaXNcbiAgICogdGhhdCBhIHJldmlld2VyIHJlYWRpbmcgdGhlIGNvbnRyYWN0IHNlZXMgYSBzdGF0ZWQgcnVsZSBpbnN0ZWFkIG9mIGFuIGVtcHR5XG4gICAqIGNlbGwsIGFuZCB0aGF0IHJlbW92aW5nIHRoZSByZWFsIGNoZWNrIGxlYXZlcyBhIGRlY2xhcmF0aW9uIGJlaGluZCB0aGF0IG5vXG4gICAqIGxvbmdlciBtYXRjaGVzLlxuICAgKlxuICAgKiBXSFkgYHJlYWNoYWJsZUJ5YCBFWElTVFMgQkVTSURFIFRIRSBQUk9TRS4gUHJvc2UgaXMgdW5yZXZpZXdhYmxlIGJ5IGEgdGVzdCxcbiAgICogYW5kIG9uZSBvZiB0aGVzZSBydWxlcyB3YXMgd3Jvbmc6IHRoZSBpbXBlcnNvbmF0aW9uIGBkZWNpZGVgIHJvdXRlIGRlY2xhcmVkXG4gICAqIFwiYSBESUZGRVJFTlQgc3lzYWRtaW4gdGhhbiB0aGUgcmVxdWVzdGVyICh0d28tcGVyc29uIHJ1bGUpXCIsIHdoaWNoIGlzIG9ubHlcbiAgICogaXRzIGJyZWFrLWdsYXNzIGJyYW5jaCDigJQgdGhlIG9yZGluYXJ5IGJyYW5jaCBpcyB0aGUgdGVuYW50J3MgbmFtZWQgYXBwcm92ZXJcbiAgICogb3IgYSBnZW51aW5lIHRlbmFudCBhZG1pbiwgYW5kIGEgc3lzYWRtaW4gYWxvbmUgaXMgZXhwbGljaXRseSBSRUZVU0VEIHRoZXJlLlxuICAgKiBOb3RoaW5nIGNvdWxkIG5vdGljZSwgYmVjYXVzZSB0aGUgb25seSBtYWNoaW5lLXJlYWRhYmxlIGZpZWxkcyBzYWlkXG4gICAqIGBzeXN0ZW1BZG1pbjogZmFsc2UsIHBlcm1pc3Npb25zOiBbXWAuIEEgY2xvc2VkIHNldCBtYWtlcyB0aGUgYXV0aG9yXG4gICAqIGVudW1lcmF0ZSBwcmluY2lwYWxzLCBsZXRzIHRoZSBjb3ZlcmFnZSBzY2FuIGFzc2VydCB0aGUgZGVjbGFyYXRpb24gZXhpc3RzLFxuICAgKiBhbmQgbGV0cyBcIndoaWNoIHJvdXRlcyBjYW4gdGhlIHN1cGVyYWRtaW4gZmxhZyByZWFjaD9cIiBiZSBhbnN3ZXJlZCBieSBhXG4gICAqIHF1ZXJ5IGluc3RlYWQgb2YgYnkgcmVhZGluZyBzaXggcGFyYWdyYXBocy5cbiAgICovXG4gIHwgeyBraW5kOiAnZHluYW1pY0F1dGh6JzsgcnVsZTogc3RyaW5nOyByZWFjaGFibGVCeTogcmVhZG9ubHkgRHluYW1pY1ByaW5jaXBhbFtdOyBwZXJtaXNzaW9ucz86IHJlYWRvbmx5IFBlcm1pc3Npb25bXSB9XG4gIHwgeyBraW5kOiAnc2VydmljZVByaW5jaXBhbCcgfVxuICAvKiogQW4gSU5URVJOQUwgcm91dGU6IHVzZXIgdG9rZW5zIHJlZnVzZWQgb3V0cmlnaHQsIG9ubHkgdGhlc2Ugc2VydmljZXMgYWRtaXR0ZWQuICovXG4gIHwgeyBraW5kOiAnaW50ZXJuYWxTZXJ2aWNlJzsgY2FsbGVyczogcmVhZG9ubHkgc3RyaW5nW10gfVxuICB8IHsga2luZDogJ3N0ZXBVcCc7IG1ldGhvZHM/OiByZWFkb25seSBzdHJpbmdbXSB9XG4gIC8qKiBUaGUgd2hvbGUgU0VTU0lPTiBtdXN0IGJlIE1GQS1ncmFkZSAoYHJlcXVpcmVBdXRoKHsgbWluQXNzdXJhbmNlIH0pYCksIGFuZFxuICAgKiAgb3B0aW9uYWxseSBubyBvbGRlciB0aGFuIGBtYXhBZ2VgIHNlY29uZHMuIGBleGVtcHRgIG5hbWVzIGEgY2FydmUtb3V0IHRoZVxuICAgKiAgZ2F0ZSBhcHBsaWVzIHRvIGEgbmFycm93IGNsYXNzIG9mIHJlcXVlc3QgKHNlZSBgQXNzdXJhbmNlT3B0aW9ucy5leGVtcHRgKSxcbiAgICogIHNvIGEgcm91dGUgd2hvc2UgbGV2ZWwgaXMgY29uZGl0aW9uYWwgc2F5cyBzbyBvbiB0aGUgdGFibGUuICovXG4gIHwgeyBraW5kOiAnYXNzdXJhbmNlJzsgbWluQXNzdXJhbmNlOiAxIHwgMjsgbWF4QWdlPzogbnVtYmVyOyBleGVtcHQ/OiBzdHJpbmcgfVxuICAvKiogVGhlIHNlc3Npb24gbXVzdCBiZSBNRkEtZ3JhZGUgV0hFTiB0aGUgb3JnJ3MgYGFkbWluQWN0aW9uc1JlcXVpcmVNZmFgXG4gICAqICBwb2xpY3kgaXMgb24gKGByZXF1aXJlT3JnQWRtaW5Bc3N1cmFuY2VgKS4gYG1hY2hpbmVzYCBzYXlzIHdoYXQgYSBtYWNoaW5lXG4gICAqICBjcmVkZW50aWFsIG1lZXRzIG9uIHRoZSByb3V0ZSB3aGlsZSB0aGUgcG9saWN5IGlzIG9uLiAqL1xuICB8IHsga2luZDogJ29yZ0FkbWluQXNzdXJhbmNlJzsgbWFjaGluZXM6IE9yZ0FkbWluQXNzdXJhbmNlTWFjaGluZXMgfVxuICAvKiogVGhlIGNhbGxlcidzIEFDVElWRSBvcmcgbXVzdCBiZSB0aGUgc3lzdGVtIG9yZyAoYHJlcXVpcmVTeXN0ZW1PcmdgKSDigJQgdGhlXG4gICAqICBwbHVnaW4tZWNvc3lzdGVtIGdvdmVybmFuY2UgYm91bmRhcnkgKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiAqL1xuICB8IHsga2luZDogJ3N5c3RlbU9yZycgfVxuICB8IHsga2luZDogJ2ZlYXR1cmUnOyBmZWF0dXJlOiBzdHJpbmcgfVxuICB8IHsga2luZDogJ3Njb3BlJzsgc2NvcGU6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnYXVkaXQnOyBhY3Rpb25zOiByZWFkb25seSBzdHJpbmdbXSB9XG4gIC8qKiBBIHF1b3RhIG1pZGRsZXdhcmU6IGBtZXRlcmAgaW5jcmVtZW50cyB0aGUgdHlwZSBvbmNlIHBlciAyeHhcbiAgICogIChgbWV0ZXJRdW90YU9uU3VjY2Vzc2ApLCBgY2hlY2tgIDQyOXMgd2hlbiB0aGUgdHlwZSBpcyBzcGVudCAoYGNoZWNrUXVvdGFgKS5cbiAgICogIFJlY29yZGVkIHNvIHRoZSBxdW90YSBjb3ZlcmFnZSBjaGVjayBjYW4gc2VlIGFuIHVubWV0ZXJlZCB1c2VyIHJvdXRlIOKAlCBhbmQgYVxuICAgKiAgcm91dGUgbWV0ZXJlZCBUV0lDRSwgd2hpY2ggZG91YmxlLWJpbGxzIGV2ZXJ5IGNhbGwuICovXG4gIHwgeyBraW5kOiAncXVvdGEnOyBtb2RlOiAnbWV0ZXInIHwgJ2NoZWNrJzsgcXVvdGFUeXBlOiBzdHJpbmcgfTtcblxuLy8gU3ltYm9sLmZvciwgbm90IFN5bWJvbCgpOiBhIHRlc3QgdGhhdCBsb2FkcyBhcGktY29yZSB0d2ljZSAoRVNNICsgYVxuLy8gcmVxdWlyZUFjdHVhbCBjb3B5KSBtdXN0IHN0aWxsIHNlZSB0YWdzIHNldCBieSB0aGUgb3RoZXIgY29weS5cbmNvbnN0IEdBVEVTID0gU3ltYm9sLmZvcigncGlwZWxpbmUtYnVpbGRlci5yb3V0ZS1nYXRlcycpO1xuY29uc3QgTEFZRVJfUEFUSCA9IFN5bWJvbC5mb3IoJ3BpcGVsaW5lLWJ1aWxkZXIubGF5ZXItcGF0aCcpO1xuY29uc3QgUkVDT1JERVJfSU5TVEFMTEVEID0gU3ltYm9sLmZvcigncGlwZWxpbmUtYnVpbGRlci5yb3V0ZS1yZWNvcmRlcicpO1xuXG50eXBlIFRhZ2dlZCA9IHsgW0dBVEVTXT86IFJvdXRlR2F0ZVtdIH07XG5cbi8qKlxuICogQXR0YWNoIGdhdGUgbWV0YWRhdGEgdG8gYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIChhcHBlbmRzIHRvIGFueSBleGlzdGluZyB0YWdzKVxuICogYW5kIHJldHVybiB0aGUgc2FtZSBmdW5jdGlvbi4gVXNlIGl0IGZvciBhIHNlcnZpY2UtbG9jYWwgZ2F0ZSBzbyB0aGUgcm91dGVcbiAqIHRhYmxlIGtub3dzIHdoYXQgaXQgZW5mb3JjZXMg4oCUIGUuZy4gYSBoYW5kbGVyLWxldmVsIGByZXF1aXJlQ29tcGxpYW5jZVdyaXRlYFxuICogdGFnZ2VkIGB7IGtpbmQ6ICdwZXJtaXNzaW9uJywgbW9kZTogJ2FueScsIHBlcm1pc3Npb25zOiBbJ2NvbXBsaWFuY2U6d3JpdGUnXSB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ1JvdXRlR2F0ZTxUIGV4dGVuZHMgb2JqZWN0PihmbjogVCwgLi4uZ2F0ZXM6IFJvdXRlR2F0ZVtdKTogVCB7XG4gIGNvbnN0IHQgPSBmbiBhcyBUICYgVGFnZ2VkO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgR0FURVMsIHsgdmFsdWU6IFsuLi4odFtHQVRFU10gPz8gW10pLCAuLi5nYXRlc10sIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICByZXR1cm4gZm47XG59XG5cbi8qKiBUaGUgZ2F0ZSBtZXRhZGF0YSBhdHRhY2hlZCB0byBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gKGVtcHR5IHdoZW4gdW50YWdnZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlR2F0ZXMoZm46IHVua25vd24pOiByZWFkb25seSBSb3V0ZUdhdGVbXSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHJldHVybiBbXTtcbiAgcmV0dXJuIChmbiBhcyBUYWdnZWQpW0dBVEVTXSA/PyBbXTtcbn1cblxuLyoqXG4gKiBEZWNsYXJlIHRoZSBhdWRpdCBhY3Rpb24ocykgYSByb3V0ZSBlbWl0cy4gQSBuby1vcCBtaWRkbGV3YXJlIHdob3NlIG9ubHkgam9iXG4gKiBpcyB0byBwdXQgdGhlIGFjdGlvbiBvbiB0aGUgcm91dGUgdGFibGUsIHNvIHRoZSBjb3ZlcmFnZSB0ZXN0IGNhbiByZXF1aXJlIGFuXG4gKiBhdWRpdCBkZWNsYXJhdGlvbiBvbiBldmVyeSB3cml0ZSByb3V0ZS4gUGxhY2UgaXQgaW4gdGhlIHJvdXRlJ3MgY2hhaW46XG4gKiBgcm91dGVyLnBvc3QoJy8nLCBhdWRpdGVkKCdwaXBlbGluZS5jcmVhdGUnKSwgaGFuZGxlcilgLiBUaGUgaGFuZGxlciBzdGlsbFxuICogZW1pdHMgdGhlIGV2ZW50IGl0c2VsZi5cbiAqL1xuLyoqXG4gKiBEZWNsYXJlIGF1dGhvcml6YXRpb24gdGhhdCB0aGUgaGFuZGxlciByZXNvbHZlcyAoc2VlIHRoZSBgZHluYW1pY0F1dGh6YCBnYXRlKS5cbiAqIEEgbm8tb3AgbWlkZGxld2FyZSwgZXhhY3RseSBsaWtlIHtAbGluayBhdWRpdGVkfTogaXQgcmVjb3JkcyB0aGUgcnVsZSBvbiB0aGVcbiAqIHJvdXRlIHRhYmxlIHNvIHRoZSBjb250cmFjdCBjYW4gcHJpbnQgaXQuXG4gKlxuICogYHJ1bGVgIGlzIHJlYWQgYnkgYSBodW1hbiwgc28gaXQgc2hvdWxkIG5hbWUgdGhlIHJlYWwgcHJlZGljYXRlIOKAlCBlLmcuXG4gKiBgJ3N5c2FkbWluLCBvciBhbiBhZG1pbiBvZiBhbiBhbmNlc3RvciBvcmcgb2YgdGhlIHRhcmdldCB1c2VyJ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkeW5hbWljQXV0aHooXG4gIHJ1bGU6IHN0cmluZyxcbiAgb3B0czogeyByZWFjaGFibGVCeTogcmVhZG9ubHkgRHluYW1pY1ByaW5jaXBhbFtdOyBwZXJtaXNzaW9ucz86IHJlYWRvbmx5IFBlcm1pc3Npb25bXSB9LFxuKTogKHJlcTogdW5rbm93biwgcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgaWYgKG9wdHMucmVhY2hhYmxlQnkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkeW5hbWljQXV0aHooXCIke3J1bGV9XCIpIG11c3QgbmFtZSBhdCBsZWFzdCBvbmUgcHJpbmNpcGFsIGtpbmQgaW4gcmVhY2hhYmxlQnlgKTtcbiAgfVxuICBmb3IgKGNvbnN0IHAgb2Ygb3B0cy5yZWFjaGFibGVCeSkge1xuICAgIGlmICghRFlOQU1JQ19QUklOQ0lQQUxTLmluY2x1ZGVzKHApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGR5bmFtaWNBdXRoeihcIiR7cnVsZX1cIik6IHVua25vd24gcHJpbmNpcGFsIFwiJHtwfVwiIOKAlCBvbmUgb2YgJHtEWU5BTUlDX1BSSU5DSVBBTFMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ1JvdXRlR2F0ZShcbiAgICBmdW5jdGlvbiBkeW5hbWljQXV0aHpSb3V0ZShfcmVxOiB1bmtub3duLCBfcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSB7IG5leHQoKTsgfSxcbiAgICB7IGtpbmQ6ICdkeW5hbWljQXV0aHonLCBydWxlLCByZWFjaGFibGVCeTogWy4uLm9wdHMucmVhY2hhYmxlQnldLCAuLi4ob3B0cy5wZXJtaXNzaW9ucyAmJiB7IHBlcm1pc3Npb25zOiBbLi4ub3B0cy5wZXJtaXNzaW9uc10gfSkgfSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0ZWQoLi4uYWN0aW9uczogc3RyaW5nW10pOiAocmVxOiB1bmtub3duLCByZXM6IHVua25vd24sIG5leHQ6ICgpID0+IHZvaWQpID0+IHZvaWQge1xuICByZXR1cm4gdGFnUm91dGVHYXRlKGZ1bmN0aW9uIGF1ZGl0ZWRSb3V0ZShfcmVxOiB1bmtub3duLCBfcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSB7IG5leHQoKTsgfSwgeyBraW5kOiAnYXVkaXQnLCBhY3Rpb25zIH0pO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vdW50LXBhdGggcmVjb3JkaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIExheWVyIHtcbiAgaGFuZGxlOiB1bmtub3duO1xuICByb3V0ZT86IHsgcGF0aDogc3RyaW5nIHwgc3RyaW5nW107IG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+OyBzdGFjazogQXJyYXk8eyBtZXRob2Q/OiBzdHJpbmc7IGhhbmRsZTogdW5rbm93biB9PiB9O1xuICBtYXRjaGVyczogQXJyYXk8KHBhdGg6IHN0cmluZykgPT4gdW5rbm93bj47XG4gIC8qKiByb3V0ZXJAMidzIFwibW91bnRlZCBhdCAnLycgd2l0aCBlbmQ6ZmFsc2VcIiBmYXN0IHBhdGgg4oCUIG1hdGNoZXMgQU5ZIHBhdGguICovXG4gIHNsYXNoPzogYm9vbGVhbjtcbiAgW0xBWUVSX1BBVEhdPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUm91dGVyTGlrZSB7IHN0YWNrOiBMYXllcltdIH1cblxuZnVuY3Rpb24gaW5zdGFsbFJvdXRlUmVjb3JkZXIoKTogdm9pZCB7XG4gIGNvbnN0IHByb3RvID0gKGV4cHJlc3MuUm91dGVyIGFzIHVua25vd24gYXMgeyBwcm90b3R5cGU6IFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+IH0pLnByb3RvdHlwZTtcbiAgaWYgKHByb3RvW1JFQ09SREVSX0lOU1RBTExFRF0pIHJldHVybjtcbiAgY29uc3Qgb3JpZ2luYWxVc2UgPSBwcm90by51c2UgYXMgKHRoaXM6IFJvdXRlckxpa2UsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbiAgcHJvdG8udXNlID0gZnVuY3Rpb24gcmVjb3JkaW5nVXNlKHRoaXM6IFJvdXRlckxpa2UsIC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsVXNlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIC8vIFNhbWUgcGF0aCBkaXNhbWJpZ3VhdGlvbiBhcyByb3V0ZXJAMidzIGB1c2VgOiBhIGxlYWRpbmcgbm9uLWZ1bmN0aW9uXG4gICAgLy8gKHBvc3NpYmx5IG5lc3RlZCBpbiBhcnJheXMpIGlzIHRoZSBwYXRoOyBvdGhlcndpc2UgdGhlIG1vdW50IGlzICcvJy5cbiAgICBsZXQgZmlyc3Q6IHVua25vd24gPSBhcmdzWzBdO1xuICAgIHdoaWxlIChBcnJheS5pc0FycmF5KGZpcnN0KSAmJiBmaXJzdC5sZW5ndGggPiAwKSBmaXJzdCA9IGZpcnN0WzBdO1xuICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgZmlyc3QgPT09ICdmdW5jdGlvbicgPyAnLycgOiBTdHJpbmcoYXJnc1swXSk7XG4gICAgZm9yIChsZXQgaSA9IGJlZm9yZTsgaSA8IHRoaXMuc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnN0YWNrW2ldLCBMQVlFUl9QQVRILCB7IHZhbHVlOiBwYXRoLCBlbnVtZXJhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIFJFQ09SREVSX0lOU1RBTExFRCwgeyB2YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG59XG5cbmluc3RhbGxSb3V0ZVJlY29yZGVyKCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGFibGUgY29uc3RydWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFJlc29sdmVkIHJlcXVpcmVtZW50cyBmb3Igb25lIG1ldGhvZCArIHBhdGguICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVFbnRyeSB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKiBBdXRoZW50aWNhdGlvbiBydW5zIGJlZm9yZSB0aGUgaGFuZGxlciAocmVxdWlyZUF1dGgpLiAqL1xuICBhdXRoOiBib29sZWFuO1xuICAvKiogRWFjaCBwZXJtaXNzaW9uIGdhdGUgaW4gdGhlIGNoYWluIChhbGwgbXVzdCBwYXNzOyBlYWNoIGlzIGFueS1vZiBvciBhbGwtb2YpLiAqL1xuICBwZXJtaXNzaW9uczogQXJyYXk8eyBtb2RlOiAnYW55JyB8ICdhbGwnOyBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdOyBhbGxvd1NlcnZpY2U6IGJvb2xlYW4gfT47XG4gIHN5c3RlbUFkbWluOiBib29sZWFuO1xuICBzZXJ2aWNlUHJpbmNpcGFsOiBib29sZWFuO1xuICAvKiogQXV0aG9yaXphdGlvbiB0aGUgSEFORExFUiByZXNvbHZlcywgaW4gcHJvc2Ug4oCUIHNlZSB0aGUgYGR5bmFtaWNBdXRoemAgZ2F0ZS5cbiAgICogIEVtcHR5IHdoZW4gdGhlIHJvdXRlJ3MgYXV0aG9yaXR5IGlzIGZ1bGx5IGV4cHJlc3NlZCBieSB0aGUgZ2F0ZXMgYWJvdmUuICovXG4gIGR5bmFtaWNBdXRoejogc3RyaW5nW107XG4gIC8qKiBUaGUgcHJpbmNpcGFsIGtpbmRzIHRob3NlIGR5bmFtaWMgcnVsZXMgYWRtaXQsIGRlZHVwZWQgYW5kIHNvcnRlZC4gQWJzZW50XG4gICAqICB3aGVuIHRoZSByb3V0ZSBkZWNsYXJlcyBubyBkeW5hbWljIHJ1bGUsIHNvIHRhYmxlcyB3aXRob3V0IG9uZSBhcmVcbiAgICogIHVuY2hhbmdlZC4gVGhpcyBpcyB0aGUgbWFjaGluZS1yZWFkYWJsZSBoYWxmIG9mIGBkeW5hbWljQXV0aHpgOiBpdCBpcyBob3dcbiAgICogIFwid2hpY2ggcm91dGVzIGNhbiB0aGUgc3VwZXJhZG1pbiBmbGFnIHJlYWNoP1wiIGlzIGFuc3dlcmFibGUgd2l0aG91dFxuICAgKiAgcmVhZGluZyBwcm9zZS4gKi9cbiAgZHluYW1pY1JlYWNoYWJsZUJ5PzogRHluYW1pY1ByaW5jaXBhbFtdO1xuICAvKiogUGVybWlzc2lvbiBpZHMgYSBkeW5hbWljIHJ1bGUgY29uc3VsdHMgaW5zaWRlIHRoZSBoYW5kbGVyLCBkZWR1cGVkIGFuZFxuICAgKiAgc29ydGVkLiBBYnNlbnQgd2hlbiBub25lIGRvZXMuIFRoZXNlIGFyZSBSRUFMIGVuZm9yY2VtZW50IOKAlCB0aGUgY292ZXJhZ2VcbiAgICogIHNjYW4gY291bnRzIGEgYHVzZXJIYXNQZXJtaXNzaW9uKHJlcSwgJ3gnKWAgaW4gYSBjb250cm9sbGVyIOKAlCBzbyB0aGVcbiAgICogIGNvbnRyYWN0IHNob3VsZCBub3QgcmVhZCBhcyB0aG91Z2ggdGhlIHJvdXRlIGFza2VkIGZvciBub3RoaW5nLiAqL1xuICBkeW5hbWljUGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gIC8qKlxuICAgKiBUaGUgc2VydmljZXMgYWxsb3dlZCB0byBjYWxsIHRoaXMgcm91dGUgd2hlbiBpdCBpcyBJTlRFUk5BTCAoYHJlcXVpcmVJbnRlcm5hbFNlcnZpY2VgKS5cbiAgICogQW4gZW1wdHkgYXJyYXkgbWVhbnMgdGhlIHJvdXRlIGlzIG5vdCBpbnRlcm5hbCDigJQgYSB1c2VyIHRva2VuIG1heSByZWFjaCBpdCxcbiAgICogc3ViamVjdCB0byB0aGUgb3RoZXIgZ2F0ZXMuIFNvcnRlZCwgc28gdGhlIGdlbmVyYXRlZCB0YWJsZSBpcyBzdGFibGUuXG4gICAqL1xuICBpbnRlcm5hbENhbGxlcnM6IHN0cmluZ1tdO1xuICBzdGVwVXA6IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRoZSBzdGVwLXVwIGdhdGUgbmFtZXMgdGhlIGZhY3RvcnMgdGhhdCBtYXkgZWFybiBpdCAoYFsnd2ViYXV0aG4nLFxuICAgKiAgJ3RvdHAnXWAgb24gdGhlIG1vc3QgZGFuZ2Vyb3VzIHJvdXRlcyksIHRoZSBhbGxvd2VkIG1ldGhvZHMuIEVtcHR5IG1lYW5zXG4gICAqICBhbnkgZmFjdG9yIHNhdGlzZmllcyBpdC4gU29ydGVkLCBzbyB0aGUgZ2VuZXJhdGVkIHRhYmxlIGlzIHN0YWJsZS4gKi9cbiAgc3RlcFVwTWV0aG9kczogc3RyaW5nW107XG4gIC8qKiBIaWdoZXN0IGBtaW5Bc3N1cmFuY2VgIGFueSBnYXRlIGluIHRoZSBjaGFpbiBkZW1hbmRzOyAwIHdoZW4gbm9uZSBkb2VzLiAqL1xuICBtaW5Bc3N1cmFuY2U6IDAgfCAxIHwgMjtcbiAgLyoqIFRpZ2h0ZXN0IGBtYXhBZ2VgIChzZWNvbmRzKSBhbnkgYXNzdXJhbmNlIGdhdGUgaW4gdGhlIGNoYWluIGRlbWFuZHMuICovXG4gIG1heEFnZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBuYW1lZCBjYXJ2ZS1vdXRzIHRoZSBjaGFpbidzIGFzc3VyYW5jZSBnYXRlcyBhbGxvdyAoc29ydGVkKS4gQWJzZW50IHdoZW5cbiAgICogdGhlcmUgYXJlIG5vbmUsIHNvIGEgdGFibGUgb2Ygcm91dGVzIHdpdGhvdXQgb25lIGlzIHVuY2hhbmdlZC4gQSByZXZpZXdlclxuICAgKiByZWFkaW5nIGBtaW5Bc3N1cmFuY2U6IDJgIG5leHQgdG8gYGFzc3VyYW5jZUV4ZW1wdDogW1wiYm9vdHN0cmFwLXNldHVwXCJdYFxuICAgKiBrbm93cyB0aGUgbGV2ZWwgaXMgcmVxdWlyZWQgb2YgZXZlcnlvbmUgRVhDRVBUIHRoYXQgbmFtZWQgY2FzZS5cbiAgICovXG4gIGFzc3VyYW5jZUV4ZW1wdD86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSByb3V0ZSByZXF1aXJlcyBhbiBNRkEtZ3JhZGUgc2Vzc2lvbiBXSEVOIHRoZSBvcmcnc1xuICAgKiBgYWRtaW5BY3Rpb25zUmVxdWlyZU1mYWAgcG9saWN5IGlzIG9uIChgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlYCksIHdpdGhcbiAgICogd2hhdCBhIG1hY2hpbmUgY3JlZGVudGlhbCBtZWV0cyB0aGVyZS4gQWJzZW50IChub3QgYGZhbHNlYCkgb3RoZXJ3aXNlLCBzb1xuICAgKiB0aGUgdGFibGUgb2YgYSBzZXJ2aWNlIHRoYXQgdXNlcyBubyBzdWNoIGdhdGUgaXMgdW5jaGFuZ2VkLlxuICAgKi9cbiAgb3JnQWRtaW5Bc3N1cmFuY2U/OiB7IG1hY2hpbmVzOiBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzIH07XG4gIC8qKlxuICAgKiBQcmVzZW50IChhbHdheXMgYHRydWVgKSB3aGVuIHRoZSBjaGFpbiBydW5zIGByZXF1aXJlU3lzdGVtT3JnYDogb25seSBhXG4gICAqIGNhbGxlciB3aG9zZSBhY3RpdmUgb3JnIGlzIHRoZSBzeXN0ZW0gb3JnIGdldHMgdGhyb3VnaC4gQWJzZW50IG90aGVyd2lzZSxcbiAgICogc28gdGhlIHRhYmxlIG9mIGEgc2VydmljZSB3aXRoIG5vIGVjb3N5c3RlbS1nb3Zlcm5hbmNlIHJvdXRlIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIHN5c3RlbU9yZz86IHRydWU7XG4gIGZlYXR1cmVzOiBzdHJpbmdbXTtcbiAgc2NvcGVzOiBzdHJpbmdbXTtcbiAgYXVkaXQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIHF1b3RhIG1pZGRsZXdhcmUgaW4gdGhlIGNoYWluOiB0aGUgdHlwZXMgbWV0ZXJlZCAob25jZSBwZXIgMnh4KSBhbmRcbiAgICogY2hlY2tlZCAoNDI5IHdoZW4gc3BlbnQpLiBgbWV0ZXJlZGAgaXMgTk9UIGRlZHVwZWQg4oCUIGEgdHlwZSBsaXN0ZWQgdHdpY2UgaXNcbiAgICogbWV0ZXJlZCB0d2ljZSwgd2hpY2ggdGhlIGNvdmVyYWdlIGNoZWNrIGZsYWdzLiBgZXhlbXB0YCBtYXJrcyBhIHJvdXRlIG9uIHRoZVxuICAgKiBmbGVldC13aWRlIGBRVU9UQV9FWEVNUFRfUk9VVEVTYCBsaXN0LCB3aGVyZSB0aGUgYGFwaUNhbGxzYCBtZXRlciBhbmQgY2hlY2tcbiAgICogYXJlIG5vLW9wcyBhdCBydW50aW1lIChzbyBgYXBpQ2FsbHNgIGlzIGxlZnQgb3V0IG9mIGJvdGggbGlzdHMpLiBBYnNlbnQgd2hlblxuICAgKiB0aGUgY2hhaW4gaGFzIG5vIHF1b3RhIG1pZGRsZXdhcmUgYW5kIHRoZSByb3V0ZSBpcyBub3QgZXhlbXB0LlxuICAgKi9cbiAgcXVvdGE/OiB7IG1ldGVyZWQ6IHN0cmluZ1tdOyBjaGVja2VkOiBzdHJpbmdbXTsgZXhlbXB0PzogdHJ1ZSB9O1xufVxuXG5pbnRlcmZhY2UgQ2FuZGlkYXRlIHsgbGF5ZXI6IExheWVyOyBwcmVmaXg6IHN0cmluZyB9XG5cbmZ1bmN0aW9uIGpvaW5QYXRoKHByZWZpeDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBqb2luZWQgPSBgJHtwcmVmaXgucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cGF0aC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gO1xuICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDEgPyBqb2luZWQucmVwbGFjZSgvXFwvKyQvLCAnJykgOiAnLyc7XG59XG5cbmZ1bmN0aW9uIGlzUm91dGVyKGhhbmRsZTogdW5rbm93bik6IGhhbmRsZSBpcyBSb3V0ZXJMaWtlIHtcbiAgcmV0dXJuIHR5cGVvZiBoYW5kbGUgPT09ICdmdW5jdGlvbicgJiYgQXJyYXkuaXNBcnJheSgoaGFuZGxlIGFzIFBhcnRpYWw8Um91dGVyTGlrZT4pLnN0YWNrKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgbWlkZGxld2FyZSBsYXllciAobW91bnRlZCB1bmRlciBgcHJlZml4YCkgcnVucyBmb3IgYGZ1bGxQYXRoYC5cbiAqIE1pcnJvcnMgYExheWVyLnByb3RvdHlwZS5tYXRjaGAsIGluY2x1ZGluZyBpdHMgZmFzdCBwYXRoOiBhIGxheWVyIGFkZGVkIHdpdGhcbiAqIG5vIHBhdGggKGByb3V0ZXIudXNlKGdhdGUpYCkgbWF0Y2hlcyBFVkVSWSBwYXRoIHVuZGVyIGl0cyByb3V0ZXIg4oCUIHdoaWNoIGlzXG4gKiBleGFjdGx5IGhvdyB0aGUgc2hhcmVkIGByZXF1aXJlUGVybWlzc2lvbmAgZ2F0ZXMgYmV0d2VlbiB0d28gYHJvdXRlci51c2UoLi4uKWBcbiAqIG1vdW50cyByZWFjaCB0aGUgcm91dGVycyByZWdpc3RlcmVkIGFmdGVyIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIGFwcGxpZXMoYzogQ2FuZGlkYXRlLCBmdWxsUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2UgPSBjLnByZWZpeCA9PT0gJy8nID8gJycgOiBjLnByZWZpeDtcbiAgaWYgKGJhc2UgJiYgZnVsbFBhdGggIT09IGJhc2UgJiYgIWZ1bGxQYXRoLnN0YXJ0c1dpdGgoYCR7YmFzZX0vYCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKGMubGF5ZXIuc2xhc2gpIHJldHVybiB0cnVlO1xuICBjb25zdCByZWwgPSBmdWxsUGF0aC5zbGljZShiYXNlLmxlbmd0aCkgfHwgJy8nO1xuICByZXR1cm4gYy5sYXllci5tYXRjaGVycy5zb21lKChtKSA9PiBtKHJlbCkgIT09IGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdEdhdGVzKGZuczogdW5rbm93bltdKTogUm91dGVHYXRlW10ge1xuICByZXR1cm4gZm5zLmZsYXRNYXAoKGZuKSA9PiBnZXRSb3V0ZUdhdGVzKGZuKSk7XG59XG5cbmZ1bmN0aW9uIHRvRW50cnkobWV0aG9kOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgZ2F0ZXM6IFJvdXRlR2F0ZVtdKTogUm91dGVUYWJsZUVudHJ5IHtcbiAgY29uc3QgZW50cnk6IFJvdXRlVGFibGVFbnRyeSA9IHtcbiAgICBtZXRob2QsXG4gICAgcGF0aCxcbiAgICBhdXRoOiBmYWxzZSxcbiAgICBwZXJtaXNzaW9uczogW10sXG4gICAgc3lzdGVtQWRtaW46IGZhbHNlLFxuICAgIHNlcnZpY2VQcmluY2lwYWw6IGZhbHNlLFxuICAgIGR5bmFtaWNBdXRoejogW10sXG4gICAgaW50ZXJuYWxDYWxsZXJzOiBbXSxcbiAgICBzdGVwVXA6IGZhbHNlLFxuICAgIHN0ZXBVcE1ldGhvZHM6IFtdLFxuICAgIG1pbkFzc3VyYW5jZTogMCxcbiAgICBmZWF0dXJlczogW10sXG4gICAgc2NvcGVzOiBbXSxcbiAgICBhdWRpdDogW10sXG4gIH07XG4gIGZvciAoY29uc3QgZyBvZiBnYXRlcykge1xuICAgIHN3aXRjaCAoZy5raW5kKSB7XG4gICAgICBjYXNlICdhdXRoJzogZW50cnkuYXV0aCA9IHRydWU7IGJyZWFrO1xuICAgICAgY2FzZSAncGVybWlzc2lvbic6IGVudHJ5LnBlcm1pc3Npb25zLnB1c2goeyBtb2RlOiBnLm1vZGUsIHBlcm1pc3Npb25zOiBbLi4uZy5wZXJtaXNzaW9uc10sIGFsbG93U2VydmljZTogZy5hbGxvd1NlcnZpY2UgPT09IHRydWUgfSk7IGJyZWFrO1xuICAgICAgY2FzZSAnc3lzdGVtQWRtaW4nOiBlbnRyeS5zeXN0ZW1BZG1pbiA9IHRydWU7IGJyZWFrO1xuICAgICAgY2FzZSAnc2VydmljZVByaW5jaXBhbCc6IGVudHJ5LnNlcnZpY2VQcmluY2lwYWwgPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ2R5bmFtaWNBdXRoeic6XG4gICAgICAgIGlmICghZW50cnkuZHluYW1pY0F1dGh6LmluY2x1ZGVzKGcucnVsZSkpIGVudHJ5LmR5bmFtaWNBdXRoei5wdXNoKGcucnVsZSk7XG4gICAgICAgIGVudHJ5LmR5bmFtaWNSZWFjaGFibGVCeSA9IFsuLi5uZXcgU2V0KFsuLi4oZW50cnkuZHluYW1pY1JlYWNoYWJsZUJ5ID8/IFtdKSwgLi4uZy5yZWFjaGFibGVCeV0pXS5zb3J0KCk7XG4gICAgICAgIGlmIChnLnBlcm1pc3Npb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICBlbnRyeS5keW5hbWljUGVybWlzc2lvbnMgPSBbLi4ubmV3IFNldChbLi4uKGVudHJ5LmR5bmFtaWNQZXJtaXNzaW9ucyA/PyBbXSksIC4uLmcucGVybWlzc2lvbnNdKV0uc29ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW50ZXJuYWxTZXJ2aWNlJzogZm9yIChjb25zdCBjIG9mIGcuY2FsbGVycykgaWYgKCFlbnRyeS5pbnRlcm5hbENhbGxlcnMuaW5jbHVkZXMoYykpIGVudHJ5LmludGVybmFsQ2FsbGVycy5wdXNoKGMpOyBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBVcCc6XG4gICAgICAgIGVudHJ5LnN0ZXBVcCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBnLm1ldGhvZHMgPz8gW10pIGlmICghZW50cnkuc3RlcFVwTWV0aG9kcy5pbmNsdWRlcyhtKSkgZW50cnkuc3RlcFVwTWV0aG9kcy5wdXNoKG0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc3VyYW5jZSc6XG4gICAgICAgIC8vIFNldmVyYWwgZ2F0ZXMgbWF5IGFwcGx5OyB0aGUgU1RSSUNURVNUIHdpbnMsIHNpbmNlIGV2ZXJ5IG9uZSBvZiB0aGVtIHJ1bnMuXG4gICAgICAgIGlmIChnLm1pbkFzc3VyYW5jZSA+IGVudHJ5Lm1pbkFzc3VyYW5jZSkgZW50cnkubWluQXNzdXJhbmNlID0gZy5taW5Bc3N1cmFuY2U7XG4gICAgICAgIGlmIChnLm1heEFnZSAhPT0gdW5kZWZpbmVkKSBlbnRyeS5tYXhBZ2UgPSBlbnRyeS5tYXhBZ2UgPT09IHVuZGVmaW5lZCA/IGcubWF4QWdlIDogTWF0aC5taW4oZW50cnkubWF4QWdlLCBnLm1heEFnZSk7XG4gICAgICAgIGlmIChnLmV4ZW1wdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW50cnkuYXNzdXJhbmNlRXhlbXB0ID0gWy4uLm5ldyBTZXQoWy4uLihlbnRyeS5hc3N1cmFuY2VFeGVtcHQgPz8gW10pLCBnLmV4ZW1wdF0pXS5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvcmdBZG1pbkFzc3VyYW5jZSc6XG4gICAgICAgIC8vIFN0cmljdGVzdCB3aW5zOiBvbmUgYHJlZnVzZWAgaW4gdGhlIGNoYWluIHJlZnVzZXMgbWFjaGluZXMuXG4gICAgICAgIGVudHJ5Lm9yZ0FkbWluQXNzdXJhbmNlID0ge1xuICAgICAgICAgIG1hY2hpbmVzOiBlbnRyeS5vcmdBZG1pbkFzc3VyYW5jZT8ubWFjaGluZXMgPT09ICdyZWZ1c2UnIHx8IGcubWFjaGluZXMgPT09ICdyZWZ1c2UnID8gJ3JlZnVzZScgOiAnYWxsb3cnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N5c3RlbU9yZyc6IGVudHJ5LnN5c3RlbU9yZyA9IHRydWU7IGJyZWFrO1xuICAgICAgY2FzZSAnZmVhdHVyZSc6IGlmICghZW50cnkuZmVhdHVyZXMuaW5jbHVkZXMoZy5mZWF0dXJlKSkgZW50cnkuZmVhdHVyZXMucHVzaChnLmZlYXR1cmUpOyBicmVhaztcbiAgICAgIGNhc2UgJ3Njb3BlJzogaWYgKCFlbnRyeS5zY29wZXMuaW5jbHVkZXMoZy5zY29wZSkpIGVudHJ5LnNjb3Blcy5wdXNoKGcuc2NvcGUpOyBicmVhaztcbiAgICAgIGNhc2UgJ2F1ZGl0JzogZm9yIChjb25zdCBhIG9mIGcuYWN0aW9ucykgaWYgKCFlbnRyeS5hdWRpdC5pbmNsdWRlcyhhKSkgZW50cnkuYXVkaXQucHVzaChhKTsgYnJlYWs7XG4gICAgICBjYXNlICdxdW90YSc6IHtcbiAgICAgICAgY29uc3QgcXVvdGEgPSBlbnRyeS5xdW90YSA/PyAoZW50cnkucXVvdGEgPSB7IG1ldGVyZWQ6IFtdLCBjaGVja2VkOiBbXSB9KTtcbiAgICAgICAgaWYgKGcubW9kZSA9PT0gJ21ldGVyJykgcXVvdGEubWV0ZXJlZC5wdXNoKGcucXVvdGFUeXBlKTtcbiAgICAgICAgZWxzZSBpZiAoIXF1b3RhLmNoZWNrZWQuaW5jbHVkZXMoZy5xdW90YVR5cGUpKSBxdW90YS5jaGVja2VkLnB1c2goZy5xdW90YVR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIEEgR0FURSBLSU5EIFRIQVQgUkVBQ0hFUyBIRVJFIFdPVUxEIEJFIElOVklTSUJMRSwgd2hpY2ggaXMgdGhlIG9uZVxuICAgICAgLy8gZmFpbHVyZSB0aGlzIHRhYmxlIGNhbm5vdCBhZmZvcmQuIGBkb2NzL3Blcm1pc3Npb24tY2F0YWxvZ2AgYW5kIHRoZVxuICAgICAgLy8gcGVybWlzc2lvbiBjb250cmFjdCBhcmUgYm90aCBERVJJVkVEIGZyb20gdGhlc2UgZW50cmllcywgc28gYSBraW5kXG4gICAgICAvLyBub3RoaW5nIHByb2plY3RzIGxlYXZlcyB0aGUgcm91dGUncyBjZWxsIGJsYW5rIOKAlCBhbmQgdGhlIGNvbnRyYWN0J3NcbiAgICAgIC8vIFwiYSB3ZWFrZW5pbmcgZmFpbHMgSEVSRVwiIHRlc3QgdGhlbiBwYXNzZXMgb3ZlciBhIHJvdXRlIHdob3NlIHJlYWxcbiAgICAgIC8vIHJlcXVpcmVtZW50IGl0IG5ldmVyIHNhdy4gVGhhdCBpcyBleGFjdGx5IHdoYXQgdGhlIGR5bmFtaWNBdXRoeiBub3RlXG4gICAgICAvLyBhYm92ZSByZWNvcmRzIHBheWluZyBmb3Igb25jZTogZ2F0ZXMgdGhhdCB3ZXJlIGNvcnJlY3QgYnV0IGludmlzaWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBTbyB0aGlzIGlzIGEgY29tcGlsZSBlcnJvciwgbm90IGEgcnVudGltZSBvbmU6IGFkZGluZyBhIG1lbWJlciB0b1xuICAgICAgLy8gYFJvdXRlR2F0ZWAgZmFpbHMgdGhlIGJ1aWxkIHVudGlsIHNvbWVvbmUgZGVjaWRlcyBob3cgaXQgYXBwZWFycyBpbiB0aGVcbiAgICAgIC8vIHRhYmxlLiBUaGUgdGhyb3cgaXMgdW5yZWFjaGFibGUgZXhjZXB0IHRocm91Z2ggYSBjYXN0LlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBnO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucHJvamVjdGVkIHJvdXRlIGdhdGUga2luZDogJHtKU09OLnN0cmluZ2lmeShfZXhoYXVzdGl2ZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFuIGV4ZW1wdCByb3V0ZSdzIGFwaUNhbGxzIG1ldGVyICsgY2hlY2sgc2tpcCBpdCBhdCBydW50aW1lLCBzbyB0aGUgdGFibGVcbiAgLy8gc2F5cyB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgcmF0aGVyIHRoYW4gd2hhdCBpcyBtb3VudGVkLlxuICBpZiAoaXNRdW90YUV4ZW1wdFJvdXRlKG1ldGhvZCwgcGF0aCkpIHtcbiAgICBjb25zdCBxdW90YSA9IGVudHJ5LnF1b3RhID8/IHsgbWV0ZXJlZDogW10sIGNoZWNrZWQ6IFtdIH07XG4gICAgZW50cnkucXVvdGEgPSB7XG4gICAgICBtZXRlcmVkOiBxdW90YS5tZXRlcmVkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBjaGVja2VkOiBxdW90YS5jaGVja2VkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBleGVtcHQ6IHRydWUsXG4gICAgfTtcbiAgfVxuICBlbnRyeS5pbnRlcm5hbENhbGxlcnMuc29ydCgpO1xuICBlbnRyeS5zdGVwVXBNZXRob2RzLnNvcnQoKTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG5mdW5jdGlvbiB3YWxrKHN0YWNrOiBMYXllcltdLCBwcmVmaXg6IHN0cmluZywgaW5oZXJpdGVkOiBDYW5kaWRhdGVbXSwgb3V0OiBSb3V0ZVRhYmxlRW50cnlbXSwgc2VlbjogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgbG9jYWw6IENhbmRpZGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgbGF5ZXIgb2Ygc3RhY2spIHtcbiAgICBpZiAobGF5ZXIucm91dGUpIHtcbiAgICAgIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShsYXllci5yb3V0ZS5wYXRoKSA/IGxheWVyLnJvdXRlLnBhdGggOiBbbGF5ZXIucm91dGUucGF0aF07XG4gICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMobGF5ZXIucm91dGUubWV0aG9kcykubWFwKChtKSA9PiAobSA9PT0gJ19hbGwnID8gJyonIDogbS50b1VwcGVyQ2FzZSgpKSk7XG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiBwYXRocykge1xuICAgICAgICBjb25zdCBmdWxsID0gam9pblBhdGgocHJlZml4LCBTdHJpbmcocm91dGVQYXRoKSk7XG4gICAgICAgIGNvbnN0IGNoYWluID0gWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLmZpbHRlcigoYykgPT4gYXBwbGllcyhjLCBmdWxsKSkubWFwKChjKSA9PiBjLmxheWVyLmhhbmRsZSk7XG4gICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBgJHttZXRob2R9ICR7ZnVsbH1gO1xuICAgICAgICAgIC8vIEZpcnN0IHJlZ2lzdHJhdGlvbiB3aW5zLCBhcyBpbiBFeHByZXNzOiBhIGxhdGVyIGR1cGxpY2F0ZSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgICAgICBjb25zdCByb3V0ZUZucyA9IGxheWVyLnJvdXRlLnN0YWNrXG4gICAgICAgICAgICAuZmlsdGVyKChsKSA9PiBsLm1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8IGwubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IG1ldGhvZCB8fCBtZXRob2QgPT09ICcqJylcbiAgICAgICAgICAgIC5tYXAoKGwpID0+IGwuaGFuZGxlKTtcbiAgICAgICAgICBvdXQucHVzaCh0b0VudHJ5KG1ldGhvZCwgZnVsbCwgY29sbGVjdEdhdGVzKFsuLi5jaGFpbiwgLi4ucm91dGVGbnNdKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1JvdXRlcihsYXllci5oYW5kbGUpKSB7XG4gICAgICBjb25zdCBtb3VudFBhdGggPSBqb2luUGF0aChwcmVmaXgsIGxheWVyW0xBWUVSX1BBVEhdID8/ICcvJyk7XG4gICAgICAvLyBNaWRkbGV3YXJlIHRoYXQgcnVucyBiZWZvcmUgdGhpcyByb3V0ZXIgKGFuY2VzdG9ycyArIGVhcmxpZXIgc2libGluZ3MpXG4gICAgICAvLyBpcyBpbmhlcml0ZWQ7IGFwcGxpY2FiaWxpdHkgaXMgcmUtY2hlY2tlZCBhZ2FpbnN0IGVhY2ggZnVsbCByb3V0ZSBwYXRoLlxuICAgICAgd2FsayhsYXllci5oYW5kbGUuc3RhY2ssIG1vdW50UGF0aCwgWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLCBvdXQsIHNlZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbC5wdXNoKHsgbGF5ZXIsIHByZWZpeCB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgcm91dGUgdGFibGUgb2YgYW4gYXNzZW1ibGVkIEV4cHJlc3MgYXBwIChvciByb3V0ZXIpOiBvbmUgZW50cnkgcGVyXG4gKiByZWFjaGFibGUgbWV0aG9kICsgcGF0aCB3aXRoIGV2ZXJ5IGdhdGUgdGhhdCBydW5zIGJlZm9yZSBpdHMgaGFuZGxlci5cbiAqIEhFQUQgaXMgZm9sZGVkIGludG8gR0VULCBhcyBFeHByZXNzIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJvdXRlVGFibGUoYXBwOiB1bmtub3duKTogUm91dGVUYWJsZUVudHJ5W10ge1xuICBjb25zdCByb290ID0gKGFwcCBhcyB7IHJvdXRlcj86IFJvdXRlckxpa2UgfSkucm91dGVyID8/IChhcHAgYXMgUm91dGVyTGlrZSk7XG4gIGNvbnN0IG91dDogUm91dGVUYWJsZUVudHJ5W10gPSBbXTtcbiAgaWYgKCFyb290IHx8ICFBcnJheS5pc0FycmF5KHJvb3Quc3RhY2spKSByZXR1cm4gb3V0O1xuICB3YWxrKHJvb3Quc3RhY2ssICcvJywgW10sIG91dCwgbmV3IFNldCgpKTtcbiAgcmV0dXJuIG91dC5zb3J0KChhLCBiKSA9PiAoYS5wYXRoID09PSBiLnBhdGggPyBhLm1ldGhvZC5sb2NhbGVDb21wYXJlKGIubWV0aG9kKSA6IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpKTtcbn1cblxuLyoqIFdoZXRoZXIgYSBtZXRob2QgbXV0YXRlcyBzdGF0ZSAoZXZlcnl0aGluZyBleGNlcHQgR0VUL0hFQUQvT1BUSU9OUykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXcml0ZU1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIVsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUyddLmluY2x1ZGVzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKTtcbn1cblxuLyoqIFN1bW1hcnkgY291bnRzIGZvciBhIHN0YXJ0dXAgbG9nIGxpbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplUm91dGVUYWJsZSh0YWJsZTogcmVhZG9ubHkgUm91dGVUYWJsZUVudHJ5W10pOiB7IHJvdXRlczogbnVtYmVyOyB3cml0ZXM6IG51bWJlcjsgdW5nYXRlZDogbnVtYmVyOyB1bmF1ZGl0ZWQ6IG51bWJlcjsgaW50ZXJuYWw6IG51bWJlciB9IHtcbiAgY29uc3QgZ2F0ZWQgPSAoZTogUm91dGVUYWJsZUVudHJ5KTogYm9vbGVhbiA9PiBlLnBlcm1pc3Npb25zLmxlbmd0aCA+IDAgfHwgZS5zeXN0ZW1BZG1pbiB8fCBlLnNlcnZpY2VQcmluY2lwYWwgfHwgZS5keW5hbWljQXV0aHoubGVuZ3RoID4gMDtcbiAgY29uc3Qgd3JpdGVzID0gdGFibGUuZmlsdGVyKChlKSA9PiBpc1dyaXRlTWV0aG9kKGUubWV0aG9kKSk7XG4gIHJldHVybiB7XG4gICAgcm91dGVzOiB0YWJsZS5sZW5ndGgsXG4gICAgd3JpdGVzOiB3cml0ZXMubGVuZ3RoLFxuICAgIHVuZ2F0ZWQ6IHRhYmxlLmZpbHRlcigoZSkgPT4gIWdhdGVkKGUpKS5sZW5ndGgsXG4gICAgdW5hdWRpdGVkOiB3cml0ZXMuZmlsdGVyKChlKSA9PiBlLmF1ZGl0Lmxlbmd0aCA9PT0gMCkubGVuZ3RoLFxuICAgIGludGVybmFsOiB0YWJsZS5maWx0ZXIoKGUpID0+IGUuaW50ZXJuYWxDYWxsZXJzLmxlbmd0aCA+IDApLmxlbmd0aCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -157,4 +157,4 @@ export function verifyServicePrincipal(req) {
|
|
|
157
157
|
return false;
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS10b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOztHQUVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JILE9BQU8sRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQW1CLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELDhFQUE4RTtBQUM5RSw0QkFBNEI7QUFDNUIsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSxzRUFBc0U7QUFDdEUsOEVBQThFO0FBQzlFLGdGQUFnRjtBQUNoRiw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCw2RUFBNkU7QUFDN0UsK0RBQStEO0FBQy9ELGtGQUFrRjtBQUNsRiw4Q0FBOEM7QUFDOUMsRUFBRTtBQUNGLHlFQUF5RTtBQUN6RSxpREFBaUQ7QUFDakQsOEVBQThFO0FBRTlFLE1BQU0saUNBQWlDLEdBQUcsR0FBRyxDQUFDO0FBRTlDOzs7Ozs7R0FNRztBQUNILE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQ2xDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUM7S0FDdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQztLQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFB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QUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2VydmljZS10by1zZXJ2aWNlIHRva2VucyBhbmQgc2VydmljZS1wcmluY2lwYWwgY2hlY2tzLlxuICovXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBoYXNWYWxpZElkZW50aXR5Q2xhaW1zLCBpc3N1ZXJBdWRpZW5jZU9wdGlvbnMgfSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuaW1wb3J0IHsgU0VSVklDRV9TVUJKRUNUX1BSRUZJWCwgaXNTZXJ2aWNlS2lkLCBzaWduU2VydmljZUp3dCwgdmVyaWZ5U2VydmljZUp3dCB9IGZyb20gJy4uL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy5qcyc7XG5pbXBvcnQgeyB0eXBlIEp3dFBheWxvYWQgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgdHlwZSBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vdHlwZXMvcGVybWlzc2lvbnMuanMnO1xuaW1wb3J0IHsgZGVjb2RlSnd0SGVhZGVyIH0gZnJvbSAnLi4vdXRpbHMvandrLmpzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VydmljZS10by1zZXJ2aWNlIHRva2Vuc1xuLy9cbi8vIEludGVyLXNlcnZpY2UgSFRUUCBjYWxscyAoYmlsbGluZyDihpIgbWVzc2FnZSwgcGxhdGZvcm0g4oaSIGNvbXBsaWFuY2UsIGV0Yy4pXG4vLyBuZWVkIHRvIHNhdGlzZnkgdGhlIHNhbWUgYHJlcXVpcmVBdXRoYCBtaWRkbGV3YXJlIGFzIHVzZXIgcmVxdWVzdHMuXG4vLyBgc2lnblNlcnZpY2VUb2tlbmAgbWludHMgYSBzaG9ydC1saXZlZCBFUzI1NiBKV1Qgc2lnbmVkIHdpdGggVEhJUyBzZXJ2aWNlJ3Ncbi8vIE9XTiBrZXkgKHNlZSBgc2VydmljZXMvc2VydmljZS1rZXlzLnRzYCksIGNhcnJ5aW5nIGBwcmluY2lwYWxUeXBlOiAnc2VydmljZSdgXG4vLyBhbmQgbmFtaW5nIHRoZSBjYWxsaW5nIHNlcnZpY2UgdmlhIGBzdWI6ICdzZXJ2aWNlOjxuYW1lPidgLiBHYXRlcyBicmFuY2ggb25cbi8vIHRoZSBjbGFpbTsgdGhlIHN1YmplY3QgbmFtZXMg4oCUIGFuZCBzaW5jZSAjMTQgdGhlIG5hbWUgaXMgY3J5cHRvZ3JhcGhpY2FsbHlcbi8vIGJvdW5kIHRvIHRoZSBzaWduaW5nIGtleSwgc28gaXQgY2FuIGFsc28gYmUgdHJ1c3RlZC5cbi8vIGByZXF1aXJlQXV0aGAgYWNjZXB0cyB0aGVzZSB0b2tlbnMgdHJhbnNwYXJlbnRseSDigJQgdGhleSBwYXNzIGBkZWNvZGVkLnN1YmBcbi8vIGFuZCBgZGVjb2RlZC5yb2xlYCBjaGVja3MsIGFuZCB0aGUgZG93bnN0cmVhbSBvcmcvcm9sZSBnYXRlc1xuLy8gKGByZXF1aXJlT3JnTWVtYmVyc2hpcGAgaW4gcGxhdGZvcm0ncyBjb250cm9sbGVyIGhlbHBlcnMsIGByZXF1aXJlU3lzdGVtQWRtaW5gKVxuLy8gcmVseSBvbiB0aGUgb3JnL3JvbGUgZW1iZWRkZWQgaW4gdGhlIHRva2VuLlxuLy9cbi8vIFRva2VucyBkZWZhdWx0IHRvIDUtbWludXRlIFRUTCDigJQgbG9uZyBlbm91Z2ggdG8gc3Vydml2ZSBhIGJhY2tlbmQgaG9wLFxuLy8gc2hvcnQgZW5vdWdoIHRoYXQgYSBsZWFrZWQgdG9rZW4gaXMgbG93LXZhbHVlLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IERFRkFVTFRfU0VSVklDRV9UT0tFTl9UVExfU0VDT05EUyA9IDMwMDtcblxuLyoqXG4gKiBEZW55bGlzdCBvZiBzZXJ2aWNlIE5BTUVTICh0aGUgYDxuYW1lPmAgaW4gYHN1Yjogc2VydmljZTo8bmFtZT5gKSB3aG9zZSB0b2tlbnNcbiAqIGByZXF1aXJlQXV0aGAgbXVzdCByZWplY3QuIFJlYWQgZnJvbSBgU0VSVklDRV9UT0tFTl9ERU5ZTElTVGAgKGNvbW1hLXNlcGFyYXRlZClcbiAqIGF0IHByb2Nlc3Mgc3RhcnQsIHNvIGFybWluZyBpdCBpcyBhIGNvbmZpZyBjaGFuZ2UgKyByb2xsb3V0IOKAlCBpdCBjdXRzIG9mZiBhXG4gKiBjb21wcm9taXNlZCBzZXJ2aWNlIFdJVEhPVVQgcm90YXRpbmcgYW55IGtleSwgYW5kIHdpdGhvdXQgaW52YWxpZGF0aW5nIGV2ZXJ5XG4gKiBvdGhlciBzZXJ2aWNlJ3MgdG9rZW5zIGFzIGNvbGxhdGVyYWwuXG4gKi9cbmNvbnN0IHNlcnZpY2VUb2tlbkRlbnlsaXN0ID0gbmV3IFNldChcbiAgKHByb2Nlc3MuZW52LlNFUlZJQ0VfVE9LRU5fREVOWUxJU1QgfHwgJycpXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKChzKSA9PiBzLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pLFxuKTtcblxuLyoqXG4gKiBUaGUgY2FsbGluZyBzZXJ2aWNlJ3MgbmFtZSBmb3IgYSBTRVJWSUNFIHByaW5jaXBhbCAoYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJ2ApLFxuICogZWxzZSBgdW5kZWZpbmVkYC4gQSB1c2VyIHRva2VuIG5ldmVyIHlpZWxkcyBhIG5hbWUsIHdoYXRldmVyIGl0cyBgc3ViYCBzYXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZU5hbWVPZihjbGFpbXM6IHsgcHJpbmNpcGFsVHlwZT86IHN0cmluZzsgc3ViPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY2xhaW1zPy5wcmluY2lwYWxUeXBlICE9PSAnc2VydmljZScgfHwgdHlwZW9mIGNsYWltcy5zdWIgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoIWNsYWltcy5zdWIuc3RhcnRzV2l0aChTRVJWSUNFX1NVQkpFQ1RfUFJFRklYKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGNsYWltcy5zdWIuc2xpY2UoU0VSVklDRV9TVUJKRUNUX1BSRUZJWC5sZW5ndGgpIHx8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRydWUgd2hlbiB0aGUgY2xhaW1zIGFyZSBhIHNlcnZpY2UgcHJpbmNpcGFsIHdob3NlIHNlcnZpY2UgaXMgb24gdGhlIGRlbnlsaXN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZVRva2VuRGVuaWVkKGNsYWltczogeyBwcmluY2lwYWxUeXBlPzogc3RyaW5nOyBzdWI/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICBpZiAoc2VydmljZVRva2VuRGVueWxpc3Quc2l6ZSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBuYW1lID0gc2VydmljZU5hbWVPZihjbGFpbXMpO1xuICByZXR1cm4gbmFtZSAhPT0gdW5kZWZpbmVkICYmIHNlcnZpY2VUb2tlbkRlbnlsaXN0LmhhcyhuYW1lKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlVG9rZW5PcHRpb25zIHtcbiAgLyoqIENhbGxpbmcgc2VydmljZSBpZGVudGlmaWVyIChlLmcuICdiaWxsaW5nJywgJ3BsYXRmb3JtJykuIEVtYmVkZGVkIGFzIGBzdWI6IHNlcnZpY2U6PG5hbWU+YC4gKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgLyoqIEFjdGl2ZSBvcmcgY29udGV4dCBmb3IgdGhlIGNhbGwuIFVzZSB0aGUgdGFyZ2V0IHRlbmFudCdzIG9yZyBpZCwgb3IgdGhlXG4gICAqICB3ZWxsLWtub3duIGBTWVNURU1fT1JHX0lEYCAoYW4gT2JqZWN0SWQpIGZvciBzeXN0ZW0td2lkZSBvcHMg4oCUIE5PVCB0aGUgc3RyaW5nXG4gICAqICAnc3lzdGVtJywgd2hpY2ggaWQtYmFzZWQgc3lzdGVtLW9yZyBjaGVja3Mgd29uJ3QgcmVjb2duaXplLiAqL1xuICBvcmdJZD86IHN0cmluZztcbiAgLyoqIEFjdGl2ZSBvcmcgbmFtZS4gRGVmYXVsdHMgdG8gb3JnSWQuICovXG4gIG9yZ05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUVEwgaW4gc2Vjb25kcyAoZGVmYXVsdCAzMDApLiAqL1xuICB0dGxTZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgICogUm9sZSB0aGUgdG9rZW4gY2FycmllcyAocmVxdWlyZWQg4oCUIG5vIGltcGxpY2l0IGRlZmF1bHQpLiAqKlBhc3MgdGhlIExPV0VTVFxuICAgKiByb2xlIHRoZSBjYWxsIGFjdHVhbGx5IG5lZWRzKiogKGAnbWVtYmVyJ2AgZm9yIHJlYWQgLyBkYXRhLXBsYW5lIGNhbGxzKSBzbyBhXG4gICAqIGxlYWtlZCBzZXJ2aWNlIHRva2VuIGNhbid0IHBlcmZvcm0gYWRtaW4gYWN0aW9ucyBpbiB0aGUgdGFyZ2V0IG9yZy5cbiAgICogYGlzQWRtaW5gIGlzIGRlcml2ZWQgZnJvbSB0aGlzIChhZG1pbnxvd25lciDihpIgdHJ1ZSkuXG4gICAqL1xuICByb2xlOiAnb3duZXInIHwgJ2FkbWluJyB8ICdtZW1iZXInO1xuICAvKipcbiAgICogT3B0aW9uYWwgZmluZS1ncmFpbmVkIHBlcm1pc3Npb24gY2xhaW0uIFByZWZlciB0aGlzICsgYHJvbGU6ICdtZW1iZXInYCBvdmVyIGFcbiAgICogaGlnaCByb2xlIHdoZW4gYSBjYWxsIG5lZWRzIE9ORSBzcGVjaWZpYyBjYXBhYmlsaXR5IChlLmcuIGBbJ3BsdWdpbnM6d3JpdGUnXWBcbiAgICogdG8gcHVzaCBhIHBsdWdpbiBpbWFnZSkg4oCUIHRoZSB0b2tlbiB0aGVuIHNhdGlzZmllcyB0aGF0IHBlcm1pc3Npb24gZ2F0ZVxuICAgKiBXSVRIT1VUIGNhcnJ5aW5nIGBpc0FkbWluYCwgc28gYSBsZWFrZWQgdG9rZW4gY2FuJ3QgcGVyZm9ybSBhZG1pbiBhY3Rpb25zLlxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gIC8qKlxuICAgKiBTaWduZWQgY2xhaW0gKGBhdWRpdENyb3NzT3JnOiB0cnVlYCkgbGV0dGluZyBhbiBgL2F1ZGl0L2V2ZW50c2AgZGVsaXZlcnkgbmFtZVxuICAgKiBhbiBgYWZmZWN0ZWRPcmdJZGAgb3V0c2lkZSB0aGUgdG9rZW4ncyBvcmcuIFNldCBPTkxZIGJ5IHRoZSByZW1vdGUtYXVkaXRcbiAgICogY2xpZW50LCBhbmQgb25seSB3aGVuIHRoZSBldmVudCdzIHZlcmlmaWVkIGluYm91bmQgcHJpbmNpcGFsIHdhcyBhXG4gICAqIHN1cGVyYWRtaW4gb3IgYSBzeXN0ZW0tb3JnIG1lbWJlciDigJQgbmV2ZXIgZnJvbSBjYWxsLXNpdGUgaW5wdXQuIE1lYW5zXG4gICAqIG5vdGhpbmcgdG8gYW55IG90aGVyIHJvdXRlLlxuICAgKi9cbiAgYXVkaXRDcm9zc09yZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWludCBhIEpXVCBpZGVudGlmeWluZyB0aGUgY2FsbGluZyBzZXJ2aWNlLiBVc2VkIGZvciBpbnRlci1zZXJ2aWNlIEhUVFAgY2FsbHMuXG4gKiBUaGUgdG9rZW4gc2F0aXNmaWVzIGByZXF1aXJlQXV0aGAgYW5kICh3aGVuIG9yZ0lkIGlzIHByZXNlbnQpIGByZXF1aXJlT3JnYW5pemF0aW9uYC5cbiAqIFNjb3BlIGl0IHdpdGggYG9wdHMucm9sZWAg4oCUIGxlYXN0IHByaXZpbGVnZSBrZWVwcyBhIGxlYWtlZCB0b2tlbiBsb3ctdmFsdWUuXG4gKlxuICogYG9wdHMuc2VydmljZU5hbWVgIG11c3QgYmUgVEhJUyBwcm9jZXNzJ3Mgb3duIGlkZW50aXR5IChgU0VSVklDRV9OQU1FYCk6IGFcbiAqIHNlcnZpY2UgaG9sZHMgb25seSBpdHMgb3duIHNpZ25pbmcga2V5LCBzbyBtaW50aW5nIGEgdG9rZW4gdGhhdCBuYW1lcyBhbm90aGVyXG4gKiBzZXJ2aWNlIHRocm93cyByYXRoZXIgdGhhbiBwcm9kdWNpbmcgb25lIGV2ZXJ5IHBlZXIgd291bGQgcmVqZWN0LiBUaGF0IGlzIHRoZVxuICogb25lIGJlaGF2aW91ciBjaGFuZ2UgIzE0IGZvcmNlcyBvbiBjYWxsZXJzIOKAlCBzZWUgYHNlcnZpY2VzL3NlcnZpY2Uta2V5cy50c2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU2VydmljZVRva2VuKG9wdHM6IFNlcnZpY2VUb2tlbk9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCByb2xlID0gb3B0cy5yb2xlO1xuICBjb25zdCBwYXlsb2FkOiBPbWl0PEp3dFBheWxvYWQsICdzdWInPiA9IHtcbiAgICB1c2VybmFtZTogYCR7b3B0cy5zZXJ2aWNlTmFtZX0tc2VydmljZWAsXG4gICAgZW1haWw6IGAke29wdHMuc2VydmljZU5hbWV9QGludGVybmFsYCxcbiAgICBwcmluY2lwYWxUeXBlOiAnc2VydmljZScsXG4gICAgdG9rZW5fdXNlOiAnYWNjZXNzJyxcbiAgICByb2xlLFxuICAgIGlzQWRtaW46IHJvbGUgPT09ICdvd25lcicgfHwgcm9sZSA9PT0gJ2FkbWluJyxcbiAgICB0eXBlOiAnYWNjZXNzJyxcbiAgICBvcmdhbml6YXRpb25JZDogb3B0cy5vcmdJZCxcbiAgICBvcmdhbml6YXRpb25OYW1lOiBvcHRzLm9yZ05hbWUgPz8gb3B0cy5vcmdJZCxcbiAgICAvLyBVbmlxdWUgdG9rZW4gaWQgb24gZXZlcnkgbWludC4gQ29tYmluZWQgd2l0aCB0aGUgc2hvcnQgKDMwMHMgZGVmYXVsdCkgVFRMXG4gICAgLy8gdGhpcyBnaXZlcyBlYWNoIHNlcnZpY2UgdG9rZW4gYSBkaXN0aW5jdCBpZGVudGl0eSDigJQgdGhlIGNvcnJlbGF0aW9uIGhhbmRsZVxuICAgIC8vIGZvciB0cmFjaW5nIHdoaWNoIG1pbnQgcGVyZm9ybWVkIGEgY3Jvc3Mtc2VydmljZSBhY3Rpb24sIGFuZCB0aGUgYnVpbGRpbmdcbiAgICAvLyBibG9jayBmb3IgcmVwbGF5IGRldGVjdGlvbiAoYSB2ZXJpZmllciBjYW4gdHJhY2sgc2VlbiBqdGlzKS4gSXQgZG9lcyBOT1RcbiAgICAvLyBieSBpdHNlbGYgcHJldmVudCByZXBsYXkgd2l0aGluIHRoZSBUVEwgd2luZG93LlxuICAgIGp0aTogcmFuZG9tVVVJRCgpLFxuICAgIC8vIExlYXN0LXByaXZpbGVnZSBjYXBhYmlsaXR5IGNsYWltIChvcHRpb25hbCkg4oCUIGxldHMgYSBtZW1iZXItcm9sZSB0b2tlblxuICAgIC8vIHNhdGlzZnkgYSBzcGVjaWZpYyBwZXJtaXNzaW9uIGdhdGUgd2l0aG91dCBjYXJyeWluZyBpc0FkbWluLlxuICAgIC4uLihvcHRzLnBlcm1pc3Npb25zICYmIG9wdHMucGVybWlzc2lvbnMubGVuZ3RoID4gMCA/IHsgcGVybWlzc2lvbnM6IG9wdHMucGVybWlzc2lvbnMgfSA6IHt9KSxcbiAgICAuLi4ob3B0cy5hdWRpdENyb3NzT3JnID8geyBhdWRpdENyb3NzT3JnOiB0cnVlIGFzIGNvbnN0IH0gOiB7fSksXG4gIH07XG4gIC8vIGBzdWJgLCBgaWF0YC9gZXhwYCBhbmQgdGhlIG9wdGlvbmFsIGlzc3Vlci9hdWRpZW5jZSB0aGF0IHJlcXVpcmVBdXRoXG4gIC8vIHZlcmlmaWVzIGFyZSBzdGFtcGVkIGJ5IHRoZSBzaWduZXIsIHNvIHRoZXJlIGlzIGV4YWN0bHkgb25lIHBsYWNlIHRoYXRcbiAgLy8gZGVjaWRlcyB3aGF0IGEgc2VydmljZSB0b2tlbiBzYXlzLlxuICByZXR1cm4gc2lnblNlcnZpY2VKd3QocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwge1xuICAgIHNlcnZpY2VOYW1lOiBvcHRzLnNlcnZpY2VOYW1lLFxuICAgIGV4cGlyZXNJblNlY29uZHM6IG9wdHMudHRsU2Vjb25kcyA/PyBERUZBVUxUX1NFUlZJQ0VfVE9LRU5fVFRMX1NFQ09ORFMsXG4gICAgLi4uaXNzdWVyQXVkaWVuY2VPcHRpb25zKCksXG4gIH0pO1xufVxuXG4vKiogQ29udmVuaWVuY2U6IHJldHVybnMgYSBgQmVhcmVyIDx0b2tlbj5gIGhlYWRlciB2YWx1ZSBmb3IgZmV0Y2gvYXhpb3MgY2FsbHMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZUF1dGhIZWFkZXIob3B0czogU2VydmljZVRva2VuT3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBgQmVhcmVyICR7c2lnblNlcnZpY2VUb2tlbihvcHRzKX1gO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGByZXEudXNlcmAgaXMgYSBzZXJ2aWNlIHByaW5jaXBhbCAoYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJ2AsIG1pbnRlZCBieSBgc2lnblNlcnZpY2VUb2tlbmApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZVByaW5jaXBhbChyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlcS51c2VyPy5wcmluY2lwYWxUeXBlID09PSAnc2VydmljZSc7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGByZXEudXNlcmAgaXMgYW4gT1JHIFNFUlZJQ0UgQUNDT1VOVCAoYHByaW5jaXBhbFR5cGU6XG4gKiAnc2VydmljZV9hY2NvdW50J2ApIOKAlCBhIG5vbi1odW1hbiBwcmluY2lwYWwgb3duZWQgYnkgb25lIG9yZywgYXV0aGVudGljYXRpbmdcbiAqIHdpdGggYSBgcGJfc2Ff4oCmYCBrZXkgZXhjaGFuZ2VkIGF0IHBsYXRmb3JtLlxuICpcbiAqIEEgc2VydmljZSBhY2NvdW50IGlzIE5PVCBhbiBpbnRlcm5hbCBzZXJ2aWNlIHByaW5jaXBhbDogaXQgaG9sZHMgb3JnIFJvbGVzIGFuZFxuICogaXMgc3ViamVjdCB0byBldmVyeSBwZXJtaXNzaW9uIGdhdGUgYSBtZW1iZXIgaXMuIFdoYXQgaXQgY2FuIG5ldmVyIGRvIGlzXG4gKiBzYXRpc2Z5IGEgSFVNQU4tcHJlc2VuY2UgcmVxdWlyZW1lbnQg4oCUIHN0ZXAtdXAgKGFuZCBhbnkgbGF0ZXIgYXNzdXJhbmNlIGdhdGUpXG4gKiByZWZ1c2VzIGl0IG91dHJpZ2h0LCBiZWNhdXNlIHRoZXJlIGlzIG5vIHBlcnNvbiBiZWhpbmQgaXQgdG8gcmUtdmVyaWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlQWNjb3VudFByaW5jaXBhbChyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlcS51c2VyPy5wcmluY2lwYWxUeXBlID09PSAnc2VydmljZV9hY2NvdW50Jztcbn1cblxuLyoqIFRydWUgd2hlbiBgcmVxLnVzZXJgIGlzIHRoZSBuYW1lZCBpbnRlcm5hbCBzZXJ2aWNlIChlLmcuIGAnYmlsbGluZydgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VQcmluY2lwYWxOYW1lZChyZXE6IFJlcXVlc3QsIHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNlcnZpY2VOYW1lT2YocmVxLnVzZXIpID09PSBzZXJ2aWNlTmFtZTtcbn1cblxuLyoqXG4gKiBQUkUtYXV0aCBjaGVjazogY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZ5IHRoZSByZXF1ZXN0IGNhcnJpZXMgYSB2YWxpZCwgc2lnbmVkXG4gKiBTRVJWSUNFIHRva2VuIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCkuIFVubGlrZSB7QGxpbmsgaXNTZXJ2aWNlUHJpbmNpcGFsfVxuICogKHdoaWNoIHJlYWRzIHRoZSBhbHJlYWR5LXBvcHVsYXRlZCBgcmVxLnVzZXJgKSwgdGhpcyB2ZXJpZmllcyB0aGUgYmVhcmVyIHRva2VuXG4gKiBpdHNlbGYsIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCBCRUZPUkUgYHJlcXVpcmVBdXRoYCBydW5zIOKAlCBlLmcuIHRoZSBnbG9iYWwgcmF0ZVxuICogbGltaXRlcidzIGBza2lwYCwgd2hpY2ggbXVzdCBub3QgdHJ1c3QgdGhlIHNwb29mYWJsZSBgeC1pbnRlcm5hbC1zZXJ2aWNlYFxuICogaGVhZGVyLiBNaXJyb3JzIGByZXF1aXJlQXV0aGAncyBTRVJWSUNFIGNoYWluIGV4YWN0bHkgKHRoZSBzaWduZXIncyBvd24ga2V5LFxuICogcmVzb2x2ZWQgYnkgYGtpZGAsIHdpdGggdGhlIGBzdWJgL3NpZ25lciBhZ3JlZW1lbnQgY2hlY2sgYW5kIHRoZSBvcHRpb25hbFxuICogaXNzdWVyL2F1ZGllbmNlKSBhbmQgcmV0dXJucyBgZmFsc2VgIG9uIGFueSBtaXNzaW5nL2ludmFsaWQvbm9uLXNlcnZpY2UgdG9rZW5cbiAqIOKAlCBpbmNsdWRpbmcgYW55IHBsYXRmb3JtLXNpZ25lZCBVU0VSIHRva2VuLCB3aG9zZSBga2lkYCBpcyBub3QgaW4gdGhlIHNlcnZpY2VcbiAqIGJ1bmRsZSBhdCBhbGwuIFN0YXlzIFNZTkNIUk9OT1VTLCB3aGljaCBpcyB3aHkgdGhlIHBlci1zZXJ2aWNlIHB1YmxpYyBrZXlzIGFyZVxuICogZGlzdHJpYnV0ZWQgYXMgYSBtb3VudGVkIGJ1bmRsZSByYXRoZXIgdGhhbiBmZXRjaGVkIG92ZXIgSFRUUC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNlcnZpY2VQcmluY2lwYWwocmVxOiBSZXF1ZXN0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnRzID0gcmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKTtcbiAgaWYgKCFwYXJ0cyB8fCBwYXJ0cy5sZW5ndGggIT09IDIgfHwgcGFydHNbMF0gIT09ICdCZWFyZXInKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgaGVhZGVyID0gZGVjb2RlSnd0SGVhZGVyKHBhcnRzWzFdKTtcbiAgICBpZiAoIWhlYWRlcj8ua2lkIHx8ICFpc1NlcnZpY2VLaWQoaGVhZGVyLmtpZCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkZWNvZGVkID0gdmVyaWZ5U2VydmljZUp3dDxKd3RQYXlsb2FkPihwYXJ0c1sxXSwgeyBraWQ6IGhlYWRlci5raWQsIC4uLmlzc3VlckF1ZGllbmNlT3B0aW9ucygpIH0pO1xuICAgIGlmIChkZWNvZGVkLnR5cGUgIT09ICdhY2Nlc3MnIHx8IGRlY29kZWQucHJpbmNpcGFsVHlwZSAhPT0gJ3NlcnZpY2UnIHx8ICFoYXNWYWxpZElkZW50aXR5Q2xhaW1zKGRlY29kZWQpKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gQSBkZW55bGlzdGVkIChraWxsZWQpIHNlcnZpY2UgbXVzdCBOT1QgYmUgdHJlYXRlZCBhcyBhIHRydXN0ZWQgcHJpbmNpcGFsIOKAlFxuICAgIC8vIG90aGVyd2lzZSBpdCBrZWVwcyB0aGUgcmF0ZS1saW1pdGVyIGV4ZW1wdGlvbiBldmVuIHRob3VnaCByZXF1aXJlQXV0aCByZWplY3RzXG4gICAgLy8gaXQgb24gcmVhbCByb3V0ZXMuIEZvbGQgdGhlIGtpbGwtc3dpdGNoIGludG8gdGhlIHByZS1hdXRoIGNoZWNrIHRvby5cbiAgICByZXR1cm4gIWlzU2VydmljZVRva2VuRGVuaWVkKGRlY29kZWQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS10b2tlbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7O0dBRUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckgsT0FBTyxFQUFtQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsOEVBQThFO0FBQzlFLDRCQUE0QjtBQUM1QixFQUFFO0FBQ0YsNEVBQTRFO0FBQzVFLHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELDZFQUE2RTtBQUM3RSwrREFBK0Q7QUFDL0Qsa0ZBQWtGO0FBQ2xGLDhDQUE4QztBQUM5QyxFQUFFO0FBQ0YseUVBQXlFO0FBQ3pFLGlEQUFpRDtBQUNqRCw4RUFBOEU7QUFFOUUsTUFBTSxpQ0FBaUMsR0FBRyxHQUFHLENBQUM7QUFFOUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FDbEMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztLQUN2QyxLQUFLLENBQUMsR0FBRyxDQUFDO0tBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDcEIsTUFB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QUM7SUFDeEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTZXJ2aWNlLXRvLXNlcnZpY2UgdG9rZW5zIGFuZCBzZXJ2aWNlLXByaW5jaXBhbCBjaGVja3MuXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGhhc1ZhbGlkSWRlbnRpdHlDbGFpbXMsIGlzc3VlckF1ZGllbmNlT3B0aW9ucyB9IGZyb20gJy4vand0LXZlcmlmeS5qcyc7XG5pbXBvcnQgeyBTRVJWSUNFX1NVQkpFQ1RfUFJFRklYLCBpc1NlcnZpY2VLaWQsIHNpZ25TZXJ2aWNlSnd0LCB2ZXJpZnlTZXJ2aWNlSnd0IH0gZnJvbSAnLi4vc2VydmljZXMvc2VydmljZS1rZXlzLmpzJztcbmltcG9ydCB7IHR5cGUgSnd0UGF5bG9hZCB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyB0eXBlIFBlcm1pc3Npb24gfSBmcm9tICcuLi90eXBlcy9wZXJtaXNzaW9ucy5qcyc7XG5pbXBvcnQgeyBkZWNvZGVKd3RIZWFkZXIgfSBmcm9tICcuLi91dGlscy9qd2suanMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXJ2aWNlLXRvLXNlcnZpY2UgdG9rZW5zXG4vL1xuLy8gSW50ZXItc2VydmljZSBIVFRQIGNhbGxzIChiaWxsaW5nIOKGkiBtZXNzYWdlLCBwbGF0Zm9ybSDihpIgY29tcGxpYW5jZSwgZXRjLilcbi8vIG5lZWQgdG8gc2F0aXNmeSB0aGUgc2FtZSBgcmVxdWlyZUF1dGhgIG1pZGRsZXdhcmUgYXMgdXNlciByZXF1ZXN0cy5cbi8vIGBzaWduU2VydmljZVRva2VuYCBtaW50cyBhIHNob3J0LWxpdmVkIEVTMjU2IEpXVCBzaWduZWQgd2l0aCBUSElTIHNlcnZpY2Unc1xuLy8gT1dOIGtleSAoc2VlIGBzZXJ2aWNlcy9zZXJ2aWNlLWtleXMudHNgKSwgY2FycnlpbmcgYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJ2Bcbi8vIGFuZCBuYW1pbmcgdGhlIGNhbGxpbmcgc2VydmljZSB2aWEgYHN1YjogJ3NlcnZpY2U6PG5hbWU+J2AuIEdhdGVzIGJyYW5jaCBvblxuLy8gdGhlIGNsYWltOyB0aGUgc3ViamVjdCBuYW1lcyDigJQgYW5kIHNpbmNlICMxNCB0aGUgbmFtZSBpcyBjcnlwdG9ncmFwaGljYWxseVxuLy8gYm91bmQgdG8gdGhlIHNpZ25pbmcga2V5LCBzbyBpdCBjYW4gYWxzbyBiZSB0cnVzdGVkLlxuLy8gYHJlcXVpcmVBdXRoYCBhY2NlcHRzIHRoZXNlIHRva2VucyB0cmFuc3BhcmVudGx5IOKAlCB0aGV5IHBhc3MgYGRlY29kZWQuc3ViYFxuLy8gYW5kIGBkZWNvZGVkLnJvbGVgIGNoZWNrcywgYW5kIHRoZSBkb3duc3RyZWFtIG9yZy9yb2xlIGdhdGVzXG4vLyAoYHJlcXVpcmVPcmdNZW1iZXJzaGlwYCBpbiBwbGF0Zm9ybSdzIGNvbnRyb2xsZXIgaGVscGVycywgYHJlcXVpcmVTeXN0ZW1BZG1pbmApXG4vLyByZWx5IG9uIHRoZSBvcmcvcm9sZSBlbWJlZGRlZCBpbiB0aGUgdG9rZW4uXG4vL1xuLy8gVG9rZW5zIGRlZmF1bHQgdG8gNS1taW51dGUgVFRMIOKAlCBsb25nIGVub3VnaCB0byBzdXJ2aXZlIGEgYmFja2VuZCBob3AsXG4vLyBzaG9ydCBlbm91Z2ggdGhhdCBhIGxlYWtlZCB0b2tlbiBpcyBsb3ctdmFsdWUuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgREVGQVVMVF9TRVJWSUNFX1RPS0VOX1RUTF9TRUNPTkRTID0gMzAwO1xuXG4vKipcbiAqIERlbnlsaXN0IG9mIHNlcnZpY2UgTkFNRVMgKHRoZSBgPG5hbWU+YCBpbiBgc3ViOiBzZXJ2aWNlOjxuYW1lPmApIHdob3NlIHRva2Vuc1xuICogYHJlcXVpcmVBdXRoYCBtdXN0IHJlamVjdC4gUmVhZCBmcm9tIGBTRVJWSUNFX1RPS0VOX0RFTllMSVNUYCAoY29tbWEtc2VwYXJhdGVkKVxuICogYXQgcHJvY2VzcyBzdGFydCwgc28gYXJtaW5nIGl0IGlzIGEgY29uZmlnIGNoYW5nZSArIHJvbGxvdXQg4oCUIGl0IGN1dHMgb2ZmIGFcbiAqIGNvbXByb21pc2VkIHNlcnZpY2UgV0lUSE9VVCByb3RhdGluZyBhbnkga2V5LCBhbmQgd2l0aG91dCBpbnZhbGlkYXRpbmcgZXZlcnlcbiAqIG90aGVyIHNlcnZpY2UncyB0b2tlbnMgYXMgY29sbGF0ZXJhbC5cbiAqL1xuY29uc3Qgc2VydmljZVRva2VuRGVueWxpc3QgPSBuZXcgU2V0KFxuICAocHJvY2Vzcy5lbnYuU0VSVklDRV9UT0tFTl9ERU5ZTElTVCB8fCAnJylcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbiksXG4pO1xuXG4vKipcbiAqIFRoZSBjYWxsaW5nIHNlcnZpY2UncyBuYW1lIGZvciBhIFNFUlZJQ0UgcHJpbmNpcGFsIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCksXG4gKiBlbHNlIGB1bmRlZmluZWRgLiBBIHVzZXIgdG9rZW4gbmV2ZXIgeWllbGRzIGEgbmFtZSwgd2hhdGV2ZXIgaXRzIGBzdWJgIHNheXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlTmFtZU9mKGNsYWltczogeyBwcmluY2lwYWxUeXBlPzogc3RyaW5nOyBzdWI/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjbGFpbXM/LnByaW5jaXBhbFR5cGUgIT09ICdzZXJ2aWNlJyB8fCB0eXBlb2YgY2xhaW1zLnN1YiAhPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghY2xhaW1zLnN1Yi5zdGFydHNXaXRoKFNFUlZJQ0VfU1VCSkVDVF9QUkVGSVgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gY2xhaW1zLnN1Yi5zbGljZShTRVJWSUNFX1NVQkpFQ1RfUFJFRklYLmxlbmd0aCkgfHwgdW5kZWZpbmVkO1xufVxuXG4vKiogVHJ1ZSB3aGVuIHRoZSBjbGFpbXMgYXJlIGEgc2VydmljZSBwcmluY2lwYWwgd2hvc2Ugc2VydmljZSBpcyBvbiB0aGUgZGVueWxpc3QuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlVG9rZW5EZW5pZWQoY2xhaW1zOiB7IHByaW5jaXBhbFR5cGU/OiBzdHJpbmc7IHN1Yj86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gIGlmIChzZXJ2aWNlVG9rZW5EZW55bGlzdC5zaXplID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG5hbWUgPSBzZXJ2aWNlTmFtZU9mKGNsYWltcyk7XG4gIHJldHVybiBuYW1lICE9PSB1bmRlZmluZWQgJiYgc2VydmljZVRva2VuRGVueWxpc3QuaGFzKG5hbWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VUb2tlbk9wdGlvbnMge1xuICAvKiogQ2FsbGluZyBzZXJ2aWNlIGlkZW50aWZpZXIgKGUuZy4gJ2JpbGxpbmcnLCAncGxhdGZvcm0nKS4gRW1iZWRkZWQgYXMgYHN1Yjogc2VydmljZTo8bmFtZT5gLiAqL1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZyBjb250ZXh0IGZvciB0aGUgY2FsbC4gVXNlIHRoZSB0YXJnZXQgdGVuYW50J3Mgb3JnIGlkLCBvciB0aGVcbiAgICogIHdlbGwta25vd24gYFNZU1RFTV9PUkdfSURgIChhbiBPYmplY3RJZCkgZm9yIHN5c3RlbS13aWRlIG9wcyDigJQgTk9UIHRoZSBzdHJpbmdcbiAgICogICdzeXN0ZW0nLCB3aGljaCBpZC1iYXNlZCBzeXN0ZW0tb3JnIGNoZWNrcyB3b24ndCByZWNvZ25pemUuICovXG4gIG9yZ0lkPzogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZyBuYW1lLiBEZWZhdWx0cyB0byBvcmdJZC4gKi9cbiAgb3JnTmFtZT86IHN0cmluZztcbiAgLyoqIFRUTCBpbiBzZWNvbmRzIChkZWZhdWx0IDMwMCkuICovXG4gIHR0bFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSb2xlIHRoZSB0b2tlbiBjYXJyaWVzIChyZXF1aXJlZCDigJQgbm8gaW1wbGljaXQgZGVmYXVsdCkuICoqUGFzcyB0aGUgTE9XRVNUXG4gICAqIHJvbGUgdGhlIGNhbGwgYWN0dWFsbHkgbmVlZHMqKiAoYCdtZW1iZXInYCBmb3IgcmVhZCAvIGRhdGEtcGxhbmUgY2FsbHMpIHNvIGFcbiAgICogbGVha2VkIHNlcnZpY2UgdG9rZW4gY2FuJ3QgcGVyZm9ybSBhZG1pbiBhY3Rpb25zIGluIHRoZSB0YXJnZXQgb3JnLlxuICAgKiBgaXNBZG1pbmAgaXMgZGVyaXZlZCBmcm9tIHRoaXMgKGFkbWlufG93bmVyIOKGkiB0cnVlKS5cbiAgICovXG4gIHJvbGU6ICdvd25lcicgfCAnYWRtaW4nIHwgJ21lbWJlcic7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaW5lLWdyYWluZWQgcGVybWlzc2lvbiBjbGFpbS4gUHJlZmVyIHRoaXMgKyBgcm9sZTogJ21lbWJlcidgIG92ZXIgYVxuICAgKiBoaWdoIHJvbGUgd2hlbiBhIGNhbGwgbmVlZHMgT05FIHNwZWNpZmljIGNhcGFiaWxpdHkgKGUuZy4gYFsncGx1Z2luczp3cml0ZSddYFxuICAgKiB0byBwdXNoIGEgcGx1Z2luIGltYWdlKSDigJQgdGhlIHRva2VuIHRoZW4gc2F0aXNmaWVzIHRoYXQgcGVybWlzc2lvbiBnYXRlXG4gICAqIFdJVEhPVVQgY2FycnlpbmcgYGlzQWRtaW5gLCBzbyBhIGxlYWtlZCB0b2tlbiBjYW4ndCBwZXJmb3JtIGFkbWluIGFjdGlvbnMuXG4gICAqL1xuICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25bXTtcbiAgLyoqXG4gICAqIFNpZ25lZCBjbGFpbSAoYGF1ZGl0Q3Jvc3NPcmc6IHRydWVgKSBsZXR0aW5nIGFuIGAvYXVkaXQvZXZlbnRzYCBkZWxpdmVyeSBuYW1lXG4gICAqIGFuIGBhZmZlY3RlZE9yZ0lkYCBvdXRzaWRlIHRoZSB0b2tlbidzIG9yZy4gU2V0IE9OTFkgYnkgdGhlIHJlbW90ZS1hdWRpdFxuICAgKiBjbGllbnQsIGFuZCBvbmx5IHdoZW4gdGhlIGV2ZW50J3MgdmVyaWZpZWQgaW5ib3VuZCBwcmluY2lwYWwgd2FzIGFcbiAgICogc3VwZXJhZG1pbiBvciBhIHN5c3RlbS1vcmcgbWVtYmVyIOKAlCBuZXZlciBmcm9tIGNhbGwtc2l0ZSBpbnB1dC4gTWVhbnNcbiAgICogbm90aGluZyB0byBhbnkgb3RoZXIgcm91dGUuXG4gICAqL1xuICBhdWRpdENyb3NzT3JnPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNaW50IGEgSldUIGlkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIHNlcnZpY2UuIFVzZWQgZm9yIGludGVyLXNlcnZpY2UgSFRUUCBjYWxscy5cbiAqIFRoZSB0b2tlbiBzYXRpc2ZpZXMgYHJlcXVpcmVBdXRoYCBhbmQgKHdoZW4gb3JnSWQgaXMgcHJlc2VudCkgYHJlcXVpcmVPcmdhbml6YXRpb25gLlxuICogU2NvcGUgaXQgd2l0aCBgb3B0cy5yb2xlYCDigJQgbGVhc3QgcHJpdmlsZWdlIGtlZXBzIGEgbGVha2VkIHRva2VuIGxvdy12YWx1ZS5cbiAqXG4gKiBgb3B0cy5zZXJ2aWNlTmFtZWAgbXVzdCBiZSBUSElTIHByb2Nlc3MncyBvd24gaWRlbnRpdHkgKGBTRVJWSUNFX05BTUVgKTogYVxuICogc2VydmljZSBob2xkcyBvbmx5IGl0cyBvd24gc2lnbmluZyBrZXksIHNvIG1pbnRpbmcgYSB0b2tlbiB0aGF0IG5hbWVzIGFub3RoZXJcbiAqIHNlcnZpY2UgdGhyb3dzIHJhdGhlciB0aGFuIHByb2R1Y2luZyBvbmUgZXZlcnkgcGVlciB3b3VsZCByZWplY3QuIFRoYXQgaXMgdGhlXG4gKiBvbmUgYmVoYXZpb3VyIGNoYW5nZSAjMTQgZm9yY2VzIG9uIGNhbGxlcnMg4oCUIHNlZSBgc2VydmljZXMvc2VydmljZS1rZXlzLnRzYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25TZXJ2aWNlVG9rZW4ob3B0czogU2VydmljZVRva2VuT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHJvbGUgPSBvcHRzLnJvbGU7XG4gIGNvbnN0IHBheWxvYWQ6IE9taXQ8Snd0UGF5bG9hZCwgJ3N1Yic+ID0ge1xuICAgIHVzZXJuYW1lOiBgJHtvcHRzLnNlcnZpY2VOYW1lfS1zZXJ2aWNlYCxcbiAgICBlbWFpbDogYCR7b3B0cy5zZXJ2aWNlTmFtZX1AaW50ZXJuYWxgLFxuICAgIHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJyxcbiAgICB0b2tlbl91c2U6ICdhY2Nlc3MnLFxuICAgIHJvbGUsXG4gICAgaXNBZG1pbjogcm9sZSA9PT0gJ293bmVyJyB8fCByb2xlID09PSAnYWRtaW4nLFxuICAgIHR5cGU6ICdhY2Nlc3MnLFxuICAgIG9yZ2FuaXphdGlvbklkOiBvcHRzLm9yZ0lkLFxuICAgIG9yZ2FuaXphdGlvbk5hbWU6IG9wdHMub3JnTmFtZSA/PyBvcHRzLm9yZ0lkLFxuICAgIC8vIFVuaXF1ZSB0b2tlbiBpZCBvbiBldmVyeSBtaW50LiBDb21iaW5lZCB3aXRoIHRoZSBzaG9ydCAoMzAwcyBkZWZhdWx0KSBUVExcbiAgICAvLyB0aGlzIGdpdmVzIGVhY2ggc2VydmljZSB0b2tlbiBhIGRpc3RpbmN0IGlkZW50aXR5IOKAlCB0aGUgY29ycmVsYXRpb24gaGFuZGxlXG4gICAgLy8gZm9yIHRyYWNpbmcgd2hpY2ggbWludCBwZXJmb3JtZWQgYSBjcm9zcy1zZXJ2aWNlIGFjdGlvbiwgYW5kIHRoZSBidWlsZGluZ1xuICAgIC8vIGJsb2NrIGZvciByZXBsYXkgZGV0ZWN0aW9uIChhIHZlcmlmaWVyIGNhbiB0cmFjayBzZWVuIGp0aXMpLiBJdCBkb2VzIE5PVFxuICAgIC8vIGJ5IGl0c2VsZiBwcmV2ZW50IHJlcGxheSB3aXRoaW4gdGhlIFRUTCB3aW5kb3cuXG4gICAganRpOiByYW5kb21VVUlEKCksXG4gICAgLy8gTGVhc3QtcHJpdmlsZWdlIGNhcGFiaWxpdHkgY2xhaW0gKG9wdGlvbmFsKSDigJQgbGV0cyBhIG1lbWJlci1yb2xlIHRva2VuXG4gICAgLy8gc2F0aXNmeSBhIHNwZWNpZmljIHBlcm1pc3Npb24gZ2F0ZSB3aXRob3V0IGNhcnJ5aW5nIGlzQWRtaW4uXG4gICAgLi4uKG9wdHMucGVybWlzc2lvbnMgJiYgb3B0cy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwID8geyBwZXJtaXNzaW9uczogb3B0cy5wZXJtaXNzaW9ucyB9IDoge30pLFxuICAgIC4uLihvcHRzLmF1ZGl0Q3Jvc3NPcmcgPyB7IGF1ZGl0Q3Jvc3NPcmc6IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgfTtcbiAgLy8gYHN1YmAsIGBpYXRgL2BleHBgIGFuZCB0aGUgb3B0aW9uYWwgaXNzdWVyL2F1ZGllbmNlIHRoYXQgcmVxdWlyZUF1dGhcbiAgLy8gdmVyaWZpZXMgYXJlIHN0YW1wZWQgYnkgdGhlIHNpZ25lciwgc28gdGhlcmUgaXMgZXhhY3RseSBvbmUgcGxhY2UgdGhhdFxuICAvLyBkZWNpZGVzIHdoYXQgYSBzZXJ2aWNlIHRva2VuIHNheXMuXG4gIHJldHVybiBzaWduU2VydmljZUp3dChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB7XG4gICAgc2VydmljZU5hbWU6IG9wdHMuc2VydmljZU5hbWUsXG4gICAgZXhwaXJlc0luU2Vjb25kczogb3B0cy50dGxTZWNvbmRzID8/IERFRkFVTFRfU0VSVklDRV9UT0tFTl9UVExfU0VDT05EUyxcbiAgICAuLi5pc3N1ZXJBdWRpZW5jZU9wdGlvbnMoKSxcbiAgfSk7XG59XG5cbi8qKiBDb252ZW5pZW5jZTogcmV0dXJucyBhIGBCZWFyZXIgPHRva2VuPmAgaGVhZGVyIHZhbHVlIGZvciBmZXRjaC9heGlvcyBjYWxscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlQXV0aEhlYWRlcihvcHRzOiBTZXJ2aWNlVG9rZW5PcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBCZWFyZXIgJHtzaWduU2VydmljZVRva2VuKG9wdHMpfWA7XG59XG5cbi8qKiBUcnVlIHdoZW4gYHJlcS51c2VyYCBpcyBhIHNlcnZpY2UgcHJpbmNpcGFsIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCwgbWludGVkIGJ5IGBzaWduU2VydmljZVRva2VuYCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlUHJpbmNpcGFsKHJlcTogUmVxdWVzdCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVxLnVzZXI/LnByaW5jaXBhbFR5cGUgPT09ICdzZXJ2aWNlJztcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gYHJlcS51c2VyYCBpcyBhbiBPUkcgU0VSVklDRSBBQ0NPVU5UIChgcHJpbmNpcGFsVHlwZTpcbiAqICdzZXJ2aWNlX2FjY291bnQnYCkg4oCUIGEgbm9uLWh1bWFuIHByaW5jaXBhbCBvd25lZCBieSBvbmUgb3JnLCBhdXRoZW50aWNhdGluZ1xuICogd2l0aCBhIGBwYl9zYV/igKZgIGtleSBleGNoYW5nZWQgYXQgcGxhdGZvcm0uXG4gKlxuICogQSBzZXJ2aWNlIGFjY291bnQgaXMgTk9UIGFuIGludGVybmFsIHNlcnZpY2UgcHJpbmNpcGFsOiBpdCBob2xkcyBvcmcgUm9sZXMgYW5kXG4gKiBpcyBzdWJqZWN0IHRvIGV2ZXJ5IHBlcm1pc3Npb24gZ2F0ZSBhIG1lbWJlciBpcy4gV2hhdCBpdCBjYW4gbmV2ZXIgZG8gaXNcbiAqIHNhdGlzZnkgYSBIVU1BTi1wcmVzZW5jZSByZXF1aXJlbWVudCDigJQgc3RlcC11cCAoYW5kIGFueSBsYXRlciBhc3N1cmFuY2UgZ2F0ZSlcbiAqIHJlZnVzZXMgaXQgb3V0cmlnaHQsIGJlY2F1c2UgdGhlcmUgaXMgbm8gcGVyc29uIGJlaGluZCBpdCB0byByZS12ZXJpZnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VBY2NvdW50UHJpbmNpcGFsKHJlcTogUmVxdWVzdCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVxLnVzZXI/LnByaW5jaXBhbFR5cGUgPT09ICdzZXJ2aWNlX2FjY291bnQnO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGByZXEudXNlcmAgaXMgdGhlIG5hbWVkIGludGVybmFsIHNlcnZpY2UgKGUuZy4gYCdiaWxsaW5nJ2ApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZVByaW5jaXBhbE5hbWVkKHJlcTogUmVxdWVzdCwgc2VydmljZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2VydmljZU5hbWVPZihyZXEudXNlcikgPT09IHNlcnZpY2VOYW1lO1xufVxuXG4vKipcbiAqIFBSRS1hdXRoIGNoZWNrOiBjcnlwdG9ncmFwaGljYWxseSB2ZXJpZnkgdGhlIHJlcXVlc3QgY2FycmllcyBhIHZhbGlkLCBzaWduZWRcbiAqIFNFUlZJQ0UgdG9rZW4gKGBwcmluY2lwYWxUeXBlOiAnc2VydmljZSdgKS4gVW5saWtlIHtAbGluayBpc1NlcnZpY2VQcmluY2lwYWx9XG4gKiAod2hpY2ggcmVhZHMgdGhlIGFscmVhZHktcG9wdWxhdGVkIGByZXEudXNlcmApLCB0aGlzIHZlcmlmaWVzIHRoZSBiZWFyZXIgdG9rZW5cbiAqIGl0c2VsZiwgc28gaXQgaXMgc2FmZSB0byBjYWxsIEJFRk9SRSBgcmVxdWlyZUF1dGhgIHJ1bnMg4oCUIGUuZy4gdGhlIGdsb2JhbCByYXRlXG4gKiBsaW1pdGVyJ3MgYHNraXBgLCB3aGljaCBtdXN0IG5vdCB0cnVzdCB0aGUgc3Bvb2ZhYmxlIGB4LWludGVybmFsLXNlcnZpY2VgXG4gKiBoZWFkZXIuIE1pcnJvcnMgYHJlcXVpcmVBdXRoYCdzIFNFUlZJQ0UgY2hhaW4gZXhhY3RseSAodGhlIHNpZ25lcidzIG93biBrZXksXG4gKiByZXNvbHZlZCBieSBga2lkYCwgd2l0aCB0aGUgYHN1YmAvc2lnbmVyIGFncmVlbWVudCBjaGVjayBhbmQgdGhlIG9wdGlvbmFsXG4gKiBpc3N1ZXIvYXVkaWVuY2UpIGFuZCByZXR1cm5zIGBmYWxzZWAgb24gYW55IG1pc3NpbmcvaW52YWxpZC9ub24tc2VydmljZSB0b2tlblxuICog4oCUIGluY2x1ZGluZyBhbnkgcGxhdGZvcm0tc2lnbmVkIFVTRVIgdG9rZW4sIHdob3NlIGBraWRgIGlzIG5vdCBpbiB0aGUgc2VydmljZVxuICogYnVuZGxlIGF0IGFsbC4gU3RheXMgU1lOQ0hST05PVVMsIHdoaWNoIGlzIHdoeSB0aGUgcGVyLXNlcnZpY2UgcHVibGljIGtleXMgYXJlXG4gKiBkaXN0cmlidXRlZCBhcyBhIG1vdW50ZWQgYnVuZGxlIHJhdGhlciB0aGFuIGZldGNoZWQgb3ZlciBIVFRQLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2VydmljZVByaW5jaXBhbChyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgY29uc3QgcGFydHMgPSByZXEuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpO1xuICBpZiAoIXBhcnRzIHx8IHBhcnRzLmxlbmd0aCAhPT0gMiB8fCBwYXJ0c1swXSAhPT0gJ0JlYXJlcicpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXIgPSBkZWNvZGVKd3RIZWFkZXIocGFydHNbMV0pO1xuICAgIGlmICghaGVhZGVyPy5raWQgfHwgIWlzU2VydmljZUtpZChoZWFkZXIua2lkKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRlY29kZWQgPSB2ZXJpZnlTZXJ2aWNlSnd0PEp3dFBheWxvYWQ+KHBhcnRzWzFdLCB7IGtpZDogaGVhZGVyLmtpZCwgLi4uaXNzdWVyQXVkaWVuY2VPcHRpb25zKCkgfSk7XG4gICAgaWYgKGRlY29kZWQudHlwZSAhPT0gJ2FjY2VzcycgfHwgZGVjb2RlZC5wcmluY2lwYWxUeXBlICE9PSAnc2VydmljZScgfHwgIWhhc1ZhbGlkSWRlbnRpdHlDbGFpbXMoZGVjb2RlZCkpIHJldHVybiBmYWxzZTtcbiAgICAvLyBBIGRlbnlsaXN0ZWQgKGtpbGxlZCkgc2VydmljZSBtdXN0IE5PVCBiZSB0cmVhdGVkIGFzIGEgdHJ1c3RlZCBwcmluY2lwYWwg4oCUXG4gICAgLy8gb3RoZXJ3aXNlIGl0IGtlZXBzIHRoZSByYXRlLWxpbWl0ZXIgZXhlbXB0aW9uIGV2ZW4gdGhvdWdoIHJlcXVpcmVBdXRoIHJlamVjdHNcbiAgICAvLyBpdCBvbiByZWFsIHJvdXRlcy4gRm9sZCB0aGUga2lsbC1zd2l0Y2ggaW50byB0aGUgcHJlLWF1dGggY2hlY2sgdG9vLlxuICAgIHJldHVybiAhaXNTZXJ2aWNlVG9rZW5EZW5pZWQoZGVjb2RlZCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
|
@@ -197,4 +197,4 @@ async function _requireStepUp(options, req, res, next) {
|
|
|
197
197
|
}
|
|
198
198
|
next();
|
|
199
199
|
}
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC11cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3N0ZXAtdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXFCdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQXdCLE1BQU0sMEJBQTBCLENBQUM7QUFDNUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDO0FBU2pDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQTRCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBcUJwRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxLQUFhO0lBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFxQixLQUFLLENBQUMsQ0FBQztJQUUvRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvRCxN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O1lBQy9FLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsNkJBQTZCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN0RSxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksRUFBRSxDQUFDO0FBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIGByZXF1aXJlU3RlcFVwYCDigJQgYSBzaGFyZWQgc3RlcC11cCAocmVjZW50LXBhc3N3b3JkLXJldmVyaWZ5KSBnYXRlIGZvciB0aGVcbiAqIHN0YXRlbGVzcyBhcGkgc2VydmljZXMsIG1pcnJvcmluZyB0aGUgcGxhdGZvcm0gbWlkZGxld2FyZSBvZiB0aGUgc2FtZSBuYW1lLlxuICpcbiAqIEZsb3c6IHRoZSBVSSBoaXRzIGBQT1NUIC9hcGkvYXV0aC9zdGVwLXVwYCAocGxhdGZvcm0pIHRvIHJlLXZlcmlmeSB0aGUgdXNlcjtcbiAqIHBsYXRmb3JtIG1pbnRzIGEgc2hvcnQtbGl2ZWQgKDYwcykgYHN0ZXAtdXBgIEpXVCB3aXRoIHRoZSBTQU1FIEVTMjU2IHNpZ25pbmdcbiAqIGtleSBpdCBtaW50cyBhY2Nlc3MgdG9rZW5zIHdpdGgsIHNvIHRoZXNlIHNlcnZpY2VzIHZlcmlmeSBpdCB0aHJvdWdoIHRoZSBzYW1lXG4gKiBKV0tTLiBUaGUgVUlcbiAqIHJlcGxheXMgaXQgYXMgdGhlIGBYLVN0ZXAtVXAtVG9rZW5gIGhlYWRlciBvbiB0aGUgZGVzdHJ1Y3RpdmUvc2Vuc2l0aXZlIGNhbGw7XG4gKiB0aGlzIG1pZGRsZXdhcmUgdmVyaWZpZXMgaXQsIGJpbmRzIGl0IHRvIHRoZSBjYWxsZXIgKGBzdWJgIG1hdGNoKSwgYW5kXG4gKiBjb25zdW1lcyBpdHMgYGp0aWAgb25jZSAoUmVkaXMtYmFja2VkIGNyb3NzLWluc3RhbmNlIHdoZW4gY29uZmlndXJlZCwgZWxzZSBhXG4gKiBib3VuZGVkIHByb2Nlc3MtbG9jYWwgc2V0KSBzbyBhIHJlcGxheSBpbnNpZGUgdGhlIFRUTCBpcyByZWplY3RlZC5cbiAqXG4gKiBXSFkgaGVyZTogcmVzdG9yZSBlbmRwb2ludHMgb24gdGhlIGFwaSBzZXJ2aWNlcyAocGlwZWxpbmUvcGx1Z2luLy4uLikgYXJlXG4gKiBzdGVwLXVwLWdhdGVkLCBzbyB0aGUgdmVyaWZ5ICsgc2luZ2xlLXVzZSBqdGkgbGl2ZSBpbiBhcGktY29yZSB3aGVyZSBhbnlcbiAqIHNlcnZpY2UgY2FuIHJlcXVpcmUgdGhlbS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHZlcmlmeVVzZXJKd3QgfSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuaW1wb3J0IHsgcmVjb3JkQXV0aHpEZW5pYWwgfSBmcm9tICcuL3Blcm1pc3Npb24tZ2F0ZXMuanMnO1xuaW1wb3J0IHsgdGFnUm91dGVHYXRlIH0gZnJvbSAnLi9yb3V0ZS10YWJsZS5qcyc7XG5pbXBvcnQgeyBpc1NlcnZpY2VBY2NvdW50UHJpbmNpcGFsLCBpc1NlcnZpY2VQcmluY2lwYWwgfSBmcm9tICcuL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQ2xpZW50LCBjcmVhdGVSZWRpc1JlYWR5R2F0ZSwgdHlwZSBSZWFkeUF3YXJlUmVkaXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnYtcmVkaXMuanMnO1xuaW1wb3J0IHsgZ2V0SGVhZGVyU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvaGVhZGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3N0ZXAtdXAnKTtcbmNvbnN0IEhFQURFUiA9ICd4LXN0ZXAtdXAtdG9rZW4nO1xuXG4vKipcbiAqIEhvdyBhIHN0ZXAtdXAgdG9rZW4gd2FzIGVhcm5lZC4gTWlycm9ycyBwbGF0Zm9ybSdzIGBTdGVwVXBNZXRob2RgOyBrZXB0IGhlcmVcbiAqIGFzIGl0cyBvd24gdW5pb24gc28gYSB2ZXJpZmllciBjYW4gbmFtZSB0aGUgZmFjdG9ycyBpdCBhY2NlcHRzIHdpdGhvdXRcbiAqIGltcG9ydGluZyBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IHR5cGUgU3RlcFVwTWV0aG9kID0gJ3Bhc3N3b3JkJyB8ICd3ZWJhdXRobicgfCAndG90cCcgfCAncmVhdXRoJztcblxuLyoqXG4gKiBUaGUgZmFjdG9ycyB0aGF0IGNvdW50IGFzIGEgU0VDT05EIEZBQ1RPUiwgZm9yIHJvdXRlcyB0aGF0IG1heSBvbmx5IGJlXG4gKiB1bmxvY2tlZCBieSBvbmUgKCM4OiBpbXBlcnNvbmF0aW9uLCBLTVMsIElkUCBzZXR0aW5ncywgcGxhdGZvcm0gYWRtaW4pLlxuICpcbiAqIEEgcGFzc3dvcmQgb3IgYSBwcm92aWRlciByZS1hdXRoIHByb3ZlcyB0aGUgc2FtZSBzaW5nbGUgZmFjdG9yIHRoZSBzZXNzaW9uIHdhc1xuICogYWxyZWFkeSBvcGVuZWQgd2l0aCwgc28gb24gdGhvc2Ugcm91dGVzIHRoZXkgYXJlIG5vdCBlbm91Z2g6IHRoZSBwb2ludCBpcyB0aGF0XG4gKiBzb21lb25lIGhvbGRpbmcgb25seSBhIHN0b2xlbiBzZXNzaW9uIOKAlCBvciBvbmx5IGEgc3RvbGVuIHBhc3N3b3JkIOKAlCBjYW5ub3RcbiAqIHByb2NlZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTVFJPTkdfU1RFUF9VUF9NRVRIT0RTOiByZWFkb25seSBTdGVwVXBNZXRob2RbXSA9IFsnd2ViYXV0aG4nLCAndG90cCddO1xuXG4vKiogUGF5bG9hZCBvZiBhIHBsYXRmb3JtLWlzc3VlZCBzdGVwLXVwIHRva2VuIChzZWUgcGxhdGZvcm0gaXNzdWVTdGVwVXBUb2tlbikuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBVcFRva2VuUGF5bG9hZCB7XG4gIHR5cGU6ICdzdGVwLXVwJztcbiAgc3ViOiBzdHJpbmc7XG4gIGp0aTogc3RyaW5nO1xuICAvKiogV2hpY2ggZmFjdG9yIGVhcm5lZCBpdC4gQWJzZW50IG9ubHkgb24gYSB0b2tlbiBtaW50ZWQgYmVmb3JlIHRoZSBjbGFpbVxuICAgKiAgZXhpc3RlZCwgd2hpY2ggYSBtZXRob2QtcmVzdHJpY3RlZCBnYXRlIHRyZWF0cyBhcyBcIm5vdCBwcm92ZW5cIi4gKi9cbiAgbWV0aG9kPzogU3RlcFVwTWV0aG9kO1xuICBpYXQ6IG51bWJlcjtcbiAgZXhwOiBudW1iZXI7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgcmVxdWlyZVN0ZXBVcH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVTdGVwVXBPcHRpb25zIHtcbiAgLyoqIFJlc3RyaWN0IHdoaWNoIGZhY3RvcnMgbWF5IGVhcm4gdGhlIHN0ZXAtdXAgKGUuZy4ge0BsaW5rIFNUUk9OR19TVEVQX1VQX01FVEhPRFN9KS5cbiAgICogIE9taXR0ZWQgbWVhbnMgYW55IGZhY3RvciB0aGUgcGxhdGZvcm0gd2lsbCBpc3N1ZSBhIHRva2VuIGZvci4gKi9cbiAgbWV0aG9kcz86IHJlYWRvbmx5IFN0ZXBVcE1ldGhvZFtdO1xufVxuXG4vKipcbiAqIFZlcmlmeSBhIHN0ZXAtdXAgdG9rZW46IGEgdmFsaWQgRVMyNTYgc2lnbmF0dXJlIGZyb20gb25lIG9mIHBsYXRmb3JtJ3NcbiAqIHB1Ymxpc2hlZCBzaWduaW5nIGtleXMsIGlzc3VlciBhbmQgYXVkaWVuY2Ugd2hlbiBjb25maWd1cmVkLCBBTkQgdGhlXG4gKiBgdHlwZTogJ3N0ZXAtdXAnYCArIGBqdGlgIGNsYWltcyDigJQgYSBwbGFpbiBhY2Nlc3MgdG9rZW4gaXMgc2lnbmVkIGJ5IHRoZSBzYW1lXG4gKiBrZXkgYW5kIGNhcnJpZXMgdGhlIHNhbWUgYHN1YmAsIHNvIHdpdGhvdXQgYXNzZXJ0aW5nIHRoZSBzdGVwLXVwIHNoYXBlIGl0XG4gKiB3b3VsZCBieXBhc3MgdGhlIGdhdGUuIFRocm93cyBvbiBhbnkgZmFpbHVyZSAoYW4gdW5mZXRjaGFibGUga2V5IHNldCBpbmNsdWRlZDpcbiAqIGFuIHVudmVyaWZpYWJsZSB0b2tlbiBpcyBub3QgYSBzdGVwLXVwKS4gRG9lcyBOT1QgYmluZCB0byBhIGNhbGxlciDigJRcbiAqIGByZXF1aXJlU3RlcFVwYCBkb2VzIHRoZSBgc3ViYCBtYXRjaCBhbmQgc2luZ2xlLXVzZSBjb25zdW1lLlxuICpcbiAqIERlbGVnYXRlcyB0byBgcmVxdWlyZUF1dGhgJ3Mgb3duIHByaW1pdGl2ZSAoYHZlcmlmeVVzZXJKd3RgKSByYXRoZXIgdGhhblxuICogcmUtaW1wbGVtZW50aW5nIGl0LiBUaGUgaGFuZC1yb2xsZWQgY29weSB0aGlzIHJlcGxhY2VkIGRyb3BwZWQgVFdPIG9mIGl0c1xuICogZ3VhcmRzOiBpdCBuZXZlciBwaW5uZWQgaXNzdWVyL2F1ZGllbmNlLCBhbmQgaXRzIHByZXZpb3VzLXNlY3JldCByZXRyeSBoYWQgbm9cbiAqIGV4cGlyeS9ub3QtYmVmb3JlIGNhcnZlLW91dCwgc28gYW4gRVhQSVJFRCB0b2tlbiBzdXJmYWNlZCBhcyBhIHNpZ25hdHVyZSBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVN0ZXBVcFRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFN0ZXBVcFRva2VuUGF5bG9hZD4ge1xuICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdmVyaWZ5VXNlckp3dDxTdGVwVXBUb2tlblBheWxvYWQ+KHRva2VuKTtcblxuICBpZiAocGF5bG9hZC50eXBlICE9PSAnc3RlcC11cCcgfHwgIXBheWxvYWQuanRpIHx8ICFwYXlsb2FkLnN1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcignSU5WQUxJRF9TVEVQX1VQX1RPS0VOJyk7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8vIC0tIFNpbmdsZS11c2UganRpIHN0b3JlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWRpcyBTRVQgTlggRVggd2hlbiBSZWRpcyBpcyBjb25maWd1cmVkIChjcm9zcy1pbnN0YW5jZSBzaW5nbGUtdXNlKTsgZWxzZSBhXG4vLyBib3VuZGVkIHByb2Nlc3MtbG9jYWwgbWFwIHdpdGggVFRMIHN3ZWVwIChwZXItcHJvY2VzcykuIEEgc3RlcC11cCB0b2tlbiBpc1xuLy8gNjBzLWxpdmVkLiBXaGVuIFJlZGlzIElTIGNvbmZpZ3VyZWQgaXQncyB0aGUgYXV0aG9yaXRhdGl2ZSBzdG9yZTogYSBSZWRpc1xuLy8gZXJyb3IgRkFJTFMgQ0xPU0VEICh0aHJvd3Mg4oaSIFNURVBfVVBfSU5WQUxJRCwgdXNlciByZS12ZXJpZmllcykgcmF0aGVyIHRoYW5cbi8vIGRlZ3JhZGluZyB0byB0aGUgcGVyLWluc3RhbmNlIG1lbSBndWFyZCwgd2hpY2ggd291bGQgYWNjZXB0IGEgY3Jvc3MtaW5zdGFuY2Vcbi8vIHJlcGxheSBkdXJpbmcgdGhlIG91dGFnZS4gVGhlIG1lbSBndWFyZCBpcyB1c2VkIE9OTFkgd2hlbiBSZWRpcyBpcyBhYnNlbnQuXG5cbnR5cGUgSnRpUmVkaXMgPSBSZWFkeUF3YXJlUmVkaXMgJiB7IHNldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTx1bmtub3duPiB9O1xubGV0IF9yZWRpczogSnRpUmVkaXMgfCBudWxsIHwgdW5kZWZpbmVkO1xubGV0IF9yZWRpc1JlYWR5OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQ7XG4vKipcbiAqIFRoZSBqdGkgY2xpZW50LCBidWlsdCBsYXppbHkuIFRoZSBlbnYgY2xpZW50IGhhcyBubyBvZmZsaW5lIHF1ZXVlLCBzbyBhIFNFVCBvblxuICogYSBjb25uZWN0aW9uIHRoYXQgaXNuJ3QgdXAgeWV0IGlzIHJlamVjdGVkIOKAlCB0aGUgRklSU1Qgc3RlcC11cCBvbiBldmVyeSBwb2RcbiAqIHdvdWxkIGZhaWwuIFdhaXQgKGJvdW5kZWQsIG5ldmVyIHJlamVjdGluZykgZm9yIHJlYWRpbmVzcyBiZWZvcmVcbiAqIGhhbmRpbmcgaXQgb3V0OyBhIGdlbnVpbmVseSBkb3duIFJlZGlzIHN0aWxsIGZhaWxzIGNsb3NlZCBvbiB0aGUgU0VUIGJlbG93LlxuICovXG5hc3luYyBmdW5jdGlvbiByZWRpcygpOiBQcm9taXNlPEp0aVJlZGlzIHwgbnVsbD4ge1xuICBpZiAoX3JlZGlzID09PSB1bmRlZmluZWQpIHtcbiAgICBfcmVkaXMgPSBjcmVhdGVFbnZSZWRpc0NsaWVudDxKdGlSZWRpcz4oJ3N0ZXAtdXAtanRpJyk7XG4gICAgX3JlZGlzUmVhZHkgPSBfcmVkaXMgPyBjcmVhdGVSZWRpc1JlYWR5R2F0ZShfcmVkaXMpIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmIChfcmVkaXNSZWFkeSkgYXdhaXQgX3JlZGlzUmVhZHkoKTtcbiAgcmV0dXJuIF9yZWRpcztcbn1cblxuY29uc3QgbWVtSnRpID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsgLy8ganRpIC0+IGV4cGlyeSBlcG9jaCBtc1xuY29uc3QgbWVtU3dlZXAgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGZvciAoY29uc3QgW2p0aSwgZXhwXSBvZiBtZW1KdGkpIGlmIChleHAgPD0gbm93KSBtZW1KdGkuZGVsZXRlKGp0aSk7XG59LCAzMF8wMDApO1xubWVtU3dlZXAudW5yZWY/LigpO1xuXG4vKipcbiAqIEhhcmQgY2VpbGluZyBvbiB0aGUgcHJvY2Vzcy1sb2NhbCBqdGkgc2V0LlxuICpcbiAqIFRoZSAzMHMgc3dlZXAgYWxvbmUgZG9lcyBOT1QgYm91bmQgaXQ6IGVudHJpZXMgb25seSBsZWF2ZSBvbmNlIHRoZWlyIHRva2VuJ3NcbiAqIFRUTCBoYXMgcGFzc2VkLCBzbyBhIGJ1cnN0IG9mIHN0ZXAtdXAgdHJhZmZpYyAob3IgYSBmbG9vZCBvZiBkaXN0aW5jdCBmb3JnZWRcbiAqIGp0aXMgb24gYSBSZWRpcy1sZXNzIGRlcGxveW1lbnQpIGdyb3dzIHRoZSBtYXAgZmFzdGVyIHRoYW4gdGhlIHN3ZWVwIGRyYWluc1xuICogaXQuIFRoaXMgaXMgYSByZXBsYXkgZ3VhcmQsIHNvIHNoZWRkaW5nIHRoZSBPTERFU1QgZW50cmllcyBpcyB0aGUgc2FmZVxuICogZGlyZWN0aW9uOiB0aGUgd29yc3QgY2FzZSBpcyB0aGF0IGEgbG9uZy1leHBpcmVkIGp0aSBjb3VsZCBiZSByZXBsYXllZCwgYW5kXG4gKiBleHBpcnkgaXMgZW5mb3JjZWQgaW5kZXBlbmRlbnRseSBieSB0aGUgdG9rZW4ncyBvd24gYGV4cGAuXG4gKi9cbmNvbnN0IE1FTV9KVElfTUFYID0gMTBfMDAwO1xuXG4vKiogRHJvcCB0aGUgc29vbmVzdC10by1leHBpcmUgZW50cmllcyB1bnRpbCB0aGUgbWFwIGlzIHVuZGVyIHRoZSBjZWlsaW5nLiAqL1xuZnVuY3Rpb24gZXZpY3RPbGRlc3RKdGkoKTogdm9pZCB7XG4gIGlmIChtZW1KdGkuc2l6ZSA8IE1FTV9KVElfTUFYKSByZXR1cm47XG4gIGNvbnN0IGJ5RXhwaXJ5ID0gWy4uLm1lbUp0aS5lbnRyaWVzKCldLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgY29uc3QgZXhjZXNzID0gbWVtSnRpLnNpemUgLSBNRU1fSlRJX01BWCArIDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXhjZXNzOyBpICs9IDEpIG1lbUp0aS5kZWxldGUoYnlFeHBpcnlbaV1bMF0pO1xufVxuXG4vKipcbiAqIENvbnN1bWUgYSBzdGVwLXVwIGBqdGlgIGV4YWN0bHkgb25jZS4gUmV0dXJucyB0cnVlIGlmIHRoaXMgY2FsbCBjbGFpbWVkIGl0XG4gKiAoZmlyc3QgdXNlKSwgZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgY29uc3VtZWQgKHJlcGxheSkuIGBleHBFcG9jaFNlY29uZHNgIGlzXG4gKiB0aGUgdG9rZW4ncyBgZXhwYCwgc28gdGhlIG1hcmtlciBhdXRvLWV4cGlyZXMgd2l0aCB0aGUgdG9rZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25zdW1lU3RlcFVwSnRpKGp0aTogc3RyaW5nLCBleHBFcG9jaFNlY29uZHM6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB0dGxTZWNvbmRzID0gTWF0aC5tYXgoMSwgZXhwRXBvY2hTZWNvbmRzIC0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkpO1xuICBjb25zdCBjbGllbnQgPSBhd2FpdCByZWRpcygpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgLy8gUmVkaXMgY29uZmlndXJlZCDih5IgYXV0aG9yaXRhdGl2ZSBjcm9zcy1pbnN0YW5jZSBzdG9yZS4gU0VUIE5YIEVYIOKGkiAnT0snXG4gICAgLy8gd2hlbiBuZXdseSBzZXQsIG51bGwgd2hlbiBhbHJlYWR5IGNvbnN1bWVkLiBBIHRocm93biBSZWRpcyBlcnJvciBpcyBOT1RcbiAgICAvLyBjYXVnaHQgaGVyZTogaXQgcHJvcGFnYXRlcyBzbyBgcmVxdWlyZVN0ZXBVcGAgZmFpbHMgY2xvc2VkIChTVEVQX1VQX0lOVkFMSUQpXG4gICAgLy8gaW5zdGVhZCBvZiBzaWxlbnRseSBkZWdyYWRpbmcgdG8gdGhlIHBlci1pbnN0YW5jZSBtZW0gZ3VhcmQuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnNldChgc3RlcHVwOmp0aToke2p0aX1gLCAnMScsICdFWCcsIHR0bFNlY29uZHMsICdOWCcpO1xuICAgIHJldHVybiByZXMgPT09ICdPSyc7XG4gIH1cbiAgLy8gTm8gUmVkaXMg4oeSIHNpbmdsZS1pbnN0YW5jZSBkZXBsb3ltZW50OyB0aGUgcHJvY2Vzcy1sb2NhbCBtYXAgSVMgdGhlIHN0b3JlLlxuICBpZiAobWVtSnRpLmhhcyhqdGkpKSByZXR1cm4gZmFsc2U7XG4gIGV2aWN0T2xkZXN0SnRpKCk7XG4gIG1lbUp0aS5zZXQoanRpLCBEYXRlLm5vdygpICsgdHRsU2Vjb25kcyAqIDEwMDApO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIG1pZGRsZXdhcmU6IHJlcXVpcmUgYSB2YWxpZCwgY2FsbGVyLWJvdW5kLCBzaW5nbGUtdXNlIHN0ZXAtdXAgdG9rZW4gaW5cbiAqIHRoZSBgWC1TdGVwLVVwLVRva2VuYCBoZWFkZXIuIE11c3QgcnVuIEFGVEVSIGByZXF1aXJlQXV0aGAgKG5lZWRzIGByZXEudXNlcmApLlxuICpcbiAqIFVzZSBkaXJlY3RseSAoYHJvdXRlci5wb3N0KCcveCcsIHJlcXVpcmVBdXRoLCByZXF1aXJlU3RlcFVwLCBoKWApIGZvciB0aGVcbiAqIG9yZGluYXJ5IGFueS1mYWN0b3IgZ2F0ZSwgb3IgY2FsbCBpdCB3aXRoIGB7IG1ldGhvZHMgfWAgdG8gZGVtYW5kIHRoYXQgdGhlXG4gKiBjb25maXJtYXRpb24gd2FzIGVhcm5lZCBieSBhIHNwZWNpZmljIGZhY3RvciDigJQgYHJlcXVpcmVTdGVwVXAoeyBtZXRob2RzOlxuICogU1RST05HX1NURVBfVVBfTUVUSE9EUyB9KWAgb24gdGhlIHJvdXRlcyB3aGVyZSBhIHBhc3N3b3JkIHJlLXByb21wdCBpcyBub3QgYVxuICogbWVhbmluZ2Z1bCBzZWNvbmQgcHJvb2YuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlU3RlcFVwKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlU3RlcFVwKG9wdGlvbnM6IFJlcXVpcmVTdGVwVXBPcHRpb25zKTogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVTdGVwVXAoXG4gIHJlcU9yT3B0aW9uczogUmVxdWVzdCB8IFJlcXVpcmVTdGVwVXBPcHRpb25zLFxuICByZXM/OiBSZXNwb25zZSxcbiAgbmV4dD86IE5leHRGdW5jdGlvbixcbik6IFByb21pc2U8dm9pZD4gfCAoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkKSB7XG4gIC8vIFRoZSBkaXJlY3QgZm9ybSBSRVRVUk5TIHRoZSBwcm9taXNlIChFeHByZXNzIGlnbm9yZXMgaXQ7IGEgdGVzdCBhd2FpdHMgaXQpLFxuICAvLyBzbyBjb21wb3NpbmcgdGhlIGdhdGUgYXMgYHJvdXRlci5wb3N0KCcveCcsIHJlcXVpcmVTdGVwVXAsIGgpYCBiZWhhdmVzXG4gIC8vIGV4YWN0bHkgYXMgaXQgZGlkIGJlZm9yZSB0aGUgb3B0aW9ucyBmb3JtIGV4aXN0ZWQuXG4gIGlmIChyZXMgJiYgbmV4dCAmJiAnaGVhZGVycycgaW4gcmVxT3JPcHRpb25zKSB7XG4gICAgcmV0dXJuIF9yZXF1aXJlU3RlcFVwKHt9LCByZXFPck9wdGlvbnMgYXMgUmVxdWVzdCwgcmVzLCBuZXh0KTtcbiAgfVxuICBjb25zdCBvcHRpb25zID0gcmVxT3JPcHRpb25zIGFzIFJlcXVpcmVTdGVwVXBPcHRpb25zO1xuICByZXR1cm4gdGFnUm91dGVHYXRlKFxuICAgIChyZXFJbm5lcjogUmVxdWVzdCwgcmVzSW5uZXI6IFJlc3BvbnNlLCBuZXh0SW5uZXI6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgICAgdm9pZCBfcmVxdWlyZVN0ZXBVcChvcHRpb25zLCByZXFJbm5lciwgcmVzSW5uZXIsIG5leHRJbm5lcik7XG4gICAgfSxcbiAgICB7IGtpbmQ6ICdzdGVwVXAnLCAuLi4ob3B0aW9ucy5tZXRob2RzID8geyBtZXRob2RzOiBbLi4ub3B0aW9ucy5tZXRob2RzXSB9IDoge30pIH0sXG4gICk7XG59XG50YWdSb3V0ZUdhdGUocmVxdWlyZVN0ZXBVcCwgeyBraW5kOiAnc3RlcFVwJyB9KTtcblxuYXN5bmMgZnVuY3Rpb24gX3JlcXVpcmVTdGVwVXAob3B0aW9uczogUmVxdWlyZVN0ZXBVcE9wdGlvbnMsIHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFZlcmlmaWVkIGludGVybmFsIHNlcnZpY2UgcHJpbmNpcGFscyBhcmUgRVhFTVBUOiBzdGVwLXVwIGlzIGEgcmUtdmVyaWZ5LXRoZS1cbiAgLy8gSFVNQU4gZ2F0ZSAodGhleSByZXBsYXkgYSBwYXNzd29yZC1yZXZlcmlmeSB0b2tlbiksIHdoaWNoIGEgc2VydmljZSB0b2tlblxuICAvLyBzdHJ1Y3R1cmFsbHkgY2Fubm90IHByb2R1Y2UuIFNlcnZpY2VzIGFscmVhZHkgYnlwYXNzIGByZXF1aXJlUGVybWlzc2lvbmAgb25cbiAgLy8gdGhlIHNhbWUgdHJ1c3QgYmFzaXMgKGEgc2lnbmVkIHNlcnZpY2UgSldUKSwgYW5kIGludGVybmFsIGNhbGxlcnMgb2YgYVxuICAvLyBzdGVwLXVwLWdhdGVkIHJvdXRlIOKAlCBlLmcuIHRoZSBwbGF0Zm9ybSBvcmctY2FzY2FkZSdzIGBERUxFVEUgL3F1b3Rhcy86b3JnSWRgXG4gIC8vIG9yIHRoZSBiaWxsaW5n4oaScXVvdGEgZW50aXRsZW1lbnQgc3luYyDigJQgd291bGQgb3RoZXJ3aXNlIGJlIGhhcmQtYmxvY2tlZC5cbiAgLy8gU2FmZTogYSBzZXJ2aWNlIHRva2VuIGNhbiBvbmx5IGJlIG1pbnRlZCB3aXRoIGEgU0VSVklDRSdzIG93biBFUzI1NiBrZXksXG4gIC8vIHdoaWNoIG5vIGV4dGVybmFsIGNsaWVudCBob2xkcywgc28gdGhpcyBjYW4ndCBiZSBzcG9vZmVkIHRvIHNraXBcbiAgLy8gc3RlcC11cC5cbiAgaWYgKGlzU2VydmljZVByaW5jaXBhbChyZXEpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEFuIE9SRyBTRVJWSUNFIEFDQ09VTlQgaXMgdGhlIG9wcG9zaXRlIGNhc2U6IGl0IGlzIHN1YmplY3QgdG8gZXZlcnkgZ2F0ZSBhXG4gIC8vIG1lbWJlciBpcywgYW5kIHRoZXJlIGlzIG5vIHBlcnNvbiBiZWhpbmQgaXQgdG8gcmUtdmVyaWZ5IOKAlCBzbyBpdCBjYW4gTkVWRVJcbiAgLy8gcGFzcyBzdGVwLXVwLiBSZWZ1c2UgZXhwbGljaXRseSAocmF0aGVyIHRoYW4gbGV0dGluZyBpdCBmYWxsIHRocm91Z2ggdG8gdGhlXG4gIC8vIGBzdWJgLWJvdW5kIHRva2VuIGNoZWNrLCB3aGljaCB3b3VsZCBmYWlsIHdpdGggYSBjb25mdXNpbmcgU1RFUF9VUF9NSVNNQVRDSClcbiAgLy8gc28gXCJhIG1hY2hpbmUgY3JlZGVudGlhbCBuZXZlciBzYXRpc2ZpZXMgYW4gYXNzdXJhbmNlIHJlcXVpcmVtZW50XCIgaXMgYVxuICAvLyBwcm9wZXJ0eSBvZiB0aGlzIGdhdGUsIG5vdCBhIHNpZGUgZWZmZWN0IG9mIGhvdyBzdGVwLXVwIHRva2VucyBhcmUgbWludGVkLlxuICBpZiAoaXNTZXJ2aWNlQWNjb3VudFByaW5jaXBhbChyZXEpKSB7XG4gICAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnc3RlcC11cCAoU1RFUF9VUF9OT1RfQVZBSUxBQkxFOiBzZXJ2aWNlIGFjY291bnQpJyk7XG4gICAgc2VuZEVycm9yKHJlcywgNDAzLCAnQSBzZXJ2aWNlIGFjY291bnQgY2Fubm90IHBlcmZvcm0gdGhpcyBhY3Rpb24g4oCUIGl0IHJlcXVpcmVzIGEgcGVyc29uIHRvIHJlLXZlcmlmeScsICdTVEVQX1VQX05PVF9BVkFJTEFCTEUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjYWxsZXJTdWIgPSAocmVxIGFzIFJlcXVlc3QgJiB7IHVzZXI/OiB7IHN1Yj86IHN0cmluZyB9IH0pLnVzZXI/LnN1YjtcbiAgaWYgKCFjYWxsZXJTdWIpIHtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDEsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsICdVTkFVVEhPUklaRUQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0b2tlbiA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1tIRUFERVJdKTtcbiAgaWYgKCF0b2tlbikge1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdmVyaWZpY2F0aW9uIHJlcXVpcmVkJywgJ1NURVBfVVBfUkVRVUlSRUQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcGF5bG9hZDogU3RlcFVwVG9rZW5QYXlsb2FkO1xuICB0cnkge1xuICAgIHBheWxvYWQgPSBhd2FpdCB2ZXJpZnlTdGVwVXBUb2tlbih0b2tlbik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEEgcHJlc2VudGVkLWJ1dC11bnZlcmlmaWFibGUgdG9rZW4gKGZvcmdlZCwgZXhwaXJlZCwgd3Jvbmcga2V5KSBpcyBvbiB0aGVcbiAgICAvLyB0cmFpbDsgYSBNSVNTSU5HIG9uZSAoU1RFUF9VUF9SRVFVSVJFRCBhYm92ZSkgaXMgdGhlIFVJJ3Mgbm9ybWFsIGZpcnN0XG4gICAgLy8gYXR0ZW1wdCBhbmQgaXMgbm90LlxuICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ3N0ZXAtdXAgKFNURVBfVVBfSU5WQUxJRCknKTtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDEsICdTdGVwLXVwIHRva2VuIGludmFsaWQgb3IgZXhwaXJlZCcsICdTVEVQX1VQX0lOVkFMSUQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF5bG9hZC5zdWIgIT09IGNhbGxlclN1Yikge1xuICAgIC8vIFNvbWVvbmUgZWxzZSdzIHN0ZXAtdXAgdG9rZW4gcmVwbGF5ZWQgb24gdGhpcyBzZXNzaW9uIOKAlCBuZXZlciBhIFVJIGJ1Zy5cbiAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdzdGVwLXVwIChTVEVQX1VQX01JU01BVENIKScpO1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdG9rZW4gZG9lcyBub3QgbWF0Y2ggc2Vzc2lvbicsICdTVEVQX1VQX01JU01BVENIJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRmFjdG9yIHJlc3RyaWN0aW9uLiBDaGVja2VkIEJFRk9SRSB0aGUganRpIGlzIGNvbnN1bWVkLCBzbyBhIHRva2VuXG4gIC8vIGVhcm5lZCBieSB0aGUgd3JvbmcgZmFjdG9yIGNhbiBzdGlsbCBiZSBzcGVudCBvbiBhIHJvdXRlIHRoYXQgYWNjZXB0cyBpdCDigJRcbiAgLy8gYnVybmluZyBpdCBoZXJlIHdvdWxkIG1ha2UgdGhlIHJlZnVzYWwgZGVzdHJ1Y3RpdmUgYXMgd2VsbCBhcyBjb25mdXNpbmcuXG4gIGlmIChvcHRpb25zLm1ldGhvZHMgJiYgIShwYXlsb2FkLm1ldGhvZCAmJiBvcHRpb25zLm1ldGhvZHMuaW5jbHVkZXMocGF5bG9hZC5tZXRob2QpKSkge1xuICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgYHN0ZXAtdXAgKFNURVBfVVBfTUVUSE9EX1JFUVVJUkVEOiAke29wdGlvbnMubWV0aG9kcy5qb2luKCcgb3IgJyl9LCBnb3QgJHtwYXlsb2FkLm1ldGhvZCA/PyAnbm9uZSd9KWApO1xuICAgIHNlbmRFcnJvcihcbiAgICAgIHJlcywgNDAxLFxuICAgICAgJ1RoaXMgYWN0aW9uIG11c3QgYmUgY29uZmlybWVkIHdpdGggYSBwYXNza2V5IG9yIGFuIGF1dGhlbnRpY2F0b3IgY29kZScsXG4gICAgICAnU1RFUF9VUF9NRVRIT0RfUkVRVUlSRUQnLFxuICAgICAgeyBtZXRob2RzOiBbLi4ub3B0aW9ucy5tZXRob2RzXSB9LFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoIShhd2FpdCBjb25zdW1lU3RlcFVwSnRpKHBheWxvYWQuanRpLCBwYXlsb2FkLmV4cCkpKSB7XG4gICAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdzdGVwLXVwIChTVEVQX1VQX1JFUExBWSknKTtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdG9rZW4gYWxyZWFkeSB1c2VkIG9yIGV4cGlyZWQnLCAnU1RFUF9VUF9SRVBMQVknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcignU3RlcC11cCBqdGkgY29uc3VtZSBlcnJvcmVkJywgeyBlcnJvcjogU3RyaW5nKGVycikgfSk7XG4gICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB2ZXJpZmljYXRpb24gZmFpbGVkJywgJ1NURVBfVVBfSU5WQUxJRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5leHQoKTtcbn1cbiJdfQ==
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC11cC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvc3RlcC11cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBcUJ0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUM7QUFTakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBNEIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFxQnBGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLEtBQWE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQXFCLEtBQUssQ0FBQyxDQUFDO0lBRS9ELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9ELE1BQU0sSUFBSSxLQUFLLENB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LENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSw2QkFBNkIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RFLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogYHJlcXVpcmVTdGVwVXBgIOKAlCBhIHNoYXJlZCBzdGVwLXVwIChyZWNlbnQtcGFzc3dvcmQtcmV2ZXJpZnkpIGdhdGUgZm9yIHRoZVxuICogc3RhdGVsZXNzIGFwaSBzZXJ2aWNlcywgbWlycm9yaW5nIHRoZSBwbGF0Zm9ybSBtaWRkbGV3YXJlIG9mIHRoZSBzYW1lIG5hbWUuXG4gKlxuICogRmxvdzogdGhlIFVJIGhpdHMgYFBPU1QgL2FwaS9hdXRoL3N0ZXAtdXBgIChwbGF0Zm9ybSkgdG8gcmUtdmVyaWZ5IHRoZSB1c2VyO1xuICogcGxhdGZvcm0gbWludHMgYSBzaG9ydC1saXZlZCAoNjBzKSBgc3RlcC11cGAgSldUIHdpdGggdGhlIFNBTUUgRVMyNTYgc2lnbmluZ1xuICoga2V5IGl0IG1pbnRzIGFjY2VzcyB0b2tlbnMgd2l0aCwgc28gdGhlc2Ugc2VydmljZXMgdmVyaWZ5IGl0IHRocm91Z2ggdGhlIHNhbWVcbiAqIEpXS1MuIFRoZSBVSVxuICogcmVwbGF5cyBpdCBhcyB0aGUgYFgtU3RlcC1VcC1Ub2tlbmAgaGVhZGVyIG9uIHRoZSBkZXN0cnVjdGl2ZS9zZW5zaXRpdmUgY2FsbDtcbiAqIHRoaXMgbWlkZGxld2FyZSB2ZXJpZmllcyBpdCwgYmluZHMgaXQgdG8gdGhlIGNhbGxlciAoYHN1YmAgbWF0Y2gpLCBhbmRcbiAqIGNvbnN1bWVzIGl0cyBganRpYCBvbmNlIChSZWRpcy1iYWNrZWQgY3Jvc3MtaW5zdGFuY2Ugd2hlbiBjb25maWd1cmVkLCBlbHNlIGFcbiAqIGJvdW5kZWQgcHJvY2Vzcy1sb2NhbCBzZXQpIHNvIGEgcmVwbGF5IGluc2lkZSB0aGUgVFRMIGlzIHJlamVjdGVkLlxuICpcbiAqIFdIWSBoZXJlOiByZXN0b3JlIGVuZHBvaW50cyBvbiB0aGUgYXBpIHNlcnZpY2VzIChwaXBlbGluZS9wbHVnaW4vLi4uKSBhcmVcbiAqIHN0ZXAtdXAtZ2F0ZWQsIHNvIHRoZSB2ZXJpZnkgKyBzaW5nbGUtdXNlIGp0aSBsaXZlIGluIGFwaS1jb3JlIHdoZXJlIGFueVxuICogc2VydmljZSBjYW4gcmVxdWlyZSB0aGVtLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgdmVyaWZ5VXNlckp3dCB9IGZyb20gJy4vand0LXZlcmlmeS5qcyc7XG5pbXBvcnQgeyByZWNvcmRBdXRoekRlbmlhbCB9IGZyb20gJy4vcGVybWlzc2lvbi1nYXRlcy5qcyc7XG5pbXBvcnQgeyB0YWdSb3V0ZUdhdGUgfSBmcm9tICcuL3JvdXRlLXRhYmxlLmpzJztcbmltcG9ydCB7IGlzU2VydmljZUFjY291bnRQcmluY2lwYWwsIGlzU2VydmljZVByaW5jaXBhbCB9IGZyb20gJy4vc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNDbGllbnQsIGNyZWF0ZVJlZGlzUmVhZHlHYXRlLCB0eXBlIFJlYWR5QXdhcmVSZWRpcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vudi1yZWRpcy5qcyc7XG5pbXBvcnQgeyBnZXRIZWFkZXJTdHJpbmcgfSBmcm9tICcuLi91dGlscy9oZWFkZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc3RlcC11cCcpO1xuY29uc3QgSEVBREVSID0gJ3gtc3RlcC11cC10b2tlbic7XG5cbi8qKlxuICogSG93IGEgc3RlcC11cCB0b2tlbiB3YXMgZWFybmVkLiBNaXJyb3JzIHBsYXRmb3JtJ3MgYFN0ZXBVcE1ldGhvZGA7IGtlcHQgaGVyZVxuICogYXMgaXRzIG93biB1bmlvbiBzbyBhIHZlcmlmaWVyIGNhbiBuYW1lIHRoZSBmYWN0b3JzIGl0IGFjY2VwdHMgd2l0aG91dFxuICogaW1wb3J0aW5nIHBsYXRmb3JtLlxuICovXG5leHBvcnQgdHlwZSBTdGVwVXBNZXRob2QgPSAncGFzc3dvcmQnIHwgJ3dlYmF1dGhuJyB8ICd0b3RwJyB8ICdyZWF1dGgnO1xuXG4vKipcbiAqIFRoZSBmYWN0b3JzIHRoYXQgY291bnQgYXMgYSBTRUNPTkQgRkFDVE9SLCBmb3Igcm91dGVzIHRoYXQgbWF5IG9ubHkgYmVcbiAqIHVubG9ja2VkIGJ5IG9uZSAoIzg6IGltcGVyc29uYXRpb24sIEtNUywgSWRQIHNldHRpbmdzLCBwbGF0Zm9ybSBhZG1pbikuXG4gKlxuICogQSBwYXNzd29yZCBvciBhIHByb3ZpZGVyIHJlLWF1dGggcHJvdmVzIHRoZSBzYW1lIHNpbmdsZSBmYWN0b3IgdGhlIHNlc3Npb24gd2FzXG4gKiBhbHJlYWR5IG9wZW5lZCB3aXRoLCBzbyBvbiB0aG9zZSByb3V0ZXMgdGhleSBhcmUgbm90IGVub3VnaDogdGhlIHBvaW50IGlzIHRoYXRcbiAqIHNvbWVvbmUgaG9sZGluZyBvbmx5IGEgc3RvbGVuIHNlc3Npb24g4oCUIG9yIG9ubHkgYSBzdG9sZW4gcGFzc3dvcmQg4oCUIGNhbm5vdFxuICogcHJvY2VlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUUk9OR19TVEVQX1VQX01FVEhPRFM6IHJlYWRvbmx5IFN0ZXBVcE1ldGhvZFtdID0gWyd3ZWJhdXRobicsICd0b3RwJ107XG5cbi8qKiBQYXlsb2FkIG9mIGEgcGxhdGZvcm0taXNzdWVkIHN0ZXAtdXAgdG9rZW4gKHNlZSBwbGF0Zm9ybSBpc3N1ZVN0ZXBVcFRva2VuKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFVwVG9rZW5QYXlsb2FkIHtcbiAgdHlwZTogJ3N0ZXAtdXAnO1xuICBzdWI6IHN0cmluZztcbiAganRpOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBmYWN0b3IgZWFybmVkIGl0LiBBYnNlbnQgb25seSBvbiBhIHRva2VuIG1pbnRlZCBiZWZvcmUgdGhlIGNsYWltXG4gICAqICBleGlzdGVkLCB3aGljaCBhIG1ldGhvZC1yZXN0cmljdGVkIGdhdGUgdHJlYXRzIGFzIFwibm90IHByb3ZlblwiLiAqL1xuICBtZXRob2Q/OiBTdGVwVXBNZXRob2Q7XG4gIGlhdDogbnVtYmVyO1xuICBleHA6IG51bWJlcjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayByZXF1aXJlU3RlcFVwfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWlyZVN0ZXBVcE9wdGlvbnMge1xuICAvKiogUmVzdHJpY3Qgd2hpY2ggZmFjdG9ycyBtYXkgZWFybiB0aGUgc3RlcC11cCAoZS5nLiB7QGxpbmsgU1RST05HX1NURVBfVVBfTUVUSE9EU30pLlxuICAgKiAgT21pdHRlZCBtZWFucyBhbnkgZmFjdG9yIHRoZSBwbGF0Zm9ybSB3aWxsIGlzc3VlIGEgdG9rZW4gZm9yLiAqL1xuICBtZXRob2RzPzogcmVhZG9ubHkgU3RlcFVwTWV0aG9kW107XG59XG5cbi8qKlxuICogVmVyaWZ5IGEgc3RlcC11cCB0b2tlbjogYSB2YWxpZCBFUzI1NiBzaWduYXR1cmUgZnJvbSBvbmUgb2YgcGxhdGZvcm0nc1xuICogcHVibGlzaGVkIHNpZ25pbmcga2V5cywgaXNzdWVyIGFuZCBhdWRpZW5jZSB3aGVuIGNvbmZpZ3VyZWQsIEFORCB0aGVcbiAqIGB0eXBlOiAnc3RlcC11cCdgICsgYGp0aWAgY2xhaW1zIOKAlCBhIHBsYWluIGFjY2VzcyB0b2tlbiBpcyBzaWduZWQgYnkgdGhlIHNhbWVcbiAqIGtleSBhbmQgY2FycmllcyB0aGUgc2FtZSBgc3ViYCwgc28gd2l0aG91dCBhc3NlcnRpbmcgdGhlIHN0ZXAtdXAgc2hhcGUgaXRcbiAqIHdvdWxkIGJ5cGFzcyB0aGUgZ2F0ZS4gVGhyb3dzIG9uIGFueSBmYWlsdXJlIChhbiB1bmZldGNoYWJsZSBrZXkgc2V0IGluY2x1ZGVkOlxuICogYW4gdW52ZXJpZmlhYmxlIHRva2VuIGlzIG5vdCBhIHN0ZXAtdXApLiBEb2VzIE5PVCBiaW5kIHRvIGEgY2FsbGVyIOKAlFxuICogYHJlcXVpcmVTdGVwVXBgIGRvZXMgdGhlIGBzdWJgIG1hdGNoIGFuZCBzaW5nbGUtdXNlIGNvbnN1bWUuXG4gKlxuICogRGVsZWdhdGVzIHRvIGByZXF1aXJlQXV0aGAncyBvd24gcHJpbWl0aXZlIChgdmVyaWZ5VXNlckp3dGApIHJhdGhlciB0aGFuXG4gKiByZS1pbXBsZW1lbnRpbmcgaXQuIFRoZSBoYW5kLXJvbGxlZCBjb3B5IHRoaXMgcmVwbGFjZWQgZHJvcHBlZCBUV08gb2YgaXRzXG4gKiBndWFyZHM6IGl0IG5ldmVyIHBpbm5lZCBpc3N1ZXIvYXVkaWVuY2UsIGFuZCBpdHMgcHJldmlvdXMtc2VjcmV0IHJldHJ5IGhhZCBub1xuICogZXhwaXJ5L25vdC1iZWZvcmUgY2FydmUtb3V0LCBzbyBhbiBFWFBJUkVEIHRva2VuIHN1cmZhY2VkIGFzIGEgc2lnbmF0dXJlIGVycm9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U3RlcFVwVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8U3RlcFVwVG9rZW5QYXlsb2FkPiB7XG4gIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB2ZXJpZnlVc2VySnd0PFN0ZXBVcFRva2VuUGF5bG9hZD4odG9rZW4pO1xuXG4gIGlmIChwYXlsb2FkLnR5cGUgIT09ICdzdGVwLXVwJyB8fCAhcGF5bG9hZC5qdGkgfHwgIXBheWxvYWQuc3ViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJTlZBTElEX1NURVBfVVBfVE9LRU4nKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZDtcbn1cblxuLy8gLS0gU2luZ2xlLXVzZSBqdGkgc3RvcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlZGlzIFNFVCBOWCBFWCB3aGVuIFJlZGlzIGlzIGNvbmZpZ3VyZWQgKGNyb3NzLWluc3RhbmNlIHNpbmdsZS11c2UpOyBlbHNlIGFcbi8vIGJvdW5kZWQgcHJvY2Vzcy1sb2NhbCBtYXAgd2l0aCBUVEwgc3dlZXAgKHBlci1wcm9jZXNzKS4gQSBzdGVwLXVwIHRva2VuIGlzXG4vLyA2MHMtbGl2ZWQuIFdoZW4gUmVkaXMgSVMgY29uZmlndXJlZCBpdCdzIHRoZSBhdXRob3JpdGF0aXZlIHN0b3JlOiBhIFJlZGlzXG4vLyBlcnJvciBGQUlMUyBDTE9TRUQgKHRocm93cyDihpIgU1RFUF9VUF9JTlZBTElELCB1c2VyIHJlLXZlcmlmaWVzKSByYXRoZXIgdGhhblxuLy8gZGVncmFkaW5nIHRvIHRoZSBwZXItaW5zdGFuY2UgbWVtIGd1YXJkLCB3aGljaCB3b3VsZCBhY2NlcHQgYSBjcm9zcy1pbnN0YW5jZVxuLy8gcmVwbGF5IGR1cmluZyB0aGUgb3V0YWdlLiBUaGUgbWVtIGd1YXJkIGlzIHVzZWQgT05MWSB3aGVuIFJlZGlzIGlzIGFic2VudC5cblxudHlwZSBKdGlSZWRpcyA9IFJlYWR5QXdhcmVSZWRpcyAmIHsgc2V0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+IH07XG5sZXQgX3JlZGlzOiBKdGlSZWRpcyB8IG51bGwgfCB1bmRlZmluZWQ7XG5sZXQgX3JlZGlzUmVhZHk6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbi8qKlxuICogVGhlIGp0aSBjbGllbnQsIGJ1aWx0IGxhemlseS4gVGhlIGVudiBjbGllbnQgaGFzIG5vIG9mZmxpbmUgcXVldWUsIHNvIGEgU0VUIG9uXG4gKiBhIGNvbm5lY3Rpb24gdGhhdCBpc24ndCB1cCB5ZXQgaXMgcmVqZWN0ZWQg4oCUIHRoZSBGSVJTVCBzdGVwLXVwIG9uIGV2ZXJ5IHBvZFxuICogd291bGQgZmFpbC4gV2FpdCAoYm91bmRlZCwgbmV2ZXIgcmVqZWN0aW5nKSBmb3IgcmVhZGluZXNzIGJlZm9yZVxuICogaGFuZGluZyBpdCBvdXQ7IGEgZ2VudWluZWx5IGRvd24gUmVkaXMgc3RpbGwgZmFpbHMgY2xvc2VkIG9uIHRoZSBTRVQgYmVsb3cuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlZGlzKCk6IFByb21pc2U8SnRpUmVkaXMgfCBudWxsPiB7XG4gIGlmIChfcmVkaXMgPT09IHVuZGVmaW5lZCkge1xuICAgIF9yZWRpcyA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PEp0aVJlZGlzPignc3RlcC11cC1qdGknKTtcbiAgICBfcmVkaXNSZWFkeSA9IF9yZWRpcyA/IGNyZWF0ZVJlZGlzUmVhZHlHYXRlKF9yZWRpcykgOiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKF9yZWRpc1JlYWR5KSBhd2FpdCBfcmVkaXNSZWFkeSgpO1xuICByZXR1cm4gX3JlZGlzO1xufVxuXG5jb25zdCBtZW1KdGkgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBqdGkgLT4gZXhwaXJ5IGVwb2NoIG1zXG5jb25zdCBtZW1Td2VlcCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBbanRpLCBleHBdIG9mIG1lbUp0aSkgaWYgKGV4cCA8PSBub3cpIG1lbUp0aS5kZWxldGUoanRpKTtcbn0sIDMwXzAwMCk7XG5tZW1Td2VlcC51bnJlZj8uKCk7XG5cbi8qKlxuICogSGFyZCBjZWlsaW5nIG9uIHRoZSBwcm9jZXNzLWxvY2FsIGp0aSBzZXQuXG4gKlxuICogVGhlIDMwcyBzd2VlcCBhbG9uZSBkb2VzIE5PVCBib3VuZCBpdDogZW50cmllcyBvbmx5IGxlYXZlIG9uY2UgdGhlaXIgdG9rZW4nc1xuICogVFRMIGhhcyBwYXNzZWQsIHNvIGEgYnVyc3Qgb2Ygc3RlcC11cCB0cmFmZmljIChvciBhIGZsb29kIG9mIGRpc3RpbmN0IGZvcmdlZFxuICoganRpcyBvbiBhIFJlZGlzLWxlc3MgZGVwbG95bWVudCkgZ3Jvd3MgdGhlIG1hcCBmYXN0ZXIgdGhhbiB0aGUgc3dlZXAgZHJhaW5zXG4gKiBpdC4gVGhpcyBpcyBhIHJlcGxheSBndWFyZCwgc28gc2hlZGRpbmcgdGhlIE9MREVTVCBlbnRyaWVzIGlzIHRoZSBzYWZlXG4gKiBkaXJlY3Rpb246IHRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgYSBsb25nLWV4cGlyZWQganRpIGNvdWxkIGJlIHJlcGxheWVkLCBhbmRcbiAqIGV4cGlyeSBpcyBlbmZvcmNlZCBpbmRlcGVuZGVudGx5IGJ5IHRoZSB0b2tlbidzIG93biBgZXhwYC5cbiAqL1xuY29uc3QgTUVNX0pUSV9NQVggPSAxMF8wMDA7XG5cbi8qKiBEcm9wIHRoZSBzb29uZXN0LXRvLWV4cGlyZSBlbnRyaWVzIHVudGlsIHRoZSBtYXAgaXMgdW5kZXIgdGhlIGNlaWxpbmcuICovXG5mdW5jdGlvbiBldmljdE9sZGVzdEp0aSgpOiB2b2lkIHtcbiAgaWYgKG1lbUp0aS5zaXplIDwgTUVNX0pUSV9NQVgpIHJldHVybjtcbiAgY29uc3QgYnlFeHBpcnkgPSBbLi4ubWVtSnRpLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICBjb25zdCBleGNlc3MgPSBtZW1KdGkuc2l6ZSAtIE1FTV9KVElfTUFYICsgMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGNlc3M7IGkgKz0gMSkgbWVtSnRpLmRlbGV0ZShieUV4cGlyeVtpXVswXSk7XG59XG5cbi8qKlxuICogQ29uc3VtZSBhIHN0ZXAtdXAgYGp0aWAgZXhhY3RseSBvbmNlLiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjYWxsIGNsYWltZWQgaXRcbiAqIChmaXJzdCB1c2UpLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBjb25zdW1lZCAocmVwbGF5KS4gYGV4cEVwb2NoU2Vjb25kc2AgaXNcbiAqIHRoZSB0b2tlbidzIGBleHBgLCBzbyB0aGUgbWFya2VyIGF1dG8tZXhwaXJlcyB3aXRoIHRoZSB0b2tlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbnN1bWVTdGVwVXBKdGkoanRpOiBzdHJpbmcsIGV4cEVwb2NoU2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHR0bFNlY29uZHMgPSBNYXRoLm1heCgxLCBleHBFcG9jaFNlY29uZHMgLSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSk7XG4gIGNvbnN0IGNsaWVudCA9IGF3YWl0IHJlZGlzKCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICAvLyBSZWRpcyBjb25maWd1cmVkIOKHkiBhdXRob3JpdGF0aXZlIGNyb3NzLWluc3RhbmNlIHN0b3JlLiBTRVQgTlggRVgg4oaSICdPSydcbiAgICAvLyB3aGVuIG5ld2x5IHNldCwgbnVsbCB3aGVuIGFscmVhZHkgY29uc3VtZWQuIEEgdGhyb3duIFJlZGlzIGVycm9yIGlzIE5PVFxuICAgIC8vIGNhdWdodCBoZXJlOiBpdCBwcm9wYWdhdGVzIHNvIGByZXF1aXJlU3RlcFVwYCBmYWlscyBjbG9zZWQgKFNURVBfVVBfSU5WQUxJRClcbiAgICAvLyBpbnN0ZWFkIG9mIHNpbGVudGx5IGRlZ3JhZGluZyB0byB0aGUgcGVyLWluc3RhbmNlIG1lbSBndWFyZC5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuc2V0KGBzdGVwdXA6anRpOiR7anRpfWAsICcxJywgJ0VYJywgdHRsU2Vjb25kcywgJ05YJyk7XG4gICAgcmV0dXJuIHJlcyA9PT0gJ09LJztcbiAgfVxuICAvLyBObyBSZWRpcyDih5Igc2luZ2xlLWluc3RhbmNlIGRlcGxveW1lbnQ7IHRoZSBwcm9jZXNzLWxvY2FsIG1hcCBJUyB0aGUgc3RvcmUuXG4gIGlmIChtZW1KdGkuaGFzKGp0aSkpIHJldHVybiBmYWxzZTtcbiAgZXZpY3RPbGRlc3RKdGkoKTtcbiAgbWVtSnRpLnNldChqdGksIERhdGUubm93KCkgKyB0dGxTZWNvbmRzICogMTAwMCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgbWlkZGxld2FyZTogcmVxdWlyZSBhIHZhbGlkLCBjYWxsZXItYm91bmQsIHNpbmdsZS11c2Ugc3RlcC11cCB0b2tlbiBpblxuICogdGhlIGBYLVN0ZXAtVXAtVG9rZW5gIGhlYWRlci4gTXVzdCBydW4gQUZURVIgYHJlcXVpcmVBdXRoYCAobmVlZHMgYHJlcS51c2VyYCkuXG4gKlxuICogVXNlIGRpcmVjdGx5IChgcm91dGVyLnBvc3QoJy94JywgcmVxdWlyZUF1dGgsIHJlcXVpcmVTdGVwVXAsIGgpYCkgZm9yIHRoZVxuICogb3JkaW5hcnkgYW55LWZhY3RvciBnYXRlLCBvciBjYWxsIGl0IHdpdGggYHsgbWV0aG9kcyB9YCB0byBkZW1hbmQgdGhhdCB0aGVcbiAqIGNvbmZpcm1hdGlvbiB3YXMgZWFybmVkIGJ5IGEgc3BlY2lmaWMgZmFjdG9yIOKAlCBgcmVxdWlyZVN0ZXBVcCh7IG1ldGhvZHM6XG4gKiBTVFJPTkdfU1RFUF9VUF9NRVRIT0RTIH0pYCBvbiB0aGUgcm91dGVzIHdoZXJlIGEgcGFzc3dvcmQgcmUtcHJvbXB0IGlzIG5vdCBhXG4gKiBtZWFuaW5nZnVsIHNlY29uZCBwcm9vZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVTdGVwVXAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVTdGVwVXAob3B0aW9uczogUmVxdWlyZVN0ZXBVcE9wdGlvbnMpOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZVN0ZXBVcChcbiAgcmVxT3JPcHRpb25zOiBSZXF1ZXN0IHwgUmVxdWlyZVN0ZXBVcE9wdGlvbnMsXG4gIHJlcz86IFJlc3BvbnNlLFxuICBuZXh0PzogTmV4dEZ1bmN0aW9uLFxuKTogUHJvbWlzZTx2b2lkPiB8ICgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHZvaWQpIHtcbiAgLy8gVGhlIGRpcmVjdCBmb3JtIFJFVFVSTlMgdGhlIHByb21pc2UgKEV4cHJlc3MgaWdub3JlcyBpdDsgYSB0ZXN0IGF3YWl0cyBpdCksXG4gIC8vIHNvIGNvbXBvc2luZyB0aGUgZ2F0ZSBhcyBgcm91dGVyLnBvc3QoJy94JywgcmVxdWlyZVN0ZXBVcCwgaClgIGJlaGF2ZXNcbiAgLy8gZXhhY3RseSBhcyBpdCBkaWQgYmVmb3JlIHRoZSBvcHRpb25zIGZvcm0gZXhpc3RlZC5cbiAgaWYgKHJlcyAmJiBuZXh0ICYmICdoZWFkZXJzJyBpbiByZXFPck9wdGlvbnMpIHtcbiAgICByZXR1cm4gX3JlcXVpcmVTdGVwVXAoe30sIHJlcU9yT3B0aW9ucyBhcyBSZXF1ZXN0LCByZXMsIG5leHQpO1xuICB9XG4gIGNvbnN0IG9wdGlvbnMgPSByZXFPck9wdGlvbnMgYXMgUmVxdWlyZVN0ZXBVcE9wdGlvbnM7XG4gIHJldHVybiB0YWdSb3V0ZUdhdGUoXG4gICAgKHJlcUlubmVyOiBSZXF1ZXN0LCByZXNJbm5lcjogUmVzcG9uc2UsIG5leHRJbm5lcjogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgICB2b2lkIF9yZXF1aXJlU3RlcFVwKG9wdGlvbnMsIHJlcUlubmVyLCByZXNJbm5lciwgbmV4dElubmVyKTtcbiAgICB9LFxuICAgIHsga2luZDogJ3N0ZXBVcCcsIC4uLihvcHRpb25zLm1ldGhvZHMgPyB7IG1ldGhvZHM6IFsuLi5vcHRpb25zLm1ldGhvZHNdIH0gOiB7fSkgfSxcbiAgKTtcbn1cbnRhZ1JvdXRlR2F0ZShyZXF1aXJlU3RlcFVwLCB7IGtpbmQ6ICdzdGVwVXAnIH0pO1xuXG5hc3luYyBmdW5jdGlvbiBfcmVxdWlyZVN0ZXBVcChvcHRpb25zOiBSZXF1aXJlU3RlcFVwT3B0aW9ucywgcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gVmVyaWZpZWQgaW50ZXJuYWwgc2VydmljZSBwcmluY2lwYWxzIGFyZSBFWEVNUFQ6IHN0ZXAtdXAgaXMgYSByZS12ZXJpZnktdGhlLVxuICAvLyBIVU1BTiBnYXRlICh0aGV5IHJlcGxheSBhIHBhc3N3b3JkLXJldmVyaWZ5IHRva2VuKSwgd2hpY2ggYSBzZXJ2aWNlIHRva2VuXG4gIC8vIHN0cnVjdHVyYWxseSBjYW5ub3QgcHJvZHVjZS4gU2VydmljZXMgYWxyZWFkeSBieXBhc3MgYHJlcXVpcmVQZXJtaXNzaW9uYCBvblxuICAvLyB0aGUgc2FtZSB0cnVzdCBiYXNpcyAoYSBzaWduZWQgc2VydmljZSBKV1QpLCBhbmQgaW50ZXJuYWwgY2FsbGVycyBvZiBhXG4gIC8vIHN0ZXAtdXAtZ2F0ZWQgcm91dGUg4oCUIGUuZy4gdGhlIHBsYXRmb3JtIG9yZy1jYXNjYWRlJ3MgYERFTEVURSAvcXVvdGFzLzpvcmdJZGBcbiAgLy8gb3IgdGhlIGJpbGxpbmfihpJxdW90YSBlbnRpdGxlbWVudCBzeW5jIOKAlCB3b3VsZCBvdGhlcndpc2UgYmUgaGFyZC1ibG9ja2VkLlxuICAvLyBTYWZlOiBhIHNlcnZpY2UgdG9rZW4gY2FuIG9ubHkgYmUgbWludGVkIHdpdGggYSBTRVJWSUNFJ3Mgb3duIEVTMjU2IGtleSxcbiAgLy8gd2hpY2ggbm8gZXh0ZXJuYWwgY2xpZW50IGhvbGRzLCBzbyB0aGlzIGNhbid0IGJlIHNwb29mZWQgdG8gc2tpcFxuICAvLyBzdGVwLXVwLlxuICBpZiAoaXNTZXJ2aWNlUHJpbmNpcGFsKHJlcSkpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW4gT1JHIFNFUlZJQ0UgQUNDT1VOVCBpcyB0aGUgb3Bwb3NpdGUgY2FzZTogaXQgaXMgc3ViamVjdCB0byBldmVyeSBnYXRlIGFcbiAgLy8gbWVtYmVyIGlzLCBhbmQgdGhlcmUgaXMgbm8gcGVyc29uIGJlaGluZCBpdCB0byByZS12ZXJpZnkg4oCUIHNvIGl0IGNhbiBORVZFUlxuICAvLyBwYXNzIHN0ZXAtdXAuIFJlZnVzZSBleHBsaWNpdGx5IChyYXRoZXIgdGhhbiBsZXR0aW5nIGl0IGZhbGwgdGhyb3VnaCB0byB0aGVcbiAgLy8gYHN1YmAtYm91bmQgdG9rZW4gY2hlY2ssIHdoaWNoIHdvdWxkIGZhaWwgd2l0aCBhIGNvbmZ1c2luZyBTVEVQX1VQX01JU01BVENIKVxuICAvLyBzbyBcImEgbWFjaGluZSBjcmVkZW50aWFsIG5ldmVyIHNhdGlzZmllcyBhbiBhc3N1cmFuY2UgcmVxdWlyZW1lbnRcIiBpcyBhXG4gIC8vIHByb3BlcnR5IG9mIHRoaXMgZ2F0ZSwgbm90IGEgc2lkZSBlZmZlY3Qgb2YgaG93IHN0ZXAtdXAgdG9rZW5zIGFyZSBtaW50ZWQuXG4gIGlmIChpc1NlcnZpY2VBY2NvdW50UHJpbmNpcGFsKHJlcSkpIHtcbiAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdzdGVwLXVwIChTVEVQX1VQX05PVF9BVkFJTEFCTEU6IHNlcnZpY2UgYWNjb3VudCknKTtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDMsICdBIHNlcnZpY2UgYWNjb3VudCBjYW5ub3QgcGVyZm9ybSB0aGlzIGFjdGlvbiDigJQgaXQgcmVxdWlyZXMgYSBwZXJzb24gdG8gcmUtdmVyaWZ5JywgJ1NURVBfVVBfTk9UX0FWQUlMQUJMRScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhbGxlclN1YiA9IChyZXEgYXMgUmVxdWVzdCAmIHsgdXNlcj86IHsgc3ViPzogc3RyaW5nIH0gfSkudXNlcj8uc3ViO1xuICBpZiAoIWNhbGxlclN1Yikge1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkJywgJ1VOQVVUSE9SSVpFRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzW0hFQURFUl0pO1xuICBpZiAoIXRva2VuKSB7XG4gICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB2ZXJpZmljYXRpb24gcmVxdWlyZWQnLCAnU1RFUF9VUF9SRVFVSVJFRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwYXlsb2FkOiBTdGVwVXBUb2tlblBheWxvYWQ7XG4gIHRyeSB7XG4gICAgcGF5bG9hZCA9IGF3YWl0IHZlcmlmeVN0ZXBVcFRva2VuKHRva2VuKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQSBwcmVzZW50ZWQtYnV0LXVudmVyaWZpYWJsZSB0b2tlbiAoZm9yZ2VkLCBleHBpcmVkLCB3cm9uZyBrZXkpIGlzIG9uIHRoZVxuICAgIC8vIHRyYWlsOyBhIE1JU1NJTkcgb25lIChTVEVQX1VQX1JFUVVJUkVEIGFib3ZlKSBpcyB0aGUgVUkncyBub3JtYWwgZmlyc3RcbiAgICAvLyBhdHRlbXB0IGFuZCBpcyBub3QuXG4gICAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnc3RlcC11cCAoU1RFUF9VUF9JTlZBTElEKScpO1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdG9rZW4gaW52YWxpZCBvciBleHBpcmVkJywgJ1NURVBfVVBfSU5WQUxJRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLnN1YiAhPT0gY2FsbGVyU3ViKSB7XG4gICAgLy8gU29tZW9uZSBlbHNlJ3Mgc3RlcC11cCB0b2tlbiByZXBsYXllZCBvbiB0aGlzIHNlc3Npb24g4oCUIG5ldmVyIGEgVUkgYnVnLlxuICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ3N0ZXAtdXAgKFNURVBfVVBfTUlTTUFUQ0gpJyk7XG4gICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB0b2tlbiBkb2VzIG5vdCBtYXRjaCBzZXNzaW9uJywgJ1NURVBfVVBfTUlTTUFUQ0gnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGYWN0b3IgcmVzdHJpY3Rpb24uIENoZWNrZWQgQkVGT1JFIHRoZSBqdGkgaXMgY29uc3VtZWQsIHNvIGEgdG9rZW5cbiAgLy8gZWFybmVkIGJ5IHRoZSB3cm9uZyBmYWN0b3IgY2FuIHN0aWxsIGJlIHNwZW50IG9uIGEgcm91dGUgdGhhdCBhY2NlcHRzIGl0IOKAlFxuICAvLyBidXJuaW5nIGl0IGhlcmUgd291bGQgbWFrZSB0aGUgcmVmdXNhbCBkZXN0cnVjdGl2ZSBhcyB3ZWxsIGFzIGNvbmZ1c2luZy5cbiAgaWYgKG9wdGlvbnMubWV0aG9kcyAmJiAhKHBheWxvYWQubWV0aG9kICYmIG9wdGlvbnMubWV0aG9kcy5pbmNsdWRlcyhwYXlsb2FkLm1ldGhvZCkpKSB7XG4gICAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCBgc3RlcC11cCAoU1RFUF9VUF9NRVRIT0RfUkVRVUlSRUQ6ICR7b3B0aW9ucy5tZXRob2RzLmpvaW4oJyBvciAnKX0sIGdvdCAke3BheWxvYWQubWV0aG9kID8/ICdub25lJ30pYCk7XG4gICAgc2VuZEVycm9yKFxuICAgICAgcmVzLCA0MDEsXG4gICAgICAnVGhpcyBhY3Rpb24gbXVzdCBiZSBjb25maXJtZWQgd2l0aCBhIHBhc3NrZXkgb3IgYW4gYXV0aGVudGljYXRvciBjb2RlJyxcbiAgICAgICdTVEVQX1VQX01FVEhPRF9SRVFVSVJFRCcsXG4gICAgICB7IG1ldGhvZHM6IFsuLi5vcHRpb25zLm1ldGhvZHNdIH0sXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGlmICghKGF3YWl0IGNvbnN1bWVTdGVwVXBKdGkocGF5bG9hZC5qdGksIHBheWxvYWQuZXhwKSkpIHtcbiAgICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ3N0ZXAtdXAgKFNURVBfVVBfUkVQTEFZKScpO1xuICAgICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB0b2tlbiBhbHJlYWR5IHVzZWQgb3IgZXhwaXJlZCcsICdTVEVQX1VQX1JFUExBWScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdTdGVwLXVwIGp0aSBjb25zdW1lIGVycm9yZWQnLCB7IGVycm9yOiBTdHJpbmcoZXJyKSB9KTtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDEsICdTdGVwLXVwIHZlcmlmaWNhdGlvbiBmYWlsZWQnLCAnU1RFUF9VUF9JTlZBTElEJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbmV4dCgpO1xufVxuIl19
|
|
@@ -3,12 +3,25 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* The system tenant's canonical org **id** — a fixed, well-known ObjectId (NOT
|
|
6
|
-
* the string 'system').
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* the string 'system'). The single value every service resolves the system
|
|
7
|
+
* tenant through. The system org's human identifier stays the slug/name
|
|
8
|
+
* 'system' (see {@link SYSTEM_ORG_SLUG}); only its `_id` is this ObjectId.
|
|
9
|
+
*
|
|
10
|
+
* NOT ENV-OVERRIDABLE, and the removed override is worth a note so nobody
|
|
11
|
+
* re-adds it. It read `process.env.SYSTEM_ORG_ID` "for alternate installs" —
|
|
12
|
+
* but the schema contradicts it: `postgres-init.sql` hardcodes this literal as
|
|
13
|
+
* the DEFAULT on 23 org-scoped columns and seeds its rows with it. So an
|
|
14
|
+
* override moved the application's idea of the system org while the database's
|
|
15
|
+
* stayed put, which is a half-feature that fails in the worst possible
|
|
16
|
+
* place — tenancy. The divergence was already being worked around in two spots
|
|
17
|
+
* (`query-builders.ts` drops an orgId predicate over it; the ecosystem
|
|
18
|
+
* bootstrap repairs the Official publisher), and the knob appeared in no
|
|
19
|
+
* `.env.example`, so nothing could set it deliberately anyway.
|
|
20
|
+
*
|
|
21
|
+
* An alternate install changes the DDL and this constant together, or not at
|
|
22
|
+
* all.
|
|
10
23
|
*/
|
|
11
|
-
export declare const SYSTEM_ORG_ID
|
|
24
|
+
export declare const SYSTEM_ORG_ID = "000000000000000000000001";
|
|
12
25
|
/** The system org's well-known slug/name (the human identifier; its `_id` is {@link SYSTEM_ORG_ID}). */
|
|
13
26
|
export declare const SYSTEM_ORG_SLUG = "system";
|
|
14
27
|
/**
|