@agoric/smart-wallet 0.5.4-other-dev-1f26562.0 → 0.5.4-other-dev-3eb1a1d.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/package.json +35 -26
- package/src/index.d.ts +2 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +2 -0
- package/src/invitations.d.ts +14 -10
- package/src/invitations.d.ts.map +1 -1
- package/src/invitations.js +35 -32
- package/src/marshal-contexts.d.ts +44 -41
- package/src/marshal-contexts.d.ts.map +1 -1
- package/src/marshal-contexts.js +68 -61
- package/src/offerWatcher.d.ts +52 -0
- package/src/offerWatcher.d.ts.map +1 -0
- package/src/offerWatcher.js +329 -0
- package/src/offers.d.ts +7 -31
- package/src/offers.d.ts.map +1 -1
- package/src/offers.js +9 -183
- package/src/proposals/upgrade-wallet-factory2-proposal.d.ts +23 -0
- package/src/proposals/upgrade-wallet-factory2-proposal.d.ts.map +1 -0
- package/src/proposals/upgrade-wallet-factory2-proposal.js +60 -0
- package/src/proposals/upgrade-walletFactory-proposal.d.ts +1 -1
- package/src/proposals/upgrade-walletFactory-proposal.d.ts.map +1 -1
- package/src/proposals/upgrade-walletFactory-proposal.js +46 -23
- package/src/smartWallet.d.ts +101 -66
- package/src/smartWallet.d.ts.map +1 -1
- package/src/smartWallet.js +576 -216
- package/src/typeGuards.d.ts +1 -1
- package/src/types-index.d.ts +2 -0
- package/src/types-index.js +2 -0
- package/src/types.d.ts +35 -41
- package/src/types.d.ts.map +1 -0
- package/src/types.ts +90 -0
- package/src/utils.d.ts +17 -14
- package/src/utils.d.ts.map +1 -1
- package/src/utils.js +19 -6
- package/src/walletFactory.d.ts +24 -78
- package/src/walletFactory.d.ts.map +1 -1
- package/src/walletFactory.js +61 -37
- package/CHANGELOG.md +0 -180
- package/src/payments.d.ts +0 -20
- package/src/payments.d.ts.map +0 -1
- package/src/payments.js +0 -89
package/src/smartWallet.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
export const BRAND_TO_PURSES_KEY: "brandToPurses";
|
|
2
|
-
export function prepareSmartWallet(baggage:
|
|
2
|
+
export function prepareSmartWallet(baggage: import("@agoric/vat-data").Baggage, shared: SharedParams): (uniqueWithoutChildNodes: Omit<UniqueParams, "currentStorageNode" | "walletStorageNode"> & {
|
|
3
3
|
walletStorageNode: ERef<StorageNode>;
|
|
4
|
-
}) => Promise<{
|
|
4
|
+
}) => Promise<import("@endo/exo").Guarded<{
|
|
5
5
|
/**
|
|
6
|
-
* Umarshals the actionCapData and delegates to the appropriate action
|
|
6
|
+
* Umarshals the actionCapData and delegates to the appropriate action
|
|
7
|
+
* handler.
|
|
7
8
|
*
|
|
8
|
-
* @param {import('@endo/marshal').CapData<string>} actionCapData
|
|
9
|
+
* @param {import('@endo/marshal').CapData<string | null>} actionCapData
|
|
10
|
+
* of type BridgeAction
|
|
9
11
|
* @param {boolean} [canSpend]
|
|
10
12
|
* @returns {Promise<void>}
|
|
11
13
|
*/
|
|
12
|
-
handleBridgeAction(actionCapData: import(
|
|
13
|
-
getDepositFacet(): {
|
|
14
|
+
handleBridgeAction(actionCapData: import("@endo/marshal").CapData<string | null>, canSpend?: boolean | undefined): Promise<void>;
|
|
15
|
+
getDepositFacet(): import("@endo/exo").Guarded<{
|
|
14
16
|
/**
|
|
15
17
|
* Put the assets from the payment into the appropriate purse.
|
|
16
18
|
*
|
|
@@ -18,153 +20,186 @@ export function prepareSmartWallet(baggage: MapStore<string, unknown>, shared: S
|
|
|
18
20
|
*
|
|
19
21
|
* @param {Payment} payment
|
|
20
22
|
* @returns {Promise<Amount>}
|
|
21
|
-
* @throws if there's not yet a purse, though the payment is held to try
|
|
23
|
+
* @throws if there's not yet a purse, though the payment is held to try
|
|
24
|
+
* again when there is
|
|
22
25
|
*/
|
|
23
26
|
receive(payment: Payment): Promise<Amount>;
|
|
24
|
-
}
|
|
25
|
-
getOffersFacet(): {
|
|
27
|
+
}>;
|
|
28
|
+
getOffersFacet(): import("@endo/exo").Guarded<{
|
|
26
29
|
/**
|
|
27
|
-
* Take an offer description provided in capData, augment it with
|
|
30
|
+
* Take an offer description provided in capData, augment it with
|
|
31
|
+
* payments and call zoe.offer()
|
|
28
32
|
*
|
|
29
|
-
* @param {
|
|
30
|
-
* @returns {Promise<void>} after the offer has been both seated and
|
|
31
|
-
*
|
|
33
|
+
* @param {OfferSpec} offerSpec
|
|
34
|
+
* @returns {Promise<void>} after the offer has been both seated and
|
|
35
|
+
* exited by Zoe.
|
|
36
|
+
* @throws if any parts of the offer can be determined synchronously to
|
|
37
|
+
* be invalid
|
|
32
38
|
*/
|
|
33
|
-
executeOffer(offerSpec:
|
|
39
|
+
executeOffer(offerSpec: OfferSpec): Promise<void>;
|
|
34
40
|
/**
|
|
35
41
|
* Take an offer's id, look up its seat, try to exit.
|
|
36
42
|
*
|
|
37
|
-
* @param {
|
|
43
|
+
* @param {OfferId} offerId
|
|
38
44
|
* @returns {Promise<void>}
|
|
39
45
|
* @throws if the seat can't be found or E(seatRef).tryExit() fails.
|
|
40
46
|
*/
|
|
41
|
-
tryExitOffer(offerId:
|
|
42
|
-
}
|
|
47
|
+
tryExitOffer(offerId: OfferId): Promise<void>;
|
|
48
|
+
}>;
|
|
43
49
|
/** @deprecated use getPublicTopics */
|
|
44
|
-
getCurrentSubscriber(): Subscriber<CurrentWalletRecord>;
|
|
50
|
+
getCurrentSubscriber(): globalThis.Subscriber<CurrentWalletRecord>;
|
|
45
51
|
/** @deprecated use getPublicTopics */
|
|
46
|
-
getUpdatesSubscriber(): Subscriber<UpdateRecord>;
|
|
52
|
+
getUpdatesSubscriber(): globalThis.Subscriber<UpdateRecord>;
|
|
47
53
|
getPublicTopics(): {
|
|
48
54
|
current: {
|
|
49
55
|
description: string;
|
|
50
|
-
subscriber: Subscriber<CurrentWalletRecord>;
|
|
56
|
+
subscriber: globalThis.Subscriber<CurrentWalletRecord>;
|
|
51
57
|
storagePath: Promise<string>;
|
|
52
58
|
};
|
|
53
59
|
updates: {
|
|
54
60
|
description: string;
|
|
55
|
-
subscriber: Subscriber<UpdateRecord>;
|
|
61
|
+
subscriber: globalThis.Subscriber<UpdateRecord>;
|
|
56
62
|
storagePath: Promise<string>;
|
|
57
63
|
};
|
|
58
64
|
};
|
|
59
|
-
}
|
|
65
|
+
}>>;
|
|
66
|
+
export type OfferId = number | string;
|
|
67
|
+
export type OfferSpec = {
|
|
68
|
+
id: OfferId;
|
|
69
|
+
invitationSpec: import("./invitations").InvitationSpec;
|
|
70
|
+
proposal: Proposal;
|
|
71
|
+
offerArgs?: any;
|
|
72
|
+
};
|
|
73
|
+
export type ExecutorPowers = {
|
|
74
|
+
logger: {
|
|
75
|
+
info: (...args: any[]) => void;
|
|
76
|
+
error: (...args: any[]) => void;
|
|
77
|
+
};
|
|
78
|
+
makeOfferWatcher: import("./offerWatcher.js").MakeOfferWatcher;
|
|
79
|
+
invitationFromSpec: ERef<Invitation>;
|
|
80
|
+
};
|
|
60
81
|
export type ExecuteOfferAction = {
|
|
61
|
-
method:
|
|
62
|
-
offer:
|
|
82
|
+
method: "executeOffer";
|
|
83
|
+
offer: OfferSpec;
|
|
63
84
|
};
|
|
64
85
|
export type TryExitOfferAction = {
|
|
65
|
-
method:
|
|
66
|
-
offerId:
|
|
86
|
+
method: "tryExitOffer";
|
|
87
|
+
offerId: OfferId;
|
|
67
88
|
};
|
|
68
89
|
export type BridgeAction = ExecuteOfferAction | TryExitOfferAction;
|
|
69
90
|
/**
|
|
70
|
-
* Purses is an array to support a future requirement of multiple purses per
|
|
91
|
+
* Purses is an array to support a future requirement of multiple purses per
|
|
92
|
+
* brand.
|
|
71
93
|
*
|
|
72
|
-
* Each map is encoded as an array of entries because a Map doesn't serialize
|
|
73
|
-
* We also considered having a vstorage key for each offer but for now
|
|
94
|
+
* Each map is encoded as an array of entries because a Map doesn't serialize
|
|
95
|
+
* directly. We also considered having a vstorage key for each offer but for now
|
|
96
|
+
* are sticking with this design.
|
|
74
97
|
*
|
|
75
98
|
* Cons
|
|
76
|
-
*
|
|
77
|
-
*
|
|
99
|
+
*
|
|
100
|
+
* - Reserializes previously written results when a new result is added
|
|
101
|
+
* - Optimizes reads though writes are on-chain (~100 machines) and reads are
|
|
102
|
+
* off-chain (to 1 machine)
|
|
78
103
|
*
|
|
79
104
|
* Pros
|
|
80
|
-
* - Reading all offer results happens much more (>100) often than storing a new offer result
|
|
81
|
-
* - Reserialization and writes are paid in execution gas, whereas reads are not
|
|
82
105
|
*
|
|
83
|
-
*
|
|
106
|
+
* - Reading all offer results happens much more (>100) often than storing a new
|
|
107
|
+
* offer result
|
|
108
|
+
* - Reserialization and writes are paid in execution gas, whereas reads are not
|
|
109
|
+
*
|
|
110
|
+
* This design should be revisited if ever batch querying across vstorage keys
|
|
111
|
+
* become cheaper or reads be paid.
|
|
84
112
|
*/
|
|
85
113
|
export type CurrentWalletRecord = {
|
|
86
|
-
purses:
|
|
114
|
+
purses: {
|
|
87
115
|
brand: Brand;
|
|
88
116
|
balance: Amount;
|
|
89
|
-
}
|
|
90
|
-
offerToUsedInvitation:
|
|
117
|
+
}[];
|
|
118
|
+
offerToUsedInvitation: [offerId: string, usedInvitation: Amount][];
|
|
91
119
|
offerToPublicSubscriberPaths: [offerId: string, publicTopics: {
|
|
92
120
|
[subscriberName: string]: string;
|
|
93
121
|
}][];
|
|
94
|
-
liveOffers:
|
|
122
|
+
liveOffers: [OfferId, OfferStatus][];
|
|
95
123
|
};
|
|
96
124
|
/**
|
|
97
125
|
* Record of an update to the state of this wallet.
|
|
98
126
|
*
|
|
99
|
-
* Client is responsible for coalescing updates into a current state. See
|
|
127
|
+
* Client is responsible for coalescing updates into a current state. See
|
|
128
|
+
* `coalesceUpdates` utility.
|
|
100
129
|
*
|
|
101
|
-
* The reason for this burden on the client is that publishing
|
|
102
|
-
*
|
|
130
|
+
* The reason for this burden on the client is that publishing the full history
|
|
131
|
+
* of offers with each change is untenable.
|
|
103
132
|
*
|
|
104
133
|
* `balance` update supports forward-compatibility for more than one purse per
|
|
105
|
-
* brand. An additional key will be needed to disambiguate. For now the brand
|
|
106
|
-
* the amount suffices.
|
|
134
|
+
* brand. An additional key will be needed to disambiguate. For now the brand
|
|
135
|
+
* in the amount suffices.
|
|
107
136
|
*/
|
|
108
137
|
export type UpdateRecord = {
|
|
109
|
-
updated:
|
|
110
|
-
status:
|
|
138
|
+
updated: "offerStatus";
|
|
139
|
+
status: OfferStatus;
|
|
111
140
|
} | {
|
|
112
|
-
updated:
|
|
141
|
+
updated: "balance";
|
|
113
142
|
currentAmount: Amount;
|
|
114
143
|
} | {
|
|
115
|
-
updated:
|
|
144
|
+
updated: "walletAction";
|
|
116
145
|
status: {
|
|
117
146
|
error: string;
|
|
118
147
|
};
|
|
119
148
|
};
|
|
120
149
|
/**
|
|
121
|
-
* For use by clients to describe brands to users. Includes `displayInfo` to
|
|
150
|
+
* For use by clients to describe brands to users. Includes `displayInfo` to
|
|
151
|
+
* save a remote call.
|
|
122
152
|
*/
|
|
123
153
|
export type BrandDescriptor = {
|
|
124
154
|
brand: Brand;
|
|
125
155
|
displayInfo: DisplayInfo;
|
|
126
156
|
issuer: Issuer;
|
|
127
|
-
petname: import(
|
|
157
|
+
petname: import("./types.js").Petname;
|
|
128
158
|
};
|
|
129
|
-
export type RemotePurse = import('./types').RemotePurse;
|
|
130
159
|
export type UniqueParams = {
|
|
131
160
|
address: string;
|
|
132
|
-
bank: ERef<import(
|
|
161
|
+
bank: ERef<import("@agoric/vats/src/vat-bank.js").Bank>;
|
|
133
162
|
currentStorageNode: StorageNode;
|
|
134
|
-
invitationPurse: Purse<
|
|
163
|
+
invitationPurse: Purse<"set", InvitationDetails>;
|
|
135
164
|
walletStorageNode: StorageNode;
|
|
136
165
|
};
|
|
137
|
-
export type BrandDescriptorRegistry = Pick<MapStore<Brand, BrandDescriptor>,
|
|
166
|
+
export type BrandDescriptorRegistry = Pick<MapStore<Brand, BrandDescriptor>, "has" | "get" | "values">;
|
|
138
167
|
export type SharedParams = {
|
|
139
|
-
agoricNames: ERef<import(
|
|
168
|
+
agoricNames: ERef<import("@agoric/vats").NameHub>;
|
|
140
169
|
registry: BrandDescriptorRegistry;
|
|
141
|
-
invitationIssuer: Issuer<
|
|
142
|
-
invitationBrand: Brand<
|
|
170
|
+
invitationIssuer: Issuer<"set">;
|
|
171
|
+
invitationBrand: Brand<"set">;
|
|
143
172
|
invitationDisplayInfo: DisplayInfo;
|
|
144
173
|
publicMarshaller: Marshaller;
|
|
145
174
|
zoe: ERef<ZoeService>;
|
|
146
175
|
};
|
|
147
176
|
/**
|
|
148
|
-
* - `brandPurses` is precious
|
|
177
|
+
* - `brandPurses` is precious
|
|
178
|
+
* and closely held. defined as late as possible to reduce its scope.
|
|
179
|
+
*
|
|
149
180
|
* - `offerToInvitationMakers` is precious and closely held.
|
|
150
181
|
* - `offerToPublicSubscriberPaths` is precious and closely held.
|
|
151
|
-
* - `purseBalances` is a cache of what we've received from purses. Held so we can
|
|
182
|
+
* - `purseBalances` is a cache of what we've received from purses. Held so we can
|
|
183
|
+
* publish all balances on change.
|
|
152
184
|
*/
|
|
153
185
|
export type State = ImmutableState & MutableState;
|
|
154
186
|
export type ImmutableState = Readonly<UniqueParams & {
|
|
155
|
-
paymentQueues: MapStore<Brand,
|
|
156
|
-
offerToInvitationMakers: MapStore<string, import(
|
|
187
|
+
paymentQueues: MapStore<Brand, Payment[]>;
|
|
188
|
+
offerToInvitationMakers: MapStore<string, import("./types.js").InvitationMakers>;
|
|
157
189
|
offerToPublicSubscriberPaths: MapStore<string, Record<string, string>>;
|
|
158
|
-
offerToUsedInvitation: MapStore<string, Amount
|
|
159
|
-
purseBalances: MapStore<
|
|
160
|
-
updateRecorderKit: import(
|
|
161
|
-
currentRecorderKit: import(
|
|
162
|
-
liveOffers: MapStore<
|
|
163
|
-
liveOfferSeats:
|
|
190
|
+
offerToUsedInvitation: MapStore<string, Amount<"set">>;
|
|
191
|
+
purseBalances: MapStore<Purse, Amount>;
|
|
192
|
+
updateRecorderKit: import("@agoric/zoe/src/contractSupport/recorder.js").RecorderKit<UpdateRecord>;
|
|
193
|
+
currentRecorderKit: import("@agoric/zoe/src/contractSupport/recorder.js").RecorderKit<CurrentWalletRecord>;
|
|
194
|
+
liveOffers: MapStore<OfferId, OfferStatus>;
|
|
195
|
+
liveOfferSeats: MapStore<OfferId, UserSeat<unknown>>;
|
|
196
|
+
liveOfferPayments: MapStore<OfferId, MapStore<Brand, Payment>>;
|
|
164
197
|
}>;
|
|
165
198
|
export type PurseRecord = BrandDescriptor & {
|
|
166
199
|
purse: Purse;
|
|
167
200
|
};
|
|
168
201
|
export type MutableState = {};
|
|
169
202
|
export type SmartWallet = Awaited<ReturnType<ReturnType<typeof prepareSmartWallet>>>;
|
|
203
|
+
import type { OfferId } from './offers.js';
|
|
204
|
+
import type { OfferStatus } from './offers.js';
|
|
170
205
|
//# sourceMappingURL=smartWallet.d.ts.map
|
package/src/smartWallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"AA4PA,kDAAmD;AAiB5C,4CAHI,OAAO,kBAAkB,EAAE,OAAO,UAClC,YAAY,6BAi1BV,IAAI,CACV,YAAY,EAChB,oBAAwB,GAAG,mBAAmB,CAC3C,GAAG;IACF,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;CACtC;IAzGE;;;;;;;;OAQG;sCAJQ,OAAO,eAAe,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,mCAG5C,OAAO,CAAC,IAAI,CAAC;;QApR1B;;;;;;;;;WASG;yBAJQ,OAAO,GACL,OAAO,CAAC,MAAM,CAAC;;;QA8H5B;;;;;;;;;WASG;gCALQ,SAAS,GACP,OAAO,CAAC,IAAI,CAAC;QA0G1B;;;;;;WAMG;8BAHQ,OAAO,GACL,OAAO,CAAC,IAAI,CAAC;;IAkF1B,sCAAsC;;IAKtC,sCAAsC;;;;;;;;;;;;;;IAyD7C;sBA1jCa,MAAM,GAAG,MAAM;wBAGhB;IACR,EAAE,EAAE,OAAO,CAAC;IACZ,cAAc,EAAE,OAAO,eAAe,EAAE,cAAc,CAAC;IACvD,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;6BAIS;IACR,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAC/B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KACjC,CAAC;IACF,gBAAgB,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,CAAC;IAC/D,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;CACtC;iCAIS;IACR,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;CAClB;iCAIS;IACR,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;2BAMU,kBAAkB,GAAG,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;kCAyBxC;IACR,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,qBAAqB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC;IACnE,4BAA4B,EAAE,CAC5B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE;QAAE,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CACnD,EAAE,CAAC;IACJ,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;CACtC;;;;;;;;;;;;;;2BAIS;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACrD;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;;;;;8BAehD;IACR,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,YAAY,EAAE,OAAO,CAAC;CACvC;2BAMS;IACR,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC,OAAO,8BAA8B,EAAE,IAAI,CAAC,CAAC;IACxD,kBAAkB,EAAE,WAAW,CAAC;IAChC,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACjD,iBAAiB,EAAE,WAAW,CAAC;CAChC;sCAGS,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;2BAGhE;IACR,WAAW,EAAE,IAAI,CAAC,OAAO,cAAc,EAAE,OAAO,CAAC,CAAC;IAClD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,qBAAqB,EAAE,WAAW,CAAC;IACnC,gBAAgB,EAAE,UAAU,CAAC;IAC7B,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;CACvB;;;;;;;;;;oBAGS,cAAc,GAAG,YAAY;6BAS7B,QAAQ,CAChB,YAAY,GAAG;IACb,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,uBAAuB,EAAE,QAAQ,CACvC,MAAc,EACd,OAAe,YAAY,EAAE,gBAAgB,CACtC,CAAC;IACF,4BAA4B,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,qBAAqB,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,iBAAiB,EAAE,OAAO,6CAA6C,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACnG,kBAAkB,EAAE,OAAO,6CAA6C,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAC3G,UAAU,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3C,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,iBAAiB,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;CAChE,CACF;0BAGS,eAAe,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE;2BAElC,EAAE;0BAg6BD,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;6BAtkChC,aAAa;iCAAb,aAAa"}
|