hardhat 2.8.4 → 2.9.0
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/LICENSE +3 -61
- package/README.md +1 -1
- package/builtin-tasks/compile.js +86 -51
- package/builtin-tasks/compile.js.map +1 -1
- package/builtin-tasks/node.js.map +1 -1
- package/builtin-tasks/test.js +30 -5
- package/builtin-tasks/test.js.map +1 -1
- package/builtin-tasks/utils/solidity-files-cache.d.ts.map +1 -1
- package/builtin-tasks/utils/solidity-files-cache.js.map +1 -1
- package/internal/cli/analytics.js +2 -2
- package/internal/cli/analytics.js.map +1 -1
- package/internal/cli/cli.js +3 -3
- package/internal/cli/project-creation.d.ts.map +1 -1
- package/internal/cli/project-creation.js +23 -0
- package/internal/cli/project-creation.js.map +1 -1
- package/internal/core/config/config-loading.d.ts.map +1 -1
- package/internal/core/config/config-loading.js.map +1 -1
- package/internal/core/config/config-validation.d.ts.map +1 -1
- package/internal/core/config/config-validation.js +2 -2
- package/internal/core/config/config-validation.js.map +1 -1
- package/internal/core/config/default-config.d.ts +2 -0
- package/internal/core/config/default-config.d.ts.map +1 -1
- package/internal/core/config/default-config.js +1 -0
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/errors-list.d.ts +7 -0
- package/internal/core/errors-list.d.ts.map +1 -1
- package/internal/core/errors-list.js +13 -0
- package/internal/core/errors-list.js.map +1 -1
- package/internal/core/providers/accounts.d.ts +1 -1
- package/internal/core/providers/accounts.d.ts.map +1 -1
- package/internal/core/providers/accounts.js +2 -2
- package/internal/core/providers/accounts.js.map +1 -1
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +1 -1
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/http.d.ts +5 -1
- package/internal/core/providers/http.d.ts.map +1 -1
- package/internal/core/providers/http.js +35 -31
- package/internal/core/providers/http.js.map +1 -1
- package/internal/core/providers/util.d.ts +1 -1
- package/internal/core/providers/util.d.ts.map +1 -1
- package/internal/core/providers/util.js +3 -3
- package/internal/core/providers/util.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/server.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/server.js +7 -2
- package/internal/hardhat-network/jsonrpc/server.js.map +1 -1
- package/internal/hardhat-network/provider/BlockchainBase.d.ts +26 -0
- package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -0
- package/internal/hardhat-network/provider/BlockchainBase.js +92 -0
- package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -0
- package/internal/hardhat-network/provider/BlockchainData.d.ts +32 -0
- package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -1
- package/internal/hardhat-network/provider/BlockchainData.js +78 -1
- package/internal/hardhat-network/provider/BlockchainData.js.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +9 -15
- package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/HardhatBlockchain.js +15 -73
- package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +6 -14
- package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -1
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js +23 -73
- package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -1
- package/internal/hardhat-network/provider/modules/eth.js +2 -2
- package/internal/hardhat-network/provider/modules/eth.js.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.d.ts +3 -0
- package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/hardhat.js +40 -5
- package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.d.ts +4 -2
- package/internal/hardhat-network/provider/modules/logger.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/logger.js +38 -12
- package/internal/hardhat-network/provider/modules/logger.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +9 -1
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +57 -8
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +1 -1
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +2 -1
- package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.js +2 -1
- package/internal/hardhat-network/provider/utils/makeForkClient.js.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +1 -1
- package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +21 -12
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.js +2 -2
- package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +3 -2
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
- package/internal/solidity/compilation-job.d.ts.map +1 -1
- package/internal/solidity/compilation-job.js.map +1 -1
- package/internal/solidity/compiler/downloader.d.ts +2 -2
- package/internal/solidity/compiler/downloader.d.ts.map +1 -1
- package/internal/solidity/compiler/downloader.js +3 -3
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/util/download.d.ts.map +1 -1
- package/internal/util/download.js +22 -24
- package/internal/util/download.js.map +1 -1
- package/internal/util/glob.d.ts.map +1 -1
- package/internal/util/glob.js.map +1 -1
- package/internal/util/global-dir.d.ts.map +1 -1
- package/internal/util/global-dir.js.map +1 -1
- package/internal/util/keys-derivation.d.ts +1 -1
- package/internal/util/keys-derivation.d.ts.map +1 -1
- package/internal/util/keys-derivation.js +2 -2
- package/internal/util/keys-derivation.js.map +1 -1
- package/package.json +10 -10
- package/sample-projects/advanced-ts/README.md +1 -1
- package/src/builtin-tasks/compile.ts +94 -76
- package/src/builtin-tasks/node.ts +2 -1
- package/src/builtin-tasks/test.ts +69 -11
- package/src/builtin-tasks/utils/solidity-files-cache.ts +3 -2
- package/src/internal/cli/analytics.ts +2 -2
- package/src/internal/cli/cli.ts +3 -3
- package/src/internal/cli/project-creation.ts +40 -0
- package/src/internal/core/config/config-loading.ts +2 -1
- package/src/internal/core/config/config-validation.ts +2 -0
- package/src/internal/core/config/default-config.ts +1 -0
- package/src/internal/core/errors-list.ts +13 -0
- package/src/internal/core/providers/accounts.ts +4 -2
- package/src/internal/core/providers/construction.ts +3 -1
- package/src/internal/core/providers/http.ts +47 -16
- package/src/internal/core/providers/util.ts +6 -3
- package/src/internal/hardhat-network/jsonrpc/server.ts +16 -3
- package/src/internal/hardhat-network/provider/BlockchainBase.ts +137 -0
- package/src/internal/hardhat-network/provider/BlockchainData.ts +144 -0
- package/src/internal/hardhat-network/provider/HardhatBlockchain.ts +34 -87
- package/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +45 -90
- package/src/internal/hardhat-network/provider/modules/eth.ts +2 -2
- package/src/internal/hardhat-network/provider/modules/hardhat.ts +51 -5
- package/src/internal/hardhat-network/provider/modules/logger.ts +50 -14
- package/src/internal/hardhat-network/provider/node-types.ts +2 -2
- package/src/internal/hardhat-network/provider/node.ts +81 -8
- package/src/internal/hardhat-network/provider/provider.ts +9 -8
- package/src/internal/hardhat-network/provider/types/HardhatBlockchainInterface.ts +7 -1
- package/src/internal/hardhat-network/provider/utils/makeForkClient.ts +2 -1
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/debug.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +21 -13
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +3 -2
- package/src/internal/solidity/compilation-job.ts +2 -1
- package/src/internal/solidity/compiler/downloader.ts +5 -3
- package/src/internal/util/download.ts +26 -31
- package/src/internal/util/glob.ts +1 -0
- package/src/internal/util/global-dir.ts +2 -1
- package/src/internal/util/keys-derivation.ts +3 -2
- package/src/types/config.ts +4 -0
- package/types/config.d.ts +4 -0
- package/types/config.d.ts.map +1 -1
|
@@ -208,7 +208,7 @@ export class HardhatNode extends EventEmitter {
|
|
|
208
208
|
trie: stateTrie,
|
|
209
209
|
});
|
|
210
210
|
|
|
211
|
-
const hardhatBlockchain = new HardhatBlockchain();
|
|
211
|
+
const hardhatBlockchain = new HardhatBlockchain(common);
|
|
212
212
|
|
|
213
213
|
const genesisBlockBaseFeePerGas = hardforkGte(
|
|
214
214
|
hardfork,
|
|
@@ -490,6 +490,79 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
490
490
|
return result;
|
|
491
491
|
}
|
|
492
492
|
|
|
493
|
+
/**
|
|
494
|
+
* Mines `count` blocks with a difference of `interval` seconds between their
|
|
495
|
+
* timestamps.
|
|
496
|
+
*
|
|
497
|
+
* Returns an array with the results of the blocks that were really mined (the
|
|
498
|
+
* ones that were reserved are not included).
|
|
499
|
+
*/
|
|
500
|
+
public async mineBlocks(
|
|
501
|
+
count: BN = new BN(1),
|
|
502
|
+
interval: BN = new BN(1)
|
|
503
|
+
): Promise<MineBlockResult[]> {
|
|
504
|
+
if (count.eqn(0)) {
|
|
505
|
+
// nothing to do
|
|
506
|
+
return [];
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
const mineBlockResults: MineBlockResult[] = [];
|
|
510
|
+
|
|
511
|
+
// we always mine the first block, and we don't apply the interval for it
|
|
512
|
+
mineBlockResults.push(await this.mineBlock());
|
|
513
|
+
|
|
514
|
+
// helper function to mine a block with a timstamp that respects the
|
|
515
|
+
// interval
|
|
516
|
+
const mineBlock = async () => {
|
|
517
|
+
const nextTimestamp = (await this.getLatestBlock()).header.timestamp.add(
|
|
518
|
+
interval
|
|
519
|
+
);
|
|
520
|
+
mineBlockResults.push(await this.mineBlock(nextTimestamp));
|
|
521
|
+
};
|
|
522
|
+
|
|
523
|
+
// then we mine any pending transactions
|
|
524
|
+
while (
|
|
525
|
+
count.gtn(mineBlockResults.length) &&
|
|
526
|
+
this._txPool.hasPendingTransactions()
|
|
527
|
+
) {
|
|
528
|
+
await mineBlock();
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// If there is at least one remaining block, we mine one. This way, we
|
|
532
|
+
// guarantee that there's an empty block immediately before and after the
|
|
533
|
+
// reservation. This makes the logging easier to get right.
|
|
534
|
+
if (count.gtn(mineBlockResults.length)) {
|
|
535
|
+
await mineBlock();
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
const remainingBlockCount = count.subn(mineBlockResults.length);
|
|
539
|
+
|
|
540
|
+
// There should be at least 2 blocks left for the reservation to work,
|
|
541
|
+
// because we always mine a block after it. But here we use a bigger
|
|
542
|
+
// number to err on the safer side.
|
|
543
|
+
if (remainingBlockCount.lten(5)) {
|
|
544
|
+
// if there are few blocks left to mine, we just mine them
|
|
545
|
+
while (count.gtn(mineBlockResults.length)) {
|
|
546
|
+
await mineBlock();
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
return mineBlockResults;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// otherwise, we reserve a range and mine the last one
|
|
553
|
+
const latestBlock = await this.getLatestBlock();
|
|
554
|
+
this._blockchain.reserveBlocks(
|
|
555
|
+
remainingBlockCount.subn(1),
|
|
556
|
+
interval,
|
|
557
|
+
await this._stateManager.getStateRoot(),
|
|
558
|
+
await this.getBlockTotalDifficulty(latestBlock)
|
|
559
|
+
);
|
|
560
|
+
|
|
561
|
+
await mineBlock();
|
|
562
|
+
|
|
563
|
+
return mineBlockResults;
|
|
564
|
+
}
|
|
565
|
+
|
|
493
566
|
public async runCall(
|
|
494
567
|
call: CallParams,
|
|
495
568
|
blockNumberOrPending: BN | "pending"
|
|
@@ -544,7 +617,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
544
617
|
blockNumberOrPending?: BN | "pending"
|
|
545
618
|
): Promise<BN> {
|
|
546
619
|
if (blockNumberOrPending === undefined) {
|
|
547
|
-
blockNumberOrPending =
|
|
620
|
+
blockNumberOrPending = this.getLatestBlockNumber();
|
|
548
621
|
}
|
|
549
622
|
|
|
550
623
|
const account = await this._runInBlockContext(blockNumberOrPending, () =>
|
|
@@ -588,8 +661,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
588
661
|
return this._blockchain.getLatestBlock();
|
|
589
662
|
}
|
|
590
663
|
|
|
591
|
-
public
|
|
592
|
-
return
|
|
664
|
+
public getLatestBlockNumber(): BN {
|
|
665
|
+
return this._blockchain.getLatestBlockNumber();
|
|
593
666
|
}
|
|
594
667
|
|
|
595
668
|
public async getPendingBlockAndTotalDifficulty(): Promise<[Block, BN]> {
|
|
@@ -1319,7 +1392,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1319
1392
|
newestBlock: BN | "pending",
|
|
1320
1393
|
rewardPercentiles: number[]
|
|
1321
1394
|
): Promise<FeeHistory> {
|
|
1322
|
-
const latestBlock =
|
|
1395
|
+
const latestBlock = this.getLatestBlockNumber();
|
|
1323
1396
|
const pendingBlockNumber = latestBlock.addn(1);
|
|
1324
1397
|
|
|
1325
1398
|
const resolvedNewestBlock =
|
|
@@ -1996,7 +2069,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
1996
2069
|
return this._runInPendingBlockContext(action);
|
|
1997
2070
|
}
|
|
1998
2071
|
|
|
1999
|
-
if (blockNumberOrPending.eq(
|
|
2072
|
+
if (blockNumberOrPending.eq(this.getLatestBlockNumber())) {
|
|
2000
2073
|
return action();
|
|
2001
2074
|
}
|
|
2002
2075
|
|
|
@@ -2254,7 +2327,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2254
2327
|
filterParams: FilterParams,
|
|
2255
2328
|
isFilter: boolean
|
|
2256
2329
|
): Promise<FilterParams> {
|
|
2257
|
-
const latestBlockNumber =
|
|
2330
|
+
const latestBlockNumber = this.getLatestBlockNumber();
|
|
2258
2331
|
const newFilterParams = { ...filterParams };
|
|
2259
2332
|
|
|
2260
2333
|
if (newFilterParams.fromBlock === LATEST_BLOCK) {
|
|
@@ -2336,7 +2409,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu
|
|
|
2336
2409
|
|
|
2337
2410
|
private async _persistIrregularWorldState(): Promise<void> {
|
|
2338
2411
|
this._irregularStatesByBlockNumber.set(
|
|
2339
|
-
|
|
2412
|
+
this.getLatestBlockNumber().toString(),
|
|
2340
2413
|
await this._stateManager.getStateRoot()
|
|
2341
2414
|
);
|
|
2342
2415
|
}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
import Common from "@ethereumjs/common";
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import debug from "debug";
|
|
4
|
-
import { BN } from "ethereumjs-util";
|
|
5
|
-
import { EventEmitter } from "events";
|
|
6
|
-
import fsExtra from "fs-extra";
|
|
7
|
-
import semver from "semver";
|
|
8
|
-
|
|
9
1
|
import type {
|
|
10
2
|
Artifacts,
|
|
11
3
|
BoundExperimentalHardhatNetworkMessageTraceHook,
|
|
@@ -14,6 +6,15 @@ import type {
|
|
|
14
6
|
HardhatNetworkChainsConfig,
|
|
15
7
|
RequestArguments,
|
|
16
8
|
} from "../../../types";
|
|
9
|
+
|
|
10
|
+
import Common from "@ethereumjs/common";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import debug from "debug";
|
|
13
|
+
import { BN } from "ethereumjs-util";
|
|
14
|
+
import { EventEmitter } from "events";
|
|
15
|
+
import fsExtra from "fs-extra";
|
|
16
|
+
import semver from "semver";
|
|
17
|
+
|
|
17
18
|
import {
|
|
18
19
|
HARDHAT_NETWORK_RESET_EVENT,
|
|
19
20
|
HARDHAT_NETWORK_REVERT_SNAPSHOT_EVENT,
|
|
@@ -7,13 +7,19 @@ import { RpcLogOutput, RpcReceiptOutput } from "../output";
|
|
|
7
7
|
|
|
8
8
|
export interface HardhatBlockchainInterface extends BlockchainInterface {
|
|
9
9
|
addTransactionReceipts(receipts: RpcReceiptOutput[]): void;
|
|
10
|
+
reserveBlocks(
|
|
11
|
+
count: BN,
|
|
12
|
+
interval: BN,
|
|
13
|
+
previousBlockStateRoot: Buffer,
|
|
14
|
+
previousBlockTotalDifficulty: BN
|
|
15
|
+
): void;
|
|
10
16
|
deleteLaterBlocks(block: Block): void;
|
|
11
17
|
getBlockByTransactionHash(transactionHash: Buffer): Promise<Block | null>;
|
|
12
18
|
getLatestBlock(): Promise<Block>;
|
|
19
|
+
getLatestBlockNumber(): BN;
|
|
13
20
|
getLogs(filterParams: FilterParams): Promise<RpcLogOutput[]>;
|
|
14
21
|
getTotalDifficulty(blockHash: Buffer): Promise<BN>;
|
|
15
22
|
getTransactionReceipt(
|
|
16
23
|
transactionHash: Buffer
|
|
17
24
|
): Promise<RpcReceiptOutput | null>;
|
|
18
|
-
getBaseFee(): Promise<BN>;
|
|
19
25
|
}
|
|
@@ -19,7 +19,8 @@ import {
|
|
|
19
19
|
// TODO: This is a temporarily measure.
|
|
20
20
|
// We must investigate why this timeouts so much. Apparently
|
|
21
21
|
// node-fetch doesn't handle timeouts so well. The option was
|
|
22
|
-
// removed in its new major version.
|
|
22
|
+
// removed in its new major version. UPDATE: we aren't even using node-fetch
|
|
23
|
+
// anymore, so this really should be revisited.
|
|
23
24
|
const FORK_HTTP_TIMEOUT = 35000;
|
|
24
25
|
|
|
25
26
|
export async function makeForkClient(
|
|
@@ -779,7 +779,8 @@ export class ErrorInferrer {
|
|
|
779
779
|
func: ContractFunction
|
|
780
780
|
): SourceReference {
|
|
781
781
|
return {
|
|
782
|
-
|
|
782
|
+
sourceName: func.location.file.sourceName,
|
|
783
|
+
sourceContent: func.location.file.content,
|
|
783
784
|
contract: trace.bytecode.contract.name,
|
|
784
785
|
function: func.name,
|
|
785
786
|
line: func.location.getStartingLineNumber(),
|
|
@@ -837,7 +838,8 @@ export class ErrorInferrer {
|
|
|
837
838
|
): SourceReference {
|
|
838
839
|
const location = trace.bytecode.contract.location;
|
|
839
840
|
return {
|
|
840
|
-
|
|
841
|
+
sourceName: location.file.sourceName,
|
|
842
|
+
sourceContent: location.file.content,
|
|
841
843
|
contract: trace.bytecode.contract.name,
|
|
842
844
|
line: location.getStartingLineNumber(),
|
|
843
845
|
range: [location.offset, location.offset + location.length],
|
|
@@ -882,7 +884,8 @@ export class ErrorInferrer {
|
|
|
882
884
|
}
|
|
883
885
|
|
|
884
886
|
return {
|
|
885
|
-
|
|
887
|
+
sourceName: func.location.file.sourceName,
|
|
888
|
+
sourceContent: func.location.file.content,
|
|
886
889
|
contract: trace.bytecode.contract.name,
|
|
887
890
|
function: FALLBACK_FUNCTION_NAME,
|
|
888
891
|
line: func.location.getStartingLineNumber(),
|
|
@@ -931,7 +934,8 @@ export class ErrorInferrer {
|
|
|
931
934
|
: contract.location.getStartingLineNumber();
|
|
932
935
|
|
|
933
936
|
return {
|
|
934
|
-
|
|
937
|
+
sourceName: contract.location.file.sourceName,
|
|
938
|
+
sourceContent: contract.location.file.content,
|
|
935
939
|
contract: contract.name,
|
|
936
940
|
function: CONSTRUCTOR_FUNCTION_NAME,
|
|
937
941
|
line,
|
|
@@ -1182,7 +1186,8 @@ export class ErrorInferrer {
|
|
|
1182
1186
|
sourceReference: {
|
|
1183
1187
|
contract: trace.bytecode.contract.name,
|
|
1184
1188
|
function: FALLBACK_FUNCTION_NAME,
|
|
1185
|
-
|
|
1189
|
+
sourceName: location.file.sourceName,
|
|
1190
|
+
sourceContent: location.file.content,
|
|
1186
1191
|
line: location.getStartingLineNumber(),
|
|
1187
1192
|
range: [location.offset, location.offset + location.length],
|
|
1188
1193
|
},
|
|
@@ -1198,7 +1203,8 @@ export class ErrorInferrer {
|
|
|
1198
1203
|
sourceReference: {
|
|
1199
1204
|
contract: trace.bytecode.contract.name,
|
|
1200
1205
|
function: RECEIVE_FUNCTION_NAME,
|
|
1201
|
-
|
|
1206
|
+
sourceName: location.file.sourceName,
|
|
1207
|
+
sourceContent: location.file.content,
|
|
1202
1208
|
line: location.getStartingLineNumber(),
|
|
1203
1209
|
range: [location.offset, location.offset + location.length],
|
|
1204
1210
|
},
|
|
@@ -1326,7 +1332,8 @@ export class ErrorInferrer {
|
|
|
1326
1332
|
const defaultSourceReference: SourceReference = {
|
|
1327
1333
|
function: CONSTRUCTOR_FUNCTION_NAME,
|
|
1328
1334
|
contract: trace.bytecode.contract.name,
|
|
1329
|
-
|
|
1335
|
+
sourceName: location.file.sourceName,
|
|
1336
|
+
sourceContent: location.file.content,
|
|
1330
1337
|
line: location.getStartingLineNumber(),
|
|
1331
1338
|
range: [location.offset, location.offset + location.length],
|
|
1332
1339
|
};
|
|
@@ -1398,9 +1405,7 @@ export class ErrorInferrer {
|
|
|
1398
1405
|
private _solidity063CorrectLineNumber(
|
|
1399
1406
|
revertFrame: UnmappedSolc063RevertErrorStackTraceEntry
|
|
1400
1407
|
) {
|
|
1401
|
-
const
|
|
1402
|
-
|
|
1403
|
-
const lines = file.content.split("\n");
|
|
1408
|
+
const lines = revertFrame.sourceReference.sourceContent.split("\n");
|
|
1404
1409
|
|
|
1405
1410
|
const currentLine = lines[revertFrame.sourceReference.line - 1];
|
|
1406
1411
|
|
|
@@ -1689,7 +1694,8 @@ export function instructionToCallstackStackTraceEntry(
|
|
|
1689
1694
|
type: StackTraceEntryType.INTERNAL_FUNCTION_CALLSTACK_ENTRY,
|
|
1690
1695
|
pc: inst.pc,
|
|
1691
1696
|
sourceReference: {
|
|
1692
|
-
|
|
1697
|
+
sourceName: bytecode.contract.location.file.sourceName,
|
|
1698
|
+
sourceContent: bytecode.contract.location.file.content,
|
|
1693
1699
|
contract: bytecode.contract.name,
|
|
1694
1700
|
function: undefined,
|
|
1695
1701
|
line: bytecode.contract.location.getStartingLineNumber(),
|
|
@@ -1716,7 +1722,8 @@ export function instructionToCallstackStackTraceEntry(
|
|
|
1716
1722
|
sourceReference: {
|
|
1717
1723
|
function: undefined,
|
|
1718
1724
|
contract: bytecode.contract.name,
|
|
1719
|
-
|
|
1725
|
+
sourceName: inst.location!.file.sourceName,
|
|
1726
|
+
sourceContent: inst.location!.file.content,
|
|
1720
1727
|
line: inst.location!.getStartingLineNumber(),
|
|
1721
1728
|
range: [
|
|
1722
1729
|
inst.location!.offset,
|
|
@@ -1757,7 +1764,8 @@ function sourceLocationToSourceReference(
|
|
|
1757
1764
|
func.type === ContractFunctionType.FREE_FUNCTION
|
|
1758
1765
|
? undefined
|
|
1759
1766
|
: bytecode.contract.name,
|
|
1760
|
-
|
|
1767
|
+
sourceName: func.location.file.sourceName,
|
|
1768
|
+
sourceContent: func.location.file.content,
|
|
1761
1769
|
line: location.getStartingLineNumber(),
|
|
1762
1770
|
range: [location.offset, location.offset + location.length],
|
|
1763
1771
|
};
|
|
@@ -168,7 +168,7 @@ function encodeStackTraceEntry(
|
|
|
168
168
|
|
|
169
169
|
case StackTraceEntryType.INTERNAL_FUNCTION_CALLSTACK_ENTRY:
|
|
170
170
|
return new SolidityCallSite(
|
|
171
|
-
stackTraceEntry.sourceReference.
|
|
171
|
+
stackTraceEntry.sourceReference.sourceName,
|
|
172
172
|
stackTraceEntry.sourceReference.contract,
|
|
173
173
|
`internal@${stackTraceEntry.pc}`,
|
|
174
174
|
undefined
|
|
@@ -205,7 +205,7 @@ function sourceReferenceToSolidityCallsite(
|
|
|
205
205
|
sourceReference: SourceReference
|
|
206
206
|
): SolidityCallSite {
|
|
207
207
|
return new SolidityCallSite(
|
|
208
|
-
sourceReference.
|
|
208
|
+
sourceReference.sourceName,
|
|
209
209
|
sourceReference.contract,
|
|
210
210
|
sourceReference.function !== undefined
|
|
211
211
|
? sourceReference.function
|
|
@@ -2,7 +2,7 @@ import { BN } from "ethereumjs-util";
|
|
|
2
2
|
|
|
3
3
|
import { ReturnData } from "../provider/return-data";
|
|
4
4
|
|
|
5
|
-
import { ContractFunctionType
|
|
5
|
+
import { ContractFunctionType } from "./model";
|
|
6
6
|
|
|
7
7
|
export enum StackTraceEntryType {
|
|
8
8
|
CALLSTACK_ENTRY,
|
|
@@ -42,7 +42,8 @@ export const PRECOMPILE_FUNCTION_NAME = "<precompile>";
|
|
|
42
42
|
export const UNRECOGNIZED_CONTRACT_NAME = "<UnrecognizedContract>";
|
|
43
43
|
|
|
44
44
|
export interface SourceReference {
|
|
45
|
-
|
|
45
|
+
sourceName: string;
|
|
46
|
+
sourceContent: string;
|
|
46
47
|
contract?: string;
|
|
47
48
|
function?: string;
|
|
48
49
|
line: number;
|
|
@@ -178,7 +178,7 @@ export class CompilerDownloader {
|
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
public async getCompilerBuild(version: string): Promise<CompilerBuild> {
|
|
181
|
-
const platform = this.
|
|
181
|
+
const platform = this._getCurrentPlatform();
|
|
182
182
|
|
|
183
183
|
if (await this._versionExists(version, platform)) {
|
|
184
184
|
try {
|
|
@@ -191,7 +191,9 @@ export class CompilerDownloader {
|
|
|
191
191
|
return this._getCompilerBuildByPlatform(version, CompilerPlatform.WASM);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
public async downloadCompilersList(
|
|
194
|
+
public async downloadCompilersList(
|
|
195
|
+
platform: CompilerPlatform = this._getCurrentPlatform()
|
|
196
|
+
) {
|
|
195
197
|
try {
|
|
196
198
|
await this._download(
|
|
197
199
|
getCompilerListURL(platform),
|
|
@@ -295,7 +297,7 @@ export class CompilerDownloader {
|
|
|
295
297
|
return fsExtra.pathExists(filePath);
|
|
296
298
|
}
|
|
297
299
|
|
|
298
|
-
private
|
|
300
|
+
private _getCurrentPlatform(): CompilerPlatform {
|
|
299
301
|
if (this._forceSolcJs) {
|
|
300
302
|
return CompilerPlatform.WASM;
|
|
301
303
|
}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import fsExtra from "fs-extra";
|
|
3
|
-
import HttpsProxyAgent from "https-proxy-agent";
|
|
4
3
|
import path from "path";
|
|
5
4
|
import util from "util";
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
timeout: number;
|
|
9
|
-
agent?: undefined | HttpsProxyAgent.HttpsProxyAgent;
|
|
10
|
-
}
|
|
6
|
+
import { getHardhatVersion } from "./packageInfo";
|
|
11
7
|
|
|
12
8
|
const TEMP_FILE_PREFIX = "tmp-";
|
|
13
9
|
|
|
10
|
+
const hardhatVersion = getHardhatVersion();
|
|
11
|
+
|
|
14
12
|
function resolveTempFileName(filePath: string): string {
|
|
15
13
|
const { dir, ext, name } = path.parse(filePath);
|
|
16
14
|
|
|
@@ -27,34 +25,33 @@ export async function download(
|
|
|
27
25
|
timeoutMillis = 10000
|
|
28
26
|
) {
|
|
29
27
|
const { pipeline } = await import("stream");
|
|
30
|
-
const {
|
|
28
|
+
const { getGlobalDispatcher, ProxyAgent, request } = await import("undici");
|
|
31
29
|
const streamPipeline = util.promisify(pipeline);
|
|
32
|
-
const fetchOptions: FetchOptions = {
|
|
33
|
-
timeout: timeoutMillis,
|
|
34
|
-
agent: undefined,
|
|
35
|
-
};
|
|
36
30
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
fetchOptions.agent = new HttpsProxyAgent.HttpsProxyAgent(proxy);
|
|
42
|
-
}
|
|
31
|
+
function chooseDispatcher() {
|
|
32
|
+
if (process.env.HTTPS_PROXY !== undefined) {
|
|
33
|
+
return new ProxyAgent(process.env.HTTPS_PROXY);
|
|
34
|
+
}
|
|
43
35
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// Create the proxy from the environment variables
|
|
50
|
-
const proxy: string = process.env.HTTP_PROXY;
|
|
51
|
-
fetchOptions.agent = new HttpsProxyAgent.HttpsProxyAgent(proxy);
|
|
36
|
+
if (process.env.HTTP_PROXY !== undefined) {
|
|
37
|
+
return new ProxyAgent(process.env.HTTP_PROXY);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return getGlobalDispatcher();
|
|
52
41
|
}
|
|
53
42
|
|
|
54
43
|
// Fetch the url
|
|
55
|
-
const response = await
|
|
44
|
+
const response = await request(url, {
|
|
45
|
+
dispatcher: chooseDispatcher(),
|
|
46
|
+
headersTimeout: timeoutMillis,
|
|
47
|
+
maxRedirections: 10,
|
|
48
|
+
method: "GET",
|
|
49
|
+
headers: {
|
|
50
|
+
"User-Agent": `hardhat ${hardhatVersion}`,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
56
53
|
|
|
57
|
-
if (response.
|
|
54
|
+
if (response.statusCode >= 200 && response.statusCode <= 299) {
|
|
58
55
|
const tmpFilePath = resolveTempFileName(filePath);
|
|
59
56
|
await fsExtra.ensureDir(path.dirname(filePath));
|
|
60
57
|
|
|
@@ -62,12 +59,10 @@ export async function download(
|
|
|
62
59
|
return fsExtra.move(tmpFilePath, filePath, { overwrite: true });
|
|
63
60
|
}
|
|
64
61
|
|
|
65
|
-
// Consume the response stream and discard its result
|
|
66
|
-
// See: https://github.com/node-fetch/node-fetch/issues/83
|
|
67
|
-
const _discarded = await response.arrayBuffer();
|
|
68
|
-
|
|
69
62
|
// eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error
|
|
70
63
|
throw new Error(
|
|
71
|
-
`Failed to download ${url} - ${
|
|
64
|
+
`Failed to download ${url} - ${
|
|
65
|
+
response.statusCode
|
|
66
|
+
} received. ${await response.body.text()}`
|
|
72
67
|
);
|
|
73
68
|
}
|
|
@@ -3,14 +3,15 @@ import type { HDKey as HDKeyT } from "ethereum-cryptography/hdkey";
|
|
|
3
3
|
|
|
4
4
|
export function deriveKeyFromMnemonicAndPath(
|
|
5
5
|
mnemonic: string,
|
|
6
|
-
hdPath: string
|
|
6
|
+
hdPath: string,
|
|
7
|
+
passphrase: string
|
|
7
8
|
): Buffer | undefined {
|
|
8
9
|
const {
|
|
9
10
|
mnemonicToSeedSync,
|
|
10
11
|
}: {
|
|
11
12
|
mnemonicToSeedSync: typeof mnemonicToSeedSyncT;
|
|
12
13
|
} = require("ethereum-cryptography/bip39");
|
|
13
|
-
const seed = mnemonicToSeedSync(mnemonic);
|
|
14
|
+
const seed = mnemonicToSeedSync(mnemonic, passphrase);
|
|
14
15
|
|
|
15
16
|
const {
|
|
16
17
|
HDKey,
|
package/src/types/config.ts
CHANGED
|
@@ -75,6 +75,7 @@ export interface HardhatNetworkHDAccountsUserConfig {
|
|
|
75
75
|
count?: number;
|
|
76
76
|
path?: string;
|
|
77
77
|
accountsBalance?: string;
|
|
78
|
+
passphrase?: string;
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
export interface HDAccountsUserConfig {
|
|
@@ -82,6 +83,7 @@ export interface HDAccountsUserConfig {
|
|
|
82
83
|
initialIndex?: number;
|
|
83
84
|
count?: number;
|
|
84
85
|
path?: string;
|
|
86
|
+
passphrase?: string;
|
|
85
87
|
}
|
|
86
88
|
|
|
87
89
|
export interface HardhatNetworkForkingUserConfig {
|
|
@@ -167,6 +169,7 @@ export interface HardhatNetworkHDAccountsConfig {
|
|
|
167
169
|
count: number;
|
|
168
170
|
path: string;
|
|
169
171
|
accountsBalance: string;
|
|
172
|
+
passphrase: string;
|
|
170
173
|
}
|
|
171
174
|
|
|
172
175
|
export interface HardhatNetworkForkingConfig {
|
|
@@ -197,6 +200,7 @@ export interface HttpNetworkHDAccountsConfig {
|
|
|
197
200
|
initialIndex: number;
|
|
198
201
|
count: number;
|
|
199
202
|
path: string;
|
|
203
|
+
passphrase: string;
|
|
200
204
|
}
|
|
201
205
|
|
|
202
206
|
export interface HardhatNetworkMiningConfig {
|
package/types/config.d.ts
CHANGED
|
@@ -46,12 +46,14 @@ export interface HardhatNetworkHDAccountsUserConfig {
|
|
|
46
46
|
count?: number;
|
|
47
47
|
path?: string;
|
|
48
48
|
accountsBalance?: string;
|
|
49
|
+
passphrase?: string;
|
|
49
50
|
}
|
|
50
51
|
export interface HDAccountsUserConfig {
|
|
51
52
|
mnemonic: string;
|
|
52
53
|
initialIndex?: number;
|
|
53
54
|
count?: number;
|
|
54
55
|
path?: string;
|
|
56
|
+
passphrase?: string;
|
|
55
57
|
}
|
|
56
58
|
export interface HardhatNetworkForkingUserConfig {
|
|
57
59
|
enabled?: boolean;
|
|
@@ -115,6 +117,7 @@ export interface HardhatNetworkHDAccountsConfig {
|
|
|
115
117
|
count: number;
|
|
116
118
|
path: string;
|
|
117
119
|
accountsBalance: string;
|
|
120
|
+
passphrase: string;
|
|
118
121
|
}
|
|
119
122
|
export interface HardhatNetworkForkingConfig {
|
|
120
123
|
enabled: boolean;
|
|
@@ -140,6 +143,7 @@ export interface HttpNetworkHDAccountsConfig {
|
|
|
140
143
|
initialIndex: number;
|
|
141
144
|
count: number;
|
|
142
145
|
path: string;
|
|
146
|
+
passphrase: string;
|
|
143
147
|
}
|
|
144
148
|
export interface HardhatNetworkMiningConfig {
|
|
145
149
|
auto: boolean;
|
package/types/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/types/config.ts"],"names":[],"mappings":";AAcA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAI1C,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACtD;AAED,oBAAY,iBAAiB,GACzB,wBAAwB,GACxB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,yBAAyB;IACxC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAoB;CACnD;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,CAAC,EAAE,yBAAyB,CAAC;CAC7C;AAED,MAAM,WAAW,8BAA8B;IAC7C,CAAC,OAAO,EAAE,MAAM,GAAG,6BAA6B,CAAC;CAClD;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,QAAQ,CAAC,EAAE,gCAAgC,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,+BAA+B,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;CACzC;AAED,oBAAY,gCAAgC,GACxC,+BAA+B,EAAE,GACjC,kCAAkC,CAAC;AAEvC,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/types/config.ts"],"names":[],"mappings":";AAcA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAI1C,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACtD;AAED,oBAAY,iBAAiB,GACzB,wBAAwB,GACxB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,yBAAyB;IACxC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAoB;CACnD;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,CAAC,EAAE,yBAAyB,CAAC;CAC7C;AAED,MAAM,WAAW,8BAA8B;IAC7C,CAAC,OAAO,EAAE,MAAM,GAAG,6BAA6B,CAAC;CAClD;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,QAAQ,CAAC,EAAE,gCAAgC,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,+BAA+B,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;CACzC;AAED,oBAAY,gCAAgC,GACxC,+BAA+B,EAAE,GACjC,kCAAkC,CAAC;AAEvC,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oBAAY,6BAA6B,GACrC,QAAQ,GACR,MAAM,EAAE,GACR,oBAAoB,CAAC;AAEzB,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,6BAA6B,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,iBAAiB,CAAC;IAE7B,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAAC;CACtC;AAED,oBAAY,aAAa,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAErE,oBAAY,qBAAqB,GAAG,GAAG,CAClB,MAAM,EACP,MAAM,CACzB,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,eAAe,EAAE,qBAAqB,CAAC;CACxC;AAED,oBAAY,0BAA0B,GAAG,GAAG,CAC5B,MAAM,EACpB,yBAAyB,CAC1B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,0BAA0B,CAAC;IACnC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,EAAE,CAAC;IAChB,0BAA0B,EAAE,OAAO,CAAC;IACpC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,0BAA0B,EAAE,OAAO,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,2BAA2B,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,0BAA0B,CAAC;CACpC;AAED,oBAAY,4BAA4B,GACpC,8BAA8B,GAC9B,2BAA2B,EAAE,CAAC;AAElC,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACxC,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED,oBAAY,yBAAyB,GACjC,QAAQ,GACR,MAAM,EAAE,GACR,2BAA2B,CAAC;AAEhC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,2BAA2B,CAAC;CACtC;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAKD,oBAAY,kBAAkB,GAAG,MAAM,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC;AAID,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;CAC3B;AAID,oBAAY,cAAc,GAAG,CAC3B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KACpC,IAAI,CAAC"}
|