uvd-x402-sdk 0.2.1__py3-none-any.whl → 0.2.3__py3-none-any.whl
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.
- uvd_x402_sdk/__init__.py +169 -169
- uvd_x402_sdk/client.py +527 -527
- uvd_x402_sdk/config.py +248 -248
- uvd_x402_sdk/decorators.py +325 -325
- uvd_x402_sdk/exceptions.py +254 -254
- uvd_x402_sdk/integrations/__init__.py +74 -74
- uvd_x402_sdk/integrations/django_integration.py +237 -237
- uvd_x402_sdk/integrations/fastapi_integration.py +330 -330
- uvd_x402_sdk/integrations/flask_integration.py +259 -259
- uvd_x402_sdk/integrations/lambda_integration.py +320 -320
- uvd_x402_sdk/models.py +397 -397
- uvd_x402_sdk/networks/__init__.py +54 -54
- uvd_x402_sdk/networks/base.py +347 -347
- uvd_x402_sdk/networks/evm.py +215 -215
- uvd_x402_sdk/networks/near.py +397 -397
- uvd_x402_sdk/networks/solana.py +282 -269
- uvd_x402_sdk/networks/stellar.py +129 -129
- uvd_x402_sdk/response.py +439 -439
- {uvd_x402_sdk-0.2.1.dist-info → uvd_x402_sdk-0.2.3.dist-info}/LICENSE +21 -21
- {uvd_x402_sdk-0.2.1.dist-info → uvd_x402_sdk-0.2.3.dist-info}/METADATA +814 -778
- uvd_x402_sdk-0.2.3.dist-info/RECORD +23 -0
- uvd_x402_sdk-0.2.1.dist-info/RECORD +0 -23
- {uvd_x402_sdk-0.2.1.dist-info → uvd_x402_sdk-0.2.3.dist-info}/WHEEL +0 -0
- {uvd_x402_sdk-0.2.1.dist-info → uvd_x402_sdk-0.2.3.dist-info}/top_level.txt +0 -0
uvd_x402_sdk/networks/evm.py
CHANGED
|
@@ -1,215 +1,215 @@
|
|
|
1
|
-
"""
|
|
2
|
-
EVM network configurations.
|
|
3
|
-
|
|
4
|
-
This module defines configurations for all supported EVM-compatible chains.
|
|
5
|
-
Each chain uses ERC-3009 TransferWithAuthorization for USDC transfers.
|
|
6
|
-
|
|
7
|
-
Important EIP-712 domain considerations:
|
|
8
|
-
- Most chains use 'USD Coin' as the domain name
|
|
9
|
-
- Celo, HyperEVM, Unichain, Monad use 'USDC' as the domain name
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from uvd_x402_sdk.networks.base import (
|
|
13
|
-
NetworkConfig,
|
|
14
|
-
NetworkType,
|
|
15
|
-
register_network,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
# =============================================================================
|
|
19
|
-
# EVM Networks Configuration
|
|
20
|
-
# =============================================================================
|
|
21
|
-
|
|
22
|
-
# Base (Layer 2)
|
|
23
|
-
BASE = NetworkConfig(
|
|
24
|
-
name="base",
|
|
25
|
-
display_name="Base",
|
|
26
|
-
network_type=NetworkType.EVM,
|
|
27
|
-
chain_id=8453,
|
|
28
|
-
usdc_address="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
29
|
-
usdc_decimals=6,
|
|
30
|
-
usdc_domain_name="USD Coin",
|
|
31
|
-
usdc_domain_version="2",
|
|
32
|
-
rpc_url="https://mainnet.base.org",
|
|
33
|
-
enabled=True,
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
# Ethereum Mainnet
|
|
37
|
-
ETHEREUM = NetworkConfig(
|
|
38
|
-
name="ethereum",
|
|
39
|
-
display_name="Ethereum",
|
|
40
|
-
network_type=NetworkType.EVM,
|
|
41
|
-
chain_id=1,
|
|
42
|
-
usdc_address="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
43
|
-
usdc_decimals=6,
|
|
44
|
-
usdc_domain_name="USD Coin",
|
|
45
|
-
usdc_domain_version="2",
|
|
46
|
-
rpc_url="https://eth.llamarpc.com",
|
|
47
|
-
enabled=True,
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
# Polygon (PoS)
|
|
51
|
-
POLYGON = NetworkConfig(
|
|
52
|
-
name="polygon",
|
|
53
|
-
display_name="Polygon",
|
|
54
|
-
network_type=NetworkType.EVM,
|
|
55
|
-
chain_id=137,
|
|
56
|
-
usdc_address="0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
|
|
57
|
-
usdc_decimals=6,
|
|
58
|
-
usdc_domain_name="USD Coin",
|
|
59
|
-
usdc_domain_version="2",
|
|
60
|
-
rpc_url="https://polygon-rpc.com",
|
|
61
|
-
enabled=True,
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
# Arbitrum One
|
|
65
|
-
ARBITRUM = NetworkConfig(
|
|
66
|
-
name="arbitrum",
|
|
67
|
-
display_name="Arbitrum One",
|
|
68
|
-
network_type=NetworkType.EVM,
|
|
69
|
-
chain_id=42161,
|
|
70
|
-
usdc_address="0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
|
71
|
-
usdc_decimals=6,
|
|
72
|
-
usdc_domain_name="USD Coin",
|
|
73
|
-
usdc_domain_version="2",
|
|
74
|
-
rpc_url="https://arb1.arbitrum.io/rpc",
|
|
75
|
-
enabled=True,
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
# Optimism
|
|
79
|
-
OPTIMISM = NetworkConfig(
|
|
80
|
-
name="optimism",
|
|
81
|
-
display_name="Optimism",
|
|
82
|
-
network_type=NetworkType.EVM,
|
|
83
|
-
chain_id=10,
|
|
84
|
-
usdc_address="0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
|
|
85
|
-
usdc_decimals=6,
|
|
86
|
-
usdc_domain_name="USD Coin",
|
|
87
|
-
usdc_domain_version="2",
|
|
88
|
-
rpc_url="https://mainnet.optimism.io",
|
|
89
|
-
enabled=True,
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
# Avalanche C-Chain
|
|
93
|
-
AVALANCHE = NetworkConfig(
|
|
94
|
-
name="avalanche",
|
|
95
|
-
display_name="Avalanche C-Chain",
|
|
96
|
-
network_type=NetworkType.EVM,
|
|
97
|
-
chain_id=43114,
|
|
98
|
-
usdc_address="0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
99
|
-
usdc_decimals=6,
|
|
100
|
-
usdc_domain_name="USD Coin",
|
|
101
|
-
usdc_domain_version="2",
|
|
102
|
-
rpc_url="https://avalanche-c-chain-rpc.publicnode.com",
|
|
103
|
-
enabled=True,
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
# Celo
|
|
107
|
-
# NOTE: Celo uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
108
|
-
CELO = NetworkConfig(
|
|
109
|
-
name="celo",
|
|
110
|
-
display_name="Celo",
|
|
111
|
-
network_type=NetworkType.EVM,
|
|
112
|
-
chain_id=42220,
|
|
113
|
-
usdc_address="0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
|
|
114
|
-
usdc_decimals=6,
|
|
115
|
-
usdc_domain_name="USDC", # Different from other chains!
|
|
116
|
-
usdc_domain_version="2",
|
|
117
|
-
rpc_url="https://forno.celo.org",
|
|
118
|
-
enabled=True,
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
# HyperEVM (Hyperliquid)
|
|
122
|
-
# NOTE: HyperEVM uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
123
|
-
HYPEREVM = NetworkConfig(
|
|
124
|
-
name="hyperevm",
|
|
125
|
-
display_name="HyperEVM",
|
|
126
|
-
network_type=NetworkType.EVM,
|
|
127
|
-
chain_id=999,
|
|
128
|
-
usdc_address="0xb88339CB7199b77E23DB6E890353E22632Ba630f",
|
|
129
|
-
usdc_decimals=6,
|
|
130
|
-
usdc_domain_name="USDC", # Different from other chains!
|
|
131
|
-
usdc_domain_version="2",
|
|
132
|
-
rpc_url="https://rpc.hyperliquid.xyz/evm",
|
|
133
|
-
enabled=True,
|
|
134
|
-
)
|
|
135
|
-
|
|
136
|
-
# Unichain
|
|
137
|
-
# NOTE: Unichain uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
138
|
-
UNICHAIN = NetworkConfig(
|
|
139
|
-
name="unichain",
|
|
140
|
-
display_name="Unichain",
|
|
141
|
-
network_type=NetworkType.EVM,
|
|
142
|
-
chain_id=130,
|
|
143
|
-
usdc_address="0x078d782b760474a361dda0af3839290b0ef57ad6",
|
|
144
|
-
usdc_decimals=6,
|
|
145
|
-
usdc_domain_name="USDC", # Different from other chains!
|
|
146
|
-
usdc_domain_version="2",
|
|
147
|
-
rpc_url="https://unichain-rpc.publicnode.com",
|
|
148
|
-
enabled=True,
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
# Monad
|
|
152
|
-
# NOTE: Monad uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
153
|
-
MONAD = NetworkConfig(
|
|
154
|
-
name="monad",
|
|
155
|
-
display_name="Monad",
|
|
156
|
-
network_type=NetworkType.EVM,
|
|
157
|
-
chain_id=143,
|
|
158
|
-
usdc_address="0x754704bc059f8c67012fed69bc8a327a5aafb603",
|
|
159
|
-
usdc_decimals=6,
|
|
160
|
-
usdc_domain_name="USDC", # Different from other chains!
|
|
161
|
-
usdc_domain_version="2",
|
|
162
|
-
rpc_url="https://rpc.monad.xyz",
|
|
163
|
-
enabled=True,
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
# =============================================================================
|
|
167
|
-
# Register all EVM networks
|
|
168
|
-
# =============================================================================
|
|
169
|
-
|
|
170
|
-
_EVM_NETWORKS = [
|
|
171
|
-
BASE,
|
|
172
|
-
ETHEREUM,
|
|
173
|
-
POLYGON,
|
|
174
|
-
ARBITRUM,
|
|
175
|
-
OPTIMISM,
|
|
176
|
-
AVALANCHE,
|
|
177
|
-
CELO,
|
|
178
|
-
HYPEREVM,
|
|
179
|
-
UNICHAIN,
|
|
180
|
-
MONAD,
|
|
181
|
-
]
|
|
182
|
-
|
|
183
|
-
for network in _EVM_NETWORKS:
|
|
184
|
-
register_network(network)
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
def get_usdc_domain_name(network_name: str) -> str:
|
|
188
|
-
"""
|
|
189
|
-
Get the correct EIP-712 domain name for USDC on a network.
|
|
190
|
-
|
|
191
|
-
Args:
|
|
192
|
-
network_name: Network identifier
|
|
193
|
-
|
|
194
|
-
Returns:
|
|
195
|
-
Domain name string ('USD Coin' or 'USDC')
|
|
196
|
-
"""
|
|
197
|
-
# Networks that use 'USDC' instead of 'USD Coin'
|
|
198
|
-
usdc_domain_networks = {"celo", "hyperevm", "unichain", "monad"}
|
|
199
|
-
|
|
200
|
-
if network_name.lower() in usdc_domain_networks:
|
|
201
|
-
return "USDC"
|
|
202
|
-
return "USD Coin"
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
def get_token_decimals(network_name: str) -> int:
|
|
206
|
-
"""
|
|
207
|
-
Get USDC token decimals for a network.
|
|
208
|
-
|
|
209
|
-
Args:
|
|
210
|
-
network_name: Network identifier
|
|
211
|
-
|
|
212
|
-
Returns:
|
|
213
|
-
Number of decimals (6 for all supported chains)
|
|
214
|
-
"""
|
|
215
|
-
return 6
|
|
1
|
+
"""
|
|
2
|
+
EVM network configurations.
|
|
3
|
+
|
|
4
|
+
This module defines configurations for all supported EVM-compatible chains.
|
|
5
|
+
Each chain uses ERC-3009 TransferWithAuthorization for USDC transfers.
|
|
6
|
+
|
|
7
|
+
Important EIP-712 domain considerations:
|
|
8
|
+
- Most chains use 'USD Coin' as the domain name
|
|
9
|
+
- Celo, HyperEVM, Unichain, Monad use 'USDC' as the domain name
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from uvd_x402_sdk.networks.base import (
|
|
13
|
+
NetworkConfig,
|
|
14
|
+
NetworkType,
|
|
15
|
+
register_network,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# =============================================================================
|
|
19
|
+
# EVM Networks Configuration
|
|
20
|
+
# =============================================================================
|
|
21
|
+
|
|
22
|
+
# Base (Layer 2)
|
|
23
|
+
BASE = NetworkConfig(
|
|
24
|
+
name="base",
|
|
25
|
+
display_name="Base",
|
|
26
|
+
network_type=NetworkType.EVM,
|
|
27
|
+
chain_id=8453,
|
|
28
|
+
usdc_address="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
29
|
+
usdc_decimals=6,
|
|
30
|
+
usdc_domain_name="USD Coin",
|
|
31
|
+
usdc_domain_version="2",
|
|
32
|
+
rpc_url="https://mainnet.base.org",
|
|
33
|
+
enabled=True,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# Ethereum Mainnet
|
|
37
|
+
ETHEREUM = NetworkConfig(
|
|
38
|
+
name="ethereum",
|
|
39
|
+
display_name="Ethereum",
|
|
40
|
+
network_type=NetworkType.EVM,
|
|
41
|
+
chain_id=1,
|
|
42
|
+
usdc_address="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
43
|
+
usdc_decimals=6,
|
|
44
|
+
usdc_domain_name="USD Coin",
|
|
45
|
+
usdc_domain_version="2",
|
|
46
|
+
rpc_url="https://eth.llamarpc.com",
|
|
47
|
+
enabled=True,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
# Polygon (PoS)
|
|
51
|
+
POLYGON = NetworkConfig(
|
|
52
|
+
name="polygon",
|
|
53
|
+
display_name="Polygon",
|
|
54
|
+
network_type=NetworkType.EVM,
|
|
55
|
+
chain_id=137,
|
|
56
|
+
usdc_address="0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
|
|
57
|
+
usdc_decimals=6,
|
|
58
|
+
usdc_domain_name="USD Coin",
|
|
59
|
+
usdc_domain_version="2",
|
|
60
|
+
rpc_url="https://polygon-rpc.com",
|
|
61
|
+
enabled=True,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Arbitrum One
|
|
65
|
+
ARBITRUM = NetworkConfig(
|
|
66
|
+
name="arbitrum",
|
|
67
|
+
display_name="Arbitrum One",
|
|
68
|
+
network_type=NetworkType.EVM,
|
|
69
|
+
chain_id=42161,
|
|
70
|
+
usdc_address="0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
|
71
|
+
usdc_decimals=6,
|
|
72
|
+
usdc_domain_name="USD Coin",
|
|
73
|
+
usdc_domain_version="2",
|
|
74
|
+
rpc_url="https://arb1.arbitrum.io/rpc",
|
|
75
|
+
enabled=True,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
# Optimism
|
|
79
|
+
OPTIMISM = NetworkConfig(
|
|
80
|
+
name="optimism",
|
|
81
|
+
display_name="Optimism",
|
|
82
|
+
network_type=NetworkType.EVM,
|
|
83
|
+
chain_id=10,
|
|
84
|
+
usdc_address="0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
|
|
85
|
+
usdc_decimals=6,
|
|
86
|
+
usdc_domain_name="USD Coin",
|
|
87
|
+
usdc_domain_version="2",
|
|
88
|
+
rpc_url="https://mainnet.optimism.io",
|
|
89
|
+
enabled=True,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# Avalanche C-Chain
|
|
93
|
+
AVALANCHE = NetworkConfig(
|
|
94
|
+
name="avalanche",
|
|
95
|
+
display_name="Avalanche C-Chain",
|
|
96
|
+
network_type=NetworkType.EVM,
|
|
97
|
+
chain_id=43114,
|
|
98
|
+
usdc_address="0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
99
|
+
usdc_decimals=6,
|
|
100
|
+
usdc_domain_name="USD Coin",
|
|
101
|
+
usdc_domain_version="2",
|
|
102
|
+
rpc_url="https://avalanche-c-chain-rpc.publicnode.com",
|
|
103
|
+
enabled=True,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Celo
|
|
107
|
+
# NOTE: Celo uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
108
|
+
CELO = NetworkConfig(
|
|
109
|
+
name="celo",
|
|
110
|
+
display_name="Celo",
|
|
111
|
+
network_type=NetworkType.EVM,
|
|
112
|
+
chain_id=42220,
|
|
113
|
+
usdc_address="0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
|
|
114
|
+
usdc_decimals=6,
|
|
115
|
+
usdc_domain_name="USDC", # Different from other chains!
|
|
116
|
+
usdc_domain_version="2",
|
|
117
|
+
rpc_url="https://forno.celo.org",
|
|
118
|
+
enabled=True,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# HyperEVM (Hyperliquid)
|
|
122
|
+
# NOTE: HyperEVM uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
123
|
+
HYPEREVM = NetworkConfig(
|
|
124
|
+
name="hyperevm",
|
|
125
|
+
display_name="HyperEVM",
|
|
126
|
+
network_type=NetworkType.EVM,
|
|
127
|
+
chain_id=999,
|
|
128
|
+
usdc_address="0xb88339CB7199b77E23DB6E890353E22632Ba630f",
|
|
129
|
+
usdc_decimals=6,
|
|
130
|
+
usdc_domain_name="USDC", # Different from other chains!
|
|
131
|
+
usdc_domain_version="2",
|
|
132
|
+
rpc_url="https://rpc.hyperliquid.xyz/evm",
|
|
133
|
+
enabled=True,
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
# Unichain
|
|
137
|
+
# NOTE: Unichain uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
138
|
+
UNICHAIN = NetworkConfig(
|
|
139
|
+
name="unichain",
|
|
140
|
+
display_name="Unichain",
|
|
141
|
+
network_type=NetworkType.EVM,
|
|
142
|
+
chain_id=130,
|
|
143
|
+
usdc_address="0x078d782b760474a361dda0af3839290b0ef57ad6",
|
|
144
|
+
usdc_decimals=6,
|
|
145
|
+
usdc_domain_name="USDC", # Different from other chains!
|
|
146
|
+
usdc_domain_version="2",
|
|
147
|
+
rpc_url="https://unichain-rpc.publicnode.com",
|
|
148
|
+
enabled=True,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# Monad
|
|
152
|
+
# NOTE: Monad uses 'USDC' (not 'USD Coin') for EIP-712 domain name
|
|
153
|
+
MONAD = NetworkConfig(
|
|
154
|
+
name="monad",
|
|
155
|
+
display_name="Monad",
|
|
156
|
+
network_type=NetworkType.EVM,
|
|
157
|
+
chain_id=143,
|
|
158
|
+
usdc_address="0x754704bc059f8c67012fed69bc8a327a5aafb603",
|
|
159
|
+
usdc_decimals=6,
|
|
160
|
+
usdc_domain_name="USDC", # Different from other chains!
|
|
161
|
+
usdc_domain_version="2",
|
|
162
|
+
rpc_url="https://rpc.monad.xyz",
|
|
163
|
+
enabled=True,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# =============================================================================
|
|
167
|
+
# Register all EVM networks
|
|
168
|
+
# =============================================================================
|
|
169
|
+
|
|
170
|
+
_EVM_NETWORKS = [
|
|
171
|
+
BASE,
|
|
172
|
+
ETHEREUM,
|
|
173
|
+
POLYGON,
|
|
174
|
+
ARBITRUM,
|
|
175
|
+
OPTIMISM,
|
|
176
|
+
AVALANCHE,
|
|
177
|
+
CELO,
|
|
178
|
+
HYPEREVM,
|
|
179
|
+
UNICHAIN,
|
|
180
|
+
MONAD,
|
|
181
|
+
]
|
|
182
|
+
|
|
183
|
+
for network in _EVM_NETWORKS:
|
|
184
|
+
register_network(network)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def get_usdc_domain_name(network_name: str) -> str:
|
|
188
|
+
"""
|
|
189
|
+
Get the correct EIP-712 domain name for USDC on a network.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
network_name: Network identifier
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
Domain name string ('USD Coin' or 'USDC')
|
|
196
|
+
"""
|
|
197
|
+
# Networks that use 'USDC' instead of 'USD Coin'
|
|
198
|
+
usdc_domain_networks = {"celo", "hyperevm", "unichain", "monad"}
|
|
199
|
+
|
|
200
|
+
if network_name.lower() in usdc_domain_networks:
|
|
201
|
+
return "USDC"
|
|
202
|
+
return "USD Coin"
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def get_token_decimals(network_name: str) -> int:
|
|
206
|
+
"""
|
|
207
|
+
Get USDC token decimals for a network.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
network_name: Network identifier
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
Number of decimals (6 for all supported chains)
|
|
214
|
+
"""
|
|
215
|
+
return 6
|