@providerkit/core 0.23.0 → 0.25.0

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 (96) hide show
  1. package/README.md +43 -7
  2. package/dist/auth/device.d.ts +3 -2
  3. package/dist/auth/device.d.ts.map +1 -1
  4. package/dist/auth/device.js +5 -2
  5. package/dist/auth/device.js.map +1 -1
  6. package/dist/auth/flows.d.ts +5 -1
  7. package/dist/auth/flows.d.ts.map +1 -1
  8. package/dist/auth/flows.js +237 -0
  9. package/dist/auth/flows.js.map +1 -1
  10. package/dist/auth/oauth.d.ts +4 -2
  11. package/dist/auth/oauth.d.ts.map +1 -1
  12. package/dist/auth/oauth.js +4 -3
  13. package/dist/auth/oauth.js.map +1 -1
  14. package/dist/auth/with-token.d.ts +4 -1
  15. package/dist/auth/with-token.d.ts.map +1 -1
  16. package/dist/auth/with-token.js +9 -4
  17. package/dist/auth/with-token.js.map +1 -1
  18. package/dist/errors.d.ts.map +1 -1
  19. package/dist/errors.js +3 -0
  20. package/dist/errors.js.map +1 -1
  21. package/dist/gate.d.ts +29 -0
  22. package/dist/gate.d.ts.map +1 -0
  23. package/dist/gate.js +96 -0
  24. package/dist/gate.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +3 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/key-pool.d.ts +11 -0
  30. package/dist/key-pool.d.ts.map +1 -1
  31. package/dist/key-pool.js +14 -0
  32. package/dist/key-pool.js.map +1 -1
  33. package/dist/presets.d.ts +53 -0
  34. package/dist/presets.d.ts.map +1 -1
  35. package/dist/presets.js +100 -0
  36. package/dist/presets.js.map +1 -1
  37. package/dist/providers/anthropic.d.ts +7 -0
  38. package/dist/providers/anthropic.d.ts.map +1 -1
  39. package/dist/providers/anthropic.js +3 -1
  40. package/dist/providers/anthropic.js.map +1 -1
  41. package/dist/providers/factory.d.ts +36 -0
  42. package/dist/providers/factory.d.ts.map +1 -1
  43. package/dist/providers/factory.js +208 -22
  44. package/dist/providers/factory.js.map +1 -1
  45. package/dist/providers/gemini.d.ts +17 -5
  46. package/dist/providers/gemini.d.ts.map +1 -1
  47. package/dist/providers/gemini.js +241 -119
  48. package/dist/providers/gemini.js.map +1 -1
  49. package/dist/providers/openai.d.ts +7 -0
  50. package/dist/providers/openai.d.ts.map +1 -1
  51. package/dist/providers/openai.js +7 -4
  52. package/dist/providers/openai.js.map +1 -1
  53. package/dist/providers/responses.d.ts +11 -0
  54. package/dist/providers/responses.d.ts.map +1 -1
  55. package/dist/providers/responses.js +3 -1
  56. package/dist/providers/responses.js.map +1 -1
  57. package/dist/registry.d.ts +105 -0
  58. package/dist/registry.d.ts.map +1 -0
  59. package/dist/registry.js +291 -0
  60. package/dist/registry.js.map +1 -0
  61. package/dist/schema.d.ts +27 -9
  62. package/dist/schema.d.ts.map +1 -1
  63. package/dist/schema.js +197 -62
  64. package/dist/schema.js.map +1 -1
  65. package/dist/tools.d.ts +8 -0
  66. package/dist/tools.d.ts.map +1 -1
  67. package/dist/tools.js +2 -2
  68. package/dist/tools.js.map +1 -1
  69. package/dist/turn.d.ts +55 -0
  70. package/dist/turn.d.ts.map +1 -0
  71. package/dist/turn.js +125 -0
  72. package/dist/turn.js.map +1 -0
  73. package/dist/types.d.ts +8 -22
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/types.js +0 -45
  76. package/dist/types.js.map +1 -1
  77. package/package.json +1 -1
  78. package/src/auth/device.ts +8 -4
  79. package/src/auth/flows.ts +288 -1
  80. package/src/auth/oauth.ts +8 -3
  81. package/src/auth/with-token.ts +9 -4
  82. package/src/errors.ts +3 -0
  83. package/src/gate.ts +152 -0
  84. package/src/index.ts +3 -0
  85. package/src/key-pool.ts +15 -0
  86. package/src/presets.ts +100 -0
  87. package/src/providers/anthropic.ts +10 -1
  88. package/src/providers/factory.ts +288 -34
  89. package/src/providers/gemini.ts +273 -124
  90. package/src/providers/openai.ts +15 -4
  91. package/src/providers/responses.ts +14 -1
  92. package/src/registry.ts +420 -0
  93. package/src/schema.ts +200 -72
  94. package/src/tools.ts +10 -2
  95. package/src/turn.ts +166 -0
  96. package/src/types.ts +8 -62
@@ -0,0 +1,291 @@
1
+ // Providers and credentials, set up once per app.
2
+ //
3
+ // Every app on this package wrote the same block: build each provider from
4
+ // env, wrap it in a watchdog, chain a few into a fallback pool, keep that pool
5
+ // alive so its cooldowns survive, and cache it somewhere. The OpenCode Go
6
+ // chain alone was copied seven times. Where an app put the watchdog or the
7
+ // error envelope together by hand, it got it wrong (AGENTS.md, "A bump is an
8
+ // audit too"). A registry names each connection once, and `get` hands back
9
+ // the composition already assembled.
10
+ //
11
+ // The layers, outside in: the view (per-call effort and `maxTokens`), the
12
+ // fallback pool when there is more than one candidate, then per candidate the
13
+ // gate, the watchdog and the adapter.
14
+ //
15
+ // ponytail: one registry per process. Per-tenant keys would need one registry
16
+ // per tenant, and no app needs that yet.
17
+ import { ProviderError } from "./errors.js";
18
+ import { withFallbackProviders } from "./fallback.js";
19
+ import { createGate, withGate } from "./gate.js";
20
+ import { KeyPool, withKeyPool } from "./key-pool.js";
21
+ import { PROVIDER_PRESETS } from "./presets.js";
22
+ import { presetAdapter } from "./providers/factory.js";
23
+ import { withWatchdog } from "./watchdog.js";
24
+ // A value import from the `auth/` subpath, and a cheap one: with-token.ts
25
+ // imports only errors.ts at runtime and the sign-in flows as types, so the
26
+ // main entry gains these few lines and none of oauth, device or flows.
27
+ import { withToken } from "./auth/with-token.js";
28
+ export function createRegistry(options) {
29
+ const connections = new Map();
30
+ const chainRefs = new Map(Object.entries(options.chains ?? {}));
31
+ /** Built chains by ref, with the connections each one uses. */
32
+ const built = new Map();
33
+ // One store for every chain, so a candidate benched in one is benched in
34
+ // all. Weak, so a candidate dropped by `update` takes its bench with it.
35
+ const cooldowns = new WeakMap();
36
+ const refOf = new WeakMap();
37
+ const { onCooldown, ...fallback } = options.fallback ?? {};
38
+ const poolOptions = {
39
+ ...fallback,
40
+ cooldowns,
41
+ ...(onCooldown
42
+ ? {
43
+ onCooldown: (info) => onCooldown({ ...info, ref: refOf.get(info.candidate) ?? info.candidate.id }),
44
+ }
45
+ : {}),
46
+ };
47
+ for (const [name, refs] of chainRefs) {
48
+ if (!name || name.includes("/")) {
49
+ throw new Error(`[providerkit] Chain name "${name}" can't be empty or contain "/".`);
50
+ }
51
+ if (refs.length === 0)
52
+ throw new Error(`[providerkit] Chain "${name}" lists no refs.`);
53
+ }
54
+ // `open` refuses a connection named like a chain.
55
+ for (const [name, config] of Object.entries(options.connections)) {
56
+ connections.set(name, open(name, config));
57
+ }
58
+ // Checked once every connection exists, so a chain may name any of them.
59
+ for (const name of chainRefs.keys())
60
+ members(name);
61
+ function open(name, config, current) {
62
+ if (!name || name.includes("/")) {
63
+ throw new Error(`[providerkit] Connection name "${name}" can't be empty or contain "/".`);
64
+ }
65
+ if (chainRefs.has(name)) {
66
+ throw new Error(`[providerkit] "${name}" names both a chain and a connection. Rename one of them.`);
67
+ }
68
+ if (!(config.preset in PROVIDER_PRESETS)) {
69
+ throw new Error(`[providerkit] Connection "${name}" names an unknown preset "${config.preset}".`);
70
+ }
71
+ const credentials = [config.apiKey, config.keys, config.token].filter((c) => c !== undefined);
72
+ if (credentials.length !== 1) {
73
+ throw new Error(`[providerkit] Connection "${name}" needs exactly one of apiKey, keys or token. ` +
74
+ `It has ${credentials.length}.`);
75
+ }
76
+ return {
77
+ config,
78
+ gate: gateFor(config, current),
79
+ keyPool: config.keys ? new KeyPool(name, config.keys) : undefined,
80
+ candidates: new Map(),
81
+ };
82
+ }
83
+ /** The (connection, model) pairs a ref names, in order, duplicates dropped. */
84
+ function members(ref) {
85
+ const inChain = chainRefs.get(ref);
86
+ const out = new Map();
87
+ for (const member of inChain ?? [ref]) {
88
+ const slash = member.indexOf("/");
89
+ const name = slash < 0 ? member : member.slice(0, slash);
90
+ if (inChain && chainRefs.has(member)) {
91
+ throw new Error(`[providerkit] Chain "${ref}" names chain "${member}". List its refs instead.`);
92
+ }
93
+ const connection = connections.get(name);
94
+ if (!connection) {
95
+ throw new Error(inChain
96
+ ? `[providerkit] Chain "${ref}" names connection "${name}", which doesn't exist.`
97
+ : `[providerkit] "${ref}" is not a chain or a connection. ` +
98
+ `Known: ${[...chainRefs.keys(), ...connections.keys()].join(", ")}.`);
99
+ }
100
+ const models = slash < 0 ? modelsOf(name, connection.config) : [member.slice(slash + 1)];
101
+ for (const model of models) {
102
+ if (!model)
103
+ throw new Error(`[providerkit] "${member}" has an empty model after "/".`);
104
+ const key = `${name}/${model}`;
105
+ if (!out.has(key))
106
+ out.set(key, { name, model });
107
+ }
108
+ }
109
+ return [...out.values()];
110
+ }
111
+ /** Get the provider for a ref, building it on first use. */
112
+ function resolve(ref) {
113
+ const cached = built.get(ref);
114
+ if (cached)
115
+ return cached.provider;
116
+ const list = members(ref);
117
+ const candidates = list.map(({ name, model }) => candidate(name, model));
118
+ // A single candidate gets no pool. A pool of one benches the only option:
119
+ // a 503 a retry would absorb in a second becomes 30 s of instant
120
+ // NoAvailableProviderError, and the real kind hides behind `rate`. KeyPool
121
+ // refuses to bench its last key for the same reason.
122
+ const provider = candidates.length === 1 ? candidates[0] : withFallbackProviders(candidates, poolOptions);
123
+ built.set(ref, { provider, uses: new Set(list.map(({ name }) => name)) });
124
+ return provider;
125
+ }
126
+ function candidate(name, model) {
127
+ const connection = connections.get(name);
128
+ const cached = connection.candidates.get(model);
129
+ if (cached)
130
+ return cached;
131
+ const { config, keyPool } = connection;
132
+ const { preset, apiKey: _apiKey, keys: _keys, token: _token, models: _models, maxConcurrent: _maxConcurrent, watchdog: _watchdog, headers, ...rest } = config;
133
+ // One session id per candidate, kept by every adapter a key pool or a
134
+ // token builds for it. A new id per attempt made a sticky gateway treat
135
+ // every call as a new session and miss its prompt cache.
136
+ const base = { ...rest, model, instanceSessionId: crypto.randomUUID() };
137
+ let provider;
138
+ if (config.token) {
139
+ // The credential's host and headers win: Copilot gives each plan its
140
+ // own host, and the Codex backend refuses a call without its account id.
141
+ provider = withToken(config.token, (auth) => presetAdapter(preset, { ...base, ...auth, headers: { ...headers, ...auth.headers } }));
142
+ }
143
+ else if (config.keys) {
144
+ // `open` builds the pool whenever `keys` is set.
145
+ provider = withKeyPool(keyPool, (key) => presetAdapter(preset, { ...base, headers, apiKey: key }));
146
+ }
147
+ else {
148
+ provider = presetAdapter(preset, { ...base, headers, apiKey: config.apiKey });
149
+ }
150
+ // On unless turned off, where `createPresetProvider` adds one only when
151
+ // asked. Handing apps the whole composition is the point of a registry:
152
+ // two apps that wired the watchdog themselves left keep-alives uncounted,
153
+ // so the idle clock would cut a long tool call at 60 s (AGENTS.md, "A bump
154
+ // is an audit too").
155
+ const watchdog = config.watchdog === undefined ? options.watchdog : config.watchdog;
156
+ if (watchdog !== false)
157
+ provider = withWatchdog(provider, watchdog);
158
+ // Outside the watchdog, so a call waiting for a slot spends no deadline.
159
+ if (connection.gate)
160
+ provider = withGate(provider, connection.gate);
161
+ connection.candidates.set(model, provider);
162
+ refOf.set(provider, `${name}/${model}`);
163
+ return provider;
164
+ }
165
+ /** Drop every built chain that uses this connection. */
166
+ function forget(name) {
167
+ for (const [ref, entry] of built)
168
+ if (entry.uses.has(name))
169
+ built.delete(ref);
170
+ }
171
+ function view(ref, viewOpts) {
172
+ return {
173
+ get id() {
174
+ return resolve(ref).id;
175
+ },
176
+ get model() {
177
+ return resolve(ref).model;
178
+ },
179
+ createStream(messages, tools, opts = {}) {
180
+ async function* viewed() {
181
+ // A pool applies a per-call model to its primary only, and a single
182
+ // candidate would post it to a connection picked for another model.
183
+ if (opts.model) {
184
+ throw new ProviderError(ref, "invalid", `${ref}: a registry provider can't take a per-call model. ` +
185
+ `Ask the registry for it instead: get("conn/${opts.model}").`);
186
+ }
187
+ // Looked up per call, so `update` reaches a provider taken at boot.
188
+ const provider = resolve(ref);
189
+ for await (const chunk of provider.createStream(messages, tools, {
190
+ ...opts,
191
+ effort: opts.effort ?? viewOpts.effort,
192
+ maxTokens: opts.maxTokens ?? viewOpts.maxTokens,
193
+ })) {
194
+ // A pool names the endpoint that answered; a single candidate is
195
+ // the endpoint, so its chunks get the same field.
196
+ yield chunk.source
197
+ ? chunk
198
+ : { ...chunk, source: { provider: provider.id, model: provider.model } };
199
+ }
200
+ }
201
+ return viewed();
202
+ },
203
+ };
204
+ }
205
+ return {
206
+ get(ref, opts = {}) {
207
+ members(ref);
208
+ return view(ref, opts);
209
+ },
210
+ update(name, config) {
211
+ const current = connections.get(name);
212
+ if (current && sameValue(current.config, config))
213
+ return;
214
+ connections.set(name, open(name, config, current));
215
+ forget(name);
216
+ },
217
+ remove(name) {
218
+ connections.delete(name);
219
+ forget(name);
220
+ },
221
+ status() {
222
+ const out = {};
223
+ for (const [name, { gate, keyPool, candidates }] of connections) {
224
+ out[name] = {
225
+ ...(gate ? { gate: { max: gate.max, held: gate.held, waiting: gate.waiting } } : {}),
226
+ ...(keyPool ? { keys: keyPool.status() } : {}),
227
+ candidates: [...candidates].map(([model, provider]) => {
228
+ const { probe, ...bench } = cooldowns.get(provider) ?? { retryAtMs: 0 };
229
+ return { ref: `${name}/${model}`, ...bench, probing: probe !== undefined };
230
+ }),
231
+ };
232
+ }
233
+ return out;
234
+ },
235
+ };
236
+ }
237
+ function gateFor(config, current) {
238
+ if (config.maxConcurrent === undefined)
239
+ return undefined;
240
+ // Calls in flight hold slots on the current gate. A fresh one with the same
241
+ // limit would let `max` more through beside them.
242
+ if (current?.gate && current.config.maxConcurrent === config.maxConcurrent)
243
+ return current.gate;
244
+ return createGate(config.maxConcurrent);
245
+ }
246
+ /** A bare connection's models: `models`, then `model`, then the preset's
247
+ * rotation, then its default. The order `createPresetProvider` uses. */
248
+ function modelsOf(name, config) {
249
+ const preset = PROVIDER_PRESETS[config.preset];
250
+ if (config.models?.length)
251
+ return config.models;
252
+ if (config.model)
253
+ return [config.model];
254
+ if (preset.rotation?.length)
255
+ return preset.rotation;
256
+ if (preset.defaultModel)
257
+ return [preset.defaultModel];
258
+ throw new Error(`[providerkit] Connection "${name}" names no model, and preset "${config.preset}" has no ` +
259
+ "default. Set model or models.");
260
+ }
261
+ /**
262
+ * Equality for configs: plain objects and arrays by their contents, functions
263
+ * and every other object by identity. A key set to `undefined` equals a key
264
+ * left out. So an app that re-reads its config on every request rebuilds
265
+ * nothing, as long as it hands back the same `TokenSource`, `fetchImpl` and
266
+ * `onEvict` each time: a new one is a change, even when it does the same.
267
+ */
268
+ function sameValue(a, b) {
269
+ if (Object.is(a, b))
270
+ return true;
271
+ if (Array.isArray(a) || Array.isArray(b)) {
272
+ return (Array.isArray(a) &&
273
+ Array.isArray(b) &&
274
+ a.length === b.length &&
275
+ a.every((value, i) => sameValue(value, b[i])));
276
+ }
277
+ if (!isPlainObject(a) || !isPlainObject(b))
278
+ return false;
279
+ for (const key of new Set([...Object.keys(a), ...Object.keys(b)])) {
280
+ if (!sameValue(a[key], b[key]))
281
+ return false;
282
+ }
283
+ return true;
284
+ }
285
+ function isPlainObject(value) {
286
+ if (typeof value !== "object" || value === null)
287
+ return false;
288
+ const proto = Object.getPrototypeOf(value);
289
+ return proto === Object.prototype || proto === null;
290
+ }
291
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -46,18 +46,36 @@ export declare function isStrictSchema(node: unknown): boolean;
46
46
  */
47
47
  export declare function withoutPatterns(node: unknown): unknown;
48
48
  /**
49
- * Sanitize a JSON Schema for Google Gemini's REST API.
49
+ * A JSON Schema for Gemini's `parametersJsonSchema` and `responseJsonSchema`, which take
50
+ * standard JSON Schema. It is sent as written except for the four shapes the API refuses.
51
+ * Measured on `gemini-3.8-flash` on 2026-10-21, in a tool and as a response schema alike;
52
+ * every other keyword tried (`$ref`, `$defs`, `oneOf`, `allOf`, `not`, `if`, `const`, numeric
53
+ * `enum`, `type: [..., "null"]`, `patternProperties`, `additionalProperties`, arrays without
54
+ * `items`) came back accepted:
50
55
  *
51
- * Gemini's functionDeclarations schema parser only accepts a strict OpenAPI 3.0 subset.
52
- * It rejects:
53
- * - Nullable type arrays (`type: ["string", "null"]`), requiring `{ type: "string", nullable: true }`.
54
- * - Union types with null (`anyOf: [{ type: "string" }, { type: "null" }]`), requiring `{ type: "string", nullable: true }`.
55
- * - Numeric enums (`enum: [1, 2, 3]`), requiring string enums.
56
- * - `const: "val"`, requiring `enum: ["val"]`.
57
- * - Arrays without `items`, requiring an explicit items schema.
58
- * - Unsupported keywords ($schema, definitions, $defs, patternProperties, additionalProperties: true).
56
+ * - `required` names a property that is not declared, at any depth: 400 "requires unspecified
57
+ * property". The names with no property are dropped.
58
+ * - Draft-04 `exclusiveMinimum: true` (or `false`): 400 "must be a number". It becomes the
59
+ * number form, `exclusiveMinimum: <minimum>`, and `minimum` goes.
60
+ * - A tuple, `items: [a, b]`: 400 "must be a boolean or an object". It becomes `prefixItems`,
61
+ * and `additionalItems` becomes `items`, as in 2020-12.
62
+ * - A recursive `$ref` that is not behind an optional property or an array that may be empty:
63
+ * 400 "ref loops are only supported if ...". The self-reference becomes `{}`.
64
+ *
65
+ * This replaced a sanitizer written for the older `parameters` field, which accepts a small
66
+ * OpenAPI subset. Kept on `parametersJsonSchema`, it turned a numeric enum into a string enum
67
+ * (the model then sent `"2"` for `2`), forced string items onto an array of anything, and
68
+ * dropped every `$ref`, while still sending the 400s above.
59
69
  */
60
70
  export declare function toGeminiToolSchema(node: unknown): Record<string, unknown>;
71
+ /**
72
+ * Sanitize a JSON Schema to the OpenAPI 3.0 subset Google's Cloud Code Assist
73
+ * (`antigravity`) accepts in its `parameters` field (`type`, `nullable`,
74
+ * `description`, `format`, `enum`, `properties`, `items`, `required`, `anyOf`).
75
+ * Mirrors cc-proxy's `clean_json_schema`, including the `{ type: "string" }`
76
+ * fallback when an array omits `items`.
77
+ */
78
+ export declare function toAntigravityToolSchema(node: unknown): Record<string, unknown>;
61
79
  /**
62
80
  * Sanitize a tool's JSON Schema for Anthropic's Messages API.
63
81
  *
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAkDpE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAWpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAmBrD;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAsBtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiEzE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwC5E"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAkDpE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAWpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAmBrD;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKtD;AAmCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzE;AA+DD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiF9E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwC5E"}