@pipeline-builder/api-core 5.2.6 → 5.2.7
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 +1 -1
- package/lib/middleware/deferred-quota-check.js +1 -1
- package/lib/middleware/ecosystem-guard.js +1 -1
- package/lib/middleware/index.js +1 -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.js +1 -1
- package/lib/services/audit-context.js +1 -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.js +1 -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 +1 -0
- package/lib/utils/index.js +2 -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/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
|
@@ -167,6 +167,14 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
167
167
|
// (subject/type/scope), NEVER message body content.
|
|
168
168
|
'message.announcement.create',
|
|
169
169
|
'message.delete',
|
|
170
|
+
// Bulk "remove from my inbox": a per-participant VIEW change, not a delete —
|
|
171
|
+
// the row, the other participants and the retention sweep are untouched. One
|
|
172
|
+
// row per bulk call with `details.count` and the filter scope, never per
|
|
173
|
+
// message and never the search text.
|
|
174
|
+
'message.hide',
|
|
175
|
+
// The undo of `message.hide`: rows put back into this org's inbox. Same
|
|
176
|
+
// shape — one row per call with `details.count`, never the ids.
|
|
177
|
+
'message.unhide',
|
|
170
178
|
'message.restore',
|
|
171
179
|
// Manual on-demand PURGE (permanent hard-delete) of an already-soft-deleted
|
|
172
180
|
// message tombstone — the destructive finalizer the retention sweep would
|
|
@@ -589,4 +597,4 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
589
597
|
export function isRemoteAuditAction(value) {
|
|
590
598
|
return REMOTE_AUDIT_ACTIONS.includes(value);
|
|
591
599
|
}
|
|
592
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsMkVBQTJFO0lBQzNFLDZFQUE2RTtJQUM3RSxzRUFBc0U7SUFDdEUsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUscUNBQXFDO0lBQ3JDLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZiw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxxRUFBcUU7SUFDckUsb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixt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Q2pFLDZCQUE2QjtJQUM3QixvQ0FBb0M7SUFDcEMsMkVBQTJFO0lBQzNFLHVFQUF1RTtJQUN2RSxpRUFBaUU7SUFDakUseUJBQXlCO0lBQ3pCLDhCQUE4QjtJQUM5Qix3RUFBd0U7SUFDeEUsNkVBQTZFO0lBQzdFLHdFQUF3RTtJQUN4RSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLHdCQUF3QjtJQUN4Qiw4QkFBOEI7SUFDOUIsd0JBQXdCO0lBQ3hCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsZ0NBQWdDO0lBQ2hDLHdFQUF3RTtJQUN4RSwrRUFBK0U7SUFDL0UsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSwwQkFBMEI7SUFDMUIsaUNBQWlDO0NBQ3pCLENBQUM7QUFJWCxzRkFBc0Y7QUFDdEYsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWE7SUFDL0MsT0FBUSxvQkFBMEMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSByZW1vdGUgKG5vbi1wbGF0Zm9ybSkgYXVkaXQgQUNUSU9OIFZPQ0FCVUxBUlkuXG4gKlxuICogS2VwdCBhcGFydCBmcm9tIHRoZSBjbGllbnQgdGhhdCBzaGlwcyB0aGUgZXZlbnRzIChgc2VydmljZXMvcmVtb3RlLWF1ZGl0LWNsaWVudC50c2ApXG4gKiBiZWNhdXNlIGl0IGlzIGFuIGFsbG93LWxpc3QsIG5vdCBtYWNoaW5lcnk6IGl0IGlzIHRoZSB0aGluZyBhIHJldmlld2VyIHJlYWRzXG4gKiBlbmQgdG8gZW5kIHdoZW4gZGVjaWRpbmcgd2hldGhlciBhIHNlcnZpY2UgbWF5IGVtaXQgYSBnaXZlbiBhY3Rpb24sIGFuZCBpdCBpc1xuICogd2hhdCBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYWdhaW5zdC5cbiAqL1xuXG5cbi8qKlxuICogVGhlIGV4YWN0IHNldCBvZiBhdWRpdCBhY3Rpb25zIGEgTk9OLVBMQVRGT1JNIChyZW1vdGUpIHNlcnZpY2UgaXMgcGVybWl0dGVkIHRvXG4gKiBlbWl0IHRocm91Z2ggYFBPU1QgL2F1ZGl0L2V2ZW50c2AuIFRoaXMgaXMgdGhlIFNJTkdMRSBTT1VSQ0Ug4oCUIGBSZW1vdGVBdWRpdEFjdGlvbmBcbiAqIGlzIGRlcml2ZWQgZnJvbSBpdCwgc28gdGhlIHR5cGUgYW5kIHRoZSBydW50aW1lIGFsbG93LWxpc3QgY2FuIG5ldmVyIGRyaWZ0LlxuICpcbiAqIFNFQ1VSSVRZOiBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYGFjdGlvbmAgYWdhaW5zdCB0aGlzIHN1YnNldCAodmlhXG4gKiB7QGxpbmsgaXNSZW1vdGVBdWRpdEFjdGlvbn0pLCBOT1QgdGhlIGZ1bGwgcGxhdGZvcm0gYEF1ZGl0QWN0aW9uYCB1bmlvbiDigJQgYVxuICogYHNlcnZpY2U6KmAgdG9rZW4gbXVzdCBub3QgYmUgYWJsZSB0byBmb3JnZSBwbGF0Zm9ybS1hdXRob3JpdHkgZXZlbnRzXG4gKiAoYGFkbWluLnN1cGVyYWRtaW4uZ3JhbnRgLCBgb3JnLm93bmVyc2hpcC50cmFuc2ZlcmAsIGB1c2VyLmxvZ2luYCwg4oCmKS4gS2VlcFxuICogdGhpcyBsaXN0IGZyZWUgb2YgYW55IHBsYXRmb3JtLW9ubHkgYWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVNT1RFX0FVRElUX0FDVElPTlMgPSBbXG4gICdwbHVnaW4uYnVpbGQuY29tcGxldGVkJyxcbiAgJ3BsdWdpbi5idWlsZC5mYWlsZWQnLFxuICAncGx1Z2luLmJ1aWxkLnRpbWVvdXQnLFxuICAvLyBBIHZlcnNpb24gcGVyc2lzdGVkIFVOU0NBTk5FRCBiZWNhdXNlIHRoZSBidWlsZC10aW1lIHNjYW4gY291bGQgbm90IHJ1biBhbmRcbiAgLy8gdGhlIG9wZXJhdG9yIGVzY2FwZSBoYXRjaCBgUExVR0lOX0FMTE9XX1VOU0NBTk5FRGAgaXMgb24gKHdpdGhvdXQgaXQgdGhlXG4gIC8vIGJ1aWxkIGZhaWxzIGBJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFYCkuIGBkZXRhaWxzYCBjYXJyeSBuYW1lL3ZlcnNpb24vZGlnZXN0LlxuICAncGx1Z2luLnNjYW4uc2tpcHBlZCcsXG4gIC8vIEZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mgd2VyZSBFWEVNUFRFRCBmcm9tIHRoZSBwbGF0Zm9ybSBmbG9vciBieSBhXG4gIC8vIGBQTFVHSU5fVlVMTl9XQUlWRVJTYCBlbnRyeSwgc28gYSBidWlsZCB0aGF0IHdvdWxkIG90aGVyd2lzZSBoYXZlIGZhaWxlZFxuICAvLyBQTFVHSU5fVlVMTl9HQVRFIHdhcyBhbGxvd2VkIHRocm91Z2guIFRoZSBvdGhlciBoYWxmIG9mIHBsdWdpbi5zY2FuLnNraXBwZWQ6XG4gIC8vIGJvdGggYXJlIG9wZXJhdG9yIGVzY2FwZSBoYXRjaGVzIHRoYXQgY2hhbmdlIGEgZ2F0ZSdzIHZlcmRpY3QsIGFuZCBhIG1ldHJpY1xuICAvLyBhbmQgYSBsb2cgbGluZSBhcmUgbm90IGEgZHVyYWJsZSByZWNvcmQgb2Ygb25lLiBgZGV0YWlsc2AgY2FycnlcbiAgLy8gbmFtZS92ZXJzaW9uL2RpZ2VzdCwgaG93IG1hbnkgZmluZGluZ3Mgd2VyZSB3YWl2ZWQgYW5kIHdoaWNoIHBhY2thZ2VzLlxuICAncGx1Z2luLnZ1bG4ud2FpdmVkJyxcbiAgLy8gVGhlIG5pZ2h0bHkgcmVzY2FuIEZMQUdHRUQgYSBzdG9yZWQgdmVyc2lvbiAoaXRzIGdhdGVkIENyaXRpY2FsIGZpbmRpbmdzXG4gIC8vIG5vdyBleGNlZWQgUExVR0lOX1ZVTE5fTUFYX0ZJTkRJTkdTIOKAlCBsb29rdXAgYW5kIHRoZSBwaXBlbGluZSdzIG93bmVycyBhcmVcbiAgLy8gd2FybmVkIGF0IGBlcnJvcmAgc2V2ZXJpdHkpLCBvciBDTEVBUkVEIHRoYXQgZmxhZy4gQm90aCBjaGFuZ2Ugd2hhdFxuICAvLyByZXNvbHV0aW9uIHNheXMgYWJvdXQgYSB2ZXJzaW9uIG5vYm9keSByZWJ1aWx0LCBvbiBub2JvZHkncyByZXF1ZXN0LCBzbyB0aGVcbiAgLy8gcmVjb3JkIG9mIFdIRU4gYW5kIFdIWSBsaXZlcyBpbiB0aGUgaGFzaC1jaGFpbmVkIGxvZyByYXRoZXIgdGhhbiBvbmx5IGluIGFcbiAgLy8gY29sdW1uIHRoZSBuZXh0IHJlc2NhbiBvdmVyd3JpdGVzLiBgZGV0YWlsc2AgY2FycnkgY291bnRzLCB0aGUgZ2F0ZWRcbiAgLy8gYWR2aXNvcnkgaWRzIGFuZCB0aGUgaW1hZ2UgZGlnZXN0LlxuICAncGx1Z2luLnZ1bG4uZmxhZ2dlZCcsXG4gICdwbHVnaW4udnVsbi5jbGVhcmVkJyxcbiAgLy8gUGx1Z2luIGxpZmVjeWNsZSBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gcm91dGUgaGFuZGxlcnMpIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgL1xuICAvLyBwdWJsaXNoaW5nIHN1cmZhY2UgdGhhdCBidWlsZHMgYWxyZWFkeSBhdWRpdCdzIGNvdW50ZXJwYXJ0OiByZWdpc3RyeSBkZWxldGUsXG4gIC8vIHNvdXJjZSB1cGxvYWQsIGFuZCBkZXBsb3ktdG8tY2x1c3Rlci4gYHRhcmdldElkYCBpcyB0aGUgcGx1Z2luIGlkLlxuICAncGx1Z2luLmRlbGV0ZScsXG4gICdwbHVnaW4ucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBsdWdpbiB0b21ic3RvbmUgb25cbiAgLy8gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuXG4gICdwbHVnaW4ucHVyZ2UnLFxuICAncGx1Z2luLnVwZGF0ZScsXG4gICdwbHVnaW4udXBsb2FkJyxcbiAgJ3BsdWdpbi5kZXBsb3knLFxuICAvLyBQbHVnaW4gYnVsayBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gYnVsay1wbHVnaW4gcm91dGUpICsgRExRIHB1cmdlIChkcm9wcyBhbGxcbiAgLy8gZGVhZC1sZXR0ZXJlZCBidWlsZCBqb2JzLCBjcm9zcy1vcmcsIHN5c2FkbWluKS4gYGRldGFpbHNgIGNhcnJpZXMgY291bnRzLlxuICAncGx1Z2luLmJ1bGsudXBkYXRlJyxcbiAgJ3BsdWdpbi5idWxrLmRlbGV0ZScsXG4gICdwbHVnaW4uZGxxLnB1cmdlJyxcbiAgLy8gQnVpbGQgcmUtcnVucyBmcm9tIHRoZSBxdWV1ZS10cmlhZ2Ugc3VyZmFjZTogcmUtZW5xdWV1ZSBhIEZBSUxFRCBidWlsZFxuICAvLyAoYHBsdWdpbi5idWlsZC5yZXRyeWApIG9yIGEgZGVhZC1sZXR0ZXJlZCBvbmUgKGBwbHVnaW4uZGxxLnJlcGxheWApLiBCb3RoXG4gIC8vIHJlLXJ1biBhbiBpbWFnZSBidWlsZCArIHBsdWdpbiBwZXJzaXN0IG9uIHRoZSBjYWxsZXIncyBhdXRob3JpdHksIHNvIHRoZXlcbiAgLy8gYXJlIGF1ZGl0ZWQgbXV0YXRpb25zOyBgYWZmZWN0ZWRPcmdJZGAgY2FycmllcyB0aGUgam9iJ3Mgb3duaW5nIG9yZy5cbiAgJ3BsdWdpbi5idWlsZC5yZXRyeScsXG4gICdwbHVnaW4uZGxxLnJlcGxheScsXG4gIC8vIFBpcGVsaW5lIG11dGF0aW9ucyDigJQgZW1pdHRlZCBieSBhcGkvcGlwZWxpbmUncyByb3V0ZSBoYW5kbGVyc1xuICAvLyAoY3JlYXRlL3VwZGF0ZS9kZWxldGUgKyBDb2RlUGlwZWxpbmUgZXhlY3V0aW9uIHRyaWdnZXIvY2FuY2VsKSBhbmRcbiAgLy8gcG9zdGVkIHRvIHBsYXRmb3JtJ3MgYFBPU1QgL2F1ZGl0L2V2ZW50c2AgaW5nZXN0LlxuICAncGlwZWxpbmUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lLnVwZGF0ZScsXG4gICdwaXBlbGluZS5kZWxldGUnLFxuICAncGlwZWxpbmUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBpcGVsaW5lIC9cbiAgLy8gcGlwZWxpbmVfdGVtcGxhdGUgdG9tYnN0b25lIG9uIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcFxuICAvLyB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLiBgdGFyZ2V0SWRgIGlzIHRoZSBwdXJnZWQgaWQuXG4gICdwaXBlbGluZS5wdXJnZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5jcmVhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmRlbGV0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5yZXN0b3JlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnB1cmdlJyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5zdGFydCcsXG4gICdwaXBlbGluZS5leGVjdXRpb24uY2FuY2VsJyxcbiAgLy8gQ29kZVBpcGVsaW5lIEFSTi1yZWdpc3RyeSBjb25maWcgKGFwaS9waXBlbGluZSByZWdpc3RyeSByb3V0ZSkg4oCUIHJlZ2lzdGVyaW5nIC9cbiAgLy8gZGVyZWdpc3RlcmluZyB0aGUgZXh0ZXJuYWwgQ29kZVBpcGVsaW5lIHRoYXQgYmFja3MgYSBwaXBlbGluZSAoZGVwbG95LWFmZmVjdGluZykuXG4gICdwaXBlbGluZS5yZWdpc3RyeS5yZWdpc3RlcicsXG4gICdwaXBlbGluZS5yZWdpc3RyeS5kZXJlZ2lzdGVyJyxcbiAgLy8gUXVvdGEgYWRtaW5pc3RyYXRpb24gKGFwaS9xdW90YSkg4oCUIGEgc3VwZXJhZG1pbiByZXNldHRpbmcgYW4gb3JnJ3MgdXNhZ2VcbiAgLy8gY291bnRlciBvciBlZGl0aW5nIGl0cyB0aWVyIGxpbWl0cy4gYGFmZmVjdGVkT3JnSWRgIGlzIHRoZSBvcmcgY2hhbmdlZDtcbiAgLy8gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHF1b3RhVHlwZSArIG9sZC9uZXcgdmFsdWUuXG4gICdxdW90YS5yZXNldCcsXG4gICdxdW90YS5saW1pdC51cGRhdGUnLFxuICAvLyBBIHN1cGVyYWRtaW4gZGVsZXRpbmcgYW4gb3JnJ3MgZW50aXJlIHF1b3RhIGRvY3VtZW50LlxuICAncXVvdGEuZGVsZXRlJyxcbiAgLy8gQW4gYWNjb3VudCdzIHF1b3RhIHRocmVzaG9sZC1ub3RpY2Ugc2V0dGluZ3MgKG9wdC1vdXQgKyB0aGVcbiAgLy8gYHF1b3RhLnRocmVzaG9sZGAgd2ViaG9vayBVUkwpIOKAlCB3aGVyZSB1c2FnZSB3YXJuaW5ncyBnby5cbiAgJ3F1b3RhLm5vdGljZV9zZXR0aW5ncy51cGRhdGUnLFxuICAvLyBDb21wbGlhbmNlIGFkbWluaXN0cmF0aW9uIChhcGkvY29tcGxpYW5jZSkg4oCUIHRoZSBlbmZvcmNlbWVudC1wb3N0dXJlIHN1cmZhY2UuXG4gIC8vIEFwcHJvdmluZy9yZXZva2luZyBhbiBleGVtcHRpb24sIHRvZ2dsaW5nL2F1dGhvcmluZy9kZWxldGluZyBhIHJ1bGUsXG4gIC8vIGF1dGhvcmluZy9kZWxldGluZyBhIHBvbGljeSwgbWFuYWdpbmcgc2NhbiBzY2hlZHVsZXMsIGFwcGx5aW5nIGEgdGVtcGxhdGUsXG4gIC8vIG9yIGNhbmNlbGxpbmcgYSBydW5uaW5nIHNjYW4uIGB0YXJnZXRJZGAgaXMgdGhlIHJ1bGUvcG9saWN5L2V4ZW1wdGlvbi9zY2FuIGlkLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24uYXBwcm92ZScsXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXZva2UnLFxuICAvLyBBIG1lbWJlciBGSUxJTkcgYW4gZXhlbXB0aW9uIHJlcXVlc3QgKHNpbmdsZSBvciBidWxrOyBtZXRhZGF0YSBvbmx5LCBuZXZlclxuICAvLyB0aGUgcmVhc29uKSBhbmQgYW4gYWRtaW4gUkVKRUNUSU5HIG9uZSDigJQgdGhlIG90aGVyIGhhbHZlcyBvZiB0aGVcbiAgLy8gdHdvLXBlcnNvbiBkZWNpc2lvbiB3aG9zZSBhcHByb3ZhbCBpcyByZWNvcmRlZCBhYm92ZS5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLnJlcXVlc3QnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmVqZWN0JyxcbiAgJ2NvbXBsaWFuY2UucnVsZS50b2dnbGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIGhhcmQtZGVsZXRlIChQVVJHRSkgb2YgYSBzb2Z0LWRlbGV0ZWQgcnVsZS9wb2xpY3kgdG9tYnN0b25lIOKAlFxuICAvLyB0aGUgY2FsbGVyLWluaXRpYXRlZCBjb3VudGVycGFydCB0byB0aGUgcmV0ZW50aW9uIHN3ZWVwJ3MgYXV0by1wdXJnZS4gRGVzdHJveXNcbiAgLy8gdGhlIHRvbWJzdG9uZSBwZXJtYW5lbnRseSwgc28gaXQgY2FycmllcyB0aGUgZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwuXG4gICdjb21wbGlhbmNlLnJ1bGUucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucmVzdG9yZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnRlbXBsYXRlLmFwcGx5JyxcbiAgLy8gTGF1bmNoaW5nIGFuIG9yZy13aWRlIHJlLWV2YWx1YXRpb24gKHRoZSBjb3VudGVycGFydCB0byBgLmNhbmNlbGApIOKAlCBpdFxuICAvLyBwZXJzaXN0cyBhIHNjYW4gYW5kIGNhbiBibG9jayBlbnRpdGllcyB0aGF0IHBhc3NlZCBiZWZvcmUuXG4gICdjb21wbGlhbmNlLnNjYW4uY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jYW5jZWwnLFxuICAvLyBBIHNjYW4ncyB0ZXJtaW5hbCBPVVRDT01FIChjb21wbGV0ZWQg4oaSIHN1Y2Nlc3Mgd2l0aCB0aGUgcGFzcy93YXJuL2Jsb2NrXG4gIC8vIGNvdW50cywgZmFpbGVkIOKGkiBmYWlsdXJlKS4gU2NoZWR1bGVkIHNjYW5zIGFsc28gd3JpdGUgYGNvbXBsaWFuY2Uuc2Nhbi5jcmVhdGVgXG4gIC8vIChgZGV0YWlscy50cmlnZ2VyZWRCeTogJ3NjaGVkdWxlZCdgKSwgYXR0cmlidXRlZCB0byB0aGUgc2NoZWR1bGUncyBhdXRob3IuXG4gICdjb21wbGlhbmNlLnNjYW4uY29tcGxldGUnLFxuICAvLyBQbGF0Zm9ybSBvbmJvYXJkaW5nIHN1YnNjcmliaW5nIGEgbmV3IG9yZyB0byBldmVyeSBwdWJsaXNoZWQgcnVsZVxuICAvLyAoSU5BQ1RJVkUgc3Vic2NyaXB0aW9uczsgYGRldGFpbHMuc3Vic2NyaWJlZGAgaXMgdGhlIGNvdW50KS5cbiAgJ2NvbXBsaWFuY2Uuc3Vic2NyaXB0aW9uLmF1dG8tc3Vic2NyaWJlJyxcbiAgLy8gUGVyLW9yZyBjb21wbGlhbmNlIG5vdGlmaWNhdGlvbiBzZXR0aW5nczogcmVjaXBpZW50cyArIHRoZSBvdXRib3VuZCB3ZWJob29rXG4gIC8vIFVSTC9zZWNyZXQuIEJlYXJlci1lcXVpdmFsZW50IGNvbmZpZyB0aGF0IHJlZGlyZWN0cyB2aW9sYXRpb24gbm90aWNlcywgc28gYVxuICAvLyBjaGFuZ2UgY2FycmllcyB0aGUgZHVyYWJsZSB0cmFpbCAobmV2ZXIgdGhlIHNlY3JldCBpdHNlbGYpLlxuICAnY29tcGxpYW5jZS5ub3RpZmljYXRpb24tcHJlZmVyZW5jZS51cGRhdGUnLFxuICAvLyBJbWFnZS1yZWdpc3RyeSBkZXN0cnVjdGl2ZSBvcHMgKGFwaS9pbWFnZS1yZWdpc3RyeSkg4oCUIGdhcmJhZ2UtY29sbGVjdGlvblxuICAvLyBzd2VlcHMgYW5kIGV4cGxpY2l0IGltYWdlL3RhZyBkZWxldGVzLlxuICAncmVnaXN0cnkuZ2MnLFxuICAncmVnaXN0cnkuaW1hZ2UuZGVsZXRlJyxcbiAgLy8gQ3Jvc3MtcmVwbyB0YWcvaW1hZ2UgY29weSAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2FwaS9pbWFnZXMvY29weSkuIEFcbiAgLy8gY3Jvc3MtdGVuYW50IGNvcHkgbW92ZXMgZGF0YSBhY3Jvc3MgY3VzdG9tZXIgYm91bmRhcmllcywgc28gaXQgbmVlZHMgdGhlXG4gIC8vIGR1cmFibGUsIHRhbXBlci1ldmlkZW50IHRyYWlsIOKAlCBub3QganVzdCB0aGUgTG9raSBvcGVyYXRvciBsaW5lLlxuICAncmVnaXN0cnkuaW1hZ2UuY29weScsXG4gIC8vIEEgcGx1Z2luIGltYWdlIHNpZ25lZCArIFNCT00tYXR0ZXN0ZWQgYnkgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5XG4gIC8vIChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvaW50ZXJuYWwvcGx1Z2luLXNpZ25hdHVyZXMsIGNhbGxlZCBieSB0aGUgcGx1Z2luXG4gIC8vIGJ1aWxkIHdvcmtlcikuIFRoZSBrZXkgaXMgd2hhdCBzeW50aCB0cnVzdHMsIHNvIGV2ZXJ5IHVzZSBpcyBvbiB0aGUgdHJhaWwuXG4gICdyZWdpc3RyeS5pbWFnZS5zaWduJyxcbiAgLy8gVGhlIERvY2tlciB0b2tlbiBlbmRwb2ludCBtaW50aW5nIGEgcmVnaXN0cnkgdG9rZW4gdGhhdCBHUkFOVFMgYWNjZXNzXG4gIC8vIChgZGV0YWlscy5ncmFudGVkYDogcmVwbyArIGFjdGlvbnM7IHRoZSBzY29wZS1sZXNzIGBkb2NrZXIgbG9naW5gIHByb2JlIGlzXG4gIC8vIG5vdCByZWNvcmRlZCkg4oCUIGFuZCwgYXMgb3V0Y29tZSBmYWlsdXJlLCBhIHJlZnVzZWQgY3JlZGVudGlhbCAoaGFzaGVkXG4gIC8vIHVzZXJuYW1lLCBjcmVkZW50aWFsIGtpbmQgb25seSkuXG4gICdyZWdpc3RyeS50b2tlbi5pc3N1ZScsXG4gIC8vIEEgcHVzaCBjcmVkZW50aWFsIG1pbnRlZCBmb3Igb25lIGFub255bW91cyBzdWJtaXNzaW9uJ3NcbiAgLy8gYHF1YXJhbnRpbmUvPHN1Ym1pc3Npb25JZD5gIHJlcG8gKGV4cGlyeSArIFRUTCwgbmV2ZXIgdGhlIHNlY3JldCkuXG4gICdyZWdpc3RyeS5xdWFyYW50aW5lLmNyZWRlbnRpYWwubWludCcsXG4gIC8vIE1lc3NhZ2luZyAoYXBpL21lc3NhZ2UpIOKAlCBhZG1pbiBCUk9BRENBU1QgYW5ub3VuY2VtZW50cyArIGRlc3RydWN0aXZlXG4gIC8vIGRlbGV0ZXMuIDE6MSB1c2VyIG1lc3NhZ2VzIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBhdWRpdGVkIChub2lzZSArIHRoZXkgd291bGRcbiAgLy8gcHVsbCBwcml2YXRlIGNvbnRlbnQgaW50byB0aGUgdHJhaWwpLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seVxuICAvLyAoc3ViamVjdC90eXBlL3Njb3BlKSwgTkVWRVIgbWVzc2FnZSBib2R5IGNvbnRlbnQuXG4gICdtZXNzYWdlLmFubm91bmNlbWVudC5jcmVhdGUnLFxuICAnbWVzc2FnZS5kZWxldGUnLFxuICAnbWVzc2FnZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBQVVJHRSAocGVybWFuZW50IGhhcmQtZGVsZXRlKSBvZiBhbiBhbHJlYWR5LXNvZnQtZGVsZXRlZFxuICAvLyBtZXNzYWdlIHRvbWJzdG9uZSDigJQgdGhlIGRlc3RydWN0aXZlIGZpbmFsaXplciB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkXG4gIC8vIG90aGVyd2lzZSBwZXJmb3JtIGF0IHRoZSBwdXJnZSBkZWFkbGluZS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHkuXG4gICdtZXNzYWdlLnB1cmdlJyxcbiAgLy8gQW4gYXV0aG9yJ3MgZWRpdCBvZiBhIHNlbnQgbWVzc2FnZSAoYW5kIHJlZnVzZWQgYXR0ZW1wdHMsIGFzIGZhaWx1cmVzKS5cbiAgLy8gYGRldGFpbHNgIGNhcnJ5IHRoZSBuZXcgYm9keSdzIExFTkdUSCBvbmx5IOKAlCBuZWl0aGVyIHNpZGUgb2YgdGhlIGVkaXQuXG4gICdtZXNzYWdlLnVwZGF0ZScsXG4gIC8vIEEgbWVzc2FnZSBhdHRhY2htZW50IHN0b3JlZCAoZ2VuZXJhbCBvciBzdXBwb3J0IG1vdW50LCBgZGV0YWlscy5zdXJmYWNlYCkuXG4gIC8vIFR5cGUgKyBzaXplIG9ubHkg4oCUIG5ldmVyIHRoZSBieXRlcywgYW5kIG5vdCB0aGUgdXNlci1jaG9zZW4gZmlsZW5hbWUuXG4gICdtZXNzYWdlLmF0dGFjaG1lbnQudXBsb2FkJyxcbiAgLy8gQSBTWVNURU0gbm90aWZpY2F0aW9uIGRyb3BwZWQgaW50byBhbiBvcmcncyBpbmJveCBieSBhbiBpbnRlcm5hbCBzZXJ2aWNlXG4gIC8vIChQT1NUIC9tZXNzYWdlcy9pbnRlcm5hbC9ub3RpZnkpOyBgZGV0YWlscy5jYWxsZXJgIG5hbWVzIHRoZSBzZXJ2aWNlLlxuICAnbWVzc2FnZS5ub3RpZnkuaW50ZXJuYWwnLFxuICAvLyBUaGUgcGxhdGZvcm0gb3JnLWRlbGV0ZSBjYXNjYWRlIHJlY2xhaW1pbmcgYW4gb3JnJ3MgYXR0YWNobWVudCBCTE9CUyDigJRcbiAgLy8gYGRldGFpbHMuYmxvYnNEZWxldGVkYCwgb3IgYSBmYWlsdXJlIHJvdyB3aGVuIHRoZSByZWNsYWltIGRpZCBub3QgY29tcGxldGUuXG4gICdtZXNzYWdlLm9yZy5wdXJnZScsXG4gIC8vIFN1cHBvcnQgY2FzZXMgKGFwaS9tZXNzYWdlKS4gRGlzdGluY3QgZnJvbSB0aGUgYG1lc3NhZ2UuKmAgZmFtaWx5IGFib3ZlXG4gIC8vIGJlY2F1c2UgYSBjYXNlIGlzIG5vdCBhbiBvcmRpbmFyeSBtZXNzYWdlOiBpdCBjYXJyaWVzIGEgcmVzcG9uc2UtdGltZVxuICAvLyBjb21taXRtZW50LCBzbyBXSE8gcmFpc2VkIGl0IGFuZCBXSEVOIHdlIGZpcnN0IGFuc3dlcmVkIGFyZSB0aGUgZmFjdHMgYVxuICAvLyBkaXNwdXRlIHR1cm5zIG9uLiBgZGV0YWlsc2AgY2FycnkgdGhlIGNhc2UgbnVtYmVyLCBsZXZlbCBhbmQgc2V2ZXJpdHkg4oCUXG4gIC8vIG1ldGFkYXRhIG9ubHksIG5ldmVyIHRoZSBib2R5IG9mIHdoYXQgYSBjdXN0b21lciB3cm90ZS5cbiAgLy9cbiAgLy8gVHdvIG9mIHRoZSBuaW5lIHBsYW5uZWQgc3VwcG9ydCBhY3Rpb25zIGFyZSBoZXJlLCBhbmQgb25seSB0d286IHRoZXNlIGFyZVxuICAvLyB0aGUgb25lcyB3aXRoIHJlYWwgZW1pdHRlcnMgdG9kYXkuIFRoZSByZXN0IChgc3RhdHVzYCwgYHNldmVyaXR5YCxcbiAgLy8gYGFzc2lnbmAsIGB0cmFuc2ZlcmAsIGBub3RlYCwgYHJlYWRgKSBsYW5kIFdJVEggdGhlIHJvdXRlcyB0aGF0IGVtaXQgdGhlbSDigJRcbiAgLy8gYSBkZWNsYXJlZCBhY3Rpb24gbm90aGluZyBlbWl0cyBpcyBkZWFkIHZvY2FidWxhcnksIGFuZCB0aGUgcGFyaXR5IHRlc3RcbiAgLy8gd291bGQgdGhlbiBmb3JjZSBhIGRvY3Mgcm93IGRlc2NyaWJpbmcgYW4gZXZlbnQgdGhhdCBuZXZlciBmaXJlcy5cbiAgLy9cbiAgLy8gYHN1cHBvcnQuY2FzZS5yZWFkYCB3aWxsIG1hdHRlciBtb3N0IG9mIGFsbCB3aGVuIGl0IGFycml2ZXM6IGl0IGlzIHRoZSBvbmx5XG4gIC8vIHJlY29yZCB0aGF0IHNvbWVvbmUgYXQgdGhlIHZlbmRvciBvcGVuZWQgYSBjdXN0b21lcidzIGNhc2UuXG4gICdzdXBwb3J0LmNhc2Uub3BlbicsXG4gICdzdXBwb3J0LmNhc2UucmVwbHknLFxuICAvLyBUaGUgd29ya2Zsb3cgbXV0YXRpb25zLiBFYWNoIGlzIGF1ZGl0ZWQgYmVjYXVzZSBlYWNoIG1vdmVzIGEgY2FzZSdzXG4gIC8vIHJlbGF0aW9uc2hpcCB0byBpdHMgcmVzcG9uc2UgY29tbWl0bWVudDogc3RhdHVzIHN0b3BzIG9yIHJlc3RhcnRzIHRoZVxuICAvLyBjbG9jaywgc2V2ZXJpdHkgY2hhbmdlcyB3aGljaCB0YXJnZXQgYXBwbGllcywgYW5kIHRoZSB0d28gb3duZXJzaGlwXG4gIC8vIGFjdGlvbnMgZGVjaWRlIFdITyBpcyBhY2NvdW50YWJsZSBmb3IgbWVldGluZyBpdC4gQSBzaWxlbnQgY2hhbmdlIG9mIG93bmVyXG4gIC8vIGlzIGhvdyBhY2NvdW50YWJpbGl0eSBmb3IgYSBtaXNzZWQgdGFyZ2V0IGRpc2FwcGVhcnMuXG4gICdzdXBwb3J0LmNhc2Uuc3RhdHVzJyxcbiAgJ3N1cHBvcnQuY2FzZS5zZXZlcml0eScsXG4gICdzdXBwb3J0LmNhc2UuYXNzaWduJyxcbiAgJ3N1cHBvcnQuY2FzZS50cmFuc2ZlcicsXG4gIC8vIE9OLUNBTEwuIFRoZSBwcm92aWRlciBvd25zIHRoZSByb3RhLCB0aGUgZXNjYWxhdGlvbiBhbmQgdGhlIGNvbnRhY3RcbiAgLy8gbWV0aG9kczsgd2hhdCBpdCBjYW5ub3Qgb3duIGlzIGFuIGF1ZGl0YWJsZSBhbnN3ZXIgdG8gXCJ3aG8gcGlja2VkIHRoaXMgdXBcbiAgLy8gYXQgMDM6MTRcIi4gQSBjbGljayBvbiBhIGxpbmsgaW4gdGhlaXIgVUkgaXMgbm90IGFuIGlkZW50aXR5IHRoaXMgc3lzdGVtIGNhblxuICAvLyBhdHRlc3QgdG8sIHNvIHRoZWlyIGluY2lkZW50IHN0YXRlIGNoYW5nZSBpcyByZWxheWVkIGhlcmUgYW5kIHJlY29yZGVkXG4gIC8vIGFnYWluc3QgdGhlIGFnZW50IHRoZXkgbmFtZS4gVGhlIGhhc2ggY2hhaW4gaXMgdGhlIHBvaW50OiBhIHBvc3QtaW5jaWRlbnRcbiAgLy8gcmV2aWV3IG5lZWRzIHRoZSBhY2sgdG8gYmUgZXZpZGVuY2UgcmF0aGVyIHRoYW4gYSBzY3JlZW5zaG90LlxuICAvL1xuICAvLyBgZXNjYWxhdGVkYCBpcyBhdWRpdGVkIHNlcGFyYXRlbHkgYmVjYXVzZSBpdCBpcyB0aGUgcmVjb3JkIHRoYXQgdGhlIEZJUlNUXG4gIC8vIHJlc3BvbmRlciBkaWQgbm90IGFuc3dlciDigJQgdGhlIGZhY3QgYSByb3RhIGlzIGFkanVzdGVkIG9uLCBhbmQgdGhlIG9uZSBtb3N0XG4gIC8vIGxpa2VseSB0byBiZSBkaXNwdXRlZCBsYXRlci5cbiAgJ3N1cHBvcnQub25jYWxsLmFja25vd2xlZGdlZCcsXG4gICdzdXBwb3J0Lm9uY2FsbC5lc2NhbGF0ZWQnLFxuICAvLyBUaGUgdGVzdCBwYWdlLiBBdWRpdGVkIGJlY2F1c2UgaXQgUklOR1MgQSBQSE9ORTogd2hvZXZlciBpdCB3YWtlcyBpc1xuICAvLyBlbnRpdGxlZCB0byBhIHJlY29yZCBvZiB3aG8gY2F1c2VkIHRoYXQsIGF0IHdoYXRldmVyIGhvdXIgaXQgd2FzLlxuICAnc3VwcG9ydC5vbmNhbGwudGVzdCcsXG4gIC8vIFRoZSBwZXItY2FzZSBzd2VlcCBwYWdpbmcgdGhlIHJvdGEgZm9yIGEgcHJlbWl1bSBjYXNlIG5lYXJpbmcgaXRzIHRhcmdldC5cbiAgLy8gUmVjb3JkZWQgb25jZSwgb24gdGhlIHRpY2sgdGhlIGNhc2UgRU5URVJFRCB0aGUgd2luZG93IOKAlCB0aGUgc3dlZXAgcmUtc2VuZHNcbiAgLy8gdGhlIHBhZ2UgZXZlcnkgdGljaywgYW5kIHR3ZW50eS1mb3VyIHJvd3MgZm9yIG9uZSBwYWdlIHdvdWxkIGJlIG5vaXNlLlxuICAnc3VwcG9ydC5vbmNhbGwucGFnZWQnLFxuICAvLyBUaGUgdHdvIENPTlRBQ1QgYWN0aW9ucyAocGxhdGZvcm0pLiBOb3QgY2FzZSBldmVudHMg4oCUIGVudGl0bGVtZW50IGV2ZW50czpcbiAgLy8gZWFjaCBvbmUgY2hhbmdlcyB3aG8gaW4gYW4gb3JnIGlzIGFibGUgdG8gY29tbWl0IHVzIHRvIGEgcmVzcG9uc2UgdGFyZ2V0IGF0XG4gIC8vIGFsbCwgYW5kIGRlc2lnbmF0aW5nIHNwZW5kcyBhIHNsb3Qgb2YgYSBQQUlELCBhY2NvdW50LXBvb2xlZCBhbGxvd2FuY2UuIFRoZVxuICAvLyByZXZva2UgY2FycmllcyB0aGUgY291bnQgb2Ygb3BlbiBjYXNlcyBpdCBsZWZ0IGJlaGluZCwgc28gYW4gb3JwaGFuZWQgY2FzZVxuICAvLyBpcyBhIHJlY29yZGVkIGZhY3QgcmF0aGVyIHRoYW4gc29tZXRoaW5nIGRpc2NvdmVyZWQgbGF0ZXIuXG4gICdzdXBwb3J0LmNvbnRhY3QuZGVzaWduYXRlJyxcbiAgJ3N1cHBvcnQuY29udGFjdC5yZXZva2UnLFxuICAvLyBUaGUgcHJlbWl1bSBVUEdSQURFLCBib3RoIGRpcmVjdGlvbnMuIFNlcGFyYXRlIGFjdGlvbnMgZnJvbSBkZXNpZ25hdGlvblxuICAvLyBiZWNhdXNlIHRoZXkgYW5zd2VyIHRvIGEgZGlmZmVyZW50IGNhcCBhbmQgY2FycnkgYSBkaWZmZXJlbnQgZmFjdDogd2hvIHdhc1xuICAvLyBlbnRpdGxlZCB0byAyNHg3IGNvdmVyYWdlLCBhbmQgd2hlbi4gQSByZXNwb25zZS10aW1lIGRpc3B1dGUgb3ZlciBhblxuICAvLyBvdXQtb2YtaG91cnMgY2FzZSB0dXJucyBvbiBleGFjdGx5IHRoYXQuXG4gICdzdXBwb3J0LmNvbnRhY3QudXBncmFkZScsXG4gICdzdXBwb3J0LmNvbnRhY3QuZG93bmdyYWRlJyxcbiAgLy8gU3RhZmYgbm90ZXMgb24gYSBjYXNlLiBBdWRpdGVkIGJlY2F1c2UgYSBub3RlIGlzIHRoZSB2ZW5kb3IncyBpbnRlcm5hbFxuICAvLyBhc3Nlc3NtZW50IG9mIGEgY3VzdG9tZXIgYW5kIHRoZSBvbmx5IHN1cmZhY2Ugb24gYSBjYXNlIHRoZSB0ZW5hbnQgbXVzdFxuICAvLyBuZXZlciBzZWU7IHRoZSB0cmFpbCBjYXJyaWVzIE1FVEFEQVRBIE9OTFkgKGNhc2UgbnVtYmVyLCBub3RlIGlkLCBsZW5ndGgpXG4gIC8vIGFuZCBuZXZlciB0aGUgYm9keSwgc2luY2UgdGhlIGNlbnRyYWwgdHJhaWwgaXMgcmVhZCBmYXIgbW9yZSB3aWRlbHkgdGhhblxuICAvLyB0aGUgc3VwcG9ydCBxdWV1ZSBpcy5cbiAgJ3N1cHBvcnQuY2FzZS5ub3RlJyxcbiAgLy8gVGhlIGNhbm5lZC1yZXBseSBsaWJyYXJ5LiBPTkUgYWN0aW9uIGZvciBjcmVhdGUvZWRpdC9yZXRpcmUgcmF0aGVyIHRoYW5cbiAgLy8gdGhyZWUsIGJlY2F1c2UgdGhlIHRyYWlsJ3MgcXVlc3Rpb24gaGVyZSBpcyBcIndobyBjaGFuZ2VkIHRoZSB3b3JkaW5nIHRoZVxuICAvLyBkZXNrIHNlbmRzIGN1c3RvbWVyc1wiLCBub3Qgd2hpY2ggdmVyYiB0aGV5IHVzZWQg4oCUIGBkZXRhaWxzYCBjYXJyaWVzIHRoYXQuXG4gIC8vIFN5c3RlbS13aWRlIHJhdGhlciB0aGFuIHBlci10ZW5hbnQsIHNvIHRoZXNlIHJvd3MgbmFtZSBubyBhZmZlY3RlZCBvcmcuXG4gICdzdXBwb3J0LmNhbm5lZC53cml0ZScsXG4gIC8vIEJpbGxpbmcgKGFwaS9iaWxsaW5nKSDigJQgc3Vic2NyaXB0aW9uICsgZW50aXRsZW1lbnQgbXV0YXRpb25zLCBtaXJyb3JlZCB0byB0aGVcbiAgLy8gY2VudHJhbCBhdWRpdCB0cmFpbCAodGhlc2UgYWxzbyB3cml0ZSB0byB0aGUgc2VydmljZS1sb2NhbCBiaWxsaW5nX2V2ZW50c1xuICAvLyBjb2xsZWN0aW9uKS4gYGRldGFpbHNgIGNhcnJ5IHBsYW4vdGllci9hZGRvbiBpZHMgb25seSDigJQgbmV2ZXIgY2FyZC9wYXltZW50XG4gIC8vIHNlY3JldHMgb3IgYW4gQVdTIGFjY291bnQgaWQuXG4gIC8vIFN1YnNjcmlwdGlvbiBsaWZlY3ljbGUgYSBDVVNUT01FUiBkcml2ZXMgKHRoZSBhZG1pbiBjb3VudGVycGFydCBpc1xuICAvLyBgYmlsbGluZy50aWVyLm92ZXJyaWRlYCk6IHNlbGYtc2VydmUgY3JlYXRlIChkaXJlY3Qgb3IgTWFya2V0cGxhY2UgY2xhaW0pLFxuICAvLyBwbGFuL2ludGVydmFsIGNoYW5nZSwgY2FuY2VsLWF0LXBlcmlvZC1lbmQsIHVuZG8tY2FuY2VsLCBjYXNjYWRlIGRlbGV0ZS5cbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24ucmVhY3RpdmF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jYW5jZWwnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uZGVsZXRlJyxcbiAgJ2JpbGxpbmcudGllci5vdmVycmlkZScsXG4gIC8vIEEgTkVHT1RJQVRFRCBzdXBwb3J0IHNpemUgZmxvb3IgcmVwbGFjaW5nIHRoZSBjb21wdXRlZCByYW1wLiBTeXN0ZW0tb3JnXG4gIC8vIG9ubHksIGFuZCBhdWRpdGVkIHdpdGggdGhlIGFncmVlZCBQUklDRSBhbmQgdGhlIGFncmVlZCBTRUFUIENPVU5UIHRvZ2V0aGVyOlxuICAvLyBhIGRpc3B1dGUgYWJvdXQgd2hhdCB3YXMgc2lnbmVkIGZvciB0dXJucyBvbiB0aGF0IHBhaXIsIGFuZCB0aGUgcHJpY2UgYWxvbmVcbiAgLy8gY2Fubm90IGFuc3dlciBcImF0IHdoYXQgc2NhbGVcIi5cbiAgJ2JpbGxpbmcuc3VwcG9ydC1mbG9vci5vdmVycmlkZScsXG4gIC8vIEEgR1JBTlRFRCBvbmUtdGltZSBzdXBwb3J0IGluY2lkZW50IOKAlCBhIGNvbW1lcmNpYWwgY29uY2Vzc2lvbiwgbm90IGEgc2FsZS5cbiAgLy8gVGhlcmUgaXMgZGVsaWJlcmF0ZWx5IG5vIHB1cmNoYXNlIHBhdGg6IG1vbnRobHkgc3VwcG9ydCBjYW5jZWxzIGZyZWVseSwgc29cbiAgLy8gYW4gaW5jaWRlbnQgcHJpY2VkIGFib3ZlIGEgbW9udGggaXMgZG9taW5hdGVkIGFuZCBvbmUgYmVsb3cgaXQgbG9zZXMgbW9uZXkuXG4gIC8vIFRoZSByb3cgY2FycmllcyB0aGUgY291bnQgYW5kIHRoZSByZXN1bHRpbmcgYmFsYW5jZSwgd2hpY2ggaXMgd2hhdCBhIGxhdGVyXG4gIC8vIHJldmlldyBvZiBcIndobyBnYXZlIHdoYXQgYXdheVwiIG5lZWRzLlxuICAnYmlsbGluZy5zdXBwb3J0LWluY2lkZW50LmdyYW50JyxcbiAgLy8gT3BlcmF0b3Itb25seSByZXNlZWQgb2YgdGhlIGludm9pY2UgbGVkZ2VyIGZyb20gdGhlIHBheW1lbnQgcHJvdmlkZXInc1xuICAvLyBoaXN0b3J5IChQT1NUIC9iaWxsaW5nL2FkbWluL2JhY2tmaWxsKSDigJQgbXV0YXRlcyBmaW5hbmNlIGRhdGEgZmxlZXQtd2lkZS5cbiAgJ2JpbGxpbmcuYWRkb24uYWRkJyxcbiAgJ2JpbGxpbmcuYWRkb24ucmVtb3ZlJyxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCByZW1vdmFsIG9mIGEgdGllci1pbmNsdWRlZCBhZGQtb24gb24gYSBwbGFuIHVwZ3JhZGUgKHRoZVxuICAvLyBhY2NvdW50J3MgbmV3IHRpZXIgbm93IGJ1bmRsZXMgdGhlIGZlYXR1cmUpIOKAlCBkaXN0aW5jdCBmcm9tIGEgdXNlci1pbml0aWF0ZWRcbiAgLy8gYHJlbW92ZWAgc28gZmluYW5jZSBjYW4gdGVsbCBhbiBhdXRvLXBydW5lIGZyb20gYSBjdXN0b21lciBhY3Rpb24uXG4gICdiaWxsaW5nLmFkZG9uLnBydW5lJyxcbiAgLy8gRGlzY291bnRzIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgbWludC9pc3N1ZS9hcHBseS9yZW1vdmUvcmV2b2tlIG9mIGFcbiAgLy8gcHJpY2UgY291cG9uIG9yIHVzYWdlIGNyZWRpdC4gYGRldGFpbHNgIGNhcnJ5IHRoZSBkaXNjb3VudCBpZCArIGtpbmQvdmFsdWVcbiAgLy8gb25seSwgbmV2ZXIgdGhlIG9wYXF1ZSB0b2tlbiBvciBzaWduaW5nIGtleS5cbiAgJ2JpbGxpbmcuZGlzY291bnQuZ2VuZXJhdGUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5pc3N1ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LmFwcGx5JyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmVtb3ZlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmV2b2tlJyxcbiAgLy8gQ2FtcGFpZ25zIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgdGhlIGlkZW50aXR5IGEgc2V0IG9mIGRpc2NvdW50IGNvZGVzXG4gIC8vIGJlbG9uZ3MgdG8sIGNhcnJ5aW5nIHRoZSBidWRnZXQsIHdpbmRvdyBhbmQgb25lLXBlci1hY2NvdW50IHJ1bGUuIEF1dGhvcmluZ1xuICAvLyBvbmUgZGVjaWRlcyBob3cgbXVjaCB0aGUgYnVzaW5lc3MgbWF5IGdpdmUgYXdheSwgc28gZWFjaCBjaGFuZ2UgaXMgYXVkaXRlZC5cbiAgJ2JpbGxpbmcuY2FtcGFpZ24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuY2FtcGFpZ24udXBkYXRlJyxcbiAgJ2JpbGxpbmcuY2FtcGFpZ24uZW5kJyxcbiAgLy8gUHJvbW90aW9ucyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCNwcm9tb3Rpb25zKSDigJQgcnVsZS1kcml2ZW4gYXV0by1ncmFudFxuICAvLyBjYW1wYWlnbnMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgcHJvbW90aW9uIGlkICsgY2VudHMvZXZlbnQgb25seS5cbiAgJ2JpbGxpbmcucHJvbW90aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24ucmV2b2tlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmdyYW50JyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmFjdGl2YXRlJyxcbiAgLy8gRXhwYW5zaW9uIE9GRkVSUyAoZG9jcy9wbGFucy9zYWxlcy1hZ2VudC5tZCkuIEFuIGF1dG9tYXRlZCBncmFudGVyIG5lZWRzIGl0c1xuICAvLyBvd24gdHJhaWw6IGBkZWNsaW5lZGAgYW5kIGBkaXNtaXNzZWRgIGFyZSB0aGUgYWNjb3VudCdzIG93biBhbnN3ZXJzIChhbmQgdGhlXG4gIC8vIHBhaXIgRDYncyBsZW5ndGhlbmVkIHF1aWV0IHdpbmRvdyBkZXBlbmRzIG9uIOKAlCBcIm5ldmVyIHNhdyBpdFwiIGFuZCBcInNhaWQgbm9cIlxuICAvLyBtdXN0IG5vdCBiZSB0aGUgc2FtZSByb3cpOyBgZXhjbHVzaW9uLnNldGAvYGNsZWFyZWRgIGFyZSB0aGUgb3BlcmF0b3IgdmV0byxcbiAgLy8gd2hpY2ggaXMgdGhlIHByaWNlIG9mIHNoaXBwaW5nIHRoZSBmZWF0dXJlIGF0IGFsbCBhbmQgdGhlcmVmb3JlIGhhcyB0byBiZVxuICAvLyBhdHRyaWJ1dGFibGU7IGB0cmlnZ2VyYCBpcyBhIGh1bWFuIGFza2luZyBmb3IgYW4gb2ZmZXIgbm93LCByZWNvcmRlZCBzbyBhXG4gIC8vIG1hbnVhbCBvZmZlciBpcyBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhZ2VudCBvbmUgaW4gdGhlIG91dGNvbWUgbG9nLlxuICAvLyBUaGUgYWdlbnQncyBPV04gd29yaywgdW5kZXIgaXRzIG93biBhY3RvciAoRDE0IOKAlCBgT0ZGRVJTX0FHRU5UX0FDVE9SX0lEYCkuXG4gIC8vIGBzZW50YCBpcyB3aGF0IG1ha2VzIFwid2h5IGRpZCB0aGlzIGFjY291bnQgZ2V0IHRoaXM/XCIgYW5zd2VyYWJsZSBmcm9tIHRoZVxuICAvLyBjZW50cmFsIHRyYWlsIHJhdGhlciB0aGFuIG9ubHkgZnJvbSB0aGUgc2VydmljZSdzIG93biBjb2xsZWN0aW9uLCBhbmRcbiAgLy8gYHdpdGhkcmF3bmAgaXMgdGhlIHJlY2FsbCBhbiBvcGVyYXRvciByZWFjaGVzIGZvciBvbiB0aGUgbW9ybmluZyBhIHJ1bGVcbiAgLy8gdHVybnMgb3V0IHRvIGJlIHdyb25nIOKAlCBib3RoIGNhcnJ5IHRoZSByYXRpb25hbGUgb3IgdGhlIHdpbmRvdywgbmV2ZXIgY29weS5cbiAgJ2JpbGxpbmcub2ZmZXIuc2VudCcsXG4gICdiaWxsaW5nLm9mZmVyLndpdGhkcmF3bicsXG4gICdiaWxsaW5nLm9mZmVyLmRlY2xpbmVkJyxcbiAgJ2JpbGxpbmcub2ZmZXIuZGlzbWlzc2VkJyxcbiAgJ2JpbGxpbmcub2ZmZXIuZXhjbHVzaW9uLnNldCcsXG4gICdiaWxsaW5nLm9mZmVyLmV4Y2x1c2lvbi5jbGVhcmVkJyxcbiAgJ2JpbGxpbmcub2ZmZXIudHJpZ2dlcicsXG4gIC8vIFVzYWdlLWNyZWRpdCByZWFsaXphdGlvbiDigJQgYSBjdXN0b21lci9jb21wbGlhbmNlLXZpc2libGUgcmVjb3JkIG9mIGNyZWRpdFxuICAvLyBtb3ZlbWVudDogYGNvbnN1bWVkYCAoTWFya2V0cGxhY2UgbWV0ZXJlZCBkcmF3ZG93biksIGBleGhhdXN0ZWRgIChiYWxhbmNlIGhpdFxuICAvLyB6ZXJvKSwgYW5kIGEgY29tYm8gZW5kaW5nLiBgZGV0YWlsc2AgY2FycnkgY2VudHMvaWRzIG9ubHksIG5vIHBheW1lbnQgc2VjcmV0cy5cbiAgJ2JpbGxpbmcuY3JlZGl0LmNvbnN1bWVkJyxcbiAgJ2JpbGxpbmcuY3JlZGl0LmV4aGF1c3RlZCcsXG4gICdiaWxsaW5nLmNvbWJvLmV4cGlyZWQnLFxuICAvLyBSZXBvcnRpbmcgKGFwaS9yZXBvcnRpbmcpIOKAlCB0aGUgdGhyZWUgcmVwb3J0aW5nIG11dGF0aW9ucyB3aG9zZSBlZmZlY3RcbiAgLy8gb3V0bGl2ZXMgYSByZXF1ZXN0IGxvZzogdGhlIHBlci1vcmcgY29ycmVsYXRpb24td2luZG93IGNvbmZpZyB3cml0ZSwgYVxuICAvLyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciAoaXQgbW92ZXMgdGhlIG9yZydzIERPUkEgQ0ZSL01UVFIpLCBhbmQgdGhlXG4gIC8vIGluYm91bmQgYmlsbGluZ+KGknJlcG9ydGluZyByZXRlbnRpb24tZW50aXRsZW1lbnQgc3luYyAoYSByZXRlbnRpb24gY3V0IGlzIGFcbiAgLy8gZGF0YS1kZXN0cm95aW5nIGNoYW5nZSBhcHBsaWVkIGJ5IHRoZSBuZXh0IHN3ZWVwKS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyBzZXR0aW5ncy9vdXRjb21lIHZhbHVlcyBvbmx5LlxuICAncmVwb3J0aW5nLnNldHRpbmdzLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcuZGVwbG95bWVudC5vdXRjb21lJyxcbiAgJ3JlcG9ydGluZy5yZXRlbnRpb24uc3luYycsXG4gIC8vIFN0YWtlaG9sZGVyIHJlcG9ydHMg4oCUIHRoZSBhZGQtb24ncyBhdXRob3JpbmcgYW5kIFBVQkxJU0hJTkcgc3VyZmFjZS4gUHVibGlzaGluZ1xuICAvLyBpcyB0aGUgbW9tZW50IGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnMgbGVhdmUgdGhlIHBsYXRmb3JtLCBzbyB0aGUgd2hvbGVcbiAgLy8gb3V0d2FyZCBwYXRoIGlzIGF1ZGl0YWJsZTogd2hpY2ggcmVwb3J0LCB3aGljaCBwZXJpb2QncyBmcm96ZW4gc25hcHNob3QsXG4gIC8vIHdoaWNoIHZlcnNpb24sIGFuZCB3aG8gbGV0IGl0IG91dC4gYGxpbmsuY3JlYXRlZGAgLyBgbGluay5yZXZva2VkYCBjb3ZlciB0aGVcbiAgLy8gVVJMcyB0aGF0IGxldCBzb21lb25lIHdpdGhvdXQgYW4gYWNjb3VudCByZWFkIGl0OyBgcmVjaXBpZW50LmFkZGVkYCAvXG4gIC8vIGByZWNpcGllbnQucmVtb3ZlZGAgY292ZXIgd2hvIGlzIG9uIHRoZSBkaXN0cmlidXRpb24gbGlzdCwgd2hpY2ggaXMgdGhlIG90aGVyXG4gIC8vIHdheSBkYXRhIHJlYWNoZXMgYSBwZXJzb24uIGBvd25lcnNoaXAudHJhbnNmZXJgIGlzIGEgcHJpdmlsZWdlIG1vdmU6IGFcbiAgLy8gc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIGl0cyBPV05FUiwgc28gaGFuZGluZyBhIGRlZmluaXRpb24gb3ZlciBoYW5kc1xuICAvLyBvdmVyIHdob3NlIGFjY2VzcyB0aGUgbnVtYmVycyBhcmUgY29tcHV0ZWQgd2l0aC5cbiAgLy9cbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBhdWRpdGVkOiByZWFkaW5nIGEgc2hhcmVkIHJlcG9ydC4gVGhlIGFjY2VzcyBpcyBsb2dnZWQgYW5kXG4gIC8vIGNvdW50ZWQgcGVyIGxpbmssIGJ1dCBpdCBpcyBhbiBVTkFVVEhFTlRJQ0FURUQsIGV4dGVybmFsbHktdHJpZ2dlcmVkIGV2ZW50IOKAlFxuICAvLyBhbnlvbmUgaG9sZGluZyBhIFVSTCBjb3VsZCBvdGhlcndpc2Ugd3JpdGUgdW5ib3VuZGVkIHJvd3MgaW50byB0aGUgb3JnJ3MgYXVkaXRcbiAgLy8gdHJhaWwsIHdoaWNoIHR1cm5zIGEgcmVhZCBpbnRvIGEgd2F5IHRvIGJ1cnkgdGhlIGVudHJpZXMgdGhhdCBtYXR0ZXIuXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uY3JlYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi51cGRhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmRlbGV0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0Lm93bmVyc2hpcC50cmFuc2ZlcicsXG4gICdyZXBvcnRpbmcucmVwb3J0LnB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlcHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gVGhlIGRyYWZ0aW5nIGhhbGYgb2YgYSBydW46IGEgY29tcG9zZS9yZWdlbmVyYXRlIGZyZWV6ZXMgdGhlIG9yZydzIG51bWJlcnNcbiAgLy8gaW50byBhIHJ1biwgdGhlIGxlYWQncyBub3RlcyBhcmUgZWRpdGVkIG9udG8gaXQgKG1ldGFkYXRhIG9ubHkg4oCUIGxlbmd0aCxcbiAgLy8gbmV2ZXIgdGhlIHByb3NlKSwgYW5kIGFuIEFJIHN1bW1hcnkgaXMgZHJhZnRlZCBmcm9tIGl0ICh0aGUgbnVtYmVycyB3ZW50IHRvXG4gIC8vIGEgcHJvdmlkZXI7IGBvdXRjb21lYCBjYXJyaWVzIGEgcmVmdXNhbCkuIEEgcmVzZW5kIHJlLW1pbnRzIGEgcmVjaXBpZW50J3NcbiAgLy8gY29uZmlybWF0aW9uIGNyZWRlbnRpYWwuIGB2ZXJpZmllZGAgLyBgdW5zdWJzY3JpYmVkYCBhcmUgdGhlIFVOQVVUSEVOVElDQVRFRFxuICAvLyByZWNpcGllbnQncyBvd24gYWN0cyAoYWN0b3IgYGFub255bW91c2AsIGEgaGFzaGVkIGFkZHJlc3Mgb25seSk6IGJvdW5kZWQgYnlcbiAgLy8gY29uc3RydWN0aW9uIOKAlCB0aGUgdmVyaWZ5IHRva2VuIGlzIHNpbmdsZS11c2UsIGFuZCBvbmx5IHRoZSBjbGljayB0aGF0XG4gIC8vIGFjdHVhbGx5IHN0b3BzIGRlbGl2ZXJ5IHdyaXRlcyBhbiB1bnN1YnNjcmliZSByb3cuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJ1bi5jb21wb3NlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLm5vdGVzJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLnN1bW1hcnknLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQucmVzZW5kJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnZlcmlmaWVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnVuc3Vic2NyaWJlZCcsXG4gIC8vIE1BQ0hJTkUgaW5nZXN0IChgcmVwb3J0aW5nOmluZ2VzdGAgc2NvcGUpLiBPbmUgYGJhdGNoYCByb3cgcGVyIFBPU1QgdG8gdGhlXG4gIC8vIGV2ZW50IC8gaW5jaWRlbnQgLyBpbmdlc3QtaGVhbHRoIHJvdXRlcyDigJQgY291bnRzIHBsdXMgY2FwcGVkIHBpcGVsaW5lLFxuICAvLyBleGVjdXRpb24sIEV2ZW50QnJpZGdlLWV2ZW50IGFuZCBpbmNpZGVudCBpZCBsaXN0cywgYXR0cmlidXRlZCB0byB0aGVcbiAgLy8gY3JlZGVudGlhbCdzIHByaW5jaXBhbCDigJQgc28gYSBmb3JnZWQgb3IgbWlzcm91dGVkIHdyaXRlIG5hbWVzIHRoZSBrZXkgYmVoaW5kXG4gIC8vIGl0LiBgcmVqZWN0ZWRgIGlzIHRoZSB0ZW5hbmN5IHJlZnVzYWwgaW5zaWRlIGEgYmF0Y2ggKGV2ZW50cyBuYW1pbmcgYW5vdGhlclxuICAvLyBvcmcncyBwaXBlbGluZXMpOiBhIEZBSUxVUkUgcm93IHdpdGggdGhlIG9mZmVuZGluZyBwaXBlbGluZSBpZHMsIG5ldmVyIHRoZVxuICAvLyBvcmcgdGhleSBiZWxvbmcgdG8uIGBpbmNpZGVudC5yZWNvcmRgIGlzIG9uZSBpbmNpZGVudCB0aGF0IGlzIG5ldyBvciBhY3R1YWxseVxuICAvLyBjaGFuZ2VkIChiZWZvcmUvYWZ0ZXIpOyBsaWtlIGBkZXBsb3ltZW50Lm91dGNvbWVgIGl0IG1vdmVzIENGUi9NVFRSLiBBblxuICAvLyB1bmNoYW5nZWQgcmVwZWF0LWludGVydmFsIHJlLXBvc3Qgd3JpdGVzIG5vbmUuXG4gICdyZXBvcnRpbmcuaW5nZXN0LmJhdGNoJyxcbiAgJ3JlcG9ydGluZy5pbmdlc3QucmVqZWN0ZWQnLFxuICAncmVwb3J0aW5nLmluY2lkZW50LnJlY29yZCcsXG4gIC8vIERlbmllZCBhdXRob3JpemF0aW9uIGF0dGVtcHQg4oCUIGVtaXR0ZWQgYmVzdC1lZmZvcnQgYnkgdGhlIHNoYXJlZFxuICAvLyBgcmVxdWlyZVBlcm1pc3Npb25gIC8gYHJlcXVpcmVTeXN0ZW1BZG1pbmAgZ2F0ZSB3aGVuIGEgc3RhdGUtY2hhbmdpbmdcbiAgLy8gKG5vbi1HRVQpIHJlcXVlc3QgaXMgcmVqZWN0ZWQsIHNvIHByb2JpbmcvZXNjYWxhdGlvbiBhdHRlbXB0cyBhcmUgdmlzaWJsZVxuICAvLyByYXRoZXIgdGhhbiBpbnZpc2libGUuIGBkZXRhaWxzYCBjYXJyaWVzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uICsgcGF0aDtcbiAgLy8gYG91dGNvbWVgIGlzICdmYWlsdXJlJy5cbiAgJ2F1dGh6LmRlbmllZCcsXG4gIC8vIFwiQXNrXCIgYXNzaXN0YW50IGFjdGl2aXR5IOKAlCB2aXNpYmlsaXR5IGludG8gd2hhdCB0aGUgYXNzaXN0YW50IGRpZCBvbiBhIHVzZXInc1xuICAvLyBiZWhhbGYuIGBhc2sucXVlcnlgIGlzIGEgcmVhZC1vbmx5IGhvdy10byB0dXJuOyBgYXNrLmFnZW50LnR1cm5gIGlzIGEgdG9vbC1jYWxsaW5nXG4gIC8vIHR1cm4uIGBkZXRhaWxzYCBjYXJyeSBTQUZFIE1FVEFEQVRBIE9OTFkgKHRvb2xzIHVzZWQsIHByb3Bvc2FsIGtpbmRzLCBxdWVyeVxuICAvLyBsZW5ndGgsIG91dGNvbWUpLCBuZXZlciB0aGUgcmF3IHF1ZXJ5IHRleHQuXG4gICdhc2sucXVlcnknLFxuICAnYXNrLmFnZW50LnR1cm4nLFxuICAvLyBBIHJlYWRlciByYXRpbmcgYW4gYW5zd2VyLCBvciBhIGhlbHAgc2VhcmNoIHRoYXQgZm91bmQgbm90aGluZy4gVGhlIE9OTFlcbiAgLy8gc2lnbmFsIGZvciB3aGljaCBkb2NzIHRoZSBhc3Npc3RhbnQgYW5zd2VycyBiYWRseSBmcm9tIOKAlCB0aGUgdHVybiBpdHNlbGZcbiAgLy8gY2Fubm90IHRlbGwgYSBnb29kIGFuc3dlciBmcm9tIGEgY29uZmlkZW50IHdyb25nIG9uZS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyByYXRpbmcgYW5kIHRoZSBET0MgSURTIGNpdGVkIChgYXV0aGVudGljYXRpb24ubWRgKSwgbmV2ZXIgdGhlIHF1ZXN0aW9uOiB0aGVcbiAgLy8gZG9jIGlzIHdoYXQgZ2V0cyBmaXhlZCwgYW5kIGl0IGlzIG5vdCB1c2VyLWVudGVyZWQgdGV4dC5cbiAgJ2Fzay5mZWVkYmFjaycsXG4gIC8vIE9uZSBBSSBnZW5lcmF0aW9uIG9mIGEgcGlwZWxpbmUgLyBwbHVnaW4gZHJhZnQgKGAvcGlwZWxpbmVzL2dlbmVyYXRlKmAsXG4gIC8vIGAvcGx1Z2lucy9nZW5lcmF0ZSpgKSwgc3VjY2VzcyBvciBmYWlsdXJlIChpbmNsLiBjbGllbnQgYWJvcnQpLiBgZGV0YWlsc2AgY2FycnlcbiAgLy8gU0FGRSBNRVRBREFUQSBPTkxZOiB0aGUgcm91dGUsIHRoZSBwcm9tcHQgTEVOR1RILCB0aGUgc2hhcmVkIEFJIHVzYWdlIGJsb2NrXG4gIC8vIChgYWlgOiB0aGUgcHJvdmlkZXIgYW5kIG1vZGVsIHRoYXQgQU5TV0VSRUQgYWZ0ZXIgYW55IGZhaWxvdmVyLCBgZmFsbGJhY2tGcm9tYCxcbiAgLy8gd2hvc2Uga2V5IHBhaWQg4oCUIGBrZXlTb3VyY2VgIHJlcXVlc3Qvb3JnL3BsYXRmb3JtIOKAlCB0b2tlbnMgaW4vb3V0L2NhY2hlZCwgdGhlXG4gIC8vIHByb21wdCB2ZXJzaW9uLCBob3cgdGhlIGBhaUNhbGxzYCBzbG90IHNldHRsZWQpIGFuZCB0aGUgcmVzZXJ2YXRpb24nc1xuICAvLyBgcXVvdGFgIHZpZXcg4oCUIG5ldmVyIHRoZSBwcm9tcHQsIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBvciBhIGtleS5cbiAgJ3BpcGVsaW5lLmFpLmdlbmVyYXRlJyxcbiAgJ3BsdWdpbi5haS5nZW5lcmF0ZScsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gIC8vIE5PVEU6IHRoZXJlIGlzIG5vIGBwbHVnaW4ubGlzdGluZy51bmxpc3RgLiBXaXRoZHJhd2FsIGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5XG4gIC8vIGBwbHVnaW4ubGlzdGluZy5zdGF0ZS5jaGFuZ2VgIChgdW5tYWludGFpbmVkYCAvIGBzdXNwZW5kZWRgIC8gYGxpc3RlZGApLFxuICAvLyB3aGljaCBpcyB0aGUgYWN0aW9uIHRoZSBjb2RlIGFjdHVhbGx5IGVtaXRzLCBzbyBgdW5saXN0YCB3YXMgYSBzZWNvbmQgbmFtZVxuICAvLyBmb3IgYSB0aGluZyB0aGF0IGhhcyBvbmUg4oCUIGFuZCBhIG5ldmVyLWVtaXR0ZWQgb25lIGF0IHRoYXQuXG4gICdwbHVnaW4ubGlzdGluZy51cGRhdGUnLFxuICAncGx1Z2luLmxpc3Rpbmcuc3RhdGUuY2hhbmdlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnBhdXNlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ueWFuaycsXG4gICdwbHVnaW4udmVyc2lvbi51bnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24uZGVwcmVjYXRlJyxcbiAgLy8gUmV0aXJpbmcgYSB2ZXJzaW9uJ3MgcmVnaXN0cnkgaW1hZ2UgdG8gcmVjbGFpbSBgc3RvcmFnZUJ5dGVzYC4gRGlzdGluY3RcbiAgLy8gZnJvbSB0aGUgZm91ciBhYm92ZSwgd2hpY2ggY2hhbmdlIHdoZXRoZXIgYSB2ZXJzaW9uIFJFU09MVkVTIGFuZCBkZWxldGVcbiAgLy8gbm90aGluZywgYW5kIGZyb20gYHJlZ2lzdHJ5LmltYWdlLmRlbGV0ZWAvYHJlZ2lzdHJ5LnRhZy5kZWxldGVgLCB3aGljaCBhcmVcbiAgLy8gdGhlIHJlZ2lzdHJ5J3Mgb3duIG9wZXJhdG9yLXNpZGUgdHJhaWwuIFRoaXMgaXMgYSB0ZW5hbnQgZnJlZWluZyBzcGFjZSwgYW5kXG4gIC8vIHRoZSBvbmx5IGF1ZGl0ZWQgYWN0aW9uIHRoYXQgY2FuIHJlZHVjZSBhbiBvcmcncyBzdG9yYWdlIGZpZ3VyZSDigJQgc28gaXRzXG4gIC8vIHJvdyBjYXJyaWVzIHRoZSBieXRlcyBpdCBmcmVlZCwgd2hpY2ggY2Fubm90IGJlIHJlY292ZXJlZCBhZnRlcndhcmRzLlxuICAncGx1Z2luLnZlcnNpb24ucHJ1bmUnLFxuICAvLyBOT1RFOiBubyBgcGx1Z2luLmNvbGxlY3Rpb24udXBkYXRlYC4gYGVjb3N5c3RlbV9jb2xsZWN0aW9uc2Agd2FzIGRlbGV0ZWQgKHNlZVxuICAvLyB0aGUgdG9tYnN0b25lIGluIGBzY2hlbWEvZWNvc3lzdGVtLnRzYCkgYmVjYXVzZSBub3RoaW5nIGV2ZXIgd3JvdGUgb3IgcmVhZFxuICAvLyBvbmU7IHRoaXMgZGVjbGFyYXRpb24gb3V0bGl2ZWQgdGhlIHRhYmxlIGl0IGF1ZGl0ZWQuXG4gIC8vIEVjb3N5c3RlbSBjb25maWd1cmF0aW9uIChzeXN0ZW0gb3JnKS5cbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuY3JlYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUudXBkYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuZGVsZXRlJyxcbiAgJ2Vjb3N5c3RlbS5yZXNlcnZlZC1uYW1lLnVwZGF0ZScsXG4gIC8vIFRoZSBvbmUtdGltZSBCT09UU1RSQVAgZXhjZXB0aW9uIChhdXRvLWFwcHJvdmFsIG9mIHRoZSBpbml0aWFsIE9mZmljaWFsXG4gIC8vIGNhdGFsb2cpIG9wZW5pbmcgb24gdGhlIGZpcnN0IE9mZmljaWFsIHJlcXVlc3QsIGFuZCBjbG9zaW5nIGZvciBnb29kXG4gIC8vIChgZGV0YWlscy5yZWFzb25gOiB3aW5kb3dfZWxhcHNlZCAvIGxpc3RpbmdzX2V4aXN0IC8gYSBtYW5hZ2VyIGRlY2lzaW9uO1xuICAvLyBgZGV0YWlscy5hcHByb3ZlZGA6IGhvdyBtYW55IHJlcXVlc3RzIHJvZGUgaXQpLlxuICAnZWNvc3lzdGVtLmJvb3RzdHJhcC5vcGVuJyxcbiAgJ2Vjb3N5c3RlbS5ib290c3RyYXAuY2xvc2UnLFxuICAvLyBOT1RFOiBubyBgZWNvc3lzdGVtLnNsYS51cGRhdGVgLiBUaGUgbGFuZSBTTEFzIGFyZSBIQVJEQ09ERUQgKHN0YW5kYXJkIDQ4aCxcbiAgLy8gc2VjdXJpdHktZml4IDRoIGluIGBzZXJ2aWNlcy9lY29zeXN0ZW0vc2xhLnRzYCkgd2l0aCBubyBzZXR0aW5ncyBzdXJmYWNlLCBzb1xuICAvLyB0aGVyZSBpcyBubyBtdXRhdGlvbiB0byBhdWRpdC4gTWFraW5nIHRoZW0gb3BlcmF0b3ItdHVuYWJsZSBpcyB0aGUgY2hhbmdlXG4gIC8vIHRoYXQgc2hvdWxkIHJlLWFkZCB0aGlzLlxuICAvLyBQdWJsaWMgcmVnaXN0cnkgbmFtZXNwYWNlIChgcHVibGljLypgKTogY29weSArIHNpZ24gKyBhdHRlc3Qgb24gcHVibGlzaCxcbiAgLy8gdGhlIHRpZXItY2hhbmdlL3N1c3BlbnNpb24gcmUtc2lnbiBqb2IsIHRhZyByZW1vdmFsIG9uIHlhbmsvdGFrZWRvd24sIGFuZFxuICAvLyB0aGUgcmV0ZW50aW9uIHN3ZWVwLlxuICAncmVnaXN0cnkuaW1hZ2UucHVibGlzaCcsXG4gICdyZWdpc3RyeS5pbWFnZS5yZXNpZ24nLFxuICAncmVnaXN0cnkuaW1hZ2UueWFuaycsXG4gICdyZWdpc3RyeS5pbWFnZS5nYycsXG4gIC8vIEluc3RhbGxzIGFuZCB0aGUgaW5zdGFsbGluZyBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKG9yZy1sb2NhbCkuXG4gICdwbHVnaW4uaW5zdGFsbC5yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuZGVueScsXG4gICdwbHVnaW4uaW5zdGFsbC5jcmVhdGUnLFxuICAncGx1Z2luLmluc3RhbGwudXBncmFkZScsXG4gIC8vIEEgbWVtYmVyJ3MgcmVxdWVzdCB0byBjaGFuZ2UgYW4gaW5zdGFsbCBwYXN0IHdoYXQgdGhleSBtYXkgZG8gYWxvbmUsIGFuZCBpdHMgZGVjaXNpb24uXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVqZWN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnJlbW92ZScsXG4gICdvcmcucGx1Z2luLWluc3RhbGwtcG9saWN5LnVwZGF0ZScsXG4gIC8vIEFuIHVwbG9hZCBSRUZVU0VEIGJlY2F1c2UgaXRzIG5hbWUgd291bGQgb3ZlcnJpZGUgc29tZXRoaW5nIHRoZSBvcmcgYWxyZWFkeVxuICAvLyByZXNvbHZlcyDigJQgYSBsaXN0aW5nLCBvciBhIHRlYW0ncyBwYXJlbnQtb3JnIHBsdWdpbiDigJQgYW5kIHRoZSBjb25zdW1wdGlvblxuICAvLyBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gQXVkaXRlZCBiZWNhdXNlIGEgcmVmdXNhbCBvdGhlcndpc2UgcmV0dXJuc1xuICAvLyBhbiBlcnJvciB0byB0aGUgY2FsbGVyIGFuZCBsZWF2ZXMgbm90aGluZyBiZWhpbmQ6IGFuIGF0dGVtcHQgdG8gZGVmaW5lXG4gIC8vIGB0cml2eWAgb3ZlciB0aGUgT2ZmaWNpYWwgc2Nhbm5lciBpcyBleGFjdGx5IHRoZSB0aGluZyBzb21lb25lIHNob3VsZCBiZVxuICAvLyBhYmxlIHRvIGZpbmQgYWZ0ZXJ3YXJkcy4gYGRldGFpbHNgIGNhcnJ5IHRoZSBuYW1lIGFuZCB3aGF0IGl0IHdvdWxkIGhhdmVcbiAgLy8gb3ZlcnJpZGRlbi5cbiAgJ3BsdWdpbi5zaGFkb3dpbmcuZGVuaWVkJyxcbiAgLy8gUmV2aWV3cyBhbmQgcmVwbGllcy5cbiAgJ3BsdWdpbi5yZXZpZXcuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwb3J0JyxcbiAgJ3BsdWdpbi5yZXZpZXcuaG9sZCcsXG4gICdwbHVnaW4ucmV2aWV3LnJlbGVhc2UnLFxuICAncGx1Z2luLnJldmlldy5yZW1vdmUnLFxuICAncGx1Z2luLnJldmlldy5hbm9ueW1pemUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS5jcmVhdGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS51cGRhdGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS5kZWxldGUnLFxuICAvLyBBbm9ueW1vdXMgc3VibWlzc2lvbnMuXG4gICdwbHVnaW4uc3VibWlzc2lvbi5jcmVhdGUnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24udmVyaWZ5JyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmdhdGUtZmFpbCcsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5hcHByb3ZlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnJlamVjdCcsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5jbGFpbScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5leHBpcmUnLFxuICAvLyBTZWN1cml0eSBhZHZpc29yaWVzIChwdWJsaXNoL3dpdGhkcmF3IGFyZSBzeXN0ZW0tb3JnIG9ubHk7IHVwZGF0ZSA9IGFcbiAgLy8gbW9kZXJhdG9yIGVkaXRpbmcgYSBkcmFmdCBiZWZvcmUgaXQgaXMgcHVibGlzaGVkKS5cbiAgJ3BsdWdpbi5hZHZpc29yeS5jcmVhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnVwZGF0ZScsXG4gICdwbHVnaW4uYWR2aXNvcnkucHVibGlzaCcsXG4gICdwbHVnaW4uYWR2aXNvcnkud2l0aGRyYXcnLFxuICAvLyBQZXItb3JnIHBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb25zIChwbHVnaW4gc2NhbiBnYXRlcyk6IHRoZSBzZXR0aW5nc1xuICAvLyAocmVjaXBpZW50cywgZGlnZXN0LCB3ZWJob29rLCBleHRlcm5hbCBhZGRyZXNzIOKAlCBjaGFuZ2VkIGZpZWxkIG5hbWVzIGFuZFxuICAvLyB0aGUgd2ViaG9vayBob3N0IG9ubHksIG5ldmVyIHRoZSBzZWNyZXQgb3IgdGhlIGFkZHJlc3MpLCBhbiBleHRlcm5hbFxuICAvLyBhZGRyZXNzIGNvbmZpcm1lZCB0aHJvdWdoIGl0cyBlbWFpbGVkIHNpbmdsZS11c2UgbGluaywgYW5kIGEgdGVzdCBzZW5kLlxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudXBkYXRlJyxcbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLmV4dGVybmFsX2VtYWlsLnZlcmlmeScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy50ZXN0JyxcbiAgLy8gQSBnYXRlLXJlZnVzZWQgaW1hZ2UgS0VQVCBmcm9tIHRoZSBzZXR1cCBjYXRhbG9nIGxvYWQsIHByb21vdGVkIHRvIGFcbiAgLy8gdmVyc2lvbiB3aXRob3V0IGEgcmVidWlsZCAoc3lzdGVtIG9yZywgYWZ0ZXIgYSBmaXggdXBzdHJlYW0gb3IgYW5cbiAgLy8gYWR2aXNvcnktaWQgd2FpdmVyKSDigJQgb3IgcmVmdXNlZCBhZ2FpbiBiZWNhdXNlIHRoZSBDVVJSRU5UIGdhdGVzIHN0aWxsXG4gIC8vIGZhaWwgaXQuIGBkZXRhaWxzYCBjYXJyeSBuYW1lL3ZlcnNpb24vZGlnZXN0IGFuZCB0aGUgZmluZGluZ3MuXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2UucHJvbW90ZWQnLFxuICAncGx1Z2luLnNldHVwX2ltYWdlLnByb21vdGVfcmVmdXNlZCcsXG4gIC8vIEEgZ2F0ZS1yZWZ1c2VkIHNldHVwLWxvYWQgaW1hZ2UgS0VQVCAoc2lnbmVkLCBpbiB0aGUgcmVnaXN0cnkpIGZvciBsYXRlclxuICAvLyBwcm9tb3Rpb24gKGBkZXRhaWxzYDogZGlnZXN0LCByZWZ1c2FsIGNvZGUsIGV4cGlyZXNBdCkg4oCUIGFuZCBpdHMgcm93XG4gIC8vIGRyb3BwZWQgYnkgdGhlIHN3ZWVwIChgZGV0YWlscy5yZWFzb25gOiBleHBpcmVkIC8gc3VwZXJzZWRlZCkuXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2Uua2VwdCcsXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2UuZGlzY2FyZGVkJyxcbiAgLy8gQSBQSVBFTElORSdzIHRyaWFnZSBvZiBpdHMgZXhwb3N1cmUgdG8gYSB2dWxuZXJhYmxlIHBsdWdpbiB2ZXJzaW9uOiBhXG4gIC8vIHRpbWUtYm94ZWQgcmlzayBhY2NlcHRhbmNlIChyZWFzb24gKyBleHBpcnksIHRoZSBhY2NlcHRlZCBmaW5kaW5nIGtleXMgYW5kXG4gIC8vIHdoZXRoZXIgS0VWIGZpbmRpbmdzIHdlcmUgYWNjZXB0ZWQpLCBhIGZhbHNlLXBvc2l0aXZlIGRpc21pc3NhbCwgb3IgYVxuICAvLyByZW9wZW4uIEFuIGFjdGl2ZSBhY2NlcHRhbmNlIGV4ZW1wdHMgdGhhdCBwaXBlbGluZSdzIGxvb2t1cHMgYW5kIHJ1bnRpbWVcbiAgLy8gY2hlY2tzIGZyb20gdGhlIGZsYWcgLyBLRVYgLyBIaWdoLWZsb29yIHJlZnVzYWxzIGZvciB0aG9zZSBmaW5kaW5ncyBvbmx5LlxuICAncGlwZWxpbmUudnVsbi5hY2NlcHRlZCcsXG4gICdwaXBlbGluZS52dWxuLmZhbHNlX3Bvc2l0aXZlJyxcbiAgJ3BpcGVsaW5lLnZ1bG4ucmVvcGVuZWQnLFxuICAvLyBBIHBpcGVsaW5lJ3MgcnVudGltZSBjaGVjayBncmFkZWQgb25lIG9mIGl0cyBydW5uaW5nIGltYWdlcyBgZXJyb3JgIG9yXG4gIC8vIGxvdWRlciAoYGRldGFpbHNgOiBzdGVwS2V5LCBkaWdlc3QsIHJlYXNvbiBjb2RlcywgZXhlY3V0aW9uSWQgd2hlbiBzZW50KS5cbiAgJ3BpcGVsaW5lLnJ1bnRpbWVfY2hlY2suZmxhZ2dlZCcsXG4gIC8vIEEgcGlwZWxpbmUncyBwbHVnaW4gc3RlcHMgbW92ZWQgdG8gbmV3ZXIgdmVyc2lvbnMgdGhyb3VnaCB0aGUgdXBncmFkZVxuICAvLyBmbG93IChwcmV2aWV3IOKGkiBhcHBseTsgYGRldGFpbHNgIGNhcnJ5IHRoZSBzdGVwcywgZnJvbSDihpIgdG8gdmVyc2lvbnMpLCBhbmQgYVxuICAvLyBwaXBlbGluZS1ydW4gc2VjdXJpdHkgc2Nhbm5lciByZXBvcnQgdXBsb2FkZWQgZm9yIGEgcGlwZWxpbmUgKGBkZXRhaWxzYDpcbiAgLy8gdG9vbCwgZm9ybWF0LCBzdGFnZSwgdGhlIGZpbmRpbmcgY291bnRzIOKAlCBuZXZlciB0aGUgZmluZGluZ3MgdGhlbXNlbHZlcykuXG4gICdwaXBlbGluZS5wbHVnaW4udXBncmFkZWQnLFxuICAncGlwZWxpbmUuc2VjdXJpdHlfcmVwb3J0LnVwbG9hZCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9yZW1vdGUtYXVkaXQtYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsd0JBQXdCO0lBQ3hCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsOEVBQThFO0lBQzlFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLHVFQUF1RTtJQUN2RSwyRUFBMkU7SUFDM0UsK0VBQStFO0lBQy9FLDhFQUE4RTtJQUM5RSxrRUFBa0U7SUFDbEUseUVBQXlFO0lBQ3pFLG9CQUFvQjtJQUNwQiwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLHNFQUFzRTtJQUN0RSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLHVFQUF1RTtJQUN2RSxxQ0FBcUM7SUFDckMscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsdUVBQXVFO0lBQ3ZFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsZ0VBQWdFO0lBQ2hFLHFFQUFxRTtJQUNyRSxvREFBb0Q7SUFDcEQsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1FQUFtRTtJQUNuRSw0RUFB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QUFzQztJQUN0QyxxREFBcUQ7SUFDckQsb0NBQW9DO0lBQ3BDLHVFQUF1RTtJQUN2RSxvRUFBb0U7SUFDcEUseUVBQXlFO0lBQ3pFLGlFQUFpRTtJQUNqRSw2QkFBNkI7SUFDN0Isb0NBQW9DO0lBQ3BDLDJFQUEyRTtJQUMzRSx1RUFBdUU7SUFDdkUsaUVBQWlFO0lBQ2pFLHlCQUF5QjtJQUN6Qiw4QkFBOEI7SUFDOUIsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSx3QkFBd0I7SUFDeEIsOEJBQThCO0lBQzlCLHdCQUF3QjtJQUN4Qix5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLGdDQUFnQztJQUNoQyx3RUFBd0U7SUFDeEUsK0VBQStFO0lBQy9FLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsMEJBQTBCO0lBQzFCLGlDQUFpQztDQUN6QixDQUFDO0FBSVgsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhO0lBQy9DLE9BQVEsb0JBQTBDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcmVtb3RlIChub24tcGxhdGZvcm0pIGF1ZGl0IEFDVElPTiBWT0NBQlVMQVJZLlxuICpcbiAqIEtlcHQgYXBhcnQgZnJvbSB0aGUgY2xpZW50IHRoYXQgc2hpcHMgdGhlIGV2ZW50cyAoYHNlcnZpY2VzL3JlbW90ZS1hdWRpdC1jbGllbnQudHNgKVxuICogYmVjYXVzZSBpdCBpcyBhbiBhbGxvdy1saXN0LCBub3QgbWFjaGluZXJ5OiBpdCBpcyB0aGUgdGhpbmcgYSByZXZpZXdlciByZWFkc1xuICogZW5kIHRvIGVuZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgYSBzZXJ2aWNlIG1heSBlbWl0IGEgZ2l2ZW4gYWN0aW9uLCBhbmQgaXQgaXNcbiAqIHdoYXQgcGxhdGZvcm0ncyBpbmdlc3QgdmFsaWRhdGVzIGFnYWluc3QuXG4gKi9cblxuXG4vKipcbiAqIFRoZSBleGFjdCBzZXQgb2YgYXVkaXQgYWN0aW9ucyBhIE5PTi1QTEFURk9STSAocmVtb3RlKSBzZXJ2aWNlIGlzIHBlcm1pdHRlZCB0b1xuICogZW1pdCB0aHJvdWdoIGBQT1NUIC9hdWRpdC9ldmVudHNgLiBUaGlzIGlzIHRoZSBTSU5HTEUgU09VUkNFIOKAlCBgUmVtb3RlQXVkaXRBY3Rpb25gXG4gKiBpcyBkZXJpdmVkIGZyb20gaXQsIHNvIHRoZSB0eXBlIGFuZCB0aGUgcnVudGltZSBhbGxvdy1saXN0IGNhbiBuZXZlciBkcmlmdC5cbiAqXG4gKiBTRUNVUklUWTogcGxhdGZvcm0ncyBpbmdlc3QgdmFsaWRhdGVzIGBhY3Rpb25gIGFnYWluc3QgdGhpcyBzdWJzZXQgKHZpYVxuICoge0BsaW5rIGlzUmVtb3RlQXVkaXRBY3Rpb259KSwgTk9UIHRoZSBmdWxsIHBsYXRmb3JtIGBBdWRpdEFjdGlvbmAgdW5pb24g4oCUIGFcbiAqIGBzZXJ2aWNlOipgIHRva2VuIG11c3Qgbm90IGJlIGFibGUgdG8gZm9yZ2UgcGxhdGZvcm0tYXV0aG9yaXR5IGV2ZW50c1xuICogKGBhZG1pbi5zdXBlcmFkbWluLmdyYW50YCwgYG9yZy5vd25lcnNoaXAudHJhbnNmZXJgLCBgdXNlci5sb2dpbmAsIOKApikuIEtlZXBcbiAqIHRoaXMgbGlzdCBmcmVlIG9mIGFueSBwbGF0Zm9ybS1vbmx5IGFjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFTU9URV9BVURJVF9BQ1RJT05TID0gW1xuICAncGx1Z2luLmJ1aWxkLmNvbXBsZXRlZCcsXG4gICdwbHVnaW4uYnVpbGQuZmFpbGVkJyxcbiAgJ3BsdWdpbi5idWlsZC50aW1lb3V0JyxcbiAgLy8gQSB2ZXJzaW9uIHBlcnNpc3RlZCBVTlNDQU5ORUQgYmVjYXVzZSB0aGUgYnVpbGQtdGltZSBzY2FuIGNvdWxkIG5vdCBydW4gYW5kXG4gIC8vIHRoZSBvcGVyYXRvciBlc2NhcGUgaGF0Y2ggYFBMVUdJTl9BTExPV19VTlNDQU5ORURgIGlzIG9uICh3aXRob3V0IGl0IHRoZVxuICAvLyBidWlsZCBmYWlscyBgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRWApLiBgZGV0YWlsc2AgY2FycnkgbmFtZS92ZXJzaW9uL2RpZ2VzdC5cbiAgJ3BsdWdpbi5zY2FuLnNraXBwZWQnLFxuICAvLyBGaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHdlcmUgRVhFTVBURUQgZnJvbSB0aGUgcGxhdGZvcm0gZmxvb3IgYnkgYVxuICAvLyBgUExVR0lOX1ZVTE5fV0FJVkVSU2AgZW50cnksIHNvIGEgYnVpbGQgdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBmYWlsZWRcbiAgLy8gUExVR0lOX1ZVTE5fR0FURSB3YXMgYWxsb3dlZCB0aHJvdWdoLiBUaGUgb3RoZXIgaGFsZiBvZiBwbHVnaW4uc2Nhbi5za2lwcGVkOlxuICAvLyBib3RoIGFyZSBvcGVyYXRvciBlc2NhcGUgaGF0Y2hlcyB0aGF0IGNoYW5nZSBhIGdhdGUncyB2ZXJkaWN0LCBhbmQgYSBtZXRyaWNcbiAgLy8gYW5kIGEgbG9nIGxpbmUgYXJlIG5vdCBhIGR1cmFibGUgcmVjb3JkIG9mIG9uZS4gYGRldGFpbHNgIGNhcnJ5XG4gIC8vIG5hbWUvdmVyc2lvbi9kaWdlc3QsIGhvdyBtYW55IGZpbmRpbmdzIHdlcmUgd2FpdmVkIGFuZCB3aGljaCBwYWNrYWdlcy5cbiAgJ3BsdWdpbi52dWxuLndhaXZlZCcsXG4gIC8vIFRoZSBuaWdodGx5IHJlc2NhbiBGTEFHR0VEIGEgc3RvcmVkIHZlcnNpb24gKGl0cyBnYXRlZCBDcml0aWNhbCBmaW5kaW5nc1xuICAvLyBub3cgZXhjZWVkIFBMVUdJTl9WVUxOX01BWF9GSU5ESU5HUyDigJQgbG9va3VwIGFuZCB0aGUgcGlwZWxpbmUncyBvd25lcnMgYXJlXG4gIC8vIHdhcm5lZCBhdCBgZXJyb3JgIHNldmVyaXR5KSwgb3IgQ0xFQVJFRCB0aGF0IGZsYWcuIEJvdGggY2hhbmdlIHdoYXRcbiAgLy8gcmVzb2x1dGlvbiBzYXlzIGFib3V0IGEgdmVyc2lvbiBub2JvZHkgcmVidWlsdCwgb24gbm9ib2R5J3MgcmVxdWVzdCwgc28gdGhlXG4gIC8vIHJlY29yZCBvZiBXSEVOIGFuZCBXSFkgbGl2ZXMgaW4gdGhlIGhhc2gtY2hhaW5lZCBsb2cgcmF0aGVyIHRoYW4gb25seSBpbiBhXG4gIC8vIGNvbHVtbiB0aGUgbmV4dCByZXNjYW4gb3ZlcndyaXRlcy4gYGRldGFpbHNgIGNhcnJ5IGNvdW50cywgdGhlIGdhdGVkXG4gIC8vIGFkdmlzb3J5IGlkcyBhbmQgdGhlIGltYWdlIGRpZ2VzdC5cbiAgJ3BsdWdpbi52dWxuLmZsYWdnZWQnLFxuICAncGx1Z2luLnZ1bG4uY2xlYXJlZCcsXG4gIC8vIFBsdWdpbiBsaWZlY3ljbGUgbXV0YXRpb25zIChhcGkvcGx1Z2luIHJvdXRlIGhhbmRsZXJzKSDigJQgdGhlIGRlc3RydWN0aXZlIC9cbiAgLy8gcHVibGlzaGluZyBzdXJmYWNlIHRoYXQgYnVpbGRzIGFscmVhZHkgYXVkaXQncyBjb3VudGVycGFydDogcmVnaXN0cnkgZGVsZXRlLFxuICAvLyBzb3VyY2UgdXBsb2FkLCBhbmQgZGVwbG95LXRvLWNsdXN0ZXIuIGB0YXJnZXRJZGAgaXMgdGhlIHBsdWdpbiBpZC5cbiAgJ3BsdWdpbi5kZWxldGUnLFxuICAncGx1Z2luLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgcHVyZ2U6IHBlcm1hbmVudCBoYXJkLWRlbGV0ZSBvZiBhIHNvZnQtZGVsZXRlZCBwbHVnaW4gdG9tYnN0b25lIG9uXG4gIC8vIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcCB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLlxuICAncGx1Z2luLnB1cmdlJyxcbiAgJ3BsdWdpbi51cGRhdGUnLFxuICAncGx1Z2luLnVwbG9hZCcsXG4gICdwbHVnaW4uZGVwbG95JyxcbiAgLy8gUGx1Z2luIGJ1bGsgbXV0YXRpb25zIChhcGkvcGx1Z2luIGJ1bGstcGx1Z2luIHJvdXRlKSArIERMUSBwdXJnZSAoZHJvcHMgYWxsXG4gIC8vIGRlYWQtbGV0dGVyZWQgYnVpbGQgam9icywgY3Jvc3Mtb3JnLCBzeXNhZG1pbikuIGBkZXRhaWxzYCBjYXJyaWVzIGNvdW50cy5cbiAgJ3BsdWdpbi5idWxrLnVwZGF0ZScsXG4gICdwbHVnaW4uYnVsay5kZWxldGUnLFxuICAncGx1Z2luLmRscS5wdXJnZScsXG4gIC8vIEJ1aWxkIHJlLXJ1bnMgZnJvbSB0aGUgcXVldWUtdHJpYWdlIHN1cmZhY2U6IHJlLWVucXVldWUgYSBGQUlMRUQgYnVpbGRcbiAgLy8gKGBwbHVnaW4uYnVpbGQucmV0cnlgKSBvciBhIGRlYWQtbGV0dGVyZWQgb25lIChgcGx1Z2luLmRscS5yZXBsYXlgKS4gQm90aFxuICAvLyByZS1ydW4gYW4gaW1hZ2UgYnVpbGQgKyBwbHVnaW4gcGVyc2lzdCBvbiB0aGUgY2FsbGVyJ3MgYXV0aG9yaXR5LCBzbyB0aGV5XG4gIC8vIGFyZSBhdWRpdGVkIG11dGF0aW9uczsgYGFmZmVjdGVkT3JnSWRgIGNhcnJpZXMgdGhlIGpvYidzIG93bmluZyBvcmcuXG4gICdwbHVnaW4uYnVpbGQucmV0cnknLFxuICAncGx1Z2luLmRscS5yZXBsYXknLFxuICAvLyBQaXBlbGluZSBtdXRhdGlvbnMg4oCUIGVtaXR0ZWQgYnkgYXBpL3BpcGVsaW5lJ3Mgcm91dGUgaGFuZGxlcnNcbiAgLy8gKGNyZWF0ZS91cGRhdGUvZGVsZXRlICsgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiB0cmlnZ2VyL2NhbmNlbCkgYW5kXG4gIC8vIHBvc3RlZCB0byBwbGF0Zm9ybSdzIGBQT1NUIC9hdWRpdC9ldmVudHNgIGluZ2VzdC5cbiAgJ3BpcGVsaW5lLmNyZWF0ZScsXG4gICdwaXBlbGluZS51cGRhdGUnLFxuICAncGlwZWxpbmUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgcHVyZ2U6IHBlcm1hbmVudCBoYXJkLWRlbGV0ZSBvZiBhIHNvZnQtZGVsZXRlZCBwaXBlbGluZSAvXG4gIC8vIHBpcGVsaW5lX3RlbXBsYXRlIHRvbWJzdG9uZSBvbiBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXBcbiAgLy8gd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS4gYHRhcmdldElkYCBpcyB0aGUgcHVyZ2VkIGlkLlxuICAncGlwZWxpbmUucHVyZ2UnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnVwZGF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5kZWxldGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucmVzdG9yZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5wdXJnZScsXG4gICdwaXBlbGluZS5leGVjdXRpb24uc3RhcnQnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLmNhbmNlbCcsXG4gIC8vIENvZGVQaXBlbGluZSBBUk4tcmVnaXN0cnkgY29uZmlnIChhcGkvcGlwZWxpbmUgcmVnaXN0cnkgcm91dGUpIOKAlCByZWdpc3RlcmluZyAvXG4gIC8vIGRlcmVnaXN0ZXJpbmcgdGhlIGV4dGVybmFsIENvZGVQaXBlbGluZSB0aGF0IGJhY2tzIGEgcGlwZWxpbmUgKGRlcGxveS1hZmZlY3RpbmcpLlxuICAncGlwZWxpbmUucmVnaXN0cnkucmVnaXN0ZXInLFxuICAncGlwZWxpbmUucmVnaXN0cnkuZGVyZWdpc3RlcicsXG4gIC8vIFF1b3RhIGFkbWluaXN0cmF0aW9uIChhcGkvcXVvdGEpIOKAlCBhIHN1cGVyYWRtaW4gcmVzZXR0aW5nIGFuIG9yZydzIHVzYWdlXG4gIC8vIGNvdW50ZXIgb3IgZWRpdGluZyBpdHMgdGllciBsaW1pdHMuIGBhZmZlY3RlZE9yZ0lkYCBpcyB0aGUgb3JnIGNoYW5nZWQ7XG4gIC8vIGBkZXRhaWxzYCBjYXJyaWVzIHRoZSBxdW90YVR5cGUgKyBvbGQvbmV3IHZhbHVlLlxuICAncXVvdGEucmVzZXQnLFxuICAncXVvdGEubGltaXQudXBkYXRlJyxcbiAgLy8gQSBzdXBlcmFkbWluIGRlbGV0aW5nIGFuIG9yZydzIGVudGlyZSBxdW90YSBkb2N1bWVudC5cbiAgJ3F1b3RhLmRlbGV0ZScsXG4gIC8vIEFuIGFjY291bnQncyBxdW90YSB0aHJlc2hvbGQtbm90aWNlIHNldHRpbmdzIChvcHQtb3V0ICsgdGhlXG4gIC8vIGBxdW90YS50aHJlc2hvbGRgIHdlYmhvb2sgVVJMKSDigJQgd2hlcmUgdXNhZ2Ugd2FybmluZ3MgZ28uXG4gICdxdW90YS5ub3RpY2Vfc2V0dGluZ3MudXBkYXRlJyxcbiAgLy8gQ29tcGxpYW5jZSBhZG1pbmlzdHJhdGlvbiAoYXBpL2NvbXBsaWFuY2UpIOKAlCB0aGUgZW5mb3JjZW1lbnQtcG9zdHVyZSBzdXJmYWNlLlxuICAvLyBBcHByb3ZpbmcvcmV2b2tpbmcgYW4gZXhlbXB0aW9uLCB0b2dnbGluZy9hdXRob3JpbmcvZGVsZXRpbmcgYSBydWxlLFxuICAvLyBhdXRob3JpbmcvZGVsZXRpbmcgYSBwb2xpY3ksIG1hbmFnaW5nIHNjYW4gc2NoZWR1bGVzLCBhcHBseWluZyBhIHRlbXBsYXRlLFxuICAvLyBvciBjYW5jZWxsaW5nIGEgcnVubmluZyBzY2FuLiBgdGFyZ2V0SWRgIGlzIHRoZSBydWxlL3BvbGljeS9leGVtcHRpb24vc2NhbiBpZC5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLmFwcHJvdmUnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmV2b2tlJyxcbiAgLy8gQSBtZW1iZXIgRklMSU5HIGFuIGV4ZW1wdGlvbiByZXF1ZXN0IChzaW5nbGUgb3IgYnVsazsgbWV0YWRhdGEgb25seSwgbmV2ZXJcbiAgLy8gdGhlIHJlYXNvbikgYW5kIGFuIGFkbWluIFJFSkVDVElORyBvbmUg4oCUIHRoZSBvdGhlciBoYWx2ZXMgb2YgdGhlXG4gIC8vIHR3by1wZXJzb24gZGVjaXNpb24gd2hvc2UgYXBwcm92YWwgaXMgcmVjb3JkZWQgYWJvdmUuXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXF1ZXN0JyxcbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLnJlamVjdCcsXG4gICdjb21wbGlhbmNlLnJ1bGUudG9nZ2xlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBoYXJkLWRlbGV0ZSAoUFVSR0UpIG9mIGEgc29mdC1kZWxldGVkIHJ1bGUvcG9saWN5IHRvbWJzdG9uZSDigJRcbiAgLy8gdGhlIGNhbGxlci1pbml0aWF0ZWQgY291bnRlcnBhcnQgdG8gdGhlIHJldGVudGlvbiBzd2VlcCdzIGF1dG8tcHVyZ2UuIERlc3Ryb3lzXG4gIC8vIHRoZSB0b21ic3RvbmUgcGVybWFuZW50bHksIHNvIGl0IGNhcnJpZXMgdGhlIGR1cmFibGUsIHRhbXBlci1ldmlkZW50IHRyYWlsLlxuICAnY29tcGxpYW5jZS5ydWxlLnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnJlc3RvcmUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS50ZW1wbGF0ZS5hcHBseScsXG4gIC8vIExhdW5jaGluZyBhbiBvcmctd2lkZSByZS1ldmFsdWF0aW9uICh0aGUgY291bnRlcnBhcnQgdG8gYC5jYW5jZWxgKSDigJQgaXRcbiAgLy8gcGVyc2lzdHMgYSBzY2FuIGFuZCBjYW4gYmxvY2sgZW50aXRpZXMgdGhhdCBwYXNzZWQgYmVmb3JlLlxuICAnY29tcGxpYW5jZS5zY2FuLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4uY2FuY2VsJyxcbiAgLy8gQSBzY2FuJ3MgdGVybWluYWwgT1VUQ09NRSAoY29tcGxldGVkIOKGkiBzdWNjZXNzIHdpdGggdGhlIHBhc3Mvd2Fybi9ibG9ja1xuICAvLyBjb3VudHMsIGZhaWxlZCDihpIgZmFpbHVyZSkuIFNjaGVkdWxlZCBzY2FucyBhbHNvIHdyaXRlIGBjb21wbGlhbmNlLnNjYW4uY3JlYXRlYFxuICAvLyAoYGRldGFpbHMudHJpZ2dlcmVkQnk6ICdzY2hlZHVsZWQnYCksIGF0dHJpYnV0ZWQgdG8gdGhlIHNjaGVkdWxlJ3MgYXV0aG9yLlxuICAnY29tcGxpYW5jZS5zY2FuLmNvbXBsZXRlJyxcbiAgLy8gUGxhdGZvcm0gb25ib2FyZGluZyBzdWJzY3JpYmluZyBhIG5ldyBvcmcgdG8gZXZlcnkgcHVibGlzaGVkIHJ1bGVcbiAgLy8gKElOQUNUSVZFIHN1YnNjcmlwdGlvbnM7IGBkZXRhaWxzLnN1YnNjcmliZWRgIGlzIHRoZSBjb3VudCkuXG4gICdjb21wbGlhbmNlLnN1YnNjcmlwdGlvbi5hdXRvLXN1YnNjcmliZScsXG4gIC8vIFBlci1vcmcgY29tcGxpYW5jZSBub3RpZmljYXRpb24gc2V0dGluZ3M6IHJlY2lwaWVudHMgKyB0aGUgb3V0Ym91bmQgd2ViaG9va1xuICAvLyBVUkwvc2VjcmV0LiBCZWFyZXItZXF1aXZhbGVudCBjb25maWcgdGhhdCByZWRpcmVjdHMgdmlvbGF0aW9uIG5vdGljZXMsIHNvIGFcbiAgLy8gY2hhbmdlIGNhcnJpZXMgdGhlIGR1cmFibGUgdHJhaWwgKG5ldmVyIHRoZSBzZWNyZXQgaXRzZWxmKS5cbiAgJ2NvbXBsaWFuY2Uubm90aWZpY2F0aW9uLXByZWZlcmVuY2UudXBkYXRlJyxcbiAgLy8gSW1hZ2UtcmVnaXN0cnkgZGVzdHJ1Y3RpdmUgb3BzIChhcGkvaW1hZ2UtcmVnaXN0cnkpIOKAlCBnYXJiYWdlLWNvbGxlY3Rpb25cbiAgLy8gc3dlZXBzIGFuZCBleHBsaWNpdCBpbWFnZS90YWcgZGVsZXRlcy5cbiAgJ3JlZ2lzdHJ5LmdjJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmRlbGV0ZScsXG4gIC8vIENyb3NzLXJlcG8gdGFnL2ltYWdlIGNvcHkgKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9hcGkvaW1hZ2VzL2NvcHkpLiBBXG4gIC8vIGNyb3NzLXRlbmFudCBjb3B5IG1vdmVzIGRhdGEgYWNyb3NzIGN1c3RvbWVyIGJvdW5kYXJpZXMsIHNvIGl0IG5lZWRzIHRoZVxuICAvLyBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbCDigJQgbm90IGp1c3QgdGhlIExva2kgb3BlcmF0b3IgbGluZS5cbiAgJ3JlZ2lzdHJ5LmltYWdlLmNvcHknLFxuICAvLyBBIHBsdWdpbiBpbWFnZSBzaWduZWQgKyBTQk9NLWF0dGVzdGVkIGJ5IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleVxuICAvLyAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2ludGVybmFsL3BsdWdpbi1zaWduYXR1cmVzLCBjYWxsZWQgYnkgdGhlIHBsdWdpblxuICAvLyBidWlsZCB3b3JrZXIpLiBUaGUga2V5IGlzIHdoYXQgc3ludGggdHJ1c3RzLCBzbyBldmVyeSB1c2UgaXMgb24gdGhlIHRyYWlsLlxuICAncmVnaXN0cnkuaW1hZ2Uuc2lnbicsXG4gIC8vIFRoZSBEb2NrZXIgdG9rZW4gZW5kcG9pbnQgbWludGluZyBhIHJlZ2lzdHJ5IHRva2VuIHRoYXQgR1JBTlRTIGFjY2Vzc1xuICAvLyAoYGRldGFpbHMuZ3JhbnRlZGA6IHJlcG8gKyBhY3Rpb25zOyB0aGUgc2NvcGUtbGVzcyBgZG9ja2VyIGxvZ2luYCBwcm9iZSBpc1xuICAvLyBub3QgcmVjb3JkZWQpIOKAlCBhbmQsIGFzIG91dGNvbWUgZmFpbHVyZSwgYSByZWZ1c2VkIGNyZWRlbnRpYWwgKGhhc2hlZFxuICAvLyB1c2VybmFtZSwgY3JlZGVudGlhbCBraW5kIG9ubHkpLlxuICAncmVnaXN0cnkudG9rZW4uaXNzdWUnLFxuICAvLyBBIHB1c2ggY3JlZGVudGlhbCBtaW50ZWQgZm9yIG9uZSBhbm9ueW1vdXMgc3VibWlzc2lvbidzXG4gIC8vIGBxdWFyYW50aW5lLzxzdWJtaXNzaW9uSWQ+YCByZXBvIChleHBpcnkgKyBUVEwsIG5ldmVyIHRoZSBzZWNyZXQpLlxuICAncmVnaXN0cnkucXVhcmFudGluZS5jcmVkZW50aWFsLm1pbnQnLFxuICAvLyBNZXNzYWdpbmcgKGFwaS9tZXNzYWdlKSDigJQgYWRtaW4gQlJPQURDQVNUIGFubm91bmNlbWVudHMgKyBkZXN0cnVjdGl2ZVxuICAvLyBkZWxldGVzLiAxOjEgdXNlciBtZXNzYWdlcyBhcmUgaW50ZW50aW9uYWxseSBOT1QgYXVkaXRlZCAobm9pc2UgKyB0aGV5IHdvdWxkXG4gIC8vIHB1bGwgcHJpdmF0ZSBjb250ZW50IGludG8gdGhlIHRyYWlsKS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHlcbiAgLy8gKHN1YmplY3QvdHlwZS9zY29wZSksIE5FVkVSIG1lc3NhZ2UgYm9keSBjb250ZW50LlxuICAnbWVzc2FnZS5hbm5vdW5jZW1lbnQuY3JlYXRlJyxcbiAgJ21lc3NhZ2UuZGVsZXRlJyxcbiAgLy8gQnVsayBcInJlbW92ZSBmcm9tIG15IGluYm94XCI6IGEgcGVyLXBhcnRpY2lwYW50IFZJRVcgY2hhbmdlLCBub3QgYSBkZWxldGUg4oCUXG4gIC8vIHRoZSByb3csIHRoZSBvdGhlciBwYXJ0aWNpcGFudHMgYW5kIHRoZSByZXRlbnRpb24gc3dlZXAgYXJlIHVudG91Y2hlZC4gT25lXG4gIC8vIHJvdyBwZXIgYnVsayBjYWxsIHdpdGggYGRldGFpbHMuY291bnRgIGFuZCB0aGUgZmlsdGVyIHNjb3BlLCBuZXZlciBwZXJcbiAgLy8gbWVzc2FnZSBhbmQgbmV2ZXIgdGhlIHNlYXJjaCB0ZXh0LlxuICAnbWVzc2FnZS5oaWRlJyxcbiAgLy8gVGhlIHVuZG8gb2YgYG1lc3NhZ2UuaGlkZWA6IHJvd3MgcHV0IGJhY2sgaW50byB0aGlzIG9yZydzIGluYm94LiBTYW1lXG4gIC8vIHNoYXBlIOKAlCBvbmUgcm93IHBlciBjYWxsIHdpdGggYGRldGFpbHMuY291bnRgLCBuZXZlciB0aGUgaWRzLlxuICAnbWVzc2FnZS51bmhpZGUnLFxuICAnbWVzc2FnZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBQVVJHRSAocGVybWFuZW50IGhhcmQtZGVsZXRlKSBvZiBhbiBhbHJlYWR5LXNvZnQtZGVsZXRlZFxuICAvLyBtZXNzYWdlIHRvbWJzdG9uZSDigJQgdGhlIGRlc3RydWN0aXZlIGZpbmFsaXplciB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkXG4gIC8vIG90aGVyd2lzZSBwZXJmb3JtIGF0IHRoZSBwdXJnZSBkZWFkbGluZS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHkuXG4gICdtZXNzYWdlLnB1cmdlJyxcbiAgLy8gQW4gYXV0aG9yJ3MgZWRpdCBvZiBhIHNlbnQgbWVzc2FnZSAoYW5kIHJlZnVzZWQgYXR0ZW1wdHMsIGFzIGZhaWx1cmVzKS5cbiAgLy8gYGRldGFpbHNgIGNhcnJ5IHRoZSBuZXcgYm9keSdzIExFTkdUSCBvbmx5IOKAlCBuZWl0aGVyIHNpZGUgb2YgdGhlIGVkaXQuXG4gICdtZXNzYWdlLnVwZGF0ZScsXG4gIC8vIEEgbWVzc2FnZSBhdHRhY2htZW50IHN0b3JlZCAoZ2VuZXJhbCBvciBzdXBwb3J0IG1vdW50LCBgZGV0YWlscy5zdXJmYWNlYCkuXG4gIC8vIFR5cGUgKyBzaXplIG9ubHkg4oCUIG5ldmVyIHRoZSBieXRlcywgYW5kIG5vdCB0aGUgdXNlci1jaG9zZW4gZmlsZW5hbWUuXG4gICdtZXNzYWdlLmF0dGFjaG1lbnQudXBsb2FkJyxcbiAgLy8gQSBTWVNURU0gbm90aWZpY2F0aW9uIGRyb3BwZWQgaW50byBhbiBvcmcncyBpbmJveCBieSBhbiBpbnRlcm5hbCBzZXJ2aWNlXG4gIC8vIChQT1NUIC9tZXNzYWdlcy9pbnRlcm5hbC9ub3RpZnkpOyBgZGV0YWlscy5jYWxsZXJgIG5hbWVzIHRoZSBzZXJ2aWNlLlxuICAnbWVzc2FnZS5ub3RpZnkuaW50ZXJuYWwnLFxuICAvLyBUaGUgcGxhdGZvcm0gb3JnLWRlbGV0ZSBjYXNjYWRlIHJlY2xhaW1pbmcgYW4gb3JnJ3MgYXR0YWNobWVudCBCTE9CUyDigJRcbiAgLy8gYGRldGFpbHMuYmxvYnNEZWxldGVkYCwgb3IgYSBmYWlsdXJlIHJvdyB3aGVuIHRoZSByZWNsYWltIGRpZCBub3QgY29tcGxldGUuXG4gICdtZXNzYWdlLm9yZy5wdXJnZScsXG4gIC8vIFN1cHBvcnQgY2FzZXMgKGFwaS9tZXNzYWdlKS4gRGlzdGluY3QgZnJvbSB0aGUgYG1lc3NhZ2UuKmAgZmFtaWx5IGFib3ZlXG4gIC8vIGJlY2F1c2UgYSBjYXNlIGlzIG5vdCBhbiBvcmRpbmFyeSBtZXNzYWdlOiBpdCBjYXJyaWVzIGEgcmVzcG9uc2UtdGltZVxuICAvLyBjb21taXRtZW50LCBzbyBXSE8gcmFpc2VkIGl0IGFuZCBXSEVOIHdlIGZpcnN0IGFuc3dlcmVkIGFyZSB0aGUgZmFjdHMgYVxuICAvLyBkaXNwdXRlIHR1cm5zIG9uLiBgZGV0YWlsc2AgY2FycnkgdGhlIGNhc2UgbnVtYmVyLCBsZXZlbCBhbmQgc2V2ZXJpdHkg4oCUXG4gIC8vIG1ldGFkYXRhIG9ubHksIG5ldmVyIHRoZSBib2R5IG9mIHdoYXQgYSBjdXN0b21lciB3cm90ZS5cbiAgLy9cbiAgLy8gVHdvIG9mIHRoZSBuaW5lIHBsYW5uZWQgc3VwcG9ydCBhY3Rpb25zIGFyZSBoZXJlLCBhbmQgb25seSB0d286IHRoZXNlIGFyZVxuICAvLyB0aGUgb25lcyB3aXRoIHJlYWwgZW1pdHRlcnMgdG9kYXkuIFRoZSByZXN0IChgc3RhdHVzYCwgYHNldmVyaXR5YCxcbiAgLy8gYGFzc2lnbmAsIGB0cmFuc2ZlcmAsIGBub3RlYCwgYHJlYWRgKSBsYW5kIFdJVEggdGhlIHJvdXRlcyB0aGF0IGVtaXQgdGhlbSDigJRcbiAgLy8gYSBkZWNsYXJlZCBhY3Rpb24gbm90aGluZyBlbWl0cyBpcyBkZWFkIHZvY2FidWxhcnksIGFuZCB0aGUgcGFyaXR5IHRlc3RcbiAgLy8gd291bGQgdGhlbiBmb3JjZSBhIGRvY3Mgcm93IGRlc2NyaWJpbmcgYW4gZXZlbnQgdGhhdCBuZXZlciBmaXJlcy5cbiAgLy9cbiAgLy8gYHN1cHBvcnQuY2FzZS5yZWFkYCB3aWxsIG1hdHRlciBtb3N0IG9mIGFsbCB3aGVuIGl0IGFycml2ZXM6IGl0IGlzIHRoZSBvbmx5XG4gIC8vIHJlY29yZCB0aGF0IHNvbWVvbmUgYXQgdGhlIHZlbmRvciBvcGVuZWQgYSBjdXN0b21lcidzIGNhc2UuXG4gICdzdXBwb3J0LmNhc2Uub3BlbicsXG4gICdzdXBwb3J0LmNhc2UucmVwbHknLFxuICAvLyBUaGUgd29ya2Zsb3cgbXV0YXRpb25zLiBFYWNoIGlzIGF1ZGl0ZWQgYmVjYXVzZSBlYWNoIG1vdmVzIGEgY2FzZSdzXG4gIC8vIHJlbGF0aW9uc2hpcCB0byBpdHMgcmVzcG9uc2UgY29tbWl0bWVudDogc3RhdHVzIHN0b3BzIG9yIHJlc3RhcnRzIHRoZVxuICAvLyBjbG9jaywgc2V2ZXJpdHkgY2hhbmdlcyB3aGljaCB0YXJnZXQgYXBwbGllcywgYW5kIHRoZSB0d28gb3duZXJzaGlwXG4gIC8vIGFjdGlvbnMgZGVjaWRlIFdITyBpcyBhY2NvdW50YWJsZSBmb3IgbWVldGluZyBpdC4gQSBzaWxlbnQgY2hhbmdlIG9mIG93bmVyXG4gIC8vIGlzIGhvdyBhY2NvdW50YWJpbGl0eSBmb3IgYSBtaXNzZWQgdGFyZ2V0IGRpc2FwcGVhcnMuXG4gICdzdXBwb3J0LmNhc2Uuc3RhdHVzJyxcbiAgJ3N1cHBvcnQuY2FzZS5zZXZlcml0eScsXG4gICdzdXBwb3J0LmNhc2UuYXNzaWduJyxcbiAgJ3N1cHBvcnQuY2FzZS50cmFuc2ZlcicsXG4gIC8vIE9OLUNBTEwuIFRoZSBwcm92aWRlciBvd25zIHRoZSByb3RhLCB0aGUgZXNjYWxhdGlvbiBhbmQgdGhlIGNvbnRhY3RcbiAgLy8gbWV0aG9kczsgd2hhdCBpdCBjYW5ub3Qgb3duIGlzIGFuIGF1ZGl0YWJsZSBhbnN3ZXIgdG8gXCJ3aG8gcGlja2VkIHRoaXMgdXBcbiAgLy8gYXQgMDM6MTRcIi4gQSBjbGljayBvbiBhIGxpbmsgaW4gdGhlaXIgVUkgaXMgbm90IGFuIGlkZW50aXR5IHRoaXMgc3lzdGVtIGNhblxuICAvLyBhdHRlc3QgdG8sIHNvIHRoZWlyIGluY2lkZW50IHN0YXRlIGNoYW5nZSBpcyByZWxheWVkIGhlcmUgYW5kIHJlY29yZGVkXG4gIC8vIGFnYWluc3QgdGhlIGFnZW50IHRoZXkgbmFtZS4gVGhlIGhhc2ggY2hhaW4gaXMgdGhlIHBvaW50OiBhIHBvc3QtaW5jaWRlbnRcbiAgLy8gcmV2aWV3IG5lZWRzIHRoZSBhY2sgdG8gYmUgZXZpZGVuY2UgcmF0aGVyIHRoYW4gYSBzY3JlZW5zaG90LlxuICAvL1xuICAvLyBgZXNjYWxhdGVkYCBpcyBhdWRpdGVkIHNlcGFyYXRlbHkgYmVjYXVzZSBpdCBpcyB0aGUgcmVjb3JkIHRoYXQgdGhlIEZJUlNUXG4gIC8vIHJlc3BvbmRlciBkaWQgbm90IGFuc3dlciDigJQgdGhlIGZhY3QgYSByb3RhIGlzIGFkanVzdGVkIG9uLCBhbmQgdGhlIG9uZSBtb3N0XG4gIC8vIGxpa2VseSB0byBiZSBkaXNwdXRlZCBsYXRlci5cbiAgJ3N1cHBvcnQub25jYWxsLmFja25vd2xlZGdlZCcsXG4gICdzdXBwb3J0Lm9uY2FsbC5lc2NhbGF0ZWQnLFxuICAvLyBUaGUgdGVzdCBwYWdlLiBBdWRpdGVkIGJlY2F1c2UgaXQgUklOR1MgQSBQSE9ORTogd2hvZXZlciBpdCB3YWtlcyBpc1xuICAvLyBlbnRpdGxlZCB0byBhIHJlY29yZCBvZiB3aG8gY2F1c2VkIHRoYXQsIGF0IHdoYXRldmVyIGhvdXIgaXQgd2FzLlxuICAnc3VwcG9ydC5vbmNhbGwudGVzdCcsXG4gIC8vIFRoZSBwZXItY2FzZSBzd2VlcCBwYWdpbmcgdGhlIHJvdGEgZm9yIGEgcHJlbWl1bSBjYXNlIG5lYXJpbmcgaXRzIHRhcmdldC5cbiAgLy8gUmVjb3JkZWQgb25jZSwgb24gdGhlIHRpY2sgdGhlIGNhc2UgRU5URVJFRCB0aGUgd2luZG93IOKAlCB0aGUgc3dlZXAgcmUtc2VuZHNcbiAgLy8gdGhlIHBhZ2UgZXZlcnkgdGljaywgYW5kIHR3ZW50eS1mb3VyIHJvd3MgZm9yIG9uZSBwYWdlIHdvdWxkIGJlIG5vaXNlLlxuICAnc3VwcG9ydC5vbmNhbGwucGFnZWQnLFxuICAvLyBUaGUgdHdvIENPTlRBQ1QgYWN0aW9ucyAocGxhdGZvcm0pLiBOb3QgY2FzZSBldmVudHMg4oCUIGVudGl0bGVtZW50IGV2ZW50czpcbiAgLy8gZWFjaCBvbmUgY2hhbmdlcyB3aG8gaW4gYW4gb3JnIGlzIGFibGUgdG8gY29tbWl0IHVzIHRvIGEgcmVzcG9uc2UgdGFyZ2V0IGF0XG4gIC8vIGFsbCwgYW5kIGRlc2lnbmF0aW5nIHNwZW5kcyBhIHNsb3Qgb2YgYSBQQUlELCBhY2NvdW50LXBvb2xlZCBhbGxvd2FuY2UuIFRoZVxuICAvLyByZXZva2UgY2FycmllcyB0aGUgY291bnQgb2Ygb3BlbiBjYXNlcyBpdCBsZWZ0IGJlaGluZCwgc28gYW4gb3JwaGFuZWQgY2FzZVxuICAvLyBpcyBhIHJlY29yZGVkIGZhY3QgcmF0aGVyIHRoYW4gc29tZXRoaW5nIGRpc2NvdmVyZWQgbGF0ZXIuXG4gICdzdXBwb3J0LmNvbnRhY3QuZGVzaWduYXRlJyxcbiAgJ3N1cHBvcnQuY29udGFjdC5yZXZva2UnLFxuICAvLyBUaGUgcHJlbWl1bSBVUEdSQURFLCBib3RoIGRpcmVjdGlvbnMuIFNlcGFyYXRlIGFjdGlvbnMgZnJvbSBkZXNpZ25hdGlvblxuICAvLyBiZWNhdXNlIHRoZXkgYW5zd2VyIHRvIGEgZGlmZmVyZW50IGNhcCBhbmQgY2FycnkgYSBkaWZmZXJlbnQgZmFjdDogd2hvIHdhc1xuICAvLyBlbnRpdGxlZCB0byAyNHg3IGNvdmVyYWdlLCBhbmQgd2hlbi4gQSByZXNwb25zZS10aW1lIGRpc3B1dGUgb3ZlciBhblxuICAvLyBvdXQtb2YtaG91cnMgY2FzZSB0dXJucyBvbiBleGFjdGx5IHRoYXQuXG4gICdzdXBwb3J0LmNvbnRhY3QudXBncmFkZScsXG4gICdzdXBwb3J0LmNvbnRhY3QuZG93bmdyYWRlJyxcbiAgLy8gU3RhZmYgbm90ZXMgb24gYSBjYXNlLiBBdWRpdGVkIGJlY2F1c2UgYSBub3RlIGlzIHRoZSB2ZW5kb3IncyBpbnRlcm5hbFxuICAvLyBhc3Nlc3NtZW50IG9mIGEgY3VzdG9tZXIgYW5kIHRoZSBvbmx5IHN1cmZhY2Ugb24gYSBjYXNlIHRoZSB0ZW5hbnQgbXVzdFxuICAvLyBuZXZlciBzZWU7IHRoZSB0cmFpbCBjYXJyaWVzIE1FVEFEQVRBIE9OTFkgKGNhc2UgbnVtYmVyLCBub3RlIGlkLCBsZW5ndGgpXG4gIC8vIGFuZCBuZXZlciB0aGUgYm9keSwgc2luY2UgdGhlIGNlbnRyYWwgdHJhaWwgaXMgcmVhZCBmYXIgbW9yZSB3aWRlbHkgdGhhblxuICAvLyB0aGUgc3VwcG9ydCBxdWV1ZSBpcy5cbiAgJ3N1cHBvcnQuY2FzZS5ub3RlJyxcbiAgLy8gVGhlIGNhbm5lZC1yZXBseSBsaWJyYXJ5LiBPTkUgYWN0aW9uIGZvciBjcmVhdGUvZWRpdC9yZXRpcmUgcmF0aGVyIHRoYW5cbiAgLy8gdGhyZWUsIGJlY2F1c2UgdGhlIHRyYWlsJ3MgcXVlc3Rpb24gaGVyZSBpcyBcIndobyBjaGFuZ2VkIHRoZSB3b3JkaW5nIHRoZVxuICAvLyBkZXNrIHNlbmRzIGN1c3RvbWVyc1wiLCBub3Qgd2hpY2ggdmVyYiB0aGV5IHVzZWQg4oCUIGBkZXRhaWxzYCBjYXJyaWVzIHRoYXQuXG4gIC8vIFN5c3RlbS13aWRlIHJhdGhlciB0aGFuIHBlci10ZW5hbnQsIHNvIHRoZXNlIHJvd3MgbmFtZSBubyBhZmZlY3RlZCBvcmcuXG4gICdzdXBwb3J0LmNhbm5lZC53cml0ZScsXG4gIC8vIEJpbGxpbmcgKGFwaS9iaWxsaW5nKSDigJQgc3Vic2NyaXB0aW9uICsgZW50aXRsZW1lbnQgbXV0YXRpb25zLCBtaXJyb3JlZCB0byB0aGVcbiAgLy8gY2VudHJhbCBhdWRpdCB0cmFpbCAodGhlc2UgYWxzbyB3cml0ZSB0byB0aGUgc2VydmljZS1sb2NhbCBiaWxsaW5nX2V2ZW50c1xuICAvLyBjb2xsZWN0aW9uKS4gYGRldGFpbHNgIGNhcnJ5IHBsYW4vdGllci9hZGRvbiBpZHMgb25seSDigJQgbmV2ZXIgY2FyZC9wYXltZW50XG4gIC8vIHNlY3JldHMgb3IgYW4gQVdTIGFjY291bnQgaWQuXG4gIC8vIFN1YnNjcmlwdGlvbiBsaWZlY3ljbGUgYSBDVVNUT01FUiBkcml2ZXMgKHRoZSBhZG1pbiBjb3VudGVycGFydCBpc1xuICAvLyBgYmlsbGluZy50aWVyLm92ZXJyaWRlYCk6IHNlbGYtc2VydmUgY3JlYXRlIChkaXJlY3Qgb3IgTWFya2V0cGxhY2UgY2xhaW0pLFxuICAvLyBwbGFuL2ludGVydmFsIGNoYW5nZSwgY2FuY2VsLWF0LXBlcmlvZC1lbmQsIHVuZG8tY2FuY2VsLCBjYXNjYWRlIGRlbGV0ZS5cbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24ucmVhY3RpdmF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jYW5jZWwnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uZGVsZXRlJyxcbiAgJ2JpbGxpbmcudGllci5vdmVycmlkZScsXG4gIC8vIEEgTkVHT1RJQVRFRCBzdXBwb3J0IHNpemUgZmxvb3IgcmVwbGFjaW5nIHRoZSBjb21wdXRlZCByYW1wLiBTeXN0ZW0tb3JnXG4gIC8vIG9ubHksIGFuZCBhdWRpdGVkIHdpdGggdGhlIGFncmVlZCBQUklDRSBhbmQgdGhlIGFncmVlZCBTRUFUIENPVU5UIHRvZ2V0aGVyOlxuICAvLyBhIGRpc3B1dGUgYWJvdXQgd2hhdCB3YXMgc2lnbmVkIGZvciB0dXJucyBvbiB0aGF0IHBhaXIsIGFuZCB0aGUgcHJpY2UgYWxvbmVcbiAgLy8gY2Fubm90IGFuc3dlciBcImF0IHdoYXQgc2NhbGVcIi5cbiAgJ2JpbGxpbmcuc3VwcG9ydC1mbG9vci5vdmVycmlkZScsXG4gIC8vIEEgR1JBTlRFRCBvbmUtdGltZSBzdXBwb3J0IGluY2lkZW50IOKAlCBhIGNvbW1lcmNpYWwgY29uY2Vzc2lvbiwgbm90IGEgc2FsZS5cbiAgLy8gVGhlcmUgaXMgZGVsaWJlcmF0ZWx5IG5vIHB1cmNoYXNlIHBhdGg6IG1vbnRobHkgc3VwcG9ydCBjYW5jZWxzIGZyZWVseSwgc29cbiAgLy8gYW4gaW5jaWRlbnQgcHJpY2VkIGFib3ZlIGEgbW9udGggaXMgZG9taW5hdGVkIGFuZCBvbmUgYmVsb3cgaXQgbG9zZXMgbW9uZXkuXG4gIC8vIFRoZSByb3cgY2FycmllcyB0aGUgY291bnQgYW5kIHRoZSByZXN1bHRpbmcgYmFsYW5jZSwgd2hpY2ggaXMgd2hhdCBhIGxhdGVyXG4gIC8vIHJldmlldyBvZiBcIndobyBnYXZlIHdoYXQgYXdheVwiIG5lZWRzLlxuICAnYmlsbGluZy5zdXBwb3J0LWluY2lkZW50LmdyYW50JyxcbiAgLy8gT3BlcmF0b3Itb25seSByZXNlZWQgb2YgdGhlIGludm9pY2UgbGVkZ2VyIGZyb20gdGhlIHBheW1lbnQgcHJvdmlkZXInc1xuICAvLyBoaXN0b3J5IChQT1NUIC9iaWxsaW5nL2FkbWluL2JhY2tmaWxsKSDigJQgbXV0YXRlcyBmaW5hbmNlIGRhdGEgZmxlZXQtd2lkZS5cbiAgJ2JpbGxpbmcuYWRkb24uYWRkJyxcbiAgJ2JpbGxpbmcuYWRkb24ucmVtb3ZlJyxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCByZW1vdmFsIG9mIGEgdGllci1pbmNsdWRlZCBhZGQtb24gb24gYSBwbGFuIHVwZ3JhZGUgKHRoZVxuICAvLyBhY2NvdW50J3MgbmV3IHRpZXIgbm93IGJ1bmRsZXMgdGhlIGZlYXR1cmUpIOKAlCBkaXN0aW5jdCBmcm9tIGEgdXNlci1pbml0aWF0ZWRcbiAgLy8gYHJlbW92ZWAgc28gZmluYW5jZSBjYW4gdGVsbCBhbiBhdXRvLXBydW5lIGZyb20gYSBjdXN0b21lciBhY3Rpb24uXG4gICdiaWxsaW5nLmFkZG9uLnBydW5lJyxcbiAgLy8gRGlzY291bnRzIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgbWludC9pc3N1ZS9hcHBseS9yZW1vdmUvcmV2b2tlIG9mIGFcbiAgLy8gcHJpY2UgY291cG9uIG9yIHVzYWdlIGNyZWRpdC4gYGRldGFpbHNgIGNhcnJ5IHRoZSBkaXNjb3VudCBpZCArIGtpbmQvdmFsdWVcbiAgLy8gb25seSwgbmV2ZXIgdGhlIG9wYXF1ZSB0b2tlbiBvciBzaWduaW5nIGtleS5cbiAgJ2JpbGxpbmcuZGlzY291bnQuZ2VuZXJhdGUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5pc3N1ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LmFwcGx5JyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmVtb3ZlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmV2b2tlJyxcbiAgLy8gQ2FtcGFpZ25zIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgdGhlIGlkZW50aXR5IGEgc2V0IG9mIGRpc2NvdW50IGNvZGVzXG4gIC8vIGJlbG9uZ3MgdG8sIGNhcnJ5aW5nIHRoZSBidWRnZXQsIHdpbmRvdyBhbmQgb25lLXBlci1hY2NvdW50IHJ1bGUuIEF1dGhvcmluZ1xuICAvLyBvbmUgZGVjaWRlcyBob3cgbXVjaCB0aGUgYnVzaW5lc3MgbWF5IGdpdmUgYXdheSwgc28gZWFjaCBjaGFuZ2UgaXMgYXVkaXRlZC5cbiAgJ2JpbGxpbmcuY2FtcGFpZ24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuY2FtcGFpZ24udXBkYXRlJyxcbiAgJ2JpbGxpbmcuY2FtcGFpZ24uZW5kJyxcbiAgLy8gUHJvbW90aW9ucyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCNwcm9tb3Rpb25zKSDigJQgcnVsZS1kcml2ZW4gYXV0by1ncmFudFxuICAvLyBjYW1wYWlnbnMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgcHJvbW90aW9uIGlkICsgY2VudHMvZXZlbnQgb25seS5cbiAgJ2JpbGxpbmcucHJvbW90aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24ucmV2b2tlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmdyYW50JyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmFjdGl2YXRlJyxcbiAgLy8gRXhwYW5zaW9uIE9GRkVSUyAoZG9jcy9wbGFucy9zYWxlcy1hZ2VudC5tZCkuIEFuIGF1dG9tYXRlZCBncmFudGVyIG5lZWRzIGl0c1xuICAvLyBvd24gdHJhaWw6IGBkZWNsaW5lZGAgYW5kIGBkaXNtaXNzZWRgIGFyZSB0aGUgYWNjb3VudCdzIG93biBhbnN3ZXJzIChhbmQgdGhlXG4gIC8vIHBhaXIgRDYncyBsZW5ndGhlbmVkIHF1aWV0IHdpbmRvdyBkZXBlbmRzIG9uIOKAlCBcIm5ldmVyIHNhdyBpdFwiIGFuZCBcInNhaWQgbm9cIlxuICAvLyBtdXN0IG5vdCBiZSB0aGUgc2FtZSByb3cpOyBgZXhjbHVzaW9uLnNldGAvYGNsZWFyZWRgIGFyZSB0aGUgb3BlcmF0b3IgdmV0byxcbiAgLy8gd2hpY2ggaXMgdGhlIHByaWNlIG9mIHNoaXBwaW5nIHRoZSBmZWF0dXJlIGF0IGFsbCBhbmQgdGhlcmVmb3JlIGhhcyB0byBiZVxuICAvLyBhdHRyaWJ1dGFibGU7IGB0cmlnZ2VyYCBpcyBhIGh1bWFuIGFza2luZyBmb3IgYW4gb2ZmZXIgbm93LCByZWNvcmRlZCBzbyBhXG4gIC8vIG1hbnVhbCBvZmZlciBpcyBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhZ2VudCBvbmUgaW4gdGhlIG91dGNvbWUgbG9nLlxuICAvLyBUaGUgYWdlbnQncyBPV04gd29yaywgdW5kZXIgaXRzIG93biBhY3RvciAoRDE0IOKAlCBgT0ZGRVJTX0FHRU5UX0FDVE9SX0lEYCkuXG4gIC8vIGBzZW50YCBpcyB3aGF0IG1ha2VzIFwid2h5IGRpZCB0aGlzIGFjY291bnQgZ2V0IHRoaXM/XCIgYW5zd2VyYWJsZSBmcm9tIHRoZVxuICAvLyBjZW50cmFsIHRyYWlsIHJhdGhlciB0aGFuIG9ubHkgZnJvbSB0aGUgc2VydmljZSdzIG93biBjb2xsZWN0aW9uLCBhbmRcbiAgLy8gYHdpdGhkcmF3bmAgaXMgdGhlIHJlY2FsbCBhbiBvcGVyYXRvciByZWFjaGVzIGZvciBvbiB0aGUgbW9ybmluZyBhIHJ1bGVcbiAgLy8gdHVybnMgb3V0IHRvIGJlIHdyb25nIOKAlCBib3RoIGNhcnJ5IHRoZSByYXRpb25hbGUgb3IgdGhlIHdpbmRvdywgbmV2ZXIgY29weS5cbiAgJ2JpbGxpbmcub2ZmZXIuc2VudCcsXG4gICdiaWxsaW5nLm9mZmVyLndpdGhkcmF3bicsXG4gICdiaWxsaW5nLm9mZmVyLmRlY2xpbmVkJyxcbiAgJ2JpbGxpbmcub2ZmZXIuZGlzbWlzc2VkJyxcbiAgJ2JpbGxpbmcub2ZmZXIuZXhjbHVzaW9uLnNldCcsXG4gICdiaWxsaW5nLm9mZmVyLmV4Y2x1c2lvbi5jbGVhcmVkJyxcbiAgJ2JpbGxpbmcub2ZmZXIudHJpZ2dlcicsXG4gIC8vIFVzYWdlLWNyZWRpdCByZWFsaXphdGlvbiDigJQgYSBjdXN0b21lci9jb21wbGlhbmNlLXZpc2libGUgcmVjb3JkIG9mIGNyZWRpdFxuICAvLyBtb3ZlbWVudDogYGNvbnN1bWVkYCAoTWFya2V0cGxhY2UgbWV0ZXJlZCBkcmF3ZG93biksIGBleGhhdXN0ZWRgIChiYWxhbmNlIGhpdFxuICAvLyB6ZXJvKSwgYW5kIGEgY29tYm8gZW5kaW5nLiBgZGV0YWlsc2AgY2FycnkgY2VudHMvaWRzIG9ubHksIG5vIHBheW1lbnQgc2VjcmV0cy5cbiAgJ2JpbGxpbmcuY3JlZGl0LmNvbnN1bWVkJyxcbiAgJ2JpbGxpbmcuY3JlZGl0LmV4aGF1c3RlZCcsXG4gICdiaWxsaW5nLmNvbWJvLmV4cGlyZWQnLFxuICAvLyBSZXBvcnRpbmcgKGFwaS9yZXBvcnRpbmcpIOKAlCB0aGUgdGhyZWUgcmVwb3J0aW5nIG11dGF0aW9ucyB3aG9zZSBlZmZlY3RcbiAgLy8gb3V0bGl2ZXMgYSByZXF1ZXN0IGxvZzogdGhlIHBlci1vcmcgY29ycmVsYXRpb24td2luZG93IGNvbmZpZyB3cml0ZSwgYVxuICAvLyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciAoaXQgbW92ZXMgdGhlIG9yZydzIERPUkEgQ0ZSL01UVFIpLCBhbmQgdGhlXG4gIC8vIGluYm91bmQgYmlsbGluZ+KGknJlcG9ydGluZyByZXRlbnRpb24tZW50aXRsZW1lbnQgc3luYyAoYSByZXRlbnRpb24gY3V0IGlzIGFcbiAgLy8gZGF0YS1kZXN0cm95aW5nIGNoYW5nZSBhcHBsaWVkIGJ5IHRoZSBuZXh0IHN3ZWVwKS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyBzZXR0aW5ncy9vdXRjb21lIHZhbHVlcyBvbmx5LlxuICAncmVwb3J0aW5nLnNldHRpbmdzLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcuZGVwbG95bWVudC5vdXRjb21lJyxcbiAgJ3JlcG9ydGluZy5yZXRlbnRpb24uc3luYycsXG4gIC8vIFN0YWtlaG9sZGVyIHJlcG9ydHMg4oCUIHRoZSBhZGQtb24ncyBhdXRob3JpbmcgYW5kIFBVQkxJU0hJTkcgc3VyZmFjZS4gUHVibGlzaGluZ1xuICAvLyBpcyB0aGUgbW9tZW50IGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnMgbGVhdmUgdGhlIHBsYXRmb3JtLCBzbyB0aGUgd2hvbGVcbiAgLy8gb3V0d2FyZCBwYXRoIGlzIGF1ZGl0YWJsZTogd2hpY2ggcmVwb3J0LCB3aGljaCBwZXJpb2QncyBmcm96ZW4gc25hcHNob3QsXG4gIC8vIHdoaWNoIHZlcnNpb24sIGFuZCB3aG8gbGV0IGl0IG91dC4gYGxpbmsuY3JlYXRlZGAgLyBgbGluay5yZXZva2VkYCBjb3ZlciB0aGVcbiAgLy8gVVJMcyB0aGF0IGxldCBzb21lb25lIHdpdGhvdXQgYW4gYWNjb3VudCByZWFkIGl0OyBgcmVjaXBpZW50LmFkZGVkYCAvXG4gIC8vIGByZWNpcGllbnQucmVtb3ZlZGAgY292ZXIgd2hvIGlzIG9uIHRoZSBkaXN0cmlidXRpb24gbGlzdCwgd2hpY2ggaXMgdGhlIG90aGVyXG4gIC8vIHdheSBkYXRhIHJlYWNoZXMgYSBwZXJzb24uIGBvd25lcnNoaXAudHJhbnNmZXJgIGlzIGEgcHJpdmlsZWdlIG1vdmU6IGFcbiAgLy8gc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIGl0cyBPV05FUiwgc28gaGFuZGluZyBhIGRlZmluaXRpb24gb3ZlciBoYW5kc1xuICAvLyBvdmVyIHdob3NlIGFjY2VzcyB0aGUgbnVtYmVycyBhcmUgY29tcHV0ZWQgd2l0aC5cbiAgLy9cbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBhdWRpdGVkOiByZWFkaW5nIGEgc2hhcmVkIHJlcG9ydC4gVGhlIGFjY2VzcyBpcyBsb2dnZWQgYW5kXG4gIC8vIGNvdW50ZWQgcGVyIGxpbmssIGJ1dCBpdCBpcyBhbiBVTkFVVEhFTlRJQ0FURUQsIGV4dGVybmFsbHktdHJpZ2dlcmVkIGV2ZW50IOKAlFxuICAvLyBhbnlvbmUgaG9sZGluZyBhIFVSTCBjb3VsZCBvdGhlcndpc2Ugd3JpdGUgdW5ib3VuZGVkIHJvd3MgaW50byB0aGUgb3JnJ3MgYXVkaXRcbiAgLy8gdHJhaWwsIHdoaWNoIHR1cm5zIGEgcmVhZCBpbnRvIGEgd2F5IHRvIGJ1cnkgdGhlIGVudHJpZXMgdGhhdCBtYXR0ZXIuXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uY3JlYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi51cGRhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmRlbGV0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0Lm93bmVyc2hpcC50cmFuc2ZlcicsXG4gICdyZXBvcnRpbmcucmVwb3J0LnB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlcHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gVGhlIGRyYWZ0aW5nIGhhbGYgb2YgYSBydW46IGEgY29tcG9zZS9yZWdlbmVyYXRlIGZyZWV6ZXMgdGhlIG9yZydzIG51bWJlcnNcbiAgLy8gaW50byBhIHJ1biwgdGhlIGxlYWQncyBub3RlcyBhcmUgZWRpdGVkIG9udG8gaXQgKG1ldGFkYXRhIG9ubHkg4oCUIGxlbmd0aCxcbiAgLy8gbmV2ZXIgdGhlIHByb3NlKSwgYW5kIGFuIEFJIHN1bW1hcnkgaXMgZHJhZnRlZCBmcm9tIGl0ICh0aGUgbnVtYmVycyB3ZW50IHRvXG4gIC8vIGEgcHJvdmlkZXI7IGBvdXRjb21lYCBjYXJyaWVzIGEgcmVmdXNhbCkuIEEgcmVzZW5kIHJlLW1pbnRzIGEgcmVjaXBpZW50J3NcbiAgLy8gY29uZmlybWF0aW9uIGNyZWRlbnRpYWwuIGB2ZXJpZmllZGAgLyBgdW5zdWJzY3JpYmVkYCBhcmUgdGhlIFVOQVVUSEVOVElDQVRFRFxuICAvLyByZWNpcGllbnQncyBvd24gYWN0cyAoYWN0b3IgYGFub255bW91c2AsIGEgaGFzaGVkIGFkZHJlc3Mgb25seSk6IGJvdW5kZWQgYnlcbiAgLy8gY29uc3RydWN0aW9uIOKAlCB0aGUgdmVyaWZ5IHRva2VuIGlzIHNpbmdsZS11c2UsIGFuZCBvbmx5IHRoZSBjbGljayB0aGF0XG4gIC8vIGFjdHVhbGx5IHN0b3BzIGRlbGl2ZXJ5IHdyaXRlcyBhbiB1bnN1YnNjcmliZSByb3cuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJ1bi5jb21wb3NlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLm5vdGVzJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLnN1bW1hcnknLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQucmVzZW5kJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnZlcmlmaWVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnVuc3Vic2NyaWJlZCcsXG4gIC8vIE1BQ0hJTkUgaW5nZXN0IChgcmVwb3J0aW5nOmluZ2VzdGAgc2NvcGUpLiBPbmUgYGJhdGNoYCByb3cgcGVyIFBPU1QgdG8gdGhlXG4gIC8vIGV2ZW50IC8gaW5jaWRlbnQgLyBpbmdlc3QtaGVhbHRoIHJvdXRlcyDigJQgY291bnRzIHBsdXMgY2FwcGVkIHBpcGVsaW5lLFxuICAvLyBleGVjdXRpb24sIEV2ZW50QnJpZGdlLWV2ZW50IGFuZCBpbmNpZGVudCBpZCBsaXN0cywgYXR0cmlidXRlZCB0byB0aGVcbiAgLy8gY3JlZGVudGlhbCdzIHByaW5jaXBhbCDigJQgc28gYSBmb3JnZWQgb3IgbWlzcm91dGVkIHdyaXRlIG5hbWVzIHRoZSBrZXkgYmVoaW5kXG4gIC8vIGl0LiBgcmVqZWN0ZWRgIGlzIHRoZSB0ZW5hbmN5IHJlZnVzYWwgaW5zaWRlIGEgYmF0Y2ggKGV2ZW50cyBuYW1pbmcgYW5vdGhlclxuICAvLyBvcmcncyBwaXBlbGluZXMpOiBhIEZBSUxVUkUgcm93IHdpdGggdGhlIG9mZmVuZGluZyBwaXBlbGluZSBpZHMsIG5ldmVyIHRoZVxuICAvLyBvcmcgdGhleSBiZWxvbmcgdG8uIGBpbmNpZGVudC5yZWNvcmRgIGlzIG9uZSBpbmNpZGVudCB0aGF0IGlzIG5ldyBvciBhY3R1YWxseVxuICAvLyBjaGFuZ2VkIChiZWZvcmUvYWZ0ZXIpOyBsaWtlIGBkZXBsb3ltZW50Lm91dGNvbWVgIGl0IG1vdmVzIENGUi9NVFRSLiBBblxuICAvLyB1bmNoYW5nZWQgcmVwZWF0LWludGVydmFsIHJlLXBvc3Qgd3JpdGVzIG5vbmUuXG4gICdyZXBvcnRpbmcuaW5nZXN0LmJhdGNoJyxcbiAgJ3JlcG9ydGluZy5pbmdlc3QucmVqZWN0ZWQnLFxuICAncmVwb3J0aW5nLmluY2lkZW50LnJlY29yZCcsXG4gIC8vIERlbmllZCBhdXRob3JpemF0aW9uIGF0dGVtcHQg4oCUIGVtaXR0ZWQgYmVzdC1lZmZvcnQgYnkgdGhlIHNoYXJlZFxuICAvLyBgcmVxdWlyZVBlcm1pc3Npb25gIC8gYHJlcXVpcmVTeXN0ZW1BZG1pbmAgZ2F0ZSB3aGVuIGEgc3RhdGUtY2hhbmdpbmdcbiAgLy8gKG5vbi1HRVQpIHJlcXVlc3QgaXMgcmVqZWN0ZWQsIHNvIHByb2JpbmcvZXNjYWxhdGlvbiBhdHRlbXB0cyBhcmUgdmlzaWJsZVxuICAvLyByYXRoZXIgdGhhbiBpbnZpc2libGUuIGBkZXRhaWxzYCBjYXJyaWVzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uICsgcGF0aDtcbiAgLy8gYG91dGNvbWVgIGlzICdmYWlsdXJlJy5cbiAgJ2F1dGh6LmRlbmllZCcsXG4gIC8vIFwiQXNrXCIgYXNzaXN0YW50IGFjdGl2aXR5IOKAlCB2aXNpYmlsaXR5IGludG8gd2hhdCB0aGUgYXNzaXN0YW50IGRpZCBvbiBhIHVzZXInc1xuICAvLyBiZWhhbGYuIGBhc2sucXVlcnlgIGlzIGEgcmVhZC1vbmx5IGhvdy10byB0dXJuOyBgYXNrLmFnZW50LnR1cm5gIGlzIGEgdG9vbC1jYWxsaW5nXG4gIC8vIHR1cm4uIGBkZXRhaWxzYCBjYXJyeSBTQUZFIE1FVEFEQVRBIE9OTFkgKHRvb2xzIHVzZWQsIHByb3Bvc2FsIGtpbmRzLCBxdWVyeVxuICAvLyBsZW5ndGgsIG91dGNvbWUpLCBuZXZlciB0aGUgcmF3IHF1ZXJ5IHRleHQuXG4gICdhc2sucXVlcnknLFxuICAnYXNrLmFnZW50LnR1cm4nLFxuICAvLyBBIHJlYWRlciByYXRpbmcgYW4gYW5zd2VyLCBvciBhIGhlbHAgc2VhcmNoIHRoYXQgZm91bmQgbm90aGluZy4gVGhlIE9OTFlcbiAgLy8gc2lnbmFsIGZvciB3aGljaCBkb2NzIHRoZSBhc3Npc3RhbnQgYW5zd2VycyBiYWRseSBmcm9tIOKAlCB0aGUgdHVybiBpdHNlbGZcbiAgLy8gY2Fubm90IHRlbGwgYSBnb29kIGFuc3dlciBmcm9tIGEgY29uZmlkZW50IHdyb25nIG9uZS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyByYXRpbmcgYW5kIHRoZSBET0MgSURTIGNpdGVkIChgYXV0aGVudGljYXRpb24ubWRgKSwgbmV2ZXIgdGhlIHF1ZXN0aW9uOiB0aGVcbiAgLy8gZG9jIGlzIHdoYXQgZ2V0cyBmaXhlZCwgYW5kIGl0IGlzIG5vdCB1c2VyLWVudGVyZWQgdGV4dC5cbiAgJ2Fzay5mZWVkYmFjaycsXG4gIC8vIE9uZSBBSSBnZW5lcmF0aW9uIG9mIGEgcGlwZWxpbmUgLyBwbHVnaW4gZHJhZnQgKGAvcGlwZWxpbmVzL2dlbmVyYXRlKmAsXG4gIC8vIGAvcGx1Z2lucy9nZW5lcmF0ZSpgKSwgc3VjY2VzcyBvciBmYWlsdXJlIChpbmNsLiBjbGllbnQgYWJvcnQpLiBgZGV0YWlsc2AgY2FycnlcbiAgLy8gU0FGRSBNRVRBREFUQSBPTkxZOiB0aGUgcm91dGUsIHRoZSBwcm9tcHQgTEVOR1RILCB0aGUgc2hhcmVkIEFJIHVzYWdlIGJsb2NrXG4gIC8vIChgYWlgOiB0aGUgcHJvdmlkZXIgYW5kIG1vZGVsIHRoYXQgQU5TV0VSRUQgYWZ0ZXIgYW55IGZhaWxvdmVyLCBgZmFsbGJhY2tGcm9tYCxcbiAgLy8gd2hvc2Uga2V5IHBhaWQg4oCUIGBrZXlTb3VyY2VgIHJlcXVlc3Qvb3JnL3BsYXRmb3JtIOKAlCB0b2tlbnMgaW4vb3V0L2NhY2hlZCwgdGhlXG4gIC8vIHByb21wdCB2ZXJzaW9uLCBob3cgdGhlIGBhaUNhbGxzYCBzbG90IHNldHRsZWQpIGFuZCB0aGUgcmVzZXJ2YXRpb24nc1xuICAvLyBgcXVvdGFgIHZpZXcg4oCUIG5ldmVyIHRoZSBwcm9tcHQsIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBvciBhIGtleS5cbiAgJ3BpcGVsaW5lLmFpLmdlbmVyYXRlJyxcbiAgJ3BsdWdpbi5haS5nZW5lcmF0ZScsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gIC8vIE5PVEU6IHRoZXJlIGlzIG5vIGBwbHVnaW4ubGlzdGluZy51bmxpc3RgLiBXaXRoZHJhd2FsIGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5XG4gIC8vIGBwbHVnaW4ubGlzdGluZy5zdGF0ZS5jaGFuZ2VgIChgdW5tYWludGFpbmVkYCAvIGBzdXNwZW5kZWRgIC8gYGxpc3RlZGApLFxuICAvLyB3aGljaCBpcyB0aGUgYWN0aW9uIHRoZSBjb2RlIGFjdHVhbGx5IGVtaXRzLCBzbyBgdW5saXN0YCB3YXMgYSBzZWNvbmQgbmFtZVxuICAvLyBmb3IgYSB0aGluZyB0aGF0IGhhcyBvbmUg4oCUIGFuZCBhIG5ldmVyLWVtaXR0ZWQgb25lIGF0IHRoYXQuXG4gICdwbHVnaW4ubGlzdGluZy51cGRhdGUnLFxuICAncGx1Z2luLmxpc3Rpbmcuc3RhdGUuY2hhbmdlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnBhdXNlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ueWFuaycsXG4gICdwbHVnaW4udmVyc2lvbi51bnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24uZGVwcmVjYXRlJyxcbiAgLy8gUmV0aXJpbmcgYSB2ZXJzaW9uJ3MgcmVnaXN0cnkgaW1hZ2UgdG8gcmVjbGFpbSBgc3RvcmFnZUJ5dGVzYC4gRGlzdGluY3RcbiAgLy8gZnJvbSB0aGUgZm91ciBhYm92ZSwgd2hpY2ggY2hhbmdlIHdoZXRoZXIgYSB2ZXJzaW9uIFJFU09MVkVTIGFuZCBkZWxldGVcbiAgLy8gbm90aGluZywgYW5kIGZyb20gYHJlZ2lzdHJ5LmltYWdlLmRlbGV0ZWAvYHJlZ2lzdHJ5LnRhZy5kZWxldGVgLCB3aGljaCBhcmVcbiAgLy8gdGhlIHJlZ2lzdHJ5J3Mgb3duIG9wZXJhdG9yLXNpZGUgdHJhaWwuIFRoaXMgaXMgYSB0ZW5hbnQgZnJlZWluZyBzcGFjZSwgYW5kXG4gIC8vIHRoZSBvbmx5IGF1ZGl0ZWQgYWN0aW9uIHRoYXQgY2FuIHJlZHVjZSBhbiBvcmcncyBzdG9yYWdlIGZpZ3VyZSDigJQgc28gaXRzXG4gIC8vIHJvdyBjYXJyaWVzIHRoZSBieXRlcyBpdCBmcmVlZCwgd2hpY2ggY2Fubm90IGJlIHJlY292ZXJlZCBhZnRlcndhcmRzLlxuICAncGx1Z2luLnZlcnNpb24ucHJ1bmUnLFxuICAvLyBOT1RFOiBubyBgcGx1Z2luLmNvbGxlY3Rpb24udXBkYXRlYC4gYGVjb3N5c3RlbV9jb2xsZWN0aW9uc2Agd2FzIGRlbGV0ZWQgKHNlZVxuICAvLyB0aGUgdG9tYnN0b25lIGluIGBzY2hlbWEvZWNvc3lzdGVtLnRzYCkgYmVjYXVzZSBub3RoaW5nIGV2ZXIgd3JvdGUgb3IgcmVhZFxuICAvLyBvbmU7IHRoaXMgZGVjbGFyYXRpb24gb3V0bGl2ZWQgdGhlIHRhYmxlIGl0IGF1ZGl0ZWQuXG4gIC8vIEVjb3N5c3RlbSBjb25maWd1cmF0aW9uIChzeXN0ZW0gb3JnKS5cbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuY3JlYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUudXBkYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuZGVsZXRlJyxcbiAgJ2Vjb3N5c3RlbS5yZXNlcnZlZC1uYW1lLnVwZGF0ZScsXG4gIC8vIFRoZSBvbmUtdGltZSBCT09UU1RSQVAgZXhjZXB0aW9uIChhdXRvLWFwcHJvdmFsIG9mIHRoZSBpbml0aWFsIE9mZmljaWFsXG4gIC8vIGNhdGFsb2cpIG9wZW5pbmcgb24gdGhlIGZpcnN0IE9mZmljaWFsIHJlcXVlc3QsIGFuZCBjbG9zaW5nIGZvciBnb29kXG4gIC8vIChgZGV0YWlscy5yZWFzb25gOiB3aW5kb3dfZWxhcHNlZCAvIGxpc3RpbmdzX2V4aXN0IC8gYSBtYW5hZ2VyIGRlY2lzaW9uO1xuICAvLyBgZGV0YWlscy5hcHByb3ZlZGA6IGhvdyBtYW55IHJlcXVlc3RzIHJvZGUgaXQpLlxuICAnZWNvc3lzdGVtLmJvb3RzdHJhcC5vcGVuJyxcbiAgJ2Vjb3N5c3RlbS5ib290c3RyYXAuY2xvc2UnLFxuICAvLyBOT1RFOiBubyBgZWNvc3lzdGVtLnNsYS51cGRhdGVgLiBUaGUgbGFuZSBTTEFzIGFyZSBIQVJEQ09ERUQgKHN0YW5kYXJkIDQ4aCxcbiAgLy8gc2VjdXJpdHktZml4IDRoIGluIGBzZXJ2aWNlcy9lY29zeXN0ZW0vc2xhLnRzYCkgd2l0aCBubyBzZXR0aW5ncyBzdXJmYWNlLCBzb1xuICAvLyB0aGVyZSBpcyBubyBtdXRhdGlvbiB0byBhdWRpdC4gTWFraW5nIHRoZW0gb3BlcmF0b3ItdHVuYWJsZSBpcyB0aGUgY2hhbmdlXG4gIC8vIHRoYXQgc2hvdWxkIHJlLWFkZCB0aGlzLlxuICAvLyBQdWJsaWMgcmVnaXN0cnkgbmFtZXNwYWNlIChgcHVibGljLypgKTogY29weSArIHNpZ24gKyBhdHRlc3Qgb24gcHVibGlzaCxcbiAgLy8gdGhlIHRpZXItY2hhbmdlL3N1c3BlbnNpb24gcmUtc2lnbiBqb2IsIHRhZyByZW1vdmFsIG9uIHlhbmsvdGFrZWRvd24sIGFuZFxuICAvLyB0aGUgcmV0ZW50aW9uIHN3ZWVwLlxuICAncmVnaXN0cnkuaW1hZ2UucHVibGlzaCcsXG4gICdyZWdpc3RyeS5pbWFnZS5yZXNpZ24nLFxuICAncmVnaXN0cnkuaW1hZ2UueWFuaycsXG4gICdyZWdpc3RyeS5pbWFnZS5nYycsXG4gIC8vIEluc3RhbGxzIGFuZCB0aGUgaW5zdGFsbGluZyBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKG9yZy1sb2NhbCkuXG4gICdwbHVnaW4uaW5zdGFsbC5yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuZGVueScsXG4gICdwbHVnaW4uaW5zdGFsbC5jcmVhdGUnLFxuICAncGx1Z2luLmluc3RhbGwudXBncmFkZScsXG4gIC8vIEEgbWVtYmVyJ3MgcmVxdWVzdCB0byBjaGFuZ2UgYW4gaW5zdGFsbCBwYXN0IHdoYXQgdGhleSBtYXkgZG8gYWxvbmUsIGFuZCBpdHMgZGVjaXNpb24uXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVqZWN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnJlbW92ZScsXG4gICdvcmcucGx1Z2luLWluc3RhbGwtcG9saWN5LnVwZGF0ZScsXG4gIC8vIEFuIHVwbG9hZCBSRUZVU0VEIGJlY2F1c2UgaXRzIG5hbWUgd291bGQgb3ZlcnJpZGUgc29tZXRoaW5nIHRoZSBvcmcgYWxyZWFkeVxuICAvLyByZXNvbHZlcyDigJQgYSBsaXN0aW5nLCBvciBhIHRlYW0ncyBwYXJlbnQtb3JnIHBsdWdpbiDigJQgYW5kIHRoZSBjb25zdW1wdGlvblxuICAvLyBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gQXVkaXRlZCBiZWNhdXNlIGEgcmVmdXNhbCBvdGhlcndpc2UgcmV0dXJuc1xuICAvLyBhbiBlcnJvciB0byB0aGUgY2FsbGVyIGFuZCBsZWF2ZXMgbm90aGluZyBiZWhpbmQ6IGFuIGF0dGVtcHQgdG8gZGVmaW5lXG4gIC8vIGB0cml2eWAgb3ZlciB0aGUgT2ZmaWNpYWwgc2Nhbm5lciBpcyBleGFjdGx5IHRoZSB0aGluZyBzb21lb25lIHNob3VsZCBiZVxuICAvLyBhYmxlIHRvIGZpbmQgYWZ0ZXJ3YXJkcy4gYGRldGFpbHNgIGNhcnJ5IHRoZSBuYW1lIGFuZCB3aGF0IGl0IHdvdWxkIGhhdmVcbiAgLy8gb3ZlcnJpZGRlbi5cbiAgJ3BsdWdpbi5zaGFkb3dpbmcuZGVuaWVkJyxcbiAgLy8gUmV2aWV3cyBhbmQgcmVwbGllcy5cbiAgJ3BsdWdpbi5yZXZpZXcuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwb3J0JyxcbiAgJ3BsdWdpbi5yZXZpZXcuaG9sZCcsXG4gICdwbHVnaW4ucmV2aWV3LnJlbGVhc2UnLFxuICAncGx1Z2luLnJldmlldy5yZW1vdmUnLFxuICAncGx1Z2luLnJldmlldy5hbm9ueW1pemUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS5jcmVhdGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS51cGRhdGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS5kZWxldGUnLFxuICAvLyBBbm9ueW1vdXMgc3VibWlzc2lvbnMuXG4gICdwbHVnaW4uc3VibWlzc2lvbi5jcmVhdGUnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24udmVyaWZ5JyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmdhdGUtZmFpbCcsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5hcHByb3ZlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnJlamVjdCcsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5jbGFpbScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5leHBpcmUnLFxuICAvLyBTZWN1cml0eSBhZHZpc29yaWVzIChwdWJsaXNoL3dpdGhkcmF3IGFyZSBzeXN0ZW0tb3JnIG9ubHk7IHVwZGF0ZSA9IGFcbiAgLy8gbW9kZXJhdG9yIGVkaXRpbmcgYSBkcmFmdCBiZWZvcmUgaXQgaXMgcHVibGlzaGVkKS5cbiAgJ3BsdWdpbi5hZHZpc29yeS5jcmVhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnVwZGF0ZScsXG4gICdwbHVnaW4uYWR2aXNvcnkucHVibGlzaCcsXG4gICdwbHVnaW4uYWR2aXNvcnkud2l0aGRyYXcnLFxuICAvLyBQZXItb3JnIHBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb25zIChwbHVnaW4gc2NhbiBnYXRlcyk6IHRoZSBzZXR0aW5nc1xuICAvLyAocmVjaXBpZW50cywgZGlnZXN0LCB3ZWJob29rLCBleHRlcm5hbCBhZGRyZXNzIOKAlCBjaGFuZ2VkIGZpZWxkIG5hbWVzIGFuZFxuICAvLyB0aGUgd2ViaG9vayBob3N0IG9ubHksIG5ldmVyIHRoZSBzZWNyZXQgb3IgdGhlIGFkZHJlc3MpLCBhbiBleHRlcm5hbFxuICAvLyBhZGRyZXNzIGNvbmZpcm1lZCB0aHJvdWdoIGl0cyBlbWFpbGVkIHNpbmdsZS11c2UgbGluaywgYW5kIGEgdGVzdCBzZW5kLlxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudXBkYXRlJyxcbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLmV4dGVybmFsX2VtYWlsLnZlcmlmeScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy50ZXN0JyxcbiAgLy8gQSBnYXRlLXJlZnVzZWQgaW1hZ2UgS0VQVCBmcm9tIHRoZSBzZXR1cCBjYXRhbG9nIGxvYWQsIHByb21vdGVkIHRvIGFcbiAgLy8gdmVyc2lvbiB3aXRob3V0IGEgcmVidWlsZCAoc3lzdGVtIG9yZywgYWZ0ZXIgYSBmaXggdXBzdHJlYW0gb3IgYW5cbiAgLy8gYWR2aXNvcnktaWQgd2FpdmVyKSDigJQgb3IgcmVmdXNlZCBhZ2FpbiBiZWNhdXNlIHRoZSBDVVJSRU5UIGdhdGVzIHN0aWxsXG4gIC8vIGZhaWwgaXQuIGBkZXRhaWxzYCBjYXJyeSBuYW1lL3ZlcnNpb24vZGlnZXN0IGFuZCB0aGUgZmluZGluZ3MuXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2UucHJvbW90ZWQnLFxuICAncGx1Z2luLnNldHVwX2ltYWdlLnByb21vdGVfcmVmdXNlZCcsXG4gIC8vIEEgZ2F0ZS1yZWZ1c2VkIHNldHVwLWxvYWQgaW1hZ2UgS0VQVCAoc2lnbmVkLCBpbiB0aGUgcmVnaXN0cnkpIGZvciBsYXRlclxuICAvLyBwcm9tb3Rpb24gKGBkZXRhaWxzYDogZGlnZXN0LCByZWZ1c2FsIGNvZGUsIGV4cGlyZXNBdCkg4oCUIGFuZCBpdHMgcm93XG4gIC8vIGRyb3BwZWQgYnkgdGhlIHN3ZWVwIChgZGV0YWlscy5yZWFzb25gOiBleHBpcmVkIC8gc3VwZXJzZWRlZCkuXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2Uua2VwdCcsXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2UuZGlzY2FyZGVkJyxcbiAgLy8gQSBQSVBFTElORSdzIHRyaWFnZSBvZiBpdHMgZXhwb3N1cmUgdG8gYSB2dWxuZXJhYmxlIHBsdWdpbiB2ZXJzaW9uOiBhXG4gIC8vIHRpbWUtYm94ZWQgcmlzayBhY2NlcHRhbmNlIChyZWFzb24gKyBleHBpcnksIHRoZSBhY2NlcHRlZCBmaW5kaW5nIGtleXMgYW5kXG4gIC8vIHdoZXRoZXIgS0VWIGZpbmRpbmdzIHdlcmUgYWNjZXB0ZWQpLCBhIGZhbHNlLXBvc2l0aXZlIGRpc21pc3NhbCwgb3IgYVxuICAvLyByZW9wZW4uIEFuIGFjdGl2ZSBhY2NlcHRhbmNlIGV4ZW1wdHMgdGhhdCBwaXBlbGluZSdzIGxvb2t1cHMgYW5kIHJ1bnRpbWVcbiAgLy8gY2hlY2tzIGZyb20gdGhlIGZsYWcgLyBLRVYgLyBIaWdoLWZsb29yIHJlZnVzYWxzIGZvciB0aG9zZSBmaW5kaW5ncyBvbmx5LlxuICAncGlwZWxpbmUudnVsbi5hY2NlcHRlZCcsXG4gICdwaXBlbGluZS52dWxuLmZhbHNlX3Bvc2l0aXZlJyxcbiAgJ3BpcGVsaW5lLnZ1bG4ucmVvcGVuZWQnLFxuICAvLyBBIHBpcGVsaW5lJ3MgcnVudGltZSBjaGVjayBncmFkZWQgb25lIG9mIGl0cyBydW5uaW5nIGltYWdlcyBgZXJyb3JgIG9yXG4gIC8vIGxvdWRlciAoYGRldGFpbHNgOiBzdGVwS2V5LCBkaWdlc3QsIHJlYXNvbiBjb2RlcywgZXhlY3V0aW9uSWQgd2hlbiBzZW50KS5cbiAgJ3BpcGVsaW5lLnJ1bnRpbWVfY2hlY2suZmxhZ2dlZCcsXG4gIC8vIEEgcGlwZWxpbmUncyBwbHVnaW4gc3RlcHMgbW92ZWQgdG8gbmV3ZXIgdmVyc2lvbnMgdGhyb3VnaCB0aGUgdXBncmFkZVxuICAvLyBmbG93IChwcmV2aWV3IOKGkiBhcHBseTsgYGRldGFpbHNgIGNhcnJ5IHRoZSBzdGVwcywgZnJvbSDihpIgdG8gdmVyc2lvbnMpLCBhbmQgYVxuICAvLyBwaXBlbGluZS1ydW4gc2VjdXJpdHkgc2Nhbm5lciByZXBvcnQgdXBsb2FkZWQgZm9yIGEgcGlwZWxpbmUgKGBkZXRhaWxzYDpcbiAgLy8gdG9vbCwgZm9ybWF0LCBzdGFnZSwgdGhlIGZpbmRpbmcgY291bnRzIOKAlCBuZXZlciB0aGUgZmluZGluZ3MgdGhlbXNlbHZlcykuXG4gICdwaXBlbGluZS5wbHVnaW4udXBncmFkZWQnLFxuICAncGlwZWxpbmUuc2VjdXJpdHlfcmVwb3J0LnVwbG9hZCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
|
|
@@ -34,4 +34,4 @@ export function isReservedTagKey(key) {
|
|
|
34
34
|
return RESERVED_TAG_KEYS.some((r) => r.toLowerCase() === k)
|
|
35
35
|
|| RESERVED_TAG_PREFIXES.some((p) => k.startsWith(p));
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXJ2ZWQtdGFncy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3Jlc2VydmVkLXRhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFzQjtJQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLGNBQWM7Q0FDdkQsQ0FBQztBQUVGLDJGQUEyRjtBQUMzRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBc0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFeEUsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztXQUN0RCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGFnIGtleXMgYSBjYWxsZXIgbWF5IG5ldmVyIHNldCBvbiBhIHBpcGVsaW5lLlxuICpcbiAqIFRoZXNlIGNhcnJ5IFRFTkFOQ1kgYW5kIGF0dHJpYnV0aW9uOiB0aGUgZXZlbnRzIExhbWJkYSByZWFkcyBgcGIucGlwZWxpbmUtaWRgXG4gKiBhbmQgYHBiLmRlcGxveXNgIG9mZiB0aGUgc3RhY2sgdG8gZGVjaWRlIHdob3NlIHJlcG9ydHMgYW4gZXhlY3V0aW9uIGJlbG9uZ3NcbiAqIHRvLCBhbmQgYE9yZ0lkYCBkcml2ZXMgY29zdCBhdHRyaWJ1dGlvbi4gQSBjYWxsZXIgdGhhdCBjYW4gc2V0IHRoZW0gY2FuIHBvaW50XG4gKiBhbm90aGVyIG9yZydzIGV4ZWN1dGlvbnMgYXQgaXRzIG93biBwaXBlbGluZS5cbiAqXG4gKiBCb3RoIGhhbHZlcyBvZiB0aGUgZGVmZW5jZSByZWFkIHRoaXMgb25lIGxpc3Q6XG4gKlxuICogLSBgQnVpbGRlclByb3BzU2NoZW1hYCByZWZ1c2VzIGEgcmVzZXJ2ZWQga2V5IHdpdGggNDAwLCBzbyB0aGUgY2FsbGVyIGZpbmRzXG4gKiAgIG91dCBhdCBjcmVhdGUgdGltZSB3aGljaCBrZXkgd2FzIHJlamVjdGVkLlxuICogLSBgUGlwZWxpbmVCdWlsZGVyYCBkcm9wcyB0aGVtIGFnYWluIGF0IHN5bnRoLiBBIHRlYW0gY2FuIHVzZSB0aGUgY29uc3RydWN0XG4gKiAgIGRpcmVjdGx5LCB3aXRob3V0IHRoZSBBUEksIHNvIHRoZSBzeW50aC10aW1lIGZpbHRlciBpcyB0aGUgYm91bmRhcnkgYW5kIHRoZVxuICogICBzY2hlbWEgaXMgZWFybHkgZmVlZGJhY2sg4oCUIG5laXRoZXIgaXMgc3VmZmljaWVudCBhbG9uZS5cbiAqXG4gKiBgYXdzOmAgaXMgcmVzZXJ2ZWQgYnkgQVdTIGl0c2VsZjogYSB0YWcgc2V0IGNvbnRhaW5pbmcgb25lIGZhaWxzIHRoZVxuICogQ2xvdWRGb3JtYXRpb24gY2FsbCB3aXRoIGEgY29uZnVzaW5nIGVycm9yLCBzbyBpdCBpcyByZWZ1c2VkIGhlcmUgZm9yIGNsYXJpdHkuXG4gKlxuICogSXQgbGl2ZXMgaW4gYXBpLWNvcmUgYmVjYXVzZSBwaXBlbGluZS1jb3JlIGRlcGVuZHMgb24gYXBpLWNvcmUsIG5vdCB0aGUgb3RoZXJcbiAqIHdheSByb3VuZDsgYSBzZWNvbmQgY29weSBpbiBwaXBlbGluZS1jb3JlIGNvdWxkIGRyaWZ0IGZyb20gd2hhdCB0aGUgQVBJXG4gKiBlbmZvcmNlcywgd2hpY2ggaXMgZXhhY3RseSB0aGUgZ2FwIHRoZSB0d28gY2hlY2tzIGV4aXN0IHRvIGNsb3NlLlxuICovXG5leHBvcnQgY29uc3QgUkVTRVJWRURfVEFHX0tFWVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnT3JnSWQnLCAncGlwZWxpbmUtYnVpbGRlcicsICdwcm9qZWN0JywgJ29yZ2FuaXphdGlvbicsXG5dO1xuXG4vKiogUmVzZXJ2ZWQgdGFnLWtleSBQUkVGSVhFUyAoY2FzZS1pbnNlbnNpdGl2ZSksIG1hdGNoZWQgaW4gYWRkaXRpb24gdG8gdGhlIGV4YWN0IGtleXMuICovXG5leHBvcnQgY29uc3QgUkVTRVJWRURfVEFHX1BSRUZJWEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsncGIuJywgJ2F3czonXTtcblxuLyoqIFdoZXRoZXIgYGtleWAgaXMgYSBwbGF0Zm9ybS0gb3IgQVdTLXJlc2VydmVkIHRhZyBrZXkgdGhhdCBhIGNhbGxlciBtYXkgbm90IHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Jlc2VydmVkVGFnS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGsgPSBrZXkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBSRVNFUlZFRF9UQUdfS0VZUy5zb21lKChyKSA9PiByLnRvTG93ZXJDYXNlKCkgPT09IGspXG4gICAgfHwgUkVTRVJWRURfVEFHX1BSRUZJWEVTLnNvbWUoKHApID0+IGsuc3RhcnRzV2l0aChwKSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a tier GIVES you, as DATA ONLY — the limits shape, the code-default
|
|
3
|
+
* number for every tier x quota type, and the arithmetic those numbers were
|
|
4
|
+
* derived from.
|
|
5
|
+
*
|
|
6
|
+
* Dependency-free and env-free so the browser imports it directly
|
|
7
|
+
* (`@pipeline-builder/api-core/tier-limits`). Its only import is a type, which
|
|
8
|
+
* is erased at compile time, so nothing of the server graph reaches the bundle.
|
|
9
|
+
* The env OVERLAY (`QUOTA_TIER_<TIER>_<LIMIT>`) deliberately stays in
|
|
10
|
+
* `quota-tiers.ts`: it reads `process.env`, which is what kept this table out of
|
|
11
|
+
* the browser's reach in the first place.
|
|
12
|
+
*
|
|
13
|
+
* WHY IT EXISTS. The frontend kept a hand-written copy of this table
|
|
14
|
+
* (`frontend/src/components/quotas/constants.ts`, under a "keep in sync"
|
|
15
|
+
* comment) because importing the real one meant importing a module with sixteen
|
|
16
|
+
* env reads. The copy prefills the quota-admin editor's per-tier presets, so a
|
|
17
|
+
* drifted copy did not break the page — an admin clicked a preset and SAVED
|
|
18
|
+
* numbers that were no longer the product's, with nothing anywhere reporting it.
|
|
19
|
+
* A test parsed BOTH files' source text to hold them equal, which is the shape
|
|
20
|
+
* you reach for when the values cannot be shared. Now they can be: the frontend
|
|
21
|
+
* imports this table, the copy is gone, and the drift it guarded is not
|
|
22
|
+
* expressible.
|
|
23
|
+
*/
|
|
24
|
+
import type { QuotaTier } from './quota-tiers.js';
|
|
25
|
+
/**
|
|
26
|
+
* A tier key as product copy: `developer` → "Developer", `pro_plus` → "Pro Plus".
|
|
27
|
+
*
|
|
28
|
+
* Lives here, with the other tier facts, because three callers want it: the
|
|
29
|
+
* default `QUOTA_TIERS` label, the shared test fixture's labels (which kept a
|
|
30
|
+
* second `titleCase` of its own), and the browser.
|
|
31
|
+
*
|
|
32
|
+
* It will NOT guess at an acronym (`sso` → "Sso") or a stylized name ("Pro+"),
|
|
33
|
+
* and deliberately takes no formatting options: the cases it cannot derive need
|
|
34
|
+
* a human writing copy, which is what `QUOTA_TIER_<TIER>_LABEL` is for. A mode
|
|
35
|
+
* flag would add surface without reaching any of them, and a mid-sentence phrase
|
|
36
|
+
* ("… — new version") is a different FACT from a standalone label rather than
|
|
37
|
+
* another style of one — `quota-catalog.ts` carries `label` and `labelPlural` as
|
|
38
|
+
* separate named fields for exactly that reason.
|
|
39
|
+
*/
|
|
40
|
+
export declare function tierLabel(tier: string): string;
|
|
41
|
+
/** Limit values for each quota type within a tier. */
|
|
42
|
+
export interface QuotaTierLimits {
|
|
43
|
+
plugins: number;
|
|
44
|
+
pipelines: number;
|
|
45
|
+
apiCalls: number;
|
|
46
|
+
/**
|
|
47
|
+
* Metered API calls made by ORG SERVICE ACCOUNTS (automation), counted
|
|
48
|
+
* instead of `apiCalls` so pipelines can't starve the org's people. See
|
|
49
|
+
* {@link AUTOMATION_CALLS_SIZING} for how the defaults are derived.
|
|
50
|
+
*/
|
|
51
|
+
automationCalls: number;
|
|
52
|
+
aiCalls: number;
|
|
53
|
+
/**
|
|
54
|
+
* Aggregate registry storage cap in BYTES. Counted across every repo
|
|
55
|
+
* under the org's `org-{orgId}/` namespace. -1 means unlimited.
|
|
56
|
+
* push-gate reads this; the image-registry rejects token issuance for
|
|
57
|
+
* `push` scope when the org's measured usage exceeds the limit.
|
|
58
|
+
*/
|
|
59
|
+
storageBytes: number;
|
|
60
|
+
/**
|
|
61
|
+
* vCPU-MINUTES of plugin-build compute per MONTH — the one quota on a period
|
|
62
|
+
* of its own (every other flow quota rolls on `QUOTA_RESET_DAYS`, 3 days).
|
|
63
|
+
*
|
|
64
|
+
* Derived from the `plugins` cap rather than guessed: `plugins x 10` builds a
|
|
65
|
+
* month, at a flat 30 wall-minutes a build and 1.5 vCPU of buildkitd, so
|
|
66
|
+
* `credits = builds x 45`. The flat per-build figure is deliberate — scaling
|
|
67
|
+
* BOTH the build count and the per-build cost by tier made credits
|
|
68
|
+
* superlinear in tier on the strength of an unmeasured claim, and it made a
|
|
69
|
+
* pack's credit grant tier-dependent, which the catalogue's grant shape cannot
|
|
70
|
+
* express.
|
|
71
|
+
*
|
|
72
|
+
* This is the first dimension with genuine per-unit marginal cost: every other
|
|
73
|
+
* quota is a rate limit protecting shared infrastructure, this one is compute
|
|
74
|
+
* the platform pays for. See `docs/plans/cpu-credits.md`.
|
|
75
|
+
*/
|
|
76
|
+
cpuCredits: number;
|
|
77
|
+
/** Count-quotas on the user-editable feature tables added to close per-org
|
|
78
|
+
* DoS via spam. -1 means unlimited. */
|
|
79
|
+
dashboards: number;
|
|
80
|
+
alertRules: number;
|
|
81
|
+
alertDestinations: number;
|
|
82
|
+
idpConfigs: number;
|
|
83
|
+
/**
|
|
84
|
+
* Active, non-suspended plugin-ecosystem listings the org publishes
|
|
85
|
+
* (docs/plugin-installing.md). A COUNT quota — installs never
|
|
86
|
+
* count. -1 = unlimited. Extendable via the `listing_pack` add-on bundle.
|
|
87
|
+
*/
|
|
88
|
+
listings: number;
|
|
89
|
+
/**
|
|
90
|
+
* Max org members (active users / seats). -1 = unlimited. This is the "Team"
|
|
91
|
+
* tier differentiator — enforced at member-invite time (an invite is blocked
|
|
92
|
+
* when active members + pending invites would exceed this).
|
|
93
|
+
*/
|
|
94
|
+
seats: number;
|
|
95
|
+
/**
|
|
96
|
+
* Max designated SUPPORT CONTACTS — the members authorised to open support
|
|
97
|
+
* cases. -1 = unlimited. Base is **0 on every tier**: support is an add-on at
|
|
98
|
+
* every tier and included in none, so an org with no support bundle has no
|
|
99
|
+
* contacts and cannot open a case. That makes the support paywall a quota
|
|
100
|
+
* check rather than a feature flag.
|
|
101
|
+
*
|
|
102
|
+
* Like `seats` this is a tier LIMIT, not a tracked counter — enforced live at
|
|
103
|
+
* designation time against current designations across the org subtree.
|
|
104
|
+
* Extended per unit by the `support_standard` / `support_priority` BASELINE
|
|
105
|
+
* bundles, which are priced per contact.
|
|
106
|
+
*/
|
|
107
|
+
supportContacts: number;
|
|
108
|
+
/**
|
|
109
|
+
* How many of those contacts may be UPGRADED to premium (24×7, 8-hour
|
|
110
|
+
* response, and the only ones who may declare `urgent`).
|
|
111
|
+
*
|
|
112
|
+
* A second dimension rather than a third baseline level, because premium is an
|
|
113
|
+
* UPGRADE and not an alternative. The shape it encodes: an org buys N baseline
|
|
114
|
+
* contacts and upgrades M of them, M ≤ N. That is what lets a 100-seat
|
|
115
|
+
* customer give business-hours support to its three named contacts and 24×7
|
|
116
|
+
* to the one who carries the pager — the case the mutually-exclusive ladder
|
|
117
|
+
* could not express at all, where buying "99 standard + 1 premium" charged for
|
|
118
|
+
* 100 units and granted one contact.
|
|
119
|
+
*
|
|
120
|
+
* ADDITIVE, deliberately. A premium contact costs the baseline unit PLUS the
|
|
121
|
+
* upgrade ($19.99 + $99.99), because it is served during business hours
|
|
122
|
+
* through the baseline and overnight through the upgrade; pricing the upgrade
|
|
123
|
+
* as a delta would pretend the baseline were free. Base 0 on every tier, like
|
|
124
|
+
* `supportContacts`, so the paywall stays a quota check.
|
|
125
|
+
*/
|
|
126
|
+
supportPremiumContacts: number;
|
|
127
|
+
/**
|
|
128
|
+
* Reporting retention in DAYS — NOT a flow quota (never decremented, absent
|
|
129
|
+
* from `VALID_QUOTA_TYPES`): these ride the tier-baseline + bundle-grant math
|
|
130
|
+
* purely as an entitlement the billing service syncs to reporting's
|
|
131
|
+
* `dora_settings`. -1 = unlimited (the sweep skips the org entirely).
|
|
132
|
+
* `eventRetentionDays` — non-deploy `pipeline_events` (STAGE/ACTION/build).
|
|
133
|
+
* `doraRetentionDays` — deploy events + `deployment_outcomes` + `incidents`,
|
|
134
|
+
* and the per-org report-query window for DORA routes.
|
|
135
|
+
* Extendable via the `retention_pack` / `dora_history_pack` add-on bundles.
|
|
136
|
+
*/
|
|
137
|
+
eventRetentionDays: number;
|
|
138
|
+
doraRetentionDays: number;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* How the `automationCalls` defaults are sized — written down so the next
|
|
142
|
+
* person to touch them argues with the arithmetic, not with the numbers.
|
|
143
|
+
*
|
|
144
|
+
* Every call an org's automation keys make in one pipeline RUN, itemized (the
|
|
145
|
+
* earlier sizing counted only the plugin lookups and hand-waved the rest as
|
|
146
|
+
* "×2"):
|
|
147
|
+
*
|
|
148
|
+
* plugin lookups 12 one per plugin step (self-mutating pipeline)
|
|
149
|
+
* synth 1 the synth step fetching the pipeline config
|
|
150
|
+
* runtime check 1 the pre-deploy runtime-check call
|
|
151
|
+
* security-report upload 1 the scan step posting its report
|
|
152
|
+
* registry register 1 pipeline-register stamping the deployed version
|
|
153
|
+
* reporting ingest batches 12 the event forwarder posts ~one batch per action
|
|
154
|
+
* --
|
|
155
|
+
* 28 calls per run
|
|
156
|
+
*
|
|
157
|
+
* Per default period (`QUOTA_RESET_DAYS`, 3 days) one active pipeline running
|
|
158
|
+
* hourly makes 28 × 24 × 3 = 2,016 calls. An org keeps far more pipelines alive
|
|
159
|
+
* than it CREATES in a period (`pipelines` is a creation rate), so active
|
|
160
|
+
* pipelines are taken as 4× the tier's `pipelines`. On top sits a per-ORG
|
|
161
|
+
* constant that does not scale with pipelines: the ingest-health heartbeat
|
|
162
|
+
* (≤ 1/minute → 1,440/day → 4,320/period). The sum gets 25% headroom (retries,
|
|
163
|
+
* registry pushes, ad-hoc CI scripts on keys) and rounds UP to the next 10,000:
|
|
164
|
+
*
|
|
165
|
+
* developer 2×4×2016 + 4320 = 20,448 × 1.25 = 25,560 → 30,000
|
|
166
|
+
* pro 5×4×2016 + 4320 = 44,640 × 1.25 = 55,800 → 60,000
|
|
167
|
+
* team 10×4×2016 + 4320 = 84,960 × 1.25 = 106,200 → 110,000
|
|
168
|
+
* business 20×4×2016 + 4320 = 165,600 × 1.25 = 207,000 → 210,000
|
|
169
|
+
* enterprise 30×4×2016 + 4320 = 246,240 × 1.25 = 307,800 → 310,000
|
|
170
|
+
*
|
|
171
|
+
* {@link automationCallsFor} computes exactly this, and the tier tests hold the
|
|
172
|
+
* table to it. Over the cap the 429 is SOFT for a band ({@link quotaGracePct}):
|
|
173
|
+
* a self-mutating pipeline that hard-stopped at 100% stayed stopped until the
|
|
174
|
+
* period reset, up to 3 days. The limits are PER PERIOD: an operator who
|
|
175
|
+
* lengthens `QUOTA_RESET_DAYS` should scale `QUOTA_TIER_<TIER>_AUTOMATION_CALLS`
|
|
176
|
+
* by the same factor.
|
|
177
|
+
*/
|
|
178
|
+
export declare const AUTOMATION_CALLS_SIZING: {
|
|
179
|
+
readonly callsPerRun: {
|
|
180
|
+
readonly pluginLookups: 12;
|
|
181
|
+
readonly synth: 1;
|
|
182
|
+
readonly runtimeCheck: 1;
|
|
183
|
+
readonly securityReportUpload: 1;
|
|
184
|
+
readonly registryRegister: 1;
|
|
185
|
+
readonly ingestBatches: 12;
|
|
186
|
+
};
|
|
187
|
+
readonly runsPerDay: 24;
|
|
188
|
+
readonly activePipelinesPerCreation: 4;
|
|
189
|
+
/** Ingest-health heartbeats per org per day (≤ one a minute). */
|
|
190
|
+
readonly heartbeatsPerDay: 1440;
|
|
191
|
+
/** Multiplier on the itemized total. */
|
|
192
|
+
readonly headroom: 1.25;
|
|
193
|
+
/** Defaults round UP to a multiple of this. */
|
|
194
|
+
readonly roundTo: 10000;
|
|
195
|
+
};
|
|
196
|
+
/** The {@link AUTOMATION_CALLS_SIZING} formula for a tier creating `pipelines` per period. */
|
|
197
|
+
export declare function automationCallsFor(pipelines: number, periodDays?: number): number;
|
|
198
|
+
/**
|
|
199
|
+
* Code-default limits per tier — the fallback when no env override is set.
|
|
200
|
+
*
|
|
201
|
+
* SERVER CODE WANTS `getTierLimits(tier)` / `QUOTA_TIERS[tier].limits`, not this
|
|
202
|
+
* table: those carry the deployment's `QUOTA_TIER_*` overrides, and this is what
|
|
203
|
+
* they fall back to. It is exported for the BROWSER, which has no env to overlay
|
|
204
|
+
* and gets the deployment's effective figures from `/config` instead.
|
|
205
|
+
* -1 means unlimited. (Counts sized to "comfortably enough for one team, not
|
|
206
|
+
* script spam": 20 dashboards, 50 alert rules, 10 destinations, 1 IdP config
|
|
207
|
+
* for Developer; scaled up for Pro; -1 (uncapped) for the cheap count-quotas
|
|
208
|
+
* on Team/Enterprise while cost-driving quotas — incl. apiCalls — stay finite.)
|
|
209
|
+
*/
|
|
210
|
+
export declare const DEFAULT_TIER_LIMITS: Record<QuotaTier, QuotaTierLimits>;
|