{"assessments":[],"deployments":[],"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":"6141f96e-e23e-4cea-85f6-41c05f34602a","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"cbd8025b0ede053da183ef44605039a56caf5c7470f1d72a5873aa6fa7c4cac2","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"15128eeb8da9fb5ec13c7964e80f936ddc40e718cc0d455d200435c3dc43d6a7","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"15128eeb8da9fb5ec13c7964e80f936ddc40e718cc0d455d200435c3dc43d6a7","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"37e7ae1ca3fbfe324cd701a50a3ef3ac12bc15e263c15c6be0684ded6d0401a0","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"c69800fba0e51bfd523d648b85ed11a1b3411d93b83b12ff40fde33b6602c7f6","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"8d41f471bf636b7445b09beeb11eb73369e9817f4546158de2bafd26f8339f02","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b72293c3366fff3f0b93151bca72cc6cbd189dad31d1ccd1d34dd483f2165a36","skillId":"audit-imported-code","subagents":4,"tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"b72293c3366fff3f0b93151bca72cc6cbd189dad31d1ccd1d34dd483f2165a36","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"7ef61c572cd8a39878d0638e66c50c2eb6d8753a185ad08250fe6dc35ddae8fb","dependsOn":["adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","subagents":4,"tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"656a4f45af1ae45b2f59fc90d26b0fb98b1fb6ed460aa21fb87599a3c6336168","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"2bee51caa068a9fdabc4d999e2c35c28540c6669cff199719ea4fa1d827b423b","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"120167a826f563c46dafbb10b04ae4409b0c63c885a61a8699e788a48c72c85d","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"a751364d55635b5bbee406f6f1cdabea3f8bea067b832c0cbd2b6f9321279b83","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Deploy exactly the two contracts in launch.json on Ethereum mainnet, in its order and with its constructor arguments: src/IMDuelStaking.sol (OpenZeppelin 5.0.2 ERC-4626 over the live $IMDUEL token 0xc012b8Db13C57beCd950eEfB70540e6f973A3C73), then src/IMDuelFeeRouter.sol pointing at that vault ($contract:IMDuelStaking). This repository is the whole IMDuel project: IMDuelHook, ChessEngineV5, IMDuelToken and their libraries are already live (IMD launch 2843, hook 0xA92F72DcDd90229C32F6d51229F4cc5c916410CC; audited in jobs 6acefe89 and 74895075) and are only read here. This is a contracts-only launch: do not create, deploy or modify any token, pool, distributor, hook or engine, and audit only IMDuelStaking and IMDuelFeeRouter (the rest only where they depend on it). The router's constructor reads the live LaunchFactory (positionOf), the live hook (imduel(), imd()) and the new vault (asset(), sync()), so it must run against mainnet state and reverts on any wrong argument. The project builds with forge build and its tests pass offline with forge test (229 tests). Since the swarm audit d944c9f4 (2 low) the two findings are fixed in this commit: the reserve releases only while there are more shares than the dead stake's 1e18, and a handover proposal expires NOTICE after it matures.","parentJobId":null,"planHash":"90fd4c03b78c0c5ab317521b775a96b1a42407046cab4283e61aae505136a221","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"6141f96e-e23e-4cea-85f6-41c05f34602a","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2957-deploy-exactly-two-contracts"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51093","feedbackHash":"05a430e2ee85e14a450d8038559e577af33a3493c18dae91e4c5c87c5da26a9b","nodeKey":"adapt_contract_project","submissionHash":"cbd8025b0ede053da183ef44605039a56caf5c7470f1d72a5873aa6fa7c4cac2","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52136","feedbackHash":"6ee0967bf836e5304345a5b1160f16994f53d5a126644dae26b2f8111dc5b9dd","nodeKey":"audit_economics","submissionHash":"37e7ae1ca3fbfe324cd701a50a3ef3ac12bc15e263c15c6be0684ded6d0401a0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53924","feedbackHash":"d0a274672055c7d9356f02060000cd06fa0eeb1cafff3b1bc0812b5558e45fdd","nodeKey":"audit_flow","submissionHash":"c69800fba0e51bfd523d648b85ed11a1b3411d93b83b12ff40fde33b6602c7f6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51881","feedbackHash":"7a65b580c323c5445f602b436ddadbeec52d76ff24023e331ca3ca3369c795a8","nodeKey":"audit_imported_code","submissionHash":"8d41f471bf636b7445b09beeb11eb73369e9817f4546158de2bafd26f8339f02","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51742","feedbackHash":"cdaae95dc2adb807a5b5189cfcf6a580851ba07d52abc9476f0e740bf102a445","nodeKey":"audit_judge","submissionHash":"7ef61c572cd8a39878d0638e66c50c2eb6d8753a185ad08250fe6dc35ddae8fb","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53923","feedbackHash":"e2e848956427bb2e29b420bf51213d3c5cf8a9a2e6f72fac2466696b6708fa3b","nodeKey":"audit_math","submissionHash":"656a4f45af1ae45b2f59fc90d26b0fb98b1fb6ed460aa21fb87599a3c6336168","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51873","feedbackHash":"a425da2d2248fc03b20277b44763669865e21eb9df4827dc00b0023589448ba7","nodeKey":"audit_permissions","submissionHash":"2bee51caa068a9fdabc4d999e2c35c28540c6669cff199719ea4fa1d827b423b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51088","feedbackHash":"cd56401be1c915a05cd73398ae1c75b251db400c5de67a4814e2bf96a4b84086","nodeKey":"manifest","submissionHash":"120167a826f563c46dafbb10b04ae4409b0c63c885a61a8699e788a48c72c85d","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51078","feedbackHash":"25c24248f493d28b76452f4adbed173406337b2258fff9bdb6677f436577d781","nodeKey":"write_foundry_tests","submissionHash":"a751364d55635b5bbee406f6f1cdabea3f8bea067b832c0cbd2b6f9321279b83","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"95bd04a76e10e12b55848212ae2a919e2745692ae831f3f0dd4d625a0d6398c8","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"f95ba0904d7a23b1f01ff38ba8c33ac2b148434d5d2dbbe1983773829eef0f88","device":"f801e761d7a1ec94","findings":[{"description":"IMDuelFeeRouter's constructor reverted when deployed as the launch deploys it, on a chain where no other contract exists: take outside values as arguments and check the live contract on first use\n\nRepair: this contract's owner()/admin()/getOwner()/DEFAULT_ADMIN_ROLE resolves to the launch factory (the msg.sender at deploy) or to IMD (tx.origin or the launch wallet). Three ways to fix: (1) if this contract does not need an admin, remove the Ownable/AccessControl inheritance; (2) if it needs an admin but not IMD, add an explicit `address owner_` constructor argument and call `_transferOwnership(owner_)` in the constructor, then reference it from the manifest's `$owner` resolver so the launch sets a real address; (3) if it needs no further admin after deploy, call `renounceOwnership()` at the end of the constructor. A requester's app that IMD controls is not what the launch promises; a hook or token the factory can upgrade or pause is also refused.","line":null,"path":"src/IMDuelFeeRouter.sol","reproduction":"The verifier deployed the manifest's contracts as the launch deploys them: from the launch factory (msg.sender), with IMD's launch wallet as tx.origin and $owner set, then read owner(), admin(), getOwner() and the admin role, and for a hook opened, seeded, traded and collected the pool from the factory (test/protected/evm_contracts/Owners.protected.t.sol in the protected floor).","severity":"high","title":"IMDuelFeeRouter is owned by the launch factory or by IMD"}],"hash":"120167a826f563c46dafbb10b04ae4409b0c63c885a61a8699e788a48c72c85d","nodeId":"2923d712-7e8f-449f-a1b1-0dbe9e27412d","outcome":"completed","summary":"Updated only [launch.json](/home/imd/.identitymd/work/6141f96e-e23e-4cea-85f6-41c05f34602a/2923d712-7e8f-449f-a1b1-0dbe9e27412d/launch.json), preserving the two-contract deployment order and using `$owner` for team and admin.\n\nManifest and constructor ABI checks passed. `forge build` passed; `forge test` with the supplied seed reported **232 passed, 0 failed, 1 skipped**.\n\nMainnet rehearsal remains unverified: the supplied RPC returned connection error `curl (7)` directly and through the proxy.","treeHash":"770c568cbeefca9a526748253a9cad8f4f2d67cd","usage":{"cachedInputTokens":752512,"inputTokens":51588,"model":"gpt-6-astra","outputTokens":7829,"runtime":"codex","turns":7,"wallClockMs":337518}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"42a6bb6aa496cd6b","findings":[{"citation":"resolved","description":"Documented privileged power, not a bypass (Pashov: report owner powers as trust assumptions). launch.json sets both team_ and admin_ to the same EOA 0x6AA302EFf055259c9Cf177f33Ae3cBA5d4135B23. The admin's propose()/handOn() path moves the factory's requester role for launch 2843 away from the router, after which 100% of future fees (both the IMD the team already receives and the $IMDUEL the vault's reserve receives) go wherever the admin named; nothing in the vault or router protects stakers' expected future reserve inflow. Mitigations present and verified: NOTICE = 3 days before handOn (line 108), a stale proposal expires NOTICE later (line 109), handOn collects first so fees accrued up to the handoff still go by the old split (line 110), lock() is one-way (line 119), and only the current requester can call the factory's setRequester (verified in the Sourcify source of LaunchFactory/PoolFees.sol: reverts NotRequester otherwise, and ZeroRequester for address 0). Related asymmetry, admin-error only: propose() validates exactly one stuck destination (the vault, line 97) but accepts others that can never call setRequester back, e.g. address(this), the factory, the hook, the PoolManager or 0x...dEaD; a handOn to one of those strands every future fee of launch 2843 permanently (the factory only lets the current requester hand on). No unprivileged amplifier exists for either point, so this is recorded as the trust surface for the judge, not as a defect.","line":97,"path":"src/IMDuelFeeRouter.sol","reproduction":"State: router is the requester of launch 2843 (launch wallet called factory.setRequester(2843, router)). Sequence: (1) admin calls router.propose(X) with X any address but the vault, e.g. the admin's own EOA; (2) wait 3 days; (3) admin calls router.handOn() within the next 3 days: the router collects (old split), then factory.setRequester(2843, X). Expected per design: allowed. Observed: allowed; from then on every claimFees(2843) pays 80% of fees to X and the vault's reserve receives nothing more. Variant: X = address(router) or the factory address passes line 97 and handOn succeeds; if X cannot call setRequester (factory, hook, DEAD), no further handoff is ever possible. Covered by test/FeeRouter.t.sol (test_aHandoffWaitsThreeDaysAndCollectsFirst, test_aLockStopsAProposalFromAStolenKey).","severity":"info","snippet":"        if (next == vault) revert InvalidSetup();","title":"Trust assumption: one EOA (admin = team = launch wallet) can redirect the whole 1% fee stream, including the stakers' $IMDUEL share, to any non-vault address after a 3-day notice; propose() refuses on"}],"hash":"2bee51caa068a9fdabc4d999e2c35c28540c6669cff199719ea4fa1d827b423b","nodeId":"9d89add4-0c71-4fbc-84fe-40ae0099648f","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result.\n\n**Outcome: no defect found in the permission model of IMDuelStaking or IMDuelFeeRouter.** The file records one info-level entry and a coverage row for all 22 listed entry points plus the router constructor, three invariants and the manifest.\n\n**What I checked, against the Access Control, Trust Gap and Asymmetry guides**\n\n- **Access control.** The vault has no roles at all. The router's only privileged role is `admin`, set from an explicit constructor argument rather than the factory's `msg.sender`, guarding `propose`, `handOn` and `lock`. The notice window, the expiry of stale proposals and the one-way lock all behave as documented, and the factory's own `setRequester` (verified from the Sourcify source of the live LaunchFactory) accepts only the current requester and never address zero.\n- **Asymmetry.** Deposit and withdraw settle identically before adjusting the staked balance. Transfers to the dead address settle at the old rate before the balance changes, and the dead stake can never be burned or transferred out, so the \"no release while only the dead stake exists\" guard can never be reopened. Entry and exit prices come from the same accounting, so there is no favorable side to pick.\n- **Trust gap.** `handOn` collects before moving the requester, so fees in flight keep the old split. Amounts the factory records as owed stay owed to the router and anyone can release them. `collect` is permissionless but can only move the router's own balances to immutable destinations.\n\n**The one entry recorded** is a trust assumption, not a bypass. The admin and team are the same EOA and can, after the three-day notice, redirect the entire fee stream away from the vault's reserve. `propose` refuses the vault as a destination but accepts other addresses that could never hand the role back, which is an admin-error risk only. No unprivileged actor can amplify either point.\n\n**Limits of this session.** The shell sandbox failed to initialize on every attempt, so I could not run `forge test`, the fork rehearsal, or a JSON validator. All conclusions come from reading the source, the existing tests and the verified factory source. The static-analysis lines in scope (the ignored `claimFees` return, the `^` in the hook's `teamOf`) are false positives: the router deliberately forwards by balance, and the caret is an intentional parity XOR.\n\n**Open item outside the code.** The launch floor rehearses constructors on an empty chain, where the router's constructor must revert. The tree already marks this as a deliberate consequence of the mainnet-only requirement, so the deployment must run the protected test against mainnet state.","treeHash":null,"usage":{"cachedInputTokens":1251033,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":36037,"runtime":"claude","turns":52,"wallClockMs":542267}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"00920b27421b9a80","findings":[{"citation":"resolved","description":"The per-second release rate is scaled by f = redeemable/supply (the share fraction outside DEAD), but the released amount is added to `staked`, which backs every share pro rata, DEAD's 1e18 included. Live stakers therefore receive f * (f * base) of the reserve per second and the fraction f * (1 - f) of the base rate is credited to DEAD's shares, which can never be redeemed: it is burned reward budget. The leak is maximal at f = 0.5, i.e. when the live stake equals the dead stake's one token, and it is exactly the state a public vault is in right after the seed if the first depositor stakes about one IMDUEL before anyone stakes materially. Nothing in the vault enforces a minimum initial live stake; the fork rehearsal (test/StakingFork.t.sol `_release`) avoids the state by staking 1,000,000 IMDUEL for the launch wallet before sending the seed, but launch.json's notes describe only 'funds the vault and hands the launch's requester to the router', so the operational order that keeps the leak at 1e-6 is undocumented. The code comments ('a dust stake enables only a dust rate', 'the dead stake's cut: 1 / (all staked)') describe the 1-wei case; a one-token stake, which costs nothing, enables half the base rate and burns a quarter of it. Who loses: the reserve (the project's reward budget and future fee income) and every later staker; who gains: the first small staker, whose one token is worth ~25,063 IMDUEL after a day while it is alone. Minimal fix that preserves the design: before the seed is sent, stake a material amount for the launch wallet (the fork test's order) and state that order in the launch notes/runbook, so f is ~1 from the first second; alternatively, distribute the release only over redeemable shares (e.g. use the ERC-4626 virtual-share offset instead of real DEAD shares), which is a design change. Verification note: forge could not be executed in this review session (the command sandbox failed to start), so the figures below are computed from KEEP and the suite's own dailyKeep constant (test/Staking.t.sol line 106) rather than from a run.","line":101,"path":"src/IMDuelStaking.sol","reproduction":"State: fresh IMDuelStaking over IMDuelToken (test/Staking.t.sol StakingBase). Calls: (1) token.transfer(vault, 10_000_000e18); vault.sync() -> DEAD holds 1e18 shares, staked = 1e18, reserve = 9_999_999e18. (2) alice: token.approve(vault, 1e18); vault.deposit(1e18, alice) -> 1e18 shares; supply = 2e18, redeemable = 1e18, f = 0.5, keep = 1e27 - 58161662436094841262. (3) vm.warp(+1 days). Expected (per the design statements 'a dust stake enables only a dust rate' and the fork order's 1e-6 dead cut): DEAD's worth stays about 1 IMDUEL and the day's release goes to the live staker. Actual: reserve falls by 9_999_999e18 * (1 - 0.994987437252023507) ~= 50_125.6e18; vault.convertToAssets(vault.balanceOf(DEAD)) ~= 25_063.8e18 (assertGt(_value(DEAD) - 1e18, 25_000e18) passes), permanently unredeemable; alice's one token is worth ~25_063.8e18. Repeating for a second day burns another ~24,937 IMDUEL. Control: with the fork test's order (deposit 1_000_000e18 for the wallet before the seed), the same day credits DEAD ~0.1 IMDUEL.","severity":"low","snippet":"            uint256 keep = ONE - (ONE - KEEP) * redeemable / supply;\n            uint256 release = p.reserve - p.reserve * _keep(block.timestamp - p.updated, keep) / ONE;\n            (p.reserve, p.staked) = (p.reserve - uint128(release), p.staked + uint128(release));","title":"Reserve release is paid pro rata to the dead stake: a lone live stake of about one token burns half of each day's release (~25,063 IMDUEL/day on the 10M seed) into unredeemable DEAD shares"}],"hash":"37e7ae1ca3fbfe324cd701a50a3ef3ac12bc15e263c15c6be0684ded6d0401a0","nodeId":"20af0f33-6068-49ff-9137-e7cd56a3fd66","outcome":"completed","summary":"The economics review is done and `.imd-findings.json` holds one low finding plus a full coverage record for all 22 entry points and four invariants.\n\n**What I found**\n\n- **Low: the reserve release leaks into DEAD's shares at a rate of f(1−f) of the base rate.** The per-second rate is scaled by the live share fraction f, but the released tokens back every share, including the dead stake's. With the 10M seed in the reserve and a single live stake of one IMDUEL, f is 0.5, so about 50,126 IMDUEL leave the reserve on day one and roughly 25,063 of them are credited to unredeemable DEAD shares. The fork rehearsal avoids this by staking 1M for the launch wallet before the seed. The launch notes do not describe that order, and the vault enforces no minimum live stake. Reproduction and the mitigation are in the file. Severity is low because the loss is to the reward budget under a specific launch state, not a theft.\n\n**What held**\n\n- Conservation (balance equals staked plus reserve), monotone share price, no release while only DEAD holds shares, settle-before-change on every supply or DEAD-balance mutation, and no inflation or round-trip profit paths.\n- The router's flows against the live factory. I read the Sourcify-verified LaunchFactory: `claimFees` pays by plain transfer and does not revert on zero, failed payouts go to a permissionless `owed`/`withdraw` path, and `setRequester` is requester-gated and rejects zero. Both tokens are plain ERC-20s, so no leg of `collect` or `handOn` can be blocked.\n- The manifest: schema keys only, correct argument counts and order, backward vault reference, static addresses matching the live contracts.\n\n**Limits**\n\n- The command sandbox failed to initialize for the whole session, so I could not run forge. All conclusions come from reading the code, the OZ 5.0.2 base, the suite, and the live sources. The finding's figures are computed from the KEEP constant and the suite's own daily-keep constant, with a test-suite call sequence for the author to run.\n- Admin powers (proposing any non-vault address, locking) are recorded as trust assumptions, not findings.","treeHash":null,"usage":{"cachedInputTokens":1888006,"inputTokens":578,"model":"claude-fable-5-1","outputTokens":50742,"runtime":"claude","turns":57,"wallClockMs":856074}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ea30e435c4dd5aff","findings":[],"hash":"395127434e12c76da52c06e76bb253cac27b30be71a765128e97516f5f3a1758","nodeId":"3fe9e30d-6753-42f6-aa78-44bee5946148","outcome":"failed","summary":"the task produced no changes; the agent's last message was: Stopped due to machine failures:\n\n- `forge build` and seeded `forge test` failed downloading Solidity 0.8.26: DNS resolution unavailable.\n- The supplied mainnet RPC refused connections directly and through the proxy.\n\nNo tests were added. The working tree is unchanged.","treeHash":null,"usage":{"cachedInputTokens":476416,"inputTokens":83360,"model":"gpt-6-astra","outputTokens":2629,"runtime":"codex","turns":4,"wallClockMs":102176}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"733f63ff9321d57a","findings":[{"citation":"resolved","description":"Math Precision / Boundary (break downcasts). `_deposit` books `_pool.staked += uint128(assets)` (src/IMDuelStaking.sol:68): the narrowing cast truncates silently, and the author relies on the following `safeTransferFrom` of the full `assets` reverting because no holder owns 2^128 $IMDUEL (fixed supply 1e27 < 2^128 ~ 3.4e38). That reliance holds on the live token, so no value can be lost: every deposit of `assets >= 2^128` reverts (verified: deposit(2^128), deposit(2^128+1) and mint(2^200) all revert, and the pool stays at 1e18 staked). What remains is an ERC-4626 conformance deviation: EIP-4626 says `maxDeposit` MUST NOT be higher than the amount `deposit` would accept assuming the caller has infinite assets, and `maxMint` likewise, yet both return 2^256-1 while the packing accepts at most 2^128-1-staked assets. An integrator that sizes a call from `maxDeposit` and then calls `deposit` (the EIP's stated use) gets a revert instead of a bounded value. No funds at risk; the token's supply makes the truncating branch unreachable.","line":59,"path":"src/IMDuelStaking.sol","reproduction":"State: vault opened (1e18 staked for DEAD). Call vault.maxDeposit(alice): returns 115792089237316195423570985008687907853269984665640564039457584007913129639935. Then alice (approved max) calls vault.deposit(340282366920938463463374607431768211458, alice) (2^128+2): expected by the EIP, a value at or below maxDeposit is accepted; actual, the call reverts (IMDuelToken InsufficientBalance on the transferFrom after staked was incremented by the truncated 2). Likewise vault.mint(1<<200, alice) reverts. Fix (non-behavioral): return `type(uint128).max - _now().staked` from maxDeposit and `_convertToShares(that, Floor)` from maxMint when the supply is non-zero, or keep the current return and document the deviation.","severity":"info","snippet":"        return totalSupply() == 0 ? 0 : type(uint256).max;","title":"maxDeposit/maxMint report type(uint256).max although the 128-bit pool packing can book at most 2^128-1-staked"}],"hash":"656a4f45af1ae45b2f59fc90d26b0fb98b1fb6ed460aa21fb87599a3c6336168","nodeId":"97510e23-5941-48d7-9bcd-22fc462c1e3b","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result.\n\n**Outcome: no defect in the math of IMDuelStaking or IMDuelFeeRouter.** One informational note is recorded, and all 22 entry points plus six invariant and bound rows are covered.\n\n**What I checked in the assigned area** (Math Precision, Boundary, Numerical Gap):\n- **KEEP constant** recomputed with 80-digit decimals: exactly 0.99^(1/86400) in 1e27, so the documented 1% a day holds.\n- **Release formula** per-second rate scaled by redeemable/supply, exponentiation by squaring: every intermediate fits uint256 by a wide margin, floor bias is under 100 wei on the whole supply, same-block repeats release exactly zero, and the dead stake alone releases nothing.\n- **128-bit packing and casts**: every amount is bounded by the fixed 1e27 supply. Deposits of 2^128 and above truncate in the cast but the full transferFrom reverts on the live token, verified with a probe.\n- **ERC-4626 rounding**: deposit and redeem round against the caller, mint and withdraw round up, the sum of floors can never underflow `staked`, and preview and settle read the same state within a block.\n- **Share-price pump**: a sole 1-wei staker beside the dead stake, with the entire remaining supply in reserve for ten years, moves the price by 1 wei. The dead stake's 1e18 shares work as a virtual offset.\n- **Router timing**: the handover window is inclusive at both ends, the uint64 casts cannot wrap, and the admin paths carry no arithmetic.\n- **Live boundaries**: the factory's `claimFees` reverts only through v4 itself; the hook has no liquidity flags, so the zero-liquidity collect never enters a hook callback. IMD is a LayerZero OFT over plain OpenZeppelin ERC-20 with no pause or blocklist, so the team forward cannot trap `collect`. The manifest's constructor arguments match mainnet state at block 26340286 exactly.\n\n**Recorded finding**: `maxDeposit` and `maxMint` return the uint256 maximum while the pool packing accepts at most 2^128-1 minus staked. Severity info: an EIP-4626 conformance deviation with no fund at risk, since the token's supply makes the truncating branch unreachable.\n\n**Tests run**: the full project suite passes (232 passed, 1 skipped, which is the fork-only launch test). My five scratch probes under test/scratch pass; they are not part of the submission.\n\n**Not reached**: nothing in the assigned area. The hook's own entry points were covered only as far as the router depends on them, as the brief directs.","treeHash":null,"usage":{"cachedInputTokens":1510611,"chain":[{"calls":73,"chainId":1,"failed":0,"own":45,"public":0,"refused":28}],"inputTokens":482,"model":"claude-fable-5-1","outputTokens":41694,"runtime":"claude","turns":34,"wallClockMs":733267}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce319efac2b76da0","findings":[{"citation":"resolved","description":"Merged from audit_economics (reproduced by tracing _now(); forge could not be executed in this review session, so figures derive from the suite's own asserted constant dailyKeep = 994987437252023507328880933 at test/Staking.t.sol:106, which the passing suite checks against the code to 1e-15). The per-second rate is scaled by f = redeemable/supply (line 101) but the released amount is added to `staked` (line 103), which backs every share pro rata, DEAD's 1e18 included. Live stakers therefore receive f*f of the base release and f*(1-f) of it is credited to DEAD's shares, which can never be redeemed (DEAD has no key; test_theDeadStakeIsForever). The leak peaks at f = 0.5, i.e. when the live stake equals the dead stake's one token, which is exactly the state right after the seed if anyone stakes about one IMDUEL before a material stake exists; nothing in the vault enforces a minimum live stake and the launch.json notes describe only 'vault funding and sync to establish the dead stake', not the fork rehearsal's order (test/StakingFork.t.sol _release: the launch wallet stakes 1,000,000 IMDUEL before the seed), which keeps the dead cut at ~1e-6. The contract comments ('a dust stake enables only a dust rate', 'the dead stake's cut: 1 / (all staked)') hold for a 1-wei stake and for a million-token stake, but a one-token stake, costing nothing, enables half the base rate and burns a quarter of it. Who loses: the reserve (the project's reward budget and future fee inflow) and every later staker; who gains: the first small staker (one token worth ~25,063 IMDUEL after a day while alone). Severity low: loss of reward budget only under a specific, avoidable operational state, no principal at risk. Minimal fix preserving the design: stake a material amount for the team before the seed is sent, and state that order in the launch notes/runbook (the fork test already does it). Design alternative (scope decision): distribute the release only over redeemable shares, e.g. replace the real DEAD shares with the ERC-4626 virtual offset.","line":101,"path":"src/IMDuelStaking.sol","reproduction":"State: fresh IMDuelStaking over IMDuelToken (test/Staking.t.sol StakingBase). Calls: (1) token.transfer(vault, 10_000_000e18); vault.sync() -> balanceOf(DEAD) = 1e18, totalAssets = 1e18, reserve = 9_999_999e18. (2) alice: token.approve(vault, 1e18); vault.deposit(1e18, alice) -> 1e18 shares; supply = 2e18, redeemable = 1e18, f = 0.5, per-second keep = 1e27 - 58161662436094841262. (3) vm.warp(+1 days); read vault.reserve(), vault.convertToAssets(vault.balanceOf(DEAD)), vault.convertToAssets(vault.balanceOf(alice)). Expected (per the design statements 'a dust stake enables only a dust rate' and 'the dead stake's cut: 1 / (all staked)'): DEAD's holding stays about 1 IMDUEL and the day's release goes to the live staker. Actual: reserve falls by 9_999_999e18 * (1 - 0.994987437252023507) = ~50_125.6e18; totalAssets = 2e18 + 50_125.6e18 split equally over 2e18 shares, so convertToAssets(balanceOf(DEAD)) = ~25_063.8e18 (assertGt(_value(DEAD) - 1e18, 25_000e18) passes), permanently unredeemable, and alice's one token is worth ~25_063.8e18. A second day burns another ~24_937e18. Control: deposit 1_000_000e18 for the team before the seed (the fork test's order) and the same day credits DEAD ~0.1 IMDUEL (release/1e6).","severity":"low","snippet":"            uint256 keep = ONE - (ONE - KEEP) * redeemable / supply;\n            uint256 release = p.reserve - p.reserve * _keep(block.timestamp - p.updated, keep) / ONE;\n            (p.reserve, p.staked) = (p.reserve - uint128(release), p.staked + uint128(release));","title":"Reserve release is credited pro rata to the dead stake: a lone live stake of about one token burns a quarter of the base rate (~25,000 IMDUEL/day on the 10M seed) into unredeemable DEAD shares"},{"citation":"resolved","description":"Merged from audit_flow; reproduced by tracing. The constructor makes five high-level external calls before storing anything: factory_.positionOf (line 72), duel.imduel() and duel.imd() (line 78), IERC4626(vault_).asset() (line 79) and ISync(vault_).sync() (line 82). positionOf returns data, so on a chain where 0x12C63b581d07093F6126bc02263c58f7EadaA96F has no code the ABI decoder reverts on empty returndata; the vault's own sync would also revert there (IERC20(asset()).balanceOf on a code-less token). This is what the brief demands ('it must run against mainnet state and reverts on any wrong argument') and the behaviour is correct on mainnet: the verified LaunchFactory source on Sourcify shows positionOf(uint64) is a view with no revert path, claimFees(uint64) has no access restriction, pays by ERC-20 transfer and does not revert on zero fees (its _split/_payAccount return early on amount == 0), and setRequester reverts NotRequester for anyone but the current requester and ZeroRequester for address 0. What remains is a deployment-rehearsal requirement, not a code defect: the recipe states launch checks run constructors on an empty chain, and the supplied Contracts.protected.t.sol does not fork (it only sets chainId and etches ContractsDeploymentProbe over IMD_PROJECT_FACTORY). On an empty chain application 1 reverts and the launch parks; if IMD_PROJECT_FACTORY were the LaunchFactory address itself, the etch would also break positionOf. Previously reported as e1d42d70 and deliberately retained by the author (ADAPTATION.md). Severity low: no funds at risk; the launch either deploys correctly against mainnet or parks. Evidence needed before deployment: the protected run executed against an Ethereum mainnet fork (block with launch 2843's position present and the live hook 0xA92F72DcDd90229C32F6d51229F4cc5c916410CC), e.g. `forge test --fork-url <Ethereum RPC> --match-test test_exactLaunchOnMainnet`, which neither the author nor this review could run (no RPC/shell). The only code-level alternative is the recipe's lazy pattern (store addresses, validate on first collect), which contradicts the brief and is the requester's scope decision.","line":72,"path":"src/IMDuelFeeRouter.sol","reproduction":"State: a chain where 0x12C63b581d07093F6126bc02263c58f7EadaA96F has no code (the unforked protected harness). Call: new IMDuelFeeRouter(IPoolFees(0x12C63b581d07093F6126bc02263c58f7EadaA96F), 2843, IERC20(0xc012b8Db13C57beCd950eEfB70540e6f973A3C73), IERC20(0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7), vault, $owner, $owner). Expected on mainnet: the constructor succeeds (positionOf(2843) returns the main-duel PoolKey whose hooks is 0xA92F72DcDd90229C32F6d51229F4cc5c916410CC, pairing the two tokens). Actual on the empty chain: line 72 reverts (empty returndata for a call expecting a tuple), so ContractsDeploymentProbe.deployAll reverts with 'application 1 constructor failed' and the launch parks. Repository test: test/StakingLaunch.t.sol test_emptyChainCannotSubstituteForMainnet (line 48) etches empty code at the factory, deploys the vault successfully and expects the router's constructor to revert.","severity":"low","snippet":"        (PoolKey memory key,,,) = factory_.positionOf(launchNumber_);","title":"IMDuelFeeRouter's constructor needs live mainnet code at five addresses, so an unforked rehearsal (or one that etches the probe over the LaunchFactory) parks the launch with 'application 1 constructor"},{"citation":"resolved","description":"Merged from audit_math; reproduced by tracing. _deposit books `_pool.staked += uint128(assets)` (line 68): the narrowing cast truncates silently, and correctness relies on the following SafeERC20.safeTransferFrom of the full `assets` reverting because no holder owns 2^128 IMDUEL (fixed supply 1e27 < 2^128 ~ 3.4e38; IMDuelToken has no mint). That reliance holds on the live token, so no value can be minted or lost: every deposit of assets >= 2^128 reverts with InsufficientBalance, and mint(2^200) reverts the same way. What remains is an EIP-4626 deviation: maxDeposit/maxMint MUST NOT exceed what deposit/mint would accept assuming infinite assets, yet both return 2^256-1 while the packing accepts at most 2^128-1-staked. An integrator sizing a call from maxDeposit gets a revert instead of a bounded value. Non-behavioural fix: return type(uint128).max - _now().staked from maxDeposit and _convertToShares(that, Floor) from maxMint when the supply is non-zero, or document the deviation.","line":59,"path":"src/IMDuelStaking.sol","reproduction":"State: vault opened (1e18 staked for DEAD), alice approved max. vault.maxDeposit(alice) returns 115792089237316195423570985008687907853269984665640564039457584007913129639935. alice calls vault.deposit(340282366920938463463374607431768211458, alice) (2^128+2): per the EIP a value at or below maxDeposit must be accepted; actual: _pool.staked is incremented by the truncated 2, then IMDuelToken.transferFrom reverts InsufficientBalance and the whole call unwinds. vault.mint(1 << 200, alice) likewise reverts although maxMint returned 2^256-1.","severity":"info","snippet":"        return totalSupply() == 0 ? 0 : type(uint256).max;","title":"maxDeposit/maxMint report type(uint256).max although the 128-bit pool packing can book at most 2^128-1-staked assets (ERC-4626 conformance deviation, no funds at risk on the fixed-supply token)"},{"citation":"resolved","description":"Merged from audit_permissions; documented privileged power, not a bypass. launch.json fills both team_ and admin_ with $owner. The admin's propose()/handOn() path moves the factory's requester role for launch 2843 away from the router, after which 100% of future fees (the IMD the team already receives and the $IMDUEL the vault's reserve receives) go wherever the admin named; nothing in the vault protects stakers' expected future reserve inflow. Mitigations verified in code: NOTICE = 3 days before handOn (line 108), a proposal expires NOTICE after maturity (line 109, the d944c9f4 fix: handOn is possible only for readyAt <= now <= readyAt + NOTICE), handOn collects first so fees accrued to the handoff follow the old split (line 110), lock() is one-way and cancels a proposal (line 119), and only the current requester can call the live factory's setRequester (Sourcify source: NotRequester otherwise, ZeroRequester for address 0). Related, admin-error only: propose() validates exactly one stuck destination (the vault) but accepts others that can never call setRequester back, e.g. address(this), the factory, the hook, the PoolManager or 0x...dEaD; a handOn to one of those strands every future fee of launch 2843 permanently. No unprivileged amplifier exists, so this is the trust surface for the judge, not a defect.","line":97,"path":"src/IMDuelFeeRouter.sol","reproduction":"State: router is the requester of launch 2843 (launch wallet called factory.setRequester(2843, router)). (1) admin calls router.propose(X) with X any address but the vault, e.g. the admin's own EOA; (2) wait 3 days; (3) within the next 3 days admin calls router.handOn(): the router collects (old split), then factory.setRequester(2843, X). Expected per design: allowed. Actual: allowed; from then on every claimFees(2843) pays the requester's share to X and the vault's reserve receives nothing more. Variant: X = address(router) or the factory address passes line 97 and handOn succeeds; if X cannot call setRequester (factory, hook, DEAD), no further handoff is ever possible. Covered by test/FeeRouter.t.sol test_aHandoffWaitsThreeDaysAndCollectsFirst, test_aStaleProposalExpires and test_aLockStopsAProposalFromAStolenKey.","severity":"info","snippet":"        if (next == vault) revert InvalidSetup();","title":"Trust assumption: the admin (= team = $owner) can redirect the whole 1% fee stream, including the stakers' $IMDUEL share, to any non-vault address after a 3-day notice; propose() refuses only the vaul"}],"hash":"7ef61c572cd8a39878d0638e66c50c2eb6d8753a185ad08250fe6dc35ddae8fb","nodeId":"9b5094b5-5928-4b42-9167-ed477621485c","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds four findings plus a 24-row coverage record. The shell sandbox never initialized in this session, so forge did not run. Every finding was reproduced by tracing the code, and none is critical or high, so none needed an executable proof.\n\n**Findings kept, one per specialist, after reproduction:**\n\n- **Low, reserve release credited to the dead stake** (`src/IMDuelStaking.sol:101`). The rate is scaled by the redeemable fraction but the release backs all shares, so a lone one-token stake right after the 10M seed burns about 25,000 IMDUEL per day into unredeemable DEAD shares. The fork rehearsal avoids this by staking 1M for the team before seeding. The manifest notes do not state that order.\n- **Low, router constructor needs live mainnet code** (`src/IMDuelFeeRouter.sol:72`). Five external reads revert on an unforked rehearsal, so the protected harness parks the launch unless it runs on a mainnet fork. This is the brief's explicit requirement, retained by the author, and the repository's own test reproduces it.\n- **Info, maxDeposit and maxMint overstate the 128-bit packing limit** (`src/IMDuelStaking.sol:59`). An ERC-4626 conformance deviation only. The truncating path is unreachable on the fixed-supply token.\n- **Info, admin trust assumption** (`src/IMDuelFeeRouter.sol:97`). The admin can redirect the whole fee stream to any non-vault address after the 3-day notice window. Documented power, not a bypass.\n\n**Verified against external sources:** The live LaunchFactory source on Sourcify confirms that positionOf never reverts, claimFees is permissionless and tolerates zero fees, and setRequester rejects non-requesters and address zero.\n\n**Static analysis leads dismissed:** The divide-before-multiply in the exponentiation is standard square-and-multiply with sub-wei error. The constructor state-after-call warnings involve trusted callees that cannot re-enter a contract under construction. The hook and engine lines are out of scope.\n\n**Not verified here:** The 229-test suite and the mainnet fork rehearsal were not rerun, because no shell was available. The seven live hook entry points are marked unreached as out of this launch's scope.","treeHash":null,"usage":{"cachedInputTokens":626195,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":29161,"runtime":"claude","turns":28,"wallClockMs":481030}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"1a7ecd03bd365366","findings":[{"citation":"resolved","description":"The vault promises (header comment, lines 12-13, and the d944c9f4 fix) that the reserve waits while the dead stake is alone, so it never pays a stake that can never leave. The gate at line 90 only checks that the share supply exceeds the dead stake's 1e18; once it does, _now() releases 1% a day of the whole reserve and credits it to all shares pro rata, so the dead stake takes DEAD_ASSETS/totalSupply of every release. The dead stake is 1e18 shares, so while the redeemable stake is far below 1 $IMDUEL the release goes almost entirely to 0x...dEaD, which can never redeem: those tokens are counted in `staked` for ever and leave the reserve that was funded for real stakers. Anyone can put the vault into that state for 1 wei: deposit(1) mints 1 share, totalSupply becomes 1e18 + 1 and the gate is open. Transferring that share to 0x...dEaD makes it irreversible (no one can burn DEAD's shares, and the author's test_sharesSentToDeadDontStopTheRelease confirms the gate stays open), but even a share the griefer keeps cannot be removed by anyone else. The same loss happens without an attacker whenever the only redeemable stakers hold dust relative to 1 $IMDUEL. With the launch wallet's seed (the project's tests use 10,000,000 $IMDUEL), 30 days in that state send 2,602,996 $IMDUEL (26% of the reserve) to the dead stake, at a cost of 1 wei plus two transactions. Who loses: the launch wallet that funded the reserve and every future staker, who should have received that release. Suggested fix, keeping ERC-4626 and the dead stake: scale what _now() releases by the redeemable fraction of the supply, release * (totalSupply() - DEAD_ASSETS) / totalSupply(), leaving the dead stake's cut in the reserve (with a 1-wei staker the release is then ~1e-18 of itself, i.e. the reserve effectively waits; with 1,000,000 $IMDUEL staked it is unchanged to 1e-6). Alternatively settle in _update() when shares move to DEAD and gate on totalSupply() - balanceOf(DEAD), but that still pays the dead stake pro rata for a 1-wei staker who keeps their share, so the first fix is the one that closes the loss.","line":90,"path":"src/IMDuelStaking.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {IMDuelToken} from \"src/IMDuelToken.sol\";\nimport {IMDuelStaking} from \"src/IMDuelStaking.sol\";\n\n/// A 1-wei stake, parked at 0x...dEaD, turns the \"reserve waits while the dead stake is alone\" guard off for good:\n/// the reserve then releases 1% a day into the dead stake while nobody redeemable is staked.\ncontract DeadDrainTest is Test {\n    address constant DEAD = 0x000000000000000000000000000000000000dEaD;\n    uint256 constant SEED = 10_000_000e18;\n    IMDuelToken token;\n    IMDuelStaking vault;\n    address griefer = makeAddr(\"griefer\");\n    uint256 now_ = 1_762_000_000;\n\n    function setUp() public {\n        vm.warp(now_);\n        token = new IMDuelToken();\n        vault = new IMDuelStaking(IERC20(address(token)));\n        token.transfer(address(vault), SEED); // the launch wallet's seed\n        vault.sync(); // the dead stake: 1e18 shares\n    }\n\n    function test_oneWeiParkedAtDeadReleasesTheReserveToTheDeadStake() public {\n        // nobody redeemable is staked: the reserve must wait (the vault's own guarantee, fixed in d944c9f4)\n        uint256 reserveBefore = vault.reserve();\n        assertEq(reserveBefore, SEED - 1e18);\n\n        // the griefer stakes 1 wei and parks the share at 0x...dEaD: totalSupply is 1e18 + 1 for ever\n        token.transfer(griefer, 1);\n        vm.startPrank(griefer);\n        token.approve(address(vault), 1);\n        uint256 share = vault.deposit(1, griefer);\n        vault.transfer(DEAD, share);\n        vm.stopPrank();\n        assertEq(vault.balanceOf(griefer), 0, \"the griefer holds nothing and can never undo this\");\n        assertEq(vault.totalSupply(), 1e18 + 1);\n\n        now_ += 30 days;\n        vm.warp(now_);\n\n        // expected: nobody redeemable is staked, so the reserve waits and the dead stake is still worth 1e18\n        // actual: 26% of the reserve has been released, all of it into the dead stake, which can never leave\n        uint256 released = reserveBefore - vault.reserve();\n        uint256 deadWorth = vault.convertToAssets(vault.balanceOf(DEAD));\n        emit log_named_decimal_uint(\"released in 30 days\", released, 18);\n        emit log_named_decimal_uint(\"dead stake worth\", deadWorth, 18);\n        // (within 1e-6 $IMDUEL: a fix that scales the release by the redeemable share may leave dust)\n        assertApproxEqAbs(vault.reserve(), reserveBefore, 1e12, \"the reserve must wait while nobody redeemable is staked\");\n        assertApproxEqAbs(deadWorth, 1e18, 1e12, \"the dead stake must not be paid alone\");\n    }\n}","reproduction":"State: vault open with the dead stake (sync after 10,000,000e18 $IMDUEL seeded), no other staker; reserve() == 9,999,999e18. Calls by an unprivileged griefer: token.approve(vault, 1); vault.deposit(1, griefer) -> 1 share, totalSupply() == 1e18 + 1; vault.transfer(0x...dEaD, 1). Wait 30 days. Expected (the vault's own guarantee): reserve() still 9,999,999e18 and convertToAssets(balanceOf(DEAD)) == 1e18. Actual: reserve() == 7,397,002.994e18, the released 2,602,996.006e18 are all counted in `staked`, and convertToAssets(balanceOf(DEAD)) == 2,602,997.006e18: 26% of the reserve is permanently credited to an address that can never redeem. The griefer holds 0 shares and nobody can undo it. Run test/scratch/DeadDrain.t.sol (fails on this code).","severity":"medium","snippet":"        if (totalSupply() > DEAD_ASSETS) {","title":"A 1-wei stake (kept, or parked at 0x...dEaD for good) makes the reserve release into the dead stake while nobody redeemable is staked"},{"citation":"resolved","description":"The constructor makes four external calls that must answer: factory_.positionOf (line 64), duel.imduel()/duel.imd() on the pool's hook (line 70), IERC4626(vault_).asset() (line 71) and ISync(vault_).sync() (line 74). The launch recipe this is adapted to rehearses every constructor on a chain where no other contract exists (Contracts.protected.t.sol deploys the init codes with create2 and requires each to leave code; a constructor that reverts fails as 'application 1 constructor failed' and parks the launch). On such a chain 0x12C63b581d07093F6126bc02263c58f7EadaA96F has no code, the call returns no data, abi-decoding the PoolKey reverts, and IMDuelFeeRouter never deploys; IMDuelStaking (application 0) deploys fine because OpenZeppelin's ERC4626 tolerates a missing decimals() and falls back to 18. This is a deliberate design (the requester wants a wrong argument to revert) and it holds on a mainnet fork, so it is a launch-compatibility defect rather than a loss: if the protected rehearsal runs without a fork, or if IMD_PROJECT_FACTORY is etched over the same address the router reads, the whole launch is refused before deployment. The adapter has to either confirm the rehearsal runs against mainnet state, or move the wiring checks out of the constructor: store the arguments, and verify factory/hook/vault on first collect() (reverting with InvalidSetup there), which the recipe's 'take such values as arguments and check the live contract on first use' asks for.","line":64,"path":"src/IMDuelFeeRouter.sol","reproduction":"Inputs: launch.json's exact arguments. On a chain where 0x12C63b581d07093F6126bc02263c58f7EadaA96F has no code (forge without a fork, chainId 1): new IMDuelStaking(0xc012b8Db13C57beCd950eEfB70540e6f973A3C73) succeeds (decimals() == 18); new IMDuelFeeRouter(0x12C6..., 2843, 0xc012..., 0xD34a..., vault, 0x6AA3..., 0x6AA3...) reverts (empty return data for positionOf). Expected by the launch rehearsal: both constructors leave code. Actual: application 1 fails. test/scratch/EmptyChain.t.sol shows it (it passes because it expects the revert; it is a demonstration, not a proof file).","severity":"medium","snippet":"        (PoolKey memory key,,,) = factory_.positionOf(launchNumber_);","title":"IMDuelFeeRouter's constructor reverts anywhere the live LaunchFactory, hook and vault are not reachable, so the launch rehearsal on an empty chain parks the launch"},{"citation":"resolved","description":"The constructor refuses team_ == vault_ because IMD paid to the vault can never leave it (the vault has no function that moves anything but its asset, and IMD is not its asset). propose() has no such check: the admin can propose the vault, the router itself, or address 0x...dEaD, and handOn() then calls factory.setRequester(launchNumber, next). From then every claimFees pays the requester's 80% of both tokens to that address. For next == vault the $IMDUEL joins the reserve (fine) but every IMD fee is stranded in the vault for ever; for next == address(this) the router keeps collecting, which is harmless. Only the admin can trigger it and the 3-day notice gives time to notice a typo, so this is an admin-mistake guard, not an exploit; it is reported because the constructor's own symmetric check shows the intent. Fix: in propose(), revert InvalidSetup() when next == vault (and optionally when next == address(this) or next.code.length == 0 is not what is wanted).","line":86,"path":"src/IMDuelFeeRouter.sol","reproduction":"State: router is the launch's requester, admin = launch wallet. Calls: admin propose(vault); wait 3 days; admin handOn(). Then any claimFees(2843) with IMD fees accrued pays the IMD share to the vault. Expected: refused like team == vault in the constructor (line 71). Actual: accepted; IMD at the vault can never be moved (IMDuelStaking exposes no transfer of a foreign token and sync() only folds its own asset).","severity":"low","snippet":"    function propose(address next) external {","title":"propose() accepts the vault (and any contract that cannot move IMD) as the next requester, which the constructor refuses for team"},{"citation":"resolved","description":"By design the admin (launch wallet 0x6AA302EFf055259c9Cf177f33Ae3cBA5d4135B23 in launch.json) can propose any address and, between 3 and 6 days later, hand the launch's requester share (80% of the 1% trade fee, both tokens, for ever) to it; collect() is run first so nothing accrued is stranded. lock() renounces that for good. There is no owner of the vault and nothing else is adjustable; no minting, pausing, freezing, seizing, delegatecall, selfdestruct, proxy or initializer exists in either contract. The IMD token at 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 is a LayerZero OFT (OpenZeppelin ERC20 transfers, owner can only rename it), and $IMDUEL is a fixed-supply plain ERC-20, so SafeERC20 forwarding cannot be blocked by a blocklist or pause. Also read: the live PoolFees/LaunchFactory source from Sourcify (claimFees does not revert when nothing is owed and keeps a failed payout as owed; setRequester requires the current requester and a non-zero next), and the hook's public imduel()/imd() getters.","line":95,"path":"src/IMDuelFeeRouter.sol","reproduction":"Not a defect. Documented so the adapter and the panel see the privileged power: admin.propose(x); +3 days; admin.handOn() moves the fee share to x; admin.lock() makes the router's share permanent.","severity":"info","snippet":"    function handOn() external {","title":"Trust assumptions: the admin can move the whole requester share after a 3-day notice; lock() is irreversible"},{"citation":"resolved","description":"Read in full: src/IMDuelStaking.sol, src/IMDuelFeeRouter.sol, src/IMDuelToken.sol, launch.json, test/Staking.t.sol, test/FeeRouter.t.sol, the protected checks, OpenZeppelin ERC4626 (v5.0 in lib). Read for the router's dependencies: the live LaunchFactory/PoolFees source (Sourcify, exact match) and the IMD token source (Sourcify, exact match); the hook's imduel/imd getters in src/IMDuelHook.sol. Not reached: the rest of IMDuelHook, ChessEngineV5 and the chess libraries (out of scope, already live), the v4 PoolManager path inside claimFees, and the mainnet fork test (test/StakingFork.t.sol needs an RPC). Checks made and found clean: release/reserve/staked conservation and the share price never falling (the project's invariant suite passes: 35 staking and router tests run here, all pass); deposit/withdraw settle before every supply change so release is never backdated; uint128 casts bounded by the 1e27 supply; _keep overflow-free; donation to the vault never moves the share price; first-deposit inflation bounded by the dead stake (price per share-wei at most reserve/1e18); no reentrancy (plain tokens, trusted factory); handOn cannot skip collect; claimFees cannot be made to revert by a third party; launch.json has the schema's keys, 1 and 7 constructor words in declaration order, a backward $contract reference, static owner addresses the brief states, notes under 4,000 characters, no forbidden opcodes.","line":16,"path":"src/IMDuelStaking.sol","reproduction":"n/a","severity":"info","snippet":"contract IMDuelStaking is ERC4626 {","title":"Coverage: what was read and checked"}],"hash":"8d41f471bf636b7445b09beeb11eb73369e9817f4546158de2bafd26f8339f02","nodeId":"3787540c-0969-49c6-a558-2979b3d0e09a","outcome":"completed","summary":"The review is complete. The findings are in `.imd-findings.json` at the repository root, and no project file was changed. The only files I created are the findings file and two scratch tests under `test/scratch/`.\n\n**What I found**\n\n- **Medium, IMDuelStaking line 90.** The \"reserve waits while the dead stake is alone\" guard only checks that share supply exceeds the dead stake's 1e18. Anyone can deposit 1 wei, which mints 1 share and opens the gate, and parking that share at 0x…dEaD makes it irreversible. The release is then split pro rata, so almost all of it goes to the dead stake, which can never redeem. In the project's own seed scenario, 30 days in that state credit about 26% of a 10M $IMDUEL reserve to the dead address. The proof test in `test/scratch/DeadDrain.t.sol` fails on the current code. I suggest scaling the release by the redeemable fraction of the supply so the dead stake's cut stays in the reserve.\n- **Medium, IMDuelFeeRouter line 64.** The constructor calls the live factory, hook and vault. On a chain where the factory has no code, as the launch rehearsal in the protected test runs it, decoding the empty return data reverts and the launch is parked. The vault deploys fine there. The demonstration in `test/scratch/EmptyChain.t.sol` passes because it expects the revert, so it is not attached as a proof. The adapter needs either a forked rehearsal or wiring checks moved to first use.\n- **Low, IMDuelFeeRouter line 86.** The constructor refuses the vault as team, but propose() accepts the vault as the next requester. IMD fees handed there can never leave the vault. Admin-only, so a mistake guard rather than an exploit.\n- **Info.** Trust assumptions for the admin's hand-on and lock powers, plus a coverage entry.\n\n**What was read and verified**\n\nBoth in-scope contracts, the token, the tests, launch.json and the protected checks were read in full. The live LaunchFactory/PoolFees source and the IMD token source were fetched from Sourcify as exact matches: claimFees never reverts on nothing owed, setRequester requires the current requester, and IMD is a LayerZero OFT with plain OpenZeppelin transfers. The build succeeds and all 35 staking and router tests pass. Not reached: the rest of the hook and chess engine, which are out of scope, and the mainnet fork test, which needs an RPC.","treeHash":null,"usage":{"cachedInputTokens":1425109,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":32778,"runtime":"claude","turns":31,"wallClockMs":809795}},{"artifacts":[],"attempt":2,"bundleHash":"c64600c3595d90f994e98282a1266381bf9328c7c657ee1ece605467f0dda26c","device":"d2bae9a4a05e8265","findings":[],"hash":"a751364d55635b5bbee406f6f1cdabea3f8bea067b832c0cbd2b6f9321279b83","nodeId":"3fe9e30d-6753-42f6-aa78-44bee5946148","outcome":"completed","summary":"Added 22 tests and three stateful invariants under `test/`, covering failures, rollback, accounting, rounding, and handovers. Extended the mainnet launch rehearsal.\n\nFormatting checks pass. Execution remains unverified: `forge build` and seeded `forge test` failed downloading Solidity 0.8.26 due to DNS failure; the supplied RPC refused connections.","treeHash":"dbbc9840390e0d4cd84359d05944b69bdf86b127","usage":{"cachedInputTokens":1087232,"inputTokens":104560,"model":"gpt-6-astra","outputTokens":25681,"runtime":"codex","turns":6,"wallClockMs":915372}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a7ac9f7a7687c25e","findings":[{"citation":"resolved","description":"Periphery / execution-trace: the router's constructor makes five external calls before it stores anything: factory_.positionOf (line 72), duel.imduel() and duel.imd() (line 78), IERC4626(vault_).asset() (line 79) and ISync(vault_).sync() (line 82). Every one of them is a high-level Solidity call, so each reverts when the target address holds no code. The brief requires exactly this ('the router's constructor reads the live LaunchFactory ... so it must run against mainnet state'), and the behaviour is correct on mainnet: I confirmed from the verified source of 0x12C63b581d07093F6126bc02263c58f7EadaA96F (Sourcify) that positionOf(uint64) returns (PoolKey, int24, int24, address) with no revert path, that claimFees has no access restriction and does not revert on zero fees, that it pays by ERC-20 transfer (not ERC-6909), and that setRequester reverts NotRequester for anyone but the current requester. The IMD token 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 is an OpenZeppelin 5.4 ERC-20 (BridgedFP) with no transfer gating. The LaunchFactory's ABI has only launch(LaunchParams) and no launchContracts, so the contracts-only project factory the protected harness etches (Contracts.protected.t.sol, vm.etch(factory, probe)) is a different address and does not overwrite what the router reads. What remains is a service-side requirement, not a code defect: the recipe states the launch checks run constructors on an empty chain, and on an empty chain application 1 (the router) fails with 'application 1 constructor failed' and the launch parks. This was previously reported as e1d42d70 and deliberately retained; the repository's own test test_emptyChainCannotSubstituteForMainnet reproduces it. Evidence needed before deployment: the protected Contracts.protected.t.sol run executed against an Ethereum mainnet fork (block with launch 2843's position present), e.g. forge test --fork-url $ETH_RPC --match-test test_exactLaunchOnMainnet, which the ADAPTATION.md author could not run (RPC unreachable). If the service cannot fork, the only code-level alternative is the recipe's lazy pattern (store the addresses, validate on first collect), which contradicts the brief and is the requester's scope decision.","line":72,"path":"src/IMDuelFeeRouter.sol","reproduction":"State: a chain where 0x12C63b581d07093F6126bc02263c58f7EadaA96F has no code (the empty chain the protected harness uses when not forked). Call: new IMDuelFeeRouter(IPoolFees(0x12C63b581d07093F6126bc02263c58f7EadaA96F), 2843, IERC20(0xc012b8Db13C57beCd950eEfB70540e6f973A3C73), IERC20(0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7), vault, 0x6AA302EFf055259c9Cf177f33Ae3cBA5d4135B23, 0x6AA302EFf055259c9Cf177f33Ae3cBA5d4135B23). Expected on mainnet: the constructor succeeds (positionOf(2843) returns the main-duel PoolKey with hooks 0xA92F72DcDd90229C32F6d51229F4cc5c916410CC). Actual on the empty chain: the high-level call at line 72 reverts (extcodesize check), so the ContractsDeploymentProbe in Contracts.protected.t.sol reverts with 'application 1 constructor failed' and the launch parks. Repository test: forge test --match-test test_emptyChainCannotSubstituteForMainnet (test/StakingLaunch.t.sol:35) shows the vault deploys and the router reverts in exactly this state.","severity":"low","snippet":"        (PoolKey memory key,,,) = factory_.positionOf(launchNumber_);","title":"IMDuelFeeRouter constructor cannot complete on an empty-chain rehearsal: positionOf/imduel()/imd()/asset()/sync() all require live code, so the launch parks unless the protected harness runs on a main"}],"hash":"c69800fba0e51bfd523d648b85ed11a1b3411d93b83b12ff40fde33b6602c7f6","nodeId":"2f5a09d4-e372-459b-9647-b49539a223cb","outcome":"completed","summary":"The shell sandbox never initialized in this session, so I could not run forge or a JSON linter. The findings file was written with the file tool and the cited line was verified by reading the source directly.\n\n**Outcome:** the control-flow review of IMDuelStaking and IMDuelFeeRouter found no code defect in the assigned area. One low finding records a deployment-environment condition the brief already accepts. The findings file holds 1 finding and 27 coverage rows, all 22 verifier entry points answered.\n\n**What I checked**\n\n- **Execution trace, vault.** Every path that changes supply or DEAD's balance settles first, so the per-second rate is always priced at the old distribution. Deposit settles before pulling tokens and withdraw settles before paying, so the balance always equals staked plus reserve and the \"arrived\" subtraction cannot underflow. The dead stake is minted once and can never leave.\n- **Execution trace, router.** Handover clears its pending state before the external call, and the live factory's `setRequester` reverts for anyone but the current requester, so a handover from a router that does not hold the role reverts whole. The notice window and expiry are inclusive on both ends as the tests assert.\n- **Periphery.** I pulled the verified source and ABI of the live LaunchFactory from Sourcify. `positionOf` returns exactly the tuple the router's interface declares, `claimFees` is open to anyone, does not revert on zero fees, pays by ERC-20 transfer, and its `HookTookFees` revert is unreachable because the IMDuel hook has no liquidity hooks. The IMD token is a plain OpenZeppelin 5.4 ERC-20 with no gating, so no transfer in `collect` can strand the share.\n- **First principles.** Donations only enter the reserve, so the share price cannot be moved by a transfer. Deposits are closed until the dead stake exists. Parking shares at DEAD only lowers the rate at the parker's own cost.\n\n**The one finding (low).** The router's constructor makes five high-level calls that each revert where the target has no code. That is correct on mainnet, but the recipe says the protected rehearsal runs constructors on an empty chain, where application 1 fails and the launch parks. The repository's own test reproduces this state. I confirmed the live LaunchFactory has only `launch(params)` and no contracts-launch function, so the protected harness's etch targets a different address and does not clobber what the router reads on a fork. The needed evidence is a protected run against a mainnet fork, which the previous author could not perform.\n\n**Not done.** The 229-test suite and the fork rehearsal were not executed here because the command sandbox failed to start. Static-analysis leads in my area (divide-before-multiply in the exponentiation, timestamp use, unused returns) were traced and are dust-level or by design, so they are left out.","treeHash":null,"usage":{"cachedInputTokens":1268312,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":36533,"runtime":"claude","turns":44,"wallClockMs":565603}},{"artifacts":[],"attempt":1,"bundleHash":"9bb549498f643b41c106378f5a868914553e9bf83bd37dcafd2960f199e49caf","device":"575a41a8798743c2","findings":[],"hash":"cbd8025b0ede053da183ef44605039a56caf5c7470f1d72a5873aa6fa7c4cac2","nodeId":"eee5746b-6467-4b63-8a71-ca2f49cc9389","outcome":"completed","summary":"Fixed the reserve-drain and vault-handover defects, with regression tests. Constructors and launch.json remain unchanged. Details: [ADAPTATION.md](/home/imd/.identitymd/work/6141f96e-e23e-4cea-85f6-41c05f34602a/eee5746b-6467-4b63-8a71-ca2f49cc9389/ADAPTATION.md).\n\n`forge build` passed. Tests with the required seed: **232 passed, 0 failed, 1 skipped**.\n\nMainnet rehearsal remains unverified: the supplied RPC returned “Couldn't connect to server.” Nothing was broadcast.","treeHash":"0d623b6ab6d8c78d0be0f5da4c777d394d32a59a","usage":{"cachedInputTokens":2088832,"inputTokens":80958,"model":"gpt-6-astra","outputTokens":23558,"runtime":"codex","turns":7,"wallClockMs":959576}}],"verification":[{"checks":[{"durationMs":98133,"exitCode":0,"name":"build","output":"Compiling 134 files with Solc 0.8.26\nSolc 0.8.26 finished in 98.01s\nCompiler run successful with warnings:\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:108:22:\n    |\n108 |             rook = ((FILE_A << f) | (RANK_1 << (8 * r))) ^ bit;\n    |                      ^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:108:38:\n    |\n108 |             rook = ((FILE_A << f) | (RANK_1 << (8 * r))) ^ bit;\n    |                                      ^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:109:57:\n    |\n109 |             uint64 d = f >= r ? DIAG >> (8 * (f - r)) : DIAG << (8 * (r - f));\n    |                                                         ^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:110:65:\n    |\n110 |             uint64 a = f + r <= 7 ? ANTI >> (8 * (7 - f - r)) : ANTI << (8 * (f + r - 7));\n    |                                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/ChessEngineV5.sol:537:38:\n    |\n537 |             uint64 ahead = c.white ? ~uint64(0) << ((r + 1) * 8) : (uint64(1) << (r * 8)) - 1;\n    |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/ChessEngineV5.sol:537:69:\n    |\n537 |             uint64 ahead = c.white ? ~uint64(0) << ((r + 1) * 8) : (uint64(1) << (r * 8)) - 1;\n    |                                                                     ^^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:31:18:\n   |\n31 |         returns (uint16, Rules.Played memory)\n   |                  ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:31:26:\n   |\n31 |         returns (uint16, Rules.Played memory)\n   |                          ^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:36:85:\n   |\n36 |     function playAny(uint256, uint32, uint32, bool, uint256) external pure returns (uint16, Rules.Played memory) {\n   |                                                                                     ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:36:93:\n   |\n36 |     function playAny(uint256, uint32, uint32, bool, uint256) external pure returns (uint16, Rules.Played memory) {\n   |                                                                                             ^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/Hostile.t.sol:62:18:\n   |\n62 |         returns (uint16, Rules.Played memory)\n   |                  ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/Hostile.t.sol:62:26:\n   |\n62 |         returns (uint16, Rules.Played memory)\n   |                          ^^^^^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Game.t.sol:97:9:\n   |\n97 |         IMDuelHook.Game memory g = st();\n   |         ^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to view\n  --> test/LaunchFiles.t.sol:73:5:\n   |\n73 |     function test_engineLaunchFileDeploysTheEngineWithoutArguments() public {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":46344,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/StakingLaunch.t.sol:StakingLaunchTest\n[PASS] test_emptyChainCannotSubstituteForMainnet() (gas: 16303)\n[SKIP] test_exactLaunchOnMainnet() (gas: 0)\nSuite result: ok. 1 passed; 0 failed; 1 skipped; finished in 514.39µs (340.58µs CPU time)\n\nRan 3 tests for test/StakingFork.t.sol:StakingForkTest\n[PASS] test_aHandoffAfterThreeDaysAndALock() (gas: 2598)\n[PASS] test_theRouterChecksItsWiringOnChain() (gas: 2460)\n[PASS] test_theWholeRelease() (gas: 2422)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 817.31µs (68.50µs CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_allowances() (gas: 347653)\n[PASS] test_fixedSupplyToTheDeployer() (gas: 39384)\n[PASS] test_nothingPrivileged() (gas: 192691)\n[PASS] test_transfers() (gas: 188240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.53ms (516.81µs CPU time)\n\nRan 1 test for test/Size.t.sol:SizeTest\n[PASS] test_deployedCodeFitsTheBudgets() (gas: 71241)\nLogs:\n  hook: 16900\n  engine v5: 23339\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.62ms (1.51ms CPU time)\n\nRan 3 tests for test/LaunchFiles.t.sol:LaunchFilesTest\n[PASS] test_engineLaunchFileDeploysTheEngineWithoutArguments() (gas: 7834)\n[PASS] test_ethereumLaunchFile() (gas: 158792)\n[PASS] test_sepoliaLaunchFile() (gas: 150795)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.26ms (2.09ms CPU time)\n\nRan 16 tests for test/FeeRouter.t.sol:FeeRouterTest\n[PASS] test_aHandoffNeverSkipsTheLastCollect() (gas: 214471)\n[PASS] test_aHandoffWaitsThreeDaysAndCollectsFirst() (gas: 675163)\n[PASS] test_aLockStopsAProposalFromAStolenKey() (gas: 165596)\n[PASS] test_aNewProposalRestartsTheNoticeAndZeroWithdrawsIt() (gas: 273480)\n[PASS] test_aProposalWorksToTheEndOfItsWindow() (gas: 190950)\n[PASS] test_aRejectedVaultProposalPreservesAnExistingProposal() (gas: 260843)\n[PASS] test_aStaleProposalExpires() (gas: 279497)\n[PASS] test_aWrongSetupIsRefused() (gas: 4094745)\n[PASS] test_budgets() (gas: 8338)\n[PASS] test_collectForwardsAClaimSomeoneElseMade() (gas: 421990)\n[PASS] test_collectSendsIMDUELToTheVaultAndIMDToTheTeam() (gas: 600592)\n[PASS] test_collectWithNothingAccruedIsHarmless() (gas: 114633)\n[PASS] test_lockingIsForGoodAndCancelsAProposal() (gas: 544515)\n[PASS] test_onlyTheAdminProposesAndHandsOn() (gas: 210360)\n[PASS] test_theHandoverKeepsWhatAccruedBefore() (gas: 230078)\n[PASS] test_theVaultCannotBeProposedAsRequester() (gas: 449338)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 5.89ms (4.10ms CPU time)\n\nRan 8 tests for test/Slice.t.sol:SliceTest\n[PASS] test_aDuelAgainstImdSendsItsSliceToTheMainDuelsImdPot() (gas: 981778)\n[PASS] test_aDuelAgainstImduelBurnsItsSlice() (gas: 960558)\n[PASS] test_aSliceMovesNoPrice() (gas: 1532512)\n[PASS] test_anyoneSendsTheBurn() (gas: 648930)\n[PASS] test_buyingImduelBurnsASliceOfIt() (gas: 411997)\n[PASS] test_dustPaysNoSlice() (gas: 514419)\n[PASS] test_theMainDuelsSliceIsBurned() (gas: 577029)\n[PASS] test_theWholeSliceIsBurnedToTheWei() (gas: 536637)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 6.68ms (6.91ms CPU time)\n\nRan 5 tests for test/Teams.t.sol:TeamsTest\n[PASS] test_aDynamicFeePoolPlaysWithAZeroLpFee() (gas: 1904114)\n[PASS] test_nativeEthIsATeamLikeAnyToken() (gas: 1224021)\n[PASS] test_poolsOnOneHookKeepSeparateGamesAndChests() (gas: 2479138)\n[PASS] test_sliceSide() (gas: 720994)\n[PASS] test_twoPlainTokensCannotDuel() (gas: 437611)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 7.04ms (6.24ms CPU time)\n\nRan 7 tests for test/Draws.t.sol:DrawsTest\n[PASS] test_checkmate() (gas: 334401)\n[PASS] test_moveCap() (gas: 331503)\n[PASS] test_ordinaryMoveDoesNotEndTheGame() (gas: 272039)\n[PASS] test_quietMoveLimit() (gas: 337709)\n[PASS] test_stalemate() (gas: 329276)\n[PASS] test_thirdRepetition() (gas: 1128186)\n[PASS] test_tooFewPiecesToMate() (gas: 321032)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 10.04ms (6.59ms CPU time)\n\nRan 14 tests for test/Bidding.t.sol:BiddingTest\n[PASS] test_aBuyOfTheOtherTeamBidsForItsNextMove() (gas: 2302673)\n[PASS] test_aBuyOfTheOtherTeamTimesTheSilentSideOutAndBids() (gas: 1220837)\n[PASS] test_aClosedWindowTakesNoBidsForItsMove() (gas: 1238283)\n[PASS] test_aLateFirstBidOpensAFullWindow() (gas: 1790503)\n[PASS] test_aMateIsPaidFromTheLosersChestInItsToken() (gas: 1589493)\n[PASS] test_aMoveIsOpenForTurnBlocksBlocks() (gas: 1216340)\n[PASS] test_aNewTopMustPayMoreThanTenPercentMore() (gas: 988826)\n[PASS] test_aNextMoveBidCarriesIntoTheNextGame() (gas: 1751624)\n[PASS] test_bidsCountAcrossTheWholeWindow() (gas: 1703229)\n[PASS] test_exactlyTenPercentMoreIsNotEnough() (gas: 989254)\n[PASS] test_theMoveDependsOnlyOnTheWindowsLastBlock() (gas: 1949748)\n[PASS] test_theMoversOwnBuyAfterItsWindowBidsForItsNextMove() (gas: 1251927)\n[PASS] test_theOwnerIsTheHookDataAddressElseTheSigner() (gas: 1846249)\n[PASS] test_thePreviewIsTheMoveThatIsPlayed() (gas: 1485460)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 22.46ms (39.12ms CPU time)\n\nRan 5 tests for test/PotStrength.t.sol:PotStrengthTest\n[PASS] test_aDonationWeakensTheTeamsBidsAndRaisesThePrizeForMatingIt() (gas: 3394559)\n[PASS] test_anEmptyPotPlaysAtTheCapUntilItIsAPot() (gas: 4178752)\n[PASS] test_exactOutputStrengthIncludesThePotShare() (gas: 616267)\n[PASS] test_liquidityChangesNothing() (gas: 1669734)\n[PASS] test_strengthIsReadAfterTheMateTheTradePlayed() (gas: 1580288)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 23.99ms (21.67ms CPU time)\n\nRan 5 tests for test/AuditRegression.t.sol:AuditRegressionTest\n[PASS] test_abiHookDataKeepsWalletBidStatsAndMatePayout() (gas: 1654557)\n[PASS] test_closedWindowPreservesNotEnoughGasAndCanBeRetried() (gas: 1803274)\n[PASS] test_emptyHookDataReproducesAcceptedRelayerAttribution() (gas: 1651793)\n[PASS] test_packedHookDataKeepsWalletBidStatsAndMatePayout() (gas: 1654352)\n[PASS] test_starvedFallbackPreservesNotEnoughGas() (gas: 9732906)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 34.69ms (31.10ms CPU time)\n\nRan 2 tests for test/LaunchAdmission.t.sol:LaunchAdmissionTest\n[PASS] test_blankChainTokenAboveImd() (gas: 20224129)\n[PASS] test_blankChainTokenBelowImd() (gas: 20213889)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 63.15ms (57.36ms CPU time)\n\nRan 11 tests for test/Stats.t.sol:StatsTest\n[PASS] test_aDustBidsMoveCounts() (gas: 1177326)\n[PASS] test_aMateCountsEvenWhenItPaysNothing() (gas: 691623)\n[PASS] test_aMoveAtAnyStrengthCounts() (gas: 278453)\n[PASS] test_aPaidSideDuelMateCountsNothing() (gas: 861550)\n[PASS] test_aSideDuelCountsNothing() (gas: 583461)\n[PASS] test_amountsWonAreCountedPerToken() (gas: 935020)\n[PASS] test_checksAndCapturesByType() (gas: 1018958)\n[PASS] test_countersSaturate() (gas: 33090)\n[PASS] test_enPassantAndPromotion() (gas: 682261)\n[PASS] test_gamesMatesAndThePlayerList() (gas: 1493429)\n[PASS] test_movesByPieceCastlingAndFullStrength() (gas: 1407030)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 64.19ms (9.10ms CPU time)\n\nRan 7 tests for test/StakingAudit.t.sol:StakingAuditTest\n[PASS] testFuzz_allSharesParkedAtDeadStopRelease(uint256,uint256,bool) (runs: 256, μ: 867920, ~: 862932)\nLogs:\n  Bound result 50536291095833714997640877\n  Bound result 28885956\n\n[PASS] testFuzz_releaseIsIndependentOfSettlementFrequency(uint256,uint256,uint256) (runs: 256, μ: 907250, ~: 908261)\nLogs:\n  Bound result 95150213104608236818826861\n  Bound result 83600348\n  Bound result 5061299\n\n[PASS] test_depositsAndMintsToDeadDoNotEnableRelease() (gas: 465421)\n[PASS] test_oneWeiKeptEnablesOnlyADustRelease() (gas: 681536)\n[PASS] test_oneWeiParkedAtDeadCannotDrainTheReserve() (gas: 551140)\n[PASS] test_partialTransferToDeadSettlesBeforeSlowingRelease() (gas: 966085)\n[PASS] test_syncEverySecondCannotAmplifyADustRelease() (gas: 45149451)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 64.39ms (137.64ms CPU time)\n\nRan 8 tests for test/FeeSchedule.t.sol:FeeScheduleTest\n[PASS] testFuzz_exactOutputDeliversTheOrderAndTakesItsFeeOnTop(uint256) (runs: 256, μ: 542356, ~: 542481)\nLogs:\n  Bound result 232797649690009560156\n\n[PASS] test_exactOutputStoppedByItsPriceLimitIsRefused() (gas: 259775)\n[PASS] test_fundChestBeyondBalanceIsRefused() (gas: 121187)\n[PASS] test_fundChestOfZeroAddsNothing() (gas: 97993)\n[PASS] test_fundChestWithTheWrongEthValueIsRefused() (gas: 344437)\n[PASS] test_fundChestWithoutAllowanceIsRefused() (gas: 110843)\n[PASS] test_owedRewardOnlyEverReachesItsOwner() (gas: 1268983)\n[PASS] test_withdrawWithNothingOwedDoesNothing() (gas: 90005)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 69.71ms (68.71ms CPU time)\n\nRan 12 tests for test/Hostile.t.sol:HostileTest\n[PASS] test_aCallbackTokenOwnerLeavingADebtCannotFreezeTheDuel() (gas: 4090732)\n[PASS] test_aDeadEngineEndsTheGameAsADrawAndTradingGoesOn() (gas: 2312934)\n[PASS] test_aGasBurningEngineCostsOneExpensiveTradeNotTheGame() (gas: 7405962)\n[PASS] test_aTokenReturningNothingFundsAChest() (gas: 1032369)\n[PASS] test_anEthOwnerCreditingTheHookCannotFreezeTheDuel() (gas: 3176697)\n[PASS] test_anEthOwnerLeavingADebtCannotFreezeTheDuel() (gas: 3021701)\n[PASS] test_anOwnerThatCannotReceiveWithdrawsElsewhere() (gas: 2560365)\n[PASS] test_blockedRecipientStaysOwedAndTradingContinues() (gas: 3067657)\n[PASS] test_brokenEngineFallsBackToALegalMove() (gas: 4095973)\n[PASS] test_feeOnTransferTokenFundsOnlyWhatArrives() (gas: 1578261)\n[PASS] test_reenteringTokenCannotBreakAClaim() (gas: 3695941)\n[PASS] test_starvingTheEngineNeverPlaysTheFallback() (gas: 17054982)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 69.66ms (62.79ms CPU time)\n\nRan 20 tests for test/Staking.t.sol:StakingTest\n[PASS] testFuzz_aRoundTripNeverProfits(uint256,uint256,uint256) (runs: 256, μ: 670467, ~: 671260)\nLogs:\n  Bound result 36\n  Bound result 2158314200\n  Bound result 22349041\n\n[PASS] testFuzz_theReleaseDependsOnlyOnTime(uint256,uint256) (runs: 256, μ: 869041, ~: 871296)\nLogs:\n  Bound result 17575\n  Bound result 287238171\n\n[PASS] test_aDonationNeverMovesTheSharePrice() (gas: 445315)\n[PASS] test_aLoneDustStakeCannotInflateAShare() (gas: 6200220)\n[PASS] test_aStakeGrowsEverySecondWithNothingToClaim() (gas: 2240185)\n[PASS] test_aTopUpJoinsTheReserveWithoutJumpingAStake() (gas: 623567)\n[PASS] test_budgets() (gas: 772887)\n[PASS] test_closedUntilTheDeadStakeAndNothingReleasedBefore() (gas: 570172)\n[PASS] test_previewsMatchWhatHappens() (gas: 940478)\n[PASS] test_releaseScalesThePerSecondRateByRedeemableShares() (gas: 1287398)\n[PASS] test_rewardsFollowTimeStaked() (gas: 686042)\n[PASS] test_sharesSentToDeadSettleThenStopTheRelease() (gas: 545307)\n[PASS] test_stakeForAnotherAndLeaveWithAnApproval() (gas: 590474)\n[PASS] test_stakersShareTheReleaseByTheirShare() (gas: 700039)\n[PASS] test_theDeadStakeIsForever() (gas: 733355)\n[PASS] test_theReleaseDependsOnlyOnTime() (gas: 8454785)\n[PASS] test_theReserveWaitsWhenEveryStakerLeaves() (gas: 571957)\n[PASS] test_theReserveWaitsWhileTheDeadStakeIsAlone() (gas: 510884)\n[PASS] test_theRoundingPumpGoesNowhere() (gas: 25004003)\n[PASS] test_theTokenIsStandard() (gas: 400504)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 75.44ms (143.36ms CPU time)\n\nRan 8 tests for test/Strength.t.sol:StrengthTest\n[PASS] testFuzz_boundedAndMonotonic(uint256,uint256,uint256) (runs: 256, μ: 8999, ~: 8559)\nLogs:\n  Bound result 115792038972829145952945229761491176564417888942121402522566596492795229017297\n\n[PASS] testFuzz_depthMonotonic(uint256,uint256,uint256) (runs: 256, μ: 11879, ~: 11898)\nLogs:\n  Bound result 1107433633322117093118918204222\n  Bound result 115792089237316195423570985008687907853269984664533130406135466914794216497013\n\n[PASS] testFuzz_shiftKeepsTheShare(uint256,uint256,uint8) (runs: 256, μ: 14528, ~: 13796)\nLogs:\n  Bound result 1\n  Bound result 50264487049470625755247196731288852095724626595150213104608236818826861\n  Bound result 1107433633322117093118918204222\n\n[PASS] testFuzz_tenfoldIsAboutThirtyPoints(uint128,uint128) (runs: 256, μ: 13820, ~: 13708)\nLogs:\n  Bound result 2221339670\n  Bound result 219918980\n\n[PASS] testFuzz_unscalablePaidFollowsTheCurve(uint256,uint256) (runs: 256, μ: 13986, ~: 14210)\nLogs:\n  Bound result 115676297148078879228147414023679219945416714680974923475418126423905216516648\n  Bound result 115676297148078879228147414023679219945416714680974923475418126423907431504382\n\n[PASS] test_decidedPoints() (gas: 13720)\n[PASS] test_hugePaymentsDoNotRevert() (gas: 12835)\n[PASS] test_zeroInputs() (gas: 5289)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 91.43ms (45.29ms CPU time)\n\nRan 7 tests for test/Windows.t.sol:WindowsTest\n[PASS] test_aHash257BlocksBackComesFromHistory() (gas: 1379597)\n[PASS] test_anExpiredMovesWindowIsTheFindingBlock() (gas: 809971)\n[PASS] test_dustAfterTheWindowCanBeAnswered() (gas: 1859162)\n[PASS] test_dustInTheClosingBlockCanBeAnswered() (gas: 1874191)\n[PASS] test_noPreviewBeforeTheClosingBlock() (gas: 749879)\n[PASS] test_onlyALateFirstBidMovesTheWindow() (gas: 768169)\n[PASS] test_theResolvingTradesBidNamesItsHalfMove() (gas: 1223658)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 74.72ms (15.79ms CPU time)\n\nRan 2 tests for test/FactoryLaunch.t.sol:FactoryLaunchTest\n[PASS] test_factoryLaunchWithTokenAboveImd() (gas: 11440064)\n[PASS] test_factoryLaunchWithTokenBelowImd() (gas: 11419485)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 91.47ms (31.75ms CPU time)\n\nRan 3 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_launchPairedWithEth() (gas: 20464305)\n[PASS] test_launchTokenAboveImd() (gas: 22051377)\nLogs:\n  first buy (opens game 0, bids for White): 390904\n\n[PASS] test_launchTokenBelowImd() (gas: 21786067)\nLogs:\n  first buy (opens game 0, bids for White): 357618\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 91.43ms (140.04ms CPU time)\n\nRan 5 tests for test/HookGas.t.sol:HookGasTest\n[PASS] test_aSideDuelsSliceStaysAPlainTrade() (gas: 2225484)\nLogs:\n  side duel trade with its slice: 198280\n\n[PASS] test_hookShareOfAMovingTrade() (gas: 27867148)\nLogs:\n  hook share of a moving trade: average: 280427\n  hook share of a moving trade: max: 291566\n\n[PASS] test_middlegameGas() (gas: 8526507)\nLogs:\n  first bid in a new pool: 260797\n  bidding trade: 203812\n  outbidding trade: 203617\n  plain trade: 194129\n  next block: play the turn and bid: 585327\n\n[PASS] test_openingGas() (gas: 3870102)\nLogs:\n  first bid in a new pool: 260797\n  bidding trade: 204410\n  outbidding trade: 203617\n  plain trade: 194129\n  next block: play the turn and bid: 624966\n\n[PASS] test_runningGameGas() (gas: 47700896)\nLogs:\n  running game, moving trades measured: 42\n  running game, moving trade average: 451639\n  running game, moving trade max: 557656\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 99.75ms (148.46ms CPU time)\n\nRan 1 test for test/Predict.t.sol:PredictTest\n[PASS] test_aBotCannotPickItsOwnCapturingMoves() (gas: 252152063)\nLogs:\n  bot moves: 0\n  other moves: 53\n  captures among other moves: 13\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 496.19ms (496.00ms CPU time)\n\nRan 21 tests for test/MatePot.t.sol:MatePotTest\n[PASS] testFuzz_heldEqualsOwedWithImdAsCurrency1(uint256) (runs: 32, μ: 13113643, ~: 13041857)\n[PASS] test_aDonationDoesNotRaiseTheCap() (gas: 1883900)\n[PASS] test_aDrawPaysNothing() (gas: 1861364)\n[PASS] test_aDustGamePaysNothing() (gas: 2010121)\n[PASS] test_aDustMateEarnsTwiceItsDust() (gas: 2017977)\n[PASS] test_aFeeFreeSwapAfterAFeeInOneUnlockAddsNoInflow() (gas: 2559726)\n[PASS] test_aGameTradedAloneReturnsAtMostItsPotFees() (gas: 2022701)\n[PASS] test_aMateAgainstATeamNobodyBoughtStillPays() (gas: 3694476)\n[PASS] test_aMateAgainstAnEmptyPotPaysNothing() (gas: 1813816)\n[PASS] test_aShortGamePaysTheLosersFeesNotTheResolvingTrades() (gas: 2981382)\n[PASS] test_aThinSideDuelPaysBackAtMostTheAttackersOwnFee() (gas: 2670612)\n[PASS] test_aTimeoutMatePaysNobody() (gas: 2616259)\n[PASS] test_anExpiredHashPlaysThePaidBidForNobody() (gas: 2925806)\n[PASS] test_everySwapShapeRecordsItsPotFee() (gas: 2832299)\n[PASS] test_theLoserPaysWhenImduelIsCurrency0() (gas: 2600254)\n[PASS] test_theLoserPaysWhenImduelIsCurrency1() (gas: 2600793)\n[PASS] test_theManagerOrTheHookOwnsNoBid() (gas: 2354405)\n[PASS] test_thePrizeIsAtMostTheLosersOwnInflow() (gas: 2546191)\n[PASS] test_twoSwapsInOneUnlockKeepTheirInflowApart() (gas: 4588692)\n[PASS] test_twoSwapsInOneUnlockKeepTheirInflowApartReversed() (gas: 4589218)\n[PASS] test_withdrawToRefusesAddressZeroTheHookAndTheManager() (gas: 1407537)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 633.68ms (675.67ms CPU time)\n\nRan 2 tests for test/GasEstimate.t.sol:GasEstimateTest\n[PASS] test_atTheEstimateThePayoutIsRecorded() (gas: 6326804)\nLogs:\n  smallest gas limit that plays and records the mate's payout: 3701048\n\n[PASS] test_noGasLimitPlaysTheMoveWithoutItsPayout() (gas: 974659330)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 660.39ms (669.08ms CPU time)\n\nRan 25 tests for test/Game.t.sol:GameTest\n[PASS] testFuzz_swapsNeverRevert(uint256) (runs: 48, μ: 10924015, ~: 10805723)\n[PASS] test_aGamePlaysOutThroughSwaps() (gas: 77324728)\nLogs:\n  moves played: 108\n  bids (incl. outbid ones): 138\n  most gas for a swap: 737149\n\n[PASS] test_aSmallerTradeInTheBlockDoesNotTakeTheTurn() (gas: 692202)\n[PASS] test_aTimeoutTurnCanBeTakenInItsBlock() (gas: 1484871)\n[PASS] test_aTradeBidsForTheTurn() (gas: 505631)\n[PASS] test_aTurnClosesWithItsBlock() (gas: 1146176)\n[PASS] test_anExpiredTurnPlaysItsBidForNobody() (gas: 1583139)\n[PASS] test_anOldTurnIsPlayedWithTheHistoryContractsHash() (gas: 2094806)\n[PASS] test_anyTradeSizeBids() (gas: 2685983)\n[PASS] test_lateTradeStillBidsNormally() (gas: 452508)\n[PASS] test_onlyThePoolManagerAndTheHookCanCallIn() (gas: 122174)\n[PASS] test_ownerDefaultsToTxOrigin() (gas: 438886)\n[PASS] test_playedPositionsEnterTheRepetitionMemory() (gas: 1104251)\n[PASS] test_previewMoveIsReadyInTheClosingBlock() (gas: 721740)\n[PASS] test_previewMoveReadsTheServedHashItself() (gas: 1677587)\n[PASS] test_rejectsBadConfig() (gas: 8818)\n[PASS] test_silentSidePlaysAtZeroStrength() (gas: 1055478)\n[PASS] test_strengthFollowsTheShareOfTheTeamsPot() (gas: 8610230)\n[PASS] test_teamsSwapColoursEveryGame() (gas: 1026940)\n[PASS] test_theBiggestTradeInTheBlockOwnsTheTurn() (gas: 788475)\n[PASS] test_theFirstPoolOpenedIsTheMainDuel() (gas: 179045)\n[PASS] test_theMainDuelMustPairImd() (gas: 312270)\n[PASS] test_theNextBlocksTradePlaysTheTurn() (gas: 1221781)\n[PASS] test_theOtherTeamCannotBidOnThisTurn() (gas: 435166)\n[PASS] test_whoPlaysTheTurnAndWhenDoesNotChangeTheMove() (gas: 1874217)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 817.31ms (977.01ms CPU time)\n\nRan 20 tests for test/Money.t.sol:MoneyTest\n[PASS] testFuzz_heldEqualsOwed(uint256) (runs: 48, μ: 11847644, ~: 11837086)\n[PASS] test_aBuyFeedsBothPotsAndBurnsTheSlice() (gas: 421634)\n[PASS] test_aFullChestTakesNoMore() (gas: 1100726)\n[PASS] test_aMateForNobodyPaysNobody() (gas: 515104)\n[PASS] test_aTradeStoppedByItsPriceLimitIsRefused() (gas: 557098)\n[PASS] test_capturesAndChecksPayNothing() (gas: 507482)\n[PASS] test_everyTradeEmitsHookSwapWithTheHookFee() (gas: 556213)\n[PASS] test_everyTradeFeedsBothPots() (gas: 2154397)\n[PASS] test_exactOutputSlicesTheInput() (gas: 541596)\n[PASS] test_exactOutputWithTheFeeInTheOutput() (gas: 393823)\n[PASS] test_feesCannotBeWithdrawnByAnyone() (gas: 536437)\n[PASS] test_fundChestNeedsTheRightValue() (gas: 48679)\n[PASS] test_fundChestOnlyForHookPools() (gas: 41774)\n[PASS] test_fundChestWithEth() (gas: 252841)\n[PASS] test_fundChestWithTokens() (gas: 255519)\n[PASS] test_mateTakesAQuarterOfTheLosersPot() (gas: 895609)\n[PASS] test_quietMovesPayNothing() (gas: 458996)\n[PASS] test_rewardsAreClaimedNeverPushed() (gas: 1359511)\n[PASS] test_theMateIsCappedAtTwiceWhatItsTradePaid() (gas: 773155)\n[PASS] test_theMateIsCountedForItsOwner() (gas: 636338)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 911.17ms (921.85ms CPU time)\n\nRan 1 test for test/Invariant.t.sol:InvariantTest\n[PASS]\nInvariantTest invariants:\n[PASS] invariant_boardHasBothKingsAndPlyIsBounded\n[PASS] invariant_heldEqualsOwed\n InvariantTest invariants (runs: 24, calls: 2400, reverts: 0)\n\n╭----------+----------------+-------+---------+----------╮\n| Contract | Selector       | Calls | Reverts | Discards |\n+========================================================+\n| Handler  | burn           | 298   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | fund           | 243   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | idle           | 252   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | longPause      | 271   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | nextBlock      | 224   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | trade          | 288   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | tradeAgain     | 310   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | tradeNextBlock | 268   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | withdrawReward | 246   | 0       | 0        |\n╰----------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 19999999000000001801\n  Bound result 19999999000000020001\n  Bound result 9259542123273814144\n  Bound result 7\n  Bound result 19999999999999999997\n  Bound result 16972334615231887134\n  Bound result 19999999000000000092\n  Bound result 40\n  Bound result 19999999000000009955\n  Bound result 13023133213298788803\n  Bound result 19999999000000001000\n  Bound result 19999999000000020783\n  Bound result 5828\n  Bound result 19999999000000000834\n  Bound result 1200000000000000000\n  Bound result 19999999000000000161\n  Bound result 19999999001000000001\n  Bound result 10822\n  Bound result 4323722779903916992\n  Bound result 19999999000000100001\n  Bound result 60877149671602\n  Bound result 19999999000000023154\n  Bound result 19999999000000000111\n  Bound result 38958999603826347141\n  Bound result 19999999000000001020\n  Bound result 19\n  Bound result 19999999000000000161\n  Bound result 10000000\n  Bound result 60\n  Bound result 19999999000000000256\n  Bound result 19999999000000000096\n  Bound result 9881315612531857779\n  Bound result 120\n  Bound result 19999999000000006927\n  Bound result 19999999000000002153\n  Bound result 19999999000000000226\n  Bound result 19999999000000000521\n  Bound result 19999999000000012692\n  Bound result 50000000000000000000\n  Bound result 19999999000000006542\n  Bound result 17724\n  Bound result 14269\n  Bound result 34353926883621670997\n  Bound result 1200000000000000000\n  Bound result 120\n  swaps: 31\n  moves: 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.18s (1.18s CPU time)\n\nRan 3 tests for test/TokenInvariant.t.sol:TokenInvariantTest\n[PASS]\nTokenInvariantTest invariants:\n[PASS] invariant_allowancesAreExactlyWhatWasApprovedLessWhatWasSpent\n[PASS] invariant_supplyIsFixedAndHeldByTheActors\n TokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------------+-------+---------+----------╮\n| Contract     | Selector           | Calls | Reverts | Discards |\n+================================================================+\n| TokenHandler | approve            | 2047  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | approveZeroSpender | 2039  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | transfer           | 2067  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | transferFrom       | 2039  | 0       | 0        |\n╰--------------+--------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 524\n  Bound result 2\n  Bound result 10\n  Bound result 4\n  Bound result 6\n  Bound result 34560000\n  Bound result 9\n  Bound result 2011\n  Bound result 3\n  Bound result 3250000000000000\n  Bound result 172800\n  Bound result 5\n  Bound result 146344160017450924443285242\n  Bound result 3\n  Bound result 100000000\n  Bound result 5\n  Bound result 4966\n  Bound result 5\n  Bound result 4641\n  Bound result 2823\n  Bound result 242\n  Bound result 5694\n  Bound result 6372\n  Bound result 9\n  Bound result 100000000000000000\n  Bound result 4\n  Bound result 9\n  Bound result 90\n  Bound result 4\n  Bound result 3\n  Bound result 2\n  Bound result 67988757658362218081729219\n  Bound result 84443867409285120\n  Bound result 242\n  Bound result 1\n\n[PASS] testFuzz_transferOfMoreThanTheBalanceIsRefused(uint256) (runs: 512, μ: 55904, ~: 55857)\nLogs:\n  Bound result 3825457095198333340444217064142663440055883\n\n[PASS] test_transferFromTheZeroAddressIsRefused() (gas: 82118)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.55s (2.58s CPU time)\n\nRan 1 test for test/InvariantDuels.t.sol:InvariantDuelsTest\n[PASS]\nInvariantDuelsTest invariants:\n[PASS] invariant_everyBoardIsSound\n[PASS] invariant_everyCurrencyBalances\n[PASS] invariant_rightsMatchTheBoard\n[PASS] invariant_turnsAreWellFormed\n InvariantDuelsTest invariants (runs: 24, calls: 2880, reverts: 0)\n\n╭--------------+-------------------+-------+---------+----------╮\n| Contract     | Selector          | Calls | Reverts | Discards |\n+===============================================================+\n| DuelsHandler | addLiquidity      | 198   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | burn              | 194   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | fund              | 198   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | longPause         | 204   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | nextBlock         | 197   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | pushThenNextBlock | 225   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | queueMate         | 211   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | removeLiquidity   | 177   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | roundTrip         | 211   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | setMates          | 235   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | trade             | 219   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | tradeAgain        | 194   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | tradeNextBlock    | 215   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | withdrawReward    | 202   | 0       | 0        |\n╰--------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 47\n  Bound result 9806\n  Bound result 19999999999000021922\n  Bound result 26\n  Bound result 180000000001517015004\n  Bound result 12\n  Bound result 19999999999000016948\n  Bound result 149999999850000\n  Bound result 19999999999000000061\n  Bound result 19999999999087312192\n  Bound result 108000\n  Bound result 11037\n  Bound result 22183872506835070987\n  Bound result 180000000000000016227\n  Bound result 12\n  Bound result 19999999999000010397\n  Bound result 10042500000000000000\n  Bound result 12\n  Bound result 19999999999000887221\n  Bound result 12\n  Bound result 19999999999000000258\n  Bound result 1991521851\n  Bound result 431670093970\n  Bound result 16764\n  Bound result 180000000000000001177\n  Bound result 12\n  Bound result 49\n  Bound result 3333000000000000000007\n  Bound result 68231212637871061457\n  Bound result 12\n  Bound result 19999999999000002828\n  Bound result 71776119061217280\n  Bound result 19999999999000016119\n  Bound result 120\n  Bound result 4999999999000008867\n  Bound result 41\n  Bound result 4999999999000004281\n  Bound result 1000000000000002\n  Bound result 650000000000000000000\n  Bound result 64000000000000000\n  Bound result 180000000000000001666\n  Bound result 12\n  Bound result 9999999000000000011658\n  Bound result 829593587446322645\n  Bound result 19999999999000007599\n  Bound result 106\n  Bound result 160\n  Bound result 3711\n  Bound result 130\n  Bound result 999\n  Bound result 9999999000000000004661\n  Bound result 12\n  Bound result 268209726905697\n  Bound result 12\n  Bound result 10900000000000000000\n  Bound result 180000000000000004001\n  Bound result 12\n  Bound result 3983756817468385116106\n  Bound result 180000000000016711681\n  Bound result 12\n  Bound result 9999999000000000001000\n  Bound result 18451753106752625808\n  Bound result 180000000000000013133\n  Bound result 12\n  Bound result 74\n  Bound result 9999999000000257633819\n  Bound result 18690713955923036477\n  Bound result 50000000000000000000\n  Bound result 1\n  Bound result 9999999000000034560001\n  Bound result 180000000000000001332\n  Bound result 12\n  Bound result 12\n  Bound result 10000000000000000\n  Bound result 12\n  Bound result 19999999999000002601\n  Bound result 9999999000000000007352\n  Bound result 9999999000000093527403\n  Bound result 18391784909155679775\n  Bound result 76\n  Bound result 19999999999000172801\n  Bound result 3090376478590152956681\n  Bound result 1000000002\n  Bound result 12500000000000000000\n  Bound result 31\n  Bound result 32500199999999800\n  Bound result 12\n  Bound result 19999999999000004079\n  Bound result 19999999999000017579\n  Bound result 49569384140159271248\n  Bound result 12\n  Bound result 12\n  Bound result 4652870257451440200\n  Bound result 1000000000000000\n  Bound result 191000000000000000002\n  Bound result 12\n  Bound result 19999999999000004075\n  Bound result 72\n  Bound result 111232027869618472965\n  Bound result 12\n  Bound result 19999999999000007543\n  swaps: 39\n  moves: 17\n  mates paid: 3\n  Bound result 12\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.62s (3.61s CPU time)\n\nRan 1 test for test/Staking.t.sol:StakingInvariantTest\n[PASS]\nStakingInvariantTest invariants:\n[PASS] invariant_everyWeiIsAccountedFor\n[PASS] invariant_everyoneCanLeave\n[PASS] invariant_theDeadStakeNeverLeaves\n StakingInvariantTest invariants (runs: 256, calls: 128000, reverts: 0)\n\n╭----------------+----------+-------+---------+----------╮\n| Contract       | Selector | Calls | Reverts | Discards |\n+========================================================+\n| StakingHandler | deposit  | 18298 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | mint     | 18042 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | move     | 18380 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | redeem   | 18476 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | topUp    | 18037 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | wait     | 18412 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | withdraw | 18355 | 0       | 0        |\n╰----------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 30\n  Bound result 7974\n  Bound result 5894\n  Bound result 3483\n  Bound result 48368785828613788855022709\n  Bound result 86400\n  Bound result 4695\n  Bound result 2330\n  Bound result 1889\n  Bound result 250000000000000000\n  Bound result 257\n  Bound result 259200\n  Bound result 106176000\n  Bound result 1261\n  Bound result 86\n  Bound result 279\n  Bound result 5467\n  Bound result 350703344\n  Bound result 110\n  Bound result 39202030\n  Bound result 3000\n  Bound result 1\n  Bound result 7163\n  Bound result 98842190\n  Bound result 1234000000000000000001\n  Bound result 6\n  Bound result 414831483\n  Bound result 427\n  Bound result 5294435\n  Bound result 27611725679747730228426733\n  Bound result 14889524913541820630239362\n  Bound result 6545\n  Bound result 975\n  Bound result 16432212701708995310594182\n  Bound result 300000\n  Bound result 1101468656789033271276\n  Bound result 7734217165966879031024063\n  Bound result 7265\n  Bound result 38585470479735799884\n  Bound result 243\n  Bound result 368\n  Bound result 10644109108470840042668157\n  Bound result 5619\n  Bound result 3151\n  Bound result 3121116754\n  Bound result 6286\n  Bound result 45395012106476603133222414\n  Bound result 3984\n  Bound result 4831904583320016242222640\n  Bound result 41758936\n  Bound result 1101\n  Bound result 99\n  Bound result 6853\n  Bound result 7000000000000000003\n  Bound result 6795\n  Bound result 5000000\n  Bound result 80\n  Bound result 22514139366445175168029601\n  Bound result 11200000000000000000\n  Bound result 5990903\n  Bound result 184200\n  Bound result 1927\n  Bound result 4490297696904127855668636\n  Bound result 650000000000000000000\n  Bound result 315360000\n  Bound result 102053642\n  Bound result 8685335947337919803338108\n  Bound result 7267\n  Bound result 71343451\n  Bound result 100000000000000000000000\n  Bound result 11\n  Bound result 5379\n  Bound result 5295028172037455586966267\n  Bound result 1779068411153515029903774\n  Bound result 1111\n  Bound result 2134284027740247372\n  Bound result 6115911296698799452723677\n  Bound result 2587005\n  Bound result 5799\n  Bound result 7000\n  Bound result 127216174092927879267794\n  Bound result 200000000000000000000\n  Bound result 152\n  Bound result 1773568232727811698836584\n  Bound result 18220849623997100951319112\n  Bound result 7222692462861374712861220\n  Bound result 362024\n  Bound result 8778941884898\n  Bound result 300000000000000000000000\n  Bound result 3465988983\n  Bound result 2\n  Bound result 121024001\n  Bound result 51966\n  Bound result 2026\n  Bound result 2000000000000000000\n  Bound result 7911008\n  Bound result 6427208013225694378226214\n  Bound result 6945693\n  Bound result 31808000\n  Bound result 6000000000000000000\n  Bound result 1\n  Bound result 4728\n  Bound result 53365173534431531268512092\n  Bound result 259200\n  Bound result 5027\n  Bound result 5458093\n  Bound result 11573303165662440772\n  Bound result 544407120122111762761203\n  Bound result 7000000000000000003\n  Bound result 72340172838076673\n  Bound result 186686623095284165326370350\n  Bound result 846\n  Bound result 5166214130891545663993324\n  Bound result 2014\n  Bound result 96\n  Bound result 2805\n  Bound result 4618\n  Bound result 7662263983033731965816295\n  Bound result 16\n  Bound result 2147483648\n  Bound result 10653054360480186140608164\n  Bound result 3192399462328020441766436\n  Bound result 4846\n  Bound result 1522\n  Bound result 5118\n  Bound result 8082316565721450407205784\n  Bound result 87939262250111205153143486\n  Bound result 184200\n  Bound result 31930500030249872065716385\n  Bound result 2843\n  Bound result 2600\n  Bound result 10374073137926251095376184\n  Bound result 3021\n  Bound result 2416\n  Bound result 8118039027739630042165424\n  Bound result 95000\n  Bound result 4095\n  Bound result 5076\n  Bound result 29312000\n  Bound result 56\n  Bound result 4000000000000000000000000\n  Bound result 1762017381\n  Bound result 5\n  Bound result 3250000000000000\n  Bound result 40000\n  Bound result 887270\n  Bound result 3339\n  Bound result 53556818\n  Bound result 77514524458252784604706212\n  Bound result 1920\n  Bound result 10661\n  Bound result 16107911685621413134888992\n  Bound result 4186\n  Bound result 49\n  Bound result 600000000000000000000\n  Bound result 0\n  Bound result 2145752327149\n  Bound result 839078240\n  Bound result 640000\n  Bound result 106549315\n  Bound result 5751183187328126462951450\n  Bound result 3244\n  Bound result 50\n  Bound result 15402099723468171412416232\n  Bound result 18446744073709551615\n  Bound result 35897137858991661229510531\n  Bound result 75477072\n  Bound result 1345879986677566198162793\n  Bound result 1855024798277724494102913\n  Bound result 1374396088320\n  Bound result 1798563179440397228973804\n  Bound result 85881227700427893226728635\n  Bound result 36\n  Bound result 1568\n  Bound result 600000000000000000000\n  Bound result 5830\n  Bound result 17462090949788630610893425\n  Bound result 242\n  Bound result 24999999999999999999\n  Bound result 365\n  Bound result 3641014143\n  Bound result 79072388\n  Bound result 2362\n  Bound result 10000000\n  Bound result 1645\n  Bound result 60\n  Bound result 13553411511116889157988262\n  Bound result 7220\n  Bound result 6470\n  Bound result 172727630\n  Bound result 48879\n  Bound result 20000000000000000000000000\n  Bound result 11726546631209106308803386\n  Bound result 161\n  Bound result 10000000000\n  Bound result 269302653\n  Bound result 5444\n  Bound result 13371994879941513026028232\n  Bound result 289011136\n  Bound result 150\n  Bound result 500000000000000000000\n  Bound result 774388834836604032451778\n  Bound result 48617602\n  Bound result 119173666\n  Bound result 436\n  Bound result 116371498\n  Bound result 70\n  Bound result 7398\n  Bound result 4095\n  Bound result 13813499\n  Bound result 12\n  Bound result 10953498156410566006203188\n  Bound result 1239446558\n  Bound result 11886855266670207433452042\n  Bound result 7998936044539696914314290\n  Bound result 475\n  Bound result 253\n  Bound result 24999999999999999999\n  Bound result 32592696311261163602224799\n  Bound result 3239\n  Bound result 3\n  Bound result 9889483263014356222444614\n  Bound result 90038606160529120248830922\n  Bound result 76672000\n  Bound result 172800\n  Bound result 460031\n  Bound result 3023\n  Bound result 48879\n  Bound result 0\n  Bound result 115904000\n  Bound result 4245\n  Bound result 2333\n  Bound result 3249\n  Bound result 30873276184554368051964372\n  Bound result 19878240\n  Bound result 351\n  Bound result 52259276\n  Bound result 1130899660923424886362249\n  Bound result 7591\n  Bound result 7000000000000000000000\n  Bound result 65536\n  Bound result 7894085\n  Bound result 2954110473\n  Bound result 6318\n  Bound result 91\n  Bound result 127\n  Bound result 9579006326857706766537872\n  Bound result 20942417073148516836309051\n  Bound result 1403380\n  Bound result 3876049\n  Bound result 500\n  Bound result 139882702505658639576004187\n  Bound result 117260510\n  Bound result 142683333287580465522525\n  Bound result 909\n  Bound result 28592920\n  Bound result 3593\n  Bound result 763600050\n  Bound result 34560000\n  Bound result 3000000\n  Bound result 2155872511\n  Bound result 125750031101223166603534\n  Bound result 398\n  Bound result 131072\n  Bound result 126\n  Bound result 10723151780598845931\n  Bound result 47845768\n  Bound result 100280219855939041174899407\n  Bound result 100000\n  Bound result 4095\n  Bound result 4096\n  Bound result 126770726455593801192016032\n  Bound result 1374396088320\n  Bound result 61094162\n  Bound result 3323\n  Bound result 200\n  Bound result 900\n  Bound result 18106191968477994582896964\n  Bound result 2370036828\n  Bound result 10946319952870559718581029\n  Bound result 106176000\n  Bound result 168\n  Bound result 64000000000000000\n  Bound result 5203835977947890242184653\n  Bound result 56137588\n  Bound result 2072\n  Bound result 2845\n  Bound result 388430155183722645538926\n  Bound result 600000000000000000000\n  Bound result 160\n  Bound result 19718378865030791362847773\n  Bound result 1000000000000000000\n  Bound result 4533141851530563489\n  Bound result 65000000000000000000\n  Bound result 1372\n  Bound result 100000000000000000\n  Bound result 2827\n  Bound result 37311471\n  Bound result 3032\n  Bound result 1797770558449295217295631\n  Bound result 14052050171937834626622192\n  Bound result 12\n  Bound result 1000000\n  Bound result 7683590187505073372261505\n  Bound result 10018272578341589405241032\n  Bound result 439701284489474685\n  Bound result 64392921706614076095648938\n  Bound result 7000000000000000003\n  Bound result 163\n  Bound result 8064819935498201219174213\n  Bound result 1000001\n  Bound result 350706411\n  Bound result 20000000000000000\n  Bound result 10769778254246629123437130\n  Bound result 2471529613218745149953309\n  Bound result 7103\n  Bound result 6318\n  Bound result 9259542123273814144\n  Bound result 1593326992921530234220283\n  Bound result 4032000\n  Bound result 105625234\n  Bound result 4158\n  Bound result 1058844430222546892468352\n  Bound result 45265029803779924529484077\n  Bound result 1000000000000000000000\n  Bound result 7401878470645843261940777\n  Bound result 9558446191408641832421244\n  Bound result 14\n  Bound result 26989669700245365378983\n  Bound result 27593046449714218463733094\n  Bound result 1127\n  Bound result 5295028172037455586966267\n  Bound result 1623876216172269217380610\n  Bound result 57253970361794958492769339\n  Bound result 8418796614591482240977488\n  Bound result 10000000000000000\n  Bound result 500000000000000000\n  Bound result 200\n  Bound result 200\n  Bound result 2563481451777936739216550\n  Bound result 57005\n  Bound result 267838857270240835624995\n  Bound result 126143999\n  Bound result 136\n  Bound result 17587629275124075505018895\n  Bound result 96\n  Bound result 6000000000000000000\n  Bound result 7037\n  Bound result 38473987144894004296360232\n  Bound result 9223372036854775808000\n  Bound result 9000000000000000000\n  Bound result 7147462337976847945252046\n  Bound result 4334\n  Bound result 2156808408800882870623517\n  Bound result 6300362940117198500122860\n  Bound result 3329\n  Bound result 25000000000000000000\n  Bound result 100000000\n  Bound result 10042500000000000000\n  Bound result 28\n  Bound result 4316845280991621296014181\n  Bound result 307009640648392205897359\n  Bound result 500000000000000000009\n  Bound result 1000\n  Bound result 9241421688590303745\n  Bound result 6004724096623636068067030\n  Bound result 10000000000000000000\n  Bound result 0\n  Bound result 1428633830718824586837128\n  Bound result 1284\n  Bound result 100000000\n  Bound result 2351\n  Bound result 1176\n  Bound result 2147483648\n  Bound result 62126727083184526589751471\n  Bound result 3908\n  Bound result 86784000\n  Bound result 299\n  Bound result 49580069268236873956899\n  Bound result 14885619428356919400954586\n  Bound result 13663401167337093655214\n  Bound result 4663987144772586592534019\n  Bound result 65270091\n  Bound result 0\n  Bound result 4038607274639183501182901\n  Bound result 5051217410409434528297742\n  Bound result 997\n  Bound result 1813837158970467565991464\n  Bound result 320\n  Bound result 638750908817937493720206\n  Bound result 1677\n  Bound result 5144\n  Bound result 3616\n  Bound result 11400714819323198485\n  Bound result 193\n  Bound result 5546\n  Bound result 124608000\n  Bound result 8967989800370926860320740\n  Bound result 48879\n  Bound result 5983845091439307217575772\n  Bound result 4093\n  Bound result 1297856795242124077573113\n  Bound result 1999999000000000000000000\n  Bound result 18\n  Bound result 100000000000000000\n  Bound result 4695\n  Bound result 4199\n  Bound result 0\n  Bound result 11379522623655518080563772\n  Bound result 252624396645131046\n  Bound result 702\n  Bound result 14331300690798229841813816\n  Bound result 5787666\n  Bound result 1681\n  Bound result 168\n  Bound result 466366653208387145649765\n  Bound result 460031\n  Bound result 4891\n  Bound result 2120877516657563078491750\n  Bound result 80\n  Bound result 162\n  Bound result 160\n  Bound result 1204237018399072369677398\n  Bound result 255\n  Bound result 152\n  Bound result 99999\n  Bound result 1231\n  Bound result 561459293931689294235159\n  Bound result 1345\n  Bound result 3783757147298138470387273\n  Bound result 1834\n  Bound result 41813078\n  Bound result 1000000\n  Bound result 3203856188270272064059506\n  Bound result 91\n  Bound result 3324010378272880525352002\n  Bound result 4480\n  Bound result 47937341119933478467319460\n  Bound result 168\n  Bound result 3919385145\n  Bound result 1234000000000000000000\n  Bound result 4600917209106717944636452\n  Bound result 3089\n  Bound result 83027848251348685489156865\n  Bound result 4279005009933262804830279\n  Bound result 6282549935847102673051332\n  Bound result 7898\n  Bound result 4308288996171869415070358\n  Bound result 0\n  Bound result 2972725269827423772507804\n  Bound result 5942974657824982677301542\n  Bound result 18448521978975747193707731\n  Bound result 0\n  Bound result 4474\n  Bound result 370369163402562416921\n  Bound result 2026\n  Bound result 125120000\n  Bound result 35842237\n  Bound result 4754155705749023585732361\n  Bound result 5650\n  Bound result 0\n  Bound result 16711680\n  Bound result 0\n  Bound result 242\n  Bound result 4078\n  Bound result 1915728893030126973312703\n  Bound result 9000000000000000000\n  Bound result 16\n  Bound result 3456203883882099166599996\n  Bound result 369\n  Bound result 2847615647386583306925998\n  Bound result 16711680\n  Bound result 0\n  Bound result 921846202994381541250774\n  Bound result 4038607274639184312248817\n  Bound result 2474427832250689214535257\n  Bound result 5572876331954596338184817\n  Bound result 178\n  Bound result 11741418081461445802220591\n  Bound result 2738963534186381901540979\n  Bound result 1762000000\n  Bound result 4893\n  Bound result 120\n  Bound result 9856000\n  Bound result 1286730727423904200222704\n  Bound result 165161\n  Bound result 6576446052107889610090756\n  Bound result 1008\n  Bound result 3600\n  Bound result 9211197993776683199357784\n  Bound result 13126347723773999879979\n  Bound result 36948657267440582068396748\n  Bound result 5101349\n  Bound result 5866382\n  Bound result 13787848793156543929\n  Bound result 8580469317063244121982247\n  Bound result 4660\n  Bound result 1681\n  Bound result 1668512457\n  Bound result 10\n  Bound result 97\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 46.15s (46.14s CPU time)\n\nRan 32 test suites in 46.15s (57.99s CPU time): 232 tests passed, 0 failed, 1 skipped (233 total tests)\n","passed":true},{"durationMs":259,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IMDuelFeeRouter.collect()\",\"IMDuelFeeRouter.handOn()\",\"IMDuelFeeRouter.lock()\",\"IMDuelFeeRouter.propose(address)\",\"IMDuelHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"IMDuelHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"IMDuelHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"IMDuelHook.fundChest((address,address,uint24,int24,address),bool,uint256)\",\"IMDuelHook.unlockCallback(bytes)\",\"IMDuelHook.withdraw(address,address)\",\"IMDuelHook.withdrawTo(address,address)\",\"IMDuelStaking.approve(address,uint256)\",\"IMDuelStaking.deposit(uint256,address)\",\"IMDuelStaking.mint(uint256,address)\",\"IMDuelStaking.redeem(uint256,address,address)\",\"IMDuelStaking.sync()\",\"IMDuelStaking.transfer(address,uint256)\",\"IMDuelStaking.transferFrom(address,address,uint256)\",\"IMDuelStaking.withdraw(uint256,address,address)\",\"IMDuelToken.approve(address,uint256)\",\"IMDuelToken.transfer(address,uint256)\",\"IMDuelToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"ADAPTATION.md\":138,\"LICENSE\":16,\"dist/_headers\":8,\"dist/apple-touch-icon.png\":9,\"dist/art/hero-swarm.webp\":720,\"dist/assets/C122-DvQn1nGk.mp3\":10635,\"dist/assets/CC123-MfPBydK1.mp3\":6147,\"dist/assets/CC124-rKIjYKsi.mp3\":9221,\"dist/assets/CC125-62JaqcM-.mp3\":7903,\"dist/assets/CC126-cankUb9F.mp3\":6392,\"dist/assets/badge-BO83mXN3.js\":1,\"dist/assets/badge-Bri6MgGm.css\":1,\"dist/assets/ccip-BpUXKLfR.js\":1,\"dist/assets/chessboard-CMOAfHUO.css\":1,\"dist/assets/chessboard-DSUJf5m3.js\":1,\"dist/assets/controls-B-yWk6PN.css\":1,\"dist/assets/controls-BHCuqmWb.js\":3,\"dist/assets/create-CrtTR5E9.js\":13,\"dist/assets/create-i8p4obVz.css\":1,\"dist/assets/discovery-DfqpzOGG.js\":12,\"dist/assets/docs-DnTmEmVC.js\":557,\"dist/assets/docs-dgxECQPm.css\":1,\"dist/assets/duel-7MeZCWuf.css\":1,\"dist/assets/duel-BloOLRx6.js\":78,\"dist/assets/duel-table-D9x9DZZV.css\":1,\"dist/assets/duel-table-HK0-2Ng4.js\":11,\"dist/assets/duels-B86ITlW_.js\":6,\"dist/assets/duels-n_aKJ4sI.css\":1,\"dist/assets/feed-DRE1eB8o.js\":25,\"dist/assets/feed-Ddh1LJ-u.css\":1,\"dist/assets/history/1-0xbb45eacf50b4bd8ce31e0620e14ff6e6b6375d56fce4372d3046f4a02faeae65-0-b0c26ccc.json\":1,\"dist/assets/home-B5GybLE4.js\":21,\"dist/assets/home-WrMuib77.css\":1,\"dist/assets/index-CEu3j7Ex.js\":62,\"dist/assets/index-aqUhpJbX.css\":1,\"dist/assets/localBatchGatewayRequest-DC5ZfVVU.js\":30,\"dist/assets/missing-BmTc_RzT.js\":1,\"dist/assets/overview-BsjhZYfN.css\":1,\"dist/assets/page-title-BT5kD_nh.js\":1,\"dist/assets/page-title-ncHp25r9.css\":1,\"dist/assets/players-CxiYjahr.css\":1,\"dist/assets/players-D2S5yaf4.js\":7,\"dist/assets/profile-17hHaRGP.js\":19,\"dist/assets/profile-Ctzz0eK6.css\":1,\"dist/assets/secp256k1-DS-XoEp3.js\":1,\"dist/assets/skeleton-By2p64Po.css\":1,\"dist/assets/skeleton-DfYj0nFe.js\":1,\"dist/assets/spendable-DZbWvh1P.css\":1,\"dist/assets/spendable-DaF_IlYB.js\":5,\"dist/assets/token-icon-D02jiyaf.js\":1,\"dist/assets/token-icon-qRBAAVr_.css\":1,\"dist/assets/utils-Bpv4vmSW.js\":1,\"dist/assets/who-BToGNiZS.css\":1,\"dist/assets/who-CEyB5pkF.js\":5,\"dist/deploy.json\":44,\"dist/docs/llms.txt\":245,\"dist/favicon.ico\":20,\"dist/favicon.svg\":1,\"dist/fonts/michroma.woff2\":67,\"dist/fonts/plex-mono-400.woff2\":58,\"dist/fonts/plex-mono-500.woff2\":62,\"dist/fonts/plex-sans-400.woff2\":85,\"dist/fonts/plex-sans-500.woff2\":91,\"dist/history/1-0xa92f72dcdd90229c32f6d51229f4cc5c916410cc.json\":1,\"dist/history/1-0xbb45eacf50b4bd8ce31e0620e14ff6e6b6375d56fce4372d3046f4a02faeae65.json\":1,\"dist/icon-192.png\":15,\"dist/icon-512.png\":33,\"dist/index.html\":43,\"dist/og.png\":56,\"dist/site.webmanifest\":13,\"foundry.toml\":29,\"launch.json\":24,\"launch/engine.json\":10,\"launch/hook.json\":34,\"launch/hook.sepolia.json\":34,\"launch/staking.json\":19,\"script/LaunchPolicy.sol\":43,\"src/Bitboard.sol\":719,\"src/Chess.sol\":35,\"src/ChessEngineV5.sol\":852,\"src/IChessEngine.sol\":29,\"src/IMDuelFeeRouter.sol\":138,\"src/IMDuelHook.sol\":858,\"src/IMDuelStaking.sol\":120,\"src/IMDuelToken.sol\":62,\"src/Rules.sol\":45,\"src/Strength.sol\":46,\"test/AuditRegression.t.sol\":192,\"test/Base.sol\":223,\"test/Bidding.t.sol\":256,\"test/Chessboard.sol\":79,\"test/Draws.t.sol\":90,\"test/FactoryLaunch.t.sol\":218,\"test/FeeRouter.t.sol\":374,\"test/FeeSchedule.t.sol\":165,\"test/Game.t.sol\":381,\"test/GasEstimate.t.sol\":96,\"test/Harness.sol\":83,\"test/HookGas.t.sol\":172,\"test/Hostile.t.sol\":415,\"test/Invariant.t.sol\":158,\"test/InvariantDuels.t.sol\":463,\"test/Launch.t.sol\":139,\"test/LaunchAdmission.t.sol\":156,\"test/LaunchFiles.t.sol\":78,\"test/MatePot.t.sol\":461,\"test/Money.t.sol\":360,\"test/PotStrength.t.sol\":114,\"test/Predict.t.sol\":102,\"test/Size.t.sol\":27,\"test/Slice.t.sol\":140,\"test/Staking.t.sol\":520,\"test/StakingAudit.t.sol\":138,\"test/StakingFork.t.sol\":197,\"test/StakingLaunch.t.sol\":85,\"test/Stats.t.sol\":248,\"test/Strength.t.sol\":88,\"test/Teams.t.sol\":90,\"test/Token.t.sol\":82,\"test/TokenInvariant.t.sol\":155,\"test/Tokens.sol\":150,\"test/V4Fixture.sol\":100,\"test/Windows.t.sol\":135,\"test/data/chess.json\":1,\"test/data/conversion-validation.json\":770,\"test/data/conversion.json\":98,\"test/data/endings.json\":1,\"test/data/legal.json\":1,\"test/data/random.json\":1},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed; 1 finding(s) for the step that wrote the contracts","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"120167a826f563c46dafbb10b04ae4409b0c63c885a61a8699e788a48c72c85d","verifiedTreeHash":"770c568cbeefca9a526748253a9cad8f4f2d67cd","verifierVersion":"0.1.0+df310a90"},{"checks":[{"durationMs":105146,"exitCode":0,"name":"build","output":"Compiling 137 files with Solc 0.8.26\nSolc 0.8.26 finished in 105.01s\nCompiler run successful with warnings:\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:108:22:\n    |\n108 |             rook = ((FILE_A << f) | (RANK_1 << (8 * r))) ^ bit;\n    |                      ^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:108:38:\n    |\n108 |             rook = ((FILE_A << f) | (RANK_1 << (8 * r))) ^ bit;\n    |                                      ^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:109:57:\n    |\n109 |             uint64 d = f >= r ? DIAG >> (8 * (f - r)) : DIAG << (8 * (r - f));\n    |                                                         ^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:110:65:\n    |\n110 |             uint64 a = f + r <= 7 ? ANTI >> (8 * (7 - f - r)) : ANTI << (8 * (f + r - 7));\n    |                                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/ChessEngineV5.sol:537:38:\n    |\n537 |             uint64 ahead = c.white ? ~uint64(0) << ((r + 1) * 8) : (uint64(1) << (r * 8)) - 1;\n    |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/ChessEngineV5.sol:537:69:\n    |\n537 |             uint64 ahead = c.white ? ~uint64(0) << ((r + 1) * 8) : (uint64(1) << (r * 8)) - 1;\n    |                                                                     ^^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:31:18:\n   |\n31 |         returns (uint16, Rules.Played memory)\n   |                  ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:31:26:\n   |\n31 |         returns (uint16, Rules.Played memory)\n   |                          ^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:36:85:\n   |\n36 |     function playAny(uint256, uint32, uint32, bool, uint256) external pure returns (uint16, Rules.Played memory) {\n   |                                                                                     ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:36:93:\n   |\n36 |     function playAny(uint256, uint32, uint32, bool, uint256) external pure returns (uint16, Rules.Played memory) {\n   |                                                                                             ^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/Hostile.t.sol:62:18:\n   |\n62 |         returns (uint16, Rules.Played memory)\n   |                  ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/Hostile.t.sol:62:26:\n   |\n62 |         returns (uint16, Rules.Played memory)\n   |                          ^^^^^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Game.t.sol:97:9:\n   |\n97 |         IMDuelHook.Game memory g = st();\n   |         ^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to view\n  --> test/LaunchFiles.t.sol:73:5:\n   |\n73 |     function test_engineLaunchFileDeploysTheEngineWithoutArguments() public {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":45887,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/StakingLaunch.t.sol:StakingLaunchTest\n[PASS] test_emptyChainCannotSubstituteForMainnet() (gas: 16326)\n[SKIP] test_exactLaunchOnMainnet() (gas: 0)\nSuite result: ok. 1 passed; 0 failed; 1 skipped; finished in 558.40µs (289.82µs CPU time)\n\nRan 1 test for test/Size.t.sol:SizeTest\n[PASS] test_deployedCodeFitsTheBudgets() (gas: 71241)\nLogs:\n  hook: 16900\n  engine v5: 23339\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 751.16µs (623.17µs CPU time)\n\nRan 3 tests for test/StakingFork.t.sol:StakingForkTest\n[PASS] test_aHandoffAfterThreeDaysAndALock() (gas: 2598)\n[PASS] test_theRouterChecksItsWiringOnChain() (gas: 2460)\n[PASS] test_theWholeRelease() (gas: 2422)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 643.22µs (56.22µs CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_allowances() (gas: 347653)\n[PASS] test_fixedSupplyToTheDeployer() (gas: 39384)\n[PASS] test_nothingPrivileged() (gas: 192691)\n[PASS] test_transfers() (gas: 188240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 849.96µs (326.70µs CPU time)\n\nRan 16 tests for test/FeeRouter.t.sol:FeeRouterTest\n[PASS] test_aHandoffNeverSkipsTheLastCollect() (gas: 214471)\n[PASS] test_aHandoffWaitsThreeDaysAndCollectsFirst() (gas: 675163)\n[PASS] test_aLockStopsAProposalFromAStolenKey() (gas: 165596)\n[PASS] test_aNewProposalRestartsTheNoticeAndZeroWithdrawsIt() (gas: 273480)\n[PASS] test_aProposalWorksToTheEndOfItsWindow() (gas: 190950)\n[PASS] test_aRejectedVaultProposalPreservesAnExistingProposal() (gas: 260843)\n[PASS] test_aStaleProposalExpires() (gas: 279497)\n[PASS] test_aWrongSetupIsRefused() (gas: 4094745)\n[PASS] test_budgets() (gas: 8338)\n[PASS] test_collectForwardsAClaimSomeoneElseMade() (gas: 421990)\n[PASS] test_collectSendsIMDUELToTheVaultAndIMDToTheTeam() (gas: 600592)\n[PASS] test_collectWithNothingAccruedIsHarmless() (gas: 114633)\n[PASS] test_lockingIsForGoodAndCancelsAProposal() (gas: 544515)\n[PASS] test_onlyTheAdminProposesAndHandsOn() (gas: 210360)\n[PASS] test_theHandoverKeepsWhatAccruedBefore() (gas: 230078)\n[PASS] test_theVaultCannotBeProposedAsRequester() (gas: 449338)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 3.69ms (2.75ms CPU time)\n\nRan 3 tests for test/LaunchFiles.t.sol:LaunchFilesTest\n[PASS] test_engineLaunchFileDeploysTheEngineWithoutArguments() (gas: 7834)\n[PASS] test_ethereumLaunchFile() (gas: 158792)\n[PASS] test_sepoliaLaunchFile() (gas: 150795)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.58ms (2.12ms CPU time)\n\nRan 7 tests for test/Draws.t.sol:DrawsTest\n[PASS] test_checkmate() (gas: 334401)\n[PASS] test_moveCap() (gas: 331503)\n[PASS] test_ordinaryMoveDoesNotEndTheGame() (gas: 272039)\n[PASS] test_quietMoveLimit() (gas: 337709)\n[PASS] test_stalemate() (gas: 329276)\n[PASS] test_thirdRepetition() (gas: 1128186)\n[PASS] test_tooFewPiecesToMate() (gas: 321032)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 5.37ms (3.38ms CPU time)\n\nRan 8 tests for test/Slice.t.sol:SliceTest\n[PASS] test_aDuelAgainstImdSendsItsSliceToTheMainDuelsImdPot() (gas: 981778)\n[PASS] test_aDuelAgainstImduelBurnsItsSlice() (gas: 960558)\n[PASS] test_aSliceMovesNoPrice() (gas: 1532512)\n[PASS] test_anyoneSendsTheBurn() (gas: 648930)\n[PASS] test_buyingImduelBurnsASliceOfIt() (gas: 411997)\n[PASS] test_dustPaysNoSlice() (gas: 514419)\n[PASS] test_theMainDuelsSliceIsBurned() (gas: 577029)\n[PASS] test_theWholeSliceIsBurnedToTheWei() (gas: 536637)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 8.12ms (5.49ms CPU time)\n\nRan 11 tests for test/Stats.t.sol:StatsTest\n[PASS] test_aDustBidsMoveCounts() (gas: 1177326)\n[PASS] test_aMateCountsEvenWhenItPaysNothing() (gas: 691623)\n[PASS] test_aMoveAtAnyStrengthCounts() (gas: 278453)\n[PASS] test_aPaidSideDuelMateCountsNothing() (gas: 861550)\n[PASS] test_aSideDuelCountsNothing() (gas: 583461)\n[PASS] test_amountsWonAreCountedPerToken() (gas: 935020)\n[PASS] test_checksAndCapturesByType() (gas: 1018958)\n[PASS] test_countersSaturate() (gas: 33090)\n[PASS] test_enPassantAndPromotion() (gas: 682261)\n[PASS] test_gamesMatesAndThePlayerList() (gas: 1493429)\n[PASS] test_movesByPieceCastlingAndFullStrength() (gas: 1407030)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 11.32ms (9.59ms CPU time)\n\nRan 5 tests for test/Teams.t.sol:TeamsTest\n[PASS] test_aDynamicFeePoolPlaysWithAZeroLpFee() (gas: 1904114)\n[PASS] test_nativeEthIsATeamLikeAnyToken() (gas: 1224021)\n[PASS] test_poolsOnOneHookKeepSeparateGamesAndChests() (gas: 2479138)\n[PASS] test_sliceSide() (gas: 720994)\n[PASS] test_twoPlainTokensCannotDuel() (gas: 437611)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 12.60ms (11.58ms CPU time)\n\nRan 2 tests for test/FactoryLaunch.t.sol:FactoryLaunchTest\n[PASS] test_factoryLaunchWithTokenAboveImd() (gas: 11440064)\n[PASS] test_factoryLaunchWithTokenBelowImd() (gas: 11419485)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 13.39ms (20.53ms CPU time)\n\nRan 8 tests for test/Strength.t.sol:StrengthTest\n[PASS] testFuzz_boundedAndMonotonic(uint256,uint256,uint256) (runs: 256, μ: 9013, ~: 8559)\nLogs:\n  Bound result 115792038972829145952945229761491176564417888942121402522566596492795229017297\n\n[PASS] testFuzz_depthMonotonic(uint256,uint256,uint256) (runs: 256, μ: 11877, ~: 11898)\nLogs:\n  Bound result 1107433633322117093118918204222\n  Bound result 115792089237316195423570985008687907853269984664533130406135466914794216497013\n\n[PASS] testFuzz_shiftKeepsTheShare(uint256,uint256,uint8) (runs: 256, μ: 14556, ~: 13914)\nLogs:\n  Bound result 1\n  Bound result 50264487049470625755247196731288852095724626595150213104608236818826861\n  Bound result 1107433633322117093118918204222\n\n[PASS] testFuzz_tenfoldIsAboutThirtyPoints(uint128,uint128) (runs: 256, μ: 13820, ~: 13708)\nLogs:\n  Bound result 2221339670\n  Bound result 219918980\n\n[PASS] testFuzz_unscalablePaidFollowsTheCurve(uint256,uint256) (runs: 256, μ: 13976, ~: 14210)\nLogs:\n  Bound result 115676297148078879228147414023679219945416714680974923475418126423905216516648\n  Bound result 115676297148078879228147414023679219945416714680974923475418126423907431504382\n\n[PASS] test_decidedPoints() (gas: 13720)\n[PASS] test_hugePaymentsDoNotRevert() (gas: 12835)\n[PASS] test_zeroInputs() (gas: 5289)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 26.01ms (33.97ms CPU time)\n\nRan 5 tests for test/AuditRegression.t.sol:AuditRegressionTest\n[PASS] test_abiHookDataKeepsWalletBidStatsAndMatePayout() (gas: 1654557)\n[PASS] test_closedWindowPreservesNotEnoughGasAndCanBeRetried() (gas: 1803274)\n[PASS] test_emptyHookDataReproducesAcceptedRelayerAttribution() (gas: 1651793)\n[PASS] test_packedHookDataKeepsWalletBidStatsAndMatePayout() (gas: 1654352)\n[PASS] test_starvedFallbackPreservesNotEnoughGas() (gas: 9732906)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 30.51ms (28.67ms CPU time)\n\nRan 7 tests for test/Windows.t.sol:WindowsTest\n[PASS] test_aHash257BlocksBackComesFromHistory() (gas: 1379597)\n[PASS] test_anExpiredMovesWindowIsTheFindingBlock() (gas: 809971)\n[PASS] test_dustAfterTheWindowCanBeAnswered() (gas: 1859162)\n[PASS] test_dustInTheClosingBlockCanBeAnswered() (gas: 1874191)\n[PASS] test_noPreviewBeforeTheClosingBlock() (gas: 749879)\n[PASS] test_onlyALateFirstBidMovesTheWindow() (gas: 768169)\n[PASS] test_theResolvingTradesBidNamesItsHalfMove() (gas: 1223658)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 14.71ms (13.14ms CPU time)\n\nRan 2 tests for test/LaunchAdmission.t.sol:LaunchAdmissionTest\n[PASS] test_blankChainTokenAboveImd() (gas: 20224129)\n[PASS] test_blankChainTokenBelowImd() (gas: 20213889)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 40.28ms (62.24ms CPU time)\n\nRan 14 tests for test/Bidding.t.sol:BiddingTest\n[PASS] test_aBuyOfTheOtherTeamBidsForItsNextMove() (gas: 2302673)\n[PASS] test_aBuyOfTheOtherTeamTimesTheSilentSideOutAndBids() (gas: 1220837)\n[PASS] test_aClosedWindowTakesNoBidsForItsMove() (gas: 1238283)\n[PASS] test_aLateFirstBidOpensAFullWindow() (gas: 1790503)\n[PASS] test_aMateIsPaidFromTheLosersChestInItsToken() (gas: 1589493)\n[PASS] test_aMoveIsOpenForTurnBlocksBlocks() (gas: 1216340)\n[PASS] test_aNewTopMustPayMoreThanTenPercentMore() (gas: 988826)\n[PASS] test_aNextMoveBidCarriesIntoTheNextGame() (gas: 1751624)\n[PASS] test_bidsCountAcrossTheWholeWindow() (gas: 1703229)\n[PASS] test_exactlyTenPercentMoreIsNotEnough() (gas: 989254)\n[PASS] test_theMoveDependsOnlyOnTheWindowsLastBlock() (gas: 1949748)\n[PASS] test_theMoversOwnBuyAfterItsWindowBidsForItsNextMove() (gas: 1251927)\n[PASS] test_theOwnerIsTheHookDataAddressElseTheSigner() (gas: 1846249)\n[PASS] test_thePreviewIsTheMoveThatIsPlayed() (gas: 1485460)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 56.39ms (36.82ms CPU time)\n\nRan 5 tests for test/HookGas.t.sol:HookGasTest\n[PASS] test_aSideDuelsSliceStaysAPlainTrade() (gas: 2225484)\nLogs:\n  side duel trade with its slice: 198280\n\n[PASS] test_hookShareOfAMovingTrade() (gas: 27867148)\nLogs:\n  hook share of a moving trade: average: 280427\n  hook share of a moving trade: max: 291566\n\n[PASS] test_middlegameGas() (gas: 8526507)\nLogs:\n  first bid in a new pool: 260797\n  bidding trade: 203812\n  outbidding trade: 203617\n  plain trade: 194129\n  next block: play the turn and bid: 585327\n\n[PASS] test_openingGas() (gas: 3870102)\nLogs:\n  first bid in a new pool: 260797\n  bidding trade: 204410\n  outbidding trade: 203617\n  plain trade: 194129\n  next block: play the turn and bid: 624966\n\n[PASS] test_runningGameGas() (gas: 47700896)\nLogs:\n  running game, moving trades measured: 42\n  running game, moving trade average: 451639\n  running game, moving trade max: 557656\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 238.04ms (116.71ms CPU time)\n\nRan 5 tests for test/PotStrength.t.sol:PotStrengthTest\n[PASS] test_aDonationWeakensTheTeamsBidsAndRaisesThePrizeForMatingIt() (gas: 3394559)\n[PASS] test_anEmptyPotPlaysAtTheCapUntilItIsAPot() (gas: 4178752)\n[PASS] test_exactOutputStrengthIncludesThePotShare() (gas: 616267)\n[PASS] test_liquidityChangesNothing() (gas: 1669734)\n[PASS] test_strengthIsReadAfterTheMateTheTradePlayed() (gas: 1580288)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 238.21ms (16.01ms CPU time)\n\nRan 3 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_launchPairedWithEth() (gas: 20464305)\n[PASS] test_launchTokenAboveImd() (gas: 22051377)\nLogs:\n  first buy (opens game 0, bids for White): 390904\n\n[PASS] test_launchTokenBelowImd() (gas: 21786067)\nLogs:\n  first buy (opens game 0, bids for White): 357618\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 278.36ms (118.13ms CPU time)\n\nRan 12 tests for test/Hostile.t.sol:HostileTest\n[PASS] test_aCallbackTokenOwnerLeavingADebtCannotFreezeTheDuel() (gas: 4090732)\n[PASS] test_aDeadEngineEndsTheGameAsADrawAndTradingGoesOn() (gas: 2312934)\n[PASS] test_aGasBurningEngineCostsOneExpensiveTradeNotTheGame() (gas: 7405962)\n[PASS] test_aTokenReturningNothingFundsAChest() (gas: 1032369)\n[PASS] test_anEthOwnerCreditingTheHookCannotFreezeTheDuel() (gas: 3176697)\n[PASS] test_anEthOwnerLeavingADebtCannotFreezeTheDuel() (gas: 3021701)\n[PASS] test_anOwnerThatCannotReceiveWithdrawsElsewhere() (gas: 2560365)\n[PASS] test_blockedRecipientStaysOwedAndTradingContinues() (gas: 3067657)\n[PASS] test_brokenEngineFallsBackToALegalMove() (gas: 4095973)\n[PASS] test_feeOnTransferTokenFundsOnlyWhatArrives() (gas: 1578261)\n[PASS] test_reenteringTokenCannotBreakAClaim() (gas: 3695941)\n[PASS] test_starvingTheEngineNeverPlaysTheFallback() (gas: 17054982)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 274.44ms (61.53ms CPU time)\n\nRan 20 tests for test/Staking.t.sol:StakingTest\n[PASS] testFuzz_aRoundTripNeverProfits(uint256,uint256,uint256) (runs: 256, μ: 670457, ~: 671231)\nLogs:\n  Bound result 300000000000000000000\n  Bound result 2158314200\n  Bound result 22349041\n\n[PASS] testFuzz_theReleaseDependsOnlyOnTime(uint256,uint256) (runs: 256, μ: 868993, ~: 871389)\nLogs:\n  Bound result 17575\n  Bound result 287238171\n\n[PASS] test_aDonationNeverMovesTheSharePrice() (gas: 445315)\n[PASS] test_aLoneDustStakeCannotInflateAShare() (gas: 6200220)\n[PASS] test_aStakeGrowsEverySecondWithNothingToClaim() (gas: 2240185)\n[PASS] test_aTopUpJoinsTheReserveWithoutJumpingAStake() (gas: 623567)\n[PASS] test_budgets() (gas: 772887)\n[PASS] test_closedUntilTheDeadStakeAndNothingReleasedBefore() (gas: 570172)\n[PASS] test_previewsMatchWhatHappens() (gas: 940478)\n[PASS] test_releaseScalesThePerSecondRateByRedeemableShares() (gas: 1287398)\n[PASS] test_rewardsFollowTimeStaked() (gas: 686042)\n[PASS] test_sharesSentToDeadSettleThenStopTheRelease() (gas: 545307)\n[PASS] test_stakeForAnotherAndLeaveWithAnApproval() (gas: 590474)\n[PASS] test_stakersShareTheReleaseByTheirShare() (gas: 700039)\n[PASS] test_theDeadStakeIsForever() (gas: 733355)\n[PASS] test_theReleaseDependsOnlyOnTime() (gas: 8454785)\n[PASS] test_theReserveWaitsWhenEveryStakerLeaves() (gas: 571957)\n[PASS] test_theReserveWaitsWhileTheDeadStakeIsAlone() (gas: 510884)\n[PASS] test_theRoundingPumpGoesNowhere() (gas: 25004003)\n[PASS] test_theTokenIsStandard() (gas: 400504)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 299.52ms (331.76ms CPU time)\n\nRan 7 tests for test/StakingAudit.t.sol:StakingAuditTest\n[PASS] testFuzz_allSharesParkedAtDeadStopRelease(uint256,uint256,bool) (runs: 256, μ: 868084, ~: 862932)\nLogs:\n  Bound result 50536291095833714997640877\n  Bound result 28885956\n\n[PASS] testFuzz_releaseIsIndependentOfSettlementFrequency(uint256,uint256,uint256) (runs: 256, μ: 907282, ~: 908261)\nLogs:\n  Bound result 95150213104608236818826861\n  Bound result 83600348\n  Bound result 5061299\n\n[PASS] test_depositsAndMintsToDeadDoNotEnableRelease() (gas: 465421)\n[PASS] test_oneWeiKeptEnablesOnlyADustRelease() (gas: 681536)\n[PASS] test_oneWeiParkedAtDeadCannotDrainTheReserve() (gas: 551140)\n[PASS] test_partialTransferToDeadSettlesBeforeSlowingRelease() (gas: 966085)\n[PASS] test_syncEverySecondCannotAmplifyADustRelease() (gas: 45149451)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 299.50ms (427.55ms CPU time)\n\nRan 8 tests for test/FeeSchedule.t.sol:FeeScheduleTest\n[PASS] testFuzz_exactOutputDeliversTheOrderAndTakesItsFeeOnTop(uint256) (runs: 256, μ: 542354, ~: 542481)\nLogs:\n  Bound result 232797649690009560156\n\n[PASS] test_exactOutputStoppedByItsPriceLimitIsRefused() (gas: 259775)\n[PASS] test_fundChestBeyondBalanceIsRefused() (gas: 121187)\n[PASS] test_fundChestOfZeroAddsNothing() (gas: 97993)\n[PASS] test_fundChestWithTheWrongEthValueIsRefused() (gas: 344437)\n[PASS] test_fundChestWithoutAllowanceIsRefused() (gas: 110843)\n[PASS] test_owedRewardOnlyEverReachesItsOwner() (gas: 1268983)\n[PASS] test_withdrawWithNothingOwedDoesNothing() (gas: 90005)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 299.68ms (298.45ms CPU time)\n\nRan 11 tests for test/FeeRouterAdversarial.t.sol:FeeRouterAdversarialTest\n[PASS] testFuzz_handoverWindowHasExactBoundaries(uint256) (runs: 1000, μ: 534108, ~: 500074)\nLogs:\n  Bound result 353118\n\n[PASS] test_claimFailurePreservesDonationsAndPendingHandover() (gas: 926634)\n[PASS] test_collectUsesBalancesRatherThanFactoryReturnValues() (gas: 635223)\n[PASS] test_constructorAcceptsEitherCurrencyOrderAndActuallySyncs() (gas: 134153)\n[PASS] test_constructorPropagatesSyncFailure() (gas: 18432)\n[PASS] test_constructorRejectsMissingHookAndEitherWrongHookToken() (gas: 27709)\n[PASS] test_lockAtMaturityCancelsHandoverAndCannotBeRepeated() (gas: 1004058)\n[PASS] test_onlyIMDFeesDoNotCallSync() (gas: 256097)\n[PASS] test_secondTokenFailureUnwindsClaimAndFirstForward() (gas: 1010106)\n[PASS] test_setRequesterFailureUnwindsFinalCollectAndProposalClearing() (gas: 1101097)\n[PASS] test_syncFailureUnwindsBothForwardsAndKeepsProposalExecutable() (gas: 1035125)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 323.80ms (324.73ms CPU time)\n\nRan 10 tests for test/StakingAdversarial.t.sol:StakingAdversarialTest\n[PASS] testFuzz_newDonationIsNotBackdatedAcrossIdleTime(uint256,uint256) (runs: 1000, μ: 655619, ~: 657729)\nLogs:\n  Bound result 202473675\n  Bound result 1570202799934170\n\n[PASS] testFuzz_repeatedMintRedeemCyclesNeverCreateProfit(uint256,uint256,uint256) (runs: 1000, μ: 3540689, ~: 3542675)\nLogs:\n  Bound result 9187201950435737471\n  Bound result 3438\n  Bound result 500\n\n[PASS] test_delegatedWithdrawalConsumesSharesNotAssetsAndCannotReplay() (gas: 1091779)\n[PASS] test_exitsCannotExceedOwnerBalanceOrUseAnothersShares() (gas: 819236)\n[PASS] test_failedDepositsAndMintsRollBackSettlementAndTokenAllowance() (gas: 1375002)\n[PASS] test_failedExitToZeroRollsBackBurnAllowanceAndSettlement() (gas: 1024246)\n[PASS] test_fullFixedSupplyCanBeHeldAndReleasedWithoutNarrowing() (gas: 510488)\n[PASS] test_maxUintDepositCannotTruncateIntoAFreeMint() (gas: 479170)\n[PASS] test_mintIsClosedAtOneWeiBelowSeedAndOpensAtExactThreshold() (gas: 754638)\n[PASS] test_zeroOperationsDoNotCreateSharesOrConsumeTheReserve() (gas: 781166)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 324.23ms (600.71ms CPU time)\n\nRan 1 test for test/Predict.t.sol:PredictTest\n[PASS] test_aBotCannotPickItsOwnCapturingMoves() (gas: 252152063)\nLogs:\n  bot moves: 0\n  other moves: 53\n  captures among other moves: 13\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 489.64ms (489.46ms CPU time)\n\nRan 2 tests for test/GasEstimate.t.sol:GasEstimateTest\n[PASS] test_atTheEstimateThePayoutIsRecorded() (gas: 6326804)\nLogs:\n  smallest gas limit that plays and records the mate's payout: 3701048\n\n[PASS] test_noGasLimitPlaysTheMoveWithoutItsPayout() (gas: 974659330)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 675.25ms (685.81ms CPU time)\n\nRan 21 tests for test/MatePot.t.sol:MatePotTest\n[PASS] testFuzz_heldEqualsOwedWithImdAsCurrency1(uint256) (runs: 32, μ: 13177088, ~: 13132968)\n[PASS] test_aDonationDoesNotRaiseTheCap() (gas: 1883900)\n[PASS] test_aDrawPaysNothing() (gas: 1861364)\n[PASS] test_aDustGamePaysNothing() (gas: 2010121)\n[PASS] test_aDustMateEarnsTwiceItsDust() (gas: 2017977)\n[PASS] test_aFeeFreeSwapAfterAFeeInOneUnlockAddsNoInflow() (gas: 2559726)\n[PASS] test_aGameTradedAloneReturnsAtMostItsPotFees() (gas: 2022701)\n[PASS] test_aMateAgainstATeamNobodyBoughtStillPays() (gas: 3694476)\n[PASS] test_aMateAgainstAnEmptyPotPaysNothing() (gas: 1813816)\n[PASS] test_aShortGamePaysTheLosersFeesNotTheResolvingTrades() (gas: 2981382)\n[PASS] test_aThinSideDuelPaysBackAtMostTheAttackersOwnFee() (gas: 2670612)\n[PASS] test_aTimeoutMatePaysNobody() (gas: 2616259)\n[PASS] test_anExpiredHashPlaysThePaidBidForNobody() (gas: 2925806)\n[PASS] test_everySwapShapeRecordsItsPotFee() (gas: 2832299)\n[PASS] test_theLoserPaysWhenImduelIsCurrency0() (gas: 2600254)\n[PASS] test_theLoserPaysWhenImduelIsCurrency1() (gas: 2600793)\n[PASS] test_theManagerOrTheHookOwnsNoBid() (gas: 2354405)\n[PASS] test_thePrizeIsAtMostTheLosersOwnInflow() (gas: 2546191)\n[PASS] test_twoSwapsInOneUnlockKeepTheirInflowApart() (gas: 4588692)\n[PASS] test_twoSwapsInOneUnlockKeepTheirInflowApartReversed() (gas: 4589218)\n[PASS] test_withdrawToRefusesAddressZeroTheHookAndTheManager() (gas: 1407537)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 696.61ms (747.02ms CPU time)\n\nRan 25 tests for test/Game.t.sol:GameTest\n[PASS] testFuzz_swapsNeverRevert(uint256) (runs: 48, μ: 10808419, ~: 10772094)\n[PASS] test_aGamePlaysOutThroughSwaps() (gas: 77324728)\nLogs:\n  moves played: 108\n  bids (incl. outbid ones): 138\n  most gas for a swap: 737149\n\n[PASS] test_aSmallerTradeInTheBlockDoesNotTakeTheTurn() (gas: 692202)\n[PASS] test_aTimeoutTurnCanBeTakenInItsBlock() (gas: 1484871)\n[PASS] test_aTradeBidsForTheTurn() (gas: 505631)\n[PASS] test_aTurnClosesWithItsBlock() (gas: 1146176)\n[PASS] test_anExpiredTurnPlaysItsBidForNobody() (gas: 1583139)\n[PASS] test_anOldTurnIsPlayedWithTheHistoryContractsHash() (gas: 2094806)\n[PASS] test_anyTradeSizeBids() (gas: 2685983)\n[PASS] test_lateTradeStillBidsNormally() (gas: 452508)\n[PASS] test_onlyThePoolManagerAndTheHookCanCallIn() (gas: 122174)\n[PASS] test_ownerDefaultsToTxOrigin() (gas: 438886)\n[PASS] test_playedPositionsEnterTheRepetitionMemory() (gas: 1104251)\n[PASS] test_previewMoveIsReadyInTheClosingBlock() (gas: 721740)\n[PASS] test_previewMoveReadsTheServedHashItself() (gas: 1677587)\n[PASS] test_rejectsBadConfig() (gas: 8818)\n[PASS] test_silentSidePlaysAtZeroStrength() (gas: 1055478)\n[PASS] test_strengthFollowsTheShareOfTheTeamsPot() (gas: 8610230)\n[PASS] test_teamsSwapColoursEveryGame() (gas: 1026940)\n[PASS] test_theBiggestTradeInTheBlockOwnsTheTurn() (gas: 788475)\n[PASS] test_theFirstPoolOpenedIsTheMainDuel() (gas: 179045)\n[PASS] test_theMainDuelMustPairImd() (gas: 312270)\n[PASS] test_theNextBlocksTradePlaysTheTurn() (gas: 1221781)\n[PASS] test_theOtherTeamCannotBidOnThisTurn() (gas: 435166)\n[PASS] test_whoPlaysTheTurnAndWhenDoesNotChangeTheMove() (gas: 1874217)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 876.72ms (1.05s CPU time)\n\nRan 20 tests for test/Money.t.sol:MoneyTest\n[PASS] testFuzz_heldEqualsOwed(uint256) (runs: 48, μ: 11863195, ~: 11866035)\n[PASS] test_aBuyFeedsBothPotsAndBurnsTheSlice() (gas: 421634)\n[PASS] test_aFullChestTakesNoMore() (gas: 1100726)\n[PASS] test_aMateForNobodyPaysNobody() (gas: 515104)\n[PASS] test_aTradeStoppedByItsPriceLimitIsRefused() (gas: 557098)\n[PASS] test_capturesAndChecksPayNothing() (gas: 507482)\n[PASS] test_everyTradeEmitsHookSwapWithTheHookFee() (gas: 556213)\n[PASS] test_everyTradeFeedsBothPots() (gas: 2154397)\n[PASS] test_exactOutputSlicesTheInput() (gas: 541596)\n[PASS] test_exactOutputWithTheFeeInTheOutput() (gas: 393823)\n[PASS] test_feesCannotBeWithdrawnByAnyone() (gas: 536437)\n[PASS] test_fundChestNeedsTheRightValue() (gas: 48679)\n[PASS] test_fundChestOnlyForHookPools() (gas: 41774)\n[PASS] test_fundChestWithEth() (gas: 252841)\n[PASS] test_fundChestWithTokens() (gas: 255519)\n[PASS] test_mateTakesAQuarterOfTheLosersPot() (gas: 895609)\n[PASS] test_quietMovesPayNothing() (gas: 458996)\n[PASS] test_rewardsAreClaimedNeverPushed() (gas: 1359511)\n[PASS] test_theMateIsCappedAtTwiceWhatItsTradePaid() (gas: 773155)\n[PASS] test_theMateIsCountedForItsOwner() (gas: 636338)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 942.27ms (950.99ms CPU time)\n\nRan 1 test for test/Invariant.t.sol:InvariantTest\n[PASS]\nInvariantTest invariants:\n[PASS] invariant_boardHasBothKingsAndPlyIsBounded\n[PASS] invariant_heldEqualsOwed\n InvariantTest invariants (runs: 24, calls: 2400, reverts: 0)\n\n╭----------+----------------+-------+---------+----------╮\n| Contract | Selector       | Calls | Reverts | Discards |\n+========================================================+\n| Handler  | burn           | 298   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | fund           | 243   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | idle           | 252   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | longPause      | 271   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | nextBlock      | 224   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | trade          | 288   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | tradeAgain     | 310   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | tradeNextBlock | 268   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | withdrawReward | 246   | 0       | 0        |\n╰----------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 19999999000000002828\n  Bound result 19243497235015328446\n  Bound result 9259542123273814144\n  Bound result 7\n  Bound result 19999999999999999997\n  Bound result 16972334615231887134\n  Bound result 1200000000000000000\n  Bound result 40\n  Bound result 19999999000000009955\n  Bound result 13023133213298788803\n  Bound result 19999999000000001000\n  Bound result 19999999000000020783\n  Bound result 5828\n  Bound result 19999999000000000834\n  Bound result 1200000000000000000\n  Bound result 19999999000000000161\n  Bound result 19999999000000100000\n  Bound result 10822\n  Bound result 4323722779903916992\n  Bound result 19999999000000100001\n  Bound result 60877149671602\n  Bound result 19999999000000023152\n  Bound result 19999999000000057006\n  Bound result 9223372036854775809\n  Bound result 19999999000000001021\n  Bound result 19\n  Bound result 19999999000000000161\n  Bound result 10000000\n  Bound result 60\n  Bound result 19999999000000000256\n  Bound result 19999999000000000096\n  Bound result 9881315612531857779\n  Bound result 120\n  Bound result 19999999000000007080\n  Bound result 19999999000000002155\n  Bound result 19999999000000000226\n  Bound result 19999999000000000521\n  Bound result 19999999000000012691\n  Bound result 604800\n  Bound result 19999999000000006458\n  Bound result 17734\n  Bound result 14175\n  Bound result 34353926883621670997\n  Bound result 2000000000000000\n  Bound result 85\n  swaps: 31\n  moves: 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.16s (1.16s CPU time)\n\nRan 3 tests for test/TokenInvariant.t.sol:TokenInvariantTest\n[PASS]\nTokenInvariantTest invariants:\n[PASS] invariant_allowancesAreExactlyWhatWasApprovedLessWhatWasSpent\n[PASS] invariant_supplyIsFixedAndHeldByTheActors\n TokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------------+-------+---------+----------╮\n| Contract     | Selector           | Calls | Reverts | Discards |\n+================================================================+\n| TokenHandler | approve            | 2047  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | approveZeroSpender | 2039  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | transfer           | 2067  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | transferFrom       | 2039  | 0       | 0        |\n╰--------------+--------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 524\n  Bound result 2\n  Bound result 10\n  Bound result 4\n  Bound result 6\n  Bound result 110000\n  Bound result 9\n  Bound result 2011\n  Bound result 3\n  Bound result 1000000\n  Bound result 518400\n  Bound result 5\n  Bound result 146344160017450924443285242\n  Bound result 3\n  Bound result 100000000\n  Bound result 2711\n  Bound result 4967\n  Bound result 5\n  Bound result 4642\n  Bound result 10\n  Bound result 7\n  Bound result 10\n  Bound result 5968\n  Bound result 9241421688590303745\n  Bound result 10000000000000000000\n  Bound result 5\n  Bound result 8\n  Bound result 900000000000000000000000\n  Bound result 4\n  Bound result 732\n  Bound result 2026\n  Bound result 89212248533955825867007555\n  Bound result 1374396088320\n  Bound result 242\n  Bound result 18\n\n[PASS] testFuzz_transferOfMoreThanTheBalanceIsRefused(uint256) (runs: 512, μ: 55903, ~: 55857)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639933\n\n[PASS] test_transferFromTheZeroAddressIsRefused() (gas: 82118)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.55s (2.85s CPU time)\n\nRan 1 test for test/InvariantDuels.t.sol:InvariantDuelsTest\n[PASS]\nInvariantDuelsTest invariants:\n[PASS] invariant_everyBoardIsSound\n[PASS] invariant_everyCurrencyBalances\n[PASS] invariant_rightsMatchTheBoard\n[PASS] invariant_turnsAreWellFormed\n InvariantDuelsTest invariants (runs: 24, calls: 2880, reverts: 0)\n\n╭--------------+-------------------+-------+---------+----------╮\n| Contract     | Selector          | Calls | Reverts | Discards |\n+===============================================================+\n| DuelsHandler | addLiquidity      | 198   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | burn              | 194   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | fund              | 198   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | longPause         | 204   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | nextBlock         | 197   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | pushThenNextBlock | 225   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | queueMate         | 211   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | removeLiquidity   | 177   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | roundTrip         | 211   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | setMates          | 235   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | trade             | 219   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | tradeAgain        | 194   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | tradeNextBlock    | 215   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | withdrawReward    | 202   | 0       | 0        |\n╰--------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 47\n  Bound result 9806\n  Bound result 19999999999000021922\n  Bound result 26\n  Bound result 180000000001517015004\n  Bound result 12\n  Bound result 19999999999000016948\n  Bound result 149999999850000\n  Bound result 19999999999000000061\n  Bound result 19999999999087312192\n  Bound result 108000\n  Bound result 11037\n  Bound result 22183872506835070987\n  Bound result 180000000000000016227\n  Bound result 12\n  Bound result 19999999999000010397\n  Bound result 10042500000000000000\n  Bound result 12\n  Bound result 49999999950000\n  Bound result 12\n  Bound result 19999999999000000258\n  Bound result 1991521851\n  Bound result 431670093970\n  Bound result 16764\n  Bound result 180000000000000001177\n  Bound result 12\n  Bound result 49\n  Bound result 3333000000000000000007\n  Bound result 68231212637871061457\n  Bound result 12\n  Bound result 995750000000000000\n  Bound result 3332999000000000000808\n  Bound result 19999999999000016047\n  Bound result 120\n  Bound result 4999999999000008922\n  Bound result 54\n  Bound result 4999999999000003810\n  Bound result 1000000000000002\n  Bound result 650000000000000000000\n  Bound result 64000000000000000\n  Bound result 180000000000000001667\n  Bound result 12\n  Bound result 9999999000000000011605\n  Bound result 9199909298401084549277\n  Bound result 19999999999000007599\n  Bound result 106\n  Bound result 106692\n  Bound result 3406\n  Bound result 4500000\n  Bound result 184200\n  Bound result 9999999000000000002401\n  Bound result 12\n  Bound result 268209726905697\n  Bound result 12\n  Bound result 11000000000000000000\n  Bound result 180000000000000004001\n  Bound result 12\n  Bound result 9999998000000000010684\n  Bound result 180000000000016711681\n  Bound result 12\n  Bound result 930261851801744479140\n  Bound result 19999999999000000049\n  Bound result 180000000000000014335\n  Bound result 12\n  Bound result 74\n  Bound result 9999999000000257633819\n  Bound result 18690713955923036477\n  Bound result 999999999991717\n  Bound result 49000000000000000000\n  Bound result 16\n  Bound result 9999999000000034560001\n  Bound result 180000000000000001332\n  Bound result 12\n  Bound result 12\n  Bound result 10000000000000000\n  Bound result 12\n  Bound result 19999999999000065537\n  Bound result 9999999000000000007358\n  Bound result 9999999000000093527403\n  Bound result 19999999999000000049\n  Bound result 12\n  Bound result 19999999999000259200\n  Bound result 3090376478590152956681\n  Bound result 1000000002\n  Bound result 12500000000000000000\n  Bound result 46\n  Bound result 32500199999999800\n  Bound result 12\n  Bound result 19999999999000004079\n  Bound result 19999999999003347621\n  Bound result 49569384140159271248\n  Bound result 12\n  Bound result 12\n  Bound result 4652870257451440200\n  Bound result 3726675121760317481\n  Bound result 189000000000000000001\n  Bound result 12\n  Bound result 19999999999000003922\n  Bound result 78\n  Bound result 111232027869618472965\n  Bound result 12\n  Bound result 19999999999000007352\n  swaps: 39\n  moves: 16\n  mates paid: 4\n  Bound result 12\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.69s (3.68s CPU time)\n\nRan 2 tests for test/FeeRouterSequenceInvariant.t.sol:FeeRouterSequenceInvariantTest\n[PASS]\nFeeRouterSequenceInvariantTest invariants:\n[PASS] invariant_everyFeeHasExactlyOneDestination\n[PASS] invariant_governanceMatchesIndependentStateMachine\n[PASS] invariant_vaultCashFlowAndShareBacking\n FeeRouterSequenceInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------------------+----------------+-------+---------+----------╮\n| Contract                 | Selector       | Calls | Reverts | Discards |\n+========================================================================+\n| FeeRouterSequenceHandler | accrue         | 2261  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | collect        | 2381  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | directClaim    | 2287  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | donate         | 2360  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | elapse         | 2385  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | exit           | 2334  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | handOn         | 2335  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | lock           | 2304  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | moveShares     | 2361  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | noticeBoundary | 2401  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | propose        | 2336  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | roundTrip      | 2269  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | stake          | 2338  | 0       | 0        |\n|--------------------------+----------------+-------+---------+----------|\n| FeeRouterSequenceHandler | sync           | 2416  | 0       | 0        |\n╰--------------------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3593\n  Bound result 232\n  Bound result 6503\n  Bound result 222924\n  Bound result 200000\n  Bound result 12485\n  Bound result 256\n  Bound result 0\n  Bound result 0\n  Bound result 12714\n  Bound result 18008\n  Bound result 7\n  Bound result 3333000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 259200\n  Bound result 19334\n  Bound result 10581\n  Bound result 10723151780598845931\n  Bound result 20000000000000000\n  Bound result 239593\n  Bound result 2276\n  Bound result 4096\n  Bound result 676329063\n  Bound result 3239\n  Bound result 257\n  Bound result 3333000000000000000007\n  Bound result 201\n  Bound result 912332610290949274610279\n  Bound result 398364706325079185847122\n  Bound result 999999999\n  Bound result 99999999999999999800\n  Bound result 4660\n  Bound result 12\n  Bound result 3250000000000000\n  Bound result 600\n  Bound result 140\n  Bound result 14907\n  Bound result 263004\n  Bound result 3333020000000000041305\n  Bound result 3000\n  Bound result 24000\n  Bound result 903\n  Bound result 1048\n  Bound result 40\n  Bound result 9491\n  Bound result 974761295544615863872\n  Bound result 14186\n  Bound result 448150359\n  Bound result 943668479\n  Bound result 2671595114\n  Bound result 842909337886539237088158\n  Bound result 966129580514989297207243\n  Bound result 17096\n  Bound result 1762000000\n  Bound result 2400\n  Bound result 2232\n  Bound result 42829375770483949065104664\n  Bound result 66000000000000000\n  Bound result 628696\n  Bound result 64000000000000000\n  Bound result 35366530904468895187187811\n  Bound result 161\n  Bound result 13\n  Bound result 999999999999999999999701\n  Bound result 117456674\n  Bound result 6\n  Bound result 500000000000000000009\n  Bound result 1991500000000000000\n  Bound result 13323\n  Bound result 128\n  Bound result 13049\n  Bound result 640000\n  Bound result 1283115\n  Bound result 17175\n  Bound result 243\n  Bound result 95000\n  Bound result 18374403900871474942\n  Bound result 14497\n  Bound result 22845013651939938031178242\n  Bound result 333684817478632979768228\n  Bound result 9223372036854775808000\n  Bound result 9175\n  Bound result 568552490192575703546835\n  Bound result 11670\n\n[PASS] test_handlerTraversesHandoverFailureLockAndCollection() (gas: 3375340)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 5000000000000000000\n  Bound result 3000000000000000000\n  Bound result 2000000000000000000\n  Bound result 2000000000000000000\n  Bound result 7000000000000000000\n  Bound result 4000000000000000000\n  Bound result 2000000000000000000\n  Bound result 1000000000000000000\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.86s (10.86s CPU time)\n\nRan 1 test for test/Staking.t.sol:StakingInvariantTest\n[PASS]\nStakingInvariantTest invariants:\n[PASS] invariant_everyWeiIsAccountedFor\n[PASS] invariant_everyoneCanLeave\n[PASS] invariant_theDeadStakeNeverLeaves\n StakingInvariantTest invariants (runs: 256, calls: 128000, reverts: 0)\n\n╭----------------+----------+-------+---------+----------╮\n| Contract       | Selector | Calls | Reverts | Discards |\n+========================================================+\n| StakingHandler | deposit  | 18298 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | mint     | 18042 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | move     | 18380 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | redeem   | 18476 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | topUp    | 18037 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | wait     | 18412 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | withdraw | 18355 | 0       | 0        |\n╰----------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 20\n  Bound result 7974\n  Bound result 5894\n  Bound result 3483\n  Bound result 48368785828613788855022709\n  Bound result 172800\n  Bound result 4695\n  Bound result 2330\n  Bound result 1889\n  Bound result 250000000000000000\n  Bound result 257\n  Bound result 903\n  Bound result 47296001\n  Bound result 1445\n  Bound result 86\n  Bound result 3\n  Bound result 5453\n  Bound result 10141095814987537631220328\n  Bound result 406\n  Bound result 39202030\n  Bound result 119009\n  Bound result 17\n  Bound result 7254\n  Bound result 98842190\n  Bound result 1234000000000000000001\n  Bound result 6\n  Bound result 2954110473\n  Bound result 7161\n  Bound result 11000000000000000001\n  Bound result 27611945679747730228426753\n  Bound result 13558855218379321113093912\n  Bound result 7036\n  Bound result 984\n  Bound result 16432212701708995310611464\n  Bound result 65\n  Bound result 444346957142850972847\n  Bound result 6749523140544591319031543\n  Bound result 7341\n  Bound result 748655851534919868565\n  Bound result 243\n  Bound result 367\n  Bound result 23015347550238460405824529\n  Bound result 5549\n  Bound result 3322\n  Bound result 3121116753\n  Bound result 412\n  Bound result 48368785578613788855022709\n  Bound result 3857\n  Bound result 604800\n  Bound result 5939882\n  Bound result 1073\n  Bound result 101\n  Bound result 7001\n  Bound result 500000000000000000009\n  Bound result 6735\n  Bound result 6000000\n  Bound result 11400714819323198485\n  Bound result 5466961865636769445705647\n  Bound result 11000000000000000001\n  Bound result 7254\n  Bound result 184200\n  Bound result 1721321966\n  Bound result 1058080654\n  Bound result 650000000000000000000\n  Bound result 315360000\n  Bound result 102053642\n  Bound result 110\n  Bound result 7383\n  Bound result 71343452\n  Bound result 100000000000000000000000\n  Bound result 100000000000000000\n  Bound result 5832\n  Bound result 6360118960240004695349735\n  Bound result 1932025222230975319652874\n  Bound result 1048\n  Bound result 2134284027740247372\n  Bound result 11377220528122394235379985\n  Bound result 8150199782605610738200144\n  Bound result 5779\n  Bound result 300\n  Bound result 127216174092927879267794\n  Bound result 1000000000\n  Bound result 152\n  Bound result 11388822505455152356434256\n  Bound result 99000000000000000000\n  Bound result 2055550465\n  Bound result 40156256537128670298562739\n  Bound result 8778941884898\n  Bound result 2200\n  Bound result 3465988982\n  Bound result 2\n  Bound result 121024001\n  Bound result 7000000000000000000\n  Bound result 2026\n  Bound result 100000000000000000\n  Bound result 7911008\n  Bound result 1400509592202746637230424\n  Bound result 32574284379053354430298734\n  Bound result 86400\n  Bound result 51966\n  Bound result 15\n  Bound result 4729\n  Bound result 17728062829125424572193752\n  Bound result 903\n  Bound result 5028\n  Bound result 5458093\n  Bound result 11573303165662440772\n  Bound result 294082439904085661770161\n  Bound result 500000000000000000009\n  Bound result 72340172838076673\n  Bound result 151340570438187785209863393\n  Bound result 846\n  Bound result 22025368893603737977780288\n  Bound result 2063\n  Bound result 16\n  Bound result 0\n  Bound result 4617\n  Bound result 1425452469633721206476935\n  Bound result 16\n  Bound result 0\n  Bound result 3884012931725512607932106\n  Bound result 13271426434134403649889866\n  Bound result 4676\n  Bound result 1535\n  Bound result 6318\n  Bound result 65425485125821292829413\n  Bound result 139183866992643728141629736\n  Bound result 184200\n  Bound result 30601247248375510073032725\n  Bound result 0\n  Bound result 65536\n  Bound result 6468313767443503928481493\n  Bound result 3061\n  Bound result 1725540769\n  Bound result 2943681969076762938450381\n  Bound result 162\n  Bound result 4095\n  Bound result 2644\n  Bound result 115904000\n  Bound result 3000\n  Bound result 99\n  Bound result 26270947880257241731983060\n  Bound result 5\n  Bound result 1000000\n  Bound result 1206\n  Bound result 887270\n  Bound result 2886\n  Bound result 12848703\n  Bound result 46635230888100063359197765\n  Bound result 1850\n  Bound result 1148362959\n  Bound result 36089947978279137387356841\n  Bound result 4384\n  Bound result 56\n  Bound result 1001\n  Bound result 0\n  Bound result 2145752327149\n  Bound result 839078240\n  Bound result 230000\n  Bound result 74208216\n  Bound result 21326159367973727866921629\n  Bound result 3139\n  Bound result 311580913\n  Bound result 1762013887\n  Bound result 64\n  Bound result 1778072138685148303645732\n  Bound result 1206527\n  Bound result 2119260631655404956826137\n  Bound result 108\n  Bound result 6553600\n  Bound result 422805633404757413655498\n  Bound result 93670103800860445197297962\n  Bound result 300000000000000000000\n  Bound result 1542\n  Bound result 1001\n  Bound result 4444\n  Bound result 14790518332513497327824332\n  Bound result 242\n  Bound result 24999999999999999999\n  Bound result 365\n  Bound result 3641014141\n  Bound result 68021770\n  Bound result 2349\n  Bound result 5488732379694866478954594\n  Bound result 7320310927\n  Bound result 60\n  Bound result 50732159387085665005096920\n  Bound result 7299\n  Bound result 6152\n  Bound result 172727630\n  Bound result 99999\n  Bound result 20000000000000000000000000\n  Bound result 7998454281639739315694792\n  Bound result 161\n  Bound result 10000000000\n  Bound result 4938541413\n  Bound result 5462\n  Bound result 3398525580427377127534858\n  Bound result 2337518774\n  Bound result 14\n  Bound result 518401\n  Bound result 33322120592613406236729752\n  Bound result 48617602\n  Bound result 119173666\n  Bound result 234\n  Bound result 86400\n  Bound result 10000000000000000000000\n  Bound result 7439\n  Bound result 4095\n  Bound result 452072778\n  Bound result 12\n  Bound result 1232520809\n  Bound result 1345\n  Bound result 19892534803689267085047937\n  Bound result 6912097367777845289315885\n  Bound result 554\n  Bound result 253\n  Bound result 24999999999999999999\n  Bound result 2296071426128861288739188\n  Bound result 3239\n  Bound result 3\n  Bound result 7400021373434246710774585\n  Bound result 29441140279113877193239906\n  Bound result 39232000\n  Bound result 259199\n  Bound result 943668479\n  Bound result 3033\n  Bound result 99999\n  Bound result 0\n  Bound result 659918\n  Bound result 4041\n  Bound result 15594\n  Bound result 3162\n  Bound result 732575113000228858694040\n  Bound result 98779198\n  Bound result 11762448\n  Bound result 105233767547917095105645170\n  Bound result 9765336520804710531039852\n  Bound result 414\n  Bound result 103000000000000000000\n  Bound result 131072\n  Bound result 9\n  Bound result 2954110473\n  Bound result 5460\n  Bound result 91\n  Bound result 723402294991435675110820\n  Bound result 18332529189056774748797217\n  Bound result 12432535283521755328198567\n  Bound result 103000000000000000000\n  Bound result 81712195\n  Bound result 500\n  Bound result 161839388625410563993897700\n  Bound result 76675335\n  Bound result 3623353410386795578754970\n  Bound result 156\n  Bound result 59892855\n  Bound result 3593\n  Bound result 3305646003434254916795317\n  Bound result 34560000\n  Bound result 2000000\n  Bound result 3000\n  Bound result 7767579036881577595061317\n  Bound result 560\n  Bound result 120\n  Bound result 34\n  Bound result 31\n  Bound result 47845768\n  Bound result 12348608218535453605502424\n  Bound result 100000\n  Bound result 4095\n  Bound result 4096\n  Bound result 16607126709928542286122765\n  Bound result 6553600\n  Bound result 61094162\n  Bound result 3151\n  Bound result 60\n  Bound result 100\n  Bound result 52\n  Bound result 5297183996320542378621296\n  Bound result 61396488168560641629553923\n  Bound result 106176000\n  Bound result 3593\n  Bound result 64000000000000000\n  Bound result 6018242591114592144374338\n  Bound result 56137588\n  Bound result 1993\n  Bound result 2845\n  Bound result 62219488964190293681597633\n  Bound result 1001\n  Bound result 160\n  Bound result 370568087249198700777992\n  Bound result 7568586508871628864759211\n  Bound result 4533141851530563489\n  Bound result 65000000000000000000\n  Bound result 1403\n  Bound result 10000000000000000000\n  Bound result 120896000\n  Bound result 96397370\n  Bound result 3059\n  Bound result 933857162850941835904976\n  Bound result 42880271060163283133080868\n  Bound result 12\n  Bound result 1000000\n  Bound result 11088134184660229775170890\n  Bound result 9000817696675212021915787\n  Bound result 439701284489474685\n  Bound result 136230569593508119407838057\n  Bound result 7000000000000000003\n  Bound result 163\n  Bound result 302\n  Bound result 1000001\n  Bound result 29047854529380522687911244\n  Bound result 659918\n  Bound result 5354080190645277919131733\n  Bound result 6247745128585438172460872\n  Bound result 6815\n  Bound result 5465\n  Bound result 9259542123273814144\n  Bound result 3925232985393876635177097\n  Bound result 57694\n  Bound result 91328471\n  Bound result 4196\n  Bound result 589882477278893523002015\n  Bound result 401370600806690349535315\n  Bound result 7500\n  Bound result 5545247504364598647014231\n  Bound result 13587406466407023704161521\n  Bound result 18\n  Bound result 3250771781921877252940313\n  Bound result 108179643285929620494456314\n  Bound result 9225042079113799417469483\n  Bound result 11020480658702040653580129\n  Bound result 5830991744787265367076444\n  Bound result 52\n  Bound result 10141106814987535182924694\n  Bound result 10000000000000000\n  Bound result 500000000000000000\n  Bound result 200\n  Bound result 200\n  Bound result 8356618608228962120750956\n  Bound result 500\n  Bound result 13694791151112215529807809\n  Bound result 538\n  Bound result 136\n  Bound result 10141095814987535182924629\n  Bound result 96\n  Bound result 51966\n  Bound result 6564\n  Bound result 15267204751844545661547028\n  Bound result 2203698794507378827087020\n  Bound result 1800\n  Bound result 26871588494465197043201739\n  Bound result 4265\n  Bound result 78536545679350294039608\n  Bound result 17351639325248830006043768\n  Bound result 3249\n  Bound result 70\n  Bound result 100000000\n  Bound result 10042500000000000000\n  Bound result 76\n  Bound result 6435677988389263464834119\n  Bound result 6269400624278056933471790\n  Bound result 500000000000000000009\n  Bound result 6000\n  Bound result 9241421688590303745\n  Bound result 39857445220939771187447896\n  Bound result 11200000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 1284\n  Bound result 0\n  Bound result 8525373\n  Bound result 315360000\n  Bound result 2147483648\n  Bound result 19091079244030378780853335\n  Bound result 3908\n  Bound result 1001\n  Bound result 4066855137\n  Bound result 15291347339926880777755966\n  Bound result 14163322741980080031138918\n  Bound result 1242190791346924115589677\n  Bound result 554557578246331627917509\n  Bound result 65270091\n  Bound result 0\n  Bound result 1047360651754003724379473\n  Bound result 1392794257718990832493794\n  Bound result 1120\n  Bound result 108079643285929620494456315\n  Bound result 84442493013196800\n  Bound result 217913356860818310985442047\n  Bound result 1470\n  Bound result 5152\n  Bound result 3583\n  Bound result 13787848793156543929\n  Bound result 6693\n  Bound result 262\n  Bound result 2200\n  Bound result 4642610588331760864122092\n  Bound result 99999\n  Bound result 3121410705184629673388502\n  Bound result 290440985851519444499572\n  Bound result 15956754953501049209944495\n  Bound result 500000000000000000000\n  Bound result 40\n  Bound result 10000000000000000000\n  Bound result 4353\n  Bound result 4059\n  Bound result 0\n  Bound result 55847213553204670369953254\n  Bound result 252624396645131046\n  Bound result 1889567282\n  Bound result 108\n  Bound result 13653797\n  Bound result 1608\n  Bound result 168\n  Bound result 61608403001796177797870089\n  Bound result 943668479\n  Bound result 4695\n  Bound result 604800\n  Bound result 11400714819323198485\n  Bound result 163\n  Bound result 106692\n  Bound result 27330\n  Bound result 255\n  Bound result 152\n  Bound result 36739030670699853492476425\n  Bound result 1331\n  Bound result 1782071820927728067045634\n  Bound result 1407\n  Bound result 10047167399563699593354653\n  Bound result 5582\n  Bound result 11631523\n  Bound result 1000000\n  Bound result 3406638885345556004319356\n  Bound result 91\n  Bound result 4646072018485955061088966\n  Bound result 4480\n  Bound result 411590547854074501227318\n  Bound result 168\n  Bound result 6574639025696993483520002\n  Bound result 7000000000000000003\n  Bound result 4821173102409768943194434\n  Bound result 2508\n  Bound result 15855175389081776219789401\n  Bound result 2403363093782861392507453\n  Bound result 289193204919136483769732\n  Bound result 8040612939397731342735051\n  Bound result 557715508766019808546448\n  Bound result 2\n  Bound result 2702671635706132397071994\n  Bound result 1412324483835698123586222\n  Bound result 11727949551800471015182048\n  Bound result 1\n  Bound result 13130285138573912479532388\n  Bound result 370369163402562416921\n  Bound result 2\n  Bound result 125120000\n  Bound result 35842237\n  Bound result 52\n  Bound result 5657\n  Bound result 0\n  Bound result 16711680\n  Bound result 11000000000000000001\n  Bound result 242\n  Bound result 4078\n  Bound result 415983569057398917142179\n  Bound result 1800\n  Bound result 16\n  Bound result 45757696448258027109001882\n  Bound result 367\n  Bound result 280919288288787708172928\n  Bound result 16711680\n  Bound result 0\n  Bound result 1528689981735646846237131\n  Bound result 355088973\n  Bound result 1696404998250658054971600\n  Bound result 48472844001350056129907\n  Bound result 178\n  Bound result 364177131090952828414425\n  Bound result 10122099112010538373525137\n  Bound result 2000000000000000000000000\n  Bound result 4892\n  Bound result 500\n  Bound result 77326336\n  Bound result 6088368056518568466600\n  Bound result 165161\n  Bound result 224\n  Bound result 1009\n  Bound result 900000000000000000000\n  Bound result 1946172808965368995359763\n  Bound result 13126347723773999879979\n  Bound result 4503036547374320255824344\n  Bound result 5101349\n  Bound result 29675461\n  Bound result 27\n  Bound result 2311626297631230553777534\n  Bound result 2400\n  Bound result 1577\n  Bound result 1110\n  Bound result 28734929843403607424879\n  Bound result 56\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 45.70s (45.69s CPU time)\n\nRan 35 test suites in 45.70s (70.45s CPU time): 255 tests passed, 0 failed, 1 skipped (256 total tests)\n","passed":true},{"durationMs":249,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IMDuelFeeRouter.collect()\",\"IMDuelFeeRouter.handOn()\",\"IMDuelFeeRouter.lock()\",\"IMDuelFeeRouter.propose(address)\",\"IMDuelHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"IMDuelHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"IMDuelHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"IMDuelHook.fundChest((address,address,uint24,int24,address),bool,uint256)\",\"IMDuelHook.unlockCallback(bytes)\",\"IMDuelHook.withdraw(address,address)\",\"IMDuelHook.withdrawTo(address,address)\",\"IMDuelStaking.approve(address,uint256)\",\"IMDuelStaking.deposit(uint256,address)\",\"IMDuelStaking.mint(uint256,address)\",\"IMDuelStaking.redeem(uint256,address,address)\",\"IMDuelStaking.sync()\",\"IMDuelStaking.transfer(address,uint256)\",\"IMDuelStaking.transferFrom(address,address,uint256)\",\"IMDuelStaking.withdraw(uint256,address,address)\",\"IMDuelToken.approve(address,uint256)\",\"IMDuelToken.transfer(address,uint256)\",\"IMDuelToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"ADAPTATION.md\":138,\"LICENSE\":16,\"dist/_headers\":8,\"dist/apple-touch-icon.png\":9,\"dist/art/hero-swarm.webp\":720,\"dist/assets/C122-DvQn1nGk.mp3\":10635,\"dist/assets/CC123-MfPBydK1.mp3\":6147,\"dist/assets/CC124-rKIjYKsi.mp3\":9221,\"dist/assets/CC125-62JaqcM-.mp3\":7903,\"dist/assets/CC126-cankUb9F.mp3\":6392,\"dist/assets/badge-BO83mXN3.js\":1,\"dist/assets/badge-Bri6MgGm.css\":1,\"dist/assets/ccip-BpUXKLfR.js\":1,\"dist/assets/chessboard-CMOAfHUO.css\":1,\"dist/assets/chessboard-DSUJf5m3.js\":1,\"dist/assets/controls-B-yWk6PN.css\":1,\"dist/assets/controls-BHCuqmWb.js\":3,\"dist/assets/create-CrtTR5E9.js\":13,\"dist/assets/create-i8p4obVz.css\":1,\"dist/assets/discovery-DfqpzOGG.js\":12,\"dist/assets/docs-DnTmEmVC.js\":557,\"dist/assets/docs-dgxECQPm.css\":1,\"dist/assets/duel-7MeZCWuf.css\":1,\"dist/assets/duel-BloOLRx6.js\":78,\"dist/assets/duel-table-D9x9DZZV.css\":1,\"dist/assets/duel-table-HK0-2Ng4.js\":11,\"dist/assets/duels-B86ITlW_.js\":6,\"dist/assets/duels-n_aKJ4sI.css\":1,\"dist/assets/feed-DRE1eB8o.js\":25,\"dist/assets/feed-Ddh1LJ-u.css\":1,\"dist/assets/history/1-0xbb45eacf50b4bd8ce31e0620e14ff6e6b6375d56fce4372d3046f4a02faeae65-0-b0c26ccc.json\":1,\"dist/assets/home-B5GybLE4.js\":21,\"dist/assets/home-WrMuib77.css\":1,\"dist/assets/index-CEu3j7Ex.js\":62,\"dist/assets/index-aqUhpJbX.css\":1,\"dist/assets/localBatchGatewayRequest-DC5ZfVVU.js\":30,\"dist/assets/missing-BmTc_RzT.js\":1,\"dist/assets/overview-BsjhZYfN.css\":1,\"dist/assets/page-title-BT5kD_nh.js\":1,\"dist/assets/page-title-ncHp25r9.css\":1,\"dist/assets/players-CxiYjahr.css\":1,\"dist/assets/players-D2S5yaf4.js\":7,\"dist/assets/profile-17hHaRGP.js\":19,\"dist/assets/profile-Ctzz0eK6.css\":1,\"dist/assets/secp256k1-DS-XoEp3.js\":1,\"dist/assets/skeleton-By2p64Po.css\":1,\"dist/assets/skeleton-DfYj0nFe.js\":1,\"dist/assets/spendable-DZbWvh1P.css\":1,\"dist/assets/spendable-DaF_IlYB.js\":5,\"dist/assets/token-icon-D02jiyaf.js\":1,\"dist/assets/token-icon-qRBAAVr_.css\":1,\"dist/assets/utils-Bpv4vmSW.js\":1,\"dist/assets/who-BToGNiZS.css\":1,\"dist/assets/who-CEyB5pkF.js\":5,\"dist/deploy.json\":44,\"dist/docs/llms.txt\":245,\"dist/favicon.ico\":20,\"dist/favicon.svg\":1,\"dist/fonts/michroma.woff2\":67,\"dist/fonts/plex-mono-400.woff2\":58,\"dist/fonts/plex-mono-500.woff2\":62,\"dist/fonts/plex-sans-400.woff2\":85,\"dist/fonts/plex-sans-500.woff2\":91,\"dist/history/1-0xa92f72dcdd90229c32f6d51229f4cc5c916410cc.json\":1,\"dist/history/1-0xbb45eacf50b4bd8ce31e0620e14ff6e6b6375d56fce4372d3046f4a02faeae65.json\":1,\"dist/icon-192.png\":15,\"dist/icon-512.png\":33,\"dist/index.html\":43,\"dist/og.png\":56,\"dist/site.webmanifest\":13,\"foundry.toml\":29,\"launch.json\":24,\"launch/engine.json\":10,\"launch/hook.json\":34,\"launch/hook.sepolia.json\":34,\"launch/staking.json\":19,\"script/LaunchPolicy.sol\":43,\"src/Bitboard.sol\":719,\"src/Chess.sol\":35,\"src/ChessEngineV5.sol\":852,\"src/IChessEngine.sol\":29,\"src/IMDuelFeeRouter.sol\":138,\"src/IMDuelHook.sol\":858,\"src/IMDuelStaking.sol\":120,\"src/IMDuelToken.sol\":62,\"src/Rules.sol\":45,\"src/Strength.sol\":46,\"test/AuditRegression.t.sol\":192,\"test/Base.sol\":223,\"test/Bidding.t.sol\":256,\"test/Chessboard.sol\":79,\"test/Draws.t.sol\":90,\"test/FactoryLaunch.t.sol\":218,\"test/FeeRouter.t.sol\":374,\"test/FeeRouterAdversarial.t.sol\":302,\"test/FeeRouterSequenceInvariant.t.sol\":453,\"test/FeeSchedule.t.sol\":165,\"test/Game.t.sol\":381,\"test/GasEstimate.t.sol\":96,\"test/Harness.sol\":83,\"test/HookGas.t.sol\":172,\"test/Hostile.t.sol\":415,\"test/Invariant.t.sol\":158,\"test/InvariantDuels.t.sol\":463,\"test/Launch.t.sol\":139,\"test/LaunchAdmission.t.sol\":156,\"test/LaunchFiles.t.sol\":78,\"test/MatePot.t.sol\":461,\"test/Money.t.sol\":360,\"test/PotStrength.t.sol\":114,\"test/Predict.t.sol\":102,\"test/Size.t.sol\":27,\"test/Slice.t.sol\":140,\"test/Staking.t.sol\":520,\"test/StakingAdversarial.t.sol\":248,\"test/StakingAudit.t.sol\":138,\"test/StakingFork.t.sol\":197,\"test/StakingLaunch.t.sol\":114,\"test/StakingRouterChecks.md\":49,\"test/Stats.t.sol\":248,\"test/Strength.t.sol\":88,\"test/Teams.t.sol\":90,\"test/Token.t.sol\":82,\"test/TokenInvariant.t.sol\":155,\"test/Tokens.sol\":150,\"test/V4Fixture.sol\":100,\"test/Windows.t.sol\":135,\"test/data/chess.json\":1,\"test/data/conversion-validation.json\":770,\"test/data/conversion.json\":98,\"test/data/endings.json\":1,\"test/data/legal.json\":1,\"test/data/random.json\":1},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"a751364d55635b5bbee406f6f1cdabea3f8bea067b832c0cbd2b6f9321279b83","verifiedTreeHash":"dbbc9840390e0d4cd84359d05944b69bdf86b127","verifierVersion":"0.1.0+df310a90"},{"checks":[{"durationMs":101365,"exitCode":0,"name":"build","output":"Compiling 134 files with Solc 0.8.26\nSolc 0.8.26 finished in 101.21s\nCompiler run successful with warnings:\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:108:22:\n    |\n108 |             rook = ((FILE_A << f) | (RANK_1 << (8 * r))) ^ bit;\n    |                      ^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:108:38:\n    |\n108 |             rook = ((FILE_A << f) | (RANK_1 << (8 * r))) ^ bit;\n    |                                      ^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:109:57:\n    |\n109 |             uint64 d = f >= r ? DIAG >> (8 * (f - r)) : DIAG << (8 * (r - f));\n    |                                                         ^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/Bitboard.sol:110:65:\n    |\n110 |             uint64 a = f + r <= 7 ? ANTI >> (8 * (7 - f - r)) : ANTI << (8 * (f + r - 7));\n    |                                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/ChessEngineV5.sol:537:38:\n    |\n537 |             uint64 ahead = c.white ? ~uint64(0) << ((r + 1) * 8) : (uint64(1) << (r * 8)) - 1;\n    |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (3149): The result type of the shift operation is equal to the type of the first operand (uint64) ignoring the (larger) type of the second operand (uint256) which might be unexpected. Silence this warning by either converting the first or the second operand to the type of the other.\n   --> src/ChessEngineV5.sol:537:69:\n    |\n537 |             uint64 ahead = c.white ? ~uint64(0) << ((r + 1) * 8) : (uint64(1) << (r * 8)) - 1;\n    |                                                                     ^^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:31:18:\n   |\n31 |         returns (uint16, Rules.Played memory)\n   |                  ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:31:26:\n   |\n31 |         returns (uint16, Rules.Played memory)\n   |                          ^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:36:85:\n   |\n36 |     function playAny(uint256, uint32, uint32, bool, uint256) external pure returns (uint16, Rules.Played memory) {\n   |                                                                                     ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/AuditRegression.t.sol:36:93:\n   |\n36 |     function playAny(uint256, uint32, uint32, bool, uint256) external pure returns (uint16, Rules.Played memory) {\n   |                                                                                             ^^^^^^^^^^^^^^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/Hostile.t.sol:62:18:\n   |\n62 |         returns (uint16, Rules.Played memory)\n   |                  ^^^^^^\n\nWarning (6321): Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> test/Hostile.t.sol:62:26:\n   |\n62 |         returns (uint16, Rules.Played memory)\n   |                          ^^^^^^^^^^^^^^^^^^^\n\nWarning (2072): Unused local variable.\n  --> test/Game.t.sol:97:9:\n   |\n97 |         IMDuelHook.Game memory g = st();\n   |         ^^^^^^^^^^^^^^^^^^^^^^^^\n\nWarning (2018): Function state mutability can be restricted to view\n  --> test/LaunchFiles.t.sol:73:5:\n   |\n73 |     function test_engineLaunchFileDeploysTheEngineWithoutArguments() public {\n   |     ^ (Relevant source part starts here and spans across multiple lines).\n\n","passed":true},{"durationMs":45383,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Size.t.sol:SizeTest\n[PASS] test_deployedCodeFitsTheBudgets() (gas: 71241)\nLogs:\n  hook: 16900\n  engine v5: 23339\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.01ms (846.36µs CPU time)\n\nRan 2 tests for test/StakingLaunch.t.sol:StakingLaunchTest\n[PASS] test_emptyChainCannotSubstituteForMainnet() (gas: 16303)\n[SKIP] test_exactLaunchOnMainnet() (gas: 0)\nSuite result: ok. 1 passed; 0 failed; 1 skipped; finished in 1.65ms (1.50ms CPU time)\n\nRan 3 tests for test/StakingFork.t.sol:StakingForkTest\n[PASS] test_aHandoffAfterThreeDaysAndALock() (gas: 2598)\n[PASS] test_theRouterChecksItsWiringOnChain() (gas: 2460)\n[PASS] test_theWholeRelease() (gas: 2422)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.04ms (33.95µs CPU time)\n\nRan 3 tests for test/LaunchFiles.t.sol:LaunchFilesTest\n[PASS] test_engineLaunchFileDeploysTheEngineWithoutArguments() (gas: 7834)\n[PASS] test_ethereumLaunchFile() (gas: 158792)\n[PASS] test_sepoliaLaunchFile() (gas: 150795)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.55ms (1.35ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_allowances() (gas: 347653)\n[PASS] test_fixedSupplyToTheDeployer() (gas: 39384)\n[PASS] test_nothingPrivileged() (gas: 192691)\n[PASS] test_transfers() (gas: 188240)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 820.97µs (440.34µs CPU time)\n\nRan 16 tests for test/FeeRouter.t.sol:FeeRouterTest\n[PASS] test_aHandoffNeverSkipsTheLastCollect() (gas: 214471)\n[PASS] test_aHandoffWaitsThreeDaysAndCollectsFirst() (gas: 675163)\n[PASS] test_aLockStopsAProposalFromAStolenKey() (gas: 165596)\n[PASS] test_aNewProposalRestartsTheNoticeAndZeroWithdrawsIt() (gas: 273480)\n[PASS] test_aProposalWorksToTheEndOfItsWindow() (gas: 190950)\n[PASS] test_aRejectedVaultProposalPreservesAnExistingProposal() (gas: 260843)\n[PASS] test_aStaleProposalExpires() (gas: 279497)\n[PASS] test_aWrongSetupIsRefused() (gas: 4094745)\n[PASS] test_budgets() (gas: 8338)\n[PASS] test_collectForwardsAClaimSomeoneElseMade() (gas: 421990)\n[PASS] test_collectSendsIMDUELToTheVaultAndIMDToTheTeam() (gas: 600592)\n[PASS] test_collectWithNothingAccruedIsHarmless() (gas: 114633)\n[PASS] test_lockingIsForGoodAndCancelsAProposal() (gas: 544515)\n[PASS] test_onlyTheAdminProposesAndHandsOn() (gas: 210360)\n[PASS] test_theHandoverKeepsWhatAccruedBefore() (gas: 230078)\n[PASS] test_theVaultCannotBeProposedAsRequester() (gas: 449338)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 4.17ms (1.80ms CPU time)\n\nRan 7 tests for test/Draws.t.sol:DrawsTest\n[PASS] test_checkmate() (gas: 334401)\n[PASS] test_moveCap() (gas: 331503)\n[PASS] test_ordinaryMoveDoesNotEndTheGame() (gas: 272039)\n[PASS] test_quietMoveLimit() (gas: 337709)\n[PASS] test_stalemate() (gas: 329276)\n[PASS] test_thirdRepetition() (gas: 1128186)\n[PASS] test_tooFewPiecesToMate() (gas: 321032)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 5.81ms (3.21ms CPU time)\n\nRan 8 tests for test/Slice.t.sol:SliceTest\n[PASS] test_aDuelAgainstImdSendsItsSliceToTheMainDuelsImdPot() (gas: 981778)\n[PASS] test_aDuelAgainstImduelBurnsItsSlice() (gas: 960558)\n[PASS] test_aSliceMovesNoPrice() (gas: 1532512)\n[PASS] test_anyoneSendsTheBurn() (gas: 648930)\n[PASS] test_buyingImduelBurnsASliceOfIt() (gas: 411997)\n[PASS] test_dustPaysNoSlice() (gas: 514419)\n[PASS] test_theMainDuelsSliceIsBurned() (gas: 577029)\n[PASS] test_theWholeSliceIsBurnedToTheWei() (gas: 536637)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 7.36ms (4.47ms CPU time)\n\nRan 5 tests for test/Teams.t.sol:TeamsTest\n[PASS] test_aDynamicFeePoolPlaysWithAZeroLpFee() (gas: 1904114)\n[PASS] test_nativeEthIsATeamLikeAnyToken() (gas: 1224021)\n[PASS] test_poolsOnOneHookKeepSeparateGamesAndChests() (gas: 2479138)\n[PASS] test_sliceSide() (gas: 720994)\n[PASS] test_twoPlainTokensCannotDuel() (gas: 437611)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 8.00ms (6.22ms CPU time)\n\nRan 11 tests for test/Stats.t.sol:StatsTest\n[PASS] test_aDustBidsMoveCounts() (gas: 1177326)\n[PASS] test_aMateCountsEvenWhenItPaysNothing() (gas: 691623)\n[PASS] test_aMoveAtAnyStrengthCounts() (gas: 278453)\n[PASS] test_aPaidSideDuelMateCountsNothing() (gas: 861550)\n[PASS] test_aSideDuelCountsNothing() (gas: 583461)\n[PASS] test_amountsWonAreCountedPerToken() (gas: 935020)\n[PASS] test_checksAndCapturesByType() (gas: 1018958)\n[PASS] test_countersSaturate() (gas: 33090)\n[PASS] test_enPassantAndPromotion() (gas: 682261)\n[PASS] test_gamesMatesAndThePlayerList() (gas: 1493429)\n[PASS] test_movesByPieceCastlingAndFullStrength() (gas: 1407030)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 10.03ms (7.60ms CPU time)\n\nRan 2 tests for test/FactoryLaunch.t.sol:FactoryLaunchTest\n[PASS] test_factoryLaunchWithTokenAboveImd() (gas: 11440064)\n[PASS] test_factoryLaunchWithTokenBelowImd() (gas: 11419485)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 19.65ms (27.18ms CPU time)\n\nRan 5 tests for test/PotStrength.t.sol:PotStrengthTest\n[PASS] test_aDonationWeakensTheTeamsBidsAndRaisesThePrizeForMatingIt() (gas: 3394559)\n[PASS] test_anEmptyPotPlaysAtTheCapUntilItIsAPot() (gas: 4178752)\n[PASS] test_exactOutputStrengthIncludesThePotShare() (gas: 616267)\n[PASS] test_liquidityChangesNothing() (gas: 1669734)\n[PASS] test_strengthIsReadAfterTheMateTheTradePlayed() (gas: 1580288)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 20.97ms (18.16ms CPU time)\n\nRan 7 tests for test/Windows.t.sol:WindowsTest\n[PASS] test_aHash257BlocksBackComesFromHistory() (gas: 1379597)\n[PASS] test_anExpiredMovesWindowIsTheFindingBlock() (gas: 809971)\n[PASS] test_dustAfterTheWindowCanBeAnswered() (gas: 1859162)\n[PASS] test_dustInTheClosingBlockCanBeAnswered() (gas: 1874191)\n[PASS] test_noPreviewBeforeTheClosingBlock() (gas: 749879)\n[PASS] test_onlyALateFirstBidMovesTheWindow() (gas: 768169)\n[PASS] test_theResolvingTradesBidNamesItsHalfMove() (gas: 1223658)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 23.53ms (10.62ms CPU time)\n\nRan 14 tests for test/Bidding.t.sol:BiddingTest\n[PASS] test_aBuyOfTheOtherTeamBidsForItsNextMove() (gas: 2302673)\n[PASS] test_aBuyOfTheOtherTeamTimesTheSilentSideOutAndBids() (gas: 1220837)\n[PASS] test_aClosedWindowTakesNoBidsForItsMove() (gas: 1238283)\n[PASS] test_aLateFirstBidOpensAFullWindow() (gas: 1790503)\n[PASS] test_aMateIsPaidFromTheLosersChestInItsToken() (gas: 1589493)\n[PASS] test_aMoveIsOpenForTurnBlocksBlocks() (gas: 1216340)\n[PASS] test_aNewTopMustPayMoreThanTenPercentMore() (gas: 988826)\n[PASS] test_aNextMoveBidCarriesIntoTheNextGame() (gas: 1751624)\n[PASS] test_bidsCountAcrossTheWholeWindow() (gas: 1703229)\n[PASS] test_exactlyTenPercentMoreIsNotEnough() (gas: 989254)\n[PASS] test_theMoveDependsOnlyOnTheWindowsLastBlock() (gas: 1949748)\n[PASS] test_theMoversOwnBuyAfterItsWindowBidsForItsNextMove() (gas: 1251927)\n[PASS] test_theOwnerIsTheHookDataAddressElseTheSigner() (gas: 1846249)\n[PASS] test_thePreviewIsTheMoveThatIsPlayed() (gas: 1485460)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 53.55ms (27.22ms CPU time)\n\nRan 2 tests for test/LaunchAdmission.t.sol:LaunchAdmissionTest\n[PASS] test_blankChainTokenAboveImd() (gas: 20224129)\n[PASS] test_blankChainTokenBelowImd() (gas: 20213889)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 60.84ms (52.64ms CPU time)\n\nRan 8 tests for test/FeeSchedule.t.sol:FeeScheduleTest\n[PASS] testFuzz_exactOutputDeliversTheOrderAndTakesItsFeeOnTop(uint256) (runs: 256, μ: 542356, ~: 542481)\nLogs:\n  Bound result 232797649690009560156\n\n[PASS] test_exactOutputStoppedByItsPriceLimitIsRefused() (gas: 259775)\n[PASS] test_fundChestBeyondBalanceIsRefused() (gas: 121187)\n[PASS] test_fundChestOfZeroAddsNothing() (gas: 97993)\n[PASS] test_fundChestWithTheWrongEthValueIsRefused() (gas: 344437)\n[PASS] test_fundChestWithoutAllowanceIsRefused() (gas: 110843)\n[PASS] test_owedRewardOnlyEverReachesItsOwner() (gas: 1268983)\n[PASS] test_withdrawWithNothingOwedDoesNothing() (gas: 90005)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 60.92ms (60.30ms CPU time)\n\nRan 8 tests for test/Strength.t.sol:StrengthTest\n[PASS] testFuzz_boundedAndMonotonic(uint256,uint256,uint256) (runs: 256, μ: 8999, ~: 8559)\nLogs:\n  Bound result 115792038972829145952945229761491176564417888942121402522566596492795229017297\n\n[PASS] testFuzz_depthMonotonic(uint256,uint256,uint256) (runs: 256, μ: 11879, ~: 11898)\nLogs:\n  Bound result 1107433633322117093118918204222\n  Bound result 115792089237316195423570985008687907853269984664533130406135466914794216497013\n\n[PASS] testFuzz_shiftKeepsTheShare(uint256,uint256,uint8) (runs: 256, μ: 14528, ~: 13796)\nLogs:\n  Bound result 1\n  Bound result 50264487049470625755247196731288852095724626595150213104608236818826861\n  Bound result 1107433633322117093118918204222\n\n[PASS] testFuzz_tenfoldIsAboutThirtyPoints(uint128,uint128) (runs: 256, μ: 13820, ~: 13708)\nLogs:\n  Bound result 2221339670\n  Bound result 219918980\n\n[PASS] testFuzz_unscalablePaidFollowsTheCurve(uint256,uint256) (runs: 256, μ: 13986, ~: 14210)\nLogs:\n  Bound result 115676297148078879228147414023679219945416714680974923475418126423905216516648\n  Bound result 115676297148078879228147414023679219945416714680974923475418126423907431504382\n\n[PASS] test_decidedPoints() (gas: 13720)\n[PASS] test_hugePaymentsDoNotRevert() (gas: 12835)\n[PASS] test_zeroInputs() (gas: 5289)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 62.15ms (44.83ms CPU time)\n\nRan 7 tests for test/StakingAudit.t.sol:StakingAuditTest\n[PASS] testFuzz_allSharesParkedAtDeadStopRelease(uint256,uint256,bool) (runs: 256, μ: 867920, ~: 862932)\nLogs:\n  Bound result 50536291095833714997640877\n  Bound result 28885956\n\n[PASS] testFuzz_releaseIsIndependentOfSettlementFrequency(uint256,uint256,uint256) (runs: 256, μ: 907250, ~: 908261)\nLogs:\n  Bound result 99999999999999999999999998\n  Bound result 124937988\n  Bound result 9237933\n\n[PASS] test_depositsAndMintsToDeadDoNotEnableRelease() (gas: 465421)\n[PASS] test_oneWeiKeptEnablesOnlyADustRelease() (gas: 681536)\n[PASS] test_oneWeiParkedAtDeadCannotDrainTheReserve() (gas: 551140)\n[PASS] test_partialTransferToDeadSettlesBeforeSlowingRelease() (gas: 966085)\n[PASS] test_syncEverySecondCannotAmplifyADustRelease() (gas: 45149451)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 62.28ms (118.81ms CPU time)\n\nRan 20 tests for test/Staking.t.sol:StakingTest\n[PASS] testFuzz_aRoundTripNeverProfits(uint256,uint256,uint256) (runs: 256, μ: 670467, ~: 671260)\nLogs:\n  Bound result 36\n  Bound result 2158314200\n  Bound result 22349041\n\n[PASS] testFuzz_theReleaseDependsOnlyOnTime(uint256,uint256) (runs: 256, μ: 869041, ~: 871296)\nLogs:\n  Bound result 102328999\n  Bound result 218288201\n\n[PASS] test_aDonationNeverMovesTheSharePrice() (gas: 445315)\n[PASS] test_aLoneDustStakeCannotInflateAShare() (gas: 6200220)\n[PASS] test_aStakeGrowsEverySecondWithNothingToClaim() (gas: 2240185)\n[PASS] test_aTopUpJoinsTheReserveWithoutJumpingAStake() (gas: 623567)\n[PASS] test_budgets() (gas: 772887)\n[PASS] test_closedUntilTheDeadStakeAndNothingReleasedBefore() (gas: 570172)\n[PASS] test_previewsMatchWhatHappens() (gas: 940478)\n[PASS] test_releaseScalesThePerSecondRateByRedeemableShares() (gas: 1287398)\n[PASS] test_rewardsFollowTimeStaked() (gas: 686042)\n[PASS] test_sharesSentToDeadSettleThenStopTheRelease() (gas: 545307)\n[PASS] test_stakeForAnotherAndLeaveWithAnApproval() (gas: 590474)\n[PASS] test_stakersShareTheReleaseByTheirShare() (gas: 700039)\n[PASS] test_theDeadStakeIsForever() (gas: 733355)\n[PASS] test_theReleaseDependsOnlyOnTime() (gas: 8454785)\n[PASS] test_theReserveWaitsWhenEveryStakerLeaves() (gas: 571957)\n[PASS] test_theReserveWaitsWhileTheDeadStakeIsAlone() (gas: 510884)\n[PASS] test_theRoundingPumpGoesNowhere() (gas: 25004003)\n[PASS] test_theTokenIsStandard() (gas: 400504)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 68.44ms (115.84ms CPU time)\n\nRan 5 tests for test/AuditRegression.t.sol:AuditRegressionTest\n[PASS] test_abiHookDataKeepsWalletBidStatsAndMatePayout() (gas: 1654557)\n[PASS] test_closedWindowPreservesNotEnoughGasAndCanBeRetried() (gas: 1803274)\n[PASS] test_emptyHookDataReproducesAcceptedRelayerAttribution() (gas: 1651793)\n[PASS] test_packedHookDataKeepsWalletBidStatsAndMatePayout() (gas: 1654352)\n[PASS] test_starvedFallbackPreservesNotEnoughGas() (gas: 9732906)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 70.84ms (27.14ms CPU time)\n\nRan 3 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_launchPairedWithEth() (gas: 20464305)\n[PASS] test_launchTokenAboveImd() (gas: 22051377)\nLogs:\n  first buy (opens game 0, bids for White): 390904\n\n[PASS] test_launchTokenBelowImd() (gas: 21786067)\nLogs:\n  first buy (opens game 0, bids for White): 357618\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 70.79ms (130.42ms CPU time)\n\nRan 12 tests for test/Hostile.t.sol:HostileTest\n[PASS] test_aCallbackTokenOwnerLeavingADebtCannotFreezeTheDuel() (gas: 4090732)\n[PASS] test_aDeadEngineEndsTheGameAsADrawAndTradingGoesOn() (gas: 2312934)\n[PASS] test_aGasBurningEngineCostsOneExpensiveTradeNotTheGame() (gas: 7405962)\n[PASS] test_aTokenReturningNothingFundsAChest() (gas: 1032369)\n[PASS] test_anEthOwnerCreditingTheHookCannotFreezeTheDuel() (gas: 3176697)\n[PASS] test_anEthOwnerLeavingADebtCannotFreezeTheDuel() (gas: 3021701)\n[PASS] test_anOwnerThatCannotReceiveWithdrawsElsewhere() (gas: 2560365)\n[PASS] test_blockedRecipientStaysOwedAndTradingContinues() (gas: 3067657)\n[PASS] test_brokenEngineFallsBackToALegalMove() (gas: 4095973)\n[PASS] test_feeOnTransferTokenFundsOnlyWhatArrives() (gas: 1578261)\n[PASS] test_reenteringTokenCannotBreakAClaim() (gas: 3695941)\n[PASS] test_starvingTheEngineNeverPlaysTheFallback() (gas: 17054982)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 98.35ms (56.50ms CPU time)\n\nRan 5 tests for test/HookGas.t.sol:HookGasTest\n[PASS] test_aSideDuelsSliceStaysAPlainTrade() (gas: 2225484)\nLogs:\n  side duel trade with its slice: 198280\n\n[PASS] test_hookShareOfAMovingTrade() (gas: 27867148)\nLogs:\n  hook share of a moving trade: average: 280427\n  hook share of a moving trade: max: 291566\n\n[PASS] test_middlegameGas() (gas: 8526507)\nLogs:\n  first bid in a new pool: 260797\n  bidding trade: 203812\n  outbidding trade: 203617\n  plain trade: 194129\n  next block: play the turn and bid: 585327\n\n[PASS] test_openingGas() (gas: 3870102)\nLogs:\n  first bid in a new pool: 260797\n  bidding trade: 204410\n  outbidding trade: 203617\n  plain trade: 194129\n  next block: play the turn and bid: 624966\n\n[PASS] test_runningGameGas() (gas: 47700896)\nLogs:\n  running game, moving trades measured: 42\n  running game, moving trade average: 451639\n  running game, moving trade max: 557656\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 149.89ms (157.31ms CPU time)\n\nRan 1 test for test/Predict.t.sol:PredictTest\n[PASS] test_aBotCannotPickItsOwnCapturingMoves() (gas: 252152063)\nLogs:\n  bot moves: 0\n  other moves: 53\n  captures among other moves: 13\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 436.45ms (436.30ms CPU time)\n\nRan 21 tests for test/MatePot.t.sol:MatePotTest\n[PASS] testFuzz_heldEqualsOwedWithImdAsCurrency1(uint256) (runs: 32, μ: 13113643, ~: 13041857)\n[PASS] test_aDonationDoesNotRaiseTheCap() (gas: 1883900)\n[PASS] test_aDrawPaysNothing() (gas: 1861364)\n[PASS] test_aDustGamePaysNothing() (gas: 2010121)\n[PASS] test_aDustMateEarnsTwiceItsDust() (gas: 2017977)\n[PASS] test_aFeeFreeSwapAfterAFeeInOneUnlockAddsNoInflow() (gas: 2559726)\n[PASS] test_aGameTradedAloneReturnsAtMostItsPotFees() (gas: 2022701)\n[PASS] test_aMateAgainstATeamNobodyBoughtStillPays() (gas: 3694476)\n[PASS] test_aMateAgainstAnEmptyPotPaysNothing() (gas: 1813816)\n[PASS] test_aShortGamePaysTheLosersFeesNotTheResolvingTrades() (gas: 2981382)\n[PASS] test_aThinSideDuelPaysBackAtMostTheAttackersOwnFee() (gas: 2670612)\n[PASS] test_aTimeoutMatePaysNobody() (gas: 2616259)\n[PASS] test_anExpiredHashPlaysThePaidBidForNobody() (gas: 2925806)\n[PASS] test_everySwapShapeRecordsItsPotFee() (gas: 2832299)\n[PASS] test_theLoserPaysWhenImduelIsCurrency0() (gas: 2600254)\n[PASS] test_theLoserPaysWhenImduelIsCurrency1() (gas: 2600793)\n[PASS] test_theManagerOrTheHookOwnsNoBid() (gas: 2354405)\n[PASS] test_thePrizeIsAtMostTheLosersOwnInflow() (gas: 2546191)\n[PASS] test_twoSwapsInOneUnlockKeepTheirInflowApart() (gas: 4588692)\n[PASS] test_twoSwapsInOneUnlockKeepTheirInflowApartReversed() (gas: 4589218)\n[PASS] test_withdrawToRefusesAddressZeroTheHookAndTheManager() (gas: 1407537)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 587.70ms (636.04ms CPU time)\n\nRan 2 tests for test/GasEstimate.t.sol:GasEstimateTest\n[PASS] test_atTheEstimateThePayoutIsRecorded() (gas: 6326804)\nLogs:\n  smallest gas limit that plays and records the mate's payout: 3701048\n\n[PASS] test_noGasLimitPlaysTheMoveWithoutItsPayout() (gas: 974659330)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 600.90ms (605.88ms CPU time)\n\nRan 25 tests for test/Game.t.sol:GameTest\n[PASS] testFuzz_swapsNeverRevert(uint256) (runs: 48, μ: 10924015, ~: 10805723)\n[PASS] test_aGamePlaysOutThroughSwaps() (gas: 77324728)\nLogs:\n  moves played: 108\n  bids (incl. outbid ones): 138\n  most gas for a swap: 737149\n\n[PASS] test_aSmallerTradeInTheBlockDoesNotTakeTheTurn() (gas: 692202)\n[PASS] test_aTimeoutTurnCanBeTakenInItsBlock() (gas: 1484871)\n[PASS] test_aTradeBidsForTheTurn() (gas: 505631)\n[PASS] test_aTurnClosesWithItsBlock() (gas: 1146176)\n[PASS] test_anExpiredTurnPlaysItsBidForNobody() (gas: 1583139)\n[PASS] test_anOldTurnIsPlayedWithTheHistoryContractsHash() (gas: 2094806)\n[PASS] test_anyTradeSizeBids() (gas: 2685983)\n[PASS] test_lateTradeStillBidsNormally() (gas: 452508)\n[PASS] test_onlyThePoolManagerAndTheHookCanCallIn() (gas: 122174)\n[PASS] test_ownerDefaultsToTxOrigin() (gas: 438886)\n[PASS] test_playedPositionsEnterTheRepetitionMemory() (gas: 1104251)\n[PASS] test_previewMoveIsReadyInTheClosingBlock() (gas: 721740)\n[PASS] test_previewMoveReadsTheServedHashItself() (gas: 1677587)\n[PASS] test_rejectsBadConfig() (gas: 8818)\n[PASS] test_silentSidePlaysAtZeroStrength() (gas: 1055478)\n[PASS] test_strengthFollowsTheShareOfTheTeamsPot() (gas: 8610230)\n[PASS] test_teamsSwapColoursEveryGame() (gas: 1026940)\n[PASS] test_theBiggestTradeInTheBlockOwnsTheTurn() (gas: 788475)\n[PASS] test_theFirstPoolOpenedIsTheMainDuel() (gas: 179045)\n[PASS] test_theMainDuelMustPairImd() (gas: 312270)\n[PASS] test_theNextBlocksTradePlaysTheTurn() (gas: 1221781)\n[PASS] test_theOtherTeamCannotBidOnThisTurn() (gas: 435166)\n[PASS] test_whoPlaysTheTurnAndWhenDoesNotChangeTheMove() (gas: 1874217)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 827.35ms (974.66ms CPU time)\n\nRan 20 tests for test/Money.t.sol:MoneyTest\n[PASS] testFuzz_heldEqualsOwed(uint256) (runs: 48, μ: 11847644, ~: 11837086)\n[PASS] test_aBuyFeedsBothPotsAndBurnsTheSlice() (gas: 421634)\n[PASS] test_aFullChestTakesNoMore() (gas: 1100726)\n[PASS] test_aMateForNobodyPaysNobody() (gas: 515104)\n[PASS] test_aTradeStoppedByItsPriceLimitIsRefused() (gas: 557098)\n[PASS] test_capturesAndChecksPayNothing() (gas: 507482)\n[PASS] test_everyTradeEmitsHookSwapWithTheHookFee() (gas: 556213)\n[PASS] test_everyTradeFeedsBothPots() (gas: 2154397)\n[PASS] test_exactOutputSlicesTheInput() (gas: 541596)\n[PASS] test_exactOutputWithTheFeeInTheOutput() (gas: 393823)\n[PASS] test_feesCannotBeWithdrawnByAnyone() (gas: 536437)\n[PASS] test_fundChestNeedsTheRightValue() (gas: 48679)\n[PASS] test_fundChestOnlyForHookPools() (gas: 41774)\n[PASS] test_fundChestWithEth() (gas: 252841)\n[PASS] test_fundChestWithTokens() (gas: 255519)\n[PASS] test_mateTakesAQuarterOfTheLosersPot() (gas: 895609)\n[PASS] test_quietMovesPayNothing() (gas: 458996)\n[PASS] test_rewardsAreClaimedNeverPushed() (gas: 1359511)\n[PASS] test_theMateIsCappedAtTwiceWhatItsTradePaid() (gas: 773155)\n[PASS] test_theMateIsCountedForItsOwner() (gas: 636338)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 854.95ms (864.60ms CPU time)\n\nRan 1 test for test/Invariant.t.sol:InvariantTest\n[PASS]\nInvariantTest invariants:\n[PASS] invariant_boardHasBothKingsAndPlyIsBounded\n[PASS] invariant_heldEqualsOwed\n InvariantTest invariants (runs: 24, calls: 2400, reverts: 0)\n\n╭----------+----------------+-------+---------+----------╮\n| Contract | Selector       | Calls | Reverts | Discards |\n+========================================================+\n| Handler  | burn           | 298   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | fund           | 243   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | idle           | 252   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | longPause      | 271   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | nextBlock      | 224   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | trade          | 288   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | tradeAgain     | 310   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | tradeNextBlock | 268   | 0       | 0        |\n|----------+----------------+-------+---------+----------|\n| Handler  | withdrawReward | 246   | 0       | 0        |\n╰----------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 19999999000000001801\n  Bound result 19999999000000020001\n  Bound result 9259542123273814144\n  Bound result 7\n  Bound result 19999999999999999997\n  Bound result 16972334615231887134\n  Bound result 19999999000000000092\n  Bound result 40\n  Bound result 19999999000000009955\n  Bound result 13023133213298788803\n  Bound result 19999999000000001000\n  Bound result 19999999000000020783\n  Bound result 5828\n  Bound result 19999999000000000834\n  Bound result 1200000000000000000\n  Bound result 19999999000000000161\n  Bound result 19999999001000000001\n  Bound result 10822\n  Bound result 4323722779903916992\n  Bound result 19999999000000100001\n  Bound result 60877149671602\n  Bound result 19999999000000023154\n  Bound result 19999999000000000111\n  Bound result 38958999603826347141\n  Bound result 19999999000000001020\n  Bound result 19\n  Bound result 19999999000000000161\n  Bound result 10000000\n  Bound result 60\n  Bound result 19999999000000000256\n  Bound result 19999999000000000096\n  Bound result 9881315612531857779\n  Bound result 120\n  Bound result 19999999000000006927\n  Bound result 19999999000000002153\n  Bound result 19999999000000000226\n  Bound result 19999999000000000521\n  Bound result 19999999000000013359\n  Bound result 50000000000000000000\n  Bound result 19999999000000006425\n  Bound result 17733\n  Bound result 14174\n  Bound result 34353926883621670997\n  Bound result 1200000000000000000\n  Bound result 120\n  swaps: 31\n  moves: 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.13s (1.13s CPU time)\n\nRan 3 tests for test/TokenInvariant.t.sol:TokenInvariantTest\n[PASS]\nTokenInvariantTest invariants:\n[PASS] invariant_allowancesAreExactlyWhatWasApprovedLessWhatWasSpent\n[PASS] invariant_supplyIsFixedAndHeldByTheActors\n TokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------------+-------+---------+----------╮\n| Contract     | Selector           | Calls | Reverts | Discards |\n+================================================================+\n| TokenHandler | approve            | 2047  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | approveZeroSpender | 2039  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | transfer           | 2067  | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| TokenHandler | transferFrom       | 2039  | 0       | 0        |\n╰--------------+--------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 524\n  Bound result 2\n  Bound result 10\n  Bound result 4\n  Bound result 6\n  Bound result 34560000\n  Bound result 9\n  Bound result 2011\n  Bound result 3\n  Bound result 3250000000000000\n  Bound result 172800\n  Bound result 5\n  Bound result 146344160017450924443285242\n  Bound result 3\n  Bound result 100000000\n  Bound result 5\n  Bound result 4966\n  Bound result 5\n  Bound result 4641\n  Bound result 2823\n  Bound result 242\n  Bound result 5694\n  Bound result 6372\n  Bound result 9\n  Bound result 100000000000000000\n  Bound result 4\n  Bound result 9\n  Bound result 90\n  Bound result 4\n  Bound result 3\n  Bound result 2\n  Bound result 67988757658362218081729219\n  Bound result 84443867409285120\n  Bound result 242\n  Bound result 1\n\n[PASS] testFuzz_transferOfMoreThanTheBalanceIsRefused(uint256) (runs: 512, μ: 55904, ~: 55857)\nLogs:\n  Bound result 3825457095198333340444217064142663440055883\n\n[PASS] test_transferFromTheZeroAddressIsRefused() (gas: 82118)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 2.46s (2.47s CPU time)\n\nRan 1 test for test/InvariantDuels.t.sol:InvariantDuelsTest\n[PASS]\nInvariantDuelsTest invariants:\n[PASS] invariant_everyBoardIsSound\n[PASS] invariant_everyCurrencyBalances\n[PASS] invariant_rightsMatchTheBoard\n[PASS] invariant_turnsAreWellFormed\n InvariantDuelsTest invariants (runs: 24, calls: 2880, reverts: 0)\n\n╭--------------+-------------------+-------+---------+----------╮\n| Contract     | Selector          | Calls | Reverts | Discards |\n+===============================================================+\n| DuelsHandler | addLiquidity      | 198   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | burn              | 194   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | fund              | 198   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | longPause         | 204   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | nextBlock         | 197   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | pushThenNextBlock | 225   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | queueMate         | 211   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | removeLiquidity   | 177   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | roundTrip         | 211   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | setMates          | 235   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | trade             | 219   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | tradeAgain        | 194   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | tradeNextBlock    | 215   | 0       | 0        |\n|--------------+-------------------+-------+---------+----------|\n| DuelsHandler | withdrawReward    | 202   | 0       | 0        |\n╰--------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 47\n  Bound result 9806\n  Bound result 19999999999000021922\n  Bound result 26\n  Bound result 180000000001517015004\n  Bound result 12\n  Bound result 19999999999000016948\n  Bound result 149999999850000\n  Bound result 19999999999000000061\n  Bound result 19999999999087312192\n  Bound result 108000\n  Bound result 11037\n  Bound result 22183872506835070987\n  Bound result 180000000000000016227\n  Bound result 12\n  Bound result 19999999999000010397\n  Bound result 10042500000000000000\n  Bound result 12\n  Bound result 19999999999000887221\n  Bound result 12\n  Bound result 19999999999000000258\n  Bound result 1991521851\n  Bound result 431670093970\n  Bound result 16764\n  Bound result 180000000000000001177\n  Bound result 12\n  Bound result 49\n  Bound result 3333000000000000000007\n  Bound result 68231212637871061457\n  Bound result 12\n  Bound result 19999999999000002828\n  Bound result 71776119061217280\n  Bound result 19999999999000016119\n  Bound result 120\n  Bound result 4999999999000008867\n  Bound result 41\n  Bound result 4999999999000004281\n  Bound result 1000000000000002\n  Bound result 650000000000000000000\n  Bound result 64000000000000000\n  Bound result 180000000000000001666\n  Bound result 12\n  Bound result 9999999000000000011658\n  Bound result 9199909298401084549276\n  Bound result 19999999999000007599\n  Bound result 106\n  Bound result 160\n  Bound result 3407\n  Bound result 130\n  Bound result 999\n  Bound result 9999999000000000004661\n  Bound result 12\n  Bound result 268209726905697\n  Bound result 12\n  Bound result 10900000000000000000\n  Bound result 180000000000000004001\n  Bound result 12\n  Bound result 180000000000016711681\n  Bound result 12\n  Bound result 9999999000000000021365\n  Bound result 18451753106752625808\n  Bound result 180000000000000013143\n  Bound result 12\n  Bound result 74\n  Bound result 9999999000000257633819\n  Bound result 18690713955923036477\n  Bound result 9999999000000000021362\n  Bound result 50000000000000000000\n  Bound result 15\n  Bound result 9999999000000034560001\n  Bound result 180000000000000001332\n  Bound result 12\n  Bound result 12\n  Bound result 10000000000000000\n  Bound result 12\n  Bound result 19999999999000002601\n  Bound result 9999999000000000007373\n  Bound result 9999999000000093527403\n  Bound result 6803349197668712103924\n  Bound result 59\n  Bound result 19999999999000172801\n  Bound result 3090376478590152956681\n  Bound result 1000000002\n  Bound result 12500000000000000000\n  Bound result 62\n  Bound result 32500199999999800\n  Bound result 12\n  Bound result 19999999999000004079\n  Bound result 19999999999000017328\n  Bound result 49569384140159271248\n  Bound result 12\n  Bound result 12\n  Bound result 4652870257451440200\n  Bound result 1000000000000000\n  Bound result 191000000000000000002\n  Bound result 12\n  Bound result 19999999999000003775\n  Bound result 78\n  Bound result 111232027869618472965\n  Bound result 12\n  Bound result 19999999999000007352\n  swaps: 39\n  moves: 17\n  mates paid: 4\n  Bound result 12\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n  Bound result 1000000000000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.33s (3.33s CPU time)\n\nRan 1 test for test/Staking.t.sol:StakingInvariantTest\n[PASS]\nStakingInvariantTest invariants:\n[PASS] invariant_everyWeiIsAccountedFor\n[PASS] invariant_everyoneCanLeave\n[PASS] invariant_theDeadStakeNeverLeaves\n StakingInvariantTest invariants (runs: 256, calls: 128000, reverts: 0)\n\n╭----------------+----------+-------+---------+----------╮\n| Contract       | Selector | Calls | Reverts | Discards |\n+========================================================+\n| StakingHandler | deposit  | 18298 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | mint     | 18042 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | move     | 18380 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | redeem   | 18476 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | topUp    | 18037 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | wait     | 18412 | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| StakingHandler | withdraw | 18355 | 0       | 0        |\n╰----------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 30\n  Bound result 7974\n  Bound result 5894\n  Bound result 3483\n  Bound result 48368785828613788855022709\n  Bound result 86400\n  Bound result 4695\n  Bound result 2330\n  Bound result 1889\n  Bound result 250000000000000000\n  Bound result 257\n  Bound result 259200\n  Bound result 106176000\n  Bound result 1261\n  Bound result 86\n  Bound result 279\n  Bound result 5467\n  Bound result 350703344\n  Bound result 110\n  Bound result 39202030\n  Bound result 3000\n  Bound result 1\n  Bound result 7163\n  Bound result 98842190\n  Bound result 1234000000000000000001\n  Bound result 6\n  Bound result 414831483\n  Bound result 427\n  Bound result 5294435\n  Bound result 27611725679747730228426733\n  Bound result 14889524913541820630239362\n  Bound result 6545\n  Bound result 975\n  Bound result 16432212701708995310594182\n  Bound result 300000\n  Bound result 324666069641136501338\n  Bound result 7575520435987659731862200\n  Bound result 7265\n  Bound result 231797219201347306160\n  Bound result 243\n  Bound result 368\n  Bound result 19016808782745265892102449\n  Bound result 5617\n  Bound result 3139\n  Bound result 3121116754\n  Bound result 6286\n  Bound result 58368785578613788855111915\n  Bound result 3984\n  Bound result 5620953201035489654307372\n  Bound result 41758935\n  Bound result 1102\n  Bound result 99\n  Bound result 6851\n  Bound result 7000000000000000003\n  Bound result 6796\n  Bound result 5000000\n  Bound result 80\n  Bound result 17719346967014245253304361\n  Bound result 11200000000000000000\n  Bound result 7165\n  Bound result 184200\n  Bound result 1705\n  Bound result 1836298103885067318210364\n  Bound result 650000000000000000000\n  Bound result 315360000\n  Bound result 102053642\n  Bound result 3345247284474511471886785\n  Bound result 7249\n  Bound result 762\n  Bound result 100000000000000000000000\n  Bound result 11\n  Bound result 1899\n  Bound result 8108149662797838069583330\n  Bound result 2566242873599535147215010\n  Bound result 1110\n  Bound result 2134284027740247372\n  Bound result 9515789577410305838295245\n  Bound result 4205394678771007747938215\n  Bound result 21886907901085429049\n  Bound result 7000\n  Bound result 127216174092927879267794\n  Bound result 200000000000000000000\n  Bound result 152\n  Bound result 35317814544056822699714842\n  Bound result 15381597325082170122005120\n  Bound result 2150507794\n  Bound result 300000\n  Bound result 8778941884898\n  Bound result 300000000000000000000000\n  Bound result 3465988982\n  Bound result 2\n  Bound result 121024001\n  Bound result 51966\n  Bound result 2026\n  Bound result 2000000000000000000\n  Bound result 7911008\n  Bound result 3734317387938947422806310\n  Bound result 58392722149985398195346902\n  Bound result 31808000\n  Bound result 6000000000000000000\n  Bound result 1\n  Bound result 4727\n  Bound result 59484767327742776272442291\n  Bound result 259200\n  Bound result 5026\n  Bound result 5458093\n  Bound result 11573303165662440772\n  Bound result 28123751113236521233917881\n  Bound result 7000000000000000003\n  Bound result 72340172838076673\n  Bound result 220929211295163889859990225\n  Bound result 846\n  Bound result 300000\n  Bound result 2048\n  Bound result 96\n  Bound result 2786\n  Bound result 4695\n  Bound result 56477669401356248430508935\n  Bound result 16\n  Bound result 2147483648\n  Bound result 27548357012510584329034318\n  Bound result 2994506835866036225802846\n  Bound result 4845\n  Bound result 1522\n  Bound result 5118\n  Bound result 23634885454105866761873\n  Bound result 136287432433465419320832617\n  Bound result 184200\n  Bound result 71841278183211143403923897\n  Bound result 2843\n  Bound result 2600\n  Bound result 1007227750129125763431302\n  Bound result 3021\n  Bound result 2416\n  Bound result 5209262254587974380249097\n  Bound result 95000\n  Bound result 4095\n  Bound result 2722\n  Bound result 29312000\n  Bound result 56\n  Bound result 4000000000000000000000000\n  Bound result 161699\n  Bound result 5\n  Bound result 3250000000000000\n  Bound result 725\n  Bound result 887270\n  Bound result 3150\n  Bound result 55581476\n  Bound result 1252718232583344809490230\n  Bound result 1918\n  Bound result 550664\n  Bound result 4211\n  Bound result 4184\n  Bound result 49\n  Bound result 2410\n  Bound result 0\n  Bound result 2145752327149\n  Bound result 839078240\n  Bound result 640000\n  Bound result 10201219\n  Bound result 1222871045281058244753050\n  Bound result 5223\n  Bound result 117810\n  Bound result 5208716522662918459961420\n  Bound result 15\n  Bound result 7683061251066650071488523\n  Bound result 125611240\n  Bound result 782575067187697202580873\n  Bound result 93554216882831415886659\n  Bound result 1374396088320\n  Bound result 751854181751653986108497\n  Bound result 209692667904684143547817834\n  Bound result 36\n  Bound result 1298\n  Bound result 600000000000000000000\n  Bound result 5850\n  Bound result 4240096548506735690759129\n  Bound result 242\n  Bound result 24999999999999999999\n  Bound result 365\n  Bound result 3641014143\n  Bound result 122558671\n  Bound result 15596\n  Bound result 10000000\n  Bound result 99401565311751010526602692\n  Bound result 60\n  Bound result 33424561276472735313745301\n  Bound result 7315\n  Bound result 6573\n  Bound result 172727630\n  Bound result 48879\n  Bound result 20000000000000000000000000\n  Bound result 4070503847594755499683519\n  Bound result 161\n  Bound result 10000000000\n  Bound result 10451334681\n  Bound result 6320\n  Bound result 7005629908675865714536839\n  Bound result 88594053280163857340173863\n  Bound result 150\n  Bound result 500000000000000000000\n  Bound result 319067932779729065045064\n  Bound result 48617602\n  Bound result 119173666\n  Bound result 435\n  Bound result 728926338\n  Bound result 70\n  Bound result 7408\n  Bound result 4095\n  Bound result 753276\n  Bound result 12\n  Bound result 921794742980036832400281\n  Bound result 1239446557\n  Bound result 10192347371266510403798142\n  Bound result 6324254410311078367716470\n  Bound result 424\n  Bound result 253\n  Bound result 24999999999999999999\n  Bound result 565033854319242021707182\n  Bound result 3239\n  Bound result 3\n  Bound result 1939802260542590174471598\n  Bound result 18511571388470688144108078\n  Bound result 76672000\n  Bound result 172800\n  Bound result 460031\n  Bound result 3023\n  Bound result 48879\n  Bound result 0\n  Bound result 115904000\n  Bound result 4245\n  Bound result 2832519642\n  Bound result 3249\n  Bound result 1207527640853145315930718\n  Bound result 315360000\n  Bound result 351\n  Bound result 9223372036854775808000\n  Bound result 317346480316914487045534\n  Bound result 7589\n  Bound result 7000000000000000000000\n  Bound result 65536\n  Bound result 1980\n  Bound result 2954110473\n  Bound result 6319\n  Bound result 91\n  Bound result 127\n  Bound result 4059048865460516703214439\n  Bound result 6937343157978177246028285\n  Bound result 4090942503091826062601648\n  Bound result 85429812\n  Bound result 500\n  Bound result 240316072771487615759286122\n  Bound result 86\n  Bound result 908590007036586609694347\n  Bound result 909\n  Bound result 3297803\n  Bound result 3593\n  Bound result 763600052\n  Bound result 34560000\n  Bound result 3000000\n  Bound result 2155872511\n  Bound result 2245843505244641091152911\n  Bound result 398\n  Bound result 131072\n  Bound result 126\n  Bound result 10723151780598845931\n  Bound result 47845768\n  Bound result 43867065593974482041190563\n  Bound result 100000\n  Bound result 4095\n  Bound result 4096\n  Bound result 623827004479554486140504\n  Bound result 1374396088320\n  Bound result 61094162\n  Bound result 3324\n  Bound result 200\n  Bound result 900\n  Bound result 103087941049648094128506336\n  Bound result 4518066966827181438737142\n  Bound result 21251873733847815991271782\n  Bound result 106176000\n  Bound result 168\n  Bound result 64000000000000000\n  Bound result 6785785015899624057797592\n  Bound result 56137588\n  Bound result 2072\n  Bound result 2845\n  Bound result 532491561698969028043211\n  Bound result 600000000000000000000\n  Bound result 160\n  Bound result 246184358368976239584620\n  Bound result 1000000000000000000\n  Bound result 4533141851530563489\n  Bound result 65000000000000000000\n  Bound result 1372\n  Bound result 100000000000000000\n  Bound result 2827\n  Bound result 19677255\n  Bound result 3032\n  Bound result 58248383239530000707258\n  Bound result 19414225111447240548484804\n  Bound result 12\n  Bound result 1000000\n  Bound result 3332651855585622662523144\n  Bound result 3811385587790333238219257\n  Bound result 439701284489474685\n  Bound result 209318407608758837518903003\n  Bound result 7000000000000000003\n  Bound result 163\n  Bound result 900\n  Bound result 1000001\n  Bound result 2222660018226279803102623\n  Bound result 20000000000000000\n  Bound result 3838907885949934982415847\n  Bound result 548360331352294436362472\n  Bound result 7102\n  Bound result 6320\n  Bound result 9259542123273814144\n  Bound result 4030315213197668279646260\n  Bound result 4032000\n  Bound result 64098203\n  Bound result 4158\n  Bound result 15964995553786908279192260\n  Bound result 174796394701003870621743169\n  Bound result 1000000000000000000000\n  Bound result 40737672807929827516623\n  Bound result 9596840200102050647368984\n  Bound result 14\n  Bound result 4192361925800472433233591\n  Bound result 1688274426714223184953201\n  Bound result 4720359073154706429761674\n  Bound result 10929853241374459061144855\n  Bound result 11555060584472284246751209\n  Bound result 7200495744994483559064495\n  Bound result 66813707862367157676603\n  Bound result 10000000000000000\n  Bound result 500000000000000000\n  Bound result 200\n  Bound result 200\n  Bound result 6795994471093967354859709\n  Bound result 57005\n  Bound result 4826831820535530197616\n  Bound result 7162\n  Bound result 136\n  Bound result 1233999999999999999671\n  Bound result 96\n  Bound result 6000000000000000000\n  Bound result 7038\n  Bound result 431458418535334353157928\n  Bound result 9223372036854775808000\n  Bound result 9000000000000000000\n  Bound result 1111985840613791063850024\n  Bound result 4333\n  Bound result 1905237303731380582562556\n  Bound result 2346033802\n  Bound result 3238\n  Bound result 25000000000000000000\n  Bound result 100000000\n  Bound result 10042500000000000000\n  Bound result 28\n  Bound result 3058619288285268681884611\n  Bound result 2302358458920184203246841\n  Bound result 500000000000000000009\n  Bound result 1000\n  Bound result 9241421688590303745\n  Bound result 6970237610844419043667995\n  Bound result 10000000000000000000\n  Bound result 0\n  Bound result 5142856078944721205459\n  Bound result 1284\n  Bound result 100000000\n  Bound result 2349\n  Bound result 1176\n  Bound result 2147483648\n  Bound result 131454318413339314162683999\n  Bound result 3908\n  Bound result 86784000\n  Bound result 299\n  Bound result 36207868311216243943491\n  Bound result 130888665969498087569197\n  Bound result 207712244450727707019869\n  Bound result 3482717096859184094687531\n  Bound result 65270091\n  Bound result 0\n  Bound result 6839796882063953239121084\n  Bound result 214544557824356641488624\n  Bound result 997\n  Bound result 157821588170015487372111\n  Bound result 320\n  Bound result 61952169549960123537174150\n  Bound result 1677\n  Bound result 5144\n  Bound result 3616\n  Bound result 11400714819323198485\n  Bound result 193\n  Bound result 7161\n  Bound result 124608000\n  Bound result 6833097387967255078146540\n  Bound result 48879\n  Bound result 211025572204658034411702\n  Bound result 4093\n  Bound result 7182118300664557237227903\n  Bound result 1999999000000000000000000\n  Bound result 18\n  Bound result 100000000000000000\n  Bound result 4695\n  Bound result 4199\n  Bound result 0\n  Bound result 152\n  Bound result 252624396645131046\n  Bound result 702\n  Bound result 7223573344363161733638621\n  Bound result 33676161\n  Bound result 1681\n  Bound result 168\n  Bound result 2752531960533622094188207\n  Bound result 460031\n  Bound result 4891\n  Bound result 3542268004735156054992492\n  Bound result 80\n  Bound result 162\n  Bound result 160\n  Bound result 68468002585362422222262\n  Bound result 255\n  Bound result 152\n  Bound result 99999\n  Bound result 1231\n  Bound result 8933378177021484857392\n  Bound result 1344\n  Bound result 622876305776231654694881\n  Bound result 1834\n  Bound result 23328025\n  Bound result 1000000\n  Bound result 5080641286512069245821689\n  Bound result 91\n  Bound result 12295074262922120167403798\n  Bound result 4480\n  Bound result 321906543942328223057341\n  Bound result 168\n  Bound result 3736577520\n  Bound result 1234000000000000000000\n  Bound result 12302043444212373907015955\n  Bound result 3090\n  Bound result 25210979639751945999269867\n  Bound result 35511378799272107589370963\n  Bound result 13570318850397144742513192\n  Bound result 7898\n  Bound result 200643034252172156427928\n  Bound result 2892\n  Bound result 206449176753495283039032\n  Bound result 7880246808387454671062682\n  Bound result 2854408306970235904001079\n  Bound result 1341\n  Bound result 517440284\n  Bound result 370369163402562416921\n  Bound result 2026\n  Bound result 125120000\n  Bound result 35842237\n  Bound result 31345398806237835755395407\n  Bound result 5617\n  Bound result 5896\n  Bound result 16711680\n  Bound result 80\n  Bound result 242\n  Bound result 4078\n  Bound result 13788994893495103293010\n  Bound result 0\n  Bound result 16\n  Bound result 5204207871184349679188464\n  Bound result 398\n  Bound result 4263129312227265101626785\n  Bound result 16711680\n  Bound result 0\n  Bound result 6496697584064336637555281\n  Bound result 449938115661884393024360\n  Bound result 2644787077707603466579086\n  Bound result 2311251566\n  Bound result 178\n  Bound result 15936329389751691307334026\n  Bound result 4061101569892154188769551\n  Bound result 1762000000\n  Bound result 4742\n  Bound result 120\n  Bound result 9856000\n  Bound result 2346036954\n  Bound result 165161\n  Bound result 492917139498190239325712\n  Bound result 3537\n  Bound result 3600\n  Bound result 28197437633317865735004403\n  Bound result 13126347723773999879979\n  Bound result 20775238612788297626223052\n  Bound result 5101349\n  Bound result 1341\n  Bound result 13787848793156543929\n  Bound result 252624396645131046\n  Bound result 4660\n  Bound result 5605\n  Bound result 992\n  Bound result 10\n  Bound result 97\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 45.20s (45.20s CPU time)\n\nRan 32 test suites in 45.21s (56.30s CPU time): 232 tests passed, 0 failed, 1 skipped (233 total tests)\n","passed":true},{"durationMs":211,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IMDuelFeeRouter.collect()\",\"IMDuelFeeRouter.handOn()\",\"IMDuelFeeRouter.lock()\",\"IMDuelFeeRouter.propose(address)\",\"IMDuelHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"IMDuelHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"IMDuelHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"IMDuelHook.fundChest((address,address,uint24,int24,address),bool,uint256)\",\"IMDuelHook.unlockCallback(bytes)\",\"IMDuelHook.withdraw(address,address)\",\"IMDuelHook.withdrawTo(address,address)\",\"IMDuelStaking.approve(address,uint256)\",\"IMDuelStaking.deposit(uint256,address)\",\"IMDuelStaking.mint(uint256,address)\",\"IMDuelStaking.redeem(uint256,address,address)\",\"IMDuelStaking.sync()\",\"IMDuelStaking.transfer(address,uint256)\",\"IMDuelStaking.transferFrom(address,address,uint256)\",\"IMDuelStaking.withdraw(uint256,address,address)\",\"IMDuelToken.approve(address,uint256)\",\"IMDuelToken.transfer(address,uint256)\",\"IMDuelToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"ADAPTATION.md\":138,\"LICENSE\":16,\"dist/_headers\":8,\"dist/apple-touch-icon.png\":9,\"dist/art/hero-swarm.webp\":720,\"dist/assets/C122-DvQn1nGk.mp3\":10635,\"dist/assets/CC123-MfPBydK1.mp3\":6147,\"dist/assets/CC124-rKIjYKsi.mp3\":9221,\"dist/assets/CC125-62JaqcM-.mp3\":7903,\"dist/assets/CC126-cankUb9F.mp3\":6392,\"dist/assets/badge-BO83mXN3.js\":1,\"dist/assets/badge-Bri6MgGm.css\":1,\"dist/assets/ccip-BpUXKLfR.js\":1,\"dist/assets/chessboard-CMOAfHUO.css\":1,\"dist/assets/chessboard-DSUJf5m3.js\":1,\"dist/assets/controls-B-yWk6PN.css\":1,\"dist/assets/controls-BHCuqmWb.js\":3,\"dist/assets/create-CrtTR5E9.js\":13,\"dist/assets/create-i8p4obVz.css\":1,\"dist/assets/discovery-DfqpzOGG.js\":12,\"dist/assets/docs-DnTmEmVC.js\":557,\"dist/assets/docs-dgxECQPm.css\":1,\"dist/assets/duel-7MeZCWuf.css\":1,\"dist/assets/duel-BloOLRx6.js\":78,\"dist/assets/duel-table-D9x9DZZV.css\":1,\"dist/assets/duel-table-HK0-2Ng4.js\":11,\"dist/assets/duels-B86ITlW_.js\":6,\"dist/assets/duels-n_aKJ4sI.css\":1,\"dist/assets/feed-DRE1eB8o.js\":25,\"dist/assets/feed-Ddh1LJ-u.css\":1,\"dist/assets/history/1-0xbb45eacf50b4bd8ce31e0620e14ff6e6b6375d56fce4372d3046f4a02faeae65-0-b0c26ccc.json\":1,\"dist/assets/home-B5GybLE4.js\":21,\"dist/assets/home-WrMuib77.css\":1,\"dist/assets/index-CEu3j7Ex.js\":62,\"dist/assets/index-aqUhpJbX.css\":1,\"dist/assets/localBatchGatewayRequest-DC5ZfVVU.js\":30,\"dist/assets/missing-BmTc_RzT.js\":1,\"dist/assets/overview-BsjhZYfN.css\":1,\"dist/assets/page-title-BT5kD_nh.js\":1,\"dist/assets/page-title-ncHp25r9.css\":1,\"dist/assets/players-CxiYjahr.css\":1,\"dist/assets/players-D2S5yaf4.js\":7,\"dist/assets/profile-17hHaRGP.js\":19,\"dist/assets/profile-Ctzz0eK6.css\":1,\"dist/assets/secp256k1-DS-XoEp3.js\":1,\"dist/assets/skeleton-By2p64Po.css\":1,\"dist/assets/skeleton-DfYj0nFe.js\":1,\"dist/assets/spendable-DZbWvh1P.css\":1,\"dist/assets/spendable-DaF_IlYB.js\":5,\"dist/assets/token-icon-D02jiyaf.js\":1,\"dist/assets/token-icon-qRBAAVr_.css\":1,\"dist/assets/utils-Bpv4vmSW.js\":1,\"dist/assets/who-BToGNiZS.css\":1,\"dist/assets/who-CEyB5pkF.js\":5,\"dist/deploy.json\":44,\"dist/docs/llms.txt\":245,\"dist/favicon.ico\":20,\"dist/favicon.svg\":1,\"dist/fonts/michroma.woff2\":67,\"dist/fonts/plex-mono-400.woff2\":58,\"dist/fonts/plex-mono-500.woff2\":62,\"dist/fonts/plex-sans-400.woff2\":85,\"dist/fonts/plex-sans-500.woff2\":91,\"dist/history/1-0xa92f72dcdd90229c32f6d51229f4cc5c916410cc.json\":1,\"dist/history/1-0xbb45eacf50b4bd8ce31e0620e14ff6e6b6375d56fce4372d3046f4a02faeae65.json\":1,\"dist/icon-192.png\":15,\"dist/icon-512.png\":33,\"dist/index.html\":43,\"dist/og.png\":56,\"dist/site.webmanifest\":13,\"foundry.toml\":29,\"launch.json\":24,\"launch/engine.json\":10,\"launch/hook.json\":34,\"launch/hook.sepolia.json\":34,\"launch/staking.json\":19,\"script/LaunchPolicy.sol\":43,\"src/Bitboard.sol\":719,\"src/Chess.sol\":35,\"src/ChessEngineV5.sol\":852,\"src/IChessEngine.sol\":29,\"src/IMDuelFeeRouter.sol\":138,\"src/IMDuelHook.sol\":858,\"src/IMDuelStaking.sol\":120,\"src/IMDuelToken.sol\":62,\"src/Rules.sol\":45,\"src/Strength.sol\":46,\"test/AuditRegression.t.sol\":192,\"test/Base.sol\":223,\"test/Bidding.t.sol\":256,\"test/Chessboard.sol\":79,\"test/Draws.t.sol\":90,\"test/FactoryLaunch.t.sol\":218,\"test/FeeRouter.t.sol\":374,\"test/FeeSchedule.t.sol\":165,\"test/Game.t.sol\":381,\"test/GasEstimate.t.sol\":96,\"test/Harness.sol\":83,\"test/HookGas.t.sol\":172,\"test/Hostile.t.sol\":415,\"test/Invariant.t.sol\":158,\"test/InvariantDuels.t.sol\":463,\"test/Launch.t.sol\":139,\"test/LaunchAdmission.t.sol\":156,\"test/LaunchFiles.t.sol\":78,\"test/MatePot.t.sol\":461,\"test/Money.t.sol\":360,\"test/PotStrength.t.sol\":114,\"test/Predict.t.sol\":102,\"test/Size.t.sol\":27,\"test/Slice.t.sol\":140,\"test/Staking.t.sol\":520,\"test/StakingAudit.t.sol\":138,\"test/StakingFork.t.sol\":197,\"test/StakingLaunch.t.sol\":85,\"test/Stats.t.sol\":248,\"test/Strength.t.sol\":88,\"test/Teams.t.sol\":90,\"test/Token.t.sol\":82,\"test/TokenInvariant.t.sol\":155,\"test/Tokens.sol\":150,\"test/V4Fixture.sol\":100,\"test/Windows.t.sol\":135,\"test/data/chess.json\":1,\"test/data/conversion-validation.json\":770,\"test/data/conversion.json\":98,\"test/data/endings.json\":1,\"test/data/legal.json\":1,\"test/data/random.json\":1},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":19151,"exitCode":0,"name":"slither","output":"[high/medium] incorrect-exp at src/IMDuelHook.sol:242: IMDuelHook.teamOf(uint8,uint32,bool) (src/IMDuelHook.sol#242-244) has bitwise-xor operator ^ instead of the exponentiation operator **: \n[high/medium] incorrect-exp at src/IMDuelHook.sol:242: IMDuelHook.teamOf(uint8,uint32,bool) (src/IMDuelHook.sol#242-244) has bitwise-xor operator ^ instead of the exponentiation operator **: \n[medium/medium] divide-before-multiply at src/IMDuelStaking.sol:111: IMDuelStaking._keep(uint256,uint256) (src/IMDuelStaking.sol#111-119) performs a multiplication on the result of a division:\n[medium/medium] reentrancy-no-eth at src/IMDuelHook.sol:283: Reentrancy in IMDuelHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/IMDuelHook.sol#283-308):\n[medium/medium] uninitialized-local at src/Bitboard.sol:643: Bitboard._targets(Bitboard.Pos,Bitboard.Gen,uint8,bool).ep (src/Bitboard.sol#643) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Bitboard.sol:480: Bitboard._anyLegal(Bitboard.Pos,bool).scratch (src/Bitboard.sol#480) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Bitboard.sol:425: Bitboard.isLegal(Bitboard.Pos,uint16,bool).scratch (src/Bitboard.sol#425) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ChessEngineV5.sol:497: ChessEngineV5._queening(ChessEngineV5.Ctx,Bitboard.Pos,uint64,uint64,uint64,uint64,uint64).a (src/ChessEngineV5.sol#497) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ChessEngineV5.sol:182: ChessEngineV5._choose(ChessEngineV5.Ctx,uint256,uint256,uint64[8],uint32,uint16).seen (src/ChessEngineV5.sol#182) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Bitboard.sol:400: Bitboard._legalTargets(Bitboard.Pos,Bitboard.Gen,Bitboard.Pos,uint8,bool).ep (src/Bitboard.sol#400) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Bitboard.sol:236: Bitboard.pieceAttacks(Bitboard.Pos,uint64,uint64,bool).a (src/Bitboard.sol#236) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ChessEngineV5.sol:203: ChessEngineV5._choose(ChessEngineV5.Ctx,uint256,uint256,uint64[8],uint32,uint16).refined (src/ChessEngineV5.sol#203) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Bitboard.sol:580: Bitboard.mateInOne(Bitboard.Pos,bool,uint256).scratch (src/Bitboard.sol#580) is a local variable never initialized\n[medium/medium] uninitialized-local at src/IMDuelHook.sol:770: IMDuelHook._repeated(PoolId,IMDuelHook.Game).seen (src/IMDuelHook.sol#770) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ChessEngineV5.sol:414: ChessEngineV5._placement(ChessEngineV5.Ctx,uint8,uint8,uint8,uint8,bool,bool).near (src/ChessEngineV5.sol#414) is a local variable never initialized\n[medium/medium] uninitialized-local at src/IMDuelHook.sol:641: IMDuelHook._apply(PoolId,IMDuelHook.Game,uint16,Rules.Played,IMDuelHook.Trade,uint256).reason (src/IMDuelHook.sol#641) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ChessEngineV5.sol:276: ChessEngineV5._context(uint256,uint32,uint32,bool,bool).nonPawn (src/ChessEngineV5.sol#276) is a local variable never initialized\n[medium/medium] uninitialized-local at src/ChessEngineV5.sol:377: ChessEngineV5._cheap(ChessEngineV5.Ctx,uint16).squeeze (src/ChessEngineV5.sol#377) is a local variable never initialized\n[medium/medium] uninitialized-local at src/IMDuelHook.sol:637: IMDuelHook._apply(PoolId,IMDuelHook.Game,uint16,Rules.Played,IMDuelHook.Trade,uint256).result (src/IMDuelHook.sol#637) is a local variable never initialized\n[medium/medium] unused-return at src/IMDuelHook.sol:384: IMDuelHook._withdraw(address,Currency,address) (src/IMDuelHook.sol#384-390) ignores return value by manager.unlock(abi.encode(uint8(0),abi.encode(to,c,amount - 1))) (src/IMDuelHook.sol#388)\n[medium/medium] unused-return at src/IMDuelFeeRouter.sol:63: IMDuelFeeRouter.constructor(IPoolFees,uint64,IERC20,IERC20,address,address,address) (src/IMDuelFeeRouter.sol#63-85) ignores return value by (key,None,None,None) = factory_.positionOf(launchNumber_) (src/IMDuelFeeRouter.sol#72)\n[medium/medium] unused-return at src/IMDuelFeeRouter.sol:123: IMDuelFeeRouter._collect() (src/IMDuelFeeRouter.sol#123-128) ignores return value by factory.claimFees(launchNumber) (src/IMDuelFeeRouter.sol#124)\n[low/high] shadowing-local at src/ChessEngineV5.sol:817: ChessEngineV5._mop(ChessEngineV5.Ctx,uint8,uint8,uint8,bool,bool).at (src/ChessEngineV5.sol#705) shadows:\n[low/medium] missing-zero-check at src/IMDuelHook.sol:408: IMDuelHook.unlockCallback(bytes).who (src/IMDuelHook.sol#408) lacks a zero-check on :\n[low/medium] reentrancy-benign at src/IMDuelHook.sol:395: Reentrancy in IMDuelHook.fundChest(PoolKey,bool,uint256) (src/IMDuelHook.sol#395-403):\n[low/medium] reentrancy-benign at src/IMDuelHook.sol:283: Reentrancy in IMDuelHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/IMDuelHook.sol#283-308):\n[low/medium] reentrancy-events at src/IMDuelHook.sol:384: Reentrancy in IMDuelHook._withdraw(address,Currency,address) (src/IMDuelHook.sol#384-390):\n[low/medium] reentrancy-events at src/IMDuelHook.sol:395: Reentrancy in IMDuelHook.fundChest(PoolKey,bool,uint256) (src/IMDuelHook.sol#395-403):\n[low/medium] reentrancy-events at src/IMDuelHook.sol:283: Reentrancy in IMDuelHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/IMDuelHook.sol#283-308):\n[low/medium] return-bomb at src/IMDuelHook.sol:597: IMDuelHook._engine(uint256,bytes) (src/IMDuelHook.sol#597-604) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] timestamp at src/IMDuelStaking.sol:111: IMDuelStaking._keep(uint256,uint256) (src/IMDuelStaking.sol#111-119) uses timestamp for comparisons\n[low/medium] timestamp at src/IMDuelHook.sol:434: IMDuelHook._play(PoolId,PoolKey,IMDuelHook.Game,bool,BalanceDelta,bytes) (src/IMDuelHook.sol#434-467) uses timestamp for comparisons\n[low/medium] timestamp at src/IMDuelFeeRouter.sol:105: IMDuelFeeRouter.handOn() (src/IMDuelFeeRouter.sol#105-114) uses timestamp for comparisons","passed":true},{"durationMs":998,"exitCode":0,"name":"aderyn","output":"[high] contract-locks-ether at src/IMDuelHook.sol:52: Contract locks Ether without a withdraw function\n[high] eth-send-unchecked-address at src/IMDuelFeeRouter.sol:88: ETH transferred without address checks\n[high] incorrect-caret-operator at src/IMDuelHook.sol:243: Incorrect use of caret operator\n[high] reentrancy-state-change at src/IMDuelFeeRouter.sol:72: Reentrancy: State change after external call (3 places)\n[high] unsafe-casting at src/Bitboard.sol:247: Unsafe Casting of integers (4 places)\n[low] empty-require-revert at src/ChessEngineV5.sol:157: Empty `require()` / `revert()` Statement\n[low] internal-function-used-once at src/Bitboard.sol:199: Internal Function Used Only Once (9 places)\n[low] large-numeric-literal at src/ChessEngineV5.sol:34: Large Numeric Literal (21 places)\n[low] literal-instead-of-constant at src/Bitboard.sol:35: Literal Instead of Constant (414 places)\n[low] missing-inheritance at src/IMDuelFeeRouter.sol:36: Missing Inheritance (2 places)\n[low] push-zero-opcode at src/Bitboard.sol:2: PUSH0 Opcode (10 places)\n[low] state-change-without-event at src/IMDuelHook.sol:271: State Change Without Event\n[low] state-no-address-check at src/IMDuelFeeRouter.sol:83: Address State Variable Set Without Checks\n[low] unchecked-return at src/IMDuelFeeRouter.sol:110: Unchecked Return (3 places)\n[low] uninitialized-local-variable at src/ChessEngineV5.sol:164: Uninitialized Local Variable (8 places)\n[low] unsafe-erc20-operation at src/IMDuelHook.sol:420: Unsafe ERC20 Operation\n[low] unspecific-solidity-pragma at src/ChessEngineV5.sol:2: Unspecific Solidity Pragma (6 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"cbd8025b0ede053da183ef44605039a56caf5c7470f1d72a5873aa6fa7c4cac2","verifiedTreeHash":"0d623b6ab6d8c78d0be0f5da4c777d394d32a59a","verifierVersion":"0.1.0+df310a90"}]}