@aztec/cli 0.7.9 → 0.8.4
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/README.md +19 -19
- package/dest/bin/index.js +0 -0
- package/dest/client.d.ts +9 -15
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +14 -22
- package/dest/encoding.js +8 -8
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +134 -106
- package/dest/unbox.d.ts.map +1 -1
- package/dest/unbox.js +47 -45
- package/dest/utils.d.ts +61 -8
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +169 -19
- package/package.json +61 -10
- package/src/client.ts +13 -22
- package/src/encoding.ts +9 -9
- package/src/index.ts +167 -136
- package/src/unbox.ts +52 -49
- package/src/utils.ts +192 -25
- package/.eslintrc.cjs +0 -1
- package/.tsbuildinfo +0 -1
- package/dest/client.test.d.ts +0 -2
- package/dest/client.test.d.ts.map +0 -1
- package/dest/client.test.js +0 -23
- package/dest/test/utils.test.d.ts +0 -2
- package/dest/test/utils.test.d.ts.map +0 -1
- package/dest/test/utils.test.js +0 -104
- package/src/client.test.ts +0 -34
- package/src/test/utils.test.ts +0 -133
- package/tsconfig.json +0 -30
package/dest/unbox.js
CHANGED
|
@@ -5,16 +5,7 @@ import * as path from 'path';
|
|
|
5
5
|
const GITHUB_OWNER = 'AztecProtocol';
|
|
6
6
|
const GITHUB_REPO = 'aztec-packages';
|
|
7
7
|
const GITHUB_TAG_PREFIX = 'aztec-packages';
|
|
8
|
-
const NOIR_CONTRACTS_PATH = 'yarn-project/noir-contracts/src/contracts';
|
|
9
8
|
const BOXES_PATH = 'yarn-project/boxes';
|
|
10
|
-
/**
|
|
11
|
-
* Converts a contract name in "upper camel case" to a folder name in snake case or kebab case.
|
|
12
|
-
* @param contractName - The contract name.
|
|
13
|
-
* @returns The folder name.
|
|
14
|
-
* */
|
|
15
|
-
function contractNameToFolder(contractName, separator = '-') {
|
|
16
|
-
return contractName.replace(/[\w]([A-Z])/g, m => `${m[0]}${separator}${m[1]}`).toLowerCase();
|
|
17
|
-
}
|
|
18
9
|
/**
|
|
19
10
|
* If the box contains the noir contract source code, we don't need to download it from github.
|
|
20
11
|
* Otherwise, we download the contract source code from the `noir-contracts` and `noir-libs` subpackages.
|
|
@@ -36,7 +27,7 @@ async function isDirectoryNonEmpty(directoryPath) {
|
|
|
36
27
|
* @param localOutputPath - local path to copy to
|
|
37
28
|
*/
|
|
38
29
|
async function copyFolderFromGithub(data, repositoryFolderPath, localOutputPath, log) {
|
|
39
|
-
log(`Downloading from github: ${repositoryFolderPath}`);
|
|
30
|
+
log(`Downloading folder from github: ${repositoryFolderPath}`);
|
|
40
31
|
const repositoryDirectories = Object.values(data.files).filter(file => {
|
|
41
32
|
return file.dir && file.name.startsWith(repositoryFolderPath);
|
|
42
33
|
});
|
|
@@ -45,16 +36,32 @@ async function copyFolderFromGithub(data, repositoryFolderPath, localOutputPath,
|
|
|
45
36
|
const targetPath = `${localOutputPath}/${relativePath}`;
|
|
46
37
|
await fs.mkdir(targetPath, { recursive: true });
|
|
47
38
|
}
|
|
48
|
-
const
|
|
39
|
+
const folderFiles = Object.values(data.files).filter(file => {
|
|
49
40
|
return !file.dir && file.name.startsWith(repositoryFolderPath);
|
|
50
41
|
});
|
|
51
|
-
for (const file of
|
|
42
|
+
for (const file of folderFiles) {
|
|
52
43
|
const relativePath = file.name.replace(repositoryFolderPath, '');
|
|
53
44
|
const targetPath = `${localOutputPath}/${relativePath}`;
|
|
54
45
|
const content = await file.async('nodebuffer');
|
|
55
46
|
await fs.writeFile(targetPath, content);
|
|
56
47
|
}
|
|
57
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* @param data - in memory unzipped clone of a github repo
|
|
51
|
+
* @param repositoryFile - path of the file to copy from github repo
|
|
52
|
+
* @param localOutputPath - local path to copy the file to
|
|
53
|
+
*/
|
|
54
|
+
async function copyFileFromGithub(data, repositoryFile, localOutputPath, log) {
|
|
55
|
+
log(`Downloading file from github: ${repositoryFile}`);
|
|
56
|
+
const file = data.files[repositoryFile];
|
|
57
|
+
if (!file || file.dir) {
|
|
58
|
+
throw new Error(`File not found or it's a directory: ${repositoryFile}`);
|
|
59
|
+
}
|
|
60
|
+
const filename = path.basename(repositoryFile);
|
|
61
|
+
const targetPath = `${localOutputPath}/${filename}`;
|
|
62
|
+
const content = await file.async('nodebuffer');
|
|
63
|
+
await fs.writeFile(targetPath, content);
|
|
64
|
+
}
|
|
58
65
|
/**
|
|
59
66
|
* Not flexible at at all, but quick fix to download a noir smart contract from our
|
|
60
67
|
* monorepo on github. this will copy over the `yarn-projects/boxes/{contract_name}` folder
|
|
@@ -68,8 +75,7 @@ async function copyFolderFromGithub(data, repositoryFolderPath, localOutputPath,
|
|
|
68
75
|
async function downloadContractAndBoxFromGithub(tag, contractName, outputPath, log) {
|
|
69
76
|
// small string conversion, in the ABI the contract name looks like PrivateToken
|
|
70
77
|
// but in the repostory it looks like private_token
|
|
71
|
-
|
|
72
|
-
log(`Downloading @aztex/boxes/${kebabCaseContractName} to ${outputPath}...`);
|
|
78
|
+
log(`Downloading @aztex/boxes/${contractName} to ${outputPath}...`);
|
|
73
79
|
// Step 1: Fetch the monorepo ZIP from GitHub, matching the CLI version
|
|
74
80
|
const url = `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/archive/refs/tags/${tag}.zip`;
|
|
75
81
|
const response = await fetch(url);
|
|
@@ -77,35 +83,24 @@ async function downloadContractAndBoxFromGithub(tag, contractName, outputPath, l
|
|
|
77
83
|
const zip = new JSZip();
|
|
78
84
|
const data = await zip.loadAsync(buffer);
|
|
79
85
|
// Step 2: copy the '@aztec/boxes/{contract-name}' subpackage to the output directory
|
|
80
|
-
// this is currently only implemented for
|
|
86
|
+
// this is currently only implemented for `blank` and `private-token` under 'boxes/{box-name}/'
|
|
81
87
|
const repoDirectoryPrefix = `${GITHUB_REPO}-${tag}`;
|
|
82
|
-
const boxPath = `${repoDirectoryPrefix}/${BOXES_PATH}/${
|
|
88
|
+
const boxPath = `${repoDirectoryPrefix}/${BOXES_PATH}/${contractName}`;
|
|
83
89
|
await copyFolderFromGithub(data, boxPath, outputPath, log);
|
|
90
|
+
// the expected noir version is contained in
|
|
91
|
+
// aztec-packages/yarn-project/noir-compiler/src/noir-version.json
|
|
92
|
+
// copy it in and use to update the package.json script to install that version of noir
|
|
93
|
+
const noirVersionPath = `${repoDirectoryPrefix}/yarn-project/noir-compiler/src/noir-version.json`;
|
|
94
|
+
await copyFileFromGithub(data, noirVersionPath, outputPath, log);
|
|
84
95
|
const contractTargetDirectory = path.join(outputPath, 'src', 'contracts');
|
|
85
96
|
const boxContainsNoirSource = await isDirectoryNonEmpty(contractTargetDirectory);
|
|
86
97
|
if (boxContainsNoirSource) {
|
|
87
98
|
return;
|
|
88
99
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// source noir files for the contract are in this folder
|
|
94
|
-
const snakeCaseContractName = contractNameToFolder(contractName, '_');
|
|
95
|
-
const contractDirectoryPath = `${repoDirectoryPrefix}/${NOIR_CONTRACTS_PATH}/${snakeCaseContractName}_contract`;
|
|
96
|
-
// copy the noir contracts to the output directory under subdir /src/contracts/
|
|
97
|
-
const contractFiles = Object.values(data.files).filter(file => {
|
|
98
|
-
return !file.dir && file.name.startsWith(contractDirectoryPath);
|
|
99
|
-
});
|
|
100
|
-
// Nargo.toml file needs to be in the root of the contracts directory,
|
|
101
|
-
// and noir files in the src/ subdirectory
|
|
102
|
-
await fs.mkdir(path.join(contractTargetDirectory, 'src'), { recursive: true });
|
|
103
|
-
for (const file of contractFiles) {
|
|
104
|
-
const filename = file.name.replace(`${contractDirectoryPath}/`, '');
|
|
105
|
-
const targetPath = path.join(contractTargetDirectory, filename);
|
|
106
|
-
const content = await file.async('nodebuffer');
|
|
107
|
-
await fs.writeFile(targetPath, content);
|
|
108
|
-
log(` ✓ ${filename}`);
|
|
100
|
+
else {
|
|
101
|
+
// we used to support downloading from the noir contracts monorepo but now force box to contain source code
|
|
102
|
+
// This should never happen, because of the check we do initially on the box name.
|
|
103
|
+
throw Error(`Box ${contractName} does not contain noir source code.`);
|
|
109
104
|
}
|
|
110
105
|
}
|
|
111
106
|
/**
|
|
@@ -189,11 +184,18 @@ async function updatePackageJsonVersions(packageVersion, outputPath, log) {
|
|
|
189
184
|
}
|
|
190
185
|
}
|
|
191
186
|
}
|
|
187
|
+
// read the `noir-version.json`, grab the expected noir version, and patch the noir install script
|
|
188
|
+
const noirVersionPath = path.join(outputPath, 'noir-version.json');
|
|
189
|
+
const noirVersionContent = await fs.readFile(noirVersionPath, 'utf-8');
|
|
190
|
+
const noirVersionJSON = JSON.parse(noirVersionContent);
|
|
191
|
+
const noirTag = noirVersionJSON.tag;
|
|
192
|
+
packageData.scripts['install:noir'] = packageData.scripts['install:noir'].replace('NOIR_VERSION', `${noirTag}`);
|
|
193
|
+
log(`Updated Noir version to: ${noirTag}`);
|
|
192
194
|
// modify the version of the sandbox to pull - it's set to "latest" version in the monorepo,
|
|
193
195
|
// but we need to replace with the same tagVersion as the cli and the other aztec npm packages
|
|
194
196
|
// similarly, make sure we spinup the sandbox with the same version.
|
|
195
|
-
packageData.scripts['install:sandbox'] = packageData.scripts['install:sandbox'].replace('latest',
|
|
196
|
-
packageData.scripts['start:sandbox'] = packageData.scripts['start:sandbox'].replace('latest',
|
|
197
|
+
packageData.scripts['install:sandbox'] = packageData.scripts['install:sandbox'].replace('latest', `${packageVersion}`);
|
|
198
|
+
packageData.scripts['start:sandbox'] = packageData.scripts['start:sandbox'].replace('latest', `${packageVersion}`);
|
|
197
199
|
// Convert back to a string and write back to the package.json file
|
|
198
200
|
const updatedContent = JSON.stringify(packageData, null, 2);
|
|
199
201
|
await fs.writeFile(packageJsonPath, updatedContent);
|
|
@@ -237,27 +239,27 @@ async function createDirectory(outputDirectoryName, log) {
|
|
|
237
239
|
* @param log - Logger instance that will output to the CLI
|
|
238
240
|
*/
|
|
239
241
|
export async function unboxContract(contractName, outputDirectoryName, packageVersion, log) {
|
|
240
|
-
const contractNames = ['
|
|
242
|
+
const contractNames = ['private-token', 'blank', 'blank-react'];
|
|
241
243
|
if (!contractNames.includes(contractName)) {
|
|
242
244
|
log(`The noir contract named "${contractName}" was not found in "@aztec/boxes" package. Valid options are:
|
|
243
245
|
${contractNames.join('\n\t')}
|
|
244
|
-
We recommend "
|
|
246
|
+
We recommend "private-token" as a default.`);
|
|
245
247
|
return;
|
|
246
248
|
}
|
|
247
249
|
const outputPath = await createDirectory(outputDirectoryName, log);
|
|
248
250
|
const tag = `${GITHUB_TAG_PREFIX}-v${packageVersion}`;
|
|
249
251
|
// downloads the selected contract's relevant folder in @aztec/boxes/{contract_name}
|
|
250
|
-
// and the noir source code from `noir-contracts` into `${outputDirectoryName}/src/contracts`
|
|
251
|
-
// if not present in the box
|
|
252
252
|
await downloadContractAndBoxFromGithub(tag, contractName, outputPath, log);
|
|
253
253
|
// make adjustments for packaging to work as a standalone, as opposed to part of yarn workspace
|
|
254
|
-
// as in the monorepo source files
|
|
254
|
+
// as in the monorepo source files. replace things like "workspace^" with the actual version number
|
|
255
255
|
await updatePackagingConfigurations(packageVersion, tag, outputPath, log);
|
|
256
256
|
log('');
|
|
257
|
-
log(`${contractName} has been successfully
|
|
257
|
+
log(`${contractName} has been successfully initialized!`);
|
|
258
258
|
log('To get started, simply run the following commands:');
|
|
259
259
|
log(` cd ${outputDirectoryName}`);
|
|
260
260
|
log(' yarn');
|
|
261
|
+
log(' yarn start:sandbox');
|
|
262
|
+
log('And in another terminal in the same directory,');
|
|
261
263
|
log(' yarn start:dev');
|
|
262
264
|
}
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUMzQyxNQUFNLG1CQUFtQixHQUFHLDJDQUEyQyxDQUFDO0FBQ3hFLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDO0FBRXhDOzs7O0tBSUs7QUFDTCxTQUFTLG9CQUFvQixDQUFDLFlBQW9CLEVBQUUsU0FBUyxHQUFHLEdBQUc7SUFDakUsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQy9GLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsbUJBQW1CLENBQUMsYUFBcUI7SUFDdEQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDViw0QkFBNEI7UUFDNUIsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxv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
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUMzQyxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztBQUV4Qzs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsbUJBQW1CLENBQUMsYUFBcUI7SUFDdEQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDViw0QkFBNEI7UUFDNUIsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxJQUFXLEVBQUUsb0JBQTRCLEVBQUUsZUFBdUIsRUFBRSxHQUFVO0lBQ2hILEdBQUcsQ0FBQyxtQ0FBbUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FB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
|
package/dest/utils.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { AztecAddress,
|
|
1
|
+
import { AztecAddress, Fr, GrumpkinScalar, PXE, Point, TxHash } from '@aztec/aztec.js';
|
|
2
2
|
import { ContractAbi } from '@aztec/foundation/abi';
|
|
3
3
|
import { DebugLogger, LogFn } from '@aztec/foundation/log';
|
|
4
|
-
export { createClient } from './client.js';
|
|
5
4
|
/**
|
|
6
5
|
* Helper type to dynamically import contracts.
|
|
7
6
|
*/
|
|
@@ -36,24 +35,78 @@ export declare function getExampleContractArtifacts(): Promise<ArtifactsType>;
|
|
|
36
35
|
export declare function getContractAbi(fileDir: string, log: LogFn): Promise<ContractAbi>;
|
|
37
36
|
/**
|
|
38
37
|
* Utility to select a TX sender either from user input
|
|
39
|
-
* or from the first account that is found in
|
|
40
|
-
* @param
|
|
38
|
+
* or from the first account that is found in a PXE instance.
|
|
39
|
+
* @param pxe - The PXE instance that will be checked for an account.
|
|
41
40
|
* @param _from - The user input.
|
|
42
41
|
* @returns An Aztec address. Will throw if one can't be found in either options.
|
|
43
42
|
*/
|
|
44
|
-
export declare function getTxSender(
|
|
43
|
+
export declare function getTxSender(pxe: PXE, _from?: string): Promise<AztecAddress>;
|
|
45
44
|
/**
|
|
46
45
|
* Performs necessary checks, conversions & operations to call a contract fn from the CLI.
|
|
47
46
|
* @param contractFile - Directory of the compiled contract ABI.
|
|
48
|
-
* @param
|
|
47
|
+
* @param contractAddress - Aztec Address of the contract.
|
|
49
48
|
* @param functionName - Name of the function to be called.
|
|
50
49
|
* @param _functionArgs - Arguments to call the function with.
|
|
51
50
|
* @param log - Logger instance that will output to the CLI
|
|
52
51
|
* @returns Formatted contract address, function arguments and caller's aztec address.
|
|
53
52
|
*/
|
|
54
|
-
export declare function prepTx(contractFile: string,
|
|
55
|
-
contractAddress: AztecAddress;
|
|
53
|
+
export declare function prepTx(contractFile: string, functionName: string, _functionArgs: string[], log: LogFn): Promise<{
|
|
56
54
|
functionArgs: any[];
|
|
57
55
|
contractAbi: ContractAbi;
|
|
58
56
|
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Removes the leading 0x from a hex string. If no leading 0x is found the string is returned unchanged.
|
|
59
|
+
* @param hex - A hex string
|
|
60
|
+
* @returns A new string with leading 0x removed
|
|
61
|
+
*/
|
|
62
|
+
export declare const stripLeadingHex: (hex: string) => string;
|
|
63
|
+
/**
|
|
64
|
+
* Parses a hex encoded string to an Fr integer to be used as salt
|
|
65
|
+
* @param str - Hex encoded string
|
|
66
|
+
* @returns A integer to be used as salt
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseSaltFromHexString(str: string): Fr;
|
|
69
|
+
/**
|
|
70
|
+
* Parses an AztecAddress from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
71
|
+
* @param address - A serialised Aztec address
|
|
72
|
+
* @returns An Aztec address
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseAztecAddress(address: string): AztecAddress;
|
|
75
|
+
/**
|
|
76
|
+
* Parses a TxHash from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
77
|
+
* @param txHash - A transaction hash
|
|
78
|
+
* @returns A TxHash instance
|
|
79
|
+
*/
|
|
80
|
+
export declare function parseTxHash(txHash: string): TxHash;
|
|
81
|
+
/**
|
|
82
|
+
* Parses a public key from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
83
|
+
* @param publicKey - A public key
|
|
84
|
+
* @returns A Point instance
|
|
85
|
+
*/
|
|
86
|
+
export declare function parsePublicKey(publicKey: string): Point;
|
|
87
|
+
/**
|
|
88
|
+
* Parses a partial address from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
89
|
+
* @param address - A partial address
|
|
90
|
+
* @returns A Fr instance
|
|
91
|
+
*/
|
|
92
|
+
export declare function parsePartialAddress(address: string): Fr;
|
|
93
|
+
/**
|
|
94
|
+
* Parses a private key from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
95
|
+
* @param privateKey - A string
|
|
96
|
+
* @returns A private key
|
|
97
|
+
*/
|
|
98
|
+
export declare function parsePrivateKey(privateKey: string): GrumpkinScalar;
|
|
99
|
+
/**
|
|
100
|
+
* Parses a field from a string. Throws InvalidArgumentError if the string is not a valid field value.
|
|
101
|
+
* @param field - A string representing the field.
|
|
102
|
+
* @returns A field.
|
|
103
|
+
*/
|
|
104
|
+
export declare function parseField(field: string): Fr;
|
|
105
|
+
/**
|
|
106
|
+
* Parses an array of strings to Frs.
|
|
107
|
+
* @param fields - An array of strings representing the fields.
|
|
108
|
+
* @returns An array of Frs.
|
|
109
|
+
*/
|
|
110
|
+
export declare function parseFields(fields: string[]): Fr[];
|
|
111
|
+
export {};
|
|
59
112
|
//# sourceMappingURL=utils.d.ts.map
|
package/dest/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAoB3D;;GAEG;AACH,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,+CAM9D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,wDA2BzB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,2BAGhD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,wBAuB/D;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,yBAgBzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK;;;GAM3G;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAS,MAAM,WAK1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CActD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,EAAE,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAYlE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,CAyB5C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAElD"}
|
package/dest/utils.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { AztecAddress } from '@aztec/aztec.js';
|
|
1
|
+
import { AztecAddress, Fr, GrumpkinScalar, Point, TxHash } from '@aztec/aztec.js';
|
|
2
2
|
import { createEthereumChain, deployL1Contracts } from '@aztec/ethereum';
|
|
3
|
+
import { ContractDeploymentEmitterAbi, ContractDeploymentEmitterBytecode, InboxAbi, InboxBytecode, OutboxAbi, OutboxBytecode, RegistryAbi, RegistryBytecode, RollupAbi, RollupBytecode, } from '@aztec/l1-artifacts';
|
|
4
|
+
import { InvalidArgumentError } from 'commander';
|
|
3
5
|
import fs from 'fs';
|
|
4
6
|
import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
5
7
|
import { encodeArgs } from './encoding.js';
|
|
6
|
-
export { createClient } from './client.js';
|
|
7
8
|
/**
|
|
8
9
|
* Helper to get an ABI function or throw error if it doesn't exist.
|
|
9
10
|
* @param abi - Contract's ABI in JSON format.
|
|
@@ -27,7 +28,29 @@ export function getAbiFunction(abi, fnName) {
|
|
|
27
28
|
export async function deployAztecContracts(rpcUrl, apiKey, privateKey, mnemonic, debugLogger) {
|
|
28
29
|
const account = !privateKey ? mnemonicToAccount(mnemonic) : privateKeyToAccount(`0x${privateKey}`);
|
|
29
30
|
const chain = createEthereumChain(rpcUrl, apiKey);
|
|
30
|
-
|
|
31
|
+
const l1Artifacts = {
|
|
32
|
+
contractDeploymentEmitter: {
|
|
33
|
+
contractAbi: ContractDeploymentEmitterAbi,
|
|
34
|
+
contractBytecode: ContractDeploymentEmitterBytecode,
|
|
35
|
+
},
|
|
36
|
+
registry: {
|
|
37
|
+
contractAbi: RegistryAbi,
|
|
38
|
+
contractBytecode: RegistryBytecode,
|
|
39
|
+
},
|
|
40
|
+
inbox: {
|
|
41
|
+
contractAbi: InboxAbi,
|
|
42
|
+
contractBytecode: InboxBytecode,
|
|
43
|
+
},
|
|
44
|
+
outbox: {
|
|
45
|
+
contractAbi: OutboxAbi,
|
|
46
|
+
contractBytecode: OutboxBytecode,
|
|
47
|
+
},
|
|
48
|
+
rollup: {
|
|
49
|
+
contractAbi: RollupAbi,
|
|
50
|
+
contractBytecode: RollupBytecode,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
return await deployL1Contracts(chain.rpcUrl, account, chain.chainInfo, debugLogger, l1Artifacts);
|
|
31
54
|
}
|
|
32
55
|
/**
|
|
33
56
|
* Gets all contracts available in \@aztec/noir-contracts.
|
|
@@ -68,25 +91,25 @@ export async function getContractAbi(fileDir, log) {
|
|
|
68
91
|
}
|
|
69
92
|
/**
|
|
70
93
|
* Utility to select a TX sender either from user input
|
|
71
|
-
* or from the first account that is found in
|
|
72
|
-
* @param
|
|
94
|
+
* or from the first account that is found in a PXE instance.
|
|
95
|
+
* @param pxe - The PXE instance that will be checked for an account.
|
|
73
96
|
* @param _from - The user input.
|
|
74
97
|
* @returns An Aztec address. Will throw if one can't be found in either options.
|
|
75
98
|
*/
|
|
76
|
-
export async function getTxSender(
|
|
99
|
+
export async function getTxSender(pxe, _from) {
|
|
77
100
|
let from;
|
|
78
101
|
if (_from) {
|
|
79
102
|
try {
|
|
80
103
|
from = AztecAddress.fromString(_from);
|
|
81
104
|
}
|
|
82
105
|
catch {
|
|
83
|
-
throw new
|
|
106
|
+
throw new InvalidArgumentError(`Invalid option 'from' passed: ${_from}`);
|
|
84
107
|
}
|
|
85
108
|
}
|
|
86
109
|
else {
|
|
87
|
-
const accounts = await
|
|
110
|
+
const accounts = await pxe.getRegisteredAccounts();
|
|
88
111
|
if (!accounts.length) {
|
|
89
|
-
throw new Error('No accounts found in
|
|
112
|
+
throw new Error('No accounts found in PXE instance.');
|
|
90
113
|
}
|
|
91
114
|
from = accounts[0].address;
|
|
92
115
|
}
|
|
@@ -95,23 +118,150 @@ export async function getTxSender(client, _from) {
|
|
|
95
118
|
/**
|
|
96
119
|
* Performs necessary checks, conversions & operations to call a contract fn from the CLI.
|
|
97
120
|
* @param contractFile - Directory of the compiled contract ABI.
|
|
98
|
-
* @param
|
|
121
|
+
* @param contractAddress - Aztec Address of the contract.
|
|
99
122
|
* @param functionName - Name of the function to be called.
|
|
100
123
|
* @param _functionArgs - Arguments to call the function with.
|
|
101
124
|
* @param log - Logger instance that will output to the CLI
|
|
102
125
|
* @returns Formatted contract address, function arguments and caller's aztec address.
|
|
103
126
|
*/
|
|
104
|
-
export async function prepTx(contractFile,
|
|
105
|
-
|
|
127
|
+
export async function prepTx(contractFile, functionName, _functionArgs, log) {
|
|
128
|
+
const contractAbi = await getContractAbi(contractFile, log);
|
|
129
|
+
const functionAbi = getAbiFunction(contractAbi, functionName);
|
|
130
|
+
const functionArgs = encodeArgs(_functionArgs, functionAbi.parameters);
|
|
131
|
+
return { functionArgs, contractAbi };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Removes the leading 0x from a hex string. If no leading 0x is found the string is returned unchanged.
|
|
135
|
+
* @param hex - A hex string
|
|
136
|
+
* @returns A new string with leading 0x removed
|
|
137
|
+
*/
|
|
138
|
+
export const stripLeadingHex = (hex) => {
|
|
139
|
+
if (hex.length > 2 && hex.startsWith('0x')) {
|
|
140
|
+
return hex.substring(2);
|
|
141
|
+
}
|
|
142
|
+
return hex;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Parses a hex encoded string to an Fr integer to be used as salt
|
|
146
|
+
* @param str - Hex encoded string
|
|
147
|
+
* @returns A integer to be used as salt
|
|
148
|
+
*/
|
|
149
|
+
export function parseSaltFromHexString(str) {
|
|
150
|
+
const hex = stripLeadingHex(str);
|
|
151
|
+
// ensure it's a hex string
|
|
152
|
+
if (!hex.match(/^[0-9a-f]+$/i)) {
|
|
153
|
+
throw new InvalidArgumentError('Invalid hex string');
|
|
154
|
+
}
|
|
155
|
+
// pad it so that we may read it as a buffer.
|
|
156
|
+
// Buffer needs _exactly_ two hex characters per byte
|
|
157
|
+
const padded = hex.length % 2 === 1 ? '0' + hex : hex;
|
|
158
|
+
// finally, turn it into an integer
|
|
159
|
+
return Fr.fromBuffer(Buffer.from(padded, 'hex'));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Parses an AztecAddress from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
163
|
+
* @param address - A serialised Aztec address
|
|
164
|
+
* @returns An Aztec address
|
|
165
|
+
*/
|
|
166
|
+
export function parseAztecAddress(address) {
|
|
106
167
|
try {
|
|
107
|
-
|
|
168
|
+
return AztecAddress.fromString(address);
|
|
108
169
|
}
|
|
109
170
|
catch {
|
|
110
|
-
throw new
|
|
171
|
+
throw new InvalidArgumentError(`Invalid address: ${address}`);
|
|
111
172
|
}
|
|
112
|
-
const contractAbi = await getContractAbi(contractFile, log);
|
|
113
|
-
const functionAbi = getAbiFunction(contractAbi, functionName);
|
|
114
|
-
const functionArgs = encodeArgs(_functionArgs, functionAbi.parameters);
|
|
115
|
-
return { contractAddress, functionArgs, contractAbi };
|
|
116
173
|
}
|
|
117
|
-
|
|
174
|
+
/**
|
|
175
|
+
* Parses a TxHash from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
176
|
+
* @param txHash - A transaction hash
|
|
177
|
+
* @returns A TxHash instance
|
|
178
|
+
*/
|
|
179
|
+
export function parseTxHash(txHash) {
|
|
180
|
+
try {
|
|
181
|
+
return TxHash.fromString(txHash);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
throw new InvalidArgumentError(`Invalid transaction hash: ${txHash}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Parses a public key from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
189
|
+
* @param publicKey - A public key
|
|
190
|
+
* @returns A Point instance
|
|
191
|
+
*/
|
|
192
|
+
export function parsePublicKey(publicKey) {
|
|
193
|
+
try {
|
|
194
|
+
return Point.fromString(publicKey);
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
throw new InvalidArgumentError(`Invalid public key: ${publicKey}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Parses a partial address from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
202
|
+
* @param address - A partial address
|
|
203
|
+
* @returns A Fr instance
|
|
204
|
+
*/
|
|
205
|
+
export function parsePartialAddress(address) {
|
|
206
|
+
try {
|
|
207
|
+
return Fr.fromString(address);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
throw new InvalidArgumentError(`Invalid partial address: ${address}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Parses a private key from a string. Throws InvalidArgumentError if the string is not a valid.
|
|
215
|
+
* @param privateKey - A string
|
|
216
|
+
* @returns A private key
|
|
217
|
+
*/
|
|
218
|
+
export function parsePrivateKey(privateKey) {
|
|
219
|
+
try {
|
|
220
|
+
const value = GrumpkinScalar.fromString(privateKey);
|
|
221
|
+
// most likely a badly formatted key was passed
|
|
222
|
+
if (value.isZero()) {
|
|
223
|
+
throw new Error('Private key must not be zero');
|
|
224
|
+
}
|
|
225
|
+
return value;
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
throw new InvalidArgumentError(`Invalid private key: ${privateKey}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Parses a field from a string. Throws InvalidArgumentError if the string is not a valid field value.
|
|
233
|
+
* @param field - A string representing the field.
|
|
234
|
+
* @returns A field.
|
|
235
|
+
*/
|
|
236
|
+
export function parseField(field) {
|
|
237
|
+
try {
|
|
238
|
+
const isHex = field.startsWith('0x') || field.match(new RegExp(`^[0-9a-f]{${Fr.SIZE_IN_BYTES * 2}}$`, 'i'));
|
|
239
|
+
if (isHex) {
|
|
240
|
+
return Fr.fromString(field);
|
|
241
|
+
}
|
|
242
|
+
if (['true', 'false'].includes(field)) {
|
|
243
|
+
return new Fr(field === 'true');
|
|
244
|
+
}
|
|
245
|
+
const isNumber = +field || field === '0';
|
|
246
|
+
if (isNumber) {
|
|
247
|
+
return new Fr(BigInt(field));
|
|
248
|
+
}
|
|
249
|
+
const isBigInt = field.endsWith('n');
|
|
250
|
+
if (isBigInt) {
|
|
251
|
+
return new Fr(BigInt(field.replace(/n$/, '')));
|
|
252
|
+
}
|
|
253
|
+
return new Fr(BigInt(field));
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
throw new InvalidArgumentError(`Invalid field: ${field}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Parses an array of strings to Frs.
|
|
261
|
+
* @param fields - An array of strings representing the fields.
|
|
262
|
+
* @returns An array of Frs.
|
|
263
|
+
*/
|
|
264
|
+
export function parseFields(fields) {
|
|
265
|
+
return fields.map(parseField);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RixPQUFPLEVBQW9DLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0csT0FBTyxFQUNMLDRCQUE0QixFQUM1QixpQ0FBaUMsRUFDakMsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsY0FBYyxFQUNkLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTM0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQWdCLEVBQUUsTUFBYztJQUM3RCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ1AsTUFBTSxLQUFLLENBQUMsWUFBWSxNQUFNLDZCQUE2QixDQUFDLENBQUM7S0FDOUQ7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxNQUFjLEVBQ2QsTUFBYyxFQUNkLFVBQWtCLEVBQ2xCLFFBQWdCLEVBQ2hCLFdBQXdCO0lBRXhCLE1BQU0sT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxNQUFNLFdBQVcsR0FBcUM7UUFDcEQseUJBQXlCLEVBQUU7WUFDekIsV0FBVyxFQUFFLDRCQUE0QjtZQUN6QyxnQkFBZ0IsRUFBRSxpQ0FBaUM7U0FDcEQ7UUFDRCxRQUFRLEVBQUU7WUFDUixXQUFXLEVBQUUsV0FBVztZQUN4QixnQkFBZ0IsRUFBRSxnQkFBZ0I7U0FDbkM7UUFDRCxLQUFLLEVBQUU7WUFDTCxXQUFXLEVBQUUsUUFBUTtZQUNyQixnQkFBZ0IsRUFBRSxhQUFhO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFO1lBQ04sV0FBVyxFQUFFLFNBQVM7WUFDdEIsZ0JBQWdCLEVBQUUsY0FBYztTQUNqQztRQUNELE1BQU0sRUFBRTtZQUNOLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLGdCQUFnQixFQUFFLGNBQWM7U0FDakM7S0FDRixDQUFDO0lBQ0YsT0FBTyxNQUFNLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ25HLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDJCQUEyQjtJQUMvQyxNQUFNLFNBQVMsR0FBa0IsTUFBTSxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNqRixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLE9BQWUsRUFBRSxHQUFVO0lBQzlELCtDQUErQztJQUMvQyxJQUFJLFFBQWdCLENBQUM7SUFDckIsTUFBTSxTQUFTLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFDO0lBQ3RELElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBZ0IsQ0FBQztLQUMxQztJQUVELElBQUk7UUFDRixRQUFRLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0M7SUFBQyxNQUFNO1FBQ04sTUFBTSxLQUFLLENBQUMsWUFBWSxPQUFPLFlBQVksQ0FBQyxDQUFDO0tBQzlDO0lBRUQsNkNBQTZDO0lBQzdDLElBQUksV0FBd0IsQ0FBQztJQUM3QixJQUFJO1FBQ0YsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFnQixDQUFDO0tBQ25EO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUM1QyxNQUFNLEdBQUcsQ0FBQztLQUNYO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLEdBQVEsRUFBRSxLQUFjO0lBQ3hELElBQUksSUFBa0IsQ0FBQztJQUN2QixJQUFJLEtBQUssRUFBRTtRQUNULElBQUk7WUFDRixJQUFJLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztRQUFDLE1BQU07WUFDTixNQUFNLElBQUksb0JBQW9CLENBQUMsaUNBQWlDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDMUU7S0FDRjtTQUFNO1FBQ0wsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztLQUM1QjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsWUFBb0IsRUFBRSxZQUFvQixFQUFFLGFBQXVCLEVBQUUsR0FBVTtJQUMxRyxNQUFNLFdBQVcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDN0MsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzFDLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6QjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxHQUFXO0lBQ2hELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVqQywyQkFBMkI7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7S0FDdEQ7SUFFRCw2Q0FBNkM7SUFDN0MscURBQXFEO0lBQ3JELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRXRELG1DQUFtQztJQUNuQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFlO0lBQy9DLElBQUk7UUFDRixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDekM7SUFBQyxNQUFNO1FBQ04sTUFBTSxJQUFJLG9CQUFvQixDQUFDLG9CQUFvQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQy9EO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWM7SUFDeEMsSUFBSTtRQUNGLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNsQztJQUFDLE1BQU07UUFDTixNQUFNLElBQUksb0JBQW9CLENBQUMsNkJBQTZCLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDdkU7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBaUI7SUFDOUMsSUFBSTtRQUNGLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNwQztJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osTUFBTSxJQUFJLG9CQUFvQixDQUFDLHVCQUF1QixTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ3BFO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBZTtJQUNqRCxJQUFJO1FBQ0YsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9CO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixNQUFNLElBQUksb0JBQW9CLENBQUMsNEJBQTRCLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDdkU7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsVUFBa0I7SUFDaEQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsK0NBQStDO1FBQy9DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyx3QkFBd0IsVUFBVSxFQUFFLENBQUMsQ0FBQztLQUN0RTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLElBQUk7UUFDRixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUcsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztTQUNqQztRQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUM7UUFDekMsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU8sSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDtRQUVELE9BQU8sSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDOUI7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMzRDtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFnQjtJQUMxQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEMsQ0FBQyJ9
|