@bananapus/nana-sdk-core 2.34.1 → 2.36.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.
- package/dist/cjs/review/index.d.ts +1 -0
- package/dist/cjs/review/index.d.ts.map +1 -1
- package/dist/cjs/review/index.js +1 -0
- package/dist/cjs/review/index.js.map +1 -1
- package/dist/cjs/review/messages.d.ts +2 -0
- package/dist/cjs/review/messages.d.ts.map +1 -1
- package/dist/cjs/review/messages.js +3 -1
- package/dist/cjs/review/messages.js.map +1 -1
- package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
- package/dist/cjs/review/safeRelayr.js +42 -24
- package/dist/cjs/review/safeRelayr.js.map +1 -1
- package/dist/cjs/review/tabState.d.ts +23 -0
- package/dist/cjs/review/tabState.d.ts.map +1 -0
- package/dist/cjs/review/tabState.js +30 -0
- package/dist/cjs/review/tabState.js.map +1 -0
- package/dist/cjs/review/writeHold.d.ts +74 -58
- package/dist/cjs/review/writeHold.d.ts.map +1 -1
- package/dist/cjs/review/writeHold.js +651 -43
- package/dist/cjs/review/writeHold.js.map +1 -1
- package/dist/cjs/review/writeIntent.d.ts +41 -0
- package/dist/cjs/review/writeIntent.d.ts.map +1 -0
- package/dist/cjs/review/writeIntent.js +77 -0
- package/dist/cjs/review/writeIntent.js.map +1 -0
- package/dist/cjs/review/writeRecovery.d.ts +63 -3
- package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
- package/dist/cjs/review/writeRecovery.js +233 -14
- package/dist/cjs/review/writeRecovery.js.map +1 -1
- package/dist/cjs/testing.d.ts +7 -0
- package/dist/cjs/testing.d.ts.map +1 -0
- package/dist/cjs/testing.js +30 -0
- package/dist/cjs/testing.js.map +1 -0
- package/dist/esm/review/index.d.ts +1 -0
- package/dist/esm/review/index.d.ts.map +1 -1
- package/dist/esm/review/index.js +1 -0
- package/dist/esm/review/index.js.map +1 -1
- package/dist/esm/review/messages.d.ts +2 -0
- package/dist/esm/review/messages.d.ts.map +1 -1
- package/dist/esm/review/messages.js +2 -0
- package/dist/esm/review/messages.js.map +1 -1
- package/dist/esm/review/safeRelayr.d.ts.map +1 -1
- package/dist/esm/review/safeRelayr.js +42 -24
- package/dist/esm/review/safeRelayr.js.map +1 -1
- package/dist/esm/review/tabState.d.ts +23 -0
- package/dist/esm/review/tabState.d.ts.map +1 -0
- package/dist/esm/review/tabState.js +26 -0
- package/dist/esm/review/tabState.js.map +1 -0
- package/dist/esm/review/writeHold.d.ts +74 -58
- package/dist/esm/review/writeHold.d.ts.map +1 -1
- package/dist/esm/review/writeHold.js +651 -44
- package/dist/esm/review/writeHold.js.map +1 -1
- package/dist/esm/review/writeIntent.d.ts +41 -0
- package/dist/esm/review/writeIntent.d.ts.map +1 -0
- package/dist/esm/review/writeIntent.js +73 -0
- package/dist/esm/review/writeIntent.js.map +1 -0
- package/dist/esm/review/writeRecovery.d.ts +63 -3
- package/dist/esm/review/writeRecovery.d.ts.map +1 -1
- package/dist/esm/review/writeRecovery.js +232 -16
- package/dist/esm/review/writeRecovery.js.map +1 -1
- package/dist/esm/testing.d.ts +7 -0
- package/dist/esm/testing.d.ts.map +1 -0
- package/dist/esm/testing.js +25 -0
- package/dist/esm/testing.js.map +1 -0
- package/package.json +6 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type Hex, type PublicClient, type TransactionReceipt } from "viem";
|
|
1
|
+
import { type Address, type Hex, type PublicClient, type TransactionReceipt } from "viem";
|
|
2
2
|
import { type SafeQueuedTransaction, type SafeServiceOptions } from "../safeService.js";
|
|
3
|
-
import {
|
|
3
|
+
import { type HeldWriteStorage, type ReviewedWriteRecoveryInput, type ReviewedWriteRecoveryRecord } from "./writeRecovery.js";
|
|
4
4
|
/** The reads a write hold makes on the call's chain; a viem PublicClient satisfies it. */
|
|
5
5
|
export type WriteHoldClient = Pick<PublicClient, "getBlock" | "getBlockNumber" | "getChainId" | "getTransaction" | "getTransactionCount" | "getTransactionReceipt" | "request">;
|
|
6
6
|
/** How a held write ended, when the hold saw it end. */
|
|
@@ -41,9 +41,9 @@ type Held<S extends string, Extra> = {
|
|
|
41
41
|
* actually sent at (`sentNonce`, from its authenticated transaction; the
|
|
42
42
|
* nonce read before the wallet opened only locates the call). The exit is
|
|
43
43
|
* offered;
|
|
44
|
-
* - `held-unchecked`: a saved hash the node doesn't know
|
|
45
|
-
*
|
|
46
|
-
*
|
|
44
|
+
* - `held-unchecked`: a saved hash the node doesn't know 30 minutes after
|
|
45
|
+
* the wallet returned it (or, for a record saved before that time was
|
|
46
|
+
* kept or adopted without it, after it was first read). The
|
|
47
47
|
* exit is offered, with a line that says so; a hash that shows up later is
|
|
48
48
|
* followed as usual. A hash seen with its sent nonce that the node has not
|
|
49
49
|
* known for 30 minutes, with that nonce unused at a canonical finalized
|
|
@@ -64,7 +64,23 @@ type Held<S extends string, Extra> = {
|
|
|
64
64
|
* not final yet). It is kept until its result settles it, and never offered
|
|
65
65
|
* a resend.
|
|
66
66
|
*/
|
|
67
|
-
export type WriteHoldState = {
|
|
67
|
+
export type WriteHoldState = WriteHoldStateOf & {
|
|
68
|
+
/** Only while holds last in this tab alone: {@link WRITE_HOLD_IN_TAB_LINE}. */
|
|
69
|
+
notice?: string;
|
|
70
|
+
/**
|
|
71
|
+
* The reservation this state belongs to (on a clear, the one that ended),
|
|
72
|
+
* so an observer can ignore a newer reservation it didn't start.
|
|
73
|
+
*/
|
|
74
|
+
reservation?: string;
|
|
75
|
+
/**
|
|
76
|
+
* On a result of state() or exit(): true when the gate read the chain
|
|
77
|
+
* under the call's lock; false when the lock was busy and this is only the
|
|
78
|
+
* saved record (its exit hidden). Never let a false one hide an exit
|
|
79
|
+
* already shown.
|
|
80
|
+
*/
|
|
81
|
+
checked?: boolean;
|
|
82
|
+
};
|
|
83
|
+
type WriteHoldStateOf = {
|
|
68
84
|
status: "clear";
|
|
69
85
|
settled?: WriteHoldSettled;
|
|
70
86
|
} | Held<"pending-known-hash", {
|
|
@@ -99,9 +115,11 @@ export type WriteHoldState = {
|
|
|
99
115
|
exit: false;
|
|
100
116
|
}>;
|
|
101
117
|
/** Any state but `clear`. */
|
|
102
|
-
export type WriteHeldState = Exclude<
|
|
118
|
+
export type WriteHeldState = Exclude<WriteHoldStateOf, {
|
|
103
119
|
status: "clear";
|
|
104
|
-
}
|
|
120
|
+
}> & {
|
|
121
|
+
reservation?: string;
|
|
122
|
+
};
|
|
105
123
|
/** A send was refused because the exact call is held; `state` says how. */
|
|
106
124
|
export declare class WriteHeldError extends Error {
|
|
107
125
|
readonly state: WriteHeldState;
|
|
@@ -114,6 +132,16 @@ export declare class WriteHoldNonceError extends Error {
|
|
|
114
132
|
readonly name = "WriteHoldNonceError";
|
|
115
133
|
constructor(cause: unknown);
|
|
116
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* The review went stale: another window's attempt of the same write was
|
|
137
|
+
* reserved, and maybe settled (`settled`), while it was open. Review again;
|
|
138
|
+
* the next review sends normally.
|
|
139
|
+
*/
|
|
140
|
+
export declare class WriteHoldStaleReviewError extends Error {
|
|
141
|
+
readonly settled?: WriteHoldSettled | undefined;
|
|
142
|
+
readonly name = "WriteHoldStaleReviewError";
|
|
143
|
+
constructor(settled?: WriteHoldSettled | undefined);
|
|
144
|
+
}
|
|
117
145
|
/** The exact call is already being sent from another flow or tab. */
|
|
118
146
|
export declare class WriteHoldBusyError extends Error {
|
|
119
147
|
readonly name = "WriteHoldBusyError";
|
|
@@ -161,72 +189,60 @@ export declare function createWriteHold(options?: {
|
|
|
161
189
|
attempts?: number;
|
|
162
190
|
};
|
|
163
191
|
}): {
|
|
164
|
-
open: (call: ReviewedWriteRecoveryInput
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
192
|
+
open: (call: ReviewedWriteRecoveryInput, { legacy, }?: {
|
|
193
|
+
legacy?: (string | {
|
|
194
|
+
call: ReviewedWriteRecoveryInput["call"];
|
|
195
|
+
} | {
|
|
196
|
+
match: {
|
|
197
|
+
to: Address;
|
|
198
|
+
selector: Hex;
|
|
199
|
+
};
|
|
200
|
+
})[];
|
|
201
|
+
}) => {
|
|
169
202
|
peek: () => WriteHoldState;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
*/
|
|
174
|
-
subscribe(listener: (state: WriteHoldState) => void): () => void;
|
|
175
|
-
/**
|
|
176
|
-
* Send the call under its hold. A held call throws
|
|
177
|
-
* {@link WriteHeldError} before anything opens, and another flow or tab
|
|
178
|
-
* sending it throws {@link WriteHoldBusyError}. `run` hands the
|
|
179
|
-
* {@link WriteHoldGate} to its wallet boundary. A write that may have
|
|
180
|
-
* reached the wallet stays held whatever `run` throws.
|
|
181
|
-
*/
|
|
203
|
+
state(client: WriteHoldClient, checks?: {
|
|
204
|
+
effect?: (chainId: number) => Promise<boolean>;
|
|
205
|
+
}): Promise<WriteHoldState>;
|
|
182
206
|
send<T>(client: WriteHoldClient, run: (gate: WriteHoldGate) => Promise<T>): Promise<T>;
|
|
183
|
-
/**
|
|
184
|
-
* The user checked their wallet. Only an exit-offered `snapshot`, the
|
|
185
|
-
* state the user saw, is released, after the chain is asked once more:
|
|
186
|
-
* any change refuses it, and a confirmation that landed meanwhile wins.
|
|
187
|
-
* `released` true: send again.
|
|
188
|
-
*/
|
|
189
207
|
exit(snapshot: WriteHoldState, acknowledgement: {
|
|
190
208
|
checkedWallet: true;
|
|
191
209
|
}, client: WriteHoldClient): Promise<{
|
|
192
210
|
released: boolean;
|
|
193
211
|
state: WriteHoldState;
|
|
194
212
|
}>;
|
|
213
|
+
onReceipt: (receipt: TransactionReceipt, client: WriteHoldClient, proof?: {
|
|
214
|
+
calls: readonly ReviewedWriteRecoveryInput["call"][];
|
|
215
|
+
batch?: boolean;
|
|
216
|
+
} | undefined) => Promise<WriteHoldState>;
|
|
217
|
+
onUnproven: (client: WriteHoldClient, proposalHash?: `0x${string}` | undefined) => Promise<WriteHoldState>;
|
|
218
|
+
onExecuted: (client: WriteHoldClient, executionHash?: `0x${string}` | undefined) => Promise<WriteHoldState>;
|
|
219
|
+
attachHash: (client: WriteHoldClient, hash: `0x${string}`) => Promise<WriteHoldState>;
|
|
220
|
+
attachSafeNonce: (client: WriteHoldClient, args_1: {
|
|
221
|
+
safeTxHash: Hex;
|
|
222
|
+
nonce: number;
|
|
223
|
+
}) => Promise<WriteHoldState>;
|
|
224
|
+
adopt: (snapshot: WriteHoldState, evidence?: {
|
|
225
|
+
nonce?: number | bigint;
|
|
226
|
+
sentNonce?: number | bigint;
|
|
227
|
+
fromBlock?: bigint;
|
|
228
|
+
submittedAt?: number;
|
|
229
|
+
hash?: Hex;
|
|
230
|
+
safe?: {
|
|
231
|
+
safeTxHash: Hex;
|
|
232
|
+
};
|
|
233
|
+
} | undefined, client?: WriteHoldClient | undefined) => Promise<WriteHoldState>;
|
|
195
234
|
/**
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
* verified, and a revert only once final.
|
|
199
|
-
*/
|
|
200
|
-
onReceipt(receipt: TransactionReceipt, client: WriteHoldClient, proof?: Parameters<typeof verifyReviewedWriteReceipt>[3]): Promise<WriteHoldState>;
|
|
201
|
-
/**
|
|
202
|
-
* The app's Safe follower ended without proof (its watch gave up, or
|
|
203
|
-
* the service lost the proposal). `proposalHash`, when given, must name
|
|
204
|
-
* the held one. It is held with the exit at once, through reloads;
|
|
205
|
-
* authenticated evidence that arrives later still settles it.
|
|
206
|
-
*/
|
|
207
|
-
onUnproven(client: WriteHoldClient, proposalHash?: Hex): Promise<WriteHoldState>;
|
|
208
|
-
/**
|
|
209
|
-
* Attach a hash the chain authenticates as this exact call, sent by the
|
|
210
|
-
* account on the reservation's chain at or after its next nonce, and
|
|
211
|
-
* not mined before it was reserved, to the held write that has none: under
|
|
212
|
-
* one lock, without releasing it. The hold then follows that hash: no
|
|
213
|
-
* exit while it is pending, and its receipt settles it.
|
|
214
|
-
*/
|
|
215
|
-
attachHash(client: WriteHoldClient, hash: Hex): Promise<WriteHoldState>;
|
|
216
|
-
/**
|
|
217
|
-
* The app's word that the held Safe proposal ran, with its execution's
|
|
218
|
-
* transaction when known. Nothing is saved as executed on its word:
|
|
219
|
-
* the hash is kept as a candidate, and settles it only once its own
|
|
220
|
-
* receipt proves this Safe's execution of the exact proposal or call.
|
|
235
|
+
* Every state this controller reads or makes for the call, and other
|
|
236
|
+
* tabs' changes. The latest one, if any, is replayed at once.
|
|
221
237
|
*/
|
|
222
|
-
|
|
238
|
+
subscribe(listener: (state: WriteHoldState) => void): () => void;
|
|
223
239
|
};
|
|
224
240
|
/** Whether holds outlive this tab right now. */
|
|
225
241
|
durable: () => boolean;
|
|
226
242
|
/** The review's line while holds last only in this tab, or null. */
|
|
227
243
|
reviewLine: () => "This browser can't remember pending transactions. Check your wallet before repeating one." | null;
|
|
228
244
|
/** Stop every settle poll and the tab listener (tests, teardown). */
|
|
229
|
-
dispose()
|
|
245
|
+
dispose: () => void;
|
|
230
246
|
};
|
|
231
247
|
export type WriteHold = ReturnType<typeof createWriteHold>;
|
|
232
248
|
export type WriteHoldHandle = ReturnType<WriteHold["open"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeHold.d.ts","sourceRoot":"","sources":["../../../src/review/writeHold.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,MAAM,CAAC;AACd,OAAO,EAOL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"writeHold.d.ts","sourceRoot":"","sources":["../../../src/review/writeHold.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,MAAM,CAAC;AACd,OAAO,EAOL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAgB3B,OAAO,EAWL,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EACjC,MAAM,oBAAoB,CAAC;AAmC5B,0FAA0F;AAC1F,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,YAAY,EACV,UAAU,GACV,gBAAgB,GAChB,YAAY,GACZ,gBAAgB,GAChB,qBAAqB,GACrB,uBAAuB,GACvB,SAAS,CACZ,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,gBAAgB;AAC1B,uDAAuD;AACrD;IAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE;AAC7C,wDAAwD;GACtD;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,IAAI;IACnC,MAAM,EAAE,CAAC,CAAC;IACV,2EAA2E;IAC3E,MAAM,EAAE,2BAA2B,CAAC;IACpC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,KAAK,CAAC;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG;IAC9C,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,gBAAgB,GACjB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAC/C,IAAI,CAAC,oBAAoB,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,GACtD,IAAI,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,GACvC,IAAI,CACF,gBAAgB,EAChB;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAC3D,GACD,IAAI,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACrE,IAAI,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpE,IAAI,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpE,IAAI,CAAC,YAAY,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACnE,IAAI,CACF,cAAc,EACd;IAAE,aAAa,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CACxD,CAAC;AAaN,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,2EAA2E;AAC3E,qBAAa,cAAe,SAAQ,KAAK;IAE3B,QAAQ,CAAC,KAAK,EAAE,cAAc;IAD1C,QAAQ,CAAC,IAAI,oBAAoB;gBACZ,KAAK,EAAE,cAAc;CAG3C;AAED,wEAAwE;AACxE,qBAAa,mBAAoB,SAAQ,KAAK;IAEhC,QAAQ,CAAC,KAAK,EAAE,OAAO;IADnC,QAAQ,CAAC,IAAI,yBAAyB;gBACjB,KAAK,EAAE,OAAO;CAGpC;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAEtC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB;IAD/C,QAAQ,CAAC,IAAI,+BAA+B;gBACvB,OAAO,CAAC,EAAE,gBAAgB,YAAA;CAGhD;AAED,qEAAqE;AACrE,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,wBAAwB;;CAItC;AAED,sFAAsF;AACtF,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,UAAU,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,wFAAwF;IACxF,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC/D,+FAA+F;IAC/F,UAAU,IAAI,IAAI,CAAC;CACpB,CAAC;AAEF,KAAK,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AA0I1C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,sFAAsF;IACtF,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;iBAmsCE,0BAA0B,gBAG7B;QACD,MAAM,CAAC,EAAE,CACL,MAAM,GACN;YAAE,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAA;SAAE,GAC5C;YAAE,KAAK,EAAE;gBAAE,EAAE,EAAE,OAAO,CAAC;gBAAC,QAAQ,EAAE,GAAG,CAAA;aAAE,CAAA;SAAE,CAC5C,EAAE,CAAC;KACL;;sBA0VW,eAAe,WACd;YAAE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;SAAE,GAC1D,OAAO,CAAC,cAAc,CAAC;aAGf,CAAC,UACF,eAAe,OAClB,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,CAAC;uBAMD,cAAc,mBACP;YAAE,aAAa,EAAE,IAAI,CAAA;SAAE,UAChC,eAAe,GACtB,OAAO,CAAC;YAAE,QAAQ,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,cAAc,CAAA;SAAE,CAAC;;;;;;;;;wBA5ejB,GAAG;mBAAS,MAAM;;;oBA9E7C,MAAM,GAAG,MAAM;wBACX,MAAM,GAAG,MAAM;wBACf,MAAM;0BACJ,MAAM;mBACb,GAAG;mBACH;gBAAE,UAAU,EAAE,GAAG,CAAA;aAAE;;QAzR9B;;;WAGG;4BACiB,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI;;IAu2BlE,gDAAgD;;IAEhD,oEAAoE;;IAEpE,qEAAqE;;EAGxE;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC"}
|