@aztec/aztec 0.0.0-test.1 → 0.0.1-commit.1142ef1

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.
Files changed (156) hide show
  1. package/README.md +1 -1
  2. package/dest/bin/index.d.ts +1 -1
  3. package/dest/bin/index.js +23 -12
  4. package/dest/cli/aztec_start_action.d.ts +1 -1
  5. package/dest/cli/aztec_start_action.d.ts.map +1 -1
  6. package/dest/cli/aztec_start_action.js +40 -40
  7. package/dest/cli/aztec_start_options.d.ts +5 -3
  8. package/dest/cli/aztec_start_options.d.ts.map +1 -1
  9. package/dest/cli/aztec_start_options.js +143 -224
  10. package/dest/cli/cli.d.ts +1 -1
  11. package/dest/cli/cli.d.ts.map +1 -1
  12. package/dest/cli/cli.js +12 -7
  13. package/dest/cli/cmds/migrate_ha_db.d.ts +3 -0
  14. package/dest/cli/cmds/migrate_ha_db.d.ts.map +1 -0
  15. package/dest/cli/cmds/migrate_ha_db.js +27 -0
  16. package/dest/cli/cmds/start_archiver.d.ts +1 -1
  17. package/dest/cli/cmds/start_archiver.d.ts.map +1 -1
  18. package/dest/cli/cmds/start_archiver.js +20 -12
  19. package/dest/cli/cmds/start_bot.d.ts +4 -7
  20. package/dest/cli/cmds/start_bot.d.ts.map +1 -1
  21. package/dest/cli/cmds/start_bot.js +25 -14
  22. package/dest/cli/cmds/start_node.d.ts +2 -2
  23. package/dest/cli/cmds/start_node.d.ts.map +1 -1
  24. package/dest/cli/cmds/start_node.js +68 -81
  25. package/dest/cli/cmds/start_p2p_bootstrap.d.ts +1 -1
  26. package/dest/cli/cmds/start_p2p_bootstrap.d.ts.map +1 -1
  27. package/dest/cli/cmds/start_p2p_bootstrap.js +9 -4
  28. package/dest/cli/cmds/start_prover_agent.d.ts +1 -1
  29. package/dest/cli/cmds/start_prover_agent.d.ts.map +1 -1
  30. package/dest/cli/cmds/start_prover_agent.js +33 -4
  31. package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
  32. package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
  33. package/dest/cli/cmds/start_prover_broker.js +10 -4
  34. package/dest/cli/cmds/start_prover_node.d.ts +1 -1
  35. package/dest/cli/cmds/start_prover_node.d.ts.map +1 -1
  36. package/dest/cli/cmds/start_prover_node.js +44 -46
  37. package/dest/cli/cmds/start_txe.d.ts +1 -1
  38. package/dest/cli/index.d.ts +1 -1
  39. package/dest/cli/preload_crs.d.ts +3 -0
  40. package/dest/cli/preload_crs.d.ts.map +1 -0
  41. package/dest/cli/preload_crs.js +6 -0
  42. package/dest/cli/release_version.d.ts +2 -0
  43. package/dest/cli/release_version.d.ts.map +1 -0
  44. package/dest/cli/release_version.js +14 -0
  45. package/dest/cli/util.d.ts +38 -7
  46. package/dest/cli/util.d.ts.map +1 -1
  47. package/dest/cli/util.js +198 -28
  48. package/dest/cli/versioning.d.ts +1 -1
  49. package/dest/cli/versioning.js +3 -3
  50. package/dest/examples/token.d.ts +1 -1
  51. package/dest/examples/token.js +31 -18
  52. package/dest/examples/util.d.ts +5 -6
  53. package/dest/examples/util.d.ts.map +1 -1
  54. package/dest/examples/util.js +5 -6
  55. package/dest/index.d.ts +2 -2
  56. package/dest/index.d.ts.map +1 -1
  57. package/dest/index.js +1 -1
  58. package/dest/local-network/banana_fpc.d.ts +10 -0
  59. package/dest/local-network/banana_fpc.d.ts.map +1 -0
  60. package/dest/{sandbox → local-network}/banana_fpc.js +20 -22
  61. package/dest/local-network/index.d.ts +4 -0
  62. package/dest/local-network/index.d.ts.map +1 -0
  63. package/dest/local-network/index.js +3 -0
  64. package/dest/local-network/local-network.d.ts +72 -0
  65. package/dest/local-network/local-network.d.ts.map +1 -0
  66. package/dest/local-network/local-network.js +195 -0
  67. package/dest/local-network/sponsored_fpc.d.ts +5 -0
  68. package/dest/local-network/sponsored_fpc.d.ts.map +1 -0
  69. package/dest/local-network/sponsored_fpc.js +18 -0
  70. package/dest/mnemonic.d.ts +1 -1
  71. package/dest/splash.d.ts +1 -1
  72. package/dest/testing/anvil_test_watcher.d.ts +34 -0
  73. package/dest/testing/anvil_test_watcher.d.ts.map +1 -0
  74. package/dest/testing/anvil_test_watcher.js +144 -0
  75. package/dest/testing/cheat_codes.d.ts +41 -0
  76. package/dest/testing/cheat_codes.d.ts.map +1 -0
  77. package/dest/testing/cheat_codes.js +62 -0
  78. package/dest/testing/epoch_test_settler.d.ts +17 -0
  79. package/dest/testing/epoch_test_settler.d.ts.map +1 -0
  80. package/dest/testing/epoch_test_settler.js +52 -0
  81. package/dest/testing/index.d.ts +5 -0
  82. package/dest/testing/index.d.ts.map +1 -0
  83. package/dest/testing/index.js +4 -0
  84. package/package.json +55 -45
  85. package/scripts/aztec.sh +63 -0
  86. package/scripts/compile.sh +44 -0
  87. package/scripts/extract_function.js +47 -0
  88. package/scripts/flamegraph.sh +59 -0
  89. package/scripts/init.sh +35 -0
  90. package/scripts/new.sh +59 -0
  91. package/scripts/setup_project.sh +31 -0
  92. package/src/bin/index.ts +28 -12
  93. package/src/cli/aztec_start_action.ts +36 -38
  94. package/src/cli/aztec_start_options.ts +159 -222
  95. package/src/cli/cli.ts +20 -11
  96. package/src/cli/cmds/migrate_ha_db.ts +43 -0
  97. package/src/cli/cmds/start_archiver.ts +21 -15
  98. package/src/cli/cmds/start_bot.ts +36 -13
  99. package/src/cli/cmds/start_node.ts +91 -86
  100. package/src/cli/cmds/start_p2p_bootstrap.ts +12 -4
  101. package/src/cli/cmds/start_prover_agent.ts +24 -12
  102. package/src/cli/cmds/start_prover_broker.ts +24 -4
  103. package/src/cli/cmds/start_prover_node.ts +54 -51
  104. package/src/cli/preload_crs.ts +7 -0
  105. package/src/cli/release_version.ts +21 -0
  106. package/src/cli/util.ts +208 -34
  107. package/src/cli/versioning.ts +3 -3
  108. package/src/examples/token.ts +23 -19
  109. package/src/examples/util.ts +6 -8
  110. package/src/index.ts +5 -6
  111. package/src/{sandbox → local-network}/banana_fpc.ts +21 -26
  112. package/src/local-network/index.ts +7 -0
  113. package/src/local-network/local-network.ts +238 -0
  114. package/src/local-network/sponsored_fpc.ts +26 -0
  115. package/src/testing/anvil_test_watcher.ts +166 -0
  116. package/src/testing/cheat_codes.ts +79 -0
  117. package/src/testing/epoch_test_settler.ts +59 -0
  118. package/src/testing/index.ts +4 -0
  119. package/dest/cli/chain_l2_config.d.ts +0 -19
  120. package/dest/cli/chain_l2_config.d.ts.map +0 -1
  121. package/dest/cli/chain_l2_config.js +0 -56
  122. package/dest/cli/cmds/start_blob_sink.d.ts +0 -3
  123. package/dest/cli/cmds/start_blob_sink.d.ts.map +0 -1
  124. package/dest/cli/cmds/start_blob_sink.js +0 -17
  125. package/dest/cli/cmds/start_faucet.d.ts +0 -4
  126. package/dest/cli/cmds/start_faucet.d.ts.map +0 -1
  127. package/dest/cli/cmds/start_faucet.js +0 -20
  128. package/dest/cli/cmds/start_pxe.d.ts +0 -16
  129. package/dest/cli/cmds/start_pxe.d.ts.map +0 -1
  130. package/dest/cli/cmds/start_pxe.js +0 -95
  131. package/dest/cli/get_l1_config.d.ts +0 -7
  132. package/dest/cli/get_l1_config.d.ts.map +0 -1
  133. package/dest/cli/get_l1_config.js +0 -13
  134. package/dest/sandbox/banana_fpc.d.ts +0 -11
  135. package/dest/sandbox/banana_fpc.d.ts.map +0 -1
  136. package/dest/sandbox/index.d.ts +0 -5
  137. package/dest/sandbox/index.d.ts.map +0 -1
  138. package/dest/sandbox/index.js +0 -4
  139. package/dest/sandbox/sandbox.d.ts +0 -76
  140. package/dest/sandbox/sandbox.d.ts.map +0 -1
  141. package/dest/sandbox/sandbox.js +0 -181
  142. package/dest/sandbox/sponsored_fee_payment_method.d.ts +0 -23
  143. package/dest/sandbox/sponsored_fee_payment_method.d.ts.map +0 -1
  144. package/dest/sandbox/sponsored_fee_payment_method.js +0 -36
  145. package/dest/sandbox/sponsored_fpc.d.ts +0 -6
  146. package/dest/sandbox/sponsored_fpc.d.ts.map +0 -1
  147. package/dest/sandbox/sponsored_fpc.js +0 -26
  148. package/src/cli/chain_l2_config.ts +0 -74
  149. package/src/cli/cmds/start_blob_sink.ts +0 -31
  150. package/src/cli/cmds/start_faucet.ts +0 -34
  151. package/src/cli/cmds/start_pxe.ts +0 -129
  152. package/src/cli/get_l1_config.ts +0 -18
  153. package/src/sandbox/index.ts +0 -5
  154. package/src/sandbox/sandbox.ts +0 -229
  155. package/src/sandbox/sponsored_fee_payment_method.ts +0 -46
  156. package/src/sandbox/sponsored_fpc.ts +0 -38
@@ -1,18 +1,25 @@
1
1
  import { archiverConfigMappings } from '@aztec/archiver/config';
2
- import { faucetConfigMapping } from '@aztec/aztec-faucet/config';
3
- import { sequencerClientConfigMappings } from '@aztec/aztec-node/config';
4
- import { blobSinkConfigMappings } from '@aztec/blob-sink/server';
2
+ import { blobClientConfigMapping } from '@aztec/blob-client/client/config';
5
3
  import { botConfigMappings } from '@aztec/bot/config';
4
+ import { l1ContractsConfigMappings } from '@aztec/ethereum/config';
5
+ import { l1ContractAddressesMapping } from '@aztec/ethereum/l1-contract-addresses';
6
+ import { l1ReaderConfigMappings } from '@aztec/ethereum/l1-reader';
7
+ import { getKeys } from '@aztec/foundation/collection';
6
8
  import { booleanConfigHelper, isBooleanConfigValue, omitConfigMappings } from '@aztec/foundation/config';
9
+ import { dataConfigMappings } from '@aztec/kv-store/config';
10
+ import { sharedNodeConfigMappings } from '@aztec/node-lib/config';
7
11
  import { bootnodeConfigMappings, p2pConfigMappings } from '@aztec/p2p/config';
8
- import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/prover-client/broker';
12
+ import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/prover-client/broker/config';
9
13
  import { proverNodeConfigMappings } from '@aztec/prover-node/config';
10
14
  import { allPxeConfigMappings } from '@aztec/pxe/config';
11
- import { telemetryClientConfigMappings } from '@aztec/telemetry-client';
15
+ import { sequencerClientConfigMappings } from '@aztec/sequencer-client/config';
16
+ import { chainConfigMappings } from '@aztec/stdlib/config';
17
+ import { telemetryClientConfigMappings } from '@aztec/telemetry-client/config';
18
+ import { worldStateConfigMappings } from '@aztec/world-state/config';
12
19
  import { DefaultMnemonic } from '../mnemonic.js';
13
20
  export const getOptions = (namespace, configMappings)=>{
14
21
  const options = [];
15
- for (const [key, { env, defaultValue: def, parseEnv, description, printDefault }] of Object.entries(configMappings)){
22
+ for (const [key, { env, defaultValue: def, parseEnv, description, printDefault, fallback }] of Object.entries(configMappings)){
16
23
  if (universalOptions.includes(key)) {
17
24
  continue;
18
25
  }
@@ -22,132 +29,118 @@ export const getOptions = (namespace, configMappings)=>{
22
29
  description,
23
30
  defaultValue: def,
24
31
  printDefault,
25
- envVar: env,
32
+ env: env,
33
+ fallback,
26
34
  parseVal: parseEnv
27
35
  });
28
36
  }
29
37
  return options;
30
38
  };
39
+ const configToFlag = (flag, configMapping, overrideDefaultValue)=>{
40
+ if (!configMapping.isBoolean) {
41
+ flag += ' <value>';
42
+ }
43
+ const flagConfig = {
44
+ flag,
45
+ env: undefined,
46
+ defaultValue: undefined,
47
+ parseVal: configMapping.parseEnv,
48
+ ...configMapping
49
+ };
50
+ if (overrideDefaultValue !== undefined) {
51
+ flagConfig.defaultValue = overrideDefaultValue;
52
+ }
53
+ return flagConfig;
54
+ };
31
55
  // These are options used by multiple modules so should be inputted once
32
56
  export const universalOptions = [
33
- 'l1RpcUrls',
34
- 'l1ChainId',
35
- 'l1Contracts',
57
+ 'l1ConsensusHostUrls',
58
+ 'l1ConsensusHostApiKeys',
59
+ 'l1ConsensusHostApiKeyHeaders',
36
60
  'p2pEnabled',
37
- 'dataDirectory'
61
+ 'fishermanMode',
62
+ ...getKeys(chainConfigMappings),
63
+ ...getKeys(l1ContractsConfigMappings),
64
+ ...getKeys(l1ContractAddressesMapping),
65
+ ...getKeys(l1ReaderConfigMappings),
66
+ ...getKeys(dataConfigMappings),
67
+ ...getKeys(worldStateConfigMappings)
38
68
  ];
69
+ export const NETWORK_FLAG = 'network';
39
70
  // Define categories and options
40
71
  export const aztecStartOptions = {
41
- NETWORK: [
72
+ MISC: [
42
73
  {
43
- flag: '--network <value>',
74
+ flag: `--${NETWORK_FLAG} <value>`,
44
75
  description: 'Network to run Aztec on',
45
76
  defaultValue: undefined,
46
- envVar: 'NETWORK'
47
- }
77
+ env: 'NETWORK'
78
+ },
79
+ configToFlag('--auto-update', sharedNodeConfigMappings.autoUpdate),
80
+ configToFlag('--auto-update-url', sharedNodeConfigMappings.autoUpdateUrl),
81
+ configToFlag('--sync-mode', sharedNodeConfigMappings.syncMode),
82
+ configToFlag('--snapshots-urls', sharedNodeConfigMappings.snapshotsUrls),
83
+ configToFlag('--fisherman-mode', sharedNodeConfigMappings.fishermanMode)
48
84
  ],
49
- SANDBOX: [
85
+ LOCAL_NETWORK: [
50
86
  {
51
- flag: '--sandbox',
52
- description: 'Starts Aztec Sandbox',
87
+ flag: '--local-network',
88
+ description: 'Starts Aztec Local Network',
53
89
  defaultValue: undefined,
54
- envVar: undefined
55
- },
56
- {
57
- flag: '--sandbox.testAccounts',
58
- description: 'Deploy test accounts on sandbox start',
59
- envVar: 'TEST_ACCOUNTS',
60
- ...booleanConfigHelper(true)
90
+ env: undefined
61
91
  },
62
92
  {
63
- flag: '--sandbox.noPXE',
64
- description: 'Do not expose PXE service on sandbox start',
65
- envVar: 'NO_PXE',
66
- ...booleanConfigHelper()
93
+ flag: '--local-network.l1Mnemonic <value>',
94
+ description: 'Mnemonic for L1 accounts. Will be used ',
95
+ defaultValue: DefaultMnemonic,
96
+ env: 'MNEMONIC'
67
97
  }
68
98
  ],
69
99
  API: [
70
100
  {
71
101
  flag: '--port <value>',
72
- description: 'Port to run the Aztec Services on on',
102
+ description: 'Port to run the Aztec Services on',
73
103
  defaultValue: 8080,
74
- envVar: 'AZTEC_PORT',
104
+ env: 'AZTEC_PORT',
105
+ parseVal: (val)=>parseInt(val, 10)
106
+ },
107
+ {
108
+ flag: '--admin-port <value>',
109
+ description: 'Port to run admin APIs of Aztec Services on',
110
+ defaultValue: 8880,
111
+ env: 'AZTEC_ADMIN_PORT',
75
112
  parseVal: (val)=>parseInt(val, 10)
76
113
  },
77
114
  {
78
115
  flag: '--api-prefix <value>',
79
116
  description: 'Prefix for API routes on any service that is started',
80
117
  defaultValue: '',
81
- envVar: 'API_PREFIX'
118
+ env: 'API_PREFIX'
82
119
  }
83
120
  ],
84
121
  ETHEREUM: [
85
- {
86
- flag: '--l1-rpc-urls <value>',
87
- description: 'List of URLs of the Ethereum RPC nodes that services will connect to (comma separated)',
88
- defaultValue: [
89
- 'http://localhost:8545'
90
- ],
91
- envVar: 'ETHEREUM_HOSTS',
92
- parseVal: (val)=>val.split(',').map((url)=>url.trim())
93
- },
94
- {
95
- flag: '--l1-chain-id <value>',
96
- description: 'The L1 chain ID',
97
- defaultValue: 31337,
98
- envVar: 'L1_CHAIN_ID',
99
- parseVal: (val)=>parseInt(val, 10)
100
- },
101
- {
102
- flag: '--l1-mnemonic <value>',
103
- description: 'Mnemonic for L1 accounts. Will be used if no publisher private keys are provided',
104
- defaultValue: DefaultMnemonic,
105
- envVar: 'MNEMONIC'
106
- }
122
+ configToFlag('--l1-chain-id', l1ReaderConfigMappings.l1ChainId),
123
+ // Do not set default for CLI: keep undefined unless provided via flag or env
124
+ configToFlag('--l1-rpc-urls', {
125
+ ...l1ReaderConfigMappings.l1RpcUrls,
126
+ defaultValue: undefined
127
+ }),
128
+ configToFlag('--l1-consensus-host-urls', blobClientConfigMapping.l1ConsensusHostUrls),
129
+ configToFlag('--l1-consensus-host-api-keys', blobClientConfigMapping.l1ConsensusHostApiKeys),
130
+ configToFlag('--l1-consensus-host-api-key-headers', blobClientConfigMapping.l1ConsensusHostApiKeyHeaders)
107
131
  ],
108
- 'L1 CONTRACT ADDRESSES': [
109
- {
110
- flag: '--rollup-address <value>',
111
- description: 'The deployed L1 rollup contract address',
112
- defaultValue: undefined,
113
- envVar: 'ROLLUP_CONTRACT_ADDRESS'
114
- },
115
- {
116
- flag: '--registry-address <value>',
117
- description: 'The deployed L1 registry contract address',
118
- defaultValue: undefined,
119
- envVar: 'REGISTRY_CONTRACT_ADDRESS'
120
- },
121
- {
122
- flag: '--inbox-address <value>',
123
- description: 'The deployed L1 -> L2 inbox contract address',
124
- defaultValue: undefined,
125
- envVar: 'INBOX_CONTRACT_ADDRESS'
126
- },
127
- {
128
- flag: '--outbox-address <value>',
129
- description: 'The deployed L2 -> L1 outbox contract address',
130
- defaultValue: undefined,
131
- envVar: 'OUTBOX_CONTRACT_ADDRESS'
132
- },
133
- {
134
- flag: '--fee-juice-address <value>',
135
- description: 'The deployed L1 Fee Juice contract address',
136
- defaultValue: undefined,
137
- envVar: 'FEE_JUICE_CONTRACT_ADDRESS'
138
- },
139
- {
140
- flag: '--staking-asset-address <value>',
141
- description: 'The deployed L1 Staking Asset contract address',
142
- defaultValue: undefined,
143
- envVar: 'STAKING_ASSET_CONTRACT_ADDRESS'
144
- },
145
- {
146
- flag: '--fee-juice-portal-address <value>',
147
- description: 'The deployed L1 Fee Juice portal contract address',
148
- defaultValue: undefined,
149
- envVar: 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS'
150
- }
132
+ 'L1 CONTRACTS': [
133
+ configToFlag('--registry-address', l1ContractAddressesMapping.registryAddress),
134
+ configToFlag('--rollup-version', chainConfigMappings.rollupVersion)
135
+ ],
136
+ STORAGE: [
137
+ configToFlag('--data-directory', dataConfigMappings.dataDirectory),
138
+ configToFlag('--data-store-map-size-kb', dataConfigMappings.dataStoreMapSizeKb)
139
+ ],
140
+ 'WORLD STATE': [
141
+ configToFlag('--world-state-data-directory', worldStateConfigMappings.worldStateDataDirectory),
142
+ configToFlag('--world-state-db-map-size-kb', worldStateConfigMappings.worldStateDbMapSizeKb),
143
+ configToFlag('--world-state-block-history', worldStateConfigMappings.worldStateBlockHistory)
151
144
  ],
152
145
  // We can't easily auto-generate node options as they're parts of modules defined below
153
146
  'AZTEC NODE': [
@@ -155,127 +148,48 @@ export const aztecStartOptions = {
155
148
  flag: '--node',
156
149
  description: 'Starts Aztec Node with options',
157
150
  defaultValue: undefined,
158
- envVar: undefined
159
- },
160
- {
161
- flag: '--data-directory <value>',
162
- description: 'Where to store data. If not set, will store temporarily',
163
- defaultValue: undefined,
164
- envVar: 'DATA_DIRECTORY'
165
- },
166
- {
167
- flag: '--node.archiverUrl <value>',
168
- description: 'URL for an archiver service',
169
- defaultValue: undefined,
170
- envVar: 'ARCHIVER_URL'
171
- },
172
- {
173
- flag: '--node.deployAztecContracts',
174
- description: 'Deploys L1 Aztec contracts before starting the node. Needs mnemonic or private key to be set.',
175
- envVar: 'DEPLOY_AZTEC_CONTRACTS',
176
- defaultValue: undefined
177
- },
178
- {
179
- flag: '--node.deployAztecContractsSalt <value>',
180
- description: 'Numeric salt for deploying L1 Aztec contracts before starting the node. Needs mnemonic or private key to be set. Implies --node.deployAztecContracts.',
181
- envVar: 'DEPLOY_AZTEC_CONTRACTS_SALT',
182
- defaultValue: undefined,
183
- parseVal: (val)=>val ? parseInt(val) : undefined
184
- },
185
- {
186
- flag: '--node.assumeProvenThroughBlockNumber <value>',
187
- description: 'Cheats the rollup contract into assuming every block until this one is proven. Useful for speeding up bootstraps.',
188
- envVar: 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER',
189
- parseVal: (val)=>parseInt(val, 10),
190
- defaultValue: 0
191
- },
192
- {
193
- flag: '--node.publisherPrivateKey <value>',
194
- description: 'Private key of account for publishing L1 contracts',
195
- defaultValue: undefined,
196
- envVar: 'L1_PRIVATE_KEY'
197
- },
198
- {
199
- flag: '--node.worldStateBlockCheckIntervalMS <value>',
200
- description: 'Frequency in which to check for blocks in ms',
201
- defaultValue: 100,
202
- envVar: 'WS_BLOCK_CHECK_INTERVAL_MS',
203
- parseVal: (val)=>parseInt(val, 10)
204
- },
205
- {
206
- flag: '--node.testAccounts',
207
- description: 'Populate genesis state with initial fee juice for test accounts',
208
- envVar: 'TEST_ACCOUNTS',
209
- ...booleanConfigHelper()
151
+ env: undefined
210
152
  }
211
153
  ],
212
- 'P2P SUBSYSTEM': [
213
- {
214
- flag: '--p2p-enabled',
215
- description: 'Enable P2P subsystem',
216
- envVar: 'P2P_ENABLED',
217
- ...booleanConfigHelper()
218
- },
219
- ...getOptions('p2p', p2pConfigMappings)
220
- ],
221
- TELEMETRY: [
222
- ...getOptions('tel', telemetryClientConfigMappings)
223
- ],
224
- PXE: [
225
- {
226
- flag: '--pxe',
227
- description: 'Starts Aztec PXE with options',
228
- defaultValue: undefined,
229
- envVar: undefined
230
- },
231
- ...getOptions('pxe', allPxeConfigMappings)
232
- ],
233
154
  ARCHIVER: [
234
155
  {
235
156
  flag: '--archiver',
236
157
  description: 'Starts Aztec Archiver with options',
237
158
  defaultValue: undefined,
238
- envVar: undefined
159
+ env: undefined
239
160
  },
240
- // filter out archiverUrl as it's passed separately in --node & --prover-node
241
- ...getOptions('archiver', archiverConfigMappings).filter((opt)=>!opt.flag.includes('archiverUrl'))
161
+ ...getOptions('archiver', omitConfigMappings(archiverConfigMappings, Object.keys(l1ContractsConfigMappings)))
242
162
  ],
243
163
  SEQUENCER: [
244
164
  {
245
165
  flag: '--sequencer',
246
166
  description: 'Starts Aztec Sequencer with options',
247
167
  defaultValue: undefined,
248
- envVar: undefined
249
- },
250
- ...getOptions('sequencer', sequencerClientConfigMappings)
251
- ],
252
- BLOB_SINK: [
253
- {
254
- flag: '--blob-sink',
255
- description: 'Starts Aztec Blob Sink with options',
256
- defaultValue: undefined,
257
- envVar: undefined
258
- },
259
- ...getOptions('blobSink', blobSinkConfigMappings)
168
+ env: undefined
169
+ },
170
+ ...getOptions('sequencer', omitConfigMappings(sequencerClientConfigMappings, [
171
+ 'fakeProcessingDelayPerTxMs',
172
+ 'fakeThrowAfterProcessingTxCount',
173
+ 'skipCollectingAttestations',
174
+ 'skipInvalidateBlockAsProposer',
175
+ 'blobSinkMapSizeKb'
176
+ ]))
260
177
  ],
261
178
  'PROVER NODE': [
262
179
  {
263
180
  flag: '--prover-node',
264
181
  description: 'Starts Aztec Prover Node with options',
265
182
  defaultValue: undefined,
266
- envVar: undefined
267
- },
268
- {
269
- flag: '--proverNode.archiverUrl <value>',
270
- description: 'URL for an archiver service',
271
- defaultValue: undefined,
272
- envVar: 'ARCHIVER_URL'
183
+ env: undefined
273
184
  },
274
185
  ...getOptions('proverNode', omitConfigMappings(proverNodeConfigMappings, [
275
186
  // filter out options passed separately
276
- ...Object.keys(archiverConfigMappings),
277
- ...Object.keys(proverBrokerConfigMappings),
278
- ...Object.keys(proverAgentConfigMappings)
187
+ ...getKeys(archiverConfigMappings),
188
+ ...getKeys(proverBrokerConfigMappings),
189
+ ...getKeys(proverAgentConfigMappings),
190
+ ...getKeys(p2pConfigMappings),
191
+ ...getKeys(worldStateConfigMappings),
192
+ ...getKeys(sharedNodeConfigMappings)
279
193
  ]))
280
194
  ],
281
195
  'PROVER BROKER': [
@@ -283,7 +197,7 @@ export const aztecStartOptions = {
283
197
  flag: '--prover-broker',
284
198
  description: 'Starts Aztec proving job broker',
285
199
  defaultValue: undefined,
286
- envVar: undefined
200
+ env: undefined
287
201
  },
288
202
  ...getOptions('proverBroker', // filter out archiver options from prover node options as they're passed separately in --archiver
289
203
  proverBrokerConfigMappings)
@@ -293,56 +207,61 @@ export const aztecStartOptions = {
293
207
  flag: '--prover-agent',
294
208
  description: 'Starts Aztec Prover Agent with options',
295
209
  defaultValue: undefined,
296
- envVar: undefined
210
+ env: undefined
297
211
  },
298
212
  ...getOptions('proverAgent', proverAgentConfigMappings)
299
213
  ],
214
+ 'P2P SUBSYSTEM': [
215
+ {
216
+ flag: '--p2p-enabled [value]',
217
+ description: 'Enable P2P subsystem',
218
+ env: 'P2P_ENABLED',
219
+ ...booleanConfigHelper()
220
+ },
221
+ ...getOptions('p2p', p2pConfigMappings)
222
+ ],
300
223
  'P2P BOOTSTRAP': [
301
224
  {
302
225
  flag: '--p2p-bootstrap',
303
226
  description: 'Starts Aztec P2P Bootstrap with options',
304
227
  defaultValue: undefined,
305
- envVar: undefined
306
- },
307
- ...getOptions('p2pBootstrap', bootnodeConfigMappings)
228
+ env: undefined
229
+ },
230
+ ...getOptions('p2pBootstrap', omitConfigMappings(bootnodeConfigMappings, [
231
+ 'p2pIp',
232
+ 'p2pPort',
233
+ 'peerIdPrivateKey',
234
+ 'bootstrapNodes',
235
+ 'listenAddress'
236
+ ]))
237
+ ],
238
+ TELEMETRY: [
239
+ ...getOptions('tel', telemetryClientConfigMappings)
308
240
  ],
309
241
  BOT: [
310
242
  {
311
243
  flag: '--bot',
312
244
  description: 'Starts Aztec Bot with options',
313
245
  defaultValue: undefined,
314
- envVar: undefined
246
+ env: undefined
315
247
  },
316
248
  ...getOptions('bot', botConfigMappings)
317
249
  ],
250
+ PXE: [
251
+ {
252
+ flag: '--pxe',
253
+ description: 'Starts Aztec PXE with options',
254
+ defaultValue: undefined,
255
+ env: undefined
256
+ },
257
+ ...getOptions('pxe', allPxeConfigMappings)
258
+ ],
318
259
  TXE: [
319
260
  {
320
261
  flag: '--txe',
321
262
  description: 'Starts Aztec TXE with options',
322
263
  defaultValue: undefined,
323
- envVar: undefined
264
+ env: undefined
324
265
  }
325
- ],
326
- FAUCET: [
327
- {
328
- flag: '--faucet',
329
- description: 'Starts the Aztec faucet',
330
- defaultValue: undefined,
331
- envVar: undefined
332
- },
333
- {
334
- flag: '--faucet.apiServer',
335
- description: 'Starts a simple HTTP server to access the faucet',
336
- defaultValue: true,
337
- envVar: undefined
338
- },
339
- {
340
- flag: '--faucet.apiServerPort <value>',
341
- description: 'The port on which to start the api server on',
342
- defaultValue: 8080,
343
- envVar: undefined,
344
- parseVal: (val)=>parseInt(val, 10)
345
- },
346
- ...getOptions('faucet', faucetConfigMapping)
347
266
  ]
348
267
  };
package/dest/cli/cli.d.ts CHANGED
@@ -6,4 +6,4 @@ import { Command } from 'commander';
6
6
  * @param debugLogger - logger for logging debug messages.
7
7
  */
8
8
  export declare function injectAztecCommands(program: Command, userLog: LogFn, debugLogger: Logger): Command;
9
- //# sourceMappingURL=cli.d.ts.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUtwQzs7OztHQUlHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0E0Q2xHIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAmClG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA4ClG"}
package/dest/cli/cli.js CHANGED
@@ -20,14 +20,19 @@ import { addOptions, printAztecStartHelpText } from './util.js';
20
20
  program.configureHelp({
21
21
  sortSubcommands: true
22
22
  });
23
- program.addHelpText('after', `
23
+ if (process.env.AZTEC_SHELL_WRAPPER) {
24
+ program.addHelpText('after', `
25
+ Additional commands:
24
26
 
25
- Additional commands:
26
-
27
- test [options]: starts a dockerized TXE node via
28
- $ aztec start --txe
29
- then runs
30
- $ aztec-nargo test --silence-warnings --oracle-resolver=<TXE_ADDRESS> [options]
27
+ init [folder] [options] creates a new Aztec Noir project.
28
+ new <path> [options] creates a new Aztec Noir project in a new directory.
29
+ compile [options] compiles Aztec Noir contracts.
30
+ test [options] starts a TXE and runs "nargo test" using it as the oracle resolver.
31
31
  `);
32
+ }
33
+ program.command('preload-crs').description('Preload the points data needed for proving and verifying').action(async (options)=>{
34
+ const { preloadCrs } = await import('./preload_crs.js');
35
+ return await preloadCrs(options, userLog, debugLogger);
36
+ });
32
37
  return program;
33
38
  }
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function injectMigrateCommand(program: Command, log: (msg: string) => void): Command;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0ZV9oYV9kYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL21pZ3JhdGVfaGFfZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpDLHdCQUFnQixvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssSUFBSSxHQUFHLE9BQU8sQ0FzQzFGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate_ha_db.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/migrate_ha_db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAsC1F"}
@@ -0,0 +1,27 @@
1
+ import { runMigrations } from '@aztec/validator-ha-signer/migrations';
2
+ export function injectMigrateCommand(program, log) {
3
+ const migrateCommand = program.command('migrate-ha-db').description('Run validator-ha-signer database migrations');
4
+ migrateCommand.command('up').description('Apply pending migrations').requiredOption('--database-url <string>', 'PostgreSQL connection string', process.env.DATABASE_URL).option('--verbose', 'Enable verbose output', false).action(async (options)=>{
5
+ const migrations = await runMigrations(options.databaseUrl, {
6
+ direction: 'up',
7
+ verbose: options.verbose
8
+ });
9
+ if (migrations.length > 0) {
10
+ log(`Applied migrations: ${migrations.join(', ')}`);
11
+ } else {
12
+ log('No migrations to apply - schema is up to date');
13
+ }
14
+ });
15
+ migrateCommand.command('down').description('Rollback the last migration').requiredOption('--database-url <string>', 'PostgreSQL connection string', process.env.DATABASE_URL).option('--verbose', 'Enable verbose output', false).action(async (options)=>{
16
+ const migrations = await runMigrations(options.databaseUrl, {
17
+ direction: 'down',
18
+ verbose: options.verbose
19
+ });
20
+ if (migrations.length > 0) {
21
+ log(`Rolled back migrations: ${migrations.join(', ')}`);
22
+ } else {
23
+ log('No migrations to rollback');
24
+ }
25
+ });
26
+ return program;
27
+ }
@@ -6,4 +6,4 @@ export type { ArchiverConfig, DataStoreConfig };
6
6
  export declare function startArchiver(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers): Promise<{
7
7
  config: ArchiverConfig & DataStoreConfig;
8
8
  }>;
9
- //# sourceMappingURL=start_archiver.d.ts.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY21kcy9zdGFydF9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsS0FBSyxjQUFjLEVBSXBCLE1BQU0saUJBQWlCLENBQUM7QUFJekIsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFPbEYsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsQ0FBQztBQUVoRCxvQ0FBb0M7QUFDcEMsd0JBQXNCLGFBQWEsQ0FDakMsT0FBTyxFQUFFLEdBQUcsRUFDWixjQUFjLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLFFBQVEsRUFBRSxxQkFBcUIsR0FDOUIsT0FBTyxDQUFDO0lBQUUsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLENBQUE7Q0FBRSxDQUFDLENBbUN2RCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"start_archiver.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAA+C,MAAM,iBAAiB,CAAC;AAG7G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAQlF,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAEhD,oCAAoC;AACpC,wBAAsB,aAAa,CACjC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,GAAG,eAAe,CAAA;CAAE,CAAC,CAmCvD"}
1
+ {"version":3,"file":"start_archiver.d.ts","sourceRoot":"","sources":["../../../src/cli/cmds/start_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAOlF,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAEhD,oCAAoC;AACpC,wBAAsB,aAAa,CACjC,OAAO,EAAE,GAAG,EACZ,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EACvC,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,GAAG,eAAe,CAAA;CAAE,CAAC,CAmCvD"}
@@ -1,35 +1,43 @@
1
- import { Archiver, KVArchiverDataStore, archiverConfigMappings } from '@aztec/archiver';
2
- import { createLogger } from '@aztec/aztec.js';
3
- import { createBlobSinkClient } from '@aztec/blob-sink/client';
1
+ import { Archiver, KVArchiverDataStore, archiverConfigMappings, getArchiverConfigFromEnv } from '@aztec/archiver';
2
+ import { createLogger } from '@aztec/aztec.js/log';
3
+ import { blobClientConfigMapping, createBlobClient } from '@aztec/blob-client/client';
4
+ import { getL1Config } from '@aztec/cli/config';
4
5
  import { dataConfigMappings } from '@aztec/kv-store/config';
5
6
  import { createStore } from '@aztec/kv-store/lmdb-v2';
6
7
  import { ArchiverApiSchema } from '@aztec/stdlib/interfaces/server';
7
8
  import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
8
- import { getL1Config } from '../get_l1_config.js';
9
9
  import { extractRelevantOptions } from '../util.js';
10
10
  /** Starts a standalone archiver. */ export async function startArchiver(options, signalHandlers, services) {
11
- let archiverConfig = extractRelevantOptions(options, {
11
+ const envConfig = getArchiverConfigFromEnv();
12
+ const cliOptions = extractRelevantOptions(options, {
12
13
  ...archiverConfigMappings,
13
- ...dataConfigMappings
14
+ ...dataConfigMappings,
15
+ ...blobClientConfigMapping
14
16
  }, 'archiver');
17
+ let archiverConfig = {
18
+ ...envConfig,
19
+ ...cliOptions
20
+ };
21
+ archiverConfig.dataStoreMapSizeKb = archiverConfig.archiverStoreMapSizeKb ?? archiverConfig.dataStoreMapSizeKb;
15
22
  if (!archiverConfig.l1Contracts.registryAddress || archiverConfig.l1Contracts.registryAddress.isZero()) {
16
23
  throw new Error('L1 registry address is required to start an Archiver');
17
24
  }
18
- const { addresses, config } = await getL1Config(archiverConfig.l1Contracts.registryAddress, archiverConfig.l1RpcUrls, archiverConfig.l1ChainId);
25
+ const { addresses, config: l1Config } = await getL1Config(archiverConfig.l1Contracts.registryAddress, archiverConfig.l1RpcUrls, archiverConfig.l1ChainId);
19
26
  archiverConfig.l1Contracts = addresses;
20
27
  archiverConfig = {
21
28
  ...archiverConfig,
22
- ...config
29
+ ...l1Config
23
30
  };
24
31
  const storeLog = createLogger('archiver:lmdb');
25
32
  const store = await createStore('archiver', KVArchiverDataStore.SCHEMA_VERSION, archiverConfig, storeLog);
26
33
  const archiverStore = new KVArchiverDataStore(store, archiverConfig.maxLogs);
27
- const telemetry = initTelemetryClient(getTelemetryClientConfig());
28
- // TODO(https://github.com/AztecProtocol/aztec-packages/issues/10056): place CL url in config here
29
- const blobSinkClient = createBlobSinkClient();
34
+ const telemetry = await initTelemetryClient(getTelemetryClientConfig());
35
+ const blobClient = createBlobClient(archiverConfig, {
36
+ logger: createLogger('archiver:blob-client:client')
37
+ });
30
38
  const archiver = await Archiver.createAndSync(archiverConfig, archiverStore, {
31
39
  telemetry,
32
- blobSinkClient
40
+ blobClient
33
41
  }, true);
34
42
  services.archiver = [
35
43
  archiver,
@@ -1,11 +1,8 @@
1
1
  import type { NamespacedApiHandlers } from '@aztec/foundation/json-rpc/server';
2
2
  import type { LogFn } from '@aztec/foundation/log';
3
- import type { AztecNode, PXE } from '@aztec/stdlib/interfaces/client';
3
+ import { type AztecNode, type AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
4
4
  import type { TelemetryClient } from '@aztec/telemetry-client';
5
+ import { TestWallet } from '@aztec/test-wallet/server';
5
6
  export declare function startBot(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, userLog: LogFn): Promise<void>;
6
- export declare function addBot(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, deps: {
7
- pxe?: PXE;
8
- node?: AztecNode;
9
- telemetry: TelemetryClient;
10
- }): Promise<void>;
11
- //# sourceMappingURL=start_bot.d.ts.map
7
+ export declare function addBot(options: any, signalHandlers: (() => Promise<void>)[], services: NamespacedApiHandlers, wallet: TestWallet, aztecNode: AztecNode, telemetry: TelemetryClient, aztecNodeAdmin?: AztecNodeAdmin): Promise<void>;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfYm90LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NtZHMvc3RhcnRfYm90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0UsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHbkQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssY0FBYyxFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQzdHLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTS9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUt2RCx3QkFBc0IsUUFBUSxDQUM1QixPQUFPLEVBQUUsR0FBRyxFQUNaLGNBQWMsRUFBRSxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFDdkMsUUFBUSxFQUFFLHFCQUFxQixFQUMvQixPQUFPLEVBQUUsS0FBSyxpQkF1QmY7QUFFRCx3QkFBc0IsTUFBTSxDQUMxQixPQUFPLEVBQUUsR0FBRyxFQUNaLGNBQWMsRUFBRSxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFDdkMsUUFBUSxFQUFFLHFCQUFxQixFQUMvQixNQUFNLEVBQUUsVUFBVSxFQUNsQixTQUFTLEVBQUUsU0FBUyxFQUNwQixTQUFTLEVBQUUsZUFBZSxFQUMxQixjQUFjLENBQUMsRUFBRSxjQUFjLGlCQWtCaEMifQ==