{"assessments":[],"deployments":[{"attestationHash":"d6f9973af55980729e46904cdb4190e893241a9fb2c96a91c1c58768b3c73f73","chainId":1,"contracts":[{"address":"0x1999a54f573dac75ce8ef62a555dba418c9b3d10","blockNumber":26181997,"name":"StackReceiver","role":"other","txHash":"0x6a97c361022c133cd5b07a1f60c61292bf2430e4d605ddeb420502059bc47769"}],"id":"f1930490-27fb-49fd-b15c-9cc891fc9f19","manifestHash":"49a0d1a86dbb5e42be9a9af1d1b04bf328517acf938a1199ad1c03f5732963be","status":"live"}],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"909db3b6-eafd-4034-b0b9-bd27c3c09ee7","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"153008c81cc2daeface412a7141d9cbcecca6440c764768507d6faa7d1cfe91d","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"05f9ea6ff2d62796794165de50721db327394283582f733059aa9e6ddadd82fa","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"584a2884ff130286d7bf0676df63d05895803aba34a4718e5b0a0afb4495bfbf","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"8d4464bfc7d889f12224b7d51073ae61a5c28ab5e86ef6b03447de702a278af1","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"053d4393a65397f0a8c4aa0786bd5544be2f64384d2f7e6e4e809d3604fe2ccb","dependsOn":["adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"420881718ffbd96cf3b90b6931b3c7cb48ec29a6fac9a74629581e4767cdfab7","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"a51ebcf02e6e349f6318a3e65e3874d747a29ba81322ff6f667358b5e1499e99","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"d4af0049b8515a3687d06d8ed4bbd57b8b6568bb6d137a4b03f22a45aa073703","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"2a6a25ea14fad552f03bc99e7189a5955596fe805c7e130e91a18e13cc3757bb","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Launch imd/acc's StackReceiver on Ethereum mainnet from this repository (the launch-mainnet branch, which is main without .github/workflows; do not add any workflow file): deploy only the StackReceiver, exactly as launch.json lists it, on Ethereum mainnet, wired to the real IMD, the real sIMD vault and LayerZero's endpoint. It is the Ethereum end of imd/acc's multichain route: cashback paid on other chains (Robinhood Chain first) waits in a RemoteStacker there and reaches the trader as staked IMD on Ethereum through IMD's own LayerZero bridge. imd/acc pays trading cashback to traders as staked IMD (sIMD), 0.25% to 1% of each trade at each project's choice, funded from the project's existing fees; only credits from listed projects earn points. The live mainnet Stacker (0x06909f672301f28a810f78cfe7a754851269f4f0, launch #1409) and ProjectRegistry (0x7f53fa1543c682bb5de3f50c2cf3d1842ae57faa, launch #1495) are not redeployed and not touched.\n\nDEPLOY (Ethereum mainnet, one contract):\n- StackReceiver(imd, sImd, endpoint) = (0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 IMD, 0x9efa934d9fad4ae28c998a40195646b965a97247 sIMD, 0x1a44076050125825900e736c501f859c50fE728c LayerZero EndpointV2 on Ethereum, eid 30101). launch.json already lists exactly this.\n- src/multichain/StackReceiver.sol and src/multichain/LayerZero.sol stay as they are: no owner; the constructor makes no external call. IMD is a standard LayerZero OFT (oftVersion 0x02e49c2c, 1; 6 shared decimals; peered with Robinhood Chain, eid 30416). When a RemoteStacker on another chain flushes waiting cashback, it calls IMD's send with this contract as recipient and a compose message, abi.encode(address[] traders, uint256[] amounts). On Ethereum, IMD's lzReceive mints the amount to this contract and queues the compose at the endpoint; an executor then calls the endpoint's lzCompose, which calls this contract's lzCompose(from, guid, message, executor, extraData). The contract accepts that call only from the endpoint (NotEndpoint) and only with from == IMD (NotIMD); it decodes the OFT compose message (nonce, srcEid, amountLD, composeFrom, composeMsg), requires the listed amounts to add up exactly to amountLD (AmountMismatch) and the two lists to be non-empty and equal in length (BadList), checks sIMD.asset() == IMD and approves the vault once on the first delivery (AssetMismatch), then deposits each amount into sIMD for its trader (Delivered(guid, srcEid, trader, imd, shares)); a deposit the vault refuses or that mints zero shares pays that trader plain IMD instead (DeliveredPlain), so one trader never holds up a delivery. It keeps no IMD after a delivery; deliveredFrom(srcEid) and totalDelivered count the IMD delivered. Whoever sends a message pays out only the IMD that came with it: the amount in the message is written by the IMD token itself, and a sender that lies about its list can only lose its own IMD; composeFrom is not trusted and not needed. nonReentrant; OpenZeppelin SafeERC20.\n- The RemoteStacker (src/multichain/RemoteStacker.sol) is the other end, launched later on Robinhood Chain with this contract's address; it is not deployed here.\n- test/mocks (MockOFT, MockEndpoint, TestIMD, TestSIMD, MockIntake) and test/trial hold test doubles and trial contracts only. Keep foundry.toml as it is (solc 0.8.26, cancun, 10,000 runs, bytecode_hash none).\n\nFACTS (read on chain 2026-10-13, Ethereum block 26,181,154): IMD's endpoint() is 0x1a44...728c (eid 30101), peers(30416) is Robinhood Chain's IMD 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, decimalConversionRate 1e12 (amounts cross in steps of 0.000001 IMD), msgInspector none, enforced options only for plain sends (60k gas), so a send-and-call carries its own gas options: the RemoteStacker asks 250,000 for lzReceive and 200,000 + 80,000 per trader for lzCompose. sIMD: owner renounced, not paused. Mainnet fork with the live IMD, vault and endpoint (test/StackReceiverMainnetFork.t.sol, the arrival played exactly as the live contracts do: IMD's lzReceive called by the endpoint, then the endpoint's lzCompose called by an executor): IMD's lzReceive uses 98k gas for one trader and 158k for fifty; the compose delivery 225k for one trader, 685k for ten and 3.08M for fifty, within the budget above; a second delivery of the same compose is refused by the endpoint; the receiver's runtime is 4,154 bytes.\n\nTESTS: forge test passes (292 tests: 270 run offline; 20 fork tests run when ETH_RPC_URL, SEPOLIA_RPC_URL and ROBINHOOD_RPC_URL are set; 2 Stacker-manifest checks skip because this launch.json lists the receiver). test/StackReceiver.t.sol (the checks, deposits, the paused-vault fallback, stray IMD never spent), test/MultichainFlow.t.sol (the whole route through the mocks, with the invariants that the RemoteStacker holds exactly what is waiting and the receiver keeps nothing), test/StackReceiverMainnetFork.t.sol (the live contracts), test/Deployment.t.sol (this manifest, the empty-chain rehearsal, EIP-170 and forbidden opcodes). Keep all of them passing.\n\nREADME: once live, add the receiver's address to the Ethereum mainnet Deployments table.","parentJobId":null,"planHash":"60bb068b522ca8b67775935f4f7cf639aa123735a59b02c5b8d212a325c585bd","previousHash":"9509060fa29eb8c5110bb7b583dd3c82ccc9e798708b323dfe29ac9836a83bce","projectId":"909db3b6-eafd-4034-b0b9-bd27c3c09ee7","publication":{"commit":"ae6222edfa550b51a73d524ab763731d1ea54746","deliveredAt":"2026-10-13T07:12:31.313Z","repoUrl":"https://github.com/identity-md-launches/launch-1529-launch-imd-acc-s-stackreceiver-ethereum"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"92117112a025927c9036ae6d55aa2f65002dfd7a0cd15e155ac99ab5f3d02e88","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"76f57db4177175be","findings":[{"citation":"resolved","description":"Merged from audit_math (reproduced). `_plan` charges the flusher's tip on the whole waiting balance `w`, then rounds the delivered amount down to the bridge step (1e12 wei). The part below the step is not delivered: it stays in `waiting[r]` (flush, lines 229-231), already tipped once. The next credit merges it into the new balance and the next flush computes `w * tipBps / BPS` over it again, so the same wei are tipped twice (and again if dust remains). The NatSpec (lines 25-26: 'at most 2% ... The trader always receives at least 98%') and testFuzz_flush_conservesEveryWei (`tip <= (a+b)*200/10_000`) only hold for a single flush. Absolute size is bounded by 2% of one step per flush and recipient (<= 2e10 wei = 0.00000002 IMD) and the flusher pays the LayerZero fee, so there is no profitable extraction: a broken stated guarantee, systematic for micro-IMD cashback, hence low. RemoteStacker is not the contract this manifest deploys (it is the Robinhood Chain sender), but its arithmetic is the one the receiver's AmountMismatch check depends on and flush is a listed entry point. Minimal fix preserving the design: tip only the deliverable (step-rounded) amount, e.g. `uint256 deliverable = w / step * step; share = deliverable * tipBps(r) / BPS; amount = (deliverable - share) / step * step;` so dust is never tipped before it is delivered.","line":259,"path":"src/multichain/RemoteStacker.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {RemoteStacker} from \"src/multichain/RemoteStacker.sol\";\nimport {MockOFT} from \"test/mocks/MockOFT.sol\";\n\n/// Dust left waiting after a flush (below the 1e12 bridge step) is tipped again on the next flush,\n/// so across two flushes the tip exceeds 2% of everything credited and the trader ends below 98%.\n/// This test FAILS on the current code (it asserts the documented guarantee) and passes once the\n/// tip is computed only on the deliverable (step-rounded) amount.\ncontract DustRetipTest is Test {\n    MockOFT imd;\n    RemoteStacker rs;\n    address alice = address(0xA11CE);\n    address flusher = address(0xF1);\n\n    function setUp() public {\n        imd = new MockOFT();\n        rs = new RemoteStacker(imd, address(0xBEEF), address(0xCAFE), 30101);\n        imd.mint(address(this), 1e24);\n        imd.approve(address(rs), type(uint256).max);\n        vm.deal(flusher, 1 ether);\n        vm.warp(1_000_000);\n    }\n\n    function one(address a) internal pure returns (address[] memory l) {\n        l = new address[](1);\n        l[0] = a;\n    }\n\n    function test_tipNeverAboveTwoPercentAcrossFlushes() public {\n        uint256 c = 1_030_000_000_000; // 1.03e12 wei = 0.00000103 IMD\n        rs.credit(alice, c);\n        vm.warp(block.timestamp + 12 hours);\n        (uint256 out1, uint256 tip1,,,) = rs.quoteFlush(one(alice));\n        vm.prank(flusher);\n        rs.flush{value: 0.001 ether}(one(alice));\n\n        rs.credit(alice, c);\n        vm.warp(block.timestamp + 12 hours);\n        (uint256 out2, uint256 tip2,,,) = rs.quoteFlush(one(alice));\n        vm.prank(flusher);\n        rs.flush{value: 0.001 ether}(one(alice));\n\n        uint256 credited = 2 * c;\n        // Documented: the tip is at most 2% and the trader always receives at least 98%.\n        assertLe(tip1 + tip2, credited * 200 / 10_000, \"tips above 2% of all cashback credited\");\n        assertGe(out1 + out2 + rs.waiting(alice), credited * 9_800 / 10_000, \"trader below 98%\");\n    }\n}","reproduction":"MockOFT (decimalConversionRate 1e12), RemoteStacker rs, project credits alice. 1. credit(alice, 1_030_000_000_000); warp +12h (tipBps = 200). 2. flush([alice]): share = 1.03e12*200/10_000 = 20_600_000_000; amount = (1.03e12 - 2.06e10)/1e12*1e12 = 1e12; waiting[alice] = 9_400_000_000 (dust, already tipped). 3. credit(alice, 1_030_000_000_000); warp +12h. 4. flush([alice]): w = 1.0394e12; share = 20_788_000_000 (188_000_000 of it on the dust tipped in step 2); amount = 1e12; waiting = 18_612_000_000. Totals: credited 2_060_000_000_000; tips 41_388_000_000. Expected: tips <= 2% of credited = 41_200_000_000 and delivered + waiting >= 98% = 2_018_800_000_000. Actual: tips 41_388_000_000 (> 2%), delivered + waiting = 2_018_612_000_000 (97.99%). The attached proof fails on this tree with 'tips above 2% of all cashback credited: 41388000000 > 41200000000' (run: forge test --match-path test/scratch/Proof_1d1b29ee525f.t.sol).","severity":"low","snippet":"            uint256 share = w * tipBps(r) / BPS;\n            uint256 amount = (w - share) / step * step; // dust below the bridge step stays waiting","title":"RemoteStacker tips sub-step dust again on every later flush, so the trader's share drops below the documented 98%"},{"citation":"resolved","description":"Merged from audit_permissions (reproduced). `credit` keeps the waiting clock as the amount-weighted average of raw arrival times, while `tipBps` (lines 177-182) is a linear ramp capped at TIP_PERIOD. The average preserves the sum of tips only while every component is below the cap. Once the old balance has waited longer than 12 hours, its real age counts in full in the average, so the merged clock lands at or beyond 12 hours and the whole merged balance, including IMD credited in this very block, immediately pays TIP_BPS. The comment above the line ('new cashback never inherits an old clock') is false whenever the old cashback is past the cap. The gainer is whoever calls flush (permissionless); a rational flusher waits past 12 hours for a large second credit instead of flushing. The trader still receives at least 98% of the total, so impact is bounded at 2% of the newest credit per recipient: low. Belongs to the RemoteStacker (Robinhood Chain launch), not the StackReceiver this manifest deploys. Minimal fix preserving the design: average with capped ages (use min(block.timestamp - waitingSince, TIP_PERIOD) as the old balance's age when merging), or accrue the tip per credit; both keep the 2% cap and the linear ramp below it. test_credit_clockIsAmountWeighted only merges credits below the cap and never reaches this branch.","line":136,"path":"src/multichain/RemoteStacker.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {RemoteStacker} from \"src/multichain/RemoteStacker.sol\";\nimport {MockOFT} from \"test/mocks/MockOFT.sol\";\n\n/// A credit merged into a balance that has already waited past TIP_PERIOD lands the merged clock at\n/// or beyond the cap, so the fresh cashback pays the full 2% tip after waiting zero seconds. The\n/// documented rule (\"2% per 12 hours waited, at most 2%\") gives 20e18 for 1000e18 waited 24h plus\n/// 1000e18 waited 0s. This test FAILS on the current code (the tip is 40e18) and passes once the\n/// merged clock is computed from capped ages (or the tip is accrued per credit).\ncontract TipClockCapTest is Test {\n    MockOFT imd;\n    RemoteStacker rs;\n    address alice = address(0xA11CE);\n\n    function setUp() public {\n        imd = new MockOFT();\n        rs = new RemoteStacker(imd, address(0xBEEF), address(0xCAFE), 30101);\n        imd.mint(address(this), 1e24);\n        imd.approve(address(rs), type(uint256).max);\n        vm.warp(1_000_000);\n    }\n\n    function one(address a) internal pure returns (address[] memory l) {\n        l = new address[](1);\n        l[0] = a;\n    }\n\n    function test_freshCashbackIsNotTippedAtTheCap() public {\n        rs.credit(alice, 1000e18);\n        vm.warp(block.timestamp + 24 hours);\n        assertEq(rs.tipBps(alice), 200, \"old cashback is at the cap\");\n        rs.credit(alice, 1000e18); // waited 0 seconds\n        (, uint256 tip,,,) = rs.quoteFlush(one(alice));\n        // 2% of the 1000e18 that waited >= 12h, nothing on the 1000e18 that waited 0s.\n        assertLe(tip, 20e18, \"tip charged on cashback that has not waited\");\n    }\n}","reproduction":"MockOFT (decimalConversionRate 1e12); RemoteStacker(imd, receiver, vault, 30101). t0: credit(alice, 1000e18) -> waiting 1000e18, waitingSince t0. Warp to t0+24h: tipBps(alice) = 200 (a flush now would tip 20e18). credit(alice, 1000e18) at t0+24h -> waitingSince = (t0*1000e18 + (t0+24h)*1000e18)/2000e18 = t0+12h; waiting 2000e18. Same block, quoteFlush([alice]) / flush([alice]): tipBps = 200 (waited 12h >= TIP_PERIOD), share = 2000e18*200/10_000 = 40e18, alice delivered 1960e18. Expected under '2% per 12 hours waited': 20e18 (old) + 0 (new, waited 0s) = 20e18 and 1980e18 delivered. Actual: 40e18 tip, 1960e18 delivered. The attached proof fails on this tree with 'tip charged on cashback that has not waited: 40000000000000000000 > 20000000000000000000' (run: forge test --match-path test/scratch/TipClockCap.t.sol).","severity":"low","snippet":"        waitingSince[recipient] = uint64(\n            (uint256(waitingSince[recipient]) * before + block.timestamp * imdAmount)\n                / (before + imdAmount)\n        );","title":"RemoteStacker: a credit merged into a balance past the 12h cap pays the full 2% tip on IMD that has waited zero seconds"},{"citation":"resolved","description":"Merged from audit_flow (reproduced by reading the inequality). test_fork_gasBudgetCoversOneTenAndFiftyTraders is the only check that the RemoteStacker's lzCompose gas option (COMPOSE_BASE_GAS + COMPOSE_GAS_PER_TRADER * n, the gas the LayerZero executor gives endpoint.lzCompose) covers a live delivery. The message says it keeps a 20% margin, but assertLt(composeGas * 10 / 12, budget) is equivalent to composeGas < 1.2 * budget: it still passes when the budget is up to ~17% BELOW the gas the delivery needs, in which case every executor delivery runs out of gas and the compose stays queued until someone retries it by hand with more gas. The intended check is budget >= 1.2 * composeGas, i.e. assertLe(composeGas * 12 / 10, base + per * n). With the measurements the brief states (225k / 685k / 3.08M gas for 1 / 10 / 50 traders against 280k / 1,000k / 4,200k budgets) the corrected assertion also passes, so the live constants are fine today; the defect is that this test cannot catch a future regression of those constants or of the receiver's gas. Related caveat in the same test (line 174): receiveGas is measured on IMD.lzReceive called directly with vm.prank(ENDPOINT), while the RECEIVE_GAS option is applied to endpoint.lzReceive, which adds the endpoint's nonce and payload-hash bookkeeping (roughly 20-30k gas); 158k plus that is still under 250k, so no live impact, but the margin is smaller than the logged figures suggest. Test-only defect: low.","line":175,"path":"test/StackReceiverMainnetFork.t.sol","reproduction":"Arithmetic on the assertion as written, with the 50-trader figures: composeGas = 3_297_211 (a fork measurement; the brief's own 3.08M gives the same result) and a hypothetical under-budget of 3_000_000 (COMPOSE_GAS_PER_TRADER = 56_000). Expected from a test that 'keeps a 20% margin': fail, since 3_000_000 < 1.2 * 3_297_211 = 3_956_653. Actual: assertLt(3_297_211 * 10 / 12 = 2_747_675, 3_000_000) passes, although endpoint.lzCompose{gas: 3_000_000} would revert out of gas and receiver.totalDelivered() would stay 0. With the current budget (4_200_000) both the written and the corrected assertion pass, which is why the suite is green. Fix: assertLe(composeGas * 12 / 10, base + per * n, ...).","severity":"low","snippet":"            assertLt(composeGas * 10 / 12, base + per * n, \"the compose budget keeps a 20% margin\");","title":"Fork gas-budget assertion is inverted: it accepts a compose gas budget up to ~17% below the measured delivery gas"},{"citation":"resolved","description":"Merged from audit_economics (reproduced). The live Stacker refuses trader == Stacker/sIMD/IMD/0 (Stacker.sol:79-82) because shares minted there can never move. The receiver has no such check and relies on the RemoteStacker refusing those addresses (RemoteStacker.sol:114-117, 150-153). But any IMD holder on Robinhood Chain can call IMD.send with the receiver as recipient and an arbitrary compose list, bypassing the RemoteStacker. The vault (Solady ERC4626 with a decimals offset of 6) previews > 0 shares for every amount >= 1 wei and its _mint has no zero-address check, so deposit(amount, receiver), deposit(amount, vault) and deposit(amount, address(0)) all succeed and the counters count them as delivered. Impact: only the sender's own IMD is lost (the AmountMismatch check guarantees no other IMD is spent), which is exactly the brief's stated design ('a sender that lies about its list can only lose its own IMD'), so this is informational, not a defect. It does break the suite's invariant sImd.balanceOf(receiver) == 0 (MultichainFlow.t.sol:170) for a hostile sender, which no test exercises. A one-line guard mirroring the Stacker (pay plain or skip for trader in {this, SIMD, IMD, 0}) would close the asymmetry without changing the agreed design; for address(0) the plain-IMD fallback would itself revert (OpenZeppelin ERC20 refuses transfer to zero), so skipping or leaving the amount is the safer shape.","line":129,"path":"src/multichain/StackReceiver.sol","reproduction":"Fresh StackReceiver(imd, sImd, endpoint) with MockOFT, TestSIMD (the mainnet vault's code) and MockEndpoint. Three deliveries via MockEndpoint.deliver(imd, receiver, guid, nonce, 30416, 1e18, anySender, abi.encode([t], [1e18]), 2_000_000) with t = address(receiver), address(sImd), address(0). Expected by the Stacker's rule: refused or paid plain. Actual: each delivery succeeds; sImd.balanceOf(receiver) == 1e24, sImd.balanceOf(sImd) == 1e24, sImd.balanceOf(address(0)) == 1e24, receiver.totalDelivered() == 3e18, imd.balanceOf(receiver) == 0. Verified with a scratch test (test/scratch/Repro.t.sol, test_receiverDepositsForInvalidTraders, not kept).","severity":"info","snippet":"            uint256 shares = _tryDeposit(amount, traders[i]);","title":"StackReceiver deposits for any listed address, including itself, the vault and address(0): a hostile compose strands sIMD, unlike Stacker.credit's InvalidTrader guard"},{"citation":"resolved","description":"Merged from audit_economics; recorded as a privileged-power trust assumption, not a defect in the receiver. The receiver's only trust roots are the endpoint and the IMD token (lines 86-87), and it has no other way to receive or release funds. The same OFT owner on each chain can, at any time: setPeer(30416, 0) on Ethereum (every in-flight flush then reverts in OFTCore.lzReceive with OnlyPeer; the IMD is already burned on Robinhood Chain and is minted on Ethereum only if the peer is restored), setMsgInspector on Robinhood Chain to a contract that rejects compose messages (every flush reverts and the waiting IMD stays in the RemoteStacker, whose only exit is the flush), or setEnforcedOptions(30101, 2, ...) adding gas or value that changes the fee a flusher must pay. None of this is exploitable by a third party and the receiver itself cannot be harmed (a compose that never arrives leaves it untouched; the AmountMismatch check bounds every payout to the IMD that arrived), but the route's liveness depends on configuration the brief describes only as 'IMD is a standard LayerZero OFT'. The specialist read IMD.owner() = 0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7 (not renounced), msgInspector() = 0 and enforcedOptions(30416, 2) empty at Ethereum block 26,181,910; no RPC was available to this review, so those values are reported as the specialist's reading. Worth stating in the README's trust section.","line":87,"path":"src/multichain/StackReceiver.sol","reproduction":"Code trace: StackReceiver.lzCompose accepts only from == IMD, so every delivery passes through IMD's OFTCore.lzReceive, whose _origin.sender must equal peers(srcEid) (OnlyPeer otherwise). On a mainnet fork, as IMD's owner call IMD.setPeer(30416, bytes32(0)), then replay the arrival exactly as test/StackReceiverMainnetFork.t.sol's arrive() does (vm.prank(ENDPOINT); IMD.lzReceive(Origin(30416, RH_IMD, nonce), guid, oftMessage, executor, '')). Expected per the brief: the route depends only on the endpoint and the token's standard behaviour. Actual: lzReceive reverts with OnlyPeer(30416, sender); the receiver's IMD balance and counters stay at 0 until the peer is set back, while the sending side has already burned the IMD.","severity":"info","snippet":"        if (from != address(IMD)) revert NotIMD();","title":"Trust assumption not in the brief: IMD's OFT owner (not renounced) can stall or strand the whole route through peer, msgInspector and enforced-options settings"}],"hash":"053d4393a65397f0a8c4aa0786bd5544be2f64384d2f7e6e4e809d3604fe2ccb","nodeId":"e748755c-7ae5-40f3-b835-fe19c25b0fe9","outcome":"completed","summary":"The review is complete. The findings file is written at the repository root and the scratch tests are removed, so the tree holds only the new `.imd-findings.json`.\n\n**Outcome: no blocking defects in the contract this launch deploys.** The StackReceiver's entry point holds on every path I traced, and the manifest matches the brief exactly. I kept five findings, all low or informational, each reproduced against the code.\n\n- **Low, RemoteStacker dust retipped.** Sub-step dust left waiting after a flush is tipped again on the next flush, so across two flushes the trader lands at 97.99% instead of the documented 98%. The specialist's proof fails on this tree for exactly that reason and is attached.\n- **Low, RemoteStacker capped clock.** A credit merged into a balance that already waited past 12 hours pays the full 2% tip after waiting zero seconds. My proof fails on this tree and is attached. Both RemoteStacker findings concern the later Robinhood Chain launch, not the receiver deployed here.\n- **Low, inverted fork gas assertion.** The mainnet fork test's margin check accepts a compose budget up to 17% below measured gas. Current constants still pass a corrected check, so no live impact today.\n- **Info, no invalid-trader guard in the receiver.** A hostile sender can mint vault shares to the receiver, the vault or the zero address. Only the sender's own IMD is lost, which is the brief's stated design.\n- **Info, trust assumption.** IMD's OFT owner can stall the route by changing peers, the message inspector or enforced options. The specialist's on-chain reading is reported as theirs, since no RPC was available here.\n\n**Dropped or rejected:** every static-analysis lead. The divide-before-multiply is intentional step rounding, the locked-ether lines have no ETH path, and the reentrancy lines are guarded.\n\n**Coverage:** all 13 listed entry points have rows. Twelve are answered as holds or finding. The registry's oracle-result callback is marked unreached because its attestation library was not traced within budget. The registry and Stacker are live contracts this launch does not touch.\n\nThe offline suite passed with 296 tests, and 23 skipped for lack of fork RPC variables. The README's mainnet table still needs the receiver's address once it is live, as the brief already states.","treeHash":null,"usage":{"cachedInputTokens":943791,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":30152,"runtime":"claude","turns":22,"wallClockMs":489235}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"93c37f17670e4d98","findings":[{"citation":"resolved","description":"The live Stacker refuses trader == Stacker/sIMD/IMD/0 (Stacker.sol:79-82) because shares minted there can never move. The receiver has no such check; it relies on the RemoteStacker refusing those addresses (RemoteStacker.sol:114-117, 150-153). But any IMD holder on Robinhood Chain can call IMD.send with the receiver as recipient and an arbitrary compose list, bypassing the RemoteStacker. With the live Solady vault, previewDeposit > 0 for every amount >= 1 wei (previewDeposit(1e12) = 1.25e17 shares at block 26,181,910), so deposit(amount, receiver) / deposit(amount, vault) / deposit(amount, address(0)) all succeed: Solady's _mint has no zero-address check, so address(0) receives shares too. Economic impact: only the sender's own IMD is lost (the amount check at line 108 guarantees no other IMD is spent), so this matches the brief's stated design ('a sender that lies about its list can only lose its own IMD'). It does, however, break the invariant the suite asserts (MultichainFlow.t.sol:170 sImd.balanceOf(receiver) == 0) for a hostile sender, which no test exercises: every test drives the receiver through the honest RemoteStacker or a well-formed list. Reported as informational; a one-line guard mirroring Stacker (skip or pay plain for trader in {this, SIMD, IMD, 0}) would close the asymmetry without changing the agreed design.","line":129,"path":"src/multichain/StackReceiver.sol","reproduction":"State: fresh StackReceiver(imd, sImd, endpoint). Input: MockEndpoint.deliver(imd, receiver, guid, nonce, 30416, 1e18, anySender, abi.encode([address(receiver)], [1e18])). Expected (by the Stacker's rule): refused or paid plain. Actual: sImd.balanceOf(receiver) == 1e24 shares, permanently stuck; same for [address(sImd)] (shares on the vault) and [address(0)] (shares minted to the zero address, totalSupply up by 1e24). Verified with test/scratch/ReceiverInvalidTrader.t.sol: all three deliveries succeed and the counters count them as delivered.","severity":"info","snippet":"            uint256 shares = _tryDeposit(amount, traders[i]);","title":"StackReceiver deposits for any listed address, including itself, the vault and address(0): a hostile compose strands sIMD, unlike Stacker.credit's InvalidTrader guard"},{"citation":"resolved","description":"The receiver's only trust roots are the endpoint and the IMD token. Read on chain at Ethereum block 26,181,910: IMD.owner() = 0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7 (not renounced); msgInspector() = 0, enforcedOptions(30416, 2) = empty, peers(30416) = Robinhood IMD. The same owner on each chain can at any time: setPeer(30416, 0) on Ethereum (every in-flight flush then reverts in lzReceive with OnlyPeer: the IMD is already burned on Robinhood Chain and is minted on Ethereum only if the peer is restored), setMsgInspector to a contract that rejects compose messages on Robinhood Chain (every flush reverts; the waiting IMD stays in the RemoteStacker with no other exit), or setEnforcedOptions(30101, 2, ...) adding gas/value that changes the fee the flusher must pay. None of this is a defect in the receiver and none is exploitable by a third party; it is a privileged power the brief ('IMD is a standard LayerZero OFT') does not name, and the route's liveness depends on it. The receiver itself cannot be harmed: a compose that never arrives leaves it untouched, and the amount check still bounds every payout to the IMD that arrived.","line":87,"path":"src/multichain/StackReceiver.sol","reproduction":"State: live mainnet (block 26,181,910). Call as 0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7: IMD.setPeer(30416, bytes32(0)). Then any message from Robinhood IMD (RemoteStacker.flush already executed, IMD burned there) fails in OFTCore.lzReceive on Ethereum with OnlyPeer(30416, sender); the receiver's balance and counters stay at 0 until the peer is set back. Expected per the brief: the route depends only on the endpoint and the token's standard behaviour; actual: it also depends on the token owner's configuration remaining as read on 2026-10-13.","severity":"info","snippet":"        if (from != address(IMD)) revert NotIMD();","title":"Trust assumption not in the brief: IMD's OFT owner is not renounced and can stall or strand the whole route (peer, msgInspector, enforced options, endpoint delegate)"}],"hash":"05f9ea6ff2d62796794165de50721db327394283582f733059aa9e6ddadd82fa","nodeId":"e64608e5-b901-4458-9eff-f861103d24aa","outcome":"completed","summary":"The review is complete. The findings file is written and valid, no source files were changed, and the scratch test lives under test/scratch as permitted.\n\n**Result: no economic defect in the StackReceiver.** The amount check binds every payout to the IMD the token itself minted, so a sender can only lose its own funds. The per-trader fallback keeps one trader from blocking a delivery, and a failed compose stays queued at the endpoint where anyone can retry it.\n\n**What I verified**\n\n- Live facts read on chain through a public RPC at block 26,181,910. The sIMD asset is IMD, its owner is renounced and it is not paused. Both IMD OFTs have 18 decimals, a 1e12 step, are peered, and have no inspector or enforced send-and-call options.\n- The mainnet fork tests pass live. Compose delivery uses 228k, 713k and 3.22M gas for 1, 10 and 50 traders, inside the 280k, 1.0M and 4.2M budgets.\n- A zero-share deposit is unreachable on the live vault, since one bridge step of IMD previews to about 1.25e17 shares.\n- The RemoteStacker's amount-weighted waiting clock keeps a flusher's absolute tip unchanged when a trader front-runs a flush with a self-credit, so the free-bridge grief I tested for does not work.\n- The full offline suite passes with 277 tests, and the manifest's three constructor arguments match the brief in declaration order.\n\n**Two informational notes were recorded**\n\n1. The receiver deposits for any listed address, including itself, the vault and the zero address. A hostile sender can strand sIMD shares that way, which breaks the suite's \"receiver holds no sIMD\" invariant, but only at the sender's own cost. The Stacker guards against the same addresses, so this is an asymmetry worth closing.\n2. The IMD token's owner is not renounced. That owner can un-peer the chains or install a message inspector and stall the route. This is a trust assumption the brief does not name, not a defect.\n\nCoverage rows answer all 13 entry points plus four invariants. Registry and Stacker entry points are marked as holding because they are live contracts outside this launch's value flows.","treeHash":null,"usage":{"cachedInputTokens":1143252,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":44326,"runtime":"claude","turns":34,"wallClockMs":670825}},{"artifacts":[],"attempt":1,"bundleHash":"58050ccf6cb1099070fcda9ab5a7c964e7374818bd363142a497d77af8efdc0f","device":"d2bae9a4a05e8265","findings":[],"hash":"153008c81cc2daeface412a7141d9cbcecca6440c764768507d6faa7d1cfe91d","nodeId":"daa00db6-c9ce-4457-864c-ba17ba8213cd","outcome":"completed","summary":"Fixed both reproduced findings: zero-share fallback now previews before depositing, and compose calls reject attached ETH. Added regression tests and [ADAPTATION.md](ADAPTATION.md).\n\nValidation:\n- `forge build`: passed.\n- `forge test`: 277 passed, 23 skipped, no failures.\n- Live mainnet receiver fork: all 5 tests passed.\n\nManifest and protected files remain unchanged. Deployment stays with IMD’s launch process; the README address awaits confirmed deployment.","treeHash":"f6920eff51df8b65f33737f1132e829da07564a3","usage":{"cachedInputTokens":2046720,"inputTokens":113242,"model":"gpt-6-astra","outputTokens":18322,"runtime":"codex","turns":7,"wallClockMs":722590}},{"artifacts":[],"attempt":1,"bundleHash":"4d17f6fbffb5076464907d18b440417e4add5ea38ed15b28e30b71524cff5476","device":"6a7dea7fd5378a40","findings":[],"hash":"2a6a25ea14fad552f03bc99e7189a5955596fe805c7e130e91a18e13cc3757bb","nodeId":"563ebff8-e414-45dd-96b1-8261aaff6750","outcome":"completed","summary":"Added tests under `test/` for failure paths, replay/retry, reentrancy, exact deployment, and conservation across 16,384 random calls.\n\nValidation passed:\n\n- `forge build`\n- `forge test`: 296 passed, 0 failed, 23 skipped.\n\nSkipped checks comprise 21 fork tests awaiting RPC configuration and 2 legacy manifest checks. No reproducible defect found.","treeHash":"1a48ccdc68745a3c21fc47f797ca6fe323c5f0e4","usage":{"cachedInputTokens":1908992,"inputTokens":125705,"model":"gpt-6-astra","outputTokens":20930,"runtime":"codex","turns":6,"wallClockMs":799912}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"03845cacb54c3a73","findings":[{"citation":"resolved","description":"Seam: precision x invariant (Numerical Gap guide), reached through the Boundary guide's 'rounding at the bridge step' question. `_plan` charges the flusher's tip on the whole waiting balance `w`, then rounds the delivered amount down to the bridge step (1e12 wei). The part of `w` below the step (up to 1e12 - 1 wei) is NOT delivered: it stays in `waiting[r]` (flush, line 229-231) with its old `waitingSince`. It was already tipped once. On the next credit it is merged into the new balance and on the next flush `w * tipBps / BPS` is computed over it again, so the same wei are tipped twice (and a third time if dust remains again). The contract's NatSpec (line 25-26: 'at most 2% ... The trader always receives at least 98%') and the fuzz test `testFuzz_flush_conservesEveryWei` (`tip <= (a+b) * 200 / 10_000`) only hold for a single flush; across two flushes the total tip exceeds 2% of everything credited. Absolute size is bounded by 2% of one step per flush and recipient (<= 2e10 wei = 0.00000002 IMD), so there is no profitable extraction (the flusher pays the LayerZero fee), but the stated guarantee is broken and the per-flush overcharge is systematic for small (micro-IMD) cashback. Not in this launch's deployed contract (StackReceiver); reported because the RemoteStacker is the sender whose arithmetic the receiver's AmountMismatch check depends on, and the assignment lists RemoteStacker.flush as an entry point. Minimal fix that preserves the design: compute the tip on the amount that is actually delivered, e.g. `uint256 deliverable = w / step * step; share = deliverable * tipBps(r) / BPS; amount = (deliverable - share) / step * step;` or equivalently exclude `w % step` from the tip base, so dust is never tipped before it is delivered.","line":259,"path":"src/multichain/RemoteStacker.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {RemoteStacker} from \"src/multichain/RemoteStacker.sol\";\nimport {MockOFT} from \"test/mocks/MockOFT.sol\";\n\n/// Dust left waiting after a flush (below the 1e12 bridge step) is tipped again on the next flush,\n/// so across two flushes the tip exceeds 2% of everything credited and the trader ends below 98%.\n/// This test FAILS on the current code (it asserts the documented guarantee) and passes once the\n/// tip is computed only on the deliverable (step-rounded) amount.\ncontract DustRetipTest is Test {\n    MockOFT imd;\n    RemoteStacker rs;\n    address alice = address(0xA11CE);\n    address flusher = address(0xF1);\n\n    function setUp() public {\n        imd = new MockOFT();\n        rs = new RemoteStacker(imd, address(0xBEEF), address(0xCAFE), 30101);\n        imd.mint(address(this), 1e24);\n        imd.approve(address(rs), type(uint256).max);\n        vm.deal(flusher, 1 ether);\n        vm.warp(1_000_000);\n    }\n\n    function one(address a) internal pure returns (address[] memory l) {\n        l = new address[](1);\n        l[0] = a;\n    }\n\n    function test_tipNeverAboveTwoPercentAcrossFlushes() public {\n        uint256 c = 1_030_000_000_000; // 1.03e12 wei = 0.00000103 IMD\n        rs.credit(alice, c);\n        vm.warp(block.timestamp + 12 hours);\n        (uint256 out1, uint256 tip1,,,) = rs.quoteFlush(one(alice));\n        vm.prank(flusher);\n        rs.flush{value: 0.001 ether}(one(alice));\n\n        rs.credit(alice, c);\n        vm.warp(block.timestamp + 12 hours);\n        (uint256 out2, uint256 tip2,,,) = rs.quoteFlush(one(alice));\n        vm.prank(flusher);\n        rs.flush{value: 0.001 ether}(one(alice));\n\n        uint256 credited = 2 * c;\n        // Documented: the tip is at most 2% and the trader always receives at least 98%.\n        assertLe(tip1 + tip2, credited * 200 / 10_000, \"tips above 2% of all cashback credited\");\n        assertGe(out1 + out2 + rs.waiting(alice), credited * 9_800 / 10_000, \"trader below 98%\");\n    }\n}","reproduction":"Mock IMD OFT (decimalConversionRate 1e12), RemoteStacker rs, project credits alice.\n1. credit(alice, 1_030_000_000_000) [1.03e12 wei]; warp +12h (tipBps = 200).\n2. flush([alice]): share = 1.03e12*200/10_000 = 20_600_000_000; amount = (1.03e12 - 2.06e10)/1e12*1e12 = 1e12; waiting[alice] = 1.03e12 - 1e12 - 2.06e10 = 9_400_000_000 (dust, already tipped).\n3. credit(alice, 1_030_000_000_000); warp +12h.\n4. flush([alice]): w = 9.4e9 + 1.03e12 = 1.0394e12; share = 1.0394e12*200/10_000 = 20_788_000_000 (includes 188_000_000 on the dust tipped in step 2); amount = 1e12; waiting = 18_612_000_000.\nTotals: credited 2_060_000_000_000; tips 41_388_000_000; 2% of credited = 41_200_000_000 (expected ceiling); delivered + still waiting = 2_018_612_000_000 = 97.99% of credited (expected >= 98%).\nScratch test test/scratch/DustRetip.t.sol asserts `tips > credited*200/10_000` and `delivered + waiting < credited*9_800/10_000`; both assertions pass on the current code (the defect is present).","severity":"low","snippet":"            uint256 share = w * tipBps(r) / BPS;\n            uint256 amount = (w - share) / step * step; // dust below the bridge step stays waiting","title":"RemoteStacker tips the sub-step dust again on every later flush, so the trader's share drops below the documented 98%"}],"hash":"420881718ffbd96cf3b90b6931b3c7cb48ec29a6fac9a74629581e4767cdfab7","nodeId":"b62b5f3e-c389-402f-aced-ba6efc837f41","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written with one substantiated finding and 17 coverage rows (every listed entry point plus the invariants and manifest I checked).\n\n**Result of the math audit of the StackReceiver launch**\n\nThe deployed contract, StackReceiver, holds on every item in the Math Precision, Boundary and Numerical Gap guides that I could apply:\n\n- **Compose decoding** slices the amount, source eid and payload at the same offsets as LayerZero's codec, so the amount the receiver pays out is the one IMD's own lzReceive minted.\n- **Sum check** uses checked arithmetic and must equal that amount exactly. Zero entries are skipped. A sender who lies can only strand its own IMD.\n- **Vault rounding** is gated by previewDeposit, so a zero-share deposit never consumes assets. Against the live vault totals read from mainnet today, even a 1 wei entry previews about 125,000 shares, so the plain-IMD fallback is unreachable in practice.\n- **Decimal step and uint64 cap**: both IMDs convert at 1e12, and the live IMD supply is about 4.17 million tokens, far below the OFT's shared-decimal ceiling, so list sums always match on arrival.\n- **Manifest**: three address words in constructor order, matching the brief.\n\n**One finding, low severity, in the RemoteStacker** (the sender side, not deployed in this launch). The flush tip is computed on the whole waiting balance, but the delivered amount is rounded down to the bridge step, so the sub-step dust stays waiting and is tipped again on the next flush. With two credits of 1.03e12 wei, total tips reach 41.388e9 wei against a 2% ceiling of 41.2e9, and the trader ends at 97.99% instead of the documented 98%. The absolute loss is bounded at 2% of one bridge step per flush, so nobody profits from it, but the stated guarantee breaks. The proof test under `test/scratch/` fails on the current code with exactly those numbers. A minimal fix is to compute the tip only on the step-rounded deliverable amount.\n\n**Coverage limits**: the ProjectRegistry rows are scan-level reads of its timestamp and rate arithmetic, which is bounded by its constants; it is outside my area and not part of this launch. The 20 fork tests could not run here because no RPC environment variables are set, so the gas budget numbers rest on the figures in the brief and the fork test's assertions.","treeHash":null,"usage":{"cachedInputTokens":1150340,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":34019,"runtime":"claude","turns":36,"wallClockMs":524218}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9e51ef2afd7c2af8","findings":[{"citation":"resolved","description":"test_fork_gasBudgetCoversOneTenAndFiftyTraders is the only check that the RemoteStacker's lzCompose gas option (COMPOSE_BASE_GAS + COMPOSE_GAS_PER_TRADER * n, the gas the LayerZero executor hands endpoint.lzCompose) covers what a live delivery through the StackReceiver actually uses. The message says it keeps a 20% margin, but the inequality is the wrong way round: assertLt(composeGas * 10 / 12, budget) holds whenever composeGas < 1.2 * budget, i.e. it still passes when the budget is up to ~17% BELOW the gas the delivery needs, in which case every executor delivery would run out of gas and the compose would stay queued until someone retries it by hand with more gas. The intended check is budget >= composeGas * 12 / 10 (assertGe(base + per * n, composeGas * 12 / 10) or assertLt(composeGas * 12 / 10, base + per * n)); with today's measurements (227,668 / 712,968 / 3,221,322 gas for 1 / 10 / 50 traders against 280k / 1,000k / 4,200k budgets) the corrected assertion also passes, so the live constants are fine; the defect is that this test cannot catch a future regression of those constants or of the receiver's gas. Related measurement caveat in the same test: receiveGas is measured on IMD.lzReceive called directly (vm.prank(ENDPOINT)), while the executor's RECEIVE_GAS option is applied to endpoint.lzReceive, which adds the endpoint's nonce/payload-hash bookkeeping (~20-30k); 158k + that is still under 250k, so no live impact, but the margin is smaller than the logged figures suggest.","line":175,"path":"test/StackReceiverMainnetFork.t.sol","reproduction":"On a mainnet fork (ETH_RPC_URL), deploy StackReceiver(IMD, sIMD, endpoint); play the arrival of a 50-trader compose exactly as the suite does (prank the endpoint to call IMD.lzReceive with an OFT message to the receiver carrying abi.encode(traders, amounts), total 50e18). Take a hypothetical budget of 3,000,000 gas (a COMPOSE_GAS_PER_TRADER of 56,000). Expected from a test that 'keeps a 20% margin': it fails for that budget. Actual: (1) endpoint.lzCompose{gas: 3_000_000}(IMD, receiver, guid, 0, composed, '') reverts out of gas and receiver.totalDelivered() stays 0; (2) the same delivery with unlimited gas measures 3,297,211 gas, and the suite's assertion assertLt(3_297_211 * 10 / 12 = 2_747_675, 3_000_000) PASSES. Demonstrated by test/scratch/GasMarginInverted.t.sol (fork; passes on this tree, i.e. shows the inverted check accepting the under-budget). Fix: assertLt(composeGas * 12 / 10, base + per * n, ...).","severity":"low","snippet":"            assertLt(composeGas * 10 / 12, base + per * n, \"the compose budget keeps a 20% margin\");","title":"Fork gas-budget assertion is inverted: it accepts a compose budget up to 17% below the measured delivery gas"}],"hash":"584a2884ff130286d7bf0676df63d05895803aba34a4718e5b0a0afb4495bfbf","nodeId":"ab35abdd-b0cd-41bf-a5cf-017e9ac61685","outcome":"completed","summary":"Review complete. The findings file is at `.imd-findings.json` with one finding and seventeen coverage rows. Nothing in `src/` was changed; the only files I created are the findings file and one scratch test under `test/scratch/`.\n\n**Outcome.** The StackReceiver's control flow holds. I traced `lzCompose` against the live, verified sources of the LayerZero endpoint, the IMD OFT token (BridgedFP) and the sIMD vault, not just the repository's copies:\n\n- The endpoint only delivers a compose whose hash was queued under `composeQueue[from][to][guid][index]`, marks it received before the call, and so `from == IMD` means the IMD token itself queued it, once.\n- IMD's `_lzReceive` mints exactly `amountReceivedLD` to the recipient and writes that same number into the compose, so the receiver's exact-sum check binds the list to the IMD that arrived. The compose codec offsets in `LayerZero.sol` match the live `OFTComposeMsgCodec`.\n- The live vault is byte for byte the test copy apart from name and symbol; Solady's `deposit` mints exactly `previewDeposit`, so the `ZeroShares` revert is unreachable, and the paused path cannot happen with ownership renounced.\n- Executor gas griefing of the try/catch is not exploitable: the fallback path needs more than a sixty-fourth of what a deposit needs.\n- On the sender side, `minAmountLD == plan.imd` guarantees the OFT cannot emit a message whose amount differs from the list sum. The option encoding is accepted by the live Robinhood endpoint. The live Robinhood IMD is peered to the Ethereum IMD with no enforced compose options.\n\nAll offline tests pass, as do the mainnet and Robinhood fork suites run against public RPCs. The manifest has the three checksummed addresses in constructor order and only the schema's keys.\n\n**The one finding (low, test coverage).** The fork test's gas-margin assertion is inverted. It checks the delivered gas times ten twelfths against the budget, which passes whenever the budget is up to about 17% below what a delivery needs. A scratch fork test shows a 3.0M budget runs out of gas for fifty traders while that assertion still accepts it. The live constants are fine today with at least 23% margin; the test just cannot catch a regression. The fix is to compare the budget against the measured gas times twelve tenths.\n\n**Trust assumption, not a finding.** The IMD token's owner and endpoint delegate on both chains can change peers, options and receive configuration. That is bridge-level trust in the IMD operator, outside this repository.","treeHash":null,"usage":{"cachedInputTokens":1803086,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":45366,"runtime":"claude","turns":41,"wallClockMs":715237}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fd5402086dce252e","findings":[{"citation":"resolved","description":"StackReceiver documents, and launch.json and the brief promise, that a deposit that mints zero shares pays that trader plain IMD (DeliveredPlain) so one trader never holds up a delivery. The code cannot do that. Solidity's catch clause only catches a revert raised by the external call itself; a revert raised in the try's success block (`returns (uint256 shares) { ... }`) propagates. So `revert ZeroShares()` on line 124 is NOT 'caught below': it aborts lzCompose. With the real endpoint a reverted compose stays in the compose queue and can be retried, but every retry reverts the same way, so the entire delivery's IMD (every trader's amount in that message, not only the zero-share trader's) stays in the receiver forever: the contract has no owner, no rescue and no other way out. The comment on line 124 is wrong and test/StackReceiver.t.sol never exercises a zero-share deposit (the Stacker suite does, in six files), which is why it was not noticed. A second problem for the fix: in the live vault (Solady ERC4626, as TestSIMD copies it) a deposit that rounds to zero shares still pulls the assets (`_deposit` does safeTransferFrom then `_mint(to, 0)`), so simply moving the zero-share case into the plain-IMD path after the deposit would pay the trader IMD the receiver no longer has: it would draw on the other traders' amounts and the last transfer of the delivery would fail with ERC20InsufficientBalance (verified on a patched copy). The plain payment has to be decided BEFORE depositing: add `previewDeposit(uint256)` (or `convertToShares`) to IStakedIMD and pay plain IMD when it returns 0, keeping the try/catch for a vault that reverts. Reachability on mainnet: with sIMD as deployed (6-decimal offset, virtual shares) a bridged amount is at least 1e12 wei (the bridge step), so zero shares needs totalAssets > 1e12 * (totalSupply + 1e6), a share price about 1e18 times the initial one, which is not reachable in practice; the vault owner is renounced and cannot pause, so on mainnet the fallback path is otherwise dead code. The finding is therefore a broken documented guarantee with a permanent-lock impact under a condition that the live vault does not reach, rated medium; it is cheap to fix and the launch text should not claim the behaviour until it is.","line":124,"path":"src/multichain/StackReceiver.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {StackReceiver, IStakedIMD} from \"src/multichain/StackReceiver.sol\";\nimport {ILayerZeroComposer} from \"src/multichain/LayerZero.sol\";\n\n/// @dev Plays IMD on Ethereum: mintable, no hooks.\ncontract ProofIMD is ERC20 {\n    constructor() ERC20(\"IMD\", \"IMD\") {}\n\n    function mint(address to, uint256 amount) external {\n        _mint(to, amount);\n    }\n}\n\n/// @dev An ERC-4626-shaped vault whose `deposit` succeeds (pulls the IMD) but mints zero shares:\n/// the state StackReceiver documents as \"a deposit that mints zero shares pays that trader plain\n/// IMD instead\" (ERC-4626 `deposit` rounds shares down, so a vault may legitimately return 0).\ncontract ZeroShareVault is IStakedIMD {\n    IERC20 public immutable imd;\n\n    constructor(IERC20 imd_) {\n        imd = imd_;\n    }\n\n    function asset() external view returns (address) {\n        return address(imd);\n    }\n\n    /// @dev As Solady's ERC4626 does: a deposit rounding to zero shares still pulls the assets.\n    function deposit(uint256 assets, address) external returns (uint256) {\n        imd.transferFrom(msg.sender, address(this), assets);\n        return 0;\n    }\n\n    function previewDeposit(uint256) external pure returns (uint256) {\n        return 0;\n    }\n\n    function convertToShares(uint256) external pure returns (uint256) {\n        return 0;\n    }\n}\n\n/// @dev The endpoint: mints the bridged amount and calls `lzCompose` with the OFT compose message.\ncontract ProofEndpoint {\n    function deliver(\n        ProofIMD imd,\n        address to,\n        bytes32 guid,\n        uint32 srcEid,\n        uint256 amountLD,\n        bytes memory composeMsg\n    ) external {\n        imd.mint(to, amountLD);\n        bytes memory message = abi.encodePacked(\n            uint64(1), srcEid, amountLD, bytes32(uint256(uint160(address(0x4E)))), composeMsg\n        );\n        ILayerZeroComposer(to).lzCompose(address(imd), guid, message, address(this), \"\");\n    }\n}\n\ncontract StackReceiverZeroSharesProof is Test {\n    ProofIMD internal imd;\n    ZeroShareVault internal vault;\n    ProofEndpoint internal endpoint;\n    StackReceiver internal receiver;\n    address internal alice = address(0xA11CE);\n    address internal bob = address(0xB0B);\n\n    function setUp() public {\n        imd = new ProofIMD();\n        vault = new ZeroShareVault(IERC20(address(imd)));\n        endpoint = new ProofEndpoint();\n        receiver =\n            new StackReceiver(IERC20(address(imd)), IStakedIMD(address(vault)), address(endpoint));\n    }\n\n    /// The contract promises that a deposit minting zero shares pays the trader plain IMD\n    /// (`DeliveredPlain`) so one trader never holds up a delivery. On the code as it is, the\n    /// `revert ZeroShares()` sits inside the try's success block, which `catch` does not cover, so\n    /// the whole `lzCompose` reverts: nobody is paid, and the bridged IMD stays in the receiver.\n    /// Note for the fix: a vault that mints zero shares has already pulled the IMD, so the plain\n    /// payment must be decided before the deposit (previewDeposit/convertToShares == 0), not after.\n    function test_zeroShareDepositPaysPlainIMDInsteadOfRevertingTheDelivery() public {\n        address[] memory traders = new address[](2);\n        uint256[] memory amounts = new uint256[](2);\n        traders[0] = alice;\n        traders[1] = bob;\n        amounts[0] = 3e18;\n        amounts[1] = 2e18;\n\n        vm.expectEmit(true, true, true, true);\n        emit StackReceiver.DeliveredPlain(bytes32(uint256(1)), 30416, alice, 3e18);\n        endpoint.deliver(\n            imd, address(receiver), bytes32(uint256(1)), 30416, 5e18, abi.encode(traders, amounts)\n        );\n\n        assertEq(imd.balanceOf(alice), 3e18, \"alice paid plain IMD\");\n        assertEq(imd.balanceOf(bob), 2e18, \"bob paid plain IMD\");\n        assertEq(imd.balanceOf(address(receiver)), 0, \"receiver keeps nothing\");\n        assertEq(receiver.totalDelivered(), 5e18);\n    }\n}","reproduction":"State: StackReceiver(imd, vault, endpoint) where vault.asset() == imd and vault.deposit(3e18, alice) succeeds but returns 0 shares (any ERC-4626 whose previewDeposit rounds to 0; a Solady vault pulls the assets and mints 0). Call sequence as the live route does it: the endpoint mints 5e18 IMD to the receiver, then calls receiver.lzCompose(imd, guid, nonce(8)|srcEid 30416(4)|amountLD 5e18(32)|composeFrom(32)|abi.encode([alice, bob],[3e18, 2e18]), executor, \"\"). Expected (per the contract's own NatSpec, line 46-49 and 121-124, and launch.json notes): DeliveredPlain(guid, 30416, alice, 3e18), bob deposited or paid, receiver IMD balance 0, totalDelivered 5e18. Actual: the call reverts with ZeroShares(); nobody is paid, the receiver keeps 5e18 IMD, and every retry of the same compose reverts identically, so the IMD is locked. Proof: test/scratch/StackReceiverZeroShares.t.sol fails on the current code with `[FAIL: ZeroShares()]` and passes once the zero-share case is decided before the deposit via previewDeposit.","severity":"medium","snippet":"                if (shares == 0) revert ZeroShares(); // caught below: plain IMD instead","title":"ZeroShares revert inside the try block is not caught: a zero-share deposit reverts the whole delivery and locks its IMD instead of paying plain IMD"},{"citation":"resolved","description":"ILayerZeroComposer.lzCompose must be payable, and the endpoint's lzCompose forwards its msg.value to the receiver. StackReceiver has no receive or withdrawal path, so any ETH that arrives this way is locked. The RemoteStacker's executor options request no compose value, and a LayerZero executor only attaches value when the options ask for it, so the route itself never sends ETH; only a third party calling the permissionless endpoint.lzCompose with value loses its own ETH. No user funds are at risk; recorded so the adapter knows it is intentional and documents it, or refuses msg.value != 0.","line":75,"path":"src/multichain/StackReceiver.sol","reproduction":"State: a compose for the receiver is queued at the endpoint (IMD's lzReceive ran). Anyone calls endpoint.lzCompose{value: 1 wei}(IMD, receiver, guid, 0, message, \"\"). Expected: either the value is refused or it can be recovered. Actual: the delivery succeeds and address(receiver).balance == 1 wei with no function able to send it anywhere.","severity":"info","snippet":"        payable","title":"lzCompose is payable but the receiver can never move ETH: value sent with a compose delivery is stuck"}],"hash":"8d4464bfc7d889f12224b7d51073ae61a5c28ab5e86ef6b03447de702a278af1","nodeId":"5c082ed4-0443-48a7-97e5-87610fd13475","outcome":"completed","summary":"The review is complete. The findings file is written and validated, and no source, configuration or test file in the tree was changed.\n\n**Outcome.** One medium defect and one informational note in `src/multichain/StackReceiver.sol`. Nothing critical or high. The receiver's trust model holds: only the endpoint may call `lzCompose`, only for composes the IMD token queued, the amount is written by the token, the sum check is exact, the approval is set once, reentrancy is guarded, and stray IMD is never spent.\n\n**Medium: the zero-share fallback cannot work.** The contract, the manifest notes and the brief all promise that a deposit minting zero shares pays that trader plain IMD. The `revert ZeroShares()` on line 124 sits inside the `try` success block, which Solidity's `catch` does not cover, so the whole delivery reverts and every retry reverts the same way. All IMD in that message would stay in the receiver forever, since there is no owner or rescue. A second point matters for the fix: a Solady vault that rounds to zero shares has already pulled the assets, so moving the case into the plain-IMD path after the deposit pays IMD the receiver no longer has. I verified that on a patched copy, which failed with an insufficient-balance error. The decision must come before the deposit via `previewDeposit`. Reachability is honest in the report: with the live vault a bridged amount is at least one bridge step, so zero shares needs a share price about 1e18 times the initial one, and the owner is renounced so the pause fallback is dead code too. The proof test under `test/scratch/StackReceiverZeroShares.t.sol` fails on the current code with `ZeroShares()` and passes against a corrected copy.\n\n**Info: ETH sent with a compose is stuck.** `lzCompose` is payable and the contract has no way to move ETH out. Only a third party calling the permissionless endpoint with value loses its own ETH, since the RemoteStacker's options request no compose value.\n\n**Coverage.** I read StackReceiver.sol, LayerZero.sol, RemoteStacker.sol, the IStakedIMD interface and the Stacker's credit path, the test doubles, the receiver, mainnet-fork and deployment tests, the protected harness and launch.json. I checked the compose message layout and the executor option encoding against the LayerZero OFT and OptionsBuilder formats from memory, since no LayerZero source is vendored. Through a public RPC I confirmed the live facts the manifest depends on: the vault's asset is IMD, IMD's endpoint is the manifest's endpoint, the vault owner is zero and it is not paused. The manifest has only the schema keys, one contract, three string arguments in declaration order, and notes under the limit. The full offline suite passed with 270 tests and 22 skipped, the fork and manifest skips the brief describes. I did not run the mainnet fork tests, since no RPC environment variable is set on this machine, and I did not audit the ProjectRegistry or the live Stacker, which this launch does not touch.","treeHash":null,"usage":{"cachedInputTokens":692651,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":28130,"runtime":"claude","turns":24,"wallClockMs":503958}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0e78515c4d95885a","findings":[{"citation":"resolved","description":"Seam: economics x asymmetry (Trust Gap guide) between the writer of waitingSince (credit, an amount-weighted average of arrival times) and its reader (tipBps, a linear ramp capped at TIP_PERIOD). The average preserves the sum of tips only while every component is below the cap. Once the old balance has waited longer than 12 hours, its clock is averaged as if it were only as old as it really is, so the merged clock lands at or beyond 12 hours and the whole merged balance, including the IMD that arrived in this very block, immediately pays TIP_BPS. The comment above the line claims 'new cashback never inherits an old clock'; it does whenever the old cashback is past the cap. The actor who gains is whoever calls flush (permissionless): a rational flusher is paid to wait past 12 hours for a large second credit instead of flushing at 12 hours. The trader still receives at least 98% of the total, as documented, but pays 2% on cashback that has not waited at all, and the stated per-12-hours-waited rule is not what is charged. Impact is bounded at 2% of the newest credit per recipient, so this is low, and it belongs to the RemoteStacker (the Robinhood Chain launch), not to the StackReceiver this manifest deploys. Suggested minimal fix that keeps the design: when the existing balance's waited time already exceeds TIP_PERIOD, average with min(waited, TIP_PERIOD) instead of the raw arrival time (i.e. compute the merged clock from capped ages), or track the accrued tip separately per credit; either keeps the 2% cap and the linear ramp for everything below it.","line":136,"path":"src/multichain/RemoteStacker.sol","reproduction":"Mock IMD with decimalConversionRate 1e12; RemoteStacker(imd, receiver, vault, 30101). t0: project calls credit(alice, 1000e18) -> waiting[alice]=1000e18, waitingSince[alice]=t0. Warp to t0+24h: tipBps(alice)=200, a flush now would tip 20e18 (expected). Instead project calls credit(alice, 1000e18) at t0+24h -> waitingSince = (t0*1000e18 + (t0+24h)*1000e18)/2000e18 = t0+12h exactly; waiting=2000e18. Same block, anyone calls flush([alice]) : _plan computes share = 2000e18 * tipBps(alice)/10000 with tipBps = 200 (waited = 12h >= TIP_PERIOD) = 40e18. Expected under '2% per 12 hours waited': 20e18 (old) + 0 (new, waited 0s) = 20e18. Actual: 40e18 to the flusher, alice delivered 1960e18 instead of 1980e18. Verified with a scratch Foundry test (test/scratch/TipClock.t.sol, not kept): waitingSince after merge == t0+12h, tipBps == 200, tip == 40e18. The existing test test_credit_clockIsAmountWeighted only merges credits below the cap (1e18 at t0, 3e18 at t0+12h), so it never exercises this branch.","severity":"low","snippet":"        waitingSince[recipient] = uint64(\n            (uint256(waitingSince[recipient]) * before + block.timestamp * imdAmount)\n                / (before + imdAmount)\n        );","title":"RemoteStacker: new cashback inherits a capped waiting clock, so a flusher takes the full 2% tip on IMD that has waited zero seconds"}],"hash":"a51ebcf02e6e349f6318a3e65e3874d747a29ba81322ff6f667358b5e1499e99","nodeId":"3be97a8b-41cb-40ca-9fdd-e071189a4add","outcome":"completed","summary":"The review is complete. The findings file is written and validated, the snippet matches the tree, the scratch test is removed, and the working tree is clean apart from the findings file.\n\n**Outcome.** The StackReceiver's permission model holds on every path I traced, and the manifest wires it correctly. I found one low-severity defect, in the RemoteStacker rather than the contract this launch deploys.\n\n**Finding 1, low, RemoteStacker credit at line 136.** The waiting clock is an amount-weighted average of arrival times, but the tip reader caps at 12 hours. Once an old balance has waited past the cap, a new credit merges to a clock that is still 12 hours or older, so the new IMD pays the full 2% tip the moment it arrives. With 1000 IMD waiting 24 hours and a fresh 1000 IMD credit, the flusher takes 40 IMD where the documented rule yields 20. I confirmed the numbers with a scratch Foundry test. The trader still keeps at least 98%, so impact is bounded, and the existing clock test never merges past the cap.\n\n**StackReceiver, my assigned area, holds.** Specifically:\n- Only the endpoint may call lzCompose, and only for a compose the IMD token itself queued, so the amount in the message is the amount minted.\n- The list must sum exactly to that amount, so a sender can only pay out its own IMD. Stray IMD is never spent.\n- No owner, no sweep, no initializer, no upgrade. The vault approval is spendable only through the receiver's own deposits.\n- The endpoint refuses a second delivery of the same compose, and value-carrying calls are rejected without consuming the queue.\n- One accepted asymmetry noted in coverage: the receiver lacks the InvalidTrader guard the Stacker and RemoteStacker have, so a direct OFT sender naming the receiver or vault as trader strands only its own IMD.\n\n**Coverage.** All 13 listed entry points have rows, plus rows for the manifest, the conservation invariant and the trust assumptions. The eight ProjectRegistry entry points are marked holds on the ground that this launch does not touch the live registry, and the row says they were not re-traced here. Trust assumptions recorded rather than reported: the IMD OFT owner's token-level powers, LayerZero executor liveness, and the vault's one-block hold stamped on each delivered trader.\n\n**Checks run.** The offline suite passed with 277 tests and 23 skipped. Fork tests did not run because no RPC URLs are set in this environment.","treeHash":null,"usage":{"cachedInputTokens":880410,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":28322,"runtime":"claude","turns":30,"wallClockMs":458222}},{"artifacts":[],"attempt":1,"bundleHash":"d15c147316521903838fc1628a2a680ead8b1b8995b8464177734cba84d020e4","device":"fd4958ee1ca0d1f2","findings":[],"hash":"d4af0049b8515a3687d06d8ed4bbd57b8b6568bb6d137a4b03f22a45aa073703","nodeId":"31d3024a-d23a-4029-a9c6-b72aef256891","outcome":"completed","summary":"Updated `launch.json`, preserving the sole `StackReceiver` deployment and all three approved mainnet addresses. Clarified notes against the accepted implementation.\n\nValidation passed: manifest structure, constructor ABI, and `forge build`. `forge test`: 277 passed, 0 failed, 23 skipped.\n\nOnly `launch.json` changed.","treeHash":"7990cd91e83108260d3ad4f3f0b21d894f38fae5","usage":{"cachedInputTokens":243200,"inputTokens":29926,"model":"gpt-6-astra","outputTokens":3836,"runtime":"codex","turns":4,"wallClockMs":202596}}],"verification":[{"checks":[{"durationMs":14873,"exitCode":0,"name":"build","output":"Compiling 101 files with Solc 0.8.26\nSolc 0.8.26 finished in 14.75s\nCompiler run successful!\n","passed":true},{"durationMs":6463,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 314.77µs (56.97µs CPU time)\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 437.12µs (235.17µs CPU time)\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 515.40µs (18.71µs CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 560.24µs (67.25µs CPU time)\n\nRan 5 tests for test/StackReceiverMainnetFork.t.sol:StackReceiverMainnetForkTest\n[SKIP] test_fork_arrivalDepositsForEveryTrader() (gas: 0)\n[SKIP] test_fork_composeIsDeliveredOnceAndOnlyFromTheEndpoint() (gas: 0)\n[SKIP] test_fork_composeRejectsValueWithoutConsumingTheQueue() (gas: 0)\n[SKIP] test_fork_gasBudgetCoversOneTenAndFiftyTraders() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 535.94µs (72.84µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 460.20µs (73.28µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.99ms (1.79ms CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.16ms (713.19µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.26ms (149.04µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829118)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.43ms (1.55ms CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.87ms (1.44ms CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 3.25ms (1.27ms CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.48ms (217.66µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 976.78µs (117.55µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 950.88µs (113.25µs CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420742)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582598)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089189)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436229)\n[PASS] test_ownerMayApply() (gas: 3320997)\n[PASS] test_projectItselfMayApply() (gas: 3381856)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3284007)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550174)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390876)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 5.82ms (4.96ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.30ms (187.79µs CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 6.23ms (1.56ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111540)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 939032)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232683)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219736)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052745)\n[PASS] test_owedBondsAccumulate() (gas: 1421953)\n[PASS] test_unblocked_paysAtOnce() (gas: 950815)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 6.77ms (5.89ms CPU time)\n\nRan 4 tests for test/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] test_fork_fiftyTradersQuoteAndFlush() (gas: 0)\n[SKIP] test_fork_flushBurnsHereAndTheEndpointAcceptsTheMessage() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_tooLittleFeeChangesNothing() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 4 skipped; finished in 7.34ms (76.59µs CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106573)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201501)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279267)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.99ms (2.43ms CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25975)\n[PASS] test_launchManifest_knownShape() (gas: 17310)\n[PASS] test_multichain_emptyChainRehearsal_constructorsPass() (gas: 5600262)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8416629)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 39.72ms (41.92ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106294, ~: 3106142)\nLogs:\n  Bound result 14535\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334621)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881719)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210874)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528279)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281247)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409682)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221678)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326584)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345326)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 100.30ms (111.56ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394548, ~: 394383)\nLogs:\n  Bound result 509603600688886988096310\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367766, ~: 368936)\nLogs:\n  Bound result 69153905908525362434348\n  Bound result 21600\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430328, ~: 430416)\nLogs:\n  Bound result 21600\n  Bound result 69153905908525362434348\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 106.61ms (170.77ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1447617, ~: 1398331)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 138.59ms (137.86ms CPU time)\n\nRan 3 tests for test/MultichainFlow.t.sol:MultichainFlowTest\n[PASS]\nMultichainFlowTest invariants:\n[PASS] invariant_receiverKeepsNothingAndVaultHoldsDeliveries\n[PASS] invariant_remoteStackerHoldsExactlyWhatIsWaiting\n MultichainFlowTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-------------------+----------+-------+---------+----------╮\n| Contract          | Selector | Calls | Reverts | Discards |\n+===========================================================+\n| MultichainHandler | credit   | 663   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | flush    | 700   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | pass     | 685   | 0       | 0        |\n╰-------------------+----------+-------+---------+----------╯\n\n[PASS] test_endToEnd_creditFlushDeliver() (gas: 1459021)\n[PASS] test_handlerReachesFlushes() (gas: 1418873)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 364.12ms (363.58ms CPU time)\n\nRan 19 tests for test/RemoteStacker.t.sol:RemoteStackerTest\n[PASS] testFuzz_flush_conservesEveryWei(uint96,uint96,uint32) (runs: 256, μ: 609702, ~: 304449)\nLogs:\n  Bound result 6126703421001551115565\n  Bound result 1717459738917\n\n[PASS] testFuzz_tip_neverAboveTwoPercent(uint64,uint96) (runs: 256, μ: 182491, ~: 182479)\nLogs:\n  Bound result 615\n\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 3842)\n[PASS] test_credit_clockIsAmountWeighted() (gas: 291661)\n[PASS] test_credit_contractWalletPaidPlainUnlessRegistered() (gas: 664548)\n[PASS] test_credit_eip7702WalletGoesThroughTheQueue() (gas: 289940)\n[PASS] test_credit_queuesForPlainWallet() (gas: 226495)\n[PASS] test_credit_rejectsInvalidTraders() (gas: 172255)\n[PASS] test_credit_shortAllowanceOrBalanceReverts() (gas: 187800)\n[PASS] test_credit_zeroAmountMovesNothing() (gas: 58557)\n[PASS] test_flush_atMostFiftyRecipients() (gas: 85104)\n[PASS] test_flush_fiftyRecipients() (gas: 9462269)\n[PASS] test_flush_isAtomic_sendFailureChangesNothing() (gas: 425030)\n[PASS] test_flush_nothingToFlushReverts() (gas: 278869)\n[PASS] test_flush_sendsRoundedAmountsPaysTipAndRefundsExcess() (gas: 1082467)\n[PASS] test_flush_skipsEmptyAndDuplicateAndDustOnlyRecipients() (gas: 891806)\n[PASS] test_flush_traderCanFlushThemselvesAtOnce() (gas: 760652)\n[PASS] test_setEthereumRecipient_refusesInvalidAndIsPerCaller() (gas: 358228)\n[PASS] test_tip_growsLinearlyAndCapsAtTwoPercent() (gas: 249716)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 468.74ms (492.53ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 393   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 460   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 403   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 379   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 413   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 2412\n  Bound result 9\n  Bound result 12824099442498566215\n  Bound result 387494384318229483124\n  Bound result 1\n  Bound result 129\n  Bound result 3\n  Bound result 26\n  Bound result 8\n  Bound result 5\n  Bound result 246022358071945079066470\n  Bound result 4\n  Bound result 400000000000000000\n  Bound result 3497\n  Bound result 10000000000000000007\n  Bound result 10\n  Bound result 5\n  Bound result 93\n  Bound result 6955\n  Bound result 2473148925\n  Bound result 761863229058591405746\n  Bound result 2\n  Bound result 10\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 506.68ms (504.43ms CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268119, ~: 3268005)\nLogs:\n  Bound result 821871\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 608.67ms (608.84ms CPU time)\n\nRan 16 tests for test/StackReceiver.t.sol:StackReceiverTest\n[PASS] testFuzz_delivery_mixedZeroAndPositiveShares(uint96,uint96,bool) (runs: 256, μ: 489441, ~: 489260)\nLogs:\n  Bound result 470440641259\n  Bound result 1615987151333563\n\n[PASS] testFuzz_delivery_sumExactlyDelivered(uint96,uint96) (runs: 256, μ: 380798, ~: 380784)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 8112)\n[PASS] test_delivery_assetMismatchRefusesTheFirstDelivery() (gas: 1930170)\n[PASS] test_delivery_depositsForEachTraderAndKeepsNothing() (gas: 552622)\n[PASS] test_delivery_inconsistentPreviewRollsBackInsteadOfSpendingOtherFunds() (gas: 626160)\n[PASS] test_delivery_listMustAddUpToTheAmountReceived() (gas: 363345)\n[PASS] test_delivery_onlyFromTheEndpointAndOnlyForIMD() (gas: 439485)\n[PASS] test_delivery_pausedVaultPaysPlainIMD() (gas: 584380)\n[PASS] test_delivery_rejectsNativeValueAndCanRetryWithoutIt() (gas: 556396)\n[PASS] test_delivery_revertingDepositPaysOnlyThatTraderPlainIMD() (gas: 416475)\n[PASS] test_delivery_revertingPreviewPaysOnlyThatTraderPlainIMD() (gas: 400333)\n[PASS] test_delivery_strayIMDIsNeverSpent() (gas: 344430)\n[PASS] test_delivery_zeroAmountEntryIsSkipped() (gas: 304641)\n[PASS] test_delivery_zeroSharesPaysPlainIMDWithoutDepositing() (gas: 465715)\n[PASS] test_vault_zeroShareDepositStillConsumesAssets() (gas: 275682)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 625.80ms (141.33ms CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3609937, ~: 3578806)\nLogs:\n  Bound result 2\n  Bound result 64\n  Bound result 55\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6793795, ~: 6733125)\nLogs:\n  Bound result 2\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862252)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504752)\n[PASS] test_challengeMaximumReason() (gas: 7118201)\n[PASS] test_challengeMinimumReason() (gas: 6643534)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53799580)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750569)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 651.84ms (1.23s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674629, ~: 674352)\nLogs:\n  Bound result 12\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 903750, ~: 885097)\nLogs:\n  Bound result 4\n  Bound result 598932973628277141747\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842884, ~: 845442)\nLogs:\n  Bound result 1\n  Bound result 3328\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 877030, ~: 876271)\nLogs:\n  Bound result 1\n  Bound result 3328\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 669.90ms (1.63s CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9345187, ~: 9348335)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6340441, ~: 6346544)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327168, ~: 7327363)\nLogs:\n  Bound result 66\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240063, ~: 3239786)\nLogs:\n  Bound result 4663\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302462)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764366)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302572)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723080)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674465)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300977)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666281)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742710)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415451)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854511)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349350)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329990)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390657)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 669.97ms (2.38s CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 256989, ~: 55837)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 313482, ~: 47867)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531117)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219851)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229539)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317268)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227423)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117533)\n[PASS] test_apply_validation() (gas: 567226)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062321)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362238)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363040)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339341)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314280)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469424)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115895)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990106)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057732)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171710)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319132)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160454)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 669.96ms (694.92ms CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539321, ~: 6539487)\nLogs:\n  Bound result 4296\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316048, ~: 3314072)\nLogs:\n  Bound result 19732\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493598)\n[PASS] test_clockIsPerProject() (gas: 6503818)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417371)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290917)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333746)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821659)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 661.23ms (995.05ms CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234704, ~: 234498)\nLogs:\n  Bound result 6089\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1543057, ~: 1371088)\nLogs:\n  Bound result 3\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388852, ~: 388806)\nLogs:\n  Bound result 364449377884085995176443\n  Bound result 0\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 744418, ~: 761914)\nLogs:\n  Bound result 63994306013924796888294\n  Bound result 76502064195493214570588\n  Bound result 93402786154150397713622\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 684309, ~: 689024)\nLogs:\n  Bound result 63994306013924796888294\n  Bound result 76502064195493214570588\n  Bound result 93402786154150397713622\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 494011, ~: 510594)\nLogs:\n  Bound result 528174896\n  Bound result 853\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 670.24ms (2.25s CPU time)\n\nRan 6 tests for test/RegistrySelfBeneficiary.t.sol:RegistrySelfBeneficiaryTest\n[PASS] test_acceptedSelfChallengeHoldsSlotUntilAnswerWithoutNewCooldown() (gas: 9460831)\n[PASS] test_applicationRefusesRegistryBeforeFeeOrRequest() (gas: 171010)\n[PASS] test_contractBeneficiaryStillReceivesBondAndCanHandOff() (gas: 6434857)\n[PASS] test_handoffRefusesRegistryAndPreservesBondRecipient() (gas: 6367548)\n[PASS] test_registryOwnedProjectCannotApplyWithRegistryAsBeneficiary() (gas: 507127)\n[PASS] test_rejectedHandoffDoesNotConsumeDailyHandoff() (gas: 3287504)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 670.13ms (4.34ms CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976894, ~: 976865)\nLogs:\n  Bound result 37760778774622857182824\n  Bound result 52351934831344847876139\n  Bound result 13605722559692\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935880, ~: 2941287)\nLogs:\n  Bound result 821871\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 670.21ms (1.33s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554664, ~: 6554617)\nLogs:\n  Bound result 199999\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6639689, ~: 6646682)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 4995387, ~: 3434609)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433590, ~: 6433340)\nLogs:\n  Bound result 0\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414922)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405381)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831731)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413357)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592763)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190907)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613885)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405670)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686933)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529365)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956450)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561303)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575234)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558379)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627102)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537524)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 670.57ms (1.78s CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 236   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 231   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 281   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 271   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 292   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 225   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 259   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 253   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 30\n  Bound result 144196\n  Bound result 49\n  Bound result 110279\n  Bound result 4400\n  Bound result 25\n  Bound result 26\n  Bound result 228\n  Bound result 64\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968878)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 774.37ms (774.20ms CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 439   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 478   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 500   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 490   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 449   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 489   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 445   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 488   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 465   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 456   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 483   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 472   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 490   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 280\n  Bound result 7\n  Bound result 802972\n  Bound result 37895\n  Bound result 297592518370927317686\n  Bound result 16077\n  Bound result 10763278549422483893455\n  Bound result 16561\n  Bound result 127\n  Bound result 255482561871\n  Bound result 1294\n  Bound result 28\n  Bound result 86400\n  Bound result 4\n  Bound result 46401139052677061212373\n  Bound result 500000000000000000\n  Bound result 32400\n  Bound result 1452\n  Bound result 1785495494124058210\n  Bound result 6165\n  Bound result 5017896699296516851054\n  Bound result 5749222831582\n  Bound result 3219\n  Bound result 600000000000000000\n  Bound result 1739\n  Bound result 2420\n  Bound result 42298849257838462873\n  Bound result 512\n  Bound result 887\n  Bound result 2074101770\n  Bound result 1824\n  Bound result 407239219814\n  Bound result 40000000000000000\n  Bound result 2\n  Bound result 6784247067953537247501\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.85s (3.84s CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1808  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1774  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1744  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1771  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1883  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1852  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1815  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1870  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1867  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 9751\n  Bound result 17527\n  Bound result 15826\n  Bound result 404795911345761899\n  Bound result 4651\n  Bound result 880729540512199222\n  Bound result 67\n  Bound result 80000\n  Bound result 44\n  Bound result 25\n  Bound result 15244\n  Bound result 330395157159285214\n  Bound result 16477\n  Bound result 135893\n  Bound result 31\n  Bound result 3\n  Bound result 44\n  Bound result 108384\n  Bound result 11\n  Bound result 24673\n  Bound result 4096\n  Bound result 52\n  Bound result 89\n  Bound result 14110\n  Bound result 5409\n  Bound result 1\n  Bound result 8050\n  Bound result 317080067818150404\n  Bound result 12288\n  Bound result 54\n  Bound result 57041\n  Bound result 64\n  Bound result 439582231668982494\n  Bound result 191925227\n  Bound result 84\n  Bound result 157531\n  Bound result 62\n  Bound result 13381\n  Bound result 775646967661854597\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458439)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16504440)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.98s (4.99s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2028  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 1991  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2052  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2065  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2063  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2111  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2033  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2041  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 7728126199414844413030\n  Bound result 48\n  Bound result 19600000000000000000\n  Bound result 76\n  Bound result 4\n  Bound result 2\n  Bound result 399361835908123\n  Bound result 48\n  Bound result 7094\n  Bound result 6\n  Bound result 3675503247774503\n  Bound result 1078582737\n  Bound result 1096291160\n  Bound result 4031653950\n  Bound result 2319\n  Bound result 1927\n  Bound result 7000000000000000000\n  Bound result 4\n  Bound result 1500000000000000000\n  Bound result 7\n  Bound result 5673362405524297819431\n  Bound result 9\n  Bound result 4000000000000000000000\n  Bound result 5999999999995289125145\n  Bound result 0\n  Bound result 96\n  Bound result 500000000000000000\n  Bound result 0\n  Bound result 1\n  Bound result 7547654919752703554516634565\n  Bound result 2593\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.34s (6.34s CPU time)\n\nRan 43 test suites in 6.34s (24.96s CPU time): 277 tests passed, 0 failed, 23 skipped (300 total tests)\n","passed":true},{"durationMs":89,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"RemoteStacker.credit(address,uint256)\",\"RemoteStacker.flush(address[])\",\"RemoteStacker.setEthereumRecipient(address)\",\"StackReceiver.lzCompose(address,bytes32,bytes,address,bytes)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":100,\"NEXT_SESSION.md\":67,\"README.md\":306,\"app.js\":2390,\"docs/data-api.md\":97,\"docs/design.md\":323,\"docs/explainer.html\":247,\"docs/history.md\":444,\"docs/launches.md\":49,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":90,\"docs/plea-handoff.md\":73,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":171,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-launch.md\":14,\"jobs/13-sepolia-v6-launch.md\":13,\"jobs/14-mainnet-stackreceiver-launch.md\":13,\"jobs/15-robinhood-remotestacker-launch.md\":12,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-launch.json\":31,\"jobs/requests/13-sepolia-v6-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":14,\"listings/sepolia.json\":1,\"llms.txt\":48,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":713,\"src/Stacker.sol\":104,\"src/multichain/LayerZero.sol\":112,\"src/multichain/RemoteStacker.sol\":299,\"src/multichain/StackReceiver.sol\":157,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1666,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":193,\"test/FactoryRehearsal.t.sol\":47,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/MultichainFlow.t.sol\":184,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySelfBeneficiary.t.sol\":148,\"test/RegistrySepoliaFork.t.sol\":113,\"test/RemoteStacker.t.sol\":391,\"test/RobinhoodFork.t.sol\":144,\"test/SepoliaFork.t.sol\":141,\"test/StackReceiver.t.sol\":344,\"test/StackReceiverMainnetFork.t.sol\":251,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/TrialVenue.t.sol\":147,\"test/VaultTrustRegression.t.sol\":41,\"test/mocks/MockIntake.sol\":108,\"test/mocks/MockOFT.sol\":138,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"test/trial/TrialVenue.sol\":222,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":181,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":158,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1945,"exitCode":0,"name":"slither","output":"[medium/medium] divide-before-multiply at src/multichain/RemoteStacker.sol:248: RemoteStacker._plan(address[]) (src/multichain/RemoteStacker.sol#248-277) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/multichain/RemoteStacker.sol:248: RemoteStacker._plan(address[]) (src/multichain/RemoteStacker.sol#248-277) uses a dangerous strict equality:\n[medium/high] locked-ether at src/multichain/LayerZero.sol:52: Contract locking ether found:\n[medium/medium] uninitialized-local at src/multichain/StackReceiver.sol:104: StackReceiver._check(address[],uint256[],uint256).sum (src/multichain/StackReceiver.sol#104) is a local variable never initialized\n[medium/medium] unused-return at src/oracle/OracleAttestation.sol:171: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/oracle/OracleAttestation.sol#171-189) ignores return value by (recovered,err,None) = ECDSA.tryRecover(digest,signature) (src/oracle/OracleAttestation.sol#184)\n[medium/medium] unused-return at src/multichain/RemoteStacker.sol:218: RemoteStacker.flush(address[]) (src/multichain/RemoteStacker.sol#218-244) ignores return value by (receipt,None) = IOFT(address(IMD)).send{value: msg.value}(_sendParam(plan),MessagingFee(msg.value,0),msg.sender) (src/multichain/RemoteStacker.sol#234-236)\n[medium/medium] unused-return at src/ProjectRegistry.sol:442: ProjectRegistry.expire(address) (src/ProjectRegistry.sol#442-451) ignores return value by (None,None,None,completed) = intake.requests(intakeId) (src/ProjectRegistry.sol#447)\n[low/medium] calls-loop at src/multichain/StackReceiver.sol:140: StackReceiver._tryDeposit(uint256,address) (src/multichain/StackReceiver.sol#140-156) has external calls inside a loop: shares = SIMD.deposit(amount,trader) (src/multichain/StackReceiver.sol#147-155)\n[low/medium] calls-loop at src/multichain/StackReceiver.sol:140: StackReceiver._tryDeposit(uint256,address) (src/multichain/StackReceiver.sol#140-156) has external calls inside a loop: preview = IStakedIMDPreview(address(SIMD)).previewDeposit(amount) (src/multichain/StackReceiver.sol#142-146)\n[low/medium] reentrancy-benign at src/ProjectRegistry.sol:344: Reentrancy in ProjectRegistry._ask(address,ProjectRegistry.Project,string,uint256) (src/ProjectRegistry.sol#344-362):\n[low/medium] reentrancy-benign at src/Stacker.sol:74: Reentrancy in Stacker.credit(address,uint256) (src/Stacker.sol#74-103):\n[low/medium] reentrancy-benign at src/multichain/StackReceiver.sol:80: Reentrancy in StackReceiver.lzCompose(address,bytes32,bytes,address,bytes) (src/multichain/StackReceiver.sol#80-97):\n[low/medium] timestamp at src/multichain/RemoteStacker.sol:248: RemoteStacker._plan(address[]) (src/multichain/RemoteStacker.sol#248-277) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:368: ProjectRegistry.onOracleResult(bytes32,OracleAttestation.Attestation,bytes) (src/ProjectRegistry.sol#368-420) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:317: ProjectRegistry._challenge(address,string,address) (src/ProjectRegistry.sol#317-335) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:516: ProjectRegistry.setBeneficiary(address,address) (src/ProjectRegistry.sol#516-531) uses timestamp for comparisons\n[low/medium] timestamp at src/oracle/OracleAttestation.sol:171: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/oracle/OracleAttestation.sol#171-189) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:442: ProjectRegistry.expire(address) (src/ProjectRegistry.sol#442-451) uses timestamp for comparisons\n[low/medium] timestamp at src/multichain/RemoteStacker.sol:177: RemoteStacker.tipBps(address) (src/multichain/RemoteStacker.sol#177-182) uses timestamp for comparisons","passed":true},{"durationMs":475,"exitCode":0,"name":"aderyn","output":"[high] contract-locks-ether at src/multichain/RemoteStacker.sol:34: Contract locks Ether without a withdraw function (2 places)\n[high] reentrancy-state-change at src/Stacker.sol:86: Reentrancy: State change after external call (2 places)\n[low] costly-loop at src/multichain/RemoteStacker.sol:227: Costly operations inside loop\n[low] division-before-multiplication at src/multichain/RemoteStacker.sol:260: Incorrect Order of Division and Multiplication\n[low] internal-function-used-once at src/oracle/OracleAttestation.sol:209: Internal Function Used Only Once\n[low] large-numeric-literal at src/ProjectRegistry.sol:100: Large Numeric Literal (5 places)\n[low] require-revert-in-loop at src/ProjectRegistry.sol:706: Loop Contains `require`/`revert` (2 places)\n[low] uninitialized-local-variable at src/ProjectRegistry.sol:706: Uninitialized Local Variable (7 places)\n[low] unsafe-erc20-operation at src/ProjectRegistry.sol:482: Unsafe ERC20 Operation\n[low] unused-public-function at src/ProjectRegistry.sol:536: Public Function Not Used Internally","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"153008c81cc2daeface412a7141d9cbcecca6440c764768507d6faa7d1cfe91d","verifiedTreeHash":"f6920eff51df8b65f33737f1132e829da07564a3","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":17319,"exitCode":0,"name":"build","output":"Compiling 106 files with Solc 0.8.26\nSolc 0.8.26 finished in 17.18s\nCompiler run successful!\n","passed":true},{"durationMs":6698,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 524.94µs (44.16µs CPU time)\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 575.32µs (523.53µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 976.95µs (769.04µs CPU time)\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 200.05µs (28.36µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 414.98µs (45.63µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.80ms (323.63µs CPU time)\n\nRan 5 tests for test/StackReceiverMainnetFork.t.sol:StackReceiverMainnetForkTest\n[SKIP] test_fork_arrivalDepositsForEveryTrader() (gas: 0)\n[SKIP] test_fork_composeIsDeliveredOnceAndOnlyFromTheEndpoint() (gas: 0)\n[SKIP] test_fork_composeRejectsValueWithoutConsumingTheQueue() (gas: 0)\n[SKIP] test_fork_gasBudgetCoversOneTenAndFiftyTraders() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 358.86µs (48.14µs CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.13ms (516.04µs CPU time)\n\nRan 4 tests for test/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] test_fork_fiftyTradersQuoteAndFlush() (gas: 0)\n[SKIP] test_fork_flushBurnsHereAndTheEndpointAcceptsTheMessage() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_tooLittleFeeChangesNothing() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 4 skipped; finished in 1.13ms (31.98µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.82ms (142.35µs CPU time)\n\nRan 2 tests for test/StackReceiverLaunch.t.sol:StackReceiverLaunchTest\n[PASS] test_manifestFactoryDeploysOneContractWithNoExternalConstructorCalls() (gas: 1320879)\n[PASS] test_manifestPinsExactlyTheMainnetReceiver() (gas: 20718)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.28ms (3.28ms CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.72ms (278.17µs CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.16ms (766.75µs CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 2.27ms (1.34ms CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829118)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.60ms (1.74ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.93ms (187.43µs CPU time)\n\nRan 6 tests for test/RegistrySelfBeneficiary.t.sol:RegistrySelfBeneficiaryTest\n[PASS] test_acceptedSelfChallengeHoldsSlotUntilAnswerWithoutNewCooldown() (gas: 9460831)\n[PASS] test_applicationRefusesRegistryBeforeFeeOrRequest() (gas: 171010)\n[PASS] test_contractBeneficiaryStillReceivesBondAndCanHandOff() (gas: 6434857)\n[PASS] test_handoffRefusesRegistryAndPreservesBondRecipient() (gas: 6367548)\n[PASS] test_registryOwnedProjectCannotApplyWithRegistryAsBeneficiary() (gas: 507127)\n[PASS] test_rejectedHandoffDoesNotConsumeDailyHandoff() (gas: 3287504)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 5.90ms (9.90ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.94ms (186.79µs CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 6.82ms (4.39ms CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25975)\n[PASS] test_launchManifest_knownShape() (gas: 17310)\n[PASS] test_multichain_emptyChainRehearsal_constructorsPass() (gas: 5600262)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8416629)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 20.82ms (47.13ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420742)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582598)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089189)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436229)\n[PASS] test_ownerMayApply() (gas: 3320997)\n[PASS] test_projectItselfMayApply() (gas: 3381856)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3284007)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550174)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390876)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 21.66ms (13.00ms CPU time)\n\nRan 19 tests for test/RemoteStacker.t.sol:RemoteStackerTest\n[PASS] testFuzz_flush_conservesEveryWei(uint96,uint96,uint32) (runs: 256, μ: 659022, ~: 917262)\nLogs:\n  Bound result 1061822546\n  Bound result 7067649218208507960242\n\n[PASS] testFuzz_tip_neverAboveTwoPercent(uint64,uint96) (runs: 256, μ: 182491, ~: 182479)\nLogs:\n  Bound result 2587\n\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 3842)\n[PASS] test_credit_clockIsAmountWeighted() (gas: 291661)\n[PASS] test_credit_contractWalletPaidPlainUnlessRegistered() (gas: 664548)\n[PASS] test_credit_eip7702WalletGoesThroughTheQueue() (gas: 289940)\n[PASS] test_credit_queuesForPlainWallet() (gas: 226495)\n[PASS] test_credit_rejectsInvalidTraders() (gas: 172255)\n[PASS] test_credit_shortAllowanceOrBalanceReverts() (gas: 187800)\n[PASS] test_credit_zeroAmountMovesNothing() (gas: 58557)\n[PASS] test_flush_atMostFiftyRecipients() (gas: 85104)\n[PASS] test_flush_fiftyRecipients() (gas: 9462269)\n[PASS] test_flush_isAtomic_sendFailureChangesNothing() (gas: 425030)\n[PASS] test_flush_nothingToFlushReverts() (gas: 278869)\n[PASS] test_flush_sendsRoundedAmountsPaysTipAndRefundsExcess() (gas: 1082467)\n[PASS] test_flush_skipsEmptyAndDuplicateAndDustOnlyRecipients() (gas: 891806)\n[PASS] test_flush_traderCanFlushThemselvesAtOnce() (gas: 760652)\n[PASS] test_setEthereumRecipient_refusesInvalidAndIsPerCaller() (gas: 358228)\n[PASS] test_tip_growsLinearlyAndCapsAtTwoPercent() (gas: 249716)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 68.35ms (94.64ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106373, ~: 3106166)\nLogs:\n  Bound result 25228503811907672152\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334621)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881719)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210874)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528279)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281247)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409682)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221678)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326584)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345326)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 138.05ms (148.77ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394552, ~: 394389)\nLogs:\n  Bound result 16001\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367434, ~: 368908)\nLogs:\n  Bound result 79601355291\n  Bound result 46485634124\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430313, ~: 430416)\nLogs:\n  Bound result 28409076314815561144880\n  Bound result 79601355291\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 202.24ms (201.20ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1446450, ~: 1398331)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 158.29ms (158.23ms CPU time)\n\nRan 3 tests for test/MultichainFlow.t.sol:MultichainFlowTest\n[PASS]\nMultichainFlowTest invariants:\n[PASS] invariant_receiverKeepsNothingAndVaultHoldsDeliveries\n[PASS] invariant_remoteStackerHoldsExactlyWhatIsWaiting\n MultichainFlowTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-------------------+----------+-------+---------+----------╮\n| Contract          | Selector | Calls | Reverts | Discards |\n+===========================================================+\n| MultichainHandler | credit   | 690   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | flush    | 641   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | pass     | 717   | 0       | 0        |\n╰-------------------+----------+-------+---------+----------╯\n\n[PASS] test_endToEnd_creditFlushDeliver() (gas: 1459021)\n[PASS] test_handlerReachesFlushes() (gas: 1418873)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 546.62ms (542.39ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 422   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 420   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 431   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 370   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 405   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 523129628851462789342\n  Bound result 10\n  Bound result 300\n  Bound result 24000000000000000000000\n  Bound result 3\n  Bound result 5203\n  Bound result 70858384857137302645\n  Bound result 6\n  Bound result 1\n  Bound result 10\n  Bound result 10809\n  Bound result 19600000000000000000\n  Bound result 1076700797\n  Bound result 6538\n  Bound result 5000000000000000000\n  Bound result 6\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 676.12ms (673.88ms CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976855, ~: 976865)\nLogs:\n  Bound result 99999000000000000004813\n  Bound result 1481\n  Bound result 1700\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935593, ~: 2930480)\nLogs:\n  Bound result 6756207\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 472.17ms (473.38ms CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268112, ~: 3267993)\nLogs:\n  Bound result 5902\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 418.65ms (419.63ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 270360, ~: 55898)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 313485, ~: 47867)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531117)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219851)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229539)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317268)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227423)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117533)\n[PASS] test_apply_validation() (gas: 567226)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062321)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362238)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363040)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339341)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314280)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469424)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115895)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990106)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057732)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171710)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319132)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160454)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 754.79ms (53.84ms CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9345187, ~: 9348335)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6340441, ~: 6346544)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327203, ~: 7327363)\nLogs:\n  Bound result 44\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240073, ~: 3239786)\nLogs:\n  Bound result 8315634\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302462)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764366)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302572)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723080)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674465)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300977)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666281)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742710)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415451)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854511)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349350)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329990)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390657)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 754.21ms (1.30s CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234715, ~: 234498)\nLogs:\n  Bound result 662477050302664238292772\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1555136, ~: 1371088)\nLogs:\n  Bound result 12\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388836, ~: 388782)\nLogs:\n  Bound result 532271904\n  Bound result 445458876\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 738232, ~: 761926)\nLogs:\n  Bound result 12490\n  Bound result 1408\n  Bound result 101\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 682043, ~: 689024)\nLogs:\n  Bound result 3\n  Bound result 1029281462744021208\n  Bound result 59683033274517506357769\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 490675, ~: 510443)\nLogs:\n  Bound result 9\n  Bound result 11000000\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 506.77ms (1.74s CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539344, ~: 6539487)\nLogs:\n  Bound result 44853\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316090, ~: 3314072)\nLogs:\n  Bound result 23\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493598)\n[PASS] test_clockIsPerProject() (gas: 6503818)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417371)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290917)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333746)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821659)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 755.31ms (1.15s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674641, ~: 674352)\nLogs:\n  Bound result 5\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 903330, ~: 885097)\nLogs:\n  Bound result 3\n  Bound result 42299226534285677226155\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 843007, ~: 845732)\nLogs:\n  Bound result 3\n  Bound result 24926168925014741784\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 876992, ~: 876223)\nLogs:\n  Bound result 1\n  Bound result 2065\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 462.85ms (781.31ms CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3622311, ~: 3582891)\nLogs:\n  Bound result 15\n  Bound result 101\n  Bound result 82\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6793684, ~: 6728568)\nLogs:\n  Bound result 56\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862252)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504752)\n[PASS] test_challengeMaximumReason() (gas: 7118201)\n[PASS] test_challengeMinimumReason() (gas: 6643534)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53799580)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750569)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 755.41ms (1.37s CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106573)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201501)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279267)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 755.62ms (11.05ms CPU time)\n\nRan 15 tests for test/StackReceiverAdversarial.t.sol:StackReceiverAdversarialTest\n[PASS] testFuzz_headerFieldsPreserveAmountSourceAndBeneficiaries(uint64,uint32,bytes32,bytes32,uint64) (runs: 1000, μ: 461506, ~: 461786)\nLogs:\n  Bound result 366332435217\n\n[PASS] testFuzz_shortOFTHeaderIsAtomic(uint8) (runs: 1000, μ: 428740, ~: 428483)\nLogs:\n  Bound result 5\n\n[PASS] testFuzz_truncatedListIsAtomic(uint16) (runs: 1000, μ: 456444, ~: 451880)\nLogs:\n  Bound result 229\n\n[PASS] test_failedApprovalLeavesFirstDeliveryRetryable() (gas: 833072)\n[PASS] test_forgedComposeCannotSpendAPendingArrival() (gas: 1110024)\n[PASS] test_initializationIsLazyAndApprovalIsNotRepeated() (gas: 983971)\n[PASS] test_lateTransferFailureRollsBackEarlierDepositAndCanRetry() (gas: 1034797)\n[PASS] test_maximumSharedDecimalArrivalCanBeDelivered() (gas: 435078)\n[PASS] test_nestedAuthenticatedComposeIsBlockedAndStillRetryable() (gas: 3325460)\n[PASS] test_nonCanonicalAddressInListIsRejectedAtomically() (gas: 438638)\n[PASS] test_oneWeiAllocationAndDuplicateTradersPreserveEveryWei() (gas: 467004)\n[PASS] test_overlistedMessageCannotUseAnotherMessagesReserve() (gas: 849597)\n[PASS] test_pendingArrivalsCanBeComposedOutOfOrderAndOnlyOnce() (gas: 1074045)\n[PASS] test_sumOverflowRevertsBeforeApprovalOrDelivery() (gas: 440856)\n[PASS] test_zeroArrivalDoesNotConsumeUnrelatedFundsOrStampTraders() (gas: 345109)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 754.37ms (1.84s CPU time)\n\nRan 16 tests for test/StackReceiver.t.sol:StackReceiverTest\n[PASS] testFuzz_delivery_mixedZeroAndPositiveShares(uint96,uint96,bool) (runs: 256, μ: 489424, ~: 489260)\nLogs:\n  Bound result 1075803599714\n  Bound result 999998000000004510\n\n[PASS] testFuzz_delivery_sumExactlyDelivered(uint96,uint96) (runs: 256, μ: 380786, ~: 380760)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 8112)\n[PASS] test_delivery_assetMismatchRefusesTheFirstDelivery() (gas: 1930170)\n[PASS] test_delivery_depositsForEachTraderAndKeepsNothing() (gas: 552622)\n[PASS] test_delivery_inconsistentPreviewRollsBackInsteadOfSpendingOtherFunds() (gas: 626160)\n[PASS] test_delivery_listMustAddUpToTheAmountReceived() (gas: 363345)\n[PASS] test_delivery_onlyFromTheEndpointAndOnlyForIMD() (gas: 439485)\n[PASS] test_delivery_pausedVaultPaysPlainIMD() (gas: 584380)\n[PASS] test_delivery_rejectsNativeValueAndCanRetryWithoutIt() (gas: 556396)\n[PASS] test_delivery_revertingDepositPaysOnlyThatTraderPlainIMD() (gas: 416475)\n[PASS] test_delivery_revertingPreviewPaysOnlyThatTraderPlainIMD() (gas: 400333)\n[PASS] test_delivery_strayIMDIsNeverSpent() (gas: 344430)\n[PASS] test_delivery_zeroAmountEntryIsSkipped() (gas: 304641)\n[PASS] test_delivery_zeroSharesPaysPlainIMDWithoutDepositing() (gas: 465715)\n[PASS] test_vault_zeroShareDepositStillConsumesAssets() (gas: 275682)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 754.45ms (333.42ms CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554667, ~: 6554617)\nLogs:\n  Bound result 7\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6641240, ~: 6646682)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 5064626, ~: 6568873)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433605, ~: 6433340)\nLogs:\n  Bound result 5\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414922)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405381)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831731)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413357)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592763)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190907)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613885)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405670)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686933)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529365)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956450)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561303)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575234)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558379)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627102)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537524)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 755.68ms (3.01s CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 755.64ms (110.35µs CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 233   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 256   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 275   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 256   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 241   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 236   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 257   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 294   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 244\n  Bound result 44\n  Bound result 99\n  Bound result 96000\n  Bound result 110931\n  Bound result 55\n  Bound result 127\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968878)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 826.86ms (825.71ms CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 461   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 468   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 487   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 459   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 493   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 507   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 467   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 482   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 461   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 449   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 488   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 455   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 467   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 8714\n  Bound result 32\n  Bound result 2\n  Bound result 100000000000000000\n  Bound result 3249\n  Bound result 19\n  Bound result 10\n  Bound result 101562861823888698\n  Bound result 10\n  Bound result 24410356837202872\n  Bound result 5590\n  Bound result 18342\n  Bound result 4000000000000000000000\n  Bound result 221\n  Bound result 9\n  Bound result 3255\n  Bound result 3\n  Bound result 43200\n  Bound result 25000000000000000000000\n  Bound result 1101999954\n  Bound result 19401\n  Bound result 10000000000000000000\n  Bound result 12747\n  Bound result 1989937352231299571238\n  Bound result 3\n  Bound result 10800\n  Bound result 411000\n  Bound result 1800003600\n  Bound result 4200000\n  Bound result 456\n  Bound result 12345\n  Bound result 5000\n  Bound result 263559\n  Bound result 16095\n  Bound result 30101\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.08s (4.09s CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111540)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 939032)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232683)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219736)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052745)\n[PASS] test_owedBondsAccumulate() (gas: 1421953)\n[PASS] test_unblocked_paysAtOnce() (gas: 950815)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 4.10s (7.44ms CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1795  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1733  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1850  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1885  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1801  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1777  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1900  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1857  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1786  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 24\n  Bound result 12\n  Bound result 91\n  Bound result 182\n  Bound result 1\n  Bound result 136415\n  Bound result 7\n  Bound result 1747\n  Bound result 1909\n  Bound result 27\n  Bound result 2\n  Bound result 14230\n  Bound result 87\n  Bound result 34762847946167\n  Bound result 24374107150182043\n  Bound result 5131\n  Bound result 346475620251\n  Bound result 236\n  Bound result 60\n  Bound result 21651\n  Bound result 42\n  Bound result 16171\n  Bound result 100\n  Bound result 75456\n  Bound result 10\n  Bound result 87960\n  Bound result 39\n  Bound result 12599957553597\n  Bound result 1722\n  Bound result 334181409\n  Bound result 14462\n  Bound result 50\n  Bound result 161315\n  Bound result 43\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458439)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16504440)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.39s (5.41s CPU time)\n\nRan 2 tests for test/StackReceiverPendingInvariant.t.sol:StackReceiverPendingInvariantTest\n[PASS]\nStackReceiverPendingInvariantTest invariants:\n[PASS] invariant_countersCountOnlySuccessfulDeliveryOncePerSource\n[PASS] invariant_eachTraderReceivesOnlyTheirFundedAllocation\n[PASS] invariant_pendingAndUnsolicitedIMDAreFullyBacked\n StackReceiverPendingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------------------+----------+-------+---------+----------╮\n| Contract               | Selector | Calls | Reverts | Discards |\n+================================================================+\n| ReceiverPendingHandler | arrive   | 3386  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | compose  | 3247  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | donate   | 3249  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | pause    | 3302  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | reject   | 3200  | 0       | 0        |\n╰------------------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 5\n  Bound result 4\n  Bound result 6\n  Bound result 15387\n  Bound result 2\n  Bound result 9771\n  Bound result 3\n  Bound result 4\n  Bound result 6\n  Bound result 3\n  Bound result 2222428\n  Bound result 2\n  Bound result 2\n  Bound result 3\n  Bound result 4257\n  Bound result 3\n  Bound result 5\n  Bound result 982234483577243545645834\n  Bound result 2\n  Bound result 2597\n  Bound result 999999999999999999990001\n  Bound result 26827750457589835766968\n  Bound result 1\n  Bound result 5\n  Bound result 976\n  Bound result 2\n  Bound result 940661406084774081327208\n  Bound result 68108559499066999999\n\n[PASS] test_handlerReachesRetriesMixedPayoutsReplayAndOutOfOrderDelivery() (gas: 4267751)\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 7000000000000000000\n  Bound result 6\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.49s (6.48s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2070  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2067  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2048  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2023  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 1998  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2092  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2071  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2015  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 795\n  Bound result 9\n  Bound result 3\n  Bound result 2411031535\n  Bound result 5000000000000000000000\n  Bound result 5\n  Bound result 0\n  Bound result 2\n  Bound result 10000\n  Bound result 9444518593139165292884\n  Bound result 9999999999999999999996\n  Bound result 100000\n  Bound result 0\n  Bound result 9998000000000000000000\n  Bound result 3632\n  Bound result 4822283864\n  Bound result 1565484746803372543600\n  Bound result 53750\n  Bound result 1\n  Bound result 10218\n  Bound result 4276624628\n  Bound result 34\n  Bound result 76\n  Bound result 1888900\n  Bound result 1\n  Bound result 2\n  Bound result 7\n  Bound result 7\n  Bound result 1\n  Bound result 3\n  Bound result 7144\n  Bound result 0\n  Bound result 32400\n  Bound result 0\n  Bound result 0\n  Bound result 5000000000000000275300\n  Bound result 0\n  Bound result 46072\n  Bound result 11155111\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.56s (6.55s CPU time)\n\nRan 46 test suites in 6.57s (37.99s CPU time): 296 tests passed, 0 failed, 23 skipped (319 total tests)\n","passed":true},{"durationMs":104,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"RemoteStacker.credit(address,uint256)\",\"RemoteStacker.flush(address[])\",\"RemoteStacker.setEthereumRecipient(address)\",\"StackReceiver.lzCompose(address,bytes32,bytes,address,bytes)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":100,\"NEXT_SESSION.md\":67,\"README.md\":306,\"app.js\":2390,\"docs/data-api.md\":97,\"docs/design.md\":323,\"docs/explainer.html\":247,\"docs/history.md\":444,\"docs/launches.md\":49,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":90,\"docs/plea-handoff.md\":73,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":171,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-launch.md\":14,\"jobs/13-sepolia-v6-launch.md\":13,\"jobs/14-mainnet-stackreceiver-launch.md\":13,\"jobs/15-robinhood-remotestacker-launch.md\":12,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-launch.json\":31,\"jobs/requests/13-sepolia-v6-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":14,\"listings/sepolia.json\":1,\"llms.txt\":48,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":713,\"src/Stacker.sol\":104,\"src/multichain/LayerZero.sol\":112,\"src/multichain/RemoteStacker.sol\":299,\"src/multichain/StackReceiver.sol\":157,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1666,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":193,\"test/FactoryRehearsal.t.sol\":47,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/MultichainFlow.t.sol\":184,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySelfBeneficiary.t.sol\":148,\"test/RegistrySepoliaFork.t.sol\":113,\"test/RemoteStacker.t.sol\":391,\"test/RobinhoodFork.t.sol\":144,\"test/SepoliaFork.t.sol\":141,\"test/StackReceiver.t.sol\":344,\"test/StackReceiverAdversarial.t.sol\":321,\"test/StackReceiverCoverage.md\":61,\"test/StackReceiverLaunch.t.sol\":106,\"test/StackReceiverMainnetFork.t.sol\":251,\"test/StackReceiverPendingInvariant.t.sol\":331,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/TrialVenue.t.sol\":147,\"test/VaultTrustRegression.t.sol\":41,\"test/helpers/StackReceiverFixture.sol\":101,\"test/mocks/MockIntake.sol\":108,\"test/mocks/MockOFT.sol\":138,\"test/mocks/QueuedComposeEndpoint.sol\":40,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"test/trial/TrialVenue.sol\":222,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":181,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":158,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2a6a25ea14fad552f03bc99e7189a5955596fe805c7e130e91a18e13cc3757bb","verifiedTreeHash":"1a48ccdc68745a3c21fc47f797ca6fe323c5f0e4","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":17669,"exitCode":0,"name":"build","output":"Compiling 101 files with Solc 0.8.26\nSolc 0.8.26 finished in 17.50s\nCompiler run successful!\n","passed":true},{"durationMs":7472,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 318.04µs (58.02µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 602.89µs (87.61µs CPU time)\n\nRan 4 tests for test/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] test_fork_fiftyTradersQuoteAndFlush() (gas: 0)\n[SKIP] test_fork_flushBurnsHereAndTheEndpointAcceptsTheMessage() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_tooLittleFeeChangesNothing() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 4 skipped; finished in 738.57µs (108.06µs CPU time)\n\nRan 5 tests for test/StackReceiverMainnetFork.t.sol:StackReceiverMainnetForkTest\n[SKIP] test_fork_arrivalDepositsForEveryTrader() (gas: 0)\n[SKIP] test_fork_composeIsDeliveredOnceAndOnlyFromTheEndpoint() (gas: 0)\n[SKIP] test_fork_composeRejectsValueWithoutConsumingTheQueue() (gas: 0)\n[SKIP] test_fork_gasBudgetCoversOneTenAndFiftyTraders() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 766.95µs (336.07µs CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 1.10ms (78.37µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.14ms (947.41µs CPU time)\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 343.18µs (17.78µs CPU time)\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 724.26µs (554.44µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.13ms (1.20ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.14ms (167.26µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.13ms (146.64µs CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.37ms (349.38µs CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 5.72ms (3.41ms CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829118)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.65ms (4.82ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.70ms (1.14ms CPU time)\n\nRan 6 tests for test/RegistrySelfBeneficiary.t.sol:RegistrySelfBeneficiaryTest\n[PASS] test_acceptedSelfChallengeHoldsSlotUntilAnswerWithoutNewCooldown() (gas: 9460831)\n[PASS] test_applicationRefusesRegistryBeforeFeeOrRequest() (gas: 171010)\n[PASS] test_contractBeneficiaryStillReceivesBondAndCanHandOff() (gas: 6434857)\n[PASS] test_handoffRefusesRegistryAndPreservesBondRecipient() (gas: 6367548)\n[PASS] test_registryOwnedProjectCannotApplyWithRegistryAsBeneficiary() (gas: 507127)\n[PASS] test_rejectedHandoffDoesNotConsumeDailyHandoff() (gas: 3287504)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 11.52ms (6.15ms CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106573)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201501)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279267)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 13.31ms (11.58ms CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25975)\n[PASS] test_launchManifest_knownShape() (gas: 17699)\n[PASS] test_multichain_emptyChainRehearsal_constructorsPass() (gas: 5600262)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8416629)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 22.75ms (40.42ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 257587, ~: 55837)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 382783, ~: 47867)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531117)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219851)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229539)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317268)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227423)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117533)\n[PASS] test_apply_validation() (gas: 567226)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062321)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362238)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363040)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339341)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314280)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469424)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115895)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990106)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057732)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171710)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319132)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160454)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 53.01ms (61.33ms CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 2.02ms (1.22ms CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 2.10ms (1.24ms CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.05ms (743.65µs CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106343, ~: 3106166)\nLogs:\n  Bound result 14264337593543950333\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334621)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881719)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210874)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528279)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281247)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409682)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221678)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326584)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345326)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 100.29ms (106.45ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394483, ~: 394341)\nLogs:\n  Bound result 56\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367460, ~: 368888)\nLogs:\n  Bound result 1785289049\n  Bound result 2034\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430335, ~: 430416)\nLogs:\n  Bound result 2034\n  Bound result 1785289049\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 115.95ms (167.15ms CPU time)\n\nRan 16 tests for test/StackReceiver.t.sol:StackReceiverTest\n[PASS] testFuzz_delivery_mixedZeroAndPositiveShares(uint96,uint96,bool) (runs: 256, μ: 489427, ~: 489271)\nLogs:\n  Bound result 640493554096\n  Bound result 2000000000003\n\n[PASS] testFuzz_delivery_sumExactlyDelivered(uint96,uint96) (runs: 256, μ: 380791, ~: 380772)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 8112)\n[PASS] test_delivery_assetMismatchRefusesTheFirstDelivery() (gas: 1930170)\n[PASS] test_delivery_depositsForEachTraderAndKeepsNothing() (gas: 552622)\n[PASS] test_delivery_inconsistentPreviewRollsBackInsteadOfSpendingOtherFunds() (gas: 626160)\n[PASS] test_delivery_listMustAddUpToTheAmountReceived() (gas: 363345)\n[PASS] test_delivery_onlyFromTheEndpointAndOnlyForIMD() (gas: 439485)\n[PASS] test_delivery_pausedVaultPaysPlainIMD() (gas: 584380)\n[PASS] test_delivery_rejectsNativeValueAndCanRetryWithoutIt() (gas: 556396)\n[PASS] test_delivery_revertingDepositPaysOnlyThatTraderPlainIMD() (gas: 416475)\n[PASS] test_delivery_revertingPreviewPaysOnlyThatTraderPlainIMD() (gas: 400333)\n[PASS] test_delivery_strayIMDIsNeverSpent() (gas: 344430)\n[PASS] test_delivery_zeroAmountEntryIsSkipped() (gas: 304641)\n[PASS] test_delivery_zeroSharesPaysPlainIMDWithoutDepositing() (gas: 465715)\n[PASS] test_vault_zeroShareDepositStillConsumesAssets() (gas: 275682)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 150.05ms (184.92ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1446487, ~: 1398331)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 158.93ms (156.04ms CPU time)\n\nRan 3 tests for test/MultichainFlow.t.sol:MultichainFlowTest\n[PASS]\nMultichainFlowTest invariants:\n[PASS] invariant_receiverKeepsNothingAndVaultHoldsDeliveries\n[PASS] invariant_remoteStackerHoldsExactlyWhatIsWaiting\n MultichainFlowTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-------------------+----------+-------+---------+----------╮\n| Contract          | Selector | Calls | Reverts | Discards |\n+===========================================================+\n| MultichainHandler | credit   | 694   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | flush    | 679   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | pass     | 675   | 0       | 0        |\n╰-------------------+----------+-------+---------+----------╯\n\n[PASS] test_endToEnd_creditFlushDeliver() (gas: 1459021)\n[PASS] test_handlerReachesFlushes() (gas: 1418873)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 405.12ms (404.91ms CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976887, ~: 976877)\nLogs:\n  Bound result 54803264337593543158044\n  Bound result 114610462285523913\n  Bound result 2892844274494960\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935511, ~: 2930480)\nLogs:\n  Bound result 46965109160126974941461\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 449.00ms (689.30ms CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234705, ~: 234498)\nLogs:\n  Bound result 23042\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1517444, ~: 1370434)\nLogs:\n  Bound result 12\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388858, ~: 388806)\nLogs:\n  Bound result 189171587087273500486747\n  Bound result 3436\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 743500, ~: 762010)\nLogs:\n  Bound result 15889161643053329300312\n  Bound result 19404\n  Bound result 172800\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 683909, ~: 689072)\nLogs:\n  Bound result 197\n  Bound result 86377412602371898951518\n  Bound result 12734264285620384594035\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 491772, ~: 510594)\nLogs:\n  Bound result 6554228491282993567\n  Bound result 1\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 597.60ms (1.47s CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9345137, ~: 9345137)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6340345, ~: 6340345)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327178, ~: 7327363)\nLogs:\n  Bound result 97\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240116, ~: 3239786)\nLogs:\n  Bound result 21136807\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302462)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764366)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302572)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723080)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674465)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300977)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666281)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742710)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415451)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854511)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349350)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329990)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390657)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 737.59ms (1.49s CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 270   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 244   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 273   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 248   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 258   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 254   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 278   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 223   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 241\n  Bound result 22313\n  Bound result 32\n  Bound result 33\n  Bound result 166400\n  Bound result 47\n  Bound result 12801\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968878)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 740.08ms (741.51ms CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674654, ~: 674352)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 904385, ~: 931057)\nLogs:\n  Bound result 8\n  Bound result 22797\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842973, ~: 845550)\nLogs:\n  Bound result 1\n  Bound result 4060201421798513365\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 876985, ~: 876223)\nLogs:\n  Bound result 1\n  Bound result 4060201421798513365\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 580.95ms (1.38s CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268133, ~: 3268017)\nLogs:\n  Bound result 8970194514795616731\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 260.36ms (261.55ms CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539340, ~: 6539487)\nLogs:\n  Bound result 85073\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316182, ~: 3314072)\nLogs:\n  Bound result 80091\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493598)\n[PASS] test_clockIsPerProject() (gas: 6503818)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417371)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290917)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333746)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821659)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 743.90ms (1.50s CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111540)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 939032)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232683)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219736)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052745)\n[PASS] test_owedBondsAccumulate() (gas: 1421953)\n[PASS] test_unblocked_paysAtOnce() (gas: 950815)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 743.94ms (12.80ms CPU time)\n\nRan 19 tests for test/RemoteStacker.t.sol:RemoteStackerTest\n[PASS] testFuzz_flush_conservesEveryWei(uint96,uint96,uint32) (runs: 256, μ: 657069, ~: 917636)\nLogs:\n  Bound result 3856056065\n  Bound result 1142\n\n[PASS] testFuzz_tip_neverAboveTwoPercent(uint64,uint96) (runs: 256, μ: 182499, ~: 182479)\nLogs:\n  Bound result 56568909\n\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 3842)\n[PASS] test_credit_clockIsAmountWeighted() (gas: 291661)\n[PASS] test_credit_contractWalletPaidPlainUnlessRegistered() (gas: 664548)\n[PASS] test_credit_eip7702WalletGoesThroughTheQueue() (gas: 289940)\n[PASS] test_credit_queuesForPlainWallet() (gas: 226495)\n[PASS] test_credit_rejectsInvalidTraders() (gas: 172255)\n[PASS] test_credit_shortAllowanceOrBalanceReverts() (gas: 187800)\n[PASS] test_credit_zeroAmountMovesNothing() (gas: 58557)\n[PASS] test_flush_atMostFiftyRecipients() (gas: 85104)\n[PASS] test_flush_fiftyRecipients() (gas: 9462269)\n[PASS] test_flush_isAtomic_sendFailureChangesNothing() (gas: 425030)\n[PASS] test_flush_nothingToFlushReverts() (gas: 278869)\n[PASS] test_flush_sendsRoundedAmountsPaysTipAndRefundsExcess() (gas: 1082467)\n[PASS] test_flush_skipsEmptyAndDuplicateAndDustOnlyRecipients() (gas: 891806)\n[PASS] test_flush_traderCanFlushThemselvesAtOnce() (gas: 760652)\n[PASS] test_setEthereumRecipient_refusesInvalidAndIsPerCaller() (gas: 358228)\n[PASS] test_tip_growsLinearlyAndCapsAtTwoPercent() (gas: 249716)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 743.90ms (76.36ms CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3620514, ~: 3582943)\nLogs:\n  Bound result 3\n  Bound result 15\n  Bound result 76\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6787082, ~: 6724302)\nLogs:\n  Bound result 1\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862252)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504752)\n[PASS] test_challengeMaximumReason() (gas: 7118201)\n[PASS] test_challengeMinimumReason() (gas: 6643534)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53799580)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750569)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 743.94ms (1.49s CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 411   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 400   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 406   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 411   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 420   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 659918\n  Bound result 972782635847887316321603\n  Bound result 999999999999999999976\n  Bound result 10\n  Bound result 7\n  Bound result 4\n  Bound result 243\n  Bound result 5\n  Bound result 0\n  Bound result 2241\n  Bound result 1467\n  Bound result 5\n  Bound result 7611\n  Bound result 11\n  Bound result 4000000\n  Bound result 4\n  Bound result 65\n  Bound result 6\n  Bound result 54200588086763\n  Bound result 8\n  Bound result 121831774371342982294473\n  Bound result 8878\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 781.69ms (778.55ms CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 477   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 496   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 457   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 427   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 471   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 457   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 472   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 486   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 479   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 487   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 472   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 493   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 470   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 12119\n  Bound result 0\n  Bound result 30101\n  Bound result 9492\n  Bound result 314681\n  Bound result 18\n  Bound result 50713\n  Bound result 50268\n  Bound result 464098651616788449672\n  Bound result 946\n  Bound result 6781\n  Bound result 75600\n  Bound result 1000\n  Bound result 48\n  Bound result 19301\n  Bound result 10\n  Bound result 9216\n  Bound result 2485393310496354024314\n  Bound result 10\n  Bound result 7\n  Bound result 24999999999999999999609\n  Bound result 406282\n  Bound result 1985\n  Bound result 10\n  Bound result 34\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.45s (4.45s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554676, ~: 6554629)\nLogs:\n  Bound result 31129295337081895155779824180998220\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6639887, ~: 6646682)\nLogs:\n  Bound result 0\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 4923115, ~: 3434609)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433608, ~: 6433340)\nLogs:\n  Bound result 1\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414922)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405381)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831731)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413357)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592763)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190907)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613885)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405670)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686933)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529365)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956450)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561303)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575234)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558379)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627102)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537524)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 4.61s (6.79s CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420742)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582598)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089189)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436229)\n[PASS] test_ownerMayApply() (gas: 3320997)\n[PASS] test_projectItselfMayApply() (gas: 3381856)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3284007)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550174)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390876)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 4.61s (16.32ms CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1883  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1757  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1777  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1792  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1810  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1831  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1831  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1794  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1909  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 757880166\n  Bound result 13\n  Bound result 23\n  Bound result 581\n  Bound result 60\n  Bound result 47\n  Bound result 1\n  Bound result 6390\n  Bound result 739\n  Bound result 16885\n  Bound result 264337593543950332\n  Bound result 92\n  Bound result 17185\n  Bound result 268056181757\n  Bound result 161572\n  Bound result 26\n  Bound result 16281\n  Bound result 126748841636570\n  Bound result 3\n  Bound result 26\n  Bound result 83\n  Bound result 1073\n  Bound result 4\n  Bound result 25\n  Bound result 2085\n  Bound result 12603\n  Bound result 1\n  Bound result 15858\n  Bound result 108384\n  Bound result 47\n  Bound result 234\n  Bound result 66\n  Bound result 8\n  Bound result 264337593543950335\n  Bound result 136274\n  Bound result 3\n  Bound result 3124842407\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458439)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16504440)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.73s (5.75s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2051  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 1988  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2080  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2056  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2068  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2058  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2059  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2024  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 10\n  Bound result 4107696311\n  Bound result 0\n  Bound result 4795844827606762983586\n  Bound result 10\n  Bound result 4186104373530817325001\n  Bound result 40960\n  Bound result 10\n  Bound result 7039\n  Bound result 4674\n  Bound result 999999999999999999\n  Bound result 878436285864099\n  Bound result 55692135661383807289\n  Bound result 576\n  Bound result 8\n  Bound result 10\n  Bound result 4\n  Bound result 96\n  Bound result 907\n  Bound result 6719455485794039800221\n  Bound result 2\n  Bound result 512\n  Bound result 2304\n  Bound result 32\n  Bound result 5341870550796273183\n  Bound result 7057\n  Bound result 9\n  Bound result 2589845\n  Bound result 3\n  Bound result 1000000000000\n  Bound result 2943963189475439631850184698\n  Bound result 3\n  Bound result 123\n  Bound result 244\n  Bound result 7\n  Bound result 2304\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.31s (7.31s CPU time)\n\nRan 43 test suites in 7.33s (34.91s CPU time): 277 tests passed, 0 failed, 23 skipped (300 total tests)\n","passed":true},{"durationMs":93,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"RemoteStacker.credit(address,uint256)\",\"RemoteStacker.flush(address[])\",\"RemoteStacker.setEthereumRecipient(address)\",\"StackReceiver.lzCompose(address,bytes32,bytes,address,bytes)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":100,\"NEXT_SESSION.md\":67,\"README.md\":306,\"app.js\":2390,\"docs/data-api.md\":97,\"docs/design.md\":323,\"docs/explainer.html\":247,\"docs/history.md\":444,\"docs/launches.md\":49,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":90,\"docs/plea-handoff.md\":73,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":171,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-launch.md\":14,\"jobs/13-sepolia-v6-launch.md\":13,\"jobs/14-mainnet-stackreceiver-launch.md\":13,\"jobs/15-robinhood-remotestacker-launch.md\":12,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-launch.json\":31,\"jobs/requests/13-sepolia-v6-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":14,\"listings/sepolia.json\":1,\"llms.txt\":48,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":713,\"src/Stacker.sol\":104,\"src/multichain/LayerZero.sol\":112,\"src/multichain/RemoteStacker.sol\":299,\"src/multichain/StackReceiver.sol\":157,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1666,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":193,\"test/FactoryRehearsal.t.sol\":47,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/MultichainFlow.t.sol\":184,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySelfBeneficiary.t.sol\":148,\"test/RegistrySepoliaFork.t.sol\":113,\"test/RemoteStacker.t.sol\":391,\"test/RobinhoodFork.t.sol\":144,\"test/SepoliaFork.t.sol\":141,\"test/StackReceiver.t.sol\":344,\"test/StackReceiverMainnetFork.t.sol\":251,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/TrialVenue.t.sol\":147,\"test/VaultTrustRegression.t.sol\":41,\"test/mocks/MockIntake.sol\":108,\"test/mocks/MockOFT.sol\":138,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"test/trial/TrialVenue.sol\":222,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":181,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":158,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"d4af0049b8515a3687d06d8ed4bbd57b8b6568bb6d137a4b03f22a45aa073703","verifiedTreeHash":"7990cd91e83108260d3ad4f3f0b21d894f38fae5","verifierVersion":"0.1.0+327e1e9f"}]}