@pipeline-builder/api-core 5.2.6 → 5.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/lib/constants/ai-providers.js +1 -1
  2. package/lib/constants/http-status.js +1 -1
  3. package/lib/constants/index.js +1 -1
  4. package/lib/constants/time.js +1 -1
  5. package/lib/errors/app-errors.js +1 -1
  6. package/lib/errors/index.js +1 -1
  7. package/lib/helpers/access-helpers.d.ts +19 -0
  8. package/lib/helpers/access-helpers.js +24 -4
  9. package/lib/helpers/content-disposition.js +1 -1
  10. package/lib/helpers/crud-helpers.js +1 -1
  11. package/lib/helpers/index.d.ts +1 -1
  12. package/lib/helpers/index.js +2 -2
  13. package/lib/helpers/org-hierarchy-http.js +1 -1
  14. package/lib/helpers/org-hierarchy.js +1 -1
  15. package/lib/helpers/restore-helpers.js +1 -1
  16. package/lib/helpers/sse-helpers.js +13 -2
  17. package/lib/helpers/support-calendar.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/middleware/ask-provenance.js +1 -1
  20. package/lib/middleware/assurance.js +1 -1
  21. package/lib/middleware/auth.js +3 -2
  22. package/lib/middleware/client-version.d.ts +45 -0
  23. package/lib/middleware/client-version.js +97 -0
  24. package/lib/middleware/deferred-quota-check.js +1 -1
  25. package/lib/middleware/ecosystem-guard.js +1 -1
  26. package/lib/middleware/index.d.ts +1 -0
  27. package/lib/middleware/index.js +2 -1
  28. package/lib/middleware/jwt-verify.js +1 -1
  29. package/lib/middleware/mongo-sanitize.js +1 -1
  30. package/lib/middleware/on-behalf.js +1 -1
  31. package/lib/middleware/permission-gates.js +1 -1
  32. package/lib/middleware/quota-exempt-routes.js +1 -1
  33. package/lib/middleware/revocation.js +1 -1
  34. package/lib/middleware/route-table.js +16 -1
  35. package/lib/middleware/service-tokens.js +1 -1
  36. package/lib/middleware/step-up.js +1 -1
  37. package/lib/middleware/system-org.d.ts +18 -5
  38. package/lib/middleware/system-org.js +19 -6
  39. package/lib/openapi/extend-zod.js +1 -1
  40. package/lib/openapi/index.js +1 -1
  41. package/lib/openapi/registry.js +1 -1
  42. package/lib/openapi/routes/ask-routes.js +1 -1
  43. package/lib/openapi/routes/billing-routes.js +1 -1
  44. package/lib/openapi/routes/image-registry-routes.js +1 -1
  45. package/lib/openapi/routes/index.js +1 -1
  46. package/lib/openapi/routes/message-routes.js +1 -1
  47. package/lib/openapi/routes/pipeline-routes.js +1 -1
  48. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  49. package/lib/openapi/routes/plugin-routes.js +1 -1
  50. package/lib/openapi/routes/quota-routes.js +1 -1
  51. package/lib/openapi/schema-registry.js +1 -1
  52. package/lib/routes/health.js +1 -1
  53. package/lib/routes/index.js +1 -1
  54. package/lib/services/ai-call-weight.js +1 -1
  55. package/lib/services/alert-delivery.js +1 -1
  56. package/lib/services/api-key-exchange.d.ts +4 -2
  57. package/lib/services/api-key-exchange.js +15 -8
  58. package/lib/services/audit-context.d.ts +3 -0
  59. package/lib/services/audit-context.js +2 -1
  60. package/lib/services/audit-spool.js +1 -1
  61. package/lib/services/cache-service.js +1 -1
  62. package/lib/services/circuit-breaker.js +1 -1
  63. package/lib/services/compliance-client.js +1 -1
  64. package/lib/services/compliance-event-subscriber.js +1 -1
  65. package/lib/services/durable-event-bus.js +1 -1
  66. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  67. package/lib/services/ecosystem-notify-client.js +9 -3
  68. package/lib/services/entity-events.js +1 -1
  69. package/lib/services/env-redis.js +1 -1
  70. package/lib/services/http-client.js +19 -3
  71. package/lib/services/index.d.ts +1 -1
  72. package/lib/services/index.js +2 -2
  73. package/lib/services/jwks-cache.js +1 -1
  74. package/lib/services/leader-lock.js +1 -1
  75. package/lib/services/notification-channels.js +1 -1
  76. package/lib/services/org-ai-client.js +1 -1
  77. package/lib/services/pagerduty-inbound.js +1 -1
  78. package/lib/services/pagerduty.js +1 -1
  79. package/lib/services/quota-increment-batcher.js +1 -1
  80. package/lib/services/quota.js +1 -1
  81. package/lib/services/remote-audit-client.js +1 -1
  82. package/lib/services/retry-forever.js +1 -1
  83. package/lib/services/retry-strategy.js +1 -1
  84. package/lib/services/s3-client.js +1 -1
  85. package/lib/services/scheduler.js +1 -1
  86. package/lib/services/service-boot.js +1 -1
  87. package/lib/services/service-keys.js +2 -2
  88. package/lib/services/sse-ticket-store.js +1 -1
  89. package/lib/services/system-notification.js +1 -1
  90. package/lib/services/token-revocation.js +1 -1
  91. package/lib/services/version-vuln-policy.d.ts +11 -0
  92. package/lib/services/version-vuln-policy.js +33 -7
  93. package/lib/types/ai-catalog.js +1 -1
  94. package/lib/types/ask-proposals.d.ts +23 -0
  95. package/lib/types/ask-proposals.js +29 -1
  96. package/lib/types/audit-events.js +1 -1
  97. package/lib/types/build-catalog.d.ts +65 -0
  98. package/lib/types/build-catalog.js +95 -1
  99. package/lib/types/catalog-metadata.js +1 -1
  100. package/lib/types/common.js +1 -1
  101. package/lib/types/compliance-exemption.js +1 -1
  102. package/lib/types/ecosystem-notifications.d.ts +9 -0
  103. package/lib/types/ecosystem-notifications.js +15 -6
  104. package/lib/types/ecosystem.d.ts +1 -6
  105. package/lib/types/ecosystem.js +18 -5
  106. package/lib/types/error-codes.d.ts +3 -0
  107. package/lib/types/error-codes.js +6 -1
  108. package/lib/types/feature-flags.d.ts +17 -1
  109. package/lib/types/feature-flags.js +1 -1
  110. package/lib/types/http.js +1 -1
  111. package/lib/types/index.d.ts +3 -3
  112. package/lib/types/index.js +4 -4
  113. package/lib/types/metadata-keys.js +1 -1
  114. package/lib/types/permissions.d.ts +60 -13
  115. package/lib/types/permissions.js +63 -14
  116. package/lib/types/pipeline-template.js +1 -1
  117. package/lib/types/pipeline.js +1 -1
  118. package/lib/types/plugin-catalog.js +1 -1
  119. package/lib/types/plugin-health.js +1 -1
  120. package/lib/types/plugin-scan.d.ts +69 -0
  121. package/lib/types/plugin-scan.js +77 -1
  122. package/lib/types/quota-catalog.js +15 -2
  123. package/lib/types/quota-tiers.d.ts +27 -160
  124. package/lib/types/quota-tiers.js +47 -255
  125. package/lib/types/remote-audit-actions.d.ts +1 -1
  126. package/lib/types/remote-audit-actions.js +9 -1
  127. package/lib/types/reserved-tags.js +1 -1
  128. package/lib/types/tier-limits.d.ts +210 -0
  129. package/lib/types/tier-limits.js +254 -0
  130. package/lib/types/usage-projection.js +1 -1
  131. package/lib/types/visibility.js +1 -1
  132. package/lib/types/wire-vocabulary.d.ts +7 -0
  133. package/lib/types/wire-vocabulary.js +7 -1
  134. package/lib/utils/alias-resolver.js +1 -1
  135. package/lib/utils/api-key.js +1 -1
  136. package/lib/utils/audit.js +1 -1
  137. package/lib/utils/aws-scrub.js +1 -1
  138. package/lib/utils/compliance-attributes.js +1 -1
  139. package/lib/utils/concurrency-gate.d.ts +98 -0
  140. package/lib/utils/concurrency-gate.js +110 -0
  141. package/lib/utils/concurrency.js +1 -1
  142. package/lib/utils/crash-handlers.js +1 -1
  143. package/lib/utils/date.js +1 -1
  144. package/lib/utils/dsse.js +1 -1
  145. package/lib/utils/env.d.ts +11 -0
  146. package/lib/utils/env.js +14 -1
  147. package/lib/utils/headers.js +1 -1
  148. package/lib/utils/identity.js +1 -1
  149. package/lib/utils/index.d.ts +2 -0
  150. package/lib/utils/index.js +3 -1
  151. package/lib/utils/jwk.js +2 -2
  152. package/lib/utils/logger.js +1 -1
  153. package/lib/utils/metric-emitter.js +1 -1
  154. package/lib/utils/object.js +1 -1
  155. package/lib/utils/params.js +1 -1
  156. package/lib/utils/plugin-compliance.d.ts +9 -1
  157. package/lib/utils/plugin-compliance.js +1 -1
  158. package/lib/utils/proof-of-work.js +1 -1
  159. package/lib/utils/response.js +1 -1
  160. package/lib/utils/retention.js +1 -1
  161. package/lib/utils/safe-require.js +1 -1
  162. package/lib/utils/secret-encryption.js +1 -1
  163. package/lib/utils/secret-rotation.js +1 -1
  164. package/lib/utils/secure-compare.js +1 -1
  165. package/lib/utils/semver.d.ts +18 -0
  166. package/lib/utils/semver.js +120 -0
  167. package/lib/utils/sensitive-patterns.js +1 -1
  168. package/lib/utils/service-registry.js +1 -1
  169. package/lib/utils/ssrf.js +1 -1
  170. package/lib/validation/ai-schemas.js +1 -1
  171. package/lib/validation/common-schemas.js +1 -1
  172. package/lib/validation/dockerfile-static.js +1 -1
  173. package/lib/validation/index.d.ts +1 -1
  174. package/lib/validation/index.js +2 -2
  175. package/lib/validation/message-schemas.d.ts +73 -0
  176. package/lib/validation/message-schemas.js +63 -2
  177. package/lib/validation/middleware.js +1 -1
  178. package/lib/validation/pipeline-schemas.js +1 -1
  179. package/lib/validation/pipeline-template-schemas.js +1 -1
  180. package/lib/validation/plugin-base-images.js +1 -1
  181. package/lib/validation/plugin-catalog-detect.js +1 -1
  182. package/lib/validation/plugin-catalog-metadata.js +1 -1
  183. package/lib/validation/plugin-heuristics.js +1 -1
  184. package/lib/validation/plugin-lint.js +1 -1
  185. package/lib/validation/plugin-name-confusable.js +1 -1
  186. package/lib/validation/plugin-schemas.js +1 -1
  187. package/lib/validation/plugin-spec-schema.js +1 -1
  188. package/lib/validation/plugin-template-contract.js +1 -1
  189. package/package.json +11 -4
@@ -294,4 +294,4 @@ export async function publishCredentialRevocation(redis, kind, id, ttlSeconds) {
294
294
  return false;
295
295
  }
296
296
  }
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmV2b2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy90b2tlbi1yZXZvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRWhEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGFBQWEsQ0FBQztBQUV6RCx3Q0FBd0M7QUFDeEMsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDL0MsT0FBTyxHQUFHLDJCQUEyQixHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsY0FBYyxDQUFDO0FBRTVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBVztJQUM5QyxPQUFPLEdBQUcsNkJBQTZCLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxHQUFHLEVBQUUsYUFBYTtJQUNsQixHQUFHLEVBQUUsYUFBYTtDQUNWLENBQUM7QUFLWCxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQW9CLEVBQUUsRUFBVTtJQUN0RSxPQUFPLEdBQUcsNEJBQTRCLENBQUMsSUFB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Q0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsS0FBdUIsRUFDdkIsSUFBb0IsRUFDcEIsRUFBVSxFQUNWLFVBQWtCO0lBRWxCLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQywrRkFBK0YsRUFBRTtZQUMzRyxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlZGlzQ2FjaGVDbGllbnQgfSBmcm9tICcuL2NhY2hlLXNlcnZpY2UuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNDbGllbnQsIGNyZWF0ZVJlZGlzUmVhZHlHYXRlLCB0eXBlIFJlYWR5QXdhcmVSZWRpcyB9IGZyb20gJy4vZW52LXJlZGlzLmpzJztcbmltcG9ydCB0eXBlIHsgQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzLCBTZXNzaW9uUmV2b2NhdGlvblN0YXRlLCBUb2tlblJldm9jYXRpb25TdG9yZSB9IGZyb20gJy4uL21pZGRsZXdhcmUvcmV2b2NhdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigndG9rZW4tcmV2b2NhdGlvbicpO1xuXG4vKipcbiAqIFJlZGlzIGtleSBuYW1lc3BhY2UgZm9yIHRoZSBwZXItdXNlciBjdXJyZW50IGB0b2tlblZlcnNpb25gLiBUaGUgcGxhdGZvcm1cbiAqIFBVQkxJU0hFUyB0byB0aGlzIGtleSBvbiBldmVyeSBwcml2aWxlZ2UgY2hhbmdlOyB0aGUgc3RhdGVsZXNzIHNlcnZpY2VzIFJFQURcbiAqIGl0IGluIGByZXF1aXJlQXV0aGAgKHZpYSB7QGxpbmsgY3JlYXRlUmVkaXNUb2tlblJldm9jYXRpb25TdG9yZX0pIHRvIHJlamVjdFxuICogdG9rZW5zIG1pbnRlZCBiZWZvcmUgdGhhdCBjaGFuZ2UuIFB1Ymxpc2hlciBhbmQgcmVhZGVycyBNVVNUIHNoYXJlIHRoaXMgZXhhY3RcbiAqIHByZWZpeCDigJQgaGVuY2UgYm90aCBoZWxwZXJzIGxpdmUgaGVyZSwgaW4gb25lIHBsYWNlLlxuICovXG5leHBvcnQgY29uc3QgVE9LRU5fUkVWT0NBVElPTl9LRVlfUFJFRklYID0gJ2F1dGhyZXY6dHY6JztcblxuLyoqIFRoZSByZXZvY2F0aW9uIGtleSBmb3IgYSB1c2VyIGlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuUmV2b2NhdGlvbktleSh1c2VySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtUT0tFTl9SRVZPQ0FUSU9OX0tFWV9QUkVGSVh9JHt1c2VySWR9YDtcbn1cblxuLyoqXG4gKiBSZWRpcyBrZXkgbmFtZXNwYWNlIGZvciBlbmRlZCBJTVBFUlNPTkFUSU9OIHNlc3Npb25zLCBieSB0b2tlbiBganRpYC4gU2FtZVxuICogcHVibGlzaC9yZWFkIHNwbGl0IGFzIHRoZSB0b2tlblZlcnNpb24ga2V5cyBhYm92ZSwgYW5kIGtlcHQgYmVzaWRlIHRoZW0gZm9yIHRoZVxuICogc2FtZSByZWFzb246IHB1Ymxpc2hlciBhbmQgcmVhZGVycyBtdXN0IGFncmVlIG9uIHRoaXMgZXhhY3QgcHJlZml4LlxuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9SRVZPQ0FUSU9OX0tFWV9QUkVGSVggPSAnYXV0aHJldjpqdGk6JztcblxuLyoqIFRoZSByZXZvY2F0aW9uIGtleSBmb3Igb25lIHNlc3Npb24ncyB0b2tlbiBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXNzaW9uUmV2b2NhdGlvbktleShqdGk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTRVNTSU9OX1JFVk9DQVRJT05fS0VZX1BSRUZJWH0ke2p0aX1gO1xufVxuXG4vKipcbiAqIFJlZGlzIGtleSBuYW1lc3BhY2VzIGZvciByZXZva2luZyBPTkUgY3JlZGVudGlhbCByYXRoZXIgdGhhbiBhIHdob2xlIHVzZXI6XG4gKlxuICogLSBgcmV2b2tlOnNpZDo8c2lkPmAgICDigJQgb25lIHJlZnJlc2gtc2Vzc2lvbiBzbG90IChhIHNpZ25lZC1vdXQgZGV2aWNlLCBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2b2tlZCBtYWNoaW5lIHNlc3Npb24pLiBSZWplY3RzIGV2ZXJ5IGFjY2VzcyB0b2tlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHdob3NlIGBzaWRgIGNsYWltIG5hbWVzIGl0LlxuICogLSBgcmV2b2tlOmtleTo8a2V5SWQ+YCDigJQgb25lIGFjY2VzcyBrZXkgKFBBVCBvciBzZXJ2aWNlLWFjY291bnQga2V5KS4gUmVqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBrZXkncyBleGNoYW5nZWQgdG9rZW4gKGB0b2tlbl91c2U6ICdhcGlfa2V5J2AsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYGp0aWAgPSBrZXkgaWQpIGFuZCBhbnl0aGluZyBkZXJpdmVkIGZyb20gaXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoYHBhcmVudEtleUlkYCkuXG4gKlxuICogUGxhdGZvcm0gUFVCTElTSEVTIHRoZXNlICh7QGxpbmsgcHVibGlzaENyZWRlbnRpYWxSZXZvY2F0aW9ufSk7IGV2ZXJ5IHNlcnZpY2VcbiAqIFJFQURTIHRoZW0gaW4gYHJlcXVpcmVBdXRoYC4gUHJlc2VuY2UgaXMgdGhlIHdob2xlIHNpZ25hbCDigJQgdGhlIHZhbHVlIGlzIGAxYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENSRURFTlRJQUxfUkVWT0NBVElPTl9QUkVGSVggPSB7XG4gIHNpZDogJ3Jldm9rZTpzaWQ6JyxcbiAga2V5OiAncmV2b2tlOmtleTonLFxufSBhcyBjb25zdDtcblxuLyoqIFdoaWNoIGNyZWRlbnRpYWwgYSB7QGxpbmsgY3JlZGVudGlhbFJldm9jYXRpb25LZXl9IG5hbWVzLiAqL1xuZXhwb3J0IHR5cGUgQ3JlZGVudGlhbEtpbmQgPSBrZXlvZiB0eXBlb2YgQ1JFREVOVElBTF9SRVZPQ0FUSU9OX1BSRUZJWDtcblxuLyoqIFRoZSByZXZvY2F0aW9uIGtleSBmb3Igb25lIHNlc3Npb24gc2xvdCAoYHNpZGApIG9yIG9uZSBhY2Nlc3Mga2V5IChga2V5YCkuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlZGVudGlhbFJldm9jYXRpb25LZXkoa2luZDogQ3JlZGVudGlhbEtpbmQsIGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Q1JFREVOVElBTF9SRVZPQ0FUSU9OX1BSRUZJWFtraW5kXX0ke2lkfWA7XG59XG5cbi8qKlxuICogQXRvbWljIFwic2V0IGlmIGdyZWF0ZXJcIiBmb3IgdGhlIHBlci11c2VyIHRva2VuVmVyc2lvbi4gQSBwbGFpbiBTRVQgbGV0IHR3b1xuICogY29uY3VycmVudCBwdWJsaXNoZXMgbGFuZCBvdXQgb2Ygb3JkZXIg4oCUIGFuIG9sZGVyIHZlcnNpb24gb3ZlcndyaXRpbmcgYSBuZXdlclxuICogb25lIHNpbGVudGx5IFVOLXJldm9rZWQgZXZlcnkgdG9rZW4gYmV0d2VlbiB0aGVtLiBUaGUgc2NyaXB0IG9ubHkgZXZlciByYWlzZXNcbiAqIHRoZSBzdG9yZWQgdmVyc2lvbiwgYW5kIG9ubHkgZXZlciBsZW5ndGhlbnMgdGhlIGVudHJ5J3MgVFRMLlxuICpcbiAqIEtFWVNbMV0gPSByZXZvY2F0aW9uIGtleTsgQVJHVlsxXSA9IHZlcnNpb247IEFSR1ZbMl0gPSB0dGwgc2Vjb25kcy5cbiAqIFJldHVybnMgMSB3aGVuIGl0IHdyb3RlLCAwIHdoZW4gYW4gZXF1YWwtb3ItbmV3ZXIgdmVyc2lvbiB3YXMgYWxyZWFkeSB0aGVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFVF9JRl9HUkVBVEVSX0xVQSA9IGBcbmxvY2FsIGN1ciA9IHRvbnVtYmVyKHJlZGlzLmNhbGwoJ0dFVCcsIEtFWVNbMV0pKVxubG9jYWwgdiA9IHRvbnVtYmVyKEFSR1ZbMV0pXG5sb2NhbCB0dGwgPSB0b251bWJlcihBUkdWWzJdKVxuaWYgY3VyIGFuZCBjdXIgPj0gdiB0aGVuXG4gIGlmIHJlZGlzLmNhbGwoJ1RUTCcsIEtFWVNbMV0pIDwgdHRsIHRoZW4gcmVkaXMuY2FsbCgnRVhQSVJFJywgS0VZU1sxXSwgdHRsKSBlbmRcbiAgcmV0dXJuIDBcbmVuZFxucmVkaXMuY2FsbCgnU0VUJywgS0VZU1sxXSwgQVJHVlsxXSwgJ0VYJywgdHRsKVxucmV0dXJuIDFcbmA7XG5cbi8qKlxuICogQnVpbGQgYSB7QGxpbmsgVG9rZW5SZXZvY2F0aW9uU3RvcmV9IGJhY2tlZCBieSBhIFJlZGlzIGNsaWVudCwgZm9yIGEgc3RhdGVsZXNzXG4gKiBzZXJ2aWNlIHRvIHJlZ2lzdGVyIHZpYSBgc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmVgLiBSZWFkcyB0aGUgY3VycmVudFxuICogYHRva2VuVmVyc2lvbmAgdGhlIHBsYXRmb3JtIHB1Ymxpc2hlZCBmb3IgdGhlIHVzZXIuXG4gKlxuICogRmFpbC1vcGVuIGJ5IGNvbnRyYWN0OiBhIG1pc3MsIGEgcGFyc2UgZmFpbHVyZSwgb3IgYSBSZWRpcyBlcnJvciBhbGwgeWllbGRcbiAqIGBudWxsYCAo4oCUIGByZXF1aXJlQXV0aGAgdHJlYXRzIHRoYXQgYXMgXCJubyBrbm93biByZXZvY2F0aW9uXCIpLCBzbyBhIFJlZGlzXG4gKiBvdXRhZ2UgZGVncmFkZXMgdG8gdGhlIHByZS1leGlzdGluZyBiZWhhdmlvdXIgcmF0aGVyIHRoYW4gbG9ja2luZyB1c2VycyBvdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKHJlZGlzOiBSZWRpc0NhY2hlQ2xpZW50KTogVG9rZW5SZXZvY2F0aW9uU3RvcmUge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldEN1cnJlbnRWZXJzaW9uKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBhd2FpdCByZWRpcy5nZXQodG9rZW5SZXZvY2F0aW9uS2V5KHVzZXJJZCkpO1xuICAgICAgICBpZiAocmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdy50cmltKCkgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gU3RyaWN0IGludGVnZXIgcGFyc2U6IGBOdW1iZXJgICh1bmxpa2UgYHBhcnNlSW50YCkgcmVqZWN0cyB0cmFpbGluZ1xuICAgICAgICAvLyBnYXJiYWdlIChcIjVhYmNcIiDihpIgTmFOKSwgc28gYSBjb3JydXB0ZWQgZW50cnkgZmFpbHMgb3BlbiAobnVsbCDihpIgXCJub3RcbiAgICAgICAgLy8gcmV2b2tlZFwiKSByYXRoZXIgdGhhbiBiZWluZyByZWFkIGFzIGEgYm9ndXMgdmVyc2lvbi4gVGhlIGVtcHR5LXN0cmluZ1xuICAgICAgICAvLyBndWFyZCBhYm92ZSBtYXR0ZXJzIGJlY2F1c2UgYE51bWJlcignJylgIGlzIDAsIG5vdCBOYU4uXG4gICAgICAgIGNvbnN0IG4gPSBOdW1iZXIocmF3KTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobikgPyBuIDogbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBSZWRpcyB3YXMgcmVhY2hhYmxlIGVub3VnaCB0byB0cnkgYnV0IHRoZSByZWFkIGVycm9yZWQg4oCUIHRoaXMgaXMgYVxuICAgICAgICAvLyBERUdSQURBVElPTjogd2hpbGUgaXQgcGVyc2lzdHMsIGZvcmNlZCBsb2dvdXRzIC8gcHJpdmlsZWdlIHJldm9jYXRpb25zXG4gICAgICAgIC8vIHNpbGVudGx5IHN0b3AgdGFraW5nIGVmZmVjdCB1bnRpbCBuYXR1cmFsIHRva2VuIGV4cGlyeS4gRW1pdCBhIGNvdW50ZXJcbiAgICAgICAgLy8gc28gYFRva2VuUmV2b2NhdGlvbkZhaWxpbmdPcGVuYCBjYW4gYWxlcnQgb24gYSBTVVNUQUlORUQgcmF0ZSAobWlycm9yc1xuICAgICAgICAvLyB0aGUgcXVvdGFfZmFpbF9vcGVuX3RvdGFsIHBhdHRlcm4pLiBOb3QgZW1pdHRlZCBmb3IgdGhlIFwiUmVkaXMgbm90XG4gICAgICAgIC8vIGNvbmZpZ3VyZWRcIiBwYXRoIChjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlIOKGkiBudWxsIGNsaWVudCksXG4gICAgICAgIC8vIHdoaWNoIGlzIGEgZGVsaWJlcmF0ZSBvcHQtb3V0LCBub3QgYSBkZWdyYWRhdGlvbi5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3Rva2VuX3Jldm9jYXRpb25fZmFpbF9vcGVuX3RvdGFsJywgeyByZWFzb246ICdyZWFkLWVycm9yJyB9KTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdUb2tlbi1yZXZvY2F0aW9uIHJlYWQgZmFpbGVkIChmYWlsLW9wZW4pJywge1xuICAgICAgICAgIHVzZXJJZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBnZXRTZXNzaW9uUmV2b2NhdGlvbihqdGk6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvblJldm9jYXRpb25TdGF0ZT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmF3ID0gYXdhaXQgcmVkaXMuZ2V0KHNlc3Npb25SZXZvY2F0aW9uS2V5KGp0aSkpO1xuICAgICAgICByZXR1cm4gcmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkID8gJ2xpdmUnIDogJ3Jldm9rZWQnO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE5PVCBmYWlsLW9wZW4sIHVubGlrZSBnZXRDdXJyZW50VmVyc2lvbiBhYm92ZTogYHVuYXZhaWxhYmxlYCByZWplY3RzXG4gICAgICAgIC8vIHRoZSBpbXBlcnNvbmF0aW9uIHRva2VuLiBDb3VudGVkIHNvIGEgc3VzdGFpbmVkIG91dGFnZSDigJQgd2hpY2ggc3RvcHNcbiAgICAgICAgLy8gc3VwcG9ydCBpbXBlcnNvbmF0aW9uIGV2ZXJ5d2hlcmUg4oCUIGlzIHZpc2libGUgYW5kIGFsZXJ0YWJsZS5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3Nlc3Npb25fcmV2b2NhdGlvbl91bmF2YWlsYWJsZV90b3RhbCcsIHsgcmVhc29uOiAncmVhZC1lcnJvcicgfSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnU2Vzc2lvbi1yZXZvY2F0aW9uIHJlYWQgZmFpbGVkIChyZWplY3RpbmcgaW1wZXJzb25hdGlvbiB0b2tlbiknLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBpc0NyZWRlbnRpYWxSZXZva2VkKHJlZnM6IENyZWRlbnRpYWxSZXZvY2F0aW9uUmVmcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgLi4uKHJlZnMuc2lkID8gW2NyZWRlbnRpYWxSZXZvY2F0aW9uS2V5KCdzaWQnLCByZWZzLnNpZCldIDogW10pLFxuICAgICAgICAuLi5yZWZzLmtleUlkcy5tYXAoKGlkKSA9PiBjcmVkZW50aWFsUmV2b2NhdGlvbktleSgna2V5JywgaWQpKSxcbiAgICAgIF07XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKGtleXMubWFwKChrKSA9PiByZWRpcy5nZXQoaykpKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5zb21lKCh2KSA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRmFpbC1vcGVuLCBsaWtlIGdldEN1cnJlbnRWZXJzaW9uOiBhIG9uZS1jcmVkZW50aWFsIHJldm9jYXRpb24gaXMgdGhlXG4gICAgICAgIC8vIHNhbWUgY2xhc3Mgb2Ygc2lnbmFsIGFzIGEgdG9rZW5WZXJzaW9uIGJ1bXAsIGFuZCBhIFJlZGlzIG91dGFnZSBtdXN0XG4gICAgICAgIC8vIG5vdCBsb2NrIGV2ZXJ5IHNlc3Npb24gb3V0LiBDb3VudGVkIHNvIGl0IGlzIGFsZXJ0YWJsZS5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3Rva2VuX3Jldm9jYXRpb25fZmFpbF9vcGVuX3RvdGFsJywgeyByZWFzb246ICdjcmVkZW50aWFsLXJlYWQtZXJyb3InIH0pO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NyZWRlbnRpYWwtcmV2b2NhdGlvbiByZWFkIGZhaWxlZCAoZmFpbC1vcGVuKScsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHtAbGluayBUb2tlblJldm9jYXRpb25TdG9yZX0gYmFja2VkIGJ5IGEgUmVkaXMgY2xpZW50IHRoYXQgaXMgbGF6aWx5XG4gKiBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzdGFuZGFyZCBgUkVESVNfVVJMYCBvciBgUkVESVNfU0VOVElORUxTYCBlbnYg4oCUXG4gKiBmb3IgYSBzdGF0ZWxlc3Mgc2VydmljZSB0aGF0IGtlZXBzIE5PIFJlZGlzIGNsaWVudCBvZiBpdHMgb3duLiBUaGUgY2xpZW50IGlzXG4gKiBidWlsdCBvbiBmaXJzdCBgZ2V0Q3VycmVudFZlcnNpb25gIGNhbGwgYW5kIG1lbW9pemVkOyBgaW9yZWRpc2AgaXMgbG9hZGVkIHZpYVxuICogYSBndWFyZGVkIGR5bmFtaWMgcmVxdWlyZSBzbyBtZXJlbHkgaW1wb3J0aW5nIHRoaXMgbmV2ZXIgYnJlYWtzIGEgYnVpbGQvdGVzdFxuICogd2hlcmUgUmVkaXMgaXNuJ3QgcHJlc2VudC5cbiAqXG4gKiBGVUxMWSBGQUlMLU9QRU46IG5vIGVudiBjb25maWd1cmVkLCBhbiBpb3JlZGlzIGxvYWQgZmFpbHVyZSwgYSBjb25uZWN0IGVycm9yLFxuICogb3IgYW55IHJlYWQgZmFpbHVyZSBhbGwgcmVzb2x2ZSB0byBgbnVsbGAgKFwibm8ga25vd24gcmV2b2NhdGlvblwiKSwgc28gYVxuICogc2VydmljZSBkZWdyYWRlcyB0byBuYXR1cmFsIHRva2VuIGV4cGlyeSByYXRoZXIgdGhhbiBsb2NraW5nIHVzZXJzIG91dC4gQVxuICogc2VydmljZSBvcHRzIGluIHdpdGggYSBzaW5nbGUgYm9vdCBsaW5lOlxuICogICBgc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmUoY3JlYXRlRW52UmVkaXNUb2tlblJldm9jYXRpb25TdG9yZSgpKTtgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKCk6IFRva2VuUmV2b2NhdGlvblN0b3JlIHtcbiAgdHlwZSBSZWFkZXJSZWRpcyA9IFJlZGlzQ2FjaGVDbGllbnQgJiBSZWFkeUF3YXJlUmVkaXM7XG4gIC8vIHVuZGVmaW5lZCA9IG5vdCB5ZXQgYXR0ZW1wdGVkOyBudWxsID0gYXR0ZW1wdGVkIGFuZCB1bmF2YWlsYWJsZSAoc3RheSBvZmYpLlxuICBsZXQgY2FjaGVkOiBSZWFkZXJSZWRpcyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGxldCByZWFkeTogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhZGVyIGNsaWVudCwgYnVpbHQgb24gZmlyc3QgdXNlLiBUaGUgZW52IGNsaWVudCBoYXMgbm8gb2ZmbGluZSBxdWV1ZSxcbiAgICogc28gYSBHRVQgYmVmb3JlIHRoZSBmaXJzdCBjb25uZWN0aW9uIGNvbXBsZXRlcyBpcyByZWplY3RlZCDigJQgd2hpY2ggbWFkZSB0aGVcbiAgICogRklSU1QgaW1wZXJzb25hdGlvbiBjaGVjayBvbiBldmVyeSBwb2QgcmVhZCAndW5hdmFpbGFibGUnICg0MDEpLiBXYWl0XG4gICAqIChib3VuZGVkLCBuZXZlciByZWplY3RpbmcpIGZvciByZWFkaW5lc3M7IGEgZ2VudWluZWx5IGRvd24gUmVkaXMgdGhlbiBrZWVwc1xuICAgKiB0aGUgZXhpc3RpbmcgZmFpbC1vcGVuIC8gJ3VuYXZhaWxhYmxlJyBzZW1hbnRpY3MuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBjbGllbnQoKTogUHJvbWlzZTxSZWFkZXJSZWRpcyB8IG51bGw+IHtcbiAgICBpZiAoY2FjaGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNoYXJlZCBlbnYtY29uZmlndXJlZCBpb3JlZGlzIGNvbnN0cnVjdGlvbiAoZXJyb3IgbGlzdGVuZXIgYXR0YWNoZWQsIG51bGxcbiAgICAgIC8vIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCk7IHRoZSByZWFkZXIgc3RheXMgZmFpbC1vcGVuIOKAlCBhIG51bGwgY2xpZW50XG4gICAgICAvLyBqdXN0IGZhbGxzIGJhY2sgdG8gbmF0dXJhbCB0b2tlbiBleHBpcnkuXG4gICAgICBjYWNoZWQgPSBjcmVhdGVFbnZSZWRpc0NsaWVudDxSZWFkZXJSZWRpcz4oJ3Jldm9jYXRpb24tcmVhZGVyJyk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdSZWRpcyB0b2tlbi1yZXZvY2F0aW9uIHJlYWRlciBpbml0aWFsaXplZCcpO1xuICAgICAgICByZWFkeSA9IGNyZWF0ZVJlZGlzUmVhZHlHYXRlKGNhY2hlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWFkeSkgYXdhaXQgcmVhZHkoKTtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXRDdXJyZW50VmVyc2lvbih1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgICAgY29uc3QgcmVkaXMgPSBhd2FpdCBjbGllbnQoKTtcbiAgICAgIGlmICghcmVkaXMpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXMpLmdldEN1cnJlbnRWZXJzaW9uKHVzZXJJZCk7XG4gICAgfSxcbiAgICBhc3luYyBnZXRTZXNzaW9uUmV2b2NhdGlvbihqdGk6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvblJldm9jYXRpb25TdGF0ZT4ge1xuICAgICAgY29uc3QgcmVkaXMgPSBhd2FpdCBjbGllbnQoKTtcbiAgICAgIC8vIE5vIFJlZGlzIGNvbmZpZ3VyZWQg4oeSIHRoZXJlIGlzIG5vIHdheSB0byBsZWFybiBhIHNlc3Npb24gd2FzIGVuZGVkLCBzb1xuICAgICAgLy8gYW4gaW1wZXJzb25hdGlvbiB0b2tlbiBjYW4ndCBiZSB0cnVzdGVkLiBFdmVyeSByZWFsIGRlcGxveW1lbnQgcnVucyBSZWRpc1xuICAgICAgLy8gKHRoZSBidWlsZCBxdWV1ZSBuZWVkcyBpdCksIHNvIHRoaXMgb25seSBiaXRlcyBhIG1pc2NvbmZpZ3VyZWQgc2VydmljZS5cbiAgICAgIGlmICghcmVkaXMpIHtcbiAgICAgICAgZW1pdENvdW50ZXIoJ3Nlc3Npb25fcmV2b2NhdGlvbl91bmF2YWlsYWJsZV90b3RhbCcsIHsgcmVhc29uOiAnbm90LWNvbmZpZ3VyZWQnIH0pO1xuICAgICAgICByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKHJlZGlzKS5nZXRTZXNzaW9uUmV2b2NhdGlvbiEoanRpKTtcbiAgICB9LFxuICAgIGFzeW5jIGlzQ3JlZGVudGlhbFJldm9rZWQocmVmczogQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCByZWRpcyA9IGF3YWl0IGNsaWVudCgpO1xuICAgICAgaWYgKCFyZWRpcykgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXMpLmlzQ3JlZGVudGlhbFJldm9rZWQhKHJlZnMpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUHVibGlzaCBhIHVzZXIncyBjdXJyZW50IGB0b2tlblZlcnNpb25gIHNvIHRoZSBzdGF0ZWxlc3Mgc2VydmljZXMgc2VlIHRoZVxuICogcmV2b2NhdGlvbiBpbW1lZGlhdGVseSAocGxhdGZvcm0gc2lkZSkuIEJlc3QtZWZmb3J0IOKAlCBuZXZlciB0aHJvd3M7IGEgZmFpbHVyZVxuICoganVzdCBtZWFucyB0aGUgc2VydmljZXMgZmFsbCBiYWNrIHRvIG5hdHVyYWwgdG9rZW4gZXhwaXJ5IGZvciB0aGlzIGNoYW5nZS5cbiAqXG4gKiBUaGUgd3JpdGUgaXMgYW4gYXRvbWljIHNldC1pZi1ncmVhdGVyICh7QGxpbmsgU0VUX0lGX0dSRUFURVJfTFVBfSksIHNvIGFuXG4gKiBvdXQtb2Ytb3JkZXIgcHVibGlzaCBjYW4gbmV2ZXIgbG93ZXIgdGhlIHN0b3JlZCB2ZXJzaW9uLlxuICpcbiAqIFRoZSBrZXkgaXMgd3JpdHRlbiB3aXRoIGEgVFRMIGVxdWFsIHRvIHRoZSBhY2Nlc3MtdG9rZW4gbGlmZXRpbWU6IGFueSB0b2tlblxuICogdGhhdCBjb3VsZCBzdGlsbCBjYXJyeSBhbiBvbGRlciB2ZXJzaW9uIGhhcyBleHBpcmVkIGJ5IHRoZSB0aW1lIHRoZSBlbnRyeVxuICogbGFwc2VzLCBzbyBhbiBleHBpcmVkIGVudHJ5IGNhbiBuZXZlciBjYXVzZSBhIGZhbHNlIFwicmV2b2tlZFwiIG5vciBhIG1pc3NlZCBvbmUuXG4gKlxuICogQHBhcmFtIHJlZGlzIC0gdGhlIHBsYXRmb3JtJ3MgUmVkaXMgY2xpZW50XG4gKiBAcGFyYW0gdXNlcklkIC0gdGhlIHVzZXIgd2hvc2Ugc2Vzc2lvbnMgY2hhbmdlZFxuICogQHBhcmFtIHRva2VuVmVyc2lvbiAtIHRoZSB1c2VyJ3MgTkVXIChwb3N0LWluY3JlbWVudCkgdG9rZW5WZXJzaW9uXG4gKiBAcGFyYW0gdHRsU2Vjb25kcyAtIGFjY2Vzcy10b2tlbiBsaWZldGltZSBpbiBzZWNvbmRzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoVG9rZW5SZXZvY2F0aW9uKFxuICByZWRpczogUmVkaXNDYWNoZUNsaWVudCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHRva2VuVmVyc2lvbjogbnVtYmVyLFxuICB0dGxTZWNvbmRzOiBudW1iZXIsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICAvLyBBdG9taWMgc2V0LWlmLWdyZWF0ZXI6IGNvbmN1cnJlbnQgcHVibGlzaGVzIGNhbiBhcnJpdmUgb3V0IG9mIG9yZGVyLCBhbmQgYVxuICAgIC8vIHBsYWluIFNFVCB3b3VsZCBsZXQgdGhlIG9sZGVyIHZlcnNpb24gd2luLiBBIGNsaWVudCB0aGF0IGNhbid0IHJ1biBMdWEgaXNcbiAgICAvLyByZWZ1c2VkIChjYXVnaHQgYmVsb3cpIHJhdGhlciB0aGFuIHdyaXR0ZW4gcmFjaWx5LlxuICAgIGlmICh0eXBlb2YgcmVkaXMuZXZhbCAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdSZWRpcyBjbGllbnQgY2Fubm90IHJ1biBzY3JpcHRzIChldmFsIHVuYXZhaWxhYmxlKScpO1xuICAgIGF3YWl0IHJlZGlzLmV2YWwoU0VUX0lGX0dSRUFURVJfTFVBLCAxLCB0b2tlblJldm9jYXRpb25LZXkodXNlcklkKSwgU3RyaW5nKHRva2VuVmVyc2lvbiksIE1hdGgubWF4KDEsIE1hdGguZmxvb3IodHRsU2Vjb25kcykpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1Rva2VuLXJldm9jYXRpb24gcHVibGlzaCBmYWlsZWQgKHNlcnZpY2VzIGZhbGwgYmFjayB0byB0b2tlbiBleHBpcnkpJywge1xuICAgICAgdXNlcklkLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoIHRoYXQgb25lIElNUEVSU09OQVRJT04gc2Vzc2lvbiBoYXMgZW5kZWQsIHNvIGV2ZXJ5IHN0YXRlbGVzcyBzZXJ2aWNlXG4gKiByZWplY3RzIGl0cyB0b2tlbiBvbiB0aGUgbmV4dCByZXF1ZXN0IChwbGF0Zm9ybSBzaWRlKS5cbiAqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHB1Ymxpc2ggbGFuZGVkIOKAlCB1bmxpa2UgYHB1Ymxpc2hUb2tlblJldm9jYXRpb25gLCB3aGljaCBpc1xuICogZmlyZS1hbmQtZm9yZ2V0LiBUaGUgY2FsbGVyIG11c3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBwZXJzb24gd2hvIGVuZGVkIHRoZVxuICogc2Vzc2lvbiB0aGF0IGl0IGRpZCBOT1QgZW5kIGV2ZXJ5d2hlcmUsIHJhdGhlciB0aGFuIHJlcG9ydGluZyBzdWNjZXNzIHdoaWxlXG4gKiB0aGUgdG9rZW4gc3RpbGwgd29ya3MgYWdhaW5zdCBvdGhlciBzZXJ2aWNlcy5cbiAqXG4gKiBUaGUgZW50cnkgZXhwaXJlcyB3aXRoIHRoZSBzZXNzaW9uOiBvbmNlIHRoZSB0b2tlbiBpdHNlbGYgY2FuIG5vIGxvbmdlciBiZVxuICogdXNlZCwgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHJldm9rZSwgc28gdGhlIGtleSBjbGVhbnMgaXRzZWxmIHVwLlxuICpcbiAqIEBwYXJhbSB0dGxNcyAtIHRpbWUgcmVtYWluaW5nIG9uIHRoZSBzZXNzaW9uJ3MgdG9rZW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2hTZXNzaW9uUmV2b2NhdGlvbihcbiAgcmVkaXM6IFJlZGlzQ2FjaGVDbGllbnQsXG4gIGp0aTogc3RyaW5nLFxuICB0dGxNczogbnVtYmVyLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVkaXMuc2V0KHNlc3Npb25SZXZvY2F0aW9uS2V5KGp0aSksICcxJywgJ1BYJywgTWF0aC5tYXgoMTAwMCwgTWF0aC5jZWlsKHR0bE1zKSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybignU2Vzc2lvbi1yZXZvY2F0aW9uIHB1Ymxpc2ggZmFpbGVkIChvdGhlciBzZXJ2aWNlcyB3aWxsIGhvbm91ciB0aGUgdG9rZW4gdW50aWwgaXQgZXhwaXJlcyknLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUHVibGlzaCB0aGF0IE9ORSBjcmVkZW50aWFsIOKAlCBhIHNlc3Npb24gc2xvdCAoYHNpZGApIG9yIGFuIGFjY2VzcyBrZXlcbiAqIChga2V5YCkg4oCUIGhhcyBiZWVuIHJldm9rZWQsIHNvIGV2ZXJ5IHNlcnZpY2UgcmVqZWN0cyB0aGUgdG9rZW5zIHRoYXQgbmFtZSBpdFxuICogb24gdGhlIG5leHQgcmVxdWVzdCAocGxhdGZvcm0gc2lkZSkuXG4gKlxuICogYHR0bFNlY29uZHNgIE1VU1QgYmUgYXQgbGVhc3QgdGhlIGxvbmdlc3QgbGlmZXRpbWUgb2YgYW55IHRva2VuIHRoYXQgY2FuXG4gKiBjYXJyeSB0aGlzIGlkIChhbiBhY2Nlc3MgdG9rZW4gbWludGVkIGZyb20gdGhlIHNsb3QsIGFuIGV4Y2hhbmdlZCBrZXkgdG9rZW4sXG4gKiBvciBhIHRva2VuIGRlcml2ZWQgZnJvbSBvbmUpOiB0aGUgZW50cnkgbGFwc2luZyBmaXJzdCB3b3VsZCByZWFkIGFzIFwibm90XG4gKiByZXZva2VkXCIgd2hpbGUgc3VjaCBhIHRva2VuIGlzIHN0aWxsIGFsaXZlLlxuICpcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHVibGlzaCBsYW5kZWQsIHNvIHRoZSBjYWxsZXIgY2FuIHJlcG9ydCBhIHJldm9jYXRpb25cbiAqIHRoYXQgZGlkIG5vdCByZWFjaCB0aGUgb3RoZXIgc2VydmljZXMgaW5zdGVhZCBvZiBjbGFpbWluZyBzdWNjZXNzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaENyZWRlbnRpYWxSZXZvY2F0aW9uKFxuICByZWRpczogUmVkaXNDYWNoZUNsaWVudCxcbiAga2luZDogQ3JlZGVudGlhbEtpbmQsXG4gIGlkOiBzdHJpbmcsXG4gIHR0bFNlY29uZHM6IG51bWJlcixcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IHJlZGlzLnNldChjcmVkZW50aWFsUmV2b2NhdGlvbktleShraW5kLCBpZCksICcxJywgJ0VYJywgTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHR0bFNlY29uZHMpKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdDcmVkZW50aWFsLXJldm9jYXRpb24gcHVibGlzaCBmYWlsZWQgKHNlcnZpY2VzIGhvbm91ciB0aGUgY3JlZGVudGlhbCB1bnRpbCBpdHMgdG9rZW5zIGV4cGlyZSknLCB7XG4gICAgICBraW5kLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmV2b2NhdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3Rva2VuLXJldm9jYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFaEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsYUFBYSxDQUFDO0FBRXpELHdDQUF3QztBQUN4QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBYztJQUMvQyxPQUFPLEdBQUcsMkJBQTJCLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxjQUFjLENBQUM7QUFFNUQscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFXO0lBQzlDLE9BQU8sR0FBRyw2QkFBNkIsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHO0lBQzFDLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLEdBQUcsRUFBRSxhQUFhO0NBQ1YsQ0FBQztBQUtYLGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBb0IsRUFBRSxFQUFVO0lBQ3RFLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFF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QUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxLQUF1QixFQUN2QixJQUFvQixFQUNwQixFQUFVLEVBQ1YsVUFBa0I7SUFFbEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLCtGQUErRixFQUFFO1lBQzNHLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUmVkaXNDYWNoZUNsaWVudCB9IGZyb20gJy4vY2FjaGUtc2VydmljZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZSZWRpc0NsaWVudCwgY3JlYXRlUmVkaXNSZWFkeUdhdGUsIHR5cGUgUmVhZHlBd2FyZVJlZGlzIH0gZnJvbSAnLi9lbnYtcmVkaXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDcmVkZW50aWFsUmV2b2NhdGlvblJlZnMsIFNlc3Npb25SZXZvY2F0aW9uU3RhdGUsIFRva2VuUmV2b2NhdGlvblN0b3JlIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9yZXZvY2F0aW9uLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0b2tlbi1yZXZvY2F0aW9uJyk7XG5cbi8qKlxuICogUmVkaXMga2V5IG5hbWVzcGFjZSBmb3IgdGhlIHBlci11c2VyIGN1cnJlbnQgYHRva2VuVmVyc2lvbmAuIFRoZSBwbGF0Zm9ybVxuICogUFVCTElTSEVTIHRvIHRoaXMga2V5IG9uIGV2ZXJ5IHByaXZpbGVnZSBjaGFuZ2U7IHRoZSBzdGF0ZWxlc3Mgc2VydmljZXMgUkVBRFxuICogaXQgaW4gYHJlcXVpcmVBdXRoYCAodmlhIHtAbGluayBjcmVhdGVSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlfSkgdG8gcmVqZWN0XG4gKiB0b2tlbnMgbWludGVkIGJlZm9yZSB0aGF0IGNoYW5nZS4gUHVibGlzaGVyIGFuZCByZWFkZXJzIE1VU1Qgc2hhcmUgdGhpcyBleGFjdFxuICogcHJlZml4IOKAlCBoZW5jZSBib3RoIGhlbHBlcnMgbGl2ZSBoZXJlLCBpbiBvbmUgcGxhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBUT0tFTl9SRVZPQ0FUSU9OX0tFWV9QUkVGSVggPSAnYXV0aHJldjp0djonO1xuXG4vKiogVGhlIHJldm9jYXRpb24ga2V5IGZvciBhIHVzZXIgaWQuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5SZXZvY2F0aW9uS2V5KHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1RPS0VOX1JFVk9DQVRJT05fS0VZX1BSRUZJWH0ke3VzZXJJZH1gO1xufVxuXG4vKipcbiAqIFJlZGlzIGtleSBuYW1lc3BhY2UgZm9yIGVuZGVkIElNUEVSU09OQVRJT04gc2Vzc2lvbnMsIGJ5IHRva2VuIGBqdGlgLiBTYW1lXG4gKiBwdWJsaXNoL3JlYWQgc3BsaXQgYXMgdGhlIHRva2VuVmVyc2lvbiBrZXlzIGFib3ZlLCBhbmQga2VwdCBiZXNpZGUgdGhlbSBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogcHVibGlzaGVyIGFuZCByZWFkZXJzIG11c3QgYWdyZWUgb24gdGhpcyBleGFjdCBwcmVmaXguXG4gKi9cbmV4cG9ydCBjb25zdCBTRVNTSU9OX1JFVk9DQVRJT05fS0VZX1BSRUZJWCA9ICdhdXRocmV2Omp0aTonO1xuXG4vKiogVGhlIHJldm9jYXRpb24ga2V5IGZvciBvbmUgc2Vzc2lvbidzIHRva2VuIGlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlc3Npb25SZXZvY2F0aW9uS2V5KGp0aTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NFU1NJT05fUkVWT0NBVElPTl9LRVlfUFJFRklYfSR7anRpfWA7XG59XG5cbi8qKlxuICogUmVkaXMga2V5IG5hbWVzcGFjZXMgZm9yIHJldm9raW5nIE9ORSBjcmVkZW50aWFsIHJhdGhlciB0aGFuIGEgd2hvbGUgdXNlcjpcbiAqXG4gKiAtIGByZXZva2U6c2lkOjxzaWQ+YCAgIOKAlCBvbmUgcmVmcmVzaC1zZXNzaW9uIHNsb3QgKGEgc2lnbmVkLW91dCBkZXZpY2UsIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXZva2VkIG1hY2hpbmUgc2Vzc2lvbikuIFJlamVjdHMgZXZlcnkgYWNjZXNzIHRva2VuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvc2UgYHNpZGAgY2xhaW0gbmFtZXMgaXQuXG4gKiAtIGByZXZva2U6a2V5OjxrZXlJZD5gIOKAlCBvbmUgYWNjZXNzIGtleSAoUEFUIG9yIHNlcnZpY2UtYWNjb3VudCBrZXkpLiBSZWplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtleSdzIGV4Y2hhbmdlZCB0b2tlbiAoYHRva2VuX3VzZTogJ2FwaV9rZXknYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBganRpYCA9IGtleSBpZCkgYW5kIGFueXRoaW5nIGRlcml2ZWQgZnJvbSBpdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChgcGFyZW50S2V5SWRgKS5cbiAqXG4gKiBQbGF0Zm9ybSBQVUJMSVNIRVMgdGhlc2UgKHtAbGluayBwdWJsaXNoQ3JlZGVudGlhbFJldm9jYXRpb259KTsgZXZlcnkgc2VydmljZVxuICogUkVBRFMgdGhlbSBpbiBgcmVxdWlyZUF1dGhgLiBQcmVzZW5jZSBpcyB0aGUgd2hvbGUgc2lnbmFsIOKAlCB0aGUgdmFsdWUgaXMgYDFgLlxuICovXG5leHBvcnQgY29uc3QgQ1JFREVOVElBTF9SRVZPQ0FUSU9OX1BSRUZJWCA9IHtcbiAgc2lkOiAncmV2b2tlOnNpZDonLFxuICBrZXk6ICdyZXZva2U6a2V5OicsXG59IGFzIGNvbnN0O1xuXG4vKiogV2hpY2ggY3JlZGVudGlhbCBhIHtAbGluayBjcmVkZW50aWFsUmV2b2NhdGlvbktleX0gbmFtZXMuICovXG5leHBvcnQgdHlwZSBDcmVkZW50aWFsS2luZCA9IGtleW9mIHR5cGVvZiBDUkVERU5USUFMX1JFVk9DQVRJT05fUFJFRklYO1xuXG4vKiogVGhlIHJldm9jYXRpb24ga2V5IGZvciBvbmUgc2Vzc2lvbiBzbG90IChgc2lkYCkgb3Igb25lIGFjY2VzcyBrZXkgKGBrZXlgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsUmV2b2NhdGlvbktleShraW5kOiBDcmVkZW50aWFsS2luZCwgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDUkVERU5USUFMX1JFVk9DQVRJT05fUFJFRklYW2tpbmRdfSR7aWR9YDtcbn1cblxuLyoqXG4gKiBBdG9taWMgXCJzZXQgaWYgZ3JlYXRlclwiIGZvciB0aGUgcGVyLXVzZXIgdG9rZW5WZXJzaW9uLiBBIHBsYWluIFNFVCBsZXQgdHdvXG4gKiBjb25jdXJyZW50IHB1Ymxpc2hlcyBsYW5kIG91dCBvZiBvcmRlciDigJQgYW4gb2xkZXIgdmVyc2lvbiBvdmVyd3JpdGluZyBhIG5ld2VyXG4gKiBvbmUgc2lsZW50bHkgVU4tcmV2b2tlZCBldmVyeSB0b2tlbiBiZXR3ZWVuIHRoZW0uIFRoZSBzY3JpcHQgb25seSBldmVyIHJhaXNlc1xuICogdGhlIHN0b3JlZCB2ZXJzaW9uLCBhbmQgb25seSBldmVyIGxlbmd0aGVucyB0aGUgZW50cnkncyBUVEwuXG4gKlxuICogS0VZU1sxXSA9IHJldm9jYXRpb24ga2V5OyBBUkdWWzFdID0gdmVyc2lvbjsgQVJHVlsyXSA9IHR0bCBzZWNvbmRzLlxuICogUmV0dXJucyAxIHdoZW4gaXQgd3JvdGUsIDAgd2hlbiBhbiBlcXVhbC1vci1uZXdlciB2ZXJzaW9uIHdhcyBhbHJlYWR5IHRoZXJlLlxuICovXG5leHBvcnQgY29uc3QgU0VUX0lGX0dSRUFURVJfTFVBID0gYFxubG9jYWwgY3VyID0gdG9udW1iZXIocmVkaXMuY2FsbCgnR0VUJywgS0VZU1sxXSkpXG5sb2NhbCB2ID0gdG9udW1iZXIoQVJHVlsxXSlcbmxvY2FsIHR0bCA9IHRvbnVtYmVyKEFSR1ZbMl0pXG5pZiBjdXIgYW5kIGN1ciA+PSB2IHRoZW5cbiAgaWYgcmVkaXMuY2FsbCgnVFRMJywgS0VZU1sxXSkgPCB0dGwgdGhlbiByZWRpcy5jYWxsKCdFWFBJUkUnLCBLRVlTWzFdLCB0dGwpIGVuZFxuICByZXR1cm4gMFxuZW5kXG5yZWRpcy5jYWxsKCdTRVQnLCBLRVlTWzFdLCBBUkdWWzFdLCAnRVgnLCB0dGwpXG5yZXR1cm4gMVxuYDtcblxuLyoqXG4gKiBCdWlsZCBhIHtAbGluayBUb2tlblJldm9jYXRpb25TdG9yZX0gYmFja2VkIGJ5IGEgUmVkaXMgY2xpZW50LCBmb3IgYSBzdGF0ZWxlc3NcbiAqIHNlcnZpY2UgdG8gcmVnaXN0ZXIgdmlhIGBzZXRUb2tlblJldm9jYXRpb25TdG9yZWAuIFJlYWRzIHRoZSBjdXJyZW50XG4gKiBgdG9rZW5WZXJzaW9uYCB0aGUgcGxhdGZvcm0gcHVibGlzaGVkIGZvciB0aGUgdXNlci5cbiAqXG4gKiBGYWlsLW9wZW4gYnkgY29udHJhY3Q6IGEgbWlzcywgYSBwYXJzZSBmYWlsdXJlLCBvciBhIFJlZGlzIGVycm9yIGFsbCB5aWVsZFxuICogYG51bGxgICjigJQgYHJlcXVpcmVBdXRoYCB0cmVhdHMgdGhhdCBhcyBcIm5vIGtub3duIHJldm9jYXRpb25cIiksIHNvIGEgUmVkaXNcbiAqIG91dGFnZSBkZWdyYWRlcyB0byB0aGUgcHJlLWV4aXN0aW5nIGJlaGF2aW91ciByYXRoZXIgdGhhbiBsb2NraW5nIHVzZXJzIG91dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXM6IFJlZGlzQ2FjaGVDbGllbnQpOiBUb2tlblJldm9jYXRpb25TdG9yZSB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0Q3VycmVudFZlcnNpb24odXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlZGlzLmdldCh0b2tlblJldm9jYXRpb25LZXkodXNlcklkKSk7XG4gICAgICAgIGlmIChyYXcgPT09IG51bGwgfHwgcmF3ID09PSB1bmRlZmluZWQgfHwgcmF3LnRyaW0oKSA9PT0gJycpIHJldHVybiBudWxsO1xuICAgICAgICAvLyBTdHJpY3QgaW50ZWdlciBwYXJzZTogYE51bWJlcmAgKHVubGlrZSBgcGFyc2VJbnRgKSByZWplY3RzIHRyYWlsaW5nXG4gICAgICAgIC8vIGdhcmJhZ2UgKFwiNWFiY1wiIOKGkiBOYU4pLCBzbyBhIGNvcnJ1cHRlZCBlbnRyeSBmYWlscyBvcGVuIChudWxsIOKGkiBcIm5vdFxuICAgICAgICAvLyByZXZva2VkXCIpIHJhdGhlciB0aGFuIGJlaW5nIHJlYWQgYXMgYSBib2d1cyB2ZXJzaW9uLiBUaGUgZW1wdHktc3RyaW5nXG4gICAgICAgIC8vIGd1YXJkIGFib3ZlIG1hdHRlcnMgYmVjYXVzZSBgTnVtYmVyKCcnKWAgaXMgMCwgbm90IE5hTi5cbiAgICAgICAgY29uc3QgbiA9IE51bWJlcihyYXcpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihuKSA/IG4gOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIFJlZGlzIHdhcyByZWFjaGFibGUgZW5vdWdoIHRvIHRyeSBidXQgdGhlIHJlYWQgZXJyb3JlZCDigJQgdGhpcyBpcyBhXG4gICAgICAgIC8vIERFR1JBREFUSU9OOiB3aGlsZSBpdCBwZXJzaXN0cywgZm9yY2VkIGxvZ291dHMgLyBwcml2aWxlZ2UgcmV2b2NhdGlvbnNcbiAgICAgICAgLy8gc2lsZW50bHkgc3RvcCB0YWtpbmcgZWZmZWN0IHVudGlsIG5hdHVyYWwgdG9rZW4gZXhwaXJ5LiBFbWl0IGEgY291bnRlclxuICAgICAgICAvLyBzbyBgVG9rZW5SZXZvY2F0aW9uRmFpbGluZ09wZW5gIGNhbiBhbGVydCBvbiBhIFNVU1RBSU5FRCByYXRlIChtaXJyb3JzXG4gICAgICAgIC8vIHRoZSBxdW90YV9mYWlsX29wZW5fdG90YWwgcGF0dGVybikuIE5vdCBlbWl0dGVkIGZvciB0aGUgXCJSZWRpcyBub3RcbiAgICAgICAgLy8gY29uZmlndXJlZFwiIHBhdGggKGNyZWF0ZUVudlJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUg4oaSIG51bGwgY2xpZW50KSxcbiAgICAgICAgLy8gd2hpY2ggaXMgYSBkZWxpYmVyYXRlIG9wdC1vdXQsIG5vdCBhIGRlZ3JhZGF0aW9uLlxuICAgICAgICBlbWl0Q291bnRlcigndG9rZW5fcmV2b2NhdGlvbl9mYWlsX29wZW5fdG90YWwnLCB7IHJlYXNvbjogJ3JlYWQtZXJyb3InIH0pO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1Rva2VuLXJldm9jYXRpb24gcmVhZCBmYWlsZWQgKGZhaWwtb3BlbiknLCB7XG4gICAgICAgICAgdXNlcklkLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGdldFNlc3Npb25SZXZvY2F0aW9uKGp0aTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uUmV2b2NhdGlvblN0YXRlPiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBhd2FpdCByZWRpcy5nZXQoc2Vzc2lvblJldm9jYXRpb25LZXkoanRpKSk7XG4gICAgICAgIHJldHVybiByYXcgPT09IG51bGwgfHwgcmF3ID09PSB1bmRlZmluZWQgPyAnbGl2ZScgOiAncmV2b2tlZCc7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gTk9UIGZhaWwtb3BlbiwgdW5saWtlIGdldEN1cnJlbnRWZXJzaW9uIGFib3ZlOiBgdW5hdmFpbGFibGVgIHJlamVjdHNcbiAgICAgICAgLy8gdGhlIGltcGVyc29uYXRpb24gdG9rZW4uIENvdW50ZWQgc28gYSBzdXN0YWluZWQgb3V0YWdlIOKAlCB3aGljaCBzdG9wc1xuICAgICAgICAvLyBzdXBwb3J0IGltcGVyc29uYXRpb24gZXZlcnl3aGVyZSDigJQgaXMgdmlzaWJsZSBhbmQgYWxlcnRhYmxlLlxuICAgICAgICBlbWl0Q291bnRlcignc2Vzc2lvbl9yZXZvY2F0aW9uX3VuYXZhaWxhYmxlX3RvdGFsJywgeyByZWFzb246ICdyZWFkLWVycm9yJyB9KTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdTZXNzaW9uLXJldm9jYXRpb24gcmVhZCBmYWlsZWQgKHJlamVjdGluZyBpbXBlcnNvbmF0aW9uIHRva2VuKScsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGlzQ3JlZGVudGlhbFJldm9rZWQocmVmczogQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCBrZXlzID0gW1xuICAgICAgICAuLi4ocmVmcy5zaWQgPyBbY3JlZGVudGlhbFJldm9jYXRpb25LZXkoJ3NpZCcsIHJlZnMuc2lkKV0gOiBbXSksXG4gICAgICAgIC4uLnJlZnMua2V5SWRzLm1hcCgoaWQpID0+IGNyZWRlbnRpYWxSZXZvY2F0aW9uS2V5KCdrZXknLCBpZCkpLFxuICAgICAgXTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoa2V5cy5tYXAoKGspID0+IHJlZGlzLmdldChrKSkpO1xuICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoKHYpID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGYWlsLW9wZW4sIGxpa2UgZ2V0Q3VycmVudFZlcnNpb246IGEgb25lLWNyZWRlbnRpYWwgcmV2b2NhdGlvbiBpcyB0aGVcbiAgICAgICAgLy8gc2FtZSBjbGFzcyBvZiBzaWduYWwgYXMgYSB0b2tlblZlcnNpb24gYnVtcCwgYW5kIGEgUmVkaXMgb3V0YWdlIG11c3RcbiAgICAgICAgLy8gbm90IGxvY2sgZXZlcnkgc2Vzc2lvbiBvdXQuIENvdW50ZWQgc28gaXQgaXMgYWxlcnRhYmxlLlxuICAgICAgICBlbWl0Q291bnRlcigndG9rZW5fcmV2b2NhdGlvbl9mYWlsX29wZW5fdG90YWwnLCB7IHJlYXNvbjogJ2NyZWRlbnRpYWwtcmVhZC1lcnJvcicgfSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ3JlZGVudGlhbC1yZXZvY2F0aW9uIHJlYWQgZmFpbGVkIChmYWlsLW9wZW4pJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEge0BsaW5rIFRva2VuUmV2b2NhdGlvblN0b3JlfSBiYWNrZWQgYnkgYSBSZWRpcyBjbGllbnQgdGhhdCBpcyBsYXppbHlcbiAqIGNvbnN0cnVjdGVkIGZyb20gdGhlIHN0YW5kYXJkIGBSRURJU19VUkxgIG9yIGBSRURJU19TRU5USU5FTFNgIGVudiDigJRcbiAqIGZvciBhIHN0YXRlbGVzcyBzZXJ2aWNlIHRoYXQga2VlcHMgTk8gUmVkaXMgY2xpZW50IG9mIGl0cyBvd24uIFRoZSBjbGllbnQgaXNcbiAqIGJ1aWx0IG9uIGZpcnN0IGBnZXRDdXJyZW50VmVyc2lvbmAgY2FsbCBhbmQgbWVtb2l6ZWQ7IGBpb3JlZGlzYCBpcyBsb2FkZWQgdmlhXG4gKiBhIGd1YXJkZWQgZHluYW1pYyByZXF1aXJlIHNvIG1lcmVseSBpbXBvcnRpbmcgdGhpcyBuZXZlciBicmVha3MgYSBidWlsZC90ZXN0XG4gKiB3aGVyZSBSZWRpcyBpc24ndCBwcmVzZW50LlxuICpcbiAqIEZVTExZIEZBSUwtT1BFTjogbm8gZW52IGNvbmZpZ3VyZWQsIGFuIGlvcmVkaXMgbG9hZCBmYWlsdXJlLCBhIGNvbm5lY3QgZXJyb3IsXG4gKiBvciBhbnkgcmVhZCBmYWlsdXJlIGFsbCByZXNvbHZlIHRvIGBudWxsYCAoXCJubyBrbm93biByZXZvY2F0aW9uXCIpLCBzbyBhXG4gKiBzZXJ2aWNlIGRlZ3JhZGVzIHRvIG5hdHVyYWwgdG9rZW4gZXhwaXJ5IHJhdGhlciB0aGFuIGxvY2tpbmcgdXNlcnMgb3V0LiBBXG4gKiBzZXJ2aWNlIG9wdHMgaW4gd2l0aCBhIHNpbmdsZSBib290IGxpbmU6XG4gKiAgIGBzZXRUb2tlblJldm9jYXRpb25TdG9yZShjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKCkpO2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudlJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUoKTogVG9rZW5SZXZvY2F0aW9uU3RvcmUge1xuICB0eXBlIFJlYWRlclJlZGlzID0gUmVkaXNDYWNoZUNsaWVudCAmIFJlYWR5QXdhcmVSZWRpcztcbiAgLy8gdW5kZWZpbmVkID0gbm90IHlldCBhdHRlbXB0ZWQ7IG51bGwgPSBhdHRlbXB0ZWQgYW5kIHVuYXZhaWxhYmxlIChzdGF5IG9mZikuXG4gIGxldCBjYWNoZWQ6IFJlYWRlclJlZGlzIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlYWR5OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFkZXIgY2xpZW50LCBidWlsdCBvbiBmaXJzdCB1c2UuIFRoZSBlbnYgY2xpZW50IGhhcyBubyBvZmZsaW5lIHF1ZXVlLFxuICAgKiBzbyBhIEdFVCBiZWZvcmUgdGhlIGZpcnN0IGNvbm5lY3Rpb24gY29tcGxldGVzIGlzIHJlamVjdGVkIOKAlCB3aGljaCBtYWRlIHRoZVxuICAgKiBGSVJTVCBpbXBlcnNvbmF0aW9uIGNoZWNrIG9uIGV2ZXJ5IHBvZCByZWFkICd1bmF2YWlsYWJsZScgKDQwMSkuIFdhaXRcbiAgICogKGJvdW5kZWQsIG5ldmVyIHJlamVjdGluZykgZm9yIHJlYWRpbmVzczsgYSBnZW51aW5lbHkgZG93biBSZWRpcyB0aGVuIGtlZXBzXG4gICAqIHRoZSBleGlzdGluZyBmYWlsLW9wZW4gLyAndW5hdmFpbGFibGUnIHNlbWFudGljcy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGNsaWVudCgpOiBQcm9taXNlPFJlYWRlclJlZGlzIHwgbnVsbD4ge1xuICAgIGlmIChjYWNoZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2hhcmVkIGVudi1jb25maWd1cmVkIGlvcmVkaXMgY29uc3RydWN0aW9uIChlcnJvciBsaXN0ZW5lciBhdHRhY2hlZCwgbnVsbFxuICAgICAgLy8gd2hlbiBSZWRpcyBpc24ndCBjb25maWd1cmVkKTsgdGhlIHJlYWRlciBzdGF5cyBmYWlsLW9wZW4g4oCUIGEgbnVsbCBjbGllbnRcbiAgICAgIC8vIGp1c3QgZmFsbHMgYmFjayB0byBuYXR1cmFsIHRva2VuIGV4cGlyeS5cbiAgICAgIGNhY2hlZCA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PFJlYWRlclJlZGlzPigncmV2b2NhdGlvbi1yZWFkZXInKTtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1JlZGlzIHRva2VuLXJldm9jYXRpb24gcmVhZGVyIGluaXRpYWxpemVkJyk7XG4gICAgICAgIHJlYWR5ID0gY3JlYXRlUmVkaXNSZWFkeUdhdGUoY2FjaGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlYWR5KSBhd2FpdCByZWFkeSgpO1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldEN1cnJlbnRWZXJzaW9uKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgICBjb25zdCByZWRpcyA9IGF3YWl0IGNsaWVudCgpO1xuICAgICAgaWYgKCFyZWRpcykgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gY3JlYXRlUmVkaXNUb2tlblJldm9jYXRpb25TdG9yZShyZWRpcykuZ2V0Q3VycmVudFZlcnNpb24odXNlcklkKTtcbiAgICB9LFxuICAgIGFzeW5jIGdldFNlc3Npb25SZXZvY2F0aW9uKGp0aTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uUmV2b2NhdGlvblN0YXRlPiB7XG4gICAgICBjb25zdCByZWRpcyA9IGF3YWl0IGNsaWVudCgpO1xuICAgICAgLy8gTm8gUmVkaXMgY29uZmlndXJlZCDih5IgdGhlcmUgaXMgbm8gd2F5IHRvIGxlYXJuIGEgc2Vzc2lvbiB3YXMgZW5kZWQsIHNvXG4gICAgICAvLyBhbiBpbXBlcnNvbmF0aW9uIHRva2VuIGNhbid0IGJlIHRydXN0ZWQuIEV2ZXJ5IHJlYWwgZGVwbG95bWVudCBydW5zIFJlZGlzXG4gICAgICAvLyAodGhlIGJ1aWxkIHF1ZXVlIG5lZWRzIGl0KSwgc28gdGhpcyBvbmx5IGJpdGVzIGEgbWlzY29uZmlndXJlZCBzZXJ2aWNlLlxuICAgICAgaWYgKCFyZWRpcykge1xuICAgICAgICBlbWl0Q291bnRlcignc2Vzc2lvbl9yZXZvY2F0aW9uX3VuYXZhaWxhYmxlX3RvdGFsJywgeyByZWFzb246ICdub3QtY29uZmlndXJlZCcgfSk7XG4gICAgICAgIHJldHVybiAndW5hdmFpbGFibGUnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXMpLmdldFNlc3Npb25SZXZvY2F0aW9uIShqdGkpO1xuICAgIH0sXG4gICAgYXN5bmMgaXNDcmVkZW50aWFsUmV2b2tlZChyZWZzOiBDcmVkZW50aWFsUmV2b2NhdGlvblJlZnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIGNvbnN0IHJlZGlzID0gYXdhaXQgY2xpZW50KCk7XG4gICAgICBpZiAoIXJlZGlzKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gY3JlYXRlUmVkaXNUb2tlblJldm9jYXRpb25TdG9yZShyZWRpcykuaXNDcmVkZW50aWFsUmV2b2tlZCEocmVmcyk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQdWJsaXNoIGEgdXNlcidzIGN1cnJlbnQgYHRva2VuVmVyc2lvbmAgc28gdGhlIHN0YXRlbGVzcyBzZXJ2aWNlcyBzZWUgdGhlXG4gKiByZXZvY2F0aW9uIGltbWVkaWF0ZWx5IChwbGF0Zm9ybSBzaWRlKS4gQmVzdC1lZmZvcnQg4oCUIG5ldmVyIHRocm93czsgYSBmYWlsdXJlXG4gKiBqdXN0IG1lYW5zIHRoZSBzZXJ2aWNlcyBmYWxsIGJhY2sgdG8gbmF0dXJhbCB0b2tlbiBleHBpcnkgZm9yIHRoaXMgY2hhbmdlLlxuICpcbiAqIFRoZSB3cml0ZSBpcyBhbiBhdG9taWMgc2V0LWlmLWdyZWF0ZXIgKHtAbGluayBTRVRfSUZfR1JFQVRFUl9MVUF9KSwgc28gYW5cbiAqIG91dC1vZi1vcmRlciBwdWJsaXNoIGNhbiBuZXZlciBsb3dlciB0aGUgc3RvcmVkIHZlcnNpb24uXG4gKlxuICogVGhlIGtleSBpcyB3cml0dGVuIHdpdGggYSBUVEwgZXF1YWwgdG8gdGhlIGFjY2Vzcy10b2tlbiBsaWZldGltZTogYW55IHRva2VuXG4gKiB0aGF0IGNvdWxkIHN0aWxsIGNhcnJ5IGFuIG9sZGVyIHZlcnNpb24gaGFzIGV4cGlyZWQgYnkgdGhlIHRpbWUgdGhlIGVudHJ5XG4gKiBsYXBzZXMsIHNvIGFuIGV4cGlyZWQgZW50cnkgY2FuIG5ldmVyIGNhdXNlIGEgZmFsc2UgXCJyZXZva2VkXCIgbm9yIGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gcmVkaXMgLSB0aGUgcGxhdGZvcm0ncyBSZWRpcyBjbGllbnRcbiAqIEBwYXJhbSB1c2VySWQgLSB0aGUgdXNlciB3aG9zZSBzZXNzaW9ucyBjaGFuZ2VkXG4gKiBAcGFyYW0gdG9rZW5WZXJzaW9uIC0gdGhlIHVzZXIncyBORVcgKHBvc3QtaW5jcmVtZW50KSB0b2tlblZlcnNpb25cbiAqIEBwYXJhbSB0dGxTZWNvbmRzIC0gYWNjZXNzLXRva2VuIGxpZmV0aW1lIGluIHNlY29uZHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2hUb2tlblJldm9jYXRpb24oXG4gIHJlZGlzOiBSZWRpc0NhY2hlQ2xpZW50LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgdG9rZW5WZXJzaW9uOiBudW1iZXIsXG4gIHR0bFNlY29uZHM6IG51bWJlcixcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIC8vIEF0b21pYyBzZXQtaWYtZ3JlYXRlcjogY29uY3VycmVudCBwdWJsaXNoZXMgY2FuIGFycml2ZSBvdXQgb2Ygb3JkZXIsIGFuZCBhXG4gICAgLy8gcGxhaW4gU0VUIHdvdWxkIGxldCB0aGUgb2xkZXIgdmVyc2lvbiB3aW4uIEEgY2xpZW50IHRoYXQgY2FuJ3QgcnVuIEx1YSBpc1xuICAgIC8vIHJlZnVzZWQgKGNhdWdodCBiZWxvdykgcmF0aGVyIHRoYW4gd3JpdHRlbiByYWNpbHkuXG4gICAgaWYgKHR5cGVvZiByZWRpcy5ldmFsICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlzIGNsaWVudCBjYW5ub3QgcnVuIHNjcmlwdHMgKGV2YWwgdW5hdmFpbGFibGUpJyk7XG4gICAgYXdhaXQgcmVkaXMuZXZhbChTRVRfSUZfR1JFQVRFUl9MVUEsIDEsIHRva2VuUmV2b2NhdGlvbktleSh1c2VySWQpLCBTdHJpbmcodG9rZW5WZXJzaW9uKSwgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih0dGxTZWNvbmRzKSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybignVG9rZW4tcmV2b2NhdGlvbiBwdWJsaXNoIGZhaWxlZCAoc2VydmljZXMgZmFsbCBiYWNrIHRvIHRva2VuIGV4cGlyeSknLCB7XG4gICAgICB1c2VySWQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFB1Ymxpc2ggdGhhdCBvbmUgSU1QRVJTT05BVElPTiBzZXNzaW9uIGhhcyBlbmRlZCwgc28gZXZlcnkgc3RhdGVsZXNzIHNlcnZpY2VcbiAqIHJlamVjdHMgaXRzIHRva2VuIG9uIHRoZSBuZXh0IHJlcXVlc3QgKHBsYXRmb3JtIHNpZGUpLlxuICpcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHVibGlzaCBsYW5kZWQg4oCUIHVubGlrZSBgcHVibGlzaFRva2VuUmV2b2NhdGlvbmAsIHdoaWNoIGlzXG4gKiBmaXJlLWFuZC1mb3JnZXQuIFRoZSBjYWxsZXIgbXVzdCBiZSBhYmxlIHRvIHRlbGwgdGhlIHBlcnNvbiB3aG8gZW5kZWQgdGhlXG4gKiBzZXNzaW9uIHRoYXQgaXQgZGlkIE5PVCBlbmQgZXZlcnl3aGVyZSwgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHN1Y2Nlc3Mgd2hpbGVcbiAqIHRoZSB0b2tlbiBzdGlsbCB3b3JrcyBhZ2FpbnN0IG90aGVyIHNlcnZpY2VzLlxuICpcbiAqIFRoZSBlbnRyeSBleHBpcmVzIHdpdGggdGhlIHNlc3Npb246IG9uY2UgdGhlIHRva2VuIGl0c2VsZiBjYW4gbm8gbG9uZ2VyIGJlXG4gKiB1c2VkLCB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gcmV2b2tlLCBzbyB0aGUga2V5IGNsZWFucyBpdHNlbGYgdXAuXG4gKlxuICogQHBhcmFtIHR0bE1zIC0gdGltZSByZW1haW5pbmcgb24gdGhlIHNlc3Npb24ncyB0b2tlblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaFNlc3Npb25SZXZvY2F0aW9uKFxuICByZWRpczogUmVkaXNDYWNoZUNsaWVudCxcbiAganRpOiBzdHJpbmcsXG4gIHR0bE1zOiBudW1iZXIsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCByZWRpcy5zZXQoc2Vzc2lvblJldm9jYXRpb25LZXkoanRpKSwgJzEnLCAnUFgnLCBNYXRoLm1heCgxMDAwLCBNYXRoLmNlaWwodHRsTXMpKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdTZXNzaW9uLXJldm9jYXRpb24gcHVibGlzaCBmYWlsZWQgKG90aGVyIHNlcnZpY2VzIHdpbGwgaG9ub3VyIHRoZSB0b2tlbiB1bnRpbCBpdCBleHBpcmVzKScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoIHRoYXQgT05FIGNyZWRlbnRpYWwg4oCUIGEgc2Vzc2lvbiBzbG90IChgc2lkYCkgb3IgYW4gYWNjZXNzIGtleVxuICogKGBrZXlgKSDigJQgaGFzIGJlZW4gcmV2b2tlZCwgc28gZXZlcnkgc2VydmljZSByZWplY3RzIHRoZSB0b2tlbnMgdGhhdCBuYW1lIGl0XG4gKiBvbiB0aGUgbmV4dCByZXF1ZXN0IChwbGF0Zm9ybSBzaWRlKS5cbiAqXG4gKiBgdHRsU2Vjb25kc2AgTVVTVCBiZSBhdCBsZWFzdCB0aGUgbG9uZ2VzdCBsaWZldGltZSBvZiBhbnkgdG9rZW4gdGhhdCBjYW5cbiAqIGNhcnJ5IHRoaXMgaWQgKGFuIGFjY2VzcyB0b2tlbiBtaW50ZWQgZnJvbSB0aGUgc2xvdCwgYW4gZXhjaGFuZ2VkIGtleSB0b2tlbixcbiAqIG9yIGEgdG9rZW4gZGVyaXZlZCBmcm9tIG9uZSk6IHRoZSBlbnRyeSBsYXBzaW5nIGZpcnN0IHdvdWxkIHJlYWQgYXMgXCJub3RcbiAqIHJldm9rZWRcIiB3aGlsZSBzdWNoIGEgdG9rZW4gaXMgc3RpbGwgYWxpdmUuXG4gKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwdWJsaXNoIGxhbmRlZCwgc28gdGhlIGNhbGxlciBjYW4gcmVwb3J0IGEgcmV2b2NhdGlvblxuICogdGhhdCBkaWQgbm90IHJlYWNoIHRoZSBvdGhlciBzZXJ2aWNlcyBpbnN0ZWFkIG9mIGNsYWltaW5nIHN1Y2Nlc3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoQ3JlZGVudGlhbFJldm9jYXRpb24oXG4gIHJlZGlzOiBSZWRpc0NhY2hlQ2xpZW50LFxuICBraW5kOiBDcmVkZW50aWFsS2luZCxcbiAgaWQ6IHN0cmluZyxcbiAgdHRsU2Vjb25kczogbnVtYmVyLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVkaXMuc2V0KGNyZWRlbnRpYWxSZXZvY2F0aW9uS2V5KGtpbmQsIGlkKSwgJzEnLCAnRVgnLCBNYXRoLm1heCgxLCBNYXRoLmNlaWwodHRsU2Vjb25kcykpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0NyZWRlbnRpYWwtcmV2b2NhdGlvbiBwdWJsaXNoIGZhaWxlZCAoc2VydmljZXMgaG9ub3VyIHRoZSBjcmVkZW50aWFsIHVudGlsIGl0cyB0b2tlbnMgZXhwaXJlKScsIHtcbiAgICAgIGtpbmQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -40,6 +40,17 @@ export declare function scanStaleHours(): number;
40
40
  export interface ScannedRecord extends PluginImageRow {
41
41
  name: string;
42
42
  version: string;
43
+ /**
44
+ * The org that OWNS this plugin/listing — NOT the consuming org on
45
+ * {@link VersionVulnInput}, which is whoever is asking. Vulnerability waivers
46
+ * are the operator's and are system-org-only, so without this the module
47
+ * could not apply them at all: a Critical the operator had waived still
48
+ * reported as an `error` to every tenant resolving the version, long after it
49
+ * stopped blocking the build and the listing. Optional because most callers
50
+ * have no owner to hand (a tenant's own row is its own owner) and absent means
51
+ * "no waiver applies", which is the safe direction.
52
+ */
53
+ ownerOrgId?: string | null;
43
54
  scannedAt?: Date | string | null;
44
55
  scanSummary?: unknown;
45
56
  scanFlaggedAt?: Date | string | null;
@@ -29,7 +29,7 @@
29
29
  import { createComplianceClient } from './compliance-client.js';
30
30
  import { getServiceAuthHeader } from '../middleware/service-tokens.js';
31
31
  import { isSystemOrgId } from '../middleware/system-org.js';
32
- import { asScanFlag, describeFindings, failOnLabel, isGatedFinding, pluginVulnGateKev, scanFindingKey, } from '../types/plugin-scan.js';
32
+ import { applyVulnWaivers, asScanFlag, describeFindings, failOnLabel, isGatedFinding, pluginVulnGateKev, scanFindingKey, summaryContradicts, } from '../types/plugin-scan.js';
33
33
  import { envInt } from '../utils/env.js';
34
34
  import { derivePluginImageCompliance, pluginRunsOwnImage } from '../utils/plugin-compliance.js';
35
35
  import { errorMessage } from '../utils/response.js';
@@ -104,8 +104,13 @@ export function scanWarnings(record, now = new Date()) {
104
104
  export function versionScanFacts(record) {
105
105
  const flag = record.scanFlaggedAt ? asScanFlag(record.scanFlag) : null;
106
106
  const raw = summaryOf(record);
107
- const digest = typeof raw?.imageDigest === 'string' ? raw.imageDigest : null;
108
- const summary = raw && (digest === null || !record.imageDigest || digest === record.imageDigest) ? raw : null;
107
+ // CONTRADICTS, not describes — the permissive half of the pair, deliberately.
108
+ // A digest-less summary is the only findings this reader has; discarding it
109
+ // makes the warning quieter and the delete-safety refusal less informative,
110
+ // which is the wrong failure for a consumer-facing grade. The publish gate
111
+ // asks the strict question because ITS wrong failure is listing something
112
+ // unvetted. See the note on `summaryDescribes`.
113
+ const summary = raw && !summaryContradicts(raw, typeof record.imageDigest === 'string' ? record.imageDigest : null) ? raw : null;
109
114
  const findings = summary && Array.isArray(summary.findings)
110
115
  ? summary.findings.filter((f) => f && typeof f.id === 'string').map((f) => ({ ...f, fixedIn: Array.isArray(f.fixedIn) ? f.fixedIn : [] }))
111
116
  : (flag?.findings ?? []);
@@ -114,6 +119,15 @@ export function versionScanFacts(record) {
114
119
  return {
115
120
  flagged: flag !== null,
116
121
  flag,
122
+ // NOT falling back to `record.vulnCriticalFixable`, though `highFixable`
123
+ // does fall back to its column one line down. The asymmetry is real and
124
+ // predates this module's current shape; closing it here would raise
125
+ // VULN_CRITICAL_FIXABLE for every record that has the column set and no
126
+ // summary at all — a broad change to warning VOLUME, which is a product
127
+ // decision rather than a consequence of tightening the digest check above.
128
+ // The digest change only affects records whose summary names another image,
129
+ // and those fall back to the flag's findings exactly as a summary-less
130
+ // record always has.
117
131
  criticalFixable: num(summary?.criticalFixable),
118
132
  highFixable: num(summary?.highFixable) ?? num(record.vulnHighFixable),
119
133
  critical: num(summary?.critical),
@@ -180,9 +194,21 @@ export async function assessVersionVulns(input) {
180
194
  const gated = facts.findings.filter((f) => isGatedFinding(f, pluginVulnGateKev(), flag.failOn ?? 'critical'));
181
195
  finding('VULN_FLAGGED', 'error', `${ref} is flagged: a rescan found ${flag.gated} gated ${failOnLabel(flag.failOn ?? 'critical')} finding${flag.gated === 1 ? '' : 's'} over the platform limit${flag.findings.length ? ` (fix: ${describeFindings(flag.findings)})` : ''}.`, gated.length > 0 ? gated : flag.findings, { plugin: record.name, version: record.version, gated: flag.gated, high: flag.high });
182
196
  }
183
- else if ((facts.criticalFixable ?? 0) > 0) {
184
- const crits = facts.findings.filter((f) => f.severity === 'critical' && f.fixedIn.length > 0);
185
- finding('VULN_CRITICAL_FIXABLE', 'error', `${ref} has ${facts.criticalFixable} fixable Critical finding${facts.criticalFixable === 1 ? '' : 's'}${crits.length ? `: ${describeFindings(crits)}` : ''}.`, crits);
197
+ else {
198
+ // WAIVER-AWARE, which this branch could not be until the record carried its
199
+ // owner. Derived from the findings when they can carry the answer — the
200
+ // same rule `gatedFindingCount` applies — and from the raw column when they
201
+ // cannot (truncated, or none itemized), which keeps the warning rather than
202
+ // losing it. A waiver silences the warning only where it already silences
203
+ // the build floor and the publish gate.
204
+ const waivedKeys = new Set(applyVulnWaivers(record.name, facts.findings, undefined, now, record.ownerOrgId ?? undefined, record.version)
205
+ .waived.map(scanFindingKey));
206
+ const crits = facts.findings.filter((f) => f.severity === 'critical' && f.fixedIn.length > 0 && !waivedKeys.has(scanFindingKey(f)));
207
+ const derivable = !facts.truncated && facts.findings.length > 0;
208
+ const criticalFixable = derivable ? crits.length : (facts.criticalFixable ?? 0);
209
+ if (criticalFixable > 0) {
210
+ finding('VULN_CRITICAL_FIXABLE', 'error', `${ref} has ${criticalFixable} fixable Critical finding${criticalFixable === 1 ? '' : 's'}${crits.length ? `: ${describeFindings(crits)}` : ''}.`, crits);
211
+ }
186
212
  }
187
213
  const highFixable = facts.highFixable ?? 0;
188
214
  if (highFixable > 0) {
@@ -239,4 +265,4 @@ async function complianceVulnWarnings(orgId, record) {
239
265
  return [{ code: 'COMPLIANCE_UNAVAILABLE', severity: 'info', message: `Your organization's plugin vulnerability rules could not be checked for ${record.name}@${record.version} (${errorMessage(err)}).` }];
240
266
  }
241
267
  }
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi12dWxuLXBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy92ZXJzaW9uLXZ1bG4tcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFFSCxPQUFPLEVBQUUsc0JBQXNCLEVBQTRCLE1BQU0sd0JBQXdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFDTCxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEdBRTdGLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxrQkFBa0IsRUFBd0QsTUFBTSwrQkFBK0IsQ0FBQztBQUN0SixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBR2pGLG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQWUsRUFBRSxDQUFlO0lBQzFELE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLE1BQU0sVUFBVSxlQUFlLENBQUMsQ0FBZSxFQUFFLEtBQW1CO0lBQ2xFLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTyxNQUFNLENBQUMseUJBQXlCLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQWFELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBVSxFQUFlLEVBQUU7SUFDekMsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUEwQyxFQUFrQyxFQUFFLENBQy9GLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ2pHLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBc0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFNUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUF3RDtJQUNwRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUMzQixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzNCLE9BQU8sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDM0MsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixTQUFTLFFBQVEsQ0FBQyxNQUFxQjtJQUNyQyxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sTUFBTSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQy9HLENBQUM7QUFFRCxpR0FBaUc7QUFDakcsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFxQixFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRTtJQUNuRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNqRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25ILENBQUM7QUF1QkQsMEdBQTBHO0FBQzFHLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBcUIsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUU7SUFDbEUsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsR0FBRyw4RkFBOEYsRUFBRSxDQUFDLENBQUM7SUFDNUssQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUMvQixPQUFPLENBQUM7Z0JBQ04sSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixPQUFPLEVBQUUsVUFBVSxHQUFHLHFCQUFxQixDQUFDLENBQUMsU0FBVSxDQUFDLFdBQVcsRUFBRSxlQUFlLEtBQUssb0RBQW9EO2dCQUM3SSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JDLGVBQWUsRUFBRSxLQUFLO2FBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFzQ0QscUdBQXFHO0FBQ3JHLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFxQjtJQUNwRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkUsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE9BQU8sR0FBRyxFQUFFLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RSxNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5RyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3pELENBQUMsQ0FBRSxPQUFPLENBQUMsUUFBZ0MsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25LLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFVLEVBQWlCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakgsT0FBTztRQUNMLE9BQU8sRUFBRSxJQUFJLEtBQUssSUFBSTtRQUN0QixJQUFJO1FBQ0osZUFBZSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDO1FBQzlDLFdBQVcsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQ3JFLFFBQVEsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDeEIsR0FBRyxFQUFFLFFBQVE7UUFDYixRQUFRO1FBQ1IsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEtBQUssSUFBSTtRQUN0QyxTQUFTLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQztLQUNqQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxVQUE2QyxFQUFFLFFBQXNDLEVBQUUsU0FBa0I7SUFDdkgsSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUEwQkQsNERBQTREO0FBQzVELE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBb0Q7SUFDN0UsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hJLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLEtBQXVCO0lBQzlELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDcEQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLEdBQWtCLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNuQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFlBQVksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9GLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDO0lBRXZFLDRHQUE0RztJQUM1RyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQWlGLEVBQUUsUUFBc0IsRUFBRSxPQUFlLEVBQUUsUUFBNkIsRUFDeEssS0FBSyxHQUF5RSxFQUFFLEVBQUUsRUFBRTtRQUNwRixJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xELEtBQUssTUFBTSxDQUFDLElBQUksUUFBUTtnQkFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFELFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixPQUFPLEVBQUUsR0FBRyxPQUFPLDhCQUE4QixLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRztnQkFDbEYsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO2dCQUN0QyxhQUFhLEVBQUUsS0FBSztnQkFDcEIsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksS0FBSztnQkFDN0IsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDLENBQUM7WUFDSCxPQUFPO1FBQ1QsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFILENBQUMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2pFLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsb0RBQW9ELFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbE8sQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDeEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzlHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRywrQkFBK0IsSUFBSSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLDJCQUEyQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQzFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEksQ0FBQztTQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RixPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxRQUFRLEtBQUssQ0FBQyxlQUFlLDRCQUE0QixLQUFLLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsTixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7SUFDM0MsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtB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LENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNoRCxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUN6RCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07WUFDaEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3BCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztZQUNkLElBQUk7U0FDTCxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2SCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSwyRUFBMkUsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3TSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRIRSB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnQgb2Ygb25lIHJlc29sdmVkIHBsdWdpbiB2ZXJzaW9uLCBmb3Igb25lIG9yZyAoYW5kLFxuICogb3B0aW9uYWxseSwgb25lIHBpcGVsaW5lJ3MgcmlzayBhY2NlcHRhbmNlKS4gT25lIGZ1bmN0aW9uLCB0aHJlZSBjYWxsZXJzOlxuICogYC9wbHVnaW5zL2xvb2t1cGAgKHdoYXQgc3ludGggcGlucyksIGAvcGx1Z2lucy9ydW50aW1lLWNoZWNrYCAod2hhdCBhIHJ1bm5pbmdcbiAqIHBpcGVsaW5lIGlzIGFib3V0IHRvIGV4ZWN1dGUpIGFuZCB0aGUgcGlwZWxpbmUgc2VydmljZSdzIHNhdmUtdGltZSBjb250cmFjdFxuICogY2hlY2suIFRocmVlIGNvcGllcyBvZiB0aGVzZSBydWxlcyBkcmlmdGVkIG9uY2UgYWxyZWFkeS5cbiAqXG4gKiBWdWxuZXJhYmlsaXR5IHN0YXRlIE5FVkVSIHJlZnVzZXMgYSBwaXBlbGluZSDigJQgbm90IGl0cyBzYXZlLCBpdHMgc3ludGgsIGl0c1xuICogZGVwbG95IG9yIGl0cyBydW4uIFdoYXQgaXQgcHJvZHVjZXMgaXMgU0VWRVJJVFktR1JBREVEIHdhcm5pbmdzIChhbmQsIGZyb20gdGhlXG4gKiBjYWxsZXJzLCBub3RpZmljYXRpb25zIHRvIHRoZSBwaXBlbGluZSdzIG93bmVycykuIFRoZSBncmFkZXM6XG4gKlxuICogICBjcml0aWNhbCDigJQgYSBmaW5kaW5nIG9uIHRoZSBDSVNBIEtub3duIEV4cGxvaXRlZCBWdWxuZXJhYmlsaXRpZXMgbGlzdFxuICogICBlcnJvciAgICDigJQgdGhlIHZlcnNpb24gaXMgRkxBR0dFRCAoZ2F0ZWQgQ3JpdGljYWxzIG92ZXIgdGhlIHBsYXRmb3JtIGZsb29yKSxcbiAqICAgICAgICAgICAgICBpdCBoYXMgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncywgb3IgYW4gb3JnIGNvbXBsaWFuY2UgcnVsZSBvbiB0aGVcbiAqICAgICAgICAgICAgICB2dWxuZXJhYmlsaXR5IGF0dHJpYnV0ZXMgaXMgaW4gQkxPQ0sgbW9kZSBhbmQgZmFpbHNcbiAqICAgd2FybmluZyAg4oCUIGZpeGFibGUgSGlnaCBmaW5kaW5ncyBvdmVyIHRoZSBvcmcncyBgd2FybkZpeGFibGVIaWdoYCwgYSB2ZXJzaW9uXG4gKiAgICAgICAgICAgICAgbmV2ZXIgc2Nhbm5lZCwgYSBzY2FuIG9sZGVyIHRoYW4gYFBMVUdJTl9TQ0FOX1NUQUxFX0hPVVJTYCwgb3IgYVxuICogICAgICAgICAgICAgIGNvbXBsaWFuY2UgcnVsZSBpbiBXQVJOIG1vZGVcbiAqICAgaW5mbyAgICAg4oCUIHdoYXQgYSByZWFkZXIgbWF5IHdhbnQgdG8ga25vdyBidXQgbmVlZCBub3QgYWN0IG9uXG4gKlxuICogQSBQSVBFTElORSdzIGFjdGl2ZSByaXNrIGFjY2VwdGFuY2UgKGBwbHVnaW5fdnVsbl9leHBvc3VyZWAsIHRyaWFnZWQgYGFjY2VwdGVkYFxuICogd2l0aCBhIHJlYXNvbiBhbmQgYW4gZXhwaXJ5KSBkb3duZ3JhZGVzIHRoZSB3YXJuaW5ncyBhYm91dCB0aGUgZmluZGluZ3MgaXRcbiAqIEFDQ0VQVEVEIHRvIGBpbmZvYCAoXCJhY2NlcHRlZCB1bnRpbCDigKZcIikg4oCUIG5ldmVyIG9uZSBhYm91dCBhIGZpbmRpbmcgdGhhdFxuICogYXBwZWFyZWQgc2luY2UsIG5ldmVyIGEgS0VWIG9uZSB1bmxlc3MgdGhlIGFjY2VwdGFuY2Ugc2FpZCBga2V2OiB0cnVlYCwgYW5kXG4gKiBuZXZlciB0aGUgc2Nhbi1mcmVzaG5lc3Mgb3IgY29tcGxpYW5jZSB3YXJuaW5ncyAobmVpdGhlciBpcyBhYm91dCBhIGZpbmRpbmcpLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUNvbXBsaWFuY2VDbGllbnQsIHR5cGUgQ29tcGxpYW5jZVZpb2xhdGlvbiB9IGZyb20gJy4vY29tcGxpYW5jZS1jbGllbnQuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIgfSBmcm9tICcuLi9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IGlzU3lzdGVtT3JnSWQgfSBmcm9tICcuLi9taWRkbGV3YXJlL3N5c3RlbS1vcmcuanMnO1xuaW1wb3J0IHtcbiAgYXNTY2FuRmxhZywgZGVzY3JpYmVGaW5kaW5ncywgZmFpbE9uTGFiZWwsIGlzR2F0ZWRGaW5kaW5nLCBwbHVnaW5WdWxuR2F0ZUtldiwgc2NhbkZpbmRpbmdLZXksXG4gIHR5cGUgUGx1Z2luU2NhbkZpbmRpbmcsIHR5cGUgUGx1Z2luU2NhbkZsYWcsXG59IGZyb20gJy4uL3R5cGVzL3BsdWdpbi1zY2FuLmpzJztcbmltcG9ydCB7IGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBkZXJpdmVQbHVnaW5JbWFnZUNvbXBsaWFuY2UsIHBsdWdpblJ1bnNPd25JbWFnZSwgdHlwZSBQbHVnaW5Db21wbGlhbmNlQXR0cmlidXRlcywgdHlwZSBQbHVnaW5JbWFnZVJvdyB9IGZyb20gJy4uL3V0aWxzL3BsdWdpbi1jb21wbGlhbmNlLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuLyoqIEhvdyBsb3VkIGEgd2FybmluZyBpcywgcXVpZXRlc3QgZmlyc3QuICovXG5leHBvcnQgY29uc3QgVlVMTl9TRVZFUklUSUVTID0gWydpbmZvJywgJ3dhcm5pbmcnLCAnZXJyb3InLCAnY3JpdGljYWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFZ1bG5TZXZlcml0eSA9IHR5cGVvZiBWVUxOX1NFVkVSSVRJRVNbbnVtYmVyXTtcblxuLyoqIFRoZSBsb3VkZXIgb2YgdHdvIHNldmVyaXRpZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4U2V2ZXJpdHkoYTogVnVsblNldmVyaXR5LCBiOiBWdWxuU2V2ZXJpdHkpOiBWdWxuU2V2ZXJpdHkge1xuICByZXR1cm4gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YoYSkgPj0gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YoYikgPyBhIDogYjtcbn1cblxuLyoqIFdoZXRoZXIgYHNgIGlzIGF0IGxlYXN0IGBmbG9vcmAuICovXG5leHBvcnQgZnVuY3Rpb24gc2V2ZXJpdHlBdExlYXN0KHM6IFZ1bG5TZXZlcml0eSwgZmxvb3I6IFZ1bG5TZXZlcml0eSk6IGJvb2xlYW4ge1xuICByZXR1cm4gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YocykgPj0gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YoZmxvb3IpO1xufVxuXG4vKiogYFBMVUdJTl9TQ0FOX1NUQUxFX0hPVVJTYCAoZGVmYXVsdCA3Mik6IGEgc2NhbiBvbGRlciB0aGFuIHRoaXMgaXMgc3RhbGUuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhblN0YWxlSG91cnMoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudkludCgnUExVR0lOX1NDQU5fU1RBTEVfSE9VUlMnLCA3MiwgeyBtaW46IDEgfSk7XG59XG5cbi8qKiBUaGUgc2Nhbi1yZWxhdGVkIGZpZWxkcyBvZiBhIHJlc29sdmVkIHJlY29yZCAoYW4gb3JnIHJvdyBvciBhIGxpc3RlZCByZWNvcmQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FubmVkUmVjb3JkIGV4dGVuZHMgUGx1Z2luSW1hZ2VSb3cge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgc2Nhbm5lZEF0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHNjYW5TdW1tYXJ5PzogdW5rbm93bjtcbiAgc2NhbkZsYWdnZWRBdD86IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICBzY2FuRmxhZz86IHVua25vd247XG4gIHZ1bG5IaWdoRml4YWJsZT86IHVua25vd247XG59XG5cbmNvbnN0IHRvRGF0ZSA9ICh2OiB1bmtub3duKTogRGF0ZSB8IG51bGwgPT4ge1xuICBpZiAoIXYpIHJldHVybiBudWxsO1xuICBjb25zdCBkID0gdiBpbnN0YW5jZW9mIERhdGUgPyB2IDogbmV3IERhdGUoU3RyaW5nKHYpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZDtcbn07XG5cbmNvbnN0IHN1bW1hcnlPZiA9IChyZWNvcmQ6IFBpY2s8U2Nhbm5lZFJlY29yZCwgJ3NjYW5TdW1tYXJ5Jz4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPT5cbiAgKHJlY29yZC5zY2FuU3VtbWFyeSAmJiB0eXBlb2YgcmVjb3JkLnNjYW5TdW1tYXJ5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZWNvcmQuc2NhblN1bW1hcnkpXG4gICAgPyByZWNvcmQuc2NhblN1bW1hcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gOiBudWxsKTtcblxuLyoqXG4gKiBXaGVuIHRoZSB2ZXJzaW9uIHdhcyBsYXN0IHNjYW5uZWQ6IHRoZSBsYXRlciBvZiB0aGUgYnVpbGQtdGltZSBgc2Nhbm5lZEF0YCBhbmRcbiAqIHRoZSBuaWdodGx5IHJlc2NhbidzIGBzY2FuX3N1bW1hcnkuc2Nhbm5lZEF0YC4gTnVsbCA9IG5ldmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdFNjYW5uZWRBdChyZWNvcmQ6IFBpY2s8U2Nhbm5lZFJlY29yZCwgJ3NjYW5uZWRBdCcgfCAnc2NhblN1bW1hcnknPik6IERhdGUgfCBudWxsIHtcbiAgY29uc3QgYnVpbGQgPSB0b0RhdGUocmVjb3JkLnNjYW5uZWRBdCk7XG4gIGNvbnN0IHN1bW1hcnkgPSB0b0RhdGUoc3VtbWFyeU9mKHJlY29yZCk/LnNjYW5uZWRBdCk7XG4gIGlmICghYnVpbGQpIHJldHVybiBzdW1tYXJ5O1xuICBpZiAoIXN1bW1hcnkpIHJldHVybiBidWlsZDtcbiAgcmV0dXJuIHN1bW1hcnkgPiBidWlsZCA/IHN1bW1hcnkgOiBidWlsZDtcbn1cblxuLyoqIFdoZXRoZXIgdGhlIHJlY29yZCBydW5zIGEgQlVJTFQgaW1hZ2Ugb2YgaXRzIG93biDigJQgdGhlIG9ubHkgdGhpbmcgYSBzY2FuIGFwcGxpZXMgdG8uICovXG5mdW5jdGlvbiBoYXNJbWFnZShyZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBsdWdpblJ1bnNPd25JbWFnZShyZWNvcmQpICYmIHR5cGVvZiByZWNvcmQuaW1hZ2VEaWdlc3QgPT09ICdzdHJpbmcnICYmIHJlY29yZC5pbWFnZURpZ2VzdC5sZW5ndGggPiAwO1xufVxuXG4vKiogRnJlc2huZXNzIG9mIGEgdmVyc2lvbidzIHNjYW46IGBub25lYCAobm8gaW1hZ2UgdG8gc2NhbiksIGB1bnNjYW5uZWRgLCBgc3RhbGVgIG9yIGBmcmVzaGAuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhbkZyZXNobmVzcyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQsIG5vdyA9IG5ldyBEYXRlKCkpOiB7IHN0YXRlOiAnbm9uZScgfCAndW5zY2FubmVkJyB8ICdzdGFsZScgfCAnZnJlc2gnOyBzY2FubmVkQXQ6IERhdGUgfCBudWxsIH0ge1xuICBpZiAoIWhhc0ltYWdlKHJlY29yZCkpIHJldHVybiB7IHN0YXRlOiAnbm9uZScsIHNjYW5uZWRBdDogbnVsbCB9O1xuICBjb25zdCBhdCA9IGxhc3RTY2FubmVkQXQocmVjb3JkKTtcbiAgaWYgKCFhdCkgcmV0dXJuIHsgc3RhdGU6ICd1bnNjYW5uZWQnLCBzY2FubmVkQXQ6IG51bGwgfTtcbiAgcmV0dXJuIHsgc3RhdGU6IG5vdy5nZXRUaW1lKCkgLSBhdC5nZXRUaW1lKCkgPiBzY2FuU3RhbGVIb3VycygpICogM182MDBfMDAwID8gJ3N0YWxlJyA6ICdmcmVzaCcsIHNjYW5uZWRBdDogYXQgfTtcbn1cblxuLyoqIE9uZSBzZXZlcml0eS1ncmFkZWQgdnVsbmVyYWJpbGl0eSB3YXJuaW5nLiAqL1xuZXhwb3J0IHR5cGUgVnVsbldhcm5pbmcgPVxuICB8IHtcbiAgICBjb2RlOiAnVlVMTl9LRVYnIHwgJ1ZVTE5fRkxBR0dFRCcgfCAnVlVMTl9DUklUSUNBTF9GSVhBQkxFJyB8ICdWVUxOX0hJR0hfRklYQUJMRSc7XG4gICAgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eTtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG4gICAgc3VnZ2VzdGVkVmVyc2lvbj86IHN0cmluZztcbiAgICAvKiogYFZVTE5fRkxBR0dFRGAgY2FycmllcyB0aGUgZmxhZydzIGNvdW50cyAodGhlIHNoYXBlIHRoZSByZXNjYW4tZmxhZyB3YXJuaW5nIGFsd2F5cyBoYWQpLiAqL1xuICAgIHBsdWdpbj86IHN0cmluZztcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgIC8qKiBUaGUgZmxhZydzIGdhdGVkIGNvdW50IChmaW5kaW5ncyBhdCBvciBhYm92ZSBpdHMgYGZhaWxPbmApLiAqL1xuICAgIGdhdGVkPzogbnVtYmVyO1xuICAgIGhpZ2g/OiBudW1iZXI7XG4gIH1cbiAgfCB7IGNvZGU6ICdWVUxOX0FDQ0VQVEVEJzsgc2V2ZXJpdHk6ICdpbmZvJzsgbWVzc2FnZTogc3RyaW5nOyBmaW5kaW5nczogc3RyaW5nW107IGFjY2VwdGVkVW50aWw6IHN0cmluZyB8IG51bGw7IGtldjogYm9vbGVhbjsgY292ZXJzOiBzdHJpbmcgfVxuICB8IHsgY29kZTogJ1VOU0NBTk5FRCc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZyB9XG4gIHwgeyBjb2RlOiAnU0NBTl9TVEFMRSc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZzsgc2Nhbm5lZEF0OiBzdHJpbmc7IHN0YWxlQWZ0ZXJIb3VyczogbnVtYmVyIH1cbiAgfCB7IGNvZGU6ICdDT01QTElBTkNFX1ZVTE5fUlVMRSc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZzsgcnVsZUlkOiBzdHJpbmc7IHJ1bGVOYW1lOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IG1vZGU6ICdibG9jaycgfCAnd2FybicgfVxuICB8IHsgY29kZTogJ0NPTVBMSUFOQ0VfVU5BVkFJTEFCTEUnOyBzZXZlcml0eTogVnVsblNldmVyaXR5OyBtZXNzYWdlOiBzdHJpbmcgfTtcblxuLyoqIGBVTlNDQU5ORURgIC8gYFNDQU5fU1RBTEVgIGZvciBhIHJlc29sdmVkIHZlcnNpb24gKGVtcHR5IGZvciBhIGZyZXNoIHNjYW4gb3IgYW4gaW1hZ2UtbGVzcyBwbHVnaW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW5XYXJuaW5ncyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQsIG5vdyA9IG5ldyBEYXRlKCkpOiBWdWxuV2FybmluZ1tdIHtcbiAgY29uc3QgcmVmID0gYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259YDtcbiAgY29uc3QgZiA9IHNjYW5GcmVzaG5lc3MocmVjb3JkLCBub3cpO1xuICBpZiAoZi5zdGF0ZSA9PT0gJ3Vuc2Nhbm5lZCcpIHtcbiAgICByZXR1cm4gW3sgY29kZTogJ1VOU0NBTk5FRCcsIHNldmVyaXR5OiAnd2FybmluZycsIG1lc3NhZ2U6IGBQbHVnaW4gJHtyZWZ9IGhhcyBuZXZlciBiZWVuIHNjYW5uZWQgZm9yIHZ1bG5lcmFiaWxpdGllczsgbm90aGluZyBpcyBrbm93biBhYm91dCB3aGF0IGl0cyBpbWFnZSBjb250YWlucy5gIH1dO1xuICB9XG4gIGlmIChmLnN0YXRlID09PSAnc3RhbGUnKSB7XG4gICAgY29uc3QgaG91cnMgPSBzY2FuU3RhbGVIb3VycygpO1xuICAgIHJldHVybiBbe1xuICAgICAgY29kZTogJ1NDQU5fU1RBTEUnLFxuICAgICAgc2V2ZXJpdHk6ICd3YXJuaW5nJyxcbiAgICAgIG1lc3NhZ2U6IGBQbHVnaW4gJHtyZWZ9IHdhcyBsYXN0IHNjYW5uZWQgJHtmLnNjYW5uZWRBdCEudG9JU09TdHJpbmcoKX0sIG1vcmUgdGhhbiAke2hvdXJzfWggYWdvOyBmaW5kaW5ncyBwdWJsaXNoZWQgc2luY2UgYXJlIG5vdCByZWZsZWN0ZWQuYCxcbiAgICAgIHNjYW5uZWRBdDogZi5zY2FubmVkQXQhLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGFsZUFmdGVySG91cnM6IGhvdXJzLFxuICAgIH1dO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuLyoqIFRoZSB2dWxuZXJhYmlsaXR5IGZpZWxkcyBvZiBhbiBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKHBpcGVsaW5lLWRhdGEncyBgQ29uc3VtcHRpb25Qb2xpY3lgIHNhdGlzZmllcyBpdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5Db25zdW1wdGlvblBvbGljeSB7XG4gIC8qKiBGaXhhYmxlIEhpZ2ggZmluZGluZ3MgYWJvdmUgdGhpcyBtYW55IHJhaXNlIGEgYHdhcm5pbmdgOyBudWxsID0gbmV2ZXIgKHRoZXkgc3RheSBgaW5mb2ApLiAqL1xuICB3YXJuRml4YWJsZUhpZ2g6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQSBwaXBlbGluZSdzIEFDVElWRSByaXNrIGFjY2VwdGFuY2Ugb2Ygb25lIHZlcnNpb24gLyBpbWFnZTogdGhlIGZpbmRpbmcga2V5c1xuICogKHtAbGluayBzY2FuRmluZGluZ0tleX0pIGl0IGFjY2VwdGVkLCB3aGV0aGVyIGl0IGFjY2VwdGVkIEtFViBmaW5kaW5ncywgYW5kXG4gKiB1bnRpbCB3aGVuLiBCdWlsdCBieSBwaXBlbGluZS1kYXRhIGZyb20gYHBsdWdpbl92dWxuX2V4cG9zdXJlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuQWNjZXB0YW5jZSB7XG4gIGZpbmRpbmdLZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAga2V2OiBib29sZWFuO1xuICBhY2NlcHRlZFVudGlsOiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIFdoYXQgYSB2ZXJzaW9uJ3Mgc3RvcmVkIHNjYW4gc2F5cywgbm9ybWFsaXplZCBmcm9tIGBzY2FuX3N1bW1hcnlgIChmb3IgaXRzIGltYWdlKSBhbmQgYHNjYW5fZmxhZ2AuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25TY2FuRmFjdHMge1xuICBmbGFnZ2VkOiBib29sZWFuO1xuICBmbGFnOiBQbHVnaW5TY2FuRmxhZyB8IG51bGw7XG4gIC8qKiBGaXhhYmxlIENyaXRpY2FsIC8gSGlnaCBmaW5kaW5ncyAobnVsbCA9IG5vdCBrbm93bikuICovXG4gIGNyaXRpY2FsRml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgaGlnaEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUb3RhbHMgaW5jbHVkaW5nIHVuZml4YWJsZSBmaW5kaW5ncyAobnVsbCA9IG5vdCBrbm93bikuICovXG4gIGNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICBoaWdoOiBudW1iZXIgfCBudWxsO1xuICAvKiogS0VWLWxpc3RlZCBDcml0aWNhbCArIEhpZ2ggZmluZGluZ3MuICovXG4gIGtldjogbnVtYmVyO1xuICAvKiogRXZlcnkgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIHRoZSBzY2FuIGl0ZW1pemVkICh0aGUgc3VtbWFyeSdzIGxpc3QsIGVsc2UgdGhlIGZsYWcncykuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogVGhlIHN1bW1hcnkgY3V0IGl0cyBmaW5kaW5ncyBsaXN0IOKAlCBhIHN1YnNldCBjaGVjayBvdmVyIGl0IGNhbm5vdCBiZSB0cnVzdGVkLiAqL1xuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XG4gIHNjYW5uZWRBdDogRGF0ZSB8IG51bGw7XG59XG5cbi8qKiBUaGUgbm9ybWFsaXplZCBzY2FuIGZhY3RzIG9mIGEgcmVzb2x2ZWQgcmVjb3JkLiBBIHN1bW1hcnkgZGVzY3JpYmluZyBhbm90aGVyIGltYWdlIGlzIGlnbm9yZWQuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvblNjYW5GYWN0cyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBWZXJzaW9uU2NhbkZhY3RzIHtcbiAgY29uc3QgZmxhZyA9IHJlY29yZC5zY2FuRmxhZ2dlZEF0ID8gYXNTY2FuRmxhZyhyZWNvcmQuc2NhbkZsYWcpIDogbnVsbDtcbiAgY29uc3QgcmF3ID0gc3VtbWFyeU9mKHJlY29yZCk7XG4gIGNvbnN0IGRpZ2VzdCA9IHR5cGVvZiByYXc/LmltYWdlRGlnZXN0ID09PSAnc3RyaW5nJyA/IHJhdy5pbWFnZURpZ2VzdCA6IG51bGw7XG4gIGNvbnN0IHN1bW1hcnkgPSByYXcgJiYgKGRpZ2VzdCA9PT0gbnVsbCB8fCAhcmVjb3JkLmltYWdlRGlnZXN0IHx8IGRpZ2VzdCA9PT0gcmVjb3JkLmltYWdlRGlnZXN0KSA/IHJhdyA6IG51bGw7XG4gIGNvbnN0IGZpbmRpbmdzID0gc3VtbWFyeSAmJiBBcnJheS5pc0FycmF5KHN1bW1hcnkuZmluZGluZ3MpXG4gICAgPyAoc3VtbWFyeS5maW5kaW5ncyBhcyBQbHVnaW5TY2FuRmluZGluZ1tdKS5maWx0ZXIoKGYpID0+IGYgJiYgdHlwZW9mIGYuaWQgPT09ICdzdHJpbmcnKS5tYXAoKGYpID0+ICh7IC4uLmYsIGZpeGVkSW46IEFycmF5LmlzQXJyYXkoZi5maXhlZEluKSA/IGYuZml4ZWRJbiA6IFtdIH0pKVxuICAgIDogKGZsYWc/LmZpbmRpbmdzID8/IFtdKTtcbiAgY29uc3QgbnVtID0gKHY6IHVua25vd24pOiBudW1iZXIgfCBudWxsID0+ICh0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogbnVsbCk7XG4gIGNvbnN0IGtldkNvdW50ID0gTWF0aC5tYXgobnVtKHN1bW1hcnk/LmtldikgPz8gMCwgZmxhZz8ua2V2ID8/IDAsIGZpbmRpbmdzLmZpbHRlcigoZikgPT4gZi5rZXYgPT09IHRydWUpLmxlbmd0aCk7XG4gIHJldHVybiB7XG4gICAgZmxhZ2dlZDogZmxhZyAhPT0gbnVsbCxcbiAgICBmbGFnLFxuICAgIGNyaXRpY2FsRml4YWJsZTogbnVtKHN1bW1hcnk/LmNyaXRpY2FsRml4YWJsZSksXG4gICAgaGlnaEZpeGFibGU6IG51bShzdW1tYXJ5Py5oaWdoRml4YWJsZSkgPz8gbnVtKHJlY29yZC52dWxuSGlnaEZpeGFibGUpLFxuICAgIGNyaXRpY2FsOiBudW0oc3VtbWFyeT8uY3JpdGljYWwpLFxuICAgIGhpZ2g6IG51bShzdW1tYXJ5Py5oaWdoKSxcbiAgICBrZXY6IGtldkNvdW50LFxuICAgIGZpbmRpbmdzLFxuICAgIHRydW5jYXRlZDogc3VtbWFyeT8udHJ1bmNhdGVkID09PSB0cnVlLFxuICAgIHNjYW5uZWRBdDogbGFzdFNjYW5uZWRBdChyZWNvcmQpLFxuICB9O1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYGFjY2VwdGFuY2VgIGNvdmVycyBFVkVSWSBvbmUgb2YgYGZpbmRpbmdzYCAoYnkgZmluZGluZyBrZXkpLCBhbmQgaXRzXG4gKiBLRVYgb25lcyBvbmx5IHdoZW4gaXQgYWNjZXB0ZWQgS0VWLiBBbiBlbXB0eSBzZXQgaXMgbmV2ZXIgXCJjb3ZlcmVkXCI6IHdpdGhcbiAqIG5vdGhpbmcgaXRlbWl6ZWQgdGhlcmUgaXMgbm90aGluZyBhbiBhY2NlcHRhbmNlIGNhbiBiZSBzaG93biB0byBkZXNjcmliZS5cbiAqL1xuZnVuY3Rpb24gY292ZXJzKGFjY2VwdGFuY2U6IFZ1bG5BY2NlcHRhbmNlIHwgbnVsbCB8IHVuZGVmaW5lZCwgZmluZGluZ3M6IHJlYWRvbmx5IFBsdWdpblNjYW5GaW5kaW5nW10sIHRydW5jYXRlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBpZiAoIWFjY2VwdGFuY2UgfHwgdHJ1bmNhdGVkIHx8IGZpbmRpbmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBrZXlzID0gbmV3IFNldChhY2NlcHRhbmNlLmZpbmRpbmdLZXlzKTtcbiAgcmV0dXJuIGZpbmRpbmdzLmV2ZXJ5KChmKSA9PiBrZXlzLmhhcyhzY2FuRmluZGluZ0tleShmKSkgJiYgKGYua2V2ICE9PSB0cnVlIHx8IGFjY2VwdGFuY2Uua2V2KSk7XG59XG5cbi8qKiBJbnB1dCB0byB7QGxpbmsgYXNzZXNzVmVyc2lvblZ1bG5zfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblZ1bG5JbnB1dCB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHJlY29yZDogU2Nhbm5lZFJlY29yZDtcbiAgcG9saWN5OiBWdWxuQ29uc3VtcHRpb25Qb2xpY3k7XG4gIC8qKiBUaGUgcGlwZWxpbmUncyBhY3RpdmUgYWNjZXB0YW5jZSBvZiB0aGlzIHZlcnNpb24gLyBpbWFnZSwgd2hlbiB0aGUgY2FsbGVyIGhhcyBhIHBpcGVsaW5lLiAqL1xuICBhY2NlcHRhbmNlPzogVnVsbkFjY2VwdGFuY2UgfCBudWxsO1xuICAvKiogVGhlIG5ld2VzdCB1bmZsYWdnZWQgdmVyc2lvbiB0aGUgb3duZXIgY2FuIG1vdmUgdG8sIG5hbWVkIG9uIHRoZSBmaW5kaW5nIHdhcm5pbmdzLiAqL1xuICBzdWdnZXN0ZWRWZXJzaW9uPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJ1biB0aGUgb3JnJ3MgY29tcGxpYW5jZSBydWxlcyAoYSBuZXR3b3JrIGNhbGwpLiBEZWZhdWx0IHRydWUuICovXG4gIGNvbXBsaWFuY2U/OiBib29sZWFuO1xuICBub3c/OiBEYXRlO1xufVxuXG4vKiogVGhlIGFzc2Vzc21lbnQ6IGV2ZXJ5IHdhcm5pbmcsIHRoZSBsb3VkZXN0IHNldmVyaXR5LCBhbmQgd2hpY2ggYWNjZXB0ZWQgZmluZGluZ3MgaXQgZG93bmdyYWRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblZ1bG5Bc3Nlc3NtZW50IHtcbiAgLyoqIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2F5LiAqL1xuICBzZXZlcml0eTogVnVsblNldmVyaXR5IHwgbnVsbDtcbiAgd2FybmluZ3M6IFZ1bG5XYXJuaW5nW107XG4gIC8qKiBGaW5kaW5nIGtleXMgYW4gYWNjZXB0YW5jZSBkb3duZ3JhZGVkIChlbXB0eSA9IG5vIGFjY2VwdGFuY2UgYXBwbGllZCkuICovXG4gIGFjY2VwdGVkRmluZGluZ3M6IHN0cmluZ1tdO1xuICBmYWN0czogVmVyc2lvblNjYW5GYWN0cztcbn1cblxuLyoqIFRoZSBsb3VkZXN0IHNldmVyaXR5IG9mIGB3YXJuaW5nc2AsIG9yIG51bGwgZm9yIG5vbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc2V2ZXJpdHlPZih3YXJuaW5nczogUmVhZG9ubHlBcnJheTx7IHNldmVyaXR5PzogVnVsblNldmVyaXR5IH0+KTogVnVsblNldmVyaXR5IHwgbnVsbCB7XG4gIHJldHVybiB3YXJuaW5ncy5yZWR1Y2U8VnVsblNldmVyaXR5IHwgbnVsbD4oKGFjYywgdykgPT4gKHcuc2V2ZXJpdHkgPyAoYWNjID8gbWF4U2V2ZXJpdHkoYWNjLCB3LnNldmVyaXR5KSA6IHcuc2V2ZXJpdHkpIDogYWNjKSwgbnVsbCk7XG59XG5cbi8qKlxuICogVGhlIGFzc2Vzc21lbnQgb2Ygb25lIHJlc29sdmVkIHZlcnNpb24gKHNlZSB0aGUgbW9kdWxlIGRvYykuIE5ldmVyIHRocm93cyBhbmRcbiAqIG5ldmVyIHJlZnVzZXM6IGEgY29tcGxpYW5jZSBvdXRhZ2UgYWRkcyBhbiBgaW5mb2AgYENPTVBMSUFOQ0VfVU5BVkFJTEFCTEVgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXNzVmVyc2lvblZ1bG5zKGlucHV0OiBWZXJzaW9uVnVsbklucHV0KTogUHJvbWlzZTxWZXJzaW9uVnVsbkFzc2Vzc21lbnQ+IHtcbiAgY29uc3QgeyBvcmdJZCwgcmVjb3JkLCBwb2xpY3ksIGFjY2VwdGFuY2UgfSA9IGlucHV0O1xuICBjb25zdCBub3cgPSBpbnB1dC5ub3cgPz8gbmV3IERhdGUoKTtcbiAgY29uc3QgcmVmID0gYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259YDtcbiAgY29uc3QgZmFjdHMgPSB2ZXJzaW9uU2NhbkZhY3RzKHJlY29yZCk7XG4gIGNvbnN0IHdhcm5pbmdzOiBWdWxuV2FybmluZ1tdID0gWy4uLnNjYW5XYXJuaW5ncyhyZWNvcmQsIG5vdyldO1xuICBjb25zdCBhY2NlcHRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB3YXkgPSBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uID8gYCBNb3ZlIHRvICR7cmVjb3JkLm5hbWV9QCR7aW5wdXQuc3VnZ2VzdGVkVmVyc2lvbn0uYCA6ICcnO1xuICBjb25zdCBzdWdnZXN0ZWQgPSBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uID8geyBzdWdnZXN0ZWRWZXJzaW9uOiBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uIH0gOiB7fTtcbiAgY29uc3QgdW50aWwgPSB0b0RhdGUoYWNjZXB0YW5jZT8uYWNjZXB0ZWRVbnRpbCk/LnRvSVNPU3RyaW5nKCkgPz8gbnVsbDtcblxuICAvKiogUHVzaCBhIGZpbmRpbmcgd2FybmluZyDigJQgb3IsIHdoZW4gdGhlIHBpcGVsaW5lIGFjY2VwdGVkIGV4YWN0bHkgdGhvc2UgZmluZGluZ3MsIGl0cyBgaW5mb2AgZG93bmdyYWRlLiAqL1xuICBjb25zdCBmaW5kaW5nID0gKGNvZGU6ICdWVUxOX0tFVicgfCAnVlVMTl9GTEFHR0VEJyB8ICdWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUnIHwgJ1ZVTE5fSElHSF9GSVhBQkxFJywgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eSwgbWVzc2FnZTogc3RyaW5nLCBmaW5kaW5nczogUGx1Z2luU2NhbkZpbmRpbmdbXSxcbiAgICBleHRyYTogeyBwbHVnaW4/OiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmc7IGdhdGVkPzogbnVtYmVyOyBoaWdoPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgIGlmIChjb3ZlcnMoYWNjZXB0YW5jZSwgZmluZGluZ3MsIGZhY3RzLnRydW5jYXRlZCkpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykgYWNjZXB0ZWQuYWRkKHNjYW5GaW5kaW5nS2V5KGYpKTtcbiAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICBjb2RlOiAnVlVMTl9BQ0NFUFRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgIG1lc3NhZ2U6IGAke21lc3NhZ2V9IEFjY2VwdGVkIGZvciB0aGlzIHBpcGVsaW5lJHt1bnRpbCA/IGAgdW50aWwgJHt1bnRpbH1gIDogJyd9LmAsXG4gICAgICAgIGZpbmRpbmdzOiBmaW5kaW5ncy5tYXAoc2NhbkZpbmRpbmdLZXkpLFxuICAgICAgICBhY2NlcHRlZFVudGlsOiB1bnRpbCxcbiAgICAgICAga2V2OiBhY2NlcHRhbmNlPy5rZXYgPz8gZmFsc2UsXG4gICAgICAgIGNvdmVyczogY29kZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3YXJuaW5ncy5wdXNoKHsgY29kZSwgc2V2ZXJpdHksIG1lc3NhZ2U6IGAke21lc3NhZ2V9JHt3YXl9YCwgZmluZGluZ3M6IGZpbmRpbmdzLnNsaWNlKDAsIDEwKSwgLi4uc3VnZ2VzdGVkLCAuLi5leHRyYSB9KTtcbiAgfTtcblxuICBjb25zdCBrZXZGaW5kaW5ncyA9IGZhY3RzLmZpbmRpbmdzLmZpbHRlcigoZikgPT4gZi5rZXYgPT09IHRydWUpO1xuICBpZiAoZmFjdHMua2V2ID4gMCkge1xuICAgIGZpbmRpbmcoJ1ZVTE5fS0VWJywgJ2NyaXRpY2FsJywgYCR7cmVmfSBoYXMgJHtmYWN0cy5rZXZ9IGZpbmRpbmcke2ZhY3RzLmtldiA9PT0gMSA/ICcnIDogJ3MnfSBvbiB0aGUgQ0lTQSBLbm93biBFeHBsb2l0ZWQgVnVsbmVyYWJpbGl0aWVzIGxpc3Qke2tldkZpbmRpbmdzLmxlbmd0aCA/IGA6ICR7ZGVzY3JpYmVGaW5kaW5ncyhrZXZGaW5kaW5ncyl9YCA6ICcnfS5gLCBrZXZGaW5kaW5ncyk7XG4gIH1cbiAgY29uc3QgZmxhZyA9IGZhY3RzLmZsYWc7XG4gIGlmIChmbGFnKSB7XG4gICAgY29uc3QgZ2F0ZWQgPSBmYWN0cy5maW5kaW5ncy5maWx0ZXIoKGYpID0+IGlzR2F0ZWRGaW5kaW5nKGYsIHBsdWdpblZ1bG5HYXRlS2V2KCksIGZsYWcuZmFpbE9uID8/ICdjcml0aWNhbCcpKTtcbiAgICBmaW5kaW5nKCdWVUxOX0ZMQUdHRUQnLCAnZXJyb3InLCBgJHtyZWZ9IGlzIGZsYWdnZWQ6IGEgcmVzY2FuIGZvdW5kICR7ZmxhZy5nYXRlZH0gZ2F0ZWQgJHtmYWlsT25MYWJlbChmbGFnLmZhaWxPbiA/PyAnY3JpdGljYWwnKX0gZmluZGluZyR7ZmxhZy5nYXRlZCA9PT0gMSA/ICcnIDogJ3MnfSBvdmVyIHRoZSBwbGF0Zm9ybSBsaW1pdCR7ZmxhZy5maW5kaW5ncy5sZW5ndGggPyBgIChmaXg6ICR7ZGVzY3JpYmVGaW5kaW5ncyhmbGFnLmZpbmRpbmdzKX0pYCA6ICcnfS5gLFxuICAgICAgZ2F0ZWQubGVuZ3RoID4gMCA/IGdhdGVkIDogZmxhZy5maW5kaW5ncywgeyBwbHVnaW46IHJlY29yZC5uYW1lLCB2ZXJzaW9uOiByZWNvcmQudmVyc2lvbiwgZ2F0ZWQ6IGZsYWcuZ2F0ZWQsIGhpZ2g6IGZsYWcuaGlnaCB9KTtcbiAgfSBlbHNlIGlmICgoZmFjdHMuY3JpdGljYWxGaXhhYmxlID8/IDApID4gMCkge1xuICAgIGNvbnN0IGNyaXRzID0gZmFjdHMuZmluZGluZ3MuZmlsdGVyKChmKSA9PiBmLnNldmVyaXR5ID09PSAnY3JpdGljYWwnICYmIGYuZml4ZWRJbi5sZW5ndGggPiAwKTtcbiAgICBmaW5kaW5nKCdWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUnLCAnZXJyb3InLCBgJHtyZWZ9IGhhcyAke2ZhY3RzLmNyaXRpY2FsRml4YWJsZX0gZml4YWJsZSBDcml0aWNhbCBmaW5kaW5nJHtmYWN0cy5jcml0aWNhbEZpeGFibGUgPT09IDEgPyAnJyA6ICdzJ30ke2NyaXRzLmxlbmd0aCA/IGA6ICR7ZGVzY3JpYmVGaW5kaW5ncyhjcml0cyl9YCA6ICcnfS5gLCBjcml0cyk7XG4gIH1cbiAgY29uc3QgaGlnaEZpeGFibGUgPSBmYWN0cy5oaWdoRml4YWJsZSA/PyAwO1xuICBpZiAoaGlnaEZpeGFibGUgPiAwKSB7XG4gICAgY29uc3QgaGlnaHMgPSBmYWN0cy5maW5kaW5ncy5maWx0ZXIoKGYpID0+IGYuc2V2ZXJpdHkgPT09ICdoaWdoJyAmJiBmLmZpeGVkSW4ubGVuZ3RoID4gMCk7XG4gICAgY29uc3Qgb3ZlciA9IHBvbGljeS53YXJuRml4YWJsZUhpZ2ggIT09IG51bGwgJiYgaGlnaEZpeGFibGUgPiBwb2xpY3kud2FybkZpeGFibGVIaWdoO1xuICAgIGZpbmRpbmcoJ1ZVTE5fSElHSF9GSVhBQkxFJywgb3ZlciA/ICd3YXJuaW5nJyA6ICdpbmZvJyxcbiAgICAgIGAke3JlZn0gaGFzICR7aGlnaEZpeGFibGV9IGZpeGFibGUgSGlnaCBmaW5kaW5nJHtoaWdoRml4YWJsZSA9PT0gMSA/ICcnIDogJ3MnfSR7b3ZlciA/IGAsIG92ZXIgeW91ciBvcmdhbml6YXRpb24ncyB0aHJlc2hvbGQgb2YgJHtwb2xpY3kud2FybkZpeGFibGVIaWdofWAgOiAnJ30uYCwgaGlnaHMpO1xuICB9XG5cbiAgaWYgKGlucHV0LmNvbXBsaWFuY2UgIT09IGZhbHNlKSB3YXJuaW5ncy5wdXNoKC4uLmF3YWl0IGNvbXBsaWFuY2VWdWxuV2FybmluZ3Mob3JnSWQsIHJlY29yZCkpO1xuICByZXR1cm4geyBzZXZlcml0eTogc2V2ZXJpdHlPZih3YXJuaW5ncyksIHdhcm5pbmdzLCBhY2NlcHRlZEZpbmRpbmdzOiBbLi4uYWNjZXB0ZWRdLCBmYWN0cyB9O1xufVxuXG4vKiogVGhlIGNvbXBsaWFuY2UgYXR0cmlidXRlcyBhIHBsdWdpbidzIHZ1bG5lcmFiaWxpdHkgcnVsZXMgcmVhZC4gKi9cbmNvbnN0IFZVTE5fUlVMRV9GSUVMRFMgPSBuZXcgU2V0KFsnc2Nhbm5lZCcsICd2dWxuQ3JpdGljYWwnLCAndnVsbkhpZ2gnLCAndnVsbk1lZGl1bScsICd2dWxuTG93JywgJ3Z1bG5Dcml0aWNhbEZpeGFibGUnLCAndnVsbkhpZ2hGaXhhYmxlJ10pO1xuXG5jb25zdCBmaWVsZFJvb3QgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyA9PiBmaWVsZC5zcGxpdCgvWy5bXS8pWzBdID8/IGZpZWxkO1xuXG50eXBlIENvbXBsaWFuY2VDbGllbnQgPSBQaWNrPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUNvbXBsaWFuY2VDbGllbnQ+LCAnZHJ5UnVuUGx1Z2luJz47XG5cbmxldCBjb21wbGlhbmNlQ2xpZW50OiBDb21wbGlhbmNlQ2xpZW50IHwgbnVsbCA9IG51bGw7XG5cbi8qKiBUZXN0IGhvb2s6IHJlcGxhY2UgdGhlIGNvbXBsaWFuY2UgY2xpZW50IHRoZSBhc3Nlc3NtZW50J3MgY29tcGxpYW5jZSBsYXllciBjYWxscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRWdWxuUG9saWN5Q29tcGxpYW5jZUNsaWVudEZvclRlc3RzKGNsaWVudDogQ29tcGxpYW5jZUNsaWVudCB8IG51bGwpOiB2b2lkIHtcbiAgY29tcGxpYW5jZUNsaWVudCA9IGNsaWVudDtcbn1cblxuLyoqXG4gKiBUaGUgb3JnJ3MgcGx1Z2luIGNvbXBsaWFuY2UgcnVsZXMgb24gdGhlIHZ1bG5lcmFiaWxpdHkgYXR0cmlidXRlcywgZXZhbHVhdGVkXG4gKiBhZ2FpbnN0IHRoZSBSRVNPTFZFRCB2ZXJzaW9uIOKAlCB0aGUgb3JnJ3Mgb3duIHJvdywgaXRzIHBhcmVudCdzLCBhIHN5c3RlbVxuICogcGx1Z2luIG9yIGFuIGluc3RhbGxlZCBtYXJrZXRwbGFjZSB2ZXJzaW9uIGFsaWtlLiBBIEJMT0NLLW1vZGUgcnVsZSB0aGF0IGZhaWxzXG4gKiBpcyBhbiBgZXJyb3JgLCBhIFdBUk4tbW9kZSBvbmUgYSBgd2FybmluZ2A7IG5laXRoZXIgcmVmdXNlcyBhbnl0aGluZyBoZXJlXG4gKiAodnVsbmVyYWJpbGl0eSBzdGF0ZSBuZXZlciBzdG9wcyBhIHBpcGVsaW5lKS5cbiAqXG4gKiBPbmx5IHRoZSB2dWxuIC8gc2Nhbm5lZCBydWxlcyBjb3VudCBoZXJlOiB0aGUgcGx1Z2luJ3Mgb3RoZXIgcnVsZXMgKHRhZ3MsXG4gKiBzZWNyZXRzLCBjb21tYW5kcyDigKYpIGRlc2NyaWJlIGhvdyBhIHBsdWdpbiBpcyBBVVRIT1JFRCwgd2hpY2ggaXMgaXRzIG93bmVyJ3NcbiAqIGNvbmNlcm4gYXQgdXBsb2FkLCBub3QgdGhlIGNvbnN1bWVyJ3MgYXQgcmVzb2x1dGlvbiDigJQgYW5kIGEgc3lzdGVtIHBsdWdpbiB3b3VsZFxuICogb3RoZXJ3aXNlIGZhaWwgZXZlcnkgdGVuYW50J3MgYXV0aG9yaW5nIHJ1bGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBjb21wbGlhbmNlVnVsbldhcm5pbmdzKG9yZ0lkOiBzdHJpbmcsIHJlY29yZDogU2Nhbm5lZFJlY29yZCk6IFByb21pc2U8VnVsbldhcm5pbmdbXT4ge1xuICBpZiAoaXNTeXN0ZW1PcmdJZChvcmdJZCkgfHwgIWhhc0ltYWdlKHJlY29yZCkpIHJldHVybiBbXTtcbiAgY29uc3QgZmFjdHMgPSBkZXJpdmVQbHVnaW5JbWFnZUNvbXBsaWFuY2UocmVjb3JkLCBudWxsKS5hdHRyaWJ1dGVzO1xuICBjb25zdCBhdHRyaWJ1dGVzOiBQbHVnaW5Db21wbGlhbmNlQXR0cmlidXRlcyA9IHsgbmFtZTogcmVjb3JkLm5hbWUsIHZlcnNpb246IHJlY29yZC52ZXJzaW9uLCAuLi5mYWN0cyB9O1xuICB0cnkge1xuICAgIGNvbXBsaWFuY2VDbGllbnQgPz89IGNyZWF0ZUNvbXBsaWFuY2VDbGllbnQoKTtcbiAgICBjb25zdCBhdXRoID0gZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZTogJ3BsdWdpbicsIG9yZ0lkLCByb2xlOiAnbWVtYmVyJyB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb21wbGlhbmNlQ2xpZW50LmRyeVJ1blBsdWdpbihvcmdJZCwgYXR0cmlidXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYXV0aCk7XG4gICAgY29uc3QgcmVsZXZhbnQgPSAodjogQ29tcGxpYW5jZVZpb2xhdGlvbikgPT4gVlVMTl9SVUxFX0ZJRUxEUy5oYXMoZmllbGRSb290KHYuZmllbGQpKTtcbiAgICBjb25zdCBhcyA9IChtb2RlOiAnYmxvY2snIHwgJ3dhcm4nKSA9PiAodjogQ29tcGxpYW5jZVZpb2xhdGlvbik6IFZ1bG5XYXJuaW5nID0+ICh7XG4gICAgICBjb2RlOiAnQ09NUExJQU5DRV9WVUxOX1JVTEUnLFxuICAgICAgc2V2ZXJpdHk6IG1vZGUgPT09ICdibG9jaycgPyAnZXJyb3InIDogJ3dhcm5pbmcnLFxuICAgICAgbWVzc2FnZTogYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259OiAke3YubWVzc2FnZX1gLFxuICAgICAgcnVsZUlkOiB2LnJ1bGVJZCxcbiAgICAgIHJ1bGVOYW1lOiB2LnJ1bGVOYW1lLFxuICAgICAgZmllbGQ6IHYuZmllbGQsXG4gICAgICBtb2RlLFxuICAgIH0pO1xuICAgIHJldHVybiBbLi4ucmVzdWx0LnZpb2xhdGlvbnMuZmlsdGVyKHJlbGV2YW50KS5tYXAoYXMoJ2Jsb2NrJykpLCAuLi5yZXN1bHQud2FybmluZ3MuZmlsdGVyKHJlbGV2YW50KS5tYXAoYXMoJ3dhcm4nKSldO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gW3sgY29kZTogJ0NPTVBMSUFOQ0VfVU5BVkFJTEFCTEUnLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiBgWW91ciBvcmdhbml6YXRpb24ncyBwbHVnaW4gdnVsbmVyYWJpbGl0eSBydWxlcyBjb3VsZCBub3QgYmUgY2hlY2tlZCBmb3IgJHtyZWNvcmQubmFtZX1AJHtyZWNvcmQudmVyc2lvbn0gKCR7ZXJyb3JNZXNzYWdlKGVycil9KS5gIH1dO1xuICB9XG59XG4iXX0=
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi12dWxuLXBvbGljeS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3ZlcnNpb24tdnVsbi1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUNMLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsR0FFbkksTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUF3RCxNQUFNLCtCQUErQixDQUFDO0FBQ3RKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHakYsb0NBQW9DO0FBQ3BDLE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBZSxFQUFFLENBQWU7SUFDMUQsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsTUFBTSxVQUFVLGVBQWUsQ0FB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Q0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLDJFQUEyRSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdNLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVEhFIHZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudCBvZiBvbmUgcmVzb2x2ZWQgcGx1Z2luIHZlcnNpb24sIGZvciBvbmUgb3JnIChhbmQsXG4gKiBvcHRpb25hbGx5LCBvbmUgcGlwZWxpbmUncyByaXNrIGFjY2VwdGFuY2UpLiBPbmUgZnVuY3Rpb24sIHRocmVlIGNhbGxlcnM6XG4gKiBgL3BsdWdpbnMvbG9va3VwYCAod2hhdCBzeW50aCBwaW5zKSwgYC9wbHVnaW5zL3J1bnRpbWUtY2hlY2tgICh3aGF0IGEgcnVubmluZ1xuICogcGlwZWxpbmUgaXMgYWJvdXQgdG8gZXhlY3V0ZSkgYW5kIHRoZSBwaXBlbGluZSBzZXJ2aWNlJ3Mgc2F2ZS10aW1lIGNvbnRyYWN0XG4gKiBjaGVjay4gVGhyZWUgY29waWVzIG9mIHRoZXNlIHJ1bGVzIGRyaWZ0ZWQgb25jZSBhbHJlYWR5LlxuICpcbiAqIFZ1bG5lcmFiaWxpdHkgc3RhdGUgTkVWRVIgcmVmdXNlcyBhIHBpcGVsaW5lIOKAlCBub3QgaXRzIHNhdmUsIGl0cyBzeW50aCwgaXRzXG4gKiBkZXBsb3kgb3IgaXRzIHJ1bi4gV2hhdCBpdCBwcm9kdWNlcyBpcyBTRVZFUklUWS1HUkFERUQgd2FybmluZ3MgKGFuZCwgZnJvbSB0aGVcbiAqIGNhbGxlcnMsIG5vdGlmaWNhdGlvbnMgdG8gdGhlIHBpcGVsaW5lJ3Mgb3duZXJzKS4gVGhlIGdyYWRlczpcbiAqXG4gKiAgIGNyaXRpY2FsIOKAlCBhIGZpbmRpbmcgb24gdGhlIENJU0EgS25vd24gRXhwbG9pdGVkIFZ1bG5lcmFiaWxpdGllcyBsaXN0XG4gKiAgIGVycm9yICAgIOKAlCB0aGUgdmVyc2lvbiBpcyBGTEFHR0VEIChnYXRlZCBDcml0aWNhbHMgb3ZlciB0aGUgcGxhdGZvcm0gZmxvb3IpLFxuICogICAgICAgICAgICAgIGl0IGhhcyBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzLCBvciBhbiBvcmcgY29tcGxpYW5jZSBydWxlIG9uIHRoZVxuICogICAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHkgYXR0cmlidXRlcyBpcyBpbiBCTE9DSyBtb2RlIGFuZCBmYWlsc1xuICogICB3YXJuaW5nICDigJQgZml4YWJsZSBIaWdoIGZpbmRpbmdzIG92ZXIgdGhlIG9yZydzIGB3YXJuRml4YWJsZUhpZ2hgLCBhIHZlcnNpb25cbiAqICAgICAgICAgICAgICBuZXZlciBzY2FubmVkLCBhIHNjYW4gb2xkZXIgdGhhbiBgUExVR0lOX1NDQU5fU1RBTEVfSE9VUlNgLCBvciBhXG4gKiAgICAgICAgICAgICAgY29tcGxpYW5jZSBydWxlIGluIFdBUk4gbW9kZVxuICogICBpbmZvICAgICDigJQgd2hhdCBhIHJlYWRlciBtYXkgd2FudCB0byBrbm93IGJ1dCBuZWVkIG5vdCBhY3Qgb25cbiAqXG4gKiBBIFBJUEVMSU5FJ3MgYWN0aXZlIHJpc2sgYWNjZXB0YW5jZSAoYHBsdWdpbl92dWxuX2V4cG9zdXJlYCwgdHJpYWdlZCBgYWNjZXB0ZWRgXG4gKiB3aXRoIGEgcmVhc29uIGFuZCBhbiBleHBpcnkpIGRvd25ncmFkZXMgdGhlIHdhcm5pbmdzIGFib3V0IHRoZSBmaW5kaW5ncyBpdFxuICogQUNDRVBURUQgdG8gYGluZm9gIChcImFjY2VwdGVkIHVudGlsIOKAplwiKSDigJQgbmV2ZXIgb25lIGFib3V0IGEgZmluZGluZyB0aGF0XG4gKiBhcHBlYXJlZCBzaW5jZSwgbmV2ZXIgYSBLRVYgb25lIHVubGVzcyB0aGUgYWNjZXB0YW5jZSBzYWlkIGBrZXY6IHRydWVgLCBhbmRcbiAqIG5ldmVyIHRoZSBzY2FuLWZyZXNobmVzcyBvciBjb21wbGlhbmNlIHdhcm5pbmdzIChuZWl0aGVyIGlzIGFib3V0IGEgZmluZGluZykuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29tcGxpYW5jZUNsaWVudCwgdHlwZSBDb21wbGlhbmNlVmlvbGF0aW9uIH0gZnJvbSAnLi9jb21wbGlhbmNlLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgaXNTeXN0ZW1PcmdJZCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQge1xuICBhcHBseVZ1bG5XYWl2ZXJzLCBhc1NjYW5GbGFnLCBkZXNjcmliZUZpbmRpbmdzLCBmYWlsT25MYWJlbCwgaXNHYXRlZEZpbmRpbmcsIHBsdWdpblZ1bG5HYXRlS2V2LCBzY2FuRmluZGluZ0tleSwgc3VtbWFyeUNvbnRyYWRpY3RzLFxuICB0eXBlIFBsdWdpblNjYW5GaW5kaW5nLCB0eXBlIFBsdWdpblNjYW5GbGFnLFxufSBmcm9tICcuLi90eXBlcy9wbHVnaW4tc2Nhbi5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgZGVyaXZlUGx1Z2luSW1hZ2VDb21wbGlhbmNlLCBwbHVnaW5SdW5zT3duSW1hZ2UsIHR5cGUgUGx1Z2luQ29tcGxpYW5jZUF0dHJpYnV0ZXMsIHR5cGUgUGx1Z2luSW1hZ2VSb3cgfSBmcm9tICcuLi91dGlscy9wbHVnaW4tY29tcGxpYW5jZS5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbi8qKiBIb3cgbG91ZCBhIHdhcm5pbmcgaXMsIHF1aWV0ZXN0IGZpcnN0LiAqL1xuZXhwb3J0IGNvbnN0IFZVTE5fU0VWRVJJVElFUyA9IFsnaW5mbycsICd3YXJuaW5nJywgJ2Vycm9yJywgJ2NyaXRpY2FsJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBWdWxuU2V2ZXJpdHkgPSB0eXBlb2YgVlVMTl9TRVZFUklUSUVTW251bWJlcl07XG5cbi8qKiBUaGUgbG91ZGVyIG9mIHR3byBzZXZlcml0aWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heFNldmVyaXR5KGE6IFZ1bG5TZXZlcml0eSwgYjogVnVsblNldmVyaXR5KTogVnVsblNldmVyaXR5IHtcbiAgcmV0dXJuIFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKGEpID49IFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKGIpID8gYSA6IGI7XG59XG5cbi8qKiBXaGV0aGVyIGBzYCBpcyBhdCBsZWFzdCBgZmxvb3JgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldmVyaXR5QXRMZWFzdChzOiBWdWxuU2V2ZXJpdHksIGZsb29yOiBWdWxuU2V2ZXJpdHkpOiBib29sZWFuIHtcbiAgcmV0dXJuIFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKHMpID49IFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKGZsb29yKTtcbn1cblxuLyoqIGBQTFVHSU5fU0NBTl9TVEFMRV9IT1VSU2AgKGRlZmF1bHQgNzIpOiBhIHNjYW4gb2xkZXIgdGhhbiB0aGlzIGlzIHN0YWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW5TdGFsZUhvdXJzKCk6IG51bWJlciB7XG4gIHJldHVybiBlbnZJbnQoJ1BMVUdJTl9TQ0FOX1NUQUxFX0hPVVJTJywgNzIsIHsgbWluOiAxIH0pO1xufVxuXG4vKiogVGhlIHNjYW4tcmVsYXRlZCBmaWVsZHMgb2YgYSByZXNvbHZlZCByZWNvcmQgKGFuIG9yZyByb3cgb3IgYSBsaXN0ZWQgcmVjb3JkKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lZFJlY29yZCBleHRlbmRzIFBsdWdpbkltYWdlUm93IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgb3JnIHRoYXQgT1dOUyB0aGlzIHBsdWdpbi9saXN0aW5nIOKAlCBOT1QgdGhlIGNvbnN1bWluZyBvcmcgb25cbiAgICoge0BsaW5rIFZlcnNpb25WdWxuSW5wdXR9LCB3aGljaCBpcyB3aG9ldmVyIGlzIGFza2luZy4gVnVsbmVyYWJpbGl0eSB3YWl2ZXJzXG4gICAqIGFyZSB0aGUgb3BlcmF0b3IncyBhbmQgYXJlIHN5c3RlbS1vcmctb25seSwgc28gd2l0aG91dCB0aGlzIHRoZSBtb2R1bGVcbiAgICogY291bGQgbm90IGFwcGx5IHRoZW0gYXQgYWxsOiBhIENyaXRpY2FsIHRoZSBvcGVyYXRvciBoYWQgd2FpdmVkIHN0aWxsXG4gICAqIHJlcG9ydGVkIGFzIGFuIGBlcnJvcmAgdG8gZXZlcnkgdGVuYW50IHJlc29sdmluZyB0aGUgdmVyc2lvbiwgbG9uZyBhZnRlciBpdFxuICAgKiBzdG9wcGVkIGJsb2NraW5nIHRoZSBidWlsZCBhbmQgdGhlIGxpc3RpbmcuIE9wdGlvbmFsIGJlY2F1c2UgbW9zdCBjYWxsZXJzXG4gICAqIGhhdmUgbm8gb3duZXIgdG8gaGFuZCAoYSB0ZW5hbnQncyBvd24gcm93IGlzIGl0cyBvd24gb3duZXIpIGFuZCBhYnNlbnQgbWVhbnNcbiAgICogXCJubyB3YWl2ZXIgYXBwbGllc1wiLCB3aGljaCBpcyB0aGUgc2FmZSBkaXJlY3Rpb24uXG4gICAqL1xuICBvd25lck9yZ0lkPzogc3RyaW5nIHwgbnVsbDtcbiAgc2Nhbm5lZEF0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHNjYW5TdW1tYXJ5PzogdW5rbm93bjtcbiAgc2NhbkZsYWdnZWRBdD86IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICBzY2FuRmxhZz86IHVua25vd247XG4gIHZ1bG5IaWdoRml4YWJsZT86IHVua25vd247XG59XG5cbmNvbnN0IHRvRGF0ZSA9ICh2OiB1bmtub3duKTogRGF0ZSB8IG51bGwgPT4ge1xuICBpZiAoIXYpIHJldHVybiBudWxsO1xuICBjb25zdCBkID0gdiBpbnN0YW5jZW9mIERhdGUgPyB2IDogbmV3IERhdGUoU3RyaW5nKHYpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZDtcbn07XG5cbmNvbnN0IHN1bW1hcnlPZiA9IChyZWNvcmQ6IFBpY2s8U2Nhbm5lZFJlY29yZCwgJ3NjYW5TdW1tYXJ5Jz4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPT5cbiAgKHJlY29yZC5zY2FuU3VtbWFyeSAmJiB0eXBlb2YgcmVjb3JkLnNjYW5TdW1tYXJ5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZWNvcmQuc2NhblN1bW1hcnkpXG4gICAgPyByZWNvcmQuc2NhblN1bW1hcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gOiBudWxsKTtcblxuLyoqXG4gKiBXaGVuIHRoZSB2ZXJzaW9uIHdhcyBsYXN0IHNjYW5uZWQ6IHRoZSBsYXRlciBvZiB0aGUgYnVpbGQtdGltZSBgc2Nhbm5lZEF0YCBhbmRcbiAqIHRoZSBuaWdodGx5IHJlc2NhbidzIGBzY2FuX3N1bW1hcnkuc2Nhbm5lZEF0YC4gTnVsbCA9IG5ldmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdFNjYW5uZWRBdChyZWNvcmQ6IFBpY2s8U2Nhbm5lZFJlY29yZCwgJ3NjYW5uZWRBdCcgfCAnc2NhblN1bW1hcnknPik6IERhdGUgfCBudWxsIHtcbiAgY29uc3QgYnVpbGQgPSB0b0RhdGUocmVjb3JkLnNjYW5uZWRBdCk7XG4gIGNvbnN0IHN1bW1hcnkgPSB0b0RhdGUoc3VtbWFyeU9mKHJlY29yZCk/LnNjYW5uZWRBdCk7XG4gIGlmICghYnVpbGQpIHJldHVybiBzdW1tYXJ5O1xuICBpZiAoIXN1bW1hcnkpIHJldHVybiBidWlsZDtcbiAgcmV0dXJuIHN1bW1hcnkgPiBidWlsZCA/IHN1bW1hcnkgOiBidWlsZDtcbn1cblxuLyoqIFdoZXRoZXIgdGhlIHJlY29yZCBydW5zIGEgQlVJTFQgaW1hZ2Ugb2YgaXRzIG93biDigJQgdGhlIG9ubHkgdGhpbmcgYSBzY2FuIGFwcGxpZXMgdG8uICovXG5mdW5jdGlvbiBoYXNJbWFnZShyZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBsdWdpblJ1bnNPd25JbWFnZShyZWNvcmQpICYmIHR5cGVvZiByZWNvcmQuaW1hZ2VEaWdlc3QgPT09ICdzdHJpbmcnICYmIHJlY29yZC5pbWFnZURpZ2VzdC5sZW5ndGggPiAwO1xufVxuXG4vKiogRnJlc2huZXNzIG9mIGEgdmVyc2lvbidzIHNjYW46IGBub25lYCAobm8gaW1hZ2UgdG8gc2NhbiksIGB1bnNjYW5uZWRgLCBgc3RhbGVgIG9yIGBmcmVzaGAuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhbkZyZXNobmVzcyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQsIG5vdyA9IG5ldyBEYXRlKCkpOiB7IHN0YXRlOiAnbm9uZScgfCAndW5zY2FubmVkJyB8ICdzdGFsZScgfCAnZnJlc2gnOyBzY2FubmVkQXQ6IERhdGUgfCBudWxsIH0ge1xuICBpZiAoIWhhc0ltYWdlKHJlY29yZCkpIHJldHVybiB7IHN0YXRlOiAnbm9uZScsIHNjYW5uZWRBdDogbnVsbCB9O1xuICBjb25zdCBhdCA9IGxhc3RTY2FubmVkQXQocmVjb3JkKTtcbiAgaWYgKCFhdCkgcmV0dXJuIHsgc3RhdGU6ICd1bnNjYW5uZWQnLCBzY2FubmVkQXQ6IG51bGwgfTtcbiAgcmV0dXJuIHsgc3RhdGU6IG5vdy5nZXRUaW1lKCkgLSBhdC5nZXRUaW1lKCkgPiBzY2FuU3RhbGVIb3VycygpICogM182MDBfMDAwID8gJ3N0YWxlJyA6ICdmcmVzaCcsIHNjYW5uZWRBdDogYXQgfTtcbn1cblxuLyoqIE9uZSBzZXZlcml0eS1ncmFkZWQgdnVsbmVyYWJpbGl0eSB3YXJuaW5nLiAqL1xuZXhwb3J0IHR5cGUgVnVsbldhcm5pbmcgPVxuICB8IHtcbiAgICBjb2RlOiAnVlVMTl9LRVYnIHwgJ1ZVTE5fRkxBR0dFRCcgfCAnVlVMTl9DUklUSUNBTF9GSVhBQkxFJyB8ICdWVUxOX0hJR0hfRklYQUJMRSc7XG4gICAgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eTtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG4gICAgc3VnZ2VzdGVkVmVyc2lvbj86IHN0cmluZztcbiAgICAvKiogYFZVTE5fRkxBR0dFRGAgY2FycmllcyB0aGUgZmxhZydzIGNvdW50cyAodGhlIHNoYXBlIHRoZSByZXNjYW4tZmxhZyB3YXJuaW5nIGFsd2F5cyBoYWQpLiAqL1xuICAgIHBsdWdpbj86IHN0cmluZztcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgIC8qKiBUaGUgZmxhZydzIGdhdGVkIGNvdW50IChmaW5kaW5ncyBhdCBvciBhYm92ZSBpdHMgYGZhaWxPbmApLiAqL1xuICAgIGdhdGVkPzogbnVtYmVyO1xuICAgIGhpZ2g/OiBudW1iZXI7XG4gIH1cbiAgfCB7IGNvZGU6ICdWVUxOX0FDQ0VQVEVEJzsgc2V2ZXJpdHk6ICdpbmZvJzsgbWVzc2FnZTogc3RyaW5nOyBmaW5kaW5nczogc3RyaW5nW107IGFjY2VwdGVkVW50aWw6IHN0cmluZyB8IG51bGw7IGtldjogYm9vbGVhbjsgY292ZXJzOiBzdHJpbmcgfVxuICB8IHsgY29kZTogJ1VOU0NBTk5FRCc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZyB9XG4gIHwgeyBjb2RlOiAnU0NBTl9TVEFMRSc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZzsgc2Nhbm5lZEF0OiBzdHJpbmc7IHN0YWxlQWZ0ZXJIb3VyczogbnVtYmVyIH1cbiAgfCB7IGNvZGU6ICdDT01QTElBTkNFX1ZVTE5fUlVMRSc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZzsgcnVsZUlkOiBzdHJpbmc7IHJ1bGVOYW1lOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IG1vZGU6ICdibG9jaycgfCAnd2FybicgfVxuICB8IHsgY29kZTogJ0NPTVBMSUFOQ0VfVU5BVkFJTEFCTEUnOyBzZXZlcml0eTogVnVsblNldmVyaXR5OyBtZXNzYWdlOiBzdHJpbmcgfTtcblxuLyoqIGBVTlNDQU5ORURgIC8gYFNDQU5fU1RBTEVgIGZvciBhIHJlc29sdmVkIHZlcnNpb24gKGVtcHR5IGZvciBhIGZyZXNoIHNjYW4gb3IgYW4gaW1hZ2UtbGVzcyBwbHVnaW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW5XYXJuaW5ncyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQsIG5vdyA9IG5ldyBEYXRlKCkpOiBWdWxuV2FybmluZ1tdIHtcbiAgY29uc3QgcmVmID0gYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259YDtcbiAgY29uc3QgZiA9IHNjYW5GcmVzaG5lc3MocmVjb3JkLCBub3cpO1xuICBpZiAoZi5zdGF0ZSA9PT0gJ3Vuc2Nhbm5lZCcpIHtcbiAgICByZXR1cm4gW3sgY29kZTogJ1VOU0NBTk5FRCcsIHNldmVyaXR5OiAnd2FybmluZycsIG1lc3NhZ2U6IGBQbHVnaW4gJHtyZWZ9IGhhcyBuZXZlciBiZWVuIHNjYW5uZWQgZm9yIHZ1bG5lcmFiaWxpdGllczsgbm90aGluZyBpcyBrbm93biBhYm91dCB3aGF0IGl0cyBpbWFnZSBjb250YWlucy5gIH1dO1xuICB9XG4gIGlmIChmLnN0YXRlID09PSAnc3RhbGUnKSB7XG4gICAgY29uc3QgaG91cnMgPSBzY2FuU3RhbGVIb3VycygpO1xuICAgIHJldHVybiBbe1xuICAgICAgY29kZTogJ1NDQU5fU1RBTEUnLFxuICAgICAgc2V2ZXJpdHk6ICd3YXJuaW5nJyxcbiAgICAgIG1lc3NhZ2U6IGBQbHVnaW4gJHtyZWZ9IHdhcyBsYXN0IHNjYW5uZWQgJHtmLnNjYW5uZWRBdCEudG9JU09TdHJpbmcoKX0sIG1vcmUgdGhhbiAke2hvdXJzfWggYWdvOyBmaW5kaW5ncyBwdWJsaXNoZWQgc2luY2UgYXJlIG5vdCByZWZsZWN0ZWQuYCxcbiAgICAgIHNjYW5uZWRBdDogZi5zY2FubmVkQXQhLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGFsZUFmdGVySG91cnM6IGhvdXJzLFxuICAgIH1dO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuLyoqIFRoZSB2dWxuZXJhYmlsaXR5IGZpZWxkcyBvZiBhbiBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKHBpcGVsaW5lLWRhdGEncyBgQ29uc3VtcHRpb25Qb2xpY3lgIHNhdGlzZmllcyBpdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5Db25zdW1wdGlvblBvbGljeSB7XG4gIC8qKiBGaXhhYmxlIEhpZ2ggZmluZGluZ3MgYWJvdmUgdGhpcyBtYW55IHJhaXNlIGEgYHdhcm5pbmdgOyBudWxsID0gbmV2ZXIgKHRoZXkgc3RheSBgaW5mb2ApLiAqL1xuICB3YXJuRml4YWJsZUhpZ2g6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQSBwaXBlbGluZSdzIEFDVElWRSByaXNrIGFjY2VwdGFuY2Ugb2Ygb25lIHZlcnNpb24gLyBpbWFnZTogdGhlIGZpbmRpbmcga2V5c1xuICogKHtAbGluayBzY2FuRmluZGluZ0tleX0pIGl0IGFjY2VwdGVkLCB3aGV0aGVyIGl0IGFjY2VwdGVkIEtFViBmaW5kaW5ncywgYW5kXG4gKiB1bnRpbCB3aGVuLiBCdWlsdCBieSBwaXBlbGluZS1kYXRhIGZyb20gYHBsdWdpbl92dWxuX2V4cG9zdXJlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuQWNjZXB0YW5jZSB7XG4gIGZpbmRpbmdLZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAga2V2OiBib29sZWFuO1xuICBhY2NlcHRlZFVudGlsOiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIFdoYXQgYSB2ZXJzaW9uJ3Mgc3RvcmVkIHNjYW4gc2F5cywgbm9ybWFsaXplZCBmcm9tIGBzY2FuX3N1bW1hcnlgIChmb3IgaXRzIGltYWdlKSBhbmQgYHNjYW5fZmxhZ2AuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25TY2FuRmFjdHMge1xuICBmbGFnZ2VkOiBib29sZWFuO1xuICBmbGFnOiBQbHVnaW5TY2FuRmxhZyB8IG51bGw7XG4gIC8qKiBGaXhhYmxlIENyaXRpY2FsIC8gSGlnaCBmaW5kaW5ncyAobnVsbCA9IG5vdCBrbm93bikuICovXG4gIGNyaXRpY2FsRml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgaGlnaEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUb3RhbHMgaW5jbHVkaW5nIHVuZml4YWJsZSBmaW5kaW5ncyAobnVsbCA9IG5vdCBrbm93bikuICovXG4gIGNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICBoaWdoOiBudW1iZXIgfCBudWxsO1xuICAvKiogS0VWLWxpc3RlZCBDcml0aWNhbCArIEhpZ2ggZmluZGluZ3MuICovXG4gIGtldjogbnVtYmVyO1xuICAvKiogRXZlcnkgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIHRoZSBzY2FuIGl0ZW1pemVkICh0aGUgc3VtbWFyeSdzIGxpc3QsIGVsc2UgdGhlIGZsYWcncykuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogVGhlIHN1bW1hcnkgY3V0IGl0cyBmaW5kaW5ncyBsaXN0IOKAlCBhIHN1YnNldCBjaGVjayBvdmVyIGl0IGNhbm5vdCBiZSB0cnVzdGVkLiAqL1xuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XG4gIHNjYW5uZWRBdDogRGF0ZSB8IG51bGw7XG59XG5cbi8qKiBUaGUgbm9ybWFsaXplZCBzY2FuIGZhY3RzIG9mIGEgcmVzb2x2ZWQgcmVjb3JkLiBBIHN1bW1hcnkgZGVzY3JpYmluZyBhbm90aGVyIGltYWdlIGlzIGlnbm9yZWQuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvblNjYW5GYWN0cyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBWZXJzaW9uU2NhbkZhY3RzIHtcbiAgY29uc3QgZmxhZyA9IHJlY29yZC5zY2FuRmxhZ2dlZEF0ID8gYXNTY2FuRmxhZyhyZWNvcmQuc2NhbkZsYWcpIDogbnVsbDtcbiAgY29uc3QgcmF3ID0gc3VtbWFyeU9mKHJlY29yZCk7XG4gIC8vIENPTlRSQURJQ1RTLCBub3QgZGVzY3JpYmVzIOKAlCB0aGUgcGVybWlzc2l2ZSBoYWxmIG9mIHRoZSBwYWlyLCBkZWxpYmVyYXRlbHkuXG4gIC8vIEEgZGlnZXN0LWxlc3Mgc3VtbWFyeSBpcyB0aGUgb25seSBmaW5kaW5ncyB0aGlzIHJlYWRlciBoYXM7IGRpc2NhcmRpbmcgaXRcbiAgLy8gbWFrZXMgdGhlIHdhcm5pbmcgcXVpZXRlciBhbmQgdGhlIGRlbGV0ZS1zYWZldHkgcmVmdXNhbCBsZXNzIGluZm9ybWF0aXZlLFxuICAvLyB3aGljaCBpcyB0aGUgd3JvbmcgZmFpbHVyZSBmb3IgYSBjb25zdW1lci1mYWNpbmcgZ3JhZGUuIFRoZSBwdWJsaXNoIGdhdGVcbiAgLy8gYXNrcyB0aGUgc3RyaWN0IHF1ZXN0aW9uIGJlY2F1c2UgSVRTIHdyb25nIGZhaWx1cmUgaXMgbGlzdGluZyBzb21ldGhpbmdcbiAgLy8gdW52ZXR0ZWQuIFNlZSB0aGUgbm90ZSBvbiBgc3VtbWFyeURlc2NyaWJlc2AuXG4gIGNvbnN0IHN1bW1hcnkgPSByYXcgJiYgIXN1bW1hcnlDb250cmFkaWN0cyhyYXcsIHR5cGVvZiByZWNvcmQuaW1hZ2VEaWdlc3QgPT09ICdzdHJpbmcnID8gcmVjb3JkLmltYWdlRGlnZXN0IDogbnVsbCkgPyByYXcgOiBudWxsO1xuICBjb25zdCBmaW5kaW5ncyA9IHN1bW1hcnkgJiYgQXJyYXkuaXNBcnJheShzdW1tYXJ5LmZpbmRpbmdzKVxuICAgID8gKHN1bW1hcnkuZmluZGluZ3MgYXMgUGx1Z2luU2NhbkZpbmRpbmdbXSkuZmlsdGVyKChmKSA9PiBmICYmIHR5cGVvZiBmLmlkID09PSAnc3RyaW5nJykubWFwKChmKSA9PiAoeyAuLi5mLCBmaXhlZEluOiBBcnJheS5pc0FycmF5KGYuZml4ZWRJbikgPyBmLmZpeGVkSW4gOiBbXSB9KSlcbiAgICA6IChmbGFnPy5maW5kaW5ncyA/PyBbXSk7XG4gIGNvbnN0IG51bSA9ICh2OiB1bmtub3duKTogbnVtYmVyIHwgbnVsbCA9PiAodHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IG51bGwpO1xuICBjb25zdCBrZXZDb3VudCA9IE1hdGgubWF4KG51bShzdW1tYXJ5Py5rZXYpID8/IDAsIGZsYWc/LmtldiA/PyAwLCBmaW5kaW5ncy5maWx0ZXIoKGYpID0+IGYua2V2ID09PSB0cnVlKS5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIGZsYWdnZWQ6IGZsYWcgIT09IG51bGwsXG4gICAgZmxhZyxcbiAgICAvLyBOT1QgZmFsbGluZyBiYWNrIHRvIGByZWNvcmQudnVsbkNyaXRpY2FsRml4YWJsZWAsIHRob3VnaCBgaGlnaEZpeGFibGVgXG4gICAgLy8gZG9lcyBmYWxsIGJhY2sgdG8gaXRzIGNvbHVtbiBvbmUgbGluZSBkb3duLiBUaGUgYXN5bW1ldHJ5IGlzIHJlYWwgYW5kXG4gICAgLy8gcHJlZGF0ZXMgdGhpcyBtb2R1bGUncyBjdXJyZW50IHNoYXBlOyBjbG9zaW5nIGl0IGhlcmUgd291bGQgcmFpc2VcbiAgICAvLyBWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUgZm9yIGV2ZXJ5IHJlY29yZCB0aGF0IGhhcyB0aGUgY29sdW1uIHNldCBhbmQgbm9cbiAgICAvLyBzdW1tYXJ5IGF0IGFsbCDigJQgYSBicm9hZCBjaGFuZ2UgdG8gd2FybmluZyBWT0xVTUUsIHdoaWNoIGlzIGEgcHJvZHVjdFxuICAgIC8vIGRlY2lzaW9uIHJhdGhlciB0aGFuIGEgY29uc2VxdWVuY2Ugb2YgdGlnaHRlbmluZyB0aGUgZGlnZXN0IGNoZWNrIGFib3ZlLlxuICAgIC8vIFRoZSBkaWdlc3QgY2hhbmdlIG9ubHkgYWZmZWN0cyByZWNvcmRzIHdob3NlIHN1bW1hcnkgbmFtZXMgYW5vdGhlciBpbWFnZSxcbiAgICAvLyBhbmQgdGhvc2UgZmFsbCBiYWNrIHRvIHRoZSBmbGFnJ3MgZmluZGluZ3MgZXhhY3RseSBhcyBhIHN1bW1hcnktbGVzc1xuICAgIC8vIHJlY29yZCBhbHdheXMgaGFzLlxuICAgIGNyaXRpY2FsRml4YWJsZTogbnVtKHN1bW1hcnk/LmNyaXRpY2FsRml4YWJsZSksXG4gICAgaGlnaEZpeGFibGU6IG51bShzdW1tYXJ5Py5oaWdoRml4YWJsZSkgPz8gbnVtKHJlY29yZC52dWxuSGlnaEZpeGFibGUpLFxuICAgIGNyaXRpY2FsOiBudW0oc3VtbWFyeT8uY3JpdGljYWwpLFxuICAgIGhpZ2g6IG51bShzdW1tYXJ5Py5oaWdoKSxcbiAgICBrZXY6IGtldkNvdW50LFxuICAgIGZpbmRpbmdzLFxuICAgIHRydW5jYXRlZDogc3VtbWFyeT8udHJ1bmNhdGVkID09PSB0cnVlLFxuICAgIHNjYW5uZWRBdDogbGFzdFNjYW5uZWRBdChyZWNvcmQpLFxuICB9O1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYGFjY2VwdGFuY2VgIGNvdmVycyBFVkVSWSBvbmUgb2YgYGZpbmRpbmdzYCAoYnkgZmluZGluZyBrZXkpLCBhbmQgaXRzXG4gKiBLRVYgb25lcyBvbmx5IHdoZW4gaXQgYWNjZXB0ZWQgS0VWLiBBbiBlbXB0eSBzZXQgaXMgbmV2ZXIgXCJjb3ZlcmVkXCI6IHdpdGhcbiAqIG5vdGhpbmcgaXRlbWl6ZWQgdGhlcmUgaXMgbm90aGluZyBhbiBhY2NlcHRhbmNlIGNhbiBiZSBzaG93biB0byBkZXNjcmliZS5cbiAqL1xuZnVuY3Rpb24gY292ZXJzKGFjY2VwdGFuY2U6IFZ1bG5BY2NlcHRhbmNlIHwgbnVsbCB8IHVuZGVmaW5lZCwgZmluZGluZ3M6IHJlYWRvbmx5IFBsdWdpblNjYW5GaW5kaW5nW10sIHRydW5jYXRlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBpZiAoIWFjY2VwdGFuY2UgfHwgdHJ1bmNhdGVkIHx8IGZpbmRpbmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBrZXlzID0gbmV3IFNldChhY2NlcHRhbmNlLmZpbmRpbmdLZXlzKTtcbiAgcmV0dXJuIGZpbmRpbmdzLmV2ZXJ5KChmKSA9PiBrZXlzLmhhcyhzY2FuRmluZGluZ0tleShmKSkgJiYgKGYua2V2ICE9PSB0cnVlIHx8IGFjY2VwdGFuY2Uua2V2KSk7XG59XG5cbi8qKiBJbnB1dCB0byB7QGxpbmsgYXNzZXNzVmVyc2lvblZ1bG5zfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblZ1bG5JbnB1dCB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHJlY29yZDogU2Nhbm5lZFJlY29yZDtcbiAgcG9saWN5OiBWdWxuQ29uc3VtcHRpb25Qb2xpY3k7XG4gIC8qKiBUaGUgcGlwZWxpbmUncyBhY3RpdmUgYWNjZXB0YW5jZSBvZiB0aGlzIHZlcnNpb24gLyBpbWFnZSwgd2hlbiB0aGUgY2FsbGVyIGhhcyBhIHBpcGVsaW5lLiAqL1xuICBhY2NlcHRhbmNlPzogVnVsbkFjY2VwdGFuY2UgfCBudWxsO1xuICAvKiogVGhlIG5ld2VzdCB1bmZsYWdnZWQgdmVyc2lvbiB0aGUgb3duZXIgY2FuIG1vdmUgdG8sIG5hbWVkIG9uIHRoZSBmaW5kaW5nIHdhcm5pbmdzLiAqL1xuICBzdWdnZXN0ZWRWZXJzaW9uPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJ1biB0aGUgb3JnJ3MgY29tcGxpYW5jZSBydWxlcyAoYSBuZXR3b3JrIGNhbGwpLiBEZWZhdWx0IHRydWUuICovXG4gIGNvbXBsaWFuY2U/OiBib29sZWFuO1xuICBub3c/OiBEYXRlO1xufVxuXG4vKiogVGhlIGFzc2Vzc21lbnQ6IGV2ZXJ5IHdhcm5pbmcsIHRoZSBsb3VkZXN0IHNldmVyaXR5LCBhbmQgd2hpY2ggYWNjZXB0ZWQgZmluZGluZ3MgaXQgZG93bmdyYWRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblZ1bG5Bc3Nlc3NtZW50IHtcbiAgLyoqIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2F5LiAqL1xuICBzZXZlcml0eTogVnVsblNldmVyaXR5IHwgbnVsbDtcbiAgd2FybmluZ3M6IFZ1bG5XYXJuaW5nW107XG4gIC8qKiBGaW5kaW5nIGtleXMgYW4gYWNjZXB0YW5jZSBkb3duZ3JhZGVkIChlbXB0eSA9IG5vIGFjY2VwdGFuY2UgYXBwbGllZCkuICovXG4gIGFjY2VwdGVkRmluZGluZ3M6IHN0cmluZ1tdO1xuICBmYWN0czogVmVyc2lvblNjYW5GYWN0cztcbn1cblxuLyoqIFRoZSBsb3VkZXN0IHNldmVyaXR5IG9mIGB3YXJuaW5nc2AsIG9yIG51bGwgZm9yIG5vbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc2V2ZXJpdHlPZih3YXJuaW5nczogUmVhZG9ubHlBcnJheTx7IHNldmVyaXR5PzogVnVsblNldmVyaXR5IH0+KTogVnVsblNldmVyaXR5IHwgbnVsbCB7XG4gIHJldHVybiB3YXJuaW5ncy5yZWR1Y2U8VnVsblNldmVyaXR5IHwgbnVsbD4oKGFjYywgdykgPT4gKHcuc2V2ZXJpdHkgPyAoYWNjID8gbWF4U2V2ZXJpdHkoYWNjLCB3LnNldmVyaXR5KSA6IHcuc2V2ZXJpdHkpIDogYWNjKSwgbnVsbCk7XG59XG5cbi8qKlxuICogVGhlIGFzc2Vzc21lbnQgb2Ygb25lIHJlc29sdmVkIHZlcnNpb24gKHNlZSB0aGUgbW9kdWxlIGRvYykuIE5ldmVyIHRocm93cyBhbmRcbiAqIG5ldmVyIHJlZnVzZXM6IGEgY29tcGxpYW5jZSBvdXRhZ2UgYWRkcyBhbiBgaW5mb2AgYENPTVBMSUFOQ0VfVU5BVkFJTEFCTEVgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXNzVmVyc2lvblZ1bG5zKGlucHV0OiBWZXJzaW9uVnVsbklucHV0KTogUHJvbWlzZTxWZXJzaW9uVnVsbkFzc2Vzc21lbnQ+IHtcbiAgY29uc3QgeyBvcmdJZCwgcmVjb3JkLCBwb2xpY3ksIGFjY2VwdGFuY2UgfSA9IGlucHV0O1xuICBjb25zdCBub3cgPSBpbnB1dC5ub3cgPz8gbmV3IERhdGUoKTtcbiAgY29uc3QgcmVmID0gYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259YDtcbiAgY29uc3QgZmFjdHMgPSB2ZXJzaW9uU2NhbkZhY3RzKHJlY29yZCk7XG4gIGNvbnN0IHdhcm5pbmdzOiBWdWxuV2FybmluZ1tdID0gWy4uLnNjYW5XYXJuaW5ncyhyZWNvcmQsIG5vdyldO1xuICBjb25zdCBhY2NlcHRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB3YXkgPSBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uID8gYCBNb3ZlIHRvICR7cmVjb3JkLm5hbWV9QCR7aW5wdXQuc3VnZ2VzdGVkVmVyc2lvbn0uYCA6ICcnO1xuICBjb25zdCBzdWdnZXN0ZWQgPSBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uID8geyBzdWdnZXN0ZWRWZXJzaW9uOiBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uIH0gOiB7fTtcbiAgY29uc3QgdW50aWwgPSB0b0RhdGUoYWNjZXB0YW5jZT8uYWNjZXB0ZWRVbnRpbCk/LnRvSVNPU3RyaW5nKCkgPz8gbnVsbDtcblxuICAvKiogUHVzaCBhIGZpbmRpbmcgd2FybmluZyDigJQgb3IsIHdoZW4gdGhlIHBpcGVsaW5lIGFjY2VwdGVkIGV4YWN0bHkgdGhvc2UgZmluZGluZ3MsIGl0cyBgaW5mb2AgZG93bmdyYWRlLiAqL1xuICBjb25zdCBmaW5kaW5nID0gKGNvZGU6ICdWVUxOX0tFVicgfCAnVlVMTl9GTEFHR0VEJyB8ICdWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUnIHwgJ1ZVTE5fSElHSF9GSVhBQkxFJywgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eSwgbWVzc2FnZTogc3RyaW5nLCBmaW5kaW5nczogUGx1Z2luU2NhbkZpbmRpbmdbXSxcbiAgICBleHRyYTogeyBwbHVnaW4/OiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmc7IGdhdGVkPzogbnVtYmVyOyBoaWdoPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgIGlmIChjb3ZlcnMoYWNjZXB0YW5jZSwgZmluZGluZ3MsIGZhY3RzLnRydW5jYXRlZCkpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykgYWNjZXB0ZWQuYWRkKHNjYW5GaW5kaW5nS2V5KGYpKTtcbiAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICBjb2RlOiAnVlVMTl9BQ0NFUFRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgIG1lc3NhZ2U6IGAke21lc3NhZ2V9IEFjY2VwdGVkIGZvciB0aGlzIHBpcGVsaW5lJHt1bnRpbCA/IGAgdW50aWwgJHt1bnRpbH1gIDogJyd9LmAsXG4gICAgICAgIGZpbmRpbmdzOiBmaW5kaW5ncy5tYXAoc2NhbkZpbmRpbmdLZXkpLFxuICAgICAgICBhY2NlcHRlZFVudGlsOiB1bnRpbCxcbiAgICAgICAga2V2OiBhY2NlcHRhbmNlPy5rZXYgPz8gZmFsc2UsXG4gICAgICAgIGNvdmVyczogY29kZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3YXJuaW5ncy5wdXNoKHsgY29kZSwgc2V2ZXJpdHksIG1lc3NhZ2U6IGAke21lc3NhZ2V9JHt3YXl9YCwgZmluZGluZ3M6IGZpbmRpbmdzLnNsaWNlKDAsIDEwKSwgLi4uc3VnZ2VzdGVkLCAuLi5leHRyYSB9KTtcbiAgfTtcblxuICBjb25zdCBrZXZGaW5kaW5ncyA9IGZhY3RzLmZpbmRpbmdzLmZpbHRlcigoZikgPT4gZi5rZXYgPT09IHRydWUpO1xuICBpZiAoZmFjdHMua2V2ID4gMCkge1xuICAgIGZpbmRpbmcoJ1ZVTE5fS0VWJywgJ2NyaXRpY2FsJywgYCR7cmVmfSBoYXMgJHtmYWN0cy5rZXZ9IGZpbmRpbmcke2ZhY3RzLmtldiA9PT0gMSA/ICcnIDogJ3MnfSBvbiB0aGUgQ0lTQSBLbm93biBFeHBsb2l0ZWQgVnVsbmVyYWJpbGl0aWVzIGxpc3Qke2tldkZpbmRpbmdzLmxlbmd0aCA/IGA6ICR7ZGVzY3JpYmVGaW5kaW5ncyhrZXZGaW5kaW5ncyl9YCA6ICcnfS5gLCBrZXZGaW5kaW5ncyk7XG4gIH1cbiAgY29uc3QgZmxhZyA9IGZhY3RzLmZsYWc7XG4gIGlmIChmbGFnKSB7XG4gICAgY29uc3QgZ2F0ZWQgPSBmYWN0cy5maW5kaW5ncy5maWx0ZXIoKGYpID0+IGlzR2F0ZWRGaW5kaW5nKGYsIHBsdWdpblZ1bG5HYXRlS2V2KCksIGZsYWcuZmFpbE9uID8/ICdjcml0aWNhbCcpKTtcbiAgICBmaW5kaW5nKCdWVUxOX0ZMQUdHRUQnLCAnZXJyb3InLCBgJHtyZWZ9IGlzIGZsYWdnZWQ6IGEgcmVzY2FuIGZvdW5kICR7ZmxhZy5nYXRlZH0gZ2F0ZWQgJHtmYWlsT25MYWJlbChmbGFnLmZhaWxPbiA/PyAnY3JpdGljYWwnKX0gZmluZGluZyR7ZmxhZy5nYXRlZCA9PT0gMSA/ICcnIDogJ3MnfSBvdmVyIHRoZSBwbGF0Zm9ybSBsaW1pdCR7ZmxhZy5maW5kaW5ncy5sZW5ndGggPyBgIChmaXg6ICR7ZGVzY3JpYmVGaW5kaW5ncyhmbGFnLmZpbmRpbmdzKX0pYCA6ICcnfS5gLFxuICAgICAgZ2F0ZWQubGVuZ3RoID4gMCA/IGdhdGVkIDogZmxhZy5maW5kaW5ncywgeyBwbHVnaW46IHJlY29yZC5uYW1lLCB2ZXJzaW9uOiByZWNvcmQudmVyc2lvbiwgZ2F0ZWQ6IGZsYWcuZ2F0ZWQsIGhpZ2g6IGZsYWcuaGlnaCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXQUlWRVItQVdBUkUsIHdoaWNoIHRoaXMgYnJhbmNoIGNvdWxkIG5vdCBiZSB1bnRpbCB0aGUgcmVjb3JkIGNhcnJpZWQgaXRzXG4gICAgLy8gb3duZXIuIERlcml2ZWQgZnJvbSB0aGUgZmluZGluZ3Mgd2hlbiB0aGV5IGNhbiBjYXJyeSB0aGUgYW5zd2VyIOKAlCB0aGVcbiAgICAvLyBzYW1lIHJ1bGUgYGdhdGVkRmluZGluZ0NvdW50YCBhcHBsaWVzIOKAlCBhbmQgZnJvbSB0aGUgcmF3IGNvbHVtbiB3aGVuIHRoZXlcbiAgICAvLyBjYW5ub3QgKHRydW5jYXRlZCwgb3Igbm9uZSBpdGVtaXplZCksIHdoaWNoIGtlZXBzIHRoZSB3YXJuaW5nIHJhdGhlciB0aGFuXG4gICAgLy8gbG9zaW5nIGl0LiBBIHdhaXZlciBzaWxlbmNlcyB0aGUgd2FybmluZyBvbmx5IHdoZXJlIGl0IGFscmVhZHkgc2lsZW5jZXNcbiAgICAvLyB0aGUgYnVpbGQgZmxvb3IgYW5kIHRoZSBwdWJsaXNoIGdhdGUuXG4gICAgY29uc3Qgd2FpdmVkS2V5cyA9IG5ldyBTZXQoXG4gICAgICBhcHBseVZ1bG5XYWl2ZXJzKHJlY29yZC5uYW1lLCBmYWN0cy5maW5kaW5ncywgdW5kZWZpbmVkLCBub3csIHJlY29yZC5vd25lck9yZ0lkID8/IHVuZGVmaW5lZCwgcmVjb3JkLnZlcnNpb24pXG4gICAgICAgIC53YWl2ZWQubWFwKHNjYW5GaW5kaW5nS2V5KSxcbiAgICApO1xuICAgIGNvbnN0IGNyaXRzID0gZmFjdHMuZmluZGluZ3MuZmlsdGVyKChmKSA9PiBmLnNldmVyaXR5ID09PSAnY3JpdGljYWwnICYmIGYuZml4ZWRJbi5sZW5ndGggPiAwICYmICF3YWl2ZWRLZXlzLmhhcyhzY2FuRmluZGluZ0tleShmKSkpO1xuICAgIGNvbnN0IGRlcml2YWJsZSA9ICFmYWN0cy50cnVuY2F0ZWQgJiYgZmFjdHMuZmluZGluZ3MubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjcml0aWNhbEZpeGFibGUgPSBkZXJpdmFibGUgPyBjcml0cy5sZW5ndGggOiAoZmFjdHMuY3JpdGljYWxGaXhhYmxlID8/IDApO1xuICAgIGlmIChjcml0aWNhbEZpeGFibGUgPiAwKSB7XG4gICAgICBmaW5kaW5nKCdWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUnLCAnZXJyb3InLCBgJHtyZWZ9IGhhcyAke2NyaXRpY2FsRml4YWJsZX0gZml4YWJsZSBDcml0aWNhbCBmaW5kaW5nJHtjcml0aWNhbEZpeGFibGUgPT09IDEgPyAnJyA6ICdzJ30ke2NyaXRzLmxlbmd0aCA/IGA6ICR7ZGVzY3JpYmVGaW5kaW5ncyhjcml0cyl9YCA6ICcnfS5gLCBjcml0cyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhpZ2hGaXhhYmxlID0gZmFjdHMuaGlnaEZpeGFibGUgPz8gMDtcbiAgaWYgKGhpZ2hGaXhhYmxlID4gMCkge1xuICAgIGNvbnN0IGhpZ2hzID0gZmFjdHMuZmluZGluZ3MuZmlsdGVyKChmKSA9PiBmLnNldmVyaXR5ID09PSAnaGlnaCcgJiYgZi5maXhlZEluLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IG92ZXIgPSBwb2xpY3kud2FybkZpeGFibGVIaWdoICE9PSBudWxsICYmIGhpZ2hGaXhhYmxlID4gcG9saWN5Lndhcm5GaXhhYmxlSGlnaDtcbiAgICBmaW5kaW5nKCdWVUxOX0hJR0hfRklYQUJMRScsIG92ZXIgPyAnd2FybmluZycgOiAnaW5mbycsXG4gICAgICBgJHtyZWZ9IGhhcyAke2hpZ2hGaXhhYmxlfSBmaXhhYmxlIEhpZ2ggZmluZGluZyR7aGlnaEZpeGFibGUgPT09IDEgPyAnJyA6ICdzJ30ke292ZXIgPyBgLCBvdmVyIHlvdXIgb3JnYW5pemF0aW9uJ3MgdGhyZXNob2xkIG9mICR7cG9saWN5Lndhcm5GaXhhYmxlSGlnaH1gIDogJyd9LmAsIGhpZ2hzKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5jb21wbGlhbmNlICE9PSBmYWxzZSkgd2FybmluZ3MucHVzaCguLi5hd2FpdCBjb21wbGlhbmNlVnVsbldhcm5pbmdzKG9yZ0lkLCByZWNvcmQpKTtcbiAgcmV0dXJuIHsgc2V2ZXJpdHk6IHNldmVyaXR5T2Yod2FybmluZ3MpLCB3YXJuaW5ncywgYWNjZXB0ZWRGaW5kaW5nczogWy4uLmFjY2VwdGVkXSwgZmFjdHMgfTtcbn1cblxuLyoqIFRoZSBjb21wbGlhbmNlIGF0dHJpYnV0ZXMgYSBwbHVnaW4ncyB2dWxuZXJhYmlsaXR5IHJ1bGVzIHJlYWQuICovXG5jb25zdCBWVUxOX1JVTEVfRklFTERTID0gbmV3IFNldChbJ3NjYW5uZWQnLCAndnVsbkNyaXRpY2FsJywgJ3Z1bG5IaWdoJywgJ3Z1bG5NZWRpdW0nLCAndnVsbkxvdycsICd2dWxuQ3JpdGljYWxGaXhhYmxlJywgJ3Z1bG5IaWdoRml4YWJsZSddKTtcblxuY29uc3QgZmllbGRSb290ID0gKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcgPT4gZmllbGQuc3BsaXQoL1suW10vKVswXSA/PyBmaWVsZDtcblxudHlwZSBDb21wbGlhbmNlQ2xpZW50ID0gUGljazxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDb21wbGlhbmNlQ2xpZW50PiwgJ2RyeVJ1blBsdWdpbic+O1xuXG5sZXQgY29tcGxpYW5jZUNsaWVudDogQ29tcGxpYW5jZUNsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vKiogVGVzdCBob29rOiByZXBsYWNlIHRoZSBjb21wbGlhbmNlIGNsaWVudCB0aGUgYXNzZXNzbWVudCdzIGNvbXBsaWFuY2UgbGF5ZXIgY2FsbHMuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VnVsblBvbGljeUNvbXBsaWFuY2VDbGllbnRGb3JUZXN0cyhjbGllbnQ6IENvbXBsaWFuY2VDbGllbnQgfCBudWxsKTogdm9pZCB7XG4gIGNvbXBsaWFuY2VDbGllbnQgPSBjbGllbnQ7XG59XG5cbi8qKlxuICogVGhlIG9yZydzIHBsdWdpbiBjb21wbGlhbmNlIHJ1bGVzIG9uIHRoZSB2dWxuZXJhYmlsaXR5IGF0dHJpYnV0ZXMsIGV2YWx1YXRlZFxuICogYWdhaW5zdCB0aGUgUkVTT0xWRUQgdmVyc2lvbiDigJQgdGhlIG9yZydzIG93biByb3csIGl0cyBwYXJlbnQncywgYSBzeXN0ZW1cbiAqIHBsdWdpbiBvciBhbiBpbnN0YWxsZWQgbWFya2V0cGxhY2UgdmVyc2lvbiBhbGlrZS4gQSBCTE9DSy1tb2RlIHJ1bGUgdGhhdCBmYWlsc1xuICogaXMgYW4gYGVycm9yYCwgYSBXQVJOLW1vZGUgb25lIGEgYHdhcm5pbmdgOyBuZWl0aGVyIHJlZnVzZXMgYW55dGhpbmcgaGVyZVxuICogKHZ1bG5lcmFiaWxpdHkgc3RhdGUgbmV2ZXIgc3RvcHMgYSBwaXBlbGluZSkuXG4gKlxuICogT25seSB0aGUgdnVsbiAvIHNjYW5uZWQgcnVsZXMgY291bnQgaGVyZTogdGhlIHBsdWdpbidzIG90aGVyIHJ1bGVzICh0YWdzLFxuICogc2VjcmV0cywgY29tbWFuZHMg4oCmKSBkZXNjcmliZSBob3cgYSBwbHVnaW4gaXMgQVVUSE9SRUQsIHdoaWNoIGlzIGl0cyBvd25lcidzXG4gKiBjb25jZXJuIGF0IHVwbG9hZCwgbm90IHRoZSBjb25zdW1lcidzIGF0IHJlc29sdXRpb24g4oCUIGFuZCBhIHN5c3RlbSBwbHVnaW4gd291bGRcbiAqIG90aGVyd2lzZSBmYWlsIGV2ZXJ5IHRlbmFudCdzIGF1dGhvcmluZyBydWxlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcGxpYW5jZVZ1bG5XYXJuaW5ncyhvcmdJZDogc3RyaW5nLCByZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBQcm9taXNlPFZ1bG5XYXJuaW5nW10+IHtcbiAgaWYgKGlzU3lzdGVtT3JnSWQob3JnSWQpIHx8ICFoYXNJbWFnZShyZWNvcmQpKSByZXR1cm4gW107XG4gIGNvbnN0IGZhY3RzID0gZGVyaXZlUGx1Z2luSW1hZ2VDb21wbGlhbmNlKHJlY29yZCwgbnVsbCkuYXR0cmlidXRlcztcbiAgY29uc3QgYXR0cmlidXRlczogUGx1Z2luQ29tcGxpYW5jZUF0dHJpYnV0ZXMgPSB7IG5hbWU6IHJlY29yZC5uYW1lLCB2ZXJzaW9uOiByZWNvcmQudmVyc2lvbiwgLi4uZmFjdHMgfTtcbiAgdHJ5IHtcbiAgICBjb21wbGlhbmNlQ2xpZW50ID8/PSBjcmVhdGVDb21wbGlhbmNlQ2xpZW50KCk7XG4gICAgY29uc3QgYXV0aCA9IGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWU6ICdwbHVnaW4nLCBvcmdJZCwgcm9sZTogJ21lbWJlcicgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29tcGxpYW5jZUNsaWVudC5kcnlSdW5QbHVnaW4ob3JnSWQsIGF0dHJpYnV0ZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGF1dGgpO1xuICAgIGNvbnN0IHJlbGV2YW50ID0gKHY6IENvbXBsaWFuY2VWaW9sYXRpb24pID0+IFZVTE5fUlVMRV9GSUVMRFMuaGFzKGZpZWxkUm9vdCh2LmZpZWxkKSk7XG4gICAgY29uc3QgYXMgPSAobW9kZTogJ2Jsb2NrJyB8ICd3YXJuJykgPT4gKHY6IENvbXBsaWFuY2VWaW9sYXRpb24pOiBWdWxuV2FybmluZyA9PiAoe1xuICAgICAgY29kZTogJ0NPTVBMSUFOQ0VfVlVMTl9SVUxFJyxcbiAgICAgIHNldmVyaXR5OiBtb2RlID09PSAnYmxvY2snID8gJ2Vycm9yJyA6ICd3YXJuaW5nJyxcbiAgICAgIG1lc3NhZ2U6IGAke3JlY29yZC5uYW1lfUAke3JlY29yZC52ZXJzaW9ufTogJHt2Lm1lc3NhZ2V9YCxcbiAgICAgIHJ1bGVJZDogdi5ydWxlSWQsXG4gICAgICBydWxlTmFtZTogdi5ydWxlTmFtZSxcbiAgICAgIGZpZWxkOiB2LmZpZWxkLFxuICAgICAgbW9kZSxcbiAgICB9KTtcbiAgICByZXR1cm4gWy4uLnJlc3VsdC52aW9sYXRpb25zLmZpbHRlcihyZWxldmFudCkubWFwKGFzKCdibG9jaycpKSwgLi4ucmVzdWx0Lndhcm5pbmdzLmZpbHRlcihyZWxldmFudCkubWFwKGFzKCd3YXJuJykpXTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFt7IGNvZGU6ICdDT01QTElBTkNFX1VOQVZBSUxBQkxFJywgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogYFlvdXIgb3JnYW5pemF0aW9uJ3MgcGx1Z2luIHZ1bG5lcmFiaWxpdHkgcnVsZXMgY291bGQgbm90IGJlIGNoZWNrZWQgZm9yICR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259ICgke2Vycm9yTWVzc2FnZShlcnIpfSkuYCB9XTtcbiAgfVxufVxuIl19
@@ -79,4 +79,4 @@ export function isKeylessProviderId(providerId) {
79
79
  export const AI_PROVIDER_NAMES = Object.fromEntries(Object.values(AI_PROVIDER_CATALOG).map((p) => [p.id, p.name]));
80
80
  /** Model lists by provider id — the catalog's models, for UI surfaces that need only those. */
81
81
  export const AI_PROVIDER_MODELS = Object.fromEntries(Object.values(AI_PROVIDER_CATALOG).map((p) => [p.id, p.models]));
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9haS1jYXRhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUE2Q3RDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBbUM7SUFDakUsV0FBVyxFQUFFO1FBQ1gsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsV0FBVztRQUNqQixNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDdEQsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ2xELEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxFQUFFLEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7U0FDOUQ7S0FDRjtJQUNELFFBQVEsRUFBRTtRQUNSLEVBQUUsRUFBRSxRQUFRO1FBQ1osSUFBSSxFQUFFLFFBQVE7UUFDZCxNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUMxQyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUM5QyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRTtTQUM3QztLQUNGO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsRUFBRSxFQUFFLFFBQVE7UUFDWixJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxFQUFFLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7U0FDekQ7S0FDRjtJQUNELEtBQUssRUFBRTtRQUNMLEVBQUUsRUFBRSxLQUFLO1FBQ1QsSUFBSSxFQUFFLFlBQVk7UUFDbEIsTUFBTSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDcEMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDcEMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7U0FDckM7S0FDRjtJQUNELGdCQUFnQixFQUFFO1FBQ2hCLEVBQUUsRUFBRSxnQkFBZ0I7UUFDcEIsSUFBSSxFQUFFLGdCQUFnQjtRQUN0Qix5RUFBeUU7UUFDekUsT0FBTyxFQUFFLElBQUk7UUFDYiwyRUFBMkU7UUFDM0UsMEVBQTBFO1FBQzFFLGtFQUFrRTtRQUNsRSxNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDbkUsRUFBRSxFQUFFLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQy9ELEVBQUUsRUFBRSxFQUFFLDZDQUE2QyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUMvRSxFQUFFLEVBQUUsRUFBRSx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7U0FDM0Q7S0FDRjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBc0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztLQUNyRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztLQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUVwQixvR0FBb0c7QUFDcEcsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQWtCO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQztBQUMzRCxDQUFDO0FBRUQsK0ZBQStGO0FBQy9GLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUEyQixNQUFNLENBQUMsV0FBVyxDQUN6RSxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzlELENBQUM7QUFFRiwrRkFBK0Y7QUFDL0YsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWtDLE1BQU0sQ0FBQyxXQUFXLENBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBBSSBwcm92aWRlciArIG1vZGVsIGNhdGFsb2csIGFzIERBVEEgT05MWS5cbiAqXG4gKiBEZXBlbmRlbmN5LWZyZWUgYW5kIGVudi1mcmVlIHNvIHRoZSBicm93c2VyIGltcG9ydHMgaXQgZGlyZWN0bHlcbiAqIChgQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUvYWktY2F0YWxvZ2ApIOKAlCB0aGUgZnJvbnRlbmQncyBtb2RlbCBwaWNrZXIgYW5kIHRoZVxuICogYmFja2VuZCdzIHByb3ZpZGVyIHJlZ2lzdHJ5IHJlYWQgdGhlIG9uZSBsaXN0LCBpbnN0ZWFkIG9mIHRoZSBmcm9udGVuZCBrZWVwaW5nIGFcbiAqIGhhbmQtbWFpbnRhaW5lZCBtaXJyb3IgdGhhdCBkcmlmdGVkIGV2ZXJ5IHRpbWUgYSBtb2RlbCBzaGlwcGVkLiBBbnl0aGluZyB0aGF0XG4gKiByZWFkcyB0aGUgZW52aXJvbm1lbnQgKHRoZSBPcGVuQUktY29tcGF0aWJsZSBlbmRwb2ludCwgcHJvdmlkZXIga2V5IGVudiB2YXJzKVxuICogc3RheXMgaW4gYGNvbnN0YW50cy9haS1wcm92aWRlcnMudHNgLCB3aGljaCByZS1leHBvcnRzIHRoaXMuXG4gKi9cblxuLyoqIE1ldGFkYXRhIGZvciBhIHNpbmdsZSBBSSBtb2RlbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlNb2RlbEluZm8ge1xuICAvKiogTW9kZWwgaWRlbnRpZmllciB1c2VkIGluIEFQSSBjYWxscyAoZS5nLiBcImNsYXVkZS1zb25uZXQtNS01XCIpLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIChlLmcuIFwiQ2xhdWRlIFNvbm5ldCA1LjVcIikuICovXG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqIE1ldGFkYXRhIGZvciBhbiBBSSBwcm92aWRlciB3aXRoIGl0cyBhdmFpbGFibGUgbW9kZWxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSVByb3ZpZGVySW5mbyB7XG4gIC8qKiBQcm92aWRlciBpZGVudGlmaWVyIChlLmcuIFwiYW50aHJvcGljXCIsIFwib3BlbmFpXCIsIFwiZ29vZ2xlXCIpLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIChlLmcuIFwiQW50aHJvcGljXCIpLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBNb2RlbHMgYXZhaWxhYmxlIGZvciB0aGlzIHByb3ZpZGVyLiAqL1xuICBtb2RlbHM6IEFJTW9kZWxJbmZvW107XG4gIC8qKlxuICAgKiBUaGUgcHJvdmlkZXIgYXV0aGVudGljYXRlcyB3aXRoIHRoZSBERVBMT1lNRU5UJ3Mgb3duIGNyZWRlbnRpYWxzIChhbiBJQU1cbiAgICogcm9sZSksIG5vdCBhbiBBUEkga2V5IOKAlCBzbyB0aGVyZSBpcyBubyBrZXkgZm9yIGFuIG9yZ2FuaXphdGlvbiB0byBicmluZy5cbiAgICogQWJzZW50ID0ga2V5LWJhc2VkLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBPTkUgcGxhY2UgdGhhdCBmYWN0IGlzIHJlY29yZGVkLiBFdmVyeXRoaW5nIHRoYXQgYXNrcyBcImNhbiBhblxuICAgKiBvcmcgaG9sZCBpdHMgb3duIGtleSBmb3IgdGhpcyBwcm92aWRlcj9cIiByZWFkcyB7QGxpbmsgQUlfS0VZX1BST1ZJREVSX0lEU31cbiAgICogb3Ige0BsaW5rIGlzS2V5bGVzc1Byb3ZpZGVySWR9OiB0aGUgc2V0dGluZ3MgcGlja2VyIHRoYXQgb2ZmZXJzIHRoZSBzbG90LFxuICAgKiB0aGUgcGxhdGZvcm0gdGhhdCBzdG9yZXMgYW5kIHJlLWVuY3J5cHRzIGl0LCB0aGUgaW50ZXJuYWwgcm91dGUgdGhhdCBzZXJ2ZXNcbiAgICogaXQsIGFuZCB0aGUgbW9kZWwgc2VsZWN0aW9uIHRoYXQgc3BlbmRzIGl0LiBUaGV5IGRpc2FncmVlZCBvbmNlIOKAlCB0aGVcbiAgICogcGlja2VyIG9mZmVyZWQgQW1hem9uIEJlZHJvY2ssIHRoZSBwbGF0Zm9ybSBlbmNyeXB0ZWQgdGhlIGtleSBhbmQgcmVwb3J0ZWRcbiAgICogaXQgYGNvbmZpZ3VyZWRgLCBhbmQgbm8gQUkgY2FsbCBjb3VsZCBldmVyIHVzZSBpdC5cbiAgICovXG4gIGtleWxlc3M/OiB0cnVlO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIEFJIHByb3ZpZGVyIGNhdGFsb2cg4oCUIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFsbCBzdXBwb3J0ZWRcbiAqIHByb3ZpZGVycyBhbmQgdGhlaXIgbW9kZWxzLiBUaGUgRklSU1QgbW9kZWwgb2YgYSBwcm92aWRlciBpcyBpdHMgZGVmYXVsdFxuICogKHdoYXQgYSBwcm92aWRlci1vbmx5IHJlcXVlc3QgcmVzb2x2ZXMgdG8pLCBzbyBvcmRlciBtYXR0ZXJzLlxuICovXG5leHBvcnQgY29uc3QgQUlfUFJPVklERVJfQ0FUQUxPRzogUmVjb3JkPHN0cmluZywgQUlQcm92aWRlckluZm8+ID0ge1xuICAnYW50aHJvcGljJzoge1xuICAgIGlkOiAnYW50aHJvcGljJyxcbiAgICBuYW1lOiAnQW50aHJvcGljJyxcbiAgICBtb2RlbHM6IFtcbiAgICAgIHsgaWQ6ICdjbGF1ZGUtc29ubmV0LTUtNScsIG5hbWU6ICdDbGF1ZGUgU29ubmV0IDUuNScgfSxcbiAgICAgIHsgaWQ6ICdjbGF1ZGUtb3B1cy01LTUnLCBuYW1lOiAnQ2xhdWRlIE9wdXMgNS41JyB9LFxuICAgICAgeyBpZDogJ2NsYXVkZS1mYWJsZS01LTEnLCBuYW1lOiAnQ2xhdWRlIEZhYmxlIDUuMScgfSxcbiAgICAgIHsgaWQ6ICdjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxJywgbmFtZTogJ0NsYXVkZSBIYWlrdSA0LjUnIH0sXG4gICAgXSxcbiAgfSxcbiAgJ29wZW5haSc6IHtcbiAgICBpZDogJ29wZW5haScsXG4gICAgbmFtZTogJ09wZW5BSScsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnZ3B0LTUuNi1zb2wnLCBuYW1lOiAnR1BULTUuNiBTb2wnIH0sXG4gICAgICB7IGlkOiAnZ3B0LTUuNi10ZXJyYScsIG5hbWU6ICdHUFQtNS42IFRlcnJhJyB9LFxuICAgICAgeyBpZDogJ2dwdC01LjYtbHVuYScsIG5hbWU6ICdHUFQtNS42IEx1bmEnIH0sXG4gICAgXSxcbiAgfSxcbiAgJ2dvb2dsZSc6IHtcbiAgICBpZDogJ2dvb2dsZScsXG4gICAgbmFtZTogJ0dvb2dsZScsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnZ2VtaW5pLTMuNy1mbGFzaCcsIG5hbWU6ICdHZW1pbmkgMy43IEZsYXNoJyB9LFxuICAgICAgeyBpZDogJ2dlbWluaS0zLjEtcHJvLXByZXZpZXcnLCBuYW1lOiAnR2VtaW5pIDMuMSBQcm8nIH0sXG4gICAgXSxcbiAgfSxcbiAgJ3hhaSc6IHtcbiAgICBpZDogJ3hhaScsXG4gICAgbmFtZTogJ3hBSSAoR3JvayknLFxuICAgIG1vZGVsczogW1xuICAgICAgeyBpZDogJ2dyb2stNC42JywgbmFtZTogJ0dyb2sgNC42JyB9LFxuICAgICAgeyBpZDogJ2dyb2stNC41JywgbmFtZTogJ0dyb2sgNC41JyB9LFxuICAgICAgeyBpZDogJ2dyb2stNC4zJywgbmFtZTogJ0dyb2sgNC4zJyB9LFxuICAgIF0sXG4gIH0sXG4gICdhbWF6b24tYmVkcm9jayc6IHtcbiAgICBpZDogJ2FtYXpvbi1iZWRyb2NrJyxcbiAgICBuYW1lOiAnQW1hem9uIEJlZHJvY2snLFxuICAgIC8vIEF1dGhlbnRpY2F0ZWQgYnkgdGhlIGRlcGxveW1lbnQncyBJQU0gcm9sZSwgbmV2ZXIgYW4gb3JnLXN1cHBsaWVkIGtleS5cbiAgICBrZXlsZXNzOiB0cnVlLFxuICAgIC8vIEJlZHJvY2sgaWRzIGFyZSByZWdpb24tc2NvcGVkIGNyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcHJvZmlsZXM7IHRoZSBgdXMuYFxuICAgIC8vIHByZWZpeCB0YXJnZXRzIFVTIHJlZ2lvbnMg4oCUIHN3YXAgdGhlIHByZWZpeCAoZXUuL2FwYWMuL+KApikgdG8gbWF0Y2ggeW91clxuICAgIC8vIGRlcGxveSByZWdpb24sIGFuZCBjb25maXJtIGF2YWlsYWJpbGl0eSBpbiB0aGUgQmVkcm9jayBjb25zb2xlLlxuICAgIG1vZGVsczogW1xuICAgICAgeyBpZDogJ3VzLmFudGhyb3BpYy5jbGF1ZGUtc29ubmV0LTUtNScsIG5hbWU6ICdDbGF1ZGUgU29ubmV0IDUuNScgfSxcbiAgICAgIHsgaWQ6ICd1cy5hbnRocm9waWMuY2xhdWRlLW9wdXMtNS01JywgbmFtZTogJ0NsYXVkZSBPcHVzIDUuNScgfSxcbiAgICAgIHsgaWQ6ICd1cy5hbnRocm9waWMuY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMS12MTowJywgbmFtZTogJ0NsYXVkZSBIYWlrdSA0LjUnIH0sXG4gICAgICB7IGlkOiAndXMuYW1hem9uLm5vdmEtcHJvLXYxOjAnLCBuYW1lOiAnQW1hem9uIE5vdmEgUHJvJyB9LFxuICAgIF0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFByb3ZpZGVyIGlkcyBhbiBvcmdhbml6YXRpb24gQ0FOIGhvbGQgaXRzIG93biBBUEkga2V5IGZvciDigJQgdGhlIGNhdGFsb2cgbWludXNcbiAqIHRoZSBrZXlsZXNzIHByb3ZpZGVycyAoe0BsaW5rIEFJUHJvdmlkZXJJbmZvLmtleWxlc3N9KS5cbiAqXG4gKiBUaGUgc2luZ2xlIGxpc3QgYmVoaW5kIGV2ZXJ5IG9yZy1rZXkgc3VyZmFjZTogdGhlIHNldHRpbmdzIHBpY2tlciBvZmZlcnMgdGhlc2VcbiAqIHNsb3RzLCB0aGUgcGxhdGZvcm0gc3RvcmVzIGFuZCByZS1lbmNyeXB0cyB0aGVzZSBmaWVsZHMsIGBHRVRcbiAqIC9pbnRlcm5hbC9haS9rZXlzLzpvcmdJZC86cHJvdmlkZXJgIHNlcnZlcyBvbmx5IHRoZXNlLCBhbmQgb3JnLWF3YXJlIG1vZGVsXG4gKiBzZWxlY3Rpb24gc3BlbmRzIG9ubHkgdGhlc2UuIEEgcHJvdmlkZXIgYWJzZW50IGhlcmUgaGFzIG5vIG9yZyBrZXkgYnlcbiAqIGNvbnN0cnVjdGlvbiwgc28gbm8gY2FsbGVyIG5lZWRzIGl0cyBvd24gZXhjbHVzaW9uLlxuICovXG5leHBvcnQgY29uc3QgQUlfS0VZX1BST1ZJREVSX0lEUzogcmVhZG9ubHkgc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKEFJX1BST1ZJREVSX0NBVEFMT0cpXG4gIC5maWx0ZXIoKHApID0+ICFwLmtleWxlc3MpXG4gIC5tYXAoKHApID0+IHAuaWQpO1xuXG4vKiogVHJ1ZSB3aGVuIHRoZSBwcm92aWRlciBhdXRoZW50aWNhdGVzIHdpdGggdGhlIGRlcGxveW1lbnQncyBvd24gY3JlZGVudGlhbHMgcmF0aGVyIHRoYW4gYSBrZXkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNLZXlsZXNzUHJvdmlkZXJJZChwcm92aWRlcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFJX1BST1ZJREVSX0NBVEFMT0dbcHJvdmlkZXJJZF0/LmtleWxlc3MgPT09IHRydWU7XG59XG5cbi8qKiBEaXNwbGF5IG5hbWVzIGJ5IHByb3ZpZGVyIGlkIOKAlCB0aGUgY2F0YWxvZydzIG5hbWVzLCBmb3IgVUkgc3VyZmFjZXMgdGhhdCBsaXN0IHByb3ZpZGVycy4gKi9cbmV4cG9ydCBjb25zdCBBSV9QUk9WSURFUl9OQU1FUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgT2JqZWN0LnZhbHVlcyhBSV9QUk9WSURFUl9DQVRBTE9HKS5tYXAoKHApID0+IFtwLmlkLCBwLm5hbWVdKSxcbik7XG5cbi8qKiBNb2RlbCBsaXN0cyBieSBwcm92aWRlciBpZCDigJQgdGhlIGNhdGFsb2cncyBtb2RlbHMsIGZvciBVSSBzdXJmYWNlcyB0aGF0IG5lZWQgb25seSB0aG9zZS4gKi9cbmV4cG9ydCBjb25zdCBBSV9QUk9WSURFUl9NT0RFTFM6IFJlY29yZDxzdHJpbmcsIEFJTW9kZWxJbmZvW10+ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICBPYmplY3QudmFsdWVzKEFJX1BST1ZJREVSX0NBVEFMT0cpLm1hcCgocCkgPT4gW3AuaWQsIHAubW9kZWxzXSksXG4pO1xuIl19
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2F0YWxvZy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2FpLWNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTZDdEM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFtQztJQUNqRSxXQUFXLEVBQUU7UUFDWCxFQUFFLEVBQUUsV0FBVztRQUNmLElBQUksRUFBRSxXQUFXO1FBQ2pCLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUN0RCxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDbEQsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEVBQUUsRUFBRSxFQUFFLDJCQUEyQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtTQUM5RDtLQUNGO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsRUFBRSxFQUFFLFFBQVE7UUFDWixJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQzFDLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQzlDLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFO1NBQzdDO0tBQ0Y7SUFDRCxRQUFRLEVBQUU7UUFDUixFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEVBQUUsRUFBRSxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtTQUN6RDtLQUNGO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsRUFBRSxFQUFFLEtBQUs7UUFDVCxJQUFJLEVBQUUsWUFBWTtRQUNsQixNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNwQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNwQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtTQUNyQztLQUNGO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsRUFBRSxFQUFFLGdCQUFnQjtRQUNwQixJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLHlFQUF5RTtRQUN6RSxPQUFPLEVBQUUsSUFBSTtRQUNiLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsa0VBQWtFO1FBQ2xFLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFLGdDQUFnQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUNuRSxFQUFFLEVBQUUsRUFBRSw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDL0QsRUFBRSxFQUFFLEVBQUUsNkNBQTZDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQy9FLEVBQUUsRUFBRSxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRTtTQUMzRDtLQUNGO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0tBQ3JGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0tBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBCLG9HQUFvRztBQUNwRyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBa0I7SUFDcEQsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQzNELENBQUM7QUFFRCwrRkFBK0Y7QUFDL0YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJCLE1BQU0sQ0FBQyxXQUFXLENBQ3pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDOUQsQ0FBQztBQUVGLCtGQUErRjtBQUMvRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBa0MsTUFBTSxDQUFDLFdBQVcsQ0FDakYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIEFJIHByb3ZpZGVyICsgbW9kZWwgY2F0YWxvZywgYXMgREFUQSBPTkxZLlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSBhbmQgZW52LWZyZWUgc28gdGhlIGJyb3dzZXIgaW1wb3J0cyBpdCBkaXJlY3RseVxuICogKGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS9haS1jYXRhbG9nYCkg4oCUIHRoZSBmcm9udGVuZCdzIG1vZGVsIHBpY2tlciBhbmQgdGhlXG4gKiBiYWNrZW5kJ3MgcHJvdmlkZXIgcmVnaXN0cnkgcmVhZCB0aGUgb25lIGxpc3QsIGluc3RlYWQgb2YgdGhlIGZyb250ZW5kIGtlZXBpbmcgYVxuICogaGFuZC1tYWludGFpbmVkIG1pcnJvciB0aGF0IGRyaWZ0ZWQgZXZlcnkgdGltZSBhIG1vZGVsIHNoaXBwZWQuIEFueXRoaW5nIHRoYXRcbiAqIHJlYWRzIHRoZSBlbnZpcm9ubWVudCAodGhlIE9wZW5BSS1jb21wYXRpYmxlIGVuZHBvaW50LCBwcm92aWRlciBrZXkgZW52IHZhcnMpXG4gKiBzdGF5cyBpbiBgY29uc3RhbnRzL2FpLXByb3ZpZGVycy50c2AsIHdoaWNoIHJlLWV4cG9ydHMgdGhpcy5cbiAqL1xuXG4vKiogTWV0YWRhdGEgZm9yIGEgc2luZ2xlIEFJIG1vZGVsLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSU1vZGVsSW5mbyB7XG4gIC8qKiBNb2RlbCBpZGVudGlmaWVyIHVzZWQgaW4gQVBJIGNhbGxzIChlLmcuIFwiY2xhdWRlLXNvbm5ldC01LTVcIikuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGUuZy4gXCJDbGF1ZGUgU29ubmV0IDUuNVwiKS4gKi9cbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogTWV0YWRhdGEgZm9yIGFuIEFJIHByb3ZpZGVyIHdpdGggaXRzIGF2YWlsYWJsZSBtb2RlbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEFJUHJvdmlkZXJJbmZvIHtcbiAgLyoqIFByb3ZpZGVyIGlkZW50aWZpZXIgKGUuZy4gXCJhbnRocm9waWNcIiwgXCJvcGVuYWlcIiwgXCJnb29nbGVcIikuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGUuZy4gXCJBbnRocm9waWNcIikuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE1vZGVscyBhdmFpbGFibGUgZm9yIHRoaXMgcHJvdmlkZXIuICovXG4gIG1vZGVsczogQUlNb2RlbEluZm9bXTtcbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBhdXRoZW50aWNhdGVzIHdpdGggdGhlIERFUExPWU1FTlQncyBvd24gY3JlZGVudGlhbHMgKGFuIElBTVxuICAgKiByb2xlKSwgbm90IGFuIEFQSSBrZXkg4oCUIHNvIHRoZXJlIGlzIG5vIGtleSBmb3IgYW4gb3JnYW5pemF0aW9uIHRvIGJyaW5nLlxuICAgKiBBYnNlbnQgPSBrZXktYmFzZWQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIE9ORSBwbGFjZSB0aGF0IGZhY3QgaXMgcmVjb3JkZWQuIEV2ZXJ5dGhpbmcgdGhhdCBhc2tzIFwiY2FuIGFuXG4gICAqIG9yZyBob2xkIGl0cyBvd24ga2V5IGZvciB0aGlzIHByb3ZpZGVyP1wiIHJlYWRzIHtAbGluayBBSV9LRVlfUFJPVklERVJfSURTfVxuICAgKiBvciB7QGxpbmsgaXNLZXlsZXNzUHJvdmlkZXJJZH06IHRoZSBzZXR0aW5ncyBwaWNrZXIgdGhhdCBvZmZlcnMgdGhlIHNsb3QsXG4gICAqIHRoZSBwbGF0Zm9ybSB0aGF0IHN0b3JlcyBhbmQgcmUtZW5jcnlwdHMgaXQsIHRoZSBpbnRlcm5hbCByb3V0ZSB0aGF0IHNlcnZlc1xuICAgKiBpdCwgYW5kIHRoZSBtb2RlbCBzZWxlY3Rpb24gdGhhdCBzcGVuZHMgaXQuIFRoZXkgZGlzYWdyZWVkIG9uY2Ug4oCUIHRoZVxuICAgKiBwaWNrZXIgb2ZmZXJlZCBBbWF6b24gQmVkcm9jaywgdGhlIHBsYXRmb3JtIGVuY3J5cHRlZCB0aGUga2V5IGFuZCByZXBvcnRlZFxuICAgKiBpdCBgY29uZmlndXJlZGAsIGFuZCBubyBBSSBjYWxsIGNvdWxkIGV2ZXIgdXNlIGl0LlxuICAgKi9cbiAga2V5bGVzcz86IHRydWU7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQUkgcHJvdmlkZXIgY2F0YWxvZyDigJQgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYWxsIHN1cHBvcnRlZFxuICogcHJvdmlkZXJzIGFuZCB0aGVpciBtb2RlbHMuIFRoZSBGSVJTVCBtb2RlbCBvZiBhIHByb3ZpZGVyIGlzIGl0cyBkZWZhdWx0XG4gKiAod2hhdCBhIHByb3ZpZGVyLW9ubHkgcmVxdWVzdCByZXNvbHZlcyB0byksIHNvIG9yZGVyIG1hdHRlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9QUk9WSURFUl9DQVRBTE9HOiBSZWNvcmQ8c3RyaW5nLCBBSVByb3ZpZGVySW5mbz4gPSB7XG4gICdhbnRocm9waWMnOiB7XG4gICAgaWQ6ICdhbnRocm9waWMnLFxuICAgIG5hbWU6ICdBbnRocm9waWMnLFxuICAgIG1vZGVsczogW1xuICAgICAgeyBpZDogJ2NsYXVkZS1zb25uZXQtNS01JywgbmFtZTogJ0NsYXVkZSBTb25uZXQgNS41JyB9LFxuICAgICAgeyBpZDogJ2NsYXVkZS1vcHVzLTUtNScsIG5hbWU6ICdDbGF1ZGUgT3B1cyA1LjUnIH0sXG4gICAgICB7IGlkOiAnY2xhdWRlLWZhYmxlLTUtMScsIG5hbWU6ICdDbGF1ZGUgRmFibGUgNS4xJyB9LFxuICAgICAgeyBpZDogJ2NsYXVkZS1oYWlrdS00LTUtMjAyNTEwMDEnLCBuYW1lOiAnQ2xhdWRlIEhhaWt1IDQuNScgfSxcbiAgICBdLFxuICB9LFxuICAnb3BlbmFpJzoge1xuICAgIGlkOiAnb3BlbmFpJyxcbiAgICBuYW1lOiAnT3BlbkFJJyxcbiAgICBtb2RlbHM6IFtcbiAgICAgIHsgaWQ6ICdncHQtNS42LXNvbCcsIG5hbWU6ICdHUFQtNS42IFNvbCcgfSxcbiAgICAgIHsgaWQ6ICdncHQtNS42LXRlcnJhJywgbmFtZTogJ0dQVC01LjYgVGVycmEnIH0sXG4gICAgICB7IGlkOiAnZ3B0LTUuNi1sdW5hJywgbmFtZTogJ0dQVC01LjYgTHVuYScgfSxcbiAgICBdLFxuICB9LFxuICAnZ29vZ2xlJzoge1xuICAgIGlkOiAnZ29vZ2xlJyxcbiAgICBuYW1lOiAnR29vZ2xlJyxcbiAgICBtb2RlbHM6IFtcbiAgICAgIHsgaWQ6ICdnZW1pbmktMy43LWZsYXNoJywgbmFtZTogJ0dlbWluaSAzLjcgRmxhc2gnIH0sXG4gICAgICB7IGlkOiAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsIG5hbWU6ICdHZW1pbmkgMy4xIFBybycgfSxcbiAgICBdLFxuICB9LFxuICAneGFpJzoge1xuICAgIGlkOiAneGFpJyxcbiAgICBuYW1lOiAneEFJIChHcm9rKScsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnZ3Jvay00LjYnLCBuYW1lOiAnR3JvayA0LjYnIH0sXG4gICAgICB7IGlkOiAnZ3Jvay00LjUnLCBuYW1lOiAnR3JvayA0LjUnIH0sXG4gICAgICB7IGlkOiAnZ3Jvay00LjMnLCBuYW1lOiAnR3JvayA0LjMnIH0sXG4gICAgXSxcbiAgfSxcbiAgJ2FtYXpvbi1iZWRyb2NrJzoge1xuICAgIGlkOiAnYW1hem9uLWJlZHJvY2snLFxuICAgIG5hbWU6ICdBbWF6b24gQmVkcm9jaycsXG4gICAgLy8gQXV0aGVudGljYXRlZCBieSB0aGUgZGVwbG95bWVudCdzIElBTSByb2xlLCBuZXZlciBhbiBvcmctc3VwcGxpZWQga2V5LlxuICAgIGtleWxlc3M6IHRydWUsXG4gICAgLy8gQmVkcm9jayBpZHMgYXJlIHJlZ2lvbi1zY29wZWQgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBwcm9maWxlczsgdGhlIGB1cy5gXG4gICAgLy8gcHJlZml4IHRhcmdldHMgVVMgcmVnaW9ucyDigJQgc3dhcCB0aGUgcHJlZml4IChldS4vYXBhYy4v4oCmKSB0byBtYXRjaCB5b3VyXG4gICAgLy8gZGVwbG95IHJlZ2lvbiwgYW5kIGNvbmZpcm0gYXZhaWxhYmlsaXR5IGluIHRoZSBCZWRyb2NrIGNvbnNvbGUuXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAndXMuYW50aHJvcGljLmNsYXVkZS1zb25uZXQtNS01JywgbmFtZTogJ0NsYXVkZSBTb25uZXQgNS41JyB9LFxuICAgICAgeyBpZDogJ3VzLmFudGhyb3BpYy5jbGF1ZGUtb3B1cy01LTUnLCBuYW1lOiAnQ2xhdWRlIE9wdXMgNS41JyB9LFxuICAgICAgeyBpZDogJ3VzLmFudGhyb3BpYy5jbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxLXYxOjAnLCBuYW1lOiAnQ2xhdWRlIEhhaWt1IDQuNScgfSxcbiAgICAgIHsgaWQ6ICd1cy5hbWF6b24ubm92YS1wcm8tdjE6MCcsIG5hbWU6ICdBbWF6b24gTm92YSBQcm8nIH0sXG4gICAgXSxcbiAgfSxcbn07XG5cbi8qKlxuICogUHJvdmlkZXIgaWRzIGFuIG9yZ2FuaXphdGlvbiBDQU4gaG9sZCBpdHMgb3duIEFQSSBrZXkgZm9yIOKAlCB0aGUgY2F0YWxvZyBtaW51c1xuICogdGhlIGtleWxlc3MgcHJvdmlkZXJzICh7QGxpbmsgQUlQcm92aWRlckluZm8ua2V5bGVzc30pLlxuICpcbiAqIFRoZSBzaW5nbGUgbGlzdCBiZWhpbmQgZXZlcnkgb3JnLWtleSBzdXJmYWNlOiB0aGUgc2V0dGluZ3MgcGlja2VyIG9mZmVycyB0aGVzZVxuICogc2xvdHMsIHRoZSBwbGF0Zm9ybSBzdG9yZXMgYW5kIHJlLWVuY3J5cHRzIHRoZXNlIGZpZWxkcywgYEdFVFxuICogL2ludGVybmFsL2FpL2tleXMvOm9yZ0lkLzpwcm92aWRlcmAgc2VydmVzIG9ubHkgdGhlc2UsIGFuZCBvcmctYXdhcmUgbW9kZWxcbiAqIHNlbGVjdGlvbiBzcGVuZHMgb25seSB0aGVzZS4gQSBwcm92aWRlciBhYnNlbnQgaGVyZSBoYXMgbm8gb3JnIGtleSBieVxuICogY29uc3RydWN0aW9uLCBzbyBubyBjYWxsZXIgbmVlZHMgaXRzIG93biBleGNsdXNpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9LRVlfUFJPVklERVJfSURTOiByZWFkb25seSBzdHJpbmdbXSA9IE9iamVjdC52YWx1ZXMoQUlfUFJPVklERVJfQ0FUQUxPRylcbiAgLmZpbHRlcigocCkgPT4gIXAua2V5bGVzcylcbiAgLm1hcCgocCkgPT4gcC5pZCk7XG5cbi8qKiBUcnVlIHdoZW4gdGhlIHByb3ZpZGVyIGF1dGhlbnRpY2F0ZXMgd2l0aCB0aGUgZGVwbG95bWVudCdzIG93biBjcmVkZW50aWFscyByYXRoZXIgdGhhbiBhIGtleS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0tleWxlc3NQcm92aWRlcklkKHByb3ZpZGVySWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQUlfUFJPVklERVJfQ0FUQUxPR1twcm92aWRlcklkXT8ua2V5bGVzcyA9PT0gdHJ1ZTtcbn1cblxuLyoqIERpc3BsYXkgbmFtZXMgYnkgcHJvdmlkZXIgaWQg4oCUIHRoZSBjYXRhbG9nJ3MgbmFtZXMsIGZvciBVSSBzdXJmYWNlcyB0aGF0IGxpc3QgcHJvdmlkZXJzLiAqL1xuZXhwb3J0IGNvbnN0IEFJX1BST1ZJREVSX05BTUVTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICBPYmplY3QudmFsdWVzKEFJX1BST1ZJREVSX0NBVEFMT0cpLm1hcCgocCkgPT4gW3AuaWQsIHAubmFtZV0pLFxuKTtcblxuLyoqIE1vZGVsIGxpc3RzIGJ5IHByb3ZpZGVyIGlkIOKAlCB0aGUgY2F0YWxvZydzIG1vZGVscywgZm9yIFVJIHN1cmZhY2VzIHRoYXQgbmVlZCBvbmx5IHRob3NlLiAqL1xuZXhwb3J0IGNvbnN0IEFJX1BST1ZJREVSX01PREVMUzogUmVjb3JkPHN0cmluZywgQUlNb2RlbEluZm9bXT4gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIE9iamVjdC52YWx1ZXMoQUlfUFJPVklERVJfQ0FUQUxPRykubWFwKChwKSA9PiBbcC5pZCwgcC5tb2RlbHNdKSxcbik7XG4iXX0=
@@ -138,6 +138,29 @@ export declare function readProposerClaim(headers: unknown): ProposerClaim;
138
138
  */
139
139
  export declare function withProposalProvenance(headers: unknown, details?: Readonly<Record<string, unknown>>): Record<string, unknown>;
140
140
  /** A value an allowlisted org setting can hold. */
141
+ /**
142
+ * The proposal kinds the Ask agent can draft.
143
+ *
144
+ * Mirrors the frontend's `ProposalKind`; the two are pinned to each other by
145
+ * `ask-proposal-permissions.test.ts` in the frontend, which is where both are
146
+ * visible at once.
147
+ */
148
+ export type AskProposalKind = 'pipeline' | 'plugin' | 'template' | 'pipeline-edit' | 'plugin-edit' | 'template-edit' | 'org-settings-edit' | 'install-change-request' | 'compliance-exemption-request';
149
+ /**
150
+ * The permission a caller needs to COMMIT each proposal kind — the one fact the
151
+ * ask service and the dashboard must agree on, so it lives here rather than in
152
+ * either of them.
153
+ *
154
+ * `org-settings-edit` is null because it has no single answer: its requirement
155
+ * is the union of `permission` over the {@link ORG_SETTING_PROPOSAL_ALLOWLIST}
156
+ * rows the proposal actually touches, which only the proposal itself decides.
157
+ *
158
+ * NOT a gate anywhere. The service uses it to TELL the caller (and the model)
159
+ * whether a draft is appliable; the dashboard uses it to disable the Apply
160
+ * button and name what is missing. Enforcement stays with the owning service,
161
+ * which re-checks the caller's own token on the commit.
162
+ */
163
+ export declare const ASK_PROPOSAL_PERMISSION: Readonly<Record<AskProposalKind, Permission | null>>;
141
164
  export type OrgSettingValue = string | number | boolean;
142
165
  /** Which per-org record (and therefore which API) a field belongs to. */
143
166
  export type OrgSettingSurface = 'reporting' | 'complianceNotifications' | 'pluginSecurityNotifications';