viem 2.16.1 → 2.16.3
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +20 -0
- package/_cjs/chains/definitions/bitTorrent.js +6 -0
- package/_cjs/chains/definitions/bitTorrent.js.map +1 -1
- package/_cjs/chains/definitions/dchain.js +27 -0
- package/_cjs/chains/definitions/dchain.js.map +1 -0
- package/_cjs/chains/definitions/dchainTestnet.js +29 -0
- package/_cjs/chains/definitions/dchainTestnet.js.map +1 -0
- package/_cjs/chains/definitions/etherlink.js +29 -0
- package/_cjs/chains/definitions/etherlink.js.map +1 -0
- package/_cjs/chains/definitions/morphHolesky.js +24 -0
- package/_cjs/chains/definitions/morphHolesky.js.map +1 -0
- package/_cjs/chains/definitions/real.js +30 -0
- package/_cjs/chains/definitions/real.js.map +1 -0
- package/_cjs/chains/definitions/unreal.js +31 -0
- package/_cjs/chains/definitions/unreal.js.map +1 -0
- package/_cjs/chains/index.js +17 -5
- package/_cjs/chains/index.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/experimental/erc7715/actions/grantPermissions.js +94 -0
- package/_cjs/experimental/erc7715/actions/grantPermissions.js.map +1 -0
- package/_cjs/experimental/erc7715/decorators/erc7715.js +2 -2
- package/_cjs/experimental/erc7715/types/policy.js +3 -0
- package/_cjs/experimental/erc7715/types/policy.js.map +1 -0
- package/_cjs/experimental/index.js +3 -3
- package/_esm/chains/definitions/bitTorrent.js +6 -0
- package/_esm/chains/definitions/bitTorrent.js.map +1 -1
- package/_esm/chains/definitions/dchain.js +24 -0
- package/_esm/chains/definitions/dchain.js.map +1 -0
- package/_esm/chains/definitions/dchainTestnet.js +26 -0
- package/_esm/chains/definitions/dchainTestnet.js.map +1 -0
- package/_esm/chains/definitions/etherlink.js +26 -0
- package/_esm/chains/definitions/etherlink.js.map +1 -0
- package/_esm/chains/definitions/morphHolesky.js +21 -0
- package/_esm/chains/definitions/morphHolesky.js.map +1 -0
- package/_esm/chains/definitions/real.js +27 -0
- package/_esm/chains/definitions/real.js.map +1 -0
- package/_esm/chains/definitions/unreal.js +28 -0
- package/_esm/chains/definitions/unreal.js.map +1 -0
- package/_esm/chains/index.js +6 -0
- package/_esm/chains/index.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/experimental/erc7715/actions/grantPermissions.js +130 -0
- package/_esm/experimental/erc7715/actions/grantPermissions.js.map +1 -0
- package/_esm/experimental/erc7715/decorators/erc7715.js +3 -3
- package/_esm/experimental/erc7715/types/policy.js +2 -0
- package/_esm/experimental/erc7715/types/policy.js.map +1 -0
- package/_esm/experimental/index.js +1 -1
- package/_types/chains/definitions/bitTorrent.d.ts +6 -8
- package/_types/chains/definitions/bitTorrent.d.ts.map +1 -1
- package/_types/chains/definitions/dchain.d.ts +1049 -0
- package/_types/chains/definitions/dchain.d.ts.map +1 -0
- package/_types/chains/definitions/dchainTestnet.d.ts +1049 -0
- package/_types/chains/definitions/dchainTestnet.d.ts.map +1 -0
- package/_types/chains/definitions/etherlink.d.ts +33 -0
- package/_types/chains/definitions/etherlink.d.ts.map +1 -0
- package/_types/chains/definitions/morphHolesky.d.ts +37 -0
- package/_types/chains/definitions/morphHolesky.d.ts.map +1 -0
- package/_types/chains/definitions/real.d.ts +34 -0
- package/_types/chains/definitions/real.d.ts.map +1 -0
- package/_types/chains/definitions/unreal.d.ts +34 -0
- package/_types/chains/definitions/unreal.d.ts.map +1 -0
- package/_types/chains/index.d.ts +6 -0
- package/_types/chains/index.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/experimental/erc7715/actions/{issuePermissions.d.ts → grantPermissions.d.ts} +18 -16
- package/_types/experimental/erc7715/actions/{issuePermissions.d.ts.map → grantPermissions.d.ts.map} +1 -1
- package/_types/experimental/erc7715/decorators/erc7715.d.ts +5 -5
- package/_types/experimental/erc7715/types/permission.d.ts +24 -20
- package/_types/experimental/erc7715/types/permission.d.ts.map +1 -1
- package/_types/experimental/erc7715/types/policy.d.ts +36 -0
- package/_types/experimental/erc7715/types/policy.d.ts.map +1 -0
- package/_types/experimental/erc7715/types/signer.d.ts +5 -1
- package/_types/experimental/erc7715/types/signer.d.ts.map +1 -1
- package/_types/experimental/index.d.ts +1 -1
- package/_types/index.d.ts +1 -1
- package/_types/types/eip1193.d.ts +19 -10
- package/_types/types/eip1193.d.ts.map +1 -1
- package/chains/definitions/bitTorrent.ts +6 -0
- package/chains/definitions/dchain.ts +24 -0
- package/chains/definitions/dchainTestnet.ts +27 -0
- package/chains/definitions/etherlink.ts +26 -0
- package/chains/definitions/morphHolesky.ts +21 -0
- package/chains/definitions/real.ts +27 -0
- package/chains/definitions/unreal.ts +28 -0
- package/chains/index.ts +6 -0
- package/errors/version.ts +1 -1
- package/experimental/erc7715/actions/{issuePermissions.ts → grantPermissions.ts} +82 -54
- package/experimental/erc7715/decorators/erc7715.ts +11 -11
- package/experimental/erc7715/types/permission.ts +28 -26
- package/experimental/erc7715/types/policy.ts +43 -0
- package/experimental/erc7715/types/signer.ts +8 -1
- package/experimental/index.ts +4 -4
- package/index.ts +2 -2
- package/package.json +1 -1
- package/types/eip1193.ts +19 -10
- package/_cjs/experimental/erc7715/actions/issuePermissions.js +0 -73
- package/_cjs/experimental/erc7715/actions/issuePermissions.js.map +0 -1
- package/_esm/experimental/erc7715/actions/issuePermissions.js +0 -107
- package/_esm/experimental/erc7715/actions/issuePermissions.js.map +0 -1
@@ -1,51 +1,53 @@
|
|
1
1
|
import type { Address } from 'abitype'
|
2
2
|
|
3
3
|
import type { OneOf } from '../../../types/utils.js'
|
4
|
+
import type { Policy } from './policy.js'
|
4
5
|
|
5
6
|
/** @internal */
|
6
|
-
export type
|
7
|
-
|
8
|
-
|
9
|
-
amount: amount
|
10
|
-
}
|
7
|
+
export type CustomPermission<data = unknown, type = { custom: string }> = {
|
8
|
+
data: data
|
9
|
+
type: type
|
11
10
|
}
|
12
11
|
|
13
12
|
/** @internal */
|
14
|
-
export type
|
15
|
-
type: '
|
13
|
+
export type NativeTokenTransferPermission = {
|
14
|
+
type: 'native-token-transfer'
|
16
15
|
data: {
|
17
|
-
|
18
|
-
|
16
|
+
/** Native token ticker (e.g. ETH). */
|
17
|
+
ticker: string
|
19
18
|
}
|
20
19
|
}
|
21
20
|
|
22
21
|
/** @internal */
|
23
|
-
export type
|
24
|
-
type: '
|
22
|
+
export type Erc20TokenTransferPermission = {
|
23
|
+
type: 'erc20-token-transfer'
|
25
24
|
data: {
|
26
|
-
|
25
|
+
/** ERC20 address. */
|
26
|
+
address: Address
|
27
|
+
/** Native token ticker (e.g. ETH). */
|
28
|
+
ticker: string
|
27
29
|
}
|
28
30
|
}
|
29
31
|
|
30
32
|
/** @internal */
|
31
33
|
export type ContractCallPermission = {
|
32
34
|
type: 'contract-call'
|
33
|
-
data: unknown
|
34
|
-
}
|
35
|
-
|
36
|
-
/** @internal */
|
37
|
-
export type RateLimitPermission = {
|
38
|
-
type: 'rate-limit'
|
39
35
|
data: {
|
40
|
-
|
41
|
-
|
36
|
+
/** Contract address. */
|
37
|
+
address: Address
|
38
|
+
/** Set of contract signatures to permit. */
|
39
|
+
calls: string[]
|
42
40
|
}
|
43
41
|
}
|
44
42
|
|
45
|
-
export type Permission<
|
46
|
-
|
|
47
|
-
|
|
48
|
-
| GasLimitPermission<amount>
|
43
|
+
export type Permission<uint256 = bigint> = OneOf<
|
44
|
+
| NativeTokenTransferPermission
|
45
|
+
| Erc20TokenTransferPermission
|
49
46
|
| ContractCallPermission
|
50
|
-
|
|
51
|
-
> & {
|
47
|
+
| CustomPermission
|
48
|
+
> & {
|
49
|
+
/** Set of policies for the permission. */
|
50
|
+
policies: readonly Policy<uint256>[]
|
51
|
+
/** Whether or not the wallet must grant the permission. */
|
52
|
+
required?: boolean | undefined
|
53
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import type { OneOf } from '../../../types/utils.js'
|
2
|
+
|
3
|
+
/** @internal */
|
4
|
+
export type CustomPolicy<data = unknown> = {
|
5
|
+
data: data
|
6
|
+
type: { custom: string }
|
7
|
+
}
|
8
|
+
|
9
|
+
/** @internal */
|
10
|
+
export type TokenAllowancePolicy<uint256 = bigint> = {
|
11
|
+
type: 'token-allowance'
|
12
|
+
data: {
|
13
|
+
/** Token allowance (in wei). */
|
14
|
+
allowance: uint256
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
/** @internal */
|
19
|
+
export type GasLimitPolicy<uint256 = bigint> = {
|
20
|
+
type: 'gas-limit'
|
21
|
+
data: {
|
22
|
+
/** Gas limit (in wei). */
|
23
|
+
limit: uint256
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
/** @internal */
|
28
|
+
export type RateLimitPolicy = {
|
29
|
+
type: 'rate-limit'
|
30
|
+
data: {
|
31
|
+
/** Number of times during each interval. */
|
32
|
+
count: number
|
33
|
+
/** Interval (in seconds). */
|
34
|
+
interval: number
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
export type Policy<amount = bigint> = OneOf<
|
39
|
+
| TokenAllowancePolicy<amount>
|
40
|
+
| GasLimitPolicy<amount>
|
41
|
+
| RateLimitPolicy
|
42
|
+
| CustomPolicy
|
43
|
+
>
|
@@ -25,4 +25,11 @@ export type MultiKeySigner = {
|
|
25
25
|
}
|
26
26
|
}
|
27
27
|
|
28
|
-
|
28
|
+
/** @internal */
|
29
|
+
export type WalletSigner = {
|
30
|
+
type: 'wallet'
|
31
|
+
}
|
32
|
+
|
33
|
+
export type Signer = OneOf<
|
34
|
+
AccountSigner | KeySigner | MultiKeySigner | WalletSigner
|
35
|
+
>
|
package/experimental/index.ts
CHANGED
@@ -67,10 +67,10 @@ export {
|
|
67
67
|
} from '../utils/signature/serializeErc6492Signature.js'
|
68
68
|
|
69
69
|
export {
|
70
|
-
type
|
71
|
-
type
|
72
|
-
|
73
|
-
} from './erc7715/actions/
|
70
|
+
type GrantPermissionsParameters,
|
71
|
+
type GrantPermissionsReturnType,
|
72
|
+
grantPermissions,
|
73
|
+
} from './erc7715/actions/grantPermissions.js'
|
74
74
|
export {
|
75
75
|
type WalletActionsErc7715,
|
76
76
|
walletActionsErc7715,
|
package/index.ts
CHANGED
@@ -1021,8 +1021,8 @@ export type {
|
|
1021
1021
|
WalletCapabilitiesRecord,
|
1022
1022
|
WalletCallReceipt,
|
1023
1023
|
WalletGetCallsStatusReturnType,
|
1024
|
-
|
1025
|
-
|
1024
|
+
WalletGrantPermissionsParameters,
|
1025
|
+
WalletGrantPermissionsReturnType,
|
1026
1026
|
WalletSendCallsParameters,
|
1027
1027
|
WalletPermissionCaveat,
|
1028
1028
|
WalletPermission,
|
package/package.json
CHANGED
package/types/eip1193.ts
CHANGED
@@ -131,28 +131,37 @@ export type WalletCallReceipt<quantity = Hex, status = Hex> = {
|
|
131
131
|
transactionHash: Hex
|
132
132
|
}
|
133
133
|
|
134
|
-
export type
|
134
|
+
export type WalletGrantPermissionsParameters = {
|
135
135
|
signer?:
|
136
136
|
| {
|
137
137
|
type: string
|
138
|
-
data
|
138
|
+
data?: unknown | undefined
|
139
139
|
}
|
140
140
|
| undefined
|
141
141
|
permissions: readonly {
|
142
|
-
type: string
|
143
142
|
data: unknown
|
144
|
-
|
143
|
+
policies: readonly {
|
144
|
+
data: unknown
|
145
|
+
type: string
|
146
|
+
}[]
|
147
|
+
required?: boolean | undefined
|
148
|
+
type: string
|
145
149
|
}[]
|
146
150
|
expiry: number
|
147
151
|
}
|
148
152
|
|
149
|
-
export type
|
153
|
+
export type WalletGrantPermissionsReturnType = {
|
150
154
|
expiry: number
|
151
155
|
factory?: `0x${string}` | undefined
|
152
156
|
factoryData?: string | undefined
|
153
157
|
grantedPermissions: readonly {
|
158
|
+
data: unknown
|
159
|
+
policies: readonly {
|
160
|
+
data: unknown
|
161
|
+
type: string
|
162
|
+
}[]
|
163
|
+
required?: boolean | undefined
|
154
164
|
type: string
|
155
|
-
data: any
|
156
165
|
}[]
|
157
166
|
permissionsContext: string
|
158
167
|
signerData?:
|
@@ -1404,13 +1413,13 @@ export type WalletRpcSchema = [
|
|
1404
1413
|
* @description Requests permissions from a wallet
|
1405
1414
|
* @link https://eips.ethereum.org/EIPS/eip-7715
|
1406
1415
|
* @example
|
1407
|
-
* provider.request({ method: '
|
1416
|
+
* provider.request({ method: 'wallet_grantPermissions', params: [{ ... }] })
|
1408
1417
|
* // => { ... }
|
1409
1418
|
*/
|
1410
1419
|
{
|
1411
|
-
Method: '
|
1412
|
-
Parameters?: [
|
1413
|
-
ReturnType: Prettify<
|
1420
|
+
Method: 'wallet_grantPermissions'
|
1421
|
+
Parameters?: [WalletGrantPermissionsParameters]
|
1422
|
+
ReturnType: Prettify<WalletGrantPermissionsReturnType>
|
1414
1423
|
},
|
1415
1424
|
/**
|
1416
1425
|
* @description Requests the given permissions from the user.
|
@@ -1,73 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.issuePermissions = issuePermissions;
|
4
|
-
const toHex_js_1 = require("../../../utils/encoding/toHex.js");
|
5
|
-
async function issuePermissions(client, parameters) {
|
6
|
-
const { expiry, permissions, signer } = parameters;
|
7
|
-
const result = await client.request({
|
8
|
-
method: 'wallet_issuePermissions',
|
9
|
-
params: [parseParameters({ expiry, permissions, signer })],
|
10
|
-
}, { retryCount: 0 });
|
11
|
-
return parseResult(result);
|
12
|
-
}
|
13
|
-
function parseParameters(parameters) {
|
14
|
-
const { account, expiry, permissions, signer: signer_ } = parameters;
|
15
|
-
const signer = (() => {
|
16
|
-
if (!account && !signer_)
|
17
|
-
return undefined;
|
18
|
-
if (account) {
|
19
|
-
if (typeof account === 'string')
|
20
|
-
return {
|
21
|
-
type: 'account',
|
22
|
-
data: {
|
23
|
-
id: account,
|
24
|
-
},
|
25
|
-
};
|
26
|
-
return {
|
27
|
-
type: 'account',
|
28
|
-
data: {
|
29
|
-
id: account.address,
|
30
|
-
},
|
31
|
-
};
|
32
|
-
}
|
33
|
-
return signer_;
|
34
|
-
})();
|
35
|
-
return {
|
36
|
-
expiry,
|
37
|
-
permissions: permissions.map((permission) => ({
|
38
|
-
...permission,
|
39
|
-
...(permission.data && typeof permission.data === 'object'
|
40
|
-
? {
|
41
|
-
data: {
|
42
|
-
...permission.data,
|
43
|
-
...('amount' in permission.data &&
|
44
|
-
typeof permission.data.amount === 'bigint'
|
45
|
-
? { amount: (0, toHex_js_1.numberToHex)(permission.data.amount) }
|
46
|
-
: {}),
|
47
|
-
},
|
48
|
-
}
|
49
|
-
: {}),
|
50
|
-
required: permission.required ?? false,
|
51
|
-
})),
|
52
|
-
...(signer ? { signer } : {}),
|
53
|
-
};
|
54
|
-
}
|
55
|
-
function parseResult(result) {
|
56
|
-
return {
|
57
|
-
expiry: result.expiry,
|
58
|
-
...(result.factory ? { factory: result.factory } : {}),
|
59
|
-
...(result.factoryData ? { factoryData: result.factoryData } : {}),
|
60
|
-
grantedPermissions: result.grantedPermissions.map((permission) => ({
|
61
|
-
...permission,
|
62
|
-
data: {
|
63
|
-
...permission.data,
|
64
|
-
...('amount' in permission.data
|
65
|
-
? { amount: BigInt(permission.data.amount) }
|
66
|
-
: {}),
|
67
|
-
},
|
68
|
-
})),
|
69
|
-
permissionsContext: result.permissionsContext,
|
70
|
-
...(result.signerData ? { signerData: result.signerData } : {}),
|
71
|
-
};
|
72
|
-
}
|
73
|
-
//# sourceMappingURL=issuePermissions.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"issuePermissions.js","sourceRoot":"","sources":["../../../../experimental/erc7715/actions/issuePermissions.ts"],"names":[],"mappings":"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"}
|
@@ -1,107 +0,0 @@
|
|
1
|
-
import { numberToHex } from '../../../utils/encoding/toHex.js';
|
2
|
-
/**
|
3
|
-
* Request permissions from a wallet to perform actions on behalf of a user.
|
4
|
-
*
|
5
|
-
* - Docs: https://viem.sh/experimental/erc7715/issuePermissions
|
6
|
-
*
|
7
|
-
* @example
|
8
|
-
* import { createWalletClient, custom } from 'viem'
|
9
|
-
* import { mainnet } from 'viem/chains'
|
10
|
-
* import { issuePermissions } from 'viem/experimental'
|
11
|
-
*
|
12
|
-
* const client = createWalletClient({
|
13
|
-
* chain: mainnet,
|
14
|
-
* transport: custom(window.ethereum),
|
15
|
-
* })
|
16
|
-
*
|
17
|
-
* const result = await issuePermissions(client, {
|
18
|
-
* expiry: 1716846083638,
|
19
|
-
* permissions: [
|
20
|
-
* {
|
21
|
-
* type: 'contract-call',
|
22
|
-
* data: {
|
23
|
-
* address: '0x0000000000000000000000000000000000000000',
|
24
|
-
* },
|
25
|
-
* },
|
26
|
-
* {
|
27
|
-
* type: 'native-token-limit',
|
28
|
-
* data: {
|
29
|
-
* amount: 69420n,
|
30
|
-
* },
|
31
|
-
* required: true,
|
32
|
-
* },
|
33
|
-
* ],
|
34
|
-
* })
|
35
|
-
*/
|
36
|
-
export async function issuePermissions(client, parameters) {
|
37
|
-
const { expiry, permissions, signer } = parameters;
|
38
|
-
const result = await client.request({
|
39
|
-
method: 'wallet_issuePermissions',
|
40
|
-
params: [parseParameters({ expiry, permissions, signer })],
|
41
|
-
}, { retryCount: 0 });
|
42
|
-
return parseResult(result);
|
43
|
-
}
|
44
|
-
function parseParameters(parameters) {
|
45
|
-
const { account, expiry, permissions, signer: signer_ } = parameters;
|
46
|
-
const signer = (() => {
|
47
|
-
if (!account && !signer_)
|
48
|
-
return undefined;
|
49
|
-
if (account) {
|
50
|
-
// Address as signer.
|
51
|
-
if (typeof account === 'string')
|
52
|
-
return {
|
53
|
-
type: 'account',
|
54
|
-
data: {
|
55
|
-
id: account,
|
56
|
-
},
|
57
|
-
};
|
58
|
-
// Viem Account as signer.
|
59
|
-
return {
|
60
|
-
type: 'account',
|
61
|
-
data: {
|
62
|
-
id: account.address,
|
63
|
-
},
|
64
|
-
};
|
65
|
-
}
|
66
|
-
// ERC-7715 Signer as signer.
|
67
|
-
return signer_;
|
68
|
-
})();
|
69
|
-
return {
|
70
|
-
expiry,
|
71
|
-
permissions: permissions.map((permission) => ({
|
72
|
-
...permission,
|
73
|
-
...(permission.data && typeof permission.data === 'object'
|
74
|
-
? {
|
75
|
-
data: {
|
76
|
-
...permission.data,
|
77
|
-
...('amount' in permission.data &&
|
78
|
-
typeof permission.data.amount === 'bigint'
|
79
|
-
? { amount: numberToHex(permission.data.amount) }
|
80
|
-
: {}),
|
81
|
-
},
|
82
|
-
}
|
83
|
-
: {}),
|
84
|
-
required: permission.required ?? false,
|
85
|
-
})),
|
86
|
-
...(signer ? { signer } : {}),
|
87
|
-
};
|
88
|
-
}
|
89
|
-
function parseResult(result) {
|
90
|
-
return {
|
91
|
-
expiry: result.expiry,
|
92
|
-
...(result.factory ? { factory: result.factory } : {}),
|
93
|
-
...(result.factoryData ? { factoryData: result.factoryData } : {}),
|
94
|
-
grantedPermissions: result.grantedPermissions.map((permission) => ({
|
95
|
-
...permission,
|
96
|
-
data: {
|
97
|
-
...permission.data,
|
98
|
-
...('amount' in permission.data
|
99
|
-
? { amount: BigInt(permission.data.amount) }
|
100
|
-
: {}),
|
101
|
-
},
|
102
|
-
})),
|
103
|
-
permissionsContext: result.permissionsContext,
|
104
|
-
...(result.signerData ? { signerData: result.signerData } : {}),
|
105
|
-
};
|
106
|
-
}
|
107
|
-
//# sourceMappingURL=issuePermissions.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"issuePermissions.js","sourceRoot":"","sources":["../../../../experimental/erc7715/actions/issuePermissions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAwC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAyB,EACzB,UAAsC;IAEtC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;IAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC;QACE,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;KAC3D,EACD,EAAE,UAAU,EAAE,CAAC,EAAE,CAClB,CAAA;IACD,OAAO,WAAW,CAAC,MAAM,CAA+B,CAAA;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,UAAsC;IAC7D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA;IAEpE,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAE1C,IAAI,OAAO,EAAE,CAAC;YACZ,qBAAqB;YACrB,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAC7B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE;wBACJ,EAAE,EAAE,OAAO;qBACZ;iBACF,CAAA;YAEH,0BAA0B;YAC1B,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE;oBACJ,EAAE,EAAE,OAAO,CAAC,OAAO;iBACpB;aACF,CAAA;QACH,CAAC;QAED,6BAA6B;QAC7B,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO;QACL,MAAM;QACN,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC5C,GAAG,UAAU;YACb,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;gBACxD,CAAC,CAAC;oBACE,IAAI,EAAE;wBACJ,GAAG,UAAU,CAAC,IAAI;wBAClB,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI;4BAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ;4BACxC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;4BACjD,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,KAAK;SACvC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAwC;IAC3D,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACjE,GAAG,UAAU;YACb,IAAI,EAAE;gBACJ,GAAG,UAAU,CAAC,IAAI;gBAClB,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI;oBAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAC,CAAC;QACH,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAA;AACH,CAAC"}
|