@zerodev/wallet-react 0.0.1-alpha.4 → 0.0.1-alpha.5

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @zerodev/wallet-react
2
2
 
3
+ ## 0.0.1-alpha.5
4
+
5
+ ### Patch Changes
6
+
7
+ - refactor: Simplify chain state management by replacing chainIds array with activeChainId
8
+
3
9
  ## 0.0.1-alpha.4
4
10
 
5
11
  ### Patch Changes
@@ -29,8 +29,6 @@ function zeroDevWallet(params) {
29
29
  });
30
30
  store = (0, store_js_1.createZeroDevWalletStore)();
31
31
  store.getState().setWallet(wallet);
32
- const chainIds = params.chains.map((c) => c.id);
33
- store.setState({ chainIds });
34
32
  if (params.oauthConfig) {
35
33
  store.getState().setOAuthConfig(params.oauthConfig);
36
34
  }
@@ -65,10 +63,7 @@ function zeroDevWallet(params) {
65
63
  ? 'Reconnecting ZeroDevWallet...'
66
64
  : 'Connecting ZeroDevWallet...');
67
65
  const state = store.getState();
68
- const activeChainId = chainId || state.chainIds[0];
69
- if (!activeChainId) {
70
- throw new Error('No chain configured');
71
- }
66
+ const activeChainId = chainId ?? state.activeChainId ?? params.chains[0].id;
72
67
  if (isReconnecting && state.kernelAccounts.has(activeChainId)) {
73
68
  const kernelAccount = state.kernelAccounts.get(activeChainId);
74
69
  if (kernelAccount?.address) {
@@ -111,7 +106,7 @@ function zeroDevWallet(params) {
111
106
  });
112
107
  store.getState().setKernelClient(activeChainId, kernelClient);
113
108
  }
114
- store.getState().setActiveChain(activeChainId);
109
+ store.getState().setActiveChainId(activeChainId);
115
110
  const freshState = store.getState();
116
111
  const kernelAccount = freshState.kernelAccounts.get(activeChainId);
117
112
  console.log('ZeroDevWallet connected:', kernelAccount.address);
@@ -135,19 +130,19 @@ function zeroDevWallet(params) {
135
130
  async getAccounts() {
136
131
  if (!store)
137
132
  return [];
138
- const { eoaAccount, kernelAccounts, chainIds } = store.getState();
133
+ const { eoaAccount, kernelAccounts, activeChainId } = store.getState();
139
134
  if (eoaAccount) {
140
135
  return [eoaAccount.address];
141
136
  }
142
- const activeAccount = chainIds[0]
143
- ? kernelAccounts.get(chainIds[0])
137
+ const activeAccount = activeChainId
138
+ ? kernelAccounts.get(activeChainId)
144
139
  : null;
145
140
  return activeAccount ? [activeAccount.address] : [];
146
141
  },
147
142
  async getChainId() {
148
143
  if (!store)
149
144
  return params.chains[0].id;
150
- return store.getState().chainIds[0] || params.chains[0].id;
145
+ return store.getState().activeChainId ?? params.chains[0].id;
151
146
  },
152
147
  async getProvider() {
153
148
  if (!provider) {
@@ -161,7 +156,7 @@ function zeroDevWallet(params) {
161
156
  if (!state.eoaAccount) {
162
157
  throw new Error('Not authenticated');
163
158
  }
164
- store.getState().setActiveChain(chainId);
159
+ store.getState().setActiveChainId(chainId);
165
160
  if (!state.kernelAccounts.has(chainId)) {
166
161
  const chain = params.chains.find((c) => c.id === chainId);
167
162
  if (!chain) {
@@ -77,7 +77,10 @@ function createProvider({ store, config, }) {
77
77
  },
78
78
  async request({ method, params }) {
79
79
  const state = store.getState();
80
- const activeChainId = state.chainIds[0];
80
+ const activeChainId = state.activeChainId;
81
+ if (!activeChainId) {
82
+ throw new Error('No active chain');
83
+ }
81
84
  switch (method) {
82
85
  case 'eth_accounts': {
83
86
  const account = state.kernelAccounts.get(activeChainId);
@@ -151,7 +154,7 @@ function createProvider({ store, config, }) {
151
154
  }
152
155
  const [{ chainId }] = params;
153
156
  const chainId_number = parseInt(chainId, 16);
154
- store.getState().setActiveChain(chainId_number);
157
+ store.getState().setActiveChainId(chainId_number);
155
158
  emitter.emit('chainChanged', chainId);
156
159
  return null;
157
160
  }
@@ -7,7 +7,7 @@ const createZeroDevWalletStore = () => (0, zustand_1.create)()((0, middleware_1.
7
7
  wallet: null,
8
8
  eoaAccount: null,
9
9
  session: null,
10
- chainIds: [],
10
+ activeChainId: null,
11
11
  kernelAccounts: new Map(),
12
12
  kernelClients: new Map(),
13
13
  isExpiring: false,
@@ -25,12 +25,7 @@ const createZeroDevWalletStore = () => (0, zustand_1.create)()((0, middleware_1.
25
25
  set({ kernelClients: clients });
26
26
  },
27
27
  setSession: (session) => set({ session }),
28
- setActiveChain: (chainId) => {
29
- const { chainIds } = get();
30
- set({
31
- chainIds: [chainId, ...chainIds.filter((id) => id !== chainId)],
32
- });
33
- },
28
+ setActiveChainId: (chainId) => set({ activeChainId: chainId }),
34
29
  setIsExpiring: (isExpiring) => set({ isExpiring }),
35
30
  setOAuthConfig: (config) => set({ oauthConfig: config }),
36
31
  clear: () => set({
@@ -39,13 +34,13 @@ const createZeroDevWalletStore = () => (0, zustand_1.create)()((0, middleware_1.
39
34
  kernelAccounts: new Map(),
40
35
  kernelClients: new Map(),
41
36
  isExpiring: false,
42
- chainIds: [],
37
+ activeChainId: null,
43
38
  }),
44
39
  }), {
45
40
  name: 'zerodev-wallet',
46
41
  partialize: (state) => ({
47
42
  session: state.session,
48
- chainIds: state.chainIds,
43
+ activeChainId: state.activeChainId,
49
44
  }),
50
45
  })));
51
46
  exports.createZeroDevWalletStore = createZeroDevWalletStore;
@@ -30,9 +30,6 @@ export function zeroDevWallet(params) {
30
30
  // Create store
31
31
  store = createZeroDevWalletStore();
32
32
  store.getState().setWallet(wallet);
33
- // Initialize chainIds
34
- const chainIds = params.chains.map((c) => c.id);
35
- store.setState({ chainIds });
36
33
  // Store OAuth config if provided
37
34
  if (params.oauthConfig) {
38
35
  store.getState().setOAuthConfig(params.oauthConfig);
@@ -73,10 +70,7 @@ export function zeroDevWallet(params) {
73
70
  : 'Connecting ZeroDevWallet...');
74
71
  const state = store.getState();
75
72
  // Determine active chain
76
- const activeChainId = chainId || state.chainIds[0];
77
- if (!activeChainId) {
78
- throw new Error('No chain configured');
79
- }
73
+ const activeChainId = chainId ?? state.activeChainId ?? params.chains[0].id;
80
74
  // If reconnecting and already have kernel account, return immediately
81
75
  if (isReconnecting && state.kernelAccounts.has(activeChainId)) {
82
76
  const kernelAccount = state.kernelAccounts.get(activeChainId);
@@ -125,7 +119,7 @@ export function zeroDevWallet(params) {
125
119
  store.getState().setKernelClient(activeChainId, kernelClient);
126
120
  }
127
121
  // Set as active chain
128
- store.getState().setActiveChain(activeChainId);
122
+ store.getState().setActiveChainId(activeChainId);
129
123
  // Get fresh state after updates
130
124
  const freshState = store.getState();
131
125
  const kernelAccount = freshState.kernelAccounts.get(activeChainId);
@@ -151,21 +145,21 @@ export function zeroDevWallet(params) {
151
145
  async getAccounts() {
152
146
  if (!store)
153
147
  return [];
154
- const { eoaAccount, kernelAccounts, chainIds } = store.getState();
148
+ const { eoaAccount, kernelAccounts, activeChainId } = store.getState();
155
149
  // Return EOA address if we have it (EIP-7702: EOA address = kernel address)
156
150
  if (eoaAccount) {
157
151
  return [eoaAccount.address];
158
152
  }
159
153
  // Fallback: check kernel accounts
160
- const activeAccount = chainIds[0]
161
- ? kernelAccounts.get(chainIds[0])
154
+ const activeAccount = activeChainId
155
+ ? kernelAccounts.get(activeChainId)
162
156
  : null;
163
157
  return activeAccount ? [activeAccount.address] : [];
164
158
  },
165
159
  async getChainId() {
166
160
  if (!store)
167
161
  return params.chains[0].id;
168
- return store.getState().chainIds[0] || params.chains[0].id;
162
+ return store.getState().activeChainId ?? params.chains[0].id;
169
163
  },
170
164
  async getProvider() {
171
165
  if (!provider) {
@@ -180,7 +174,7 @@ export function zeroDevWallet(params) {
180
174
  throw new Error('Not authenticated');
181
175
  }
182
176
  // Update active chain
183
- store.getState().setActiveChain(chainId);
177
+ store.getState().setActiveChainId(chainId);
184
178
  // Create kernel account for new chain if doesn't exist
185
179
  if (!state.kernelAccounts.has(chainId)) {
186
180
  const chain = params.chains.find((c) => c.id === chainId);
@@ -79,7 +79,10 @@ export function createProvider({ store, config, }) {
79
79
  },
80
80
  async request({ method, params }) {
81
81
  const state = store.getState();
82
- const activeChainId = state.chainIds[0];
82
+ const activeChainId = state.activeChainId;
83
+ if (!activeChainId) {
84
+ throw new Error('No active chain');
85
+ }
83
86
  switch (method) {
84
87
  case 'eth_accounts': {
85
88
  const account = state.kernelAccounts.get(activeChainId);
@@ -156,7 +159,7 @@ export function createProvider({ store, config, }) {
156
159
  const [{ chainId }] = params;
157
160
  const chainId_number = parseInt(chainId, 16);
158
161
  // Update active chain
159
- store.getState().setActiveChain(chainId_number);
162
+ store.getState().setActiveChainId(chainId_number);
160
163
  // Emit chainChanged event
161
164
  emitter.emit('chainChanged', chainId);
162
165
  return null;
@@ -5,7 +5,7 @@ export const createZeroDevWalletStore = () => create()(subscribeWithSelector(per
5
5
  wallet: null,
6
6
  eoaAccount: null,
7
7
  session: null,
8
- chainIds: [],
8
+ activeChainId: null,
9
9
  kernelAccounts: new Map(),
10
10
  kernelClients: new Map(),
11
11
  isExpiring: false,
@@ -24,13 +24,7 @@ export const createZeroDevWalletStore = () => create()(subscribeWithSelector(per
24
24
  set({ kernelClients: clients });
25
25
  },
26
26
  setSession: (session) => set({ session }),
27
- setActiveChain: (chainId) => {
28
- const { chainIds } = get();
29
- // Move chainId to front, remove duplicates
30
- set({
31
- chainIds: [chainId, ...chainIds.filter((id) => id !== chainId)],
32
- });
33
- },
27
+ setActiveChainId: (chainId) => set({ activeChainId: chainId }),
34
28
  setIsExpiring: (isExpiring) => set({ isExpiring }),
35
29
  setOAuthConfig: (config) => set({ oauthConfig: config }),
36
30
  clear: () => set({
@@ -39,13 +33,13 @@ export const createZeroDevWalletStore = () => create()(subscribeWithSelector(per
39
33
  kernelAccounts: new Map(),
40
34
  kernelClients: new Map(),
41
35
  isExpiring: false,
42
- chainIds: [],
36
+ activeChainId: null,
43
37
  }),
44
38
  }), {
45
39
  name: 'zerodev-wallet',
46
40
  // Only persist session data, not clients or accounts
47
41
  partialize: (state) => ({
48
42
  session: state.session,
49
- chainIds: state.chainIds,
43
+ activeChainId: state.activeChainId,
50
44
  }),
51
45
  })));
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,aAAa,CAAA;AAOrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,KAAK,KAAK,EAA4B,MAAM,MAAM,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAK7C,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,4BAA4B,GACnC,iBAAiB,CAsTnB"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,aAAa,CAAA;AAOrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,KAAK,KAAK,EAA4B,MAAM,MAAM,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAK7C,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,4BAA4B,GACnC,iBAAiB,CAgTnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,MAAM,CAAA;AAE/C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAI1D,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;IAClD,MAAM,EAAE,4BAA4B,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG;IACxE,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvE,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,GACP,EAAE,oBAAoB,GAAG,eAAe,CAkNxC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,MAAM,CAAA;AAE/C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAI1D,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;IAClD,MAAM,EAAE,4BAA4B,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG;IACxE,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvE,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,GACP,EAAE,oBAAoB,GAAG,eAAe,CAqNxC"}
@@ -7,7 +7,7 @@ export type ZeroDevWalletState = {
7
7
  wallet: ZeroDevWalletSDK | null;
8
8
  eoaAccount: LocalAccount | null;
9
9
  session: ZeroDevWalletSession | null;
10
- chainIds: number[];
10
+ activeChainId: number | null;
11
11
  kernelAccounts: Map<number, SmartAccount<KernelSmartAccountImplementation>>;
12
12
  kernelClients: Map<number, KernelAccountClient>;
13
13
  isExpiring: boolean;
@@ -17,7 +17,7 @@ export type ZeroDevWalletState = {
17
17
  setKernelAccount: (chainId: number, account: SmartAccount<KernelSmartAccountImplementation>) => void;
18
18
  setKernelClient: (chainId: number, client: KernelAccountClient) => void;
19
19
  setSession: (session: ZeroDevWalletSession | null) => void;
20
- setActiveChain: (chainId: number) => void;
20
+ setActiveChainId: (chainId: number | null) => void;
21
21
  setIsExpiring: (isExpiring: boolean) => void;
22
22
  setOAuthConfig: (config: OAuthConfig | null) => void;
23
23
  clear: () => void;
@@ -36,7 +36,7 @@ export declare const createZeroDevWalletStore: () => import("zustand").UseBoundS
36
36
  persist: {
37
37
  setOptions: (options: Partial<import("zustand/middleware").PersistOptions<ZeroDevWalletState, {
38
38
  session: ZeroDevWalletSession | null;
39
- chainIds: number[];
39
+ activeChainId: number | null;
40
40
  }, unknown>>) => void;
41
41
  clearStorage: () => void;
42
42
  rehydrate: () => Promise<void> | void;
@@ -45,7 +45,7 @@ export declare const createZeroDevWalletStore: () => import("zustand").UseBoundS
45
45
  onFinishHydration: (fn: (state: ZeroDevWalletState) => void) => () => void;
46
46
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<ZeroDevWalletState, {
47
47
  session: ZeroDevWalletSession | null;
48
- chainIds: number[];
48
+ activeChainId: number | null;
49
49
  }, unknown>>;
50
50
  };
51
51
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,gCAAgC,EACjC,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,MAAM,MAAM,kBAAkB,GAAG;IAE/B,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC/B,UAAU,EAAE,YAAY,GAAG,IAAI,CAAA;IAC/B,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAGpC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,gCAAgC,CAAC,CAAC,CAAA;IAC3E,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAG/C,UAAU,EAAE,OAAO,CAAA;IAGnB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAG/B,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAA;IACrD,gBAAgB,EAAE,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,gCAAgC,CAAC,KACpD,IAAI,CAAA;IACT,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IACvE,UAAU,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1D,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IACpD,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;EAkElC,CAAA"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,gCAAgC,EACjC,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,MAAM,MAAM,kBAAkB,GAAG;IAE/B,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC/B,UAAU,EAAE,YAAY,GAAG,IAAI,CAAA;IAC/B,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAGpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,gCAAgC,CAAC,CAAC,CAAA;IAC3E,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAG/C,UAAU,EAAE,OAAO,CAAA;IAGnB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAG/B,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAA;IACrD,gBAAgB,EAAE,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,gCAAgC,CAAC,KACpD,IAAI,CAAA;IACT,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IACvE,UAAU,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1D,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAClD,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IACpD,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DlC,CAAA"}