@effect-auth/core 0.1.0-alpha.0 → 0.1.0-alpha.10

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 (222) hide show
  1. package/README.md +774 -36
  2. package/dist/ApiKey.d.ts +207 -0
  3. package/dist/ApiKey.d.ts.map +1 -0
  4. package/dist/ApiKey.js +275 -0
  5. package/dist/ApiKey.js.map +1 -0
  6. package/dist/AuditLog.d.ts +278 -1
  7. package/dist/AuditLog.d.ts.map +1 -1
  8. package/dist/AuditLog.js +217 -2
  9. package/dist/AuditLog.js.map +1 -1
  10. package/dist/AuthConfig.d.ts +42 -0
  11. package/dist/AuthConfig.d.ts.map +1 -0
  12. package/dist/AuthConfig.js +43 -0
  13. package/dist/AuthConfig.js.map +1 -0
  14. package/dist/AuthFlow.d.ts +465 -36
  15. package/dist/AuthFlow.d.ts.map +1 -1
  16. package/dist/AuthFlow.js +660 -5
  17. package/dist/AuthFlow.js.map +1 -1
  18. package/dist/AuthKernel.d.ts +3 -0
  19. package/dist/AuthKernel.d.ts.map +1 -0
  20. package/dist/AuthKernel.js +9 -0
  21. package/dist/AuthKernel.js.map +1 -0
  22. package/dist/Challenge.d.ts +27 -4
  23. package/dist/Challenge.d.ts.map +1 -1
  24. package/dist/Challenge.js +170 -1
  25. package/dist/Challenge.js.map +1 -1
  26. package/dist/Client.d.ts +378 -0
  27. package/dist/Client.d.ts.map +1 -0
  28. package/dist/Client.js +768 -0
  29. package/dist/Client.js.map +1 -0
  30. package/dist/Crypto.d.ts +9 -1
  31. package/dist/Crypto.d.ts.map +1 -1
  32. package/dist/Crypto.js +65 -1
  33. package/dist/Crypto.js.map +1 -1
  34. package/dist/EffectQbSqliteStorage.d.ts +600 -0
  35. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  36. package/dist/EffectQbSqliteStorage.js +1637 -0
  37. package/dist/EffectQbSqliteStorage.js.map +1 -0
  38. package/dist/EmailOtp.d.ts +120 -0
  39. package/dist/EmailOtp.d.ts.map +1 -0
  40. package/dist/EmailOtp.js +286 -0
  41. package/dist/EmailOtp.js.map +1 -0
  42. package/dist/EmailVerification.d.ts +121 -0
  43. package/dist/EmailVerification.d.ts.map +1 -0
  44. package/dist/EmailVerification.js +200 -0
  45. package/dist/EmailVerification.js.map +1 -0
  46. package/dist/HttpApi/Api.d.ts +1956 -0
  47. package/dist/HttpApi/Api.d.ts.map +1 -0
  48. package/dist/HttpApi/Api.js +2325 -0
  49. package/dist/HttpApi/Api.js.map +1 -0
  50. package/dist/HttpApi/Endpoints.d.ts +945 -0
  51. package/dist/HttpApi/Endpoints.d.ts.map +1 -0
  52. package/dist/HttpApi/Endpoints.js +373 -0
  53. package/dist/HttpApi/Endpoints.js.map +1 -0
  54. package/dist/HttpApi/Errors.d.ts +82 -0
  55. package/dist/HttpApi/Errors.d.ts.map +1 -0
  56. package/dist/HttpApi/Errors.js +184 -0
  57. package/dist/HttpApi/Errors.js.map +1 -0
  58. package/dist/HttpApi/Schemas.d.ts +1113 -0
  59. package/dist/HttpApi/Schemas.d.ts.map +1 -0
  60. package/dist/HttpApi/Schemas.js +734 -0
  61. package/dist/HttpApi/Schemas.js.map +1 -0
  62. package/dist/HttpApi/Security.d.ts +159 -0
  63. package/dist/HttpApi/Security.d.ts.map +1 -0
  64. package/dist/HttpApi/Security.js +530 -0
  65. package/dist/HttpApi/Security.js.map +1 -0
  66. package/dist/HttpApi/Transport.d.ts +65 -0
  67. package/dist/HttpApi/Transport.d.ts.map +1 -0
  68. package/dist/HttpApi/Transport.js +311 -0
  69. package/dist/HttpApi/Transport.js.map +1 -0
  70. package/dist/HttpApi/index.d.ts +8 -0
  71. package/dist/HttpApi/index.d.ts.map +1 -0
  72. package/dist/HttpApi/index.js +7 -0
  73. package/dist/HttpApi/index.js.map +1 -0
  74. package/dist/HttpApi.d.ts +2 -0
  75. package/dist/HttpApi.d.ts.map +1 -0
  76. package/dist/HttpApi.js +2 -0
  77. package/dist/HttpApi.js.map +1 -0
  78. package/dist/Identifiers.d.ts.map +1 -1
  79. package/dist/Identifiers.js.map +1 -1
  80. package/dist/Internal.d.ts +7 -0
  81. package/dist/Internal.d.ts.map +1 -0
  82. package/dist/Internal.js +12 -0
  83. package/dist/Internal.js.map +1 -0
  84. package/dist/Jwt.d.ts +271 -0
  85. package/dist/Jwt.d.ts.map +1 -0
  86. package/dist/Jwt.js +512 -0
  87. package/dist/Jwt.js.map +1 -0
  88. package/dist/LoginApproval.d.ts +314 -0
  89. package/dist/LoginApproval.d.ts.map +1 -0
  90. package/dist/LoginApproval.js +551 -0
  91. package/dist/LoginApproval.js.map +1 -0
  92. package/dist/LoginNotification.d.ts +183 -0
  93. package/dist/LoginNotification.d.ts.map +1 -0
  94. package/dist/LoginNotification.js +329 -0
  95. package/dist/LoginNotification.js.map +1 -0
  96. package/dist/LoginRisk.d.ts +73 -0
  97. package/dist/LoginRisk.d.ts.map +1 -0
  98. package/dist/LoginRisk.js +57 -0
  99. package/dist/LoginRisk.js.map +1 -0
  100. package/dist/MagicLink.d.ts +85 -0
  101. package/dist/MagicLink.d.ts.map +1 -0
  102. package/dist/MagicLink.js +206 -0
  103. package/dist/MagicLink.js.map +1 -0
  104. package/dist/Mailer.d.ts +147 -0
  105. package/dist/Mailer.d.ts.map +1 -0
  106. package/dist/Mailer.js +208 -0
  107. package/dist/Mailer.js.map +1 -0
  108. package/dist/OAuth.d.ts +934 -0
  109. package/dist/OAuth.d.ts.map +1 -0
  110. package/dist/OAuth.js +1661 -0
  111. package/dist/OAuth.js.map +1 -0
  112. package/dist/Passkey.d.ts +334 -0
  113. package/dist/Passkey.d.ts.map +1 -0
  114. package/dist/Passkey.js +422 -0
  115. package/dist/Passkey.js.map +1 -0
  116. package/dist/PasskeySimpleWebAuthn.d.ts +11 -0
  117. package/dist/PasskeySimpleWebAuthn.d.ts.map +1 -0
  118. package/dist/PasskeySimpleWebAuthn.js +181 -0
  119. package/dist/PasskeySimpleWebAuthn.js.map +1 -0
  120. package/dist/Password.d.ts +237 -0
  121. package/dist/Password.d.ts.map +1 -0
  122. package/dist/Password.js +641 -0
  123. package/dist/Password.js.map +1 -0
  124. package/dist/Policy.d.ts +7 -4
  125. package/dist/Policy.d.ts.map +1 -1
  126. package/dist/Policy.js +28 -5
  127. package/dist/Policy.js.map +1 -1
  128. package/dist/Privacy.d.ts +18 -0
  129. package/dist/Privacy.d.ts.map +1 -1
  130. package/dist/Privacy.js +63 -3
  131. package/dist/Privacy.js.map +1 -1
  132. package/dist/RateLimiter.d.ts +104 -0
  133. package/dist/RateLimiter.d.ts.map +1 -0
  134. package/dist/RateLimiter.js +118 -0
  135. package/dist/RateLimiter.js.map +1 -0
  136. package/dist/RecoveryCode.d.ts +169 -0
  137. package/dist/RecoveryCode.d.ts.map +1 -0
  138. package/dist/RecoveryCode.js +299 -0
  139. package/dist/RecoveryCode.js.map +1 -0
  140. package/dist/RefreshToken.d.ts +222 -0
  141. package/dist/RefreshToken.d.ts.map +1 -0
  142. package/dist/RefreshToken.js +342 -0
  143. package/dist/RefreshToken.js.map +1 -0
  144. package/dist/SecurityTimeline.d.ts +72 -0
  145. package/dist/SecurityTimeline.d.ts.map +1 -0
  146. package/dist/SecurityTimeline.js +386 -0
  147. package/dist/SecurityTimeline.js.map +1 -0
  148. package/dist/Sessions.d.ts +135 -11
  149. package/dist/Sessions.d.ts.map +1 -1
  150. package/dist/Sessions.js +546 -1
  151. package/dist/Sessions.js.map +1 -1
  152. package/dist/StepUp.d.ts +44 -0
  153. package/dist/StepUp.d.ts.map +1 -0
  154. package/dist/StepUp.js +82 -0
  155. package/dist/StepUp.js.map +1 -0
  156. package/dist/Storage.d.ts +175 -0
  157. package/dist/Storage.d.ts.map +1 -0
  158. package/dist/Storage.js +27 -0
  159. package/dist/Storage.js.map +1 -0
  160. package/dist/StorageMigrations.d.ts +19 -0
  161. package/dist/StorageMigrations.d.ts.map +1 -0
  162. package/dist/StorageMigrations.js +291 -0
  163. package/dist/StorageMigrations.js.map +1 -0
  164. package/dist/Testing.d.ts +9 -1
  165. package/dist/Testing.d.ts.map +1 -1
  166. package/dist/Testing.js +30 -2
  167. package/dist/Testing.js.map +1 -1
  168. package/dist/Totp.d.ts +220 -0
  169. package/dist/Totp.d.ts.map +1 -0
  170. package/dist/Totp.js +477 -0
  171. package/dist/Totp.js.map +1 -0
  172. package/dist/TrustedDevice.d.ts +127 -0
  173. package/dist/TrustedDevice.d.ts.map +1 -0
  174. package/dist/TrustedDevice.js +252 -0
  175. package/dist/TrustedDevice.js.map +1 -0
  176. package/dist/WaitUntil.d.ts +3 -0
  177. package/dist/WaitUntil.d.ts.map +1 -1
  178. package/dist/WaitUntil.js +6 -3
  179. package/dist/WaitUntil.js.map +1 -1
  180. package/dist/Webhook.d.ts +72 -0
  181. package/dist/Webhook.d.ts.map +1 -0
  182. package/dist/Webhook.js +82 -0
  183. package/dist/Webhook.js.map +1 -0
  184. package/dist/alchemy/cloudflare/Email.d.ts +25 -0
  185. package/dist/alchemy/cloudflare/Email.d.ts.map +1 -0
  186. package/dist/alchemy/cloudflare/Email.js +117 -0
  187. package/dist/alchemy/cloudflare/Email.js.map +1 -0
  188. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
  189. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  190. package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
  191. package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
  192. package/dist/cloudflare/Email.d.ts +25 -0
  193. package/dist/cloudflare/Email.d.ts.map +1 -0
  194. package/dist/cloudflare/Email.js +153 -0
  195. package/dist/cloudflare/Email.js.map +1 -0
  196. package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
  197. package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  198. package/dist/cloudflare/RateLimitDurableObject.js +51 -0
  199. package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
  200. package/dist/index.d.ts +22 -0
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +22 -0
  203. package/dist/index.js.map +1 -1
  204. package/dist/internal/RateLimitDurableObject.d.ts +32 -0
  205. package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
  206. package/dist/internal/RateLimitDurableObject.js +80 -0
  207. package/dist/internal/RateLimitDurableObject.js.map +1 -0
  208. package/migrations/0001_auth_storage.sql +32 -0
  209. package/migrations/0002_auth_password.sql +25 -0
  210. package/migrations/0003_auth_login_approval_review.sql +22 -0
  211. package/migrations/0004_auth_trusted_device.sql +12 -0
  212. package/migrations/0005_auth_passkey.sql +17 -0
  213. package/migrations/0006_auth_totp_factor.sql +17 -0
  214. package/migrations/0007_auth_recovery_code.sql +13 -0
  215. package/migrations/0008_auth_api_key.sql +17 -0
  216. package/migrations/0009_auth_refresh_token.sql +21 -0
  217. package/migrations/0010_auth_jwt_revocation.sql +8 -0
  218. package/migrations/0011_auth_oauth_account.sql +16 -0
  219. package/migrations/0012_auth_oauth_provider_token_vault.sql +20 -0
  220. package/migrations/0013_auth_security_timeline.sql +16 -0
  221. package/package.json +161 -16
  222. package/LICENSE +0 -21
@@ -0,0 +1,72 @@
1
+ import { Brand, Context, Effect, Layer } from "effect";
2
+ import type * as OptionTypes from "effect/Option";
3
+ import { AuditLog } from "./AuditLog.js";
4
+ import type { AuditActor, AuditLogService, AuditRequest, AuthAuditEvent } from "./AuditLog.js";
5
+ import type { UnixMillis, UserId } from "./Identifiers.js";
6
+ export type SecurityTimelineEventId = Brand.Branded<string, "auth/SecurityTimelineEventId">;
7
+ export declare const SecurityTimelineEventId: Brand.Constructor<SecurityTimelineEventId>;
8
+ export type SecurityTimelineEventType = AuthAuditEvent["type"];
9
+ export type SecurityTimelineEventCategory = "api_key" | "auth" | "jwt" | "mfa" | "oauth" | "policy" | "refresh_token" | "session";
10
+ export type SecurityTimelineEventSeverity = "info" | "warning" | "critical";
11
+ export interface SecurityTimelineEvent {
12
+ readonly id: SecurityTimelineEventId;
13
+ readonly userId: UserId;
14
+ readonly type: SecurityTimelineEventType;
15
+ readonly category: SecurityTimelineEventCategory;
16
+ readonly severity: SecurityTimelineEventSeverity;
17
+ readonly occurredAt: UnixMillis;
18
+ readonly summary: string;
19
+ readonly actor?: AuditActor;
20
+ readonly request?: AuditRequest;
21
+ readonly metadata?: Readonly<Record<string, unknown>>;
22
+ }
23
+ export interface SecurityTimelineListByUserInput {
24
+ readonly userId: UserId;
25
+ readonly limit?: number;
26
+ readonly beforeOccurredAt?: UnixMillis;
27
+ readonly types?: readonly SecurityTimelineEventType[];
28
+ readonly categories?: readonly SecurityTimelineEventCategory[];
29
+ }
30
+ export type SecurityTimelineStoreOperation = "insert" | "list";
31
+ declare const SecurityTimelineStoreError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
32
+ readonly _tag: "SecurityTimelineStoreError";
33
+ } & Readonly<A>;
34
+ export declare class SecurityTimelineStoreError extends SecurityTimelineStoreError_base<{
35
+ readonly operation: SecurityTimelineStoreOperation;
36
+ readonly message: string;
37
+ readonly cause?: unknown;
38
+ }> {
39
+ }
40
+ export interface SecurityTimelineStoreService {
41
+ readonly insert: (event: SecurityTimelineEvent) => Effect.Effect<void, SecurityTimelineStoreError>;
42
+ readonly listByUser: (input: SecurityTimelineListByUserInput) => Effect.Effect<readonly SecurityTimelineEvent[], SecurityTimelineStoreError>;
43
+ }
44
+ declare const SecurityTimelineStore_base: Context.ServiceClass<SecurityTimelineStore, "auth/SecurityTimelineStore", SecurityTimelineStoreService>;
45
+ export declare class SecurityTimelineStore extends SecurityTimelineStore_base {
46
+ }
47
+ export declare namespace SecurityTimelineStore {
48
+ const make: (service: SecurityTimelineStoreService) => SecurityTimelineStoreService;
49
+ }
50
+ export interface SecurityTimelineAuditProjectionOptions {
51
+ readonly id?: SecurityTimelineEventId;
52
+ }
53
+ export type SecurityTimelineAuditProjectionFailure = "ignore" | "fail";
54
+ export interface SecurityTimelineAuditLogOptions {
55
+ readonly timelineEventId?: (event: AuthAuditEvent) => SecurityTimelineEventId | undefined;
56
+ readonly projectionFailure?: SecurityTimelineAuditProjectionFailure;
57
+ }
58
+ export declare const securityTimelineEventFromAuditEvent: (event: AuthAuditEvent, options?: SecurityTimelineAuditProjectionOptions) => OptionTypes.Option<SecurityTimelineEvent>;
59
+ export declare const insert: (event: SecurityTimelineEvent) => Effect.Effect<void, SecurityTimelineStoreError, SecurityTimelineStore>;
60
+ export declare const listByUser: (input: SecurityTimelineListByUserInput) => Effect.Effect<readonly SecurityTimelineEvent[], SecurityTimelineStoreError, SecurityTimelineStore>;
61
+ export declare const recordAuditEvent: (event: AuthAuditEvent, options?: SecurityTimelineAuditProjectionOptions) => Effect.Effect<OptionTypes.Option<SecurityTimelineEvent>, SecurityTimelineStoreError, SecurityTimelineStore>;
62
+ export declare const makeSecurityTimelineAuditLog: (dependencies: {
63
+ readonly auditLog: AuditLogService;
64
+ readonly securityTimeline: SecurityTimelineStoreService;
65
+ readonly options?: SecurityTimelineAuditLogOptions;
66
+ }) => AuditLogService;
67
+ export declare const SecurityTimelineAuditLogLive: (options?: SecurityTimelineAuditLogOptions) => Layer.Layer<AuditLog, never, AuditLog | SecurityTimelineStore>;
68
+ export declare const filterSecurityTimelineEvents: (events: Iterable<SecurityTimelineEvent>, input: SecurityTimelineListByUserInput) => readonly SecurityTimelineEvent[];
69
+ export declare const makeSecurityTimelineStoreMemory: () => SecurityTimelineStoreService;
70
+ export declare const SecurityTimelineStoreMemoryLive: Layer.Layer<SecurityTimelineStore, never, never>;
71
+ export {};
72
+ //# sourceMappingURL=SecurityTimeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityTimeline.d.ts","sourceRoot":"","sources":["../src/SecurityTimeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,386 @@
1
+ import { Brand, Context, Data, Effect, Layer, Option } from "effect";
2
+ import { AuditLog, AuditLogError } from "./AuditLog.js";
3
+ export const SecurityTimelineEventId = Brand.nominal();
4
+ export class SecurityTimelineStoreError extends Data.TaggedError("SecurityTimelineStoreError") {
5
+ }
6
+ export class SecurityTimelineStore extends Context.Service()("auth/SecurityTimelineStore") {
7
+ }
8
+ (function (SecurityTimelineStore) {
9
+ SecurityTimelineStore.make = (service) => SecurityTimelineStore.of(service);
10
+ })(SecurityTimelineStore || (SecurityTimelineStore = {}));
11
+ const clone = (value) => structuredClone(value);
12
+ const omitUndefined = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
13
+ const eventIdFromAudit = (event, options) => options.id ??
14
+ (event.id === undefined ? undefined : SecurityTimelineEventId(event.id));
15
+ const actorUserId = (actor) => actor.type === "user" ? actor.userId : undefined;
16
+ const subjectUserId = (subject) => subject.type === "user" ? subject.userId : undefined;
17
+ const challengeId = (id) => id;
18
+ const credentialId = (id) => id;
19
+ const sessionId = (id) => id;
20
+ const oauthAccountId = (id) => id;
21
+ const oauthProviderId = (id) => id;
22
+ const passkeyCredentialId = (id) => id;
23
+ const policyId = (id) => id;
24
+ const apiKeyId = (id) => id;
25
+ const refreshTokenId = (id) => id;
26
+ const refreshTokenFamilyId = (id) => id;
27
+ const baseEvent = (event, options, userId, category, severity, summary, metadata, actor, request) => {
28
+ const id = eventIdFromAudit(event, options);
29
+ if (id === undefined) {
30
+ return Option.none();
31
+ }
32
+ return Option.some(omitUndefined({
33
+ id,
34
+ userId,
35
+ type: event.type,
36
+ category,
37
+ severity,
38
+ occurredAt: event.occurredAt,
39
+ summary,
40
+ actor,
41
+ request,
42
+ metadata,
43
+ }));
44
+ };
45
+ const authTimelineAuditEventTypes = new Set([
46
+ "auth.login.failed",
47
+ "auth.login.succeeded",
48
+ "auth.policy.denied",
49
+ "auth.session.revoked",
50
+ ]);
51
+ const oauthTimelineAuditEventTypes = new Set([
52
+ "auth.oauth.account.linked",
53
+ "auth.oauth.account.unlinked",
54
+ "auth.oauth.link_confirmation.confirmed",
55
+ "auth.oauth.link_confirmation.started",
56
+ "auth.oauth.provider_token.refreshed",
57
+ "auth.oauth.provider_token.revoked",
58
+ ]);
59
+ const mfaTimelineAuditEventTypes = new Set([
60
+ "auth.passkey.credential.revoked",
61
+ "auth.recovery_code.generated",
62
+ "auth.recovery_code.revoked",
63
+ "auth.recovery_code.verified",
64
+ "auth.totp.enrollment.started",
65
+ "auth.totp.factor.confirmed",
66
+ "auth.totp.factor.revoked",
67
+ "auth.totp.factor.verified",
68
+ ]);
69
+ const apiKeyTimelineAuditEventTypes = new Set([
70
+ "auth.api_key.created",
71
+ "auth.api_key.revoked",
72
+ "auth.api_key.verification_failed",
73
+ "auth.api_key.verified",
74
+ ]);
75
+ const refreshTokenTimelineAuditEventTypes = new Set([
76
+ "auth.refresh_token.issued",
77
+ "auth.refresh_token.reuse_detected",
78
+ "auth.refresh_token.revoked",
79
+ "auth.refresh_token.rotated",
80
+ ]);
81
+ const jwtTimelineAuditEventTypes = new Set([
82
+ "auth.jwt.introspected",
83
+ "auth.jwt.revoked",
84
+ ]);
85
+ const isAuthTimelineAuditEvent = (event) => authTimelineAuditEventTypes.has(event.type);
86
+ const isOAuthTimelineAuditEvent = (event) => oauthTimelineAuditEventTypes.has(event.type);
87
+ const isMfaTimelineAuditEvent = (event) => mfaTimelineAuditEventTypes.has(event.type);
88
+ const isApiKeyTimelineAuditEvent = (event) => apiKeyTimelineAuditEventTypes.has(event.type);
89
+ const isRefreshTokenTimelineAuditEvent = (event) => refreshTokenTimelineAuditEventTypes.has(event.type);
90
+ const isJwtTimelineAuditEvent = (event) => jwtTimelineAuditEventTypes.has(event.type);
91
+ const authTimelineEventFromAuditEvent = (event, options) => {
92
+ switch (event.type) {
93
+ case "auth.login.succeeded": {
94
+ const userId = actorUserId(event.actor);
95
+ return userId === undefined
96
+ ? Option.none()
97
+ : baseEvent(event, options, userId, "auth", "info", "Login succeeded", { method: event.method }, event.actor, event.request);
98
+ }
99
+ case "auth.login.failed": {
100
+ const userId = subjectUserId(event.subject);
101
+ return userId === undefined
102
+ ? Option.none()
103
+ : baseEvent(event, options, userId, "auth", "warning", "Login failed", { method: event.method, reason: event.reason }, undefined, event.request);
104
+ }
105
+ case "auth.session.revoked": {
106
+ const userId = actorUserId(event.actor);
107
+ return userId === undefined
108
+ ? Option.none()
109
+ : baseEvent(event, options, userId, "session", "info", "Session revoked", { sessionId: sessionId(event.sessionId), reason: event.reason }, event.actor, event.request);
110
+ }
111
+ case "auth.policy.denied": {
112
+ const userId = actorUserId(event.actor);
113
+ return userId === undefined
114
+ ? Option.none()
115
+ : baseEvent(event, options, userId, "policy", "warning", "Security policy denied", { policyId: policyId(event.policyId), reason: event.reason }, event.actor, event.request);
116
+ }
117
+ }
118
+ };
119
+ const oauthTimelineEventFromAuditEvent = (event, options) => {
120
+ switch (event.type) {
121
+ case "auth.oauth.account.linked": {
122
+ return baseEvent(event, options, event.userId, "oauth", "info", "OAuth account linked", {
123
+ accountId: oauthAccountId(event.accountId),
124
+ providerId: oauthProviderId(event.providerId),
125
+ providerAccountId: event.providerAccountId,
126
+ reason: event.reason,
127
+ }, event.actor, event.request);
128
+ }
129
+ case "auth.oauth.account.unlinked": {
130
+ return baseEvent(event, options, event.userId, "oauth", "info", "OAuth account unlinked", {
131
+ accountId: oauthAccountId(event.accountId),
132
+ providerId: oauthProviderId(event.providerId),
133
+ providerAccountId: event.providerAccountId,
134
+ reason: event.reason,
135
+ }, event.actor, event.request);
136
+ }
137
+ case "auth.oauth.link_confirmation.started": {
138
+ return baseEvent(event, options, event.userId, "oauth", "info", "OAuth link confirmation started", {
139
+ challengeId: challengeId(event.challengeId),
140
+ providerId: oauthProviderId(event.providerId),
141
+ providerAccountId: event.providerAccountId,
142
+ reason: event.reason,
143
+ }, event.actor, event.request);
144
+ }
145
+ case "auth.oauth.link_confirmation.confirmed": {
146
+ return baseEvent(event, options, event.userId, "oauth", "info", "OAuth link confirmation confirmed", {
147
+ challengeId: challengeId(event.challengeId),
148
+ providerId: oauthProviderId(event.providerId),
149
+ providerAccountId: event.providerAccountId,
150
+ reason: event.reason,
151
+ }, event.actor, event.request);
152
+ }
153
+ case "auth.oauth.provider_token.refreshed": {
154
+ return baseEvent(event, options, event.userId, "oauth", "info", "OAuth provider token refreshed", {
155
+ accountId: oauthAccountId(event.accountId),
156
+ providerId: oauthProviderId(event.providerId),
157
+ providerAccountId: event.providerAccountId,
158
+ }, event.actor, event.request);
159
+ }
160
+ case "auth.oauth.provider_token.revoked": {
161
+ return baseEvent(event, options, event.userId, "oauth", "info", "OAuth provider token revoked", {
162
+ accountId: oauthAccountId(event.accountId),
163
+ providerId: oauthProviderId(event.providerId),
164
+ providerAccountId: event.providerAccountId,
165
+ reason: event.reason,
166
+ }, event.actor, event.request);
167
+ }
168
+ }
169
+ };
170
+ const mfaTimelineEventFromAuditEvent = (event, options) => {
171
+ switch (event.type) {
172
+ case "auth.passkey.credential.revoked": {
173
+ return baseEvent(event, options, event.userId, "mfa", "info", "Passkey revoked", {
174
+ credentialId: passkeyCredentialId(event.credentialId),
175
+ reason: event.reason,
176
+ }, event.actor, event.request);
177
+ }
178
+ case "auth.totp.enrollment.started": {
179
+ return baseEvent(event, options, event.userId, "mfa", "info", "TOTP enrollment started", { factorId: credentialId(event.factorId) }, event.actor, event.request);
180
+ }
181
+ case "auth.totp.factor.confirmed": {
182
+ return baseEvent(event, options, event.userId, "mfa", "info", "TOTP factor confirmed", { factorId: credentialId(event.factorId) }, event.actor, event.request);
183
+ }
184
+ case "auth.totp.factor.verified": {
185
+ return baseEvent(event, options, event.userId, "mfa", "info", "TOTP factor verified", { factorId: credentialId(event.factorId) }, event.actor, event.request);
186
+ }
187
+ case "auth.totp.factor.revoked": {
188
+ return baseEvent(event, options, event.userId, "mfa", "info", "TOTP factor revoked", { factorId: credentialId(event.factorId), reason: event.reason }, event.actor, event.request);
189
+ }
190
+ case "auth.recovery_code.generated": {
191
+ return baseEvent(event, options, event.userId, "mfa", "info", "Recovery codes generated", { count: event.count }, event.actor, event.request);
192
+ }
193
+ case "auth.recovery_code.verified": {
194
+ return baseEvent(event, options, event.userId, "mfa", "warning", "Recovery code used", { codeId: credentialId(event.codeId) }, event.actor, event.request);
195
+ }
196
+ case "auth.recovery_code.revoked": {
197
+ return baseEvent(event, options, event.userId, "mfa", "info", "Recovery code revoked", { codeId: credentialId(event.codeId), reason: event.reason }, event.actor, event.request);
198
+ }
199
+ }
200
+ };
201
+ const apiKeyTimelineEventFromAuditEvent = (event, options) => {
202
+ switch (event.type) {
203
+ case "auth.api_key.created": {
204
+ return baseEvent(event, options, event.userId, "api_key", "info", "API key created", { keyId: apiKeyId(event.keyId), scopes: event.scopes }, event.actor, event.request);
205
+ }
206
+ case "auth.api_key.verified": {
207
+ return baseEvent(event, options, event.userId, "api_key", "info", "API key used", { keyId: apiKeyId(event.keyId), scopes: event.scopes }, event.actor, event.request);
208
+ }
209
+ case "auth.api_key.revoked": {
210
+ return baseEvent(event, options, event.userId, "api_key", "info", "API key revoked", { keyId: apiKeyId(event.keyId), reason: event.reason }, event.actor, event.request);
211
+ }
212
+ case "auth.api_key.verification_failed": {
213
+ const userId = actorUserId(event.actor);
214
+ return userId === undefined
215
+ ? Option.none()
216
+ : baseEvent(event, options, userId, "api_key", "warning", "API key verification failed", { reason: event.reason }, event.actor, event.request);
217
+ }
218
+ }
219
+ };
220
+ const refreshTokenTimelineEventFromAuditEvent = (event, options) => {
221
+ switch (event.type) {
222
+ case "auth.refresh_token.issued": {
223
+ return baseEvent(event, options, event.userId, "refresh_token", "info", "Refresh token issued", {
224
+ tokenId: refreshTokenId(event.tokenId),
225
+ familyId: refreshTokenFamilyId(event.familyId),
226
+ expiresAt: event.expiresAt,
227
+ }, event.actor, event.request);
228
+ }
229
+ case "auth.refresh_token.rotated": {
230
+ return baseEvent(event, options, event.userId, "refresh_token", "info", "Refresh token rotated", {
231
+ previousTokenId: refreshTokenId(event.previousTokenId),
232
+ tokenId: refreshTokenId(event.tokenId),
233
+ familyId: refreshTokenFamilyId(event.familyId),
234
+ expiresAt: event.expiresAt,
235
+ }, event.actor, event.request);
236
+ }
237
+ case "auth.refresh_token.reuse_detected": {
238
+ return baseEvent(event, options, event.userId, "refresh_token", "critical", "Refresh token reuse detected", {
239
+ tokenId: refreshTokenId(event.tokenId),
240
+ familyId: refreshTokenFamilyId(event.familyId),
241
+ }, event.actor, event.request);
242
+ }
243
+ case "auth.refresh_token.revoked": {
244
+ return baseEvent(event, options, event.userId, "refresh_token", "info", "Refresh token revoked", {
245
+ tokenId: refreshTokenId(event.tokenId),
246
+ familyId: refreshTokenFamilyId(event.familyId),
247
+ reason: event.reason,
248
+ }, event.actor, event.request);
249
+ }
250
+ }
251
+ };
252
+ const jwtTimelineEventFromAuditEvent = (event, options) => {
253
+ const userId = actorUserId(event.actor);
254
+ if (userId === undefined) {
255
+ return Option.none();
256
+ }
257
+ switch (event.type) {
258
+ case "auth.jwt.introspected": {
259
+ return baseEvent(event, options, userId, "jwt", event.active ? "info" : "warning", event.active ? "JWT introspected" : "JWT introspection failed", {
260
+ active: event.active,
261
+ jwtId: event.jwtId,
262
+ expiresAt: event.expiresAt,
263
+ reason: event.reason,
264
+ }, event.actor, event.request);
265
+ }
266
+ case "auth.jwt.revoked": {
267
+ return baseEvent(event, options, userId, "jwt", "info", "JWT revoked", {
268
+ jwtId: event.jwtId,
269
+ expiresAt: event.expiresAt,
270
+ reason: event.reason,
271
+ }, event.actor, event.request);
272
+ }
273
+ }
274
+ };
275
+ export const securityTimelineEventFromAuditEvent = (event, options = {}) => {
276
+ if (isAuthTimelineAuditEvent(event)) {
277
+ return authTimelineEventFromAuditEvent(event, options);
278
+ }
279
+ if (isOAuthTimelineAuditEvent(event)) {
280
+ return oauthTimelineEventFromAuditEvent(event, options);
281
+ }
282
+ if (isMfaTimelineAuditEvent(event)) {
283
+ return mfaTimelineEventFromAuditEvent(event, options);
284
+ }
285
+ if (isApiKeyTimelineAuditEvent(event)) {
286
+ return apiKeyTimelineEventFromAuditEvent(event, options);
287
+ }
288
+ if (isRefreshTokenTimelineAuditEvent(event)) {
289
+ return refreshTokenTimelineEventFromAuditEvent(event, options);
290
+ }
291
+ if (isJwtTimelineAuditEvent(event)) {
292
+ return jwtTimelineEventFromAuditEvent(event, options);
293
+ }
294
+ return Option.none();
295
+ };
296
+ export const insert = (event) => SecurityTimelineStore.use((store) => store.insert(event));
297
+ export const listByUser = (input) => SecurityTimelineStore.use((store) => store.listByUser(input));
298
+ export const recordAuditEvent = (event, options = {}) => {
299
+ const timelineEvent = securityTimelineEventFromAuditEvent(event, options);
300
+ return Option.isNone(timelineEvent)
301
+ ? Effect.succeed(Option.none())
302
+ : insert(timelineEvent.value).pipe(Effect.as(timelineEvent));
303
+ };
304
+ const securityTimelineProjectionOptions = (event, options) => {
305
+ const id = event.id === undefined && options.timelineEventId !== undefined
306
+ ? options.timelineEventId(event)
307
+ : undefined;
308
+ return id === undefined ? {} : { id };
309
+ };
310
+ const projectAuditEventToSecurityTimeline = (dependencies, event, options) => {
311
+ const timelineEvent = securityTimelineEventFromAuditEvent(event, securityTimelineProjectionOptions(event, options));
312
+ return Option.isNone(timelineEvent)
313
+ ? Effect.void
314
+ : dependencies.securityTimeline.insert(timelineEvent.value);
315
+ };
316
+ const securityTimelineProjectionError = (cause) => new AuditLogError({
317
+ message: "Failed to project audit event to security timeline",
318
+ cause,
319
+ });
320
+ export const makeSecurityTimelineAuditLog = (dependencies) => {
321
+ const options = dependencies.options ?? {};
322
+ const projectionFailure = options.projectionFailure ?? "ignore";
323
+ return AuditLog.make({
324
+ emit: (event) => {
325
+ const projection = projectAuditEventToSecurityTimeline(dependencies, event, options);
326
+ const handledProjection = projectionFailure === "fail"
327
+ ? projection.pipe(Effect.mapError(securityTimelineProjectionError))
328
+ : projection.pipe(Effect.catchTag("SecurityTimelineStoreError", () => Effect.void));
329
+ return dependencies.auditLog.emit(event).pipe(Effect.flatMap(() => handledProjection));
330
+ },
331
+ });
332
+ };
333
+ export const SecurityTimelineAuditLogLive = (options = {}) => Layer.effect(AuditLog)(Effect.gen(function* () {
334
+ const auditLog = yield* AuditLog;
335
+ const securityTimeline = yield* SecurityTimelineStore;
336
+ return makeSecurityTimelineAuditLog({
337
+ auditLog,
338
+ securityTimeline,
339
+ options,
340
+ });
341
+ }));
342
+ const compareTimelineEvents = (left, right) => {
343
+ const occurredAt = Number(right.occurredAt) - Number(left.occurredAt);
344
+ return occurredAt === 0
345
+ ? String(right.id).localeCompare(String(left.id))
346
+ : occurredAt;
347
+ };
348
+ const insertSortedTimelineEvent = (events, event) => {
349
+ const index = events.findIndex((existing) => compareTimelineEvents(event, existing) < 0);
350
+ return index === -1
351
+ ? [...events, event]
352
+ : [...events.slice(0, index), event, ...events.slice(index)];
353
+ };
354
+ const sortTimelineEvents = (events) => {
355
+ let sorted = [];
356
+ for (const event of events) {
357
+ sorted = insertSortedTimelineEvent(sorted, event);
358
+ }
359
+ return sorted;
360
+ };
361
+ export const filterSecurityTimelineEvents = (events, input) => {
362
+ const types = input.types === undefined ? undefined : new Set(input.types);
363
+ const categories = input.categories === undefined ? undefined : new Set(input.categories);
364
+ const beforeOccurredAt = input.beforeOccurredAt === undefined
365
+ ? undefined
366
+ : Number(input.beforeOccurredAt);
367
+ const limit = input.limit === undefined ? undefined : Math.max(0, Math.floor(input.limit));
368
+ const filtered = [...events]
369
+ .filter((event) => event.userId === input.userId)
370
+ .filter((event) => beforeOccurredAt === undefined || Number(event.occurredAt) < beforeOccurredAt)
371
+ .filter((event) => types === undefined || types.has(event.type))
372
+ .filter((event) => categories === undefined || categories.has(event.category));
373
+ const sorted = sortTimelineEvents(filtered).map(clone);
374
+ return limit === undefined ? sorted : sorted.slice(0, limit);
375
+ };
376
+ export const makeSecurityTimelineStoreMemory = () => {
377
+ const eventsById = new Map();
378
+ return SecurityTimelineStore.make({
379
+ insert: (event) => Effect.sync(() => {
380
+ eventsById.set(event.id, clone(event));
381
+ }),
382
+ listByUser: (input) => Effect.sync(() => filterSecurityTimelineEvents(eventsById.values(), input)),
383
+ });
384
+ };
385
+ export const SecurityTimelineStoreMemoryLive = Layer.sync(SecurityTimelineStore)(makeSecurityTimelineStoreMemory);
386
+ //# sourceMappingURL=SecurityTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityTimeline.js","sourceRoot":"","sources":["../src/SecurityTimeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAyBxD,MAAM,CAAC,MAAM,uBAAuB,GAClC,KAAK,CAAC,OAAO,EAA2B,CAAC;AAuC3C,MAAM,OAAO,0BAA2B,SAAQ,IAAI,CAAC,WAAW,CAC9D,4BAA4B,CAK5B;CAAG;AAWL,MAAM,OAAO,qBAAsB,SAAQ,OAAO,CAAC,OAAO,EAGvD,CAAC,4BAA4B,CAAC;CAAG;AAEpC,WAAiB,qBAAqB;IACvB,0BAAI,GAAG,CAClB,OAAqC,EACP,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACvE,CAAC,EAJgB,qBAAqB,KAArB,qBAAqB,QAIrC;AAeD,MAAM,KAAK,GAAG,CAAI,KAAQ,EAAK,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,aAAa,GAAG,CAA8C,MAAS,EAAK,EAAE,CAClF,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC7D,CAAC;AAET,MAAM,gBAAgB,GAAG,CACvB,KAAqB,EACrB,OAA+C,EACV,EAAE,CACvC,OAAO,CAAC,EAAE;IACV,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3E,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAsB,EAAE,CAC5D,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAEnD,MAAM,aAAa,GAAG,CAAC,OAAqB,EAAsB,EAAE,CAClE,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAEvD,MAAM,WAAW,GAAG,CAAC,EAAe,EAAe,EAAE,CAAC,EAAE,CAAC;AACzD,MAAM,YAAY,GAAG,CAAC,EAAgB,EAAgB,EAAE,CAAC,EAAE,CAAC;AAC5D,MAAM,SAAS,GAAG,CAAC,EAAyB,EAAyB,EAAE,CAAC,EAAE,CAAC;AAC3E,MAAM,cAAc,GAAG,CAAC,EAAkB,EAAkB,EAAE,CAAC,EAAE,CAAC;AAClE,MAAM,eAAe,GAAG,CAAC,EAAmB,EAAmB,EAAE,CAAC,EAAE,CAAC;AACrE,MAAM,mBAAmB,GAAG,CAAC,EAAuB,EAAuB,EAAE,CAAC,EAAE,CAAC;AACjF,MAAM,QAAQ,GAAG,CAAC,EAAY,EAAY,EAAE,CAAC,EAAE,CAAC;AAChD,MAAM,QAAQ,GAAG,CAAC,EAAY,EAAY,EAAE,CAAC,EAAE,CAAC;AAChD,MAAM,cAAc,GAAG,CAAC,EAA8B,EAA8B,EAAE,CACpF,EAAE,CAAC;AACL,MAAM,oBAAoB,GAAG,CAC3B,EAAwB,EACF,EAAE,CAAC,EAAE,CAAC;AAE9B,MAAM,SAAS,GAAG,CAChB,KAAqB,EACrB,OAA+C,EAC/C,MAAc,EACd,QAAuC,EACvC,QAAuC,EACvC,OAAe,EACf,QAA4C,EAC5C,KAAkB,EAClB,OAAsB,EACqB,EAAE;IAC7C,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE5C,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAChB,aAAa,CAAC;QACZ,EAAE;QACF,MAAM;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ;QACR,QAAQ;QACR,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO;QACP,KAAK;QACL,OAAO;QACP,QAAQ;KACT,CAAiC,CACnC,CAAC;AACJ,CAAC,CAAC;AAoDF,MAAM,2BAA2B,GAAwC,IAAI,GAAG,CAAC;IAC/E,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAwC,IAAI,GAAG,CAAC;IAChF,2BAA2B;IAC3B,6BAA6B;IAC7B,wCAAwC;IACxC,sCAAsC;IACtC,qCAAqC;IACrC,mCAAmC;CACpC,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAwC,IAAI,GAAG,CAAC;IAC9E,iCAAiC;IACjC,8BAA8B;IAC9B,4BAA4B;IAC5B,6BAA6B;IAC7B,8BAA8B;IAC9B,4BAA4B;IAC5B,0BAA0B;IAC1B,2BAA2B;CAC5B,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAwC,IAAI,GAAG,CAAC;IACjF,sBAAsB;IACtB,sBAAsB;IACtB,kCAAkC;IAClC,uBAAuB;CACxB,CAAC,CAAC;AAEH,MAAM,mCAAmC,GACvC,IAAI,GAAG,CAAC;IACN,2BAA2B;IAC3B,mCAAmC;IACnC,4BAA4B;IAC5B,4BAA4B;CAC7B,CAAC,CAAC;AAEL,MAAM,0BAA0B,GAAwC,IAAI,GAAG,CAAC;IAC9E,uBAAuB;IACvB,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAC/B,KAAqB,EACY,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAElF,MAAM,yBAAyB,GAAG,CAChC,KAAqB,EACa,EAAE,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEpF,MAAM,uBAAuB,GAAG,CAC9B,KAAqB,EACW,EAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEhF,MAAM,0BAA0B,GAAG,CACjC,KAAqB,EACc,EAAE,CACrC,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEhD,MAAM,gCAAgC,GAAG,CACvC,KAAqB,EACoB,EAAE,CAC3C,mCAAmC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEtD,MAAM,uBAAuB,GAAG,CAC9B,KAAqB,EACW,EAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEhF,MAAM,+BAA+B,GAAG,CACtC,KAA6B,EAC7B,OAA+C,EACJ,EAAE;IAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAExC,OAAO,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;gBACf,CAAC,CAAC,SAAS,CACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EACxB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACR,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE5C,OAAO,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;gBACf,CAAC,CAAC,SAAS,CACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAC9C,SAAS,EACT,KAAK,CAAC,OAAO,CACd,CAAC;QACR,CAAC;QACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAExC,OAAO,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;gBACf,CAAC,CAAC,SAAS,CACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAC/D,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACR,CAAC;QACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAExC,OAAO,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;gBACf,CAAC,CAAC,SAAS,CACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,wBAAwB,EACxB,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAC5D,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACR,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CACvC,KAA8B,EAC9B,OAA+C,EACJ,EAAE;IAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,OAAO,EACP,MAAM,EACN,sBAAsB,EACtB;gBACE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC1C,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,6BAA6B,CAAC,CAAC,CAAC;YACnC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,OAAO,EACP,MAAM,EACN,wBAAwB,EACxB;gBACE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC1C,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,sCAAsC,CAAC,CAAC,CAAC;YAC5C,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,OAAO,EACP,MAAM,EACN,iCAAiC,EACjC;gBACE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC3C,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,wCAAwC,CAAC,CAAC,CAAC;YAC9C,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,OAAO,EACP,MAAM,EACN,mCAAmC,EACnC;gBACE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC3C,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,qCAAqC,CAAC,CAAC,CAAC;YAC3C,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,OAAO,EACP,MAAM,EACN,gCAAgC,EAChC;gBACE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC1C,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;aAC3C,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,mCAAmC,CAAC,CAAC,CAAC;YACzC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,OAAO,EACP,MAAM,EACN,8BAA8B,EAC9B;gBACE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC1C,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CACrC,KAA4B,EAC5B,OAA+C,EACJ,EAAE;IAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iCAAiC,CAAC,CAAC,CAAC;YACvC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,MAAM,EACN,iBAAiB,EACjB;gBACE,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;gBACrD,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,8BAA8B,CAAC,CAAC,CAAC;YACpC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,MAAM,EACN,yBAAyB,EACzB,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAC1C,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,MAAM,EACN,uBAAuB,EACvB,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAC1C,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,MAAM,EACN,sBAAsB,EACtB,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAC1C,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAChE,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,8BAA8B,CAAC,CAAC,CAAC;YACpC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,MAAM,EACN,0BAA0B,EAC1B,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EACtB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,6BAA6B,CAAC,CAAC,CAAC;YACnC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,SAAS,EACT,oBAAoB,EACpB,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EACtC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,KAAK,EACL,MAAM,EACN,uBAAuB,EACvB,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAC5D,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACxC,KAA+B,EAC/B,OAA+C,EACJ,EAAE;IAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EACtD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,SAAS,EACT,MAAM,EACN,cAAc,EACd,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EACtD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EACtD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,kCAAkC,CAAC,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAExC,OAAO,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;gBACf,CAAC,CAAC,SAAS,CACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,6BAA6B,EAC7B,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EACxB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACR,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,uCAAuC,GAAG,CAC9C,KAAqC,EACrC,OAA+C,EACJ,EAAE;IAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,eAAe,EACf,MAAM,EACN,sBAAsB,EACtB;gBACE,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;gBACtC,QAAQ,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC9C,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,eAAe,EACf,MAAM,EACN,uBAAuB,EACvB;gBACE,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC;gBACtD,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;gBACtC,QAAQ,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC9C,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,mCAAmC,CAAC,CAAC,CAAC;YACzC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,eAAe,EACf,UAAU,EACV,8BAA8B,EAC9B;gBACE,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;gBACtC,QAAQ,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;aAC/C,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,eAAe,EACf,MAAM,EACN,uBAAuB,EACvB;gBACE,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;gBACtC,QAAQ,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC9C,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CACrC,KAA4B,EAC5B,OAA+C,EACJ,EAAE;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACjC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,0BAA0B,EAC9D;gBACE,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,OAAO,SAAS,CACd,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,aAAa,EACb;gBACE,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,KAAqB,EACrB,UAAkD,EAAE,EACT,EAAE;IAC7C,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,gCAAgC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,8BAA8B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,iCAAiC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,uCAAuC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,8BAA8B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,KAA4B,EAC4C,EAAE,CAC1E,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAAsC,EAKtC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAqB,EACrB,UAAkD,EAAE,EAKpD,EAAE;IACF,MAAM,aAAa,GAAG,mCAAmC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE1E,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QACjC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACxC,KAAqB,EACrB,OAAwC,EACA,EAAE;IAC1C,MAAM,EAAE,GACN,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;QAC7D,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC;QAChC,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAAG,CAC1C,YAEC,EACD,KAAqB,EACrB,OAAwC,EACxC,EAAE;IACF,MAAM,aAAa,GAAG,mCAAmC,CACvD,KAAK,EACL,iCAAiC,CAAC,KAAK,EAAE,OAAO,CAAC,CAClD,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QACjC,CAAC,CAAC,MAAM,CAAC,IAAI;QACb,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CAAC,KAAc,EAAE,EAAE,CACzD,IAAI,aAAa,CAAC;IAChB,OAAO,EAAE,oDAAoD;IAC7D,KAAK;CACN,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,YAI5C,EAAmB,EAAE;IACpB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3C,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,QAAQ,CAAC;IAEhE,OAAO,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACd,MAAM,UAAU,GAAG,mCAAmC,CACpD,YAAY,EACZ,KAAK,EACL,OAAO,CACR,CAAC;YACF,MAAM,iBAAiB,GACrB,iBAAiB,KAAK,MAAM;gBAC1B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;gBACnE,CAAC,CAAC,UAAU,CAAC,IAAI,CACb,MAAM,CAAC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACjE,CAAC;YAER,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CACxC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,UAA2C,EAAE,EAC7C,EAAE,CACF,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CACpB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC;IACjC,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAAC;IAEtD,OAAO,4BAA4B,CAAC;QAClC,QAAQ;QACR,gBAAgB;QAChB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC;AAEJ,MAAM,qBAAqB,GAAG,CAC5B,IAA2B,EAC3B,KAA4B,EACpB,EAAE;IACV,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEtE,OAAO,UAAU,KAAK,CAAC;QACrB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAChC,MAAwC,EACxC,KAA4B,EACM,EAAE;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAC5B,CAAC,QAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CACzD,CAAC;IAEF,OAAO,KAAK,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC;QACpB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,MAAuC,EACL,EAAE;IACpC,IAAI,MAAM,GAAqC,EAAE,CAAC;IAElD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,MAAuC,EACvC,KAAsC,EACJ,EAAE;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3E,MAAM,UAAU,GACd,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzE,MAAM,gBAAgB,GACpB,KAAK,CAAC,gBAAgB,KAAK,SAAS;QAClC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACrC,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC;SACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;SAChD,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAChF;SACA,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC/D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEvD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAC1C,GAAiC,EAAE;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkD,CAAC;IAE7E,OAAO,qBAAqB,CAAC,IAAI,CAAC;QAChC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC;QACJ,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;KAC9E,CAAC,CAAC;AACL,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAC9E,+BAA+B,CAChC,CAAC"}